@webneat/codewiki 0.0.2 → 0.0.3
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/bin.cjs.map +1 -0
- package/dist/bin.js.map +1 -0
- package/dist/{cli/index.cjs → cli.cjs} +1 -1
- package/dist/cli.cjs.map +1 -0
- package/dist/{cli/index.js → cli.js} +1 -1
- package/dist/cli.js.map +1 -0
- package/package.json +6 -6
- package/dist/cli/bin.cjs.map +0 -1
- package/dist/cli/bin.js.map +0 -1
- package/dist/cli/index.cjs.map +0 -1
- package/dist/cli/index.js.map +0 -1
- /package/dist/{cli/bin.cjs → bin.cjs} +0 -0
- /package/dist/{cli/bin.d.cts → bin.d.cts} +0 -0
- /package/dist/{cli/bin.d.ts → bin.d.ts} +0 -0
- /package/dist/{cli/bin.js → bin.js} +0 -0
- /package/dist/{cli/index.d.cts → cli.d.cts} +0 -0
- /package/dist/{cli/index.d.ts → cli.d.ts} +0 -0
package/dist/bin.cjs.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/env.ts","../src/internals/context.ts","../../errors/src/index.ts","../src/internals/errors.ts","../src/db/migrate.ts","../src/db/schema.ts","../src/db/configs.ts","../src/db/common.ts","../src/db/files.ts","../src/internals/utils.ts","../src/db/defaults.ts","../src/db/directories.ts","../src/db/imports.ts","../src/db/symbols.ts","../src/db/external_dependencies.ts","../src/db/external_imports.ts","../src/db/symbol_internal_links.ts","../src/db/symbol_external_links.ts","../src/cli/index.ts","../src/cli/commands/update.ts","../src/cli/commands/_common.ts","../src/cli/schema.ts","../src/update/track_changes.ts","../src/update/events.ts","../src/update/sync_external_dependencies.ts","../src/update/scan_files/scan_files.ts","../src/update/scan_files/imports.ts","../src/update/scan_files/common.ts","../src/update/scan_files/external_imports.ts","../src/update/scan_files/types.ts","../src/update/scan_files/functions.ts","../src/update/scan_files/variables.ts","../src/update/scan_files/classes.ts","../src/update/link_imports.ts","../src/update/link_symbols.ts","../src/update/index.ts","../src/counts.ts","../src/files.ts","../src/symbols.ts","../src/directories.ts","../src/dependencies.ts","../src/index.ts","../src/cli/utils.ts","../src/cli/commands/status.ts","../src/cli/commands/describe.ts","../src/cli/commands/files/index.ts","../src/cli/commands/files/get.ts","../src/cli/commands/files/search.ts","../src/cli/commands/files/set-description.ts","../src/cli/commands/files/imported-by-file.ts","../src/cli/commands/files/importing-file.ts","../src/cli/commands/files/importing-dependency.ts","../src/cli/commands/symbols/index.ts","../src/cli/commands/symbols/get.ts","../src/cli/commands/symbols/search.ts","../src/cli/commands/symbols/set-description.ts","../src/cli/commands/symbols/referencing-symbol.ts","../src/cli/commands/symbols/referenced-by-symbol.ts","../src/cli/commands/symbols/using-dependency.ts","../src/cli/commands/directories/index.ts","../src/cli/commands/directories/get.ts","../src/cli/commands/directories/search.ts","../src/cli/commands/directories/set-description.ts","../src/cli/commands/directories/children.ts","../src/cli/commands/directories/files.ts","../src/cli/commands/dependencies/index.ts","../src/cli/commands/dependencies/get.ts","../src/cli/commands/dependencies/search.ts","../src/cli/commands/dependencies/set-description.ts","../src/cli/commands/dependencies/used-by-file.ts","../src/cli/commands/dependencies/used-by-symbol.ts","../src/cli/commands/index.ts","../src/cli/bin.ts"],"sourcesContent":["import { existsSync } from 'fs'\nimport { read_file } from '@src/internals'\n\n/**\n * Environment abstraction for CLI commands\n * Plain object (not mockable) so vitest can spy on functions\n */\nexport const env = {\n read_file,\n file_exists: (path: string) => existsSync(path),\n argv: () => process.argv,\n log: (...args: any[]) => console.log(...args),\n error: (...args: any[]) => console.error(...args),\n exit: (code: number) => process.exit(code),\n}\n","import ts from 'typescript'\nimport { fileURLToPath } from 'url'\nimport Database from 'better-sqlite3'\nimport { readFile } from 'fs/promises'\nimport path, { dirname, join } from 'path'\nimport { BetterSQLite3Database, drizzle } from 'drizzle-orm/better-sqlite3'\nimport { err } from './errors'\nimport { schema, migrate, configs as configs_db } from '../db'\nimport type { Config, Context, ContextDependency } from '../types'\n\nasync function create_context(sqlite: Database.Database, db: BetterSQLite3Database<typeof schema>, config: Config) {\n const project_path = path.resolve(config.project_path)\n // From src/internals/context.ts: ../../migrations\n // From dist/index.js: ../migrations\n const currentDir = dirname(fileURLToPath(import.meta.url))\n const migrations_path = currentDir.includes('/dist') \n ? join(currentDir, '../migrations')\n : join(currentDir, '../../migrations')\n const tsconfig_path = join(project_path, 'tsconfig.json')\n if (!ts.sys.fileExists(tsconfig_path)) {\n throw err.new('file_not_found', { path: tsconfig_path })\n }\n const tsconfig = ts.parseJsonConfigFileContent(ts.readConfigFile(tsconfig_path, ts.sys.readFile).config, ts.sys, project_path)\n const program = ts.createProgram({ rootNames: tsconfig.fileNames, options: tsconfig.options })\n const package_json_path = config.package_json_path ?? path.join(project_path, 'package.json')\n const node_modules_paths = config.node_modules_paths ?? [path.join(project_path, 'node_modules')]\n const dependencies = await get_dependencies(package_json_path, node_modules_paths)\n const ctx = { db, sqlite, migrations_path, project_path, program, dependencies }\n await migrate(ctx)\n err.or_throw(\n configs_db.upsert(ctx, {\n project_path,\n description: config.description ?? null,\n package_json_path: config.package_json_path ?? null,\n node_modules_paths: config.node_modules_paths ? JSON.stringify(config.node_modules_paths) : null,\n })\n )\n return ctx\n}\n\nexport async function context_from_config(config: Config): Promise<Context> {\n const sqlite = new Database(config.db_path)\n sqlite.pragma('foreign_keys = ON')\n const db = drizzle(sqlite, { schema })\n return create_context(sqlite, db, config)\n}\n\nexport async function context_from_db(db_path: string): Promise<Context> {\n const sqlite = new Database(db_path)\n sqlite.pragma('foreign_keys = ON')\n const db = drizzle(sqlite, { schema })\n\n const temp_ctx = { db, sqlite } as unknown as Context\n const stored = err.or_throw(configs_db.get(temp_ctx))\n\n if (!stored) {\n sqlite.close()\n throw err.new('config_not_found', { db_path })\n }\n\n let node_modules_paths: string[] | undefined\n if (stored.node_modules_paths) {\n try {\n node_modules_paths = JSON.parse(stored.node_modules_paths)\n } catch (parse_error) {\n sqlite.close()\n throw err.new('config_invalid_node_modules_paths', { db_path, reason: parse_error })\n }\n }\n\n return create_context(sqlite, db, {\n db_path,\n project_path: stored.project_path,\n description: stored.description ?? undefined,\n package_json_path: stored.package_json_path ?? undefined,\n node_modules_paths,\n })\n}\n\nasync function get_dependencies(package_json_path: string, node_modules_paths: string[]) {\n const dependencies: Record<string, ContextDependency> = {}\n const package_json = JSON.parse(await readFile(package_json_path, 'utf-8'))\n const packages: Record<string, string> = { ...(package_json.dependencies ?? {}), ...(package_json.devDependencies ?? {}) }\n for (const [name, version] of Object.entries(packages)) {\n dependencies[name] = { name, version, github_repo: await get_github_repo(node_modules_paths, name) }\n }\n return dependencies\n}\n\nasync function get_github_repo(node_modules_paths: string[], package_name: string) {\n for (const node_modules_path of node_modules_paths) {\n try {\n const package_json_path = path.join(node_modules_path, package_name, 'package.json')\n const package_json = JSON.parse(await readFile(package_json_path, 'utf-8'))\n const url = package_json.repository?.url || package_json.repository\n if (typeof url === 'string') {\n let repo = url.split('/').slice(-2).join('/')\n if (repo.endsWith('.git')) repo = repo.slice(0, -4)\n return repo.split(':').pop()\n }\n } catch {}\n }\n return undefined\n}\n","type ErrMessages = Record<string, (x: any) => string>\ntype Fn = (...args: any[]) => any\n\nexport type Err<M extends ErrMessages, K extends keyof M = keyof M> = Error & {\n name: K\n details: Parameters<M[K]>[0]\n}\n\ntype R<F extends Fn> = Exclude<ReturnType<F>, Err<ErrMessages>>\ntype E<F extends Fn> = Extract<ReturnType<F>, Err<ErrMessages>>\n\nexport type ErrClasses<M extends ErrMessages> = {\n [K in keyof M]: new (details: Parameters<M[K]>[0]) => Err<M, K>\n}\n\nexport type Result<T, E> = { success: true; value: T } | { success: false; error: E }\nexport type Catched<T, E> = [T] extends [never] ? E : T extends Promise<infer R> ? Promise<R | E> : T | E\n\nexport interface Errors<M extends Record<string, (x: any) => string>> {\n // types & classes\n Error: Err<M, keyof M>\n classes: ErrClasses<M>\n // create errors\n new: <K extends keyof M>(name: K, details: Parameters<M[K]>[0]) => Err<M, K>\n // check errors\n is: <K extends keyof M>(name: K, value: unknown) => value is Err<M, K>\n any: (value: unknown) => value is Err<M, keyof M>\n // transform errors\n result: <T>(value: T) => Result<Exclude<T, Err<M>>, Extract<T, Err<M>>>\n or: <T>(value: T | Err<M>, defaultValue: T) => T\n or_throw: <T>(value: T | Err<M>) => T\n // catch errors\n catch: <T, E extends Err<M> = Extract<T, Err<M>>>(fn: () => T, catch_fn?: (error: unknown) => E) => Catched<T, E>\n safe: <F extends Fn, E extends Err<M>>(\n fn: F,\n catcher: (error: unknown, ...args: Parameters<F>) => E\n ) => (...args: Parameters<F>) => Catched<ReturnType<F>, E>\n // pipeline\n pipe<F1 extends () => any, F2 extends (x: R<F1>) => any>(fn1: F1, fn2: F2): E<F1> | E<F2> | R<F2>\n pipe<F1 extends () => any, F2 extends (x: R<F1>) => any, F3 extends (x: R<F2>) => any>(\n fn1: F1,\n fn2: F2,\n fn3: F3\n ): E<F1> | E<F2> | E<F3> | R<F3>\n pipe<F1 extends () => any, F2 extends (x: R<F1>) => any, F3 extends (x: R<F2>) => any, F4 extends (x: R<F3>) => any>(\n fn1: F1,\n fn2: F2,\n fn3: F3,\n fn4: F4\n ): E<F1> | E<F2> | E<F3> | E<F4> | R<F4>\n pipe<\n F1 extends () => any,\n F2 extends (x: R<F1>) => any,\n F3 extends (x: R<F2>) => any,\n F4 extends (x: R<F3>) => any,\n F5 extends (x: R<F4>) => any,\n >(\n fn1: F1,\n fn2: F2,\n fn3: F3,\n fn4: F4,\n fn5: F5\n ): E<F1> | E<F2> | E<F3> | E<F4> | E<F5> | R<F5>\n pipe<\n F1 extends () => any,\n F2 extends (x: R<F1>) => any,\n F3 extends (x: R<F2>) => any,\n F4 extends (x: R<F3>) => any,\n F5 extends (x: R<F4>) => any,\n F6 extends (x: R<F5>) => any,\n >(\n fn1: F1,\n fn2: F2,\n fn3: F3,\n fn4: F4,\n fn5: F5,\n fn6: F6\n ): E<F1> | E<F2> | E<F3> | E<F4> | E<F5> | E<F6> | R<F6>\n}\n\nexport function errors<M extends Record<string, (x: any) => string>>(messages: M) {\n const classes = {} as ErrClasses<M>\n for (const name of Object.keys(messages)) {\n classes[name as keyof M] = class extends Error {\n constructor(public details: Parameters<M[typeof name]>[0]) {\n super(messages[name]!(details))\n this.name = name\n }\n }\n }\n\n const any = (value: unknown) => value instanceof Error && value.name in classes\n return {\n any,\n classes,\n new: (name, details) => new classes[name](details),\n is: (name, error) => error instanceof classes[name],\n result: (value) => (any(value) ? { success: false, error: value } : { success: true, value }),\n or: (value, defaultValue) => (any(value) ? defaultValue : value),\n or_throw: (value) => {\n if (any(value)) throw value\n return value\n },\n catch: (fn, catch_fn) => {\n catch_fn ??= (e) => e as any\n try {\n const res = fn()\n if (res instanceof Promise) return res.catch(catch_fn)\n return res\n } catch (e) {\n return catch_fn(e)\n }\n },\n safe: (fn, catcher) => {\n return (...args) => {\n try {\n const res = fn(...args)\n if (res instanceof Promise) return res.catch((e) => catcher(e, ...args))\n return res\n } catch (e) {\n return catcher(e, ...args)\n }\n }\n },\n pipe: (...fns: Fn[]) => {\n let res\n for (const fn of fns) {\n res = fn(res)\n if (any(res)) return res\n }\n return res\n },\n } as Errors<M>\n}\n\nexport default errors\n","import create_errors from '@webneat/errors'\n\nexport const err = create_errors({\n file_outside_project_path: (data: { file_path: string; project_path: string }) =>\n `File \"${data.file_path}\" is outside project path \"${data.project_path}\"`,\n file_not_found: (data: { path: string }) => `File not found: ${data.path}`,\n db_error: (data: { operation: string; args: any[]; reason: any }) => `Database error in ${data.operation}: ${data.reason}`,\n symbol_meta_parse_error: (data: { reason: unknown; symbol_id: number; meta: string | null }) =>\n `Failed to parse symbol metadata for symbol ${data.symbol_id}: ${data.reason}`,\n exported_symbol_not_found: (data: { name: string; file_id: number }) =>\n `Exported symbol \"${data.name}\" not found in file with id ${data.file_id}`,\n module_resolution_failed: (data: { module: string; from: string }) => `Failed to resolve module \"${data.module}\" from \"${data.from}\"`,\n exporter_file_not_found: (data: { path: string; module: string }) => `Exporter file not found at \"${data.path}\" for module \"${data.module}\"`,\n ast_parse_error: (data: { operation: string; reason: any }) => `AST parsing error in ${data.operation}: ${data.reason}`,\n config_not_found: (data: { db_path: string }) => `No config found in database at ${data.db_path}`,\n config_invalid_node_modules_paths: (data: { db_path: string; reason: unknown }) =>\n `Invalid node_modules_paths stored in database ${data.db_path}: ${data.reason}`,\n symbol_missing_text: (data: { symbol_id: number; name: string }) => `Symbol ${data.symbol_id} (${data.name}) has no source text`,\n symbol_node_not_found: (data: { symbol_id: number; name: string; file_path: string }) =>\n `Symbol node not found for ${data.name} in ${data.file_path}`,\n symbol_not_found: (data: { path: string; name: string }) => `Symbol \"${data.name}\" not found in file \"${data.path}\"`,\n describe_dependency_failed: (data: { package: string; name: string; reason: any }) =>\n `Failed to describe ${data.package}#${data.name}: ${data.reason}`,\n // CLI errors\n could_not_read_file: (data: { path: string; reason: any }) => `Could not read file ${data.path}: ${data.reason}`,\n invalid_json: (data: { text: string; reason: any }) => `Invalid JSON: ${data.reason}`,\n invalid_config: (data: { errors: any }) => `Invalid configuration: ${JSON.stringify(data.errors)}`,\n invalid_type: (data: { type: string }) => `Invalid entity type: ${data.type}. Must be one of: dependency, symbol, file, directory`,\n})\n\nexport type Err = typeof err.Error\n","import { readdir, readFile } from 'fs/promises'\nimport { join } from 'path'\nimport { sql } from 'drizzle-orm'\nimport { migrations } from './schema'\nimport type { Context } from '../types'\n\nexport async function migrate(ctx: Context) {\n const [migration_filenames, applied_migration_names] = await Promise.all([get_migration_filenames(ctx), get_applied_migration_names(ctx)])\n for (const filename of migration_filenames) {\n if (applied_migration_names.has(filename)) continue\n await apply_migration(ctx, filename)\n }\n}\n\nasync function get_migration_filenames({ migrations_path }: Context): Promise<Set<string>> {\n const filenames = new Set<string>()\n for (const entry of await readdir(migrations_path, { withFileTypes: true })) {\n if (!entry.isFile() || !entry.name.endsWith('.sql')) continue\n filenames.add(entry.name)\n }\n return filenames\n}\n\nasync function get_applied_migration_names({ db }: Context): Promise<Set<string>> {\n const res = db.get<{ name: string }>(sql`SELECT name FROM sqlite_master WHERE type='table' AND name='migrations'`)\n if (!res) return new Set()\n const applied = await db.select({ name: migrations.name }).from(migrations)\n return new Set(applied.map((x) => x.name))\n}\n\nasync function apply_migration({ sqlite, migrations_path }: Context, filename: string) {\n const file_path = join(migrations_path, filename)\n const queries = await readFile(file_path, 'utf-8')\n sqlite.transaction(() => {\n sqlite.exec(queries)\n sqlite.prepare('INSERT INTO migrations (name) VALUES (?)').run(filename)\n })()\n}\n","import { relations, sql } from 'drizzle-orm'\nimport { sqliteTable, integer, text, index, uniqueIndex } from 'drizzle-orm/sqlite-core'\nimport type {\n DirectoryState,\n FileState,\n ExternalDependencyState,\n ExternalImportState,\n ImportState,\n SymbolState,\n SymbolInternalLinkState,\n} from './types'\n\nconst timestamps = {\n created_at: integer('created_at', { mode: 'timestamp' })\n .default(sql`(unixepoch())`)\n .notNull(),\n updated_at: integer('updated_at', { mode: 'timestamp' })\n .default(sql`(unixepoch())`)\n .notNull(),\n}\n\nexport const migrations = sqliteTable('migrations', {\n id: integer('id').primaryKey({ autoIncrement: true }),\n name: text('name').notNull().unique(),\n created_at: timestamps.created_at,\n})\n\nexport const configs = sqliteTable('configs', {\n id: integer('id').primaryKey({ autoIncrement: false }).notNull().default(1),\n project_path: text('project_path').notNull(),\n description: text('description'),\n package_json_path: text('package_json_path'),\n node_modules_paths: text('node_modules_paths'),\n ...timestamps,\n})\n\nexport const directories = sqliteTable(\n 'directories',\n {\n id: integer('id').primaryKey({ autoIncrement: true }),\n parent_id: integer('parent_id').references((): any => directories.id, { onDelete: 'cascade' }),\n path: text('path').notNull().unique(),\n description: text('description'),\n state: text('state').$type<DirectoryState>().notNull().default('to_describe'),\n error: text('error'),\n ...timestamps,\n },\n (table) => ({\n parent_idx: index('directories_parent_idx').on(table.parent_id),\n path_idx: index('directories_path_idx').on(table.path),\n state_idx: index('directories_state_idx').on(table.state),\n })\n)\n\nexport const files = sqliteTable(\n 'files',\n {\n id: integer('id').primaryKey({ autoIncrement: true }),\n directory_id: integer('directory_id')\n .notNull()\n .references(() => directories.id, { onDelete: 'cascade' }),\n path: text('path').notNull().unique(),\n hash: text('hash'),\n description: text('description'),\n state: text('state').$type<FileState>().notNull().default('to_scan'),\n error: text('error'),\n ...timestamps,\n },\n (table) => ({\n directory_idx: index('files_directory_idx').on(table.directory_id),\n path_idx: index('files_path_idx').on(table.path),\n hash_idx: index('files_hash_idx').on(table.hash),\n state_idx: index('files_state_idx').on(table.state),\n })\n)\n\nexport const external_dependencies = sqliteTable(\n 'external_dependencies',\n {\n id: integer('id').primaryKey({ autoIncrement: true }),\n package: text('package').notNull(),\n subpath: text('subpath'),\n name: text('name'),\n version: text('version'),\n github_repo: text('github_repo'),\n is_builtin: integer('is_builtin', { mode: 'boolean' }).default(false).notNull(),\n description: text('description'),\n state: text('state').$type<ExternalDependencyState>().notNull().default('to_describe'),\n error: text('error'),\n ...timestamps,\n },\n (table) => ({\n state_idx: index('external_dependencies_state_idx').on(table.state),\n package_subpath_name_unique: uniqueIndex('external_dependencies_package_subpath_name_unique').on(table.package, table.subpath, table.name),\n })\n)\n\nexport const external_imports = sqliteTable(\n 'external_imports',\n {\n id: integer('id').primaryKey({ autoIncrement: true }),\n file_id: integer('file_id')\n .notNull()\n .references(() => files.id, { onDelete: 'cascade' }),\n external_dependency_id: integer('external_dependency_id')\n .notNull()\n .references(() => external_dependencies.id, { onDelete: 'cascade' }),\n alias: text('alias').notNull(),\n is_dynamic: integer('is_dynamic', { mode: 'boolean' }).default(false).notNull(),\n ...timestamps,\n },\n (table) => ({\n file_idx: index('external_imports_file_idx').on(table.file_id),\n external_dependency_idx: index('external_imports_external_dependency_idx').on(table.external_dependency_id),\n })\n)\n\nexport const imports = sqliteTable(\n 'imports',\n {\n id: integer('id').primaryKey({ autoIncrement: true }),\n exporter_file_id: integer('exporter_file_id')\n .notNull()\n .references(() => files.id, { onDelete: 'cascade' }),\n importer_file_id: integer('importer_file_id')\n .notNull()\n .references(() => files.id, { onDelete: 'cascade' }),\n symbol_id: integer('symbol_id').references(() => symbols.id, { onDelete: 'set null' }),\n name: text('name').notNull(),\n alias: text('alias').notNull(),\n is_dynamic: integer('is_dynamic', { mode: 'boolean' }).default(false).notNull(),\n state: text('state').$type<ImportState>().notNull().default('to_link'),\n error: text('error'),\n ...timestamps,\n },\n (table) => ({\n exporter_file_idx: index('imports_exporter_file_idx').on(table.exporter_file_id),\n importer_file_idx: index('imports_importer_file_idx').on(table.importer_file_id),\n symbol_idx: index('imports_symbol_idx').on(table.symbol_id),\n state_idx: index('imports_state_idx').on(table.state),\n })\n)\n\nexport const symbols = sqliteTable(\n 'symbols',\n {\n id: integer('id').primaryKey({ autoIncrement: true }),\n file_id: integer('file_id')\n .notNull()\n .references(() => files.id, { onDelete: 'cascade' }),\n type: text('type').notNull(), // 'function', 'class', 'variable', 'type', 'class_method', 'class_property', 'other'\n name: text('name').notNull(),\n text: text('text'), // source code\n meta: text('meta'), // JSON details\n description: text('description'),\n is_exported: integer('is_exported', { mode: 'boolean' }).default(false).notNull(),\n state: text('state').$type<SymbolState>().notNull().default('to_link'),\n error: text('error'),\n ...timestamps,\n },\n (table) => ({\n file_idx: index('symbols_file_idx').on(table.file_id),\n type_idx: index('symbols_type_idx').on(table.type),\n name_idx: index('symbols_name_idx').on(table.name),\n is_exported_idx: index('symbols_is_exported_idx').on(table.is_exported),\n state_idx: index('symbols_state_idx').on(table.state),\n })\n)\n\nexport const symbol_internal_links = sqliteTable(\n 'symbol_internal_links',\n {\n id: integer('id').primaryKey({ autoIncrement: true }),\n from_file_id: integer('from_file_id')\n .notNull()\n .references(() => files.id, { onDelete: 'cascade' }),\n to_file_id: integer('to_file_id')\n .notNull()\n .references(() => files.id, { onDelete: 'cascade' }),\n from_symbol_id: integer('from_symbol_id')\n .notNull()\n .references(() => symbols.id, { onDelete: 'cascade' }),\n to_symbol_id: integer('to_symbol_id')\n .notNull()\n .references(() => symbols.id, { onDelete: 'cascade' }),\n state: text('state').$type<SymbolInternalLinkState>().notNull().default('pending'),\n error: text('error'),\n ...timestamps,\n },\n (table) => ({\n from_file_idx: index('symbol_internal_links_from_file_idx').on(table.from_file_id),\n to_file_idx: index('symbol_internal_links_to_file_idx').on(table.to_file_id),\n from_symbol_idx: index('symbol_internal_links_from_symbol_idx').on(table.from_symbol_id),\n to_symbol_idx: index('symbol_internal_links_to_symbol_idx').on(table.to_symbol_id),\n state_idx: index('symbol_internal_links_state_idx').on(table.state),\n })\n)\n\nexport const symbol_external_links = sqliteTable(\n 'symbol_external_links',\n {\n id: integer('id').primaryKey({ autoIncrement: true }),\n symbol_id: integer('symbol_id')\n .notNull()\n .references(() => symbols.id, { onDelete: 'cascade' }),\n external_import_id: integer('external_import_id')\n .notNull()\n .references(() => external_imports.id, { onDelete: 'cascade' }),\n ...timestamps,\n },\n (table) => ({\n symbol_idx: index('symbol_external_links_symbol_idx').on(table.symbol_id),\n external_import_idx: index('symbol_external_links_external_import_idx').on(table.external_import_id),\n })\n)\n\nexport const directories_relations = relations(directories, ({ one, many }) => ({\n parent: one(directories, {\n fields: [directories.parent_id],\n references: [directories.id],\n relationName: 'subdirectories',\n }),\n subdirectories: many(directories, {\n relationName: 'subdirectories',\n }),\n files: many(files),\n}))\n\nexport const files_relations = relations(files, ({ one, many }) => ({\n directory: one(directories, {\n fields: [files.directory_id],\n references: [directories.id],\n }),\n external_imports: many(external_imports),\n imports_as_exporter: many(imports, {\n relationName: 'imports_as_exporter',\n }),\n imports_as_importer: many(imports, {\n relationName: 'imports_as_importer',\n }),\n symbols: many(symbols),\n internal_links_from: many(symbol_internal_links, {\n relationName: 'file_internal_links_from',\n }),\n internal_links_to: many(symbol_internal_links, {\n relationName: 'file_internal_links_to',\n }),\n}))\n\nexport const external_dependencies_relations = relations(external_dependencies, ({ many }) => ({\n imports: many(external_imports),\n symbol_external_links: many(symbol_external_links),\n}))\n\nexport const external_imports_relations = relations(external_imports, ({ one }) => ({\n file: one(files, {\n fields: [external_imports.file_id],\n references: [files.id],\n }),\n external_dependency: one(external_dependencies, {\n fields: [external_imports.external_dependency_id],\n references: [external_dependencies.id],\n }),\n}))\n\nexport const imports_relations = relations(imports, ({ one }) => ({\n exporter_file: one(files, {\n fields: [imports.exporter_file_id],\n references: [files.id],\n relationName: 'imports_as_exporter',\n }),\n importer_file: one(files, {\n fields: [imports.importer_file_id],\n references: [files.id],\n relationName: 'imports_as_importer',\n }),\n symbol: one(symbols, {\n fields: [imports.symbol_id],\n references: [symbols.id],\n }),\n}))\n\nexport const symbols_relations = relations(symbols, ({ one, many }) => ({\n file: one(files, {\n fields: [symbols.file_id],\n references: [files.id],\n }),\n imports: many(imports),\n internal_links_from: many(symbol_internal_links, {\n relationName: 'internal_links_from',\n }),\n internal_links_to: many(symbol_internal_links, {\n relationName: 'internal_links_to',\n }),\n external_links: many(symbol_external_links),\n}))\n\nexport const symbol_internal_links_relations = relations(symbol_internal_links, ({ one }) => ({\n from_file: one(files, {\n fields: [symbol_internal_links.from_file_id],\n references: [files.id],\n relationName: 'file_internal_links_from',\n }),\n to_file: one(files, {\n fields: [symbol_internal_links.to_file_id],\n references: [files.id],\n relationName: 'file_internal_links_to',\n }),\n from_symbol: one(symbols, {\n fields: [symbol_internal_links.from_symbol_id],\n references: [symbols.id],\n relationName: 'internal_links_from',\n }),\n to_symbol: one(symbols, {\n fields: [symbol_internal_links.to_symbol_id],\n references: [symbols.id],\n relationName: 'internal_links_to',\n }),\n}))\n\nexport const symbol_external_links_relations = relations(symbol_external_links, ({ one }) => ({\n symbol: one(symbols, {\n fields: [symbol_external_links.symbol_id],\n references: [symbols.id],\n }),\n external_import: one(external_imports, {\n fields: [symbol_external_links.external_import_id],\n references: [external_imports.id],\n }),\n}))\n","import { eq, sql } from 'drizzle-orm'\nimport type { Context } from '../types'\nimport { safe_query } from './common'\nimport { configs } from './schema'\nimport type { ConfigRow, NewConfigRow } from './types'\n\nexport const get = safe_query('configs.get', (ctx: Context): ConfigRow | undefined =>\n ctx.db.select().from(configs).where(eq(configs.id, 1)).get()\n)\n\nexport const upsert = safe_query('configs.upsert', (ctx: Context, data: Omit<NewConfigRow, 'id'>) =>\n ctx.db\n .insert(configs)\n .values({ id: 1, ...data })\n .onConflictDoUpdate({\n target: configs.id,\n set: { ...data, updated_at: sql`(unixepoch())` },\n })\n .run()\n)\n","import { eq, like, or, and, asc, desc } from 'drizzle-orm'\nimport { err } from '../internals/errors'\nimport type { FilterConditions, SearchOptions } from './types'\nimport type { SQLiteTableWithColumns } from 'drizzle-orm/sqlite-core'\nimport type { BetterSQLite3Database } from 'drizzle-orm/better-sqlite3'\n\nexport function safe_query<Args extends any[], T>(operation: string, fn: (...args: Args) => T) {\n return err.safe(fn, (reason, ...args) => err.new('db_error', { operation, args: args.slice(1), reason }))\n}\n\nexport function do_search<Table extends SQLiteTableWithColumns<any>, K extends keyof Table['$inferSelect']>(\n db: BetterSQLite3Database<any>,\n table: Table,\n options: Required<SearchOptions<Table['$inferSelect'], K>>\n) {\n if (!options.select.includes('id' as K)) options.select.push('id' as K)\n return db\n .select(fields(table, options.select))\n .from(table)\n .where(conditions(table, options.where))\n .orderBy(order(table, options.order_by))\n .offset(options.offset)\n .limit(options.limit)\n .all()\n}\n\nexport function fields<Table extends SQLiteTableWithColumns<any>, K extends keyof Table['$inferSelect']>(table: Table, fields: K[]) {\n const res = {} as Record<K, Table[K]>\n for (const field of fields) res[field] = table[field]\n return res\n}\n\nfunction conditions<Table extends SQLiteTableWithColumns<any>>(table: Table, filters?: FilterConditions<Table['$inferSelect']>) {\n if (!filters || Object.keys(filters).length === 0) return undefined\n const parts: any[] = []\n for (const [field, value] of Object.entries(filters)) {\n if (Array.isArray(value) && value.length > 0) {\n const field_conditions = value.map((v) => condition(table, field, v))\n parts.push(or(...field_conditions))\n } else {\n parts.push(condition(table, field, value))\n }\n }\n return and(...parts)\n}\n\nfunction condition(table: SQLiteTableWithColumns<any>, field: string, value: any) {\n if (typeof value === 'object' && value !== null) {\n if ('contains' in value) return like(table[field], `%${value.contains}%`)\n if ('starts_with' in value) return like(table[field], `${value.starts_with}%`)\n if ('ends_with' in value) return like(table[field], `%${value.ends_with}`)\n return eq(table[field], JSON.stringify(value))\n }\n return eq(table[field], value)\n}\n\nfunction order<Table extends SQLiteTableWithColumns<any>>(table: Table, [field, direction]: [keyof Table['$inferSelect'], 'asc' | 'desc']) {\n return direction === 'asc' ? asc(table[field]) : desc(table[field])\n}\n","import { eq, and, inArray, or, like } from 'drizzle-orm'\nimport type { Context } from '../types'\nimport { safe_query, do_search, fields } from './common'\nimport { merge, uniq } from '@src/internals/utils'\nimport * as defaults from './defaults'\nimport type { File, FileState, NewFile, SearchOptions } from './types'\nimport { files, directories, external_imports, imports } from './schema'\n\nconst default_select_fields: Array<keyof File> = ['id', 'directory_id', 'path', 'state', 'error']\n\nexport const all = safe_query('files.all', (ctx: Context) => ctx.db.select().from(files).all())\n\nexport const search = safe_query('files.search', (ctx: Context, options: SearchOptions<File, keyof File> = {}) => {\n return do_search(ctx.db, files, merge(defaults.files, options))\n})\n\nexport const by_id = safe_query('files.by_id', (ctx: Context, id: number) => ctx.db.select().from(files).where(eq(files.id, id)).get())\n\nexport const by_path = safe_query('files.by_path', (ctx: Context, path: string) =>\n ctx.db.select().from(files).where(eq(files.path, path)).get()\n)\n\nexport const by_state = safe_query('files.by_state', (ctx: Context, state: FileState) =>\n ctx.db.select().from(files).where(eq(files.state, state)).all()\n)\n\nexport const insert = safe_query('files.insert', (ctx: Context, values: NewFile) => ctx.db.insert(files).values(values).run())\n\nexport const update = safe_query('files.update', (ctx: Context, file_id: number, values: Partial<File>) =>\n ctx.db.update(files).set(values).where(eq(files.id, file_id)).run()\n)\n\nexport const update_many = safe_query('files.update_many', (ctx: Context, file_ids: number[], values: Partial<File>) =>\n ctx.db.update(files).set(values).where(inArray(files.id, file_ids)).run()\n)\n\nexport const by_id_and_state = safe_query('files.by_id_and_state', (ctx: Context, params: { id: number; state: FileState }) =>\n ctx.db\n .select()\n .from(files)\n .where(and(eq(files.id, params.id), eq(files.state, params.state)))\n .get()\n)\n\nexport const del = safe_query('files.delete', (ctx: Context, file_id: number) => ctx.db.delete(files).where(eq(files.id, file_id)).run())\n\nexport const del_by_dir = safe_query('files.delete_by_dir', (ctx: Context, directory_id: number) =>\n ctx.db.delete(files).where(eq(files.directory_id, directory_id)).run()\n)\n\nexport const get_directory_ids = safe_query('files.get_directory_ids', (ctx: Context, file_ids: number[]) =>\n ctx.db\n .select({ directory_id: files.directory_id })\n .from(files)\n .where(inArray(files.id, file_ids))\n .all()\n .map((x) => x.directory_id)\n)\n\nexport const by_directory_path = safe_query('files.by_directory_path', (ctx: Context, dir_path: string, recursive: boolean = false) => {\n let dir_ids\n if (recursive) {\n if (dir_path === '/') {\n // Special case: root directory - get all directories\n dir_ids = ctx.db\n .select({ id: directories.id })\n .from(directories)\n .all()\n .map((d) => d.id)\n } else {\n dir_ids = ctx.db\n .select({ id: directories.id })\n .from(directories)\n .where(or(eq(directories.path, dir_path), like(directories.path, `${dir_path}/%`)))\n .all()\n .map((d) => d.id)\n }\n } else {\n const dir = ctx.db.select({ id: directories.id }).from(directories).where(eq(directories.path, dir_path)).get()\n dir_ids = dir ? [dir.id] : []\n }\n if (dir_ids.length === 0) return []\n return ctx.db.select().from(files).where(inArray(files.directory_id, dir_ids)).all()\n})\n\nexport const using_dependency = safe_query(\n 'files.using_dependency',\n (ctx: Context, external_dependency_id: number, fields_to_select: Array<keyof File> = default_select_fields) => {\n if (!fields_to_select.includes('id')) fields_to_select.push('id')\n const imports = ctx.db\n .select({ file_id: external_imports.file_id })\n .from(external_imports)\n .where(eq(external_imports.external_dependency_id, external_dependency_id))\n .all()\n\n const file_ids = uniq(imports.map((i) => i.file_id))\n if (file_ids.length === 0) return []\n return ctx.db.select(fields(files, fields_to_select)).from(files).where(inArray(files.id, file_ids)).all()\n }\n)\n\n// Returns files imported BY the given file (i.e., its dependencies)\nexport const imported_by = safe_query(\n 'files.imported_by',\n (ctx: Context, file_id: number, fields_to_select: Array<keyof File> = default_select_fields) => {\n if (!fields_to_select.includes('id')) fields_to_select.push('id')\n const import_rows = ctx.db\n .select({ id: imports.exporter_file_id })\n .from(imports)\n .where(eq(imports.importer_file_id, file_id)) // This file is the importer\n .all()\n\n const file_ids = uniq(import_rows.map((i) => i.id))\n if (file_ids.length === 0) return []\n return ctx.db.select(fields(files, fields_to_select)).from(files).where(inArray(files.id, file_ids)).all()\n }\n)\n\n// Returns files that are importing the given file (i.e., its consumers/dependents)\nexport const importing = safe_query(\n 'files.importing',\n (ctx: Context, file_id: number, fields_to_select: Array<keyof File> = default_select_fields) => {\n if (!fields_to_select.includes('id')) fields_to_select.push('id')\n const import_records = ctx.db\n .select({ importer_file_id: imports.importer_file_id })\n .from(imports)\n .where(eq(imports.exporter_file_id, file_id)) // This file is the exporter\n .all()\n\n const file_ids = uniq(import_records.map((i) => i.importer_file_id))\n if (file_ids.length === 0) return []\n return ctx.db.select(fields(files, fields_to_select)).from(files).where(inArray(files.id, file_ids)).all()\n }\n)\n","import { readFileSync } from 'fs'\nimport { err, type Err } from './errors'\n\nexport const parse_json = err.safe(JSON.parse, (reason, text) => err.new('invalid_json', { reason, text }))\nexport const read_file = err.safe(\n (path: string) => readFileSync(path, 'utf-8'),\n (reason, path) => err.new('could_not_read_file', { path, reason })\n)\n\nexport function group_by<T, K extends string>(items: T[], key: (item: T) => K) {\n const groups = {} as Record<K, T[]>\n for (const item of items) {\n const k = key(item)\n if (!groups[k]) groups[k] = []\n groups[k].push(item)\n }\n return groups\n}\n\n/**\n * Groups items by a unique key.\n * If a key is not unique, the last item will be kept.\n */\nexport function group_by_unique<T, K extends string>(items: T[], key: (item: T) => K) {\n const groups = {} as Record<K, T>\n for (const item of items) {\n groups[key(item)] = item\n }\n return groups\n}\n\nexport type ExpandOptions<T, E> = {\n items: T[]\n get_children: (item: T) => T[] | E\n get_key: (item: T) => string | number | E\n}\nexport function expand<T, E extends Err>({ items, get_children, get_key }: ExpandOptions<T, E>) {\n const visited = new Set<string | number>()\n const result: T[] = []\n const queue: T[] = [...items]\n while (queue.length > 0) {\n const item = queue.shift()!\n const key = get_key(item)\n if (err.any(key)) return key\n if (visited.has(key)) continue\n visited.add(key)\n result.push(item)\n const children = get_children(item)\n if (err.any(children)) return children\n queue.push(...children)\n }\n return result\n}\n\nexport function normalize_directory_path(path: string): string {\n let normalized = path.trim()\n if (normalized.startsWith('./')) normalized = normalized.slice(2)\n if (normalized.endsWith('/') && normalized !== '/') normalized = normalized.slice(0, -1)\n if (normalized === '.' || normalized === '') normalized = '/'\n if (!normalized.startsWith('/')) normalized = '/' + normalized\n return normalized\n}\n\nexport function normalize_file_path(path: string): string {\n let normalized = path.trim()\n if (normalized.startsWith('./')) normalized = normalized.slice(2)\n if (!normalized.startsWith('/')) normalized = '/' + normalized\n return normalized\n}\n\nexport function uniq<T>(items: T[]) {\n return [...new Set(items)]\n}\n\nexport function merge<A extends Record<string, any>, B extends Record<string, any>>(a: B, b: A): A & B {\n const res = { ...a } as A & B\n for (const key of Object.keys(b)) {\n if (b[key] !== undefined) res[key as keyof (A & B)] = b[key]\n }\n return res\n}\n","import type { File, Directory, Symbol, ExternalDependency, SearchOptions } from './types'\n\nexport const files: Required<SearchOptions<File>> = {\n select: ['id', 'directory_id', 'path', 'state', 'error'],\n order_by: ['id', 'asc'],\n limit: 20,\n offset: 0,\n where: {},\n}\n\nexport const directories: Required<SearchOptions<Directory>> = {\n select: ['id', 'parent_id', 'path', 'state', 'error'],\n order_by: ['id', 'asc'],\n limit: 20,\n offset: 0,\n where: {},\n}\n\nexport const symbols: Required<SearchOptions<Symbol>> = {\n select: ['id', 'file_id', 'type', 'name', 'meta', 'is_exported', 'state', 'error'],\n order_by: ['id', 'asc'],\n limit: 20,\n offset: 0,\n where: {},\n}\n\nexport const external_dependencies: Required<SearchOptions<ExternalDependency>> = {\n select: ['id', 'package', 'subpath', 'name', 'state', 'error'],\n order_by: ['id', 'asc'],\n limit: 20,\n offset: 0,\n where: {},\n}\n","import { eq, and, inArray } from 'drizzle-orm'\nimport { merge } from '@src/internals/utils'\nimport * as defaults from './defaults'\nimport { directories } from './schema'\nimport type { Context } from '../types'\nimport { safe_query, do_search } from './common'\nimport type { Directory, DirectoryState, NewDirectory, SearchOptions } from './types'\n\nexport const by_id = safe_query('directories.by_id', (ctx: Context, id: number) =>\n ctx.db.select().from(directories).where(eq(directories.id, id)).get()\n)\n\nexport const by_path = safe_query('directories.by_path', (ctx: Context, path: string) =>\n ctx.db.select().from(directories).where(eq(directories.path, path)).get()\n)\n\nexport const by_state = safe_query('directories.by_state', (ctx: Context, state: DirectoryState) =>\n ctx.db.select().from(directories).where(eq(directories.state, state)).all()\n)\n\nexport const insert = safe_query('directories.insert', (ctx: Context, values: NewDirectory) =>\n ctx.db.insert(directories).values(values).returning().get()\n)\n\nexport const update = safe_query('directories.update', (ctx: Context, id: number, values: Partial<Directory>) =>\n ctx.db.update(directories).set(values).where(eq(directories.id, id)).run()\n)\n\nexport const update_many = safe_query('directories.update_many', (ctx: Context, ids: number[], values: Partial<Directory>) =>\n ctx.db.update(directories).set(values).where(inArray(directories.id, ids)).run()\n)\n\nexport const by_id_and_state = safe_query('directories.by_id_and_state', (ctx: Context, params: { id: number; state: DirectoryState }) =>\n ctx.db\n .select()\n .from(directories)\n .where(and(eq(directories.id, params.id), eq(directories.state, params.state)))\n .get()\n)\n\nexport const search = safe_query('directories.search', (ctx: Context, options: SearchOptions<Directory, keyof Directory> = {}) => {\n return do_search(ctx.db, directories, merge(defaults.directories, options))\n})\n","import { eq } from 'drizzle-orm'\nimport { imports } from './schema'\nimport type { Context } from '../types'\nimport { safe_query } from './common'\nimport type { Import, ImportState, NewImport } from './types'\n\nexport const by_exporter_file = safe_query('imports.by_exporter_file', (ctx: Context, exporter_file_id: number) =>\n ctx.db.select().from(imports).where(eq(imports.exporter_file_id, exporter_file_id)).all()\n)\n\nexport const by_importer_file = safe_query('imports.by_importer_file', (ctx: Context, importer_file_id: number) =>\n ctx.db.select().from(imports).where(eq(imports.importer_file_id, importer_file_id)).all()\n)\n\nexport const insert_many = safe_query('imports.insert_many', (ctx: Context, values: NewImport[]) => ctx.db.insert(imports).values(values).run())\n\nexport const del_by_importer_file = safe_query('imports.del_by_importer_file', (ctx: Context, file_id: number) =>\n ctx.db.delete(imports).where(eq(imports.importer_file_id, file_id)).run()\n)\n\nexport const by_state = safe_query('imports.by_state', (ctx: Context, state: ImportState) =>\n ctx.db.select().from(imports).where(eq(imports.state, state)).all()\n)\n\nexport const update = safe_query('imports.update', (ctx: Context, id: number, data: Partial<Import>) =>\n ctx.db.update(imports).set(data).where(eq(imports.id, id)).run()\n)\n","import { eq, and, inArray } from 'drizzle-orm'\nimport { merge, uniq } from '@src/internals/utils'\nimport { err } from '@src/internals/errors'\nimport * as defaults from './defaults'\nimport type { Context } from '../types'\nimport { safe_query, do_search, fields } from './common'\nimport { symbols, symbol_internal_links, symbol_external_links, external_imports } from './schema'\nimport type { Symbol, NewSymbol, SymbolMeta, SymbolType, SymbolState, SearchOptions } from './types'\n\nexport const insert_many = safe_query('symbols.insert_many', (ctx: Context, values: NewSymbol[]) => ctx.db.insert(symbols).values(values).run())\n\nexport const del_by_file = safe_query('symbols.delete_by_file', (ctx: Context, file_id: number) =>\n ctx.db.delete(symbols).where(eq(symbols.file_id, file_id)).run()\n)\n\nexport const by_file_and_name = safe_query(\n 'symbols.by_file_and_name',\n (ctx: Context, params: { file_id: number; name: string; is_exported: boolean }) =>\n ctx.db\n .select()\n .from(symbols)\n .where(and(eq(symbols.file_id, params.file_id), eq(symbols.name, params.name), eq(symbols.is_exported, params.is_exported)))\n .get()\n)\n\nexport const by_state = safe_query('symbols.by_state', (ctx: Context, state: SymbolState) =>\n ctx.db.select().from(symbols).where(eq(symbols.state, state)).all()\n)\n\nexport const by_file = safe_query('symbols.by_file', (ctx: Context, file_id: number) =>\n ctx.db.select().from(symbols).where(eq(symbols.file_id, file_id)).all()\n)\n\nexport const update = safe_query('symbols.update', (ctx: Context, id: number, data: Partial<Symbol>) =>\n ctx.db.update(symbols).set(data).where(eq(symbols.id, id)).run()\n)\n\nexport const by_id = safe_query('symbols.by_id', (ctx: Context, id: number) => ctx.db.select().from(symbols).where(eq(symbols.id, id)).get())\n\nexport const by_id_and_state = safe_query('symbols.by_id_and_state', (ctx: Context, params: { id: number; state: SymbolState }) =>\n ctx.db\n .select()\n .from(symbols)\n .where(and(eq(symbols.id, params.id), eq(symbols.state, params.state)))\n .get()\n)\n\nexport function meta<T extends SymbolType>(symbol: Symbol & { type: T }) {\n return err.catch(\n () => JSON.parse(symbol.meta!) as SymbolMeta[T],\n (reason) => err.new('symbol_meta_parse_error', { reason, symbol_id: symbol.id, meta: symbol.meta })\n )\n}\n\nexport const search = safe_query('symbols.search', (ctx: Context, options: SearchOptions<Symbol, keyof Symbol> = {}) => {\n return do_search(ctx.db, symbols, merge(defaults.symbols, options))\n})\n\n// Returns symbols referenced BY the given symbol (i.e., symbols this symbol uses)\nexport const referenced_by = safe_query(\n 'symbols.referenced_by',\n (ctx: Context, symbol_id: number, fields_to_select: Array<keyof Symbol> = defaults.symbols.select) => {\n if (!fields_to_select.includes('id')) fields_to_select.push('id')\n const link_records = ctx.db\n .select({ id: symbol_internal_links.to_symbol_id })\n .from(symbol_internal_links)\n .where(eq(symbol_internal_links.from_symbol_id, symbol_id))\n .all()\n\n const symbol_ids = uniq(link_records.map((i) => i.id).filter((id): id is number => id !== null))\n if (symbol_ids.length === 0) return []\n return ctx.db.select(fields(symbols, fields_to_select)).from(symbols).where(inArray(symbols.id, symbol_ids)).all()\n }\n)\n\n// Returns symbols that are referencing the given symbol (i.e., symbols that use this symbol)\nexport const referencing = safe_query(\n 'symbols.referencing',\n (ctx: Context, symbol_id: number, fields_to_select: Array<keyof Symbol> = defaults.symbols.select) => {\n if (!fields_to_select.includes('id')) fields_to_select.push('id')\n const link_records = ctx.db\n .select({ id: symbol_internal_links.from_symbol_id })\n .from(symbol_internal_links)\n .where(eq(symbol_internal_links.to_symbol_id, symbol_id))\n .all()\n\n const symbol_ids = uniq(link_records.map((i) => i.id).filter((id): id is number => id !== null))\n if (symbol_ids.length === 0) return []\n return ctx.db.select(fields(symbols, fields_to_select)).from(symbols).where(inArray(symbols.id, symbol_ids)).all()\n }\n)\n\n// Returns symbols using the given external dependency\nexport const using_dependency = safe_query(\n 'symbols.using_dependency',\n (ctx: Context, dependency_id: number, fields_to_select: Array<keyof Symbol> = defaults.symbols.select) => {\n if (!fields_to_select.includes('id')) fields_to_select.push('id')\n\n // Join through external_imports to get symbols by dependency_id\n const link_records = ctx.db\n .select({ symbol_id: symbol_external_links.symbol_id })\n .from(symbol_external_links)\n .innerJoin(external_imports, eq(symbol_external_links.external_import_id, external_imports.id))\n .where(eq(external_imports.external_dependency_id, dependency_id))\n .all()\n\n const symbol_ids = uniq(link_records.map((i) => i.symbol_id))\n if (symbol_ids.length === 0) return []\n return ctx.db.select(fields(symbols, fields_to_select)).from(symbols).where(inArray(symbols.id, symbol_ids)).all()\n }\n)\n","import { eq, and, sql, inArray } from 'drizzle-orm'\nimport { err } from '@src/internals/errors'\nimport { merge, uniq } from '@src/internals/utils'\nimport * as defaults from './defaults'\nimport type { Context } from '../types'\nimport { safe_query, do_search, fields } from './common'\nimport { external_dependencies, external_imports, symbol_external_links } from './schema'\nimport type { NewExternalDependency, ExternalDependencyState, ExternalDependency, SearchOptions } from './types'\n\nexport const by_id = safe_query('external_dependencies.by_id', (ctx: Context, id: number) =>\n ctx.db.select().from(external_dependencies).where(eq(external_dependencies.id, id)).get()\n)\n\nexport const by_state = safe_query('external_dependencies.by_state', (ctx: Context, state: ExternalDependencyState) =>\n ctx.db.select().from(external_dependencies).where(eq(external_dependencies.state, state)).all()\n)\n\nexport const by_package_subpath_and_name = safe_query(\n 'external_dependencies.by_package_subpath_and_name',\n (ctx: Context, params: { package: string; subpath: string | null; name: string | null }) =>\n ctx.db\n .select()\n .from(external_dependencies)\n .where(\n and(\n eq(external_dependencies.package, params.package),\n params.subpath === null ? sql`${external_dependencies.subpath} IS NULL` : eq(external_dependencies.subpath, params.subpath),\n params.name === null ? sql`${external_dependencies.name} IS NULL` : eq(external_dependencies.name, params.name)\n )\n )\n .get()\n)\n\nexport const insert = safe_query('external_dependencies.insert', (ctx: Context, value: NewExternalDependency) =>\n ctx.db.insert(external_dependencies).values(value).returning().get()\n)\n\nexport const update = safe_query('external_dependencies.update', (ctx: Context, id: number, data: Partial<ExternalDependency>) =>\n ctx.db.update(external_dependencies).set(data).where(eq(external_dependencies.id, id)).run()\n)\n\n// Get all external dependencies\nexport const all = safe_query('external_dependencies.all', (ctx: Context) => ctx.db.select().from(external_dependencies).all())\n\nexport function get_or_create(ctx: Context, value: NewExternalDependency) {\n return err.pipe(\n () => by_package_subpath_and_name(ctx, { package: value.package, subpath: value.subpath ?? null, name: value.name ?? null }),\n (existing) => existing || insert(ctx, value)\n )\n}\n\nexport const search = safe_query(\n 'external_dependencies.search',\n (ctx: Context, options: SearchOptions<ExternalDependency, keyof ExternalDependency> = {}) => {\n return do_search(ctx.db, external_dependencies, merge(defaults.external_dependencies, options))\n }\n)\n\n// Returns external dependencies imported by the given file\nexport const used_by_file = safe_query(\n 'external_dependencies.used_by_file',\n (ctx: Context, file_id: number, fields_to_select: Array<keyof ExternalDependency> = defaults.external_dependencies.select) => {\n if (!fields_to_select.includes('id')) fields_to_select.push('id')\n\n const imports_records = ctx.db\n .select({ external_dependency_id: external_imports.external_dependency_id })\n .from(external_imports)\n .where(eq(external_imports.file_id, file_id))\n .all()\n\n const dependency_ids = uniq(imports_records.map((r) => r.external_dependency_id))\n if (dependency_ids.length === 0) return []\n\n return ctx.db\n .select(fields(external_dependencies, fields_to_select))\n .from(external_dependencies)\n .where(inArray(external_dependencies.id, dependency_ids))\n .all()\n }\n)\n\n// Returns external dependencies referenced by the given symbol\nexport const used_by_symbol = safe_query(\n 'external_dependencies.used_by_symbol',\n (ctx: Context, symbol_id: number, fields_to_select: Array<keyof ExternalDependency> = defaults.external_dependencies.select) => {\n if (!fields_to_select.includes('id')) fields_to_select.push('id')\n\n const link_records = ctx.db\n .select({ external_import_id: symbol_external_links.external_import_id })\n .from(symbol_external_links)\n .where(eq(symbol_external_links.symbol_id, symbol_id))\n .all()\n\n if (link_records.length === 0) return []\n\n const external_import_ids = uniq(link_records.map((r) => r.external_import_id))\n\n const imports_records = ctx.db\n .select({ external_dependency_id: external_imports.external_dependency_id })\n .from(external_imports)\n .where(inArray(external_imports.id, external_import_ids))\n .all()\n\n const dependency_ids = uniq(imports_records.map((r) => r.external_dependency_id))\n if (dependency_ids.length === 0) return []\n\n return ctx.db\n .select(fields(external_dependencies, fields_to_select))\n .from(external_dependencies)\n .where(inArray(external_dependencies.id, dependency_ids))\n .all()\n }\n)\n","import { eq } from 'drizzle-orm'\nimport { external_imports, symbol_external_links } from './schema'\nimport type { Context } from '../types'\nimport { safe_query } from './common'\nimport type { NewExternalImport } from './types'\n\nexport const insert_many = safe_query('external_imports.insert_many', (ctx: Context, values: NewExternalImport[]) =>\n ctx.db.insert(external_imports).values(values).run()\n)\n\nexport const del_by_file = safe_query('external_imports.delete_by_file', (ctx: Context, file_id: number) =>\n ctx.db.delete(external_imports).where(eq(external_imports.file_id, file_id)).run()\n)\n\nexport const by_file = safe_query('external_imports.by_file', (ctx: Context, file_id: number) =>\n ctx.db.select().from(external_imports).where(eq(external_imports.file_id, file_id)).all()\n)\n\nexport const by_external_dependency = safe_query('external_imports.by_external_dependency', (ctx: Context, external_dependency_id: number) =>\n ctx.db.select().from(external_imports).where(eq(external_imports.external_dependency_id, external_dependency_id)).all()\n)\n\nexport const by_symbol = safe_query('external_imports.by_symbol', (ctx: Context, symbol_id: number) =>\n ctx.db.query.symbol_external_links.findMany({\n where: eq(symbol_external_links.symbol_id, symbol_id),\n with: {\n external_import: {\n with: {\n external_dependency: true,\n },\n },\n },\n })\n)\n","import { and, eq } from 'drizzle-orm'\nimport { symbol_internal_links } from './schema'\nimport type { Context } from '../types'\nimport { safe_query } from './common'\nimport type { NewSymbolInternalLink } from './types'\n\nexport const by_from_symbol = safe_query('symbol_internal_links.by_from_symbol', (ctx: Context, from_symbol_id: number) =>\n ctx.db.query.symbol_internal_links.findMany({\n where: eq(symbol_internal_links.from_symbol_id, from_symbol_id),\n with: {\n to_symbol: {\n with: {\n file: true,\n },\n },\n },\n })\n)\n\nexport const insert = safe_query('symbol_internal_links.insert', (ctx: Context, value: NewSymbolInternalLink) =>\n ctx.db.insert(symbol_internal_links).values(value).run()\n)\n\nexport const exists = safe_query('symbol_internal_links.exists', (ctx: Context, params: { from_symbol_id: number; to_symbol_id: number }) =>\n ctx.db\n .select({ id: symbol_internal_links.id })\n .from(symbol_internal_links)\n .where(and(eq(symbol_internal_links.from_symbol_id, params.from_symbol_id), eq(symbol_internal_links.to_symbol_id, params.to_symbol_id)))\n .get()\n)\n\nexport const del_by_from_symbol = safe_query('symbol_internal_links.del_by_from_symbol', (ctx: Context, from_symbol_id: number) =>\n ctx.db.delete(symbol_internal_links).where(eq(symbol_internal_links.from_symbol_id, from_symbol_id)).run()\n)\n","import { and, eq } from 'drizzle-orm'\nimport { symbol_external_links } from './schema'\nimport type { Context } from '../types'\nimport { safe_query } from './common'\nimport type { NewSymbolExternalLink } from './types'\n\nexport const by_symbol = safe_query('symbol_external_links.by_symbol', (ctx: Context, symbol_id: number) =>\n ctx.db.select().from(symbol_external_links).where(eq(symbol_external_links.symbol_id, symbol_id)).all()\n)\n\nexport const insert = safe_query('symbol_external_links.insert', (ctx: Context, value: NewSymbolExternalLink) =>\n ctx.db.insert(symbol_external_links).values(value).run()\n)\n\nexport const by_external_import = safe_query('symbol_external_links.by_external_import', (ctx: Context, external_import_id: number) =>\n ctx.db.select().from(symbol_external_links).where(eq(symbol_external_links.external_import_id, external_import_id)).all()\n)\n\nexport const exists = safe_query('symbol_external_links.exists', (ctx: Context, params: { symbol_id: number; external_import_id: number }) =>\n ctx.db\n .select({ id: symbol_external_links.id })\n .from(symbol_external_links)\n .where(and(eq(symbol_external_links.symbol_id, params.symbol_id), eq(symbol_external_links.external_import_id, params.external_import_id)))\n .get()\n)\n\nexport const del_by_symbol = safe_query('symbol_external_links.del_by_symbol', (ctx: Context, symbol_id: number) =>\n ctx.db.delete(symbol_external_links).where(eq(symbol_external_links.symbol_id, symbol_id)).run()\n)\n","import { Command } from 'commander'\nimport { commands } from './commands'\n\nexport async function run(argv: string[]) {\n const program = new Command()\n program.name('codewiki').description('Describe and explore TypeScript codebases').version('0.0.1')\n for (const cmd of commands) program.addCommand(cmd)\n return program.parseAsync(argv, { from: 'user' })\n}\n","import { Command } from 'commander'\nimport { env } from '../env.js'\nimport { load_wiki } from './_common.js'\nimport { format_counts } from '../utils.js'\n\nexport const update = new Command('update')\nupdate.description('Reads current files and updates the wiki database')\nupdate.action(async () => {\n const wiki = await load_wiki()\n await wiki.update()\n env.log('Update complete.\\n')\n\n const counts = wiki.counts()\n const status = format_counts(counts)\n env.log(status)\n})\n","import { z } from 'zod'\nimport { env } from '../env'\nimport { Config } from '../schema'\nimport { create, load } from '@src/index'\nimport { err, parse_json } from '@src/internals'\n\nconst config_path = 'codewiki.json'\n\nexport async function load_wiki() {\n try {\n const content = err.or_throw(env.read_file(config_path))\n const raw_config = err.or_throw(parse_json(content))\n\n const res = Config.safeParse(raw_config)\n if (!res.success) throw err.new('invalid_config', { errors: res.error.issues })\n\n const config = res.data\n if (env.file_exists(config.db_path)) return load(config.db_path)\n return create(config)\n } catch (error: any) {\n if (error.type === 'could_not_read_file') {\n env.error(`Error: Configuration file ${config_path} not found`)\n } else if (error.type === 'invalid_json') {\n env.error(`Error: Invalid JSON in ${config_path}`)\n } else if (error.type === 'invalid_config') {\n env.error('Error: Invalid configuration')\n } else if (error.message) {\n env.error(`Error: ${error.message}`)\n } else {\n env.error(`Error: ${String(error)}`)\n }\n process.exit(1)\n }\n}\n\n/**\n * Parse and validate JSON options with detailed error messages\n */\nexport function parse_options<T>(options_json: string, schema: z.ZodType<T>, context: string): T {\n // Parse JSON\n let parsed_json: any\n try {\n parsed_json = err.or_throw(parse_json(options_json))\n } catch (error: any) {\n env.log(`Error: Invalid JSON in ${context}`)\n const error_msg = error.data?.reason?.message || 'JSON parse error'\n env.log(` ${error_msg}`)\n process.exit(1)\n }\n\n // Validate with schema\n const validation_result = schema.safeParse(parsed_json)\n if (!validation_result.success) {\n env.log(`Error: Invalid options format in ${context}`)\n env.log('')\n \n for (const issue of validation_result.error.issues) {\n const path = issue.path.length > 0 ? issue.path.join('.') : 'root'\n env.log(` • ${path}: ${issue.message}`)\n }\n \n env.log('')\n env.log(`Run 'codewiki ${context.split(' ')[0]} --help' for usage information`)\n process.exit(1)\n }\n\n return validation_result.data\n}\n","import { z } from 'zod'\n\nexport const Config = z.object({\n db_path: z.string().describe('Path to SQLite database'),\n project_path: z.string().describe('Path to TypeScript project'),\n description: z.string().optional(),\n package_json_path: z.string().optional(),\n node_modules_paths: z.array(z.string()).optional(),\n})\n\n// Helper schemas for filter conditions\nconst StringFilter = z.union([\n z.string(),\n z.object({ contains: z.string() }),\n z.object({ starts_with: z.string() }),\n z.object({ ends_with: z.string() }),\n])\n\nconst OrderDirection = z.enum(['asc', 'desc'])\n\n// File schemas\nconst FileField = z.enum(['id', 'directory_id', 'path', 'description', 'state', 'error'])\nconst FileState = z.enum(['to_scan', 'to_describe', 'ready'])\n\nexport const FileSearchOptions = z.object({\n select: z.array(FileField).optional(),\n limit: z.number().int().positive().optional(),\n offset: z.number().int().nonnegative().optional(),\n where: z\n .object({\n id: z.number().optional(),\n directory_id: z.number().optional(),\n path: StringFilter.optional(),\n description: StringFilter.optional(),\n state: z.union([FileState, z.object({ contains: z.string() })]).optional(),\n error: StringFilter.optional(),\n })\n .optional(),\n order_by: z.tuple([FileField, OrderDirection]).optional(),\n})\n\nexport const FileRelationOptions = z.object({\n select: z.array(FileField).optional(),\n limit: z.number().int().positive().optional(),\n offset: z.number().int().nonnegative().optional(),\n deep: z.boolean().optional(),\n})\n\n// Symbol schemas\nconst SymbolField = z.enum(['id', 'file_id', 'type', 'name', 'text', 'meta', 'description', 'is_exported', 'state', 'error'])\nconst SymbolType = z.enum(['function', 'class', 'class_method', 'class_property', 'variable', 'type'])\nconst SymbolState = z.enum(['to_link', 'to_describe', 'ready'])\n\nexport const SymbolSearchOptions = z.object({\n select: z.array(SymbolField).optional(),\n limit: z.number().int().positive().optional(),\n offset: z.number().int().nonnegative().optional(),\n where: z\n .object({\n id: z.number().optional(),\n file_id: z.number().optional(),\n type: z.union([SymbolType, z.object({ contains: z.string() })]).optional(),\n name: StringFilter.optional(),\n text: StringFilter.optional(),\n meta: StringFilter.optional(),\n description: StringFilter.optional(),\n is_exported: z.boolean().optional(),\n state: z.union([SymbolState, z.object({ contains: z.string() })]).optional(),\n error: StringFilter.optional(),\n })\n .optional(),\n order_by: z.tuple([SymbolField, OrderDirection]).optional(),\n})\n\nexport const SymbolRelationOptions = z.object({\n select: z.array(SymbolField).optional(),\n limit: z.number().int().positive().optional(),\n offset: z.number().int().nonnegative().optional(),\n deep: z.boolean().optional(),\n})\n\n// Directory schemas\nconst DirectoryField = z.enum(['id', 'parent_id', 'path', 'description', 'state', 'error'])\nconst DirectoryState = z.enum(['to_describe', 'ready'])\n\nexport const DirectorySearchOptions = z.object({\n select: z.array(DirectoryField).optional(),\n limit: z.number().int().positive().optional(),\n offset: z.number().int().nonnegative().optional(),\n where: z\n .object({\n id: z.number().optional(),\n parent_id: z.number().optional(),\n path: StringFilter.optional(),\n description: StringFilter.optional(),\n state: z.union([DirectoryState, z.object({ contains: z.string() })]).optional(),\n error: StringFilter.optional(),\n })\n .optional(),\n order_by: z.tuple([DirectoryField, OrderDirection]).optional(),\n})\n\nexport const DirectoryRelationOptions = z.object({\n select: z.array(DirectoryField).optional(),\n limit: z.number().int().positive().optional(),\n offset: z.number().int().nonnegative().optional(),\n deep: z.boolean().optional(),\n})\n\n// Dependency schemas\nconst DependencyField = z.enum(['id', 'package', 'subpath', 'name', 'version', 'github_repo', 'is_builtin', 'description', 'state', 'error'])\nconst DependencyState = z.enum(['to_describe', 'ready'])\n\nexport const DependencySearchOptions = z.object({\n select: z.array(DependencyField).optional(),\n limit: z.number().int().positive().optional(),\n offset: z.number().int().nonnegative().optional(),\n where: z\n .object({\n id: z.number().optional(),\n package: StringFilter.optional(),\n subpath: StringFilter.optional(),\n name: StringFilter.optional(),\n version: StringFilter.optional(),\n github_repo: StringFilter.optional(),\n is_builtin: z.boolean().optional(),\n description: StringFilter.optional(),\n state: z.union([DependencyState, z.object({ contains: z.string() })]).optional(),\n error: StringFilter.optional(),\n })\n .optional(),\n order_by: z.tuple([DependencyField, OrderDirection]).optional(),\n})\n\nexport const DependencySelectOptions = z.object({\n select: z.array(DependencyField).optional(),\n limit: z.number().int().positive().optional(),\n offset: z.number().int().nonnegative().optional(),\n})\n\n// Type exports\nexport type FileSearchOptions = z.infer<typeof FileSearchOptions>\nexport type FileRelationOptions = z.infer<typeof FileRelationOptions>\nexport type SymbolSearchOptions = z.infer<typeof SymbolSearchOptions>\nexport type SymbolRelationOptions = z.infer<typeof SymbolRelationOptions>\nexport type DirectorySearchOptions = z.infer<typeof DirectorySearchOptions>\nexport type DirectoryRelationOptions = z.infer<typeof DirectoryRelationOptions>\nexport type DependencySearchOptions = z.infer<typeof DependencySearchOptions>\nexport type DependencySelectOptions = z.infer<typeof DependencySelectOptions>\n","import path from 'path'\nimport ts from 'typescript'\nimport { stat } from 'fs/promises'\nimport * as db from '../db'\nimport { err } from '../internals/errors'\nimport type { Context } from '../types'\nimport { file_updated } from './events'\nimport { group_by_unique } from '../internals/utils'\n\nexport async function track_changes(ctx: Context) {\n const db_files = err.or_throw(db.files.all(ctx))\n const { created, updated, deleted } = await changes(ctx, get_source_files(ctx), db_files)\n for (const { source_file, hash } of created) handle_new_source_file(ctx, source_file, hash)\n for (const { db_file, hash } of updated) handle_changed_source_file(ctx, db_file, hash)\n for (const { db_file } of deleted) handle_deleted_source_file(ctx, db_file)\n}\n\nfunction get_source_files(ctx: Context) {\n const src_files = []\n for (const file of ctx.program.getSourceFiles()) {\n if (ctx.program.isSourceFileDefaultLibrary(file)) continue\n if (ctx.program.isSourceFileFromExternalLibrary(file)) continue\n if (!path.resolve(file.fileName).startsWith(ctx.project_path)) continue\n src_files.push(file)\n }\n return src_files\n}\n\nfunction handle_new_source_file(ctx: Context, file: ts.SourceFile, hash: string) {\n const file_path = err.or_throw(get_file_path(ctx, file))\n const dirs_paths = err.or_throw(get_parents_paths(ctx, file))\n\n let parent_dir_id = null\n for (const dir_path of dirs_paths) {\n let dir = err.or_throw(db.directories.by_path(ctx, dir_path))\n if (dir) {\n err.or_throw(db.directories.update(ctx, dir.id, { state: 'to_describe' }))\n } else {\n dir = err.or_throw(db.directories.insert(ctx, { path: dir_path, state: 'to_describe', parent_id: parent_dir_id }))\n }\n parent_dir_id = dir.id\n }\n err.or_throw(db.files.insert(ctx, { directory_id: parent_dir_id!, path: file_path, state: 'to_scan', hash }))\n}\n\nfunction handle_changed_source_file(ctx: Context, db_file: db.File, hash: string) {\n file_updated(ctx, db_file.id)\n err.or_throw(db.files.update(ctx, db_file.id, { hash }))\n}\n\nfunction handle_deleted_source_file(ctx: Context, db_file: db.File) {\n err.or_throw(handle_changed_source_file(ctx, db_file, ''))\n err.or_throw(db.files.del(ctx, db_file.id))\n}\n\nasync function changes(ctx: Context, source_files: ts.SourceFile[], db_files: db.File[]) {\n const created = []\n const updated = []\n const deleted = []\n const db_files_index = group_by_unique(db_files, (x) => x.path)\n const source_files_index = group_by_unique(source_files, (x) => err.or(get_file_path(ctx, x), ''))\n const filenames = new Set(Object.keys(source_files_index).concat(Object.keys(db_files_index)))\n for (const filename of filenames) {\n const db_file = db_files_index[filename]\n const source_file = source_files_index[filename]\n if (!db_file && source_file) created.push({ source_file, hash: await file_signature(source_file.fileName) })\n if (db_file && !source_file) deleted.push({ db_file })\n if (db_file && source_file) {\n const hash = await file_signature(source_file.fileName)\n if (db_file.hash !== hash) updated.push({ db_file, source_file, hash })\n }\n }\n return { created, updated, deleted }\n}\n\nfunction get_file_path(ctx: Context, file: ts.SourceFile) {\n const absolute_path = path.resolve(file.fileName)\n if (absolute_path.startsWith(ctx.project_path)) return absolute_path.slice(ctx.project_path.length)\n return err.new('file_outside_project_path', { file_path: absolute_path, project_path: ctx.project_path })\n}\n\nfunction get_parents_paths(ctx: Context, file: ts.SourceFile) {\n const file_path = get_file_path(ctx, file)\n if (err.any(file_path)) return file_path\n const dirs = []\n let current = path.dirname(file_path)\n while (current !== path.sep) {\n dirs.push(current)\n current = path.dirname(current)\n }\n dirs.push(current)\n return dirs.reverse()\n}\n\nasync function file_signature(file_path: string) {\n const stats = await stat(file_path)\n return `${stats.mtimeMs}:${stats.size}`\n}\n","import * as db from '../db'\nimport { err } from '../internals/errors'\nimport { expand } from '../internals/utils'\nimport type { Context } from '../types'\n\nexport function file_updated(ctx: Context, file_id: number) {\n const impacted_files_ids = err.or_throw(\n expand({\n items: [file_id],\n get_key: (id) => id,\n get_children: (id) => {\n const imports = db.imports.by_exporter_file(ctx, id)\n if (err.any(imports)) return imports\n return imports.map((x: db.Import) => x.importer_file_id)\n },\n })\n )\n\n const dir_ids = err.or_throw(db.files.get_directory_ids(ctx, impacted_files_ids))\n\n const impacted_dirs_ids = err.or_throw(\n expand({\n items: dir_ids,\n get_key: (id) => id,\n get_children: (id) => {\n const dir = db.directories.by_id(ctx, id)\n if (err.any(dir)) return dir\n return dir?.parent_id ? [dir.parent_id] : []\n },\n })\n )\n err.or_throw(db.files.update_many(ctx, impacted_files_ids, { state: 'to_scan' }))\n err.or_throw(db.directories.update_many(ctx, impacted_dirs_ids, { state: 'to_describe' }))\n}\n","import * as db from '../db'\nimport { err } from '../internals/errors'\nimport type { Context } from '../types'\nimport { file_updated } from './events'\n\nexport async function sync_external_dependencies(ctx: Context) {\n const db_deps = err.or_throw(db.external_dependencies.all(ctx))\n for (const ctx_dep of Object.values(ctx.dependencies)) {\n const existing = db_deps.filter((d) => d.package === ctx_dep.name)\n if (existing.length === 0) continue\n\n const needs_update = existing.some((d) => d.version !== ctx_dep.version || (d.github_repo || '') !== (ctx_dep.github_repo || ''))\n if (!needs_update) continue\n\n for (const db_dep of existing) {\n err.or_throw(\n db.external_dependencies.update(ctx, db_dep.id, {\n version: ctx_dep.version,\n github_repo: ctx_dep.github_repo,\n state: 'to_describe',\n error: null,\n })\n )\n const files = err.or_throw(db.files.using_dependency(ctx, db_dep.id, ['id']))\n for (const file of files) file_updated(ctx, file.id as number)\n }\n }\n}\n","import path from 'path'\nimport ts from 'typescript'\nimport { err, type Err } from '../../internals/errors'\nimport * as db from '../../db'\nimport type { Context } from '../../types'\nimport { extract_import, is_import, extract_dynamic_import } from './imports'\nimport { extract_external_import, is_external_import, extract_external_dynamic_import } from './external_imports'\nimport { extract_type_symbol, is_type } from './types'\nimport { extract_function_symbol, is_function } from './functions'\nimport { extract_variable_symbol } from './variables'\nimport { extract_class_fields, extract_class_symbol, is_class } from './classes'\nimport { is_dynamic_import, is_external_module } from './common'\n\nexport async function scan_files(ctx: Context) {\n const files = err.or_throw(db.files.by_state(ctx, 'to_scan'))\n for (const file of files) {\n const res = scan_file(ctx, file)\n if (err.any(res)) {\n err.or_throw(db.files.update(ctx, file.id, { error: String(res) }))\n } else {\n err.or_throw(db.files.update(ctx, file.id, { state: 'to_describe', error: null }))\n }\n }\n}\n\nexport function scan_file(ctx: Context, file: db.File) {\n return err.pipe(\n () => db.symbols.del_by_file(ctx, file.id),\n () => db.imports.del_by_importer_file(ctx, file.id),\n () => db.external_imports.del_by_file(ctx, file.id),\n () => get_source_file(ctx, file.path),\n (source_file) => parse_file(ctx, source_file, file.id),\n ({ imports, symbols, external_imports }) =>\n err.pipe(\n () => external_imports.length && db.external_imports.insert_many(ctx, external_imports),\n () => imports.length && db.imports.insert_many(ctx, imports),\n () => symbols.length && db.symbols.insert_many(ctx, symbols)\n )\n )\n}\n\nexport function get_source_file(ctx: Context, file_path: string) {\n const source_file = ctx.program.getSourceFile(path.join(ctx.project_path, file_path))\n if (!source_file) return err.new('file_not_found', { path: file_path })\n return source_file\n}\n\nexport function parse_file(ctx: Context, source_file: ts.SourceFile, file_id: number) {\n const imports: db.NewImport[] = []\n const symbols: db.NewSymbol[] = []\n const external_imports: db.NewExternalImport[] = []\n\n // Helper to recursively find dynamic imports\n function find_dynamic_imports(node: ts.Node) {\n // Check for dynamic imports (can be nested anywhere)\n if (is_dynamic_import(node)) {\n const arg = node.arguments[0] as ts.StringLiteral\n // Use is_external_module to determine if internal or external\n if (is_external_module(ctx, source_file, arg.text)) {\n const result = extract_external_dynamic_import(ctx, node, file_id)\n if (err.any(result)) return result\n external_imports.push(result)\n } else {\n const result = extract_dynamic_import(ctx, source_file, node, file_id)\n if (result) imports.push(result)\n }\n }\n\n // Recursively visit child nodes for more dynamic imports\n ts.forEachChild(node, find_dynamic_imports)\n }\n\n let error: Err | undefined = undefined\n // Process top-level statements only\n ts.forEachChild(source_file, (statement) => {\n if (error) return\n\n const res = parse_node(ctx, source_file, statement, file_id)\n if (err.any(res)) {\n error = res\n return\n }\n imports.push(...res.imports)\n symbols.push(...res.symbols)\n external_imports.push(...res.external_imports)\n\n // Find dynamic imports recursively within this statement\n error = find_dynamic_imports(statement)\n })\n\n if (error) return error\n return { imports, symbols, external_imports }\n}\n\nexport function parse_node(ctx: Context, source_file: ts.SourceFile, node: ts.Node, file_id: number) {\n const imports: db.NewImport[] = []\n const symbols: db.NewSymbol[] = []\n const external_imports: db.NewExternalImport[] = []\n\n if (is_external_import(ctx, source_file, node)) {\n const result = extract_external_import(ctx, node, file_id)\n if (err.any(result)) return result\n external_imports.push(...result)\n } else if (is_import(ctx, source_file, node)) {\n imports.push(...extract_import(ctx, source_file, node, file_id))\n } else if (ts.isExportAssignment(node) && !node.isExportEquals) {\n symbols.push({\n file_id,\n type: 'variable',\n name: 'default',\n text: node.getText(source_file),\n meta: JSON.stringify({\n declaration_kind: 'const',\n type: null,\n value: node.expression.getText(source_file),\n decorators: [],\n comment: null,\n }),\n is_exported: true,\n state: 'to_link',\n })\n } else if (ts.isExportDeclaration(node) && node.exportClause && ts.isNamedExports(node.exportClause) && !node.moduleSpecifier) {\n for (const element of node.exportClause.elements) {\n if (element.name.text === 'default') {\n const localName = element.propertyName?.text || element.name.text\n symbols.push({\n file_id,\n type: 'variable',\n name: 'default',\n text: node.getText(source_file),\n meta: JSON.stringify({ declaration_kind: 'const', type: null, value: localName, is_reexport: true, decorators: [], comment: null }),\n is_exported: true,\n state: 'to_link',\n })\n }\n }\n } else if (is_type(node)) {\n symbols.push(extract_type_symbol(node, file_id, source_file))\n } else if (is_function(node)) {\n symbols.push(extract_function_symbol(node, file_id, source_file))\n } else if (ts.isVariableStatement(node)) {\n // Handle each declaration in the variable statement individually\n symbols.push(...extract_variable_symbol(node, file_id, source_file))\n } else if (is_class(node)) {\n symbols.push(extract_class_symbol(node, file_id, source_file))\n symbols.push(...extract_class_fields(node, file_id, source_file))\n }\n\n return { imports, symbols, external_imports }\n}\n","import ts from 'typescript'\nimport * as db from '../../db'\nimport { err } from '../../internals/errors'\nimport type { Context } from '../../types'\nimport { is_external_module } from './common'\n\nexport function is_import(ctx: Context, source_file: ts.SourceFile, node: ts.Node): node is ts.ImportDeclaration {\n if (!ts.isImportDeclaration(node) || !node.moduleSpecifier || !ts.isStringLiteral(node.moduleSpecifier)) return false\n return !is_external_module(ctx, source_file, node.moduleSpecifier.text)\n}\n\nexport function extract_import(ctx: Context, source_file: ts.SourceFile, node: ts.ImportDeclaration, file_id: number): db.NewImport[] {\n const imports: db.NewImport[] = []\n const clause = node.importClause\n if (!clause || !node.moduleSpecifier || !ts.isStringLiteral(node.moduleSpecifier)) return imports\n\n // Resolve the exporter file ID from the module specifier\n const exporter_file_id = resolve_exporter_file(ctx, source_file, node.moduleSpecifier.text)\n if (err.any(exporter_file_id)) return imports // Skip if can't resolve\n\n // Default import\n if (clause.name) {\n imports.push({\n importer_file_id: file_id,\n exporter_file_id,\n name: 'default',\n alias: clause.name.text,\n state: 'to_link',\n })\n }\n\n // Named imports\n if (clause.namedBindings && ts.isNamedImports(clause.namedBindings)) {\n for (const element of clause.namedBindings.elements) {\n imports.push({\n importer_file_id: file_id,\n exporter_file_id,\n name: (element.propertyName || element.name).text,\n alias: element.name.text,\n state: 'to_link',\n })\n }\n }\n\n // Namespace import\n if (clause.namedBindings && ts.isNamespaceImport(clause.namedBindings)) {\n imports.push({\n importer_file_id: file_id,\n exporter_file_id,\n name: '*',\n alias: clause.namedBindings.name.text,\n state: 'to_link',\n })\n }\n\n return imports\n}\n\nexport function extract_dynamic_import(ctx: Context, source_file: ts.SourceFile, node: ts.CallExpression, file_id: number): db.NewImport | null {\n const arg = node.arguments[0]!\n const module_specifier = (arg as ts.StringLiteral).text\n const exporter_file_id = resolve_exporter_file(ctx, source_file, module_specifier)\n if (err.any(exporter_file_id)) return null\n\n return {\n importer_file_id: file_id,\n exporter_file_id,\n name: '*',\n alias: '__dynamic_import__',\n state: 'to_link',\n is_dynamic: true,\n }\n}\n\nfunction resolve_exporter_file(ctx: Context, source_file: ts.SourceFile, module_specifier: string) {\n const resolution = ts.resolveModuleName(module_specifier, source_file.fileName, ctx.program.getCompilerOptions(), ts.sys)\n if (!resolution.resolvedModule) {\n return err.new('module_resolution_failed', { module: module_specifier, from: source_file.fileName })\n }\n\n const resolved_path = resolution.resolvedModule.resolvedFileName\n const file_path = resolved_path.startsWith(ctx.project_path) ? resolved_path.slice(ctx.project_path.length) : resolved_path\n const file = db.files.by_path(ctx, file_path)\n if (err.any(file)) return file\n if (!file) {\n return err.new('exporter_file_not_found', { path: file_path, module: module_specifier })\n }\n\n return file.id\n}\n","import path from 'path'\nimport ts from 'typescript'\nimport * as db from '../../db'\nimport type { Context } from '../../types'\n\nexport function is_external_module(ctx: Context, source_file: ts.SourceFile, module_path: string): boolean {\n const resolved = ts.resolveModuleName(module_path, source_file.fileName, ctx.program.getCompilerOptions(), ts.sys)\n if (!resolved.resolvedModule) return true\n const resolved_path = path.resolve(resolved.resolvedModule.resolvedFileName)\n return !resolved_path.startsWith(ctx.project_path)\n}\n\nexport function has_export_modifier(node: ts.Node): boolean {\n if (!ts.canHaveModifiers(node)) return false\n const modifiers = ts.getModifiers(node)\n if (!modifiers) return false\n return modifiers.some((m) => m.kind === ts.SyntaxKind.ExportKeyword)\n}\n\nexport function has_default_modifier(node: ts.Node): boolean {\n if (!ts.canHaveModifiers(node)) return false\n const modifiers = ts.getModifiers(node)\n if (!modifiers) return false\n return modifiers.some((m) => m.kind === ts.SyntaxKind.DefaultKeyword)\n}\n\nexport function extract_parameters(\n node: ts.FunctionDeclaration | ts.ArrowFunction | ts.FunctionExpression | ts.MethodDeclaration,\n source_file?: ts.SourceFile\n): db.Parameter[] {\n return node.parameters.map((param) => ({\n name: ts.isIdentifier(param.name) ? param.name.text : param.name.getText(source_file),\n type: param.type ? param.type.getText(source_file) : null,\n optional: !!param.questionToken,\n rest: !!param.dotDotDotToken,\n default: param.initializer ? param.initializer.getText(source_file) : null,\n }))\n}\n\nexport function extract_type_parameters(node: ts.Node, source_file?: ts.SourceFile): string[] {\n if (!('typeParameters' in node) || !node.typeParameters) return []\n return (node.typeParameters as ts.NodeArray<ts.TypeParameterDeclaration>).map((tp) => tp.getText(source_file))\n}\n\nexport function extract_jsdoc_comment(node: ts.Node, source_file?: ts.SourceFile): string | null {\n const sf = source_file || node.getSourceFile()\n if (!sf) return null\n\n const sourceText = sf.getFullText()\n const ranges = ts.getLeadingCommentRanges(sourceText, node.getFullStart())\n if (!ranges || ranges.length === 0) return null\n\n // Get the last comment (closest to the node)\n const lastComment = ranges[ranges.length - 1]\n if (!lastComment) return null\n const commentText = sourceText.slice(lastComment.pos, lastComment.end)\n\n // Only return JSDoc comments (/** ... */)\n if (commentText.startsWith('/**')) {\n return commentText\n }\n\n return null\n}\n\nexport function extract_decorators(node: ts.Node, source_file?: ts.SourceFile): db.Decorator[] {\n if (!ts.canHaveDecorators(node)) return []\n const decorators = ts.getDecorators(node)\n if (!decorators) return []\n\n const sf = source_file || node.getSourceFile()\n\n return decorators.map((decorator) => {\n const expr = decorator.expression\n if (ts.isIdentifier(expr)) {\n return { name: expr.text }\n }\n if (ts.isCallExpression(expr) && ts.isIdentifier(expr.expression)) {\n return {\n name: expr.expression.text,\n arguments: expr.arguments.map((arg) => arg.getText(sf)),\n }\n }\n return { name: decorator.expression.getText(sf) }\n })\n}\n\nexport function is_builtin_module(package_name: string): boolean {\n const builtins = [\n 'fs',\n 'path',\n 'http',\n 'https',\n 'url',\n 'crypto',\n 'os',\n 'util',\n 'stream',\n 'events',\n 'buffer',\n 'child_process',\n 'cluster',\n 'dns',\n 'net',\n 'tls',\n 'dgram',\n 'readline',\n 'repl',\n 'vm',\n 'zlib',\n 'assert',\n 'querystring',\n 'string_decoder',\n 'timers',\n 'tty',\n 'v8',\n 'worker_threads',\n ]\n return builtins.includes(package_name) || package_name.startsWith('node:')\n}\n\nexport function is_dynamic_import(node: ts.Node): node is ts.CallExpression {\n if (!ts.isCallExpression(node)) return false\n if (node.expression.kind !== ts.SyntaxKind.ImportKeyword) return false\n if (node.arguments.length !== 1) return false\n\n const arg = node.arguments[0]\n if (!arg) return false\n return ts.isStringLiteral(arg) // Only support string literals for now\n}\n","import ts from 'typescript'\nimport * as db from '../../db'\nimport { err } from '../../internals/errors'\nimport type { Context } from '../../types'\nimport { is_builtin_module, is_external_module } from './common'\n\nexport function is_external_import(ctx: Context, source_file: ts.SourceFile, node: ts.Node): node is ts.ImportDeclaration {\n if (!ts.isImportDeclaration(node) || !node.moduleSpecifier || !ts.isStringLiteral(node.moduleSpecifier)) return false\n return is_external_module(ctx, source_file, node.moduleSpecifier.text)\n}\n\n// Parse module specifier into base package and subpath\n// Examples:\n// 'lodash/fp' -> { pkg: 'lodash', subpath: '/fp', is_builtin: false }\n// '@scope/name/sub/path' -> { pkg: '@scope/name', subpath: '/sub/path', is_builtin: false }\n// 'fs' -> { pkg: 'fs', subpath: null, is_builtin: true }\n// 'node:path' -> { pkg: 'path', subpath: null, is_builtin: true }\nfunction parse_module_specifier(spec: string): { pkg: string; subpath: string | null; is_builtin: boolean } {\n let is_builtin = false\n let normalized = spec\n\n // Handle node: protocol\n if (spec.startsWith('node:')) {\n normalized = spec.slice(5)\n is_builtin = true\n } else {\n is_builtin = is_builtin_module(spec)\n }\n\n // Parse scoped vs unscoped packages\n if (normalized.startsWith('@')) {\n // Scoped: @scope/name/subpath -> pkg='@scope/name', subpath='/subpath'\n const parts = normalized.split('/')\n if (parts.length <= 2) {\n return { pkg: normalized, subpath: null, is_builtin }\n }\n const pkg = `${parts[0]}/${parts[1]}`\n const subpath = '/' + parts.slice(2).join('/')\n return { pkg, subpath, is_builtin }\n } else {\n // Unscoped: lodash/fp -> pkg='lodash', subpath='/fp'\n const slash_idx = normalized.indexOf('/')\n if (slash_idx === -1) {\n return { pkg: normalized, subpath: null, is_builtin }\n }\n const pkg = normalized.slice(0, slash_idx)\n const subpath = normalized.slice(slash_idx)\n return { pkg, subpath, is_builtin }\n }\n}\n\ntype ExternalImportInfo = {\n package: string\n subpath: string | null\n name: string | null\n alias: string\n is_builtin: boolean\n}\n\nfunction extract_external_import_info(node: ts.ImportDeclaration): ExternalImportInfo[] {\n const results: ExternalImportInfo[] = []\n const module_specifier = (node.moduleSpecifier as ts.StringLiteral).text\n const { pkg, subpath, is_builtin } = parse_module_specifier(module_specifier)\n const clause = node.importClause\n\n // Side-effect-only import: import 'reflect-metadata'\n if (!clause) {\n results.push({\n package: pkg,\n subpath,\n name: null,\n alias: '__side_effect__',\n is_builtin,\n })\n return results\n }\n\n // Default import\n if (clause.name) {\n results.push({\n package: pkg,\n subpath,\n name: 'default',\n alias: clause.name.text,\n is_builtin,\n })\n }\n\n // Named imports\n if (clause.namedBindings && ts.isNamedImports(clause.namedBindings)) {\n for (const element of clause.namedBindings.elements) {\n results.push({\n package: pkg,\n subpath,\n name: (element.propertyName || element.name).text,\n alias: element.name.text,\n is_builtin,\n })\n }\n }\n\n // Namespace import\n if (clause.namedBindings && ts.isNamespaceImport(clause.namedBindings)) {\n results.push({\n package: pkg,\n subpath,\n name: '*',\n alias: clause.namedBindings.name.text,\n is_builtin,\n })\n }\n\n return results\n}\n\nexport function extract_external_import(ctx: Context, node: ts.ImportDeclaration, file_id: number) {\n const infos = extract_external_import_info(node)\n const external_imports: db.NewExternalImport[] = []\n\n for (const info of infos) {\n const dep_meta = Object.values(ctx.dependencies).find((dep) => info.package.startsWith(dep.name))\n const dependency = db.external_dependencies.get_or_create(ctx, {\n package: info.package,\n subpath: info.subpath,\n name: info.name,\n version: dep_meta?.version,\n github_repo: dep_meta?.github_repo,\n is_builtin: info.is_builtin,\n state: 'to_describe',\n })\n if (err.any(dependency)) return dependency\n external_imports.push({ file_id, external_dependency_id: dependency.id, alias: info.alias, is_dynamic: false })\n }\n\n return external_imports\n}\n\nexport function extract_external_dynamic_import(ctx: Context, node: ts.CallExpression, file_id: number) {\n const arg = node.arguments[0]!\n const module_specifier = (arg as ts.StringLiteral).text\n const { pkg, subpath, is_builtin } = parse_module_specifier(module_specifier)\n const dep_meta = Object.values(ctx.dependencies).find((dep) => pkg.startsWith(dep.name))\n const dependency = db.external_dependencies.get_or_create(ctx, {\n package: pkg,\n subpath,\n name: '*',\n version: dep_meta?.version,\n github_repo: dep_meta?.github_repo,\n is_builtin,\n state: 'to_describe',\n })\n if (err.any(dependency)) return dependency\n return { file_id, external_dependency_id: dependency.id, alias: '__dynamic_import__', is_dynamic: true }\n}\n","import ts from 'typescript'\nimport * as db from '../../db'\nimport { has_export_modifier, extract_decorators, extract_jsdoc_comment, extract_type_parameters } from './common'\n\nexport function is_type(node: ts.Node): node is ts.TypeAliasDeclaration | ts.InterfaceDeclaration | ts.EnumDeclaration {\n return ts.isTypeAliasDeclaration(node) || ts.isInterfaceDeclaration(node) || ts.isEnumDeclaration(node)\n}\n\nexport function extract_type_symbol(\n node: ts.TypeAliasDeclaration | ts.InterfaceDeclaration | ts.EnumDeclaration,\n file_id: number,\n source_file?: ts.SourceFile\n): db.NewSymbol {\n const meta: db.TypeMeta = ts.isEnumDeclaration(node)\n ? extract_enum_meta(node, source_file)\n : ts.isInterfaceDeclaration(node)\n ? extract_interface_meta(node, source_file)\n : extract_type_alias_meta(node, source_file)\n\n return {\n file_id,\n type: 'type',\n name: node.name.text,\n text: node.getText(source_file),\n meta: JSON.stringify(meta),\n is_exported: has_export_modifier(node),\n state: 'to_link',\n }\n}\n\nfunction extract_enum_meta(node: ts.EnumDeclaration, source_file?: ts.SourceFile): db.TypeMeta {\n const enum_values: Record<string, string> = {}\n \n for (const member of node.members) {\n if (ts.isIdentifier(member.name) || ts.isStringLiteral(member.name)) {\n const name = member.name.text\n const value = member.initializer ? member.initializer.getText(source_file) : 'auto'\n enum_values[name] = value\n }\n }\n\n return {\n kind: 'enum',\n type_parameters: [],\n extends: [],\n members: [],\n enum_values,\n decorators: extract_decorators(node, source_file),\n comment: extract_jsdoc_comment(node, source_file),\n }\n}\n\nfunction extract_interface_meta(node: ts.InterfaceDeclaration, source_file?: ts.SourceFile): db.TypeMeta {\n const members: db.TypeMember[] = []\n \n for (const member of node.members) {\n if (ts.isPropertySignature(member) && ts.isIdentifier(member.name)) {\n members.push({\n name: member.name.text,\n type: member.type ? member.type.getText(source_file) : 'any',\n optional: !!member.questionToken,\n })\n } else if (ts.isMethodSignature(member) && ts.isIdentifier(member.name)) {\n const params = member.parameters.map((p) => {\n const param_type = p.type ? p.type.getText(source_file) : 'any'\n return `${p.name.getText(source_file)}: ${param_type}`\n }).join(', ')\n const return_type = member.type ? member.type.getText(source_file) : 'void'\n members.push({\n name: member.name.text,\n type: `(${params}) => ${return_type}`,\n optional: !!member.questionToken,\n })\n }\n }\n\n const extends_clauses = node.heritageClauses\n ?.filter((c) => c.token === ts.SyntaxKind.ExtendsKeyword)\n .flatMap((c) => c.types.map((t) => t.expression.getText(source_file))) || []\n\n return {\n kind: 'interface',\n type_parameters: extract_type_parameters(node, source_file),\n extends: extends_clauses,\n members,\n enum_values: {},\n decorators: extract_decorators(node, source_file),\n comment: extract_jsdoc_comment(node, source_file),\n }\n}\n\nfunction extract_type_alias_meta(node: ts.TypeAliasDeclaration, source_file?: ts.SourceFile): db.TypeMeta {\n return {\n kind: 'type_alias',\n type_parameters: extract_type_parameters(node, source_file),\n extends: [],\n members: [],\n enum_values: {},\n decorators: extract_decorators(node, source_file),\n comment: extract_jsdoc_comment(node, source_file),\n }\n}\n","import ts from 'typescript'\nimport * as db from '../../db'\nimport { extract_decorators, extract_jsdoc_comment, extract_parameters, extract_type_parameters, has_export_modifier, has_default_modifier } from './common'\n\nexport function is_function(node: ts.Node): node is ts.FunctionDeclaration {\n if (!ts.isFunctionDeclaration(node)) return false\n return !!node.name || has_default_modifier(node)\n}\n\nexport function extract_function_symbol(node: ts.FunctionDeclaration, file_id: number, source_file?: ts.SourceFile): db.NewSymbol {\n const is_default = has_default_modifier(node)\n const name = is_default ? 'default' : (node.name?.text || 'default')\n \n const meta: db.FunctionMeta = {\n kind: 'function_declaration',\n parameters: extract_parameters(node, source_file),\n return_type: node.type ? node.type.getText(source_file) : null,\n type_parameters: extract_type_parameters(node, source_file),\n modifiers: {\n async: !!node.modifiers?.some((m) => m.kind === ts.SyntaxKind.AsyncKeyword),\n generator: !!node.asteriskToken,\n },\n decorators: extract_decorators(node, source_file),\n comment: extract_jsdoc_comment(node, source_file),\n }\n\n return {\n file_id,\n type: 'function',\n name,\n text: node.getText(source_file),\n meta: JSON.stringify(meta),\n is_exported: has_export_modifier(node),\n state: 'to_link',\n }\n}\n","import ts from 'typescript'\nimport * as db from '../../db'\nimport { has_export_modifier, extract_decorators, extract_jsdoc_comment, extract_parameters, extract_type_parameters } from './common'\n\nfunction is_function_declaration(declaration: ts.VariableDeclaration): boolean {\n return !!(declaration.initializer && (ts.isArrowFunction(declaration.initializer) || ts.isFunctionExpression(declaration.initializer)))\n}\n\nexport function extract_variable_symbol(node: ts.VariableStatement, file_id: number, source_file?: ts.SourceFile): db.NewSymbol[] {\n const symbols: db.NewSymbol[] = []\n const is_exported = has_export_modifier(node)\n const declaration_kind =\n node.declarationList.flags & ts.NodeFlags.Const ? 'const' : node.declarationList.flags & ts.NodeFlags.Let ? 'let' : 'var'\n\n for (const declaration of node.declarationList.declarations) {\n if (!ts.isIdentifier(declaration.name)) continue\n\n if (is_function_declaration(declaration)) {\n const func_node = declaration.initializer as ts.ArrowFunction | ts.FunctionExpression\n const meta: db.FunctionMeta = {\n kind: ts.isArrowFunction(func_node) ? 'arrow_function' : 'function_expression',\n parameters: extract_parameters(func_node, source_file),\n return_type: func_node.type ? func_node.type.getText(source_file) : null,\n type_parameters: extract_type_parameters(func_node, source_file),\n modifiers: {\n async: !!func_node.modifiers?.some((m) => m.kind === ts.SyntaxKind.AsyncKeyword),\n generator: ts.isFunctionExpression(func_node) && !!func_node.asteriskToken,\n },\n decorators: extract_decorators(node, source_file),\n comment: extract_jsdoc_comment(node, source_file),\n }\n\n symbols.push({\n file_id,\n type: 'function',\n name: declaration.name.text,\n text: node.getText(source_file),\n meta: JSON.stringify(meta),\n is_exported,\n state: 'to_link',\n })\n } else {\n const meta: db.VariableMeta = {\n declaration_kind,\n type: declaration.type ? declaration.type.getText(source_file) : null,\n value: declaration.initializer ? declaration.initializer.getText(source_file) : null,\n decorators: extract_decorators(node, source_file),\n comment: extract_jsdoc_comment(node, source_file),\n }\n\n symbols.push({\n file_id,\n type: 'variable',\n name: declaration.name.text,\n text: node.getText(source_file),\n meta: JSON.stringify(meta),\n is_exported,\n state: 'to_link',\n })\n }\n }\n return symbols\n}\n","import ts from 'typescript'\nimport * as db from '../../db'\nimport { has_export_modifier, has_default_modifier, extract_type_parameters, extract_decorators, extract_jsdoc_comment, extract_parameters } from './common'\n\nexport function is_class(node: ts.Node): node is ts.ClassDeclaration {\n if (!ts.isClassDeclaration(node)) return false\n return !!node.name || has_default_modifier(node)\n}\n\nexport function extract_class_symbol(node: ts.ClassDeclaration, file_id: number, source_file?: ts.SourceFile): db.NewSymbol {\n const is_default = has_default_modifier(node)\n const name = is_default ? 'default' : (node.name?.text || 'default')\n \n const meta: db.ClassMeta = {\n extends: node.heritageClauses?.find((c) => c.token === ts.SyntaxKind.ExtendsKeyword)?.types[0]?.expression.getText(source_file) || null,\n implements:\n node.heritageClauses\n ?.find((c) => c.token === ts.SyntaxKind.ImplementsKeyword)\n ?.types.map((t) => t.expression.getText(source_file)) || [],\n type_parameters: extract_type_parameters(node, source_file),\n modifiers: {\n abstract: !!node.modifiers?.some((m) => m.kind === ts.SyntaxKind.AbstractKeyword),\n },\n decorators: extract_decorators(node, source_file),\n comment: extract_jsdoc_comment(node, source_file),\n }\n\n return {\n file_id,\n type: 'class',\n name,\n text: node.getText(source_file),\n meta: JSON.stringify(meta),\n is_exported: has_export_modifier(node),\n state: 'to_link',\n }\n}\n\nfunction get_visibility(member: ts.ClassElement): db.Visibility | null {\n if (!ts.canHaveModifiers(member)) return null\n const modifiers = ts.getModifiers(member)\n if (!modifiers) return null\n\n if (modifiers.some((m) => m.kind === ts.SyntaxKind.PrivateKeyword)) return 'private'\n if (modifiers.some((m) => m.kind === ts.SyntaxKind.ProtectedKeyword)) return 'protected'\n if (modifiers.some((m) => m.kind === ts.SyntaxKind.PublicKeyword)) return 'public'\n return null\n}\n\nexport function extract_class_fields(node: ts.ClassDeclaration, file_id: number, source_file?: ts.SourceFile): db.NewSymbol[] {\n const symbols: db.NewSymbol[] = []\n \n // Anonymous classes (default exports) don't have extractable members\n if (!node.name) return symbols\n \n const class_name = node.name.text\n\n node.members.forEach((member) => {\n if (ts.isMethodDeclaration(member) && member.name && ts.isIdentifier(member.name)) {\n const meta: db.ClassMethodMeta = {\n class_name,\n visibility: get_visibility(member),\n parameters: extract_parameters(member, source_file),\n return_type: member.type ? member.type.getText(source_file) : null,\n type_parameters: extract_type_parameters(member, source_file),\n modifiers: {\n static: !!member.modifiers?.some((m) => m.kind === ts.SyntaxKind.StaticKeyword),\n async: !!member.modifiers?.some((m) => m.kind === ts.SyntaxKind.AsyncKeyword),\n abstract: !!member.modifiers?.some((m) => m.kind === ts.SyntaxKind.AbstractKeyword),\n readonly: !!member.modifiers?.some((m) => m.kind === ts.SyntaxKind.ReadonlyKeyword),\n },\n decorators: extract_decorators(member, source_file),\n comment: extract_jsdoc_comment(member, source_file),\n }\n\n symbols.push({\n file_id,\n type: 'class_method',\n name: `${class_name}.${member.name.text}`,\n text: member.getText(source_file),\n meta: JSON.stringify(meta),\n is_exported: false,\n state: 'to_link',\n })\n }\n\n if (ts.isPropertyDeclaration(member) && member.name && ts.isIdentifier(member.name)) {\n const meta: db.ClassPropertyMeta = {\n class_name,\n visibility: get_visibility(member),\n type: member.type ? member.type.getText(source_file) : null,\n optional: !!member.questionToken,\n modifiers: {\n static: !!member.modifiers?.some((m) => m.kind === ts.SyntaxKind.StaticKeyword),\n readonly: !!member.modifiers?.some((m) => m.kind === ts.SyntaxKind.ReadonlyKeyword),\n abstract: !!member.modifiers?.some((m) => m.kind === ts.SyntaxKind.AbstractKeyword),\n },\n decorators: extract_decorators(member, source_file),\n comment: extract_jsdoc_comment(member, source_file),\n }\n\n symbols.push({\n file_id,\n type: 'class_property',\n name: `${class_name}.${member.name.text}`,\n text: member.getText(source_file),\n meta: JSON.stringify(meta),\n is_exported: false,\n state: 'to_link',\n })\n }\n })\n\n return symbols\n}\n","import type { Context } from '@src/types'\nimport { err } from '@src/internals/errors'\nimport * as db from '@src/db'\n\nexport async function link_imports(ctx: Context) {\n const imports = err.or_throw(db.imports.by_state(ctx, 'to_link'))\n let i = 0\n for (const import_ of imports) {\n const res = link_import(ctx, import_)\n if (err.any(res)) err.or_throw(db.imports.update(ctx, import_.id, { error: String(res) }))\n }\n}\n\nfunction link_import(ctx: Context, import_: db.Import) {\n // Handle namespace imports (import * as foo)\n if (import_.name === '*') {\n // Namespace imports don't link to a specific symbol - they import everything\n return db.imports.update(ctx, import_.id, { state: 'ready', error: null })\n }\n\n const symbol = db.symbols.by_file_and_name(ctx, { file_id: import_.exporter_file_id, name: import_.name, is_exported: true })\n if (err.any(symbol)) return symbol\n if (!symbol) return err.new('exported_symbol_not_found', { name: import_.name, file_id: import_.exporter_file_id })\n return db.imports.update(ctx, import_.id, { symbol_id: symbol.id, state: 'ready', error: null })\n}\n","import path from 'path'\nimport ts from 'typescript'\nimport * as db from '@src/db'\nimport { err } from '@src/internals/errors'\nimport type { Context } from '@src/types'\nimport { has_default_modifier } from './scan_files/common'\n\ntype Resolution = { type: 'internal'; symbol_id: number; file_id: number } | { type: 'external'; external_import_id: number }\n\nexport async function link_symbols(ctx: Context) {\n const symbols = err.or_throw(db.symbols.by_state(ctx, 'to_link'))\n let i = 0\n for (const symbol of symbols) {\n const res = link_symbol(ctx, symbol)\n if (err.any(res)) {\n err.or_throw(db.symbols.update(ctx, symbol.id, { error: String(res) }))\n }\n }\n}\n\nfunction link_symbol(ctx: Context, symbol: db.Symbol) {\n if (!symbol.text) return err.new('symbol_missing_text', { symbol_id: symbol.id, name: symbol.name })\n\n const resolutions = find_symbol_references(ctx, symbol)\n if (err.any(resolutions)) return resolutions\n\n for (const resolution of resolutions) {\n if (resolution.type === 'internal') create_internal_link(ctx, symbol, resolution)\n if (resolution.type === 'external') create_external_link(ctx, symbol, resolution)\n }\n\n return db.symbols.update(ctx, symbol.id, { state: 'to_describe', error: null })\n}\n\nfunction find_symbol_references(ctx: Context, symbol: db.Symbol) {\n const file = db.files.by_id(ctx, symbol.file_id)\n if (err.any(file)) return file\n if (!file) return err.new('file_not_found', { path: `file_id=${symbol.file_id}` })\n\n const file_path = path.join(ctx.project_path, file.path)\n const source_file = ctx.program.getSourceFile(file_path)\n if (!source_file) return err.new('file_not_found', { path: file_path })\n\n const symbol_node = find_symbol_node(source_file, symbol)\n if (!symbol_node) return err.new('symbol_node_not_found', { symbol_id: symbol.id, name: symbol.name, file_path: file.path })\n\n const type_checker = ctx.program.getTypeChecker()\n const resolutions: Resolution[] = []\n const seen = new Set<string>()\n\n function visit(node: ts.Node) {\n const ts_symbol = type_checker.getSymbolAtLocation(node)\n if (!ts.isIdentifier(node) || is_declaration(node.parent, node) || !ts_symbol) {\n ts.forEachChild(node, visit)\n return\n }\n const resolution = resolve_ts_symbol(ctx, type_checker, ts_symbol, symbol)\n if (resolution) {\n const key = `${resolution.type}:${resolution.type === 'internal' ? resolution.symbol_id : resolution.external_import_id}`\n if (!seen.has(key)) {\n seen.add(key)\n resolutions.push(resolution)\n }\n }\n ts.forEachChild(node, visit)\n }\n\n visit(symbol_node)\n return resolutions\n}\n\nfunction resolve_ts_symbol(ctx: Context, type_checker: ts.TypeChecker, ts_symbol: ts.Symbol, from_symbol: db.Symbol): Resolution | null {\n let symbol_to_use = ts_symbol\n\n if (ts_symbol.flags & ts.SymbolFlags.Alias) {\n symbol_to_use = type_checker.getAliasedSymbol(ts_symbol) || symbol_to_use\n }\n\n const declarations = symbol_to_use.getDeclarations()\n if (!declarations || declarations.length === 0 || !declarations[0]) return null\n\n const declaration_source_file = declarations[0].getSourceFile()\n\n if (declaration_source_file.fileName.includes('/lib.') && !declaration_source_file.fileName.includes('node_modules')) {\n return null\n }\n\n // Handle external imports from node_modules or outside project path\n if (!declaration_source_file.fileName.startsWith(ctx.project_path) || declaration_source_file.fileName.includes('node_modules')) {\n const external_import_links = db.external_imports.by_file(ctx, from_symbol.file_id)\n if (err.any(external_import_links)) return null\n\n for (const ext_import of external_import_links) {\n const ext_dep = db.external_dependencies.by_id(ctx, ext_import.external_dependency_id)\n if (err.any(ext_dep) || !ext_dep) continue\n\n if (ext_import.alias === symbol_to_use.name || ext_dep.name === symbol_to_use.name) {\n return { type: 'external', external_import_id: ext_import.id }\n }\n }\n return null\n }\n\n let file_path = declaration_source_file.fileName\n if (file_path.startsWith(ctx.project_path)) {\n file_path = file_path.substring(ctx.project_path.length)\n }\n\n const file = db.files.by_path(ctx, file_path)\n if (err.any(file) || !file) return null\n\n if (file.id === from_symbol.file_id) {\n const file_symbols = db.symbols.by_file(ctx, file.id)\n if (err.any(file_symbols)) return null\n\n for (const file_symbol of file_symbols) {\n if (file_symbol.name === symbol_to_use.name && file_symbol.id !== from_symbol.id) {\n return { type: 'internal', symbol_id: file_symbol.id, file_id: file.id }\n }\n }\n return null\n }\n\n const file_symbols = db.symbols.by_file(ctx, file.id)\n if (err.any(file_symbols)) return null\n\n for (const file_symbol of file_symbols) {\n if (file_symbol.name === symbol_to_use.name) {\n return { type: 'internal', symbol_id: file_symbol.id, file_id: file.id }\n }\n }\n\n return null\n}\n\nfunction find_symbol_node(source_file: ts.SourceFile, symbol: db.Symbol): ts.Node | undefined {\n let result: ts.Node | undefined\n\n function visit(node: ts.Node) {\n if (result) return\n\n if (matches_symbol(node, symbol)) {\n result = node\n return\n }\n\n ts.forEachChild(node, visit)\n }\n\n visit(source_file)\n return result\n}\n\nfunction matches_symbol(node: ts.Node, symbol: db.Symbol): boolean {\n if (symbol.name === 'default') {\n if (symbol.type === 'function' && ts.isFunctionDeclaration(node)) return has_default_modifier(node)\n if (symbol.type === 'class' && ts.isClassDeclaration(node)) return has_default_modifier(node)\n if (symbol.type === 'variable') {\n if (ts.isExportAssignment(node) && !node.isExportEquals) return true\n if (ts.isExportDeclaration(node) && node.exportClause && ts.isNamedExports(node.exportClause)) {\n return node.exportClause.elements.some((element) => element.name.text === 'default')\n }\n }\n }\n\n if (symbol.type === 'function') {\n if (ts.isVariableStatement(node)) {\n const declarations = node.declarationList.declarations\n for (const decl of declarations) {\n if (ts.isIdentifier(decl.name) && decl.name.text === symbol.name) {\n const initializer = decl.initializer\n if (initializer && (ts.isArrowFunction(initializer) || ts.isFunctionExpression(initializer))) {\n return true\n }\n }\n }\n return false\n }\n if (ts.isFunctionDeclaration(node)) {\n return get_node_name(node) === symbol.name\n }\n return false\n }\n\n if (symbol.type === 'class') {\n if (!ts.isClassDeclaration(node)) return false\n return get_node_name(node) === symbol.name\n }\n\n if (symbol.type === 'type') {\n if (!ts.isTypeAliasDeclaration(node) && !ts.isInterfaceDeclaration(node) && !ts.isEnumDeclaration(node)) return false\n return get_node_name(node) === symbol.name\n }\n\n if (symbol.type === 'variable') {\n if (ts.isVariableStatement(node)) {\n const declarations = node.declarationList.declarations\n for (const decl of declarations) {\n if (ts.isIdentifier(decl.name) && decl.name.text === symbol.name) {\n const initializer = decl.initializer\n if (!initializer || (!ts.isArrowFunction(initializer) && !ts.isFunctionExpression(initializer))) {\n return true\n }\n }\n }\n }\n return false\n }\n\n if (symbol.type === 'class_method') {\n if (!ts.isMethodDeclaration(node)) return false\n const method_name = get_node_name(node)\n if (!method_name) return false\n const class_node = node.parent\n if (!class_node || !ts.isClassDeclaration(class_node)) return false\n const class_name = get_node_name(class_node)\n if (!class_name) return false\n return `${class_name}.${method_name}` === symbol.name\n }\n\n if (symbol.type === 'class_property') {\n if (!ts.isPropertyDeclaration(node)) return false\n const prop_name = get_node_name(node)\n if (!prop_name) return false\n const class_node = node.parent\n if (!class_node || !ts.isClassDeclaration(class_node)) return false\n const class_name = get_node_name(class_node)\n if (!class_name) return false\n return `${class_name}.${prop_name}` === symbol.name\n }\n\n return false\n}\n\nfunction get_node_name(node: ts.Node): string | undefined {\n if (!('name' in node)) return undefined\n const nodeWithName = node as ts.Node & { name?: ts.Node }\n if (nodeWithName.name && ts.isIdentifier(nodeWithName.name)) {\n return nodeWithName.name.text\n }\n return undefined\n}\n\nfunction is_declaration(parent: ts.Node | undefined, identifier: ts.Identifier): boolean {\n if (!parent) return false\n\n if (ts.isFunctionDeclaration(parent) && parent.name === identifier) return true\n if (ts.isClassDeclaration(parent) && parent.name === identifier) return true\n if (ts.isInterfaceDeclaration(parent) && parent.name === identifier) return true\n if (ts.isTypeAliasDeclaration(parent) && parent.name === identifier) return true\n if (ts.isEnumDeclaration(parent) && parent.name === identifier) return true\n if (ts.isVariableDeclaration(parent) && parent.name === identifier) return true\n if (ts.isParameter(parent) && parent.name === identifier) return true\n if (ts.isPropertyDeclaration(parent) && parent.name === identifier) return true\n if (ts.isMethodDeclaration(parent) && parent.name === identifier) return true\n if (ts.isTypeParameterDeclaration(parent) && parent.name === identifier) return true\n if (ts.isImportClause(parent) && parent.name === identifier) return true\n if (ts.isImportSpecifier(parent) && (parent.name === identifier || parent.propertyName === identifier)) return true\n if (ts.isNamespaceImport(parent) && parent.name === identifier) return true\n\n return false\n}\n\nfunction create_internal_link(ctx: Context, from_symbol: db.Symbol, resolution: Extract<Resolution, { type: 'internal' }>) {\n const existing = db.symbol_internal_links.exists(ctx, {\n from_symbol_id: from_symbol.id,\n to_symbol_id: resolution.symbol_id,\n })\n if (err.any(existing)) return existing\n if (existing) return\n\n return db.symbol_internal_links.insert(ctx, {\n from_file_id: from_symbol.file_id,\n to_file_id: resolution.file_id,\n from_symbol_id: from_symbol.id,\n to_symbol_id: resolution.symbol_id,\n state: 'pending',\n })\n}\n\nfunction create_external_link(ctx: Context, from_symbol: db.Symbol, resolution: Extract<Resolution, { type: 'external' }>) {\n const existing = db.symbol_external_links.exists(ctx, {\n symbol_id: from_symbol.id,\n external_import_id: resolution.external_import_id,\n })\n if (err.any(existing)) return existing\n if (existing) return\n\n return db.symbol_external_links.insert(ctx, {\n symbol_id: from_symbol.id,\n external_import_id: resolution.external_import_id,\n })\n}\n","import type { Context } from '../types'\nimport { track_changes } from './track_changes'\nimport { sync_external_dependencies } from './sync_external_dependencies'\nimport { scan_files } from './scan_files/scan_files'\nimport { link_imports } from './link_imports'\nimport { link_symbols } from './link_symbols'\n\nexport async function update(ctx: Context) {\n await track_changes(ctx)\n await sync_external_dependencies(ctx)\n await scan_files(ctx)\n await link_imports(ctx)\n await link_symbols(ctx)\n // ...\n}\n","import { count } from 'drizzle-orm'\nimport { safe_query } from './db/common'\nimport type { Context, WikiCounts } from './types'\nimport { symbols, files, directories, external_dependencies } from './db/schema'\n\nexport const counts = safe_query('counts', (ctx: Context): WikiCounts => {\n const symbol_counts = ctx.db.select({ state: symbols.state, count: count() }).from(symbols).groupBy(symbols.state).all()\n\n const file_counts = ctx.db.select({ state: files.state, count: count() }).from(files).groupBy(files.state).all()\n\n const dir_counts = ctx.db.select({ state: directories.state, count: count() }).from(directories).groupBy(directories.state).all()\n\n const dep_counts = ctx.db\n .select({ state: external_dependencies.state, count: count() })\n .from(external_dependencies)\n .groupBy(external_dependencies.state)\n .all()\n\n return {\n symbols: get_groups(symbol_counts, ['to_link', 'to_describe', 'ready']),\n files: get_groups(file_counts, ['to_scan', 'to_describe', 'ready']),\n directories: get_groups(dir_counts, ['to_describe', 'ready']),\n dependencies: get_groups(dep_counts, ['to_describe', 'ready']),\n }\n})\n\nfunction get_groups<K extends string>(items: Array<{ state: string; count: number }>, states: K[]): Record<K | 'total', number> {\n const groups = { total: 0 } as Record<K | 'total', number>\n for (const state of states) groups[state] = 0\n for (const item of items) {\n if (!states.includes(item.state as K)) continue\n groups[item.state as K] = (groups[item.state as K] || 0) + item.count\n groups.total += item.count\n }\n return groups\n}\n","import * as db from './db'\nimport { err } from './internals/errors'\nimport { expand } from './internals/utils'\nimport type { Context, FilesWiki, RelationOptions } from './types'\nimport type { File, SearchOptions } from './db'\n\nexport function files_wiki(ctx: Context): FilesWiki {\n return {\n get: (id: number) => get(ctx, id),\n search: (options) => search(ctx, options),\n set_description: (id, description) => set_description(ctx, id, description),\n imported_by_file: (file_id, options) => imported_by_file(ctx, file_id, options),\n importing_file: (file_id, options) => importing_file(ctx, file_id, options),\n importing_dependency: (dependency_id, options) => importing_dependency(ctx, dependency_id, options),\n }\n}\n\nfunction get(ctx: Context, id: number) {\n return err.or_throw(db.files.by_id(ctx, id)) ?? null\n}\n\nfunction search<K extends keyof File>(ctx: Context, options?: SearchOptions<File, K>) {\n return err.or_throw(db.files.search(ctx, options)) as Array<Pick<File, K>>\n}\n\nfunction set_description(ctx: Context, id: number, description: string): void {\n err.or_throw(db.files.update(ctx, id, { description }))\n}\n\n// Returns files imported BY this file (i.e., its dependencies)\n// With deep=true, includes all transitive dependencies\nfunction imported_by_file<K extends keyof File>(ctx: Context, file_id: number, options: RelationOptions<File, K> = {}) {\n let imported_files = err.or_throw(db.files.imported_by(ctx, file_id, options.select))\n if (options.deep) {\n imported_files = err.or_throw(\n expand({\n items: imported_files,\n get_children: (file) => db.files.imported_by(ctx, file.id as number, options.select),\n get_key: (file) => file.id as number,\n })\n )\n }\n const start = options.offset ?? 0\n const end = options.limit ? start + options.limit : imported_files.length\n return imported_files.slice(start, end) as Array<Pick<File, K>>\n}\n\n// Returns files that are importing this file (i.e., its consumers/dependents)\n// With deep=true, includes all transitive consumers\nfunction importing_file<K extends keyof File>(ctx: Context, file_id: number, options: RelationOptions<File, K> = {}) {\n let importing_files = err.or_throw(db.files.importing(ctx, file_id, options.select))\n if (options.deep) {\n importing_files = err.or_throw(\n expand({\n items: importing_files,\n get_children: (file) => db.files.importing(ctx, file.id as number, options.select),\n get_key: (file) => file.id as number,\n })\n )\n }\n const start = options.offset ?? 0\n const end = options.limit ? start + options.limit : importing_files.length\n return importing_files.slice(start, end) as Array<Pick<File, K>>\n}\n\nfunction importing_dependency<K extends keyof File>(ctx: Context, dependency_id: number, options: RelationOptions<File, K> = {}) {\n let files_using_dependency = err.or_throw(db.files.using_dependency(ctx, dependency_id, options.select))\n if (options.deep) {\n files_using_dependency = err.or_throw(\n expand({\n items: files_using_dependency,\n get_children: (file) => db.files.importing(ctx, file.id as number, options.select),\n get_key: (file) => file.id as number,\n })\n )\n }\n const start = options.offset ?? 0\n const end = options.limit ? start + options.limit : files_using_dependency.length\n return files_using_dependency.slice(start, end) as Array<Pick<File, K>>\n}\n","import * as db from './db'\nimport { err } from './internals/errors'\nimport { expand } from './internals/utils'\nimport type { Context, SymbolsWiki, RelationOptions } from './types'\nimport type { Symbol, SearchOptions } from './db'\n\nexport function symbols_wiki(ctx: Context): SymbolsWiki {\n return {\n get: (id: number) => get(ctx, id),\n search: (options) => search(ctx, options),\n set_description: (id, description) => set_description(ctx, id, description),\n referencing_symbol: (symbol_id, options) => referencing_symbol(ctx, symbol_id, options),\n referenced_by_symbol: (symbol_id, options) => referenced_by_symbol(ctx, symbol_id, options),\n using_dependency: (dependency_id, options) => using_dependency(ctx, dependency_id, options),\n }\n}\n\nfunction get(ctx: Context, id: number) {\n return err.or_throw(db.symbols.by_id(ctx, id)) ?? null\n}\n\nfunction search<K extends keyof Symbol>(ctx: Context, options?: SearchOptions<Symbol, K>) {\n return err.or_throw(db.symbols.search(ctx, options)) as Array<Pick<Symbol, K>>\n}\n\nfunction set_description(ctx: Context, id: number, description: string): void {\n err.or_throw(db.symbols.update(ctx, id, { description }))\n}\n\n// Returns symbols referenced BY this symbol (i.e., symbols this symbol uses)\n// With deep=true, includes all transitive dependencies\nfunction referenced_by_symbol<K extends keyof Symbol>(ctx: Context, symbol_id: number, options: RelationOptions<Symbol, K> = {}) {\n let referenced_symbols = err.or_throw(db.symbols.referenced_by(ctx, symbol_id, options.select))\n if (options.deep) {\n referenced_symbols = err.or_throw(\n expand({\n items: referenced_symbols,\n get_children: (symbol) => db.symbols.referenced_by(ctx, symbol.id as number, options.select),\n get_key: (symbol) => symbol.id as number,\n })\n )\n }\n const start = options.offset ?? 0\n const end = options.limit ? start + options.limit : referenced_symbols.length\n return referenced_symbols.slice(start, end) as Array<Pick<Symbol, K>>\n}\n\n// Returns symbols that are referencing this symbol (i.e., symbols that use this symbol)\n// With deep=true, includes all transitive consumers\nfunction referencing_symbol<K extends keyof Symbol>(ctx: Context, symbol_id: number, options: RelationOptions<Symbol, K> = {}) {\n let referencing_symbols = err.or_throw(db.symbols.referencing(ctx, symbol_id, options.select))\n if (options.deep) {\n referencing_symbols = err.or_throw(\n expand({\n items: referencing_symbols,\n get_children: (symbol) => db.symbols.referencing(ctx, symbol.id as number, options.select),\n get_key: (symbol) => symbol.id as number,\n })\n )\n }\n const start = options.offset ?? 0\n const end = options.limit ? start + options.limit : referencing_symbols.length\n return referencing_symbols.slice(start, end) as Array<Pick<Symbol, K>>\n}\n\n// Returns symbols using the given external dependency\nfunction using_dependency<K extends keyof Symbol>(ctx: Context, dependency_id: number, options: RelationOptions<Symbol, K> = {}) {\n let symbols_using_dep = err.or_throw(db.symbols.using_dependency(ctx, dependency_id, options.select))\n if (options.deep) {\n symbols_using_dep = err.or_throw(\n expand({\n items: symbols_using_dep,\n get_children: (symbol) => db.symbols.referencing(ctx, symbol.id as number, options.select),\n get_key: (symbol) => symbol.id as number,\n })\n )\n }\n const start = options.offset ?? 0\n const end = options.limit ? start + options.limit : symbols_using_dep.length\n return symbols_using_dep.slice(start, end) as Array<Pick<Symbol, K>>\n}\n","import * as db from './db'\nimport { expand } from './internals/utils'\nimport { err } from './internals/errors'\nimport type { Directory, File, SearchOptions } from './db'\nimport type { Context, DirectoriesWiki, RelationOptions } from './types'\n\nexport function directories_wiki(ctx: Context): DirectoriesWiki {\n return {\n get: (id: number) => get(ctx, id),\n search: (options) => search(ctx, options),\n set_description: (id, description) => set_description(ctx, id, description),\n children: (parent_id, options) => children(ctx, parent_id, options),\n files: (directory_id, options) => directory_files(ctx, directory_id, options),\n }\n}\n\nfunction get(ctx: Context, id: number) {\n return err.or_throw(db.directories.by_id(ctx, id)) ?? null\n}\n\nfunction search<K extends keyof Directory>(ctx: Context, options?: SearchOptions<Directory, K>) {\n return err.or_throw(db.directories.search(ctx, options)) as Array<Pick<Directory, K>>\n}\n\nfunction set_description(ctx: Context, id: number, description: string): void {\n err.or_throw(db.directories.update(ctx, id, { description }))\n}\n\n// Returns child directories of the given directory\n// With deep=true, includes all descendant directories recursively\nfunction children<K extends keyof Directory>(ctx: Context, parent_id: number, options: RelationOptions<Directory, K> = {}) {\n let child_directories = err.or_throw(db.directories.search(ctx, { select: options.select, where: { parent_id }, limit: 10_000 }))\n if (options.deep) {\n child_directories = err.or_throw(\n expand({\n items: child_directories,\n get_children: (dir) => db.directories.search(ctx, { select: options.select, where: { parent_id: dir.id as number }, limit: 10_000 }),\n get_key: (dir) => dir.id as number,\n })\n )\n }\n const start = options.offset ?? 0\n const end = options.limit ? start + options.limit : child_directories.length\n return child_directories.slice(start, end) as Array<Pick<Directory, K>>\n}\n\n// Returns files in the given directory\n// With deep=true, includes files in all subdirectories recursively\nfunction directory_files<K extends keyof File>(ctx: Context, directory_id: number, options: RelationOptions<File, K> = {}) {\n let files_list = err.or_throw(db.files.search(ctx, { select: options.select, where: { directory_id }, limit: 10_000 }))\n if (options.deep) {\n const all_subdirs = err.or_throw(\n expand({\n items: err.or_throw(db.directories.search(ctx, { select: ['id'], where: { parent_id: directory_id }, limit: 10_000 })),\n get_children: (dir) => db.directories.search(ctx, { select: ['id'], where: { parent_id: dir.id as number }, limit: 10_000 }),\n get_key: (dir) => dir.id as number,\n })\n )\n for (const subdir of all_subdirs) {\n const subdir_files = err.or_throw(\n db.files.search(ctx, { select: options.select, where: { directory_id: subdir.id as number }, limit: 10_000 })\n )\n subdir_files.forEach((x) => files_list.push(x))\n }\n }\n\n const start = options.offset ?? 0\n const end = options.limit ? start + options.limit : files_list.length\n return files_list.slice(start, end) as Array<Pick<File, K>>\n}\n","import * as db from './db'\nimport { err } from './internals/errors'\nimport type { Context, DependenciesWiki } from './types'\nimport type { ExternalDependency, SelectOptions, SearchOptions } from './db'\n\nexport function dependencies_wiki(ctx: Context): DependenciesWiki {\n return {\n get: (id: number) => get(ctx, id),\n search: (options) => search(ctx, options),\n set_description: (id, description) => set_description(ctx, id, description),\n used_by_file: (file_id, options) => used_by_file(ctx, file_id, options),\n used_by_symbol: (symbol_id, options) => used_by_symbol(ctx, symbol_id, options),\n }\n}\n\nfunction get(ctx: Context, id: number) {\n return err.or_throw(db.external_dependencies.by_id(ctx, id)) ?? null\n}\n\nfunction search<K extends keyof ExternalDependency>(ctx: Context, options?: SearchOptions<ExternalDependency, K>) {\n return err.or_throw(db.external_dependencies.search(ctx, options)) as Array<Pick<ExternalDependency, K>>\n}\n\nfunction set_description(ctx: Context, id: number, description: string): void {\n err.or_throw(db.external_dependencies.update(ctx, id, { description, state: 'ready', error: null }))\n}\n\n// Returns dependencies that are imported by the given file\nfunction used_by_file<K extends keyof ExternalDependency>(ctx: Context, file_id: number, options?: SelectOptions<ExternalDependency, K>) {\n return err.or_throw(db.external_dependencies.used_by_file(ctx, file_id, options?.select)) as Array<Pick<ExternalDependency, K>>\n}\n\n// Returns dependencies that are referenced by the given symbol\nfunction used_by_symbol<K extends keyof ExternalDependency>(ctx: Context, symbol_id: number, options?: SelectOptions<ExternalDependency, K>) {\n return err.or_throw(db.external_dependencies.used_by_symbol(ctx, symbol_id, options?.select)) as Array<Pick<ExternalDependency, K>>\n}\n","import { context_from_config, context_from_db } from './internals/context'\nimport { err } from './internals/errors'\nimport type { CodeWiki, Config } from './types'\nimport { update } from './update'\nimport { counts } from './counts'\nimport { files_wiki } from './files'\nimport { symbols_wiki } from './symbols'\nimport { directories_wiki } from './directories'\nimport { dependencies_wiki } from './dependencies'\nimport { schema } from './db'\n\nexport type * from './types'\nexport { context_from_config, context_from_db }\n\n// Main API entry points\n\nexport async function create(config: Config): Promise<CodeWiki> {\n const ctx = await context_from_config(config)\n return {\n config,\n update: () => update(ctx),\n counts: () => err.or_throw(counts(ctx)),\n files: files_wiki(ctx),\n symbols: symbols_wiki(ctx),\n directories: directories_wiki(ctx),\n dependencies: dependencies_wiki(ctx),\n }\n}\n\nexport async function load(db_path: string): Promise<CodeWiki> {\n const ctx = await context_from_db(db_path)\n const stored = ctx.db.select().from(schema.configs).get()!\n const config: Config = {\n db_path,\n project_path: stored.project_path,\n description: stored.description ?? undefined,\n package_json_path: stored.package_json_path ?? undefined,\n node_modules_paths: stored.node_modules_paths ? JSON.parse(stored.node_modules_paths) : undefined,\n }\n return {\n config,\n update: () => update(ctx),\n counts: () => err.or_throw(counts(ctx)),\n files: files_wiki(ctx),\n symbols: symbols_wiki(ctx),\n directories: directories_wiki(ctx),\n dependencies: dependencies_wiki(ctx),\n }\n}\n","import dedent from 'dedent'\nimport type { WikiCounts } from '@src/types'\n\nexport function format_counts(counts: WikiCounts): string {\n const total_to_describe = Object.values(counts).reduce((a, b) => a + b.to_describe, 0)\n return dedent`\n stats:\n directories: ${count_text(counts.directories)}\n files: ${count_text(counts.files)}\n symbols: ${count_text(counts.symbols)}\n dependencies: ${count_text(counts.dependencies)}\n\n ${total_to_describe} items to describe, run \\`codewiki describe\\` to start describing the codebase\n `\n}\n\nfunction count_text({ total, ...states }: Record<string, number>) {\n return `${total} (${Object.entries(states)\n .map(([name, value]) => `${value} ${name.replace('_', ' ')}`)\n .join(', ')})`\n}\n\nexport function format_error(error: unknown): string {\n if (typeof error === 'object' && error !== null && 'type' in error) {\n const err = error as any\n switch (err.type) {\n case 'config_file_not_found':\n return `Configuration file codewiki.json not found`\n case 'invalid_config':\n return `Invalid configuration: ${err.data?.errors || 'unknown error'}`\n case 'invalid_json':\n return `Invalid JSON: ${err.data?.error || 'parse error'}`\n case 'invalid_type':\n return `Invalid entity type: ${err.data?.type || 'unknown'}`\n default:\n return err.message || String(error)\n }\n }\n\n if (error instanceof Error) {\n return error.message\n }\n\n return String(error)\n}\n","import { Command } from 'commander'\nimport { env } from '../env.js'\nimport { load_wiki } from './_common.js'\nimport { format_counts } from '../utils.js'\n\nexport const status = new Command('status')\nstatus.description('Show the status of the wiki')\nstatus.action(async () => {\n const wiki = await load_wiki()\n const counts = wiki.counts()\n env.log(format_counts(counts))\n})\n","import dedent from 'dedent'\nimport { Command } from 'commander'\nimport { env } from '@src/cli/env'\nimport { load_wiki } from './_common'\nimport type { CodeWiki, ExternalDependency, Symbol, File, Directory } from '@src/types'\n\ntype NextToDescribe =\n | { type: 'dependency'; entity: ExternalDependency }\n | { type: 'symbol'; entity: Symbol }\n | { type: 'file'; entity: File }\n | { type: 'directory'; entity: Directory }\n | null\n\nexport const describe = new Command('describe')\ndescribe.description('Show the next item to describe')\ndescribe.action(async () => {\n const wiki = await load_wiki()\n const next = get_next_to_describe(wiki)\n if (!next) return env.log('All items are described!')\n if (next.type === 'dependency') return describe_dependency(next.entity)\n // if (next.type === 'symbol') return describe_symbol(wiki, next.entity)\n // if (next.type === 'file') return describe_file(next.entity)\n // if (next.type === 'directory') return describe_directory(next.entity)\n env.log(\n `All external dependencies are described, and we don't support describing other items yet (we are implementing the right order ...). You are done for now!`\n )\n})\n\nfunction describe_dependency(dep: ExternalDependency) {\n env.log(dedent`\n Your task is to describe the following dependency:\n\n import { ${dep.name} } from '${dep.package}${dep.subpath || ''}'\n\n package: ${dep.package}\n version: ${dep.version}\n github: ${dep.github_repo || 'N/A'}\n\n Write a concise developer documentation on the usage of this \\`${dep.name}\\` into a markdown file, then run the following command to save the description:\n \\`codewiki dependencies set-description ${dep.id} <markdown-file>\\`\n `)\n}\n\nfunction describe_symbol(wiki: CodeWiki, sym: Symbol) {\n const file = wiki.files.get(sym.file_id)\n env.log(dedent`\n Your task is to describe the following symbol:\n\n name: ${sym.name}\n type: ${sym.type}\n file: ${file?.path || 'unknown'}\n exported: ${sym.is_exported}\n\n Write a concise developer documentation for this ${sym.type} into a markdown file, then run:\n\n codewiki symbols set-description ${sym.id} <markdown-file>\n `)\n}\n\nfunction describe_file(file: File) {\n env.log(dedent`\n Your task is to describe the following file:\n\n path: ${file.path}\n\n Write a concise description of this file's purpose and contents into a markdown file, then run:\n\n codewiki files set-description ${file.id} <markdown-file>\n `)\n}\n\nfunction describe_directory(dir: Directory) {\n env.log(dedent`\n Your task is to describe the following directory:\n\n path: ${dir.path}\n\n Write a concise description of this directory's purpose and contents into a markdown file, then run:\n\n codewiki directories set-description ${dir.id} <markdown-file>\n `)\n}\n\nfunction get_next_to_describe(wiki: CodeWiki): NextToDescribe {\n // Check dependencies first\n const deps = wiki.dependencies.search({\n where: { state: 'to_describe' },\n limit: 1,\n select: ['id', 'package', 'subpath', 'name', 'version', 'github_repo'],\n })\n if (deps.length > 0) {\n return { type: 'dependency', entity: deps[0] as ExternalDependency }\n }\n\n // Check symbols\n const symbols = wiki.symbols.search({\n where: { state: 'to_describe' },\n limit: 1,\n select: ['id', 'name', 'type', 'file_id', 'is_exported'],\n })\n if (symbols.length > 0) {\n return { type: 'symbol', entity: symbols[0] as Symbol }\n }\n\n // Check files\n const files = wiki.files.search({\n where: { state: 'to_describe' },\n limit: 1,\n select: ['id', 'path'],\n })\n if (files.length > 0) {\n return { type: 'file', entity: files[0] as File }\n }\n\n // Check directories\n const directories = wiki.directories.search({\n where: { state: 'to_describe' },\n limit: 1,\n select: ['id', 'path'],\n })\n if (directories.length > 0) {\n return { type: 'directory', entity: directories[0] as Directory }\n }\n\n return null\n}\n","import { Command } from 'commander'\nimport dedent from 'dedent'\nimport { get } from './get.js'\nimport { search } from './search.js'\nimport { set_description } from './set-description.js'\nimport { imported_by_file } from './imported-by-file.js'\nimport { importing_file } from './importing-file.js'\nimport { importing_dependency } from './importing-dependency.js'\n\nexport const files = new Command('files')\nfiles.description('Explore files')\n\nfiles.addCommand(get)\nfiles.addCommand(search)\nfiles.addCommand(set_description)\nfiles.addCommand(imported_by_file)\nfiles.addCommand(importing_file)\nfiles.addCommand(importing_dependency)\n\nfiles.addHelpText('after', dedent`\n \n <search-options> is a JSON string following the type SearchOptions:\n \n type FileField = \"id\" | \"directory_id\" | \"path\" | \"description\" | \"state\" | \"error\"\n type SearchOptions = {\n select?: Array<FileField>\n limit?: number\n offset?: number\n where?: Record<FileField, string | { contains: string } | { starts_with: string } | { ends_with: string }>\n order_by?: [FileField, 'asc' | 'desc']\n }\n \n <relation-options> is a JSON string following the type RelationOptions:\n \n type RelationOptions = {\n select?: Array<FileField>\n limit?: number\n offset?: number\n deep?: boolean\n }\n \n Examples:\n codewiki files search '{\"limit\": 10}'\n codewiki files search '{\"where\": {\"state\": \"ready\"}, \"limit\": 5}'\n codewiki files search '{\"where\": {\"path\": {\"contains\": \"test\"}}, \"limit\": 10}'\n codewiki files imported-by-file 123 '{\"limit\": 10}'\n`)\n","import { Command } from 'commander'\nimport { env } from '@src/cli/env'\nimport { load_wiki } from '../_common'\n\nexport const get = new Command('get')\nget.description('Get a file by ID')\nget.argument('<id>', 'File ID')\nget.action(async (id: string) => {\n const wiki = await load_wiki()\n const file = wiki.files.get(Number(id))\n env.log(JSON.stringify(file, null, 2))\n})\n","import { Command } from 'commander'\nimport { env } from '@src/cli/env'\nimport { load_wiki, parse_options } from '../_common'\nimport { FileSearchOptions } from '@src/cli/schema'\n\nexport const search = new Command('search')\nsearch.description('Search files with JSON options')\nsearch.argument('<options>', 'JSON options for search')\nsearch.action(async (options_json: string) => {\n const wiki = await load_wiki()\n const options = parse_options(options_json, FileSearchOptions, 'files search')\n const results = wiki.files.search(options)\n env.log(JSON.stringify(results, null, 2))\n})\n","import { readFileSync } from 'fs'\nimport { Command } from 'commander'\nimport { env } from '@src/cli/env'\nimport { load_wiki } from '../_common'\n\nexport const set_description = new Command('set-description')\nset_description.description('Set description for a file')\nset_description.argument('<file-id>', 'File ID')\nset_description.argument('<markdown-file>', 'Path to markdown file')\nset_description.action(async (id: string, file: string) => {\n const wiki = await load_wiki()\n try {\n const content = readFileSync(file, 'utf-8')\n wiki.files.set_description(Number(id), content)\n env.log('Description saved. Run `codewiki describe` to describe the next item.')\n } catch (err: any) {\n env.error(`Error: ${err.message}`)\n env.exit(1)\n }\n})\n","import { Command } from 'commander'\nimport { env } from '@src/cli/env'\nimport { load_wiki, parse_options } from '../_common'\nimport { FileRelationOptions } from '@src/cli/schema'\n\nexport const imported_by_file = new Command('imported-by-file')\nimported_by_file.description('Files imported by the given file')\nimported_by_file.argument('<file-id>', 'File ID')\nimported_by_file.argument('<options>', 'JSON options')\nimported_by_file.action(async (file_id: string, options_json: string) => {\n const wiki = await load_wiki()\n const options = parse_options(options_json, FileRelationOptions, 'files imported-by-file')\n const results = wiki.files.imported_by_file(Number(file_id), options)\n env.log(JSON.stringify(results, null, 2))\n})\n","import { Command } from 'commander'\nimport { env } from '@src/cli/env'\nimport { load_wiki, parse_options } from '../_common'\nimport { FileRelationOptions } from '@src/cli/schema'\n\nexport const importing_file = new Command('importing-file')\nimporting_file.description('Files importing the given file')\nimporting_file.argument('<file-id>', 'File ID')\nimporting_file.argument('<options>', 'JSON options')\nimporting_file.action(async (file_id: string, options_json: string) => {\n const wiki = await load_wiki()\n const options = parse_options(options_json, FileRelationOptions, 'files importing-file')\n const results = wiki.files.importing_file(Number(file_id), options)\n env.log(JSON.stringify(results, null, 2))\n})\n","import { Command } from 'commander'\nimport { env } from '@src/cli/env'\nimport { load_wiki, parse_options } from '../_common'\nimport { FileRelationOptions } from '@src/cli/schema'\n\nexport const importing_dependency = new Command('importing-dependency')\nimporting_dependency.description('Files importing the given dependency')\nimporting_dependency.argument('<dep-id>', 'Dependency ID')\nimporting_dependency.argument('<options>', 'JSON options')\nimporting_dependency.action(async (dep_id: string, options_json: string) => {\n const wiki = await load_wiki()\n const options = parse_options(options_json, FileRelationOptions, 'files importing-dependency')\n const results = wiki.files.importing_dependency(Number(dep_id), options)\n env.log(JSON.stringify(results, null, 2))\n})\n","import { Command } from 'commander'\nimport dedent from 'dedent'\nimport { get } from './get.js'\nimport { search } from './search.js'\nimport { set_description } from './set-description.js'\nimport { referencing_symbol } from './referencing-symbol.js'\nimport { referenced_by_symbol } from './referenced-by-symbol.js'\nimport { using_dependency } from './using-dependency.js'\n\nexport const symbols = new Command('symbols')\nsymbols.description('Explore symbols')\n\nsymbols.addCommand(get)\nsymbols.addCommand(search)\nsymbols.addCommand(set_description)\nsymbols.addCommand(referencing_symbol)\nsymbols.addCommand(referenced_by_symbol)\nsymbols.addCommand(using_dependency)\n\nsymbols.addHelpText('after', dedent`\n \n <search-options> is a JSON string following the type SearchOptions:\n \n type SymbolField = \"id\" | \"file_id\" | \"type\" | \"name\" | \"text\" | \"meta\" | \"description\" | \"is_exported\" | \"state\" | \"error\"\n type SearchOptions = {\n select?: Array<SymbolField>\n limit?: number\n offset?: number\n where?: Record<SymbolField, string | { contains: string } | { starts_with: string } | { ends_with: string }>\n order_by?: [SymbolField, 'asc' | 'desc']\n }\n \n <relation-options> is a JSON string following the type RelationOptions:\n \n type RelationOptions = {\n select?: Array<SymbolField>\n limit?: number\n offset?: number\n deep?: boolean\n }\n \n Examples:\n codewiki symbols search '{\"limit\": 10}'\n codewiki symbols search '{\"where\": {\"type\": \"function\"}, \"limit\": 5}'\n codewiki symbols search '{\"where\": {\"name\": {\"starts_with\": \"test\"}}, \"limit\": 10}'\n codewiki symbols referencing-symbol 123 '{\"limit\": 10}'\n`)\n","import { Command } from 'commander'\nimport { env } from '@src/cli/env'\nimport { load_wiki } from '../_common'\n\nexport const get = new Command('get')\nget.description('Get a symbol by ID')\nget.argument('<id>', 'Symbol ID')\nget.action(async (id: string) => {\n const wiki = await load_wiki()\n const symbol = wiki.symbols.get(Number(id))\n env.log(JSON.stringify(symbol, null, 2))\n})\n","import { Command } from 'commander'\nimport { env } from '@src/cli/env'\nimport { load_wiki, parse_options } from '../_common'\nimport { SymbolSearchOptions } from '@src/cli/schema'\n\nexport const search = new Command('search')\nsearch.description('Search symbols with JSON options')\nsearch.argument('<options>', 'JSON options')\nsearch.action(async (options_json: string) => {\n const wiki = await load_wiki()\n const options = parse_options(options_json, SymbolSearchOptions, 'symbols search')\n const results = wiki.symbols.search(options)\n env.log(JSON.stringify(results, null, 2))\n})\n","import { readFileSync } from 'fs'\nimport { Command } from 'commander'\nimport { env } from '@src/cli/env'\nimport { load_wiki } from '../_common'\n\nexport const set_description = new Command('set-description')\nset_description.description('Set description for a symbol')\nset_description.argument('<symbol-id>', 'Symbol ID')\nset_description.argument('<markdown-file>', 'Path to markdown file')\nset_description.action(async (id: string, file: string) => {\n const wiki = await load_wiki()\n try {\n const content = readFileSync(file, 'utf-8')\n wiki.symbols.set_description(Number(id), content)\n env.log('Description saved. Run `codewiki describe` to describe the next item.')\n } catch (err: any) {\n env.error(`Error: ${err.message}`)\n env.exit(1)\n }\n})\n","import { Command } from 'commander'\nimport { env } from '@src/cli/env'\nimport { load_wiki, parse_options } from '../_common'\nimport { SymbolRelationOptions } from '@src/cli/schema'\n\nexport const referencing_symbol = new Command('referencing-symbol')\nreferencing_symbol.description('Symbols referencing the given symbol')\nreferencing_symbol.argument('<symbol-id>', 'Symbol ID')\nreferencing_symbol.argument('<options>', 'JSON options')\nreferencing_symbol.action(async (symbol_id: string, options_json: string) => {\n const wiki = await load_wiki()\n const options = parse_options(options_json, SymbolRelationOptions, 'symbols referencing-symbol')\n const results = wiki.symbols.referencing_symbol(Number(symbol_id), options)\n env.log(JSON.stringify(results, null, 2))\n})\n","import { Command } from 'commander'\nimport { env } from '@src/cli/env'\nimport { load_wiki, parse_options } from '../_common'\nimport { SymbolRelationOptions } from '@src/cli/schema'\n\nexport const referenced_by_symbol = new Command('referenced-by-symbol')\nreferenced_by_symbol.description('Symbols referenced by the given symbol')\nreferenced_by_symbol.argument('<symbol-id>', 'Symbol ID')\nreferenced_by_symbol.argument('<options>', 'JSON options')\nreferenced_by_symbol.action(async (symbol_id: string, options_json: string) => {\n const wiki = await load_wiki()\n const options = parse_options(options_json, SymbolRelationOptions, 'symbols referenced-by-symbol')\n const results = wiki.symbols.referenced_by_symbol(Number(symbol_id), options)\n env.log(JSON.stringify(results, null, 2))\n})\n","import { Command } from 'commander'\nimport { env } from '@src/cli/env'\nimport { load_wiki, parse_options } from '../_common'\nimport { SymbolRelationOptions } from '@src/cli/schema'\n\nexport const using_dependency = new Command('using-dependency')\nusing_dependency.description('Symbols using the given dependency')\nusing_dependency.argument('<dep-id>', 'Dependency ID')\nusing_dependency.argument('<options>', 'JSON options')\nusing_dependency.action(async (dep_id: string, options_json: string) => {\n const wiki = await load_wiki()\n const options = parse_options(options_json, SymbolRelationOptions, 'symbols using-dependency')\n const results = wiki.symbols.using_dependency(Number(dep_id), options)\n env.log(JSON.stringify(results, null, 2))\n})\n","import { Command } from 'commander'\nimport dedent from 'dedent'\nimport { get } from './get.js'\nimport { search } from './search.js'\nimport { set_description } from './set-description.js'\nimport { children } from './children.js'\nimport { files } from './files.js'\n\nexport const directories = new Command('directories')\ndirectories.description('Explore directories')\n\ndirectories.addCommand(get)\ndirectories.addCommand(search)\ndirectories.addCommand(set_description)\ndirectories.addCommand(children)\ndirectories.addCommand(files)\n\ndirectories.addHelpText('after', dedent`\n \n <search-options> is a JSON string following the type SearchOptions:\n \n type DirectoryField = \"id\" | \"parent_id\" | \"path\" | \"description\" | \"state\" | \"error\"\n type SearchOptions = {\n select?: Array<DirectoryField>\n limit?: number\n offset?: number\n where?: Record<DirectoryField, string | { contains: string } | { starts_with: string } | { ends_with: string }>\n order_by?: [DirectoryField, 'asc' | 'desc']\n }\n \n <relation-options> is a JSON string following the type RelationOptions:\n \n type RelationOptions = {\n select?: Array<DirectoryField> | Array<FileField>\n limit?: number\n offset?: number\n deep?: boolean\n }\n \n Examples:\n codewiki directories search '{\"limit\": 10}'\n codewiki directories search '{\"where\": {\"path\": {\"contains\": \"src\"}}, \"limit\": 5}'\n codewiki directories children 123 '{\"limit\": 10, \"deep\": true}'\n codewiki directories files 123 '{\"limit\": 20}'\n`)\n","import { Command } from 'commander'\nimport { env } from '@src/cli/env'\nimport { load_wiki } from '../_common'\n\nexport const get = new Command('get')\nget.description('Get a directory by ID')\nget.argument('<id>', 'Directory ID')\nget.action(async (id: string) => {\n const wiki = await load_wiki()\n const directory = wiki.directories.get(Number(id))\n env.log(JSON.stringify(directory, null, 2))\n})\n","import { Command } from 'commander'\nimport { env } from '@src/cli/env'\nimport { load_wiki, parse_options } from '../_common'\nimport { DirectorySearchOptions } from '@src/cli/schema'\n\nexport const search = new Command('search')\nsearch.description('Search directories with JSON options')\nsearch.argument('<options>', 'JSON options')\nsearch.action(async (options_json: string) => {\n const wiki = await load_wiki()\n const options = parse_options(options_json, DirectorySearchOptions, 'directories search')\n const results = wiki.directories.search(options)\n env.log(JSON.stringify(results, null, 2))\n})\n","import { readFileSync } from 'fs'\nimport { Command } from 'commander'\nimport { env } from '@src/cli/env'\nimport { load_wiki } from '../_common'\n\nexport const set_description = new Command('set-description')\nset_description.description('Set description for a directory')\nset_description.argument('<directory-id>', 'Directory ID')\nset_description.argument('<markdown-file>', 'Path to markdown file')\nset_description.action(async (id: string, file: string) => {\n const wiki = await load_wiki()\n try {\n const content = readFileSync(file, 'utf-8')\n wiki.directories.set_description(Number(id), content)\n env.log('Description saved. Run `codewiki describe` to describe the next item.')\n } catch (err: any) {\n env.error(`Error: ${err.message}`)\n env.exit(1)\n }\n})\n","import { env } from '../../env.js'\nimport { load_wiki, parse_options } from '../_common'\nimport { DirectoryRelationOptions } from '@src/cli/schema'\nimport { Command } from 'commander'\n\nexport const children = new Command('children')\nchildren.description('Child directories of the given directory')\nchildren.argument('<parent-id>', 'Parent directory ID')\nchildren.argument('<options>', 'JSON options')\nchildren.action(async (parent_id: string, options_json: string) => {\n const wiki = await load_wiki()\n const options = parse_options(options_json, DirectoryRelationOptions, 'directories children')\n const results = wiki.directories.children(Number(parent_id), options)\n env.log(JSON.stringify(results, null, 2))\n})\n","import { Command } from 'commander'\nimport { env } from '@src/cli/env'\nimport { load_wiki, parse_options } from '../_common'\nimport { FileRelationOptions } from '@src/cli/schema'\n\nexport const files = new Command('files')\nfiles.description('Files in the given directory')\nfiles.argument('<directory-id>', 'Directory ID')\nfiles.argument('<options>', 'JSON options')\nfiles.action(async (directory_id: string, options_json: string) => {\n const wiki = await load_wiki()\n const options = parse_options(options_json, FileRelationOptions, 'directories files')\n const results = wiki.directories.files(Number(directory_id), options)\n env.log(JSON.stringify(results, null, 2))\n})\n","import { Command } from 'commander'\nimport dedent from 'dedent'\nimport { get } from './get.js'\nimport { search } from './search.js'\nimport { set_description } from './set-description.js'\nimport { used_by_file } from './used-by-file.js'\nimport { used_by_symbol } from './used-by-symbol.js'\n\nexport const dependencies = new Command('dependencies')\ndependencies.description('Explore dependencies')\n\ndependencies.addCommand(get)\ndependencies.addCommand(search)\ndependencies.addCommand(set_description)\ndependencies.addCommand(used_by_file)\ndependencies.addCommand(used_by_symbol)\n\ndependencies.addHelpText('after', dedent`\n \n <search-options> is a JSON string following the type SearchOptions:\n \n type DependencyField = \"id\" | \"package\" | \"subpath\" | \"name\" | \"version\" | \"github_repo\" | \"is_builtin\" | \"description\" | \"state\" | \"error\"\n type SearchOptions = {\n select?: Array<DependencyField>\n limit?: number\n offset?: number\n where?: Record<DependencyField, string | { contains: string } | { starts_with: string } | { ends_with: string }>\n order_by?: [DependencyField, 'asc' | 'desc']\n }\n \n <select-options> is a JSON string following the type SelectOptions:\n \n type SelectOptions = {\n select?: Array<DependencyField>\n limit?: number\n offset?: number\n }\n \n Examples:\n codewiki dependencies search '{\"limit\": 10}'\n codewiki dependencies search '{\"where\": {\"is_builtin\": false}, \"limit\": 5}'\n codewiki dependencies search '{\"where\": {\"package\": {\"starts_with\": \"@types\"}}, \"limit\": 10}'\n codewiki dependencies used-by-file 123 '{\"limit\": 10}'\n`)\n","import { Command } from 'commander'\nimport { env } from '@src/cli/env'\nimport { load_wiki } from '../_common'\n\nexport const get = new Command('get')\nget.description('Get a dependency by ID')\nget.argument('<id>', 'Dependency ID')\nget.action(async (id: string) => {\n const wiki = await load_wiki()\n const dependency = wiki.dependencies.get(Number(id))\n env.log(JSON.stringify(dependency, null, 2))\n})\n","import { Command } from 'commander'\nimport { env } from '@src/cli/env'\nimport { load_wiki, parse_options } from '../_common'\nimport { DependencySearchOptions } from '@src/cli/schema'\n\nexport const search = new Command('search')\nsearch.description('Search dependencies with JSON options')\nsearch.argument('<options>', 'JSON options')\nsearch.action(async (options_json: string) => {\n const wiki = await load_wiki()\n const options = parse_options(options_json, DependencySearchOptions, 'dependencies search')\n const results = wiki.dependencies.search(options)\n env.log(JSON.stringify(results, null, 2))\n})\n","import { readFileSync } from 'fs'\nimport { Command } from 'commander'\nimport { env } from '@src/cli/env'\nimport { load_wiki } from '../_common'\n\nexport const set_description = new Command('set-description')\nset_description.description('Set description for a dependency')\nset_description.argument('<dependency-id>', 'Dependency ID')\nset_description.argument('<markdown-file>', 'Path to markdown file')\nset_description.action(async (id: string, file: string) => {\n const wiki = await load_wiki()\n try {\n const content = readFileSync(file, 'utf-8')\n wiki.dependencies.set_description(Number(id), content)\n env.log('Description saved. Run `codewiki describe` to describe the next item.')\n } catch (err: any) {\n env.error(`Error: ${err.message}`)\n env.exit(1)\n }\n})\n","import { Command } from 'commander'\nimport { env } from '@src/cli/env'\nimport { load_wiki, parse_options } from '../_common'\nimport { DependencySelectOptions } from '@src/cli/schema'\n\nexport const used_by_file = new Command('used-by-file')\nused_by_file.description('Dependencies used by the given file')\nused_by_file.argument('<file-id>', 'File ID')\nused_by_file.argument('<options>', 'JSON options')\nused_by_file.action(async (file_id: string, options_json: string) => {\n const wiki = await load_wiki()\n const options = parse_options(options_json, DependencySelectOptions, 'dependencies used-by-file')\n const results = wiki.dependencies.used_by_file(Number(file_id), options)\n env.log(JSON.stringify(results, null, 2))\n})\n","import { Command } from 'commander'\nimport { env } from '@src/cli/env'\nimport { load_wiki, parse_options } from '../_common'\nimport { DependencySelectOptions } from '@src/cli/schema'\n\nexport const used_by_symbol = new Command('used-by-symbol')\nused_by_symbol.description('Dependencies used by the given symbol')\nused_by_symbol.argument('<symbol-id>', 'Symbol ID')\nused_by_symbol.argument('<options>', 'JSON options')\nused_by_symbol.action(async (symbol_id: string, options_json: string) => {\n const wiki = await load_wiki()\n const options = parse_options(options_json, DependencySelectOptions, 'dependencies used-by-symbol')\n const results = wiki.dependencies.used_by_symbol(Number(symbol_id), options)\n env.log(JSON.stringify(results, null, 2))\n})\n","import { update } from './update'\nimport { status } from './status'\nimport { describe } from './describe'\nimport { files } from './files'\nimport { symbols } from './symbols'\nimport { directories } from './directories'\nimport { dependencies } from './dependencies'\n\nexport const commands = [update, status, describe, files, symbols, directories, dependencies]\n","#!/usr/bin/env node\nimport { env } from './env.js'\nimport { run } from './index.js'\n\nrun(env.argv().slice(2)).catch((error) => {\n env.error(error.message || String(error))\n env.exit(1)\n})\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,aAA2B;;;ACA3B,wBAAe;AACf,iBAA8B;AAC9B,4BAAqB;AACrB,IAAAC,mBAAyB;AACzB,IAAAC,eAAoC;AACpC,IAAAC,yBAA+C;;;AC2ExC,SAAS,OAAqD,UAAa;AAChF,QAAM,UAAU,CAAC;AACjB,aAAW,QAAQ,OAAO,KAAK,QAAQ,GAAG;AACxC,YAAQ,IAAe,IAAI,cAAc,MAAM;MAC7C,YAAmB,SAAwC;AACzD,cAAM,SAAS,IAAI,EAAG,OAAO,CAAC;AADb,aAAA,UAAA;AAEjB,aAAK,OAAO;MACd;IACF;EACF;AAEA,QAAM,MAAM,CAAC,UAAmB,iBAAiB,SAAS,MAAM,QAAQ;AACxE,SAAO;IACL;IACA;IACA,KAAK,CAAC,MAAM,YAAY,IAAI,QAAQ,IAAI,EAAE,OAAO;IACjD,IAAI,CAAC,MAAM,UAAU,iBAAiB,QAAQ,IAAI;IAClD,QAAQ,CAAC,UAAW,IAAI,KAAK,IAAI,EAAE,SAAS,OAAO,OAAO,MAAM,IAAI,EAAE,SAAS,MAAM,MAAM;IAC3F,IAAI,CAAC,OAAO,iBAAkB,IAAI,KAAK,IAAI,eAAe;IAC1D,UAAU,CAAC,UAAU;AACnB,UAAI,IAAI,KAAK,EAAG,OAAM;AACtB,aAAO;IACT;IACA,OAAO,CAAC,IAAI,aAAa;AACvB,mBAAa,CAAC,MAAM;AACpB,UAAI;AACF,cAAM,MAAM,GAAG;AACf,YAAI,eAAe,QAAS,QAAO,IAAI,MAAM,QAAQ;AACrD,eAAO;MACT,SAAS,GAAG;AACV,eAAO,SAAS,CAAC;MACnB;IACF;IACA,MAAM,CAAC,IAAI,YAAY;AACrB,aAAO,IAAI,SAAS;AAClB,YAAI;AACF,gBAAM,MAAM,GAAG,GAAG,IAAI;AACtB,cAAI,eAAe,QAAS,QAAO,IAAI,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC;AACvE,iBAAO;QACT,SAAS,GAAG;AACV,iBAAO,QAAQ,GAAG,GAAG,IAAI;QAC3B;MACF;IACF;IACA,MAAM,IAAI,QAAc;AACtB,UAAI;AACJ,iBAAW,MAAM,KAAK;AACpB,cAAM,GAAG,GAAG;AACZ,YAAI,IAAI,GAAG,EAAG,QAAO;MACvB;AACA,aAAO;IACT;EACF;AACF;AAEA,IAAO,gBAAQ;;;ACrIR,IAAM,MAAM,cAAc;AAAA,EAC/B,2BAA2B,CAAC,SAC1B,SAAS,KAAK,SAAS,8BAA8B,KAAK,YAAY;AAAA,EACxE,gBAAgB,CAAC,SAA2B,mBAAmB,KAAK,IAAI;AAAA,EACxE,UAAU,CAAC,SAA0D,qBAAqB,KAAK,SAAS,KAAK,KAAK,MAAM;AAAA,EACxH,yBAAyB,CAAC,SACxB,8CAA8C,KAAK,SAAS,KAAK,KAAK,MAAM;AAAA,EAC9E,2BAA2B,CAAC,SAC1B,oBAAoB,KAAK,IAAI,+BAA+B,KAAK,OAAO;AAAA,EAC1E,0BAA0B,CAAC,SAA2C,6BAA6B,KAAK,MAAM,WAAW,KAAK,IAAI;AAAA,EAClI,yBAAyB,CAAC,SAA2C,+BAA+B,KAAK,IAAI,iBAAiB,KAAK,MAAM;AAAA,EACzI,iBAAiB,CAAC,SAA6C,wBAAwB,KAAK,SAAS,KAAK,KAAK,MAAM;AAAA,EACrH,kBAAkB,CAAC,SAA8B,kCAAkC,KAAK,OAAO;AAAA,EAC/F,mCAAmC,CAAC,SAClC,iDAAiD,KAAK,OAAO,KAAK,KAAK,MAAM;AAAA,EAC/E,qBAAqB,CAAC,SAA8C,UAAU,KAAK,SAAS,KAAK,KAAK,IAAI;AAAA,EAC1G,uBAAuB,CAAC,SACtB,6BAA6B,KAAK,IAAI,OAAO,KAAK,SAAS;AAAA,EAC7D,kBAAkB,CAAC,SAAyC,WAAW,KAAK,IAAI,wBAAwB,KAAK,IAAI;AAAA,EACjH,4BAA4B,CAAC,SAC3B,sBAAsB,KAAK,OAAO,IAAI,KAAK,IAAI,KAAK,KAAK,MAAM;AAAA;AAAA,EAEjE,qBAAqB,CAAC,SAAwC,uBAAuB,KAAK,IAAI,KAAK,KAAK,MAAM;AAAA,EAC9G,cAAc,CAAC,SAAwC,iBAAiB,KAAK,MAAM;AAAA,EACnF,gBAAgB,CAAC,SAA0B,0BAA0B,KAAK,UAAU,KAAK,MAAM,CAAC;AAAA,EAChG,cAAc,CAAC,SAA2B,wBAAwB,KAAK,IAAI;AAC7E,CAAC;;;AC5BD,sBAAkC;AAClC,kBAAqB;AACrB,IAAAC,sBAAoB;;;ACFpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAA+B;AAC/B,yBAA+D;AAW/D,IAAM,aAAa;AAAA,EACjB,gBAAY,4BAAQ,cAAc,EAAE,MAAM,YAAY,CAAC,EACpD,QAAQ,qCAAkB,EAC1B,QAAQ;AAAA,EACX,gBAAY,4BAAQ,cAAc,EAAE,MAAM,YAAY,CAAC,EACpD,QAAQ,qCAAkB,EAC1B,QAAQ;AACb;AAEO,IAAM,iBAAa,gCAAY,cAAc;AAAA,EAClD,QAAI,4BAAQ,IAAI,EAAE,WAAW,EAAE,eAAe,KAAK,CAAC;AAAA,EACpD,UAAM,yBAAK,MAAM,EAAE,QAAQ,EAAE,OAAO;AAAA,EACpC,YAAY,WAAW;AACzB,CAAC;AAEM,IAAM,cAAU,gCAAY,WAAW;AAAA,EAC5C,QAAI,4BAAQ,IAAI,EAAE,WAAW,EAAE,eAAe,MAAM,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAAA,EAC1E,kBAAc,yBAAK,cAAc,EAAE,QAAQ;AAAA,EAC3C,iBAAa,yBAAK,aAAa;AAAA,EAC/B,uBAAmB,yBAAK,mBAAmB;AAAA,EAC3C,wBAAoB,yBAAK,oBAAoB;AAAA,EAC7C,GAAG;AACL,CAAC;AAEM,IAAM,kBAAc;AAAA,EACzB;AAAA,EACA;AAAA,IACE,QAAI,4BAAQ,IAAI,EAAE,WAAW,EAAE,eAAe,KAAK,CAAC;AAAA,IACpD,eAAW,4BAAQ,WAAW,EAAE,WAAW,MAAW,YAAY,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA,IAC7F,UAAM,yBAAK,MAAM,EAAE,QAAQ,EAAE,OAAO;AAAA,IACpC,iBAAa,yBAAK,aAAa;AAAA,IAC/B,WAAO,yBAAK,OAAO,EAAE,MAAsB,EAAE,QAAQ,EAAE,QAAQ,aAAa;AAAA,IAC5E,WAAO,yBAAK,OAAO;AAAA,IACnB,GAAG;AAAA,EACL;AAAA,EACA,CAAC,WAAW;AAAA,IACV,gBAAY,0BAAM,wBAAwB,EAAE,GAAG,MAAM,SAAS;AAAA,IAC9D,cAAU,0BAAM,sBAAsB,EAAE,GAAG,MAAM,IAAI;AAAA,IACrD,eAAW,0BAAM,uBAAuB,EAAE,GAAG,MAAM,KAAK;AAAA,EAC1D;AACF;AAEO,IAAM,YAAQ;AAAA,EACnB;AAAA,EACA;AAAA,IACE,QAAI,4BAAQ,IAAI,EAAE,WAAW,EAAE,eAAe,KAAK,CAAC;AAAA,IACpD,kBAAc,4BAAQ,cAAc,EACjC,QAAQ,EACR,WAAW,MAAM,YAAY,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA,IAC3D,UAAM,yBAAK,MAAM,EAAE,QAAQ,EAAE,OAAO;AAAA,IACpC,UAAM,yBAAK,MAAM;AAAA,IACjB,iBAAa,yBAAK,aAAa;AAAA,IAC/B,WAAO,yBAAK,OAAO,EAAE,MAAiB,EAAE,QAAQ,EAAE,QAAQ,SAAS;AAAA,IACnE,WAAO,yBAAK,OAAO;AAAA,IACnB,GAAG;AAAA,EACL;AAAA,EACA,CAAC,WAAW;AAAA,IACV,mBAAe,0BAAM,qBAAqB,EAAE,GAAG,MAAM,YAAY;AAAA,IACjE,cAAU,0BAAM,gBAAgB,EAAE,GAAG,MAAM,IAAI;AAAA,IAC/C,cAAU,0BAAM,gBAAgB,EAAE,GAAG,MAAM,IAAI;AAAA,IAC/C,eAAW,0BAAM,iBAAiB,EAAE,GAAG,MAAM,KAAK;AAAA,EACpD;AACF;AAEO,IAAM,4BAAwB;AAAA,EACnC;AAAA,EACA;AAAA,IACE,QAAI,4BAAQ,IAAI,EAAE,WAAW,EAAE,eAAe,KAAK,CAAC;AAAA,IACpD,aAAS,yBAAK,SAAS,EAAE,QAAQ;AAAA,IACjC,aAAS,yBAAK,SAAS;AAAA,IACvB,UAAM,yBAAK,MAAM;AAAA,IACjB,aAAS,yBAAK,SAAS;AAAA,IACvB,iBAAa,yBAAK,aAAa;AAAA,IAC/B,gBAAY,4BAAQ,cAAc,EAAE,MAAM,UAAU,CAAC,EAAE,QAAQ,KAAK,EAAE,QAAQ;AAAA,IAC9E,iBAAa,yBAAK,aAAa;AAAA,IAC/B,WAAO,yBAAK,OAAO,EAAE,MAA+B,EAAE,QAAQ,EAAE,QAAQ,aAAa;AAAA,IACrF,WAAO,yBAAK,OAAO;AAAA,IACnB,GAAG;AAAA,EACL;AAAA,EACA,CAAC,WAAW;AAAA,IACV,eAAW,0BAAM,iCAAiC,EAAE,GAAG,MAAM,KAAK;AAAA,IAClE,iCAA6B,gCAAY,mDAAmD,EAAE,GAAG,MAAM,SAAS,MAAM,SAAS,MAAM,IAAI;AAAA,EAC3I;AACF;AAEO,IAAM,uBAAmB;AAAA,EAC9B;AAAA,EACA;AAAA,IACE,QAAI,4BAAQ,IAAI,EAAE,WAAW,EAAE,eAAe,KAAK,CAAC;AAAA,IACpD,aAAS,4BAAQ,SAAS,EACvB,QAAQ,EACR,WAAW,MAAM,MAAM,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA,IACrD,4BAAwB,4BAAQ,wBAAwB,EACrD,QAAQ,EACR,WAAW,MAAM,sBAAsB,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA,IACrE,WAAO,yBAAK,OAAO,EAAE,QAAQ;AAAA,IAC7B,gBAAY,4BAAQ,cAAc,EAAE,MAAM,UAAU,CAAC,EAAE,QAAQ,KAAK,EAAE,QAAQ;AAAA,IAC9E,GAAG;AAAA,EACL;AAAA,EACA,CAAC,WAAW;AAAA,IACV,cAAU,0BAAM,2BAA2B,EAAE,GAAG,MAAM,OAAO;AAAA,IAC7D,6BAAyB,0BAAM,0CAA0C,EAAE,GAAG,MAAM,sBAAsB;AAAA,EAC5G;AACF;AAEO,IAAM,cAAU;AAAA,EACrB;AAAA,EACA;AAAA,IACE,QAAI,4BAAQ,IAAI,EAAE,WAAW,EAAE,eAAe,KAAK,CAAC;AAAA,IACpD,sBAAkB,4BAAQ,kBAAkB,EACzC,QAAQ,EACR,WAAW,MAAM,MAAM,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA,IACrD,sBAAkB,4BAAQ,kBAAkB,EACzC,QAAQ,EACR,WAAW,MAAM,MAAM,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA,IACrD,eAAW,4BAAQ,WAAW,EAAE,WAAW,MAAM,QAAQ,IAAI,EAAE,UAAU,WAAW,CAAC;AAAA,IACrF,UAAM,yBAAK,MAAM,EAAE,QAAQ;AAAA,IAC3B,WAAO,yBAAK,OAAO,EAAE,QAAQ;AAAA,IAC7B,gBAAY,4BAAQ,cAAc,EAAE,MAAM,UAAU,CAAC,EAAE,QAAQ,KAAK,EAAE,QAAQ;AAAA,IAC9E,WAAO,yBAAK,OAAO,EAAE,MAAmB,EAAE,QAAQ,EAAE,QAAQ,SAAS;AAAA,IACrE,WAAO,yBAAK,OAAO;AAAA,IACnB,GAAG;AAAA,EACL;AAAA,EACA,CAAC,WAAW;AAAA,IACV,uBAAmB,0BAAM,2BAA2B,EAAE,GAAG,MAAM,gBAAgB;AAAA,IAC/E,uBAAmB,0BAAM,2BAA2B,EAAE,GAAG,MAAM,gBAAgB;AAAA,IAC/E,gBAAY,0BAAM,oBAAoB,EAAE,GAAG,MAAM,SAAS;AAAA,IAC1D,eAAW,0BAAM,mBAAmB,EAAE,GAAG,MAAM,KAAK;AAAA,EACtD;AACF;AAEO,IAAM,cAAU;AAAA,EACrB;AAAA,EACA;AAAA,IACE,QAAI,4BAAQ,IAAI,EAAE,WAAW,EAAE,eAAe,KAAK,CAAC;AAAA,IACpD,aAAS,4BAAQ,SAAS,EACvB,QAAQ,EACR,WAAW,MAAM,MAAM,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA,IACrD,UAAM,yBAAK,MAAM,EAAE,QAAQ;AAAA;AAAA,IAC3B,UAAM,yBAAK,MAAM,EAAE,QAAQ;AAAA,IAC3B,UAAM,yBAAK,MAAM;AAAA;AAAA,IACjB,UAAM,yBAAK,MAAM;AAAA;AAAA,IACjB,iBAAa,yBAAK,aAAa;AAAA,IAC/B,iBAAa,4BAAQ,eAAe,EAAE,MAAM,UAAU,CAAC,EAAE,QAAQ,KAAK,EAAE,QAAQ;AAAA,IAChF,WAAO,yBAAK,OAAO,EAAE,MAAmB,EAAE,QAAQ,EAAE,QAAQ,SAAS;AAAA,IACrE,WAAO,yBAAK,OAAO;AAAA,IACnB,GAAG;AAAA,EACL;AAAA,EACA,CAAC,WAAW;AAAA,IACV,cAAU,0BAAM,kBAAkB,EAAE,GAAG,MAAM,OAAO;AAAA,IACpD,cAAU,0BAAM,kBAAkB,EAAE,GAAG,MAAM,IAAI;AAAA,IACjD,cAAU,0BAAM,kBAAkB,EAAE,GAAG,MAAM,IAAI;AAAA,IACjD,qBAAiB,0BAAM,yBAAyB,EAAE,GAAG,MAAM,WAAW;AAAA,IACtE,eAAW,0BAAM,mBAAmB,EAAE,GAAG,MAAM,KAAK;AAAA,EACtD;AACF;AAEO,IAAM,4BAAwB;AAAA,EACnC;AAAA,EACA;AAAA,IACE,QAAI,4BAAQ,IAAI,EAAE,WAAW,EAAE,eAAe,KAAK,CAAC;AAAA,IACpD,kBAAc,4BAAQ,cAAc,EACjC,QAAQ,EACR,WAAW,MAAM,MAAM,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA,IACrD,gBAAY,4BAAQ,YAAY,EAC7B,QAAQ,EACR,WAAW,MAAM,MAAM,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA,IACrD,oBAAgB,4BAAQ,gBAAgB,EACrC,QAAQ,EACR,WAAW,MAAM,QAAQ,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA,IACvD,kBAAc,4BAAQ,cAAc,EACjC,QAAQ,EACR,WAAW,MAAM,QAAQ,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA,IACvD,WAAO,yBAAK,OAAO,EAAE,MAA+B,EAAE,QAAQ,EAAE,QAAQ,SAAS;AAAA,IACjF,WAAO,yBAAK,OAAO;AAAA,IACnB,GAAG;AAAA,EACL;AAAA,EACA,CAAC,WAAW;AAAA,IACV,mBAAe,0BAAM,qCAAqC,EAAE,GAAG,MAAM,YAAY;AAAA,IACjF,iBAAa,0BAAM,mCAAmC,EAAE,GAAG,MAAM,UAAU;AAAA,IAC3E,qBAAiB,0BAAM,uCAAuC,EAAE,GAAG,MAAM,cAAc;AAAA,IACvF,mBAAe,0BAAM,qCAAqC,EAAE,GAAG,MAAM,YAAY;AAAA,IACjF,eAAW,0BAAM,iCAAiC,EAAE,GAAG,MAAM,KAAK;AAAA,EACpE;AACF;AAEO,IAAM,4BAAwB;AAAA,EACnC;AAAA,EACA;AAAA,IACE,QAAI,4BAAQ,IAAI,EAAE,WAAW,EAAE,eAAe,KAAK,CAAC;AAAA,IACpD,eAAW,4BAAQ,WAAW,EAC3B,QAAQ,EACR,WAAW,MAAM,QAAQ,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA,IACvD,wBAAoB,4BAAQ,oBAAoB,EAC7C,QAAQ,EACR,WAAW,MAAM,iBAAiB,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA,IAChE,GAAG;AAAA,EACL;AAAA,EACA,CAAC,WAAW;AAAA,IACV,gBAAY,0BAAM,kCAAkC,EAAE,GAAG,MAAM,SAAS;AAAA,IACxE,yBAAqB,0BAAM,2CAA2C,EAAE,GAAG,MAAM,kBAAkB;AAAA,EACrG;AACF;AAEO,IAAM,4BAAwB,8BAAU,aAAa,CAAC,EAAE,KAAK,KAAK,OAAO;AAAA,EAC9E,QAAQ,IAAI,aAAa;AAAA,IACvB,QAAQ,CAAC,YAAY,SAAS;AAAA,IAC9B,YAAY,CAAC,YAAY,EAAE;AAAA,IAC3B,cAAc;AAAA,EAChB,CAAC;AAAA,EACD,gBAAgB,KAAK,aAAa;AAAA,IAChC,cAAc;AAAA,EAChB,CAAC;AAAA,EACD,OAAO,KAAK,KAAK;AACnB,EAAE;AAEK,IAAM,sBAAkB,8BAAU,OAAO,CAAC,EAAE,KAAK,KAAK,OAAO;AAAA,EAClE,WAAW,IAAI,aAAa;AAAA,IAC1B,QAAQ,CAAC,MAAM,YAAY;AAAA,IAC3B,YAAY,CAAC,YAAY,EAAE;AAAA,EAC7B,CAAC;AAAA,EACD,kBAAkB,KAAK,gBAAgB;AAAA,EACvC,qBAAqB,KAAK,SAAS;AAAA,IACjC,cAAc;AAAA,EAChB,CAAC;AAAA,EACD,qBAAqB,KAAK,SAAS;AAAA,IACjC,cAAc;AAAA,EAChB,CAAC;AAAA,EACD,SAAS,KAAK,OAAO;AAAA,EACrB,qBAAqB,KAAK,uBAAuB;AAAA,IAC/C,cAAc;AAAA,EAChB,CAAC;AAAA,EACD,mBAAmB,KAAK,uBAAuB;AAAA,IAC7C,cAAc;AAAA,EAChB,CAAC;AACH,EAAE;AAEK,IAAM,sCAAkC,8BAAU,uBAAuB,CAAC,EAAE,KAAK,OAAO;AAAA,EAC7F,SAAS,KAAK,gBAAgB;AAAA,EAC9B,uBAAuB,KAAK,qBAAqB;AACnD,EAAE;AAEK,IAAM,iCAA6B,8BAAU,kBAAkB,CAAC,EAAE,IAAI,OAAO;AAAA,EAClF,MAAM,IAAI,OAAO;AAAA,IACf,QAAQ,CAAC,iBAAiB,OAAO;AAAA,IACjC,YAAY,CAAC,MAAM,EAAE;AAAA,EACvB,CAAC;AAAA,EACD,qBAAqB,IAAI,uBAAuB;AAAA,IAC9C,QAAQ,CAAC,iBAAiB,sBAAsB;AAAA,IAChD,YAAY,CAAC,sBAAsB,EAAE;AAAA,EACvC,CAAC;AACH,EAAE;AAEK,IAAM,wBAAoB,8BAAU,SAAS,CAAC,EAAE,IAAI,OAAO;AAAA,EAChE,eAAe,IAAI,OAAO;AAAA,IACxB,QAAQ,CAAC,QAAQ,gBAAgB;AAAA,IACjC,YAAY,CAAC,MAAM,EAAE;AAAA,IACrB,cAAc;AAAA,EAChB,CAAC;AAAA,EACD,eAAe,IAAI,OAAO;AAAA,IACxB,QAAQ,CAAC,QAAQ,gBAAgB;AAAA,IACjC,YAAY,CAAC,MAAM,EAAE;AAAA,IACrB,cAAc;AAAA,EAChB,CAAC;AAAA,EACD,QAAQ,IAAI,SAAS;AAAA,IACnB,QAAQ,CAAC,QAAQ,SAAS;AAAA,IAC1B,YAAY,CAAC,QAAQ,EAAE;AAAA,EACzB,CAAC;AACH,EAAE;AAEK,IAAM,wBAAoB,8BAAU,SAAS,CAAC,EAAE,KAAK,KAAK,OAAO;AAAA,EACtE,MAAM,IAAI,OAAO;AAAA,IACf,QAAQ,CAAC,QAAQ,OAAO;AAAA,IACxB,YAAY,CAAC,MAAM,EAAE;AAAA,EACvB,CAAC;AAAA,EACD,SAAS,KAAK,OAAO;AAAA,EACrB,qBAAqB,KAAK,uBAAuB;AAAA,IAC/C,cAAc;AAAA,EAChB,CAAC;AAAA,EACD,mBAAmB,KAAK,uBAAuB;AAAA,IAC7C,cAAc;AAAA,EAChB,CAAC;AAAA,EACD,gBAAgB,KAAK,qBAAqB;AAC5C,EAAE;AAEK,IAAM,sCAAkC,8BAAU,uBAAuB,CAAC,EAAE,IAAI,OAAO;AAAA,EAC5F,WAAW,IAAI,OAAO;AAAA,IACpB,QAAQ,CAAC,sBAAsB,YAAY;AAAA,IAC3C,YAAY,CAAC,MAAM,EAAE;AAAA,IACrB,cAAc;AAAA,EAChB,CAAC;AAAA,EACD,SAAS,IAAI,OAAO;AAAA,IAClB,QAAQ,CAAC,sBAAsB,UAAU;AAAA,IACzC,YAAY,CAAC,MAAM,EAAE;AAAA,IACrB,cAAc;AAAA,EAChB,CAAC;AAAA,EACD,aAAa,IAAI,SAAS;AAAA,IACxB,QAAQ,CAAC,sBAAsB,cAAc;AAAA,IAC7C,YAAY,CAAC,QAAQ,EAAE;AAAA,IACvB,cAAc;AAAA,EAChB,CAAC;AAAA,EACD,WAAW,IAAI,SAAS;AAAA,IACtB,QAAQ,CAAC,sBAAsB,YAAY;AAAA,IAC3C,YAAY,CAAC,QAAQ,EAAE;AAAA,IACvB,cAAc;AAAA,EAChB,CAAC;AACH,EAAE;AAEK,IAAM,sCAAkC,8BAAU,uBAAuB,CAAC,EAAE,IAAI,OAAO;AAAA,EAC5F,QAAQ,IAAI,SAAS;AAAA,IACnB,QAAQ,CAAC,sBAAsB,SAAS;AAAA,IACxC,YAAY,CAAC,QAAQ,EAAE;AAAA,EACzB,CAAC;AAAA,EACD,iBAAiB,IAAI,kBAAkB;AAAA,IACrC,QAAQ,CAAC,sBAAsB,kBAAkB;AAAA,IACjD,YAAY,CAAC,iBAAiB,EAAE;AAAA,EAClC,CAAC;AACH,EAAE;;;ADnUF,eAAsB,QAAQ,KAAc;AAC1C,QAAM,CAAC,qBAAqB,uBAAuB,IAAI,MAAM,QAAQ,IAAI,CAAC,wBAAwB,GAAG,GAAG,4BAA4B,GAAG,CAAC,CAAC;AACzI,aAAW,YAAY,qBAAqB;AAC1C,QAAI,wBAAwB,IAAI,QAAQ,EAAG;AAC3C,UAAM,gBAAgB,KAAK,QAAQ;AAAA,EACrC;AACF;AAEA,eAAe,wBAAwB,EAAE,gBAAgB,GAAkC;AACzF,QAAM,YAAY,oBAAI,IAAY;AAClC,aAAW,SAAS,UAAM,yBAAQ,iBAAiB,EAAE,eAAe,KAAK,CAAC,GAAG;AAC3E,QAAI,CAAC,MAAM,OAAO,KAAK,CAAC,MAAM,KAAK,SAAS,MAAM,EAAG;AACrD,cAAU,IAAI,MAAM,IAAI;AAAA,EAC1B;AACA,SAAO;AACT;AAEA,eAAe,4BAA4B,EAAE,IAAAC,IAAG,GAAkC;AAChF,QAAM,MAAMA,IAAG,IAAsB,gGAA4E;AACjH,MAAI,CAAC,IAAK,QAAO,oBAAI,IAAI;AACzB,QAAM,UAAU,MAAMA,IAAG,OAAO,EAAE,MAAM,WAAW,KAAK,CAAC,EAAE,KAAK,UAAU;AAC1E,SAAO,IAAI,IAAI,QAAQ,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;AAC3C;AAEA,eAAe,gBAAgB,EAAE,QAAQ,gBAAgB,GAAY,UAAkB;AACrF,QAAM,gBAAY,kBAAK,iBAAiB,QAAQ;AAChD,QAAM,UAAU,UAAM,0BAAS,WAAW,OAAO;AACjD,SAAO,YAAY,MAAM;AACvB,WAAO,KAAK,OAAO;AACnB,WAAO,QAAQ,0CAA0C,EAAE,IAAI,QAAQ;AAAA,EACzE,CAAC,EAAE;AACL;;;AErCA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAAC,sBAAwB;;;ACAxB,IAAAC,sBAA6C;AAMtC,SAAS,WAAkC,WAAmB,IAA0B;AAC7F,SAAO,IAAI,KAAK,IAAI,CAAC,WAAW,SAAS,IAAI,IAAI,YAAY,EAAE,WAAW,MAAM,KAAK,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC;AAC1G;AAEO,SAAS,UACdC,KACA,OACA,SACA;AACA,MAAI,CAAC,QAAQ,OAAO,SAAS,IAAS,EAAG,SAAQ,OAAO,KAAK,IAAS;AACtE,SAAOA,IACJ,OAAO,OAAO,OAAO,QAAQ,MAAM,CAAC,EACpC,KAAK,KAAK,EACV,MAAM,WAAW,OAAO,QAAQ,KAAK,CAAC,EACtC,QAAQ,MAAM,OAAO,QAAQ,QAAQ,CAAC,EACtC,OAAO,QAAQ,MAAM,EACrB,MAAM,QAAQ,KAAK,EACnB,IAAI;AACT;AAEO,SAAS,OAAyF,OAAcC,SAAa;AAClI,QAAM,MAAM,CAAC;AACb,aAAW,SAASA,QAAQ,KAAI,KAAK,IAAI,MAAM,KAAK;AACpD,SAAO;AACT;AAEA,SAAS,WAAsD,OAAc,SAAmD;AAC9H,MAAI,CAAC,WAAW,OAAO,KAAK,OAAO,EAAE,WAAW,EAAG,QAAO;AAC1D,QAAM,QAAe,CAAC;AACtB,aAAW,CAAC,OAAO,KAAK,KAAK,OAAO,QAAQ,OAAO,GAAG;AACpD,QAAI,MAAM,QAAQ,KAAK,KAAK,MAAM,SAAS,GAAG;AAC5C,YAAM,mBAAmB,MAAM,IAAI,CAAC,MAAM,UAAU,OAAO,OAAO,CAAC,CAAC;AACpE,YAAM,SAAK,wBAAG,GAAG,gBAAgB,CAAC;AAAA,IACpC,OAAO;AACL,YAAM,KAAK,UAAU,OAAO,OAAO,KAAK,CAAC;AAAA,IAC3C;AAAA,EACF;AACA,aAAO,yBAAI,GAAG,KAAK;AACrB;AAEA,SAAS,UAAU,OAAoC,OAAe,OAAY;AAChF,MAAI,OAAO,UAAU,YAAY,UAAU,MAAM;AAC/C,QAAI,cAAc,MAAO,YAAO,0BAAK,MAAM,KAAK,GAAG,IAAI,MAAM,QAAQ,GAAG;AACxE,QAAI,iBAAiB,MAAO,YAAO,0BAAK,MAAM,KAAK,GAAG,GAAG,MAAM,WAAW,GAAG;AAC7E,QAAI,eAAe,MAAO,YAAO,0BAAK,MAAM,KAAK,GAAG,IAAI,MAAM,SAAS,EAAE;AACzE,eAAO,wBAAG,MAAM,KAAK,GAAG,KAAK,UAAU,KAAK,CAAC;AAAA,EAC/C;AACA,aAAO,wBAAG,MAAM,KAAK,GAAG,KAAK;AAC/B;AAEA,SAAS,MAAiD,OAAc,CAAC,OAAO,SAAS,GAAkD;AACzI,SAAO,cAAc,YAAQ,yBAAI,MAAM,KAAK,CAAC,QAAI,0BAAK,MAAM,KAAK,CAAC;AACpE;;;ADpDO,IAAM,MAAM;AAAA,EAAW;AAAA,EAAe,CAAC,QAC5C,IAAI,GAAG,OAAO,EAAE,KAAK,OAAO,EAAE,UAAM,wBAAG,QAAQ,IAAI,CAAC,CAAC,EAAE,IAAI;AAC7D;AAEO,IAAM,SAAS;AAAA,EAAW;AAAA,EAAkB,CAAC,KAAc,SAChE,IAAI,GACD,OAAO,OAAO,EACd,OAAO,EAAE,IAAI,GAAG,GAAG,KAAK,CAAC,EACzB,mBAAmB;AAAA,IAClB,QAAQ,QAAQ;AAAA,IAChB,KAAK,EAAE,GAAG,MAAM,YAAY,uCAAmB;AAAA,EACjD,CAAC,EACA,IAAI;AACT;;;AEnBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAAC,sBAA2C;;;ACA3C,gBAA6B;AAGtB,IAAM,aAAa,IAAI,KAAK,KAAK,OAAO,CAAC,QAAQC,UAAS,IAAI,IAAI,gBAAgB,EAAE,QAAQ,MAAAA,MAAK,CAAC,CAAC;AACnG,IAAM,YAAY,IAAI;AAAA,EAC3B,CAACC,cAAiB,wBAAaA,OAAM,OAAO;AAAA,EAC5C,CAAC,QAAQA,UAAS,IAAI,IAAI,uBAAuB,EAAE,MAAAA,OAAM,OAAO,CAAC;AACnE;AAgBO,SAAS,gBAAqC,OAAY,KAAqB;AACpF,QAAM,SAAS,CAAC;AAChB,aAAW,QAAQ,OAAO;AACxB,WAAO,IAAI,IAAI,CAAC,IAAI;AAAA,EACtB;AACA,SAAO;AACT;AAOO,SAAS,OAAyB,EAAE,OAAO,cAAc,QAAQ,GAAwB;AAC9F,QAAM,UAAU,oBAAI,IAAqB;AACzC,QAAM,SAAc,CAAC;AACrB,QAAM,QAAa,CAAC,GAAG,KAAK;AAC5B,SAAO,MAAM,SAAS,GAAG;AACvB,UAAM,OAAO,MAAM,MAAM;AACzB,UAAM,MAAM,QAAQ,IAAI;AACxB,QAAI,IAAI,IAAI,GAAG,EAAG,QAAO;AACzB,QAAI,QAAQ,IAAI,GAAG,EAAG;AACtB,YAAQ,IAAI,GAAG;AACf,WAAO,KAAK,IAAI;AAChB,UAAMC,YAAW,aAAa,IAAI;AAClC,QAAI,IAAI,IAAIA,SAAQ,EAAG,QAAOA;AAC9B,UAAM,KAAK,GAAGA,SAAQ;AAAA,EACxB;AACA,SAAO;AACT;AAkBO,SAAS,KAAQ,OAAY;AAClC,SAAO,CAAC,GAAG,IAAI,IAAI,KAAK,CAAC;AAC3B;AAEO,SAAS,MAAoE,GAAM,GAAa;AACrG,QAAM,MAAM,EAAE,GAAG,EAAE;AACnB,aAAW,OAAO,OAAO,KAAK,CAAC,GAAG;AAChC,QAAI,EAAE,GAAG,MAAM,OAAW,KAAI,GAAoB,IAAI,EAAE,GAAG;AAAA,EAC7D;AACA,SAAO;AACT;;;AC9EO,IAAMC,SAAuC;AAAA,EAClD,QAAQ,CAAC,MAAM,gBAAgB,QAAQ,SAAS,OAAO;AAAA,EACvD,UAAU,CAAC,MAAM,KAAK;AAAA,EACtB,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO,CAAC;AACV;AAEO,IAAMC,eAAkD;AAAA,EAC7D,QAAQ,CAAC,MAAM,aAAa,QAAQ,SAAS,OAAO;AAAA,EACpD,UAAU,CAAC,MAAM,KAAK;AAAA,EACtB,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO,CAAC;AACV;AAEO,IAAMC,WAA2C;AAAA,EACtD,QAAQ,CAAC,MAAM,WAAW,QAAQ,QAAQ,QAAQ,eAAe,SAAS,OAAO;AAAA,EACjF,UAAU,CAAC,MAAM,KAAK;AAAA,EACtB,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO,CAAC;AACV;AAEO,IAAMC,yBAAqE;AAAA,EAChF,QAAQ,CAAC,MAAM,WAAW,WAAW,QAAQ,SAAS,OAAO;AAAA,EAC7D,UAAU,CAAC,MAAM,KAAK;AAAA,EACtB,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO,CAAC;AACV;;;AFxBA,IAAM,wBAA2C,CAAC,MAAM,gBAAgB,QAAQ,SAAS,OAAO;AAEzF,IAAM,MAAM,WAAW,aAAa,CAAC,QAAiB,IAAI,GAAG,OAAO,EAAE,KAAK,KAAK,EAAE,IAAI,CAAC;AAEvF,IAAM,SAAS,WAAW,gBAAgB,CAAC,KAAc,UAA2C,CAAC,MAAM;AAChH,SAAO,UAAU,IAAI,IAAI,OAAO,MAAeC,QAAO,OAAO,CAAC;AAChE,CAAC;AAEM,IAAM,QAAQ,WAAW,eAAe,CAAC,KAAc,OAAe,IAAI,GAAG,OAAO,EAAE,KAAK,KAAK,EAAE,UAAM,wBAAG,MAAM,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC;AAE/H,IAAM,UAAU;AAAA,EAAW;AAAA,EAAiB,CAAC,KAAcC,UAChE,IAAI,GAAG,OAAO,EAAE,KAAK,KAAK,EAAE,UAAM,wBAAG,MAAM,MAAMA,KAAI,CAAC,EAAE,IAAI;AAC9D;AAEO,IAAM,WAAW;AAAA,EAAW;AAAA,EAAkB,CAAC,KAAc,UAClE,IAAI,GAAG,OAAO,EAAE,KAAK,KAAK,EAAE,UAAM,wBAAG,MAAM,OAAO,KAAK,CAAC,EAAE,IAAI;AAChE;AAEO,IAAM,SAAS,WAAW,gBAAgB,CAAC,KAAc,WAAoB,IAAI,GAAG,OAAO,KAAK,EAAE,OAAO,MAAM,EAAE,IAAI,CAAC;AAEtH,IAAM,SAAS;AAAA,EAAW;AAAA,EAAgB,CAAC,KAAc,SAAiB,WAC/E,IAAI,GAAG,OAAO,KAAK,EAAE,IAAI,MAAM,EAAE,UAAM,wBAAG,MAAM,IAAI,OAAO,CAAC,EAAE,IAAI;AACpE;AAEO,IAAM,cAAc;AAAA,EAAW;AAAA,EAAqB,CAAC,KAAc,UAAoB,WAC5F,IAAI,GAAG,OAAO,KAAK,EAAE,IAAI,MAAM,EAAE,UAAM,6BAAQ,MAAM,IAAI,QAAQ,CAAC,EAAE,IAAI;AAC1E;AAEO,IAAM,kBAAkB;AAAA,EAAW;AAAA,EAAyB,CAAC,KAAc,WAChF,IAAI,GACD,OAAO,EACP,KAAK,KAAK,EACV,UAAM,6BAAI,wBAAG,MAAM,IAAI,OAAO,EAAE,OAAG,wBAAG,MAAM,OAAO,OAAO,KAAK,CAAC,CAAC,EACjE,IAAI;AACT;AAEO,IAAM,MAAM,WAAW,gBAAgB,CAAC,KAAc,YAAoB,IAAI,GAAG,OAAO,KAAK,EAAE,UAAM,wBAAG,MAAM,IAAI,OAAO,CAAC,EAAE,IAAI,CAAC;AAEjI,IAAM,aAAa;AAAA,EAAW;AAAA,EAAuB,CAAC,KAAc,iBACzE,IAAI,GAAG,OAAO,KAAK,EAAE,UAAM,wBAAG,MAAM,cAAc,YAAY,CAAC,EAAE,IAAI;AACvE;AAEO,IAAM,oBAAoB;AAAA,EAAW;AAAA,EAA2B,CAAC,KAAc,aACpF,IAAI,GACD,OAAO,EAAE,cAAc,MAAM,aAAa,CAAC,EAC3C,KAAK,KAAK,EACV,UAAM,6BAAQ,MAAM,IAAI,QAAQ,CAAC,EACjC,IAAI,EACJ,IAAI,CAAC,MAAM,EAAE,YAAY;AAC9B;AAEO,IAAM,oBAAoB,WAAW,2BAA2B,CAAC,KAAc,UAAkB,YAAqB,UAAU;AACrI,MAAI;AACJ,MAAI,WAAW;AACb,QAAI,aAAa,KAAK;AAEpB,gBAAU,IAAI,GACX,OAAO,EAAE,IAAI,YAAY,GAAG,CAAC,EAC7B,KAAK,WAAW,EAChB,IAAI,EACJ,IAAI,CAAC,MAAM,EAAE,EAAE;AAAA,IACpB,OAAO;AACL,gBAAU,IAAI,GACX,OAAO,EAAE,IAAI,YAAY,GAAG,CAAC,EAC7B,KAAK,WAAW,EAChB,UAAM,4BAAG,wBAAG,YAAY,MAAM,QAAQ,OAAG,0BAAK,YAAY,MAAM,GAAG,QAAQ,IAAI,CAAC,CAAC,EACjF,IAAI,EACJ,IAAI,CAAC,MAAM,EAAE,EAAE;AAAA,IACpB;AAAA,EACF,OAAO;AACL,UAAM,MAAM,IAAI,GAAG,OAAO,EAAE,IAAI,YAAY,GAAG,CAAC,EAAE,KAAK,WAAW,EAAE,UAAM,wBAAG,YAAY,MAAM,QAAQ,CAAC,EAAE,IAAI;AAC9G,cAAU,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC;AAAA,EAC9B;AACA,MAAI,QAAQ,WAAW,EAAG,QAAO,CAAC;AAClC,SAAO,IAAI,GAAG,OAAO,EAAE,KAAK,KAAK,EAAE,UAAM,6BAAQ,MAAM,cAAc,OAAO,CAAC,EAAE,IAAI;AACrF,CAAC;AAEM,IAAM,mBAAmB;AAAA,EAC9B;AAAA,EACA,CAAC,KAAc,wBAAgC,mBAAsC,0BAA0B;AAC7G,QAAI,CAAC,iBAAiB,SAAS,IAAI,EAAG,kBAAiB,KAAK,IAAI;AAChE,UAAMC,WAAU,IAAI,GACjB,OAAO,EAAE,SAAS,iBAAiB,QAAQ,CAAC,EAC5C,KAAK,gBAAgB,EACrB,UAAM,wBAAG,iBAAiB,wBAAwB,sBAAsB,CAAC,EACzE,IAAI;AAEP,UAAM,WAAW,KAAKA,SAAQ,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC;AACnD,QAAI,SAAS,WAAW,EAAG,QAAO,CAAC;AACnC,WAAO,IAAI,GAAG,OAAO,OAAO,OAAO,gBAAgB,CAAC,EAAE,KAAK,KAAK,EAAE,UAAM,6BAAQ,MAAM,IAAI,QAAQ,CAAC,EAAE,IAAI;AAAA,EAC3G;AACF;AAGO,IAAM,cAAc;AAAA,EACzB;AAAA,EACA,CAAC,KAAc,SAAiB,mBAAsC,0BAA0B;AAC9F,QAAI,CAAC,iBAAiB,SAAS,IAAI,EAAG,kBAAiB,KAAK,IAAI;AAChE,UAAM,cAAc,IAAI,GACrB,OAAO,EAAE,IAAI,QAAQ,iBAAiB,CAAC,EACvC,KAAK,OAAO,EACZ,UAAM,wBAAG,QAAQ,kBAAkB,OAAO,CAAC,EAC3C,IAAI;AAEP,UAAM,WAAW,KAAK,YAAY,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;AAClD,QAAI,SAAS,WAAW,EAAG,QAAO,CAAC;AACnC,WAAO,IAAI,GAAG,OAAO,OAAO,OAAO,gBAAgB,CAAC,EAAE,KAAK,KAAK,EAAE,UAAM,6BAAQ,MAAM,IAAI,QAAQ,CAAC,EAAE,IAAI;AAAA,EAC3G;AACF;AAGO,IAAM,YAAY;AAAA,EACvB;AAAA,EACA,CAAC,KAAc,SAAiB,mBAAsC,0BAA0B;AAC9F,QAAI,CAAC,iBAAiB,SAAS,IAAI,EAAG,kBAAiB,KAAK,IAAI;AAChE,UAAM,iBAAiB,IAAI,GACxB,OAAO,EAAE,kBAAkB,QAAQ,iBAAiB,CAAC,EACrD,KAAK,OAAO,EACZ,UAAM,wBAAG,QAAQ,kBAAkB,OAAO,CAAC,EAC3C,IAAI;AAEP,UAAM,WAAW,KAAK,eAAe,IAAI,CAAC,MAAM,EAAE,gBAAgB,CAAC;AACnE,QAAI,SAAS,WAAW,EAAG,QAAO,CAAC;AACnC,WAAO,IAAI,GAAG,OAAO,OAAO,OAAO,gBAAgB,CAAC,EAAE,KAAK,KAAK,EAAE,UAAM,6BAAQ,MAAM,IAAI,QAAQ,CAAC,EAAE,IAAI;AAAA,EAC3G;AACF;;;AGrIA;AAAA;AAAA,eAAAC;AAAA,EAAA,uBAAAC;AAAA,EAAA,eAAAC;AAAA,EAAA,gBAAAC;AAAA,EAAA,cAAAC;AAAA,EAAA,cAAAC;AAAA,EAAA,cAAAC;AAAA,EAAA,mBAAAC;AAAA;AAAA,IAAAC,sBAAiC;AAQ1B,IAAMC,SAAQ;AAAA,EAAW;AAAA,EAAqB,CAAC,KAAc,OAClE,IAAI,GAAG,OAAO,EAAE,KAAK,WAAW,EAAE,UAAM,wBAAG,YAAY,IAAI,EAAE,CAAC,EAAE,IAAI;AACtE;AAEO,IAAMC,WAAU;AAAA,EAAW;AAAA,EAAuB,CAAC,KAAcC,UACtE,IAAI,GAAG,OAAO,EAAE,KAAK,WAAW,EAAE,UAAM,wBAAG,YAAY,MAAMA,KAAI,CAAC,EAAE,IAAI;AAC1E;AAEO,IAAMC,YAAW;AAAA,EAAW;AAAA,EAAwB,CAAC,KAAc,UACxE,IAAI,GAAG,OAAO,EAAE,KAAK,WAAW,EAAE,UAAM,wBAAG,YAAY,OAAO,KAAK,CAAC,EAAE,IAAI;AAC5E;AAEO,IAAMC,UAAS;AAAA,EAAW;AAAA,EAAsB,CAAC,KAAc,WACpE,IAAI,GAAG,OAAO,WAAW,EAAE,OAAO,MAAM,EAAE,UAAU,EAAE,IAAI;AAC5D;AAEO,IAAMC,UAAS;AAAA,EAAW;AAAA,EAAsB,CAAC,KAAc,IAAY,WAChF,IAAI,GAAG,OAAO,WAAW,EAAE,IAAI,MAAM,EAAE,UAAM,wBAAG,YAAY,IAAI,EAAE,CAAC,EAAE,IAAI;AAC3E;AAEO,IAAMC,eAAc;AAAA,EAAW;AAAA,EAA2B,CAAC,KAAc,KAAe,WAC7F,IAAI,GAAG,OAAO,WAAW,EAAE,IAAI,MAAM,EAAE,UAAM,6BAAQ,YAAY,IAAI,GAAG,CAAC,EAAE,IAAI;AACjF;AAEO,IAAMC,mBAAkB;AAAA,EAAW;AAAA,EAA+B,CAAC,KAAc,WACtF,IAAI,GACD,OAAO,EACP,KAAK,WAAW,EAChB,UAAM,6BAAI,wBAAG,YAAY,IAAI,OAAO,EAAE,OAAG,wBAAG,YAAY,OAAO,OAAO,KAAK,CAAC,CAAC,EAC7E,IAAI;AACT;AAEO,IAAMC,UAAS,WAAW,sBAAsB,CAAC,KAAc,UAAqD,CAAC,MAAM;AAChI,SAAO,UAAU,IAAI,IAAI,aAAa,MAAeC,cAAa,OAAO,CAAC;AAC5E,CAAC;;;AC1CD;AAAA;AAAA;AAAA;AAAA,kBAAAC;AAAA,EAAA;AAAA;AAAA,gBAAAC;AAAA;AAAA,IAAAC,sBAAmB;AAMZ,IAAM,mBAAmB;AAAA,EAAW;AAAA,EAA4B,CAAC,KAAc,qBACpF,IAAI,GAAG,OAAO,EAAE,KAAK,OAAO,EAAE,UAAM,wBAAG,QAAQ,kBAAkB,gBAAgB,CAAC,EAAE,IAAI;AAC1F;AAEO,IAAM,mBAAmB;AAAA,EAAW;AAAA,EAA4B,CAAC,KAAc,qBACpF,IAAI,GAAG,OAAO,EAAE,KAAK,OAAO,EAAE,UAAM,wBAAG,QAAQ,kBAAkB,gBAAgB,CAAC,EAAE,IAAI;AAC1F;AAEO,IAAM,cAAc,WAAW,uBAAuB,CAAC,KAAc,WAAwB,IAAI,GAAG,OAAO,OAAO,EAAE,OAAO,MAAM,EAAE,IAAI,CAAC;AAExI,IAAM,uBAAuB;AAAA,EAAW;AAAA,EAAgC,CAAC,KAAc,YAC5F,IAAI,GAAG,OAAO,OAAO,EAAE,UAAM,wBAAG,QAAQ,kBAAkB,OAAO,CAAC,EAAE,IAAI;AAC1E;AAEO,IAAMC,YAAW;AAAA,EAAW;AAAA,EAAoB,CAAC,KAAc,UACpE,IAAI,GAAG,OAAO,EAAE,KAAK,OAAO,EAAE,UAAM,wBAAG,QAAQ,OAAO,KAAK,CAAC,EAAE,IAAI;AACpE;AAEO,IAAMC,UAAS;AAAA,EAAW;AAAA,EAAkB,CAAC,KAAc,IAAY,SAC5E,IAAI,GAAG,OAAO,OAAO,EAAE,IAAI,IAAI,EAAE,UAAM,wBAAG,QAAQ,IAAI,EAAE,CAAC,EAAE,IAAI;AACjE;;;AC1BA;AAAA;AAAA;AAAA;AAAA,eAAAC;AAAA,EAAA,uBAAAC;AAAA,EAAA,gBAAAC;AAAA,EAAA;AAAA,qBAAAC;AAAA,EAAA;AAAA;AAAA;AAAA,gBAAAC;AAAA,EAAA,cAAAC;AAAA,EAAA,wBAAAC;AAAA;AAAA,IAAAC,sBAAiC;AAS1B,IAAMC,eAAc,WAAW,uBAAuB,CAAC,KAAc,WAAwB,IAAI,GAAG,OAAO,OAAO,EAAE,OAAO,MAAM,EAAE,IAAI,CAAC;AAExI,IAAM,cAAc;AAAA,EAAW;AAAA,EAA0B,CAAC,KAAc,YAC7E,IAAI,GAAG,OAAO,OAAO,EAAE,UAAM,wBAAG,QAAQ,SAAS,OAAO,CAAC,EAAE,IAAI;AACjE;AAEO,IAAM,mBAAmB;AAAA,EAC9B;AAAA,EACA,CAAC,KAAc,WACb,IAAI,GACD,OAAO,EACP,KAAK,OAAO,EACZ,UAAM,6BAAI,wBAAG,QAAQ,SAAS,OAAO,OAAO,OAAG,wBAAG,QAAQ,MAAM,OAAO,IAAI,OAAG,wBAAG,QAAQ,aAAa,OAAO,WAAW,CAAC,CAAC,EAC1H,IAAI;AACX;AAEO,IAAMC,YAAW;AAAA,EAAW;AAAA,EAAoB,CAAC,KAAc,UACpE,IAAI,GAAG,OAAO,EAAE,KAAK,OAAO,EAAE,UAAM,wBAAG,QAAQ,OAAO,KAAK,CAAC,EAAE,IAAI;AACpE;AAEO,IAAM,UAAU;AAAA,EAAW;AAAA,EAAmB,CAAC,KAAc,YAClE,IAAI,GAAG,OAAO,EAAE,KAAK,OAAO,EAAE,UAAM,wBAAG,QAAQ,SAAS,OAAO,CAAC,EAAE,IAAI;AACxE;AAEO,IAAMC,UAAS;AAAA,EAAW;AAAA,EAAkB,CAAC,KAAc,IAAY,SAC5E,IAAI,GAAG,OAAO,OAAO,EAAE,IAAI,IAAI,EAAE,UAAM,wBAAG,QAAQ,IAAI,EAAE,CAAC,EAAE,IAAI;AACjE;AAEO,IAAMC,SAAQ,WAAW,iBAAiB,CAAC,KAAc,OAAe,IAAI,GAAG,OAAO,EAAE,KAAK,OAAO,EAAE,UAAM,wBAAG,QAAQ,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC;AAErI,IAAMC,mBAAkB;AAAA,EAAW;AAAA,EAA2B,CAAC,KAAc,WAClF,IAAI,GACD,OAAO,EACP,KAAK,OAAO,EACZ,UAAM,6BAAI,wBAAG,QAAQ,IAAI,OAAO,EAAE,OAAG,wBAAG,QAAQ,OAAO,OAAO,KAAK,CAAC,CAAC,EACrE,IAAI;AACT;AAEO,SAAS,KAA2B,QAA8B;AACvE,SAAO,IAAI;AAAA,IACT,MAAM,KAAK,MAAM,OAAO,IAAK;AAAA,IAC7B,CAAC,WAAW,IAAI,IAAI,2BAA2B,EAAE,QAAQ,WAAW,OAAO,IAAI,MAAM,OAAO,KAAK,CAAC;AAAA,EACpG;AACF;AAEO,IAAMC,UAAS,WAAW,kBAAkB,CAAC,KAAc,UAA+C,CAAC,MAAM;AACtH,SAAO,UAAU,IAAI,IAAI,SAAS,MAAeC,UAAS,OAAO,CAAC;AACpE,CAAC;AAGM,IAAM,gBAAgB;AAAA,EAC3B;AAAA,EACA,CAAC,KAAc,WAAmB,mBAAiDA,SAAQ,WAAW;AACpG,QAAI,CAAC,iBAAiB,SAAS,IAAI,EAAG,kBAAiB,KAAK,IAAI;AAChE,UAAM,eAAe,IAAI,GACtB,OAAO,EAAE,IAAI,sBAAsB,aAAa,CAAC,EACjD,KAAK,qBAAqB,EAC1B,UAAM,wBAAG,sBAAsB,gBAAgB,SAAS,CAAC,EACzD,IAAI;AAEP,UAAM,aAAa,KAAK,aAAa,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,OAAO,CAAC,OAAqB,OAAO,IAAI,CAAC;AAC/F,QAAI,WAAW,WAAW,EAAG,QAAO,CAAC;AACrC,WAAO,IAAI,GAAG,OAAO,OAAO,SAAS,gBAAgB,CAAC,EAAE,KAAK,OAAO,EAAE,UAAM,6BAAQ,QAAQ,IAAI,UAAU,CAAC,EAAE,IAAI;AAAA,EACnH;AACF;AAGO,IAAM,cAAc;AAAA,EACzB;AAAA,EACA,CAAC,KAAc,WAAmB,mBAAiDA,SAAQ,WAAW;AACpG,QAAI,CAAC,iBAAiB,SAAS,IAAI,EAAG,kBAAiB,KAAK,IAAI;AAChE,UAAM,eAAe,IAAI,GACtB,OAAO,EAAE,IAAI,sBAAsB,eAAe,CAAC,EACnD,KAAK,qBAAqB,EAC1B,UAAM,wBAAG,sBAAsB,cAAc,SAAS,CAAC,EACvD,IAAI;AAEP,UAAM,aAAa,KAAK,aAAa,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,OAAO,CAAC,OAAqB,OAAO,IAAI,CAAC;AAC/F,QAAI,WAAW,WAAW,EAAG,QAAO,CAAC;AACrC,WAAO,IAAI,GAAG,OAAO,OAAO,SAAS,gBAAgB,CAAC,EAAE,KAAK,OAAO,EAAE,UAAM,6BAAQ,QAAQ,IAAI,UAAU,CAAC,EAAE,IAAI;AAAA,EACnH;AACF;AAGO,IAAMC,oBAAmB;AAAA,EAC9B;AAAA,EACA,CAAC,KAAc,eAAuB,mBAAiDD,SAAQ,WAAW;AACxG,QAAI,CAAC,iBAAiB,SAAS,IAAI,EAAG,kBAAiB,KAAK,IAAI;AAGhE,UAAM,eAAe,IAAI,GACtB,OAAO,EAAE,WAAW,sBAAsB,UAAU,CAAC,EACrD,KAAK,qBAAqB,EAC1B,UAAU,sBAAkB,wBAAG,sBAAsB,oBAAoB,iBAAiB,EAAE,CAAC,EAC7F,UAAM,wBAAG,iBAAiB,wBAAwB,aAAa,CAAC,EAChE,IAAI;AAEP,UAAM,aAAa,KAAK,aAAa,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC;AAC5D,QAAI,WAAW,WAAW,EAAG,QAAO,CAAC;AACrC,WAAO,IAAI,GAAG,OAAO,OAAO,SAAS,gBAAgB,CAAC,EAAE,KAAK,OAAO,EAAE,UAAM,6BAAQ,QAAQ,IAAI,UAAU,CAAC,EAAE,IAAI;AAAA,EACnH;AACF;;;AC9GA;AAAA;AAAA,aAAAE;AAAA,EAAA,aAAAC;AAAA,EAAA;AAAA,kBAAAC;AAAA,EAAA;AAAA,gBAAAC;AAAA,EAAA,cAAAC;AAAA,EAAA,cAAAC;AAAA,EAAA;AAAA;AAAA;AAAA,IAAAC,sBAAsC;AAS/B,IAAMC,SAAQ;AAAA,EAAW;AAAA,EAA+B,CAAC,KAAc,OAC5E,IAAI,GAAG,OAAO,EAAE,KAAK,qBAAqB,EAAE,UAAM,wBAAG,sBAAsB,IAAI,EAAE,CAAC,EAAE,IAAI;AAC1F;AAEO,IAAMC,YAAW;AAAA,EAAW;AAAA,EAAkC,CAAC,KAAc,UAClF,IAAI,GAAG,OAAO,EAAE,KAAK,qBAAqB,EAAE,UAAM,wBAAG,sBAAsB,OAAO,KAAK,CAAC,EAAE,IAAI;AAChG;AAEO,IAAM,8BAA8B;AAAA,EACzC;AAAA,EACA,CAAC,KAAc,WACb,IAAI,GACD,OAAO,EACP,KAAK,qBAAqB,EAC1B;AAAA,QACC;AAAA,UACE,wBAAG,sBAAsB,SAAS,OAAO,OAAO;AAAA,MAChD,OAAO,YAAY,OAAO,0BAAM,sBAAsB,OAAO,iBAAa,wBAAG,sBAAsB,SAAS,OAAO,OAAO;AAAA,MAC1H,OAAO,SAAS,OAAO,0BAAM,sBAAsB,IAAI,iBAAa,wBAAG,sBAAsB,MAAM,OAAO,IAAI;AAAA,IAChH;AAAA,EACF,EACC,IAAI;AACX;AAEO,IAAMC,UAAS;AAAA,EAAW;AAAA,EAAgC,CAAC,KAAc,UAC9E,IAAI,GAAG,OAAO,qBAAqB,EAAE,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI;AACrE;AAEO,IAAMC,UAAS;AAAA,EAAW;AAAA,EAAgC,CAAC,KAAc,IAAY,SAC1F,IAAI,GAAG,OAAO,qBAAqB,EAAE,IAAI,IAAI,EAAE,UAAM,wBAAG,sBAAsB,IAAI,EAAE,CAAC,EAAE,IAAI;AAC7F;AAGO,IAAMC,OAAM,WAAW,6BAA6B,CAAC,QAAiB,IAAI,GAAG,OAAO,EAAE,KAAK,qBAAqB,EAAE,IAAI,CAAC;AAEvH,SAAS,cAAc,KAAc,OAA8B;AACxE,SAAO,IAAI;AAAA,IACT,MAAM,4BAA4B,KAAK,EAAE,SAAS,MAAM,SAAS,SAAS,MAAM,WAAW,MAAM,MAAM,MAAM,QAAQ,KAAK,CAAC;AAAA,IAC3H,CAAC,aAAa,YAAYF,QAAO,KAAK,KAAK;AAAA,EAC7C;AACF;AAEO,IAAMG,UAAS;AAAA,EACpB;AAAA,EACA,CAAC,KAAc,UAAuE,CAAC,MAAM;AAC3F,WAAO,UAAU,IAAI,IAAI,uBAAuB,MAAeC,wBAAuB,OAAO,CAAC;AAAA,EAChG;AACF;AAGO,IAAM,eAAe;AAAA,EAC1B;AAAA,EACA,CAAC,KAAc,SAAiB,mBAA6DA,uBAAsB,WAAW;AAC5H,QAAI,CAAC,iBAAiB,SAAS,IAAI,EAAG,kBAAiB,KAAK,IAAI;AAEhE,UAAM,kBAAkB,IAAI,GACzB,OAAO,EAAE,wBAAwB,iBAAiB,uBAAuB,CAAC,EAC1E,KAAK,gBAAgB,EACrB,UAAM,wBAAG,iBAAiB,SAAS,OAAO,CAAC,EAC3C,IAAI;AAEP,UAAM,iBAAiB,KAAK,gBAAgB,IAAI,CAAC,MAAM,EAAE,sBAAsB,CAAC;AAChF,QAAI,eAAe,WAAW,EAAG,QAAO,CAAC;AAEzC,WAAO,IAAI,GACR,OAAO,OAAO,uBAAuB,gBAAgB,CAAC,EACtD,KAAK,qBAAqB,EAC1B,UAAM,6BAAQ,sBAAsB,IAAI,cAAc,CAAC,EACvD,IAAI;AAAA,EACT;AACF;AAGO,IAAM,iBAAiB;AAAA,EAC5B;AAAA,EACA,CAAC,KAAc,WAAmB,mBAA6DA,uBAAsB,WAAW;AAC9H,QAAI,CAAC,iBAAiB,SAAS,IAAI,EAAG,kBAAiB,KAAK,IAAI;AAEhE,UAAM,eAAe,IAAI,GACtB,OAAO,EAAE,oBAAoB,sBAAsB,mBAAmB,CAAC,EACvE,KAAK,qBAAqB,EAC1B,UAAM,wBAAG,sBAAsB,WAAW,SAAS,CAAC,EACpD,IAAI;AAEP,QAAI,aAAa,WAAW,EAAG,QAAO,CAAC;AAEvC,UAAM,sBAAsB,KAAK,aAAa,IAAI,CAAC,MAAM,EAAE,kBAAkB,CAAC;AAE9E,UAAM,kBAAkB,IAAI,GACzB,OAAO,EAAE,wBAAwB,iBAAiB,uBAAuB,CAAC,EAC1E,KAAK,gBAAgB,EACrB,UAAM,6BAAQ,iBAAiB,IAAI,mBAAmB,CAAC,EACvD,IAAI;AAEP,UAAM,iBAAiB,KAAK,gBAAgB,IAAI,CAAC,MAAM,EAAE,sBAAsB,CAAC;AAChF,QAAI,eAAe,WAAW,EAAG,QAAO,CAAC;AAEzC,WAAO,IAAI,GACR,OAAO,OAAO,uBAAuB,gBAAgB,CAAC,EACtD,KAAK,qBAAqB,EAC1B,UAAM,6BAAQ,sBAAsB,IAAI,cAAc,CAAC,EACvD,IAAI;AAAA,EACT;AACF;;;AChHA;AAAA;AAAA;AAAA,iBAAAC;AAAA,EAAA;AAAA,qBAAAC;AAAA,EAAA,mBAAAC;AAAA;AAAA,IAAAC,uBAAmB;AAMZ,IAAMC,eAAc;AAAA,EAAW;AAAA,EAAgC,CAAC,KAAc,WACnF,IAAI,GAAG,OAAO,gBAAgB,EAAE,OAAO,MAAM,EAAE,IAAI;AACrD;AAEO,IAAMC,eAAc;AAAA,EAAW;AAAA,EAAmC,CAAC,KAAc,YACtF,IAAI,GAAG,OAAO,gBAAgB,EAAE,UAAM,yBAAG,iBAAiB,SAAS,OAAO,CAAC,EAAE,IAAI;AACnF;AAEO,IAAMC,WAAU;AAAA,EAAW;AAAA,EAA4B,CAAC,KAAc,YAC3E,IAAI,GAAG,OAAO,EAAE,KAAK,gBAAgB,EAAE,UAAM,yBAAG,iBAAiB,SAAS,OAAO,CAAC,EAAE,IAAI;AAC1F;AAEO,IAAM,yBAAyB;AAAA,EAAW;AAAA,EAA2C,CAAC,KAAc,2BACzG,IAAI,GAAG,OAAO,EAAE,KAAK,gBAAgB,EAAE,UAAM,yBAAG,iBAAiB,wBAAwB,sBAAsB,CAAC,EAAE,IAAI;AACxH;AAEO,IAAM,YAAY;AAAA,EAAW;AAAA,EAA8B,CAAC,KAAc,cAC/E,IAAI,GAAG,MAAM,sBAAsB,SAAS;AAAA,IAC1C,WAAO,yBAAG,sBAAsB,WAAW,SAAS;AAAA,IACpD,MAAM;AAAA,MACJ,iBAAiB;AAAA,QACf,MAAM;AAAA,UACJ,qBAAqB;AAAA,QACvB;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;ACjCA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAAAC;AAAA;AAAA,IAAAC,uBAAwB;AAMjB,IAAM,iBAAiB;AAAA,EAAW;AAAA,EAAwC,CAAC,KAAc,mBAC9F,IAAI,GAAG,MAAM,sBAAsB,SAAS;AAAA,IAC1C,WAAO,yBAAG,sBAAsB,gBAAgB,cAAc;AAAA,IAC9D,MAAM;AAAA,MACJ,WAAW;AAAA,QACT,MAAM;AAAA,UACJ,MAAM;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEO,IAAMC,UAAS;AAAA,EAAW;AAAA,EAAgC,CAAC,KAAc,UAC9E,IAAI,GAAG,OAAO,qBAAqB,EAAE,OAAO,KAAK,EAAE,IAAI;AACzD;AAEO,IAAM,SAAS;AAAA,EAAW;AAAA,EAAgC,CAAC,KAAc,WAC9E,IAAI,GACD,OAAO,EAAE,IAAI,sBAAsB,GAAG,CAAC,EACvC,KAAK,qBAAqB,EAC1B,UAAM,8BAAI,yBAAG,sBAAsB,gBAAgB,OAAO,cAAc,OAAG,yBAAG,sBAAsB,cAAc,OAAO,YAAY,CAAC,CAAC,EACvI,IAAI;AACT;AAEO,IAAM,qBAAqB;AAAA,EAAW;AAAA,EAA4C,CAAC,KAAc,mBACtG,IAAI,GAAG,OAAO,qBAAqB,EAAE,UAAM,yBAAG,sBAAsB,gBAAgB,cAAc,CAAC,EAAE,IAAI;AAC3G;;;ACjCA;AAAA;AAAA;AAAA,mBAAAC;AAAA,EAAA;AAAA,gBAAAC;AAAA,EAAA,cAAAC;AAAA;AAAA,IAAAC,uBAAwB;AAMjB,IAAMC,aAAY;AAAA,EAAW;AAAA,EAAmC,CAAC,KAAc,cACpF,IAAI,GAAG,OAAO,EAAE,KAAK,qBAAqB,EAAE,UAAM,yBAAG,sBAAsB,WAAW,SAAS,CAAC,EAAE,IAAI;AACxG;AAEO,IAAMC,UAAS;AAAA,EAAW;AAAA,EAAgC,CAAC,KAAc,UAC9E,IAAI,GAAG,OAAO,qBAAqB,EAAE,OAAO,KAAK,EAAE,IAAI;AACzD;AAEO,IAAM,qBAAqB;AAAA,EAAW;AAAA,EAA4C,CAAC,KAAc,uBACtG,IAAI,GAAG,OAAO,EAAE,KAAK,qBAAqB,EAAE,UAAM,yBAAG,sBAAsB,oBAAoB,kBAAkB,CAAC,EAAE,IAAI;AAC1H;AAEO,IAAMC,UAAS;AAAA,EAAW;AAAA,EAAgC,CAAC,KAAc,WAC9E,IAAI,GACD,OAAO,EAAE,IAAI,sBAAsB,GAAG,CAAC,EACvC,KAAK,qBAAqB,EAC1B,UAAM,8BAAI,yBAAG,sBAAsB,WAAW,OAAO,SAAS,OAAG,yBAAG,sBAAsB,oBAAoB,OAAO,kBAAkB,CAAC,CAAC,EACzI,IAAI;AACT;AAEO,IAAM,gBAAgB;AAAA,EAAW;AAAA,EAAuC,CAAC,KAAc,cAC5F,IAAI,GAAG,OAAO,qBAAqB,EAAE,UAAM,yBAAG,sBAAsB,WAAW,SAAS,CAAC,EAAE,IAAI;AACjG;;;AhB5BA;AAUA,eAAe,eAAe,QAA2BC,KAA0C,QAAgB;AACjH,QAAM,eAAe,aAAAC,QAAK,QAAQ,OAAO,YAAY;AAGrD,QAAM,iBAAa,0BAAQ,0BAAc,YAAY,GAAG,CAAC;AACzD,QAAM,kBAAkB,WAAW,SAAS,OAAO,QAC/C,mBAAK,YAAY,eAAe,QAChC,mBAAK,YAAY,kBAAkB;AACvC,QAAM,oBAAgB,mBAAK,cAAc,eAAe;AACxD,MAAI,CAAC,kBAAAC,QAAG,IAAI,WAAW,aAAa,GAAG;AACrC,UAAM,IAAI,IAAI,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAAA,EACzD;AACA,QAAM,WAAW,kBAAAA,QAAG,2BAA2B,kBAAAA,QAAG,eAAe,eAAe,kBAAAA,QAAG,IAAI,QAAQ,EAAE,QAAQ,kBAAAA,QAAG,KAAK,YAAY;AAC7H,QAAM,UAAU,kBAAAA,QAAG,cAAc,EAAE,WAAW,SAAS,WAAW,SAAS,SAAS,QAAQ,CAAC;AAC7F,QAAM,oBAAoB,OAAO,qBAAqB,aAAAD,QAAK,KAAK,cAAc,cAAc;AAC5F,QAAM,qBAAqB,OAAO,sBAAsB,CAAC,aAAAA,QAAK,KAAK,cAAc,cAAc,CAAC;AAChG,QAAME,gBAAe,MAAM,iBAAiB,mBAAmB,kBAAkB;AACjF,QAAM,MAAM,EAAE,IAAAH,KAAI,QAAQ,iBAAiB,cAAc,SAAS,cAAAG,cAAa;AAC/E,QAAM,QAAQ,GAAG;AACjB,MAAI;AAAA,IACF,gBAAW,OAAO,KAAK;AAAA,MACrB;AAAA,MACA,aAAa,OAAO,eAAe;AAAA,MACnC,mBAAmB,OAAO,qBAAqB;AAAA,MAC/C,oBAAoB,OAAO,qBAAqB,KAAK,UAAU,OAAO,kBAAkB,IAAI;AAAA,IAC9F,CAAC;AAAA,EACH;AACA,SAAO;AACT;AAEA,eAAsB,oBAAoB,QAAkC;AAC1E,QAAM,SAAS,IAAI,sBAAAC,QAAS,OAAO,OAAO;AAC1C,SAAO,OAAO,mBAAmB;AACjC,QAAMJ,UAAK,gCAAQ,QAAQ,EAAE,uBAAO,CAAC;AACrC,SAAO,eAAe,QAAQA,KAAI,MAAM;AAC1C;AAEA,eAAsB,gBAAgB,SAAmC;AACvE,QAAM,SAAS,IAAI,sBAAAI,QAAS,OAAO;AACnC,SAAO,OAAO,mBAAmB;AACjC,QAAMJ,UAAK,gCAAQ,QAAQ,EAAE,uBAAO,CAAC;AAErC,QAAM,WAAW,EAAE,IAAAA,KAAI,OAAO;AAC9B,QAAM,SAAS,IAAI,SAAS,gBAAW,IAAI,QAAQ,CAAC;AAEpD,MAAI,CAAC,QAAQ;AACX,WAAO,MAAM;AACb,UAAM,IAAI,IAAI,oBAAoB,EAAE,QAAQ,CAAC;AAAA,EAC/C;AAEA,MAAI;AACJ,MAAI,OAAO,oBAAoB;AAC7B,QAAI;AACF,2BAAqB,KAAK,MAAM,OAAO,kBAAkB;AAAA,IAC3D,SAAS,aAAa;AACpB,aAAO,MAAM;AACb,YAAM,IAAI,IAAI,qCAAqC,EAAE,SAAS,QAAQ,YAAY,CAAC;AAAA,IACrF;AAAA,EACF;AAEA,SAAO,eAAe,QAAQA,KAAI;AAAA,IAChC;AAAA,IACA,cAAc,OAAO;AAAA,IACrB,aAAa,OAAO,eAAe;AAAA,IACnC,mBAAmB,OAAO,qBAAqB;AAAA,IAC/C;AAAA,EACF,CAAC;AACH;AAEA,eAAe,iBAAiB,mBAA2B,oBAA8B;AACvF,QAAMG,gBAAkD,CAAC;AACzD,QAAM,eAAe,KAAK,MAAM,UAAM,2BAAS,mBAAmB,OAAO,CAAC;AAC1E,QAAM,WAAmC,EAAE,GAAI,aAAa,gBAAgB,CAAC,GAAI,GAAI,aAAa,mBAAmB,CAAC,EAAG;AACzH,aAAW,CAAC,MAAM,OAAO,KAAK,OAAO,QAAQ,QAAQ,GAAG;AACtD,IAAAA,cAAa,IAAI,IAAI,EAAE,MAAM,SAAS,aAAa,MAAM,gBAAgB,oBAAoB,IAAI,EAAE;AAAA,EACrG;AACA,SAAOA;AACT;AAEA,eAAe,gBAAgB,oBAA8B,cAAsB;AACjF,aAAW,qBAAqB,oBAAoB;AAClD,QAAI;AACF,YAAM,oBAAoB,aAAAF,QAAK,KAAK,mBAAmB,cAAc,cAAc;AACnF,YAAM,eAAe,KAAK,MAAM,UAAM,2BAAS,mBAAmB,OAAO,CAAC;AAC1E,YAAM,MAAM,aAAa,YAAY,OAAO,aAAa;AACzD,UAAI,OAAO,QAAQ,UAAU;AAC3B,YAAI,OAAO,IAAI,MAAM,GAAG,EAAE,MAAM,EAAE,EAAE,KAAK,GAAG;AAC5C,YAAI,KAAK,SAAS,MAAM,EAAG,QAAO,KAAK,MAAM,GAAG,EAAE;AAClD,eAAO,KAAK,MAAM,GAAG,EAAE,IAAI;AAAA,MAC7B;AAAA,IACF,QAAQ;AAAA,IAAC;AAAA,EACX;AACA,SAAO;AACT;;;ADhGO,IAAM,MAAM;AAAA,EACjB;AAAA,EACA,aAAa,CAACI,cAAiB,uBAAWA,KAAI;AAAA,EAC9C,MAAM,MAAM,QAAQ;AAAA,EACpB,KAAK,IAAI,SAAgB,QAAQ,IAAI,GAAG,IAAI;AAAA,EAC5C,OAAO,IAAI,SAAgB,QAAQ,MAAM,GAAG,IAAI;AAAA,EAChD,MAAM,CAAC,SAAiB,QAAQ,KAAK,IAAI;AAC3C;;;AkBdA,IAAAC,qBAAwB;;;ACAxB,uBAAwB;;;ACAxB,IAAAC,cAAkB;;;ACAlB,iBAAkB;AAEX,IAAM,SAAS,aAAE,OAAO;AAAA,EAC7B,SAAS,aAAE,OAAO,EAAE,SAAS,yBAAyB;AAAA,EACtD,cAAc,aAAE,OAAO,EAAE,SAAS,4BAA4B;AAAA,EAC9D,aAAa,aAAE,OAAO,EAAE,SAAS;AAAA,EACjC,mBAAmB,aAAE,OAAO,EAAE,SAAS;AAAA,EACvC,oBAAoB,aAAE,MAAM,aAAE,OAAO,CAAC,EAAE,SAAS;AACnD,CAAC;AAGD,IAAM,eAAe,aAAE,MAAM;AAAA,EAC3B,aAAE,OAAO;AAAA,EACT,aAAE,OAAO,EAAE,UAAU,aAAE,OAAO,EAAE,CAAC;AAAA,EACjC,aAAE,OAAO,EAAE,aAAa,aAAE,OAAO,EAAE,CAAC;AAAA,EACpC,aAAE,OAAO,EAAE,WAAW,aAAE,OAAO,EAAE,CAAC;AACpC,CAAC;AAED,IAAM,iBAAiB,aAAE,KAAK,CAAC,OAAO,MAAM,CAAC;AAG7C,IAAM,YAAY,aAAE,KAAK,CAAC,MAAM,gBAAgB,QAAQ,eAAe,SAAS,OAAO,CAAC;AACxF,IAAM,YAAY,aAAE,KAAK,CAAC,WAAW,eAAe,OAAO,CAAC;AAErD,IAAM,oBAAoB,aAAE,OAAO;AAAA,EACxC,QAAQ,aAAE,MAAM,SAAS,EAAE,SAAS;AAAA,EACpC,OAAO,aAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EAC5C,QAAQ,aAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS;AAAA,EAChD,OAAO,aACJ,OAAO;AAAA,IACN,IAAI,aAAE,OAAO,EAAE,SAAS;AAAA,IACxB,cAAc,aAAE,OAAO,EAAE,SAAS;AAAA,IAClC,MAAM,aAAa,SAAS;AAAA,IAC5B,aAAa,aAAa,SAAS;AAAA,IACnC,OAAO,aAAE,MAAM,CAAC,WAAW,aAAE,OAAO,EAAE,UAAU,aAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS;AAAA,IACzE,OAAO,aAAa,SAAS;AAAA,EAC/B,CAAC,EACA,SAAS;AAAA,EACZ,UAAU,aAAE,MAAM,CAAC,WAAW,cAAc,CAAC,EAAE,SAAS;AAC1D,CAAC;AAEM,IAAM,sBAAsB,aAAE,OAAO;AAAA,EAC1C,QAAQ,aAAE,MAAM,SAAS,EAAE,SAAS;AAAA,EACpC,OAAO,aAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EAC5C,QAAQ,aAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS;AAAA,EAChD,MAAM,aAAE,QAAQ,EAAE,SAAS;AAC7B,CAAC;AAGD,IAAM,cAAc,aAAE,KAAK,CAAC,MAAM,WAAW,QAAQ,QAAQ,QAAQ,QAAQ,eAAe,eAAe,SAAS,OAAO,CAAC;AAC5H,IAAM,aAAa,aAAE,KAAK,CAAC,YAAY,SAAS,gBAAgB,kBAAkB,YAAY,MAAM,CAAC;AACrG,IAAM,cAAc,aAAE,KAAK,CAAC,WAAW,eAAe,OAAO,CAAC;AAEvD,IAAM,sBAAsB,aAAE,OAAO;AAAA,EAC1C,QAAQ,aAAE,MAAM,WAAW,EAAE,SAAS;AAAA,EACtC,OAAO,aAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EAC5C,QAAQ,aAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS;AAAA,EAChD,OAAO,aACJ,OAAO;AAAA,IACN,IAAI,aAAE,OAAO,EAAE,SAAS;AAAA,IACxB,SAAS,aAAE,OAAO,EAAE,SAAS;AAAA,IAC7B,MAAM,aAAE,MAAM,CAAC,YAAY,aAAE,OAAO,EAAE,UAAU,aAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS;AAAA,IACzE,MAAM,aAAa,SAAS;AAAA,IAC5B,MAAM,aAAa,SAAS;AAAA,IAC5B,MAAM,aAAa,SAAS;AAAA,IAC5B,aAAa,aAAa,SAAS;AAAA,IACnC,aAAa,aAAE,QAAQ,EAAE,SAAS;AAAA,IAClC,OAAO,aAAE,MAAM,CAAC,aAAa,aAAE,OAAO,EAAE,UAAU,aAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS;AAAA,IAC3E,OAAO,aAAa,SAAS;AAAA,EAC/B,CAAC,EACA,SAAS;AAAA,EACZ,UAAU,aAAE,MAAM,CAAC,aAAa,cAAc,CAAC,EAAE,SAAS;AAC5D,CAAC;AAEM,IAAM,wBAAwB,aAAE,OAAO;AAAA,EAC5C,QAAQ,aAAE,MAAM,WAAW,EAAE,SAAS;AAAA,EACtC,OAAO,aAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EAC5C,QAAQ,aAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS;AAAA,EAChD,MAAM,aAAE,QAAQ,EAAE,SAAS;AAC7B,CAAC;AAGD,IAAM,iBAAiB,aAAE,KAAK,CAAC,MAAM,aAAa,QAAQ,eAAe,SAAS,OAAO,CAAC;AAC1F,IAAM,iBAAiB,aAAE,KAAK,CAAC,eAAe,OAAO,CAAC;AAE/C,IAAM,yBAAyB,aAAE,OAAO;AAAA,EAC7C,QAAQ,aAAE,MAAM,cAAc,EAAE,SAAS;AAAA,EACzC,OAAO,aAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EAC5C,QAAQ,aAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS;AAAA,EAChD,OAAO,aACJ,OAAO;AAAA,IACN,IAAI,aAAE,OAAO,EAAE,SAAS;AAAA,IACxB,WAAW,aAAE,OAAO,EAAE,SAAS;AAAA,IAC/B,MAAM,aAAa,SAAS;AAAA,IAC5B,aAAa,aAAa,SAAS;AAAA,IACnC,OAAO,aAAE,MAAM,CAAC,gBAAgB,aAAE,OAAO,EAAE,UAAU,aAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS;AAAA,IAC9E,OAAO,aAAa,SAAS;AAAA,EAC/B,CAAC,EACA,SAAS;AAAA,EACZ,UAAU,aAAE,MAAM,CAAC,gBAAgB,cAAc,CAAC,EAAE,SAAS;AAC/D,CAAC;AAEM,IAAM,2BAA2B,aAAE,OAAO;AAAA,EAC/C,QAAQ,aAAE,MAAM,cAAc,EAAE,SAAS;AAAA,EACzC,OAAO,aAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EAC5C,QAAQ,aAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS;AAAA,EAChD,MAAM,aAAE,QAAQ,EAAE,SAAS;AAC7B,CAAC;AAGD,IAAM,kBAAkB,aAAE,KAAK,CAAC,MAAM,WAAW,WAAW,QAAQ,WAAW,eAAe,cAAc,eAAe,SAAS,OAAO,CAAC;AAC5I,IAAM,kBAAkB,aAAE,KAAK,CAAC,eAAe,OAAO,CAAC;AAEhD,IAAM,0BAA0B,aAAE,OAAO;AAAA,EAC9C,QAAQ,aAAE,MAAM,eAAe,EAAE,SAAS;AAAA,EAC1C,OAAO,aAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EAC5C,QAAQ,aAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS;AAAA,EAChD,OAAO,aACJ,OAAO;AAAA,IACN,IAAI,aAAE,OAAO,EAAE,SAAS;AAAA,IACxB,SAAS,aAAa,SAAS;AAAA,IAC/B,SAAS,aAAa,SAAS;AAAA,IAC/B,MAAM,aAAa,SAAS;AAAA,IAC5B,SAAS,aAAa,SAAS;AAAA,IAC/B,aAAa,aAAa,SAAS;AAAA,IACnC,YAAY,aAAE,QAAQ,EAAE,SAAS;AAAA,IACjC,aAAa,aAAa,SAAS;AAAA,IACnC,OAAO,aAAE,MAAM,CAAC,iBAAiB,aAAE,OAAO,EAAE,UAAU,aAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS;AAAA,IAC/E,OAAO,aAAa,SAAS;AAAA,EAC/B,CAAC,EACA,SAAS;AAAA,EACZ,UAAU,aAAE,MAAM,CAAC,iBAAiB,cAAc,CAAC,EAAE,SAAS;AAChE,CAAC;AAEM,IAAM,0BAA0B,aAAE,OAAO;AAAA,EAC9C,QAAQ,aAAE,MAAM,eAAe,EAAE,SAAS;AAAA,EAC1C,OAAO,aAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EAC5C,QAAQ,aAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS;AAClD,CAAC;;;AC1ID,IAAAC,eAAiB;AACjB,IAAAC,qBAAe;AACf,IAAAC,mBAAqB;;;ACGd,SAAS,aAAa,KAAc,SAAiB;AAC1D,QAAM,qBAAqB,IAAI;AAAA,IAC7B,OAAO;AAAA,MACL,OAAO,CAAC,OAAO;AAAA,MACf,SAAS,CAAC,OAAO;AAAA,MACjB,cAAc,CAAC,OAAO;AACpB,cAAMC,WAAa,gBAAQ,iBAAiB,KAAK,EAAE;AACnD,YAAI,IAAI,IAAIA,QAAO,EAAG,QAAOA;AAC7B,eAAOA,SAAQ,IAAI,CAAC,MAAiB,EAAE,gBAAgB;AAAA,MACzD;AAAA,IACF,CAAC;AAAA,EACH;AAEA,QAAM,UAAU,IAAI,SAAY,cAAM,kBAAkB,KAAK,kBAAkB,CAAC;AAEhF,QAAM,oBAAoB,IAAI;AAAA,IAC5B,OAAO;AAAA,MACL,OAAO;AAAA,MACP,SAAS,CAAC,OAAO;AAAA,MACjB,cAAc,CAAC,OAAO;AACpB,cAAM,MAAS,oBAAY,MAAM,KAAK,EAAE;AACxC,YAAI,IAAI,IAAI,GAAG,EAAG,QAAO;AACzB,eAAO,KAAK,YAAY,CAAC,IAAI,SAAS,IAAI,CAAC;AAAA,MAC7C;AAAA,IACF,CAAC;AAAA,EACH;AACA,MAAI,SAAY,cAAM,YAAY,KAAK,oBAAoB,EAAE,OAAO,UAAU,CAAC,CAAC;AAChF,MAAI,SAAY,oBAAY,YAAY,KAAK,mBAAmB,EAAE,OAAO,cAAc,CAAC,CAAC;AAC3F;;;ADxBA,eAAsB,cAAc,KAAc;AAChD,QAAM,WAAW,IAAI,SAAY,cAAM,IAAI,GAAG,CAAC;AAC/C,QAAM,EAAE,SAAS,SAAS,QAAQ,IAAI,MAAM,QAAQ,KAAK,iBAAiB,GAAG,GAAG,QAAQ;AACxF,aAAW,EAAE,aAAa,KAAK,KAAK,QAAS,wBAAuB,KAAK,aAAa,IAAI;AAC1F,aAAW,EAAE,SAAS,KAAK,KAAK,QAAS,4BAA2B,KAAK,SAAS,IAAI;AACtF,aAAW,EAAE,QAAQ,KAAK,QAAS,4BAA2B,KAAK,OAAO;AAC5E;AAEA,SAAS,iBAAiB,KAAc;AACtC,QAAM,YAAY,CAAC;AACnB,aAAW,QAAQ,IAAI,QAAQ,eAAe,GAAG;AAC/C,QAAI,IAAI,QAAQ,2BAA2B,IAAI,EAAG;AAClD,QAAI,IAAI,QAAQ,gCAAgC,IAAI,EAAG;AACvD,QAAI,CAAC,aAAAC,QAAK,QAAQ,KAAK,QAAQ,EAAE,WAAW,IAAI,YAAY,EAAG;AAC/D,cAAU,KAAK,IAAI;AAAA,EACrB;AACA,SAAO;AACT;AAEA,SAAS,uBAAuB,KAAc,MAAqB,MAAc;AAC/E,QAAM,YAAY,IAAI,SAAS,cAAc,KAAK,IAAI,CAAC;AACvD,QAAM,aAAa,IAAI,SAAS,kBAAkB,KAAK,IAAI,CAAC;AAE5D,MAAI,gBAAgB;AACpB,aAAW,YAAY,YAAY;AACjC,QAAI,MAAM,IAAI,SAAY,oBAAY,QAAQ,KAAK,QAAQ,CAAC;AAC5D,QAAI,KAAK;AACP,UAAI,SAAY,oBAAY,OAAO,KAAK,IAAI,IAAI,EAAE,OAAO,cAAc,CAAC,CAAC;AAAA,IAC3E,OAAO;AACL,YAAM,IAAI,SAAY,oBAAY,OAAO,KAAK,EAAE,MAAM,UAAU,OAAO,eAAe,WAAW,cAAc,CAAC,CAAC;AAAA,IACnH;AACA,oBAAgB,IAAI;AAAA,EACtB;AACA,MAAI,SAAY,cAAM,OAAO,KAAK,EAAE,cAAc,eAAgB,MAAM,WAAW,OAAO,WAAW,KAAK,CAAC,CAAC;AAC9G;AAEA,SAAS,2BAA2B,KAAc,SAAkB,MAAc;AAChF,eAAa,KAAK,QAAQ,EAAE;AAC5B,MAAI,SAAY,cAAM,OAAO,KAAK,QAAQ,IAAI,EAAE,KAAK,CAAC,CAAC;AACzD;AAEA,SAAS,2BAA2B,KAAc,SAAkB;AAClE,MAAI,SAAS,2BAA2B,KAAK,SAAS,EAAE,CAAC;AACzD,MAAI,SAAY,cAAM,IAAI,KAAK,QAAQ,EAAE,CAAC;AAC5C;AAEA,eAAe,QAAQ,KAAc,cAA+B,UAAqB;AACvF,QAAM,UAAU,CAAC;AACjB,QAAM,UAAU,CAAC;AACjB,QAAM,UAAU,CAAC;AACjB,QAAM,iBAAiB,gBAAgB,UAAU,CAAC,MAAM,EAAE,IAAI;AAC9D,QAAM,qBAAqB,gBAAgB,cAAc,CAAC,MAAM,IAAI,GAAG,cAAc,KAAK,CAAC,GAAG,EAAE,CAAC;AACjG,QAAM,YAAY,IAAI,IAAI,OAAO,KAAK,kBAAkB,EAAE,OAAO,OAAO,KAAK,cAAc,CAAC,CAAC;AAC7F,aAAW,YAAY,WAAW;AAChC,UAAM,UAAU,eAAe,QAAQ;AACvC,UAAM,cAAc,mBAAmB,QAAQ;AAC/C,QAAI,CAAC,WAAW,YAAa,SAAQ,KAAK,EAAE,aAAa,MAAM,MAAM,eAAe,YAAY,QAAQ,EAAE,CAAC;AAC3G,QAAI,WAAW,CAAC,YAAa,SAAQ,KAAK,EAAE,QAAQ,CAAC;AACrD,QAAI,WAAW,aAAa;AAC1B,YAAM,OAAO,MAAM,eAAe,YAAY,QAAQ;AACtD,UAAI,QAAQ,SAAS,KAAM,SAAQ,KAAK,EAAE,SAAS,aAAa,KAAK,CAAC;AAAA,IACxE;AAAA,EACF;AACA,SAAO,EAAE,SAAS,SAAS,QAAQ;AACrC;AAEA,SAAS,cAAc,KAAc,MAAqB;AACxD,QAAM,gBAAgB,aAAAA,QAAK,QAAQ,KAAK,QAAQ;AAChD,MAAI,cAAc,WAAW,IAAI,YAAY,EAAG,QAAO,cAAc,MAAM,IAAI,aAAa,MAAM;AAClG,SAAO,IAAI,IAAI,6BAA6B,EAAE,WAAW,eAAe,cAAc,IAAI,aAAa,CAAC;AAC1G;AAEA,SAAS,kBAAkB,KAAc,MAAqB;AAC5D,QAAM,YAAY,cAAc,KAAK,IAAI;AACzC,MAAI,IAAI,IAAI,SAAS,EAAG,QAAO;AAC/B,QAAM,OAAO,CAAC;AACd,MAAI,UAAU,aAAAA,QAAK,QAAQ,SAAS;AACpC,SAAO,YAAY,aAAAA,QAAK,KAAK;AAC3B,SAAK,KAAK,OAAO;AACjB,cAAU,aAAAA,QAAK,QAAQ,OAAO;AAAA,EAChC;AACA,OAAK,KAAK,OAAO;AACjB,SAAO,KAAK,QAAQ;AACtB;AAEA,eAAe,eAAe,WAAmB;AAC/C,QAAM,QAAQ,UAAM,uBAAK,SAAS;AAClC,SAAO,GAAG,MAAM,OAAO,IAAI,MAAM,IAAI;AACvC;;;AE5FA,eAAsB,2BAA2B,KAAc;AAC7D,QAAM,UAAU,IAAI,SAAY,8BAAsB,IAAI,GAAG,CAAC;AAC9D,aAAW,WAAW,OAAO,OAAO,IAAI,YAAY,GAAG;AACrD,UAAM,WAAW,QAAQ,OAAO,CAAC,MAAM,EAAE,YAAY,QAAQ,IAAI;AACjE,QAAI,SAAS,WAAW,EAAG;AAE3B,UAAM,eAAe,SAAS,KAAK,CAAC,MAAM,EAAE,YAAY,QAAQ,YAAY,EAAE,eAAe,SAAS,QAAQ,eAAe,GAAG;AAChI,QAAI,CAAC,aAAc;AAEnB,eAAW,UAAU,UAAU;AAC7B,UAAI;AAAA,QACC,8BAAsB,OAAO,KAAK,OAAO,IAAI;AAAA,UAC9C,SAAS,QAAQ;AAAA,UACjB,aAAa,QAAQ;AAAA,UACrB,OAAO;AAAA,UACP,OAAO;AAAA,QACT,CAAC;AAAA,MACH;AACA,YAAMC,SAAQ,IAAI,SAAY,cAAM,iBAAiB,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5E,iBAAW,QAAQA,OAAO,cAAa,KAAK,KAAK,EAAY;AAAA,IAC/D;AAAA,EACF;AACF;;;AC3BA,IAAAC,eAAiB;AACjB,IAAAC,sBAAe;;;ACDf,IAAAC,qBAAe;;;ACAf,IAAAC,eAAiB;AACjB,IAAAC,qBAAe;AAIR,SAAS,mBAAmB,KAAc,aAA4B,aAA8B;AACzG,QAAM,WAAW,mBAAAC,QAAG,kBAAkB,aAAa,YAAY,UAAU,IAAI,QAAQ,mBAAmB,GAAG,mBAAAA,QAAG,GAAG;AACjH,MAAI,CAAC,SAAS,eAAgB,QAAO;AACrC,QAAM,gBAAgB,aAAAC,QAAK,QAAQ,SAAS,eAAe,gBAAgB;AAC3E,SAAO,CAAC,cAAc,WAAW,IAAI,YAAY;AACnD;AAEO,SAAS,oBAAoB,MAAwB;AAC1D,MAAI,CAAC,mBAAAD,QAAG,iBAAiB,IAAI,EAAG,QAAO;AACvC,QAAM,YAAY,mBAAAA,QAAG,aAAa,IAAI;AACtC,MAAI,CAAC,UAAW,QAAO;AACvB,SAAO,UAAU,KAAK,CAAC,MAAM,EAAE,SAAS,mBAAAA,QAAG,WAAW,aAAa;AACrE;AAEO,SAAS,qBAAqB,MAAwB;AAC3D,MAAI,CAAC,mBAAAA,QAAG,iBAAiB,IAAI,EAAG,QAAO;AACvC,QAAM,YAAY,mBAAAA,QAAG,aAAa,IAAI;AACtC,MAAI,CAAC,UAAW,QAAO;AACvB,SAAO,UAAU,KAAK,CAAC,MAAM,EAAE,SAAS,mBAAAA,QAAG,WAAW,cAAc;AACtE;AAEO,SAAS,mBACd,MACA,aACgB;AAChB,SAAO,KAAK,WAAW,IAAI,CAAC,WAAW;AAAA,IACrC,MAAM,mBAAAA,QAAG,aAAa,MAAM,IAAI,IAAI,MAAM,KAAK,OAAO,MAAM,KAAK,QAAQ,WAAW;AAAA,IACpF,MAAM,MAAM,OAAO,MAAM,KAAK,QAAQ,WAAW,IAAI;AAAA,IACrD,UAAU,CAAC,CAAC,MAAM;AAAA,IAClB,MAAM,CAAC,CAAC,MAAM;AAAA,IACd,SAAS,MAAM,cAAc,MAAM,YAAY,QAAQ,WAAW,IAAI;AAAA,EACxE,EAAE;AACJ;AAEO,SAAS,wBAAwB,MAAe,aAAuC;AAC5F,MAAI,EAAE,oBAAoB,SAAS,CAAC,KAAK,eAAgB,QAAO,CAAC;AACjE,SAAQ,KAAK,eAA6D,IAAI,CAAC,OAAO,GAAG,QAAQ,WAAW,CAAC;AAC/G;AAEO,SAAS,sBAAsB,MAAe,aAA4C;AAC/F,QAAM,KAAK,eAAe,KAAK,cAAc;AAC7C,MAAI,CAAC,GAAI,QAAO;AAEhB,QAAM,aAAa,GAAG,YAAY;AAClC,QAAM,SAAS,mBAAAA,QAAG,wBAAwB,YAAY,KAAK,aAAa,CAAC;AACzE,MAAI,CAAC,UAAU,OAAO,WAAW,EAAG,QAAO;AAG3C,QAAM,cAAc,OAAO,OAAO,SAAS,CAAC;AAC5C,MAAI,CAAC,YAAa,QAAO;AACzB,QAAM,cAAc,WAAW,MAAM,YAAY,KAAK,YAAY,GAAG;AAGrE,MAAI,YAAY,WAAW,KAAK,GAAG;AACjC,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEO,SAAS,mBAAmB,MAAe,aAA6C;AAC7F,MAAI,CAAC,mBAAAA,QAAG,kBAAkB,IAAI,EAAG,QAAO,CAAC;AACzC,QAAM,aAAa,mBAAAA,QAAG,cAAc,IAAI;AACxC,MAAI,CAAC,WAAY,QAAO,CAAC;AAEzB,QAAM,KAAK,eAAe,KAAK,cAAc;AAE7C,SAAO,WAAW,IAAI,CAAC,cAAc;AACnC,UAAM,OAAO,UAAU;AACvB,QAAI,mBAAAA,QAAG,aAAa,IAAI,GAAG;AACzB,aAAO,EAAE,MAAM,KAAK,KAAK;AAAA,IAC3B;AACA,QAAI,mBAAAA,QAAG,iBAAiB,IAAI,KAAK,mBAAAA,QAAG,aAAa,KAAK,UAAU,GAAG;AACjE,aAAO;AAAA,QACL,MAAM,KAAK,WAAW;AAAA,QACtB,WAAW,KAAK,UAAU,IAAI,CAAC,QAAQ,IAAI,QAAQ,EAAE,CAAC;AAAA,MACxD;AAAA,IACF;AACA,WAAO,EAAE,MAAM,UAAU,WAAW,QAAQ,EAAE,EAAE;AAAA,EAClD,CAAC;AACH;AAEO,SAAS,kBAAkB,cAA+B;AAC/D,QAAM,WAAW;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,SAAO,SAAS,SAAS,YAAY,KAAK,aAAa,WAAW,OAAO;AAC3E;AAEO,SAAS,kBAAkB,MAA0C;AAC1E,MAAI,CAAC,mBAAAA,QAAG,iBAAiB,IAAI,EAAG,QAAO;AACvC,MAAI,KAAK,WAAW,SAAS,mBAAAA,QAAG,WAAW,cAAe,QAAO;AACjE,MAAI,KAAK,UAAU,WAAW,EAAG,QAAO;AAExC,QAAM,MAAM,KAAK,UAAU,CAAC;AAC5B,MAAI,CAAC,IAAK,QAAO;AACjB,SAAO,mBAAAA,QAAG,gBAAgB,GAAG;AAC/B;;;AD3HO,SAAS,UAAU,KAAc,aAA4B,MAA6C;AAC/G,MAAI,CAAC,mBAAAE,QAAG,oBAAoB,IAAI,KAAK,CAAC,KAAK,mBAAmB,CAAC,mBAAAA,QAAG,gBAAgB,KAAK,eAAe,EAAG,QAAO;AAChH,SAAO,CAAC,mBAAmB,KAAK,aAAa,KAAK,gBAAgB,IAAI;AACxE;AAEO,SAAS,eAAe,KAAc,aAA4B,MAA4B,SAAiC;AACpI,QAAMC,WAA0B,CAAC;AACjC,QAAM,SAAS,KAAK;AACpB,MAAI,CAAC,UAAU,CAAC,KAAK,mBAAmB,CAAC,mBAAAD,QAAG,gBAAgB,KAAK,eAAe,EAAG,QAAOC;AAG1F,QAAM,mBAAmB,sBAAsB,KAAK,aAAa,KAAK,gBAAgB,IAAI;AAC1F,MAAI,IAAI,IAAI,gBAAgB,EAAG,QAAOA;AAGtC,MAAI,OAAO,MAAM;AACf,IAAAA,SAAQ,KAAK;AAAA,MACX,kBAAkB;AAAA,MAClB;AAAA,MACA,MAAM;AAAA,MACN,OAAO,OAAO,KAAK;AAAA,MACnB,OAAO;AAAA,IACT,CAAC;AAAA,EACH;AAGA,MAAI,OAAO,iBAAiB,mBAAAD,QAAG,eAAe,OAAO,aAAa,GAAG;AACnE,eAAW,WAAW,OAAO,cAAc,UAAU;AACnD,MAAAC,SAAQ,KAAK;AAAA,QACX,kBAAkB;AAAA,QAClB;AAAA,QACA,OAAO,QAAQ,gBAAgB,QAAQ,MAAM;AAAA,QAC7C,OAAO,QAAQ,KAAK;AAAA,QACpB,OAAO;AAAA,MACT,CAAC;AAAA,IACH;AAAA,EACF;AAGA,MAAI,OAAO,iBAAiB,mBAAAD,QAAG,kBAAkB,OAAO,aAAa,GAAG;AACtE,IAAAC,SAAQ,KAAK;AAAA,MACX,kBAAkB;AAAA,MAClB;AAAA,MACA,MAAM;AAAA,MACN,OAAO,OAAO,cAAc,KAAK;AAAA,MACjC,OAAO;AAAA,IACT,CAAC;AAAA,EACH;AAEA,SAAOA;AACT;AAEO,SAAS,uBAAuB,KAAc,aAA4B,MAAyB,SAAsC;AAC9I,QAAM,MAAM,KAAK,UAAU,CAAC;AAC5B,QAAM,mBAAoB,IAAyB;AACnD,QAAM,mBAAmB,sBAAsB,KAAK,aAAa,gBAAgB;AACjF,MAAI,IAAI,IAAI,gBAAgB,EAAG,QAAO;AAEtC,SAAO;AAAA,IACL,kBAAkB;AAAA,IAClB;AAAA,IACA,MAAM;AAAA,IACN,OAAO;AAAA,IACP,OAAO;AAAA,IACP,YAAY;AAAA,EACd;AACF;AAEA,SAAS,sBAAsB,KAAc,aAA4B,kBAA0B;AACjG,QAAM,aAAa,mBAAAD,QAAG,kBAAkB,kBAAkB,YAAY,UAAU,IAAI,QAAQ,mBAAmB,GAAG,mBAAAA,QAAG,GAAG;AACxH,MAAI,CAAC,WAAW,gBAAgB;AAC9B,WAAO,IAAI,IAAI,4BAA4B,EAAE,QAAQ,kBAAkB,MAAM,YAAY,SAAS,CAAC;AAAA,EACrG;AAEA,QAAM,gBAAgB,WAAW,eAAe;AAChD,QAAM,YAAY,cAAc,WAAW,IAAI,YAAY,IAAI,cAAc,MAAM,IAAI,aAAa,MAAM,IAAI;AAC9G,QAAM,OAAU,cAAM,QAAQ,KAAK,SAAS;AAC5C,MAAI,IAAI,IAAI,IAAI,EAAG,QAAO;AAC1B,MAAI,CAAC,MAAM;AACT,WAAO,IAAI,IAAI,2BAA2B,EAAE,MAAM,WAAW,QAAQ,iBAAiB,CAAC;AAAA,EACzF;AAEA,SAAO,KAAK;AACd;;;AEzFA,IAAAE,qBAAe;AAMR,SAAS,mBAAmB,KAAc,aAA4B,MAA6C;AACxH,MAAI,CAAC,mBAAAC,QAAG,oBAAoB,IAAI,KAAK,CAAC,KAAK,mBAAmB,CAAC,mBAAAA,QAAG,gBAAgB,KAAK,eAAe,EAAG,QAAO;AAChH,SAAO,mBAAmB,KAAK,aAAa,KAAK,gBAAgB,IAAI;AACvE;AAQA,SAAS,uBAAuB,MAA4E;AAC1G,MAAI,aAAa;AACjB,MAAI,aAAa;AAGjB,MAAI,KAAK,WAAW,OAAO,GAAG;AAC5B,iBAAa,KAAK,MAAM,CAAC;AACzB,iBAAa;AAAA,EACf,OAAO;AACL,iBAAa,kBAAkB,IAAI;AAAA,EACrC;AAGA,MAAI,WAAW,WAAW,GAAG,GAAG;AAE9B,UAAM,QAAQ,WAAW,MAAM,GAAG;AAClC,QAAI,MAAM,UAAU,GAAG;AACrB,aAAO,EAAE,KAAK,YAAY,SAAS,MAAM,WAAW;AAAA,IACtD;AACA,UAAM,MAAM,GAAG,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC;AACnC,UAAM,UAAU,MAAM,MAAM,MAAM,CAAC,EAAE,KAAK,GAAG;AAC7C,WAAO,EAAE,KAAK,SAAS,WAAW;AAAA,EACpC,OAAO;AAEL,UAAM,YAAY,WAAW,QAAQ,GAAG;AACxC,QAAI,cAAc,IAAI;AACpB,aAAO,EAAE,KAAK,YAAY,SAAS,MAAM,WAAW;AAAA,IACtD;AACA,UAAM,MAAM,WAAW,MAAM,GAAG,SAAS;AACzC,UAAM,UAAU,WAAW,MAAM,SAAS;AAC1C,WAAO,EAAE,KAAK,SAAS,WAAW;AAAA,EACpC;AACF;AAUA,SAAS,6BAA6B,MAAkD;AACtF,QAAM,UAAgC,CAAC;AACvC,QAAM,mBAAoB,KAAK,gBAAqC;AACpE,QAAM,EAAE,KAAK,SAAS,WAAW,IAAI,uBAAuB,gBAAgB;AAC5E,QAAM,SAAS,KAAK;AAGpB,MAAI,CAAC,QAAQ;AACX,YAAQ,KAAK;AAAA,MACX,SAAS;AAAA,MACT;AAAA,MACA,MAAM;AAAA,MACN,OAAO;AAAA,MACP;AAAA,IACF,CAAC;AACD,WAAO;AAAA,EACT;AAGA,MAAI,OAAO,MAAM;AACf,YAAQ,KAAK;AAAA,MACX,SAAS;AAAA,MACT;AAAA,MACA,MAAM;AAAA,MACN,OAAO,OAAO,KAAK;AAAA,MACnB;AAAA,IACF,CAAC;AAAA,EACH;AAGA,MAAI,OAAO,iBAAiB,mBAAAA,QAAG,eAAe,OAAO,aAAa,GAAG;AACnE,eAAW,WAAW,OAAO,cAAc,UAAU;AACnD,cAAQ,KAAK;AAAA,QACX,SAAS;AAAA,QACT;AAAA,QACA,OAAO,QAAQ,gBAAgB,QAAQ,MAAM;AAAA,QAC7C,OAAO,QAAQ,KAAK;AAAA,QACpB;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAGA,MAAI,OAAO,iBAAiB,mBAAAA,QAAG,kBAAkB,OAAO,aAAa,GAAG;AACtE,YAAQ,KAAK;AAAA,MACX,SAAS;AAAA,MACT;AAAA,MACA,MAAM;AAAA,MACN,OAAO,OAAO,cAAc,KAAK;AAAA,MACjC;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AACT;AAEO,SAAS,wBAAwB,KAAc,MAA4B,SAAiB;AACjG,QAAM,QAAQ,6BAA6B,IAAI;AAC/C,QAAMC,oBAA2C,CAAC;AAElD,aAAW,QAAQ,OAAO;AACxB,UAAM,WAAW,OAAO,OAAO,IAAI,YAAY,EAAE,KAAK,CAAC,QAAQ,KAAK,QAAQ,WAAW,IAAI,IAAI,CAAC;AAChG,UAAM,aAAgB,8BAAsB,cAAc,KAAK;AAAA,MAC7D,SAAS,KAAK;AAAA,MACd,SAAS,KAAK;AAAA,MACd,MAAM,KAAK;AAAA,MACX,SAAS,UAAU;AAAA,MACnB,aAAa,UAAU;AAAA,MACvB,YAAY,KAAK;AAAA,MACjB,OAAO;AAAA,IACT,CAAC;AACD,QAAI,IAAI,IAAI,UAAU,EAAG,QAAO;AAChC,IAAAA,kBAAiB,KAAK,EAAE,SAAS,wBAAwB,WAAW,IAAI,OAAO,KAAK,OAAO,YAAY,MAAM,CAAC;AAAA,EAChH;AAEA,SAAOA;AACT;AAEO,SAAS,gCAAgC,KAAc,MAAyB,SAAiB;AACtG,QAAM,MAAM,KAAK,UAAU,CAAC;AAC5B,QAAM,mBAAoB,IAAyB;AACnD,QAAM,EAAE,KAAK,SAAS,WAAW,IAAI,uBAAuB,gBAAgB;AAC5E,QAAM,WAAW,OAAO,OAAO,IAAI,YAAY,EAAE,KAAK,CAAC,QAAQ,IAAI,WAAW,IAAI,IAAI,CAAC;AACvF,QAAM,aAAgB,8BAAsB,cAAc,KAAK;AAAA,IAC7D,SAAS;AAAA,IACT;AAAA,IACA,MAAM;AAAA,IACN,SAAS,UAAU;AAAA,IACnB,aAAa,UAAU;AAAA,IACvB;AAAA,IACA,OAAO;AAAA,EACT,CAAC;AACD,MAAI,IAAI,IAAI,UAAU,EAAG,QAAO;AAChC,SAAO,EAAE,SAAS,wBAAwB,WAAW,IAAI,OAAO,sBAAsB,YAAY,KAAK;AACzG;;;ACzJA,IAAAC,qBAAe;AAIR,SAAS,QAAQ,MAA+F;AACrH,SAAO,mBAAAC,QAAG,uBAAuB,IAAI,KAAK,mBAAAA,QAAG,uBAAuB,IAAI,KAAK,mBAAAA,QAAG,kBAAkB,IAAI;AACxG;AAEO,SAAS,oBACd,MACA,SACA,aACc;AACd,QAAMC,QAAoB,mBAAAD,QAAG,kBAAkB,IAAI,IAC/C,kBAAkB,MAAM,WAAW,IACnC,mBAAAA,QAAG,uBAAuB,IAAI,IAC9B,uBAAuB,MAAM,WAAW,IACxC,wBAAwB,MAAM,WAAW;AAE7C,SAAO;AAAA,IACL;AAAA,IACA,MAAM;AAAA,IACN,MAAM,KAAK,KAAK;AAAA,IAChB,MAAM,KAAK,QAAQ,WAAW;AAAA,IAC9B,MAAM,KAAK,UAAUC,KAAI;AAAA,IACzB,aAAa,oBAAoB,IAAI;AAAA,IACrC,OAAO;AAAA,EACT;AACF;AAEA,SAAS,kBAAkB,MAA0B,aAA0C;AAC7F,QAAM,cAAsC,CAAC;AAE7C,aAAW,UAAU,KAAK,SAAS;AACjC,QAAI,mBAAAD,QAAG,aAAa,OAAO,IAAI,KAAK,mBAAAA,QAAG,gBAAgB,OAAO,IAAI,GAAG;AACnE,YAAM,OAAO,OAAO,KAAK;AACzB,YAAM,QAAQ,OAAO,cAAc,OAAO,YAAY,QAAQ,WAAW,IAAI;AAC7E,kBAAY,IAAI,IAAI;AAAA,IACtB;AAAA,EACF;AAEA,SAAO;AAAA,IACL,MAAM;AAAA,IACN,iBAAiB,CAAC;AAAA,IAClB,SAAS,CAAC;AAAA,IACV,SAAS,CAAC;AAAA,IACV;AAAA,IACA,YAAY,mBAAmB,MAAM,WAAW;AAAA,IAChD,SAAS,sBAAsB,MAAM,WAAW;AAAA,EAClD;AACF;AAEA,SAAS,uBAAuB,MAA+B,aAA0C;AACvG,QAAM,UAA2B,CAAC;AAElC,aAAW,UAAU,KAAK,SAAS;AACjC,QAAI,mBAAAA,QAAG,oBAAoB,MAAM,KAAK,mBAAAA,QAAG,aAAa,OAAO,IAAI,GAAG;AAClE,cAAQ,KAAK;AAAA,QACX,MAAM,OAAO,KAAK;AAAA,QAClB,MAAM,OAAO,OAAO,OAAO,KAAK,QAAQ,WAAW,IAAI;AAAA,QACvD,UAAU,CAAC,CAAC,OAAO;AAAA,MACrB,CAAC;AAAA,IACH,WAAW,mBAAAA,QAAG,kBAAkB,MAAM,KAAK,mBAAAA,QAAG,aAAa,OAAO,IAAI,GAAG;AACvE,YAAM,SAAS,OAAO,WAAW,IAAI,CAAC,MAAM;AAC1C,cAAM,aAAa,EAAE,OAAO,EAAE,KAAK,QAAQ,WAAW,IAAI;AAC1D,eAAO,GAAG,EAAE,KAAK,QAAQ,WAAW,CAAC,KAAK,UAAU;AAAA,MACtD,CAAC,EAAE,KAAK,IAAI;AACZ,YAAM,cAAc,OAAO,OAAO,OAAO,KAAK,QAAQ,WAAW,IAAI;AACrE,cAAQ,KAAK;AAAA,QACX,MAAM,OAAO,KAAK;AAAA,QAClB,MAAM,IAAI,MAAM,QAAQ,WAAW;AAAA,QACnC,UAAU,CAAC,CAAC,OAAO;AAAA,MACrB,CAAC;AAAA,IACH;AAAA,EACF;AAEA,QAAM,kBAAkB,KAAK,iBACzB,OAAO,CAAC,MAAM,EAAE,UAAU,mBAAAA,QAAG,WAAW,cAAc,EACvD,QAAQ,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,MAAM,EAAE,WAAW,QAAQ,WAAW,CAAC,CAAC,KAAK,CAAC;AAE7E,SAAO;AAAA,IACL,MAAM;AAAA,IACN,iBAAiB,wBAAwB,MAAM,WAAW;AAAA,IAC1D,SAAS;AAAA,IACT;AAAA,IACA,aAAa,CAAC;AAAA,IACd,YAAY,mBAAmB,MAAM,WAAW;AAAA,IAChD,SAAS,sBAAsB,MAAM,WAAW;AAAA,EAClD;AACF;AAEA,SAAS,wBAAwB,MAA+B,aAA0C;AACxG,SAAO;AAAA,IACL,MAAM;AAAA,IACN,iBAAiB,wBAAwB,MAAM,WAAW;AAAA,IAC1D,SAAS,CAAC;AAAA,IACV,SAAS,CAAC;AAAA,IACV,aAAa,CAAC;AAAA,IACd,YAAY,mBAAmB,MAAM,WAAW;AAAA,IAChD,SAAS,sBAAsB,MAAM,WAAW;AAAA,EAClD;AACF;;;ACrGA,IAAAE,qBAAe;AAIR,SAAS,YAAY,MAA+C;AACzE,MAAI,CAAC,mBAAAC,QAAG,sBAAsB,IAAI,EAAG,QAAO;AAC5C,SAAO,CAAC,CAAC,KAAK,QAAQ,qBAAqB,IAAI;AACjD;AAEO,SAAS,wBAAwB,MAA8B,SAAiB,aAA2C;AAChI,QAAM,aAAa,qBAAqB,IAAI;AAC5C,QAAM,OAAO,aAAa,YAAa,KAAK,MAAM,QAAQ;AAE1D,QAAMC,QAAwB;AAAA,IAC5B,MAAM;AAAA,IACN,YAAY,mBAAmB,MAAM,WAAW;AAAA,IAChD,aAAa,KAAK,OAAO,KAAK,KAAK,QAAQ,WAAW,IAAI;AAAA,IAC1D,iBAAiB,wBAAwB,MAAM,WAAW;AAAA,IAC1D,WAAW;AAAA,MACT,OAAO,CAAC,CAAC,KAAK,WAAW,KAAK,CAAC,MAAM,EAAE,SAAS,mBAAAD,QAAG,WAAW,YAAY;AAAA,MAC1E,WAAW,CAAC,CAAC,KAAK;AAAA,IACpB;AAAA,IACA,YAAY,mBAAmB,MAAM,WAAW;AAAA,IAChD,SAAS,sBAAsB,MAAM,WAAW;AAAA,EAClD;AAEA,SAAO;AAAA,IACL;AAAA,IACA,MAAM;AAAA,IACN;AAAA,IACA,MAAM,KAAK,QAAQ,WAAW;AAAA,IAC9B,MAAM,KAAK,UAAUC,KAAI;AAAA,IACzB,aAAa,oBAAoB,IAAI;AAAA,IACrC,OAAO;AAAA,EACT;AACF;;;ACnCA,IAAAC,qBAAe;AAIf,SAAS,wBAAwB,aAA8C;AAC7E,SAAO,CAAC,EAAE,YAAY,gBAAgB,mBAAAC,QAAG,gBAAgB,YAAY,WAAW,KAAK,mBAAAA,QAAG,qBAAqB,YAAY,WAAW;AACtI;AAEO,SAAS,wBAAwB,MAA4B,SAAiB,aAA6C;AAChI,QAAMC,WAA0B,CAAC;AACjC,QAAM,cAAc,oBAAoB,IAAI;AAC5C,QAAM,mBACJ,KAAK,gBAAgB,QAAQ,mBAAAD,QAAG,UAAU,QAAQ,UAAU,KAAK,gBAAgB,QAAQ,mBAAAA,QAAG,UAAU,MAAM,QAAQ;AAEtH,aAAW,eAAe,KAAK,gBAAgB,cAAc;AAC3D,QAAI,CAAC,mBAAAA,QAAG,aAAa,YAAY,IAAI,EAAG;AAExC,QAAI,wBAAwB,WAAW,GAAG;AACxC,YAAM,YAAY,YAAY;AAC9B,YAAME,QAAwB;AAAA,QAC5B,MAAM,mBAAAF,QAAG,gBAAgB,SAAS,IAAI,mBAAmB;AAAA,QACzD,YAAY,mBAAmB,WAAW,WAAW;AAAA,QACrD,aAAa,UAAU,OAAO,UAAU,KAAK,QAAQ,WAAW,IAAI;AAAA,QACpE,iBAAiB,wBAAwB,WAAW,WAAW;AAAA,QAC/D,WAAW;AAAA,UACT,OAAO,CAAC,CAAC,UAAU,WAAW,KAAK,CAAC,MAAM,EAAE,SAAS,mBAAAA,QAAG,WAAW,YAAY;AAAA,UAC/E,WAAW,mBAAAA,QAAG,qBAAqB,SAAS,KAAK,CAAC,CAAC,UAAU;AAAA,QAC/D;AAAA,QACA,YAAY,mBAAmB,MAAM,WAAW;AAAA,QAChD,SAAS,sBAAsB,MAAM,WAAW;AAAA,MAClD;AAEA,MAAAC,SAAQ,KAAK;AAAA,QACX;AAAA,QACA,MAAM;AAAA,QACN,MAAM,YAAY,KAAK;AAAA,QACvB,MAAM,KAAK,QAAQ,WAAW;AAAA,QAC9B,MAAM,KAAK,UAAUC,KAAI;AAAA,QACzB;AAAA,QACA,OAAO;AAAA,MACT,CAAC;AAAA,IACH,OAAO;AACL,YAAMA,QAAwB;AAAA,QAC5B;AAAA,QACA,MAAM,YAAY,OAAO,YAAY,KAAK,QAAQ,WAAW,IAAI;AAAA,QACjE,OAAO,YAAY,cAAc,YAAY,YAAY,QAAQ,WAAW,IAAI;AAAA,QAChF,YAAY,mBAAmB,MAAM,WAAW;AAAA,QAChD,SAAS,sBAAsB,MAAM,WAAW;AAAA,MAClD;AAEA,MAAAD,SAAQ,KAAK;AAAA,QACX;AAAA,QACA,MAAM;AAAA,QACN,MAAM,YAAY,KAAK;AAAA,QACvB,MAAM,KAAK,QAAQ,WAAW;AAAA,QAC9B,MAAM,KAAK,UAAUC,KAAI;AAAA,QACzB;AAAA,QACA,OAAO;AAAA,MACT,CAAC;AAAA,IACH;AAAA,EACF;AACA,SAAOD;AACT;;;AC9DA,IAAAE,qBAAe;AAIR,SAAS,SAAS,MAA4C;AACnE,MAAI,CAAC,mBAAAC,QAAG,mBAAmB,IAAI,EAAG,QAAO;AACzC,SAAO,CAAC,CAAC,KAAK,QAAQ,qBAAqB,IAAI;AACjD;AAEO,SAAS,qBAAqB,MAA2B,SAAiB,aAA2C;AAC1H,QAAM,aAAa,qBAAqB,IAAI;AAC5C,QAAM,OAAO,aAAa,YAAa,KAAK,MAAM,QAAQ;AAE1D,QAAMC,QAAqB;AAAA,IACzB,SAAS,KAAK,iBAAiB,KAAK,CAAC,MAAM,EAAE,UAAU,mBAAAD,QAAG,WAAW,cAAc,GAAG,MAAM,CAAC,GAAG,WAAW,QAAQ,WAAW,KAAK;AAAA,IACnI,YACE,KAAK,iBACD,KAAK,CAAC,MAAM,EAAE,UAAU,mBAAAA,QAAG,WAAW,iBAAiB,GACvD,MAAM,IAAI,CAAC,MAAM,EAAE,WAAW,QAAQ,WAAW,CAAC,KAAK,CAAC;AAAA,IAC9D,iBAAiB,wBAAwB,MAAM,WAAW;AAAA,IAC1D,WAAW;AAAA,MACT,UAAU,CAAC,CAAC,KAAK,WAAW,KAAK,CAAC,MAAM,EAAE,SAAS,mBAAAA,QAAG,WAAW,eAAe;AAAA,IAClF;AAAA,IACA,YAAY,mBAAmB,MAAM,WAAW;AAAA,IAChD,SAAS,sBAAsB,MAAM,WAAW;AAAA,EAClD;AAEA,SAAO;AAAA,IACL;AAAA,IACA,MAAM;AAAA,IACN;AAAA,IACA,MAAM,KAAK,QAAQ,WAAW;AAAA,IAC9B,MAAM,KAAK,UAAUC,KAAI;AAAA,IACzB,aAAa,oBAAoB,IAAI;AAAA,IACrC,OAAO;AAAA,EACT;AACF;AAEA,SAAS,eAAe,QAA+C;AACrE,MAAI,CAAC,mBAAAD,QAAG,iBAAiB,MAAM,EAAG,QAAO;AACzC,QAAM,YAAY,mBAAAA,QAAG,aAAa,MAAM;AACxC,MAAI,CAAC,UAAW,QAAO;AAEvB,MAAI,UAAU,KAAK,CAAC,MAAM,EAAE,SAAS,mBAAAA,QAAG,WAAW,cAAc,EAAG,QAAO;AAC3E,MAAI,UAAU,KAAK,CAAC,MAAM,EAAE,SAAS,mBAAAA,QAAG,WAAW,gBAAgB,EAAG,QAAO;AAC7E,MAAI,UAAU,KAAK,CAAC,MAAM,EAAE,SAAS,mBAAAA,QAAG,WAAW,aAAa,EAAG,QAAO;AAC1E,SAAO;AACT;AAEO,SAAS,qBAAqB,MAA2B,SAAiB,aAA6C;AAC5H,QAAME,WAA0B,CAAC;AAGjC,MAAI,CAAC,KAAK,KAAM,QAAOA;AAEvB,QAAM,aAAa,KAAK,KAAK;AAE7B,OAAK,QAAQ,QAAQ,CAAC,WAAW;AAC/B,QAAI,mBAAAF,QAAG,oBAAoB,MAAM,KAAK,OAAO,QAAQ,mBAAAA,QAAG,aAAa,OAAO,IAAI,GAAG;AACjF,YAAMC,QAA2B;AAAA,QAC/B;AAAA,QACA,YAAY,eAAe,MAAM;AAAA,QACjC,YAAY,mBAAmB,QAAQ,WAAW;AAAA,QAClD,aAAa,OAAO,OAAO,OAAO,KAAK,QAAQ,WAAW,IAAI;AAAA,QAC9D,iBAAiB,wBAAwB,QAAQ,WAAW;AAAA,QAC5D,WAAW;AAAA,UACT,QAAQ,CAAC,CAAC,OAAO,WAAW,KAAK,CAAC,MAAM,EAAE,SAAS,mBAAAD,QAAG,WAAW,aAAa;AAAA,UAC9E,OAAO,CAAC,CAAC,OAAO,WAAW,KAAK,CAAC,MAAM,EAAE,SAAS,mBAAAA,QAAG,WAAW,YAAY;AAAA,UAC5E,UAAU,CAAC,CAAC,OAAO,WAAW,KAAK,CAAC,MAAM,EAAE,SAAS,mBAAAA,QAAG,WAAW,eAAe;AAAA,UAClF,UAAU,CAAC,CAAC,OAAO,WAAW,KAAK,CAAC,MAAM,EAAE,SAAS,mBAAAA,QAAG,WAAW,eAAe;AAAA,QACpF;AAAA,QACA,YAAY,mBAAmB,QAAQ,WAAW;AAAA,QAClD,SAAS,sBAAsB,QAAQ,WAAW;AAAA,MACpD;AAEA,MAAAE,SAAQ,KAAK;AAAA,QACX;AAAA,QACA,MAAM;AAAA,QACN,MAAM,GAAG,UAAU,IAAI,OAAO,KAAK,IAAI;AAAA,QACvC,MAAM,OAAO,QAAQ,WAAW;AAAA,QAChC,MAAM,KAAK,UAAUD,KAAI;AAAA,QACzB,aAAa;AAAA,QACb,OAAO;AAAA,MACT,CAAC;AAAA,IACH;AAEA,QAAI,mBAAAD,QAAG,sBAAsB,MAAM,KAAK,OAAO,QAAQ,mBAAAA,QAAG,aAAa,OAAO,IAAI,GAAG;AACnF,YAAMC,QAA6B;AAAA,QACjC;AAAA,QACA,YAAY,eAAe,MAAM;AAAA,QACjC,MAAM,OAAO,OAAO,OAAO,KAAK,QAAQ,WAAW,IAAI;AAAA,QACvD,UAAU,CAAC,CAAC,OAAO;AAAA,QACnB,WAAW;AAAA,UACT,QAAQ,CAAC,CAAC,OAAO,WAAW,KAAK,CAAC,MAAM,EAAE,SAAS,mBAAAD,QAAG,WAAW,aAAa;AAAA,UAC9E,UAAU,CAAC,CAAC,OAAO,WAAW,KAAK,CAAC,MAAM,EAAE,SAAS,mBAAAA,QAAG,WAAW,eAAe;AAAA,UAClF,UAAU,CAAC,CAAC,OAAO,WAAW,KAAK,CAAC,MAAM,EAAE,SAAS,mBAAAA,QAAG,WAAW,eAAe;AAAA,QACpF;AAAA,QACA,YAAY,mBAAmB,QAAQ,WAAW;AAAA,QAClD,SAAS,sBAAsB,QAAQ,WAAW;AAAA,MACpD;AAEA,MAAAE,SAAQ,KAAK;AAAA,QACX;AAAA,QACA,MAAM;AAAA,QACN,MAAM,GAAG,UAAU,IAAI,OAAO,KAAK,IAAI;AAAA,QACvC,MAAM,OAAO,QAAQ,WAAW;AAAA,QAChC,MAAM,KAAK,UAAUD,KAAI;AAAA,QACzB,aAAa;AAAA,QACb,OAAO;AAAA,MACT,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AAED,SAAOC;AACT;;;APrGA,eAAsB,WAAW,KAAc;AAC7C,QAAMC,SAAQ,IAAI,SAAY,cAAM,SAAS,KAAK,SAAS,CAAC;AAC5D,aAAW,QAAQA,QAAO;AACxB,UAAM,MAAM,UAAU,KAAK,IAAI;AAC/B,QAAI,IAAI,IAAI,GAAG,GAAG;AAChB,UAAI,SAAY,cAAM,OAAO,KAAK,KAAK,IAAI,EAAE,OAAO,OAAO,GAAG,EAAE,CAAC,CAAC;AAAA,IACpE,OAAO;AACL,UAAI,SAAY,cAAM,OAAO,KAAK,KAAK,IAAI,EAAE,OAAO,eAAe,OAAO,KAAK,CAAC,CAAC;AAAA,IACnF;AAAA,EACF;AACF;AAEO,SAAS,UAAU,KAAc,MAAe;AACrD,SAAO,IAAI;AAAA,IACT,MAAS,gBAAQ,YAAY,KAAK,KAAK,EAAE;AAAA,IACzC,MAAS,gBAAQ,qBAAqB,KAAK,KAAK,EAAE;AAAA,IAClD,MAAS,yBAAiB,YAAY,KAAK,KAAK,EAAE;AAAA,IAClD,MAAM,gBAAgB,KAAK,KAAK,IAAI;AAAA,IACpC,CAAC,gBAAgB,WAAW,KAAK,aAAa,KAAK,EAAE;AAAA,IACrD,CAAC,EAAE,SAAAC,UAAS,SAAAC,UAAS,kBAAAC,kBAAiB,MACpC,IAAI;AAAA,MACF,MAAMA,kBAAiB,UAAa,yBAAiB,YAAY,KAAKA,iBAAgB;AAAA,MACtF,MAAMF,SAAQ,UAAa,gBAAQ,YAAY,KAAKA,QAAO;AAAA,MAC3D,MAAMC,SAAQ,UAAa,gBAAQ,YAAY,KAAKA,QAAO;AAAA,IAC7D;AAAA,EACJ;AACF;AAEO,SAAS,gBAAgB,KAAc,WAAmB;AAC/D,QAAM,cAAc,IAAI,QAAQ,cAAc,aAAAE,QAAK,KAAK,IAAI,cAAc,SAAS,CAAC;AACpF,MAAI,CAAC,YAAa,QAAO,IAAI,IAAI,kBAAkB,EAAE,MAAM,UAAU,CAAC;AACtE,SAAO;AACT;AAEO,SAAS,WAAW,KAAc,aAA4B,SAAiB;AACpF,QAAMH,WAA0B,CAAC;AACjC,QAAMC,WAA0B,CAAC;AACjC,QAAMC,oBAA2C,CAAC;AAGlD,WAAS,qBAAqB,MAAe;AAE3C,QAAI,kBAAkB,IAAI,GAAG;AAC3B,YAAM,MAAM,KAAK,UAAU,CAAC;AAE5B,UAAI,mBAAmB,KAAK,aAAa,IAAI,IAAI,GAAG;AAClD,cAAM,SAAS,gCAAgC,KAAK,MAAM,OAAO;AACjE,YAAI,IAAI,IAAI,MAAM,EAAG,QAAO;AAC5B,QAAAA,kBAAiB,KAAK,MAAM;AAAA,MAC9B,OAAO;AACL,cAAM,SAAS,uBAAuB,KAAK,aAAa,MAAM,OAAO;AACrE,YAAI,OAAQ,CAAAF,SAAQ,KAAK,MAAM;AAAA,MACjC;AAAA,IACF;AAGA,wBAAAI,QAAG,aAAa,MAAM,oBAAoB;AAAA,EAC5C;AAEA,MAAI,QAAyB;AAE7B,sBAAAA,QAAG,aAAa,aAAa,CAAC,cAAc;AAC1C,QAAI,MAAO;AAEX,UAAM,MAAM,WAAW,KAAK,aAAa,WAAW,OAAO;AAC3D,QAAI,IAAI,IAAI,GAAG,GAAG;AAChB,cAAQ;AACR;AAAA,IACF;AACA,IAAAJ,SAAQ,KAAK,GAAG,IAAI,OAAO;AAC3B,IAAAC,SAAQ,KAAK,GAAG,IAAI,OAAO;AAC3B,IAAAC,kBAAiB,KAAK,GAAG,IAAI,gBAAgB;AAG7C,YAAQ,qBAAqB,SAAS;AAAA,EACxC,CAAC;AAED,MAAI,MAAO,QAAO;AAClB,SAAO,EAAE,SAAAF,UAAS,SAAAC,UAAS,kBAAAC,kBAAiB;AAC9C;AAEO,SAAS,WAAW,KAAc,aAA4B,MAAe,SAAiB;AACnG,QAAMF,WAA0B,CAAC;AACjC,QAAMC,WAA0B,CAAC;AACjC,QAAMC,oBAA2C,CAAC;AAElD,MAAI,mBAAmB,KAAK,aAAa,IAAI,GAAG;AAC9C,UAAM,SAAS,wBAAwB,KAAK,MAAM,OAAO;AACzD,QAAI,IAAI,IAAI,MAAM,EAAG,QAAO;AAC5B,IAAAA,kBAAiB,KAAK,GAAG,MAAM;AAAA,EACjC,WAAW,UAAU,KAAK,aAAa,IAAI,GAAG;AAC5C,IAAAF,SAAQ,KAAK,GAAG,eAAe,KAAK,aAAa,MAAM,OAAO,CAAC;AAAA,EACjE,WAAW,oBAAAI,QAAG,mBAAmB,IAAI,KAAK,CAAC,KAAK,gBAAgB;AAC9D,IAAAH,SAAQ,KAAK;AAAA,MACX;AAAA,MACA,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM,KAAK,QAAQ,WAAW;AAAA,MAC9B,MAAM,KAAK,UAAU;AAAA,QACnB,kBAAkB;AAAA,QAClB,MAAM;AAAA,QACN,OAAO,KAAK,WAAW,QAAQ,WAAW;AAAA,QAC1C,YAAY,CAAC;AAAA,QACb,SAAS;AAAA,MACX,CAAC;AAAA,MACD,aAAa;AAAA,MACb,OAAO;AAAA,IACT,CAAC;AAAA,EACH,WAAW,oBAAAG,QAAG,oBAAoB,IAAI,KAAK,KAAK,gBAAgB,oBAAAA,QAAG,eAAe,KAAK,YAAY,KAAK,CAAC,KAAK,iBAAiB;AAC7H,eAAW,WAAW,KAAK,aAAa,UAAU;AAChD,UAAI,QAAQ,KAAK,SAAS,WAAW;AACnC,cAAM,YAAY,QAAQ,cAAc,QAAQ,QAAQ,KAAK;AAC7D,QAAAH,SAAQ,KAAK;AAAA,UACX;AAAA,UACA,MAAM;AAAA,UACN,MAAM;AAAA,UACN,MAAM,KAAK,QAAQ,WAAW;AAAA,UAC9B,MAAM,KAAK,UAAU,EAAE,kBAAkB,SAAS,MAAM,MAAM,OAAO,WAAW,aAAa,MAAM,YAAY,CAAC,GAAG,SAAS,KAAK,CAAC;AAAA,UAClI,aAAa;AAAA,UACb,OAAO;AAAA,QACT,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF,WAAW,QAAQ,IAAI,GAAG;AACxB,IAAAA,SAAQ,KAAK,oBAAoB,MAAM,SAAS,WAAW,CAAC;AAAA,EAC9D,WAAW,YAAY,IAAI,GAAG;AAC5B,IAAAA,SAAQ,KAAK,wBAAwB,MAAM,SAAS,WAAW,CAAC;AAAA,EAClE,WAAW,oBAAAG,QAAG,oBAAoB,IAAI,GAAG;AAEvC,IAAAH,SAAQ,KAAK,GAAG,wBAAwB,MAAM,SAAS,WAAW,CAAC;AAAA,EACrE,WAAW,SAAS,IAAI,GAAG;AACzB,IAAAA,SAAQ,KAAK,qBAAqB,MAAM,SAAS,WAAW,CAAC;AAC7D,IAAAA,SAAQ,KAAK,GAAG,qBAAqB,MAAM,SAAS,WAAW,CAAC;AAAA,EAClE;AAEA,SAAO,EAAE,SAAAD,UAAS,SAAAC,UAAS,kBAAAC,kBAAiB;AAC9C;;;AQjJA,eAAsB,aAAa,KAAc;AAC/C,QAAMG,WAAU,IAAI,SAAY,gBAAQ,SAAS,KAAK,SAAS,CAAC;AAChE,MAAI,IAAI;AACR,aAAW,WAAWA,UAAS;AAC7B,UAAM,MAAM,YAAY,KAAK,OAAO;AACpC,QAAI,IAAI,IAAI,GAAG,EAAG,KAAI,SAAY,gBAAQ,OAAO,KAAK,QAAQ,IAAI,EAAE,OAAO,OAAO,GAAG,EAAE,CAAC,CAAC;AAAA,EAC3F;AACF;AAEA,SAAS,YAAY,KAAc,SAAoB;AAErD,MAAI,QAAQ,SAAS,KAAK;AAExB,WAAU,gBAAQ,OAAO,KAAK,QAAQ,IAAI,EAAE,OAAO,SAAS,OAAO,KAAK,CAAC;AAAA,EAC3E;AAEA,QAAM,SAAY,gBAAQ,iBAAiB,KAAK,EAAE,SAAS,QAAQ,kBAAkB,MAAM,QAAQ,MAAM,aAAa,KAAK,CAAC;AAC5H,MAAI,IAAI,IAAI,MAAM,EAAG,QAAO;AAC5B,MAAI,CAAC,OAAQ,QAAO,IAAI,IAAI,6BAA6B,EAAE,MAAM,QAAQ,MAAM,SAAS,QAAQ,iBAAiB,CAAC;AAClH,SAAU,gBAAQ,OAAO,KAAK,QAAQ,IAAI,EAAE,WAAW,OAAO,IAAI,OAAO,SAAS,OAAO,KAAK,CAAC;AACjG;;;ACxBA,IAAAC,eAAiB;AACjB,IAAAC,sBAAe;AAQf,eAAsB,aAAa,KAAc;AAC/C,QAAMC,WAAU,IAAI,SAAY,gBAAQ,SAAS,KAAK,SAAS,CAAC;AAChE,MAAI,IAAI;AACR,aAAW,UAAUA,UAAS;AAC5B,UAAM,MAAM,YAAY,KAAK,MAAM;AACnC,QAAI,IAAI,IAAI,GAAG,GAAG;AAChB,UAAI,SAAY,gBAAQ,OAAO,KAAK,OAAO,IAAI,EAAE,OAAO,OAAO,GAAG,EAAE,CAAC,CAAC;AAAA,IACxE;AAAA,EACF;AACF;AAEA,SAAS,YAAY,KAAc,QAAmB;AACpD,MAAI,CAAC,OAAO,KAAM,QAAO,IAAI,IAAI,uBAAuB,EAAE,WAAW,OAAO,IAAI,MAAM,OAAO,KAAK,CAAC;AAEnG,QAAM,cAAc,uBAAuB,KAAK,MAAM;AACtD,MAAI,IAAI,IAAI,WAAW,EAAG,QAAO;AAEjC,aAAW,cAAc,aAAa;AACpC,QAAI,WAAW,SAAS,WAAY,sBAAqB,KAAK,QAAQ,UAAU;AAChF,QAAI,WAAW,SAAS,WAAY,sBAAqB,KAAK,QAAQ,UAAU;AAAA,EAClF;AAEA,SAAU,gBAAQ,OAAO,KAAK,OAAO,IAAI,EAAE,OAAO,eAAe,OAAO,KAAK,CAAC;AAChF;AAEA,SAAS,uBAAuB,KAAc,QAAmB;AAC/D,QAAM,OAAU,cAAM,MAAM,KAAK,OAAO,OAAO;AAC/C,MAAI,IAAI,IAAI,IAAI,EAAG,QAAO;AAC1B,MAAI,CAAC,KAAM,QAAO,IAAI,IAAI,kBAAkB,EAAE,MAAM,WAAW,OAAO,OAAO,GAAG,CAAC;AAEjF,QAAM,YAAY,aAAAC,QAAK,KAAK,IAAI,cAAc,KAAK,IAAI;AACvD,QAAM,cAAc,IAAI,QAAQ,cAAc,SAAS;AACvD,MAAI,CAAC,YAAa,QAAO,IAAI,IAAI,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAEtE,QAAM,cAAc,iBAAiB,aAAa,MAAM;AACxD,MAAI,CAAC,YAAa,QAAO,IAAI,IAAI,yBAAyB,EAAE,WAAW,OAAO,IAAI,MAAM,OAAO,MAAM,WAAW,KAAK,KAAK,CAAC;AAE3H,QAAM,eAAe,IAAI,QAAQ,eAAe;AAChD,QAAM,cAA4B,CAAC;AACnC,QAAM,OAAO,oBAAI,IAAY;AAE7B,WAAS,MAAM,MAAe;AAC5B,UAAM,YAAY,aAAa,oBAAoB,IAAI;AACvD,QAAI,CAAC,oBAAAC,QAAG,aAAa,IAAI,KAAK,eAAe,KAAK,QAAQ,IAAI,KAAK,CAAC,WAAW;AAC7E,0BAAAA,QAAG,aAAa,MAAM,KAAK;AAC3B;AAAA,IACF;AACA,UAAM,aAAa,kBAAkB,KAAK,cAAc,WAAW,MAAM;AACzE,QAAI,YAAY;AACd,YAAM,MAAM,GAAG,WAAW,IAAI,IAAI,WAAW,SAAS,aAAa,WAAW,YAAY,WAAW,kBAAkB;AACvH,UAAI,CAAC,KAAK,IAAI,GAAG,GAAG;AAClB,aAAK,IAAI,GAAG;AACZ,oBAAY,KAAK,UAAU;AAAA,MAC7B;AAAA,IACF;AACA,wBAAAA,QAAG,aAAa,MAAM,KAAK;AAAA,EAC7B;AAEA,QAAM,WAAW;AACjB,SAAO;AACT;AAEA,SAAS,kBAAkB,KAAc,cAA8B,WAAsB,aAA2C;AACtI,MAAI,gBAAgB;AAEpB,MAAI,UAAU,QAAQ,oBAAAA,QAAG,YAAY,OAAO;AAC1C,oBAAgB,aAAa,iBAAiB,SAAS,KAAK;AAAA,EAC9D;AAEA,QAAM,eAAe,cAAc,gBAAgB;AACnD,MAAI,CAAC,gBAAgB,aAAa,WAAW,KAAK,CAAC,aAAa,CAAC,EAAG,QAAO;AAE3E,QAAM,0BAA0B,aAAa,CAAC,EAAE,cAAc;AAE9D,MAAI,wBAAwB,SAAS,SAAS,OAAO,KAAK,CAAC,wBAAwB,SAAS,SAAS,cAAc,GAAG;AACpH,WAAO;AAAA,EACT;AAGA,MAAI,CAAC,wBAAwB,SAAS,WAAW,IAAI,YAAY,KAAK,wBAAwB,SAAS,SAAS,cAAc,GAAG;AAC/H,UAAM,wBAA2B,yBAAiB,QAAQ,KAAK,YAAY,OAAO;AAClF,QAAI,IAAI,IAAI,qBAAqB,EAAG,QAAO;AAE3C,eAAW,cAAc,uBAAuB;AAC9C,YAAM,UAAa,8BAAsB,MAAM,KAAK,WAAW,sBAAsB;AACrF,UAAI,IAAI,IAAI,OAAO,KAAK,CAAC,QAAS;AAElC,UAAI,WAAW,UAAU,cAAc,QAAQ,QAAQ,SAAS,cAAc,MAAM;AAClF,eAAO,EAAE,MAAM,YAAY,oBAAoB,WAAW,GAAG;AAAA,MAC/D;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAEA,MAAI,YAAY,wBAAwB;AACxC,MAAI,UAAU,WAAW,IAAI,YAAY,GAAG;AAC1C,gBAAY,UAAU,UAAU,IAAI,aAAa,MAAM;AAAA,EACzD;AAEA,QAAM,OAAU,cAAM,QAAQ,KAAK,SAAS;AAC5C,MAAI,IAAI,IAAI,IAAI,KAAK,CAAC,KAAM,QAAO;AAEnC,MAAI,KAAK,OAAO,YAAY,SAAS;AACnC,UAAMC,gBAAkB,gBAAQ,QAAQ,KAAK,KAAK,EAAE;AACpD,QAAI,IAAI,IAAIA,aAAY,EAAG,QAAO;AAElC,eAAW,eAAeA,eAAc;AACtC,UAAI,YAAY,SAAS,cAAc,QAAQ,YAAY,OAAO,YAAY,IAAI;AAChF,eAAO,EAAE,MAAM,YAAY,WAAW,YAAY,IAAI,SAAS,KAAK,GAAG;AAAA,MACzE;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAEA,QAAM,eAAkB,gBAAQ,QAAQ,KAAK,KAAK,EAAE;AACpD,MAAI,IAAI,IAAI,YAAY,EAAG,QAAO;AAElC,aAAW,eAAe,cAAc;AACtC,QAAI,YAAY,SAAS,cAAc,MAAM;AAC3C,aAAO,EAAE,MAAM,YAAY,WAAW,YAAY,IAAI,SAAS,KAAK,GAAG;AAAA,IACzE;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,iBAAiB,aAA4B,QAAwC;AAC5F,MAAI;AAEJ,WAAS,MAAM,MAAe;AAC5B,QAAI,OAAQ;AAEZ,QAAI,eAAe,MAAM,MAAM,GAAG;AAChC,eAAS;AACT;AAAA,IACF;AAEA,wBAAAD,QAAG,aAAa,MAAM,KAAK;AAAA,EAC7B;AAEA,QAAM,WAAW;AACjB,SAAO;AACT;AAEA,SAAS,eAAe,MAAe,QAA4B;AACjE,MAAI,OAAO,SAAS,WAAW;AAC7B,QAAI,OAAO,SAAS,cAAc,oBAAAA,QAAG,sBAAsB,IAAI,EAAG,QAAO,qBAAqB,IAAI;AAClG,QAAI,OAAO,SAAS,WAAW,oBAAAA,QAAG,mBAAmB,IAAI,EAAG,QAAO,qBAAqB,IAAI;AAC5F,QAAI,OAAO,SAAS,YAAY;AAC9B,UAAI,oBAAAA,QAAG,mBAAmB,IAAI,KAAK,CAAC,KAAK,eAAgB,QAAO;AAChE,UAAI,oBAAAA,QAAG,oBAAoB,IAAI,KAAK,KAAK,gBAAgB,oBAAAA,QAAG,eAAe,KAAK,YAAY,GAAG;AAC7F,eAAO,KAAK,aAAa,SAAS,KAAK,CAAC,YAAY,QAAQ,KAAK,SAAS,SAAS;AAAA,MACrF;AAAA,IACF;AAAA,EACF;AAEA,MAAI,OAAO,SAAS,YAAY;AAC9B,QAAI,oBAAAA,QAAG,oBAAoB,IAAI,GAAG;AAChC,YAAM,eAAe,KAAK,gBAAgB;AAC1C,iBAAW,QAAQ,cAAc;AAC/B,YAAI,oBAAAA,QAAG,aAAa,KAAK,IAAI,KAAK,KAAK,KAAK,SAAS,OAAO,MAAM;AAChE,gBAAM,cAAc,KAAK;AACzB,cAAI,gBAAgB,oBAAAA,QAAG,gBAAgB,WAAW,KAAK,oBAAAA,QAAG,qBAAqB,WAAW,IAAI;AAC5F,mBAAO;AAAA,UACT;AAAA,QACF;AAAA,MACF;AACA,aAAO;AAAA,IACT;AACA,QAAI,oBAAAA,QAAG,sBAAsB,IAAI,GAAG;AAClC,aAAO,cAAc,IAAI,MAAM,OAAO;AAAA,IACxC;AACA,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,SAAS,SAAS;AAC3B,QAAI,CAAC,oBAAAA,QAAG,mBAAmB,IAAI,EAAG,QAAO;AACzC,WAAO,cAAc,IAAI,MAAM,OAAO;AAAA,EACxC;AAEA,MAAI,OAAO,SAAS,QAAQ;AAC1B,QAAI,CAAC,oBAAAA,QAAG,uBAAuB,IAAI,KAAK,CAAC,oBAAAA,QAAG,uBAAuB,IAAI,KAAK,CAAC,oBAAAA,QAAG,kBAAkB,IAAI,EAAG,QAAO;AAChH,WAAO,cAAc,IAAI,MAAM,OAAO;AAAA,EACxC;AAEA,MAAI,OAAO,SAAS,YAAY;AAC9B,QAAI,oBAAAA,QAAG,oBAAoB,IAAI,GAAG;AAChC,YAAM,eAAe,KAAK,gBAAgB;AAC1C,iBAAW,QAAQ,cAAc;AAC/B,YAAI,oBAAAA,QAAG,aAAa,KAAK,IAAI,KAAK,KAAK,KAAK,SAAS,OAAO,MAAM;AAChE,gBAAM,cAAc,KAAK;AACzB,cAAI,CAAC,eAAgB,CAAC,oBAAAA,QAAG,gBAAgB,WAAW,KAAK,CAAC,oBAAAA,QAAG,qBAAqB,WAAW,GAAI;AAC/F,mBAAO;AAAA,UACT;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,SAAS,gBAAgB;AAClC,QAAI,CAAC,oBAAAA,QAAG,oBAAoB,IAAI,EAAG,QAAO;AAC1C,UAAM,cAAc,cAAc,IAAI;AACtC,QAAI,CAAC,YAAa,QAAO;AACzB,UAAM,aAAa,KAAK;AACxB,QAAI,CAAC,cAAc,CAAC,oBAAAA,QAAG,mBAAmB,UAAU,EAAG,QAAO;AAC9D,UAAM,aAAa,cAAc,UAAU;AAC3C,QAAI,CAAC,WAAY,QAAO;AACxB,WAAO,GAAG,UAAU,IAAI,WAAW,OAAO,OAAO;AAAA,EACnD;AAEA,MAAI,OAAO,SAAS,kBAAkB;AACpC,QAAI,CAAC,oBAAAA,QAAG,sBAAsB,IAAI,EAAG,QAAO;AAC5C,UAAM,YAAY,cAAc,IAAI;AACpC,QAAI,CAAC,UAAW,QAAO;AACvB,UAAM,aAAa,KAAK;AACxB,QAAI,CAAC,cAAc,CAAC,oBAAAA,QAAG,mBAAmB,UAAU,EAAG,QAAO;AAC9D,UAAM,aAAa,cAAc,UAAU;AAC3C,QAAI,CAAC,WAAY,QAAO;AACxB,WAAO,GAAG,UAAU,IAAI,SAAS,OAAO,OAAO;AAAA,EACjD;AAEA,SAAO;AACT;AAEA,SAAS,cAAc,MAAmC;AACxD,MAAI,EAAE,UAAU,MAAO,QAAO;AAC9B,QAAM,eAAe;AACrB,MAAI,aAAa,QAAQ,oBAAAA,QAAG,aAAa,aAAa,IAAI,GAAG;AAC3D,WAAO,aAAa,KAAK;AAAA,EAC3B;AACA,SAAO;AACT;AAEA,SAAS,eAAe,QAA6B,YAAoC;AACvF,MAAI,CAAC,OAAQ,QAAO;AAEpB,MAAI,oBAAAA,QAAG,sBAAsB,MAAM,KAAK,OAAO,SAAS,WAAY,QAAO;AAC3E,MAAI,oBAAAA,QAAG,mBAAmB,MAAM,KAAK,OAAO,SAAS,WAAY,QAAO;AACxE,MAAI,oBAAAA,QAAG,uBAAuB,MAAM,KAAK,OAAO,SAAS,WAAY,QAAO;AAC5E,MAAI,oBAAAA,QAAG,uBAAuB,MAAM,KAAK,OAAO,SAAS,WAAY,QAAO;AAC5E,MAAI,oBAAAA,QAAG,kBAAkB,MAAM,KAAK,OAAO,SAAS,WAAY,QAAO;AACvE,MAAI,oBAAAA,QAAG,sBAAsB,MAAM,KAAK,OAAO,SAAS,WAAY,QAAO;AAC3E,MAAI,oBAAAA,QAAG,YAAY,MAAM,KAAK,OAAO,SAAS,WAAY,QAAO;AACjE,MAAI,oBAAAA,QAAG,sBAAsB,MAAM,KAAK,OAAO,SAAS,WAAY,QAAO;AAC3E,MAAI,oBAAAA,QAAG,oBAAoB,MAAM,KAAK,OAAO,SAAS,WAAY,QAAO;AACzE,MAAI,oBAAAA,QAAG,2BAA2B,MAAM,KAAK,OAAO,SAAS,WAAY,QAAO;AAChF,MAAI,oBAAAA,QAAG,eAAe,MAAM,KAAK,OAAO,SAAS,WAAY,QAAO;AACpE,MAAI,oBAAAA,QAAG,kBAAkB,MAAM,MAAM,OAAO,SAAS,cAAc,OAAO,iBAAiB,YAAa,QAAO;AAC/G,MAAI,oBAAAA,QAAG,kBAAkB,MAAM,KAAK,OAAO,SAAS,WAAY,QAAO;AAEvE,SAAO;AACT;AAEA,SAAS,qBAAqB,KAAc,aAAwB,YAAuD;AACzH,QAAM,WAAc,8BAAsB,OAAO,KAAK;AAAA,IACpD,gBAAgB,YAAY;AAAA,IAC5B,cAAc,WAAW;AAAA,EAC3B,CAAC;AACD,MAAI,IAAI,IAAI,QAAQ,EAAG,QAAO;AAC9B,MAAI,SAAU;AAEd,SAAU,8BAAsB,OAAO,KAAK;AAAA,IAC1C,cAAc,YAAY;AAAA,IAC1B,YAAY,WAAW;AAAA,IACvB,gBAAgB,YAAY;AAAA,IAC5B,cAAc,WAAW;AAAA,IACzB,OAAO;AAAA,EACT,CAAC;AACH;AAEA,SAAS,qBAAqB,KAAc,aAAwB,YAAuD;AACzH,QAAM,WAAc,8BAAsB,OAAO,KAAK;AAAA,IACpD,WAAW,YAAY;AAAA,IACvB,oBAAoB,WAAW;AAAA,EACjC,CAAC;AACD,MAAI,IAAI,IAAI,QAAQ,EAAG,QAAO;AAC9B,MAAI,SAAU;AAEd,SAAU,8BAAsB,OAAO,KAAK;AAAA,IAC1C,WAAW,YAAY;AAAA,IACvB,oBAAoB,WAAW;AAAA,EACjC,CAAC;AACH;;;AC7RA,eAAsBE,QAAO,KAAc;AACzC,QAAM,cAAc,GAAG;AACvB,QAAM,2BAA2B,GAAG;AACpC,QAAM,WAAW,GAAG;AACpB,QAAM,aAAa,GAAG;AACtB,QAAM,aAAa,GAAG;AAExB;;;ACdA,IAAAC,uBAAsB;AAKf,IAAM,SAAS,WAAW,UAAU,CAAC,QAA6B;AACvE,QAAM,gBAAgB,IAAI,GAAG,OAAO,EAAE,OAAO,QAAQ,OAAO,WAAO,4BAAM,EAAE,CAAC,EAAE,KAAK,OAAO,EAAE,QAAQ,QAAQ,KAAK,EAAE,IAAI;AAEvH,QAAM,cAAc,IAAI,GAAG,OAAO,EAAE,OAAO,MAAM,OAAO,WAAO,4BAAM,EAAE,CAAC,EAAE,KAAK,KAAK,EAAE,QAAQ,MAAM,KAAK,EAAE,IAAI;AAE/G,QAAM,aAAa,IAAI,GAAG,OAAO,EAAE,OAAO,YAAY,OAAO,WAAO,4BAAM,EAAE,CAAC,EAAE,KAAK,WAAW,EAAE,QAAQ,YAAY,KAAK,EAAE,IAAI;AAEhI,QAAM,aAAa,IAAI,GACpB,OAAO,EAAE,OAAO,sBAAsB,OAAO,WAAO,4BAAM,EAAE,CAAC,EAC7D,KAAK,qBAAqB,EAC1B,QAAQ,sBAAsB,KAAK,EACnC,IAAI;AAEP,SAAO;AAAA,IACL,SAAS,WAAW,eAAe,CAAC,WAAW,eAAe,OAAO,CAAC;AAAA,IACtE,OAAO,WAAW,aAAa,CAAC,WAAW,eAAe,OAAO,CAAC;AAAA,IAClE,aAAa,WAAW,YAAY,CAAC,eAAe,OAAO,CAAC;AAAA,IAC5D,cAAc,WAAW,YAAY,CAAC,eAAe,OAAO,CAAC;AAAA,EAC/D;AACF,CAAC;AAED,SAAS,WAA6B,OAAgD,QAA0C;AAC9H,QAAM,SAAS,EAAE,OAAO,EAAE;AAC1B,aAAW,SAAS,OAAQ,QAAO,KAAK,IAAI;AAC5C,aAAW,QAAQ,OAAO;AACxB,QAAI,CAAC,OAAO,SAAS,KAAK,KAAU,EAAG;AACvC,WAAO,KAAK,KAAU,KAAK,OAAO,KAAK,KAAU,KAAK,KAAK,KAAK;AAChE,WAAO,SAAS,KAAK;AAAA,EACvB;AACA,SAAO;AACT;;;AC7BO,SAAS,WAAW,KAAyB;AAClD,SAAO;AAAA,IACL,KAAK,CAAC,OAAeC,KAAI,KAAK,EAAE;AAAA,IAChC,QAAQ,CAAC,YAAYC,QAAO,KAAK,OAAO;AAAA,IACxC,iBAAiB,CAAC,IAAI,gBAAgB,gBAAgB,KAAK,IAAI,WAAW;AAAA,IAC1E,kBAAkB,CAAC,SAAS,YAAY,iBAAiB,KAAK,SAAS,OAAO;AAAA,IAC9E,gBAAgB,CAAC,SAAS,YAAY,eAAe,KAAK,SAAS,OAAO;AAAA,IAC1E,sBAAsB,CAAC,eAAe,YAAY,qBAAqB,KAAK,eAAe,OAAO;AAAA,EACpG;AACF;AAEA,SAASD,KAAI,KAAc,IAAY;AACrC,SAAO,IAAI,SAAY,cAAM,MAAM,KAAK,EAAE,CAAC,KAAK;AAClD;AAEA,SAASC,QAA6B,KAAc,SAAkC;AACpF,SAAO,IAAI,SAAY,cAAM,OAAO,KAAK,OAAO,CAAC;AACnD;AAEA,SAAS,gBAAgB,KAAc,IAAY,aAA2B;AAC5E,MAAI,SAAY,cAAM,OAAO,KAAK,IAAI,EAAE,YAAY,CAAC,CAAC;AACxD;AAIA,SAAS,iBAAuC,KAAc,SAAiB,UAAoC,CAAC,GAAG;AACrH,MAAI,iBAAiB,IAAI,SAAY,cAAM,YAAY,KAAK,SAAS,QAAQ,MAAM,CAAC;AACpF,MAAI,QAAQ,MAAM;AAChB,qBAAiB,IAAI;AAAA,MACnB,OAAO;AAAA,QACL,OAAO;AAAA,QACP,cAAc,CAAC,SAAY,cAAM,YAAY,KAAK,KAAK,IAAc,QAAQ,MAAM;AAAA,QACnF,SAAS,CAAC,SAAS,KAAK;AAAA,MAC1B,CAAC;AAAA,IACH;AAAA,EACF;AACA,QAAM,QAAQ,QAAQ,UAAU;AAChC,QAAM,MAAM,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,eAAe;AACnE,SAAO,eAAe,MAAM,OAAO,GAAG;AACxC;AAIA,SAAS,eAAqC,KAAc,SAAiB,UAAoC,CAAC,GAAG;AACnH,MAAI,kBAAkB,IAAI,SAAY,cAAM,UAAU,KAAK,SAAS,QAAQ,MAAM,CAAC;AACnF,MAAI,QAAQ,MAAM;AAChB,sBAAkB,IAAI;AAAA,MACpB,OAAO;AAAA,QACL,OAAO;AAAA,QACP,cAAc,CAAC,SAAY,cAAM,UAAU,KAAK,KAAK,IAAc,QAAQ,MAAM;AAAA,QACjF,SAAS,CAAC,SAAS,KAAK;AAAA,MAC1B,CAAC;AAAA,IACH;AAAA,EACF;AACA,QAAM,QAAQ,QAAQ,UAAU;AAChC,QAAM,MAAM,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,gBAAgB;AACpE,SAAO,gBAAgB,MAAM,OAAO,GAAG;AACzC;AAEA,SAAS,qBAA2C,KAAc,eAAuB,UAAoC,CAAC,GAAG;AAC/H,MAAI,yBAAyB,IAAI,SAAY,cAAM,iBAAiB,KAAK,eAAe,QAAQ,MAAM,CAAC;AACvG,MAAI,QAAQ,MAAM;AAChB,6BAAyB,IAAI;AAAA,MAC3B,OAAO;AAAA,QACL,OAAO;AAAA,QACP,cAAc,CAAC,SAAY,cAAM,UAAU,KAAK,KAAK,IAAc,QAAQ,MAAM;AAAA,QACjF,SAAS,CAAC,SAAS,KAAK;AAAA,MAC1B,CAAC;AAAA,IACH;AAAA,EACF;AACA,QAAM,QAAQ,QAAQ,UAAU;AAChC,QAAM,MAAM,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,uBAAuB;AAC3E,SAAO,uBAAuB,MAAM,OAAO,GAAG;AAChD;;;ACzEO,SAAS,aAAa,KAA2B;AACtD,SAAO;AAAA,IACL,KAAK,CAAC,OAAeC,KAAI,KAAK,EAAE;AAAA,IAChC,QAAQ,CAAC,YAAYC,QAAO,KAAK,OAAO;AAAA,IACxC,iBAAiB,CAAC,IAAI,gBAAgBC,iBAAgB,KAAK,IAAI,WAAW;AAAA,IAC1E,oBAAoB,CAAC,WAAW,YAAY,mBAAmB,KAAK,WAAW,OAAO;AAAA,IACtF,sBAAsB,CAAC,WAAW,YAAY,qBAAqB,KAAK,WAAW,OAAO;AAAA,IAC1F,kBAAkB,CAAC,eAAe,YAAYC,kBAAiB,KAAK,eAAe,OAAO;AAAA,EAC5F;AACF;AAEA,SAASH,KAAI,KAAc,IAAY;AACrC,SAAO,IAAI,SAAY,gBAAQ,MAAM,KAAK,EAAE,CAAC,KAAK;AACpD;AAEA,SAASC,QAA+B,KAAc,SAAoC;AACxF,SAAO,IAAI,SAAY,gBAAQ,OAAO,KAAK,OAAO,CAAC;AACrD;AAEA,SAASC,iBAAgB,KAAc,IAAY,aAA2B;AAC5E,MAAI,SAAY,gBAAQ,OAAO,KAAK,IAAI,EAAE,YAAY,CAAC,CAAC;AAC1D;AAIA,SAAS,qBAA6C,KAAc,WAAmB,UAAsC,CAAC,GAAG;AAC/H,MAAI,qBAAqB,IAAI,SAAY,gBAAQ,cAAc,KAAK,WAAW,QAAQ,MAAM,CAAC;AAC9F,MAAI,QAAQ,MAAM;AAChB,yBAAqB,IAAI;AAAA,MACvB,OAAO;AAAA,QACL,OAAO;AAAA,QACP,cAAc,CAAC,WAAc,gBAAQ,cAAc,KAAK,OAAO,IAAc,QAAQ,MAAM;AAAA,QAC3F,SAAS,CAAC,WAAW,OAAO;AAAA,MAC9B,CAAC;AAAA,IACH;AAAA,EACF;AACA,QAAM,QAAQ,QAAQ,UAAU;AAChC,QAAM,MAAM,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,mBAAmB;AACvE,SAAO,mBAAmB,MAAM,OAAO,GAAG;AAC5C;AAIA,SAAS,mBAA2C,KAAc,WAAmB,UAAsC,CAAC,GAAG;AAC7H,MAAI,sBAAsB,IAAI,SAAY,gBAAQ,YAAY,KAAK,WAAW,QAAQ,MAAM,CAAC;AAC7F,MAAI,QAAQ,MAAM;AAChB,0BAAsB,IAAI;AAAA,MACxB,OAAO;AAAA,QACL,OAAO;AAAA,QACP,cAAc,CAAC,WAAc,gBAAQ,YAAY,KAAK,OAAO,IAAc,QAAQ,MAAM;AAAA,QACzF,SAAS,CAAC,WAAW,OAAO;AAAA,MAC9B,CAAC;AAAA,IACH;AAAA,EACF;AACA,QAAM,QAAQ,QAAQ,UAAU;AAChC,QAAM,MAAM,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,oBAAoB;AACxE,SAAO,oBAAoB,MAAM,OAAO,GAAG;AAC7C;AAGA,SAASC,kBAAyC,KAAc,eAAuB,UAAsC,CAAC,GAAG;AAC/H,MAAI,oBAAoB,IAAI,SAAY,gBAAQ,iBAAiB,KAAK,eAAe,QAAQ,MAAM,CAAC;AACpG,MAAI,QAAQ,MAAM;AAChB,wBAAoB,IAAI;AAAA,MACtB,OAAO;AAAA,QACL,OAAO;AAAA,QACP,cAAc,CAAC,WAAc,gBAAQ,YAAY,KAAK,OAAO,IAAc,QAAQ,MAAM;AAAA,QACzF,SAAS,CAAC,WAAW,OAAO;AAAA,MAC9B,CAAC;AAAA,IACH;AAAA,EACF;AACA,QAAM,QAAQ,QAAQ,UAAU;AAChC,QAAM,MAAM,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,kBAAkB;AACtE,SAAO,kBAAkB,MAAM,OAAO,GAAG;AAC3C;;;AC1EO,SAAS,iBAAiB,KAA+B;AAC9D,SAAO;AAAA,IACL,KAAK,CAAC,OAAeC,KAAI,KAAK,EAAE;AAAA,IAChC,QAAQ,CAAC,YAAYC,QAAO,KAAK,OAAO;AAAA,IACxC,iBAAiB,CAAC,IAAI,gBAAgBC,iBAAgB,KAAK,IAAI,WAAW;AAAA,IAC1E,UAAU,CAAC,WAAW,YAAY,SAAS,KAAK,WAAW,OAAO;AAAA,IAClE,OAAO,CAAC,cAAc,YAAY,gBAAgB,KAAK,cAAc,OAAO;AAAA,EAC9E;AACF;AAEA,SAASF,KAAI,KAAc,IAAY;AACrC,SAAO,IAAI,SAAY,oBAAY,MAAM,KAAK,EAAE,CAAC,KAAK;AACxD;AAEA,SAASC,QAAkC,KAAc,SAAuC;AAC9F,SAAO,IAAI,SAAY,oBAAY,OAAO,KAAK,OAAO,CAAC;AACzD;AAEA,SAASC,iBAAgB,KAAc,IAAY,aAA2B;AAC5E,MAAI,SAAY,oBAAY,OAAO,KAAK,IAAI,EAAE,YAAY,CAAC,CAAC;AAC9D;AAIA,SAAS,SAAoC,KAAc,WAAmB,UAAyC,CAAC,GAAG;AACzH,MAAI,oBAAoB,IAAI,SAAY,oBAAY,OAAO,KAAK,EAAE,QAAQ,QAAQ,QAAQ,OAAO,EAAE,UAAU,GAAG,OAAO,IAAO,CAAC,CAAC;AAChI,MAAI,QAAQ,MAAM;AAChB,wBAAoB,IAAI;AAAA,MACtB,OAAO;AAAA,QACL,OAAO;AAAA,QACP,cAAc,CAAC,QAAW,oBAAY,OAAO,KAAK,EAAE,QAAQ,QAAQ,QAAQ,OAAO,EAAE,WAAW,IAAI,GAAa,GAAG,OAAO,IAAO,CAAC;AAAA,QACnI,SAAS,CAAC,QAAQ,IAAI;AAAA,MACxB,CAAC;AAAA,IACH;AAAA,EACF;AACA,QAAM,QAAQ,QAAQ,UAAU;AAChC,QAAM,MAAM,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,kBAAkB;AACtE,SAAO,kBAAkB,MAAM,OAAO,GAAG;AAC3C;AAIA,SAAS,gBAAsC,KAAc,cAAsB,UAAoC,CAAC,GAAG;AACzH,MAAI,aAAa,IAAI,SAAY,cAAM,OAAO,KAAK,EAAE,QAAQ,QAAQ,QAAQ,OAAO,EAAE,aAAa,GAAG,OAAO,IAAO,CAAC,CAAC;AACtH,MAAI,QAAQ,MAAM;AAChB,UAAM,cAAc,IAAI;AAAA,MACtB,OAAO;AAAA,QACL,OAAO,IAAI,SAAY,oBAAY,OAAO,KAAK,EAAE,QAAQ,CAAC,IAAI,GAAG,OAAO,EAAE,WAAW,aAAa,GAAG,OAAO,IAAO,CAAC,CAAC;AAAA,QACrH,cAAc,CAAC,QAAW,oBAAY,OAAO,KAAK,EAAE,QAAQ,CAAC,IAAI,GAAG,OAAO,EAAE,WAAW,IAAI,GAAa,GAAG,OAAO,IAAO,CAAC;AAAA,QAC3H,SAAS,CAAC,QAAQ,IAAI;AAAA,MACxB,CAAC;AAAA,IACH;AACA,eAAW,UAAU,aAAa;AAChC,YAAM,eAAe,IAAI;AAAA,QACpB,cAAM,OAAO,KAAK,EAAE,QAAQ,QAAQ,QAAQ,OAAO,EAAE,cAAc,OAAO,GAAa,GAAG,OAAO,IAAO,CAAC;AAAA,MAC9G;AACA,mBAAa,QAAQ,CAAC,MAAM,WAAW,KAAK,CAAC,CAAC;AAAA,IAChD;AAAA,EACF;AAEA,QAAM,QAAQ,QAAQ,UAAU;AAChC,QAAM,MAAM,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,WAAW;AAC/D,SAAO,WAAW,MAAM,OAAO,GAAG;AACpC;;;AChEO,SAAS,kBAAkB,KAAgC;AAChE,SAAO;AAAA,IACL,KAAK,CAAC,OAAeC,KAAI,KAAK,EAAE;AAAA,IAChC,QAAQ,CAAC,YAAYC,QAAO,KAAK,OAAO;AAAA,IACxC,iBAAiB,CAAC,IAAI,gBAAgBC,iBAAgB,KAAK,IAAI,WAAW;AAAA,IAC1E,cAAc,CAAC,SAAS,YAAYC,cAAa,KAAK,SAAS,OAAO;AAAA,IACtE,gBAAgB,CAAC,WAAW,YAAYC,gBAAe,KAAK,WAAW,OAAO;AAAA,EAChF;AACF;AAEA,SAASJ,KAAI,KAAc,IAAY;AACrC,SAAO,IAAI,SAAY,8BAAsB,MAAM,KAAK,EAAE,CAAC,KAAK;AAClE;AAEA,SAASC,QAA2C,KAAc,SAAgD;AAChH,SAAO,IAAI,SAAY,8BAAsB,OAAO,KAAK,OAAO,CAAC;AACnE;AAEA,SAASC,iBAAgB,KAAc,IAAY,aAA2B;AAC5E,MAAI,SAAY,8BAAsB,OAAO,KAAK,IAAI,EAAE,aAAa,OAAO,SAAS,OAAO,KAAK,CAAC,CAAC;AACrG;AAGA,SAASC,cAAiD,KAAc,SAAiB,SAAgD;AACvI,SAAO,IAAI,SAAY,8BAAsB,aAAa,KAAK,SAAS,SAAS,MAAM,CAAC;AAC1F;AAGA,SAASC,gBAAmD,KAAc,WAAmB,SAAgD;AAC3I,SAAO,IAAI,SAAY,8BAAsB,eAAe,KAAK,WAAW,SAAS,MAAM,CAAC;AAC9F;;;ACnBA,eAAsB,OAAO,QAAmC;AAC9D,QAAM,MAAM,MAAM,oBAAoB,MAAM;AAC5C,SAAO;AAAA,IACL;AAAA,IACA,QAAQ,MAAMC,QAAO,GAAG;AAAA,IACxB,QAAQ,MAAM,IAAI,SAAS,OAAO,GAAG,CAAC;AAAA,IACtC,OAAO,WAAW,GAAG;AAAA,IACrB,SAAS,aAAa,GAAG;AAAA,IACzB,aAAa,iBAAiB,GAAG;AAAA,IACjC,cAAc,kBAAkB,GAAG;AAAA,EACrC;AACF;AAEA,eAAsB,KAAK,SAAoC;AAC7D,QAAM,MAAM,MAAM,gBAAgB,OAAO;AACzC,QAAM,SAAS,IAAI,GAAG,OAAO,EAAE,KAAK,eAAO,OAAO,EAAE,IAAI;AACxD,QAAM,SAAiB;AAAA,IACrB;AAAA,IACA,cAAc,OAAO;AAAA,IACrB,aAAa,OAAO,eAAe;AAAA,IACnC,mBAAmB,OAAO,qBAAqB;AAAA,IAC/C,oBAAoB,OAAO,qBAAqB,KAAK,MAAM,OAAO,kBAAkB,IAAI;AAAA,EAC1F;AACA,SAAO;AAAA,IACL;AAAA,IACA,QAAQ,MAAMA,QAAO,GAAG;AAAA,IACxB,QAAQ,MAAM,IAAI,SAAS,OAAO,GAAG,CAAC;AAAA,IACtC,OAAO,WAAW,GAAG;AAAA,IACrB,SAAS,aAAa,GAAG;AAAA,IACzB,aAAa,iBAAiB,GAAG;AAAA,IACjC,cAAc,kBAAkB,GAAG;AAAA,EACrC;AACF;;;ArB1CA,IAAM,cAAc;AAEpB,eAAsB,YAAY;AAChC,MAAI;AACF,UAAM,UAAU,IAAI,SAAS,IAAI,UAAU,WAAW,CAAC;AACvD,UAAM,aAAa,IAAI,SAAS,WAAW,OAAO,CAAC;AAEnD,UAAM,MAAM,OAAO,UAAU,UAAU;AACvC,QAAI,CAAC,IAAI,QAAS,OAAM,IAAI,IAAI,kBAAkB,EAAE,QAAQ,IAAI,MAAM,OAAO,CAAC;AAE9E,UAAM,SAAS,IAAI;AACnB,QAAI,IAAI,YAAY,OAAO,OAAO,EAAG,QAAO,KAAK,OAAO,OAAO;AAC/D,WAAO,OAAO,MAAM;AAAA,EACtB,SAAS,OAAY;AACnB,QAAI,MAAM,SAAS,uBAAuB;AACxC,UAAI,MAAM,6BAA6B,WAAW,YAAY;AAAA,IAChE,WAAW,MAAM,SAAS,gBAAgB;AACxC,UAAI,MAAM,0BAA0B,WAAW,EAAE;AAAA,IACnD,WAAW,MAAM,SAAS,kBAAkB;AAC1C,UAAI,MAAM,8BAA8B;AAAA,IAC1C,WAAW,MAAM,SAAS;AACxB,UAAI,MAAM,UAAU,MAAM,OAAO,EAAE;AAAA,IACrC,OAAO;AACL,UAAI,MAAM,UAAU,OAAO,KAAK,CAAC,EAAE;AAAA,IACrC;AACA,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF;AAKO,SAAS,cAAiB,cAAsB,QAAsB,SAAoB;AAE/F,MAAI;AACJ,MAAI;AACF,kBAAc,IAAI,SAAS,WAAW,YAAY,CAAC;AAAA,EACrD,SAAS,OAAY;AACnB,QAAI,IAAI,0BAA0B,OAAO,EAAE;AAC3C,UAAM,YAAY,MAAM,MAAM,QAAQ,WAAW;AACjD,QAAI,IAAI,KAAK,SAAS,EAAE;AACxB,YAAQ,KAAK,CAAC;AAAA,EAChB;AAGA,QAAM,oBAAoB,OAAO,UAAU,WAAW;AACtD,MAAI,CAAC,kBAAkB,SAAS;AAC9B,QAAI,IAAI,oCAAoC,OAAO,EAAE;AACrD,QAAI,IAAI,EAAE;AAEV,eAAW,SAAS,kBAAkB,MAAM,QAAQ;AAClD,YAAMC,QAAO,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,KAAK,GAAG,IAAI;AAC5D,UAAI,IAAI,YAAOA,KAAI,KAAK,MAAM,OAAO,EAAE;AAAA,IACzC;AAEA,QAAI,IAAI,EAAE;AACV,QAAI,IAAI,iBAAiB,QAAQ,MAAM,GAAG,EAAE,CAAC,CAAC,gCAAgC;AAC9E,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,SAAO,kBAAkB;AAC3B;;;AsBnEA,oBAAmB;AAGZ,SAAS,cAAcC,SAA4B;AACxD,QAAM,oBAAoB,OAAO,OAAOA,OAAM,EAAE,OAAO,CAAC,GAAG,MAAM,IAAI,EAAE,aAAa,CAAC;AACrF,SAAO,cAAAC;AAAA;AAAA,qBAEY,WAAWD,QAAO,WAAW,CAAC;AAAA,eACpC,WAAWA,QAAO,KAAK,CAAC;AAAA,iBACtB,WAAWA,QAAO,OAAO,CAAC;AAAA,sBACrB,WAAWA,QAAO,YAAY,CAAC;AAAA;AAAA,MAE/C,iBAAiB;AAAA;AAEvB;AAEA,SAAS,WAAW,EAAE,OAAO,GAAG,OAAO,GAA2B;AAChE,SAAO,GAAG,KAAK,KAAK,OAAO,QAAQ,MAAM,EACtC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,GAAG,KAAK,IAAI,KAAK,QAAQ,KAAK,GAAG,CAAC,EAAE,EAC3D,KAAK,IAAI,CAAC;AACf;;;AvBfO,IAAME,UAAS,IAAI,yBAAQ,QAAQ;AAC1CA,QAAO,YAAY,mDAAmD;AACtEA,QAAO,OAAO,YAAY;AACxB,QAAM,OAAO,MAAM,UAAU;AAC7B,QAAM,KAAK,OAAO;AAClB,MAAI,IAAI,oBAAoB;AAE5B,QAAMC,UAAS,KAAK,OAAO;AAC3B,QAAMC,UAAS,cAAcD,OAAM;AACnC,MAAI,IAAIC,OAAM;AAChB,CAAC;;;AwBfD,IAAAC,oBAAwB;AAKjB,IAAM,SAAS,IAAI,0BAAQ,QAAQ;AAC1C,OAAO,YAAY,6BAA6B;AAChD,OAAO,OAAO,YAAY;AACxB,QAAM,OAAO,MAAM,UAAU;AAC7B,QAAMC,UAAS,KAAK,OAAO;AAC3B,MAAI,IAAI,cAAcA,OAAM,CAAC;AAC/B,CAAC;;;ACXD,IAAAC,iBAAmB;AACnB,IAAAC,oBAAwB;AAYjB,IAAM,WAAW,IAAI,0BAAQ,UAAU;AAC9C,SAAS,YAAY,gCAAgC;AACrD,SAAS,OAAO,YAAY;AAC1B,QAAM,OAAO,MAAM,UAAU;AAC7B,QAAM,OAAO,qBAAqB,IAAI;AACtC,MAAI,CAAC,KAAM,QAAO,IAAI,IAAI,0BAA0B;AACpD,MAAI,KAAK,SAAS,aAAc,QAAO,oBAAoB,KAAK,MAAM;AAItE,MAAI;AAAA,IACF;AAAA,EACF;AACF,CAAC;AAED,SAAS,oBAAoB,KAAyB;AACpD,MAAI,IAAI,eAAAC;AAAA;AAAA;AAAA,eAGK,IAAI,IAAI,YAAY,IAAI,OAAO,GAAG,IAAI,WAAW,EAAE;AAAA;AAAA,eAEnD,IAAI,OAAO;AAAA,eACX,IAAI,OAAO;AAAA,cACZ,IAAI,eAAe,KAAK;AAAA;AAAA,qEAE+B,IAAI,IAAI;AAAA,gDAC7B,IAAI,EAAE;AAAA,GACnD;AACH;AA0CA,SAAS,qBAAqB,MAAgC;AAE5D,QAAM,OAAO,KAAK,aAAa,OAAO;AAAA,IACpC,OAAO,EAAE,OAAO,cAAc;AAAA,IAC9B,OAAO;AAAA,IACP,QAAQ,CAAC,MAAM,WAAW,WAAW,QAAQ,WAAW,aAAa;AAAA,EACvE,CAAC;AACD,MAAI,KAAK,SAAS,GAAG;AACnB,WAAO,EAAE,MAAM,cAAc,QAAQ,KAAK,CAAC,EAAwB;AAAA,EACrE;AAGA,QAAMC,WAAU,KAAK,QAAQ,OAAO;AAAA,IAClC,OAAO,EAAE,OAAO,cAAc;AAAA,IAC9B,OAAO;AAAA,IACP,QAAQ,CAAC,MAAM,QAAQ,QAAQ,WAAW,aAAa;AAAA,EACzD,CAAC;AACD,MAAIA,SAAQ,SAAS,GAAG;AACtB,WAAO,EAAE,MAAM,UAAU,QAAQA,SAAQ,CAAC,EAAY;AAAA,EACxD;AAGA,QAAMC,SAAQ,KAAK,MAAM,OAAO;AAAA,IAC9B,OAAO,EAAE,OAAO,cAAc;AAAA,IAC9B,OAAO;AAAA,IACP,QAAQ,CAAC,MAAM,MAAM;AAAA,EACvB,CAAC;AACD,MAAIA,OAAM,SAAS,GAAG;AACpB,WAAO,EAAE,MAAM,QAAQ,QAAQA,OAAM,CAAC,EAAU;AAAA,EAClD;AAGA,QAAMC,eAAc,KAAK,YAAY,OAAO;AAAA,IAC1C,OAAO,EAAE,OAAO,cAAc;AAAA,IAC9B,OAAO;AAAA,IACP,QAAQ,CAAC,MAAM,MAAM;AAAA,EACvB,CAAC;AACD,MAAIA,aAAY,SAAS,GAAG;AAC1B,WAAO,EAAE,MAAM,aAAa,QAAQA,aAAY,CAAC,EAAe;AAAA,EAClE;AAEA,SAAO;AACT;;;AC7HA,IAAAC,qBAAwB;AACxB,IAAAC,iBAAmB;;;ACDnB,IAAAC,oBAAwB;AAIjB,IAAMC,OAAM,IAAI,0BAAQ,KAAK;AACpCA,KAAI,YAAY,kBAAkB;AAClCA,KAAI,SAAS,QAAQ,SAAS;AAC9BA,KAAI,OAAO,OAAO,OAAe;AAC/B,QAAM,OAAO,MAAM,UAAU;AAC7B,QAAM,OAAO,KAAK,MAAM,IAAI,OAAO,EAAE,CAAC;AACtC,MAAI,IAAI,KAAK,UAAU,MAAM,MAAM,CAAC,CAAC;AACvC,CAAC;;;ACXD,IAAAC,oBAAwB;AAKjB,IAAMC,UAAS,IAAI,0BAAQ,QAAQ;AAC1CA,QAAO,YAAY,gCAAgC;AACnDA,QAAO,SAAS,aAAa,yBAAyB;AACtDA,QAAO,OAAO,OAAO,iBAAyB;AAC5C,QAAM,OAAO,MAAM,UAAU;AAC7B,QAAM,UAAU,cAAc,cAAc,mBAAmB,cAAc;AAC7E,QAAM,UAAU,KAAK,MAAM,OAAO,OAAO;AACzC,MAAI,IAAI,KAAK,UAAU,SAAS,MAAM,CAAC,CAAC;AAC1C,CAAC;;;ACbD,IAAAC,aAA6B;AAC7B,IAAAC,oBAAwB;AAIjB,IAAMC,mBAAkB,IAAI,0BAAQ,iBAAiB;AAC5DA,iBAAgB,YAAY,4BAA4B;AACxDA,iBAAgB,SAAS,aAAa,SAAS;AAC/CA,iBAAgB,SAAS,mBAAmB,uBAAuB;AACnEA,iBAAgB,OAAO,OAAO,IAAY,SAAiB;AACzD,QAAM,OAAO,MAAM,UAAU;AAC7B,MAAI;AACF,UAAM,cAAU,yBAAa,MAAM,OAAO;AAC1C,SAAK,MAAM,gBAAgB,OAAO,EAAE,GAAG,OAAO;AAC9C,QAAI,IAAI,uEAAuE;AAAA,EACjF,SAASC,MAAU;AACjB,QAAI,MAAM,UAAUA,KAAI,OAAO,EAAE;AACjC,QAAI,KAAK,CAAC;AAAA,EACZ;AACF,CAAC;;;ACnBD,IAAAC,oBAAwB;AAKjB,IAAMC,oBAAmB,IAAI,0BAAQ,kBAAkB;AAC9DA,kBAAiB,YAAY,kCAAkC;AAC/DA,kBAAiB,SAAS,aAAa,SAAS;AAChDA,kBAAiB,SAAS,aAAa,cAAc;AACrDA,kBAAiB,OAAO,OAAO,SAAiB,iBAAyB;AACvE,QAAM,OAAO,MAAM,UAAU;AAC7B,QAAM,UAAU,cAAc,cAAc,qBAAqB,wBAAwB;AACzF,QAAM,UAAU,KAAK,MAAM,iBAAiB,OAAO,OAAO,GAAG,OAAO;AACpE,MAAI,IAAI,KAAK,UAAU,SAAS,MAAM,CAAC,CAAC;AAC1C,CAAC;;;ACdD,IAAAC,oBAAwB;AAKjB,IAAMC,kBAAiB,IAAI,0BAAQ,gBAAgB;AAC1DA,gBAAe,YAAY,gCAAgC;AAC3DA,gBAAe,SAAS,aAAa,SAAS;AAC9CA,gBAAe,SAAS,aAAa,cAAc;AACnDA,gBAAe,OAAO,OAAO,SAAiB,iBAAyB;AACrE,QAAM,OAAO,MAAM,UAAU;AAC7B,QAAM,UAAU,cAAc,cAAc,qBAAqB,sBAAsB;AACvF,QAAM,UAAU,KAAK,MAAM,eAAe,OAAO,OAAO,GAAG,OAAO;AAClE,MAAI,IAAI,KAAK,UAAU,SAAS,MAAM,CAAC,CAAC;AAC1C,CAAC;;;ACdD,IAAAC,oBAAwB;AAKjB,IAAMC,wBAAuB,IAAI,0BAAQ,sBAAsB;AACtEA,sBAAqB,YAAY,sCAAsC;AACvEA,sBAAqB,SAAS,YAAY,eAAe;AACzDA,sBAAqB,SAAS,aAAa,cAAc;AACzDA,sBAAqB,OAAO,OAAO,QAAgB,iBAAyB;AAC1E,QAAM,OAAO,MAAM,UAAU;AAC7B,QAAM,UAAU,cAAc,cAAc,qBAAqB,4BAA4B;AAC7F,QAAM,UAAU,KAAK,MAAM,qBAAqB,OAAO,MAAM,GAAG,OAAO;AACvE,MAAI,IAAI,KAAK,UAAU,SAAS,MAAM,CAAC,CAAC;AAC1C,CAAC;;;ANLM,IAAMC,SAAQ,IAAI,2BAAQ,OAAO;AACxCA,OAAM,YAAY,eAAe;AAEjCA,OAAM,WAAWC,IAAG;AACpBD,OAAM,WAAWE,OAAM;AACvBF,OAAM,WAAWG,gBAAe;AAChCH,OAAM,WAAWI,iBAAgB;AACjCJ,OAAM,WAAWK,eAAc;AAC/BL,OAAM,WAAWM,qBAAoB;AAErCN,OAAM,YAAY,SAAS,eAAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CA2B1B;;;AO9CD,IAAAC,qBAAwB;AACxB,IAAAC,iBAAmB;;;ACDnB,IAAAC,qBAAwB;AAIjB,IAAMC,OAAM,IAAI,2BAAQ,KAAK;AACpCA,KAAI,YAAY,oBAAoB;AACpCA,KAAI,SAAS,QAAQ,WAAW;AAChCA,KAAI,OAAO,OAAO,OAAe;AAC/B,QAAM,OAAO,MAAM,UAAU;AAC7B,QAAM,SAAS,KAAK,QAAQ,IAAI,OAAO,EAAE,CAAC;AAC1C,MAAI,IAAI,KAAK,UAAU,QAAQ,MAAM,CAAC,CAAC;AACzC,CAAC;;;ACXD,IAAAC,qBAAwB;AAKjB,IAAMC,WAAS,IAAI,2BAAQ,QAAQ;AAC1CA,SAAO,YAAY,kCAAkC;AACrDA,SAAO,SAAS,aAAa,cAAc;AAC3CA,SAAO,OAAO,OAAO,iBAAyB;AAC5C,QAAM,OAAO,MAAM,UAAU;AAC7B,QAAM,UAAU,cAAc,cAAc,qBAAqB,gBAAgB;AACjF,QAAM,UAAU,KAAK,QAAQ,OAAO,OAAO;AAC3C,MAAI,IAAI,KAAK,UAAU,SAAS,MAAM,CAAC,CAAC;AAC1C,CAAC;;;ACbD,IAAAC,aAA6B;AAC7B,IAAAC,qBAAwB;AAIjB,IAAMC,mBAAkB,IAAI,2BAAQ,iBAAiB;AAC5DA,iBAAgB,YAAY,8BAA8B;AAC1DA,iBAAgB,SAAS,eAAe,WAAW;AACnDA,iBAAgB,SAAS,mBAAmB,uBAAuB;AACnEA,iBAAgB,OAAO,OAAO,IAAY,SAAiB;AACzD,QAAM,OAAO,MAAM,UAAU;AAC7B,MAAI;AACF,UAAM,cAAU,yBAAa,MAAM,OAAO;AAC1C,SAAK,QAAQ,gBAAgB,OAAO,EAAE,GAAG,OAAO;AAChD,QAAI,IAAI,uEAAuE;AAAA,EACjF,SAASC,MAAU;AACjB,QAAI,MAAM,UAAUA,KAAI,OAAO,EAAE;AACjC,QAAI,KAAK,CAAC;AAAA,EACZ;AACF,CAAC;;;ACnBD,IAAAC,qBAAwB;AAKjB,IAAMC,sBAAqB,IAAI,2BAAQ,oBAAoB;AAClEA,oBAAmB,YAAY,sCAAsC;AACrEA,oBAAmB,SAAS,eAAe,WAAW;AACtDA,oBAAmB,SAAS,aAAa,cAAc;AACvDA,oBAAmB,OAAO,OAAO,WAAmB,iBAAyB;AAC3E,QAAM,OAAO,MAAM,UAAU;AAC7B,QAAM,UAAU,cAAc,cAAc,uBAAuB,4BAA4B;AAC/F,QAAM,UAAU,KAAK,QAAQ,mBAAmB,OAAO,SAAS,GAAG,OAAO;AAC1E,MAAI,IAAI,KAAK,UAAU,SAAS,MAAM,CAAC,CAAC;AAC1C,CAAC;;;ACdD,IAAAC,qBAAwB;AAKjB,IAAMC,wBAAuB,IAAI,2BAAQ,sBAAsB;AACtEA,sBAAqB,YAAY,wCAAwC;AACzEA,sBAAqB,SAAS,eAAe,WAAW;AACxDA,sBAAqB,SAAS,aAAa,cAAc;AACzDA,sBAAqB,OAAO,OAAO,WAAmB,iBAAyB;AAC7E,QAAM,OAAO,MAAM,UAAU;AAC7B,QAAM,UAAU,cAAc,cAAc,uBAAuB,8BAA8B;AACjG,QAAM,UAAU,KAAK,QAAQ,qBAAqB,OAAO,SAAS,GAAG,OAAO;AAC5E,MAAI,IAAI,KAAK,UAAU,SAAS,MAAM,CAAC,CAAC;AAC1C,CAAC;;;ACdD,IAAAC,qBAAwB;AAKjB,IAAMC,oBAAmB,IAAI,2BAAQ,kBAAkB;AAC9DA,kBAAiB,YAAY,oCAAoC;AACjEA,kBAAiB,SAAS,YAAY,eAAe;AACrDA,kBAAiB,SAAS,aAAa,cAAc;AACrDA,kBAAiB,OAAO,OAAO,QAAgB,iBAAyB;AACtE,QAAM,OAAO,MAAM,UAAU;AAC7B,QAAM,UAAU,cAAc,cAAc,uBAAuB,0BAA0B;AAC7F,QAAM,UAAU,KAAK,QAAQ,iBAAiB,OAAO,MAAM,GAAG,OAAO;AACrE,MAAI,IAAI,KAAK,UAAU,SAAS,MAAM,CAAC,CAAC;AAC1C,CAAC;;;ANLM,IAAMC,WAAU,IAAI,2BAAQ,SAAS;AAC5CA,SAAQ,YAAY,iBAAiB;AAErCA,SAAQ,WAAWC,IAAG;AACtBD,SAAQ,WAAWE,QAAM;AACzBF,SAAQ,WAAWG,gBAAe;AAClCH,SAAQ,WAAWI,mBAAkB;AACrCJ,SAAQ,WAAWK,qBAAoB;AACvCL,SAAQ,WAAWM,iBAAgB;AAEnCN,SAAQ,YAAY,SAAS,eAAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CA2B5B;;;AO9CD,IAAAC,qBAAwB;AACxB,IAAAC,iBAAmB;;;ACDnB,IAAAC,qBAAwB;AAIjB,IAAMC,OAAM,IAAI,2BAAQ,KAAK;AACpCA,KAAI,YAAY,uBAAuB;AACvCA,KAAI,SAAS,QAAQ,cAAc;AACnCA,KAAI,OAAO,OAAO,OAAe;AAC/B,QAAM,OAAO,MAAM,UAAU;AAC7B,QAAM,YAAY,KAAK,YAAY,IAAI,OAAO,EAAE,CAAC;AACjD,MAAI,IAAI,KAAK,UAAU,WAAW,MAAM,CAAC,CAAC;AAC5C,CAAC;;;ACXD,IAAAC,qBAAwB;AAKjB,IAAMC,WAAS,IAAI,2BAAQ,QAAQ;AAC1CA,SAAO,YAAY,sCAAsC;AACzDA,SAAO,SAAS,aAAa,cAAc;AAC3CA,SAAO,OAAO,OAAO,iBAAyB;AAC5C,QAAM,OAAO,MAAM,UAAU;AAC7B,QAAM,UAAU,cAAc,cAAc,wBAAwB,oBAAoB;AACxF,QAAM,UAAU,KAAK,YAAY,OAAO,OAAO;AAC/C,MAAI,IAAI,KAAK,UAAU,SAAS,MAAM,CAAC,CAAC;AAC1C,CAAC;;;ACbD,IAAAC,aAA6B;AAC7B,IAAAC,qBAAwB;AAIjB,IAAMC,mBAAkB,IAAI,2BAAQ,iBAAiB;AAC5DA,iBAAgB,YAAY,iCAAiC;AAC7DA,iBAAgB,SAAS,kBAAkB,cAAc;AACzDA,iBAAgB,SAAS,mBAAmB,uBAAuB;AACnEA,iBAAgB,OAAO,OAAO,IAAY,SAAiB;AACzD,QAAM,OAAO,MAAM,UAAU;AAC7B,MAAI;AACF,UAAM,cAAU,yBAAa,MAAM,OAAO;AAC1C,SAAK,YAAY,gBAAgB,OAAO,EAAE,GAAG,OAAO;AACpD,QAAI,IAAI,uEAAuE;AAAA,EACjF,SAASC,MAAU;AACjB,QAAI,MAAM,UAAUA,KAAI,OAAO,EAAE;AACjC,QAAI,KAAK,CAAC;AAAA,EACZ;AACF,CAAC;;;AChBD,IAAAC,qBAAwB;AAEjB,IAAMC,YAAW,IAAI,2BAAQ,UAAU;AAC9CA,UAAS,YAAY,0CAA0C;AAC/DA,UAAS,SAAS,eAAe,qBAAqB;AACtDA,UAAS,SAAS,aAAa,cAAc;AAC7CA,UAAS,OAAO,OAAO,WAAmB,iBAAyB;AACjE,QAAM,OAAO,MAAM,UAAU;AAC7B,QAAM,UAAU,cAAc,cAAc,0BAA0B,sBAAsB;AAC5F,QAAM,UAAU,KAAK,YAAY,SAAS,OAAO,SAAS,GAAG,OAAO;AACpE,MAAI,IAAI,KAAK,UAAU,SAAS,MAAM,CAAC,CAAC;AAC1C,CAAC;;;ACdD,IAAAC,qBAAwB;AAKjB,IAAMC,SAAQ,IAAI,2BAAQ,OAAO;AACxCA,OAAM,YAAY,8BAA8B;AAChDA,OAAM,SAAS,kBAAkB,cAAc;AAC/CA,OAAM,SAAS,aAAa,cAAc;AAC1CA,OAAM,OAAO,OAAO,cAAsB,iBAAyB;AACjE,QAAM,OAAO,MAAM,UAAU;AAC7B,QAAM,UAAU,cAAc,cAAc,qBAAqB,mBAAmB;AACpF,QAAM,UAAU,KAAK,YAAY,MAAM,OAAO,YAAY,GAAG,OAAO;AACpE,MAAI,IAAI,KAAK,UAAU,SAAS,MAAM,CAAC,CAAC;AAC1C,CAAC;;;ALNM,IAAMC,eAAc,IAAI,2BAAQ,aAAa;AACpDA,aAAY,YAAY,qBAAqB;AAE7CA,aAAY,WAAWC,IAAG;AAC1BD,aAAY,WAAWE,QAAM;AAC7BF,aAAY,WAAWG,gBAAe;AACtCH,aAAY,WAAWI,SAAQ;AAC/BJ,aAAY,WAAWK,MAAK;AAE5BL,aAAY,YAAY,SAAS,eAAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CA2BhC;;;AM5CD,IAAAC,qBAAwB;AACxB,IAAAC,iBAAmB;;;ACDnB,IAAAC,qBAAwB;AAIjB,IAAMC,OAAM,IAAI,2BAAQ,KAAK;AACpCA,KAAI,YAAY,wBAAwB;AACxCA,KAAI,SAAS,QAAQ,eAAe;AACpCA,KAAI,OAAO,OAAO,OAAe;AAC/B,QAAM,OAAO,MAAM,UAAU;AAC7B,QAAM,aAAa,KAAK,aAAa,IAAI,OAAO,EAAE,CAAC;AACnD,MAAI,IAAI,KAAK,UAAU,YAAY,MAAM,CAAC,CAAC;AAC7C,CAAC;;;ACXD,IAAAC,qBAAwB;AAKjB,IAAMC,WAAS,IAAI,2BAAQ,QAAQ;AAC1CA,SAAO,YAAY,uCAAuC;AAC1DA,SAAO,SAAS,aAAa,cAAc;AAC3CA,SAAO,OAAO,OAAO,iBAAyB;AAC5C,QAAM,OAAO,MAAM,UAAU;AAC7B,QAAM,UAAU,cAAc,cAAc,yBAAyB,qBAAqB;AAC1F,QAAM,UAAU,KAAK,aAAa,OAAO,OAAO;AAChD,MAAI,IAAI,KAAK,UAAU,SAAS,MAAM,CAAC,CAAC;AAC1C,CAAC;;;ACbD,IAAAC,aAA6B;AAC7B,IAAAC,qBAAwB;AAIjB,IAAMC,mBAAkB,IAAI,2BAAQ,iBAAiB;AAC5DA,iBAAgB,YAAY,kCAAkC;AAC9DA,iBAAgB,SAAS,mBAAmB,eAAe;AAC3DA,iBAAgB,SAAS,mBAAmB,uBAAuB;AACnEA,iBAAgB,OAAO,OAAO,IAAY,SAAiB;AACzD,QAAM,OAAO,MAAM,UAAU;AAC7B,MAAI;AACF,UAAM,cAAU,yBAAa,MAAM,OAAO;AAC1C,SAAK,aAAa,gBAAgB,OAAO,EAAE,GAAG,OAAO;AACrD,QAAI,IAAI,uEAAuE;AAAA,EACjF,SAASC,MAAU;AACjB,QAAI,MAAM,UAAUA,KAAI,OAAO,EAAE;AACjC,QAAI,KAAK,CAAC;AAAA,EACZ;AACF,CAAC;;;ACnBD,IAAAC,qBAAwB;AAKjB,IAAMC,gBAAe,IAAI,2BAAQ,cAAc;AACtDA,cAAa,YAAY,qCAAqC;AAC9DA,cAAa,SAAS,aAAa,SAAS;AAC5CA,cAAa,SAAS,aAAa,cAAc;AACjDA,cAAa,OAAO,OAAO,SAAiB,iBAAyB;AACnE,QAAM,OAAO,MAAM,UAAU;AAC7B,QAAM,UAAU,cAAc,cAAc,yBAAyB,2BAA2B;AAChG,QAAM,UAAU,KAAK,aAAa,aAAa,OAAO,OAAO,GAAG,OAAO;AACvE,MAAI,IAAI,KAAK,UAAU,SAAS,MAAM,CAAC,CAAC;AAC1C,CAAC;;;ACdD,IAAAC,qBAAwB;AAKjB,IAAMC,kBAAiB,IAAI,2BAAQ,gBAAgB;AAC1DA,gBAAe,YAAY,uCAAuC;AAClEA,gBAAe,SAAS,eAAe,WAAW;AAClDA,gBAAe,SAAS,aAAa,cAAc;AACnDA,gBAAe,OAAO,OAAO,WAAmB,iBAAyB;AACvE,QAAM,OAAO,MAAM,UAAU;AAC7B,QAAM,UAAU,cAAc,cAAc,yBAAyB,6BAA6B;AAClG,QAAM,UAAU,KAAK,aAAa,eAAe,OAAO,SAAS,GAAG,OAAO;AAC3E,MAAI,IAAI,KAAK,UAAU,SAAS,MAAM,CAAC,CAAC;AAC1C,CAAC;;;ALNM,IAAM,eAAe,IAAI,2BAAQ,cAAc;AACtD,aAAa,YAAY,sBAAsB;AAE/C,aAAa,WAAWC,IAAG;AAC3B,aAAa,WAAWC,QAAM;AAC9B,aAAa,WAAWC,gBAAe;AACvC,aAAa,WAAWC,aAAY;AACpC,aAAa,WAAWC,eAAc;AAEtC,aAAa,YAAY,SAAS,eAAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CA0BjC;;;AMnCM,IAAM,WAAW,CAACC,SAAQ,QAAQ,UAAUC,QAAOC,UAASC,cAAa,YAAY;;;ArDL5F,eAAsB,IAAI,MAAgB;AACxC,QAAM,UAAU,IAAI,2BAAQ;AAC5B,UAAQ,KAAK,UAAU,EAAE,YAAY,2CAA2C,EAAE,QAAQ,OAAO;AACjG,aAAW,OAAO,SAAU,SAAQ,WAAW,GAAG;AAClD,SAAO,QAAQ,WAAW,MAAM,EAAE,MAAM,OAAO,CAAC;AAClD;;;AsDJA,IAAI,IAAI,KAAK,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,UAAU;AACxC,MAAI,MAAM,MAAM,WAAW,OAAO,KAAK,CAAC;AACxC,MAAI,KAAK,CAAC;AACZ,CAAC;","names":["import_fs","import_promises","import_path","import_better_sqlite3","import_drizzle_orm","db","import_drizzle_orm","import_drizzle_orm","db","fields","import_drizzle_orm","text","path","children","files","directories","symbols","external_dependencies","files","path","imports","by_id","by_id_and_state","by_path","by_state","insert","search","update","update_many","import_drizzle_orm","by_id","by_path","path","by_state","insert","update","update_many","by_id_and_state","search","directories","by_state","update","import_drizzle_orm","by_state","update","by_id","by_id_and_state","by_state","insert_many","search","update","using_dependency","import_drizzle_orm","insert_many","by_state","update","by_id","by_id_and_state","search","symbols","using_dependency","all","by_id","by_state","insert","search","update","import_drizzle_orm","by_id","by_state","insert","update","all","search","external_dependencies","by_file","del_by_file","insert_many","import_drizzle_orm","insert_many","del_by_file","by_file","insert","import_drizzle_orm","insert","by_symbol","exists","insert","import_drizzle_orm","by_symbol","insert","exists","db","path","ts","dependencies","Database","path","import_commander","import_zod","import_path","import_typescript","import_promises","imports","path","files","import_path","import_typescript","import_typescript","import_path","import_typescript","ts","path","ts","imports","import_typescript","ts","external_imports","import_typescript","ts","meta","import_typescript","ts","meta","import_typescript","ts","symbols","meta","import_typescript","ts","meta","symbols","files","imports","symbols","external_imports","path","ts","imports","import_path","import_typescript","symbols","path","ts","file_symbols","update","import_drizzle_orm","get","search","get","search","set_description","using_dependency","get","search","set_description","get","search","set_description","used_by_file","used_by_symbol","update","path","counts","dedent","update","counts","status","import_commander","counts","import_dedent","import_commander","dedent","symbols","files","directories","import_commander","import_dedent","import_commander","get","import_commander","search","import_fs","import_commander","set_description","err","import_commander","imported_by_file","import_commander","importing_file","import_commander","importing_dependency","files","get","search","set_description","imported_by_file","importing_file","importing_dependency","dedent","import_commander","import_dedent","import_commander","get","import_commander","search","import_fs","import_commander","set_description","err","import_commander","referencing_symbol","import_commander","referenced_by_symbol","import_commander","using_dependency","symbols","get","search","set_description","referencing_symbol","referenced_by_symbol","using_dependency","dedent","import_commander","import_dedent","import_commander","get","import_commander","search","import_fs","import_commander","set_description","err","import_commander","children","import_commander","files","directories","get","search","set_description","children","files","dedent","import_commander","import_dedent","import_commander","get","import_commander","search","import_fs","import_commander","set_description","err","import_commander","used_by_file","import_commander","used_by_symbol","get","search","set_description","used_by_file","used_by_symbol","dedent","update","files","symbols","directories"]}
|