{"version":3,"file":"utils-BqlFYocD.cjs","names":["supportsANSI","getEnvironment","supportsANSI","StyleBuilder"],"sources":["../../src/utils/stackTrace.ts","../../src/utils/timestamps.ts","../../src/constants.ts","../../src/utils/ansi-colors.ts","../../src/utils/output.ts","../../src/utils/formatting.ts"],"sourcesContent":["/**\n * @fileoverview Stack trace parsing utilities for Advanced Logger\n */\n\nimport type { StackInfo } from '../types/index.js';\n\n/**\n * Check if a filename represents a minified/bundle file\n */\nfunction isMinifiedFile(filename: string): boolean {\n    // Skip if filename contains minified patterns\n    const minifiedPatterns = [\n        /\\.min\\.js$/,\n        /\\.bundle\\.js$/,\n        /\\.chunk\\.js$/,\n        /-[\\w\\d]{8,}\\.js$/, // Hash-based filenames\n        /Logger-[A-Za-z0-9]+\\.js$/, // Logger bundle files\n        /node_modules/,\n        /dist\\//,\n        /build\\//,\n        /\\.mjs$/\n    ];\n\n    return minifiedPatterns.some(pattern => pattern.test(filename));\n}\n\n/**\n * Extract clean filename from full path\n */\nfunction extractCleanFilename(fullPath: string): string {\n    // Extract just the filename from the full path\n    const filename = fullPath.split(/[/\\\\]/).pop() || fullPath;\n\n    // Remove common build/minified suffixes\n    return filename\n        .replace(/\\.min\\.js$/, '.js')\n        .replace(/\\.bundle\\.js$/, '.js')\n        .replace(/\\.chunk\\.js$/, '.js')\n        .replace(/-[\\w\\d]{8,}\\.js$/, '.js')\n        .replace(/Logger-[A-Za-z0-9]+\\.js$/, 'logger.ts');\n}\n\n/**\n * Parses the current stack trace to extract caller information\n */\nexport function parseStackTrace(): StackInfo | null {\n    try {\n        const stack = new Error().stack;\n        if (!stack) {\n            return null;\n        }\n\n        const lines = stack.split('\\n').filter(line => line.trim());\n        \n        // Find the first caller that's not from Logger methods\n        for (let i = 1; i < lines.length; i++) {\n            const line = lines[i];\n            \n            if (!line) {\n                continue;\n            }\n            \n            // Skip if line contains Logger methods or parseStackTrace\n            if (line.includes('parseStackTrace') || \n                line.includes('Logger.') || \n                line.includes('.log(') ||\n                line.includes('createStyledOutput')) {\n                continue;\n            }\n\n            // Parse different stack trace formats\n            let match;\n            \n            // Chrome format: \"at functionName (file:line:column)\" or \"at file:line:column\"\n            const chromeMatch = line.match(/at\\s+(?:(.+?)\\s+\\()?(.+?):(\\d+):(\\d+)\\)?$/);\n            if (chromeMatch) {\n                const filename = chromeMatch[2];\n                // Skip minified/bundle files\n                if (filename && isMinifiedFile(filename)) {\n                    continue;\n                }\n                match = chromeMatch;\n            } else {\n                // Firefox format: \"functionName@file:line:column\"\n                const firefoxMatch = line.match(/(.+?)@(.+?):(\\d+):(\\d+)$/);\n                if (firefoxMatch) {\n                    const filename = firefoxMatch[2];\n                    // Skip minified/bundle files\n                    if (filename && isMinifiedFile(filename)) {\n                        continue;\n                    }\n                    match = firefoxMatch;\n                } else {\n                    // Safari/other formats\n                    const safariMatch = line.match(/(\\S+)?@(.+?):(\\d+):(\\d+)$/);\n                    if (safariMatch) {\n                        const filename = safariMatch[2];\n                        // Skip minified/bundle files\n                        if (filename && isMinifiedFile(filename)) {\n                            continue;\n                        }\n                        match = safariMatch;\n                    }\n                }\n            }\n\n            if (!match) {\n                continue;\n            }\n\n            const [, functionName, file, lineStr, columnStr] = match;\n            \n            if (!file) {\n                continue;\n            }\n            \n            // Use clean filename extraction to avoid minified files\n            const cleanFileName = extractCleanFilename(file).split('?')[0];\n            if (!cleanFileName) {\n                continue;\n            }\n            \n            // Parse line and column numbers\n            const lineNum = lineStr ? parseInt(lineStr, 10) : 0;\n            const columnNum = columnStr ? parseInt(columnStr, 10) : 0;\n            \n            // Clean function name\n            const cleanFunction = functionName && functionName.trim() \n                ? functionName.trim() \n                : undefined;\n                \n            return {\n                file: cleanFileName ? cleanFileName : 'unknown',\n                line: lineNum,\n                column: columnNum,\n                function: cleanFunction\n            };\n        }\n        \n        return null;\n    } catch {\n        return null;\n    }\n}","/**\n * @fileoverview Timestamp utilities for Advanced Logger\n */\n\n/**\n * Formats the timestamp using modern Date API\n */\nexport function formatTimestamp(): string {\n    try {\n        // Use modern Temporal API if available, fallback to Date\n        const now = new Date();\n        return now.toISOString();\n    } catch {\n        return new Date().toISOString();\n    }\n}","/**\n * @fileoverview Global constants for Advanced Logger\n */\n\nimport type { LogLevel, AdaptiveColors, CLILogLevel, Verbosity } from './types/index.js';\nimport type { LevelStyleConfig } from './utils/index.js';\n\n/**\n * Default configuration values\n */\nexport const DEFAULT_CONFIG = {\n    verbosity: 'info' as const,\n    enableColors: true,\n    enableTimestamps: true,\n    enableStackTrace: true,\n    theme: 'default' as const,\n    bannerType: 'simple' as const,\n    bufferSize: 1000,\n    autoDetectTheme: true,\n    outputFormat: 'auto' as const,\n} as const;\n\n/**\n * Basic level styles for core module (minimal CSS styling)\n */\nexport const LEVEL_STYLES: Record<LogLevel | 'success', LevelStyleConfig> = {\n    trace: {\n        emoji: '🔬',\n        label: 'TRACE',\n        background: 'linear-gradient(90deg, #495057, #343a40)',\n        color: '#dee2e6',\n        border: '1px solid #495057',\n        shadow: '0 1px 2px rgba(73, 80, 87, 0.3)'\n    },\n    debug: {\n        emoji: '🔍',\n        label: 'DEBUG',\n        background: 'linear-gradient(90deg, #6c757d, #495057)',\n        color: '#ffffff',\n        border: '1px solid #6c757d',\n        shadow: '0 2px 4px rgba(108, 117, 125, 0.3)'\n    },\n    info: {\n        emoji: 'ℹ️',\n        label: 'INFO',\n        background: 'linear-gradient(90deg, #007bff, #0056b3)',\n        color: '#ffffff',\n        border: '1px solid #007bff',\n        shadow: '0 2px 4px rgba(0, 123, 255, 0.3)'\n    },\n    warn: {\n        emoji: '⚠️',\n        label: 'WARN',\n        background: 'linear-gradient(90deg, #ffc107, #e0a800)',\n        color: '#000000',\n        border: '1px solid #ffc107',\n        shadow: '0 2px 4px rgba(255, 193, 7, 0.3)'\n    },\n    error: {\n        emoji: '❌',\n        label: 'ERROR',\n        background: 'linear-gradient(90deg, #dc3545, #c82333)',\n        color: '#ffffff',\n        border: '1px solid #dc3545',\n        shadow: '0 2px 4px rgba(220, 53, 69, 0.3)'\n    },\n    critical: {\n        emoji: '🚨',\n        label: 'CRITICAL',\n        background: 'linear-gradient(90deg, #8B0000, #FF0000)',\n        color: '#ffffff',\n        border: '2px solid #FF0000',\n        shadow: '0 4px 8px rgba(255, 0, 0, 0.4)'\n    },\n    success: {\n        emoji: '✅',\n        label: 'SUCCESS',\n        background: 'linear-gradient(90deg, #28a745, #1e7e34)',\n        color: '#ffffff',\n        border: '1px solid #28a745',\n        shadow: '0 2px 4px rgba(40, 167, 69, 0.3)'\n    }\n} as const;\n\n/**\n * Time parsing constants for relative time filters\n */\nexport const TIME_UNITS = {\n    ms: 1,\n    s: 1000,\n    m: 60 * 1000,\n    h: 60 * 60 * 1000,\n    d: 24 * 60 * 60 * 1000,\n} as const;\n\n/**\n * Export format definitions with extensions\n */\nexport const EXPORT_FORMATS = {\n    json: { extension: '.json', mimeType: 'application/json' },\n    csv: { extension: '.csv', mimeType: 'text/csv' },\n    markdown: { extension: '.md', mimeType: 'text/markdown' },\n    plain: { extension: '.txt', mimeType: 'text/plain' },\n    html: { extension: '.html', mimeType: 'text/html' },\n} as const;\n\n/**\n * Adaptive color configurations for DevTools theme compatibility\n */\nexport const ADAPTIVE_COLORS = {\n    timestamp: {\n        light: '#666666',\n        dark: '#a0a0a0',\n    },\n    messageText: {\n        light: '#2d3748',\n        dark: '#f7fafc',\n    },\n    prefix: {\n        light: '#2d3748',\n        dark: '#e2e8f0',\n    },\n    prefixBackground: {\n        light: '#2d3748',\n        dark: '#4a5568',\n    },\n    location: {\n        light: '#718096',\n        dark: '#a0aec0',\n    },\n} as const satisfies Record<string, AdaptiveColors>;\n\n/**\n * CLI log level to internal verbosity mapping\n */\nexport const CLI_LEVEL_MAP: Record<CLILogLevel, { verbosity: Verbosity; showPrimitives: boolean }> = {\n    silent:  { verbosity: 'silent',  showPrimitives: false },\n    quiet:   { verbosity: 'error',   showPrimitives: false },\n    normal:  { verbosity: 'info',    showPrimitives: true  },\n    verbose: { verbosity: 'debug',   showPrimitives: true  },\n    debug:   { verbosity: 'debug',   showPrimitives: true  },\n} as const;","/**\n * @fileoverview ANSI color utilities for terminal environments\n */\n\nimport type { LogLevel } from '../types/index.js';\nimport { supportsANSI } from './environment-detector.js';\n\n/**\n * ANSI color codes for terminal styling\n */\nexport const ANSI_CODES = {\n    // Colors\n    black: 30,\n    red: 31,\n    green: 32,\n    yellow: 33,\n    blue: 34,\n    magenta: 35,\n    cyan: 36,\n    white: 37,\n\n    // Bright colors\n    brightBlack: 90,\n    brightRed: 91,\n    brightGreen: 92,\n    brightYellow: 93,\n    brightBlue: 94,\n    brightMagenta: 95,\n    brightCyan: 96,\n    brightWhite: 97,\n\n    // Background colors\n    bgBlack: 40,\n    bgRed: 41,\n    bgGreen: 42,\n    bgYellow: 43,\n    bgBlue: 44,\n    bgMagenta: 45,\n    bgCyan: 46,\n    bgWhite: 47,\n\n    // Background bright colors\n    bgBrightBlack: 100,\n    bgBrightRed: 101,\n    bgBrightGreen: 102,\n    bgBrightYellow: 103,\n    bgBrightBlue: 104,\n    bgBrightMagenta: 105,\n    bgBrightCyan: 106,\n    bgBrightWhite: 107,\n\n    // Styles\n    reset: 0,\n    bold: 1,\n    dim: 2,\n    italic: 3,\n    underline: 4,\n    blink: 5,\n    inverse: 7,\n    hidden: 8,\n    strikethrough: 9,\n\n    // Reset specific\n    resetBold: 22,\n    resetDim: 22,\n    resetItalic: 23,\n    resetUnderline: 24,\n    resetBlink: 25,\n    resetInverse: 27,\n    resetHidden: 28,\n    resetStrikethrough: 29\n} as const;\n\n/**\n * ANSI color presets for different log levels\n */\nexport const ANSI_LEVEL_STYLES: Record<LogLevel | 'success', {\n    color: number;\n    background?: number;\n    styles: number[];\n    emoji: string;\n}> = {\n    trace: {\n        color: ANSI_CODES.brightBlack,\n        styles: [ANSI_CODES.dim],\n        emoji: '🔬'\n    },\n    debug: {\n        color: ANSI_CODES.brightBlack,\n        styles: [ANSI_CODES.dim],\n        emoji: '🔍'\n    },\n    info: {\n        color: ANSI_CODES.blue,\n        styles: [ANSI_CODES.bold],\n        emoji: 'ℹ️'\n    },\n    warn: {\n        color: ANSI_CODES.yellow,\n        background: ANSI_CODES.bgYellow,\n        styles: [ANSI_CODES.bold, ANSI_CODES.black],\n        emoji: '⚠️'\n    },\n    error: {\n        color: ANSI_CODES.red,\n        background: ANSI_CODES.bgRed,\n        styles: [ANSI_CODES.bold],\n        emoji: '❌'\n    },\n    critical: {\n        color: ANSI_CODES.white,\n        background: ANSI_CODES.bgRed,\n        styles: [ANSI_CODES.bold, ANSI_CODES.blink],\n        emoji: '🚨'\n    },\n    success: {\n        color: ANSI_CODES.green,\n        background: ANSI_CODES.bgGreen,\n        styles: [ANSI_CODES.bold],\n        emoji: '✅'\n    }\n};\n\n/**\n * Creates an ANSI escape sequence\n */\nfunction ansi(code: number | number[]): string {\n    const codes = Array.isArray(code) ? code : [code];\n    return `\\x1b[${codes.join(';')}m`;\n}\n\n/**\n * Applies ANSI styling to text\n */\nexport function ansiStyle(text: string, codes: number[]): string {\n    if (!supportsANSI()) return text;\n    return `${ansi(codes)}${text}${ansi(ANSI_CODES.reset)}`;\n}\n\n/**\n * Applies color to text\n */\nexport function ansiColor(text: string, color: number): string {\n    return ansiStyle(text, [color]);\n}\n\n/**\n * Applies background color to text\n */\nexport function ansiBackground(text: string, bg: number, color?: number): string {\n    if (color) {\n        return ansiStyle(text, [color, bg]);\n    }\n    return ansiStyle(text, [bg]);\n}\n\n/**\n * Makes text bold\n */\nexport function ansiBold(text: string): string {\n    return ansiStyle(text, [ANSI_CODES.bold]);\n}\n\n/**\n * Makes text dim\n */\nexport function ansiDim(text: string): string {\n    return ansiStyle(text, [ANSI_CODES.dim]);\n}\n\n/**\n * Underlines text\n */\nexport function ansiUnderline(text: string): string {\n    return ansiStyle(text, [ANSI_CODES.underline]);\n}\n\n/**\n * Specialized formatters for different contexts\n */\n\n/**\n * Format timestamp for terminal\n */\nexport function formatTimestampANSI(timestamp: string): string {\n    return ansiColor(timestamp, ANSI_CODES.brightBlack);\n}\n\n/**\n * Format log level for terminal\n */\nexport function formatLogLevelANSI(level: LogLevel, useEmojis: boolean = true): string {\n    const style = ANSI_LEVEL_STYLES[level];\n    const emoji = useEmojis ? style.emoji : '';\n    const label = level.toUpperCase().padEnd(8);\n\n    if (!supportsANSI()) {\n        return `${emoji} ${label}`;\n    }\n\n    let codes = [style.color, ...style.styles];\n    if (style.background) {\n        codes.push(style.background);\n    }\n\n    return ansiStyle(`${emoji} ${label}`, codes);\n}\n\n/**\n * Format success message for terminal\n */\nexport function formatSuccessANSI(message: string, useEmojis: boolean = true): string {\n    const style = ANSI_LEVEL_STYLES.success;\n    const emoji = useEmojis ? style.emoji : '';\n\n    if (!supportsANSI()) {\n        return `${emoji} SUCCESS: ${message}`;\n    }\n\n    const prefix = ansiStyle(`${emoji} SUCCESS:`, [style.color, ...style.styles]);\n    return `${prefix} ${message}`;\n}\n\n/**\n * Format prefix for terminal\n */\nexport function formatPrefixANSI(prefix: string): string {\n    if (!supportsANSI()) {\n        return `[${prefix}]`;\n    }\n\n    return ansiStyle(`[${prefix}]`, [ANSI_CODES.cyan, ANSI_CODES.bold]);\n}\n\n/**\n * Format file location for terminal\n */\nexport function formatLocationANSI(location: string): string {\n    if (!supportsANSI()) {\n        return `(${location})`;\n    }\n\n    return ansiColor(`(${location})`, ANSI_CODES.brightBlack);\n}","/**\n * @fileoverview Styled output creation utilities for Advanced Logger\n */\n\nimport type { LogLevel, StackInfo, DevToolsTheme, AdaptiveColors } from '../types/index.js';\nimport { formatTimestamp } from './timestamps.js';\nimport { StyleBuilder } from '../styling/index.js';\nimport { ADAPTIVE_COLORS } from '../constants.js';\nimport { getEnvironment, supportsANSI } from './environment-detector.js';\nimport { formatLogLevelANSI, formatTimestampANSI, formatPrefixANSI, formatLocationANSI } from './ansi-colors.js';\nimport type { LogStyles } from '../types/index.js';\n\n/**\n * Style configuration for each log level\n */\nexport interface LevelStyleConfig {\n    emoji: string;\n    label: string;\n    background: string;\n    color: string;\n    border: string;\n    shadow: string;\n}\n\n/**\n * Detects the current DevTools theme preference\n */\nexport function detectDevToolsTheme(): DevToolsTheme {\n    try {\n        if (typeof window === 'undefined' || !window.matchMedia) {\n            return 'light'; // Safe fallback for SSR or older browsers\n        }\n\n        const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n        return mediaQuery.matches ? 'dark' : 'light';\n    } catch (error) {\n        console.warn('Failed to detect DevTools theme:', error);\n        return 'light'; // Fallback to light theme\n    }\n}\n\n/**\n * Gets adaptive color based on current DevTools theme\n */\nexport function getAdaptiveColor(colors: AdaptiveColors, theme?: DevToolsTheme): string {\n    const currentTheme = theme ?? detectDevToolsTheme();\n    return colors[currentTheme];\n}\n\n/**\n * Sets up theme change listener for dynamic updates\n */\nexport function setupThemeChangeListener(callback: (theme: DevToolsTheme) => void): (() => void) | null {\n    try {\n        if (typeof window === 'undefined' || !window.matchMedia) {\n            return null;\n        }\n\n        const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n        const handler = (e: MediaQueryListEvent) => {\n            callback(e.matches ? 'dark' : 'light');\n        };\n\n        // Use newer addEventListener if available, fallback to addListener\n        if (mediaQuery.addEventListener) {\n            mediaQuery.addEventListener('change', handler);\n            return () => mediaQuery.removeEventListener('change', handler);\n        } else if (mediaQuery.addListener) {\n            mediaQuery.addListener(handler);\n            return () => mediaQuery.removeListener?.(handler);\n        }\n\n        return null;\n    } catch (error) {\n        console.warn('Failed to set up theme change listener:', error);\n        return null;\n    }\n}\n\n\n/**\n * Creates styled console output with multiple %c formatters\n * Automatically adapts to browser or terminal environment\n */\nexport function createStyledOutput(\n    level: LogLevel,\n    levelStyles: Record<LogLevel | 'success', LevelStyleConfig>,\n    prefix: string | undefined,\n    message: string,\n    stackInfo: StackInfo | null,\n    autoDetectTheme: boolean = true,\n    presetStyles?: LogStyles,\n    presetName?: string\n): [string, ...string[]] {\n    const levelConfig = levelStyles[level];\n    const timestamp = formatTimestamp();\n    const environment = getEnvironment();\n\n    // Check if we should use terminal rendering\n    if (environment !== 'browser' && supportsANSI()) {\n        return createTerminalOutput(level, message, timestamp, prefix, stackInfo);\n    }\n\n    // Browser rendering (existing logic)\n    const currentTheme = autoDetectTheme ? detectDevToolsTheme() : 'light';\n\n    // Base styles with adaptive colors\n    const timestampStyle = new StyleBuilder()\n        .color(getAdaptiveColor(ADAPTIVE_COLORS.timestamp, currentTheme))\n        .size('11px')\n        .font('Monaco, Consolas, monospace')\n        .build();\n\n    const levelStyle = new StyleBuilder()\n        .bg(levelConfig.background)\n        .color(levelConfig.color)\n        .border(levelConfig.border)\n        .shadow(levelConfig.shadow)\n        .padding('2px 8px')\n        .rounded('4px')\n        .bold()\n        .font('Monaco, Consolas, monospace')\n        .size('12px')\n        .build();\n\n    const prefixStyle = new StyleBuilder()\n        .bg(getAdaptiveColor(ADAPTIVE_COLORS.prefixBackground, currentTheme))\n        .color(getAdaptiveColor(ADAPTIVE_COLORS.prefix, currentTheme))\n        .padding('2px 6px')\n        .rounded('3px')\n        .bold()\n        .font('Monaco, Consolas, monospace')\n        .size('11px')\n        .build();\n\n    const messageStyle = new StyleBuilder()\n        .color(getAdaptiveColor(ADAPTIVE_COLORS.messageText, currentTheme))\n        .font('system-ui, -apple-system, sans-serif')\n        .size('14px')\n        .build();\n\n    const locationStyle = new StyleBuilder()\n        .color(getAdaptiveColor(ADAPTIVE_COLORS.location, currentTheme))\n        .size('11px')\n        .font('Monaco, Consolas, monospace')\n        .build();\n\n    // Build format string and styles\n    let format = `%c${timestamp.slice(11, 23)} %c${levelConfig.emoji} ${levelConfig.label}`;\n    const styles = [timestampStyle, levelStyle];\n\n    if (prefix) {\n        format += ` %c${prefix}`;\n        styles.push(prefixStyle);\n    }\n\n    format += ` %c${message}`;\n    styles.push(messageStyle);\n\n    if (stackInfo) {\n        format += ` %c(${stackInfo.file}:${stackInfo.line}:${stackInfo.column})`;\n        styles.push(locationStyle);\n    }\n\n    return [format, ...styles];\n}\n\n/**\n * Builds a terminal-friendly line using the ANSI helpers. Used when the\n * runtime is not a browser but supports ANSI codes (TTY, modern terminal).\n *\n * Layout: `[HH:MM:SS.mmm] [LEVEL] [prefix] message (file:line)`\n */\nexport function createTerminalOutput(\n    level: LogLevel,\n    message: string,\n    timestamp?: string,\n    prefix?: string,\n    stackInfo?: StackInfo | null\n): [string, ...string[]] {\n    const ts = timestamp?.slice(11, 23) ?? '';\n    const location = stackInfo ? `${stackInfo.file}:${stackInfo.line}:${stackInfo.column}` : undefined;\n\n    const parts: string[] = [];\n    parts.push(formatTimestampANSI(`[${ts}]`));\n    parts.push(formatLogLevelANSI(level));\n    if (prefix) parts.push(formatPrefixANSI(prefix));\n    parts.push(message);\n    if (location) parts.push(formatLocationANSI(`(${location})`));\n\n    return [parts.join(' ') + '\\n'];\n}","/**\n * @fileoverview Formatting utilities for Universal Logger\n */\n\nimport type { LogLevel, StackInfo } from '../types/index.js';\nimport { formatTimestamp } from './timestamps.js';\n\n// Re-export the type for convenience\nexport type { OutputFormat } from '../types/index.js';\n\n/**\n * Creates plain text output for any environment\n * No colors, no styling - maximum compatibility\n */\nexport function createPlainOutput(\n    level: LogLevel,\n    message: string,\n    prefix?: string,\n    stackInfo?: StackInfo | null\n): string {\n    const timestamp = formatTimestamp();\n    const timeStr = timestamp.slice(11, 23); // HH:MM:SS.mmm\n\n    let output = `[${timeStr}] [${level.toUpperCase()}]`;\n\n    if (prefix) {\n        output += ` [${prefix}]`;\n    }\n\n    output += ` ${message}`;\n\n    if (stackInfo) {\n        output += ` (${stackInfo.file}:${stackInfo.line}:${stackInfo.column})`;\n    }\n\n    return output;\n}\n\n/**\n * Gets the appropriate log method for the level\n * Uses different console methods for better semantics\n */\nexport function getConsoleMethod(level: LogLevel): 'log' | 'info' | 'warn' | 'error' {\n    switch (level) {\n        case 'debug':\n            return 'log';\n        case 'info':\n            return 'info';\n        case 'warn':\n            return 'warn';\n        case 'error':\n        case 'critical':\n            return 'error';\n        default:\n            return 'log';\n    }\n}\n\n/**\n * Create a simple log entry object for handlers\n */\nexport function createLogEntry(\n    level: LogLevel,\n    message: string,\n    args: any[],\n    prefix?: string,\n    stackInfo?: StackInfo | null\n) {\n    return {\n        timestamp: formatTimestamp(),\n        level: level.toUpperCase(),\n        prefix,\n        message,\n        args: args.slice(1), // Exclude the first message argument\n        location: stackInfo ? {\n            file: stackInfo.file,\n            line: stackInfo.line,\n            column: stackInfo.column,\n            function: stackInfo.function\n        } : undefined,\n        raw: args\n    };\n}\n\n/**\n * Format data for table display in plain text\n */\nexport function formatTablePlain(data: any, columns?: string[]): string {\n    try {\n        if (Array.isArray(data)) {\n            if (data.length === 0) return '[Empty Array]';\n\n            // Simple array formatting\n            if (typeof data[0] !== 'object') {\n                return data.map((item, i) => `${i}: ${item}`).join('\\n');\n            }\n\n            // Object array formatting\n            const keys = columns || Object.keys(data[0] || {});\n            const header = keys.join('\\t');\n            const rows = data.map(item =>\n                keys.map(key => String(item[key] || '')).join('\\t')\n            );\n\n            return [header, ...rows].join('\\n');\n        }\n\n        if (typeof data === 'object' && data !== null) {\n            // Simple object formatting\n            return Object.entries(data)\n                .map(([key, value]) => `${key}: ${value}`)\n                .join('\\n');\n        }\n\n        return String(data);\n    } catch (error) {\n        return `[Error formatting table: ${error}]`;\n    }\n}\n\n/**\n * Safe object serialization for logging\n */\nexport function safeSerialize(obj: any, maxDepth: number = 3, currentDepth: number = 0): any {\n    if (currentDepth >= maxDepth) {\n        return '[Max Depth Reached]';\n    }\n\n    if (obj === null) return null;\n    if (obj === undefined) return '[undefined]';\n    if (typeof obj === 'function') return '[Function]';\n    if (obj instanceof Error) return `[Error: ${obj.message}]`;\n    if (obj instanceof Date) return obj.toISOString();\n    if (typeof obj !== 'object') return obj;\n\n    if (Array.isArray(obj)) {\n        return obj.map(item => safeSerialize(item, maxDepth, currentDepth + 1));\n    }\n\n    const result: any = {};\n    for (const [key, value] of Object.entries(obj)) {\n        result[key] = safeSerialize(value, maxDepth, currentDepth + 1);\n    }\n    return result;\n}"],"mappings":";;;;;;AASA,SAAS,eAAe,UAA2B;CAc/C,OAAO;EAXH;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CAGkB,CAAC,CAAC,MAAK,YAAW,QAAQ,KAAK,QAAQ,CAAC;AAClE;;;;AAKA,SAAS,qBAAqB,UAA0B;CAKpD,QAHiB,SAAS,MAAM,OAAO,CAAC,CAAC,IAAI,KAAK,SAAA,CAI7C,QAAQ,cAAc,KAAK,CAAC,CAC5B,QAAQ,iBAAiB,KAAK,CAAC,CAC/B,QAAQ,gBAAgB,KAAK,CAAC,CAC9B,QAAQ,oBAAoB,KAAK,CAAC,CAClC,QAAQ,4BAA4B,WAAW;AACxD;;;;AAKA,SAAgB,kBAAoC;CAChD,IAAI;EACA,MAAM,yBAAQ,IAAI,MAAM,EAAA,CAAE;EAC1B,IAAI,CAAC,OACD,OAAO;EAGX,MAAM,QAAQ,MAAM,MAAM,IAAI,CAAC,CAAC,QAAO,SAAQ,KAAK,KAAK,CAAC;EAG1D,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;GACnC,MAAM,OAAO,MAAM;GAEnB,IAAI,CAAC,MACD;GAIJ,IAAI,KAAK,SAAS,iBAAiB,KAC/B,KAAK,SAAS,SAAS,KACvB,KAAK,SAAS,OAAO,KACrB,KAAK,SAAS,oBAAoB,GAClC;GAIJ,IAAI;GAGJ,MAAM,cAAc,KAAK,MAAM,2CAA2C;GAC1E,IAAI,aAAa;IACb,MAAM,WAAW,YAAY;IAE7B,IAAI,YAAY,eAAe,QAAQ,GACnC;IAEJ,QAAQ;GACZ,OAAO;IAEH,MAAM,eAAe,KAAK,MAAM,0BAA0B;IAC1D,IAAI,cAAc;KACd,MAAM,WAAW,aAAa;KAE9B,IAAI,YAAY,eAAe,QAAQ,GACnC;KAEJ,QAAQ;IACZ,OAAO;KAEH,MAAM,cAAc,KAAK,MAAM,2BAA2B;KAC1D,IAAI,aAAa;MACb,MAAM,WAAW,YAAY;MAE7B,IAAI,YAAY,eAAe,QAAQ,GACnC;MAEJ,QAAQ;KACZ;IACJ;GACJ;GAEA,IAAI,CAAC,OACD;GAGJ,MAAM,GAAG,cAAc,MAAM,SAAS,aAAa;GAEnD,IAAI,CAAC,MACD;GAIJ,MAAM,gBAAgB,qBAAqB,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;GAC5D,IAAI,CAAC,eACD;GAIJ,MAAM,UAAU,UAAU,SAAS,SAAS,EAAE,IAAI;GAClD,MAAM,YAAY,YAAY,SAAS,WAAW,EAAE,IAAI;GAGxD,MAAM,gBAAgB,gBAAgB,aAAa,KAAK,IAClD,aAAa,KAAK,IAClB,KAAA;GAEN,OAAO;IACH,MAAM,gBAAgB,gBAAgB;IACtC,MAAM;IACN,QAAQ;IACR,UAAU;GACd;EACJ;EAEA,OAAO;CACX,QAAQ;EACJ,OAAO;CACX;AACJ;;;;;;;;;ACxIA,SAAgB,kBAA0B;CACtC,IAAI;EAGA,wBAAO,IADS,KACP,EAAA,CAAE,YAAY;CAC3B,QAAQ;EACJ,wBAAO,IAAI,KAAK,EAAA,CAAE,YAAY;CAClC;AACJ;;;;;;ACLA,MAAa,iBAAiB;CAC1B,WAAW;CACX,cAAc;CACd,kBAAkB;CAClB,kBAAkB;CAClB,OAAO;CACP,YAAY;CACZ,YAAY;CACZ,iBAAiB;CACjB,cAAc;AAClB;;;;AAKA,MAAa,eAA+D;CACxE,OAAO;EACH,OAAO;EACP,OAAO;EACP,YAAY;EACZ,OAAO;EACP,QAAQ;EACR,QAAQ;CACZ;CACA,OAAO;EACH,OAAO;EACP,OAAO;EACP,YAAY;EACZ,OAAO;EACP,QAAQ;EACR,QAAQ;CACZ;CACA,MAAM;EACF,OAAO;EACP,OAAO;EACP,YAAY;EACZ,OAAO;EACP,QAAQ;EACR,QAAQ;CACZ;CACA,MAAM;EACF,OAAO;EACP,OAAO;EACP,YAAY;EACZ,OAAO;EACP,QAAQ;EACR,QAAQ;CACZ;CACA,OAAO;EACH,OAAO;EACP,OAAO;EACP,YAAY;EACZ,OAAO;EACP,QAAQ;EACR,QAAQ;CACZ;CACA,UAAU;EACN,OAAO;EACP,OAAO;EACP,YAAY;EACZ,OAAO;EACP,QAAQ;EACR,QAAQ;CACZ;CACA,SAAS;EACL,OAAO;EACP,OAAO;EACP,YAAY;EACZ,OAAO;EACP,QAAQ;EACR,QAAQ;CACZ;AACJ;;;;AA2BA,MAAa,kBAAkB;CAC3B,WAAW;EACP,OAAO;EACP,MAAM;CACV;CACA,aAAa;EACT,OAAO;EACP,MAAM;CACV;CACA,QAAQ;EACJ,OAAO;EACP,MAAM;CACV;CACA,kBAAkB;EACd,OAAO;EACP,MAAM;CACV;CACA,UAAU;EACN,OAAO;EACP,MAAM;CACV;AACJ;;;;AAKA,MAAa,gBAAwF;CACjG,QAAS;EAAE,WAAW;EAAW,gBAAgB;CAAM;CACvD,OAAS;EAAE,WAAW;EAAW,gBAAgB;CAAM;CACvD,QAAS;EAAE,WAAW;EAAW,gBAAgB;CAAM;CACvD,SAAS;EAAE,WAAW;EAAW,gBAAgB;CAAM;CACvD,OAAS;EAAE,WAAW;EAAW,gBAAgB;CAAM;AAC3D;;;;;;ACnIA,MAAa,aAAa;CAEtB,OAAO;CACP,KAAK;CACL,OAAO;CACP,QAAQ;CACR,MAAM;CACN,SAAS;CACT,MAAM;CACN,OAAO;CAGP,aAAa;CACb,WAAW;CACX,aAAa;CACb,cAAc;CACd,YAAY;CACZ,eAAe;CACf,YAAY;CACZ,aAAa;CAGb,SAAS;CACT,OAAO;CACP,SAAS;CACT,UAAU;CACV,QAAQ;CACR,WAAW;CACX,QAAQ;CACR,SAAS;CAGT,eAAe;CACf,aAAa;CACb,eAAe;CACf,gBAAgB;CAChB,cAAc;CACd,iBAAiB;CACjB,cAAc;CACd,eAAe;CAGf,OAAO;CACP,MAAM;CACN,KAAK;CACL,QAAQ;CACR,WAAW;CACX,OAAO;CACP,SAAS;CACT,QAAQ;CACR,eAAe;CAGf,WAAW;CACX,UAAU;CACV,aAAa;CACb,gBAAgB;CAChB,YAAY;CACZ,cAAc;CACd,aAAa;CACb,oBAAoB;AACxB;;;;AAKA,MAAa,oBAKR;CACD,OAAO;EACH,OAAO,WAAW;EAClB,QAAQ,CAAC,WAAW,GAAG;EACvB,OAAO;CACX;CACA,OAAO;EACH,OAAO,WAAW;EAClB,QAAQ,CAAC,WAAW,GAAG;EACvB,OAAO;CACX;CACA,MAAM;EACF,OAAO,WAAW;EAClB,QAAQ,CAAC,WAAW,IAAI;EACxB,OAAO;CACX;CACA,MAAM;EACF,OAAO,WAAW;EAClB,YAAY,WAAW;EACvB,QAAQ,CAAC,WAAW,MAAM,WAAW,KAAK;EAC1C,OAAO;CACX;CACA,OAAO;EACH,OAAO,WAAW;EAClB,YAAY,WAAW;EACvB,QAAQ,CAAC,WAAW,IAAI;EACxB,OAAO;CACX;CACA,UAAU;EACN,OAAO,WAAW;EAClB,YAAY,WAAW;EACvB,QAAQ,CAAC,WAAW,MAAM,WAAW,KAAK;EAC1C,OAAO;CACX;CACA,SAAS;EACL,OAAO,WAAW;EAClB,YAAY,WAAW;EACvB,QAAQ,CAAC,WAAW,IAAI;EACxB,OAAO;CACX;AACJ;;;;AAKA,SAAS,KAAK,MAAiC;CAE3C,OAAO,SADO,MAAM,QAAQ,IAAI,IAAI,OAAO,CAAC,IAAI,EAAA,CAC3B,KAAK,GAAG,EAAE;AACnC;;;;AAKA,SAAgB,UAAU,MAAc,OAAyB;CAC7D,IAAI,CAACA,6BAAAA,aAAa,GAAG,OAAO;CAC5B,OAAO,GAAG,KAAK,KAAK,IAAI,OAAO,KAAK,WAAW,KAAK;AACxD;;;;AAKA,SAAgB,UAAU,MAAc,OAAuB;CAC3D,OAAO,UAAU,MAAM,CAAC,KAAK,CAAC;AAClC;;;;AAKA,SAAgB,eAAe,MAAc,IAAY,OAAwB;CAC7E,IAAI,OACA,OAAO,UAAU,MAAM,CAAC,OAAO,EAAE,CAAC;CAEtC,OAAO,UAAU,MAAM,CAAC,EAAE,CAAC;AAC/B;;;;AAKA,SAAgB,SAAS,MAAsB;CAC3C,OAAO,UAAU,MAAM,CAAC,WAAW,IAAI,CAAC;AAC5C;;;;AAKA,SAAgB,QAAQ,MAAsB;CAC1C,OAAO,UAAU,MAAM,CAAC,WAAW,GAAG,CAAC;AAC3C;;;;AAKA,SAAgB,cAAc,MAAsB;CAChD,OAAO,UAAU,MAAM,CAAC,WAAW,SAAS,CAAC;AACjD;;;;;;;AASA,SAAgB,oBAAoB,WAA2B;CAC3D,OAAO,UAAU,WAAW,WAAW,WAAW;AACtD;;;;AAKA,SAAgB,mBAAmB,OAAiB,YAAqB,MAAc;CACnF,MAAM,QAAQ,kBAAkB;CAChC,MAAM,QAAQ,YAAY,MAAM,QAAQ;CACxC,MAAM,QAAQ,MAAM,YAAY,CAAC,CAAC,OAAO,CAAC;CAE1C,IAAI,CAACA,6BAAAA,aAAa,GACd,OAAO,GAAG,MAAM,GAAG;CAGvB,IAAI,QAAQ,CAAC,MAAM,OAAO,GAAG,MAAM,MAAM;CACzC,IAAI,MAAM,YACN,MAAM,KAAK,MAAM,UAAU;CAG/B,OAAO,UAAU,GAAG,MAAM,GAAG,SAAS,KAAK;AAC/C;;;;AAKA,SAAgB,kBAAkB,SAAiB,YAAqB,MAAc;CAClF,MAAM,QAAQ,kBAAkB;CAChC,MAAM,QAAQ,YAAY,MAAM,QAAQ;CAExC,IAAI,CAACA,6BAAAA,aAAa,GACd,OAAO,GAAG,MAAM,YAAY;CAIhC,OAAO,GADQ,UAAU,GAAG,MAAM,YAAY,CAAC,MAAM,OAAO,GAAG,MAAM,MAAM,CAC5D,EAAE,GAAG;AACxB;;;;AAKA,SAAgB,iBAAiB,QAAwB;CACrD,IAAI,CAACA,6BAAAA,aAAa,GACd,OAAO,IAAI,OAAO;CAGtB,OAAO,UAAU,IAAI,OAAO,IAAI,CAAC,WAAW,MAAM,WAAW,IAAI,CAAC;AACtE;;;;AAKA,SAAgB,mBAAmB,UAA0B;CACzD,IAAI,CAACA,6BAAAA,aAAa,GACd,OAAO,IAAI,SAAS;CAGxB,OAAO,UAAU,IAAI,SAAS,IAAI,WAAW,WAAW;AAC5D;;;;;;ACxNA,SAAgB,sBAAqC;CACjD,IAAI;EACA,IAAI,OAAO,WAAW,eAAe,CAAC,OAAO,YACzC,OAAO;EAIX,OADmB,OAAO,WAAW,8BACrB,CAAC,CAAC,UAAU,SAAS;CACzC,SAAS,OAAO;EACZ,QAAQ,KAAK,oCAAoC,KAAK;EACtD,OAAO;CACX;AACJ;;;;AAKA,SAAgB,iBAAiB,QAAwB,OAA+B;CAEpF,OAAO,OADc,SAAS,oBAAoB;AAEtD;;;;AAKA,SAAgB,yBAAyB,UAA+D;CACpG,IAAI;EACA,IAAI,OAAO,WAAW,eAAe,CAAC,OAAO,YACzC,OAAO;EAGX,MAAM,aAAa,OAAO,WAAW,8BAA8B;EACnE,MAAM,WAAW,MAA2B;GACxC,SAAS,EAAE,UAAU,SAAS,OAAO;EACzC;EAGA,IAAI,WAAW,kBAAkB;GAC7B,WAAW,iBAAiB,UAAU,OAAO;GAC7C,aAAa,WAAW,oBAAoB,UAAU,OAAO;EACjE,OAAO,IAAI,WAAW,aAAa;GAC/B,WAAW,YAAY,OAAO;GAC9B,aAAa,WAAW,iBAAiB,OAAO;EACpD;EAEA,OAAO;CACX,SAAS,OAAO;EACZ,QAAQ,KAAK,2CAA2C,KAAK;EAC7D,OAAO;CACX;AACJ;;;;;AAOA,SAAgB,mBACZ,OACA,aACA,QACA,SACA,WACA,kBAA2B,MAC3B,cACA,YACqB;CACrB,MAAM,cAAc,YAAY;CAChC,MAAM,YAAY,gBAAgB;CAIlC,IAHoBC,6BAAAA,eAGN,MAAM,aAAaC,6BAAAA,aAAa,GAC1C,OAAO,qBAAqB,OAAO,SAAS,WAAW,QAAQ,SAAS;CAI5E,MAAM,eAAe,kBAAkB,oBAAoB,IAAI;CAG/D,MAAM,iBAAiB,IAAIC,gBAAAA,aAAa,CAAC,CACpC,MAAM,iBAAiB,gBAAgB,WAAW,YAAY,CAAC,CAAC,CAChE,KAAK,MAAM,CAAC,CACZ,KAAK,6BAA6B,CAAC,CACnC,MAAM;CAEX,MAAM,aAAa,IAAIA,gBAAAA,aAAa,CAAC,CAChC,GAAG,YAAY,UAAU,CAAC,CAC1B,MAAM,YAAY,KAAK,CAAC,CACxB,OAAO,YAAY,MAAM,CAAC,CAC1B,OAAO,YAAY,MAAM,CAAC,CAC1B,QAAQ,SAAS,CAAC,CAClB,QAAQ,KAAK,CAAC,CACd,KAAK,CAAC,CACN,KAAK,6BAA6B,CAAC,CACnC,KAAK,MAAM,CAAC,CACZ,MAAM;CAEX,MAAM,cAAc,IAAIA,gBAAAA,aAAa,CAAC,CACjC,GAAG,iBAAiB,gBAAgB,kBAAkB,YAAY,CAAC,CAAC,CACpE,MAAM,iBAAiB,gBAAgB,QAAQ,YAAY,CAAC,CAAC,CAC7D,QAAQ,SAAS,CAAC,CAClB,QAAQ,KAAK,CAAC,CACd,KAAK,CAAC,CACN,KAAK,6BAA6B,CAAC,CACnC,KAAK,MAAM,CAAC,CACZ,MAAM;CAEX,MAAM,eAAe,IAAIA,gBAAAA,aAAa,CAAC,CAClC,MAAM,iBAAiB,gBAAgB,aAAa,YAAY,CAAC,CAAC,CAClE,KAAK,sCAAsC,CAAC,CAC5C,KAAK,MAAM,CAAC,CACZ,MAAM;CAEX,MAAM,gBAAgB,IAAIA,gBAAAA,aAAa,CAAC,CACnC,MAAM,iBAAiB,gBAAgB,UAAU,YAAY,CAAC,CAAC,CAC/D,KAAK,MAAM,CAAC,CACZ,KAAK,6BAA6B,CAAC,CACnC,MAAM;CAGX,IAAI,SAAS,KAAK,UAAU,MAAM,IAAI,EAAE,EAAE,KAAK,YAAY,MAAM,GAAG,YAAY;CAChF,MAAM,SAAS,CAAC,gBAAgB,UAAU;CAE1C,IAAI,QAAQ;EACR,UAAU,MAAM;EAChB,OAAO,KAAK,WAAW;CAC3B;CAEA,UAAU,MAAM;CAChB,OAAO,KAAK,YAAY;CAExB,IAAI,WAAW;EACX,UAAU,OAAO,UAAU,KAAK,GAAG,UAAU,KAAK,GAAG,UAAU,OAAO;EACtE,OAAO,KAAK,aAAa;CAC7B;CAEA,OAAO,CAAC,QAAQ,GAAG,MAAM;AAC7B;;;;;;;AAQA,SAAgB,qBACZ,OACA,SACA,WACA,QACA,WACqB;CACrB,MAAM,KAAK,WAAW,MAAM,IAAI,EAAE,KAAK;CACvC,MAAM,WAAW,YAAY,GAAG,UAAU,KAAK,GAAG,UAAU,KAAK,GAAG,UAAU,WAAW,KAAA;CAEzF,MAAM,QAAkB,CAAC;CACzB,MAAM,KAAK,oBAAoB,IAAI,GAAG,EAAE,CAAC;CACzC,MAAM,KAAK,mBAAmB,KAAK,CAAC;CACpC,IAAI,QAAQ,MAAM,KAAK,iBAAiB,MAAM,CAAC;CAC/C,MAAM,KAAK,OAAO;CAClB,IAAI,UAAU,MAAM,KAAK,mBAAmB,IAAI,SAAS,EAAE,CAAC;CAE5D,OAAO,CAAC,MAAM,KAAK,GAAG,IAAI,IAAI;AAClC;;;;;;;ACjLA,SAAgB,kBACZ,OACA,SACA,QACA,WACM;CAIN,IAAI,SAAS,IAHK,gBACM,CAAC,CAAC,MAAM,IAAI,EAEb,EAAE,KAAK,MAAM,YAAY,EAAE;CAElD,IAAI,QACA,UAAU,KAAK,OAAO;CAG1B,UAAU,IAAI;CAEd,IAAI,WACA,UAAU,KAAK,UAAU,KAAK,GAAG,UAAU,KAAK,GAAG,UAAU,OAAO;CAGxE,OAAO;AACX;;;;;AAMA,SAAgB,iBAAiB,OAAoD;CACjF,QAAQ,OAAR;EACI,KAAK,SACD,OAAO;EACX,KAAK,QACD,OAAO;EACX,KAAK,QACD,OAAO;EACX,KAAK;EACL,KAAK,YACD,OAAO;EACX,SACI,OAAO;CACf;AACJ;;;;AAKA,SAAgB,eACZ,OACA,SACA,MACA,QACA,WACF;CACE,OAAO;EACH,WAAW,gBAAgB;EAC3B,OAAO,MAAM,YAAY;EACzB;EACA;EACA,MAAM,KAAK,MAAM,CAAC;EAClB,UAAU,YAAY;GAClB,MAAM,UAAU;GAChB,MAAM,UAAU;GAChB,QAAQ,UAAU;GAClB,UAAU,UAAU;EACxB,IAAI,KAAA;EACJ,KAAK;CACT;AACJ;;;;AAKA,SAAgB,iBAAiB,MAAW,SAA4B;CACpE,IAAI;EACA,IAAI,MAAM,QAAQ,IAAI,GAAG;GACrB,IAAI,KAAK,WAAW,GAAG,OAAO;GAG9B,IAAI,OAAO,KAAK,OAAO,UACnB,OAAO,KAAK,KAAK,MAAM,MAAM,GAAG,EAAE,IAAI,MAAM,CAAC,CAAC,KAAK,IAAI;GAI3D,MAAM,OAAO,WAAW,OAAO,KAAK,KAAK,MAAM,CAAC,CAAC;GAMjD,OAAO,CALQ,KAAK,KAAK,GAKZ,GAAG,GAJH,KAAK,KAAI,SAClB,KAAK,KAAI,QAAO,OAAO,KAAK,QAAQ,EAAE,CAAC,CAAC,CAAC,KAAK,GAAI,CAGhC,CAAC,CAAC,CAAC,KAAK,IAAI;EACtC;EAEA,IAAI,OAAO,SAAS,YAAY,SAAS,MAErC,OAAO,OAAO,QAAQ,IAAI,CAAC,CACtB,KAAK,CAAC,KAAK,WAAW,GAAG,IAAI,IAAI,OAAO,CAAC,CACzC,KAAK,IAAI;EAGlB,OAAO,OAAO,IAAI;CACtB,SAAS,OAAO;EACZ,OAAO,4BAA4B,MAAM;CAC7C;AACJ;;;;AAKA,SAAgB,cAAc,KAAU,WAAmB,GAAG,eAAuB,GAAQ;CACzF,IAAI,gBAAgB,UAChB,OAAO;CAGX,IAAI,QAAQ,MAAM,OAAO;CACzB,IAAI,QAAQ,KAAA,GAAW,OAAO;CAC9B,IAAI,OAAO,QAAQ,YAAY,OAAO;CACtC,IAAI,eAAe,OAAO,OAAO,WAAW,IAAI,QAAQ;CACxD,IAAI,eAAe,MAAM,OAAO,IAAI,YAAY;CAChD,IAAI,OAAO,QAAQ,UAAU,OAAO;CAEpC,IAAI,MAAM,QAAQ,GAAG,GACjB,OAAO,IAAI,KAAI,SAAQ,cAAc,MAAM,UAAU,eAAe,CAAC,CAAC;CAG1E,MAAM,SAAc,CAAC;CACrB,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,GAAG,GACzC,OAAO,OAAO,cAAc,OAAO,UAAU,eAAe,CAAC;CAEjE,OAAO;AACX"}