about-system 0.0.39 → 0.0.41
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/about-system-cli.js +108 -96
- package/dist/about-system-cli.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/system-info-api-DCP1ZJVR.js +2237 -0
- package/dist/{system-info-api-J8OqC6YU.js.map → system-info-api-DCP1ZJVR.js.map} +1 -1
- package/dist/system-info-api.d.ts +20 -0
- package/dist/system-info-api.js +1 -1
- package/package.json +1 -1
- package/src/about-system-cli.ts +70 -20
- package/src/info/hardware.ts +219 -31
- package/src/system-info-api.ts +5 -1
- package/src/systeminfo-types.d.ts +33 -6
- package/dist/cpu-geekbench-1k.json +0 -1
- package/dist/system-info-api-J8OqC6YU.js +0 -2148
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system-info-api-J8OqC6YU.js","sources":["../__vite-browser-external","../src/info/settings.ts","../src/utils/platform.ts","../src/utils/command.ts","../src/cache/cache-config.ts","../src/cache/cache.ts","../src/info/platform.ts","../src/info/memory.ts?url","../src/info/network.ts?url","../src/info/platform.ts?url","../src/info/process.ts?url","../src/info/settings.ts?url","../src/info/software.ts?url","../src/info/system-status.ts?url","../node_modules/fuse.js/dist/fuse.mjs","../src/info/hardware.ts","../src/info/memory.ts","../src/info/process.ts","../src/info/network.ts","../src/info/system-status.ts","../src/info/software.ts","../src/system-info-api.ts"],"sourcesContent":["export default {}","/**\n * Settings configuration and management\n * @module info/settings\n */\n\nimport path from \"path\";\nimport os from \"os\";\nimport fs from \"fs\";\nimport process from \"process\";\n\n// Settings file paths\nexport const SETTINGS_FILE = path.join(\n os.homedir(),\n \".config\",\n \"systeminfo-settings.json\",\n);\nexport const CACHE_FILE = path.join(os.tmpdir(), \"systeminfo-cache.json\");\n\n// Color codes\nexport const colors = {\n reset: \"\\x1b[0m\",\n red: \"\\x1b[38;5;196m\",\n orange: \"\\x1b[38;5;208m\",\n yellow: \"\\x1b[38;5;226m\",\n green: \"\\x1b[38;5;46m\",\n blue: \"\\x1b[38;5;39m\",\n cyan: \"\\x1b[38;5;51m\",\n purple: \"\\x1b[38;5;171m\",\n magenta: \"\\x1b[38;5;213m\",\n gray: \"\\x1b[38;5;250m\",\n lightblue: \"\\x1b[38;5;220m\",\n};\n\n// Default settings\nexport const DEFAULT_SETTINGS = {\n display_order: [\n [\"user\", \"hostname\", \"os\", \"device\", \"kernel\", \"cpu\", \"gpu\", \"bench\"],\n [\n \"disk_used\",\n \"ram_used\",\n \"top_process\",\n \"uptime\",\n \"temperature\",\n \"battery\",\n \"load_average\",\n ],\n [\"ip\", \"iplocal\", \"city\", \"domain\", \"isp\"],\n [\"shell\", \"services_running\", \"pacman\", \"containers\"],\n ],\n colors: {\n user: \"red\",\n hostname: \"orange\",\n disk_used: \"purple\",\n ram_used: \"yellow\",\n top_process: \"magenta\",\n uptime: \"cyan\",\n ip: \"green\",\n iplocal: \"yellow\",\n city: \"green\",\n domain: \"gray\",\n isp: \"lightblue\",\n os: \"gray\",\n cpu: \"orange\",\n gpu: \"yellow\",\n bench: \"red\",\n device: \"yellow\",\n kernel: \"green\",\n shell: \"orange\",\n pacman: \"multicolor\",\n ports: \"multicolor\",\n containers: \"green\",\n memory_available: \"blue\",\n swap_used: \"purple\",\n load_average: \"red\",\n users_logged_in: \"cyan\",\n network_interfaces: \"yellow\",\n mount_points: \"gray\",\n services_running: \"green\",\n temperature: \"red\",\n battery: \"green\",\n screen_resolution: \"blue\",\n },\n emojis: {\n user: \"👤 \",\n hostname: \"🏠 \",\n ip: \"🌎 \",\n iplocal: \"🌐 \",\n city: \"📍 \",\n domain: \"🔗 \",\n isp: \"👮 \",\n os: \"⚡ \",\n cpu: \"📈 \",\n gpu: \"🎮 \",\n bench: \"💪 \",\n device: \"💻 \",\n kernel: \"🔧 \",\n shell: \"🐚 \",\n pacman: \"🚀 \",\n disk_used: \"📁 \",\n ram_used: \"💾 \",\n top_process: \"🔝 \",\n uptime: \"⏱️ \",\n ports: \"🔌 \",\n containers: \"📦 \",\n memory_available: \"🧠 \",\n swap_used: \"🔄 \",\n load_average: \"⚖️ \",\n users_logged_in: \"👥 \",\n network_interfaces: \"🌐 \",\n mount_points: \"📂 \",\n services_running: \"⚙️ \",\n temperature: \"🌡️ \",\n battery_charging: \"🔌 \",\n battery: \"🔋 \",\n screen_resolution: \"🖥️ \",\n },\n labels: {\n user: \"User\",\n hostname: \"Host\",\n ip: \"IP\",\n iplocal: \"Local IP\",\n city: \"City\",\n domain: \"Domain\",\n isp: \"ISP\",\n os: \"OS\",\n cpu: \"CPU\",\n gpu: \"GPU\",\n bench: \"Bench\",\n device: \"Device\",\n kernel: \"Kernel\",\n shell: \"Shell\",\n pacman: \"Packages\",\n disk_used: \"Disk\",\n ram_used: \"RAM\",\n top_process: \"Top\",\n uptime: \"Uptime\",\n ports: \"Ports\",\n containers: \"Containers\",\n memory_available: \"Memory\",\n swap_used: \"Swap\",\n load_average: \"Load\",\n users_logged_in: \"Users\",\n network_interfaces: \"Network\",\n mount_points: \"Mounts\",\n services_running: \"Services\",\n temperature: \"Temp\",\n battery_charging: \"Battery\",\n battery: \"Battery\",\n screen_resolution: \"Resolution\",\n },\n display: {\n show_emojis: true,\n single_line: false,\n line_wrap_length: process?.stdout?.columns || 100,\n },\n network: {\n show_offline_message: true,\n },\n advanced: {\n debug: false,\n },\n};\n\nexport interface Settings {\n display_order: string[][];\n colors: Record<string, string>;\n emojis: Record<string, string>;\n labels: Record<string, string>;\n display: {\n show_emojis: boolean;\n single_line: boolean;\n line_wrap_length: number;\n };\n network: {\n show_offline_message: boolean;\n };\n advanced: {\n debug: boolean;\n };\n}\n\n/**\n * Loads settings from the configuration file\n * @returns Settings object (defaults merged with user settings)\n */\nexport function loadSettings(): Settings {\n try {\n if (fs.existsSync(SETTINGS_FILE)) {\n const settings = JSON.parse(fs.readFileSync(SETTINGS_FILE, \"utf8\"));\n return { ...DEFAULT_SETTINGS, ...settings };\n }\n } catch {}\n return DEFAULT_SETTINGS;\n}\n\n/**\n * Saves settings to the configuration file\n * @param settings - The settings object to save\n * @returns True if successful, false otherwise\n */\nexport function saveSettings(settings: Settings): boolean {\n try {\n const configDir = path.dirname(SETTINGS_FILE);\n if (!fs.existsSync(configDir)) {\n fs.mkdirSync(configDir, { recursive: true });\n }\n fs.writeFileSync(SETTINGS_FILE, JSON.stringify(settings, null, 2));\n return true;\n } catch {\n return false;\n }\n}\n","/**\n * Platform detection utilities\n * @module platform\n */\n\nimport os from \"os\";\n\n/**\n * Platform detection constants\n */\nexport const IS_WINDOWS = os.platform() === \"win32\";\nexport const IS_MAC = os.platform() === \"darwin\";\nexport const IS_LINUX = os.platform() === \"linux\";\n","/**\n * Command execution utilities\n * @module command\n */\n\nimport { execSync } from \"child_process\";\nimport { IS_WINDOWS } from \"./platform\";\n\n/**\n * Executes a shell command safely with timeout\n * @param {string} command - Command to execute\n * @param {object} options - Additional options for execSync\n * @returns {string} Command output or empty string on error\n */\nexport function execCommand(command: string, options = {}): string {\n try {\n const cmd = IS_WINDOWS ? `cmd /c ${command}` : command;\n return execSync(cmd, {\n encoding: \"utf8\",\n timeout: 10000,\n stdio: [\"pipe\", \"pipe\", \"ignore\"],\n ...options,\n })\n .toString()\n .trim();\n } catch (error) {\n return \"\";\n }\n}\n\n/**\n * Checks if a command exists in the system PATH\n * @param {string} command - Command name to check\n * @returns {boolean} True if command exists\n */\nexport function commandExists(command: string): boolean {\n try {\n if (IS_WINDOWS) {\n execSync(`where ${command}`, { stdio: \"ignore\" });\n } else {\n execSync(`which ${command}`, { stdio: \"ignore\" });\n }\n return true;\n } catch {\n return false;\n }\n}\n","/**\n * Cache configuration and constants\n * @module cache-config\n */\n\nimport os from \"os\";\nimport path from \"path\";\n\n/**\n * Cache file location in system's temporary directory\n * @constant\n */\nexport const CACHE_FILE = path.join(os.tmpdir(), \"systeminfo-cache.json\");\n\n/**\n * Cache duration configuration for different system information types\n * Values are in milliseconds\n *\n * @constant\n * @property {number} ip - IP information cache (5 minutes)\n * @property {number} cpu - CPU information cache (24 hours)\n * @property {number} gpu - GPU information cache (24 hours)\n * @property {number} os - OS information cache (24 hours)\n * @property {number} device - Device information cache (24 hours)\n * @property {number} kernel - Kernel information cache (1 hour)\n * @property {number} pacman - Package managers cache (10 minutes)\n * @property {number} ports - Open ports cache (5 minutes)\n * @property {number} containers - Docker containers cache (5 minutes)\n * @property {number} top_process - Top process cache (5 seconds)\n * @property {number} disk_used - Disk usage cache (1 minute)\n * @property {number} ram_used - RAM usage cache (10 seconds)\n * @property {number} services_running - Services cache (5 minutes)\n * @property {number} temperature - Temperature cache (30 seconds)\n * @property {number} battery - Battery status cache (1 minute)\n * @property {number} network_interfaces - Network interfaces cache (5 minutes)\n * @property {number} mount_points - Mount points cache (10 minutes)\n */\nexport const CACHE_DURATION = {\n ip: 5 * 60 * 1000,\n cpu: 24 * 60 * 60 * 1000,\n gpu: 24 * 60 * 60 * 1000,\n os: 24 * 60 * 60 * 1000,\n device: 24 * 60 * 60 * 1000,\n kernel: 60 * 60 * 1000,\n pacman: 10 * 60 * 1000,\n ports: 5 * 60 * 1000,\n containers: 5 * 60 * 1000,\n top_process: 5 * 1000,\n disk_used: 60 * 1000,\n ram_used: 10 * 1000,\n services_running: 5 * 60 * 1000,\n temperature: 30 * 1000,\n battery: 60 * 1000,\n network_interfaces: 5 * 60 * 1000,\n mount_points: 10 * 60 * 1000,\n};\n\n/**\n * Default IPInfo.io API token for geolocation\n * @constant\n */\nexport const DEFAULT_IPINFO_TOKEN = \"da2d6cc4baa5d1\";\n\n/**\n * Default network request timeout in milliseconds\n * @constant\n */\nexport const DEFAULT_NETWORK_TIMEOUT = 5000;\n","/**\n * Cache management utilities\n * @module cache\n */\n\nimport fs from \"fs\";\nimport { CACHE_FILE, CACHE_DURATION } from \"./cache-config\";\n\n/**\n * Represents a cached value with timestamp\n * @interface CacheEntry\n */\nexport interface CacheEntry {\n /** The cached value */\n value: any;\n /** Unix timestamp when the value was cached */\n timestamp: number;\n}\n\n/**\n * Cache storage structure\n * @interface Cache\n */\nexport interface Cache {\n [key: string]: CacheEntry;\n}\n\n/**\n * Loads cache from disk\n * @returns {Cache} Cached data or empty object if cache doesn't exist or is corrupted\n */\nexport function loadCache(): Cache {\n try {\n if (fs.existsSync(CACHE_FILE)) {\n return JSON.parse(fs.readFileSync(CACHE_FILE, \"utf8\"));\n }\n } catch (error) {\n // Corrupted cache - return empty object\n }\n return {};\n}\n\n/**\n * Saves cache to disk\n * @param {Cache} cache - Cache object to save\n */\nexport function saveCache(cache: Cache): void {\n try {\n fs.writeFileSync(CACHE_FILE, JSON.stringify(cache, null, 2));\n } catch (error) {\n // Silently fail if can't write cache\n }\n}\n\n/**\n * Checks if a cache entry is still valid based on configured duration\n * @param {CacheEntry} cacheEntry - The cache entry to validate\n * @param {string} key - The key name to determine cache duration\n * @returns {boolean} True if cache is still valid\n */\nexport function isCacheValid(cacheEntry: CacheEntry, key: string): boolean {\n if (!cacheEntry || !cacheEntry.timestamp) return false;\n const age = Date.now() - cacheEntry.timestamp;\n const maxAge = CACHE_DURATION[key as keyof typeof CACHE_DURATION] || 60000;\n return age < maxAge;\n}\n\n/**\n * Retrieves a value from cache if valid\n * @param {Cache} cache - Cache object\n * @param {string} key - Key to retrieve\n * @returns {any} Cached value or null if not found/expired\n */\nexport function getCachedValue(cache: Cache, key: string): any {\n if (!cache[key]) return null;\n const cacheEntry = cache[key];\n if (!isCacheValid(cacheEntry, key)) {\n delete cache[key];\n return null;\n }\n return cacheEntry.value;\n}\n\n/**\n * Stores a value in cache with current timestamp\n * @param {Cache} cache - Cache object\n * @param {string} key - Key to store under\n * @param {any} value - Value to cache\n */\nexport function setCachedValue(cache: Cache, key: string, value: any): void {\n cache[key] = {\n value,\n timestamp: Date.now(),\n };\n}\n","/**\n * Platform-related system information functions\n * @module info/platform\n */\n\nimport os from \"os\";\nimport fs from \"fs\";\nimport type { InfoContext } from \"../types/internal-types\";\nimport { IS_WINDOWS, IS_MAC, IS_LINUX } from \"../utils/platform\";\nimport { execCommand, commandExists } from \"../utils/command\";\nimport { getCachedValue, setCachedValue } from \"../cache/cache\";\n\n/**\n * Gets the current username\n * @returns Current system username\n */\nexport function user(): string {\n return os.userInfo().username;\n}\n\n/**\n * Gets the system hostname\n * @returns Computer hostname/network name\n */\nexport function hostname(): string {\n return os.hostname();\n}\n\n/**\n * Gets operating system name and version\n * Platform-specific detection for Windows, macOS, and Linux\n * @param context - Info context with cache\n * @returns OS name and version string\n * @example \"Windows 11 Pro\", \"macOS Ventura 13.2.1\", \"Ubuntu 22.04.3 LTS\"\n */\nexport function os_info(context: InfoContext): string {\n const cached = getCachedValue(context.cache, \"os\");\n if (cached) return cached;\n\n const platform = os.platform();\n const release = os.release();\n let osName = \"\";\n\n if (IS_WINDOWS) {\n try {\n const version = execCommand(\"ver\");\n const match = version.match(/Microsoft Windows \\[Version ([^\\]]+)\\]/);\n osName = match ? `Windows ${match[1]}` : `Windows ${release}`;\n } catch {\n osName = `Windows ${release}`;\n }\n } else if (IS_MAC) {\n osName = `macOS ${release}`;\n } else if (IS_LINUX) {\n try {\n const osRelease = fs.readFileSync(\"/etc/os-release\", \"utf8\");\n const nameMatch = osRelease.match(/^NAME=\"([^\"]+)\"/m);\n const versionMatch = osRelease.match(/^VERSION_ID=\"([^\"]+)\"/m);\n osName = nameMatch ? nameMatch[1] : \"Linux\";\n if (versionMatch) osName += ` ${versionMatch[1]}`;\n } catch {\n osName = `Linux ${release}`;\n }\n } else {\n osName = `${platform} ${release}`;\n }\n\n setCachedValue(context.cache, \"os\", osName);\n return osName;\n}\n\n/**\n * Gets kernel version string\n * Returns the operating system kernel version from os.release()\n * @param context - Info context with cache\n * @returns Kernel version string\n * @example \"5.15.0-56-generic\", \"6.11.11-valve12-1-neptune\"\n */\nexport function kernel(context: InfoContext): string {\n const cached = getCachedValue(context.cache, \"kernel\");\n if (cached) return cached;\n\n const kernel = os.release();\n setCachedValue(context.cache, \"kernel\", kernel);\n return kernel;\n}\n\n/**\n * Gets device or computer model name\n * Uses WMI on Windows, DMI on Linux, getprop on Android\n * @param context - Info context with cache\n * @returns Device model name or empty string\n * @example \"Dell OptiPlex 7090\", \"MacBook Pro 16-inch\", \"Valve Steam Deck\"\n */\nexport function device(context: InfoContext): string {\n const cached = getCachedValue(context.cache, \"device\");\n if (cached !== null) return cached;\n\n if (IS_WINDOWS) {\n try {\n const wmic = execCommand(\"wmic csproduct get name /format:list\");\n const nameMatch = wmic.match(/Name=(.+)/);\n if (nameMatch) {\n const device = nameMatch[1].trim();\n if (device && device !== \"\") {\n setCachedValue(context.cache, \"device\", device);\n return device;\n }\n }\n } catch {}\n\n try {\n const ps = execCommand(\n 'powershell.exe -Command \"Get-WmiObject -Class Win32_ComputerSystem | Select-Object -ExpandProperty Model\"'\n );\n if (ps.trim()) {\n const device = ps.trim();\n setCachedValue(context.cache, \"device\", device);\n return device;\n }\n } catch {}\n } else if (IS_LINUX) {\n try {\n if (commandExists(\"getprop\")) {\n const device = execCommand(\"getprop ro.product.model\");\n if (device) {\n setCachedValue(context.cache, \"device\", device);\n return device;\n }\n }\n\n const dmiPath = \"/sys/devices/virtual/dmi/id/product_name\";\n if (fs.existsSync(dmiPath)) {\n const device = fs.readFileSync(dmiPath, \"utf8\").trim();\n if (device) {\n setCachedValue(context.cache, \"device\", device);\n return device;\n }\n }\n } catch {}\n }\n\n setCachedValue(context.cache, \"device\", \"\");\n return \"\";\n}\n","export default \"data:video/mp2t;base64,LyoqCiAqIE1lbW9yeSBhbmQgZGlzay1yZWxhdGVkIHN5c3RlbSBpbmZvcm1hdGlvbiBmdW5jdGlvbnMKICogQG1vZHVsZSBpbmZvL21lbW9yeQogKi8KCmltcG9ydCBvcyBmcm9tICJvcyI7CmltcG9ydCBmcyBmcm9tICJmcyI7CmltcG9ydCB0eXBlIHsgSW5mb0NvbnRleHQgfSBmcm9tICIuLi90eXBlcy9pbnRlcm5hbC10eXBlcyI7CmltcG9ydCB7IElTX0xJTlVYIH0gZnJvbSAiLi4vdXRpbHMvcGxhdGZvcm0iOwppbXBvcnQgeyBleGVjQ29tbWFuZCB9IGZyb20gIi4uL3V0aWxzL2NvbW1hbmQiOwppbXBvcnQgeyBnZXRDYWNoZWRWYWx1ZSwgc2V0Q2FjaGVkVmFsdWUgfSBmcm9tICIuLi9jYWNoZS9jYWNoZSI7CgovKioKICogR2V0cyBtZW1vcnkgdXNhZ2UgaW4gZ2lnYWJ5dGVzCiAqIFJlYWRzIGZyb20gL3Byb2MvbWVtaW5mbyBvbiBMaW51eCwgZmFsbHMgYmFjayB0byBvcy50b3RhbG1lbSgpCiAqIEBwYXJhbSBjb250ZXh0IC0gSW5mbyBjb250ZXh0IHdpdGggY2FjaGUKICogQHJldHVybnMgTWVtb3J5IHVzYWdlIGFzICJ1c2VkL3RvdGFsIEdCIgogKiBAZXhhbXBsZSAiMTIvMzJHQiIsICI2LzE2R0IiCiAqLwpleHBvcnQgZnVuY3Rpb24gcmFtX3VzZWQoY29udGV4dDogSW5mb0NvbnRleHQpOiBzdHJpbmcgewogIGNvbnN0IGNhY2hlZCA9IGdldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJyYW1fdXNlZCIpOwogIGlmIChjYWNoZWQpIHJldHVybiBjYWNoZWQ7CgogIGlmIChJU19MSU5VWCkgewogICAgdHJ5IHsKICAgICAgY29uc3QgbWVtaW5mbyA9IGZzLnJlYWRGaWxlU3luYygiL3Byb2MvbWVtaW5mbyIsICJ1dGY4Iik7CiAgICAgIGNvbnN0IHRvdGFsTWF0Y2ggPSBtZW1pbmZvLm1hdGNoKC9NZW1Ub3RhbDpccysoXGQrKSBrQi8pOwogICAgICBjb25zdCBmcmVlTWF0Y2ggPSBtZW1pbmZvLm1hdGNoKC9NZW1GcmVlOlxzKyhcZCspIGtCLyk7CgogICAgICBpZiAodG90YWxNYXRjaCAmJiBmcmVlTWF0Y2gpIHsKICAgICAgICBjb25zdCB0b3RhbE1CID0gTWF0aC5yb3VuZChwYXJzZUludCh0b3RhbE1hdGNoWzFdKSAvIDEwMjQpOwogICAgICAgIGNvbnN0IGZyZWVNQiA9IE1hdGgucm91bmQocGFyc2VJbnQoZnJlZU1hdGNoWzFdKSAvIDEwMjQpOwogICAgICAgIGNvbnN0IHVzZWRNQiA9IHRvdGFsTUIgLSBmcmVlTUI7CgogICAgICAgIGNvbnN0IHRvdGFsR0IgPSBNYXRoLnJvdW5kKHRvdGFsTUIgLyAxMDI0KTsKICAgICAgICBjb25zdCB1c2VkR0IgPSBNYXRoLnJvdW5kKHVzZWRNQiAvIDEwMjQpOwoKICAgICAgICBjb25zdCByZXN1bHQgPSBgJHt1c2VkR0J9LyR7dG90YWxHQn1HQmA7CiAgICAgICAgc2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgInJhbV91c2VkIiwgcmVzdWx0KTsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICB9CiAgICB9IGNhdGNoIHt9CiAgfQoKICBjb25zdCB0b3RhbE1lbSA9IG9zLnRvdGFsbWVtKCk7CiAgY29uc3QgZnJlZU1lbSA9IG9zLmZyZWVtZW0oKTsKICBjb25zdCB1c2VkTWVtID0gdG90YWxNZW0gLSBmcmVlTWVtOwoKICBjb25zdCB0b3RhbEdCID0gTWF0aC5yb3VuZCh0b3RhbE1lbSAvICgxMDI0ICogMTAyNCAqIDEwMjQpKTsKICBjb25zdCB1c2VkR0IgPSBNYXRoLnJvdW5kKHVzZWRNZW0gLyAoMTAyNCAqIDEwMjQgKiAxMDI0KSk7CgogIGNvbnN0IHJlc3VsdCA9IGAke3VzZWRHQn0vJHt0b3RhbEdCfUdCYDsKICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAicmFtX3VzZWQiLCByZXN1bHQpOwogIHJldHVybiByZXN1bHQ7Cn0KCi8qKgogKiBHZXRzIGF2YWlsYWJsZSBtZW1vcnkgaW4gZ2lnYWJ5dGVzCiAqIFJlYWRzIE1lbUF2YWlsYWJsZSBmcm9tIC9wcm9jL21lbWluZm8gKExpbnV4IG9ubHkpCiAqIEByZXR1cm5zIEF2YWlsYWJsZSBtZW1vcnkgd2l0aCAiR0IgYXZhaWxhYmxlIiBzdWZmaXggb3IgZW1wdHkgc3RyaW5nCiAqIEBleGFtcGxlICIxMkdCIGF2YWlsYWJsZSIsICI0R0IgYXZhaWxhYmxlIgogKi8KZXhwb3J0IGZ1bmN0aW9uIG1lbW9yeV9hdmFpbGFibGUoKTogc3RyaW5nIHsKICBpZiAoIUlTX0xJTlVYKSByZXR1cm4gIiI7CgogIHRyeSB7CiAgICBjb25zdCBtZW1pbmZvID0gZnMucmVhZEZpbGVTeW5jKCIvcHJvYy9tZW1pbmZvIiwgInV0ZjgiKTsKICAgIGNvbnN0IGF2YWlsYWJsZU1hdGNoID0gbWVtaW5mby5tYXRjaCgvTWVtQXZhaWxhYmxlOlxzKyhcZCspIGtCLyk7CiAgICBpZiAoYXZhaWxhYmxlTWF0Y2gpIHsKICAgICAgY29uc3QgYXZhaWxhYmxlR0IgPSBNYXRoLnJvdW5kKHBhcnNlSW50KGF2YWlsYWJsZU1hdGNoWzFdKSAvIDEwMjQgLyAxMDI0KTsKICAgICAgcmV0dXJuIGAke2F2YWlsYWJsZUdCfUdCIGF2YWlsYWJsZWA7CiAgICB9CiAgfSBjYXRjaCB7fQogIHJldHVybiAiIjsKfQoKLyoqCiAqIEdldHMgc3dhcCBtZW1vcnkgdXNhZ2UKICogQ2FsY3VsYXRlcyBzd2FwIHVzYWdlIGZyb20gL3Byb2MvbWVtaW5mbyAoTGludXggb25seSkKICogQHJldHVybnMgU3dhcCB1c2FnZSBhcyAicGVyY2VudGFnZSAoc2l6ZSBNQikgc3dhcCIgb3IgZW1wdHkgc3RyaW5nCiAqIEBleGFtcGxlICIxNSUgKDUxMk1CKSBzd2FwIiwgIjAlICgwTUIpIHN3YXAiCiAqLwpleHBvcnQgZnVuY3Rpb24gc3dhcF91c2VkKCk6IHN0cmluZyB7CiAgaWYgKCFJU19MSU5VWCkgcmV0dXJuICIiOwoKICB0cnkgewogICAgY29uc3QgbWVtaW5mbyA9IGZzLnJlYWRGaWxlU3luYygiL3Byb2MvbWVtaW5mbyIsICJ1dGY4Iik7CiAgICBjb25zdCBzd2FwVG90YWxNYXRjaCA9IG1lbWluZm8ubWF0Y2goL1N3YXBUb3RhbDpccysoXGQrKSBrQi8pOwogICAgY29uc3Qgc3dhcEZyZWVNYXRjaCA9IG1lbWluZm8ubWF0Y2goL1N3YXBGcmVlOlxzKyhcZCspIGtCLyk7CgogICAgaWYgKHN3YXBUb3RhbE1hdGNoICYmIHN3YXBGcmVlTWF0Y2gpIHsKICAgICAgY29uc3Qgc3dhcFRvdGFsID0gcGFyc2VJbnQoc3dhcFRvdGFsTWF0Y2hbMV0pOwogICAgICBjb25zdCBzd2FwRnJlZSA9IHBhcnNlSW50KHN3YXBGcmVlTWF0Y2hbMV0pOwogICAgICBjb25zdCBzd2FwVXNlZCA9IHN3YXBUb3RhbCAtIHN3YXBGcmVlOwoKICAgICAgaWYgKHN3YXBUb3RhbCA+IDApIHsKICAgICAgICBjb25zdCBzd2FwVXNlZFBlcmNlbnQgPSBNYXRoLnJvdW5kKChzd2FwVXNlZCAvIHN3YXBUb3RhbCkgKiAxMDApOwogICAgICAgIGNvbnN0IHN3YXBVc2VkTUIgPSBNYXRoLnJvdW5kKHN3YXBVc2VkIC8gMTAyNCk7CiAgICAgICAgcmV0dXJuIGAke3N3YXBVc2VkUGVyY2VudH0lICgke3N3YXBVc2VkTUJ9TUIpIHN3YXBgOwogICAgICB9CiAgICB9CiAgfSBjYXRjaCB7fQogIHJldHVybiAiIjsKfQoKLyoqCiAqIEdldHMgcm9vdCBmaWxlc3lzdGVtIGRpc2sgdXNhZ2UgcGVyY2VudGFnZQogKiBVc2VzIGRmIGNvbW1hbmQgb24gTGludXgvQW5kcm9pZAogKiBAcGFyYW0gY29udGV4dCAtIEluZm8gY29udGV4dCB3aXRoIGNhY2hlCiAqIEByZXR1cm5zIFBlcmNlbnRhZ2Ugc3RyaW5nIG9yIGVtcHR5IHN0cmluZwogKiBAZXhhbXBsZSAiNDUlIiwgIjc4JSIKICovCmV4cG9ydCBmdW5jdGlvbiBkaXNrX3VzZWQoY29udGV4dDogSW5mb0NvbnRleHQpOiBzdHJpbmcgewogIGNvbnN0IGNhY2hlZCA9IGdldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJkaXNrX3VzZWQiKTsKICBpZiAoY2FjaGVkICE9PSBudWxsKSByZXR1cm4gY2FjaGVkOwoKICBpZiAoSVNfTElOVVgpIHsKICAgIHRyeSB7CiAgICAgIGNvbnN0IGRmID0gZXhlY0NvbW1hbmQoImRmIC1oIik7CiAgICAgIGxldCBkaXNrVXNhZ2UgPSAiIjsKCiAgICAgIGlmIChkZi5pbmNsdWRlcygiL3N0b3JhZ2UvZW11bGF0ZWQiKSkgewogICAgICAgIGNvbnN0IG1hdGNoID0gZGYubWF0Y2goL1xzKyhcZCslKVxzK1wvc3RvcmFnZVwvZW11bGF0ZWQvKTsKICAgICAgICBkaXNrVXNhZ2UgPSBtYXRjaCA/IG1hdGNoWzFdIDogIiI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY29uc3QgbGluZXMgPSBkZi5zcGxpdCgiXG4iKTsKICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHsKICAgICAgICAgIGlmIChsaW5lLnRyaW0oKS5lbmRzV2l0aCgiIC8iKSkgewogICAgICAgICAgICBjb25zdCBwYXJ0cyA9IGxpbmUudHJpbSgpLnNwbGl0KC9ccysvKTsKICAgICAgICAgICAgY29uc3QgcGVyY2VudEluZGV4ID0gcGFydHMuZmluZEluZGV4KChwYXJ0KSA9PiBwYXJ0LmluY2x1ZGVzKCIlIikpOwogICAgICAgICAgICBpZiAocGVyY2VudEluZGV4ICE9PSAtMSkgewogICAgICAgICAgICAgIGRpc2tVc2FnZSA9IHBhcnRzW3BlcmNlbnRJbmRleF07CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICghZGlza1VzYWdlKSB7CiAgICAgICAgICBjb25zdCByb290TWF0Y2ggPSBkZi5tYXRjaCgvKFxkKyUpXHMrXC9ccyokL20pOwogICAgICAgICAgZGlza1VzYWdlID0gcm9vdE1hdGNoID8gcm9vdE1hdGNoWzFdIDogIiI7CiAgICAgICAgfQogICAgICB9CgogICAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiZGlza191c2VkIiwgZGlza1VzYWdlKTsKICAgICAgcmV0dXJuIGRpc2tVc2FnZTsKICAgIH0gY2F0Y2gge30KICB9CgogIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJkaXNrX3VzZWQiLCAiIik7CiAgcmV0dXJuICIiOwp9CgovKioKICogR2V0cyBzeXN0ZW0gbG9hZCBhdmVyYWdlcwogKiBSZWFkcyAxLCA1LCBhbmQgMTUgbWludXRlIGxvYWQgYXZlcmFnZXMgZnJvbSAvcHJvYy9sb2FkYXZnIChMaW51eCBvbmx5KQogKiBAcmV0dXJucyBTcGFjZS1zZXBhcmF0ZWQgbG9hZCBhdmVyYWdlcyAoMW0gNW0gMTVtKSBvciBlbXB0eSBzdHJpbmcKICogQGV4YW1wbGUgIjAuNTIgMC41OCAwLjU5IiwgIjIuMTAgMS45NSAxLjg4IgogKi8KZXhwb3J0IGZ1bmN0aW9uIGxvYWRfYXZlcmFnZSgpOiBzdHJpbmcgewogIGlmICghSVNfTElOVVgpIHJldHVybiAiIjsKCiAgdHJ5IHsKICAgIGNvbnN0IGxvYWRhdmcgPSBmcy5yZWFkRmlsZVN5bmMoIi9wcm9jL2xvYWRhdmciLCAidXRmOCIpOwogICAgY29uc3QgbG9hZHMgPSBsb2FkYXZnLnNwbGl0KCIgIikuc2xpY2UoMCwgMyk7CiAgICByZXR1cm4gbG9hZHMuam9pbigiICIpOwogIH0gY2F0Y2gge30KICByZXR1cm4gIiI7Cn0KCi8qKgogKiBHZXRzIG1vdW50ZWQgZmlsZXN5c3RlbSBpbmZvcm1hdGlvbgogKiBMaXN0cyBub24tc3lzdGVtIG1vdW50IHBvaW50cyB3aXRoIHVzYWdlIGZyb20gZGYgKExpbnV4IG9ubHkpCiAqIEV4Y2x1ZGVzIC8sIC9kZXYsIC9wcm9jLCBhbmQgL3N5cyBtb3VudHMKICogQHBhcmFtIGNvbnRleHQgLSBJbmZvIGNvbnRleHQgd2l0aCBjYWNoZQogKiBAcmV0dXJucyBTcGFjZS1zZXBhcmF0ZWQgbW91bnQgcG9pbnRzIHdpdGggdXNhZ2Ugb3IgZW1wdHkgc3RyaW5nCiAqIEBleGFtcGxlICIvaG9tZSg0NSUpIC9tbnQvZGF0YSg3OCUpIiwgIi9tZWRpYS91c2IoMTIlKSIKICovCmV4cG9ydCBmdW5jdGlvbiBtb3VudF9wb2ludHMoY29udGV4dDogSW5mb0NvbnRleHQpOiBzdHJpbmcgewogIGNvbnN0IGNhY2hlZCA9IGdldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJtb3VudF9wb2ludHMiKTsKICBpZiAoY2FjaGVkICE9PSBudWxsKSByZXR1cm4gY2FjaGVkOwoKICBpZiAoIUlTX0xJTlVYKSB7CiAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAibW91bnRfcG9pbnRzIiwgIiIpOwogICAgcmV0dXJuICIiOwogIH0KCiAgdHJ5IHsKICAgIGNvbnN0IGRmID0gZXhlY0NvbW1hbmQoImRmIC1oIik7CiAgICBjb25zdCBsaW5lcyA9IGRmLnNwbGl0KCJcbiIpLnNsaWNlKDEpOwogICAgY29uc3QgbW91bnRQb2ludHM6IHN0cmluZ1tdID0gW107CgogICAgbGluZXMuZm9yRWFjaCgobGluZSkgPT4gewogICAgICBjb25zdCBwYXJ0cyA9IGxpbmUudHJpbSgpLnNwbGl0KC9ccysvKTsKICAgICAgaWYgKHBhcnRzLmxlbmd0aCA+PSA2KSB7CiAgICAgICAgY29uc3QgbW91bnRQb2ludCA9IHBhcnRzWzVdOwogICAgICAgIGNvbnN0IHVzYWdlID0gcGFydHNbNF07CiAgICAgICAgaWYgKAogICAgICAgICAgIW1vdW50UG9pbnQuc3RhcnRzV2l0aCgiL2RldiIpICYmCiAgICAgICAgICAhbW91bnRQb2ludC5zdGFydHNXaXRoKCIvcHJvYyIpICYmCiAgICAgICAgICAhbW91bnRQb2ludC5zdGFydHNXaXRoKCIvc3lzIikgJiYKICAgICAgICAgIG1vdW50UG9pbnQgIT09ICIvIgogICAgICAgICkgewogICAgICAgICAgbW91bnRQb2ludHMucHVzaChgJHttb3VudFBvaW50fSgke3VzYWdlfSlgKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0pOwoKICAgIGNvbnN0IHJlc3VsdCA9IG1vdW50UG9pbnRzLnNsaWNlKDAsIDMpLmpvaW4oIiAiKTsKICAgIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJtb3VudF9wb2ludHMiLCByZXN1bHQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9IGNhdGNoIHt9CgogIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJtb3VudF9wb2ludHMiLCAiIik7CiAgcmV0dXJuICIiOwp9Cg==\"","export default \"data:video/mp2t;base64,LyoqCiAqIE5ldHdvcmstcmVsYXRlZCBzeXN0ZW0gaW5mb3JtYXRpb24gZnVuY3Rpb25zCiAqIEBtb2R1bGUgaW5mby9uZXR3b3JrCiAqLwoKaW1wb3J0IG9zIGZyb20gIm9zIjsKaW1wb3J0IHR5cGUgeyBJbmZvQ29udGV4dCB9IGZyb20gIi4uL3R5cGVzL2ludGVybmFsLXR5cGVzIjsKaW1wb3J0IHsgSVNfTElOVVggfSBmcm9tICIuLi91dGlscy9wbGF0Zm9ybSI7CmltcG9ydCB7IGV4ZWNDb21tYW5kIH0gZnJvbSAiLi4vdXRpbHMvY29tbWFuZCI7CmltcG9ydCB7IGdldENhY2hlZFZhbHVlLCBzZXRDYWNoZWRWYWx1ZSB9IGZyb20gIi4uL2NhY2hlL2NhY2hlIjsKCi8qKgogKiBHZXRzIHB1YmxpYyBJUCBhZGRyZXNzIGZyb20gaXBpbmZvLmlvCiAqIEBwYXJhbSBjb250ZXh0IC0gSW5mbyBjb250ZXh0IHdpdGggY2FjaGUgYW5kIElQIGluZm8KICogQHJldHVybnMgUHVibGljIElQdjQgYWRkcmVzcyBvciBlbXB0eSBzdHJpbmcKICogQGV4YW1wbGUgIjIwMy4wLjExMy40MiIKICovCmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpcChjb250ZXh0OiBJbmZvQ29udGV4dCk6IFByb21pc2U8c3RyaW5nPiB7CiAgY29uc3QgY2FjaGVkID0gZ2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgImlwIik7CiAgaWYgKGNhY2hlZCkgcmV0dXJuIGNhY2hlZDsKCiAgaWYgKCFjb250ZXh0LmlwSW5mbykgewogICAgc2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgImlwIiwgIiIpOwogICAgcmV0dXJuICIiOwogIH0KICBjb25zdCBpcCA9IGNvbnRleHQuaXBJbmZvLmlwIHx8ICIiOwogIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJpcCIsIGlwKTsKICByZXR1cm4gaXA7Cn0KCi8qKgogKiBHZXRzIGxvY2FsL3ByaXZhdGUgSVAgYWRkcmVzcyhlcykKICogVHJpZXMgaWZjb25maWcgYW5kIGlwIGNvbW1hbmRzIG9uIExpbnV4LCBmYWxscyBiYWNrIHRvIE5vZGUuanMgQVBJCiAqIEByZXR1cm5zIFNwYWNlLXNlcGFyYXRlZCBsb2NhbCBJUCBhZGRyZXNzZXMgKFJGQyAxOTE4IHJhbmdlcykKICogQGV4YW1wbGUgIjE5Mi4xNjguMS4xMDAiIG9yICIxMC4wLjAuNTAgMTkyLjE2OC4xLjEwMCIKICovCmV4cG9ydCBmdW5jdGlvbiBpcGxvY2FsKCk6IHN0cmluZyB7CiAgaWYgKElTX0xJTlVYKSB7CiAgICB0cnkgewogICAgICBjb25zdCBpZmNvbmZpZyA9IGV4ZWNDb21tYW5kKCJpZmNvbmZpZyAyPi9kZXYvbnVsbCIpOwogICAgICBjb25zdCB3bGFuTWF0Y2ggPSBpZmNvbmZpZy5tYXRjaCgKICAgICAgICAvd2xhbjBbXHNcU10qP2luZXQgKFxkK1wuXGQrXC5cZCtcLlxkKykvCiAgICAgICk7CiAgICAgIGlmICh3bGFuTWF0Y2gpIHsKICAgICAgICByZXR1cm4gd2xhbk1hdGNoWzFdOwogICAgICB9CiAgICB9IGNhdGNoIHt9CgogICAgdHJ5IHsKICAgICAgY29uc3QgaXBBZGRyID0gZXhlY0NvbW1hbmQoImlwIGFkZHIgc2hvdyAyPi9kZXYvbnVsbCIpOwogICAgICBjb25zdCBhZGRyZXNzZXM6IHN0cmluZ1tdID0gW107CiAgICAgIGNvbnN0IG1hdGNoZXMgPSBpcEFkZHIubWF0Y2hBbGwoL2luZXQgKFxkK1wuXGQrXC5cZCtcLlxkKylcL1xkKy9nKTsKICAgICAgZm9yIChjb25zdCBtYXRjaCBvZiBtYXRjaGVzKSB7CiAgICAgICAgaWYgKCFtYXRjaFsxXS5zdGFydHNXaXRoKCIxMjcuIikpIHsKICAgICAgICAgIGFkZHJlc3Nlcy5wdXNoKG1hdGNoWzFdKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGFkZHJlc3Nlcy5sZW5ndGggPiAwKSB7CiAgICAgICAgcmV0dXJuIGFkZHJlc3Nlcy5qb2luKCIgIik7CiAgICAgIH0KICAgIH0gY2F0Y2gge30KICB9CgogIGNvbnN0IGludGVyZmFjZXMgPSBvcy5uZXR3b3JrSW50ZXJmYWNlcygpOwogIGNvbnN0IGFkZHJlc3Nlczogc3RyaW5nW10gPSBbXTsKCiAgZm9yIChjb25zdCBuYW1lIG9mIE9iamVjdC5rZXlzKGludGVyZmFjZXMpKSB7CiAgICBmb3IgKGNvbnN0IGRldmljZSBvZiBpbnRlcmZhY2VzW25hbWVdIHx8IFtdKSB7CiAgICAgIGlmIChkZXZpY2UuZmFtaWx5ID09PSAiSVB2NCIgJiYgIWRldmljZS5pbnRlcm5hbCkgewogICAgICAgIGFkZHJlc3Nlcy5wdXNoKGRldmljZS5hZGRyZXNzKTsKICAgICAgfQogICAgfQogIH0KCiAgcmV0dXJuIGFkZHJlc3Nlcy5qb2luKCIgIik7Cn0KCi8qKgogKiBHZXRzIGdlb2dyYXBoaWMgY2l0eSBiYXNlZCBvbiBwdWJsaWMgSVAKICogQHBhcmFtIGNvbnRleHQgLSBJbmZvIGNvbnRleHQgd2l0aCBJUCBnZW9sb2NhdGlvbiBkYXRhCiAqIEByZXR1cm5zIENpdHkgbmFtZSBvciBlbXB0eSBzdHJpbmcKICogQGV4YW1wbGUgIlNhbiBGcmFuY2lzY28iLCAiTmV3IFlvcmsiLCAiTG9uZG9uIgogKi8KZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNpdHkoY29udGV4dDogSW5mb0NvbnRleHQpOiBQcm9taXNlPHN0cmluZz4gewogIGNvbnN0IGNhY2hlZCA9IGdldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJjaXR5Iik7CiAgaWYgKGNhY2hlZCAhPT0gbnVsbCkgcmV0dXJuIGNhY2hlZDsKCiAgaWYgKCFjb250ZXh0LmlwSW5mbyB8fCAhY29udGV4dC5pcEluZm8uY2l0eSkgewogICAgc2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgImNpdHkiLCAiIik7CiAgICByZXR1cm4gIiI7CiAgfQogIGNvbnN0IGNpdHkgPSBjb250ZXh0LmlwSW5mby5jaXR5OwogIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJjaXR5IiwgY2l0eSk7CiAgcmV0dXJuIGNpdHk7Cn0KCi8qKgogKiBHZXRzIHJldmVyc2UgRE5TIGhvc3RuYW1lIHdpdGggSFRUUCBwcmVmaXgKICogQHBhcmFtIGNvbnRleHQgLSBJbmZvIGNvbnRleHQgd2l0aCBJUCBpbmZvCiAqIEByZXR1cm5zIERvbWFpbiB3aXRoIGh0dHA6Ly8gcHJlZml4IG9yIGVtcHR5IHN0cmluZwogKiBAZXhhbXBsZSAiaHR0cDovL2V4YW1wbGUuY29tIiwgImh0dHA6Ly9ob3N0LTIwMy0wLTExMy00Mi5leGFtcGxlLm5ldCIKICovCmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkb21haW4oY29udGV4dDogSW5mb0NvbnRleHQpOiBQcm9taXNlPHN0cmluZz4gewogIGNvbnN0IGNhY2hlZCA9IGdldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJkb21haW4iKTsKICBpZiAoY2FjaGVkICE9PSBudWxsKSByZXR1cm4gY2FjaGVkOwoKICBpZiAoIWNvbnRleHQuaXBJbmZvIHx8ICFjb250ZXh0LmlwSW5mby5ob3N0bmFtZSkgewogICAgc2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgImRvbWFpbiIsICIiKTsKICAgIHJldHVybiAiIjsKICB9CiAgY29uc3QgZG9tYWluID0gYGh0dHA6Ly8ke2NvbnRleHQuaXBJbmZvLmhvc3RuYW1lfWA7CiAgc2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgImRvbWFpbiIsIGRvbWFpbik7CiAgcmV0dXJuIGRvbWFpbjsKfQoKLyoqCiAqIEdldHMgSW50ZXJuZXQgU2VydmljZSBQcm92aWRlciBuYW1lCiAqIFN0cmlwcyBBUyBudW1iZXIgcHJlZml4IGZyb20gb3JnYW5pemF0aW9uIHN0cmluZwogKiBAcGFyYW0gY29udGV4dCAtIEluZm8gY29udGV4dCB3aXRoIElQIGluZm8KICogQHJldHVybnMgSVNQIG5hbWUgb3IgZW1wdHkgc3RyaW5nCiAqIEBleGFtcGxlICJDb21jYXN0IENhYmxlIiwgIlZlcml6b24gQnVzaW5lc3MiLCAiQ2xvdWRmbGFyZSBJbmMiCiAqLwpleHBvcnQgYXN5bmMgZnVuY3Rpb24gaXNwKGNvbnRleHQ6IEluZm9Db250ZXh0KTogUHJvbWlzZTxzdHJpbmc+IHsKICBjb25zdCBjYWNoZWQgPSBnZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiaXNwIik7CiAgaWYgKGNhY2hlZCAhPT0gbnVsbCkgcmV0dXJuIGNhY2hlZDsKCiAgaWYgKCFjb250ZXh0LmlwSW5mbyB8fCAhY29udGV4dC5pcEluZm8ub3JnKSB7CiAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiaXNwIiwgIiIpOwogICAgcmV0dXJuICIiOwogIH0KICBjb25zdCBpc3AgPSBjb250ZXh0LmlwSW5mby5vcmcuc3BsaXQoIiAiKS5zbGljZSgxKS5qb2luKCIgIik7CiAgc2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgImlzcCIsIGlzcCk7CiAgcmV0dXJuIGlzcDsKfQoKLyoqCiAqIEdldHMgYWN0aXZlIG5ldHdvcmsgaW50ZXJmYWNlIG5hbWVzCiAqIExpc3RzIG5vbi1sb29wYmFjayBpbnRlcmZhY2VzIHdpdGggSVB2NCBhZGRyZXNzZXMgKExpbnV4IG9ubHkpCiAqIEBwYXJhbSBjb250ZXh0IC0gSW5mbyBjb250ZXh0IHdpdGggY2FjaGUKICogQHJldHVybnMgU3BhY2Utc2VwYXJhdGVkIGludGVyZmFjZSBuYW1lcyBvciBlbXB0eSBzdHJpbmcKICogQGV4YW1wbGUgImV0aDAgd2xhbjAiLCAiZW5wMHMzIgogKi8KZXhwb3J0IGZ1bmN0aW9uIG5ldHdvcmtfaW50ZXJmYWNlcyhjb250ZXh0OiBJbmZvQ29udGV4dCk6IHN0cmluZyB7CiAgY29uc3QgY2FjaGVkID0gZ2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgIm5ldHdvcmtfaW50ZXJmYWNlcyIpOwogIGlmIChjYWNoZWQgIT09IG51bGwpIHJldHVybiBjYWNoZWQ7CgogIGlmICghSVNfTElOVVgpIHsKICAgIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJuZXR3b3JrX2ludGVyZmFjZXMiLCAiIik7CiAgICByZXR1cm4gIiI7CiAgfQoKICB0cnkgewogICAgY29uc3QgaW50ZXJmYWNlcyA9IG9zLm5ldHdvcmtJbnRlcmZhY2VzKCk7CiAgICBjb25zdCBhY3RpdmVJbnRlcmZhY2VzOiBzdHJpbmdbXSA9IFtdOwoKICAgIGZvciAoY29uc3QgW25hbWUsIGFkZHJzXSBvZiBPYmplY3QuZW50cmllcyhpbnRlcmZhY2VzKSkgewogICAgICBpZiAobmFtZSAhPT0gImxvIikgewogICAgICAgIGNvbnN0IGlwdjRBZGRyID0gYWRkcnM/LmZpbmQoCiAgICAgICAgICAoYWRkcikgPT4gYWRkci5mYW1pbHkgPT09ICJJUHY0IiAmJiAhYWRkci5pbnRlcm5hbAogICAgICAgICk7CiAgICAgICAgaWYgKGlwdjRBZGRyKSB7CiAgICAgICAgICBhY3RpdmVJbnRlcmZhY2VzLnB1c2gobmFtZSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgY29uc3QgcmVzdWx0ID0gYWN0aXZlSW50ZXJmYWNlcy5qb2luKCIgIik7CiAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAibmV0d29ya19pbnRlcmZhY2VzIiwgcmVzdWx0KTsKICAgIHJldHVybiByZXN1bHQ7CiAgfSBjYXRjaCB7fQoKICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAibmV0d29ya19pbnRlcmZhY2VzIiwgIiIpOwogIHJldHVybiAiIjsKfQovKioKICogR2V0cyBvcGVuIFRDUCBwb3J0cyB3aXRoIHNlcnZpY2UgbmFtZXMKICogVXNlcyBsc29mIHRvIGZpbmQgbGlzdGVuaW5nIFRDUCBwb3J0cyAoTGludXggb25seSkKICogQHBhcmFtIGNvbnRleHQgLSBJbmZvIGNvbnRleHQgd2l0aCBjYWNoZQogKiBAcmV0dXJucyBTcGFjZS1zZXBhcmF0ZWQgcG9ydCtwcm9jZXNzIHBhaXJzIG9yIGVtcHR5IHN0cmluZwogKiBAZXhhbXBsZSAiODBodHRwIDQ0M2h0dHAgMjJzc2giLCAiMzAwMG5vZGUgNTQzMnBvc3QiCiAqLwpleHBvcnQgZnVuY3Rpb24gcG9ydHMoY29udGV4dDogSW5mb0NvbnRleHQpOiBzdHJpbmcgewogIGNvbnN0IGNhY2hlZCA9IGdldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJwb3J0cyIpOwogIGlmIChjYWNoZWQgIT09IG51bGwpIHJldHVybiBjYWNoZWQ7CgogIGlmIChJU19MSU5VWCkgewogICAgdHJ5IHsKICAgICAgY29uc3QgbHNvZiA9IGV4ZWNDb21tYW5kKCJsc29mIC1uUCAtaVRDUCAtc1RDUDpMSVNURU4iKTsKICAgICAgY29uc3QgbGluZXMgPSBsc29mLnNwbGl0KCJcbiIpLnNsaWNlKDEpOwogICAgICBjb25zdCBwb3J0cyA9IG5ldyBTZXQ8c3RyaW5nPigpOwoKICAgICAgbGluZXMuZm9yRWFjaCgobGluZSkgPT4gewogICAgICAgIGNvbnN0IHBhcnRzID0gbGluZS5zcGxpdCgvXHMrLyk7CiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA+PSA5KSB7CiAgICAgICAgICBjb25zdCBhZGRyZXNzID0gcGFydHNbOF07CiAgICAgICAgICBjb25zdCBwb3J0TWF0Y2ggPSBhZGRyZXNzLm1hdGNoKC86KFxkKykkLyk7CiAgICAgICAgICBpZiAocG9ydE1hdGNoKSB7CiAgICAgICAgICAgIGNvbnN0IHBvcnQgPSBwb3J0TWF0Y2hbMV07CiAgICAgICAgICAgIGNvbnN0IHByb2Nlc3MgPSBwYXJ0c1swXS5zdWJzdHJpbmcoMCwgNCk7CiAgICAgICAgICAgIHBvcnRzLmFkZChgJHtwb3J0fSR7cHJvY2Vzc31gKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0pOwoKICAgICAgY29uc3QgcmVzdWx0ID0gQXJyYXkuZnJvbShwb3J0cykuam9pbigiICIpOwogICAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAicG9ydHMiLCByZXN1bHQpOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfSBjYXRjaCB7fQogIH0KCiAgc2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgInBvcnRzIiwgIiIpOwogIHJldHVybiAiIjsKfQo=\"","export default \"data:video/mp2t;base64,LyoqCiAqIFBsYXRmb3JtLXJlbGF0ZWQgc3lzdGVtIGluZm9ybWF0aW9uIGZ1bmN0aW9ucwogKiBAbW9kdWxlIGluZm8vcGxhdGZvcm0KICovCgppbXBvcnQgb3MgZnJvbSAib3MiOwppbXBvcnQgZnMgZnJvbSAiZnMiOwppbXBvcnQgdHlwZSB7IEluZm9Db250ZXh0IH0gZnJvbSAiLi4vdHlwZXMvaW50ZXJuYWwtdHlwZXMiOwppbXBvcnQgeyBJU19XSU5ET1dTLCBJU19NQUMsIElTX0xJTlVYIH0gZnJvbSAiLi4vdXRpbHMvcGxhdGZvcm0iOwppbXBvcnQgeyBleGVjQ29tbWFuZCwgY29tbWFuZEV4aXN0cyB9IGZyb20gIi4uL3V0aWxzL2NvbW1hbmQiOwppbXBvcnQgeyBnZXRDYWNoZWRWYWx1ZSwgc2V0Q2FjaGVkVmFsdWUgfSBmcm9tICIuLi9jYWNoZS9jYWNoZSI7CgovKioKICogR2V0cyB0aGUgY3VycmVudCB1c2VybmFtZQogKiBAcmV0dXJucyBDdXJyZW50IHN5c3RlbSB1c2VybmFtZQogKi8KZXhwb3J0IGZ1bmN0aW9uIHVzZXIoKTogc3RyaW5nIHsKICByZXR1cm4gb3MudXNlckluZm8oKS51c2VybmFtZTsKfQoKLyoqCiAqIEdldHMgdGhlIHN5c3RlbSBob3N0bmFtZQogKiBAcmV0dXJucyBDb21wdXRlciBob3N0bmFtZS9uZXR3b3JrIG5hbWUKICovCmV4cG9ydCBmdW5jdGlvbiBob3N0bmFtZSgpOiBzdHJpbmcgewogIHJldHVybiBvcy5ob3N0bmFtZSgpOwp9CgovKioKICogR2V0cyBvcGVyYXRpbmcgc3lzdGVtIG5hbWUgYW5kIHZlcnNpb24KICogUGxhdGZvcm0tc3BlY2lmaWMgZGV0ZWN0aW9uIGZvciBXaW5kb3dzLCBtYWNPUywgYW5kIExpbnV4CiAqIEBwYXJhbSBjb250ZXh0IC0gSW5mbyBjb250ZXh0IHdpdGggY2FjaGUKICogQHJldHVybnMgT1MgbmFtZSBhbmQgdmVyc2lvbiBzdHJpbmcKICogQGV4YW1wbGUgIldpbmRvd3MgMTEgUHJvIiwgIm1hY09TIFZlbnR1cmEgMTMuMi4xIiwgIlVidW50dSAyMi4wNC4zIExUUyIKICovCmV4cG9ydCBmdW5jdGlvbiBvc19pbmZvKGNvbnRleHQ6IEluZm9Db250ZXh0KTogc3RyaW5nIHsKICBjb25zdCBjYWNoZWQgPSBnZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAib3MiKTsKICBpZiAoY2FjaGVkKSByZXR1cm4gY2FjaGVkOwoKICBjb25zdCBwbGF0Zm9ybSA9IG9zLnBsYXRmb3JtKCk7CiAgY29uc3QgcmVsZWFzZSA9IG9zLnJlbGVhc2UoKTsKICBsZXQgb3NOYW1lID0gIiI7CgogIGlmIChJU19XSU5ET1dTKSB7CiAgICB0cnkgewogICAgICBjb25zdCB2ZXJzaW9uID0gZXhlY0NvbW1hbmQoInZlciIpOwogICAgICBjb25zdCBtYXRjaCA9IHZlcnNpb24ubWF0Y2goL01pY3Jvc29mdCBXaW5kb3dzIFxbVmVyc2lvbiAoW15cXV0rKVxdLyk7CiAgICAgIG9zTmFtZSA9IG1hdGNoID8gYFdpbmRvd3MgJHttYXRjaFsxXX1gIDogYFdpbmRvd3MgJHtyZWxlYXNlfWA7CiAgICB9IGNhdGNoIHsKICAgICAgb3NOYW1lID0gYFdpbmRvd3MgJHtyZWxlYXNlfWA7CiAgICB9CiAgfSBlbHNlIGlmIChJU19NQUMpIHsKICAgIG9zTmFtZSA9IGBtYWNPUyAke3JlbGVhc2V9YDsKICB9IGVsc2UgaWYgKElTX0xJTlVYKSB7CiAgICB0cnkgewogICAgICBjb25zdCBvc1JlbGVhc2UgPSBmcy5yZWFkRmlsZVN5bmMoIi9ldGMvb3MtcmVsZWFzZSIsICJ1dGY4Iik7CiAgICAgIGNvbnN0IG5hbWVNYXRjaCA9IG9zUmVsZWFzZS5tYXRjaCgvXk5BTUU9IihbXiJdKykiL20pOwogICAgICBjb25zdCB2ZXJzaW9uTWF0Y2ggPSBvc1JlbGVhc2UubWF0Y2goL15WRVJTSU9OX0lEPSIoW14iXSspIi9tKTsKICAgICAgb3NOYW1lID0gbmFtZU1hdGNoID8gbmFtZU1hdGNoWzFdIDogIkxpbnV4IjsKICAgICAgaWYgKHZlcnNpb25NYXRjaCkgb3NOYW1lICs9IGAgJHt2ZXJzaW9uTWF0Y2hbMV19YDsKICAgIH0gY2F0Y2ggewogICAgICBvc05hbWUgPSBgTGludXggJHtyZWxlYXNlfWA7CiAgICB9CiAgfSBlbHNlIHsKICAgIG9zTmFtZSA9IGAke3BsYXRmb3JtfSAke3JlbGVhc2V9YDsKICB9CgogIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJvcyIsIG9zTmFtZSk7CiAgcmV0dXJuIG9zTmFtZTsKfQoKLyoqCiAqIEdldHMga2VybmVsIHZlcnNpb24gc3RyaW5nCiAqIFJldHVybnMgdGhlIG9wZXJhdGluZyBzeXN0ZW0ga2VybmVsIHZlcnNpb24gZnJvbSBvcy5yZWxlYXNlKCkKICogQHBhcmFtIGNvbnRleHQgLSBJbmZvIGNvbnRleHQgd2l0aCBjYWNoZQogKiBAcmV0dXJucyBLZXJuZWwgdmVyc2lvbiBzdHJpbmcKICogQGV4YW1wbGUgIjUuMTUuMC01Ni1nZW5lcmljIiwgIjYuMTEuMTEtdmFsdmUxMi0xLW5lcHR1bmUiCiAqLwpleHBvcnQgZnVuY3Rpb24ga2VybmVsKGNvbnRleHQ6IEluZm9Db250ZXh0KTogc3RyaW5nIHsKICBjb25zdCBjYWNoZWQgPSBnZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAia2VybmVsIik7CiAgaWYgKGNhY2hlZCkgcmV0dXJuIGNhY2hlZDsKCiAgY29uc3Qga2VybmVsID0gb3MucmVsZWFzZSgpOwogIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJrZXJuZWwiLCBrZXJuZWwpOwogIHJldHVybiBrZXJuZWw7Cn0KCi8qKgogKiBHZXRzIGRldmljZSBvciBjb21wdXRlciBtb2RlbCBuYW1lCiAqIFVzZXMgV01JIG9uIFdpbmRvd3MsIERNSSBvbiBMaW51eCwgZ2V0cHJvcCBvbiBBbmRyb2lkCiAqIEBwYXJhbSBjb250ZXh0IC0gSW5mbyBjb250ZXh0IHdpdGggY2FjaGUKICogQHJldHVybnMgRGV2aWNlIG1vZGVsIG5hbWUgb3IgZW1wdHkgc3RyaW5nCiAqIEBleGFtcGxlICJEZWxsIE9wdGlQbGV4IDcwOTAiLCAiTWFjQm9vayBQcm8gMTYtaW5jaCIsICJWYWx2ZSBTdGVhbSBEZWNrIgogKi8KZXhwb3J0IGZ1bmN0aW9uIGRldmljZShjb250ZXh0OiBJbmZvQ29udGV4dCk6IHN0cmluZyB7CiAgY29uc3QgY2FjaGVkID0gZ2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgImRldmljZSIpOwogIGlmIChjYWNoZWQgIT09IG51bGwpIHJldHVybiBjYWNoZWQ7CgogIGlmIChJU19XSU5ET1dTKSB7CiAgICB0cnkgewogICAgICBjb25zdCB3bWljID0gZXhlY0NvbW1hbmQoIndtaWMgY3Nwcm9kdWN0IGdldCBuYW1lIC9mb3JtYXQ6bGlzdCIpOwogICAgICBjb25zdCBuYW1lTWF0Y2ggPSB3bWljLm1hdGNoKC9OYW1lPSguKykvKTsKICAgICAgaWYgKG5hbWVNYXRjaCkgewogICAgICAgIGNvbnN0IGRldmljZSA9IG5hbWVNYXRjaFsxXS50cmltKCk7CiAgICAgICAgaWYgKGRldmljZSAmJiBkZXZpY2UgIT09ICIiKSB7CiAgICAgICAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiZGV2aWNlIiwgZGV2aWNlKTsKICAgICAgICAgIHJldHVybiBkZXZpY2U7CiAgICAgICAgfQogICAgICB9CiAgICB9IGNhdGNoIHt9CgogICAgdHJ5IHsKICAgICAgY29uc3QgcHMgPSBleGVjQ29tbWFuZCgKICAgICAgICAncG93ZXJzaGVsbC5leGUgLUNvbW1hbmQgIkdldC1XbWlPYmplY3QgLUNsYXNzIFdpbjMyX0NvbXB1dGVyU3lzdGVtIHwgU2VsZWN0LU9iamVjdCAtRXhwYW5kUHJvcGVydHkgTW9kZWwiJwogICAgICApOwogICAgICBpZiAocHMudHJpbSgpKSB7CiAgICAgICAgY29uc3QgZGV2aWNlID0gcHMudHJpbSgpOwogICAgICAgIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJkZXZpY2UiLCBkZXZpY2UpOwogICAgICAgIHJldHVybiBkZXZpY2U7CiAgICAgIH0KICAgIH0gY2F0Y2gge30KICB9IGVsc2UgaWYgKElTX0xJTlVYKSB7CiAgICB0cnkgewogICAgICBpZiAoY29tbWFuZEV4aXN0cygiZ2V0cHJvcCIpKSB7CiAgICAgICAgY29uc3QgZGV2aWNlID0gZXhlY0NvbW1hbmQoImdldHByb3Agcm8ucHJvZHVjdC5tb2RlbCIpOwogICAgICAgIGlmIChkZXZpY2UpIHsKICAgICAgICAgIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJkZXZpY2UiLCBkZXZpY2UpOwogICAgICAgICAgcmV0dXJuIGRldmljZTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIGNvbnN0IGRtaVBhdGggPSAiL3N5cy9kZXZpY2VzL3ZpcnR1YWwvZG1pL2lkL3Byb2R1Y3RfbmFtZSI7CiAgICAgIGlmIChmcy5leGlzdHNTeW5jKGRtaVBhdGgpKSB7CiAgICAgICAgY29uc3QgZGV2aWNlID0gZnMucmVhZEZpbGVTeW5jKGRtaVBhdGgsICJ1dGY4IikudHJpbSgpOwogICAgICAgIGlmIChkZXZpY2UpIHsKICAgICAgICAgIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJkZXZpY2UiLCBkZXZpY2UpOwogICAgICAgICAgcmV0dXJuIGRldmljZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0gY2F0Y2gge30KICB9CgogIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJkZXZpY2UiLCAiIik7CiAgcmV0dXJuICIiOwp9Cg==\"","export default \"data:video/mp2t;base64,LyoqCiAqIFByb2Nlc3MtcmVsYXRlZCBzeXN0ZW0gaW5mb3JtYXRpb24gZnVuY3Rpb25zCiAqIEBtb2R1bGUgaW5mby9wcm9jZXNzCiAqLwoKaW1wb3J0IG9zIGZyb20gIm9zIjsKaW1wb3J0IHR5cGUgeyBJbmZvQ29udGV4dCB9IGZyb20gIi4uL3R5cGVzL2ludGVybmFsLXR5cGVzIjsKaW1wb3J0IHsgSVNfTElOVVggfSBmcm9tICIuLi91dGlscy9wbGF0Zm9ybSI7CmltcG9ydCB7IGV4ZWNDb21tYW5kIH0gZnJvbSAiLi4vdXRpbHMvY29tbWFuZCI7CmltcG9ydCB7IGdldENhY2hlZFZhbHVlLCBzZXRDYWNoZWRWYWx1ZSB9IGZyb20gIi4uL2NhY2hlL2NhY2hlIjsKCi8qKgogKiBHZXRzIHRoZSBoaWdoZXN0IENQVS1jb25zdW1pbmcgcHJvY2VzcwogKiBVc2VzIHBzIGNvbW1hbmQgdG8gZmluZCB0b3AgcHJvY2VzcyBieSBDUFUgdXNhZ2UgKExpbnV4IG9ubHkpCiAqIEBwYXJhbSBjb250ZXh0IC0gSW5mbyBjb250ZXh0IHdpdGggY2FjaGUKICogQHJldHVybnMgUHJvY2VzcyBpbmZvIGFzICJwZXJjZW50YWdlIHByb2Nlc3NuYW1lIiBvciBlbXB0eSBzdHJpbmcKICogQGV4YW1wbGUgIjglIGZpcmVmb3giLCAiMTUlIGNocm9tZSIsICIzJSBzeXN0ZW1kIgogKi8KZXhwb3J0IGZ1bmN0aW9uIHRvcF9wcm9jZXNzKGNvbnRleHQ6IEluZm9Db250ZXh0KTogc3RyaW5nIHsKICBjb25zdCBjYWNoZWQgPSBnZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAidG9wX3Byb2Nlc3MiKTsKICBpZiAoY2FjaGVkICE9PSBudWxsKSByZXR1cm4gY2FjaGVkOwoKICBpZiAoSVNfTElOVVgpIHsKICAgIHRyeSB7CiAgICAgIGNvbnN0IHBzID0gZXhlY0NvbW1hbmQoInBzIC1lbyBwY3B1LGNvbW0gLS1zb3J0PS0lY3B1IC0tbm8taGVhZGVycyIpOwogICAgICBjb25zdCBsaW5lcyA9IHBzLnNwbGl0KCJcbiIpOwogICAgICBpZiAobGluZXMubGVuZ3RoID4gMCkgewogICAgICAgIGNvbnN0IHRvcFByb2Nlc3MgPSBsaW5lc1swXS50cmltKCkucmVwbGFjZSgvXHMrLywgIiAiKS5zcGxpdCgiICIpOwogICAgICAgIGNvbnN0IGNwdSA9IHRvcFByb2Nlc3NbMF0ucmVwbGFjZSgvXC5cZCsvLCAiJSIpOwogICAgICAgIGNvbnN0IHByb2Nlc3MgPSB0b3BQcm9jZXNzWzFdLnNwbGl0KCIvIikucG9wKCk7CiAgICAgICAgY29uc3QgcmVzdWx0ID0gYCR7Y3B1fSUgJHtwcm9jZXNzfWA7CiAgICAgICAgc2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgInRvcF9wcm9jZXNzIiwgcmVzdWx0KTsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICB9CiAgICB9IGNhdGNoIHt9CiAgfQoKICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAidG9wX3Byb2Nlc3MiLCAiIik7CiAgcmV0dXJuICIiOwp9CgovKioKICogR2V0cyBzeXN0ZW0gdXB0aW1lIHNpbmNlIGxhc3QgYm9vdAogKiBAcmV0dXJucyBVcHRpbWUgZm9ybWF0dGVkIGFzICJYZCBZaCBabSIKICogQGV4YW1wbGUgIjJkIDE0aCAyM20iLCAiMGQgM2ggNDVtIgogKi8KZXhwb3J0IGZ1bmN0aW9uIHVwdGltZSgpOiBzdHJpbmcgewogIGNvbnN0IHVwdGltZVNlY29uZHMgPSBvcy51cHRpbWUoKTsKICBjb25zdCBkYXlzID0gTWF0aC5mbG9vcih1cHRpbWVTZWNvbmRzIC8gODY0MDApOwogIGNvbnN0IGhvdXJzID0gTWF0aC5mbG9vcigodXB0aW1lU2Vjb25kcyAlIDg2NDAwKSAvIDM2MDApOwogIGNvbnN0IG1pbnV0ZXMgPSBNYXRoLmZsb29yKCh1cHRpbWVTZWNvbmRzICUgMzYwMCkgLyA2MCk7CiAgcmV0dXJuIGAke2RheXN9ZCAke2hvdXJzfWggJHttaW51dGVzfW1gOwp9CgovKioKICogR2V0cyBudW1iZXIgb2YgbG9nZ2VkIGluIHVzZXJzCiAqIFVzZXMgd2hvIGNvbW1hbmQgdG8gY291bnQgYWN0aXZlIHVzZXIgc2Vzc2lvbnMgKExpbnV4IG9ubHkpCiAqIEByZXR1cm5zIFVzZXIgY291bnQgd2l0aCAidXNlcnMiIHN1ZmZpeCBvciBlbXB0eSBzdHJpbmcKICogQGV4YW1wbGUgIjMgdXNlcnMiLCAiMSB1c2VycyIKICovCmV4cG9ydCBmdW5jdGlvbiB1c2Vyc19sb2dnZWRfaW4oKTogc3RyaW5nIHsKICBpZiAoIUlTX0xJTlVYKSByZXR1cm4gIiI7CgogIHRyeSB7CiAgICBjb25zdCB3aG8gPSBleGVjQ29tbWFuZCgid2hvIik7CiAgICBjb25zdCB1c2VycyA9IHdoby5zcGxpdCgiXG4iKS5maWx0ZXIoKGxpbmUpID0+IGxpbmUudHJpbSgpKS5sZW5ndGg7CiAgICBpZiAodXNlcnMgPiAwKSB7CiAgICAgIHJldHVybiBgJHt1c2Vyc30gdXNlcnNgOwogICAgfQogIH0gY2F0Y2gge30KICByZXR1cm4gIiI7Cn0K\"","export default \"data:video/mp2t;base64,LyoqCiAqIFNldHRpbmdzIGNvbmZpZ3VyYXRpb24gYW5kIG1hbmFnZW1lbnQKICogQG1vZHVsZSBpbmZvL3NldHRpbmdzCiAqLwoKaW1wb3J0IHBhdGggZnJvbSAicGF0aCI7CmltcG9ydCBvcyBmcm9tICJvcyI7CmltcG9ydCBmcyBmcm9tICJmcyI7CmltcG9ydCBwcm9jZXNzIGZyb20gInByb2Nlc3MiOwoKLy8gU2V0dGluZ3MgZmlsZSBwYXRocwpleHBvcnQgY29uc3QgU0VUVElOR1NfRklMRSA9IHBhdGguam9pbigKICBvcy5ob21lZGlyKCksCiAgIi5jb25maWciLAogICJzeXN0ZW1pbmZvLXNldHRpbmdzLmpzb24iLAopOwpleHBvcnQgY29uc3QgQ0FDSEVfRklMRSA9IHBhdGguam9pbihvcy50bXBkaXIoKSwgInN5c3RlbWluZm8tY2FjaGUuanNvbiIpOwoKLy8gQ29sb3IgY29kZXMKZXhwb3J0IGNvbnN0IGNvbG9ycyA9IHsKICByZXNldDogIlx4MWJbMG0iLAogIHJlZDogIlx4MWJbMzg7NTsxOTZtIiwKICBvcmFuZ2U6ICJceDFiWzM4OzU7MjA4bSIsCiAgeWVsbG93OiAiXHgxYlszODs1OzIyNm0iLAogIGdyZWVuOiAiXHgxYlszODs1OzQ2bSIsCiAgYmx1ZTogIlx4MWJbMzg7NTszOW0iLAogIGN5YW46ICJceDFiWzM4OzU7NTFtIiwKICBwdXJwbGU6ICJceDFiWzM4OzU7MTcxbSIsCiAgbWFnZW50YTogIlx4MWJbMzg7NTsyMTNtIiwKICBncmF5OiAiXHgxYlszODs1OzI1MG0iLAogIGxpZ2h0Ymx1ZTogIlx4MWJbMzg7NTsyMjBtIiwKfTsKCi8vIERlZmF1bHQgc2V0dGluZ3MKZXhwb3J0IGNvbnN0IERFRkFVTFRfU0VUVElOR1MgPSB7CiAgZGlzcGxheV9vcmRlcjogWwogICAgWyJ1c2VyIiwgImhvc3RuYW1lIiwgIm9zIiwgImRldmljZSIsICJrZXJuZWwiLCAiY3B1IiwgImdwdSIsICJiZW5jaCJdLAogICAgWwogICAgICAiZGlza191c2VkIiwKICAgICAgInJhbV91c2VkIiwKICAgICAgInRvcF9wcm9jZXNzIiwKICAgICAgInVwdGltZSIsCiAgICAgICJ0ZW1wZXJhdHVyZSIsCiAgICAgICJiYXR0ZXJ5IiwKICAgICAgImxvYWRfYXZlcmFnZSIsCiAgICBdLAogICAgWyJpcCIsICJpcGxvY2FsIiwgImNpdHkiLCAiZG9tYWluIiwgImlzcCJdLAogICAgWyJzaGVsbCIsICJzZXJ2aWNlc19ydW5uaW5nIiwgInBhY21hbiIsICJjb250YWluZXJzIl0sCiAgXSwKICBjb2xvcnM6IHsKICAgIHVzZXI6ICJyZWQiLAogICAgaG9zdG5hbWU6ICJvcmFuZ2UiLAogICAgZGlza191c2VkOiAicHVycGxlIiwKICAgIHJhbV91c2VkOiAieWVsbG93IiwKICAgIHRvcF9wcm9jZXNzOiAibWFnZW50YSIsCiAgICB1cHRpbWU6ICJjeWFuIiwKICAgIGlwOiAiZ3JlZW4iLAogICAgaXBsb2NhbDogInllbGxvdyIsCiAgICBjaXR5OiAiZ3JlZW4iLAogICAgZG9tYWluOiAiZ3JheSIsCiAgICBpc3A6ICJsaWdodGJsdWUiLAogICAgb3M6ICJncmF5IiwKICAgIGNwdTogIm9yYW5nZSIsCiAgICBncHU6ICJ5ZWxsb3ciLAogICAgYmVuY2g6ICJyZWQiLAogICAgZGV2aWNlOiAieWVsbG93IiwKICAgIGtlcm5lbDogImdyZWVuIiwKICAgIHNoZWxsOiAib3JhbmdlIiwKICAgIHBhY21hbjogIm11bHRpY29sb3IiLAogICAgcG9ydHM6ICJtdWx0aWNvbG9yIiwKICAgIGNvbnRhaW5lcnM6ICJncmVlbiIsCiAgICBtZW1vcnlfYXZhaWxhYmxlOiAiYmx1ZSIsCiAgICBzd2FwX3VzZWQ6ICJwdXJwbGUiLAogICAgbG9hZF9hdmVyYWdlOiAicmVkIiwKICAgIHVzZXJzX2xvZ2dlZF9pbjogImN5YW4iLAogICAgbmV0d29ya19pbnRlcmZhY2VzOiAieWVsbG93IiwKICAgIG1vdW50X3BvaW50czogImdyYXkiLAogICAgc2VydmljZXNfcnVubmluZzogImdyZWVuIiwKICAgIHRlbXBlcmF0dXJlOiAicmVkIiwKICAgIGJhdHRlcnk6ICJncmVlbiIsCiAgICBzY3JlZW5fcmVzb2x1dGlvbjogImJsdWUiLAogIH0sCiAgZW1vamlzOiB7CiAgICB1c2VyOiAi8J+RpCAiLAogICAgaG9zdG5hbWU6ICLwn4+gICIsCiAgICBpcDogIvCfjI4gIiwKICAgIGlwbG9jYWw6ICLwn4yQICIsCiAgICBjaXR5OiAi8J+TjSAiLAogICAgZG9tYWluOiAi8J+UlyAiLAogICAgaXNwOiAi8J+RriAiLAogICAgb3M6ICLimqEgIiwKICAgIGNwdTogIvCfk4ggIiwKICAgIGdwdTogIvCfjq4gIiwKICAgIGJlbmNoOiAi8J+SqiAiLAogICAgZGV2aWNlOiAi8J+SuyAiLAogICAga2VybmVsOiAi8J+UpyAiLAogICAgc2hlbGw6ICLwn5CaICIsCiAgICBwYWNtYW46ICLwn5qAICIsCiAgICBkaXNrX3VzZWQ6ICLwn5OBICIsCiAgICByYW1fdXNlZDogIvCfkr4gIiwKICAgIHRvcF9wcm9jZXNzOiAi8J+UnSAiLAogICAgdXB0aW1lOiAi4o+x77iPICIsCiAgICBwb3J0czogIvCflIwgIiwKICAgIGNvbnRhaW5lcnM6ICLwn5OmICIsCiAgICBtZW1vcnlfYXZhaWxhYmxlOiAi8J+noCAiLAogICAgc3dhcF91c2VkOiAi8J+UhCAiLAogICAgbG9hZF9hdmVyYWdlOiAi4pqW77iPICIsCiAgICB1c2Vyc19sb2dnZWRfaW46ICLwn5GlICIsCiAgICBuZXR3b3JrX2ludGVyZmFjZXM6ICLwn4yQICIsCiAgICBtb3VudF9wb2ludHM6ICLwn5OCICIsCiAgICBzZXJ2aWNlc19ydW5uaW5nOiAi4pqZ77iPICIsCiAgICB0ZW1wZXJhdHVyZTogIvCfjKHvuI8gIiwKICAgIGJhdHRlcnlfY2hhcmdpbmc6ICLwn5SMICIsCiAgICBiYXR0ZXJ5OiAi8J+UiyAiLAogICAgc2NyZWVuX3Jlc29sdXRpb246ICLwn5al77iPICIsCiAgfSwKICBsYWJlbHM6IHsKICAgIHVzZXI6ICJVc2VyIiwKICAgIGhvc3RuYW1lOiAiSG9zdCIsCiAgICBpcDogIklQIiwKICAgIGlwbG9jYWw6ICJMb2NhbCBJUCIsCiAgICBjaXR5OiAiQ2l0eSIsCiAgICBkb21haW46ICJEb21haW4iLAogICAgaXNwOiAiSVNQIiwKICAgIG9zOiAiT1MiLAogICAgY3B1OiAiQ1BVIiwKICAgIGdwdTogIkdQVSIsCiAgICBiZW5jaDogIkJlbmNoIiwKICAgIGRldmljZTogIkRldmljZSIsCiAgICBrZXJuZWw6ICJLZXJuZWwiLAogICAgc2hlbGw6ICJTaGVsbCIsCiAgICBwYWNtYW46ICJQYWNrYWdlcyIsCiAgICBkaXNrX3VzZWQ6ICJEaXNrIiwKICAgIHJhbV91c2VkOiAiUkFNIiwKICAgIHRvcF9wcm9jZXNzOiAiVG9wIiwKICAgIHVwdGltZTogIlVwdGltZSIsCiAgICBwb3J0czogIlBvcnRzIiwKICAgIGNvbnRhaW5lcnM6ICJDb250YWluZXJzIiwKICAgIG1lbW9yeV9hdmFpbGFibGU6ICJNZW1vcnkiLAogICAgc3dhcF91c2VkOiAiU3dhcCIsCiAgICBsb2FkX2F2ZXJhZ2U6ICJMb2FkIiwKICAgIHVzZXJzX2xvZ2dlZF9pbjogIlVzZXJzIiwKICAgIG5ldHdvcmtfaW50ZXJmYWNlczogIk5ldHdvcmsiLAogICAgbW91bnRfcG9pbnRzOiAiTW91bnRzIiwKICAgIHNlcnZpY2VzX3J1bm5pbmc6ICJTZXJ2aWNlcyIsCiAgICB0ZW1wZXJhdHVyZTogIlRlbXAiLAogICAgYmF0dGVyeV9jaGFyZ2luZzogIkJhdHRlcnkiLAogICAgYmF0dGVyeTogIkJhdHRlcnkiLAogICAgc2NyZWVuX3Jlc29sdXRpb246ICJSZXNvbHV0aW9uIiwKICB9LAogIGRpc3BsYXk6IHsKICAgIHNob3dfZW1vamlzOiB0cnVlLAogICAgc2luZ2xlX2xpbmU6IGZhbHNlLAogICAgbGluZV93cmFwX2xlbmd0aDogcHJvY2Vzcz8uc3Rkb3V0Py5jb2x1bW5zIHx8IDEwMCwKICB9LAogIG5ldHdvcms6IHsKICAgIHNob3dfb2ZmbGluZV9tZXNzYWdlOiB0cnVlLAogIH0sCiAgYWR2YW5jZWQ6IHsKICAgIGRlYnVnOiBmYWxzZSwKICB9LAp9OwoKZXhwb3J0IGludGVyZmFjZSBTZXR0aW5ncyB7CiAgZGlzcGxheV9vcmRlcjogc3RyaW5nW11bXTsKICBjb2xvcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47CiAgZW1vamlzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+OwogIGxhYmVsczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjsKICBkaXNwbGF5OiB7CiAgICBzaG93X2Vtb2ppczogYm9vbGVhbjsKICAgIHNpbmdsZV9saW5lOiBib29sZWFuOwogICAgbGluZV93cmFwX2xlbmd0aDogbnVtYmVyOwogIH07CiAgbmV0d29yazogewogICAgc2hvd19vZmZsaW5lX21lc3NhZ2U6IGJvb2xlYW47CiAgfTsKICBhZHZhbmNlZDogewogICAgZGVidWc6IGJvb2xlYW47CiAgfTsKfQoKLyoqCiAqIExvYWRzIHNldHRpbmdzIGZyb20gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZQogKiBAcmV0dXJucyBTZXR0aW5ncyBvYmplY3QgKGRlZmF1bHRzIG1lcmdlZCB3aXRoIHVzZXIgc2V0dGluZ3MpCiAqLwpleHBvcnQgZnVuY3Rpb24gbG9hZFNldHRpbmdzKCk6IFNldHRpbmdzIHsKICB0cnkgewogICAgaWYgKGZzLmV4aXN0c1N5bmMoU0VUVElOR1NfRklMRSkpIHsKICAgICAgY29uc3Qgc2V0dGluZ3MgPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhTRVRUSU5HU19GSUxFLCAidXRmOCIpKTsKICAgICAgcmV0dXJuIHsgLi4uREVGQVVMVF9TRVRUSU5HUywgLi4uc2V0dGluZ3MgfTsKICAgIH0KICB9IGNhdGNoIHt9CiAgcmV0dXJuIERFRkFVTFRfU0VUVElOR1M7Cn0KCi8qKgogKiBTYXZlcyBzZXR0aW5ncyB0byB0aGUgY29uZmlndXJhdGlvbiBmaWxlCiAqIEBwYXJhbSBzZXR0aW5ncyAtIFRoZSBzZXR0aW5ncyBvYmplY3QgdG8gc2F2ZQogKiBAcmV0dXJucyBUcnVlIGlmIHN1Y2Nlc3NmdWwsIGZhbHNlIG90aGVyd2lzZQogKi8KZXhwb3J0IGZ1bmN0aW9uIHNhdmVTZXR0aW5ncyhzZXR0aW5nczogU2V0dGluZ3MpOiBib29sZWFuIHsKICB0cnkgewogICAgY29uc3QgY29uZmlnRGlyID0gcGF0aC5kaXJuYW1lKFNFVFRJTkdTX0ZJTEUpOwogICAgaWYgKCFmcy5leGlzdHNTeW5jKGNvbmZpZ0RpcikpIHsKICAgICAgZnMubWtkaXJTeW5jKGNvbmZpZ0RpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7CiAgICB9CiAgICBmcy53cml0ZUZpbGVTeW5jKFNFVFRJTkdTX0ZJTEUsIEpTT04uc3RyaW5naWZ5KHNldHRpbmdzLCBudWxsLCAyKSk7CiAgICByZXR1cm4gdHJ1ZTsKICB9IGNhdGNoIHsKICAgIHJldHVybiBmYWxzZTsKICB9Cn0K\"","export default \"data:video/mp2t;base64,LyoqCiAqIFNvZnR3YXJlIGFuZCBwYWNrYWdlLXJlbGF0ZWQgc3lzdGVtIGluZm9ybWF0aW9uIGZ1bmN0aW9ucwogKiBAbW9kdWxlIGluZm8vc29mdHdhcmUKICovCgppbXBvcnQgcHJvY2VzcyBmcm9tICJwcm9jZXNzIjsKaW1wb3J0IHR5cGUgeyBJbmZvQ29udGV4dCB9IGZyb20gIi4uL3R5cGVzL2ludGVybmFsLXR5cGVzIjsKaW1wb3J0IHsgSVNfTElOVVggfSBmcm9tICIuLi91dGlscy9wbGF0Zm9ybSI7CmltcG9ydCB7IGV4ZWNDb21tYW5kLCBjb21tYW5kRXhpc3RzIH0gZnJvbSAiLi4vdXRpbHMvY29tbWFuZCI7CmltcG9ydCB7IGdldENhY2hlZFZhbHVlLCBzZXRDYWNoZWRWYWx1ZSB9IGZyb20gIi4uL2NhY2hlL2NhY2hlIjsKCi8qKgogKiBHZXRzIHRoZSBjdXJyZW50IHNoZWxsIG5hbWUKICogVXNlcyBwcyBjb21tYW5kIHRvIGZpbmQgcGFyZW50IHByb2Nlc3Mgc2hlbGwgKExpbnV4L1VuaXggb25seSkKICogQHJldHVybnMgU2hlbGwgbmFtZSBvciBlbXB0eSBzdHJpbmcgb24gV2luZG93cwogKiBAZXhhbXBsZSAiYmFzaCIsICJ6c2giLCAiZmlzaCIsICJudSIKICovCmV4cG9ydCBmdW5jdGlvbiBzaGVsbChjb250ZXh0OiBJbmZvQ29udGV4dCk6IHN0cmluZyB7CiAgY29uc3QgY2FjaGVkID0gZ2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgInNoZWxsIik7CiAgaWYgKGNhY2hlZCAhPT0gbnVsbCkgcmV0dXJuIGNhY2hlZDsKCiAgaWYgKElTX0xJTlVYKSB7CiAgICB0cnkgewogICAgICBjb25zdCBwcGlkID0gcHJvY2Vzcy5wcGlkOwogICAgICBjb25zdCBzaGVsbE5hbWUgPSBleGVjQ29tbWFuZChgcHMgLXAgJHtwcGlkfSAtbyBjb21tPWApLnNwbGl0KCIvIikucG9wKCk7CiAgICAgIGlmIChzaGVsbE5hbWUpIHsKICAgICAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAic2hlbGwiLCBzaGVsbE5hbWUpOwogICAgICAgIHJldHVybiBzaGVsbE5hbWU7CiAgICAgIH0KICAgIH0gY2F0Y2gge30KICB9CgogIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJzaGVsbCIsICIiKTsKICByZXR1cm4gIiI7Cn0KCi8qKgogKiBHZXRzIGF2YWlsYWJsZSBwYWNrYWdlIG1hbmFnZXJzIGFuZCBkZXZlbG9wbWVudCB0b29scwogKiBDaGVja3MgZm9yIHBhY2thZ2UgbWFuYWdlcnMgKGFwdCwgeXVtLCBucG0sIGV0Yy4pIGFuZCBlZGl0b3JzIChudmltLCBoeCkKICogQHBhcmFtIGNvbnRleHQgLSBJbmZvIGNvbnRleHQgd2l0aCBjYWNoZQogKiBAcmV0dXJucyBTcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBhdmFpbGFibGUgY29tbWFuZHMKICogQGV4YW1wbGUgImFwdCBucG0gZG9ja2VyIG52aW0iLCAieWF5IHBhY21hbiBidW4gaHgiCiAqLwpleHBvcnQgZnVuY3Rpb24gcGFja2FnZXMoY29udGV4dDogSW5mb0NvbnRleHQpOiBzdHJpbmcgewogIGNvbnN0IGNhY2hlZCA9IGdldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJwYWNrYWdlcyIpOwogIGlmIChjYWNoZWQgIT09IG51bGwpIHJldHVybiBjYWNoZWQ7CgogIGNvbnN0IGNvbW1hbmRzID0gWwogICAgImFwdCIsCiAgICAibnBtIiwKICAgICJ1diIsCiAgICAiZG9ja2VyIiwKICAgICJoeCIsCiAgICAibnZpbSIsCiAgICAiYnVuIiwKICAgICJ5YXkiLAogICAgInBhY21hbiIsCiAgICAieXVtIiwKICAgICJkbmYiLAogICAgInp5cHBlciIsCiAgICAiZW1lcmdlIiwKICAgICJhcGsiLAogICAgInNuYXAiLAogICAgImZsYXRwYWsiLAogIF07CiAgY29uc3QgYXZhaWxhYmxlID0gY29tbWFuZHMuZmlsdGVyKChjbWQpID0+IGNvbW1hbmRFeGlzdHMoY21kKSk7CgogIGNvbnN0IHJlc3VsdCA9IGF2YWlsYWJsZS5qb2luKCIgIik7CiAgc2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgInBhY2thZ2VzIiwgcmVzdWx0KTsKICByZXR1cm4gcmVzdWx0Owp9CgovKioKICogR2V0cyB2ZXJzaW9ucyBvZiBjb21tb24gc29mdHdhcmUgdG9vbHMKICogQHBhcmFtIGNvbnRleHQgLSBJbmZvIGNvbnRleHQgd2l0aCBjYWNoZQogKiBAcmV0dXJucyBGb3JtYXR0ZWQgc3RyaW5nIG9mIHRvb2wgdmVyc2lvbnMKICogQGV4YW1wbGUgIm5vZGU6MjAuMS4wIGdpdDoyLjM0LjEiCiAqLwpleHBvcnQgZnVuY3Rpb24gY29tbW9uX3ZlcnNpb25zKGNvbnRleHQ6IEluZm9Db250ZXh0KTogc3RyaW5nIHsKICBjb25zdCBjYWNoZWQgPSBnZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiY29tbW9uX3ZlcnNpb25zIik7CiAgaWYgKGNhY2hlZCAhPT0gbnVsbCkgcmV0dXJuIGNhY2hlZDsKCiAgY29uc3QgdG9vbHMgPSBbCiAgICB7CiAgICAgIGNtZDogIm5vZGUiLAogICAgICBhcmdzOiAiLS12ZXJzaW9uIiwKICAgICAgY2xlYW46ICh2OiBzdHJpbmcpID0+IHYucmVwbGFjZSgvXnYvLCAiIiksCiAgICB9LAogICAgewogICAgICBjbWQ6ICJnaXQiLAogICAgICBhcmdzOiAiLS12ZXJzaW9uIiwKICAgICAgY2xlYW46ICh2OiBzdHJpbmcpID0+IHYucmVwbGFjZSgiZ2l0IHZlcnNpb24gIiwgIiIpLAogICAgfSwKICAgIHsKICAgICAgY21kOiAiZG9ja2VyIiwKICAgICAgYXJnczogIi0tdmVyc2lvbiIsCiAgICAgIGNsZWFuOiAodjogc3RyaW5nKSA9PiB2LnJlcGxhY2UoL0RvY2tlciB2ZXJzaW9uIChbXixdKyksLiovLCAiJDEiKSwKICAgIH0sCiAgICB7CiAgICAgIGNtZDogInB5dGhvbjMiLAogICAgICBhcmdzOiAiLS12ZXJzaW9uIiwKICAgICAgY2xlYW46ICh2OiBzdHJpbmcpID0+IHYucmVwbGFjZSgiUHl0aG9uICIsICIiKSwKICAgIH0sCiAgICB7CiAgICAgIGNtZDogImdvIiwKICAgICAgYXJnczogInZlcnNpb24iLAogICAgICBjbGVhbjogKHY6IHN0cmluZykgPT4gdi5yZXBsYWNlKCJnbyB2ZXJzaW9uIGdvIiwgIiIpLnNwbGl0KCIgIilbMF0sCiAgICB9LAogICAgewogICAgICBjbWQ6ICJydXN0YyIsCiAgICAgIGFyZ3M6ICItLXZlcnNpb24iLAogICAgICBjbGVhbjogKHY6IHN0cmluZykgPT4gdi5yZXBsYWNlKCJydXN0YyAiLCAiIikuc3BsaXQoIiAiKVswXSwKICAgIH0sCiAgXTsKCiAgY29uc3QgdmVyc2lvbnM6IHN0cmluZ1tdID0gW107CgogIGZvciAoY29uc3QgdG9vbCBvZiB0b29scykgewogICAgaWYgKGNvbW1hbmRFeGlzdHModG9vbC5jbWQpKSB7CiAgICAgIHRyeSB7CiAgICAgICAgY29uc3Qgb3V0cHV0ID0gZXhlY0NvbW1hbmQoYCR7dG9vbC5jbWR9ICR7dG9vbC5hcmdzfWApOwogICAgICAgIGNvbnN0IHZlcnNpb24gPSB0b29sLmNsZWFuKG91dHB1dCkudHJpbSgpOwogICAgICAgIGlmICh2ZXJzaW9uKSB7CiAgICAgICAgICB2ZXJzaW9ucy5wdXNoKGAke3Rvb2wuY21kfToke3ZlcnNpb259YCk7CiAgICAgICAgfQogICAgICB9IGNhdGNoIHt9CiAgICB9CiAgfQoKICBjb25zdCByZXN1bHQgPSB2ZXJzaW9ucy5qb2luKCIgIik7CiAgc2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgImNvbW1vbl92ZXJzaW9ucyIsIHJlc3VsdCk7CiAgcmV0dXJuIHJlc3VsdDsKfQovKioKICogR2V0cyBydW5uaW5nIERvY2tlciBjb250YWluZXIgbmFtZXMKICogTGlzdHMgYWN0aXZlIERvY2tlciBjb250YWluZXJzIHdpdGggdGhlaXIgbmFtZXMKICogQHBhcmFtIGNvbnRleHQgLSBJbmZvIGNvbnRleHQgd2l0aCBjYWNoZQogKiBAcmV0dXJucyBTcGFjZS1zZXBhcmF0ZWQgY29udGFpbmVyIG5hbWVzIG9yIGVtcHR5IHN0cmluZwogKiBAZXhhbXBsZSAibmdpbnggcmVkaXMgcG9zdGdyZXMiLCAid2ViLWFwcCBkYi1zZXJ2ZXIiCiAqLwpleHBvcnQgZnVuY3Rpb24gY29udGFpbmVycyhjb250ZXh0OiBJbmZvQ29udGV4dCk6IHN0cmluZyB7CiAgY29uc3QgY2FjaGVkID0gZ2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgImNvbnRhaW5lcnMiKTsKICBpZiAoY2FjaGVkICE9PSBudWxsKSByZXR1cm4gY2FjaGVkOwoKICBpZiAoIWNvbW1hbmRFeGlzdHMoImRvY2tlciIpKSB7CiAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiY29udGFpbmVycyIsICIiKTsKICAgIHJldHVybiAiIjsKICB9CgogIHRyeSB7CiAgICBjb25zdCBjb250YWluZXJDb3VudCA9IGV4ZWNDb21tYW5kKCJkb2NrZXIgcHMgLXEiKQogICAgICAuc3BsaXQoIlxuIikKICAgICAgLmZpbHRlcigobGluZSkgPT4gbGluZS50cmltKCkpLmxlbmd0aDsKICAgIGlmIChjb250YWluZXJDb3VudCA9PT0gMCkgewogICAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiY29udGFpbmVycyIsICIiKTsKICAgICAgcmV0dXJuICIiOwogICAgfQoKICAgIGNvbnN0IGNvbnRhaW5lcnMgPSBleGVjQ29tbWFuZCgKICAgICAgJ2RvY2tlciBwcyAtLWZvcm1hdCAie3suTmFtZXN9fVx0e3suUG9ydHN9fSInCiAgICApOwogICAgY29uc3QgbGluZXMgPSBjb250YWluZXJzLnNwbGl0KCJcbiIpLmZpbHRlcigobGluZSkgPT4gbGluZS50cmltKCkpOwoKICAgIGNvbnN0IGNvbnRhaW5lckluZm86IHN0cmluZ1tdID0gW107CgogICAgbGluZXMuZm9yRWFjaCgobGluZSkgPT4gewogICAgICBjb25zdCBbbmFtZSwgcG9ydHNdID0gbGluZS5zcGxpdCgiXHQiKTsKICAgICAgaWYgKG5hbWUpIHsKICAgICAgICBjb250YWluZXJJbmZvLnB1c2gobmFtZSk7CgogICAgICAgIGlmIChwb3J0cykgewogICAgICAgICAgY29uc3QgcG9ydE1hdGNoZXMgPSBwb3J0cy5tYXRjaCgvLT4oXGQrKC1cZCspPylcLy9nKTsKICAgICAgICAgIGlmIChwb3J0TWF0Y2hlcykgewogICAgICAgICAgICBjb25zdCB1bmlxdWVQb3J0cyA9IFsKICAgICAgICAgICAgICAuLi5uZXcgU2V0KAogICAgICAgICAgICAgICAgcG9ydE1hdGNoZXMubWFwKChwKSA9PiBwLnJlcGxhY2UoLy0+XGQrKC1cZCspP1wvLywgIiIpKQogICAgICAgICAgICAgICksCiAgICAgICAgICAgIF07CiAgICAgICAgICAgIGNvbnRhaW5lckluZm8ucHVzaCguLi51bmlxdWVQb3J0cyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKCiAgICBjb25zdCByZXN1bHQgPSBjb250YWluZXJJbmZvLmpvaW4oIiAiKTsKICAgIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJjb250YWluZXJzIiwgcmVzdWx0KTsKICAgIHJldHVybiByZXN1bHQ7CiAgfSBjYXRjaCB7fQoKICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiY29udGFpbmVycyIsICIiKTsKICByZXR1cm4gIiI7Cn0K\"","export default \"data:video/mp2t;base64,LyoqCiAqIFN5c3RlbSBzdGF0dXMgYW5kIGhlYWx0aCBpbmZvcm1hdGlvbiBmdW5jdGlvbnMKICogQG1vZHVsZSBpbmZvL3N5c3RlbS1zdGF0dXMKICovCgppbXBvcnQgZnMgZnJvbSAiZnMiOwppbXBvcnQgb3MgZnJvbSAib3MiOwppbXBvcnQgdHlwZSB7IEluZm9Db250ZXh0IH0gZnJvbSAiLi4vdHlwZXMvaW50ZXJuYWwtdHlwZXMiOwppbXBvcnQgeyBJU19MSU5VWCB9IGZyb20gIi4uL3V0aWxzL3BsYXRmb3JtIjsKaW1wb3J0IHsgZXhlY0NvbW1hbmQsIGNvbW1hbmRFeGlzdHMgfSBmcm9tICIuLi91dGlscy9jb21tYW5kIjsKaW1wb3J0IHsgZ2V0Q2FjaGVkVmFsdWUsIHNldENhY2hlZFZhbHVlIH0gZnJvbSAiLi4vY2FjaGUvY2FjaGUiOwoKLyoqCiAqIEdldHMgc3lzdGVtIGxvYWQgYXZlcmFnZXMKICogUmVhZHMgMSwgNSwgYW5kIDE1IG1pbnV0ZSBsb2FkIGF2ZXJhZ2VzIGZyb20gL3Byb2MvbG9hZGF2ZyAoTGludXggb25seSkKICogQHJldHVybnMgU3BhY2Utc2VwYXJhdGVkIGxvYWQgYXZlcmFnZXMgKDFtIDVtIDE1bSkgb3IgZW1wdHkgc3RyaW5nCiAqIEBleGFtcGxlICIwLjUyIDAuNTggMC41OSIsICIyLjEwIDEuOTUgMS44OCIKICovCmV4cG9ydCBmdW5jdGlvbiBsb2FkX2F2ZXJhZ2UoY29udGV4dDogSW5mb0NvbnRleHQpOiBzdHJpbmcgewogIGlmICghSVNfTElOVVgpIHJldHVybiAiIjsKCiAgdHJ5IHsKICAgIGNvbnN0IGxvYWRhdmcgPSBmcy5yZWFkRmlsZVN5bmMoIi9wcm9jL2xvYWRhdmciLCAidXRmOCIpOwogICAgY29uc3QgbG9hZHMgPSBsb2FkYXZnLnNwbGl0KCIgIikuc2xpY2UoMCwgMyk7CiAgICByZXR1cm4gbG9hZHMuam9pbigiICIpOwogIH0gY2F0Y2gge30KICByZXR1cm4gIiI7Cn0KCi8qKgogKiBHZXRzIGJhdHRlcnkgY2hhcmdlIGxldmVsIGFuZCBjaGFyZ2luZyBzdGF0dXMKICogUmVhZHMgZnJvbSAvc3lzL2NsYXNzL3Bvd2VyX3N1cHBseS9CQVQwIChMaW51eCBsYXB0b3BzIG9ubHkpCiAqIEBwYXJhbSBjb250ZXh0IC0gSW5mbyBjb250ZXh0IHdpdGggY2FjaGUKICogQHJldHVybnMgQmF0dGVyeSBwZXJjZW50YWdlIHdpdGggb3B0aW9uYWwgKyBmb3IgY2hhcmdpbmcsIG9yIGVtcHR5IHN0cmluZwogKiBAZXhhbXBsZSAiODUlIiwgIjQyJSsiLCAiMTAwJSIKICovCmV4cG9ydCBmdW5jdGlvbiBiYXR0ZXJ5KGNvbnRleHQ6IEluZm9Db250ZXh0KTogc3RyaW5nIHsKICBjb25zdCBjYWNoZWQgPSBnZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiYmF0dGVyeSIpOwogIGlmIChjYWNoZWQgIT09IG51bGwpIHJldHVybiBjYWNoZWQ7CgogIGlmICghSVNfTElOVVgpIHsKICAgIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJiYXR0ZXJ5IiwgIiIpOwogICAgcmV0dXJuICIiOwogIH0KCiAgdHJ5IHsKICAgIGNvbnN0IGJhdHRlcnlQYXRoID0gIi9zeXMvY2xhc3MvcG93ZXJfc3VwcGx5L0JBVDAiOwogICAgY29uc3QgY2FwYWNpdHlQYXRoID0gYCR7YmF0dGVyeVBhdGh9L2NhcGFjaXR5YDsKICAgIGNvbnN0IHN0YXR1c1BhdGggPSBgJHtiYXR0ZXJ5UGF0aH0vc3RhdHVzYDsKCiAgICBpZiAoZnMuZXhpc3RzU3luYyhjYXBhY2l0eVBhdGgpKSB7CiAgICAgIGNvbnN0IGNhcGFjaXR5ID0gZnMucmVhZEZpbGVTeW5jKGNhcGFjaXR5UGF0aCwgInV0ZjgiKS50cmltKCk7CiAgICAgIGNvbnN0IHN0YXR1cyA9IGZzLmV4aXN0c1N5bmMoc3RhdHVzUGF0aCkKICAgICAgICA/IGZzLnJlYWRGaWxlU3luYyhzdGF0dXNQYXRoLCAidXRmOCIpLnRyaW0oKQogICAgICAgIDogIlVua25vd24iOwoKICAgICAgY29uc3QgYmF0dGVyeVBlcmNlbnQgPSBwYXJzZUludChjYXBhY2l0eSk7CiAgICAgIGNvbnN0IGlzQ2hhcmdpbmcgPSBzdGF0dXMgPT09ICJDaGFyZ2luZyI7CiAgICAgIGNvbnN0IHJlc3VsdCA9IGAke2JhdHRlcnlQZXJjZW50fSUke2lzQ2hhcmdpbmcgPyAiKyIgOiAiIn1gOwogICAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiYmF0dGVyeSIsIHJlc3VsdCk7CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgfSBjYXRjaCB7fQoKICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiYmF0dGVyeSIsICIiKTsKICByZXR1cm4gIiI7Cn0KCi8qKgogKiBHZXRzIHN5c3RlbSB0ZW1wZXJhdHVyZSBpbiBDZWxzaXVzCiAqIFJlYWRzIGZyb20gdGhlcm1hbCB6b25lIG9yIGh3bW9uIHNlbnNvcnMgKExpbnV4IG9ubHkpCiAqIEBwYXJhbSBjb250ZXh0IC0gSW5mbyBjb250ZXh0IHdpdGggY2FjaGUKICogQHJldHVybnMgVGVtcGVyYXR1cmUgd2l0aCDCsEMgc3VmZml4IG9yIGVtcHR5IHN0cmluZwogKiBAZXhhbXBsZSAiNDXCsEMiLCAiNjLCsEMiCiAqLwpleHBvcnQgZnVuY3Rpb24gdGVtcGVyYXR1cmUoY29udGV4dDogSW5mb0NvbnRleHQpOiBzdHJpbmcgewogIGNvbnN0IGNhY2hlZCA9IGdldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJ0ZW1wZXJhdHVyZSIpOwogIGlmIChjYWNoZWQgIT09IG51bGwpIHJldHVybiBjYWNoZWQ7CgogIGlmICghSVNfTElOVVgpIHsKICAgIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJ0ZW1wZXJhdHVyZSIsICIiKTsKICAgIHJldHVybiAiIjsKICB9CgogIHRyeSB7CiAgICBjb25zdCB0ZW1wU291cmNlcyA9IFsKICAgICAgIi9zeXMvY2xhc3MvdGhlcm1hbC90aGVybWFsX3pvbmUwL3RlbXAiLAogICAgICAiL3N5cy9jbGFzcy9od21vbi9od21vbjAvdGVtcDFfaW5wdXQiLAogICAgICAiL3N5cy9jbGFzcy9od21vbi9od21vbjEvdGVtcDFfaW5wdXQiLAogICAgXTsKCiAgICBmb3IgKGNvbnN0IHNvdXJjZSBvZiB0ZW1wU291cmNlcykgewogICAgICBpZiAoZnMuZXhpc3RzU3luYyhzb3VyY2UpKSB7CiAgICAgICAgY29uc3QgdGVtcCA9IGZzLnJlYWRGaWxlU3luYyhzb3VyY2UsICJ1dGY4IikudHJpbSgpOwogICAgICAgIGNvbnN0IHRlbXBDID0gTWF0aC5yb3VuZChwYXJzZUludCh0ZW1wKSAvIDEwMDApOwoKICAgICAgICBpZiAodGVtcEMgPiAwICYmIHRlbXBDIDwgMTUwKSB7CiAgICAgICAgICBjb25zdCByZXN1bHQgPSBgJHt0ZW1wQ33CsENgOwogICAgICAgICAgc2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgInRlbXBlcmF0dXJlIiwgcmVzdWx0KTsKICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfSBjYXRjaCB7fQoKICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAidGVtcGVyYXR1cmUiLCAiIik7CiAgcmV0dXJuICIiOwp9CgovKioKICogR2V0cyBjb3VudCBvZiBydW5uaW5nIHN5c3RlbSBzZXJ2aWNlcwogKiBVc2VzIHN5c3RlbWN0bCBvciBzZXJ2aWNlIGNvbW1hbmQgKExpbnV4IG9ubHkpCiAqIEBwYXJhbSBjb250ZXh0IC0gSW5mbyBjb250ZXh0IHdpdGggY2FjaGUKICogQHJldHVybnMgU2VydmljZSBjb3VudCB3aXRoICJzZXJ2aWNlcyIgc3VmZml4IG9yIGVtcHR5IHN0cmluZwogKiBAZXhhbXBsZSAiMTI1IHNlcnZpY2VzIiwgIjg5IHNlcnZpY2VzIgogKi8KZXhwb3J0IGZ1bmN0aW9uIHNlcnZpY2VzX3J1bm5pbmcoY29udGV4dDogSW5mb0NvbnRleHQpOiBzdHJpbmcgewogIGNvbnN0IGNhY2hlZCA9IGdldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJzZXJ2aWNlc19ydW5uaW5nIik7CiAgaWYgKGNhY2hlZCAhPT0gbnVsbCkgcmV0dXJuIGNhY2hlZDsKCiAgaWYgKCFJU19MSU5VWCkgewogICAgc2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgInNlcnZpY2VzX3J1bm5pbmciLCAiIik7CiAgICByZXR1cm4gIiI7CiAgfQoKICB0cnkgewogICAgbGV0IHNlcnZpY2VDb3VudCA9IDA7CgogICAgaWYgKGNvbW1hbmRFeGlzdHMoInN5c3RlbWN0bCIpKSB7CiAgICAgIGNvbnN0IHNlcnZpY2VzID0gZXhlY0NvbW1hbmQoCiAgICAgICAgInN5c3RlbWN0bCBsaXN0LXVuaXRzIC0tdHlwZT1zZXJ2aWNlIC0tc3RhdGU9cnVubmluZyAtLW5vLXBhZ2VyIgogICAgICApOwogICAgICBzZXJ2aWNlQ291bnQgPSBzZXJ2aWNlcwogICAgICAgIC5zcGxpdCgiXG4iKQogICAgICAgIC5maWx0ZXIoKGxpbmUpID0+IGxpbmUuaW5jbHVkZXMoIi5zZXJ2aWNlIikpLmxlbmd0aDsKICAgIH0gZWxzZSBpZiAoY29tbWFuZEV4aXN0cygic2VydmljZSIpKSB7CiAgICAgIGNvbnN0IHNlcnZpY2VzID0gZXhlY0NvbW1hbmQoInNlcnZpY2UgLS1zdGF0dXMtYWxsIik7CiAgICAgIHNlcnZpY2VDb3VudCA9IHNlcnZpY2VzCiAgICAgICAgLnNwbGl0KCJcbiIpCiAgICAgICAgLmZpbHRlcigobGluZSkgPT4gbGluZS5pbmNsdWRlcygiKyIpKS5sZW5ndGg7CiAgICB9CgogICAgaWYgKHNlcnZpY2VDb3VudCA+IDApIHsKICAgICAgY29uc3QgcmVzdWx0ID0gYCR7c2VydmljZUNvdW50fSBzZXJ2aWNlc2A7CiAgICAgIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJzZXJ2aWNlc19ydW5uaW5nIiwgcmVzdWx0KTsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICB9IGNhdGNoIHt9CgogIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJzZXJ2aWNlc19ydW5uaW5nIiwgIiIpOwogIHJldHVybiAiIjsKfQo=\"","/**\n * Fuse.js v7.5.0 - Lightweight fuzzy-search (http://fusejs.io)\n *\n * Copyright (c) 2026 Kiro Risk (http://kiro.me)\n * All Rights Reserved. Apache Software License 2.0\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n */\n//#region src/helpers/typeGuards.ts\nfunction isArray(value) {\n\treturn !Array.isArray ? getTag(value) === \"[object Array]\" : Array.isArray(value);\n}\nfunction baseToString(value) {\n\tif (typeof value == \"string\") return value;\n\tif (typeof value === \"bigint\") return value.toString();\n\tconst result = value + \"\";\n\treturn result == \"0\" && 1 / value == -Infinity ? \"-0\" : result;\n}\nfunction toString(value) {\n\treturn value == null ? \"\" : baseToString(value);\n}\nfunction isString(value) {\n\treturn typeof value === \"string\";\n}\nfunction isNumber(value) {\n\treturn typeof value === \"number\";\n}\nfunction isBoolean(value) {\n\treturn value === true || value === false || isObjectLike(value) && getTag(value) == \"[object Boolean]\";\n}\nfunction isObject(value) {\n\treturn typeof value === \"object\";\n}\nfunction isObjectLike(value) {\n\treturn isObject(value) && value !== null;\n}\nfunction isDefined(value) {\n\treturn value !== void 0 && value !== null;\n}\nfunction isBlank(value) {\n\treturn !value.trim().length;\n}\nfunction getTag(value) {\n\treturn value == null ? value === void 0 ? \"[object Undefined]\" : \"[object Null]\" : Object.prototype.toString.call(value);\n}\n\n//#endregion\n//#region src/core/errorMessages.ts\nconst INCORRECT_INDEX_TYPE = \"Incorrect 'index' type\";\nconst INVALID_DOC_INDEX = \"Invalid doc index: must be a non-negative integer within the bounds of the docs array\";\nconst LOGICAL_SEARCH_INVALID_QUERY_FOR_KEY = (key) => `Invalid value for key ${key}`;\nconst PATTERN_LENGTH_TOO_LARGE = (max) => `Pattern length exceeds max of ${max}.`;\nconst MISSING_KEY_PROPERTY = (name) => `Missing ${name} property in key`;\nconst INVALID_KEY_WEIGHT_VALUE = (key) => `Property 'weight' in key '${key}' must be a positive integer`;\nconst FUSE_MATCH_TOKEN_SEARCH_UNSUPPORTED = \"Fuse.match does not support useTokenSearch: token search requires corpus-level statistics (df, fieldCount) that a one-off string comparison does not have. Use new Fuse(...).search(...) instead.\";\n\n//#endregion\n//#region src/tools/KeyStore.ts\nconst hasOwn = Object.prototype.hasOwnProperty;\nvar KeyStore = class {\n\tconstructor(keys) {\n\t\tthis._keys = [];\n\t\tthis._keyMap = {};\n\t\tlet totalWeight = 0;\n\t\tkeys.forEach((key) => {\n\t\t\tconst obj = createKey(key);\n\t\t\tthis._keys.push(obj);\n\t\t\tthis._keyMap[obj.id] = obj;\n\t\t\ttotalWeight += obj.weight;\n\t\t});\n\t\tthis._keys.forEach((key) => {\n\t\t\tkey.weight /= totalWeight;\n\t\t});\n\t}\n\tget(keyId) {\n\t\treturn this._keyMap[keyId];\n\t}\n\tkeys() {\n\t\treturn this._keys;\n\t}\n\ttoJSON() {\n\t\treturn JSON.stringify(this._keys);\n\t}\n};\nfunction createKey(key) {\n\tlet path = null;\n\tlet id = null;\n\tlet src = null;\n\tlet weight = 1;\n\tlet getFn = null;\n\tif (isString(key) || isArray(key)) {\n\t\tsrc = key;\n\t\tpath = createKeyPath(key);\n\t\tid = createKeyId(key);\n\t} else {\n\t\tif (!hasOwn.call(key, \"name\")) throw new Error(MISSING_KEY_PROPERTY(\"name\"));\n\t\tconst name = key.name;\n\t\tsrc = name;\n\t\tif (hasOwn.call(key, \"weight\") && key.weight !== void 0) {\n\t\t\tweight = key.weight;\n\t\t\tif (weight <= 0) throw new Error(INVALID_KEY_WEIGHT_VALUE(createKeyId(name)));\n\t\t}\n\t\tpath = createKeyPath(name);\n\t\tid = createKeyId(name);\n\t\tgetFn = key.getFn ?? null;\n\t}\n\treturn {\n\t\tpath,\n\t\tid,\n\t\tweight,\n\t\tsrc,\n\t\tgetFn\n\t};\n}\nfunction createKeyPath(key) {\n\treturn isArray(key) ? key : key.split(\".\");\n}\nfunction createKeyId(key) {\n\treturn isArray(key) ? key.join(\".\") : key;\n}\n\n//#endregion\n//#region src/helpers/get.ts\nfunction get(obj, path) {\n\tconst list = [];\n\tlet arr = false;\n\tconst deepGet = (obj, path, index, arrayIndex) => {\n\t\tif (!isDefined(obj)) return;\n\t\tif (!path[index]) list.push(arrayIndex !== void 0 ? {\n\t\t\tv: obj,\n\t\t\ti: arrayIndex\n\t\t} : obj);\n\t\telse {\n\t\t\tconst value = obj[path[index]];\n\t\t\tif (!isDefined(value)) return;\n\t\t\tif (index === path.length - 1 && (isString(value) || isNumber(value) || isBoolean(value) || typeof value === \"bigint\")) list.push(arrayIndex !== void 0 ? {\n\t\t\t\tv: toString(value),\n\t\t\t\ti: arrayIndex\n\t\t\t} : toString(value));\n\t\t\telse if (isArray(value)) {\n\t\t\t\tarr = true;\n\t\t\t\tfor (let i = 0, len = value.length; i < len; i += 1) deepGet(value[i], path, index + 1, i);\n\t\t\t} else if (path.length) deepGet(value, path, index + 1, arrayIndex);\n\t\t}\n\t};\n\tdeepGet(obj, isString(path) ? path.split(\".\") : path, 0);\n\treturn arr ? list : list[0];\n}\n\n//#endregion\n//#region src/core/config.ts\nconst MatchOptions = {\n\tincludeMatches: false,\n\tfindAllMatches: false,\n\tminMatchCharLength: 1\n};\nconst BasicOptions = {\n\tisCaseSensitive: false,\n\tignoreDiacritics: false,\n\tincludeScore: false,\n\tkeys: [],\n\tshouldSort: true,\n\tsortFn: (a, b) => a.score === b.score ? a.idx < b.idx ? -1 : 1 : a.score < b.score ? -1 : 1\n};\nconst FuzzyOptions = {\n\tlocation: 0,\n\tthreshold: .6,\n\tdistance: 100\n};\nconst AdvancedOptions = {\n\tuseExtendedSearch: false,\n\tuseTokenSearch: false,\n\ttokenize: void 0,\n\ttokenMatch: \"any\",\n\tgetFn: get,\n\tignoreLocation: false,\n\tignoreFieldNorm: false,\n\tfieldNormWeight: 1\n};\nconst Config = Object.freeze({\n\t...BasicOptions,\n\t...MatchOptions,\n\t...FuzzyOptions,\n\t...AdvancedOptions\n});\n\n//#endregion\n//#region src/tools/fieldNorm.ts\nfunction isWordSeparator(code) {\n\treturn code >= 9 && code <= 13 || code === 32 || code === 160;\n}\nfunction norm(weight = 1, mantissa = 3) {\n\tconst cache = /* @__PURE__ */ new Map();\n\tconst m = Math.pow(10, mantissa);\n\treturn {\n\t\tget(value) {\n\t\t\tlet numTokens = 0;\n\t\t\tlet inWord = false;\n\t\t\tfor (let i = 0; i < value.length; i++) if (!isWordSeparator(value.charCodeAt(i))) {\n\t\t\t\tif (!inWord) {\n\t\t\t\t\tnumTokens++;\n\t\t\t\t\tinWord = true;\n\t\t\t\t}\n\t\t\t} else inWord = false;\n\t\t\tif (numTokens === 0) numTokens = 1;\n\t\t\tif (cache.has(numTokens)) return cache.get(numTokens);\n\t\t\tconst n = Math.round(m / Math.pow(numTokens, .5 * weight)) / m;\n\t\t\tcache.set(numTokens, n);\n\t\t\treturn n;\n\t\t},\n\t\tclear() {\n\t\t\tcache.clear();\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/tools/FuseIndex.ts\nvar FuseIndex = class {\n\tconstructor({ getFn = Config.getFn, fieldNormWeight = Config.fieldNormWeight } = {}) {\n\t\tthis.norm = norm(fieldNormWeight, 3);\n\t\tthis.getFn = getFn;\n\t\tthis.isCreated = false;\n\t\tthis.docs = [];\n\t\tthis.keys = [];\n\t\tthis._keysMap = {};\n\t\tthis.setIndexRecords();\n\t}\n\tsetSources(docs = []) {\n\t\tthis.docs = docs;\n\t}\n\tsetIndexRecords(records = []) {\n\t\tthis.records = records;\n\t}\n\tsetKeys(keys = []) {\n\t\tthis.keys = keys;\n\t\tthis._keysMap = {};\n\t\tkeys.forEach((key, idx) => {\n\t\t\tthis._keysMap[key.id] = idx;\n\t\t});\n\t}\n\tcreate() {\n\t\tif (this.isCreated || !this.docs.length) return;\n\t\tthis.isCreated = true;\n\t\tconst len = this.docs.length;\n\t\tthis.records = new Array(len);\n\t\tlet recordCount = 0;\n\t\tif (isString(this.docs[0])) for (let i = 0; i < len; i++) {\n\t\t\tconst record = this._createStringRecord(this.docs[i], i);\n\t\t\tif (record) this.records[recordCount++] = record;\n\t\t}\n\t\telse for (let i = 0; i < len; i++) this.records[recordCount++] = this._createObjectRecord(this.docs[i], i);\n\t\tthis.records.length = recordCount;\n\t\tthis.norm.clear();\n\t}\n\tadd(doc, docIndex) {\n\t\tif (!Number.isInteger(docIndex) || docIndex < 0) throw new Error(INVALID_DOC_INDEX);\n\t\tif (isString(doc)) {\n\t\t\tconst record = this._createStringRecord(doc, docIndex);\n\t\t\tif (record) this.records.push(record);\n\t\t\treturn record;\n\t\t}\n\t\tconst record = this._createObjectRecord(doc, docIndex);\n\t\tthis.records.push(record);\n\t\treturn record;\n\t}\n\tremoveAt(idx) {\n\t\tif (!Number.isInteger(idx) || idx < 0) throw new Error(INVALID_DOC_INDEX);\n\t\tfor (let i = 0, len = this.records.length; i < len; i += 1) if (this.records[i].i === idx) {\n\t\t\tthis.records.splice(i, 1);\n\t\t\tbreak;\n\t\t}\n\t\tfor (let i = 0, len = this.records.length; i < len; i += 1) if (this.records[i].i > idx) this.records[i].i -= 1;\n\t}\n\tremoveAll(indices) {\n\t\tconst toRemove = /* @__PURE__ */ new Set();\n\t\tfor (const v of indices) if (Number.isInteger(v) && v >= 0) toRemove.add(v);\n\t\tif (toRemove.size === 0) return;\n\t\tthis.records = this.records.filter((r) => !toRemove.has(r.i));\n\t\tconst sorted = Array.from(toRemove).sort((a, b) => a - b);\n\t\tfor (const record of this.records) {\n\t\t\tlet lo = 0;\n\t\t\tlet hi = sorted.length;\n\t\t\twhile (lo < hi) {\n\t\t\t\tconst mid = lo + hi >>> 1;\n\t\t\t\tif (sorted[mid] < record.i) lo = mid + 1;\n\t\t\t\telse hi = mid;\n\t\t\t}\n\t\t\trecord.i -= lo;\n\t\t}\n\t}\n\tgetValueForItemAtKeyId(item, keyId) {\n\t\treturn item[this._keysMap[keyId]];\n\t}\n\tsize() {\n\t\treturn this.records.length;\n\t}\n\t_createStringRecord(doc, docIndex) {\n\t\tif (!isDefined(doc) || isBlank(doc)) return null;\n\t\treturn {\n\t\t\tv: doc,\n\t\t\ti: docIndex,\n\t\t\tn: this.norm.get(doc)\n\t\t};\n\t}\n\t_createObjectRecord(doc, docIndex) {\n\t\tconst record = {\n\t\t\ti: docIndex,\n\t\t\t$: {}\n\t\t};\n\t\tfor (let keyIndex = 0, keyLen = this.keys.length; keyIndex < keyLen; keyIndex++) {\n\t\t\tconst key = this.keys[keyIndex];\n\t\t\tconst value = key.getFn ? key.getFn(doc) : this.getFn(doc, key.path);\n\t\t\tif (!isDefined(value)) continue;\n\t\t\tif (isArray(value)) {\n\t\t\t\tconst subRecords = [];\n\t\t\t\tfor (let i = 0, len = value.length; i < len; i += 1) {\n\t\t\t\t\tconst item = value[i];\n\t\t\t\t\tif (!isDefined(item)) continue;\n\t\t\t\t\tif (isString(item)) {\n\t\t\t\t\t\tif (!isBlank(item)) {\n\t\t\t\t\t\t\tconst subRecord = {\n\t\t\t\t\t\t\t\tv: item,\n\t\t\t\t\t\t\t\ti,\n\t\t\t\t\t\t\t\tn: this.norm.get(item)\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tsubRecords.push(subRecord);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (isDefined(item.v)) {\n\t\t\t\t\t\tconst text = isString(item.v) ? item.v : toString(item.v);\n\t\t\t\t\t\tif (!isBlank(text)) {\n\t\t\t\t\t\t\tconst subRecord = {\n\t\t\t\t\t\t\t\tv: text,\n\t\t\t\t\t\t\t\ti: item.i,\n\t\t\t\t\t\t\t\tn: this.norm.get(text)\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tsubRecords.push(subRecord);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\trecord.$[keyIndex] = subRecords;\n\t\t\t} else if (isString(value) && !isBlank(value)) {\n\t\t\t\tconst subRecord = {\n\t\t\t\t\tv: value,\n\t\t\t\t\tn: this.norm.get(value)\n\t\t\t\t};\n\t\t\t\trecord.$[keyIndex] = subRecord;\n\t\t\t}\n\t\t}\n\t\treturn record;\n\t}\n\ttoJSON() {\n\t\treturn {\n\t\t\tkeys: this.keys.map(({ getFn, ...key }) => key),\n\t\t\trecords: this.records\n\t\t};\n\t}\n};\nfunction createIndex(keys, docs, { getFn = Config.getFn, fieldNormWeight = Config.fieldNormWeight } = {}) {\n\tconst myIndex = new FuseIndex({\n\t\tgetFn,\n\t\tfieldNormWeight\n\t});\n\tmyIndex.setKeys(keys.map(createKey));\n\tmyIndex.setSources(docs);\n\tmyIndex.create();\n\treturn myIndex;\n}\nfunction parseIndex(data, { getFn = Config.getFn, fieldNormWeight = Config.fieldNormWeight } = {}) {\n\tconst { keys, records } = data;\n\tconst myIndex = new FuseIndex({\n\t\tgetFn,\n\t\tfieldNormWeight\n\t});\n\tmyIndex.setKeys(keys);\n\tmyIndex.setIndexRecords(records);\n\treturn myIndex;\n}\n\n//#endregion\n//#region src/search/bitap/convertMaskToIndices.ts\nfunction convertMaskToIndices(matchmask = [], minMatchCharLength = Config.minMatchCharLength) {\n\tconst indices = [];\n\tlet start = -1;\n\tlet end = -1;\n\tlet i = 0;\n\tfor (let len = matchmask.length; i < len; i += 1) {\n\t\tconst match = matchmask[i];\n\t\tif (match && start === -1) start = i;\n\t\telse if (!match && start !== -1) {\n\t\t\tend = i - 1;\n\t\t\tif (end - start + 1 >= minMatchCharLength) indices.push([start, end]);\n\t\t\tstart = -1;\n\t\t}\n\t}\n\tif (matchmask[i - 1] && i - start >= minMatchCharLength) indices.push([start, i - 1]);\n\treturn indices;\n}\n\n//#endregion\n//#region src/search/bitap/search.ts\nfunction search(text, pattern, patternAlphabet, { location = Config.location, distance = Config.distance, threshold = Config.threshold, findAllMatches = Config.findAllMatches, minMatchCharLength = Config.minMatchCharLength, includeMatches = Config.includeMatches, ignoreLocation = Config.ignoreLocation } = {}) {\n\tif (pattern.length > 32) throw new Error(PATTERN_LENGTH_TOO_LARGE(32));\n\tconst patternLen = pattern.length;\n\tconst textLen = text.length;\n\tconst expectedLocation = Math.max(0, Math.min(location, textLen));\n\tlet currentThreshold = threshold;\n\tlet bestLocation = expectedLocation;\n\tconst calcScore = (errors, currentLocation) => {\n\t\tconst accuracy = errors / patternLen;\n\t\tif (ignoreLocation) return accuracy;\n\t\tconst proximity = Math.abs(expectedLocation - currentLocation);\n\t\tif (!distance) return proximity ? 1 : accuracy;\n\t\treturn accuracy + proximity / distance;\n\t};\n\tconst computeMatches = minMatchCharLength > 1 || includeMatches;\n\tconst matchMask = computeMatches ? Array(textLen) : [];\n\tlet index;\n\twhile ((index = text.indexOf(pattern, bestLocation)) > -1) {\n\t\tconst score = calcScore(0, index);\n\t\tcurrentThreshold = Math.min(score, currentThreshold);\n\t\tbestLocation = index + patternLen;\n\t\tif (computeMatches) {\n\t\t\tlet i = 0;\n\t\t\twhile (i < patternLen) {\n\t\t\t\tmatchMask[index + i] = 1;\n\t\t\t\ti += 1;\n\t\t\t}\n\t\t}\n\t}\n\tbestLocation = -1;\n\tlet lastBitArr = [];\n\tlet finalScore = 1;\n\tlet bestErrors = 0;\n\tlet binMax = patternLen + textLen;\n\tconst mask = 1 << patternLen - 1;\n\tfor (let i = 0; i < patternLen; i += 1) {\n\t\tlet binMin = 0;\n\t\tlet binMid = binMax;\n\t\twhile (binMin < binMid) {\n\t\t\tif (calcScore(i, expectedLocation + binMid) <= currentThreshold) binMin = binMid;\n\t\t\telse binMax = binMid;\n\t\t\tbinMid = Math.floor((binMax - binMin) / 2 + binMin);\n\t\t}\n\t\tbinMax = binMid;\n\t\tlet start = Math.max(1, expectedLocation - binMid + 1);\n\t\tconst finish = findAllMatches ? textLen : Math.min(expectedLocation + binMid, textLen) + patternLen;\n\t\tconst bitArr = Array(finish + 2);\n\t\tbitArr[finish + 1] = (1 << i) - 1;\n\t\tfor (let j = finish; j >= start; j -= 1) {\n\t\t\tconst currentLocation = j - 1;\n\t\t\tconst charMatch = patternAlphabet[text[currentLocation]];\n\t\t\tbitArr[j] = (bitArr[j + 1] << 1 | 1) & charMatch;\n\t\t\tif (i) bitArr[j] |= (lastBitArr[j + 1] | lastBitArr[j]) << 1 | 1 | lastBitArr[j + 1];\n\t\t\tif (bitArr[j] & mask) {\n\t\t\t\tfinalScore = calcScore(i, currentLocation);\n\t\t\t\tif (finalScore <= currentThreshold) {\n\t\t\t\t\tcurrentThreshold = finalScore;\n\t\t\t\t\tbestLocation = currentLocation;\n\t\t\t\t\tbestErrors = i;\n\t\t\t\t\tif (bestLocation <= expectedLocation) break;\n\t\t\t\t\tstart = Math.max(1, 2 * expectedLocation - bestLocation);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (calcScore(i + 1, expectedLocation) > currentThreshold) break;\n\t\tlastBitArr = bitArr;\n\t}\n\tif (computeMatches && bestLocation >= 0) {\n\t\tconst matchEnd = Math.min(textLen - 1, bestLocation + patternLen - 1 + bestErrors);\n\t\tfor (let k = bestLocation; k <= matchEnd; k += 1) if (patternAlphabet[text[k]]) matchMask[k] = 1;\n\t}\n\tconst result = {\n\t\tisMatch: bestLocation >= 0,\n\t\tscore: Math.max(.001, finalScore)\n\t};\n\tif (computeMatches) {\n\t\tconst indices = convertMaskToIndices(matchMask, minMatchCharLength);\n\t\tif (!indices.length) result.isMatch = false;\n\t\telse if (includeMatches) result.indices = indices;\n\t}\n\treturn result;\n}\n\n//#endregion\n//#region src/search/bitap/createPatternAlphabet.ts\nfunction createPatternAlphabet(pattern) {\n\tconst mask = {};\n\tfor (let i = 0, len = pattern.length; i < len; i += 1) {\n\t\tconst char = pattern.charAt(i);\n\t\tmask[char] = (mask[char] || 0) | 1 << len - i - 1;\n\t}\n\treturn mask;\n}\n\n//#endregion\n//#region src/helpers/mergeIndices.ts\nfunction mergeIndices(indices) {\n\tif (indices.length <= 1) return indices;\n\tindices.sort((a, b) => a[0] - b[0] || a[1] - b[1]);\n\tconst merged = [indices[0]];\n\tfor (let i = 1, len = indices.length; i < len; i += 1) {\n\t\tconst last = merged[merged.length - 1];\n\t\tconst curr = indices[i];\n\t\tif (curr[0] <= last[1] + 1) last[1] = Math.max(last[1], curr[1]);\n\t\telse merged.push(curr);\n\t}\n\treturn merged;\n}\n\n//#endregion\n//#region src/helpers/diacritics.ts\nconst NON_DECOMPOSABLE_MAP = {\n\t\"ł\": \"l\",\n\t\"Ł\": \"L\",\n\t\"đ\": \"d\",\n\t\"Đ\": \"D\",\n\t\"ø\": \"o\",\n\t\"Ø\": \"O\",\n\t\"ħ\": \"h\",\n\t\"Ħ\": \"H\",\n\t\"ŧ\": \"t\",\n\t\"Ŧ\": \"T\",\n\t\"ı\": \"i\",\n\t\"ß\": \"ss\"\n};\nconst NON_DECOMPOSABLE_RE = new RegExp(\"[\" + Object.keys(NON_DECOMPOSABLE_MAP).join(\"\") + \"]\", \"g\");\nconst stripDiacritics = typeof String.prototype.normalize === \"function\" ? (str) => str.normalize(\"NFD\").replace(/[\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0610-\\u061A\\u064B-\\u065F\\u0670\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u08D3-\\u08E1\\u08E3-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D82\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EB9\\u0EBB\\u0EBC\\u0EC8-\\u0ECD\\u0F18\\u0F19\\u0F35\\u0F37\\u0F39\\u0F3E\\u0F3F\\u0F71-\\u0F84\\u0F86\\u0F87\\u0F8D-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u102B-\\u103E\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F\\u109A-\\u109D\\u135D-\\u135F\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180D\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ABE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF2-\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DF9\\u1DFB-\\u1DFF\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\uA926-\\uA92D\\uA947-\\uA953\\uA980-\\uA983\\uA9B3-\\uA9C0\\uA9E5\\uAA29-\\uAA36\\uAA43\\uAA4C\\uAA4D\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAEB-\\uAAEF\\uAAF5\\uAAF6\\uABE3-\\uABEA\\uABEC\\uABED\\uFB1E\\uFE00-\\uFE0F\\uFE20-\\uFE2F]/g, \"\").replace(NON_DECOMPOSABLE_RE, (ch) => NON_DECOMPOSABLE_MAP[ch]) : (str) => str;\n\n//#endregion\n//#region src/search/bitap/index.ts\nvar BitapSearch = class {\n\tconstructor(pattern, { location = Config.location, threshold = Config.threshold, distance = Config.distance, includeMatches = Config.includeMatches, findAllMatches = Config.findAllMatches, minMatchCharLength = Config.minMatchCharLength, isCaseSensitive = Config.isCaseSensitive, ignoreDiacritics = Config.ignoreDiacritics, ignoreLocation = Config.ignoreLocation } = {}) {\n\t\tthis.options = {\n\t\t\tlocation,\n\t\t\tthreshold,\n\t\t\tdistance,\n\t\t\tincludeMatches,\n\t\t\tfindAllMatches,\n\t\t\tminMatchCharLength,\n\t\t\tisCaseSensitive,\n\t\t\tignoreDiacritics,\n\t\t\tignoreLocation\n\t\t};\n\t\tpattern = isCaseSensitive ? pattern : pattern.toLowerCase();\n\t\tpattern = ignoreDiacritics ? stripDiacritics(pattern) : pattern;\n\t\tthis.pattern = pattern;\n\t\tthis.chunks = [];\n\t\tif (!this.pattern.length) return;\n\t\tconst addChunk = (pattern, startIndex) => {\n\t\t\tthis.chunks.push({\n\t\t\t\tpattern,\n\t\t\t\talphabet: createPatternAlphabet(pattern),\n\t\t\t\tstartIndex\n\t\t\t});\n\t\t};\n\t\tconst len = this.pattern.length;\n\t\tif (len > 32) {\n\t\t\tlet i = 0;\n\t\t\tconst remainder = len % 32;\n\t\t\tconst end = len - remainder;\n\t\t\twhile (i < end) {\n\t\t\t\taddChunk(this.pattern.substr(i, 32), i);\n\t\t\t\ti += 32;\n\t\t\t}\n\t\t\tif (remainder) {\n\t\t\t\tconst startIndex = len - 32;\n\t\t\t\taddChunk(this.pattern.substr(startIndex), startIndex);\n\t\t\t}\n\t\t} else addChunk(this.pattern, 0);\n\t}\n\tsearchIn(text) {\n\t\tconst { isCaseSensitive, ignoreDiacritics, includeMatches } = this.options;\n\t\ttext = isCaseSensitive ? text : text.toLowerCase();\n\t\ttext = ignoreDiacritics ? stripDiacritics(text) : text;\n\t\tif (this.pattern === text) {\n\t\t\tif (text.length < this.options.minMatchCharLength) return {\n\t\t\t\tisMatch: false,\n\t\t\t\tscore: 1\n\t\t\t};\n\t\t\tconst result = {\n\t\t\t\tisMatch: true,\n\t\t\t\tscore: 0\n\t\t\t};\n\t\t\tif (includeMatches) result.indices = [[0, text.length - 1]];\n\t\t\treturn result;\n\t\t}\n\t\tconst { location, distance, threshold, findAllMatches, minMatchCharLength, ignoreLocation } = this.options;\n\t\tconst allIndices = [];\n\t\tlet totalScore = 0;\n\t\tlet hasMatches = false;\n\t\tthis.chunks.forEach(({ pattern, alphabet, startIndex }) => {\n\t\t\tconst { isMatch, score, indices } = search(text, pattern, alphabet, {\n\t\t\t\tlocation: location + startIndex,\n\t\t\t\tdistance,\n\t\t\t\tthreshold,\n\t\t\t\tfindAllMatches,\n\t\t\t\tminMatchCharLength,\n\t\t\t\tincludeMatches,\n\t\t\t\tignoreLocation\n\t\t\t});\n\t\t\tif (isMatch) hasMatches = true;\n\t\t\ttotalScore += score;\n\t\t\tif (isMatch && indices) allIndices.push(...indices);\n\t\t});\n\t\tconst result = {\n\t\t\tisMatch: hasMatches,\n\t\t\tscore: hasMatches ? totalScore / this.chunks.length : 1\n\t\t};\n\t\tif (hasMatches && includeMatches) result.indices = mergeIndices(allIndices);\n\t\treturn result;\n\t}\n};\n\n//#endregion\n//#region src/search/extended/matchers.ts\nconst MULTI_MATCH_TYPES = new Set([\"fuzzy\", \"include\"]);\nfunction isInverse(type) {\n\treturn type.startsWith(\"inverse\");\n}\nconst matchers = [\n\t{\n\t\ttype: \"exact\",\n\t\tmultiRegex: /^=\"(.*)\"$/,\n\t\tsingleRegex: /^=(.*)$/,\n\t\tcreate: (pattern) => ({\n\t\t\ttype: \"exact\",\n\t\t\tsearch(text) {\n\t\t\t\tconst isMatch = text === pattern;\n\t\t\t\treturn {\n\t\t\t\t\tisMatch,\n\t\t\t\t\tscore: isMatch ? 0 : 1,\n\t\t\t\t\tindices: [0, pattern.length - 1]\n\t\t\t\t};\n\t\t\t}\n\t\t})\n\t},\n\t{\n\t\ttype: \"include\",\n\t\tmultiRegex: /^'\"(.*)\"$/,\n\t\tsingleRegex: /^'(.*)$/,\n\t\tcreate: (pattern) => ({\n\t\t\ttype: \"include\",\n\t\t\tsearch(text) {\n\t\t\t\tlet location = 0;\n\t\t\t\tlet index;\n\t\t\t\tconst indices = [];\n\t\t\t\tconst patternLen = pattern.length;\n\t\t\t\twhile ((index = text.indexOf(pattern, location)) > -1) {\n\t\t\t\t\tlocation = index + patternLen;\n\t\t\t\t\tindices.push([index, location - 1]);\n\t\t\t\t}\n\t\t\t\tconst isMatch = !!indices.length;\n\t\t\t\treturn {\n\t\t\t\t\tisMatch,\n\t\t\t\t\tscore: isMatch ? 0 : 1,\n\t\t\t\t\tindices\n\t\t\t\t};\n\t\t\t}\n\t\t})\n\t},\n\t{\n\t\ttype: \"prefix-exact\",\n\t\tmultiRegex: /^\\^\"(.*)\"$/,\n\t\tsingleRegex: /^\\^(.*)$/,\n\t\tcreate: (pattern) => ({\n\t\t\ttype: \"prefix-exact\",\n\t\t\tsearch(text) {\n\t\t\t\tconst isMatch = text.startsWith(pattern);\n\t\t\t\treturn {\n\t\t\t\t\tisMatch,\n\t\t\t\t\tscore: isMatch ? 0 : 1,\n\t\t\t\t\tindices: [0, pattern.length - 1]\n\t\t\t\t};\n\t\t\t}\n\t\t})\n\t},\n\t{\n\t\ttype: \"inverse-prefix-exact\",\n\t\tmultiRegex: /^!\\^\"(.*)\"$/,\n\t\tsingleRegex: /^!\\^(.*)$/,\n\t\tcreate: (pattern) => ({\n\t\t\ttype: \"inverse-prefix-exact\",\n\t\t\tsearch(text) {\n\t\t\t\tconst isMatch = !text.startsWith(pattern);\n\t\t\t\treturn {\n\t\t\t\t\tisMatch,\n\t\t\t\t\tscore: isMatch ? 0 : 1,\n\t\t\t\t\tindices: [0, text.length - 1]\n\t\t\t\t};\n\t\t\t}\n\t\t})\n\t},\n\t{\n\t\ttype: \"inverse-suffix-exact\",\n\t\tmultiRegex: /^!\"(.*)\"\\$$/,\n\t\tsingleRegex: /^!(.*)\\$$/,\n\t\tcreate: (pattern) => ({\n\t\t\ttype: \"inverse-suffix-exact\",\n\t\t\tsearch(text) {\n\t\t\t\tconst isMatch = !text.endsWith(pattern);\n\t\t\t\treturn {\n\t\t\t\t\tisMatch,\n\t\t\t\t\tscore: isMatch ? 0 : 1,\n\t\t\t\t\tindices: [0, text.length - 1]\n\t\t\t\t};\n\t\t\t}\n\t\t})\n\t},\n\t{\n\t\ttype: \"suffix-exact\",\n\t\tmultiRegex: /^\"(.*)\"\\$$/,\n\t\tsingleRegex: /^(.*)\\$$/,\n\t\tcreate: (pattern) => ({\n\t\t\ttype: \"suffix-exact\",\n\t\t\tsearch(text) {\n\t\t\t\tconst isMatch = text.endsWith(pattern);\n\t\t\t\treturn {\n\t\t\t\t\tisMatch,\n\t\t\t\t\tscore: isMatch ? 0 : 1,\n\t\t\t\t\tindices: [text.length - pattern.length, text.length - 1]\n\t\t\t\t};\n\t\t\t}\n\t\t})\n\t},\n\t{\n\t\ttype: \"inverse-exact\",\n\t\tmultiRegex: /^!\"(.*)\"$/,\n\t\tsingleRegex: /^!(.*)$/,\n\t\tcreate: (pattern) => ({\n\t\t\ttype: \"inverse-exact\",\n\t\t\tsearch(text) {\n\t\t\t\tconst isMatch = text.indexOf(pattern) === -1;\n\t\t\t\treturn {\n\t\t\t\t\tisMatch,\n\t\t\t\t\tscore: isMatch ? 0 : 1,\n\t\t\t\t\tindices: [0, text.length - 1]\n\t\t\t\t};\n\t\t\t}\n\t\t})\n\t},\n\t{\n\t\ttype: \"fuzzy\",\n\t\tmultiRegex: /^\"(.*)\"$/,\n\t\tsingleRegex: /^(.*)$/,\n\t\tcreate: (pattern, options = {}) => {\n\t\t\tconst bitap = new BitapSearch(pattern, {\n\t\t\t\tlocation: options.location ?? Config.location,\n\t\t\t\tthreshold: options.threshold ?? Config.threshold,\n\t\t\t\tdistance: options.distance ?? Config.distance,\n\t\t\t\tincludeMatches: options.includeMatches ?? Config.includeMatches,\n\t\t\t\tfindAllMatches: options.findAllMatches ?? Config.findAllMatches,\n\t\t\t\tminMatchCharLength: options.minMatchCharLength ?? Config.minMatchCharLength,\n\t\t\t\tisCaseSensitive: options.isCaseSensitive ?? Config.isCaseSensitive,\n\t\t\t\tignoreDiacritics: options.ignoreDiacritics ?? Config.ignoreDiacritics,\n\t\t\t\tignoreLocation: options.ignoreLocation ?? Config.ignoreLocation\n\t\t\t});\n\t\t\treturn {\n\t\t\t\ttype: \"fuzzy\",\n\t\t\t\tsearch(text) {\n\t\t\t\t\treturn bitap.searchIn(text);\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t}\n];\n\n//#endregion\n//#region src/search/extended/parseQuery.ts\nconst matchersLen = matchers.length;\nconst ESCAPED_PIPE = \"\\0\";\nconst OR_TOKEN = \"|\";\nfunction tokenize(pattern) {\n\tconst tokens = [];\n\tconst len = pattern.length;\n\tlet i = 0;\n\twhile (i < len) {\n\t\twhile (i < len && pattern[i] === \" \") i++;\n\t\tif (i >= len) break;\n\t\tlet j = i;\n\t\twhile (j < len && pattern[j] !== \" \" && pattern[j] !== \"\\\"\") j++;\n\t\tif (j < len && pattern[j] === \"\\\"\") {\n\t\t\tj++;\n\t\t\twhile (j < len) {\n\t\t\t\tif (pattern[j] === \"\\\"\") {\n\t\t\t\t\tconst next = j + 1;\n\t\t\t\t\tif (next >= len || pattern[next] === \" \") {\n\t\t\t\t\t\tj++;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif (pattern[next] === \"$\" && (next + 1 >= len || pattern[next + 1] === \" \")) {\n\t\t\t\t\t\tj += 2;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tj++;\n\t\t\t}\n\t\t\ttokens.push(pattern.substring(i, j));\n\t\t\ti = j;\n\t\t} else {\n\t\t\twhile (j < len && pattern[j] !== \" \") j++;\n\t\t\ttokens.push(pattern.substring(i, j));\n\t\t\ti = j;\n\t\t}\n\t}\n\treturn tokens;\n}\nfunction getMatch(pattern, exp) {\n\tconst matches = pattern.match(exp);\n\treturn matches ? matches[1] : null;\n}\nfunction parseQuery(pattern, options = {}) {\n\treturn pattern.replace(/\\\\\\|/g, ESCAPED_PIPE).split(OR_TOKEN).map((item) => {\n\t\tconst query = tokenize(item.replace(/\\u0000/g, \"|\").trim()).filter((item) => item && !!item.trim());\n\t\tconst results = [];\n\t\tfor (let i = 0, len = query.length; i < len; i += 1) {\n\t\t\tconst queryItem = query[i];\n\t\t\tlet found = false;\n\t\t\tlet idx = -1;\n\t\t\twhile (!found && ++idx < matchersLen) {\n\t\t\t\tconst def = matchers[idx];\n\t\t\t\tconst token = getMatch(queryItem, def.multiRegex);\n\t\t\t\tif (token) {\n\t\t\t\t\tresults.push(def.create(token, options));\n\t\t\t\t\tfound = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (found) continue;\n\t\t\tidx = -1;\n\t\t\twhile (++idx < matchersLen) {\n\t\t\t\tconst def = matchers[idx];\n\t\t\t\tconst token = getMatch(queryItem, def.singleRegex);\n\t\t\t\tif (token) {\n\t\t\t\t\tresults.push(def.create(token, options));\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn results;\n\t});\n}\n\n//#endregion\n//#region src/search/extended/index.ts\nvar ExtendedSearch = class {\n\tconstructor(pattern, { isCaseSensitive = Config.isCaseSensitive, ignoreDiacritics = Config.ignoreDiacritics, includeMatches = Config.includeMatches, minMatchCharLength = Config.minMatchCharLength, ignoreLocation = Config.ignoreLocation, findAllMatches = Config.findAllMatches, location = Config.location, threshold = Config.threshold, distance = Config.distance } = {}) {\n\t\tthis.query = null;\n\t\tthis.options = {\n\t\t\tisCaseSensitive,\n\t\t\tignoreDiacritics,\n\t\t\tincludeMatches,\n\t\t\tminMatchCharLength,\n\t\t\tfindAllMatches,\n\t\t\tignoreLocation,\n\t\t\tlocation,\n\t\t\tthreshold,\n\t\t\tdistance\n\t\t};\n\t\tpattern = isCaseSensitive ? pattern : pattern.toLowerCase();\n\t\tpattern = ignoreDiacritics ? stripDiacritics(pattern) : pattern;\n\t\tthis.pattern = pattern;\n\t\tthis.query = parseQuery(this.pattern, this.options);\n\t}\n\tstatic condition(_, options) {\n\t\treturn options.useExtendedSearch;\n\t}\n\tsearchIn(text) {\n\t\tconst query = this.query;\n\t\tif (!query) return {\n\t\t\tisMatch: false,\n\t\t\tscore: 1\n\t\t};\n\t\tconst { includeMatches, isCaseSensitive, ignoreDiacritics } = this.options;\n\t\ttext = isCaseSensitive ? text : text.toLowerCase();\n\t\ttext = ignoreDiacritics ? stripDiacritics(text) : text;\n\t\tlet numMatches = 0;\n\t\tconst allIndices = [];\n\t\tlet totalScore = 0;\n\t\tlet hasInverse = false;\n\t\tfor (let i = 0, qLen = query.length; i < qLen; i += 1) {\n\t\t\tconst searchers = query[i];\n\t\t\tallIndices.length = 0;\n\t\t\tnumMatches = 0;\n\t\t\thasInverse = false;\n\t\t\tfor (let j = 0, pLen = searchers.length; j < pLen; j += 1) {\n\t\t\t\tconst matcher = searchers[j];\n\t\t\t\tconst { isMatch, indices, score } = matcher.search(text);\n\t\t\t\tif (isMatch) {\n\t\t\t\t\tnumMatches += 1;\n\t\t\t\t\ttotalScore += score;\n\t\t\t\t\tif (isInverse(matcher.type)) hasInverse = true;\n\t\t\t\t\tif (includeMatches) if (MULTI_MATCH_TYPES.has(matcher.type)) allIndices.push(...indices);\n\t\t\t\t\telse allIndices.push(indices);\n\t\t\t\t} else {\n\t\t\t\t\ttotalScore = 0;\n\t\t\t\t\tnumMatches = 0;\n\t\t\t\t\tallIndices.length = 0;\n\t\t\t\t\thasInverse = false;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (numMatches) {\n\t\t\t\tconst result = {\n\t\t\t\t\tisMatch: true,\n\t\t\t\t\tscore: totalScore / numMatches\n\t\t\t\t};\n\t\t\t\tif (hasInverse) result.hasInverse = true;\n\t\t\t\tif (includeMatches) result.indices = mergeIndices(allIndices);\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\tisMatch: false,\n\t\t\tscore: 1\n\t\t};\n\t}\n};\n\n//#endregion\n//#region src/core/register.ts\nconst registeredSearchers = [];\nfunction register(...args) {\n\tregisteredSearchers.push(...args);\n}\nfunction createSearcher(pattern, options) {\n\tfor (let i = 0, len = registeredSearchers.length; i < len; i += 1) {\n\t\tconst searcherClass = registeredSearchers[i];\n\t\tif (searcherClass.condition(pattern, options)) return new searcherClass(pattern, options);\n\t}\n\treturn new BitapSearch(pattern, options);\n}\n\n//#endregion\n//#region src/core/queryParser.ts\nconst LogicalOperator = {\n\tAND: \"$and\",\n\tOR: \"$or\"\n};\nconst KeyType = {\n\tPATH: \"$path\",\n\tPATTERN: \"$val\"\n};\nconst isExpression = (query) => !!(query[LogicalOperator.AND] || query[LogicalOperator.OR]);\nconst isPath = (query) => !!query[KeyType.PATH];\nconst isLeaf = (query) => !isArray(query) && isObject(query) && !isExpression(query);\nconst convertToExplicit = (query) => ({ [LogicalOperator.AND]: Object.keys(query).map((key) => ({ [key]: query[key] })) });\nfunction parse(query, options, { auto = true } = {}) {\n\tconst next = (query) => {\n\t\tif (isString(query)) {\n\t\t\tconst obj = {\n\t\t\t\tkeyId: null,\n\t\t\t\tpattern: query\n\t\t\t};\n\t\t\tif (auto) obj.searcher = createSearcher(query, options);\n\t\t\treturn obj;\n\t\t}\n\t\tconst keys = Object.keys(query);\n\t\tconst isQueryPath = isPath(query);\n\t\tif (!isQueryPath && keys.length > 1 && !isExpression(query)) return next(convertToExplicit(query));\n\t\tif (isLeaf(query)) {\n\t\t\tconst key = isQueryPath ? query[KeyType.PATH] : keys[0];\n\t\t\tconst pattern = isQueryPath ? query[KeyType.PATTERN] : query[key];\n\t\t\tif (!isString(pattern)) throw new Error(LOGICAL_SEARCH_INVALID_QUERY_FOR_KEY(key));\n\t\t\tconst obj = {\n\t\t\t\tkeyId: createKeyId(key),\n\t\t\t\tpattern\n\t\t\t};\n\t\t\tif (auto) obj.searcher = createSearcher(pattern, options);\n\t\t\treturn obj;\n\t\t}\n\t\tconst node = {\n\t\t\tchildren: [],\n\t\t\toperator: keys[0]\n\t\t};\n\t\tkeys.forEach((key) => {\n\t\t\tconst value = query[key];\n\t\t\tif (isArray(value)) value.forEach((item) => {\n\t\t\t\tnode.children.push(next(item));\n\t\t\t});\n\t\t});\n\t\treturn node;\n\t};\n\tif (!isExpression(query)) query = convertToExplicit(query);\n\treturn next(query);\n}\n\n//#endregion\n//#region src/core/computeScore.ts\nfunction computeScoreSingle(matches, { ignoreFieldNorm = Config.ignoreFieldNorm }) {\n\tlet totalScore = 1;\n\tmatches.forEach(({ key, norm, score }) => {\n\t\tconst weight = key ? key.weight : null;\n\t\ttotalScore *= Math.pow(score === 0 && weight ? Number.EPSILON : score, (weight || 1) * (ignoreFieldNorm ? 1 : norm));\n\t});\n\treturn totalScore;\n}\nfunction computeScore(results, { ignoreFieldNorm = Config.ignoreFieldNorm }) {\n\tresults.forEach((result) => {\n\t\tresult.score = computeScoreSingle(result.matches, { ignoreFieldNorm });\n\t});\n}\n\n//#endregion\n//#region src/tools/MaxHeap.ts\nvar MaxHeap = class {\n\tconstructor(limit, comparator) {\n\t\tthis.limit = limit;\n\t\tthis.heap = [];\n\t\tthis.comparator = comparator;\n\t}\n\tget size() {\n\t\treturn this.heap.length;\n\t}\n\tinsert(item) {\n\t\tif (this.size < this.limit) {\n\t\t\tthis.heap.push(item);\n\t\t\tthis._bubbleUp(this.size - 1);\n\t\t} else if (this.comparator(item, this.heap[0]) < 0) {\n\t\t\tthis.heap[0] = item;\n\t\t\tthis._sinkDown(0);\n\t\t}\n\t}\n\textractSorted() {\n\t\treturn this.heap.sort(this.comparator);\n\t}\n\t_bubbleUp(i) {\n\t\tconst heap = this.heap;\n\t\twhile (i > 0) {\n\t\t\tconst parent = i - 1 >> 1;\n\t\t\tif (this.comparator(heap[i], heap[parent]) <= 0) break;\n\t\t\tconst tmp = heap[i];\n\t\t\theap[i] = heap[parent];\n\t\t\theap[parent] = tmp;\n\t\t\ti = parent;\n\t\t}\n\t}\n\t_sinkDown(i) {\n\t\tconst heap = this.heap;\n\t\tconst len = heap.length;\n\t\tlet largest = i;\n\t\tdo {\n\t\t\ti = largest;\n\t\t\tconst left = 2 * i + 1;\n\t\t\tconst right = 2 * i + 2;\n\t\t\tif (left < len && this.comparator(heap[left], heap[largest]) > 0) largest = left;\n\t\t\tif (right < len && this.comparator(heap[right], heap[largest]) > 0) largest = right;\n\t\t\tif (largest !== i) {\n\t\t\t\tconst tmp = heap[i];\n\t\t\t\theap[i] = heap[largest];\n\t\t\t\theap[largest] = tmp;\n\t\t\t}\n\t\t} while (largest !== i);\n\t}\n};\n\n//#endregion\n//#region src/core/formatMatches.ts\nfunction formatMatches(result) {\n\tconst matches = [];\n\tresult.matches.forEach((match) => {\n\t\tif (!isDefined(match.indices) || !match.indices.length) return;\n\t\tconst obj = {\n\t\t\tindices: match.indices,\n\t\t\tvalue: match.value\n\t\t};\n\t\tif (match.key) obj.key = match.key.id;\n\t\tif (match.idx > -1) obj.refIndex = match.idx;\n\t\tmatches.push(obj);\n\t});\n\treturn matches;\n}\n\n//#endregion\n//#region src/core/format.ts\nfunction format(results, docs, { includeMatches = Config.includeMatches, includeScore = Config.includeScore } = {}) {\n\treturn results.map((result) => {\n\t\tconst { idx } = result;\n\t\tconst data = {\n\t\t\titem: docs[idx],\n\t\t\trefIndex: idx\n\t\t};\n\t\tif (includeMatches) data.matches = formatMatches(result);\n\t\tif (includeScore) data.score = result.score;\n\t\treturn data;\n\t});\n}\n\n//#endregion\n//#region src/search/token/analyzer.ts\nconst DEFAULT_TOKEN = /[\\p{L}\\p{M}\\p{N}_]+/gu;\nconst warned = /* @__PURE__ */ new WeakSet();\nfunction warnNonGlobal(regex) {\n\tif (!warned.has(regex)) {\n\t\twarned.add(regex);\n\t\tconsole.warn(`[Fuse] tokenize regex ${regex} lacks the global flag; only the first match per text will be returned. Add the 'g' flag.`);\n\t}\n}\nfunction resolveTokenize(tokenize) {\n\tif (typeof tokenize === \"function\") {\n\t\tlet validated = false;\n\t\treturn (text) => {\n\t\t\tconst result = tokenize(text);\n\t\t\tif (!validated) {\n\t\t\t\tvalidated = true;\n\t\t\t\tif (!Array.isArray(result) || result.some((t) => typeof t !== \"string\")) throw new Error(`[Fuse] tokenize function must return string[]; received ${Array.isArray(result) ? \"array containing non-strings\" : typeof result}.`);\n\t\t\t}\n\t\t\treturn result;\n\t\t};\n\t}\n\tif (tokenize instanceof RegExp) {\n\t\tif (!tokenize.global) warnNonGlobal(tokenize);\n\t\treturn (text) => text.match(tokenize) || [];\n\t}\n\treturn (text) => text.match(DEFAULT_TOKEN) || [];\n}\nfunction createAnalyzer({ isCaseSensitive = false, ignoreDiacritics = false, tokenize } = {}) {\n\tconst tokenizeFn = resolveTokenize(tokenize);\n\treturn { tokenize(text) {\n\t\tif (!isCaseSensitive) text = text.toLowerCase();\n\t\tif (ignoreDiacritics) text = stripDiacritics(text);\n\t\treturn tokenizeFn(text);\n\t} };\n}\n\n//#endregion\n//#region src/search/token/index.ts\nconst MAX_MASK_TERMS = 31;\nvar TokenSearch = class {\n\tstatic condition(_, options) {\n\t\treturn options.useTokenSearch;\n\t}\n\tconstructor(pattern, options) {\n\t\tthis.options = options;\n\t\tthis.analyzer = createAnalyzer({\n\t\t\tisCaseSensitive: options.isCaseSensitive,\n\t\t\tignoreDiacritics: options.ignoreDiacritics,\n\t\t\ttokenize: options.tokenize\n\t\t});\n\t\tconst queryTerms = this.analyzer.tokenize(pattern);\n\t\tconst { df, fieldCount } = options._invertedIndex;\n\t\tthis.termSearchers = [];\n\t\tthis.idfWeights = [];\n\t\tfor (const term of queryTerms) {\n\t\t\tthis.termSearchers.push(new BitapSearch(term, {\n\t\t\t\tlocation: options.location,\n\t\t\t\tthreshold: options.threshold,\n\t\t\t\tdistance: options.distance,\n\t\t\t\tincludeMatches: options.includeMatches,\n\t\t\t\tfindAllMatches: options.findAllMatches,\n\t\t\t\tminMatchCharLength: options.minMatchCharLength,\n\t\t\t\tisCaseSensitive: options.isCaseSensitive,\n\t\t\t\tignoreDiacritics: options.ignoreDiacritics,\n\t\t\t\tignoreLocation: true\n\t\t\t}));\n\t\t\tconst docFreq = df.get(term) || 0;\n\t\t\tconst idf = Math.log(1 + (fieldCount - docFreq + .5) / (docFreq + .5));\n\t\t\tthis.idfWeights.push(idf);\n\t\t}\n\t\tthis.combineAll = options.tokenMatch === \"all\";\n\t\tthis.numTerms = this.termSearchers.length;\n\t\tthis.useMask = this.numTerms <= 31;\n\t}\n\tsearchIn(text) {\n\t\tif (!this.termSearchers.length) return {\n\t\t\tisMatch: false,\n\t\t\tscore: 1\n\t\t};\n\t\tconst allIndices = [];\n\t\tlet weightedScore = 0;\n\t\tlet maxPossibleScore = 0;\n\t\tlet matchedCount = 0;\n\t\tlet matchedMask = 0;\n\t\tconst matchedTerms = this.combineAll && !this.useMask ? /* @__PURE__ */ new Set() : null;\n\t\tfor (let i = 0; i < this.termSearchers.length; i++) {\n\t\t\tconst result = this.termSearchers[i].searchIn(text);\n\t\t\tconst idf = this.idfWeights[i];\n\t\t\tmaxPossibleScore += idf;\n\t\t\tif (result.isMatch) {\n\t\t\t\tmatchedCount++;\n\t\t\t\tweightedScore += idf * (1 - result.score);\n\t\t\t\tif (result.indices) allIndices.push(...result.indices);\n\t\t\t\tif (this.combineAll) if (this.useMask) matchedMask |= 1 << i;\n\t\t\t\telse matchedTerms.add(i);\n\t\t\t}\n\t\t}\n\t\tif (matchedCount === 0) return {\n\t\t\tisMatch: false,\n\t\t\tscore: 1\n\t\t};\n\t\tconst normalized = maxPossibleScore > 0 ? 1 - weightedScore / maxPossibleScore : 0;\n\t\tconst searchResult = {\n\t\t\tisMatch: true,\n\t\t\tscore: Math.max(.001, normalized)\n\t\t};\n\t\tif (this.options.includeMatches && allIndices.length) searchResult.indices = mergeIndices(allIndices);\n\t\tif (this.combineAll) {\n\t\t\tif (this.useMask) searchResult.matchedMask = matchedMask;\n\t\t\telse searchResult.matchedTerms = matchedTerms;\n\t\t\tsearchResult.termCount = this.numTerms;\n\t\t}\n\t\treturn searchResult;\n\t}\n};\n\n//#endregion\n//#region src/search/token/InvertedIndex.ts\nfunction addField(index, text, docIdx, analyzer) {\n\tconst tokens = analyzer.tokenize(text);\n\tif (!tokens.length) return;\n\tindex.fieldCount++;\n\tindex.docFieldCount.set(docIdx, (index.docFieldCount.get(docIdx) || 0) + 1);\n\tconst distinctTerms = new Set(tokens);\n\tlet perDocTerms = index.docTermFieldHits.get(docIdx);\n\tif (!perDocTerms) {\n\t\tperDocTerms = /* @__PURE__ */ new Map();\n\t\tindex.docTermFieldHits.set(docIdx, perDocTerms);\n\t}\n\tfor (const term of distinctTerms) {\n\t\tperDocTerms.set(term, (perDocTerms.get(term) || 0) + 1);\n\t\tindex.df.set(term, (index.df.get(term) || 0) + 1);\n\t}\n}\nfunction ingestRecord(index, record, keyCount, analyzer) {\n\tconst { i: docIdx, v, $: fields } = record;\n\tif (v !== void 0) {\n\t\taddField(index, v, docIdx, analyzer);\n\t\treturn;\n\t}\n\tif (!fields) return;\n\tfor (let keyIdx = 0; keyIdx < keyCount; keyIdx++) {\n\t\tconst value = fields[keyIdx];\n\t\tif (!value) continue;\n\t\tif (Array.isArray(value)) for (const sub of value) addField(index, sub.v, docIdx, analyzer);\n\t\telse addField(index, value.v, docIdx, analyzer);\n\t}\n}\nfunction buildInvertedIndex(records, keyCount, analyzer) {\n\tconst index = {\n\t\tfieldCount: 0,\n\t\tdf: /* @__PURE__ */ new Map(),\n\t\tdocFieldCount: /* @__PURE__ */ new Map(),\n\t\tdocTermFieldHits: /* @__PURE__ */ new Map()\n\t};\n\tfor (const record of records) ingestRecord(index, record, keyCount, analyzer);\n\treturn index;\n}\nfunction addToInvertedIndex(index, record, keyCount, analyzer) {\n\tingestRecord(index, record, keyCount, analyzer);\n}\nfunction removeFromInvertedIndex(index, docIdx) {\n\tconst fieldCount = index.docFieldCount.get(docIdx);\n\tif (fieldCount === void 0) return;\n\tindex.fieldCount -= fieldCount;\n\tindex.docFieldCount.delete(docIdx);\n\tconst perDocTerms = index.docTermFieldHits.get(docIdx);\n\tif (!perDocTerms) return;\n\tfor (const [term, hits] of perDocTerms) {\n\t\tconst next = (index.df.get(term) || 0) - hits;\n\t\tif (next <= 0) index.df.delete(term);\n\t\telse index.df.set(term, next);\n\t}\n\tindex.docTermFieldHits.delete(docIdx);\n}\nfunction removeAndShiftInvertedIndex(index, removedIndices) {\n\tif (removedIndices.length === 0) return;\n\tconst sorted = Array.from(new Set(removedIndices)).sort((a, b) => a - b);\n\tfor (const idx of sorted) removeFromInvertedIndex(index, idx);\n\tconst shift = (oldIdx) => {\n\t\tlet lo = 0;\n\t\tlet hi = sorted.length;\n\t\twhile (lo < hi) {\n\t\t\tconst mid = lo + hi >>> 1;\n\t\t\tif (sorted[mid] < oldIdx) lo = mid + 1;\n\t\t\telse hi = mid;\n\t\t}\n\t\treturn oldIdx - lo;\n\t};\n\tconst firstRemoved = sorted[0];\n\tconst shiftedDocFieldCount = /* @__PURE__ */ new Map();\n\tfor (const [oldKey, count] of index.docFieldCount) shiftedDocFieldCount.set(oldKey > firstRemoved ? shift(oldKey) : oldKey, count);\n\tindex.docFieldCount = shiftedDocFieldCount;\n\tconst shiftedDocTermFieldHits = /* @__PURE__ */ new Map();\n\tfor (const [oldKey, terms] of index.docTermFieldHits) shiftedDocTermFieldHits.set(oldKey > firstRemoved ? shift(oldKey) : oldKey, terms);\n\tindex.docTermFieldHits = shiftedDocTermFieldHits;\n}\n\n//#endregion\n//#region src/core/index.ts\nvar Fuse = class {\n\tconstructor(docs, options, index) {\n\t\tthis.options = {\n\t\t\t...Config,\n\t\t\t...options\n\t\t};\n\t\tif (this.options.useExtendedSearch && false);\n\t\tif (this.options.useTokenSearch && false);\n\t\tthis._keyStore = new KeyStore(this.options.keys);\n\t\tthis._docs = docs;\n\t\tthis._myIndex = null;\n\t\tthis._invertedIndex = null;\n\t\tthis.setCollection(docs, index);\n\t\tthis._lastQuery = null;\n\t\tthis._lastSearcher = null;\n\t}\n\t_getSearcher(query) {\n\t\tif (this._lastQuery === query) return this._lastSearcher;\n\t\tconst searcher = createSearcher(query, this._invertedIndex ? {\n\t\t\t...this.options,\n\t\t\t_invertedIndex: this._invertedIndex\n\t\t} : this.options);\n\t\tthis._lastQuery = query;\n\t\tthis._lastSearcher = searcher;\n\t\treturn searcher;\n\t}\n\tsetCollection(docs, index) {\n\t\tthis._docs = docs;\n\t\tif (index && !(index instanceof FuseIndex)) throw new Error(INCORRECT_INDEX_TYPE);\n\t\tthis._myIndex = index || createIndex(this.options.keys, this._docs, {\n\t\t\tgetFn: this.options.getFn,\n\t\t\tfieldNormWeight: this.options.fieldNormWeight\n\t\t});\n\t\tif (this.options.useTokenSearch) {\n\t\t\tconst analyzer = createAnalyzer({\n\t\t\t\tisCaseSensitive: this.options.isCaseSensitive,\n\t\t\t\tignoreDiacritics: this.options.ignoreDiacritics,\n\t\t\t\ttokenize: this.options.tokenize\n\t\t\t});\n\t\t\tthis._invertedIndex = buildInvertedIndex(this._myIndex.records, this._myIndex.keys.length, analyzer);\n\t\t}\n\t\tthis._invalidateSearcherCache();\n\t}\n\tadd(doc) {\n\t\tif (!isDefined(doc)) return;\n\t\tthis._docs.push(doc);\n\t\tconst record = this._myIndex.add(doc, this._docs.length - 1);\n\t\tif (this._invertedIndex && record) {\n\t\t\tconst analyzer = createAnalyzer({\n\t\t\t\tisCaseSensitive: this.options.isCaseSensitive,\n\t\t\t\tignoreDiacritics: this.options.ignoreDiacritics,\n\t\t\t\ttokenize: this.options.tokenize\n\t\t\t});\n\t\t\taddToInvertedIndex(this._invertedIndex, record, this._myIndex.keys.length, analyzer);\n\t\t}\n\t\tthis._invalidateSearcherCache();\n\t}\n\tremove(predicate = () => false) {\n\t\tconst results = [];\n\t\tconst indicesToRemove = [];\n\t\tfor (let i = 0, len = this._docs.length; i < len; i += 1) if (predicate(this._docs[i], i)) {\n\t\t\tresults.push(this._docs[i]);\n\t\t\tindicesToRemove.push(i);\n\t\t}\n\t\tif (indicesToRemove.length) {\n\t\t\tif (this._invertedIndex) removeAndShiftInvertedIndex(this._invertedIndex, indicesToRemove);\n\t\t\tconst toRemove = new Set(indicesToRemove);\n\t\t\tthis._docs = this._docs.filter((_, i) => !toRemove.has(i));\n\t\t\tthis._myIndex.removeAll(indicesToRemove);\n\t\t\tthis._invalidateSearcherCache();\n\t\t}\n\t\treturn results;\n\t}\n\tremoveAt(idx) {\n\t\tif (!Number.isInteger(idx) || idx < 0 || idx >= this._docs.length) throw new Error(INVALID_DOC_INDEX);\n\t\tif (this._invertedIndex) removeAndShiftInvertedIndex(this._invertedIndex, [idx]);\n\t\tconst doc = this._docs.splice(idx, 1)[0];\n\t\tthis._myIndex.removeAt(idx);\n\t\tthis._invalidateSearcherCache();\n\t\treturn doc;\n\t}\n\t_invalidateSearcherCache() {\n\t\tthis._lastQuery = null;\n\t\tthis._lastSearcher = null;\n\t}\n\tgetIndex() {\n\t\treturn this._myIndex;\n\t}\n\t_normalizedKeys() {\n\t\treturn this._myIndex.keys.map((key) => this._keyStore.get(key.id) || key);\n\t}\n\tsearch(query, options) {\n\t\tconst { limit = -1 } = options || {};\n\t\tconst { includeMatches, includeScore, shouldSort, sortFn, ignoreFieldNorm } = this.options;\n\t\tif (isString(query) && !query.trim()) {\n\t\t\tlet docs = this._docs.map((item, idx) => ({\n\t\t\t\titem,\n\t\t\t\trefIndex: idx\n\t\t\t}));\n\t\t\tif (isNumber(limit) && limit > -1) docs = docs.slice(0, limit);\n\t\t\treturn docs;\n\t\t}\n\t\tconst useHeap = shouldSort && isNumber(limit) && limit > 0 && isString(query);\n\t\tconst comparator = sortFn;\n\t\tconst stable = (a, b) => comparator(a, b) || a.idx - b.idx;\n\t\tlet results;\n\t\tif (useHeap) {\n\t\t\tconst heap = new MaxHeap(limit, stable);\n\t\t\tif (isString(this._docs[0])) this._searchStringList(query, {\n\t\t\t\theap,\n\t\t\t\tignoreFieldNorm\n\t\t\t});\n\t\t\telse this._searchObjectList(query, {\n\t\t\t\theap,\n\t\t\t\tignoreFieldNorm\n\t\t\t});\n\t\t\tresults = heap.extractSorted();\n\t\t} else {\n\t\t\tresults = isString(query) ? isString(this._docs[0]) ? this._searchStringList(query) : this._searchObjectList(query) : this._searchLogical(query);\n\t\t\tcomputeScore(results, { ignoreFieldNorm });\n\t\t\tif (shouldSort) results.sort(isString(query) ? stable : comparator);\n\t\t\tif (isNumber(limit) && limit > -1) results = results.slice(0, limit);\n\t\t}\n\t\treturn format(results, this._docs, {\n\t\t\tincludeMatches,\n\t\t\tincludeScore\n\t\t});\n\t}\n\t_searchStringList(query, { heap, ignoreFieldNorm } = {}) {\n\t\tconst searcher = this._getSearcher(query);\n\t\tconst requireAllTokens = this.options.useTokenSearch && this.options.tokenMatch === \"all\";\n\t\tconst { records } = this._myIndex;\n\t\tconst results = heap ? null : [];\n\t\trecords.forEach(({ v: text, i: idx, n: norm }) => {\n\t\t\tif (!isDefined(text)) return;\n\t\t\tconst searchResult = searcher.searchIn(text);\n\t\t\tif (searchResult.isMatch) {\n\t\t\t\tconst match = {\n\t\t\t\t\tscore: searchResult.score,\n\t\t\t\t\tvalue: text,\n\t\t\t\t\tnorm,\n\t\t\t\t\tindices: searchResult.indices\n\t\t\t\t};\n\t\t\t\tif (requireAllTokens) {\n\t\t\t\t\tmatch.matchedMask = searchResult.matchedMask;\n\t\t\t\t\tmatch.matchedTerms = searchResult.matchedTerms;\n\t\t\t\t\tmatch.termCount = searchResult.termCount;\n\t\t\t\t}\n\t\t\t\tconst matches = [match];\n\t\t\t\tif (!requireAllTokens || this._coversAllTokens(matches)) {\n\t\t\t\t\tconst result = {\n\t\t\t\t\t\titem: text,\n\t\t\t\t\t\tidx,\n\t\t\t\t\t\tmatches\n\t\t\t\t\t};\n\t\t\t\t\tif (heap) {\n\t\t\t\t\t\tresult.score = computeScoreSingle(result.matches, { ignoreFieldNorm });\n\t\t\t\t\t\theap.insert(result);\n\t\t\t\t\t} else results.push(result);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn results;\n\t}\n\t_searchLogical(query) {\n\t\tconst expression = parse(query, this.options);\n\t\tconst keys = this._normalizedKeys();\n\t\tconst evaluate = (node, item, idx) => {\n\t\t\tif (!(\"children\" in node)) {\n\t\t\t\tconst { keyId, searcher } = node;\n\t\t\t\tlet matches;\n\t\t\t\tif (keyId === null) {\n\t\t\t\t\tmatches = [];\n\t\t\t\t\tkeys.forEach((key, keyIndex) => {\n\t\t\t\t\t\tmatches.push(...this._findMatches({\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: item[keyIndex],\n\t\t\t\t\t\t\tsearcher\n\t\t\t\t\t\t}));\n\t\t\t\t\t});\n\t\t\t\t} else matches = this._findMatches({\n\t\t\t\t\tkey: this._keyStore.get(keyId),\n\t\t\t\t\tvalue: this._myIndex.getValueForItemAtKeyId(item, keyId),\n\t\t\t\t\tsearcher\n\t\t\t\t});\n\t\t\t\tif (matches && matches.length) return [{\n\t\t\t\t\tidx,\n\t\t\t\t\titem,\n\t\t\t\t\tmatches\n\t\t\t\t}];\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\tconst { children, operator } = node;\n\t\t\tconst res = [];\n\t\t\tfor (let i = 0, len = children.length; i < len; i += 1) {\n\t\t\t\tconst child = children[i];\n\t\t\t\tconst result = evaluate(child, item, idx);\n\t\t\t\tif (result.length) res.push(...result);\n\t\t\t\telse if (operator === LogicalOperator.AND) return [];\n\t\t\t}\n\t\t\treturn res;\n\t\t};\n\t\tconst records = this._myIndex.records;\n\t\tconst resultMap = /* @__PURE__ */ new Map();\n\t\tconst results = [];\n\t\trecords.forEach(({ $: item, i: idx }) => {\n\t\t\tif (isDefined(item)) {\n\t\t\t\tconst expResults = evaluate(expression, item, idx);\n\t\t\t\tif (expResults.length) {\n\t\t\t\t\tif (!resultMap.has(idx)) {\n\t\t\t\t\t\tresultMap.set(idx, {\n\t\t\t\t\t\t\tidx,\n\t\t\t\t\t\t\titem,\n\t\t\t\t\t\t\tmatches: []\n\t\t\t\t\t\t});\n\t\t\t\t\t\tresults.push(resultMap.get(idx));\n\t\t\t\t\t}\n\t\t\t\t\texpResults.forEach(({ matches }) => {\n\t\t\t\t\t\tresultMap.get(idx).matches.push(...matches);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn results;\n\t}\n\t_searchObjectList(query, { heap, ignoreFieldNorm } = {}) {\n\t\tconst searcher = this._getSearcher(query);\n\t\tconst requireAllTokens = this.options.useTokenSearch && this.options.tokenMatch === \"all\";\n\t\tconst { records } = this._myIndex;\n\t\tconst keys = this._normalizedKeys();\n\t\tconst results = heap ? null : [];\n\t\trecords.forEach(({ $: item, i: idx }) => {\n\t\t\tif (!isDefined(item)) return;\n\t\t\tconst matches = [];\n\t\t\tlet anyKeyFailed = false;\n\t\t\tlet hasInverse = false;\n\t\t\tkeys.forEach((key, keyIndex) => {\n\t\t\t\tconst keyMatches = this._findMatches({\n\t\t\t\t\tkey,\n\t\t\t\t\tvalue: item[keyIndex],\n\t\t\t\t\tsearcher\n\t\t\t\t});\n\t\t\t\tif (keyMatches.length) {\n\t\t\t\t\tmatches.push(...keyMatches);\n\t\t\t\t\tif (keyMatches[0].hasInverse) hasInverse = true;\n\t\t\t\t} else anyKeyFailed = true;\n\t\t\t});\n\t\t\tif (hasInverse && anyKeyFailed) return;\n\t\t\tif (matches.length && (!requireAllTokens || this._coversAllTokens(matches))) {\n\t\t\t\tconst result = {\n\t\t\t\t\tidx,\n\t\t\t\t\titem,\n\t\t\t\t\tmatches\n\t\t\t\t};\n\t\t\t\tif (heap) {\n\t\t\t\t\tresult.score = computeScoreSingle(result.matches, { ignoreFieldNorm });\n\t\t\t\t\theap.insert(result);\n\t\t\t\t} else results.push(result);\n\t\t\t}\n\t\t});\n\t\treturn results;\n\t}\n\t_findMatches({ key, value, searcher }) {\n\t\tif (!isDefined(value)) return [];\n\t\tconst matches = [];\n\t\tif (isArray(value)) value.forEach(({ v: text, i: idx, n: norm }) => {\n\t\t\tif (!isDefined(text)) return;\n\t\t\tconst searchResult = searcher.searchIn(text);\n\t\t\tif (searchResult.isMatch) {\n\t\t\t\tconst match = {\n\t\t\t\t\tscore: searchResult.score,\n\t\t\t\t\tkey,\n\t\t\t\t\tvalue: text,\n\t\t\t\t\tidx,\n\t\t\t\t\tnorm,\n\t\t\t\t\tindices: searchResult.indices,\n\t\t\t\t\thasInverse: searchResult.hasInverse\n\t\t\t\t};\n\t\t\t\tif (searchResult.termCount !== void 0) {\n\t\t\t\t\tmatch.matchedMask = searchResult.matchedMask;\n\t\t\t\t\tmatch.matchedTerms = searchResult.matchedTerms;\n\t\t\t\t\tmatch.termCount = searchResult.termCount;\n\t\t\t\t}\n\t\t\t\tmatches.push(match);\n\t\t\t}\n\t\t});\n\t\telse {\n\t\t\tconst { v: text, n: norm } = value;\n\t\t\tconst searchResult = searcher.searchIn(text);\n\t\t\tif (searchResult.isMatch) {\n\t\t\t\tconst match = {\n\t\t\t\t\tscore: searchResult.score,\n\t\t\t\t\tkey,\n\t\t\t\t\tvalue: text,\n\t\t\t\t\tnorm,\n\t\t\t\t\tindices: searchResult.indices,\n\t\t\t\t\thasInverse: searchResult.hasInverse\n\t\t\t\t};\n\t\t\t\tif (searchResult.termCount !== void 0) {\n\t\t\t\t\tmatch.matchedMask = searchResult.matchedMask;\n\t\t\t\t\tmatch.matchedTerms = searchResult.matchedTerms;\n\t\t\t\t\tmatch.termCount = searchResult.termCount;\n\t\t\t\t}\n\t\t\t\tmatches.push(match);\n\t\t\t}\n\t\t}\n\t\treturn matches;\n\t}\n\t_coversAllTokens(matches) {\n\t\tconst termCount = matches.length ? matches[0].termCount : void 0;\n\t\tif (termCount === void 0) return true;\n\t\tif (termCount <= 31) {\n\t\t\tlet coverage = 0;\n\t\t\tfor (let i = 0; i < matches.length; i++) coverage |= matches[i].matchedMask || 0;\n\t\t\treturn coverage === 2 ** termCount - 1;\n\t\t}\n\t\tconst coverage = /* @__PURE__ */ new Set();\n\t\tfor (let i = 0; i < matches.length; i++) {\n\t\t\tconst terms = matches[i].matchedTerms;\n\t\t\tif (terms) for (const t of terms) coverage.add(t);\n\t\t}\n\t\treturn coverage.size === termCount;\n\t}\n};\n\n//#endregion\n//#region src/entry.ts\nFuse.version = \"7.5.0\";\nFuse.createIndex = createIndex;\nFuse.parseIndex = parseIndex;\nFuse.config = Config;\nFuse.match = function(pattern, text, options) {\n\tif (options && options.useTokenSearch) throw new Error(FUSE_MATCH_TOKEN_SEARCH_UNSUPPORTED);\n\treturn createSearcher(pattern, {\n\t\t...Config,\n\t\t...options\n\t}).searchIn(text);\n};\nFuse.parseQuery = parse;\nregister(ExtendedSearch);\nregister(TokenSearch);\nFuse.use = function(...plugins) {\n\tplugins.forEach((plugin) => register(plugin));\n};\nvar entry_default = Fuse;\n\n//#endregion\nexport { entry_default as default };","/**\n * Hardware-related system information functions\n * @module info/hardware\n */\n\nimport os from \"os\";\nimport fs from \"fs\";\nimport type { InfoContext } from \"../types/internal-types\";\nimport { IS_WINDOWS, IS_LINUX } from \"../utils/platform\";\nimport { execCommand } from \"../utils/command\";\nimport { getCachedValue, setCachedValue } from \"../cache/cache\";\nimport Fuse from \"fuse.js\";\n\n/**\n * Gets CPU model name and specifications\n * Uses platform-specific commands (wmic/lscpu/cpuinfo)\n * Automatically strips \"with Radeon Graphics\" and similar suffixes\n * @param context - Info context with cache\n * @returns CPU model string or empty string\n * @example \"Intel Core i7-12700K\", \"AMD Ryzen 9 5900HX\", \"Apple M2 Pro\"\n */\nexport function cpu(context: InfoContext): string {\n const cached = getCachedValue(context.cache, \"cpu\");\n if (cached) return cached;\n\n let cpuName = \"\";\n\n if (IS_WINDOWS) {\n try {\n const wmic = execCommand(\"wmic cpu get name /format:list\");\n const nameMatch = wmic.match(/Name=(.+)/);\n if (nameMatch) {\n cpuName = nameMatch[1].trim();\n }\n } catch {}\n\n if (!cpuName) {\n try {\n const ps = execCommand(\n 'powershell.exe -Command \"Get-WmiObject -Class Win32_Processor | Select-Object -ExpandProperty Name\"'\n );\n if (ps.trim()) {\n cpuName = ps.trim();\n }\n } catch {}\n }\n } else if (IS_LINUX) {\n try {\n const lscpu = execCommand(\"lscpu\");\n const modelMatch = lscpu.match(/Model name:\\s*([^\\n,]+)/);\n if (modelMatch) {\n cpuName = modelMatch[1].trim();\n }\n } catch {}\n\n if (!cpuName) {\n try {\n const cpuInfo = fs.readFileSync(\"/proc/cpuinfo\", \"utf8\");\n const modelMatch = cpuInfo.match(/model name\\s*:\\s*([^\\n]+)/);\n const hardwareMatch = cpuInfo.match(/Hardware\\s*:\\s*([^\\n]+)/);\n\n if (modelMatch) {\n cpuName = modelMatch[1].trim();\n } else if (hardwareMatch) {\n cpuName = hardwareMatch[1].trim();\n }\n } catch {}\n }\n } else {\n const cpus = os.cpus();\n if (cpus.length > 0) {\n cpuName = cpus[0].model.trim().replace(/[\\r\\n]+/g, \" \");\n }\n }\n\n if (!cpuName) {\n setCachedValue(context.cache, \"cpu\", \"\");\n return \"\";\n }\n\n cpuName = cpuName.trim().replace(/with .*/, \"\");\n\n setCachedValue(context.cache, \"cpu\", cpuName);\n return cpuName;\n}\n\n/**\n * Gets graphics card model name\n * Extracts GPU info from lspci (Linux) or WMI (Windows)\n * Filters out basic/generic display adapters\n * @param context - Info context with cache\n * @returns GPU model string or empty string\n * @example \"NVIDIA GeForce RTX 4070\", \"AMD Radeon RX 6800 XT\"\n */\nexport function gpu(context: InfoContext): string {\n const cached = getCachedValue(context.cache, \"gpu\");\n if (cached !== null) return cached;\n\n if (IS_WINDOWS) {\n try {\n const wmic = execCommand(\n \"wmic path win32_VideoController get name /format:list\"\n );\n const nameMatch = wmic.match(/Name=(.+)/);\n if (nameMatch) {\n const gpu = nameMatch[1].trim();\n if (gpu && gpu !== \"\" && !gpu.includes(\"Microsoft Basic\")) {\n setCachedValue(context.cache, \"gpu\", gpu);\n return gpu;\n }\n }\n } catch {}\n\n try {\n const ps = execCommand(\n \"powershell.exe -Command \\\"Get-WmiObject -Class Win32_VideoController | Where-Object {$_.Name -notlike '*Microsoft Basic*'} | Select-Object -First 1 -ExpandProperty Name\\\"\"\n );\n if (ps.trim()) {\n const gpu = ps.trim();\n setCachedValue(context.cache, \"gpu\", gpu);\n return gpu;\n }\n } catch {}\n } else if (IS_LINUX) {\n try {\n const lspci = execCommand(\"lspci\");\n const gpuMatch = lspci.match(\n /VGA.*?(RTX|GeForce|AMD|Intel|NVIDIA)[^\\n]*/i\n );\n if (gpuMatch) {\n let gpu = gpuMatch[0];\n\n const bracketMatch = gpu.match(/\\[([^\\]]+)\\]/);\n if (bracketMatch) {\n gpu = bracketMatch[1];\n } else {\n gpu = gpu\n .replace(/^.*VGA[^:]*:\\s*/, \"\")\n .replace(/\\s*\\(.*\\)$/, \"\")\n .trim();\n }\n\n if (gpu) {\n setCachedValue(context.cache, \"gpu\", gpu);\n return gpu;\n }\n }\n } catch {}\n }\n\n setCachedValue(context.cache, \"gpu\", \"\");\n return \"\";\n}\n\n/**\n * Gets screen resolution from X11 display\n * Uses xrandr command (Linux with X11/Xorg only)\n * @returns Resolution in WIDTHxHEIGHT format or empty string\n * @example \"1920x1080\", \"2560x1440\", \"3840x2160\"\n */\nexport function screen_resolution(): string {\n if (!IS_LINUX) return \"\";\n\n try {\n if (process.env.DISPLAY) {\n const xrandr = execCommand(\"xrandr\");\n const resolutionMatch = xrandr.match(/(\\d+x\\d+)\\+\\d+\\+\\d+/);\n if (resolutionMatch) {\n return resolutionMatch[1];\n }\n }\n } catch {}\n return \"\";\n}\n\n/**\n * Gets CPU benchmark score and rank from Geekbench 6 data\n * Uses fuzzy matching to find similar CPU models\n * @param context - Info context with cache\n * @returns Benchmark info with score and rank, or empty string\n * @example \"💪 37.9k #1\", \"💪 20.5k #68\"\n */\nexport function bench(context: InfoContext): string {\n const cached = getCachedValue(context.cache, \"bench\");\n if (cached) return cached;\n\n const cpuName = cpu(context);\n if (!cpuName) {\n setCachedValue(context.cache, \"bench\", \"\");\n return \"\";\n }\n\n try {\n let benchmarkPath: string;\n const benchmarkFile = \"cpu-geekbench-1k.json\";\n\n // Try multiple resolution strategies\n if (fs.existsSync(benchmarkFile)) {\n benchmarkPath = benchmarkFile;\n } else if (fs.existsSync(`src/bench/${benchmarkFile}`)) {\n benchmarkPath = `src/bench/${benchmarkFile}`;\n } else if (fs.existsSync(`./bench/${benchmarkFile}`)) {\n benchmarkPath = `./bench/${benchmarkFile}`;\n } else {\n // Last resort: construct path from import.meta.url\n try {\n const url = new URL(`./${benchmarkFile}`, import.meta.url);\n benchmarkPath = url.pathname;\n if (!fs.existsSync(benchmarkPath)) {\n const distPath = url.pathname.substring(0, url.pathname.lastIndexOf('/'));\n benchmarkPath = distPath + `/${benchmarkFile}`;\n }\n } catch {\n benchmarkPath = benchmarkFile;\n }\n }\n\n const benchmarkData = fs.readFileSync(benchmarkPath, \"utf8\");\n const parsed = JSON.parse(benchmarkData);\n const scores = parsed.scores as [string, number, number][];\n\n const cpuList = scores.map((item) => ({ name: item[0], score: item[1], rank: item[2] }));\n\n const fuse = new Fuse(cpuList, {\n keys: [\"name\"],\n threshold: 0.6,\n minMatchCharLength: 3,\n });\n\n const results = fuse.search(cpuName);\n if (results.length > 0) {\n const match = results[0].item;\n const score = Math.round(match.score / 100) / 10;\n const rank = match.rank;\n const result = `💪 ${score}k #${rank}`;\n setCachedValue(context.cache, \"bench\", result);\n return result;\n }\n } catch (e) {\n // Silently fail\n }\n\n setCachedValue(context.cache, \"bench\", \"\");\n return \"\";\n}\n\n/**\n * Gets detailed CPU benchmark information from Geekbench 6 data\n * Includes score, rank, and architecture type (ARM/Intel/AMD)\n * @param context - Info context with cache\n * @returns Detailed benchmark info with architecture, or empty string\n * @example \"Geekbench 6: 37.9k (Rank #1) - ARM\", \"Geekbench 6: 20.5k (Rank #68) - Intel\"\n */\nexport function cpu_bench_info(context: InfoContext): string {\n const cached = getCachedValue(context.cache, \"cpu_bench_info\");\n if (cached) return cached;\n\n const cpuName = cpu(context);\n if (!cpuName) {\n setCachedValue(context.cache, \"cpu_bench_info\", \"\");\n return \"\";\n }\n\n try {\n let benchmarkPath: string;\n const benchmarkFile = \"cpu-geekbench-1k.json\";\n\n // Try multiple resolution strategies\n if (fs.existsSync(benchmarkFile)) {\n benchmarkPath = benchmarkFile;\n } else if (fs.existsSync(`src/bench/${benchmarkFile}`)) {\n benchmarkPath = `src/bench/${benchmarkFile}`;\n } else if (fs.existsSync(`./bench/${benchmarkFile}`)) {\n benchmarkPath = `./bench/${benchmarkFile}`;\n } else {\n // Last resort: construct path from import.meta.url\n try {\n const url = new URL(`./${benchmarkFile}`, import.meta.url);\n benchmarkPath = url.pathname;\n if (!fs.existsSync(benchmarkPath)) {\n const distPath = url.pathname.substring(0, url.pathname.lastIndexOf('/'));\n benchmarkPath = distPath + `/${benchmarkFile}`;\n }\n } catch {\n benchmarkPath = benchmarkFile;\n }\n }\n\n const benchmarkData = fs.readFileSync(benchmarkPath, \"utf8\");\n const parsed = JSON.parse(benchmarkData);\n const scores = parsed.scores as [string, number, number][];\n\n const cpuList = scores.map((item) => ({\n name: item[0],\n score: item[1],\n rank: item[2],\n }));\n\n const fuse = new Fuse(cpuList, {\n keys: [\"name\"],\n threshold: 0.6,\n minMatchCharLength: 3,\n });\n\n const results = fuse.search(cpuName);\n if (results.length > 0) {\n const match = results[0].item;\n const score = Math.round(match.score / 100) / 10;\n const rank = match.rank;\n\n // Detect architecture type\n let arch = \"Unknown\";\n if (match.name.includes(\"Apple\") || match.name.includes(\"ARM\")) {\n arch = \"ARM\";\n } else if (match.name.includes(\"Intel\")) {\n arch = \"Intel\";\n } else if (match.name.includes(\"AMD\") || match.name.includes(\"Ryzen\") || match.name.includes(\"EPYC\")) {\n arch = \"AMD\";\n } else if (match.name.includes(\"Qualcomm\")) {\n arch = \"ARM\";\n }\n\n const result = `Geekbench 6: ${score}k (Rank #${rank}) - ${arch}`;\n setCachedValue(context.cache, \"cpu_bench_info\", result);\n return result;\n }\n } catch (e) {\n // Silently fail\n }\n\n setCachedValue(context.cache, \"cpu_bench_info\", \"\");\n return \"\";\n}\n","/**\n * Memory and disk-related system information functions\n * @module info/memory\n */\n\nimport os from \"os\";\nimport fs from \"fs\";\nimport type { InfoContext } from \"../types/internal-types\";\nimport { IS_LINUX } from \"../utils/platform\";\nimport { execCommand } from \"../utils/command\";\nimport { getCachedValue, setCachedValue } from \"../cache/cache\";\n\n/**\n * Gets memory usage in gigabytes\n * Reads from /proc/meminfo on Linux, falls back to os.totalmem()\n * @param context - Info context with cache\n * @returns Memory usage as \"used/total GB\"\n * @example \"12/32GB\", \"6/16GB\"\n */\nexport function ram_used(context: InfoContext): string {\n const cached = getCachedValue(context.cache, \"ram_used\");\n if (cached) return cached;\n\n if (IS_LINUX) {\n try {\n const meminfo = fs.readFileSync(\"/proc/meminfo\", \"utf8\");\n const totalMatch = meminfo.match(/MemTotal:\\s+(\\d+) kB/);\n const freeMatch = meminfo.match(/MemFree:\\s+(\\d+) kB/);\n\n if (totalMatch && freeMatch) {\n const totalMB = Math.round(parseInt(totalMatch[1]) / 1024);\n const freeMB = Math.round(parseInt(freeMatch[1]) / 1024);\n const usedMB = totalMB - freeMB;\n\n const totalGB = Math.round(totalMB / 1024);\n const usedGB = Math.round(usedMB / 1024);\n\n const result = `${usedGB}/${totalGB}GB`;\n setCachedValue(context.cache, \"ram_used\", result);\n return result;\n }\n } catch {}\n }\n\n const totalMem = os.totalmem();\n const freeMem = os.freemem();\n const usedMem = totalMem - freeMem;\n\n const totalGB = Math.round(totalMem / (1024 * 1024 * 1024));\n const usedGB = Math.round(usedMem / (1024 * 1024 * 1024));\n\n const result = `${usedGB}/${totalGB}GB`;\n setCachedValue(context.cache, \"ram_used\", result);\n return result;\n}\n\n/**\n * Gets available memory in gigabytes\n * Reads MemAvailable from /proc/meminfo (Linux only)\n * @returns Available memory with \"GB available\" suffix or empty string\n * @example \"12GB available\", \"4GB available\"\n */\nexport function memory_available(): string {\n if (!IS_LINUX) return \"\";\n\n try {\n const meminfo = fs.readFileSync(\"/proc/meminfo\", \"utf8\");\n const availableMatch = meminfo.match(/MemAvailable:\\s+(\\d+) kB/);\n if (availableMatch) {\n const availableGB = Math.round(parseInt(availableMatch[1]) / 1024 / 1024);\n return `${availableGB}GB available`;\n }\n } catch {}\n return \"\";\n}\n\n/**\n * Gets swap memory usage\n * Calculates swap usage from /proc/meminfo (Linux only)\n * @returns Swap usage as \"percentage (size MB) swap\" or empty string\n * @example \"15% (512MB) swap\", \"0% (0MB) swap\"\n */\nexport function swap_used(): string {\n if (!IS_LINUX) return \"\";\n\n try {\n const meminfo = fs.readFileSync(\"/proc/meminfo\", \"utf8\");\n const swapTotalMatch = meminfo.match(/SwapTotal:\\s+(\\d+) kB/);\n const swapFreeMatch = meminfo.match(/SwapFree:\\s+(\\d+) kB/);\n\n if (swapTotalMatch && swapFreeMatch) {\n const swapTotal = parseInt(swapTotalMatch[1]);\n const swapFree = parseInt(swapFreeMatch[1]);\n const swapUsed = swapTotal - swapFree;\n\n if (swapTotal > 0) {\n const swapUsedPercent = Math.round((swapUsed / swapTotal) * 100);\n const swapUsedMB = Math.round(swapUsed / 1024);\n return `${swapUsedPercent}% (${swapUsedMB}MB) swap`;\n }\n }\n } catch {}\n return \"\";\n}\n\n/**\n * Gets root filesystem disk usage percentage\n * Uses df command on Linux/Android\n * @param context - Info context with cache\n * @returns Percentage string or empty string\n * @example \"45%\", \"78%\"\n */\nexport function disk_used(context: InfoContext): string {\n const cached = getCachedValue(context.cache, \"disk_used\");\n if (cached !== null) return cached;\n\n if (IS_LINUX) {\n try {\n const df = execCommand(\"df -h\");\n let diskUsage = \"\";\n\n if (df.includes(\"/storage/emulated\")) {\n const match = df.match(/\\s+(\\d+%)\\s+\\/storage\\/emulated/);\n diskUsage = match ? match[1] : \"\";\n } else {\n const lines = df.split(\"\\n\");\n for (const line of lines) {\n if (line.trim().endsWith(\" /\")) {\n const parts = line.trim().split(/\\s+/);\n const percentIndex = parts.findIndex((part) => part.includes(\"%\"));\n if (percentIndex !== -1) {\n diskUsage = parts[percentIndex];\n break;\n }\n }\n }\n\n if (!diskUsage) {\n const rootMatch = df.match(/(\\d+%)\\s+\\/\\s*$/m);\n diskUsage = rootMatch ? rootMatch[1] : \"\";\n }\n }\n\n setCachedValue(context.cache, \"disk_used\", diskUsage);\n return diskUsage;\n } catch {}\n }\n\n setCachedValue(context.cache, \"disk_used\", \"\");\n return \"\";\n}\n\n/**\n * Gets system load averages\n * Reads 1, 5, and 15 minute load averages from /proc/loadavg (Linux only)\n * @returns Space-separated load averages (1m 5m 15m) or empty string\n * @example \"0.52 0.58 0.59\", \"2.10 1.95 1.88\"\n */\nexport function load_average(): string {\n if (!IS_LINUX) return \"\";\n\n try {\n const loadavg = fs.readFileSync(\"/proc/loadavg\", \"utf8\");\n const loads = loadavg.split(\" \").slice(0, 3);\n return loads.join(\" \");\n } catch {}\n return \"\";\n}\n\n/**\n * Gets mounted filesystem information\n * Lists non-system mount points with usage from df (Linux only)\n * Excludes /, /dev, /proc, and /sys mounts\n * @param context - Info context with cache\n * @returns Space-separated mount points with usage or empty string\n * @example \"/home(45%) /mnt/data(78%)\", \"/media/usb(12%)\"\n */\nexport function mount_points(context: InfoContext): string {\n const cached = getCachedValue(context.cache, \"mount_points\");\n if (cached !== null) return cached;\n\n if (!IS_LINUX) {\n setCachedValue(context.cache, \"mount_points\", \"\");\n return \"\";\n }\n\n try {\n const df = execCommand(\"df -h\");\n const lines = df.split(\"\\n\").slice(1);\n const mountPoints: string[] = [];\n\n lines.forEach((line) => {\n const parts = line.trim().split(/\\s+/);\n if (parts.length >= 6) {\n const mountPoint = parts[5];\n const usage = parts[4];\n if (\n !mountPoint.startsWith(\"/dev\") &&\n !mountPoint.startsWith(\"/proc\") &&\n !mountPoint.startsWith(\"/sys\") &&\n mountPoint !== \"/\"\n ) {\n mountPoints.push(`${mountPoint}(${usage})`);\n }\n }\n });\n\n const result = mountPoints.slice(0, 3).join(\" \");\n setCachedValue(context.cache, \"mount_points\", result);\n return result;\n } catch {}\n\n setCachedValue(context.cache, \"mount_points\", \"\");\n return \"\";\n}\n","/**\n * Process-related system information functions\n * @module info/process\n */\n\nimport os from \"os\";\nimport type { InfoContext } from \"../types/internal-types\";\nimport { IS_LINUX } from \"../utils/platform\";\nimport { execCommand } from \"../utils/command\";\nimport { getCachedValue, setCachedValue } from \"../cache/cache\";\n\n/**\n * Gets the highest CPU-consuming process\n * Uses ps command to find top process by CPU usage (Linux only)\n * @param context - Info context with cache\n * @returns Process info as \"percentage processname\" or empty string\n * @example \"8% firefox\", \"15% chrome\", \"3% systemd\"\n */\nexport function top_process(context: InfoContext): string {\n const cached = getCachedValue(context.cache, \"top_process\");\n if (cached !== null) return cached;\n\n if (IS_LINUX) {\n try {\n const ps = execCommand(\"ps -eo pcpu,comm --sort=-%cpu --no-headers\");\n const lines = ps.split(\"\\n\");\n if (lines.length > 0) {\n const topProcess = lines[0].trim().replace(/\\s+/, \" \").split(\" \");\n const cpu = topProcess[0].replace(/\\.\\d+/, \"%\");\n const process = topProcess[1].split(\"/\").pop();\n const result = `${cpu}% ${process}`;\n setCachedValue(context.cache, \"top_process\", result);\n return result;\n }\n } catch {}\n }\n\n setCachedValue(context.cache, \"top_process\", \"\");\n return \"\";\n}\n\n/**\n * Gets system uptime since last boot\n * @returns Uptime formatted as \"Xd Yh Zm\"\n * @example \"2d 14h 23m\", \"0d 3h 45m\"\n */\nexport function uptime(): string {\n const uptimeSeconds = os.uptime();\n const days = Math.floor(uptimeSeconds / 86400);\n const hours = Math.floor((uptimeSeconds % 86400) / 3600);\n const minutes = Math.floor((uptimeSeconds % 3600) / 60);\n return `${days}d ${hours}h ${minutes}m`;\n}\n\n/**\n * Gets number of logged in users\n * Uses who command to count active user sessions (Linux only)\n * @returns User count with \"users\" suffix or empty string\n * @example \"3 users\", \"1 users\"\n */\nexport function users_logged_in(): string {\n if (!IS_LINUX) return \"\";\n\n try {\n const who = execCommand(\"who\");\n const users = who.split(\"\\n\").filter((line) => line.trim()).length;\n if (users > 0) {\n return `${users} users`;\n }\n } catch {}\n return \"\";\n}\n","/**\n * Network-related system information functions\n * @module info/network\n */\n\nimport os from \"os\";\nimport type { InfoContext } from \"../types/internal-types\";\nimport { IS_LINUX } from \"../utils/platform\";\nimport { execCommand } from \"../utils/command\";\nimport { getCachedValue, setCachedValue } from \"../cache/cache\";\n\n/**\n * Gets public IP address from ipinfo.io\n * @param context - Info context with cache and IP info\n * @returns Public IPv4 address or empty string\n * @example \"203.0.113.42\"\n */\nexport async function ip(context: InfoContext): Promise<string> {\n const cached = getCachedValue(context.cache, \"ip\");\n if (cached) return cached;\n\n if (!context.ipInfo) {\n setCachedValue(context.cache, \"ip\", \"\");\n return \"\";\n }\n const ip = context.ipInfo.ip || \"\";\n setCachedValue(context.cache, \"ip\", ip);\n return ip;\n}\n\n/**\n * Gets local/private IP address(es)\n * Tries ifconfig and ip commands on Linux, falls back to Node.js API\n * @returns Space-separated local IP addresses (RFC 1918 ranges)\n * @example \"192.168.1.100\" or \"10.0.0.50 192.168.1.100\"\n */\nexport function iplocal(): string {\n if (IS_LINUX) {\n try {\n const ifconfig = execCommand(\"ifconfig 2>/dev/null\");\n const wlanMatch = ifconfig.match(\n /wlan0[\\s\\S]*?inet (\\d+\\.\\d+\\.\\d+\\.\\d+)/\n );\n if (wlanMatch) {\n return wlanMatch[1];\n }\n } catch {}\n\n try {\n const ipAddr = execCommand(\"ip addr show 2>/dev/null\");\n const addresses: string[] = [];\n const matches = ipAddr.matchAll(/inet (\\d+\\.\\d+\\.\\d+\\.\\d+)\\/\\d+/g);\n for (const match of matches) {\n if (!match[1].startsWith(\"127.\")) {\n addresses.push(match[1]);\n }\n }\n if (addresses.length > 0) {\n return addresses.join(\" \");\n }\n } catch {}\n }\n\n const interfaces = os.networkInterfaces();\n const addresses: string[] = [];\n\n for (const name of Object.keys(interfaces)) {\n for (const device of interfaces[name] || []) {\n if (device.family === \"IPv4\" && !device.internal) {\n addresses.push(device.address);\n }\n }\n }\n\n return addresses.join(\" \");\n}\n\n/**\n * Gets geographic city based on public IP\n * @param context - Info context with IP geolocation data\n * @returns City name or empty string\n * @example \"San Francisco\", \"New York\", \"London\"\n */\nexport async function city(context: InfoContext): Promise<string> {\n const cached = getCachedValue(context.cache, \"city\");\n if (cached !== null) return cached;\n\n if (!context.ipInfo || !context.ipInfo.city) {\n setCachedValue(context.cache, \"city\", \"\");\n return \"\";\n }\n const city = context.ipInfo.city;\n setCachedValue(context.cache, \"city\", city);\n return city;\n}\n\n/**\n * Gets reverse DNS hostname with HTTP prefix\n * @param context - Info context with IP info\n * @returns Domain with http:// prefix or empty string\n * @example \"http://example.com\", \"http://host-203-0-113-42.example.net\"\n */\nexport async function domain(context: InfoContext): Promise<string> {\n const cached = getCachedValue(context.cache, \"domain\");\n if (cached !== null) return cached;\n\n if (!context.ipInfo || !context.ipInfo.hostname) {\n setCachedValue(context.cache, \"domain\", \"\");\n return \"\";\n }\n const domain = `http://${context.ipInfo.hostname}`;\n setCachedValue(context.cache, \"domain\", domain);\n return domain;\n}\n\n/**\n * Gets Internet Service Provider name\n * Strips AS number prefix from organization string\n * @param context - Info context with IP info\n * @returns ISP name or empty string\n * @example \"Comcast Cable\", \"Verizon Business\", \"Cloudflare Inc\"\n */\nexport async function isp(context: InfoContext): Promise<string> {\n const cached = getCachedValue(context.cache, \"isp\");\n if (cached !== null) return cached;\n\n if (!context.ipInfo || !context.ipInfo.org) {\n setCachedValue(context.cache, \"isp\", \"\");\n return \"\";\n }\n const isp = context.ipInfo.org.split(\" \").slice(1).join(\" \");\n setCachedValue(context.cache, \"isp\", isp);\n return isp;\n}\n\n/**\n * Gets active network interface names\n * Lists non-loopback interfaces with IPv4 addresses (Linux only)\n * @param context - Info context with cache\n * @returns Space-separated interface names or empty string\n * @example \"eth0 wlan0\", \"enp0s3\"\n */\nexport function network_interfaces(context: InfoContext): string {\n const cached = getCachedValue(context.cache, \"network_interfaces\");\n if (cached !== null) return cached;\n\n if (!IS_LINUX) {\n setCachedValue(context.cache, \"network_interfaces\", \"\");\n return \"\";\n }\n\n try {\n const interfaces = os.networkInterfaces();\n const activeInterfaces: string[] = [];\n\n for (const [name, addrs] of Object.entries(interfaces)) {\n if (name !== \"lo\") {\n const ipv4Addr = addrs?.find(\n (addr) => addr.family === \"IPv4\" && !addr.internal\n );\n if (ipv4Addr) {\n activeInterfaces.push(name);\n }\n }\n }\n\n const result = activeInterfaces.join(\" \");\n setCachedValue(context.cache, \"network_interfaces\", result);\n return result;\n } catch {}\n\n setCachedValue(context.cache, \"network_interfaces\", \"\");\n return \"\";\n}\n/**\n * Gets open TCP ports with service names\n * Uses lsof to find listening TCP ports (Linux only)\n * @param context - Info context with cache\n * @returns Space-separated port+process pairs or empty string\n * @example \"80http 443http 22ssh\", \"3000node 5432post\"\n */\nexport function ports(context: InfoContext): string {\n const cached = getCachedValue(context.cache, \"ports\");\n if (cached !== null) return cached;\n\n if (IS_LINUX) {\n try {\n const lsof = execCommand(\"lsof -nP -iTCP -sTCP:LISTEN\");\n const lines = lsof.split(\"\\n\").slice(1);\n const ports = new Set<string>();\n\n lines.forEach((line) => {\n const parts = line.split(/\\s+/);\n if (parts.length >= 9) {\n const address = parts[8];\n const portMatch = address.match(/:(\\d+)$/);\n if (portMatch) {\n const port = portMatch[1];\n const process = parts[0].substring(0, 4);\n ports.add(`${port}${process}`);\n }\n }\n });\n\n const result = Array.from(ports).join(\" \");\n setCachedValue(context.cache, \"ports\", result);\n return result;\n } catch {}\n }\n\n setCachedValue(context.cache, \"ports\", \"\");\n return \"\";\n}\n","/**\n * System status and health information functions\n * @module info/system-status\n */\n\nimport fs from \"fs\";\nimport os from \"os\";\nimport type { InfoContext } from \"../types/internal-types\";\nimport { IS_LINUX } from \"../utils/platform\";\nimport { execCommand, commandExists } from \"../utils/command\";\nimport { getCachedValue, setCachedValue } from \"../cache/cache\";\n\n/**\n * Gets system load averages\n * Reads 1, 5, and 15 minute load averages from /proc/loadavg (Linux only)\n * @returns Space-separated load averages (1m 5m 15m) or empty string\n * @example \"0.52 0.58 0.59\", \"2.10 1.95 1.88\"\n */\nexport function load_average(context: InfoContext): string {\n if (!IS_LINUX) return \"\";\n\n try {\n const loadavg = fs.readFileSync(\"/proc/loadavg\", \"utf8\");\n const loads = loadavg.split(\" \").slice(0, 3);\n return loads.join(\" \");\n } catch {}\n return \"\";\n}\n\n/**\n * Gets battery charge level and charging status\n * Reads from /sys/class/power_supply/BAT0 (Linux laptops only)\n * @param context - Info context with cache\n * @returns Battery percentage with optional + for charging, or empty string\n * @example \"85%\", \"42%+\", \"100%\"\n */\nexport function battery(context: InfoContext): string {\n const cached = getCachedValue(context.cache, \"battery\");\n if (cached !== null) return cached;\n\n if (!IS_LINUX) {\n setCachedValue(context.cache, \"battery\", \"\");\n return \"\";\n }\n\n try {\n const batteryPath = \"/sys/class/power_supply/BAT0\";\n const capacityPath = `${batteryPath}/capacity`;\n const statusPath = `${batteryPath}/status`;\n\n if (fs.existsSync(capacityPath)) {\n const capacity = fs.readFileSync(capacityPath, \"utf8\").trim();\n const status = fs.existsSync(statusPath)\n ? fs.readFileSync(statusPath, \"utf8\").trim()\n : \"Unknown\";\n\n const batteryPercent = parseInt(capacity);\n const isCharging = status === \"Charging\";\n const result = `${batteryPercent}%${isCharging ? \"+\" : \"\"}`;\n setCachedValue(context.cache, \"battery\", result);\n return result;\n }\n } catch {}\n\n setCachedValue(context.cache, \"battery\", \"\");\n return \"\";\n}\n\n/**\n * Gets system temperature in Celsius\n * Reads from thermal zone or hwmon sensors (Linux only)\n * @param context - Info context with cache\n * @returns Temperature with °C suffix or empty string\n * @example \"45°C\", \"62°C\"\n */\nexport function temperature(context: InfoContext): string {\n const cached = getCachedValue(context.cache, \"temperature\");\n if (cached !== null) return cached;\n\n if (!IS_LINUX) {\n setCachedValue(context.cache, \"temperature\", \"\");\n return \"\";\n }\n\n try {\n const tempSources = [\n \"/sys/class/thermal/thermal_zone0/temp\",\n \"/sys/class/hwmon/hwmon0/temp1_input\",\n \"/sys/class/hwmon/hwmon1/temp1_input\",\n ];\n\n for (const source of tempSources) {\n if (fs.existsSync(source)) {\n const temp = fs.readFileSync(source, \"utf8\").trim();\n const tempC = Math.round(parseInt(temp) / 1000);\n\n if (tempC > 0 && tempC < 150) {\n const result = `${tempC}°C`;\n setCachedValue(context.cache, \"temperature\", result);\n return result;\n }\n }\n }\n } catch {}\n\n setCachedValue(context.cache, \"temperature\", \"\");\n return \"\";\n}\n\n/**\n * Gets count of running system services\n * Uses systemctl or service command (Linux only)\n * @param context - Info context with cache\n * @returns Service count with \"services\" suffix or empty string\n * @example \"125 services\", \"89 services\"\n */\nexport function services_running(context: InfoContext): string {\n const cached = getCachedValue(context.cache, \"services_running\");\n if (cached !== null) return cached;\n\n if (!IS_LINUX) {\n setCachedValue(context.cache, \"services_running\", \"\");\n return \"\";\n }\n\n try {\n let serviceCount = 0;\n\n if (commandExists(\"systemctl\")) {\n const services = execCommand(\n \"systemctl list-units --type=service --state=running --no-pager\"\n );\n serviceCount = services\n .split(\"\\n\")\n .filter((line) => line.includes(\".service\")).length;\n } else if (commandExists(\"service\")) {\n const services = execCommand(\"service --status-all\");\n serviceCount = services\n .split(\"\\n\")\n .filter((line) => line.includes(\"+\")).length;\n }\n\n if (serviceCount > 0) {\n const result = `${serviceCount} services`;\n setCachedValue(context.cache, \"services_running\", result);\n return result;\n }\n } catch {}\n\n setCachedValue(context.cache, \"services_running\", \"\");\n return \"\";\n}\n","/**\n * Software and package-related system information functions\n * @module info/software\n */\n\nimport process from \"process\";\nimport type { InfoContext } from \"../types/internal-types\";\nimport { IS_LINUX } from \"../utils/platform\";\nimport { execCommand, commandExists } from \"../utils/command\";\nimport { getCachedValue, setCachedValue } from \"../cache/cache\";\n\n/**\n * Gets the current shell name\n * Uses ps command to find parent process shell (Linux/Unix only)\n * @returns Shell name or empty string on Windows\n * @example \"bash\", \"zsh\", \"fish\", \"nu\"\n */\nexport function shell(context: InfoContext): string {\n const cached = getCachedValue(context.cache, \"shell\");\n if (cached !== null) return cached;\n\n if (IS_LINUX) {\n try {\n const ppid = process.ppid;\n const shellName = execCommand(`ps -p ${ppid} -o comm=`).split(\"/\").pop();\n if (shellName) {\n setCachedValue(context.cache, \"shell\", shellName);\n return shellName;\n }\n } catch {}\n }\n\n setCachedValue(context.cache, \"shell\", \"\");\n return \"\";\n}\n\n/**\n * Gets available package managers and development tools\n * Checks for package managers (apt, yum, npm, etc.) and editors (nvim, hx)\n * @param context - Info context with cache\n * @returns Space-separated list of available commands\n * @example \"apt npm docker nvim\", \"yay pacman bun hx\"\n */\nexport function packages(context: InfoContext): string {\n const cached = getCachedValue(context.cache, \"packages\");\n if (cached !== null) return cached;\n\n const commands = [\n \"apt\",\n \"npm\",\n \"uv\",\n \"docker\",\n \"hx\",\n \"nvim\",\n \"bun\",\n \"yay\",\n \"pacman\",\n \"yum\",\n \"dnf\",\n \"zypper\",\n \"emerge\",\n \"apk\",\n \"snap\",\n \"flatpak\",\n ];\n const available = commands.filter((cmd) => commandExists(cmd));\n\n const result = available.join(\" \");\n setCachedValue(context.cache, \"packages\", result);\n return result;\n}\n\n/**\n * Gets versions of common software tools\n * @param context - Info context with cache\n * @returns Formatted string of tool versions\n * @example \"node:20.1.0 git:2.34.1\"\n */\nexport function common_versions(context: InfoContext): string {\n const cached = getCachedValue(context.cache, \"common_versions\");\n if (cached !== null) return cached;\n\n const tools = [\n {\n cmd: \"node\",\n args: \"--version\",\n clean: (v: string) => v.replace(/^v/, \"\"),\n },\n {\n cmd: \"git\",\n args: \"--version\",\n clean: (v: string) => v.replace(\"git version \", \"\"),\n },\n {\n cmd: \"docker\",\n args: \"--version\",\n clean: (v: string) => v.replace(/Docker version ([^,]+),.*/, \"$1\"),\n },\n {\n cmd: \"python3\",\n args: \"--version\",\n clean: (v: string) => v.replace(\"Python \", \"\"),\n },\n {\n cmd: \"go\",\n args: \"version\",\n clean: (v: string) => v.replace(\"go version go\", \"\").split(\" \")[0],\n },\n {\n cmd: \"rustc\",\n args: \"--version\",\n clean: (v: string) => v.replace(\"rustc \", \"\").split(\" \")[0],\n },\n ];\n\n const versions: string[] = [];\n\n for (const tool of tools) {\n if (commandExists(tool.cmd)) {\n try {\n const output = execCommand(`${tool.cmd} ${tool.args}`);\n const version = tool.clean(output).trim();\n if (version) {\n versions.push(`${tool.cmd}:${version}`);\n }\n } catch {}\n }\n }\n\n const result = versions.join(\" \");\n setCachedValue(context.cache, \"common_versions\", result);\n return result;\n}\n/**\n * Gets running Docker container names\n * Lists active Docker containers with their names\n * @param context - Info context with cache\n * @returns Space-separated container names or empty string\n * @example \"nginx redis postgres\", \"web-app db-server\"\n */\nexport function containers(context: InfoContext): string {\n const cached = getCachedValue(context.cache, \"containers\");\n if (cached !== null) return cached;\n\n if (!commandExists(\"docker\")) {\n setCachedValue(context.cache, \"containers\", \"\");\n return \"\";\n }\n\n try {\n const containerCount = execCommand(\"docker ps -q\")\n .split(\"\\n\")\n .filter((line) => line.trim()).length;\n if (containerCount === 0) {\n setCachedValue(context.cache, \"containers\", \"\");\n return \"\";\n }\n\n const containers = execCommand(\n 'docker ps --format \"{{.Names}}\\t{{.Ports}}\"'\n );\n const lines = containers.split(\"\\n\").filter((line) => line.trim());\n\n const containerInfo: string[] = [];\n\n lines.forEach((line) => {\n const [name, ports] = line.split(\"\\t\");\n if (name) {\n containerInfo.push(name);\n\n if (ports) {\n const portMatches = ports.match(/->(\\d+(-\\d+)?)\\//g);\n if (portMatches) {\n const uniquePorts = [\n ...new Set(\n portMatches.map((p) => p.replace(/->\\d+(-\\d+)?\\//, \"\"))\n ),\n ];\n containerInfo.push(...uniquePorts);\n }\n }\n }\n });\n\n const result = containerInfo.join(\" \");\n setCachedValue(context.cache, \"containers\", result);\n return result;\n } catch {}\n\n setCachedValue(context.cache, \"containers\", \"\");\n return \"\";\n}\n","/**\n * @fileoverview System Information API\n *\n * A comprehensive cross-platform system information collection API.\n * Provides clean JSON data without formatting, suitable for programmatic use.\n *\n * @module system-info-api\n * @author vtempest\n * @license rights.institute/prosper\n */\n\nimport os from \"os\";\nimport fs from \"fs\";\nimport https from \"https\";\nimport path from \"path\";\nimport type { SystemInfo, SystemInfoOptions } from \"./systeminfo-types\";\nimport { CACHE_FILE } from \"./info/settings\"; // Using CACHE_FILE from settings to ensure consistency\n\n// Import info functions from modules\nimport { user, hostname, os_info, kernel, device } from \"./info/platform\";\nimport { cpu, gpu, screen_resolution, bench, cpu_bench_info } from \"./info/hardware\";\nimport {\n disk_used,\n ram_used,\n memory_available,\n swap_used,\n mount_points,\n} from \"./info/memory\";\nimport { top_process, uptime, users_logged_in } from \"./info/process\";\nimport {\n ip,\n iplocal,\n city,\n domain,\n isp,\n network_interfaces,\n ports,\n} from \"./info/network\";\nimport {\n services_running,\n temperature,\n battery,\n load_average,\n} from \"./info/system-status\";\nimport { shell, packages, containers } from \"./info/software\";\n\n/**\n * Cache duration configuration for different system information types\n * Values are in milliseconds\n */\nconst CACHE_DURATION = {\n ip: 5 * 60 * 1000,\n cpu: 24 * 60 * 60 * 1000,\n gpu: 24 * 60 * 60 * 1000,\n bench: 24 * 60 * 60 * 1000,\n cpu_bench_info: 24 * 60 * 60 * 1000,\n os: 24 * 60 * 60 * 1000,\n device: 24 * 60 * 60 * 1000,\n kernel: 60 * 60 * 1000,\n pacman: 10 * 60 * 1000,\n ports: 5 * 60 * 1000,\n containers: 5 * 60 * 1000,\n top_process: 5 * 1000,\n disk_used: 60 * 1000,\n ram_used: 10 * 1000,\n services_running: 5 * 60 * 1000,\n temperature: 30 * 1000,\n battery: 60 * 1000,\n network_interfaces: 5 * 60 * 1000,\n mount_points: 10 * 60 * 1000,\n};\n\n/**\n * Platform detection constants\n */\nconst IS_WINDOWS = os.platform() === \"win32\";\nconst IS_MAC = os.platform() === \"darwin\";\nconst IS_LINUX = os.platform() === \"linux\";\n\n/**\n * Default IPInfo.io API token for geolocation\n */\nconst DEFAULT_IPINFO_TOKEN = \"da2d6cc4baa5d1\";\n\n/**\n * Default network request timeout in milliseconds\n */\nconst DEFAULT_NETWORK_TIMEOUT = 5000;\n\n/**\n * Represents a cached value with timestamp\n */\ninterface CacheEntry {\n value: any;\n timestamp: number;\n}\n\n/**\n * Cache storage structure\n */\ninterface Cache {\n [key: string]: CacheEntry;\n}\n\n/**\n * IP information from ipinfo.io API\n */\ninterface IPInfo {\n ip?: string;\n city?: string;\n hostname?: string;\n org?: string;\n}\n\n/**\n * Context object passed to info collection functions\n */\ninterface InfoContext {\n cache: Cache;\n ipInfo?: IPInfo;\n}\n\n/**\n * Loads cache from disk\n */\nfunction loadCache(): Cache {\n try {\n if (fs.existsSync(CACHE_FILE)) {\n return JSON.parse(fs.readFileSync(CACHE_FILE, \"utf8\"));\n }\n } catch (error) {\n // Corrupted cache - return empty object\n }\n return {};\n}\n\n/**\n * Saves cache to disk\n */\nfunction saveCache(cache: Cache): void {\n try {\n const cacheDir = path.dirname(CACHE_FILE);\n if (!fs.existsSync(cacheDir)) {\n fs.mkdirSync(cacheDir, { recursive: true });\n }\n fs.writeFileSync(CACHE_FILE, JSON.stringify(cache, null, 2));\n } catch (error) {\n // Silently fail if can't write cache\n }\n}\n\n/**\n * Fetches IP geolocation information from ipinfo.io API\n */\nasync function fetchIPInfo(\n token: string = DEFAULT_IPINFO_TOKEN,\n timeout: number = DEFAULT_NETWORK_TIMEOUT\n): Promise<IPInfo> {\n return new Promise((resolve) => {\n const url = `https://ipinfo.io/json${token ? `?token=${token}` : \"\"}`;\n\n const req = https.get(url, (res) => {\n let data = \"\";\n res.on(\"data\", (chunk) => (data += chunk));\n res.on(\"end\", () => {\n try {\n resolve(JSON.parse(data));\n } catch {\n resolve({});\n }\n });\n });\n\n req.on(\"error\", () => resolve({}));\n req.setTimeout(timeout, () => {\n req.destroy();\n resolve({});\n });\n });\n}\n\n/**\n * System information collection functions map\n */\nexport const infoFunctions = {\n user,\n hostname,\n ip,\n iplocal,\n city,\n domain,\n isp,\n os: os_info, // Mapped from os_info\n cpu,\n gpu,\n bench,\n cpu_bench_info,\n disk_used,\n ram_used,\n top_process,\n uptime,\n device,\n kernel,\n shell,\n pacman: packages, // Mapped from packages\n ports,\n containers,\n memory_available,\n swap_used,\n load_average,\n users_logged_in,\n network_interfaces,\n mount_points,\n services_running,\n temperature,\n battery,\n screen_resolution,\n};\n\n/**\n * Get all system information as a clean JSON object\n */\nexport async function getSystemInfo(\n options: SystemInfoOptions = {}\n): Promise<SystemInfo> {\n const cache = loadCache();\n const context: InfoContext = { cache };\n\n // Check if we need IP info\n // Some functions need IP info, so we fetch it once if needed by any function\n // For now we always try to fetch it if not cached, as ip/city/etc depend on it\n // Optimization: check if we actually need to run those functions based on options if provided\n // But current implementation fetches it always if missing from cache\n\n const cachedIPInfo = cache[\"ipInfo\"]?.value;\n if (cachedIPInfo) {\n context.ipInfo = cachedIPInfo;\n } else {\n context.ipInfo = await fetchIPInfo();\n // Cache IP info itself\n cache[\"ipInfo\"] = {\n value: context.ipInfo,\n timestamp: Date.now(),\n };\n }\n\n // Collect all system information\n const info: Partial<SystemInfo> = {\n timestamp: new Date().toISOString(),\n platform: IS_WINDOWS\n ? \"windows\"\n : IS_MAC\n ? \"macos\"\n : IS_LINUX\n ? \"linux\"\n : \"unknown\",\n };\n\n // Call all info functions\n for (const [key, fn] of Object.entries(infoFunctions)) {\n try {\n // most functions are sync but some are async (ip related)\n const value = await fn(context);\n info[key as keyof SystemInfo] = value as any;\n } catch (error) {\n info[key as keyof SystemInfo] = \"\" as any;\n }\n }\n\n saveCache(cache);\n\n return info as SystemInfo;\n}\n\nexport { loadCache, saveCache };\n"],"names":["process$1","SETTINGS_FILE","path","os","CACHE_FILE","colors","DEFAULT_SETTINGS","process","loadSettings","fs","settings","saveSettings","configDir","IS_WINDOWS","IS_MAC","IS_LINUX","execCommand","command","options","cmd","execSync","commandExists","CACHE_DURATION","isCacheValid","cacheEntry","key","age","maxAge","getCachedValue","cache","setCachedValue","value","user","hostname","os_info","context","cached","platform","release","osName","match","osRelease","nameMatch","versionMatch","kernel","device","ps","dmiPath","__vite_glob_1_0","__vite_glob_1_1","__vite_glob_1_2","__vite_glob_1_3","__vite_glob_1_4","__vite_glob_1_5","__vite_glob_1_6","isArray","getTag","baseToString","result","toString","isString","isNumber","isBoolean","isObjectLike","isObject","isDefined","isBlank","INCORRECT_INDEX_TYPE","INVALID_DOC_INDEX","LOGICAL_SEARCH_INVALID_QUERY_FOR_KEY","PATTERN_LENGTH_TOO_LARGE","max","MISSING_KEY_PROPERTY","name","INVALID_KEY_WEIGHT_VALUE","FUSE_MATCH_TOKEN_SEARCH_UNSUPPORTED","hasOwn","KeyStore","keys","totalWeight","obj","createKey","keyId","id","src","weight","getFn","createKeyPath","createKeyId","get","list","arr","deepGet","index","arrayIndex","i","len","MatchOptions","BasicOptions","a","b","FuzzyOptions","AdvancedOptions","Config","isWordSeparator","code","norm","mantissa","m","numTokens","inWord","FuseIndex","fieldNormWeight","docs","records","idx","recordCount","record","doc","docIndex","indices","toRemove","v","r","sorted","lo","hi","mid","item","keyIndex","keyLen","subRecords","subRecord","text","createIndex","myIndex","parseIndex","data","convertMaskToIndices","matchmask","minMatchCharLength","start","end","search","pattern","patternAlphabet","location","distance","threshold","findAllMatches","includeMatches","ignoreLocation","patternLen","textLen","expectedLocation","currentThreshold","bestLocation","calcScore","errors","currentLocation","accuracy","proximity","computeMatches","matchMask","score","lastBitArr","finalScore","bestErrors","binMax","mask","binMin","binMid","finish","bitArr","j","charMatch","matchEnd","k","createPatternAlphabet","char","mergeIndices","merged","last","curr","NON_DECOMPOSABLE_MAP","NON_DECOMPOSABLE_RE","stripDiacritics","str","ch","BitapSearch","isCaseSensitive","ignoreDiacritics","addChunk","startIndex","remainder","allIndices","totalScore","hasMatches","alphabet","isMatch","MULTI_MATCH_TYPES","isInverse","type","matchers","bitap","matchersLen","ESCAPED_PIPE","OR_TOKEN","tokenize","tokens","next","getMatch","exp","matches","parseQuery","query","results","queryItem","found","def","token","ExtendedSearch","_","numMatches","hasInverse","qLen","searchers","pLen","matcher","registeredSearchers","register","args","createSearcher","searcherClass","LogicalOperator","KeyType","isExpression","isPath","isLeaf","convertToExplicit","parse","auto","isQueryPath","node","computeScoreSingle","ignoreFieldNorm","computeScore","MaxHeap","limit","comparator","heap","parent","tmp","largest","left","right","formatMatches","format","includeScore","DEFAULT_TOKEN","warned","warnNonGlobal","regex","resolveTokenize","validated","createAnalyzer","tokenizeFn","TokenSearch","queryTerms","df","fieldCount","term","docFreq","idf","weightedScore","maxPossibleScore","matchedCount","matchedMask","matchedTerms","normalized","searchResult","addField","docIdx","analyzer","distinctTerms","perDocTerms","ingestRecord","keyCount","fields","keyIdx","sub","buildInvertedIndex","addToInvertedIndex","removeFromInvertedIndex","hits","removeAndShiftInvertedIndex","removedIndices","shift","oldIdx","firstRemoved","shiftedDocFieldCount","oldKey","count","shiftedDocTermFieldHits","terms","Fuse","searcher","predicate","indicesToRemove","shouldSort","sortFn","useHeap","stable","requireAllTokens","expression","evaluate","children","operator","res","child","resultMap","expResults","anyKeyFailed","keyMatches","termCount","coverage","t","plugins","plugin","entry_default","cpu","cpuName","modelMatch","cpuInfo","hardwareMatch","cpus","gpu","gpuMatch","bracketMatch","screen_resolution","resolutionMatch","bench","benchmarkPath","benchmarkFile","url","__vite_glob_0_0","__vite_glob_0_1","__vite_glob_0_2","__vite_glob_0_3","__vite_glob_0_4","__vite_glob_0_5","__vite_glob_0_6","benchmarkData","cpuList","rank","cpu_bench_info","arch","ram_used","meminfo","totalMatch","freeMatch","totalMB","freeMB","usedMB","totalGB","totalMem","freeMem","usedMem","memory_available","availableMatch","swap_used","swapTotalMatch","swapFreeMatch","swapTotal","swapFree","swapUsed","swapUsedPercent","swapUsedMB","disk_used","diskUsage","lines","line","parts","percentIndex","part","rootMatch","mount_points","mountPoints","mountPoint","usage","top_process","topProcess","uptime","uptimeSeconds","days","hours","minutes","users_logged_in","users","ip","iplocal","wlanMatch","ipAddr","addresses","interfaces","city","domain","isp","network_interfaces","activeInterfaces","addrs","addr","ports","portMatch","port","load_average","battery","batteryPath","capacityPath","statusPath","capacity","status","temperature","tempSources","source","temp","tempC","services_running","serviceCount","shell","ppid","shellName","packages","containers","containerInfo","portMatches","uniquePorts","p","DEFAULT_IPINFO_TOKEN","DEFAULT_NETWORK_TIMEOUT","loadCache","saveCache","cacheDir","fetchIPInfo","timeout","resolve","req","https","chunk","infoFunctions","getSystemInfo","cachedIPInfo","info","fn"],"mappings":"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","x_google_ignoreList":[14]}
|
|
1
|
+
{"version":3,"file":"system-info-api-DCP1ZJVR.js","sources":["../__vite-browser-external","../src/info/settings.ts","../src/utils/platform.ts","../src/utils/command.ts","../src/cache/cache-config.ts","../src/cache/cache.ts","../src/info/platform.ts","../src/info/memory.ts?url","../src/info/network.ts?url","../src/info/platform.ts?url","../src/info/process.ts?url","../src/info/settings.ts?url","../src/info/software.ts?url","../src/info/system-status.ts?url","../node_modules/fuse.js/dist/fuse.mjs","../src/info/hardware.ts","../src/info/memory.ts","../src/info/process.ts","../src/info/network.ts","../src/info/system-status.ts","../src/info/software.ts","../src/system-info-api.ts"],"sourcesContent":["export default {}","/**\n * Settings configuration and management\n * @module info/settings\n */\n\nimport path from \"path\";\nimport os from \"os\";\nimport fs from \"fs\";\nimport process from \"process\";\n\n// Settings file paths\nexport const SETTINGS_FILE = path.join(\n os.homedir(),\n \".config\",\n \"systeminfo-settings.json\",\n);\nexport const CACHE_FILE = path.join(os.tmpdir(), \"systeminfo-cache.json\");\n\n// Color codes\nexport const colors = {\n reset: \"\\x1b[0m\",\n red: \"\\x1b[38;5;196m\",\n orange: \"\\x1b[38;5;208m\",\n yellow: \"\\x1b[38;5;226m\",\n green: \"\\x1b[38;5;46m\",\n blue: \"\\x1b[38;5;39m\",\n cyan: \"\\x1b[38;5;51m\",\n purple: \"\\x1b[38;5;171m\",\n magenta: \"\\x1b[38;5;213m\",\n gray: \"\\x1b[38;5;250m\",\n lightblue: \"\\x1b[38;5;220m\",\n};\n\n// Default settings\nexport const DEFAULT_SETTINGS = {\n display_order: [\n [\"user\", \"hostname\", \"os\", \"device\", \"kernel\", \"cpu\", \"gpu\", \"bench\"],\n [\n \"disk_used\",\n \"ram_used\",\n \"top_process\",\n \"uptime\",\n \"temperature\",\n \"battery\",\n \"load_average\",\n ],\n [\"ip\", \"iplocal\", \"city\", \"domain\", \"isp\"],\n [\"shell\", \"services_running\", \"pacman\", \"containers\"],\n ],\n colors: {\n user: \"red\",\n hostname: \"orange\",\n disk_used: \"purple\",\n ram_used: \"yellow\",\n top_process: \"magenta\",\n uptime: \"cyan\",\n ip: \"green\",\n iplocal: \"yellow\",\n city: \"green\",\n domain: \"gray\",\n isp: \"lightblue\",\n os: \"gray\",\n cpu: \"orange\",\n gpu: \"yellow\",\n bench: \"red\",\n device: \"yellow\",\n kernel: \"green\",\n shell: \"orange\",\n pacman: \"multicolor\",\n ports: \"multicolor\",\n containers: \"green\",\n memory_available: \"blue\",\n swap_used: \"purple\",\n load_average: \"red\",\n users_logged_in: \"cyan\",\n network_interfaces: \"yellow\",\n mount_points: \"gray\",\n services_running: \"green\",\n temperature: \"red\",\n battery: \"green\",\n screen_resolution: \"blue\",\n },\n emojis: {\n user: \"👤 \",\n hostname: \"🏠 \",\n ip: \"🌎 \",\n iplocal: \"🌐 \",\n city: \"📍 \",\n domain: \"🔗 \",\n isp: \"👮 \",\n os: \"⚡ \",\n cpu: \"📈 \",\n gpu: \"🎮 \",\n bench: \"💪 \",\n device: \"💻 \",\n kernel: \"🔧 \",\n shell: \"🐚 \",\n pacman: \"🚀 \",\n disk_used: \"📁 \",\n ram_used: \"💾 \",\n top_process: \"🔝 \",\n uptime: \"⏱️ \",\n ports: \"🔌 \",\n containers: \"📦 \",\n memory_available: \"🧠 \",\n swap_used: \"🔄 \",\n load_average: \"⚖️ \",\n users_logged_in: \"👥 \",\n network_interfaces: \"🌐 \",\n mount_points: \"📂 \",\n services_running: \"⚙️ \",\n temperature: \"🌡️ \",\n battery_charging: \"🔌 \",\n battery: \"🔋 \",\n screen_resolution: \"🖥️ \",\n },\n labels: {\n user: \"User\",\n hostname: \"Host\",\n ip: \"IP\",\n iplocal: \"Local IP\",\n city: \"City\",\n domain: \"Domain\",\n isp: \"ISP\",\n os: \"OS\",\n cpu: \"CPU\",\n gpu: \"GPU\",\n bench: \"Bench\",\n device: \"Device\",\n kernel: \"Kernel\",\n shell: \"Shell\",\n pacman: \"Packages\",\n disk_used: \"Disk\",\n ram_used: \"RAM\",\n top_process: \"Top\",\n uptime: \"Uptime\",\n ports: \"Ports\",\n containers: \"Containers\",\n memory_available: \"Memory\",\n swap_used: \"Swap\",\n load_average: \"Load\",\n users_logged_in: \"Users\",\n network_interfaces: \"Network\",\n mount_points: \"Mounts\",\n services_running: \"Services\",\n temperature: \"Temp\",\n battery_charging: \"Battery\",\n battery: \"Battery\",\n screen_resolution: \"Resolution\",\n },\n display: {\n show_emojis: true,\n single_line: false,\n line_wrap_length: process?.stdout?.columns || 100,\n },\n network: {\n show_offline_message: true,\n },\n advanced: {\n debug: false,\n },\n};\n\nexport interface Settings {\n display_order: string[][];\n colors: Record<string, string>;\n emojis: Record<string, string>;\n labels: Record<string, string>;\n display: {\n show_emojis: boolean;\n single_line: boolean;\n line_wrap_length: number;\n };\n network: {\n show_offline_message: boolean;\n };\n advanced: {\n debug: boolean;\n };\n}\n\n/**\n * Loads settings from the configuration file\n * @returns Settings object (defaults merged with user settings)\n */\nexport function loadSettings(): Settings {\n try {\n if (fs.existsSync(SETTINGS_FILE)) {\n const settings = JSON.parse(fs.readFileSync(SETTINGS_FILE, \"utf8\"));\n return { ...DEFAULT_SETTINGS, ...settings };\n }\n } catch {}\n return DEFAULT_SETTINGS;\n}\n\n/**\n * Saves settings to the configuration file\n * @param settings - The settings object to save\n * @returns True if successful, false otherwise\n */\nexport function saveSettings(settings: Settings): boolean {\n try {\n const configDir = path.dirname(SETTINGS_FILE);\n if (!fs.existsSync(configDir)) {\n fs.mkdirSync(configDir, { recursive: true });\n }\n fs.writeFileSync(SETTINGS_FILE, JSON.stringify(settings, null, 2));\n return true;\n } catch {\n return false;\n }\n}\n","/**\n * Platform detection utilities\n * @module platform\n */\n\nimport os from \"os\";\n\n/**\n * Platform detection constants\n */\nexport const IS_WINDOWS = os.platform() === \"win32\";\nexport const IS_MAC = os.platform() === \"darwin\";\nexport const IS_LINUX = os.platform() === \"linux\";\n","/**\n * Command execution utilities\n * @module command\n */\n\nimport { execSync } from \"child_process\";\nimport { IS_WINDOWS } from \"./platform\";\n\n/**\n * Executes a shell command safely with timeout\n * @param {string} command - Command to execute\n * @param {object} options - Additional options for execSync\n * @returns {string} Command output or empty string on error\n */\nexport function execCommand(command: string, options = {}): string {\n try {\n const cmd = IS_WINDOWS ? `cmd /c ${command}` : command;\n return execSync(cmd, {\n encoding: \"utf8\",\n timeout: 10000,\n stdio: [\"pipe\", \"pipe\", \"ignore\"],\n ...options,\n })\n .toString()\n .trim();\n } catch (error) {\n return \"\";\n }\n}\n\n/**\n * Checks if a command exists in the system PATH\n * @param {string} command - Command name to check\n * @returns {boolean} True if command exists\n */\nexport function commandExists(command: string): boolean {\n try {\n if (IS_WINDOWS) {\n execSync(`where ${command}`, { stdio: \"ignore\" });\n } else {\n execSync(`which ${command}`, { stdio: \"ignore\" });\n }\n return true;\n } catch {\n return false;\n }\n}\n","/**\n * Cache configuration and constants\n * @module cache-config\n */\n\nimport os from \"os\";\nimport path from \"path\";\n\n/**\n * Cache file location in system's temporary directory\n * @constant\n */\nexport const CACHE_FILE = path.join(os.tmpdir(), \"systeminfo-cache.json\");\n\n/**\n * Cache duration configuration for different system information types\n * Values are in milliseconds\n *\n * @constant\n * @property {number} ip - IP information cache (5 minutes)\n * @property {number} cpu - CPU information cache (24 hours)\n * @property {number} gpu - GPU information cache (24 hours)\n * @property {number} os - OS information cache (24 hours)\n * @property {number} device - Device information cache (24 hours)\n * @property {number} kernel - Kernel information cache (1 hour)\n * @property {number} pacman - Package managers cache (10 minutes)\n * @property {number} ports - Open ports cache (5 minutes)\n * @property {number} containers - Docker containers cache (5 minutes)\n * @property {number} top_process - Top process cache (5 seconds)\n * @property {number} disk_used - Disk usage cache (1 minute)\n * @property {number} ram_used - RAM usage cache (10 seconds)\n * @property {number} services_running - Services cache (5 minutes)\n * @property {number} temperature - Temperature cache (30 seconds)\n * @property {number} battery - Battery status cache (1 minute)\n * @property {number} network_interfaces - Network interfaces cache (5 minutes)\n * @property {number} mount_points - Mount points cache (10 minutes)\n */\nexport const CACHE_DURATION = {\n ip: 5 * 60 * 1000,\n cpu: 24 * 60 * 60 * 1000,\n gpu: 24 * 60 * 60 * 1000,\n os: 24 * 60 * 60 * 1000,\n device: 24 * 60 * 60 * 1000,\n kernel: 60 * 60 * 1000,\n pacman: 10 * 60 * 1000,\n ports: 5 * 60 * 1000,\n containers: 5 * 60 * 1000,\n top_process: 5 * 1000,\n disk_used: 60 * 1000,\n ram_used: 10 * 1000,\n services_running: 5 * 60 * 1000,\n temperature: 30 * 1000,\n battery: 60 * 1000,\n network_interfaces: 5 * 60 * 1000,\n mount_points: 10 * 60 * 1000,\n};\n\n/**\n * Default IPInfo.io API token for geolocation\n * @constant\n */\nexport const DEFAULT_IPINFO_TOKEN = \"da2d6cc4baa5d1\";\n\n/**\n * Default network request timeout in milliseconds\n * @constant\n */\nexport const DEFAULT_NETWORK_TIMEOUT = 5000;\n","/**\n * Cache management utilities\n * @module cache\n */\n\nimport fs from \"fs\";\nimport { CACHE_FILE, CACHE_DURATION } from \"./cache-config\";\n\n/**\n * Represents a cached value with timestamp\n * @interface CacheEntry\n */\nexport interface CacheEntry {\n /** The cached value */\n value: any;\n /** Unix timestamp when the value was cached */\n timestamp: number;\n}\n\n/**\n * Cache storage structure\n * @interface Cache\n */\nexport interface Cache {\n [key: string]: CacheEntry;\n}\n\n/**\n * Loads cache from disk\n * @returns {Cache} Cached data or empty object if cache doesn't exist or is corrupted\n */\nexport function loadCache(): Cache {\n try {\n if (fs.existsSync(CACHE_FILE)) {\n return JSON.parse(fs.readFileSync(CACHE_FILE, \"utf8\"));\n }\n } catch (error) {\n // Corrupted cache - return empty object\n }\n return {};\n}\n\n/**\n * Saves cache to disk\n * @param {Cache} cache - Cache object to save\n */\nexport function saveCache(cache: Cache): void {\n try {\n fs.writeFileSync(CACHE_FILE, JSON.stringify(cache, null, 2));\n } catch (error) {\n // Silently fail if can't write cache\n }\n}\n\n/**\n * Checks if a cache entry is still valid based on configured duration\n * @param {CacheEntry} cacheEntry - The cache entry to validate\n * @param {string} key - The key name to determine cache duration\n * @returns {boolean} True if cache is still valid\n */\nexport function isCacheValid(cacheEntry: CacheEntry, key: string): boolean {\n if (!cacheEntry || !cacheEntry.timestamp) return false;\n const age = Date.now() - cacheEntry.timestamp;\n const maxAge = CACHE_DURATION[key as keyof typeof CACHE_DURATION] || 60000;\n return age < maxAge;\n}\n\n/**\n * Retrieves a value from cache if valid\n * @param {Cache} cache - Cache object\n * @param {string} key - Key to retrieve\n * @returns {any} Cached value or null if not found/expired\n */\nexport function getCachedValue(cache: Cache, key: string): any {\n if (!cache[key]) return null;\n const cacheEntry = cache[key];\n if (!isCacheValid(cacheEntry, key)) {\n delete cache[key];\n return null;\n }\n return cacheEntry.value;\n}\n\n/**\n * Stores a value in cache with current timestamp\n * @param {Cache} cache - Cache object\n * @param {string} key - Key to store under\n * @param {any} value - Value to cache\n */\nexport function setCachedValue(cache: Cache, key: string, value: any): void {\n cache[key] = {\n value,\n timestamp: Date.now(),\n };\n}\n","/**\n * Platform-related system information functions\n * @module info/platform\n */\n\nimport os from \"os\";\nimport fs from \"fs\";\nimport type { InfoContext } from \"../types/internal-types\";\nimport { IS_WINDOWS, IS_MAC, IS_LINUX } from \"../utils/platform\";\nimport { execCommand, commandExists } from \"../utils/command\";\nimport { getCachedValue, setCachedValue } from \"../cache/cache\";\n\n/**\n * Gets the current username\n * @returns Current system username\n */\nexport function user(): string {\n return os.userInfo().username;\n}\n\n/**\n * Gets the system hostname\n * @returns Computer hostname/network name\n */\nexport function hostname(): string {\n return os.hostname();\n}\n\n/**\n * Gets operating system name and version\n * Platform-specific detection for Windows, macOS, and Linux\n * @param context - Info context with cache\n * @returns OS name and version string\n * @example \"Windows 11 Pro\", \"macOS Ventura 13.2.1\", \"Ubuntu 22.04.3 LTS\"\n */\nexport function os_info(context: InfoContext): string {\n const cached = getCachedValue(context.cache, \"os\");\n if (cached) return cached;\n\n const platform = os.platform();\n const release = os.release();\n let osName = \"\";\n\n if (IS_WINDOWS) {\n try {\n const version = execCommand(\"ver\");\n const match = version.match(/Microsoft Windows \\[Version ([^\\]]+)\\]/);\n osName = match ? `Windows ${match[1]}` : `Windows ${release}`;\n } catch {\n osName = `Windows ${release}`;\n }\n } else if (IS_MAC) {\n osName = `macOS ${release}`;\n } else if (IS_LINUX) {\n try {\n const osRelease = fs.readFileSync(\"/etc/os-release\", \"utf8\");\n const nameMatch = osRelease.match(/^NAME=\"([^\"]+)\"/m);\n const versionMatch = osRelease.match(/^VERSION_ID=\"([^\"]+)\"/m);\n osName = nameMatch ? nameMatch[1] : \"Linux\";\n if (versionMatch) osName += ` ${versionMatch[1]}`;\n } catch {\n osName = `Linux ${release}`;\n }\n } else {\n osName = `${platform} ${release}`;\n }\n\n setCachedValue(context.cache, \"os\", osName);\n return osName;\n}\n\n/**\n * Gets kernel version string\n * Returns the operating system kernel version from os.release()\n * @param context - Info context with cache\n * @returns Kernel version string\n * @example \"5.15.0-56-generic\", \"6.11.11-valve12-1-neptune\"\n */\nexport function kernel(context: InfoContext): string {\n const cached = getCachedValue(context.cache, \"kernel\");\n if (cached) return cached;\n\n const kernel = os.release();\n setCachedValue(context.cache, \"kernel\", kernel);\n return kernel;\n}\n\n/**\n * Gets device or computer model name\n * Uses WMI on Windows, DMI on Linux, getprop on Android\n * @param context - Info context with cache\n * @returns Device model name or empty string\n * @example \"Dell OptiPlex 7090\", \"MacBook Pro 16-inch\", \"Valve Steam Deck\"\n */\nexport function device(context: InfoContext): string {\n const cached = getCachedValue(context.cache, \"device\");\n if (cached !== null) return cached;\n\n if (IS_WINDOWS) {\n try {\n const wmic = execCommand(\"wmic csproduct get name /format:list\");\n const nameMatch = wmic.match(/Name=(.+)/);\n if (nameMatch) {\n const device = nameMatch[1].trim();\n if (device && device !== \"\") {\n setCachedValue(context.cache, \"device\", device);\n return device;\n }\n }\n } catch {}\n\n try {\n const ps = execCommand(\n 'powershell.exe -Command \"Get-WmiObject -Class Win32_ComputerSystem | Select-Object -ExpandProperty Model\"'\n );\n if (ps.trim()) {\n const device = ps.trim();\n setCachedValue(context.cache, \"device\", device);\n return device;\n }\n } catch {}\n } else if (IS_LINUX) {\n try {\n if (commandExists(\"getprop\")) {\n const device = execCommand(\"getprop ro.product.model\");\n if (device) {\n setCachedValue(context.cache, \"device\", device);\n return device;\n }\n }\n\n const dmiPath = \"/sys/devices/virtual/dmi/id/product_name\";\n if (fs.existsSync(dmiPath)) {\n const device = fs.readFileSync(dmiPath, \"utf8\").trim();\n if (device) {\n setCachedValue(context.cache, \"device\", device);\n return device;\n }\n }\n } catch {}\n }\n\n setCachedValue(context.cache, \"device\", \"\");\n return \"\";\n}\n","export default \"data:video/mp2t;base64,LyoqCiAqIE1lbW9yeSBhbmQgZGlzay1yZWxhdGVkIHN5c3RlbSBpbmZvcm1hdGlvbiBmdW5jdGlvbnMKICogQG1vZHVsZSBpbmZvL21lbW9yeQogKi8KCmltcG9ydCBvcyBmcm9tICJvcyI7CmltcG9ydCBmcyBmcm9tICJmcyI7CmltcG9ydCB0eXBlIHsgSW5mb0NvbnRleHQgfSBmcm9tICIuLi90eXBlcy9pbnRlcm5hbC10eXBlcyI7CmltcG9ydCB7IElTX0xJTlVYIH0gZnJvbSAiLi4vdXRpbHMvcGxhdGZvcm0iOwppbXBvcnQgeyBleGVjQ29tbWFuZCB9IGZyb20gIi4uL3V0aWxzL2NvbW1hbmQiOwppbXBvcnQgeyBnZXRDYWNoZWRWYWx1ZSwgc2V0Q2FjaGVkVmFsdWUgfSBmcm9tICIuLi9jYWNoZS9jYWNoZSI7CgovKioKICogR2V0cyBtZW1vcnkgdXNhZ2UgaW4gZ2lnYWJ5dGVzCiAqIFJlYWRzIGZyb20gL3Byb2MvbWVtaW5mbyBvbiBMaW51eCwgZmFsbHMgYmFjayB0byBvcy50b3RhbG1lbSgpCiAqIEBwYXJhbSBjb250ZXh0IC0gSW5mbyBjb250ZXh0IHdpdGggY2FjaGUKICogQHJldHVybnMgTWVtb3J5IHVzYWdlIGFzICJ1c2VkL3RvdGFsIEdCIgogKiBAZXhhbXBsZSAiMTIvMzJHQiIsICI2LzE2R0IiCiAqLwpleHBvcnQgZnVuY3Rpb24gcmFtX3VzZWQoY29udGV4dDogSW5mb0NvbnRleHQpOiBzdHJpbmcgewogIGNvbnN0IGNhY2hlZCA9IGdldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJyYW1fdXNlZCIpOwogIGlmIChjYWNoZWQpIHJldHVybiBjYWNoZWQ7CgogIGlmIChJU19MSU5VWCkgewogICAgdHJ5IHsKICAgICAgY29uc3QgbWVtaW5mbyA9IGZzLnJlYWRGaWxlU3luYygiL3Byb2MvbWVtaW5mbyIsICJ1dGY4Iik7CiAgICAgIGNvbnN0IHRvdGFsTWF0Y2ggPSBtZW1pbmZvLm1hdGNoKC9NZW1Ub3RhbDpccysoXGQrKSBrQi8pOwogICAgICBjb25zdCBmcmVlTWF0Y2ggPSBtZW1pbmZvLm1hdGNoKC9NZW1GcmVlOlxzKyhcZCspIGtCLyk7CgogICAgICBpZiAodG90YWxNYXRjaCAmJiBmcmVlTWF0Y2gpIHsKICAgICAgICBjb25zdCB0b3RhbE1CID0gTWF0aC5yb3VuZChwYXJzZUludCh0b3RhbE1hdGNoWzFdKSAvIDEwMjQpOwogICAgICAgIGNvbnN0IGZyZWVNQiA9IE1hdGgucm91bmQocGFyc2VJbnQoZnJlZU1hdGNoWzFdKSAvIDEwMjQpOwogICAgICAgIGNvbnN0IHVzZWRNQiA9IHRvdGFsTUIgLSBmcmVlTUI7CgogICAgICAgIGNvbnN0IHRvdGFsR0IgPSBNYXRoLnJvdW5kKHRvdGFsTUIgLyAxMDI0KTsKICAgICAgICBjb25zdCB1c2VkR0IgPSBNYXRoLnJvdW5kKHVzZWRNQiAvIDEwMjQpOwoKICAgICAgICBjb25zdCByZXN1bHQgPSBgJHt1c2VkR0J9LyR7dG90YWxHQn1HQmA7CiAgICAgICAgc2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgInJhbV91c2VkIiwgcmVzdWx0KTsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICB9CiAgICB9IGNhdGNoIHt9CiAgfQoKICBjb25zdCB0b3RhbE1lbSA9IG9zLnRvdGFsbWVtKCk7CiAgY29uc3QgZnJlZU1lbSA9IG9zLmZyZWVtZW0oKTsKICBjb25zdCB1c2VkTWVtID0gdG90YWxNZW0gLSBmcmVlTWVtOwoKICBjb25zdCB0b3RhbEdCID0gTWF0aC5yb3VuZCh0b3RhbE1lbSAvICgxMDI0ICogMTAyNCAqIDEwMjQpKTsKICBjb25zdCB1c2VkR0IgPSBNYXRoLnJvdW5kKHVzZWRNZW0gLyAoMTAyNCAqIDEwMjQgKiAxMDI0KSk7CgogIGNvbnN0IHJlc3VsdCA9IGAke3VzZWRHQn0vJHt0b3RhbEdCfUdCYDsKICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAicmFtX3VzZWQiLCByZXN1bHQpOwogIHJldHVybiByZXN1bHQ7Cn0KCi8qKgogKiBHZXRzIGF2YWlsYWJsZSBtZW1vcnkgaW4gZ2lnYWJ5dGVzCiAqIFJlYWRzIE1lbUF2YWlsYWJsZSBmcm9tIC9wcm9jL21lbWluZm8gKExpbnV4IG9ubHkpCiAqIEByZXR1cm5zIEF2YWlsYWJsZSBtZW1vcnkgd2l0aCAiR0IgYXZhaWxhYmxlIiBzdWZmaXggb3IgZW1wdHkgc3RyaW5nCiAqIEBleGFtcGxlICIxMkdCIGF2YWlsYWJsZSIsICI0R0IgYXZhaWxhYmxlIgogKi8KZXhwb3J0IGZ1bmN0aW9uIG1lbW9yeV9hdmFpbGFibGUoKTogc3RyaW5nIHsKICBpZiAoIUlTX0xJTlVYKSByZXR1cm4gIiI7CgogIHRyeSB7CiAgICBjb25zdCBtZW1pbmZvID0gZnMucmVhZEZpbGVTeW5jKCIvcHJvYy9tZW1pbmZvIiwgInV0ZjgiKTsKICAgIGNvbnN0IGF2YWlsYWJsZU1hdGNoID0gbWVtaW5mby5tYXRjaCgvTWVtQXZhaWxhYmxlOlxzKyhcZCspIGtCLyk7CiAgICBpZiAoYXZhaWxhYmxlTWF0Y2gpIHsKICAgICAgY29uc3QgYXZhaWxhYmxlR0IgPSBNYXRoLnJvdW5kKHBhcnNlSW50KGF2YWlsYWJsZU1hdGNoWzFdKSAvIDEwMjQgLyAxMDI0KTsKICAgICAgcmV0dXJuIGAke2F2YWlsYWJsZUdCfUdCIGF2YWlsYWJsZWA7CiAgICB9CiAgfSBjYXRjaCB7fQogIHJldHVybiAiIjsKfQoKLyoqCiAqIEdldHMgc3dhcCBtZW1vcnkgdXNhZ2UKICogQ2FsY3VsYXRlcyBzd2FwIHVzYWdlIGZyb20gL3Byb2MvbWVtaW5mbyAoTGludXggb25seSkKICogQHJldHVybnMgU3dhcCB1c2FnZSBhcyAicGVyY2VudGFnZSAoc2l6ZSBNQikgc3dhcCIgb3IgZW1wdHkgc3RyaW5nCiAqIEBleGFtcGxlICIxNSUgKDUxMk1CKSBzd2FwIiwgIjAlICgwTUIpIHN3YXAiCiAqLwpleHBvcnQgZnVuY3Rpb24gc3dhcF91c2VkKCk6IHN0cmluZyB7CiAgaWYgKCFJU19MSU5VWCkgcmV0dXJuICIiOwoKICB0cnkgewogICAgY29uc3QgbWVtaW5mbyA9IGZzLnJlYWRGaWxlU3luYygiL3Byb2MvbWVtaW5mbyIsICJ1dGY4Iik7CiAgICBjb25zdCBzd2FwVG90YWxNYXRjaCA9IG1lbWluZm8ubWF0Y2goL1N3YXBUb3RhbDpccysoXGQrKSBrQi8pOwogICAgY29uc3Qgc3dhcEZyZWVNYXRjaCA9IG1lbWluZm8ubWF0Y2goL1N3YXBGcmVlOlxzKyhcZCspIGtCLyk7CgogICAgaWYgKHN3YXBUb3RhbE1hdGNoICYmIHN3YXBGcmVlTWF0Y2gpIHsKICAgICAgY29uc3Qgc3dhcFRvdGFsID0gcGFyc2VJbnQoc3dhcFRvdGFsTWF0Y2hbMV0pOwogICAgICBjb25zdCBzd2FwRnJlZSA9IHBhcnNlSW50KHN3YXBGcmVlTWF0Y2hbMV0pOwogICAgICBjb25zdCBzd2FwVXNlZCA9IHN3YXBUb3RhbCAtIHN3YXBGcmVlOwoKICAgICAgaWYgKHN3YXBUb3RhbCA+IDApIHsKICAgICAgICBjb25zdCBzd2FwVXNlZFBlcmNlbnQgPSBNYXRoLnJvdW5kKChzd2FwVXNlZCAvIHN3YXBUb3RhbCkgKiAxMDApOwogICAgICAgIGNvbnN0IHN3YXBVc2VkTUIgPSBNYXRoLnJvdW5kKHN3YXBVc2VkIC8gMTAyNCk7CiAgICAgICAgcmV0dXJuIGAke3N3YXBVc2VkUGVyY2VudH0lICgke3N3YXBVc2VkTUJ9TUIpIHN3YXBgOwogICAgICB9CiAgICB9CiAgfSBjYXRjaCB7fQogIHJldHVybiAiIjsKfQoKLyoqCiAqIEdldHMgcm9vdCBmaWxlc3lzdGVtIGRpc2sgdXNhZ2UgcGVyY2VudGFnZQogKiBVc2VzIGRmIGNvbW1hbmQgb24gTGludXgvQW5kcm9pZAogKiBAcGFyYW0gY29udGV4dCAtIEluZm8gY29udGV4dCB3aXRoIGNhY2hlCiAqIEByZXR1cm5zIFBlcmNlbnRhZ2Ugc3RyaW5nIG9yIGVtcHR5IHN0cmluZwogKiBAZXhhbXBsZSAiNDUlIiwgIjc4JSIKICovCmV4cG9ydCBmdW5jdGlvbiBkaXNrX3VzZWQoY29udGV4dDogSW5mb0NvbnRleHQpOiBzdHJpbmcgewogIGNvbnN0IGNhY2hlZCA9IGdldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJkaXNrX3VzZWQiKTsKICBpZiAoY2FjaGVkICE9PSBudWxsKSByZXR1cm4gY2FjaGVkOwoKICBpZiAoSVNfTElOVVgpIHsKICAgIHRyeSB7CiAgICAgIGNvbnN0IGRmID0gZXhlY0NvbW1hbmQoImRmIC1oIik7CiAgICAgIGxldCBkaXNrVXNhZ2UgPSAiIjsKCiAgICAgIGlmIChkZi5pbmNsdWRlcygiL3N0b3JhZ2UvZW11bGF0ZWQiKSkgewogICAgICAgIGNvbnN0IG1hdGNoID0gZGYubWF0Y2goL1xzKyhcZCslKVxzK1wvc3RvcmFnZVwvZW11bGF0ZWQvKTsKICAgICAgICBkaXNrVXNhZ2UgPSBtYXRjaCA/IG1hdGNoWzFdIDogIiI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY29uc3QgbGluZXMgPSBkZi5zcGxpdCgiXG4iKTsKICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHsKICAgICAgICAgIGlmIChsaW5lLnRyaW0oKS5lbmRzV2l0aCgiIC8iKSkgewogICAgICAgICAgICBjb25zdCBwYXJ0cyA9IGxpbmUudHJpbSgpLnNwbGl0KC9ccysvKTsKICAgICAgICAgICAgY29uc3QgcGVyY2VudEluZGV4ID0gcGFydHMuZmluZEluZGV4KChwYXJ0KSA9PiBwYXJ0LmluY2x1ZGVzKCIlIikpOwogICAgICAgICAgICBpZiAocGVyY2VudEluZGV4ICE9PSAtMSkgewogICAgICAgICAgICAgIGRpc2tVc2FnZSA9IHBhcnRzW3BlcmNlbnRJbmRleF07CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICghZGlza1VzYWdlKSB7CiAgICAgICAgICBjb25zdCByb290TWF0Y2ggPSBkZi5tYXRjaCgvKFxkKyUpXHMrXC9ccyokL20pOwogICAgICAgICAgZGlza1VzYWdlID0gcm9vdE1hdGNoID8gcm9vdE1hdGNoWzFdIDogIiI7CiAgICAgICAgfQogICAgICB9CgogICAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiZGlza191c2VkIiwgZGlza1VzYWdlKTsKICAgICAgcmV0dXJuIGRpc2tVc2FnZTsKICAgIH0gY2F0Y2gge30KICB9CgogIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJkaXNrX3VzZWQiLCAiIik7CiAgcmV0dXJuICIiOwp9CgovKioKICogR2V0cyBzeXN0ZW0gbG9hZCBhdmVyYWdlcwogKiBSZWFkcyAxLCA1LCBhbmQgMTUgbWludXRlIGxvYWQgYXZlcmFnZXMgZnJvbSAvcHJvYy9sb2FkYXZnIChMaW51eCBvbmx5KQogKiBAcmV0dXJucyBTcGFjZS1zZXBhcmF0ZWQgbG9hZCBhdmVyYWdlcyAoMW0gNW0gMTVtKSBvciBlbXB0eSBzdHJpbmcKICogQGV4YW1wbGUgIjAuNTIgMC41OCAwLjU5IiwgIjIuMTAgMS45NSAxLjg4IgogKi8KZXhwb3J0IGZ1bmN0aW9uIGxvYWRfYXZlcmFnZSgpOiBzdHJpbmcgewogIGlmICghSVNfTElOVVgpIHJldHVybiAiIjsKCiAgdHJ5IHsKICAgIGNvbnN0IGxvYWRhdmcgPSBmcy5yZWFkRmlsZVN5bmMoIi9wcm9jL2xvYWRhdmciLCAidXRmOCIpOwogICAgY29uc3QgbG9hZHMgPSBsb2FkYXZnLnNwbGl0KCIgIikuc2xpY2UoMCwgMyk7CiAgICByZXR1cm4gbG9hZHMuam9pbigiICIpOwogIH0gY2F0Y2gge30KICByZXR1cm4gIiI7Cn0KCi8qKgogKiBHZXRzIG1vdW50ZWQgZmlsZXN5c3RlbSBpbmZvcm1hdGlvbgogKiBMaXN0cyBub24tc3lzdGVtIG1vdW50IHBvaW50cyB3aXRoIHVzYWdlIGZyb20gZGYgKExpbnV4IG9ubHkpCiAqIEV4Y2x1ZGVzIC8sIC9kZXYsIC9wcm9jLCBhbmQgL3N5cyBtb3VudHMKICogQHBhcmFtIGNvbnRleHQgLSBJbmZvIGNvbnRleHQgd2l0aCBjYWNoZQogKiBAcmV0dXJucyBTcGFjZS1zZXBhcmF0ZWQgbW91bnQgcG9pbnRzIHdpdGggdXNhZ2Ugb3IgZW1wdHkgc3RyaW5nCiAqIEBleGFtcGxlICIvaG9tZSg0NSUpIC9tbnQvZGF0YSg3OCUpIiwgIi9tZWRpYS91c2IoMTIlKSIKICovCmV4cG9ydCBmdW5jdGlvbiBtb3VudF9wb2ludHMoY29udGV4dDogSW5mb0NvbnRleHQpOiBzdHJpbmcgewogIGNvbnN0IGNhY2hlZCA9IGdldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJtb3VudF9wb2ludHMiKTsKICBpZiAoY2FjaGVkICE9PSBudWxsKSByZXR1cm4gY2FjaGVkOwoKICBpZiAoIUlTX0xJTlVYKSB7CiAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAibW91bnRfcG9pbnRzIiwgIiIpOwogICAgcmV0dXJuICIiOwogIH0KCiAgdHJ5IHsKICAgIGNvbnN0IGRmID0gZXhlY0NvbW1hbmQoImRmIC1oIik7CiAgICBjb25zdCBsaW5lcyA9IGRmLnNwbGl0KCJcbiIpLnNsaWNlKDEpOwogICAgY29uc3QgbW91bnRQb2ludHM6IHN0cmluZ1tdID0gW107CgogICAgbGluZXMuZm9yRWFjaCgobGluZSkgPT4gewogICAgICBjb25zdCBwYXJ0cyA9IGxpbmUudHJpbSgpLnNwbGl0KC9ccysvKTsKICAgICAgaWYgKHBhcnRzLmxlbmd0aCA+PSA2KSB7CiAgICAgICAgY29uc3QgbW91bnRQb2ludCA9IHBhcnRzWzVdOwogICAgICAgIGNvbnN0IHVzYWdlID0gcGFydHNbNF07CiAgICAgICAgaWYgKAogICAgICAgICAgIW1vdW50UG9pbnQuc3RhcnRzV2l0aCgiL2RldiIpICYmCiAgICAgICAgICAhbW91bnRQb2ludC5zdGFydHNXaXRoKCIvcHJvYyIpICYmCiAgICAgICAgICAhbW91bnRQb2ludC5zdGFydHNXaXRoKCIvc3lzIikgJiYKICAgICAgICAgIG1vdW50UG9pbnQgIT09ICIvIgogICAgICAgICkgewogICAgICAgICAgbW91bnRQb2ludHMucHVzaChgJHttb3VudFBvaW50fSgke3VzYWdlfSlgKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0pOwoKICAgIGNvbnN0IHJlc3VsdCA9IG1vdW50UG9pbnRzLnNsaWNlKDAsIDMpLmpvaW4oIiAiKTsKICAgIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJtb3VudF9wb2ludHMiLCByZXN1bHQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9IGNhdGNoIHt9CgogIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJtb3VudF9wb2ludHMiLCAiIik7CiAgcmV0dXJuICIiOwp9Cg==\"","export default \"data:video/mp2t;base64,LyoqCiAqIE5ldHdvcmstcmVsYXRlZCBzeXN0ZW0gaW5mb3JtYXRpb24gZnVuY3Rpb25zCiAqIEBtb2R1bGUgaW5mby9uZXR3b3JrCiAqLwoKaW1wb3J0IG9zIGZyb20gIm9zIjsKaW1wb3J0IHR5cGUgeyBJbmZvQ29udGV4dCB9IGZyb20gIi4uL3R5cGVzL2ludGVybmFsLXR5cGVzIjsKaW1wb3J0IHsgSVNfTElOVVggfSBmcm9tICIuLi91dGlscy9wbGF0Zm9ybSI7CmltcG9ydCB7IGV4ZWNDb21tYW5kIH0gZnJvbSAiLi4vdXRpbHMvY29tbWFuZCI7CmltcG9ydCB7IGdldENhY2hlZFZhbHVlLCBzZXRDYWNoZWRWYWx1ZSB9IGZyb20gIi4uL2NhY2hlL2NhY2hlIjsKCi8qKgogKiBHZXRzIHB1YmxpYyBJUCBhZGRyZXNzIGZyb20gaXBpbmZvLmlvCiAqIEBwYXJhbSBjb250ZXh0IC0gSW5mbyBjb250ZXh0IHdpdGggY2FjaGUgYW5kIElQIGluZm8KICogQHJldHVybnMgUHVibGljIElQdjQgYWRkcmVzcyBvciBlbXB0eSBzdHJpbmcKICogQGV4YW1wbGUgIjIwMy4wLjExMy40MiIKICovCmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpcChjb250ZXh0OiBJbmZvQ29udGV4dCk6IFByb21pc2U8c3RyaW5nPiB7CiAgY29uc3QgY2FjaGVkID0gZ2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgImlwIik7CiAgaWYgKGNhY2hlZCkgcmV0dXJuIGNhY2hlZDsKCiAgaWYgKCFjb250ZXh0LmlwSW5mbykgewogICAgc2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgImlwIiwgIiIpOwogICAgcmV0dXJuICIiOwogIH0KICBjb25zdCBpcCA9IGNvbnRleHQuaXBJbmZvLmlwIHx8ICIiOwogIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJpcCIsIGlwKTsKICByZXR1cm4gaXA7Cn0KCi8qKgogKiBHZXRzIGxvY2FsL3ByaXZhdGUgSVAgYWRkcmVzcyhlcykKICogVHJpZXMgaWZjb25maWcgYW5kIGlwIGNvbW1hbmRzIG9uIExpbnV4LCBmYWxscyBiYWNrIHRvIE5vZGUuanMgQVBJCiAqIEByZXR1cm5zIFNwYWNlLXNlcGFyYXRlZCBsb2NhbCBJUCBhZGRyZXNzZXMgKFJGQyAxOTE4IHJhbmdlcykKICogQGV4YW1wbGUgIjE5Mi4xNjguMS4xMDAiIG9yICIxMC4wLjAuNTAgMTkyLjE2OC4xLjEwMCIKICovCmV4cG9ydCBmdW5jdGlvbiBpcGxvY2FsKCk6IHN0cmluZyB7CiAgaWYgKElTX0xJTlVYKSB7CiAgICB0cnkgewogICAgICBjb25zdCBpZmNvbmZpZyA9IGV4ZWNDb21tYW5kKCJpZmNvbmZpZyAyPi9kZXYvbnVsbCIpOwogICAgICBjb25zdCB3bGFuTWF0Y2ggPSBpZmNvbmZpZy5tYXRjaCgKICAgICAgICAvd2xhbjBbXHNcU10qP2luZXQgKFxkK1wuXGQrXC5cZCtcLlxkKykvCiAgICAgICk7CiAgICAgIGlmICh3bGFuTWF0Y2gpIHsKICAgICAgICByZXR1cm4gd2xhbk1hdGNoWzFdOwogICAgICB9CiAgICB9IGNhdGNoIHt9CgogICAgdHJ5IHsKICAgICAgY29uc3QgaXBBZGRyID0gZXhlY0NvbW1hbmQoImlwIGFkZHIgc2hvdyAyPi9kZXYvbnVsbCIpOwogICAgICBjb25zdCBhZGRyZXNzZXM6IHN0cmluZ1tdID0gW107CiAgICAgIGNvbnN0IG1hdGNoZXMgPSBpcEFkZHIubWF0Y2hBbGwoL2luZXQgKFxkK1wuXGQrXC5cZCtcLlxkKylcL1xkKy9nKTsKICAgICAgZm9yIChjb25zdCBtYXRjaCBvZiBtYXRjaGVzKSB7CiAgICAgICAgaWYgKCFtYXRjaFsxXS5zdGFydHNXaXRoKCIxMjcuIikpIHsKICAgICAgICAgIGFkZHJlc3Nlcy5wdXNoKG1hdGNoWzFdKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGFkZHJlc3Nlcy5sZW5ndGggPiAwKSB7CiAgICAgICAgcmV0dXJuIGFkZHJlc3Nlcy5qb2luKCIgIik7CiAgICAgIH0KICAgIH0gY2F0Y2gge30KICB9CgogIGNvbnN0IGludGVyZmFjZXMgPSBvcy5uZXR3b3JrSW50ZXJmYWNlcygpOwogIGNvbnN0IGFkZHJlc3Nlczogc3RyaW5nW10gPSBbXTsKCiAgZm9yIChjb25zdCBuYW1lIG9mIE9iamVjdC5rZXlzKGludGVyZmFjZXMpKSB7CiAgICBmb3IgKGNvbnN0IGRldmljZSBvZiBpbnRlcmZhY2VzW25hbWVdIHx8IFtdKSB7CiAgICAgIGlmIChkZXZpY2UuZmFtaWx5ID09PSAiSVB2NCIgJiYgIWRldmljZS5pbnRlcm5hbCkgewogICAgICAgIGFkZHJlc3Nlcy5wdXNoKGRldmljZS5hZGRyZXNzKTsKICAgICAgfQogICAgfQogIH0KCiAgcmV0dXJuIGFkZHJlc3Nlcy5qb2luKCIgIik7Cn0KCi8qKgogKiBHZXRzIGdlb2dyYXBoaWMgY2l0eSBiYXNlZCBvbiBwdWJsaWMgSVAKICogQHBhcmFtIGNvbnRleHQgLSBJbmZvIGNvbnRleHQgd2l0aCBJUCBnZW9sb2NhdGlvbiBkYXRhCiAqIEByZXR1cm5zIENpdHkgbmFtZSBvciBlbXB0eSBzdHJpbmcKICogQGV4YW1wbGUgIlNhbiBGcmFuY2lzY28iLCAiTmV3IFlvcmsiLCAiTG9uZG9uIgogKi8KZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNpdHkoY29udGV4dDogSW5mb0NvbnRleHQpOiBQcm9taXNlPHN0cmluZz4gewogIGNvbnN0IGNhY2hlZCA9IGdldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJjaXR5Iik7CiAgaWYgKGNhY2hlZCAhPT0gbnVsbCkgcmV0dXJuIGNhY2hlZDsKCiAgaWYgKCFjb250ZXh0LmlwSW5mbyB8fCAhY29udGV4dC5pcEluZm8uY2l0eSkgewogICAgc2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgImNpdHkiLCAiIik7CiAgICByZXR1cm4gIiI7CiAgfQogIGNvbnN0IGNpdHkgPSBjb250ZXh0LmlwSW5mby5jaXR5OwogIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJjaXR5IiwgY2l0eSk7CiAgcmV0dXJuIGNpdHk7Cn0KCi8qKgogKiBHZXRzIHJldmVyc2UgRE5TIGhvc3RuYW1lIHdpdGggSFRUUCBwcmVmaXgKICogQHBhcmFtIGNvbnRleHQgLSBJbmZvIGNvbnRleHQgd2l0aCBJUCBpbmZvCiAqIEByZXR1cm5zIERvbWFpbiB3aXRoIGh0dHA6Ly8gcHJlZml4IG9yIGVtcHR5IHN0cmluZwogKiBAZXhhbXBsZSAiaHR0cDovL2V4YW1wbGUuY29tIiwgImh0dHA6Ly9ob3N0LTIwMy0wLTExMy00Mi5leGFtcGxlLm5ldCIKICovCmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkb21haW4oY29udGV4dDogSW5mb0NvbnRleHQpOiBQcm9taXNlPHN0cmluZz4gewogIGNvbnN0IGNhY2hlZCA9IGdldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJkb21haW4iKTsKICBpZiAoY2FjaGVkICE9PSBudWxsKSByZXR1cm4gY2FjaGVkOwoKICBpZiAoIWNvbnRleHQuaXBJbmZvIHx8ICFjb250ZXh0LmlwSW5mby5ob3N0bmFtZSkgewogICAgc2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgImRvbWFpbiIsICIiKTsKICAgIHJldHVybiAiIjsKICB9CiAgY29uc3QgZG9tYWluID0gYGh0dHA6Ly8ke2NvbnRleHQuaXBJbmZvLmhvc3RuYW1lfWA7CiAgc2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgImRvbWFpbiIsIGRvbWFpbik7CiAgcmV0dXJuIGRvbWFpbjsKfQoKLyoqCiAqIEdldHMgSW50ZXJuZXQgU2VydmljZSBQcm92aWRlciBuYW1lCiAqIFN0cmlwcyBBUyBudW1iZXIgcHJlZml4IGZyb20gb3JnYW5pemF0aW9uIHN0cmluZwogKiBAcGFyYW0gY29udGV4dCAtIEluZm8gY29udGV4dCB3aXRoIElQIGluZm8KICogQHJldHVybnMgSVNQIG5hbWUgb3IgZW1wdHkgc3RyaW5nCiAqIEBleGFtcGxlICJDb21jYXN0IENhYmxlIiwgIlZlcml6b24gQnVzaW5lc3MiLCAiQ2xvdWRmbGFyZSBJbmMiCiAqLwpleHBvcnQgYXN5bmMgZnVuY3Rpb24gaXNwKGNvbnRleHQ6IEluZm9Db250ZXh0KTogUHJvbWlzZTxzdHJpbmc+IHsKICBjb25zdCBjYWNoZWQgPSBnZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiaXNwIik7CiAgaWYgKGNhY2hlZCAhPT0gbnVsbCkgcmV0dXJuIGNhY2hlZDsKCiAgaWYgKCFjb250ZXh0LmlwSW5mbyB8fCAhY29udGV4dC5pcEluZm8ub3JnKSB7CiAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiaXNwIiwgIiIpOwogICAgcmV0dXJuICIiOwogIH0KICBjb25zdCBpc3AgPSBjb250ZXh0LmlwSW5mby5vcmcuc3BsaXQoIiAiKS5zbGljZSgxKS5qb2luKCIgIik7CiAgc2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgImlzcCIsIGlzcCk7CiAgcmV0dXJuIGlzcDsKfQoKLyoqCiAqIEdldHMgYWN0aXZlIG5ldHdvcmsgaW50ZXJmYWNlIG5hbWVzCiAqIExpc3RzIG5vbi1sb29wYmFjayBpbnRlcmZhY2VzIHdpdGggSVB2NCBhZGRyZXNzZXMgKExpbnV4IG9ubHkpCiAqIEBwYXJhbSBjb250ZXh0IC0gSW5mbyBjb250ZXh0IHdpdGggY2FjaGUKICogQHJldHVybnMgU3BhY2Utc2VwYXJhdGVkIGludGVyZmFjZSBuYW1lcyBvciBlbXB0eSBzdHJpbmcKICogQGV4YW1wbGUgImV0aDAgd2xhbjAiLCAiZW5wMHMzIgogKi8KZXhwb3J0IGZ1bmN0aW9uIG5ldHdvcmtfaW50ZXJmYWNlcyhjb250ZXh0OiBJbmZvQ29udGV4dCk6IHN0cmluZyB7CiAgY29uc3QgY2FjaGVkID0gZ2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgIm5ldHdvcmtfaW50ZXJmYWNlcyIpOwogIGlmIChjYWNoZWQgIT09IG51bGwpIHJldHVybiBjYWNoZWQ7CgogIGlmICghSVNfTElOVVgpIHsKICAgIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJuZXR3b3JrX2ludGVyZmFjZXMiLCAiIik7CiAgICByZXR1cm4gIiI7CiAgfQoKICB0cnkgewogICAgY29uc3QgaW50ZXJmYWNlcyA9IG9zLm5ldHdvcmtJbnRlcmZhY2VzKCk7CiAgICBjb25zdCBhY3RpdmVJbnRlcmZhY2VzOiBzdHJpbmdbXSA9IFtdOwoKICAgIGZvciAoY29uc3QgW25hbWUsIGFkZHJzXSBvZiBPYmplY3QuZW50cmllcyhpbnRlcmZhY2VzKSkgewogICAgICBpZiAobmFtZSAhPT0gImxvIikgewogICAgICAgIGNvbnN0IGlwdjRBZGRyID0gYWRkcnM/LmZpbmQoCiAgICAgICAgICAoYWRkcikgPT4gYWRkci5mYW1pbHkgPT09ICJJUHY0IiAmJiAhYWRkci5pbnRlcm5hbAogICAgICAgICk7CiAgICAgICAgaWYgKGlwdjRBZGRyKSB7CiAgICAgICAgICBhY3RpdmVJbnRlcmZhY2VzLnB1c2gobmFtZSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgY29uc3QgcmVzdWx0ID0gYWN0aXZlSW50ZXJmYWNlcy5qb2luKCIgIik7CiAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAibmV0d29ya19pbnRlcmZhY2VzIiwgcmVzdWx0KTsKICAgIHJldHVybiByZXN1bHQ7CiAgfSBjYXRjaCB7fQoKICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAibmV0d29ya19pbnRlcmZhY2VzIiwgIiIpOwogIHJldHVybiAiIjsKfQovKioKICogR2V0cyBvcGVuIFRDUCBwb3J0cyB3aXRoIHNlcnZpY2UgbmFtZXMKICogVXNlcyBsc29mIHRvIGZpbmQgbGlzdGVuaW5nIFRDUCBwb3J0cyAoTGludXggb25seSkKICogQHBhcmFtIGNvbnRleHQgLSBJbmZvIGNvbnRleHQgd2l0aCBjYWNoZQogKiBAcmV0dXJucyBTcGFjZS1zZXBhcmF0ZWQgcG9ydCtwcm9jZXNzIHBhaXJzIG9yIGVtcHR5IHN0cmluZwogKiBAZXhhbXBsZSAiODBodHRwIDQ0M2h0dHAgMjJzc2giLCAiMzAwMG5vZGUgNTQzMnBvc3QiCiAqLwpleHBvcnQgZnVuY3Rpb24gcG9ydHMoY29udGV4dDogSW5mb0NvbnRleHQpOiBzdHJpbmcgewogIGNvbnN0IGNhY2hlZCA9IGdldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJwb3J0cyIpOwogIGlmIChjYWNoZWQgIT09IG51bGwpIHJldHVybiBjYWNoZWQ7CgogIGlmIChJU19MSU5VWCkgewogICAgdHJ5IHsKICAgICAgY29uc3QgbHNvZiA9IGV4ZWNDb21tYW5kKCJsc29mIC1uUCAtaVRDUCAtc1RDUDpMSVNURU4iKTsKICAgICAgY29uc3QgbGluZXMgPSBsc29mLnNwbGl0KCJcbiIpLnNsaWNlKDEpOwogICAgICBjb25zdCBwb3J0cyA9IG5ldyBTZXQ8c3RyaW5nPigpOwoKICAgICAgbGluZXMuZm9yRWFjaCgobGluZSkgPT4gewogICAgICAgIGNvbnN0IHBhcnRzID0gbGluZS5zcGxpdCgvXHMrLyk7CiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA+PSA5KSB7CiAgICAgICAgICBjb25zdCBhZGRyZXNzID0gcGFydHNbOF07CiAgICAgICAgICBjb25zdCBwb3J0TWF0Y2ggPSBhZGRyZXNzLm1hdGNoKC86KFxkKykkLyk7CiAgICAgICAgICBpZiAocG9ydE1hdGNoKSB7CiAgICAgICAgICAgIGNvbnN0IHBvcnQgPSBwb3J0TWF0Y2hbMV07CiAgICAgICAgICAgIGNvbnN0IHByb2Nlc3MgPSBwYXJ0c1swXS5zdWJzdHJpbmcoMCwgNCk7CiAgICAgICAgICAgIHBvcnRzLmFkZChgJHtwb3J0fSR7cHJvY2Vzc31gKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0pOwoKICAgICAgY29uc3QgcmVzdWx0ID0gQXJyYXkuZnJvbShwb3J0cykuam9pbigiICIpOwogICAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAicG9ydHMiLCByZXN1bHQpOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfSBjYXRjaCB7fQogIH0KCiAgc2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgInBvcnRzIiwgIiIpOwogIHJldHVybiAiIjsKfQo=\"","export default \"data:video/mp2t;base64,LyoqCiAqIFBsYXRmb3JtLXJlbGF0ZWQgc3lzdGVtIGluZm9ybWF0aW9uIGZ1bmN0aW9ucwogKiBAbW9kdWxlIGluZm8vcGxhdGZvcm0KICovCgppbXBvcnQgb3MgZnJvbSAib3MiOwppbXBvcnQgZnMgZnJvbSAiZnMiOwppbXBvcnQgdHlwZSB7IEluZm9Db250ZXh0IH0gZnJvbSAiLi4vdHlwZXMvaW50ZXJuYWwtdHlwZXMiOwppbXBvcnQgeyBJU19XSU5ET1dTLCBJU19NQUMsIElTX0xJTlVYIH0gZnJvbSAiLi4vdXRpbHMvcGxhdGZvcm0iOwppbXBvcnQgeyBleGVjQ29tbWFuZCwgY29tbWFuZEV4aXN0cyB9IGZyb20gIi4uL3V0aWxzL2NvbW1hbmQiOwppbXBvcnQgeyBnZXRDYWNoZWRWYWx1ZSwgc2V0Q2FjaGVkVmFsdWUgfSBmcm9tICIuLi9jYWNoZS9jYWNoZSI7CgovKioKICogR2V0cyB0aGUgY3VycmVudCB1c2VybmFtZQogKiBAcmV0dXJucyBDdXJyZW50IHN5c3RlbSB1c2VybmFtZQogKi8KZXhwb3J0IGZ1bmN0aW9uIHVzZXIoKTogc3RyaW5nIHsKICByZXR1cm4gb3MudXNlckluZm8oKS51c2VybmFtZTsKfQoKLyoqCiAqIEdldHMgdGhlIHN5c3RlbSBob3N0bmFtZQogKiBAcmV0dXJucyBDb21wdXRlciBob3N0bmFtZS9uZXR3b3JrIG5hbWUKICovCmV4cG9ydCBmdW5jdGlvbiBob3N0bmFtZSgpOiBzdHJpbmcgewogIHJldHVybiBvcy5ob3N0bmFtZSgpOwp9CgovKioKICogR2V0cyBvcGVyYXRpbmcgc3lzdGVtIG5hbWUgYW5kIHZlcnNpb24KICogUGxhdGZvcm0tc3BlY2lmaWMgZGV0ZWN0aW9uIGZvciBXaW5kb3dzLCBtYWNPUywgYW5kIExpbnV4CiAqIEBwYXJhbSBjb250ZXh0IC0gSW5mbyBjb250ZXh0IHdpdGggY2FjaGUKICogQHJldHVybnMgT1MgbmFtZSBhbmQgdmVyc2lvbiBzdHJpbmcKICogQGV4YW1wbGUgIldpbmRvd3MgMTEgUHJvIiwgIm1hY09TIFZlbnR1cmEgMTMuMi4xIiwgIlVidW50dSAyMi4wNC4zIExUUyIKICovCmV4cG9ydCBmdW5jdGlvbiBvc19pbmZvKGNvbnRleHQ6IEluZm9Db250ZXh0KTogc3RyaW5nIHsKICBjb25zdCBjYWNoZWQgPSBnZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAib3MiKTsKICBpZiAoY2FjaGVkKSByZXR1cm4gY2FjaGVkOwoKICBjb25zdCBwbGF0Zm9ybSA9IG9zLnBsYXRmb3JtKCk7CiAgY29uc3QgcmVsZWFzZSA9IG9zLnJlbGVhc2UoKTsKICBsZXQgb3NOYW1lID0gIiI7CgogIGlmIChJU19XSU5ET1dTKSB7CiAgICB0cnkgewogICAgICBjb25zdCB2ZXJzaW9uID0gZXhlY0NvbW1hbmQoInZlciIpOwogICAgICBjb25zdCBtYXRjaCA9IHZlcnNpb24ubWF0Y2goL01pY3Jvc29mdCBXaW5kb3dzIFxbVmVyc2lvbiAoW15cXV0rKVxdLyk7CiAgICAgIG9zTmFtZSA9IG1hdGNoID8gYFdpbmRvd3MgJHttYXRjaFsxXX1gIDogYFdpbmRvd3MgJHtyZWxlYXNlfWA7CiAgICB9IGNhdGNoIHsKICAgICAgb3NOYW1lID0gYFdpbmRvd3MgJHtyZWxlYXNlfWA7CiAgICB9CiAgfSBlbHNlIGlmIChJU19NQUMpIHsKICAgIG9zTmFtZSA9IGBtYWNPUyAke3JlbGVhc2V9YDsKICB9IGVsc2UgaWYgKElTX0xJTlVYKSB7CiAgICB0cnkgewogICAgICBjb25zdCBvc1JlbGVhc2UgPSBmcy5yZWFkRmlsZVN5bmMoIi9ldGMvb3MtcmVsZWFzZSIsICJ1dGY4Iik7CiAgICAgIGNvbnN0IG5hbWVNYXRjaCA9IG9zUmVsZWFzZS5tYXRjaCgvXk5BTUU9IihbXiJdKykiL20pOwogICAgICBjb25zdCB2ZXJzaW9uTWF0Y2ggPSBvc1JlbGVhc2UubWF0Y2goL15WRVJTSU9OX0lEPSIoW14iXSspIi9tKTsKICAgICAgb3NOYW1lID0gbmFtZU1hdGNoID8gbmFtZU1hdGNoWzFdIDogIkxpbnV4IjsKICAgICAgaWYgKHZlcnNpb25NYXRjaCkgb3NOYW1lICs9IGAgJHt2ZXJzaW9uTWF0Y2hbMV19YDsKICAgIH0gY2F0Y2ggewogICAgICBvc05hbWUgPSBgTGludXggJHtyZWxlYXNlfWA7CiAgICB9CiAgfSBlbHNlIHsKICAgIG9zTmFtZSA9IGAke3BsYXRmb3JtfSAke3JlbGVhc2V9YDsKICB9CgogIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJvcyIsIG9zTmFtZSk7CiAgcmV0dXJuIG9zTmFtZTsKfQoKLyoqCiAqIEdldHMga2VybmVsIHZlcnNpb24gc3RyaW5nCiAqIFJldHVybnMgdGhlIG9wZXJhdGluZyBzeXN0ZW0ga2VybmVsIHZlcnNpb24gZnJvbSBvcy5yZWxlYXNlKCkKICogQHBhcmFtIGNvbnRleHQgLSBJbmZvIGNvbnRleHQgd2l0aCBjYWNoZQogKiBAcmV0dXJucyBLZXJuZWwgdmVyc2lvbiBzdHJpbmcKICogQGV4YW1wbGUgIjUuMTUuMC01Ni1nZW5lcmljIiwgIjYuMTEuMTEtdmFsdmUxMi0xLW5lcHR1bmUiCiAqLwpleHBvcnQgZnVuY3Rpb24ga2VybmVsKGNvbnRleHQ6IEluZm9Db250ZXh0KTogc3RyaW5nIHsKICBjb25zdCBjYWNoZWQgPSBnZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAia2VybmVsIik7CiAgaWYgKGNhY2hlZCkgcmV0dXJuIGNhY2hlZDsKCiAgY29uc3Qga2VybmVsID0gb3MucmVsZWFzZSgpOwogIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJrZXJuZWwiLCBrZXJuZWwpOwogIHJldHVybiBrZXJuZWw7Cn0KCi8qKgogKiBHZXRzIGRldmljZSBvciBjb21wdXRlciBtb2RlbCBuYW1lCiAqIFVzZXMgV01JIG9uIFdpbmRvd3MsIERNSSBvbiBMaW51eCwgZ2V0cHJvcCBvbiBBbmRyb2lkCiAqIEBwYXJhbSBjb250ZXh0IC0gSW5mbyBjb250ZXh0IHdpdGggY2FjaGUKICogQHJldHVybnMgRGV2aWNlIG1vZGVsIG5hbWUgb3IgZW1wdHkgc3RyaW5nCiAqIEBleGFtcGxlICJEZWxsIE9wdGlQbGV4IDcwOTAiLCAiTWFjQm9vayBQcm8gMTYtaW5jaCIsICJWYWx2ZSBTdGVhbSBEZWNrIgogKi8KZXhwb3J0IGZ1bmN0aW9uIGRldmljZShjb250ZXh0OiBJbmZvQ29udGV4dCk6IHN0cmluZyB7CiAgY29uc3QgY2FjaGVkID0gZ2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgImRldmljZSIpOwogIGlmIChjYWNoZWQgIT09IG51bGwpIHJldHVybiBjYWNoZWQ7CgogIGlmIChJU19XSU5ET1dTKSB7CiAgICB0cnkgewogICAgICBjb25zdCB3bWljID0gZXhlY0NvbW1hbmQoIndtaWMgY3Nwcm9kdWN0IGdldCBuYW1lIC9mb3JtYXQ6bGlzdCIpOwogICAgICBjb25zdCBuYW1lTWF0Y2ggPSB3bWljLm1hdGNoKC9OYW1lPSguKykvKTsKICAgICAgaWYgKG5hbWVNYXRjaCkgewogICAgICAgIGNvbnN0IGRldmljZSA9IG5hbWVNYXRjaFsxXS50cmltKCk7CiAgICAgICAgaWYgKGRldmljZSAmJiBkZXZpY2UgIT09ICIiKSB7CiAgICAgICAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiZGV2aWNlIiwgZGV2aWNlKTsKICAgICAgICAgIHJldHVybiBkZXZpY2U7CiAgICAgICAgfQogICAgICB9CiAgICB9IGNhdGNoIHt9CgogICAgdHJ5IHsKICAgICAgY29uc3QgcHMgPSBleGVjQ29tbWFuZCgKICAgICAgICAncG93ZXJzaGVsbC5leGUgLUNvbW1hbmQgIkdldC1XbWlPYmplY3QgLUNsYXNzIFdpbjMyX0NvbXB1dGVyU3lzdGVtIHwgU2VsZWN0LU9iamVjdCAtRXhwYW5kUHJvcGVydHkgTW9kZWwiJwogICAgICApOwogICAgICBpZiAocHMudHJpbSgpKSB7CiAgICAgICAgY29uc3QgZGV2aWNlID0gcHMudHJpbSgpOwogICAgICAgIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJkZXZpY2UiLCBkZXZpY2UpOwogICAgICAgIHJldHVybiBkZXZpY2U7CiAgICAgIH0KICAgIH0gY2F0Y2gge30KICB9IGVsc2UgaWYgKElTX0xJTlVYKSB7CiAgICB0cnkgewogICAgICBpZiAoY29tbWFuZEV4aXN0cygiZ2V0cHJvcCIpKSB7CiAgICAgICAgY29uc3QgZGV2aWNlID0gZXhlY0NvbW1hbmQoImdldHByb3Agcm8ucHJvZHVjdC5tb2RlbCIpOwogICAgICAgIGlmIChkZXZpY2UpIHsKICAgICAgICAgIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJkZXZpY2UiLCBkZXZpY2UpOwogICAgICAgICAgcmV0dXJuIGRldmljZTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIGNvbnN0IGRtaVBhdGggPSAiL3N5cy9kZXZpY2VzL3ZpcnR1YWwvZG1pL2lkL3Byb2R1Y3RfbmFtZSI7CiAgICAgIGlmIChmcy5leGlzdHNTeW5jKGRtaVBhdGgpKSB7CiAgICAgICAgY29uc3QgZGV2aWNlID0gZnMucmVhZEZpbGVTeW5jKGRtaVBhdGgsICJ1dGY4IikudHJpbSgpOwogICAgICAgIGlmIChkZXZpY2UpIHsKICAgICAgICAgIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJkZXZpY2UiLCBkZXZpY2UpOwogICAgICAgICAgcmV0dXJuIGRldmljZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0gY2F0Y2gge30KICB9CgogIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJkZXZpY2UiLCAiIik7CiAgcmV0dXJuICIiOwp9Cg==\"","export default \"data:video/mp2t;base64,LyoqCiAqIFByb2Nlc3MtcmVsYXRlZCBzeXN0ZW0gaW5mb3JtYXRpb24gZnVuY3Rpb25zCiAqIEBtb2R1bGUgaW5mby9wcm9jZXNzCiAqLwoKaW1wb3J0IG9zIGZyb20gIm9zIjsKaW1wb3J0IHR5cGUgeyBJbmZvQ29udGV4dCB9IGZyb20gIi4uL3R5cGVzL2ludGVybmFsLXR5cGVzIjsKaW1wb3J0IHsgSVNfTElOVVggfSBmcm9tICIuLi91dGlscy9wbGF0Zm9ybSI7CmltcG9ydCB7IGV4ZWNDb21tYW5kIH0gZnJvbSAiLi4vdXRpbHMvY29tbWFuZCI7CmltcG9ydCB7IGdldENhY2hlZFZhbHVlLCBzZXRDYWNoZWRWYWx1ZSB9IGZyb20gIi4uL2NhY2hlL2NhY2hlIjsKCi8qKgogKiBHZXRzIHRoZSBoaWdoZXN0IENQVS1jb25zdW1pbmcgcHJvY2VzcwogKiBVc2VzIHBzIGNvbW1hbmQgdG8gZmluZCB0b3AgcHJvY2VzcyBieSBDUFUgdXNhZ2UgKExpbnV4IG9ubHkpCiAqIEBwYXJhbSBjb250ZXh0IC0gSW5mbyBjb250ZXh0IHdpdGggY2FjaGUKICogQHJldHVybnMgUHJvY2VzcyBpbmZvIGFzICJwZXJjZW50YWdlIHByb2Nlc3NuYW1lIiBvciBlbXB0eSBzdHJpbmcKICogQGV4YW1wbGUgIjglIGZpcmVmb3giLCAiMTUlIGNocm9tZSIsICIzJSBzeXN0ZW1kIgogKi8KZXhwb3J0IGZ1bmN0aW9uIHRvcF9wcm9jZXNzKGNvbnRleHQ6IEluZm9Db250ZXh0KTogc3RyaW5nIHsKICBjb25zdCBjYWNoZWQgPSBnZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAidG9wX3Byb2Nlc3MiKTsKICBpZiAoY2FjaGVkICE9PSBudWxsKSByZXR1cm4gY2FjaGVkOwoKICBpZiAoSVNfTElOVVgpIHsKICAgIHRyeSB7CiAgICAgIGNvbnN0IHBzID0gZXhlY0NvbW1hbmQoInBzIC1lbyBwY3B1LGNvbW0gLS1zb3J0PS0lY3B1IC0tbm8taGVhZGVycyIpOwogICAgICBjb25zdCBsaW5lcyA9IHBzLnNwbGl0KCJcbiIpOwogICAgICBpZiAobGluZXMubGVuZ3RoID4gMCkgewogICAgICAgIGNvbnN0IHRvcFByb2Nlc3MgPSBsaW5lc1swXS50cmltKCkucmVwbGFjZSgvXHMrLywgIiAiKS5zcGxpdCgiICIpOwogICAgICAgIGNvbnN0IGNwdSA9IHRvcFByb2Nlc3NbMF0ucmVwbGFjZSgvXC5cZCsvLCAiJSIpOwogICAgICAgIGNvbnN0IHByb2Nlc3MgPSB0b3BQcm9jZXNzWzFdLnNwbGl0KCIvIikucG9wKCk7CiAgICAgICAgY29uc3QgcmVzdWx0ID0gYCR7Y3B1fSUgJHtwcm9jZXNzfWA7CiAgICAgICAgc2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgInRvcF9wcm9jZXNzIiwgcmVzdWx0KTsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICB9CiAgICB9IGNhdGNoIHt9CiAgfQoKICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAidG9wX3Byb2Nlc3MiLCAiIik7CiAgcmV0dXJuICIiOwp9CgovKioKICogR2V0cyBzeXN0ZW0gdXB0aW1lIHNpbmNlIGxhc3QgYm9vdAogKiBAcmV0dXJucyBVcHRpbWUgZm9ybWF0dGVkIGFzICJYZCBZaCBabSIKICogQGV4YW1wbGUgIjJkIDE0aCAyM20iLCAiMGQgM2ggNDVtIgogKi8KZXhwb3J0IGZ1bmN0aW9uIHVwdGltZSgpOiBzdHJpbmcgewogIGNvbnN0IHVwdGltZVNlY29uZHMgPSBvcy51cHRpbWUoKTsKICBjb25zdCBkYXlzID0gTWF0aC5mbG9vcih1cHRpbWVTZWNvbmRzIC8gODY0MDApOwogIGNvbnN0IGhvdXJzID0gTWF0aC5mbG9vcigodXB0aW1lU2Vjb25kcyAlIDg2NDAwKSAvIDM2MDApOwogIGNvbnN0IG1pbnV0ZXMgPSBNYXRoLmZsb29yKCh1cHRpbWVTZWNvbmRzICUgMzYwMCkgLyA2MCk7CiAgcmV0dXJuIGAke2RheXN9ZCAke2hvdXJzfWggJHttaW51dGVzfW1gOwp9CgovKioKICogR2V0cyBudW1iZXIgb2YgbG9nZ2VkIGluIHVzZXJzCiAqIFVzZXMgd2hvIGNvbW1hbmQgdG8gY291bnQgYWN0aXZlIHVzZXIgc2Vzc2lvbnMgKExpbnV4IG9ubHkpCiAqIEByZXR1cm5zIFVzZXIgY291bnQgd2l0aCAidXNlcnMiIHN1ZmZpeCBvciBlbXB0eSBzdHJpbmcKICogQGV4YW1wbGUgIjMgdXNlcnMiLCAiMSB1c2VycyIKICovCmV4cG9ydCBmdW5jdGlvbiB1c2Vyc19sb2dnZWRfaW4oKTogc3RyaW5nIHsKICBpZiAoIUlTX0xJTlVYKSByZXR1cm4gIiI7CgogIHRyeSB7CiAgICBjb25zdCB3aG8gPSBleGVjQ29tbWFuZCgid2hvIik7CiAgICBjb25zdCB1c2VycyA9IHdoby5zcGxpdCgiXG4iKS5maWx0ZXIoKGxpbmUpID0+IGxpbmUudHJpbSgpKS5sZW5ndGg7CiAgICBpZiAodXNlcnMgPiAwKSB7CiAgICAgIHJldHVybiBgJHt1c2Vyc30gdXNlcnNgOwogICAgfQogIH0gY2F0Y2gge30KICByZXR1cm4gIiI7Cn0K\"","export default \"data:video/mp2t;base64,LyoqCiAqIFNldHRpbmdzIGNvbmZpZ3VyYXRpb24gYW5kIG1hbmFnZW1lbnQKICogQG1vZHVsZSBpbmZvL3NldHRpbmdzCiAqLwoKaW1wb3J0IHBhdGggZnJvbSAicGF0aCI7CmltcG9ydCBvcyBmcm9tICJvcyI7CmltcG9ydCBmcyBmcm9tICJmcyI7CmltcG9ydCBwcm9jZXNzIGZyb20gInByb2Nlc3MiOwoKLy8gU2V0dGluZ3MgZmlsZSBwYXRocwpleHBvcnQgY29uc3QgU0VUVElOR1NfRklMRSA9IHBhdGguam9pbigKICBvcy5ob21lZGlyKCksCiAgIi5jb25maWciLAogICJzeXN0ZW1pbmZvLXNldHRpbmdzLmpzb24iLAopOwpleHBvcnQgY29uc3QgQ0FDSEVfRklMRSA9IHBhdGguam9pbihvcy50bXBkaXIoKSwgInN5c3RlbWluZm8tY2FjaGUuanNvbiIpOwoKLy8gQ29sb3IgY29kZXMKZXhwb3J0IGNvbnN0IGNvbG9ycyA9IHsKICByZXNldDogIlx4MWJbMG0iLAogIHJlZDogIlx4MWJbMzg7NTsxOTZtIiwKICBvcmFuZ2U6ICJceDFiWzM4OzU7MjA4bSIsCiAgeWVsbG93OiAiXHgxYlszODs1OzIyNm0iLAogIGdyZWVuOiAiXHgxYlszODs1OzQ2bSIsCiAgYmx1ZTogIlx4MWJbMzg7NTszOW0iLAogIGN5YW46ICJceDFiWzM4OzU7NTFtIiwKICBwdXJwbGU6ICJceDFiWzM4OzU7MTcxbSIsCiAgbWFnZW50YTogIlx4MWJbMzg7NTsyMTNtIiwKICBncmF5OiAiXHgxYlszODs1OzI1MG0iLAogIGxpZ2h0Ymx1ZTogIlx4MWJbMzg7NTsyMjBtIiwKfTsKCi8vIERlZmF1bHQgc2V0dGluZ3MKZXhwb3J0IGNvbnN0IERFRkFVTFRfU0VUVElOR1MgPSB7CiAgZGlzcGxheV9vcmRlcjogWwogICAgWyJ1c2VyIiwgImhvc3RuYW1lIiwgIm9zIiwgImRldmljZSIsICJrZXJuZWwiLCAiY3B1IiwgImdwdSIsICJiZW5jaCJdLAogICAgWwogICAgICAiZGlza191c2VkIiwKICAgICAgInJhbV91c2VkIiwKICAgICAgInRvcF9wcm9jZXNzIiwKICAgICAgInVwdGltZSIsCiAgICAgICJ0ZW1wZXJhdHVyZSIsCiAgICAgICJiYXR0ZXJ5IiwKICAgICAgImxvYWRfYXZlcmFnZSIsCiAgICBdLAogICAgWyJpcCIsICJpcGxvY2FsIiwgImNpdHkiLCAiZG9tYWluIiwgImlzcCJdLAogICAgWyJzaGVsbCIsICJzZXJ2aWNlc19ydW5uaW5nIiwgInBhY21hbiIsICJjb250YWluZXJzIl0sCiAgXSwKICBjb2xvcnM6IHsKICAgIHVzZXI6ICJyZWQiLAogICAgaG9zdG5hbWU6ICJvcmFuZ2UiLAogICAgZGlza191c2VkOiAicHVycGxlIiwKICAgIHJhbV91c2VkOiAieWVsbG93IiwKICAgIHRvcF9wcm9jZXNzOiAibWFnZW50YSIsCiAgICB1cHRpbWU6ICJjeWFuIiwKICAgIGlwOiAiZ3JlZW4iLAogICAgaXBsb2NhbDogInllbGxvdyIsCiAgICBjaXR5OiAiZ3JlZW4iLAogICAgZG9tYWluOiAiZ3JheSIsCiAgICBpc3A6ICJsaWdodGJsdWUiLAogICAgb3M6ICJncmF5IiwKICAgIGNwdTogIm9yYW5nZSIsCiAgICBncHU6ICJ5ZWxsb3ciLAogICAgYmVuY2g6ICJyZWQiLAogICAgZGV2aWNlOiAieWVsbG93IiwKICAgIGtlcm5lbDogImdyZWVuIiwKICAgIHNoZWxsOiAib3JhbmdlIiwKICAgIHBhY21hbjogIm11bHRpY29sb3IiLAogICAgcG9ydHM6ICJtdWx0aWNvbG9yIiwKICAgIGNvbnRhaW5lcnM6ICJncmVlbiIsCiAgICBtZW1vcnlfYXZhaWxhYmxlOiAiYmx1ZSIsCiAgICBzd2FwX3VzZWQ6ICJwdXJwbGUiLAogICAgbG9hZF9hdmVyYWdlOiAicmVkIiwKICAgIHVzZXJzX2xvZ2dlZF9pbjogImN5YW4iLAogICAgbmV0d29ya19pbnRlcmZhY2VzOiAieWVsbG93IiwKICAgIG1vdW50X3BvaW50czogImdyYXkiLAogICAgc2VydmljZXNfcnVubmluZzogImdyZWVuIiwKICAgIHRlbXBlcmF0dXJlOiAicmVkIiwKICAgIGJhdHRlcnk6ICJncmVlbiIsCiAgICBzY3JlZW5fcmVzb2x1dGlvbjogImJsdWUiLAogIH0sCiAgZW1vamlzOiB7CiAgICB1c2VyOiAi8J+RpCAiLAogICAgaG9zdG5hbWU6ICLwn4+gICIsCiAgICBpcDogIvCfjI4gIiwKICAgIGlwbG9jYWw6ICLwn4yQICIsCiAgICBjaXR5OiAi8J+TjSAiLAogICAgZG9tYWluOiAi8J+UlyAiLAogICAgaXNwOiAi8J+RriAiLAogICAgb3M6ICLimqEgIiwKICAgIGNwdTogIvCfk4ggIiwKICAgIGdwdTogIvCfjq4gIiwKICAgIGJlbmNoOiAi8J+SqiAiLAogICAgZGV2aWNlOiAi8J+SuyAiLAogICAga2VybmVsOiAi8J+UpyAiLAogICAgc2hlbGw6ICLwn5CaICIsCiAgICBwYWNtYW46ICLwn5qAICIsCiAgICBkaXNrX3VzZWQ6ICLwn5OBICIsCiAgICByYW1fdXNlZDogIvCfkr4gIiwKICAgIHRvcF9wcm9jZXNzOiAi8J+UnSAiLAogICAgdXB0aW1lOiAi4o+x77iPICIsCiAgICBwb3J0czogIvCflIwgIiwKICAgIGNvbnRhaW5lcnM6ICLwn5OmICIsCiAgICBtZW1vcnlfYXZhaWxhYmxlOiAi8J+noCAiLAogICAgc3dhcF91c2VkOiAi8J+UhCAiLAogICAgbG9hZF9hdmVyYWdlOiAi4pqW77iPICIsCiAgICB1c2Vyc19sb2dnZWRfaW46ICLwn5GlICIsCiAgICBuZXR3b3JrX2ludGVyZmFjZXM6ICLwn4yQICIsCiAgICBtb3VudF9wb2ludHM6ICLwn5OCICIsCiAgICBzZXJ2aWNlc19ydW5uaW5nOiAi4pqZ77iPICIsCiAgICB0ZW1wZXJhdHVyZTogIvCfjKHvuI8gIiwKICAgIGJhdHRlcnlfY2hhcmdpbmc6ICLwn5SMICIsCiAgICBiYXR0ZXJ5OiAi8J+UiyAiLAogICAgc2NyZWVuX3Jlc29sdXRpb246ICLwn5al77iPICIsCiAgfSwKICBsYWJlbHM6IHsKICAgIHVzZXI6ICJVc2VyIiwKICAgIGhvc3RuYW1lOiAiSG9zdCIsCiAgICBpcDogIklQIiwKICAgIGlwbG9jYWw6ICJMb2NhbCBJUCIsCiAgICBjaXR5OiAiQ2l0eSIsCiAgICBkb21haW46ICJEb21haW4iLAogICAgaXNwOiAiSVNQIiwKICAgIG9zOiAiT1MiLAogICAgY3B1OiAiQ1BVIiwKICAgIGdwdTogIkdQVSIsCiAgICBiZW5jaDogIkJlbmNoIiwKICAgIGRldmljZTogIkRldmljZSIsCiAgICBrZXJuZWw6ICJLZXJuZWwiLAogICAgc2hlbGw6ICJTaGVsbCIsCiAgICBwYWNtYW46ICJQYWNrYWdlcyIsCiAgICBkaXNrX3VzZWQ6ICJEaXNrIiwKICAgIHJhbV91c2VkOiAiUkFNIiwKICAgIHRvcF9wcm9jZXNzOiAiVG9wIiwKICAgIHVwdGltZTogIlVwdGltZSIsCiAgICBwb3J0czogIlBvcnRzIiwKICAgIGNvbnRhaW5lcnM6ICJDb250YWluZXJzIiwKICAgIG1lbW9yeV9hdmFpbGFibGU6ICJNZW1vcnkiLAogICAgc3dhcF91c2VkOiAiU3dhcCIsCiAgICBsb2FkX2F2ZXJhZ2U6ICJMb2FkIiwKICAgIHVzZXJzX2xvZ2dlZF9pbjogIlVzZXJzIiwKICAgIG5ldHdvcmtfaW50ZXJmYWNlczogIk5ldHdvcmsiLAogICAgbW91bnRfcG9pbnRzOiAiTW91bnRzIiwKICAgIHNlcnZpY2VzX3J1bm5pbmc6ICJTZXJ2aWNlcyIsCiAgICB0ZW1wZXJhdHVyZTogIlRlbXAiLAogICAgYmF0dGVyeV9jaGFyZ2luZzogIkJhdHRlcnkiLAogICAgYmF0dGVyeTogIkJhdHRlcnkiLAogICAgc2NyZWVuX3Jlc29sdXRpb246ICJSZXNvbHV0aW9uIiwKICB9LAogIGRpc3BsYXk6IHsKICAgIHNob3dfZW1vamlzOiB0cnVlLAogICAgc2luZ2xlX2xpbmU6IGZhbHNlLAogICAgbGluZV93cmFwX2xlbmd0aDogcHJvY2Vzcz8uc3Rkb3V0Py5jb2x1bW5zIHx8IDEwMCwKICB9LAogIG5ldHdvcms6IHsKICAgIHNob3dfb2ZmbGluZV9tZXNzYWdlOiB0cnVlLAogIH0sCiAgYWR2YW5jZWQ6IHsKICAgIGRlYnVnOiBmYWxzZSwKICB9LAp9OwoKZXhwb3J0IGludGVyZmFjZSBTZXR0aW5ncyB7CiAgZGlzcGxheV9vcmRlcjogc3RyaW5nW11bXTsKICBjb2xvcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47CiAgZW1vamlzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+OwogIGxhYmVsczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjsKICBkaXNwbGF5OiB7CiAgICBzaG93X2Vtb2ppczogYm9vbGVhbjsKICAgIHNpbmdsZV9saW5lOiBib29sZWFuOwogICAgbGluZV93cmFwX2xlbmd0aDogbnVtYmVyOwogIH07CiAgbmV0d29yazogewogICAgc2hvd19vZmZsaW5lX21lc3NhZ2U6IGJvb2xlYW47CiAgfTsKICBhZHZhbmNlZDogewogICAgZGVidWc6IGJvb2xlYW47CiAgfTsKfQoKLyoqCiAqIExvYWRzIHNldHRpbmdzIGZyb20gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZQogKiBAcmV0dXJucyBTZXR0aW5ncyBvYmplY3QgKGRlZmF1bHRzIG1lcmdlZCB3aXRoIHVzZXIgc2V0dGluZ3MpCiAqLwpleHBvcnQgZnVuY3Rpb24gbG9hZFNldHRpbmdzKCk6IFNldHRpbmdzIHsKICB0cnkgewogICAgaWYgKGZzLmV4aXN0c1N5bmMoU0VUVElOR1NfRklMRSkpIHsKICAgICAgY29uc3Qgc2V0dGluZ3MgPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhTRVRUSU5HU19GSUxFLCAidXRmOCIpKTsKICAgICAgcmV0dXJuIHsgLi4uREVGQVVMVF9TRVRUSU5HUywgLi4uc2V0dGluZ3MgfTsKICAgIH0KICB9IGNhdGNoIHt9CiAgcmV0dXJuIERFRkFVTFRfU0VUVElOR1M7Cn0KCi8qKgogKiBTYXZlcyBzZXR0aW5ncyB0byB0aGUgY29uZmlndXJhdGlvbiBmaWxlCiAqIEBwYXJhbSBzZXR0aW5ncyAtIFRoZSBzZXR0aW5ncyBvYmplY3QgdG8gc2F2ZQogKiBAcmV0dXJucyBUcnVlIGlmIHN1Y2Nlc3NmdWwsIGZhbHNlIG90aGVyd2lzZQogKi8KZXhwb3J0IGZ1bmN0aW9uIHNhdmVTZXR0aW5ncyhzZXR0aW5nczogU2V0dGluZ3MpOiBib29sZWFuIHsKICB0cnkgewogICAgY29uc3QgY29uZmlnRGlyID0gcGF0aC5kaXJuYW1lKFNFVFRJTkdTX0ZJTEUpOwogICAgaWYgKCFmcy5leGlzdHNTeW5jKGNvbmZpZ0RpcikpIHsKICAgICAgZnMubWtkaXJTeW5jKGNvbmZpZ0RpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7CiAgICB9CiAgICBmcy53cml0ZUZpbGVTeW5jKFNFVFRJTkdTX0ZJTEUsIEpTT04uc3RyaW5naWZ5KHNldHRpbmdzLCBudWxsLCAyKSk7CiAgICByZXR1cm4gdHJ1ZTsKICB9IGNhdGNoIHsKICAgIHJldHVybiBmYWxzZTsKICB9Cn0K\"","export default \"data:video/mp2t;base64,LyoqCiAqIFNvZnR3YXJlIGFuZCBwYWNrYWdlLXJlbGF0ZWQgc3lzdGVtIGluZm9ybWF0aW9uIGZ1bmN0aW9ucwogKiBAbW9kdWxlIGluZm8vc29mdHdhcmUKICovCgppbXBvcnQgcHJvY2VzcyBmcm9tICJwcm9jZXNzIjsKaW1wb3J0IHR5cGUgeyBJbmZvQ29udGV4dCB9IGZyb20gIi4uL3R5cGVzL2ludGVybmFsLXR5cGVzIjsKaW1wb3J0IHsgSVNfTElOVVggfSBmcm9tICIuLi91dGlscy9wbGF0Zm9ybSI7CmltcG9ydCB7IGV4ZWNDb21tYW5kLCBjb21tYW5kRXhpc3RzIH0gZnJvbSAiLi4vdXRpbHMvY29tbWFuZCI7CmltcG9ydCB7IGdldENhY2hlZFZhbHVlLCBzZXRDYWNoZWRWYWx1ZSB9IGZyb20gIi4uL2NhY2hlL2NhY2hlIjsKCi8qKgogKiBHZXRzIHRoZSBjdXJyZW50IHNoZWxsIG5hbWUKICogVXNlcyBwcyBjb21tYW5kIHRvIGZpbmQgcGFyZW50IHByb2Nlc3Mgc2hlbGwgKExpbnV4L1VuaXggb25seSkKICogQHJldHVybnMgU2hlbGwgbmFtZSBvciBlbXB0eSBzdHJpbmcgb24gV2luZG93cwogKiBAZXhhbXBsZSAiYmFzaCIsICJ6c2giLCAiZmlzaCIsICJudSIKICovCmV4cG9ydCBmdW5jdGlvbiBzaGVsbChjb250ZXh0OiBJbmZvQ29udGV4dCk6IHN0cmluZyB7CiAgY29uc3QgY2FjaGVkID0gZ2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgInNoZWxsIik7CiAgaWYgKGNhY2hlZCAhPT0gbnVsbCkgcmV0dXJuIGNhY2hlZDsKCiAgaWYgKElTX0xJTlVYKSB7CiAgICB0cnkgewogICAgICBjb25zdCBwcGlkID0gcHJvY2Vzcy5wcGlkOwogICAgICBjb25zdCBzaGVsbE5hbWUgPSBleGVjQ29tbWFuZChgcHMgLXAgJHtwcGlkfSAtbyBjb21tPWApLnNwbGl0KCIvIikucG9wKCk7CiAgICAgIGlmIChzaGVsbE5hbWUpIHsKICAgICAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAic2hlbGwiLCBzaGVsbE5hbWUpOwogICAgICAgIHJldHVybiBzaGVsbE5hbWU7CiAgICAgIH0KICAgIH0gY2F0Y2gge30KICB9CgogIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJzaGVsbCIsICIiKTsKICByZXR1cm4gIiI7Cn0KCi8qKgogKiBHZXRzIGF2YWlsYWJsZSBwYWNrYWdlIG1hbmFnZXJzIGFuZCBkZXZlbG9wbWVudCB0b29scwogKiBDaGVja3MgZm9yIHBhY2thZ2UgbWFuYWdlcnMgKGFwdCwgeXVtLCBucG0sIGV0Yy4pIGFuZCBlZGl0b3JzIChudmltLCBoeCkKICogQHBhcmFtIGNvbnRleHQgLSBJbmZvIGNvbnRleHQgd2l0aCBjYWNoZQogKiBAcmV0dXJucyBTcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBhdmFpbGFibGUgY29tbWFuZHMKICogQGV4YW1wbGUgImFwdCBucG0gZG9ja2VyIG52aW0iLCAieWF5IHBhY21hbiBidW4gaHgiCiAqLwpleHBvcnQgZnVuY3Rpb24gcGFja2FnZXMoY29udGV4dDogSW5mb0NvbnRleHQpOiBzdHJpbmcgewogIGNvbnN0IGNhY2hlZCA9IGdldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJwYWNrYWdlcyIpOwogIGlmIChjYWNoZWQgIT09IG51bGwpIHJldHVybiBjYWNoZWQ7CgogIGNvbnN0IGNvbW1hbmRzID0gWwogICAgImFwdCIsCiAgICAibnBtIiwKICAgICJ1diIsCiAgICAiZG9ja2VyIiwKICAgICJoeCIsCiAgICAibnZpbSIsCiAgICAiYnVuIiwKICAgICJ5YXkiLAogICAgInBhY21hbiIsCiAgICAieXVtIiwKICAgICJkbmYiLAogICAgInp5cHBlciIsCiAgICAiZW1lcmdlIiwKICAgICJhcGsiLAogICAgInNuYXAiLAogICAgImZsYXRwYWsiLAogIF07CiAgY29uc3QgYXZhaWxhYmxlID0gY29tbWFuZHMuZmlsdGVyKChjbWQpID0+IGNvbW1hbmRFeGlzdHMoY21kKSk7CgogIGNvbnN0IHJlc3VsdCA9IGF2YWlsYWJsZS5qb2luKCIgIik7CiAgc2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgInBhY2thZ2VzIiwgcmVzdWx0KTsKICByZXR1cm4gcmVzdWx0Owp9CgovKioKICogR2V0cyB2ZXJzaW9ucyBvZiBjb21tb24gc29mdHdhcmUgdG9vbHMKICogQHBhcmFtIGNvbnRleHQgLSBJbmZvIGNvbnRleHQgd2l0aCBjYWNoZQogKiBAcmV0dXJucyBGb3JtYXR0ZWQgc3RyaW5nIG9mIHRvb2wgdmVyc2lvbnMKICogQGV4YW1wbGUgIm5vZGU6MjAuMS4wIGdpdDoyLjM0LjEiCiAqLwpleHBvcnQgZnVuY3Rpb24gY29tbW9uX3ZlcnNpb25zKGNvbnRleHQ6IEluZm9Db250ZXh0KTogc3RyaW5nIHsKICBjb25zdCBjYWNoZWQgPSBnZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiY29tbW9uX3ZlcnNpb25zIik7CiAgaWYgKGNhY2hlZCAhPT0gbnVsbCkgcmV0dXJuIGNhY2hlZDsKCiAgY29uc3QgdG9vbHMgPSBbCiAgICB7CiAgICAgIGNtZDogIm5vZGUiLAogICAgICBhcmdzOiAiLS12ZXJzaW9uIiwKICAgICAgY2xlYW46ICh2OiBzdHJpbmcpID0+IHYucmVwbGFjZSgvXnYvLCAiIiksCiAgICB9LAogICAgewogICAgICBjbWQ6ICJnaXQiLAogICAgICBhcmdzOiAiLS12ZXJzaW9uIiwKICAgICAgY2xlYW46ICh2OiBzdHJpbmcpID0+IHYucmVwbGFjZSgiZ2l0IHZlcnNpb24gIiwgIiIpLAogICAgfSwKICAgIHsKICAgICAgY21kOiAiZG9ja2VyIiwKICAgICAgYXJnczogIi0tdmVyc2lvbiIsCiAgICAgIGNsZWFuOiAodjogc3RyaW5nKSA9PiB2LnJlcGxhY2UoL0RvY2tlciB2ZXJzaW9uIChbXixdKyksLiovLCAiJDEiKSwKICAgIH0sCiAgICB7CiAgICAgIGNtZDogInB5dGhvbjMiLAogICAgICBhcmdzOiAiLS12ZXJzaW9uIiwKICAgICAgY2xlYW46ICh2OiBzdHJpbmcpID0+IHYucmVwbGFjZSgiUHl0aG9uICIsICIiKSwKICAgIH0sCiAgICB7CiAgICAgIGNtZDogImdvIiwKICAgICAgYXJnczogInZlcnNpb24iLAogICAgICBjbGVhbjogKHY6IHN0cmluZykgPT4gdi5yZXBsYWNlKCJnbyB2ZXJzaW9uIGdvIiwgIiIpLnNwbGl0KCIgIilbMF0sCiAgICB9LAogICAgewogICAgICBjbWQ6ICJydXN0YyIsCiAgICAgIGFyZ3M6ICItLXZlcnNpb24iLAogICAgICBjbGVhbjogKHY6IHN0cmluZykgPT4gdi5yZXBsYWNlKCJydXN0YyAiLCAiIikuc3BsaXQoIiAiKVswXSwKICAgIH0sCiAgXTsKCiAgY29uc3QgdmVyc2lvbnM6IHN0cmluZ1tdID0gW107CgogIGZvciAoY29uc3QgdG9vbCBvZiB0b29scykgewogICAgaWYgKGNvbW1hbmRFeGlzdHModG9vbC5jbWQpKSB7CiAgICAgIHRyeSB7CiAgICAgICAgY29uc3Qgb3V0cHV0ID0gZXhlY0NvbW1hbmQoYCR7dG9vbC5jbWR9ICR7dG9vbC5hcmdzfWApOwogICAgICAgIGNvbnN0IHZlcnNpb24gPSB0b29sLmNsZWFuKG91dHB1dCkudHJpbSgpOwogICAgICAgIGlmICh2ZXJzaW9uKSB7CiAgICAgICAgICB2ZXJzaW9ucy5wdXNoKGAke3Rvb2wuY21kfToke3ZlcnNpb259YCk7CiAgICAgICAgfQogICAgICB9IGNhdGNoIHt9CiAgICB9CiAgfQoKICBjb25zdCByZXN1bHQgPSB2ZXJzaW9ucy5qb2luKCIgIik7CiAgc2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgImNvbW1vbl92ZXJzaW9ucyIsIHJlc3VsdCk7CiAgcmV0dXJuIHJlc3VsdDsKfQovKioKICogR2V0cyBydW5uaW5nIERvY2tlciBjb250YWluZXIgbmFtZXMKICogTGlzdHMgYWN0aXZlIERvY2tlciBjb250YWluZXJzIHdpdGggdGhlaXIgbmFtZXMKICogQHBhcmFtIGNvbnRleHQgLSBJbmZvIGNvbnRleHQgd2l0aCBjYWNoZQogKiBAcmV0dXJucyBTcGFjZS1zZXBhcmF0ZWQgY29udGFpbmVyIG5hbWVzIG9yIGVtcHR5IHN0cmluZwogKiBAZXhhbXBsZSAibmdpbnggcmVkaXMgcG9zdGdyZXMiLCAid2ViLWFwcCBkYi1zZXJ2ZXIiCiAqLwpleHBvcnQgZnVuY3Rpb24gY29udGFpbmVycyhjb250ZXh0OiBJbmZvQ29udGV4dCk6IHN0cmluZyB7CiAgY29uc3QgY2FjaGVkID0gZ2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgImNvbnRhaW5lcnMiKTsKICBpZiAoY2FjaGVkICE9PSBudWxsKSByZXR1cm4gY2FjaGVkOwoKICBpZiAoIWNvbW1hbmRFeGlzdHMoImRvY2tlciIpKSB7CiAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiY29udGFpbmVycyIsICIiKTsKICAgIHJldHVybiAiIjsKICB9CgogIHRyeSB7CiAgICBjb25zdCBjb250YWluZXJDb3VudCA9IGV4ZWNDb21tYW5kKCJkb2NrZXIgcHMgLXEiKQogICAgICAuc3BsaXQoIlxuIikKICAgICAgLmZpbHRlcigobGluZSkgPT4gbGluZS50cmltKCkpLmxlbmd0aDsKICAgIGlmIChjb250YWluZXJDb3VudCA9PT0gMCkgewogICAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiY29udGFpbmVycyIsICIiKTsKICAgICAgcmV0dXJuICIiOwogICAgfQoKICAgIGNvbnN0IGNvbnRhaW5lcnMgPSBleGVjQ29tbWFuZCgKICAgICAgJ2RvY2tlciBwcyAtLWZvcm1hdCAie3suTmFtZXN9fVx0e3suUG9ydHN9fSInCiAgICApOwogICAgY29uc3QgbGluZXMgPSBjb250YWluZXJzLnNwbGl0KCJcbiIpLmZpbHRlcigobGluZSkgPT4gbGluZS50cmltKCkpOwoKICAgIGNvbnN0IGNvbnRhaW5lckluZm86IHN0cmluZ1tdID0gW107CgogICAgbGluZXMuZm9yRWFjaCgobGluZSkgPT4gewogICAgICBjb25zdCBbbmFtZSwgcG9ydHNdID0gbGluZS5zcGxpdCgiXHQiKTsKICAgICAgaWYgKG5hbWUpIHsKICAgICAgICBjb250YWluZXJJbmZvLnB1c2gobmFtZSk7CgogICAgICAgIGlmIChwb3J0cykgewogICAgICAgICAgY29uc3QgcG9ydE1hdGNoZXMgPSBwb3J0cy5tYXRjaCgvLT4oXGQrKC1cZCspPylcLy9nKTsKICAgICAgICAgIGlmIChwb3J0TWF0Y2hlcykgewogICAgICAgICAgICBjb25zdCB1bmlxdWVQb3J0cyA9IFsKICAgICAgICAgICAgICAuLi5uZXcgU2V0KAogICAgICAgICAgICAgICAgcG9ydE1hdGNoZXMubWFwKChwKSA9PiBwLnJlcGxhY2UoLy0+XGQrKC1cZCspP1wvLywgIiIpKQogICAgICAgICAgICAgICksCiAgICAgICAgICAgIF07CiAgICAgICAgICAgIGNvbnRhaW5lckluZm8ucHVzaCguLi51bmlxdWVQb3J0cyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKCiAgICBjb25zdCByZXN1bHQgPSBjb250YWluZXJJbmZvLmpvaW4oIiAiKTsKICAgIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJjb250YWluZXJzIiwgcmVzdWx0KTsKICAgIHJldHVybiByZXN1bHQ7CiAgfSBjYXRjaCB7fQoKICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiY29udGFpbmVycyIsICIiKTsKICByZXR1cm4gIiI7Cn0K\"","export default \"data:video/mp2t;base64,LyoqCiAqIFN5c3RlbSBzdGF0dXMgYW5kIGhlYWx0aCBpbmZvcm1hdGlvbiBmdW5jdGlvbnMKICogQG1vZHVsZSBpbmZvL3N5c3RlbS1zdGF0dXMKICovCgppbXBvcnQgZnMgZnJvbSAiZnMiOwppbXBvcnQgb3MgZnJvbSAib3MiOwppbXBvcnQgdHlwZSB7IEluZm9Db250ZXh0IH0gZnJvbSAiLi4vdHlwZXMvaW50ZXJuYWwtdHlwZXMiOwppbXBvcnQgeyBJU19MSU5VWCB9IGZyb20gIi4uL3V0aWxzL3BsYXRmb3JtIjsKaW1wb3J0IHsgZXhlY0NvbW1hbmQsIGNvbW1hbmRFeGlzdHMgfSBmcm9tICIuLi91dGlscy9jb21tYW5kIjsKaW1wb3J0IHsgZ2V0Q2FjaGVkVmFsdWUsIHNldENhY2hlZFZhbHVlIH0gZnJvbSAiLi4vY2FjaGUvY2FjaGUiOwoKLyoqCiAqIEdldHMgc3lzdGVtIGxvYWQgYXZlcmFnZXMKICogUmVhZHMgMSwgNSwgYW5kIDE1IG1pbnV0ZSBsb2FkIGF2ZXJhZ2VzIGZyb20gL3Byb2MvbG9hZGF2ZyAoTGludXggb25seSkKICogQHJldHVybnMgU3BhY2Utc2VwYXJhdGVkIGxvYWQgYXZlcmFnZXMgKDFtIDVtIDE1bSkgb3IgZW1wdHkgc3RyaW5nCiAqIEBleGFtcGxlICIwLjUyIDAuNTggMC41OSIsICIyLjEwIDEuOTUgMS44OCIKICovCmV4cG9ydCBmdW5jdGlvbiBsb2FkX2F2ZXJhZ2UoY29udGV4dDogSW5mb0NvbnRleHQpOiBzdHJpbmcgewogIGlmICghSVNfTElOVVgpIHJldHVybiAiIjsKCiAgdHJ5IHsKICAgIGNvbnN0IGxvYWRhdmcgPSBmcy5yZWFkRmlsZVN5bmMoIi9wcm9jL2xvYWRhdmciLCAidXRmOCIpOwogICAgY29uc3QgbG9hZHMgPSBsb2FkYXZnLnNwbGl0KCIgIikuc2xpY2UoMCwgMyk7CiAgICByZXR1cm4gbG9hZHMuam9pbigiICIpOwogIH0gY2F0Y2gge30KICByZXR1cm4gIiI7Cn0KCi8qKgogKiBHZXRzIGJhdHRlcnkgY2hhcmdlIGxldmVsIGFuZCBjaGFyZ2luZyBzdGF0dXMKICogUmVhZHMgZnJvbSAvc3lzL2NsYXNzL3Bvd2VyX3N1cHBseS9CQVQwIChMaW51eCBsYXB0b3BzIG9ubHkpCiAqIEBwYXJhbSBjb250ZXh0IC0gSW5mbyBjb250ZXh0IHdpdGggY2FjaGUKICogQHJldHVybnMgQmF0dGVyeSBwZXJjZW50YWdlIHdpdGggb3B0aW9uYWwgKyBmb3IgY2hhcmdpbmcsIG9yIGVtcHR5IHN0cmluZwogKiBAZXhhbXBsZSAiODUlIiwgIjQyJSsiLCAiMTAwJSIKICovCmV4cG9ydCBmdW5jdGlvbiBiYXR0ZXJ5KGNvbnRleHQ6IEluZm9Db250ZXh0KTogc3RyaW5nIHsKICBjb25zdCBjYWNoZWQgPSBnZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiYmF0dGVyeSIpOwogIGlmIChjYWNoZWQgIT09IG51bGwpIHJldHVybiBjYWNoZWQ7CgogIGlmICghSVNfTElOVVgpIHsKICAgIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJiYXR0ZXJ5IiwgIiIpOwogICAgcmV0dXJuICIiOwogIH0KCiAgdHJ5IHsKICAgIGNvbnN0IGJhdHRlcnlQYXRoID0gIi9zeXMvY2xhc3MvcG93ZXJfc3VwcGx5L0JBVDAiOwogICAgY29uc3QgY2FwYWNpdHlQYXRoID0gYCR7YmF0dGVyeVBhdGh9L2NhcGFjaXR5YDsKICAgIGNvbnN0IHN0YXR1c1BhdGggPSBgJHtiYXR0ZXJ5UGF0aH0vc3RhdHVzYDsKCiAgICBpZiAoZnMuZXhpc3RzU3luYyhjYXBhY2l0eVBhdGgpKSB7CiAgICAgIGNvbnN0IGNhcGFjaXR5ID0gZnMucmVhZEZpbGVTeW5jKGNhcGFjaXR5UGF0aCwgInV0ZjgiKS50cmltKCk7CiAgICAgIGNvbnN0IHN0YXR1cyA9IGZzLmV4aXN0c1N5bmMoc3RhdHVzUGF0aCkKICAgICAgICA/IGZzLnJlYWRGaWxlU3luYyhzdGF0dXNQYXRoLCAidXRmOCIpLnRyaW0oKQogICAgICAgIDogIlVua25vd24iOwoKICAgICAgY29uc3QgYmF0dGVyeVBlcmNlbnQgPSBwYXJzZUludChjYXBhY2l0eSk7CiAgICAgIGNvbnN0IGlzQ2hhcmdpbmcgPSBzdGF0dXMgPT09ICJDaGFyZ2luZyI7CiAgICAgIGNvbnN0IHJlc3VsdCA9IGAke2JhdHRlcnlQZXJjZW50fSUke2lzQ2hhcmdpbmcgPyAiKyIgOiAiIn1gOwogICAgICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiYmF0dGVyeSIsIHJlc3VsdCk7CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgfSBjYXRjaCB7fQoKICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAiYmF0dGVyeSIsICIiKTsKICByZXR1cm4gIiI7Cn0KCi8qKgogKiBHZXRzIHN5c3RlbSB0ZW1wZXJhdHVyZSBpbiBDZWxzaXVzCiAqIFJlYWRzIGZyb20gdGhlcm1hbCB6b25lIG9yIGh3bW9uIHNlbnNvcnMgKExpbnV4IG9ubHkpCiAqIEBwYXJhbSBjb250ZXh0IC0gSW5mbyBjb250ZXh0IHdpdGggY2FjaGUKICogQHJldHVybnMgVGVtcGVyYXR1cmUgd2l0aCDCsEMgc3VmZml4IG9yIGVtcHR5IHN0cmluZwogKiBAZXhhbXBsZSAiNDXCsEMiLCAiNjLCsEMiCiAqLwpleHBvcnQgZnVuY3Rpb24gdGVtcGVyYXR1cmUoY29udGV4dDogSW5mb0NvbnRleHQpOiBzdHJpbmcgewogIGNvbnN0IGNhY2hlZCA9IGdldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJ0ZW1wZXJhdHVyZSIpOwogIGlmIChjYWNoZWQgIT09IG51bGwpIHJldHVybiBjYWNoZWQ7CgogIGlmICghSVNfTElOVVgpIHsKICAgIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJ0ZW1wZXJhdHVyZSIsICIiKTsKICAgIHJldHVybiAiIjsKICB9CgogIHRyeSB7CiAgICBjb25zdCB0ZW1wU291cmNlcyA9IFsKICAgICAgIi9zeXMvY2xhc3MvdGhlcm1hbC90aGVybWFsX3pvbmUwL3RlbXAiLAogICAgICAiL3N5cy9jbGFzcy9od21vbi9od21vbjAvdGVtcDFfaW5wdXQiLAogICAgICAiL3N5cy9jbGFzcy9od21vbi9od21vbjEvdGVtcDFfaW5wdXQiLAogICAgXTsKCiAgICBmb3IgKGNvbnN0IHNvdXJjZSBvZiB0ZW1wU291cmNlcykgewogICAgICBpZiAoZnMuZXhpc3RzU3luYyhzb3VyY2UpKSB7CiAgICAgICAgY29uc3QgdGVtcCA9IGZzLnJlYWRGaWxlU3luYyhzb3VyY2UsICJ1dGY4IikudHJpbSgpOwogICAgICAgIGNvbnN0IHRlbXBDID0gTWF0aC5yb3VuZChwYXJzZUludCh0ZW1wKSAvIDEwMDApOwoKICAgICAgICBpZiAodGVtcEMgPiAwICYmIHRlbXBDIDwgMTUwKSB7CiAgICAgICAgICBjb25zdCByZXN1bHQgPSBgJHt0ZW1wQ33CsENgOwogICAgICAgICAgc2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgInRlbXBlcmF0dXJlIiwgcmVzdWx0KTsKICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfSBjYXRjaCB7fQoKICBzZXRDYWNoZWRWYWx1ZShjb250ZXh0LmNhY2hlLCAidGVtcGVyYXR1cmUiLCAiIik7CiAgcmV0dXJuICIiOwp9CgovKioKICogR2V0cyBjb3VudCBvZiBydW5uaW5nIHN5c3RlbSBzZXJ2aWNlcwogKiBVc2VzIHN5c3RlbWN0bCBvciBzZXJ2aWNlIGNvbW1hbmQgKExpbnV4IG9ubHkpCiAqIEBwYXJhbSBjb250ZXh0IC0gSW5mbyBjb250ZXh0IHdpdGggY2FjaGUKICogQHJldHVybnMgU2VydmljZSBjb3VudCB3aXRoICJzZXJ2aWNlcyIgc3VmZml4IG9yIGVtcHR5IHN0cmluZwogKiBAZXhhbXBsZSAiMTI1IHNlcnZpY2VzIiwgIjg5IHNlcnZpY2VzIgogKi8KZXhwb3J0IGZ1bmN0aW9uIHNlcnZpY2VzX3J1bm5pbmcoY29udGV4dDogSW5mb0NvbnRleHQpOiBzdHJpbmcgewogIGNvbnN0IGNhY2hlZCA9IGdldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJzZXJ2aWNlc19ydW5uaW5nIik7CiAgaWYgKGNhY2hlZCAhPT0gbnVsbCkgcmV0dXJuIGNhY2hlZDsKCiAgaWYgKCFJU19MSU5VWCkgewogICAgc2V0Q2FjaGVkVmFsdWUoY29udGV4dC5jYWNoZSwgInNlcnZpY2VzX3J1bm5pbmciLCAiIik7CiAgICByZXR1cm4gIiI7CiAgfQoKICB0cnkgewogICAgbGV0IHNlcnZpY2VDb3VudCA9IDA7CgogICAgaWYgKGNvbW1hbmRFeGlzdHMoInN5c3RlbWN0bCIpKSB7CiAgICAgIGNvbnN0IHNlcnZpY2VzID0gZXhlY0NvbW1hbmQoCiAgICAgICAgInN5c3RlbWN0bCBsaXN0LXVuaXRzIC0tdHlwZT1zZXJ2aWNlIC0tc3RhdGU9cnVubmluZyAtLW5vLXBhZ2VyIgogICAgICApOwogICAgICBzZXJ2aWNlQ291bnQgPSBzZXJ2aWNlcwogICAgICAgIC5zcGxpdCgiXG4iKQogICAgICAgIC5maWx0ZXIoKGxpbmUpID0+IGxpbmUuaW5jbHVkZXMoIi5zZXJ2aWNlIikpLmxlbmd0aDsKICAgIH0gZWxzZSBpZiAoY29tbWFuZEV4aXN0cygic2VydmljZSIpKSB7CiAgICAgIGNvbnN0IHNlcnZpY2VzID0gZXhlY0NvbW1hbmQoInNlcnZpY2UgLS1zdGF0dXMtYWxsIik7CiAgICAgIHNlcnZpY2VDb3VudCA9IHNlcnZpY2VzCiAgICAgICAgLnNwbGl0KCJcbiIpCiAgICAgICAgLmZpbHRlcigobGluZSkgPT4gbGluZS5pbmNsdWRlcygiKyIpKS5sZW5ndGg7CiAgICB9CgogICAgaWYgKHNlcnZpY2VDb3VudCA+IDApIHsKICAgICAgY29uc3QgcmVzdWx0ID0gYCR7c2VydmljZUNvdW50fSBzZXJ2aWNlc2A7CiAgICAgIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJzZXJ2aWNlc19ydW5uaW5nIiwgcmVzdWx0KTsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICB9IGNhdGNoIHt9CgogIHNldENhY2hlZFZhbHVlKGNvbnRleHQuY2FjaGUsICJzZXJ2aWNlc19ydW5uaW5nIiwgIiIpOwogIHJldHVybiAiIjsKfQo=\"","/**\n * Fuse.js v7.5.0 - Lightweight fuzzy-search (http://fusejs.io)\n *\n * Copyright (c) 2026 Kiro Risk (http://kiro.me)\n * All Rights Reserved. Apache Software License 2.0\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n */\n//#region src/helpers/typeGuards.ts\nfunction isArray(value) {\n\treturn !Array.isArray ? getTag(value) === \"[object Array]\" : Array.isArray(value);\n}\nfunction baseToString(value) {\n\tif (typeof value == \"string\") return value;\n\tif (typeof value === \"bigint\") return value.toString();\n\tconst result = value + \"\";\n\treturn result == \"0\" && 1 / value == -Infinity ? \"-0\" : result;\n}\nfunction toString(value) {\n\treturn value == null ? \"\" : baseToString(value);\n}\nfunction isString(value) {\n\treturn typeof value === \"string\";\n}\nfunction isNumber(value) {\n\treturn typeof value === \"number\";\n}\nfunction isBoolean(value) {\n\treturn value === true || value === false || isObjectLike(value) && getTag(value) == \"[object Boolean]\";\n}\nfunction isObject(value) {\n\treturn typeof value === \"object\";\n}\nfunction isObjectLike(value) {\n\treturn isObject(value) && value !== null;\n}\nfunction isDefined(value) {\n\treturn value !== void 0 && value !== null;\n}\nfunction isBlank(value) {\n\treturn !value.trim().length;\n}\nfunction getTag(value) {\n\treturn value == null ? value === void 0 ? \"[object Undefined]\" : \"[object Null]\" : Object.prototype.toString.call(value);\n}\n\n//#endregion\n//#region src/core/errorMessages.ts\nconst INCORRECT_INDEX_TYPE = \"Incorrect 'index' type\";\nconst INVALID_DOC_INDEX = \"Invalid doc index: must be a non-negative integer within the bounds of the docs array\";\nconst LOGICAL_SEARCH_INVALID_QUERY_FOR_KEY = (key) => `Invalid value for key ${key}`;\nconst PATTERN_LENGTH_TOO_LARGE = (max) => `Pattern length exceeds max of ${max}.`;\nconst MISSING_KEY_PROPERTY = (name) => `Missing ${name} property in key`;\nconst INVALID_KEY_WEIGHT_VALUE = (key) => `Property 'weight' in key '${key}' must be a positive integer`;\nconst FUSE_MATCH_TOKEN_SEARCH_UNSUPPORTED = \"Fuse.match does not support useTokenSearch: token search requires corpus-level statistics (df, fieldCount) that a one-off string comparison does not have. Use new Fuse(...).search(...) instead.\";\n\n//#endregion\n//#region src/tools/KeyStore.ts\nconst hasOwn = Object.prototype.hasOwnProperty;\nvar KeyStore = class {\n\tconstructor(keys) {\n\t\tthis._keys = [];\n\t\tthis._keyMap = {};\n\t\tlet totalWeight = 0;\n\t\tkeys.forEach((key) => {\n\t\t\tconst obj = createKey(key);\n\t\t\tthis._keys.push(obj);\n\t\t\tthis._keyMap[obj.id] = obj;\n\t\t\ttotalWeight += obj.weight;\n\t\t});\n\t\tthis._keys.forEach((key) => {\n\t\t\tkey.weight /= totalWeight;\n\t\t});\n\t}\n\tget(keyId) {\n\t\treturn this._keyMap[keyId];\n\t}\n\tkeys() {\n\t\treturn this._keys;\n\t}\n\ttoJSON() {\n\t\treturn JSON.stringify(this._keys);\n\t}\n};\nfunction createKey(key) {\n\tlet path = null;\n\tlet id = null;\n\tlet src = null;\n\tlet weight = 1;\n\tlet getFn = null;\n\tif (isString(key) || isArray(key)) {\n\t\tsrc = key;\n\t\tpath = createKeyPath(key);\n\t\tid = createKeyId(key);\n\t} else {\n\t\tif (!hasOwn.call(key, \"name\")) throw new Error(MISSING_KEY_PROPERTY(\"name\"));\n\t\tconst name = key.name;\n\t\tsrc = name;\n\t\tif (hasOwn.call(key, \"weight\") && key.weight !== void 0) {\n\t\t\tweight = key.weight;\n\t\t\tif (weight <= 0) throw new Error(INVALID_KEY_WEIGHT_VALUE(createKeyId(name)));\n\t\t}\n\t\tpath = createKeyPath(name);\n\t\tid = createKeyId(name);\n\t\tgetFn = key.getFn ?? null;\n\t}\n\treturn {\n\t\tpath,\n\t\tid,\n\t\tweight,\n\t\tsrc,\n\t\tgetFn\n\t};\n}\nfunction createKeyPath(key) {\n\treturn isArray(key) ? key : key.split(\".\");\n}\nfunction createKeyId(key) {\n\treturn isArray(key) ? key.join(\".\") : key;\n}\n\n//#endregion\n//#region src/helpers/get.ts\nfunction get(obj, path) {\n\tconst list = [];\n\tlet arr = false;\n\tconst deepGet = (obj, path, index, arrayIndex) => {\n\t\tif (!isDefined(obj)) return;\n\t\tif (!path[index]) list.push(arrayIndex !== void 0 ? {\n\t\t\tv: obj,\n\t\t\ti: arrayIndex\n\t\t} : obj);\n\t\telse {\n\t\t\tconst value = obj[path[index]];\n\t\t\tif (!isDefined(value)) return;\n\t\t\tif (index === path.length - 1 && (isString(value) || isNumber(value) || isBoolean(value) || typeof value === \"bigint\")) list.push(arrayIndex !== void 0 ? {\n\t\t\t\tv: toString(value),\n\t\t\t\ti: arrayIndex\n\t\t\t} : toString(value));\n\t\t\telse if (isArray(value)) {\n\t\t\t\tarr = true;\n\t\t\t\tfor (let i = 0, len = value.length; i < len; i += 1) deepGet(value[i], path, index + 1, i);\n\t\t\t} else if (path.length) deepGet(value, path, index + 1, arrayIndex);\n\t\t}\n\t};\n\tdeepGet(obj, isString(path) ? path.split(\".\") : path, 0);\n\treturn arr ? list : list[0];\n}\n\n//#endregion\n//#region src/core/config.ts\nconst MatchOptions = {\n\tincludeMatches: false,\n\tfindAllMatches: false,\n\tminMatchCharLength: 1\n};\nconst BasicOptions = {\n\tisCaseSensitive: false,\n\tignoreDiacritics: false,\n\tincludeScore: false,\n\tkeys: [],\n\tshouldSort: true,\n\tsortFn: (a, b) => a.score === b.score ? a.idx < b.idx ? -1 : 1 : a.score < b.score ? -1 : 1\n};\nconst FuzzyOptions = {\n\tlocation: 0,\n\tthreshold: .6,\n\tdistance: 100\n};\nconst AdvancedOptions = {\n\tuseExtendedSearch: false,\n\tuseTokenSearch: false,\n\ttokenize: void 0,\n\ttokenMatch: \"any\",\n\tgetFn: get,\n\tignoreLocation: false,\n\tignoreFieldNorm: false,\n\tfieldNormWeight: 1\n};\nconst Config = Object.freeze({\n\t...BasicOptions,\n\t...MatchOptions,\n\t...FuzzyOptions,\n\t...AdvancedOptions\n});\n\n//#endregion\n//#region src/tools/fieldNorm.ts\nfunction isWordSeparator(code) {\n\treturn code >= 9 && code <= 13 || code === 32 || code === 160;\n}\nfunction norm(weight = 1, mantissa = 3) {\n\tconst cache = /* @__PURE__ */ new Map();\n\tconst m = Math.pow(10, mantissa);\n\treturn {\n\t\tget(value) {\n\t\t\tlet numTokens = 0;\n\t\t\tlet inWord = false;\n\t\t\tfor (let i = 0; i < value.length; i++) if (!isWordSeparator(value.charCodeAt(i))) {\n\t\t\t\tif (!inWord) {\n\t\t\t\t\tnumTokens++;\n\t\t\t\t\tinWord = true;\n\t\t\t\t}\n\t\t\t} else inWord = false;\n\t\t\tif (numTokens === 0) numTokens = 1;\n\t\t\tif (cache.has(numTokens)) return cache.get(numTokens);\n\t\t\tconst n = Math.round(m / Math.pow(numTokens, .5 * weight)) / m;\n\t\t\tcache.set(numTokens, n);\n\t\t\treturn n;\n\t\t},\n\t\tclear() {\n\t\t\tcache.clear();\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/tools/FuseIndex.ts\nvar FuseIndex = class {\n\tconstructor({ getFn = Config.getFn, fieldNormWeight = Config.fieldNormWeight } = {}) {\n\t\tthis.norm = norm(fieldNormWeight, 3);\n\t\tthis.getFn = getFn;\n\t\tthis.isCreated = false;\n\t\tthis.docs = [];\n\t\tthis.keys = [];\n\t\tthis._keysMap = {};\n\t\tthis.setIndexRecords();\n\t}\n\tsetSources(docs = []) {\n\t\tthis.docs = docs;\n\t}\n\tsetIndexRecords(records = []) {\n\t\tthis.records = records;\n\t}\n\tsetKeys(keys = []) {\n\t\tthis.keys = keys;\n\t\tthis._keysMap = {};\n\t\tkeys.forEach((key, idx) => {\n\t\t\tthis._keysMap[key.id] = idx;\n\t\t});\n\t}\n\tcreate() {\n\t\tif (this.isCreated || !this.docs.length) return;\n\t\tthis.isCreated = true;\n\t\tconst len = this.docs.length;\n\t\tthis.records = new Array(len);\n\t\tlet recordCount = 0;\n\t\tif (isString(this.docs[0])) for (let i = 0; i < len; i++) {\n\t\t\tconst record = this._createStringRecord(this.docs[i], i);\n\t\t\tif (record) this.records[recordCount++] = record;\n\t\t}\n\t\telse for (let i = 0; i < len; i++) this.records[recordCount++] = this._createObjectRecord(this.docs[i], i);\n\t\tthis.records.length = recordCount;\n\t\tthis.norm.clear();\n\t}\n\tadd(doc, docIndex) {\n\t\tif (!Number.isInteger(docIndex) || docIndex < 0) throw new Error(INVALID_DOC_INDEX);\n\t\tif (isString(doc)) {\n\t\t\tconst record = this._createStringRecord(doc, docIndex);\n\t\t\tif (record) this.records.push(record);\n\t\t\treturn record;\n\t\t}\n\t\tconst record = this._createObjectRecord(doc, docIndex);\n\t\tthis.records.push(record);\n\t\treturn record;\n\t}\n\tremoveAt(idx) {\n\t\tif (!Number.isInteger(idx) || idx < 0) throw new Error(INVALID_DOC_INDEX);\n\t\tfor (let i = 0, len = this.records.length; i < len; i += 1) if (this.records[i].i === idx) {\n\t\t\tthis.records.splice(i, 1);\n\t\t\tbreak;\n\t\t}\n\t\tfor (let i = 0, len = this.records.length; i < len; i += 1) if (this.records[i].i > idx) this.records[i].i -= 1;\n\t}\n\tremoveAll(indices) {\n\t\tconst toRemove = /* @__PURE__ */ new Set();\n\t\tfor (const v of indices) if (Number.isInteger(v) && v >= 0) toRemove.add(v);\n\t\tif (toRemove.size === 0) return;\n\t\tthis.records = this.records.filter((r) => !toRemove.has(r.i));\n\t\tconst sorted = Array.from(toRemove).sort((a, b) => a - b);\n\t\tfor (const record of this.records) {\n\t\t\tlet lo = 0;\n\t\t\tlet hi = sorted.length;\n\t\t\twhile (lo < hi) {\n\t\t\t\tconst mid = lo + hi >>> 1;\n\t\t\t\tif (sorted[mid] < record.i) lo = mid + 1;\n\t\t\t\telse hi = mid;\n\t\t\t}\n\t\t\trecord.i -= lo;\n\t\t}\n\t}\n\tgetValueForItemAtKeyId(item, keyId) {\n\t\treturn item[this._keysMap[keyId]];\n\t}\n\tsize() {\n\t\treturn this.records.length;\n\t}\n\t_createStringRecord(doc, docIndex) {\n\t\tif (!isDefined(doc) || isBlank(doc)) return null;\n\t\treturn {\n\t\t\tv: doc,\n\t\t\ti: docIndex,\n\t\t\tn: this.norm.get(doc)\n\t\t};\n\t}\n\t_createObjectRecord(doc, docIndex) {\n\t\tconst record = {\n\t\t\ti: docIndex,\n\t\t\t$: {}\n\t\t};\n\t\tfor (let keyIndex = 0, keyLen = this.keys.length; keyIndex < keyLen; keyIndex++) {\n\t\t\tconst key = this.keys[keyIndex];\n\t\t\tconst value = key.getFn ? key.getFn(doc) : this.getFn(doc, key.path);\n\t\t\tif (!isDefined(value)) continue;\n\t\t\tif (isArray(value)) {\n\t\t\t\tconst subRecords = [];\n\t\t\t\tfor (let i = 0, len = value.length; i < len; i += 1) {\n\t\t\t\t\tconst item = value[i];\n\t\t\t\t\tif (!isDefined(item)) continue;\n\t\t\t\t\tif (isString(item)) {\n\t\t\t\t\t\tif (!isBlank(item)) {\n\t\t\t\t\t\t\tconst subRecord = {\n\t\t\t\t\t\t\t\tv: item,\n\t\t\t\t\t\t\t\ti,\n\t\t\t\t\t\t\t\tn: this.norm.get(item)\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tsubRecords.push(subRecord);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (isDefined(item.v)) {\n\t\t\t\t\t\tconst text = isString(item.v) ? item.v : toString(item.v);\n\t\t\t\t\t\tif (!isBlank(text)) {\n\t\t\t\t\t\t\tconst subRecord = {\n\t\t\t\t\t\t\t\tv: text,\n\t\t\t\t\t\t\t\ti: item.i,\n\t\t\t\t\t\t\t\tn: this.norm.get(text)\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tsubRecords.push(subRecord);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\trecord.$[keyIndex] = subRecords;\n\t\t\t} else if (isString(value) && !isBlank(value)) {\n\t\t\t\tconst subRecord = {\n\t\t\t\t\tv: value,\n\t\t\t\t\tn: this.norm.get(value)\n\t\t\t\t};\n\t\t\t\trecord.$[keyIndex] = subRecord;\n\t\t\t}\n\t\t}\n\t\treturn record;\n\t}\n\ttoJSON() {\n\t\treturn {\n\t\t\tkeys: this.keys.map(({ getFn, ...key }) => key),\n\t\t\trecords: this.records\n\t\t};\n\t}\n};\nfunction createIndex(keys, docs, { getFn = Config.getFn, fieldNormWeight = Config.fieldNormWeight } = {}) {\n\tconst myIndex = new FuseIndex({\n\t\tgetFn,\n\t\tfieldNormWeight\n\t});\n\tmyIndex.setKeys(keys.map(createKey));\n\tmyIndex.setSources(docs);\n\tmyIndex.create();\n\treturn myIndex;\n}\nfunction parseIndex(data, { getFn = Config.getFn, fieldNormWeight = Config.fieldNormWeight } = {}) {\n\tconst { keys, records } = data;\n\tconst myIndex = new FuseIndex({\n\t\tgetFn,\n\t\tfieldNormWeight\n\t});\n\tmyIndex.setKeys(keys);\n\tmyIndex.setIndexRecords(records);\n\treturn myIndex;\n}\n\n//#endregion\n//#region src/search/bitap/convertMaskToIndices.ts\nfunction convertMaskToIndices(matchmask = [], minMatchCharLength = Config.minMatchCharLength) {\n\tconst indices = [];\n\tlet start = -1;\n\tlet end = -1;\n\tlet i = 0;\n\tfor (let len = matchmask.length; i < len; i += 1) {\n\t\tconst match = matchmask[i];\n\t\tif (match && start === -1) start = i;\n\t\telse if (!match && start !== -1) {\n\t\t\tend = i - 1;\n\t\t\tif (end - start + 1 >= minMatchCharLength) indices.push([start, end]);\n\t\t\tstart = -1;\n\t\t}\n\t}\n\tif (matchmask[i - 1] && i - start >= minMatchCharLength) indices.push([start, i - 1]);\n\treturn indices;\n}\n\n//#endregion\n//#region src/search/bitap/search.ts\nfunction search(text, pattern, patternAlphabet, { location = Config.location, distance = Config.distance, threshold = Config.threshold, findAllMatches = Config.findAllMatches, minMatchCharLength = Config.minMatchCharLength, includeMatches = Config.includeMatches, ignoreLocation = Config.ignoreLocation } = {}) {\n\tif (pattern.length > 32) throw new Error(PATTERN_LENGTH_TOO_LARGE(32));\n\tconst patternLen = pattern.length;\n\tconst textLen = text.length;\n\tconst expectedLocation = Math.max(0, Math.min(location, textLen));\n\tlet currentThreshold = threshold;\n\tlet bestLocation = expectedLocation;\n\tconst calcScore = (errors, currentLocation) => {\n\t\tconst accuracy = errors / patternLen;\n\t\tif (ignoreLocation) return accuracy;\n\t\tconst proximity = Math.abs(expectedLocation - currentLocation);\n\t\tif (!distance) return proximity ? 1 : accuracy;\n\t\treturn accuracy + proximity / distance;\n\t};\n\tconst computeMatches = minMatchCharLength > 1 || includeMatches;\n\tconst matchMask = computeMatches ? Array(textLen) : [];\n\tlet index;\n\twhile ((index = text.indexOf(pattern, bestLocation)) > -1) {\n\t\tconst score = calcScore(0, index);\n\t\tcurrentThreshold = Math.min(score, currentThreshold);\n\t\tbestLocation = index + patternLen;\n\t\tif (computeMatches) {\n\t\t\tlet i = 0;\n\t\t\twhile (i < patternLen) {\n\t\t\t\tmatchMask[index + i] = 1;\n\t\t\t\ti += 1;\n\t\t\t}\n\t\t}\n\t}\n\tbestLocation = -1;\n\tlet lastBitArr = [];\n\tlet finalScore = 1;\n\tlet bestErrors = 0;\n\tlet binMax = patternLen + textLen;\n\tconst mask = 1 << patternLen - 1;\n\tfor (let i = 0; i < patternLen; i += 1) {\n\t\tlet binMin = 0;\n\t\tlet binMid = binMax;\n\t\twhile (binMin < binMid) {\n\t\t\tif (calcScore(i, expectedLocation + binMid) <= currentThreshold) binMin = binMid;\n\t\t\telse binMax = binMid;\n\t\t\tbinMid = Math.floor((binMax - binMin) / 2 + binMin);\n\t\t}\n\t\tbinMax = binMid;\n\t\tlet start = Math.max(1, expectedLocation - binMid + 1);\n\t\tconst finish = findAllMatches ? textLen : Math.min(expectedLocation + binMid, textLen) + patternLen;\n\t\tconst bitArr = Array(finish + 2);\n\t\tbitArr[finish + 1] = (1 << i) - 1;\n\t\tfor (let j = finish; j >= start; j -= 1) {\n\t\t\tconst currentLocation = j - 1;\n\t\t\tconst charMatch = patternAlphabet[text[currentLocation]];\n\t\t\tbitArr[j] = (bitArr[j + 1] << 1 | 1) & charMatch;\n\t\t\tif (i) bitArr[j] |= (lastBitArr[j + 1] | lastBitArr[j]) << 1 | 1 | lastBitArr[j + 1];\n\t\t\tif (bitArr[j] & mask) {\n\t\t\t\tfinalScore = calcScore(i, currentLocation);\n\t\t\t\tif (finalScore <= currentThreshold) {\n\t\t\t\t\tcurrentThreshold = finalScore;\n\t\t\t\t\tbestLocation = currentLocation;\n\t\t\t\t\tbestErrors = i;\n\t\t\t\t\tif (bestLocation <= expectedLocation) break;\n\t\t\t\t\tstart = Math.max(1, 2 * expectedLocation - bestLocation);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (calcScore(i + 1, expectedLocation) > currentThreshold) break;\n\t\tlastBitArr = bitArr;\n\t}\n\tif (computeMatches && bestLocation >= 0) {\n\t\tconst matchEnd = Math.min(textLen - 1, bestLocation + patternLen - 1 + bestErrors);\n\t\tfor (let k = bestLocation; k <= matchEnd; k += 1) if (patternAlphabet[text[k]]) matchMask[k] = 1;\n\t}\n\tconst result = {\n\t\tisMatch: bestLocation >= 0,\n\t\tscore: Math.max(.001, finalScore)\n\t};\n\tif (computeMatches) {\n\t\tconst indices = convertMaskToIndices(matchMask, minMatchCharLength);\n\t\tif (!indices.length) result.isMatch = false;\n\t\telse if (includeMatches) result.indices = indices;\n\t}\n\treturn result;\n}\n\n//#endregion\n//#region src/search/bitap/createPatternAlphabet.ts\nfunction createPatternAlphabet(pattern) {\n\tconst mask = {};\n\tfor (let i = 0, len = pattern.length; i < len; i += 1) {\n\t\tconst char = pattern.charAt(i);\n\t\tmask[char] = (mask[char] || 0) | 1 << len - i - 1;\n\t}\n\treturn mask;\n}\n\n//#endregion\n//#region src/helpers/mergeIndices.ts\nfunction mergeIndices(indices) {\n\tif (indices.length <= 1) return indices;\n\tindices.sort((a, b) => a[0] - b[0] || a[1] - b[1]);\n\tconst merged = [indices[0]];\n\tfor (let i = 1, len = indices.length; i < len; i += 1) {\n\t\tconst last = merged[merged.length - 1];\n\t\tconst curr = indices[i];\n\t\tif (curr[0] <= last[1] + 1) last[1] = Math.max(last[1], curr[1]);\n\t\telse merged.push(curr);\n\t}\n\treturn merged;\n}\n\n//#endregion\n//#region src/helpers/diacritics.ts\nconst NON_DECOMPOSABLE_MAP = {\n\t\"ł\": \"l\",\n\t\"Ł\": \"L\",\n\t\"đ\": \"d\",\n\t\"Đ\": \"D\",\n\t\"ø\": \"o\",\n\t\"Ø\": \"O\",\n\t\"ħ\": \"h\",\n\t\"Ħ\": \"H\",\n\t\"ŧ\": \"t\",\n\t\"Ŧ\": \"T\",\n\t\"ı\": \"i\",\n\t\"ß\": \"ss\"\n};\nconst NON_DECOMPOSABLE_RE = new RegExp(\"[\" + Object.keys(NON_DECOMPOSABLE_MAP).join(\"\") + \"]\", \"g\");\nconst stripDiacritics = typeof String.prototype.normalize === \"function\" ? (str) => str.normalize(\"NFD\").replace(/[\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0610-\\u061A\\u064B-\\u065F\\u0670\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u08D3-\\u08E1\\u08E3-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D82\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EB9\\u0EBB\\u0EBC\\u0EC8-\\u0ECD\\u0F18\\u0F19\\u0F35\\u0F37\\u0F39\\u0F3E\\u0F3F\\u0F71-\\u0F84\\u0F86\\u0F87\\u0F8D-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u102B-\\u103E\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F\\u109A-\\u109D\\u135D-\\u135F\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180D\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ABE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF2-\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DF9\\u1DFB-\\u1DFF\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\uA926-\\uA92D\\uA947-\\uA953\\uA980-\\uA983\\uA9B3-\\uA9C0\\uA9E5\\uAA29-\\uAA36\\uAA43\\uAA4C\\uAA4D\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAEB-\\uAAEF\\uAAF5\\uAAF6\\uABE3-\\uABEA\\uABEC\\uABED\\uFB1E\\uFE00-\\uFE0F\\uFE20-\\uFE2F]/g, \"\").replace(NON_DECOMPOSABLE_RE, (ch) => NON_DECOMPOSABLE_MAP[ch]) : (str) => str;\n\n//#endregion\n//#region src/search/bitap/index.ts\nvar BitapSearch = class {\n\tconstructor(pattern, { location = Config.location, threshold = Config.threshold, distance = Config.distance, includeMatches = Config.includeMatches, findAllMatches = Config.findAllMatches, minMatchCharLength = Config.minMatchCharLength, isCaseSensitive = Config.isCaseSensitive, ignoreDiacritics = Config.ignoreDiacritics, ignoreLocation = Config.ignoreLocation } = {}) {\n\t\tthis.options = {\n\t\t\tlocation,\n\t\t\tthreshold,\n\t\t\tdistance,\n\t\t\tincludeMatches,\n\t\t\tfindAllMatches,\n\t\t\tminMatchCharLength,\n\t\t\tisCaseSensitive,\n\t\t\tignoreDiacritics,\n\t\t\tignoreLocation\n\t\t};\n\t\tpattern = isCaseSensitive ? pattern : pattern.toLowerCase();\n\t\tpattern = ignoreDiacritics ? stripDiacritics(pattern) : pattern;\n\t\tthis.pattern = pattern;\n\t\tthis.chunks = [];\n\t\tif (!this.pattern.length) return;\n\t\tconst addChunk = (pattern, startIndex) => {\n\t\t\tthis.chunks.push({\n\t\t\t\tpattern,\n\t\t\t\talphabet: createPatternAlphabet(pattern),\n\t\t\t\tstartIndex\n\t\t\t});\n\t\t};\n\t\tconst len = this.pattern.length;\n\t\tif (len > 32) {\n\t\t\tlet i = 0;\n\t\t\tconst remainder = len % 32;\n\t\t\tconst end = len - remainder;\n\t\t\twhile (i < end) {\n\t\t\t\taddChunk(this.pattern.substr(i, 32), i);\n\t\t\t\ti += 32;\n\t\t\t}\n\t\t\tif (remainder) {\n\t\t\t\tconst startIndex = len - 32;\n\t\t\t\taddChunk(this.pattern.substr(startIndex), startIndex);\n\t\t\t}\n\t\t} else addChunk(this.pattern, 0);\n\t}\n\tsearchIn(text) {\n\t\tconst { isCaseSensitive, ignoreDiacritics, includeMatches } = this.options;\n\t\ttext = isCaseSensitive ? text : text.toLowerCase();\n\t\ttext = ignoreDiacritics ? stripDiacritics(text) : text;\n\t\tif (this.pattern === text) {\n\t\t\tif (text.length < this.options.minMatchCharLength) return {\n\t\t\t\tisMatch: false,\n\t\t\t\tscore: 1\n\t\t\t};\n\t\t\tconst result = {\n\t\t\t\tisMatch: true,\n\t\t\t\tscore: 0\n\t\t\t};\n\t\t\tif (includeMatches) result.indices = [[0, text.length - 1]];\n\t\t\treturn result;\n\t\t}\n\t\tconst { location, distance, threshold, findAllMatches, minMatchCharLength, ignoreLocation } = this.options;\n\t\tconst allIndices = [];\n\t\tlet totalScore = 0;\n\t\tlet hasMatches = false;\n\t\tthis.chunks.forEach(({ pattern, alphabet, startIndex }) => {\n\t\t\tconst { isMatch, score, indices } = search(text, pattern, alphabet, {\n\t\t\t\tlocation: location + startIndex,\n\t\t\t\tdistance,\n\t\t\t\tthreshold,\n\t\t\t\tfindAllMatches,\n\t\t\t\tminMatchCharLength,\n\t\t\t\tincludeMatches,\n\t\t\t\tignoreLocation\n\t\t\t});\n\t\t\tif (isMatch) hasMatches = true;\n\t\t\ttotalScore += score;\n\t\t\tif (isMatch && indices) allIndices.push(...indices);\n\t\t});\n\t\tconst result = {\n\t\t\tisMatch: hasMatches,\n\t\t\tscore: hasMatches ? totalScore / this.chunks.length : 1\n\t\t};\n\t\tif (hasMatches && includeMatches) result.indices = mergeIndices(allIndices);\n\t\treturn result;\n\t}\n};\n\n//#endregion\n//#region src/search/extended/matchers.ts\nconst MULTI_MATCH_TYPES = new Set([\"fuzzy\", \"include\"]);\nfunction isInverse(type) {\n\treturn type.startsWith(\"inverse\");\n}\nconst matchers = [\n\t{\n\t\ttype: \"exact\",\n\t\tmultiRegex: /^=\"(.*)\"$/,\n\t\tsingleRegex: /^=(.*)$/,\n\t\tcreate: (pattern) => ({\n\t\t\ttype: \"exact\",\n\t\t\tsearch(text) {\n\t\t\t\tconst isMatch = text === pattern;\n\t\t\t\treturn {\n\t\t\t\t\tisMatch,\n\t\t\t\t\tscore: isMatch ? 0 : 1,\n\t\t\t\t\tindices: [0, pattern.length - 1]\n\t\t\t\t};\n\t\t\t}\n\t\t})\n\t},\n\t{\n\t\ttype: \"include\",\n\t\tmultiRegex: /^'\"(.*)\"$/,\n\t\tsingleRegex: /^'(.*)$/,\n\t\tcreate: (pattern) => ({\n\t\t\ttype: \"include\",\n\t\t\tsearch(text) {\n\t\t\t\tlet location = 0;\n\t\t\t\tlet index;\n\t\t\t\tconst indices = [];\n\t\t\t\tconst patternLen = pattern.length;\n\t\t\t\twhile ((index = text.indexOf(pattern, location)) > -1) {\n\t\t\t\t\tlocation = index + patternLen;\n\t\t\t\t\tindices.push([index, location - 1]);\n\t\t\t\t}\n\t\t\t\tconst isMatch = !!indices.length;\n\t\t\t\treturn {\n\t\t\t\t\tisMatch,\n\t\t\t\t\tscore: isMatch ? 0 : 1,\n\t\t\t\t\tindices\n\t\t\t\t};\n\t\t\t}\n\t\t})\n\t},\n\t{\n\t\ttype: \"prefix-exact\",\n\t\tmultiRegex: /^\\^\"(.*)\"$/,\n\t\tsingleRegex: /^\\^(.*)$/,\n\t\tcreate: (pattern) => ({\n\t\t\ttype: \"prefix-exact\",\n\t\t\tsearch(text) {\n\t\t\t\tconst isMatch = text.startsWith(pattern);\n\t\t\t\treturn {\n\t\t\t\t\tisMatch,\n\t\t\t\t\tscore: isMatch ? 0 : 1,\n\t\t\t\t\tindices: [0, pattern.length - 1]\n\t\t\t\t};\n\t\t\t}\n\t\t})\n\t},\n\t{\n\t\ttype: \"inverse-prefix-exact\",\n\t\tmultiRegex: /^!\\^\"(.*)\"$/,\n\t\tsingleRegex: /^!\\^(.*)$/,\n\t\tcreate: (pattern) => ({\n\t\t\ttype: \"inverse-prefix-exact\",\n\t\t\tsearch(text) {\n\t\t\t\tconst isMatch = !text.startsWith(pattern);\n\t\t\t\treturn {\n\t\t\t\t\tisMatch,\n\t\t\t\t\tscore: isMatch ? 0 : 1,\n\t\t\t\t\tindices: [0, text.length - 1]\n\t\t\t\t};\n\t\t\t}\n\t\t})\n\t},\n\t{\n\t\ttype: \"inverse-suffix-exact\",\n\t\tmultiRegex: /^!\"(.*)\"\\$$/,\n\t\tsingleRegex: /^!(.*)\\$$/,\n\t\tcreate: (pattern) => ({\n\t\t\ttype: \"inverse-suffix-exact\",\n\t\t\tsearch(text) {\n\t\t\t\tconst isMatch = !text.endsWith(pattern);\n\t\t\t\treturn {\n\t\t\t\t\tisMatch,\n\t\t\t\t\tscore: isMatch ? 0 : 1,\n\t\t\t\t\tindices: [0, text.length - 1]\n\t\t\t\t};\n\t\t\t}\n\t\t})\n\t},\n\t{\n\t\ttype: \"suffix-exact\",\n\t\tmultiRegex: /^\"(.*)\"\\$$/,\n\t\tsingleRegex: /^(.*)\\$$/,\n\t\tcreate: (pattern) => ({\n\t\t\ttype: \"suffix-exact\",\n\t\t\tsearch(text) {\n\t\t\t\tconst isMatch = text.endsWith(pattern);\n\t\t\t\treturn {\n\t\t\t\t\tisMatch,\n\t\t\t\t\tscore: isMatch ? 0 : 1,\n\t\t\t\t\tindices: [text.length - pattern.length, text.length - 1]\n\t\t\t\t};\n\t\t\t}\n\t\t})\n\t},\n\t{\n\t\ttype: \"inverse-exact\",\n\t\tmultiRegex: /^!\"(.*)\"$/,\n\t\tsingleRegex: /^!(.*)$/,\n\t\tcreate: (pattern) => ({\n\t\t\ttype: \"inverse-exact\",\n\t\t\tsearch(text) {\n\t\t\t\tconst isMatch = text.indexOf(pattern) === -1;\n\t\t\t\treturn {\n\t\t\t\t\tisMatch,\n\t\t\t\t\tscore: isMatch ? 0 : 1,\n\t\t\t\t\tindices: [0, text.length - 1]\n\t\t\t\t};\n\t\t\t}\n\t\t})\n\t},\n\t{\n\t\ttype: \"fuzzy\",\n\t\tmultiRegex: /^\"(.*)\"$/,\n\t\tsingleRegex: /^(.*)$/,\n\t\tcreate: (pattern, options = {}) => {\n\t\t\tconst bitap = new BitapSearch(pattern, {\n\t\t\t\tlocation: options.location ?? Config.location,\n\t\t\t\tthreshold: options.threshold ?? Config.threshold,\n\t\t\t\tdistance: options.distance ?? Config.distance,\n\t\t\t\tincludeMatches: options.includeMatches ?? Config.includeMatches,\n\t\t\t\tfindAllMatches: options.findAllMatches ?? Config.findAllMatches,\n\t\t\t\tminMatchCharLength: options.minMatchCharLength ?? Config.minMatchCharLength,\n\t\t\t\tisCaseSensitive: options.isCaseSensitive ?? Config.isCaseSensitive,\n\t\t\t\tignoreDiacritics: options.ignoreDiacritics ?? Config.ignoreDiacritics,\n\t\t\t\tignoreLocation: options.ignoreLocation ?? Config.ignoreLocation\n\t\t\t});\n\t\t\treturn {\n\t\t\t\ttype: \"fuzzy\",\n\t\t\t\tsearch(text) {\n\t\t\t\t\treturn bitap.searchIn(text);\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t}\n];\n\n//#endregion\n//#region src/search/extended/parseQuery.ts\nconst matchersLen = matchers.length;\nconst ESCAPED_PIPE = \"\\0\";\nconst OR_TOKEN = \"|\";\nfunction tokenize(pattern) {\n\tconst tokens = [];\n\tconst len = pattern.length;\n\tlet i = 0;\n\twhile (i < len) {\n\t\twhile (i < len && pattern[i] === \" \") i++;\n\t\tif (i >= len) break;\n\t\tlet j = i;\n\t\twhile (j < len && pattern[j] !== \" \" && pattern[j] !== \"\\\"\") j++;\n\t\tif (j < len && pattern[j] === \"\\\"\") {\n\t\t\tj++;\n\t\t\twhile (j < len) {\n\t\t\t\tif (pattern[j] === \"\\\"\") {\n\t\t\t\t\tconst next = j + 1;\n\t\t\t\t\tif (next >= len || pattern[next] === \" \") {\n\t\t\t\t\t\tj++;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif (pattern[next] === \"$\" && (next + 1 >= len || pattern[next + 1] === \" \")) {\n\t\t\t\t\t\tj += 2;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tj++;\n\t\t\t}\n\t\t\ttokens.push(pattern.substring(i, j));\n\t\t\ti = j;\n\t\t} else {\n\t\t\twhile (j < len && pattern[j] !== \" \") j++;\n\t\t\ttokens.push(pattern.substring(i, j));\n\t\t\ti = j;\n\t\t}\n\t}\n\treturn tokens;\n}\nfunction getMatch(pattern, exp) {\n\tconst matches = pattern.match(exp);\n\treturn matches ? matches[1] : null;\n}\nfunction parseQuery(pattern, options = {}) {\n\treturn pattern.replace(/\\\\\\|/g, ESCAPED_PIPE).split(OR_TOKEN).map((item) => {\n\t\tconst query = tokenize(item.replace(/\\u0000/g, \"|\").trim()).filter((item) => item && !!item.trim());\n\t\tconst results = [];\n\t\tfor (let i = 0, len = query.length; i < len; i += 1) {\n\t\t\tconst queryItem = query[i];\n\t\t\tlet found = false;\n\t\t\tlet idx = -1;\n\t\t\twhile (!found && ++idx < matchersLen) {\n\t\t\t\tconst def = matchers[idx];\n\t\t\t\tconst token = getMatch(queryItem, def.multiRegex);\n\t\t\t\tif (token) {\n\t\t\t\t\tresults.push(def.create(token, options));\n\t\t\t\t\tfound = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (found) continue;\n\t\t\tidx = -1;\n\t\t\twhile (++idx < matchersLen) {\n\t\t\t\tconst def = matchers[idx];\n\t\t\t\tconst token = getMatch(queryItem, def.singleRegex);\n\t\t\t\tif (token) {\n\t\t\t\t\tresults.push(def.create(token, options));\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn results;\n\t});\n}\n\n//#endregion\n//#region src/search/extended/index.ts\nvar ExtendedSearch = class {\n\tconstructor(pattern, { isCaseSensitive = Config.isCaseSensitive, ignoreDiacritics = Config.ignoreDiacritics, includeMatches = Config.includeMatches, minMatchCharLength = Config.minMatchCharLength, ignoreLocation = Config.ignoreLocation, findAllMatches = Config.findAllMatches, location = Config.location, threshold = Config.threshold, distance = Config.distance } = {}) {\n\t\tthis.query = null;\n\t\tthis.options = {\n\t\t\tisCaseSensitive,\n\t\t\tignoreDiacritics,\n\t\t\tincludeMatches,\n\t\t\tminMatchCharLength,\n\t\t\tfindAllMatches,\n\t\t\tignoreLocation,\n\t\t\tlocation,\n\t\t\tthreshold,\n\t\t\tdistance\n\t\t};\n\t\tpattern = isCaseSensitive ? pattern : pattern.toLowerCase();\n\t\tpattern = ignoreDiacritics ? stripDiacritics(pattern) : pattern;\n\t\tthis.pattern = pattern;\n\t\tthis.query = parseQuery(this.pattern, this.options);\n\t}\n\tstatic condition(_, options) {\n\t\treturn options.useExtendedSearch;\n\t}\n\tsearchIn(text) {\n\t\tconst query = this.query;\n\t\tif (!query) return {\n\t\t\tisMatch: false,\n\t\t\tscore: 1\n\t\t};\n\t\tconst { includeMatches, isCaseSensitive, ignoreDiacritics } = this.options;\n\t\ttext = isCaseSensitive ? text : text.toLowerCase();\n\t\ttext = ignoreDiacritics ? stripDiacritics(text) : text;\n\t\tlet numMatches = 0;\n\t\tconst allIndices = [];\n\t\tlet totalScore = 0;\n\t\tlet hasInverse = false;\n\t\tfor (let i = 0, qLen = query.length; i < qLen; i += 1) {\n\t\t\tconst searchers = query[i];\n\t\t\tallIndices.length = 0;\n\t\t\tnumMatches = 0;\n\t\t\thasInverse = false;\n\t\t\tfor (let j = 0, pLen = searchers.length; j < pLen; j += 1) {\n\t\t\t\tconst matcher = searchers[j];\n\t\t\t\tconst { isMatch, indices, score } = matcher.search(text);\n\t\t\t\tif (isMatch) {\n\t\t\t\t\tnumMatches += 1;\n\t\t\t\t\ttotalScore += score;\n\t\t\t\t\tif (isInverse(matcher.type)) hasInverse = true;\n\t\t\t\t\tif (includeMatches) if (MULTI_MATCH_TYPES.has(matcher.type)) allIndices.push(...indices);\n\t\t\t\t\telse allIndices.push(indices);\n\t\t\t\t} else {\n\t\t\t\t\ttotalScore = 0;\n\t\t\t\t\tnumMatches = 0;\n\t\t\t\t\tallIndices.length = 0;\n\t\t\t\t\thasInverse = false;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (numMatches) {\n\t\t\t\tconst result = {\n\t\t\t\t\tisMatch: true,\n\t\t\t\t\tscore: totalScore / numMatches\n\t\t\t\t};\n\t\t\t\tif (hasInverse) result.hasInverse = true;\n\t\t\t\tif (includeMatches) result.indices = mergeIndices(allIndices);\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\tisMatch: false,\n\t\t\tscore: 1\n\t\t};\n\t}\n};\n\n//#endregion\n//#region src/core/register.ts\nconst registeredSearchers = [];\nfunction register(...args) {\n\tregisteredSearchers.push(...args);\n}\nfunction createSearcher(pattern, options) {\n\tfor (let i = 0, len = registeredSearchers.length; i < len; i += 1) {\n\t\tconst searcherClass = registeredSearchers[i];\n\t\tif (searcherClass.condition(pattern, options)) return new searcherClass(pattern, options);\n\t}\n\treturn new BitapSearch(pattern, options);\n}\n\n//#endregion\n//#region src/core/queryParser.ts\nconst LogicalOperator = {\n\tAND: \"$and\",\n\tOR: \"$or\"\n};\nconst KeyType = {\n\tPATH: \"$path\",\n\tPATTERN: \"$val\"\n};\nconst isExpression = (query) => !!(query[LogicalOperator.AND] || query[LogicalOperator.OR]);\nconst isPath = (query) => !!query[KeyType.PATH];\nconst isLeaf = (query) => !isArray(query) && isObject(query) && !isExpression(query);\nconst convertToExplicit = (query) => ({ [LogicalOperator.AND]: Object.keys(query).map((key) => ({ [key]: query[key] })) });\nfunction parse(query, options, { auto = true } = {}) {\n\tconst next = (query) => {\n\t\tif (isString(query)) {\n\t\t\tconst obj = {\n\t\t\t\tkeyId: null,\n\t\t\t\tpattern: query\n\t\t\t};\n\t\t\tif (auto) obj.searcher = createSearcher(query, options);\n\t\t\treturn obj;\n\t\t}\n\t\tconst keys = Object.keys(query);\n\t\tconst isQueryPath = isPath(query);\n\t\tif (!isQueryPath && keys.length > 1 && !isExpression(query)) return next(convertToExplicit(query));\n\t\tif (isLeaf(query)) {\n\t\t\tconst key = isQueryPath ? query[KeyType.PATH] : keys[0];\n\t\t\tconst pattern = isQueryPath ? query[KeyType.PATTERN] : query[key];\n\t\t\tif (!isString(pattern)) throw new Error(LOGICAL_SEARCH_INVALID_QUERY_FOR_KEY(key));\n\t\t\tconst obj = {\n\t\t\t\tkeyId: createKeyId(key),\n\t\t\t\tpattern\n\t\t\t};\n\t\t\tif (auto) obj.searcher = createSearcher(pattern, options);\n\t\t\treturn obj;\n\t\t}\n\t\tconst node = {\n\t\t\tchildren: [],\n\t\t\toperator: keys[0]\n\t\t};\n\t\tkeys.forEach((key) => {\n\t\t\tconst value = query[key];\n\t\t\tif (isArray(value)) value.forEach((item) => {\n\t\t\t\tnode.children.push(next(item));\n\t\t\t});\n\t\t});\n\t\treturn node;\n\t};\n\tif (!isExpression(query)) query = convertToExplicit(query);\n\treturn next(query);\n}\n\n//#endregion\n//#region src/core/computeScore.ts\nfunction computeScoreSingle(matches, { ignoreFieldNorm = Config.ignoreFieldNorm }) {\n\tlet totalScore = 1;\n\tmatches.forEach(({ key, norm, score }) => {\n\t\tconst weight = key ? key.weight : null;\n\t\ttotalScore *= Math.pow(score === 0 && weight ? Number.EPSILON : score, (weight || 1) * (ignoreFieldNorm ? 1 : norm));\n\t});\n\treturn totalScore;\n}\nfunction computeScore(results, { ignoreFieldNorm = Config.ignoreFieldNorm }) {\n\tresults.forEach((result) => {\n\t\tresult.score = computeScoreSingle(result.matches, { ignoreFieldNorm });\n\t});\n}\n\n//#endregion\n//#region src/tools/MaxHeap.ts\nvar MaxHeap = class {\n\tconstructor(limit, comparator) {\n\t\tthis.limit = limit;\n\t\tthis.heap = [];\n\t\tthis.comparator = comparator;\n\t}\n\tget size() {\n\t\treturn this.heap.length;\n\t}\n\tinsert(item) {\n\t\tif (this.size < this.limit) {\n\t\t\tthis.heap.push(item);\n\t\t\tthis._bubbleUp(this.size - 1);\n\t\t} else if (this.comparator(item, this.heap[0]) < 0) {\n\t\t\tthis.heap[0] = item;\n\t\t\tthis._sinkDown(0);\n\t\t}\n\t}\n\textractSorted() {\n\t\treturn this.heap.sort(this.comparator);\n\t}\n\t_bubbleUp(i) {\n\t\tconst heap = this.heap;\n\t\twhile (i > 0) {\n\t\t\tconst parent = i - 1 >> 1;\n\t\t\tif (this.comparator(heap[i], heap[parent]) <= 0) break;\n\t\t\tconst tmp = heap[i];\n\t\t\theap[i] = heap[parent];\n\t\t\theap[parent] = tmp;\n\t\t\ti = parent;\n\t\t}\n\t}\n\t_sinkDown(i) {\n\t\tconst heap = this.heap;\n\t\tconst len = heap.length;\n\t\tlet largest = i;\n\t\tdo {\n\t\t\ti = largest;\n\t\t\tconst left = 2 * i + 1;\n\t\t\tconst right = 2 * i + 2;\n\t\t\tif (left < len && this.comparator(heap[left], heap[largest]) > 0) largest = left;\n\t\t\tif (right < len && this.comparator(heap[right], heap[largest]) > 0) largest = right;\n\t\t\tif (largest !== i) {\n\t\t\t\tconst tmp = heap[i];\n\t\t\t\theap[i] = heap[largest];\n\t\t\t\theap[largest] = tmp;\n\t\t\t}\n\t\t} while (largest !== i);\n\t}\n};\n\n//#endregion\n//#region src/core/formatMatches.ts\nfunction formatMatches(result) {\n\tconst matches = [];\n\tresult.matches.forEach((match) => {\n\t\tif (!isDefined(match.indices) || !match.indices.length) return;\n\t\tconst obj = {\n\t\t\tindices: match.indices,\n\t\t\tvalue: match.value\n\t\t};\n\t\tif (match.key) obj.key = match.key.id;\n\t\tif (match.idx > -1) obj.refIndex = match.idx;\n\t\tmatches.push(obj);\n\t});\n\treturn matches;\n}\n\n//#endregion\n//#region src/core/format.ts\nfunction format(results, docs, { includeMatches = Config.includeMatches, includeScore = Config.includeScore } = {}) {\n\treturn results.map((result) => {\n\t\tconst { idx } = result;\n\t\tconst data = {\n\t\t\titem: docs[idx],\n\t\t\trefIndex: idx\n\t\t};\n\t\tif (includeMatches) data.matches = formatMatches(result);\n\t\tif (includeScore) data.score = result.score;\n\t\treturn data;\n\t});\n}\n\n//#endregion\n//#region src/search/token/analyzer.ts\nconst DEFAULT_TOKEN = /[\\p{L}\\p{M}\\p{N}_]+/gu;\nconst warned = /* @__PURE__ */ new WeakSet();\nfunction warnNonGlobal(regex) {\n\tif (!warned.has(regex)) {\n\t\twarned.add(regex);\n\t\tconsole.warn(`[Fuse] tokenize regex ${regex} lacks the global flag; only the first match per text will be returned. Add the 'g' flag.`);\n\t}\n}\nfunction resolveTokenize(tokenize) {\n\tif (typeof tokenize === \"function\") {\n\t\tlet validated = false;\n\t\treturn (text) => {\n\t\t\tconst result = tokenize(text);\n\t\t\tif (!validated) {\n\t\t\t\tvalidated = true;\n\t\t\t\tif (!Array.isArray(result) || result.some((t) => typeof t !== \"string\")) throw new Error(`[Fuse] tokenize function must return string[]; received ${Array.isArray(result) ? \"array containing non-strings\" : typeof result}.`);\n\t\t\t}\n\t\t\treturn result;\n\t\t};\n\t}\n\tif (tokenize instanceof RegExp) {\n\t\tif (!tokenize.global) warnNonGlobal(tokenize);\n\t\treturn (text) => text.match(tokenize) || [];\n\t}\n\treturn (text) => text.match(DEFAULT_TOKEN) || [];\n}\nfunction createAnalyzer({ isCaseSensitive = false, ignoreDiacritics = false, tokenize } = {}) {\n\tconst tokenizeFn = resolveTokenize(tokenize);\n\treturn { tokenize(text) {\n\t\tif (!isCaseSensitive) text = text.toLowerCase();\n\t\tif (ignoreDiacritics) text = stripDiacritics(text);\n\t\treturn tokenizeFn(text);\n\t} };\n}\n\n//#endregion\n//#region src/search/token/index.ts\nconst MAX_MASK_TERMS = 31;\nvar TokenSearch = class {\n\tstatic condition(_, options) {\n\t\treturn options.useTokenSearch;\n\t}\n\tconstructor(pattern, options) {\n\t\tthis.options = options;\n\t\tthis.analyzer = createAnalyzer({\n\t\t\tisCaseSensitive: options.isCaseSensitive,\n\t\t\tignoreDiacritics: options.ignoreDiacritics,\n\t\t\ttokenize: options.tokenize\n\t\t});\n\t\tconst queryTerms = this.analyzer.tokenize(pattern);\n\t\tconst { df, fieldCount } = options._invertedIndex;\n\t\tthis.termSearchers = [];\n\t\tthis.idfWeights = [];\n\t\tfor (const term of queryTerms) {\n\t\t\tthis.termSearchers.push(new BitapSearch(term, {\n\t\t\t\tlocation: options.location,\n\t\t\t\tthreshold: options.threshold,\n\t\t\t\tdistance: options.distance,\n\t\t\t\tincludeMatches: options.includeMatches,\n\t\t\t\tfindAllMatches: options.findAllMatches,\n\t\t\t\tminMatchCharLength: options.minMatchCharLength,\n\t\t\t\tisCaseSensitive: options.isCaseSensitive,\n\t\t\t\tignoreDiacritics: options.ignoreDiacritics,\n\t\t\t\tignoreLocation: true\n\t\t\t}));\n\t\t\tconst docFreq = df.get(term) || 0;\n\t\t\tconst idf = Math.log(1 + (fieldCount - docFreq + .5) / (docFreq + .5));\n\t\t\tthis.idfWeights.push(idf);\n\t\t}\n\t\tthis.combineAll = options.tokenMatch === \"all\";\n\t\tthis.numTerms = this.termSearchers.length;\n\t\tthis.useMask = this.numTerms <= 31;\n\t}\n\tsearchIn(text) {\n\t\tif (!this.termSearchers.length) return {\n\t\t\tisMatch: false,\n\t\t\tscore: 1\n\t\t};\n\t\tconst allIndices = [];\n\t\tlet weightedScore = 0;\n\t\tlet maxPossibleScore = 0;\n\t\tlet matchedCount = 0;\n\t\tlet matchedMask = 0;\n\t\tconst matchedTerms = this.combineAll && !this.useMask ? /* @__PURE__ */ new Set() : null;\n\t\tfor (let i = 0; i < this.termSearchers.length; i++) {\n\t\t\tconst result = this.termSearchers[i].searchIn(text);\n\t\t\tconst idf = this.idfWeights[i];\n\t\t\tmaxPossibleScore += idf;\n\t\t\tif (result.isMatch) {\n\t\t\t\tmatchedCount++;\n\t\t\t\tweightedScore += idf * (1 - result.score);\n\t\t\t\tif (result.indices) allIndices.push(...result.indices);\n\t\t\t\tif (this.combineAll) if (this.useMask) matchedMask |= 1 << i;\n\t\t\t\telse matchedTerms.add(i);\n\t\t\t}\n\t\t}\n\t\tif (matchedCount === 0) return {\n\t\t\tisMatch: false,\n\t\t\tscore: 1\n\t\t};\n\t\tconst normalized = maxPossibleScore > 0 ? 1 - weightedScore / maxPossibleScore : 0;\n\t\tconst searchResult = {\n\t\t\tisMatch: true,\n\t\t\tscore: Math.max(.001, normalized)\n\t\t};\n\t\tif (this.options.includeMatches && allIndices.length) searchResult.indices = mergeIndices(allIndices);\n\t\tif (this.combineAll) {\n\t\t\tif (this.useMask) searchResult.matchedMask = matchedMask;\n\t\t\telse searchResult.matchedTerms = matchedTerms;\n\t\t\tsearchResult.termCount = this.numTerms;\n\t\t}\n\t\treturn searchResult;\n\t}\n};\n\n//#endregion\n//#region src/search/token/InvertedIndex.ts\nfunction addField(index, text, docIdx, analyzer) {\n\tconst tokens = analyzer.tokenize(text);\n\tif (!tokens.length) return;\n\tindex.fieldCount++;\n\tindex.docFieldCount.set(docIdx, (index.docFieldCount.get(docIdx) || 0) + 1);\n\tconst distinctTerms = new Set(tokens);\n\tlet perDocTerms = index.docTermFieldHits.get(docIdx);\n\tif (!perDocTerms) {\n\t\tperDocTerms = /* @__PURE__ */ new Map();\n\t\tindex.docTermFieldHits.set(docIdx, perDocTerms);\n\t}\n\tfor (const term of distinctTerms) {\n\t\tperDocTerms.set(term, (perDocTerms.get(term) || 0) + 1);\n\t\tindex.df.set(term, (index.df.get(term) || 0) + 1);\n\t}\n}\nfunction ingestRecord(index, record, keyCount, analyzer) {\n\tconst { i: docIdx, v, $: fields } = record;\n\tif (v !== void 0) {\n\t\taddField(index, v, docIdx, analyzer);\n\t\treturn;\n\t}\n\tif (!fields) return;\n\tfor (let keyIdx = 0; keyIdx < keyCount; keyIdx++) {\n\t\tconst value = fields[keyIdx];\n\t\tif (!value) continue;\n\t\tif (Array.isArray(value)) for (const sub of value) addField(index, sub.v, docIdx, analyzer);\n\t\telse addField(index, value.v, docIdx, analyzer);\n\t}\n}\nfunction buildInvertedIndex(records, keyCount, analyzer) {\n\tconst index = {\n\t\tfieldCount: 0,\n\t\tdf: /* @__PURE__ */ new Map(),\n\t\tdocFieldCount: /* @__PURE__ */ new Map(),\n\t\tdocTermFieldHits: /* @__PURE__ */ new Map()\n\t};\n\tfor (const record of records) ingestRecord(index, record, keyCount, analyzer);\n\treturn index;\n}\nfunction addToInvertedIndex(index, record, keyCount, analyzer) {\n\tingestRecord(index, record, keyCount, analyzer);\n}\nfunction removeFromInvertedIndex(index, docIdx) {\n\tconst fieldCount = index.docFieldCount.get(docIdx);\n\tif (fieldCount === void 0) return;\n\tindex.fieldCount -= fieldCount;\n\tindex.docFieldCount.delete(docIdx);\n\tconst perDocTerms = index.docTermFieldHits.get(docIdx);\n\tif (!perDocTerms) return;\n\tfor (const [term, hits] of perDocTerms) {\n\t\tconst next = (index.df.get(term) || 0) - hits;\n\t\tif (next <= 0) index.df.delete(term);\n\t\telse index.df.set(term, next);\n\t}\n\tindex.docTermFieldHits.delete(docIdx);\n}\nfunction removeAndShiftInvertedIndex(index, removedIndices) {\n\tif (removedIndices.length === 0) return;\n\tconst sorted = Array.from(new Set(removedIndices)).sort((a, b) => a - b);\n\tfor (const idx of sorted) removeFromInvertedIndex(index, idx);\n\tconst shift = (oldIdx) => {\n\t\tlet lo = 0;\n\t\tlet hi = sorted.length;\n\t\twhile (lo < hi) {\n\t\t\tconst mid = lo + hi >>> 1;\n\t\t\tif (sorted[mid] < oldIdx) lo = mid + 1;\n\t\t\telse hi = mid;\n\t\t}\n\t\treturn oldIdx - lo;\n\t};\n\tconst firstRemoved = sorted[0];\n\tconst shiftedDocFieldCount = /* @__PURE__ */ new Map();\n\tfor (const [oldKey, count] of index.docFieldCount) shiftedDocFieldCount.set(oldKey > firstRemoved ? shift(oldKey) : oldKey, count);\n\tindex.docFieldCount = shiftedDocFieldCount;\n\tconst shiftedDocTermFieldHits = /* @__PURE__ */ new Map();\n\tfor (const [oldKey, terms] of index.docTermFieldHits) shiftedDocTermFieldHits.set(oldKey > firstRemoved ? shift(oldKey) : oldKey, terms);\n\tindex.docTermFieldHits = shiftedDocTermFieldHits;\n}\n\n//#endregion\n//#region src/core/index.ts\nvar Fuse = class {\n\tconstructor(docs, options, index) {\n\t\tthis.options = {\n\t\t\t...Config,\n\t\t\t...options\n\t\t};\n\t\tif (this.options.useExtendedSearch && false);\n\t\tif (this.options.useTokenSearch && false);\n\t\tthis._keyStore = new KeyStore(this.options.keys);\n\t\tthis._docs = docs;\n\t\tthis._myIndex = null;\n\t\tthis._invertedIndex = null;\n\t\tthis.setCollection(docs, index);\n\t\tthis._lastQuery = null;\n\t\tthis._lastSearcher = null;\n\t}\n\t_getSearcher(query) {\n\t\tif (this._lastQuery === query) return this._lastSearcher;\n\t\tconst searcher = createSearcher(query, this._invertedIndex ? {\n\t\t\t...this.options,\n\t\t\t_invertedIndex: this._invertedIndex\n\t\t} : this.options);\n\t\tthis._lastQuery = query;\n\t\tthis._lastSearcher = searcher;\n\t\treturn searcher;\n\t}\n\tsetCollection(docs, index) {\n\t\tthis._docs = docs;\n\t\tif (index && !(index instanceof FuseIndex)) throw new Error(INCORRECT_INDEX_TYPE);\n\t\tthis._myIndex = index || createIndex(this.options.keys, this._docs, {\n\t\t\tgetFn: this.options.getFn,\n\t\t\tfieldNormWeight: this.options.fieldNormWeight\n\t\t});\n\t\tif (this.options.useTokenSearch) {\n\t\t\tconst analyzer = createAnalyzer({\n\t\t\t\tisCaseSensitive: this.options.isCaseSensitive,\n\t\t\t\tignoreDiacritics: this.options.ignoreDiacritics,\n\t\t\t\ttokenize: this.options.tokenize\n\t\t\t});\n\t\t\tthis._invertedIndex = buildInvertedIndex(this._myIndex.records, this._myIndex.keys.length, analyzer);\n\t\t}\n\t\tthis._invalidateSearcherCache();\n\t}\n\tadd(doc) {\n\t\tif (!isDefined(doc)) return;\n\t\tthis._docs.push(doc);\n\t\tconst record = this._myIndex.add(doc, this._docs.length - 1);\n\t\tif (this._invertedIndex && record) {\n\t\t\tconst analyzer = createAnalyzer({\n\t\t\t\tisCaseSensitive: this.options.isCaseSensitive,\n\t\t\t\tignoreDiacritics: this.options.ignoreDiacritics,\n\t\t\t\ttokenize: this.options.tokenize\n\t\t\t});\n\t\t\taddToInvertedIndex(this._invertedIndex, record, this._myIndex.keys.length, analyzer);\n\t\t}\n\t\tthis._invalidateSearcherCache();\n\t}\n\tremove(predicate = () => false) {\n\t\tconst results = [];\n\t\tconst indicesToRemove = [];\n\t\tfor (let i = 0, len = this._docs.length; i < len; i += 1) if (predicate(this._docs[i], i)) {\n\t\t\tresults.push(this._docs[i]);\n\t\t\tindicesToRemove.push(i);\n\t\t}\n\t\tif (indicesToRemove.length) {\n\t\t\tif (this._invertedIndex) removeAndShiftInvertedIndex(this._invertedIndex, indicesToRemove);\n\t\t\tconst toRemove = new Set(indicesToRemove);\n\t\t\tthis._docs = this._docs.filter((_, i) => !toRemove.has(i));\n\t\t\tthis._myIndex.removeAll(indicesToRemove);\n\t\t\tthis._invalidateSearcherCache();\n\t\t}\n\t\treturn results;\n\t}\n\tremoveAt(idx) {\n\t\tif (!Number.isInteger(idx) || idx < 0 || idx >= this._docs.length) throw new Error(INVALID_DOC_INDEX);\n\t\tif (this._invertedIndex) removeAndShiftInvertedIndex(this._invertedIndex, [idx]);\n\t\tconst doc = this._docs.splice(idx, 1)[0];\n\t\tthis._myIndex.removeAt(idx);\n\t\tthis._invalidateSearcherCache();\n\t\treturn doc;\n\t}\n\t_invalidateSearcherCache() {\n\t\tthis._lastQuery = null;\n\t\tthis._lastSearcher = null;\n\t}\n\tgetIndex() {\n\t\treturn this._myIndex;\n\t}\n\t_normalizedKeys() {\n\t\treturn this._myIndex.keys.map((key) => this._keyStore.get(key.id) || key);\n\t}\n\tsearch(query, options) {\n\t\tconst { limit = -1 } = options || {};\n\t\tconst { includeMatches, includeScore, shouldSort, sortFn, ignoreFieldNorm } = this.options;\n\t\tif (isString(query) && !query.trim()) {\n\t\t\tlet docs = this._docs.map((item, idx) => ({\n\t\t\t\titem,\n\t\t\t\trefIndex: idx\n\t\t\t}));\n\t\t\tif (isNumber(limit) && limit > -1) docs = docs.slice(0, limit);\n\t\t\treturn docs;\n\t\t}\n\t\tconst useHeap = shouldSort && isNumber(limit) && limit > 0 && isString(query);\n\t\tconst comparator = sortFn;\n\t\tconst stable = (a, b) => comparator(a, b) || a.idx - b.idx;\n\t\tlet results;\n\t\tif (useHeap) {\n\t\t\tconst heap = new MaxHeap(limit, stable);\n\t\t\tif (isString(this._docs[0])) this._searchStringList(query, {\n\t\t\t\theap,\n\t\t\t\tignoreFieldNorm\n\t\t\t});\n\t\t\telse this._searchObjectList(query, {\n\t\t\t\theap,\n\t\t\t\tignoreFieldNorm\n\t\t\t});\n\t\t\tresults = heap.extractSorted();\n\t\t} else {\n\t\t\tresults = isString(query) ? isString(this._docs[0]) ? this._searchStringList(query) : this._searchObjectList(query) : this._searchLogical(query);\n\t\t\tcomputeScore(results, { ignoreFieldNorm });\n\t\t\tif (shouldSort) results.sort(isString(query) ? stable : comparator);\n\t\t\tif (isNumber(limit) && limit > -1) results = results.slice(0, limit);\n\t\t}\n\t\treturn format(results, this._docs, {\n\t\t\tincludeMatches,\n\t\t\tincludeScore\n\t\t});\n\t}\n\t_searchStringList(query, { heap, ignoreFieldNorm } = {}) {\n\t\tconst searcher = this._getSearcher(query);\n\t\tconst requireAllTokens = this.options.useTokenSearch && this.options.tokenMatch === \"all\";\n\t\tconst { records } = this._myIndex;\n\t\tconst results = heap ? null : [];\n\t\trecords.forEach(({ v: text, i: idx, n: norm }) => {\n\t\t\tif (!isDefined(text)) return;\n\t\t\tconst searchResult = searcher.searchIn(text);\n\t\t\tif (searchResult.isMatch) {\n\t\t\t\tconst match = {\n\t\t\t\t\tscore: searchResult.score,\n\t\t\t\t\tvalue: text,\n\t\t\t\t\tnorm,\n\t\t\t\t\tindices: searchResult.indices\n\t\t\t\t};\n\t\t\t\tif (requireAllTokens) {\n\t\t\t\t\tmatch.matchedMask = searchResult.matchedMask;\n\t\t\t\t\tmatch.matchedTerms = searchResult.matchedTerms;\n\t\t\t\t\tmatch.termCount = searchResult.termCount;\n\t\t\t\t}\n\t\t\t\tconst matches = [match];\n\t\t\t\tif (!requireAllTokens || this._coversAllTokens(matches)) {\n\t\t\t\t\tconst result = {\n\t\t\t\t\t\titem: text,\n\t\t\t\t\t\tidx,\n\t\t\t\t\t\tmatches\n\t\t\t\t\t};\n\t\t\t\t\tif (heap) {\n\t\t\t\t\t\tresult.score = computeScoreSingle(result.matches, { ignoreFieldNorm });\n\t\t\t\t\t\theap.insert(result);\n\t\t\t\t\t} else results.push(result);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn results;\n\t}\n\t_searchLogical(query) {\n\t\tconst expression = parse(query, this.options);\n\t\tconst keys = this._normalizedKeys();\n\t\tconst evaluate = (node, item, idx) => {\n\t\t\tif (!(\"children\" in node)) {\n\t\t\t\tconst { keyId, searcher } = node;\n\t\t\t\tlet matches;\n\t\t\t\tif (keyId === null) {\n\t\t\t\t\tmatches = [];\n\t\t\t\t\tkeys.forEach((key, keyIndex) => {\n\t\t\t\t\t\tmatches.push(...this._findMatches({\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: item[keyIndex],\n\t\t\t\t\t\t\tsearcher\n\t\t\t\t\t\t}));\n\t\t\t\t\t});\n\t\t\t\t} else matches = this._findMatches({\n\t\t\t\t\tkey: this._keyStore.get(keyId),\n\t\t\t\t\tvalue: this._myIndex.getValueForItemAtKeyId(item, keyId),\n\t\t\t\t\tsearcher\n\t\t\t\t});\n\t\t\t\tif (matches && matches.length) return [{\n\t\t\t\t\tidx,\n\t\t\t\t\titem,\n\t\t\t\t\tmatches\n\t\t\t\t}];\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\tconst { children, operator } = node;\n\t\t\tconst res = [];\n\t\t\tfor (let i = 0, len = children.length; i < len; i += 1) {\n\t\t\t\tconst child = children[i];\n\t\t\t\tconst result = evaluate(child, item, idx);\n\t\t\t\tif (result.length) res.push(...result);\n\t\t\t\telse if (operator === LogicalOperator.AND) return [];\n\t\t\t}\n\t\t\treturn res;\n\t\t};\n\t\tconst records = this._myIndex.records;\n\t\tconst resultMap = /* @__PURE__ */ new Map();\n\t\tconst results = [];\n\t\trecords.forEach(({ $: item, i: idx }) => {\n\t\t\tif (isDefined(item)) {\n\t\t\t\tconst expResults = evaluate(expression, item, idx);\n\t\t\t\tif (expResults.length) {\n\t\t\t\t\tif (!resultMap.has(idx)) {\n\t\t\t\t\t\tresultMap.set(idx, {\n\t\t\t\t\t\t\tidx,\n\t\t\t\t\t\t\titem,\n\t\t\t\t\t\t\tmatches: []\n\t\t\t\t\t\t});\n\t\t\t\t\t\tresults.push(resultMap.get(idx));\n\t\t\t\t\t}\n\t\t\t\t\texpResults.forEach(({ matches }) => {\n\t\t\t\t\t\tresultMap.get(idx).matches.push(...matches);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn results;\n\t}\n\t_searchObjectList(query, { heap, ignoreFieldNorm } = {}) {\n\t\tconst searcher = this._getSearcher(query);\n\t\tconst requireAllTokens = this.options.useTokenSearch && this.options.tokenMatch === \"all\";\n\t\tconst { records } = this._myIndex;\n\t\tconst keys = this._normalizedKeys();\n\t\tconst results = heap ? null : [];\n\t\trecords.forEach(({ $: item, i: idx }) => {\n\t\t\tif (!isDefined(item)) return;\n\t\t\tconst matches = [];\n\t\t\tlet anyKeyFailed = false;\n\t\t\tlet hasInverse = false;\n\t\t\tkeys.forEach((key, keyIndex) => {\n\t\t\t\tconst keyMatches = this._findMatches({\n\t\t\t\t\tkey,\n\t\t\t\t\tvalue: item[keyIndex],\n\t\t\t\t\tsearcher\n\t\t\t\t});\n\t\t\t\tif (keyMatches.length) {\n\t\t\t\t\tmatches.push(...keyMatches);\n\t\t\t\t\tif (keyMatches[0].hasInverse) hasInverse = true;\n\t\t\t\t} else anyKeyFailed = true;\n\t\t\t});\n\t\t\tif (hasInverse && anyKeyFailed) return;\n\t\t\tif (matches.length && (!requireAllTokens || this._coversAllTokens(matches))) {\n\t\t\t\tconst result = {\n\t\t\t\t\tidx,\n\t\t\t\t\titem,\n\t\t\t\t\tmatches\n\t\t\t\t};\n\t\t\t\tif (heap) {\n\t\t\t\t\tresult.score = computeScoreSingle(result.matches, { ignoreFieldNorm });\n\t\t\t\t\theap.insert(result);\n\t\t\t\t} else results.push(result);\n\t\t\t}\n\t\t});\n\t\treturn results;\n\t}\n\t_findMatches({ key, value, searcher }) {\n\t\tif (!isDefined(value)) return [];\n\t\tconst matches = [];\n\t\tif (isArray(value)) value.forEach(({ v: text, i: idx, n: norm }) => {\n\t\t\tif (!isDefined(text)) return;\n\t\t\tconst searchResult = searcher.searchIn(text);\n\t\t\tif (searchResult.isMatch) {\n\t\t\t\tconst match = {\n\t\t\t\t\tscore: searchResult.score,\n\t\t\t\t\tkey,\n\t\t\t\t\tvalue: text,\n\t\t\t\t\tidx,\n\t\t\t\t\tnorm,\n\t\t\t\t\tindices: searchResult.indices,\n\t\t\t\t\thasInverse: searchResult.hasInverse\n\t\t\t\t};\n\t\t\t\tif (searchResult.termCount !== void 0) {\n\t\t\t\t\tmatch.matchedMask = searchResult.matchedMask;\n\t\t\t\t\tmatch.matchedTerms = searchResult.matchedTerms;\n\t\t\t\t\tmatch.termCount = searchResult.termCount;\n\t\t\t\t}\n\t\t\t\tmatches.push(match);\n\t\t\t}\n\t\t});\n\t\telse {\n\t\t\tconst { v: text, n: norm } = value;\n\t\t\tconst searchResult = searcher.searchIn(text);\n\t\t\tif (searchResult.isMatch) {\n\t\t\t\tconst match = {\n\t\t\t\t\tscore: searchResult.score,\n\t\t\t\t\tkey,\n\t\t\t\t\tvalue: text,\n\t\t\t\t\tnorm,\n\t\t\t\t\tindices: searchResult.indices,\n\t\t\t\t\thasInverse: searchResult.hasInverse\n\t\t\t\t};\n\t\t\t\tif (searchResult.termCount !== void 0) {\n\t\t\t\t\tmatch.matchedMask = searchResult.matchedMask;\n\t\t\t\t\tmatch.matchedTerms = searchResult.matchedTerms;\n\t\t\t\t\tmatch.termCount = searchResult.termCount;\n\t\t\t\t}\n\t\t\t\tmatches.push(match);\n\t\t\t}\n\t\t}\n\t\treturn matches;\n\t}\n\t_coversAllTokens(matches) {\n\t\tconst termCount = matches.length ? matches[0].termCount : void 0;\n\t\tif (termCount === void 0) return true;\n\t\tif (termCount <= 31) {\n\t\t\tlet coverage = 0;\n\t\t\tfor (let i = 0; i < matches.length; i++) coverage |= matches[i].matchedMask || 0;\n\t\t\treturn coverage === 2 ** termCount - 1;\n\t\t}\n\t\tconst coverage = /* @__PURE__ */ new Set();\n\t\tfor (let i = 0; i < matches.length; i++) {\n\t\t\tconst terms = matches[i].matchedTerms;\n\t\t\tif (terms) for (const t of terms) coverage.add(t);\n\t\t}\n\t\treturn coverage.size === termCount;\n\t}\n};\n\n//#endregion\n//#region src/entry.ts\nFuse.version = \"7.5.0\";\nFuse.createIndex = createIndex;\nFuse.parseIndex = parseIndex;\nFuse.config = Config;\nFuse.match = function(pattern, text, options) {\n\tif (options && options.useTokenSearch) throw new Error(FUSE_MATCH_TOKEN_SEARCH_UNSUPPORTED);\n\treturn createSearcher(pattern, {\n\t\t...Config,\n\t\t...options\n\t}).searchIn(text);\n};\nFuse.parseQuery = parse;\nregister(ExtendedSearch);\nregister(TokenSearch);\nFuse.use = function(...plugins) {\n\tplugins.forEach((plugin) => register(plugin));\n};\nvar entry_default = Fuse;\n\n//#endregion\nexport { entry_default as default };","/**\n * Hardware-related system information functions\n * @module info/hardware\n */\n\nimport os from \"os\";\nimport fs from \"fs\";\nimport type { InfoContext } from \"../types/internal-types\";\nimport { IS_WINDOWS, IS_LINUX } from \"../utils/platform\";\nimport { execCommand } from \"../utils/command\";\nimport { getCachedValue, setCachedValue } from \"../cache/cache\";\nimport Fuse from \"fuse.js\";\n\n/**\n * Gets CPU model name and specifications\n * Uses platform-specific commands (wmic/lscpu/cpuinfo)\n * Automatically strips \"with Radeon Graphics\" and similar suffixes\n * @param context - Info context with cache\n * @returns CPU model string or empty string\n * @example \"Intel Core i7-12700K\", \"AMD Ryzen 9 5900HX\", \"Apple M2 Pro\"\n */\nexport function cpu(context: InfoContext): string {\n const cached = getCachedValue(context.cache, \"cpu\");\n if (cached) return cached;\n\n let cpuName = \"\";\n\n if (IS_WINDOWS) {\n try {\n const wmic = execCommand(\"wmic cpu get name /format:list\");\n const nameMatch = wmic.match(/Name=(.+)/);\n if (nameMatch) {\n cpuName = nameMatch[1].trim();\n }\n } catch {}\n\n if (!cpuName) {\n try {\n const ps = execCommand(\n 'powershell.exe -Command \"Get-WmiObject -Class Win32_Processor | Select-Object -ExpandProperty Name\"'\n );\n if (ps.trim()) {\n cpuName = ps.trim();\n }\n } catch {}\n }\n } else if (IS_LINUX) {\n try {\n const lscpu = execCommand(\"lscpu\");\n const modelMatch = lscpu.match(/Model name:\\s*([^\\n,]+)/);\n if (modelMatch) {\n cpuName = modelMatch[1].trim();\n }\n } catch {}\n\n if (!cpuName) {\n try {\n const cpuInfo = fs.readFileSync(\"/proc/cpuinfo\", \"utf8\");\n const modelMatch = cpuInfo.match(/model name\\s*:\\s*([^\\n]+)/);\n const hardwareMatch = cpuInfo.match(/Hardware\\s*:\\s*([^\\n]+)/);\n\n if (modelMatch) {\n cpuName = modelMatch[1].trim();\n } else if (hardwareMatch) {\n cpuName = hardwareMatch[1].trim();\n }\n } catch {}\n }\n } else {\n const cpus = os.cpus();\n if (cpus.length > 0) {\n cpuName = cpus[0].model.trim().replace(/[\\r\\n]+/g, \" \");\n }\n }\n\n if (!cpuName) {\n setCachedValue(context.cache, \"cpu\", \"\");\n return \"\";\n }\n\n cpuName = cpuName.trim().replace(/with .*/, \"\");\n\n setCachedValue(context.cache, \"cpu\", cpuName);\n return cpuName;\n}\n\n/**\n * Gets graphics card model name\n * Extracts GPU info from lspci (Linux) or WMI (Windows)\n * Filters out basic/generic display adapters\n * @param context - Info context with cache\n * @returns GPU model string or empty string\n * @example \"NVIDIA GeForce RTX 4070\", \"AMD Radeon RX 6800 XT\"\n */\nexport function gpu(context: InfoContext): string {\n const cached = getCachedValue(context.cache, \"gpu\");\n if (cached !== null) return cached;\n\n if (IS_WINDOWS) {\n const gpus: string[] = [];\n\n try {\n const wmic = execCommand(\n \"wmic path win32_VideoController get name /format:list\"\n );\n const nameMatches = wmic.matchAll(/Name=(.+)/g);\n for (const match of nameMatches) {\n const name = match[1].trim();\n if (name && !name.includes(\"Microsoft Basic\")) {\n gpus.push(name);\n }\n }\n } catch {}\n\n if (gpus.length === 0) {\n try {\n const ps = execCommand(\n \"powershell.exe -Command \\\"Get-WmiObject -Class Win32_VideoController | Where-Object {$_.Name -notlike '*Microsoft Basic*'} | Select-Object -ExpandProperty Name\\\"\"\n );\n if (ps.trim()) {\n for (const line of ps.trim().split(/\\r?\\n/)) {\n const name = line.trim();\n if (name && !name.includes(\"Microsoft Basic\")) {\n gpus.push(name);\n }\n }\n }\n } catch {}\n }\n\n if (gpus.length > 0) {\n const result = gpus.join(\", \");\n setCachedValue(context.cache, \"gpu\", result);\n return result;\n }\n } else if (IS_LINUX) {\n try {\n const lspci = execCommand(\"lspci\");\n const gpus: string[] = [];\n const classPattern = /(?:VGA compatible controller|3D controller|Display controller)/i;\n const gpuPattern = /(?:NVIDIA|GeForce|RTX|GTX|Quadro|Tesla|AMD|ATI|Radeon|Navi|Vega|RX|Intel.*(?:Arc|UHD|Iris|HD Graphics))/i;\n\n for (const line of lspci.split(\"\\n\")) {\n if (!classPattern.test(line) || !gpuPattern.test(line)) continue;\n\n let name: string;\n const allBrackets = line.match(/\\[([^\\]]+)\\]/g);\n if (allBrackets && allBrackets.length > 0) {\n const last = allBrackets[allBrackets.length - 1];\n name = last.replace(/^\\[|\\]$/g, \"\");\n } else {\n name = line\n .replace(/^.*(?:VGA compatible controller|3D controller|Display controller):\\s*/i, \"\")\n .replace(/\\s*\\(rev [a-f0-9]+\\)\\s*$/i, \"\")\n .trim();\n }\n\n if (name && !gpus.includes(name)) {\n gpus.push(name);\n }\n }\n\n if (gpus.length > 0) {\n const result = gpus.join(\", \");\n setCachedValue(context.cache, \"gpu\", result);\n return result;\n }\n } catch {}\n }\n\n setCachedValue(context.cache, \"gpu\", \"\");\n return \"\";\n}\n\n/**\n * Gets screen resolution from X11 display\n * Uses xrandr command (Linux with X11/Xorg only)\n * @returns Resolution in WIDTHxHEIGHT format or empty string\n * @example \"1920x1080\", \"2560x1440\", \"3840x2160\"\n */\nexport function screen_resolution(): string {\n if (!IS_LINUX) return \"\";\n\n try {\n if (process.env.DISPLAY) {\n const xrandr = execCommand(\"xrandr\");\n const resolutionMatch = xrandr.match(/(\\d+x\\d+)\\+\\d+\\+\\d+/);\n if (resolutionMatch) {\n return resolutionMatch[1];\n }\n }\n } catch {}\n return \"\";\n}\n\n/**\n * Gets CPU benchmark score and rank from Geekbench 6 data\n * Uses fuzzy matching to find similar CPU models\n * @param context - Info context with cache\n * @returns Benchmark info with score and rank, or empty string\n * @example \"💪 37.9k #1\", \"💪 20.5k #68\"\n */\nexport function bench(context: InfoContext): string {\n const cached = getCachedValue(context.cache, \"bench\");\n if (cached) return cached;\n\n const cpuName = cpu(context);\n if (!cpuName) {\n setCachedValue(context.cache, \"bench\", \"\");\n return \"\";\n }\n\n try {\n let benchmarkPath: string;\n const benchmarkFile = \"cpu-geekbench-1k.json\";\n\n // Try multiple resolution strategies\n if (fs.existsSync(benchmarkFile)) {\n benchmarkPath = benchmarkFile;\n } else if (fs.existsSync(`src/bench/${benchmarkFile}`)) {\n benchmarkPath = `src/bench/${benchmarkFile}`;\n } else if (fs.existsSync(`./bench/${benchmarkFile}`)) {\n benchmarkPath = `./bench/${benchmarkFile}`;\n } else {\n // Last resort: construct path from import.meta.url\n try {\n const url = new URL(`./${benchmarkFile}`, import.meta.url);\n benchmarkPath = url.pathname;\n if (!fs.existsSync(benchmarkPath)) {\n const distPath = url.pathname.substring(0, url.pathname.lastIndexOf('/'));\n benchmarkPath = distPath + `/${benchmarkFile}`;\n }\n } catch {\n benchmarkPath = benchmarkFile;\n }\n }\n\n const benchmarkData = fs.readFileSync(benchmarkPath, \"utf8\");\n const parsed = JSON.parse(benchmarkData);\n const scores = parsed.scores as [string, number, number][];\n\n const cpuList = scores.map((item) => ({ name: item[0], score: item[1], rank: item[2] }));\n\n const fuse = new Fuse(cpuList, {\n keys: [\"name\"],\n threshold: 0.6,\n minMatchCharLength: 3,\n });\n\n const results = fuse.search(cpuName);\n if (results.length > 0) {\n const match = results[0].item;\n const score = Math.round(match.score / 100) / 10;\n const rank = match.rank;\n const result = `💪 ${score}k #${rank}`;\n setCachedValue(context.cache, \"bench\", result);\n return result;\n }\n } catch (e) {\n // Silently fail\n }\n\n setCachedValue(context.cache, \"bench\", \"\");\n return \"\";\n}\n\n/**\n * Gets detailed CPU benchmark information from Geekbench 6 data\n * Includes score, rank, and architecture type (ARM/Intel/AMD)\n * @param context - Info context with cache\n * @returns Detailed benchmark info with architecture, or empty string\n * @example \"Geekbench 6: 37.9k (Rank #1) - ARM\", \"Geekbench 6: 20.5k (Rank #68) - Intel\"\n */\nexport function cpu_bench_info(context: InfoContext): string {\n const cached = getCachedValue(context.cache, \"cpu_bench_info\");\n if (cached) return cached;\n\n const cpuName = cpu(context);\n if (!cpuName) {\n setCachedValue(context.cache, \"cpu_bench_info\", \"\");\n return \"\";\n }\n\n try {\n let benchmarkPath: string;\n const benchmarkFile = \"cpu-geekbench-1k.json\";\n\n // Try multiple resolution strategies\n if (fs.existsSync(benchmarkFile)) {\n benchmarkPath = benchmarkFile;\n } else if (fs.existsSync(`src/bench/${benchmarkFile}`)) {\n benchmarkPath = `src/bench/${benchmarkFile}`;\n } else if (fs.existsSync(`./bench/${benchmarkFile}`)) {\n benchmarkPath = `./bench/${benchmarkFile}`;\n } else {\n // Last resort: construct path from import.meta.url\n try {\n const url = new URL(`./${benchmarkFile}`, import.meta.url);\n benchmarkPath = url.pathname;\n if (!fs.existsSync(benchmarkPath)) {\n const distPath = url.pathname.substring(0, url.pathname.lastIndexOf('/'));\n benchmarkPath = distPath + `/${benchmarkFile}`;\n }\n } catch {\n benchmarkPath = benchmarkFile;\n }\n }\n\n const benchmarkData = fs.readFileSync(benchmarkPath, \"utf8\");\n const parsed = JSON.parse(benchmarkData);\n const scores = parsed.scores as [string, number, number][];\n\n const cpuList = scores.map((item) => ({\n name: item[0],\n score: item[1],\n rank: item[2],\n }));\n\n const fuse = new Fuse(cpuList, {\n keys: [\"name\"],\n threshold: 0.6,\n minMatchCharLength: 3,\n });\n\n const results = fuse.search(cpuName);\n if (results.length > 0) {\n const match = results[0].item;\n const score = Math.round(match.score / 100) / 10;\n const rank = match.rank;\n\n // Detect architecture type\n let arch = \"Unknown\";\n if (match.name.includes(\"Apple\") || match.name.includes(\"ARM\")) {\n arch = \"ARM\";\n } else if (match.name.includes(\"Intel\")) {\n arch = \"Intel\";\n } else if (match.name.includes(\"AMD\") || match.name.includes(\"Ryzen\") || match.name.includes(\"EPYC\")) {\n arch = \"AMD\";\n } else if (match.name.includes(\"Qualcomm\")) {\n arch = \"ARM\";\n }\n\n const result = `Geekbench 6: ${score}k (Rank #${rank}) - ${arch}`;\n setCachedValue(context.cache, \"cpu_bench_info\", result);\n return result;\n }\n } catch (e) {\n // Silently fail\n }\n\n setCachedValue(context.cache, \"cpu_bench_info\", \"\");\n return \"\";\n}\n\n/**\n * Gets GPU benchmark score and rank from Geekbench 6 data\n * Uses fuzzy matching to find similar GPU models\n * @param context - Info context with cache\n * @returns Benchmark info with score and rank, or empty string\n * @example \"💪 37.9k #1\", \"💪 20.5k #68\"\n */\nexport function gpu_bench(context: InfoContext): string {\n const cached = getCachedValue(context.cache, \"gpu_bench\");\n if (cached) return cached;\n\n const gpuName = gpu(context);\n if (!gpuName) {\n setCachedValue(context.cache, \"gpu_bench\", \"\");\n return \"\";\n }\n\n try {\n let benchmarkPath: string;\n const benchmarkFile = \"gpu-geekbench.json\";\n\n // Try multiple resolution strategies\n if (fs.existsSync(benchmarkFile)) {\n benchmarkPath = benchmarkFile;\n } else if (fs.existsSync(`src/bench/${benchmarkFile}`)) {\n benchmarkPath = `src/bench/${benchmarkFile}`;\n } else if (fs.existsSync(`./bench/${benchmarkFile}`)) {\n benchmarkPath = `./bench/${benchmarkFile}`;\n } else {\n // Last resort: construct path from import.meta.url\n try {\n const url = new URL(`./${benchmarkFile}`, import.meta.url);\n benchmarkPath = url.pathname;\n if (!fs.existsSync(benchmarkPath)) {\n const distPath = url.pathname.substring(0, url.pathname.lastIndexOf('/'));\n benchmarkPath = distPath + `/${benchmarkFile}`;\n }\n } catch {\n benchmarkPath = benchmarkFile;\n }\n }\n\n const benchmarkData = fs.readFileSync(benchmarkPath, \"utf8\");\n const parsed = JSON.parse(benchmarkData);\n const scores = parsed.scores as [string, number, number][];\n\n const gpuList = scores.map((item) => ({ name: item[0], score: item[1], rank: item[2] }));\n\n const fuse = new Fuse(gpuList, {\n keys: [\"name\"],\n threshold: 0.6,\n minMatchCharLength: 3,\n });\n\n const results = fuse.search(gpuName);\n if (results.length > 0) {\n const match = results[0].item;\n const score = Math.round(match.score / 100) / 10;\n const rank = match.rank;\n const result = `💪 ${score}k #${rank}`;\n setCachedValue(context.cache, \"gpu_bench\", result);\n return result;\n }\n } catch (e) {\n // Silently fail\n }\n\n setCachedValue(context.cache, \"gpu_bench\", \"\");\n return \"\";\n}\n\n/**\n * Gets detailed GPU benchmark information from Geekbench 6 data\n * Includes score, rank, and vendor detection\n * @param context - Info context with cache\n * @returns Detailed benchmark info with vendor, or empty string\n * @example \"Geekbench 6: 37.9k (Rank #1) - NVIDIA\", \"Geekbench 6: 20.5k (Rank #68) - AMD\"\n */\nexport function gpu_bench_info(context: InfoContext): string {\n const cached = getCachedValue(context.cache, \"gpu_bench_info\");\n if (cached) return cached;\n\n const gpuName = gpu(context);\n if (!gpuName) {\n setCachedValue(context.cache, \"gpu_bench_info\", \"\");\n return \"\";\n }\n\n try {\n let benchmarkPath: string;\n const benchmarkFile = \"gpu-geekbench.json\";\n\n // Try multiple resolution strategies\n if (fs.existsSync(benchmarkFile)) {\n benchmarkPath = benchmarkFile;\n } else if (fs.existsSync(`src/bench/${benchmarkFile}`)) {\n benchmarkPath = `src/bench/${benchmarkFile}`;\n } else if (fs.existsSync(`./bench/${benchmarkFile}`)) {\n benchmarkPath = `./bench/${benchmarkFile}`;\n } else {\n // Last resort: construct path from import.meta.url\n try {\n const url = new URL(`./${benchmarkFile}`, import.meta.url);\n benchmarkPath = url.pathname;\n if (!fs.existsSync(benchmarkPath)) {\n const distPath = url.pathname.substring(0, url.pathname.lastIndexOf('/'));\n benchmarkPath = distPath + `/${benchmarkFile}`;\n }\n } catch {\n benchmarkPath = benchmarkFile;\n }\n }\n\n const benchmarkData = fs.readFileSync(benchmarkPath, \"utf8\");\n const parsed = JSON.parse(benchmarkData);\n const scores = parsed.scores as [string, number, number][];\n\n const gpuList = scores.map((item) => ({\n name: item[0],\n score: item[1],\n rank: item[2],\n }));\n\n const fuse = new Fuse(gpuList, {\n keys: [\"name\"],\n threshold: 0.6,\n minMatchCharLength: 3,\n });\n\n const results = fuse.search(gpuName);\n if (results.length > 0) {\n const match = results[0].item;\n const score = Math.round(match.score / 100) / 10;\n const rank = match.rank;\n\n // Detect vendor from GPU name\n let vendor = \"Unknown\";\n const upperName = match.name.toUpperCase();\n if (upperName.includes(\"NVIDIA\") || upperName.includes(\"GEFORCE\") ||\n upperName.includes(\"RTX\") || upperName.includes(\"GTX\") ||\n upperName.includes(\"QUADRO\") || upperName.includes(\"TESL\") ||\n upperName.includes(\"B200\") || upperName.includes(\"H100\") ||\n upperName.includes(\"A100\") || upperName.includes(\"A40\") ||\n upperName.includes(\"L40\") || upperName.includes(\"L20\")) {\n vendor = \"NVIDIA\";\n } else if (upperName.includes(\"AMD\") || upperName.includes(\"RADEON\") ||\n upperName.includes(\"RX \") || upperName.includes(\"HD\") ||\n upperName.includes(\"EPYC\") || upperName.includes(\"INSTINCT\") ||\n upperName.includes(\"NAVI\") || upperName.includes(\"VEGA\")) {\n vendor = \"AMD\";\n } else if (upperName.includes(\"INTEL\") || upperName.includes(\"ARC\") ||\n upperName.includes(\"UHD\") || upperName.includes(\"IRIS\") ||\n upperName.includes(\"HD GRAPHICS\")) {\n vendor = \"Intel\";\n }\n\n const result = `Geekbench 6: ${score}k (Rank #${rank}) - ${vendor}`;\n setCachedValue(context.cache, \"gpu_bench_info\", result);\n return result;\n }\n } catch (e) {\n // Silently fail\n }\n\n setCachedValue(context.cache, \"gpu_bench_info\", \"\");\n return \"\";\n}\n","/**\n * Memory and disk-related system information functions\n * @module info/memory\n */\n\nimport os from \"os\";\nimport fs from \"fs\";\nimport type { InfoContext } from \"../types/internal-types\";\nimport { IS_LINUX } from \"../utils/platform\";\nimport { execCommand } from \"../utils/command\";\nimport { getCachedValue, setCachedValue } from \"../cache/cache\";\n\n/**\n * Gets memory usage in gigabytes\n * Reads from /proc/meminfo on Linux, falls back to os.totalmem()\n * @param context - Info context with cache\n * @returns Memory usage as \"used/total GB\"\n * @example \"12/32GB\", \"6/16GB\"\n */\nexport function ram_used(context: InfoContext): string {\n const cached = getCachedValue(context.cache, \"ram_used\");\n if (cached) return cached;\n\n if (IS_LINUX) {\n try {\n const meminfo = fs.readFileSync(\"/proc/meminfo\", \"utf8\");\n const totalMatch = meminfo.match(/MemTotal:\\s+(\\d+) kB/);\n const freeMatch = meminfo.match(/MemFree:\\s+(\\d+) kB/);\n\n if (totalMatch && freeMatch) {\n const totalMB = Math.round(parseInt(totalMatch[1]) / 1024);\n const freeMB = Math.round(parseInt(freeMatch[1]) / 1024);\n const usedMB = totalMB - freeMB;\n\n const totalGB = Math.round(totalMB / 1024);\n const usedGB = Math.round(usedMB / 1024);\n\n const result = `${usedGB}/${totalGB}GB`;\n setCachedValue(context.cache, \"ram_used\", result);\n return result;\n }\n } catch {}\n }\n\n const totalMem = os.totalmem();\n const freeMem = os.freemem();\n const usedMem = totalMem - freeMem;\n\n const totalGB = Math.round(totalMem / (1024 * 1024 * 1024));\n const usedGB = Math.round(usedMem / (1024 * 1024 * 1024));\n\n const result = `${usedGB}/${totalGB}GB`;\n setCachedValue(context.cache, \"ram_used\", result);\n return result;\n}\n\n/**\n * Gets available memory in gigabytes\n * Reads MemAvailable from /proc/meminfo (Linux only)\n * @returns Available memory with \"GB available\" suffix or empty string\n * @example \"12GB available\", \"4GB available\"\n */\nexport function memory_available(): string {\n if (!IS_LINUX) return \"\";\n\n try {\n const meminfo = fs.readFileSync(\"/proc/meminfo\", \"utf8\");\n const availableMatch = meminfo.match(/MemAvailable:\\s+(\\d+) kB/);\n if (availableMatch) {\n const availableGB = Math.round(parseInt(availableMatch[1]) / 1024 / 1024);\n return `${availableGB}GB available`;\n }\n } catch {}\n return \"\";\n}\n\n/**\n * Gets swap memory usage\n * Calculates swap usage from /proc/meminfo (Linux only)\n * @returns Swap usage as \"percentage (size MB) swap\" or empty string\n * @example \"15% (512MB) swap\", \"0% (0MB) swap\"\n */\nexport function swap_used(): string {\n if (!IS_LINUX) return \"\";\n\n try {\n const meminfo = fs.readFileSync(\"/proc/meminfo\", \"utf8\");\n const swapTotalMatch = meminfo.match(/SwapTotal:\\s+(\\d+) kB/);\n const swapFreeMatch = meminfo.match(/SwapFree:\\s+(\\d+) kB/);\n\n if (swapTotalMatch && swapFreeMatch) {\n const swapTotal = parseInt(swapTotalMatch[1]);\n const swapFree = parseInt(swapFreeMatch[1]);\n const swapUsed = swapTotal - swapFree;\n\n if (swapTotal > 0) {\n const swapUsedPercent = Math.round((swapUsed / swapTotal) * 100);\n const swapUsedMB = Math.round(swapUsed / 1024);\n return `${swapUsedPercent}% (${swapUsedMB}MB) swap`;\n }\n }\n } catch {}\n return \"\";\n}\n\n/**\n * Gets root filesystem disk usage percentage\n * Uses df command on Linux/Android\n * @param context - Info context with cache\n * @returns Percentage string or empty string\n * @example \"45%\", \"78%\"\n */\nexport function disk_used(context: InfoContext): string {\n const cached = getCachedValue(context.cache, \"disk_used\");\n if (cached !== null) return cached;\n\n if (IS_LINUX) {\n try {\n const df = execCommand(\"df -h\");\n let diskUsage = \"\";\n\n if (df.includes(\"/storage/emulated\")) {\n const match = df.match(/\\s+(\\d+%)\\s+\\/storage\\/emulated/);\n diskUsage = match ? match[1] : \"\";\n } else {\n const lines = df.split(\"\\n\");\n for (const line of lines) {\n if (line.trim().endsWith(\" /\")) {\n const parts = line.trim().split(/\\s+/);\n const percentIndex = parts.findIndex((part) => part.includes(\"%\"));\n if (percentIndex !== -1) {\n diskUsage = parts[percentIndex];\n break;\n }\n }\n }\n\n if (!diskUsage) {\n const rootMatch = df.match(/(\\d+%)\\s+\\/\\s*$/m);\n diskUsage = rootMatch ? rootMatch[1] : \"\";\n }\n }\n\n setCachedValue(context.cache, \"disk_used\", diskUsage);\n return diskUsage;\n } catch {}\n }\n\n setCachedValue(context.cache, \"disk_used\", \"\");\n return \"\";\n}\n\n/**\n * Gets system load averages\n * Reads 1, 5, and 15 minute load averages from /proc/loadavg (Linux only)\n * @returns Space-separated load averages (1m 5m 15m) or empty string\n * @example \"0.52 0.58 0.59\", \"2.10 1.95 1.88\"\n */\nexport function load_average(): string {\n if (!IS_LINUX) return \"\";\n\n try {\n const loadavg = fs.readFileSync(\"/proc/loadavg\", \"utf8\");\n const loads = loadavg.split(\" \").slice(0, 3);\n return loads.join(\" \");\n } catch {}\n return \"\";\n}\n\n/**\n * Gets mounted filesystem information\n * Lists non-system mount points with usage from df (Linux only)\n * Excludes /, /dev, /proc, and /sys mounts\n * @param context - Info context with cache\n * @returns Space-separated mount points with usage or empty string\n * @example \"/home(45%) /mnt/data(78%)\", \"/media/usb(12%)\"\n */\nexport function mount_points(context: InfoContext): string {\n const cached = getCachedValue(context.cache, \"mount_points\");\n if (cached !== null) return cached;\n\n if (!IS_LINUX) {\n setCachedValue(context.cache, \"mount_points\", \"\");\n return \"\";\n }\n\n try {\n const df = execCommand(\"df -h\");\n const lines = df.split(\"\\n\").slice(1);\n const mountPoints: string[] = [];\n\n lines.forEach((line) => {\n const parts = line.trim().split(/\\s+/);\n if (parts.length >= 6) {\n const mountPoint = parts[5];\n const usage = parts[4];\n if (\n !mountPoint.startsWith(\"/dev\") &&\n !mountPoint.startsWith(\"/proc\") &&\n !mountPoint.startsWith(\"/sys\") &&\n mountPoint !== \"/\"\n ) {\n mountPoints.push(`${mountPoint}(${usage})`);\n }\n }\n });\n\n const result = mountPoints.slice(0, 3).join(\" \");\n setCachedValue(context.cache, \"mount_points\", result);\n return result;\n } catch {}\n\n setCachedValue(context.cache, \"mount_points\", \"\");\n return \"\";\n}\n","/**\n * Process-related system information functions\n * @module info/process\n */\n\nimport os from \"os\";\nimport type { InfoContext } from \"../types/internal-types\";\nimport { IS_LINUX } from \"../utils/platform\";\nimport { execCommand } from \"../utils/command\";\nimport { getCachedValue, setCachedValue } from \"../cache/cache\";\n\n/**\n * Gets the highest CPU-consuming process\n * Uses ps command to find top process by CPU usage (Linux only)\n * @param context - Info context with cache\n * @returns Process info as \"percentage processname\" or empty string\n * @example \"8% firefox\", \"15% chrome\", \"3% systemd\"\n */\nexport function top_process(context: InfoContext): string {\n const cached = getCachedValue(context.cache, \"top_process\");\n if (cached !== null) return cached;\n\n if (IS_LINUX) {\n try {\n const ps = execCommand(\"ps -eo pcpu,comm --sort=-%cpu --no-headers\");\n const lines = ps.split(\"\\n\");\n if (lines.length > 0) {\n const topProcess = lines[0].trim().replace(/\\s+/, \" \").split(\" \");\n const cpu = topProcess[0].replace(/\\.\\d+/, \"%\");\n const process = topProcess[1].split(\"/\").pop();\n const result = `${cpu}% ${process}`;\n setCachedValue(context.cache, \"top_process\", result);\n return result;\n }\n } catch {}\n }\n\n setCachedValue(context.cache, \"top_process\", \"\");\n return \"\";\n}\n\n/**\n * Gets system uptime since last boot\n * @returns Uptime formatted as \"Xd Yh Zm\"\n * @example \"2d 14h 23m\", \"0d 3h 45m\"\n */\nexport function uptime(): string {\n const uptimeSeconds = os.uptime();\n const days = Math.floor(uptimeSeconds / 86400);\n const hours = Math.floor((uptimeSeconds % 86400) / 3600);\n const minutes = Math.floor((uptimeSeconds % 3600) / 60);\n return `${days}d ${hours}h ${minutes}m`;\n}\n\n/**\n * Gets number of logged in users\n * Uses who command to count active user sessions (Linux only)\n * @returns User count with \"users\" suffix or empty string\n * @example \"3 users\", \"1 users\"\n */\nexport function users_logged_in(): string {\n if (!IS_LINUX) return \"\";\n\n try {\n const who = execCommand(\"who\");\n const users = who.split(\"\\n\").filter((line) => line.trim()).length;\n if (users > 0) {\n return `${users} users`;\n }\n } catch {}\n return \"\";\n}\n","/**\n * Network-related system information functions\n * @module info/network\n */\n\nimport os from \"os\";\nimport type { InfoContext } from \"../types/internal-types\";\nimport { IS_LINUX } from \"../utils/platform\";\nimport { execCommand } from \"../utils/command\";\nimport { getCachedValue, setCachedValue } from \"../cache/cache\";\n\n/**\n * Gets public IP address from ipinfo.io\n * @param context - Info context with cache and IP info\n * @returns Public IPv4 address or empty string\n * @example \"203.0.113.42\"\n */\nexport async function ip(context: InfoContext): Promise<string> {\n const cached = getCachedValue(context.cache, \"ip\");\n if (cached) return cached;\n\n if (!context.ipInfo) {\n setCachedValue(context.cache, \"ip\", \"\");\n return \"\";\n }\n const ip = context.ipInfo.ip || \"\";\n setCachedValue(context.cache, \"ip\", ip);\n return ip;\n}\n\n/**\n * Gets local/private IP address(es)\n * Tries ifconfig and ip commands on Linux, falls back to Node.js API\n * @returns Space-separated local IP addresses (RFC 1918 ranges)\n * @example \"192.168.1.100\" or \"10.0.0.50 192.168.1.100\"\n */\nexport function iplocal(): string {\n if (IS_LINUX) {\n try {\n const ifconfig = execCommand(\"ifconfig 2>/dev/null\");\n const wlanMatch = ifconfig.match(\n /wlan0[\\s\\S]*?inet (\\d+\\.\\d+\\.\\d+\\.\\d+)/\n );\n if (wlanMatch) {\n return wlanMatch[1];\n }\n } catch {}\n\n try {\n const ipAddr = execCommand(\"ip addr show 2>/dev/null\");\n const addresses: string[] = [];\n const matches = ipAddr.matchAll(/inet (\\d+\\.\\d+\\.\\d+\\.\\d+)\\/\\d+/g);\n for (const match of matches) {\n if (!match[1].startsWith(\"127.\")) {\n addresses.push(match[1]);\n }\n }\n if (addresses.length > 0) {\n return addresses.join(\" \");\n }\n } catch {}\n }\n\n const interfaces = os.networkInterfaces();\n const addresses: string[] = [];\n\n for (const name of Object.keys(interfaces)) {\n for (const device of interfaces[name] || []) {\n if (device.family === \"IPv4\" && !device.internal) {\n addresses.push(device.address);\n }\n }\n }\n\n return addresses.join(\" \");\n}\n\n/**\n * Gets geographic city based on public IP\n * @param context - Info context with IP geolocation data\n * @returns City name or empty string\n * @example \"San Francisco\", \"New York\", \"London\"\n */\nexport async function city(context: InfoContext): Promise<string> {\n const cached = getCachedValue(context.cache, \"city\");\n if (cached !== null) return cached;\n\n if (!context.ipInfo || !context.ipInfo.city) {\n setCachedValue(context.cache, \"city\", \"\");\n return \"\";\n }\n const city = context.ipInfo.city;\n setCachedValue(context.cache, \"city\", city);\n return city;\n}\n\n/**\n * Gets reverse DNS hostname with HTTP prefix\n * @param context - Info context with IP info\n * @returns Domain with http:// prefix or empty string\n * @example \"http://example.com\", \"http://host-203-0-113-42.example.net\"\n */\nexport async function domain(context: InfoContext): Promise<string> {\n const cached = getCachedValue(context.cache, \"domain\");\n if (cached !== null) return cached;\n\n if (!context.ipInfo || !context.ipInfo.hostname) {\n setCachedValue(context.cache, \"domain\", \"\");\n return \"\";\n }\n const domain = `http://${context.ipInfo.hostname}`;\n setCachedValue(context.cache, \"domain\", domain);\n return domain;\n}\n\n/**\n * Gets Internet Service Provider name\n * Strips AS number prefix from organization string\n * @param context - Info context with IP info\n * @returns ISP name or empty string\n * @example \"Comcast Cable\", \"Verizon Business\", \"Cloudflare Inc\"\n */\nexport async function isp(context: InfoContext): Promise<string> {\n const cached = getCachedValue(context.cache, \"isp\");\n if (cached !== null) return cached;\n\n if (!context.ipInfo || !context.ipInfo.org) {\n setCachedValue(context.cache, \"isp\", \"\");\n return \"\";\n }\n const isp = context.ipInfo.org.split(\" \").slice(1).join(\" \");\n setCachedValue(context.cache, \"isp\", isp);\n return isp;\n}\n\n/**\n * Gets active network interface names\n * Lists non-loopback interfaces with IPv4 addresses (Linux only)\n * @param context - Info context with cache\n * @returns Space-separated interface names or empty string\n * @example \"eth0 wlan0\", \"enp0s3\"\n */\nexport function network_interfaces(context: InfoContext): string {\n const cached = getCachedValue(context.cache, \"network_interfaces\");\n if (cached !== null) return cached;\n\n if (!IS_LINUX) {\n setCachedValue(context.cache, \"network_interfaces\", \"\");\n return \"\";\n }\n\n try {\n const interfaces = os.networkInterfaces();\n const activeInterfaces: string[] = [];\n\n for (const [name, addrs] of Object.entries(interfaces)) {\n if (name !== \"lo\") {\n const ipv4Addr = addrs?.find(\n (addr) => addr.family === \"IPv4\" && !addr.internal\n );\n if (ipv4Addr) {\n activeInterfaces.push(name);\n }\n }\n }\n\n const result = activeInterfaces.join(\" \");\n setCachedValue(context.cache, \"network_interfaces\", result);\n return result;\n } catch {}\n\n setCachedValue(context.cache, \"network_interfaces\", \"\");\n return \"\";\n}\n/**\n * Gets open TCP ports with service names\n * Uses lsof to find listening TCP ports (Linux only)\n * @param context - Info context with cache\n * @returns Space-separated port+process pairs or empty string\n * @example \"80http 443http 22ssh\", \"3000node 5432post\"\n */\nexport function ports(context: InfoContext): string {\n const cached = getCachedValue(context.cache, \"ports\");\n if (cached !== null) return cached;\n\n if (IS_LINUX) {\n try {\n const lsof = execCommand(\"lsof -nP -iTCP -sTCP:LISTEN\");\n const lines = lsof.split(\"\\n\").slice(1);\n const ports = new Set<string>();\n\n lines.forEach((line) => {\n const parts = line.split(/\\s+/);\n if (parts.length >= 9) {\n const address = parts[8];\n const portMatch = address.match(/:(\\d+)$/);\n if (portMatch) {\n const port = portMatch[1];\n const process = parts[0].substring(0, 4);\n ports.add(`${port}${process}`);\n }\n }\n });\n\n const result = Array.from(ports).join(\" \");\n setCachedValue(context.cache, \"ports\", result);\n return result;\n } catch {}\n }\n\n setCachedValue(context.cache, \"ports\", \"\");\n return \"\";\n}\n","/**\n * System status and health information functions\n * @module info/system-status\n */\n\nimport fs from \"fs\";\nimport os from \"os\";\nimport type { InfoContext } from \"../types/internal-types\";\nimport { IS_LINUX } from \"../utils/platform\";\nimport { execCommand, commandExists } from \"../utils/command\";\nimport { getCachedValue, setCachedValue } from \"../cache/cache\";\n\n/**\n * Gets system load averages\n * Reads 1, 5, and 15 minute load averages from /proc/loadavg (Linux only)\n * @returns Space-separated load averages (1m 5m 15m) or empty string\n * @example \"0.52 0.58 0.59\", \"2.10 1.95 1.88\"\n */\nexport function load_average(context: InfoContext): string {\n if (!IS_LINUX) return \"\";\n\n try {\n const loadavg = fs.readFileSync(\"/proc/loadavg\", \"utf8\");\n const loads = loadavg.split(\" \").slice(0, 3);\n return loads.join(\" \");\n } catch {}\n return \"\";\n}\n\n/**\n * Gets battery charge level and charging status\n * Reads from /sys/class/power_supply/BAT0 (Linux laptops only)\n * @param context - Info context with cache\n * @returns Battery percentage with optional + for charging, or empty string\n * @example \"85%\", \"42%+\", \"100%\"\n */\nexport function battery(context: InfoContext): string {\n const cached = getCachedValue(context.cache, \"battery\");\n if (cached !== null) return cached;\n\n if (!IS_LINUX) {\n setCachedValue(context.cache, \"battery\", \"\");\n return \"\";\n }\n\n try {\n const batteryPath = \"/sys/class/power_supply/BAT0\";\n const capacityPath = `${batteryPath}/capacity`;\n const statusPath = `${batteryPath}/status`;\n\n if (fs.existsSync(capacityPath)) {\n const capacity = fs.readFileSync(capacityPath, \"utf8\").trim();\n const status = fs.existsSync(statusPath)\n ? fs.readFileSync(statusPath, \"utf8\").trim()\n : \"Unknown\";\n\n const batteryPercent = parseInt(capacity);\n const isCharging = status === \"Charging\";\n const result = `${batteryPercent}%${isCharging ? \"+\" : \"\"}`;\n setCachedValue(context.cache, \"battery\", result);\n return result;\n }\n } catch {}\n\n setCachedValue(context.cache, \"battery\", \"\");\n return \"\";\n}\n\n/**\n * Gets system temperature in Celsius\n * Reads from thermal zone or hwmon sensors (Linux only)\n * @param context - Info context with cache\n * @returns Temperature with °C suffix or empty string\n * @example \"45°C\", \"62°C\"\n */\nexport function temperature(context: InfoContext): string {\n const cached = getCachedValue(context.cache, \"temperature\");\n if (cached !== null) return cached;\n\n if (!IS_LINUX) {\n setCachedValue(context.cache, \"temperature\", \"\");\n return \"\";\n }\n\n try {\n const tempSources = [\n \"/sys/class/thermal/thermal_zone0/temp\",\n \"/sys/class/hwmon/hwmon0/temp1_input\",\n \"/sys/class/hwmon/hwmon1/temp1_input\",\n ];\n\n for (const source of tempSources) {\n if (fs.existsSync(source)) {\n const temp = fs.readFileSync(source, \"utf8\").trim();\n const tempC = Math.round(parseInt(temp) / 1000);\n\n if (tempC > 0 && tempC < 150) {\n const result = `${tempC}°C`;\n setCachedValue(context.cache, \"temperature\", result);\n return result;\n }\n }\n }\n } catch {}\n\n setCachedValue(context.cache, \"temperature\", \"\");\n return \"\";\n}\n\n/**\n * Gets count of running system services\n * Uses systemctl or service command (Linux only)\n * @param context - Info context with cache\n * @returns Service count with \"services\" suffix or empty string\n * @example \"125 services\", \"89 services\"\n */\nexport function services_running(context: InfoContext): string {\n const cached = getCachedValue(context.cache, \"services_running\");\n if (cached !== null) return cached;\n\n if (!IS_LINUX) {\n setCachedValue(context.cache, \"services_running\", \"\");\n return \"\";\n }\n\n try {\n let serviceCount = 0;\n\n if (commandExists(\"systemctl\")) {\n const services = execCommand(\n \"systemctl list-units --type=service --state=running --no-pager\"\n );\n serviceCount = services\n .split(\"\\n\")\n .filter((line) => line.includes(\".service\")).length;\n } else if (commandExists(\"service\")) {\n const services = execCommand(\"service --status-all\");\n serviceCount = services\n .split(\"\\n\")\n .filter((line) => line.includes(\"+\")).length;\n }\n\n if (serviceCount > 0) {\n const result = `${serviceCount} services`;\n setCachedValue(context.cache, \"services_running\", result);\n return result;\n }\n } catch {}\n\n setCachedValue(context.cache, \"services_running\", \"\");\n return \"\";\n}\n","/**\n * Software and package-related system information functions\n * @module info/software\n */\n\nimport process from \"process\";\nimport type { InfoContext } from \"../types/internal-types\";\nimport { IS_LINUX } from \"../utils/platform\";\nimport { execCommand, commandExists } from \"../utils/command\";\nimport { getCachedValue, setCachedValue } from \"../cache/cache\";\n\n/**\n * Gets the current shell name\n * Uses ps command to find parent process shell (Linux/Unix only)\n * @returns Shell name or empty string on Windows\n * @example \"bash\", \"zsh\", \"fish\", \"nu\"\n */\nexport function shell(context: InfoContext): string {\n const cached = getCachedValue(context.cache, \"shell\");\n if (cached !== null) return cached;\n\n if (IS_LINUX) {\n try {\n const ppid = process.ppid;\n const shellName = execCommand(`ps -p ${ppid} -o comm=`).split(\"/\").pop();\n if (shellName) {\n setCachedValue(context.cache, \"shell\", shellName);\n return shellName;\n }\n } catch {}\n }\n\n setCachedValue(context.cache, \"shell\", \"\");\n return \"\";\n}\n\n/**\n * Gets available package managers and development tools\n * Checks for package managers (apt, yum, npm, etc.) and editors (nvim, hx)\n * @param context - Info context with cache\n * @returns Space-separated list of available commands\n * @example \"apt npm docker nvim\", \"yay pacman bun hx\"\n */\nexport function packages(context: InfoContext): string {\n const cached = getCachedValue(context.cache, \"packages\");\n if (cached !== null) return cached;\n\n const commands = [\n \"apt\",\n \"npm\",\n \"uv\",\n \"docker\",\n \"hx\",\n \"nvim\",\n \"bun\",\n \"yay\",\n \"pacman\",\n \"yum\",\n \"dnf\",\n \"zypper\",\n \"emerge\",\n \"apk\",\n \"snap\",\n \"flatpak\",\n ];\n const available = commands.filter((cmd) => commandExists(cmd));\n\n const result = available.join(\" \");\n setCachedValue(context.cache, \"packages\", result);\n return result;\n}\n\n/**\n * Gets versions of common software tools\n * @param context - Info context with cache\n * @returns Formatted string of tool versions\n * @example \"node:20.1.0 git:2.34.1\"\n */\nexport function common_versions(context: InfoContext): string {\n const cached = getCachedValue(context.cache, \"common_versions\");\n if (cached !== null) return cached;\n\n const tools = [\n {\n cmd: \"node\",\n args: \"--version\",\n clean: (v: string) => v.replace(/^v/, \"\"),\n },\n {\n cmd: \"git\",\n args: \"--version\",\n clean: (v: string) => v.replace(\"git version \", \"\"),\n },\n {\n cmd: \"docker\",\n args: \"--version\",\n clean: (v: string) => v.replace(/Docker version ([^,]+),.*/, \"$1\"),\n },\n {\n cmd: \"python3\",\n args: \"--version\",\n clean: (v: string) => v.replace(\"Python \", \"\"),\n },\n {\n cmd: \"go\",\n args: \"version\",\n clean: (v: string) => v.replace(\"go version go\", \"\").split(\" \")[0],\n },\n {\n cmd: \"rustc\",\n args: \"--version\",\n clean: (v: string) => v.replace(\"rustc \", \"\").split(\" \")[0],\n },\n ];\n\n const versions: string[] = [];\n\n for (const tool of tools) {\n if (commandExists(tool.cmd)) {\n try {\n const output = execCommand(`${tool.cmd} ${tool.args}`);\n const version = tool.clean(output).trim();\n if (version) {\n versions.push(`${tool.cmd}:${version}`);\n }\n } catch {}\n }\n }\n\n const result = versions.join(\" \");\n setCachedValue(context.cache, \"common_versions\", result);\n return result;\n}\n/**\n * Gets running Docker container names\n * Lists active Docker containers with their names\n * @param context - Info context with cache\n * @returns Space-separated container names or empty string\n * @example \"nginx redis postgres\", \"web-app db-server\"\n */\nexport function containers(context: InfoContext): string {\n const cached = getCachedValue(context.cache, \"containers\");\n if (cached !== null) return cached;\n\n if (!commandExists(\"docker\")) {\n setCachedValue(context.cache, \"containers\", \"\");\n return \"\";\n }\n\n try {\n const containerCount = execCommand(\"docker ps -q\")\n .split(\"\\n\")\n .filter((line) => line.trim()).length;\n if (containerCount === 0) {\n setCachedValue(context.cache, \"containers\", \"\");\n return \"\";\n }\n\n const containers = execCommand(\n 'docker ps --format \"{{.Names}}\\t{{.Ports}}\"'\n );\n const lines = containers.split(\"\\n\").filter((line) => line.trim());\n\n const containerInfo: string[] = [];\n\n lines.forEach((line) => {\n const [name, ports] = line.split(\"\\t\");\n if (name) {\n containerInfo.push(name);\n\n if (ports) {\n const portMatches = ports.match(/->(\\d+(-\\d+)?)\\//g);\n if (portMatches) {\n const uniquePorts = [\n ...new Set(\n portMatches.map((p) => p.replace(/->\\d+(-\\d+)?\\//, \"\"))\n ),\n ];\n containerInfo.push(...uniquePorts);\n }\n }\n }\n });\n\n const result = containerInfo.join(\" \");\n setCachedValue(context.cache, \"containers\", result);\n return result;\n } catch {}\n\n setCachedValue(context.cache, \"containers\", \"\");\n return \"\";\n}\n","/**\n * @fileoverview System Information API\n *\n * A comprehensive cross-platform system information collection API.\n * Provides clean JSON data without formatting, suitable for programmatic use.\n *\n * @module system-info-api\n * @author vtempest\n * @license rights.institute/prosper\n */\n\nimport os from \"os\";\nimport fs from \"fs\";\nimport https from \"https\";\nimport path from \"path\";\nimport type { SystemInfo, SystemInfoOptions } from \"./systeminfo-types\";\nimport { CACHE_FILE } from \"./info/settings\"; // Using CACHE_FILE from settings to ensure consistency\n\n// Import info functions from modules\nimport { user, hostname, os_info, kernel, device } from \"./info/platform\";\nimport { cpu, gpu, screen_resolution, bench, cpu_bench_info, gpu_bench, gpu_bench_info } from \"./info/hardware\";\nimport {\n disk_used,\n ram_used,\n memory_available,\n swap_used,\n mount_points,\n} from \"./info/memory\";\nimport { top_process, uptime, users_logged_in } from \"./info/process\";\nimport {\n ip,\n iplocal,\n city,\n domain,\n isp,\n network_interfaces,\n ports,\n} from \"./info/network\";\nimport {\n services_running,\n temperature,\n battery,\n load_average,\n} from \"./info/system-status\";\nimport { shell, packages, containers } from \"./info/software\";\n\n/**\n * Cache duration configuration for different system information types\n * Values are in milliseconds\n */\nconst CACHE_DURATION = {\n ip: 5 * 60 * 1000,\n cpu: 24 * 60 * 60 * 1000,\n gpu: 24 * 60 * 60 * 1000,\n bench: 24 * 60 * 60 * 1000,\n cpu_bench_info: 24 * 60 * 60 * 1000,\n gpu_bench: 24 * 60 * 60 * 1000,\n gpu_bench_info: 24 * 60 * 60 * 1000,\n os: 24 * 60 * 60 * 1000,\n device: 24 * 60 * 60 * 1000,\n kernel: 60 * 60 * 1000,\n pacman: 10 * 60 * 1000,\n ports: 5 * 60 * 1000,\n containers: 5 * 60 * 1000,\n top_process: 5 * 1000,\n disk_used: 60 * 1000,\n ram_used: 10 * 1000,\n services_running: 5 * 60 * 1000,\n temperature: 30 * 1000,\n battery: 60 * 1000,\n network_interfaces: 5 * 60 * 1000,\n mount_points: 10 * 60 * 1000,\n};\n\n/**\n * Platform detection constants\n */\nconst IS_WINDOWS = os.platform() === \"win32\";\nconst IS_MAC = os.platform() === \"darwin\";\nconst IS_LINUX = os.platform() === \"linux\";\n\n/**\n * Default IPInfo.io API token for geolocation\n */\nconst DEFAULT_IPINFO_TOKEN = \"da2d6cc4baa5d1\";\n\n/**\n * Default network request timeout in milliseconds\n */\nconst DEFAULT_NETWORK_TIMEOUT = 5000;\n\n/**\n * Represents a cached value with timestamp\n */\ninterface CacheEntry {\n value: any;\n timestamp: number;\n}\n\n/**\n * Cache storage structure\n */\ninterface Cache {\n [key: string]: CacheEntry;\n}\n\n/**\n * IP information from ipinfo.io API\n */\ninterface IPInfo {\n ip?: string;\n city?: string;\n hostname?: string;\n org?: string;\n}\n\n/**\n * Context object passed to info collection functions\n */\ninterface InfoContext {\n cache: Cache;\n ipInfo?: IPInfo;\n}\n\n/**\n * Loads cache from disk\n */\nfunction loadCache(): Cache {\n try {\n if (fs.existsSync(CACHE_FILE)) {\n return JSON.parse(fs.readFileSync(CACHE_FILE, \"utf8\"));\n }\n } catch (error) {\n // Corrupted cache - return empty object\n }\n return {};\n}\n\n/**\n * Saves cache to disk\n */\nfunction saveCache(cache: Cache): void {\n try {\n const cacheDir = path.dirname(CACHE_FILE);\n if (!fs.existsSync(cacheDir)) {\n fs.mkdirSync(cacheDir, { recursive: true });\n }\n fs.writeFileSync(CACHE_FILE, JSON.stringify(cache, null, 2));\n } catch (error) {\n // Silently fail if can't write cache\n }\n}\n\n/**\n * Fetches IP geolocation information from ipinfo.io API\n */\nasync function fetchIPInfo(\n token: string = DEFAULT_IPINFO_TOKEN,\n timeout: number = DEFAULT_NETWORK_TIMEOUT\n): Promise<IPInfo> {\n return new Promise((resolve) => {\n const url = `https://ipinfo.io/json${token ? `?token=${token}` : \"\"}`;\n\n const req = https.get(url, (res) => {\n let data = \"\";\n res.on(\"data\", (chunk) => (data += chunk));\n res.on(\"end\", () => {\n try {\n resolve(JSON.parse(data));\n } catch {\n resolve({});\n }\n });\n });\n\n req.on(\"error\", () => resolve({}));\n req.setTimeout(timeout, () => {\n req.destroy();\n resolve({});\n });\n });\n}\n\n/**\n * System information collection functions map\n */\nexport const infoFunctions = {\n user,\n hostname,\n ip,\n iplocal,\n city,\n domain,\n isp,\n os: os_info, // Mapped from os_info\n cpu,\n gpu,\n bench,\n cpu_bench_info,\n gpu_bench,\n gpu_bench_info,\n disk_used,\n ram_used,\n top_process,\n uptime,\n device,\n kernel,\n shell,\n pacman: packages, // Mapped from packages\n ports,\n containers,\n memory_available,\n swap_used,\n load_average,\n users_logged_in,\n network_interfaces,\n mount_points,\n services_running,\n temperature,\n battery,\n screen_resolution,\n};\n\n/**\n * Get all system information as a clean JSON object\n */\nexport async function getSystemInfo(\n options: SystemInfoOptions = {}\n): Promise<SystemInfo> {\n const cache = loadCache();\n const context: InfoContext = { cache };\n\n // Check if we need IP info\n // Some functions need IP info, so we fetch it once if needed by any function\n // For now we always try to fetch it if not cached, as ip/city/etc depend on it\n // Optimization: check if we actually need to run those functions based on options if provided\n // But current implementation fetches it always if missing from cache\n\n const cachedIPInfo = cache[\"ipInfo\"]?.value;\n if (cachedIPInfo) {\n context.ipInfo = cachedIPInfo;\n } else {\n context.ipInfo = await fetchIPInfo();\n // Cache IP info itself\n cache[\"ipInfo\"] = {\n value: context.ipInfo,\n timestamp: Date.now(),\n };\n }\n\n // Collect all system information\n const info: Partial<SystemInfo> = {\n timestamp: new Date().toISOString(),\n platform: IS_WINDOWS\n ? \"windows\"\n : IS_MAC\n ? \"macos\"\n : IS_LINUX\n ? \"linux\"\n : \"unknown\",\n };\n\n // Call all info functions\n for (const [key, fn] of Object.entries(infoFunctions)) {\n try {\n // most functions are sync but some are async (ip related)\n const value = await fn(context);\n info[key as keyof SystemInfo] = value as any;\n } catch (error) {\n info[key as keyof SystemInfo] = \"\" as any;\n }\n }\n\n saveCache(cache);\n\n return info as SystemInfo;\n}\n\nexport { loadCache, saveCache };\n"],"names":["process$1","SETTINGS_FILE","path","os","CACHE_FILE","colors","DEFAULT_SETTINGS","process","loadSettings","fs","settings","saveSettings","configDir","IS_WINDOWS","IS_MAC","IS_LINUX","execCommand","command","options","cmd","execSync","commandExists","CACHE_DURATION","isCacheValid","cacheEntry","key","age","maxAge","getCachedValue","cache","setCachedValue","value","user","hostname","os_info","context","cached","platform","release","osName","match","osRelease","nameMatch","versionMatch","kernel","device","ps","dmiPath","__vite_glob_3_0","__vite_glob_3_1","__vite_glob_3_2","__vite_glob_3_3","__vite_glob_3_4","__vite_glob_3_5","__vite_glob_3_6","isArray","getTag","baseToString","result","toString","isString","isNumber","isBoolean","isObjectLike","isObject","isDefined","isBlank","INCORRECT_INDEX_TYPE","INVALID_DOC_INDEX","LOGICAL_SEARCH_INVALID_QUERY_FOR_KEY","PATTERN_LENGTH_TOO_LARGE","max","MISSING_KEY_PROPERTY","name","INVALID_KEY_WEIGHT_VALUE","FUSE_MATCH_TOKEN_SEARCH_UNSUPPORTED","hasOwn","KeyStore","keys","totalWeight","obj","createKey","keyId","id","src","weight","getFn","createKeyPath","createKeyId","get","list","arr","deepGet","index","arrayIndex","i","len","MatchOptions","BasicOptions","a","b","FuzzyOptions","AdvancedOptions","Config","isWordSeparator","code","norm","mantissa","m","numTokens","inWord","FuseIndex","fieldNormWeight","docs","records","idx","recordCount","record","doc","docIndex","indices","toRemove","v","r","sorted","lo","hi","mid","item","keyIndex","keyLen","subRecords","subRecord","text","createIndex","myIndex","parseIndex","data","convertMaskToIndices","matchmask","minMatchCharLength","start","end","search","pattern","patternAlphabet","location","distance","threshold","findAllMatches","includeMatches","ignoreLocation","patternLen","textLen","expectedLocation","currentThreshold","bestLocation","calcScore","errors","currentLocation","accuracy","proximity","computeMatches","matchMask","score","lastBitArr","finalScore","bestErrors","binMax","mask","binMin","binMid","finish","bitArr","j","charMatch","matchEnd","k","createPatternAlphabet","char","mergeIndices","merged","last","curr","NON_DECOMPOSABLE_MAP","NON_DECOMPOSABLE_RE","stripDiacritics","str","ch","BitapSearch","isCaseSensitive","ignoreDiacritics","addChunk","startIndex","remainder","allIndices","totalScore","hasMatches","alphabet","isMatch","MULTI_MATCH_TYPES","isInverse","type","matchers","bitap","matchersLen","ESCAPED_PIPE","OR_TOKEN","tokenize","tokens","next","getMatch","exp","matches","parseQuery","query","results","queryItem","found","def","token","ExtendedSearch","_","numMatches","hasInverse","qLen","searchers","pLen","matcher","registeredSearchers","register","args","createSearcher","searcherClass","LogicalOperator","KeyType","isExpression","isPath","isLeaf","convertToExplicit","parse","auto","isQueryPath","node","computeScoreSingle","ignoreFieldNorm","computeScore","MaxHeap","limit","comparator","heap","parent","tmp","largest","left","right","formatMatches","format","includeScore","DEFAULT_TOKEN","warned","warnNonGlobal","regex","resolveTokenize","validated","createAnalyzer","tokenizeFn","TokenSearch","queryTerms","df","fieldCount","term","docFreq","idf","weightedScore","maxPossibleScore","matchedCount","matchedMask","matchedTerms","normalized","searchResult","addField","docIdx","analyzer","distinctTerms","perDocTerms","ingestRecord","keyCount","fields","keyIdx","sub","buildInvertedIndex","addToInvertedIndex","removeFromInvertedIndex","hits","removeAndShiftInvertedIndex","removedIndices","shift","oldIdx","firstRemoved","shiftedDocFieldCount","oldKey","count","shiftedDocTermFieldHits","terms","Fuse","searcher","predicate","indicesToRemove","shouldSort","sortFn","useHeap","stable","requireAllTokens","expression","evaluate","children","operator","res","child","resultMap","expResults","anyKeyFailed","keyMatches","termCount","coverage","t","plugins","plugin","entry_default","cpu","cpuName","modelMatch","cpuInfo","hardwareMatch","cpus","gpu","gpus","nameMatches","line","lspci","classPattern","gpuPattern","allBrackets","screen_resolution","resolutionMatch","bench","benchmarkPath","benchmarkFile","url","__vite_glob_0_0","__vite_glob_0_1","__vite_glob_0_2","__vite_glob_0_3","__vite_glob_0_4","__vite_glob_0_5","__vite_glob_0_6","benchmarkData","cpuList","rank","cpu_bench_info","__vite_glob_1_0","__vite_glob_1_1","__vite_glob_1_2","__vite_glob_1_3","__vite_glob_1_4","__vite_glob_1_5","__vite_glob_1_6","arch","gpu_bench","gpuName","__vite_glob_2_0","__vite_glob_2_1","__vite_glob_2_2","__vite_glob_2_3","__vite_glob_2_4","__vite_glob_2_5","__vite_glob_2_6","gpuList","gpu_bench_info","vendor","upperName","ram_used","meminfo","totalMatch","freeMatch","totalMB","freeMB","usedMB","totalGB","totalMem","freeMem","usedMem","memory_available","availableMatch","swap_used","swapTotalMatch","swapFreeMatch","swapTotal","swapFree","swapUsed","swapUsedPercent","swapUsedMB","disk_used","diskUsage","lines","parts","percentIndex","part","rootMatch","mount_points","mountPoints","mountPoint","usage","top_process","topProcess","uptime","uptimeSeconds","days","hours","minutes","users_logged_in","users","ip","iplocal","wlanMatch","ipAddr","addresses","interfaces","city","domain","isp","network_interfaces","activeInterfaces","addrs","addr","ports","portMatch","port","load_average","battery","batteryPath","capacityPath","statusPath","capacity","status","temperature","tempSources","source","temp","tempC","services_running","serviceCount","shell","ppid","shellName","packages","containers","containerInfo","portMatches","uniquePorts","p","DEFAULT_IPINFO_TOKEN","DEFAULT_NETWORK_TIMEOUT","loadCache","saveCache","cacheDir","fetchIPInfo","timeout","resolve","req","https","chunk","infoFunctions","getSystemInfo","cachedIPInfo","info","fn"],"mappings":"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","x_google_ignoreList":[14]}
|