@calimero-network/mero-react 1.0.0-beta.1 → 1.1.0
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/README.md +201 -125
- package/dist/index.cjs +1301 -201
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +296 -31
- package/dist/index.d.ts +296 -31
- package/dist/index.js +1248 -199
- package/dist/index.js.map +1 -1
- package/package.json +24 -10
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/storage/index.ts","../src/types.ts","../src/context/MeroContext.tsx","../src/components/LoginModal.tsx","../src/components/ConnectButton.tsx"],"names":["AppMode","ConnectionType","EventStreamMode","useState","setNodeUrl","useEffect","useCallback","jsx","useRef","useMemo","jsxs","MeroLogo","Fragment"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Storage utilities for mero-react\n * \n * Provides localStorage-based token storage and other persistence utilities.\n */\n\nimport type { TokenStorage, TokenData } from '@calimero-network/mero-js';\n\n// Storage keys\nconst STORAGE_KEYS = {\n ACCESS_TOKEN: 'mero:access_token',\n REFRESH_TOKEN: 'mero:refresh_token',\n EXPIRES_AT: 'mero:expires_at',\n NODE_URL: 'mero:node_url',\n APPLICATION_ID: 'mero:application_id',\n CONTEXT_ID: 'mero:context_id',\n} as const;\n\n/**\n * Check if localStorage is available\n */\nfunction isLocalStorageAvailable(): boolean {\n try {\n if (typeof window === 'undefined' || !window.localStorage) {\n return false;\n }\n // Test that we can actually write to localStorage\n const testKey = '__mero_test__';\n localStorage.setItem(testKey, 'test');\n localStorage.removeItem(testKey);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * localStorage-based TokenStorage implementation for MeroJs\n */\nexport const localStorageTokenStorage: TokenStorage = {\n async get(): Promise<TokenData | null> {\n if (!isLocalStorageAvailable()) {\n return null;\n }\n\n try {\n const accessToken = localStorage.getItem(STORAGE_KEYS.ACCESS_TOKEN);\n const refreshToken = localStorage.getItem(STORAGE_KEYS.REFRESH_TOKEN);\n const expiresAt = localStorage.getItem(STORAGE_KEYS.EXPIRES_AT);\n\n if (!accessToken || !refreshToken) {\n return null;\n }\n\n return {\n access_token: accessToken,\n refresh_token: refreshToken,\n expires_at: expiresAt ? parseInt(expiresAt, 10) : Date.now() + 3600000,\n };\n } catch (e) {\n console.error('[mero-react] Failed to get token from storage:', e);\n return null;\n }\n },\n\n async set(token: TokenData): Promise<void> {\n if (!isLocalStorageAvailable()) {\n return;\n }\n\n try {\n localStorage.setItem(STORAGE_KEYS.ACCESS_TOKEN, token.access_token);\n localStorage.setItem(STORAGE_KEYS.REFRESH_TOKEN, token.refresh_token);\n localStorage.setItem(STORAGE_KEYS.EXPIRES_AT, token.expires_at.toString());\n } catch (e) {\n console.error('[mero-react] Failed to save token to storage:', e);\n }\n },\n\n async clear(): Promise<void> {\n if (!isLocalStorageAvailable()) {\n return;\n }\n\n try {\n localStorage.removeItem(STORAGE_KEYS.ACCESS_TOKEN);\n localStorage.removeItem(STORAGE_KEYS.REFRESH_TOKEN);\n localStorage.removeItem(STORAGE_KEYS.EXPIRES_AT);\n } catch (e) {\n console.error('[mero-react] Failed to clear token from storage:', e);\n }\n },\n};\n\n/**\n * Get the stored node URL\n */\nexport function getNodeUrl(): string | null {\n if (!isLocalStorageAvailable()) return null;\n return localStorage.getItem(STORAGE_KEYS.NODE_URL);\n}\n\n/**\n * Set the node URL\n */\nexport function setNodeUrl(url: string): void {\n if (!isLocalStorageAvailable()) return;\n localStorage.setItem(STORAGE_KEYS.NODE_URL, url);\n}\n\n/**\n * Clear the node URL\n */\nexport function clearNodeUrl(): void {\n if (!isLocalStorageAvailable()) return;\n localStorage.removeItem(STORAGE_KEYS.NODE_URL);\n}\n\n/**\n * Get the stored application ID\n */\nexport function getApplicationId(): string | null {\n if (!isLocalStorageAvailable()) return null;\n return localStorage.getItem(STORAGE_KEYS.APPLICATION_ID);\n}\n\n/**\n * Set the application ID\n */\nexport function setApplicationId(id: string): void {\n if (!isLocalStorageAvailable()) return;\n localStorage.setItem(STORAGE_KEYS.APPLICATION_ID, id);\n}\n\n/**\n * Clear the application ID\n */\nexport function clearApplicationId(): void {\n if (!isLocalStorageAvailable()) return;\n localStorage.removeItem(STORAGE_KEYS.APPLICATION_ID);\n}\n\n/**\n * Get the stored context ID\n */\nexport function getContextId(): string | null {\n if (!isLocalStorageAvailable()) return null;\n return localStorage.getItem(STORAGE_KEYS.CONTEXT_ID);\n}\n\n/**\n * Set the context ID\n */\nexport function setContextId(id: string): void {\n if (!isLocalStorageAvailable()) return;\n localStorage.setItem(STORAGE_KEYS.CONTEXT_ID, id);\n}\n\n/**\n * Clear the context ID\n */\nexport function clearContextId(): void {\n if (!isLocalStorageAvailable()) return;\n localStorage.removeItem(STORAGE_KEYS.CONTEXT_ID);\n}\n\n/**\n * Clear all mero-react storage\n */\nexport function clearAllStorage(): void {\n if (!isLocalStorageAvailable()) return;\n Object.values(STORAGE_KEYS).forEach((key) => {\n localStorage.removeItem(key);\n });\n}\n\nexport { STORAGE_KEYS };\n","/**\n * Types for mero-react\n */\n\nimport type { MeroJs } from '@calimero-network/mero-js';\n\n/**\n * Application mode determines the permission scope\n */\nexport enum AppMode {\n /** Single-context: auth flow handles context selection */\n SingleContext = 'single-context',\n /** Multi-context: user can manage multiple contexts */\n MultiContext = 'multi-context',\n /** Admin: full administrative access */\n Admin = 'admin',\n}\n\n/**\n * Connection type for the login modal\n */\nexport enum ConnectionType {\n /** Show both local and remote options */\n RemoteAndLocal = 'remote-and-local',\n /** Show only remote option */\n Remote = 'remote',\n /** Show only local option */\n Local = 'local',\n /** Custom URL (skip modal) */\n Custom = 'custom',\n}\n\n/**\n * Custom connection configuration\n */\nexport interface CustomConnectionConfig {\n type: ConnectionType.Custom;\n url: string;\n}\n\n/**\n * Event streaming mode\n */\nexport enum EventStreamMode {\n WebSocket = 'websocket',\n SSE = 'sse',\n}\n\n/**\n * Context for an application\n */\nexport interface AppContext {\n contextId: string;\n executorId: string;\n applicationId: string;\n}\n\n/**\n * Result of an RPC execution\n */\nexport interface ExecutionResult<T = unknown> {\n success: boolean;\n result?: T;\n error?: string;\n}\n\n/**\n * Mero context value exposed by useMero hook\n */\nexport interface MeroContextValue {\n /** The MeroJs instance (null if not connected) */\n mero: MeroJs | null;\n /** Whether the user is authenticated */\n isAuthenticated: boolean;\n /** Whether the connection is online */\n isOnline: boolean;\n /** The current node URL */\n nodeUrl: string | null;\n /** The application ID */\n applicationId: string | null;\n /** The context ID (from auth flow) */\n contextId: string | null;\n /** Connect to a node URL and start auth flow */\n connectToNode: (url: string) => void;\n /** Logout and clear tokens */\n logout: () => void;\n /** Loading state */\n isLoading: boolean;\n}\n\n/**\n * MeroProvider configuration\n */\nexport interface MeroProviderConfig {\n /** Application mode */\n mode: AppMode;\n /** Package name (for registry-based apps) */\n packageName?: string;\n /** Package version (optional, defaults to latest) */\n packageVersion?: string;\n /** Registry URL (optional) */\n registryUrl?: string;\n /** Legacy: Application ID (hash-based) */\n applicationId?: string;\n /** Application path for auth callback */\n applicationPath?: string;\n /** Event streaming mode */\n eventStreamMode?: EventStreamMode;\n /** Request timeout in milliseconds */\n timeoutMs?: number;\n}\n","/**\n * MeroContext - React Context for MeroJs\n * \n * Provides MeroJs instance management, authentication state,\n * and connection handling through React Context.\n */\n\nimport React, {\n createContext,\n useContext,\n useState,\n useEffect,\n useCallback,\n useRef,\n useMemo,\n} from 'react';\nimport { MeroJs } from '@calimero-network/mero-js';\nimport {\n localStorageTokenStorage,\n getNodeUrl,\n setNodeUrl,\n getApplicationId,\n setApplicationId,\n getContextId,\n setContextId,\n clearAllStorage,\n} from '../storage';\nimport type {\n MeroContextValue,\n MeroProviderConfig,\n AppMode,\n} from '../types';\nimport { AppMode as AppModeEnum } from '../types';\n\n// Default context value\nconst defaultContextValue: MeroContextValue = {\n mero: null,\n isAuthenticated: false,\n isOnline: true,\n nodeUrl: null,\n applicationId: null,\n contextId: null,\n connectToNode: () => {},\n logout: () => {},\n isLoading: true,\n};\n\n// Create context\nconst MeroContext = createContext<MeroContextValue>(defaultContextValue);\n\n/**\n * Get permissions based on app mode\n */\nfunction getPermissionsForMode(mode: AppMode): string[] {\n switch (mode) {\n case AppModeEnum.SingleContext:\n return ['context:execute'];\n case AppModeEnum.MultiContext:\n return ['context:create', 'context:list', 'context:execute'];\n case AppModeEnum.Admin:\n return ['admin'];\n default:\n throw new Error(`Unsupported application mode: ${mode}`);\n }\n}\n\n/**\n * Redirect to auth login\n */\nfunction redirectToAuthLogin(params: {\n nodeUrl: string;\n callbackUrl: string;\n permissions: string[];\n mode: AppMode;\n packageName?: string;\n packageVersion?: string;\n registryUrl?: string;\n applicationId?: string;\n applicationPath?: string;\n}): void {\n const authParams = new URLSearchParams();\n authParams.append('callback-url', params.callbackUrl);\n authParams.append('permissions', params.permissions.join(','));\n authParams.append('mode', params.mode);\n\n if (params.packageName) {\n authParams.append('package-name', params.packageName);\n if (params.packageVersion) {\n authParams.append('package-version', params.packageVersion);\n }\n if (params.registryUrl) {\n authParams.append('registry-url', params.registryUrl);\n }\n } else if (params.applicationId) {\n authParams.append('application-id', params.applicationId);\n }\n\n if (params.applicationPath) {\n authParams.append('application-path', params.applicationPath);\n }\n\n // Store node URL for callback\n authParams.append('app-url', params.nodeUrl);\n\n window.location.href = `${params.nodeUrl}/auth/login?${authParams.toString()}`;\n}\n\n/**\n * MeroProvider Props\n */\nexport interface MeroProviderProps extends MeroProviderConfig {\n children: React.ReactNode;\n}\n\n/**\n * MeroProvider - Provides MeroJs instance and auth state to the app\n */\nexport function MeroProvider({\n children,\n mode,\n packageName,\n packageVersion,\n registryUrl,\n applicationId: propApplicationId,\n applicationPath,\n timeoutMs = 30000,\n}: MeroProviderProps) {\n // State\n const [mero, setMero] = useState<MeroJs | null>(null);\n const [isAuthenticated, setIsAuthenticated] = useState(false);\n const [isOnline, setIsOnline] = useState(true);\n const [isLoading, setIsLoading] = useState(true);\n const [nodeUrl, setNodeUrlState] = useState<string | null>(() => getNodeUrl());\n const [applicationId, setApplicationIdState] = useState<string | null>(\n () => getApplicationId() || propApplicationId || null\n );\n const [contextId, setContextIdState] = useState<string | null>(() => getContextId());\n\n // Refs\n const meroRef = useRef<MeroJs | null>(null);\n\n /**\n * Create or update MeroJs instance\n */\n const createMeroInstance = useCallback(\n (url: string): MeroJs => {\n const instance = new MeroJs({\n baseUrl: url,\n tokenStorage: localStorageTokenStorage,\n timeoutMs,\n });\n meroRef.current = instance;\n return instance;\n },\n [timeoutMs]\n );\n\n /**\n * Check if authenticated by making a test API call\n */\n const checkAuth = useCallback(async (instance: MeroJs): Promise<boolean> => {\n try {\n await instance.admin.contexts.listContexts();\n return true;\n } catch {\n return false;\n }\n }, []);\n\n /**\n * Process auth callback from URL hash\n */\n const processAuthCallback = useCallback(() => {\n const url = new URL(window.location.href);\n const rawHash = url.hash;\n const hash = rawHash.slice(1); // Remove leading #\n \n console.log('========== AUTH CALLBACK DEBUG ==========');\n console.log('Raw URL:', window.location.href);\n console.log('Raw hash:', rawHash);\n console.log('Hash (without #):', hash);\n \n if (!hash) {\n console.log('No hash found, skipping auth callback');\n console.log('==========================================');\n return false;\n }\n\n const params = new URLSearchParams(hash);\n \n // Log ALL params received\n console.log('All hash params:');\n for (const [key, value] of params.entries()) {\n console.log(` ${key}: ${value.substring(0, 50)}${value.length > 50 ? '...' : ''}`);\n }\n console.log('==========================================');\n \n const accessToken = params.get('access_token');\n const refreshToken = params.get('refresh_token');\n // Try multiple parameter names for application ID\n const appId = params.get('application_id') || params.get('applicationId') || params.get('app_id');\n // Try multiple parameter names for context ID \n const ctxId = params.get('context_id') || params.get('contextId') || params.get('context');\n const expiresIn = params.get('expires_in');\n // Try multiple parameter names for node URL (for SSO from Tauri app)\n const nodeUrlParam = params.get('node_url') || params.get('nodeUrl') || params.get('node');\n\n if (!accessToken || !refreshToken) return false;\n\n // If node_url is provided, save it (SSO flow from Tauri)\n if (nodeUrlParam) {\n const decodedNodeUrl = decodeURIComponent(nodeUrlParam);\n setNodeUrl(decodedNodeUrl);\n setNodeUrlState(decodedNodeUrl);\n console.log('[mero-react] SSO: Node URL from hash params:', decodedNodeUrl);\n }\n\n try {\n // Decode tokens\n const decodedAccess = decodeURIComponent(accessToken);\n const decodedRefresh = decodeURIComponent(refreshToken);\n\n // Calculate expiry - try to extract from JWT or use provided expires_in\n let expiresAt = Date.now() + 3600000; // 1 hour default\n \n if (expiresIn) {\n // If expires_in is provided in callback, use it\n expiresAt = Date.now() + parseInt(expiresIn, 10) * 1000;\n } else {\n // Try to extract exp from JWT payload\n try {\n const parts = decodedAccess.split('.');\n if (parts.length === 3) {\n const payload = JSON.parse(atob(parts[1]));\n if (payload.exp) {\n expiresAt = payload.exp * 1000; // JWT exp is in seconds\n }\n }\n } catch {\n // JWT parsing failed, use default\n }\n }\n\n // Store tokens via TokenStorage\n localStorageTokenStorage.set({\n access_token: decodedAccess,\n refresh_token: decodedRefresh,\n expires_at: expiresAt,\n });\n\n // Store application ID if provided\n if (appId) {\n setApplicationId(appId);\n setApplicationIdState(appId);\n }\n\n // Store context ID if provided\n if (ctxId) {\n setContextId(ctxId);\n setContextIdState(ctxId);\n }\n\n // Clean URL - remove all auth params (handle various naming conventions)\n params.delete('access_token');\n params.delete('refresh_token');\n params.delete('application_id');\n params.delete('applicationId');\n params.delete('app_id');\n params.delete('context_id');\n params.delete('contextId');\n params.delete('context');\n params.delete('expires_in');\n params.delete('node_url');\n params.delete('nodeUrl');\n params.delete('node');\n const newHash = params.toString();\n url.hash = newHash ? `#${newHash}` : '';\n window.history.replaceState({}, document.title, url.toString());\n \n console.log('[mero-react] Stored contextId:', ctxId, 'applicationId:', appId);\n\n return true;\n } catch (e) {\n console.error('[mero-react] Failed to process auth callback:', e);\n return false;\n }\n }, []);\n\n /**\n * Connect to a node and start the auth flow\n */\n const connectToNode = useCallback(\n (url: string) => {\n // Save node URL\n setNodeUrl(url);\n setNodeUrlState(url);\n\n // Build callback URL (strip existing auth params)\n const callbackUrl = new URL(window.location.href);\n if (callbackUrl.hash) {\n const hashParams = new URLSearchParams(callbackUrl.hash.substring(1));\n hashParams.delete('access_token');\n hashParams.delete('refresh_token');\n hashParams.delete('application_id');\n callbackUrl.hash = hashParams.toString() ? `#${hashParams.toString()}` : '';\n }\n\n const permissions = getPermissionsForMode(mode);\n\n redirectToAuthLogin({\n nodeUrl: url,\n callbackUrl: callbackUrl.toString(),\n permissions,\n mode,\n packageName,\n packageVersion,\n registryUrl,\n applicationId: propApplicationId,\n applicationPath,\n });\n },\n [mode, packageName, packageVersion, registryUrl, propApplicationId, applicationPath]\n );\n\n /**\n * Logout function\n */\n const logout = useCallback(async () => {\n // Clear MeroJs tokens\n if (meroRef.current) {\n await meroRef.current.clearToken();\n }\n\n // Clear all storage\n clearAllStorage();\n\n // Reset state\n setMero(null);\n setIsAuthenticated(false);\n setNodeUrlState(null);\n setApplicationIdState(null);\n setContextIdState(null);\n meroRef.current = null;\n }, []);\n\n /**\n * Initialize on mount\n */\n useEffect(() => {\n const init = async () => {\n console.log('[mero-react] Init starting...');\n console.log('[mero-react] Current URL:', window.location.href);\n console.log('[mero-react] Stored nodeUrl:', getNodeUrl());\n console.log('[mero-react] Stored contextId:', getContextId());\n console.log('[mero-react] Stored applicationId:', getApplicationId());\n \n // Check for auth callback first\n const hasCallback = processAuthCallback();\n console.log('[mero-react] hasCallback:', hasCallback);\n\n const savedUrl = getNodeUrl();\n if (!savedUrl) {\n setIsLoading(false);\n return;\n }\n\n // Create MeroJs instance\n const instance = createMeroInstance(savedUrl);\n await instance.init();\n\n // Check if authenticated\n const authed = await checkAuth(instance);\n if (authed) {\n setMero(instance);\n setIsAuthenticated(true);\n setIsOnline(true);\n } else if (hasCallback) {\n // Had callback but auth failed - maybe token expired\n setMero(instance);\n setIsAuthenticated(false);\n }\n\n setIsLoading(false);\n };\n\n init();\n }, [createMeroInstance, checkAuth, processAuthCallback]);\n\n /**\n * Periodic health check\n */\n useEffect(() => {\n if (!isAuthenticated || !meroRef.current) return;\n\n const interval = setInterval(async () => {\n const instance = meroRef.current;\n if (!instance) return;\n\n const healthy = await checkAuth(instance);\n if (!healthy && isOnline) {\n setIsOnline(false);\n } else if (healthy && !isOnline) {\n setIsOnline(true);\n }\n }, 5000);\n\n return () => clearInterval(interval);\n }, [isAuthenticated, isOnline, checkAuth]);\n\n /**\n * Sync applicationId from props\n */\n useEffect(() => {\n if (propApplicationId && !applicationId) {\n setApplicationIdState(propApplicationId);\n }\n }, [propApplicationId, applicationId]);\n\n // Context value\n const contextValue = useMemo<MeroContextValue>(\n () => ({\n mero,\n isAuthenticated,\n isOnline,\n nodeUrl,\n applicationId,\n contextId,\n connectToNode,\n logout,\n isLoading,\n }),\n [mero, isAuthenticated, isOnline, nodeUrl, applicationId, contextId, connectToNode, logout, isLoading]\n );\n\n return (\n <MeroContext.Provider value={contextValue}>\n {children}\n </MeroContext.Provider>\n );\n}\n\n/**\n * useMero hook - Access MeroJs and auth state\n */\nexport function useMero(): MeroContextValue {\n const context = useContext(MeroContext);\n if (context === undefined) {\n throw new Error('useMero must be used within a MeroProvider');\n }\n return context;\n}\n\nexport { MeroContext };\n","/**\n * LoginModal - Modal for connecting to a Calimero node\n * \n * Allows users to select local or remote node connection.\n */\n\nimport { useState, useEffect, useCallback } from 'react';\nimport { createPortal } from 'react-dom';\nimport type { ConnectionType, CustomConnectionConfig } from '../types';\nimport { ConnectionType as ConnectionTypeEnum } from '../types';\n\nexport interface LoginModalProps {\n /** Callback when user connects */\n onConnect: (url: string) => void;\n /** Callback when modal is closed */\n onClose: () => void;\n /** Connection type determines what options to show */\n connectionType: ConnectionType | CustomConnectionConfig;\n /** Whether the modal is open */\n isOpen: boolean;\n}\n\n/**\n * Validate URL format\n */\nfunction isValidUrl(urlString: string): boolean {\n if (!urlString || urlString.trim() === '') {\n return false;\n }\n\n try {\n const urlToTest =\n urlString.startsWith('http://') || urlString.startsWith('https://')\n ? urlString\n : `https://${urlString}`;\n\n const url = new URL(urlToTest);\n\n if (url.protocol !== 'http:' && url.protocol !== 'https:') {\n return false;\n }\n\n if (!url.hostname) {\n return false;\n }\n\n const hostname = url.hostname;\n\n // Allow localhost\n if (hostname === 'localhost') {\n return true;\n }\n\n // Check for valid IP address\n const ipv4Regex = /^(\\d{1,3}\\.){3}\\d{1,3}$/;\n if (ipv4Regex.test(hostname)) {\n const octets = hostname.split('.').map(Number);\n return octets.every((octet) => octet >= 0 && octet <= 255);\n }\n\n // Check for valid domain name\n const domainRegex =\n /^[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n return domainRegex.test(hostname);\n } catch {\n return false;\n }\n}\n\n// Inline styles for the modal\nconst styles = {\n overlay: {\n position: 'fixed' as const,\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.75)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: 10000,\n padding: '1rem',\n },\n content: {\n backgroundColor: '#1f2937',\n borderRadius: '12px',\n padding: '2rem',\n maxWidth: '400px',\n width: '100%',\n position: 'relative' as const,\n border: '1px solid #374151',\n boxShadow: '0 25px 50px -12px rgba(0, 0, 0, 0.5)',\n },\n closeButton: {\n position: 'absolute' as const,\n top: '1rem',\n right: '1rem',\n background: 'none',\n border: 'none',\n fontSize: '1.5rem',\n color: '#9ca3af',\n cursor: 'pointer',\n padding: '0.25rem',\n lineHeight: 1,\n },\n header: {\n display: 'flex',\n flexDirection: 'column' as const,\n alignItems: 'center',\n gap: '0.75rem',\n marginBottom: '1.5rem',\n },\n title: {\n fontSize: '1.25rem',\n fontWeight: 600,\n color: '#f3f4f6',\n margin: 0,\n },\n info: {\n color: '#9ca3af',\n textAlign: 'center' as const,\n marginBottom: '1.5rem',\n fontSize: '0.875rem',\n },\n error: {\n color: '#ef4444',\n backgroundColor: 'rgba(239, 68, 68, 0.1)',\n border: '1px solid rgba(239, 68, 68, 0.3)',\n borderRadius: '6px',\n padding: '0.75rem',\n marginBottom: '1rem',\n fontSize: '0.875rem',\n textAlign: 'center' as const,\n },\n radioGroup: {\n display: 'flex',\n gap: '1rem',\n marginBottom: '1rem',\n justifyContent: 'center',\n },\n radioLabel: {\n display: 'flex',\n alignItems: 'center',\n gap: '0.5rem',\n color: '#e5e7eb',\n cursor: 'pointer',\n padding: '0.5rem 1rem',\n borderRadius: '6px',\n border: '1px solid #374151',\n backgroundColor: '#111827',\n transition: 'all 0.2s',\n },\n radioLabelActive: {\n borderColor: '#3b82f6',\n backgroundColor: 'rgba(59, 130, 246, 0.1)',\n },\n input: {\n width: '100%',\n padding: '0.75rem 1rem',\n borderRadius: '6px',\n border: '1px solid #374151',\n backgroundColor: '#111827',\n color: '#f3f4f6',\n fontSize: '0.875rem',\n outline: 'none',\n marginBottom: '1rem',\n boxSizing: 'border-box' as const,\n },\n localInfo: {\n color: '#9ca3af',\n fontSize: '0.875rem',\n textAlign: 'center' as const,\n padding: '0.75rem',\n backgroundColor: '#111827',\n borderRadius: '6px',\n marginBottom: '1rem',\n },\n buttonGroup: {\n display: 'flex',\n justifyContent: 'center',\n },\n button: {\n padding: '0.75rem 2rem',\n borderRadius: '6px',\n border: 'none',\n fontSize: '0.875rem',\n fontWeight: 600,\n cursor: 'pointer',\n backgroundColor: '#3b82f6',\n color: 'white',\n transition: 'all 0.2s',\n },\n buttonDisabled: {\n opacity: 0.5,\n cursor: 'not-allowed',\n },\n loading: {\n display: 'flex',\n flexDirection: 'column' as const,\n alignItems: 'center',\n gap: '1rem',\n padding: '2rem',\n color: '#9ca3af',\n },\n spinner: {\n width: '2rem',\n height: '2rem',\n border: '3px solid #374151',\n borderTopColor: '#3b82f6',\n borderRadius: '50%',\n animation: 'spin 1s linear infinite',\n },\n};\n\n/**\n * LoginModal - Connection modal component\n */\nexport function LoginModal({\n onConnect,\n onClose,\n connectionType,\n isOpen,\n}: LoginModalProps) {\n const [nodeType, setNodeType] = useState<'local' | 'remote'>('local');\n const [nodeUrl, setNodeUrl] = useState<string>('');\n const [isValid, setIsValid] = useState<boolean>(true);\n const [loading, setLoading] = useState<boolean>(false);\n const [error, setError] = useState<string | null>(null);\n\n // Determine what to show\n const shouldShowLocal =\n connectionType === ConnectionTypeEnum.RemoteAndLocal ||\n connectionType === ConnectionTypeEnum.Local;\n const shouldShowRemote =\n connectionType === ConnectionTypeEnum.RemoteAndLocal ||\n connectionType === ConnectionTypeEnum.Remote;\n const shouldShowRadioGroup = shouldShowLocal && shouldShowRemote;\n\n // Load saved URL\n useEffect(() => {\n const savedUrl = localStorage.getItem('mero:node_url');\n if (savedUrl) {\n setNodeUrl(savedUrl);\n }\n }, []);\n\n // Set initial node type\n useEffect(() => {\n if (connectionType === ConnectionTypeEnum.Local) {\n setNodeType('local');\n } else if (connectionType === ConnectionTypeEnum.Remote) {\n setNodeType('remote');\n }\n }, [connectionType]);\n\n // Validate URL\n useEffect(() => {\n if (nodeType === 'remote') {\n setIsValid(isValidUrl(nodeUrl));\n } else {\n setIsValid(true);\n }\n }, [nodeUrl, nodeType]);\n\n const handleConnect = useCallback(async () => {\n if (!isValid) return;\n\n setLoading(true);\n setError(null);\n\n const baseUrl =\n nodeType === 'local' ? 'http://node1.127.0.0.1.nip.io' : nodeUrl;\n\n try {\n // Test connection\n const response = await fetch(\n new URL('admin-api/is-authed', baseUrl).toString()\n );\n\n if (response.ok || response.status === 401) {\n setLoading(false);\n const normalizedUrl = baseUrl.replace(/\\/+$/, '');\n onConnect(normalizedUrl);\n } else {\n throw new Error(`Connection failed: ${response.statusText}`);\n }\n } catch (err) {\n console.error('Connection failed:', err);\n setError('Failed to connect. Please check the URL and try again.');\n setLoading(false);\n }\n }, [isValid, nodeType, nodeUrl, onConnect]);\n\n if (!isOpen) {\n return null;\n }\n\n const modalContent = (\n <>\n {/* Inject keyframes for spinner */}\n <style>{`\n @keyframes spin {\n to { transform: rotate(360deg); }\n }\n `}</style>\n <div style={styles.overlay} onClick={onClose}>\n <div style={styles.content} onClick={(e) => e.stopPropagation()}>\n <button style={styles.closeButton} onClick={onClose}>\n ×\n </button>\n\n <div style={styles.header}>\n <MeroLogo />\n <h1 style={styles.title}>Connect to Calimero</h1>\n </div>\n\n {loading ? (\n <div style={styles.loading}>\n <p>Connecting to node...</p>\n <div style={styles.spinner} />\n </div>\n ) : (\n <>\n <p style={styles.info}>\n {shouldShowRadioGroup\n ? 'Select your Calimero node type to continue.'\n : connectionType === ConnectionTypeEnum.Local\n ? 'Connect to your local Calimero node.'\n : 'Enter your remote Calimero node URL.'}\n </p>\n\n {error && <p style={styles.error}>{error}</p>}\n\n {shouldShowRadioGroup && (\n <div style={styles.radioGroup}>\n <label\n style={{\n ...styles.radioLabel,\n ...(nodeType === 'local' ? styles.radioLabelActive : {}),\n }}\n onClick={() => setNodeType('local')}\n >\n <input\n type=\"radio\"\n value=\"local\"\n checked={nodeType === 'local'}\n onChange={() => setNodeType('local')}\n style={{ display: 'none' }}\n />\n 🏠 Local\n </label>\n <label\n style={{\n ...styles.radioLabel,\n ...(nodeType === 'remote' ? styles.radioLabelActive : {}),\n }}\n onClick={() => setNodeType('remote')}\n >\n <input\n type=\"radio\"\n value=\"remote\"\n checked={nodeType === 'remote'}\n onChange={() => setNodeType('remote')}\n style={{ display: 'none' }}\n />\n 🌐 Remote\n </label>\n </div>\n )}\n\n <div>\n {shouldShowRemote && nodeType === 'remote' ? (\n <input\n type=\"text\"\n value={nodeUrl}\n onChange={(e) => setNodeUrl(e.target.value)}\n placeholder=\"https://your-node-url.calimero.network\"\n style={styles.input}\n onKeyDown={(e) => {\n if (e.key === 'Enter' && isValid) {\n handleConnect();\n }\n }}\n />\n ) : shouldShowLocal ? (\n <p style={styles.localInfo}>\n Using default local node: <br />\n <code style={{ color: '#60a5fa' }}>http://node1.127.0.0.1.nip.io</code>\n </p>\n ) : null}\n </div>\n\n <div style={styles.buttonGroup}>\n <button\n onClick={handleConnect}\n disabled={!isValid || loading}\n style={{\n ...styles.button,\n ...(!isValid || loading ? styles.buttonDisabled : {}),\n }}\n >\n Connect\n </button>\n </div>\n </>\n )}\n </div>\n </div>\n </>\n );\n\n // Use portal to render at document root, outside any container styling\n return createPortal(modalContent, document.body);\n}\n\n/**\n * Simple Calimero logo\n */\nfunction MeroLogo() {\n return (\n <svg\n width=\"40\"\n height=\"40\"\n viewBox=\"0 0 24 24\"\n fill=\"#3b82f6\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm-1-13h2v6h-2zm0 8h2v2h-2z\" />\n </svg>\n );\n}\n\nexport default LoginModal;\n","/**\n * ConnectButton - A button component for connecting to Calimero\n * \n * Shows connection status and provides login/logout functionality.\n * Includes built-in LoginModal for node selection.\n */\n\nimport React, { useState, useEffect, useRef, useMemo } from 'react';\nimport { useMero } from '../context';\nimport { LoginModal } from './LoginModal';\nimport type { ConnectionType, CustomConnectionConfig } from '../types';\nimport { ConnectionType as ConnectionTypeEnum } from '../types';\n\nexport interface ConnectButtonProps {\n /** Connection type for login modal */\n connectionType?: ConnectionType | CustomConnectionConfig;\n /** Custom class name */\n className?: string;\n /** Custom styles */\n style?: React.CSSProperties;\n}\n\n/**\n * ConnectButton - Displays connection status and handles login/logout\n */\nexport function ConnectButton({\n connectionType = ConnectionTypeEnum.RemoteAndLocal,\n className,\n style,\n}: ConnectButtonProps) {\n const { isAuthenticated, connectToNode, logout, nodeUrl, isOnline } = useMero();\n const [isDropdownOpen, setIsDropdownOpen] = useState(false);\n const [isModalOpen, setIsModalOpen] = useState(false);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n // Close dropdown when clicking outside\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n dropdownRef.current &&\n !dropdownRef.current.contains(event.target as Node)\n ) {\n setIsDropdownOpen(false);\n }\n };\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, []);\n\n const dashboardUrl = useMemo(() => {\n if (!isAuthenticated || !nodeUrl) return '#';\n return new URL('admin-dashboard/', nodeUrl).toString();\n }, [isAuthenticated, nodeUrl]);\n\n const handleConnect = () => {\n // If Custom type with URL, connect directly\n if (\n typeof connectionType === 'object' &&\n connectionType.type === ConnectionTypeEnum.Custom\n ) {\n connectToNode(connectionType.url);\n return;\n }\n\n // Otherwise, open modal\n setIsModalOpen(true);\n };\n\n const handleModalConnect = (url: string) => {\n setIsModalOpen(false);\n connectToNode(url);\n };\n\n // Reconnecting state\n if (isAuthenticated && !isOnline) {\n return (\n <button\n className={`mero-connect-button mero-reconnecting ${className || ''}`}\n style={style}\n disabled\n >\n <MeroLogo />\n Reconnecting...\n </button>\n );\n }\n\n // Connected state\n if (isAuthenticated) {\n return (\n <div ref={dropdownRef} className=\"mero-connect-container\" style={{ position: 'relative', display: 'inline-block' }}>\n <button\n className={`mero-connect-button mero-connected ${className || ''}`}\n style={style}\n onClick={() => setIsDropdownOpen((prev) => !prev)}\n >\n <MeroLogo />\n Connected\n </button>\n {isDropdownOpen && (\n <div className=\"mero-dropdown\">\n <div className=\"mero-dropdown-info\" title={nodeUrl || ''}>\n {nodeUrl}\n </div>\n <a\n href={dashboardUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"mero-dropdown-item\"\n >\n Dashboard\n </a>\n <button\n className=\"mero-dropdown-item\"\n onClick={() => {\n setIsDropdownOpen(false);\n logout();\n }}\n >\n Log out\n </button>\n </div>\n )}\n </div>\n );\n }\n\n // Disconnected state\n return (\n <>\n <button\n className={`mero-connect-button ${className || ''}`}\n style={style}\n onClick={handleConnect}\n >\n <MeroLogo />\n Connect\n </button>\n <LoginModal\n isOpen={isModalOpen}\n onConnect={handleModalConnect}\n onClose={() => setIsModalOpen(false)}\n connectionType={typeof connectionType === 'object' ? ConnectionTypeEnum.RemoteAndLocal : connectionType}\n />\n </>\n );\n}\n\n/**\n * Simple Calimero logo component\n */\nfunction MeroLogo() {\n return (\n <svg\n className=\"mero-logo\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm-1-13h2v6h-2zm0 8h2v2h-2z\" />\n </svg>\n );\n}\n\nexport default ConnectButton;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/types.ts","../src/storage/index.ts","../src/context/MeroContext.tsx","../src/components/LoginModal.tsx","../src/components/ConnectButton.tsx","../src/hooks/index.ts"],"names":["AppMode","ConnectionType","useState","setNodeUrl","useEffect","useCallback","jsx","useRef","useMemo","jsxs","MeroLogo","Fragment","createContext"],"mappings":";;;;;;;;;AASO,IAAK,OAAA,qBAAAA,QAAAA,KAAL;AAEL,EAAAA,SAAA,eAAA,CAAA,GAAgB,gBAAA;AAEhB,EAAAA,SAAA,cAAA,CAAA,GAAe,eAAA;AAEf,EAAAA,SAAA,OAAA,CAAA,GAAQ,OAAA;AANE,EAAA,OAAAA,QAAAA;AAAA,CAAA,EAAA,OAAA,IAAA,EAAA;AAYL,IAAK,cAAA,qBAAAC,eAAAA,KAAL;AAEL,EAAAA,gBAAA,gBAAA,CAAA,GAAiB,kBAAA;AAEjB,EAAAA,gBAAA,QAAA,CAAA,GAAS,QAAA;AAET,EAAAA,gBAAA,OAAA,CAAA,GAAQ,OAAA;AAER,EAAAA,gBAAA,QAAA,CAAA,GAAS,QAAA;AARC,EAAA,OAAAA,eAAAA;AAAA,CAAA,EAAA,cAAA,IAAA,EAAA;;;ACZZ,IAAM,YAAA,GAAe;AAAA,EACnB,YAAA,EAAc,mBAAA;AAAA,EACd,aAAA,EAAe,oBAAA;AAAA,EACf,UAAA,EAAY,iBAAA;AAAA,EACZ,QAAA,EAAU,eAAA;AAAA,EACV,cAAA,EAAgB,qBAAA;AAAA,EAChB,UAAA,EAAY,iBAAA;AAAA,EACZ,gBAAA,EAAkB;AACpB,CAAA;AAEA,IAAI,iBAAA,GAAoC,IAAA;AAExC,SAAS,uBAAA,GAAmC;AAC1C,EAAA,IAAI,iBAAA,KAAsB,MAAM,OAAO,iBAAA;AACvC,EAAA,IAAI;AACF,IAAA,IAAI,OAAO,MAAA,KAAW,WAAA,IAAe,CAAC,OAAO,YAAA,EAAc;AACzD,MAAA,iBAAA,GAAoB,KAAA;AACpB,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,MAAM,OAAA,GAAU,eAAA;AAChB,IAAA,YAAA,CAAa,OAAA,CAAQ,SAAS,MAAM,CAAA;AACpC,IAAA,YAAA,CAAa,WAAW,OAAO,CAAA;AAC/B,IAAA,iBAAA,GAAoB,IAAA;AAAA,EACtB,CAAA,CAAA,MAAQ;AACN,IAAA,iBAAA,GAAoB,KAAA;AAAA,EACtB;AACA,EAAA,OAAO,iBAAA;AACT;AAEO,IAAM,wBAAA,GAA2B;AAAA,EACtC,MAAM,GAAA,GAAiC;AACrC,IAAA,IAAI,CAAC,yBAAwB,EAAG;AAC9B,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,WAAA,GAAc,YAAA,CAAa,OAAA,CAAQ,YAAA,CAAa,YAAY,CAAA;AAClE,MAAA,MAAM,YAAA,GAAe,YAAA,CAAa,OAAA,CAAQ,YAAA,CAAa,aAAa,CAAA;AACpE,MAAA,MAAM,SAAA,GAAY,YAAA,CAAa,OAAA,CAAQ,YAAA,CAAa,UAAU,CAAA;AAE9D,MAAA,IAAI,CAAC,WAAA,IAAe,CAAC,YAAA,EAAc;AACjC,QAAA,OAAO,IAAA;AAAA,MACT;AAEA,MAAA,OAAO;AAAA,QACL,YAAA,EAAc,WAAA;AAAA,QACd,aAAA,EAAe,YAAA;AAAA,QACf,UAAA,EAAY,YAAY,QAAA,CAAS,SAAA,EAAW,EAAE,CAAA,GAAI,IAAA,CAAK,KAAI,GAAI;AAAA,OACjE;AAAA,IACF,SAAS,CAAA,EAAG;AACV,MAAA,OAAA,CAAQ,KAAA,CAAM,kDAAkD,CAAC,CAAA;AACjE,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF,CAAA;AAAA,EAEA,MAAM,IAAI,KAAA,EAAiC;AACzC,IAAA,IAAI,CAAC,yBAAwB,EAAG;AAC9B,MAAA;AAAA,IACF;AAEA,IAAA,IAAI;AACF,MAAA,YAAA,CAAa,OAAA,CAAQ,YAAA,CAAa,YAAA,EAAc,KAAA,CAAM,YAAY,CAAA;AAClE,MAAA,YAAA,CAAa,OAAA,CAAQ,YAAA,CAAa,aAAA,EAAe,KAAA,CAAM,aAAa,CAAA;AACpE,MAAA,YAAA,CAAa,QAAQ,YAAA,CAAa,UAAA,EAAY,KAAA,CAAM,UAAA,CAAW,UAAU,CAAA;AAAA,IAC3E,SAAS,CAAA,EAAG;AACV,MAAA,OAAA,CAAQ,KAAA,CAAM,iDAAiD,CAAC,CAAA;AAAA,IAClE;AAAA,EACF,CAAA;AAAA,EAEA,MAAM,KAAA,GAAuB;AAC3B,IAAA,IAAI,CAAC,yBAAwB,EAAG;AAC9B,MAAA;AAAA,IACF;AAEA,IAAA,IAAI;AACF,MAAA,YAAA,CAAa,UAAA,CAAW,aAAa,YAAY,CAAA;AACjD,MAAA,YAAA,CAAa,UAAA,CAAW,aAAa,aAAa,CAAA;AAClD,MAAA,YAAA,CAAa,UAAA,CAAW,aAAa,UAAU,CAAA;AAAA,IACjD,SAAS,CAAA,EAAG;AACV,MAAA,OAAA,CAAQ,KAAA,CAAM,oDAAoD,CAAC,CAAA;AAAA,IACrE;AAAA,EACF;AACF;AAKO,SAAS,UAAA,GAA4B;AAC1C,EAAA,IAAI,CAAC,uBAAA,EAAwB,EAAG,OAAO,IAAA;AACvC,EAAA,OAAO,YAAA,CAAa,OAAA,CAAQ,YAAA,CAAa,QAAQ,CAAA;AACnD;AAKO,SAAS,WAAW,GAAA,EAAmB;AAC5C,EAAA,IAAI,CAAC,yBAAwB,EAAG;AAChC,EAAA,YAAA,CAAa,OAAA,CAAQ,YAAA,CAAa,QAAA,EAAU,GAAG,CAAA;AACjD;AAKO,SAAS,YAAA,GAAqB;AACnC,EAAA,IAAI,CAAC,yBAAwB,EAAG;AAChC,EAAA,YAAA,CAAa,UAAA,CAAW,aAAa,QAAQ,CAAA;AAC/C;AAKO,SAAS,gBAAA,GAAkC;AAChD,EAAA,IAAI,CAAC,uBAAA,EAAwB,EAAG,OAAO,IAAA;AACvC,EAAA,OAAO,YAAA,CAAa,OAAA,CAAQ,YAAA,CAAa,cAAc,CAAA;AACzD;AAKO,SAAS,iBAAiB,EAAA,EAAkB;AACjD,EAAA,IAAI,CAAC,yBAAwB,EAAG;AAChC,EAAA,YAAA,CAAa,OAAA,CAAQ,YAAA,CAAa,cAAA,EAAgB,EAAE,CAAA;AACtD;AAKO,SAAS,kBAAA,GAA2B;AACzC,EAAA,IAAI,CAAC,yBAAwB,EAAG;AAChC,EAAA,YAAA,CAAa,UAAA,CAAW,aAAa,cAAc,CAAA;AACrD;AAKO,SAAS,YAAA,GAA8B;AAC5C,EAAA,IAAI,CAAC,uBAAA,EAAwB,EAAG,OAAO,IAAA;AACvC,EAAA,OAAO,YAAA,CAAa,OAAA,CAAQ,YAAA,CAAa,UAAU,CAAA;AACrD;AAKO,SAAS,aAAa,EAAA,EAAkB;AAC7C,EAAA,IAAI,CAAC,yBAAwB,EAAG;AAChC,EAAA,YAAA,CAAa,OAAA,CAAQ,YAAA,CAAa,UAAA,EAAY,EAAE,CAAA;AAClD;AAKO,SAAS,cAAA,GAAuB;AACrC,EAAA,IAAI,CAAC,yBAAwB,EAAG;AAChC,EAAA,YAAA,CAAa,UAAA,CAAW,aAAa,UAAU,CAAA;AACjD;AAKO,SAAS,kBAAA,GAAoC;AAClD,EAAA,IAAI,CAAC,uBAAA,EAAwB,EAAG,OAAO,IAAA;AACvC,EAAA,OAAO,YAAA,CAAa,OAAA,CAAQ,YAAA,CAAa,gBAAgB,CAAA;AAC3D;AAKO,SAAS,mBAAmB,EAAA,EAAkB;AACnD,EAAA,IAAI,CAAC,yBAAwB,EAAG;AAChC,EAAA,YAAA,CAAa,OAAA,CAAQ,YAAA,CAAa,gBAAA,EAAkB,EAAE,CAAA;AACxD;AAKO,SAAS,oBAAA,GAA6B;AAC3C,EAAA,IAAI,CAAC,yBAAwB,EAAG;AAChC,EAAA,YAAA,CAAa,UAAA,CAAW,aAAa,gBAAgB,CAAA;AACvD;AAKO,SAAS,eAAA,GAAwB;AACtC,EAAA,IAAI,CAAC,yBAAwB,EAAG;AAChC,EAAA,MAAA,CAAO,MAAA,CAAO,YAAY,CAAA,CAAE,OAAA,CAAQ,CAAC,GAAA,KAAQ;AAC3C,IAAA,YAAA,CAAa,WAAW,GAAG,CAAA;AAAA,EAC7B,CAAC,CAAA;AACH;ACvKA,IAAM,WAAA,GAAc,cAAuC,IAAI;AAE/D,IAAM,SAAA,GAAY,OAAO,MAAA,KAAW,WAAA;AAEpC,IAAI,WAAA,GAA6C,IAAA;AACjD,SAAS,aAAA,GAAwC;AAC/C,EAAA,IAAI,CAAC,WAAA,EAAa;AAChB,IAAA,WAAA,GAAc,IAAI,sBAAA,EAAuB;AAAA,EAC3C;AACA,EAAA,OAAO,WAAA;AACT;AAEA,SAAS,sBAAsB,IAAA,EAAyB;AACtD,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAA,gBAAA;AACE,MAAA,OAAO,CAAC,iBAAiB,CAAA;AAAA,IAC3B,KAAA,eAAA;AACE,MAAA,OAAO,CAAC,gBAAA,EAAkB,cAAA,EAAgB,iBAAiB,CAAA;AAAA,IAC7D,KAAA,OAAA;AACE,MAAA,OAAO,CAAC,OAAO,CAAA;AAAA,IACjB;AACE,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,8BAAA,EAAiC,IAAI,CAAA,CAAE,CAAA;AAAA;AAE7D;AAEA,SAAS,eAAe,KAAA,EAAuB;AAC7C,EAAA,IAAI;AACF,IAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAM,GAAG,CAAA;AAC7B,IAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,MAAA,IAAI,GAAA,GAAM,KAAA,CAAM,CAAC,CAAA,CAAE,OAAA,CAAQ,MAAM,GAAG,CAAA,CAAE,OAAA,CAAQ,IAAA,EAAM,GAAG,CAAA;AACvD,MAAA,OAAO,GAAA,CAAI,MAAA,GAAS,CAAA,EAAG,GAAA,IAAO,GAAA;AAC9B,MAAA,MAAM,OAAA,GAA4B,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAG,CAAC,CAAA;AACtD,MAAA,IAAI,OAAA,CAAQ,GAAA,IAAO,OAAA,CAAQ,GAAA,GAAM,CAAA,EAAG;AAClC,QAAA,OAAO,QAAQ,GAAA,GAAM,GAAA;AAAA,MACvB;AAAA,IACF;AAAA,EACF,CAAA,CAAA,MAAQ;AAAA,EAER;AACA,EAAA,OAAO,IAAA,CAAK,KAAI,GAAI,IAAA;AACtB;AAMO,SAAS,YAAA,CAAa;AAAA,EAC3B,QAAA;AAAA,EACA,IAAA;AAAA,EACA,WAAA;AAAA,EACA,cAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA,GAAY;AACd,CAAA,EAAsB;AACpB,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAI,SAAwB,IAAI,CAAA;AACpD,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAI,SAAS,KAAK,CAAA;AAC5D,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,SAAS,IAAI,CAAA;AAC7C,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAS,IAAI,CAAA;AAC/C,EAAA,MAAM,CAAC,OAAA,EAAS,eAAe,IAAI,QAAA,CAAwB,MAAM,YAAY,CAAA;AAC7E,EAAA,MAAM,CAAC,aAAA,EAAe,qBAAqB,CAAA,GAAI,QAAA;AAAA,IAC7C,MAAM,kBAAiB,IAAK;AAAA,GAC9B;AACA,EAAA,MAAM,CAAC,SAAA,EAAW,iBAAiB,IAAI,QAAA,CAAwB,MAAM,cAAc,CAAA;AACnF,EAAA,MAAM,CAAC,eAAA,EAAiB,uBAAuB,IAAI,QAAA,CAAwB,MAAM,oBAAoB,CAAA;AAErG,EAAA,MAAM,OAAA,GAAU,OAAsB,IAAI,CAAA;AAG1C,EAAA,MAAM,WAAA,GAAc,OAA8C,MAAS,CAAA;AAC3E,EAAA,IAAI,WAAA,CAAY,OAAA,KAAY,MAAA,IAAa,SAAA,EAAW;AAClD,IAAA,WAAA,CAAY,OAAA,GAAU,iBAAA,CAAkB,MAAA,CAAO,QAAA,CAAS,IAAI,CAAA;AAAA,EAC9D;AAEA,EAAA,MAAM,kBAAA,GAAqB,WAAA;AAAA,IACzB,CAAC,GAAA,KAAwB;AACvB,MAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,QAAA,OAAA,CAAQ,QAAQ,KAAA,EAAM;AAAA,MACxB;AACA,MAAA,MAAM,QAAA,GAAW,IAAI,MAAA,CAAO;AAAA,QAC1B,OAAA,EAAS,GAAA;AAAA,QACT,YAAY,aAAA,EAAc;AAAA,QAC1B;AAAA,OACD,CAAA;AACD,MAAA,OAAA,CAAQ,OAAA,GAAU,QAAA;AAClB,MAAA,OAAO,QAAA;AAAA,IACT,CAAA;AAAA,IACA,CAAC,SAAS;AAAA,GACZ;AAEA,EAAA,MAAM,SAAA,GAAY,WAAA,CAAY,OAAO,QAAA,KAAuC;AAC1E,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,CAAS,MAAM,WAAA,EAAY;AACjC,MAAA,OAAO,IAAA;AAAA,IACT,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,aAAA,GAAgB,WAAA;AAAA,IACpB,CAAC,GAAA,KAAgB;AACf,MAAA,IAAI,CAAC,SAAA,EAAW;AAChB,MAAA,UAAA,CAAW,GAAG,CAAA;AACd,MAAA,eAAA,CAAgB,GAAG,CAAA;AAEnB,MAAA,MAAM,WAAA,GAAc,IAAI,GAAA,CAAI,MAAA,CAAO,SAAS,IAAI,CAAA;AAChD,MAAA,WAAA,CAAY,IAAA,GAAO,EAAA;AAEnB,MAAA,MAAM,QAAA,GAAW,kBAAkB,GAAA,EAAK;AAAA,QACtC,WAAA,EAAa,YAAY,QAAA,EAAS;AAAA,QAClC,WAAA,EAAa,sBAAsB,IAAI,CAAA;AAAA,QACvC,IAAA;AAAA,QACA,WAAA;AAAA,QACA,cAAA;AAAA,QACA;AAAA,OACD,CAAA;AAED,MAAA,MAAA,CAAO,SAAS,IAAA,GAAO,QAAA;AAAA,IACzB,CAAA;AAAA,IACA,CAAC,IAAA,EAAM,WAAA,EAAa,cAAA,EAAgB,WAAW;AAAA,GACjD;AAEA,EAAA,MAAM,MAAA,GAAS,YAAY,MAAM;AAC/B,IAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,MAAA,OAAA,CAAQ,QAAQ,UAAA,EAAW;AAC3B,MAAA,OAAA,CAAQ,QAAQ,KAAA,EAAM;AAAA,IACxB;AACA,IAAA,eAAA,EAAgB;AAChB,IAAA,OAAA,CAAQ,IAAI,CAAA;AACZ,IAAA,kBAAA,CAAmB,KAAK,CAAA;AACxB,IAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,IAAA,qBAAA,CAAsB,IAAI,CAAA;AAC1B,IAAA,iBAAA,CAAkB,IAAI,CAAA;AACtB,IAAA,uBAAA,CAAwB,IAAI,CAAA;AAC5B,IAAA,OAAA,CAAQ,OAAA,GAAU,IAAA;AAAA,EACpB,CAAA,EAAG,EAAE,CAAA;AAGL,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,MAAA,GAAS,IAAA;AAEb,IAAA,MAAM,OAAO,YAAY;AACvB,MAAA,MAAM,WAAW,WAAA,CAAY,OAAA;AAC7B,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,aAAA,GAAgB,SAAA,CAAU;AAAA,UACxB,cAAc,QAAA,CAAS,WAAA;AAAA,UACvB,eAAe,QAAA,CAAS,YAAA;AAAA,UACxB,UAAA,EAAY,cAAA,CAAe,QAAA,CAAS,WAAW;AAAA,SAChD,CAAA;AAED,QAAA,IAAI,SAAS,aAAA,EAAe;AAC1B,UAAA,gBAAA,CAAiB,SAAS,aAAa,CAAA;AACvC,UAAA,IAAI,MAAA,EAAQ,qBAAA,CAAsB,QAAA,CAAS,aAAa,CAAA;AAAA,QAC1D;AACA,QAAA,IAAI,SAAS,SAAA,EAAW;AACtB,UAAA,YAAA,CAAa,SAAS,SAAS,CAAA;AAC/B,UAAA,IAAI,MAAA,EAAQ,iBAAA,CAAkB,QAAA,CAAS,SAAS,CAAA;AAAA,QAClD;AACA,QAAA,IAAI,SAAS,eAAA,EAAiB;AAC5B,UAAA,kBAAA,CAAmB,SAAS,eAAe,CAAA;AAC3C,UAAA,IAAI,MAAA,EAAQ,uBAAA,CAAwB,QAAA,CAAS,eAAe,CAAA;AAAA,QAC9D;AACA,QAAA,IAAI,SAAS,OAAA,EAAS;AACpB,UAAA,UAAA,CAAW,SAAS,OAAO,CAAA;AAC3B,UAAA,IAAI,MAAA,EAAQ,eAAA,CAAgB,QAAA,CAAS,OAAO,CAAA;AAAA,QAC9C;AAEA,QAAA,IAAI,SAAA,EAAW;AACb,UAAA,MAAA,CAAO,OAAA,CAAQ,YAAA,CAAa,EAAC,EAAG,EAAA,EAAI,OAAO,QAAA,CAAS,QAAA,GAAW,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA;AAAA,QACvF;AACA,QAAA,WAAA,CAAY,OAAA,GAAU,IAAA;AAAA,MACxB;AAEA,MAAA,MAAM,QAAA,GAAW,QAAA,EAAU,OAAA,IAAW,UAAA,EAAW;AACjD,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,IAAI,MAAA,eAAqB,KAAK,CAAA;AAC9B,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,QAAA,GAAW,mBAAmB,QAAQ,CAAA;AAC5C,MAAA,MAAM,MAAA,GAAS,MAAM,SAAA,CAAU,QAAQ,CAAA;AAEvC,MAAA,IAAI,CAAC,MAAA,EAAQ;AAEb,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,OAAA,CAAQ,QAAQ,CAAA;AAChB,QAAA,kBAAA,CAAmB,IAAI,CAAA;AACvB,QAAA,WAAA,CAAY,IAAI,CAAA;AAAA,MAClB,WAAW,QAAA,EAAU;AACnB,QAAA,OAAA,CAAQ,QAAQ,CAAA;AAAA,MAClB;AAEA,MAAA,YAAA,CAAa,KAAK,CAAA;AAAA,IACpB,CAAA;AAEA,IAAA,IAAA,EAAK,CAAE,KAAA,CAAM,CAAC,GAAA,KAAQ;AACpB,MAAA,OAAA,CAAQ,KAAA,CAAM,yCAAyC,GAAG,CAAA;AAC1D,MAAA,IAAI,MAAA,eAAqB,KAAK,CAAA;AAAA,IAChC,CAAC,CAAA;AAED,IAAA,OAAO,MAAM;AACX,MAAA,MAAA,GAAS,KAAA;AAAA,IACX,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,kBAAA,EAAoB,SAAS,CAAC,CAAA;AAGlC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,eAAA,IAAmB,CAAC,OAAA,CAAQ,OAAA,EAAS;AAE1C,IAAA,IAAI,MAAA,GAAS,IAAA;AACb,IAAA,MAAM,GAAA,GAAM,QAAQ,OAAA,CAAQ,MAAA;AAE5B,IAAA,MAAM,YAAY,MAAM;AAAE,MAAA,IAAI,MAAA,cAAoB,IAAI,CAAA;AAAA,IAAG,CAAA;AACzD,IAAA,MAAM,OAAA,GAAU,CAAC,GAAA,KAAe;AAC9B,MAAA,IAAI,CAAC,MAAA,EAAQ;AACb,MAAA,WAAA,CAAY,KAAK,CAAA;AACjB,MAAA,IAAI,GAAA,CAAI,OAAA,CAAQ,QAAA,CAAS,KAAK,CAAA,EAAG;AAC/B,QAAA,MAAA,EAAO;AAAA,MACT;AAAA,IACF,CAAA;AAEA,IAAA,GAAA,CAAI,EAAA,CAAG,WAAW,SAAS,CAAA;AAC3B,IAAA,GAAA,CAAI,EAAA,CAAG,SAAS,OAAO,CAAA;AACvB,IAAA,GAAA,CAAI,OAAA,EAAQ,CAAE,KAAA,CAAM,MAAM;AAAE,MAAA,IAAI,MAAA,cAAoB,KAAK,CAAA;AAAA,IAAG,CAAC,CAAA;AAE7D,IAAA,OAAO,MAAM;AACX,MAAA,MAAA,GAAS,KAAA;AACT,MAAA,GAAA,CAAI,GAAA,CAAI,WAAW,SAAS,CAAA;AAC5B,MAAA,GAAA,CAAI,GAAA,CAAI,SAAS,OAAO,CAAA;AAAA,IAC1B,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,eAAA,EAAiB,IAAI,CAAC,CAAA;AAE1B,EAAA,MAAM,YAAA,GAAe,OAAA;AAAA,IACnB,OAAO;AAAA,MACL,IAAA;AAAA,MACA,eAAA;AAAA,MACA,QAAA;AAAA,MACA,OAAA;AAAA,MACA,aAAA;AAAA,MACA,SAAA;AAAA,MACA,eAAA;AAAA,MACA,aAAA;AAAA,MACA,MAAA;AAAA,MACA;AAAA,KACF,CAAA;AAAA,IACA,CAAC,IAAA,EAAM,eAAA,EAAiB,QAAA,EAAU,OAAA,EAAS,eAAe,SAAA,EAAW,eAAA,EAAiB,aAAA,EAAe,MAAA,EAAQ,SAAS;AAAA,GACxH;AAEA,EAAA,2BACG,WAAA,CAAY,QAAA,EAAZ,EAAqB,KAAA,EAAO,cAC1B,QAAA,EACH,CAAA;AAEJ;AAEO,SAAS,OAAA,GAA4B;AAC1C,EAAA,MAAM,OAAA,GAAU,WAAW,WAAW,CAAA;AACtC,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,MAAM,4CAA4C,CAAA;AAAA,EAC9D;AACA,EAAA,OAAO,OAAA;AACT;ACzQA,SAAS,WAAW,SAAA,EAA4B;AAC9C,EAAA,IAAI,CAAC,SAAA,IAAa,SAAA,CAAU,IAAA,OAAW,EAAA,EAAI;AACzC,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,SAAA,GACJ,SAAA,CAAU,UAAA,CAAW,SAAS,CAAA,IAAK,SAAA,CAAU,UAAA,CAAW,UAAU,CAAA,GAC9D,SAAA,GACA,CAAA,QAAA,EAAW,SAAS,CAAA,CAAA;AAE1B,IAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,SAAS,CAAA;AAE7B,IAAA,IAAI,GAAA,CAAI,QAAA,KAAa,OAAA,IAAW,GAAA,CAAI,aAAa,QAAA,EAAU;AACzD,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,IAAI,CAAC,IAAI,QAAA,EAAU;AACjB,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,MAAM,WAAW,GAAA,CAAI,QAAA;AAGrB,IAAA,IAAI,aAAa,WAAA,EAAa;AAC5B,MAAA,OAAO,IAAA;AAAA,IACT;AAGA,IAAA,MAAM,SAAA,GAAY,yBAAA;AAClB,IAAA,IAAI,SAAA,CAAU,IAAA,CAAK,QAAQ,CAAA,EAAG;AAC5B,MAAA,MAAM,SAAS,QAAA,CAAS,KAAA,CAAM,GAAG,CAAA,CAAE,IAAI,MAAM,CAAA;AAC7C,MAAA,OAAO,OAAO,KAAA,CAAM,CAAC,UAAU,KAAA,IAAS,CAAA,IAAK,SAAS,GAAG,CAAA;AAAA,IAC3D;AAGA,IAAA,MAAM,WAAA,GACJ,+FAAA;AACF,IAAA,OAAO,WAAA,CAAY,KAAK,QAAQ,CAAA;AAAA,EAClC,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAGA,IAAM,MAAA,GAAS;AAAA,EACb,OAAA,EAAS;AAAA,IACP,QAAA,EAAU,OAAA;AAAA,IACV,GAAA,EAAK,CAAA;AAAA,IACL,IAAA,EAAM,CAAA;AAAA,IACN,KAAA,EAAO,CAAA;AAAA,IACP,MAAA,EAAQ,CAAA;AAAA,IACR,eAAA,EAAiB,qBAAA;AAAA,IACjB,OAAA,EAAS,MAAA;AAAA,IACT,UAAA,EAAY,QAAA;AAAA,IACZ,cAAA,EAAgB,QAAA;AAAA,IAChB,MAAA,EAAQ,GAAA;AAAA,IACR,OAAA,EAAS;AAAA,GACX;AAAA,EACA,OAAA,EAAS;AAAA,IACP,eAAA,EAAiB,SAAA;AAAA,IACjB,YAAA,EAAc,MAAA;AAAA,IACd,OAAA,EAAS,MAAA;AAAA,IACT,QAAA,EAAU,OAAA;AAAA,IACV,KAAA,EAAO,MAAA;AAAA,IACP,QAAA,EAAU,UAAA;AAAA,IACV,MAAA,EAAQ,mBAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA,EACA,WAAA,EAAa;AAAA,IACX,QAAA,EAAU,UAAA;AAAA,IACV,GAAA,EAAK,MAAA;AAAA,IACL,KAAA,EAAO,MAAA;AAAA,IACP,UAAA,EAAY,MAAA;AAAA,IACZ,MAAA,EAAQ,MAAA;AAAA,IACR,QAAA,EAAU,QAAA;AAAA,IACV,KAAA,EAAO,SAAA;AAAA,IACP,MAAA,EAAQ,SAAA;AAAA,IACR,OAAA,EAAS,SAAA;AAAA,IACT,UAAA,EAAY;AAAA,GACd;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,OAAA,EAAS,MAAA;AAAA,IACT,aAAA,EAAe,QAAA;AAAA,IACf,UAAA,EAAY,QAAA;AAAA,IACZ,GAAA,EAAK,SAAA;AAAA,IACL,YAAA,EAAc;AAAA,GAChB;AAAA,EACA,KAAA,EAAO;AAAA,IACL,QAAA,EAAU,SAAA;AAAA,IACV,UAAA,EAAY,GAAA;AAAA,IACZ,KAAA,EAAO,SAAA;AAAA,IACP,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,KAAA,EAAO,SAAA;AAAA,IACP,SAAA,EAAW,QAAA;AAAA,IACX,YAAA,EAAc,QAAA;AAAA,IACd,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,KAAA,EAAO;AAAA,IACL,KAAA,EAAO,SAAA;AAAA,IACP,eAAA,EAAiB,wBAAA;AAAA,IACjB,MAAA,EAAQ,kCAAA;AAAA,IACR,YAAA,EAAc,KAAA;AAAA,IACd,OAAA,EAAS,SAAA;AAAA,IACT,YAAA,EAAc,MAAA;AAAA,IACd,QAAA,EAAU,UAAA;AAAA,IACV,SAAA,EAAW;AAAA,GACb;AAAA,EACA,UAAA,EAAY;AAAA,IACV,OAAA,EAAS,MAAA;AAAA,IACT,GAAA,EAAK,MAAA;AAAA,IACL,YAAA,EAAc,MAAA;AAAA,IACd,cAAA,EAAgB;AAAA,GAClB;AAAA,EACA,UAAA,EAAY;AAAA,IACV,OAAA,EAAS,MAAA;AAAA,IACT,UAAA,EAAY,QAAA;AAAA,IACZ,GAAA,EAAK,QAAA;AAAA,IACL,KAAA,EAAO,SAAA;AAAA,IACP,MAAA,EAAQ,SAAA;AAAA,IACR,OAAA,EAAS,aAAA;AAAA,IACT,YAAA,EAAc,KAAA;AAAA,IACd,MAAA,EAAQ,mBAAA;AAAA,IACR,eAAA,EAAiB,SAAA;AAAA,IACjB,UAAA,EAAY;AAAA,GACd;AAAA,EACA,gBAAA,EAAkB;AAAA,IAChB,WAAA,EAAa,SAAA;AAAA,IACb,eAAA,EAAiB;AAAA,GACnB;AAAA,EACA,KAAA,EAAO;AAAA,IACL,KAAA,EAAO,MAAA;AAAA,IACP,OAAA,EAAS,cAAA;AAAA,IACT,YAAA,EAAc,KAAA;AAAA,IACd,MAAA,EAAQ,mBAAA;AAAA,IACR,eAAA,EAAiB,SAAA;AAAA,IACjB,KAAA,EAAO,SAAA;AAAA,IACP,QAAA,EAAU,UAAA;AAAA,IACV,OAAA,EAAS,MAAA;AAAA,IACT,YAAA,EAAc,MAAA;AAAA,IACd,SAAA,EAAW;AAAA,GACb;AAAA,EACA,SAAA,EAAW;AAAA,IACT,KAAA,EAAO,SAAA;AAAA,IACP,QAAA,EAAU,UAAA;AAAA,IACV,SAAA,EAAW,QAAA;AAAA,IACX,OAAA,EAAS,SAAA;AAAA,IACT,eAAA,EAAiB,SAAA;AAAA,IACjB,YAAA,EAAc,KAAA;AAAA,IACd,YAAA,EAAc;AAAA,GAChB;AAAA,EACA,WAAA,EAAa;AAAA,IACX,OAAA,EAAS,MAAA;AAAA,IACT,cAAA,EAAgB;AAAA,GAClB;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,OAAA,EAAS,cAAA;AAAA,IACT,YAAA,EAAc,KAAA;AAAA,IACd,MAAA,EAAQ,MAAA;AAAA,IACR,QAAA,EAAU,UAAA;AAAA,IACV,UAAA,EAAY,GAAA;AAAA,IACZ,MAAA,EAAQ,SAAA;AAAA,IACR,eAAA,EAAiB,SAAA;AAAA,IACjB,KAAA,EAAO,OAAA;AAAA,IACP,UAAA,EAAY;AAAA,GACd;AAAA,EACA,cAAA,EAAgB;AAAA,IACd,OAAA,EAAS,GAAA;AAAA,IACT,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,OAAA,EAAS;AAAA,IACP,OAAA,EAAS,MAAA;AAAA,IACT,aAAA,EAAe,QAAA;AAAA,IACf,UAAA,EAAY,QAAA;AAAA,IACZ,GAAA,EAAK,MAAA;AAAA,IACL,OAAA,EAAS,MAAA;AAAA,IACT,KAAA,EAAO;AAAA,GACT;AAAA,EACA,OAAA,EAAS;AAAA,IACP,KAAA,EAAO,MAAA;AAAA,IACP,MAAA,EAAQ,MAAA;AAAA,IACR,MAAA,EAAQ,mBAAA;AAAA,IACR,cAAA,EAAgB,SAAA;AAAA,IAChB,YAAA,EAAc,KAAA;AAAA,IACd,SAAA,EAAW;AAAA;AAEf,CAAA;AAKO,SAAS,UAAA,CAAW;AAAA,EACzB,SAAA;AAAA,EACA,OAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAA,EAAoB;AAClB,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIC,SAA6B,OAAO,CAAA;AACpE,EAAA,MAAM,CAAC,OAAA,EAASC,WAAU,CAAA,GAAID,SAAiB,EAAE,CAAA;AACjD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,SAAkB,IAAI,CAAA;AACpD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,SAAkB,KAAK,CAAA;AACrD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAwB,IAAI,CAAA;AAGtD,EAAA,MAAM,kBACJ,cAAA,KAAA,kBAAA,yBACA,cAAA,KAAA,OAAA;AACF,EAAA,MAAM,mBACJ,cAAA,KAAA,kBAAA,yBACA,cAAA,KAAA,QAAA;AACF,EAAA,MAAM,uBAAuB,eAAA,IAAmB,gBAAA;AAGhD,EAAAE,UAAU,MAAM;AACd,IAAA,MAAM,QAAA,GAAW,YAAA,CAAa,OAAA,CAAQ,eAAe,CAAA;AACrD,IAAA,IAAI,QAAA,EAAU;AACZ,MAAAD,YAAW,QAAQ,CAAA;AAAA,IACrB;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAGL,EAAAC,UAAU,MAAM;AACd,IAAA,IAAI,cAAA,KAAA,OAAA,cAA6C;AAC/C,MAAA,WAAA,CAAY,OAAO,CAAA;AAAA,IACrB,WAAW,cAAA,KAAA,QAAA,eAA8C;AACvD,MAAA,WAAA,CAAY,QAAQ,CAAA;AAAA,IACtB;AAAA,EACF,CAAA,EAAG,CAAC,cAAc,CAAC,CAAA;AAGnB,EAAAA,UAAU,MAAM;AACd,IAAA,IAAI,aAAa,QAAA,EAAU;AACzB,MAAA,UAAA,CAAW,UAAA,CAAW,OAAO,CAAC,CAAA;AAAA,IAChC,CAAA,MAAO;AACL,MAAA,UAAA,CAAW,IAAI,CAAA;AAAA,IACjB;AAAA,EACF,CAAA,EAAG,CAAC,OAAA,EAAS,QAAQ,CAAC,CAAA;AAEtB,EAAA,MAAM,aAAA,GAAgBC,YAAY,YAAY;AAC5C,IAAA,IAAI,CAAC,OAAA,EAAS;AAEd,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,QAAA,CAAS,IAAI,CAAA;AAEb,IAAA,MAAM,OAAA,GACJ,QAAA,KAAa,OAAA,GAAU,+BAAA,GAAkC,OAAA;AAE3D,IAAA,IAAI;AAEF,MAAA,MAAM,WAAW,MAAM,KAAA;AAAA,QACrB,IAAI,GAAA,CAAI,qBAAA,EAAuB,OAAO,EAAE,QAAA;AAAS,OACnD;AAEA,MAAA,IAAI,QAAA,CAAS,EAAA,IAAM,QAAA,CAAS,MAAA,KAAW,GAAA,EAAK;AAC1C,QAAA,UAAA,CAAW,KAAK,CAAA;AAChB,QAAA,MAAM,aAAA,GAAgB,OAAA,CAAQ,OAAA,CAAQ,MAAA,EAAQ,EAAE,CAAA;AAChD,QAAA,SAAA,CAAU,aAAa,CAAA;AAAA,MACzB,CAAA,MAAO;AACL,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,mBAAA,EAAsB,QAAA,CAAS,UAAU,CAAA,CAAE,CAAA;AAAA,MAC7D;AAAA,IACF,SAAS,GAAA,EAAK;AACZ,MAAA,OAAA,CAAQ,KAAA,CAAM,sBAAsB,GAAG,CAAA;AACvC,MAAA,QAAA,CAAS,wDAAwD,CAAA;AACjE,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EACF,GAAG,CAAC,OAAA,EAAS,QAAA,EAAU,OAAA,EAAS,SAAS,CAAC,CAAA;AAE1C,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,+BACJ,IAAA,CAAA,QAAA,EAAA,EAEE,QAAA,EAAA;AAAA,oBAAAC,IAAC,OAAA,EAAA,EAAO,QAAA,EAAA;AAAA;AAAA;AAAA;AAAA,MAAA,CAAA,EAIN,CAAA;AAAA,oBACFA,GAAAA,CAAC,KAAA,EAAA,EAAI,OAAO,MAAA,CAAO,OAAA,EAAS,SAAS,OAAA,EACnC,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,OAAO,OAAA,EAAS,OAAA,EAAS,CAAC,CAAA,KAAM,CAAA,CAAE,iBAAgB,EAC5D,QAAA,EAAA;AAAA,sBAAAA,IAAC,QAAA,EAAA,EAAO,KAAA,EAAO,OAAO,WAAA,EAAa,OAAA,EAAS,SAAS,QAAA,EAAA,MAAA,EAErD,CAAA;AAAA,sBAEA,IAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,MAAA,CAAO,MAAA,EACjB,QAAA,EAAA;AAAA,wBAAAA,IAAC,QAAA,EAAA,EAAS,CAAA;AAAA,wBACVA,GAAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAO,MAAA,CAAO,OAAO,QAAA,EAAA,qBAAA,EAAmB;AAAA,OAAA,EAC9C,CAAA;AAAA,MAEC,OAAA,mBACC,IAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,OAAO,OAAA,EACjB,QAAA,EAAA;AAAA,wBAAAA,GAAAA,CAAC,OAAE,QAAA,EAAA,uBAAA,EAAqB,CAAA;AAAA,wBACxBA,GAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,OAAO,OAAA,EAAS;AAAA,OAAA,EAC9B,oBAEA,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,wBAAAA,GAAAA,CAAC,OAAE,KAAA,EAAO,MAAA,CAAO,MACd,QAAA,EAAA,oBAAA,GACG,6CAAA,GACA,cAAA,KAAA,OAAA,eACE,sCAAA,GACA,sCAAA,EACR,CAAA;AAAA,QAEC,yBAASA,GAAAA,CAAC,OAAE,KAAA,EAAO,MAAA,CAAO,OAAQ,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,QAExC,oBAAA,oBACC,IAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,OAAO,UAAA,EACjB,QAAA,EAAA;AAAA,0BAAA,IAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAO;AAAA,gBACL,GAAG,MAAA,CAAO,UAAA;AAAA,gBACV,GAAI,QAAA,KAAa,OAAA,GAAU,MAAA,CAAO,mBAAmB;AAAC,eACxD;AAAA,cACA,OAAA,EAAS,MAAM,WAAA,CAAY,OAAO,CAAA;AAAA,cAElC,QAAA,EAAA;AAAA,gCAAAA,GAAAA;AAAA,kBAAC,OAAA;AAAA,kBAAA;AAAA,oBACC,IAAA,EAAK,OAAA;AAAA,oBACL,KAAA,EAAM,OAAA;AAAA,oBACN,SAAS,QAAA,KAAa,OAAA;AAAA,oBACtB,QAAA,EAAU,MAAM,WAAA,CAAY,OAAO,CAAA;AAAA,oBACnC,KAAA,EAAO,EAAE,OAAA,EAAS,MAAA;AAAO;AAAA,iBAC3B;AAAA,gBAAE;AAAA;AAAA;AAAA,WAEJ;AAAA,0BACA,IAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAO;AAAA,gBACL,GAAG,MAAA,CAAO,UAAA;AAAA,gBACV,GAAI,QAAA,KAAa,QAAA,GAAW,MAAA,CAAO,mBAAmB;AAAC,eACzD;AAAA,cACA,OAAA,EAAS,MAAM,WAAA,CAAY,QAAQ,CAAA;AAAA,cAEnC,QAAA,EAAA;AAAA,gCAAAA,GAAAA;AAAA,kBAAC,OAAA;AAAA,kBAAA;AAAA,oBACC,IAAA,EAAK,OAAA;AAAA,oBACL,KAAA,EAAM,QAAA;AAAA,oBACN,SAAS,QAAA,KAAa,QAAA;AAAA,oBACtB,QAAA,EAAU,MAAM,WAAA,CAAY,QAAQ,CAAA;AAAA,oBACpC,KAAA,EAAO,EAAE,OAAA,EAAS,MAAA;AAAO;AAAA,iBAC3B;AAAA,gBAAE;AAAA;AAAA;AAAA;AAEJ,SAAA,EACF,CAAA;AAAA,wBAGFA,GAAAA,CAAC,KAAA,EAAA,EACE,QAAA,EAAA,gBAAA,IAAoB,QAAA,KAAa,2BAChCA,GAAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,MAAA;AAAA,YACL,KAAA,EAAO,OAAA;AAAA,YACP,UAAU,CAAC,CAAA,KAAMH,WAAAA,CAAW,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,YAC1C,WAAA,EAAY,wCAAA;AAAA,YACZ,OAAO,MAAA,CAAO,KAAA;AAAA,YACd,SAAA,EAAW,CAAC,CAAA,KAAM;AAChB,cAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,OAAA,IAAW,OAAA,EAAS;AAChC,gBAAA,aAAA,EAAc;AAAA,cAChB;AAAA,YACF;AAAA;AAAA,YAEA,eAAA,mBACF,IAAA,CAAC,GAAA,EAAA,EAAE,KAAA,EAAO,OAAO,SAAA,EAAW,QAAA,EAAA;AAAA,UAAA,4BAAA;AAAA,0BACAG,IAAC,IAAA,EAAA,EAAG,CAAA;AAAA,0BAC9BA,IAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,KAAA,EAAO,SAAA,IAAa,QAAA,EAAA,+BAAA,EAA6B;AAAA,SAAA,EAClE,IACE,IAAA,EACN,CAAA;AAAA,wBAEAA,GAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,MAAA,CAAO,aACjB,QAAA,kBAAAA,GAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,aAAA;AAAA,YACT,QAAA,EAAU,CAAC,OAAA,IAAW,OAAA;AAAA,YACtB,KAAA,EAAO;AAAA,cACL,GAAG,MAAA,CAAO,MAAA;AAAA,cACV,GAAI,CAAC,OAAA,IAAW,OAAA,GAAU,MAAA,CAAO,iBAAiB;AAAC,aACrD;AAAA,YACD,QAAA,EAAA;AAAA;AAAA,SAED,EACF;AAAA,OAAA,EACF;AAAA,KAAA,EAEJ,CAAA,EACF;AAAA,GAAA,EACF,CAAA;AAIF,EAAA,OAAO,YAAA,CAAa,YAAA,EAAc,QAAA,CAAS,IAAI,CAAA;AACjD;AAKA,SAAS,QAAA,GAAW;AAClB,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAM,IAAA;AAAA,MACN,MAAA,EAAO,IAAA;AAAA,MACP,OAAA,EAAQ,WAAA;AAAA,MACR,IAAA,EAAK,SAAA;AAAA,MACL,KAAA,EAAM,4BAAA;AAAA,MAEN,QAAA,kBAAAA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,wJAAA,EAAyJ;AAAA;AAAA,GACnK;AAEJ;ACtZO,SAAS,aAAA,CAAc;AAAA,EAC5B,cAAA,GAAA,kBAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAAuB;AACrB,EAAA,MAAM,EAAE,eAAA,EAAiB,aAAA,EAAe,QAAQ,OAAA,EAAS,QAAA,KAAa,OAAA,EAAQ;AAC9E,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAIJ,SAAS,KAAK,CAAA;AAC1D,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,SAAS,KAAK,CAAA;AACpD,EAAA,MAAM,WAAA,GAAcK,OAAuB,IAAI,CAAA;AAG/C,EAAAH,UAAU,MAAM;AACd,IAAA,MAAM,kBAAA,GAAqB,CAAC,KAAA,KAAsB;AAChD,MAAA,IACE,WAAA,CAAY,WACZ,CAAC,WAAA,CAAY,QAAQ,QAAA,CAAS,KAAA,CAAM,MAAc,CAAA,EAClD;AACA,QAAA,iBAAA,CAAkB,KAAK,CAAA;AAAA,MACzB;AAAA,IACF,CAAA;AACA,IAAA,QAAA,CAAS,gBAAA,CAAiB,aAAa,kBAAkB,CAAA;AACzD,IAAA,OAAO,MAAM,QAAA,CAAS,mBAAA,CAAoB,WAAA,EAAa,kBAAkB,CAAA;AAAA,EAC3E,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,YAAA,GAAeI,QAAQ,MAAM;AACjC,IAAA,IAAI,CAAC,eAAA,IAAmB,CAAC,OAAA,EAAS,OAAO,GAAA;AACzC,IAAA,OAAO,IAAI,GAAA,CAAI,kBAAA,EAAoB,OAAO,EAAE,QAAA,EAAS;AAAA,EACvD,CAAA,EAAG,CAAC,eAAA,EAAiB,OAAO,CAAC,CAAA;AAE7B,EAAA,MAAM,gBAAgB,MAAM;AAE1B,IAAA,IACE,OAAO,cAAA,KAAmB,QAAA,IAC1B,cAAA,CAAe,IAAA,KAAA,QAAA,eACf;AACA,MAAA,aAAA,CAAc,eAAe,GAAG,CAAA;AAChC,MAAA;AAAA,IACF;AAGA,IAAA,cAAA,CAAe,IAAI,CAAA;AAAA,EACrB,CAAA;AAEA,EAAA,MAAM,kBAAA,GAAqB,CAAC,GAAA,KAAgB;AAC1C,IAAA,cAAA,CAAe,KAAK,CAAA;AACpB,IAAA,aAAA,CAAc,GAAG,CAAA;AAAA,EACnB,CAAA;AAGA,EAAA,IAAI,eAAA,IAAmB,CAAC,QAAA,EAAU;AAChC,IAAA,uBACEC,IAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,CAAA,sCAAA,EAAyC,SAAA,IAAa,EAAE,CAAA,CAAA;AAAA,QACnE,KAAA;AAAA,QACA,QAAA,EAAQ,IAAA;AAAA,QAER,QAAA,EAAA;AAAA,0BAAAH,GAAAA,CAACI,WAAA,EAAS,CAAA;AAAA,UAAE;AAAA;AAAA;AAAA,KAEd;AAAA,EAEJ;AAGA,EAAA,IAAI,eAAA,EAAiB;AACnB,IAAA,uBACED,IAAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,WAAA,EAAa,SAAA,EAAU,wBAAA,EAAyB,KAAA,EAAO,EAAE,QAAA,EAAU,UAAA,EAAY,OAAA,EAAS,gBAAe,EAC/G,QAAA,EAAA;AAAA,sBAAAA,IAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAW,CAAA,mCAAA,EAAsC,SAAA,IAAa,EAAE,CAAA,CAAA;AAAA,UAChE,KAAA;AAAA,UACA,SAAS,MAAM,iBAAA,CAAkB,CAAC,IAAA,KAAS,CAAC,IAAI,CAAA;AAAA,UAEhD,QAAA,EAAA;AAAA,4BAAAH,GAAAA,CAACI,WAAA,EAAS,CAAA;AAAA,YAAE;AAAA;AAAA;AAAA,OAEd;AAAA,MACC,cAAA,oBACCD,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,eAAA,EACb,QAAA,EAAA;AAAA,wBAAAH,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBAAqB,KAAA,EAAO,OAAA,IAAW,IACnD,QAAA,EAAA,OAAA,EACH,CAAA;AAAA,wBACAA,GAAAA;AAAA,UAAC,GAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAM,YAAA;AAAA,YACN,MAAA,EAAO,QAAA;AAAA,YACP,GAAA,EAAI,qBAAA;AAAA,YACJ,SAAA,EAAU,oBAAA;AAAA,YACX,QAAA,EAAA;AAAA;AAAA,SAED;AAAA,wBACAA,GAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,oBAAA;AAAA,YACV,SAAS,MAAM;AACb,cAAA,iBAAA,CAAkB,KAAK,CAAA;AACvB,cAAA,MAAA,EAAO;AAAA,YACT,CAAA;AAAA,YACD,QAAA,EAAA;AAAA;AAAA;AAED,OAAA,EACF;AAAA,KAAA,EAEJ,CAAA;AAAA,EAEJ;AAGA,EAAA,uBACEG,IAAAA,CAAAE,QAAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAF,IAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,CAAA,oBAAA,EAAuB,SAAA,IAAa,EAAE,CAAA,CAAA;AAAA,QACjD,KAAA;AAAA,QACA,OAAA,EAAS,aAAA;AAAA,QAET,QAAA,EAAA;AAAA,0BAAAH,GAAAA,CAACI,WAAA,EAAS,CAAA;AAAA,UAAE;AAAA;AAAA;AAAA,KAEd;AAAA,oBACAJ,GAAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,MAAA,EAAQ,WAAA;AAAA,QACR,SAAA,EAAW,kBAAA;AAAA,QACX,OAAA,EAAS,MAAM,cAAA,CAAe,KAAK,CAAA;AAAA,QACnC,cAAA,EAAgB,OAAO,cAAA,KAAmB,QAAA,GAAA,kBAAA,wBAA+C;AAAA;AAAA;AAC3F,GAAA,EACF,CAAA;AAEJ;AAKA,SAASI,SAAAA,GAAW;AAClB,EAAA,uBACEJ,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,WAAA;AAAA,MACV,KAAA,EAAM,IAAA;AAAA,MACN,MAAA,EAAO,IAAA;AAAA,MACP,OAAA,EAAQ,WAAA;AAAA,MACR,IAAA,EAAK,cAAA;AAAA,MACL,KAAA,EAAM,4BAAA;AAAA,MAEN,QAAA,kBAAAA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,wJAAA,EAAyJ;AAAA;AAAA,GACnK;AAEJ;ACnHA,SAAS,QAAQ,GAAA,EAAqB;AACpC,EAAA,OAAO,eAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,MAAA,CAAO,GAAG,CAAC,CAAA;AAC3D;AAEA,SAAS,uBAAuB,QAAA,EAAiD;AAC/E,EAAA,OAAO,QAAA,CAAS,GAAA,CAAI,CAAC,OAAA,MAAa;AAAA,IAChC,WAAW,OAAA,CAAQ,EAAA;AAAA,IACnB,eAAe,OAAA,CAAQ;AAAA,GACzB,CAAE,CAAA;AACJ;AAEA,SAAS,aAAA,GAAgB;AACvB,EAAA,MAAM,UAAA,GAAaC,OAAO,IAAI,CAAA;AAE9B,EAAAH,UAAU,MAAM;AACd,IAAA,UAAA,CAAW,OAAA,GAAU,IAAA;AACrB,IAAA,OAAO,MAAM;AACX,MAAA,UAAA,CAAW,OAAA,GAAU,KAAA;AAAA,IACvB,CAAA;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO,UAAA;AACT;AAEA,SAAS,gBAAA,GAAmB;AAC1B,EAAA,MAAM,aAAa,aAAA,EAAc;AACjC,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIF,SAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAuB,IAAI,CAAA;AAErD,EAAA,MAAM,GAAA,GAAMG,WAAAA;AAAA,IACV,OAAW,MAAA,KAAgD;AACzD,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,UAAA,CAAW,IAAI,CAAA;AACf,QAAA,QAAA,CAAS,IAAI,CAAA;AAAA,MACf;AAEA,MAAA,IAAI;AACF,QAAA,OAAO,MAAM,MAAA,EAAO;AAAA,MACtB,SAAS,GAAA,EAAK;AACZ,QAAA,MAAM,UAAA,GAAa,QAAQ,GAAG,CAAA;AAC9B,QAAA,IAAI,WAAW,OAAA,EAAS;AACtB,UAAA,QAAA,CAAS,UAAU,CAAA;AAAA,QACrB;AACA,QAAA,OAAO,IAAA;AAAA,MACT,CAAA,SAAE;AACA,QAAA,IAAI,WAAW,OAAA,EAAS;AACtB,UAAA,UAAA,CAAW,KAAK,CAAA;AAAA,QAClB;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA,CAAC,UAAU;AAAA,GACb;AAEA,EAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAO,GAAA,EAAK,QAAA,EAAS;AACzC;AAEA,SAAS,MAAM,EAAA,EAA2B;AACxC,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,KAAY;AAC9B,IAAA,UAAA,CAAW,SAAS,EAAE,CAAA;AAAA,EACxB,CAAC,CAAA;AACH;AAEA,SAAS,sBAAsB,KAAA,EAA+B;AAC5D,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAI,CAAC,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,EAAU;AACvC,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,OAAA,IAAW,KAAA,IAAS,OAAO,KAAA,CAAM,UAAU,QAAA,EAAU;AACvD,IAAA,OAAO,KAAA,CAAM,KAAA;AAAA,EACf;AAEA,EAAA,IAAI,WAAA,IAAe,KAAA,IAAS,OAAO,KAAA,CAAM,cAAc,QAAA,EAAU;AAC/D,IAAA,OAAO,KAAA,CAAM,SAAA;AAAA,EACf;AAEA,EAAA,OAAO,IAAA;AACT;AAMO,SAAS,UAAA,CAAW,WAA0B,UAAA,EAA2B;AAC9E,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,OAAA,EAAQ;AACzB,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIH,SAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAuB,IAAI,CAAA;AACrD,EAAA,MAAM,UAAA,GAAaK,OAAO,IAAI,CAAA;AAE9B,EAAAH,UAAU,MAAM;AACd,IAAA,UAAA,CAAW,OAAA,GAAU,IAAA;AACrB,IAAA,OAAO,MAAM;AAAE,MAAA,UAAA,CAAW,OAAA,GAAU,KAAA;AAAA,IAAO,CAAA;AAAA,EAC7C,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,OAAA,GAAUC,WAAAA;AAAA,IACd,OAAoB,QAAgB,MAAA,KAAwD;AAC1F,MAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,SAAA,IAAa,CAAC,UAAA,EAAY;AACtC,QAAA,IAAI,WAAW,OAAA,EAAS,QAAA,CAAS,IAAI,KAAA,CAAM,eAAe,CAAC,CAAA;AAC3D,QAAA,OAAO,IAAA;AAAA,MACT;AAEA,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,UAAA,CAAW,IAAI,CAAA;AACf,QAAA,QAAA,CAAS,IAAI,CAAA;AAAA,MACf;AACA,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,GAAA,CAAI,OAAA,CAAW;AAAA,UACvC,SAAA;AAAA,UACA,MAAA;AAAA,UACA,QAAA,EAAU,MAAA;AAAA,UACV,iBAAA,EAAmB;AAAA,SACpB,CAAA;AACD,QAAA,OAAO,MAAA;AAAA,MACT,SAAS,GAAA,EAAK;AACZ,QAAA,MAAM,CAAA,GAAI,eAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,MAAA,CAAO,GAAG,CAAC,CAAA;AAC5D,QAAA,IAAI,UAAA,CAAW,OAAA,EAAS,QAAA,CAAS,CAAC,CAAA;AAClC,QAAA,OAAO,IAAA;AAAA,MACT,CAAA,SAAE;AACA,QAAA,IAAI,UAAA,CAAW,OAAA,EAAS,UAAA,CAAW,KAAK,CAAA;AAAA,MAC1C;AAAA,IACF,CAAA;AAAA,IACA,CAAC,IAAA,EAAM,SAAA,EAAW,UAAU;AAAA,GAC9B;AAEA,EAAA,OAAO,EAAE,OAAA,EAAS,OAAA,EAAS,KAAA,EAAM;AACnC;AAOO,SAAS,eAAA,CACd,YACA,QAAA,EACA;AACA,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,OAAA,EAAQ;AACzB,EAAA,MAAM,WAAA,GAAcE,OAAO,QAAQ,CAAA;AACnC,EAAA,WAAA,CAAY,OAAA,GAAU,QAAA;AAEtB,EAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,SAAA,CAAU,UAAU,CAAA;AAE/C,EAAAH,UAAU,MAAM;AACd,IAAA,IAAI,CAAC,IAAA,IAAQ,UAAA,CAAW,MAAA,KAAW,CAAA,EAAG;AAEtC,IAAA,MAAM,MAAM,IAAA,CAAK,MAAA;AAEjB,IAAA,MAAM,OAAA,GAAU,CAAC,KAAA,KAAwB;AACvC,MAAA,WAAA,CAAY,QAAQ,KAAK,CAAA;AAAA,IAC3B,CAAA;AAEA,IAAA,GAAA,CAAI,EAAA,CAAG,SAAS,OAAO,CAAA;AACvB,IAAA,GAAA,CAAI,OAAA,EAAQ,CAAE,KAAA,CAAM,MAAM;AAAA,IAAC,CAAC,CAAA;AAC5B,IAAA,GAAA,CAAI,SAAA,CAAU,UAAU,CAAA,CAAE,KAAA,CAAM,MAAM;AAAA,IAAC,CAAC,CAAA;AAExC,IAAA,OAAO,MAAM;AACX,MAAA,GAAA,CAAI,GAAA,CAAI,SAAS,OAAO,CAAA;AAAA,IAC1B,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,IAAA,EAAM,aAAa,CAAC,CAAA;AAC1B;AAKO,SAAS,YAAY,aAAA,EAA+B;AACzD,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,OAAA,EAAQ;AACzB,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIF,QAAAA,CAAqC,EAAE,CAAA;AACvE,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,SAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAuB,IAAI,CAAA;AACrD,EAAA,MAAM,aAAa,aAAA,EAAc;AAEjC,EAAA,MAAM,OAAA,GAAUG,YAAY,YAAY;AACtC,IAAA,IAAI,CAAC,IAAA,EAAM;AAEX,IAAA,IAAI,WAAW,OAAA,EAAS;AACtB,MAAA,UAAA,CAAW,IAAI,CAAA;AACf,MAAA,QAAA,CAAS,IAAI,CAAA;AAAA,IACf;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,aAAA,GACb,MAAM,IAAA,CAAK,KAAA,CAAM,yBAAA,CAA0B,aAAa,CAAA,GACxD,MAAM,IAAA,CAAK,KAAA,CAAM,WAAA,EAAY;AACjC,MAAA,MAAM,IAAA,GAAO,sBAAA,CAAuB,QAAA,CAAS,QAAA,IAAY,EAAE,CAAA;AAC3D,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,WAAA,CAAY,IAAI,CAAA;AAAA,MAClB;AAAA,IACF,SAAS,GAAA,EAAK;AACZ,MAAA,MAAM,UAAA,GAAa,QAAQ,GAAG,CAAA;AAC9B,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,QAAA,CAAS,UAAU,CAAA;AAAA,MACrB;AAAA,IACF,CAAA,SAAE;AACA,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,UAAA,CAAW,KAAK,CAAA;AAAA,MAClB;AAAA,IACF;AAAA,EACF,CAAA,EAAG,CAAC,IAAA,EAAM,aAAa,CAAC,CAAA;AAExB,EAAAD,UAAU,MAAM;AACd,IAAA,KAAK,OAAA,EAAQ;AAAA,EACf,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,OAAO,EAAE,QAAA,EAAU,OAAA,EAAS,KAAA,EAAO,OAAA,EAAQ;AAC7C;AAEO,SAAS,uBAAuB,aAAA,EAA+B;AACpE,EAAA,OAAO,YAAY,aAAa,CAAA;AAClC;AAEO,SAAS,gBAAgB,OAAA,EAAyB;AACvD,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,OAAA,EAAQ;AACzB,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIF,QAAAA,CAAwB,EAAE,CAAA;AACxD,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,SAAwB,IAAI,CAAA;AACpE,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,SAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAuB,IAAI,CAAA;AACrD,EAAA,MAAM,aAAa,aAAA,EAAc;AAEjC,EAAA,MAAM,OAAA,GAAUG,YAAY,YAAY;AACtC,IAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,OAAA,EAAS;AACrB,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,UAAA,CAAW,EAAE,CAAA;AACb,QAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,QAAA,QAAA,CAAS,IAAI,CAAA;AACb,QAAA,UAAA,CAAW,KAAK,CAAA;AAAA,MAClB;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,WAAW,OAAA,EAAS;AACtB,MAAA,UAAA,CAAW,IAAI,CAAA;AACf,MAAA,QAAA,CAAS,IAAI,CAAA;AAAA,IACf;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAyC,MAAM,IAAA,CAAK,KAAA,CAAM,iBAAiB,OAAO,CAAA;AACxF,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,UAAA,CAAW,QAAA,CAAS,IAAA,IAAQ,EAAE,CAAA;AAC9B,QAAA,eAAA,CAAgB,QAAA,CAAS,gBAAgB,IAAI,CAAA;AAAA,MAC/C;AAAA,IACF,SAAS,GAAA,EAAK;AACZ,MAAA,MAAM,UAAA,GAAa,QAAQ,GAAG,CAAA;AAC9B,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,QAAA,CAAS,UAAU,CAAA;AAAA,MACrB;AAAA,IACF,CAAA,SAAE;AACA,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,UAAA,CAAW,KAAK,CAAA;AAAA,MAClB;AAAA,IACF;AAAA,EACF,CAAA,EAAG,CAAC,OAAA,EAAS,IAAA,EAAM,UAAU,CAAC,CAAA;AAE9B,EAAAD,UAAU,MAAM;AACd,IAAA,KAAK,OAAA,EAAQ;AAAA,EACf,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,OAAO,EAAE,OAAA,EAAS,YAAA,EAAc,OAAA,EAAS,OAAO,OAAA,EAAQ;AAC1D;AAEO,SAAS,iBAAiB,OAAA,EAAyB;AACxD,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,OAAA,EAAQ;AACzB,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIF,QAAAA,CAA8B,EAAE,CAAA;AAChE,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,SAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAuB,IAAI,CAAA;AACrD,EAAA,MAAM,aAAa,aAAA,EAAc;AAEjC,EAAA,MAAM,OAAA,GAAUG,YAAY,YAAY;AACtC,IAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,OAAA,EAAS;AACrB,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,WAAA,CAAY,EAAE,CAAA;AACd,QAAA,QAAA,CAAS,IAAI,CAAA;AACb,QAAA,UAAA,CAAW,KAAK,CAAA;AAAA,MAClB;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,WAAW,OAAA,EAAS;AACtB,MAAA,UAAA,CAAW,IAAI,CAAA;AACf,MAAA,QAAA,CAAS,IAAI,CAAA;AAAA,IACf;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,KAAA,CAAM,kBAAkB,OAAO,CAAA;AAC/D,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,WAAA,CAAY,YAAY,CAAA;AAAA,MAC1B;AAAA,IACF,SAAS,GAAA,EAAK;AACZ,MAAA,MAAM,UAAA,GAAa,QAAQ,GAAG,CAAA;AAC9B,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,QAAA,CAAS,UAAU,CAAA;AAAA,MACrB;AAAA,IACF,CAAA,SAAE;AACA,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,UAAA,CAAW,KAAK,CAAA;AAAA,MAClB;AAAA,IACF;AAAA,EACF,CAAA,EAAG,CAAC,OAAA,EAAS,IAAA,EAAM,UAAU,CAAC,CAAA;AAE9B,EAAAD,UAAU,MAAM;AACd,IAAA,KAAK,OAAA,EAAQ;AAAA,EACf,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,OAAO,EAAE,QAAA,EAAU,OAAA,EAAS,KAAA,EAAO,OAAA,EAAQ;AAC7C;AAEO,SAAS,mBAAA,GAAsB;AACpC,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,OAAA,EAAQ;AACzB,EAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAO,GAAA,KAAQ,gBAAA,EAAiB;AAEjD,EAAA,MAAM,gBAAA,GAAmBC,WAAAA;AAAA,IACvB,OAAO,SAAiB,OAAA,KAA2C;AACjE,MAAA,IAAI,CAAC,IAAA,EAAM;AACT,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,OAAO,IAAI,MAAM,IAAA,CAAK,MAAM,qBAAA,CAAsB,OAAA,EAAS,OAAO,CAAC,CAAA;AAAA,IACrE,CAAA;AAAA,IACA,CAAC,MAAM,GAAG;AAAA,GACZ;AAEA,EAAA,OAAO,EAAE,gBAAA,EAAkB,OAAA,EAAS,KAAA,EAAM;AAC5C;AAEO,SAAS,YAAA,GAAe;AAC7B,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,OAAA,EAAQ;AACzB,EAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAO,GAAA,KAAQ,gBAAA,EAAiB;AAEjD,EAAA,MAAM,SAAA,GAAYA,WAAAA;AAAA,IAChB,OAAO,OAAA,KAA8B;AACnC,MAAA,IAAI,CAAC,IAAA,EAAM;AACT,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,OAAO,IAAI,MAAM,IAAA,CAAK,KAAA,CAAM,SAAA,CAAU,OAAO,CAAC,CAAA;AAAA,IAChD,CAAA;AAAA,IACA,CAAC,MAAM,GAAG;AAAA,GACZ;AAEA,EAAA,OAAO,EAAE,SAAA,EAAW,OAAA,EAAS,KAAA,EAAM;AACrC;AAEO,SAAS,oBAAA,CAAqB,SAAyB,QAAA,EAA0B;AACtF,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,OAAA,EAAQ;AACzB,EAAA,MAAM,CAAC,YAAA,EAAc,oBAAoB,CAAA,GAAIH,SAAwB,IAAI,CAAA;AACzE,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,SAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAuB,IAAI,CAAA;AACrD,EAAA,MAAM,aAAa,aAAA,EAAc;AAEjC,EAAA,MAAM,OAAA,GAAUG,YAAY,YAAY;AACtC,IAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,OAAA,IAAW,CAAC,QAAA,EAAU;AAClC,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,oBAAA,CAAqB,IAAI,CAAA;AACzB,QAAA,QAAA,CAAS,IAAI,CAAA;AACb,QAAA,UAAA,CAAW,KAAK,CAAA;AAAA,MAClB;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAI,WAAW,OAAA,EAAS;AACtB,MAAA,UAAA,CAAW,IAAI,CAAA;AACf,MAAA,QAAA,CAAS,IAAI,CAAA;AAAA,IACf;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAA,CAAM,qBAAA,CAAsB,SAAS,QAAQ,CAAA;AACzE,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,oBAAA,CAAqB,SAAS,YAAY,CAAA;AAAA,MAC5C;AACA,MAAA,OAAO,QAAA,CAAS,YAAA;AAAA,IAClB,SAAS,GAAA,EAAK;AACZ,MAAA,MAAM,UAAA,GAAa,QAAQ,GAAG,CAAA;AAC9B,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,QAAA,CAAS,UAAU,CAAA;AAAA,MACrB;AACA,MAAA,OAAO,IAAA;AAAA,IACT,CAAA,SAAE;AACA,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,UAAA,CAAW,KAAK,CAAA;AAAA,MAClB;AAAA,IACF;AAAA,EACF,GAAG,CAAC,OAAA,EAAS,QAAA,EAAU,IAAA,EAAM,UAAU,CAAC,CAAA;AAExC,EAAAD,UAAU,MAAM;AACd,IAAA,KAAK,OAAA,EAAQ;AAAA,EACf,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,MAAM,eAAA,GAAkBC,WAAAA;AAAA,IACtB,OAAO,gBAAA,KAA6B;AAClC,MAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,OAAA,IAAW,CAAC,QAAA,EAAU;AAClC,QAAA,OAAO,IAAA;AAAA,MACT;AAEA,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,UAAA,CAAW,IAAI,CAAA;AACf,QAAA,QAAA,CAAS,IAAI,CAAA;AAAA,MACf;AAEA,MAAA,IAAI;AACF,QAAA,MAAM,IAAA,CAAK,MAAM,qBAAA,CAAsB,OAAA,EAAS,UAAU,EAAE,YAAA,EAAc,kBAAkB,CAAA;AAC5F,QAAA,IAAI,WAAW,OAAA,EAAS;AACtB,UAAA,oBAAA,CAAqB,gBAAgB,CAAA;AAAA,QACvC;AACA,QAAA,OAAO,gBAAA;AAAA,MACT,SAAS,GAAA,EAAK;AACZ,QAAA,MAAM,UAAA,GAAa,QAAQ,GAAG,CAAA;AAC9B,QAAA,IAAI,WAAW,OAAA,EAAS;AACtB,UAAA,QAAA,CAAS,UAAU,CAAA;AAAA,QACrB;AACA,QAAA,OAAO,IAAA;AAAA,MACT,CAAA,SAAE;AACA,QAAA,IAAI,WAAW,OAAA,EAAS;AACtB,UAAA,UAAA,CAAW,KAAK,CAAA;AAAA,QAClB;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA,CAAC,OAAA,EAAS,QAAA,EAAU,IAAA,EAAM,UAAU;AAAA,GACtC;AAEA,EAAA,OAAO,EAAE,YAAA,EAAc,OAAA,EAAS,KAAA,EAAO,SAAS,eAAA,EAAgB;AAClE;AAEO,SAAS,oBAAoB,OAAA,EAAyD;AAC3F,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,OAAA,EAAQ;AACzB,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIH,SAA0C,IAAI,CAAA;AAC5E,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,SAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAuB,IAAI,CAAA;AACrD,EAAA,MAAM,aAAa,aAAA,EAAc;AAEjC,EAAA,MAAM,qBAAqB,IAAA,CAAK,SAAA,CAAU,OAAA,CAAQ,eAAA,IAAmB,EAAE,CAAA;AAEvE,EAAA,MAAM,QAAA,GAAWG,YAAY,YAAY;AACvC,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,MAAM,iBAAA,GAAoB,IAAI,KAAA,CAAM,eAAe,CAAA;AACnD,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,QAAA,CAAS,iBAAiB,CAAA;AAAA,MAC5B;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,MAAM,kBAAkB,IAAI,GAAA,CAAI,OAAA,CAAQ,eAAA,IAAmB,EAAE,CAAA;AAC7D,IAAA,MAAM,cAAA,GAAiB,QAAQ,cAAA,IAAkB,GAAA;AACjD,IAAA,MAAM,SAAA,GAAY,QAAQ,SAAA,IAAa,GAAA;AACvC,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA;AAE9B,IAAA,IAAI,WAAW,OAAA,EAAS;AACtB,MAAA,UAAA,CAAW,IAAI,CAAA;AACf,MAAA,QAAA,CAAS,IAAI,CAAA;AAAA,IACf;AAEA,IAAA,IAAI;AACF,MAAA,OAAO,IAAA,CAAK,GAAA,EAAI,IAAK,QAAA,EAAU;AAC7B,QAAA,IAAI,QAAQ,WAAA,EAAa;AACvB,UAAA,MAAM,UAAA,GAAa,qBAAA;AAAA,YACjB,MAAM,IAAA,CAAK,KAAA,CAAM,kBAAA,CAAmB,QAAQ,WAAW;AAAA,WACzD;AAEA,UAAA,IAAI,UAAA,IAAc,CAAC,eAAA,CAAgB,GAAA,CAAI,UAAU,CAAA,EAAG;AAClD,YAAA,MAAM,mBAAA,GAAsB;AAAA,cAC1B,SAAA,EAAW,UAAA;AAAA,cACX,eAAe,OAAA,CAAQ;AAAA,aACzB;AAEA,YAAA,IAAI,WAAW,OAAA,EAAS;AACtB,cAAA,UAAA,CAAW,mBAAmB,CAAA;AAAA,YAChC;AAEA,YAAA,OAAO,mBAAA;AAAA,UACT;AAAA,QACF;AAEA,QAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAA,CAAM,yBAAA,CAA0B,QAAQ,aAAa,CAAA;AACjF,QAAA,MAAM,QAAA,GAAW,sBAAA,CAAuB,QAAA,CAAS,QAAA,IAAY,EAAE,CAAA;AAC/D,QAAA,MAAM,aAAa,QAAA,CAAS,IAAA;AAAA,UAC1B,CAAC,kBAAA,KAAuB,CAAC,eAAA,CAAgB,GAAA,CAAI,mBAAmB,SAAS;AAAA,SAC3E;AAEA,QAAA,IAAI,UAAA,EAAY;AACd,UAAA,IAAI,WAAW,OAAA,EAAS;AACtB,YAAA,UAAA,CAAW,UAAU,CAAA;AAAA,UACvB;AACA,UAAA,OAAO,UAAA;AAAA,QACT;AAEA,QAAA,IAAI,IAAA,CAAK,GAAA,EAAI,GAAI,cAAA,GAAiB,QAAA,EAAU;AAC1C,UAAA;AAAA,QACF;AAEA,QAAA,MAAM,MAAM,cAAc,CAAA;AAAA,MAC5B;AAEA,MAAA,MAAM,eAAe,IAAI,KAAA;AAAA,QACvB,CAAA,gDAAA,EAAmD,QAAQ,aAAa,CAAA;AAAA,OAC1E;AAEA,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,UAAA,CAAW,IAAI,CAAA;AACf,QAAA,QAAA,CAAS,YAAY,CAAA;AAAA,MACvB;AAEA,MAAA,OAAO,IAAA;AAAA,IACT,SAAS,GAAA,EAAK;AACZ,MAAA,MAAM,UAAA,GAAa,QAAQ,GAAG,CAAA;AAC9B,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,UAAA,CAAW,IAAI,CAAA;AACf,QAAA,QAAA,CAAS,UAAU,CAAA;AAAA,MACrB;AACA,MAAA,OAAO,IAAA;AAAA,IACT,CAAA,SAAE;AACA,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,UAAA,CAAW,KAAK,CAAA;AAAA,MAClB;AAAA,IACF;AAAA,EACF,CAAA,EAAG;AAAA,IACD,kBAAA;AAAA,IACA,IAAA;AAAA,IACA,UAAA;AAAA,IACA,OAAA,CAAQ,aAAA;AAAA,IACR,OAAA,CAAQ,eAAA;AAAA,IACR,OAAA,CAAQ,cAAA;AAAA,IACR,OAAA,CAAQ,WAAA;AAAA,IACR,OAAA,CAAQ;AAAA,GACT,CAAA;AAED,EAAA,MAAM,KAAA,GAAQA,YAAY,MAAM;AAC9B,IAAA,IAAI,WAAW,OAAA,EAAS;AACtB,MAAA,UAAA,CAAW,IAAI,CAAA;AACf,MAAA,QAAA,CAAS,IAAI,CAAA;AACb,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EACF,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAEf,EAAA,OAAO,EAAE,OAAA,EAAS,OAAA,EAAS,KAAA,EAAO,UAAU,KAAA,EAAM;AACpD;AAIO,SAAS,gBAAA,GAAmB;AACjC,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,OAAA,EAAQ;AACzB,EAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAO,GAAA,KAAQ,gBAAA,EAAiB;AAEjD,EAAA,MAAMO,cAAAA,GAAgBP,WAAAA;AAAA,IACpB,OAAO,OAAA,KAAkC;AACvC,MAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,MAAA,OAAO,IAAI,MAAM,IAAA,CAAK,KAAA,CAAM,aAAA,CAAc,OAAO,CAAC,CAAA;AAAA,IACpD,CAAA;AAAA,IACA,CAAC,MAAM,GAAG;AAAA,GACZ;AAEA,EAAA,OAAO,EAAE,aAAA,EAAAO,cAAAA,EAAe,OAAA,EAAS,KAAA,EAAM;AACzC;AAEO,SAAS,gBAAA,GAAmB;AACjC,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,OAAA,EAAQ;AACzB,EAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAO,GAAA,KAAQ,gBAAA,EAAiB;AAEjD,EAAA,MAAM,aAAA,GAAgBP,WAAAA;AAAA,IACpB,OAAO,SAAA,KAAsB;AAC3B,MAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,MAAA,OAAO,IAAI,MAAM,IAAA,CAAK,KAAA,CAAM,aAAA,CAAc,SAAS,CAAC,CAAA;AAAA,IACtD,CAAA;AAAA,IACA,CAAC,MAAM,GAAG;AAAA,GACZ;AAEA,EAAA,OAAO,EAAE,aAAA,EAAe,OAAA,EAAS,KAAA,EAAM;AACzC;AAEO,SAAS,cAAA,GAAiB;AAC/B,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,OAAA,EAAQ;AACzB,EAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAO,GAAA,KAAQ,gBAAA,EAAiB;AAEjD,EAAA,MAAM,WAAA,GAAcA,WAAAA;AAAA,IAClB,OAAO,SAAA,KAAsB;AAC3B,MAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,MAAA,OAAO,IAAI,MAAM,IAAA,CAAK,KAAA,CAAM,WAAA,CAAY,SAAS,CAAC,CAAA;AAAA,IACpD,CAAA;AAAA,IACA,CAAC,MAAM,GAAG;AAAA,GACZ;AAEA,EAAA,OAAO,EAAE,WAAA,EAAa,OAAA,EAAS,KAAA,EAAM;AACvC;AAEO,SAAS,gBAAgB,SAAA,EAA2B;AACzD,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,OAAA,EAAQ;AACzB,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIH,SAAwB,IAAI,CAAA;AAC1D,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,SAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAuB,IAAI,CAAA;AACrD,EAAA,MAAM,aAAa,aAAA,EAAc;AAEjC,EAAA,MAAM,OAAA,GAAUG,YAAY,YAAY;AACtC,IAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,SAAA,EAAW;AACvB,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,UAAA,CAAW,IAAI,CAAA;AACf,QAAA,QAAA,CAAS,IAAI,CAAA;AACb,QAAA,UAAA,CAAW,KAAK,CAAA;AAAA,MAClB;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,WAAW,OAAA,EAAS;AACtB,MAAA,UAAA,CAAW,IAAI,CAAA;AACf,MAAA,QAAA,CAAS,IAAI,CAAA;AAAA,IACf;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,KAAA,CAAM,gBAAgB,SAAS,CAAA;AACzD,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,UAAA,CAAW,MAAM,CAAA;AAAA,MACnB;AAAA,IACF,SAAS,GAAA,EAAK;AACZ,MAAA,MAAM,UAAA,GAAa,QAAQ,GAAG,CAAA;AAC9B,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,QAAA,CAAS,UAAU,CAAA;AAAA,MACrB;AAAA,IACF,CAAA,SAAE;AACA,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,UAAA,CAAW,KAAK,CAAA;AAAA,MAClB;AAAA,IACF;AAAA,EACF,CAAA,EAAG,CAAC,SAAA,EAAW,IAAA,EAAM,UAAU,CAAC,CAAA;AAEhC,EAAAD,UAAU,MAAM;AACd,IAAA,KAAK,OAAA,EAAQ;AAAA,EACf,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,OAAO,EAAE,OAAA,EAAS,OAAA,EAAS,KAAA,EAAO,OAAA,EAAQ;AAC5C;AAIO,SAAS,aAAa,OAAA,EAAyB;AACpD,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,OAAA,EAAQ;AACzB,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIF,SAA2B,IAAI,CAAA;AACjE,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,SAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAuB,IAAI,CAAA;AACrD,EAAA,MAAM,aAAa,aAAA,EAAc;AAEjC,EAAA,MAAM,OAAA,GAAUG,YAAY,YAAY;AACtC,IAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,OAAA,EAAS;AACrB,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,YAAA,CAAa,IAAI,CAAA;AACjB,QAAA,QAAA,CAAS,IAAI,CAAA;AACb,QAAA,UAAA,CAAW,KAAK,CAAA;AAAA,MAClB;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,WAAW,OAAA,EAAS;AACtB,MAAA,UAAA,CAAW,IAAI,CAAA;AACf,MAAA,QAAA,CAAS,IAAI,CAAA;AAAA,IACf;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,KAAA,CAAM,aAAa,OAAO,CAAA;AACpD,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,YAAA,CAAa,MAAM,CAAA;AAAA,MACrB;AAAA,IACF,SAAS,GAAA,EAAK;AACZ,MAAA,MAAM,UAAA,GAAa,QAAQ,GAAG,CAAA;AAC9B,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,QAAA,CAAS,UAAU,CAAA;AAAA,MACrB;AAAA,IACF,CAAA,SAAE;AACA,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,UAAA,CAAW,KAAK,CAAA;AAAA,MAClB;AAAA,IACF;AAAA,EACF,CAAA,EAAG,CAAC,OAAA,EAAS,IAAA,EAAM,UAAU,CAAC,CAAA;AAE9B,EAAAD,UAAU,MAAM;AACd,IAAA,KAAK,OAAA,EAAQ;AAAA,EACf,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,OAAO,EAAE,SAAA,EAAW,OAAA,EAAS,KAAA,EAAO,OAAA,EAAQ;AAC9C;AAEO,SAAS,cAAA,GAAiB;AAC/B,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,OAAA,EAAQ;AACzB,EAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAO,GAAA,KAAQ,gBAAA,EAAiB;AAEjD,EAAA,MAAM,WAAA,GAAcC,WAAAA;AAAA,IAClB,OAAO,SAAiB,OAAA,KAAiC;AACvD,MAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,MAAA,OAAO,IAAI,MAAM,IAAA,CAAK,MAAM,WAAA,CAAY,OAAA,EAAS,OAAO,CAAC,CAAA;AAAA,IAC3D,CAAA;AAAA,IACA,CAAC,MAAM,GAAG;AAAA,GACZ;AAEA,EAAA,OAAO,EAAE,WAAA,EAAa,OAAA,EAAS,KAAA,EAAM;AACvC;AAEO,SAAS,YAAA,GAAe;AAC7B,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,OAAA,EAAQ;AACzB,EAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAO,GAAA,KAAQ,gBAAA,EAAiB;AAEjD,EAAA,MAAM,SAAA,GAAYA,WAAAA;AAAA,IAChB,OAAO,SAAiB,OAAA,KAA+B;AACrD,MAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,MAAA,OAAO,IAAI,MAAM,IAAA,CAAK,MAAM,SAAA,CAAU,OAAA,EAAS,OAAO,CAAC,CAAA;AAAA,IACzD,CAAA;AAAA,IACA,CAAC,MAAM,GAAG;AAAA,GACZ;AAEA,EAAA,OAAO,EAAE,SAAA,EAAW,OAAA,EAAS,KAAA,EAAM;AACrC;AAEO,SAAS,kBAAA,GAAqB;AACnC,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,OAAA,EAAQ;AACzB,EAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAO,GAAA,KAAQ,gBAAA,EAAiB;AAEjD,EAAA,MAAM,eAAA,GAAkBA,WAAAA;AAAA,IACtB,OAAO,SAAiB,OAAA,KAAoC;AAC1D,MAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,MAAA,OAAO,IAAI,MAAM,IAAA,CAAK,MAAM,eAAA,CAAgB,OAAA,EAAS,OAAO,CAAC,CAAA;AAAA,IAC/D,CAAA;AAAA,IACA,CAAC,MAAM,GAAG;AAAA,GACZ;AAEA,EAAA,OAAO,EAAE,eAAA,EAAiB,OAAA,EAAS,KAAA,EAAM;AAC3C;AAEO,SAAS,qBAAA,GAAwB;AACtC,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,OAAA,EAAQ;AACzB,EAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAO,GAAA,KAAQ,gBAAA,EAAiB;AAEjD,EAAA,MAAM,kBAAA,GAAqBA,WAAAA;AAAA,IACzB,OAAO,SAAiB,OAAA,KAAuC;AAC7D,MAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,MAAA,OAAO,IAAI,MAAM,IAAA,CAAK,MAAM,kBAAA,CAAmB,OAAA,EAAS,OAAO,CAAC,CAAA;AAAA,IAClE,CAAA;AAAA,IACA,CAAC,MAAM,GAAG;AAAA,GACZ;AAEA,EAAA,OAAO,EAAE,kBAAA,EAAoB,OAAA,EAAS,KAAA,EAAM;AAC9C;AAIO,SAAS,aAAA,GAAgB;AAC9B,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,OAAA,EAAQ;AACzB,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIH,QAAAA,CAAsB,EAAE,CAAA;AAC5D,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,SAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAuB,IAAI,CAAA;AACrD,EAAA,MAAM,aAAa,aAAA,EAAc;AAEjC,EAAA,MAAM,OAAA,GAAUG,YAAY,YAAY;AACtC,IAAA,IAAI,CAAC,IAAA,EAAM;AAEX,IAAA,IAAI,WAAW,OAAA,EAAS;AACtB,MAAA,UAAA,CAAW,IAAI,CAAA;AACf,MAAA,QAAA,CAAS,IAAI,CAAA;AAAA,IACf;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,KAAA,CAAM,cAAA,EAAe;AAC/C,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,aAAA,CAAc,MAAM,CAAA;AAAA,MACtB;AAAA,IACF,SAAS,GAAA,EAAK;AACZ,MAAA,MAAM,UAAA,GAAa,QAAQ,GAAG,CAAA;AAC9B,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,QAAA,CAAS,UAAU,CAAA;AAAA,MACrB;AAAA,IACF,CAAA,SAAE;AACA,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,UAAA,CAAW,KAAK,CAAA;AAAA,MAClB;AAAA,IACF;AAAA,EACF,CAAA,EAAG,CAAC,IAAA,EAAM,UAAU,CAAC,CAAA;AAErB,EAAAD,UAAU,MAAM;AACd,IAAA,KAAK,OAAA,EAAQ;AAAA,EACf,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,OAAO,EAAE,UAAA,EAAY,OAAA,EAAS,KAAA,EAAO,OAAA,EAAQ;AAC/C;AAEO,SAAS,aAAa,WAAA,EAA6B;AACxD,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,OAAA,EAAQ;AACzB,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIF,SAA2B,IAAI,CAAA;AACjE,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,SAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAuB,IAAI,CAAA;AACrD,EAAA,MAAM,aAAa,aAAA,EAAc;AAEjC,EAAA,MAAM,OAAA,GAAUG,YAAY,YAAY;AACtC,IAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,WAAA,EAAa;AACzB,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,YAAA,CAAa,IAAI,CAAA;AACjB,QAAA,QAAA,CAAS,IAAI,CAAA;AACb,QAAA,UAAA,CAAW,KAAK,CAAA;AAAA,MAClB;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,WAAW,OAAA,EAAS;AACtB,MAAA,UAAA,CAAW,IAAI,CAAA;AACf,MAAA,QAAA,CAAS,IAAI,CAAA;AAAA,IACf;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,KAAA,CAAM,aAAa,WAAW,CAAA;AACxD,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,YAAA,CAAa,MAAM,CAAA;AAAA,MACrB;AAAA,IACF,SAAS,GAAA,EAAK;AACZ,MAAA,MAAM,UAAA,GAAa,QAAQ,GAAG,CAAA;AAC9B,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,QAAA,CAAS,UAAU,CAAA;AAAA,MACrB;AAAA,IACF,CAAA,SAAE;AACA,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,UAAA,CAAW,KAAK,CAAA;AAAA,MAClB;AAAA,IACF;AAAA,EACF,CAAA,EAAG,CAAC,WAAA,EAAa,IAAA,EAAM,UAAU,CAAC,CAAA;AAElC,EAAAD,UAAU,MAAM;AACd,IAAA,KAAK,OAAA,EAAQ;AAAA,EACf,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,OAAO,EAAE,SAAA,EAAW,OAAA,EAAS,KAAA,EAAO,OAAA,EAAQ;AAC9C;AAEO,SAAS,qBAAqB,WAAA,EAA6B;AAChE,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,OAAA,EAAQ;AACzB,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIF,SAAmC,IAAI,CAAA;AACvE,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,SAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAuB,IAAI,CAAA;AACrD,EAAA,MAAM,aAAa,aAAA,EAAc;AAEjC,EAAA,MAAM,OAAA,GAAUG,YAAY,YAAY;AACtC,IAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,WAAA,EAAa;AACzB,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,WAAA,CAAY,IAAI,CAAA;AAChB,QAAA,QAAA,CAAS,IAAI,CAAA;AACb,QAAA,UAAA,CAAW,KAAK,CAAA;AAAA,MAClB;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,WAAW,OAAA,EAAS;AACtB,MAAA,UAAA,CAAW,IAAI,CAAA;AACf,MAAA,QAAA,CAAS,IAAI,CAAA;AAAA,IACf;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,KAAA,CAAM,qBAAqB,WAAW,CAAA;AAChE,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,WAAA,CAAY,MAAM,CAAA;AAAA,MACpB;AAAA,IACF,SAAS,GAAA,EAAK;AACZ,MAAA,MAAM,UAAA,GAAa,QAAQ,GAAG,CAAA;AAC9B,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,QAAA,CAAS,UAAU,CAAA;AAAA,MACrB;AAAA,IACF,CAAA,SAAE;AACA,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,UAAA,CAAW,KAAK,CAAA;AAAA,MAClB;AAAA,IACF;AAAA,EACF,CAAA,EAAG,CAAC,WAAA,EAAa,IAAA,EAAM,UAAU,CAAC,CAAA;AAElC,EAAAD,UAAU,MAAM;AACd,IAAA,KAAK,OAAA,EAAQ;AAAA,EACf,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,OAAO,EAAE,QAAA,EAAU,OAAA,EAAS,KAAA,EAAO,OAAA,EAAQ;AAC7C;AAEO,SAAS,4BAA4B,aAAA,EAA+B;AACzE,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,OAAA,EAAQ;AACzB,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIF,QAAAA,CAAsB,EAAE,CAAA;AAC5D,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,SAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAuB,IAAI,CAAA;AACrD,EAAA,MAAM,aAAa,aAAA,EAAc;AAEjC,EAAA,MAAM,OAAA,GAAUG,YAAY,YAAY;AACtC,IAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,aAAA,EAAe;AAC3B,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,aAAA,CAAc,EAAE,CAAA;AAChB,QAAA,QAAA,CAAS,IAAI,CAAA;AACb,QAAA,UAAA,CAAW,KAAK,CAAA;AAAA,MAClB;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,WAAW,OAAA,EAAS;AACtB,MAAA,UAAA,CAAW,IAAI,CAAA;AACf,MAAA,QAAA,CAAS,IAAI,CAAA;AAAA,IACf;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,KAAA,CAAM,6BAA6B,aAAa,CAAA;AAC1E,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,aAAA,CAAc,MAAM,CAAA;AAAA,MACtB;AAAA,IACF,SAAS,GAAA,EAAK;AACZ,MAAA,MAAM,UAAA,GAAa,QAAQ,GAAG,CAAA;AAC9B,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,QAAA,CAAS,UAAU,CAAA;AAAA,MACrB;AAAA,IACF,CAAA,SAAE;AACA,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,UAAA,CAAW,KAAK,CAAA;AAAA,MAClB;AAAA,IACF;AAAA,EACF,CAAA,EAAG,CAAC,aAAA,EAAe,IAAA,EAAM,UAAU,CAAC,CAAA;AAEpC,EAAAD,UAAU,MAAM;AACd,IAAA,KAAK,OAAA,EAAQ;AAAA,EACf,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,OAAO,EAAE,UAAA,EAAY,OAAA,EAAS,KAAA,EAAO,OAAA,EAAQ;AAC/C;AAEO,SAAS,kBAAA,GAAqB;AACnC,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,OAAA,EAAQ;AACzB,EAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAO,GAAA,KAAQ,gBAAA,EAAiB;AAEjD,EAAA,MAAM,eAAA,GAAkBC,WAAAA;AAAA,IACtB,OAAO,OAAA,KAAoC;AACzC,MAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,MAAA,OAAO,IAAI,MAAM,IAAA,CAAK,KAAA,CAAM,eAAA,CAAgB,OAAO,CAAC,CAAA;AAAA,IACtD,CAAA;AAAA,IACA,CAAC,MAAM,GAAG;AAAA,GACZ;AAEA,EAAA,OAAO,EAAE,eAAA,EAAiB,OAAA,EAAS,KAAA,EAAM;AAC3C;AAEO,SAAS,kBAAA,GAAqB;AACnC,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,OAAA,EAAQ;AACzB,EAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAO,GAAA,KAAQ,gBAAA,EAAiB;AAEjD,EAAA,MAAM,eAAA,GAAkBA,WAAAA;AAAA,IACtB,OAAO,aAAqB,OAAA,KAAqC;AAC/D,MAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,MAAA,OAAO,IAAI,MAAM,IAAA,CAAK,MAAM,eAAA,CAAgB,WAAA,EAAa,OAAO,CAAC,CAAA;AAAA,IACnE,CAAA;AAAA,IACA,CAAC,MAAM,GAAG;AAAA,GACZ;AAEA,EAAA,OAAO,EAAE,eAAA,EAAiB,OAAA,EAAS,KAAA,EAAM;AAC3C;AAEO,SAAS,4BAAA,GAA+B;AAC7C,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,OAAA,EAAQ;AACzB,EAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAO,GAAA,KAAQ,gBAAA,EAAiB;AAEjD,EAAA,MAAM,yBAAA,GAA4BA,WAAAA;AAAA,IAChC,OACE,aACA,OAAA,KACkG;AAClG,MAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,MAAA,OAAO,IAAI,MAAM,IAAA,CAAK,MAAM,yBAAA,CAA0B,WAAA,EAAa,OAAO,CAAC,CAAA;AAAA,IAC7E,CAAA;AAAA,IACA,CAAC,MAAM,GAAG;AAAA,GACZ;AAEA,EAAA,OAAO,EAAE,yBAAA,EAA2B,OAAA,EAAS,KAAA,EAAM;AACrD;AAEO,SAAS,gBAAA,GAAmB;AACjC,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,OAAA,EAAQ;AACzB,EAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAO,GAAA,KAAQ,gBAAA,EAAiB;AAEjD,EAAA,MAAM,aAAA,GAAgBA,WAAAA;AAAA,IACpB,OAAO,aAAqB,OAAA,KAAkC;AAC5D,MAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,MAAA,OAAO,IAAI,MAAM,IAAA,CAAK,MAAM,aAAA,CAAc,WAAA,EAAa,OAAO,CAAC,CAAA;AAAA,IACjE,CAAA;AAAA,IACA,CAAC,MAAM,GAAG;AAAA,GACZ;AAEA,EAAA,OAAO,EAAE,aAAA,EAAe,OAAA,EAAS,KAAA,EAAM;AACzC;AAEO,SAAS,yBAAA,GAA4B;AAC1C,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,OAAA,EAAQ;AACzB,EAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAO,GAAA,KAAQ,gBAAA,EAAiB;AAEjD,EAAA,MAAM,sBAAA,GAAyBA,WAAAA;AAAA,IAC7B,OAAO,aAAqB,OAAA,KAA4C;AACtE,MAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,MAAA,OAAO,IAAI,MAAM,IAAA,CAAK,MAAM,sBAAA,CAAuB,WAAA,EAAa,OAAO,CAAC,CAAA;AAAA,IAC1E,CAAA;AAAA,IACA,CAAC,MAAM,GAAG;AAAA,GACZ;AAEA,EAAA,OAAO,EAAE,sBAAA,EAAwB,OAAA,EAAS,KAAA,EAAM;AAClD;AAEO,SAAS,mBAAmB,WAAA,EAA6B;AAC9D,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,OAAA,EAAQ;AACzB,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIH,QAAAA,CAA0B,EAAE,CAAA;AACxD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,SAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAuB,IAAI,CAAA;AACrD,EAAA,MAAM,aAAa,aAAA,EAAc;AAEjC,EAAA,MAAM,OAAA,GAAUG,YAAY,YAAY;AACtC,IAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,WAAA,EAAa;AACzB,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,SAAA,CAAU,EAAE,CAAA;AACZ,QAAA,QAAA,CAAS,IAAI,CAAA;AACb,QAAA,UAAA,CAAW,KAAK,CAAA;AAAA,MAClB;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,WAAW,OAAA,EAAS;AACtB,MAAA,UAAA,CAAW,IAAI,CAAA;AACf,MAAA,QAAA,CAAS,IAAI,CAAA;AAAA,IACf;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,KAAA,CAAM,oBAAoB,WAAW,CAAA;AAC/D,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,SAAA,CAAU,MAAM,CAAA;AAAA,MAClB;AAAA,IACF,SAAS,GAAA,EAAK;AACZ,MAAA,MAAM,UAAA,GAAa,QAAQ,GAAG,CAAA;AAC9B,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,QAAA,CAAS,UAAU,CAAA;AAAA,MACrB;AAAA,IACF,CAAA,SAAE;AACA,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,UAAA,CAAW,KAAK,CAAA;AAAA,MAClB;AAAA,IACF;AAAA,EACF,CAAA,EAAG,CAAC,WAAA,EAAa,IAAA,EAAM,UAAU,CAAC,CAAA;AAElC,EAAAD,UAAU,MAAM;AACd,IAAA,KAAK,OAAA,EAAQ;AAAA,EACf,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,OAAO,EAAE,MAAA,EAAQ,OAAA,EAAS,KAAA,EAAO,OAAA,EAAQ;AAC3C;AAIO,SAAS,mBAAA,GAAsB;AACpC,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,OAAA,EAAQ;AACzB,EAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAO,GAAA,KAAQ,gBAAA,EAAiB;AAEjD,EAAA,MAAM,gBAAA,GAAmBC,WAAAA;AAAA,IACvB,OAAO,OAAA,EAAiB,QAAA,EAAkB,OAAA,KAAqC;AAC7E,MAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,MAAA,OAAO,GAAA,CAAI,MAAM,IAAA,CAAK,KAAA,CAAM,iBAAiB,OAAA,EAAS,QAAA,EAAU,OAAO,CAAC,CAAA;AAAA,IAC1E,CAAA;AAAA,IACA,CAAC,MAAM,GAAG;AAAA,GACZ;AAEA,EAAA,OAAO,EAAE,gBAAA,EAAkB,OAAA,EAAS,KAAA,EAAM;AAC5C;AAEO,SAAS,yBAAA,GAA4B;AAC1C,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,OAAA,EAAQ;AACzB,EAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAO,GAAA,KAAQ,gBAAA,EAAiB;AAEjD,EAAA,MAAM,sBAAA,GAAyBA,WAAAA;AAAA,IAC7B,OAAO,SAAiB,OAAA,KAA2C;AACjE,MAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,MAAA,OAAO,IAAI,MAAM,IAAA,CAAK,MAAM,sBAAA,CAAuB,OAAA,EAAS,OAAO,CAAC,CAAA;AAAA,IACtE,CAAA;AAAA,IACA,CAAC,MAAM,GAAG;AAAA,GACZ;AAEA,EAAA,OAAO,EAAE,sBAAA,EAAwB,OAAA,EAAS,KAAA,EAAM;AAClD;AAEO,SAAS,uBAAA,GAA0B;AACxC,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,OAAA,EAAQ;AACzB,EAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAO,GAAA,KAAQ,gBAAA,EAAiB;AAEjD,EAAA,MAAM,oBAAA,GAAuBA,WAAAA;AAAA,IAC3B,OAAO,SAAiB,OAAA,KAAyC;AAC/D,MAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,MAAA,OAAO,IAAI,MAAM,IAAA,CAAK,MAAM,oBAAA,CAAqB,OAAA,EAAS,OAAO,CAAC,CAAA;AAAA,IACpE,CAAA;AAAA,IACA,CAAC,MAAM,GAAG;AAAA,GACZ;AAEA,EAAA,OAAO,EAAE,oBAAA,EAAsB,OAAA,EAAS,KAAA,EAAM;AAChD;AAEO,SAAS,wBAAA,GAA2B;AACzC,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,OAAA,EAAQ;AACzB,EAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAO,GAAA,KAAQ,gBAAA,EAAiB;AAEjD,EAAA,MAAM,qBAAA,GAAwBA,WAAAA;AAAA,IAC5B,OAAO,SAAiB,OAAA,KAA0C;AAChE,MAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,MAAA,OAAO,IAAI,MAAM,IAAA,CAAK,MAAM,qBAAA,CAAsB,OAAA,EAAS,OAAO,CAAC,CAAA;AAAA,IACrE,CAAA;AAAA,IACA,CAAC,MAAM,GAAG;AAAA,GACZ;AAEA,EAAA,OAAO,EAAE,qBAAA,EAAuB,OAAA,EAAS,KAAA,EAAM;AACjD;AAEO,SAAS,sBAAA,GAAyB;AACvC,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,OAAA,EAAQ;AACzB,EAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAO,GAAA,KAAQ,gBAAA,EAAiB;AAEjD,EAAA,MAAM,mBAAA,GAAsBA,WAAAA;AAAA,IAC1B,OAAO,SAAiB,OAAA,KAAwC;AAC9D,MAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,MAAA,OAAO,IAAI,MAAM,IAAA,CAAK,MAAM,mBAAA,CAAoB,OAAA,EAAS,OAAO,CAAC,CAAA;AAAA,IACnE,CAAA;AAAA,IACA,CAAC,MAAM,GAAG;AAAA,GACZ;AAEA,EAAA,OAAO,EAAE,mBAAA,EAAqB,OAAA,EAAS,KAAA,EAAM;AAC/C;AAEO,SAAS,gBAAA,GAAmB;AACjC,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,OAAA,EAAQ;AACzB,EAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAO,GAAA,KAAQ,gBAAA,EAAiB;AAEjD,EAAA,MAAM,aAAA,GAAgBA,WAAAA;AAAA,IACpB,OAAO,SAAiB,OAAA,KAAkC;AACxD,MAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,MAAA,OAAO,IAAI,MAAM,IAAA,CAAK,MAAM,aAAA,CAAc,OAAA,EAAS,OAAO,CAAC,CAAA;AAAA,IAC7D,CAAA;AAAA,IACA,CAAC,MAAM,GAAG;AAAA,GACZ;AAEA,EAAA,OAAO,EAAE,aAAA,EAAe,OAAA,EAAS,KAAA,EAAM;AACzC;AAEO,SAAS,iBAAA,GAAoB;AAClC,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,OAAA,EAAQ;AACzB,EAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAO,GAAA,KAAQ,gBAAA,EAAiB;AAEjD,EAAA,MAAM,cAAA,GAAiBA,WAAAA;AAAA,IACrB,OAAO,OAAA,EAAiB,QAAA,EAAkB,OAAA,KAAmC;AAC3E,MAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,MAAA,OAAO,GAAA,CAAI,MAAM,IAAA,CAAK,KAAA,CAAM,eAAe,OAAA,EAAS,QAAA,EAAU,OAAO,CAAC,CAAA;AAAA,IACxE,CAAA;AAAA,IACA,CAAC,MAAM,GAAG;AAAA,GACZ;AAEA,EAAA,OAAO,EAAE,cAAA,EAAgB,OAAA,EAAS,KAAA,EAAM;AAC1C;AAIO,SAAS,0BAAA,GAA6B;AAC3C,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,OAAA,EAAQ;AACzB,EAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAO,GAAA,KAAQ,gBAAA,EAAiB;AAEjD,EAAA,MAAM,uBAAA,GAA0BA,WAAAA;AAAA,IAC9B,OAAO,SAAiB,OAAA,KAA4C;AAClE,MAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,MAAA,OAAO,IAAI,MAAM,IAAA,CAAK,MAAM,uBAAA,CAAwB,OAAA,EAAS,OAAO,CAAC,CAAA;AAAA,IACvE,CAAA;AAAA,IACA,CAAC,MAAM,GAAG;AAAA,GACZ;AAEA,EAAA,OAAO,EAAE,uBAAA,EAAyB,OAAA,EAAS,KAAA,EAAM;AACnD;AAEO,SAAS,eAAA,GAAkB;AAChC,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,OAAA,EAAQ;AACzB,EAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAO,GAAA,KAAQ,gBAAA,EAAiB;AAEjD,EAAA,MAAM,YAAA,GAAeA,WAAAA;AAAA,IACnB,OAAO,SAAiB,OAAA,KAAiC;AACvD,MAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,MAAA,OAAO,IAAI,MAAM,IAAA,CAAK,MAAM,YAAA,CAAa,OAAA,EAAS,OAAO,CAAC,CAAA;AAAA,IAC5D,CAAA;AAAA,IACA,CAAC,MAAM,GAAG;AAAA,GACZ;AAEA,EAAA,OAAO,EAAE,YAAA,EAAc,OAAA,EAAS,KAAA,EAAM;AACxC;AAEO,SAAS,sBAAsB,OAAA,EAAyB;AAC7D,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,OAAA,EAAQ;AACzB,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIH,SAAyC,IAAI,CAAA;AACvF,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,SAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAuB,IAAI,CAAA;AACrD,EAAA,MAAM,aAAa,aAAA,EAAc;AAEjC,EAAA,MAAM,OAAA,GAAUG,YAAY,YAAY;AACtC,IAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,OAAA,EAAS;AACrB,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,gBAAA,CAAiB,IAAI,CAAA;AACrB,QAAA,QAAA,CAAS,IAAI,CAAA;AACb,QAAA,UAAA,CAAW,KAAK,CAAA;AAAA,MAClB;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,WAAW,OAAA,EAAS;AACtB,MAAA,UAAA,CAAW,IAAI,CAAA;AACf,MAAA,QAAA,CAAS,IAAI,CAAA;AAAA,IACf;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,KAAA,CAAM,sBAAsB,OAAO,CAAA;AAC7D,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,gBAAA,CAAiB,MAAM,CAAA;AAAA,MACzB;AAAA,IACF,SAAS,GAAA,EAAK;AACZ,MAAA,MAAM,UAAA,GAAa,QAAQ,GAAG,CAAA;AAC9B,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,QAAA,CAAS,UAAU,CAAA;AAAA,MACrB;AAAA,IACF,CAAA,SAAE;AACA,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,UAAA,CAAW,KAAK,CAAA;AAAA,MAClB;AAAA,IACF;AAAA,EACF,CAAA,EAAG,CAAC,OAAA,EAAS,IAAA,EAAM,UAAU,CAAC,CAAA;AAE9B,EAAAD,UAAU,MAAM;AACd,IAAA,KAAK,OAAA,EAAQ;AAAA,EACf,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,OAAO,EAAE,aAAA,EAAe,OAAA,EAAS,KAAA,EAAO,OAAA,EAAQ;AAClD;AAEO,SAAS,oBAAA,GAAuB;AACrC,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,OAAA,EAAQ;AACzB,EAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAO,GAAA,KAAQ,gBAAA,EAAiB;AAEjD,EAAA,MAAM,iBAAA,GAAoBC,WAAAA;AAAA,IACxB,OAAO,SAAiB,OAAA,KAAuC;AAC7D,MAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,MAAA,OAAO,IAAI,MAAM,IAAA,CAAK,MAAM,iBAAA,CAAkB,OAAA,EAAS,OAAO,CAAC,CAAA;AAAA,IACjE,CAAA;AAAA,IACA,CAAC,MAAM,GAAG;AAAA,GACZ;AAEA,EAAA,OAAO,EAAE,iBAAA,EAAmB,OAAA,EAAS,KAAA,EAAM;AAC7C;AAEO,SAAS,YAAA,GAAe;AAC7B,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,OAAA,EAAQ;AACzB,EAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAO,GAAA,KAAQ,gBAAA,EAAiB;AAEjD,EAAA,MAAM,SAAA,GAAYA,WAAAA;AAAA,IAChB,OAAO,eAAuB,OAAA,KAA8B;AAC1D,MAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,MAAA,OAAO,IAAI,MAAM,IAAA,CAAK,MAAM,SAAA,CAAU,aAAA,EAAe,OAAO,CAAC,CAAA;AAAA,IAC/D,CAAA;AAAA,IACA,CAAC,MAAM,GAAG;AAAA,GACZ;AAEA,EAAA,OAAO,EAAE,SAAA,EAAW,OAAA,EAAS,KAAA,EAAM;AACrC;AAEO,SAAS,cAAA,GAAiB;AAC/B,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,OAAA,EAAQ;AACzB,EAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAO,GAAA,KAAQ,gBAAA,EAAiB;AAEjD,EAAA,MAAM,WAAA,GAAcA,WAAAA;AAAA,IAClB,OAAO,eAAuB,OAAA,KAAgC;AAC5D,MAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,MAAA,OAAO,IAAI,MAAM,IAAA,CAAK,MAAM,WAAA,CAAY,aAAA,EAAe,OAAO,CAAC,CAAA;AAAA,IACjE,CAAA;AAAA,IACA,CAAC,MAAM,GAAG;AAAA,GACZ;AAEA,EAAA,OAAO,EAAE,WAAA,EAAa,OAAA,EAAS,KAAA,EAAM;AACvC;AAEO,SAAS,aAAa,OAAA,EAAyB;AACpD,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,OAAA,EAAQ;AACzB,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIH,QAAAA,CAA0B,EAAE,CAAA;AAC9D,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,SAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAuB,IAAI,CAAA;AACrD,EAAA,MAAM,aAAa,aAAA,EAAc;AAEjC,EAAA,MAAM,OAAA,GAAUG,YAAY,YAAY;AACtC,IAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,OAAA,EAAS;AACrB,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,YAAA,CAAa,EAAE,CAAA;AACf,QAAA,QAAA,CAAS,IAAI,CAAA;AACb,QAAA,UAAA,CAAW,KAAK,CAAA;AAAA,MAClB;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,WAAW,OAAA,EAAS;AACtB,MAAA,UAAA,CAAW,IAAI,CAAA;AACf,MAAA,QAAA,CAAS,IAAI,CAAA;AAAA,IACf;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,KAAA,CAAM,cAAc,OAAO,CAAA;AACrD,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,YAAA,CAAa,MAAM,CAAA;AAAA,MACrB;AAAA,IACF,SAAS,GAAA,EAAK;AACZ,MAAA,MAAM,UAAA,GAAa,QAAQ,GAAG,CAAA;AAC9B,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,QAAA,CAAS,UAAU,CAAA;AAAA,MACrB;AAAA,IACF,CAAA,SAAE;AACA,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,UAAA,CAAW,KAAK,CAAA;AAAA,MAClB;AAAA,IACF;AAAA,EACF,CAAA,EAAG,CAAC,OAAA,EAAS,IAAA,EAAM,UAAU,CAAC,CAAA;AAE9B,EAAAD,UAAU,MAAM;AACd,IAAA,KAAK,OAAA,EAAQ;AAAA,EACf,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,OAAO,EAAE,SAAA,EAAW,OAAA,EAAS,KAAA,EAAO,OAAA,EAAQ;AAC9C;AAIO,SAAS,yBAAA,GAA4B;AAC1C,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,OAAA,EAAQ;AACzB,EAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAO,GAAA,KAAQ,gBAAA,EAAiB;AAEjD,EAAA,MAAM,sBAAA,GAAyBC,WAAAA;AAAA,IAC7B,OAAO,OAAA,EAAiB,SAAA,EAAmB,OAAA,KAA4C;AACrF,MAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,MAAA,OAAO,GAAA,CAAI,MAAM,IAAA,CAAK,KAAA,CAAM,uBAAuB,OAAA,EAAS,SAAA,EAAW,OAAO,CAAC,CAAA;AAAA,IACjF,CAAA;AAAA,IACA,CAAC,MAAM,GAAG;AAAA,GACZ;AAEA,EAAA,OAAO,EAAE,sBAAA,EAAwB,OAAA,EAAS,KAAA,EAAM;AAClD","file":"index.js","sourcesContent":["/**\n * Types for mero-react\n */\n\nimport type { MeroJs } from '@calimero-network/mero-js';\n\n/**\n * Application mode determines the permission scope\n */\nexport enum AppMode {\n /** Single-context: auth flow handles context selection */\n SingleContext = 'single-context',\n /** Multi-context: user can manage multiple contexts */\n MultiContext = 'multi-context',\n /** Admin: full administrative access */\n Admin = 'admin',\n}\n\n/**\n * Connection type for the login modal\n */\nexport enum ConnectionType {\n /** Show both local and remote options */\n RemoteAndLocal = 'remote-and-local',\n /** Show only remote option */\n Remote = 'remote',\n /** Show only local option */\n Local = 'local',\n /** Custom URL (skip modal) */\n Custom = 'custom',\n}\n\n/**\n * Custom connection configuration\n */\nexport interface CustomConnectionConfig {\n type: ConnectionType.Custom;\n url: string;\n}\n\n/**\n * Context for an application\n */\nexport interface AppContext {\n contextId: string;\n executorId: string;\n applicationId: string;\n}\n\n/**\n * Result of an RPC execution\n */\nexport interface ExecutionResult<T = unknown> {\n success: boolean;\n result?: T;\n error?: string;\n}\n\nexport interface ApplicationContextRecord {\n contextId: string;\n applicationId: string;\n}\n\nexport interface ContextDiscoveryOptions {\n applicationId: string;\n knownContextIds?: string[];\n targetAlias?: string;\n pollIntervalMs?: number;\n timeoutMs?: number;\n}\n\nexport interface ContextDiscoveryState {\n context: ApplicationContextRecord | null;\n loading: boolean;\n error: Error | null;\n discover: () => Promise<ApplicationContextRecord | null>;\n reset: () => void;\n}\n\n/**\n * Mero context value exposed by useMero hook\n */\nexport interface MeroContextValue {\n /** The MeroJs instance (null if not connected) */\n mero: MeroJs | null;\n /** Whether the user is authenticated */\n isAuthenticated: boolean;\n /** Whether the connection is online */\n isOnline: boolean;\n /** The current node URL */\n nodeUrl: string | null;\n /** The application ID */\n applicationId: string | null;\n /** The context ID (from auth flow) */\n contextId: string | null;\n /** The context identity / executor public key (from auth flow) */\n contextIdentity: string | null;\n /** Connect to a node URL and start auth flow */\n connectToNode: (url: string) => void;\n /** Logout and clear tokens */\n logout: () => void;\n /** Loading state */\n isLoading: boolean;\n}\n\n/**\n * MeroProvider configuration\n */\nexport interface MeroProviderConfig {\n /** Application mode */\n mode: AppMode;\n /** Package name (for registry-based apps) */\n packageName?: string;\n /** Package version (optional, defaults to latest) */\n packageVersion?: string;\n /** Registry URL (optional) */\n registryUrl?: string;\n /** Request timeout in milliseconds */\n timeoutMs?: number;\n}\n","/**\n * Storage utilities for mero-react\n * \n * Provides localStorage-based token storage and other persistence utilities.\n */\n\nimport type { TokenData } from '@calimero-network/mero-js';\n\n// Storage keys\nconst STORAGE_KEYS = {\n ACCESS_TOKEN: 'mero:access_token',\n REFRESH_TOKEN: 'mero:refresh_token',\n EXPIRES_AT: 'mero:expires_at',\n NODE_URL: 'mero:node_url',\n APPLICATION_ID: 'mero:application_id',\n CONTEXT_ID: 'mero:context_id',\n CONTEXT_IDENTITY: 'mero:context_identity',\n} as const;\n\nlet _storageAvailable: boolean | null = null;\n\nfunction isLocalStorageAvailable(): boolean {\n if (_storageAvailable !== null) return _storageAvailable;\n try {\n if (typeof window === 'undefined' || !window.localStorage) {\n _storageAvailable = false;\n return false;\n }\n const testKey = '__mero_test__';\n localStorage.setItem(testKey, 'test');\n localStorage.removeItem(testKey);\n _storageAvailable = true;\n } catch {\n _storageAvailable = false;\n }\n return _storageAvailable;\n}\n\nexport const localStorageTokenStorage = {\n async get(): Promise<TokenData | null> {\n if (!isLocalStorageAvailable()) {\n return null;\n }\n\n try {\n const accessToken = localStorage.getItem(STORAGE_KEYS.ACCESS_TOKEN);\n const refreshToken = localStorage.getItem(STORAGE_KEYS.REFRESH_TOKEN);\n const expiresAt = localStorage.getItem(STORAGE_KEYS.EXPIRES_AT);\n\n if (!accessToken || !refreshToken) {\n return null;\n }\n\n return {\n access_token: accessToken,\n refresh_token: refreshToken,\n expires_at: expiresAt ? parseInt(expiresAt, 10) : Date.now() + 3600000,\n };\n } catch (e) {\n console.error('[mero-react] Failed to get token from storage:', e);\n return null;\n }\n },\n\n async set(token: TokenData): Promise<void> {\n if (!isLocalStorageAvailable()) {\n return;\n }\n\n try {\n localStorage.setItem(STORAGE_KEYS.ACCESS_TOKEN, token.access_token);\n localStorage.setItem(STORAGE_KEYS.REFRESH_TOKEN, token.refresh_token);\n localStorage.setItem(STORAGE_KEYS.EXPIRES_AT, token.expires_at.toString());\n } catch (e) {\n console.error('[mero-react] Failed to save token to storage:', e);\n }\n },\n\n async clear(): Promise<void> {\n if (!isLocalStorageAvailable()) {\n return;\n }\n\n try {\n localStorage.removeItem(STORAGE_KEYS.ACCESS_TOKEN);\n localStorage.removeItem(STORAGE_KEYS.REFRESH_TOKEN);\n localStorage.removeItem(STORAGE_KEYS.EXPIRES_AT);\n } catch (e) {\n console.error('[mero-react] Failed to clear token from storage:', e);\n }\n },\n};\n\n/**\n * Get the stored node URL\n */\nexport function getNodeUrl(): string | null {\n if (!isLocalStorageAvailable()) return null;\n return localStorage.getItem(STORAGE_KEYS.NODE_URL);\n}\n\n/**\n * Set the node URL\n */\nexport function setNodeUrl(url: string): void {\n if (!isLocalStorageAvailable()) return;\n localStorage.setItem(STORAGE_KEYS.NODE_URL, url);\n}\n\n/**\n * Clear the node URL\n */\nexport function clearNodeUrl(): void {\n if (!isLocalStorageAvailable()) return;\n localStorage.removeItem(STORAGE_KEYS.NODE_URL);\n}\n\n/**\n * Get the stored application ID\n */\nexport function getApplicationId(): string | null {\n if (!isLocalStorageAvailable()) return null;\n return localStorage.getItem(STORAGE_KEYS.APPLICATION_ID);\n}\n\n/**\n * Set the application ID\n */\nexport function setApplicationId(id: string): void {\n if (!isLocalStorageAvailable()) return;\n localStorage.setItem(STORAGE_KEYS.APPLICATION_ID, id);\n}\n\n/**\n * Clear the application ID\n */\nexport function clearApplicationId(): void {\n if (!isLocalStorageAvailable()) return;\n localStorage.removeItem(STORAGE_KEYS.APPLICATION_ID);\n}\n\n/**\n * Get the stored context ID\n */\nexport function getContextId(): string | null {\n if (!isLocalStorageAvailable()) return null;\n return localStorage.getItem(STORAGE_KEYS.CONTEXT_ID);\n}\n\n/**\n * Set the context ID\n */\nexport function setContextId(id: string): void {\n if (!isLocalStorageAvailable()) return;\n localStorage.setItem(STORAGE_KEYS.CONTEXT_ID, id);\n}\n\n/**\n * Clear the context ID\n */\nexport function clearContextId(): void {\n if (!isLocalStorageAvailable()) return;\n localStorage.removeItem(STORAGE_KEYS.CONTEXT_ID);\n}\n\n/**\n * Get the stored context identity\n */\nexport function getContextIdentity(): string | null {\n if (!isLocalStorageAvailable()) return null;\n return localStorage.getItem(STORAGE_KEYS.CONTEXT_IDENTITY);\n}\n\n/**\n * Set the context identity\n */\nexport function setContextIdentity(id: string): void {\n if (!isLocalStorageAvailable()) return;\n localStorage.setItem(STORAGE_KEYS.CONTEXT_IDENTITY, id);\n}\n\n/**\n * Clear the context identity\n */\nexport function clearContextIdentity(): void {\n if (!isLocalStorageAvailable()) return;\n localStorage.removeItem(STORAGE_KEYS.CONTEXT_IDENTITY);\n}\n\n/**\n * Clear all mero-react storage\n */\nexport function clearAllStorage(): void {\n if (!isLocalStorageAvailable()) return;\n Object.values(STORAGE_KEYS).forEach((key) => {\n localStorage.removeItem(key);\n });\n}\n","import React, {\n createContext,\n useContext,\n useState,\n useEffect,\n useCallback,\n useRef,\n useMemo,\n} from 'react';\nimport {\n MeroJs,\n LocalStorageTokenStore,\n parseAuthCallback,\n buildAuthLoginUrl,\n} from '@calimero-network/mero-js';\nimport { AppMode } from '../types';\nimport type { AuthCallbackResult } from '@calimero-network/mero-js';\nimport {\n getNodeUrl,\n setNodeUrl,\n getApplicationId,\n setApplicationId,\n getContextId,\n setContextId,\n getContextIdentity,\n setContextIdentity,\n clearAllStorage,\n} from '../storage';\nimport type { MeroContextValue, MeroProviderConfig } from '../types';\n\nconst MeroContext = createContext<MeroContextValue | null>(null);\n\nconst isBrowser = typeof window !== 'undefined';\n\nlet _tokenStore: LocalStorageTokenStore | null = null;\nfunction getTokenStore(): LocalStorageTokenStore {\n if (!_tokenStore) {\n _tokenStore = new LocalStorageTokenStore();\n }\n return _tokenStore;\n}\n\nfunction getPermissionsForMode(mode: AppMode): string[] {\n switch (mode) {\n case AppMode.SingleContext:\n return ['context:execute'];\n case AppMode.MultiContext:\n return ['context:create', 'context:list', 'context:execute'];\n case AppMode.Admin:\n return ['admin'];\n default:\n throw new Error(`Unsupported application mode: ${mode}`);\n }\n}\n\nfunction parseJwtExpiry(token: string): number {\n try {\n const parts = token.split('.');\n if (parts.length === 3) {\n let b64 = parts[1].replace(/-/g, '+').replace(/_/g, '/');\n while (b64.length % 4) b64 += '=';\n const payload: { exp?: number } = JSON.parse(atob(b64));\n if (payload.exp && payload.exp > 0) {\n return payload.exp * 1000;\n }\n }\n } catch {\n // fall through\n }\n return Date.now() + 3_600_000;\n}\n\nexport interface MeroProviderProps extends MeroProviderConfig {\n children: React.ReactNode;\n}\n\nexport function MeroProvider({\n children,\n mode,\n packageName,\n packageVersion,\n registryUrl,\n timeoutMs = 30000,\n}: MeroProviderProps) {\n const [mero, setMero] = useState<MeroJs | null>(null);\n const [isAuthenticated, setIsAuthenticated] = useState(false);\n const [isOnline, setIsOnline] = useState(true);\n const [isLoading, setIsLoading] = useState(true);\n const [nodeUrl, setNodeUrlState] = useState<string | null>(() => getNodeUrl());\n const [applicationId, setApplicationIdState] = useState<string | null>(\n () => getApplicationId() || null,\n );\n const [contextId, setContextIdState] = useState<string | null>(() => getContextId());\n const [contextIdentity, setContextIdentityState] = useState<string | null>(() => getContextIdentity());\n\n const meroRef = useRef<MeroJs | null>(null);\n\n // Parse auth callback ONCE in a ref (StrictMode-safe: refs persist across unmount/remount)\n const callbackRef = useRef<AuthCallbackResult | null | undefined>(undefined);\n if (callbackRef.current === undefined && isBrowser) {\n callbackRef.current = parseAuthCallback(window.location.href);\n }\n\n const createMeroInstance = useCallback(\n (url: string): MeroJs => {\n if (meroRef.current) {\n meroRef.current.close();\n }\n const instance = new MeroJs({\n baseUrl: url,\n tokenStore: getTokenStore(),\n timeoutMs,\n });\n meroRef.current = instance;\n return instance;\n },\n [timeoutMs],\n );\n\n const checkAuth = useCallback(async (instance: MeroJs): Promise<boolean> => {\n try {\n await instance.admin.getContexts();\n return true;\n } catch {\n return false;\n }\n }, []);\n\n const connectToNode = useCallback(\n (url: string) => {\n if (!isBrowser) return;\n setNodeUrl(url);\n setNodeUrlState(url);\n\n const callbackUrl = new URL(window.location.href);\n callbackUrl.hash = '';\n\n const loginUrl = buildAuthLoginUrl(url, {\n callbackUrl: callbackUrl.toString(),\n permissions: getPermissionsForMode(mode),\n mode,\n packageName,\n packageVersion,\n registryUrl,\n });\n\n window.location.href = loginUrl;\n },\n [mode, packageName, packageVersion, registryUrl],\n );\n\n const logout = useCallback(() => {\n if (meroRef.current) {\n meroRef.current.clearToken();\n meroRef.current.close();\n }\n clearAllStorage();\n setMero(null);\n setIsAuthenticated(false);\n setNodeUrlState(null);\n setApplicationIdState(null);\n setContextIdState(null);\n setContextIdentityState(null);\n meroRef.current = null;\n }, []);\n\n // Initialization effect\n useEffect(() => {\n let active = true;\n\n const init = async () => {\n const callback = callbackRef.current;\n if (callback) {\n getTokenStore().setTokens({\n access_token: callback.accessToken,\n refresh_token: callback.refreshToken,\n expires_at: parseJwtExpiry(callback.accessToken),\n });\n\n if (callback.applicationId) {\n setApplicationId(callback.applicationId);\n if (active) setApplicationIdState(callback.applicationId);\n }\n if (callback.contextId) {\n setContextId(callback.contextId);\n if (active) setContextIdState(callback.contextId);\n }\n if (callback.contextIdentity) {\n setContextIdentity(callback.contextIdentity);\n if (active) setContextIdentityState(callback.contextIdentity);\n }\n if (callback.nodeUrl) {\n setNodeUrl(callback.nodeUrl);\n if (active) setNodeUrlState(callback.nodeUrl);\n }\n\n if (isBrowser) {\n window.history.replaceState({}, '', window.location.pathname + window.location.search);\n }\n callbackRef.current = null;\n }\n\n const savedUrl = callback?.nodeUrl || getNodeUrl();\n if (!savedUrl) {\n if (active) setIsLoading(false);\n return;\n }\n\n const instance = createMeroInstance(savedUrl);\n const authed = await checkAuth(instance);\n\n if (!active) return;\n\n if (authed) {\n setMero(instance);\n setIsAuthenticated(true);\n setIsOnline(true);\n } else if (callback) {\n setMero(instance);\n }\n\n setIsLoading(false);\n };\n\n init().catch((err) => {\n console.error('[MeroProvider] Initialization failed:', err);\n if (active) setIsLoading(false);\n });\n\n return () => {\n active = false;\n };\n }, [createMeroInstance, checkAuth]);\n\n // SSE connection for online/offline detection — no polling.\n useEffect(() => {\n if (!isAuthenticated || !meroRef.current) return;\n\n let active = true;\n const sse = meroRef.current.events;\n\n const onConnect = () => { if (active) setIsOnline(true); };\n const onError = (err: Error) => {\n if (!active) return;\n setIsOnline(false);\n if (err.message.includes('401')) {\n logout();\n }\n };\n\n sse.on('connect', onConnect);\n sse.on('error', onError);\n sse.connect().catch(() => { if (active) setIsOnline(false); });\n\n return () => {\n active = false;\n sse.off('connect', onConnect);\n sse.off('error', onError);\n };\n }, [isAuthenticated, mero]);\n\n const contextValue = useMemo<MeroContextValue>(\n () => ({\n mero,\n isAuthenticated,\n isOnline,\n nodeUrl,\n applicationId,\n contextId,\n contextIdentity,\n connectToNode,\n logout,\n isLoading,\n }),\n [mero, isAuthenticated, isOnline, nodeUrl, applicationId, contextId, contextIdentity, connectToNode, logout, isLoading],\n );\n\n return (\n <MeroContext.Provider value={contextValue}>\n {children}\n </MeroContext.Provider>\n );\n}\n\nexport function useMero(): MeroContextValue {\n const context = useContext(MeroContext);\n if (!context) {\n throw new Error('useMero must be used within a MeroProvider');\n }\n return context;\n}\n\nexport { MeroContext };\n","/**\n * LoginModal - Modal for connecting to a Calimero node\n * \n * Allows users to select local or remote node connection.\n */\n\nimport { useState, useEffect, useCallback } from 'react';\nimport { createPortal } from 'react-dom';\nimport type { ConnectionType, CustomConnectionConfig } from '../types';\nimport { ConnectionType as ConnectionTypeEnum } from '../types';\n\nexport interface LoginModalProps {\n /** Callback when user connects */\n onConnect: (url: string) => void;\n /** Callback when modal is closed */\n onClose: () => void;\n /** Connection type determines what options to show */\n connectionType: ConnectionType | CustomConnectionConfig;\n /** Whether the modal is open */\n isOpen: boolean;\n}\n\n/**\n * Validate URL format\n */\nfunction isValidUrl(urlString: string): boolean {\n if (!urlString || urlString.trim() === '') {\n return false;\n }\n\n try {\n const urlToTest =\n urlString.startsWith('http://') || urlString.startsWith('https://')\n ? urlString\n : `https://${urlString}`;\n\n const url = new URL(urlToTest);\n\n if (url.protocol !== 'http:' && url.protocol !== 'https:') {\n return false;\n }\n\n if (!url.hostname) {\n return false;\n }\n\n const hostname = url.hostname;\n\n // Allow localhost\n if (hostname === 'localhost') {\n return true;\n }\n\n // Check for valid IP address\n const ipv4Regex = /^(\\d{1,3}\\.){3}\\d{1,3}$/;\n if (ipv4Regex.test(hostname)) {\n const octets = hostname.split('.').map(Number);\n return octets.every((octet) => octet >= 0 && octet <= 255);\n }\n\n // Check for valid domain name\n const domainRegex =\n /^[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n return domainRegex.test(hostname);\n } catch {\n return false;\n }\n}\n\n// Inline styles for the modal\nconst styles = {\n overlay: {\n position: 'fixed' as const,\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.75)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: 10000,\n padding: '1rem',\n },\n content: {\n backgroundColor: '#1f2937',\n borderRadius: '12px',\n padding: '2rem',\n maxWidth: '400px',\n width: '100%',\n position: 'relative' as const,\n border: '1px solid #374151',\n boxShadow: '0 25px 50px -12px rgba(0, 0, 0, 0.5)',\n },\n closeButton: {\n position: 'absolute' as const,\n top: '1rem',\n right: '1rem',\n background: 'none',\n border: 'none',\n fontSize: '1.5rem',\n color: '#9ca3af',\n cursor: 'pointer',\n padding: '0.25rem',\n lineHeight: 1,\n },\n header: {\n display: 'flex',\n flexDirection: 'column' as const,\n alignItems: 'center',\n gap: '0.75rem',\n marginBottom: '1.5rem',\n },\n title: {\n fontSize: '1.25rem',\n fontWeight: 600,\n color: '#f3f4f6',\n margin: 0,\n },\n info: {\n color: '#9ca3af',\n textAlign: 'center' as const,\n marginBottom: '1.5rem',\n fontSize: '0.875rem',\n },\n error: {\n color: '#ef4444',\n backgroundColor: 'rgba(239, 68, 68, 0.1)',\n border: '1px solid rgba(239, 68, 68, 0.3)',\n borderRadius: '6px',\n padding: '0.75rem',\n marginBottom: '1rem',\n fontSize: '0.875rem',\n textAlign: 'center' as const,\n },\n radioGroup: {\n display: 'flex',\n gap: '1rem',\n marginBottom: '1rem',\n justifyContent: 'center',\n },\n radioLabel: {\n display: 'flex',\n alignItems: 'center',\n gap: '0.5rem',\n color: '#e5e7eb',\n cursor: 'pointer',\n padding: '0.5rem 1rem',\n borderRadius: '6px',\n border: '1px solid #374151',\n backgroundColor: '#111827',\n transition: 'all 0.2s',\n },\n radioLabelActive: {\n borderColor: '#3b82f6',\n backgroundColor: 'rgba(59, 130, 246, 0.1)',\n },\n input: {\n width: '100%',\n padding: '0.75rem 1rem',\n borderRadius: '6px',\n border: '1px solid #374151',\n backgroundColor: '#111827',\n color: '#f3f4f6',\n fontSize: '0.875rem',\n outline: 'none',\n marginBottom: '1rem',\n boxSizing: 'border-box' as const,\n },\n localInfo: {\n color: '#9ca3af',\n fontSize: '0.875rem',\n textAlign: 'center' as const,\n padding: '0.75rem',\n backgroundColor: '#111827',\n borderRadius: '6px',\n marginBottom: '1rem',\n },\n buttonGroup: {\n display: 'flex',\n justifyContent: 'center',\n },\n button: {\n padding: '0.75rem 2rem',\n borderRadius: '6px',\n border: 'none',\n fontSize: '0.875rem',\n fontWeight: 600,\n cursor: 'pointer',\n backgroundColor: '#3b82f6',\n color: 'white',\n transition: 'all 0.2s',\n },\n buttonDisabled: {\n opacity: 0.5,\n cursor: 'not-allowed',\n },\n loading: {\n display: 'flex',\n flexDirection: 'column' as const,\n alignItems: 'center',\n gap: '1rem',\n padding: '2rem',\n color: '#9ca3af',\n },\n spinner: {\n width: '2rem',\n height: '2rem',\n border: '3px solid #374151',\n borderTopColor: '#3b82f6',\n borderRadius: '50%',\n animation: 'spin 1s linear infinite',\n },\n};\n\n/**\n * LoginModal - Connection modal component\n */\nexport function LoginModal({\n onConnect,\n onClose,\n connectionType,\n isOpen,\n}: LoginModalProps) {\n const [nodeType, setNodeType] = useState<'local' | 'remote'>('local');\n const [nodeUrl, setNodeUrl] = useState<string>('');\n const [isValid, setIsValid] = useState<boolean>(true);\n const [loading, setLoading] = useState<boolean>(false);\n const [error, setError] = useState<string | null>(null);\n\n // Determine what to show\n const shouldShowLocal =\n connectionType === ConnectionTypeEnum.RemoteAndLocal ||\n connectionType === ConnectionTypeEnum.Local;\n const shouldShowRemote =\n connectionType === ConnectionTypeEnum.RemoteAndLocal ||\n connectionType === ConnectionTypeEnum.Remote;\n const shouldShowRadioGroup = shouldShowLocal && shouldShowRemote;\n\n // Load saved URL\n useEffect(() => {\n const savedUrl = localStorage.getItem('mero:node_url');\n if (savedUrl) {\n setNodeUrl(savedUrl);\n }\n }, []);\n\n // Set initial node type\n useEffect(() => {\n if (connectionType === ConnectionTypeEnum.Local) {\n setNodeType('local');\n } else if (connectionType === ConnectionTypeEnum.Remote) {\n setNodeType('remote');\n }\n }, [connectionType]);\n\n // Validate URL\n useEffect(() => {\n if (nodeType === 'remote') {\n setIsValid(isValidUrl(nodeUrl));\n } else {\n setIsValid(true);\n }\n }, [nodeUrl, nodeType]);\n\n const handleConnect = useCallback(async () => {\n if (!isValid) return;\n\n setLoading(true);\n setError(null);\n\n const baseUrl =\n nodeType === 'local' ? 'http://node1.127.0.0.1.nip.io' : nodeUrl;\n\n try {\n // Test connection\n const response = await fetch(\n new URL('admin-api/is-authed', baseUrl).toString()\n );\n\n if (response.ok || response.status === 401) {\n setLoading(false);\n const normalizedUrl = baseUrl.replace(/\\/+$/, '');\n onConnect(normalizedUrl);\n } else {\n throw new Error(`Connection failed: ${response.statusText}`);\n }\n } catch (err) {\n console.error('Connection failed:', err);\n setError('Failed to connect. Please check the URL and try again.');\n setLoading(false);\n }\n }, [isValid, nodeType, nodeUrl, onConnect]);\n\n if (!isOpen) {\n return null;\n }\n\n const modalContent = (\n <>\n {/* Inject keyframes for spinner */}\n <style>{`\n @keyframes spin {\n to { transform: rotate(360deg); }\n }\n `}</style>\n <div style={styles.overlay} onClick={onClose}>\n <div style={styles.content} onClick={(e) => e.stopPropagation()}>\n <button style={styles.closeButton} onClick={onClose}>\n ×\n </button>\n\n <div style={styles.header}>\n <MeroLogo />\n <h1 style={styles.title}>Connect to Calimero</h1>\n </div>\n\n {loading ? (\n <div style={styles.loading}>\n <p>Connecting to node...</p>\n <div style={styles.spinner} />\n </div>\n ) : (\n <>\n <p style={styles.info}>\n {shouldShowRadioGroup\n ? 'Select your Calimero node type to continue.'\n : connectionType === ConnectionTypeEnum.Local\n ? 'Connect to your local Calimero node.'\n : 'Enter your remote Calimero node URL.'}\n </p>\n\n {error && <p style={styles.error}>{error}</p>}\n\n {shouldShowRadioGroup && (\n <div style={styles.radioGroup}>\n <label\n style={{\n ...styles.radioLabel,\n ...(nodeType === 'local' ? styles.radioLabelActive : {}),\n }}\n onClick={() => setNodeType('local')}\n >\n <input\n type=\"radio\"\n value=\"local\"\n checked={nodeType === 'local'}\n onChange={() => setNodeType('local')}\n style={{ display: 'none' }}\n />\n 🏠 Local\n </label>\n <label\n style={{\n ...styles.radioLabel,\n ...(nodeType === 'remote' ? styles.radioLabelActive : {}),\n }}\n onClick={() => setNodeType('remote')}\n >\n <input\n type=\"radio\"\n value=\"remote\"\n checked={nodeType === 'remote'}\n onChange={() => setNodeType('remote')}\n style={{ display: 'none' }}\n />\n 🌐 Remote\n </label>\n </div>\n )}\n\n <div>\n {shouldShowRemote && nodeType === 'remote' ? (\n <input\n type=\"text\"\n value={nodeUrl}\n onChange={(e) => setNodeUrl(e.target.value)}\n placeholder=\"https://your-node-url.calimero.network\"\n style={styles.input}\n onKeyDown={(e) => {\n if (e.key === 'Enter' && isValid) {\n handleConnect();\n }\n }}\n />\n ) : shouldShowLocal ? (\n <p style={styles.localInfo}>\n Using default local node: <br />\n <code style={{ color: '#60a5fa' }}>http://node1.127.0.0.1.nip.io</code>\n </p>\n ) : null}\n </div>\n\n <div style={styles.buttonGroup}>\n <button\n onClick={handleConnect}\n disabled={!isValid || loading}\n style={{\n ...styles.button,\n ...(!isValid || loading ? styles.buttonDisabled : {}),\n }}\n >\n Connect\n </button>\n </div>\n </>\n )}\n </div>\n </div>\n </>\n );\n\n // Use portal to render at document root, outside any container styling\n return createPortal(modalContent, document.body);\n}\n\n/**\n * Simple Calimero logo\n */\nfunction MeroLogo() {\n return (\n <svg\n width=\"40\"\n height=\"40\"\n viewBox=\"0 0 24 24\"\n fill=\"#3b82f6\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm-1-13h2v6h-2zm0 8h2v2h-2z\" />\n </svg>\n );\n}\n\nexport default LoginModal;\n","/**\n * ConnectButton - A button component for connecting to Calimero\n * \n * Shows connection status and provides login/logout functionality.\n * Includes built-in LoginModal for node selection.\n */\n\nimport React, { useState, useEffect, useRef, useMemo } from 'react';\nimport { useMero } from '../context';\nimport { LoginModal } from './LoginModal';\nimport type { ConnectionType, CustomConnectionConfig } from '../types';\nimport { ConnectionType as ConnectionTypeEnum } from '../types';\n\nexport interface ConnectButtonProps {\n /** Connection type for login modal */\n connectionType?: ConnectionType | CustomConnectionConfig;\n /** Custom class name */\n className?: string;\n /** Custom styles */\n style?: React.CSSProperties;\n}\n\n/**\n * ConnectButton - Displays connection status and handles login/logout\n */\nexport function ConnectButton({\n connectionType = ConnectionTypeEnum.RemoteAndLocal,\n className,\n style,\n}: ConnectButtonProps) {\n const { isAuthenticated, connectToNode, logout, nodeUrl, isOnline } = useMero();\n const [isDropdownOpen, setIsDropdownOpen] = useState(false);\n const [isModalOpen, setIsModalOpen] = useState(false);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n // Close dropdown when clicking outside\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n dropdownRef.current &&\n !dropdownRef.current.contains(event.target as Node)\n ) {\n setIsDropdownOpen(false);\n }\n };\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, []);\n\n const dashboardUrl = useMemo(() => {\n if (!isAuthenticated || !nodeUrl) return '#';\n return new URL('admin-dashboard/', nodeUrl).toString();\n }, [isAuthenticated, nodeUrl]);\n\n const handleConnect = () => {\n // If Custom type with URL, connect directly\n if (\n typeof connectionType === 'object' &&\n connectionType.type === ConnectionTypeEnum.Custom\n ) {\n connectToNode(connectionType.url);\n return;\n }\n\n // Otherwise, open modal\n setIsModalOpen(true);\n };\n\n const handleModalConnect = (url: string) => {\n setIsModalOpen(false);\n connectToNode(url);\n };\n\n // Reconnecting state\n if (isAuthenticated && !isOnline) {\n return (\n <button\n className={`mero-connect-button mero-reconnecting ${className || ''}`}\n style={style}\n disabled\n >\n <MeroLogo />\n Reconnecting...\n </button>\n );\n }\n\n // Connected state\n if (isAuthenticated) {\n return (\n <div ref={dropdownRef} className=\"mero-connect-container\" style={{ position: 'relative', display: 'inline-block' }}>\n <button\n className={`mero-connect-button mero-connected ${className || ''}`}\n style={style}\n onClick={() => setIsDropdownOpen((prev) => !prev)}\n >\n <MeroLogo />\n Connected\n </button>\n {isDropdownOpen && (\n <div className=\"mero-dropdown\">\n <div className=\"mero-dropdown-info\" title={nodeUrl || ''}>\n {nodeUrl}\n </div>\n <a\n href={dashboardUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"mero-dropdown-item\"\n >\n Dashboard\n </a>\n <button\n className=\"mero-dropdown-item\"\n onClick={() => {\n setIsDropdownOpen(false);\n logout();\n }}\n >\n Log out\n </button>\n </div>\n )}\n </div>\n );\n }\n\n // Disconnected state\n return (\n <>\n <button\n className={`mero-connect-button ${className || ''}`}\n style={style}\n onClick={handleConnect}\n >\n <MeroLogo />\n Connect\n </button>\n <LoginModal\n isOpen={isModalOpen}\n onConnect={handleModalConnect}\n onClose={() => setIsModalOpen(false)}\n connectionType={typeof connectionType === 'object' ? ConnectionTypeEnum.RemoteAndLocal : connectionType}\n />\n </>\n );\n}\n\n/**\n * Simple Calimero logo component\n */\nfunction MeroLogo() {\n return (\n <svg\n className=\"mero-logo\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm-1-13h2v6h-2zm0 8h2v2h-2z\" />\n </svg>\n );\n}\n\nexport default ConnectButton;\n","import { useState, useCallback, useEffect, useRef } from 'react';\nimport { useMero } from '../context';\nimport type {\n Context,\n CreateContextRequest,\n CreateGroupInvitationRequest,\n CreateGroupInNamespaceRequest,\n CreateNamespaceInvitationRequest,\n CreateNamespaceInvitationResponseData,\n CreateNamespaceRequest,\n CreateRecursiveInvitationResponseData,\n DeleteGroupRequest,\n DeleteNamespaceRequest,\n DetachContextFromGroupRequest,\n GroupContextEntry,\n GroupInfo,\n GroupMember,\n GroupUpgradeStatusResponseData,\n JoinGroupRequest,\n JoinNamespaceRequest,\n ListGroupMembersResponseData,\n Namespace,\n NamespaceIdentity,\n NestGroupRequest,\n AddGroupMembersRequest,\n RegisterGroupSigningKeyRequest,\n RemoveGroupMembersRequest,\n RetryGroupUpgradeRequest,\n SetDefaultCapabilitiesRequest,\n SetDefaultVisibilityRequest,\n SetGroupAliasRequest,\n SetMemberAliasRequest,\n SetTeeAdmissionPolicyRequest,\n SubgroupEntry,\n SyncGroupRequest,\n SseEventData,\n UnnestGroupRequest,\n UpdateGroupSettingsRequest,\n UpdateMemberRoleRequest,\n UpgradeGroupRequest,\n} from '@calimero-network/mero-js';\nimport type {\n ApplicationContextRecord,\n ContextDiscoveryOptions,\n ContextDiscoveryState,\n} from '../types';\n\nexport { useMero } from '../context';\n\nfunction toError(err: unknown): Error {\n return err instanceof Error ? err : new Error(String(err));\n}\n\nfunction mapApplicationContexts(contexts: Context[]): ApplicationContextRecord[] {\n return contexts.map((context) => ({\n contextId: context.id,\n applicationId: context.applicationId,\n }));\n}\n\nfunction useMountedRef() {\n const mountedRef = useRef(true);\n\n useEffect(() => {\n mountedRef.current = true;\n return () => {\n mountedRef.current = false;\n };\n }, []);\n\n return mountedRef;\n}\n\nfunction useAsyncMutation() {\n const mountedRef = useMountedRef();\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const run = useCallback(\n async <T,>(action: () => Promise<T>): Promise<T | null> => {\n if (mountedRef.current) {\n setLoading(true);\n setError(null);\n }\n\n try {\n return await action();\n } catch (err) {\n const errorValue = toError(err);\n if (mountedRef.current) {\n setError(errorValue);\n }\n return null;\n } finally {\n if (mountedRef.current) {\n setLoading(false);\n }\n }\n },\n [mountedRef],\n );\n\n return { loading, error, run, setError };\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => {\n setTimeout(resolve, ms);\n });\n}\n\nfunction extractAliasContextId(value: unknown): string | null {\n if (typeof value === 'string') {\n return value;\n }\n\n if (!value || typeof value !== 'object') {\n return null;\n }\n\n if ('value' in value && typeof value.value === 'string') {\n return value.value;\n }\n\n if ('contextId' in value && typeof value.contextId === 'string') {\n return value.contextId;\n }\n\n return null;\n}\n\n/**\n * Execute RPC methods against a context.\n * Tracks loading/error state. Unmount-safe.\n */\nexport function useExecute(contextId: string | null, executorId: string | null) {\n const { mero } = useMero();\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const mountedRef = useRef(true);\n\n useEffect(() => {\n mountedRef.current = true;\n return () => { mountedRef.current = false; };\n }, []);\n\n const execute = useCallback(\n async <T = unknown>(method: string, params?: Record<string, unknown>): Promise<T | null> => {\n if (!mero || !contextId || !executorId) {\n if (mountedRef.current) setError(new Error('Not connected'));\n return null;\n }\n\n if (mountedRef.current) {\n setLoading(true);\n setError(null);\n }\n try {\n const result = await mero.rpc.execute<T>({\n contextId,\n method,\n argsJson: params,\n executorPublicKey: executorId,\n });\n return result;\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err));\n if (mountedRef.current) setError(e);\n return null;\n } finally {\n if (mountedRef.current) setLoading(false);\n }\n },\n [mero, contextId, executorId],\n );\n\n return { execute, loading, error };\n}\n\n/**\n * Subscribe to SSE events for context IDs.\n * StrictMode-safe: tracks the SseClient instance in a ref to avoid\n * double-connect on mount/unmount/remount cycles.\n */\nexport function useSubscription(\n contextIds: string[],\n callback: (event: SseEventData) => void,\n) {\n const { mero } = useMero();\n const callbackRef = useRef(callback);\n callbackRef.current = callback;\n\n const contextIdsKey = JSON.stringify(contextIds);\n\n useEffect(() => {\n if (!mero || contextIds.length === 0) return;\n\n const sse = mero.events;\n\n const handler = (event: SseEventData) => {\n callbackRef.current(event);\n };\n\n sse.on('event', handler);\n sse.connect().catch(() => {});\n sse.subscribe(contextIds).catch(() => {});\n\n return () => {\n sse.off('event', handler);\n };\n }, [mero, contextIdsKey]);\n}\n\n/**\n * Fetch contexts for the current node, optionally filtered by application ID.\n */\nexport function useContexts(applicationId?: string | null) {\n const { mero } = useMero();\n const [contexts, setContexts] = useState<ApplicationContextRecord[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const mountedRef = useMountedRef();\n\n const refetch = useCallback(async () => {\n if (!mero) return;\n\n if (mountedRef.current) {\n setLoading(true);\n setError(null);\n }\n\n try {\n const response = applicationId\n ? await mero.admin.getContextsForApplication(applicationId)\n : await mero.admin.getContexts();\n const list = mapApplicationContexts(response.contexts ?? []);\n if (mountedRef.current) {\n setContexts(list);\n }\n } catch (err) {\n const errorValue = toError(err);\n if (mountedRef.current) {\n setError(errorValue);\n }\n } finally {\n if (mountedRef.current) {\n setLoading(false);\n }\n }\n }, [mero, applicationId]);\n\n useEffect(() => {\n void refetch();\n }, [refetch]);\n\n return { contexts, loading, error, refetch };\n}\n\nexport function useApplicationContexts(applicationId?: string | null) {\n return useContexts(applicationId);\n}\n\nexport function useGroupMembers(groupId?: string | null) {\n const { mero } = useMero();\n const [members, setMembers] = useState<GroupMember[]>([]);\n const [selfIdentity, setSelfIdentity] = useState<string | null>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const mountedRef = useMountedRef();\n\n const refetch = useCallback(async () => {\n if (!mero || !groupId) {\n if (mountedRef.current) {\n setMembers([]);\n setSelfIdentity(null);\n setError(null);\n setLoading(false);\n }\n return;\n }\n\n if (mountedRef.current) {\n setLoading(true);\n setError(null);\n }\n\n try {\n const response: ListGroupMembersResponseData = await mero.admin.listGroupMembers(groupId);\n if (mountedRef.current) {\n setMembers(response.data ?? []);\n setSelfIdentity(response.selfIdentity ?? null);\n }\n } catch (err) {\n const errorValue = toError(err);\n if (mountedRef.current) {\n setError(errorValue);\n }\n } finally {\n if (mountedRef.current) {\n setLoading(false);\n }\n }\n }, [groupId, mero, mountedRef]);\n\n useEffect(() => {\n void refetch();\n }, [refetch]);\n\n return { members, selfIdentity, loading, error, refetch };\n}\n\nexport function useGroupContexts(groupId?: string | null) {\n const { mero } = useMero();\n const [contexts, setContexts] = useState<GroupContextEntry[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const mountedRef = useMountedRef();\n\n const refetch = useCallback(async () => {\n if (!mero || !groupId) {\n if (mountedRef.current) {\n setContexts([]);\n setError(null);\n setLoading(false);\n }\n return;\n }\n\n if (mountedRef.current) {\n setLoading(true);\n setError(null);\n }\n\n try {\n const nextContexts = await mero.admin.listGroupContexts(groupId);\n if (mountedRef.current) {\n setContexts(nextContexts);\n }\n } catch (err) {\n const errorValue = toError(err);\n if (mountedRef.current) {\n setError(errorValue);\n }\n } finally {\n if (mountedRef.current) {\n setLoading(false);\n }\n }\n }, [groupId, mero, mountedRef]);\n\n useEffect(() => {\n void refetch();\n }, [refetch]);\n\n return { contexts, loading, error, refetch };\n}\n\nexport function useGroupInvitations() {\n const { mero } = useMero();\n const { loading, error, run } = useAsyncMutation();\n\n const createInvitation = useCallback(\n async (groupId: string, request?: CreateGroupInvitationRequest) => {\n if (!mero) {\n return null;\n }\n return run(() => mero.admin.createGroupInvitation(groupId, request));\n },\n [mero, run],\n );\n\n return { createInvitation, loading, error };\n}\n\nexport function useJoinGroup() {\n const { mero } = useMero();\n const { loading, error, run } = useAsyncMutation();\n\n const joinGroup = useCallback(\n async (request: JoinGroupRequest) => {\n if (!mero) {\n return null;\n }\n return run(() => mero.admin.joinGroup(request));\n },\n [mero, run],\n );\n\n return { joinGroup, loading, error };\n}\n\nexport function useGroupCapabilities(groupId?: string | null, memberId?: string | null) {\n const { mero } = useMero();\n const [capabilities, setCapabilitiesState] = useState<number | null>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const mountedRef = useMountedRef();\n\n const refetch = useCallback(async () => {\n if (!mero || !groupId || !memberId) {\n if (mountedRef.current) {\n setCapabilitiesState(null);\n setError(null);\n setLoading(false);\n }\n return null;\n }\n\n if (mountedRef.current) {\n setLoading(true);\n setError(null);\n }\n\n try {\n const response = await mero.admin.getMemberCapabilities(groupId, memberId);\n if (mountedRef.current) {\n setCapabilitiesState(response.capabilities);\n }\n return response.capabilities;\n } catch (err) {\n const errorValue = toError(err);\n if (mountedRef.current) {\n setError(errorValue);\n }\n return null;\n } finally {\n if (mountedRef.current) {\n setLoading(false);\n }\n }\n }, [groupId, memberId, mero, mountedRef]);\n\n useEffect(() => {\n void refetch();\n }, [refetch]);\n\n const setCapabilities = useCallback(\n async (nextCapabilities: number) => {\n if (!mero || !groupId || !memberId) {\n return null;\n }\n\n if (mountedRef.current) {\n setLoading(true);\n setError(null);\n }\n\n try {\n await mero.admin.setMemberCapabilities(groupId, memberId, { capabilities: nextCapabilities });\n if (mountedRef.current) {\n setCapabilitiesState(nextCapabilities);\n }\n return nextCapabilities;\n } catch (err) {\n const errorValue = toError(err);\n if (mountedRef.current) {\n setError(errorValue);\n }\n return null;\n } finally {\n if (mountedRef.current) {\n setLoading(false);\n }\n }\n },\n [groupId, memberId, mero, mountedRef],\n );\n\n return { capabilities, loading, error, refetch, setCapabilities };\n}\n\nexport function useContextDiscovery(options: ContextDiscoveryOptions): ContextDiscoveryState {\n const { mero } = useMero();\n const [context, setContext] = useState<ApplicationContextRecord | null>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const mountedRef = useMountedRef();\n\n const knownContextIdsKey = JSON.stringify(options.knownContextIds ?? []);\n\n const discover = useCallback(async () => {\n if (!mero) {\n const notConnectedError = new Error('Not connected');\n if (mountedRef.current) {\n setError(notConnectedError);\n }\n return null;\n }\n const knownContextIds = new Set(options.knownContextIds ?? []);\n const pollIntervalMs = options.pollIntervalMs ?? 1000;\n const timeoutMs = options.timeoutMs ?? 30000;\n const deadline = Date.now() + timeoutMs;\n\n if (mountedRef.current) {\n setLoading(true);\n setError(null);\n }\n\n try {\n while (Date.now() <= deadline) {\n if (options.targetAlias) {\n const aliasMatch = extractAliasContextId(\n await mero.admin.lookupContextAlias(options.targetAlias),\n );\n\n if (aliasMatch && !knownContextIds.has(aliasMatch)) {\n const discoveredFromAlias = {\n contextId: aliasMatch,\n applicationId: options.applicationId,\n };\n\n if (mountedRef.current) {\n setContext(discoveredFromAlias);\n }\n\n return discoveredFromAlias;\n }\n }\n\n const response = await mero.admin.getContextsForApplication(options.applicationId);\n const contexts = mapApplicationContexts(response.contexts ?? []);\n const discovered = contexts.find(\n (applicationContext) => !knownContextIds.has(applicationContext.contextId),\n );\n\n if (discovered) {\n if (mountedRef.current) {\n setContext(discovered);\n }\n return discovered;\n }\n\n if (Date.now() + pollIntervalMs > deadline) {\n break;\n }\n\n await sleep(pollIntervalMs);\n }\n\n const timeoutError = new Error(\n `Timed out discovering a context for application ${options.applicationId}`,\n );\n\n if (mountedRef.current) {\n setContext(null);\n setError(timeoutError);\n }\n\n return null;\n } catch (err) {\n const errorValue = toError(err);\n if (mountedRef.current) {\n setContext(null);\n setError(errorValue);\n }\n return null;\n } finally {\n if (mountedRef.current) {\n setLoading(false);\n }\n }\n }, [\n knownContextIdsKey,\n mero,\n mountedRef,\n options.applicationId,\n options.knownContextIds,\n options.pollIntervalMs,\n options.targetAlias,\n options.timeoutMs,\n ]);\n\n const reset = useCallback(() => {\n if (mountedRef.current) {\n setContext(null);\n setError(null);\n setLoading(false);\n }\n }, [mountedRef]);\n\n return { context, loading, error, discover, reset };\n}\n\n// ---- Context CRUD Hooks ----\n\nexport function useCreateContext() {\n const { mero } = useMero();\n const { loading, error, run } = useAsyncMutation();\n\n const createContext = useCallback(\n async (request: CreateContextRequest) => {\n if (!mero) return null;\n return run(() => mero.admin.createContext(request));\n },\n [mero, run],\n );\n\n return { createContext, loading, error };\n}\n\nexport function useDeleteContext() {\n const { mero } = useMero();\n const { loading, error, run } = useAsyncMutation();\n\n const deleteContext = useCallback(\n async (contextId: string) => {\n if (!mero) return null;\n return run(() => mero.admin.deleteContext(contextId));\n },\n [mero, run],\n );\n\n return { deleteContext, loading, error };\n}\n\nexport function useJoinContext() {\n const { mero } = useMero();\n const { loading, error, run } = useAsyncMutation();\n\n const joinContext = useCallback(\n async (contextId: string) => {\n if (!mero) return null;\n return run(() => mero.admin.joinContext(contextId));\n },\n [mero, run],\n );\n\n return { joinContext, loading, error };\n}\n\nexport function useContextGroup(contextId?: string | null) {\n const { mero } = useMero();\n const [groupId, setGroupId] = useState<string | null>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const mountedRef = useMountedRef();\n\n const refetch = useCallback(async () => {\n if (!mero || !contextId) {\n if (mountedRef.current) {\n setGroupId(null);\n setError(null);\n setLoading(false);\n }\n return;\n }\n\n if (mountedRef.current) {\n setLoading(true);\n setError(null);\n }\n\n try {\n const result = await mero.admin.getContextGroup(contextId);\n if (mountedRef.current) {\n setGroupId(result);\n }\n } catch (err) {\n const errorValue = toError(err);\n if (mountedRef.current) {\n setError(errorValue);\n }\n } finally {\n if (mountedRef.current) {\n setLoading(false);\n }\n }\n }, [contextId, mero, mountedRef]);\n\n useEffect(() => {\n void refetch();\n }, [refetch]);\n\n return { groupId, loading, error, refetch };\n}\n\n// ---- Group Info / Management Hooks ----\n\nexport function useGroupInfo(groupId?: string | null) {\n const { mero } = useMero();\n const [groupInfo, setGroupInfo] = useState<GroupInfo | null>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const mountedRef = useMountedRef();\n\n const refetch = useCallback(async () => {\n if (!mero || !groupId) {\n if (mountedRef.current) {\n setGroupInfo(null);\n setError(null);\n setLoading(false);\n }\n return;\n }\n\n if (mountedRef.current) {\n setLoading(true);\n setError(null);\n }\n\n try {\n const result = await mero.admin.getGroupInfo(groupId);\n if (mountedRef.current) {\n setGroupInfo(result);\n }\n } catch (err) {\n const errorValue = toError(err);\n if (mountedRef.current) {\n setError(errorValue);\n }\n } finally {\n if (mountedRef.current) {\n setLoading(false);\n }\n }\n }, [groupId, mero, mountedRef]);\n\n useEffect(() => {\n void refetch();\n }, [refetch]);\n\n return { groupInfo, loading, error, refetch };\n}\n\nexport function useDeleteGroup() {\n const { mero } = useMero();\n const { loading, error, run } = useAsyncMutation();\n\n const deleteGroup = useCallback(\n async (groupId: string, request?: DeleteGroupRequest) => {\n if (!mero) return null;\n return run(() => mero.admin.deleteGroup(groupId, request));\n },\n [mero, run],\n );\n\n return { deleteGroup, loading, error };\n}\n\nexport function useSyncGroup() {\n const { mero } = useMero();\n const { loading, error, run } = useAsyncMutation();\n\n const syncGroup = useCallback(\n async (groupId: string, request?: SyncGroupRequest) => {\n if (!mero) return null;\n return run(() => mero.admin.syncGroup(groupId, request));\n },\n [mero, run],\n );\n\n return { syncGroup, loading, error };\n}\n\nexport function useAddGroupMembers() {\n const { mero } = useMero();\n const { loading, error, run } = useAsyncMutation();\n\n const addGroupMembers = useCallback(\n async (groupId: string, request: AddGroupMembersRequest) => {\n if (!mero) return null;\n return run(() => mero.admin.addGroupMembers(groupId, request));\n },\n [mero, run],\n );\n\n return { addGroupMembers, loading, error };\n}\n\nexport function useRemoveGroupMembers() {\n const { mero } = useMero();\n const { loading, error, run } = useAsyncMutation();\n\n const removeGroupMembers = useCallback(\n async (groupId: string, request: RemoveGroupMembersRequest) => {\n if (!mero) return null;\n return run(() => mero.admin.removeGroupMembers(groupId, request));\n },\n [mero, run],\n );\n\n return { removeGroupMembers, loading, error };\n}\n\n// ---- Namespace Hooks ----\n\nexport function useNamespaces() {\n const { mero } = useMero();\n const [namespaces, setNamespaces] = useState<Namespace[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const mountedRef = useMountedRef();\n\n const refetch = useCallback(async () => {\n if (!mero) return;\n\n if (mountedRef.current) {\n setLoading(true);\n setError(null);\n }\n\n try {\n const result = await mero.admin.listNamespaces();\n if (mountedRef.current) {\n setNamespaces(result);\n }\n } catch (err) {\n const errorValue = toError(err);\n if (mountedRef.current) {\n setError(errorValue);\n }\n } finally {\n if (mountedRef.current) {\n setLoading(false);\n }\n }\n }, [mero, mountedRef]);\n\n useEffect(() => {\n void refetch();\n }, [refetch]);\n\n return { namespaces, loading, error, refetch };\n}\n\nexport function useNamespace(namespaceId?: string | null) {\n const { mero } = useMero();\n const [namespace, setNamespace] = useState<Namespace | null>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const mountedRef = useMountedRef();\n\n const refetch = useCallback(async () => {\n if (!mero || !namespaceId) {\n if (mountedRef.current) {\n setNamespace(null);\n setError(null);\n setLoading(false);\n }\n return;\n }\n\n if (mountedRef.current) {\n setLoading(true);\n setError(null);\n }\n\n try {\n const result = await mero.admin.getNamespace(namespaceId);\n if (mountedRef.current) {\n setNamespace(result);\n }\n } catch (err) {\n const errorValue = toError(err);\n if (mountedRef.current) {\n setError(errorValue);\n }\n } finally {\n if (mountedRef.current) {\n setLoading(false);\n }\n }\n }, [namespaceId, mero, mountedRef]);\n\n useEffect(() => {\n void refetch();\n }, [refetch]);\n\n return { namespace, loading, error, refetch };\n}\n\nexport function useNamespaceIdentity(namespaceId?: string | null) {\n const { mero } = useMero();\n const [identity, setIdentity] = useState<NamespaceIdentity | null>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const mountedRef = useMountedRef();\n\n const refetch = useCallback(async () => {\n if (!mero || !namespaceId) {\n if (mountedRef.current) {\n setIdentity(null);\n setError(null);\n setLoading(false);\n }\n return;\n }\n\n if (mountedRef.current) {\n setLoading(true);\n setError(null);\n }\n\n try {\n const result = await mero.admin.getNamespaceIdentity(namespaceId);\n if (mountedRef.current) {\n setIdentity(result);\n }\n } catch (err) {\n const errorValue = toError(err);\n if (mountedRef.current) {\n setError(errorValue);\n }\n } finally {\n if (mountedRef.current) {\n setLoading(false);\n }\n }\n }, [namespaceId, mero, mountedRef]);\n\n useEffect(() => {\n void refetch();\n }, [refetch]);\n\n return { identity, loading, error, refetch };\n}\n\nexport function useNamespacesForApplication(applicationId?: string | null) {\n const { mero } = useMero();\n const [namespaces, setNamespaces] = useState<Namespace[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const mountedRef = useMountedRef();\n\n const refetch = useCallback(async () => {\n if (!mero || !applicationId) {\n if (mountedRef.current) {\n setNamespaces([]);\n setError(null);\n setLoading(false);\n }\n return;\n }\n\n if (mountedRef.current) {\n setLoading(true);\n setError(null);\n }\n\n try {\n const result = await mero.admin.listNamespacesForApplication(applicationId);\n if (mountedRef.current) {\n setNamespaces(result);\n }\n } catch (err) {\n const errorValue = toError(err);\n if (mountedRef.current) {\n setError(errorValue);\n }\n } finally {\n if (mountedRef.current) {\n setLoading(false);\n }\n }\n }, [applicationId, mero, mountedRef]);\n\n useEffect(() => {\n void refetch();\n }, [refetch]);\n\n return { namespaces, loading, error, refetch };\n}\n\nexport function useCreateNamespace() {\n const { mero } = useMero();\n const { loading, error, run } = useAsyncMutation();\n\n const createNamespace = useCallback(\n async (request: CreateNamespaceRequest) => {\n if (!mero) return null;\n return run(() => mero.admin.createNamespace(request));\n },\n [mero, run],\n );\n\n return { createNamespace, loading, error };\n}\n\nexport function useDeleteNamespace() {\n const { mero } = useMero();\n const { loading, error, run } = useAsyncMutation();\n\n const deleteNamespace = useCallback(\n async (namespaceId: string, request?: DeleteNamespaceRequest) => {\n if (!mero) return null;\n return run(() => mero.admin.deleteNamespace(namespaceId, request));\n },\n [mero, run],\n );\n\n return { deleteNamespace, loading, error };\n}\n\nexport function useCreateNamespaceInvitation() {\n const { mero } = useMero();\n const { loading, error, run } = useAsyncMutation();\n\n const createNamespaceInvitation = useCallback(\n async (\n namespaceId: string,\n request?: CreateNamespaceInvitationRequest,\n ): Promise<CreateNamespaceInvitationResponseData | CreateRecursiveInvitationResponseData | null> => {\n if (!mero) return null;\n return run(() => mero.admin.createNamespaceInvitation(namespaceId, request));\n },\n [mero, run],\n );\n\n return { createNamespaceInvitation, loading, error };\n}\n\nexport function useJoinNamespace() {\n const { mero } = useMero();\n const { loading, error, run } = useAsyncMutation();\n\n const joinNamespace = useCallback(\n async (namespaceId: string, request: JoinNamespaceRequest) => {\n if (!mero) return null;\n return run(() => mero.admin.joinNamespace(namespaceId, request));\n },\n [mero, run],\n );\n\n return { joinNamespace, loading, error };\n}\n\nexport function useCreateGroupInNamespace() {\n const { mero } = useMero();\n const { loading, error, run } = useAsyncMutation();\n\n const createGroupInNamespace = useCallback(\n async (namespaceId: string, request?: CreateGroupInNamespaceRequest) => {\n if (!mero) return null;\n return run(() => mero.admin.createGroupInNamespace(namespaceId, request));\n },\n [mero, run],\n );\n\n return { createGroupInNamespace, loading, error };\n}\n\nexport function useNamespaceGroups(namespaceId?: string | null) {\n const { mero } = useMero();\n const [groups, setGroups] = useState<SubgroupEntry[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const mountedRef = useMountedRef();\n\n const refetch = useCallback(async () => {\n if (!mero || !namespaceId) {\n if (mountedRef.current) {\n setGroups([]);\n setError(null);\n setLoading(false);\n }\n return;\n }\n\n if (mountedRef.current) {\n setLoading(true);\n setError(null);\n }\n\n try {\n const result = await mero.admin.listNamespaceGroups(namespaceId);\n if (mountedRef.current) {\n setGroups(result);\n }\n } catch (err) {\n const errorValue = toError(err);\n if (mountedRef.current) {\n setError(errorValue);\n }\n } finally {\n if (mountedRef.current) {\n setLoading(false);\n }\n }\n }, [namespaceId, mero, mountedRef]);\n\n useEffect(() => {\n void refetch();\n }, [refetch]);\n\n return { groups, loading, error, refetch };\n}\n\n// ---- Group Settings & Role Management ----\n\nexport function useUpdateMemberRole() {\n const { mero } = useMero();\n const { loading, error, run } = useAsyncMutation();\n\n const updateMemberRole = useCallback(\n async (groupId: string, identity: string, request: UpdateMemberRoleRequest) => {\n if (!mero) return null;\n return run(() => mero.admin.updateMemberRole(groupId, identity, request));\n },\n [mero, run],\n );\n\n return { updateMemberRole, loading, error };\n}\n\nexport function useSetDefaultCapabilities() {\n const { mero } = useMero();\n const { loading, error, run } = useAsyncMutation();\n\n const setDefaultCapabilities = useCallback(\n async (groupId: string, request: SetDefaultCapabilitiesRequest) => {\n if (!mero) return null;\n return run(() => mero.admin.setDefaultCapabilities(groupId, request));\n },\n [mero, run],\n );\n\n return { setDefaultCapabilities, loading, error };\n}\n\nexport function useSetDefaultVisibility() {\n const { mero } = useMero();\n const { loading, error, run } = useAsyncMutation();\n\n const setDefaultVisibility = useCallback(\n async (groupId: string, request: SetDefaultVisibilityRequest) => {\n if (!mero) return null;\n return run(() => mero.admin.setDefaultVisibility(groupId, request));\n },\n [mero, run],\n );\n\n return { setDefaultVisibility, loading, error };\n}\n\nexport function useSetTeeAdmissionPolicy() {\n const { mero } = useMero();\n const { loading, error, run } = useAsyncMutation();\n\n const setTeeAdmissionPolicy = useCallback(\n async (groupId: string, request: SetTeeAdmissionPolicyRequest) => {\n if (!mero) return null;\n return run(() => mero.admin.setTeeAdmissionPolicy(groupId, request));\n },\n [mero, run],\n );\n\n return { setTeeAdmissionPolicy, loading, error };\n}\n\nexport function useUpdateGroupSettings() {\n const { mero } = useMero();\n const { loading, error, run } = useAsyncMutation();\n\n const updateGroupSettings = useCallback(\n async (groupId: string, request: UpdateGroupSettingsRequest) => {\n if (!mero) return null;\n return run(() => mero.admin.updateGroupSettings(groupId, request));\n },\n [mero, run],\n );\n\n return { updateGroupSettings, loading, error };\n}\n\nexport function useSetGroupAlias() {\n const { mero } = useMero();\n const { loading, error, run } = useAsyncMutation();\n\n const setGroupAlias = useCallback(\n async (groupId: string, request: SetGroupAliasRequest) => {\n if (!mero) return null;\n return run(() => mero.admin.setGroupAlias(groupId, request));\n },\n [mero, run],\n );\n\n return { setGroupAlias, loading, error };\n}\n\nexport function useSetMemberAlias() {\n const { mero } = useMero();\n const { loading, error, run } = useAsyncMutation();\n\n const setMemberAlias = useCallback(\n async (groupId: string, identity: string, request: SetMemberAliasRequest) => {\n if (!mero) return null;\n return run(() => mero.admin.setMemberAlias(groupId, identity, request));\n },\n [mero, run],\n );\n\n return { setMemberAlias, loading, error };\n}\n\n// ---- Group Signing Key, Upgrades & Hierarchy ----\n\nexport function useRegisterGroupSigningKey() {\n const { mero } = useMero();\n const { loading, error, run } = useAsyncMutation();\n\n const registerGroupSigningKey = useCallback(\n async (groupId: string, request: RegisterGroupSigningKeyRequest) => {\n if (!mero) return null;\n return run(() => mero.admin.registerGroupSigningKey(groupId, request));\n },\n [mero, run],\n );\n\n return { registerGroupSigningKey, loading, error };\n}\n\nexport function useUpgradeGroup() {\n const { mero } = useMero();\n const { loading, error, run } = useAsyncMutation();\n\n const upgradeGroup = useCallback(\n async (groupId: string, request: UpgradeGroupRequest) => {\n if (!mero) return null;\n return run(() => mero.admin.upgradeGroup(groupId, request));\n },\n [mero, run],\n );\n\n return { upgradeGroup, loading, error };\n}\n\nexport function useGroupUpgradeStatus(groupId?: string | null) {\n const { mero } = useMero();\n const [upgradeStatus, setUpgradeStatus] = useState<GroupUpgradeStatusResponseData>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const mountedRef = useMountedRef();\n\n const refetch = useCallback(async () => {\n if (!mero || !groupId) {\n if (mountedRef.current) {\n setUpgradeStatus(null);\n setError(null);\n setLoading(false);\n }\n return;\n }\n\n if (mountedRef.current) {\n setLoading(true);\n setError(null);\n }\n\n try {\n const result = await mero.admin.getGroupUpgradeStatus(groupId);\n if (mountedRef.current) {\n setUpgradeStatus(result);\n }\n } catch (err) {\n const errorValue = toError(err);\n if (mountedRef.current) {\n setError(errorValue);\n }\n } finally {\n if (mountedRef.current) {\n setLoading(false);\n }\n }\n }, [groupId, mero, mountedRef]);\n\n useEffect(() => {\n void refetch();\n }, [refetch]);\n\n return { upgradeStatus, loading, error, refetch };\n}\n\nexport function useRetryGroupUpgrade() {\n const { mero } = useMero();\n const { loading, error, run } = useAsyncMutation();\n\n const retryGroupUpgrade = useCallback(\n async (groupId: string, request?: RetryGroupUpgradeRequest) => {\n if (!mero) return null;\n return run(() => mero.admin.retryGroupUpgrade(groupId, request));\n },\n [mero, run],\n );\n\n return { retryGroupUpgrade, loading, error };\n}\n\nexport function useNestGroup() {\n const { mero } = useMero();\n const { loading, error, run } = useAsyncMutation();\n\n const nestGroup = useCallback(\n async (parentGroupId: string, request: NestGroupRequest) => {\n if (!mero) return null;\n return run(() => mero.admin.nestGroup(parentGroupId, request));\n },\n [mero, run],\n );\n\n return { nestGroup, loading, error };\n}\n\nexport function useUnnestGroup() {\n const { mero } = useMero();\n const { loading, error, run } = useAsyncMutation();\n\n const unnestGroup = useCallback(\n async (parentGroupId: string, request: UnnestGroupRequest) => {\n if (!mero) return null;\n return run(() => mero.admin.unnestGroup(parentGroupId, request));\n },\n [mero, run],\n );\n\n return { unnestGroup, loading, error };\n}\n\nexport function useSubgroups(groupId?: string | null) {\n const { mero } = useMero();\n const [subgroups, setSubgroups] = useState<SubgroupEntry[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const mountedRef = useMountedRef();\n\n const refetch = useCallback(async () => {\n if (!mero || !groupId) {\n if (mountedRef.current) {\n setSubgroups([]);\n setError(null);\n setLoading(false);\n }\n return;\n }\n\n if (mountedRef.current) {\n setLoading(true);\n setError(null);\n }\n\n try {\n const result = await mero.admin.listSubgroups(groupId);\n if (mountedRef.current) {\n setSubgroups(result);\n }\n } catch (err) {\n const errorValue = toError(err);\n if (mountedRef.current) {\n setError(errorValue);\n }\n } finally {\n if (mountedRef.current) {\n setLoading(false);\n }\n }\n }, [groupId, mero, mountedRef]);\n\n useEffect(() => {\n void refetch();\n }, [refetch]);\n\n return { subgroups, loading, error, refetch };\n}\n\n// ---- Context-Group Relationship ----\n\nexport function useDetachContextFromGroup() {\n const { mero } = useMero();\n const { loading, error, run } = useAsyncMutation();\n\n const detachContextFromGroup = useCallback(\n async (groupId: string, contextId: string, request?: DetachContextFromGroupRequest) => {\n if (!mero) return null;\n return run(() => mero.admin.detachContextFromGroup(groupId, contextId, request));\n },\n [mero, run],\n );\n\n return { detachContextFromGroup, loading, error };\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@calimero-network/mero-react",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "React bindings for MeroJs - Calimero Network SDK",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.cjs",
|
|
@@ -19,43 +19,57 @@
|
|
|
19
19
|
"scripts": {
|
|
20
20
|
"build": "tsup",
|
|
21
21
|
"dev": "tsup --watch",
|
|
22
|
-
"lint": "eslint src
|
|
22
|
+
"lint": "eslint src",
|
|
23
23
|
"typecheck": "tsc --noEmit",
|
|
24
24
|
"test": "vitest run",
|
|
25
|
-
"test:watch": "vitest"
|
|
25
|
+
"test:watch": "vitest",
|
|
26
|
+
"prepublishOnly": "pnpm build && pnpm typecheck"
|
|
26
27
|
},
|
|
27
28
|
"dependencies": {
|
|
28
|
-
"@calimero-network/mero-js": "^
|
|
29
|
+
"@calimero-network/mero-js": "^1.4.0"
|
|
29
30
|
},
|
|
30
31
|
"peerDependencies": {
|
|
31
32
|
"react": "^18.0.0 || ^19.0.0",
|
|
32
33
|
"react-dom": "^18.0.0 || ^19.0.0"
|
|
33
34
|
},
|
|
34
35
|
"devDependencies": {
|
|
36
|
+
"@semantic-release/changelog": "^6.0.3",
|
|
37
|
+
"@semantic-release/commit-analyzer": "^13.0.1",
|
|
38
|
+
"@semantic-release/git": "^10.0.1",
|
|
39
|
+
"@semantic-release/github": "^12.0.6",
|
|
40
|
+
"@semantic-release/npm": "^13.1.5",
|
|
41
|
+
"@semantic-release/release-notes-generator": "^14.1.0",
|
|
42
|
+
"@testing-library/react": "^14.0.0",
|
|
35
43
|
"@types/react": "^18.2.0",
|
|
36
44
|
"@types/react-dom": "^18.2.0",
|
|
45
|
+
"@typescript-eslint/eslint-plugin": "^8.58.0",
|
|
46
|
+
"@typescript-eslint/parser": "^8.58.0",
|
|
47
|
+
"conventional-changelog-conventionalcommits": "^9.3.1",
|
|
48
|
+
"eslint": "^10.1.0",
|
|
49
|
+
"jsdom": "^29.0.1",
|
|
37
50
|
"react": "^18.2.0",
|
|
38
51
|
"react-dom": "^18.2.0",
|
|
52
|
+
"semantic-release": "^25.0.3",
|
|
39
53
|
"tsup": "^8.0.0",
|
|
40
54
|
"typescript": "^5.3.0",
|
|
41
|
-
"vitest": "^1.0.0"
|
|
42
|
-
"@testing-library/react": "^14.0.0"
|
|
55
|
+
"vitest": "^1.0.0"
|
|
43
56
|
},
|
|
44
57
|
"keywords": [
|
|
45
58
|
"calimero",
|
|
46
59
|
"mero",
|
|
47
60
|
"react",
|
|
48
|
-
"
|
|
49
|
-
"
|
|
61
|
+
"p2p",
|
|
62
|
+
"sdk"
|
|
50
63
|
],
|
|
51
64
|
"license": "MIT",
|
|
52
65
|
"author": "Calimero Ltd",
|
|
53
66
|
"repository": {
|
|
54
67
|
"type": "git",
|
|
55
|
-
"url": "
|
|
68
|
+
"url": "https://github.com/calimero-network/mero-react"
|
|
56
69
|
},
|
|
57
70
|
"publishConfig": {
|
|
58
71
|
"access": "public",
|
|
59
72
|
"registry": "https://registry.npmjs.org/"
|
|
60
|
-
}
|
|
73
|
+
},
|
|
74
|
+
"packageManager": "pnpm@10.14.0"
|
|
61
75
|
}
|