{"version":3,"file":"index.cjs","sources":["../src/vfs/opfsfs.ts","../src/vfs/fetchfs.ts","../src/vfs/index.ts","../src/core/engine.ts","../src/core/manager.ts","../src/engines/base.ts","../src/engines/pdflatex.ts","../src/engines/xelatex.ts","../src/engines/lualatex.ts","../src/engines/bibtexu.ts","../src/engines/biber.ts","../src/engines/makeindex.ts","../src/engines/xdvipdfmx.ts","../src/latexmk/index.ts","../src/synctex/fflate-shim.ts","../src/synctex/index.ts"],"sourcesContent":["/**\n * OPFS-backed VFS — persistent cache for the \"full\" tier and CDN fetches.\n *\n * Browser layout under the OPFS root:\n *   texlive-wasm/\n *     <manifest version>/      (see `version` — caches never span TL builds)\n *       full/                  (unpacked full-tier bundle)\n *         tex/latex/base/article.cls\n *         ...\n *       cdn/                   (cached long-tail fetches, written through\n *                               from FetchFS via OpfsBackend.write())\n *         tex/latex/some-rare/rare.sty\n */\n\nimport type { VfsBackend } from '../core/types';\nimport { safeRelativePath } from '../core/paths';\n\nexport interface OpfsFsOptions {\n  /** Root directory name within OPFS. Default: \"texlive-wasm\". */\n  rootName?: string;\n  /**\n   * Namespace the cache by the TL build it belongs to (the manifest's\n   * `version`). Files cached for one build are not valid for another — and an\n   * unversioned cache is a place for one document's poisoned download to\n   * outlive it. Default: \"unversioned\", which keeps pre-existing caches\n   * readable.\n   */\n  version?: string;\n}\n\n/** VfsBackend plus the write-through hook FetchFS feeds (see vfs/index.ts). */\nexport interface OpfsBackend extends VfsBackend {\n  /** Persist a fetched file into the cdn/ cache tier. Failures are swallowed. */\n  write(tdsPath: string, bytes: Uint8Array): Promise<void>;\n}\n\nexport async function createOpfsFs(opts: OpfsFsOptions = {}): Promise<OpfsBackend> {\n  const rootName = opts.rootName ?? 'texlive-wasm';\n  const version = opts.version ?? 'unversioned';\n  const root = await navigator.storage.getDirectory();\n  // Ensure the top-level dirs exist.\n  const tlRoot = await root.getDirectoryHandle(rootName, { create: true });\n  const versionRoot = await tlRoot.getDirectoryHandle(safeSegment(version), { create: true });\n  const fullDir = await versionRoot.getDirectoryHandle('full', { create: true });\n  const cdnDir = await versionRoot.getDirectoryHandle('cdn', { create: true });\n\n  async function walkTo(\n    dir: FileSystemDirectoryHandle,\n    tdsPath: string,\n    create: boolean,\n  ): Promise<{ dir: FileSystemDirectoryHandle; name: string } | null> {\n    const safe = safeRelativePath(tdsPath);\n    if (!safe) return null;\n    const parts = safe.split('/');\n    let cur: FileSystemDirectoryHandle = dir;\n    for (let i = 0; i < parts.length - 1; i++) {\n      try {\n        cur = await cur.getDirectoryHandle(parts[i]!, { create });\n      } catch {\n        return null;\n      }\n    }\n    return { dir: cur, name: parts[parts.length - 1]! };\n  }\n\n  async function readFrom(\n    dir: FileSystemDirectoryHandle,\n    tdsPath: string,\n  ): Promise<Uint8Array | null> {\n    const loc = await walkTo(dir, tdsPath, false);\n    if (!loc) return null;\n    try {\n      const fh = await loc.dir.getFileHandle(loc.name, { create: false });\n      const file = await fh.getFile();\n      const ab = await file.arrayBuffer();\n      return new Uint8Array(ab);\n    } catch {\n      return null;\n    }\n  }\n\n  return {\n    id: 'opfsfs',\n    async read(tdsPath: string): Promise<Uint8Array | null> {\n      // Check \"full\" first (preloaded full bundle), then the \"cdn\" cache.\n      return (await readFrom(fullDir, tdsPath)) ?? (await readFrom(cdnDir, tdsPath));\n    },\n    async write(tdsPath: string, bytes: Uint8Array): Promise<void> {\n      try {\n        const loc = await walkTo(cdnDir, tdsPath, true);\n        if (!loc) return;\n        const fh = await loc.dir.getFileHandle(loc.name, { create: true });\n        const writable = await fh.createWritable();\n        await writable.write(bytes as unknown as ArrayBufferView<ArrayBuffer>);\n        await writable.close();\n      } catch {\n        // Cache write-through is best-effort; a full or unavailable OPFS\n        // must not fail the read that triggered it.\n      }\n    },\n  };\n}\n\n/** A manifest version reaches us as a string; it must stay one path segment. */\nfunction safeSegment(name: string): string {\n  return name.replace(/[^\\w.-]+/g, '_') || 'unversioned';\n}\n","/**\n * FETCHFS — CDN long-tail backend.\n *\n * On a read miss in higher tiers, asks the CDN. Successful 200 responses are\n * reported via `onFetched` so a cache layer (e.g. OPFS) can write them\n * through — see defaultBackends() in vfs/index.ts.\n */\n\nimport type { VfsBackend } from '../core/types';\nimport { safeRelativePath } from '../core/paths';\n\nexport interface FetchFsOptions {\n  cdnBaseUrl: string;\n  /** Optional callback fired whenever a file is fetched (for cache write-through). */\n  onFetched?: (tdsPath: string, bytes: Uint8Array) => void | Promise<void>;\n  /**\n   * Integrity gate. Given the TDS path and the fetched bytes, returns false to\n   * reject them — the read then reports a miss rather than handing the engine\n   * bytes a compromised CDN chose. See withIntegrity() in vfs/index.ts.\n   */\n  verify?: (tdsPath: string, bytes: Uint8Array) => Promise<boolean> | boolean;\n}\n\nexport function createFetchFs(opts: FetchFsOptions): VfsBackend {\n  const base = opts.cdnBaseUrl.endsWith('/') ? opts.cdnBaseUrl : opts.cdnBaseUrl + '/';\n\n  return {\n    id: 'fetchfs',\n    async read(tdsPath: string): Promise<Uint8Array | null> {\n      // TDS paths come straight out of engine logs; encode each segment and\n      // refuse anything that could step outside the CDN base.\n      const safePath = safeRelativePath(tdsPath);\n      if (!safePath) return null;\n      const url = base + safePath.split('/').map(encodeURIComponent).join('/');\n      // Brotli pre-compression: the CDN serves files with Content-Encoding: br\n      // and the browser decompresses natively. We just fetch the path as-is.\n      const r = await fetch(url);\n      if (r.status === 404) return null;\n      if (!r.ok) throw new Error(`FETCHFS: HTTP ${r.status} for ${tdsPath}`);\n      const buf = new Uint8Array(await r.arrayBuffer());\n      if (opts.verify && !(await opts.verify(safePath, buf))) return null;\n      await opts.onFetched?.(tdsPath, buf);\n      return buf;\n    },\n  };\n}\n","/**\n * VFS layer chain — defaults and helpers.\n *\n * The layer chain is consulted in order on every read; the first non-null\n * answer wins. This lets us put the cheapest backends first (BundleFS, then\n * cached layers, then network).\n */\n\nimport type { EngineConfig, EngineId, VfsBackend } from '../core/types';\nimport type { TexPackagesManifest } from '../core/manifest';\nimport { expectedSha256, loadManifest, sha256Hex } from '../core/manifest';\nimport { createBundleFs } from './bundlefs';\nimport { createOpfsFs } from './opfsfs';\nimport { createFetchFs } from './fetchfs';\n\nexport interface DefaultBackendsOptions {\n  /**\n   * Leave the manifest's core bundle out of the chain. createEngine() sets\n   * this when the engine runs in a worker: the worker builds the BundleFS\n   * itself, so the tree is unpacked once, on the side that actually needs it.\n   */\n  skipManifestBundle?: boolean;\n}\n\n/**\n * Build the default backend chain for an engine instance.\n *\n * Order: BundleFS (in-memory core) → OPFS (when in a browser/PWA) → FETCHFS (CDN fallback).\n *\n * The TauriFS backend is *not* installed by default — the consumer opts in via\n * `withTauriFs(...)` from the `texlive-wasm/tauri` entry. That keeps web\n * consumers from picking up a hard dep on @tauri-apps/plugin-fs.\n */\nexport async function defaultBackends(\n  _id: EngineId,\n  config: EngineConfig,\n  options: DefaultBackendsOptions = {},\n): Promise<VfsBackend[]> {\n  const layers: VfsBackend[] = [];\n\n  // The manifest carries the per-file digests the cache and CDN tiers are\n  // checked against, so it is loaded whenever one of them is in play. A\n  // manifest we cannot read is not fatal — it costs verification, not\n  // function — but it is worth saying out loud.\n  let manifest: TexPackagesManifest | null = null;\n  if (config.manifestUrl) {\n    try {\n      manifest = await loadManifest(config.manifestUrl);\n    } catch (err) {\n      console.warn(\n        `texlive-wasm: could not load manifest ${config.manifestUrl} (${String(err)}); ` +\n          `cached and CDN files will not be integrity-checked`,\n      );\n    }\n  }\n\n  const allowUnverified = config.allowUnverifiedAssets === true;\n\n  // A CDN tier with no manifest to check it against hands the engine whatever\n  // the network returns. That is a deployment mistake, not a runtime mode.\n  if (config.cdnBaseUrl && !manifest && !allowUnverified) {\n    throw new Error(\n      `texlive-wasm: cdnBaseUrl is set but no manifest could be loaded, so CDN files cannot be ` +\n        `integrity-checked. Set manifestUrl (its per-file sha256 is what verifies them), or set ` +\n        `allowUnverifiedAssets: true for development.`,\n    );\n  }\n\n  // BundleFS when a manifest names a core bundle — keeps the engine from\n  // immediately falling through to the network on every read.\n  if (config.manifestUrl && !options.skipManifestBundle) {\n    layers.push(await createBundleFs({ manifestUrl: config.manifestUrl, allowUnverified }));\n  }\n\n  let opfs: Awaited<ReturnType<typeof createOpfsFs>> | null = null;\n  if (isOpfsAvailable()) {\n    opfs = await createOpfsFs(manifest ? { version: manifest.version } : {});\n    // A persistent cache is exactly what an attacker wants to poison: verify\n    // on the way out, so one bad write cannot serve a bad file forever.\n    layers.push(manifest ? withIntegrity(opfs, manifest) : opfs);\n  }\n\n  if (config.cdnBaseUrl) {\n    const cache = opfs;\n    const index = manifest;\n    layers.push(\n      createFetchFs({\n        cdnBaseUrl: config.cdnBaseUrl,\n        // Write-through: CDN hits are persisted into the OPFS cdn/ tier so\n        // the next session reads them locally.\n        ...(cache\n          ? { onFetched: (tdsPath: string, bytes: Uint8Array) => cache.write(tdsPath, bytes) }\n          : {}),\n        // Verified BEFORE the write-through fires, or a poisoned response\n        // would be the thing we cache.\n        ...(index\n          ? { verify: (tdsPath: string, bytes: Uint8Array) => matches(index, tdsPath, bytes) }\n          : {}),\n      }),\n    );\n  }\n\n  return layers;\n}\n\n/**\n * Wrap a backend so every file it serves must hash to what the manifest says.\n * A mismatch is reported as a miss (the next tier answers, or the engine\n * reports the file missing) — never as bytes the engine will interpret.\n *\n * Files the manifest does not list pass through unchecked: the manifest is an\n * index of the TL tree, not an allowlist of everything an app may mount.\n */\nexport function withIntegrity(backend: VfsBackend, manifest: TexPackagesManifest): VfsBackend {\n  const wrapped: VfsBackend = {\n    id: backend.id,\n    async read(tdsPath: string): Promise<Uint8Array | null> {\n      const bytes = await backend.read(tdsPath);\n      if (!bytes) return null;\n      return (await matches(manifest, tdsPath, bytes)) ? bytes : null;\n    },\n  };\n  if (backend.exists) wrapped.exists = (p: string) => backend.exists!(p);\n  if (backend.list) wrapped.list = (p: string) => backend.list!(p);\n  if (backend.init) wrapped.init = () => backend.init!();\n  if (backend.dispose) wrapped.dispose = () => backend.dispose!();\n  return wrapped;\n}\n\nasync function matches(\n  manifest: TexPackagesManifest,\n  tdsPath: string,\n  bytes: Uint8Array,\n): Promise<boolean> {\n  const expected = expectedSha256(manifest, tdsPath.replace(/^\\/+/, ''));\n  if (!expected) return true;\n  const actual = await sha256Hex(bytes);\n  if (actual === expected.toLowerCase()) return true;\n  console.warn(\n    `texlive-wasm: integrity check failed for ${tdsPath} (expected ${expected}, got ${actual}); ` +\n      `discarding those bytes`,\n  );\n  return false;\n}\n\nfunction isOpfsAvailable(): boolean {\n  // OPFS lives on navigator.storage.getDirectory(), available in workers.\n  return (\n    typeof navigator !== 'undefined' &&\n    typeof navigator.storage !== 'undefined' &&\n    typeof navigator.storage.getDirectory === 'function'\n  );\n}\n\nexport { createBundleFs } from './bundlefs';\nexport { createOpfsFs } from './opfsfs';\nexport { createFetchFs } from './fetchfs';\nexport { createTauriFs, isTauri, withTauriFs } from './taurifs';\nexport type { TauriFsOptions } from './taurifs';\n","/**\n * createEngine — public entry point for the low-level API.\n *\n * Spins up a Web Worker per engine instance and proxies all calls via Comlink.\n * The worker loads the engine .wasm, sets up the FS with the configured VFS\n * backend chain, and exposes a typed RPC surface.\n */\n\nimport * as Comlink from 'comlink';\nimport type {\n  EngineConfig,\n  EngineHandle,\n  EngineId,\n  RunOptions,\n  RunResult,\n  VfsBackend,\n} from './types';\nimport { defaultBackends } from '../vfs';\nimport type { BackendHost, BackendMeta, WorkerApi } from './worker';\n\nconst DEFAULT_CONFIG: Required<Pick<EngineConfig, 'useWorker' | 'verbose'>> = {\n  useWorker: typeof Worker !== 'undefined',\n  verbose: 'silent',\n};\n\n/** How long dispose() waits for the worker to acknowledge before terminating it. */\nconst DISPOSE_GRACE_MS = 2000;\n\nexport async function createEngine(id: EngineId, config: EngineConfig = {}): Promise<EngineHandle> {\n  const merged: EngineConfig = { ...DEFAULT_CONFIG, ...config };\n  // With a worker, the manifest's core bundle is unpacked inside it (see\n  // WorkerInitOptions.bundleFromManifest) — building it out here would keep a\n  // second copy of the whole TeX tree on the main thread and then trickle it\n  // across the RPC boundary file by file.\n  const bundleInWorker = merged.useWorker === true && !merged.vfs && !!merged.manifestUrl;\n  const backends: VfsBackend[] =\n    merged.vfs ?? (await defaultBackends(id, merged, { skipManifestBundle: bundleInWorker }));\n\n  if (merged.useWorker) {\n    return createWorkerEngine(id, merged, backends, bundleInWorker);\n  }\n  return createInProcessEngine(id, merged, backends);\n}\n\n/**\n * Comlink only converts a value into a live proxy when it is a *top-level*\n * argument or return value — proxy markers nested inside a plain object are\n * structured-cloned instead (and objects with function properties throw\n * DataCloneError). So the backend chain crosses the worker boundary as ONE\n * top-level proxied \"host\" object that dispatches by index, plus a cloneable\n * capability list so the worker knows which optional methods exist.\n */\nfunction makeBackendHost(backends: VfsBackend[]): BackendHost {\n  return {\n    async read(i: number, tdsPath: string): Promise<Uint8Array | null> {\n      return (await backends[i]!.read(tdsPath)) ?? null;\n    },\n    async exists(i: number, tdsPath: string): Promise<boolean> {\n      const b = backends[i]!;\n      if (b.exists) return b.exists(tdsPath);\n      return (await b.read(tdsPath)) != null;\n    },\n    async list(i: number, tdsPrefix: string): Promise<string[]> {\n      const b = backends[i]!;\n      return b.list ? await b.list(tdsPrefix) : [];\n    },\n    async init(i: number): Promise<void> {\n      await backends[i]!.init?.();\n    },\n    async dispose(i: number): Promise<void> {\n      await backends[i]!.dispose?.();\n    },\n  };\n}\n\nasync function createWorkerEngine(\n  id: EngineId,\n  config: EngineConfig,\n  backends: VfsBackend[],\n  bundleFromManifest = false,\n): Promise<EngineHandle> {\n  // Vite requires Worker options to be statically analyzable; keep the object literal inline.\n  const worker = new Worker(new URL('./worker.ts', import.meta.url), {\n    type: 'module',\n    name: 'texlive-wasm-worker',\n  });\n  // Comlink never rejects on worker load failure — surface it ourselves so\n  // createEngine() rejects instead of hanging forever.\n  const workerFailed = new Promise<never>((_, reject) => {\n    worker.addEventListener('error', (event) => {\n      const msg = (event as ErrorEvent).message || 'worker failed to load';\n      reject(new Error(`texlive-wasm: engine worker error: ${msg}`));\n    });\n  });\n  const api = Comlink.wrap<WorkerApi>(worker);\n\n  // config.vfs holds objects with methods — not structured-cloneable. The\n  // worker never needs it (it gets the host proxy instead), so strip it.\n  const { vfs: _vfs, ...cloneableConfig } = config;\n  const backendMeta: BackendMeta[] = backends.map((b) => ({\n    id: b.id,\n    hasList: typeof b.list === 'function',\n    hasInit: typeof b.init === 'function',\n    hasDispose: typeof b.dispose === 'function',\n  }));\n\n  try {\n    await Promise.race([\n      api.init(\n        {\n          engineId: id,\n          config: cloneableConfig,\n          backendMeta,\n          ...(bundleFromManifest ? { bundleFromManifest: true } : {}),\n        },\n        Comlink.proxy(makeBackendHost(backends)),\n      ),\n      workerFailed,\n    ]);\n  } catch (err) {\n    worker.terminate();\n    throw err;\n  }\n\n  let ready = true;\n  // Serialize run() calls: the worker executes callMain synchronously and\n  // interleaved lazy-fetch awaits from two concurrent runs would corrupt\n  // each other's /project state.\n  let queue: Promise<unknown> = Promise.resolve();\n\n  // Killing the worker leaves the in-flight Comlink call unsettled forever —\n  // its reply can never arrive. Every path that terminates the worker settles\n  // this instead, so a caller awaiting run() gets an error rather than a hang.\n  let killRun: (err: Error) => void = () => {};\n  const killed = new Promise<never>((_, reject) => {\n    killRun = reject;\n  });\n  killed.catch(() => {}); // nobody races it while the worker is healthy\n\n  const terminate = (reason: string): void => {\n    ready = false;\n    worker.terminate();\n    killRun(new Error(`Engine ${id}: ${reason}`));\n  };\n\n  const doRun = async (options: RunOptions): Promise<RunResult> => {\n    if (!ready) throw new Error(`Engine ${id} has been disposed`);\n    // An AbortSignal is not structured-cloneable — it stays on this side.\n    const { signal, ...runOptions } = options;\n    if (signal?.aborted) throw new Error(`Engine ${id}: run aborted before it started`);\n\n    let timer: ReturnType<typeof setTimeout> | undefined;\n    // callMain is synchronous inside the worker, so neither a timeout nor an\n    // abort can interrupt it — the only way to stop the engine is to kill the\n    // worker, which makes the handle unusable afterwards.\n    const onAbort = () => terminate('run aborted; worker terminated');\n    signal?.addEventListener('abort', onAbort, { once: true });\n    if (options.timeoutMs !== undefined) {\n      timer = setTimeout(\n        () => terminate(`run exceeded timeoutMs=${options.timeoutMs}; worker terminated`),\n        options.timeoutMs,\n      );\n    }\n    try {\n      return await Promise.race([api.run(runOptions), killed]);\n    } finally {\n      clearTimeout(timer);\n      signal?.removeEventListener('abort', onAbort);\n    }\n  };\n\n  return {\n    id,\n    config,\n    async run(options: RunOptions): Promise<RunResult> {\n      const result = queue.then(() => doRun(options));\n      queue = result.catch(() => {});\n      return result;\n    },\n    async dispose(): Promise<void> {\n      if (!ready) return;\n      ready = false;\n      try {\n        // A worker stuck in synchronous callMain never answers — don't let\n        // dispose() hang on it.\n        await Promise.race([\n          api.dispose(),\n          new Promise((resolve) => setTimeout(resolve, DISPOSE_GRACE_MS)),\n        ]);\n      } finally {\n        worker.terminate();\n        killRun(new Error(`Engine ${id} was disposed while a run was in flight`));\n      }\n    },\n    isReady(): boolean {\n      return ready;\n    },\n  };\n}\n\nasync function createInProcessEngine(\n  id: EngineId,\n  _config: EngineConfig,\n  _backends: VfsBackend[],\n): Promise<EngineHandle> {\n  // TODO(phase 3): direct in-process implementation for Node/WASI. The worker\n  // path is the primary one; this would be a thin shim that imports the same\n  // engine-loading code without spawning a worker.\n  //\n  // Node has no global Worker either, so \"pass useWorker: true\" is not a\n  // workaround — there is no way to run an engine under plain Node today.\n  throw new Error(\n    `texlive-wasm: running ${id} outside a Web Worker (Node / WASI) is not implemented yet. ` +\n      `The engines currently require a browser, Tauri WebView, or another Worker-capable host.`,\n  );\n}\n","/**\n * Engine lifecycle manager: lazy, memoized handles with an LRU cap.\n *\n * Every engine worker holds its own copy of the TDS in memory (the map it\n * drains at init plus the materialization during runs), so keeping all seven\n * engines alive is expensive — on mobile WebViews it is fatal. The manager\n * keeps at most `maxLiveEngines` workers alive, evicting the least-recently-\n * used idle one before creating the next, and awaiting its disposal so the\n * old and new engine never hold their trees at the same time.\n *\n * \"Idle\" means nothing is using the engine: handles are pinned for the\n * duration of every run() and for the whole of a `withEngines()` scope, so a\n * compile can never have its engine — or a helper it is about to need —\n * evicted underneath it. When everything is pinned the cap is exceeded rather\n * than deadlocking: a latexmk pipeline legitimately needs tex + bibtex +\n * makeindex + xdvipdfmx alive together, and blocking it to satisfy a memory\n * cap would hang the compile instead of slowing it.\n */\n\nimport { createEngine } from './engine';\nimport type { EngineConfig, EngineHandle, EngineId, RunOptions, RunResult } from './types';\n\nexport interface EngineManagerOptions {\n  /** Builds the EngineConfig for an engine the first time it is needed. */\n  config: (id: EngineId) => EngineConfig;\n  /**\n   * Maximum live engine workers. Default: 3 — a desktop-browser trade-off.\n   * Mobile WebViews (Tauri iOS/Android) should use 1: one live worker is\n   * roughly \"TDS bytes + wasm heap\" of resident memory.\n   */\n  maxLiveEngines?: number;\n  /** Diagnostics: an idle engine was evicted to make room. */\n  onEvict?: (id: EngineId) => void;\n  /** Diagnostics: a new engine worker starts loading. */\n  onLoad?: (id: EngineId) => void;\n}\n\nexport interface EngineManager {\n  /**\n   * Lazy, memoized handle; marks the engine most-recently-used. The handle is\n   * leased: it pins its engine for the duration of each run(), and its\n   * dispose() goes through the manager so the slot cannot outlive the worker.\n   */\n  engine(id: EngineId): Promise<EngineHandle>;\n  /**\n   * Acquire several engines and pin them for the duration of `fn` — a\n   * multi-engine pipeline (latexmk: tex + bibtex + makeindex + xdvipdfmx)\n   * must not have a helper evicted mid-run by another compile.\n   */\n  withEngines<T>(\n    ids: EngineId[],\n    fn: (handles: Map<EngineId, EngineHandle>) => Promise<T>,\n  ): Promise<T>;\n  /** Engines currently alive (loaded or still loading). */\n  live(): EngineId[];\n  /** Dispose one engine, or every engine when no id is given. */\n  dispose(id?: EngineId): Promise<void>;\n}\n\ninterface Slot {\n  /** The raw handle from createEngine. */\n  promise: Promise<EngineHandle>;\n  /** The leased view handed to callers — stable per slot. */\n  leased: Promise<EngineHandle>;\n  /** The resolved handle, once it exists — isReady() has to answer synchronously. */\n  current: EngineHandle | null;\n  pins: number;\n  lastUsed: number;\n}\n\n/** A slot that never loaded is handled by `forget`; this just keeps it unhandled-free. */\nfunction noop(): void {}\n\nexport function createEngineManager(options: EngineManagerOptions): EngineManager {\n  const maxLive = Math.max(1, options.maxLiveEngines ?? 3);\n  const slots = new Map<EngineId, Slot>();\n  let clock = 0;\n\n  function get(id: EngineId): Slot {\n    const existing = slots.get(id);\n    if (existing) {\n      existing.lastUsed = ++clock;\n      return existing;\n    }\n    // Synchronous slot creation is load-bearing: withEngines() pins its slots\n    // before it awaits anything, so a concurrent compile cannot evict a\n    // handle that is still being constructed.\n    const evicted = evictIdle();\n    options.onLoad?.(id);\n    const promise = evicted.then(() => createEngine(id, options.config(id)));\n    const slot: Slot = {\n      promise,\n      leased: promise.then((handle) => lease(id, handle)),\n      current: null,\n      pins: 0,\n      lastUsed: ++clock,\n    };\n    slots.set(id, slot);\n    promise.then((handle) => {\n      slot.current = handle;\n    }, noop);\n    // A failed init must not poison the slot forever.\n    const forget = () => {\n      if (slots.get(id) === slot) slots.delete(id);\n    };\n    promise.catch(forget);\n    slot.leased.catch(forget);\n    return slot;\n  }\n\n  /**\n   * Free a slot for the engine about to be created. The returned promise\n   * settles only once the victim's worker is actually gone — starting the new\n   * engine before that would put both trees in memory at once, which is the\n   * peak the cap exists to prevent.\n   */\n  function evictIdle(): Promise<void> {\n    if (slots.size < maxLive) return Promise.resolve();\n    let victim: EngineId | null = null;\n    let oldest = Infinity;\n    for (const [id, slot] of slots) {\n      if (slot.pins === 0 && slot.lastUsed < oldest) {\n        oldest = slot.lastUsed;\n        victim = id;\n      }\n    }\n    if (!victim) return Promise.resolve(); // everything is pinned — allow the extra engine\n    const slot = slots.get(victim)!;\n    slots.delete(victim);\n    options.onEvict?.(victim);\n    return slot.promise.then(\n      (h) => h.dispose(),\n      () => {}, // a slot that never loaded has nothing to dispose\n    );\n  }\n\n  /**\n   * Wrap a handle so that using it keeps it alive. Without this an engine\n   * obtained from engine() is unpinned while it runs, so a concurrent compile\n   * can evict it mid-run — and terminating a worker mid-callMain is exactly\n   * the case that leaves the caller's run() promise unsettled.\n   *\n   * The lease is on the engine ID, not on one worker: it re-acquires the slot\n   * on every run and pins it BEFORE awaiting anything. So a handle whose worker\n   * was evicted between two compiles transparently gets a fresh one, instead of\n   * throwing \"has been disposed\" at a caller who did nothing wrong.\n   */\n  function lease(id: EngineId, handle: EngineHandle): EngineHandle {\n    return {\n      id: handle.id,\n      config: handle.config,\n      async run(runOptions: RunOptions): Promise<RunResult> {\n        const slot = get(id);\n        slot.pins++;\n        try {\n          const live = await slot.promise;\n          return await live.run(runOptions);\n        } finally {\n          slot.pins--;\n        }\n      },\n      // Disposing the worker behind the manager's back would leave the slot\n      // handing out a dead handle.\n      dispose: () => manager.dispose(id),\n      // Answer for the engine the next run() would use, not for the worker\n      // this lease was minted around: that one may have been evicted since,\n      // and run() would transparently reload it. Reporting the dead worker\n      // would have a leased handle claim \"not ready\" forever after an\n      // eviction it is designed to survive.\n      isReady: () => slots.get(id)?.current?.isReady() ?? false,\n    };\n  }\n\n  const manager: EngineManager = {\n    engine: (id) => get(id).leased,\n\n    async withEngines(ids, fn) {\n      // Pin before awaiting anything so a concurrent compile can't evict a\n      // handle we are still constructing.\n      const pinned = ids.map((id) => {\n        const slot = get(id);\n        slot.pins++;\n        return slot;\n      });\n      try {\n        const handles = new Map<EngineId, EngineHandle>();\n        for (let i = 0; i < ids.length; i++) {\n          handles.set(ids[i]!, await pinned[i]!.leased);\n        }\n        return await fn(handles);\n      } finally {\n        for (const slot of pinned) slot.pins--;\n      }\n    },\n\n    live: () => [...slots.keys()],\n\n    async dispose(id) {\n      const targets = id ? [id] : [...slots.keys()];\n      await Promise.allSettled(\n        targets.map((t) => {\n          const slot = slots.get(t);\n          if (!slot) return Promise.resolve();\n          slots.delete(t);\n          return slot.promise.then((h) => h.dispose());\n        }),\n      );\n    },\n  };\n\n  return manager;\n}\n","/**\n * Shared base for the typed engine wrappers.\n *\n * The wrapper classes are intentionally thin — they format argv, set sensible\n * defaults, and forward to engine.run(). Multi-pass orchestration lives in\n * `latexmk`, not here.\n */\n\nimport { createEngine } from '../core/engine';\nimport type {\n  EngineConfig,\n  EngineHandle,\n  EngineId,\n  FileInput,\n  RunOptions,\n  RunResult,\n} from '../core/types';\n\nexport interface EngineWrapperOptions extends Omit<EngineConfig, 'useWorker'> {\n  /** Reuse an existing handle instead of creating a new one. */\n  engine?: EngineHandle;\n  /** Pass to the underlying createEngine() if no handle is supplied. */\n  useWorker?: boolean;\n}\n\n/**\n * Wall-clock ceiling for one engine invocation when the caller names none.\n * A runaway `\\def\\x{\\x}\\x` otherwise spins the worker forever, and on a\n * phone that is a dead app rather than a failed compile. Generous enough for\n * a large document on slow mobile hardware; pass `timeoutMs: 0` to opt out.\n */\nexport const DEFAULT_RUN_TIMEOUT_MS = 300_000;\n\n/** Per-invocation limits every typed wrapper accepts. */\nexport interface RunLimits {\n  /**\n   * Wall-clock ceiling in ms. Default: DEFAULT_RUN_TIMEOUT_MS. `0` disables\n   * it. Enforcing it terminates the worker, so the handle (and any wrapper\n   * that borrowed it) is unusable afterwards.\n   */\n  timeoutMs?: number;\n  /** Cancels the run — same worker-terminating semantics as `timeoutMs`. */\n  signal?: AbortSignal;\n}\n\n/** Pick just the limits out of a wrapper's option bag (exactOptionalPropertyTypes). */\nexport function limitsOf(options: RunLimits): RunLimits {\n  return {\n    ...(options.timeoutMs !== undefined ? { timeoutMs: options.timeoutMs } : {}),\n    ...(options.signal !== undefined ? { signal: options.signal } : {}),\n  };\n}\n\nexport abstract class BaseEngineWrapper {\n  protected abstract readonly engineId: EngineId;\n  protected handle: EngineHandle | null = null;\n\n  constructor(protected options: EngineWrapperOptions = {}) {\n    if (options.engine) this.handle = options.engine;\n  }\n\n  protected async ensureHandle(): Promise<EngineHandle> {\n    if (this.handle) return this.handle;\n    const { engine: _ignored, ...config } = this.options;\n    void _ignored;\n    this.handle = await createEngine(this.engineId, config);\n    return this.handle;\n  }\n\n  /** Drop the worker if this wrapper owns one. */\n  async dispose(): Promise<void> {\n    // Only dispose if we created the handle ourselves.\n    if (this.handle && !this.options.engine) {\n      await this.handle.dispose();\n      this.handle = null;\n    }\n  }\n\n  protected async runRaw(\n    args: string[],\n    files: FileInput[],\n    extra: RunLimits & { cwd?: string; env?: Record<string, string> } = {},\n  ): Promise<RunResult> {\n    const handle = await this.ensureHandle();\n    const opts: RunOptions = {\n      args,\n      files,\n      cwd: extra.cwd ?? '/project',\n    };\n    // 0 means \"no ceiling\"; undefined means \"the caller did not think about\n    // it\", which is exactly when a default belongs.\n    const timeoutMs = extra.timeoutMs ?? DEFAULT_RUN_TIMEOUT_MS;\n    if (timeoutMs > 0) opts.timeoutMs = timeoutMs;\n    if (extra.signal !== undefined) opts.signal = extra.signal;\n    if (extra.env !== undefined) opts.env = extra.env;\n    return handle.run(opts);\n  }\n}\n","import { BaseEngineWrapper, limitsOf, type RunLimits } from './base';\nimport type { EngineId, FileInput, RunResult } from '../core/types';\n\nexport interface PdfLatexCompileOptions extends RunLimits {\n  /** Main .tex file path (relative to /project). */\n  mainTex: string;\n  /** Files to drop into /project before the engine runs. */\n  files?: FileInput[];\n  /** --interaction= value. Default: 'nonstopmode'. */\n  interaction?: 'nonstopmode' | 'batchmode' | 'errorstopmode' | 'scrollmode';\n  /** Output format. Default: 'pdf'. */\n  outputFormat?: 'pdf' | 'dvi';\n  /** Halt the engine on the first error. Default: true. */\n  haltOnError?: boolean;\n  /** Pass extra raw arguments verbatim. */\n  extraArgs?: string[];\n}\n\nexport class PdfLatex extends BaseEngineWrapper {\n  protected readonly engineId: EngineId = 'pdflatex';\n\n  async compile(options: PdfLatexCompileOptions): Promise<RunResult> {\n    const args: string[] = [\n      '--no-shell-escape',\n      `--interaction=${options.interaction ?? 'nonstopmode'}`,\n      ...(options.haltOnError !== false ? ['--halt-on-error'] : []),\n      `--output-format=${options.outputFormat ?? 'pdf'}`,\n      ...(options.extraArgs ?? []),\n      options.mainTex,\n    ];\n    return this.runRaw(args, options.files ?? [], limitsOf(options));\n  }\n}\n","import { BaseEngineWrapper, limitsOf, type RunLimits } from './base';\nimport type { EngineId, FileInput, RunResult } from '../core/types';\n\nexport interface XeLatexCompileOptions extends RunLimits {\n  mainTex: string;\n  files?: FileInput[];\n  interaction?: 'nonstopmode' | 'batchmode' | 'errorstopmode' | 'scrollmode';\n  /**\n   * XeTeX writes an `.xdv` intermediate and normally shells out to\n   * xdvipdfmx for the PDF — but the WASM build cannot spawn processes\n   * (no popen), so that driver mode is unavailable. Default: true (keep\n   * the .xdv; run the separate Xdvipdfmx engine on it — `latexmk` does\n   * this automatically). Setting false is only useful for native-ish\n   * runtimes and will fail in the browser/WASI.\n   */\n  noPdf?: boolean;\n  haltOnError?: boolean;\n  extraArgs?: string[];\n}\n\nexport class XeLatex extends BaseEngineWrapper {\n  protected readonly engineId: EngineId = 'xelatex';\n\n  async compile(options: XeLatexCompileOptions): Promise<RunResult> {\n    const args: string[] = [\n      '--no-shell-escape',\n      `--interaction=${options.interaction ?? 'nonstopmode'}`,\n      ...(options.haltOnError !== false ? ['--halt-on-error'] : []),\n      ...(options.noPdf !== false ? ['--no-pdf'] : []),\n      ...(options.extraArgs ?? []),\n      options.mainTex,\n    ];\n    return this.runRaw(args, options.files ?? [], limitsOf(options));\n  }\n}\n","import { BaseEngineWrapper, limitsOf, type RunLimits } from './base';\nimport type { EngineId, FileInput, RunResult } from '../core/types';\n\nexport interface LuaLatexCompileOptions extends RunLimits {\n  mainTex: string;\n  files?: FileInput[];\n  interaction?: 'nonstopmode' | 'batchmode' | 'errorstopmode' | 'scrollmode';\n  haltOnError?: boolean;\n  /** Disable luasocket. We default to true since the WASM build has no real network. */\n  noSocket?: boolean;\n  extraArgs?: string[];\n}\n\nexport class LuaLatex extends BaseEngineWrapper {\n  protected readonly engineId: EngineId = 'lualatex';\n\n  async compile(options: LuaLatexCompileOptions): Promise<RunResult> {\n    const args: string[] = [\n      '--no-shell-escape',\n      `--interaction=${options.interaction ?? 'nonstopmode'}`,\n      ...(options.haltOnError !== false ? ['--halt-on-error'] : []),\n      ...(options.noSocket !== false ? ['--nosocket'] : []),\n      ...(options.extraArgs ?? []),\n      options.mainTex,\n    ];\n    return this.runRaw(args, options.files ?? [], limitsOf(options));\n  }\n}\n","import { BaseEngineWrapper, limitsOf, type RunLimits } from './base';\nimport type { EngineId, FileInput, RunResult } from '../core/types';\n\nexport interface BibtexuOptions extends RunLimits {\n  /** Aux file path (without the .aux extension is fine). */\n  auxFile: string;\n  files?: FileInput[];\n  /**\n   * Extra raw arguments. Note: bibtexu is Unicode-native (no flag needed);\n   * its UTF-8 build compiles the bibtex8-style --8bit switch out entirely.\n   * Useful knobs: --min-crossrefs=N, --language, --location.\n   */\n  extraArgs?: string[];\n}\n\nexport class Bibtexu extends BaseEngineWrapper {\n  protected readonly engineId: EngineId = 'bibtexu';\n\n  async run(options: BibtexuOptions): Promise<RunResult> {\n    const args: string[] = [...(options.extraArgs ?? []), options.auxFile];\n    return this.runRaw(args, options.files ?? [], limitsOf(options));\n  }\n}\n","import { BaseEngineWrapper, limitsOf, type RunLimits } from './base';\nimport type { EngineId, FileInput, RunResult } from '../core/types';\n\nexport interface BiberOptions extends RunLimits {\n  /** Jobname — the `.bcf` basename, with or without the extension. */\n  jobname: string;\n  /** Project files; must include `<jobname>.bcf` and the `.bib` sources. */\n  files?: FileInput[];\n  /** Extra biber arguments (e.g. `--isbn-normalise`). */\n  extraArgs?: string[];\n}\n\n/**\n * biber — the biblatex backend, i.e. Perl 5.42 + biber 2.19 compiled to\n * wasm. The engine artifact is `biber.wasm` and its VFS is\n * `biber-vfs.tar.gz` (pass it as `EngineConfig.bundleUrl`); the VFS is\n * mounted at the filesystem ROOT (/perl, /biber), not under /texmf-dist.\n *\n * The wasm main() is the Perl interpreter: argv runs the bundled biber\n * script from the VFS. `--noconf` skips config-file discovery (there is no\n * home directory worth searching), and biber reads `<jobname>.bcf` from\n * the working directory, writing `<jobname>.bbl`/`.blg` beside it.\n *\n * The shipped biber version is LOCKSTEPPED to the TDS biblatex version\n * (biblatex validates the .bbl format version and biber validates the\n * .bcf version — a mismatched pair refuses to run).\n */\nexport class Biber extends BaseEngineWrapper {\n  protected readonly engineId: EngineId = 'biber';\n\n  async run(options: BiberOptions): Promise<RunResult> {\n    const jobname = options.jobname.replace(/\\.bcf$/i, '');\n    const args = ['/biber/bin/biber', '--noconf', ...(options.extraArgs ?? []), jobname];\n    return this.runRaw(args, options.files ?? [], limitsOf(options));\n  }\n}\n","import { BaseEngineWrapper, limitsOf, type RunLimits } from './base';\nimport type { EngineId, FileInput, RunResult } from '../core/types';\n\nexport interface MakeindexOptions extends RunLimits {\n  /** .idx file path. */\n  idxFile: string;\n  files?: FileInput[];\n  /** -s style file. */\n  style?: string;\n  /** -o output file. */\n  output?: string;\n  extraArgs?: string[];\n}\n\nexport class Makeindex extends BaseEngineWrapper {\n  protected readonly engineId: EngineId = 'makeindex';\n\n  async run(options: MakeindexOptions): Promise<RunResult> {\n    const args: string[] = [\n      ...(options.style ? ['-s', options.style] : []),\n      ...(options.output ? ['-o', options.output] : []),\n      ...(options.extraArgs ?? []),\n      options.idxFile,\n    ];\n    return this.runRaw(args, options.files ?? [], limitsOf(options));\n  }\n}\n","import { BaseEngineWrapper, limitsOf, type RunLimits } from './base';\nimport type { EngineId, FileInput, RunResult } from '../core/types';\n\nexport interface XdvipdfmxOptions extends RunLimits {\n  /** Input .xdv path. */\n  xdv: string;\n  /** Output .pdf path. */\n  pdf: string;\n  files?: FileInput[];\n  extraArgs?: string[];\n}\n\nexport class Xdvipdfmx extends BaseEngineWrapper {\n  protected readonly engineId: EngineId = 'xdvipdfmx';\n\n  async run(options: XdvipdfmxOptions): Promise<RunResult> {\n    const args: string[] = ['-o', options.pdf, ...(options.extraArgs ?? []), options.xdv];\n    return this.runRaw(args, options.files ?? [], limitsOf(options));\n  }\n}\n","/**\n * latexmk-style driver — multi-pass orchestration.\n *\n * Re-implements the small subset of latexmk's logic we actually need:\n *   1. Run the TeX engine.\n *   2. If `bibtex: 'auto'` and the document contains classic\n *      `\\bibliography{…}` — or uses biblatex with `backend=bibtex` — run\n *      bibtexu against the .aux (with biblatex's required `--wolfgang`\n *      capacity mode in the latter case). biblatex documents on the\n *      default biber backend are left alone until biber.wasm ships.\n *   3. If `makeindex: 'auto'` and an .idx was produced (or changed), run\n *      makeindex.\n *   4. Re-run the TeX engine until `.aux` stabilizes (max 4 passes) and no\n *      \"Rerun to get cross-references right\" message appears in the log.\n *   5. For xelatex, run xdvipdfmx on the resulting .xdv.\n *   6. Collect outputs (.pdf, .synctex.gz, .log).\n *\n * Each engine runs in its own worker with an isolated filesystem that is\n * wiped on every run, so the accumulated project state (sources + generated\n * .aux/.bbl/.idx/.ind/.xdv) is re-materialized into every invocation.\n *\n * Single source of truth for the compile pipeline. Engine wrappers (PdfLatex,\n * XeLatex, LuaLatex) handle individual invocations.\n */\n\nimport type {\n  CompileResult,\n  EngineConfig,\n  EngineHandle,\n  EngineId,\n  FileInput,\n  LogEntry,\n  RunResult,\n} from '../core/types';\nimport type { RunLimits } from '../engines/base';\nimport { PdfLatex } from '../engines/pdflatex';\nimport { XeLatex } from '../engines/xelatex';\nimport { LuaLatex } from '../engines/lualatex';\nimport { Bibtexu } from '../engines/bibtexu';\nimport { Biber } from '../engines/biber';\nimport { Makeindex } from '../engines/makeindex';\nimport { Xdvipdfmx } from '../engines/xdvipdfmx';\n\nexport type LatexmkEngine = 'pdflatex' | 'xelatex' | 'lualatex';\n\nexport interface LatexmkOptions {\n  engine: LatexmkEngine;\n  mainTex: string;\n  files: FileInput[];\n  /**\n   * How to build the engines this driver needs. Every engine is a separate\n   * wasm artifact, so at minimum each needs its `enginePath`; pass one config\n   * for all of them, or a factory to vary it per engine:\n   *\n   *     engineConfig: (id) => ({ enginePath: `/texlive-wasm/${id}.wasm`, bundleUrl })\n   *\n   * Engines supplied via `handles` are used as-is and ignore this.\n   */\n  engineConfig?: EngineConfig | ((id: EngineId) => EngineConfig);\n  /** 'auto' (default) inspects the source; true forces; false skips. */\n  bibtex?: boolean | 'auto';\n  /**\n   * biber for default-backend biblatex documents. 'auto' (default) runs it\n   * when the sources load biblatex without `backend=bibtex`. Requires a\n   * biber engine handle (or enginePath config) — the artifact is optional\n   * and larger than the others (~10 MB + its VFS bundle).\n   */\n  biber?: boolean | 'auto';\n  makeindex?: boolean | 'auto';\n  /**\n   * Re-run for cross-refs/TOC. 'auto' (default) stops when .aux stabilizes;\n   * false forces a single pass; { maxPasses } caps the loop.\n   */\n  rerun?: boolean | 'auto' | { maxPasses: number };\n  /** Pass -synctex=1 so the engine emits a .synctex.gz. Default: false. */\n  synctex?: boolean;\n  /**\n   * Deadline for the WHOLE pipeline, in ms — every pass and every helper\n   * shares it, so a document that loops forever cannot outlive it by running\n   * one more pass. Default: none (each individual invocation still carries\n   * the wrapper default, see engines/base DEFAULT_RUN_TIMEOUT_MS).\n   * Enforcing it terminates the engine worker.\n   */\n  timeoutMs?: number;\n  /** Cancels the pipeline — same worker-terminating semantics as `timeoutMs`. */\n  signal?: AbortSignal;\n  /** Verbosity forwarded to engines this driver creates. */\n  verbose?: 'silent' | 'info' | 'debug';\n  /**\n   * Engines to reuse instead of letting this driver build them from\n   * `engineConfig` — e.g. handles kept alive by an EngineManager.\n   */\n  handles?: {\n    tex?: EngineHandle;\n    bibtex?: EngineHandle;\n    biber?: EngineHandle;\n    makeindex?: EngineHandle;\n    xdvipdfmx?: EngineHandle;\n  };\n}\n\nexport interface LatexmkResult extends CompileResult {\n  /** Number of TeX engine passes actually run. */\n  passes: number;\n}\n\nconst RERUN_PATTERNS = [\n  /Rerun to get cross-references right/,\n  /Rerun to get citations correct/,\n  /Label\\(s\\) may have changed/,\n  /No file [^.]+\\.toc/,\n  /Package rerunfilecheck Warning/,\n  // biblatex's generic rerun request (it settles labels/backrefs late).\n  /Please rerun LaTeX/,\n  /Please \\(re\\)run Biber/,\n];\n\nconst DEFAULT_MAX_PASSES = 4;\n// biblatex needs an extra settling pass: tex → bibtex → tex → tex is the\n// common case, and backref/label passes can add one more.\nconst BIBLATEX_MAX_PASSES = 5;\n\nexport async function latexmk(opts: LatexmkOptions): Promise<LatexmkResult> {\n  const stripExt = (p: string) => p.replace(/\\.tex$/i, '');\n  // TeX writes all outputs into the cwd under the jobname (= input basename),\n  // even when mainTex lives in a subdirectory — key everything by basename.\n  const base = stripExt(opts.mainTex).split('/').pop()!;\n  const auxPath = `${base}.aux`;\n  const bcfPath = `${base}.bcf`;\n  const idxPath = `${base}.idx`;\n  const xdvPath = `${base}.xdv`;\n  const pdfPath = `${base}.pdf`;\n  const logPath = `${base}.log`;\n  const synctexPath = `${base}.synctex.gz`;\n\n  const logs: LogEntry[] = [];\n  const isXetex = opts.engine === 'xelatex';\n\n  const biblatexMode = usesBiblatex(opts.files);\n\n  const rerunMode = opts.rerun ?? 'auto';\n  const maxPasses =\n    rerunMode === false\n      ? 1\n      : typeof rerunMode === 'object'\n        ? Math.max(1, rerunMode.maxPasses)\n        : biblatexMode\n          ? BIBLATEX_MAX_PASSES\n          : DEFAULT_MAX_PASSES;\n\n  // Detect bibtex/biber/makeindex from sources if 'auto'.\n  const needBibtex = resolveAuto(opts.bibtex, () => detectBibtex(opts.files, biblatexMode));\n  // biber serves default-backend biblatex docs; mutually exclusive with the\n  // bibtex path (backend=bibtex routes through bibtexu instead).\n  const needBiber =\n    !needBibtex &&\n    resolveAuto(opts.biber, () => biblatexMode && !biblatexBackendIsBibtex(opts.files));\n  const needMakeindex = resolveAuto(opts.makeindex, () => detectMakeindex(opts.files));\n\n  const texExtraArgs = opts.synctex ? ['-synctex=1'] : [];\n\n  let lastAux: string | null = null;\n  let lastBcf: string | null = null;\n  let lastIdx: string | null = null;\n  let pass = 0;\n  let exitCode = 0;\n  let outputs = new Map<string, Uint8Array>();\n\n  // Everything the next engine invocation needs on disk: the caller's\n  // sources overlaid with all generated files so far (fresh .aux/.bbl/.ind\n  // win over any same-named input).\n  const materialize = (): FileInput[] => {\n    const merged = new Map<string, FileInput>();\n    for (const f of opts.files) merged.set(f.path.replace(/^\\/+/, ''), f);\n    for (const [path, content] of outputs) merged.set(path, { path, content });\n    return [...merged.values()];\n  };\n\n  const tex = buildTexEngine(opts);\n  // Helper wrappers are created lazily, at most once, and disposed at the\n  // end (dispose() is a no-op for wrappers borrowing a caller handle).\n  let bibtexWrapper: Bibtexu | null = null;\n  let biberWrapper: Biber | null = null;\n  let makeindexWrapper: Makeindex | null = null;\n  let xdvipdfmxWrapper: Xdvipdfmx | null = null;\n\n  const pushLog = (cmd: string, r: RunResult) => {\n    logs.push({ cmd, exitCode: r.exitCode, stdout: r.stdout, stderr: r.stderr, log: r.log });\n  };\n\n  // The deadline covers the pipeline, not one invocation: each engine call\n  // gets whatever is left of it, so extra passes cannot extend it.\n  const deadline = opts.timeoutMs !== undefined ? performance.now() + opts.timeoutMs : null;\n  const budget = (): RunLimits => {\n    const limits: RunLimits = {};\n    if (opts.signal) limits.signal = opts.signal;\n    if (deadline !== null) {\n      const left = Math.ceil(deadline - performance.now());\n      if (left <= 0) {\n        throw new Error(`latexmk: pipeline exceeded timeoutMs=${opts.timeoutMs}`);\n      }\n      limits.timeoutMs = left;\n    }\n    return limits;\n  };\n\n  try {\n    while (pass < maxPasses) {\n      pass++;\n      const result = await tex.compile({\n        mainTex: opts.mainTex,\n        files: pass === 1 ? opts.files : materialize(),\n        extraArgs: texExtraArgs,\n        ...budget(),\n        // XeTeX in WASM cannot spawn xdvipdfmx itself (no popen); we always\n        // hold the .xdv and finalize with our own xdvipdfmx pass below.\n        ...(isXetex ? { noPdf: true } : {}),\n      });\n      pushLog(`${opts.engine} ${opts.mainTex}`, result);\n      exitCode = result.exitCode;\n      outputs = mergeOutputs(outputs, result.outputs);\n      if (exitCode !== 0) break;\n\n      let helpersRan = false;\n\n      // Bibtex on the first pass that produced an .aux.\n      if (pass === 1 && needBibtex && outputs.has(auxPath)) {\n        bibtexWrapper ??= new Bibtexu(wrapperConfig(opts, 'bibtexu', opts.handles?.bibtex));\n        const r = await bibtexWrapper.run({\n          auxFile: auxPath,\n          files: materialize(),\n          ...budget(),\n          // biblatex's aux needs bibtex8's \"wolfgang\" capacity mode; the\n          // switch is harmless for classic .bst documents but only biblatex\n          // requires it, so keep classic invocations byte-identical.\n          ...(biblatexMode ? { extraArgs: ['--wolfgang'] } : {}),\n        });\n        pushLog(`bibtexu ${auxPath}`, r);\n        outputs = mergeOutputs(outputs, r.outputs);\n        // bibtex exit statuses: 0 spotless, 1 warnings, 2 errors, 3 fatal.\n        // Warnings are routine (empty fields etc.) and must not abort.\n        if (r.exitCode >= 2) {\n          exitCode = r.exitCode;\n          break;\n        }\n        helpersRan = true;\n      }\n\n      // Biber whenever the .bcf appeared or changed — biblatex rewrites the\n      // control file when options/citations change; a stable .bcf means\n      // biber's work is already reflected in the .bbl.\n      if (needBiber && outputs.has(bcfPath)) {\n        const bcfNow = bytesToString(outputs.get(bcfPath));\n        if (bcfNow !== lastBcf) {\n          lastBcf = bcfNow;\n          biberWrapper ??= new Biber(wrapperConfig(opts, 'biber', opts.handles?.biber));\n          const r = await biberWrapper.run({ jobname: base, files: materialize(), ...budget() });\n          pushLog(`biber ${base}`, r);\n          outputs = mergeOutputs(outputs, r.outputs);\n          // biber exits 0 on success (warnings included); >=2 is a hard error.\n          if (r.exitCode >= 2) {\n            exitCode = r.exitCode;\n            break;\n          }\n          helpersRan = true;\n        }\n      }\n\n      // Makeindex whenever the .idx appeared or changed.\n      if (needMakeindex && outputs.has(idxPath)) {\n        const idxNow = bytesToString(outputs.get(idxPath));\n        if (idxNow !== lastIdx) {\n          lastIdx = idxNow;\n          makeindexWrapper ??= new Makeindex(\n            wrapperConfig(opts, 'makeindex', opts.handles?.makeindex),\n          );\n          const r = await makeindexWrapper.run({\n            idxFile: idxPath,\n            files: materialize(),\n            ...budget(),\n          });\n          pushLog(`makeindex ${idxPath}`, r);\n          outputs = mergeOutputs(outputs, r.outputs);\n          // A failed makeindex used to be swallowed: the document still built,\n          // but with a stale or missing index and success:true — a wrong\n          // document reported as a right one. makeindex exits non-zero only on\n          // real errors (a bad style file, unreadable .idx), so treat it like\n          // every other helper failure.\n          if (r.exitCode !== 0) {\n            exitCode = r.exitCode;\n            break;\n          }\n          helpersRan = true;\n        }\n      }\n\n      if (pass >= maxPasses) break;\n      const aux = bytesToString(outputs.get(auxPath));\n      const log = bytesToString(outputs.get(logPath));\n      const rerunRequested = RERUN_PATTERNS.some((re) => re.test(log));\n      const auxStable = lastAux !== null && aux === lastAux;\n      lastAux = aux;\n      // A fresh .bbl/.ind must be folded in by at least one more pass.\n      if (helpersRan) continue;\n      if (auxStable && !rerunRequested) break;\n    }\n\n    // For xelatex, finalize via xdvipdfmx on the held .xdv.\n    if (isXetex && exitCode === 0 && outputs.has(xdvPath)) {\n      xdvipdfmxWrapper ??= new Xdvipdfmx(wrapperConfig(opts, 'xdvipdfmx', opts.handles?.xdvipdfmx));\n      const r = await xdvipdfmxWrapper.run({\n        xdv: xdvPath,\n        pdf: pdfPath,\n        files: materialize(),\n        ...budget(),\n      });\n      pushLog(`xdvipdfmx -o ${pdfPath} ${xdvPath}`, r);\n      outputs = mergeOutputs(outputs, r.outputs);\n      if (r.exitCode !== 0) exitCode = r.exitCode;\n    }\n  } finally {\n    // Wrappers created by this call own their workers; release them. A\n    // wrapper wrapping a caller-supplied handle no-ops its dispose().\n    await Promise.allSettled(\n      [tex, bibtexWrapper, biberWrapper, makeindexWrapper, xdvipdfmxWrapper]\n        .filter((w) => w !== null)\n        .map((w) => w.dispose()),\n    );\n  }\n\n  const result: LatexmkResult = {\n    success: exitCode === 0 && outputs.has(pdfPath),\n    log: bytesToString(outputs.get(logPath)),\n    logs,\n    exitCode,\n    passes: pass,\n  };\n  const pdf = outputs.get(pdfPath);\n  if (pdf) result.pdf = pdf;\n  const synctex = outputs.get(synctexPath);\n  if (synctex) result.synctex = synctex;\n  return result;\n}\n\nfunction resolveAuto<T extends boolean | 'auto' | undefined>(\n  value: T,\n  autoFn: () => boolean,\n): boolean {\n  if (value === true) return true;\n  if (value === false) return false;\n  return autoFn();\n}\n\nfunction contentToString(content: string | Uint8Array): string {\n  if (typeof content === 'string') return content;\n  return new TextDecoder('utf-8', { fatal: false }).decode(content);\n}\n\n// Matches \\usepackage[opts]{biblatex} / \\RequirePackage[opts]{biblatex};\n// character classes match newlines, so multi-line option lists work.\nconst BIBLATEX_LOAD = /\\\\(?:usepackage|RequirePackage)\\s*(?:\\[([^\\]]*)\\])?\\s*\\{\\s*biblatex\\s*\\}/;\nconst BIBLATEX_PASS_OPTS = /\\\\PassOptionsToPackage\\s*\\{([^}]*)\\}\\s*\\{\\s*biblatex\\s*\\}/;\nconst BACKEND_BIBTEX = /backend\\s*=\\s*bibtex8?\\s*(?:[,\\]}]|$)/m;\n\nfunction usesBiblatex(files: FileInput[]): boolean {\n  return files.some((f) => BIBLATEX_LOAD.test(contentToString(f.content)));\n}\n\nfunction biblatexBackendIsBibtex(files: FileInput[]): boolean {\n  return files.some((f) => {\n    const text = contentToString(f.content);\n    const load = BIBLATEX_LOAD.exec(text);\n    if (load?.[1] && BACKEND_BIBTEX.test(load[1])) return true;\n    const pass = BIBLATEX_PASS_OPTS.exec(text);\n    return pass?.[1] !== undefined && BACKEND_BIBTEX.test(pass[1]);\n  });\n}\n\n/**\n * Public preview of latexmk's bibtex auto-detection. Apps that manage their\n * own EngineHandles (to pass `handles.bibtex` with a configured enginePath)\n * can ask up front whether a compile will invoke bibtexu, instead of\n * duplicating the detection heuristics.\n */\nexport function willRunBibtex(files: FileInput[]): boolean {\n  return detectBibtex(files, usesBiblatex(files));\n}\n\n/** Same preview for biber: default-backend biblatex documents. */\nexport function willRunBiber(files: FileInput[]): boolean {\n  return usesBiblatex(files) && !biblatexBackendIsBibtex(files);\n}\n\nfunction detectBibtex(files: FileInput[], biblatexMode: boolean): boolean {\n  // biblatex docs: bibtexu can process the aux only for backend=bibtex\n  // setups (biblatex also aliases \\bibliography to \\addbibresource, so the\n  // classic marker alone must NOT trigger bibtexu on a biber-backend doc).\n  // The default biber backend is left alone until biber.wasm ships.\n  if (biblatexMode) return biblatexBackendIsBibtex(files);\n  // Classic bibtex: `\\bibliography{…}` writes the aux bibtexu processes.\n  return files.some((f) => contentToString(f.content).includes('\\\\bibliography{'));\n}\n\nfunction detectMakeindex(files: FileInput[]): boolean {\n  return files.some((f) => {\n    const text = contentToString(f.content);\n    return text.includes('\\\\makeindex') || text.includes('\\\\printindex');\n  });\n}\n\nfunction bytesToString(bytes: Uint8Array | undefined): string {\n  if (!bytes) return '';\n  return new TextDecoder('utf-8', { fatal: false }).decode(bytes);\n}\n\nfunction mergeOutputs(\n  base: Map<string, Uint8Array>,\n  add: Map<string, Uint8Array>,\n): Map<string, Uint8Array> {\n  for (const [k, v] of add) base.set(k, v);\n  return base;\n}\n\n/**\n * Options for one wrapper: a caller-supplied handle wins; otherwise the\n * engine is built from `engineConfig`, which is the only way this driver can\n * know where the engine's .wasm lives.\n */\nfunction wrapperConfig(\n  opts: LatexmkOptions,\n  id: EngineId,\n  handle: EngineHandle | undefined,\n): EngineWrapperConfig {\n  if (handle) return { engine: handle };\n  const config =\n    typeof opts.engineConfig === 'function' ? opts.engineConfig(id) : (opts.engineConfig ?? {});\n  const { useWorker: _useWorker, ...wrapperSafe } = config;\n  return {\n    ...wrapperSafe,\n    ...(opts.verbose ? { verbose: opts.verbose } : {}),\n  };\n}\n\ntype EngineWrapperConfig = Omit<EngineConfig, 'useWorker'> & { engine?: EngineHandle };\n\nfunction buildTexEngine(opts: LatexmkOptions): PdfLatex | XeLatex | LuaLatex {\n  const config = wrapperConfig(opts, opts.engine, opts.handles?.tex);\n  if (opts.engine === 'pdflatex') return new PdfLatex(config);\n  if (opts.engine === 'xelatex') return new XeLatex(config);\n  return new LuaLatex(config);\n}\n","/**\n * Minimal gzip decompression helpers.\n *\n * Browsers ≥2023 and Node ≥18 have DecompressionStream natively, which is all\n * we need for `.synctex.gz`. If perf matters later we can swap in fflate\n * (~3KB extra) and use its synchronous decompressSync for tiny blobs.\n */\n\nexport function strFromU8(bytes: Uint8Array): string {\n  return new TextDecoder('utf-8').decode(bytes);\n}\n\n/** Async gzip decompress via the platform DecompressionStream. */\nexport async function gunzip(bytes: Uint8Array): Promise<Uint8Array> {\n  const Ctor = (globalThis as { DecompressionStream?: typeof DecompressionStream })\n    .DecompressionStream;\n  if (!Ctor) {\n    throw new Error(\n      'DecompressionStream is not available; ship a gzip polyfill or upgrade Node/browser.',\n    );\n  }\n  // Copy into a fresh ArrayBuffer-backed Uint8Array — Blob's BlobPart only\n  // accepts views over ArrayBuffer, not SharedArrayBuffer.\n  const ab = new ArrayBuffer(bytes.byteLength);\n  new Uint8Array(ab).set(bytes);\n  const stream = new Blob([ab]).stream().pipeThrough(new Ctor('gzip'));\n  const out = await new Response(stream).arrayBuffer();\n  return new Uint8Array(out);\n}\n","/**\n * SyncTeX — bidirectional source↔PDF lookup.\n *\n * Forward: (sourceFile, line) → list of PDF rectangles.\n * Reverse: (page, x, y) → list of source locations.\n *\n * Implementation note: the .synctex.gz format is a small text format that\n * SyncTeX's reference parser is ~2KB of code. For v1 we ship a JS-only\n * implementation. If perf turns out to be a problem we'll cross-compile the C\n * `synctex` parser to its own `synctex.wasm` and swap it in transparently.\n */\n\nimport { strFromU8, gunzip } from './fflate-shim';\n\nexport interface SynctexForwardHit {\n  page: number;\n  x: number;\n  y: number;\n  width: number;\n  height: number;\n}\n\nexport interface SynctexReverseHit {\n  file: string;\n  line: number;\n  column: number;\n}\n\nexport interface SynctexLookup {\n  forward(file: string, line: number, column?: number): SynctexForwardHit[];\n  reverse(page: number, x: number, y: number): SynctexReverseHit[];\n  /** All input files referenced in the synctex index. */\n  files(): string[];\n}\n\n/** Parse a `.synctex.gz` (or already-decompressed `.synctex`) buffer. */\nexport async function createSynctex(bytes: Uint8Array): Promise<SynctexLookup> {\n  const decompressed = isGzip(bytes) ? await gunzip(bytes) : bytes;\n  const text = strFromU8(decompressed);\n  const parsed = parseSynctex(text);\n\n  return {\n    forward(_file, _line, _column) {\n      // TODO(phase 4): implement forward lookup using parsed.records.\n      return [];\n    },\n    reverse(_page, _x, _y) {\n      // TODO(phase 4): implement reverse lookup using parsed.records.\n      return [];\n    },\n    files() {\n      return Object.values(parsed.inputs);\n    },\n  };\n}\n\nfunction isGzip(bytes: Uint8Array): boolean {\n  return bytes.length >= 2 && bytes[0] === 0x1f && bytes[1] === 0x8b;\n}\n\ninterface ParsedSynctex {\n  /** input id → filename */\n  inputs: Record<string, string>;\n  /** raw records for now; structured into a tree in Phase 4 */\n  records: string[];\n}\n\nfunction parseSynctex(text: string): ParsedSynctex {\n  const inputs: Record<string, string> = {};\n  const records: string[] = [];\n  for (const line of text.split('\\n')) {\n    if (line.startsWith('Input:')) {\n      // Input:<id>:<filename>\n      const rest = line.slice('Input:'.length);\n      const colon = rest.indexOf(':');\n      if (colon > 0) {\n        const id = rest.slice(0, colon);\n        const name = rest.slice(colon + 1);\n        inputs[id] = name;\n      }\n    } else if (line.length > 0) {\n      records.push(line);\n    }\n  }\n  return { inputs, records };\n}\n"],"names":["safeRelativePath","manifest","loadManifest","createBundleFs","expectedSha256","sha256Hex","Comlink","slot","result"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoCA,KAAA,CAAA,QAAA,CAAsB,YAAA,CAAa,IAAA,CAAA,CAAA,CAAsB,EAAC,CAAA,CAAyB,CAAA;AACjF,CAAA,CAAA,MAAM,QAAA,CAAA,CAAA,CAAW,KAAK,QAAA,IAAY,CAAA,OAAA,CAAA,IAAA,CAAA,CAAA;AAClC,CAAA,CAAA,MAAM,OAAA,CAAA,CAAA,CAAU,KAAK,OAAA,IAAW,CAAA,WAAA,CAAA,CAAA;AAChC,CAAA,CAAA,KAAA,CAAM,IAAA,CAAA,CAAA,CAAO,KAAA,CAAM,SAAA,CAAU,OAAA,CAAQ,YAAA,CAAA,CAAa,CAAA;AAElD,CAAA,CAAA,KAAA,CAAM,MAAA,CAAA,CAAA,CAAS,KAAA,CAAM,IAAA,CAAK,kBAAA,CAAmB,UAAU,CAAA,CAAE,MAAA,CAAA,CAAQ,MAAM,CAAA,CAAA;AACvE,CAAA,CAAA,MAAM,WAAA,CAAA,CAAA,CAAc,MAAM,MAAA,CAAO,kBAAA,CAAmB,WAAA,CAAY,OAAO,CAAA,CAAA,CAAG,CAAA,CAAE,MAAA,CAAA,CAAQ,IAAA,EAAM,CAAA,CAAA;AAC1F,CAAA,CAAA,KAAA,CAAM,OAAA,CAAA,CAAA,CAAU,KAAA,CAAM,WAAA,CAAY,kBAAA,CAAmB,CAAA,IAAA,GAAQ,CAAA,CAAE,MAAA,CAAA,CAAQ,MAAM,CAAA,CAAA;AAC7E,CAAA,CAAA,KAAA,CAAM,MAAA,CAAA,CAAA,CAAS,KAAA,CAAM,WAAA,CAAY,kBAAA,CAAmB,CAAA,GAAA,GAAO,CAAA,CAAE,MAAA,CAAA,CAAQ,MAAM,CAAA,CAAA;AAE3E,CAAA,CAAA,KAAA,CAAA,QAAA,CAAe,MAAA,CACb,GAAA,EACA,OAAA,CAAA,CACA,MAAA,CAAA,CACkE,CAAA;AAClE,CAAA,CAAA,CAAA,CAAA,MAAM,IAAA,CAAA,CAAA,CAAOA,KAAAA,CAAAA,iBAAiB,OAAO,CAAA,CAAA;AACrC,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAI,CAAC,MAAM,OAAO,IAAA,CAAA;AAClB,CAAA,CAAA,CAAA,CAAA,KAAA,CAAM,KAAA,CAAA,CAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA,CAAA;AAC5B,CAAA,CAAA,CAAA,CAAA,GAAA,CAAI,GAAA,CAAA,CAAA,CAAiC,GAAA,CAAA;AACrC,CAAA,CAAA,CAAA,CAAA,KAAA,GAAA,CAAS,IAAI,CAAA,EAAG,CAAA,CAAA,CAAA,CAAI,KAAA,CAAM,MAAA,CAAA,CAAA,CAAS,GAAG,CAAA,EAAA,CAAA,CAAK,CAAA;AACzC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAI,CAAA;AACF,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAM,KAAA,CAAM,IAAI,kBAAA,CAAmB,KAAA,CAAM,CAAC,CAAA,CAAA,CAAI,CAAA,CAAE,QAAQ,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAC1D,CAAA,CAAA,KAAA,CAAQ,CAAA;AACN,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAO,IAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACT,CAAA;AAAA,CAAA,CAAA,CAAA,CACF,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,OAAO,CAAA,CAAE,KAAK,GAAA,EAAK,IAAA,CAAA,CAAM,MAAM,KAAA,CAAM,MAAA,CAAA,CAAA,CAAS,CAAC,CAAA,CAAA,CAAG,CAAA;AAAA,CAAA,CACpD,CAAA;AAEA,CAAA,CAAA,eAAe,QAAA,CACb,KACA,OAAA,CAAA,CAC4B,CAAA;AAC5B,CAAA,CAAA,CAAA,CAAA,KAAA,CAAM,GAAA,CAAA,CAAA,CAAM,KAAA,CAAM,MAAA,CAAO,GAAA,CAAA,CAAK,SAAS,KAAK,CAAA,CAAA;AAC5C,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAI,CAAC,KAAK,OAAO,IAAA,CAAA;AACjB,CAAA,CAAA,CAAA,CAAA,GAAA,CAAI,CAAA;AACF,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAM,EAAA,CAAA,CAAA,CAAK,MAAM,GAAA,CAAI,GAAA,CAAI,aAAA,CAAc,IAAI,IAAA,CAAA,CAAM,CAAA,CAAE,MAAA,CAAA,CAAQ,KAAA,EAAO,CAAA,CAAA;AAClE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAM,IAAA,CAAA,CAAA,CAAO,MAAM,EAAA,CAAG,OAAA,CAAA,CAAQ,CAAA;AAC9B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAM,EAAA,CAAA,CAAA,CAAK,MAAM,IAAA,CAAK,WAAA,CAAA,CAAY,CAAA;AAClC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAO,GAAA,CAAI,WAAW,EAAE,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAC1B,CAAA,CAAA,KAAA,CAAQ,CAAA;AACN,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAO,IAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACT,CAAA;AAAA,CAAA,CACF,CAAA;AAEA,CAAA,CAAA,MAAA,CAAO,CAAA;AAAA,CAAA,CAAA,CAAA,CACL,EAAA,EAAI,CAAA,MAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACJ,KAAA,CAAM,KAAK,OAAA,CAAA,CAA6C,CAAA;AAEtD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAQ,KAAA,CAAM,SAAS,OAAA,CAAA,CAAS,OAAO,KAAO,MAAM,QAAA,CAAS,QAAQ,OAAO,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAC9E,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACA,MAAM,KAAA,CAAM,OAAA,CAAA,CAAiB,KAAA,CAAA,CAAkC,CAAA;AAC7D,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAI,CAAA;AACF,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAM,GAAA,CAAA,CAAA,CAAM,KAAA,CAAM,MAAA,CAAO,MAAA,CAAA,CAAQ,SAAS,IAAI,CAAA,CAAA;AAC9C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAI,CAAC,GAAA,CAAA,CAAK,MAAA,CAAA;AACV,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAM,EAAA,CAAA,CAAA,CAAK,MAAM,GAAA,CAAI,GAAA,CAAI,aAAA,CAAc,IAAI,IAAA,CAAA,CAAM,CAAA,CAAE,MAAA,CAAA,CAAQ,IAAA,EAAM,CAAA,CAAA;AACjE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAM,QAAA,CAAA,CAAA,CAAW,MAAM,EAAA,CAAG,cAAA,CAAA,CAAe,CAAA;AACzC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAM,QAAA,CAAS,MAAM,KAAgD,CAAA,CAAA;AACrE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAM,SAAS,KAAA,CAAA,CAAM,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACvB,CAAA,CAAA,KAAA,CAAQ,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAGR,CAAA;AAAA,CAAA,CAAA,CAAA,CACF,CAAA;AAAA,CAAA,CAAA,CACF,CAAA;AACF,CAAA;AAGA,QAAA,CAAS,YAAY,IAAA,CAAA,CAAsB,CAAA;AACzC,CAAA,CAAA,MAAA,CAAO,IAAA,CAAK,OAAA,CAAQ,WAAA,CAAA,CAAa,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,WAAA,CAAA,CAAA;AAC3C,CAAA;;ACnFO,QAAA,CAAS,cAAc,IAAA,CAAA,CAAkC,CAAA;AAC9D,CAAA,CAAA,KAAA,CAAM,IAAA,CAAA,CAAA,CAAO,KAAK,UAAA,CAAW,QAAA,CAAS,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAI,IAAA,CAAK,UAAA,CAAA,CAAA,CAAa,IAAA,CAAK,UAAA,GAAa,CAAA,CAAA,CAAA,CAAA;AAEjF,CAAA,CAAA,MAAA,CAAO,CAAA;AAAA,CAAA,CAAA,CAAA,CACL,EAAA,EAAI,CAAA,OAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACJ,KAAA,CAAM,KAAK,OAAA,CAAA,CAA6C,CAAA;AAGtD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAM,QAAA,CAAA,CAAA,CAAWA,KAAAA,CAAAA,iBAAiB,OAAO,CAAA,CAAA;AACzC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAI,CAAC,UAAU,OAAO,IAAA,CAAA;AACtB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAM,GAAA,CAAA,CAAA,CAAM,IAAA,GAAO,QAAA,CAAS,KAAA,CAAM,CAAA,CAAA,CAAG,EAAE,GAAA,CAAI,kBAAkB,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA,CAAA;AAGvE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAM,CAAA,CAAA,CAAA,CAAI,MAAM,KAAA,CAAM,GAAG,CAAA,CAAA;AACzB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAI,CAAA,CAAE,MAAA,KAAW,GAAA,CAAA,CAAK,OAAO,IAAA,CAAA;AAC7B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAI,CAAC,CAAA,CAAE,EAAA,CAAA,CAAI,KAAA,CAAM,GAAA,CAAI,KAAA,CAAM,CAAA,cAAA,CAAA,CAAiB,CAAA,CAAE,MAAM,CAAA,KAAA,CAAA,CAAQ,OAAO,CAAA,CAAE,CAAA,CAAA;AACrE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAM,MAAM,GAAA,CAAI,UAAA,CAAW,KAAA,CAAM,CAAA,CAAE,aAAa,CAAA,CAAA;AAChD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAI,IAAA,CAAK,UAAU,CAAE,KAAA,CAAM,KAAK,MAAA,CAAO,QAAA,CAAA,CAAU,GAAG,CAAA,CAAA,CAAI,OAAO,IAAA,CAAA;AAC/D,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAM,IAAA,CAAK,SAAA,GAAY,OAAA,CAAA,CAAS,GAAG,CAAA,CAAA;AACnC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAO,GAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACT,CAAA;AAAA,CAAA,CAAA,CACF,CAAA;AACF,CAAA;;ACZA,KAAA,CAAA,QAAA,CAAsB,eAAA,CACpB,GAAA,CAAA,CACA,MAAA,CAAA,CACA,OAAA,CAAA,CAAA,CAAkC,CAAA,CAAC,CAAA,CACZ,CAAA;AACvB,CAAA,CAAA,KAAA,CAAM,SAAuB,CAAA,CAAC,CAAA;AAM9B,CAAA,CAAA,GAAA,CAAIC,QAAAA,CAAAA,CAAA,CAAA,CAAA,CAAuC,IAAA,CAAA;AAC3C,CAAA,CAAA,EAAA,CAAA,CAAI,OAAO,WAAA,CAAA,CAAa,CAAA;AACtB,CAAA,CAAA,CAAA,CAAA,GAAA,CAAI,CAAA;AACF,CAAA,CAAA,CAAA,CAAA,CAAA,CAAAA,QAAAA,CAAAA,CAAA,GAAW,KAAA,CAAMC,QAAAA,CAAAA,YAAA,CAAa,MAAA,CAAO,WAAW,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAClD,SAAS,GAAA,CAAA,CAAK,CAAA;AACZ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAA,CAAQ,IAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACN,yCAAyC,MAAA,CAAO,WAAW,CAAA,CAAA,CAAA,CAAA,CAAK,MAAA,CAAO,GAAG,CAAC,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,GAAA,CAAA,GAAA,CAAA,KAAA,CAAA,IAAA,CAAA,GAAA,CAAA,EAAA,CAAA,SAAA,CAAA,OAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAE7E,CAAA;AAAA,CAAA,CAAA,CAAA,CACF,CAAA;AAAA,CAAA,CACF,CAAA;AAEA,CAAA,CAAA,MAAM,eAAA,CAAA,CAAA,CAAkB,OAAO,qBAAA,KAA0B,IAAA,CAAA;AAIzD,CAAA,CAAA,EAAA,CAAA,CAAI,MAAA,CAAO,UAAA,CAAA,CAAA,CAAA,CAAc,CAACD,QAAAA,CAAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAC,eAAA,CAAA,CAAiB,CAAA;AACtD,CAAA,CAAA,CAAA,CAAA,KAAA,CAAM,IAAI,KAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACR,CAAA,OAAA,CAAA,IAAA,CAAA,CAAA,UAAA,CAAA,EAAA,CAAA,GAAA,CAAA,GAAA,CAAA,EAAA,CAAA,QAAA,CAAA,KAAA,CAAA,EAAA,CAAA,MAAA,CAAA,CAAA,EAAA,CAAA,GAAA,CAAA,KAAA,CAAA,MAAA,CAAA,EAAA,CAAA,SAAA,CAAA,OAAA,CAAA,CAAA,GAAA,CAAA,WAAA,CAAA,CAAA,GAAA,CAAA,GAAA,CAAA,IAAA,CAAA,MAAA,CAAA,EAAA,CAAA,IAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAAA,CAAA,EAAA,CAAA,GAAA,CAAA,qBAAA,CAAA,CAAA,IAAA,CAAA,GAAA,CAAA,WAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAGF,CAAA;AAAA,CAAA,CACF,CAAA;AAIA,CAAA,CAAA,EAAA,CAAA,CAAI,MAAA,CAAO,WAAA,IAAe,CAAC,OAAA,CAAQ,kBAAA,CAAA,CAAoB,CAAA;AACrD,CAAA,CAAA,CAAA,CAAA,MAAA,CAAO,IAAA,CAAK,KAAA,CAAME,uBAAA,CAAe,CAAA,CAAE,aAAa,MAAA,CAAO,WAAA,EAAa,eAAA,CAAA,CAAiB,CAAC,CAAA,CAAA;AAAA,CAAA,CACxF,CAAA;AAEA,CAAA,CAAA,GAAA,CAAI,IAAA,CAAA,CAAA,CAAwD,IAAA,CAAA;AAC5D,CAAA,CAAA,EAAA,CAAA,CAAI,iBAAgB,CAAA,CAAG,CAAA;AACrB,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAO,KAAA,CAAM,aAAaF,UAAA,CAAA,CAAA,CAAW,CAAA,CAAE,SAASA,UAAA,CAAS,OAAA,CAAA,CAAQ,CAAA,CAAA,CAAI,EAAE,CAAA,CAAA;AAGvE,CAAA,CAAA,CAAA,CAAA,MAAA,CAAO,KAAKA,UAAA,CAAA,CAAA,CAAW,aAAA,CAAc,IAAA,CAAA,CAAMA,QAAAA,CAAAA,CAAQ,IAAI,IAAI,CAAA,CAAA;AAAA,CAAA,CAC7D,CAAA;AAEA,CAAA,CAAA,EAAA,CAAA,CAAI,OAAO,UAAA,CAAA,CAAY,CAAA;AACrB,CAAA,CAAA,CAAA,CAAA,KAAA,CAAM,KAAA,CAAA,CAAA,CAAQ,IAAA,CAAA;AACd,CAAA,CAAA,CAAA,CAAA,KAAA,CAAM,KAAA,CAAA,CAAA,CAAQA,QAAAA,CAAAA,CAAA,CAAA;AACd,CAAA,CAAA,CAAA,CAAA,MAAA,CAAO,IAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACL,aAAA,CAAc,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACZ,YAAY,MAAA,CAAO,UAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAA,OAAA,CAAA,CAAA,GAAA,CAAA,IAAA,CAAA,GAAA,CAAA,SAAA,CAAA,IAAA,CAAA,GAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,IAAA,CAAA,EAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,IAAA,CAAA,OAAA,CAAA,KAAA,CAAA,IAAA,CAAA,OAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAGnB,CAAA,CAAA,CAAI,KAAA,CAAA,CAAA,CACA,CAAA,CAAE,SAAA,CAAA,CAAW,CAAC,OAAA,CAAA,CAAiB,KAAA,KAAsB,KAAA,CAAM,KAAA,CAAM,OAAA,EAAS,KAAK,CAAA,CAAA,IAC/E,CAAA,CAAC,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,QAAA,CAAA,MAAA,CAAA,GAAA,CAAA,KAAA,CAAA,OAAA,CAAA,KAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,QAAA,CAAA,QAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAA,EAAA,CAAA,GAAA,CAAA,KAAA,CAAA,EAAA,CAAA,KAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAGL,CAAA,CAAA,CAAI,KAAA,CAAA,CAAA,CACA,CAAA,CAAE,MAAA,CAAA,CAAQ,CAAC,OAAA,CAAA,CAAiB,KAAA,KAAsB,OAAA,CAAQ,KAAA,CAAA,CAAO,OAAA,EAAS,KAAK,CAAA,KAC/E,CAAA,CAAA;AAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACN,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CACH,CAAA;AAAA,CAAA,CACF,CAAA;AAEA,CAAA,CAAA,OAAO,MAAA,CAAA;AACT,CAAA;AAUO,QAAA,CAAS,aAAA,CAAc,SAAqB,QAAA,CAAA,CAA2C,CAAA;AAC5F,CAAA,CAAA,KAAA,CAAM,OAAA,CAAA,CAAA,CAAsB,CAAA;AAAA,CAAA,CAAA,CAAA,CAC1B,IAAI,OAAA,CAAQ,EAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACZ,KAAA,CAAM,KAAK,OAAA,CAAA,CAA6C,CAAA;AACtD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAM,KAAA,CAAA,CAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,OAAO,CAAA,CAAA;AACxC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAI,CAAC,OAAO,OAAO,IAAA,CAAA;AACnB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAA,CAAU,OAAA,CAAA,CAAS,KAAK,IAAK,KAAA,GAAQ,IAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAC7D,CAAA;AAAA,CAAA,CAAA,CACF,CAAA;AACA,CAAA,CAAA,IAAI,OAAA,CAAQ,QAAQ,OAAA,CAAQ,MAAA,CAAA,CAAA,CAAS,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,OAAA,CAAQ,OAAQ,CAAC,CAAA,CAAA;AACrE,CAAA,CAAA,IAAI,OAAA,CAAQ,MAAM,OAAA,CAAQ,IAAA,CAAA,CAAA,CAAO,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,OAAA,CAAQ,KAAM,CAAC,CAAA,CAAA;AAC/D,CAAA,CAAA,EAAA,CAAA,CAAI,QAAQ,IAAA,CAAA,CAAM,OAAA,CAAQ,IAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,QAAQ,IAAA,CAAA,CAAM,CAAA;AACrD,CAAA,CAAA,EAAA,CAAA,CAAI,QAAQ,OAAA,CAAA,CAAS,OAAA,CAAQ,OAAA,CAAA,CAAA,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,QAAQ,OAAA,CAAA,CAAS,CAAA;AAC9D,CAAA,CAAA,OAAO,OAAA,CAAA;AACT,CAAA;AAEA,KAAA,CAAA,QAAA,CAAe,OAAA,CACbA,QAAAA,CAAAA,CAAA,EACA,OAAA,CAAA,CACA,KAAA,CAAA,CACkB,CAAA;AAClB,CAAA,CAAA,KAAA,CAAM,WAAWG,QAAAA,CAAAA,cAAA,CAAeH,QAAAA,CAAAA,CAAA,CAAA,CAAU,QAAQ,OAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAE,CAAC,CAAA,CAAA;AACrE,CAAA,CAAA,EAAA,CAAA,CAAI,CAAC,UAAU,OAAO,IAAA,CAAA;AACtB,CAAA,CAAA,MAAM,MAAA,CAAA,CAAA,CAAS,MAAMI,QAAAA,CAAAA,SAAA,CAAU,KAAK,CAAA,CAAA;AACpC,CAAA,CAAA,EAAA,CAAA,CAAI,MAAA,CAAA,CAAA,CAAA,CAAA,CAAW,QAAA,CAAS,WAAA,CAAA,CAAY,CAAA,CAAG,MAAA,CAAO,IAAA,CAAA;AAC9C,CAAA,CAAA,OAAA,CAAQ,IAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACN,CAAA,OAAA,CAAA,IAAA,CAAA,CAAA,SAAA,CAAA,KAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,CAA4C,OAAO,CAAA,CAAA,CAAA,QAAA,CAAA,CAAA,CAAc,QAAQ,SAAS,MAAM,CAAA,CAAA,CAAA,CAAA,UAAA,CAAA,KAAA,CAAA,KAAA,CAAA;AAAA,CAAA,CAAA,CAE1F,CAAA;AACA,CAAA,CAAA,OAAO,KAAA,CAAA;AACT,CAAA;AAEA,QAAA,CAAS,eAAA,CAAA,CAAA,CAA2B,CAAA;AAElC,CAAA,CAAA,MAAA,CACE,OAAO,SAAA,CAAA,CAAA,CAAA,CAAA,CAAc,WAAA,CAAA,CAAA,CAAA,CACrB,MAAA,CAAO,SAAA,CAAU,YAAY,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,CAC7B,OAAO,SAAA,CAAU,OAAA,CAAQ,YAAA,KAAiB,CAAA,QAAA,CAAA,CAAA;AAE9C,CAAA;;ACpIA,KAAA,CAAM,cAAA,CAAA,CAAA,CAAwE,CAAA;AAAA,CAAA,CAC5E,SAAA,CAAA,CAAW,MAAA,CAAO,MAAA,KAAW,CAAA,SAAA,CAAA,CAAA;AAAA,CAAA,CAC7B,OAAA,CAAA,CAAS,CAAA,MAAA,CAAA;AACX,CAAA,CAAA;AAGA,KAAA,CAAM,gBAAA,GAAmB,GAAA,CAAA;AAEzB,KAAA,CAAA,QAAA,CAAsB,YAAA,CAAa,EAAA,EAAc,MAAA,CAAA,CAAA,CAAuB,EAAC,CAAA,CAA0B,CAAA;AACjG,CAAA,CAAA,KAAA,CAAM,MAAA,CAAA,CAAA,CAAuB,CAAA,CAAE,GAAG,cAAA,CAAA,CAAgB,CAAA,CAAA,CAAG,MAAA,CAAA,CAAO,CAAA;AAK5D,CAAA,CAAA,MAAM,cAAA,CAAA,CAAA,CAAiB,OAAO,SAAA,KAAc,IAAA,CAAA,CAAA,CAAA,CAAQ,CAAC,MAAA,CAAO,GAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAC,MAAA,CAAO,WAAA,CAAA;AAC5E,CAAA,CAAA,MAAM,QAAA,CAAA,CAAA,CACJ,MAAA,CAAO,GAAA,IAAQ,KAAA,CAAM,eAAA,CAAgB,IAAI,MAAA,CAAA,CAAQ,CAAA,CAAE,kBAAA,CAAA,CAAoB,cAAA,EAAgB,CAAA,CAAA;AAEzF,CAAA,CAAA,EAAA,CAAA,CAAI,OAAO,SAAA,CAAA,CAAW,CAAA;AACpB,CAAA,CAAA,CAAA,CAAA,MAAA,CAAO,kBAAA,CAAmB,EAAA,CAAA,CAAI,MAAA,CAAA,CAAQ,QAAA,CAAA,CAAU,cAAc,CAAA,CAAA;AAAA,CAAA,CAChE,CAAA;AACA,CAAA,CAAA,MAAA,CAAO,qBAAA,CAAsB,EAAoB,CAAA,CAAA;AACnD,CAAA;AAUA,QAAA,CAAS,gBAAgB,QAAA,CAAA,CAAqC,CAAA;AAC5D,CAAA,CAAA,MAAA,CAAO,CAAA;AAAA,CAAA,CAAA,CAAA,CACL,MAAM,IAAA,CAAK,CAAA,CAAA,CAAW,OAAA,CAAA,CAA6C,CAAA;AACjE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAQ,KAAA,CAAM,QAAA,CAAS,CAAC,CAAA,CAAG,IAAA,CAAK,OAAO,CAAA,CAAA,CAAA,CAAA,CAAM,IAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAC/C,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACA,MAAM,MAAA,CAAO,CAAA,CAAA,CAAW,OAAA,CAAA,CAAmC,CAAA;AACzD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAM,CAAA,CAAA,CAAA,CAAI,SAAS,CAAC,CAAA,CAAA;AACpB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAI,CAAA,CAAE,MAAA,CAAA,CAAQ,MAAA,CAAO,CAAA,CAAE,OAAO,OAAO,CAAA,CAAA;AACrC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAQ,MAAM,CAAA,CAAE,IAAA,CAAK,OAAO,CAAA,CAAA,CAAA,CAAA,CAAM,IAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACpC,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACA,MAAM,IAAA,CAAK,CAAA,CAAA,CAAW,SAAA,CAAA,CAAsC,CAAA;AAC1D,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAM,CAAA,CAAA,CAAA,CAAI,SAAS,CAAC,CAAA,CAAA;AACpB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAO,EAAE,IAAA,CAAA,CAAA,CAAO,KAAA,CAAM,EAAE,IAAA,CAAK,SAAS,IAAI,CAAA,CAAC,CAAA;AAAA,CAAA,CAAA,CAAA,CAC7C,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACA,KAAA,CAAM,KAAK,CAAA,CAAA,CAA0B,CAAA;AACnC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAM,QAAA,CAAS,CAAC,CAAA,CAAG,IAAA,CAAA,CAAA,CAAA,CAAO,CAAA;AAAA,CAAA,CAAA,CAAA,CAC5B,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACA,KAAA,CAAM,QAAQ,CAAA,CAAA,CAA0B,CAAA;AACtC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAM,QAAA,CAAS,CAAC,CAAA,CAAG,OAAA,CAAA,CAAA,CAAA,CAAU,CAAA;AAAA,CAAA,CAAA,CAAA,CAC/B,CAAA;AAAA,CAAA,CAAA,CACF,CAAA;AACF,CAAA;AAEA,KAAA,CAAA,QAAA,CAAe,kBAAA,CACb,EAAA,CAAA,CACA,MAAA,CAAA,CACA,QAAA,CAAA,CACA,qBAAqB,KAAA,CAAA,CACE,CAAA;AAEvB,CAAA,CAAA,KAAA,CAAM,MAAA,CAAA,CAAA,CAAS,GAAA,CAAI,MAAA,CAAO,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,CAAA,CAAA,CAAA,2SAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,QAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,OAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,aAAA,CAAA,UAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,sBAAA,CAAA,CAAA,CAAA,CAAA,sBAAA,CAAA,OAAA,CAAA,WAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CAAA,CAAA,CAAA,CAAA,sBAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,CAAA,QAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAsC,CAAA,CAAG,CAAA;AAAA,CAAA,CAAA,CAAA,CACjE,IAAA,EAAM,CAAA,MAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACN,IAAA,CAAA,CAAM,CAAA,OAAA,CAAA,IAAA,CAAA,MAAA,CAAA;AAAA,CAAA,CAAA,CACP,CAAA,CAAA;AAGD,CAAA,CAAA,KAAA,CAAM,YAAA,CAAA,CAAA,CAAe,GAAA,CAAI,OAAA,CAAe,CAAC,GAAG,MAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAA;AACrD,CAAA,CAAA,CAAA,CAAA,MAAA,CAAO,gBAAA,CAAiB,OAAA,CAAA,CAAS,CAAC,KAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA;AAC1C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAM,GAAA,CAAA,CAAA,CAAO,MAAqB,OAAA,IAAW,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,CAAA,IAAA,CAAA,CAAA;AAC7C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAO,GAAA,CAAI,KAAA,CAAM,CAAA,OAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,KAAA,CAAA,CAAA,CAAA,CAAsC,GAAG,EAAE,CAAC,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAC/D,CAAC,CAAA,CAAA;AAAA,CAAA,CACH,CAAC,CAAA,CAAA;AACD,CAAA,CAAA,KAAA,CAAM,GAAA,CAAA,CAAA,CAAMC,kBAAA,CAAQ,IAAA,CAAgB,MAAM,CAAA,CAAA;AAI1C,CAAA,CAAA,KAAA,CAAM,CAAA,CAAE,GAAA,CAAA,CAAK,IAAA,EAAM,CAAA,CAAA,CAAG,iBAAgB,CAAA,CAAA,CAAI,MAAA,CAAA;AAC1C,CAAA,CAAA,KAAA,CAAM,WAAA,CAAA,CAAA,CAA6B,QAAA,CAAS,GAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA;AAAA,CAAA,CAAA,CAAA,CACtD,IAAI,CAAA,CAAE,EAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACN,OAAA,CAAA,CAAS,MAAA,CAAO,CAAA,CAAE,IAAA,KAAS,CAAA,QAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAC3B,OAAA,CAAA,CAAS,MAAA,CAAO,CAAA,CAAE,IAAA,KAAS,CAAA,QAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAC3B,UAAA,CAAA,CAAY,MAAA,CAAO,CAAA,CAAE,OAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAA,QAAA,CAAA;AAAA,CAAA,CAAA,CACnC,CAAE,CAAA,CAAA;AAEF,CAAA,CAAA,GAAA,CAAI,CAAA;AACF,CAAA,CAAA,CAAA,CAAA,KAAA,CAAM,QAAQ,IAAA,CAAK,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACjB,GAAA,CAAI,IAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACF,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACE,QAAA,EAAU,EAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACV,MAAA,EAAQ,eAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACR,WAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,CAAA,CAAA,CAAI,kBAAA,CAAA,CAAA,CAAqB,CAAA,CAAE,kBAAA,CAAA,CAAoB,IAAA,KAAS,CAAA,CAAA;AAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAC3D,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACAA,kBAAA,CAAQ,KAAA,CAAM,eAAA,CAAgB,QAAQ,CAAC,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACzC,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,YAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CACD,CAAA,CAAA;AAAA,CAAA,CACH,SAAS,GAAA,CAAA,CAAK,CAAA;AACZ,CAAA,CAAA,CAAA,CAAA,MAAA,CAAO,SAAA,CAAA,CAAU,CAAA;AACjB,CAAA,CAAA,CAAA,CAAA,MAAM,GAAA,CAAA;AAAA,CAAA,CACR,CAAA;AAEA,CAAA,CAAA,GAAA,CAAI,KAAA,CAAA,CAAA,CAAQ,IAAA,CAAA;AAIZ,CAAA,CAAA,IAAI,KAAA,CAAA,CAAA,CAA0B,QAAQ,OAAA,CAAA,CAAQ,CAAA;AAK9C,CAAA,CAAA,GAAA,CAAI,UAAgC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA;AAAA,CAAA,CAAC,CAAA,CAAA;AAC3C,CAAA,CAAA,KAAA,CAAM,MAAA,CAAA,CAAA,CAAS,GAAA,CAAI,OAAA,CAAe,CAAC,GAAG,MAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAA;AAC/C,CAAA,CAAA,CAAA,CAAA,OAAA,GAAU,MAAA,CAAA;AAAA,CAAA,CACZ,CAAC,CAAA,CAAA;AACD,CAAA,CAAA,MAAA,CAAO,MAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA;AAAA,CAAA,CAAC,CAAC,CAAA,CAAA;AAErB,CAAA,CAAA,KAAA,CAAM,SAAA,CAAA,CAAA,CAAY,CAAC,MAAA,CAAA,CAAA,CAAA,CAAA,CAAyB,CAAA;AAC1C,CAAA,CAAA,CAAA,CAAA,KAAA,GAAQ,KAAA,CAAA;AACR,CAAA,CAAA,CAAA,CAAA,MAAA,CAAO,SAAA,CAAA,CAAU,CAAA;AACjB,CAAA,CAAA,CAAA,CAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,CAAA,MAAA,CAAA,CAAA,CAAU,EAAE,CAAA,EAAA,CAAA,CAAK,MAAM,EAAE,CAAC,CAAA,CAAA;AAAA,CAAA,CAC9C,CAAA,CAAA;AAEA,CAAA,CAAA,KAAA,CAAM,KAAA,CAAA,CAAA,CAAQ,KAAA,CAAA,CAAO,OAAA,CAAA,CAAA,CAAA,CAAA,CAA4C,CAAA;AAC/D,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAI,CAAC,KAAA,CAAA,CAAO,MAAM,GAAA,CAAI,KAAA,CAAM,CAAA,OAAA,CAAA,CAAU,EAAE,CAAA,CAAA,GAAA,CAAA,IAAA,CAAA,QAAA,CAAoB,CAAA,CAAA;AAE5D,CAAA,CAAA,CAAA,CAAA,KAAA,CAAM,EAAE,MAAA,CAAA,CAAQ,GAAG,UAAA,CAAA,CAAW,GAAI,OAAA,CAAA;AAClC,CAAA,CAAA,CAAA,CAAA,IAAI,QAAQ,OAAA,CAAA,CAAS,MAAM,GAAA,CAAI,KAAA,CAAM,CAAA,OAAA,CAAA,CAAU,EAAE,CAAA,CAAA,CAAA,GAAA,CAAA,OAAA,CAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAiC,CAAA,CAAA;AAElF,CAAA,CAAA,CAAA,CAAA,IAAI,KAAA,CAAA;AAIJ,CAAA,CAAA,CAAA,CAAA,MAAM,OAAA,CAAA,CAAA,CAAU,MAAM,SAAA,CAAU,gCAAgC,CAAA,CAAA;AAChE,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CAAQ,iBAAiB,CAAA,KAAA,CAAA,CAAA,CAAS,OAAA,CAAA,CAAS,CAAA,CAAE,IAAA,CAAA,CAAM,MAAM,CAAA,CAAA;AACzD,CAAA,CAAA,CAAA,CAAA,IAAI,OAAA,CAAQ,cAAc,MAAA,CAAA,CAAW,CAAA;AACnC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,GAAQ,UAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACN,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,SAAA,CAAU,CAAA,GAAA,CAAA,QAAA,CAAA,SAAA,CAAA,CAAA,CAA0B,OAAA,CAAQ,SAAS,CAAA,CAAA,CAAA,MAAA,CAAA,UAAA,CAAqB,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAChF,OAAA,CAAQ,SAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACV,CAAA;AAAA,CAAA,CAAA,CAAA,CACF,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAI,CAAA;AACF,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAO,KAAA,CAAM,QAAQ,IAAA,CAAK,CAAC,IAAI,GAAA,CAAI,UAAU,CAAA,CAAA,CAAG,MAAM,CAAC,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACzD,CAAA,CAAA,OAAA,CAAE,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,YAAA,CAAa,KAAK,CAAA,CAAA;AAClB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CAAQ,mBAAA,CAAoB,CAAA,KAAA,GAAS,OAAO,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAC9C,CAAA;AAAA,CAAA,CACF,CAAA,CAAA;AAEA,CAAA,CAAA,MAAA,CAAO,CAAA;AAAA,CAAA,CAAA,CAAA,CACL,EAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACA,MAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACA,KAAA,CAAM,IAAI,OAAA,CAAA,CAAyC,CAAA;AACjD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAM,SAAS,KAAA,CAAM,IAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,KAAA,CAAM,OAAO,CAAC,CAAA,CAAA;AAC9C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAAQ,MAAA,CAAO,MAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA,CAAA;AAC7B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAO,MAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACT,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACA,KAAA,CAAM,OAAA,CAAA,CAAA,CAAyB,CAAA;AAC7B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAI,CAAC,KAAA,CAAA,CAAO,MAAA,CAAA;AACZ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,GAAQ,KAAA,CAAA;AACR,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAI,CAAA;AAGF,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAM,QAAQ,IAAA,CAAK,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACjB,IAAI,OAAA,CAAA,CAAQ,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACZ,GAAA,CAAI,OAAA,CAAQ,CAAC,YAAY,UAAA,CAAW,OAAA,CAAA,CAAS,gBAAgB,CAAC,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAC/D,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACH,CAAA,CAAA,OAAA,CAAE,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAO,SAAA,CAAA,CAAU,CAAA;AACjB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,CAAA,MAAA,CAAA,CAAA,CAAU,EAAE,yCAAyC,CAAC,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAC1E,CAAA;AAAA,CAAA,CAAA,CAAA,CACF,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACA,OAAA,CAAA,CAAA,CAAmB,CAAA;AACjB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAO,KAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACT,CAAA;AAAA,CAAA,CAAA,CACF,CAAA;AACF,CAAA;AAEA,KAAA,CAAA,QAAA,CAAe,qBAAA,CACb,EAAA,EACA,OAAA,CAAA,CACA,SAAA,CAAA,CACuB,CAAA;AAOvB,CAAA,CAAA,KAAA,CAAM,IAAI,KAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACR,yBAAyB,EAAE,CAAA,CAAA,OAAA,CAAA,CAAA,CAAA,GAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA,EAAA,CAAA,GAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,CAAA,OAAA,CAAA,SAAA,CAAA,OAAA,CAAA,CAAA,CAAA,OAAA,CAAA,CAAA,KAAA,CAAA,OAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,MAAA,CAAA,OAAA,CAAA,IAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAE7B,CAAA;AACF,CAAA;;AChJA,QAAA,CAAS,IAAA,CAAA,CAAA,CAAa,CAAA;AAAC,CAAA;AAEhB,QAAA,CAAS,oBAAoB,OAAA,CAAA,CAA8C,CAAA;AAChF,CAAA,CAAA,KAAA,CAAM,UAAU,IAAA,CAAK,GAAA,CAAI,CAAA,CAAA,CAAG,OAAA,CAAQ,kBAAkB,CAAC,CAAA,CAAA;AACvD,CAAA,CAAA,KAAA,CAAM,KAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,QAAA,CAAA,CAAA,CAAA,KAAY,GAAA,CAAA,CAAoB,CAAA;AACtC,CAAA,CAAA,GAAA,CAAI,KAAA,CAAA,CAAA,CAAQ,CAAA,CAAA;AAEZ,CAAA,CAAA,QAAA,CAAS,IAAI,EAAA,CAAA,CAAoB,CAAA;AAC/B,CAAA,CAAA,CAAA,CAAA,KAAA,CAAM,QAAA,CAAA,CAAA,CAAW,KAAA,CAAM,GAAA,CAAI,EAAE,CAAA,CAAA;AAC7B,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAI,QAAA,CAAA,CAAU,CAAA;AACZ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,QAAA,CAAS,WAAW,EAAE,KAAA,CAAA;AACtB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAO,QAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACT,CAAA;AAIA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAM,UAAU,SAAA,CAAA,CAAU,CAAA;AAC1B,CAAA,CAAA,CAAA,CAAA,OAAA,CAAQ,SAAS,EAAE,CAAA,CAAA;AACnB,CAAA,CAAA,CAAA,CAAA,MAAM,OAAA,CAAA,CAAA,CAAU,OAAA,CAAQ,IAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,YAAA,CAAa,IAAI,OAAA,CAAQ,MAAA,CAAO,EAAE,CAAC,CAAC,CAAA,CAAA;AACvE,CAAA,CAAA,CAAA,CAAA,KAAA,CAAM,IAAA,CAAA,CAAA,CAAa,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACjB,OAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,MAAA,CAAA,CAAQ,QAAQ,IAAA,CAAK,CAAC,WAAW,KAAA,CAAM,EAAA,CAAA,CAAI,MAAM,CAAC,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAClD,OAAA,EAAS,IAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACT,IAAA,EAAM,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACN,UAAU,CAAA,CAAE,KAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CACd,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAM,GAAA,CAAI,IAAI,IAAI,CAAA,CAAA;AAClB,CAAA,CAAA,CAAA,CAAA,OAAA,CAAQ,IAAA,CAAK,CAAC,MAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAA;AACvB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAK,OAAA,CAAA,CAAA,CAAU,MAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACjB,GAAG,IAAI,CAAA,CAAA;AAEP,CAAA,CAAA,CAAA,CAAA,KAAA,CAAM,SAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA;AACnB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAI,MAAM,GAAA,CAAI,EAAE,MAAM,IAAA,EAAM,KAAA,CAAM,OAAO,EAAE,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAC7C,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,OAAA,CAAQ,MAAM,MAAM,CAAA,CAAA;AACpB,CAAA,CAAA,CAAA,CAAA,IAAA,CAAK,MAAA,CAAO,MAAM,MAAM,CAAA,CAAA;AACxB,CAAA,CAAA,CAAA,CAAA,OAAO,IAAA,CAAA;AAAA,CAAA,CACT,CAAA;AAQA,CAAA,CAAA,QAAA,CAAS,SAAA,CAAA,CAAA,CAA2B,CAAA;AAClC,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAI,KAAA,CAAM,IAAA,CAAA,CAAA,CAAO,OAAA,CAAA,CAAS,MAAA,CAAO,QAAQ,OAAA,CAAA,CAAQ,CAAA;AACjD,CAAA,CAAA,CAAA,CAAA,GAAA,CAAI,MAAA,CAAA,CAAA,CAA0B,IAAA,CAAA;AAC9B,CAAA,CAAA,CAAA,CAAA,GAAA,CAAI,MAAA,CAAA,CAAA,CAAS,QAAA,CAAA;AACb,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,MAAW,CAAC,EAAA,EAAIC,KAAI,CAAA,CAAA,EAAA,CAAK,KAAA,CAAA,CAAO,CAAA;AAC9B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAIA,KAAAA,CAAK,IAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAKA,KAAAA,CAAK,WAAW,MAAA,CAAA,CAAQ,CAAA;AAC7C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CAAA,CAASA,KAAAA,CAAK,QAAA,CAAA;AACd,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,GAAS,EAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACX,CAAA;AAAA,CAAA,CAAA,CAAA,CACF,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAI,CAAC,MAAA,CAAA,CAAQ,OAAO,OAAA,CAAQ,OAAA,CAAA,CAAQ,CAAA;AACpC,CAAA,CAAA,CAAA,CAAA,KAAA,CAAM,IAAA,CAAA,CAAA,CAAO,KAAA,CAAM,GAAA,CAAI,MAAM,CAAA,CAAA;AAC7B,CAAA,CAAA,CAAA,CAAA,KAAA,CAAM,OAAO,MAAM,CAAA,CAAA;AACnB,CAAA,CAAA,CAAA,CAAA,OAAA,CAAQ,UAAU,MAAM,CAAA,CAAA;AACxB,CAAA,CAAA,CAAA,CAAA,MAAA,CAAO,KAAK,OAAA,CAAQ,IAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAClB,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAE,OAAA,CAAA,CAAQ,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACjB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,KAAA,CAAA,MAAA,CAAA,GAAA,CAAA,OAAA,CAAA,EAAA,CAAA,OAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CACT,CAAA;AAAA,CAAA,CACF,CAAA;AAaA,CAAA,CAAA,SAAS,KAAA,CAAM,IAAc,MAAA,CAAA,CAAoC,CAAA;AAC/D,CAAA,CAAA,CAAA,CAAA,MAAA,CAAO,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACL,IAAI,MAAA,CAAO,EAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACX,QAAQ,MAAA,CAAO,MAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACf,KAAA,CAAM,IAAI,UAAA,CAAA,CAA4C,CAAA;AACpD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAM,IAAA,CAAA,CAAA,CAAO,IAAI,EAAE,CAAA,CAAA;AACnB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAK,IAAA,CAAA,CAAA,CAAA;AACL,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAI,CAAA;AACF,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAM,IAAA,CAAA,CAAA,CAAO,KAAA,CAAM,IAAA,CAAK,OAAA,CAAA;AACxB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAO,KAAA,CAAM,IAAA,CAAK,GAAA,CAAI,UAAU,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAClC,CAAA,CAAA,OAAA,CAAE,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAK,IAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACP,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACF,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,GAAA,CAAA,MAAA,CAAA,MAAA,CAAA,GAAA,CAAA,OAAA,CAAA,CAAA,CAAA,IAAA,CAAA,KAAA,CAAA,KAAA,CAAA,GAAA,CAAA,IAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,CAAA,IAAA,CAAA,MAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAGA,OAAA,EAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,EAAE,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,GAAA,CAAA,GAAA,CAAA,MAAA,CAAA,GAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,CAAA,GAAA,CAAA,GAAA,CAAA,MAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,KAAA,CAAA,GAAA,CAAA,MAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,GAAA,CAAA,GAAA,CAAA,IAAA,CAAA,IAAA,CAAA,OAAA,CAAA,KAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,KAAA,CAAA,aAAA,CAAA,MAAA,CAAA,EAAA,CAAA,CAAA,SAAA,CAAA,GAAA,CAAA,IAAA,CAAA,MAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,KAAA,CAAA,CAAA,GAAA,CAAA,KAAA,CAAA,CAAA,OAAA,CAAA,KAAA,CAAA,EAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,OAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAMjC,OAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,KAAA,CAAM,GAAA,CAAI,EAAE,CAAA,CAAA,CAAG,OAAA,CAAA,CAAS,SAAQ,CAAA,CAAA,CAAA,CAAK,KAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CACtD,CAAA;AAAA,CAAA,CACF,CAAA;AAEA,CAAA,CAAA,KAAA,CAAM,OAAA,CAAA,CAAA,CAAyB,CAAA;AAAA,CAAA,CAAA,CAAA,CAC7B,MAAA,CAAA,CAAQ,CAAC,EAAA,CAAA,CAAA,CAAA,CAAA,CAAO,GAAA,CAAI,EAAE,CAAA,CAAE,MAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAExB,MAAM,WAAA,CAAY,GAAA,CAAA,CAAK,EAAA,CAAA,CAAI,CAAA;AAGzB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAM,MAAA,CAAA,CAAA,CAAS,GAAA,CAAI,GAAA,CAAI,CAAC,EAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA;AAC7B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAM,IAAA,CAAA,CAAA,CAAO,IAAI,EAAE,CAAA,CAAA;AACnB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAK,IAAA,CAAA,CAAA,CAAA;AACL,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAO,IAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACT,CAAC,CAAA,CAAA;AACD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAI,CAAA;AACF,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAM,OAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,QAAA,CAAA,CAAA,CAAA,KAAc,GAAA,CAAA,CAA4B,CAAA;AAChD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,GAAA,CAAS,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAI,GAAA,CAAI,QAAQ,CAAA,EAAA,CAAA,CAAK,CAAA;AACnC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAC,CAAA,CAAA,CAAI,KAAA,CAAM,MAAA,CAAO,CAAC,EAAG,MAAM,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAC9C,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAO,KAAA,CAAM,GAAG,OAAO,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACzB,CAAA,CAAA,OAAA,CAAE,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,MAAW,IAAA,CAAA,EAAA,CAAQ,QAAQ,IAAA,CAAK,IAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAClC,CAAA;AAAA,CAAA,CAAA,CAAA,CACF,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAEA,MAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,GAAG,KAAA,CAAM,MAAM,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAE5B,KAAA,CAAM,QAAQ,EAAA,CAAA,CAAI,CAAA;AAChB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAM,OAAA,CAAA,CAAA,CAAU,KAAK,CAAC,EAAE,IAAI,CAAC,CAAA,CAAA,CAAG,KAAA,CAAM,IAAA,EAAM,CAAA,CAAA;AAC5C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAM,OAAA,CAAQ,UAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACZ,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA;AACjB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAM,IAAA,CAAA,CAAA,CAAO,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,CAAA;AACxB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAI,CAAC,IAAA,CAAA,CAAM,OAAO,OAAA,CAAQ,OAAA,CAAA,CAAQ,CAAA;AAClC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAM,OAAO,CAAC,CAAA,CAAA;AACd,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAO,KAAK,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAE,SAAS,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAC7C,CAAC,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACH,CAAA;AAAA,CAAA,CAAA,CAAA,CACF,CAAA;AAAA,CAAA,CAAA,CACF,CAAA;AAEA,CAAA,CAAA,OAAO,OAAA,CAAA;AACT,CAAA;;ACpLO,KAAA,CAAM,sBAAA,CAAA,CAAA,CAAyB,GAAA,CAAA;AAe/B,QAAA,CAAS,SAAS,OAAA,CAAA,CAA+B,CAAA;AACtD,CAAA,CAAA,MAAA,CAAO,CAAA;AAAA,CAAA,CAAA,CAAA,CACL,CAAA,CAAA,CAAI,QAAQ,SAAA,KAAc,IAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAA,CAAE,SAAA,EAAW,OAAA,CAAQ,SAAA,CAAA,CAAU,GAAI,CAAA,CAAC,CAAA;AAAA,CAAA,CAAA,CAAA,CAC1E,CAAA,CAAA,CAAI,QAAQ,MAAA,KAAW,IAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAA,CAAE,MAAA,CAAA,CAAQ,OAAA,CAAQ,MAAA,EAAO,CAAA,CAAA,CAAI,CAAA,CAAA;AAAC,CAAA,CAAA,CACnE,CAAA;AACF,CAAA;AAEO,KAAA,CAAe,iBAAA,CAAkB,CAAA;AAAA,CAAA,CAItC,WAAA,CAAsB,OAAA,CAAA,CAAA,CAAgC,EAAC,CAAA,CAAG,CAAA;AAApC,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CAAA,CAAA,OAAA,CAAA;AACpB,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAI,OAAA,CAAQ,MAAA,CAAA,CAAQ,IAAA,CAAK,MAAA,CAAA,CAAA,CAAS,OAAA,CAAQ,MAAA,CAAA;AAAA,CAAA,CAC5C,CAAA;AAAA,CAAA,CAJU,MAAA,GAA8B,IAAA,CAAA;AAAA,CAAA,CAMxC,KAAA,CAAgB,YAAA,CAAA,CAAA,CAAsC,CAAA;AACpD,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAI,IAAA,CAAK,MAAA,EAAQ,MAAA,CAAO,IAAA,CAAK,MAAA,CAAA;AAC7B,CAAA,CAAA,CAAA,CAAA,KAAA,CAAM,CAAA,CAAE,MAAA,CAAA,CAAQ,QAAA,CAAA,CAAU,CAAA,CAAA,CAAG,MAAA,CAAA,IAAW,IAAA,CAAK,OAAA,CAAA;AAE7C,CAAA,CAAA,CAAA,CAAA,IAAA,CAAK,MAAA,CAAA,CAAA,CAAS,KAAA,CAAM,YAAA,CAAa,IAAA,CAAK,UAAU,MAAM,CAAA,CAAA;AACtD,CAAA,CAAA,CAAA,CAAA,MAAA,CAAO,IAAA,CAAK,MAAA,CAAA;AAAA,CAAA,CACd,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,GAAA,CAAA,MAAA,CAAA,EAAA,CAAA,IAAA,CAAA,OAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAGA,KAAA,CAAM,OAAA,CAAA,CAAA,CAAyB,CAAA;AAE7B,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAI,IAAA,CAAK,MAAA,CAAA,CAAA,CAAA,CAAU,CAAC,IAAA,CAAK,QAAQ,MAAA,CAAA,CAAQ,CAAA;AACvC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAM,IAAA,CAAK,OAAO,OAAA,CAAA,CAAQ,CAAA;AAC1B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAK,MAAA,CAAA,CAAA,CAAS,IAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAChB,CAAA;AAAA,CAAA,CACF,CAAA;AAAA,CAAA,CAEA,KAAA,CAAgB,MAAA,CACd,IAAA,CAAA,CACA,KAAA,CAAA,CACA,KAAA,CAAA,CAAA,CAAoE,CAAA,CAAC,CAAA,CACjD,CAAA;AACpB,CAAA,CAAA,CAAA,CAAA,MAAM,MAAA,CAAA,CAAA,CAAS,MAAM,IAAA,CAAK,YAAA,CAAA,CAAa,CAAA;AACvC,CAAA,CAAA,CAAA,CAAA,KAAA,CAAM,IAAA,CAAA,CAAA,CAAmB,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACvB,IAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,KAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,GAAA,CAAA,CAAK,MAAM,GAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,OAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CACpB,CAAA;AAGA,CAAA,CAAA,CAAA,CAAA,MAAM,SAAA,CAAA,CAAA,CAAY,MAAM,SAAA,IAAa,sBAAA,CAAA;AACrC,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAI,SAAA,CAAA,CAAA,CAAY,CAAA,EAAG,IAAA,CAAK,SAAA,CAAA,CAAA,CAAY,SAAA,CAAA;AACpC,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAI,KAAA,CAAM,MAAA,CAAA,CAAA,CAAA,CAAA,CAAW,IAAA,CAAA,CAAA,CAAA,CAAW,IAAA,CAAK,SAAS,KAAA,CAAM,MAAA,CAAA;AACpD,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAI,KAAA,CAAM,GAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,IAAA,CAAA,CAAA,CAAA,CAAW,IAAA,CAAK,MAAM,KAAA,CAAM,GAAA,CAAA;AAC9C,CAAA,CAAA,CAAA,CAAA,OAAO,MAAA,CAAO,IAAI,IAAI,CAAA,CAAA;AAAA,CAAA,CACxB,CAAA;AACF,CAAA;;AC/EO,KAAA,CAAM,iBAAiB,iBAAA,CAAkB,CAAA;AAAA,CAAA,CAC3B,QAAA,GAAqB,CAAA,QAAA,CAAA,CAAA;AAAA,CAAA,CAExC,KAAA,CAAM,QAAQ,OAAA,CAAA,CAAqD,CAAA;AACjE,CAAA,CAAA,CAAA,CAAA,KAAA,CAAM,IAAA,CAAA,CAAA,CAAiB,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACrB,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,MAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,CAAA,cAAA,CAAA,CAAiB,OAAA,CAAQ,WAAA,CAAA,CAAA,CAAA,CAAe,CAAA,WAAA,CAAa,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACrD,CAAA,CAAA,CAAI,OAAA,CAAQ,WAAA,CAAA,CAAA,CAAA,CAAA,CAAgB,QAAQ,CAAC,CAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,KAAA,CAAiB,IAAI,CAAA,CAAC,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAC3D,CAAA,gBAAA,CAAA,CAAmB,OAAA,CAAQ,YAAA,CAAA,CAAA,CAAA,CAAgB,CAAA,GAAA,CAAK,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAChD,CAAA,CAAA,CAAI,OAAA,CAAQ,SAAA,IAAa,CAAA,CAAC,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAC1B,OAAA,CAAQ,OAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CACV,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,OAAO,IAAA,CAAK,OAAO,IAAA,CAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,CAAC,CAAA,CAAG,QAAA,CAAS,OAAO,CAAC,CAAA,CAAA;AAAA,CAAA,CACjE,CAAA;AACF,CAAA;;ACZO,KAAA,CAAM,gBAAgB,iBAAA,CAAkB,CAAA;AAAA,CAAA,CAC1B,QAAA,GAAqB,CAAA,OAAA,CAAA,CAAA;AAAA,CAAA,CAExC,KAAA,CAAM,QAAQ,OAAA,CAAA,CAAoD,CAAA;AAChE,CAAA,CAAA,CAAA,CAAA,KAAA,CAAM,IAAA,CAAA,CAAA,CAAiB,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACrB,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,MAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,CAAA,cAAA,CAAA,CAAiB,OAAA,CAAQ,WAAA,CAAA,CAAA,CAAA,CAAe,CAAA,WAAA,CAAa,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACrD,CAAA,CAAA,CAAI,OAAA,CAAQ,WAAA,CAAA,CAAA,CAAA,CAAA,CAAgB,QAAQ,CAAC,CAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,KAAA,CAAiB,IAAI,CAAA,CAAC,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAC3D,CAAA,CAAA,CAAI,OAAA,CAAQ,KAAA,CAAA,CAAA,CAAA,CAAA,CAAU,QAAQ,CAAC,CAAA,CAAA,CAAA,EAAA,CAAA,GAAA,CAAU,IAAI,CAAA,CAAC,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAC9C,CAAA,CAAA,CAAI,OAAA,CAAQ,SAAA,IAAa,CAAA,CAAC,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAC1B,OAAA,CAAQ,OAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CACV,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,OAAO,IAAA,CAAK,OAAO,IAAA,CAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,CAAC,CAAA,CAAG,QAAA,CAAS,OAAO,CAAC,CAAA,CAAA;AAAA,CAAA,CACjE,CAAA;AACF,CAAA;;ACrBO,KAAA,CAAM,iBAAiB,iBAAA,CAAkB,CAAA;AAAA,CAAA,CAC3B,QAAA,GAAqB,CAAA,QAAA,CAAA,CAAA;AAAA,CAAA,CAExC,KAAA,CAAM,QAAQ,OAAA,CAAA,CAAqD,CAAA;AACjE,CAAA,CAAA,CAAA,CAAA,KAAA,CAAM,IAAA,CAAA,CAAA,CAAiB,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACrB,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,MAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,CAAA,cAAA,CAAA,CAAiB,OAAA,CAAQ,WAAA,CAAA,CAAA,CAAA,CAAe,CAAA,WAAA,CAAa,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACrD,CAAA,CAAA,CAAI,OAAA,CAAQ,WAAA,CAAA,CAAA,CAAA,CAAA,CAAgB,QAAQ,CAAC,CAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,KAAA,CAAiB,IAAI,CAAA,CAAC,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAC3D,CAAA,CAAA,CAAI,OAAA,CAAQ,QAAA,CAAA,CAAA,CAAA,CAAA,CAAa,QAAQ,CAAC,CAAA,CAAA,CAAA,QAAA,CAAY,IAAI,CAAA,CAAC,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACnD,CAAA,CAAA,CAAI,OAAA,CAAQ,SAAA,IAAa,CAAA,CAAC,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAC1B,OAAA,CAAQ,OAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CACV,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,OAAO,IAAA,CAAK,OAAO,IAAA,CAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,CAAC,CAAA,CAAG,QAAA,CAAS,OAAO,CAAC,CAAA,CAAA;AAAA,CAAA,CACjE,CAAA;AACF,CAAA;;ACZO,KAAA,CAAM,gBAAgB,iBAAA,CAAkB,CAAA;AAAA,CAAA,CAC1B,QAAA,GAAqB,CAAA,OAAA,CAAA,CAAA;AAAA,CAAA,CAExC,KAAA,CAAM,IAAI,OAAA,CAAA,CAA6C,CAAA;AACrD,CAAA,CAAA,CAAA,CAAA,KAAA,CAAM,IAAA,CAAA,CAAA,CAAiB,CAAC,GAAI,OAAA,CAAQ,aAAa,CAAA,CAAC,CAAA,CAAI,QAAQ,OAAO,CAAA,CAAA;AACrE,CAAA,CAAA,CAAA,CAAA,OAAO,IAAA,CAAK,OAAO,IAAA,CAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,CAAC,CAAA,CAAG,QAAA,CAAS,OAAO,CAAC,CAAA,CAAA;AAAA,CAAA,CACjE,CAAA;AACF,CAAA;;ACKO,KAAA,CAAM,cAAc,iBAAA,CAAkB,CAAA;AAAA,CAAA,CACxB,QAAA,GAAqB,CAAA,KAAA,CAAA,CAAA;AAAA,CAAA,CAExC,KAAA,CAAM,IAAI,OAAA,CAAA,CAA2C,CAAA;AACnD,CAAA,CAAA,CAAA,CAAA,KAAA,CAAM,OAAA,CAAA,CAAA,CAAU,OAAA,CAAQ,OAAA,CAAQ,OAAA,CAAQ,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,GAAW,CAAA,CAAE,CAAA,CAAA;AACrD,CAAA,CAAA,CAAA,CAAA,MAAM,IAAA,CAAA,CAAA,CAAO,CAAC,CAAA,CAAA,KAAA,CAAA,GAAA,CAAA,KAAA,CAAA,EAAoB,CAAA,CAAA,CAAA,MAAA,CAAA,CAAA,CAAY,CAAA,CAAA,CAAI,OAAA,CAAQ,SAAA,CAAA,CAAA,CAAA,CAAa,CAAA,CAAC,CAAA,CAAI,OAAO,CAAA,CAAA;AACnF,CAAA,CAAA,CAAA,CAAA,OAAO,IAAA,CAAK,OAAO,IAAA,CAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,CAAC,CAAA,CAAG,QAAA,CAAS,OAAO,CAAC,CAAA,CAAA;AAAA,CAAA,CACjE,CAAA;AACF,CAAA;;ACrBO,KAAA,CAAM,kBAAkB,iBAAA,CAAkB,CAAA;AAAA,CAAA,CAC5B,QAAA,GAAqB,CAAA,SAAA,CAAA,CAAA;AAAA,CAAA,CAExC,KAAA,CAAM,IAAI,OAAA,CAAA,CAA+C,CAAA;AACvD,CAAA,CAAA,CAAA,CAAA,KAAA,CAAM,IAAA,CAAA,CAAA,CAAiB,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACrB,CAAA,CAAA,CAAI,QAAQ,KAAA,CAAA,CAAA,CAAQ,CAAC,CAAA,CAAA,CAAA,GAAM,OAAA,CAAQ,KAAK,IAAI,CAAA,CAAC,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAC7C,CAAA,CAAA,CAAI,QAAQ,MAAA,CAAA,CAAA,CAAS,CAAC,CAAA,CAAA,CAAA,GAAM,OAAA,CAAQ,MAAM,IAAI,CAAA,CAAC,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAC/C,CAAA,CAAA,CAAI,OAAA,CAAQ,SAAA,IAAa,CAAA,CAAC,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAC1B,OAAA,CAAQ,OAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CACV,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,OAAO,IAAA,CAAK,OAAO,IAAA,CAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,CAAC,CAAA,CAAG,QAAA,CAAS,OAAO,CAAC,CAAA,CAAA;AAAA,CAAA,CACjE,CAAA;AACF,CAAA;;ACdO,KAAA,CAAM,kBAAkB,iBAAA,CAAkB,CAAA;AAAA,CAAA,CAC5B,QAAA,GAAqB,CAAA,SAAA,CAAA,CAAA;AAAA,CAAA,CAExC,KAAA,CAAM,IAAI,OAAA,CAAA,CAA+C,CAAA;AACvD,CAAA,CAAA,CAAA,CAAA,KAAA,CAAM,IAAA,CAAA,CAAA,CAAiB,CAAC,IAAA,CAAA,CAAM,OAAA,CAAQ,GAAA,CAAA,CAAK,GAAI,OAAA,CAAQ,SAAA,CAAA,CAAA,CAAA,CAAa,CAAA,CAAC,EAAI,OAAA,CAAQ,GAAG,CAAA,CAAA;AACpF,CAAA,CAAA,CAAA,CAAA,OAAO,IAAA,CAAK,OAAO,IAAA,CAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,CAAC,CAAA,CAAG,QAAA,CAAS,OAAO,CAAC,CAAA,CAAA;AAAA,CAAA,CACjE,CAAA;AACF,CAAA;;ACuFA,KAAA,CAAM,cAAA,CAAA,CAAA,CAAiB,CAAA;AAAA,CAAA,CACrB,CAAA,KAAA,CAAA,EAAA,CAAA,GAAA,CAAA,KAAA,CAAA,UAAA,CAAA,KAAA,CAAA,CAAA;AAAA,CAAA,CACA,CAAA,KAAA,CAAA,EAAA,CAAA,GAAA,CAAA,SAAA,CAAA,OAAA,CAAA,CAAA;AAAA,CAAA,CACA,CAAA,KAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CAAA;AAAA,CAAA,CACA,CAAA,EAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA;AAAA,CAAA,CACA,CAAA,OAAA,CAAA,cAAA,CAAA,OAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,QAAA,CAAA,CAAA,CAAA,OAAA,CAAA,KAAA,CAAA,OAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,MAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAAA;AAAA,CAAA,CAEA,CAAA,MAAA,CAAA,KAAA,CAAA,KAAA,CAAA,CAAA;AAAA,CAAA,CACA,CAAA,MAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,GAAA,CAAA,KAAA,CAAA;AACF,CAAA,CAAA;AAEA,KAAA,CAAM,kBAAA,GAAqB,CAAA,CAAA;AAG3B,KAAA,CAAM,mBAAA,GAAsB,CAAA,CAAA;AAE5B,KAAA,CAAA,QAAA,CAAsB,QAAQ,IAAA,CAAA,CAA8C,CAAA;AAC1E,CAAA,CAAA,KAAA,CAAM,WAAW,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAA,CAAE,OAAA,CAAQ,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,GAAW,EAAE,CAAA,CAAA;AAGvD,CAAA,CAAA,MAAM,IAAA,CAAA,CAAA,CAAO,SAAS,IAAA,CAAK,OAAO,EAAE,KAAA,CAAM,CAAA,CAAA,CAAG,EAAE,GAAA,CAAA,CAAI,CAAA;AACnD,CAAA,CAAA,KAAA,CAAM,OAAA,CAAA,CAAA,CAAU,GAAG,IAAI,CAAA,IAAA,CAAA,CAAA;AACvB,CAAA,CAAA,KAAA,CAAM,OAAA,CAAA,CAAA,CAAU,GAAG,IAAI,CAAA,IAAA,CAAA,CAAA;AACvB,CAAA,CAAA,KAAA,CAAM,OAAA,CAAA,CAAA,CAAU,GAAG,IAAI,CAAA,IAAA,CAAA,CAAA;AACvB,CAAA,CAAA,KAAA,CAAM,OAAA,CAAA,CAAA,CAAU,GAAG,IAAI,CAAA,IAAA,CAAA,CAAA;AACvB,CAAA,CAAA,KAAA,CAAM,OAAA,CAAA,CAAA,CAAU,GAAG,IAAI,CAAA,IAAA,CAAA,CAAA;AACvB,CAAA,CAAA,KAAA,CAAM,OAAA,CAAA,CAAA,CAAU,GAAG,IAAI,CAAA,IAAA,CAAA,CAAA;AACvB,CAAA,CAAA,KAAA,CAAM,WAAA,CAAA,CAAA,CAAc,GAAG,IAAI,CAAA,WAAA,CAAA,CAAA;AAE3B,CAAA,CAAA,KAAA,CAAM,OAAmB,CAAA,CAAC,CAAA;AAC1B,CAAA,CAAA,MAAM,OAAA,CAAA,CAAA,CAAU,KAAK,MAAA,KAAW,CAAA,OAAA,CAAA,CAAA;AAEhC,CAAA,CAAA,KAAA,CAAM,YAAA,CAAA,CAAA,CAAe,YAAA,CAAa,IAAA,CAAK,KAAK,CAAA,CAAA;AAE5C,CAAA,CAAA,MAAM,SAAA,CAAA,CAAA,CAAY,KAAK,KAAA,IAAS,CAAA,IAAA,CAAA,CAAA;AAChC,CAAA,CAAA,KAAA,CAAM,SAAA,CAAA,CAAA,CACJ,SAAA,CAAA,CAAA,CAAA,CAAA,CAAc,KAAA,CAAA,CAAA,CACV,CAAA,CAAA,CAAA,CACA,MAAA,CAAO,SAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAA,MAAA,CAAA,CAAA,CAAA,CACnB,IAAA,CAAK,GAAA,CAAI,CAAA,CAAA,CAAG,SAAA,CAAU,SAAS,CAAA,CAAA,CAAA,CAC/B,eACE,mBAAA,GACA,kBAAA,CAAA;AAGV,CAAA,CAAA,MAAM,UAAA,CAAA,CAAA,CAAa,YAAY,IAAA,CAAK,MAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,YAAA,CAAa,IAAA,CAAK,KAAA,CAAA,CAAO,YAAY,CAAC,CAAA,CAAA;AAGxF,CAAA,CAAA,KAAA,CAAM,SAAA,CAAA,CAAA,CACJ,CAAC,UAAA,CAAA,CAAA,CAAA,CACD,WAAA,CAAY,IAAA,CAAK,KAAA,EAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,YAAA,IAAgB,CAAC,uBAAA,CAAwB,IAAA,CAAK,KAAK,CAAC,CAAA,CAAA;AACpF,CAAA,CAAA,MAAM,aAAA,CAAA,CAAA,CAAgB,YAAY,IAAA,CAAK,SAAA,CAAA,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,eAAA,CAAgB,IAAA,CAAK,KAAK,CAAC,CAAA,CAAA;AAEnF,CAAA,CAAA,KAAA,CAAM,eAAe,IAAA,CAAK,OAAA,CAAA,CAAA,CAAU,CAAC,CAAA,CAAA,OAAA,CAAA,CAAA,CAAY,IAAI,CAAA,CAAC,CAAA;AAEtD,CAAA,CAAA,GAAA,CAAI,OAAA,CAAA,CAAA,CAAyB,IAAA,CAAA;AAC7B,CAAA,CAAA,GAAA,CAAI,OAAA,CAAA,CAAA,CAAyB,IAAA,CAAA;AAC7B,CAAA,CAAA,GAAA,CAAI,OAAA,CAAA,CAAA,CAAyB,IAAA,CAAA;AAC7B,CAAA,CAAA,GAAA,CAAI,IAAA,CAAA,CAAA,CAAO,CAAA,CAAA;AACX,CAAA,CAAA,GAAA,CAAI,QAAA,CAAA,CAAA,CAAW,CAAA,CAAA;AACf,CAAA,CAAA,GAAA,CAAI,OAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,QAAA,CAAA,CAAA,CAAA,KAAc,GAAA,CAAA,CAAwB,CAAA;AAK1C,CAAA,CAAA,KAAA,CAAM,cAAc,CAAA,CAAA,CAAA,CAAA,CAAA,CAAmB,CAAA;AACrC,CAAA,CAAA,CAAA,CAAA,KAAA,CAAM,MAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,QAAA,CAAA,CAAA,CAAA,KAAa,GAAA,CAAA,CAAuB,CAAA;AAC1C,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,KAAA,CAAW,CAAA,CAAA,EAAA,CAAK,IAAA,CAAK,KAAA,CAAA,CAAO,MAAA,CAAO,GAAA,CAAI,CAAA,CAAE,IAAA,CAAK,OAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAQ,CAAA,CAAE,CAAA,CAAA,CAAG,CAAC,CAAA,CAAA;AACpE,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,MAAW,CAAC,IAAA,EAAM,OAAO,CAAA,IAAK,OAAA,CAAA,CAAS,MAAA,CAAO,GAAA,CAAI,IAAA,CAAA,CAAM,EAAE,IAAA,CAAA,CAAM,OAAA,CAAA,CAAS,CAAA,CAAA;AACzE,CAAA,CAAA,CAAA,CAAA,OAAO,CAAC,CAAA,CAAA,CAAG,MAAA,CAAO,MAAA,EAAQ,CAAA,CAAA;AAAA,CAAA,CAC5B,CAAA,CAAA;AAEA,CAAA,CAAA,MAAM,GAAA,CAAA,CAAA,CAAM,eAAe,IAAI,CAAA,CAAA;AAG/B,CAAA,CAAA,GAAA,CAAI,aAAA,CAAA,CAAA,CAAgC,IAAA,CAAA;AACpC,CAAA,CAAA,GAAA,CAAI,YAAA,CAAA,CAAA,CAA6B,IAAA,CAAA;AACjC,CAAA,CAAA,GAAA,CAAI,gBAAA,CAAA,CAAA,CAAqC,IAAA,CAAA;AACzC,CAAA,CAAA,GAAA,CAAI,gBAAA,CAAA,CAAA,CAAqC,IAAA,CAAA;AAEzC,CAAA,CAAA,MAAM,OAAA,CAAA,CAAA,CAAU,CAAC,GAAA,CAAA,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiB,CAAA;AAC7C,CAAA,CAAA,CAAA,CAAA,IAAA,CAAK,IAAA,CAAK,CAAA,CAAE,GAAA,CAAA,CAAK,QAAA,CAAA,CAAU,EAAE,QAAA,EAAU,MAAA,CAAA,CAAQ,CAAA,CAAE,MAAA,CAAA,CAAQ,QAAQ,CAAA,CAAE,MAAA,CAAA,CAAQ,GAAA,CAAA,CAAK,CAAA,CAAE,KAAK,CAAA,CAAA;AAAA,CAAA,CACzF,CAAA,CAAA;AAIA,CAAA,CAAA,MAAM,QAAA,CAAA,CAAA,CAAW,KAAK,SAAA,KAAc,IAAA,CAAA,CAAA,CAAA,CAAA,CAAY,YAAY,GAAA,CAAA,CAAI,CAAA,CAAA,CAAI,KAAK,SAAA,GAAY,IAAA,CAAA;AACrF,CAAA,CAAA,KAAA,CAAM,SAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiB,CAAA;AAC9B,CAAA,CAAA,CAAA,CAAA,KAAA,CAAM,SAAoB,CAAA,CAAC,CAAA;AAC3B,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAI,IAAA,CAAK,MAAA,CAAA,CAAQ,MAAA,CAAO,MAAA,CAAA,CAAA,CAAS,IAAA,CAAK,MAAA,CAAA;AACtC,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAI,aAAa,IAAA,CAAA,CAAM,CAAA;AACrB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAM,OAAO,IAAA,CAAK,IAAA,CAAK,QAAA,CAAA,CAAA,CAAW,WAAA,CAAY,KAAK,CAAA,CAAA;AACnD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAI,QAAQ,CAAA,CAAA,CAAG,CAAA;AACb,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAM,GAAA,CAAI,KAAA,CAAM,CAAA,OAAA,CAAA,CAAA,QAAA,CAAA,QAAA,CAAA,SAAA,CAAA,CAAA,CAAwC,IAAA,CAAK,SAAS,CAAA,CAAE,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAC1E,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAO,SAAA,CAAA,CAAA,CAAY,IAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACrB,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,OAAO,MAAA,CAAA;AAAA,CAAA,CACT,CAAA,CAAA;AAEA,CAAA,CAAA,GAAA,CAAI,CAAA;AACF,CAAA,CAAA,CAAA,CAAA,KAAA,CAAA,CAAO,OAAO,SAAA,CAAA,CAAW,CAAA;AACvB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAMC,OAAAA,CAAAA,CAAAA,CAAS,MAAM,GAAA,CAAI,OAAA,CAAQ,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAC/B,SAAS,IAAA,CAAK,OAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACd,KAAA,CAAA,CAAO,IAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAI,IAAA,CAAK,QAAQ,WAAA,CAAA,CAAY,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAC7C,SAAA,EAAW,YAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACX,CAAA,CAAA,CAAG,MAAA,CAAA,CAAO,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,SAAA,CAAA,MAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,CAAA,CAAA,EAAA,CAAA,MAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,GAAA,CAAA,GAAA,CAAA,QAAA,CAAA,IAAA,CAAA,GAAA,CAAA,GAAA,CAAA,SAAA,CAAA,IAAA,CAAA,KAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAGV,CAAA,CAAA,CAAI,OAAA,CAAA,CAAA,CAAU,CAAA,CAAE,KAAA,CAAA,CAAO,IAAA,KAAS,CAAA,CAAA;AAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAClC,CAAA,CAAA;AACD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAA,CAAQ,GAAG,IAAA,CAAK,MAAM,IAAI,IAAA,CAAK,OAAO,IAAIA,OAAM,CAAA,CAAA;AAChD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,QAAA,CAAA,CAAA,CAAWA,OAAAA,CAAO,QAAA,CAAA;AAClB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAA,GAAU,YAAA,CAAa,OAAA,CAAA,CAASA,OAAAA,CAAO,OAAO,CAAA,CAAA;AAC9C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAI,aAAa,CAAA,CAAA,CAAG,KAAA,CAAA;AAEpB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAI,UAAA,CAAA,CAAA,CAAa,KAAA,CAAA;AAGjB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAI,SAAS,CAAA,CAAA,CAAA,CAAA,CAAK,UAAA,CAAA,CAAA,CAAA,CAAc,OAAA,CAAQ,GAAA,CAAI,OAAO,CAAA,CAAA,CAAG,CAAA;AACpD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,aAAA,CAAA,CAAA,CAAA,CAAA,CAAkB,GAAA,CAAI,QAAQ,aAAA,CAAc,IAAA,CAAA,CAAM,CAAA,OAAA,GAAW,IAAA,CAAK,OAAA,CAAA,CAAS,MAAM,CAAC,CAAA,CAAA;AAClF,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAM,CAAA,CAAA,CAAA,CAAI,MAAM,aAAA,CAAc,GAAA,CAAI,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAChC,OAAA,EAAS,OAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACT,OAAO,WAAA,CAAA,CAAY,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACnB,CAAA,CAAA,CAAG,MAAA,CAAA,CAAO,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,QAAA,CAAA,CAAA,CAAA,GAAA,CAAA,KAAA,CAAA,OAAA,CAAA,CAAA,CAAA,CAAA,QAAA,CAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAAA,GAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,EAAA,CAAA,QAAA,CAAA,GAAA,CAAA,OAAA,CAAA,CAAA,GAAA,CAAA,SAAA,CAAA,GAAA,CAAA,IAAA,CAAA,QAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,QAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,OAAA,CAAA,WAAA,CAAA,IAAA,CAAA,SAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAIV,CAAA,CAAA,CAAI,eAAe,CAAA,CAAE,SAAA,EAAW,CAAC,CAAA,CAAA,CAAA,QAAA,CAAY,CAAA,CAAA,IAAM,CAAA,CAAA;AAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACrD,CAAA,CAAA;AACD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAA,CAAQ,CAAA,OAAA,CAAA,CAAA,CAAW,OAAO,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA;AAC/B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAA,GAAU,YAAA,CAAa,OAAA,CAAA,CAAS,CAAA,CAAE,OAAO,CAAA,CAAA;AAGzC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAI,CAAA,CAAE,YAAY,CAAA,CAAA,CAAG,CAAA;AACnB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,QAAA,CAAA,CAAA,CAAW,CAAA,CAAE,QAAA,CAAA;AACb,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACF,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,UAAA,GAAa,IAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACf,CAAA;AAKA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAI,SAAA,CAAA,CAAA,CAAA,CAAa,OAAA,CAAQ,GAAA,CAAI,OAAO,CAAA,CAAA,CAAG,CAAA;AACrC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAM,MAAA,CAAA,CAAA,CAAS,aAAA,CAAc,OAAA,CAAQ,GAAA,CAAI,OAAO,CAAC,CAAA,CAAA;AACjD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAI,WAAW,OAAA,CAAA,CAAS,CAAA;AACtB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAA,GAAU,MAAA,CAAA;AACV,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,YAAA,CAAA,CAAA,CAAA,CAAA,CAAiB,GAAA,CAAI,MAAM,aAAA,CAAc,IAAA,CAAA,CAAM,CAAA,KAAA,GAAS,IAAA,CAAK,OAAA,CAAA,CAAS,KAAK,CAAC,CAAA,CAAA;AAC5E,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAM,CAAA,CAAA,CAAA,CAAI,KAAA,CAAM,YAAA,CAAa,GAAA,CAAI,CAAA,CAAE,OAAA,CAAA,CAAS,IAAA,CAAA,CAAM,KAAA,EAAO,WAAA,CAAA,CAAY,EAAG,CAAA,CAAA,CAAG,MAAA,CAAA,GAAU,CAAA,CAAA;AACrF,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAA,CAAQ,CAAA,KAAA,CAAA,CAAA,CAAS,IAAI,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA;AAC1B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAA,GAAU,YAAA,CAAa,OAAA,CAAA,CAAS,CAAA,CAAE,OAAO,CAAA,CAAA;AAEzC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAI,CAAA,CAAE,YAAY,CAAA,CAAA,CAAG,CAAA;AACnB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,QAAA,CAAA,CAAA,CAAW,CAAA,CAAE,QAAA,CAAA;AACb,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACF,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,UAAA,GAAa,IAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACf,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACF,CAAA;AAGA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAI,aAAA,CAAA,CAAA,CAAA,CAAiB,OAAA,CAAQ,GAAA,CAAI,OAAO,CAAA,CAAA,CAAG,CAAA;AACzC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAM,MAAA,CAAA,CAAA,CAAS,aAAA,CAAc,OAAA,CAAQ,GAAA,CAAI,OAAO,CAAC,CAAA,CAAA;AACjD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAI,WAAW,OAAA,CAAA,CAAS,CAAA;AACtB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAA,GAAU,MAAA,CAAA;AACV,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,gBAAA,CAAA,CAAA,CAAA,CAAA,CAAqB,GAAA,CAAI,SAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACvB,aAAA,CAAc,IAAA,CAAA,CAAM,CAAA,SAAA,CAAA,EAAa,IAAA,CAAK,SAAS,SAAS,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAC1D,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAM,CAAA,CAAA,CAAA,CAAI,MAAM,gBAAA,CAAiB,GAAA,CAAI,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACnC,OAAA,EAAS,OAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACT,OAAO,WAAA,CAAA,CAAY,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACnB,GAAG,MAAA,CAAA,CAAA;AAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACX,CAAA,CAAA;AACD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAA,CAAQ,CAAA,SAAA,CAAA,CAAA,CAAa,OAAO,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA;AACjC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAA,GAAU,YAAA,CAAa,OAAA,CAAA,CAAS,CAAA,CAAE,OAAO,CAAA,CAAA;AAMzC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAI,CAAA,CAAE,aAAa,CAAA,CAAA,CAAG,CAAA;AACpB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,QAAA,CAAA,CAAA,CAAW,CAAA,CAAE,QAAA,CAAA;AACb,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACF,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,UAAA,GAAa,IAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACf,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACF,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAI,QAAQ,SAAA,CAAA,CAAW,KAAA,CAAA;AACvB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAM,GAAA,CAAA,CAAA,CAAM,aAAA,CAAc,OAAA,CAAQ,GAAA,CAAI,OAAO,CAAC,CAAA,CAAA;AAC9C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAM,GAAA,CAAA,CAAA,CAAM,aAAA,CAAc,OAAA,CAAQ,GAAA,CAAI,OAAO,CAAC,CAAA,CAAA;AAC9C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAM,cAAA,CAAA,CAAA,CAAiB,eAAe,IAAA,CAAK,CAAC,OAAO,EAAA,CAAG,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA;AAC/D,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAM,SAAA,CAAA,CAAA,CAAY,OAAA,KAAY,IAAA,CAAA,CAAA,CAAA,CAAQ,GAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,OAAA,CAAA;AAC9C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAA,GAAU,GAAA,CAAA;AAEV,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAI,UAAA,CAAA,CAAY,QAAA,CAAA;AAChB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAI,SAAA,CAAA,CAAA,CAAA,CAAa,CAAC,cAAA,CAAA,CAAgB,KAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACpC,CAAA;AAGA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAI,WAAW,QAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAA,CAAA,CAAA,CAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,OAAO,CAAA,CAAA,CAAG,CAAA;AACrD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,gBAAA,CAAA,CAAA,CAAA,CAAA,CAAqB,GAAA,CAAI,UAAU,aAAA,CAAc,IAAA,CAAA,CAAM,CAAA,SAAA,GAAa,IAAA,CAAK,OAAA,CAAA,CAAS,SAAS,CAAC,CAAA,CAAA;AAC5F,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAM,CAAA,CAAA,CAAA,CAAI,MAAM,gBAAA,CAAiB,GAAA,CAAI,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACnC,GAAA,EAAK,OAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACL,GAAA,EAAK,OAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACL,OAAO,WAAA,CAAA,CAAY,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACnB,GAAG,MAAA,CAAA,CAAA;AAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACX,CAAA,CAAA;AACD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAA,CAAQ,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,EAAgB,OAAO,CAAA,CAAA,CAAA,CAAI,OAAO,IAAI,CAAC,CAAA,CAAA;AAC/C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAA,GAAU,YAAA,CAAa,OAAA,CAAA,CAAS,CAAA,CAAE,OAAO,CAAA,CAAA;AACzC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAI,CAAA,CAAE,QAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAA,CAAA,CAAG,QAAA,CAAA,CAAA,CAAW,CAAA,CAAE,QAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACrC,CAAA;AAAA,CAAA,CACF,CAAA,CAAA,OAAA,CAAE,CAAA;AAGA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAM,OAAA,CAAQ,UAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACZ,CAAC,GAAA,CAAA,CAAK,aAAA,CAAA,CAAe,cAAc,gBAAA,CAAA,CAAkB,gBAAgB,EAClE,MAAA,CAAO,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,IAAI,CAAA,CACxB,GAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAE,SAAS,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAC3B,CAAA;AAAA,CAAA,CACF,CAAA;AAEA,CAAA,CAAA,KAAA,CAAM,MAAA,CAAA,CAAA,CAAwB,CAAA;AAAA,CAAA,CAAA,CAAA,CAC5B,OAAA,CAAA,CAAS,QAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAA,CAAA,CAAA,CAAA,CAAK,OAAA,CAAQ,IAAI,OAAO,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAC9C,GAAA,CAAA,CAAK,aAAA,CAAc,OAAA,CAAQ,GAAA,CAAI,OAAO,CAAC,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACvC,IAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACA,QAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACA,MAAA,CAAA,CAAQ,IAAA;AAAA,CAAA,CAAA,CACV,CAAA;AACA,CAAA,CAAA,KAAA,CAAM,GAAA,CAAA,CAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,OAAO,CAAA,CAAA;AAC/B,CAAA,CAAA,IAAI,GAAA,CAAA,QAAY,GAAA,GAAM,GAAA,CAAA;AACtB,CAAA,CAAA,KAAA,CAAM,OAAA,CAAA,CAAA,CAAU,OAAA,CAAQ,GAAA,CAAI,WAAW,CAAA,CAAA;AACvC,CAAA,CAAA,IAAI,OAAA,CAAA,QAAgB,OAAA,GAAU,OAAA,CAAA;AAC9B,CAAA,CAAA,OAAO,MAAA,CAAA;AACT,CAAA;AAEA,QAAA,CAAS,WAAA,CACP,OACA,MAAA,CAAA,CACS,CAAA;AACT,CAAA,CAAA,IAAI,KAAA,CAAA,CAAA,CAAA,CAAA,CAAU,MAAM,OAAO,IAAA,CAAA;AAC3B,CAAA,CAAA,IAAI,KAAA,CAAA,CAAA,CAAA,CAAA,CAAU,OAAO,OAAO,KAAA,CAAA;AAC5B,CAAA,CAAA,MAAA,CAAO,MAAA,CAAA,CAAO,CAAA;AAChB,CAAA;AAEA,QAAA,CAAS,gBAAgB,OAAA,CAAA,CAAsC,CAAA;AAC7D,CAAA,CAAA,IAAI,MAAA,CAAO,OAAA,KAAY,CAAA,MAAA,CAAA,CAAA,CAAU,OAAO,OAAA,CAAA;AACxC,CAAA,CAAA,OAAO,GAAA,CAAI,YAAY,CAAA,GAAA,CAAA,CAAA,CAAA,EAAS,CAAA,CAAE,OAAO,KAAA,EAAO,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAA;AAClE,CAAA;AAIA,KAAA,CAAM,aAAA,GAAgB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,UAAA,CAAA,cAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,QAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACtB,KAAA,CAAM,kBAAA,GAAqB,CAAA,CAAA,CAAA,oBAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,QAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAC3B,KAAA,CAAM,cAAA,GAAiB,CAAA,OAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAEvB,QAAA,CAAS,aAAa,KAAA,CAAA,CAA6B,CAAA;AACjD,CAAA,CAAA,OAAO,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,aAAA,CAAc,KAAK,eAAA,CAAgB,CAAA,CAAE,OAAO,CAAC,CAAC,CAAA,CAAA;AACzE,CAAA;AAEA,QAAA,CAAS,wBAAwB,KAAA,CAAA,CAA6B,CAAA;AAC5D,CAAA,CAAA,OAAO,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA;AACvB,CAAA,CAAA,CAAA,CAAA,KAAA,CAAM,IAAA,CAAA,CAAA,CAAO,eAAA,CAAgB,CAAA,CAAE,OAAO,CAAA,CAAA;AACtC,CAAA,CAAA,CAAA,CAAA,KAAA,CAAM,IAAA,CAAA,CAAA,CAAO,aAAA,CAAc,IAAA,CAAK,IAAI,CAAA,CAAA;AACpC,CAAA,CAAA,CAAA,CAAA,IAAI,IAAA,CAAA,CAAA,CAAO,CAAC,CAAA,IAAK,cAAA,CAAe,KAAK,IAAA,CAAK,CAAC,CAAC,CAAA,CAAA,CAAG,OAAO,IAAA,CAAA;AACtD,CAAA,CAAA,CAAA,CAAA,KAAA,CAAM,IAAA,CAAA,CAAA,CAAO,kBAAA,CAAmB,IAAA,CAAK,IAAI,CAAA,CAAA;AACzC,CAAA,CAAA,CAAA,CAAA,OAAO,IAAA,CAAA,CAAA,CAAO,CAAC,CAAA,KAAM,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,eAAe,IAAA,CAAK,IAAA,CAAK,CAAC,CAAC,CAAA,CAAA;AAAA,CAAA,CAC/D,CAAC,CAAA,CAAA;AACH,CAAA;AAQO,QAAA,CAAS,cAAc,KAAA,CAAA,CAA6B,CAAA;AACzD,CAAA,CAAA,MAAA,CAAO,YAAA,CAAa,KAAA,EAAO,YAAA,CAAa,KAAK,CAAC,CAAA,CAAA;AAChD,CAAA;AAGO,QAAA,CAAS,aAAa,KAAA,CAAA,CAA6B,CAAA;AACxD,CAAA,CAAA,MAAA,CAAO,YAAA,CAAa,KAAK,CAAA,IAAK,CAAC,wBAAwB,KAAK,CAAA,CAAA;AAC9D,CAAA;AAEA,QAAA,CAAS,YAAA,CAAa,OAAoB,YAAA,CAAA,CAAgC,CAAA;AAKxE,CAAA,CAAA,IAAI,YAAA,CAAA,CAAc,OAAO,uBAAA,CAAwB,KAAK,CAAA,CAAA;AAEtD,CAAA,CAAA,OAAO,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,eAAA,CAAgB,EAAE,OAAO,CAAA,CAAE,QAAA,CAAS,CAAA,CAAA,CAAA,YAAA,CAAA,CAAiB,CAAC,CAAA,CAAA;AACjF,CAAA;AAEA,QAAA,CAAS,gBAAgB,KAAA,CAAA,CAA6B,CAAA;AACpD,CAAA,CAAA,OAAO,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA;AACvB,CAAA,CAAA,CAAA,CAAA,KAAA,CAAM,IAAA,CAAA,CAAA,CAAO,eAAA,CAAgB,CAAA,CAAE,OAAO,CAAA,CAAA;AACtC,CAAA,CAAA,CAAA,CAAA,MAAA,CAAO,KAAK,QAAA,CAAS,CAAA,CAAA,CAAA,SAAA,CAAa,CAAA,CAAA,CAAA,CAAA,CAAK,IAAA,CAAK,SAAS,cAAc,CAAA,CAAA;AAAA,CAAA,CACrE,CAAC,CAAA,CAAA;AACH,CAAA;AAEA,QAAA,CAAS,cAAc,KAAA,CAAA,CAAuC,CAAA;AAC5D,CAAA,CAAA,EAAA,CAAA,CAAI,CAAC,OAAO,OAAO,CAAA,CAAA,CAAA;AACnB,CAAA,CAAA,OAAO,GAAA,CAAI,YAAY,CAAA,GAAA,CAAA,CAAA,CAAA,EAAS,CAAA,CAAE,OAAO,KAAA,EAAO,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA,CAAA;AAChE,CAAA;AAEA,QAAA,CAAS,YAAA,CACP,MACA,GAAA,CAAA,CACyB,CAAA;AACzB,CAAA,CAAA,KAAA,KAAA,CAAW,CAAC,GAAG,CAAC,CAAA,CAAA,EAAA,CAAK,KAAK,IAAA,CAAK,GAAA,CAAI,GAAG,CAAC,CAAA,CAAA;AACvC,CAAA,CAAA,OAAO,IAAA,CAAA;AACT,CAAA;AAOA,QAAA,CAAS,aAAA,CACP,IAAA,EACA,EAAA,CAAA,CACA,MAAA,CAAA,CACqB,CAAA;AACrB,CAAA,CAAA,EAAA,CAAA,CAAI,MAAA,CAAA,CAAQ,MAAA,CAAO,EAAE,MAAA,CAAA,CAAQ,MAAA,CAAA,CAAO,CAAA;AACpC,CAAA,CAAA,KAAA,CAAM,MAAA,CAAA,CAAA,CACJ,MAAA,CAAO,IAAA,CAAK,YAAA,KAAiB,CAAA,QAAA,CAAA,CAAA,CAAA,CAAa,IAAA,CAAK,YAAA,CAAa,EAAE,CAAA,GAAK,IAAA,CAAK,YAAA,CAAA,CAAA,CAAA,CAAgB,CAAA,CAAC,CAAA;AAC3F,CAAA,CAAA,KAAA,CAAM,CAAA,CAAE,SAAA,CAAA,CAAW,UAAA,EAAY,CAAA,CAAA,CAAG,aAAY,CAAA,CAAA,CAAI,MAAA,CAAA;AAClD,CAAA,CAAA,MAAA,CAAO,CAAA;AAAA,CAAA,CAAA,CAAA,CACL,GAAG,WAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACH,CAAA,CAAA,CAAI,KAAK,OAAA,CAAA,CAAA,CAAU,CAAA,CAAE,SAAS,IAAA,CAAK,OAAA,CAAA,IAAY,CAAA,CAAA;AAAC,CAAA,CAAA,CAClD,CAAA;AACF,CAAA;AAIA,QAAA,CAAS,eAAe,IAAA,CAAA,CAAqD,CAAA;AAC3E,CAAA,CAAA,MAAM,SAAS,aAAA,CAAc,IAAA,CAAA,CAAM,KAAK,MAAA,EAAQ,IAAA,CAAK,SAAS,GAAG,CAAA,CAAA;AACjE,CAAA,CAAA,EAAA,CAAA,CAAI,KAAK,MAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAA,QAAA,CAAA,CAAA,CAAY,MAAA,CAAO,GAAA,CAAI,SAAS,MAAM,CAAA,CAAA;AAC1D,CAAA,CAAA,EAAA,CAAA,CAAI,KAAK,MAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAA,OAAA,CAAA,CAAA,CAAW,MAAA,CAAO,GAAA,CAAI,QAAQ,MAAM,CAAA,CAAA;AACxD,CAAA,CAAA,MAAA,CAAO,GAAA,CAAI,SAAS,MAAM,CAAA,CAAA;AAC5B,CAAA;;AC1bO,QAAA,CAAS,UAAU,KAAA,CAAA,CAA2B,CAAA;AACnD,CAAA,CAAA,MAAA,CAAO,GAAA,CAAI,WAAA,CAAY,CAAA,GAAA,CAAA,CAAA,CAAO,CAAA,CAAE,OAAO,KAAK,CAAA,CAAA;AAC9C,CAAA;AAGA,KAAA,CAAA,QAAA,CAAsB,OAAO,KAAA,CAAA,CAAwC,CAAA;AACnE,CAAA,CAAA,KAAA,CAAM,OAAQ,UAAA,CACX,mBAAA,CAAA;AACH,CAAA,CAAA,EAAA,CAAA,CAAI,CAAC,IAAA,CAAA,CAAM,CAAA;AACT,CAAA,CAAA,CAAA,CAAA,KAAA,CAAM,IAAI,KAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACR,CAAA,mBAAA,CAAA,EAAA,CAAA,GAAA,CAAA,SAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,IAAA,CAAA,QAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CACF,CAAA;AAAA,CAAA,CACF,CAAA;AAGA,CAAA,CAAA,KAAA,CAAM,EAAA,CAAA,CAAA,CAAK,GAAA,CAAI,WAAA,CAAY,KAAA,CAAM,UAAU,CAAA,CAAA;AAC3C,CAAA,CAAA,GAAA,CAAI,UAAA,CAAW,EAAE,CAAA,CAAE,GAAA,CAAI,KAAK,CAAA,CAAA;AAC5B,CAAA,CAAA,KAAA,CAAM,MAAA,CAAA,CAAA,CAAS,GAAA,CAAI,IAAA,CAAK,CAAC,EAAE,CAAC,CAAA,CAAE,MAAA,CAAA,CAAO,CAAE,WAAA,CAAY,IAAI,IAAA,CAAK,CAAA,IAAA,CAAM,CAAC,CAAA,CAAA;AACnE,CAAA,CAAA,KAAA,CAAM,MAAM,KAAA,CAAM,GAAA,CAAI,QAAA,CAAS,MAAM,EAAE,WAAA,CAAA,CAAY,CAAA;AACnD,CAAA,CAAA,MAAA,CAAO,GAAA,CAAI,WAAW,GAAG,CAAA,CAAA;AAC3B,CAAA;;ACQA,KAAA,CAAA,QAAA,CAAsB,cAAc,KAAA,CAAA,CAA2C,CAAA;AAC7E,CAAA,CAAA,KAAA,CAAM,eAAe,MAAA,CAAO,KAAK,IAAI,KAAA,CAAM,MAAA,CAAO,KAAK,CAAA,GAAI,KAAA,CAAA;AAC3D,CAAA,CAAA,MAAM,IAAA,CAAA,CAAA,CAAO,UAAU,YAAY,CAAA,CAAA;AACnC,CAAA,CAAA,MAAM,MAAA,CAAA,CAAA,CAAS,aAAa,IAAI,CAAA,CAAA;AAEhC,CAAA,CAAA,MAAA,CAAO,CAAA;AAAA,CAAA,CAAA,CAAA,CACL,OAAA,CAAQ,KAAA,EAAO,KAAA,CAAA,CAAO,OAAA,CAAA,CAAS,CAAA;AAE7B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAO,CAAA,CAAC,CAAA;AAAA,CAAA,CAAA,CAAA,CACV,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACA,OAAA,CAAQ,KAAA,EAAO,EAAA,CAAA,CAAI,EAAA,CAAA,CAAI,CAAA;AAErB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAO,CAAA,CAAC,CAAA;AAAA,CAAA,CAAA,CAAA,CACV,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACA,KAAA,CAAA,CAAA,CAAQ,CAAA;AACN,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACpC,CAAA;AAAA,CAAA,CAAA,CACF,CAAA;AACF,CAAA;AAEA,QAAA,CAAS,OAAO,KAAA,CAAA,CAA4B,CAAA;AAC1C,CAAA,CAAA,OAAO,KAAA,CAAM,UAAU,CAAA,IAAK,KAAA,CAAM,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,EAAA,CAAA,CAAA,CAAA,CAAQ,KAAA,CAAM,CAAC,CAAA,KAAM,GAAA,CAAA;AAChE,CAAA;AASA,QAAA,CAAS,aAAa,IAAA,CAAA,CAA6B,CAAA;AACjD,CAAA,CAAA,KAAA,CAAM,SAAiC,CAAA,CAAC,CAAA;AACxC,CAAA,CAAA,KAAA,CAAM,UAAoB,CAAA,CAAC,CAAA;AAC3B,CAAA,CAAA,GAAA,CAAA,CAAA,KAAA,CAAW,IAAA,CAAA,EAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAG,CAAA;AACnC,CAAA,CAAA,CAAA,CAAA,IAAI,IAAA,CAAK,UAAA,CAAW,CAAA,KAAA,CAAA,CAAQ,CAAA,CAAA,CAAG,CAAA;AAE7B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAM,IAAA,CAAA,CAAA,CAAO,IAAA,CAAK,KAAA,CAAM,CAAA,KAAA,CAAA,CAAA,CAAS,MAAM,CAAA,CAAA;AACvC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAM,KAAA,CAAA,CAAA,CAAQ,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAA,CAAA;AAC9B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAI,QAAQ,CAAA,CAAA,CAAG,CAAA;AACb,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAM,EAAA,CAAA,CAAA,CAAK,IAAA,CAAK,KAAA,CAAM,CAAA,CAAA,CAAG,KAAK,CAAA,CAAA;AAC9B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAM,IAAA,CAAA,CAAA,CAAO,IAAA,CAAK,KAAA,CAAM,KAAA,CAAA,CAAA,CAAQ,CAAC,CAAA,CAAA;AACjC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAO,EAAE,CAAA,GAAI,IAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACf,CAAA;AAAA,CAAA,CAAA,CAAA,CACF,CAAA,MAAA,EAAA,CAAA,CAAW,IAAA,CAAK,MAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAG,CAAA;AAC1B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAA,CAAQ,KAAK,IAAI,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACnB,CAAA;AAAA,CAAA,CACF,CAAA;AACA,CAAA,CAAA,MAAA,CAAO,CAAA,CAAE,QAAQ,OAAA,CAAA,CAAQ,CAAA;AAC3B,CAAA;;;;;;;;;;;;;;;;;;;;;;;"}