spaark-payapi-sdk 1.3.0 → 1.4.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/dist/react.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/mocks/webhook-generators.ts","../src/components/SpaarkPaySdkFinanceDashboard.tsx","../src/react.tsx"],"names":["generateUUID","c","r","generateDepositWebhook","eventType","options","transactionId","amount","currency","correspondent","phoneNumber","status","failureCode","failureMessage","now","data","generatePayoutWebhook","generateRefundWebhook","depositId","generateWebhook","WEBHOOK_EVENT_TYPES","translations","STATUS_COLORS","StatusIcon","jsx","CheckCircle2","XCircle","Clock","Loader2","AlertCircle","formatCurrency","formatDate","dateString","locale","date","ITEMS_PER_PAGE","SpaarkPaySdkFinanceDashboard","transactions","title","subtitle","className","showExpertMode","onExpertModeClick","onTransactionClick","onRefresh","isLoading","t","searchQuery","setSearchQuery","useState","typeFilter","setTypeFilter","statusFilter","setStatusFilter","currentPage","setCurrentPage","copiedId","setCopiedId","stats","useMemo","deposits","tx","payouts","refunds","failed","totalVolume","sum","depositsTotal","payoutsTotal","refundsTotal","filteredTransactions","matchesSearch","matchesType","matchesStatus","paginatedTransactions","start","totalPages","copyToClipboard","useCallback","text","mainCurrency","jsxs","RefreshCw","Settings","TrendingUp","ArrowDownCircle","ArrowUpCircle","Search","e","Filter","Fragment","Check","Copy","p","ChevronLeft","ChevronRight","createMockDepositResponse","txId","createMockPayoutResponse","createMockStatusResponse","createMockAvailabilityResponse","createMockPredictResponse","phone","createMockActiveConfigResponse","createMockWalletBalancesResponse","createMockPublicKeysResponse","simulateDelay","ms","resolve","computeHmacSha256","message","secret","encoder","key","signature","b","PROVIDER_OPTIONS","CURRENCY_OPTIONS","SpaarkPaySdkTestDashboard","initialApiKey","initialEnvironment","initialDemoMode","apiBasePath","onDepositComplete","onPayoutComplete","onError","apiKey","setApiKey","environment","setEnvironment","isConfigured","setIsConfigured","isDemoMode","setIsDemoMode","activeTab","setActiveTab","setPhoneNumber","setAmount","setCurrency","provider","setProvider","description","setDescription","setTransactionId","results","setResults","currentStatus","setCurrentStatus","webhookSecret","setWebhookSecret","webhookEvents","setWebhookEvents","webhookEventType","setWebhookEventType","webhookAmount","setWebhookAmount","webhookPhone","setWebhookPhone","webhookProvider","setWebhookProvider","generatedPayload","setGeneratedPayload","generatedSignature","setGeneratedSignature","verifyPayload","setVerifyPayload","verifySignature","setVerifySignature","verifySecret","setVerifySecret","verifyResult","setVerifyResult","parseInput","setParseInput","parsedEvent","setParsedEvent","parseError","setParseError","eventLogFilter","setEventLogFilter","addResult","operation","response","error","result","prev","handleConfigure","handleDemoMode","handleDeposit","res","err","handlePayout","handleCheckStatus","handleGetAvailability","handlePredictProvider","handleGetActiveConfig","handleGetPublicKeys","handleGetWalletBalances","SettingsIcon","WalletIcon","PhoneIcon","RefreshIcon","ToolkitIcon","ChartIcon","WebhookIcon","LoaderIcon","PlayIcon","CopyIcon","SearchIcon","SignalIcon","KeyIcon","type","event","payload","newEvent","parsedPayload","computedSignature","isValid","ShieldIcon","CheckIcon","XIcon","parsed","CodeIcon","BeakerIcon","react_default"],"mappings":"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","file":"react.js","sourcesContent":["import type {\n WebhookEventType,\n PawapayWebhookEvent,\n DepositCallbackData,\n PayoutCallbackData,\n} from '../types/webhooks';\nimport type { Correspondent } from '../constants/correspondents';\n\nexport interface WebhookGeneratorOptions {\n transactionId?: string;\n amount?: string;\n currency?: string;\n correspondent?: Correspondent;\n phoneNumber?: string;\n status?: 'COMPLETED' | 'FAILED';\n failureCode?: string;\n failureMessage?: string;\n}\n\nconst generateUUID = (): string => {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n};\n\nexport function generateDepositWebhook(\n eventType: 'deposit.accepted' | 'deposit.completed' | 'deposit.failed',\n options: WebhookGeneratorOptions = {}\n): PawapayWebhookEvent<DepositCallbackData> {\n const {\n transactionId = generateUUID(),\n amount = '5000',\n currency = 'XAF',\n correspondent = 'MTN_MOMO_CMR',\n phoneNumber = '237670000000',\n status = eventType === 'deposit.failed' ? 'FAILED' : 'COMPLETED',\n failureCode = 'INSUFFICIENT_FUNDS',\n failureMessage = 'The payer has insufficient funds',\n } = options;\n\n const now = new Date().toISOString();\n\n const data: DepositCallbackData = {\n depositId: transactionId,\n status,\n amount,\n currency,\n correspondent,\n payer: {\n type: 'MSISDN',\n address: {\n value: phoneNumber,\n },\n },\n customerTimestamp: now,\n created: now,\n };\n\n if (status === 'COMPLETED') {\n data.receivedByPayer = now;\n }\n\n if (status === 'FAILED') {\n data.failureReason = {\n failureCode,\n failureMessage,\n };\n }\n\n return {\n eventId: generateUUID(),\n eventType,\n timestamp: now,\n data,\n };\n}\n\nexport function generatePayoutWebhook(\n eventType: 'payout.accepted' | 'payout.completed' | 'payout.failed',\n options: WebhookGeneratorOptions = {}\n): PawapayWebhookEvent<PayoutCallbackData> {\n const {\n transactionId = generateUUID(),\n amount = '5000',\n currency = 'XAF',\n correspondent = 'MTN_MOMO_CMR',\n phoneNumber = '237670000000',\n status = eventType === 'payout.failed' ? 'FAILED' : 'COMPLETED',\n failureCode = 'RECIPIENT_NOT_FOUND',\n failureMessage = 'The recipient account was not found',\n } = options;\n\n const now = new Date().toISOString();\n\n const data: PayoutCallbackData = {\n payoutId: transactionId,\n status,\n amount,\n currency,\n correspondent,\n recipient: {\n type: 'MSISDN',\n address: {\n value: phoneNumber,\n },\n },\n customerTimestamp: now,\n created: now,\n };\n\n if (status === 'COMPLETED') {\n data.receivedByRecipient = now;\n }\n\n if (status === 'FAILED') {\n data.failureReason = {\n failureCode,\n failureMessage,\n };\n }\n\n return {\n eventId: generateUUID(),\n eventType,\n timestamp: now,\n data,\n };\n}\n\nexport interface RefundCallbackData {\n refundId: string;\n depositId: string;\n status: 'COMPLETED' | 'FAILED';\n amount: string;\n currency: string;\n correspondent: string;\n recipient: {\n type: string;\n address: {\n value: string;\n };\n };\n created: string;\n failureReason?: {\n failureCode: string;\n failureMessage: string;\n };\n}\n\nexport function generateRefundWebhook(\n eventType: 'refund.completed' | 'refund.failed',\n options: WebhookGeneratorOptions & { depositId?: string } = {}\n): PawapayWebhookEvent<RefundCallbackData> {\n const {\n transactionId = generateUUID(),\n depositId = generateUUID(),\n amount = '5000',\n currency = 'XAF',\n correspondent = 'MTN_MOMO_CMR',\n phoneNumber = '237670000000',\n status = eventType === 'refund.failed' ? 'FAILED' : 'COMPLETED',\n failureCode = 'REFUND_LIMIT_EXCEEDED',\n failureMessage = 'The refund limit has been exceeded',\n } = options;\n\n const now = new Date().toISOString();\n\n const data: RefundCallbackData = {\n refundId: transactionId,\n depositId,\n status,\n amount,\n currency,\n correspondent,\n recipient: {\n type: 'MSISDN',\n address: {\n value: phoneNumber,\n },\n },\n created: now,\n };\n\n if (status === 'FAILED') {\n data.failureReason = {\n failureCode,\n failureMessage,\n };\n }\n\n return {\n eventId: generateUUID(),\n eventType,\n timestamp: now,\n data,\n };\n}\n\nexport type MockWebhookEvent =\n | PawapayWebhookEvent<DepositCallbackData>\n | PawapayWebhookEvent<PayoutCallbackData>\n | PawapayWebhookEvent<RefundCallbackData>;\n\nexport function generateWebhook(\n eventType: WebhookEventType,\n options: WebhookGeneratorOptions & { depositId?: string } = {}\n): MockWebhookEvent {\n if (eventType.startsWith('deposit.')) {\n return generateDepositWebhook(\n eventType as 'deposit.accepted' | 'deposit.completed' | 'deposit.failed',\n options\n );\n }\n\n if (eventType.startsWith('payout.')) {\n return generatePayoutWebhook(\n eventType as 'payout.accepted' | 'payout.completed' | 'payout.failed',\n options\n );\n }\n\n return generateRefundWebhook(\n eventType as 'refund.completed' | 'refund.failed',\n options\n );\n}\n\nexport const WEBHOOK_EVENT_TYPES: WebhookEventType[] = [\n 'deposit.accepted',\n 'deposit.completed',\n 'deposit.failed',\n 'payout.accepted',\n 'payout.completed',\n 'payout.failed',\n 'refund.completed',\n 'refund.failed',\n];\n\nexport const FAILURE_CODES = {\n deposit: [\n { code: 'INSUFFICIENT_FUNDS', message: 'The payer has insufficient funds' },\n { code: 'INVALID_PHONE_NUMBER', message: 'The phone number is invalid' },\n { code: 'TIMEOUT', message: 'The transaction timed out' },\n { code: 'RECIPIENT_NOT_REGISTERED', message: 'The recipient is not registered for mobile money' },\n { code: 'DECLINED', message: 'The transaction was declined by the payer' },\n ],\n payout: [\n { code: 'RECIPIENT_NOT_FOUND', message: 'The recipient account was not found' },\n { code: 'RECIPIENT_NOT_REGISTERED', message: 'The recipient is not registered for mobile money' },\n { code: 'INVALID_PHONE_NUMBER', message: 'The phone number is invalid' },\n { code: 'TIMEOUT', message: 'The transaction timed out' },\n { code: 'DAILY_LIMIT_EXCEEDED', message: 'The daily transaction limit has been exceeded' },\n ],\n refund: [\n { code: 'REFUND_LIMIT_EXCEEDED', message: 'The refund limit has been exceeded' },\n { code: 'ORIGINAL_DEPOSIT_NOT_FOUND', message: 'The original deposit was not found' },\n { code: 'REFUND_ALREADY_PROCESSED', message: 'A refund has already been processed for this deposit' },\n { code: 'TIMEOUT', message: 'The refund request timed out' },\n ],\n};\n","'use client';\n\nimport { useState, useMemo, useCallback } from 'react';\nimport {\n TrendingUp,\n ArrowDownCircle,\n ArrowUpCircle,\n XCircle,\n RefreshCw,\n Search,\n Filter,\n Settings,\n ChevronLeft,\n ChevronRight,\n Copy,\n Check,\n AlertCircle,\n Clock,\n CheckCircle2,\n Loader2,\n} from 'lucide-react';\nimport type { Correspondent } from '../constants/correspondents';\n\nexport type TransactionType = 'deposit' | 'payout' | 'refund';\n\nexport type TransactionStatus =\n | 'ACCEPTED'\n | 'PENDING'\n | 'ENQUEUED'\n | 'PROCESSING'\n | 'COMPLETED'\n | 'FAILED'\n | 'CANCELLED'\n | 'REJECTED';\n\nexport interface Transaction {\n id: string;\n type: TransactionType;\n amount: number;\n currency: string;\n status: TransactionStatus;\n provider: Correspondent;\n phoneNumber: string;\n description?: string;\n createdAt: string;\n updatedAt?: string;\n failureReason?: string;\n}\n\nexport interface SpaarkPaySdkFinanceDashboardProps {\n transactions: Transaction[];\n title?: string;\n subtitle?: string;\n locale?: 'fr' | 'en';\n className?: string;\n showExpertMode?: boolean;\n onExpertModeClick?: () => void;\n onTransactionClick?: (transaction: Transaction) => void;\n onRefresh?: () => void;\n isLoading?: boolean;\n}\n\nconst translations = {\n fr: {\n title: 'Tableau de bord Finance',\n subtitle: 'Vue d\\'ensemble de vos transactions',\n totalVolume: 'Volume Total',\n deposits: 'Dépôts',\n payouts: 'Retraits',\n failed: 'Échecs',\n refunds: 'Remboursements',\n search: 'Rechercher par ID ou téléphone...',\n allTypes: 'Tous les types',\n allStatuses: 'Tous les statuts',\n deposit: 'Dépôt',\n payout: 'Retrait',\n refund: 'Remboursement',\n expertMode: 'Mode Expert',\n refresh: 'Actualiser',\n noTransactions: 'Aucune transaction',\n noTransactionsDesc: 'Les transactions apparaîtront ici une fois effectuées.',\n id: 'ID',\n type: 'Type',\n amount: 'Montant',\n status: 'Statut',\n provider: 'Opérateur',\n phone: 'Téléphone',\n date: 'Date',\n page: 'Page',\n of: 'sur',\n transactions: 'transactions',\n copied: 'Copié !',\n },\n en: {\n title: 'Finance Dashboard',\n subtitle: 'Overview of your transactions',\n totalVolume: 'Total Volume',\n deposits: 'Deposits',\n payouts: 'Payouts',\n failed: 'Failed',\n refunds: 'Refunds',\n search: 'Search by ID or phone...',\n allTypes: 'All types',\n allStatuses: 'All statuses',\n deposit: 'Deposit',\n payout: 'Payout',\n refund: 'Refund',\n expertMode: 'Expert Mode',\n refresh: 'Refresh',\n noTransactions: 'No transactions',\n noTransactionsDesc: 'Transactions will appear here once made.',\n id: 'ID',\n type: 'Type',\n amount: 'Amount',\n status: 'Status',\n provider: 'Provider',\n phone: 'Phone',\n date: 'Date',\n page: 'Page',\n of: 'of',\n transactions: 'transactions',\n copied: 'Copied!',\n },\n};\n\nconst STATUS_COLORS: Record<TransactionStatus, string> = {\n COMPLETED: 'bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200',\n ACCEPTED: 'bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-200',\n PENDING: 'bg-yellow-100 text-yellow-800 dark:bg-yellow-900 dark:text-yellow-200',\n ENQUEUED: 'bg-yellow-100 text-yellow-800 dark:bg-yellow-900 dark:text-yellow-200',\n PROCESSING: 'bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-200',\n FAILED: 'bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-200',\n CANCELLED: 'bg-gray-100 text-gray-800 dark:bg-gray-900 dark:text-gray-200',\n REJECTED: 'bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-200',\n};\n\nconst StatusIcon = ({ status }: { status: TransactionStatus }) => {\n switch (status) {\n case 'COMPLETED':\n return <CheckCircle2 className=\"w-3.5 h-3.5\" />;\n case 'FAILED':\n case 'REJECTED':\n case 'CANCELLED':\n return <XCircle className=\"w-3.5 h-3.5\" />;\n case 'PENDING':\n case 'ENQUEUED':\n return <Clock className=\"w-3.5 h-3.5\" />;\n case 'PROCESSING':\n case 'ACCEPTED':\n return <Loader2 className=\"w-3.5 h-3.5 animate-spin\" />;\n default:\n return <AlertCircle className=\"w-3.5 h-3.5\" />;\n }\n};\n\nconst formatCurrency = (amount: number, currency: string) => {\n return new Intl.NumberFormat('fr-FR', {\n style: 'decimal',\n minimumFractionDigits: 0,\n maximumFractionDigits: 0,\n }).format(amount) + ' ' + currency;\n};\n\nconst formatDate = (dateString: string, locale: 'fr' | 'en') => {\n const date = new Date(dateString);\n return new Intl.DateTimeFormat(locale === 'fr' ? 'fr-FR' : 'en-US', {\n day: '2-digit',\n month: 'short',\n year: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n }).format(date);\n};\n\nconst ITEMS_PER_PAGE = 10;\n\nexport function SpaarkPaySdkFinanceDashboard({\n transactions,\n title,\n subtitle,\n locale = 'fr',\n className = '',\n showExpertMode = true,\n onExpertModeClick,\n onTransactionClick,\n onRefresh,\n isLoading = false,\n}: SpaarkPaySdkFinanceDashboardProps) {\n const t = translations[locale];\n\n const [searchQuery, setSearchQuery] = useState('');\n const [typeFilter, setTypeFilter] = useState<TransactionType | 'all'>('all');\n const [statusFilter, setStatusFilter] = useState<TransactionStatus | 'all'>('all');\n const [currentPage, setCurrentPage] = useState(1);\n const [copiedId, setCopiedId] = useState<string | null>(null);\n\n const stats = useMemo(() => {\n const deposits = transactions.filter(tx => tx.type === 'deposit');\n const payouts = transactions.filter(tx => tx.type === 'payout');\n const refunds = transactions.filter(tx => tx.type === 'refund');\n const failed = transactions.filter(tx => tx.status === 'FAILED' || tx.status === 'REJECTED');\n\n const totalVolume = transactions\n .filter(tx => tx.status === 'COMPLETED')\n .reduce((sum, tx) => sum + tx.amount, 0);\n\n const depositsTotal = deposits\n .filter(tx => tx.status === 'COMPLETED')\n .reduce((sum, tx) => sum + tx.amount, 0);\n\n const payoutsTotal = payouts\n .filter(tx => tx.status === 'COMPLETED')\n .reduce((sum, tx) => sum + tx.amount, 0);\n\n const refundsTotal = refunds\n .filter(tx => tx.status === 'COMPLETED')\n .reduce((sum, tx) => sum + tx.amount, 0);\n\n return {\n totalVolume,\n depositsCount: deposits.length,\n depositsTotal,\n payoutsCount: payouts.length,\n payoutsTotal,\n failedCount: failed.length,\n refundsCount: refunds.length,\n refundsTotal,\n };\n }, [transactions]);\n\n const filteredTransactions = useMemo(() => {\n return transactions.filter(tx => {\n const matchesSearch = searchQuery === '' ||\n tx.id.toLowerCase().includes(searchQuery.toLowerCase()) ||\n tx.phoneNumber.includes(searchQuery);\n\n const matchesType = typeFilter === 'all' || tx.type === typeFilter;\n const matchesStatus = statusFilter === 'all' || tx.status === statusFilter;\n\n return matchesSearch && matchesType && matchesStatus;\n });\n }, [transactions, searchQuery, typeFilter, statusFilter]);\n\n const paginatedTransactions = useMemo(() => {\n const start = (currentPage - 1) * ITEMS_PER_PAGE;\n return filteredTransactions.slice(start, start + ITEMS_PER_PAGE);\n }, [filteredTransactions, currentPage]);\n\n const totalPages = Math.ceil(filteredTransactions.length / ITEMS_PER_PAGE);\n\n const copyToClipboard = useCallback((text: string) => {\n navigator.clipboard.writeText(text);\n setCopiedId(text);\n setTimeout(() => setCopiedId(null), 2000);\n }, []);\n\n const mainCurrency = transactions[0]?.currency || 'XAF';\n\n return (\n <div className={`space-y-6 ${className}`}>\n {/* Header */}\n <div className=\"flex items-center justify-between flex-wrap gap-4\">\n <div>\n <h1 className=\"text-2xl font-bold tracking-tight\">{title || t.title}</h1>\n <p className=\"text-muted-foreground mt-1\">{subtitle || t.subtitle}</p>\n </div>\n <div className=\"flex items-center gap-2\">\n {onRefresh && (\n <button\n onClick={onRefresh}\n disabled={isLoading}\n className=\"h-8 px-3 text-xs font-medium border border-border bg-background hover:bg-muted disabled:opacity-50 transition-colors flex items-center gap-2\"\n >\n <RefreshCw className={`w-4 h-4 ${isLoading ? 'animate-spin' : ''}`} />\n {t.refresh}\n </button>\n )}\n {showExpertMode && onExpertModeClick && (\n <button\n onClick={onExpertModeClick}\n className=\"h-8 px-3 text-xs font-medium border border-border bg-background hover:bg-muted transition-colors flex items-center gap-2\"\n >\n <Settings className=\"w-4 h-4\" />\n {t.expertMode}\n </button>\n )}\n </div>\n </div>\n\n {/* KPI Cards */}\n <div className=\"grid grid-cols-2 md:grid-cols-3 lg:grid-cols-5 gap-4\">\n {/* Total Volume */}\n <div className=\"border border-border bg-background p-4 space-y-2\">\n <div className=\"flex items-center gap-2 text-muted-foreground\">\n <TrendingUp className=\"w-4 h-4\" />\n <span className=\"text-xs font-medium\">{t.totalVolume}</span>\n </div>\n <p className=\"text-xl font-bold\">{formatCurrency(stats.totalVolume, mainCurrency)}</p>\n <p className=\"text-xs text-muted-foreground\">\n {transactions.length} {t.transactions}\n </p>\n </div>\n\n {/* Deposits */}\n <div className=\"border border-border bg-background p-4 space-y-2\">\n <div className=\"flex items-center gap-2 text-green-600 dark:text-green-400\">\n <ArrowDownCircle className=\"w-4 h-4\" />\n <span className=\"text-xs font-medium\">{t.deposits}</span>\n </div>\n <p className=\"text-xl font-bold\">{formatCurrency(stats.depositsTotal, mainCurrency)}</p>\n <p className=\"text-xs text-muted-foreground\">\n {stats.depositsCount} {t.transactions}\n </p>\n </div>\n\n {/* Payouts */}\n <div className=\"border border-border bg-background p-4 space-y-2\">\n <div className=\"flex items-center gap-2 text-blue-600 dark:text-blue-400\">\n <ArrowUpCircle className=\"w-4 h-4\" />\n <span className=\"text-xs font-medium\">{t.payouts}</span>\n </div>\n <p className=\"text-xl font-bold\">{formatCurrency(stats.payoutsTotal, mainCurrency)}</p>\n <p className=\"text-xs text-muted-foreground\">\n {stats.payoutsCount} {t.transactions}\n </p>\n </div>\n\n {/* Failed */}\n <div className=\"border border-border bg-background p-4 space-y-2\">\n <div className=\"flex items-center gap-2 text-red-600 dark:text-red-400\">\n <XCircle className=\"w-4 h-4\" />\n <span className=\"text-xs font-medium\">{t.failed}</span>\n </div>\n <p className=\"text-xl font-bold\">{stats.failedCount}</p>\n <p className=\"text-xs text-muted-foreground\">\n {t.transactions}\n </p>\n </div>\n\n {/* Refunds */}\n <div className=\"border border-border bg-background p-4 space-y-2\">\n <div className=\"flex items-center gap-2 text-orange-600 dark:text-orange-400\">\n <RefreshCw className=\"w-4 h-4\" />\n <span className=\"text-xs font-medium\">{t.refunds}</span>\n </div>\n <p className=\"text-xl font-bold\">{formatCurrency(stats.refundsTotal, mainCurrency)}</p>\n <p className=\"text-xs text-muted-foreground\">\n {stats.refundsCount} {t.transactions}\n </p>\n </div>\n </div>\n\n {/* Filters */}\n <div className=\"flex flex-wrap gap-3\">\n <div className=\"relative flex-1 min-w-[200px]\">\n <Search className=\"absolute left-2.5 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground\" />\n <input\n type=\"text\"\n placeholder={t.search}\n value={searchQuery}\n onChange={(e) => {\n setSearchQuery(e.target.value);\n setCurrentPage(1);\n }}\n className=\"w-full h-8 pl-8 pr-3 text-xs border border-input bg-transparent outline-none focus:border-ring\"\n />\n </div>\n\n <div className=\"relative\">\n <Filter className=\"absolute left-2.5 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground\" />\n <select\n value={typeFilter}\n onChange={(e) => {\n setTypeFilter(e.target.value as TransactionType | 'all');\n setCurrentPage(1);\n }}\n className=\"h-8 pl-8 pr-8 text-xs border border-input bg-transparent outline-none focus:border-ring appearance-none cursor-pointer\"\n >\n <option value=\"all\">{t.allTypes}</option>\n <option value=\"deposit\">{t.deposit}</option>\n <option value=\"payout\">{t.payout}</option>\n <option value=\"refund\">{t.refund}</option>\n </select>\n </div>\n\n <select\n value={statusFilter}\n onChange={(e) => {\n setStatusFilter(e.target.value as TransactionStatus | 'all');\n setCurrentPage(1);\n }}\n className=\"h-8 px-3 text-xs border border-input bg-transparent outline-none focus:border-ring appearance-none cursor-pointer\"\n >\n <option value=\"all\">{t.allStatuses}</option>\n <option value=\"COMPLETED\">COMPLETED</option>\n <option value=\"PENDING\">PENDING</option>\n <option value=\"PROCESSING\">PROCESSING</option>\n <option value=\"ACCEPTED\">ACCEPTED</option>\n <option value=\"FAILED\">FAILED</option>\n <option value=\"CANCELLED\">CANCELLED</option>\n <option value=\"REJECTED\">REJECTED</option>\n </select>\n </div>\n\n {/* Transactions Table */}\n <div className=\"border border-border bg-background overflow-hidden\">\n {isLoading ? (\n <div className=\"p-12 text-center\">\n <Loader2 className=\"w-8 h-8 animate-spin mx-auto text-muted-foreground\" />\n </div>\n ) : filteredTransactions.length === 0 ? (\n <div className=\"p-12 text-center\">\n <AlertCircle className=\"w-12 h-12 mx-auto text-muted-foreground mb-4\" />\n <p className=\"font-medium\">{t.noTransactions}</p>\n <p className=\"text-xs text-muted-foreground mt-1\">{t.noTransactionsDesc}</p>\n </div>\n ) : (\n <>\n <div className=\"overflow-x-auto\">\n <table className=\"w-full text-xs\">\n <thead className=\"bg-muted/50\">\n <tr>\n <th className=\"text-left p-3 font-medium\">{t.id}</th>\n <th className=\"text-left p-3 font-medium\">{t.type}</th>\n <th className=\"text-left p-3 font-medium\">{t.amount}</th>\n <th className=\"text-left p-3 font-medium\">{t.status}</th>\n <th className=\"text-left p-3 font-medium\">{t.provider}</th>\n <th className=\"text-left p-3 font-medium\">{t.phone}</th>\n <th className=\"text-left p-3 font-medium\">{t.date}</th>\n </tr>\n </thead>\n <tbody className=\"divide-y divide-border\">\n {paginatedTransactions.map((tx) => (\n <tr\n key={tx.id}\n className={`hover:bg-muted/30 transition-colors ${onTransactionClick ? 'cursor-pointer' : ''}`}\n onClick={() => onTransactionClick?.(tx)}\n >\n <td className=\"p-3\">\n <div className=\"flex items-center gap-1.5\">\n <span className=\"font-mono truncate max-w-[100px]\" title={tx.id}>\n {tx.id.slice(0, 8)}...\n </span>\n <button\n onClick={(e) => {\n e.stopPropagation();\n copyToClipboard(tx.id);\n }}\n className=\"p-1 hover:bg-muted rounded\"\n title=\"Copy ID\"\n >\n {copiedId === tx.id ? (\n <Check className=\"w-3 h-3 text-green-600\" />\n ) : (\n <Copy className=\"w-3 h-3 text-muted-foreground\" />\n )}\n </button>\n </div>\n </td>\n <td className=\"p-3\">\n <span className={`inline-flex items-center gap-1 px-2 py-0.5 text-xs font-medium ${\n tx.type === 'deposit' ? 'bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200' :\n tx.type === 'payout' ? 'bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-200' :\n 'bg-orange-100 text-orange-800 dark:bg-orange-900 dark:text-orange-200'\n }`}>\n {tx.type === 'deposit' && <ArrowDownCircle className=\"w-3 h-3\" />}\n {tx.type === 'payout' && <ArrowUpCircle className=\"w-3 h-3\" />}\n {tx.type === 'refund' && <RefreshCw className=\"w-3 h-3\" />}\n {t[tx.type]}\n </span>\n </td>\n <td className=\"p-3 font-medium\">\n {formatCurrency(tx.amount, tx.currency)}\n </td>\n <td className=\"p-3\">\n <span className={`inline-flex items-center gap-1 px-2 py-0.5 text-xs font-medium ${STATUS_COLORS[tx.status]}`}>\n <StatusIcon status={tx.status} />\n {tx.status}\n </span>\n </td>\n <td className=\"p-3 text-muted-foreground\">\n {tx.provider.replace(/_/g, ' ')}\n </td>\n <td className=\"p-3 font-mono text-muted-foreground\">\n {tx.phoneNumber}\n </td>\n <td className=\"p-3 text-muted-foreground\">\n {formatDate(tx.createdAt, locale)}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n\n {/* Pagination */}\n {totalPages > 1 && (\n <div className=\"flex items-center justify-between px-4 py-3 border-t border-border\">\n <p className=\"text-xs text-muted-foreground\">\n {filteredTransactions.length} {t.transactions}\n </p>\n <div className=\"flex items-center gap-2\">\n <button\n onClick={() => setCurrentPage(p => Math.max(1, p - 1))}\n disabled={currentPage === 1}\n className=\"w-8 h-8 flex items-center justify-center border border-border hover:bg-muted disabled:opacity-50 disabled:cursor-not-allowed transition-colors\"\n >\n <ChevronLeft className=\"w-4 h-4\" />\n </button>\n <span className=\"text-xs\">\n {t.page} {currentPage} {t.of} {totalPages}\n </span>\n <button\n onClick={() => setCurrentPage(p => Math.min(totalPages, p + 1))}\n disabled={currentPage === totalPages}\n className=\"w-8 h-8 flex items-center justify-center border border-border hover:bg-muted disabled:opacity-50 disabled:cursor-not-allowed transition-colors\"\n >\n <ChevronRight className=\"w-4 h-4\" />\n </button>\n </div>\n </div>\n )}\n </>\n )}\n </div>\n </div>\n );\n}\n\nexport default SpaarkPaySdkFinanceDashboard;\n","'use client';\n\nimport { useState, useCallback } from 'react';\nimport type { Correspondent } from './constants/correspondents';\nimport type { DepositResponse, PayoutResponse } from './types/transactions';\nimport type { WebhookEventType } from './types/webhooks';\nimport {\n generateWebhook,\n WEBHOOK_EVENT_TYPES,\n} from './mocks/webhook-generators';\n\nexport {\n SpaarkPaySdkFinanceDashboard,\n type SpaarkPaySdkFinanceDashboardProps,\n type Transaction,\n type TransactionType,\n type TransactionStatus,\n} from './components/SpaarkPaySdkFinanceDashboard';\n\ntype OperationStatus = 'idle' | 'loading' | 'success' | 'error';\ntype TabType = 'deposit' | 'payout' | 'status' | 'toolkit' | 'finances' | 'webhooks';\n\ninterface TestResult {\n id: string;\n operation: string;\n status: OperationStatus;\n response?: unknown;\n error?: string;\n timestamp: string;\n}\n\ninterface WebhookTestEvent {\n id: string;\n eventType: string;\n payload: unknown;\n signature: string;\n receivedAt: string;\n isVerified: boolean | null;\n}\n\nexport interface SpaarkPaySdkTestDashboardProps {\n apiKey?: string;\n environment?: 'sandbox' | 'production';\n className?: string;\n demoMode?: boolean;\n /** Base path for API routes (e.g., '/api/pawapay'). When set, requests go through your server instead of directly to Pawapay. */\n apiBasePath?: string;\n onDepositComplete?: (response: DepositResponse) => void;\n onPayoutComplete?: (response: PayoutResponse) => void;\n onError?: (error: Error) => void;\n}\n\n// Mock response generators for demo mode (V2 API format)\nconst createMockDepositResponse = (txId: string): DepositResponse => ({\n depositId: txId,\n status: 'ACCEPTED',\n created: new Date().toISOString(),\n nextStep: 'FINAL_STATUS',\n});\n\nconst createMockPayoutResponse = (txId: string): PayoutResponse => ({\n payoutId: txId,\n status: 'ACCEPTED',\n created: new Date().toISOString(),\n});\n\nconst createMockStatusResponse = (txId: string) => ({\n depositId: txId,\n status: ['COMPLETED', 'ACCEPTED', 'PROCESSING', 'ENQUEUED'][Math.floor(Math.random() * 4)],\n created: new Date(Date.now() - 60000).toISOString(),\n amount: '5000',\n currency: 'XAF',\n country: 'CMR',\n payer: {\n type: 'MMO',\n accountDetails: {\n phoneNumber: '237670000000',\n provider: 'MTN_MOMO_CMR',\n },\n },\n});\n\nconst createMockAvailabilityResponse = () => [\n {\n country: 'CMR',\n providers: [\n {\n provider: 'MTN_MOMO_CMR',\n operationTypes: [\n { operationType: 'DEPOSIT', status: 'OPERATIONAL' },\n { operationType: 'PAYOUT', status: 'OPERATIONAL' },\n ],\n },\n {\n provider: 'ORANGE_CMR',\n operationTypes: [\n { operationType: 'DEPOSIT', status: 'OPERATIONAL' },\n { operationType: 'PAYOUT', status: 'DELAYED' },\n ],\n },\n ],\n },\n];\n\nconst createMockPredictResponse = (phone: string) => ({\n country: 'CMR',\n provider: phone.startsWith('23767') ? 'MTN_MOMO_CMR' : 'ORANGE_CMR',\n phoneNumber: phone.replace(/\\D/g, ''),\n});\n\nconst createMockActiveConfigResponse = () => ({\n companyName: 'Demo Company',\n signatureConfiguration: {\n signedRequestsOnly: false,\n signedCallbacks: true,\n },\n countries: [\n {\n country: 'CMR',\n displayName: { en: 'Cameroon', fr: 'Cameroun' },\n prefix: '237',\n flag: 'https://cdn.pawapay.io/flags/cmr.svg',\n providers: [\n {\n provider: 'MTN_MOMO_CMR',\n displayName: 'MTN Mobile Money',\n nameDisplayedToCustomer: 'MTN MoMo',\n currencies: [\n {\n currency: 'XAF',\n displayName: 'CFA Franc',\n operationTypes: {\n DEPOSIT: { minAmount: '100', maxAmount: '1000000', status: 'OPERATIONAL' },\n PAYOUT: { minAmount: '100', maxAmount: '500000', status: 'OPERATIONAL' },\n },\n },\n ],\n },\n ],\n },\n ],\n});\n\nconst createMockWalletBalancesResponse = () => ({\n balances: [\n { country: 'CMR', currency: 'XAF', balance: '1250000.00' },\n { country: 'COG', currency: 'XAF', balance: '450000.00' },\n { country: 'GAB', currency: 'XAF', balance: '780000.00' },\n ],\n});\n\nconst createMockPublicKeysResponse = () => [\n {\n id: 'key-001',\n key: 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA...',\n },\n];\n\nconst simulateDelay = (ms: number = 800) => new Promise(resolve => setTimeout(resolve, ms + Math.random() * 400));\n\n// HMAC-SHA256 computation using Web Crypto API (browser-compatible)\nasync function computeHmacSha256(message: string, secret: string): Promise<string> {\n const encoder = new TextEncoder();\n const key = await crypto.subtle.importKey(\n 'raw',\n encoder.encode(secret),\n { name: 'HMAC', hash: 'SHA-256' },\n false,\n ['sign']\n );\n const signature = await crypto.subtle.sign('HMAC', key, encoder.encode(message));\n return Array.from(new Uint8Array(signature))\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('');\n}\n\nconst generateUUID = (): string => {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n};\n\nconst PROVIDER_OPTIONS: Array<{ value: Correspondent; label: string; country: string }> = [\n { value: 'MTN_MOMO_CMR', label: 'MTN Mobile Money', country: 'Cameroun' },\n { value: 'ORANGE_CMR', label: 'Orange Money', country: 'Cameroun' },\n { value: 'MTN_MOMO_COG', label: 'MTN Mobile Money', country: 'Congo' },\n { value: 'AIRTEL_COG', label: 'Airtel Money', country: 'Congo' },\n { value: 'MTN_MOMO_GAB', label: 'MTN Mobile Money', country: 'Gabon' },\n { value: 'AIRTEL_GAB', label: 'Airtel Money', country: 'Gabon' },\n];\n\nconst CURRENCY_OPTIONS = [\n { value: 'XAF', label: 'XAF (CFA Franc BEAC)' },\n { value: 'XOF', label: 'XOF (CFA Franc BCEAO)' },\n { value: 'GHS', label: 'GHS (Ghana Cedi)' },\n { value: 'KES', label: 'KES (Kenyan Shilling)' },\n { value: 'RWF', label: 'RWF (Rwandan Franc)' },\n { value: 'TZS', label: 'TZS (Tanzanian Shilling)' },\n { value: 'UGX', label: 'UGX (Ugandan Shilling)' },\n { value: 'ZMW', label: 'ZMW (Zambian Kwacha)' },\n];\n\nexport function SpaarkPaySdkTestDashboard({\n apiKey: initialApiKey = '',\n environment: initialEnvironment = 'sandbox',\n className = '',\n demoMode: initialDemoMode = false,\n apiBasePath = '/api/pawapay',\n onDepositComplete,\n onPayoutComplete,\n onError,\n}: SpaarkPaySdkTestDashboardProps) {\n const [apiKey, setApiKey] = useState(initialApiKey);\n const [environment, setEnvironment] = useState<'sandbox' | 'production'>(initialEnvironment);\n const [isConfigured, setIsConfigured] = useState(!!initialApiKey || initialDemoMode);\n const [isDemoMode, setIsDemoMode] = useState(initialDemoMode);\n\n const [activeTab, setActiveTab] = useState<TabType>('deposit');\n const [phoneNumber, setPhoneNumber] = useState('237670000000');\n const [amount, setAmount] = useState('5000');\n const [currency, setCurrency] = useState('XAF');\n const [provider, setProvider] = useState<Correspondent>('MTN_MOMO_CMR');\n const [description, setDescription] = useState('Test Payment');\n const [transactionId, setTransactionId] = useState('');\n\n const [results, setResults] = useState<TestResult[]>([]);\n const [currentStatus, setCurrentStatus] = useState<OperationStatus>('idle');\n\n // Webhook testing states\n const [webhookSecret, setWebhookSecret] = useState('whsec_test_secret_key');\n const [webhookEvents, setWebhookEvents] = useState<WebhookTestEvent[]>([]);\n const [webhookEventType, setWebhookEventType] = useState<WebhookEventType>('deposit.completed');\n const [webhookAmount, setWebhookAmount] = useState('5000');\n const [webhookPhone, setWebhookPhone] = useState('237670000000');\n const [webhookProvider, setWebhookProvider] = useState<Correspondent>('MTN_MOMO_CMR');\n const [generatedPayload, setGeneratedPayload] = useState<string>('');\n const [generatedSignature, setGeneratedSignature] = useState<string>('');\n const [verifyPayload, setVerifyPayload] = useState<string>('');\n const [verifySignature, setVerifySignature] = useState<string>('');\n const [verifySecret, setVerifySecret] = useState<string>('');\n const [verifyResult, setVerifyResult] = useState<boolean | null>(null);\n const [parseInput, setParseInput] = useState<string>('');\n const [parsedEvent, setParsedEvent] = useState<Record<string, unknown> | null>(null);\n const [parseError, setParseError] = useState<string>('');\n const [eventLogFilter, setEventLogFilter] = useState<'all' | 'deposit' | 'payout' | 'refund'>('all');\n\n const addResult = useCallback((operation: string, status: OperationStatus, response?: unknown, error?: string) => {\n const result: TestResult = {\n id: generateUUID(),\n operation,\n status,\n response,\n error,\n timestamp: new Date().toLocaleTimeString(),\n };\n setResults((prev) => [result, ...prev].slice(0, 20));\n }, []);\n\n const handleConfigure = useCallback(() => {\n if (!apiKey.trim()) {\n addResult('Configuration', 'error', undefined, 'API Key is required');\n return;\n }\n setIsConfigured(true);\n setIsDemoMode(false);\n addResult('Configuration', 'success', { environment, configured: true, apiBasePath });\n }, [apiKey, environment, apiBasePath, addResult]);\n\n const handleDemoMode = useCallback(() => {\n setIsDemoMode(true);\n setIsConfigured(true);\n addResult('Configuration', 'success', { mode: 'demo', message: 'Demo mode activated - responses are simulated' });\n }, [addResult]);\n\n const handleDeposit = useCallback(async () => {\n if (!apiKey && !isDemoMode) return;\n setCurrentStatus('loading');\n\n try {\n const txId = generateUUID();\n setTransactionId(txId);\n\n let response: DepositResponse;\n\n if (isDemoMode) {\n await simulateDelay();\n response = createMockDepositResponse(txId);\n } else {\n const res = await fetch(`${apiBasePath}/deposit`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n apiKey,\n environment,\n amount: parseFloat(amount),\n currency,\n provider,\n phoneNumber,\n customerMessage: description.slice(0, 22),\n transactionId: txId,\n }),\n });\n\n const data = await res.json();\n if (!res.ok) throw new Error(data.error || 'Deposit failed');\n response = data;\n }\n\n setCurrentStatus('success');\n addResult('Deposit', 'success', response);\n onDepositComplete?.(response);\n } catch (err) {\n setCurrentStatus('error');\n const message = err instanceof Error ? err.message : 'Deposit failed';\n addResult('Deposit', 'error', undefined, message);\n onError?.(err instanceof Error ? err : new Error(message));\n }\n }, [apiKey, apiBasePath, environment, isDemoMode, amount, currency, provider, phoneNumber, description, addResult, onDepositComplete, onError]);\n\n const handlePayout = useCallback(async () => {\n if (!apiKey && !isDemoMode) return;\n setCurrentStatus('loading');\n\n try {\n const txId = generateUUID();\n setTransactionId(txId);\n\n let response: PayoutResponse;\n\n if (isDemoMode) {\n await simulateDelay();\n response = createMockPayoutResponse(txId);\n } else {\n const res = await fetch(`${apiBasePath}/payout`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n apiKey,\n environment,\n amount: parseFloat(amount),\n currency,\n provider,\n phoneNumber,\n transactionId: txId,\n }),\n });\n\n const data = await res.json();\n if (!res.ok) throw new Error(data.error || 'Payout failed');\n response = data;\n }\n\n setCurrentStatus('success');\n addResult('Payout', 'success', response);\n onPayoutComplete?.(response);\n } catch (err) {\n setCurrentStatus('error');\n const message = err instanceof Error ? err.message : 'Payout failed';\n addResult('Payout', 'error', undefined, message);\n onError?.(err instanceof Error ? err : new Error(message));\n }\n }, [apiKey, apiBasePath, environment, isDemoMode, amount, currency, provider, phoneNumber, addResult, onPayoutComplete, onError]);\n\n const handleCheckStatus = useCallback(async () => {\n if ((!apiKey && !isDemoMode) || !transactionId) {\n addResult('Check Status', 'error', undefined, 'No transaction ID');\n return;\n }\n setCurrentStatus('loading');\n\n try {\n let response;\n\n if (isDemoMode) {\n await simulateDelay();\n response = createMockStatusResponse(transactionId);\n } else {\n const res = await fetch(`${apiBasePath}/status`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ apiKey, environment, transactionId }),\n });\n\n const data = await res.json();\n if (!res.ok) throw new Error(data.error || 'Status check failed');\n response = data;\n }\n\n setCurrentStatus('success');\n addResult('Check Status', 'success', response);\n } catch (err) {\n setCurrentStatus('error');\n const message = err instanceof Error ? err.message : 'Status check failed';\n addResult('Check Status', 'error', undefined, message);\n onError?.(err instanceof Error ? err : new Error(message));\n }\n }, [apiKey, apiBasePath, environment, isDemoMode, transactionId, addResult, onError]);\n\n const handleGetAvailability = useCallback(async () => {\n if (!apiKey && !isDemoMode) return;\n setCurrentStatus('loading');\n\n try {\n let response;\n\n if (isDemoMode) {\n await simulateDelay();\n response = createMockAvailabilityResponse();\n } else {\n const res = await fetch(`${apiBasePath}/availability`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ apiKey, environment }),\n });\n\n const data = await res.json();\n if (!res.ok) throw new Error(data.error || 'Availability check failed');\n response = data;\n }\n\n setCurrentStatus('success');\n addResult('Provider Availability', 'success', response);\n } catch (err) {\n setCurrentStatus('error');\n const message = err instanceof Error ? err.message : 'Availability check failed';\n addResult('Provider Availability', 'error', undefined, message);\n onError?.(err instanceof Error ? err : new Error(message));\n }\n }, [apiKey, apiBasePath, environment, isDemoMode, addResult, onError]);\n\n const handlePredictProvider = useCallback(async () => {\n if (!apiKey && !isDemoMode) return;\n setCurrentStatus('loading');\n\n try {\n let response;\n\n if (isDemoMode) {\n await simulateDelay();\n response = createMockPredictResponse(phoneNumber);\n } else {\n const res = await fetch(`${apiBasePath}/predict-provider`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ apiKey, environment, phoneNumber }),\n });\n\n const data = await res.json();\n if (!res.ok) throw new Error(data.error || 'Prediction failed');\n response = data;\n }\n\n setCurrentStatus('success');\n addResult('Predict Provider', 'success', response);\n } catch (err) {\n setCurrentStatus('error');\n const message = err instanceof Error ? err.message : 'Prediction failed';\n addResult('Predict Provider', 'error', undefined, message);\n onError?.(err instanceof Error ? err : new Error(message));\n }\n }, [apiKey, apiBasePath, environment, isDemoMode, phoneNumber, addResult, onError]);\n\n const handleGetActiveConfig = useCallback(async () => {\n if (!apiKey && !isDemoMode) return;\n setCurrentStatus('loading');\n\n try {\n let response;\n\n if (isDemoMode) {\n await simulateDelay();\n response = createMockActiveConfigResponse();\n } else {\n const res = await fetch(`${apiBasePath}/active-config`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ apiKey, environment }),\n });\n\n const data = await res.json();\n if (!res.ok) throw new Error(data.error || 'Failed to get config');\n response = data;\n }\n\n setCurrentStatus('success');\n addResult('Active Configuration', 'success', response);\n } catch (err) {\n setCurrentStatus('error');\n const message = err instanceof Error ? err.message : 'Failed to get config';\n addResult('Active Configuration', 'error', undefined, message);\n onError?.(err instanceof Error ? err : new Error(message));\n }\n }, [apiKey, apiBasePath, environment, isDemoMode, addResult, onError]);\n\n const handleGetPublicKeys = useCallback(async () => {\n if (!apiKey && !isDemoMode) return;\n setCurrentStatus('loading');\n\n try {\n let response;\n\n if (isDemoMode) {\n await simulateDelay();\n response = createMockPublicKeysResponse();\n } else {\n const res = await fetch(`${apiBasePath}/public-keys`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ apiKey, environment }),\n });\n\n const data = await res.json();\n if (!res.ok) throw new Error(data.error || 'Failed to get public keys');\n response = data;\n }\n\n setCurrentStatus('success');\n addResult('Public Keys', 'success', response);\n } catch (err) {\n setCurrentStatus('error');\n const message = err instanceof Error ? err.message : 'Failed to get public keys';\n addResult('Public Keys', 'error', undefined, message);\n onError?.(err instanceof Error ? err : new Error(message));\n }\n }, [apiKey, apiBasePath, environment, isDemoMode, addResult, onError]);\n\n const handleGetWalletBalances = useCallback(async () => {\n if (!apiKey && !isDemoMode) return;\n setCurrentStatus('loading');\n\n try {\n let response;\n\n if (isDemoMode) {\n await simulateDelay();\n response = createMockWalletBalancesResponse();\n } else {\n const res = await fetch(`${apiBasePath}/wallet-balances`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ apiKey, environment }),\n });\n\n const data = await res.json();\n if (!res.ok) throw new Error(data.error || 'Failed to get balances');\n response = data;\n }\n\n setCurrentStatus('success');\n addResult('Wallet Balances', 'success', response);\n } catch (err) {\n setCurrentStatus('error');\n const message = err instanceof Error ? err.message : 'Failed to get balances';\n addResult('Wallet Balances', 'error', undefined, message);\n onError?.(err instanceof Error ? err : new Error(message));\n }\n }, [apiKey, apiBasePath, environment, isDemoMode, addResult, onError]);\n\n const copyToClipboard = useCallback((text: string) => {\n navigator.clipboard.writeText(text);\n }, []);\n\n if (!isConfigured) {\n return (\n <div className={`space-y-8 ${className}`}>\n <div>\n <h1 className=\"text-2xl font-bold tracking-tight\">Spaark Pay Console</h1>\n <p className=\"text-muted-foreground mt-1\">\n Configurez vos identifiants PawaPay pour commencer\n </p>\n </div>\n\n <div className=\"border border-border bg-background p-6 max-w-md space-y-6\">\n <div className=\"flex items-center gap-3\">\n <div className=\"w-10 h-10 bg-muted flex items-center justify-center\">\n <SettingsIcon />\n </div>\n <div>\n <h2 className=\"font-semibold\">SDK Configuration</h2>\n <p className=\"text-xs text-muted-foreground\">Enter your API credentials</p>\n </div>\n </div>\n\n <div className=\"space-y-4\">\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">API Key</label>\n <input\n type=\"password\"\n placeholder=\"pk_sandbox_...\"\n value={apiKey}\n onChange={(e) => setApiKey(e.target.value)}\n className=\"w-full h-8 px-2.5 text-xs border border-input bg-transparent rounded-none outline-none focus:border-ring\"\n />\n </div>\n\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Environnement</label>\n <div className=\"flex gap-2\">\n <button\n onClick={() => setEnvironment('sandbox')}\n className={`h-8 px-3 text-xs font-medium border transition-colors flex items-center gap-1.5 ${\n environment === 'sandbox'\n ? 'bg-blue-600 text-white border-blue-600'\n : 'bg-background border-border hover:bg-muted'\n }`}\n >\n <span className={`w-2 h-2 rounded-full ${environment === 'sandbox' ? 'bg-blue-200' : 'bg-blue-500'}`} />\n Sandbox\n </button>\n <button\n onClick={() => setEnvironment('production')}\n className={`h-8 px-3 text-xs font-medium border transition-colors flex items-center gap-1.5 ${\n environment === 'production'\n ? 'bg-green-600 text-white border-green-600'\n : 'bg-background border-border hover:bg-muted'\n }`}\n >\n <span className={`w-2 h-2 rounded-full ${environment === 'production' ? 'bg-green-200' : 'bg-green-500'}`} />\n Production\n </button>\n </div>\n <p className=\"text-xs text-muted-foreground\">\n {environment === 'sandbox'\n ? 'Utilisez le sandbox pour tester sans frais réels'\n : 'Attention : les transactions en production sont réelles'\n }\n </p>\n </div>\n\n <button\n onClick={handleConfigure}\n className=\"w-full h-8 px-3 text-xs font-medium bg-primary text-primary-foreground hover:bg-primary/90 transition-colors flex items-center justify-center gap-2\"\n >\n <PlayIcon />\n Initialize SDK\n </button>\n\n <div className=\"relative flex items-center py-2\">\n <div className=\"flex-grow border-t border-border\"></div>\n <span className=\"flex-shrink mx-3 text-xs text-muted-foreground\">ou</span>\n <div className=\"flex-grow border-t border-border\"></div>\n </div>\n\n <button\n onClick={handleDemoMode}\n className=\"w-full h-8 px-3 text-xs font-medium border border-border bg-background hover:bg-muted transition-colors flex items-center justify-center gap-2\"\n >\n <BeakerIcon />\n Mode Démo (sans API key)\n </button>\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <div className={`space-y-6 ${className}`}>\n <div className=\"flex items-center justify-between flex-wrap gap-4\">\n <div>\n <div className=\"flex items-center gap-2\">\n <h1 className=\"text-2xl font-bold tracking-tight\">Spaark Pay Console</h1>\n {isDemoMode ? (\n <span className=\"px-2 py-0.5 text-xs font-medium bg-amber-100 text-amber-800 dark:bg-amber-900 dark:text-amber-200\">\n DEMO\n </span>\n ) : environment === 'production' ? (\n <span className=\"px-2 py-0.5 text-xs font-medium bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200\">\n PRODUCTION\n </span>\n ) : (\n <span className=\"px-2 py-0.5 text-xs font-medium bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-200\">\n SANDBOX\n </span>\n )}\n </div>\n <p className=\"text-muted-foreground mt-1\">\n {isDemoMode\n ? 'Mode démo - Les réponses sont simulées'\n : environment === 'production'\n ? 'Mode production - Transactions réelles'\n : 'Mode sandbox - Environnement de test'\n }\n </p>\n </div>\n <button\n onClick={() => setIsConfigured(false)}\n className=\"h-8 px-3 text-xs font-medium border border-border bg-background hover:bg-muted transition-colors flex items-center gap-2\"\n >\n <SettingsIcon />\n Reconfigure\n </button>\n </div>\n\n <div className=\"grid lg:grid-cols-3 gap-6\">\n <div className=\"lg:col-span-2 space-y-6\">\n {/* Tabs */}\n <div className=\"flex flex-wrap gap-1 bg-muted p-1\">\n <button\n onClick={() => setActiveTab('deposit')}\n className={`flex-1 min-w-[80px] h-8 px-3 text-xs font-medium transition-colors flex items-center justify-center gap-1.5 ${\n activeTab === 'deposit' ? 'bg-background text-foreground' : 'text-muted-foreground hover:text-foreground'\n }`}\n >\n <WalletIcon />\n Deposit\n </button>\n <button\n onClick={() => setActiveTab('payout')}\n className={`flex-1 min-w-[80px] h-8 px-3 text-xs font-medium transition-colors flex items-center justify-center gap-1.5 ${\n activeTab === 'payout' ? 'bg-background text-foreground' : 'text-muted-foreground hover:text-foreground'\n }`}\n >\n <PhoneIcon />\n Payout\n </button>\n <button\n onClick={() => setActiveTab('status')}\n className={`flex-1 min-w-[80px] h-8 px-3 text-xs font-medium transition-colors flex items-center justify-center gap-1.5 ${\n activeTab === 'status' ? 'bg-background text-foreground' : 'text-muted-foreground hover:text-foreground'\n }`}\n >\n <RefreshIcon />\n Status\n </button>\n <button\n onClick={() => setActiveTab('toolkit')}\n className={`flex-1 min-w-[80px] h-8 px-3 text-xs font-medium transition-colors flex items-center justify-center gap-1.5 ${\n activeTab === 'toolkit' ? 'bg-background text-foreground' : 'text-muted-foreground hover:text-foreground'\n }`}\n >\n <ToolkitIcon />\n Toolkit\n </button>\n <button\n onClick={() => setActiveTab('finances')}\n className={`flex-1 min-w-[80px] h-8 px-3 text-xs font-medium transition-colors flex items-center justify-center gap-1.5 ${\n activeTab === 'finances' ? 'bg-background text-foreground' : 'text-muted-foreground hover:text-foreground'\n }`}\n >\n <ChartIcon />\n Finances\n </button>\n <button\n onClick={() => setActiveTab('webhooks')}\n className={`flex-1 min-w-[80px] h-8 px-3 text-xs font-medium transition-colors flex items-center justify-center gap-1.5 ${\n activeTab === 'webhooks' ? 'bg-background text-foreground' : 'text-muted-foreground hover:text-foreground'\n }`}\n >\n <WebhookIcon />\n Webhooks\n </button>\n </div>\n\n {/* Deposit Tab */}\n {activeTab === 'deposit' && (\n <div className=\"border border-border bg-background p-6 space-y-4\">\n <div>\n <h3 className=\"font-semibold\">Initiate Deposit</h3>\n <p className=\"text-xs text-muted-foreground\">Collect payment from a Mobile Money user</p>\n </div>\n\n <div className=\"grid sm:grid-cols-2 gap-4\">\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Phone Number</label>\n <input\n placeholder=\"237670000000\"\n value={phoneNumber}\n onChange={(e) => setPhoneNumber(e.target.value)}\n className=\"w-full h-8 px-2.5 text-xs border border-input bg-transparent rounded-none outline-none focus:border-ring\"\n />\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Amount</label>\n <input\n type=\"number\"\n placeholder=\"5000\"\n value={amount}\n onChange={(e) => setAmount(e.target.value)}\n className=\"w-full h-8 px-2.5 text-xs border border-input bg-transparent rounded-none outline-none focus:border-ring\"\n />\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Currency</label>\n <select\n value={currency}\n onChange={(e) => setCurrency(e.target.value)}\n className=\"w-full h-8 px-2.5 text-xs border border-input bg-transparent rounded-none outline-none focus:border-ring\"\n >\n {CURRENCY_OPTIONS.map((c) => (\n <option key={c.value} value={c.value}>{c.label}</option>\n ))}\n </select>\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Provider</label>\n <select\n value={provider}\n onChange={(e) => setProvider(e.target.value as Correspondent)}\n className=\"w-full h-8 px-2.5 text-xs border border-input bg-transparent rounded-none outline-none focus:border-ring\"\n >\n {PROVIDER_OPTIONS.map((c) => (\n <option key={c.value} value={c.value}>{c.label} ({c.country})</option>\n ))}\n </select>\n </div>\n <div className=\"space-y-2 sm:col-span-2\">\n <label className=\"text-xs font-medium\">Customer Message (4-22 chars)</label>\n <input\n placeholder=\"Payment description\"\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n maxLength={22}\n className=\"w-full h-8 px-2.5 text-xs border border-input bg-transparent rounded-none outline-none focus:border-ring\"\n />\n </div>\n </div>\n\n <button\n onClick={handleDeposit}\n disabled={currentStatus === 'loading'}\n className=\"w-full h-8 px-3 text-xs font-medium bg-primary text-primary-foreground hover:bg-primary/90 disabled:opacity-50 transition-colors flex items-center justify-center gap-2\"\n >\n {currentStatus === 'loading' ? <LoaderIcon /> : <PlayIcon />}\n Execute Deposit\n </button>\n </div>\n )}\n\n {/* Payout Tab */}\n {activeTab === 'payout' && (\n <div className=\"border border-border bg-background p-6 space-y-4\">\n <div>\n <h3 className=\"font-semibold\">Initiate Payout</h3>\n <p className=\"text-xs text-muted-foreground\">Send money to a Mobile Money account</p>\n </div>\n\n <div className=\"grid sm:grid-cols-2 gap-4\">\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Recipient Phone</label>\n <input\n placeholder=\"237670000000\"\n value={phoneNumber}\n onChange={(e) => setPhoneNumber(e.target.value)}\n className=\"w-full h-8 px-2.5 text-xs border border-input bg-transparent rounded-none outline-none focus:border-ring\"\n />\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Amount</label>\n <input\n type=\"number\"\n placeholder=\"5000\"\n value={amount}\n onChange={(e) => setAmount(e.target.value)}\n className=\"w-full h-8 px-2.5 text-xs border border-input bg-transparent rounded-none outline-none focus:border-ring\"\n />\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Currency</label>\n <select\n value={currency}\n onChange={(e) => setCurrency(e.target.value)}\n className=\"w-full h-8 px-2.5 text-xs border border-input bg-transparent rounded-none outline-none focus:border-ring\"\n >\n {CURRENCY_OPTIONS.map((c) => (\n <option key={c.value} value={c.value}>{c.label}</option>\n ))}\n </select>\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Provider</label>\n <select\n value={provider}\n onChange={(e) => setProvider(e.target.value as Correspondent)}\n className=\"w-full h-8 px-2.5 text-xs border border-input bg-transparent rounded-none outline-none focus:border-ring\"\n >\n {PROVIDER_OPTIONS.map((c) => (\n <option key={c.value} value={c.value}>{c.label} ({c.country})</option>\n ))}\n </select>\n </div>\n </div>\n\n <button\n onClick={handlePayout}\n disabled={currentStatus === 'loading'}\n className=\"w-full h-8 px-3 text-xs font-medium bg-primary text-primary-foreground hover:bg-primary/90 disabled:opacity-50 transition-colors flex items-center justify-center gap-2\"\n >\n {currentStatus === 'loading' ? <LoaderIcon /> : <PlayIcon />}\n Execute Payout\n </button>\n </div>\n )}\n\n {/* Status Tab */}\n {activeTab === 'status' && (\n <div className=\"border border-border bg-background p-6 space-y-4\">\n <div>\n <h3 className=\"font-semibold\">Check Transaction Status</h3>\n <p className=\"text-xs text-muted-foreground\">Query the status of a transaction</p>\n </div>\n\n <div className=\"space-y-4\">\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Transaction ID</label>\n <div className=\"flex gap-2\">\n <input\n placeholder=\"Enter transaction ID (UUID)\"\n value={transactionId}\n onChange={(e) => setTransactionId(e.target.value)}\n className=\"flex-1 h-8 px-2.5 text-xs border border-input bg-transparent rounded-none outline-none focus:border-ring font-mono\"\n />\n {transactionId && (\n <button\n onClick={() => copyToClipboard(transactionId)}\n className=\"w-8 h-8 border border-border bg-background hover:bg-muted transition-colors flex items-center justify-center\"\n title=\"Copy to clipboard\"\n >\n <CopyIcon />\n </button>\n )}\n </div>\n </div>\n\n <button\n onClick={handleCheckStatus}\n disabled={currentStatus === 'loading' || !transactionId}\n className=\"w-full h-8 px-3 text-xs font-medium bg-primary text-primary-foreground hover:bg-primary/90 disabled:opacity-50 transition-colors flex items-center justify-center gap-2\"\n >\n {currentStatus === 'loading' ? <LoaderIcon /> : <RefreshIcon />}\n Check Status\n </button>\n </div>\n </div>\n )}\n\n {/* Toolkit Tab */}\n {activeTab === 'toolkit' && (\n <div className=\"space-y-4\">\n <div className=\"border border-border bg-background p-6 space-y-4\">\n <div>\n <h3 className=\"font-semibold\">Predict Provider</h3>\n <p className=\"text-xs text-muted-foreground\">Predict the provider from a phone number</p>\n </div>\n\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Phone Number</label>\n <input\n placeholder=\"+237 670 000 000\"\n value={phoneNumber}\n onChange={(e) => setPhoneNumber(e.target.value)}\n className=\"w-full h-8 px-2.5 text-xs border border-input bg-transparent rounded-none outline-none focus:border-ring\"\n />\n </div>\n\n <button\n onClick={handlePredictProvider}\n disabled={currentStatus === 'loading'}\n className=\"w-full h-8 px-3 text-xs font-medium bg-primary text-primary-foreground hover:bg-primary/90 disabled:opacity-50 transition-colors flex items-center justify-center gap-2\"\n >\n {currentStatus === 'loading' ? <LoaderIcon /> : <SearchIcon />}\n Predict Provider\n </button>\n </div>\n\n <div className=\"grid sm:grid-cols-3 gap-3\">\n <button\n onClick={handleGetAvailability}\n disabled={currentStatus === 'loading'}\n className=\"h-10 px-3 text-xs font-medium border border-border bg-background hover:bg-muted disabled:opacity-50 transition-colors flex items-center justify-center gap-2\"\n >\n <SignalIcon />\n Provider Availability\n </button>\n <button\n onClick={handleGetActiveConfig}\n disabled={currentStatus === 'loading'}\n className=\"h-10 px-3 text-xs font-medium border border-border bg-background hover:bg-muted disabled:opacity-50 transition-colors flex items-center justify-center gap-2\"\n >\n <SettingsIcon />\n Active Config\n </button>\n <button\n onClick={handleGetPublicKeys}\n disabled={currentStatus === 'loading'}\n className=\"h-10 px-3 text-xs font-medium border border-border bg-background hover:bg-muted disabled:opacity-50 transition-colors flex items-center justify-center gap-2\"\n >\n <KeyIcon />\n Public Keys\n </button>\n </div>\n </div>\n )}\n\n {/* Finances Tab */}\n {activeTab === 'finances' && (\n <div className=\"space-y-4\">\n <div className=\"border border-border bg-background p-6 space-y-4\">\n <div>\n <h3 className=\"font-semibold\">Wallet Balances</h3>\n <p className=\"text-xs text-muted-foreground\">View balances for all your wallets</p>\n </div>\n\n <button\n onClick={handleGetWalletBalances}\n disabled={currentStatus === 'loading'}\n className=\"w-full h-8 px-3 text-xs font-medium bg-primary text-primary-foreground hover:bg-primary/90 disabled:opacity-50 transition-colors flex items-center justify-center gap-2\"\n >\n {currentStatus === 'loading' ? <LoaderIcon /> : <WalletIcon />}\n Get Wallet Balances\n </button>\n </div>\n\n <div className=\"border border-border bg-background p-6 space-y-4\">\n <div>\n <h3 className=\"font-semibold\">Statements</h3>\n <p className=\"text-xs text-muted-foreground\">Generate financial statements for your wallets</p>\n </div>\n\n <div className=\"p-4 bg-muted/50 text-xs text-muted-foreground\">\n Statement generation requires callback URL configuration. Use the SDK directly:\n <pre className=\"mt-2 p-2 bg-background overflow-x-auto\">\n{`await sdk.finances.generateStatement({\n wallet: { country: 'CMR', currency: 'XAF' },\n callbackUrl: 'https://your-site.com/callback',\n startDate: '2025-01-01T00:00:00Z',\n endDate: '2025-01-31T23:59:59Z',\n});`}\n </pre>\n </div>\n </div>\n </div>\n )}\n\n {/* Webhooks Tab */}\n {activeTab === 'webhooks' && (\n <div className=\"space-y-4\">\n {/* Webhook Secret Configuration */}\n <div className=\"border border-border bg-background p-6 space-y-4\">\n <div>\n <h3 className=\"font-semibold\">Webhook Secret</h3>\n <p className=\"text-xs text-muted-foreground\">Configure the secret used for signing webhooks</p>\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Secret Key</label>\n <input\n type=\"text\"\n placeholder=\"whsec_...\"\n value={webhookSecret}\n onChange={(e) => setWebhookSecret(e.target.value)}\n className=\"w-full h-8 px-2.5 text-xs font-mono border border-input bg-transparent rounded-none outline-none focus:border-ring\"\n />\n </div>\n </div>\n\n {/* Webhook Simulator */}\n <div className=\"border border-border bg-background p-6 space-y-4\">\n <div>\n <h3 className=\"font-semibold\">Webhook Simulator</h3>\n <p className=\"text-xs text-muted-foreground\">Generate mock webhook events for testing</p>\n </div>\n\n <div className=\"grid sm:grid-cols-2 gap-4\">\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Event Type</label>\n <select\n value={webhookEventType}\n onChange={(e) => setWebhookEventType(e.target.value as WebhookEventType)}\n className=\"w-full h-8 px-2.5 text-xs border border-input bg-transparent rounded-none outline-none focus:border-ring\"\n >\n {WEBHOOK_EVENT_TYPES.map((type) => (\n <option key={type} value={type}>{type}</option>\n ))}\n </select>\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Amount</label>\n <input\n type=\"number\"\n placeholder=\"5000\"\n value={webhookAmount}\n onChange={(e) => setWebhookAmount(e.target.value)}\n className=\"w-full h-8 px-2.5 text-xs border border-input bg-transparent rounded-none outline-none focus:border-ring\"\n />\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Phone Number</label>\n <input\n placeholder=\"237670000000\"\n value={webhookPhone}\n onChange={(e) => setWebhookPhone(e.target.value)}\n className=\"w-full h-8 px-2.5 text-xs border border-input bg-transparent rounded-none outline-none focus:border-ring\"\n />\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Provider</label>\n <select\n value={webhookProvider}\n onChange={(e) => setWebhookProvider(e.target.value as Correspondent)}\n className=\"w-full h-8 px-2.5 text-xs border border-input bg-transparent rounded-none outline-none focus:border-ring\"\n >\n {PROVIDER_OPTIONS.map((p) => (\n <option key={p.value} value={p.value}>{p.label} ({p.country})</option>\n ))}\n </select>\n </div>\n </div>\n\n <button\n onClick={async () => {\n const event = generateWebhook(webhookEventType, {\n amount: webhookAmount,\n phoneNumber: webhookPhone,\n correspondent: webhookProvider,\n });\n const payload = JSON.stringify(event, null, 2);\n const signature = await computeHmacSha256(JSON.stringify(event), webhookSecret);\n setGeneratedPayload(payload);\n setGeneratedSignature(signature);\n\n // Add to event log\n const newEvent: WebhookTestEvent = {\n id: generateUUID(),\n eventType: webhookEventType,\n payload: event,\n signature,\n receivedAt: new Date().toLocaleTimeString(),\n isVerified: null,\n };\n setWebhookEvents((prev) => [newEvent, ...prev].slice(0, 50));\n addResult('Generate Webhook', 'success', { eventType: webhookEventType, eventId: event.eventId });\n }}\n className=\"w-full h-8 px-3 text-xs font-medium bg-primary text-primary-foreground hover:bg-primary/90 transition-colors flex items-center justify-center gap-2\"\n >\n <PlayIcon />\n Generate Event\n </button>\n\n {generatedPayload && (\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between\">\n <label className=\"text-xs font-medium\">Generated Payload</label>\n <button\n onClick={() => copyToClipboard(generatedPayload)}\n className=\"text-xs text-muted-foreground hover:text-foreground\"\n >\n Copy\n </button>\n </div>\n <pre className=\"text-xs bg-muted p-3 overflow-x-auto max-h-48\">\n {generatedPayload}\n </pre>\n <div className=\"flex items-center gap-2\">\n <label className=\"text-xs font-medium\">Signature:</label>\n <code className=\"text-xs bg-muted px-2 py-1 font-mono flex-1 overflow-x-auto\">\n {generatedSignature}\n </code>\n <button\n onClick={() => copyToClipboard(generatedSignature)}\n className=\"w-8 h-8 border border-border bg-background hover:bg-muted transition-colors flex items-center justify-center\"\n >\n <CopyIcon />\n </button>\n </div>\n </div>\n )}\n </div>\n\n {/* Signature Verifier */}\n <div className=\"border border-border bg-background p-6 space-y-4\">\n <div>\n <h3 className=\"font-semibold\">Signature Verifier</h3>\n <p className=\"text-xs text-muted-foreground\">Test webhook signature verification</p>\n </div>\n\n <div className=\"space-y-4\">\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Payload (JSON)</label>\n <textarea\n placeholder='{\"eventId\": \"...\", \"eventType\": \"deposit.completed\", ...}'\n value={verifyPayload}\n onChange={(e) => setVerifyPayload(e.target.value)}\n rows={4}\n className=\"w-full px-2.5 py-2 text-xs font-mono border border-input bg-transparent rounded-none outline-none focus:border-ring resize-none\"\n />\n </div>\n <div className=\"grid sm:grid-cols-2 gap-4\">\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Signature</label>\n <input\n placeholder=\"HMAC-SHA256 signature\"\n value={verifySignature}\n onChange={(e) => setVerifySignature(e.target.value)}\n className=\"w-full h-8 px-2.5 text-xs font-mono border border-input bg-transparent rounded-none outline-none focus:border-ring\"\n />\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Secret</label>\n <input\n type=\"password\"\n placeholder=\"whsec_...\"\n value={verifySecret}\n onChange={(e) => setVerifySecret(e.target.value)}\n className=\"w-full h-8 px-2.5 text-xs font-mono border border-input bg-transparent rounded-none outline-none focus:border-ring\"\n />\n </div>\n </div>\n\n <button\n onClick={async () => {\n try {\n const parsedPayload = JSON.parse(verifyPayload);\n const computedSignature = await computeHmacSha256(JSON.stringify(parsedPayload), verifySecret);\n const isValid = computedSignature === verifySignature;\n setVerifyResult(isValid);\n addResult('Verify Signature', isValid ? 'success' : 'error', {\n isValid,\n expected: computedSignature,\n received: verifySignature,\n });\n } catch {\n setVerifyResult(false);\n addResult('Verify Signature', 'error', undefined, 'Invalid JSON payload');\n }\n }}\n className=\"w-full h-8 px-3 text-xs font-medium bg-primary text-primary-foreground hover:bg-primary/90 transition-colors flex items-center justify-center gap-2\"\n >\n <ShieldIcon />\n Verify Signature\n </button>\n\n {verifyResult !== null && (\n <div className={`p-3 text-xs flex items-center gap-2 ${\n verifyResult ? 'bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200' : 'bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-200'\n }`}>\n {verifyResult ? <CheckIcon className=\"text-green-600\" /> : <XIcon className=\"text-red-600\" />}\n {verifyResult ? 'Signature is valid' : 'Signature is invalid'}\n </div>\n )}\n </div>\n </div>\n\n {/* Event Parser */}\n <div className=\"border border-border bg-background p-6 space-y-4\">\n <div>\n <h3 className=\"font-semibold\">Event Parser</h3>\n <p className=\"text-xs text-muted-foreground\">Parse and analyze raw webhook JSON</p>\n </div>\n\n <div className=\"space-y-4\">\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Raw JSON</label>\n <textarea\n placeholder='Paste webhook JSON here...'\n value={parseInput}\n onChange={(e) => setParseInput(e.target.value)}\n rows={4}\n className=\"w-full px-2.5 py-2 text-xs font-mono border border-input bg-transparent rounded-none outline-none focus:border-ring resize-none\"\n />\n </div>\n\n <button\n onClick={() => {\n try {\n const parsed = JSON.parse(parseInput) as Record<string, unknown>;\n setParsedEvent(parsed);\n setParseError('');\n addResult('Parse Event', 'success', { eventType: parsed.eventType, eventId: parsed.eventId });\n } catch (e) {\n setParsedEvent(null);\n setParseError(e instanceof Error ? e.message : 'Invalid JSON');\n addResult('Parse Event', 'error', undefined, 'Invalid JSON');\n }\n }}\n className=\"w-full h-8 px-3 text-xs font-medium bg-primary text-primary-foreground hover:bg-primary/90 transition-colors flex items-center justify-center gap-2\"\n >\n <CodeIcon />\n Parse Event\n </button>\n\n {parseError && (\n <div className=\"p-3 text-xs bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-200\">\n {parseError}\n </div>\n )}\n\n {parsedEvent && (\n <div className=\"space-y-3\">\n <div className=\"grid grid-cols-2 gap-2 text-xs\">\n <div className=\"p-2 bg-muted\">\n <span className=\"text-muted-foreground\">Event ID:</span>\n <p className=\"font-mono truncate\">{String(parsedEvent.eventId ?? 'N/A')}</p>\n </div>\n <div className=\"p-2 bg-muted\">\n <span className=\"text-muted-foreground\">Event Type:</span>\n <p className=\"font-medium\">{String(parsedEvent.eventType ?? 'N/A')}</p>\n </div>\n <div className=\"p-2 bg-muted\">\n <span className=\"text-muted-foreground\">Timestamp:</span>\n <p className=\"font-mono truncate\">{String(parsedEvent.timestamp ?? 'N/A')}</p>\n </div>\n <div className=\"p-2 bg-muted\">\n <span className=\"text-muted-foreground\">Status:</span>\n <p className=\"font-medium\">{String((parsedEvent.data as Record<string, unknown>)?.status ?? 'N/A')}</p>\n </div>\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Full Data</label>\n <pre className=\"text-xs bg-muted p-3 overflow-x-auto max-h-48\">\n {JSON.stringify(parsedEvent, null, 2)}\n </pre>\n </div>\n </div>\n )}\n </div>\n </div>\n\n {/* Event Log */}\n <div className=\"border border-border bg-background p-6 space-y-4\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h3 className=\"font-semibold\">Event Log</h3>\n <p className=\"text-xs text-muted-foreground\">History of generated webhook events</p>\n </div>\n <div className=\"flex items-center gap-2\">\n <select\n value={eventLogFilter}\n onChange={(e) => setEventLogFilter(e.target.value as 'all' | 'deposit' | 'payout' | 'refund')}\n className=\"h-8 px-2 text-xs border border-input bg-transparent rounded-none outline-none focus:border-ring\"\n >\n <option value=\"all\">All</option>\n <option value=\"deposit\">Deposits</option>\n <option value=\"payout\">Payouts</option>\n <option value=\"refund\">Refunds</option>\n </select>\n {webhookEvents.length > 0 && (\n <button\n onClick={() => setWebhookEvents([])}\n className=\"text-xs text-muted-foreground hover:text-foreground\"\n >\n Clear\n </button>\n )}\n </div>\n </div>\n\n <div className=\"divide-y divide-border max-h-64 overflow-y-auto\">\n {webhookEvents\n .filter((event) => eventLogFilter === 'all' || event.eventType.startsWith(eventLogFilter))\n .length === 0 ? (\n <div className=\"p-4 text-center text-muted-foreground text-xs\">\n No events yet. Generate a webhook event to see it here.\n </div>\n ) : (\n webhookEvents\n .filter((event) => eventLogFilter === 'all' || event.eventType.startsWith(eventLogFilter))\n .map((event) => (\n <div key={event.id} className=\"py-3 space-y-1\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <span className={`px-1.5 py-0.5 text-xs font-medium ${\n event.eventType.includes('completed') ? 'bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200' :\n event.eventType.includes('failed') ? 'bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-200' :\n 'bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-200'\n }`}>\n {event.eventType}\n </span>\n </div>\n <span className=\"text-xs text-muted-foreground\">{event.receivedAt}</span>\n </div>\n <div className=\"text-xs text-muted-foreground font-mono truncate\">\n sig: {event.signature.slice(0, 32)}...\n </div>\n </div>\n ))\n )}\n </div>\n </div>\n </div>\n )}\n </div>\n\n {/* Results Panel */}\n <div className=\"space-y-4\">\n <div className=\"flex items-center justify-between\">\n <h3 className=\"font-semibold\">Results</h3>\n {results.length > 0 && (\n <button\n onClick={() => setResults([])}\n className=\"text-xs text-muted-foreground hover:text-foreground\"\n >\n Clear\n </button>\n )}\n </div>\n\n <div className=\"border border-border bg-background divide-y divide-border max-h-[600px] overflow-y-auto\">\n {results.length === 0 ? (\n <div className=\"p-6 text-center text-muted-foreground text-xs\">\n No results yet. Execute an operation to see results here.\n </div>\n ) : (\n results.map((result) => (\n <div key={result.id} className=\"p-4 space-y-2\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n {result.status === 'success' ? (\n <CheckIcon className=\"text-green-600\" />\n ) : (\n <XIcon className=\"text-red-600\" />\n )}\n <span className=\"font-medium text-sm\">{result.operation}</span>\n </div>\n <span className=\"text-xs text-muted-foreground\">{result.timestamp}</span>\n </div>\n\n {result.error ? (\n <p className=\"text-xs text-red-600\">{result.error}</p>\n ) : (\n <pre className=\"text-xs bg-muted p-2 overflow-x-auto max-h-48\">\n {JSON.stringify(result.response, null, 2)}\n </pre>\n )}\n </div>\n ))\n )}\n </div>\n </div>\n </div>\n </div>\n );\n}\n\n// Simple SVG Icons (no external dependencies)\nconst SettingsIcon = () => (\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z\" />\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 12a3 3 0 11-6 0 3 3 0 016 0z\" />\n </svg>\n);\n\nconst PlayIcon = () => (\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M14.752 11.168l-3.197-2.132A1 1 0 0010 9.87v4.263a1 1 0 001.555.832l3.197-2.132a1 1 0 000-1.664z\" />\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n);\n\nconst WalletIcon = () => (\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M3 10h18M7 15h1m4 0h1m-7 4h12a3 3 0 003-3V8a3 3 0 00-3-3H6a3 3 0 00-3 3v8a3 3 0 003 3z\" />\n </svg>\n);\n\nconst PhoneIcon = () => (\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 18h.01M8 21h8a2 2 0 002-2V5a2 2 0 00-2-2H8a2 2 0 00-2 2v14a2 2 0 002 2z\" />\n </svg>\n);\n\nconst RefreshIcon = () => (\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15\" />\n </svg>\n);\n\nconst LoaderIcon = () => (\n <svg className=\"w-4 h-4 animate-spin\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\" />\n </svg>\n);\n\nconst CopyIcon = () => (\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\" />\n </svg>\n);\n\nconst CheckIcon = ({ className = '' }: { className?: string }) => (\n <svg className={`w-4 h-4 ${className}`} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n);\n\nconst XIcon = ({ className = '' }: { className?: string }) => (\n <svg className={`w-4 h-4 ${className}`} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n);\n\nconst BeakerIcon = () => (\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19.428 15.428a2 2 0 00-1.022-.547l-2.387-.477a6 6 0 00-3.86.517l-.318.158a6 6 0 01-3.86.517L6.05 15.21a2 2 0 00-1.806.547M8 4h8l-1 1v5.172a2 2 0 00.586 1.414l5 5c1.26 1.26.367 3.414-1.415 3.414H4.828c-1.782 0-2.674-2.154-1.414-3.414l5-5A2 2 0 009 10.172V5L8 4z\" />\n </svg>\n);\n\nconst ToolkitIcon = () => (\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z\" />\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 12a3 3 0 11-6 0 3 3 0 016 0z\" />\n </svg>\n);\n\nconst ChartIcon = () => (\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z\" />\n </svg>\n);\n\nconst SearchIcon = () => (\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\" />\n </svg>\n);\n\nconst SignalIcon = () => (\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M8.111 16.404a5.5 5.5 0 017.778 0M12 20h.01m-7.08-7.071c3.904-3.905 10.236-3.905 14.141 0M1.394 9.393c5.857-5.857 15.355-5.857 21.213 0\" />\n </svg>\n);\n\nconst KeyIcon = () => (\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 7a2 2 0 012 2m4 0a6 6 0 01-7.743 5.743L11 17H9v2H7v2H4a1 1 0 01-1-1v-2.586a1 1 0 01.293-.707l5.964-5.964A6 6 0 1121 9z\" />\n </svg>\n);\n\nconst WebhookIcon = () => (\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M13 10V3L4 14h7v7l9-11h-7z\" />\n </svg>\n);\n\nconst ShieldIcon = () => (\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z\" />\n </svg>\n);\n\nconst CodeIcon = () => (\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4\" />\n </svg>\n);\n\nexport default SpaarkPaySdkTestDashboard;\n"]}
1
+ {"version":3,"sources":["../src/mocks/webhook-generators.ts","../src/components/SpaarkPaySdkFinanceDashboard.tsx","../src/react.tsx"],"names":["generateUUID","c","r","generateDepositWebhook","eventType","options","transactionId","amount","currency","correspondent","phoneNumber","status","failureCode","failureMessage","now","data","generatePayoutWebhook","generateRefundWebhook","depositId","generateWebhook","WEBHOOK_EVENT_TYPES","translations","STATUS_COLORS","StatusIcon","jsx","CheckCircle2","XCircle","Ban","Clock","Loader2","AlertCircle","formatCurrency","formatDate","dateString","locale","date","ITEMS_PER_PAGE","SpaarkPaySdkFinanceDashboard","transactions","title","subtitle","className","showExpertMode","onExpertModeClick","onTransactionClick","onRefresh","onAddTransaction","onSettings","isLoading","t","searchQuery","setSearchQuery","useState","typeFilter","setTypeFilter","statusFilter","setStatusFilter","currentPage","setCurrentPage","copiedId","setCopiedId","stats","useMemo","deposits","tx","payouts","refunds","failed","pending","completed","cancelled","totalVolume","sum","depositsTotal","payoutsTotal","refundsTotal","filteredTransactions","matchesSearch","matchesType","matchesStatus","paginatedTransactions","start","totalPages","copyToClipboard","useCallback","text","mainCurrency","jsxs","RefreshCw","Settings","TrendingUp","ArrowDownCircle","ArrowUpCircle","Hourglass","Search","e","ChevronDown","CircleDot","Plus","Fragment","Check","Copy","p","ChevronLeft","ChevronRight","createMockDepositResponse","txId","createMockPayoutResponse","createMockStatusResponse","createMockAvailabilityResponse","createMockPredictResponse","phone","createMockActiveConfigResponse","createMockWalletBalancesResponse","createMockPublicKeysResponse","simulateDelay","ms","resolve","computeHmacSha256","message","secret","encoder","key","signature","b","PROVIDER_OPTIONS","CURRENCY_OPTIONS","SpaarkPaySdkTestDashboard","initialApiKey","initialEnvironment","initialDemoMode","apiBasePath","onDepositComplete","onPayoutComplete","onError","apiKey","setApiKey","environment","setEnvironment","isConfigured","setIsConfigured","isDemoMode","setIsDemoMode","activeTab","setActiveTab","setPhoneNumber","setAmount","setCurrency","provider","setProvider","description","setDescription","setTransactionId","results","setResults","currentStatus","setCurrentStatus","webhookSecret","setWebhookSecret","webhookEvents","setWebhookEvents","webhookEventType","setWebhookEventType","webhookAmount","setWebhookAmount","webhookPhone","setWebhookPhone","webhookProvider","setWebhookProvider","generatedPayload","setGeneratedPayload","generatedSignature","setGeneratedSignature","verifyPayload","setVerifyPayload","verifySignature","setVerifySignature","verifySecret","setVerifySecret","verifyResult","setVerifyResult","parseInput","setParseInput","parsedEvent","setParsedEvent","parseError","setParseError","eventLogFilter","setEventLogFilter","addResult","operation","response","error","result","prev","handleConfigure","handleDemoMode","handleDeposit","res","err","handlePayout","handleCheckStatus","handleGetAvailability","handlePredictProvider","handleGetActiveConfig","handleGetPublicKeys","handleGetWalletBalances","SettingsIcon","WalletIcon","PhoneIcon","RefreshIcon","ToolkitIcon","ChartIcon","WebhookIcon","LoaderIcon","PlayIcon","CopyIcon","SearchIcon","SignalIcon","KeyIcon","type","event","payload","newEvent","parsedPayload","computedSignature","isValid","ShieldIcon","CheckIcon","XIcon","parsed","CodeIcon","BeakerIcon","react_default"],"mappings":"6KAmBA,IAAMA,CAAAA,CAAe,IACZ,sCAAA,CAAuC,QAAQ,OAAA,CAAUC,CAAAA,EAAM,CACpE,IAAMC,EAAK,IAAA,CAAK,MAAA,EAAO,CAAI,EAAA,CAAM,EAEjC,OAAA,CADUD,CAAAA,GAAM,GAAA,CAAMC,CAAAA,CAAKA,EAAI,CAAA,CAAO,CAAA,EAC7B,QAAA,CAAS,EAAE,CACtB,CAAC,CAAA,CAGI,SAASC,EAAAA,CACdC,EACAC,CAAAA,CAAmC,EAAC,CACM,CAC1C,GAAM,CACJ,aAAA,CAAAC,CAAAA,CAAgBN,CAAAA,GAChB,MAAA,CAAAO,CAAAA,CAAS,MAAA,CACT,QAAA,CAAAC,EAAW,KAAA,CACX,aAAA,CAAAC,CAAAA,CAAgB,cAAA,CAChB,YAAAC,CAAAA,CAAc,cAAA,CACd,MAAA,CAAAC,CAAAA,CAASP,IAAc,gBAAA,CAAmB,QAAA,CAAW,WAAA,CACrD,WAAA,CAAAQ,EAAc,oBAAA,CACd,cAAA,CAAAC,CAAAA,CAAiB,kCACnB,EAAIR,CAAAA,CAEES,CAAAA,CAAM,IAAI,IAAA,GAAO,WAAA,EAAY,CAE7BC,CAAAA,CAA4B,CAChC,SAAA,CAAWT,CAAAA,CACX,MAAA,CAAAK,CAAAA,CACA,OAAAJ,CAAAA,CACA,QAAA,CAAAC,CAAAA,CACA,aAAA,CAAAC,EACA,KAAA,CAAO,CACL,IAAA,CAAM,QAAA,CACN,QAAS,CACP,KAAA,CAAOC,CACT,CACF,EACA,iBAAA,CAAmBI,CAAAA,CACnB,OAAA,CAASA,CACX,EAEA,OAAIH,CAAAA,GAAW,WAAA,GACbI,CAAAA,CAAK,gBAAkBD,CAAAA,CAAAA,CAGrBH,CAAAA,GAAW,QAAA,GACbI,CAAAA,CAAK,cAAgB,CACnB,WAAA,CAAAH,CAAAA,CACA,cAAA,CAAAC,CACF,CAAA,CAAA,CAGK,CACL,OAAA,CAASb,CAAAA,GACT,SAAA,CAAAI,CAAAA,CACA,SAAA,CAAWU,CAAAA,CACX,KAAAC,CACF,CACF,CAEO,SAASC,GACdZ,CAAAA,CACAC,CAAAA,CAAmC,EAAC,CACK,CACzC,GAAM,CACJ,aAAA,CAAAC,CAAAA,CAAgBN,GAAa,CAC7B,MAAA,CAAAO,CAAAA,CAAS,MAAA,CACT,SAAAC,CAAAA,CAAW,KAAA,CACX,aAAA,CAAAC,CAAAA,CAAgB,eAChB,WAAA,CAAAC,CAAAA,CAAc,cAAA,CACd,MAAA,CAAAC,CAAAA,CAASP,CAAAA,GAAc,eAAA,CAAkB,QAAA,CAAW,YACpD,WAAA,CAAAQ,CAAAA,CAAc,qBAAA,CACd,cAAA,CAAAC,EAAiB,qCACnB,CAAA,CAAIR,CAAAA,CAEES,CAAAA,CAAM,IAAI,IAAA,EAAK,CAAE,WAAA,EAAY,CAE7BC,EAA2B,CAC/B,QAAA,CAAUT,CAAAA,CACV,MAAA,CAAAK,EACA,MAAA,CAAAJ,CAAAA,CACA,QAAA,CAAAC,CAAAA,CACA,cAAAC,CAAAA,CACA,SAAA,CAAW,CACT,IAAA,CAAM,SACN,OAAA,CAAS,CACP,KAAA,CAAOC,CACT,CACF,CAAA,CACA,iBAAA,CAAmBI,CAAAA,CACnB,OAAA,CAASA,CACX,CAAA,CAEA,OAAIH,CAAAA,GAAW,WAAA,GACbI,EAAK,mBAAA,CAAsBD,CAAAA,CAAAA,CAGzBH,CAAAA,GAAW,QAAA,GACbI,EAAK,aAAA,CAAgB,CACnB,WAAA,CAAAH,CAAAA,CACA,eAAAC,CACF,CAAA,CAAA,CAGK,CACL,OAAA,CAASb,GAAa,CACtB,SAAA,CAAAI,CAAAA,CACA,SAAA,CAAWU,EACX,IAAA,CAAAC,CACF,CACF,CAsBO,SAASE,EAAAA,CACdb,CAAAA,CACAC,CAAAA,CAA4D,GACnB,CACzC,GAAM,CACJ,aAAA,CAAAC,EAAgBN,CAAAA,EAAa,CAC7B,SAAA,CAAAkB,CAAAA,CAAYlB,GAAa,CACzB,MAAA,CAAAO,CAAAA,CAAS,MAAA,CACT,SAAAC,CAAAA,CAAW,KAAA,CACX,aAAA,CAAAC,CAAAA,CAAgB,eAChB,WAAA,CAAAC,CAAAA,CAAc,cAAA,CACd,MAAA,CAAAC,EAASP,CAAAA,GAAc,eAAA,CAAkB,QAAA,CAAW,WAAA,CACpD,YAAAQ,CAAAA,CAAc,uBAAA,CACd,cAAA,CAAAC,CAAAA,CAAiB,oCACnB,CAAA,CAAIR,CAAAA,CAEES,CAAAA,CAAM,IAAI,MAAK,CAAE,WAAA,EAAY,CAE7BC,CAAAA,CAA2B,CAC/B,QAAA,CAAUT,CAAAA,CACV,SAAA,CAAAY,CAAAA,CACA,OAAAP,CAAAA,CACA,MAAA,CAAAJ,CAAAA,CACA,QAAA,CAAAC,EACA,aAAA,CAAAC,CAAAA,CACA,SAAA,CAAW,CACT,KAAM,QAAA,CACN,OAAA,CAAS,CACP,KAAA,CAAOC,CACT,CACF,CAAA,CACA,OAAA,CAASI,CACX,EAEA,OAAIH,CAAAA,GAAW,QAAA,GACbI,CAAAA,CAAK,cAAgB,CACnB,WAAA,CAAAH,CAAAA,CACA,cAAA,CAAAC,CACF,CAAA,CAAA,CAGK,CACL,OAAA,CAASb,GAAa,CACtB,SAAA,CAAAI,CAAAA,CACA,SAAA,CAAWU,EACX,IAAA,CAAAC,CACF,CACF,CAOO,SAASI,EAAAA,CACdf,CAAAA,CACAC,CAAAA,CAA4D,GAC1C,CAClB,OAAID,CAAAA,CAAU,UAAA,CAAW,UAAU,CAAA,CAC1BD,EAAAA,CACLC,CAAAA,CACAC,CACF,EAGED,CAAAA,CAAU,UAAA,CAAW,SAAS,CAAA,CACzBY,GACLZ,CAAAA,CACAC,CACF,CAAA,CAGKY,EAAAA,CACLb,EACAC,CACF,CACF,CAEO,IAAMe,GAA0C,CACrD,kBAAA,CACA,mBAAA,CACA,gBAAA,CACA,kBACA,kBAAA,CACA,eAAA,CACA,kBAAA,CACA,eACF,EC1KA,IAAMC,GAAe,CACnB,EAAA,CAAI,CACF,KAAA,CAAO,4BACP,QAAA,CAAU,oCAAA,CACV,WAAA,CAAa,cAAA,CACb,SAAU,cAAA,CACV,OAAA,CAAS,UAAA,CACT,MAAA,CAAQ,YACR,OAAA,CAAS,gBAAA,CACT,OAAA,CAAS,YAAA,CACT,UAAW,kBAAA,CACX,SAAA,CAAW,aAAA,CACX,MAAA,CAAQ,0CACR,QAAA,CAAU,gBAAA,CACV,WAAA,CAAa,kBAAA,CACb,QAAS,aAAA,CACT,MAAA,CAAQ,SAAA,CACR,MAAA,CAAQ,gBACR,UAAA,CAAY,aAAA,CACZ,OAAA,CAAS,YAAA,CACT,SAAU,eAAA,CACV,cAAA,CAAgB,oBAAA,CAChB,kBAAA,CAAoB,8DAAA,CACpB,cAAA,CAAgB,sBAAA,CAChB,EAAA,CAAI,KACJ,IAAA,CAAM,MAAA,CACN,MAAA,CAAQ,SAAA,CACR,OAAQ,QAAA,CACR,QAAA,CAAU,cAAA,CACV,KAAA,CAAO,kBACP,IAAA,CAAM,MAAA,CACN,IAAA,CAAM,MAAA,CACN,GAAI,KAAA,CACJ,YAAA,CAAc,cAAA,CACd,MAAA,CAAQ,YACV,CAAA,CACA,EAAA,CAAI,CACF,KAAA,CAAO,oBACP,QAAA,CAAU,+BAAA,CACV,WAAA,CAAa,cAAA,CACb,SAAU,UAAA,CACV,OAAA,CAAS,SAAA,CACT,MAAA,CAAQ,SACR,OAAA,CAAS,SAAA,CACT,OAAA,CAAS,SAAA,CACT,UAAW,WAAA,CACX,SAAA,CAAW,WAAA,CACX,MAAA,CAAQ,2BACR,QAAA,CAAU,WAAA,CACV,WAAA,CAAa,cAAA,CACb,QAAS,SAAA,CACT,MAAA,CAAQ,QAAA,CACR,MAAA,CAAQ,SACR,UAAA,CAAY,aAAA,CACZ,OAAA,CAAS,SAAA,CACT,SAAU,UAAA,CACV,cAAA,CAAgB,iBAAA,CAChB,kBAAA,CAAoB,2CACpB,cAAA,CAAgB,iBAAA,CAChB,EAAA,CAAI,IAAA,CACJ,KAAM,MAAA,CACN,MAAA,CAAQ,QAAA,CACR,MAAA,CAAQ,SACR,QAAA,CAAU,UAAA,CACV,KAAA,CAAO,OAAA,CACP,KAAM,MAAA,CACN,IAAA,CAAM,MAAA,CACN,EAAA,CAAI,KACJ,YAAA,CAAc,cAAA,CACd,MAAA,CAAQ,SACV,CACF,CAAA,CAEMC,EAAAA,CAAmD,CACvD,SAAA,CAAW,oEACX,QAAA,CAAU,+DAAA,CACV,OAAA,CAAS,uEAAA,CACT,SAAU,uEAAA,CACV,UAAA,CAAY,+DAAA,CACZ,MAAA,CAAQ,4DACR,SAAA,CAAW,+DAAA,CACX,QAAA,CAAU,2DACZ,EAEMC,EAAAA,CAAa,CAAC,CAAE,MAAA,CAAAZ,CAAO,CAAA,GAAqC,CAChE,OAAQA,CAAAA,EACN,KAAK,WAAA,CACH,OAAOa,cAAAA,CAACC,yBAAA,CAAa,SAAA,CAAU,aAAA,CAAc,CAAA,CAC/C,KAAK,QAAA,CACL,KAAK,UAAA,CACH,OAAOD,eAACE,mBAAAA,CAAA,CAAQ,SAAA,CAAU,aAAA,CAAc,EAC1C,KAAK,WAAA,CACH,OAAOF,cAAAA,CAACG,gBAAA,CAAI,SAAA,CAAU,aAAA,CAAc,CAAA,CACtC,KAAK,SAAA,CACL,KAAK,UAAA,CACH,OAAOH,cAAAA,CAACI,iBAAAA,CAAA,CAAM,SAAA,CAAU,cAAc,CAAA,CACxC,KAAK,YAAA,CACL,KAAK,WACH,OAAOJ,cAAAA,CAACK,mBAAAA,CAAA,CAAQ,UAAU,0BAAA,CAA2B,CAAA,CACvD,QACE,OAAOL,eAACM,uBAAAA,CAAA,CAAY,SAAA,CAAU,aAAA,CAAc,CAChD,CACF,CAAA,CAEMC,CAAAA,CAAiB,CAACxB,EAAgBC,CAAAA,GAC/B,IAAI,IAAA,CAAK,YAAA,CAAa,QAAS,CACpC,KAAA,CAAO,SAAA,CACP,qBAAA,CAAuB,EACvB,qBAAA,CAAuB,CACzB,CAAC,CAAA,CAAE,OAAOD,CAAM,CAAA,CAAI,GAAA,CAAMC,CAAAA,CAGtBwB,GAAa,CAACC,CAAAA,CAAoBC,CAAAA,GAAwB,CAC9D,IAAMC,CAAAA,CAAO,IAAI,IAAA,CAAKF,CAAU,EAChC,OAAO,IAAI,IAAA,CAAK,cAAA,CAAeC,IAAW,IAAA,CAAO,OAAA,CAAU,OAAA,CAAS,CAClE,IAAK,SAAA,CACL,KAAA,CAAO,OAAA,CACP,IAAA,CAAM,UACN,IAAA,CAAM,SAAA,CACN,MAAA,CAAQ,SACV,CAAC,CAAA,CAAE,MAAA,CAAOC,CAAI,CAChB,CAAA,CAEMC,EAAAA,CAAiB,EAAA,CAEhB,SAASC,GAA6B,CAC3C,YAAA,CAAAC,CAAAA,CACA,KAAA,CAAAC,EACA,QAAA,CAAAC,CAAAA,CACA,MAAA,CAAAN,CAAAA,CAAS,KACT,SAAA,CAAAO,CAAAA,CAAY,EAAA,CACZ,cAAA,CAAAC,EAAiB,IAAA,CACjB,iBAAA,CAAAC,CAAAA,CACA,kBAAA,CAAAC,EACA,SAAA,CAAAC,CAAAA,CACA,gBAAA,CAAAC,CAAAA,CACA,WAAAC,CAAAA,CACA,SAAA,CAAAC,CAAAA,CAAY,KACd,EAAsC,CACpC,IAAMC,CAAAA,CAAI5B,EAAAA,CAAaa,CAAM,CAAA,CAEvB,CAACgB,CAAAA,CAAaC,CAAc,EAAIC,cAAAA,CAAS,EAAE,CAAA,CAC3C,CAACC,EAAYC,CAAa,CAAA,CAAIF,cAAAA,CAAkC,KAAK,EACrE,CAACG,CAAAA,CAAcC,CAAe,CAAA,CAAIJ,eAAoC,KAAK,CAAA,CAC3E,CAACK,CAAAA,CAAaC,CAAc,CAAA,CAAIN,cAAAA,CAAS,CAAC,CAAA,CAC1C,CAACO,CAAAA,CAAUC,CAAW,CAAA,CAAIR,cAAAA,CAAwB,IAAI,CAAA,CAEtDS,CAAAA,CAAQC,aAAAA,CAAQ,IAAM,CAC1B,IAAMC,CAAAA,CAAWzB,CAAAA,CAAa,OAAO0B,CAAAA,EAAMA,CAAAA,CAAG,IAAA,GAAS,SAAS,EAC1DC,CAAAA,CAAU3B,CAAAA,CAAa,MAAA,CAAO0B,CAAAA,EAAMA,EAAG,IAAA,GAAS,QAAQ,CAAA,CACxDE,CAAAA,CAAU5B,EAAa,MAAA,CAAO0B,CAAAA,EAAMA,CAAAA,CAAG,IAAA,GAAS,QAAQ,CAAA,CACxDG,CAAAA,CAAS7B,CAAAA,CAAa,MAAA,CAAO0B,GAAMA,CAAAA,CAAG,MAAA,GAAW,QAAA,EAAYA,CAAAA,CAAG,SAAW,UAAU,CAAA,CACrFI,CAAAA,CAAU9B,CAAAA,CAAa,OAAO0B,CAAAA,EAAM,CAAC,SAAA,CAAW,UAAA,CAAY,aAAc,UAAU,CAAA,CAAE,QAAA,CAASA,CAAAA,CAAG,MAAM,CAAC,CAAA,CACzGK,EAAAA,CAAY/B,CAAAA,CAAa,OAAO0B,CAAAA,EAAMA,CAAAA,CAAG,MAAA,GAAW,WAAW,EAC/DM,EAAAA,CAAYhC,CAAAA,CAAa,MAAA,CAAO0B,CAAAA,EAAMA,EAAG,MAAA,GAAW,WAAW,CAAA,CAE/DO,CAAAA,CAAcjC,EACjB,MAAA,CAAO0B,CAAAA,EAAMA,CAAAA,CAAG,MAAA,GAAW,WAAW,CAAA,CACtC,MAAA,CAAO,CAACQ,CAAAA,CAAKR,IAAOQ,CAAAA,CAAMR,CAAAA,CAAG,MAAA,CAAQ,CAAC,EAEnCS,EAAAA,CAAgBV,CAAAA,CACnB,MAAA,CAAOC,CAAAA,EAAMA,EAAG,MAAA,GAAW,WAAW,CAAA,CACtC,MAAA,CAAO,CAACQ,CAAAA,CAAKR,CAAAA,GAAOQ,CAAAA,CAAMR,CAAAA,CAAG,OAAQ,CAAC,CAAA,CAEnCU,CAAAA,CAAeT,CAAAA,CAClB,OAAOD,CAAAA,EAAMA,CAAAA,CAAG,MAAA,GAAW,WAAW,EACtC,MAAA,CAAO,CAACQ,CAAAA,CAAKR,CAAAA,GAAOQ,EAAMR,CAAAA,CAAG,MAAA,CAAQ,CAAC,CAAA,CAEnCW,GAAeT,CAAAA,CAClB,MAAA,CAAOF,CAAAA,EAAMA,CAAAA,CAAG,SAAW,WAAW,CAAA,CACtC,MAAA,CAAO,CAACQ,EAAKR,CAAAA,GAAOQ,CAAAA,CAAMR,CAAAA,CAAG,MAAA,CAAQ,CAAC,CAAA,CAEzC,OAAO,CACL,WAAA,CAAAO,EACA,aAAA,CAAeR,CAAAA,CAAS,MAAA,CACxB,aAAA,CAAAU,GACA,YAAA,CAAcR,CAAAA,CAAQ,MAAA,CACtB,YAAA,CAAAS,EACA,WAAA,CAAaP,CAAAA,CAAO,MAAA,CACpB,YAAA,CAAcD,CAAAA,CAAQ,MAAA,CACtB,YAAA,CAAAS,EAAAA,CACA,aAAcP,CAAAA,CAAQ,MAAA,CACtB,cAAA,CAAgBC,EAAAA,CAAU,OAC1B,cAAA,CAAgBC,EAAAA,CAAU,MAC5B,CACF,EAAG,CAAChC,CAAY,CAAC,CAAA,CAEXsC,EAAuBd,aAAAA,CAAQ,IAC5BxB,CAAAA,CAAa,MAAA,CAAO0B,GAAM,CAC/B,IAAMa,CAAAA,CAAgB3B,CAAAA,GAAgB,IACpCc,CAAAA,CAAG,EAAA,CAAG,WAAA,EAAY,CAAE,SAASd,CAAAA,CAAY,WAAA,EAAa,CAAA,EACtDc,EAAG,WAAA,CAAY,QAAA,CAASd,CAAW,CAAA,CAE/B4B,EAAczB,CAAAA,GAAe,KAAA,EAASW,CAAAA,CAAG,IAAA,GAASX,EAClD0B,CAAAA,CAAgBxB,CAAAA,GAAiB,KAAA,EAASS,CAAAA,CAAG,SAAWT,CAAAA,CAE9D,OAAOsB,CAAAA,EAAiBC,CAAAA,EAAeC,CACzC,CAAC,CAAA,CACA,CAACzC,CAAAA,CAAcY,EAAaG,CAAAA,CAAYE,CAAY,CAAC,CAAA,CAElDyB,GAAwBlB,aAAAA,CAAQ,IAAM,CAC1C,IAAMmB,GAASxB,CAAAA,CAAc,CAAA,EAAKrB,EAAAA,CAClC,OAAOwC,EAAqB,KAAA,CAAMK,CAAAA,CAAOA,CAAAA,CAAQ7C,EAAc,CACjE,CAAA,CAAG,CAACwC,CAAAA,CAAsBnB,CAAW,CAAC,CAAA,CAEhCyB,CAAAA,CAAa,IAAA,CAAK,IAAA,CAAKN,EAAqB,MAAA,CAASxC,EAAc,CAAA,CAEnE+C,EAAAA,CAAkBC,kBAAaC,CAAAA,EAAiB,CACpD,SAAA,CAAU,SAAA,CAAU,UAAUA,CAAI,CAAA,CAClCzB,CAAAA,CAAYyB,CAAI,EAChB,UAAA,CAAW,IAAMzB,CAAAA,CAAY,IAAI,EAAG,GAAI,EAC1C,CAAA,CAAG,EAAE,CAAA,CAEC0B,CAAAA,CAAehD,CAAAA,CAAa,CAAC,GAAG,QAAA,EAAY,KAAA,CAElD,OACEiD,eAAAA,CAAC,OAAI,SAAA,CAAW,CAAA,UAAA,EAAa9C,CAAS,CAAA,CAAA,CAEpC,UAAA8C,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,mDAAA,CACb,UAAAA,eAAAA,CAAC,KAAA,CAAA,CACC,QAAA,CAAA,CAAA/D,cAAAA,CAAC,MAAG,SAAA,CAAU,mCAAA,CAAqC,QAAA,CAAAe,CAAAA,EAASU,EAAE,KAAA,CAAM,CAAA,CACpEzB,cAAAA,CAAC,GAAA,CAAA,CAAE,UAAU,4BAAA,CAA8B,QAAA,CAAAgB,CAAAA,EAAYS,CAAAA,CAAE,QAAA,CAAS,CAAA,CAAA,CACpE,CAAA,CACAsC,eAAAA,CAAC,OAAI,SAAA,CAAU,yBAAA,CACZ,QAAA,CAAA,CAAA1C,CAAAA,EACC0C,gBAAC,QAAA,CAAA,CACC,OAAA,CAAS1C,CAAAA,CACT,QAAA,CAAUG,EACV,SAAA,CAAU,6LAAA,CAEV,QAAA,CAAA,CAAAxB,cAAAA,CAACgE,sBAAA,CAAU,SAAA,CAAW,CAAA,QAAA,EAAWxC,CAAAA,CAAY,eAAiB,EAAE,CAAA,CAAA,CAAI,CAAA,CACnEC,CAAAA,CAAE,SACL,CAAA,CAEDF,CAAAA,EACCvB,cAAAA,CAAC,QAAA,CAAA,CACC,QAASuB,CAAAA,CACT,SAAA,CAAU,6JAAA,CACV,KAAA,CAAOE,EAAE,QAAA,CAET,QAAA,CAAAzB,cAAAA,CAACiE,oBAAAA,CAAA,CAAS,SAAA,CAAU,SAAA,CAAU,CAAA,CAChC,CAAA,CAED/C,GAAkBC,CAAAA,EACjBnB,cAAAA,CAAC,QAAA,CAAA,CACC,OAAA,CAASmB,EACT,SAAA,CAAU,iJAAA,CAET,QAAA,CAAAM,CAAAA,CAAE,WACL,CAAA,CAAA,CAEJ,CAAA,CAAA,CACF,CAAA,CAGAsC,eAAAA,CAAC,OAAI,SAAA,CAAU,uCAAA,CAGb,QAAA,CAAA,CAAAA,eAAAA,CAAC,OAAI,SAAA,CAAU,uDAAA,CACb,QAAA,CAAA,CAAAA,eAAAA,CAAC,OAAI,SAAA,CAAU,yBAAA,CACb,QAAA,CAAA,CAAA/D,cAAAA,CAAC,OAAI,SAAA,CAAU,8BAAA,CACb,QAAA,CAAAA,cAAAA,CAACkE,uBAAA,CAAW,SAAA,CAAU,sBAAA,CAAuB,CAAA,CAC/C,EACAlE,cAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,2CAAA,CAA6C,SAAAyB,CAAAA,CAAE,WAAA,CAAY,CAAA,CAAA,CAC7E,CAAA,CACAzB,eAAC,GAAA,CAAA,CAAE,SAAA,CAAU,oBAAA,CAAsB,QAAA,CAAAO,EAAe8B,CAAAA,CAAM,WAAA,CAAayB,CAAY,CAAA,CAAE,EACnFC,eAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,+BAAA,CACV,UAAAjD,CAAAA,CAAa,MAAA,CAAO,GAAA,CAAEW,CAAAA,CAAE,cAC3B,CAAA,CAAA,CACF,CAAA,CAGAsC,eAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,uDAAA,CACb,QAAA,CAAA,CAAAA,eAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,yBAAA,CACb,QAAA,CAAA,CAAA/D,cAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,gCAAA,CACb,QAAA,CAAAA,cAAAA,CAACmE,2BAAAA,CAAA,CAAgB,SAAA,CAAU,4CAAA,CAA6C,CAAA,CAC1E,CAAA,CACAnE,eAAC,MAAA,CAAA,CAAK,SAAA,CAAU,2CAAA,CAA6C,QAAA,CAAAyB,EAAE,QAAA,CAAS,CAAA,CAAA,CAC1E,CAAA,CACAzB,cAAAA,CAAC,KAAE,SAAA,CAAU,oBAAA,CAAsB,QAAA,CAAAO,CAAAA,CAAe8B,CAAAA,CAAM,aAAA,CAAeyB,CAAY,CAAA,CAAE,EACrFC,eAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,+BAAA,CACV,UAAA1B,CAAAA,CAAM,aAAA,CAAc,GAAA,CAAEZ,CAAAA,CAAE,cAC3B,CAAA,CAAA,CACF,CAAA,CAGAsC,eAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,uDAAA,CACb,QAAA,CAAA,CAAAA,eAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,yBAAA,CACb,QAAA,CAAA,CAAA/D,cAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,+BAAA,CACb,QAAA,CAAAA,cAAAA,CAACoE,yBAAAA,CAAA,CAAc,SAAA,CAAU,0CAAA,CAA2C,CAAA,CACtE,CAAA,CACApE,eAAC,MAAA,CAAA,CAAK,SAAA,CAAU,2CAAA,CAA6C,QAAA,CAAAyB,EAAE,OAAA,CAAQ,CAAA,CAAA,CACzE,CAAA,CACAzB,cAAAA,CAAC,KAAE,SAAA,CAAU,oBAAA,CAAsB,QAAA,CAAAO,CAAAA,CAAe8B,EAAM,YAAA,CAAcyB,CAAY,CAAA,CAAE,CAAA,CACpFC,gBAAC,GAAA,CAAA,CAAE,SAAA,CAAU,+BAAA,CACV,QAAA,CAAA,CAAA1B,EAAM,YAAA,CAAa,GAAA,CAAEZ,CAAAA,CAAE,YAAA,CAAA,CAC1B,GACF,CAAA,CAGAsC,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,wDACb,QAAA,CAAA,CAAAA,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yBAAA,CACb,QAAA,CAAA,CAAA/D,cAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,iCAAA,CACb,QAAA,CAAAA,cAAAA,CAACgE,qBAAAA,CAAA,CAAU,SAAA,CAAU,8CAAA,CAA+C,CAAA,CACtE,CAAA,CACAhE,eAAC,MAAA,CAAA,CAAK,SAAA,CAAU,2CAAA,CAA6C,QAAA,CAAAyB,EAAE,OAAA,CAAQ,CAAA,CAAA,CACzE,CAAA,CACAzB,cAAAA,CAAC,KAAE,SAAA,CAAU,oBAAA,CAAsB,QAAA,CAAAO,CAAAA,CAAe8B,EAAM,YAAA,CAAcyB,CAAY,CAAA,CAAE,CAAA,CACpFC,gBAAC,GAAA,CAAA,CAAE,SAAA,CAAU,+BAAA,CACV,QAAA,CAAA,CAAA1B,EAAM,YAAA,CAAa,GAAA,CAAEZ,CAAAA,CAAE,YAAA,CAAA,CAC1B,GACF,CAAA,CAIAsC,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,wDACb,QAAA,CAAA,CAAAA,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,0BACb,QAAA,CAAA,CAAA/D,cAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kCACb,QAAA,CAAAA,cAAAA,CAACqE,qBAAAA,CAAA,CAAU,UAAU,8CAAA,CAA+C,CAAA,CACtE,CAAA,CACArE,cAAAA,CAAC,QAAK,SAAA,CAAU,2CAAA,CAA6C,QAAA,CAAAyB,CAAAA,CAAE,QAAQ,CAAA,CAAA,CACzE,CAAA,CACAzB,cAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,oBAAA,CAAsB,QAAA,CAAAqC,CAAAA,CAAM,aAAa,CAAA,CACtDrC,cAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,gCAAiC,QAAA,CAAAyB,CAAAA,CAAE,YAAA,CAAa,CAAA,CAAA,CAC/D,EAGAsC,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,uDAAA,CACb,UAAAA,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yBAAA,CACb,UAAA/D,cAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,gCAAA,CACb,SAAAA,cAAAA,CAACC,wBAAAA,CAAA,CAAa,SAAA,CAAU,6CAA6C,CAAA,CACvE,CAAA,CACAD,cAAAA,CAAC,MAAA,CAAA,CAAK,UAAU,2CAAA,CAA6C,QAAA,CAAAyB,CAAAA,CAAE,SAAA,CAAU,GAC3E,CAAA,CACAzB,cAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,qBAAsB,QAAA,CAAAqC,CAAAA,CAAM,cAAA,CAAe,CAAA,CACxDrC,eAAC,GAAA,CAAA,CAAE,SAAA,CAAU,+BAAA,CAAiC,QAAA,CAAAyB,EAAE,YAAA,CAAa,CAAA,CAAA,CAC/D,CAAA,CAGAsC,eAAAA,CAAC,OAAI,SAAA,CAAU,uDAAA,CACb,QAAA,CAAA,CAAAA,eAAAA,CAAC,OAAI,SAAA,CAAU,yBAAA,CACb,QAAA,CAAA,CAAA/D,cAAAA,CAAC,OAAI,SAAA,CAAU,8BAAA,CACb,QAAA,CAAAA,cAAAA,CAACE,oBAAA,CAAQ,SAAA,CAAU,wCAAA,CAAyC,CAAA,CAC9D,EACAF,cAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,2CAAA,CAA6C,SAAAyB,CAAAA,CAAE,MAAA,CAAO,CAAA,CAAA,CACxE,CAAA,CACAzB,eAAC,GAAA,CAAA,CAAE,SAAA,CAAU,oBAAA,CAAsB,QAAA,CAAAqC,EAAM,WAAA,CAAY,CAAA,CACrDrC,cAAAA,CAAC,GAAA,CAAA,CAAE,UAAU,+BAAA,CAAiC,QAAA,CAAAyB,CAAAA,CAAE,YAAA,CAAa,GAC/D,CAAA,CAGAsC,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,wDACb,QAAA,CAAA,CAAAA,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,0BACb,QAAA,CAAA,CAAA/D,cAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,gCACb,QAAA,CAAAA,cAAAA,CAACG,eAAAA,CAAA,CAAI,UAAU,0CAAA,CAA2C,CAAA,CAC5D,CAAA,CACAH,cAAAA,CAAC,QAAK,SAAA,CAAU,2CAAA,CAA6C,QAAA,CAAAyB,CAAAA,CAAE,UAAU,CAAA,CAAA,CAC3E,CAAA,CACAzB,cAAAA,CAAC,GAAA,CAAA,CAAE,UAAU,oBAAA,CAAsB,QAAA,CAAAqC,CAAAA,CAAM,cAAA,CAAe,EACxDrC,cAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,+BAAA,CAAiC,SAAAyB,CAAAA,CAAE,YAAA,CAAa,CAAA,CAAA,CAC/D,CAAA,CAAA,CACF,CAAA,CAGAsC,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,uBACb,QAAA,CAAA,CAAAA,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,gCACb,QAAA,CAAA,CAAA/D,cAAAA,CAACsE,kBAAAA,CAAA,CAAO,UAAU,4FAAA,CAA6F,CAAA,CAC/GtE,cAAAA,CAAC,OAAA,CAAA,CACC,KAAK,MAAA,CACL,WAAA,CAAayB,CAAAA,CAAE,MAAA,CACf,MAAOC,CAAAA,CACP,QAAA,CAAW6C,CAAAA,EAAM,CACf5C,EAAe4C,CAAAA,CAAE,MAAA,CAAO,KAAK,CAAA,CAC7BrC,EAAe,CAAC,EAClB,CAAA,CACA,SAAA,CAAU,0IACZ,CAAA,CAAA,CACF,CAAA,CAEA6B,eAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,UAAA,CACb,QAAA,CAAA,CAAAA,eAAAA,CAAC,QAAA,CAAA,CACC,MAAOlC,CAAAA,CACP,QAAA,CAAW0C,CAAAA,EAAM,CACfzC,EAAcyC,CAAAA,CAAE,MAAA,CAAO,KAAgC,CAAA,CACvDrC,EAAe,CAAC,EAClB,CAAA,CACA,SAAA,CAAU,kKAEV,QAAA,CAAA,CAAAlC,cAAAA,CAAC,QAAA,CAAA,CAAO,KAAA,CAAM,MAAO,QAAA,CAAAyB,CAAAA,CAAE,QAAA,CAAS,CAAA,CAChCzB,eAAC,QAAA,CAAA,CAAO,KAAA,CAAM,SAAA,CAAW,QAAA,CAAAyB,EAAE,OAAA,CAAQ,CAAA,CACnCzB,cAAAA,CAAC,QAAA,CAAA,CAAO,MAAM,QAAA,CAAU,QAAA,CAAAyB,CAAAA,CAAE,MAAA,CAAO,EACjCzB,cAAAA,CAAC,QAAA,CAAA,CAAO,KAAA,CAAM,QAAA,CAAU,SAAAyB,CAAAA,CAAE,MAAA,CAAO,CAAA,CAAA,CACnC,CAAA,CACAzB,eAACwE,uBAAAA,CAAA,CAAY,SAAA,CAAU,6FAAA,CAA8F,GACvH,CAAA,CAEAT,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,WACb,QAAA,CAAA,CAAAA,eAAAA,CAAC,QAAA,CAAA,CACC,KAAA,CAAOhC,EACP,QAAA,CAAWwC,CAAAA,EAAM,CACfvC,CAAAA,CAAgBuC,EAAE,MAAA,CAAO,KAAkC,CAAA,CAC3DrC,CAAAA,CAAe,CAAC,EAClB,CAAA,CACA,SAAA,CAAU,iKAAA,CAEV,UAAAlC,cAAAA,CAAC,QAAA,CAAA,CAAO,KAAA,CAAM,KAAA,CAAO,SAAAyB,CAAAA,CAAE,WAAA,CAAY,CAAA,CACnCzB,cAAAA,CAAC,UAAO,KAAA,CAAM,WAAA,CAAY,QAAA,CAAA,WAAA,CAAS,CAAA,CACnCA,eAAC,QAAA,CAAA,CAAO,KAAA,CAAM,SAAA,CAAU,QAAA,CAAA,SAAA,CAAO,EAC/BA,cAAAA,CAAC,QAAA,CAAA,CAAO,KAAA,CAAM,YAAA,CAAa,sBAAU,CAAA,CACrCA,cAAAA,CAAC,QAAA,CAAA,CAAO,KAAA,CAAM,UAAA,CAAW,QAAA,CAAA,UAAA,CAAQ,CAAA,CACjCA,cAAAA,CAAC,UAAO,KAAA,CAAM,QAAA,CAAS,QAAA,CAAA,QAAA,CAAM,CAAA,CAC7BA,eAAC,QAAA,CAAA,CAAO,KAAA,CAAM,WAAA,CAAY,QAAA,CAAA,WAAA,CAAS,EACnCA,cAAAA,CAAC,QAAA,CAAA,CAAO,KAAA,CAAM,UAAA,CAAW,oBAAQ,CAAA,CAAA,CACnC,CAAA,CACAA,cAAAA,CAACwE,uBAAAA,CAAA,CAAY,SAAA,CAAU,6FAAA,CAA8F,CAAA,CAAA,CACvH,CAAA,CAAA,CACF,EAGAxE,cAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yDAAA,CACZ,SAAAwB,CAAAA,CACCxB,cAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,mBACb,QAAA,CAAAA,cAAAA,CAACK,mBAAAA,CAAA,CAAQ,UAAU,oDAAA,CAAqD,CAAA,CAC1E,CAAA,CACE+C,CAAAA,CAAqB,SAAW,CAAA,CAClCW,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,mBACb,QAAA,CAAA,CAAA/D,cAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,gFACb,QAAA,CAAAA,cAAAA,CAACyE,qBAAAA,CAAA,CAAU,UAAU,+BAAA,CAAgC,CAAA,CACvD,CAAA,CACAzE,cAAAA,CAAC,KAAE,SAAA,CAAU,uBAAA,CAAyB,QAAA,CAAAyB,CAAAA,CAAE,eAAe,CAAA,CACvDzB,cAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,0CAA2C,QAAA,CAAAyB,CAAAA,CAAE,kBAAA,CAAmB,CAAA,CAC5EH,GACCyC,eAAAA,CAAC,QAAA,CAAA,CACC,OAAA,CAASzC,CAAAA,CACT,UAAU,kJAAA,CAEV,QAAA,CAAA,CAAAtB,cAAAA,CAAC0E,gBAAAA,CAAA,CAAK,SAAA,CAAU,SAAA,CAAU,CAAA,CACzBjD,CAAAA,CAAE,gBACL,CAAA,CAAA,CAEJ,CAAA,CAEAsC,eAAAA,CAAAY,mBAAAA,CAAA,CACE,QAAA,CAAA,CAAA3E,cAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kBACb,QAAA,CAAA+D,eAAAA,CAAC,OAAA,CAAA,CAAM,SAAA,CAAU,iBACf,QAAA,CAAA,CAAA/D,cAAAA,CAAC,OAAA,CAAA,CAAM,SAAA,CAAU,qCACf,QAAA,CAAA+D,eAAAA,CAAC,IAAA,CAAA,CACC,QAAA,CAAA,CAAA/D,eAAC,IAAA,CAAA,CAAG,SAAA,CAAU,iDAAA,CAAmD,QAAA,CAAAyB,EAAE,EAAA,CAAG,CAAA,CACtEzB,cAAAA,CAAC,IAAA,CAAA,CAAG,UAAU,iDAAA,CAAmD,QAAA,CAAAyB,CAAAA,CAAE,IAAA,CAAK,EACxEzB,cAAAA,CAAC,IAAA,CAAA,CAAG,SAAA,CAAU,iDAAA,CAAmD,SAAAyB,CAAAA,CAAE,MAAA,CAAO,CAAA,CAC1EzB,cAAAA,CAAC,MAAG,SAAA,CAAU,iDAAA,CAAmD,QAAA,CAAAyB,CAAAA,CAAE,OAAO,CAAA,CAC1EzB,cAAAA,CAAC,IAAA,CAAA,CAAG,SAAA,CAAU,iDAAA,CAAmD,QAAA,CAAAyB,CAAAA,CAAE,QAAA,CAAS,EAC5EzB,cAAAA,CAAC,IAAA,CAAA,CAAG,SAAA,CAAU,iDAAA,CAAmD,SAAAyB,CAAAA,CAAE,KAAA,CAAM,CAAA,CACzEzB,cAAAA,CAAC,MAAG,SAAA,CAAU,iDAAA,CAAmD,QAAA,CAAAyB,CAAAA,CAAE,KAAK,CAAA,CAAA,CAC1E,CAAA,CACF,CAAA,CACAzB,cAAAA,CAAC,SAAM,SAAA,CAAU,wBAAA,CACd,QAAA,CAAAwD,EAAAA,CAAsB,IAAKhB,CAAAA,EAC1BuB,eAAAA,CAAC,IAAA,CAAA,CAEC,SAAA,CAAW,uCAAuC3C,CAAAA,CAAqB,gBAAA,CAAmB,EAAE,CAAA,CAAA,CAC5F,QAAS,IAAMA,CAAAA,GAAqBoB,CAAE,CAAA,CAEtC,UAAAxC,cAAAA,CAAC,IAAA,CAAA,CAAG,SAAA,CAAU,KAAA,CACZ,SAAA+D,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yBAAA,CACb,UAAAA,eAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,0CAAA,CAA2C,MAAOvB,CAAAA,CAAG,EAAA,CAClE,QAAA,CAAA,CAAAA,CAAAA,CAAG,GAAG,KAAA,CAAM,CAAA,CAAG,CAAC,CAAA,CAAE,OACrB,CAAA,CACAxC,cAAAA,CAAC,QAAA,CAAA,CACC,OAAA,CAAUuE,GAAM,CACdA,CAAAA,CAAE,eAAA,EAAgB,CAClBZ,EAAAA,CAAgBnB,CAAAA,CAAG,EAAE,EACvB,EACA,SAAA,CAAU,8CAAA,CACV,KAAA,CAAM,SAAA,CAEL,SAAAL,CAAAA,GAAaK,CAAAA,CAAG,EAAA,CACfxC,cAAAA,CAAC4E,kBAAA,CAAM,SAAA,CAAU,4BAAA,CAA6B,CAAA,CAE9C5E,eAAC6E,gBAAAA,CAAA,CAAK,SAAA,CAAU,mCAAA,CAAoC,EAExD,CAAA,CAAA,CACF,CAAA,CACF,CAAA,CACA7E,cAAAA,CAAC,MAAG,SAAA,CAAU,KAAA,CACZ,QAAA,CAAA+D,eAAAA,CAAC,QAAK,SAAA,CAAW,CAAA,8EAAA,EACfvB,CAAAA,CAAG,IAAA,GAAS,UAAY,mEAAA,CACxBA,CAAAA,CAAG,IAAA,GAAS,QAAA,CAAW,gEACvB,uEACF,CAAA,CAAA,CACG,QAAA,CAAA,CAAAA,CAAAA,CAAG,OAAS,SAAA,EAAaxC,cAAAA,CAACmE,2BAAAA,CAAA,CAAgB,UAAU,SAAA,CAAU,CAAA,CAC9D3B,CAAAA,CAAG,IAAA,GAAS,UAAYxC,cAAAA,CAACoE,yBAAAA,CAAA,CAAc,SAAA,CAAU,UAAU,CAAA,CAC3D5B,CAAAA,CAAG,IAAA,GAAS,QAAA,EAAYxC,eAACgE,qBAAAA,CAAA,CAAU,SAAA,CAAU,SAAA,CAAU,EACvDvC,CAAAA,CAAEe,CAAAA,CAAG,IAAI,CAAA,CAAA,CACZ,CAAA,CACF,CAAA,CACAxC,cAAAA,CAAC,IAAA,CAAA,CAAG,UAAU,mBAAA,CACX,QAAA,CAAAO,CAAAA,CAAeiC,CAAAA,CAAG,OAAQA,CAAAA,CAAG,QAAQ,CAAA,CACxC,CAAA,CACAxC,eAAC,IAAA,CAAA,CAAG,SAAA,CAAU,KAAA,CACZ,QAAA,CAAA+D,gBAAC,MAAA,CAAA,CAAK,SAAA,CAAW,CAAA,8EAAA,EAAiFjE,EAAAA,CAAc0C,EAAG,MAAM,CAAC,CAAA,CAAA,CACxH,QAAA,CAAA,CAAAxC,eAACD,EAAAA,CAAA,CAAW,MAAA,CAAQyC,CAAAA,CAAG,OAAQ,CAAA,CAC9BA,CAAAA,CAAG,MAAA,CAAA,CACN,CAAA,CACF,EACAxC,cAAAA,CAAC,IAAA,CAAA,CAAG,SAAA,CAAU,2BAAA,CACX,SAAAwC,CAAAA,CAAG,QAAA,CAAS,OAAA,CAAQ,IAAA,CAAM,GAAG,CAAA,CAChC,CAAA,CACAxC,cAAAA,CAAC,IAAA,CAAA,CAAG,UAAU,qCAAA,CACX,QAAA,CAAAwC,CAAAA,CAAG,WAAA,CACN,EACAxC,cAAAA,CAAC,IAAA,CAAA,CAAG,SAAA,CAAU,2BAAA,CACX,SAAAQ,EAAAA,CAAWgC,CAAAA,CAAG,SAAA,CAAW9B,CAAM,EAClC,CAAA,CAAA,CAAA,CAtDK8B,CAAAA,CAAG,EAuDV,CACD,EACH,CAAA,CAAA,CACF,CAAA,CACF,CAAA,CAGCkB,CAAAA,CAAa,GACZK,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,oEAAA,CACb,UAAAA,eAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,+BAAA,CACV,UAAAX,CAAAA,CAAqB,MAAA,CAAO,GAAA,CAAE3B,CAAAA,CAAE,cACnC,CAAA,CACAsC,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,0BACb,QAAA,CAAA,CAAA/D,cAAAA,CAAC,QAAA,CAAA,CACC,OAAA,CAAS,IAAMkC,CAAAA,CAAe4C,CAAAA,EAAK,IAAA,CAAK,GAAA,CAAI,EAAGA,CAAAA,CAAI,CAAC,CAAC,CAAA,CACrD,SAAU7C,CAAAA,GAAgB,CAAA,CAC1B,SAAA,CAAU,2JAAA,CAEV,SAAAjC,cAAAA,CAAC+E,uBAAAA,CAAA,CAAY,SAAA,CAAU,UAAU,CAAA,CACnC,CAAA,CACAhB,eAAAA,CAAC,MAAA,CAAA,CAAK,UAAU,cAAA,CACb,QAAA,CAAA,CAAAtC,CAAAA,CAAE,IAAA,CAAK,IAAEQ,CAAAA,CAAY,GAAA,CAAER,CAAAA,CAAE,EAAA,CAAG,IAAEiC,CAAAA,CAAAA,CACjC,CAAA,CACA1D,cAAAA,CAAC,QAAA,CAAA,CACC,QAAS,IAAMkC,CAAAA,CAAe4C,CAAAA,EAAK,IAAA,CAAK,IAAIpB,CAAAA,CAAYoB,CAAAA,CAAI,CAAC,CAAC,EAC9D,QAAA,CAAU7C,CAAAA,GAAgByB,CAAAA,CAC1B,SAAA,CAAU,2JAAA,CAEV,QAAA,CAAA1D,cAAAA,CAACgF,wBAAAA,CAAA,CAAa,SAAA,CAAU,SAAA,CAAU,CAAA,CACpC,CAAA,CAAA,CACF,GACF,CAAA,CAAA,CAEJ,CAAA,CAEJ,CAAA,CAAA,CACF,CAEJ,CCvjBA,IAAMC,EAAAA,CAA6BC,CAAAA,GAAmC,CACpE,SAAA,CAAWA,CAAAA,CACX,MAAA,CAAQ,UAAA,CACR,QAAS,IAAI,IAAA,EAAK,CAAE,WAAA,GACpB,QAAA,CAAU,cACZ,CAAA,CAAA,CAEMC,EAAAA,CAA4BD,IAAkC,CAClE,QAAA,CAAUA,CAAAA,CACV,MAAA,CAAQ,WACR,OAAA,CAAS,IAAI,IAAA,EAAK,CAAE,aACtB,CAAA,CAAA,CAEME,EAAAA,CAA4BF,CAAAA,GAAkB,CAClD,SAAA,CAAWA,CAAAA,CACX,MAAA,CAAQ,CAAC,YAAa,UAAA,CAAY,YAAA,CAAc,UAAU,CAAA,CAAE,KAAK,KAAA,CAAM,IAAA,CAAK,MAAA,EAAO,CAAI,CAAC,CAAC,CAAA,CACzF,OAAA,CAAS,IAAI,KAAK,IAAA,CAAK,GAAA,EAAI,CAAI,GAAK,EAAE,WAAA,EAAY,CAClD,MAAA,CAAQ,MAAA,CACR,SAAU,KAAA,CACV,OAAA,CAAS,KAAA,CACT,KAAA,CAAO,CACL,IAAA,CAAM,KAAA,CACN,cAAA,CAAgB,CACd,YAAa,cAAA,CACb,QAAA,CAAU,cACZ,CACF,CACF,CAAA,CAAA,CAEMG,EAAAA,CAAiC,IAAM,CAC3C,CACE,OAAA,CAAS,KAAA,CACT,SAAA,CAAW,CACT,CACE,QAAA,CAAU,cAAA,CACV,cAAA,CAAgB,CACd,CAAE,aAAA,CAAe,SAAA,CAAW,MAAA,CAAQ,aAAc,EAClD,CAAE,aAAA,CAAe,QAAA,CAAU,MAAA,CAAQ,aAAc,CACnD,CACF,CAAA,CACA,CACE,SAAU,YAAA,CACV,cAAA,CAAgB,CACd,CAAE,cAAe,SAAA,CAAW,MAAA,CAAQ,aAAc,CAAA,CAClD,CAAE,aAAA,CAAe,QAAA,CAAU,MAAA,CAAQ,SAAU,CAC/C,CACF,CACF,CACF,CACF,EAEMC,EAAAA,CAA6BC,CAAAA,GAAmB,CACpD,OAAA,CAAS,MACT,QAAA,CAAUA,CAAAA,CAAM,UAAA,CAAW,OAAO,CAAA,CAAI,cAAA,CAAiB,YAAA,CACvD,WAAA,CAAaA,EAAM,OAAA,CAAQ,KAAA,CAAO,EAAE,CACtC,GAEMC,EAAAA,CAAiC,KAAO,CAC5C,WAAA,CAAa,eACb,sBAAA,CAAwB,CACtB,kBAAA,CAAoB,KAAA,CACpB,gBAAiB,IACnB,CAAA,CACA,SAAA,CAAW,CACT,CACE,OAAA,CAAS,KAAA,CACT,WAAA,CAAa,CAAE,GAAI,UAAA,CAAY,EAAA,CAAI,UAAW,CAAA,CAC9C,OAAQ,KAAA,CACR,IAAA,CAAM,sCAAA,CACN,SAAA,CAAW,CACT,CACE,QAAA,CAAU,cAAA,CACV,WAAA,CAAa,mBACb,uBAAA,CAAyB,UAAA,CACzB,UAAA,CAAY,CACV,CACE,QAAA,CAAU,KAAA,CACV,WAAA,CAAa,WAAA,CACb,eAAgB,CACd,OAAA,CAAS,CAAE,SAAA,CAAW,MAAO,SAAA,CAAW,SAAA,CAAW,MAAA,CAAQ,aAAc,EACzE,MAAA,CAAQ,CAAE,SAAA,CAAW,KAAA,CAAO,UAAW,QAAA,CAAU,MAAA,CAAQ,aAAc,CACzE,CACF,CACF,CACF,CACF,CACF,CACF,CACF,CAAA,CAAA,CAEMC,EAAAA,CAAmC,KAAO,CAC9C,QAAA,CAAU,CACR,CAAE,OAAA,CAAS,MAAO,QAAA,CAAU,KAAA,CAAO,OAAA,CAAS,YAAa,EACzD,CAAE,OAAA,CAAS,KAAA,CAAO,QAAA,CAAU,MAAO,OAAA,CAAS,WAAY,CAAA,CACxD,CAAE,QAAS,KAAA,CAAO,QAAA,CAAU,KAAA,CAAO,OAAA,CAAS,WAAY,CAC1D,CACF,CAAA,CAAA,CAEMC,EAAAA,CAA+B,IAAM,CACzC,CACE,EAAA,CAAI,SAAA,CACJ,IAAK,iDACP,CACF,CAAA,CAEMC,CAAAA,CAAgB,CAACC,CAAAA,CAAa,GAAA,GAAQ,IAAI,OAAA,CAAQC,GAAW,UAAA,CAAWA,CAAAA,CAASD,CAAAA,CAAK,IAAA,CAAK,QAAO,CAAI,GAAG,CAAC,CAAA,CAGhH,eAAeE,EAAAA,CAAkBC,CAAAA,CAAiBC,CAAAA,CAAiC,CACjF,IAAMC,CAAAA,CAAU,IAAI,WAAA,CACdC,CAAAA,CAAM,MAAM,MAAA,CAAO,MAAA,CAAO,SAAA,CAC9B,KAAA,CACAD,EAAQ,MAAA,CAAOD,CAAM,CAAA,CACrB,CAAE,IAAA,CAAM,MAAA,CAAQ,IAAA,CAAM,SAAU,EAChC,KAAA,CACA,CAAC,MAAM,CACT,EACMG,CAAAA,CAAY,MAAM,MAAA,CAAO,MAAA,CAAO,KAAK,MAAA,CAAQD,CAAAA,CAAKD,CAAAA,CAAQ,MAAA,CAAOF,CAAO,CAAC,CAAA,CAC/E,OAAO,KAAA,CAAM,KAAK,IAAI,UAAA,CAAWI,CAAS,CAAC,EACxC,GAAA,CAAKC,CAAAA,EAAMA,CAAAA,CAAE,QAAA,CAAS,EAAE,CAAA,CAAE,QAAA,CAAS,CAAA,CAAG,GAAG,CAAC,CAAA,CAC1C,IAAA,CAAK,EAAE,CACZ,CAEA,IAAM5H,EAAAA,CAAe,IACZ,sCAAA,CAAuC,QAAQ,OAAA,CAAUC,CAAAA,EAAM,CACpE,IAAMC,EAAK,IAAA,CAAK,MAAA,EAAO,CAAI,EAAA,CAAM,EAEjC,OAAA,CADUD,CAAAA,GAAM,GAAA,CAAMC,CAAAA,CAAKA,EAAI,CAAA,CAAO,CAAA,EAC7B,QAAA,CAAS,EAAE,CACtB,CAAC,CAAA,CAGG2H,EAAAA,CAAoF,CACxF,CAAE,KAAA,CAAO,cAAA,CAAgB,KAAA,CAAO,kBAAA,CAAoB,OAAA,CAAS,UAAW,CAAA,CACxE,CAAE,MAAO,YAAA,CAAc,KAAA,CAAO,cAAA,CAAgB,OAAA,CAAS,UAAW,CAAA,CAClE,CAAE,KAAA,CAAO,cAAA,CAAgB,MAAO,kBAAA,CAAoB,OAAA,CAAS,OAAQ,CAAA,CACrE,CAAE,KAAA,CAAO,YAAA,CAAc,KAAA,CAAO,cAAA,CAAgB,QAAS,OAAQ,CAAA,CAC/D,CAAE,KAAA,CAAO,eAAgB,KAAA,CAAO,kBAAA,CAAoB,OAAA,CAAS,OAAQ,EACrE,CAAE,KAAA,CAAO,YAAA,CAAc,KAAA,CAAO,eAAgB,OAAA,CAAS,OAAQ,CACjE,CAAA,CAEMC,GAAmB,CACvB,CAAE,KAAA,CAAO,KAAA,CAAO,MAAO,sBAAuB,CAAA,CAC9C,CAAE,KAAA,CAAO,MAAO,KAAA,CAAO,uBAAwB,CAAA,CAC/C,CAAE,MAAO,KAAA,CAAO,KAAA,CAAO,kBAAmB,CAAA,CAC1C,CAAE,KAAA,CAAO,KAAA,CAAO,KAAA,CAAO,uBAAwB,EAC/C,CAAE,KAAA,CAAO,KAAA,CAAO,KAAA,CAAO,qBAAsB,CAAA,CAC7C,CAAE,KAAA,CAAO,KAAA,CAAO,KAAA,CAAO,0BAA2B,CAAA,CAClD,CAAE,MAAO,KAAA,CAAO,KAAA,CAAO,wBAAyB,CAAA,CAChD,CAAE,KAAA,CAAO,KAAA,CAAO,KAAA,CAAO,sBAAuB,CAChD,CAAA,CAEO,SAASC,EAAAA,CAA0B,CACxC,OAAQC,CAAAA,CAAgB,EAAA,CACxB,WAAA,CAAaC,CAAAA,CAAqB,UAClC,SAAA,CAAAxF,CAAAA,CAAY,EAAA,CACZ,QAAA,CAAUyF,EAAkB,KAAA,CAC5B,WAAA,CAAAC,CAAAA,CAAc,cAAA,CACd,kBAAAC,CAAAA,CACA,gBAAA,CAAAC,CAAAA,CACA,OAAA,CAAAC,CACF,CAAA,CAAmC,CACjC,GAAM,CAACC,EAAQC,CAAS,CAAA,CAAIpF,cAAAA,CAAS4E,CAAa,EAC5C,CAACS,CAAAA,CAAaC,CAAc,CAAA,CAAItF,eAAmC6E,CAAkB,CAAA,CACrF,CAACU,CAAAA,CAAcC,CAAe,CAAA,CAAIxF,cAAAA,CAAS,CAAC,CAAC4E,GAAiBE,CAAe,CAAA,CAC7E,CAACW,CAAAA,CAAYC,CAAa,CAAA,CAAI1F,cAAAA,CAAS8E,CAAe,CAAA,CAEtD,CAACa,CAAAA,CAAWC,CAAY,CAAA,CAAI5F,cAAAA,CAAkB,SAAS,CAAA,CACvD,CAAC1C,CAAAA,CAAauI,CAAc,EAAI7F,cAAAA,CAAS,cAAc,CAAA,CACvD,CAAC7C,EAAQ2I,CAAS,CAAA,CAAI9F,cAAAA,CAAS,MAAM,EACrC,CAAC5C,CAAAA,CAAU2I,CAAW,CAAA,CAAI/F,eAAS,KAAK,CAAA,CACxC,CAACgG,CAAAA,CAAUC,EAAW,CAAA,CAAIjG,cAAAA,CAAwB,cAAc,CAAA,CAChE,CAACkG,CAAAA,CAAaC,EAAc,CAAA,CAAInG,cAAAA,CAAS,cAAc,CAAA,CACvD,CAAC9C,CAAAA,CAAekJ,CAAgB,EAAIpG,cAAAA,CAAS,EAAE,CAAA,CAE/C,CAACqG,EAASC,CAAU,CAAA,CAAItG,cAAAA,CAAuB,EAAE,CAAA,CACjD,CAACuG,CAAAA,CAAeC,CAAgB,EAAIxG,cAAAA,CAA0B,MAAM,CAAA,CAGpE,CAACyG,GAAeC,EAAgB,CAAA,CAAI1G,cAAAA,CAAS,uBAAuB,EACpE,CAAC2G,CAAAA,CAAeC,EAAgB,CAAA,CAAI5G,eAA6B,EAAE,CAAA,CACnE,CAAC6G,EAAkBC,EAAmB,CAAA,CAAI9G,cAAAA,CAA2B,mBAAmB,CAAA,CACxF,CAAC+G,CAAAA,CAAeC,CAAgB,EAAIhH,cAAAA,CAAS,MAAM,CAAA,CACnD,CAACiH,GAAcC,EAAe,CAAA,CAAIlH,cAAAA,CAAS,cAAc,EACzD,CAACmH,EAAAA,CAAiBC,EAAkB,CAAA,CAAIpH,eAAwB,cAAc,CAAA,CAC9E,CAACqH,EAAAA,CAAkBC,EAAmB,CAAA,CAAItH,cAAAA,CAAiB,EAAE,CAAA,CAC7D,CAACuH,EAAAA,CAAoBC,EAAqB,CAAA,CAAIxH,cAAAA,CAAiB,EAAE,CAAA,CACjE,CAACyH,EAAAA,CAAeC,EAAgB,EAAI1H,cAAAA,CAAiB,EAAE,CAAA,CACvD,CAAC2H,GAAiBC,EAAkB,CAAA,CAAI5H,cAAAA,CAAiB,EAAE,EAC3D,CAAC6H,EAAAA,CAAcC,EAAe,CAAA,CAAI9H,eAAiB,EAAE,CAAA,CACrD,CAAC+H,EAAAA,CAAcC,EAAe,CAAA,CAAIhI,cAAAA,CAAyB,IAAI,CAAA,CAC/D,CAACiI,EAAAA,CAAYC,EAAa,CAAA,CAAIlI,cAAAA,CAAiB,EAAE,CAAA,CACjD,CAACmI,CAAAA,CAAaC,EAAc,EAAIpI,cAAAA,CAAyC,IAAI,CAAA,CAC7E,CAACqI,GAAYC,EAAa,CAAA,CAAItI,cAAAA,CAAiB,EAAE,EACjD,CAACuI,CAAAA,CAAgBC,EAAiB,CAAA,CAAIxI,eAAkD,KAAK,CAAA,CAE7FyI,CAAAA,CAAYzG,iBAAAA,CAAY,CAAC0G,CAAAA,CAAmBnL,CAAAA,CAAyBoL,CAAAA,CAAoBC,CAAAA,GAAmB,CAChH,IAAMC,EAAAA,CAAqB,CACzB,EAAA,CAAIjM,IAAa,CACjB,SAAA,CAAA8L,CAAAA,CACA,MAAA,CAAAnL,EACA,QAAA,CAAAoL,CAAAA,CACA,KAAA,CAAAC,CAAAA,CACA,UAAW,IAAI,IAAA,EAAK,CAAE,kBAAA,EACxB,CAAA,CACAtC,CAAAA,CAAYwC,EAAAA,EAAS,CAACD,GAAQ,GAAGC,EAAI,CAAA,CAAE,KAAA,CAAM,EAAG,EAAE,CAAC,EACrD,CAAA,CAAG,EAAE,CAAA,CAECC,EAAAA,CAAkB/G,iBAAAA,CAAY,IAAM,CACxC,GAAI,CAACmD,CAAAA,CAAO,MAAK,CAAG,CAClBsD,CAAAA,CAAU,eAAA,CAAiB,QAAS,MAAA,CAAW,qBAAqB,CAAA,CACpE,MACF,CACAjD,CAAAA,CAAgB,IAAI,CAAA,CACpBE,CAAAA,CAAc,KAAK,CAAA,CACnB+C,CAAAA,CAAU,eAAA,CAAiB,UAAW,CAAE,WAAA,CAAApD,CAAAA,CAAa,UAAA,CAAY,KAAM,WAAA,CAAAN,CAAY,CAAC,EACtF,EAAG,CAACI,CAAAA,CAAQE,CAAAA,CAAaN,CAAAA,CAAa0D,CAAS,CAAC,CAAA,CAE1CO,EAAAA,CAAiBhH,iBAAAA,CAAY,IAAM,CACvC0D,CAAAA,CAAc,IAAI,CAAA,CAClBF,EAAgB,IAAI,CAAA,CACpBiD,CAAAA,CAAU,eAAA,CAAiB,UAAW,CAAE,IAAA,CAAM,MAAA,CAAQ,OAAA,CAAS,+CAAgD,CAAC,EAClH,CAAA,CAAG,CAACA,CAAS,CAAC,CAAA,CAERQ,EAAAA,CAAgBjH,iBAAAA,CAAY,SAAY,CAC5C,GAAI,EAAA,CAACmD,CAAAA,EAAU,CAACM,CAAAA,CAAAA,CAChB,CAAAe,CAAAA,CAAiB,SAAS,EAE1B,GAAI,CACF,IAAMlD,CAAAA,CAAO1G,IAAa,CAC1BwJ,CAAAA,CAAiB9C,CAAI,CAAA,CAErB,IAAIqF,CAAAA,CAEJ,GAAIlD,CAAAA,CACF,MAAM1B,GAAc,CACpB4E,CAAAA,CAAWtF,EAAAA,CAA0BC,CAAI,OACpC,CACL,IAAM4F,CAAAA,CAAM,MAAM,MAAM,CAAA,EAAGnE,CAAW,CAAA,QAAA,CAAA,CAAY,CAChD,OAAQ,MAAA,CACR,OAAA,CAAS,CAAE,cAAA,CAAgB,kBAAmB,CAAA,CAC9C,IAAA,CAAM,IAAA,CAAK,SAAA,CAAU,CACnB,MAAA,CAAAI,CAAAA,CACA,WAAA,CAAAE,CAAAA,CACA,OAAQ,UAAA,CAAWlI,CAAM,CAAA,CACzB,QAAA,CAAAC,EACA,QAAA,CAAA4I,CAAAA,CACA,WAAA,CAAA1I,CAAAA,CACA,gBAAiB4I,CAAAA,CAAY,KAAA,CAAM,CAAA,CAAG,EAAE,EACxC,aAAA,CAAe5C,CACjB,CAAC,CACH,CAAC,CAAA,CAEK3F,CAAAA,CAAO,MAAMuL,CAAAA,CAAI,MAAK,CAC5B,GAAI,CAACA,CAAAA,CAAI,GAAI,MAAM,IAAI,KAAA,CAAMvL,CAAAA,CAAK,OAAS,gBAAgB,CAAA,CAC3DgL,CAAAA,CAAWhL,EACb,CAEA6I,CAAAA,CAAiB,SAAS,CAAA,CAC1BiC,CAAAA,CAAU,UAAW,SAAA,CAAWE,CAAQ,CAAA,CACxC3D,CAAAA,GAAoB2D,CAAQ,EAC9B,CAAA,MAASQ,CAAAA,CAAK,CACZ3C,CAAAA,CAAiB,OAAO,CAAA,CACxB,IAAMrC,EAAUgF,CAAAA,YAAe,KAAA,CAAQA,CAAAA,CAAI,OAAA,CAAU,iBACrDV,CAAAA,CAAU,SAAA,CAAW,OAAA,CAAS,MAAA,CAAWtE,CAAO,CAAA,CAChDe,CAAAA,GAAUiE,CAAAA,YAAe,KAAA,CAAQA,EAAM,IAAI,KAAA,CAAMhF,CAAO,CAAC,EAC3D,CAAA,CACF,CAAA,CAAG,CAACgB,CAAAA,CAAQJ,EAAaM,CAAAA,CAAaI,CAAAA,CAAYtI,CAAAA,CAAQC,CAAAA,CAAU4I,EAAU1I,CAAAA,CAAa4I,CAAAA,CAAauC,CAAAA,CAAWzD,CAAAA,CAAmBE,CAAO,CAAC,CAAA,CAExIkE,EAAAA,CAAepH,iBAAAA,CAAY,SAAY,CAC3C,GAAI,EAAA,CAACmD,CAAAA,EAAU,CAACM,CAAAA,CAAAA,CAChB,CAAAe,CAAAA,CAAiB,SAAS,EAE1B,GAAI,CACF,IAAMlD,CAAAA,CAAO1G,IAAa,CAC1BwJ,CAAAA,CAAiB9C,CAAI,CAAA,CAErB,IAAIqF,CAAAA,CAEJ,GAAIlD,CAAAA,CACF,MAAM1B,GAAc,CACpB4E,CAAAA,CAAWpF,EAAAA,CAAyBD,CAAI,OACnC,CACL,IAAM4F,CAAAA,CAAM,MAAM,KAAA,CAAM,CAAA,EAAGnE,CAAW,CAAA,OAAA,CAAA,CAAW,CAC/C,MAAA,CAAQ,MAAA,CACR,OAAA,CAAS,CAAE,eAAgB,kBAAmB,CAAA,CAC9C,IAAA,CAAM,IAAA,CAAK,UAAU,CACnB,MAAA,CAAAI,CAAAA,CACA,WAAA,CAAAE,EACA,MAAA,CAAQ,UAAA,CAAWlI,CAAM,CAAA,CACzB,SAAAC,CAAAA,CACA,QAAA,CAAA4I,CAAAA,CACA,WAAA,CAAA1I,EACA,aAAA,CAAegG,CACjB,CAAC,CACH,CAAC,CAAA,CAEK3F,CAAAA,CAAO,MAAMuL,CAAAA,CAAI,MAAK,CAC5B,GAAI,CAACA,CAAAA,CAAI,GAAI,MAAM,IAAI,KAAA,CAAMvL,CAAAA,CAAK,OAAS,eAAe,CAAA,CAC1DgL,CAAAA,CAAWhL,EACb,CAEA6I,CAAAA,CAAiB,SAAS,CAAA,CAC1BiC,CAAAA,CAAU,SAAU,SAAA,CAAWE,CAAQ,CAAA,CACvC1D,CAAAA,GAAmB0D,CAAQ,EAC7B,CAAA,MAASQ,CAAAA,CAAK,CACZ3C,EAAiB,OAAO,CAAA,CACxB,IAAMrC,CAAAA,CAAUgF,aAAe,KAAA,CAAQA,CAAAA,CAAI,OAAA,CAAU,eAAA,CACrDV,CAAAA,CAAU,QAAA,CAAU,OAAA,CAAS,MAAA,CAAWtE,CAAO,CAAA,CAC/Ce,CAAAA,GAAUiE,CAAAA,YAAe,KAAA,CAAQA,EAAM,IAAI,KAAA,CAAMhF,CAAO,CAAC,EAC3D,CAAA,CACF,CAAA,CAAG,CAACgB,CAAAA,CAAQJ,EAAaM,CAAAA,CAAaI,CAAAA,CAAYtI,CAAAA,CAAQC,CAAAA,CAAU4I,EAAU1I,CAAAA,CAAamL,CAAAA,CAAWxD,CAAAA,CAAkBC,CAAO,CAAC,CAAA,CAE1HmE,EAAAA,CAAoBrH,iBAAAA,CAAY,SAAY,CAChD,GAAK,CAACmD,CAAAA,EAAU,CAACM,GAAe,CAACvI,CAAAA,CAAe,CAC9CuL,CAAAA,CAAU,eAAgB,OAAA,CAAS,MAAA,CAAW,mBAAmB,CAAA,CACjE,MACF,CACAjC,CAAAA,CAAiB,SAAS,CAAA,CAE1B,GAAI,CACF,IAAImC,CAAAA,CAEJ,GAAIlD,EACF,MAAM1B,CAAAA,EAAc,CACpB4E,CAAAA,CAAWnF,GAAyBtG,CAAa,CAAA,CAAA,KAC5C,CACL,IAAMgM,EAAM,MAAM,KAAA,CAAM,CAAA,EAAGnE,CAAW,UAAW,CAC/C,MAAA,CAAQ,MAAA,CACR,OAAA,CAAS,CAAE,cAAA,CAAgB,kBAAmB,CAAA,CAC9C,IAAA,CAAM,KAAK,SAAA,CAAU,CAAE,MAAA,CAAAI,CAAAA,CAAQ,YAAAE,CAAAA,CAAa,aAAA,CAAAnI,CAAc,CAAC,CAC7D,CAAC,CAAA,CAEKS,CAAAA,CAAO,MAAMuL,EAAI,IAAA,EAAK,CAC5B,GAAI,CAACA,EAAI,EAAA,CAAI,MAAM,IAAI,KAAA,CAAMvL,EAAK,KAAA,EAAS,qBAAqB,CAAA,CAChEgL,CAAAA,CAAWhL,EACb,CAEA6I,CAAAA,CAAiB,SAAS,CAAA,CAC1BiC,EAAU,cAAA,CAAgB,SAAA,CAAWE,CAAQ,EAC/C,OAASQ,CAAAA,CAAK,CACZ3C,CAAAA,CAAiB,OAAO,EACxB,IAAMrC,CAAAA,CAAUgF,CAAAA,YAAe,KAAA,CAAQA,EAAI,OAAA,CAAU,qBAAA,CACrDV,CAAAA,CAAU,cAAA,CAAgB,QAAS,MAAA,CAAWtE,CAAO,CAAA,CACrDe,CAAAA,GAAUiE,aAAe,KAAA,CAAQA,CAAAA,CAAM,IAAI,KAAA,CAAMhF,CAAO,CAAC,EAC3D,CACF,CAAA,CAAG,CAACgB,CAAAA,CAAQJ,CAAAA,CAAaM,CAAAA,CAAaI,CAAAA,CAAYvI,CAAAA,CAAeuL,CAAAA,CAAWvD,CAAO,CAAC,EAE9EoE,EAAAA,CAAwBtH,iBAAAA,CAAY,SAAY,CACpD,GAAI,EAAA,CAACmD,CAAAA,EAAU,CAACM,CAAAA,CAAAA,CAChB,CAAAe,CAAAA,CAAiB,SAAS,CAAA,CAE1B,GAAI,CACF,IAAImC,CAAAA,CAEJ,GAAIlD,CAAAA,CACF,MAAM1B,CAAAA,EAAc,CACpB4E,CAAAA,CAAWlF,EAAAA,QACN,CACL,IAAMyF,CAAAA,CAAM,MAAM,MAAM,CAAA,EAAGnE,CAAW,CAAA,aAAA,CAAA,CAAiB,CACrD,OAAQ,MAAA,CACR,OAAA,CAAS,CAAE,cAAA,CAAgB,kBAAmB,CAAA,CAC9C,IAAA,CAAM,IAAA,CAAK,SAAA,CAAU,CAAE,MAAA,CAAAI,CAAAA,CAAQ,WAAA,CAAAE,CAAY,CAAC,CAC9C,CAAC,CAAA,CAEK1H,CAAAA,CAAO,MAAMuL,CAAAA,CAAI,IAAA,EAAK,CAC5B,GAAI,CAACA,CAAAA,CAAI,EAAA,CAAI,MAAM,IAAI,MAAMvL,CAAAA,CAAK,KAAA,EAAS,2BAA2B,CAAA,CACtEgL,EAAWhL,EACb,CAEA6I,CAAAA,CAAiB,SAAS,EAC1BiC,CAAAA,CAAU,uBAAA,CAAyB,SAAA,CAAWE,CAAQ,EACxD,CAAA,MAASQ,CAAAA,CAAK,CACZ3C,CAAAA,CAAiB,OAAO,CAAA,CACxB,IAAMrC,CAAAA,CAAUgF,CAAAA,YAAe,MAAQA,CAAAA,CAAI,OAAA,CAAU,2BAAA,CACrDV,CAAAA,CAAU,wBAAyB,OAAA,CAAS,MAAA,CAAWtE,CAAO,CAAA,CAC9De,IAAUiE,CAAAA,YAAe,KAAA,CAAQA,CAAAA,CAAM,IAAI,MAAMhF,CAAO,CAAC,EAC3D,CAAA,CACF,EAAG,CAACgB,CAAAA,CAAQJ,CAAAA,CAAaM,CAAAA,CAAaI,EAAYgD,CAAAA,CAAWvD,CAAO,CAAC,CAAA,CAE/DqE,GAAwBvH,iBAAAA,CAAY,SAAY,CACpD,GAAI,GAACmD,CAAAA,EAAU,CAACM,CAAAA,CAAAA,CAChB,CAAAe,EAAiB,SAAS,CAAA,CAE1B,GAAI,CACF,IAAImC,CAAAA,CAEJ,GAAIlD,CAAAA,CACF,MAAM1B,GAAc,CACpB4E,CAAAA,CAAWjF,EAAAA,CAA0BpG,CAAW,OAC3C,CACL,IAAM4L,CAAAA,CAAM,MAAM,MAAM,CAAA,EAAGnE,CAAW,CAAA,iBAAA,CAAA,CAAqB,CACzD,MAAA,CAAQ,MAAA,CACR,OAAA,CAAS,CAAE,eAAgB,kBAAmB,CAAA,CAC9C,IAAA,CAAM,IAAA,CAAK,UAAU,CAAE,MAAA,CAAAI,CAAAA,CAAQ,WAAA,CAAAE,EAAa,WAAA,CAAA/H,CAAY,CAAC,CAC3D,CAAC,CAAA,CAEKK,CAAAA,CAAO,MAAMuL,CAAAA,CAAI,MAAK,CAC5B,GAAI,CAACA,CAAAA,CAAI,GAAI,MAAM,IAAI,KAAA,CAAMvL,CAAAA,CAAK,OAAS,mBAAmB,CAAA,CAC9DgL,CAAAA,CAAWhL,EACb,CAEA6I,CAAAA,CAAiB,SAAS,CAAA,CAC1BiC,CAAAA,CAAU,mBAAoB,SAAA,CAAWE,CAAQ,EACnD,CAAA,MAASQ,EAAK,CACZ3C,CAAAA,CAAiB,OAAO,CAAA,CACxB,IAAMrC,CAAAA,CAAUgF,CAAAA,YAAe,KAAA,CAAQA,CAAAA,CAAI,QAAU,mBAAA,CACrDV,CAAAA,CAAU,kBAAA,CAAoB,OAAA,CAAS,OAAWtE,CAAO,CAAA,CACzDe,CAAAA,GAAUiE,CAAAA,YAAe,MAAQA,CAAAA,CAAM,IAAI,KAAA,CAAMhF,CAAO,CAAC,EAC3D,CAAA,CACF,CAAA,CAAG,CAACgB,EAAQJ,CAAAA,CAAaM,CAAAA,CAAaI,CAAAA,CAAYnI,CAAAA,CAAamL,EAAWvD,CAAO,CAAC,CAAA,CAE5EsE,EAAAA,CAAwBxH,kBAAY,SAAY,CACpD,GAAI,EAAA,CAACmD,GAAU,CAACM,CAAAA,CAAAA,CAChB,CAAAe,CAAAA,CAAiB,SAAS,CAAA,CAE1B,GAAI,CACF,IAAImC,EAEJ,GAAIlD,CAAAA,CACF,MAAM1B,CAAAA,GACN4E,CAAAA,CAAW/E,EAAAA,EAA+B,CAAA,KACrC,CACL,IAAMsF,CAAAA,CAAM,MAAM,KAAA,CAAM,CAAA,EAAGnE,CAAW,CAAA,cAAA,CAAA,CAAkB,CACtD,MAAA,CAAQ,MAAA,CACR,QAAS,CAAE,cAAA,CAAgB,kBAAmB,CAAA,CAC9C,KAAM,IAAA,CAAK,SAAA,CAAU,CAAE,MAAA,CAAAI,EAAQ,WAAA,CAAAE,CAAY,CAAC,CAC9C,CAAC,CAAA,CAEK1H,CAAAA,CAAO,MAAMuL,CAAAA,CAAI,MAAK,CAC5B,GAAI,CAACA,CAAAA,CAAI,GAAI,MAAM,IAAI,KAAA,CAAMvL,CAAAA,CAAK,OAAS,sBAAsB,CAAA,CACjEgL,CAAAA,CAAWhL,EACb,CAEA6I,CAAAA,CAAiB,SAAS,CAAA,CAC1BiC,EAAU,sBAAA,CAAwB,SAAA,CAAWE,CAAQ,EACvD,OAASQ,CAAAA,CAAK,CACZ3C,CAAAA,CAAiB,OAAO,EACxB,IAAMrC,CAAAA,CAAUgF,CAAAA,YAAe,KAAA,CAAQA,EAAI,OAAA,CAAU,sBAAA,CACrDV,CAAAA,CAAU,sBAAA,CAAwB,QAAS,MAAA,CAAWtE,CAAO,CAAA,CAC7De,CAAAA,GAAUiE,aAAe,KAAA,CAAQA,CAAAA,CAAM,IAAI,KAAA,CAAMhF,CAAO,CAAC,EAC3D,CAAA,CACF,CAAA,CAAG,CAACgB,CAAAA,CAAQJ,CAAAA,CAAaM,CAAAA,CAAaI,CAAAA,CAAYgD,EAAWvD,CAAO,CAAC,CAAA,CAE/DuE,EAAAA,CAAsBzH,kBAAY,SAAY,CAClD,GAAI,EAAA,CAACmD,GAAU,CAACM,CAAAA,CAAAA,CAChB,CAAAe,CAAAA,CAAiB,SAAS,CAAA,CAE1B,GAAI,CACF,IAAImC,EAEJ,GAAIlD,CAAAA,CACF,MAAM1B,CAAAA,GACN4E,CAAAA,CAAW7E,EAAAA,EAA6B,CAAA,KACnC,CACL,IAAMoF,CAAAA,CAAM,MAAM,KAAA,CAAM,CAAA,EAAGnE,CAAW,CAAA,YAAA,CAAA,CAAgB,CACpD,MAAA,CAAQ,OACR,OAAA,CAAS,CAAE,cAAA,CAAgB,kBAAmB,EAC9C,IAAA,CAAM,IAAA,CAAK,SAAA,CAAU,CAAE,OAAAI,CAAAA,CAAQ,WAAA,CAAAE,CAAY,CAAC,CAC9C,CAAC,CAAA,CAEK1H,CAAAA,CAAO,MAAMuL,EAAI,IAAA,EAAK,CAC5B,GAAI,CAACA,EAAI,EAAA,CAAI,MAAM,IAAI,KAAA,CAAMvL,EAAK,KAAA,EAAS,2BAA2B,CAAA,CACtEgL,CAAAA,CAAWhL,EACb,CAEA6I,CAAAA,CAAiB,SAAS,CAAA,CAC1BiC,EAAU,aAAA,CAAe,SAAA,CAAWE,CAAQ,EAC9C,OAASQ,CAAAA,CAAK,CACZ3C,CAAAA,CAAiB,OAAO,EACxB,IAAMrC,CAAAA,CAAUgF,CAAAA,YAAe,KAAA,CAAQA,EAAI,OAAA,CAAU,2BAAA,CACrDV,CAAAA,CAAU,aAAA,CAAe,QAAS,MAAA,CAAWtE,CAAO,CAAA,CACpDe,CAAAA,GAAUiE,aAAe,KAAA,CAAQA,CAAAA,CAAM,IAAI,KAAA,CAAMhF,CAAO,CAAC,EAC3D,CAAA,CACF,CAAA,CAAG,CAACgB,CAAAA,CAAQJ,CAAAA,CAAaM,CAAAA,CAAaI,EAAYgD,CAAAA,CAAWvD,CAAO,CAAC,CAAA,CAE/DwE,GAA0B1H,iBAAAA,CAAY,SAAY,CACtD,GAAI,GAACmD,CAAAA,EAAU,CAACM,CAAAA,CAAAA,CAChB,CAAAe,EAAiB,SAAS,CAAA,CAE1B,GAAI,CACF,IAAImC,CAAAA,CAEJ,GAAIlD,CAAAA,CACF,MAAM1B,GAAc,CACpB4E,CAAAA,CAAW9E,EAAAA,EAAiC,CAAA,KACvC,CACL,IAAMqF,CAAAA,CAAM,MAAM,KAAA,CAAM,GAAGnE,CAAW,CAAA,gBAAA,CAAA,CAAoB,CACxD,MAAA,CAAQ,OACR,OAAA,CAAS,CAAE,cAAA,CAAgB,kBAAmB,EAC9C,IAAA,CAAM,IAAA,CAAK,SAAA,CAAU,CAAE,OAAAI,CAAAA,CAAQ,WAAA,CAAAE,CAAY,CAAC,CAC9C,CAAC,CAAA,CAEK1H,CAAAA,CAAO,MAAMuL,EAAI,IAAA,EAAK,CAC5B,GAAI,CAACA,EAAI,EAAA,CAAI,MAAM,IAAI,KAAA,CAAMvL,EAAK,KAAA,EAAS,wBAAwB,CAAA,CACnEgL,CAAAA,CAAWhL,EACb,CAEA6I,CAAAA,CAAiB,SAAS,CAAA,CAC1BiC,EAAU,iBAAA,CAAmB,SAAA,CAAWE,CAAQ,EAClD,OAASQ,CAAAA,CAAK,CACZ3C,CAAAA,CAAiB,OAAO,EACxB,IAAMrC,CAAAA,CAAUgF,CAAAA,YAAe,KAAA,CAAQA,EAAI,OAAA,CAAU,wBAAA,CACrDV,CAAAA,CAAU,iBAAA,CAAmB,QAAS,MAAA,CAAWtE,CAAO,CAAA,CACxDe,CAAAA,GAAUiE,aAAe,KAAA,CAAQA,CAAAA,CAAM,IAAI,KAAA,CAAMhF,CAAO,CAAC,EAC3D,CAAA,CACF,CAAA,CAAG,CAACgB,CAAAA,CAAQJ,CAAAA,CAAaM,CAAAA,CAAaI,CAAAA,CAAYgD,EAAWvD,CAAO,CAAC,CAAA,CAE/DnD,EAAAA,CAAkBC,kBAAaC,CAAAA,EAAiB,CACpD,SAAA,CAAU,SAAA,CAAU,UAAUA,CAAI,EACpC,CAAA,CAAG,EAAE,CAAA,CAEL,OAAKsD,CAAAA,CA+FHpD,eAAAA,CAAC,OAAI,SAAA,CAAW,CAAA,UAAA,EAAa9C,CAAS,CAAA,CAAA,CACpC,UAAA8C,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,mDAAA,CACb,UAAAA,eAAAA,CAAC,KAAA,CAAA,CACC,QAAA,CAAA,CAAAA,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yBAAA,CACb,QAAA,CAAA,CAAA/D,eAAC,IAAA,CAAA,CAAG,SAAA,CAAU,mCAAA,CAAoC,QAAA,CAAA,oBAAA,CAAkB,EACnEqH,CAAAA,CACCrH,cAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,oGAAoG,QAAA,CAAA,MAAA,CAEpH,CAAA,CACEiH,CAAAA,GAAgB,YAAA,CAClBjH,eAAC,MAAA,CAAA,CAAK,SAAA,CAAU,mGAAA,CAAoG,QAAA,CAAA,YAAA,CAEpH,EAEAA,cAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,+FAAA,CAAgG,mBAEhH,CAAA,CAAA,CAEJ,CAAA,CACAA,cAAAA,CAAC,GAAA,CAAA,CAAE,UAAU,4BAAA,CACV,QAAA,CAAAqH,CAAAA,CACG,iDAAA,CACAJ,IAAgB,YAAA,CACd,2CAAA,CACA,sCAAA,CAER,CAAA,CAAA,CACF,EACAlD,eAAAA,CAAC,QAAA,CAAA,CACC,OAAA,CAAS,IAAMqD,EAAgB,KAAK,CAAA,CACpC,SAAA,CAAU,0HAAA,CAEV,UAAApH,cAAAA,CAACuL,EAAAA,CAAA,EAAa,CAAA,CAAE,eAElB,CAAA,CAAA,CACF,CAAA,CAEAxH,eAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,2BAAA,CACb,QAAA,CAAA,CAAAA,eAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,yBAAA,CAEb,QAAA,CAAA,CAAAA,eAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,mCAAA,CACb,QAAA,CAAA,CAAAA,eAAAA,CAAC,QAAA,CAAA,CACC,QAAS,IAAMyD,CAAAA,CAAa,SAAS,CAAA,CACrC,UAAW,CAAA,4GAAA,EACTD,CAAAA,GAAc,SAAA,CAAY,+BAAA,CAAkC,6CAC9D,CAAA,CAAA,CAEA,QAAA,CAAA,CAAAvH,cAAAA,CAACwL,EAAAA,CAAA,EAAW,CAAA,CAAE,SAAA,CAAA,CAEhB,CAAA,CACAzH,eAAAA,CAAC,UACC,OAAA,CAAS,IAAMyD,CAAAA,CAAa,QAAQ,EACpC,SAAA,CAAW,CAAA,4GAAA,EACTD,CAAAA,GAAc,QAAA,CAAW,gCAAkC,6CAC7D,CAAA,CAAA,CAEA,QAAA,CAAA,CAAAvH,cAAAA,CAACyL,GAAA,EAAU,CAAA,CAAE,QAAA,CAAA,CAEf,CAAA,CACA1H,gBAAC,QAAA,CAAA,CACC,OAAA,CAAS,IAAMyD,CAAAA,CAAa,QAAQ,CAAA,CACpC,SAAA,CAAW,CAAA,4GAAA,EACTD,CAAAA,GAAc,SAAW,+BAAA,CAAkC,6CAC7D,CAAA,CAAA,CAEA,QAAA,CAAA,CAAAvH,eAAC0L,EAAAA,CAAA,EAAY,CAAA,CAAE,QAAA,CAAA,CAEjB,EACA3H,eAAAA,CAAC,QAAA,CAAA,CACC,OAAA,CAAS,IAAMyD,EAAa,SAAS,CAAA,CACrC,SAAA,CAAW,CAAA,4GAAA,EACTD,IAAc,SAAA,CAAY,+BAAA,CAAkC,6CAC9D,CAAA,CAAA,CAEA,UAAAvH,cAAAA,CAAC2L,EAAAA,CAAA,EAAY,CAAA,CAAE,SAAA,CAAA,CAEjB,CAAA,CACA5H,eAAAA,CAAC,QAAA,CAAA,CACC,QAAS,IAAMyD,CAAAA,CAAa,UAAU,CAAA,CACtC,UAAW,CAAA,4GAAA,EACTD,CAAAA,GAAc,UAAA,CAAa,+BAAA,CAAkC,6CAC/D,CAAA,CAAA,CAEA,QAAA,CAAA,CAAAvH,cAAAA,CAAC4L,EAAAA,CAAA,EAAU,CAAA,CAAE,UAAA,CAAA,CAEf,CAAA,CACA7H,eAAAA,CAAC,UACC,OAAA,CAAS,IAAMyD,CAAAA,CAAa,UAAU,EACtC,SAAA,CAAW,CAAA,4GAAA,EACTD,CAAAA,GAAc,UAAA,CAAa,gCAAkC,6CAC/D,CAAA,CAAA,CAEA,QAAA,CAAA,CAAAvH,cAAAA,CAAC6L,GAAA,EAAY,CAAA,CAAE,UAAA,CAAA,CAEjB,CAAA,CAAA,CACF,EAGCtE,CAAAA,GAAc,SAAA,EACbxD,eAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,kDAAA,CACb,QAAA,CAAA,CAAAA,eAAAA,CAAC,KAAA,CAAA,CACC,UAAA/D,cAAAA,CAAC,IAAA,CAAA,CAAG,SAAA,CAAU,eAAA,CAAgB,4BAAgB,CAAA,CAC9CA,cAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,gCAAgC,QAAA,CAAA,0CAAA,CAAwC,CAAA,CAAA,CACvF,CAAA,CAEA+D,eAAAA,CAAC,OAAI,SAAA,CAAU,2BAAA,CACb,QAAA,CAAA,CAAAA,eAAAA,CAAC,OAAI,SAAA,CAAU,WAAA,CACb,QAAA,CAAA,CAAA/D,cAAAA,CAAC,SAAM,SAAA,CAAU,qBAAA,CAAsB,QAAA,CAAA,cAAA,CAAY,CAAA,CACnDA,eAAC,OAAA,CAAA,CACC,WAAA,CAAY,cAAA,CACZ,KAAA,CAAOd,EACP,QAAA,CAAWqF,CAAAA,EAAMkD,CAAAA,CAAelD,CAAAA,CAAE,OAAO,KAAK,CAAA,CAC9C,SAAA,CAAU,0GAAA,CACZ,GACF,CAAA,CACAR,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,YACb,QAAA,CAAA,CAAA/D,cAAAA,CAAC,OAAA,CAAA,CAAM,SAAA,CAAU,sBAAsB,QAAA,CAAA,QAAA,CAAM,CAAA,CAC7CA,cAAAA,CAAC,OAAA,CAAA,CACC,KAAK,QAAA,CACL,WAAA,CAAY,MAAA,CACZ,KAAA,CAAOjB,EACP,QAAA,CAAWwF,CAAAA,EAAMmD,CAAAA,CAAUnD,CAAAA,CAAE,OAAO,KAAK,CAAA,CACzC,SAAA,CAAU,0GAAA,CACZ,GACF,CAAA,CACAR,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,YACb,QAAA,CAAA,CAAA/D,cAAAA,CAAC,OAAA,CAAA,CAAM,SAAA,CAAU,sBAAsB,QAAA,CAAA,UAAA,CAAQ,CAAA,CAC/CA,cAAAA,CAAC,QAAA,CAAA,CACC,MAAOhB,CAAAA,CACP,QAAA,CAAWuF,CAAAA,EAAMoD,CAAAA,CAAYpD,EAAE,MAAA,CAAO,KAAK,CAAA,CAC3C,SAAA,CAAU,2GAET,QAAA,CAAA+B,EAAAA,CAAiB,GAAA,CAAK7H,CAAAA,EACrBuB,cAAAA,CAAC,QAAA,CAAA,CAAqB,KAAA,CAAOvB,CAAAA,CAAE,MAAQ,QAAA,CAAAA,CAAAA,CAAE,KAAA,CAAA,CAA5BA,CAAAA,CAAE,KAAgC,CAChD,CAAA,CACH,CAAA,CAAA,CACF,CAAA,CACAsF,gBAAC,KAAA,CAAA,CAAI,SAAA,CAAU,WAAA,CACb,QAAA,CAAA,CAAA/D,eAAC,OAAA,CAAA,CAAM,SAAA,CAAU,qBAAA,CAAsB,QAAA,CAAA,UAAA,CAAQ,EAC/CA,cAAAA,CAAC,QAAA,CAAA,CACC,KAAA,CAAO4H,CAAAA,CACP,SAAWrD,CAAAA,EAAMsD,EAAAA,CAAYtD,CAAAA,CAAE,MAAA,CAAO,KAAsB,CAAA,CAC5D,SAAA,CAAU,0GAAA,CAET,QAAA,CAAA8B,GAAiB,GAAA,CAAK5H,CAAAA,EACrBsF,eAAAA,CAAC,QAAA,CAAA,CAAqB,MAAOtF,CAAAA,CAAE,KAAA,CAAQ,QAAA,CAAA,CAAAA,CAAAA,CAAE,MAAM,IAAA,CAAGA,CAAAA,CAAE,OAAA,CAAQ,GAAA,CAAA,CAAA,CAA/CA,EAAE,KAA8C,CAC9D,CAAA,CACH,CAAA,CAAA,CACF,EACAsF,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yBAAA,CACb,UAAA/D,cAAAA,CAAC,OAAA,CAAA,CAAM,SAAA,CAAU,qBAAA,CAAsB,yCAA6B,CAAA,CACpEA,cAAAA,CAAC,OAAA,CAAA,CACC,WAAA,CAAY,sBACZ,KAAA,CAAO8H,CAAAA,CACP,QAAA,CAAWvD,CAAAA,EAAMwD,GAAexD,CAAAA,CAAE,MAAA,CAAO,KAAK,CAAA,CAC9C,UAAW,EAAA,CACX,SAAA,CAAU,0GAAA,CACZ,CAAA,CAAA,CACF,GACF,CAAA,CAEAR,eAAAA,CAAC,QAAA,CAAA,CACC,OAAA,CAAS8G,GACT,QAAA,CAAU1C,CAAAA,GAAkB,SAAA,CAC5B,SAAA,CAAU,0KAET,QAAA,CAAA,CAAAA,CAAAA,GAAkB,SAAA,CAAYnI,cAAAA,CAAC8L,EAAA,EAAW,CAAA,CAAK9L,cAAAA,CAAC+L,EAAAA,CAAA,EAAS,CAAA,CAAG,iBAAA,CAAA,CAE/D,CAAA,CAAA,CACF,CAAA,CAIDxE,IAAc,QAAA,EACbxD,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,mDACb,QAAA,CAAA,CAAAA,eAAAA,CAAC,KAAA,CAAA,CACC,QAAA,CAAA,CAAA/D,eAAC,IAAA,CAAA,CAAG,SAAA,CAAU,eAAA,CAAgB,QAAA,CAAA,iBAAA,CAAe,EAC7CA,cAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,+BAAA,CAAgC,gDAAoC,CAAA,CAAA,CACnF,CAAA,CAEA+D,eAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,2BAAA,CACb,QAAA,CAAA,CAAAA,eAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,WAAA,CACb,QAAA,CAAA,CAAA/D,cAAAA,CAAC,OAAA,CAAA,CAAM,UAAU,qBAAA,CAAsB,QAAA,CAAA,iBAAA,CAAe,CAAA,CACtDA,cAAAA,CAAC,SACC,WAAA,CAAY,cAAA,CACZ,KAAA,CAAOd,CAAAA,CACP,QAAA,CAAWqF,CAAAA,EAAMkD,CAAAA,CAAelD,CAAAA,CAAE,OAAO,KAAK,CAAA,CAC9C,SAAA,CAAU,0GAAA,CACZ,GACF,CAAA,CACAR,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,YACb,QAAA,CAAA,CAAA/D,cAAAA,CAAC,OAAA,CAAA,CAAM,SAAA,CAAU,sBAAsB,QAAA,CAAA,QAAA,CAAM,CAAA,CAC7CA,cAAAA,CAAC,OAAA,CAAA,CACC,KAAK,QAAA,CACL,WAAA,CAAY,MAAA,CACZ,KAAA,CAAOjB,EACP,QAAA,CAAWwF,CAAAA,EAAMmD,CAAAA,CAAUnD,CAAAA,CAAE,OAAO,KAAK,CAAA,CACzC,SAAA,CAAU,0GAAA,CACZ,GACF,CAAA,CACAR,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,YACb,QAAA,CAAA,CAAA/D,cAAAA,CAAC,OAAA,CAAA,CAAM,SAAA,CAAU,sBAAsB,QAAA,CAAA,UAAA,CAAQ,CAAA,CAC/CA,cAAAA,CAAC,QAAA,CAAA,CACC,MAAOhB,CAAAA,CACP,QAAA,CAAWuF,CAAAA,EAAMoD,CAAAA,CAAYpD,EAAE,MAAA,CAAO,KAAK,CAAA,CAC3C,SAAA,CAAU,2GAET,QAAA,CAAA+B,EAAAA,CAAiB,GAAA,CAAK7H,CAAAA,EACrBuB,eAAC,QAAA,CAAA,CAAqB,KAAA,CAAOvB,CAAAA,CAAE,KAAA,CAAQ,SAAAA,CAAAA,CAAE,KAAA,CAAA,CAA5BA,CAAAA,CAAE,KAAgC,CAChD,CAAA,CACH,CAAA,CAAA,CACF,CAAA,CACAsF,eAAAA,CAAC,OAAI,SAAA,CAAU,WAAA,CACb,QAAA,CAAA,CAAA/D,cAAAA,CAAC,SAAM,SAAA,CAAU,qBAAA,CAAsB,QAAA,CAAA,UAAA,CAAQ,CAAA,CAC/CA,eAAC,QAAA,CAAA,CACC,KAAA,CAAO4H,CAAAA,CACP,QAAA,CAAWrD,GAAMsD,EAAAA,CAAYtD,CAAAA,CAAE,MAAA,CAAO,KAAsB,EAC5D,SAAA,CAAU,0GAAA,CAET,QAAA,CAAA8B,EAAAA,CAAiB,IAAK5H,CAAAA,EACrBsF,eAAAA,CAAC,QAAA,CAAA,CAAqB,KAAA,CAAOtF,EAAE,KAAA,CAAQ,QAAA,CAAA,CAAAA,CAAAA,CAAE,KAAA,CAAM,KAAGA,CAAAA,CAAE,OAAA,CAAQ,GAAA,CAAA,CAAA,CAA/CA,CAAAA,CAAE,KAA8C,CAC9D,CAAA,CACH,CAAA,CAAA,CACF,CAAA,CAAA,CACF,EAEAsF,eAAAA,CAAC,QAAA,CAAA,CACC,OAAA,CAASiH,EAAAA,CACT,SAAU7C,CAAAA,GAAkB,SAAA,CAC5B,SAAA,CAAU,yKAAA,CAET,UAAAA,CAAAA,GAAkB,SAAA,CAAYnI,cAAAA,CAAC8L,CAAAA,CAAA,EAAW,CAAA,CAAK9L,cAAAA,CAAC+L,EAAAA,CAAA,EAAS,EAAG,gBAAA,CAAA,CAE/D,CAAA,CAAA,CACF,CAAA,CAIDxE,CAAAA,GAAc,UACbxD,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kDAAA,CACb,QAAA,CAAA,CAAAA,eAAAA,CAAC,KAAA,CAAA,CACC,QAAA,CAAA,CAAA/D,eAAC,IAAA,CAAA,CAAG,SAAA,CAAU,eAAA,CAAgB,QAAA,CAAA,0BAAA,CAAwB,EACtDA,cAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,+BAAA,CAAgC,6CAAiC,CAAA,CAAA,CAChF,CAAA,CAEA+D,eAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,WAAA,CACb,QAAA,CAAA,CAAAA,eAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,WAAA,CACb,QAAA,CAAA,CAAA/D,cAAAA,CAAC,OAAA,CAAA,CAAM,UAAU,qBAAA,CAAsB,QAAA,CAAA,gBAAA,CAAc,CAAA,CACrD+D,eAAAA,CAAC,OAAI,SAAA,CAAU,YAAA,CACb,QAAA,CAAA,CAAA/D,cAAAA,CAAC,SACC,WAAA,CAAY,6BAAA,CACZ,KAAA,CAAOlB,CAAAA,CACP,SAAWyF,CAAAA,EAAMyD,CAAAA,CAAiBzD,CAAAA,CAAE,MAAA,CAAO,KAAK,CAAA,CAChD,SAAA,CAAU,oHAAA,CACZ,CAAA,CACCzF,GACCkB,cAAAA,CAAC,QAAA,CAAA,CACC,OAAA,CAAS,IAAM2D,GAAgB7E,CAAa,CAAA,CAC5C,SAAA,CAAU,8GAAA,CACV,MAAM,mBAAA,CAEN,QAAA,CAAAkB,cAAAA,CAACgM,EAAAA,CAAA,EAAS,CAAA,CACZ,CAAA,CAAA,CAEJ,CAAA,CAAA,CACF,CAAA,CAEAjI,gBAAC,QAAA,CAAA,CACC,OAAA,CAASkH,EAAAA,CACT,QAAA,CAAU9C,IAAkB,SAAA,EAAa,CAACrJ,CAAAA,CAC1C,SAAA,CAAU,0KAET,QAAA,CAAA,CAAAqJ,CAAAA,GAAkB,SAAA,CAAYnI,cAAAA,CAAC8L,EAAA,EAAW,CAAA,CAAK9L,cAAAA,CAAC0L,EAAAA,CAAA,EAAY,CAAA,CAAG,cAAA,CAAA,CAElE,CAAA,CAAA,CACF,CAAA,CAAA,CACF,EAIDnE,CAAAA,GAAc,SAAA,EACbxD,eAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,WAAA,CACb,QAAA,CAAA,CAAAA,eAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,kDAAA,CACb,QAAA,CAAA,CAAAA,eAAAA,CAAC,KAAA,CAAA,CACC,UAAA/D,cAAAA,CAAC,IAAA,CAAA,CAAG,SAAA,CAAU,eAAA,CAAgB,4BAAgB,CAAA,CAC9CA,cAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,gCAAgC,QAAA,CAAA,0CAAA,CAAwC,CAAA,CAAA,CACvF,CAAA,CAEA+D,eAAAA,CAAC,OAAI,SAAA,CAAU,WAAA,CACb,QAAA,CAAA,CAAA/D,cAAAA,CAAC,SAAM,SAAA,CAAU,qBAAA,CAAsB,QAAA,CAAA,cAAA,CAAY,CAAA,CACnDA,eAAC,OAAA,CAAA,CACC,WAAA,CAAY,kBAAA,CACZ,KAAA,CAAOd,EACP,QAAA,CAAWqF,CAAAA,EAAMkD,CAAAA,CAAelD,CAAAA,CAAE,OAAO,KAAK,CAAA,CAC9C,SAAA,CAAU,0GAAA,CACZ,GACF,CAAA,CAEAR,eAAAA,CAAC,QAAA,CAAA,CACC,OAAA,CAASoH,EAAAA,CACT,QAAA,CAAUhD,CAAAA,GAAkB,SAAA,CAC5B,UAAU,yKAAA,CAET,QAAA,CAAA,CAAAA,CAAAA,GAAkB,SAAA,CAAYnI,eAAC8L,CAAAA,CAAA,EAAW,CAAA,CAAK9L,cAAAA,CAACiM,GAAA,EAAW,CAAA,CAAG,kBAAA,CAAA,CAEjE,CAAA,CAAA,CACF,EAEAlI,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,2BAAA,CACb,UAAAA,eAAAA,CAAC,QAAA,CAAA,CACC,OAAA,CAASmH,EAAAA,CACT,SAAU/C,CAAAA,GAAkB,SAAA,CAC5B,SAAA,CAAU,8JAAA,CAEV,UAAAnI,cAAAA,CAACkM,EAAAA,CAAA,EAAW,CAAA,CAAE,yBAEhB,CAAA,CACAnI,eAAAA,CAAC,QAAA,CAAA,CACC,OAAA,CAASqH,GACT,QAAA,CAAUjD,CAAAA,GAAkB,SAAA,CAC5B,SAAA,CAAU,+JAEV,QAAA,CAAA,CAAAnI,cAAAA,CAACuL,EAAAA,CAAA,EAAa,EAAE,eAAA,CAAA,CAElB,CAAA,CACAxH,eAAAA,CAAC,QAAA,CAAA,CACC,QAASsH,EAAAA,CACT,QAAA,CAAUlD,CAAAA,GAAkB,SAAA,CAC5B,UAAU,8JAAA,CAEV,QAAA,CAAA,CAAAnI,cAAAA,CAACmM,EAAAA,CAAA,EAAQ,CAAA,CAAE,aAAA,CAAA,CAEb,CAAA,CAAA,CACF,CAAA,CAAA,CACF,EAID5E,CAAAA,GAAc,UAAA,EACbxD,eAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,WAAA,CACb,QAAA,CAAA,CAAAA,eAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,kDAAA,CACb,QAAA,CAAA,CAAAA,eAAAA,CAAC,KAAA,CAAA,CACC,UAAA/D,cAAAA,CAAC,IAAA,CAAA,CAAG,SAAA,CAAU,eAAA,CAAgB,2BAAe,CAAA,CAC7CA,cAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,gCAAgC,QAAA,CAAA,oCAAA,CAAkC,CAAA,CAAA,CACjF,CAAA,CAEA+D,eAAAA,CAAC,UACC,OAAA,CAASuH,EAAAA,CACT,QAAA,CAAUnD,CAAAA,GAAkB,UAC5B,SAAA,CAAU,yKAAA,CAET,QAAA,CAAA,CAAAA,CAAAA,GAAkB,UAAYnI,cAAAA,CAAC8L,CAAAA,CAAA,EAAW,CAAA,CAAK9L,eAACwL,EAAAA,CAAA,EAAW,CAAA,CAAG,qBAAA,CAAA,CAEjE,GACF,CAAA,CAEAzH,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,mDACb,QAAA,CAAA,CAAAA,eAAAA,CAAC,KAAA,CAAA,CACC,QAAA,CAAA,CAAA/D,eAAC,IAAA,CAAA,CAAG,SAAA,CAAU,eAAA,CAAgB,QAAA,CAAA,YAAA,CAAU,EACxCA,cAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,+BAAA,CAAgC,0DAA8C,CAAA,CAAA,CAC7F,CAAA,CAEA+D,eAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,+CAAA,CAAgD,QAAA,CAAA,CAAA,iFAAA,CAE7D/D,cAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,wCAAA,CAChC,QAAA,CAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAAA,CAAA,CAMiB,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAIDuH,CAAAA,GAAc,YACbxD,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,WAAA,CAEb,QAAA,CAAA,CAAAA,eAAAA,CAAC,OAAI,SAAA,CAAU,kDAAA,CACb,QAAA,CAAA,CAAAA,eAAAA,CAAC,KAAA,CAAA,CACC,QAAA,CAAA,CAAA/D,cAAAA,CAAC,IAAA,CAAA,CAAG,SAAA,CAAU,eAAA,CAAgB,QAAA,CAAA,gBAAA,CAAc,CAAA,CAC5CA,cAAAA,CAAC,GAAA,CAAA,CAAE,UAAU,+BAAA,CAAgC,QAAA,CAAA,gDAAA,CAA8C,CAAA,CAAA,CAC7F,CAAA,CACA+D,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,WAAA,CACb,QAAA,CAAA,CAAA/D,cAAAA,CAAC,OAAA,CAAA,CAAM,SAAA,CAAU,qBAAA,CAAsB,QAAA,CAAA,YAAA,CAAU,EACjDA,cAAAA,CAAC,OAAA,CAAA,CACC,IAAA,CAAK,MAAA,CACL,WAAA,CAAY,WAAA,CACZ,KAAA,CAAOqI,EAAAA,CACP,QAAA,CAAW9D,CAAAA,EAAM+D,EAAAA,CAAiB/D,CAAAA,CAAE,MAAA,CAAO,KAAK,EAChD,SAAA,CAAU,oHAAA,CACZ,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAGAR,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kDAAA,CACb,QAAA,CAAA,CAAAA,eAAAA,CAAC,KAAA,CAAA,CACC,QAAA,CAAA,CAAA/D,cAAAA,CAAC,MAAG,SAAA,CAAU,eAAA,CAAgB,QAAA,CAAA,mBAAA,CAAiB,CAAA,CAC/CA,cAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,+BAAA,CAAgC,QAAA,CAAA,0CAAA,CAAwC,CAAA,CAAA,CACvF,CAAA,CAEA+D,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,4BACb,QAAA,CAAA,CAAAA,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,WAAA,CACb,QAAA,CAAA,CAAA/D,cAAAA,CAAC,OAAA,CAAA,CAAM,SAAA,CAAU,qBAAA,CAAsB,QAAA,CAAA,YAAA,CAAU,CAAA,CACjDA,cAAAA,CAAC,QAAA,CAAA,CACC,MAAOyI,CAAAA,CACP,QAAA,CAAWlE,CAAAA,EAAMmE,EAAAA,CAAoBnE,CAAAA,CAAE,MAAA,CAAO,KAAyB,CAAA,CACvE,SAAA,CAAU,0GAAA,CAET,QAAA,CAAA3E,EAAAA,CAAoB,GAAA,CAAKwM,CAAAA,EACxBpM,eAAC,QAAA,CAAA,CAAkB,KAAA,CAAOoM,CAAAA,CAAO,QAAA,CAAAA,CAAAA,CAAAA,CAApBA,CAAyB,CACvC,CAAA,CACH,CAAA,CAAA,CACF,CAAA,CACArI,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,WAAA,CACb,UAAA/D,cAAAA,CAAC,OAAA,CAAA,CAAM,SAAA,CAAU,qBAAA,CAAsB,QAAA,CAAA,QAAA,CAAM,CAAA,CAC7CA,cAAAA,CAAC,OAAA,CAAA,CACC,IAAA,CAAK,QAAA,CACL,WAAA,CAAY,MAAA,CACZ,KAAA,CAAO2I,CAAAA,CACP,SAAWpE,CAAAA,EAAMqE,CAAAA,CAAiBrE,CAAAA,CAAE,MAAA,CAAO,KAAK,CAAA,CAChD,SAAA,CAAU,0GAAA,CACZ,CAAA,CAAA,CACF,CAAA,CACAR,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,WAAA,CACb,UAAA/D,cAAAA,CAAC,OAAA,CAAA,CAAM,SAAA,CAAU,qBAAA,CAAsB,QAAA,CAAA,cAAA,CAAY,CAAA,CACnDA,cAAAA,CAAC,OAAA,CAAA,CACC,WAAA,CAAY,cAAA,CACZ,KAAA,CAAO6I,EAAAA,CACP,QAAA,CAAWtE,CAAAA,EAAMuE,GAAgBvE,CAAAA,CAAE,MAAA,CAAO,KAAK,CAAA,CAC/C,SAAA,CAAU,0GAAA,CACZ,CAAA,CAAA,CACF,CAAA,CACAR,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,WAAA,CACb,QAAA,CAAA,CAAA/D,cAAAA,CAAC,SAAM,SAAA,CAAU,qBAAA,CAAsB,QAAA,CAAA,UAAA,CAAQ,CAAA,CAC/CA,cAAAA,CAAC,QAAA,CAAA,CACC,KAAA,CAAO+I,EAAAA,CACP,QAAA,CAAWxE,CAAAA,EAAMyE,EAAAA,CAAmBzE,CAAAA,CAAE,MAAA,CAAO,KAAsB,EACnE,SAAA,CAAU,0GAAA,CAET,QAAA,CAAA8B,EAAAA,CAAiB,GAAA,CAAKvB,CAAAA,EACrBf,eAAAA,CAAC,QAAA,CAAA,CAAqB,KAAA,CAAOe,CAAAA,CAAE,KAAA,CAAQ,QAAA,CAAA,CAAAA,CAAAA,CAAE,KAAA,CAAM,KAAGA,CAAAA,CAAE,OAAA,CAAQ,GAAA,CAAA,CAAA,CAA/CA,CAAAA,CAAE,KAA8C,CAC9D,CAAA,CACH,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAEAf,eAAAA,CAAC,QAAA,CAAA,CACC,OAAA,CAAS,SAAY,CACnB,IAAMsI,CAAAA,CAAQ1M,EAAAA,CAAgB8I,CAAAA,CAAkB,CAC9C,MAAA,CAAQE,EACR,WAAA,CAAaE,EAAAA,CACb,aAAA,CAAeE,EACjB,CAAC,CAAA,CACKuD,EAAU,IAAA,CAAK,SAAA,CAAUD,CAAAA,CAAO,IAAA,CAAM,CAAC,CAAA,CACvClG,CAAAA,CAAY,MAAML,EAAAA,CAAkB,IAAA,CAAK,SAAA,CAAUuG,CAAK,CAAA,CAAGhE,EAAa,EAC9Ea,EAAAA,CAAoBoD,CAAO,CAAA,CAC3BlD,EAAAA,CAAsBjD,CAAS,CAAA,CAG/B,IAAMoG,CAAAA,CAA6B,CACjC,EAAA,CAAI/N,EAAAA,EAAa,CACjB,SAAA,CAAWiK,CAAAA,CACX,QAAS4D,CAAAA,CACT,SAAA,CAAAlG,CAAAA,CACA,UAAA,CAAY,IAAI,IAAA,EAAK,CAAE,kBAAA,EAAmB,CAC1C,UAAA,CAAY,IACd,CAAA,CACAqC,EAAAA,CAAkBkC,EAAAA,EAAS,CAAC6B,CAAAA,CAAU,GAAG7B,EAAI,CAAA,CAAE,KAAA,CAAM,CAAA,CAAG,EAAE,CAAC,CAAA,CAC3DL,CAAAA,CAAU,kBAAA,CAAoB,SAAA,CAAW,CAAE,SAAA,CAAW5B,EAAkB,OAAA,CAAS4D,CAAAA,CAAM,OAAQ,CAAC,EAClG,CAAA,CACA,SAAA,CAAU,qJAAA,CAEV,QAAA,CAAA,CAAArM,cAAAA,CAAC+L,EAAAA,CAAA,EAAS,CAAA,CAAE,gBAAA,CAAA,CAEd,EAEC9C,EAAAA,EACClF,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,WAAA,CACb,QAAA,CAAA,CAAAA,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,mCAAA,CACb,QAAA,CAAA,CAAA/D,cAAAA,CAAC,OAAA,CAAA,CAAM,SAAA,CAAU,sBAAsB,QAAA,CAAA,mBAAA,CAAiB,CAAA,CACxDA,cAAAA,CAAC,QAAA,CAAA,CACC,OAAA,CAAS,IAAM2D,EAAAA,CAAgBsF,EAAgB,CAAA,CAC/C,SAAA,CAAU,qDAAA,CACX,QAAA,CAAA,MAAA,CAED,CAAA,CAAA,CACF,CAAA,CACAjJ,eAAC,KAAA,CAAA,CAAI,SAAA,CAAU,+CAAA,CACZ,QAAA,CAAAiJ,EAAAA,CACH,CAAA,CACAlF,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yBAAA,CACb,QAAA,CAAA,CAAA/D,cAAAA,CAAC,OAAA,CAAA,CAAM,SAAA,CAAU,sBAAsB,QAAA,CAAA,YAAA,CAAU,CAAA,CACjDA,cAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,6DAAA,CACb,QAAA,CAAAmJ,EAAAA,CACH,CAAA,CACAnJ,cAAAA,CAAC,QAAA,CAAA,CACC,OAAA,CAAS,IAAM2D,EAAAA,CAAgBwF,EAAkB,CAAA,CACjD,SAAA,CAAU,8GAAA,CAEV,QAAA,CAAAnJ,cAAAA,CAACgM,EAAAA,CAAA,EAAS,CAAA,CACZ,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CAEJ,CAAA,CAGAjI,eAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,kDAAA,CACb,QAAA,CAAA,CAAAA,eAAAA,CAAC,KAAA,CAAA,CACC,QAAA,CAAA,CAAA/D,cAAAA,CAAC,IAAA,CAAA,CAAG,SAAA,CAAU,eAAA,CAAgB,QAAA,CAAA,oBAAA,CAAkB,CAAA,CAChDA,cAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,gCAAgC,QAAA,CAAA,qCAAA,CAAmC,CAAA,CAAA,CAClF,CAAA,CAEA+D,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,WAAA,CACb,QAAA,CAAA,CAAAA,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,WAAA,CACb,QAAA,CAAA,CAAA/D,cAAAA,CAAC,SAAM,SAAA,CAAU,qBAAA,CAAsB,QAAA,CAAA,gBAAA,CAAc,CAAA,CACrDA,cAAAA,CAAC,UAAA,CAAA,CACC,WAAA,CAAY,2DAAA,CACZ,KAAA,CAAOqJ,EAAAA,CACP,QAAA,CAAW9E,CAAAA,EAAM+E,EAAAA,CAAiB/E,CAAAA,CAAE,OAAO,KAAK,CAAA,CAChD,IAAA,CAAM,CAAA,CACN,SAAA,CAAU,iIAAA,CACZ,CAAA,CAAA,CACF,CAAA,CACAR,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,2BAAA,CACb,QAAA,CAAA,CAAAA,eAAAA,CAAC,OAAI,SAAA,CAAU,WAAA,CACb,QAAA,CAAA,CAAA/D,cAAAA,CAAC,OAAA,CAAA,CAAM,SAAA,CAAU,qBAAA,CAAsB,QAAA,CAAA,WAAA,CAAS,CAAA,CAChDA,cAAAA,CAAC,OAAA,CAAA,CACC,WAAA,CAAY,uBAAA,CACZ,KAAA,CAAOuJ,GACP,QAAA,CAAWhF,CAAAA,EAAMiF,EAAAA,CAAmBjF,CAAAA,CAAE,MAAA,CAAO,KAAK,EAClD,SAAA,CAAU,oHAAA,CACZ,CAAA,CAAA,CACF,CAAA,CACAR,eAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,WAAA,CACb,QAAA,CAAA,CAAA/D,cAAAA,CAAC,OAAA,CAAA,CAAM,SAAA,CAAU,qBAAA,CAAsB,QAAA,CAAA,QAAA,CAAM,CAAA,CAC7CA,cAAAA,CAAC,OAAA,CAAA,CACC,IAAA,CAAK,UAAA,CACL,WAAA,CAAY,WAAA,CACZ,MAAOyJ,EAAAA,CACP,QAAA,CAAWlF,CAAAA,EAAMmF,EAAAA,CAAgBnF,CAAAA,CAAE,MAAA,CAAO,KAAK,CAAA,CAC/C,SAAA,CAAU,oHAAA,CACZ,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAEAR,eAAAA,CAAC,UACC,OAAA,CAAS,SAAY,CACnB,GAAI,CACF,IAAMyI,CAAAA,CAAgB,IAAA,CAAK,KAAA,CAAMnD,EAAa,CAAA,CACxCoD,CAAAA,CAAoB,MAAM3G,EAAAA,CAAkB,KAAK,SAAA,CAAU0G,CAAa,CAAA,CAAG/C,EAAY,CAAA,CACvFiD,CAAAA,CAAUD,CAAAA,GAAsBlD,EAAAA,CACtCK,EAAAA,CAAgB8C,CAAO,CAAA,CACvBrC,CAAAA,CAAU,kBAAA,CAAoBqC,CAAAA,CAAU,UAAY,OAAA,CAAS,CAC3D,OAAA,CAAAA,CAAAA,CACA,QAAA,CAAUD,CAAAA,CACV,QAAA,CAAUlD,EACZ,CAAC,EACH,CAAA,KAAQ,CACNK,EAAAA,CAAgB,KAAK,EACrBS,CAAAA,CAAU,kBAAA,CAAoB,OAAA,CAAS,MAAA,CAAW,sBAAsB,EAC1E,CACF,CAAA,CACA,SAAA,CAAU,qJAAA,CAEV,QAAA,CAAA,CAAArK,cAAAA,CAAC2M,EAAAA,CAAA,EAAW,EAAE,kBAAA,CAAA,CAEhB,CAAA,CAEChD,EAAAA,GAAiB,IAAA,EAChB5F,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAW,CAAA,oCAAA,EACd4F,EAAAA,CAAe,mEAAA,CAAsE,2DACvF,CAAA,CAAA,CACG,QAAA,CAAA,CAAAA,EAAAA,CAAe3J,eAAC4M,EAAAA,CAAA,CAAU,SAAA,CAAU,gBAAA,CAAiB,CAAA,CAAK5M,cAAAA,CAAC6M,EAAAA,CAAA,CAAM,SAAA,CAAU,cAAA,CAAe,CAAA,CAC1FlD,EAAAA,CAAe,oBAAA,CAAuB,sBAAA,CAAA,CACzC,GAEJ,CAAA,CAAA,CACF,CAAA,CAGA5F,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kDAAA,CACb,QAAA,CAAA,CAAAA,eAAAA,CAAC,KAAA,CAAA,CACC,QAAA,CAAA,CAAA/D,cAAAA,CAAC,IAAA,CAAA,CAAG,SAAA,CAAU,eAAA,CAAgB,wBAAY,CAAA,CAC1CA,cAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,+BAAA,CAAgC,QAAA,CAAA,oCAAA,CAAkC,CAAA,CAAA,CACjF,CAAA,CAEA+D,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,WAAA,CACb,QAAA,CAAA,CAAAA,eAAAA,CAAC,OAAI,SAAA,CAAU,WAAA,CACb,QAAA,CAAA,CAAA/D,cAAAA,CAAC,OAAA,CAAA,CAAM,SAAA,CAAU,qBAAA,CAAsB,QAAA,CAAA,UAAA,CAAQ,CAAA,CAC/CA,cAAAA,CAAC,UAAA,CAAA,CACC,WAAA,CAAY,4BAAA,CACZ,KAAA,CAAO6J,GACP,QAAA,CAAWtF,CAAAA,EAAMuF,EAAAA,CAAcvF,CAAAA,CAAE,MAAA,CAAO,KAAK,CAAA,CAC7C,IAAA,CAAM,CAAA,CACN,SAAA,CAAU,iIAAA,CACZ,CAAA,CAAA,CACF,CAAA,CAEAR,eAAAA,CAAC,UACC,OAAA,CAAS,IAAM,CACb,GAAI,CACF,IAAM+I,CAAAA,CAAS,IAAA,CAAK,KAAA,CAAMjD,EAAU,CAAA,CACpCG,EAAAA,CAAe8C,CAAM,CAAA,CACrB5C,GAAc,EAAE,CAAA,CAChBG,CAAAA,CAAU,aAAA,CAAe,SAAA,CAAW,CAAE,SAAA,CAAWyC,CAAAA,CAAO,SAAA,CAAW,OAAA,CAASA,CAAAA,CAAO,OAAQ,CAAC,EAC9F,OAASvI,CAAAA,CAAG,CACVyF,EAAAA,CAAe,IAAI,CAAA,CACnBE,EAAAA,CAAc3F,CAAAA,YAAa,KAAA,CAAQA,CAAAA,CAAE,OAAA,CAAU,cAAc,CAAA,CAC7D8F,CAAAA,CAAU,aAAA,CAAe,QAAS,MAAA,CAAW,cAAc,EAC7D,CACF,CAAA,CACA,SAAA,CAAU,qJAAA,CAEV,QAAA,CAAA,CAAArK,cAAAA,CAAC+M,EAAAA,CAAA,EAAS,CAAA,CAAE,aAAA,CAAA,CAEd,CAAA,CAEC9C,IACCjK,cAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,uEAAA,CACZ,QAAA,CAAAiK,EAAAA,CACH,CAAA,CAGDF,CAAAA,EACChG,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,WAAA,CACb,QAAA,CAAA,CAAAA,eAAAA,CAAC,OAAI,SAAA,CAAU,gCAAA,CACb,QAAA,CAAA,CAAAA,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,cAAA,CACb,QAAA,CAAA,CAAA/D,cAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,uBAAA,CAAwB,QAAA,CAAA,WAAA,CAAS,CAAA,CACjDA,eAAC,GAAA,CAAA,CAAE,SAAA,CAAU,oBAAA,CAAsB,QAAA,CAAA,MAAA,CAAO+J,CAAAA,CAAY,OAAA,EAAW,KAAK,CAAA,CAAE,CAAA,CAAA,CAC1E,CAAA,CACAhG,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,cAAA,CACb,UAAA/D,cAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,uBAAA,CAAwB,QAAA,CAAA,aAAA,CAAW,CAAA,CACnDA,cAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,aAAA,CAAe,QAAA,CAAA,MAAA,CAAO+J,CAAAA,CAAY,SAAA,EAAa,KAAK,EAAE,CAAA,CAAA,CACrE,CAAA,CACAhG,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,cAAA,CACb,QAAA,CAAA,CAAA/D,cAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,uBAAA,CAAwB,QAAA,CAAA,YAAA,CAAU,CAAA,CAClDA,cAAAA,CAAC,KAAE,SAAA,CAAU,oBAAA,CAAsB,QAAA,CAAA,MAAA,CAAO+J,CAAAA,CAAY,SAAA,EAAa,KAAK,CAAA,CAAE,CAAA,CAAA,CAC5E,CAAA,CACAhG,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,cAAA,CACb,QAAA,CAAA,CAAA/D,eAAC,MAAA,CAAA,CAAK,SAAA,CAAU,uBAAA,CAAwB,QAAA,CAAA,SAAA,CAAO,CAAA,CAC/CA,cAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,aAAA,CAAe,QAAA,CAAA,MAAA,CAAQ+J,CAAAA,CAAY,IAAA,EAAkC,MAAA,EAAU,KAAK,EAAE,CAAA,CAAA,CACrG,CAAA,CAAA,CACF,CAAA,CACAhG,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,WAAA,CACb,QAAA,CAAA,CAAA/D,cAAAA,CAAC,OAAA,CAAA,CAAM,SAAA,CAAU,qBAAA,CAAsB,QAAA,CAAA,WAAA,CAAS,CAAA,CAChDA,eAAC,KAAA,CAAA,CAAI,SAAA,CAAU,+CAAA,CACZ,QAAA,CAAA,IAAA,CAAK,SAAA,CAAU+J,CAAAA,CAAa,IAAA,CAAM,CAAC,CAAA,CACtC,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CAEJ,CAAA,CAAA,CACF,CAAA,CAGAhG,gBAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kDAAA,CACb,QAAA,CAAA,CAAAA,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,mCAAA,CACb,QAAA,CAAA,CAAAA,eAAAA,CAAC,KAAA,CAAA,CACC,QAAA,CAAA,CAAA/D,cAAAA,CAAC,IAAA,CAAA,CAAG,UAAU,eAAA,CAAgB,QAAA,CAAA,WAAA,CAAS,CAAA,CACvCA,cAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,+BAAA,CAAgC,QAAA,CAAA,qCAAA,CAAmC,CAAA,CAAA,CAClF,CAAA,CACA+D,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yBAAA,CACb,UAAAA,eAAAA,CAAC,QAAA,CAAA,CACC,KAAA,CAAOoG,CAAAA,CACP,QAAA,CAAW5F,CAAAA,EAAM6F,EAAAA,CAAkB7F,CAAAA,CAAE,MAAA,CAAO,KAAgD,CAAA,CAC5F,SAAA,CAAU,iGAAA,CAEV,QAAA,CAAA,CAAAvE,eAAC,QAAA,CAAA,CAAO,KAAA,CAAM,KAAA,CAAM,QAAA,CAAA,KAAA,CAAG,CAAA,CACvBA,cAAAA,CAAC,QAAA,CAAA,CAAO,KAAA,CAAM,SAAA,CAAU,QAAA,CAAA,UAAA,CAAQ,CAAA,CAChCA,cAAAA,CAAC,QAAA,CAAA,CAAO,KAAA,CAAM,SAAS,QAAA,CAAA,SAAA,CAAO,CAAA,CAC9BA,cAAAA,CAAC,QAAA,CAAA,CAAO,KAAA,CAAM,QAAA,CAAS,QAAA,CAAA,SAAA,CAAO,CAAA,CAAA,CAChC,CAAA,CACCuI,CAAAA,CAAc,MAAA,CAAS,CAAA,EACtBvI,cAAAA,CAAC,QAAA,CAAA,CACC,QAAS,IAAMwI,EAAAA,CAAiB,EAAE,CAAA,CAClC,SAAA,CAAU,qDAAA,CACX,QAAA,CAAA,OAAA,CAED,CAAA,CAAA,CAEJ,CAAA,CAAA,CACF,CAAA,CAEAxI,cAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kDACZ,QAAA,CAAAuI,CAAAA,CACE,MAAA,CAAQ8D,CAAAA,EAAUlC,CAAAA,GAAmB,KAAA,EAASkC,EAAM,SAAA,CAAU,UAAA,CAAWlC,CAAc,CAAC,CAAA,CACxF,MAAA,GAAW,EACZnK,cAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,+CAAA,CAAgD,QAAA,CAAA,yDAAA,CAE/D,CAAA,CAEAuI,CAAAA,CACG,MAAA,CAAQ8D,CAAAA,EAAUlC,CAAAA,GAAmB,KAAA,EAASkC,CAAAA,CAAM,SAAA,CAAU,UAAA,CAAWlC,CAAc,CAAC,CAAA,CACxF,GAAA,CAAKkC,CAAAA,EACJtI,eAAAA,CAAC,KAAA,CAAA,CAAmB,SAAA,CAAU,gBAAA,CAC5B,QAAA,CAAA,CAAAA,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,mCAAA,CACb,QAAA,CAAA,CAAA/D,eAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yBAAA,CACb,QAAA,CAAAA,cAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAW,CAAA,kCAAA,EACfqM,CAAAA,CAAM,SAAA,CAAU,QAAA,CAAS,WAAW,CAAA,CAAI,mEAAA,CACxCA,EAAM,SAAA,CAAU,QAAA,CAAS,QAAQ,CAAA,CAAI,2DAAA,CACrC,+DACF,CAAA,CAAA,CACG,QAAA,CAAAA,CAAAA,CAAM,SAAA,CACT,CAAA,CACF,CAAA,CACArM,cAAAA,CAAC,MAAA,CAAA,CAAK,UAAU,+BAAA,CAAiC,QAAA,CAAAqM,CAAAA,CAAM,UAAA,CAAW,CAAA,CAAA,CACpE,CAAA,CACAtI,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kDAAA,CAAmD,QAAA,CAAA,CAAA,OAAA,CAC1DsI,CAAAA,CAAM,SAAA,CAAU,KAAA,CAAM,EAAG,EAAE,CAAA,CAAE,KAAA,CAAA,CACrC,CAAA,CAAA,CAAA,CAfQA,CAAAA,CAAM,EAgBhB,CACD,CAAA,CAEP,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CAEJ,CAAA,CAGAtI,eAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,WAAA,CACb,QAAA,CAAA,CAAAA,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,mCAAA,CACb,QAAA,CAAA,CAAA/D,cAAAA,CAAC,IAAA,CAAA,CAAG,SAAA,CAAU,eAAA,CAAgB,QAAA,CAAA,SAAA,CAAO,CAAA,CACpCiI,CAAAA,CAAQ,OAAS,CAAA,EAChBjI,cAAAA,CAAC,QAAA,CAAA,CACC,OAAA,CAAS,IAAMkI,CAAAA,CAAW,EAAE,CAAA,CAC5B,SAAA,CAAU,qDAAA,CACX,QAAA,CAAA,OAAA,CAED,CAAA,CAAA,CAEJ,CAAA,CAEAlI,eAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yFAAA,CACZ,QAAA,CAAAiI,CAAAA,CAAQ,MAAA,GAAW,CAAA,CAClBjI,cAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,+CAAA,CAAgD,QAAA,CAAA,2DAAA,CAE/D,CAAA,CAEAiI,CAAAA,CAAQ,IAAKwC,CAAAA,EACX1G,eAAAA,CAAC,KAAA,CAAA,CAAoB,SAAA,CAAU,eAAA,CAC7B,QAAA,CAAA,CAAAA,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,mCAAA,CACb,QAAA,CAAA,CAAAA,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,0BACZ,QAAA,CAAA,CAAA0G,CAAAA,CAAO,MAAA,GAAW,SAAA,CACjBzK,cAAAA,CAAC4M,EAAAA,CAAA,CAAU,SAAA,CAAU,gBAAA,CAAiB,CAAA,CAEtC5M,cAAAA,CAAC6M,EAAAA,CAAA,CAAM,SAAA,CAAU,eAAe,CAAA,CAElC7M,cAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,qBAAA,CAAuB,QAAA,CAAAyK,CAAAA,CAAO,SAAA,CAAU,CAAA,CAAA,CAC1D,CAAA,CACAzK,cAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,+BAAA,CAAiC,SAAAyK,CAAAA,CAAO,SAAA,CAAU,CAAA,CAAA,CACpE,CAAA,CAECA,CAAAA,CAAO,KAAA,CACNzK,cAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,sBAAA,CAAwB,QAAA,CAAAyK,CAAAA,CAAO,KAAA,CAAM,CAAA,CAElDzK,eAAC,KAAA,CAAA,CAAI,SAAA,CAAU,+CAAA,CACZ,QAAA,CAAA,IAAA,CAAK,SAAA,CAAUyK,CAAAA,CAAO,QAAA,CAAU,IAAA,CAAM,CAAC,CAAA,CAC1C,CAAA,CAAA,CAAA,CAlBMA,CAAAA,CAAO,EAoBjB,CACD,EAEL,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAj2BE1G,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAW,CAAA,UAAA,EAAa9C,CAAS,CAAA,CAAA,CACpC,QAAA,CAAA,CAAA8C,eAAAA,CAAC,KAAA,CAAA,CACC,QAAA,CAAA,CAAA/D,eAAC,IAAA,CAAA,CAAG,SAAA,CAAU,mCAAA,CAAoC,QAAA,CAAA,oBAAA,CAAkB,CAAA,CACpEA,cAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,4BAAA,CAA6B,QAAA,CAAA,oDAAA,CAE1C,CAAA,CAAA,CACF,CAAA,CAEA+D,eAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,2DAAA,CACb,QAAA,CAAA,CAAAA,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yBAAA,CACb,QAAA,CAAA,CAAA/D,cAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,qDAAA,CACb,QAAA,CAAAA,cAAAA,CAACuL,EAAAA,CAAA,EAAa,CAAA,CAChB,CAAA,CACAxH,eAAAA,CAAC,KAAA,CAAA,CACC,QAAA,CAAA,CAAA/D,cAAAA,CAAC,IAAA,CAAA,CAAG,SAAA,CAAU,eAAA,CAAgB,QAAA,CAAA,mBAAA,CAAiB,CAAA,CAC/CA,cAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,gCAAgC,QAAA,CAAA,4BAAA,CAA0B,CAAA,CAAA,CACzE,CAAA,CAAA,CACF,CAAA,CAEA+D,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,WAAA,CACb,QAAA,CAAA,CAAAA,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,WAAA,CACb,QAAA,CAAA,CAAA/D,eAAC,OAAA,CAAA,CAAM,SAAA,CAAU,qBAAA,CAAsB,QAAA,CAAA,SAAA,CAAO,CAAA,CAC9CA,cAAAA,CAAC,OAAA,CAAA,CACC,IAAA,CAAK,UAAA,CACL,WAAA,CAAY,gBAAA,CACZ,KAAA,CAAO+G,CAAAA,CACP,QAAA,CAAWxC,GAAMyC,CAAAA,CAAUzC,CAAAA,CAAE,MAAA,CAAO,KAAK,CAAA,CACzC,SAAA,CAAU,0GAAA,CACZ,CAAA,CAAA,CACF,CAAA,CAEAR,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,WAAA,CACb,QAAA,CAAA,CAAA/D,eAAC,OAAA,CAAA,CAAM,SAAA,CAAU,qBAAA,CAAsB,QAAA,CAAA,eAAA,CAAa,CAAA,CACpD+D,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,YAAA,CACb,QAAA,CAAA,CAAAA,eAAAA,CAAC,QAAA,CAAA,CACC,OAAA,CAAS,IAAMmD,EAAe,SAAS,CAAA,CACvC,SAAA,CAAW,CAAA,gFAAA,EACTD,CAAAA,GAAgB,SAAA,CACZ,wCAAA,CACA,4CACN,CAAA,CAAA,CAEA,QAAA,CAAA,CAAAjH,cAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAW,CAAA,qBAAA,EAAwBiH,IAAgB,SAAA,CAAY,aAAA,CAAgB,aAAa,CAAA,CAAA,CAAI,CAAA,CAAE,SAAA,CAAA,CAE1G,CAAA,CACAlD,eAAAA,CAAC,QAAA,CAAA,CACC,OAAA,CAAS,IAAMmD,CAAAA,CAAe,YAAY,CAAA,CAC1C,UAAW,CAAA,gFAAA,EACTD,CAAAA,GAAgB,YAAA,CACZ,0CAAA,CACA,4CACN,CAAA,CAAA,CAEA,QAAA,CAAA,CAAAjH,cAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAW,CAAA,qBAAA,EAAwBiH,CAAAA,GAAgB,YAAA,CAAe,cAAA,CAAiB,cAAc,CAAA,CAAA,CAAI,CAAA,CAAE,YAAA,CAAA,CAE/G,CAAA,CAAA,CACF,CAAA,CACAjH,cAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,+BAAA,CACV,QAAA,CAAAiH,CAAAA,GAAgB,SAAA,CACb,qDAAA,CACA,4DAAA,CAEN,GACF,CAAA,CAEAlD,eAAAA,CAAC,QAAA,CAAA,CACC,OAAA,CAAS4G,EAAAA,CACT,SAAA,CAAU,qJAAA,CAEV,QAAA,CAAA,CAAA3K,cAAAA,CAAC+L,EAAAA,CAAA,EAAS,CAAA,CAAE,gBAAA,CAAA,CAEd,CAAA,CAEAhI,gBAAC,KAAA,CAAA,CAAI,SAAA,CAAU,iCAAA,CACb,QAAA,CAAA,CAAA/D,cAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kCAAA,CAAmC,CAAA,CAClDA,cAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,gDAAA,CAAiD,QAAA,CAAA,IAAA,CAAE,EACnEA,cAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kCAAA,CAAmC,CAAA,CAAA,CACpD,CAAA,CAEA+D,eAAAA,CAAC,QAAA,CAAA,CACC,OAAA,CAAS6G,EAAAA,CACT,SAAA,CAAU,gJAAA,CAEV,QAAA,CAAA,CAAA5K,cAAAA,CAACgN,GAAA,EAAW,CAAA,CAAE,6BAAA,CAAA,CAEhB,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CA2wBN,CAGA,IAAMzB,EAAAA,CAAe,IACnBxH,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,UAAU,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,cAAA,CAAe,OAAA,CAAQ,WAAA,CACjE,QAAA,CAAA,CAAA/D,cAAAA,CAAC,MAAA,CAAA,CAAK,aAAA,CAAc,OAAA,CAAQ,cAAA,CAAe,OAAA,CAAQ,WAAA,CAAa,EAAG,CAAA,CAAE,qeAAA,CAAse,CAAA,CAC3iBA,cAAAA,CAAC,MAAA,CAAA,CAAK,aAAA,CAAc,QAAQ,cAAA,CAAe,OAAA,CAAQ,WAAA,CAAa,CAAA,CAAG,CAAA,CAAE,kCAAA,CAAmC,GAC1G,CAAA,CAGI+L,EAAAA,CAAW,IACfhI,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,SAAA,CAAU,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,cAAA,CAAe,OAAA,CAAQ,WAAA,CACjE,QAAA,CAAA,CAAA/D,eAAC,MAAA,CAAA,CAAK,aAAA,CAAc,OAAA,CAAQ,cAAA,CAAe,OAAA,CAAQ,WAAA,CAAa,CAAA,CAAG,CAAA,CAAE,kGAAA,CAAmG,CAAA,CACxKA,cAAAA,CAAC,MAAA,CAAA,CAAK,aAAA,CAAc,OAAA,CAAQ,eAAe,OAAA,CAAQ,WAAA,CAAa,CAAA,CAAG,CAAA,CAAE,oCAAA,CAAqC,CAAA,CAAA,CAC5G,CAAA,CAGIwL,EAAAA,CAAa,IACjBxL,cAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,SAAA,CAAU,IAAA,CAAK,OAAO,MAAA,CAAO,cAAA,CAAe,OAAA,CAAQ,WAAA,CACjE,QAAA,CAAAA,cAAAA,CAAC,MAAA,CAAA,CAAK,aAAA,CAAc,OAAA,CAAQ,cAAA,CAAe,OAAA,CAAQ,WAAA,CAAa,CAAA,CAAG,CAAA,CAAE,yFAAyF,CAAA,CAChK,CAAA,CAGIyL,EAAAA,CAAY,IAChBzL,cAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,SAAA,CAAU,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,cAAA,CAAe,OAAA,CAAQ,WAAA,CACjE,SAAAA,cAAAA,CAAC,MAAA,CAAA,CAAK,aAAA,CAAc,OAAA,CAAQ,cAAA,CAAe,OAAA,CAAQ,WAAA,CAAa,CAAA,CAAG,CAAA,CAAE,6EAAA,CAA8E,CAAA,CACrJ,CAAA,CAGI0L,EAAAA,CAAc,IAClB1L,eAAC,KAAA,CAAA,CAAI,SAAA,CAAU,SAAA,CAAU,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,cAAA,CAAe,OAAA,CAAQ,WAAA,CACjE,QAAA,CAAAA,cAAAA,CAAC,MAAA,CAAA,CAAK,aAAA,CAAc,OAAA,CAAQ,eAAe,OAAA,CAAQ,WAAA,CAAa,CAAA,CAAG,CAAA,CAAE,6GAAA,CAA8G,CAAA,CACrL,CAAA,CAGI8L,CAAAA,CAAa,IACjB9L,cAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,sBAAA,CAAuB,IAAA,CAAK,OAAO,MAAA,CAAO,cAAA,CAAe,OAAA,CAAQ,WAAA,CAC9E,QAAA,CAAAA,cAAAA,CAAC,MAAA,CAAA,CAAK,aAAA,CAAc,OAAA,CAAQ,cAAA,CAAe,OAAA,CAAQ,WAAA,CAAa,CAAA,CAAG,CAAA,CAAE,kHAAkH,CAAA,CACzL,CAAA,CAGIgM,EAAAA,CAAW,IACfhM,cAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,SAAA,CAAU,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,cAAA,CAAe,OAAA,CAAQ,WAAA,CACjE,SAAAA,cAAAA,CAAC,MAAA,CAAA,CAAK,aAAA,CAAc,OAAA,CAAQ,cAAA,CAAe,OAAA,CAAQ,WAAA,CAAa,CAAA,CAAG,CAAA,CAAE,uHAAA,CAAwH,CAAA,CAC/L,CAAA,CAGI4M,EAAAA,CAAY,CAAC,CAAE,SAAA,CAAA3L,CAAAA,CAAY,EAAG,CAAA,GAClCjB,cAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAW,CAAA,QAAA,EAAWiB,CAAS,CAAA,CAAA,CAAI,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,cAAA,CAAe,QAAQ,WAAA,CAChF,QAAA,CAAAjB,cAAAA,CAAC,MAAA,CAAA,CAAK,aAAA,CAAc,OAAA,CAAQ,cAAA,CAAe,OAAA,CAAQ,WAAA,CAAa,CAAA,CAAG,CAAA,CAAE,+CAAA,CAAgD,CAAA,CACvH,CAAA,CAGI6M,GAAQ,CAAC,CAAE,SAAA,CAAA5L,CAAAA,CAAY,EAAG,CAAA,GAC9BjB,cAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAW,CAAA,QAAA,EAAWiB,CAAS,CAAA,CAAA,CAAI,IAAA,CAAK,MAAA,CAAO,OAAO,cAAA,CAAe,OAAA,CAAQ,WAAA,CAChF,QAAA,CAAAjB,cAAAA,CAAC,MAAA,CAAA,CAAK,aAAA,CAAc,OAAA,CAAQ,cAAA,CAAe,OAAA,CAAQ,WAAA,CAAa,CAAA,CAAG,CAAA,CAAE,sEAAA,CAAuE,EAC9I,CAAA,CAGIgN,EAAAA,CAAa,IACjBhN,cAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,SAAA,CAAU,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,cAAA,CAAe,OAAA,CAAQ,WAAA,CACjE,QAAA,CAAAA,eAAC,MAAA,CAAA,CAAK,aAAA,CAAc,OAAA,CAAQ,cAAA,CAAe,OAAA,CAAQ,WAAA,CAAa,CAAA,CAAG,CAAA,CAAE,uQAAA,CAAwQ,CAAA,CAC/U,CAAA,CAGI2L,EAAAA,CAAc,IAClB5H,eAAAA,CAAC,OAAI,SAAA,CAAU,SAAA,CAAU,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,cAAA,CAAe,OAAA,CAAQ,WAAA,CACjE,QAAA,CAAA,CAAA/D,cAAAA,CAAC,MAAA,CAAA,CAAK,aAAA,CAAc,OAAA,CAAQ,cAAA,CAAe,QAAQ,WAAA,CAAa,CAAA,CAAG,CAAA,CAAE,qeAAA,CAAse,CAAA,CAC3iBA,cAAAA,CAAC,MAAA,CAAA,CAAK,aAAA,CAAc,OAAA,CAAQ,cAAA,CAAe,OAAA,CAAQ,WAAA,CAAa,CAAA,CAAG,CAAA,CAAE,mCAAmC,CAAA,CAAA,CAC1G,CAAA,CAGI4L,EAAAA,CAAY,IAChB5L,cAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,SAAA,CAAU,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,cAAA,CAAe,OAAA,CAAQ,WAAA,CACjE,SAAAA,cAAAA,CAAC,MAAA,CAAA,CAAK,aAAA,CAAc,OAAA,CAAQ,cAAA,CAAe,OAAA,CAAQ,WAAA,CAAa,CAAA,CAAG,CAAA,CAAE,sMAAA,CAAuM,CAAA,CAC9Q,CAAA,CAGIiM,EAAAA,CAAa,IACjBjM,eAAC,KAAA,CAAA,CAAI,SAAA,CAAU,SAAA,CAAU,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,cAAA,CAAe,OAAA,CAAQ,WAAA,CACjE,QAAA,CAAAA,cAAAA,CAAC,MAAA,CAAA,CAAK,aAAA,CAAc,OAAA,CAAQ,eAAe,OAAA,CAAQ,WAAA,CAAa,CAAA,CAAG,CAAA,CAAE,6CAAA,CAA8C,CAAA,CACrH,CAAA,CAGIkM,EAAAA,CAAa,IACjBlM,cAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,SAAA,CAAU,IAAA,CAAK,OAAO,MAAA,CAAO,cAAA,CAAe,OAAA,CAAQ,WAAA,CACjE,QAAA,CAAAA,cAAAA,CAAC,MAAA,CAAA,CAAK,aAAA,CAAc,OAAA,CAAQ,cAAA,CAAe,OAAA,CAAQ,WAAA,CAAa,CAAA,CAAG,CAAA,CAAE,0IAA0I,CAAA,CACjN,CAAA,CAGImM,EAAAA,CAAU,IACdnM,cAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,SAAA,CAAU,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,cAAA,CAAe,OAAA,CAAQ,WAAA,CACjE,SAAAA,cAAAA,CAAC,MAAA,CAAA,CAAK,aAAA,CAAc,OAAA,CAAQ,cAAA,CAAe,OAAA,CAAQ,WAAA,CAAa,CAAA,CAAG,CAAA,CAAE,4HAAA,CAA6H,CAAA,CACpM,CAAA,CAGI6L,EAAAA,CAAc,IAClB7L,eAAC,KAAA,CAAA,CAAI,SAAA,CAAU,SAAA,CAAU,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,cAAA,CAAe,OAAA,CAAQ,WAAA,CACjE,QAAA,CAAAA,cAAAA,CAAC,MAAA,CAAA,CAAK,aAAA,CAAc,OAAA,CAAQ,eAAe,OAAA,CAAQ,WAAA,CAAa,CAAA,CAAG,CAAA,CAAE,4BAAA,CAA6B,CAAA,CACpG,CAAA,CAGI2M,EAAAA,CAAa,IACjB3M,cAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,SAAA,CAAU,IAAA,CAAK,OAAO,MAAA,CAAO,cAAA,CAAe,OAAA,CAAQ,WAAA,CACjE,QAAA,CAAAA,cAAAA,CAAC,MAAA,CAAA,CAAK,aAAA,CAAc,OAAA,CAAQ,cAAA,CAAe,OAAA,CAAQ,WAAA,CAAa,CAAA,CAAG,CAAA,CAAE,iMAAiM,CAAA,CACxQ,CAAA,CAGI+M,EAAAA,CAAW,IACf/M,cAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,SAAA,CAAU,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,cAAA,CAAe,OAAA,CAAQ,WAAA,CACjE,SAAAA,cAAAA,CAAC,MAAA,CAAA,CAAK,aAAA,CAAc,OAAA,CAAQ,cAAA,CAAe,OAAA,CAAQ,WAAA,CAAa,CAAA,CAAG,CAAA,CAAE,uCAAA,CAAwC,CAAA,CAC/G,CAAA,CAGKiN,EAAAA,CAAQ1G","file":"react.js","sourcesContent":["import type {\n WebhookEventType,\n PawapayWebhookEvent,\n DepositCallbackData,\n PayoutCallbackData,\n} from '../types/webhooks';\nimport type { Correspondent } from '../constants/correspondents';\n\nexport interface WebhookGeneratorOptions {\n transactionId?: string;\n amount?: string;\n currency?: string;\n correspondent?: Correspondent;\n phoneNumber?: string;\n status?: 'COMPLETED' | 'FAILED';\n failureCode?: string;\n failureMessage?: string;\n}\n\nconst generateUUID = (): string => {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n};\n\nexport function generateDepositWebhook(\n eventType: 'deposit.accepted' | 'deposit.completed' | 'deposit.failed',\n options: WebhookGeneratorOptions = {}\n): PawapayWebhookEvent<DepositCallbackData> {\n const {\n transactionId = generateUUID(),\n amount = '5000',\n currency = 'XAF',\n correspondent = 'MTN_MOMO_CMR',\n phoneNumber = '237670000000',\n status = eventType === 'deposit.failed' ? 'FAILED' : 'COMPLETED',\n failureCode = 'INSUFFICIENT_FUNDS',\n failureMessage = 'The payer has insufficient funds',\n } = options;\n\n const now = new Date().toISOString();\n\n const data: DepositCallbackData = {\n depositId: transactionId,\n status,\n amount,\n currency,\n correspondent,\n payer: {\n type: 'MSISDN',\n address: {\n value: phoneNumber,\n },\n },\n customerTimestamp: now,\n created: now,\n };\n\n if (status === 'COMPLETED') {\n data.receivedByPayer = now;\n }\n\n if (status === 'FAILED') {\n data.failureReason = {\n failureCode,\n failureMessage,\n };\n }\n\n return {\n eventId: generateUUID(),\n eventType,\n timestamp: now,\n data,\n };\n}\n\nexport function generatePayoutWebhook(\n eventType: 'payout.accepted' | 'payout.completed' | 'payout.failed',\n options: WebhookGeneratorOptions = {}\n): PawapayWebhookEvent<PayoutCallbackData> {\n const {\n transactionId = generateUUID(),\n amount = '5000',\n currency = 'XAF',\n correspondent = 'MTN_MOMO_CMR',\n phoneNumber = '237670000000',\n status = eventType === 'payout.failed' ? 'FAILED' : 'COMPLETED',\n failureCode = 'RECIPIENT_NOT_FOUND',\n failureMessage = 'The recipient account was not found',\n } = options;\n\n const now = new Date().toISOString();\n\n const data: PayoutCallbackData = {\n payoutId: transactionId,\n status,\n amount,\n currency,\n correspondent,\n recipient: {\n type: 'MSISDN',\n address: {\n value: phoneNumber,\n },\n },\n customerTimestamp: now,\n created: now,\n };\n\n if (status === 'COMPLETED') {\n data.receivedByRecipient = now;\n }\n\n if (status === 'FAILED') {\n data.failureReason = {\n failureCode,\n failureMessage,\n };\n }\n\n return {\n eventId: generateUUID(),\n eventType,\n timestamp: now,\n data,\n };\n}\n\nexport interface RefundCallbackData {\n refundId: string;\n depositId: string;\n status: 'COMPLETED' | 'FAILED';\n amount: string;\n currency: string;\n correspondent: string;\n recipient: {\n type: string;\n address: {\n value: string;\n };\n };\n created: string;\n failureReason?: {\n failureCode: string;\n failureMessage: string;\n };\n}\n\nexport function generateRefundWebhook(\n eventType: 'refund.completed' | 'refund.failed',\n options: WebhookGeneratorOptions & { depositId?: string } = {}\n): PawapayWebhookEvent<RefundCallbackData> {\n const {\n transactionId = generateUUID(),\n depositId = generateUUID(),\n amount = '5000',\n currency = 'XAF',\n correspondent = 'MTN_MOMO_CMR',\n phoneNumber = '237670000000',\n status = eventType === 'refund.failed' ? 'FAILED' : 'COMPLETED',\n failureCode = 'REFUND_LIMIT_EXCEEDED',\n failureMessage = 'The refund limit has been exceeded',\n } = options;\n\n const now = new Date().toISOString();\n\n const data: RefundCallbackData = {\n refundId: transactionId,\n depositId,\n status,\n amount,\n currency,\n correspondent,\n recipient: {\n type: 'MSISDN',\n address: {\n value: phoneNumber,\n },\n },\n created: now,\n };\n\n if (status === 'FAILED') {\n data.failureReason = {\n failureCode,\n failureMessage,\n };\n }\n\n return {\n eventId: generateUUID(),\n eventType,\n timestamp: now,\n data,\n };\n}\n\nexport type MockWebhookEvent =\n | PawapayWebhookEvent<DepositCallbackData>\n | PawapayWebhookEvent<PayoutCallbackData>\n | PawapayWebhookEvent<RefundCallbackData>;\n\nexport function generateWebhook(\n eventType: WebhookEventType,\n options: WebhookGeneratorOptions & { depositId?: string } = {}\n): MockWebhookEvent {\n if (eventType.startsWith('deposit.')) {\n return generateDepositWebhook(\n eventType as 'deposit.accepted' | 'deposit.completed' | 'deposit.failed',\n options\n );\n }\n\n if (eventType.startsWith('payout.')) {\n return generatePayoutWebhook(\n eventType as 'payout.accepted' | 'payout.completed' | 'payout.failed',\n options\n );\n }\n\n return generateRefundWebhook(\n eventType as 'refund.completed' | 'refund.failed',\n options\n );\n}\n\nexport const WEBHOOK_EVENT_TYPES: WebhookEventType[] = [\n 'deposit.accepted',\n 'deposit.completed',\n 'deposit.failed',\n 'payout.accepted',\n 'payout.completed',\n 'payout.failed',\n 'refund.completed',\n 'refund.failed',\n];\n\nexport const FAILURE_CODES = {\n deposit: [\n { code: 'INSUFFICIENT_FUNDS', message: 'The payer has insufficient funds' },\n { code: 'INVALID_PHONE_NUMBER', message: 'The phone number is invalid' },\n { code: 'TIMEOUT', message: 'The transaction timed out' },\n { code: 'RECIPIENT_NOT_REGISTERED', message: 'The recipient is not registered for mobile money' },\n { code: 'DECLINED', message: 'The transaction was declined by the payer' },\n ],\n payout: [\n { code: 'RECIPIENT_NOT_FOUND', message: 'The recipient account was not found' },\n { code: 'RECIPIENT_NOT_REGISTERED', message: 'The recipient is not registered for mobile money' },\n { code: 'INVALID_PHONE_NUMBER', message: 'The phone number is invalid' },\n { code: 'TIMEOUT', message: 'The transaction timed out' },\n { code: 'DAILY_LIMIT_EXCEEDED', message: 'The daily transaction limit has been exceeded' },\n ],\n refund: [\n { code: 'REFUND_LIMIT_EXCEEDED', message: 'The refund limit has been exceeded' },\n { code: 'ORIGINAL_DEPOSIT_NOT_FOUND', message: 'The original deposit was not found' },\n { code: 'REFUND_ALREADY_PROCESSED', message: 'A refund has already been processed for this deposit' },\n { code: 'TIMEOUT', message: 'The refund request timed out' },\n ],\n};\n","'use client';\n\nimport { useState, useMemo, useCallback } from 'react';\nimport {\n TrendingUp,\n ArrowDownCircle,\n ArrowUpCircle,\n XCircle,\n RefreshCw,\n Search,\n ChevronDown,\n Settings,\n ChevronLeft,\n ChevronRight,\n Copy,\n Check,\n AlertCircle,\n Clock,\n CheckCircle2,\n Loader2,\n Plus,\n Ban,\n Hourglass,\n CircleDot,\n} from 'lucide-react';\nimport type { Correspondent } from '../constants/correspondents';\n\nexport type TransactionType = 'deposit' | 'payout' | 'refund';\n\nexport type TransactionStatus =\n | 'ACCEPTED'\n | 'PENDING'\n | 'ENQUEUED'\n | 'PROCESSING'\n | 'COMPLETED'\n | 'FAILED'\n | 'CANCELLED'\n | 'REJECTED';\n\nexport interface Transaction {\n id: string;\n type: TransactionType;\n amount: number;\n currency: string;\n status: TransactionStatus;\n provider: Correspondent;\n phoneNumber: string;\n description?: string;\n createdAt: string;\n updatedAt?: string;\n failureReason?: string;\n}\n\nexport interface SpaarkPaySdkFinanceDashboardProps {\n transactions: Transaction[];\n title?: string;\n subtitle?: string;\n locale?: 'fr' | 'en';\n className?: string;\n showExpertMode?: boolean;\n onExpertModeClick?: () => void;\n onTransactionClick?: (transaction: Transaction) => void;\n onRefresh?: () => void;\n onAddTransaction?: () => void;\n onSettings?: () => void;\n isLoading?: boolean;\n}\n\nconst translations = {\n fr: {\n title: 'Tableau de bord financier',\n subtitle: 'Vue d\\'ensemble de vos transactions',\n totalVolume: 'Volume Total',\n deposits: 'Dépôts',\n payouts: 'Retraits',\n failed: 'Échecs',\n refunds: 'Remboursements',\n pending: 'En attente',\n completed: 'Complétées',\n cancelled: 'Annulées',\n search: 'Rechercher par ID ou téléphone...',\n allTypes: 'Tous les types',\n allStatuses: 'Tous les statuts',\n deposit: 'Dépôt',\n payout: 'Retrait',\n refund: 'Remboursement',\n expertMode: 'Mode Expert',\n refresh: 'Actualiser',\n settings: 'Paramètres',\n noTransactions: 'Aucune transaction',\n noTransactionsDesc: 'Les transactions apparaîtront ici une fois effectuées.',\n addTransaction: 'Nouvelle transaction',\n id: 'ID',\n type: 'Type',\n amount: 'Montant',\n status: 'Statut',\n provider: 'Opérateur',\n phone: 'Téléphone',\n date: 'Date',\n page: 'Page',\n of: 'sur',\n transactions: 'transactions',\n copied: 'Copié !',\n },\n en: {\n title: 'Finance Dashboard',\n subtitle: 'Overview of your transactions',\n totalVolume: 'Total Volume',\n deposits: 'Deposits',\n payouts: 'Payouts',\n failed: 'Failed',\n refunds: 'Refunds',\n pending: 'Pending',\n completed: 'Completed',\n cancelled: 'Cancelled',\n search: 'Search by ID or phone...',\n allTypes: 'All types',\n allStatuses: 'All statuses',\n deposit: 'Deposit',\n payout: 'Payout',\n refund: 'Refund',\n expertMode: 'Expert Mode',\n refresh: 'Refresh',\n settings: 'Settings',\n noTransactions: 'No transactions',\n noTransactionsDesc: 'Transactions will appear here once made.',\n addTransaction: 'New transaction',\n id: 'ID',\n type: 'Type',\n amount: 'Amount',\n status: 'Status',\n provider: 'Provider',\n phone: 'Phone',\n date: 'Date',\n page: 'Page',\n of: 'of',\n transactions: 'transactions',\n copied: 'Copied!',\n },\n};\n\nconst STATUS_COLORS: Record<TransactionStatus, string> = {\n COMPLETED: 'bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200',\n ACCEPTED: 'bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-200',\n PENDING: 'bg-yellow-100 text-yellow-800 dark:bg-yellow-900 dark:text-yellow-200',\n ENQUEUED: 'bg-yellow-100 text-yellow-800 dark:bg-yellow-900 dark:text-yellow-200',\n PROCESSING: 'bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-200',\n FAILED: 'bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-200',\n CANCELLED: 'bg-gray-100 text-gray-800 dark:bg-gray-900 dark:text-gray-200',\n REJECTED: 'bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-200',\n};\n\nconst StatusIcon = ({ status }: { status: TransactionStatus }) => {\n switch (status) {\n case 'COMPLETED':\n return <CheckCircle2 className=\"w-3.5 h-3.5\" />;\n case 'FAILED':\n case 'REJECTED':\n return <XCircle className=\"w-3.5 h-3.5\" />;\n case 'CANCELLED':\n return <Ban className=\"w-3.5 h-3.5\" />;\n case 'PENDING':\n case 'ENQUEUED':\n return <Clock className=\"w-3.5 h-3.5\" />;\n case 'PROCESSING':\n case 'ACCEPTED':\n return <Loader2 className=\"w-3.5 h-3.5 animate-spin\" />;\n default:\n return <AlertCircle className=\"w-3.5 h-3.5\" />;\n }\n};\n\nconst formatCurrency = (amount: number, currency: string) => {\n return new Intl.NumberFormat('fr-FR', {\n style: 'decimal',\n minimumFractionDigits: 0,\n maximumFractionDigits: 0,\n }).format(amount) + ' ' + currency;\n};\n\nconst formatDate = (dateString: string, locale: 'fr' | 'en') => {\n const date = new Date(dateString);\n return new Intl.DateTimeFormat(locale === 'fr' ? 'fr-FR' : 'en-US', {\n day: '2-digit',\n month: 'short',\n year: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n }).format(date);\n};\n\nconst ITEMS_PER_PAGE = 10;\n\nexport function SpaarkPaySdkFinanceDashboard({\n transactions,\n title,\n subtitle,\n locale = 'fr',\n className = '',\n showExpertMode = true,\n onExpertModeClick,\n onTransactionClick,\n onRefresh,\n onAddTransaction,\n onSettings,\n isLoading = false,\n}: SpaarkPaySdkFinanceDashboardProps) {\n const t = translations[locale];\n\n const [searchQuery, setSearchQuery] = useState('');\n const [typeFilter, setTypeFilter] = useState<TransactionType | 'all'>('all');\n const [statusFilter, setStatusFilter] = useState<TransactionStatus | 'all'>('all');\n const [currentPage, setCurrentPage] = useState(1);\n const [copiedId, setCopiedId] = useState<string | null>(null);\n\n const stats = useMemo(() => {\n const deposits = transactions.filter(tx => tx.type === 'deposit');\n const payouts = transactions.filter(tx => tx.type === 'payout');\n const refunds = transactions.filter(tx => tx.type === 'refund');\n const failed = transactions.filter(tx => tx.status === 'FAILED' || tx.status === 'REJECTED');\n const pending = transactions.filter(tx => ['PENDING', 'ENQUEUED', 'PROCESSING', 'ACCEPTED'].includes(tx.status));\n const completed = transactions.filter(tx => tx.status === 'COMPLETED');\n const cancelled = transactions.filter(tx => tx.status === 'CANCELLED');\n\n const totalVolume = transactions\n .filter(tx => tx.status === 'COMPLETED')\n .reduce((sum, tx) => sum + tx.amount, 0);\n\n const depositsTotal = deposits\n .filter(tx => tx.status === 'COMPLETED')\n .reduce((sum, tx) => sum + tx.amount, 0);\n\n const payoutsTotal = payouts\n .filter(tx => tx.status === 'COMPLETED')\n .reduce((sum, tx) => sum + tx.amount, 0);\n\n const refundsTotal = refunds\n .filter(tx => tx.status === 'COMPLETED')\n .reduce((sum, tx) => sum + tx.amount, 0);\n\n return {\n totalVolume,\n depositsCount: deposits.length,\n depositsTotal,\n payoutsCount: payouts.length,\n payoutsTotal,\n failedCount: failed.length,\n refundsCount: refunds.length,\n refundsTotal,\n pendingCount: pending.length,\n completedCount: completed.length,\n cancelledCount: cancelled.length,\n };\n }, [transactions]);\n\n const filteredTransactions = useMemo(() => {\n return transactions.filter(tx => {\n const matchesSearch = searchQuery === '' ||\n tx.id.toLowerCase().includes(searchQuery.toLowerCase()) ||\n tx.phoneNumber.includes(searchQuery);\n\n const matchesType = typeFilter === 'all' || tx.type === typeFilter;\n const matchesStatus = statusFilter === 'all' || tx.status === statusFilter;\n\n return matchesSearch && matchesType && matchesStatus;\n });\n }, [transactions, searchQuery, typeFilter, statusFilter]);\n\n const paginatedTransactions = useMemo(() => {\n const start = (currentPage - 1) * ITEMS_PER_PAGE;\n return filteredTransactions.slice(start, start + ITEMS_PER_PAGE);\n }, [filteredTransactions, currentPage]);\n\n const totalPages = Math.ceil(filteredTransactions.length / ITEMS_PER_PAGE);\n\n const copyToClipboard = useCallback((text: string) => {\n navigator.clipboard.writeText(text);\n setCopiedId(text);\n setTimeout(() => setCopiedId(null), 2000);\n }, []);\n\n const mainCurrency = transactions[0]?.currency || 'XAF';\n\n return (\n <div className={`space-y-6 ${className}`}>\n {/* Header */}\n <div className=\"flex items-center justify-between flex-wrap gap-4\">\n <div>\n <h1 className=\"text-2xl font-bold tracking-tight\">{title || t.title}</h1>\n <p className=\"text-muted-foreground mt-1\">{subtitle || t.subtitle}</p>\n </div>\n <div className=\"flex items-center gap-2\">\n {onRefresh && (\n <button\n onClick={onRefresh}\n disabled={isLoading}\n className=\"h-9 px-4 text-sm font-medium rounded-md border border-input bg-background hover:bg-accent hover:text-accent-foreground disabled:opacity-50 transition-colors inline-flex items-center gap-2\"\n >\n <RefreshCw className={`w-4 h-4 ${isLoading ? 'animate-spin' : ''}`} />\n {t.refresh}\n </button>\n )}\n {onSettings && (\n <button\n onClick={onSettings}\n className=\"h-9 w-9 rounded-md border border-input bg-background hover:bg-accent hover:text-accent-foreground transition-colors inline-flex items-center justify-center\"\n title={t.settings}\n >\n <Settings className=\"w-4 h-4\" />\n </button>\n )}\n {showExpertMode && onExpertModeClick && (\n <button\n onClick={onExpertModeClick}\n className=\"h-9 px-4 text-sm font-medium rounded-md bg-primary text-primary-foreground hover:bg-primary/90 transition-colors inline-flex items-center gap-2\"\n >\n {t.expertMode}\n </button>\n )}\n </div>\n </div>\n\n {/* KPI Cards - 2 rows of 4 */}\n <div className=\"grid grid-cols-2 md:grid-cols-4 gap-4\">\n {/* Row 1 */}\n {/* Total Volume */}\n <div className=\"rounded-lg border border-border bg-card p-4 space-y-3\">\n <div className=\"flex items-center gap-2\">\n <div className=\"p-2 rounded-md bg-primary/10\">\n <TrendingUp className=\"w-4 h-4 text-primary\" />\n </div>\n <span className=\"text-sm font-medium text-muted-foreground\">{t.totalVolume}</span>\n </div>\n <p className=\"text-2xl font-bold\">{formatCurrency(stats.totalVolume, mainCurrency)}</p>\n <p className=\"text-xs text-muted-foreground\">\n {transactions.length} {t.transactions}\n </p>\n </div>\n\n {/* Deposits */}\n <div className=\"rounded-lg border border-border bg-card p-4 space-y-3\">\n <div className=\"flex items-center gap-2\">\n <div className=\"p-2 rounded-md bg-green-500/10\">\n <ArrowDownCircle className=\"w-4 h-4 text-green-600 dark:text-green-400\" />\n </div>\n <span className=\"text-sm font-medium text-muted-foreground\">{t.deposits}</span>\n </div>\n <p className=\"text-2xl font-bold\">{formatCurrency(stats.depositsTotal, mainCurrency)}</p>\n <p className=\"text-xs text-muted-foreground\">\n {stats.depositsCount} {t.transactions}\n </p>\n </div>\n\n {/* Payouts */}\n <div className=\"rounded-lg border border-border bg-card p-4 space-y-3\">\n <div className=\"flex items-center gap-2\">\n <div className=\"p-2 rounded-md bg-blue-500/10\">\n <ArrowUpCircle className=\"w-4 h-4 text-blue-600 dark:text-blue-400\" />\n </div>\n <span className=\"text-sm font-medium text-muted-foreground\">{t.payouts}</span>\n </div>\n <p className=\"text-2xl font-bold\">{formatCurrency(stats.payoutsTotal, mainCurrency)}</p>\n <p className=\"text-xs text-muted-foreground\">\n {stats.payoutsCount} {t.transactions}\n </p>\n </div>\n\n {/* Refunds */}\n <div className=\"rounded-lg border border-border bg-card p-4 space-y-3\">\n <div className=\"flex items-center gap-2\">\n <div className=\"p-2 rounded-md bg-orange-500/10\">\n <RefreshCw className=\"w-4 h-4 text-orange-600 dark:text-orange-400\" />\n </div>\n <span className=\"text-sm font-medium text-muted-foreground\">{t.refunds}</span>\n </div>\n <p className=\"text-2xl font-bold\">{formatCurrency(stats.refundsTotal, mainCurrency)}</p>\n <p className=\"text-xs text-muted-foreground\">\n {stats.refundsCount} {t.transactions}\n </p>\n </div>\n\n {/* Row 2 */}\n {/* Pending */}\n <div className=\"rounded-lg border border-border bg-card p-4 space-y-3\">\n <div className=\"flex items-center gap-2\">\n <div className=\"p-2 rounded-md bg-yellow-500/10\">\n <Hourglass className=\"w-4 h-4 text-yellow-600 dark:text-yellow-400\" />\n </div>\n <span className=\"text-sm font-medium text-muted-foreground\">{t.pending}</span>\n </div>\n <p className=\"text-2xl font-bold\">{stats.pendingCount}</p>\n <p className=\"text-xs text-muted-foreground\">{t.transactions}</p>\n </div>\n\n {/* Completed */}\n <div className=\"rounded-lg border border-border bg-card p-4 space-y-3\">\n <div className=\"flex items-center gap-2\">\n <div className=\"p-2 rounded-md bg-green-500/10\">\n <CheckCircle2 className=\"w-4 h-4 text-green-600 dark:text-green-400\" />\n </div>\n <span className=\"text-sm font-medium text-muted-foreground\">{t.completed}</span>\n </div>\n <p className=\"text-2xl font-bold\">{stats.completedCount}</p>\n <p className=\"text-xs text-muted-foreground\">{t.transactions}</p>\n </div>\n\n {/* Failed */}\n <div className=\"rounded-lg border border-border bg-card p-4 space-y-3\">\n <div className=\"flex items-center gap-2\">\n <div className=\"p-2 rounded-md bg-red-500/10\">\n <XCircle className=\"w-4 h-4 text-red-600 dark:text-red-400\" />\n </div>\n <span className=\"text-sm font-medium text-muted-foreground\">{t.failed}</span>\n </div>\n <p className=\"text-2xl font-bold\">{stats.failedCount}</p>\n <p className=\"text-xs text-muted-foreground\">{t.transactions}</p>\n </div>\n\n {/* Cancelled */}\n <div className=\"rounded-lg border border-border bg-card p-4 space-y-3\">\n <div className=\"flex items-center gap-2\">\n <div className=\"p-2 rounded-md bg-gray-500/10\">\n <Ban className=\"w-4 h-4 text-gray-600 dark:text-gray-400\" />\n </div>\n <span className=\"text-sm font-medium text-muted-foreground\">{t.cancelled}</span>\n </div>\n <p className=\"text-2xl font-bold\">{stats.cancelledCount}</p>\n <p className=\"text-xs text-muted-foreground\">{t.transactions}</p>\n </div>\n </div>\n\n {/* Filters */}\n <div className=\"flex flex-wrap gap-3\">\n <div className=\"relative flex-1 min-w-[200px]\">\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground pointer-events-none\" />\n <input\n type=\"text\"\n placeholder={t.search}\n value={searchQuery}\n onChange={(e) => {\n setSearchQuery(e.target.value);\n setCurrentPage(1);\n }}\n className=\"w-full h-9 pl-9 pr-3 text-sm rounded-md border border-input bg-background outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2\"\n />\n </div>\n\n <div className=\"relative\">\n <select\n value={typeFilter}\n onChange={(e) => {\n setTypeFilter(e.target.value as TransactionType | 'all');\n setCurrentPage(1);\n }}\n className=\"h-9 pl-3 pr-9 text-sm rounded-md border border-input bg-background outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 appearance-none cursor-pointer\"\n >\n <option value=\"all\">{t.allTypes}</option>\n <option value=\"deposit\">{t.deposit}</option>\n <option value=\"payout\">{t.payout}</option>\n <option value=\"refund\">{t.refund}</option>\n </select>\n <ChevronDown className=\"absolute right-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground pointer-events-none\" />\n </div>\n\n <div className=\"relative\">\n <select\n value={statusFilter}\n onChange={(e) => {\n setStatusFilter(e.target.value as TransactionStatus | 'all');\n setCurrentPage(1);\n }}\n className=\"h-9 pl-3 pr-9 text-sm rounded-md border border-input bg-background outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 appearance-none cursor-pointer\"\n >\n <option value=\"all\">{t.allStatuses}</option>\n <option value=\"COMPLETED\">COMPLETED</option>\n <option value=\"PENDING\">PENDING</option>\n <option value=\"PROCESSING\">PROCESSING</option>\n <option value=\"ACCEPTED\">ACCEPTED</option>\n <option value=\"FAILED\">FAILED</option>\n <option value=\"CANCELLED\">CANCELLED</option>\n <option value=\"REJECTED\">REJECTED</option>\n </select>\n <ChevronDown className=\"absolute right-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground pointer-events-none\" />\n </div>\n </div>\n\n {/* Transactions Table */}\n <div className=\"rounded-lg border border-border bg-card overflow-hidden\">\n {isLoading ? (\n <div className=\"p-12 text-center\">\n <Loader2 className=\"w-8 h-8 animate-spin mx-auto text-muted-foreground\" />\n </div>\n ) : filteredTransactions.length === 0 ? (\n <div className=\"p-12 text-center\">\n <div className=\"w-16 h-16 rounded-full bg-muted mx-auto mb-4 flex items-center justify-center\">\n <CircleDot className=\"w-8 h-8 text-muted-foreground\" />\n </div>\n <p className=\"font-semibold text-lg\">{t.noTransactions}</p>\n <p className=\"text-sm text-muted-foreground mt-1 mb-6\">{t.noTransactionsDesc}</p>\n {onAddTransaction && (\n <button\n onClick={onAddTransaction}\n className=\"h-10 px-6 text-sm font-medium rounded-md bg-primary text-primary-foreground hover:bg-primary/90 transition-colors inline-flex items-center gap-2\"\n >\n <Plus className=\"w-4 h-4\" />\n {t.addTransaction}\n </button>\n )}\n </div>\n ) : (\n <>\n <div className=\"overflow-x-auto\">\n <table className=\"w-full text-sm\">\n <thead className=\"bg-muted/50 border-b border-border\">\n <tr>\n <th className=\"text-left p-3 font-medium text-muted-foreground\">{t.id}</th>\n <th className=\"text-left p-3 font-medium text-muted-foreground\">{t.type}</th>\n <th className=\"text-left p-3 font-medium text-muted-foreground\">{t.amount}</th>\n <th className=\"text-left p-3 font-medium text-muted-foreground\">{t.status}</th>\n <th className=\"text-left p-3 font-medium text-muted-foreground\">{t.provider}</th>\n <th className=\"text-left p-3 font-medium text-muted-foreground\">{t.phone}</th>\n <th className=\"text-left p-3 font-medium text-muted-foreground\">{t.date}</th>\n </tr>\n </thead>\n <tbody className=\"divide-y divide-border\">\n {paginatedTransactions.map((tx) => (\n <tr\n key={tx.id}\n className={`hover:bg-muted/50 transition-colors ${onTransactionClick ? 'cursor-pointer' : ''}`}\n onClick={() => onTransactionClick?.(tx)}\n >\n <td className=\"p-3\">\n <div className=\"flex items-center gap-2\">\n <span className=\"font-mono text-xs truncate max-w-[100px]\" title={tx.id}>\n {tx.id.slice(0, 8)}...\n </span>\n <button\n onClick={(e) => {\n e.stopPropagation();\n copyToClipboard(tx.id);\n }}\n className=\"p-1 hover:bg-muted rounded transition-colors\"\n title=\"Copy ID\"\n >\n {copiedId === tx.id ? (\n <Check className=\"w-3.5 h-3.5 text-green-600\" />\n ) : (\n <Copy className=\"w-3.5 h-3.5 text-muted-foreground\" />\n )}\n </button>\n </div>\n </td>\n <td className=\"p-3\">\n <span className={`inline-flex items-center gap-1.5 px-2.5 py-1 text-xs font-medium rounded-full ${\n tx.type === 'deposit' ? 'bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200' :\n tx.type === 'payout' ? 'bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-200' :\n 'bg-orange-100 text-orange-800 dark:bg-orange-900 dark:text-orange-200'\n }`}>\n {tx.type === 'deposit' && <ArrowDownCircle className=\"w-3 h-3\" />}\n {tx.type === 'payout' && <ArrowUpCircle className=\"w-3 h-3\" />}\n {tx.type === 'refund' && <RefreshCw className=\"w-3 h-3\" />}\n {t[tx.type]}\n </span>\n </td>\n <td className=\"p-3 font-semibold\">\n {formatCurrency(tx.amount, tx.currency)}\n </td>\n <td className=\"p-3\">\n <span className={`inline-flex items-center gap-1.5 px-2.5 py-1 text-xs font-medium rounded-full ${STATUS_COLORS[tx.status]}`}>\n <StatusIcon status={tx.status} />\n {tx.status}\n </span>\n </td>\n <td className=\"p-3 text-muted-foreground\">\n {tx.provider.replace(/_/g, ' ')}\n </td>\n <td className=\"p-3 font-mono text-muted-foreground\">\n {tx.phoneNumber}\n </td>\n <td className=\"p-3 text-muted-foreground\">\n {formatDate(tx.createdAt, locale)}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n\n {/* Pagination */}\n {totalPages > 1 && (\n <div className=\"flex items-center justify-between px-4 py-3 border-t border-border\">\n <p className=\"text-sm text-muted-foreground\">\n {filteredTransactions.length} {t.transactions}\n </p>\n <div className=\"flex items-center gap-2\">\n <button\n onClick={() => setCurrentPage(p => Math.max(1, p - 1))}\n disabled={currentPage === 1}\n className=\"w-9 h-9 flex items-center justify-center rounded-md border border-input hover:bg-accent disabled:opacity-50 disabled:cursor-not-allowed transition-colors\"\n >\n <ChevronLeft className=\"w-4 h-4\" />\n </button>\n <span className=\"text-sm px-2\">\n {t.page} {currentPage} {t.of} {totalPages}\n </span>\n <button\n onClick={() => setCurrentPage(p => Math.min(totalPages, p + 1))}\n disabled={currentPage === totalPages}\n className=\"w-9 h-9 flex items-center justify-center rounded-md border border-input hover:bg-accent disabled:opacity-50 disabled:cursor-not-allowed transition-colors\"\n >\n <ChevronRight className=\"w-4 h-4\" />\n </button>\n </div>\n </div>\n )}\n </>\n )}\n </div>\n </div>\n );\n}\n\nexport default SpaarkPaySdkFinanceDashboard;\n","'use client';\n\nimport { useState, useCallback } from 'react';\nimport type { Correspondent } from './constants/correspondents';\nimport type { DepositResponse, PayoutResponse } from './types/transactions';\nimport type { WebhookEventType } from './types/webhooks';\nimport {\n generateWebhook,\n WEBHOOK_EVENT_TYPES,\n} from './mocks/webhook-generators';\n\nexport {\n SpaarkPaySdkFinanceDashboard,\n type SpaarkPaySdkFinanceDashboardProps,\n type Transaction,\n type TransactionType,\n type TransactionStatus,\n} from './components/SpaarkPaySdkFinanceDashboard';\n\ntype OperationStatus = 'idle' | 'loading' | 'success' | 'error';\ntype TabType = 'deposit' | 'payout' | 'status' | 'toolkit' | 'finances' | 'webhooks';\n\ninterface TestResult {\n id: string;\n operation: string;\n status: OperationStatus;\n response?: unknown;\n error?: string;\n timestamp: string;\n}\n\ninterface WebhookTestEvent {\n id: string;\n eventType: string;\n payload: unknown;\n signature: string;\n receivedAt: string;\n isVerified: boolean | null;\n}\n\nexport interface SpaarkPaySdkTestDashboardProps {\n apiKey?: string;\n environment?: 'sandbox' | 'production';\n className?: string;\n demoMode?: boolean;\n /** Base path for API routes (e.g., '/api/pawapay'). When set, requests go through your server instead of directly to Pawapay. */\n apiBasePath?: string;\n onDepositComplete?: (response: DepositResponse) => void;\n onPayoutComplete?: (response: PayoutResponse) => void;\n onError?: (error: Error) => void;\n}\n\n// Mock response generators for demo mode (V2 API format)\nconst createMockDepositResponse = (txId: string): DepositResponse => ({\n depositId: txId,\n status: 'ACCEPTED',\n created: new Date().toISOString(),\n nextStep: 'FINAL_STATUS',\n});\n\nconst createMockPayoutResponse = (txId: string): PayoutResponse => ({\n payoutId: txId,\n status: 'ACCEPTED',\n created: new Date().toISOString(),\n});\n\nconst createMockStatusResponse = (txId: string) => ({\n depositId: txId,\n status: ['COMPLETED', 'ACCEPTED', 'PROCESSING', 'ENQUEUED'][Math.floor(Math.random() * 4)],\n created: new Date(Date.now() - 60000).toISOString(),\n amount: '5000',\n currency: 'XAF',\n country: 'CMR',\n payer: {\n type: 'MMO',\n accountDetails: {\n phoneNumber: '237670000000',\n provider: 'MTN_MOMO_CMR',\n },\n },\n});\n\nconst createMockAvailabilityResponse = () => [\n {\n country: 'CMR',\n providers: [\n {\n provider: 'MTN_MOMO_CMR',\n operationTypes: [\n { operationType: 'DEPOSIT', status: 'OPERATIONAL' },\n { operationType: 'PAYOUT', status: 'OPERATIONAL' },\n ],\n },\n {\n provider: 'ORANGE_CMR',\n operationTypes: [\n { operationType: 'DEPOSIT', status: 'OPERATIONAL' },\n { operationType: 'PAYOUT', status: 'DELAYED' },\n ],\n },\n ],\n },\n];\n\nconst createMockPredictResponse = (phone: string) => ({\n country: 'CMR',\n provider: phone.startsWith('23767') ? 'MTN_MOMO_CMR' : 'ORANGE_CMR',\n phoneNumber: phone.replace(/\\D/g, ''),\n});\n\nconst createMockActiveConfigResponse = () => ({\n companyName: 'Demo Company',\n signatureConfiguration: {\n signedRequestsOnly: false,\n signedCallbacks: true,\n },\n countries: [\n {\n country: 'CMR',\n displayName: { en: 'Cameroon', fr: 'Cameroun' },\n prefix: '237',\n flag: 'https://cdn.pawapay.io/flags/cmr.svg',\n providers: [\n {\n provider: 'MTN_MOMO_CMR',\n displayName: 'MTN Mobile Money',\n nameDisplayedToCustomer: 'MTN MoMo',\n currencies: [\n {\n currency: 'XAF',\n displayName: 'CFA Franc',\n operationTypes: {\n DEPOSIT: { minAmount: '100', maxAmount: '1000000', status: 'OPERATIONAL' },\n PAYOUT: { minAmount: '100', maxAmount: '500000', status: 'OPERATIONAL' },\n },\n },\n ],\n },\n ],\n },\n ],\n});\n\nconst createMockWalletBalancesResponse = () => ({\n balances: [\n { country: 'CMR', currency: 'XAF', balance: '1250000.00' },\n { country: 'COG', currency: 'XAF', balance: '450000.00' },\n { country: 'GAB', currency: 'XAF', balance: '780000.00' },\n ],\n});\n\nconst createMockPublicKeysResponse = () => [\n {\n id: 'key-001',\n key: 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA...',\n },\n];\n\nconst simulateDelay = (ms: number = 800) => new Promise(resolve => setTimeout(resolve, ms + Math.random() * 400));\n\n// HMAC-SHA256 computation using Web Crypto API (browser-compatible)\nasync function computeHmacSha256(message: string, secret: string): Promise<string> {\n const encoder = new TextEncoder();\n const key = await crypto.subtle.importKey(\n 'raw',\n encoder.encode(secret),\n { name: 'HMAC', hash: 'SHA-256' },\n false,\n ['sign']\n );\n const signature = await crypto.subtle.sign('HMAC', key, encoder.encode(message));\n return Array.from(new Uint8Array(signature))\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('');\n}\n\nconst generateUUID = (): string => {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n};\n\nconst PROVIDER_OPTIONS: Array<{ value: Correspondent; label: string; country: string }> = [\n { value: 'MTN_MOMO_CMR', label: 'MTN Mobile Money', country: 'Cameroun' },\n { value: 'ORANGE_CMR', label: 'Orange Money', country: 'Cameroun' },\n { value: 'MTN_MOMO_COG', label: 'MTN Mobile Money', country: 'Congo' },\n { value: 'AIRTEL_COG', label: 'Airtel Money', country: 'Congo' },\n { value: 'MTN_MOMO_GAB', label: 'MTN Mobile Money', country: 'Gabon' },\n { value: 'AIRTEL_GAB', label: 'Airtel Money', country: 'Gabon' },\n];\n\nconst CURRENCY_OPTIONS = [\n { value: 'XAF', label: 'XAF (CFA Franc BEAC)' },\n { value: 'XOF', label: 'XOF (CFA Franc BCEAO)' },\n { value: 'GHS', label: 'GHS (Ghana Cedi)' },\n { value: 'KES', label: 'KES (Kenyan Shilling)' },\n { value: 'RWF', label: 'RWF (Rwandan Franc)' },\n { value: 'TZS', label: 'TZS (Tanzanian Shilling)' },\n { value: 'UGX', label: 'UGX (Ugandan Shilling)' },\n { value: 'ZMW', label: 'ZMW (Zambian Kwacha)' },\n];\n\nexport function SpaarkPaySdkTestDashboard({\n apiKey: initialApiKey = '',\n environment: initialEnvironment = 'sandbox',\n className = '',\n demoMode: initialDemoMode = false,\n apiBasePath = '/api/pawapay',\n onDepositComplete,\n onPayoutComplete,\n onError,\n}: SpaarkPaySdkTestDashboardProps) {\n const [apiKey, setApiKey] = useState(initialApiKey);\n const [environment, setEnvironment] = useState<'sandbox' | 'production'>(initialEnvironment);\n const [isConfigured, setIsConfigured] = useState(!!initialApiKey || initialDemoMode);\n const [isDemoMode, setIsDemoMode] = useState(initialDemoMode);\n\n const [activeTab, setActiveTab] = useState<TabType>('deposit');\n const [phoneNumber, setPhoneNumber] = useState('237670000000');\n const [amount, setAmount] = useState('5000');\n const [currency, setCurrency] = useState('XAF');\n const [provider, setProvider] = useState<Correspondent>('MTN_MOMO_CMR');\n const [description, setDescription] = useState('Test Payment');\n const [transactionId, setTransactionId] = useState('');\n\n const [results, setResults] = useState<TestResult[]>([]);\n const [currentStatus, setCurrentStatus] = useState<OperationStatus>('idle');\n\n // Webhook testing states\n const [webhookSecret, setWebhookSecret] = useState('whsec_test_secret_key');\n const [webhookEvents, setWebhookEvents] = useState<WebhookTestEvent[]>([]);\n const [webhookEventType, setWebhookEventType] = useState<WebhookEventType>('deposit.completed');\n const [webhookAmount, setWebhookAmount] = useState('5000');\n const [webhookPhone, setWebhookPhone] = useState('237670000000');\n const [webhookProvider, setWebhookProvider] = useState<Correspondent>('MTN_MOMO_CMR');\n const [generatedPayload, setGeneratedPayload] = useState<string>('');\n const [generatedSignature, setGeneratedSignature] = useState<string>('');\n const [verifyPayload, setVerifyPayload] = useState<string>('');\n const [verifySignature, setVerifySignature] = useState<string>('');\n const [verifySecret, setVerifySecret] = useState<string>('');\n const [verifyResult, setVerifyResult] = useState<boolean | null>(null);\n const [parseInput, setParseInput] = useState<string>('');\n const [parsedEvent, setParsedEvent] = useState<Record<string, unknown> | null>(null);\n const [parseError, setParseError] = useState<string>('');\n const [eventLogFilter, setEventLogFilter] = useState<'all' | 'deposit' | 'payout' | 'refund'>('all');\n\n const addResult = useCallback((operation: string, status: OperationStatus, response?: unknown, error?: string) => {\n const result: TestResult = {\n id: generateUUID(),\n operation,\n status,\n response,\n error,\n timestamp: new Date().toLocaleTimeString(),\n };\n setResults((prev) => [result, ...prev].slice(0, 20));\n }, []);\n\n const handleConfigure = useCallback(() => {\n if (!apiKey.trim()) {\n addResult('Configuration', 'error', undefined, 'API Key is required');\n return;\n }\n setIsConfigured(true);\n setIsDemoMode(false);\n addResult('Configuration', 'success', { environment, configured: true, apiBasePath });\n }, [apiKey, environment, apiBasePath, addResult]);\n\n const handleDemoMode = useCallback(() => {\n setIsDemoMode(true);\n setIsConfigured(true);\n addResult('Configuration', 'success', { mode: 'demo', message: 'Demo mode activated - responses are simulated' });\n }, [addResult]);\n\n const handleDeposit = useCallback(async () => {\n if (!apiKey && !isDemoMode) return;\n setCurrentStatus('loading');\n\n try {\n const txId = generateUUID();\n setTransactionId(txId);\n\n let response: DepositResponse;\n\n if (isDemoMode) {\n await simulateDelay();\n response = createMockDepositResponse(txId);\n } else {\n const res = await fetch(`${apiBasePath}/deposit`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n apiKey,\n environment,\n amount: parseFloat(amount),\n currency,\n provider,\n phoneNumber,\n customerMessage: description.slice(0, 22),\n transactionId: txId,\n }),\n });\n\n const data = await res.json();\n if (!res.ok) throw new Error(data.error || 'Deposit failed');\n response = data;\n }\n\n setCurrentStatus('success');\n addResult('Deposit', 'success', response);\n onDepositComplete?.(response);\n } catch (err) {\n setCurrentStatus('error');\n const message = err instanceof Error ? err.message : 'Deposit failed';\n addResult('Deposit', 'error', undefined, message);\n onError?.(err instanceof Error ? err : new Error(message));\n }\n }, [apiKey, apiBasePath, environment, isDemoMode, amount, currency, provider, phoneNumber, description, addResult, onDepositComplete, onError]);\n\n const handlePayout = useCallback(async () => {\n if (!apiKey && !isDemoMode) return;\n setCurrentStatus('loading');\n\n try {\n const txId = generateUUID();\n setTransactionId(txId);\n\n let response: PayoutResponse;\n\n if (isDemoMode) {\n await simulateDelay();\n response = createMockPayoutResponse(txId);\n } else {\n const res = await fetch(`${apiBasePath}/payout`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n apiKey,\n environment,\n amount: parseFloat(amount),\n currency,\n provider,\n phoneNumber,\n transactionId: txId,\n }),\n });\n\n const data = await res.json();\n if (!res.ok) throw new Error(data.error || 'Payout failed');\n response = data;\n }\n\n setCurrentStatus('success');\n addResult('Payout', 'success', response);\n onPayoutComplete?.(response);\n } catch (err) {\n setCurrentStatus('error');\n const message = err instanceof Error ? err.message : 'Payout failed';\n addResult('Payout', 'error', undefined, message);\n onError?.(err instanceof Error ? err : new Error(message));\n }\n }, [apiKey, apiBasePath, environment, isDemoMode, amount, currency, provider, phoneNumber, addResult, onPayoutComplete, onError]);\n\n const handleCheckStatus = useCallback(async () => {\n if ((!apiKey && !isDemoMode) || !transactionId) {\n addResult('Check Status', 'error', undefined, 'No transaction ID');\n return;\n }\n setCurrentStatus('loading');\n\n try {\n let response;\n\n if (isDemoMode) {\n await simulateDelay();\n response = createMockStatusResponse(transactionId);\n } else {\n const res = await fetch(`${apiBasePath}/status`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ apiKey, environment, transactionId }),\n });\n\n const data = await res.json();\n if (!res.ok) throw new Error(data.error || 'Status check failed');\n response = data;\n }\n\n setCurrentStatus('success');\n addResult('Check Status', 'success', response);\n } catch (err) {\n setCurrentStatus('error');\n const message = err instanceof Error ? err.message : 'Status check failed';\n addResult('Check Status', 'error', undefined, message);\n onError?.(err instanceof Error ? err : new Error(message));\n }\n }, [apiKey, apiBasePath, environment, isDemoMode, transactionId, addResult, onError]);\n\n const handleGetAvailability = useCallback(async () => {\n if (!apiKey && !isDemoMode) return;\n setCurrentStatus('loading');\n\n try {\n let response;\n\n if (isDemoMode) {\n await simulateDelay();\n response = createMockAvailabilityResponse();\n } else {\n const res = await fetch(`${apiBasePath}/availability`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ apiKey, environment }),\n });\n\n const data = await res.json();\n if (!res.ok) throw new Error(data.error || 'Availability check failed');\n response = data;\n }\n\n setCurrentStatus('success');\n addResult('Provider Availability', 'success', response);\n } catch (err) {\n setCurrentStatus('error');\n const message = err instanceof Error ? err.message : 'Availability check failed';\n addResult('Provider Availability', 'error', undefined, message);\n onError?.(err instanceof Error ? err : new Error(message));\n }\n }, [apiKey, apiBasePath, environment, isDemoMode, addResult, onError]);\n\n const handlePredictProvider = useCallback(async () => {\n if (!apiKey && !isDemoMode) return;\n setCurrentStatus('loading');\n\n try {\n let response;\n\n if (isDemoMode) {\n await simulateDelay();\n response = createMockPredictResponse(phoneNumber);\n } else {\n const res = await fetch(`${apiBasePath}/predict-provider`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ apiKey, environment, phoneNumber }),\n });\n\n const data = await res.json();\n if (!res.ok) throw new Error(data.error || 'Prediction failed');\n response = data;\n }\n\n setCurrentStatus('success');\n addResult('Predict Provider', 'success', response);\n } catch (err) {\n setCurrentStatus('error');\n const message = err instanceof Error ? err.message : 'Prediction failed';\n addResult('Predict Provider', 'error', undefined, message);\n onError?.(err instanceof Error ? err : new Error(message));\n }\n }, [apiKey, apiBasePath, environment, isDemoMode, phoneNumber, addResult, onError]);\n\n const handleGetActiveConfig = useCallback(async () => {\n if (!apiKey && !isDemoMode) return;\n setCurrentStatus('loading');\n\n try {\n let response;\n\n if (isDemoMode) {\n await simulateDelay();\n response = createMockActiveConfigResponse();\n } else {\n const res = await fetch(`${apiBasePath}/active-config`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ apiKey, environment }),\n });\n\n const data = await res.json();\n if (!res.ok) throw new Error(data.error || 'Failed to get config');\n response = data;\n }\n\n setCurrentStatus('success');\n addResult('Active Configuration', 'success', response);\n } catch (err) {\n setCurrentStatus('error');\n const message = err instanceof Error ? err.message : 'Failed to get config';\n addResult('Active Configuration', 'error', undefined, message);\n onError?.(err instanceof Error ? err : new Error(message));\n }\n }, [apiKey, apiBasePath, environment, isDemoMode, addResult, onError]);\n\n const handleGetPublicKeys = useCallback(async () => {\n if (!apiKey && !isDemoMode) return;\n setCurrentStatus('loading');\n\n try {\n let response;\n\n if (isDemoMode) {\n await simulateDelay();\n response = createMockPublicKeysResponse();\n } else {\n const res = await fetch(`${apiBasePath}/public-keys`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ apiKey, environment }),\n });\n\n const data = await res.json();\n if (!res.ok) throw new Error(data.error || 'Failed to get public keys');\n response = data;\n }\n\n setCurrentStatus('success');\n addResult('Public Keys', 'success', response);\n } catch (err) {\n setCurrentStatus('error');\n const message = err instanceof Error ? err.message : 'Failed to get public keys';\n addResult('Public Keys', 'error', undefined, message);\n onError?.(err instanceof Error ? err : new Error(message));\n }\n }, [apiKey, apiBasePath, environment, isDemoMode, addResult, onError]);\n\n const handleGetWalletBalances = useCallback(async () => {\n if (!apiKey && !isDemoMode) return;\n setCurrentStatus('loading');\n\n try {\n let response;\n\n if (isDemoMode) {\n await simulateDelay();\n response = createMockWalletBalancesResponse();\n } else {\n const res = await fetch(`${apiBasePath}/wallet-balances`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ apiKey, environment }),\n });\n\n const data = await res.json();\n if (!res.ok) throw new Error(data.error || 'Failed to get balances');\n response = data;\n }\n\n setCurrentStatus('success');\n addResult('Wallet Balances', 'success', response);\n } catch (err) {\n setCurrentStatus('error');\n const message = err instanceof Error ? err.message : 'Failed to get balances';\n addResult('Wallet Balances', 'error', undefined, message);\n onError?.(err instanceof Error ? err : new Error(message));\n }\n }, [apiKey, apiBasePath, environment, isDemoMode, addResult, onError]);\n\n const copyToClipboard = useCallback((text: string) => {\n navigator.clipboard.writeText(text);\n }, []);\n\n if (!isConfigured) {\n return (\n <div className={`space-y-8 ${className}`}>\n <div>\n <h1 className=\"text-2xl font-bold tracking-tight\">Spaark Pay Console</h1>\n <p className=\"text-muted-foreground mt-1\">\n Configurez vos identifiants PawaPay pour commencer\n </p>\n </div>\n\n <div className=\"border border-border bg-background p-6 max-w-md space-y-6\">\n <div className=\"flex items-center gap-3\">\n <div className=\"w-10 h-10 bg-muted flex items-center justify-center\">\n <SettingsIcon />\n </div>\n <div>\n <h2 className=\"font-semibold\">SDK Configuration</h2>\n <p className=\"text-xs text-muted-foreground\">Enter your API credentials</p>\n </div>\n </div>\n\n <div className=\"space-y-4\">\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">API Key</label>\n <input\n type=\"password\"\n placeholder=\"pk_sandbox_...\"\n value={apiKey}\n onChange={(e) => setApiKey(e.target.value)}\n className=\"w-full h-8 px-2.5 text-xs border border-input bg-transparent rounded-none outline-none focus:border-ring\"\n />\n </div>\n\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Environnement</label>\n <div className=\"flex gap-2\">\n <button\n onClick={() => setEnvironment('sandbox')}\n className={`h-8 px-3 text-xs font-medium border transition-colors flex items-center gap-1.5 ${\n environment === 'sandbox'\n ? 'bg-blue-600 text-white border-blue-600'\n : 'bg-background border-border hover:bg-muted'\n }`}\n >\n <span className={`w-2 h-2 rounded-full ${environment === 'sandbox' ? 'bg-blue-200' : 'bg-blue-500'}`} />\n Sandbox\n </button>\n <button\n onClick={() => setEnvironment('production')}\n className={`h-8 px-3 text-xs font-medium border transition-colors flex items-center gap-1.5 ${\n environment === 'production'\n ? 'bg-green-600 text-white border-green-600'\n : 'bg-background border-border hover:bg-muted'\n }`}\n >\n <span className={`w-2 h-2 rounded-full ${environment === 'production' ? 'bg-green-200' : 'bg-green-500'}`} />\n Production\n </button>\n </div>\n <p className=\"text-xs text-muted-foreground\">\n {environment === 'sandbox'\n ? 'Utilisez le sandbox pour tester sans frais réels'\n : 'Attention : les transactions en production sont réelles'\n }\n </p>\n </div>\n\n <button\n onClick={handleConfigure}\n className=\"w-full h-8 px-3 text-xs font-medium bg-primary text-primary-foreground hover:bg-primary/90 transition-colors flex items-center justify-center gap-2\"\n >\n <PlayIcon />\n Initialize SDK\n </button>\n\n <div className=\"relative flex items-center py-2\">\n <div className=\"flex-grow border-t border-border\"></div>\n <span className=\"flex-shrink mx-3 text-xs text-muted-foreground\">ou</span>\n <div className=\"flex-grow border-t border-border\"></div>\n </div>\n\n <button\n onClick={handleDemoMode}\n className=\"w-full h-8 px-3 text-xs font-medium border border-border bg-background hover:bg-muted transition-colors flex items-center justify-center gap-2\"\n >\n <BeakerIcon />\n Mode Démo (sans API key)\n </button>\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <div className={`space-y-6 ${className}`}>\n <div className=\"flex items-center justify-between flex-wrap gap-4\">\n <div>\n <div className=\"flex items-center gap-2\">\n <h1 className=\"text-2xl font-bold tracking-tight\">Spaark Pay Console</h1>\n {isDemoMode ? (\n <span className=\"px-2 py-0.5 text-xs font-medium bg-amber-100 text-amber-800 dark:bg-amber-900 dark:text-amber-200\">\n DEMO\n </span>\n ) : environment === 'production' ? (\n <span className=\"px-2 py-0.5 text-xs font-medium bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200\">\n PRODUCTION\n </span>\n ) : (\n <span className=\"px-2 py-0.5 text-xs font-medium bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-200\">\n SANDBOX\n </span>\n )}\n </div>\n <p className=\"text-muted-foreground mt-1\">\n {isDemoMode\n ? 'Mode démo - Les réponses sont simulées'\n : environment === 'production'\n ? 'Mode production - Transactions réelles'\n : 'Mode sandbox - Environnement de test'\n }\n </p>\n </div>\n <button\n onClick={() => setIsConfigured(false)}\n className=\"h-8 px-3 text-xs font-medium border border-border bg-background hover:bg-muted transition-colors flex items-center gap-2\"\n >\n <SettingsIcon />\n Reconfigure\n </button>\n </div>\n\n <div className=\"grid lg:grid-cols-3 gap-6\">\n <div className=\"lg:col-span-2 space-y-6\">\n {/* Tabs */}\n <div className=\"flex flex-wrap gap-1 bg-muted p-1\">\n <button\n onClick={() => setActiveTab('deposit')}\n className={`flex-1 min-w-[80px] h-8 px-3 text-xs font-medium transition-colors flex items-center justify-center gap-1.5 ${\n activeTab === 'deposit' ? 'bg-background text-foreground' : 'text-muted-foreground hover:text-foreground'\n }`}\n >\n <WalletIcon />\n Deposit\n </button>\n <button\n onClick={() => setActiveTab('payout')}\n className={`flex-1 min-w-[80px] h-8 px-3 text-xs font-medium transition-colors flex items-center justify-center gap-1.5 ${\n activeTab === 'payout' ? 'bg-background text-foreground' : 'text-muted-foreground hover:text-foreground'\n }`}\n >\n <PhoneIcon />\n Payout\n </button>\n <button\n onClick={() => setActiveTab('status')}\n className={`flex-1 min-w-[80px] h-8 px-3 text-xs font-medium transition-colors flex items-center justify-center gap-1.5 ${\n activeTab === 'status' ? 'bg-background text-foreground' : 'text-muted-foreground hover:text-foreground'\n }`}\n >\n <RefreshIcon />\n Status\n </button>\n <button\n onClick={() => setActiveTab('toolkit')}\n className={`flex-1 min-w-[80px] h-8 px-3 text-xs font-medium transition-colors flex items-center justify-center gap-1.5 ${\n activeTab === 'toolkit' ? 'bg-background text-foreground' : 'text-muted-foreground hover:text-foreground'\n }`}\n >\n <ToolkitIcon />\n Toolkit\n </button>\n <button\n onClick={() => setActiveTab('finances')}\n className={`flex-1 min-w-[80px] h-8 px-3 text-xs font-medium transition-colors flex items-center justify-center gap-1.5 ${\n activeTab === 'finances' ? 'bg-background text-foreground' : 'text-muted-foreground hover:text-foreground'\n }`}\n >\n <ChartIcon />\n Finances\n </button>\n <button\n onClick={() => setActiveTab('webhooks')}\n className={`flex-1 min-w-[80px] h-8 px-3 text-xs font-medium transition-colors flex items-center justify-center gap-1.5 ${\n activeTab === 'webhooks' ? 'bg-background text-foreground' : 'text-muted-foreground hover:text-foreground'\n }`}\n >\n <WebhookIcon />\n Webhooks\n </button>\n </div>\n\n {/* Deposit Tab */}\n {activeTab === 'deposit' && (\n <div className=\"border border-border bg-background p-6 space-y-4\">\n <div>\n <h3 className=\"font-semibold\">Initiate Deposit</h3>\n <p className=\"text-xs text-muted-foreground\">Collect payment from a Mobile Money user</p>\n </div>\n\n <div className=\"grid sm:grid-cols-2 gap-4\">\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Phone Number</label>\n <input\n placeholder=\"237670000000\"\n value={phoneNumber}\n onChange={(e) => setPhoneNumber(e.target.value)}\n className=\"w-full h-8 px-2.5 text-xs border border-input bg-transparent rounded-none outline-none focus:border-ring\"\n />\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Amount</label>\n <input\n type=\"number\"\n placeholder=\"5000\"\n value={amount}\n onChange={(e) => setAmount(e.target.value)}\n className=\"w-full h-8 px-2.5 text-xs border border-input bg-transparent rounded-none outline-none focus:border-ring\"\n />\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Currency</label>\n <select\n value={currency}\n onChange={(e) => setCurrency(e.target.value)}\n className=\"w-full h-8 px-2.5 text-xs border border-input bg-transparent rounded-none outline-none focus:border-ring\"\n >\n {CURRENCY_OPTIONS.map((c) => (\n <option key={c.value} value={c.value}>{c.label}</option>\n ))}\n </select>\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Provider</label>\n <select\n value={provider}\n onChange={(e) => setProvider(e.target.value as Correspondent)}\n className=\"w-full h-8 px-2.5 text-xs border border-input bg-transparent rounded-none outline-none focus:border-ring\"\n >\n {PROVIDER_OPTIONS.map((c) => (\n <option key={c.value} value={c.value}>{c.label} ({c.country})</option>\n ))}\n </select>\n </div>\n <div className=\"space-y-2 sm:col-span-2\">\n <label className=\"text-xs font-medium\">Customer Message (4-22 chars)</label>\n <input\n placeholder=\"Payment description\"\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n maxLength={22}\n className=\"w-full h-8 px-2.5 text-xs border border-input bg-transparent rounded-none outline-none focus:border-ring\"\n />\n </div>\n </div>\n\n <button\n onClick={handleDeposit}\n disabled={currentStatus === 'loading'}\n className=\"w-full h-8 px-3 text-xs font-medium bg-primary text-primary-foreground hover:bg-primary/90 disabled:opacity-50 transition-colors flex items-center justify-center gap-2\"\n >\n {currentStatus === 'loading' ? <LoaderIcon /> : <PlayIcon />}\n Execute Deposit\n </button>\n </div>\n )}\n\n {/* Payout Tab */}\n {activeTab === 'payout' && (\n <div className=\"border border-border bg-background p-6 space-y-4\">\n <div>\n <h3 className=\"font-semibold\">Initiate Payout</h3>\n <p className=\"text-xs text-muted-foreground\">Send money to a Mobile Money account</p>\n </div>\n\n <div className=\"grid sm:grid-cols-2 gap-4\">\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Recipient Phone</label>\n <input\n placeholder=\"237670000000\"\n value={phoneNumber}\n onChange={(e) => setPhoneNumber(e.target.value)}\n className=\"w-full h-8 px-2.5 text-xs border border-input bg-transparent rounded-none outline-none focus:border-ring\"\n />\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Amount</label>\n <input\n type=\"number\"\n placeholder=\"5000\"\n value={amount}\n onChange={(e) => setAmount(e.target.value)}\n className=\"w-full h-8 px-2.5 text-xs border border-input bg-transparent rounded-none outline-none focus:border-ring\"\n />\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Currency</label>\n <select\n value={currency}\n onChange={(e) => setCurrency(e.target.value)}\n className=\"w-full h-8 px-2.5 text-xs border border-input bg-transparent rounded-none outline-none focus:border-ring\"\n >\n {CURRENCY_OPTIONS.map((c) => (\n <option key={c.value} value={c.value}>{c.label}</option>\n ))}\n </select>\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Provider</label>\n <select\n value={provider}\n onChange={(e) => setProvider(e.target.value as Correspondent)}\n className=\"w-full h-8 px-2.5 text-xs border border-input bg-transparent rounded-none outline-none focus:border-ring\"\n >\n {PROVIDER_OPTIONS.map((c) => (\n <option key={c.value} value={c.value}>{c.label} ({c.country})</option>\n ))}\n </select>\n </div>\n </div>\n\n <button\n onClick={handlePayout}\n disabled={currentStatus === 'loading'}\n className=\"w-full h-8 px-3 text-xs font-medium bg-primary text-primary-foreground hover:bg-primary/90 disabled:opacity-50 transition-colors flex items-center justify-center gap-2\"\n >\n {currentStatus === 'loading' ? <LoaderIcon /> : <PlayIcon />}\n Execute Payout\n </button>\n </div>\n )}\n\n {/* Status Tab */}\n {activeTab === 'status' && (\n <div className=\"border border-border bg-background p-6 space-y-4\">\n <div>\n <h3 className=\"font-semibold\">Check Transaction Status</h3>\n <p className=\"text-xs text-muted-foreground\">Query the status of a transaction</p>\n </div>\n\n <div className=\"space-y-4\">\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Transaction ID</label>\n <div className=\"flex gap-2\">\n <input\n placeholder=\"Enter transaction ID (UUID)\"\n value={transactionId}\n onChange={(e) => setTransactionId(e.target.value)}\n className=\"flex-1 h-8 px-2.5 text-xs border border-input bg-transparent rounded-none outline-none focus:border-ring font-mono\"\n />\n {transactionId && (\n <button\n onClick={() => copyToClipboard(transactionId)}\n className=\"w-8 h-8 border border-border bg-background hover:bg-muted transition-colors flex items-center justify-center\"\n title=\"Copy to clipboard\"\n >\n <CopyIcon />\n </button>\n )}\n </div>\n </div>\n\n <button\n onClick={handleCheckStatus}\n disabled={currentStatus === 'loading' || !transactionId}\n className=\"w-full h-8 px-3 text-xs font-medium bg-primary text-primary-foreground hover:bg-primary/90 disabled:opacity-50 transition-colors flex items-center justify-center gap-2\"\n >\n {currentStatus === 'loading' ? <LoaderIcon /> : <RefreshIcon />}\n Check Status\n </button>\n </div>\n </div>\n )}\n\n {/* Toolkit Tab */}\n {activeTab === 'toolkit' && (\n <div className=\"space-y-4\">\n <div className=\"border border-border bg-background p-6 space-y-4\">\n <div>\n <h3 className=\"font-semibold\">Predict Provider</h3>\n <p className=\"text-xs text-muted-foreground\">Predict the provider from a phone number</p>\n </div>\n\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Phone Number</label>\n <input\n placeholder=\"+237 670 000 000\"\n value={phoneNumber}\n onChange={(e) => setPhoneNumber(e.target.value)}\n className=\"w-full h-8 px-2.5 text-xs border border-input bg-transparent rounded-none outline-none focus:border-ring\"\n />\n </div>\n\n <button\n onClick={handlePredictProvider}\n disabled={currentStatus === 'loading'}\n className=\"w-full h-8 px-3 text-xs font-medium bg-primary text-primary-foreground hover:bg-primary/90 disabled:opacity-50 transition-colors flex items-center justify-center gap-2\"\n >\n {currentStatus === 'loading' ? <LoaderIcon /> : <SearchIcon />}\n Predict Provider\n </button>\n </div>\n\n <div className=\"grid sm:grid-cols-3 gap-3\">\n <button\n onClick={handleGetAvailability}\n disabled={currentStatus === 'loading'}\n className=\"h-10 px-3 text-xs font-medium border border-border bg-background hover:bg-muted disabled:opacity-50 transition-colors flex items-center justify-center gap-2\"\n >\n <SignalIcon />\n Provider Availability\n </button>\n <button\n onClick={handleGetActiveConfig}\n disabled={currentStatus === 'loading'}\n className=\"h-10 px-3 text-xs font-medium border border-border bg-background hover:bg-muted disabled:opacity-50 transition-colors flex items-center justify-center gap-2\"\n >\n <SettingsIcon />\n Active Config\n </button>\n <button\n onClick={handleGetPublicKeys}\n disabled={currentStatus === 'loading'}\n className=\"h-10 px-3 text-xs font-medium border border-border bg-background hover:bg-muted disabled:opacity-50 transition-colors flex items-center justify-center gap-2\"\n >\n <KeyIcon />\n Public Keys\n </button>\n </div>\n </div>\n )}\n\n {/* Finances Tab */}\n {activeTab === 'finances' && (\n <div className=\"space-y-4\">\n <div className=\"border border-border bg-background p-6 space-y-4\">\n <div>\n <h3 className=\"font-semibold\">Wallet Balances</h3>\n <p className=\"text-xs text-muted-foreground\">View balances for all your wallets</p>\n </div>\n\n <button\n onClick={handleGetWalletBalances}\n disabled={currentStatus === 'loading'}\n className=\"w-full h-8 px-3 text-xs font-medium bg-primary text-primary-foreground hover:bg-primary/90 disabled:opacity-50 transition-colors flex items-center justify-center gap-2\"\n >\n {currentStatus === 'loading' ? <LoaderIcon /> : <WalletIcon />}\n Get Wallet Balances\n </button>\n </div>\n\n <div className=\"border border-border bg-background p-6 space-y-4\">\n <div>\n <h3 className=\"font-semibold\">Statements</h3>\n <p className=\"text-xs text-muted-foreground\">Generate financial statements for your wallets</p>\n </div>\n\n <div className=\"p-4 bg-muted/50 text-xs text-muted-foreground\">\n Statement generation requires callback URL configuration. Use the SDK directly:\n <pre className=\"mt-2 p-2 bg-background overflow-x-auto\">\n{`await sdk.finances.generateStatement({\n wallet: { country: 'CMR', currency: 'XAF' },\n callbackUrl: 'https://your-site.com/callback',\n startDate: '2025-01-01T00:00:00Z',\n endDate: '2025-01-31T23:59:59Z',\n});`}\n </pre>\n </div>\n </div>\n </div>\n )}\n\n {/* Webhooks Tab */}\n {activeTab === 'webhooks' && (\n <div className=\"space-y-4\">\n {/* Webhook Secret Configuration */}\n <div className=\"border border-border bg-background p-6 space-y-4\">\n <div>\n <h3 className=\"font-semibold\">Webhook Secret</h3>\n <p className=\"text-xs text-muted-foreground\">Configure the secret used for signing webhooks</p>\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Secret Key</label>\n <input\n type=\"text\"\n placeholder=\"whsec_...\"\n value={webhookSecret}\n onChange={(e) => setWebhookSecret(e.target.value)}\n className=\"w-full h-8 px-2.5 text-xs font-mono border border-input bg-transparent rounded-none outline-none focus:border-ring\"\n />\n </div>\n </div>\n\n {/* Webhook Simulator */}\n <div className=\"border border-border bg-background p-6 space-y-4\">\n <div>\n <h3 className=\"font-semibold\">Webhook Simulator</h3>\n <p className=\"text-xs text-muted-foreground\">Generate mock webhook events for testing</p>\n </div>\n\n <div className=\"grid sm:grid-cols-2 gap-4\">\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Event Type</label>\n <select\n value={webhookEventType}\n onChange={(e) => setWebhookEventType(e.target.value as WebhookEventType)}\n className=\"w-full h-8 px-2.5 text-xs border border-input bg-transparent rounded-none outline-none focus:border-ring\"\n >\n {WEBHOOK_EVENT_TYPES.map((type) => (\n <option key={type} value={type}>{type}</option>\n ))}\n </select>\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Amount</label>\n <input\n type=\"number\"\n placeholder=\"5000\"\n value={webhookAmount}\n onChange={(e) => setWebhookAmount(e.target.value)}\n className=\"w-full h-8 px-2.5 text-xs border border-input bg-transparent rounded-none outline-none focus:border-ring\"\n />\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Phone Number</label>\n <input\n placeholder=\"237670000000\"\n value={webhookPhone}\n onChange={(e) => setWebhookPhone(e.target.value)}\n className=\"w-full h-8 px-2.5 text-xs border border-input bg-transparent rounded-none outline-none focus:border-ring\"\n />\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Provider</label>\n <select\n value={webhookProvider}\n onChange={(e) => setWebhookProvider(e.target.value as Correspondent)}\n className=\"w-full h-8 px-2.5 text-xs border border-input bg-transparent rounded-none outline-none focus:border-ring\"\n >\n {PROVIDER_OPTIONS.map((p) => (\n <option key={p.value} value={p.value}>{p.label} ({p.country})</option>\n ))}\n </select>\n </div>\n </div>\n\n <button\n onClick={async () => {\n const event = generateWebhook(webhookEventType, {\n amount: webhookAmount,\n phoneNumber: webhookPhone,\n correspondent: webhookProvider,\n });\n const payload = JSON.stringify(event, null, 2);\n const signature = await computeHmacSha256(JSON.stringify(event), webhookSecret);\n setGeneratedPayload(payload);\n setGeneratedSignature(signature);\n\n // Add to event log\n const newEvent: WebhookTestEvent = {\n id: generateUUID(),\n eventType: webhookEventType,\n payload: event,\n signature,\n receivedAt: new Date().toLocaleTimeString(),\n isVerified: null,\n };\n setWebhookEvents((prev) => [newEvent, ...prev].slice(0, 50));\n addResult('Generate Webhook', 'success', { eventType: webhookEventType, eventId: event.eventId });\n }}\n className=\"w-full h-8 px-3 text-xs font-medium bg-primary text-primary-foreground hover:bg-primary/90 transition-colors flex items-center justify-center gap-2\"\n >\n <PlayIcon />\n Generate Event\n </button>\n\n {generatedPayload && (\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between\">\n <label className=\"text-xs font-medium\">Generated Payload</label>\n <button\n onClick={() => copyToClipboard(generatedPayload)}\n className=\"text-xs text-muted-foreground hover:text-foreground\"\n >\n Copy\n </button>\n </div>\n <pre className=\"text-xs bg-muted p-3 overflow-x-auto max-h-48\">\n {generatedPayload}\n </pre>\n <div className=\"flex items-center gap-2\">\n <label className=\"text-xs font-medium\">Signature:</label>\n <code className=\"text-xs bg-muted px-2 py-1 font-mono flex-1 overflow-x-auto\">\n {generatedSignature}\n </code>\n <button\n onClick={() => copyToClipboard(generatedSignature)}\n className=\"w-8 h-8 border border-border bg-background hover:bg-muted transition-colors flex items-center justify-center\"\n >\n <CopyIcon />\n </button>\n </div>\n </div>\n )}\n </div>\n\n {/* Signature Verifier */}\n <div className=\"border border-border bg-background p-6 space-y-4\">\n <div>\n <h3 className=\"font-semibold\">Signature Verifier</h3>\n <p className=\"text-xs text-muted-foreground\">Test webhook signature verification</p>\n </div>\n\n <div className=\"space-y-4\">\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Payload (JSON)</label>\n <textarea\n placeholder='{\"eventId\": \"...\", \"eventType\": \"deposit.completed\", ...}'\n value={verifyPayload}\n onChange={(e) => setVerifyPayload(e.target.value)}\n rows={4}\n className=\"w-full px-2.5 py-2 text-xs font-mono border border-input bg-transparent rounded-none outline-none focus:border-ring resize-none\"\n />\n </div>\n <div className=\"grid sm:grid-cols-2 gap-4\">\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Signature</label>\n <input\n placeholder=\"HMAC-SHA256 signature\"\n value={verifySignature}\n onChange={(e) => setVerifySignature(e.target.value)}\n className=\"w-full h-8 px-2.5 text-xs font-mono border border-input bg-transparent rounded-none outline-none focus:border-ring\"\n />\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Secret</label>\n <input\n type=\"password\"\n placeholder=\"whsec_...\"\n value={verifySecret}\n onChange={(e) => setVerifySecret(e.target.value)}\n className=\"w-full h-8 px-2.5 text-xs font-mono border border-input bg-transparent rounded-none outline-none focus:border-ring\"\n />\n </div>\n </div>\n\n <button\n onClick={async () => {\n try {\n const parsedPayload = JSON.parse(verifyPayload);\n const computedSignature = await computeHmacSha256(JSON.stringify(parsedPayload), verifySecret);\n const isValid = computedSignature === verifySignature;\n setVerifyResult(isValid);\n addResult('Verify Signature', isValid ? 'success' : 'error', {\n isValid,\n expected: computedSignature,\n received: verifySignature,\n });\n } catch {\n setVerifyResult(false);\n addResult('Verify Signature', 'error', undefined, 'Invalid JSON payload');\n }\n }}\n className=\"w-full h-8 px-3 text-xs font-medium bg-primary text-primary-foreground hover:bg-primary/90 transition-colors flex items-center justify-center gap-2\"\n >\n <ShieldIcon />\n Verify Signature\n </button>\n\n {verifyResult !== null && (\n <div className={`p-3 text-xs flex items-center gap-2 ${\n verifyResult ? 'bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200' : 'bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-200'\n }`}>\n {verifyResult ? <CheckIcon className=\"text-green-600\" /> : <XIcon className=\"text-red-600\" />}\n {verifyResult ? 'Signature is valid' : 'Signature is invalid'}\n </div>\n )}\n </div>\n </div>\n\n {/* Event Parser */}\n <div className=\"border border-border bg-background p-6 space-y-4\">\n <div>\n <h3 className=\"font-semibold\">Event Parser</h3>\n <p className=\"text-xs text-muted-foreground\">Parse and analyze raw webhook JSON</p>\n </div>\n\n <div className=\"space-y-4\">\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Raw JSON</label>\n <textarea\n placeholder='Paste webhook JSON here...'\n value={parseInput}\n onChange={(e) => setParseInput(e.target.value)}\n rows={4}\n className=\"w-full px-2.5 py-2 text-xs font-mono border border-input bg-transparent rounded-none outline-none focus:border-ring resize-none\"\n />\n </div>\n\n <button\n onClick={() => {\n try {\n const parsed = JSON.parse(parseInput) as Record<string, unknown>;\n setParsedEvent(parsed);\n setParseError('');\n addResult('Parse Event', 'success', { eventType: parsed.eventType, eventId: parsed.eventId });\n } catch (e) {\n setParsedEvent(null);\n setParseError(e instanceof Error ? e.message : 'Invalid JSON');\n addResult('Parse Event', 'error', undefined, 'Invalid JSON');\n }\n }}\n className=\"w-full h-8 px-3 text-xs font-medium bg-primary text-primary-foreground hover:bg-primary/90 transition-colors flex items-center justify-center gap-2\"\n >\n <CodeIcon />\n Parse Event\n </button>\n\n {parseError && (\n <div className=\"p-3 text-xs bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-200\">\n {parseError}\n </div>\n )}\n\n {parsedEvent && (\n <div className=\"space-y-3\">\n <div className=\"grid grid-cols-2 gap-2 text-xs\">\n <div className=\"p-2 bg-muted\">\n <span className=\"text-muted-foreground\">Event ID:</span>\n <p className=\"font-mono truncate\">{String(parsedEvent.eventId ?? 'N/A')}</p>\n </div>\n <div className=\"p-2 bg-muted\">\n <span className=\"text-muted-foreground\">Event Type:</span>\n <p className=\"font-medium\">{String(parsedEvent.eventType ?? 'N/A')}</p>\n </div>\n <div className=\"p-2 bg-muted\">\n <span className=\"text-muted-foreground\">Timestamp:</span>\n <p className=\"font-mono truncate\">{String(parsedEvent.timestamp ?? 'N/A')}</p>\n </div>\n <div className=\"p-2 bg-muted\">\n <span className=\"text-muted-foreground\">Status:</span>\n <p className=\"font-medium\">{String((parsedEvent.data as Record<string, unknown>)?.status ?? 'N/A')}</p>\n </div>\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium\">Full Data</label>\n <pre className=\"text-xs bg-muted p-3 overflow-x-auto max-h-48\">\n {JSON.stringify(parsedEvent, null, 2)}\n </pre>\n </div>\n </div>\n )}\n </div>\n </div>\n\n {/* Event Log */}\n <div className=\"border border-border bg-background p-6 space-y-4\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h3 className=\"font-semibold\">Event Log</h3>\n <p className=\"text-xs text-muted-foreground\">History of generated webhook events</p>\n </div>\n <div className=\"flex items-center gap-2\">\n <select\n value={eventLogFilter}\n onChange={(e) => setEventLogFilter(e.target.value as 'all' | 'deposit' | 'payout' | 'refund')}\n className=\"h-8 px-2 text-xs border border-input bg-transparent rounded-none outline-none focus:border-ring\"\n >\n <option value=\"all\">All</option>\n <option value=\"deposit\">Deposits</option>\n <option value=\"payout\">Payouts</option>\n <option value=\"refund\">Refunds</option>\n </select>\n {webhookEvents.length > 0 && (\n <button\n onClick={() => setWebhookEvents([])}\n className=\"text-xs text-muted-foreground hover:text-foreground\"\n >\n Clear\n </button>\n )}\n </div>\n </div>\n\n <div className=\"divide-y divide-border max-h-64 overflow-y-auto\">\n {webhookEvents\n .filter((event) => eventLogFilter === 'all' || event.eventType.startsWith(eventLogFilter))\n .length === 0 ? (\n <div className=\"p-4 text-center text-muted-foreground text-xs\">\n No events yet. Generate a webhook event to see it here.\n </div>\n ) : (\n webhookEvents\n .filter((event) => eventLogFilter === 'all' || event.eventType.startsWith(eventLogFilter))\n .map((event) => (\n <div key={event.id} className=\"py-3 space-y-1\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <span className={`px-1.5 py-0.5 text-xs font-medium ${\n event.eventType.includes('completed') ? 'bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200' :\n event.eventType.includes('failed') ? 'bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-200' :\n 'bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-200'\n }`}>\n {event.eventType}\n </span>\n </div>\n <span className=\"text-xs text-muted-foreground\">{event.receivedAt}</span>\n </div>\n <div className=\"text-xs text-muted-foreground font-mono truncate\">\n sig: {event.signature.slice(0, 32)}...\n </div>\n </div>\n ))\n )}\n </div>\n </div>\n </div>\n )}\n </div>\n\n {/* Results Panel */}\n <div className=\"space-y-4\">\n <div className=\"flex items-center justify-between\">\n <h3 className=\"font-semibold\">Results</h3>\n {results.length > 0 && (\n <button\n onClick={() => setResults([])}\n className=\"text-xs text-muted-foreground hover:text-foreground\"\n >\n Clear\n </button>\n )}\n </div>\n\n <div className=\"border border-border bg-background divide-y divide-border max-h-[600px] overflow-y-auto\">\n {results.length === 0 ? (\n <div className=\"p-6 text-center text-muted-foreground text-xs\">\n No results yet. Execute an operation to see results here.\n </div>\n ) : (\n results.map((result) => (\n <div key={result.id} className=\"p-4 space-y-2\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n {result.status === 'success' ? (\n <CheckIcon className=\"text-green-600\" />\n ) : (\n <XIcon className=\"text-red-600\" />\n )}\n <span className=\"font-medium text-sm\">{result.operation}</span>\n </div>\n <span className=\"text-xs text-muted-foreground\">{result.timestamp}</span>\n </div>\n\n {result.error ? (\n <p className=\"text-xs text-red-600\">{result.error}</p>\n ) : (\n <pre className=\"text-xs bg-muted p-2 overflow-x-auto max-h-48\">\n {JSON.stringify(result.response, null, 2)}\n </pre>\n )}\n </div>\n ))\n )}\n </div>\n </div>\n </div>\n </div>\n );\n}\n\n// Simple SVG Icons (no external dependencies)\nconst SettingsIcon = () => (\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z\" />\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 12a3 3 0 11-6 0 3 3 0 016 0z\" />\n </svg>\n);\n\nconst PlayIcon = () => (\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M14.752 11.168l-3.197-2.132A1 1 0 0010 9.87v4.263a1 1 0 001.555.832l3.197-2.132a1 1 0 000-1.664z\" />\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n);\n\nconst WalletIcon = () => (\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M3 10h18M7 15h1m4 0h1m-7 4h12a3 3 0 003-3V8a3 3 0 00-3-3H6a3 3 0 00-3 3v8a3 3 0 003 3z\" />\n </svg>\n);\n\nconst PhoneIcon = () => (\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 18h.01M8 21h8a2 2 0 002-2V5a2 2 0 00-2-2H8a2 2 0 00-2 2v14a2 2 0 002 2z\" />\n </svg>\n);\n\nconst RefreshIcon = () => (\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15\" />\n </svg>\n);\n\nconst LoaderIcon = () => (\n <svg className=\"w-4 h-4 animate-spin\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\" />\n </svg>\n);\n\nconst CopyIcon = () => (\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\" />\n </svg>\n);\n\nconst CheckIcon = ({ className = '' }: { className?: string }) => (\n <svg className={`w-4 h-4 ${className}`} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n);\n\nconst XIcon = ({ className = '' }: { className?: string }) => (\n <svg className={`w-4 h-4 ${className}`} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n);\n\nconst BeakerIcon = () => (\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19.428 15.428a2 2 0 00-1.022-.547l-2.387-.477a6 6 0 00-3.86.517l-.318.158a6 6 0 01-3.86.517L6.05 15.21a2 2 0 00-1.806.547M8 4h8l-1 1v5.172a2 2 0 00.586 1.414l5 5c1.26 1.26.367 3.414-1.415 3.414H4.828c-1.782 0-2.674-2.154-1.414-3.414l5-5A2 2 0 009 10.172V5L8 4z\" />\n </svg>\n);\n\nconst ToolkitIcon = () => (\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z\" />\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 12a3 3 0 11-6 0 3 3 0 016 0z\" />\n </svg>\n);\n\nconst ChartIcon = () => (\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z\" />\n </svg>\n);\n\nconst SearchIcon = () => (\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\" />\n </svg>\n);\n\nconst SignalIcon = () => (\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M8.111 16.404a5.5 5.5 0 017.778 0M12 20h.01m-7.08-7.071c3.904-3.905 10.236-3.905 14.141 0M1.394 9.393c5.857-5.857 15.355-5.857 21.213 0\" />\n </svg>\n);\n\nconst KeyIcon = () => (\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 7a2 2 0 012 2m4 0a6 6 0 01-7.743 5.743L11 17H9v2H7v2H4a1 1 0 01-1-1v-2.586a1 1 0 01.293-.707l5.964-5.964A6 6 0 1121 9z\" />\n </svg>\n);\n\nconst WebhookIcon = () => (\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M13 10V3L4 14h7v7l9-11h-7z\" />\n </svg>\n);\n\nconst ShieldIcon = () => (\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z\" />\n </svg>\n);\n\nconst CodeIcon = () => (\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4\" />\n </svg>\n);\n\nexport default SpaarkPaySdkTestDashboard;\n"]}