{"version":3,"file":"direct-engine-CoBdmppX.cjs","sources":["../src/lib/pdfium/helper.ts","../src/lib/pdfium/types/branded.ts","../src/lib/pdfium/cache.ts","../src/lib/pdfium/constants/limits.ts","../src/lib/pdfium/core/memory-manager.ts","../src/lib/pdfium/engine.ts","../../pdfium/dist/index.browser.js","../src/lib/pdfium/web/direct-engine.ts"],"sourcesContent":["import { Matrix, Rotation, Rect, Size } from '@kopjra/embedpdf-models';\nimport { PdfiumRuntimeMethods, PdfiumModule } from '@kopjra/embedpdf-pdfium';\n\n/**\n * Read string from WASM heap\n * @param wasmModule - pdfium wasm module instance\n * @param readChars - function to read chars\n * @param parseChars - function to parse chars\n * @param defaultLength - default length of chars that needs to read\n * @returns string from the heap\n *\n * @public\n */\nexport function readString(\n  wasmModule: PdfiumRuntimeMethods & PdfiumModule,\n  readChars: (buffer: number, bufferLength: number) => number,\n  parseChars: (buffer: number) => string,\n  defaultLength: number = 100,\n): string {\n  let buffer = wasmModule.wasmExports.malloc(defaultLength);\n  for (let i = 0; i < defaultLength; i++) {\n    wasmModule.HEAP8[buffer + i] = 0;\n  }\n  const actualLength = readChars(buffer, defaultLength);\n  let str: string;\n  if (actualLength > defaultLength) {\n    wasmModule.wasmExports.free(buffer);\n    buffer = wasmModule.wasmExports.malloc(actualLength);\n    for (let i = 0; i < actualLength; i++) {\n      wasmModule.HEAP8[buffer + i] = 0;\n    }\n    readChars(buffer, actualLength);\n    str = parseChars(buffer);\n  } else {\n    str = parseChars(buffer);\n  }\n  wasmModule.wasmExports.free(buffer);\n\n  return str;\n}\n/**\n * Read arraybyffer from WASM heap\n * @param wasmModule - pdfium wasm module instance\n * @param readChars - function to read chars\n * @returns arraybuffer from the heap\n *\n * @public\n */\nexport function readArrayBuffer(\n  wasmModule: PdfiumRuntimeMethods & PdfiumModule,\n  readChars: (buffer: number, bufferLength: number) => number,\n): ArrayBuffer {\n  const bufferSize = readChars(0, 0);\n\n  const bufferPtr = wasmModule.wasmExports.malloc(bufferSize);\n\n  readChars(bufferPtr, bufferSize);\n\n  const arrayBuffer = new ArrayBuffer(bufferSize);\n  const view = new DataView(arrayBuffer);\n\n  for (let i = 0; i < bufferSize; i++) {\n    view.setInt8(i, wasmModule.getValue(bufferPtr + i, 'i8'));\n  }\n\n  wasmModule.wasmExports.free(bufferPtr);\n\n  return arrayBuffer;\n}\n\nconst RESERVED_INFO_KEYS = new Set([\n  'Title',\n  'Author',\n  'Subject',\n  'Keywords',\n  'Producer',\n  'Creator',\n  'CreationDate',\n  'ModDate',\n  'Trapped',\n]);\n\nexport function isValidCustomKey(key: string): boolean {\n  // PDF Name object rules are looser than strings here, but keep it sane:\n  // - non-empty ASCII, no embedded NULs, avoid leading slash\n  if (!key || key.length > 127) return false;\n  if (RESERVED_INFO_KEYS.has(key)) return false;\n  if (key[0] === '/') return false;\n  // Keep ASCII-ish to avoid surprises; relax if you need.\n  for (let i = 0; i < key.length; i++) {\n    const c = key.charCodeAt(i);\n    if (c < 0x20 || c > 0x7e) return false;\n  }\n  return true;\n}\n\ninterface FormDrawParams {\n  startX: number;\n  startY: number;\n  formsWidth: number;\n  formsHeight: number;\n  scaleX: number;\n  scaleY: number;\n}\n\nexport function computeFormDrawParams(\n  matrix: Matrix,\n  rect: Rect,\n  pageSize: Size,\n  rotation: Rotation,\n): FormDrawParams {\n  const rectLeft = rect.origin.x;\n  const rectBottom = rect.origin.y;\n  const rectRight = rectLeft + rect.size.width;\n  const rectTop = rectBottom + rect.size.height;\n  const pageWidth = pageSize.width;\n  const pageHeight = pageSize.height;\n\n  // Extract the per-axis scale that the render matrix applies.\n  const scaleX = Math.hypot(matrix.a, matrix.b);\n  const scaleY = Math.hypot(matrix.c, matrix.d);\n  const swap = (rotation & 1) === 1;\n\n  const formsWidth = swap\n    ? Math.max(1, Math.round(pageHeight * scaleX))\n    : Math.max(1, Math.round(pageWidth * scaleX));\n  const formsHeight = swap\n    ? Math.max(1, Math.round(pageWidth * scaleY))\n    : Math.max(1, Math.round(pageHeight * scaleY));\n\n  let startX: number;\n  let startY: number;\n  switch (rotation) {\n    case Rotation.Degree0:\n      startX = -Math.round(rectLeft * scaleX);\n      startY = -Math.round(rectBottom * scaleY);\n      break;\n    case Rotation.Degree90:\n      startX = Math.round((rectTop - pageHeight) * scaleX);\n      startY = -Math.round(rectLeft * scaleY);\n      break;\n    case Rotation.Degree180:\n      startX = Math.round((rectRight - pageWidth) * scaleX);\n      startY = Math.round((rectTop - pageHeight) * scaleY);\n      break;\n    case Rotation.Degree270:\n      startX = -Math.round(rectBottom * scaleX);\n      startY = Math.round((rectRight - pageWidth) * scaleY);\n      break;\n    default:\n      startX = -Math.round(rectLeft * scaleX);\n      startY = -Math.round(rectBottom * scaleY);\n      break;\n  }\n\n  return { startX, startY, formsWidth, formsHeight, scaleX, scaleY };\n}\n","/**\n * Branded types for better type safety\n * @public\n */\n\ndeclare const PointerBrand: unique symbol;\n\nexport type WasmPointer = number & { [PointerBrand]: never };\n\n// Helper functions to create branded types\nexport const WasmPointer = (ptr: number): WasmPointer => ptr as WasmPointer;\n","import { WrappedPdfiumModule } from '@kopjra/embedpdf-pdfium';\nimport { MemoryManager } from './core/memory-manager';\nimport { WasmPointer } from './types/branded';\n\nexport interface CacheConfig {\n  /** Time-to-live for pages in milliseconds (default: 5000ms) */\n  pageTtl?: number;\n  /** Maximum number of pages to keep in cache per document (default: 50) */\n  maxPagesPerDocument?: number;\n}\n\nconst DEFAULT_CONFIG: Required<CacheConfig> = {\n  pageTtl: 5000, // 5 seconds\n  maxPagesPerDocument: 10,\n};\n\nexport class PdfCache {\n  private readonly docs = new Map<string, DocumentContext>();\n  private readonly config: Required<CacheConfig>;\n\n  constructor(\n    private readonly pdfium: WrappedPdfiumModule,\n    private readonly memoryManager: MemoryManager,\n    config: CacheConfig = {},\n  ) {\n    this.config = { ...DEFAULT_CONFIG, ...config };\n  }\n\n  /** Open (or re-use) a document */\n  setDocument(id: string, filePtr: number, docPtr: number) {\n    let ctx = this.docs.get(id);\n    if (!ctx) {\n      ctx = new DocumentContext(filePtr, docPtr, this.pdfium, this.memoryManager, this.config);\n      this.docs.set(id, ctx);\n    }\n  }\n\n  /** Retrieve the DocumentContext for a given PdfDocumentObject */\n  getContext(docId: string): DocumentContext | undefined {\n    return this.docs.get(docId);\n  }\n\n  /** Close & fully release a document and all its pages */\n  closeDocument(docId: string): boolean {\n    const ctx = this.docs.get(docId);\n    if (!ctx) return false;\n    ctx.dispose(); // tears down pages first, then FPDF_CloseDocument, free()\n    this.docs.delete(docId);\n    return true;\n  }\n\n  /** Close all documents */\n  closeAllDocuments(): void {\n    for (const ctx of this.docs.values()) {\n      ctx.dispose();\n    }\n    this.docs.clear();\n  }\n\n  /** Update cache configuration for all existing documents */\n  updateConfig(newConfig: CacheConfig): void {\n    Object.assign(this.config, newConfig);\n    // Update config for all existing document contexts\n    for (const ctx of this.docs.values()) {\n      ctx.updateConfig(this.config);\n    }\n  }\n\n  /** Get current cache statistics */\n  getCacheStats(): {\n    documents: number;\n    totalPages: number;\n    pagesByDocument: Record<string, number>;\n  } {\n    const pagesByDocument: Record<string, number> = {};\n    let totalPages = 0;\n\n    for (const [docId, ctx] of this.docs.entries()) {\n      const pageCount = ctx.getCacheSize();\n      pagesByDocument[docId] = pageCount;\n      totalPages += pageCount;\n    }\n\n    return {\n      documents: this.docs.size,\n      totalPages,\n      pagesByDocument,\n    };\n  }\n}\n\nexport class DocumentContext {\n  private readonly pageCache: PageCache;\n\n  constructor(\n    public readonly filePtr: number,\n    public readonly docPtr: number,\n    pdfium: WrappedPdfiumModule,\n    private readonly memoryManager: MemoryManager,\n    config: Required<CacheConfig>,\n  ) {\n    this.pageCache = new PageCache(pdfium, docPtr, config);\n  }\n\n  /** Main accessor for pages */\n  acquirePage(pageIdx: number): PageContext {\n    return this.pageCache.acquire(pageIdx);\n  }\n\n  /** Scoped accessor for one-off / bulk operations */\n  borrowPage<T>(pageIdx: number, fn: (ctx: PageContext) => T): T {\n    return this.pageCache.borrowPage(pageIdx, fn);\n  }\n\n  /** Update cache configuration */\n  updateConfig(config: Required<CacheConfig>): void {\n    this.pageCache.updateConfig(config);\n  }\n\n  /** Get number of pages currently in cache */\n  getCacheSize(): number {\n    return this.pageCache.size();\n  }\n\n  /** Tear down all pages + this document */\n  dispose(): void {\n    // 1️⃣ release all pages (with their TTL or immediate)\n    this.pageCache.forceReleaseAll();\n\n    // 2️⃣ close the PDFium document\n    this.pageCache.pdf.FPDF_CloseDocument(this.docPtr);\n\n    // 3️⃣ free the file handle through memory manager for proper tracking\n    this.memoryManager.free(WasmPointer(this.filePtr));\n  }\n}\n\nexport class PageCache {\n  private readonly cache = new Map<number, PageContext>();\n  private readonly accessOrder: number[] = []; // LRU tracking\n  private config: Required<CacheConfig>;\n\n  constructor(\n    public readonly pdf: WrappedPdfiumModule,\n    private readonly docPtr: number,\n    config: Required<CacheConfig>,\n  ) {\n    this.config = config;\n  }\n\n  acquire(pageIdx: number): PageContext {\n    let ctx = this.cache.get(pageIdx);\n\n    if (!ctx) {\n      // Ensure we don't exceed max cache size\n      this.evictIfNeeded();\n\n      const pagePtr = this.pdf.FPDF_LoadPage(this.docPtr, pageIdx);\n      ctx = new PageContext(this.pdf, this.docPtr, pageIdx, pagePtr, this.config.pageTtl, () => {\n        this.cache.delete(pageIdx);\n        this.removeFromAccessOrder(pageIdx);\n      });\n      this.cache.set(pageIdx, ctx);\n    }\n\n    // Update LRU order\n    this.updateAccessOrder(pageIdx);\n\n    ctx.clearExpiryTimer(); // cancel any pending teardown\n    ctx.bumpRefCount(); // bump ref‐count\n    return ctx;\n  }\n\n  /** Helper: run a function \"scoped\" to a page.\n   *    – if the page was already cached  → .release() (keeps TTL logic)\n   *    – if the page was loaded just now → .disposeImmediate() (free right away)\n   */\n  borrowPage<T>(pageIdx: number, fn: (ctx: PageContext) => T): T {\n    const existed = this.cache.has(pageIdx);\n    const ctx = this.acquire(pageIdx);\n    try {\n      return fn(ctx);\n    } finally {\n      existed ? ctx.release() : ctx.disposeImmediate();\n    }\n  }\n\n  forceReleaseAll(): void {\n    for (const ctx of this.cache.values()) {\n      ctx.disposeImmediate();\n    }\n    this.cache.clear();\n    this.accessOrder.length = 0;\n  }\n\n  /** Update cache configuration */\n  updateConfig(config: Required<CacheConfig>): void {\n    this.config = config;\n\n    // Update TTL for all existing pages\n    for (const ctx of this.cache.values()) {\n      ctx.updateTtl(config.pageTtl);\n    }\n\n    // Evict pages if new max size is smaller\n    this.evictIfNeeded();\n  }\n\n  /** Get current cache size */\n  size(): number {\n    return this.cache.size;\n  }\n\n  /** Evict least recently used pages if cache exceeds max size */\n  private evictIfNeeded(): void {\n    while (this.cache.size >= this.config.maxPagesPerDocument) {\n      const lruPageIdx = this.accessOrder[0];\n      if (lruPageIdx !== undefined) {\n        const ctx = this.cache.get(lruPageIdx);\n        if (ctx) {\n          // Only evict if not currently in use (refCount === 0)\n          if (ctx.getRefCount() === 0) {\n            ctx.disposeImmediate();\n            // onFinalDispose callback will remove from cache and accessOrder\n          } else {\n            // If the LRU page is in use, we can't evict it\n            // Move to a different strategy or break to avoid infinite loop\n            break;\n          }\n        } else {\n          // Page not in cache but in access order - clean up\n          this.removeFromAccessOrder(lruPageIdx);\n        }\n      } else {\n        break;\n      }\n    }\n  }\n\n  /** Update the access order for LRU tracking */\n  private updateAccessOrder(pageIdx: number): void {\n    // Remove from current position\n    this.removeFromAccessOrder(pageIdx);\n    // Add to end (most recently used)\n    this.accessOrder.push(pageIdx);\n  }\n\n  /** Remove a page from the access order array */\n  private removeFromAccessOrder(pageIdx: number): void {\n    const index = this.accessOrder.indexOf(pageIdx);\n    if (index > -1) {\n      this.accessOrder.splice(index, 1);\n    }\n  }\n}\n\nexport class PageContext {\n  private refCount = 0;\n  private expiryTimer?: ReturnType<typeof setTimeout>;\n  private disposed = false;\n  private ttl: number;\n\n  // lazy helpers\n  private textPagePtr?: number;\n  private formInfoPtr?: number;\n  private formHandle?: number;\n\n  constructor(\n    private readonly pdf: WrappedPdfiumModule,\n    public readonly docPtr: number,\n    public readonly pageIdx: number,\n    public readonly pagePtr: number,\n    ttl: number,\n    private readonly onFinalDispose: () => void,\n  ) {\n    this.ttl = ttl;\n  }\n\n  /** Called by PageCache.acquire() */\n  bumpRefCount() {\n    if (this.disposed) throw new Error('Context already disposed');\n    this.refCount++;\n  }\n\n  /** Get current reference count */\n  getRefCount(): number {\n    return this.refCount;\n  }\n\n  /** Called by PageCache.acquire() */\n  clearExpiryTimer() {\n    if (this.expiryTimer) {\n      clearTimeout(this.expiryTimer);\n      this.expiryTimer = undefined;\n    }\n  }\n\n  /** Update TTL configuration */\n  updateTtl(newTtl: number): void {\n    this.ttl = newTtl;\n    // If there's an active timer and ref count is 0, restart with new TTL\n    if (this.expiryTimer && this.refCount === 0) {\n      this.clearExpiryTimer();\n      this.expiryTimer = setTimeout(() => this.disposeImmediate(), this.ttl);\n    }\n  }\n\n  /** Called by PageCache.release() internally */\n  release() {\n    if (this.disposed) return;\n    this.refCount--;\n    if (this.refCount === 0) {\n      // schedule the one-and-only timer for the page\n      this.expiryTimer = setTimeout(() => this.disposeImmediate(), this.ttl);\n    }\n  }\n\n  /** Tear down _all_ sub-pointers & the page. */\n  disposeImmediate() {\n    if (this.disposed) return;\n    this.disposed = true;\n\n    // Clear any pending timer\n    this.clearExpiryTimer();\n\n    // 2️⃣ close text-page if opened\n    if (this.textPagePtr !== undefined) {\n      this.pdf.FPDFText_ClosePage(this.textPagePtr);\n    }\n\n    // 3️⃣ close form-fill if opened\n    if (this.formHandle !== undefined) {\n      this.pdf.FORM_OnBeforeClosePage(this.pagePtr, this.formHandle);\n      this.pdf.PDFiumExt_ExitFormFillEnvironment(this.formHandle);\n    }\n    if (this.formInfoPtr !== undefined) {\n      this.pdf.PDFiumExt_CloseFormFillInfo(this.formInfoPtr);\n    }\n\n    // 4️⃣ finally close the page itself\n    this.pdf.FPDF_ClosePage(this.pagePtr);\n\n    // 5️⃣ remove from the cache\n    this.onFinalDispose();\n  }\n\n  // ── public helpers ──\n\n  /** Always safe: opens (once) and returns the text-page ptr. */\n  getTextPage(): number {\n    this.ensureAlive();\n    if (this.textPagePtr === undefined) {\n      this.textPagePtr = this.pdf.FPDFText_LoadPage(this.pagePtr);\n    }\n    return this.textPagePtr;\n  }\n\n  /** Always safe: opens (once) and returns the form-fill handle. */\n  getFormHandle(): number {\n    this.ensureAlive();\n    if (this.formHandle === undefined) {\n      this.formInfoPtr = this.pdf.PDFiumExt_OpenFormFillInfo();\n      this.formHandle = this.pdf.PDFiumExt_InitFormFillEnvironment(this.docPtr, this.formInfoPtr);\n      this.pdf.FORM_OnAfterLoadPage(this.pagePtr, this.formHandle);\n    }\n    return this.formHandle;\n  }\n\n  /**\n   * Safely execute `fn` with an annotation pointer.\n   * Pointer is ALWAYS closed afterwards.\n   */\n  withAnnotation<T>(annotIdx: number, fn: (annotPtr: number) => T): T {\n    this.ensureAlive();\n    const annotPtr = this.pdf.FPDFPage_GetAnnot(this.pagePtr, annotIdx);\n    try {\n      return fn(annotPtr);\n    } finally {\n      this.pdf.FPDFPage_CloseAnnot(annotPtr);\n    }\n  }\n\n  private ensureAlive() {\n    if (this.disposed) throw new Error('PageContext already disposed');\n  }\n}\n","/**\n * System limits and safety thresholds for PDFium engine operations\n *\n * These limits are designed to prevent:\n * - Memory exhaustion\n * - Browser crashes\n * - DoS attacks\n * - WASM heap overflow\n * - Unreasonable resource usage\n *\n * @module constants/limits\n */\n\n/**\n * Memory allocation limits\n */\nexport const MEMORY_LIMITS = {\n  /** Maximum total memory that can be allocated (2GB) */\n  MAX_TOTAL_MEMORY: 2 * 1024 * 1024 * 1024,\n} as const;\n\n/**\n * All limits combined for easy access\n */\nexport const LIMITS = {\n  MEMORY: MEMORY_LIMITS,\n} as const;\n\nexport type Limits = typeof LIMITS;\n","import { WasmPointer } from '../types/branded';\nimport { LIMITS } from '../constants/limits';\nimport type { WrappedPdfiumModule } from '@kopjra/embedpdf-pdfium';\nimport { Logger } from '@kopjra/embedpdf-models';\n\nconst LOG_SOURCE = 'PDFiumEngine';\nconst LOG_CATEGORY = 'MemoryManager';\n\ninterface Allocation {\n  ptr: WasmPointer;\n  size: number;\n  timestamp: number;\n  stack?: string;\n}\n\nexport class MemoryManager {\n  private allocations = new Map<number, Allocation>();\n  private totalAllocated = 0;\n\n  constructor(\n    private pdfiumModule: WrappedPdfiumModule,\n    private logger: Logger,\n  ) {}\n\n  /**\n   * Allocate memory with tracking and validation\n   */\n  malloc(size: number): WasmPointer {\n    // Check total memory usage\n    if (this.totalAllocated + size > LIMITS.MEMORY.MAX_TOTAL_MEMORY) {\n      throw new Error(\n        `Total memory usage would exceed limit: ` +\n          `${this.totalAllocated + size} > ${LIMITS.MEMORY.MAX_TOTAL_MEMORY}`,\n      );\n    }\n\n    const ptr = this.pdfiumModule.pdfium.wasmExports.malloc(size);\n\n    if (!ptr) {\n      throw new Error(`Failed to allocate ${size} bytes`);\n    }\n\n    // Track allocation\n    const allocation: Allocation = {\n      ptr: WasmPointer(ptr),\n      size,\n      timestamp: Date.now(),\n      stack: this.logger.isEnabled('debug') ? new Error().stack : undefined,\n    };\n\n    this.allocations.set(ptr, allocation);\n    this.totalAllocated += size;\n\n    return WasmPointer(ptr);\n  }\n\n  /**\n   * Free memory with validation\n   */\n  free(ptr: WasmPointer): void {\n    const allocation = this.allocations.get(ptr);\n    if (!allocation) {\n      this.logger.warn(LOG_SOURCE, LOG_CATEGORY, `Freeing untracked pointer: ${ptr}`);\n    } else {\n      this.totalAllocated -= allocation.size;\n      this.allocations.delete(ptr);\n    }\n\n    this.pdfiumModule.pdfium.wasmExports.free(ptr);\n  }\n\n  /**\n   * Get memory statistics\n   */\n  getStats() {\n    return {\n      totalAllocated: this.totalAllocated,\n      allocationCount: this.allocations.size,\n      allocations: this.logger.isEnabled('debug') ? Array.from(this.allocations.values()) : [],\n    };\n  }\n\n  /**\n   * Check for memory leaks\n   */\n  checkLeaks(): void {\n    if (this.allocations.size > 0) {\n      this.logger.warn(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        `Potential memory leak: ${this.allocations.size} unfreed allocations`,\n      );\n\n      for (const [ptr, alloc] of this.allocations) {\n        this.logger.warn(LOG_SOURCE, LOG_CATEGORY, `  - ${ptr}: ${alloc.size} bytes`, alloc.stack);\n      }\n    }\n  }\n}\n","import {\n  PdfActionObject,\n  PdfAnnotationObject,\n  PdfTextRectObject,\n  PdfAnnotationSubtype,\n  PdfLinkAnnoObject,\n  PdfWidgetAnnoObject,\n  PdfLinkTarget,\n  PdfZoomMode,\n  Logger,\n  NoopLogger,\n  SearchResult,\n  SearchTarget,\n  MatchFlag,\n  PdfDestinationObject,\n  PdfBookmarkObject,\n  PdfDocumentObject,\n  PdfEngine,\n  PdfPageObject,\n  PdfActionType,\n  Rotation,\n  PDF_FORM_FIELD_FLAG,\n  PDF_FORM_FIELD_TYPE,\n  PdfWidgetAnnoOption,\n  PdfFileAttachmentAnnoObject,\n  Rect,\n  Size,\n  PdfAttachmentObject,\n  PdfUnsupportedAnnoObject,\n  PdfTextAnnoObject,\n  PdfSignatureObject,\n  PdfInkAnnoObject,\n  PdfInkListObject,\n  Position,\n  PdfStampAnnoObject,\n  PdfCircleAnnoObject,\n  PdfSquareAnnoObject,\n  PdfFreeTextAnnoObject,\n  PdfCaretAnnoObject,\n  PdfSquigglyAnnoObject,\n  PdfStrikeOutAnnoObject,\n  PdfUnderlineAnnoObject,\n  PdfFile,\n  PdfSegmentObject,\n  AppearanceMode,\n  PdfImageObject,\n  PdfPageObjectType,\n  PdfPathObject,\n  PdfFormObject,\n  PdfPolygonAnnoObject,\n  PdfPolylineAnnoObject,\n  PdfLineAnnoObject,\n  PdfHighlightAnnoObject,\n  PdfStampAnnoObjectContents,\n  PdfWidgetAnnoField,\n  PdfTransformMatrix,\n  FormFieldValue,\n  PdfErrorCode,\n  PdfTaskHelper,\n  PdfPageFlattenFlag,\n  PdfPageFlattenResult,\n  PdfTask,\n  PdfFileLoader,\n  transformRect,\n  SearchAllPagesResult,\n  PdfOpenDocumentUrlOptions,\n  PdfOpenDocumentBufferOptions,\n  PdfFileUrl,\n  Task,\n  PdfErrorReason,\n  TextContext,\n  PdfGlyphObject,\n  PdfPageGeometry,\n  PdfRun,\n  toIntRect,\n  Quad,\n  PdfAnnotationState,\n  PdfAnnotationStateModel,\n  quadToRect,\n  ImageConversionTypes,\n  PageTextSlice,\n  stripPdfUnwantedMarkers,\n  rectToQuad,\n  dateToPdfDate,\n  pdfDateToDate,\n  PdfAnnotationColorType,\n  PdfAnnotationBorderStyle,\n  flagsToNames,\n  PdfAnnotationFlagName,\n  namesToFlags,\n  PdfAnnotationLineEnding,\n  LinePoints,\n  LineEndings,\n  WebColor,\n  webColorToPdfColor,\n  PdfColor,\n  pdfColorToWebColor,\n  pdfAlphaToWebOpacity,\n  webOpacityToPdfAlpha,\n  PdfStandardFont,\n  PdfTextAlignment,\n  PdfVerticalAlignment,\n  AnnotationCreateContext,\n  ignore,\n  isUuidV4,\n  uuidV4,\n  PdfAnnotationIcon,\n  PdfPageSearchProgress,\n  PdfSearchAllPagesOptions,\n  PdfRenderPageAnnotationOptions,\n  PdfRedactTextOptions,\n  PdfFlattenPageOptions,\n  PdfRenderThumbnailOptions,\n  PdfRenderPageOptions,\n  PdfAnnotationsProgress,\n  ConvertToBlobOptions,\n  buildUserToDeviceMatrix,\n  Matrix,\n  PdfMetadataObject,\n  PdfPrintOptions,\n  PdfTrappedStatus,\n  PdfStampFit,\n  PdfAddAttachmentParams,\n} from '@kopjra/embedpdf-models';\nimport { computeFormDrawParams, isValidCustomKey, readArrayBuffer, readString } from './helper';\nimport { WrappedPdfiumModule } from '@kopjra/embedpdf-pdfium';\nimport { DocumentContext, PageContext, PdfCache } from './cache';\nimport { ImageDataConverter, LazyImageData } from '../converters/types';\nimport { MemoryManager } from './core/memory-manager';\nimport { WasmPointer } from './types/branded';\n\n/**\n * Format of bitmap\n */\nexport enum BitmapFormat {\n  Bitmap_Gray = 1,\n  Bitmap_BGR = 2,\n  Bitmap_BGRx = 3,\n  Bitmap_BGRA = 4,\n}\n\n/**\n * Pdf rendering flag\n */\nexport enum RenderFlag {\n  ANNOT = 0x01, // Set if annotations are to be rendered.\n  LCD_TEXT = 0x02, // Set if using text rendering optimized for LCD display.\n  NO_NATIVETEXT = 0x04, // Don't use the native text output available on some platforms\n  GRAYSCALE = 0x08, // Grayscale output.\n  DEBUG_INFO = 0x80, // Set if you want to get some debug info. Please discuss with Foxit first if you need to collect debug info.\n  NO_CATCH = 0x100, // Set if you don't want to catch exception.\n  RENDER_LIMITEDIMAGECACHE = 0x200, // Limit image cache size.\n  RENDER_FORCEHALFTONE = 0x400, // Always use halftone for image stretching.\n  PRINTING = 0x800, // Render for printing.\n  REVERSE_BYTE_ORDER = 0x10, // Set whether render in a reverse Byte order, this flag only.\n}\n\nconst LOG_SOURCE = 'PDFiumEngine';\nconst LOG_CATEGORY = 'Engine';\n\n/**\n * Context used for searching\n */\nexport interface SearchContext {\n  /**\n   * search target\n   */\n  target: SearchTarget;\n  /**\n   * current page index\n   */\n  currPageIndex: number;\n  /**\n   * index of text in the current pdf page,  -1 means reach the end\n   */\n  startIndex: number;\n}\n\n/**\n * Error code of pdfium library\n */\nexport enum PdfiumErrorCode {\n  Success = 0,\n  Unknown = 1,\n  File = 2,\n  Format = 3,\n  Password = 4,\n  Security = 5,\n  Page = 6,\n  XFALoad = 7,\n  XFALayout = 8,\n}\n\ninterface PdfiumEngineOptions<T> {\n  logger?: Logger;\n  imageDataConverter?: ImageDataConverter<T>;\n}\n\nexport class OffscreenCanvasError extends Error {\n  constructor(message: string) {\n    super(message);\n    this.name = 'OffscreenCanvasError';\n  }\n}\n\nexport const browserImageDataToBlobConverter: ImageDataConverter<Blob> = (\n  getImageData: LazyImageData,\n  imageType: ImageConversionTypes = 'image/webp',\n  quality?: number,\n): Promise<Blob> => {\n  // Check if we're in a browser environment\n  if (typeof OffscreenCanvas === 'undefined') {\n    return Promise.reject(\n      new OffscreenCanvasError(\n        'OffscreenCanvas is not available in this environment. ' +\n          'This converter is intended for browser use only. ' +\n          'Falling back to WASM-based image encoding.',\n      ),\n    );\n  }\n\n  const pdfImage = getImageData();\n  const imageData = new ImageData(pdfImage.data, pdfImage.width, pdfImage.height);\n  const off = new OffscreenCanvas(imageData.width, imageData.height);\n  off.getContext('2d')!.putImageData(imageData, 0, 0);\n  return off.convertToBlob({ type: imageType, quality });\n};\n\n/**\n * Pdf engine that based on pdfium wasm\n */\nexport class PdfiumEngine<T = Blob> implements PdfEngine<T> {\n  /**\n   * pdf documents that opened\n   */\n  private readonly cache: PdfCache;\n\n  /**\n   * memory manager instance\n   */\n  private readonly memoryManager: MemoryManager;\n\n  /**\n   * interval to check memory leaks\n   */\n  private memoryLeakCheckInterval: number | null = null;\n\n  /**\n   * logger instance\n   */\n  private logger: Logger;\n\n  /**\n   * function to convert ImageData to Blob\n   */\n  private readonly imageDataConverter: ImageDataConverter<T>;\n\n  /**\n   * Create an instance of PdfiumEngine\n   * @param wasmModule - pdfium wasm module\n   * @param logger - logger instance\n   * @param imageDataToBlobConverter - function to convert ImageData to Blob\n   */\n  constructor(\n    private pdfiumModule: WrappedPdfiumModule,\n    options: PdfiumEngineOptions<T> = {},\n  ) {\n    const {\n      logger = new NoopLogger(),\n      imageDataConverter = browserImageDataToBlobConverter as ImageDataConverter<T>,\n    } = options;\n\n    this.logger = logger;\n    this.imageDataConverter = imageDataConverter;\n    this.memoryManager = new MemoryManager(this.pdfiumModule, this.logger);\n    this.cache = new PdfCache(this.pdfiumModule, this.memoryManager);\n\n    if (this.logger.isEnabled('debug')) {\n      this.memoryLeakCheckInterval = setInterval(() => {\n        this.memoryManager.checkLeaks();\n      }, 10000) as unknown as number;\n    }\n  }\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.initialize}\n   *\n   * @public\n   */\n  initialize() {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'initialize');\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `Initialize`, 'Begin', 'General');\n    this.pdfiumModule.PDFiumExt_Init();\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `Initialize`, 'End', 'General');\n    return PdfTaskHelper.resolve(true);\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.destroy}\n   *\n   * @public\n   */\n  destroy() {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'destroy');\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `Destroy`, 'Begin', 'General');\n    this.pdfiumModule.FPDF_DestroyLibrary();\n    if (this.memoryLeakCheckInterval) {\n      clearInterval(this.memoryLeakCheckInterval);\n      this.memoryLeakCheckInterval = null;\n    }\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `Destroy`, 'End', 'General');\n    return PdfTaskHelper.resolve(true);\n  }\n\n  /** Write a UTF-16LE (WIDESTRING) to wasm, call `fn(ptr)`, then free. */\n  private withWString<T>(value: string, fn: (ptr: number) => T): T {\n    // bytes = (len + 1) * 2\n    const length = (value.length + 1) * 2;\n    const ptr = this.memoryManager.malloc(length);\n    try {\n      // emscripten runtime exposes stringToUTF16\n      this.pdfiumModule.pdfium.stringToUTF16(value, ptr, length);\n      return fn(ptr);\n    } finally {\n      this.memoryManager.free(ptr);\n    }\n  }\n\n  /** Write a float[] to wasm, call `fn(ptr, count)`, then free. */\n  private withFloatArray<T>(\n    values: number[] | undefined,\n    fn: (ptr: number, count: number) => T,\n  ): T {\n    const arr = values ?? [];\n    const bytes = arr.length * 4;\n    const ptr = bytes ? this.memoryManager.malloc(bytes) : WasmPointer(0);\n    try {\n      if (bytes) {\n        for (let i = 0; i < arr.length; i++) {\n          this.pdfiumModule.pdfium.setValue(ptr + i * 4, arr[i], 'float');\n        }\n      }\n      return fn(ptr, arr.length);\n    } finally {\n      if (bytes) this.memoryManager.free(ptr);\n    }\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.openDocumentUrl}\n   *\n   * @public\n   */\n  public openDocumentUrl(file: PdfFileUrl, options?: PdfOpenDocumentUrlOptions) {\n    const mode = options?.mode ?? 'auto';\n    const password = options?.password ?? '';\n    const requestOptions = options?.requestOptions;\n\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'openDocumentUrl called', file.url, mode);\n\n    // We'll create a task to wrap asynchronous steps\n    const task = PdfTaskHelper.create<PdfDocumentObject>();\n\n    // Start an async procedure\n    (async () => {\n      try {\n        const fetchFullTask = await this.fetchFullAndOpen(file, password, requestOptions);\n        fetchFullTask.wait(\n          (doc) => task.resolve(doc),\n          (err) => task.reject(err.reason),\n        );\n      } catch (err) {\n        this.logger.error(LOG_SOURCE, LOG_CATEGORY, 'openDocumentUrl error', err);\n        task.reject({\n          code: PdfErrorCode.Unknown,\n          message: String(err),\n        });\n      }\n    })();\n\n    return task;\n  }\n\n  /**\n   * Check if the server supports range requests:\n   * Sends a HEAD request and sees if 'Accept-Ranges: bytes'.\n   */\n  private async checkRangeSupport(\n    url: string,\n    requestOptions?: { headers?: Record<string, string>; credentials?: RequestCredentials },\n  ): Promise<{ supportsRanges: boolean; fileLength: number; content: ArrayBuffer | null }> {\n    try {\n      this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'checkRangeSupport', url);\n\n      // First try HEAD request\n      const headResponse = await fetch(url, {\n        method: 'HEAD',\n        headers: requestOptions?.headers,\n        credentials: requestOptions?.credentials,\n      });\n      const fileLength = headResponse.headers.get('Content-Length');\n      const acceptRanges = headResponse.headers.get('Accept-Ranges');\n\n      // If server explicitly supports ranges, we're done\n      if (acceptRanges === 'bytes') {\n        return {\n          supportsRanges: true,\n          fileLength: parseInt(fileLength ?? '0'),\n          content: null,\n        };\n      }\n\n      // Test actual range request support\n      const testResponse = await fetch(url, {\n        headers: { ...requestOptions?.headers, Range: 'bytes=0-1' },\n        credentials: requestOptions?.credentials,\n      });\n\n      // If we get 200 instead of 206, server doesn't support ranges\n      // Return the full content since we'll need it anyway\n      if (testResponse.status === 200) {\n        const content = await testResponse.arrayBuffer();\n        return {\n          supportsRanges: false,\n          fileLength: parseInt(fileLength ?? '0'),\n          content: content,\n        };\n      }\n\n      // 206 Partial Content indicates range support\n      return {\n        supportsRanges: testResponse.status === 206,\n        fileLength: parseInt(fileLength ?? '0'),\n        content: null,\n      };\n    } catch (e) {\n      this.logger.error(LOG_SOURCE, LOG_CATEGORY, 'checkRangeSupport failed', e);\n      throw new Error('Failed to check range support: ' + e);\n    }\n  }\n\n  /**\n   * Fully fetch the file (using fetch) into an ArrayBuffer,\n   * then call openDocumentFromBuffer.\n   */\n  private async fetchFullAndOpen(\n    file: PdfFileUrl,\n    password: string,\n    requestOptions?: { headers?: Record<string, string>; credentials?: RequestCredentials },\n  ) {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'fetchFullAndOpen', file.url);\n\n    // 1. fetch entire PDF as array buffer\n    const response = await fetch(file.url, {\n      headers: requestOptions?.headers,\n      credentials: requestOptions?.credentials,\n    });\n    if (!response.ok) {\n      throw new Error(`Could not fetch PDF: ${response.statusText}`);\n    }\n    const arrayBuf = await response.arrayBuffer();\n\n    // 2. create a PdfFile object\n    const pdfFile: PdfFile = {\n      id: file.id,\n      content: arrayBuf,\n    };\n\n    // 3. call openDocumentFromBuffer (the method you already have)\n    //    that returns a PdfTask, but let's wrap it in a Promise\n    return this.openDocumentBuffer(pdfFile, { password });\n  }\n\n  /**\n   * Use your synchronous partial-loading approach:\n   * - In your snippet, it's done via `openDocumentFromLoader`.\n   * - We'll do a synchronous XHR read callback that pulls\n   *   the desired byte ranges.\n   */\n  private async openDocumentWithRangeRequest(\n    file: PdfFileUrl,\n    password: string,\n    knownFileLength?: number,\n    requestOptions?: { headers?: Record<string, string>; credentials?: RequestCredentials },\n  ) {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'openDocumentWithRangeRequest', file.url);\n\n    // We first do a HEAD or a partial fetch to get the fileLength:\n    const fileLength =\n      knownFileLength ?? (await this.retrieveFileLength(file.url, requestOptions)).fileLength;\n\n    // 2. define the callback function used by openDocumentFromLoader\n    const callback = (offset: number, length: number) => {\n      // Perform synchronous XHR:\n      const xhr = new XMLHttpRequest();\n      xhr.open('GET', file.url, false); // note: block in the Worker\n      xhr.overrideMimeType('text/plain; charset=x-user-defined');\n\n      // Set Range header\n      xhr.setRequestHeader('Range', `bytes=${offset}-${offset + length - 1}`);\n\n      // Set custom headers if provided\n      if (requestOptions?.headers) {\n        Object.entries(requestOptions.headers).forEach(([key, value]) => {\n          xhr.setRequestHeader(key, value);\n        });\n      }\n\n      // Set credentials for cookies\n      if (requestOptions?.credentials) {\n        xhr.withCredentials = requestOptions.credentials === 'include';\n      }\n\n      xhr.send(null);\n\n      if (xhr.status === 206 || xhr.status === 200) {\n        return this.convertResponseToUint8Array(xhr.responseText);\n      }\n      throw new Error(`Range request failed with status ${xhr.status}`);\n    };\n\n    // 3. call `openDocumentFromLoader`\n    return this.openDocumentFromLoader(\n      {\n        id: file.id,\n        fileLength,\n        callback,\n      },\n      password,\n    );\n  }\n\n  /**\n   * Helper to do a HEAD request or partial GET to find file length.\n   */\n  private async retrieveFileLength(\n    url: string,\n    requestOptions?: { headers?: Record<string, string>; credentials?: RequestCredentials },\n  ): Promise<{ fileLength: number }> {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'retrieveFileLength', url);\n\n    // We'll do a HEAD request to get Content-Length\n    const resp = await fetch(url, {\n      method: 'HEAD',\n      headers: requestOptions?.headers,\n      credentials: requestOptions?.credentials,\n    });\n    if (!resp.ok) {\n      throw new Error(`Failed HEAD request for file length: ${resp.statusText}`);\n    }\n    const lenStr = resp.headers.get('Content-Length') || '0';\n    const fileLength = parseInt(lenStr, 10) || 0;\n    if (!fileLength) {\n      throw new Error(`Content-Length not found or zero.`);\n    }\n    return { fileLength };\n  }\n\n  /**\n   * Convert response text (x-user-defined) to a Uint8Array\n   * for partial data.\n   */\n  private convertResponseToUint8Array(text: string): Uint8Array {\n    const array = new Uint8Array(text.length);\n    for (let i = 0; i < text.length; i++) {\n      // & 0xff ensures we only get the lower 8 bits\n      array[i] = text.charCodeAt(i) & 0xff;\n    }\n    return array;\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.openDocument}\n   *\n   * @public\n   */\n  openDocumentBuffer(file: PdfFile, options?: PdfOpenDocumentBufferOptions) {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'openDocumentBuffer', file, options);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `OpenDocumentBuffer`, 'Begin', file.id);\n    const array = new Uint8Array(file.content);\n    const length = array.length;\n    const filePtr = this.memoryManager.malloc(length);\n    this.pdfiumModule.pdfium.HEAPU8.set(array, filePtr);\n\n    const docPtr = this.pdfiumModule.FPDF_LoadMemDocument(filePtr, length, options?.password ?? '');\n\n    if (!docPtr) {\n      const lastError = this.pdfiumModule.FPDF_GetLastError();\n      this.logger.error(LOG_SOURCE, LOG_CATEGORY, `FPDF_LoadMemDocument failed with ${lastError}`);\n      this.memoryManager.free(filePtr);\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `OpenDocumentBuffer`, 'End', file.id);\n\n      return PdfTaskHelper.reject<PdfDocumentObject>({\n        code: lastError,\n        message: `FPDF_LoadMemDocument failed`,\n      });\n    }\n\n    const pageCount = this.pdfiumModule.FPDF_GetPageCount(docPtr);\n\n    const pages: PdfPageObject[] = [];\n    const sizePtr = this.memoryManager.malloc(8);\n    for (let index = 0; index < pageCount; index++) {\n      const result = this.pdfiumModule.FPDF_GetPageSizeByIndexF(docPtr, index, sizePtr);\n      if (!result) {\n        const lastError = this.pdfiumModule.FPDF_GetLastError();\n        this.logger.error(\n          LOG_SOURCE,\n          LOG_CATEGORY,\n          `FPDF_GetPageSizeByIndexF failed with ${lastError}`,\n        );\n        this.memoryManager.free(sizePtr);\n        this.pdfiumModule.FPDF_CloseDocument(docPtr);\n        this.memoryManager.free(filePtr);\n        this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `OpenDocumentBuffer`, 'End', file.id);\n        return PdfTaskHelper.reject<PdfDocumentObject>({\n          code: lastError,\n          message: `FPDF_GetPageSizeByIndexF failed`,\n        });\n      }\n\n      const rotation = this.pdfiumModule.EPDF_GetPageRotationByIndex(docPtr, index) as Rotation;\n\n      const page = {\n        index,\n        size: {\n          width: this.pdfiumModule.pdfium.getValue(sizePtr, 'float'),\n          height: this.pdfiumModule.pdfium.getValue(sizePtr + 4, 'float'),\n        },\n        rotation,\n      };\n\n      pages.push(page);\n    }\n    this.memoryManager.free(sizePtr);\n\n    const pdfDoc: PdfDocumentObject = {\n      id: file.id,\n      pageCount,\n      pages,\n    };\n\n    this.cache.setDocument(file.id, filePtr, docPtr);\n\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `OpenDocumentBuffer`, 'End', file.id);\n\n    return PdfTaskHelper.resolve(pdfDoc);\n  }\n\n  openDocumentFromLoader(fileLoader: PdfFileLoader, password: string = '') {\n    const { fileLength, callback, ...file } = fileLoader;\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'openDocumentFromLoader', file, password);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `OpenDocumentFromLoader`, 'Begin', file.id);\n\n    const readBlock = (\n      _pThis: number, // Pointer to the FPDF_FILEACCESS structure\n      offset: number, // Pointer to a buffer to receive the data\n      pBuf: number, // Offset position from the beginning of the file\n      length: number, // Number of bytes to read\n    ): number => {\n      try {\n        this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'readBlock', offset, length, pBuf);\n\n        if (offset < 0 || offset >= fileLength) {\n          this.logger.error(LOG_SOURCE, LOG_CATEGORY, 'Offset out of bounds:', offset);\n          return 0;\n        }\n\n        // Get data chunk using the callback\n        const data = callback(offset, length);\n\n        // Copy the data to PDFium's buffer\n        const dest = new Uint8Array(this.pdfiumModule.pdfium.HEAPU8.buffer, pBuf, data.length);\n        dest.set(data);\n\n        return data.length;\n      } catch (error) {\n        this.logger.error(LOG_SOURCE, LOG_CATEGORY, 'ReadBlock error:', error);\n        return 0;\n      }\n    };\n\n    const callbackPtr = this.pdfiumModule.pdfium.addFunction(readBlock, 'iiiii');\n\n    // Create FPDF_FILEACCESS struct\n    const structSize = 12;\n    const fileAccessPtr = this.memoryManager.malloc(structSize);\n\n    // Set up struct fields\n    this.pdfiumModule.pdfium.setValue(fileAccessPtr, fileLength, 'i32');\n    this.pdfiumModule.pdfium.setValue(fileAccessPtr + 4, callbackPtr, 'i32');\n    this.pdfiumModule.pdfium.setValue(fileAccessPtr + 8, 0, 'i32');\n\n    // Load document\n    const docPtr = this.pdfiumModule.FPDF_LoadCustomDocument(fileAccessPtr, password);\n\n    if (!docPtr) {\n      const lastError = this.pdfiumModule.FPDF_GetLastError();\n      this.logger.error(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        `FPDF_LoadCustomDocument failed with ${lastError}`,\n      );\n      this.memoryManager.free(fileAccessPtr);\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `OpenDocumentFromLoader`, 'End', file.id);\n\n      return PdfTaskHelper.reject<PdfDocumentObject>({\n        code: lastError,\n        message: `FPDF_LoadCustomDocument failed`,\n      });\n    }\n\n    const pageCount = this.pdfiumModule.FPDF_GetPageCount(docPtr);\n\n    const pages: PdfPageObject[] = [];\n    const sizePtr = this.memoryManager.malloc(8);\n    for (let index = 0; index < pageCount; index++) {\n      const result = this.pdfiumModule.FPDF_GetPageSizeByIndexF(docPtr, index, sizePtr);\n      if (!result) {\n        const lastError = this.pdfiumModule.FPDF_GetLastError();\n        this.logger.error(\n          LOG_SOURCE,\n          LOG_CATEGORY,\n          `FPDF_GetPageSizeByIndexF failed with ${lastError}`,\n        );\n        this.memoryManager.free(sizePtr);\n        this.pdfiumModule.FPDF_CloseDocument(docPtr);\n        this.memoryManager.free(fileAccessPtr);\n        this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `OpenDocumentFromLoader`, 'End', file.id);\n        return PdfTaskHelper.reject<PdfDocumentObject>({\n          code: lastError,\n          message: `FPDF_GetPageSizeByIndexF failed`,\n        });\n      }\n\n      const rotation = this.pdfiumModule.EPDF_GetPageRotationByIndex(docPtr, index) as Rotation;\n\n      const page = {\n        index,\n        size: {\n          width: this.pdfiumModule.pdfium.getValue(sizePtr, 'float'),\n          height: this.pdfiumModule.pdfium.getValue(sizePtr + 4, 'float'),\n        },\n        rotation,\n      };\n\n      pages.push(page);\n    }\n    this.memoryManager.free(sizePtr);\n\n    const pdfDoc: PdfDocumentObject = {\n      id: file.id,\n      pageCount,\n      pages,\n    };\n    this.cache.setDocument(file.id, fileAccessPtr, docPtr);\n\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `OpenDocumentFromLoader`, 'End', file.id);\n\n    return PdfTaskHelper.resolve(pdfDoc);\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.getMetadata}\n   *\n   * @public\n   */\n  getMetadata(doc: PdfDocumentObject): PdfTask<PdfMetadataObject, PdfErrorReason> {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getMetadata', doc);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `GetMetadata`, 'Begin', doc.id);\n\n    const ctx = this.cache.getContext(doc.id);\n\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `GetMetadata`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    const creationRaw = this.readMetaText(ctx.docPtr, 'CreationDate');\n    const modRaw = this.readMetaText(ctx.docPtr, 'ModDate');\n\n    const metadata: PdfMetadataObject = {\n      title: this.readMetaText(ctx.docPtr, 'Title'),\n      author: this.readMetaText(ctx.docPtr, 'Author'),\n      subject: this.readMetaText(ctx.docPtr, 'Subject'),\n      keywords: this.readMetaText(ctx.docPtr, 'Keywords'),\n      producer: this.readMetaText(ctx.docPtr, 'Producer'),\n      creator: this.readMetaText(ctx.docPtr, 'Creator'),\n      creationDate: creationRaw ? (pdfDateToDate(creationRaw) ?? null) : null,\n      modificationDate: modRaw ? (pdfDateToDate(modRaw) ?? null) : null,\n      trapped: this.getMetaTrapped(ctx.docPtr),\n      custom: this.readAllMeta(ctx.docPtr, true),\n    };\n\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `GetMetadata`, 'End', doc.id);\n\n    return PdfTaskHelper.resolve(metadata);\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.setMetadata}\n   *\n   * @public\n   */\n  setMetadata(doc: PdfDocumentObject, meta: Partial<PdfMetadataObject>) {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'setMetadata', doc, meta);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, 'SetMetadata', 'Begin', doc.id);\n\n    const ctx = this.cache.getContext(doc.id);\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, 'SetMetadata', 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    // Field -> PDF Info key\n    const strMap: Array<[keyof PdfMetadataObject, string]> = [\n      ['title', 'Title'],\n      ['author', 'Author'],\n      ['subject', 'Subject'],\n      ['keywords', 'Keywords'],\n      ['producer', 'Producer'],\n      ['creator', 'Creator'],\n    ];\n\n    let ok = true;\n\n    // Write string fields (string|null|undefined)\n    for (const [field, key] of strMap) {\n      const v = meta[field];\n      if (v === undefined) continue;\n      const s = v === null ? null : (v as string);\n      if (!this.setMetaText(ctx.docPtr, key, s)) ok = false;\n    }\n\n    // Write date fields (Date|null|undefined)\n    const writeDate = (\n      field: 'creationDate' | 'modificationDate',\n      key: 'CreationDate' | 'ModDate',\n    ) => {\n      const v = meta[field];\n      if (v === undefined) return;\n      if (v === null) {\n        if (!this.setMetaText(ctx.docPtr, key, null)) ok = false;\n        return;\n      }\n      const d = v as Date;\n      const raw = dateToPdfDate(d);\n      if (!this.setMetaText(ctx.docPtr, key, raw)) ok = false;\n    };\n\n    writeDate('creationDate', 'CreationDate');\n    writeDate('modificationDate', 'ModDate');\n\n    if (meta.trapped !== undefined) {\n      if (!this.setMetaTrapped(ctx.docPtr, meta.trapped ?? null)) ok = false;\n    }\n\n    if (meta.custom !== undefined) {\n      for (const [key, value] of Object.entries(meta.custom)) {\n        if (!isValidCustomKey(key)) {\n          this.logger.warn(LOG_SOURCE, LOG_CATEGORY, 'Invalid custom metadata key skipped', key);\n          continue;\n        }\n        if (!this.setMetaText(ctx.docPtr, key, value ?? null)) ok = false;\n      }\n    }\n\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, 'SetMetadata', 'End', doc.id);\n\n    return ok\n      ? PdfTaskHelper.resolve(true)\n      : PdfTaskHelper.reject({\n          code: PdfErrorCode.Unknown,\n          message: 'one or more metadata fields could not be written',\n        });\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.getDocPermissions}\n   *\n   * @public\n   */\n  getDocPermissions(doc: PdfDocumentObject) {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getDocPermissions', doc);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `getDocPermissions`, 'Begin', doc.id);\n\n    const ctx = this.cache.getContext(doc.id);\n\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `getDocPermissions`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    const permissions = this.pdfiumModule.FPDF_GetDocPermissions(ctx.docPtr);\n\n    return PdfTaskHelper.resolve(permissions);\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.getDocUserPermissions}\n   *\n   * @public\n   */\n  getDocUserPermissions(doc: PdfDocumentObject) {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getDocUserPermissions', doc);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `getDocUserPermissions`, 'Begin', doc.id);\n\n    const ctx = this.cache.getContext(doc.id);\n\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `getDocUserPermissions`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    const permissions = this.pdfiumModule.FPDF_GetDocUserPermissions(ctx.docPtr);\n\n    return PdfTaskHelper.resolve(permissions);\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.getSignatures}\n   *\n   * @public\n   */\n  getSignatures(doc: PdfDocumentObject) {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getSignatures', doc);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `GetSignatures`, 'Begin', doc.id);\n\n    const ctx = this.cache.getContext(doc.id);\n\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `GetSignatures`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    const signatures: PdfSignatureObject[] = [];\n\n    const count = this.pdfiumModule.FPDF_GetSignatureCount(ctx.docPtr);\n    for (let i = 0; i < count; i++) {\n      const signatureObjPtr = this.pdfiumModule.FPDF_GetSignatureObject(ctx.docPtr, i);\n\n      const contents = readArrayBuffer(this.pdfiumModule.pdfium, (buffer, bufferSize) => {\n        return this.pdfiumModule.FPDFSignatureObj_GetContents(signatureObjPtr, buffer, bufferSize);\n      });\n\n      const byteRange = readArrayBuffer(this.pdfiumModule.pdfium, (buffer, bufferSize) => {\n        return (\n          this.pdfiumModule.FPDFSignatureObj_GetByteRange(signatureObjPtr, buffer, bufferSize) * 4\n        );\n      });\n\n      const subFilter = readArrayBuffer(this.pdfiumModule.pdfium, (buffer, bufferSize) => {\n        return this.pdfiumModule.FPDFSignatureObj_GetSubFilter(signatureObjPtr, buffer, bufferSize);\n      });\n\n      const reason = readString(\n        this.pdfiumModule.pdfium,\n        (buffer, bufferLength) => {\n          return this.pdfiumModule.FPDFSignatureObj_GetReason(\n            signatureObjPtr,\n            buffer,\n            bufferLength,\n          );\n        },\n        this.pdfiumModule.pdfium.UTF16ToString,\n      );\n\n      const time = readString(\n        this.pdfiumModule.pdfium,\n        (buffer, bufferLength) => {\n          return this.pdfiumModule.FPDFSignatureObj_GetTime(signatureObjPtr, buffer, bufferLength);\n        },\n        this.pdfiumModule.pdfium.UTF8ToString,\n      );\n\n      const docMDP = this.pdfiumModule.FPDFSignatureObj_GetDocMDPPermission(signatureObjPtr);\n\n      signatures.push({\n        contents,\n        byteRange,\n        subFilter,\n        reason,\n        time,\n        docMDP,\n      });\n    }\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `GetSignatures`, 'End', doc.id);\n\n    return PdfTaskHelper.resolve(signatures);\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.getBookmarks}\n   *\n   * @public\n   */\n  getBookmarks(doc: PdfDocumentObject) {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getBookmarks', doc);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `GetBookmarks`, 'Begin', doc.id);\n\n    const ctx = this.cache.getContext(doc.id);\n\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `getBookmarks`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    const bookmarks = this.readPdfBookmarks(ctx.docPtr, 0);\n\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `GetBookmarks`, 'End', doc.id);\n\n    return PdfTaskHelper.resolve({\n      bookmarks,\n    });\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.setBookmarks}\n   *\n   * @public\n   */\n  setBookmarks(doc: PdfDocumentObject, list: PdfBookmarkObject[]) {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'setBookmarks', doc, list);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `SetBookmarks`, 'Begin', doc.id);\n\n    const ctx = this.cache.getContext(doc.id);\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `SetBookmarks`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    // Clear any existing outlines\n    if (!this.pdfiumModule.EPDFBookmark_Clear(ctx.docPtr)) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `SetBookmarks`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.Unknown,\n        message: 'failed to clear existing bookmarks',\n      });\n    }\n\n    // Recursive builder\n    const build = (parentPtr: number, items: PdfBookmarkObject[]): boolean => {\n      let prevChild = 0;\n      for (const item of items) {\n        // Create\n        const bmPtr = this.withWString(item.title ?? '', (wptr) =>\n          this.pdfiumModule.EPDFBookmark_AppendChild(ctx.docPtr, parentPtr, wptr),\n        );\n        if (!bmPtr) return false;\n\n        // Target (optional)\n        if (item.target) {\n          const ok = this.applyBookmarkTarget(ctx.docPtr, bmPtr, item.target);\n          if (!ok) return false;\n        }\n\n        // Children\n        if (item.children?.length) {\n          const ok = build(bmPtr, item.children);\n          if (!ok) return false;\n        }\n\n        prevChild = bmPtr;\n      }\n      return true;\n    };\n\n    const ok = build(/*top-level*/ 0, list);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `SetBookmarks`, 'End', doc.id);\n\n    if (!ok) {\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.Unknown,\n        message: 'failed to build bookmark tree',\n      });\n    }\n    return PdfTaskHelper.resolve(true);\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.deleteBookmarks}\n   *\n   * @public\n   */\n  deleteBookmarks(doc: PdfDocumentObject) {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'deleteBookmarks', doc);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `DeleteBookmarks`, 'Begin', doc.id);\n\n    const ctx = this.cache.getContext(doc.id);\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `DeleteBookmarks`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    const ok = this.pdfiumModule.EPDFBookmark_Clear(ctx.docPtr);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `DeleteBookmarks`, 'End', doc.id);\n\n    return ok\n      ? PdfTaskHelper.resolve(true)\n      : PdfTaskHelper.reject({\n          code: PdfErrorCode.Unknown,\n          message: 'failed to clear bookmarks',\n        });\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.renderPage}\n   *\n   * @public\n   */\n  renderPage(\n    doc: PdfDocumentObject,\n    page: PdfPageObject,\n    options?: PdfRenderPageOptions,\n  ): PdfTask<T> {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'renderPage', doc, page, options);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `RenderPage`, 'Begin', `${doc.id}-${page.index}`);\n\n    const rect = { origin: { x: 0, y: 0 }, size: page.size };\n    const task = this.renderRectEncoded(doc, page, rect, options);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `RenderPage`, 'End', `${doc.id}-${page.index}`);\n\n    return task;\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.renderPageRect}\n   *\n   * @public\n   */\n  renderPageRect(\n    doc: PdfDocumentObject,\n    page: PdfPageObject,\n    rect: Rect,\n    options?: PdfRenderPageOptions,\n  ): PdfTask<T> {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'renderPageRect', doc, page, rect, options);\n    this.logger.perf(\n      LOG_SOURCE,\n      LOG_CATEGORY,\n      `RenderPageRect`,\n      'Begin',\n      `${doc.id}-${page.index}`,\n    );\n\n    const task = this.renderRectEncoded(doc, page, rect, options);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `RenderPageRect`, 'End', `${doc.id}-${page.index}`);\n\n    return task;\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.getAllAnnotations}\n   *\n   * @public\n   */\n  getAllAnnotations(\n    doc: PdfDocumentObject,\n  ): PdfTask<Record<number, PdfAnnotationObject[]>, PdfAnnotationsProgress> {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getAllAnnotations-with-progress', doc);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, 'GetAllAnnotations', 'Begin', doc.id);\n\n    /* 1 ── create an async task wrapper ─────────────────────────────── */\n    const task = PdfTaskHelper.create<\n      Record<number, PdfAnnotationObject[]>,\n      PdfAnnotationsProgress\n    >();\n\n    let cancelled = false;\n    task.wait(ignore, (err) => {\n      if (err.type === 'abort') cancelled = true;\n    });\n\n    /* 2 ── sanity-check: document must be open ──────────────────────── */\n    const ctx = this.cache.getContext(doc.id);\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, 'GetAllAnnotations', 'End', doc.id);\n      task.reject({ code: PdfErrorCode.DocNotOpen, message: 'document does not open' });\n      return task;\n    }\n\n    /* 3 ── chunked walk so we yield less often, but still breathe ───── */\n    const CHUNK_SIZE = 100; // ← tweak here\n    const out: Record<number, PdfAnnotationObject[]> = {};\n\n    const processChunk = (startIdx: number): void => {\n      if (cancelled) return;\n\n      const endIdx = Math.min(startIdx + CHUNK_SIZE, doc.pageCount);\n      for (let pageIdx = startIdx; pageIdx < endIdx && !cancelled; ++pageIdx) {\n        this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'GetAllAnnotations', 'Begin', doc.id, pageIdx);\n\n        /* read this page’s annotations */\n        const annots = this.readPageAnnotationsRaw(ctx, doc.pages[pageIdx]);\n        out[pageIdx] = annots;\n\n        this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'GetAllAnnotations', 'End', doc.id, pageIdx);\n        task.progress({ page: pageIdx, annotations: annots });\n      }\n\n      /* all done? */\n      if (cancelled) return;\n      if (endIdx >= doc.pageCount) {\n        this.logger.perf(LOG_SOURCE, LOG_CATEGORY, 'GetAllAnnotations', 'End', doc.id);\n        task.resolve(out);\n        return;\n      }\n\n      /* let the browser breathe, then continue with next chunk */\n      setTimeout(() => processChunk(endIdx), 0);\n    };\n\n    /* kick-off */\n    processChunk(0);\n    return task;\n  }\n\n  private readAllAnnotations(\n    doc: PdfDocumentObject,\n    ctx: DocumentContext,\n  ): Record<number, PdfAnnotationObject[]> {\n    const annotationsByPage: Record<number, PdfAnnotationObject[]> = {};\n\n    for (let i = 0; i < doc.pageCount; i++) {\n      const pageAnnotations = this.readPageAnnotations(ctx, doc.pages[i]);\n      annotationsByPage[i] = pageAnnotations;\n    }\n\n    return annotationsByPage;\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.getPageAnnotations}\n   *\n   * @public\n   */\n  getPageAnnotations(doc: PdfDocumentObject, page: PdfPageObject) {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getPageAnnotations', doc, page);\n    this.logger.perf(\n      LOG_SOURCE,\n      LOG_CATEGORY,\n      `GetPageAnnotations`,\n      'Begin',\n      `${doc.id}-${page.index}`,\n    );\n\n    const ctx = this.cache.getContext(doc.id);\n\n    if (!ctx) {\n      this.logger.perf(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        `GetPageAnnotations`,\n        'End',\n        `${doc.id}-${page.index}`,\n      );\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    const annotations = this.readPageAnnotations(ctx, page);\n\n    this.logger.perf(\n      LOG_SOURCE,\n      LOG_CATEGORY,\n      `GetPageAnnotations`,\n      'End',\n      `${doc.id}-${page.index}`,\n    );\n\n    this.logger.debug(\n      LOG_SOURCE,\n      LOG_CATEGORY,\n      `GetPageAnnotations`,\n      `${doc.id}-${page.index}`,\n      annotations,\n    );\n\n    return PdfTaskHelper.resolve(annotations);\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.createPageAnnotation}\n   *\n   * @public\n   */\n  createPageAnnotation<A extends PdfAnnotationObject>(\n    doc: PdfDocumentObject,\n    page: PdfPageObject,\n    annotation: A,\n    context?: AnnotationCreateContext<A>,\n  ): PdfTask<string> {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'createPageAnnotation', doc, page, annotation);\n    this.logger.perf(\n      LOG_SOURCE,\n      LOG_CATEGORY,\n      `CreatePageAnnotation`,\n      'Begin',\n      `${doc.id}-${page.index}`,\n    );\n\n    const ctx = this.cache.getContext(doc.id);\n\n    if (!ctx) {\n      this.logger.perf(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        `CreatePageAnnotation`,\n        'End',\n        `${doc.id}-${page.index}`,\n      );\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    const pageCtx = ctx.acquirePage(page.index);\n    const annotationPtr = this.pdfiumModule.EPDFPage_CreateAnnot(pageCtx.pagePtr, annotation.type);\n    if (!annotationPtr) {\n      this.logger.perf(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        `CreatePageAnnotation`,\n        'End',\n        `${doc.id}-${page.index}`,\n      );\n      pageCtx.release();\n\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.CantCreateAnnot,\n        message: 'can not create annotation with specified type',\n      });\n    }\n\n    if (!isUuidV4(annotation.id)) {\n      annotation.id = uuidV4();\n    }\n\n    if (!this.setAnnotString(annotationPtr, 'NM', annotation.id)) {\n      this.pdfiumModule.FPDFPage_CloseAnnot(annotationPtr);\n      pageCtx.release();\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.CantSetAnnotString,\n        message: 'can not set the name of the annotation',\n      });\n    }\n\n    if (!this.setPageAnnoRect(page, annotationPtr, annotation.rect)) {\n      this.pdfiumModule.FPDFPage_CloseAnnot(annotationPtr);\n      pageCtx.release();\n      this.logger.perf(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        `CreatePageAnnotation`,\n        'End',\n        `${doc.id}-${page.index}`,\n      );\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.CantSetAnnotRect,\n        message: 'can not set the rect of the annotation',\n      });\n    }\n\n    let isSucceed = false;\n    switch (annotation.type) {\n      case PdfAnnotationSubtype.INK:\n        isSucceed = this.addInkStroke(page, pageCtx.pagePtr, annotationPtr, annotation);\n        break;\n      case PdfAnnotationSubtype.STAMP:\n        isSucceed = this.addStampContent(\n          ctx.docPtr,\n          page,\n          pageCtx.pagePtr,\n          annotationPtr,\n          annotation,\n          context?.imageData,\n        );\n        break;\n      case PdfAnnotationSubtype.TEXT:\n        isSucceed = this.addTextContent(page, pageCtx.pagePtr, annotationPtr, annotation);\n        break;\n      case PdfAnnotationSubtype.FREETEXT:\n        isSucceed = this.addFreeTextContent(page, pageCtx.pagePtr, annotationPtr, annotation);\n        break;\n      case PdfAnnotationSubtype.LINE:\n        isSucceed = this.addLineContent(page, pageCtx.pagePtr, annotationPtr, annotation);\n        break;\n      case PdfAnnotationSubtype.POLYLINE:\n      case PdfAnnotationSubtype.POLYGON:\n        isSucceed = this.addPolyContent(page, pageCtx.pagePtr, annotationPtr, annotation);\n        break;\n      case PdfAnnotationSubtype.CIRCLE:\n      case PdfAnnotationSubtype.SQUARE:\n        isSucceed = this.addShapeContent(page, pageCtx.pagePtr, annotationPtr, annotation);\n        break;\n      case PdfAnnotationSubtype.UNDERLINE:\n      case PdfAnnotationSubtype.STRIKEOUT:\n      case PdfAnnotationSubtype.SQUIGGLY:\n      case PdfAnnotationSubtype.HIGHLIGHT:\n        isSucceed = this.addTextMarkupContent(page, pageCtx.pagePtr, annotationPtr, annotation);\n        break;\n    }\n\n    if (!isSucceed) {\n      this.pdfiumModule.FPDFPage_RemoveAnnot(pageCtx.pagePtr, annotationPtr);\n      pageCtx.release();\n      this.logger.perf(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        `CreatePageAnnotation`,\n        'End',\n        `${doc.id}-${page.index}`,\n      );\n\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.CantSetAnnotContent,\n        message: 'can not add content of the annotation',\n      });\n    }\n\n    if (annotation.blendMode !== undefined) {\n      this.pdfiumModule.EPDFAnnot_GenerateAppearanceWithBlend(annotationPtr, annotation.blendMode);\n    } else {\n      this.pdfiumModule.EPDFAnnot_GenerateAppearance(annotationPtr);\n    }\n\n    this.pdfiumModule.FPDFPage_GenerateContent(pageCtx.pagePtr);\n\n    this.pdfiumModule.FPDFPage_CloseAnnot(annotationPtr);\n    pageCtx.release();\n    this.logger.perf(\n      LOG_SOURCE,\n      LOG_CATEGORY,\n      `CreatePageAnnotation`,\n      'End',\n      `${doc.id}-${page.index}`,\n    );\n\n    return PdfTaskHelper.resolve<string>(annotation.id);\n  }\n\n  /**\n   * Update an existing page annotation in-place\n   *\n   *  • Locates the annot by page-local index (`annotation.id`)\n   *  • Re-writes its /Rect and type-specific payload\n   *  • Calls FPDFPage_GenerateContent so the new appearance is rendered\n   *\n   * @returns PdfTask<boolean>  –  true on success\n   */\n  updatePageAnnotation(\n    doc: PdfDocumentObject,\n    page: PdfPageObject,\n    annotation: PdfAnnotationObject,\n  ): PdfTask<boolean> {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'updatePageAnnotation', doc, page, annotation);\n    this.logger.perf(\n      LOG_SOURCE,\n      LOG_CATEGORY,\n      'UpdatePageAnnotation',\n      'Begin',\n      `${doc.id}-${page.index}`,\n    );\n\n    const ctx = this.cache.getContext(doc.id);\n    if (!ctx) {\n      this.logger.perf(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        'UpdatePageAnnotation',\n        'End',\n        `${doc.id}-${page.index}`,\n      );\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    const pageCtx = ctx.acquirePage(page.index);\n    const annotPtr = this.getAnnotationByName(pageCtx.pagePtr, annotation.id);\n    if (!annotPtr) {\n      pageCtx.release();\n      this.logger.perf(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        'UpdatePageAnnotation',\n        'End',\n        `${doc.id}-${page.index}`,\n      );\n      return PdfTaskHelper.reject({ code: PdfErrorCode.NotFound, message: 'annotation not found' });\n    }\n\n    /* 1 ── (re)set bounding-box ────────────────────────────────────────────── */\n    if (!this.setPageAnnoRect(page, annotPtr, annotation.rect)) {\n      this.pdfiumModule.FPDFPage_CloseAnnot(annotPtr);\n      pageCtx.release();\n      this.logger.perf(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        'UpdatePageAnnotation',\n        'End',\n        `${doc.id}-${page.index}`,\n      );\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.CantSetAnnotRect,\n        message: 'failed to move annotation',\n      });\n    }\n\n    /* 2 ── wipe previous payload and rebuild fresh one ─────────────────────── */\n    let ok = false;\n    switch (annotation.type) {\n      /* ── Ink ─────────────────────────────────────────────────────────────── */\n      case PdfAnnotationSubtype.INK: {\n        /* clear every existing stroke first */\n        if (!this.pdfiumModule.FPDFAnnot_RemoveInkList(annotPtr)) break;\n        ok = this.addInkStroke(page, pageCtx.pagePtr, annotPtr, annotation);\n        break;\n      }\n\n      /* ── Stamp ───────────────────────────────────────────────────────────── */\n      case PdfAnnotationSubtype.STAMP: {\n        ok = this.addStampContent(ctx.docPtr, page, pageCtx.pagePtr, annotPtr, annotation);\n        break;\n      }\n\n      case PdfAnnotationSubtype.TEXT: {\n        ok = this.addTextContent(page, pageCtx.pagePtr, annotPtr, annotation);\n        break;\n      }\n\n      /* ── Free text ────────────────────────────────────────────────────────── */\n      case PdfAnnotationSubtype.FREETEXT: {\n        ok = this.addFreeTextContent(page, pageCtx.pagePtr, annotPtr, annotation);\n        break;\n      }\n\n      /* ── Shape ───────────────────────────────────────────────────────────── */\n      case PdfAnnotationSubtype.CIRCLE:\n      case PdfAnnotationSubtype.SQUARE: {\n        ok = this.addShapeContent(page, pageCtx.pagePtr, annotPtr, annotation);\n        break;\n      }\n\n      /* ── Line ─────────────────────────────────────────────────────────────── */\n      case PdfAnnotationSubtype.LINE: {\n        ok = this.addLineContent(page, pageCtx.pagePtr, annotPtr, annotation);\n        break;\n      }\n\n      /* ── Polygon / Polyline ───────────────────────────────────────────────── */\n      case PdfAnnotationSubtype.POLYGON:\n      case PdfAnnotationSubtype.POLYLINE: {\n        ok = this.addPolyContent(page, pageCtx.pagePtr, annotPtr, annotation);\n        break;\n      }\n\n      /* ── Text-markup family ──────────────────────────────────────────────── */\n      case PdfAnnotationSubtype.HIGHLIGHT:\n      case PdfAnnotationSubtype.UNDERLINE:\n      case PdfAnnotationSubtype.STRIKEOUT:\n      case PdfAnnotationSubtype.SQUIGGLY: {\n        /* replace quad-points / colour / strings in one go */\n        ok = this.addTextMarkupContent(page, pageCtx.pagePtr, annotPtr, annotation);\n        break;\n      }\n\n      /* ── Unsupported edits – fall through to error ───────────────────────── */\n      default:\n        ok = false;\n    }\n\n    /* 3 ── regenerate appearance if payload was changed ───────────────────── */\n    if (ok) {\n      if (annotation.blendMode !== undefined) {\n        this.pdfiumModule.EPDFAnnot_GenerateAppearanceWithBlend(annotPtr, annotation.blendMode);\n      } else {\n        this.pdfiumModule.EPDFAnnot_GenerateAppearance(annotPtr);\n      }\n      this.pdfiumModule.FPDFPage_GenerateContent(pageCtx.pagePtr);\n    }\n\n    /* 4 ── tidy-up native handles ──────────────────────────────────────────── */\n    this.pdfiumModule.FPDFPage_CloseAnnot(annotPtr);\n    pageCtx.release();\n    this.logger.perf(\n      LOG_SOURCE,\n      LOG_CATEGORY,\n      'UpdatePageAnnotation',\n      'End',\n      `${doc.id}-${page.index}`,\n    );\n\n    return ok\n      ? PdfTaskHelper.resolve<boolean>(true)\n      : PdfTaskHelper.reject<boolean>({\n          code: PdfErrorCode.CantSetAnnotContent,\n          message: 'failed to update annotation',\n        });\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.removePageAnnotation}\n   *\n   * @public\n   */\n  removePageAnnotation(\n    doc: PdfDocumentObject,\n    page: PdfPageObject,\n    annotation: PdfAnnotationObject,\n  ) {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'removePageAnnotation', doc, page, annotation);\n    this.logger.perf(\n      LOG_SOURCE,\n      LOG_CATEGORY,\n      `RemovePageAnnotation`,\n      'Begin',\n      `${doc.id}-${page.index}`,\n    );\n\n    const ctx = this.cache.getContext(doc.id);\n\n    if (!ctx) {\n      this.logger.perf(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        `RemovePageAnnotation`,\n        'End',\n        `${doc.id}-${page.index}`,\n      );\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    const pageCtx = ctx.acquirePage(page.index);\n    let result = false;\n    result = this.removeAnnotationByName(pageCtx.pagePtr, annotation.id);\n    if (!result) {\n      this.logger.error(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        `FPDFPage_RemoveAnnot Failed`,\n        `${doc.id}-${page.index}`,\n      );\n    } else {\n      result = this.pdfiumModule.FPDFPage_GenerateContent(pageCtx.pagePtr);\n      if (!result) {\n        this.logger.error(\n          LOG_SOURCE,\n          LOG_CATEGORY,\n          `FPDFPage_GenerateContent Failed`,\n          `${doc.id}-${page.index}`,\n        );\n      }\n    }\n\n    pageCtx.release();\n\n    this.logger.perf(\n      LOG_SOURCE,\n      LOG_CATEGORY,\n      `RemovePageAnnotation`,\n      'End',\n      `${doc.id}-${page.index}`,\n    );\n    return PdfTaskHelper.resolve(result);\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.getPageTextRects}\n   *\n   * @public\n   */\n  getPageTextRects(doc: PdfDocumentObject, page: PdfPageObject) {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getPageTextRects', doc, page);\n    this.logger.perf(\n      LOG_SOURCE,\n      LOG_CATEGORY,\n      `GetPageTextRects`,\n      'Begin',\n      `${doc.id}-${page.index}`,\n    );\n\n    const ctx = this.cache.getContext(doc.id);\n\n    if (!ctx) {\n      this.logger.perf(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        `GetPageTextRects`,\n        'End',\n        `${doc.id}-${page.index}`,\n      );\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    const pageCtx = ctx.acquirePage(page.index);\n    const textPagePtr = this.pdfiumModule.FPDFText_LoadPage(pageCtx.pagePtr);\n\n    const textRects = this.readPageTextRects(page, pageCtx.docPtr, pageCtx.pagePtr, textPagePtr);\n\n    this.pdfiumModule.FPDFText_ClosePage(textPagePtr);\n    pageCtx.release();\n\n    this.logger.perf(\n      LOG_SOURCE,\n      LOG_CATEGORY,\n      `GetPageTextRects`,\n      'End',\n      `${doc.id}-${page.index}`,\n    );\n    return PdfTaskHelper.resolve(textRects);\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.renderThumbnail}\n   *\n   * @public\n   */\n  renderThumbnail(\n    doc: PdfDocumentObject,\n    page: PdfPageObject,\n    options?: PdfRenderThumbnailOptions,\n  ): PdfTask<T> {\n    const { scaleFactor = 1, ...rest } = options ?? {};\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'renderThumbnail', doc, page, options);\n    this.logger.perf(\n      LOG_SOURCE,\n      LOG_CATEGORY,\n      `RenderThumbnail`,\n      'Begin',\n      `${doc.id}-${page.index}`,\n    );\n\n    const ctx = this.cache.getContext(doc.id);\n\n    if (!ctx) {\n      this.logger.perf(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        `RenderThumbnail`,\n        'End',\n        `${doc.id}-${page.index}`,\n      );\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    const result = this.renderPage(doc, page, {\n      scaleFactor: Math.max(scaleFactor, 0.5),\n      ...rest,\n    });\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `RenderThumbnail`, 'End', `${doc.id}-${page.index}`);\n\n    return result;\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.getAttachments}\n   *\n   * @public\n   */\n  getAttachments(doc: PdfDocumentObject) {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getAttachments', doc);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `GetAttachments`, 'Begin', doc.id);\n\n    const ctx = this.cache.getContext(doc.id);\n\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `GetAttachments`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    const attachments: PdfAttachmentObject[] = [];\n\n    const count = this.pdfiumModule.FPDFDoc_GetAttachmentCount(ctx.docPtr);\n    for (let i = 0; i < count; i++) {\n      const attachment = this.readPdfAttachment(ctx.docPtr, i);\n      attachments.push(attachment);\n    }\n\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `GetAttachments`, 'End', doc.id);\n    return PdfTaskHelper.resolve(attachments);\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.addAttachment}\n   *\n   * @public\n   */\n  addAttachment(doc: PdfDocumentObject, params: PdfAddAttachmentParams): PdfTask<boolean> {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'addAttachment', doc, params?.name);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `AddAttachment`, 'Begin', doc.id);\n\n    const ctx = this.cache.getContext(doc.id);\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `AddAttachment`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    const { name, description, mimeType, data } = params ?? {};\n    if (!name) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `AddAttachment`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.NotFound,\n        message: 'attachment name is required',\n      });\n    }\n    if (!data || (data instanceof Uint8Array ? data.byteLength === 0 : data.byteLength === 0)) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `AddAttachment`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.NotFound,\n        message: 'attachment data is empty',\n      });\n    }\n\n    // 1) Create the attachment handle (also inserts into the EmbeddedFiles name tree).\n    const attachmentPtr = this.withWString(name, (wNamePtr) =>\n      this.pdfiumModule.FPDFDoc_AddAttachment(ctx.docPtr, wNamePtr),\n    );\n\n    if (!attachmentPtr) {\n      // Most likely: duplicate name in the name tree.\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `AddAttachment`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.Unknown,\n        message: `An attachment named \"${name}\" already exists`,\n      });\n    }\n\n    this.withWString(description, (wDescriptionPtr) =>\n      this.pdfiumModule.EPDFAttachment_SetDescription(attachmentPtr, wDescriptionPtr),\n    );\n\n    this.pdfiumModule.EPDFAttachment_SetSubtype(attachmentPtr, mimeType);\n\n    // 3) Copy data into WASM memory and call SetFile (this stores bytes and fills Size/CreationDate/CheckSum)\n    const u8 = data instanceof Uint8Array ? data : new Uint8Array(data);\n    const len = u8.byteLength;\n\n    const contentPtr = this.memoryManager.malloc(len);\n    try {\n      this.pdfiumModule.pdfium.HEAPU8.set(u8, contentPtr);\n      const ok = this.pdfiumModule.FPDFAttachment_SetFile(\n        attachmentPtr,\n        ctx.docPtr,\n        contentPtr,\n        len,\n      );\n      if (!ok) {\n        this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `AddAttachment`, 'End', doc.id);\n        return PdfTaskHelper.reject({\n          code: PdfErrorCode.Unknown,\n          message: 'failed to write attachment bytes',\n        });\n      }\n    } finally {\n      this.memoryManager.free(contentPtr);\n    }\n\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `AddAttachment`, 'End', doc.id);\n    return PdfTaskHelper.resolve<boolean>(true);\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.removeAttachment}\n   *\n   * @public\n   */\n  removeAttachment(doc: PdfDocumentObject, attachment: PdfAttachmentObject): PdfTask<boolean> {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'deleteAttachment', doc, attachment);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `DeleteAttachment`, 'Begin', doc.id);\n\n    const ctx = this.cache.getContext(doc.id);\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `DeleteAttachment`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    const count = this.pdfiumModule.FPDFDoc_GetAttachmentCount(ctx.docPtr);\n    if (attachment.index < 0 || attachment.index >= count) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `DeleteAttachment`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.Unknown,\n        message: `attachment index ${attachment.index} out of range`,\n      });\n    }\n\n    const ok = this.pdfiumModule.FPDFDoc_DeleteAttachment(ctx.docPtr, attachment.index);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `DeleteAttachment`, 'End', doc.id);\n\n    if (!ok) {\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.Unknown,\n        message: 'failed to delete attachment',\n      });\n    }\n    return PdfTaskHelper.resolve<boolean>(true);\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.readAttachmentContent}\n   *\n   * @public\n   */\n  readAttachmentContent(doc: PdfDocumentObject, attachment: PdfAttachmentObject) {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'readAttachmentContent', doc, attachment);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `ReadAttachmentContent`, 'Begin', doc.id);\n\n    const ctx = this.cache.getContext(doc.id);\n\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `ReadAttachmentContent`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    const attachmentPtr = this.pdfiumModule.FPDFDoc_GetAttachment(ctx.docPtr, attachment.index);\n    const sizePtr = this.memoryManager.malloc(4);\n    if (!this.pdfiumModule.FPDFAttachment_GetFile(attachmentPtr, 0, 0, sizePtr)) {\n      this.memoryManager.free(sizePtr);\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `ReadAttachmentContent`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.CantReadAttachmentSize,\n        message: 'can not read attachment size',\n      });\n    }\n    const size = this.pdfiumModule.pdfium.getValue(sizePtr, 'i32') >>> 0;\n\n    const contentPtr = this.memoryManager.malloc(size);\n    if (!this.pdfiumModule.FPDFAttachment_GetFile(attachmentPtr, contentPtr, size, sizePtr)) {\n      this.memoryManager.free(sizePtr);\n      this.memoryManager.free(contentPtr);\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `ReadAttachmentContent`, 'End', doc.id);\n\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.CantReadAttachmentContent,\n        message: 'can not read attachment content',\n      });\n    }\n\n    const buffer = new ArrayBuffer(size);\n    const view = new DataView(buffer);\n    for (let i = 0; i < size; i++) {\n      view.setInt8(i, this.pdfiumModule.pdfium.getValue(contentPtr + i, 'i8'));\n    }\n\n    this.memoryManager.free(sizePtr);\n    this.memoryManager.free(contentPtr);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `ReadAttachmentContent`, 'End', doc.id);\n\n    return PdfTaskHelper.resolve(buffer);\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.setFormFieldValue}\n   *\n   * @public\n   */\n  setFormFieldValue(\n    doc: PdfDocumentObject,\n    page: PdfPageObject,\n    annotation: PdfWidgetAnnoObject,\n    value: FormFieldValue,\n  ) {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'SetFormFieldValue', doc, annotation, value);\n    this.logger.perf(\n      LOG_SOURCE,\n      LOG_CATEGORY,\n      `SetFormFieldValue`,\n      'Begin',\n      `${doc.id}-${annotation.id}`,\n    );\n\n    const ctx = this.cache.getContext(doc.id);\n\n    if (!ctx) {\n      this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'SetFormFieldValue', 'document is not opened');\n      this.logger.perf(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        `SetFormFieldValue`,\n        'End',\n        `${doc.id}-${annotation.id}`,\n      );\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    const formFillInfoPtr = this.pdfiumModule.PDFiumExt_OpenFormFillInfo();\n    const formHandle = this.pdfiumModule.PDFiumExt_InitFormFillEnvironment(\n      ctx.docPtr,\n      formFillInfoPtr,\n    );\n\n    const pageCtx = ctx.acquirePage(page.index);\n\n    this.pdfiumModule.FORM_OnAfterLoadPage(pageCtx.pagePtr, formHandle);\n\n    const annotationPtr = this.getAnnotationByName(pageCtx.pagePtr, annotation.id);\n\n    if (!annotationPtr) {\n      pageCtx.release();\n      this.logger.perf(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        'SetFormFieldValue',\n        'End',\n        `${doc.id}-${page.index}`,\n      );\n      return PdfTaskHelper.reject({ code: PdfErrorCode.NotFound, message: 'annotation not found' });\n    }\n\n    if (!this.pdfiumModule.FORM_SetFocusedAnnot(formHandle, annotationPtr)) {\n      this.logger.debug(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        'SetFormFieldValue',\n        'failed to set focused annotation',\n      );\n      this.logger.perf(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        `SetFormFieldValue`,\n        'End',\n        `${doc.id}-${annotation.id}`,\n      );\n      this.pdfiumModule.FPDFPage_CloseAnnot(annotationPtr);\n      this.pdfiumModule.FORM_OnBeforeClosePage(pageCtx.pagePtr, formHandle);\n      pageCtx.release();\n      this.pdfiumModule.PDFiumExt_ExitFormFillEnvironment(formHandle);\n      this.pdfiumModule.PDFiumExt_CloseFormFillInfo(formFillInfoPtr);\n\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.CantFocusAnnot,\n        message: 'failed to set focused annotation',\n      });\n    }\n\n    switch (value.kind) {\n      case 'text':\n        {\n          if (!this.pdfiumModule.FORM_SelectAllText(formHandle, pageCtx.pagePtr)) {\n            this.logger.debug(\n              LOG_SOURCE,\n              LOG_CATEGORY,\n              'SetFormFieldValue',\n              'failed to select all text',\n            );\n            this.logger.perf(\n              LOG_SOURCE,\n              LOG_CATEGORY,\n              `SetFormFieldValue`,\n              'End',\n              `${doc.id}-${annotation.id}`,\n            );\n            this.pdfiumModule.FORM_ForceToKillFocus(formHandle);\n            this.pdfiumModule.FPDFPage_CloseAnnot(annotationPtr);\n            this.pdfiumModule.FORM_OnBeforeClosePage(pageCtx.pagePtr, formHandle);\n            pageCtx.release();\n            this.pdfiumModule.PDFiumExt_ExitFormFillEnvironment(formHandle);\n            this.pdfiumModule.PDFiumExt_CloseFormFillInfo(formFillInfoPtr);\n\n            return PdfTaskHelper.reject({\n              code: PdfErrorCode.CantSelectText,\n              message: 'failed to select all text',\n            });\n          }\n          const length = 2 * (value.text.length + 1);\n          const textPtr = this.memoryManager.malloc(length);\n          this.pdfiumModule.pdfium.stringToUTF16(value.text, textPtr, length);\n          this.pdfiumModule.FORM_ReplaceSelection(formHandle, pageCtx.pagePtr, textPtr);\n          this.memoryManager.free(textPtr);\n        }\n        break;\n      case 'selection':\n        {\n          if (\n            !this.pdfiumModule.FORM_SetIndexSelected(\n              formHandle,\n              pageCtx.pagePtr,\n              value.index,\n              value.isSelected,\n            )\n          ) {\n            this.logger.debug(\n              LOG_SOURCE,\n              LOG_CATEGORY,\n              'SetFormFieldValue',\n              'failed to set index selected',\n            );\n            this.logger.perf(\n              LOG_SOURCE,\n              LOG_CATEGORY,\n              `SetFormFieldValue`,\n              'End',\n              `${doc.id}-${annotation.id}`,\n            );\n            this.pdfiumModule.FORM_ForceToKillFocus(formHandle);\n            this.pdfiumModule.FPDFPage_CloseAnnot(annotationPtr);\n            this.pdfiumModule.FORM_OnBeforeClosePage(pageCtx.pagePtr, formHandle);\n            pageCtx.release();\n            this.pdfiumModule.PDFiumExt_ExitFormFillEnvironment(formHandle);\n            this.pdfiumModule.PDFiumExt_CloseFormFillInfo(formFillInfoPtr);\n\n            return PdfTaskHelper.reject({\n              code: PdfErrorCode.CantSelectOption,\n              message: 'failed to set index selected',\n            });\n          }\n        }\n        break;\n      case 'checked':\n        {\n          const kReturn = 0x0d;\n          if (!this.pdfiumModule.FORM_OnChar(formHandle, pageCtx.pagePtr, kReturn, 0)) {\n            this.logger.debug(\n              LOG_SOURCE,\n              LOG_CATEGORY,\n              'SetFormFieldValue',\n              'failed to set field checked',\n            );\n            this.logger.perf(\n              LOG_SOURCE,\n              LOG_CATEGORY,\n              `SetFormFieldValue`,\n              'End',\n              `${doc.id}-${annotation.id}`,\n            );\n            this.pdfiumModule.FORM_ForceToKillFocus(formHandle);\n            this.pdfiumModule.FPDFPage_CloseAnnot(annotationPtr);\n            this.pdfiumModule.FORM_OnBeforeClosePage(pageCtx.pagePtr, formHandle);\n            pageCtx.release();\n            this.pdfiumModule.PDFiumExt_ExitFormFillEnvironment(formHandle);\n            this.pdfiumModule.PDFiumExt_CloseFormFillInfo(formFillInfoPtr);\n\n            return PdfTaskHelper.reject({\n              code: PdfErrorCode.CantCheckField,\n              message: 'failed to set field checked',\n            });\n          }\n        }\n        break;\n    }\n\n    this.pdfiumModule.FORM_ForceToKillFocus(formHandle);\n\n    this.pdfiumModule.FPDFPage_CloseAnnot(annotationPtr);\n    this.pdfiumModule.FORM_OnBeforeClosePage(pageCtx.pagePtr, formHandle);\n    pageCtx.release();\n\n    this.pdfiumModule.PDFiumExt_ExitFormFillEnvironment(formHandle);\n    this.pdfiumModule.PDFiumExt_CloseFormFillInfo(formFillInfoPtr);\n\n    return PdfTaskHelper.resolve<boolean>(true);\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.flattenPage}\n   *\n   * @public\n   */\n  flattenPage(\n    doc: PdfDocumentObject,\n    page: PdfPageObject,\n    options?: PdfFlattenPageOptions,\n  ): PdfTask<PdfPageFlattenResult> {\n    const { flag = PdfPageFlattenFlag.Display } = options ?? {};\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'flattenPage', doc, page, flag);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `flattenPage`, 'Begin', doc.id);\n\n    const ctx = this.cache.getContext(doc.id);\n\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `flattenPage`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    const pageCtx = ctx.acquirePage(page.index);\n    const result = this.pdfiumModule.FPDFPage_Flatten(pageCtx.pagePtr, flag);\n    pageCtx.release();\n\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `flattenPage`, 'End', doc.id);\n\n    return PdfTaskHelper.resolve(result);\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.extractPages}\n   *\n   * @public\n   */\n  extractPages(doc: PdfDocumentObject, pageIndexes: number[]) {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'extractPages', doc, pageIndexes);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `ExtractPages`, 'Begin', doc.id);\n\n    const ctx = this.cache.getContext(doc.id);\n\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `ExtractPages`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    const newDocPtr = this.pdfiumModule.FPDF_CreateNewDocument();\n    if (!newDocPtr) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `ExtractPages`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.CantCreateNewDoc,\n        message: 'can not create new document',\n      });\n    }\n\n    const pageIndexesPtr = this.memoryManager.malloc(pageIndexes.length * 4);\n    for (let i = 0; i < pageIndexes.length; i++) {\n      this.pdfiumModule.pdfium.setValue(pageIndexesPtr + i * 4, pageIndexes[i], 'i32');\n    }\n\n    if (\n      !this.pdfiumModule.FPDF_ImportPagesByIndex(\n        newDocPtr,\n        ctx.docPtr,\n        pageIndexesPtr,\n        pageIndexes.length,\n        0,\n      )\n    ) {\n      this.pdfiumModule.FPDF_CloseDocument(newDocPtr);\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `ExtractPages`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.CantImportPages,\n        message: 'can not import pages to new document',\n      });\n    }\n\n    const buffer = this.saveDocument(newDocPtr);\n\n    this.pdfiumModule.FPDF_CloseDocument(newDocPtr);\n\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `ExtractPages`, 'End', doc.id);\n    return PdfTaskHelper.resolve(buffer);\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.extractText}\n   *\n   * @public\n   */\n  extractText(doc: PdfDocumentObject, pageIndexes: number[]) {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'extractText', doc, pageIndexes);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `ExtractText`, 'Begin', doc.id);\n\n    const ctx = this.cache.getContext(doc.id);\n\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `ExtractText`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    const strings: string[] = [];\n    for (let i = 0; i < pageIndexes.length; i++) {\n      const pageCtx = ctx.acquirePage(pageIndexes[i]);\n      const textPagePtr = this.pdfiumModule.FPDFText_LoadPage(pageCtx.pagePtr);\n      const charCount = this.pdfiumModule.FPDFText_CountChars(textPagePtr);\n      const bufferPtr = this.memoryManager.malloc((charCount + 1) * 2);\n      this.pdfiumModule.FPDFText_GetText(textPagePtr, 0, charCount, bufferPtr);\n      const text = this.pdfiumModule.pdfium.UTF16ToString(bufferPtr);\n      this.memoryManager.free(bufferPtr);\n      strings.push(text);\n      this.pdfiumModule.FPDFText_ClosePage(textPagePtr);\n      pageCtx.release();\n    }\n\n    const text = strings.join('\\n\\n');\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `ExtractText`, 'End', doc.id);\n    return PdfTaskHelper.resolve(text);\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.getTextSlices}\n   *\n   * @public\n   */\n  getTextSlices(doc: PdfDocumentObject, slices: PageTextSlice[]): PdfTask<string[]> {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getTextSlices', doc, slices);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, 'GetTextSlices', 'Begin', doc.id);\n\n    /* ⚠︎ 1 — trivial case */\n    if (slices.length === 0) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, 'GetTextSlices', 'End', doc.id);\n      return PdfTaskHelper.resolve<string[]>([]);\n    }\n\n    /* ⚠︎ 2 — document must be open */\n    const ctx = this.cache.getContext(doc.id);\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, 'GetTextSlices', 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    try {\n      /* keep caller order */\n      const out = new Array<string>(slices.length);\n\n      /* group → open each page once */\n      const byPage = new Map<number, { slice: PageTextSlice; pos: number }[]>();\n      slices.forEach((s, i) => {\n        (byPage.get(s.pageIndex) ?? byPage.set(s.pageIndex, []).get(s.pageIndex))!.push({\n          slice: s,\n          pos: i,\n        });\n      });\n\n      for (const [pageIdx, list] of byPage) {\n        const pageCtx = ctx.acquirePage(pageIdx);\n        const textPagePtr = pageCtx.getTextPage();\n\n        for (const { slice, pos } of list) {\n          const bufPtr = this.memoryManager.malloc(2 * (slice.charCount + 1)); // UTF-16 + NIL\n          this.pdfiumModule.FPDFText_GetText(textPagePtr, slice.charIndex, slice.charCount, bufPtr);\n          out[pos] = stripPdfUnwantedMarkers(this.pdfiumModule.pdfium.UTF16ToString(bufPtr));\n          this.memoryManager.free(bufPtr);\n        }\n        pageCtx.release();\n      }\n\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, 'GetTextSlices', 'End', doc.id);\n      return PdfTaskHelper.resolve(out);\n    } catch (e) {\n      this.logger.error(LOG_SOURCE, LOG_CATEGORY, 'getTextSlices error', e);\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, 'GetTextSlices', 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.Unknown,\n        message: String(e),\n      });\n    }\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.merge}\n   *\n   * @public\n   */\n  merge(files: PdfFile[]) {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'merge', files);\n    const fileIds = files.map((file) => file.id).join('.');\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `Merge`, 'Begin', fileIds);\n\n    const newDocPtr = this.pdfiumModule.FPDF_CreateNewDocument();\n    if (!newDocPtr) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `Merge`, 'End', fileIds);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.CantCreateNewDoc,\n        message: 'can not create new document',\n      });\n    }\n\n    const ptrs: { docPtr: number; filePtr: WasmPointer }[] = [];\n    for (const file of files.reverse()) {\n      const array = new Uint8Array(file.content);\n      const length = array.length;\n      const filePtr = this.memoryManager.malloc(length);\n      this.pdfiumModule.pdfium.HEAPU8.set(array, filePtr);\n\n      const docPtr = this.pdfiumModule.FPDF_LoadMemDocument(filePtr, length, '');\n      if (!docPtr) {\n        const lastError = this.pdfiumModule.FPDF_GetLastError();\n        this.logger.error(\n          LOG_SOURCE,\n          LOG_CATEGORY,\n          `FPDF_LoadMemDocument failed with ${lastError}`,\n        );\n        this.memoryManager.free(filePtr);\n\n        for (const ptr of ptrs) {\n          this.pdfiumModule.FPDF_CloseDocument(ptr.docPtr);\n          this.memoryManager.free(ptr.filePtr);\n        }\n\n        this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `Merge`, 'End', fileIds);\n        return PdfTaskHelper.reject<PdfFile>({\n          code: lastError,\n          message: `FPDF_LoadMemDocument failed`,\n        });\n      }\n      ptrs.push({ filePtr, docPtr });\n\n      if (!this.pdfiumModule.FPDF_ImportPages(newDocPtr, docPtr, '', 0)) {\n        this.pdfiumModule.FPDF_CloseDocument(newDocPtr);\n\n        for (const ptr of ptrs) {\n          this.pdfiumModule.FPDF_CloseDocument(ptr.docPtr);\n          this.memoryManager.free(ptr.filePtr);\n        }\n\n        this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `Merge`, 'End', fileIds);\n        return PdfTaskHelper.reject({\n          code: PdfErrorCode.CantImportPages,\n          message: 'can not import pages to new document',\n        });\n      }\n    }\n    const buffer = this.saveDocument(newDocPtr);\n\n    this.pdfiumModule.FPDF_CloseDocument(newDocPtr);\n\n    for (const ptr of ptrs) {\n      this.pdfiumModule.FPDF_CloseDocument(ptr.docPtr);\n      this.memoryManager.free(ptr.filePtr);\n    }\n\n    const file: PdfFile = {\n      id: `${Math.random()}`,\n      content: buffer,\n    };\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `Merge`, 'End', fileIds);\n    return PdfTaskHelper.resolve(file);\n  }\n\n  /**\n   * Merges specific pages from multiple PDF documents in a custom order\n   *\n   * @param mergeConfigs Array of configurations specifying which pages to merge from which documents\n   * @returns A PdfTask that resolves with the merged PDF file\n   * @public\n   */\n  mergePages(mergeConfigs: Array<{ docId: string; pageIndices: number[] }>) {\n    const configIds = mergeConfigs\n      .map((config) => `${config.docId}:${config.pageIndices.join(',')}`)\n      .join('|');\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'mergePages', mergeConfigs);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `MergePages`, 'Begin', configIds);\n\n    // Create a new document to import pages into\n    const newDocPtr = this.pdfiumModule.FPDF_CreateNewDocument();\n    if (!newDocPtr) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `MergePages`, 'End', configIds);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.CantCreateNewDoc,\n        message: 'Cannot create new document',\n      });\n    }\n\n    try {\n      // Process each merge configuration in reverse order (since we're inserting at position 0)\n      // This ensures the final document has pages in the order specified by the user\n      for (const config of [...mergeConfigs].reverse()) {\n        // Check if the document is open\n        const ctx = this.cache.getContext(config.docId);\n\n        if (!ctx) {\n          this.logger.warn(\n            LOG_SOURCE,\n            LOG_CATEGORY,\n            `Document ${config.docId} is not open, skipping`,\n          );\n          continue;\n        }\n\n        // Get the page count for this document\n        const pageCount = this.pdfiumModule.FPDF_GetPageCount(ctx.docPtr);\n\n        // Filter out invalid page indices\n        const validPageIndices = config.pageIndices.filter(\n          (index) => index >= 0 && index < pageCount,\n        );\n\n        if (validPageIndices.length === 0) {\n          continue; // No valid pages to import\n        }\n\n        // Convert 0-based indices to 1-based for PDFium and join with commas\n        const pageString = validPageIndices.map((index) => index + 1).join(',');\n\n        try {\n          // Import all specified pages at once from this document\n          if (\n            !this.pdfiumModule.FPDF_ImportPages(\n              newDocPtr,\n              ctx.docPtr,\n              pageString,\n              0, // Insert at the beginning\n            )\n          ) {\n            throw new Error(`Failed to import pages ${pageString} from document ${config.docId}`);\n          }\n        } finally {\n        }\n      }\n\n      // Save the new document to buffer\n      const buffer = this.saveDocument(newDocPtr);\n\n      const file: PdfFile = {\n        id: `${Math.random()}`,\n        content: buffer,\n      };\n\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `MergePages`, 'End', configIds);\n      return PdfTaskHelper.resolve(file);\n    } catch (error) {\n      this.logger.error(LOG_SOURCE, LOG_CATEGORY, 'mergePages failed', error);\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `MergePages`, 'End', configIds);\n\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.CantImportPages,\n        message: error instanceof Error ? error.message : 'Failed to merge pages',\n      });\n    } finally {\n      // Clean up the new document\n      if (newDocPtr) {\n        this.pdfiumModule.FPDF_CloseDocument(newDocPtr);\n      }\n    }\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.saveAsCopy}\n   *\n   * @public\n   */\n  saveAsCopy(doc: PdfDocumentObject) {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'saveAsCopy', doc);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `SaveAsCopy`, 'Begin', doc.id);\n\n    const ctx = this.cache.getContext(doc.id);\n\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `SaveAsCopy`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    const buffer = this.saveDocument(ctx.docPtr);\n\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `SaveAsCopy`, 'End', doc.id);\n    return PdfTaskHelper.resolve(buffer);\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.closeDocument}\n   *\n   * @public\n   */\n  closeDocument(doc: PdfDocumentObject) {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'closeDocument', doc);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `CloseDocument`, 'Begin', doc.id);\n\n    const ctx = this.cache.getContext(doc.id);\n\n    if (!ctx) return PdfTaskHelper.resolve(true);\n\n    ctx.dispose();\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `CloseDocument`, 'End', doc.id);\n    return PdfTaskHelper.resolve(true);\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.closeAllDocuments}\n   *\n   * @public\n   */\n  closeAllDocuments() {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'closeAllDocuments');\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `CloseAllDocuments`, 'Begin');\n    this.cache.closeAllDocuments();\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `CloseAllDocuments`, 'End');\n    return PdfTaskHelper.resolve(true);\n  }\n\n  /**\n   * Add text content to annotation\n   * @param page - page info\n   * @param pagePtr - pointer to page object\n   * @param annotationPtr - pointer to text annotation\n   * @param annotation - text annotation\n   * @returns whether text content is added to annotation\n   *\n   * @private\n   */\n  private addTextContent(\n    page: PdfPageObject,\n    pagePtr: number,\n    annotationPtr: number,\n    annotation: PdfTextAnnoObject,\n  ) {\n    if (!this.setAnnotString(annotationPtr, 'Contents', annotation.contents ?? '')) {\n      return false;\n    }\n    if (!this.setAnnotString(annotationPtr, 'T', annotation.author || '')) {\n      return false;\n    }\n    if (annotation.modified && !this.setAnnotationDate(annotationPtr, 'M', annotation.modified)) {\n      return false;\n    }\n    if (\n      annotation.created &&\n      !this.setAnnotationDate(annotationPtr, 'CreationDate', annotation.created)\n    ) {\n      return false;\n    }\n    if (\n      annotation.inReplyToId &&\n      !this.setInReplyToId(pagePtr, annotationPtr, annotation.inReplyToId)\n    ) {\n      return false;\n    }\n    if (!this.setAnnotationIcon(annotationPtr, annotation.icon || PdfAnnotationIcon.Comment)) {\n      return false;\n    }\n    if (\n      !this.setAnnotationFlags(annotationPtr, annotation.flags || ['print', 'noZoom', 'noRotate'])\n    ) {\n      return false;\n    }\n    if (annotation.state && !this.setAnnotString(annotationPtr, 'State', annotation.state)) {\n      return false;\n    }\n    if (\n      annotation.stateModel &&\n      !this.setAnnotString(annotationPtr, 'StateModel', annotation.stateModel)\n    ) {\n      return false;\n    }\n    return true;\n  }\n\n  /**\n   * Add free text content to annotation\n   * @param page - page info\n   * @param pagePtr - pointer to page object\n   * @param annotationPtr - pointer to free text annotation\n   * @param annotation - free text annotation\n   * @returns whether free text content is added to annotation\n   *\n   * @private\n   */\n  private addFreeTextContent(\n    page: PdfPageObject,\n    pagePtr: number,\n    annotationPtr: number,\n    annotation: PdfFreeTextAnnoObject,\n  ) {\n    if (\n      annotation.created &&\n      !this.setAnnotationDate(annotationPtr, 'CreationDate', annotation.created)\n    ) {\n      return false;\n    }\n    if (annotation.flags && !this.setAnnotationFlags(annotationPtr, annotation.flags)) {\n      return false;\n    }\n    if (annotation.modified && !this.setAnnotationDate(annotationPtr, 'M', annotation.modified)) {\n      return false;\n    }\n    if (!this.setBorderStyle(annotationPtr, PdfAnnotationBorderStyle.SOLID, 0)) {\n      return false;\n    }\n    if (!this.setAnnotString(annotationPtr, 'Contents', annotation.contents ?? '')) {\n      return false;\n    }\n    if (!this.setAnnotString(annotationPtr, 'T', annotation.author || '')) {\n      return false;\n    }\n    if (!this.setAnnotationOpacity(annotationPtr, annotation.opacity ?? 1)) {\n      return false;\n    }\n    if (!this.setAnnotationTextAlignment(annotationPtr, annotation.textAlign)) {\n      return false;\n    }\n    if (!this.setAnnotationVerticalAlignment(annotationPtr, annotation.verticalAlign)) {\n      return false;\n    }\n    if (\n      !this.setAnnotationDefaultAppearance(\n        annotationPtr,\n        annotation.fontFamily,\n        annotation.fontSize,\n        annotation.fontColor,\n      )\n    ) {\n      return false;\n    }\n    if (annotation.intent && !this.setAnnotIntent(annotationPtr, annotation.intent)) {\n      return false;\n    }\n    if (!annotation.backgroundColor || annotation.backgroundColor === 'transparent') {\n      if (!this.pdfiumModule.EPDFAnnot_ClearColor(annotationPtr, PdfAnnotationColorType.Color)) {\n        return false;\n      }\n    } else if (\n      !this.setAnnotationColor(\n        annotationPtr,\n        annotation.backgroundColor ?? '#FFFFFF',\n        PdfAnnotationColorType.Color,\n      )\n    ) {\n      return false;\n    }\n    return true;\n  }\n\n  /**\n   * Set the rect of specified annotation\n   * @param page - page info that the annotation is belonged to\n   * @param pagePtr - pointer of page object\n   * @param annotationPtr - pointer to annotation object\n   * @param inkList - ink lists that added to the annotation\n   * @returns whether the ink lists is setted\n   *\n   * @private\n   */\n  private addInkStroke(\n    page: PdfPageObject,\n    pagePtr: number,\n    annotationPtr: number,\n    annotation: PdfInkAnnoObject,\n  ) {\n    if (\n      annotation.created &&\n      !this.setAnnotationDate(annotationPtr, 'CreationDate', annotation.created)\n    ) {\n      return false;\n    }\n    if (annotation.flags && !this.setAnnotationFlags(annotationPtr, annotation.flags)) {\n      return false;\n    }\n    if (annotation.modified && !this.setAnnotationDate(annotationPtr, 'M', annotation.modified)) {\n      return false;\n    }\n    if (!this.setAnnotString(annotationPtr, 'Contents', annotation.contents ?? '')) {\n      return false;\n    }\n    if (\n      !this.setBorderStyle(annotationPtr, PdfAnnotationBorderStyle.SOLID, annotation.strokeWidth)\n    ) {\n      return false;\n    }\n    if (!this.setInkList(page, annotationPtr, annotation.inkList)) {\n      return false;\n    }\n    if (!this.setAnnotString(annotationPtr, 'T', annotation.author || '')) {\n      return false;\n    }\n    if (!this.setAnnotationOpacity(annotationPtr, annotation.opacity ?? 1)) {\n      return false;\n    }\n    if (\n      !this.setAnnotationColor(\n        annotationPtr,\n        annotation.color ?? '#FFFF00',\n        PdfAnnotationColorType.Color,\n      )\n    ) {\n      return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Add line content to annotation\n   * @param page - page info\n   * @param pagePtr - pointer to page object\n   * @param annotationPtr - pointer to line annotation\n   * @param annotation - line annotation\n   * @returns whether line content is added to annotation\n   *\n   * @private\n   */\n  private addLineContent(\n    page: PdfPageObject,\n    pagePtr: number,\n    annotationPtr: number,\n    annotation: PdfLineAnnoObject,\n  ) {\n    if (\n      annotation.created &&\n      !this.setAnnotationDate(annotationPtr, 'CreationDate', annotation.created)\n    ) {\n      return false;\n    }\n    if (annotation.flags && !this.setAnnotationFlags(annotationPtr, annotation.flags)) {\n      return false;\n    }\n    if (annotation.modified && !this.setAnnotationDate(annotationPtr, 'M', annotation.modified)) {\n      return false;\n    }\n    if (\n      !this.setLinePoints(\n        page,\n        annotationPtr,\n        annotation.linePoints.start,\n        annotation.linePoints.end,\n      )\n    ) {\n      return false;\n    }\n    if (\n      !this.setLineEndings(\n        annotationPtr,\n        annotation.lineEndings?.start ?? PdfAnnotationLineEnding.None,\n        annotation.lineEndings?.end ?? PdfAnnotationLineEnding.None,\n      )\n    ) {\n      return false;\n    }\n    if (!this.setAnnotString(annotationPtr, 'Contents', annotation.contents ?? '')) {\n      return false;\n    }\n    if (!this.setAnnotString(annotationPtr, 'T', annotation.author || '')) {\n      return false;\n    }\n    if (!this.setBorderStyle(annotationPtr, annotation.strokeStyle, annotation.strokeWidth)) {\n      return false;\n    }\n    if (!this.setBorderDashPattern(annotationPtr, annotation.strokeDashArray ?? [])) {\n      return false;\n    }\n    if (annotation.intent && !this.setAnnotIntent(annotationPtr, annotation.intent)) {\n      return false;\n    }\n    if (!annotation.color || annotation.color === 'transparent') {\n      if (\n        !this.pdfiumModule.EPDFAnnot_ClearColor(annotationPtr, PdfAnnotationColorType.InteriorColor)\n      ) {\n        return false;\n      }\n    } else if (\n      !this.setAnnotationColor(\n        annotationPtr,\n        annotation.color ?? '#FFFF00',\n        PdfAnnotationColorType.InteriorColor,\n      )\n    ) {\n      return false;\n    }\n    if (!this.setAnnotationOpacity(annotationPtr, annotation.opacity ?? 1)) {\n      return false;\n    }\n    if (\n      !this.setAnnotationColor(\n        annotationPtr,\n        annotation.strokeColor ?? '#FFFF00',\n        PdfAnnotationColorType.Color,\n      )\n    ) {\n      return false;\n    }\n    return true;\n  }\n\n  /**\n   * Add polygon or polyline content to annotation\n   * @param page - page info\n   * @param pagePtr - pointer to page object\n   * @param annotationPtr - pointer to polygon or polyline annotation\n   * @param annotation - polygon or polyline annotation\n   * @returns whether polygon or polyline content is added to annotation\n   *\n   * @private\n   */\n  private addPolyContent(\n    page: PdfPageObject,\n    pagePtr: number,\n    annotationPtr: number,\n    annotation: PdfPolygonAnnoObject | PdfPolylineAnnoObject,\n  ) {\n    if (\n      annotation.created &&\n      !this.setAnnotationDate(annotationPtr, 'CreationDate', annotation.created)\n    ) {\n      return false;\n    }\n    if (annotation.modified && !this.setAnnotationDate(annotationPtr, 'M', annotation.modified)) {\n      return false;\n    }\n    if (annotation.flags && !this.setAnnotationFlags(annotationPtr, annotation.flags)) {\n      return false;\n    }\n    if (\n      annotation.type === PdfAnnotationSubtype.POLYLINE &&\n      !this.setLineEndings(\n        annotationPtr,\n        annotation.lineEndings?.start ?? PdfAnnotationLineEnding.None,\n        annotation.lineEndings?.end ?? PdfAnnotationLineEnding.None,\n      )\n    ) {\n      return false;\n    }\n    if (!this.setPdfAnnoVertices(page, annotationPtr, annotation.vertices)) {\n      return false;\n    }\n    if (!this.setAnnotString(annotationPtr, 'Contents', annotation.contents ?? '')) {\n      return false;\n    }\n    if (!this.setAnnotString(annotationPtr, 'T', annotation.author || '')) {\n      return false;\n    }\n    if (!this.setBorderStyle(annotationPtr, annotation.strokeStyle, annotation.strokeWidth)) {\n      return false;\n    }\n    if (!this.setBorderDashPattern(annotationPtr, annotation.strokeDashArray ?? [])) {\n      return false;\n    }\n    if (annotation.intent && !this.setAnnotIntent(annotationPtr, annotation.intent)) {\n      return false;\n    }\n    if (!annotation.color || annotation.color === 'transparent') {\n      if (\n        !this.pdfiumModule.EPDFAnnot_ClearColor(annotationPtr, PdfAnnotationColorType.InteriorColor)\n      ) {\n        return false;\n      }\n    } else if (\n      !this.setAnnotationColor(\n        annotationPtr,\n        annotation.color ?? '#FFFF00',\n        PdfAnnotationColorType.InteriorColor,\n      )\n    ) {\n      return false;\n    }\n    if (!this.setAnnotationOpacity(annotationPtr, annotation.opacity ?? 1)) {\n      return false;\n    }\n    if (\n      !this.setAnnotationColor(\n        annotationPtr,\n        annotation.strokeColor ?? '#FFFF00',\n        PdfAnnotationColorType.Color,\n      )\n    ) {\n      return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Add shape content to annotation\n   * @param page - page info\n   * @param pagePtr - pointer to page object\n   * @param annotationPtr - pointer to shape annotation\n   * @param annotation - shape annotation\n   * @returns whether shape content is added to annotation\n   *\n   * @private\n   */\n  addShapeContent(\n    page: PdfPageObject,\n    pagePtr: number,\n    annotationPtr: number,\n    annotation: PdfCircleAnnoObject | PdfSquareAnnoObject,\n  ) {\n    if (\n      annotation.created &&\n      !this.setAnnotationDate(annotationPtr, 'CreationDate', annotation.created)\n    ) {\n      return false;\n    }\n    if (annotation.modified && !this.setAnnotationDate(annotationPtr, 'M', annotation.modified)) {\n      return false;\n    }\n    if (!this.setAnnotString(annotationPtr, 'Contents', annotation.contents ?? '')) {\n      return false;\n    }\n    if (!this.setAnnotString(annotationPtr, 'T', annotation.author || '')) {\n      return false;\n    }\n    if (!this.setBorderStyle(annotationPtr, annotation.strokeStyle, annotation.strokeWidth)) {\n      return false;\n    }\n    if (!this.setBorderDashPattern(annotationPtr, annotation.strokeDashArray ?? [])) {\n      return false;\n    }\n    if (!this.setAnnotationFlags(annotationPtr, annotation.flags)) {\n      return false;\n    }\n    if (!annotation.color || annotation.color === 'transparent') {\n      if (\n        !this.pdfiumModule.EPDFAnnot_ClearColor(annotationPtr, PdfAnnotationColorType.InteriorColor)\n      ) {\n        return false;\n      }\n    } else if (\n      !this.setAnnotationColor(\n        annotationPtr,\n        annotation.color ?? '#FFFF00',\n        PdfAnnotationColorType.InteriorColor,\n      )\n    ) {\n      return false;\n    }\n    if (!this.setAnnotationOpacity(annotationPtr, annotation.opacity ?? 1)) {\n      return false;\n    }\n    if (\n      !this.setAnnotationColor(\n        annotationPtr,\n        annotation.strokeColor ?? '#FFFF00',\n        PdfAnnotationColorType.Color,\n      )\n    ) {\n      return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Add highlight content to annotation\n   * @param page - page info\n   * @param annotationPtr - pointer to highlight annotation\n   * @param annotation - highlight annotation\n   * @returns whether highlight content is added to annotation\n   *\n   * @private\n   */\n  addTextMarkupContent(\n    page: PdfPageObject,\n    pagePtr: number,\n    annotationPtr: number,\n    annotation:\n      | PdfHighlightAnnoObject\n      | PdfUnderlineAnnoObject\n      | PdfStrikeOutAnnoObject\n      | PdfSquigglyAnnoObject,\n  ) {\n    if (\n      annotation.created &&\n      !this.setAnnotationDate(annotationPtr, 'CreationDate', annotation.created)\n    ) {\n      return false;\n    }\n    if (annotation.custom && !this.setAnnotCustom(annotationPtr, annotation.custom)) {\n      return false;\n    }\n    if (annotation.flags && !this.setAnnotationFlags(annotationPtr, annotation.flags)) {\n      return false;\n    }\n    if (annotation.modified && !this.setAnnotationDate(annotationPtr, 'M', annotation.modified)) {\n      return false;\n    }\n    if (!this.syncQuadPointsAnno(page, annotationPtr, annotation.segmentRects)) {\n      return false;\n    }\n    if (!this.setAnnotString(annotationPtr, 'Contents', annotation.contents ?? '')) {\n      return false;\n    }\n    if (!this.setAnnotString(annotationPtr, 'T', annotation.author || '')) {\n      return false;\n    }\n    if (!this.setAnnotationOpacity(annotationPtr, annotation.opacity ?? 1)) {\n      return false;\n    }\n    if (\n      !this.setAnnotationColor(\n        annotationPtr,\n        annotation.color ?? '#FFFF00',\n        PdfAnnotationColorType.Color,\n      )\n    ) {\n      return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Add contents to stamp annotation\n   * @param docPtr - pointer to pdf document object\n   * @param page - page info\n   * @param pagePtr - pointer to page object\n   * @param annotationPtr - pointer to stamp annotation\n   * @param rect - rect of stamp annotation\n   * @param contents - contents of stamp annotation\n   * @returns whether contents is added to annotation\n   *\n   * @private\n   */\n  addStampContent(\n    docPtr: number,\n    page: PdfPageObject,\n    pagePtr: number,\n    annotationPtr: number,\n    annotation: PdfStampAnnoObject,\n    imageData?: ImageData,\n  ) {\n    if (\n      annotation.created &&\n      !this.setAnnotationDate(annotationPtr, 'CreationDate', annotation.created)\n    ) {\n      return false;\n    }\n    if (annotation.flags && !this.setAnnotationFlags(annotationPtr, annotation.flags)) {\n      return false;\n    }\n    if (annotation.modified && !this.setAnnotationDate(annotationPtr, 'M', annotation.modified)) {\n      return false;\n    }\n    if (annotation.icon && !this.setAnnotationIcon(annotationPtr, annotation.icon)) {\n      return false;\n    }\n    if (annotation.subject && !this.setAnnotString(annotationPtr, 'Subj', annotation.subject)) {\n      return false;\n    }\n    if (!this.setAnnotString(annotationPtr, 'Contents', annotation.contents ?? '')) {\n      return false;\n    }\n    if (imageData) {\n      for (let i = this.pdfiumModule.FPDFAnnot_GetObjectCount(annotationPtr) - 1; i >= 0; i--) {\n        this.pdfiumModule.FPDFAnnot_RemoveObject(annotationPtr, i);\n      }\n\n      if (!this.addImageObject(docPtr, page, pagePtr, annotationPtr, annotation.rect, imageData)) {\n        return false;\n      }\n    }\n    if (!this.pdfiumModule.EPDFAnnot_UpdateAppearanceToRect(annotationPtr, PdfStampFit.Cover)) {\n      return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Add image object to annotation\n   * @param docPtr - pointer to pdf document object\n   * @param page - page info\n   * @param pagePtr - pointer to page object\n   * @param annotationPtr - pointer to stamp annotation\n   * @param position - position of image\n   * @param imageData - data of image\n   * @returns whether image is added to annotation\n   *\n   * @private\n   */\n  addImageObject(\n    docPtr: number,\n    page: PdfPageObject,\n    pagePtr: number,\n    annotationPtr: number,\n    rect: Rect,\n    imageData: ImageData,\n  ) {\n    const bytesPerPixel = 4;\n    const pixelCount = imageData.width * imageData.height;\n\n    const bitmapBufferPtr = this.memoryManager.malloc(bytesPerPixel * pixelCount);\n    if (!bitmapBufferPtr) {\n      return false;\n    }\n\n    for (let i = 0; i < pixelCount; i++) {\n      const red = imageData.data[i * bytesPerPixel];\n      const green = imageData.data[i * bytesPerPixel + 1];\n      const blue = imageData.data[i * bytesPerPixel + 2];\n      const alpha = imageData.data[i * bytesPerPixel + 3];\n\n      this.pdfiumModule.pdfium.setValue(bitmapBufferPtr + i * bytesPerPixel, blue, 'i8');\n      this.pdfiumModule.pdfium.setValue(bitmapBufferPtr + i * bytesPerPixel + 1, green, 'i8');\n      this.pdfiumModule.pdfium.setValue(bitmapBufferPtr + i * bytesPerPixel + 2, red, 'i8');\n      this.pdfiumModule.pdfium.setValue(bitmapBufferPtr + i * bytesPerPixel + 3, alpha, 'i8');\n    }\n\n    const format = BitmapFormat.Bitmap_BGRA;\n    const bitmapPtr = this.pdfiumModule.FPDFBitmap_CreateEx(\n      imageData.width,\n      imageData.height,\n      format,\n      bitmapBufferPtr,\n      0,\n    );\n    if (!bitmapPtr) {\n      this.memoryManager.free(bitmapBufferPtr);\n      return false;\n    }\n\n    const imageObjectPtr = this.pdfiumModule.FPDFPageObj_NewImageObj(docPtr);\n    if (!imageObjectPtr) {\n      this.pdfiumModule.FPDFBitmap_Destroy(bitmapPtr);\n      this.memoryManager.free(bitmapBufferPtr);\n      return false;\n    }\n\n    if (!this.pdfiumModule.FPDFImageObj_SetBitmap(pagePtr, 0, imageObjectPtr, bitmapPtr)) {\n      this.pdfiumModule.FPDFBitmap_Destroy(bitmapPtr);\n      this.pdfiumModule.FPDFPageObj_Destroy(imageObjectPtr);\n      this.memoryManager.free(bitmapBufferPtr);\n      return false;\n    }\n\n    const matrixPtr = this.memoryManager.malloc(6 * 4);\n    this.pdfiumModule.pdfium.setValue(matrixPtr, imageData.width, 'float');\n    this.pdfiumModule.pdfium.setValue(matrixPtr + 4, 0, 'float');\n    this.pdfiumModule.pdfium.setValue(matrixPtr + 8, 0, 'float');\n    this.pdfiumModule.pdfium.setValue(matrixPtr + 12, imageData.height, 'float');\n    this.pdfiumModule.pdfium.setValue(matrixPtr + 16, 0, 'float');\n    this.pdfiumModule.pdfium.setValue(matrixPtr + 20, 0, 'float');\n    if (!this.pdfiumModule.FPDFPageObj_SetMatrix(imageObjectPtr, matrixPtr)) {\n      this.memoryManager.free(matrixPtr);\n      this.pdfiumModule.FPDFBitmap_Destroy(bitmapPtr);\n      this.pdfiumModule.FPDFPageObj_Destroy(imageObjectPtr);\n      this.memoryManager.free(bitmapBufferPtr);\n      return false;\n    }\n    this.memoryManager.free(matrixPtr);\n\n    const pagePos = this.convertDevicePointToPagePoint(page, {\n      x: rect.origin.x,\n      y: rect.origin.y + imageData.height, // shift down by the image height\n    });\n    this.pdfiumModule.FPDFPageObj_Transform(imageObjectPtr, 1, 0, 0, 1, pagePos.x, pagePos.y);\n\n    if (!this.pdfiumModule.FPDFAnnot_AppendObject(annotationPtr, imageObjectPtr)) {\n      this.pdfiumModule.FPDFBitmap_Destroy(bitmapPtr);\n      this.pdfiumModule.FPDFPageObj_Destroy(imageObjectPtr);\n      this.memoryManager.free(bitmapBufferPtr);\n      return false;\n    }\n\n    this.pdfiumModule.FPDFBitmap_Destroy(bitmapPtr);\n    this.memoryManager.free(bitmapBufferPtr);\n\n    return true;\n  }\n\n  /**\n   * Save document to array buffer\n   * @param docPtr - pointer to pdf document\n   * @returns array buffer contains the pdf content\n   *\n   * @private\n   */\n  saveDocument(docPtr: number) {\n    const writerPtr = this.pdfiumModule.PDFiumExt_OpenFileWriter();\n    this.pdfiumModule.PDFiumExt_SaveAsCopy(docPtr, writerPtr);\n    const size = this.pdfiumModule.PDFiumExt_GetFileWriterSize(writerPtr);\n    const dataPtr = this.memoryManager.malloc(size);\n    this.pdfiumModule.PDFiumExt_GetFileWriterData(writerPtr, dataPtr, size);\n    const buffer = new ArrayBuffer(size);\n    const view = new DataView(buffer);\n    for (let i = 0; i < size; i++) {\n      view.setInt8(i, this.pdfiumModule.pdfium.getValue(dataPtr + i, 'i8'));\n    }\n    this.memoryManager.free(dataPtr);\n    this.pdfiumModule.PDFiumExt_CloseFileWriter(writerPtr);\n\n    return buffer;\n  }\n\n  /**\n   * Read Catalog /Lang via EPDFCatalog_GetLanguage (UTF-16LE → JS string).\n   * Returns:\n   *   null  -> /Lang not present (getter returned 0) OR doc not open,\n   *   ''    -> /Lang exists but is explicitly empty,\n   *   'en', 'en-US', ... -> normal tag.\n   *\n   * Note: EPDFCatalog_GetLanguage lengths are BYTES (incl. trailing NUL).\n   *\n   * @private\n   */\n  private readCatalogLanguage(docPtr: number): string | null {\n    // Probe required length in BYTES (includes UTF-16LE trailing NUL).\n    const byteLen = this.pdfiumModule.EPDFCatalog_GetLanguage(docPtr, 0, 0) >>> 0;\n\n    // 0 => /Lang missing (or invalid doc/root) → expose as null\n    if (byteLen === 0) return null;\n\n    // 2 => empty UTF-16LE string (just the NUL) → explicitly empty\n    if (byteLen === 2) return '';\n\n    // Read exact buffer to avoid extra allocs.\n    return readString(\n      this.pdfiumModule.pdfium,\n      (buffer, bufferLength) =>\n        this.pdfiumModule.EPDFCatalog_GetLanguage(docPtr, buffer, bufferLength),\n      this.pdfiumModule.pdfium.UTF16ToString,\n      byteLen,\n    );\n  }\n\n  /**\n   * Read metadata from pdf document\n   * @param docPtr - pointer to pdf document\n   * @param key - key of metadata field\n   * @returns metadata value\n   *\n   * @private\n   */\n  private readMetaText(docPtr: number, key: string): string | null {\n    const exists = !!this.pdfiumModule.EPDF_HasMetaText(docPtr, key);\n    if (!exists) return null;\n\n    const len = this.pdfiumModule.FPDF_GetMetaText(docPtr, key, 0, 0);\n    if (len === 2) return '';\n\n    // Read with an exact buffer to avoid extra allocations.\n    return readString(\n      this.pdfiumModule.pdfium,\n      (buffer, bufferLength) =>\n        this.pdfiumModule.FPDF_GetMetaText(docPtr, key, buffer, bufferLength),\n      this.pdfiumModule.pdfium.UTF16ToString,\n      len,\n    );\n  }\n\n  /**\n   * Write metadata into the PDF's Info dictionary.\n   * If `value` is null or empty string, the key is removed.\n   * @param docPtr - pointer to pdf document\n   * @param key - key of metadata field\n   * @param value - value of metadata field\n   * @returns whether metadata is written to the pdf document\n   *\n   * @private\n   */\n  private setMetaText(docPtr: number, key: string, value: string | null | undefined): boolean {\n    // Remove key if value is null/undefined/empty\n    if (value == null || value.length === 0) {\n      // Pass nullptr for value → removal in our C++ implementation\n      const ok = this.pdfiumModule.EPDF_SetMetaText(docPtr, key, 0);\n      return !!ok;\n    }\n\n    // UTF-16LE buffer (+2 bytes for NUL)\n    const bytes = 2 * (value.length + 1);\n    const ptr = this.memoryManager.malloc(bytes);\n    try {\n      this.pdfiumModule.pdfium.stringToUTF16(value, ptr, bytes);\n      const ok = this.pdfiumModule.EPDF_SetMetaText(docPtr, key, ptr);\n      return !!ok;\n    } finally {\n      this.memoryManager.free(ptr);\n    }\n  }\n\n  /**\n   * Read the document's trapped status via PDFium.\n   * Falls back to `Unknown` on unexpected values.\n   *\n   * @private\n   */\n  private getMetaTrapped(docPtr: number): PdfTrappedStatus {\n    const raw = Number(this.pdfiumModule.EPDF_GetMetaTrapped(docPtr));\n    switch (raw) {\n      case PdfTrappedStatus.NotSet:\n      case PdfTrappedStatus.True:\n      case PdfTrappedStatus.False:\n      case PdfTrappedStatus.Unknown:\n        return raw;\n      default:\n        return PdfTrappedStatus.Unknown;\n    }\n  }\n\n  /**\n   * Write (or clear) the document's trapped status via PDFium.\n   * Pass `null`/`undefined` to remove the `/Trapped` key.\n   *\n   * @private\n   */\n  private setMetaTrapped(docPtr: number, status: PdfTrappedStatus | null | undefined): boolean {\n    // Treat null/undefined as “remove key” — the C++ side handles NotSet by\n    // deleting /Trapped from the Info dictionary.\n    const toSet = status == null || status === undefined ? PdfTrappedStatus.NotSet : status;\n\n    // Guard against unexpected values.\n    const valid =\n      toSet === PdfTrappedStatus.NotSet ||\n      toSet === PdfTrappedStatus.True ||\n      toSet === PdfTrappedStatus.False ||\n      toSet === PdfTrappedStatus.Unknown;\n\n    if (!valid) return false;\n\n    return !!this.pdfiumModule.EPDF_SetMetaTrapped(docPtr, toSet);\n  }\n\n  /**\n   * Get the number of keys in the document's Info dictionary.\n   * @param docPtr - pointer to pdf document\n   * @param customOnly - if true, only count non-reserved (custom) keys; if false, count all keys.\n   * @returns the number of keys (possibly 0). On error, returns 0.\n   *\n   * @private\n   */\n  private getMetaKeyCount(docPtr: number, customOnly: boolean): number {\n    return Number(this.pdfiumModule.EPDF_GetMetaKeyCount(docPtr, customOnly)) | 0;\n  }\n\n  /**\n   * Get the name of the Info dictionary key at |index|.\n   * @param docPtr - pointer to pdf document\n   * @param index - 0-based key index in the order returned by PDFium.\n   * @param customOnly - if true, indexes only over non-reserved (custom) keys; if false, indexes over all keys.\n   * @returns the name of the key, or null if the key is not found.\n   *\n   * @private\n   */\n  private getMetaKeyName(docPtr: number, index: number, customOnly: boolean): string | null {\n    const len = this.pdfiumModule.EPDF_GetMetaKeyName(docPtr, index, customOnly, 0, 0);\n    if (!len) return null;\n    return readString(\n      this.pdfiumModule.pdfium,\n      (buffer, buflen) =>\n        this.pdfiumModule.EPDF_GetMetaKeyName(docPtr, index, customOnly, buffer, buflen),\n      this.pdfiumModule.pdfium.UTF8ToString,\n      len,\n    );\n  }\n\n  /**\n   * Read all metadata from the document's Info dictionary.\n   * @param docPtr - pointer to pdf document\n   * @param customOnly - if true, only read non-reserved (custom) keys; if false, read all keys.\n   * @returns all metadata\n   *\n   * @private\n   */\n  private readAllMeta(docPtr: number, customOnly: boolean = true): Record<string, string | null> {\n    const n = this.getMetaKeyCount(docPtr, customOnly);\n    const out: Record<string, string | null> = {};\n    for (let i = 0; i < n; i++) {\n      const key = this.getMetaKeyName(docPtr, i, customOnly);\n      if (!key) continue;\n      out[key] = this.readMetaText(docPtr, key); // returns null if not present\n    }\n    return out;\n  }\n\n  /**\n   * Read bookmarks in the pdf document\n   * @param docPtr - pointer to pdf document\n   * @param rootBookmarkPtr - pointer to root bookmark\n   * @returns bookmarks in the pdf document\n   *\n   * @private\n   */\n  readPdfBookmarks(docPtr: number, rootBookmarkPtr = 0) {\n    let bookmarkPtr = this.pdfiumModule.FPDFBookmark_GetFirstChild(docPtr, rootBookmarkPtr);\n\n    const bookmarks: PdfBookmarkObject[] = [];\n    while (bookmarkPtr) {\n      const bookmark = this.readPdfBookmark(docPtr, bookmarkPtr);\n      bookmarks.push(bookmark);\n\n      const nextBookmarkPtr = this.pdfiumModule.FPDFBookmark_GetNextSibling(docPtr, bookmarkPtr);\n\n      bookmarkPtr = nextBookmarkPtr;\n    }\n\n    return bookmarks;\n  }\n\n  /**\n   * Read bookmark in the pdf document\n   * @param docPtr - pointer to pdf document\n   * @param bookmarkPtr - pointer to bookmark object\n   * @returns pdf bookmark object\n   *\n   * @private\n   */\n  private readPdfBookmark(docPtr: number, bookmarkPtr: number): PdfBookmarkObject {\n    const title = readString(\n      this.pdfiumModule.pdfium,\n      (buffer, bufferLength) => {\n        return this.pdfiumModule.FPDFBookmark_GetTitle(bookmarkPtr, buffer, bufferLength);\n      },\n      this.pdfiumModule.pdfium.UTF16ToString,\n    );\n\n    const bookmarks = this.readPdfBookmarks(docPtr, bookmarkPtr);\n\n    const target = this.readPdfBookmarkTarget(\n      docPtr,\n      () => {\n        return this.pdfiumModule.FPDFBookmark_GetAction(bookmarkPtr);\n      },\n      () => {\n        return this.pdfiumModule.FPDFBookmark_GetDest(docPtr, bookmarkPtr);\n      },\n    );\n\n    return {\n      title,\n      target,\n      children: bookmarks,\n    };\n  }\n\n  /**\n   * Read text rects in pdf page\n   * @param page - pdf page info\n   * @param docPtr - pointer to pdf document\n   * @param pagePtr - pointer to pdf page\n   * @param textPagePtr - pointer to pdf text page\n   * @returns text rects in the pdf page\n   *\n   * @public\n   */\n  private readPageTextRects(\n    page: PdfPageObject,\n    docPtr: number,\n    pagePtr: number,\n    textPagePtr: number,\n  ) {\n    const rectsCount = this.pdfiumModule.FPDFText_CountRects(textPagePtr, 0, -1);\n\n    const textRects: PdfTextRectObject[] = [];\n    for (let i = 0; i < rectsCount; i++) {\n      const topPtr = this.memoryManager.malloc(8);\n      const leftPtr = this.memoryManager.malloc(8);\n      const rightPtr = this.memoryManager.malloc(8);\n      const bottomPtr = this.memoryManager.malloc(8);\n      const isSucceed = this.pdfiumModule.FPDFText_GetRect(\n        textPagePtr,\n        i,\n        leftPtr,\n        topPtr,\n        rightPtr,\n        bottomPtr,\n      );\n      if (!isSucceed) {\n        this.memoryManager.free(leftPtr);\n        this.memoryManager.free(topPtr);\n        this.memoryManager.free(rightPtr);\n        this.memoryManager.free(bottomPtr);\n        continue;\n      }\n\n      const left = this.pdfiumModule.pdfium.getValue(leftPtr, 'double');\n      const top = this.pdfiumModule.pdfium.getValue(topPtr, 'double');\n      const right = this.pdfiumModule.pdfium.getValue(rightPtr, 'double');\n      const bottom = this.pdfiumModule.pdfium.getValue(bottomPtr, 'double');\n\n      this.memoryManager.free(leftPtr);\n      this.memoryManager.free(topPtr);\n      this.memoryManager.free(rightPtr);\n      this.memoryManager.free(bottomPtr);\n\n      const deviceXPtr = this.memoryManager.malloc(4);\n      const deviceYPtr = this.memoryManager.malloc(4);\n      this.pdfiumModule.FPDF_PageToDevice(\n        pagePtr,\n        0,\n        0,\n        page.size.width,\n        page.size.height,\n        0,\n        left,\n        top,\n        deviceXPtr,\n        deviceYPtr,\n      );\n      const x = this.pdfiumModule.pdfium.getValue(deviceXPtr, 'i32');\n      const y = this.pdfiumModule.pdfium.getValue(deviceYPtr, 'i32');\n      this.memoryManager.free(deviceXPtr);\n      this.memoryManager.free(deviceYPtr);\n\n      const rect = {\n        origin: {\n          x,\n          y,\n        },\n        size: {\n          width: Math.ceil(Math.abs(right - left)),\n          height: Math.ceil(Math.abs(top - bottom)),\n        },\n      };\n\n      const utf16Length = this.pdfiumModule.FPDFText_GetBoundedText(\n        textPagePtr,\n        left,\n        top,\n        right,\n        bottom,\n        0,\n        0,\n      );\n      const bytesCount = (utf16Length + 1) * 2; // include NIL\n      const textBuffer = this.memoryManager.malloc(bytesCount);\n      this.pdfiumModule.FPDFText_GetBoundedText(\n        textPagePtr,\n        left,\n        top,\n        right,\n        bottom,\n        textBuffer,\n        utf16Length,\n      );\n      const content = this.pdfiumModule.pdfium.UTF16ToString(textBuffer);\n      this.memoryManager.free(textBuffer);\n\n      const charIndex = this.pdfiumModule.FPDFText_GetCharIndexAtPos(textPagePtr, left, top, 2, 2);\n      let fontFamily = '';\n      let fontSize = rect.size.height;\n      if (charIndex >= 0) {\n        fontSize = this.pdfiumModule.FPDFText_GetFontSize(textPagePtr, charIndex);\n\n        const fontNameLength = this.pdfiumModule.FPDFText_GetFontInfo(\n          textPagePtr,\n          charIndex,\n          0,\n          0,\n          0,\n        );\n\n        const bytesCount = fontNameLength + 1; // include NIL\n        const textBufferPtr = this.memoryManager.malloc(bytesCount);\n        const flagsPtr = this.memoryManager.malloc(4);\n        this.pdfiumModule.FPDFText_GetFontInfo(\n          textPagePtr,\n          charIndex,\n          textBufferPtr,\n          bytesCount,\n          flagsPtr,\n        );\n        fontFamily = this.pdfiumModule.pdfium.UTF8ToString(textBufferPtr);\n        this.memoryManager.free(textBufferPtr);\n        this.memoryManager.free(flagsPtr);\n      }\n\n      const textRect: PdfTextRectObject = {\n        content,\n        rect,\n        font: {\n          family: fontFamily,\n          size: fontSize,\n        },\n      };\n\n      textRects.push(textRect);\n    }\n\n    return textRects;\n  }\n\n  /**\n   * Return geometric + logical text layout for one page\n   * (glyph-only implementation, no FPDFText_GetRect).\n   *\n   * @public\n   */\n  getPageGeometry(doc: PdfDocumentObject, page: PdfPageObject): PdfTask<PdfPageGeometry> {\n    const label = 'getPageGeometry';\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, label, 'Begin', doc.id);\n\n    /* ── guards ───────────────────────────────────────────── */\n    const ctx = this.cache.getContext(doc.id);\n\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, label, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    /* ── native handles ──────────────────────────────────── */\n    const pageCtx = ctx.acquirePage(page.index);\n    const textPagePtr = pageCtx.getTextPage();\n\n    /* ── 1. read ALL glyphs in logical order ─────────────── */\n    const glyphCount = this.pdfiumModule.FPDFText_CountChars(textPagePtr);\n    const glyphs: PdfGlyphObject[] = [];\n\n    for (let i = 0; i < glyphCount; i++) {\n      const g = this.readGlyphInfo(page, pageCtx.pagePtr, textPagePtr, i);\n      glyphs.push(g);\n    }\n\n    /* ── 2. build visual runs from glyph stream ───────────── */\n    const runs: PdfRun[] = this.buildRunsFromGlyphs(glyphs, textPagePtr);\n\n    /* ── 3. cleanup & resolve task ───────────────────────── */\n    pageCtx.release();\n\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, label, 'End', doc.id);\n    return PdfTaskHelper.resolve({ runs });\n  }\n\n  /**\n   * Group consecutive glyphs that belong to the same CPDF_TextObject\n   * using FPDFText_GetTextObject(), and calculate rotation from glyph positions.\n   */\n  private buildRunsFromGlyphs(glyphs: PdfGlyphObject[], textPagePtr: number): PdfRun[] {\n    const runs: PdfRun[] = [];\n    let current: PdfRun | null = null;\n    let curObjPtr: number | null = null;\n    let bounds: { minX: number; minY: number; maxX: number; maxY: number } | null = null;\n\n    /** ── main loop ──────────────────────────────────────────── */\n    for (let i = 0; i < glyphs.length; i++) {\n      const g = glyphs[i];\n\n      /* 1 — find the CPDF_TextObject this glyph belongs to */\n      const objPtr = this.pdfiumModule.FPDFText_GetTextObject(textPagePtr, i) as number;\n\n      /* 2 — start a new run when the text object changes */\n      if (objPtr !== curObjPtr) {\n        curObjPtr = objPtr;\n        current = {\n          rect: {\n            x: g.origin.x,\n            y: g.origin.y,\n            width: g.size.width,\n            height: g.size.height,\n          },\n          charStart: i,\n          glyphs: [],\n        };\n        bounds = {\n          minX: g.origin.x,\n          minY: g.origin.y,\n          maxX: g.origin.x + g.size.width,\n          maxY: g.origin.y + g.size.height,\n        };\n        runs.push(current);\n      }\n\n      /* 3 — append the slim glyph record */\n      current!.glyphs.push({\n        x: g.origin.x,\n        y: g.origin.y,\n        width: g.size.width,\n        height: g.size.height,\n        flags: g.isEmpty ? 2 : g.isSpace ? 1 : 0,\n      });\n\n      /* 4 — expand the run's bounding rect */\n      if (g.isEmpty) {\n        continue;\n      }\n\n      const right = g.origin.x + g.size.width;\n      const bottom = g.origin.y + g.size.height;\n\n      // Update bounds\n      bounds!.minX = Math.min(bounds!.minX, g.origin.x);\n      bounds!.minY = Math.min(bounds!.minY, g.origin.y);\n      bounds!.maxX = Math.max(bounds!.maxX, right);\n      bounds!.maxY = Math.max(bounds!.maxY, bottom);\n\n      // Calculate final rect from bounds\n      current!.rect.x = bounds!.minX;\n      current!.rect.y = bounds!.minY;\n      current!.rect.width = bounds!.maxX - bounds!.minX;\n      current!.rect.height = bounds!.maxY - bounds!.minY;\n    }\n\n    return runs;\n  }\n\n  /**\n   * Extract glyph geometry + metadata for `charIndex`\n   *\n   * Returns device–space coordinates:\n   *   x,y  → **top-left** corner (integer-pixels)\n   *   w,h  → width / height (integer-pixels, ≥ 1)\n   *\n   * And two flags:\n   *   isSpace → true if the glyph's Unicode code-point is U+0020\n   */\n  private readGlyphInfo(\n    page: PdfPageObject,\n    pagePtr: number,\n    textPagePtr: number,\n    charIndex: number,\n  ): PdfGlyphObject {\n    // ── native stack temp pointers ──────────────────────────────\n    const dx1Ptr = this.memoryManager.malloc(4);\n    const dy1Ptr = this.memoryManager.malloc(4);\n    const dx2Ptr = this.memoryManager.malloc(4);\n    const dy2Ptr = this.memoryManager.malloc(4);\n    const rectPtr = this.memoryManager.malloc(16); // 4 floats = 16 bytes\n\n    let x = 0,\n      y = 0,\n      width = 0,\n      height = 0,\n      isSpace = false;\n\n    // ── 1) raw glyph bbox in                      page-user-space\n    if (this.pdfiumModule.FPDFText_GetLooseCharBox(textPagePtr, charIndex, rectPtr)) {\n      const left = this.pdfiumModule.pdfium.getValue(rectPtr, 'float');\n      const top = this.pdfiumModule.pdfium.getValue(rectPtr + 4, 'float');\n      const right = this.pdfiumModule.pdfium.getValue(rectPtr + 8, 'float');\n      const bottom = this.pdfiumModule.pdfium.getValue(rectPtr + 12, 'float');\n\n      if (left === right || top === bottom) {\n        [rectPtr, dx1Ptr, dy1Ptr, dx2Ptr, dy2Ptr].forEach((p) => this.memoryManager.free(p));\n\n        return {\n          origin: { x: 0, y: 0 },\n          size: { width: 0, height: 0 },\n          isEmpty: true,\n        };\n      }\n\n      // ── 2) map 2 opposite corners to            device-space\n      this.pdfiumModule.FPDF_PageToDevice(\n        pagePtr,\n        0,\n        0,\n        page.size.width,\n        page.size.height,\n        /*rotate=*/ 0,\n        left,\n        top,\n        dx1Ptr,\n        dy1Ptr,\n      );\n      this.pdfiumModule.FPDF_PageToDevice(\n        pagePtr,\n        0,\n        0,\n        page.size.width,\n        page.size.height,\n        /*rotate=*/ 0,\n        right,\n        bottom,\n        dx2Ptr,\n        dy2Ptr,\n      );\n\n      const x1 = this.pdfiumModule.pdfium.getValue(dx1Ptr, 'i32');\n      const y1 = this.pdfiumModule.pdfium.getValue(dy1Ptr, 'i32');\n      const x2 = this.pdfiumModule.pdfium.getValue(dx2Ptr, 'i32');\n      const y2 = this.pdfiumModule.pdfium.getValue(dy2Ptr, 'i32');\n\n      x = Math.min(x1, x2);\n      y = Math.min(y1, y2);\n      width = Math.max(1, Math.abs(x2 - x1));\n      height = Math.max(1, Math.abs(y2 - y1));\n\n      // ── 3) extra flags ───────────────────────────────────────\n      const uc = this.pdfiumModule.FPDFText_GetUnicode(textPagePtr, charIndex);\n      isSpace = uc === 32;\n    }\n\n    // ── free tmps ───────────────────────────────────────────────\n    [rectPtr, dx1Ptr, dy1Ptr, dx2Ptr, dy2Ptr].forEach((p) => this.memoryManager.free(p));\n\n    return {\n      origin: { x, y },\n      size: { width, height },\n      ...(isSpace && { isSpace }),\n    };\n  }\n\n  /**\n   * Geometry-only text extraction\n   * ------------------------------------------\n   * Returns every glyph on the requested page\n   * in the logical order delivered by PDFium.\n   *\n   * The promise resolves to an array of objects:\n   *   {\n   *     idx:     number;            // glyph index on the page (0…n-1)\n   *     origin:  { x: number; y: number };\n   *     size:    { width: number;  height: number };\n   *     angle:   number;            // degrees, counter-clock-wise\n   *     isSpace: boolean;           // true  → U+0020\n   *   }\n   *\n   * No Unicode is included; front-end decides whether to hydrate it.\n   */\n  public getPageGlyphs(doc: PdfDocumentObject, page: PdfPageObject): PdfTask<PdfGlyphObject[]> {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getPageGlyphs', doc, page);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, 'getPageGlyphs', 'Begin', doc.id);\n\n    // ── 1) safety: document handle must be alive ───────────────\n    const ctx = this.cache.getContext(doc.id);\n\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, 'getPageGlyphs', 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    // ── 2) load page + text page handles ───────────────────────\n    const pageCtx = ctx.acquirePage(page.index);\n    const textPagePtr = pageCtx.getTextPage();\n\n    // ── 3) iterate all glyphs in logical order ─────────────────\n    const total = this.pdfiumModule.FPDFText_CountChars(textPagePtr);\n    const glyphs = new Array(total);\n\n    for (let i = 0; i < total; i++) {\n      const g = this.readGlyphInfo(page, pageCtx.pagePtr, textPagePtr, i);\n\n      if (g.isEmpty) {\n        continue;\n      }\n\n      glyphs[i] = { ...g };\n    }\n\n    // ── 4) clean-up native handles ─────────────────────────────\n    pageCtx.release();\n\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, 'getPageGlyphs', 'End', doc.id);\n\n    return PdfTaskHelper.resolve(glyphs);\n  }\n\n  private readCharBox(\n    page: PdfPageObject,\n    pagePtr: number,\n    textPagePtr: number,\n    charIndex: number,\n  ): Rect {\n    const topPtr = this.memoryManager.malloc(8);\n    const leftPtr = this.memoryManager.malloc(8);\n    const bottomPtr = this.memoryManager.malloc(8);\n    const rightPtr = this.memoryManager.malloc(8);\n    let x = 0;\n    let y = 0;\n    let width = 0;\n    let height = 0;\n    if (\n      this.pdfiumModule.FPDFText_GetCharBox(\n        textPagePtr,\n        charIndex,\n        leftPtr,\n        rightPtr,\n        bottomPtr,\n        topPtr,\n      )\n    ) {\n      const top = this.pdfiumModule.pdfium.getValue(topPtr, 'double');\n      const left = this.pdfiumModule.pdfium.getValue(leftPtr, 'double');\n      const bottom = this.pdfiumModule.pdfium.getValue(bottomPtr, 'double');\n      const right = this.pdfiumModule.pdfium.getValue(rightPtr, 'double');\n\n      const deviceXPtr = this.memoryManager.malloc(4);\n      const deviceYPtr = this.memoryManager.malloc(4);\n      this.pdfiumModule.FPDF_PageToDevice(\n        pagePtr,\n        0,\n        0,\n        page.size.width,\n        page.size.height,\n        0,\n        left,\n        top,\n        deviceXPtr,\n        deviceYPtr,\n      );\n      x = this.pdfiumModule.pdfium.getValue(deviceXPtr, 'i32');\n      y = this.pdfiumModule.pdfium.getValue(deviceYPtr, 'i32');\n      this.memoryManager.free(deviceXPtr);\n      this.memoryManager.free(deviceYPtr);\n\n      width = Math.ceil(Math.abs(right - left));\n      height = Math.ceil(Math.abs(top - bottom));\n    }\n    this.memoryManager.free(topPtr);\n    this.memoryManager.free(leftPtr);\n    this.memoryManager.free(bottomPtr);\n    this.memoryManager.free(rightPtr);\n\n    return {\n      origin: {\n        x,\n        y,\n      },\n      size: {\n        width,\n        height,\n      },\n    };\n  }\n\n  /**\n   * Read page annotations\n   *\n   * @param ctx - document context\n   * @param page - page info\n   * @returns annotations on the pdf page\n   *\n   * @private\n   */\n  private readPageAnnotations(ctx: DocumentContext, page: PdfPageObject) {\n    return ctx.borrowPage(page.index, (pageCtx) => {\n      const annotationCount = this.pdfiumModule.FPDFPage_GetAnnotCount(pageCtx.pagePtr);\n\n      const annotations: PdfAnnotationObject[] = [];\n      for (let i = 0; i < annotationCount; i++) {\n        pageCtx.withAnnotation(i, (annotPtr) => {\n          const anno = this.readPageAnnotation(ctx.docPtr, page, annotPtr, pageCtx);\n          if (anno) annotations.push(anno);\n        });\n      }\n      return annotations;\n    });\n  }\n\n  /**\n   * Read page annotations\n   *\n   * @param ctx - document context\n   * @param page - page info\n   * @returns annotations on the pdf page\n   *\n   * @private\n   */\n  private readPageAnnotationsRaw(ctx: DocumentContext, page: PdfPageObject): PdfAnnotationObject[] {\n    const count = this.pdfiumModule.EPDFPage_GetAnnotCountRaw(ctx.docPtr, page.index);\n    if (count <= 0) return [];\n\n    const out: PdfAnnotationObject[] = [];\n\n    const pageCtx = ctx.acquirePage(page.index);\n\n    for (let i = 0; i < count; ++i) {\n      const annotPtr = this.pdfiumModule.EPDFPage_GetAnnotRaw(ctx.docPtr, page.index, i);\n      if (!annotPtr) continue;\n\n      try {\n        const anno = this.readPageAnnotation(ctx.docPtr, page, annotPtr, pageCtx);\n        if (anno) out.push(anno);\n      } finally {\n        this.pdfiumModule.FPDFPage_CloseAnnot(annotPtr);\n      }\n    }\n    return out;\n  }\n\n  /**\n   * Read pdf annotation from pdf document\n   *\n   * @param docPtr - pointer to pdf document\n   * @param page - page info\n   * @param annotationPtr - pointer to pdf annotation\n   * @param pageCtx - page context\n   * @returns pdf annotation\n   *\n   * @private\n   */\n  private readPageAnnotation(\n    docPtr: number,\n    page: PdfPageObject,\n    annotationPtr: number,\n    pageCtx?: PageContext,\n  ) {\n    let index = this.getAnnotString(annotationPtr, 'NM');\n    if (!index || !isUuidV4(index)) {\n      index = uuidV4();\n      this.setAnnotString(annotationPtr, 'NM', index);\n    }\n    const subType = this.pdfiumModule.FPDFAnnot_GetSubtype(\n      annotationPtr,\n    ) as PdfAnnotationObject['type'];\n    let annotation: PdfAnnotationObject | undefined;\n    switch (subType) {\n      case PdfAnnotationSubtype.TEXT:\n        {\n          annotation = this.readPdfTextAnno(page, annotationPtr, index);\n        }\n        break;\n      case PdfAnnotationSubtype.FREETEXT:\n        {\n          annotation = this.readPdfFreeTextAnno(page, annotationPtr, index);\n        }\n        break;\n      case PdfAnnotationSubtype.LINK:\n        {\n          annotation = this.readPdfLinkAnno(page, docPtr, annotationPtr, index);\n        }\n        break;\n      case PdfAnnotationSubtype.WIDGET:\n        if (pageCtx) {\n          return this.readPdfWidgetAnno(page, annotationPtr, pageCtx.getFormHandle(), index);\n        }\n      case PdfAnnotationSubtype.FILEATTACHMENT:\n        {\n          annotation = this.readPdfFileAttachmentAnno(page, annotationPtr, index);\n        }\n        break;\n      case PdfAnnotationSubtype.INK:\n        {\n          annotation = this.readPdfInkAnno(page, annotationPtr, index);\n        }\n        break;\n      case PdfAnnotationSubtype.POLYGON:\n        {\n          annotation = this.readPdfPolygonAnno(page, annotationPtr, index);\n        }\n        break;\n      case PdfAnnotationSubtype.POLYLINE:\n        {\n          annotation = this.readPdfPolylineAnno(page, annotationPtr, index);\n        }\n        break;\n      case PdfAnnotationSubtype.LINE:\n        {\n          annotation = this.readPdfLineAnno(page, annotationPtr, index);\n        }\n        break;\n      case PdfAnnotationSubtype.HIGHLIGHT:\n        annotation = this.readPdfHighlightAnno(page, annotationPtr, index);\n        break;\n      case PdfAnnotationSubtype.STAMP:\n        {\n          annotation = this.readPdfStampAnno(page, annotationPtr, index);\n        }\n        break;\n      case PdfAnnotationSubtype.SQUARE:\n        {\n          annotation = this.readPdfSquareAnno(page, annotationPtr, index);\n        }\n        break;\n      case PdfAnnotationSubtype.CIRCLE:\n        {\n          annotation = this.readPdfCircleAnno(page, annotationPtr, index);\n        }\n        break;\n      case PdfAnnotationSubtype.UNDERLINE:\n        {\n          annotation = this.readPdfUnderlineAnno(page, annotationPtr, index);\n        }\n        break;\n      case PdfAnnotationSubtype.SQUIGGLY:\n        {\n          annotation = this.readPdfSquigglyAnno(page, annotationPtr, index);\n        }\n        break;\n      case PdfAnnotationSubtype.STRIKEOUT:\n        {\n          annotation = this.readPdfStrikeOutAnno(page, annotationPtr, index);\n        }\n        break;\n      case PdfAnnotationSubtype.CARET:\n        {\n          annotation = this.readPdfCaretAnno(page, annotationPtr, index);\n        }\n        break;\n      default:\n        {\n          annotation = this.readPdfAnno(page, subType, annotationPtr, index);\n        }\n        break;\n    }\n\n    return annotation;\n  }\n\n  /**\n   * Return the colour stored directly in the annotation dictionary's `/C` entry.\n   *\n   * Most PDFs created by Acrobat, Microsoft Office, LaTeX, etc. include this entry.\n   * When the key is absent (common in macOS Preview, Chrome, Drawboard) the call\n   * fails and the function returns `undefined`.\n   *\n   * @param annotationPtr - pointer to an `FPDF_ANNOTATION`\n   * @returns An RGBA tuple (0-255 channels) or `undefined` if no `/C` entry exists\n   *\n   * @private\n   */\n  private readAnnotationColor(\n    annotationPtr: number,\n    colorType: PdfAnnotationColorType = PdfAnnotationColorType.Color,\n  ): PdfColor | undefined {\n    const rPtr = this.memoryManager.malloc(4);\n    const gPtr = this.memoryManager.malloc(4);\n    const bPtr = this.memoryManager.malloc(4);\n\n    // colourType 0 = \"colour\" (stroke/fill); other types are interior/border\n    const ok = this.pdfiumModule.EPDFAnnot_GetColor(annotationPtr, colorType, rPtr, gPtr, bPtr);\n\n    let colour: PdfColor | undefined;\n\n    if (ok) {\n      colour = {\n        red: this.pdfiumModule.pdfium.getValue(rPtr, 'i32') & 0xff,\n        green: this.pdfiumModule.pdfium.getValue(gPtr, 'i32') & 0xff,\n        blue: this.pdfiumModule.pdfium.getValue(bPtr, 'i32') & 0xff,\n      };\n    }\n\n    this.memoryManager.free(rPtr);\n    this.memoryManager.free(gPtr);\n    this.memoryManager.free(bPtr);\n\n    return colour;\n  }\n\n  /**\n   * Get the fill/stroke colour annotation.\n   *\n   * @param annotationPtr - pointer to the annotation whose colour is being set\n   * @param colorType - which colour to get (0 = fill, 1 = stroke)\n   * @returns WebColor with hex color\n   *\n   * @private\n   */\n  private getAnnotationColor(\n    annotationPtr: number,\n    colorType: PdfAnnotationColorType = PdfAnnotationColorType.Color,\n  ): WebColor | undefined {\n    const annotationColor = this.readAnnotationColor(annotationPtr, colorType);\n\n    return annotationColor ? pdfColorToWebColor(annotationColor) : undefined;\n  }\n\n  /**\n   * Set the fill/stroke colour for a **Highlight / Underline / StrikeOut / Squiggly** markup annotation.\n   *\n   * @param annotationPtr - pointer to the annotation whose colour is being set\n   * @param webAlphaColor - WebAlphaColor with hex color and opacity (0-1)\n   * @param shouldClearAP - whether to clear the /AP entry\n   * @param which - which colour to set (0 = fill, 1 = stroke)\n   * @returns `true` if the operation was successful\n   *\n   * @private\n   */\n  private setAnnotationColor(\n    annotationPtr: number,\n    webColor: WebColor,\n    colorType: PdfAnnotationColorType = PdfAnnotationColorType.Color,\n  ): boolean {\n    const pdfColor = webColorToPdfColor(webColor);\n\n    return this.pdfiumModule.EPDFAnnot_SetColor(\n      annotationPtr,\n      colorType,\n      pdfColor.red & 0xff,\n      pdfColor.green & 0xff,\n      pdfColor.blue & 0xff,\n    );\n  }\n\n  /**\n   * Get the opacity of the annotation.\n   *\n   * @param annotationPtr - pointer to the annotation whose opacity is being set\n   * @returns opacity (0-1)\n   *\n   * @private\n   */\n  private getAnnotationOpacity(annotationPtr: number): number {\n    const opacityPtr = this.memoryManager.malloc(4);\n    const ok = this.pdfiumModule.EPDFAnnot_GetOpacity(annotationPtr, opacityPtr);\n    const opacity = ok ? this.pdfiumModule.pdfium.getValue(opacityPtr, 'i32') : 255;\n    this.memoryManager.free(opacityPtr);\n    return pdfAlphaToWebOpacity(opacity);\n  }\n\n  /**\n   * Set the opacity of the annotation.\n   *\n   * @param annotationPtr - pointer to the annotation whose opacity is being set\n   * @param opacity - opacity (0-1)\n   * @returns true on success\n   *\n   * @private\n   */\n  private setAnnotationOpacity(annotationPtr: number, opacity: number): boolean {\n    const pdfOpacity = webOpacityToPdfAlpha(opacity);\n    return this.pdfiumModule.EPDFAnnot_SetOpacity(annotationPtr, pdfOpacity & 0xff);\n  }\n\n  /**\n   * Fetch the `/Q` text-alignment value from a **FreeText** annotation.\n   *\n   * @param annotationPtr pointer returned by `FPDFPage_GetAnnot`\n   * @returns `PdfTextAlignment`\n   */\n  private getAnnotationTextAlignment(annotationPtr: number): PdfTextAlignment {\n    return this.pdfiumModule.EPDFAnnot_GetTextAlignment(annotationPtr);\n  }\n\n  /**\n   * Write the `/Q` text-alignment value into a **FreeText** annotation\n   * and clear the existing appearance stream so it can be regenerated.\n   *\n   * @param annotationPtr pointer returned by `FPDFPage_GetAnnot`\n   * @param alignment     `PdfTextAlignment`\n   * @returns `true` on success\n   */\n  private setAnnotationTextAlignment(annotationPtr: number, alignment: PdfTextAlignment): boolean {\n    return !!this.pdfiumModule.EPDFAnnot_SetTextAlignment(annotationPtr, alignment);\n  }\n\n  /**\n   * Fetch the `/EPDF:VerticalAlignment` vertical-alignment value from a **FreeText** annotation.\n   *\n   * @param annotationPtr pointer returned by `FPDFPage_GetAnnot`\n   * @returns `PdfVerticalAlignment`\n   */\n  private getAnnotationVerticalAlignment(annotationPtr: number): PdfVerticalAlignment {\n    return this.pdfiumModule.EPDFAnnot_GetVerticalAlignment(annotationPtr);\n  }\n\n  /**\n   * Write the `/EPDF:VerticalAlignment` vertical-alignment value into a **FreeText** annotation\n   * and clear the existing appearance stream so it can be regenerated.\n   *\n   * @param annotationPtr pointer returned by `FPDFPage_GetAnnot`\n   * @param alignment     `PdfVerticalAlignment`\n   * @returns `true` on success\n   */\n  private setAnnotationVerticalAlignment(\n    annotationPtr: number,\n    alignment: PdfVerticalAlignment,\n  ): boolean {\n    return !!this.pdfiumModule.EPDFAnnot_SetVerticalAlignment(annotationPtr, alignment);\n  }\n\n  /**\n   * Return the **default appearance** (font, size, colour) declared in the\n   * `/DA` string of a **FreeText** annotation.\n   *\n   * @param annotationPtr  pointer to `FPDF_ANNOTATION`\n   * @returns `{ font, fontSize, color }` or `undefined` when PDFium returns false\n   *\n   * NOTE – `font` is the raw `FPDF_STANDARD_FONT` enum value that PDFium uses\n   *        (same range as the C API: 0 = Courier, 12 = ZapfDingbats, …).\n   */\n  private getAnnotationDefaultAppearance(\n    annotationPtr: number,\n  ): { fontFamily: PdfStandardFont; fontSize: number; fontColor: WebColor } | undefined {\n    const fontPtr = this.memoryManager.malloc(4);\n    const sizePtr = this.memoryManager.malloc(4);\n    const rPtr = this.memoryManager.malloc(4);\n    const gPtr = this.memoryManager.malloc(4);\n    const bPtr = this.memoryManager.malloc(4);\n\n    const ok = !!this.pdfiumModule.EPDFAnnot_GetDefaultAppearance(\n      annotationPtr,\n      fontPtr,\n      sizePtr,\n      rPtr,\n      gPtr,\n      bPtr,\n    );\n\n    if (!ok) {\n      [fontPtr, sizePtr, rPtr, gPtr, bPtr].forEach((p) => this.memoryManager.free(p));\n      return; // undefined – caller decides what to do\n    }\n\n    const pdf = this.pdfiumModule.pdfium;\n    const font = pdf.getValue(fontPtr, 'i32');\n    const fontSize = pdf.getValue(sizePtr, 'float');\n    const red = pdf.getValue(rPtr, 'i32') & 0xff;\n    const green = pdf.getValue(gPtr, 'i32') & 0xff;\n    const blue = pdf.getValue(bPtr, 'i32') & 0xff;\n\n    [fontPtr, sizePtr, rPtr, gPtr, bPtr].forEach((p) => this.memoryManager.free(p));\n\n    return {\n      fontFamily: font,\n      fontSize,\n      fontColor: pdfColorToWebColor({ red, green, blue }),\n    };\n  }\n\n  /**\n   * Write a **default appearance** (`/DA`) into a FreeText annotation.\n   *\n   * @param annotationPtr pointer to `FPDF_ANNOTATION`\n   * @param font          `FPDF_STANDARD_FONT` enum value\n   * @param fontSize      size in points (≥ 0)\n   * @param color         CSS-style `#rrggbb` string (alpha ignored)\n   * @returns `true` on success\n   */\n  private setAnnotationDefaultAppearance(\n    annotationPtr: number,\n    font: PdfStandardFont,\n    fontSize: number,\n    color: WebColor,\n  ): boolean {\n    const { red, green, blue } = webColorToPdfColor(color); // 0-255 ints\n\n    return !!this.pdfiumModule.EPDFAnnot_SetDefaultAppearance(\n      annotationPtr,\n      font,\n      fontSize,\n      red & 0xff,\n      green & 0xff,\n      blue & 0xff,\n    );\n  }\n\n  /**\n   * Border‐style + width helper\n   *\n   * Tries the new PDFium helper `EPDFAnnot_GetBorderStyle()` (patch series\n   * 9 July 2025).\n   *\n   * @param  annotationPtr  pointer to an `FPDF_ANNOTATION`\n   * @returns `{ ok, style, width }`\n   *          • `ok`     – `true` when the call succeeded\n   *          • `style`  – `PdfAnnotationBorderStyle` enum\n   *          • `width`  – stroke-width in points (defaults to 0 pt)\n   */\n  private getBorderStyle(annotationPtr: number): {\n    ok: boolean;\n    style: PdfAnnotationBorderStyle;\n    width: number;\n  } {\n    /* 1 ── allocate tmp storage for the returned width ─────────────── */\n    const widthPtr = this.memoryManager.malloc(4);\n    let width = 0;\n    let style: PdfAnnotationBorderStyle = PdfAnnotationBorderStyle.UNKNOWN;\n    let ok = false;\n\n    style = this.pdfiumModule.EPDFAnnot_GetBorderStyle(annotationPtr, widthPtr);\n    width = this.pdfiumModule.pdfium.getValue(widthPtr, 'float');\n    ok = style !== PdfAnnotationBorderStyle.UNKNOWN;\n    this.memoryManager.free(widthPtr);\n    return { ok, style, width };\n  }\n\n  private setBorderStyle(\n    annotationPtr: number,\n    style: PdfAnnotationBorderStyle,\n    width: number,\n  ): boolean {\n    return this.pdfiumModule.EPDFAnnot_SetBorderStyle(annotationPtr, style, width);\n  }\n\n  /**\n   * Get the icon of the annotation\n   *\n   * @param annotationPtr - pointer to an `FPDF_ANNOTATION`\n   * @returns `PdfAnnotationIcon`\n   */\n  private getAnnotationIcon(annotationPtr: number): PdfAnnotationIcon {\n    return this.pdfiumModule.EPDFAnnot_GetIcon(annotationPtr);\n  }\n\n  /**\n   * Set the icon of the annotation\n   *\n   * @param annotationPtr - pointer to an `FPDF_ANNOTATION`\n   * @param icon - `PdfAnnotationIcon`\n   * @returns `true` on success\n   */\n  private setAnnotationIcon(annotationPtr: number, icon: PdfAnnotationIcon): boolean {\n    return this.pdfiumModule.EPDFAnnot_SetIcon(annotationPtr, icon);\n  }\n\n  /**\n   * Border-effect (“cloudy”) helper\n   *\n   * Calls the new PDFium function `EPDFAnnot_GetBorderEffect()` (July 2025).\n   *\n   * @param  annotationPtr  pointer to an `FPDF_ANNOTATION`\n   * @returns `{ ok, intensity }`\n   *          • `ok`        – `true` when the annotation *does* have a\n   *                          valid cloudy-border effect\n   *          • `intensity` – radius/intensity value (0 when `ok` is false)\n   */\n  private getBorderEffect(annotationPtr: number): { ok: boolean; intensity: number } {\n    const intensityPtr = this.memoryManager.malloc(4);\n\n    const ok = !!this.pdfiumModule.EPDFAnnot_GetBorderEffect(annotationPtr, intensityPtr);\n\n    const intensity = ok ? this.pdfiumModule.pdfium.getValue(intensityPtr, 'float') : 0;\n\n    this.memoryManager.free(intensityPtr);\n    return { ok, intensity };\n  }\n\n  /**\n   * Rectangle-differences helper ( /RD array on Square / Circle annots )\n   *\n   * Calls `EPDFAnnot_GetRectangleDifferences()` introduced in July 2025.\n   *\n   * @param  annotationPtr  pointer to an `FPDF_ANNOTATION`\n   * @returns `{ ok, left, top, right, bottom }`\n   *          • `ok`     – `true` when the annotation *has* an /RD entry\n   *          • the four floats are 0 when `ok` is false\n   */\n  private getRectangleDifferences(annotationPtr: number): {\n    ok: boolean;\n    left: number;\n    top: number;\n    right: number;\n    bottom: number;\n  } {\n    /* tmp storage ─────────────────────────────────────────── */\n    const lPtr = this.memoryManager.malloc(4);\n    const tPtr = this.memoryManager.malloc(4);\n    const rPtr = this.memoryManager.malloc(4);\n    const bPtr = this.memoryManager.malloc(4);\n\n    const ok = !!this.pdfiumModule.EPDFAnnot_GetRectangleDifferences(\n      annotationPtr,\n      lPtr,\n      tPtr,\n      rPtr,\n      bPtr,\n    );\n\n    const pdf = this.pdfiumModule.pdfium;\n    const left = pdf.getValue(lPtr, 'float');\n    const top = pdf.getValue(tPtr, 'float');\n    const right = pdf.getValue(rPtr, 'float');\n    const bottom = pdf.getValue(bPtr, 'float');\n\n    /* cleanup ─────────────────────────────────────────────── */\n    this.memoryManager.free(lPtr);\n    this.memoryManager.free(tPtr);\n    this.memoryManager.free(rPtr);\n    this.memoryManager.free(bPtr);\n\n    return { ok, left, top, right, bottom };\n  }\n\n  /**\n   * Get the date of the annotation\n   *\n   * @param annotationPtr - pointer to an `FPDF_ANNOTATION`\n   * @param key - 'M' for modified date, 'CreationDate' for creation date\n   * @returns `Date` or `undefined` when PDFium can't read the date\n   */\n  private getAnnotationDate(annotationPtr: number, key: 'M' | 'CreationDate'): Date | undefined {\n    const raw = this.getAnnotString(annotationPtr, key);\n    return raw ? pdfDateToDate(raw) : undefined;\n  }\n\n  /**\n   * Set the date of the annotation\n   *\n   * @param annotationPtr - pointer to an `FPDF_ANNOTATION`\n   * @param key - 'M' for modified date, 'CreationDate' for creation date\n   * @param date - `Date` to set\n   * @returns `true` on success\n   */\n  private setAnnotationDate(annotationPtr: number, key: 'M' | 'CreationDate', date: Date): boolean {\n    const raw = dateToPdfDate(date);\n    return this.setAnnotString(annotationPtr, key, raw);\n  }\n\n  /**\n   * Get the date of the attachment\n   *\n   * @param attachmentPtr - pointer to an `FPDF_ATTACHMENT`\n   * @param key - 'ModDate' for modified date, 'CreationDate' for creation date\n   * @returns `Date` or `undefined` when PDFium can't read the date\n   */\n  private getAttachmentDate(\n    attachmentPtr: number,\n    key: 'ModDate' | 'CreationDate',\n  ): Date | undefined {\n    const raw = this.getAttachmentString(attachmentPtr, key);\n    return raw ? pdfDateToDate(raw) : undefined;\n  }\n\n  /**\n   * Set the date of the attachment\n   *\n   * @param attachmentPtr - pointer to an `FPDF_ATTACHMENT`\n   * @param key - 'ModDate' for modified date, 'CreationDate' for creation date\n   * @param date - `Date` to set\n   * @returns `true` on success\n   */\n  private setAttachmentDate(\n    attachmentPtr: number,\n    key: 'ModDate' | 'CreationDate',\n    date: Date,\n  ): boolean {\n    const raw = dateToPdfDate(date);\n    return this.setAttachmentString(attachmentPtr, key, raw);\n  }\n\n  /**\n   * Dash-pattern helper ( /BS → /D array, dashed borders only )\n   *\n   * Uses the two new PDFium helpers:\n   *   • `EPDFAnnot_GetBorderDashPatternCount`\n   *   • `EPDFAnnot_GetBorderDashPattern`\n   *\n   * @param  annotationPtr  pointer to an `FPDF_ANNOTATION`\n   * @returns `{ ok, pattern }`\n   *          • `ok`       – `true` when the annot is dashed *and* the array\n   *                          was retrieved successfully\n   *          • `pattern`  – numeric array of dash/space lengths (empty when `ok` is false)\n   */\n  private getBorderDashPattern(annotationPtr: number): { ok: boolean; pattern: number[] } {\n    const count = this.pdfiumModule.EPDFAnnot_GetBorderDashPatternCount(annotationPtr);\n    if (count === 0) {\n      return { ok: false, pattern: [] };\n    }\n\n    /* allocate `count` floats on the WASM heap */\n    const arrPtr = this.memoryManager.malloc(4 * count);\n    const okNative = !!this.pdfiumModule.EPDFAnnot_GetBorderDashPattern(\n      annotationPtr,\n      arrPtr,\n      count,\n    );\n\n    /* copy out */\n    const pattern: number[] = [];\n    if (okNative) {\n      const pdf = this.pdfiumModule.pdfium;\n      for (let i = 0; i < count; i++) {\n        pattern.push(pdf.getValue(arrPtr + 4 * i, 'float'));\n      }\n    }\n\n    this.memoryManager.free(arrPtr);\n    return { ok: okNative, pattern };\n  }\n\n  /**\n   * Write the /BS /D dash pattern array for an annotation border.\n   *\n   * @param annotationPtr Pointer to FPDF_ANNOTATION\n   * @param pattern       Array of dash/space lengths in *points* (e.g. [3, 2])\n   *                      Empty array clears the pattern (solid line).\n   * @returns true on success\n   *\n   * @private\n   */\n  private setBorderDashPattern(annotationPtr: number, pattern: number[]): boolean {\n    // Empty → clear the pattern (PDF spec: no /D = solid)\n    if (!pattern || pattern.length === 0) {\n      return this.pdfiumModule.EPDFAnnot_SetBorderDashPattern(annotationPtr, 0, 0);\n    }\n\n    // Validate and sanitize numbers (must be positive floats, spec allows 1–8 numbers typically)\n    const clean = pattern.map((n) => (Number.isFinite(n) && n > 0 ? n : 0)).filter((n) => n > 0);\n    if (clean.length === 0) {\n      // nothing valid → treat as clear\n      return this.pdfiumModule.EPDFAnnot_SetBorderDashPattern(annotationPtr, 0, 0);\n    }\n\n    const bytes = 4 * clean.length;\n    const bufPtr = this.memoryManager.malloc(bytes);\n    for (let i = 0; i < clean.length; i++) {\n      this.pdfiumModule.pdfium.setValue(bufPtr + 4 * i, clean[i], 'float');\n    }\n\n    const ok = !!this.pdfiumModule.EPDFAnnot_SetBorderDashPattern(\n      annotationPtr,\n      bufPtr,\n      clean.length,\n    );\n\n    this.memoryManager.free(bufPtr);\n    return ok;\n  }\n\n  /**\n   * Return the `/LE` array (start/end line-ending styles) for a LINE / POLYLINE annot.\n   *\n   * @param annotationPtr - pointer to an `FPDF_ANNOTATION`\n   * @returns `{ start, end }` or `undefined` when PDFium can't read them\n   *\n   * @private\n   */\n  private getLineEndings(annotationPtr: number): LineEndings | undefined {\n    const startPtr = this.memoryManager.malloc(4);\n    const endPtr = this.memoryManager.malloc(4);\n\n    const ok = !!this.pdfiumModule.EPDFAnnot_GetLineEndings(annotationPtr, startPtr, endPtr);\n    if (!ok) {\n      this.memoryManager.free(startPtr);\n      this.memoryManager.free(endPtr);\n      return undefined;\n    }\n\n    const start = this.pdfiumModule.pdfium.getValue(startPtr, 'i32');\n    const end = this.pdfiumModule.pdfium.getValue(endPtr, 'i32');\n\n    this.memoryManager.free(startPtr);\n    this.memoryManager.free(endPtr);\n\n    return { start, end };\n  }\n\n  /**\n   * Write the `/LE` array (start/end line-ending styles) for a LINE / POLYLINE annot.\n   * @param annotationPtr - pointer to an `FPDF_ANNOTATION`\n   * @param start - start line ending style\n   * @param end - end line ending style\n   * @returns `true` on success\n   */\n  private setLineEndings(\n    annotationPtr: number,\n    start: PdfAnnotationLineEnding,\n    end: PdfAnnotationLineEnding,\n  ): boolean {\n    return !!this.pdfiumModule.EPDFAnnot_SetLineEndings(annotationPtr, start, end);\n  }\n\n  /**\n   * Get the start and end points of a LINE / POLYLINE annot.\n   * @param annotationPtr - pointer to an `FPDF_ANNOTATION`\n   * @param page - logical page info object (`PdfPageObject`)\n   * @returns `{ start, end }` or `undefined` when PDFium can't read them\n   */\n  private getLinePoints(page: PdfPageObject, annotationPtr: number): LinePoints | undefined {\n    const startPtr = this.memoryManager.malloc(8); // FS_POINTF (x,y floats)\n    const endPtr = this.memoryManager.malloc(8);\n\n    const ok = this.pdfiumModule.FPDFAnnot_GetLine(annotationPtr, startPtr, endPtr);\n    if (!ok) {\n      this.memoryManager.free(startPtr);\n      this.memoryManager.free(endPtr);\n      return undefined;\n    }\n\n    const pdf = this.pdfiumModule.pdfium;\n\n    const sx = pdf.getValue(startPtr + 0, 'float');\n    const sy = pdf.getValue(startPtr + 4, 'float');\n    const ex = pdf.getValue(endPtr + 0, 'float');\n    const ey = pdf.getValue(endPtr + 4, 'float');\n\n    this.memoryManager.free(startPtr);\n    this.memoryManager.free(endPtr);\n\n    // page -> device using the new helper (handles rotation/scale consistently)\n    const start = this.convertPagePointToDevicePoint(page, { x: sx, y: sy });\n    const end = this.convertPagePointToDevicePoint(page, { x: ex, y: ey });\n\n    return { start, end };\n  }\n\n  /**\n   * Set the two end‑points of a **Line** annotation\n   * by writing a new /L array `[ x1 y1 x2 y2 ]`.\n   * @param page - logical page info object (`PdfPageObject`)\n   * @param annotPtr - pointer to the annotation whose line points are needed\n   * @param start - start point\n   * @param end - end point\n   * @returns true on success\n   */\n  private setLinePoints(\n    page: PdfPageObject,\n    annotPtr: number,\n    start: Position,\n    end: Position,\n  ): boolean {\n    const p1 = this.convertDevicePointToPagePoint(page, start);\n    const p2 = this.convertDevicePointToPagePoint(page, end);\n\n    if (!p1 || !p2) return false;\n\n    // pack as two FS_POINTF (x,y floats)\n    const buf = this.memoryManager.malloc(16);\n    const pdf = this.pdfiumModule.pdfium;\n    pdf.setValue(buf + 0, p1.x, 'float');\n    pdf.setValue(buf + 4, p1.y, 'float');\n    pdf.setValue(buf + 8, p2.x, 'float');\n    pdf.setValue(buf + 12, p2.y, 'float');\n\n    const ok = this.pdfiumModule.EPDFAnnot_SetLine(annotPtr, buf, buf + 8);\n    this.memoryManager.free(buf);\n    return !!ok;\n  }\n\n  /**\n   * Read `/QuadPoints` from any annotation and convert each quadrilateral to\n   * device-space coordinates.\n   *\n   * The four points are returned in natural reading order:\n   *   `p1 → p2` (top edge) and `p4 → p3` (bottom edge).\n   * This preserves the true shape for rotated / skewed text, whereas callers\n   * that only need axis-aligned boxes can collapse each quad themselves.\n   *\n   * @param page          - logical page info object (`PdfPageObject`)\n   * @param annotationPtr - pointer to the annotation whose quads are needed\n   * @returns Array of `Rect` objects (`[]` if the annotation has no quads)\n   *\n   * @private\n   */\n  private getQuadPointsAnno(page: PdfPageObject, annotationPtr: number): Rect[] {\n    const quadCount = this.pdfiumModule.FPDFAnnot_CountAttachmentPoints(annotationPtr);\n    if (quadCount === 0) return [];\n\n    const FS_QUADPOINTSF_SIZE = 8 * 4; // eight floats, 32 bytes\n    const quads: Quad[] = [];\n\n    for (let qi = 0; qi < quadCount; qi++) {\n      const quadPtr = this.memoryManager.malloc(FS_QUADPOINTSF_SIZE);\n\n      const ok = this.pdfiumModule.FPDFAnnot_GetAttachmentPoints(annotationPtr, qi, quadPtr);\n\n      if (ok) {\n        // read the eight floats\n        const xs: number[] = [];\n        const ys: number[] = [];\n        for (let i = 0; i < 4; i++) {\n          const base = quadPtr + i * 8; // 8 bytes per point (x+y)\n          xs.push(this.pdfiumModule.pdfium.getValue(base, 'float'));\n          ys.push(this.pdfiumModule.pdfium.getValue(base + 4, 'float'));\n        }\n\n        // convert to device-space\n        const p1 = this.convertPagePointToDevicePoint(page, { x: xs[0], y: ys[0] });\n        const p2 = this.convertPagePointToDevicePoint(page, { x: xs[1], y: ys[1] });\n        const p3 = this.convertPagePointToDevicePoint(page, { x: xs[2], y: ys[2] });\n        const p4 = this.convertPagePointToDevicePoint(page, { x: xs[3], y: ys[3] });\n\n        quads.push({ p1, p2, p3, p4 });\n      }\n\n      this.memoryManager.free(quadPtr);\n    }\n\n    return quads.map(quadToRect);\n  }\n\n  /**\n   * Set the quadrilaterals for a **Highlight / Underline / StrikeOut / Squiggly** markup annotation.\n   *\n   * @param page          - logical page info object (`PdfPageObject`)\n   * @param annotationPtr - pointer to the annotation whose quads are needed\n   * @param rects         - array of `Rect` objects (`[]` if the annotation has no quads)\n   * @returns `true` if the operation was successful\n   *\n   * @private\n   */\n  private syncQuadPointsAnno(page: PdfPageObject, annotPtr: number, rects: Rect[]): boolean {\n    const FS_QUADPOINTSF_SIZE = 8 * 4; // eight floats, 32 bytes\n    const pdf = this.pdfiumModule.pdfium;\n    const count = this.pdfiumModule.FPDFAnnot_CountAttachmentPoints(annotPtr);\n    const buf = this.memoryManager.malloc(FS_QUADPOINTSF_SIZE);\n\n    /** write one quad into `buf` in annotation space */\n    const writeQuad = (r: Rect) => {\n      const q = rectToQuad(r); // TL, TR, BR, BL\n      const p1 = this.convertDevicePointToPagePoint(page, q.p1);\n      const p2 = this.convertDevicePointToPagePoint(page, q.p2);\n      const p3 = this.convertDevicePointToPagePoint(page, q.p3); // BR\n      const p4 = this.convertDevicePointToPagePoint(page, q.p4); // BL\n\n      // PDF QuadPoints order: BL, BR, TL, TR (bottom-left, bottom-right, top-left, top-right)\n      pdf.setValue(buf + 0, p1.x, 'float'); // BL (bottom-left)\n      pdf.setValue(buf + 4, p1.y, 'float');\n\n      pdf.setValue(buf + 8, p2.x, 'float'); // BR (bottom-right)\n      pdf.setValue(buf + 12, p2.y, 'float');\n\n      pdf.setValue(buf + 16, p4.x, 'float'); // TL (top-left)\n      pdf.setValue(buf + 20, p4.y, 'float');\n\n      pdf.setValue(buf + 24, p3.x, 'float'); // TR (top-right)\n      pdf.setValue(buf + 28, p3.y, 'float');\n    };\n\n    /* ----------------------------------------------------------------------- */\n    /* 1. overwrite the quads that already exist                               */\n    const min = Math.min(count, rects.length);\n    for (let i = 0; i < min; i++) {\n      writeQuad(rects[i]);\n      if (!this.pdfiumModule.FPDFAnnot_SetAttachmentPoints(annotPtr, i, buf)) {\n        this.memoryManager.free(buf);\n        return false;\n      }\n    }\n\n    /* 2. append new quads if rects.length > count                             */\n    for (let i = count; i < rects.length; i++) {\n      writeQuad(rects[i]);\n      if (!this.pdfiumModule.FPDFAnnot_AppendAttachmentPoints(annotPtr, buf)) {\n        this.memoryManager.free(buf);\n        return false;\n      }\n    }\n\n    this.memoryManager.free(buf);\n    return true;\n  }\n\n  /**\n   * Redact text that intersects ANY of the provided **quads** (device-space).\n   * Returns `true` if the page changed. Always regenerates the page stream.\n   */\n  public redactTextInRects(\n    doc: PdfDocumentObject,\n    page: PdfPageObject,\n    rects: Rect[],\n    options?: PdfRedactTextOptions,\n  ): Task<boolean, PdfErrorReason> {\n    const { recurseForms = true, drawBlackBoxes = false } = options ?? {};\n\n    this.logger.debug(\n      'PDFiumEngine',\n      'Engine',\n      'redactTextInQuads',\n      doc.id,\n      page.index,\n      rects.length,\n    );\n    const label = 'RedactTextInQuads';\n    this.logger.perf('PDFiumEngine', 'Engine', label, 'Begin', `${doc.id}-${page.index}`);\n\n    const ctx = this.cache.getContext(doc.id);\n    if (!ctx) {\n      this.logger.perf('PDFiumEngine', 'Engine', label, 'End', `${doc.id}-${page.index}`);\n      return PdfTaskHelper.reject<boolean>({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    // sanitize inputs\n    const clean = (rects ?? []).filter(\n      (r) =>\n        r &&\n        Number.isFinite(r.origin?.x) &&\n        Number.isFinite(r.origin?.y) &&\n        Number.isFinite(r.size?.width) &&\n        Number.isFinite(r.size?.height) &&\n        r.size.width > 0 &&\n        r.size.height > 0,\n    );\n\n    if (clean.length === 0) {\n      this.logger.perf('PDFiumEngine', 'Engine', label, 'End', `${doc.id}-${page.index}`);\n      return PdfTaskHelper.resolve<boolean>(false);\n    }\n\n    const pageCtx = ctx.acquirePage(page.index);\n\n    // pack buffer → native call\n    const { ptr, count } = this.allocFSQuadsBufferFromRects(page, clean);\n    let ok = false;\n    try {\n      // If your wrapper exposes FPDFText_RedactInQuads, call that instead.\n      ok = !!this.pdfiumModule.EPDFText_RedactInQuads(\n        pageCtx.pagePtr,\n        ptr,\n        count,\n        recurseForms ? true : false,\n        drawBlackBoxes ? true : false,\n      );\n    } finally {\n      this.memoryManager.free(ptr);\n    }\n\n    if (ok) {\n      ok = !!this.pdfiumModule.FPDFPage_GenerateContent(pageCtx.pagePtr);\n    }\n\n    pageCtx.disposeImmediate();\n    this.logger.perf('PDFiumEngine', 'Engine', label, 'End', `${doc.id}-${page.index}`);\n\n    return PdfTaskHelper.resolve<boolean>(!!ok);\n  }\n\n  /** Pack device-space Rects into an FS_QUADPOINTSF[] buffer (page space). */\n  private allocFSQuadsBufferFromRects(page: PdfPageObject, rects: Rect[]) {\n    const STRIDE = 32; // 8 floats × 4 bytes\n    const count = rects.length;\n    const ptr = this.memoryManager.malloc(STRIDE * count);\n    const pdf = this.pdfiumModule.pdfium;\n\n    for (let i = 0; i < count; i++) {\n      const r = rects[i];\n      const q = rectToQuad(r); // TL, TR, BR, BL (device-space)\n\n      // Convert into PAGE USER SPACE (native expects page coords)\n      const p1 = this.convertDevicePointToPagePoint(page, q.p1); // TL\n      const p2 = this.convertDevicePointToPagePoint(page, q.p2); // TR\n      const p3 = this.convertDevicePointToPagePoint(page, q.p3); // BR\n      const p4 = this.convertDevicePointToPagePoint(page, q.p4); // BL\n\n      const base = ptr + i * STRIDE;\n\n      // Keep the exact mapping you used in syncQuadPointsAnno:\n      // PDF QuadPoints order comment says BL,BR,TL,TR – and you wrote:\n      pdf.setValue(base + 0, p1.x, 'float');\n      pdf.setValue(base + 4, p1.y, 'float');\n      pdf.setValue(base + 8, p2.x, 'float');\n      pdf.setValue(base + 12, p2.y, 'float');\n      pdf.setValue(base + 16, p4.x, 'float');\n      pdf.setValue(base + 20, p4.y, 'float');\n      pdf.setValue(base + 24, p3.x, 'float');\n      pdf.setValue(base + 28, p3.y, 'float');\n    }\n\n    return { ptr, count };\n  }\n\n  /**\n   * Read ink list from annotation\n   * @param page  - logical page info object (`PdfPageObject`)\n   * @param pagePtr - pointer to the page\n   * @param annotationPtr - pointer to the annotation whose ink list is needed\n   * @returns ink list\n   */\n  private getInkList(page: PdfPageObject, annotationPtr: number): PdfInkListObject[] {\n    const inkList: PdfInkListObject[] = [];\n    const pathCount = this.pdfiumModule.FPDFAnnot_GetInkListCount(annotationPtr);\n    if (pathCount <= 0) return inkList;\n\n    const pdf = this.pdfiumModule.pdfium;\n    const POINT_STRIDE = 8; // FS_POINTF: 2 floats (x,y) => 8 bytes\n\n    for (let i = 0; i < pathCount; i++) {\n      const points: Position[] = [];\n\n      const n = this.pdfiumModule.FPDFAnnot_GetInkListPath(annotationPtr, i, 0, 0);\n      if (n > 0) {\n        const buf = this.memoryManager.malloc(n * POINT_STRIDE);\n\n        // load FS_POINTF array (page-space)\n        this.pdfiumModule.FPDFAnnot_GetInkListPath(annotationPtr, i, buf, n);\n\n        // convert each point to device-space using your helper\n        for (let j = 0; j < n; j++) {\n          const base = buf + j * POINT_STRIDE;\n          const px = pdf.getValue(base + 0, 'float');\n          const py = pdf.getValue(base + 4, 'float');\n          const d = this.convertPagePointToDevicePoint(page, { x: px, y: py });\n          points.push({ x: d.x, y: d.y });\n        }\n\n        this.memoryManager.free(buf);\n      }\n\n      inkList.push({ points });\n    }\n\n    return inkList;\n  }\n\n  /**\n   * Add ink list to annotation\n   * @param page  - logical page info object (`PdfPageObject`)\n   * @param pagePtr - pointer to the page\n   * @param annotationPtr - pointer to the annotation whose ink list is needed\n   * @param inkList - ink list array of `PdfInkListObject`\n   * @returns `true` if the operation was successful\n   */\n  private setInkList(\n    page: PdfPageObject,\n    annotationPtr: number,\n    inkList: PdfInkListObject[],\n  ): boolean {\n    const pdf = this.pdfiumModule.pdfium;\n    const POINT_STRIDE = 8; // FS_POINTF: float x, float y\n\n    for (const stroke of inkList) {\n      const n = stroke.points.length;\n      if (n === 0) continue;\n\n      const buf = this.memoryManager.malloc(n * POINT_STRIDE);\n\n      // device -> page for each vertex\n      for (let i = 0; i < n; i++) {\n        const pDev = stroke.points[i];\n        const pPage = this.convertDevicePointToPagePoint(page, pDev);\n\n        pdf.setValue(buf + i * POINT_STRIDE + 0, pPage.x, 'float');\n        pdf.setValue(buf + i * POINT_STRIDE + 4, pPage.y, 'float');\n      }\n\n      const idx = this.pdfiumModule.FPDFAnnot_AddInkStroke(annotationPtr, buf, n);\n      this.memoryManager.free(buf);\n\n      if (idx === -1) {\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  /**\n   * Read pdf text annotation\n   * @param page  - pdf page infor\n   * @param annotationPtr - pointer to pdf annotation\n   * @param index  - index of annotation in the pdf page\n   * @returns pdf text annotation\n   *\n   * @private\n   */\n  private readPdfTextAnno(\n    page: PdfPageObject,\n    annotationPtr: number,\n    index: string,\n  ): PdfTextAnnoObject | undefined {\n    const custom = this.getAnnotCustom(annotationPtr);\n    const annoRect = this.readPageAnnoRect(annotationPtr);\n    const rect = this.convertPageRectToDeviceRect(page, annoRect);\n    const author = this.getAnnotString(annotationPtr, 'T');\n    const modified = this.getAnnotationDate(annotationPtr, 'M');\n    const created = this.getAnnotationDate(annotationPtr, 'CreationDate');\n    const contents = this.getAnnotString(annotationPtr, 'Contents') || '';\n    const state = this.getAnnotString(annotationPtr, 'State') as PdfAnnotationState;\n    const stateModel = this.getAnnotString(annotationPtr, 'StateModel') as PdfAnnotationStateModel;\n    const color = this.getAnnotationColor(annotationPtr);\n    const opacity = this.getAnnotationOpacity(annotationPtr);\n    const inReplyToId = this.getInReplyToId(annotationPtr);\n    const flags = this.getAnnotationFlags(annotationPtr);\n    const icon = this.getAnnotationIcon(annotationPtr);\n\n    return {\n      pageIndex: page.index,\n      custom,\n      id: index,\n      type: PdfAnnotationSubtype.TEXT,\n      flags,\n      contents,\n      color: color ?? '#FFFF00',\n      opacity,\n      rect,\n      inReplyToId,\n      author,\n      modified,\n      created,\n      state,\n      stateModel,\n      icon,\n    };\n  }\n\n  /**\n   * Read pdf freetext annotation\n   * @param page  - pdf page infor\n   * @param annotationPtr - pointer to pdf annotation\n   * @param index  - index of annotation in the pdf page\n   * @returns pdf freetext annotation\n   *\n   * @private\n   */\n  private readPdfFreeTextAnno(\n    page: PdfPageObject,\n    annotationPtr: number,\n    index: string,\n  ): PdfFreeTextAnnoObject | undefined {\n    const custom = this.getAnnotCustom(annotationPtr);\n    const annoRect = this.readPageAnnoRect(annotationPtr);\n    const rect = this.convertPageRectToDeviceRect(page, annoRect);\n    const contents = this.getAnnotString(annotationPtr, 'Contents') || '';\n    const author = this.getAnnotString(annotationPtr, 'T');\n    const modified = this.getAnnotationDate(annotationPtr, 'M');\n    const created = this.getAnnotationDate(annotationPtr, 'CreationDate');\n    const defaultStyle = this.getAnnotString(annotationPtr, 'DS');\n    const da = this.getAnnotationDefaultAppearance(annotationPtr);\n    const backgroundColor = this.getAnnotationColor(annotationPtr);\n    const textAlign = this.getAnnotationTextAlignment(annotationPtr);\n    const verticalAlign = this.getAnnotationVerticalAlignment(annotationPtr);\n    const opacity = this.getAnnotationOpacity(annotationPtr);\n    const richContent = this.getAnnotRichContent(annotationPtr);\n    const flags = this.getAnnotationFlags(annotationPtr);\n\n    return {\n      pageIndex: page.index,\n      custom,\n      id: index,\n      type: PdfAnnotationSubtype.FREETEXT,\n      fontFamily: da?.fontFamily ?? PdfStandardFont.Unknown,\n      fontSize: da?.fontSize ?? 12,\n      fontColor: da?.fontColor ?? '#000000',\n      verticalAlign,\n      backgroundColor,\n      flags,\n      opacity,\n      textAlign,\n      defaultStyle,\n      richContent,\n      contents,\n      author,\n      modified,\n      created,\n      rect,\n    };\n  }\n\n  /**\n   * Read pdf link annotation from pdf document\n   * @param page  - pdf page infor\n   * @param docPtr - pointer to pdf document object\n   * @param annotationPtr - pointer to pdf annotation\n   * @param index  - index of annotation in the pdf page\n   * @returns pdf link annotation\n   *\n   * @private\n   */\n  private readPdfLinkAnno(\n    page: PdfPageObject,\n    docPtr: number,\n    annotationPtr: number,\n    index: string,\n  ): PdfLinkAnnoObject | undefined {\n    const custom = this.getAnnotCustom(annotationPtr);\n    const linkPtr = this.pdfiumModule.FPDFAnnot_GetLink(annotationPtr);\n    if (!linkPtr) {\n      return;\n    }\n\n    const annoRect = this.readPageAnnoRect(annotationPtr);\n    const rect = this.convertPageRectToDeviceRect(page, annoRect);\n    const author = this.getAnnotString(annotationPtr, 'T');\n    const modified = this.getAnnotationDate(annotationPtr, 'M');\n    const created = this.getAnnotationDate(annotationPtr, 'CreationDate');\n    const flags = this.getAnnotationFlags(annotationPtr);\n\n    const target = this.readPdfLinkAnnoTarget(\n      docPtr,\n      () => {\n        return this.pdfiumModule.FPDFLink_GetAction(linkPtr);\n      },\n      () => {\n        return this.pdfiumModule.FPDFLink_GetDest(docPtr, linkPtr);\n      },\n    );\n\n    return {\n      pageIndex: page.index,\n      custom,\n      id: index,\n      type: PdfAnnotationSubtype.LINK,\n      flags,\n      target,\n      rect,\n      author,\n      modified,\n      created,\n    };\n  }\n\n  /**\n   * Read pdf widget annotation\n   * @param page  - pdf page infor\n   * @param annotationPtr - pointer to pdf annotation\n   * @param formHandle - form handle\n   * @param index  - index of annotation in the pdf page\n   * @returns pdf widget annotation\n   *\n   * @private\n   */\n  private readPdfWidgetAnno(\n    page: PdfPageObject,\n    annotationPtr: number,\n    formHandle: number,\n    index: string,\n  ): PdfWidgetAnnoObject | undefined {\n    const custom = this.getAnnotCustom(annotationPtr);\n    const pageRect = this.readPageAnnoRect(annotationPtr);\n    const rect = this.convertPageRectToDeviceRect(page, pageRect);\n    const author = this.getAnnotString(annotationPtr, 'T');\n    const modified = this.getAnnotationDate(annotationPtr, 'M');\n    const created = this.getAnnotationDate(annotationPtr, 'CreationDate');\n    const flags = this.getAnnotationFlags(annotationPtr);\n    const field = this.readPdfWidgetAnnoField(formHandle, annotationPtr);\n\n    return {\n      pageIndex: page.index,\n      custom,\n      id: index,\n      type: PdfAnnotationSubtype.WIDGET,\n      flags,\n      rect,\n      field,\n      author,\n      modified,\n      created,\n    };\n  }\n\n  /**\n   * Read pdf file attachment annotation\n   * @param page  - pdf page infor\n   * @param annotationPtr - pointer to pdf annotation\n   * @param index  - index of annotation in the pdf page\n   * @returns pdf file attachment annotation\n   *\n   * @private\n   */\n  private readPdfFileAttachmentAnno(\n    page: PdfPageObject,\n    annotationPtr: number,\n    index: string,\n  ): PdfFileAttachmentAnnoObject | undefined {\n    const custom = this.getAnnotCustom(annotationPtr);\n    const pageRect = this.readPageAnnoRect(annotationPtr);\n    const rect = this.convertPageRectToDeviceRect(page, pageRect);\n    const author = this.getAnnotString(annotationPtr, 'T');\n    const modified = this.getAnnotationDate(annotationPtr, 'M');\n    const created = this.getAnnotationDate(annotationPtr, 'CreationDate');\n    const flags = this.getAnnotationFlags(annotationPtr);\n\n    return {\n      pageIndex: page.index,\n      custom,\n      id: index,\n      type: PdfAnnotationSubtype.FILEATTACHMENT,\n      flags,\n      rect,\n      author,\n      modified,\n      created,\n    };\n  }\n\n  /**\n   * Read pdf ink annotation\n   * @param page  - pdf page infor\n   * @param annotationPtr - pointer to pdf annotation\n   * @param index  - index of annotation in the pdf page\n   * @returns pdf ink annotation\n   *\n   * @private\n   */\n  private readPdfInkAnno(\n    page: PdfPageObject,\n    annotationPtr: number,\n    index: string,\n  ): PdfInkAnnoObject | undefined {\n    const custom = this.getAnnotCustom(annotationPtr);\n    const pageRect = this.readPageAnnoRect(annotationPtr);\n    const rect = this.convertPageRectToDeviceRect(page, pageRect);\n    const author = this.getAnnotString(annotationPtr, 'T');\n    const modified = this.getAnnotationDate(annotationPtr, 'M');\n    const created = this.getAnnotationDate(annotationPtr, 'CreationDate');\n    const color = this.getAnnotationColor(annotationPtr);\n    const opacity = this.getAnnotationOpacity(annotationPtr);\n    const { width: strokeWidth } = this.getBorderStyle(annotationPtr);\n    const inkList = this.getInkList(page, annotationPtr);\n    const blendMode = this.pdfiumModule.EPDFAnnot_GetBlendMode(annotationPtr);\n    const intent = this.getAnnotIntent(annotationPtr);\n    const flags = this.getAnnotationFlags(annotationPtr);\n    const contents = this.getAnnotString(annotationPtr, 'Contents') || '';\n\n    return {\n      pageIndex: page.index,\n      custom,\n      id: index,\n      type: PdfAnnotationSubtype.INK,\n      ...(intent && { intent }),\n      contents,\n      blendMode,\n      flags,\n      color: color ?? '#FF0000',\n      opacity,\n      strokeWidth: strokeWidth === 0 ? 1 : strokeWidth,\n      rect,\n      inkList,\n      author,\n      modified,\n      created,\n    };\n  }\n\n  /**\n   * Read pdf polygon annotation\n   * @param page  - pdf page infor\n   * @param annotationPtr - pointer to pdf annotation\n   * @param index  - index of annotation in the pdf page\n   * @returns pdf polygon annotation\n   *\n   * @private\n   */\n  private readPdfPolygonAnno(\n    page: PdfPageObject,\n    annotationPtr: number,\n    index: string,\n  ): PdfPolygonAnnoObject | undefined {\n    const custom = this.getAnnotCustom(annotationPtr);\n    const pageRect = this.readPageAnnoRect(annotationPtr);\n    const rect = this.convertPageRectToDeviceRect(page, pageRect);\n    const author = this.getAnnotString(annotationPtr, 'T');\n    const modified = this.getAnnotationDate(annotationPtr, 'M');\n    const created = this.getAnnotationDate(annotationPtr, 'CreationDate');\n    const vertices = this.readPdfAnnoVertices(page, annotationPtr);\n    const contents = this.getAnnotString(annotationPtr, 'Contents') || '';\n    const flags = this.getAnnotationFlags(annotationPtr);\n    const strokeColor = this.getAnnotationColor(annotationPtr);\n    const interiorColor = this.getAnnotationColor(\n      annotationPtr,\n      PdfAnnotationColorType.InteriorColor,\n    );\n    const opacity = this.getAnnotationOpacity(annotationPtr);\n    let { style: strokeStyle, width: strokeWidth } = this.getBorderStyle(annotationPtr);\n\n    let strokeDashArray: number[] | undefined;\n    if (strokeStyle === PdfAnnotationBorderStyle.DASHED) {\n      const { ok, pattern } = this.getBorderDashPattern(annotationPtr);\n      if (ok) {\n        strokeDashArray = pattern;\n      }\n    }\n\n    // ▼––– Remove redundant closing vertex for polygons ––––––––––––––––––––––\n    if (vertices.length > 1) {\n      const first = vertices[0];\n      const last = vertices[vertices.length - 1];\n      if (first.x === last.x && first.y === last.y) {\n        vertices.pop();\n      }\n    }\n\n    return {\n      pageIndex: page.index,\n      custom,\n      id: index,\n      type: PdfAnnotationSubtype.POLYGON,\n      contents,\n      flags,\n      strokeColor: strokeColor ?? '#FF0000',\n      color: interiorColor ?? 'transparent',\n      opacity,\n      strokeWidth: strokeWidth === 0 ? 1 : strokeWidth,\n      strokeStyle,\n      strokeDashArray,\n      rect,\n      vertices,\n      author,\n      modified,\n      created,\n    };\n  }\n\n  /**\n   * Read pdf polyline annotation\n   * @param page  - pdf page infor\n   * @param annotationPtr - pointer to pdf annotation\n   * @param index  - index of annotation in the pdf page\n   * @returns pdf polyline annotation\n   *\n   * @private\n   */\n  private readPdfPolylineAnno(\n    page: PdfPageObject,\n    annotationPtr: number,\n    index: string,\n  ): PdfPolylineAnnoObject | undefined {\n    const custom = this.getAnnotCustom(annotationPtr);\n    const pageRect = this.readPageAnnoRect(annotationPtr);\n    const rect = this.convertPageRectToDeviceRect(page, pageRect);\n    const author = this.getAnnotString(annotationPtr, 'T');\n    const modified = this.getAnnotationDate(annotationPtr, 'M');\n    const created = this.getAnnotationDate(annotationPtr, 'CreationDate');\n    const vertices = this.readPdfAnnoVertices(page, annotationPtr);\n    const contents = this.getAnnotString(annotationPtr, 'Contents') || '';\n    const strokeColor = this.getAnnotationColor(annotationPtr);\n    const flags = this.getAnnotationFlags(annotationPtr);\n    const interiorColor = this.getAnnotationColor(\n      annotationPtr,\n      PdfAnnotationColorType.InteriorColor,\n    );\n    const opacity = this.getAnnotationOpacity(annotationPtr);\n    let { style: strokeStyle, width: strokeWidth } = this.getBorderStyle(annotationPtr);\n\n    let strokeDashArray: number[] | undefined;\n    if (strokeStyle === PdfAnnotationBorderStyle.DASHED) {\n      const { ok, pattern } = this.getBorderDashPattern(annotationPtr);\n      if (ok) {\n        strokeDashArray = pattern;\n      }\n    }\n    const lineEndings = this.getLineEndings(annotationPtr);\n\n    return {\n      pageIndex: page.index,\n      custom,\n      id: index,\n      type: PdfAnnotationSubtype.POLYLINE,\n      contents,\n      flags,\n      strokeColor: strokeColor ?? '#FF0000',\n      color: interiorColor ?? 'transparent',\n      opacity,\n      strokeWidth: strokeWidth === 0 ? 1 : strokeWidth,\n      strokeStyle,\n      strokeDashArray,\n      lineEndings,\n      rect,\n      vertices,\n      author,\n      modified,\n      created,\n    };\n  }\n\n  /**\n   * Read pdf line annotation\n   * @param page  - pdf page infor\n   * @param annotationPtr - pointer to pdf annotation\n   * @param index  - index of annotation in the pdf page\n   * @returns pdf line annotation\n   *\n   * @private\n   */\n  private readPdfLineAnno(\n    page: PdfPageObject,\n    annotationPtr: number,\n    index: string,\n  ): PdfLineAnnoObject | undefined {\n    const custom = this.getAnnotCustom(annotationPtr);\n    const pageRect = this.readPageAnnoRect(annotationPtr);\n    const rect = this.convertPageRectToDeviceRect(page, pageRect);\n    const author = this.getAnnotString(annotationPtr, 'T');\n    const modified = this.getAnnotationDate(annotationPtr, 'M');\n    const created = this.getAnnotationDate(annotationPtr, 'CreationDate');\n    const linePoints = this.getLinePoints(page, annotationPtr);\n    const lineEndings = this.getLineEndings(annotationPtr);\n    const contents = this.getAnnotString(annotationPtr, 'Contents') || '';\n    const strokeColor = this.getAnnotationColor(annotationPtr);\n    const flags = this.getAnnotationFlags(annotationPtr);\n    const interiorColor = this.getAnnotationColor(\n      annotationPtr,\n      PdfAnnotationColorType.InteriorColor,\n    );\n    const opacity = this.getAnnotationOpacity(annotationPtr);\n    let { style: strokeStyle, width: strokeWidth } = this.getBorderStyle(annotationPtr);\n\n    let strokeDashArray: number[] | undefined;\n    if (strokeStyle === PdfAnnotationBorderStyle.DASHED) {\n      const { ok, pattern } = this.getBorderDashPattern(annotationPtr);\n      if (ok) {\n        strokeDashArray = pattern;\n      }\n    }\n\n    return {\n      pageIndex: page.index,\n      custom,\n      id: index,\n      type: PdfAnnotationSubtype.LINE,\n      flags,\n      rect,\n      contents,\n      strokeWidth: strokeWidth === 0 ? 1 : strokeWidth,\n      strokeStyle,\n      strokeDashArray,\n      strokeColor: strokeColor ?? '#FF0000',\n      color: interiorColor ?? 'transparent',\n      opacity,\n      linePoints: linePoints || { start: { x: 0, y: 0 }, end: { x: 0, y: 0 } },\n      lineEndings: lineEndings || {\n        start: PdfAnnotationLineEnding.None,\n        end: PdfAnnotationLineEnding.None,\n      },\n      author,\n      modified,\n      created,\n    };\n  }\n\n  /**\n   * Read pdf highlight annotation\n   * @param page  - pdf page infor\n   * @param annotationPtr - pointer to pdf annotation\n   * @param index  - index of annotation in the pdf page\n   * @returns pdf highlight annotation\n   *\n   * @private\n   */\n  private readPdfHighlightAnno(\n    page: PdfPageObject,\n    annotationPtr: number,\n    index: string,\n  ): PdfHighlightAnnoObject | undefined {\n    const custom = this.getAnnotCustom(annotationPtr);\n    const pageRect = this.readPageAnnoRect(annotationPtr);\n    const rect = this.convertPageRectToDeviceRect(page, pageRect);\n    const segmentRects = this.getQuadPointsAnno(page, annotationPtr);\n    const color = this.getAnnotationColor(annotationPtr);\n    const opacity = this.getAnnotationOpacity(annotationPtr);\n    const blendMode = this.pdfiumModule.EPDFAnnot_GetBlendMode(annotationPtr);\n\n    const author = this.getAnnotString(annotationPtr, 'T');\n    const modified = this.getAnnotationDate(annotationPtr, 'M');\n    const created = this.getAnnotationDate(annotationPtr, 'CreationDate');\n    const contents = this.getAnnotString(annotationPtr, 'Contents') || '';\n    const flags = this.getAnnotationFlags(annotationPtr);\n\n    return {\n      pageIndex: page.index,\n      custom,\n      id: index,\n      blendMode,\n      type: PdfAnnotationSubtype.HIGHLIGHT,\n      rect,\n      flags,\n      contents,\n      segmentRects,\n      color: color ?? '#FFFF00',\n      opacity,\n      author,\n      modified,\n      created,\n    };\n  }\n\n  /**\n   * Read pdf underline annotation\n   * @param page  - pdf page infor\n   * @param annotationPtr - pointer to pdf annotation\n   * @param index  - index of annotation in the pdf page\n   * @returns pdf underline annotation\n   *\n   * @private\n   */\n  private readPdfUnderlineAnno(\n    page: PdfPageObject,\n    annotationPtr: number,\n    index: string,\n  ): PdfUnderlineAnnoObject | undefined {\n    const custom = this.getAnnotCustom(annotationPtr);\n    const pageRect = this.readPageAnnoRect(annotationPtr);\n    const rect = this.convertPageRectToDeviceRect(page, pageRect);\n    const author = this.getAnnotString(annotationPtr, 'T');\n    const modified = this.getAnnotationDate(annotationPtr, 'M');\n    const created = this.getAnnotationDate(annotationPtr, 'CreationDate');\n    const segmentRects = this.getQuadPointsAnno(page, annotationPtr);\n    const contents = this.getAnnotString(annotationPtr, 'Contents') || '';\n    const color = this.getAnnotationColor(annotationPtr);\n    const opacity = this.getAnnotationOpacity(annotationPtr);\n    const blendMode = this.pdfiumModule.EPDFAnnot_GetBlendMode(annotationPtr);\n    const flags = this.getAnnotationFlags(annotationPtr);\n\n    return {\n      pageIndex: page.index,\n      custom,\n      id: index,\n      blendMode,\n      type: PdfAnnotationSubtype.UNDERLINE,\n      rect,\n      flags,\n      contents,\n      segmentRects,\n      color: color ?? '#FF0000',\n      opacity,\n      author,\n      modified,\n      created,\n    };\n  }\n\n  /**\n   * Read strikeout annotation\n   * @param page  - pdf page infor\n   * @param annotationPtr - pointer to pdf annotation\n   * @param index  - index of annotation in the pdf page\n   * @returns pdf strikeout annotation\n   *\n   * @private\n   */\n  private readPdfStrikeOutAnno(\n    page: PdfPageObject,\n    annotationPtr: number,\n    index: string,\n  ): PdfStrikeOutAnnoObject | undefined {\n    const custom = this.getAnnotCustom(annotationPtr);\n    const pageRect = this.readPageAnnoRect(annotationPtr);\n    const rect = this.convertPageRectToDeviceRect(page, pageRect);\n    const author = this.getAnnotString(annotationPtr, 'T');\n    const modified = this.getAnnotationDate(annotationPtr, 'M');\n    const created = this.getAnnotationDate(annotationPtr, 'CreationDate');\n    const segmentRects = this.getQuadPointsAnno(page, annotationPtr);\n    const contents = this.getAnnotString(annotationPtr, 'Contents') || '';\n    const color = this.getAnnotationColor(annotationPtr);\n    const opacity = this.getAnnotationOpacity(annotationPtr);\n    const blendMode = this.pdfiumModule.EPDFAnnot_GetBlendMode(annotationPtr);\n    const flags = this.getAnnotationFlags(annotationPtr);\n\n    return {\n      pageIndex: page.index,\n      custom,\n      id: index,\n      blendMode,\n      type: PdfAnnotationSubtype.STRIKEOUT,\n      flags,\n      rect,\n      contents,\n      segmentRects,\n      color: color ?? '#FF0000',\n      opacity,\n      author,\n      modified,\n      created,\n    };\n  }\n\n  /**\n   * Read pdf squiggly annotation\n   * @param page  - pdf page infor\n   * @param annotationPtr - pointer to pdf annotation\n   * @param index  - index of annotation in the pdf page\n   * @returns pdf squiggly annotation\n   *\n   * @private\n   */\n  private readPdfSquigglyAnno(\n    page: PdfPageObject,\n    annotationPtr: number,\n    index: string,\n  ): PdfSquigglyAnnoObject | undefined {\n    const custom = this.getAnnotCustom(annotationPtr);\n    const pageRect = this.readPageAnnoRect(annotationPtr);\n    const rect = this.convertPageRectToDeviceRect(page, pageRect);\n    const author = this.getAnnotString(annotationPtr, 'T');\n    const modified = this.getAnnotationDate(annotationPtr, 'M');\n    const created = this.getAnnotationDate(annotationPtr, 'CreationDate');\n    const segmentRects = this.getQuadPointsAnno(page, annotationPtr);\n    const contents = this.getAnnotString(annotationPtr, 'Contents') || '';\n    const color = this.getAnnotationColor(annotationPtr);\n    const opacity = this.getAnnotationOpacity(annotationPtr);\n    const blendMode = this.pdfiumModule.EPDFAnnot_GetBlendMode(annotationPtr);\n    const flags = this.getAnnotationFlags(annotationPtr);\n\n    return {\n      pageIndex: page.index,\n      custom,\n      id: index,\n      blendMode,\n      type: PdfAnnotationSubtype.SQUIGGLY,\n      rect,\n      flags,\n      contents,\n      segmentRects,\n      color: color ?? '#FF0000',\n      opacity,\n      author,\n      modified,\n      created,\n    };\n  }\n\n  /**\n   * Read pdf caret annotation\n   * @param page  - pdf page infor\n   * @param annotationPtr - pointer to pdf annotation\n   * @param index  - index of annotation in the pdf page\n   * @returns pdf caret annotation\n   *\n   * @private\n   */\n  private readPdfCaretAnno(\n    page: PdfPageObject,\n    annotationPtr: number,\n    index: string,\n  ): PdfCaretAnnoObject | undefined {\n    const custom = this.getAnnotCustom(annotationPtr);\n    const pageRect = this.readPageAnnoRect(annotationPtr);\n    const rect = this.convertPageRectToDeviceRect(page, pageRect);\n    const author = this.getAnnotString(annotationPtr, 'T');\n    const modified = this.getAnnotationDate(annotationPtr, 'M');\n    const created = this.getAnnotationDate(annotationPtr, 'CreationDate');\n    const flags = this.getAnnotationFlags(annotationPtr);\n\n    return {\n      pageIndex: page.index,\n      custom,\n      id: index,\n      type: PdfAnnotationSubtype.CARET,\n      rect,\n      flags,\n      author,\n      modified,\n      created,\n    };\n  }\n\n  /**\n   * Read pdf stamp annotation\n   * @param page  - pdf page infor\n   * @param annotationPtr - pointer to pdf annotation\n   * @param index  - index of annotation in the pdf page\n   * @returns pdf stamp annotation\n   *\n   * @private\n   */\n  private readPdfStampAnno(\n    page: PdfPageObject,\n    annotationPtr: number,\n    index: string,\n  ): PdfStampAnnoObject | undefined {\n    const custom = this.getAnnotCustom(annotationPtr);\n    const pageRect = this.readPageAnnoRect(annotationPtr);\n    const rect = this.convertPageRectToDeviceRect(page, pageRect);\n    const author = this.getAnnotString(annotationPtr, 'T');\n    const modified = this.getAnnotationDate(annotationPtr, 'M');\n    const created = this.getAnnotationDate(annotationPtr, 'CreationDate');\n    const flags = this.getAnnotationFlags(annotationPtr);\n    const contents = this.getAnnotString(annotationPtr, 'Contents') || '';\n\n    return {\n      pageIndex: page.index,\n      custom,\n      id: index,\n      type: PdfAnnotationSubtype.STAMP,\n      contents,\n      rect,\n      author,\n      modified,\n      created,\n      flags,\n    };\n  }\n\n  /**\n   * Read pdf object in pdf page\n   * @param pageObjectPtr  - pointer to pdf object in page\n   * @returns pdf object in page\n   *\n   * @private\n   */\n  private readPdfPageObject(pageObjectPtr: number) {\n    const type = this.pdfiumModule.FPDFPageObj_GetType(pageObjectPtr) as PdfPageObjectType;\n    switch (type) {\n      case PdfPageObjectType.PATH:\n        return this.readPathObject(pageObjectPtr);\n      case PdfPageObjectType.IMAGE:\n        return this.readImageObject(pageObjectPtr);\n      case PdfPageObjectType.FORM:\n        return this.readFormObject(pageObjectPtr);\n    }\n  }\n\n  /**\n   * Read pdf path object\n   * @param pathObjectPtr  - pointer to pdf path object in page\n   * @returns pdf path object\n   *\n   * @private\n   */\n  private readPathObject(pathObjectPtr: number): PdfPathObject {\n    const segmentCount = this.pdfiumModule.FPDFPath_CountSegments(pathObjectPtr);\n\n    const leftPtr = this.memoryManager.malloc(4);\n    const bottomPtr = this.memoryManager.malloc(4);\n    const rightPtr = this.memoryManager.malloc(4);\n    const topPtr = this.memoryManager.malloc(4);\n    this.pdfiumModule.FPDFPageObj_GetBounds(pathObjectPtr, leftPtr, bottomPtr, rightPtr, topPtr);\n    const left = this.pdfiumModule.pdfium.getValue(leftPtr, 'float');\n    const bottom = this.pdfiumModule.pdfium.getValue(bottomPtr, 'float');\n    const right = this.pdfiumModule.pdfium.getValue(rightPtr, 'float');\n    const top = this.pdfiumModule.pdfium.getValue(topPtr, 'float');\n    const bounds = { left, bottom, right, top };\n    this.memoryManager.free(leftPtr);\n    this.memoryManager.free(bottomPtr);\n    this.memoryManager.free(rightPtr);\n    this.memoryManager.free(topPtr);\n    const segments: PdfSegmentObject[] = [];\n    for (let i = 0; i < segmentCount; i++) {\n      const segment = this.readPdfSegment(pathObjectPtr, i);\n      segments.push(segment);\n    }\n\n    const matrix = this.readPdfPageObjectTransformMatrix(pathObjectPtr);\n\n    return {\n      type: PdfPageObjectType.PATH,\n      bounds,\n      segments,\n      matrix,\n    };\n  }\n\n  /**\n   * Read segment of pdf path object\n   * @param annotationObjectPtr - pointer to pdf path object\n   * @param segmentIndex - index of segment\n   * @returns pdf segment in pdf path\n   *\n   * @private\n   */\n  private readPdfSegment(annotationObjectPtr: number, segmentIndex: number): PdfSegmentObject {\n    const segmentPtr = this.pdfiumModule.FPDFPath_GetPathSegment(annotationObjectPtr, segmentIndex);\n    const segmentType = this.pdfiumModule.FPDFPathSegment_GetType(segmentPtr);\n    const isClosed = this.pdfiumModule.FPDFPathSegment_GetClose(segmentPtr);\n    const pointXPtr = this.memoryManager.malloc(4);\n    const pointYPtr = this.memoryManager.malloc(4);\n    this.pdfiumModule.FPDFPathSegment_GetPoint(segmentPtr, pointXPtr, pointYPtr);\n    const pointX = this.pdfiumModule.pdfium.getValue(pointXPtr, 'float');\n    const pointY = this.pdfiumModule.pdfium.getValue(pointYPtr, 'float');\n    this.memoryManager.free(pointXPtr);\n    this.memoryManager.free(pointYPtr);\n\n    return {\n      type: segmentType,\n      point: { x: pointX, y: pointY },\n      isClosed,\n    };\n  }\n\n  /**\n   * Read pdf image object from pdf document\n   * @param pageObjectPtr  - pointer to pdf image object in page\n   * @returns pdf image object\n   *\n   * @private\n   */\n  private readImageObject(imageObjectPtr: number): PdfImageObject {\n    const bitmapPtr = this.pdfiumModule.FPDFImageObj_GetBitmap(imageObjectPtr);\n    const bitmapBufferPtr = this.pdfiumModule.FPDFBitmap_GetBuffer(bitmapPtr);\n    const bitmapWidth = this.pdfiumModule.FPDFBitmap_GetWidth(bitmapPtr);\n    const bitmapHeight = this.pdfiumModule.FPDFBitmap_GetHeight(bitmapPtr);\n    const format = this.pdfiumModule.FPDFBitmap_GetFormat(bitmapPtr) as BitmapFormat;\n\n    const pixelCount = bitmapWidth * bitmapHeight;\n    const bytesPerPixel = 4;\n    const array = new Uint8ClampedArray(pixelCount * bytesPerPixel);\n    for (let i = 0; i < pixelCount; i++) {\n      switch (format) {\n        case BitmapFormat.Bitmap_BGR:\n          {\n            const blue = this.pdfiumModule.pdfium.getValue(bitmapBufferPtr + i * 3, 'i8');\n            const green = this.pdfiumModule.pdfium.getValue(bitmapBufferPtr + i * 3 + 1, 'i8');\n            const red = this.pdfiumModule.pdfium.getValue(bitmapBufferPtr + i * 3 + 2, 'i8');\n            array[i * bytesPerPixel] = red;\n            array[i * bytesPerPixel + 1] = green;\n            array[i * bytesPerPixel + 2] = blue;\n            array[i * bytesPerPixel + 3] = 100;\n          }\n          break;\n      }\n    }\n\n    const imageData = new ImageData(array, bitmapWidth, bitmapHeight);\n    const matrix = this.readPdfPageObjectTransformMatrix(imageObjectPtr);\n\n    return {\n      type: PdfPageObjectType.IMAGE,\n      imageData,\n      matrix,\n    };\n  }\n\n  /**\n   * Read form object from pdf document\n   * @param formObjectPtr  - pointer to pdf form object in page\n   * @returns pdf form object\n   *\n   * @private\n   */\n  private readFormObject(formObjectPtr: number): PdfFormObject {\n    const objectCount = this.pdfiumModule.FPDFFormObj_CountObjects(formObjectPtr);\n    const objects: (PdfFormObject | PdfImageObject | PdfPathObject)[] = [];\n    for (let i = 0; i < objectCount; i++) {\n      const pageObjectPtr = this.pdfiumModule.FPDFFormObj_GetObject(formObjectPtr, i);\n      const pageObj = this.readPdfPageObject(pageObjectPtr);\n      if (pageObj) {\n        objects.push(pageObj);\n      }\n    }\n    const matrix = this.readPdfPageObjectTransformMatrix(formObjectPtr);\n\n    return {\n      type: PdfPageObjectType.FORM,\n      objects,\n      matrix,\n    };\n  }\n\n  /**\n   * Read pdf object in pdf page\n   * @param pageObjectPtr  - pointer to pdf object in page\n   * @returns pdf object in page\n   *\n   * @private\n   */\n  private readPdfPageObjectTransformMatrix(pageObjectPtr: number): PdfTransformMatrix {\n    const matrixPtr = this.memoryManager.malloc(4 * 6);\n    if (this.pdfiumModule.FPDFPageObj_GetMatrix(pageObjectPtr, matrixPtr)) {\n      const a = this.pdfiumModule.pdfium.getValue(matrixPtr, 'float');\n      const b = this.pdfiumModule.pdfium.getValue(matrixPtr + 4, 'float');\n      const c = this.pdfiumModule.pdfium.getValue(matrixPtr + 8, 'float');\n      const d = this.pdfiumModule.pdfium.getValue(matrixPtr + 12, 'float');\n      const e = this.pdfiumModule.pdfium.getValue(matrixPtr + 16, 'float');\n      const f = this.pdfiumModule.pdfium.getValue(matrixPtr + 20, 'float');\n      this.memoryManager.free(matrixPtr);\n\n      return { a, b, c, d, e, f };\n    }\n\n    this.memoryManager.free(matrixPtr);\n\n    return { a: 1, b: 0, c: 0, d: 1, e: 0, f: 0 };\n  }\n\n  /**\n   * Read contents of a stamp annotation\n   * @param annotationPtr - pointer to pdf annotation\n   * @returns contents of the stamp annotation\n   *\n   * @private\n   */\n  private readStampAnnotationContents(annotationPtr: number): PdfStampAnnoObjectContents {\n    const contents: PdfStampAnnoObjectContents = [];\n\n    const objectCount = this.pdfiumModule.FPDFAnnot_GetObjectCount(annotationPtr);\n    for (let i = 0; i < objectCount; i++) {\n      const annotationObjectPtr = this.pdfiumModule.FPDFAnnot_GetObject(annotationPtr, i);\n\n      const pageObj = this.readPdfPageObject(annotationObjectPtr);\n      if (pageObj) {\n        contents.push(pageObj);\n      }\n    }\n\n    return contents;\n  }\n\n  /**\n   * Return the stroke-width declared in the annotation’s /Border or /BS entry.\n   * Falls back to 1 pt when nothing is defined.\n   *\n   * @param annotationPtr - pointer to pdf annotation\n   * @returns stroke-width\n   *\n   * @private\n   */\n  private getStrokeWidth(annotationPtr: number): number {\n    // FPDFAnnot_GetBorder(annot, &hRadius, &vRadius, &borderWidth)\n    const hPtr = this.memoryManager.malloc(4);\n    const vPtr = this.memoryManager.malloc(4);\n    const wPtr = this.memoryManager.malloc(4);\n\n    const ok = this.pdfiumModule.FPDFAnnot_GetBorder(annotationPtr, hPtr, vPtr, wPtr);\n    const width = ok ? this.pdfiumModule.pdfium.getValue(wPtr, 'float') : 1; // default 1 pt\n\n    this.memoryManager.free(hPtr);\n    this.memoryManager.free(vPtr);\n    this.memoryManager.free(wPtr);\n\n    return width;\n  }\n\n  /**\n   * Fetches the `/F` flag bit-field from an annotation.\n   *\n   * @param annotationPtr pointer to an `FPDF_ANNOTATION`\n   * @returns `{ raw, flags }`\n   *          • `raw`   – the 32-bit integer returned by PDFium\n   *          • `flags` – object with individual booleans\n   */\n  private getAnnotationFlags(annotationPtr: number): PdfAnnotationFlagName[] {\n    const rawFlags = this.pdfiumModule.FPDFAnnot_GetFlags(annotationPtr); // number\n\n    return flagsToNames(rawFlags);\n  }\n\n  private setAnnotationFlags(annotationPtr: number, flags: PdfAnnotationFlagName[]): boolean {\n    const rawFlags = namesToFlags(flags);\n    return this.pdfiumModule.FPDFAnnot_SetFlags(annotationPtr, rawFlags);\n  }\n\n  /**\n   * Read circle annotation\n   * @param page  - pdf page infor\n   * @param annotationPtr - pointer to pdf annotation\n   * @param index  - index of annotation in the pdf page\n   * @returns pdf circle annotation\n   *\n   * @private\n   */\n  private readPdfCircleAnno(\n    page: PdfPageObject,\n    annotationPtr: number,\n    index: string,\n  ): PdfCircleAnnoObject {\n    const custom = this.getAnnotCustom(annotationPtr);\n    const flags = this.getAnnotationFlags(annotationPtr);\n    const pageRect = this.readPageAnnoRect(annotationPtr);\n    const rect = this.convertPageRectToDeviceRect(page, pageRect);\n    const author = this.getAnnotString(annotationPtr, 'T');\n    const modified = this.getAnnotationDate(annotationPtr, 'M');\n    const created = this.getAnnotationDate(annotationPtr, 'CreationDate');\n    const contents = this.getAnnotString(annotationPtr, 'Contents') || '';\n    const interiorColor = this.getAnnotationColor(\n      annotationPtr,\n      PdfAnnotationColorType.InteriorColor,\n    );\n    const strokeColor = this.getAnnotationColor(annotationPtr);\n    const opacity = this.getAnnotationOpacity(annotationPtr);\n    let { style: strokeStyle, width: strokeWidth } = this.getBorderStyle(annotationPtr);\n\n    let strokeDashArray: number[] | undefined;\n    if (strokeStyle === PdfAnnotationBorderStyle.DASHED) {\n      const { ok, pattern } = this.getBorderDashPattern(annotationPtr);\n      if (ok) {\n        strokeDashArray = pattern;\n      }\n    }\n\n    return {\n      pageIndex: page.index,\n      custom,\n      id: index,\n      type: PdfAnnotationSubtype.CIRCLE,\n      flags,\n      color: interiorColor ?? 'transparent',\n      opacity,\n      contents,\n      strokeWidth,\n      strokeColor: strokeColor ?? '#FF0000',\n      strokeStyle,\n      rect,\n      author,\n      modified,\n      created,\n      ...(strokeDashArray !== undefined && { strokeDashArray }),\n    };\n  }\n\n  /**\n   * Read square annotation\n   * @param page  - pdf page infor\n   * @param annotationPtr - pointer to pdf annotation\n   * @param index  - index of annotation in the pdf page\n   * @returns pdf square annotation\n   *\n   * @private\n   */\n  private readPdfSquareAnno(\n    page: PdfPageObject,\n    annotationPtr: number,\n    index: string,\n  ): PdfSquareAnnoObject {\n    const custom = this.getAnnotCustom(annotationPtr);\n    const flags = this.getAnnotationFlags(annotationPtr);\n    const pageRect = this.readPageAnnoRect(annotationPtr);\n    const rect = this.convertPageRectToDeviceRect(page, pageRect);\n    const author = this.getAnnotString(annotationPtr, 'T');\n    const modified = this.getAnnotationDate(annotationPtr, 'M');\n    const created = this.getAnnotationDate(annotationPtr, 'CreationDate');\n    const contents = this.getAnnotString(annotationPtr, 'Contents') || '';\n    const interiorColor = this.getAnnotationColor(\n      annotationPtr,\n      PdfAnnotationColorType.InteriorColor,\n    );\n    const strokeColor = this.getAnnotationColor(annotationPtr);\n    const opacity = this.getAnnotationOpacity(annotationPtr);\n    let { style: strokeStyle, width: strokeWidth } = this.getBorderStyle(annotationPtr);\n\n    let strokeDashArray: number[] | undefined;\n    if (strokeStyle === PdfAnnotationBorderStyle.DASHED) {\n      const { ok, pattern } = this.getBorderDashPattern(annotationPtr);\n      if (ok) {\n        strokeDashArray = pattern;\n      }\n    }\n\n    return {\n      pageIndex: page.index,\n      custom,\n      id: index,\n      type: PdfAnnotationSubtype.SQUARE,\n      flags,\n      color: interiorColor ?? 'transparent',\n      opacity,\n      contents,\n      strokeColor: strokeColor ?? '#FF0000',\n      strokeWidth,\n      strokeStyle,\n      rect,\n      author,\n      modified,\n      created,\n      ...(strokeDashArray !== undefined && { strokeDashArray }),\n    };\n  }\n\n  /**\n   * Read basic info of unsupported pdf annotation\n   * @param page  - pdf page infor\n   * @param type - type of annotation\n   * @param annotationPtr - pointer to pdf annotation\n   * @param index  - index of annotation in the pdf page\n   * @returns pdf annotation\n   *\n   * @private\n   */\n  private readPdfAnno(\n    page: PdfPageObject,\n    type: PdfUnsupportedAnnoObject['type'],\n    annotationPtr: number,\n    index: string,\n  ): PdfUnsupportedAnnoObject {\n    const custom = this.getAnnotCustom(annotationPtr);\n    const pageRect = this.readPageAnnoRect(annotationPtr);\n    const rect = this.convertPageRectToDeviceRect(page, pageRect);\n    const author = this.getAnnotString(annotationPtr, 'T');\n    const modified = this.getAnnotationDate(annotationPtr, 'M');\n    const created = this.getAnnotationDate(annotationPtr, 'CreationDate');\n    const flags = this.getAnnotationFlags(annotationPtr);\n\n    return {\n      pageIndex: page.index,\n      custom,\n      id: index,\n      flags,\n      type,\n      rect,\n      author,\n      modified,\n      created,\n    };\n  }\n\n  /**\n   * Resolve `/IRT` → parent-annotation index on the same page.\n   *\n   * @param pagePtr        - pointer to FPDF_PAGE\n   * @param annotationPtr  - pointer to FPDF_ANNOTATION\n   * @returns index (`0…count-1`) or `undefined` when the annotation is *not* a reply\n   *\n   * @private\n   */\n  private getInReplyToId(annotationPtr: number): string | undefined {\n    const parentPtr = this.pdfiumModule.FPDFAnnot_GetLinkedAnnot(annotationPtr, 'IRT');\n    if (!parentPtr) return;\n\n    return this.getAnnotString(parentPtr, 'NM');\n  }\n\n  /**\n   * Set the in reply to id of the annotation\n   *\n   * @param annotationPtr - pointer to an `FPDF_ANNOTATION`\n   * @param id - the id of the parent annotation\n   * @returns `true` on success\n   */\n  private setInReplyToId(pagePtr: number, annotationPtr: number, id: string): boolean {\n    const parentPtr = this.getAnnotationByName(pagePtr, id);\n    if (!parentPtr) return false;\n\n    return this.pdfiumModule.EPDFAnnot_SetLinkedAnnot(annotationPtr, 'IRT', parentPtr);\n  }\n\n  /**\n   * Fetch a string value (`/T`, `/M`, `/State`, …) from an annotation.\n   *\n   * @returns decoded UTF-8 string or `undefined` when the key is absent\n   *\n   * @private\n   */\n  private getAnnotString(annotationPtr: number, key: string): string | undefined {\n    const len = this.pdfiumModule.FPDFAnnot_GetStringValue(annotationPtr, key, 0, 0);\n    if (len === 0) return;\n\n    const bytes = (len + 1) * 2;\n    const ptr = this.memoryManager.malloc(bytes);\n\n    this.pdfiumModule.FPDFAnnot_GetStringValue(annotationPtr, key, ptr, bytes);\n    const value = this.pdfiumModule.pdfium.UTF16ToString(ptr);\n    this.memoryManager.free(ptr);\n\n    return value || undefined;\n  }\n\n  /**\n   * Get a string value (`/T`, `/M`, `/State`, …) from an attachment.\n   *\n   * @returns decoded UTF-8 string or `undefined` when the key is absent\n   *\n   * @private\n   */\n  private getAttachmentString(attachmentPtr: number, key: string): string | undefined {\n    const len = this.pdfiumModule.FPDFAttachment_GetStringValue(attachmentPtr, key, 0, 0);\n    if (len === 0) return;\n\n    const bytes = (len + 1) * 2;\n    const ptr = this.memoryManager.malloc(bytes);\n\n    this.pdfiumModule.FPDFAttachment_GetStringValue(attachmentPtr, key, ptr, bytes);\n    const value = this.pdfiumModule.pdfium.UTF16ToString(ptr);\n    this.memoryManager.free(ptr);\n\n    return value || undefined;\n  }\n\n  /**\n   * Get a number value (`/Size`) from an attachment.\n   *\n   * @returns number or `null` when the key is absent\n   *\n   * @private\n   */\n  private getAttachmentNumber(attachmentPtr: number, key: string): number | undefined {\n    const outPtr = this.memoryManager.malloc(4); // int32\n    try {\n      const ok = this.pdfiumModule.EPDFAttachment_GetIntegerValue(\n        attachmentPtr,\n        key, // FPDF_BYTESTRING → ASCII JS string is fine in your glue\n        outPtr,\n      );\n      if (!ok) return undefined;\n      // Treat as unsigned to avoid negative values if >2GB (rare on wasm, but harmless)\n      return this.pdfiumModule.pdfium.getValue(outPtr, 'i32') >>> 0;\n    } finally {\n      this.memoryManager.free(outPtr);\n    }\n  }\n\n  /**\n   * Get custom data of the annotation\n   * @param annotationPtr - pointer to pdf annotation\n   * @returns custom data of the annotation\n   *\n   * @private\n   */\n  private getAnnotCustom(annotationPtr: number): any {\n    const custom = this.getAnnotString(annotationPtr, 'EPDFCustom');\n    if (!custom) return;\n\n    try {\n      return JSON.parse(custom);\n    } catch (error) {\n      console.warn('Failed to parse annotation custom data as JSON:', error);\n      console.warn('Invalid JSON string:', custom);\n      return undefined;\n    }\n  }\n\n  /**\n   * Sets custom data for an annotation by safely stringifying and storing JSON\n   * @private\n   */\n  private setAnnotCustom(annotationPtr: number, data: any): boolean {\n    if (data === undefined || data === null) {\n      // Clear the custom data by setting empty string\n      return this.setAnnotString(annotationPtr, 'EPDFCustom', '');\n    }\n\n    try {\n      const jsonString = JSON.stringify(data);\n      return this.setAnnotString(annotationPtr, 'EPDFCustom', jsonString);\n    } catch (error) {\n      console.warn('Failed to stringify annotation custom data as JSON:', error);\n      console.warn('Invalid data object:', data);\n      return false;\n    }\n  }\n\n  /**\n   * Fetches the /IT (Intent) name from an annotation as a UTF-8 JS string.\n   *\n   * Mirrors getAnnotString(): calls EPDFAnnot_GetIntent twice (length probe + copy).\n   * Returns `undefined` if no intent present.\n   */\n  private getAnnotIntent(annotationPtr: number): string | undefined {\n    const len = this.pdfiumModule.EPDFAnnot_GetIntent(annotationPtr, 0, 0);\n    if (len === 0) return;\n\n    const codeUnits = len + 1;\n    const bytes = codeUnits * 2;\n    const ptr = this.memoryManager.malloc(bytes);\n\n    this.pdfiumModule.EPDFAnnot_GetIntent(annotationPtr, ptr, bytes);\n    const value = this.pdfiumModule.pdfium.UTF16ToString(ptr);\n\n    this.memoryManager.free(ptr);\n\n    return value && value !== 'undefined' ? value : undefined;\n  }\n\n  /**\n   * Write the `/IT` (Intent) name into an annotation dictionary.\n   *\n   * Mirrors EPDFAnnot_SetIntent in PDFium (expects a UTF‑8 FPDF_BYTESTRING).\n   *\n   * @param annotationPtr Pointer returned by FPDFPage_GetAnnot\n   * @param intent        Name without leading slash, e.g. `\"PolygonCloud\"`\n   *                      A leading “/” will be stripped for convenience.\n   * @returns             true on success, false otherwise\n   */\n  private setAnnotIntent(annotationPtr: number, intent: string): boolean {\n    return this.pdfiumModule.EPDFAnnot_SetIntent(annotationPtr, intent);\n  }\n\n  /**\n   * Returns the rich‑content string stored in the annotation’s `/RC` entry.\n   *\n   * Works like `getAnnotIntent()`: first probe for length, then copy.\n   * `undefined` when the annotation has no rich content.\n   */\n  private getAnnotRichContent(annotationPtr: number): string | undefined {\n    // First call → number of UTF‑16 code units (excluding NUL)\n    const len = this.pdfiumModule.EPDFAnnot_GetRichContent(annotationPtr, 0, 0);\n    if (len === 0) return;\n\n    // +1 for the implicit NUL added by PDFium → bytes = 2 × code units\n    const codeUnits = len + 1;\n    const bytes = codeUnits * 2;\n    const ptr = this.memoryManager.malloc(bytes);\n\n    this.pdfiumModule.EPDFAnnot_GetRichContent(annotationPtr, ptr, bytes);\n    const value = this.pdfiumModule.pdfium.UTF16ToString(ptr);\n\n    this.memoryManager.free(ptr);\n\n    return value || undefined;\n  }\n\n  /**\n   * Get annotation by name\n   * @param pagePtr - pointer to pdf page object\n   * @param name - name of annotation\n   * @returns pointer to pdf annotation\n   *\n   * @private\n   */\n  private getAnnotationByName(pagePtr: number, name: string): number | undefined {\n    return this.withWString(name, (wNamePtr) => {\n      return this.pdfiumModule.EPDFPage_GetAnnotByName(pagePtr, wNamePtr);\n    });\n  }\n\n  /**\n   * Remove annotation by name\n   * @param pagePtr - pointer to pdf page object\n   * @param name - name of annotation\n   * @returns true on success\n   *\n   * @private\n   */\n  private removeAnnotationByName(pagePtr: number, name: string): boolean {\n    return this.withWString(name, (wNamePtr) => {\n      return this.pdfiumModule.EPDFPage_RemoveAnnotByName(pagePtr, wNamePtr);\n    });\n  }\n\n  /**\n   * Set a string value (`/T`, `/M`, `/State`, …) to an annotation.\n   *\n   * @returns `true` if the operation was successful\n   *\n   * @private\n   */\n  private setAnnotString(annotationPtr: number, key: string, value: string): boolean {\n    return this.withWString(value, (wValPtr) => {\n      return this.pdfiumModule.FPDFAnnot_SetStringValue(annotationPtr, key, wValPtr);\n    });\n  }\n\n  /**\n   * Set a string value (`/T`, `/M`, `/State`, …) to an attachment.\n   *\n   * @returns `true` if the operation was successful\n   *\n   * @private\n   */\n  private setAttachmentString(attachmentPtr: number, key: string, value: string): boolean {\n    return this.withWString(value, (wValPtr) => {\n      // FPDFAttachment_SetStringValue writes into /Params dictionary\n      return this.pdfiumModule.FPDFAttachment_SetStringValue(attachmentPtr, key, wValPtr);\n    });\n  }\n\n  /**\n   * Read vertices of pdf annotation\n   * @param page  - pdf page infor\n   * @param annotationPtr - pointer to pdf annotation\n   * @returns vertices of pdf annotation\n   *\n   * @private\n   */\n  private readPdfAnnoVertices(page: PdfPageObject, annotationPtr: number): Position[] {\n    const vertices: Position[] = [];\n    const count = this.pdfiumModule.FPDFAnnot_GetVertices(annotationPtr, 0, 0);\n    const pointMemorySize = 8;\n    const pointsPtr = this.memoryManager.malloc(count * pointMemorySize);\n    this.pdfiumModule.FPDFAnnot_GetVertices(annotationPtr, pointsPtr, count);\n    for (let i = 0; i < count; i++) {\n      const pointX = this.pdfiumModule.pdfium.getValue(pointsPtr + i * pointMemorySize, 'float');\n      const pointY = this.pdfiumModule.pdfium.getValue(\n        pointsPtr + i * pointMemorySize + 4,\n        'float',\n      );\n\n      const { x, y } = this.convertPagePointToDevicePoint(page, {\n        x: pointX,\n        y: pointY,\n      });\n      const last = vertices[vertices.length - 1];\n      if (!last || last.x !== x || last.y !== y) {\n        vertices.push({ x, y });\n      }\n    }\n    this.memoryManager.free(pointsPtr);\n\n    return vertices;\n  }\n\n  /**\n   * Sync the vertices of a polygon or polyline annotation.\n   *\n   * @param page  - pdf page infor\n   * @param annotPtr - pointer to pdf annotation\n   * @param vertices - the vertices to be set\n   * @returns true on success\n   *\n   * @private\n   */\n  private setPdfAnnoVertices(page: PdfPageObject, annotPtr: number, vertices: Position[]): boolean {\n    const pdf = this.pdfiumModule.pdfium;\n    const FS_POINTF_SIZE = 8;\n\n    const buf = this.memoryManager.malloc(FS_POINTF_SIZE * vertices.length);\n    vertices.forEach((v, i) => {\n      const pagePt = this.convertDevicePointToPagePoint(page, v);\n      pdf.setValue(buf + i * FS_POINTF_SIZE + 0, pagePt.x, 'float');\n      pdf.setValue(buf + i * FS_POINTF_SIZE + 4, pagePt.y, 'float');\n    });\n\n    const ok = this.pdfiumModule.EPDFAnnot_SetVertices(annotPtr, buf, vertices.length);\n    this.memoryManager.free(buf);\n    return ok;\n  }\n\n  /**\n   * Read the target of pdf bookmark\n   * @param docPtr - pointer to pdf document object\n   * @param getActionPtr - callback function to retrive the pointer of action\n   * @param getDestinationPtr - callback function to retrive the pointer of destination\n   * @returns target of pdf bookmark\n   *\n   * @private\n   */\n  private readPdfBookmarkTarget(\n    docPtr: number,\n    getActionPtr: () => number,\n    getDestinationPtr: () => number,\n  ): PdfLinkTarget | undefined {\n    const actionPtr = getActionPtr();\n    if (actionPtr) {\n      const action = this.readPdfAction(docPtr, actionPtr);\n\n      return {\n        type: 'action',\n        action,\n      };\n    } else {\n      const destinationPtr = getDestinationPtr();\n      if (destinationPtr) {\n        const destination = this.readPdfDestination(docPtr, destinationPtr);\n\n        return {\n          type: 'destination',\n          destination,\n        };\n      }\n    }\n  }\n\n  /**\n   * Read field of pdf widget annotation\n   * @param formHandle - form handle\n   * @param annotationPtr - pointer to pdf annotation\n   * @returns field of pdf widget annotation\n   *\n   * @private\n   */\n  private readPdfWidgetAnnoField(formHandle: number, annotationPtr: number): PdfWidgetAnnoField {\n    const flag = this.pdfiumModule.FPDFAnnot_GetFormFieldFlags(\n      formHandle,\n      annotationPtr,\n    ) as PDF_FORM_FIELD_FLAG;\n\n    const type = this.pdfiumModule.FPDFAnnot_GetFormFieldType(\n      formHandle,\n      annotationPtr,\n    ) as PDF_FORM_FIELD_TYPE;\n\n    const name = readString(\n      this.pdfiumModule.pdfium,\n      (buffer: number, bufferLength) => {\n        return this.pdfiumModule.FPDFAnnot_GetFormFieldName(\n          formHandle,\n          annotationPtr,\n          buffer,\n          bufferLength,\n        );\n      },\n      this.pdfiumModule.pdfium.UTF16ToString,\n    );\n\n    const alternateName = readString(\n      this.pdfiumModule.pdfium,\n      (buffer: number, bufferLength) => {\n        return this.pdfiumModule.FPDFAnnot_GetFormFieldAlternateName(\n          formHandle,\n          annotationPtr,\n          buffer,\n          bufferLength,\n        );\n      },\n      this.pdfiumModule.pdfium.UTF16ToString,\n    );\n\n    const value = readString(\n      this.pdfiumModule.pdfium,\n      (buffer: number, bufferLength) => {\n        return this.pdfiumModule.FPDFAnnot_GetFormFieldValue(\n          formHandle,\n          annotationPtr,\n          buffer,\n          bufferLength,\n        );\n      },\n      this.pdfiumModule.pdfium.UTF16ToString,\n    );\n\n    const options: PdfWidgetAnnoOption[] = [];\n    if (type === PDF_FORM_FIELD_TYPE.COMBOBOX || type === PDF_FORM_FIELD_TYPE.LISTBOX) {\n      const count = this.pdfiumModule.FPDFAnnot_GetOptionCount(formHandle, annotationPtr);\n      for (let i = 0; i < count; i++) {\n        const label = readString(\n          this.pdfiumModule.pdfium,\n          (buffer: number, bufferLength) => {\n            return this.pdfiumModule.FPDFAnnot_GetOptionLabel(\n              formHandle,\n              annotationPtr,\n              i,\n              buffer,\n              bufferLength,\n            );\n          },\n          this.pdfiumModule.pdfium.UTF16ToString,\n        );\n        const isSelected = this.pdfiumModule.FPDFAnnot_IsOptionSelected(\n          formHandle,\n          annotationPtr,\n          i,\n        );\n        options.push({\n          label,\n          isSelected,\n        });\n      }\n    }\n\n    let isChecked = false;\n    let exportValue = \"\";\n    if (type === PDF_FORM_FIELD_TYPE.CHECKBOX || type === PDF_FORM_FIELD_TYPE.RADIOBUTTON) {\n      isChecked = this.pdfiumModule.FPDFAnnot_IsChecked(formHandle, annotationPtr);\n      exportValue = readString(\n          this.pdfiumModule.pdfium,\n          (buffer: number, bufferLength) => {\n            return this.pdfiumModule.FPDFAnnot_GetFormFieldExportValue(\n                formHandle,\n                annotationPtr,\n                buffer,\n                bufferLength,\n            );\n          },\n          this.pdfiumModule.pdfium.UTF16ToString,\n      );\n    }\n\n    return {\n      flag,\n      type,\n      name,\n      alternateName,\n      value,\n      isChecked,\n      options,\n      exportValue,\n    };\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.renderAnnotation}\n   *\n   * @public\n   */\n  renderPageAnnotation(\n    doc: PdfDocumentObject,\n    page: PdfPageObject,\n    annotation: PdfAnnotationObject,\n    options?: PdfRenderPageAnnotationOptions,\n  ): PdfTask<T> {\n    const {\n      scaleFactor = 1,\n      rotation = Rotation.Degree0,\n      dpr = 1,\n      mode = AppearanceMode.Normal,\n      imageType = 'image/webp',\n      imageQuality,\n    } = options ?? {};\n\n    this.logger.debug(\n      LOG_SOURCE,\n      LOG_CATEGORY,\n      'renderPageAnnotation',\n      doc,\n      page,\n      annotation,\n      options,\n    );\n    this.logger.perf(\n      LOG_SOURCE,\n      LOG_CATEGORY,\n      `RenderPageAnnotation`,\n      'Begin',\n      `${doc.id}-${page.index}-${annotation.id}`,\n    );\n\n    const task = new Task<T, PdfErrorReason>();\n    const ctx = this.cache.getContext(doc.id);\n    if (!ctx) {\n      this.logger.perf(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        `RenderPageAnnotation`,\n        'End',\n        `${doc.id}-${page.index}-${annotation.id}`,\n      );\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    // 1) native handles\n    const pageCtx = ctx.acquirePage(page.index);\n    const annotPtr = this.getAnnotationByName(pageCtx.pagePtr, annotation.id);\n    if (!annotPtr) {\n      this.logger.perf(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        `RenderPageAnnotation`,\n        'End',\n        `${doc.id}-${page.index}-${annotation.id}`,\n      );\n      pageCtx.release();\n      return PdfTaskHelper.reject({ code: PdfErrorCode.NotFound, message: 'annotation not found' });\n    }\n\n    // 2) device size (rotation-aware) → integer pixels\n    const finalScale = Math.max(0.01, scaleFactor * dpr);\n\n    const rect = toIntRect(annotation.rect);\n    const devRect = toIntRect(transformRect(page.size, rect, rotation, finalScale));\n\n    const wDev = Math.max(1, devRect.size.width);\n    const hDev = Math.max(1, devRect.size.height);\n    const stride = wDev * 4;\n    const bytes = stride * hDev;\n\n    // 3) bitmap backing store in WASM\n    const heapPtr = this.memoryManager.malloc(bytes);\n    const bitmapPtr = this.pdfiumModule.FPDFBitmap_CreateEx(\n      wDev,\n      hDev,\n      BitmapFormat.Bitmap_BGRA,\n      heapPtr,\n      stride,\n    );\n    this.pdfiumModule.FPDFBitmap_FillRect(bitmapPtr, 0, 0, wDev, hDev, 0x00000000);\n\n    // 4) user matrix (no Y-flip; includes -origin translate)\n    const M = buildUserToDeviceMatrix(\n      rect, // {origin:{L,B}, size:{W,H}}\n      rotation,\n      wDev,\n      hDev,\n    );\n    const mPtr = this.memoryManager.malloc(6 * 4);\n    const mView = new Float32Array(this.pdfiumModule.pdfium.HEAPF32.buffer, mPtr, 6);\n    mView.set([M.a, M.b, M.c, M.d, M.e, M.f]);\n\n    // 5) render (DisplayMatrix is applied inside EPDF_RenderAnnotBitmap)\n    const FLAGS = RenderFlag.REVERSE_BYTE_ORDER;\n    let ok = false;\n    try {\n      ok = !!this.pdfiumModule.EPDF_RenderAnnotBitmap(\n        bitmapPtr,\n        pageCtx.pagePtr,\n        annotPtr,\n        mode,\n        mPtr,\n        FLAGS,\n      );\n    } finally {\n      this.memoryManager.free(mPtr);\n      this.pdfiumModule.FPDFBitmap_Destroy(bitmapPtr); // frees wrapper, not our heapPtr\n      this.pdfiumModule.FPDFPage_CloseAnnot(annotPtr);\n      pageCtx.release();\n    }\n\n    if (!ok) {\n      this.memoryManager.free(heapPtr);\n      this.logger.perf(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        `RenderPageAnnotation`,\n        'End',\n        `${doc.id}-${page.index}-${annotation.id}`,\n      );\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.Unknown,\n        message: 'EPDF_RenderAnnotBitmap failed',\n      });\n    }\n\n    // 6) encode\n    const dispose = () => this.memoryManager.free(heapPtr);\n\n    this.imageDataConverter(\n      () => {\n        const rgba = new Uint8ClampedArray(\n          this.pdfiumModule.pdfium.HEAPU8.subarray(heapPtr, heapPtr + bytes),\n        );\n        return {\n          width: wDev,\n          height: hDev,\n          data: rgba,\n        };\n      },\n      imageType,\n      imageQuality,\n    )\n      .then((out) => task.resolve(out))\n      .catch((e) => {\n        // Check if it's an OffscreenCanvas error and we haven't copied data yet\n        if (e instanceof OffscreenCanvasError) {\n          // Fallback to WASM encoding without wasting the copy\n          try {\n            const blob = this.encodeViaWasm(\n              { ptr: heapPtr, width: wDev, height: hDev, stride },\n              { type: imageType, quality: imageQuality },\n            );\n            task.resolve(blob as T);\n          } catch (wasmError) {\n            task.reject({ code: PdfErrorCode.Unknown, message: String(wasmError) });\n          }\n        } else {\n          task.reject({ code: PdfErrorCode.Unknown, message: String(e) });\n        }\n      })\n      .finally(dispose);\n\n    return task;\n  }\n\n  private encodeViaWasm(\n    buf: { ptr: number; width: number; height: number; stride: number },\n    opts: ConvertToBlobOptions,\n  ): Blob {\n    const pdf = this.pdfiumModule.pdfium;\n\n    // Helper to copy out and free a payload allocated in WASM\n    const blobFrom = (outPtr: WasmPointer, size: number, mime: string) => {\n      const view = pdf.HEAPU8.subarray(outPtr, outPtr + size);\n      const copy = new Uint8Array(view); // detach from WASM before free\n      this.memoryManager.free(outPtr);\n      return new Blob([copy], { type: mime });\n    };\n\n    // Map OffscreenCanvas \"quality 0..1\" to encoders:\n    //  • WebP: 0..100 (float), default ~0.82 → 82\n    //  • JPEG: 1..100 (int),   default ~0.92 → 92\n    //const q = opts.quality;\n    //const webpQ = q == null ? 82 : Math.round(q * 100);\n    //const jpegQ = q == null ? 92 : Math.max(1, Math.round(q * 100));\n    // PNG ignores quality (same as OffscreenCanvas). Use libpng default (6).\n    const pngLevel = 6;\n\n    const outPtrPtr = this.memoryManager.malloc(4);\n    try {\n      switch (opts.type) {\n        /*\n        case 'image/webp': {\n          const size = this.pdfiumModule.EPDF_WebP_EncodeRGBA(\n            buf.ptr,\n            buf.width,\n            buf.height,\n            buf.stride,\n            webpQ,\n            outPtrPtr,\n          );\n          const outPtr = pdf.getValue(outPtrPtr, 'i32');\n          return blobFrom(outPtr, size, 'image/webp');\n        }\n        case 'image/jpeg': {\n          const size = this.pdfiumModule.EPDF_JPEG_EncodeRGBA(\n            buf.ptr,\n            buf.width,\n            buf.height,\n            buf.stride,\n            jpegQ,\n            outPtrPtr,\n          );\n          const outPtr = pdf.getValue(outPtrPtr, 'i32');\n          return blobFrom(outPtr, size, 'image/jpeg');\n        }\n        */\n        case 'image/png':\n        default: {\n          const size = this.pdfiumModule.EPDF_PNG_EncodeRGBA(\n            buf.ptr,\n            buf.width,\n            buf.height,\n            buf.stride,\n            pngLevel,\n            outPtrPtr,\n          );\n          const outPtr = pdf.getValue(outPtrPtr, 'i32');\n          return blobFrom(WasmPointer(outPtr), size, 'image/png');\n        }\n      }\n    } finally {\n      this.memoryManager.free(outPtrPtr);\n    }\n  }\n\n  private renderRectEncoded(\n    doc: PdfDocumentObject,\n    page: PdfPageObject,\n    rect: Rect,\n    options?: PdfRenderPageOptions,\n  ): PdfTask<T> {\n    const task = new Task<T, PdfErrorReason>();\n\n    const imageType: ImageConversionTypes = options?.imageType ?? 'image/webp';\n    const quality = options?.imageQuality;\n    const rotation: Rotation = options?.rotation ?? Rotation.Degree0;\n\n    const ctx = this.cache.getContext(doc.id);\n    if (!ctx) {\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    // ---- 1) decide device size (scale × dpr, swap for 90/270)\n    const scale = Math.max(0.01, options?.scaleFactor ?? 1);\n    const dpr = Math.max(1, options?.dpr ?? 1);\n    const finalScale = scale * dpr;\n\n    const baseW = rect.size.width;\n    const baseH = rect.size.height;\n    const swap = (rotation & 1) === 1; // 90 or 270\n\n    const wDev = Math.max(1, Math.round((swap ? baseH : baseW) * finalScale));\n    const hDev = Math.max(1, Math.round((swap ? baseW : baseH) * finalScale));\n    const stride = wDev * 4;\n    const bytes = stride * hDev;\n\n    const pageCtx = ctx.acquirePage(page.index);\n    const shouldRenderForms = options?.withForms ?? false;\n    const formHandle = shouldRenderForms ? pageCtx.getFormHandle() : undefined;\n\n    // ---- 2) allocate a BGRA bitmap in WASM\n    const heapPtr = this.memoryManager.malloc(bytes);\n    const bitmapPtr = this.pdfiumModule.FPDFBitmap_CreateEx(\n      wDev,\n      hDev,\n      BitmapFormat.Bitmap_BGRA,\n      heapPtr,\n      stride,\n    );\n    // white background like page renderers typically do\n    this.pdfiumModule.FPDFBitmap_FillRect(bitmapPtr, 0, 0, wDev, hDev, 0xffffffff);\n\n    const M = buildUserToDeviceMatrix(rect, rotation, wDev, hDev);\n\n    const mPtr = this.memoryManager.malloc(6 * 4); // FS_MATRIX\n    const mView = new Float32Array(this.pdfiumModule.pdfium.HEAPF32.buffer, mPtr, 6);\n    mView.set([M.a, M.b, M.c, M.d, M.e, M.f]);\n\n    // Clip to the whole bitmap (device space)\n    const clipPtr = this.memoryManager.malloc(4 * 4); // FS_RECTF {left,bottom,right,top}\n    const clipView = new Float32Array(this.pdfiumModule.pdfium.HEAPF32.buffer, clipPtr, 4);\n    clipView.set([0, 0, wDev, hDev]);\n\n    // Rendering flags: swap byte order to present RGBA to JS; include LCD_TEXT and ANNOT if asked\n    let flags = RenderFlag.REVERSE_BYTE_ORDER;\n    if (options?.withAnnotations ?? false) flags |= RenderFlag.ANNOT;\n\n    try {\n      this.pdfiumModule.FPDF_RenderPageBitmapWithMatrix(\n        bitmapPtr,\n        pageCtx.pagePtr,\n        mPtr,\n        clipPtr,\n        flags,\n      );\n\n      if (formHandle !== undefined) {\n        const formParams = computeFormDrawParams(M, rect, page.size, rotation);\n        const { startX, startY, formsWidth, formsHeight, scaleX, scaleY } = formParams;\n\n        // Draw form elements using the same effective transform as the page bitmap.\n        this.pdfiumModule.FPDF_FFLDraw(\n          formHandle,\n          bitmapPtr,\n          pageCtx.pagePtr,\n          startX,\n          startY,\n          formsWidth,\n          formsHeight,\n          rotation,\n          flags,\n        );\n      }\n    } finally {\n      pageCtx.release();\n      this.memoryManager.free(mPtr);\n      this.memoryManager.free(clipPtr);\n    }\n\n    const dispose = () => {\n      this.pdfiumModule.FPDFBitmap_Destroy(bitmapPtr);\n      this.memoryManager.free(heapPtr);\n    };\n\n    this.imageDataConverter(\n      () => {\n        const heapBuf = this.pdfiumModule.pdfium.HEAPU8.buffer as unknown as ArrayBuffer;\n        const data = new Uint8ClampedArray(heapBuf, heapPtr, bytes);\n        return {\n          width: wDev,\n          height: hDev,\n          data,\n        };\n      },\n      imageType,\n      quality,\n    )\n      .then((out) => task.resolve(out))\n      .catch((e) => {\n        this.logger.error(LOG_SOURCE, LOG_CATEGORY, 'Error', e);\n        // Check if it's an OffscreenCanvas error and we haven't copied data yet\n        if (e instanceof OffscreenCanvasError) {\n          // Fallback to WASM encoding without wasting the copy\n          this.logger.info(LOG_SOURCE, LOG_CATEGORY, 'Fallback to WASM encoding');\n          try {\n            const blob = this.encodeViaWasm(\n              { ptr: heapPtr, width: wDev, height: hDev, stride },\n              { type: imageType, quality },\n            );\n            task.resolve(blob as T);\n          } catch (wasmError) {\n            task.reject({ code: PdfErrorCode.Unknown, message: String(wasmError) });\n          }\n        } else {\n          task.reject({ code: PdfErrorCode.Unknown, message: String(e) });\n        }\n      })\n      .finally(dispose);\n\n    return task;\n  }\n\n  /**\n   * Read the target of pdf link annotation\n   * @param docPtr - pointer to pdf document object\n   * @param getActionPtr - callback function to retrive the pointer of action\n   * @param getDestinationPtr - callback function to retrive the pointer of destination\n   * @returns target of link\n   *\n   * @private\n   */\n  private readPdfLinkAnnoTarget(\n    docPtr: number,\n    getActionPtr: () => number,\n    getDestinationPtr: () => number,\n  ): PdfLinkTarget | undefined {\n    const destinationPtr = getDestinationPtr();\n    if (destinationPtr) {\n      const destination = this.readPdfDestination(docPtr, destinationPtr);\n\n      return {\n        type: 'destination',\n        destination,\n      };\n    } else {\n      const actionPtr = getActionPtr();\n      if (actionPtr) {\n        const action = this.readPdfAction(docPtr, actionPtr);\n\n        return {\n          type: 'action',\n          action,\n        };\n      }\n    }\n  }\n\n  private createLocalDestPtr(docPtr: number, dest: PdfDestinationObject): number {\n    // Load page for local destinations.\n    const pagePtr = this.pdfiumModule.FPDF_LoadPage(docPtr, dest.pageIndex);\n    if (!pagePtr) return 0;\n\n    try {\n      if (dest.zoom.mode === PdfZoomMode.XYZ) {\n        const { x, y, zoom } = dest.zoom.params;\n        // We treat provided x/y/zoom as “specified”.\n        return this.pdfiumModule.EPDFDest_CreateXYZ(\n          pagePtr,\n          /*has_left*/ true,\n          x,\n          /*has_top*/ true,\n          y,\n          /*has_zoom*/ true,\n          zoom,\n        );\n      }\n\n      // Map non-XYZ “view modes” to PDFDEST_VIEW_* and params.\n      let viewEnum: PdfZoomMode;\n      let params: number[] = [];\n\n      switch (dest.zoom.mode) {\n        case PdfZoomMode.FitPage:\n          viewEnum = PdfZoomMode.FitPage; // no params\n          break;\n        case PdfZoomMode.FitHorizontal:\n          // FitH needs top; use view[0] if provided, else 0\n          viewEnum = PdfZoomMode.FitHorizontal;\n          params = [dest.view?.[0] ?? 0];\n          break;\n        case PdfZoomMode.FitVertical:\n          // FitV needs left; use view[0] if provided, else 0\n          viewEnum = PdfZoomMode.FitVertical;\n          params = [dest.view?.[0] ?? 0];\n          break;\n        case PdfZoomMode.FitRectangle:\n          // FitR needs left, bottom, right, top (pad with zeros).\n          {\n            const v = dest.view ?? [];\n            params = [v[0] ?? 0, v[1] ?? 0, v[2] ?? 0, v[3] ?? 0];\n            viewEnum = PdfZoomMode.FitRectangle;\n          }\n          break;\n        case PdfZoomMode.Unknown:\n        default:\n          // Unknown cannot be encoded as a valid explicit destination.\n          return 0;\n      }\n\n      return this.withFloatArray(params, (ptr, count) =>\n        this.pdfiumModule.EPDFDest_CreateView(pagePtr, viewEnum, ptr, count),\n      );\n    } finally {\n      this.pdfiumModule.FPDF_ClosePage(pagePtr);\n    }\n  }\n\n  private applyBookmarkTarget(docPtr: number, bmPtr: number, target: PdfLinkTarget): boolean {\n    if (target.type === 'destination') {\n      const destPtr = this.createLocalDestPtr(docPtr, target.destination);\n      if (!destPtr) return false;\n      const ok = this.pdfiumModule.EPDFBookmark_SetDest(docPtr, bmPtr, destPtr);\n      return !!ok;\n    }\n\n    // target.type === 'action'\n    const action = target.action;\n    switch (action.type) {\n      case PdfActionType.Goto: {\n        const destPtr = this.createLocalDestPtr(docPtr, action.destination);\n        if (!destPtr) return false;\n        const actPtr = this.pdfiumModule.EPDFAction_CreateGoTo(docPtr, destPtr);\n        if (!actPtr) return false;\n        return !!this.pdfiumModule.EPDFBookmark_SetAction(docPtr, bmPtr, actPtr);\n      }\n\n      case PdfActionType.URI: {\n        const actPtr = this.pdfiumModule.EPDFAction_CreateURI(docPtr, action.uri);\n        if (!actPtr) return false;\n        return !!this.pdfiumModule.EPDFBookmark_SetAction(docPtr, bmPtr, actPtr);\n      }\n\n      case PdfActionType.LaunchAppOrOpenFile: {\n        const actPtr = this.withWString(action.path, (wptr) =>\n          this.pdfiumModule.EPDFAction_CreateLaunch(docPtr, wptr),\n        );\n        if (!actPtr) return false;\n        return !!this.pdfiumModule.EPDFBookmark_SetAction(docPtr, bmPtr, actPtr);\n      }\n\n      case PdfActionType.RemoteGoto:\n        // We need a file path to build a GoToR action. Your Action shape\n        // doesn’t carry a path, so we’ll reject for now.\n        return false;\n\n      case PdfActionType.Unsupported:\n      default:\n        return false;\n    }\n  }\n\n  /**\n   * Read pdf action from pdf document\n   * @param docPtr - pointer to pdf document object\n   * @param actionPtr - pointer to pdf action object\n   * @returns pdf action object\n   *\n   * @private\n   */\n  private readPdfAction(docPtr: number, actionPtr: number): PdfActionObject {\n    const actionType = this.pdfiumModule.FPDFAction_GetType(actionPtr) as PdfActionType;\n    let action: PdfActionObject;\n    switch (actionType) {\n      case PdfActionType.Unsupported:\n        action = {\n          type: PdfActionType.Unsupported,\n        };\n        break;\n      case PdfActionType.Goto:\n        {\n          const destinationPtr = this.pdfiumModule.FPDFAction_GetDest(docPtr, actionPtr);\n          if (destinationPtr) {\n            const destination = this.readPdfDestination(docPtr, destinationPtr);\n\n            action = {\n              type: PdfActionType.Goto,\n              destination,\n            };\n          } else {\n            action = {\n              type: PdfActionType.Unsupported,\n            };\n          }\n        }\n        break;\n      case PdfActionType.RemoteGoto:\n        {\n          // In case of remote goto action,\n          // the application should first use FPDFAction_GetFilePath\n          // to get file path, then load that particular document,\n          // and use its document handle to call this\n          action = {\n            type: PdfActionType.Unsupported,\n          };\n        }\n        break;\n      case PdfActionType.URI:\n        {\n          const uri = readString(\n            this.pdfiumModule.pdfium,\n            (buffer, bufferLength) => {\n              return this.pdfiumModule.FPDFAction_GetURIPath(\n                docPtr,\n                actionPtr,\n                buffer,\n                bufferLength,\n              );\n            },\n            this.pdfiumModule.pdfium.UTF8ToString,\n          );\n\n          action = {\n            type: PdfActionType.URI,\n            uri,\n          };\n        }\n        break;\n      case PdfActionType.LaunchAppOrOpenFile:\n        {\n          const path = readString(\n            this.pdfiumModule.pdfium,\n            (buffer, bufferLength) => {\n              return this.pdfiumModule.FPDFAction_GetFilePath(actionPtr, buffer, bufferLength);\n            },\n            this.pdfiumModule.pdfium.UTF8ToString,\n          );\n          action = {\n            type: PdfActionType.LaunchAppOrOpenFile,\n            path,\n          };\n        }\n        break;\n    }\n\n    return action;\n  }\n\n  /**\n   * Read pdf destination object\n   * @param docPtr - pointer to pdf document object\n   * @param destinationPtr - pointer to pdf destination\n   * @returns pdf destination object\n   *\n   * @private\n   */\n  private readPdfDestination(docPtr: number, destinationPtr: number): PdfDestinationObject {\n    const pageIndex = this.pdfiumModule.FPDFDest_GetDestPageIndex(docPtr, destinationPtr);\n    // Every params is a float value\n    const maxParmamsCount = 4;\n    const paramsCountPtr = this.memoryManager.malloc(maxParmamsCount);\n    const paramsPtr = this.memoryManager.malloc(maxParmamsCount * 4);\n    const zoomMode = this.pdfiumModule.FPDFDest_GetView(\n      destinationPtr,\n      paramsCountPtr,\n      paramsPtr,\n    ) as PdfZoomMode;\n    const paramsCount = this.pdfiumModule.pdfium.getValue(paramsCountPtr, 'i32');\n    const view: number[] = [];\n    for (let i = 0; i < paramsCount; i++) {\n      const paramPtr = paramsPtr + i * 4;\n      view.push(this.pdfiumModule.pdfium.getValue(paramPtr, 'float'));\n    }\n    this.memoryManager.free(paramsCountPtr);\n    this.memoryManager.free(paramsPtr);\n\n    if (zoomMode === PdfZoomMode.XYZ) {\n      const hasXPtr = this.memoryManager.malloc(1);\n      const hasYPtr = this.memoryManager.malloc(1);\n      const hasZPtr = this.memoryManager.malloc(1);\n      const xPtr = this.memoryManager.malloc(4);\n      const yPtr = this.memoryManager.malloc(4);\n      const zPtr = this.memoryManager.malloc(4);\n\n      const isSucceed = this.pdfiumModule.FPDFDest_GetLocationInPage(\n        destinationPtr,\n        hasXPtr,\n        hasYPtr,\n        hasZPtr,\n        xPtr,\n        yPtr,\n        zPtr,\n      );\n      if (isSucceed) {\n        const hasX = this.pdfiumModule.pdfium.getValue(hasXPtr, 'i8');\n        const hasY = this.pdfiumModule.pdfium.getValue(hasYPtr, 'i8');\n        const hasZ = this.pdfiumModule.pdfium.getValue(hasZPtr, 'i8');\n\n        const x = hasX ? this.pdfiumModule.pdfium.getValue(xPtr, 'float') : 0;\n        const y = hasY ? this.pdfiumModule.pdfium.getValue(yPtr, 'float') : 0;\n        const zoom = hasZ ? this.pdfiumModule.pdfium.getValue(zPtr, 'float') : 0;\n\n        this.memoryManager.free(hasXPtr);\n        this.memoryManager.free(hasYPtr);\n        this.memoryManager.free(hasZPtr);\n        this.memoryManager.free(xPtr);\n        this.memoryManager.free(yPtr);\n        this.memoryManager.free(zPtr);\n\n        return {\n          pageIndex,\n          zoom: {\n            mode: zoomMode,\n            params: {\n              x,\n              y,\n              zoom,\n            },\n          },\n          view,\n        };\n      }\n\n      this.memoryManager.free(hasXPtr);\n      this.memoryManager.free(hasYPtr);\n      this.memoryManager.free(hasZPtr);\n      this.memoryManager.free(xPtr);\n      this.memoryManager.free(yPtr);\n      this.memoryManager.free(zPtr);\n\n      return {\n        pageIndex,\n        zoom: {\n          mode: zoomMode,\n          params: {\n            x: 0,\n            y: 0,\n            zoom: 0,\n          },\n        },\n        view,\n      };\n    }\n\n    return {\n      pageIndex,\n      zoom: {\n        mode: zoomMode,\n      },\n      view,\n    };\n  }\n\n  /**\n   * Read attachmet from pdf document\n   * @param docPtr - pointer to pdf document object\n   * @param index - index of attachment\n   * @returns attachment content\n   *\n   * @private\n   */\n  private readPdfAttachment(docPtr: number, index: number): PdfAttachmentObject {\n    const attachmentPtr = this.pdfiumModule.FPDFDoc_GetAttachment(docPtr, index);\n    const name = readString(\n      this.pdfiumModule.pdfium,\n      (buffer, bufferLength) => {\n        return this.pdfiumModule.FPDFAttachment_GetName(attachmentPtr, buffer, bufferLength);\n      },\n      this.pdfiumModule.pdfium.UTF16ToString,\n    );\n    const description = readString(\n      this.pdfiumModule.pdfium,\n      (buffer, bufferLength) => {\n        return this.pdfiumModule.EPDFAttachment_GetDescription(attachmentPtr, buffer, bufferLength);\n      },\n      this.pdfiumModule.pdfium.UTF16ToString,\n    );\n    const mimeType = readString(\n      this.pdfiumModule.pdfium,\n      (buffer, bufferLength) => {\n        return this.pdfiumModule.FPDFAttachment_GetSubtype(attachmentPtr, buffer, bufferLength);\n      },\n      this.pdfiumModule.pdfium.UTF16ToString,\n    );\n    const creationDate = this.getAttachmentDate(attachmentPtr, 'CreationDate');\n    const checksum = readString(\n      this.pdfiumModule.pdfium,\n      (buffer, bufferLength) => {\n        return this.pdfiumModule.FPDFAttachment_GetStringValue(\n          attachmentPtr,\n          'Checksum',\n          buffer,\n          bufferLength,\n        );\n      },\n      this.pdfiumModule.pdfium.UTF16ToString,\n    );\n    const size = this.getAttachmentNumber(attachmentPtr, 'Size');\n\n    return {\n      index,\n      name,\n      description,\n      mimeType,\n      size,\n      creationDate,\n      checksum,\n    };\n  }\n\n  /**\n   * Convert coordinate of point from device coordinate to page coordinate\n   * @param page  - pdf page infor\n   * @param position - position of point\n   * @returns converted position\n   *\n   * @private\n   */\n  private convertDevicePointToPagePoint(page: PdfPageObject, position: Position): Position {\n    const DW = page.size.width;\n    const DH = page.size.height;\n    const r = page.rotation & 3;\n\n    if (r === 0) {\n      // 0°\n      return { x: position.x, y: DH - position.y };\n    }\n    if (r === 1) {\n      // 90° CW\n      // x_d = sx*y, y_d = sy*x  =>  x = y_d/sy, y = x_d/sx\n      return { x: position.y, y: position.x };\n    }\n    if (r === 2) {\n      // 180°\n      return { x: DW - position.x, y: position.y };\n    }\n    {\n      // 270° CW\n      // x_d = DW - sx*y, y_d = DH - sy*x\n      return { x: DH - position.y, y: DW - position.x };\n    }\n  }\n\n  /**\n   * Convert coordinate of point from page coordinate to device coordinate\n   * @param page  - pdf page infor\n   * @param position - position of point\n   * @returns converted position\n   *\n   * @private\n   */\n  private convertPagePointToDevicePoint(page: PdfPageObject, position: Position): Position {\n    const DW = page.size.width;\n    const DH = page.size.height;\n    const r = page.rotation & 3;\n\n    if (r === 0) {\n      // 0°\n      return { x: position.x, y: DH - position.y };\n    }\n    if (r === 1) {\n      // 90° CW\n      return { x: position.y, y: position.x };\n    }\n    if (r === 2) {\n      // 180°\n      return { x: DW - position.x, y: position.y };\n    }\n    {\n      // 270° CW\n      return { x: DW - position.y, y: DH - position.x };\n    }\n  }\n\n  /**\n   * Convert coordinate of rectangle from page coordinate to device coordinate\n   * @param page  - pdf page infor\n   * @param pagePtr - pointer to pdf page object\n   * @param pageRect - rectangle that needs to be converted\n   * @returns converted rectangle\n   *\n   * @private\n   */\n  private convertPageRectToDeviceRect(\n    page: PdfPageObject,\n    pageRect: {\n      left: number;\n      top: number;\n      right: number;\n      bottom: number;\n    },\n  ): Rect {\n    const { x, y } = this.convertPagePointToDevicePoint(page, {\n      x: pageRect.left,\n      y: pageRect.top,\n    });\n    const rect = {\n      origin: {\n        x,\n        y,\n      },\n      size: {\n        width: Math.abs(pageRect.right - pageRect.left),\n        height: Math.abs(pageRect.top - pageRect.bottom),\n      },\n    };\n\n    return rect;\n  }\n\n  /**\n   * Read the appearance stream of annotation\n   * @param annotationPtr - pointer to pdf annotation\n   * @param mode - appearance mode\n   * @returns appearance stream\n   *\n   * @private\n   */\n  private readPageAnnoAppearanceStreams(annotationPtr: number) {\n    return {\n      normal: this.readPageAnnoAppearanceStream(annotationPtr, AppearanceMode.Normal),\n      rollover: this.readPageAnnoAppearanceStream(annotationPtr, AppearanceMode.Rollover),\n      down: this.readPageAnnoAppearanceStream(annotationPtr, AppearanceMode.Down),\n    };\n  }\n\n  /**\n   * Read the appearance stream of annotation\n   * @param annotationPtr - pointer to pdf annotation\n   * @param mode - appearance mode\n   * @returns appearance stream\n   *\n   * @private\n   */\n  private readPageAnnoAppearanceStream(annotationPtr: number, mode = AppearanceMode.Normal) {\n    const utf16Length = this.pdfiumModule.FPDFAnnot_GetAP(annotationPtr, mode, 0, 0);\n    const bytesCount = (utf16Length + 1) * 2; // include NIL\n    const bufferPtr = this.memoryManager.malloc(bytesCount);\n    this.pdfiumModule.FPDFAnnot_GetAP(annotationPtr, mode, bufferPtr, bytesCount);\n    const ap = this.pdfiumModule.pdfium.UTF16ToString(bufferPtr);\n    this.memoryManager.free(bufferPtr);\n\n    return ap;\n  }\n\n  /**\n   * Set the appearance stream of annotation\n   * @param annotationPtr - pointer to pdf annotation\n   * @param mode - appearance mode\n   * @param apContent - appearance stream content (null to remove)\n   * @returns whether the appearance stream was set successfully\n   *\n   * @private\n   */\n  private setPageAnnoAppearanceStream(\n    annotationPtr: number,\n    mode: AppearanceMode = AppearanceMode.Normal,\n    apContent: string,\n  ): boolean {\n    // UTF-16LE buffer (+2 bytes for NUL)\n    const bytes = 2 * (apContent.length + 1);\n    const ptr = this.memoryManager.malloc(bytes);\n    try {\n      this.pdfiumModule.pdfium.stringToUTF16(apContent, ptr, bytes);\n      const ok = this.pdfiumModule.FPDFAnnot_SetAP(annotationPtr, mode, ptr);\n      return !!ok;\n    } finally {\n      this.memoryManager.free(ptr);\n    }\n  }\n\n  /**\n   * Set the rect of specified annotation\n   * @param page - page info that the annotation is belonged to\n   * @param annotationPtr - pointer to annotation object\n   * @param rect - target rectangle\n   * @returns whether the rect is setted\n   *\n   * @private\n   */\n  private setPageAnnoRect(page: PdfPageObject, annotPtr: number, rect: Rect): boolean {\n    // Snap device edges the same way FPDF_DeviceToPage(int,int,...) did (truncate → floor for ≥0)\n    const x0d = Math.floor(rect.origin.x);\n    const y0d = Math.floor(rect.origin.y);\n    const x1d = Math.floor(rect.origin.x + rect.size.width);\n    const y1d = Math.floor(rect.origin.y + rect.size.height);\n\n    // Map all 4 integer corners to page space (handles any /Rotate)\n    const TL = this.convertDevicePointToPagePoint(page, { x: x0d, y: y0d });\n    const TR = this.convertDevicePointToPagePoint(page, { x: x1d, y: y0d });\n    const BR = this.convertDevicePointToPagePoint(page, { x: x1d, y: y1d });\n    const BL = this.convertDevicePointToPagePoint(page, { x: x0d, y: y1d });\n\n    // Page-space AABB\n    let left = Math.min(TL.x, TR.x, BR.x, BL.x);\n    let right = Math.max(TL.x, TR.x, BR.x, BL.x);\n    let bottom = Math.min(TL.y, TR.y, BR.y, BL.y);\n    let top = Math.max(TL.y, TR.y, BR.y, BL.y);\n    if (left > right) [left, right] = [right, left];\n    if (bottom > top) [bottom, top] = [top, bottom];\n\n    // Write FS_RECTF in memory order: L, T, R, B\n    const ptr = this.memoryManager.malloc(16);\n    const pdf = this.pdfiumModule.pdfium;\n    pdf.setValue(ptr + 0, left, 'float'); // L\n    pdf.setValue(ptr + 4, top, 'float'); // T\n    pdf.setValue(ptr + 8, right, 'float'); // R\n    pdf.setValue(ptr + 12, bottom, 'float'); // B\n\n    const ok = this.pdfiumModule.FPDFAnnot_SetRect(annotPtr, ptr);\n    this.memoryManager.free(ptr);\n    return !!ok;\n  }\n\n  /**\n   * Read the rectangle of annotation\n   * @param annotationPtr - pointer to pdf annotation\n   * @returns rectangle of annotation\n   *\n   * @private\n   */\n  private readPageAnnoRect(annotationPtr: number) {\n    const pageRectPtr = this.memoryManager.malloc(4 * 4);\n    const pageRect = {\n      left: 0,\n      top: 0,\n      right: 0,\n      bottom: 0,\n    };\n    if (this.pdfiumModule.FPDFAnnot_GetRect(annotationPtr, pageRectPtr)) {\n      pageRect.left = this.pdfiumModule.pdfium.getValue(pageRectPtr, 'float');\n      pageRect.top = this.pdfiumModule.pdfium.getValue(pageRectPtr + 4, 'float');\n      pageRect.right = this.pdfiumModule.pdfium.getValue(pageRectPtr + 8, 'float');\n      pageRect.bottom = this.pdfiumModule.pdfium.getValue(pageRectPtr + 12, 'float');\n    }\n    this.memoryManager.free(pageRectPtr);\n\n    return pageRect;\n  }\n\n  /**\n   * Get highlight rects for a specific character range (for search highlighting)\n   * @param page - pdf page info\n   * @param pagePtr - pointer to pdf page\n   * @param textPagePtr - pointer to pdf text page\n   * @param startIndex - starting character index\n   * @param charCount - number of characters in the range\n   * @returns array of rectangles for highlighting the specified character range\n   *\n   * @private\n   */\n  private getHighlightRects(\n    page: PdfPageObject,\n    textPagePtr: number,\n    startIndex: number,\n    charCount: number,\n  ): Rect[] {\n    const rectsCount = this.pdfiumModule.FPDFText_CountRects(textPagePtr, startIndex, charCount);\n    const highlightRects: Rect[] = [];\n\n    // scratch doubles for the page-space rect\n    const l = this.memoryManager.malloc(8);\n    const t = this.memoryManager.malloc(8);\n    const r = this.memoryManager.malloc(8);\n    const b = this.memoryManager.malloc(8);\n\n    for (let i = 0; i < rectsCount; i++) {\n      const ok = this.pdfiumModule.FPDFText_GetRect(textPagePtr, i, l, t, r, b);\n      if (!ok) continue;\n\n      const left = this.pdfiumModule.pdfium.getValue(l, 'double');\n      const top = this.pdfiumModule.pdfium.getValue(t, 'double');\n      const right = this.pdfiumModule.pdfium.getValue(r, 'double');\n      const bottom = this.pdfiumModule.pdfium.getValue(b, 'double');\n\n      // transform all four corners to device space\n      const p1 = this.convertPagePointToDevicePoint(page, { x: left, y: top });\n      const p2 = this.convertPagePointToDevicePoint(page, { x: right, y: top });\n      const p3 = this.convertPagePointToDevicePoint(page, { x: right, y: bottom });\n      const p4 = this.convertPagePointToDevicePoint(page, { x: left, y: bottom });\n\n      const xs = [p1.x, p2.x, p3.x, p4.x];\n      const ys = [p1.y, p2.y, p3.y, p4.y];\n\n      const x = Math.min(...xs);\n      const y = Math.min(...ys);\n      const width = Math.max(...xs) - x;\n      const height = Math.max(...ys) - y;\n\n      // ceil so highlights fully cover glyphs at integer pixels\n      highlightRects.push({\n        origin: { x, y },\n        size: { width: Math.ceil(width), height: Math.ceil(height) },\n      });\n    }\n\n    this.memoryManager.free(l);\n    this.memoryManager.free(t);\n    this.memoryManager.free(r);\n    this.memoryManager.free(b);\n\n    return highlightRects;\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.searchAllPages}\n   *\n   * Runs inside the worker.\n   * Emits per-page progress: { page, results }\n   *\n   * @public\n   */\n  searchAllPages(\n    doc: PdfDocumentObject,\n    keyword: string,\n    options?: PdfSearchAllPagesOptions,\n  ): PdfTask<SearchAllPagesResult, PdfPageSearchProgress> {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'searchAllPages', doc, keyword, options);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, 'SearchAllPages', 'Begin', doc.id);\n\n    // Resolve early if doc not open\n    const ctx = this.cache.getContext(doc.id);\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, 'SearchAllPages', 'End', doc.id);\n      return PdfTaskHelper.resolve<SearchAllPagesResult, PdfPageSearchProgress>({\n        results: [],\n        total: 0,\n      });\n    }\n\n    // Build UTF-16 keyword buffer\n    const length = 2 * (keyword.length + 1);\n    const keywordPtr = this.memoryManager.malloc(length);\n    this.pdfiumModule.pdfium.stringToUTF16(keyword, keywordPtr, length);\n\n    // Fold flags\n    const flag =\n      options?.flags?.reduce((acc: MatchFlag, f: MatchFlag) => acc | f, MatchFlag.None) ??\n      MatchFlag.None;\n\n    // Create task with progress payload\n    const task = PdfTaskHelper.create<SearchAllPagesResult, PdfPageSearchProgress>();\n\n    let cancelled = false;\n    task.wait(\n      () => {},\n      (err) => {\n        if (err.type === 'abort') cancelled = true;\n      },\n    );\n\n    const CHUNK_SIZE = 100; // tune as needed\n    const allResults: SearchResult[] = [];\n\n    const processChunk = (startIdx: number): void => {\n      if (cancelled) return;\n\n      const endIdx = Math.min(startIdx + CHUNK_SIZE, doc.pageCount);\n\n      try {\n        for (let pageIndex = startIdx; pageIndex < endIdx && !cancelled; pageIndex++) {\n          // Search this page once\n          const pageResults = this.searchAllInPage(ctx, doc.pages[pageIndex], keywordPtr, flag);\n\n          // Accumulate and emit progress\n          allResults.push(...pageResults);\n          task.progress({ page: pageIndex, results: pageResults });\n        }\n      } catch (e) {\n        if (!cancelled) {\n          this.memoryManager.free(keywordPtr);\n          this.logger.perf(LOG_SOURCE, LOG_CATEGORY, 'SearchAllPages', 'End', doc.id);\n          task.reject({\n            code: PdfErrorCode.Unknown,\n            message: `Error searching document: ${e}`,\n          });\n        }\n        return;\n      }\n\n      if (cancelled) return;\n\n      if (endIdx >= doc.pageCount) {\n        this.memoryManager.free(keywordPtr);\n        this.logger.perf(LOG_SOURCE, LOG_CATEGORY, 'SearchAllPages', 'End', doc.id);\n        task.resolve({ results: allResults, total: allResults.length });\n        return;\n      }\n\n      // yield to event loop\n      setTimeout(() => processChunk(endIdx), 0);\n    };\n\n    // kick off\n    setTimeout(() => processChunk(0), 0);\n\n    // Ensure buffer is freed if caller aborts mid-flight\n    task.wait(\n      () => {},\n      (err) => {\n        if (err.type === 'abort') {\n          try {\n            this.memoryManager.free(keywordPtr);\n          } catch {}\n        }\n      },\n    );\n\n    return task;\n  }\n\n  /**\n   * Extract word-aligned context for a search hit.\n   *\n   * @param fullText      full UTF-16 page text (fetch this once per page!)\n   * @param start         index of 1st char that matched\n   * @param count         number of chars in the match\n   * @param windowChars   minimum context chars to keep left & right\n   */\n  private buildContext(\n    fullText: string,\n    start: number,\n    count: number,\n    windowChars = 30,\n  ): TextContext {\n    const WORD_BREAK = /[\\s\\u00A0.,;:!?()\\[\\]{}<>/\\\\\\-\"'`\"”\\u2013\\u2014]/;\n\n    // Find the start of a word moving left\n    const findWordStart = (index: number): number => {\n      while (index > 0 && !WORD_BREAK.test(fullText[index - 1])) index--;\n      return index;\n    };\n\n    // Find the end of a word moving right\n    const findWordEnd = (index: number): number => {\n      while (index < fullText.length && !WORD_BREAK.test(fullText[index])) index++;\n      return index;\n    };\n\n    // Move left to build context\n    let left = start;\n    while (left > 0 && WORD_BREAK.test(fullText[left - 1])) left--; // Skip blanks\n    let collected = 0;\n    while (left > 0 && collected < windowChars) {\n      left--;\n      if (!WORD_BREAK.test(fullText[left])) collected++;\n    }\n    left = findWordStart(left);\n\n    // Move right to build context\n    let right = start + count;\n    while (right < fullText.length && WORD_BREAK.test(fullText[right])) right++; // Skip blanks\n    collected = 0;\n    while (right < fullText.length && collected < windowChars) {\n      if (!WORD_BREAK.test(fullText[right])) collected++;\n      right++;\n    }\n    right = findWordEnd(right);\n\n    // Compose the context\n    const before = fullText.slice(left, start).replace(/\\s+/g, ' ').trimStart();\n    const match = fullText.slice(start, start + count);\n    const after = fullText\n      .slice(start + count, right)\n      .replace(/\\s+/g, ' ')\n      .trimEnd();\n\n    return {\n      before: this.tidy(before),\n      match: this.tidy(match),\n      after: this.tidy(after),\n      truncatedLeft: left > 0,\n      truncatedRight: right < fullText.length,\n    };\n  }\n\n  /**\n   * Tidy the text to remove any non-printable characters and whitespace\n   * @param s - text to tidy\n   * @returns tidied text\n   *\n   * @private\n   */\n  private tidy(s: string): string {\n    return (\n      s\n        /* 1️⃣  join words split by hyphen + U+FFFE + whitespace */\n        .replace(/-\\uFFFE\\s*/g, '')\n\n        /* 2️⃣  drop any remaining U+FFFE, soft-hyphen, zero-width chars */\n        .replace(/[\\uFFFE\\u00AD\\u200B\\u2060\\uFEFF]/g, '')\n\n        /* 3️⃣  collapse whitespace so we stay on one line */\n        .replace(/\\s+/g, ' ')\n    );\n  }\n\n  /**\n   * Search for all occurrences of a keyword on a single page\n   * This method efficiently loads the page only once and finds all matches\n   *\n   * @param docPtr - pointer to pdf document\n   * @param page - pdf page object\n   * @param pageIndex - index of the page\n   * @param keywordPtr - pointer to the search keyword\n   * @param flag - search flags\n   * @returns array of search results on this page\n   *\n   * @private\n   */\n  private searchAllInPage(\n    ctx: DocumentContext,\n    page: PdfPageObject,\n    keywordPtr: number,\n    flag: number,\n  ): SearchResult[] {\n    return ctx.borrowPage(page.index, (pageCtx) => {\n      const textPagePtr = pageCtx.getTextPage();\n\n      // Load the full text of the page once\n      const total = this.pdfiumModule.FPDFText_CountChars(textPagePtr);\n      const bufPtr = this.memoryManager.malloc(2 * (total + 1));\n      this.pdfiumModule.FPDFText_GetText(textPagePtr, 0, total, bufPtr);\n      const fullText = this.pdfiumModule.pdfium.UTF16ToString(bufPtr);\n      this.memoryManager.free(bufPtr);\n\n      const pageResults: SearchResult[] = [];\n\n      // Initialize search handle once for the page\n      const searchHandle = this.pdfiumModule.FPDFText_FindStart(\n        textPagePtr,\n        keywordPtr,\n        flag,\n        0, // Start from the beginning of the page\n      );\n\n      // Call FindNext repeatedly to get all matches on the page\n      while (this.pdfiumModule.FPDFText_FindNext(searchHandle)) {\n        const charIndex = this.pdfiumModule.FPDFText_GetSchResultIndex(searchHandle);\n        const charCount = this.pdfiumModule.FPDFText_GetSchCount(searchHandle);\n\n        const rects = this.getHighlightRects(page, textPagePtr, charIndex, charCount);\n\n        const context = this.buildContext(fullText, charIndex, charCount);\n\n        pageResults.push({\n          pageIndex: page.index,\n          charIndex,\n          charCount,\n          rects,\n          context,\n        });\n      }\n\n      // Close the search handle only once after finding all results\n      this.pdfiumModule.FPDFText_FindClose(searchHandle);\n      return pageResults;\n    });\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.preparePrintDocument}\n   *\n   * Prepares a PDF document for printing with specified options.\n   * Creates a new document with selected pages and optionally removes annotations\n   * for optimal printing performance.\n   *\n   * @public\n   */\n  preparePrintDocument(doc: PdfDocumentObject, options?: PdfPrintOptions): PdfTask<ArrayBuffer> {\n    const { includeAnnotations = true, pageRange = null } = options ?? {};\n\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'preparePrintDocument', doc, options);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `PreparePrintDocument`, 'Begin', doc.id);\n\n    // Verify document is open\n    const ctx = this.cache.getContext(doc.id);\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `PreparePrintDocument`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'Document is not open',\n      });\n    }\n\n    // Create new document for printing\n    const printDocPtr = this.pdfiumModule.FPDF_CreateNewDocument();\n    if (!printDocPtr) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `PreparePrintDocument`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.CantCreateNewDoc,\n        message: 'Cannot create print document',\n      });\n    }\n\n    try {\n      // Validate and sanitize page range\n      const sanitizedPageRange = this.sanitizePageRange(pageRange, doc.pageCount);\n\n      // Import pages from source document\n      // pageRange null means import all pages\n      if (\n        !this.pdfiumModule.FPDF_ImportPages(\n          printDocPtr,\n          ctx.docPtr,\n          sanitizedPageRange ?? '',\n          0, // Insert at beginning\n        )\n      ) {\n        this.pdfiumModule.FPDF_CloseDocument(printDocPtr);\n        this.logger.error(LOG_SOURCE, LOG_CATEGORY, 'Failed to import pages for printing');\n        this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `PreparePrintDocument`, 'End', doc.id);\n\n        return PdfTaskHelper.reject({\n          code: PdfErrorCode.CantImportPages,\n          message: 'Failed to import pages for printing',\n        });\n      }\n\n      // Remove annotations if requested\n      if (!includeAnnotations) {\n        const removalResult = this.removeAnnotationsFromPrintDocument(printDocPtr);\n\n        if (!removalResult.success) {\n          this.pdfiumModule.FPDF_CloseDocument(printDocPtr);\n          this.logger.error(\n            LOG_SOURCE,\n            LOG_CATEGORY,\n            `Failed to remove annotations: ${removalResult.error}`,\n          );\n          this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `PreparePrintDocument`, 'End', doc.id);\n\n          return PdfTaskHelper.reject({\n            code: PdfErrorCode.Unknown,\n            message: `Failed to prepare print document: ${removalResult.error}`,\n          });\n        }\n\n        this.logger.debug(\n          LOG_SOURCE,\n          LOG_CATEGORY,\n          `Removed ${removalResult.annotationsRemoved} annotations from ${removalResult.pagesProcessed} pages`,\n        );\n      }\n\n      // Save the prepared document to buffer\n      const buffer = this.saveDocument(printDocPtr);\n\n      // Clean up\n      this.pdfiumModule.FPDF_CloseDocument(printDocPtr);\n\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `PreparePrintDocument`, 'End', doc.id);\n      return PdfTaskHelper.resolve(buffer);\n    } catch (error) {\n      // Ensure cleanup on any error\n      if (printDocPtr) {\n        this.pdfiumModule.FPDF_CloseDocument(printDocPtr);\n      }\n\n      this.logger.error(LOG_SOURCE, LOG_CATEGORY, 'preparePrintDocument failed', error);\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `PreparePrintDocument`, 'End', doc.id);\n\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.Unknown,\n        message: error instanceof Error ? error.message : 'Failed to prepare print document',\n      });\n    }\n  }\n\n  /**\n   * Removes all annotations from a print document using fast raw annotation functions.\n   * This method is optimized for performance by avoiding full page loading.\n   *\n   * @param printDocPtr - Pointer to the print document\n   * @returns Result object with success status and statistics\n   *\n   * @private\n   */\n  private removeAnnotationsFromPrintDocument(printDocPtr: number): {\n    success: boolean;\n    annotationsRemoved: number;\n    pagesProcessed: number;\n    error?: string;\n  } {\n    let totalAnnotationsRemoved = 0;\n    let pagesProcessed = 0;\n\n    try {\n      const pageCount = this.pdfiumModule.FPDF_GetPageCount(printDocPtr);\n\n      // Process each page\n      for (let pageIndex = 0; pageIndex < pageCount; pageIndex++) {\n        // Get annotation count using the fast raw function\n        const annotCount = this.pdfiumModule.EPDFPage_GetAnnotCountRaw(printDocPtr, pageIndex);\n\n        if (annotCount <= 0) {\n          pagesProcessed++;\n          continue;\n        }\n\n        // Remove annotations in reverse order to maintain indices\n        // This is important because removing an annotation shifts the indices of subsequent ones\n        let annotationsRemovedFromPage = 0;\n\n        for (let annotIndex = annotCount - 1; annotIndex >= 0; annotIndex--) {\n          // Use the fast raw removal function\n          const removed = this.pdfiumModule.EPDFPage_RemoveAnnotRaw(\n            printDocPtr,\n            pageIndex,\n            annotIndex,\n          );\n\n          if (removed) {\n            annotationsRemovedFromPage++;\n            totalAnnotationsRemoved++;\n          } else {\n            this.logger.warn(\n              LOG_SOURCE,\n              LOG_CATEGORY,\n              `Failed to remove annotation ${annotIndex} from page ${pageIndex}`,\n            );\n          }\n        }\n\n        // Generate content for the page if annotations were removed\n        if (annotationsRemovedFromPage > 0) {\n          // We need to regenerate the page content after removing annotations\n          const pagePtr = this.pdfiumModule.FPDF_LoadPage(printDocPtr, pageIndex);\n          if (pagePtr) {\n            this.pdfiumModule.FPDFPage_GenerateContent(pagePtr);\n            this.pdfiumModule.FPDF_ClosePage(pagePtr);\n          }\n        }\n\n        pagesProcessed++;\n      }\n\n      return {\n        success: true,\n        annotationsRemoved: totalAnnotationsRemoved,\n        pagesProcessed: pagesProcessed,\n      };\n    } catch (error) {\n      return {\n        success: false,\n        annotationsRemoved: totalAnnotationsRemoved,\n        pagesProcessed: pagesProcessed,\n        error: error instanceof Error ? error.message : 'Unknown error during annotation removal',\n      };\n    }\n  }\n\n  /**\n   * Sanitizes and validates a page range string.\n   * Ensures page numbers are within valid bounds and properly formatted.\n   *\n   * @param pageRange - Page range string (e.g., \"1,3,5-7\") or null for all pages\n   * @param totalPages - Total number of pages in the document\n   * @returns Sanitized page range string or null for all pages\n   *\n   * @private\n   */\n  private sanitizePageRange(\n    pageRange: string | null | undefined,\n    totalPages: number,\n  ): string | null {\n    // Null or empty means all pages\n    if (!pageRange || pageRange.trim() === '') {\n      return null;\n    }\n\n    try {\n      const sanitized: number[] = [];\n      const parts = pageRange.split(',');\n\n      for (const part of parts) {\n        const trimmed = part.trim();\n\n        if (trimmed.includes('-')) {\n          // Handle range (e.g., \"5-7\")\n          const [startStr, endStr] = trimmed.split('-').map((s) => s.trim());\n          const start = parseInt(startStr, 10);\n          const end = parseInt(endStr, 10);\n\n          if (isNaN(start) || isNaN(end)) {\n            this.logger.warn(LOG_SOURCE, LOG_CATEGORY, `Invalid range: ${trimmed}`);\n            continue;\n          }\n\n          // Clamp to valid bounds (1-based page numbers)\n          const validStart = Math.max(1, Math.min(start, totalPages));\n          const validEnd = Math.max(1, Math.min(end, totalPages));\n\n          // Add all pages in range\n          for (let i = validStart; i <= validEnd; i++) {\n            if (!sanitized.includes(i)) {\n              sanitized.push(i);\n            }\n          }\n        } else {\n          // Handle single page number\n          const pageNum = parseInt(trimmed, 10);\n\n          if (isNaN(pageNum)) {\n            this.logger.warn(LOG_SOURCE, LOG_CATEGORY, `Invalid page number: ${trimmed}`);\n            continue;\n          }\n\n          // Clamp to valid bounds\n          const validPageNum = Math.max(1, Math.min(pageNum, totalPages));\n\n          if (!sanitized.includes(validPageNum)) {\n            sanitized.push(validPageNum);\n          }\n        }\n      }\n\n      // If no valid pages found, return null (all pages)\n      if (sanitized.length === 0) {\n        this.logger.warn(LOG_SOURCE, LOG_CATEGORY, 'No valid pages in range, using all pages');\n        return null;\n      }\n\n      // Sort and convert back to range string\n      sanitized.sort((a, b) => a - b);\n\n      // Optimize consecutive pages into ranges\n      const optimized: string[] = [];\n      let rangeStart = sanitized[0];\n      let rangeEnd = sanitized[0];\n\n      for (let i = 1; i < sanitized.length; i++) {\n        if (sanitized[i] === rangeEnd + 1) {\n          rangeEnd = sanitized[i];\n        } else {\n          // End current range\n          if (rangeStart === rangeEnd) {\n            optimized.push(rangeStart.toString());\n          } else if (rangeEnd - rangeStart === 1) {\n            optimized.push(rangeStart.toString());\n            optimized.push(rangeEnd.toString());\n          } else {\n            optimized.push(`${rangeStart}-${rangeEnd}`);\n          }\n\n          // Start new range\n          rangeStart = sanitized[i];\n          rangeEnd = sanitized[i];\n        }\n      }\n\n      // Add final range\n      if (rangeStart === rangeEnd) {\n        optimized.push(rangeStart.toString());\n      } else if (rangeEnd - rangeStart === 1) {\n        optimized.push(rangeStart.toString());\n        optimized.push(rangeEnd.toString());\n      } else {\n        optimized.push(`${rangeStart}-${rangeEnd}`);\n      }\n\n      const result = optimized.join(',');\n\n      this.logger.debug(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        `Sanitized page range: \"${pageRange}\" -> \"${result}\"`,\n      );\n\n      return result;\n    } catch (error) {\n      this.logger.error(LOG_SOURCE, LOG_CATEGORY, `Error sanitizing page range: ${error}`);\n      return null; // Fallback to all pages\n    }\n  }\n}\n","var createPdfium = (() => {\n  var _scriptName = import.meta.url;\n\n  return async function (moduleArg = {}) {\n    var moduleRtn;\n\n    // include: shell.js\n    // The Module object: Our interface to the outside world. We import\n    // and export values on it. There are various ways Module can be used:\n    // 1. Not defined. We create it here\n    // 2. A function parameter, function(moduleArg) => Promise<Module>\n    // 3. pre-run appended it, var Module = {}; ..generated code..\n    // 4. External script tag defines var Module.\n    // We need to check if Module already exists (e.g. case 3 above).\n    // Substitution will be replaced with actual code on later stage of the build,\n    // this way Closure Compiler will not mangle it (e.g. case 4. above).\n    // Note that if you want to run closure, and also to use Module\n    // after the generated code, you will need to define   var Module = {};\n    // before the code. Then that object will be used in the code, and you\n    // can continue to use Module afterwards as well.\n    var Module = moduleArg;\n\n    // Set up the promise that indicates the Module is initialized\n    var readyPromiseResolve, readyPromiseReject;\n    var readyPromise = new Promise((resolve, reject) => {\n      readyPromiseResolve = resolve;\n      readyPromiseReject = reject;\n    });\n    [\n      '_EPDF_GetMetaKeyCount',\n      '_EPDF_GetMetaKeyName',\n      '_EPDF_GetMetaTrapped',\n      '_EPDF_GetPageRotationByIndex',\n      '_EPDF_HasMetaText',\n      '_EPDF_PNG_EncodeRGBA',\n      '_EPDF_RenderAnnotBitmap',\n      '_EPDF_SetMetaText',\n      '_EPDF_SetMetaTrapped',\n      '_EPDFAction_CreateGoTo',\n      '_EPDFAction_CreateGoToNamed',\n      '_EPDFAction_CreateLaunch',\n      '_EPDFAction_CreateRemoteGoToByName',\n      '_EPDFAction_CreateRemoteGoToDest',\n      '_EPDFAction_CreateURI',\n      '_EPDFAnnot_ClearColor',\n      '_EPDFAnnot_GenerateAppearance',\n      '_EPDFAnnot_GenerateAppearanceWithBlend',\n      '_EPDFAnnot_GetBlendMode',\n      '_EPDFAnnot_GetBorderDashPattern',\n      '_EPDFAnnot_GetBorderDashPatternCount',\n      '_EPDFAnnot_GetBorderEffect',\n      '_EPDFAnnot_GetBorderStyle',\n      '_EPDFAnnot_GetColor',\n      '_EPDFAnnot_GetDefaultAppearance',\n      '_EPDFAnnot_GetIcon',\n      '_EPDFAnnot_GetIntent',\n      '_EPDFAnnot_GetLineEndings',\n      '_EPDFAnnot_GetOpacity',\n      '_EPDFAnnot_GetRectangleDifferences',\n      '_EPDFAnnot_GetRichContent',\n      '_EPDFAnnot_GetTextAlignment',\n      '_EPDFAnnot_GetVerticalAlignment',\n      '_EPDFAnnot_SetBorderDashPattern',\n      '_EPDFAnnot_SetBorderStyle',\n      '_EPDFAnnot_SetColor',\n      '_EPDFAnnot_SetDefaultAppearance',\n      '_EPDFAnnot_SetIcon',\n      '_EPDFAnnot_SetIntent',\n      '_EPDFAnnot_SetLine',\n      '_EPDFAnnot_SetLineEndings',\n      '_EPDFAnnot_SetLinkedAnnot',\n      '_EPDFAnnot_SetOpacity',\n      '_EPDFAnnot_SetTextAlignment',\n      '_EPDFAnnot_SetVerticalAlignment',\n      '_EPDFAnnot_SetVertices',\n      '_EPDFAnnot_UpdateAppearanceToRect',\n      '_EPDFAttachment_GetDescription',\n      '_EPDFAttachment_GetIntegerValue',\n      '_EPDFAttachment_SetDescription',\n      '_EPDFAttachment_SetSubtype',\n      '_EPDFBookmark_AppendChild',\n      '_EPDFBookmark_Clear',\n      '_EPDFBookmark_ClearTarget',\n      '_EPDFBookmark_Create',\n      '_EPDFBookmark_Delete',\n      '_EPDFBookmark_InsertAfter',\n      '_EPDFBookmark_SetAction',\n      '_EPDFBookmark_SetDest',\n      '_EPDFBookmark_SetTitle',\n      '_EPDFCatalog_GetLanguage',\n      '_EPDFDest_CreateRemoteView',\n      '_EPDFDest_CreateRemoteXYZ',\n      '_EPDFDest_CreateView',\n      '_EPDFDest_CreateXYZ',\n      '_EPDFNamedDest_Remove',\n      '_EPDFNamedDest_SetDest',\n      '_EPDFPage_CreateAnnot',\n      '_EPDFPage_GetAnnotByName',\n      '_EPDFPage_GetAnnotCountRaw',\n      '_EPDFPage_GetAnnotRaw',\n      '_EPDFPage_RemoveAnnotByName',\n      '_EPDFPage_RemoveAnnotRaw',\n      '_EPDFText_RedactInQuads',\n      '_EPDFText_RedactInRect',\n      '_FORM_CanRedo',\n      '_FORM_CanUndo',\n      '_FORM_DoDocumentAAction',\n      '_FORM_DoDocumentJSAction',\n      '_FORM_DoDocumentOpenAction',\n      '_FORM_DoPageAAction',\n      '_FORM_ForceToKillFocus',\n      '_FORM_GetFocusedAnnot',\n      '_FORM_GetFocusedText',\n      '_FORM_GetSelectedText',\n      '_FORM_IsIndexSelected',\n      '_FORM_OnAfterLoadPage',\n      '_FORM_OnBeforeClosePage',\n      '_FORM_OnChar',\n      '_FORM_OnFocus',\n      '_FORM_OnKeyDown',\n      '_FORM_OnKeyUp',\n      '_FORM_OnLButtonDoubleClick',\n      '_FORM_OnLButtonDown',\n      '_FORM_OnLButtonUp',\n      '_FORM_OnMouseMove',\n      '_FORM_OnMouseWheel',\n      '_FORM_OnRButtonDown',\n      '_FORM_OnRButtonUp',\n      '_FORM_Redo',\n      '_FORM_ReplaceAndKeepSelection',\n      '_FORM_ReplaceSelection',\n      '_FORM_SelectAllText',\n      '_FORM_SetFocusedAnnot',\n      '_FORM_SetIndexSelected',\n      '_FORM_Undo',\n      '_FPDF_AddInstalledFont',\n      '_FPDF_CloseDocument',\n      '_FPDF_ClosePage',\n      '_FPDF_CloseXObject',\n      '_FPDF_CopyViewerPreferences',\n      '_FPDF_CountNamedDests',\n      '_FPDF_CreateClipPath',\n      '_FPDF_CreateNewDocument',\n      '_FPDF_DestroyClipPath',\n      '_FPDF_DestroyLibrary',\n      '_FPDF_DeviceToPage',\n      '_FPDF_DocumentHasValidCrossReferenceTable',\n      '_FPDF_FFLDraw',\n      '_FPDF_FreeDefaultSystemFontInfo',\n      '_FPDF_GetDefaultSystemFontInfo',\n      '_FPDF_GetDefaultTTFMap',\n      '_FPDF_GetDefaultTTFMapCount',\n      '_FPDF_GetDefaultTTFMapEntry',\n      '_FPDF_GetDocPermissions',\n      '_FPDF_GetDocUserPermissions',\n      '_FPDF_GetFileIdentifier',\n      '_FPDF_GetFileVersion',\n      '_FPDF_GetFormType',\n      '_FPDF_GetLastError',\n      '_FPDF_GetMetaText',\n      '_FPDF_GetNamedDest',\n      '_FPDF_GetNamedDestByName',\n      '_FPDF_GetPageAAction',\n      '_FPDF_GetPageBoundingBox',\n      '_FPDF_GetPageCount',\n      '_FPDF_GetPageHeight',\n      '_FPDF_GetPageHeightF',\n      '_FPDF_GetPageLabel',\n      '_FPDF_GetPageSizeByIndex',\n      '_FPDF_GetPageSizeByIndexF',\n      '_FPDF_GetPageWidth',\n      '_FPDF_GetPageWidthF',\n      '_FPDF_GetSecurityHandlerRevision',\n      '_FPDF_GetSignatureCount',\n      '_FPDF_GetSignatureObject',\n      '_FPDF_GetTrailerEnds',\n      '_FPDF_GetXFAPacketContent',\n      '_FPDF_GetXFAPacketCount',\n      '_FPDF_GetXFAPacketName',\n      '_FPDF_ImportNPagesToOne',\n      '_FPDF_ImportPages',\n      '_FPDF_ImportPagesByIndex',\n      '_FPDF_InitLibrary',\n      '_FPDF_InitLibraryWithConfig',\n      '_FPDF_LoadCustomDocument',\n      '_FPDF_LoadDocument',\n      '_FPDF_LoadMemDocument',\n      '_FPDF_LoadMemDocument64',\n      '_FPDF_LoadPage',\n      '_FPDF_LoadXFA',\n      '_FPDF_MovePages',\n      '_FPDF_NewFormObjectFromXObject',\n      '_FPDF_NewXObjectFromPage',\n      '_FPDF_PageToDevice',\n      '_FPDF_RemoveFormFieldHighlight',\n      '_FPDF_RenderPage_Close',\n      '_FPDF_RenderPage_Continue',\n      '_FPDF_RenderPageBitmap',\n      '_FPDF_RenderPageBitmap_Start',\n      '_FPDF_RenderPageBitmapWithColorScheme_Start',\n      '_FPDF_RenderPageBitmapWithMatrix',\n      '_FPDF_SaveAsCopy',\n      '_FPDF_SaveWithVersion',\n      '_FPDF_SetFormFieldHighlightAlpha',\n      '_FPDF_SetFormFieldHighlightColor',\n      '_FPDF_SetSandBoxPolicy',\n      '_FPDF_SetSystemFontInfo',\n      '_FPDF_StructElement_Attr_CountChildren',\n      '_FPDF_StructElement_Attr_GetBlobValue',\n      '_FPDF_StructElement_Attr_GetBooleanValue',\n      '_FPDF_StructElement_Attr_GetChildAtIndex',\n      '_FPDF_StructElement_Attr_GetCount',\n      '_FPDF_StructElement_Attr_GetName',\n      '_FPDF_StructElement_Attr_GetNumberValue',\n      '_FPDF_StructElement_Attr_GetStringValue',\n      '_FPDF_StructElement_Attr_GetType',\n      '_FPDF_StructElement_Attr_GetValue',\n      '_FPDF_StructElement_CountChildren',\n      '_FPDF_StructElement_GetActualText',\n      '_FPDF_StructElement_GetAltText',\n      '_FPDF_StructElement_GetAttributeAtIndex',\n      '_FPDF_StructElement_GetAttributeCount',\n      '_FPDF_StructElement_GetChildAtIndex',\n      '_FPDF_StructElement_GetChildMarkedContentID',\n      '_FPDF_StructElement_GetID',\n      '_FPDF_StructElement_GetLang',\n      '_FPDF_StructElement_GetMarkedContentID',\n      '_FPDF_StructElement_GetMarkedContentIdAtIndex',\n      '_FPDF_StructElement_GetMarkedContentIdCount',\n      '_FPDF_StructElement_GetObjType',\n      '_FPDF_StructElement_GetParent',\n      '_FPDF_StructElement_GetStringAttribute',\n      '_FPDF_StructElement_GetTitle',\n      '_FPDF_StructElement_GetType',\n      '_FPDF_StructTree_Close',\n      '_FPDF_StructTree_CountChildren',\n      '_FPDF_StructTree_GetChildAtIndex',\n      '_FPDF_StructTree_GetForPage',\n      '_FPDF_VIEWERREF_GetDuplex',\n      '_FPDF_VIEWERREF_GetName',\n      '_FPDF_VIEWERREF_GetNumCopies',\n      '_FPDF_VIEWERREF_GetPrintPageRange',\n      '_FPDF_VIEWERREF_GetPrintPageRangeCount',\n      '_FPDF_VIEWERREF_GetPrintPageRangeElement',\n      '_FPDF_VIEWERREF_GetPrintScaling',\n      '_FPDFAction_GetDest',\n      '_FPDFAction_GetFilePath',\n      '_FPDFAction_GetType',\n      '_FPDFAction_GetURIPath',\n      '_FPDFAnnot_AddFileAttachment',\n      '_FPDFAnnot_AddInkStroke',\n      '_FPDFAnnot_AppendAttachmentPoints',\n      '_FPDFAnnot_AppendObject',\n      '_FPDFAnnot_CountAttachmentPoints',\n      '_FPDFAnnot_GetAP',\n      '_FPDFAnnot_GetAttachmentPoints',\n      '_FPDFAnnot_GetBorder',\n      '_FPDFAnnot_GetColor',\n      '_FPDFAnnot_GetFileAttachment',\n      '_FPDFAnnot_GetFlags',\n      '_FPDFAnnot_GetFocusableSubtypes',\n      '_FPDFAnnot_GetFocusableSubtypesCount',\n      '_FPDFAnnot_GetFontColor',\n      '_FPDFAnnot_GetFontSize',\n      '_FPDFAnnot_GetFormAdditionalActionJavaScript',\n      '_FPDFAnnot_GetFormControlCount',\n      '_FPDFAnnot_GetFormControlIndex',\n      '_FPDFAnnot_GetFormFieldAlternateName',\n      '_FPDFAnnot_GetFormFieldAtPoint',\n      '_FPDFAnnot_GetFormFieldExportValue',\n      '_FPDFAnnot_GetFormFieldFlags',\n      '_FPDFAnnot_GetFormFieldName',\n      '_FPDFAnnot_GetFormFieldType',\n      '_FPDFAnnot_GetFormFieldValue',\n      '_FPDFAnnot_GetInkListCount',\n      '_FPDFAnnot_GetInkListPath',\n      '_FPDFAnnot_GetLine',\n      '_FPDFAnnot_GetLink',\n      '_FPDFAnnot_GetLinkedAnnot',\n      '_FPDFAnnot_GetNumberValue',\n      '_FPDFAnnot_GetObject',\n      '_FPDFAnnot_GetObjectCount',\n      '_FPDFAnnot_GetOptionCount',\n      '_FPDFAnnot_GetOptionLabel',\n      '_FPDFAnnot_GetRect',\n      '_FPDFAnnot_GetStringValue',\n      '_FPDFAnnot_GetSubtype',\n      '_FPDFAnnot_GetValueType',\n      '_FPDFAnnot_GetVertices',\n      '_FPDFAnnot_HasAttachmentPoints',\n      '_FPDFAnnot_HasKey',\n      '_FPDFAnnot_IsChecked',\n      '_FPDFAnnot_IsObjectSupportedSubtype',\n      '_FPDFAnnot_IsOptionSelected',\n      '_FPDFAnnot_IsSupportedSubtype',\n      '_FPDFAnnot_RemoveInkList',\n      '_FPDFAnnot_RemoveObject',\n      '_FPDFAnnot_SetAP',\n      '_FPDFAnnot_SetAttachmentPoints',\n      '_FPDFAnnot_SetBorder',\n      '_FPDFAnnot_SetColor',\n      '_FPDFAnnot_SetFlags',\n      '_FPDFAnnot_SetFocusableSubtypes',\n      '_FPDFAnnot_SetFontColor',\n      '_FPDFAnnot_SetFormFieldFlags',\n      '_FPDFAnnot_SetRect',\n      '_FPDFAnnot_SetStringValue',\n      '_FPDFAnnot_SetURI',\n      '_FPDFAnnot_UpdateObject',\n      '_FPDFAttachment_GetFile',\n      '_FPDFAttachment_GetName',\n      '_FPDFAttachment_GetStringValue',\n      '_FPDFAttachment_GetSubtype',\n      '_FPDFAttachment_GetValueType',\n      '_FPDFAttachment_HasKey',\n      '_FPDFAttachment_SetFile',\n      '_FPDFAttachment_SetStringValue',\n      '_FPDFAvail_Create',\n      '_FPDFAvail_Destroy',\n      '_FPDFAvail_GetDocument',\n      '_FPDFAvail_GetFirstPageNum',\n      '_FPDFAvail_IsDocAvail',\n      '_FPDFAvail_IsFormAvail',\n      '_FPDFAvail_IsLinearized',\n      '_FPDFAvail_IsPageAvail',\n      '_FPDFBitmap_Create',\n      '_FPDFBitmap_CreateEx',\n      '_FPDFBitmap_Destroy',\n      '_FPDFBitmap_FillRect',\n      '_FPDFBitmap_GetBuffer',\n      '_FPDFBitmap_GetFormat',\n      '_FPDFBitmap_GetHeight',\n      '_FPDFBitmap_GetStride',\n      '_FPDFBitmap_GetWidth',\n      '_FPDFBookmark_Find',\n      '_FPDFBookmark_GetAction',\n      '_FPDFBookmark_GetCount',\n      '_FPDFBookmark_GetDest',\n      '_FPDFBookmark_GetFirstChild',\n      '_FPDFBookmark_GetNextSibling',\n      '_FPDFBookmark_GetTitle',\n      '_FPDFCatalog_IsTagged',\n      '_FPDFCatalog_SetLanguage',\n      '_FPDFClipPath_CountPaths',\n      '_FPDFClipPath_CountPathSegments',\n      '_FPDFClipPath_GetPathSegment',\n      '_FPDFDest_GetDestPageIndex',\n      '_FPDFDest_GetLocationInPage',\n      '_FPDFDest_GetView',\n      '_FPDFDoc_AddAttachment',\n      '_FPDFDoc_CloseJavaScriptAction',\n      '_FPDFDoc_DeleteAttachment',\n      '_FPDFDOC_ExitFormFillEnvironment',\n      '_FPDFDoc_GetAttachment',\n      '_FPDFDoc_GetAttachmentCount',\n      '_FPDFDoc_GetJavaScriptAction',\n      '_FPDFDoc_GetJavaScriptActionCount',\n      '_FPDFDoc_GetPageMode',\n      '_FPDFDOC_InitFormFillEnvironment',\n      '_FPDFFont_Close',\n      '_FPDFFont_GetAscent',\n      '_FPDFFont_GetBaseFontName',\n      '_FPDFFont_GetDescent',\n      '_FPDFFont_GetFamilyName',\n      '_FPDFFont_GetFlags',\n      '_FPDFFont_GetFontData',\n      '_FPDFFont_GetGlyphPath',\n      '_FPDFFont_GetGlyphWidth',\n      '_FPDFFont_GetIsEmbedded',\n      '_FPDFFont_GetItalicAngle',\n      '_FPDFFont_GetWeight',\n      '_FPDFFormObj_CountObjects',\n      '_FPDFFormObj_GetObject',\n      '_FPDFFormObj_RemoveObject',\n      '_FPDFGlyphPath_CountGlyphSegments',\n      '_FPDFGlyphPath_GetGlyphPathSegment',\n      '_FPDFImageObj_GetBitmap',\n      '_FPDFImageObj_GetIccProfileDataDecoded',\n      '_FPDFImageObj_GetImageDataDecoded',\n      '_FPDFImageObj_GetImageDataRaw',\n      '_FPDFImageObj_GetImageFilter',\n      '_FPDFImageObj_GetImageFilterCount',\n      '_FPDFImageObj_GetImageMetadata',\n      '_FPDFImageObj_GetImagePixelSize',\n      '_FPDFImageObj_GetRenderedBitmap',\n      '_FPDFImageObj_LoadJpegFile',\n      '_FPDFImageObj_LoadJpegFileInline',\n      '_FPDFImageObj_SetBitmap',\n      '_FPDFImageObj_SetMatrix',\n      '_FPDFJavaScriptAction_GetName',\n      '_FPDFJavaScriptAction_GetScript',\n      '_FPDFLink_CloseWebLinks',\n      '_FPDFLink_CountQuadPoints',\n      '_FPDFLink_CountRects',\n      '_FPDFLink_CountWebLinks',\n      '_FPDFLink_Enumerate',\n      '_FPDFLink_GetAction',\n      '_FPDFLink_GetAnnot',\n      '_FPDFLink_GetAnnotRect',\n      '_FPDFLink_GetDest',\n      '_FPDFLink_GetLinkAtPoint',\n      '_FPDFLink_GetLinkZOrderAtPoint',\n      '_FPDFLink_GetQuadPoints',\n      '_FPDFLink_GetRect',\n      '_FPDFLink_GetTextRange',\n      '_FPDFLink_GetURL',\n      '_FPDFLink_LoadWebLinks',\n      '_FPDFPage_CloseAnnot',\n      '_FPDFPage_CountObjects',\n      '_FPDFPage_CreateAnnot',\n      '_FPDFPage_Delete',\n      '_FPDFPage_Flatten',\n      '_FPDFPage_FormFieldZOrderAtPoint',\n      '_FPDFPage_GenerateContent',\n      '_FPDFPage_GetAnnot',\n      '_FPDFPage_GetAnnotCount',\n      '_FPDFPage_GetAnnotIndex',\n      '_FPDFPage_GetArtBox',\n      '_FPDFPage_GetBleedBox',\n      '_FPDFPage_GetCropBox',\n      '_FPDFPage_GetDecodedThumbnailData',\n      '_FPDFPage_GetMediaBox',\n      '_FPDFPage_GetObject',\n      '_FPDFPage_GetRawThumbnailData',\n      '_FPDFPage_GetRotation',\n      '_FPDFPage_GetThumbnailAsBitmap',\n      '_FPDFPage_GetTrimBox',\n      '_FPDFPage_HasFormFieldAtPoint',\n      '_FPDFPage_HasTransparency',\n      '_FPDFPage_InsertClipPath',\n      '_FPDFPage_InsertObject',\n      '_FPDFPage_InsertObjectAtIndex',\n      '_FPDFPage_New',\n      '_FPDFPage_RemoveAnnot',\n      '_FPDFPage_RemoveObject',\n      '_FPDFPage_SetArtBox',\n      '_FPDFPage_SetBleedBox',\n      '_FPDFPage_SetCropBox',\n      '_FPDFPage_SetMediaBox',\n      '_FPDFPage_SetRotation',\n      '_FPDFPage_SetTrimBox',\n      '_FPDFPage_TransformAnnots',\n      '_FPDFPage_TransFormWithClip',\n      '_FPDFPageObj_AddMark',\n      '_FPDFPageObj_CountMarks',\n      '_FPDFPageObj_CreateNewPath',\n      '_FPDFPageObj_CreateNewRect',\n      '_FPDFPageObj_CreateTextObj',\n      '_FPDFPageObj_Destroy',\n      '_FPDFPageObj_GetBounds',\n      '_FPDFPageObj_GetClipPath',\n      '_FPDFPageObj_GetDashArray',\n      '_FPDFPageObj_GetDashCount',\n      '_FPDFPageObj_GetDashPhase',\n      '_FPDFPageObj_GetFillColor',\n      '_FPDFPageObj_GetIsActive',\n      '_FPDFPageObj_GetLineCap',\n      '_FPDFPageObj_GetLineJoin',\n      '_FPDFPageObj_GetMark',\n      '_FPDFPageObj_GetMarkedContentID',\n      '_FPDFPageObj_GetMatrix',\n      '_FPDFPageObj_GetRotatedBounds',\n      '_FPDFPageObj_GetStrokeColor',\n      '_FPDFPageObj_GetStrokeWidth',\n      '_FPDFPageObj_GetType',\n      '_FPDFPageObj_HasTransparency',\n      '_FPDFPageObj_NewImageObj',\n      '_FPDFPageObj_NewTextObj',\n      '_FPDFPageObj_RemoveMark',\n      '_FPDFPageObj_SetBlendMode',\n      '_FPDFPageObj_SetDashArray',\n      '_FPDFPageObj_SetDashPhase',\n      '_FPDFPageObj_SetFillColor',\n      '_FPDFPageObj_SetIsActive',\n      '_FPDFPageObj_SetLineCap',\n      '_FPDFPageObj_SetLineJoin',\n      '_FPDFPageObj_SetMatrix',\n      '_FPDFPageObj_SetStrokeColor',\n      '_FPDFPageObj_SetStrokeWidth',\n      '_FPDFPageObj_Transform',\n      '_FPDFPageObj_TransformClipPath',\n      '_FPDFPageObj_TransformF',\n      '_FPDFPageObjMark_CountParams',\n      '_FPDFPageObjMark_GetName',\n      '_FPDFPageObjMark_GetParamBlobValue',\n      '_FPDFPageObjMark_GetParamIntValue',\n      '_FPDFPageObjMark_GetParamKey',\n      '_FPDFPageObjMark_GetParamStringValue',\n      '_FPDFPageObjMark_GetParamValueType',\n      '_FPDFPageObjMark_RemoveParam',\n      '_FPDFPageObjMark_SetBlobParam',\n      '_FPDFPageObjMark_SetIntParam',\n      '_FPDFPageObjMark_SetStringParam',\n      '_FPDFPath_BezierTo',\n      '_FPDFPath_Close',\n      '_FPDFPath_CountSegments',\n      '_FPDFPath_GetDrawMode',\n      '_FPDFPath_GetPathSegment',\n      '_FPDFPath_LineTo',\n      '_FPDFPath_MoveTo',\n      '_FPDFPath_SetDrawMode',\n      '_FPDFPathSegment_GetClose',\n      '_FPDFPathSegment_GetPoint',\n      '_FPDFPathSegment_GetType',\n      '_FPDFSignatureObj_GetByteRange',\n      '_FPDFSignatureObj_GetContents',\n      '_FPDFSignatureObj_GetDocMDPPermission',\n      '_FPDFSignatureObj_GetReason',\n      '_FPDFSignatureObj_GetSubFilter',\n      '_FPDFSignatureObj_GetTime',\n      '_FPDFText_ClosePage',\n      '_FPDFText_CountChars',\n      '_FPDFText_CountRects',\n      '_FPDFText_FindClose',\n      '_FPDFText_FindNext',\n      '_FPDFText_FindPrev',\n      '_FPDFText_FindStart',\n      '_FPDFText_GetBoundedText',\n      '_FPDFText_GetCharAngle',\n      '_FPDFText_GetCharBox',\n      '_FPDFText_GetCharIndexAtPos',\n      '_FPDFText_GetCharIndexFromTextIndex',\n      '_FPDFText_GetCharOrigin',\n      '_FPDFText_GetFillColor',\n      '_FPDFText_GetFontInfo',\n      '_FPDFText_GetFontSize',\n      '_FPDFText_GetFontWeight',\n      '_FPDFText_GetLooseCharBox',\n      '_FPDFText_GetMatrix',\n      '_FPDFText_GetRect',\n      '_FPDFText_GetSchCount',\n      '_FPDFText_GetSchResultIndex',\n      '_FPDFText_GetStrokeColor',\n      '_FPDFText_GetText',\n      '_FPDFText_GetTextIndexFromCharIndex',\n      '_FPDFText_GetTextObject',\n      '_FPDFText_GetUnicode',\n      '_FPDFText_HasUnicodeMapError',\n      '_FPDFText_IsGenerated',\n      '_FPDFText_IsHyphen',\n      '_FPDFText_LoadCidType2Font',\n      '_FPDFText_LoadFont',\n      '_FPDFText_LoadPage',\n      '_FPDFText_LoadStandardFont',\n      '_FPDFText_SetCharcodes',\n      '_FPDFText_SetText',\n      '_FPDFTextObj_GetFont',\n      '_FPDFTextObj_GetFontSize',\n      '_FPDFTextObj_GetRenderedBitmap',\n      '_FPDFTextObj_GetText',\n      '_FPDFTextObj_GetTextRenderMode',\n      '_FPDFTextObj_SetTextRenderMode',\n      '_PDFiumExt_CloseFileWriter',\n      '_PDFiumExt_CloseFormFillInfo',\n      '_PDFiumExt_ExitFormFillEnvironment',\n      '_PDFiumExt_GetFileWriterData',\n      '_PDFiumExt_GetFileWriterSize',\n      '_PDFiumExt_Init',\n      '_PDFiumExt_InitFormFillEnvironment',\n      '_PDFiumExt_OpenFileWriter',\n      '_PDFiumExt_OpenFormFillInfo',\n      '_PDFiumExt_SaveAsCopy',\n      '_malloc',\n      '_free',\n      '_memory',\n      '___indirect_function_table',\n      'onRuntimeInitialized',\n    ].forEach((prop) => {\n      if (!Object.getOwnPropertyDescriptor(readyPromise, prop)) {\n        Object.defineProperty(readyPromise, prop, {\n          get: () =>\n            abort(\n              'You are getting ' +\n                prop +\n                ' on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js',\n            ),\n          set: () =>\n            abort(\n              'You are setting ' +\n                prop +\n                ' on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js',\n            ),\n        });\n      }\n    });\n\n    // Determine the runtime environment we are in. You can customize this by\n    // setting the ENVIRONMENT setting at compile time (see settings.js).\n\n    // Attempt to auto-detect the environment\n    var ENVIRONMENT_IS_WEB = typeof window == 'object';\n    var ENVIRONMENT_IS_WORKER = typeof importScripts == 'function';\n    // N.b. Electron.js environment is simultaneously a NODE-environment, but\n    // also a web environment.\n    typeof process == 'object' &&\n      typeof process.versions == 'object' &&\n      typeof process.versions.node == 'string' &&\n      process.type != 'renderer';\n    var ENVIRONMENT_IS_SHELL =\n      !ENVIRONMENT_IS_WEB && !false && !ENVIRONMENT_IS_WORKER;\n\n    var require; \n\n    // --pre-jses are emitted after the Module integration code, so that they can\n    // refer to Module (if they choose; they can also define Module)\n\n    // Sometimes an existing Module object exists with properties\n    // meant to overwrite the default module functionality. Here\n    // we collect those properties and reapply _after_ we configure\n    // the current environment's defaults to avoid having to be so\n    // defensive during initialization.\n    var moduleOverrides = Object.assign({}, Module);\n    var thisProgram = './this.program';\n\n    // `/` should be present at the end if `scriptDirectory` is not empty\n    var scriptDirectory = '';\n    function locateFile(path) {\n      if (Module['locateFile']) {\n        return Module['locateFile'](path, scriptDirectory);\n      }\n      return scriptDirectory + path;\n    }\n\n    // Hooks that are implemented differently in different runtime environments.\n    var readAsync, readBinary;\n\n    if (ENVIRONMENT_IS_SHELL) {\n      if (\n        (typeof process == 'object' && typeof require === 'function') ||\n        typeof window == 'object' ||\n        typeof importScripts == 'function'\n      )\n        throw new Error(\n          'not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)',\n        );\n\n      readBinary = (f) => {\n        if (typeof readbuffer == 'function') {\n          return new Uint8Array(readbuffer(f));\n        }\n        let data = read(f, 'binary');\n        assert(typeof data == 'object');\n        return data;\n      };\n\n      readAsync = (f) => {\n        return new Promise((resolve, reject) => {\n          setTimeout(() => resolve(readBinary(f)));\n        });\n      };\n\n      globalThis.clearTimeout ??= (id) => {};\n\n      // spidermonkey lacks setTimeout but we use it above in readAsync.\n      globalThis.setTimeout ??= (f) => (typeof f == 'function' ? f() : abort());\n\n      if (typeof print != 'undefined') {\n        // Prefer to use print/printErr where they exist, as they usually work better.\n        globalThis.console ??= /** @type{!Console} */ ({});\n        console.log = /** @type{!function(this:Console, ...*): undefined} */ (print);\n        console.warn = console.error = /** @type{!function(this:Console, ...*): undefined} */ (\n          globalThis.printErr ?? print\n        );\n      }\n    } else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {\n      // Note that this includes Node.js workers when relevant (pthreads is enabled).\n      // Node.js workers are detected as a combination of ENVIRONMENT_IS_WORKER and\n      // ENVIRONMENT_IS_NODE.\n      if (ENVIRONMENT_IS_WORKER) {\n        // Check worker, not web, since window could be polyfilled\n        scriptDirectory = self.location.href;\n      } else if (typeof document != 'undefined' && document.currentScript) {\n        // web\n        scriptDirectory = document.currentScript.src;\n      }\n      // When MODULARIZE, this JS may be executed later, after document.currentScript\n      // is gone, so we saved it, and we use it here instead of any other info.\n      if (_scriptName) {\n        scriptDirectory = _scriptName;\n      }\n      // blob urls look like blob:http://site.com/etc/etc and we cannot infer anything from them.\n      // otherwise, slice off the final part of the url to find the script directory.\n      // if scriptDirectory does not contain a slash, lastIndexOf will return -1,\n      // and scriptDirectory will correctly be replaced with an empty string.\n      // If scriptDirectory contains a query (starting with ?) or a fragment (starting with #),\n      // they are removed because they could contain a slash.\n      if (scriptDirectory.startsWith('blob:')) {\n        scriptDirectory = '';\n      } else {\n        scriptDirectory = scriptDirectory.substr(\n          0,\n          scriptDirectory.replace(/[?#].*/, '').lastIndexOf('/') + 1,\n        );\n      }\n\n      if (!(typeof window == 'object' || typeof importScripts == 'function'))\n        throw new Error(\n          'not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)',\n        );\n\n      {\n        // include: web_or_worker_shell_read.js\n        if (ENVIRONMENT_IS_WORKER) {\n          readBinary = (url) => {\n            var xhr = new XMLHttpRequest();\n            xhr.open('GET', url, false);\n            xhr.responseType = 'arraybuffer';\n            xhr.send(null);\n            return new Uint8Array(/** @type{!ArrayBuffer} */ (xhr.response));\n          };\n        }\n\n        readAsync = (url) => {\n          assert(!isFileURI(url), 'readAsync does not work with file:// URLs');\n          return fetch(url, { credentials: 'same-origin' }).then((response) => {\n            if (response.ok) {\n              return response.arrayBuffer();\n            }\n            return Promise.reject(new Error(response.status + ' : ' + response.url));\n          });\n        };\n        // end include: web_or_worker_shell_read.js\n      }\n    } else {\n      throw new Error('environment detection error');\n    }\n\n    var out = Module['print'] || console.log.bind(console);\n    var err = Module['printErr'] || console.error.bind(console);\n\n    // Merge back in the overrides\n    Object.assign(Module, moduleOverrides);\n    // Free the object hierarchy contained in the overrides, this lets the GC\n    // reclaim data used.\n    moduleOverrides = null;\n    checkIncomingModuleAPI();\n\n    // Emit code to handle expected values on the Module object. This applies Module.x\n    // to the proper local x. This has two benefits: first, we only emit it if it is\n    // expected to arrive, and second, by using a local everywhere else that can be\n    // minified.\n\n    if (Module['arguments']) Module['arguments'];\n    legacyModuleProp('arguments', 'arguments_');\n\n    if (Module['thisProgram']) thisProgram = Module['thisProgram'];\n    legacyModuleProp('thisProgram', 'thisProgram');\n\n    // perform assertions in shell.js after we set up out() and err(), as otherwise if an assertion fails it cannot print the message\n    // Assertions on removed incoming Module JS APIs.\n    assert(\n      typeof Module['memoryInitializerPrefixURL'] == 'undefined',\n      'Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead',\n    );\n    assert(\n      typeof Module['pthreadMainPrefixURL'] == 'undefined',\n      'Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead',\n    );\n    assert(\n      typeof Module['cdInitializerPrefixURL'] == 'undefined',\n      'Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead',\n    );\n    assert(\n      typeof Module['filePackagePrefixURL'] == 'undefined',\n      'Module.filePackagePrefixURL option was removed, use Module.locateFile instead',\n    );\n    assert(typeof Module['read'] == 'undefined', 'Module.read option was removed');\n    assert(\n      typeof Module['readAsync'] == 'undefined',\n      'Module.readAsync option was removed (modify readAsync in JS)',\n    );\n    assert(\n      typeof Module['readBinary'] == 'undefined',\n      'Module.readBinary option was removed (modify readBinary in JS)',\n    );\n    assert(\n      typeof Module['setWindowTitle'] == 'undefined',\n      'Module.setWindowTitle option was removed (modify emscripten_set_window_title in JS)',\n    );\n    assert(\n      typeof Module['TOTAL_MEMORY'] == 'undefined',\n      'Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY',\n    );\n    legacyModuleProp('asm', 'wasmExports');\n    legacyModuleProp('readAsync', 'readAsync');\n    legacyModuleProp('readBinary', 'readBinary');\n    legacyModuleProp('setWindowTitle', 'setWindowTitle');\n\n    // end include: shell.js\n\n    // include: preamble.js\n    // === Preamble library stuff ===\n\n    // Documentation for the public APIs defined in this file must be updated in:\n    //    site/source/docs/api_reference/preamble.js.rst\n    // A prebuilt local version of the documentation is available at:\n    //    site/build/text/docs/api_reference/preamble.js.txt\n    // You can also build docs locally as HTML or other formats in site/\n    // An online HTML version (which may be of a different version of Emscripten)\n    //    is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html\n\n    var wasmBinary = Module['wasmBinary'];\n    legacyModuleProp('wasmBinary', 'wasmBinary');\n\n    if (typeof WebAssembly != 'object') {\n      err('no native wasm support detected');\n    }\n\n    // Wasm globals\n\n    var wasmMemory;\n\n    //========================================\n    // Runtime essentials\n    //========================================\n\n    // whether we are quitting the application. no code should run after this.\n    // set in exit() and abort()\n    var ABORT = false;\n\n    // In STRICT mode, we only define assert() when ASSERTIONS is set.  i.e. we\n    // don't define it at all in release modes.  This matches the behaviour of\n    // MINIMAL_RUNTIME.\n    // TODO(sbc): Make this the default even without STRICT enabled.\n    /** @type {function(*, string=)} */\n    function assert(condition, text) {\n      if (!condition) {\n        abort('Assertion failed' + (text ? ': ' + text : ''));\n      }\n    }\n\n    // We used to include malloc/free by default in the past. Show a helpful error in\n    // builds with assertions.\n\n    // Memory management\n\n    var /** @type {!Int8Array} */\n      HEAP8,\n      /** @type {!Uint8Array} */\n      HEAPU8,\n      /** @type {!Int16Array} */\n      HEAP16,\n      /** @type {!Uint16Array} */\n      HEAPU16,\n      /** @type {!Int32Array} */\n      HEAP32,\n      /** @type {!Uint32Array} */\n      HEAPU32,\n      /** @type {!Float32Array} */\n      HEAPF32,\n      /** @type {!Float64Array} */\n      HEAPF64;\n\n    // include: runtime_shared.js\n    function updateMemoryViews() {\n      var b = wasmMemory.buffer;\n      Module['HEAP8'] = HEAP8 = new Int8Array(b);\n      Module['HEAP16'] = HEAP16 = new Int16Array(b);\n      Module['HEAPU8'] = HEAPU8 = new Uint8Array(b);\n      Module['HEAPU16'] = HEAPU16 = new Uint16Array(b);\n      Module['HEAP32'] = HEAP32 = new Int32Array(b);\n      Module['HEAPU32'] = HEAPU32 = new Uint32Array(b);\n      Module['HEAPF32'] = HEAPF32 = new Float32Array(b);\n      Module['HEAPF64'] = HEAPF64 = new Float64Array(b);\n    }\n\n    // end include: runtime_shared.js\n    assert(\n      !Module['STACK_SIZE'],\n      'STACK_SIZE can no longer be set at runtime.  Use -sSTACK_SIZE at link time',\n    );\n\n    assert(\n      typeof Int32Array != 'undefined' &&\n        typeof Float64Array !== 'undefined' &&\n        Int32Array.prototype.subarray != undefined &&\n        Int32Array.prototype.set != undefined,\n      'JS engine does not provide full typed array support',\n    );\n\n    // If memory is defined in wasm, the user can't provide it, or set INITIAL_MEMORY\n    assert(\n      !Module['wasmMemory'],\n      'Use of `wasmMemory` detected.  Use -sIMPORTED_MEMORY to define wasmMemory externally',\n    );\n    assert(\n      !Module['INITIAL_MEMORY'],\n      'Detected runtime INITIAL_MEMORY setting.  Use -sIMPORTED_MEMORY to define wasmMemory dynamically',\n    );\n\n    // include: runtime_stack_check.js\n    // Initializes the stack cookie. Called at the startup of main and at the startup of each thread in pthreads mode.\n    function writeStackCookie() {\n      var max = _emscripten_stack_get_end();\n      assert((max & 3) == 0);\n      // If the stack ends at address zero we write our cookies 4 bytes into the\n      // stack.  This prevents interference with SAFE_HEAP and ASAN which also\n      // monitor writes to address zero.\n      if (max == 0) {\n        max += 4;\n      }\n      // The stack grow downwards towards _emscripten_stack_get_end.\n      // We write cookies to the final two words in the stack and detect if they are\n      // ever overwritten.\n      HEAPU32[max >> 2] = 0x02135467;\n      HEAPU32[(max + 4) >> 2] = 0x89bacdfe;\n      // Also test the global address 0 for integrity.\n      HEAPU32[0 >> 2] = 1668509029;\n    }\n\n    function checkStackCookie() {\n      if (ABORT) return;\n      var max = _emscripten_stack_get_end();\n      // See writeStackCookie().\n      if (max == 0) {\n        max += 4;\n      }\n      var cookie1 = HEAPU32[max >> 2];\n      var cookie2 = HEAPU32[(max + 4) >> 2];\n      if (cookie1 != 0x02135467 || cookie2 != 0x89bacdfe) {\n        abort(\n          `Stack overflow! Stack cookie has been overwritten at ${ptrToString(max)}, expected hex dwords 0x89BACDFE and 0x2135467, but received ${ptrToString(cookie2)} ${ptrToString(cookie1)}`,\n        );\n      }\n      // Also test the global address 0 for integrity.\n      if (HEAPU32[0 >> 2] != 0x63736d65 /* 'emsc' */) {\n        abort('Runtime error: The application has corrupted its heap memory area (address zero)!');\n      }\n    }\n    // end include: runtime_stack_check.js\n    var __ATPRERUN__ = []; // functions called before the runtime is initialized\n    var __ATINIT__ = []; // functions called during startup\n    var __ATPOSTRUN__ = []; // functions called after the main() is called\n\n    var runtimeInitialized = false;\n\n    function preRun() {\n      var preRuns = Module['preRun'];\n      if (preRuns) {\n        if (typeof preRuns == 'function') preRuns = [preRuns];\n        preRuns.forEach(addOnPreRun);\n      }\n      callRuntimeCallbacks(__ATPRERUN__);\n    }\n\n    function initRuntime() {\n      assert(!runtimeInitialized);\n      runtimeInitialized = true;\n\n      checkStackCookie();\n\n      if (!Module['noFSInit'] && !FS.initialized) FS.init();\n      FS.ignorePermissions = false;\n      callRuntimeCallbacks(__ATINIT__);\n    }\n\n    function postRun() {\n      checkStackCookie();\n\n      var postRuns = Module['postRun'];\n      if (postRuns) {\n        if (typeof postRuns == 'function') postRuns = [postRuns];\n        postRuns.forEach(addOnPostRun);\n      }\n\n      callRuntimeCallbacks(__ATPOSTRUN__);\n    }\n\n    function addOnPreRun(cb) {\n      __ATPRERUN__.unshift(cb);\n    }\n\n    function addOnInit(cb) {\n      __ATINIT__.unshift(cb);\n    }\n\n    function addOnPostRun(cb) {\n      __ATPOSTRUN__.unshift(cb);\n    }\n\n    // include: runtime_math.js\n    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/imul\n\n    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/fround\n\n    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/clz32\n\n    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc\n\n    assert(\n      Math.imul,\n      'This browser does not support Math.imul(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill',\n    );\n    assert(\n      Math.fround,\n      'This browser does not support Math.fround(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill',\n    );\n    assert(\n      Math.clz32,\n      'This browser does not support Math.clz32(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill',\n    );\n    assert(\n      Math.trunc,\n      'This browser does not support Math.trunc(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill',\n    );\n    // end include: runtime_math.js\n    // A counter of dependencies for calling run(). If we need to\n    // do asynchronous work before running, increment this and\n    // decrement it. Incrementing must happen in a place like\n    // Module.preRun (used by emcc to add file preloading).\n    // Note that you can add dependencies in preRun, even though\n    // it happens right before run - run will be postponed until\n    // the dependencies are met.\n    var runDependencies = 0;\n    var runDependencyWatcher = null;\n    var dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled\n    var runDependencyTracking = {};\n\n    function getUniqueRunDependency(id) {\n      var orig = id;\n      while (1) {\n        if (!runDependencyTracking[id]) return id;\n        id = orig + Math.random();\n      }\n    }\n\n    function addRunDependency(id) {\n      runDependencies++;\n\n      Module['monitorRunDependencies']?.(runDependencies);\n\n      if (id) {\n        assert(!runDependencyTracking[id]);\n        runDependencyTracking[id] = 1;\n        if (runDependencyWatcher === null && typeof setInterval != 'undefined') {\n          // Check for missing dependencies every few seconds\n          runDependencyWatcher = setInterval(() => {\n            if (ABORT) {\n              clearInterval(runDependencyWatcher);\n              runDependencyWatcher = null;\n              return;\n            }\n            var shown = false;\n            for (var dep in runDependencyTracking) {\n              if (!shown) {\n                shown = true;\n                err('still waiting on run dependencies:');\n              }\n              err(`dependency: ${dep}`);\n            }\n            if (shown) {\n              err('(end of list)');\n            }\n          }, 10000);\n        }\n      } else {\n        err('warning: run dependency added without ID');\n      }\n    }\n\n    function removeRunDependency(id) {\n      runDependencies--;\n\n      Module['monitorRunDependencies']?.(runDependencies);\n\n      if (id) {\n        assert(runDependencyTracking[id]);\n        delete runDependencyTracking[id];\n      } else {\n        err('warning: run dependency removed without ID');\n      }\n      if (runDependencies == 0) {\n        if (runDependencyWatcher !== null) {\n          clearInterval(runDependencyWatcher);\n          runDependencyWatcher = null;\n        }\n        if (dependenciesFulfilled) {\n          var callback = dependenciesFulfilled;\n          dependenciesFulfilled = null;\n          callback(); // can add another dependenciesFulfilled\n        }\n      }\n    }\n\n    /** @param {string|number=} what */\n    function abort(what) {\n      Module['onAbort']?.(what);\n\n      what = 'Aborted(' + what + ')';\n      // TODO(sbc): Should we remove printing and leave it up to whoever\n      // catches the exception?\n      err(what);\n\n      ABORT = true;\n\n      // Use a wasm runtime error, because a JS error might be seen as a foreign\n      // exception, which means we'd run destructors on it. We need the error to\n      // simply make the program stop.\n      // FIXME This approach does not work in Wasm EH because it currently does not assume\n      // all RuntimeErrors are from traps; it decides whether a RuntimeError is from\n      // a trap or not based on a hidden field within the object. So at the moment\n      // we don't have a way of throwing a wasm trap from JS. TODO Make a JS API that\n      // allows this in the wasm spec.\n\n      // Suppress closure compiler warning here. Closure compiler's builtin extern\n      // definition for WebAssembly.RuntimeError claims it takes no arguments even\n      // though it can.\n      // TODO(https://github.com/google/closure-compiler/pull/3913): Remove if/when upstream closure gets fixed.\n      /** @suppress {checkTypes} */\n      var e = new WebAssembly.RuntimeError(what);\n\n      readyPromiseReject(e);\n      // Throw the error whether or not MODULARIZE is set because abort is used\n      // in code paths apart from instantiation where an exception is expected\n      // to be thrown when abort is called.\n      throw e;\n    }\n\n    // include: memoryprofiler.js\n    // end include: memoryprofiler.js\n    // include: URIUtils.js\n    // Prefix of data URIs emitted by SINGLE_FILE and related options.\n    var dataURIPrefix = 'data:application/octet-stream;base64,';\n\n    /**\n     * Indicates whether filename is a base64 data URI.\n     * @noinline\n     */\n    var isDataURI = (filename) => filename.startsWith(dataURIPrefix);\n\n    /**\n     * Indicates whether filename is delivered via file protocol (as opposed to http/https)\n     * @noinline\n     */\n    var isFileURI = (filename) => filename.startsWith('file://');\n    // end include: URIUtils.js\n    function createExportWrapper(name, nargs) {\n      return (...args) => {\n        assert(\n          runtimeInitialized,\n          `native function \\`${name}\\` called before runtime initialization`,\n        );\n        var f = wasmExports[name];\n        assert(f, `exported native function \\`${name}\\` not found`);\n        // Only assert for too many arguments. Too few can be valid since the missing arguments will be zero filled.\n        assert(\n          args.length <= nargs,\n          `native function \\`${name}\\` called with ${args.length} args but expects ${nargs}`,\n        );\n        return f(...args);\n      };\n    }\n\n    // include: runtime_exceptions.js\n    // end include: runtime_exceptions.js\n    function findWasmBinary() {\n      if (Module['locateFile']) {\n        var f = 'pdfium.wasm';\n        if (!isDataURI(f)) {\n          return locateFile(f);\n        }\n        return f;\n      }\n      if (ENVIRONMENT_IS_SHELL) return 'pdfium.wasm';\n      // Use bundler-friendly `new URL(..., import.meta.url)` pattern; works in browsers too.\n      return new URL('pdfium.wasm', import.meta.url).href;\n    }\n\n    var wasmBinaryFile;\n\n    function getBinarySync(file) {\n      if (file == wasmBinaryFile && wasmBinary) {\n        return new Uint8Array(wasmBinary);\n      }\n      if (readBinary) {\n        return readBinary(file);\n      }\n      throw 'both async and sync fetching of the wasm failed';\n    }\n\n    function getBinaryPromise(binaryFile) {\n      // If we don't have the binary yet, load it asynchronously using readAsync.\n      if (!wasmBinary) {\n        // Fetch the binary using readAsync\n        return readAsync(binaryFile).then(\n          (response) => new Uint8Array(/** @type{!ArrayBuffer} */ (response)),\n          // Fall back to getBinarySync if readAsync fails\n          () => getBinarySync(binaryFile),\n        );\n      }\n\n      // Otherwise, getBinarySync should be able to get it synchronously\n      return Promise.resolve().then(() => getBinarySync(binaryFile));\n    }\n\n    function instantiateArrayBuffer(binaryFile, imports, receiver) {\n      return getBinaryPromise(binaryFile)\n        .then((binary) => {\n          return WebAssembly.instantiate(binary, imports);\n        })\n        .then(receiver, (reason) => {\n          err(`failed to asynchronously prepare wasm: ${reason}`);\n\n          // Warn on some common problems.\n          if (isFileURI(wasmBinaryFile)) {\n            err(\n              `warning: Loading from a file URI (${wasmBinaryFile}) is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing`,\n            );\n          }\n          abort(reason);\n        });\n    }\n\n    function instantiateAsync(binary, binaryFile, imports, callback) {\n      if (\n        !binary &&\n        typeof WebAssembly.instantiateStreaming == 'function' &&\n        !isDataURI(binaryFile) &&\n        // Avoid instantiateStreaming() on Node.js environment for now, as while\n        // Node.js v18.1.0 implements it, it does not have a full fetch()\n        // implementation yet.\n        //\n        // Reference:\n        //   https://github.com/emscripten-core/emscripten/pull/16917\n        !false &&\n        typeof fetch == 'function'\n      ) {\n        return fetch(binaryFile, { credentials: 'same-origin' }).then((response) => {\n          // Suppress closure warning here since the upstream definition for\n          // instantiateStreaming only allows Promise<Repsponse> rather than\n          // an actual Response.\n          // TODO(https://github.com/google/closure-compiler/pull/3913): Remove if/when upstream closure is fixed.\n          /** @suppress {checkTypes} */\n          var result = WebAssembly.instantiateStreaming(response, imports);\n\n          return result.then(callback, function (reason) {\n            // We expect the most common failure cause to be a bad MIME type for the binary,\n            // in which case falling back to ArrayBuffer instantiation should work.\n            err(`wasm streaming compile failed: ${reason}`);\n            err('falling back to ArrayBuffer instantiation');\n            return instantiateArrayBuffer(binaryFile, imports, callback);\n          });\n        });\n      }\n      return instantiateArrayBuffer(binaryFile, imports, callback);\n    }\n\n    function getWasmImports() {\n      // prepare imports\n      return {\n        env: wasmImports,\n        wasi_snapshot_preview1: wasmImports,\n      };\n    }\n\n    // Create the wasm instance.\n    // Receives the wasm imports, returns the exports.\n    function createWasm() {\n      var info = getWasmImports();\n      // Load the wasm module and create an instance of using native support in the JS engine.\n      // handle a generated wasm instance, receiving its exports and\n      // performing other necessary setup\n      /** @param {WebAssembly.Module=} module*/\n      function receiveInstance(instance, module) {\n        wasmExports = instance.exports;\n\n        Module['wasmExports'] = wasmExports;\n\n        wasmMemory = wasmExports['memory'];\n\n        assert(wasmMemory, 'memory not found in wasm exports');\n        updateMemoryViews();\n\n        wasmTable = wasmExports['__indirect_function_table'];\n\n        assert(wasmTable, 'table not found in wasm exports');\n\n        addOnInit(wasmExports['__wasm_call_ctors']);\n\n        removeRunDependency('wasm-instantiate');\n        return wasmExports;\n      }\n      // wait for the pthread pool (if any)\n      addRunDependency('wasm-instantiate');\n\n      // Prefer streaming instantiation if available.\n      // Async compilation can be confusing when an error on the page overwrites Module\n      // (for example, if the order of elements is wrong, and the one defining Module is\n      // later), so we save Module and check it later.\n      var trueModule = Module;\n      function receiveInstantiationResult(result) {\n        // 'result' is a ResultObject object which has both the module and instance.\n        // receiveInstance() will swap in the exports (to Module.asm) so they can be called\n        assert(\n          Module === trueModule,\n          'the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?',\n        );\n        trueModule = null;\n        // TODO: Due to Closure regression https://github.com/google/closure-compiler/issues/3193, the above line no longer optimizes out down to the following line.\n        // When the regression is fixed, can restore the above PTHREADS-enabled path.\n        receiveInstance(result['instance']);\n      }\n\n      // User shell pages can write their own Module.instantiateWasm = function(imports, successCallback) callback\n      // to manually instantiate the Wasm module themselves. This allows pages to\n      // run the instantiation parallel to any other async startup actions they are\n      // performing.\n      // Also pthreads and wasm workers initialize the wasm instance through this\n      // path.\n      if (Module['instantiateWasm']) {\n        try {\n          return Module['instantiateWasm'](info, receiveInstance);\n        } catch (e) {\n          err(`Module.instantiateWasm callback failed with error: ${e}`);\n          // If instantiation fails, reject the module ready promise.\n          readyPromiseReject(e);\n        }\n      }\n\n      wasmBinaryFile ??= findWasmBinary();\n\n      // If instantiation fails, reject the module ready promise.\n      instantiateAsync(wasmBinary, wasmBinaryFile, info, receiveInstantiationResult).catch(\n        readyPromiseReject,\n      );\n      return {}; // no exports yet; we'll fill them in later\n    }\n\n    // Globals used by JS i64 conversions (see makeSetValue)\n    var tempDouble;\n    var tempI64;\n\n    // include: runtime_debug.js\n    // Endianness check\n    (() => {\n      var h16 = new Int16Array(1);\n      var h8 = new Int8Array(h16.buffer);\n      h16[0] = 0x6373;\n      if (h8[0] !== 0x73 || h8[1] !== 0x63)\n        throw 'Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)';\n    })();\n\n    if (Module['ENVIRONMENT']) {\n      throw new Error(\n        'Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)',\n      );\n    }\n\n    function legacyModuleProp(prop, newName, incoming = true) {\n      if (!Object.getOwnPropertyDescriptor(Module, prop)) {\n        Object.defineProperty(Module, prop, {\n          configurable: true,\n          get() {\n            let extra = incoming\n              ? ' (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)'\n              : '';\n            abort(`\\`Module.${prop}\\` has been replaced by \\`${newName}\\`` + extra);\n          },\n        });\n      }\n    }\n\n    function ignoredModuleProp(prop) {\n      if (Object.getOwnPropertyDescriptor(Module, prop)) {\n        abort(\n          `\\`Module.${prop}\\` was supplied but \\`${prop}\\` not included in INCOMING_MODULE_JS_API`,\n        );\n      }\n    }\n\n    // forcing the filesystem exports a few things by default\n    function isExportedByForceFilesystem(name) {\n      return (\n        name === 'FS_createPath' ||\n        name === 'FS_createDataFile' ||\n        name === 'FS_createPreloadedFile' ||\n        name === 'FS_unlink' ||\n        name === 'addRunDependency' ||\n        // The old FS has some functionality that WasmFS lacks.\n        name === 'FS_createLazyFile' ||\n        name === 'FS_createDevice' ||\n        name === 'removeRunDependency'\n      );\n    }\n\n    /**\n     * Intercept access to a global symbol.  This enables us to give informative\n     * warnings/errors when folks attempt to use symbols they did not include in\n     * their build, or no symbols that no longer exist.\n     */\n    function hookGlobalSymbolAccess(sym, func) {\n      if (typeof globalThis != 'undefined' && !Object.getOwnPropertyDescriptor(globalThis, sym)) {\n        Object.defineProperty(globalThis, sym, {\n          configurable: true,\n          get() {\n            func();\n            return undefined;\n          },\n        });\n      }\n    }\n\n    function missingGlobal(sym, msg) {\n      hookGlobalSymbolAccess(sym, () => {\n        warnOnce(`\\`${sym}\\` is not longer defined by emscripten. ${msg}`);\n      });\n    }\n\n    missingGlobal('buffer', 'Please use HEAP8.buffer or wasmMemory.buffer');\n    missingGlobal('asm', 'Please use wasmExports instead');\n\n    function missingLibrarySymbol(sym) {\n      hookGlobalSymbolAccess(sym, () => {\n        // Can't `abort()` here because it would break code that does runtime\n        // checks.  e.g. `if (typeof SDL === 'undefined')`.\n        var msg = `\\`${sym}\\` is a library symbol and not included by default; add it to your library.js __deps or to DEFAULT_LIBRARY_FUNCS_TO_INCLUDE on the command line`;\n        // DEFAULT_LIBRARY_FUNCS_TO_INCLUDE requires the name as it appears in\n        // library.js, which means $name for a JS name with no prefix, or name\n        // for a JS name like _name.\n        var librarySymbol = sym;\n        if (!librarySymbol.startsWith('_')) {\n          librarySymbol = '$' + sym;\n        }\n        msg += ` (e.g. -sDEFAULT_LIBRARY_FUNCS_TO_INCLUDE='${librarySymbol}')`;\n        if (isExportedByForceFilesystem(sym)) {\n          msg +=\n            '. Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you';\n        }\n        warnOnce(msg);\n      });\n\n      // Any symbol that is not included from the JS library is also (by definition)\n      // not exported on the Module object.\n      unexportedRuntimeSymbol(sym);\n    }\n\n    function unexportedRuntimeSymbol(sym) {\n      if (!Object.getOwnPropertyDescriptor(Module, sym)) {\n        Object.defineProperty(Module, sym, {\n          configurable: true,\n          get() {\n            var msg = `'${sym}' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the Emscripten FAQ)`;\n            if (isExportedByForceFilesystem(sym)) {\n              msg +=\n                '. Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you';\n            }\n            abort(msg);\n          },\n        });\n      }\n    }\n\n    var callRuntimeCallbacks = (callbacks) => {\n      // Pass the module as the first argument.\n      callbacks.forEach((f) => f(Module));\n    };\n\n    /**\n     * @param {number} ptr\n     * @param {string} type\n     */\n    function getValue(ptr, type = 'i8') {\n      if (type.endsWith('*')) type = '*';\n      switch (type) {\n        case 'i1':\n          return HEAP8[ptr];\n        case 'i8':\n          return HEAP8[ptr];\n        case 'i16':\n          return HEAP16[ptr >> 1];\n        case 'i32':\n          return HEAP32[ptr >> 2];\n        case 'i64':\n          abort('to do getValue(i64) use WASM_BIGINT');\n        case 'float':\n          return HEAPF32[ptr >> 2];\n        case 'double':\n          return HEAPF64[ptr >> 3];\n        case '*':\n          return HEAPU32[ptr >> 2];\n        default:\n          abort(`invalid type for getValue: ${type}`);\n      }\n    }\n\n    Module['noExitRuntime'] || true;\n\n    var ptrToString = (ptr) => {\n      assert(typeof ptr === 'number');\n      // With CAN_ADDRESS_2GB or MEMORY64, pointers are already unsigned.\n      ptr >>>= 0;\n      return '0x' + ptr.toString(16).padStart(8, '0');\n    };\n\n    /**\n     * @param {number} ptr\n     * @param {number} value\n     * @param {string} type\n     */\n    function setValue(ptr, value, type = 'i8') {\n      if (type.endsWith('*')) type = '*';\n      switch (type) {\n        case 'i1':\n          HEAP8[ptr] = value;\n          break;\n        case 'i8':\n          HEAP8[ptr] = value;\n          break;\n        case 'i16':\n          HEAP16[ptr >> 1] = value;\n          break;\n        case 'i32':\n          HEAP32[ptr >> 2] = value;\n          break;\n        case 'i64':\n          abort('to do setValue(i64) use WASM_BIGINT');\n        case 'float':\n          HEAPF32[ptr >> 2] = value;\n          break;\n        case 'double':\n          HEAPF64[ptr >> 3] = value;\n          break;\n        case '*':\n          HEAPU32[ptr >> 2] = value;\n          break;\n        default:\n          abort(`invalid type for setValue: ${type}`);\n      }\n    }\n\n    var stackRestore = (val) => __emscripten_stack_restore(val);\n\n    var stackSave = () => _emscripten_stack_get_current();\n\n    var warnOnce = (text) => {\n      warnOnce.shown ||= {};\n      if (!warnOnce.shown[text]) {\n        warnOnce.shown[text] = 1;\n        err(text);\n      }\n    };\n\n    var UTF8Decoder = typeof TextDecoder != 'undefined' ? new TextDecoder() : undefined;\n\n    /**\n     * Given a pointer 'idx' to a null-terminated UTF8-encoded string in the given\n     * array that contains uint8 values, returns a copy of that string as a\n     * Javascript String object.\n     * heapOrArray is either a regular array, or a JavaScript typed array view.\n     * @param {number=} idx\n     * @param {number=} maxBytesToRead\n     * @return {string}\n     */\n    var UTF8ArrayToString = (heapOrArray, idx = 0, maxBytesToRead = NaN) => {\n      var endIdx = idx + maxBytesToRead;\n      var endPtr = idx;\n      // TextDecoder needs to know the byte length in advance, it doesn't stop on\n      // null terminator by itself.  Also, use the length info to avoid running tiny\n      // strings through TextDecoder, since .subarray() allocates garbage.\n      // (As a tiny code save trick, compare endPtr against endIdx using a negation,\n      // so that undefined/NaN means Infinity)\n      while (heapOrArray[endPtr] && !(endPtr >= endIdx)) ++endPtr;\n\n      if (endPtr - idx > 16 && heapOrArray.buffer && UTF8Decoder) {\n        return UTF8Decoder.decode(heapOrArray.subarray(idx, endPtr));\n      }\n      var str = '';\n      // If building with TextDecoder, we have already computed the string length\n      // above, so test loop end condition against that\n      while (idx < endPtr) {\n        // For UTF8 byte structure, see:\n        // http://en.wikipedia.org/wiki/UTF-8#Description\n        // https://www.ietf.org/rfc/rfc2279.txt\n        // https://tools.ietf.org/html/rfc3629\n        var u0 = heapOrArray[idx++];\n        if (!(u0 & 0x80)) {\n          str += String.fromCharCode(u0);\n          continue;\n        }\n        var u1 = heapOrArray[idx++] & 63;\n        if ((u0 & 0xe0) == 0xc0) {\n          str += String.fromCharCode(((u0 & 31) << 6) | u1);\n          continue;\n        }\n        var u2 = heapOrArray[idx++] & 63;\n        if ((u0 & 0xf0) == 0xe0) {\n          u0 = ((u0 & 15) << 12) | (u1 << 6) | u2;\n        } else {\n          if ((u0 & 0xf8) != 0xf0)\n            warnOnce(\n              'Invalid UTF-8 leading byte ' +\n                ptrToString(u0) +\n                ' encountered when deserializing a UTF-8 string in wasm memory to a JS string!',\n            );\n          u0 = ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | (heapOrArray[idx++] & 63);\n        }\n\n        if (u0 < 0x10000) {\n          str += String.fromCharCode(u0);\n        } else {\n          var ch = u0 - 0x10000;\n          str += String.fromCharCode(0xd800 | (ch >> 10), 0xdc00 | (ch & 0x3ff));\n        }\n      }\n      return str;\n    };\n\n    /**\n     * Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the\n     * emscripten HEAP, returns a copy of that string as a Javascript String object.\n     *\n     * @param {number} ptr\n     * @param {number=} maxBytesToRead - An optional length that specifies the\n     *   maximum number of bytes to read. You can omit this parameter to scan the\n     *   string until the first 0 byte. If maxBytesToRead is passed, and the string\n     *   at [ptr, ptr+maxBytesToReadr[ contains a null byte in the middle, then the\n     *   string will cut short at that byte index (i.e. maxBytesToRead will not\n     *   produce a string of exact length [ptr, ptr+maxBytesToRead[) N.B. mixing\n     *   frequent uses of UTF8ToString() with and without maxBytesToRead may throw\n     *   JS JIT optimizations off, so it is worth to consider consistently using one\n     * @return {string}\n     */\n    var UTF8ToString = (ptr, maxBytesToRead) => {\n      assert(typeof ptr == 'number', `UTF8ToString expects a number (got ${typeof ptr})`);\n      return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : '';\n    };\n    var ___assert_fail = (condition, filename, line, func) => {\n      abort(\n        `Assertion failed: ${UTF8ToString(condition)}, at: ` +\n          [\n            filename ? UTF8ToString(filename) : 'unknown filename',\n            line,\n            func ? UTF8ToString(func) : 'unknown function',\n          ],\n      );\n    };\n\n    /** @suppress {duplicate } */\n    function syscallGetVarargI() {\n      assert(SYSCALLS.varargs != undefined);\n      // the `+` prepended here is necessary to convince the JSCompiler that varargs is indeed a number.\n      var ret = HEAP32[+SYSCALLS.varargs >> 2];\n      SYSCALLS.varargs += 4;\n      return ret;\n    }\n    var syscallGetVarargP = syscallGetVarargI;\n\n    var PATH = {\n      isAbs: (path) => path.charAt(0) === '/',\n      splitPath: (filename) => {\n        var splitPathRe = /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;\n        return splitPathRe.exec(filename).slice(1);\n      },\n      normalizeArray: (parts, allowAboveRoot) => {\n        // if the path tries to go above the root, `up` ends up > 0\n        var up = 0;\n        for (var i = parts.length - 1; i >= 0; i--) {\n          var last = parts[i];\n          if (last === '.') {\n            parts.splice(i, 1);\n          } else if (last === '..') {\n            parts.splice(i, 1);\n            up++;\n          } else if (up) {\n            parts.splice(i, 1);\n            up--;\n          }\n        }\n        // if the path is allowed to go above the root, restore leading ..s\n        if (allowAboveRoot) {\n          for (; up; up--) {\n            parts.unshift('..');\n          }\n        }\n        return parts;\n      },\n      normalize: (path) => {\n        var isAbsolute = PATH.isAbs(path),\n          trailingSlash = path.substr(-1) === '/';\n        // Normalize the path\n        path = PATH.normalizeArray(\n          path.split('/').filter((p) => !!p),\n          !isAbsolute,\n        ).join('/');\n        if (!path && !isAbsolute) {\n          path = '.';\n        }\n        if (path && trailingSlash) {\n          path += '/';\n        }\n        return (isAbsolute ? '/' : '') + path;\n      },\n      dirname: (path) => {\n        var result = PATH.splitPath(path),\n          root = result[0],\n          dir = result[1];\n        if (!root && !dir) {\n          // No dirname whatsoever\n          return '.';\n        }\n        if (dir) {\n          // It has a dirname, strip trailing slash\n          dir = dir.substr(0, dir.length - 1);\n        }\n        return root + dir;\n      },\n      basename: (path) => {\n        // EMSCRIPTEN return '/'' for '/', not an empty string\n        if (path === '/') return '/';\n        path = PATH.normalize(path);\n        path = path.replace(/\\/$/, '');\n        var lastSlash = path.lastIndexOf('/');\n        if (lastSlash === -1) return path;\n        return path.substr(lastSlash + 1);\n      },\n      join: (...paths) => PATH.normalize(paths.join('/')),\n      join2: (l, r) => PATH.normalize(l + '/' + r),\n    };\n\n    var initRandomFill = () => {\n      if (typeof crypto == 'object' && typeof crypto['getRandomValues'] == 'function') {\n        // for modern web browsers\n        return (view) => crypto.getRandomValues(view);\n      }\n      // we couldn't find a proper implementation, as Math.random() is not suitable for /dev/random, see emscripten-core/emscripten/pull/7096\n      abort(\n        'no cryptographic support found for randomDevice. consider polyfilling it if you want to use something insecure like Math.random(), e.g. put this in a --pre-js: var crypto = { getRandomValues: (array) => { for (var i = 0; i < array.length; i++) array[i] = (Math.random()*256)|0 } };',\n      );\n    };\n    var randomFill = (view) => {\n      // Lazily init on the first invocation.\n      return (randomFill = initRandomFill())(view);\n    };\n\n    var PATH_FS = {\n      resolve: (...args) => {\n        var resolvedPath = '',\n          resolvedAbsolute = false;\n        for (var i = args.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n          var path = i >= 0 ? args[i] : FS.cwd();\n          // Skip empty and invalid entries\n          if (typeof path != 'string') {\n            throw new TypeError('Arguments to path.resolve must be strings');\n          } else if (!path) {\n            return ''; // an invalid portion invalidates the whole thing\n          }\n          resolvedPath = path + '/' + resolvedPath;\n          resolvedAbsolute = PATH.isAbs(path);\n        }\n        // At this point the path should be resolved to a full absolute path, but\n        // handle relative paths to be safe (might happen when process.cwd() fails)\n        resolvedPath = PATH.normalizeArray(\n          resolvedPath.split('/').filter((p) => !!p),\n          !resolvedAbsolute,\n        ).join('/');\n        return (resolvedAbsolute ? '/' : '') + resolvedPath || '.';\n      },\n      relative: (from, to) => {\n        from = PATH_FS.resolve(from).substr(1);\n        to = PATH_FS.resolve(to).substr(1);\n        function trim(arr) {\n          var start = 0;\n          for (; start < arr.length; start++) {\n            if (arr[start] !== '') break;\n          }\n          var end = arr.length - 1;\n          for (; end >= 0; end--) {\n            if (arr[end] !== '') break;\n          }\n          if (start > end) return [];\n          return arr.slice(start, end - start + 1);\n        }\n        var fromParts = trim(from.split('/'));\n        var toParts = trim(to.split('/'));\n        var length = Math.min(fromParts.length, toParts.length);\n        var samePartsLength = length;\n        for (var i = 0; i < length; i++) {\n          if (fromParts[i] !== toParts[i]) {\n            samePartsLength = i;\n            break;\n          }\n        }\n        var outputParts = [];\n        for (var i = samePartsLength; i < fromParts.length; i++) {\n          outputParts.push('..');\n        }\n        outputParts = outputParts.concat(toParts.slice(samePartsLength));\n        return outputParts.join('/');\n      },\n    };\n\n    var FS_stdin_getChar_buffer = [];\n\n    var lengthBytesUTF8 = (str) => {\n      var len = 0;\n      for (var i = 0; i < str.length; ++i) {\n        // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code\n        // unit, not a Unicode code point of the character! So decode\n        // UTF16->UTF32->UTF8.\n        // See http://unicode.org/faq/utf_bom.html#utf16-3\n        var c = str.charCodeAt(i); // possibly a lead surrogate\n        if (c <= 0x7f) {\n          len++;\n        } else if (c <= 0x7ff) {\n          len += 2;\n        } else if (c >= 0xd800 && c <= 0xdfff) {\n          len += 4;\n          ++i;\n        } else {\n          len += 3;\n        }\n      }\n      return len;\n    };\n\n    var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {\n      assert(typeof str === 'string', `stringToUTF8Array expects a string (got ${typeof str})`);\n      // Parameter maxBytesToWrite is not optional. Negative values, 0, null,\n      // undefined and false each don't write out any bytes.\n      if (!(maxBytesToWrite > 0)) return 0;\n\n      var startIdx = outIdx;\n      var endIdx = outIdx + maxBytesToWrite - 1; // -1 for string null terminator.\n      for (var i = 0; i < str.length; ++i) {\n        // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code\n        // unit, not a Unicode code point of the character! So decode\n        // UTF16->UTF32->UTF8.\n        // See http://unicode.org/faq/utf_bom.html#utf16-3\n        // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description\n        // and https://www.ietf.org/rfc/rfc2279.txt\n        // and https://tools.ietf.org/html/rfc3629\n        var u = str.charCodeAt(i); // possibly a lead surrogate\n        if (u >= 0xd800 && u <= 0xdfff) {\n          var u1 = str.charCodeAt(++i);\n          u = (0x10000 + ((u & 0x3ff) << 10)) | (u1 & 0x3ff);\n        }\n        if (u <= 0x7f) {\n          if (outIdx >= endIdx) break;\n          heap[outIdx++] = u;\n        } else if (u <= 0x7ff) {\n          if (outIdx + 1 >= endIdx) break;\n          heap[outIdx++] = 0xc0 | (u >> 6);\n          heap[outIdx++] = 0x80 | (u & 63);\n        } else if (u <= 0xffff) {\n          if (outIdx + 2 >= endIdx) break;\n          heap[outIdx++] = 0xe0 | (u >> 12);\n          heap[outIdx++] = 0x80 | ((u >> 6) & 63);\n          heap[outIdx++] = 0x80 | (u & 63);\n        } else {\n          if (outIdx + 3 >= endIdx) break;\n          if (u > 0x10ffff)\n            warnOnce(\n              'Invalid Unicode code point ' +\n                ptrToString(u) +\n                ' encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x10FFFF).',\n            );\n          heap[outIdx++] = 0xf0 | (u >> 18);\n          heap[outIdx++] = 0x80 | ((u >> 12) & 63);\n          heap[outIdx++] = 0x80 | ((u >> 6) & 63);\n          heap[outIdx++] = 0x80 | (u & 63);\n        }\n      }\n      // Null-terminate the pointer to the buffer.\n      heap[outIdx] = 0;\n      return outIdx - startIdx;\n    };\n    /** @type {function(string, boolean=, number=)} */\n    function intArrayFromString(stringy, dontAddNull, length) {\n      var len = length > 0 ? length : lengthBytesUTF8(stringy) + 1;\n      var u8array = new Array(len);\n      var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length);\n      if (dontAddNull) u8array.length = numBytesWritten;\n      return u8array;\n    }\n    var FS_stdin_getChar = () => {\n      if (!FS_stdin_getChar_buffer.length) {\n        var result = null;\n        if (typeof window != 'undefined' && typeof window.prompt == 'function') {\n          // Browser.\n          result = window.prompt('Input: '); // returns null on cancel\n          if (result !== null) {\n            result += '\\n';\n          }\n        } else if (typeof readline == 'function') {\n          // Command line.\n          result = readline();\n          if (result) {\n            result += '\\n';\n          }\n        } else ;\n        if (!result) {\n          return null;\n        }\n        FS_stdin_getChar_buffer = intArrayFromString(result, true);\n      }\n      return FS_stdin_getChar_buffer.shift();\n    };\n    var TTY = {\n      ttys: [],\n      init() {\n        // https://github.com/emscripten-core/emscripten/pull/1555\n        // if (false) {\n        //   // currently, FS.init does not distinguish if process.stdin is a file or TTY\n        //   // device, it always assumes it's a TTY device. because of this, we're forcing\n        //   // process.stdin to UTF8 encoding to at least make stdin reading compatible\n        //   // with text files until FS.init can be refactored.\n        //   process.stdin.setEncoding('utf8');\n        // }\n      },\n      shutdown() {\n        // https://github.com/emscripten-core/emscripten/pull/1555\n        // if (false) {\n        //   // inolen: any idea as to why node -e 'process.stdin.read()' wouldn't exit immediately (with process.stdin being a tty)?\n        //   // isaacs: because now it's reading from the stream, you've expressed interest in it, so that read() kicks off a _read() which creates a ReadReq operation\n        //   // inolen: I thought read() in that case was a synchronous operation that just grabbed some amount of buffered data if it exists?\n        //   // isaacs: it is. but it also triggers a _read() call, which calls readStart() on the handle\n        //   // isaacs: do process.stdin.pause() and i'd think it'd probably close the pending call\n        //   process.stdin.pause();\n        // }\n      },\n      register(dev, ops) {\n        TTY.ttys[dev] = { input: [], output: [], ops: ops };\n        FS.registerDevice(dev, TTY.stream_ops);\n      },\n      stream_ops: {\n        open(stream) {\n          var tty = TTY.ttys[stream.node.rdev];\n          if (!tty) {\n            throw new FS.ErrnoError(43);\n          }\n          stream.tty = tty;\n          stream.seekable = false;\n        },\n        close(stream) {\n          // flush any pending line data\n          stream.tty.ops.fsync(stream.tty);\n        },\n        fsync(stream) {\n          stream.tty.ops.fsync(stream.tty);\n        },\n        read(stream, buffer, offset, length, pos /* ignored */) {\n          if (!stream.tty || !stream.tty.ops.get_char) {\n            throw new FS.ErrnoError(60);\n          }\n          var bytesRead = 0;\n          for (var i = 0; i < length; i++) {\n            var result;\n            try {\n              result = stream.tty.ops.get_char(stream.tty);\n            } catch (e) {\n              throw new FS.ErrnoError(29);\n            }\n            if (result === undefined && bytesRead === 0) {\n              throw new FS.ErrnoError(6);\n            }\n            if (result === null || result === undefined) break;\n            bytesRead++;\n            buffer[offset + i] = result;\n          }\n          if (bytesRead) {\n            stream.node.timestamp = Date.now();\n          }\n          return bytesRead;\n        },\n        write(stream, buffer, offset, length, pos) {\n          if (!stream.tty || !stream.tty.ops.put_char) {\n            throw new FS.ErrnoError(60);\n          }\n          try {\n            for (var i = 0; i < length; i++) {\n              stream.tty.ops.put_char(stream.tty, buffer[offset + i]);\n            }\n          } catch (e) {\n            throw new FS.ErrnoError(29);\n          }\n          if (length) {\n            stream.node.timestamp = Date.now();\n          }\n          return i;\n        },\n      },\n      default_tty_ops: {\n        get_char(tty) {\n          return FS_stdin_getChar();\n        },\n        put_char(tty, val) {\n          if (val === null || val === 10) {\n            out(UTF8ArrayToString(tty.output));\n            tty.output = [];\n          } else {\n            if (val != 0) tty.output.push(val); // val == 0 would cut text output off in the middle.\n          }\n        },\n        fsync(tty) {\n          if (tty.output && tty.output.length > 0) {\n            out(UTF8ArrayToString(tty.output));\n            tty.output = [];\n          }\n        },\n        ioctl_tcgets(tty) {\n          // typical setting\n          return {\n            c_iflag: 25856,\n            c_oflag: 5,\n            c_cflag: 191,\n            c_lflag: 35387,\n            c_cc: [\n              0x03, 0x1c, 0x7f, 0x15, 0x04, 0x00, 0x01, 0x00, 0x11, 0x13, 0x1a, 0x00, 0x12, 0x0f,\n              0x17, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n              0x00, 0x00, 0x00, 0x00,\n            ],\n          };\n        },\n        ioctl_tcsets(tty, optional_actions, data) {\n          // currently just ignore\n          return 0;\n        },\n        ioctl_tiocgwinsz(tty) {\n          return [24, 80];\n        },\n      },\n      default_tty1_ops: {\n        put_char(tty, val) {\n          if (val === null || val === 10) {\n            err(UTF8ArrayToString(tty.output));\n            tty.output = [];\n          } else {\n            if (val != 0) tty.output.push(val);\n          }\n        },\n        fsync(tty) {\n          if (tty.output && tty.output.length > 0) {\n            err(UTF8ArrayToString(tty.output));\n            tty.output = [];\n          }\n        },\n      },\n    };\n\n    var zeroMemory = (address, size) => {\n      HEAPU8.fill(0, address, address + size);\n    };\n\n    var alignMemory = (size, alignment) => {\n      assert(alignment, 'alignment argument is required');\n      return Math.ceil(size / alignment) * alignment;\n    };\n    var mmapAlloc = (size) => {\n      size = alignMemory(size, 65536);\n      var ptr = _emscripten_builtin_memalign(65536, size);\n      if (ptr) zeroMemory(ptr, size);\n      return ptr;\n    };\n    var MEMFS = {\n      ops_table: null,\n      mount(mount) {\n        return MEMFS.createNode(null, '/', 16384 | 511 /* 0777 */, 0);\n      },\n      createNode(parent, name, mode, dev) {\n        if (FS.isBlkdev(mode) || FS.isFIFO(mode)) {\n          // no supported\n          throw new FS.ErrnoError(63);\n        }\n        MEMFS.ops_table ||= {\n          dir: {\n            node: {\n              getattr: MEMFS.node_ops.getattr,\n              setattr: MEMFS.node_ops.setattr,\n              lookup: MEMFS.node_ops.lookup,\n              mknod: MEMFS.node_ops.mknod,\n              rename: MEMFS.node_ops.rename,\n              unlink: MEMFS.node_ops.unlink,\n              rmdir: MEMFS.node_ops.rmdir,\n              readdir: MEMFS.node_ops.readdir,\n              symlink: MEMFS.node_ops.symlink,\n            },\n            stream: {\n              llseek: MEMFS.stream_ops.llseek,\n            },\n          },\n          file: {\n            node: {\n              getattr: MEMFS.node_ops.getattr,\n              setattr: MEMFS.node_ops.setattr,\n            },\n            stream: {\n              llseek: MEMFS.stream_ops.llseek,\n              read: MEMFS.stream_ops.read,\n              write: MEMFS.stream_ops.write,\n              allocate: MEMFS.stream_ops.allocate,\n              mmap: MEMFS.stream_ops.mmap,\n              msync: MEMFS.stream_ops.msync,\n            },\n          },\n          link: {\n            node: {\n              getattr: MEMFS.node_ops.getattr,\n              setattr: MEMFS.node_ops.setattr,\n              readlink: MEMFS.node_ops.readlink,\n            },\n            stream: {},\n          },\n          chrdev: {\n            node: {\n              getattr: MEMFS.node_ops.getattr,\n              setattr: MEMFS.node_ops.setattr,\n            },\n            stream: FS.chrdev_stream_ops,\n          },\n        };\n        var node = FS.createNode(parent, name, mode, dev);\n        if (FS.isDir(node.mode)) {\n          node.node_ops = MEMFS.ops_table.dir.node;\n          node.stream_ops = MEMFS.ops_table.dir.stream;\n          node.contents = {};\n        } else if (FS.isFile(node.mode)) {\n          node.node_ops = MEMFS.ops_table.file.node;\n          node.stream_ops = MEMFS.ops_table.file.stream;\n          node.usedBytes = 0; // The actual number of bytes used in the typed array, as opposed to contents.length which gives the whole capacity.\n          // When the byte data of the file is populated, this will point to either a typed array, or a normal JS array. Typed arrays are preferred\n          // for performance, and used by default. However, typed arrays are not resizable like normal JS arrays are, so there is a small disk size\n          // penalty involved for appending file writes that continuously grow a file similar to std::vector capacity vs used -scheme.\n          node.contents = null;\n        } else if (FS.isLink(node.mode)) {\n          node.node_ops = MEMFS.ops_table.link.node;\n          node.stream_ops = MEMFS.ops_table.link.stream;\n        } else if (FS.isChrdev(node.mode)) {\n          node.node_ops = MEMFS.ops_table.chrdev.node;\n          node.stream_ops = MEMFS.ops_table.chrdev.stream;\n        }\n        node.timestamp = Date.now();\n        // add the new node to the parent\n        if (parent) {\n          parent.contents[name] = node;\n          parent.timestamp = node.timestamp;\n        }\n        return node;\n      },\n      getFileDataAsTypedArray(node) {\n        if (!node.contents) return new Uint8Array(0);\n        if (node.contents.subarray) return node.contents.subarray(0, node.usedBytes); // Make sure to not return excess unused bytes.\n        return new Uint8Array(node.contents);\n      },\n      expandFileStorage(node, newCapacity) {\n        var prevCapacity = node.contents ? node.contents.length : 0;\n        if (prevCapacity >= newCapacity) return; // No need to expand, the storage was already large enough.\n        // Don't expand strictly to the given requested limit if it's only a very small increase, but instead geometrically grow capacity.\n        // For small filesizes (<1MB), perform size*2 geometric increase, but for large sizes, do a much more conservative size*1.125 increase to\n        // avoid overshooting the allocation cap by a very large margin.\n        var CAPACITY_DOUBLING_MAX = 1024 * 1024;\n        newCapacity = Math.max(\n          newCapacity,\n          (prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2.0 : 1.125)) >>> 0,\n        );\n        if (prevCapacity != 0) newCapacity = Math.max(newCapacity, 256); // At minimum allocate 256b for each file when expanding.\n        var oldContents = node.contents;\n        node.contents = new Uint8Array(newCapacity); // Allocate new storage.\n        if (node.usedBytes > 0) node.contents.set(oldContents.subarray(0, node.usedBytes), 0); // Copy old data over to the new storage.\n      },\n      resizeFileStorage(node, newSize) {\n        if (node.usedBytes == newSize) return;\n        if (newSize == 0) {\n          node.contents = null; // Fully decommit when requesting a resize to zero.\n          node.usedBytes = 0;\n        } else {\n          var oldContents = node.contents;\n          node.contents = new Uint8Array(newSize); // Allocate new storage.\n          if (oldContents) {\n            node.contents.set(oldContents.subarray(0, Math.min(newSize, node.usedBytes))); // Copy old data over to the new storage.\n          }\n          node.usedBytes = newSize;\n        }\n      },\n      node_ops: {\n        getattr(node) {\n          var attr = {};\n          // device numbers reuse inode numbers.\n          attr.dev = FS.isChrdev(node.mode) ? node.id : 1;\n          attr.ino = node.id;\n          attr.mode = node.mode;\n          attr.nlink = 1;\n          attr.uid = 0;\n          attr.gid = 0;\n          attr.rdev = node.rdev;\n          if (FS.isDir(node.mode)) {\n            attr.size = 4096;\n          } else if (FS.isFile(node.mode)) {\n            attr.size = node.usedBytes;\n          } else if (FS.isLink(node.mode)) {\n            attr.size = node.link.length;\n          } else {\n            attr.size = 0;\n          }\n          attr.atime = new Date(node.timestamp);\n          attr.mtime = new Date(node.timestamp);\n          attr.ctime = new Date(node.timestamp);\n          // NOTE: In our implementation, st_blocks = Math.ceil(st_size/st_blksize),\n          //       but this is not required by the standard.\n          attr.blksize = 4096;\n          attr.blocks = Math.ceil(attr.size / attr.blksize);\n          return attr;\n        },\n        setattr(node, attr) {\n          if (attr.mode !== undefined) {\n            node.mode = attr.mode;\n          }\n          if (attr.timestamp !== undefined) {\n            node.timestamp = attr.timestamp;\n          }\n          if (attr.size !== undefined) {\n            MEMFS.resizeFileStorage(node, attr.size);\n          }\n        },\n        lookup(parent, name) {\n          throw FS.genericErrors[44];\n        },\n        mknod(parent, name, mode, dev) {\n          return MEMFS.createNode(parent, name, mode, dev);\n        },\n        rename(old_node, new_dir, new_name) {\n          // if we're overwriting a directory at new_name, make sure it's empty.\n          if (FS.isDir(old_node.mode)) {\n            var new_node;\n            try {\n              new_node = FS.lookupNode(new_dir, new_name);\n            } catch (e) {}\n            if (new_node) {\n              for (var i in new_node.contents) {\n                throw new FS.ErrnoError(55);\n              }\n            }\n          }\n          // do the internal rewiring\n          delete old_node.parent.contents[old_node.name];\n          old_node.parent.timestamp = Date.now();\n          old_node.name = new_name;\n          new_dir.contents[new_name] = old_node;\n          new_dir.timestamp = old_node.parent.timestamp;\n        },\n        unlink(parent, name) {\n          delete parent.contents[name];\n          parent.timestamp = Date.now();\n        },\n        rmdir(parent, name) {\n          var node = FS.lookupNode(parent, name);\n          for (var i in node.contents) {\n            throw new FS.ErrnoError(55);\n          }\n          delete parent.contents[name];\n          parent.timestamp = Date.now();\n        },\n        readdir(node) {\n          var entries = ['.', '..'];\n          for (var key of Object.keys(node.contents)) {\n            entries.push(key);\n          }\n          return entries;\n        },\n        symlink(parent, newname, oldpath) {\n          var node = MEMFS.createNode(parent, newname, 511 /* 0777 */ | 40960, 0);\n          node.link = oldpath;\n          return node;\n        },\n        readlink(node) {\n          if (!FS.isLink(node.mode)) {\n            throw new FS.ErrnoError(28);\n          }\n          return node.link;\n        },\n      },\n      stream_ops: {\n        read(stream, buffer, offset, length, position) {\n          var contents = stream.node.contents;\n          if (position >= stream.node.usedBytes) return 0;\n          var size = Math.min(stream.node.usedBytes - position, length);\n          assert(size >= 0);\n          if (size > 8 && contents.subarray) {\n            // non-trivial, and typed array\n            buffer.set(contents.subarray(position, position + size), offset);\n          } else {\n            for (var i = 0; i < size; i++) buffer[offset + i] = contents[position + i];\n          }\n          return size;\n        },\n        write(stream, buffer, offset, length, position, canOwn) {\n          // The data buffer should be a typed array view\n          assert(!(buffer instanceof ArrayBuffer));\n          // If the buffer is located in main memory (HEAP), and if\n          // memory can grow, we can't hold on to references of the\n          // memory buffer, as they may get invalidated. That means we\n          // need to do copy its contents.\n          if (buffer.buffer === HEAP8.buffer) {\n            canOwn = false;\n          }\n\n          if (!length) return 0;\n          var node = stream.node;\n          node.timestamp = Date.now();\n\n          if (buffer.subarray && (!node.contents || node.contents.subarray)) {\n            // This write is from a typed array to a typed array?\n            if (canOwn) {\n              assert(position === 0, 'canOwn must imply no weird position inside the file');\n              node.contents = buffer.subarray(offset, offset + length);\n              node.usedBytes = length;\n              return length;\n            } else if (node.usedBytes === 0 && position === 0) {\n              // If this is a simple first write to an empty file, do a fast set since we don't need to care about old data.\n              node.contents = buffer.slice(offset, offset + length);\n              node.usedBytes = length;\n              return length;\n            } else if (position + length <= node.usedBytes) {\n              // Writing to an already allocated and used subrange of the file?\n              node.contents.set(buffer.subarray(offset, offset + length), position);\n              return length;\n            }\n          }\n\n          // Appending to an existing file and we need to reallocate, or source data did not come as a typed array.\n          MEMFS.expandFileStorage(node, position + length);\n          if (node.contents.subarray && buffer.subarray) {\n            // Use typed array write which is available.\n            node.contents.set(buffer.subarray(offset, offset + length), position);\n          } else {\n            for (var i = 0; i < length; i++) {\n              node.contents[position + i] = buffer[offset + i]; // Or fall back to manual write if not.\n            }\n          }\n          node.usedBytes = Math.max(node.usedBytes, position + length);\n          return length;\n        },\n        llseek(stream, offset, whence) {\n          var position = offset;\n          if (whence === 1) {\n            position += stream.position;\n          } else if (whence === 2) {\n            if (FS.isFile(stream.node.mode)) {\n              position += stream.node.usedBytes;\n            }\n          }\n          if (position < 0) {\n            throw new FS.ErrnoError(28);\n          }\n          return position;\n        },\n        allocate(stream, offset, length) {\n          MEMFS.expandFileStorage(stream.node, offset + length);\n          stream.node.usedBytes = Math.max(stream.node.usedBytes, offset + length);\n        },\n        mmap(stream, length, position, prot, flags) {\n          if (!FS.isFile(stream.node.mode)) {\n            throw new FS.ErrnoError(43);\n          }\n          var ptr;\n          var allocated;\n          var contents = stream.node.contents;\n          // Only make a new copy when MAP_PRIVATE is specified.\n          if (!(flags & 2) && contents && contents.buffer === HEAP8.buffer) {\n            // We can't emulate MAP_SHARED when the file is not backed by the\n            // buffer we're mapping to (e.g. the HEAP buffer).\n            allocated = false;\n            ptr = contents.byteOffset;\n          } else {\n            allocated = true;\n            ptr = mmapAlloc(length);\n            if (!ptr) {\n              throw new FS.ErrnoError(48);\n            }\n            if (contents) {\n              // Try to avoid unnecessary slices.\n              if (position > 0 || position + length < contents.length) {\n                if (contents.subarray) {\n                  contents = contents.subarray(position, position + length);\n                } else {\n                  contents = Array.prototype.slice.call(contents, position, position + length);\n                }\n              }\n              HEAP8.set(contents, ptr);\n            }\n          }\n          return { ptr, allocated };\n        },\n        msync(stream, buffer, offset, length, mmapFlags) {\n          MEMFS.stream_ops.write(stream, buffer, 0, length, offset, false);\n          // should we check if bytesWritten and length are the same?\n          return 0;\n        },\n      },\n    };\n\n    /** @param {boolean=} noRunDep */\n    var asyncLoad = (url, onload, onerror, noRunDep) => {\n      var dep = !noRunDep ? getUniqueRunDependency(`al ${url}`) : '';\n      readAsync(url).then(\n        (arrayBuffer) => {\n          assert(arrayBuffer, `Loading data file \"${url}\" failed (no arrayBuffer).`);\n          onload(new Uint8Array(arrayBuffer));\n          if (dep) removeRunDependency(dep);\n        },\n        (err) => {\n          if (onerror) {\n            onerror();\n          } else {\n            throw `Loading data file \"${url}\" failed.`;\n          }\n        },\n      );\n      if (dep) addRunDependency(dep);\n    };\n\n    var FS_createDataFile = (parent, name, fileData, canRead, canWrite, canOwn) => {\n      FS.createDataFile(parent, name, fileData, canRead, canWrite, canOwn);\n    };\n\n    var preloadPlugins = Module['preloadPlugins'] || [];\n    var FS_handledByPreloadPlugin = (byteArray, fullname, finish, onerror) => {\n      // Ensure plugins are ready.\n      if (typeof Browser != 'undefined') Browser.init();\n\n      var handled = false;\n      preloadPlugins.forEach((plugin) => {\n        if (handled) return;\n        if (plugin['canHandle'](fullname)) {\n          plugin['handle'](byteArray, fullname, finish, onerror);\n          handled = true;\n        }\n      });\n      return handled;\n    };\n    var FS_createPreloadedFile = (\n      parent,\n      name,\n      url,\n      canRead,\n      canWrite,\n      onload,\n      onerror,\n      dontCreateFile,\n      canOwn,\n      preFinish,\n    ) => {\n      // TODO we should allow people to just pass in a complete filename instead\n      // of parent and name being that we just join them anyways\n      var fullname = name ? PATH_FS.resolve(PATH.join2(parent, name)) : parent;\n      var dep = getUniqueRunDependency(`cp ${fullname}`); // might have several active requests for the same fullname\n      function processData(byteArray) {\n        function finish(byteArray) {\n          preFinish?.();\n          if (!dontCreateFile) {\n            FS_createDataFile(parent, name, byteArray, canRead, canWrite, canOwn);\n          }\n          onload?.();\n          removeRunDependency(dep);\n        }\n        if (\n          FS_handledByPreloadPlugin(byteArray, fullname, finish, () => {\n            onerror?.();\n            removeRunDependency(dep);\n          })\n        ) {\n          return;\n        }\n        finish(byteArray);\n      }\n      addRunDependency(dep);\n      if (typeof url == 'string') {\n        asyncLoad(url, processData, onerror);\n      } else {\n        processData(url);\n      }\n    };\n\n    var FS_modeStringToFlags = (str) => {\n      var flagModes = {\n        r: 0,\n        'r+': 2,\n        w: 512 | 64 | 1,\n        'w+': 512 | 64 | 2,\n        a: 1024 | 64 | 1,\n        'a+': 1024 | 64 | 2,\n      };\n      var flags = flagModes[str];\n      if (typeof flags == 'undefined') {\n        throw new Error(`Unknown file open mode: ${str}`);\n      }\n      return flags;\n    };\n\n    var FS_getMode = (canRead, canWrite) => {\n      var mode = 0;\n      if (canRead) mode |= 292 | 73;\n      if (canWrite) mode |= 146;\n      return mode;\n    };\n\n    var strError = (errno) => {\n      return UTF8ToString(_strerror(errno));\n    };\n\n    var ERRNO_CODES = {\n      EPERM: 63,\n      ENOENT: 44,\n      ESRCH: 71,\n      EINTR: 27,\n      EIO: 29,\n      ENXIO: 60,\n      E2BIG: 1,\n      ENOEXEC: 45,\n      EBADF: 8,\n      ECHILD: 12,\n      EAGAIN: 6,\n      EWOULDBLOCK: 6,\n      ENOMEM: 48,\n      EACCES: 2,\n      EFAULT: 21,\n      ENOTBLK: 105,\n      EBUSY: 10,\n      EEXIST: 20,\n      EXDEV: 75,\n      ENODEV: 43,\n      ENOTDIR: 54,\n      EISDIR: 31,\n      EINVAL: 28,\n      ENFILE: 41,\n      EMFILE: 33,\n      ENOTTY: 59,\n      ETXTBSY: 74,\n      EFBIG: 22,\n      ENOSPC: 51,\n      ESPIPE: 70,\n      EROFS: 69,\n      EMLINK: 34,\n      EPIPE: 64,\n      EDOM: 18,\n      ERANGE: 68,\n      ENOMSG: 49,\n      EIDRM: 24,\n      ECHRNG: 106,\n      EL2NSYNC: 156,\n      EL3HLT: 107,\n      EL3RST: 108,\n      ELNRNG: 109,\n      EUNATCH: 110,\n      ENOCSI: 111,\n      EL2HLT: 112,\n      EDEADLK: 16,\n      ENOLCK: 46,\n      EBADE: 113,\n      EBADR: 114,\n      EXFULL: 115,\n      ENOANO: 104,\n      EBADRQC: 103,\n      EBADSLT: 102,\n      EDEADLOCK: 16,\n      EBFONT: 101,\n      ENOSTR: 100,\n      ENODATA: 116,\n      ETIME: 117,\n      ENOSR: 118,\n      ENONET: 119,\n      ENOPKG: 120,\n      EREMOTE: 121,\n      ENOLINK: 47,\n      EADV: 122,\n      ESRMNT: 123,\n      ECOMM: 124,\n      EPROTO: 65,\n      EMULTIHOP: 36,\n      EDOTDOT: 125,\n      EBADMSG: 9,\n      ENOTUNIQ: 126,\n      EBADFD: 127,\n      EREMCHG: 128,\n      ELIBACC: 129,\n      ELIBBAD: 130,\n      ELIBSCN: 131,\n      ELIBMAX: 132,\n      ELIBEXEC: 133,\n      ENOSYS: 52,\n      ENOTEMPTY: 55,\n      ENAMETOOLONG: 37,\n      ELOOP: 32,\n      EOPNOTSUPP: 138,\n      EPFNOSUPPORT: 139,\n      ECONNRESET: 15,\n      ENOBUFS: 42,\n      EAFNOSUPPORT: 5,\n      EPROTOTYPE: 67,\n      ENOTSOCK: 57,\n      ENOPROTOOPT: 50,\n      ESHUTDOWN: 140,\n      ECONNREFUSED: 14,\n      EADDRINUSE: 3,\n      ECONNABORTED: 13,\n      ENETUNREACH: 40,\n      ENETDOWN: 38,\n      ETIMEDOUT: 73,\n      EHOSTDOWN: 142,\n      EHOSTUNREACH: 23,\n      EINPROGRESS: 26,\n      EALREADY: 7,\n      EDESTADDRREQ: 17,\n      EMSGSIZE: 35,\n      EPROTONOSUPPORT: 66,\n      ESOCKTNOSUPPORT: 137,\n      EADDRNOTAVAIL: 4,\n      ENETRESET: 39,\n      EISCONN: 30,\n      ENOTCONN: 53,\n      ETOOMANYREFS: 141,\n      EUSERS: 136,\n      EDQUOT: 19,\n      ESTALE: 72,\n      ENOTSUP: 138,\n      ENOMEDIUM: 148,\n      EILSEQ: 25,\n      EOVERFLOW: 61,\n      ECANCELED: 11,\n      ENOTRECOVERABLE: 56,\n      EOWNERDEAD: 62,\n      ESTRPIPE: 135,\n    };\n    var FS = {\n      root: null,\n      mounts: [],\n      devices: {},\n      streams: [],\n      nextInode: 1,\n      nameTable: null,\n      currentPath: '/',\n      initialized: false,\n      ignorePermissions: true,\n      ErrnoError: class extends Error {\n        // We set the `name` property to be able to identify `FS.ErrnoError`\n        // - the `name` is a standard ECMA-262 property of error objects. Kind of good to have it anyway.\n        // - when using PROXYFS, an error can come from an underlying FS\n        // as different FS objects have their own FS.ErrnoError each,\n        // the test `err instanceof FS.ErrnoError` won't detect an error coming from another filesystem, causing bugs.\n        // we'll use the reliable test `err.name == \"ErrnoError\"` instead\n        constructor(errno) {\n          super(runtimeInitialized ? strError(errno) : '');\n          // TODO(sbc): Use the inline member declaration syntax once we\n          // support it in acorn and closure.\n          this.name = 'ErrnoError';\n          this.errno = errno;\n          for (var key in ERRNO_CODES) {\n            if (ERRNO_CODES[key] === errno) {\n              this.code = key;\n              break;\n            }\n          }\n        }\n      },\n      genericErrors: {},\n      filesystems: null,\n      syncFSRequests: 0,\n      readFiles: {},\n      FSStream: class {\n        constructor() {\n          // TODO(https://github.com/emscripten-core/emscripten/issues/21414):\n          // Use inline field declarations.\n          this.shared = {};\n        }\n        get object() {\n          return this.node;\n        }\n        set object(val) {\n          this.node = val;\n        }\n        get isRead() {\n          return (this.flags & 2097155) !== 1;\n        }\n        get isWrite() {\n          return (this.flags & 2097155) !== 0;\n        }\n        get isAppend() {\n          return this.flags & 1024;\n        }\n        get flags() {\n          return this.shared.flags;\n        }\n        set flags(val) {\n          this.shared.flags = val;\n        }\n        get position() {\n          return this.shared.position;\n        }\n        set position(val) {\n          this.shared.position = val;\n        }\n      },\n      FSNode: class {\n        constructor(parent, name, mode, rdev) {\n          if (!parent) {\n            parent = this; // root node sets parent to itself\n          }\n          this.parent = parent;\n          this.mount = parent.mount;\n          this.mounted = null;\n          this.id = FS.nextInode++;\n          this.name = name;\n          this.mode = mode;\n          this.node_ops = {};\n          this.stream_ops = {};\n          this.rdev = rdev;\n          this.readMode = 292 | 73;\n          this.writeMode = 146;\n        }\n        get read() {\n          return (this.mode & this.readMode) === this.readMode;\n        }\n        set read(val) {\n          val ? (this.mode |= this.readMode) : (this.mode &= ~this.readMode);\n        }\n        get write() {\n          return (this.mode & this.writeMode) === this.writeMode;\n        }\n        set write(val) {\n          val ? (this.mode |= this.writeMode) : (this.mode &= ~this.writeMode);\n        }\n        get isFolder() {\n          return FS.isDir(this.mode);\n        }\n        get isDevice() {\n          return FS.isChrdev(this.mode);\n        }\n      },\n      lookupPath(path, opts = {}) {\n        path = PATH_FS.resolve(path);\n\n        if (!path) return { path: '', node: null };\n\n        var defaults = {\n          follow_mount: true,\n          recurse_count: 0,\n        };\n        opts = Object.assign(defaults, opts);\n\n        if (opts.recurse_count > 8) {\n          // max recursive lookup of 8\n          throw new FS.ErrnoError(32);\n        }\n\n        // split the absolute path\n        var parts = path.split('/').filter((p) => !!p);\n\n        // start at the root\n        var current = FS.root;\n        var current_path = '/';\n\n        for (var i = 0; i < parts.length; i++) {\n          var islast = i === parts.length - 1;\n          if (islast && opts.parent) {\n            // stop resolving\n            break;\n          }\n\n          current = FS.lookupNode(current, parts[i]);\n          current_path = PATH.join2(current_path, parts[i]);\n\n          // jump to the mount's root node if this is a mountpoint\n          if (FS.isMountpoint(current)) {\n            if (!islast || (islast && opts.follow_mount)) {\n              current = current.mounted.root;\n            }\n          }\n\n          // by default, lookupPath will not follow a symlink if it is the final path component.\n          // setting opts.follow = true will override this behavior.\n          if (!islast || opts.follow) {\n            var count = 0;\n            while (FS.isLink(current.mode)) {\n              var link = FS.readlink(current_path);\n              current_path = PATH_FS.resolve(PATH.dirname(current_path), link);\n\n              var lookup = FS.lookupPath(current_path, { recurse_count: opts.recurse_count + 1 });\n              current = lookup.node;\n\n              if (count++ > 40) {\n                // limit max consecutive symlinks to 40 (SYMLOOP_MAX).\n                throw new FS.ErrnoError(32);\n              }\n            }\n          }\n        }\n\n        return { path: current_path, node: current };\n      },\n      getPath(node) {\n        var path;\n        while (true) {\n          if (FS.isRoot(node)) {\n            var mount = node.mount.mountpoint;\n            if (!path) return mount;\n            return mount[mount.length - 1] !== '/' ? `${mount}/${path}` : mount + path;\n          }\n          path = path ? `${node.name}/${path}` : node.name;\n          node = node.parent;\n        }\n      },\n      hashName(parentid, name) {\n        var hash = 0;\n\n        for (var i = 0; i < name.length; i++) {\n          hash = ((hash << 5) - hash + name.charCodeAt(i)) | 0;\n        }\n        return ((parentid + hash) >>> 0) % FS.nameTable.length;\n      },\n      hashAddNode(node) {\n        var hash = FS.hashName(node.parent.id, node.name);\n        node.name_next = FS.nameTable[hash];\n        FS.nameTable[hash] = node;\n      },\n      hashRemoveNode(node) {\n        var hash = FS.hashName(node.parent.id, node.name);\n        if (FS.nameTable[hash] === node) {\n          FS.nameTable[hash] = node.name_next;\n        } else {\n          var current = FS.nameTable[hash];\n          while (current) {\n            if (current.name_next === node) {\n              current.name_next = node.name_next;\n              break;\n            }\n            current = current.name_next;\n          }\n        }\n      },\n      lookupNode(parent, name) {\n        var errCode = FS.mayLookup(parent);\n        if (errCode) {\n          throw new FS.ErrnoError(errCode);\n        }\n        var hash = FS.hashName(parent.id, name);\n        for (var node = FS.nameTable[hash]; node; node = node.name_next) {\n          var nodeName = node.name;\n          if (node.parent.id === parent.id && nodeName === name) {\n            return node;\n          }\n        }\n        // if we failed to find it in the cache, call into the VFS\n        return FS.lookup(parent, name);\n      },\n      createNode(parent, name, mode, rdev) {\n        assert(typeof parent == 'object');\n        var node = new FS.FSNode(parent, name, mode, rdev);\n\n        FS.hashAddNode(node);\n\n        return node;\n      },\n      destroyNode(node) {\n        FS.hashRemoveNode(node);\n      },\n      isRoot(node) {\n        return node === node.parent;\n      },\n      isMountpoint(node) {\n        return !!node.mounted;\n      },\n      isFile(mode) {\n        return (mode & 61440) === 32768;\n      },\n      isDir(mode) {\n        return (mode & 61440) === 16384;\n      },\n      isLink(mode) {\n        return (mode & 61440) === 40960;\n      },\n      isChrdev(mode) {\n        return (mode & 61440) === 8192;\n      },\n      isBlkdev(mode) {\n        return (mode & 61440) === 24576;\n      },\n      isFIFO(mode) {\n        return (mode & 61440) === 4096;\n      },\n      isSocket(mode) {\n        return (mode & 49152) === 49152;\n      },\n      flagsToPermissionString(flag) {\n        var perms = ['r', 'w', 'rw'][flag & 3];\n        if (flag & 512) {\n          perms += 'w';\n        }\n        return perms;\n      },\n      nodePermissions(node, perms) {\n        if (FS.ignorePermissions) {\n          return 0;\n        }\n        // return 0 if any user, group or owner bits are set.\n        if (perms.includes('r') && !(node.mode & 292)) {\n          return 2;\n        } else if (perms.includes('w') && !(node.mode & 146)) {\n          return 2;\n        } else if (perms.includes('x') && !(node.mode & 73)) {\n          return 2;\n        }\n        return 0;\n      },\n      mayLookup(dir) {\n        if (!FS.isDir(dir.mode)) return 54;\n        var errCode = FS.nodePermissions(dir, 'x');\n        if (errCode) return errCode;\n        if (!dir.node_ops.lookup) return 2;\n        return 0;\n      },\n      mayCreate(dir, name) {\n        try {\n          var node = FS.lookupNode(dir, name);\n          return 20;\n        } catch (e) {}\n        return FS.nodePermissions(dir, 'wx');\n      },\n      mayDelete(dir, name, isdir) {\n        var node;\n        try {\n          node = FS.lookupNode(dir, name);\n        } catch (e) {\n          return e.errno;\n        }\n        var errCode = FS.nodePermissions(dir, 'wx');\n        if (errCode) {\n          return errCode;\n        }\n        if (isdir) {\n          if (!FS.isDir(node.mode)) {\n            return 54;\n          }\n          if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) {\n            return 10;\n          }\n        } else {\n          if (FS.isDir(node.mode)) {\n            return 31;\n          }\n        }\n        return 0;\n      },\n      mayOpen(node, flags) {\n        if (!node) {\n          return 44;\n        }\n        if (FS.isLink(node.mode)) {\n          return 32;\n        } else if (FS.isDir(node.mode)) {\n          if (\n            FS.flagsToPermissionString(flags) !== 'r' || // opening for write\n            flags & 512\n          ) {\n            // TODO: check for O_SEARCH? (== search for dir only)\n            return 31;\n          }\n        }\n        return FS.nodePermissions(node, FS.flagsToPermissionString(flags));\n      },\n      MAX_OPEN_FDS: 4096,\n      nextfd() {\n        for (var fd = 0; fd <= FS.MAX_OPEN_FDS; fd++) {\n          if (!FS.streams[fd]) {\n            return fd;\n          }\n        }\n        throw new FS.ErrnoError(33);\n      },\n      getStreamChecked(fd) {\n        var stream = FS.getStream(fd);\n        if (!stream) {\n          throw new FS.ErrnoError(8);\n        }\n        return stream;\n      },\n      getStream: (fd) => FS.streams[fd],\n      createStream(stream, fd = -1) {\n        assert(fd >= -1);\n\n        // clone it, so we can return an instance of FSStream\n        stream = Object.assign(new FS.FSStream(), stream);\n        if (fd == -1) {\n          fd = FS.nextfd();\n        }\n        stream.fd = fd;\n        FS.streams[fd] = stream;\n        return stream;\n      },\n      closeStream(fd) {\n        FS.streams[fd] = null;\n      },\n      dupStream(origStream, fd = -1) {\n        var stream = FS.createStream(origStream, fd);\n        stream.stream_ops?.dup?.(stream);\n        return stream;\n      },\n      chrdev_stream_ops: {\n        open(stream) {\n          var device = FS.getDevice(stream.node.rdev);\n          // override node's stream ops with the device's\n          stream.stream_ops = device.stream_ops;\n          // forward the open call\n          stream.stream_ops.open?.(stream);\n        },\n        llseek() {\n          throw new FS.ErrnoError(70);\n        },\n      },\n      major: (dev) => dev >> 8,\n      minor: (dev) => dev & 0xff,\n      makedev: (ma, mi) => (ma << 8) | mi,\n      registerDevice(dev, ops) {\n        FS.devices[dev] = { stream_ops: ops };\n      },\n      getDevice: (dev) => FS.devices[dev],\n      getMounts(mount) {\n        var mounts = [];\n        var check = [mount];\n\n        while (check.length) {\n          var m = check.pop();\n\n          mounts.push(m);\n\n          check.push(...m.mounts);\n        }\n\n        return mounts;\n      },\n      syncfs(populate, callback) {\n        if (typeof populate == 'function') {\n          callback = populate;\n          populate = false;\n        }\n\n        FS.syncFSRequests++;\n\n        if (FS.syncFSRequests > 1) {\n          err(\n            `warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`,\n          );\n        }\n\n        var mounts = FS.getMounts(FS.root.mount);\n        var completed = 0;\n\n        function doCallback(errCode) {\n          assert(FS.syncFSRequests > 0);\n          FS.syncFSRequests--;\n          return callback(errCode);\n        }\n\n        function done(errCode) {\n          if (errCode) {\n            if (!done.errored) {\n              done.errored = true;\n              return doCallback(errCode);\n            }\n            return;\n          }\n          if (++completed >= mounts.length) {\n            doCallback(null);\n          }\n        }\n\n        // sync all mounts\n        mounts.forEach((mount) => {\n          if (!mount.type.syncfs) {\n            return done(null);\n          }\n          mount.type.syncfs(mount, populate, done);\n        });\n      },\n      mount(type, opts, mountpoint) {\n        if (typeof type == 'string') {\n          // The filesystem was not included, and instead we have an error\n          // message stored in the variable.\n          throw type;\n        }\n        var root = mountpoint === '/';\n        var pseudo = !mountpoint;\n        var node;\n\n        if (root && FS.root) {\n          throw new FS.ErrnoError(10);\n        } else if (!root && !pseudo) {\n          var lookup = FS.lookupPath(mountpoint, { follow_mount: false });\n\n          mountpoint = lookup.path; // use the absolute path\n          node = lookup.node;\n\n          if (FS.isMountpoint(node)) {\n            throw new FS.ErrnoError(10);\n          }\n\n          if (!FS.isDir(node.mode)) {\n            throw new FS.ErrnoError(54);\n          }\n        }\n\n        var mount = {\n          type,\n          opts,\n          mountpoint,\n          mounts: [],\n        };\n\n        // create a root node for the fs\n        var mountRoot = type.mount(mount);\n        mountRoot.mount = mount;\n        mount.root = mountRoot;\n\n        if (root) {\n          FS.root = mountRoot;\n        } else if (node) {\n          // set as a mountpoint\n          node.mounted = mount;\n\n          // add the new mount to the current mount's children\n          if (node.mount) {\n            node.mount.mounts.push(mount);\n          }\n        }\n\n        return mountRoot;\n      },\n      unmount(mountpoint) {\n        var lookup = FS.lookupPath(mountpoint, { follow_mount: false });\n\n        if (!FS.isMountpoint(lookup.node)) {\n          throw new FS.ErrnoError(28);\n        }\n\n        // destroy the nodes for this mount, and all its child mounts\n        var node = lookup.node;\n        var mount = node.mounted;\n        var mounts = FS.getMounts(mount);\n\n        Object.keys(FS.nameTable).forEach((hash) => {\n          var current = FS.nameTable[hash];\n\n          while (current) {\n            var next = current.name_next;\n\n            if (mounts.includes(current.mount)) {\n              FS.destroyNode(current);\n            }\n\n            current = next;\n          }\n        });\n\n        // no longer a mountpoint\n        node.mounted = null;\n\n        // remove this mount from the child mounts\n        var idx = node.mount.mounts.indexOf(mount);\n        assert(idx !== -1);\n        node.mount.mounts.splice(idx, 1);\n      },\n      lookup(parent, name) {\n        return parent.node_ops.lookup(parent, name);\n      },\n      mknod(path, mode, dev) {\n        var lookup = FS.lookupPath(path, { parent: true });\n        var parent = lookup.node;\n        var name = PATH.basename(path);\n        if (!name || name === '.' || name === '..') {\n          throw new FS.ErrnoError(28);\n        }\n        var errCode = FS.mayCreate(parent, name);\n        if (errCode) {\n          throw new FS.ErrnoError(errCode);\n        }\n        if (!parent.node_ops.mknod) {\n          throw new FS.ErrnoError(63);\n        }\n        return parent.node_ops.mknod(parent, name, mode, dev);\n      },\n      create(path, mode) {\n        mode = mode !== undefined ? mode : 438 /* 0666 */;\n        mode &= 4095;\n        mode |= 32768;\n        return FS.mknod(path, mode, 0);\n      },\n      mkdir(path, mode) {\n        mode = mode !== undefined ? mode : 511 /* 0777 */;\n        mode &= 511 | 512;\n        mode |= 16384;\n        return FS.mknod(path, mode, 0);\n      },\n      mkdirTree(path, mode) {\n        var dirs = path.split('/');\n        var d = '';\n        for (var i = 0; i < dirs.length; ++i) {\n          if (!dirs[i]) continue;\n          d += '/' + dirs[i];\n          try {\n            FS.mkdir(d, mode);\n          } catch (e) {\n            if (e.errno != 20) throw e;\n          }\n        }\n      },\n      mkdev(path, mode, dev) {\n        if (typeof dev == 'undefined') {\n          dev = mode;\n          mode = 438 /* 0666 */;\n        }\n        mode |= 8192;\n        return FS.mknod(path, mode, dev);\n      },\n      symlink(oldpath, newpath) {\n        if (!PATH_FS.resolve(oldpath)) {\n          throw new FS.ErrnoError(44);\n        }\n        var lookup = FS.lookupPath(newpath, { parent: true });\n        var parent = lookup.node;\n        if (!parent) {\n          throw new FS.ErrnoError(44);\n        }\n        var newname = PATH.basename(newpath);\n        var errCode = FS.mayCreate(parent, newname);\n        if (errCode) {\n          throw new FS.ErrnoError(errCode);\n        }\n        if (!parent.node_ops.symlink) {\n          throw new FS.ErrnoError(63);\n        }\n        return parent.node_ops.symlink(parent, newname, oldpath);\n      },\n      rename(old_path, new_path) {\n        var old_dirname = PATH.dirname(old_path);\n        var new_dirname = PATH.dirname(new_path);\n        var old_name = PATH.basename(old_path);\n        var new_name = PATH.basename(new_path);\n        // parents must exist\n        var lookup, old_dir, new_dir;\n\n        // let the errors from non existent directories percolate up\n        lookup = FS.lookupPath(old_path, { parent: true });\n        old_dir = lookup.node;\n        lookup = FS.lookupPath(new_path, { parent: true });\n        new_dir = lookup.node;\n\n        if (!old_dir || !new_dir) throw new FS.ErrnoError(44);\n        // need to be part of the same mount\n        if (old_dir.mount !== new_dir.mount) {\n          throw new FS.ErrnoError(75);\n        }\n        // source must exist\n        var old_node = FS.lookupNode(old_dir, old_name);\n        // old path should not be an ancestor of the new path\n        var relative = PATH_FS.relative(old_path, new_dirname);\n        if (relative.charAt(0) !== '.') {\n          throw new FS.ErrnoError(28);\n        }\n        // new path should not be an ancestor of the old path\n        relative = PATH_FS.relative(new_path, old_dirname);\n        if (relative.charAt(0) !== '.') {\n          throw new FS.ErrnoError(55);\n        }\n        // see if the new path already exists\n        var new_node;\n        try {\n          new_node = FS.lookupNode(new_dir, new_name);\n        } catch (e) {\n          // not fatal\n        }\n        // early out if nothing needs to change\n        if (old_node === new_node) {\n          return;\n        }\n        // we'll need to delete the old entry\n        var isdir = FS.isDir(old_node.mode);\n        var errCode = FS.mayDelete(old_dir, old_name, isdir);\n        if (errCode) {\n          throw new FS.ErrnoError(errCode);\n        }\n        // need delete permissions if we'll be overwriting.\n        // need create permissions if new doesn't already exist.\n        errCode = new_node\n          ? FS.mayDelete(new_dir, new_name, isdir)\n          : FS.mayCreate(new_dir, new_name);\n        if (errCode) {\n          throw new FS.ErrnoError(errCode);\n        }\n        if (!old_dir.node_ops.rename) {\n          throw new FS.ErrnoError(63);\n        }\n        if (FS.isMountpoint(old_node) || (new_node && FS.isMountpoint(new_node))) {\n          throw new FS.ErrnoError(10);\n        }\n        // if we are going to change the parent, check write permissions\n        if (new_dir !== old_dir) {\n          errCode = FS.nodePermissions(old_dir, 'w');\n          if (errCode) {\n            throw new FS.ErrnoError(errCode);\n          }\n        }\n        // remove the node from the lookup hash\n        FS.hashRemoveNode(old_node);\n        // do the underlying fs rename\n        try {\n          old_dir.node_ops.rename(old_node, new_dir, new_name);\n          // update old node (we do this here to avoid each backend\n          // needing to)\n          old_node.parent = new_dir;\n        } catch (e) {\n          throw e;\n        } finally {\n          // add the node back to the hash (in case node_ops.rename\n          // changed its name)\n          FS.hashAddNode(old_node);\n        }\n      },\n      rmdir(path) {\n        var lookup = FS.lookupPath(path, { parent: true });\n        var parent = lookup.node;\n        var name = PATH.basename(path);\n        var node = FS.lookupNode(parent, name);\n        var errCode = FS.mayDelete(parent, name, true);\n        if (errCode) {\n          throw new FS.ErrnoError(errCode);\n        }\n        if (!parent.node_ops.rmdir) {\n          throw new FS.ErrnoError(63);\n        }\n        if (FS.isMountpoint(node)) {\n          throw new FS.ErrnoError(10);\n        }\n        parent.node_ops.rmdir(parent, name);\n        FS.destroyNode(node);\n      },\n      readdir(path) {\n        var lookup = FS.lookupPath(path, { follow: true });\n        var node = lookup.node;\n        if (!node.node_ops.readdir) {\n          throw new FS.ErrnoError(54);\n        }\n        return node.node_ops.readdir(node);\n      },\n      unlink(path) {\n        var lookup = FS.lookupPath(path, { parent: true });\n        var parent = lookup.node;\n        if (!parent) {\n          throw new FS.ErrnoError(44);\n        }\n        var name = PATH.basename(path);\n        var node = FS.lookupNode(parent, name);\n        var errCode = FS.mayDelete(parent, name, false);\n        if (errCode) {\n          // According to POSIX, we should map EISDIR to EPERM, but\n          // we instead do what Linux does (and we must, as we use\n          // the musl linux libc).\n          throw new FS.ErrnoError(errCode);\n        }\n        if (!parent.node_ops.unlink) {\n          throw new FS.ErrnoError(63);\n        }\n        if (FS.isMountpoint(node)) {\n          throw new FS.ErrnoError(10);\n        }\n        parent.node_ops.unlink(parent, name);\n        FS.destroyNode(node);\n      },\n      readlink(path) {\n        var lookup = FS.lookupPath(path);\n        var link = lookup.node;\n        if (!link) {\n          throw new FS.ErrnoError(44);\n        }\n        if (!link.node_ops.readlink) {\n          throw new FS.ErrnoError(28);\n        }\n        return PATH_FS.resolve(FS.getPath(link.parent), link.node_ops.readlink(link));\n      },\n      stat(path, dontFollow) {\n        var lookup = FS.lookupPath(path, { follow: !dontFollow });\n        var node = lookup.node;\n        if (!node) {\n          throw new FS.ErrnoError(44);\n        }\n        if (!node.node_ops.getattr) {\n          throw new FS.ErrnoError(63);\n        }\n        return node.node_ops.getattr(node);\n      },\n      lstat(path) {\n        return FS.stat(path, true);\n      },\n      chmod(path, mode, dontFollow) {\n        var node;\n        if (typeof path == 'string') {\n          var lookup = FS.lookupPath(path, { follow: !dontFollow });\n          node = lookup.node;\n        } else {\n          node = path;\n        }\n        if (!node.node_ops.setattr) {\n          throw new FS.ErrnoError(63);\n        }\n        node.node_ops.setattr(node, {\n          mode: (mode & 4095) | (node.mode & ~4095),\n          timestamp: Date.now(),\n        });\n      },\n      lchmod(path, mode) {\n        FS.chmod(path, mode, true);\n      },\n      fchmod(fd, mode) {\n        var stream = FS.getStreamChecked(fd);\n        FS.chmod(stream.node, mode);\n      },\n      chown(path, uid, gid, dontFollow) {\n        var node;\n        if (typeof path == 'string') {\n          var lookup = FS.lookupPath(path, { follow: !dontFollow });\n          node = lookup.node;\n        } else {\n          node = path;\n        }\n        if (!node.node_ops.setattr) {\n          throw new FS.ErrnoError(63);\n        }\n        node.node_ops.setattr(node, {\n          timestamp: Date.now(),\n          // we ignore the uid / gid for now\n        });\n      },\n      lchown(path, uid, gid) {\n        FS.chown(path, uid, gid, true);\n      },\n      fchown(fd, uid, gid) {\n        var stream = FS.getStreamChecked(fd);\n        FS.chown(stream.node, uid, gid);\n      },\n      truncate(path, len) {\n        if (len < 0) {\n          throw new FS.ErrnoError(28);\n        }\n        var node;\n        if (typeof path == 'string') {\n          var lookup = FS.lookupPath(path, { follow: true });\n          node = lookup.node;\n        } else {\n          node = path;\n        }\n        if (!node.node_ops.setattr) {\n          throw new FS.ErrnoError(63);\n        }\n        if (FS.isDir(node.mode)) {\n          throw new FS.ErrnoError(31);\n        }\n        if (!FS.isFile(node.mode)) {\n          throw new FS.ErrnoError(28);\n        }\n        var errCode = FS.nodePermissions(node, 'w');\n        if (errCode) {\n          throw new FS.ErrnoError(errCode);\n        }\n        node.node_ops.setattr(node, {\n          size: len,\n          timestamp: Date.now(),\n        });\n      },\n      ftruncate(fd, len) {\n        var stream = FS.getStreamChecked(fd);\n        if ((stream.flags & 2097155) === 0) {\n          throw new FS.ErrnoError(28);\n        }\n        FS.truncate(stream.node, len);\n      },\n      utime(path, atime, mtime) {\n        var lookup = FS.lookupPath(path, { follow: true });\n        var node = lookup.node;\n        node.node_ops.setattr(node, {\n          timestamp: Math.max(atime, mtime),\n        });\n      },\n      open(path, flags, mode) {\n        if (path === '') {\n          throw new FS.ErrnoError(44);\n        }\n        flags = typeof flags == 'string' ? FS_modeStringToFlags(flags) : flags;\n        if (flags & 64) {\n          mode = typeof mode == 'undefined' ? 438 /* 0666 */ : mode;\n          mode = (mode & 4095) | 32768;\n        } else {\n          mode = 0;\n        }\n        var node;\n        if (typeof path == 'object') {\n          node = path;\n        } else {\n          path = PATH.normalize(path);\n          try {\n            var lookup = FS.lookupPath(path, {\n              follow: !(flags & 131072),\n            });\n            node = lookup.node;\n          } catch (e) {\n            // ignore\n          }\n        }\n        // perhaps we need to create the node\n        var created = false;\n        if (flags & 64) {\n          if (node) {\n            // if O_CREAT and O_EXCL are set, error out if the node already exists\n            if (flags & 128) {\n              throw new FS.ErrnoError(20);\n            }\n          } else {\n            // node doesn't exist, try to create it\n            node = FS.mknod(path, mode, 0);\n            created = true;\n          }\n        }\n        if (!node) {\n          throw new FS.ErrnoError(44);\n        }\n        // can't truncate a device\n        if (FS.isChrdev(node.mode)) {\n          flags &= ~512;\n        }\n        // if asked only for a directory, then this must be one\n        if (flags & 65536 && !FS.isDir(node.mode)) {\n          throw new FS.ErrnoError(54);\n        }\n        // check permissions, if this is not a file we just created now (it is ok to\n        // create and write to a file with read-only permissions; it is read-only\n        // for later use)\n        if (!created) {\n          var errCode = FS.mayOpen(node, flags);\n          if (errCode) {\n            throw new FS.ErrnoError(errCode);\n          }\n        }\n        // do truncation if necessary\n        if (flags & 512 && !created) {\n          FS.truncate(node, 0);\n        }\n        // we've already handled these, don't pass down to the underlying vfs\n        flags &= ~(128 | 512 | 131072);\n\n        // register the stream with the filesystem\n        var stream = FS.createStream({\n          node,\n          path: FS.getPath(node), // we want the absolute path to the node\n          flags,\n          seekable: true,\n          position: 0,\n          stream_ops: node.stream_ops,\n          // used by the file family libc calls (fopen, fwrite, ferror, etc.)\n          ungotten: [],\n          error: false,\n        });\n        // call the new stream's open function\n        if (stream.stream_ops.open) {\n          stream.stream_ops.open(stream);\n        }\n        if (Module['logReadFiles'] && !(flags & 1)) {\n          if (!(path in FS.readFiles)) {\n            FS.readFiles[path] = 1;\n          }\n        }\n        return stream;\n      },\n      close(stream) {\n        if (FS.isClosed(stream)) {\n          throw new FS.ErrnoError(8);\n        }\n        if (stream.getdents) stream.getdents = null; // free readdir state\n        try {\n          if (stream.stream_ops.close) {\n            stream.stream_ops.close(stream);\n          }\n        } catch (e) {\n          throw e;\n        } finally {\n          FS.closeStream(stream.fd);\n        }\n        stream.fd = null;\n      },\n      isClosed(stream) {\n        return stream.fd === null;\n      },\n      llseek(stream, offset, whence) {\n        if (FS.isClosed(stream)) {\n          throw new FS.ErrnoError(8);\n        }\n        if (!stream.seekable || !stream.stream_ops.llseek) {\n          throw new FS.ErrnoError(70);\n        }\n        if (whence != 0 && whence != 1 && whence != 2) {\n          throw new FS.ErrnoError(28);\n        }\n        stream.position = stream.stream_ops.llseek(stream, offset, whence);\n        stream.ungotten = [];\n        return stream.position;\n      },\n      read(stream, buffer, offset, length, position) {\n        assert(offset >= 0);\n        if (length < 0 || position < 0) {\n          throw new FS.ErrnoError(28);\n        }\n        if (FS.isClosed(stream)) {\n          throw new FS.ErrnoError(8);\n        }\n        if ((stream.flags & 2097155) === 1) {\n          throw new FS.ErrnoError(8);\n        }\n        if (FS.isDir(stream.node.mode)) {\n          throw new FS.ErrnoError(31);\n        }\n        if (!stream.stream_ops.read) {\n          throw new FS.ErrnoError(28);\n        }\n        var seeking = typeof position != 'undefined';\n        if (!seeking) {\n          position = stream.position;\n        } else if (!stream.seekable) {\n          throw new FS.ErrnoError(70);\n        }\n        var bytesRead = stream.stream_ops.read(stream, buffer, offset, length, position);\n        if (!seeking) stream.position += bytesRead;\n        return bytesRead;\n      },\n      write(stream, buffer, offset, length, position, canOwn) {\n        assert(offset >= 0);\n        if (length < 0 || position < 0) {\n          throw new FS.ErrnoError(28);\n        }\n        if (FS.isClosed(stream)) {\n          throw new FS.ErrnoError(8);\n        }\n        if ((stream.flags & 2097155) === 0) {\n          throw new FS.ErrnoError(8);\n        }\n        if (FS.isDir(stream.node.mode)) {\n          throw new FS.ErrnoError(31);\n        }\n        if (!stream.stream_ops.write) {\n          throw new FS.ErrnoError(28);\n        }\n        if (stream.seekable && stream.flags & 1024) {\n          // seek to the end before writing in append mode\n          FS.llseek(stream, 0, 2);\n        }\n        var seeking = typeof position != 'undefined';\n        if (!seeking) {\n          position = stream.position;\n        } else if (!stream.seekable) {\n          throw new FS.ErrnoError(70);\n        }\n        var bytesWritten = stream.stream_ops.write(\n          stream,\n          buffer,\n          offset,\n          length,\n          position,\n          canOwn,\n        );\n        if (!seeking) stream.position += bytesWritten;\n        return bytesWritten;\n      },\n      allocate(stream, offset, length) {\n        if (FS.isClosed(stream)) {\n          throw new FS.ErrnoError(8);\n        }\n        if (offset < 0 || length <= 0) {\n          throw new FS.ErrnoError(28);\n        }\n        if ((stream.flags & 2097155) === 0) {\n          throw new FS.ErrnoError(8);\n        }\n        if (!FS.isFile(stream.node.mode) && !FS.isDir(stream.node.mode)) {\n          throw new FS.ErrnoError(43);\n        }\n        if (!stream.stream_ops.allocate) {\n          throw new FS.ErrnoError(138);\n        }\n        stream.stream_ops.allocate(stream, offset, length);\n      },\n      mmap(stream, length, position, prot, flags) {\n        // User requests writing to file (prot & PROT_WRITE != 0).\n        // Checking if we have permissions to write to the file unless\n        // MAP_PRIVATE flag is set. According to POSIX spec it is possible\n        // to write to file opened in read-only mode with MAP_PRIVATE flag,\n        // as all modifications will be visible only in the memory of\n        // the current process.\n        if ((prot & 2) !== 0 && (flags & 2) === 0 && (stream.flags & 2097155) !== 2) {\n          throw new FS.ErrnoError(2);\n        }\n        if ((stream.flags & 2097155) === 1) {\n          throw new FS.ErrnoError(2);\n        }\n        if (!stream.stream_ops.mmap) {\n          throw new FS.ErrnoError(43);\n        }\n        if (!length) {\n          throw new FS.ErrnoError(28);\n        }\n        return stream.stream_ops.mmap(stream, length, position, prot, flags);\n      },\n      msync(stream, buffer, offset, length, mmapFlags) {\n        assert(offset >= 0);\n        if (!stream.stream_ops.msync) {\n          return 0;\n        }\n        return stream.stream_ops.msync(stream, buffer, offset, length, mmapFlags);\n      },\n      ioctl(stream, cmd, arg) {\n        if (!stream.stream_ops.ioctl) {\n          throw new FS.ErrnoError(59);\n        }\n        return stream.stream_ops.ioctl(stream, cmd, arg);\n      },\n      readFile(path, opts = {}) {\n        opts.flags = opts.flags || 0;\n        opts.encoding = opts.encoding || 'binary';\n        if (opts.encoding !== 'utf8' && opts.encoding !== 'binary') {\n          throw new Error(`Invalid encoding type \"${opts.encoding}\"`);\n        }\n        var ret;\n        var stream = FS.open(path, opts.flags);\n        var stat = FS.stat(path);\n        var length = stat.size;\n        var buf = new Uint8Array(length);\n        FS.read(stream, buf, 0, length, 0);\n        if (opts.encoding === 'utf8') {\n          ret = UTF8ArrayToString(buf);\n        } else if (opts.encoding === 'binary') {\n          ret = buf;\n        }\n        FS.close(stream);\n        return ret;\n      },\n      writeFile(path, data, opts = {}) {\n        opts.flags = opts.flags || 577;\n        var stream = FS.open(path, opts.flags, opts.mode);\n        if (typeof data == 'string') {\n          var buf = new Uint8Array(lengthBytesUTF8(data) + 1);\n          var actualNumBytes = stringToUTF8Array(data, buf, 0, buf.length);\n          FS.write(stream, buf, 0, actualNumBytes, undefined, opts.canOwn);\n        } else if (ArrayBuffer.isView(data)) {\n          FS.write(stream, data, 0, data.byteLength, undefined, opts.canOwn);\n        } else {\n          throw new Error('Unsupported data type');\n        }\n        FS.close(stream);\n      },\n      cwd: () => FS.currentPath,\n      chdir(path) {\n        var lookup = FS.lookupPath(path, { follow: true });\n        if (lookup.node === null) {\n          throw new FS.ErrnoError(44);\n        }\n        if (!FS.isDir(lookup.node.mode)) {\n          throw new FS.ErrnoError(54);\n        }\n        var errCode = FS.nodePermissions(lookup.node, 'x');\n        if (errCode) {\n          throw new FS.ErrnoError(errCode);\n        }\n        FS.currentPath = lookup.path;\n      },\n      createDefaultDirectories() {\n        FS.mkdir('/tmp');\n        FS.mkdir('/home');\n        FS.mkdir('/home/web_user');\n      },\n      createDefaultDevices() {\n        // create /dev\n        FS.mkdir('/dev');\n        // setup /dev/null\n        FS.registerDevice(FS.makedev(1, 3), {\n          read: () => 0,\n          write: (stream, buffer, offset, length, pos) => length,\n        });\n        FS.mkdev('/dev/null', FS.makedev(1, 3));\n        // setup /dev/tty and /dev/tty1\n        // stderr needs to print output using err() rather than out()\n        // so we register a second tty just for it.\n        TTY.register(FS.makedev(5, 0), TTY.default_tty_ops);\n        TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops);\n        FS.mkdev('/dev/tty', FS.makedev(5, 0));\n        FS.mkdev('/dev/tty1', FS.makedev(6, 0));\n        // setup /dev/[u]random\n        // use a buffer to avoid overhead of individual crypto calls per byte\n        var randomBuffer = new Uint8Array(1024),\n          randomLeft = 0;\n        var randomByte = () => {\n          if (randomLeft === 0) {\n            randomLeft = randomFill(randomBuffer).byteLength;\n          }\n          return randomBuffer[--randomLeft];\n        };\n        FS.createDevice('/dev', 'random', randomByte);\n        FS.createDevice('/dev', 'urandom', randomByte);\n        // we're not going to emulate the actual shm device,\n        // just create the tmp dirs that reside in it commonly\n        FS.mkdir('/dev/shm');\n        FS.mkdir('/dev/shm/tmp');\n      },\n      createSpecialDirectories() {\n        // create /proc/self/fd which allows /proc/self/fd/6 => readlink gives the\n        // name of the stream for fd 6 (see test_unistd_ttyname)\n        FS.mkdir('/proc');\n        var proc_self = FS.mkdir('/proc/self');\n        FS.mkdir('/proc/self/fd');\n        FS.mount(\n          {\n            mount() {\n              var node = FS.createNode(proc_self, 'fd', 16384 | 511 /* 0777 */, 73);\n              node.node_ops = {\n                lookup(parent, name) {\n                  var fd = +name;\n                  var stream = FS.getStreamChecked(fd);\n                  var ret = {\n                    parent: null,\n                    mount: { mountpoint: 'fake' },\n                    node_ops: { readlink: () => stream.path },\n                  };\n                  ret.parent = ret; // make it look like a simple root node\n                  return ret;\n                },\n              };\n              return node;\n            },\n          },\n          {},\n          '/proc/self/fd',\n        );\n      },\n      createStandardStreams(input, output, error) {\n        // TODO deprecate the old functionality of a single\n        // input / output callback and that utilizes FS.createDevice\n        // and instead require a unique set of stream ops\n\n        // by default, we symlink the standard streams to the\n        // default tty devices. however, if the standard streams\n        // have been overwritten we create a unique device for\n        // them instead.\n        if (input) {\n          FS.createDevice('/dev', 'stdin', input);\n        } else {\n          FS.symlink('/dev/tty', '/dev/stdin');\n        }\n        if (output) {\n          FS.createDevice('/dev', 'stdout', null, output);\n        } else {\n          FS.symlink('/dev/tty', '/dev/stdout');\n        }\n        if (error) {\n          FS.createDevice('/dev', 'stderr', null, error);\n        } else {\n          FS.symlink('/dev/tty1', '/dev/stderr');\n        }\n\n        // open default streams for the stdin, stdout and stderr devices\n        var stdin = FS.open('/dev/stdin', 0);\n        var stdout = FS.open('/dev/stdout', 1);\n        var stderr = FS.open('/dev/stderr', 1);\n        assert(stdin.fd === 0, `invalid handle for stdin (${stdin.fd})`);\n        assert(stdout.fd === 1, `invalid handle for stdout (${stdout.fd})`);\n        assert(stderr.fd === 2, `invalid handle for stderr (${stderr.fd})`);\n      },\n      staticInit() {\n        // Some errors may happen quite a bit, to avoid overhead we reuse them (and suffer a lack of stack info)\n        [44].forEach((code) => {\n          FS.genericErrors[code] = new FS.ErrnoError(code);\n          FS.genericErrors[code].stack = '<generic error, no stack>';\n        });\n\n        FS.nameTable = new Array(4096);\n\n        FS.mount(MEMFS, {}, '/');\n\n        FS.createDefaultDirectories();\n        FS.createDefaultDevices();\n        FS.createSpecialDirectories();\n\n        FS.filesystems = {\n          MEMFS: MEMFS,\n        };\n      },\n      init(input, output, error) {\n        assert(\n          !FS.initialized,\n          'FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)',\n        );\n        FS.initialized = true;\n\n        // Allow Module.stdin etc. to provide defaults, if none explicitly passed to us here\n        input ??= Module['stdin'];\n        output ??= Module['stdout'];\n        error ??= Module['stderr'];\n\n        FS.createStandardStreams(input, output, error);\n      },\n      quit() {\n        FS.initialized = false;\n        // force-flush all streams, so we get musl std streams printed out\n        _fflush(0);\n        // close all of our streams\n        for (var i = 0; i < FS.streams.length; i++) {\n          var stream = FS.streams[i];\n          if (!stream) {\n            continue;\n          }\n          FS.close(stream);\n        }\n      },\n      findObject(path, dontResolveLastLink) {\n        var ret = FS.analyzePath(path, dontResolveLastLink);\n        if (!ret.exists) {\n          return null;\n        }\n        return ret.object;\n      },\n      analyzePath(path, dontResolveLastLink) {\n        // operate from within the context of the symlink's target\n        try {\n          var lookup = FS.lookupPath(path, { follow: !dontResolveLastLink });\n          path = lookup.path;\n        } catch (e) {}\n        var ret = {\n          isRoot: false,\n          exists: false,\n          error: 0,\n          name: null,\n          path: null,\n          object: null,\n          parentExists: false,\n          parentPath: null,\n          parentObject: null,\n        };\n        try {\n          var lookup = FS.lookupPath(path, { parent: true });\n          ret.parentExists = true;\n          ret.parentPath = lookup.path;\n          ret.parentObject = lookup.node;\n          ret.name = PATH.basename(path);\n          lookup = FS.lookupPath(path, { follow: !dontResolveLastLink });\n          ret.exists = true;\n          ret.path = lookup.path;\n          ret.object = lookup.node;\n          ret.name = lookup.node.name;\n          ret.isRoot = lookup.path === '/';\n        } catch (e) {\n          ret.error = e.errno;\n        }\n        return ret;\n      },\n      createPath(parent, path, canRead, canWrite) {\n        parent = typeof parent == 'string' ? parent : FS.getPath(parent);\n        var parts = path.split('/').reverse();\n        while (parts.length) {\n          var part = parts.pop();\n          if (!part) continue;\n          var current = PATH.join2(parent, part);\n          try {\n            FS.mkdir(current);\n          } catch (e) {\n            // ignore EEXIST\n          }\n          parent = current;\n        }\n        return current;\n      },\n      createFile(parent, name, properties, canRead, canWrite) {\n        var path = PATH.join2(typeof parent == 'string' ? parent : FS.getPath(parent), name);\n        var mode = FS_getMode(canRead, canWrite);\n        return FS.create(path, mode);\n      },\n      createDataFile(parent, name, data, canRead, canWrite, canOwn) {\n        var path = name;\n        if (parent) {\n          parent = typeof parent == 'string' ? parent : FS.getPath(parent);\n          path = name ? PATH.join2(parent, name) : parent;\n        }\n        var mode = FS_getMode(canRead, canWrite);\n        var node = FS.create(path, mode);\n        if (data) {\n          if (typeof data == 'string') {\n            var arr = new Array(data.length);\n            for (var i = 0, len = data.length; i < len; ++i) arr[i] = data.charCodeAt(i);\n            data = arr;\n          }\n          // make sure we can write to the file\n          FS.chmod(node, mode | 146);\n          var stream = FS.open(node, 577);\n          FS.write(stream, data, 0, data.length, 0, canOwn);\n          FS.close(stream);\n          FS.chmod(node, mode);\n        }\n      },\n      createDevice(parent, name, input, output) {\n        var path = PATH.join2(typeof parent == 'string' ? parent : FS.getPath(parent), name);\n        var mode = FS_getMode(!!input, !!output);\n        FS.createDevice.major ??= 64;\n        var dev = FS.makedev(FS.createDevice.major++, 0);\n        // Create a fake device that a set of stream ops to emulate\n        // the old behavior.\n        FS.registerDevice(dev, {\n          open(stream) {\n            stream.seekable = false;\n          },\n          close(stream) {\n            // flush any pending line data\n            if (output?.buffer?.length) {\n              output(10);\n            }\n          },\n          read(stream, buffer, offset, length, pos /* ignored */) {\n            var bytesRead = 0;\n            for (var i = 0; i < length; i++) {\n              var result;\n              try {\n                result = input();\n              } catch (e) {\n                throw new FS.ErrnoError(29);\n              }\n              if (result === undefined && bytesRead === 0) {\n                throw new FS.ErrnoError(6);\n              }\n              if (result === null || result === undefined) break;\n              bytesRead++;\n              buffer[offset + i] = result;\n            }\n            if (bytesRead) {\n              stream.node.timestamp = Date.now();\n            }\n            return bytesRead;\n          },\n          write(stream, buffer, offset, length, pos) {\n            for (var i = 0; i < length; i++) {\n              try {\n                output(buffer[offset + i]);\n              } catch (e) {\n                throw new FS.ErrnoError(29);\n              }\n            }\n            if (length) {\n              stream.node.timestamp = Date.now();\n            }\n            return i;\n          },\n        });\n        return FS.mkdev(path, mode, dev);\n      },\n      forceLoadFile(obj) {\n        if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true;\n        if (typeof XMLHttpRequest != 'undefined') {\n          throw new Error(\n            'Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.',\n          );\n        } else {\n          // Command-line.\n          try {\n            obj.contents = readBinary(obj.url);\n            obj.usedBytes = obj.contents.length;\n          } catch (e) {\n            throw new FS.ErrnoError(29);\n          }\n        }\n      },\n      createLazyFile(parent, name, url, canRead, canWrite) {\n        // Lazy chunked Uint8Array (implements get and length from Uint8Array).\n        // Actual getting is abstracted away for eventual reuse.\n        class LazyUint8Array {\n          constructor() {\n            this.lengthKnown = false;\n            this.chunks = []; // Loaded chunks. Index is the chunk number\n          }\n          get(idx) {\n            if (idx > this.length - 1 || idx < 0) {\n              return undefined;\n            }\n            var chunkOffset = idx % this.chunkSize;\n            var chunkNum = (idx / this.chunkSize) | 0;\n            return this.getter(chunkNum)[chunkOffset];\n          }\n          setDataGetter(getter) {\n            this.getter = getter;\n          }\n          cacheLength() {\n            // Find length\n            var xhr = new XMLHttpRequest();\n            xhr.open('HEAD', url, false);\n            xhr.send(null);\n            if (!((xhr.status >= 200 && xhr.status < 300) || xhr.status === 304))\n              throw new Error(\"Couldn't load \" + url + '. Status: ' + xhr.status);\n            var datalength = Number(xhr.getResponseHeader('Content-length'));\n            var header;\n            var hasByteServing =\n              (header = xhr.getResponseHeader('Accept-Ranges')) && header === 'bytes';\n            var usesGzip =\n              (header = xhr.getResponseHeader('Content-Encoding')) && header === 'gzip';\n\n            var chunkSize = 1024 * 1024; // Chunk size in bytes\n\n            if (!hasByteServing) chunkSize = datalength;\n\n            // Function to get a range from the remote URL.\n            var doXHR = (from, to) => {\n              if (from > to)\n                throw new Error('invalid range (' + from + ', ' + to + ') or no bytes requested!');\n              if (to > datalength - 1)\n                throw new Error('only ' + datalength + ' bytes available! programmer error!');\n\n              // TODO: Use mozResponseArrayBuffer, responseStream, etc. if available.\n              var xhr = new XMLHttpRequest();\n              xhr.open('GET', url, false);\n              if (datalength !== chunkSize)\n                xhr.setRequestHeader('Range', 'bytes=' + from + '-' + to);\n\n              // Some hints to the browser that we want binary data.\n              xhr.responseType = 'arraybuffer';\n              if (xhr.overrideMimeType) {\n                xhr.overrideMimeType('text/plain; charset=x-user-defined');\n              }\n\n              xhr.send(null);\n              if (!((xhr.status >= 200 && xhr.status < 300) || xhr.status === 304))\n                throw new Error(\"Couldn't load \" + url + '. Status: ' + xhr.status);\n              if (xhr.response !== undefined) {\n                return new Uint8Array(/** @type{Array<number>} */ (xhr.response || []));\n              }\n              return intArrayFromString(xhr.responseText || '', true);\n            };\n            var lazyArray = this;\n            lazyArray.setDataGetter((chunkNum) => {\n              var start = chunkNum * chunkSize;\n              var end = (chunkNum + 1) * chunkSize - 1; // including this byte\n              end = Math.min(end, datalength - 1); // if datalength-1 is selected, this is the last block\n              if (typeof lazyArray.chunks[chunkNum] == 'undefined') {\n                lazyArray.chunks[chunkNum] = doXHR(start, end);\n              }\n              if (typeof lazyArray.chunks[chunkNum] == 'undefined')\n                throw new Error('doXHR failed!');\n              return lazyArray.chunks[chunkNum];\n            });\n\n            if (usesGzip || !datalength) {\n              // if the server uses gzip or doesn't supply the length, we have to download the whole file to get the (uncompressed) length\n              chunkSize = datalength = 1; // this will force getter(0)/doXHR do download the whole file\n              datalength = this.getter(0).length;\n              chunkSize = datalength;\n              out('LazyFiles on gzip forces download of the whole file when length is accessed');\n            }\n\n            this._length = datalength;\n            this._chunkSize = chunkSize;\n            this.lengthKnown = true;\n          }\n          get length() {\n            if (!this.lengthKnown) {\n              this.cacheLength();\n            }\n            return this._length;\n          }\n          get chunkSize() {\n            if (!this.lengthKnown) {\n              this.cacheLength();\n            }\n            return this._chunkSize;\n          }\n        }\n\n        if (typeof XMLHttpRequest != 'undefined') {\n          if (!ENVIRONMENT_IS_WORKER)\n            throw 'Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc';\n          var lazyArray = new LazyUint8Array();\n          var properties = { isDevice: false, contents: lazyArray };\n        } else {\n          var properties = { isDevice: false, url: url };\n        }\n\n        var node = FS.createFile(parent, name, properties, canRead, canWrite);\n        // This is a total hack, but I want to get this lazy file code out of the\n        // core of MEMFS. If we want to keep this lazy file concept I feel it should\n        // be its own thin LAZYFS proxying calls to MEMFS.\n        if (properties.contents) {\n          node.contents = properties.contents;\n        } else if (properties.url) {\n          node.contents = null;\n          node.url = properties.url;\n        }\n        // Add a function that defers querying the file size until it is asked the first time.\n        Object.defineProperties(node, {\n          usedBytes: {\n            get: function () {\n              return this.contents.length;\n            },\n          },\n        });\n        // override each stream op with one that tries to force load the lazy file first\n        var stream_ops = {};\n        var keys = Object.keys(node.stream_ops);\n        keys.forEach((key) => {\n          var fn = node.stream_ops[key];\n          stream_ops[key] = (...args) => {\n            FS.forceLoadFile(node);\n            return fn(...args);\n          };\n        });\n        function writeChunks(stream, buffer, offset, length, position) {\n          var contents = stream.node.contents;\n          if (position >= contents.length) return 0;\n          var size = Math.min(contents.length - position, length);\n          assert(size >= 0);\n          if (contents.slice) {\n            // normal array\n            for (var i = 0; i < size; i++) {\n              buffer[offset + i] = contents[position + i];\n            }\n          } else {\n            for (var i = 0; i < size; i++) {\n              // LazyUint8Array from sync binary XHR\n              buffer[offset + i] = contents.get(position + i);\n            }\n          }\n          return size;\n        }\n        // use a custom read function\n        stream_ops.read = (stream, buffer, offset, length, position) => {\n          FS.forceLoadFile(node);\n          return writeChunks(stream, buffer, offset, length, position);\n        };\n        // use a custom mmap function\n        stream_ops.mmap = (stream, length, position, prot, flags) => {\n          FS.forceLoadFile(node);\n          var ptr = mmapAlloc(length);\n          if (!ptr) {\n            throw new FS.ErrnoError(48);\n          }\n          writeChunks(stream, HEAP8, ptr, length, position);\n          return { ptr, allocated: true };\n        };\n        node.stream_ops = stream_ops;\n        return node;\n      },\n      absolutePath() {\n        abort('FS.absolutePath has been removed; use PATH_FS.resolve instead');\n      },\n      createFolder() {\n        abort('FS.createFolder has been removed; use FS.mkdir instead');\n      },\n      createLink() {\n        abort('FS.createLink has been removed; use FS.symlink instead');\n      },\n      joinPath() {\n        abort('FS.joinPath has been removed; use PATH.join instead');\n      },\n      mmapAlloc() {\n        abort('FS.mmapAlloc has been replaced by the top level function mmapAlloc');\n      },\n      standardizePath() {\n        abort('FS.standardizePath has been removed; use PATH.normalize instead');\n      },\n    };\n\n    var SYSCALLS = {\n      DEFAULT_POLLMASK: 5,\n      calculateAt(dirfd, path, allowEmpty) {\n        if (PATH.isAbs(path)) {\n          return path;\n        }\n        // relative path\n        var dir;\n        if (dirfd === -100) {\n          dir = FS.cwd();\n        } else {\n          var dirstream = SYSCALLS.getStreamFromFD(dirfd);\n          dir = dirstream.path;\n        }\n        if (path.length == 0) {\n          if (!allowEmpty) {\n            throw new FS.ErrnoError(44);\n          }\n          return dir;\n        }\n        return PATH.join2(dir, path);\n      },\n      doStat(func, path, buf) {\n        var stat = func(path);\n        HEAP32[buf >> 2] = stat.dev;\n        HEAP32[(buf + 4) >> 2] = stat.mode;\n        HEAPU32[(buf + 8) >> 2] = stat.nlink;\n        HEAP32[(buf + 12) >> 2] = stat.uid;\n        HEAP32[(buf + 16) >> 2] = stat.gid;\n        HEAP32[(buf + 20) >> 2] = stat.rdev;\n        (tempI64 = [\n          stat.size >>> 0,\n          ((tempDouble = stat.size),\n          +Math.abs(tempDouble) >= 1.0\n            ? tempDouble > 0.0\n              ? +Math.floor(tempDouble / 4294967296.0) >>> 0\n              : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296.0) >>> 0\n            : 0),\n        ]),\n          (HEAP32[(buf + 24) >> 2] = tempI64[0]),\n          (HEAP32[(buf + 28) >> 2] = tempI64[1]);\n        HEAP32[(buf + 32) >> 2] = 4096;\n        HEAP32[(buf + 36) >> 2] = stat.blocks;\n        var atime = stat.atime.getTime();\n        var mtime = stat.mtime.getTime();\n        var ctime = stat.ctime.getTime();\n        (tempI64 = [\n          Math.floor(atime / 1000) >>> 0,\n          ((tempDouble = Math.floor(atime / 1000)),\n          +Math.abs(tempDouble) >= 1.0\n            ? tempDouble > 0.0\n              ? +Math.floor(tempDouble / 4294967296.0) >>> 0\n              : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296.0) >>> 0\n            : 0),\n        ]),\n          (HEAP32[(buf + 40) >> 2] = tempI64[0]),\n          (HEAP32[(buf + 44) >> 2] = tempI64[1]);\n        HEAPU32[(buf + 48) >> 2] = (atime % 1000) * 1000 * 1000;\n        (tempI64 = [\n          Math.floor(mtime / 1000) >>> 0,\n          ((tempDouble = Math.floor(mtime / 1000)),\n          +Math.abs(tempDouble) >= 1.0\n            ? tempDouble > 0.0\n              ? +Math.floor(tempDouble / 4294967296.0) >>> 0\n              : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296.0) >>> 0\n            : 0),\n        ]),\n          (HEAP32[(buf + 56) >> 2] = tempI64[0]),\n          (HEAP32[(buf + 60) >> 2] = tempI64[1]);\n        HEAPU32[(buf + 64) >> 2] = (mtime % 1000) * 1000 * 1000;\n        (tempI64 = [\n          Math.floor(ctime / 1000) >>> 0,\n          ((tempDouble = Math.floor(ctime / 1000)),\n          +Math.abs(tempDouble) >= 1.0\n            ? tempDouble > 0.0\n              ? +Math.floor(tempDouble / 4294967296.0) >>> 0\n              : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296.0) >>> 0\n            : 0),\n        ]),\n          (HEAP32[(buf + 72) >> 2] = tempI64[0]),\n          (HEAP32[(buf + 76) >> 2] = tempI64[1]);\n        HEAPU32[(buf + 80) >> 2] = (ctime % 1000) * 1000 * 1000;\n        (tempI64 = [\n          stat.ino >>> 0,\n          ((tempDouble = stat.ino),\n          +Math.abs(tempDouble) >= 1.0\n            ? tempDouble > 0.0\n              ? +Math.floor(tempDouble / 4294967296.0) >>> 0\n              : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296.0) >>> 0\n            : 0),\n        ]),\n          (HEAP32[(buf + 88) >> 2] = tempI64[0]),\n          (HEAP32[(buf + 92) >> 2] = tempI64[1]);\n        return 0;\n      },\n      doMsync(addr, stream, len, flags, offset) {\n        if (!FS.isFile(stream.node.mode)) {\n          throw new FS.ErrnoError(43);\n        }\n        if (flags & 2) {\n          // MAP_PRIVATE calls need not to be synced back to underlying fs\n          return 0;\n        }\n        var buffer = HEAPU8.slice(addr, addr + len);\n        FS.msync(stream, buffer, offset, len, flags);\n      },\n      getStreamFromFD(fd) {\n        var stream = FS.getStreamChecked(fd);\n        return stream;\n      },\n      varargs: undefined,\n      getStr(ptr) {\n        var ret = UTF8ToString(ptr);\n        return ret;\n      },\n    };\n    function ___syscall_fcntl64(fd, cmd, varargs) {\n      SYSCALLS.varargs = varargs;\n      try {\n        var stream = SYSCALLS.getStreamFromFD(fd);\n        switch (cmd) {\n          case 0: {\n            var arg = syscallGetVarargI();\n            if (arg < 0) {\n              return -28;\n            }\n            while (FS.streams[arg]) {\n              arg++;\n            }\n            var newStream;\n            newStream = FS.dupStream(stream, arg);\n            return newStream.fd;\n          }\n          case 1:\n          case 2:\n            return 0; // FD_CLOEXEC makes no sense for a single process.\n          case 3:\n            return stream.flags;\n          case 4: {\n            var arg = syscallGetVarargI();\n            stream.flags |= arg;\n            return 0;\n          }\n          case 12: {\n            var arg = syscallGetVarargP();\n            var offset = 0;\n            // We're always unlocked.\n            HEAP16[(arg + offset) >> 1] = 2;\n            return 0;\n          }\n          case 13:\n          case 14:\n            return 0; // Pretend that the locking is successful.\n        }\n        return -28;\n      } catch (e) {\n        if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n        return -e.errno;\n      }\n    }\n\n    function ___syscall_fstat64(fd, buf) {\n      try {\n        var stream = SYSCALLS.getStreamFromFD(fd);\n        return SYSCALLS.doStat(FS.stat, stream.path, buf);\n      } catch (e) {\n        if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n        return -e.errno;\n      }\n    }\n\n    var convertI32PairToI53Checked = (lo, hi) => {\n      assert(lo == lo >>> 0 || lo == (lo | 0)); // lo should either be a i32 or a u32\n      assert(hi === (hi | 0)); // hi should be a i32\n      return (hi + 0x200000) >>> 0 < 0x400001 - !!lo ? (lo >>> 0) + hi * 4294967296 : NaN;\n    };\n    function ___syscall_ftruncate64(fd, length_low, length_high) {\n      var length = convertI32PairToI53Checked(length_low, length_high);\n\n      try {\n        if (isNaN(length)) return 61;\n        FS.ftruncate(fd, length);\n        return 0;\n      } catch (e) {\n        if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n        return -e.errno;\n      }\n    }\n\n    var stringToUTF8 = (str, outPtr, maxBytesToWrite) => {\n      assert(\n        typeof maxBytesToWrite == 'number',\n        'stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!',\n      );\n      return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite);\n    };\n\n    function ___syscall_getdents64(fd, dirp, count) {\n      try {\n        var stream = SYSCALLS.getStreamFromFD(fd);\n        stream.getdents ||= FS.readdir(stream.path);\n\n        var struct_size = 280;\n        var pos = 0;\n        var off = FS.llseek(stream, 0, 1);\n\n        var idx = Math.floor(off / struct_size);\n\n        while (idx < stream.getdents.length && pos + struct_size <= count) {\n          var id;\n          var type;\n          var name = stream.getdents[idx];\n          if (name === '.') {\n            id = stream.node.id;\n            type = 4; // DT_DIR\n          } else if (name === '..') {\n            var lookup = FS.lookupPath(stream.path, { parent: true });\n            id = lookup.node.id;\n            type = 4; // DT_DIR\n          } else {\n            var child = FS.lookupNode(stream.node, name);\n            id = child.id;\n            type = FS.isChrdev(child.mode)\n              ? 2 // DT_CHR, character device.\n              : FS.isDir(child.mode)\n                ? 4 // DT_DIR, directory.\n                : FS.isLink(child.mode)\n                  ? 10 // DT_LNK, symbolic link.\n                  : 8; // DT_REG, regular file.\n          }\n          assert(id);\n          (tempI64 = [\n            id >>> 0,\n            ((tempDouble = id),\n            +Math.abs(tempDouble) >= 1.0\n              ? tempDouble > 0.0\n                ? +Math.floor(tempDouble / 4294967296.0) >>> 0\n                : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296.0) >>> 0\n              : 0),\n          ]),\n            (HEAP32[(dirp + pos) >> 2] = tempI64[0]),\n            (HEAP32[(dirp + pos + 4) >> 2] = tempI64[1]);\n          (tempI64 = [\n            ((idx + 1) * struct_size) >>> 0,\n            ((tempDouble = (idx + 1) * struct_size),\n            +Math.abs(tempDouble) >= 1.0\n              ? tempDouble > 0.0\n                ? +Math.floor(tempDouble / 4294967296.0) >>> 0\n                : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296.0) >>> 0\n              : 0),\n          ]),\n            (HEAP32[(dirp + pos + 8) >> 2] = tempI64[0]),\n            (HEAP32[(dirp + pos + 12) >> 2] = tempI64[1]);\n          HEAP16[(dirp + pos + 16) >> 1] = 280;\n          HEAP8[dirp + pos + 18] = type;\n          stringToUTF8(name, dirp + pos + 19, 256);\n          pos += struct_size;\n          idx += 1;\n        }\n        FS.llseek(stream, idx * struct_size, 0);\n        return pos;\n      } catch (e) {\n        if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n        return -e.errno;\n      }\n    }\n\n    function ___syscall_ioctl(fd, op, varargs) {\n      SYSCALLS.varargs = varargs;\n      try {\n        var stream = SYSCALLS.getStreamFromFD(fd);\n        switch (op) {\n          case 21509: {\n            if (!stream.tty) return -59;\n            return 0;\n          }\n          case 21505: {\n            if (!stream.tty) return -59;\n            if (stream.tty.ops.ioctl_tcgets) {\n              var termios = stream.tty.ops.ioctl_tcgets(stream);\n              var argp = syscallGetVarargP();\n              HEAP32[argp >> 2] = termios.c_iflag || 0;\n              HEAP32[(argp + 4) >> 2] = termios.c_oflag || 0;\n              HEAP32[(argp + 8) >> 2] = termios.c_cflag || 0;\n              HEAP32[(argp + 12) >> 2] = termios.c_lflag || 0;\n              for (var i = 0; i < 32; i++) {\n                HEAP8[argp + i + 17] = termios.c_cc[i] || 0;\n              }\n              return 0;\n            }\n            return 0;\n          }\n          case 21510:\n          case 21511:\n          case 21512: {\n            if (!stream.tty) return -59;\n            return 0; // no-op, not actually adjusting terminal settings\n          }\n          case 21506:\n          case 21507:\n          case 21508: {\n            if (!stream.tty) return -59;\n            if (stream.tty.ops.ioctl_tcsets) {\n              var argp = syscallGetVarargP();\n              var c_iflag = HEAP32[argp >> 2];\n              var c_oflag = HEAP32[(argp + 4) >> 2];\n              var c_cflag = HEAP32[(argp + 8) >> 2];\n              var c_lflag = HEAP32[(argp + 12) >> 2];\n              var c_cc = [];\n              for (var i = 0; i < 32; i++) {\n                c_cc.push(HEAP8[argp + i + 17]);\n              }\n              return stream.tty.ops.ioctl_tcsets(stream.tty, op, {\n                c_iflag,\n                c_oflag,\n                c_cflag,\n                c_lflag,\n                c_cc,\n              });\n            }\n            return 0; // no-op, not actually adjusting terminal settings\n          }\n          case 21519: {\n            if (!stream.tty) return -59;\n            var argp = syscallGetVarargP();\n            HEAP32[argp >> 2] = 0;\n            return 0;\n          }\n          case 21520: {\n            if (!stream.tty) return -59;\n            return -28; // not supported\n          }\n          case 21531: {\n            var argp = syscallGetVarargP();\n            return FS.ioctl(stream, op, argp);\n          }\n          case 21523: {\n            // TODO: in theory we should write to the winsize struct that gets\n            // passed in, but for now musl doesn't read anything on it\n            if (!stream.tty) return -59;\n            if (stream.tty.ops.ioctl_tiocgwinsz) {\n              var winsize = stream.tty.ops.ioctl_tiocgwinsz(stream.tty);\n              var argp = syscallGetVarargP();\n              HEAP16[argp >> 1] = winsize[0];\n              HEAP16[(argp + 2) >> 1] = winsize[1];\n            }\n            return 0;\n          }\n          case 21524: {\n            // TODO: technically, this ioctl call should change the window size.\n            // but, since emscripten doesn't have any concept of a terminal window\n            // yet, we'll just silently throw it away as we do TIOCGWINSZ\n            if (!stream.tty) return -59;\n            return 0;\n          }\n          case 21515: {\n            if (!stream.tty) return -59;\n            return 0;\n          }\n          default:\n            return -28; // not supported\n        }\n      } catch (e) {\n        if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n        return -e.errno;\n      }\n    }\n\n    function ___syscall_lstat64(path, buf) {\n      try {\n        path = SYSCALLS.getStr(path);\n        return SYSCALLS.doStat(FS.lstat, path, buf);\n      } catch (e) {\n        if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n        return -e.errno;\n      }\n    }\n\n    function ___syscall_newfstatat(dirfd, path, buf, flags) {\n      try {\n        path = SYSCALLS.getStr(path);\n        var nofollow = flags & 256;\n        var allowEmpty = flags & 4096;\n        flags = flags & ~6400;\n        assert(!flags, `unknown flags in __syscall_newfstatat: ${flags}`);\n        path = SYSCALLS.calculateAt(dirfd, path, allowEmpty);\n        return SYSCALLS.doStat(nofollow ? FS.lstat : FS.stat, path, buf);\n      } catch (e) {\n        if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n        return -e.errno;\n      }\n    }\n\n    function ___syscall_openat(dirfd, path, flags, varargs) {\n      SYSCALLS.varargs = varargs;\n      try {\n        path = SYSCALLS.getStr(path);\n        path = SYSCALLS.calculateAt(dirfd, path);\n        var mode = varargs ? syscallGetVarargI() : 0;\n        return FS.open(path, flags, mode).fd;\n      } catch (e) {\n        if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n        return -e.errno;\n      }\n    }\n\n    function ___syscall_rmdir(path) {\n      try {\n        path = SYSCALLS.getStr(path);\n        FS.rmdir(path);\n        return 0;\n      } catch (e) {\n        if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n        return -e.errno;\n      }\n    }\n\n    function ___syscall_stat64(path, buf) {\n      try {\n        path = SYSCALLS.getStr(path);\n        return SYSCALLS.doStat(FS.stat, path, buf);\n      } catch (e) {\n        if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n        return -e.errno;\n      }\n    }\n\n    function ___syscall_unlinkat(dirfd, path, flags) {\n      try {\n        path = SYSCALLS.getStr(path);\n        path = SYSCALLS.calculateAt(dirfd, path);\n        if (flags === 0) {\n          FS.unlink(path);\n        } else if (flags === 512) {\n          FS.rmdir(path);\n        } else {\n          abort('Invalid flags passed to unlinkat');\n        }\n        return 0;\n      } catch (e) {\n        if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n        return -e.errno;\n      }\n    }\n\n    var __abort_js = () => {\n      abort('native code called abort()');\n    };\n\n    var __emscripten_memcpy_js = (dest, src, num) => HEAPU8.copyWithin(dest, src, src + num);\n\n    var __emscripten_throw_longjmp = () => {\n      throw Infinity;\n    };\n\n    function __gmtime_js(time_low, time_high, tmPtr) {\n      var time = convertI32PairToI53Checked(time_low, time_high);\n\n      var date = new Date(time * 1000);\n      HEAP32[tmPtr >> 2] = date.getUTCSeconds();\n      HEAP32[(tmPtr + 4) >> 2] = date.getUTCMinutes();\n      HEAP32[(tmPtr + 8) >> 2] = date.getUTCHours();\n      HEAP32[(tmPtr + 12) >> 2] = date.getUTCDate();\n      HEAP32[(tmPtr + 16) >> 2] = date.getUTCMonth();\n      HEAP32[(tmPtr + 20) >> 2] = date.getUTCFullYear() - 1900;\n      HEAP32[(tmPtr + 24) >> 2] = date.getUTCDay();\n      var start = Date.UTC(date.getUTCFullYear(), 0, 1, 0, 0, 0, 0);\n      var yday = ((date.getTime() - start) / (1000 * 60 * 60 * 24)) | 0;\n      HEAP32[(tmPtr + 28) >> 2] = yday;\n    }\n\n    var isLeapYear = (year) => year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n\n    var MONTH_DAYS_LEAP_CUMULATIVE = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335];\n\n    var MONTH_DAYS_REGULAR_CUMULATIVE = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];\n    var ydayFromDate = (date) => {\n      var leap = isLeapYear(date.getFullYear());\n      var monthDaysCumulative = leap ? MONTH_DAYS_LEAP_CUMULATIVE : MONTH_DAYS_REGULAR_CUMULATIVE;\n      var yday = monthDaysCumulative[date.getMonth()] + date.getDate() - 1; // -1 since it's days since Jan 1\n\n      return yday;\n    };\n\n    function __localtime_js(time_low, time_high, tmPtr) {\n      var time = convertI32PairToI53Checked(time_low, time_high);\n\n      var date = new Date(time * 1000);\n      HEAP32[tmPtr >> 2] = date.getSeconds();\n      HEAP32[(tmPtr + 4) >> 2] = date.getMinutes();\n      HEAP32[(tmPtr + 8) >> 2] = date.getHours();\n      HEAP32[(tmPtr + 12) >> 2] = date.getDate();\n      HEAP32[(tmPtr + 16) >> 2] = date.getMonth();\n      HEAP32[(tmPtr + 20) >> 2] = date.getFullYear() - 1900;\n      HEAP32[(tmPtr + 24) >> 2] = date.getDay();\n\n      var yday = ydayFromDate(date) | 0;\n      HEAP32[(tmPtr + 28) >> 2] = yday;\n      HEAP32[(tmPtr + 36) >> 2] = -(date.getTimezoneOffset() * 60);\n\n      // Attention: DST is in December in South, and some regions don't have DST at all.\n      var start = new Date(date.getFullYear(), 0, 1);\n      var summerOffset = new Date(date.getFullYear(), 6, 1).getTimezoneOffset();\n      var winterOffset = start.getTimezoneOffset();\n      var dst =\n        (summerOffset != winterOffset &&\n          date.getTimezoneOffset() == Math.min(winterOffset, summerOffset)) | 0;\n      HEAP32[(tmPtr + 32) >> 2] = dst;\n    }\n\n    var __tzset_js = (timezone, daylight, std_name, dst_name) => {\n      // TODO: Use (malleable) environment variables instead of system settings.\n      var currentYear = new Date().getFullYear();\n      var winter = new Date(currentYear, 0, 1);\n      var summer = new Date(currentYear, 6, 1);\n      var winterOffset = winter.getTimezoneOffset();\n      var summerOffset = summer.getTimezoneOffset();\n\n      // Local standard timezone offset. Local standard time is not adjusted for\n      // daylight savings.  This code uses the fact that getTimezoneOffset returns\n      // a greater value during Standard Time versus Daylight Saving Time (DST).\n      // Thus it determines the expected output during Standard Time, and it\n      // compares whether the output of the given date the same (Standard) or less\n      // (DST).\n      var stdTimezoneOffset = Math.max(winterOffset, summerOffset);\n\n      // timezone is specified as seconds west of UTC (\"The external variable\n      // `timezone` shall be set to the difference, in seconds, between\n      // Coordinated Universal Time (UTC) and local standard time.\"), the same\n      // as returned by stdTimezoneOffset.\n      // See http://pubs.opengroup.org/onlinepubs/009695399/functions/tzset.html\n      HEAPU32[timezone >> 2] = stdTimezoneOffset * 60;\n\n      HEAP32[daylight >> 2] = Number(winterOffset != summerOffset);\n\n      var extractZone = (timezoneOffset) => {\n        // Why inverse sign?\n        // Read here https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset\n        var sign = timezoneOffset >= 0 ? '-' : '+';\n\n        var absOffset = Math.abs(timezoneOffset);\n        var hours = String(Math.floor(absOffset / 60)).padStart(2, '0');\n        var minutes = String(absOffset % 60).padStart(2, '0');\n\n        return `UTC${sign}${hours}${minutes}`;\n      };\n\n      var winterName = extractZone(winterOffset);\n      var summerName = extractZone(summerOffset);\n      assert(winterName);\n      assert(summerName);\n      assert(\n        lengthBytesUTF8(winterName) <= 16,\n        `timezone name truncated to fit in TZNAME_MAX (${winterName})`,\n      );\n      assert(\n        lengthBytesUTF8(summerName) <= 16,\n        `timezone name truncated to fit in TZNAME_MAX (${summerName})`,\n      );\n      if (summerOffset < winterOffset) {\n        // Northern hemisphere\n        stringToUTF8(winterName, std_name, 17);\n        stringToUTF8(summerName, dst_name, 17);\n      } else {\n        stringToUTF8(winterName, dst_name, 17);\n        stringToUTF8(summerName, std_name, 17);\n      }\n    };\n\n    var _emscripten_date_now = () => Date.now();\n\n    var getHeapMax = () =>\n      // Stay one Wasm page short of 4GB: while e.g. Chrome is able to allocate\n      // full 4GB Wasm memories, the size will wrap back to 0 bytes in Wasm side\n      // for any code that deals with heap sizes, which would require special\n      // casing all heap size related code to treat 0 specially.\n      2147483648;\n\n    var growMemory = (size) => {\n      var b = wasmMemory.buffer;\n      var pages = ((size - b.byteLength + 65535) / 65536) | 0;\n      try {\n        // round size grow request up to wasm page size (fixed 64KB per spec)\n        wasmMemory.grow(pages); // .grow() takes a delta compared to the previous size\n        updateMemoryViews();\n        return 1 /*success*/;\n      } catch (e) {\n        err(\n          `growMemory: Attempted to grow heap from ${b.byteLength} bytes to ${size} bytes, but got error: ${e}`,\n        );\n      }\n      // implicit 0 return to save code size (caller will cast \"undefined\" into 0\n      // anyhow)\n    };\n    var _emscripten_resize_heap = (requestedSize) => {\n      var oldSize = HEAPU8.length;\n      // With CAN_ADDRESS_2GB or MEMORY64, pointers are already unsigned.\n      requestedSize >>>= 0;\n      // With multithreaded builds, races can happen (another thread might increase the size\n      // in between), so return a failure, and let the caller retry.\n      assert(requestedSize > oldSize);\n\n      // Memory resize rules:\n      // 1.  Always increase heap size to at least the requested size, rounded up\n      //     to next page multiple.\n      // 2a. If MEMORY_GROWTH_LINEAR_STEP == -1, excessively resize the heap\n      //     geometrically: increase the heap size according to\n      //     MEMORY_GROWTH_GEOMETRIC_STEP factor (default +20%), At most\n      //     overreserve by MEMORY_GROWTH_GEOMETRIC_CAP bytes (default 96MB).\n      // 2b. If MEMORY_GROWTH_LINEAR_STEP != -1, excessively resize the heap\n      //     linearly: increase the heap size by at least\n      //     MEMORY_GROWTH_LINEAR_STEP bytes.\n      // 3.  Max size for the heap is capped at 2048MB-WASM_PAGE_SIZE, or by\n      //     MAXIMUM_MEMORY, or by ASAN limit, depending on which is smallest\n      // 4.  If we were unable to allocate as much memory, it may be due to\n      //     over-eager decision to excessively reserve due to (3) above.\n      //     Hence if an allocation fails, cut down on the amount of excess\n      //     growth, in an attempt to succeed to perform a smaller allocation.\n\n      // A limit is set for how much we can grow. We should not exceed that\n      // (the wasm binary specifies it, so if we tried, we'd fail anyhow).\n      var maxHeapSize = getHeapMax();\n      if (requestedSize > maxHeapSize) {\n        err(\n          `Cannot enlarge memory, requested ${requestedSize} bytes, but the limit is ${maxHeapSize} bytes!`,\n        );\n        return false;\n      }\n\n      // Loop through potential heap size increases. If we attempt a too eager\n      // reservation that fails, cut down on the attempted size and reserve a\n      // smaller bump instead. (max 3 times, chosen somewhat arbitrarily)\n      for (var cutDown = 1; cutDown <= 4; cutDown *= 2) {\n        var overGrownHeapSize = oldSize * (1 + 0.2 / cutDown); // ensure geometric growth\n        // but limit overreserving (default to capping at +96MB overgrowth at most)\n        overGrownHeapSize = Math.min(overGrownHeapSize, requestedSize + 100663296);\n\n        var newSize = Math.min(\n          maxHeapSize,\n          alignMemory(Math.max(requestedSize, overGrownHeapSize), 65536),\n        );\n\n        var replacement = growMemory(newSize);\n        if (replacement) {\n          return true;\n        }\n      }\n      err(`Failed to grow the heap from ${oldSize} bytes to ${newSize} bytes, not enough memory!`);\n      return false;\n    };\n\n    var ENV = {};\n\n    var getExecutableName = () => {\n      return thisProgram || './this.program';\n    };\n    var getEnvStrings = () => {\n      if (!getEnvStrings.strings) {\n        // Default values.\n        // Browser language detection #8751\n        var lang =\n          (\n            (typeof navigator == 'object' && navigator.languages && navigator.languages[0]) ||\n            'C'\n          ).replace('-', '_') + '.UTF-8';\n        var env = {\n          USER: 'web_user',\n          LOGNAME: 'web_user',\n          PATH: '/',\n          PWD: '/',\n          HOME: '/home/web_user',\n          LANG: lang,\n          _: getExecutableName(),\n        };\n        // Apply the user-provided values, if any.\n        for (var x in ENV) {\n          // x is a key in ENV; if ENV[x] is undefined, that means it was\n          // explicitly set to be so. We allow user code to do that to\n          // force variables with default values to remain unset.\n          if (ENV[x] === undefined) delete env[x];\n          else env[x] = ENV[x];\n        }\n        var strings = [];\n        for (var x in env) {\n          strings.push(`${x}=${env[x]}`);\n        }\n        getEnvStrings.strings = strings;\n      }\n      return getEnvStrings.strings;\n    };\n\n    var stringToAscii = (str, buffer) => {\n      for (var i = 0; i < str.length; ++i) {\n        assert(str.charCodeAt(i) === (str.charCodeAt(i) & 0xff));\n        HEAP8[buffer++] = str.charCodeAt(i);\n      }\n      // Null-terminate the string\n      HEAP8[buffer] = 0;\n    };\n    var _environ_get = (__environ, environ_buf) => {\n      var bufSize = 0;\n      getEnvStrings().forEach((string, i) => {\n        var ptr = environ_buf + bufSize;\n        HEAPU32[(__environ + i * 4) >> 2] = ptr;\n        stringToAscii(string, ptr);\n        bufSize += string.length + 1;\n      });\n      return 0;\n    };\n\n    var _environ_sizes_get = (penviron_count, penviron_buf_size) => {\n      var strings = getEnvStrings();\n      HEAPU32[penviron_count >> 2] = strings.length;\n      var bufSize = 0;\n      strings.forEach((string) => (bufSize += string.length + 1));\n      HEAPU32[penviron_buf_size >> 2] = bufSize;\n      return 0;\n    };\n\n    function _fd_close(fd) {\n      try {\n        var stream = SYSCALLS.getStreamFromFD(fd);\n        FS.close(stream);\n        return 0;\n      } catch (e) {\n        if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n        return e.errno;\n      }\n    }\n\n    /** @param {number=} offset */\n    var doReadv = (stream, iov, iovcnt, offset) => {\n      var ret = 0;\n      for (var i = 0; i < iovcnt; i++) {\n        var ptr = HEAPU32[iov >> 2];\n        var len = HEAPU32[(iov + 4) >> 2];\n        iov += 8;\n        var curr = FS.read(stream, HEAP8, ptr, len, offset);\n        if (curr < 0) return -1;\n        ret += curr;\n        if (curr < len) break; // nothing more to read\n        if (typeof offset != 'undefined') {\n          offset += curr;\n        }\n      }\n      return ret;\n    };\n\n    function _fd_read(fd, iov, iovcnt, pnum) {\n      try {\n        var stream = SYSCALLS.getStreamFromFD(fd);\n        var num = doReadv(stream, iov, iovcnt);\n        HEAPU32[pnum >> 2] = num;\n        return 0;\n      } catch (e) {\n        if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n        return e.errno;\n      }\n    }\n\n    function _fd_seek(fd, offset_low, offset_high, whence, newOffset) {\n      var offset = convertI32PairToI53Checked(offset_low, offset_high);\n\n      try {\n        if (isNaN(offset)) return 61;\n        var stream = SYSCALLS.getStreamFromFD(fd);\n        FS.llseek(stream, offset, whence);\n        (tempI64 = [\n          stream.position >>> 0,\n          ((tempDouble = stream.position),\n          +Math.abs(tempDouble) >= 1.0\n            ? tempDouble > 0.0\n              ? +Math.floor(tempDouble / 4294967296.0) >>> 0\n              : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296.0) >>> 0\n            : 0),\n        ]),\n          (HEAP32[newOffset >> 2] = tempI64[0]),\n          (HEAP32[(newOffset + 4) >> 2] = tempI64[1]);\n        if (stream.getdents && offset === 0 && whence === 0) stream.getdents = null; // reset readdir state\n        return 0;\n      } catch (e) {\n        if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n        return e.errno;\n      }\n    }\n\n    function _fd_sync(fd) {\n      try {\n        var stream = SYSCALLS.getStreamFromFD(fd);\n        if (stream.stream_ops?.fsync) {\n          return stream.stream_ops.fsync(stream);\n        }\n        return 0; // we can't do anything synchronously; the in-memory FS is already synced to\n      } catch (e) {\n        if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n        return e.errno;\n      }\n    }\n\n    /** @param {number=} offset */\n    var doWritev = (stream, iov, iovcnt, offset) => {\n      var ret = 0;\n      for (var i = 0; i < iovcnt; i++) {\n        var ptr = HEAPU32[iov >> 2];\n        var len = HEAPU32[(iov + 4) >> 2];\n        iov += 8;\n        var curr = FS.write(stream, HEAP8, ptr, len, offset);\n        if (curr < 0) return -1;\n        ret += curr;\n        if (curr < len) {\n          // No more space to write.\n          break;\n        }\n        if (typeof offset != 'undefined') {\n          offset += curr;\n        }\n      }\n      return ret;\n    };\n\n    function _fd_write(fd, iov, iovcnt, pnum) {\n      try {\n        var stream = SYSCALLS.getStreamFromFD(fd);\n        var num = doWritev(stream, iov, iovcnt);\n        HEAPU32[pnum >> 2] = num;\n        return 0;\n      } catch (e) {\n        if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n        return e.errno;\n      }\n    }\n\n    var wasmTableMirror = [];\n\n    /** @type {WebAssembly.Table} */\n    var wasmTable;\n    var getWasmTableEntry = (funcPtr) => {\n      var func = wasmTableMirror[funcPtr];\n      if (!func) {\n        if (funcPtr >= wasmTableMirror.length) wasmTableMirror.length = funcPtr + 1;\n        wasmTableMirror[funcPtr] = func = wasmTable.get(funcPtr);\n      }\n      assert(\n        wasmTable.get(funcPtr) == func,\n        'JavaScript-side Wasm function table mirror is out of date!',\n      );\n      return func;\n    };\n\n    var UTF16Decoder = typeof TextDecoder != 'undefined' ? new TextDecoder('utf-16le') : undefined;\n    var UTF16ToString = (ptr, maxBytesToRead) => {\n      assert(ptr % 2 == 0, 'Pointer passed to UTF16ToString must be aligned to two bytes!');\n      var endPtr = ptr;\n      // TextDecoder needs to know the byte length in advance, it doesn't stop on\n      // null terminator by itself.\n      // Also, use the length info to avoid running tiny strings through\n      // TextDecoder, since .subarray() allocates garbage.\n      var idx = endPtr >> 1;\n      var maxIdx = idx + maxBytesToRead / 2;\n      // If maxBytesToRead is not passed explicitly, it will be undefined, and this\n      // will always evaluate to true. This saves on code size.\n      while (!(idx >= maxIdx) && HEAPU16[idx]) ++idx;\n      endPtr = idx << 1;\n\n      if (endPtr - ptr > 32 && UTF16Decoder)\n        return UTF16Decoder.decode(HEAPU8.subarray(ptr, endPtr));\n\n      // Fallback: decode without UTF16Decoder\n      var str = '';\n\n      // If maxBytesToRead is not passed explicitly, it will be undefined, and the\n      // for-loop's condition will always evaluate to true. The loop is then\n      // terminated on the first null char.\n      for (var i = 0; !(i >= maxBytesToRead / 2); ++i) {\n        var codeUnit = HEAP16[(ptr + i * 2) >> 1];\n        if (codeUnit == 0) break;\n        // fromCharCode constructs a character from a UTF-16 code unit, so we can\n        // pass the UTF16 string right through.\n        str += String.fromCharCode(codeUnit);\n      }\n\n      return str;\n    };\n\n    var uleb128Encode = (n, target) => {\n      assert(n < 16384);\n      if (n < 128) {\n        target.push(n);\n      } else {\n        target.push(n % 128 | 128, n >> 7);\n      }\n    };\n\n    var sigToWasmTypes = (sig) => {\n      assert(\n        !sig.includes('j'),\n        'i64 not permitted in function signatures when WASM_BIGINT is disabled',\n      );\n      var typeNames = {\n        i: 'i32',\n        j: 'i64',\n        f: 'f32',\n        d: 'f64',\n        e: 'externref',\n        p: 'i32',\n      };\n      var type = {\n        parameters: [],\n        results: sig[0] == 'v' ? [] : [typeNames[sig[0]]],\n      };\n      for (var i = 1; i < sig.length; ++i) {\n        assert(sig[i] in typeNames, 'invalid signature char: ' + sig[i]);\n        type.parameters.push(typeNames[sig[i]]);\n      }\n      return type;\n    };\n\n    var generateFuncType = (sig, target) => {\n      var sigRet = sig.slice(0, 1);\n      var sigParam = sig.slice(1);\n      var typeCodes = {\n        i: 0x7f, // i32\n        p: 0x7f, // i32\n        j: 0x7e, // i64\n        f: 0x7d, // f32\n        d: 0x7c, // f64\n        e: 0x6f, // externref\n      };\n\n      // Parameters, length + signatures\n      target.push(0x60 /* form: func */);\n      uleb128Encode(sigParam.length, target);\n      for (var i = 0; i < sigParam.length; ++i) {\n        assert(sigParam[i] in typeCodes, 'invalid signature char: ' + sigParam[i]);\n        target.push(typeCodes[sigParam[i]]);\n      }\n\n      // Return values, length + signatures\n      // With no multi-return in MVP, either 0 (void) or 1 (anything else)\n      if (sigRet == 'v') {\n        target.push(0x00);\n      } else {\n        target.push(0x01, typeCodes[sigRet]);\n      }\n    };\n    var convertJsFunctionToWasm = (func, sig) => {\n      assert(\n        !sig.includes('j'),\n        'i64 not permitted in function signatures when WASM_BIGINT is disabled',\n      );\n\n      // If the type reflection proposal is available, use the new\n      // \"WebAssembly.Function\" constructor.\n      // Otherwise, construct a minimal wasm module importing the JS function and\n      // re-exporting it.\n      if (typeof WebAssembly.Function == 'function') {\n        return new WebAssembly.Function(sigToWasmTypes(sig), func);\n      }\n\n      // The module is static, with the exception of the type section, which is\n      // generated based on the signature passed in.\n      var typeSectionBody = [\n        0x01, // count: 1\n      ];\n      generateFuncType(sig, typeSectionBody);\n\n      // Rest of the module is static\n      var bytes = [\n        0x00,\n        0x61,\n        0x73,\n        0x6d, // magic (\"\\0asm\")\n        0x01,\n        0x00,\n        0x00,\n        0x00, // version: 1\n        0x01, // Type section code\n      ];\n      // Write the overall length of the type section followed by the body\n      uleb128Encode(typeSectionBody.length, bytes);\n      bytes.push(...typeSectionBody);\n\n      // The rest of the module is static\n      bytes.push(\n        0x02,\n        0x07, // import section\n        // (import \"e\" \"f\" (func 0 (type 0)))\n        0x01,\n        0x01,\n        0x65,\n        0x01,\n        0x66,\n        0x00,\n        0x00,\n        0x07,\n        0x05, // export section\n        // (export \"f\" (func 0 (type 0)))\n        0x01,\n        0x01,\n        0x66,\n        0x00,\n        0x00,\n      );\n\n      // We can compile this wasm module synchronously because it is very small.\n      // This accepts an import (at \"e.f\"), that it reroutes to an export (at \"f\")\n      var module = new WebAssembly.Module(new Uint8Array(bytes));\n      var instance = new WebAssembly.Instance(module, { e: { f: func } });\n      var wrappedFunc = instance.exports['f'];\n      return wrappedFunc;\n    };\n\n    var updateTableMap = (offset, count) => {\n      if (functionsInTableMap) {\n        for (var i = offset; i < offset + count; i++) {\n          var item = getWasmTableEntry(i);\n          // Ignore null values.\n          if (item) {\n            functionsInTableMap.set(item, i);\n          }\n        }\n      }\n    };\n\n    var functionsInTableMap;\n\n    var getFunctionAddress = (func) => {\n      // First, create the map if this is the first use.\n      if (!functionsInTableMap) {\n        functionsInTableMap = new WeakMap();\n        updateTableMap(0, wasmTable.length);\n      }\n      return functionsInTableMap.get(func) || 0;\n    };\n\n    var freeTableIndexes = [];\n\n    var getEmptyTableSlot = () => {\n      // Reuse a free index if there is one, otherwise grow.\n      if (freeTableIndexes.length) {\n        return freeTableIndexes.pop();\n      }\n      // Grow the table\n      try {\n        wasmTable.grow(1);\n      } catch (err) {\n        if (!(err instanceof RangeError)) {\n          throw err;\n        }\n        throw 'Unable to grow wasm table. Set ALLOW_TABLE_GROWTH.';\n      }\n      return wasmTable.length - 1;\n    };\n\n    var setWasmTableEntry = (idx, func) => {\n      wasmTable.set(idx, func);\n      // With ABORT_ON_WASM_EXCEPTIONS wasmTable.get is overridden to return wrapped\n      // functions so we need to call it here to retrieve the potential wrapper correctly\n      // instead of just storing 'func' directly into wasmTableMirror\n      wasmTableMirror[idx] = wasmTable.get(idx);\n    };\n\n    /** @param {string=} sig */\n    var addFunction = (func, sig) => {\n      assert(typeof func != 'undefined');\n      // Check if the function is already in the table, to ensure each function\n      // gets a unique index.\n      var rtn = getFunctionAddress(func);\n      if (rtn) {\n        return rtn;\n      }\n\n      // It's not in the table, add it now.\n\n      var ret = getEmptyTableSlot();\n\n      // Set the new value.\n      try {\n        // Attempting to call this with JS function will cause of table.set() to fail\n        setWasmTableEntry(ret, func);\n      } catch (err) {\n        if (!(err instanceof TypeError)) {\n          throw err;\n        }\n        assert(typeof sig != 'undefined', 'Missing signature argument to addFunction: ' + func);\n        var wrapped = convertJsFunctionToWasm(func, sig);\n        setWasmTableEntry(ret, wrapped);\n      }\n\n      functionsInTableMap.set(func, ret);\n\n      return ret;\n    };\n\n    var getCFunc = (ident) => {\n      var func = Module['_' + ident]; // closure exported function\n      assert(func, 'Cannot call unknown function ' + ident + ', make sure it is exported');\n      return func;\n    };\n\n    var writeArrayToMemory = (array, buffer) => {\n      assert(\n        array.length >= 0,\n        'writeArrayToMemory array must have a length (should be an array or typed array)',\n      );\n      HEAP8.set(array, buffer);\n    };\n\n    var stackAlloc = (sz) => __emscripten_stack_alloc(sz);\n    var stringToUTF8OnStack = (str) => {\n      var size = lengthBytesUTF8(str) + 1;\n      var ret = stackAlloc(size);\n      stringToUTF8(str, ret, size);\n      return ret;\n    };\n\n    /**\n     * @param {string|null=} returnType\n     * @param {Array=} argTypes\n     * @param {Arguments|Array=} args\n     * @param {Object=} opts\n     */\n    var ccall = (ident, returnType, argTypes, args, opts) => {\n      // For fast lookup of conversion functions\n      var toC = {\n        string: (str) => {\n          var ret = 0;\n          if (str !== null && str !== undefined && str !== 0) {\n            // null string\n            ret = stringToUTF8OnStack(str);\n          }\n          return ret;\n        },\n        array: (arr) => {\n          var ret = stackAlloc(arr.length);\n          writeArrayToMemory(arr, ret);\n          return ret;\n        },\n      };\n\n      function convertReturnValue(ret) {\n        if (returnType === 'string') {\n          return UTF8ToString(ret);\n        }\n        if (returnType === 'boolean') return Boolean(ret);\n        return ret;\n      }\n\n      var func = getCFunc(ident);\n      var cArgs = [];\n      var stack = 0;\n      assert(returnType !== 'array', 'Return type should not be \"array\".');\n      if (args) {\n        for (var i = 0; i < args.length; i++) {\n          var converter = toC[argTypes[i]];\n          if (converter) {\n            if (stack === 0) stack = stackSave();\n            cArgs[i] = converter(args[i]);\n          } else {\n            cArgs[i] = args[i];\n          }\n        }\n      }\n      var ret = func(...cArgs);\n      function onDone(ret) {\n        if (stack !== 0) stackRestore(stack);\n        return convertReturnValue(ret);\n      }\n\n      ret = onDone(ret);\n      return ret;\n    };\n\n    /**\n     * @param {string=} returnType\n     * @param {Array=} argTypes\n     * @param {Object=} opts\n     */\n    var cwrap = (ident, returnType, argTypes, opts) => {\n      return (...args) => ccall(ident, returnType, argTypes, args);\n    };\n\n    var removeFunction = (index) => {\n      functionsInTableMap.delete(getWasmTableEntry(index));\n      setWasmTableEntry(index, null);\n      freeTableIndexes.push(index);\n    };\n\n    var stringToUTF16 = (str, outPtr, maxBytesToWrite) => {\n      assert(outPtr % 2 == 0, 'Pointer passed to stringToUTF16 must be aligned to two bytes!');\n      assert(\n        typeof maxBytesToWrite == 'number',\n        'stringToUTF16(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!',\n      );\n      // Backwards compatibility: if max bytes is not specified, assume unsafe unbounded write is allowed.\n      maxBytesToWrite ??= 0x7fffffff;\n      if (maxBytesToWrite < 2) return 0;\n      maxBytesToWrite -= 2; // Null terminator.\n      var startPtr = outPtr;\n      var numCharsToWrite = maxBytesToWrite < str.length * 2 ? maxBytesToWrite / 2 : str.length;\n      for (var i = 0; i < numCharsToWrite; ++i) {\n        // charCodeAt returns a UTF-16 encoded code unit, so it can be directly written to the HEAP.\n        var codeUnit = str.charCodeAt(i); // possibly a lead surrogate\n        HEAP16[outPtr >> 1] = codeUnit;\n        outPtr += 2;\n      }\n      // Null-terminate the pointer to the HEAP.\n      HEAP16[outPtr >> 1] = 0;\n      return outPtr - startPtr;\n    };\n\n    FS.createPreloadedFile = FS_createPreloadedFile;\n    FS.staticInit();\n    // Set module methods based on EXPORTED_RUNTIME_METHODS\n    function checkIncomingModuleAPI() {\n      ignoredModuleProp('fetchSettings');\n    }\n    var wasmImports = {\n      /** @export */\n      __assert_fail: ___assert_fail,\n      /** @export */\n      __syscall_fcntl64: ___syscall_fcntl64,\n      /** @export */\n      __syscall_fstat64: ___syscall_fstat64,\n      /** @export */\n      __syscall_ftruncate64: ___syscall_ftruncate64,\n      /** @export */\n      __syscall_getdents64: ___syscall_getdents64,\n      /** @export */\n      __syscall_ioctl: ___syscall_ioctl,\n      /** @export */\n      __syscall_lstat64: ___syscall_lstat64,\n      /** @export */\n      __syscall_newfstatat: ___syscall_newfstatat,\n      /** @export */\n      __syscall_openat: ___syscall_openat,\n      /** @export */\n      __syscall_rmdir: ___syscall_rmdir,\n      /** @export */\n      __syscall_stat64: ___syscall_stat64,\n      /** @export */\n      __syscall_unlinkat: ___syscall_unlinkat,\n      /** @export */\n      _abort_js: __abort_js,\n      /** @export */\n      _emscripten_memcpy_js: __emscripten_memcpy_js,\n      /** @export */\n      _emscripten_throw_longjmp: __emscripten_throw_longjmp,\n      /** @export */\n      _gmtime_js: __gmtime_js,\n      /** @export */\n      _localtime_js: __localtime_js,\n      /** @export */\n      _tzset_js: __tzset_js,\n      /** @export */\n      emscripten_date_now: _emscripten_date_now,\n      /** @export */\n      emscripten_resize_heap: _emscripten_resize_heap,\n      /** @export */\n      environ_get: _environ_get,\n      /** @export */\n      environ_sizes_get: _environ_sizes_get,\n      /** @export */\n      fd_close: _fd_close,\n      /** @export */\n      fd_read: _fd_read,\n      /** @export */\n      fd_seek: _fd_seek,\n      /** @export */\n      fd_sync: _fd_sync,\n      /** @export */\n      fd_write: _fd_write,\n      /** @export */\n      invoke_ii,\n      /** @export */\n      invoke_iii,\n      /** @export */\n      invoke_iiii,\n      /** @export */\n      invoke_iiiii,\n      /** @export */\n      invoke_v,\n      /** @export */\n      invoke_vii,\n      /** @export */\n      invoke_viii,\n      /** @export */\n      invoke_viiii,\n      /** @export */\n      invoke_viiiiiiiii,\n    };\n    var wasmExports = createWasm();\n    (Module['_PDFiumExt_Init'] = createExportWrapper('PDFiumExt_Init', 0));\n    (Module['_FPDF_InitLibraryWithConfig'] = createExportWrapper(\n      'FPDF_InitLibraryWithConfig',\n      1,\n    ));\n    (Module['_PDFiumExt_OpenFileWriter'] = createExportWrapper(\n      'PDFiumExt_OpenFileWriter',\n      0,\n    ));\n    (Module['_PDFiumExt_GetFileWriterSize'] =\n      createExportWrapper('PDFiumExt_GetFileWriterSize', 1));\n    (Module['_PDFiumExt_GetFileWriterData'] =\n      createExportWrapper('PDFiumExt_GetFileWriterData', 3));\n    (Module['_PDFiumExt_CloseFileWriter'] = createExportWrapper(\n      'PDFiumExt_CloseFileWriter',\n      1,\n    ));\n    (Module['_PDFiumExt_SaveAsCopy'] = createExportWrapper(\n      'PDFiumExt_SaveAsCopy',\n      2,\n    ));\n    (Module['_FPDF_SaveAsCopy'] = createExportWrapper('FPDF_SaveAsCopy', 3));\n    (Module['_PDFiumExt_OpenFormFillInfo'] = createExportWrapper(\n      'PDFiumExt_OpenFormFillInfo',\n      0,\n    ));\n    (Module['_PDFiumExt_CloseFormFillInfo'] =\n      createExportWrapper('PDFiumExt_CloseFormFillInfo', 1));\n    (Module['_PDFiumExt_InitFormFillEnvironment'] =\n      createExportWrapper('PDFiumExt_InitFormFillEnvironment', 2));\n    (Module['_FPDFDOC_InitFormFillEnvironment'] =\n      createExportWrapper('FPDFDOC_InitFormFillEnvironment', 2));\n    (Module['_PDFiumExt_ExitFormFillEnvironment'] =\n      createExportWrapper('PDFiumExt_ExitFormFillEnvironment', 1));\n    (Module['_FPDFDOC_ExitFormFillEnvironment'] =\n      createExportWrapper('FPDFDOC_ExitFormFillEnvironment', 1));\n    (Module['_EPDFNamedDest_SetDest'] = createExportWrapper(\n      'EPDFNamedDest_SetDest',\n      3,\n    ));\n    (Module['_EPDFNamedDest_Remove'] = createExportWrapper(\n      'EPDFNamedDest_Remove',\n      2,\n    ));\n    (Module['_EPDFDest_CreateView'] = createExportWrapper(\n      'EPDFDest_CreateView',\n      4,\n    ));\n    (Module['_EPDFDest_CreateXYZ'] = createExportWrapper(\n      'EPDFDest_CreateXYZ',\n      7,\n    ));\n    (Module['_EPDFDest_CreateRemoteView'] = createExportWrapper(\n      'EPDFDest_CreateRemoteView',\n      5,\n    ));\n    (Module['_EPDFDest_CreateRemoteXYZ'] = createExportWrapper(\n      'EPDFDest_CreateRemoteXYZ',\n      8,\n    ));\n    (Module['_EPDFAction_CreateGoTo'] = createExportWrapper(\n      'EPDFAction_CreateGoTo',\n      2,\n    ));\n    (Module['_EPDFAction_CreateGoToNamed'] = createExportWrapper(\n      'EPDFAction_CreateGoToNamed',\n      2,\n    ));\n    (Module['_EPDFAction_CreateLaunch'] = createExportWrapper(\n      'EPDFAction_CreateLaunch',\n      2,\n    ));\n    (Module['_EPDFAction_CreateRemoteGoToByName'] =\n      createExportWrapper('EPDFAction_CreateRemoteGoToByName', 3));\n    (Module['_EPDFAction_CreateRemoteGoToDest'] =\n      createExportWrapper('EPDFAction_CreateRemoteGoToDest', 3));\n    (Module['_EPDFAction_CreateURI'] = createExportWrapper(\n      'EPDFAction_CreateURI',\n      2,\n    ));\n    (Module['_EPDFBookmark_Create'] = createExportWrapper(\n      'EPDFBookmark_Create',\n      2,\n    ));\n    (Module['_EPDFBookmark_Delete'] = createExportWrapper(\n      'EPDFBookmark_Delete',\n      2,\n    ));\n    (Module['_EPDFBookmark_AppendChild'] = createExportWrapper(\n      'EPDFBookmark_AppendChild',\n      3,\n    ));\n    (Module['_EPDFBookmark_InsertAfter'] = createExportWrapper(\n      'EPDFBookmark_InsertAfter',\n      4,\n    ));\n    (Module['_EPDFBookmark_Clear'] = createExportWrapper(\n      'EPDFBookmark_Clear',\n      1,\n    ));\n    (Module['_EPDFBookmark_SetTitle'] = createExportWrapper(\n      'EPDFBookmark_SetTitle',\n      2,\n    ));\n    (Module['_EPDFBookmark_SetDest'] = createExportWrapper(\n      'EPDFBookmark_SetDest',\n      3,\n    ));\n    (Module['_EPDFBookmark_SetAction'] = createExportWrapper(\n      'EPDFBookmark_SetAction',\n      3,\n    ));\n    (Module['_EPDFBookmark_ClearTarget'] = createExportWrapper(\n      'EPDFBookmark_ClearTarget',\n      1,\n    ));\n    (Module['_EPDF_PNG_EncodeRGBA'] = createExportWrapper(\n      'EPDF_PNG_EncodeRGBA',\n      6,\n    ));\n    (Module['_FPDFAnnot_IsSupportedSubtype'] =\n      createExportWrapper('FPDFAnnot_IsSupportedSubtype', 1));\n    (Module['_FPDFPage_CreateAnnot'] = createExportWrapper(\n      'FPDFPage_CreateAnnot',\n      2,\n    ));\n    (Module['_FPDFPage_GetAnnotCount'] = createExportWrapper(\n      'FPDFPage_GetAnnotCount',\n      1,\n    ));\n    (Module['_FPDFPage_GetAnnot'] = createExportWrapper(\n      'FPDFPage_GetAnnot',\n      2,\n    ));\n    (Module['_FPDFPage_GetAnnotIndex'] = createExportWrapper(\n      'FPDFPage_GetAnnotIndex',\n      2,\n    ));\n    (Module['_FPDFPage_CloseAnnot'] = createExportWrapper(\n      'FPDFPage_CloseAnnot',\n      1,\n    ));\n    (Module['_FPDFPage_RemoveAnnot'] = createExportWrapper(\n      'FPDFPage_RemoveAnnot',\n      2,\n    ));\n    (Module['_FPDFAnnot_GetSubtype'] = createExportWrapper(\n      'FPDFAnnot_GetSubtype',\n      1,\n    ));\n    (Module['_FPDFAnnot_IsObjectSupportedSubtype'] =\n      createExportWrapper('FPDFAnnot_IsObjectSupportedSubtype', 1));\n    (Module['_FPDFAnnot_UpdateObject'] = createExportWrapper(\n      'FPDFAnnot_UpdateObject',\n      2,\n    ));\n    (Module['_FPDFAnnot_AddInkStroke'] = createExportWrapper(\n      'FPDFAnnot_AddInkStroke',\n      3,\n    ));\n    (Module['_FPDFAnnot_RemoveInkList'] = createExportWrapper(\n      'FPDFAnnot_RemoveInkList',\n      1,\n    ));\n    (Module['_FPDFAnnot_AppendObject'] = createExportWrapper(\n      'FPDFAnnot_AppendObject',\n      2,\n    ));\n    (Module['_FPDFAnnot_GetObjectCount'] = createExportWrapper(\n      'FPDFAnnot_GetObjectCount',\n      1,\n    ));\n    (Module['_FPDFAnnot_GetObject'] = createExportWrapper(\n      'FPDFAnnot_GetObject',\n      2,\n    ));\n    (Module['_FPDFAnnot_RemoveObject'] = createExportWrapper(\n      'FPDFAnnot_RemoveObject',\n      2,\n    ));\n    (Module['_FPDFAnnot_SetColor'] = createExportWrapper(\n      'FPDFAnnot_SetColor',\n      6,\n    ));\n    (Module['_FPDFAnnot_GetColor'] = createExportWrapper(\n      'FPDFAnnot_GetColor',\n      6,\n    ));\n    (Module['_FPDFAnnot_HasAttachmentPoints'] =\n      createExportWrapper('FPDFAnnot_HasAttachmentPoints', 1));\n    (Module['_FPDFAnnot_SetAttachmentPoints'] =\n      createExportWrapper('FPDFAnnot_SetAttachmentPoints', 3));\n    (Module['_FPDFAnnot_AppendAttachmentPoints'] =\n      createExportWrapper('FPDFAnnot_AppendAttachmentPoints', 2));\n    (Module['_FPDFAnnot_CountAttachmentPoints'] =\n      createExportWrapper('FPDFAnnot_CountAttachmentPoints', 1));\n    (Module['_FPDFAnnot_GetAttachmentPoints'] =\n      createExportWrapper('FPDFAnnot_GetAttachmentPoints', 3));\n    (Module['_FPDFAnnot_SetRect'] = createExportWrapper(\n      'FPDFAnnot_SetRect',\n      2,\n    ));\n    (Module['_FPDFAnnot_GetRect'] = createExportWrapper(\n      'FPDFAnnot_GetRect',\n      2,\n    ));\n    (Module['_FPDFAnnot_GetVertices'] = createExportWrapper(\n      'FPDFAnnot_GetVertices',\n      3,\n    ));\n    (Module['_FPDFAnnot_GetInkListCount'] = createExportWrapper(\n      'FPDFAnnot_GetInkListCount',\n      1,\n    ));\n    (Module['_FPDFAnnot_GetInkListPath'] = createExportWrapper(\n      'FPDFAnnot_GetInkListPath',\n      4,\n    ));\n    (Module['_FPDFAnnot_GetLine'] = createExportWrapper(\n      'FPDFAnnot_GetLine',\n      3,\n    ));\n    (Module['_FPDFAnnot_SetBorder'] = createExportWrapper(\n      'FPDFAnnot_SetBorder',\n      4,\n    ));\n    (Module['_FPDFAnnot_GetBorder'] = createExportWrapper(\n      'FPDFAnnot_GetBorder',\n      4,\n    ));\n    (Module['_FPDFAnnot_HasKey'] = createExportWrapper(\n      'FPDFAnnot_HasKey',\n      2,\n    ));\n    (Module['_FPDFAnnot_GetValueType'] = createExportWrapper(\n      'FPDFAnnot_GetValueType',\n      2,\n    ));\n    (Module['_FPDFAnnot_SetStringValue'] = createExportWrapper(\n      'FPDFAnnot_SetStringValue',\n      3,\n    ));\n    (Module['_FPDFAnnot_GetStringValue'] = createExportWrapper(\n      'FPDFAnnot_GetStringValue',\n      4,\n    ));\n    (Module['_FPDFAnnot_GetNumberValue'] = createExportWrapper(\n      'FPDFAnnot_GetNumberValue',\n      3,\n    ));\n    (Module['_FPDFAnnot_SetAP'] = createExportWrapper('FPDFAnnot_SetAP', 3));\n    (Module['_FPDFAnnot_GetAP'] = createExportWrapper('FPDFAnnot_GetAP', 4));\n    (Module['_FPDFAnnot_GetLinkedAnnot'] = createExportWrapper(\n      'FPDFAnnot_GetLinkedAnnot',\n      2,\n    ));\n    (Module['_FPDFAnnot_GetFlags'] = createExportWrapper(\n      'FPDFAnnot_GetFlags',\n      1,\n    ));\n    (Module['_FPDFAnnot_SetFlags'] = createExportWrapper(\n      'FPDFAnnot_SetFlags',\n      2,\n    ));\n    (Module['_FPDFAnnot_GetFormFieldFlags'] =\n      createExportWrapper('FPDFAnnot_GetFormFieldFlags', 2));\n    (Module['_FPDFAnnot_SetFormFieldFlags'] =\n      createExportWrapper('FPDFAnnot_SetFormFieldFlags', 3));\n    (Module['_FPDFAnnot_GetFormFieldAtPoint'] =\n      createExportWrapper('FPDFAnnot_GetFormFieldAtPoint', 3));\n    (Module['_FPDFAnnot_GetFormFieldName'] = createExportWrapper(\n      'FPDFAnnot_GetFormFieldName',\n      4,\n    ));\n    (Module['_FPDFAnnot_GetFormFieldType'] = createExportWrapper(\n      'FPDFAnnot_GetFormFieldType',\n      2,\n    ));\n    (Module[\n      '_FPDFAnnot_GetFormAdditionalActionJavaScript'\n    ] = createExportWrapper('FPDFAnnot_GetFormAdditionalActionJavaScript', 5));\n    (Module['_FPDFAnnot_GetFormFieldAlternateName'] =\n      createExportWrapper('FPDFAnnot_GetFormFieldAlternateName', 4));\n    (Module['_FPDFAnnot_GetFormFieldValue'] =\n      createExportWrapper('FPDFAnnot_GetFormFieldValue', 4));\n    (Module['_FPDFAnnot_GetOptionCount'] = createExportWrapper(\n      'FPDFAnnot_GetOptionCount',\n      2,\n    ));\n    (Module['_FPDFAnnot_GetOptionLabel'] = createExportWrapper(\n      'FPDFAnnot_GetOptionLabel',\n      5,\n    ));\n    (Module['_FPDFAnnot_IsOptionSelected'] = createExportWrapper(\n      'FPDFAnnot_IsOptionSelected',\n      3,\n    ));\n    (Module['_FPDFAnnot_GetFontSize'] = createExportWrapper(\n      'FPDFAnnot_GetFontSize',\n      3,\n    ));\n    (Module['_FPDFAnnot_SetFontColor'] = createExportWrapper(\n      'FPDFAnnot_SetFontColor',\n      5,\n    ));\n    (Module['_FPDFAnnot_GetFontColor'] = createExportWrapper(\n      'FPDFAnnot_GetFontColor',\n      5,\n    ));\n    (Module['_FPDFAnnot_IsChecked'] = createExportWrapper(\n      'FPDFAnnot_IsChecked',\n      2,\n    ));\n    (Module['_FPDFAnnot_SetFocusableSubtypes'] =\n      createExportWrapper('FPDFAnnot_SetFocusableSubtypes', 3));\n    (Module['_FPDFAnnot_GetFocusableSubtypesCount'] =\n      createExportWrapper('FPDFAnnot_GetFocusableSubtypesCount', 1));\n    (Module['_FPDFAnnot_GetFocusableSubtypes'] =\n      createExportWrapper('FPDFAnnot_GetFocusableSubtypes', 3));\n    (Module['_FPDFAnnot_GetLink'] = createExportWrapper(\n      'FPDFAnnot_GetLink',\n      1,\n    ));\n    (Module['_FPDFAnnot_GetFormControlCount'] =\n      createExportWrapper('FPDFAnnot_GetFormControlCount', 2));\n    (Module['_FPDFAnnot_GetFormControlIndex'] =\n      createExportWrapper('FPDFAnnot_GetFormControlIndex', 2));\n    (Module['_FPDFAnnot_GetFormFieldExportValue'] =\n      createExportWrapper('FPDFAnnot_GetFormFieldExportValue', 4));\n    (Module['_FPDFAnnot_SetURI'] = createExportWrapper(\n      'FPDFAnnot_SetURI',\n      2,\n    ));\n    (Module['_FPDFAnnot_GetFileAttachment'] =\n      createExportWrapper('FPDFAnnot_GetFileAttachment', 1));\n    (Module['_FPDFAnnot_AddFileAttachment'] =\n      createExportWrapper('FPDFAnnot_AddFileAttachment', 2));\n    (Module['_EPDFAnnot_SetColor'] = createExportWrapper(\n      'EPDFAnnot_SetColor',\n      5,\n    ));\n    (Module['_EPDFAnnot_GetColor'] = createExportWrapper(\n      'EPDFAnnot_GetColor',\n      5,\n    ));\n    (Module['_EPDFAnnot_ClearColor'] = createExportWrapper(\n      'EPDFAnnot_ClearColor',\n      2,\n    ));\n    (Module['_EPDFAnnot_SetOpacity'] = createExportWrapper(\n      'EPDFAnnot_SetOpacity',\n      2,\n    ));\n    (Module['_EPDFAnnot_GetOpacity'] = createExportWrapper(\n      'EPDFAnnot_GetOpacity',\n      2,\n    ));\n    (Module['_EPDFAnnot_GetBorderEffect'] = createExportWrapper(\n      'EPDFAnnot_GetBorderEffect',\n      2,\n    ));\n    (Module['_EPDFAnnot_GetRectangleDifferences'] =\n      createExportWrapper('EPDFAnnot_GetRectangleDifferences', 5));\n    (Module['_EPDFAnnot_GetBorderDashPatternCount'] =\n      createExportWrapper('EPDFAnnot_GetBorderDashPatternCount', 1));\n    (Module['_EPDFAnnot_GetBorderDashPattern'] =\n      createExportWrapper('EPDFAnnot_GetBorderDashPattern', 3));\n    (Module['_EPDFAnnot_SetBorderDashPattern'] =\n      createExportWrapper('EPDFAnnot_SetBorderDashPattern', 3));\n    (Module['_EPDFAnnot_GetBorderStyle'] = createExportWrapper(\n      'EPDFAnnot_GetBorderStyle',\n      2,\n    ));\n    (Module['_EPDFAnnot_SetBorderStyle'] = createExportWrapper(\n      'EPDFAnnot_SetBorderStyle',\n      3,\n    ));\n    (Module['_EPDFAnnot_GenerateAppearance'] =\n      createExportWrapper('EPDFAnnot_GenerateAppearance', 1));\n    (Module['_EPDFAnnot_GenerateAppearanceWithBlend'] =\n      createExportWrapper('EPDFAnnot_GenerateAppearanceWithBlend', 2));\n    (Module['_EPDFAnnot_GetBlendMode'] = createExportWrapper(\n      'EPDFAnnot_GetBlendMode',\n      1,\n    ));\n    (Module['_EPDFAnnot_SetIntent'] = createExportWrapper(\n      'EPDFAnnot_SetIntent',\n      2,\n    ));\n    (Module['_EPDFAnnot_GetIntent'] = createExportWrapper(\n      'EPDFAnnot_GetIntent',\n      3,\n    ));\n    (Module['_EPDFAnnot_GetRichContent'] = createExportWrapper(\n      'EPDFAnnot_GetRichContent',\n      3,\n    ));\n    (Module['_EPDFAnnot_SetLineEndings'] = createExportWrapper(\n      'EPDFAnnot_SetLineEndings',\n      3,\n    ));\n    (Module['_EPDFAnnot_GetLineEndings'] = createExportWrapper(\n      'EPDFAnnot_GetLineEndings',\n      3,\n    ));\n    (Module['_EPDFAnnot_SetVertices'] = createExportWrapper(\n      'EPDFAnnot_SetVertices',\n      3,\n    ));\n    (Module['_EPDFAnnot_SetLine'] = createExportWrapper(\n      'EPDFAnnot_SetLine',\n      3,\n    ));\n    (Module['_EPDFAnnot_SetDefaultAppearance'] =\n      createExportWrapper('EPDFAnnot_SetDefaultAppearance', 6));\n    (Module['_EPDFAnnot_GetDefaultAppearance'] =\n      createExportWrapper('EPDFAnnot_GetDefaultAppearance', 6));\n    (Module['_EPDFAnnot_SetTextAlignment'] = createExportWrapper(\n      'EPDFAnnot_SetTextAlignment',\n      2,\n    ));\n    (Module['_EPDFAnnot_GetTextAlignment'] = createExportWrapper(\n      'EPDFAnnot_GetTextAlignment',\n      1,\n    ));\n    (Module['_EPDFAnnot_SetVerticalAlignment'] =\n      createExportWrapper('EPDFAnnot_SetVerticalAlignment', 2));\n    (Module['_EPDFAnnot_GetVerticalAlignment'] =\n      createExportWrapper('EPDFAnnot_GetVerticalAlignment', 1));\n    (Module['_EPDFPage_GetAnnotByName'] = createExportWrapper(\n      'EPDFPage_GetAnnotByName',\n      2,\n    ));\n    (Module['_EPDFPage_RemoveAnnotByName'] = createExportWrapper(\n      'EPDFPage_RemoveAnnotByName',\n      2,\n    ));\n    (Module['_EPDFAnnot_SetLinkedAnnot'] = createExportWrapper(\n      'EPDFAnnot_SetLinkedAnnot',\n      3,\n    ));\n    (Module['_EPDFPage_GetAnnotCountRaw'] = createExportWrapper(\n      'EPDFPage_GetAnnotCountRaw',\n      2,\n    ));\n    (Module['_EPDFPage_GetAnnotRaw'] = createExportWrapper(\n      'EPDFPage_GetAnnotRaw',\n      3,\n    ));\n    (Module['_EPDFPage_RemoveAnnotRaw'] = createExportWrapper(\n      'EPDFPage_RemoveAnnotRaw',\n      3,\n    ));\n    (Module['_EPDFAnnot_SetIcon'] = createExportWrapper(\n      'EPDFAnnot_SetIcon',\n      2,\n    ));\n    (Module['_EPDFAnnot_GetIcon'] = createExportWrapper(\n      'EPDFAnnot_GetIcon',\n      1,\n    ));\n    (Module['_EPDFAnnot_UpdateAppearanceToRect'] =\n      createExportWrapper('EPDFAnnot_UpdateAppearanceToRect', 2));\n    (Module['_EPDFPage_CreateAnnot'] = createExportWrapper(\n      'EPDFPage_CreateAnnot',\n      2,\n    ));\n    (Module['_FPDFDoc_GetAttachmentCount'] = createExportWrapper(\n      'FPDFDoc_GetAttachmentCount',\n      1,\n    ));\n    (Module['_FPDFDoc_AddAttachment'] = createExportWrapper(\n      'FPDFDoc_AddAttachment',\n      2,\n    ));\n    (Module['_FPDFDoc_GetAttachment'] = createExportWrapper(\n      'FPDFDoc_GetAttachment',\n      2,\n    ));\n    (Module['_FPDFDoc_DeleteAttachment'] = createExportWrapper(\n      'FPDFDoc_DeleteAttachment',\n      2,\n    ));\n    (Module['_FPDFAttachment_GetName'] = createExportWrapper(\n      'FPDFAttachment_GetName',\n      3,\n    ));\n    (Module['_FPDFAttachment_HasKey'] = createExportWrapper(\n      'FPDFAttachment_HasKey',\n      2,\n    ));\n    (Module['_FPDFAttachment_GetValueType'] =\n      createExportWrapper('FPDFAttachment_GetValueType', 2));\n    (Module['_FPDFAttachment_SetStringValue'] =\n      createExportWrapper('FPDFAttachment_SetStringValue', 3));\n    (Module['_FPDFAttachment_GetStringValue'] =\n      createExportWrapper('FPDFAttachment_GetStringValue', 4));\n    (Module['_FPDFAttachment_SetFile'] = createExportWrapper(\n      'FPDFAttachment_SetFile',\n      4,\n    ));\n    (Module['_FPDFAttachment_GetFile'] = createExportWrapper(\n      'FPDFAttachment_GetFile',\n      4,\n    ));\n    (Module['_FPDFAttachment_GetSubtype'] = createExportWrapper(\n      'FPDFAttachment_GetSubtype',\n      3,\n    ));\n    (Module['_EPDFAttachment_SetSubtype'] = createExportWrapper(\n      'EPDFAttachment_SetSubtype',\n      2,\n    ));\n    (Module['_EPDFAttachment_SetDescription'] =\n      createExportWrapper('EPDFAttachment_SetDescription', 2));\n    (Module['_EPDFAttachment_GetDescription'] =\n      createExportWrapper('EPDFAttachment_GetDescription', 3));\n    (Module['_EPDFAttachment_GetIntegerValue'] =\n      createExportWrapper('EPDFAttachment_GetIntegerValue', 3));\n    (Module['_FPDFCatalog_IsTagged'] = createExportWrapper(\n      'FPDFCatalog_IsTagged',\n      1,\n    ));\n    (Module['_FPDFCatalog_SetLanguage'] = createExportWrapper(\n      'FPDFCatalog_SetLanguage',\n      2,\n    ));\n    (Module['_EPDFCatalog_GetLanguage'] = createExportWrapper(\n      'EPDFCatalog_GetLanguage',\n      3,\n    ));\n    (Module['_FPDFAvail_Create'] = createExportWrapper(\n      'FPDFAvail_Create',\n      2,\n    ));\n    (Module['_FPDFAvail_Destroy'] = createExportWrapper(\n      'FPDFAvail_Destroy',\n      1,\n    ));\n    (Module['_FPDFAvail_IsDocAvail'] = createExportWrapper(\n      'FPDFAvail_IsDocAvail',\n      2,\n    ));\n    (Module['_FPDFAvail_GetDocument'] = createExportWrapper(\n      'FPDFAvail_GetDocument',\n      2,\n    ));\n    (Module['_FPDFAvail_GetFirstPageNum'] = createExportWrapper(\n      'FPDFAvail_GetFirstPageNum',\n      1,\n    ));\n    (Module['_FPDFAvail_IsPageAvail'] = createExportWrapper(\n      'FPDFAvail_IsPageAvail',\n      3,\n    ));\n    (Module['_FPDFAvail_IsFormAvail'] = createExportWrapper(\n      'FPDFAvail_IsFormAvail',\n      2,\n    ));\n    (Module['_FPDFAvail_IsLinearized'] = createExportWrapper(\n      'FPDFAvail_IsLinearized',\n      1,\n    ));\n    (Module['_FPDFBookmark_GetFirstChild'] = createExportWrapper(\n      'FPDFBookmark_GetFirstChild',\n      2,\n    ));\n    (Module['_FPDFBookmark_GetNextSibling'] =\n      createExportWrapper('FPDFBookmark_GetNextSibling', 2));\n    (Module['_FPDFBookmark_GetTitle'] = createExportWrapper(\n      'FPDFBookmark_GetTitle',\n      3,\n    ));\n    (Module['_FPDFBookmark_GetCount'] = createExportWrapper(\n      'FPDFBookmark_GetCount',\n      1,\n    ));\n    (Module['_FPDFBookmark_Find'] = createExportWrapper(\n      'FPDFBookmark_Find',\n      2,\n    ));\n    (Module['_FPDFBookmark_GetDest'] = createExportWrapper(\n      'FPDFBookmark_GetDest',\n      2,\n    ));\n    (Module['_FPDFBookmark_GetAction'] = createExportWrapper(\n      'FPDFBookmark_GetAction',\n      1,\n    ));\n    (Module['_FPDFAction_GetType'] = createExportWrapper(\n      'FPDFAction_GetType',\n      1,\n    ));\n    (Module['_FPDFAction_GetDest'] = createExportWrapper(\n      'FPDFAction_GetDest',\n      2,\n    ));\n    (Module['_FPDFAction_GetFilePath'] = createExportWrapper(\n      'FPDFAction_GetFilePath',\n      3,\n    ));\n    (Module['_FPDFAction_GetURIPath'] = createExportWrapper(\n      'FPDFAction_GetURIPath',\n      4,\n    ));\n    (Module['_FPDFDest_GetDestPageIndex'] = createExportWrapper(\n      'FPDFDest_GetDestPageIndex',\n      2,\n    ));\n    (Module['_FPDFDest_GetView'] = createExportWrapper(\n      'FPDFDest_GetView',\n      3,\n    ));\n    (Module['_FPDFDest_GetLocationInPage'] = createExportWrapper(\n      'FPDFDest_GetLocationInPage',\n      7,\n    ));\n    (Module['_FPDFLink_GetLinkAtPoint'] = createExportWrapper(\n      'FPDFLink_GetLinkAtPoint',\n      3,\n    ));\n    (Module['_FPDFLink_GetLinkZOrderAtPoint'] =\n      createExportWrapper('FPDFLink_GetLinkZOrderAtPoint', 3));\n    (Module['_FPDFLink_GetDest'] = createExportWrapper(\n      'FPDFLink_GetDest',\n      2,\n    ));\n    (Module['_FPDFLink_GetAction'] = createExportWrapper(\n      'FPDFLink_GetAction',\n      1,\n    ));\n    (Module['_FPDFLink_Enumerate'] = createExportWrapper(\n      'FPDFLink_Enumerate',\n      3,\n    ));\n    (Module['_FPDFLink_GetAnnot'] = createExportWrapper(\n      'FPDFLink_GetAnnot',\n      2,\n    ));\n    (Module['_FPDFLink_GetAnnotRect'] = createExportWrapper(\n      'FPDFLink_GetAnnotRect',\n      2,\n    ));\n    (Module['_FPDFLink_CountQuadPoints'] = createExportWrapper(\n      'FPDFLink_CountQuadPoints',\n      1,\n    ));\n    (Module['_FPDFLink_GetQuadPoints'] = createExportWrapper(\n      'FPDFLink_GetQuadPoints',\n      3,\n    ));\n    (Module['_FPDF_GetPageAAction'] = createExportWrapper(\n      'FPDF_GetPageAAction',\n      2,\n    ));\n    (Module['_FPDF_GetFileIdentifier'] = createExportWrapper(\n      'FPDF_GetFileIdentifier',\n      4,\n    ));\n    (Module['_FPDF_GetMetaText'] = createExportWrapper(\n      'FPDF_GetMetaText',\n      4,\n    ));\n    (Module['_FPDF_GetPageLabel'] = createExportWrapper(\n      'FPDF_GetPageLabel',\n      4,\n    ));\n    (Module['_EPDF_SetMetaText'] = createExportWrapper(\n      'EPDF_SetMetaText',\n      3,\n    ));\n    (Module['_EPDF_HasMetaText'] = createExportWrapper(\n      'EPDF_HasMetaText',\n      2,\n    ));\n    (Module['_EPDF_GetMetaTrapped'] = createExportWrapper(\n      'EPDF_GetMetaTrapped',\n      1,\n    ));\n    (Module['_EPDF_SetMetaTrapped'] = createExportWrapper(\n      'EPDF_SetMetaTrapped',\n      2,\n    ));\n    (Module['_EPDF_GetMetaKeyCount'] = createExportWrapper(\n      'EPDF_GetMetaKeyCount',\n      2,\n    ));\n    (Module['_EPDF_GetMetaKeyName'] = createExportWrapper(\n      'EPDF_GetMetaKeyName',\n      5,\n    ));\n    (Module['_FPDFPageObj_NewImageObj'] = createExportWrapper(\n      'FPDFPageObj_NewImageObj',\n      1,\n    ));\n    (Module['_FPDFImageObj_LoadJpegFile'] = createExportWrapper(\n      'FPDFImageObj_LoadJpegFile',\n      4,\n    ));\n    (Module['_FPDFImageObj_LoadJpegFileInline'] =\n      createExportWrapper('FPDFImageObj_LoadJpegFileInline', 4));\n    (Module['_FPDFImageObj_SetMatrix'] = createExportWrapper(\n      'FPDFImageObj_SetMatrix',\n      7,\n    ));\n    (Module['_FPDFImageObj_SetBitmap'] = createExportWrapper(\n      'FPDFImageObj_SetBitmap',\n      4,\n    ));\n    (Module['_FPDFImageObj_GetBitmap'] = createExportWrapper(\n      'FPDFImageObj_GetBitmap',\n      1,\n    ));\n    (Module['_FPDFImageObj_GetRenderedBitmap'] =\n      createExportWrapper('FPDFImageObj_GetRenderedBitmap', 3));\n    (Module['_FPDFImageObj_GetImageDataDecoded'] =\n      createExportWrapper('FPDFImageObj_GetImageDataDecoded', 3));\n    (Module['_FPDFImageObj_GetImageDataRaw'] =\n      createExportWrapper('FPDFImageObj_GetImageDataRaw', 3));\n    (Module['_FPDFImageObj_GetImageFilterCount'] =\n      createExportWrapper('FPDFImageObj_GetImageFilterCount', 1));\n    (Module['_FPDFImageObj_GetImageFilter'] =\n      createExportWrapper('FPDFImageObj_GetImageFilter', 4));\n    (Module['_FPDFImageObj_GetImageMetadata'] =\n      createExportWrapper('FPDFImageObj_GetImageMetadata', 3));\n    (Module['_FPDFImageObj_GetImagePixelSize'] =\n      createExportWrapper('FPDFImageObj_GetImagePixelSize', 3));\n    (Module['_FPDFImageObj_GetIccProfileDataDecoded'] =\n      createExportWrapper('FPDFImageObj_GetIccProfileDataDecoded', 5));\n    (Module['_FPDF_CreateNewDocument'] = createExportWrapper(\n      'FPDF_CreateNewDocument',\n      0,\n    ));\n    (Module['_FPDFPage_Delete'] = createExportWrapper('FPDFPage_Delete', 2));\n    (Module['_FPDF_MovePages'] = createExportWrapper('FPDF_MovePages', 4));\n    (Module['_FPDFPage_New'] = createExportWrapper('FPDFPage_New', 4));\n    (Module['_FPDFPage_GetRotation'] = createExportWrapper(\n      'FPDFPage_GetRotation',\n      1,\n    ));\n    (Module['_FPDFPage_InsertObject'] = createExportWrapper(\n      'FPDFPage_InsertObject',\n      2,\n    ));\n    (Module['_FPDFPage_InsertObjectAtIndex'] =\n      createExportWrapper('FPDFPage_InsertObjectAtIndex', 3));\n    (Module['_FPDFPage_RemoveObject'] = createExportWrapper(\n      'FPDFPage_RemoveObject',\n      2,\n    ));\n    (Module['_FPDFPage_CountObjects'] = createExportWrapper(\n      'FPDFPage_CountObjects',\n      1,\n    ));\n    (Module['_FPDFPage_GetObject'] = createExportWrapper(\n      'FPDFPage_GetObject',\n      2,\n    ));\n    (Module['_FPDFPage_HasTransparency'] = createExportWrapper(\n      'FPDFPage_HasTransparency',\n      1,\n    ));\n    (Module['_FPDFPageObj_Destroy'] = createExportWrapper(\n      'FPDFPageObj_Destroy',\n      1,\n    ));\n    (Module['_FPDFPageObj_GetMarkedContentID'] =\n      createExportWrapper('FPDFPageObj_GetMarkedContentID', 1));\n    (Module['_FPDFPageObj_CountMarks'] = createExportWrapper(\n      'FPDFPageObj_CountMarks',\n      1,\n    ));\n    (Module['_FPDFPageObj_GetMark'] = createExportWrapper(\n      'FPDFPageObj_GetMark',\n      2,\n    ));\n    (Module['_FPDFPageObj_AddMark'] = createExportWrapper(\n      'FPDFPageObj_AddMark',\n      2,\n    ));\n    (Module['_FPDFPageObj_RemoveMark'] = createExportWrapper(\n      'FPDFPageObj_RemoveMark',\n      2,\n    ));\n    (Module['_FPDFPageObjMark_GetName'] = createExportWrapper(\n      'FPDFPageObjMark_GetName',\n      4,\n    ));\n    (Module['_FPDFPageObjMark_CountParams'] =\n      createExportWrapper('FPDFPageObjMark_CountParams', 1));\n    (Module['_FPDFPageObjMark_GetParamKey'] =\n      createExportWrapper('FPDFPageObjMark_GetParamKey', 5));\n    (Module['_FPDFPageObjMark_GetParamValueType'] =\n      createExportWrapper('FPDFPageObjMark_GetParamValueType', 2));\n    (Module['_FPDFPageObjMark_GetParamIntValue'] =\n      createExportWrapper('FPDFPageObjMark_GetParamIntValue', 3));\n    (Module['_FPDFPageObjMark_GetParamStringValue'] =\n      createExportWrapper('FPDFPageObjMark_GetParamStringValue', 5));\n    (Module['_FPDFPageObjMark_GetParamBlobValue'] =\n      createExportWrapper('FPDFPageObjMark_GetParamBlobValue', 5));\n    (Module['_FPDFPageObj_HasTransparency'] =\n      createExportWrapper('FPDFPageObj_HasTransparency', 1));\n    (Module['_FPDFPageObjMark_SetIntParam'] =\n      createExportWrapper('FPDFPageObjMark_SetIntParam', 5));\n    (Module['_FPDFPageObjMark_SetStringParam'] =\n      createExportWrapper('FPDFPageObjMark_SetStringParam', 5));\n    (Module['_FPDFPageObjMark_SetBlobParam'] =\n      createExportWrapper('FPDFPageObjMark_SetBlobParam', 6));\n    (Module['_FPDFPageObjMark_RemoveParam'] =\n      createExportWrapper('FPDFPageObjMark_RemoveParam', 3));\n    (Module['_FPDFPageObj_GetType'] = createExportWrapper(\n      'FPDFPageObj_GetType',\n      1,\n    ));\n    (Module['_FPDFPageObj_GetIsActive'] = createExportWrapper(\n      'FPDFPageObj_GetIsActive',\n      2,\n    ));\n    (Module['_FPDFPageObj_SetIsActive'] = createExportWrapper(\n      'FPDFPageObj_SetIsActive',\n      2,\n    ));\n    (Module['_FPDFPage_GenerateContent'] = createExportWrapper(\n      'FPDFPage_GenerateContent',\n      1,\n    ));\n    (Module['_FPDFPageObj_Transform'] = createExportWrapper(\n      'FPDFPageObj_Transform',\n      7,\n    ));\n    (Module['_FPDFPageObj_TransformF'] = createExportWrapper(\n      'FPDFPageObj_TransformF',\n      2,\n    ));\n    (Module['_FPDFPageObj_GetMatrix'] = createExportWrapper(\n      'FPDFPageObj_GetMatrix',\n      2,\n    ));\n    (Module['_FPDFPageObj_SetMatrix'] = createExportWrapper(\n      'FPDFPageObj_SetMatrix',\n      2,\n    ));\n    (Module['_FPDFPageObj_SetBlendMode'] = createExportWrapper(\n      'FPDFPageObj_SetBlendMode',\n      2,\n    ));\n    (Module['_FPDFPage_TransformAnnots'] = createExportWrapper(\n      'FPDFPage_TransformAnnots',\n      7,\n    ));\n    (Module['_FPDFPage_SetRotation'] = createExportWrapper(\n      'FPDFPage_SetRotation',\n      2,\n    ));\n    (Module['_FPDFPageObj_SetFillColor'] = createExportWrapper(\n      'FPDFPageObj_SetFillColor',\n      5,\n    ));\n    (Module['_FPDFPageObj_GetFillColor'] = createExportWrapper(\n      'FPDFPageObj_GetFillColor',\n      5,\n    ));\n    (Module['_FPDFPageObj_GetBounds'] = createExportWrapper(\n      'FPDFPageObj_GetBounds',\n      5,\n    ));\n    (Module['_FPDFPageObj_GetRotatedBounds'] =\n      createExportWrapper('FPDFPageObj_GetRotatedBounds', 2));\n    (Module['_FPDFPageObj_SetStrokeColor'] = createExportWrapper(\n      'FPDFPageObj_SetStrokeColor',\n      5,\n    ));\n    (Module['_FPDFPageObj_GetStrokeColor'] = createExportWrapper(\n      'FPDFPageObj_GetStrokeColor',\n      5,\n    ));\n    (Module['_FPDFPageObj_SetStrokeWidth'] = createExportWrapper(\n      'FPDFPageObj_SetStrokeWidth',\n      2,\n    ));\n    (Module['_FPDFPageObj_GetStrokeWidth'] = createExportWrapper(\n      'FPDFPageObj_GetStrokeWidth',\n      2,\n    ));\n    (Module['_FPDFPageObj_GetLineJoin'] = createExportWrapper(\n      'FPDFPageObj_GetLineJoin',\n      1,\n    ));\n    (Module['_FPDFPageObj_SetLineJoin'] = createExportWrapper(\n      'FPDFPageObj_SetLineJoin',\n      2,\n    ));\n    (Module['_FPDFPageObj_GetLineCap'] = createExportWrapper(\n      'FPDFPageObj_GetLineCap',\n      1,\n    ));\n    (Module['_FPDFPageObj_SetLineCap'] = createExportWrapper(\n      'FPDFPageObj_SetLineCap',\n      2,\n    ));\n    (Module['_FPDFPageObj_GetDashPhase'] = createExportWrapper(\n      'FPDFPageObj_GetDashPhase',\n      2,\n    ));\n    (Module['_FPDFPageObj_SetDashPhase'] = createExportWrapper(\n      'FPDFPageObj_SetDashPhase',\n      2,\n    ));\n    (Module['_FPDFPageObj_GetDashCount'] = createExportWrapper(\n      'FPDFPageObj_GetDashCount',\n      1,\n    ));\n    (Module['_FPDFPageObj_GetDashArray'] = createExportWrapper(\n      'FPDFPageObj_GetDashArray',\n      3,\n    ));\n    (Module['_FPDFPageObj_SetDashArray'] = createExportWrapper(\n      'FPDFPageObj_SetDashArray',\n      4,\n    ));\n    (Module['_FPDFFormObj_CountObjects'] = createExportWrapper(\n      'FPDFFormObj_CountObjects',\n      1,\n    ));\n    (Module['_FPDFFormObj_GetObject'] = createExportWrapper(\n      'FPDFFormObj_GetObject',\n      2,\n    ));\n    (Module['_FPDFFormObj_RemoveObject'] = createExportWrapper(\n      'FPDFFormObj_RemoveObject',\n      2,\n    ));\n    (Module['_FPDFPageObj_CreateNewPath'] = createExportWrapper(\n      'FPDFPageObj_CreateNewPath',\n      2,\n    ));\n    (Module['_FPDFPageObj_CreateNewRect'] = createExportWrapper(\n      'FPDFPageObj_CreateNewRect',\n      4,\n    ));\n    (Module['_FPDFPath_CountSegments'] = createExportWrapper(\n      'FPDFPath_CountSegments',\n      1,\n    ));\n    (Module['_FPDFPath_GetPathSegment'] = createExportWrapper(\n      'FPDFPath_GetPathSegment',\n      2,\n    ));\n    (Module['_FPDFPath_MoveTo'] = createExportWrapper('FPDFPath_MoveTo', 3));\n    (Module['_FPDFPath_LineTo'] = createExportWrapper('FPDFPath_LineTo', 3));\n    (Module['_FPDFPath_BezierTo'] = createExportWrapper(\n      'FPDFPath_BezierTo',\n      7,\n    ));\n    (Module['_FPDFPath_Close'] = createExportWrapper('FPDFPath_Close', 1));\n    (Module['_FPDFPath_SetDrawMode'] = createExportWrapper(\n      'FPDFPath_SetDrawMode',\n      3,\n    ));\n    (Module['_FPDFPath_GetDrawMode'] = createExportWrapper(\n      'FPDFPath_GetDrawMode',\n      3,\n    ));\n    (Module['_FPDFPathSegment_GetPoint'] = createExportWrapper(\n      'FPDFPathSegment_GetPoint',\n      3,\n    ));\n    (Module['_FPDFPathSegment_GetType'] = createExportWrapper(\n      'FPDFPathSegment_GetType',\n      1,\n    ));\n    (Module['_FPDFPathSegment_GetClose'] = createExportWrapper(\n      'FPDFPathSegment_GetClose',\n      1,\n    ));\n    (Module['_FPDFPageObj_NewTextObj'] = createExportWrapper(\n      'FPDFPageObj_NewTextObj',\n      3,\n    ));\n    (Module['_FPDFText_SetText'] = createExportWrapper(\n      'FPDFText_SetText',\n      2,\n    ));\n    (Module['_FPDFText_SetCharcodes'] = createExportWrapper(\n      'FPDFText_SetCharcodes',\n      3,\n    ));\n    (Module['_FPDFText_LoadFont'] = createExportWrapper(\n      'FPDFText_LoadFont',\n      5,\n    ));\n    (Module['_FPDFText_LoadStandardFont'] = createExportWrapper(\n      'FPDFText_LoadStandardFont',\n      2,\n    ));\n    (Module['_FPDFText_LoadCidType2Font'] = createExportWrapper(\n      'FPDFText_LoadCidType2Font',\n      6,\n    ));\n    (Module['_FPDFTextObj_GetFontSize'] = createExportWrapper(\n      'FPDFTextObj_GetFontSize',\n      2,\n    ));\n    (Module['_FPDFTextObj_GetText'] = createExportWrapper(\n      'FPDFTextObj_GetText',\n      4,\n    ));\n    (Module['_FPDFTextObj_GetRenderedBitmap'] =\n      createExportWrapper('FPDFTextObj_GetRenderedBitmap', 4));\n    (Module['_FPDFFont_Close'] = createExportWrapper('FPDFFont_Close', 1));\n    (Module['_FPDFPageObj_CreateTextObj'] = createExportWrapper(\n      'FPDFPageObj_CreateTextObj',\n      3,\n    ));\n    (Module['_FPDFTextObj_GetTextRenderMode'] =\n      createExportWrapper('FPDFTextObj_GetTextRenderMode', 1));\n    (Module['_FPDFTextObj_SetTextRenderMode'] =\n      createExportWrapper('FPDFTextObj_SetTextRenderMode', 2));\n    (Module['_FPDFTextObj_GetFont'] = createExportWrapper(\n      'FPDFTextObj_GetFont',\n      1,\n    ));\n    (Module['_FPDFFont_GetBaseFontName'] = createExportWrapper(\n      'FPDFFont_GetBaseFontName',\n      3,\n    ));\n    (Module['_FPDFFont_GetFamilyName'] = createExportWrapper(\n      'FPDFFont_GetFamilyName',\n      3,\n    ));\n    (Module['_FPDFFont_GetFontData'] = createExportWrapper(\n      'FPDFFont_GetFontData',\n      4,\n    ));\n    (Module['_FPDFFont_GetIsEmbedded'] = createExportWrapper(\n      'FPDFFont_GetIsEmbedded',\n      1,\n    ));\n    (Module['_FPDFFont_GetFlags'] = createExportWrapper(\n      'FPDFFont_GetFlags',\n      1,\n    ));\n    (Module['_FPDFFont_GetWeight'] = createExportWrapper(\n      'FPDFFont_GetWeight',\n      1,\n    ));\n    (Module['_FPDFFont_GetItalicAngle'] = createExportWrapper(\n      'FPDFFont_GetItalicAngle',\n      2,\n    ));\n    (Module['_FPDFFont_GetAscent'] = createExportWrapper(\n      'FPDFFont_GetAscent',\n      3,\n    ));\n    (Module['_FPDFFont_GetDescent'] = createExportWrapper(\n      'FPDFFont_GetDescent',\n      3,\n    ));\n    (Module['_FPDFFont_GetGlyphWidth'] = createExportWrapper(\n      'FPDFFont_GetGlyphWidth',\n      4,\n    ));\n    (Module['_FPDFFont_GetGlyphPath'] = createExportWrapper(\n      'FPDFFont_GetGlyphPath',\n      3,\n    ));\n    (Module['_FPDFGlyphPath_CountGlyphSegments'] =\n      createExportWrapper('FPDFGlyphPath_CountGlyphSegments', 1));\n    (Module['_FPDFGlyphPath_GetGlyphPathSegment'] =\n      createExportWrapper('FPDFGlyphPath_GetGlyphPathSegment', 2));\n    (Module['_EPDFText_RedactInRect'] = createExportWrapper(\n      'EPDFText_RedactInRect',\n      4,\n    ));\n    (Module['_EPDFText_RedactInQuads'] = createExportWrapper(\n      'EPDFText_RedactInQuads',\n      5,\n    ));\n    (Module['_FPDFDoc_GetPageMode'] = createExportWrapper(\n      'FPDFDoc_GetPageMode',\n      1,\n    ));\n    (Module['_FPDFPage_Flatten'] = createExportWrapper(\n      'FPDFPage_Flatten',\n      2,\n    ));\n    (Module['_FPDFPage_HasFormFieldAtPoint'] =\n      createExportWrapper('FPDFPage_HasFormFieldAtPoint', 4));\n    (Module['_FPDFPage_FormFieldZOrderAtPoint'] =\n      createExportWrapper('FPDFPage_FormFieldZOrderAtPoint', 4));\n    (Module['_malloc'] = createExportWrapper('malloc', 1));\n    (Module['_free'] = createExportWrapper('free', 1));\n    (Module['_FORM_OnMouseMove'] = createExportWrapper(\n      'FORM_OnMouseMove',\n      5,\n    ));\n    (Module['_FORM_OnMouseWheel'] = createExportWrapper(\n      'FORM_OnMouseWheel',\n      6,\n    ));\n    (Module['_FORM_OnFocus'] = createExportWrapper('FORM_OnFocus', 5));\n    (Module['_FORM_OnLButtonDown'] = createExportWrapper(\n      'FORM_OnLButtonDown',\n      5,\n    ));\n    (Module['_FORM_OnLButtonUp'] = createExportWrapper(\n      'FORM_OnLButtonUp',\n      5,\n    ));\n    (Module['_FORM_OnLButtonDoubleClick'] = createExportWrapper(\n      'FORM_OnLButtonDoubleClick',\n      5,\n    ));\n    (Module['_FORM_OnRButtonDown'] = createExportWrapper(\n      'FORM_OnRButtonDown',\n      5,\n    ));\n    (Module['_FORM_OnRButtonUp'] = createExportWrapper(\n      'FORM_OnRButtonUp',\n      5,\n    ));\n    (Module['_FORM_OnKeyDown'] = createExportWrapper('FORM_OnKeyDown', 4));\n    (Module['_FORM_OnKeyUp'] = createExportWrapper('FORM_OnKeyUp', 4));\n    (Module['_FORM_OnChar'] = createExportWrapper('FORM_OnChar', 4));\n    (Module['_FORM_GetFocusedText'] = createExportWrapper(\n      'FORM_GetFocusedText',\n      4,\n    ));\n    (Module['_FORM_GetSelectedText'] = createExportWrapper(\n      'FORM_GetSelectedText',\n      4,\n    ));\n    (Module['_FORM_ReplaceAndKeepSelection'] =\n      createExportWrapper('FORM_ReplaceAndKeepSelection', 3));\n    (Module['_FORM_ReplaceSelection'] = createExportWrapper(\n      'FORM_ReplaceSelection',\n      3,\n    ));\n    (Module['_FORM_SelectAllText'] = createExportWrapper(\n      'FORM_SelectAllText',\n      2,\n    ));\n    (Module['_FORM_CanUndo'] = createExportWrapper('FORM_CanUndo', 2));\n    (Module['_FORM_CanRedo'] = createExportWrapper('FORM_CanRedo', 2));\n    (Module['_FORM_Undo'] = createExportWrapper('FORM_Undo', 2));\n    (Module['_FORM_Redo'] = createExportWrapper('FORM_Redo', 2));\n    (Module['_FORM_ForceToKillFocus'] = createExportWrapper(\n      'FORM_ForceToKillFocus',\n      1,\n    ));\n    (Module['_FORM_GetFocusedAnnot'] = createExportWrapper(\n      'FORM_GetFocusedAnnot',\n      3,\n    ));\n    (Module['_FORM_SetFocusedAnnot'] = createExportWrapper(\n      'FORM_SetFocusedAnnot',\n      2,\n    ));\n    (Module['_FPDF_FFLDraw'] = createExportWrapper('FPDF_FFLDraw', 9));\n    (Module['_FPDF_SetFormFieldHighlightColor'] =\n      createExportWrapper('FPDF_SetFormFieldHighlightColor', 3));\n    (Module['_FPDF_SetFormFieldHighlightAlpha'] =\n      createExportWrapper('FPDF_SetFormFieldHighlightAlpha', 2));\n    (Module['_FPDF_RemoveFormFieldHighlight'] =\n      createExportWrapper('FPDF_RemoveFormFieldHighlight', 1));\n    (Module['_FORM_OnAfterLoadPage'] = createExportWrapper(\n      'FORM_OnAfterLoadPage',\n      2,\n    ));\n    (Module['_FORM_OnBeforeClosePage'] = createExportWrapper(\n      'FORM_OnBeforeClosePage',\n      2,\n    ));\n    (Module['_FORM_DoDocumentJSAction'] = createExportWrapper(\n      'FORM_DoDocumentJSAction',\n      1,\n    ));\n    (Module['_FORM_DoDocumentOpenAction'] = createExportWrapper(\n      'FORM_DoDocumentOpenAction',\n      1,\n    ));\n    (Module['_FORM_DoDocumentAAction'] = createExportWrapper(\n      'FORM_DoDocumentAAction',\n      2,\n    ));\n    (Module['_FORM_DoPageAAction'] = createExportWrapper(\n      'FORM_DoPageAAction',\n      3,\n    ));\n    (Module['_FORM_SetIndexSelected'] = createExportWrapper(\n      'FORM_SetIndexSelected',\n      4,\n    ));\n    (Module['_FORM_IsIndexSelected'] = createExportWrapper(\n      'FORM_IsIndexSelected',\n      3,\n    ));\n    (Module['_FPDFDoc_GetJavaScriptActionCount'] =\n      createExportWrapper('FPDFDoc_GetJavaScriptActionCount', 1));\n    (Module['_FPDFDoc_GetJavaScriptAction'] =\n      createExportWrapper('FPDFDoc_GetJavaScriptAction', 2));\n    (Module['_FPDFDoc_CloseJavaScriptAction'] =\n      createExportWrapper('FPDFDoc_CloseJavaScriptAction', 1));\n    (Module['_FPDFJavaScriptAction_GetName'] =\n      createExportWrapper('FPDFJavaScriptAction_GetName', 3));\n    (Module['_FPDFJavaScriptAction_GetScript'] =\n      createExportWrapper('FPDFJavaScriptAction_GetScript', 3));\n    (Module['_FPDF_ImportPagesByIndex'] = createExportWrapper(\n      'FPDF_ImportPagesByIndex',\n      5,\n    ));\n    (Module['_FPDF_ImportPages'] = createExportWrapper(\n      'FPDF_ImportPages',\n      4,\n    ));\n    (Module['_FPDF_ImportNPagesToOne'] = createExportWrapper(\n      'FPDF_ImportNPagesToOne',\n      5,\n    ));\n    (Module['_FPDF_NewXObjectFromPage'] = createExportWrapper(\n      'FPDF_NewXObjectFromPage',\n      3,\n    ));\n    (Module['_FPDF_CloseXObject'] = createExportWrapper(\n      'FPDF_CloseXObject',\n      1,\n    ));\n    (Module['_FPDF_NewFormObjectFromXObject'] =\n      createExportWrapper('FPDF_NewFormObjectFromXObject', 1));\n    (Module['_FPDF_CopyViewerPreferences'] = createExportWrapper(\n      'FPDF_CopyViewerPreferences',\n      2,\n    ));\n    (Module[\n      '_FPDF_RenderPageBitmapWithColorScheme_Start'\n    ] = createExportWrapper('FPDF_RenderPageBitmapWithColorScheme_Start', 10));\n    (Module['_FPDF_RenderPageBitmap_Start'] =\n      createExportWrapper('FPDF_RenderPageBitmap_Start', 9));\n    (Module['_FPDF_RenderPage_Continue'] = createExportWrapper(\n      'FPDF_RenderPage_Continue',\n      2,\n    ));\n    (Module['_FPDF_RenderPage_Close'] = createExportWrapper(\n      'FPDF_RenderPage_Close',\n      1,\n    ));\n    (Module['_FPDF_SaveWithVersion'] = createExportWrapper(\n      'FPDF_SaveWithVersion',\n      4,\n    ));\n    (Module['_FPDFText_GetCharIndexFromTextIndex'] =\n      createExportWrapper('FPDFText_GetCharIndexFromTextIndex', 2));\n    (Module['_FPDFText_GetTextIndexFromCharIndex'] =\n      createExportWrapper('FPDFText_GetTextIndexFromCharIndex', 2));\n    (Module['_FPDF_GetSignatureCount'] = createExportWrapper(\n      'FPDF_GetSignatureCount',\n      1,\n    ));\n    (Module['_FPDF_GetSignatureObject'] = createExportWrapper(\n      'FPDF_GetSignatureObject',\n      2,\n    ));\n    (Module['_FPDFSignatureObj_GetContents'] =\n      createExportWrapper('FPDFSignatureObj_GetContents', 3));\n    (Module['_FPDFSignatureObj_GetByteRange'] =\n      createExportWrapper('FPDFSignatureObj_GetByteRange', 3));\n    (Module['_FPDFSignatureObj_GetSubFilter'] =\n      createExportWrapper('FPDFSignatureObj_GetSubFilter', 3));\n    (Module['_FPDFSignatureObj_GetReason'] = createExportWrapper(\n      'FPDFSignatureObj_GetReason',\n      3,\n    ));\n    (Module['_FPDFSignatureObj_GetTime'] = createExportWrapper(\n      'FPDFSignatureObj_GetTime',\n      3,\n    ));\n    (Module['_FPDFSignatureObj_GetDocMDPPermission'] =\n      createExportWrapper('FPDFSignatureObj_GetDocMDPPermission', 1));\n    (Module['_FPDF_StructTree_GetForPage'] = createExportWrapper(\n      'FPDF_StructTree_GetForPage',\n      1,\n    ));\n    (Module['_FPDF_StructTree_Close'] = createExportWrapper(\n      'FPDF_StructTree_Close',\n      1,\n    ));\n    (Module['_FPDF_StructTree_CountChildren'] =\n      createExportWrapper('FPDF_StructTree_CountChildren', 1));\n    (Module['_FPDF_StructTree_GetChildAtIndex'] =\n      createExportWrapper('FPDF_StructTree_GetChildAtIndex', 2));\n    (Module['_FPDF_StructElement_GetAltText'] =\n      createExportWrapper('FPDF_StructElement_GetAltText', 3));\n    (Module['_FPDF_StructElement_GetActualText'] =\n      createExportWrapper('FPDF_StructElement_GetActualText', 3));\n    (Module['_FPDF_StructElement_GetID'] = createExportWrapper(\n      'FPDF_StructElement_GetID',\n      3,\n    ));\n    (Module['_FPDF_StructElement_GetLang'] = createExportWrapper(\n      'FPDF_StructElement_GetLang',\n      3,\n    ));\n    (Module['_FPDF_StructElement_GetAttributeCount'] =\n      createExportWrapper('FPDF_StructElement_GetAttributeCount', 1));\n    (Module[\n      '_FPDF_StructElement_GetAttributeAtIndex'\n    ] = createExportWrapper('FPDF_StructElement_GetAttributeAtIndex', 2));\n    (Module['_FPDF_StructElement_GetStringAttribute'] =\n      createExportWrapper('FPDF_StructElement_GetStringAttribute', 4));\n    (Module['_FPDF_StructElement_GetMarkedContentID'] =\n      createExportWrapper('FPDF_StructElement_GetMarkedContentID', 1));\n    (Module['_FPDF_StructElement_GetType'] = createExportWrapper(\n      'FPDF_StructElement_GetType',\n      3,\n    ));\n    (Module['_FPDF_StructElement_GetObjType'] =\n      createExportWrapper('FPDF_StructElement_GetObjType', 3));\n    (Module['_FPDF_StructElement_GetTitle'] =\n      createExportWrapper('FPDF_StructElement_GetTitle', 3));\n    (Module['_FPDF_StructElement_CountChildren'] =\n      createExportWrapper('FPDF_StructElement_CountChildren', 1));\n    (Module['_FPDF_StructElement_GetChildAtIndex'] =\n      createExportWrapper('FPDF_StructElement_GetChildAtIndex', 2));\n    (Module[\n      '_FPDF_StructElement_GetChildMarkedContentID'\n    ] = createExportWrapper('FPDF_StructElement_GetChildMarkedContentID', 2));\n    (Module['_FPDF_StructElement_GetParent'] =\n      createExportWrapper('FPDF_StructElement_GetParent', 1));\n    (Module['_FPDF_StructElement_Attr_GetCount'] =\n      createExportWrapper('FPDF_StructElement_Attr_GetCount', 1));\n    (Module['_FPDF_StructElement_Attr_GetName'] =\n      createExportWrapper('FPDF_StructElement_Attr_GetName', 5));\n    (Module['_FPDF_StructElement_Attr_GetValue'] =\n      createExportWrapper('FPDF_StructElement_Attr_GetValue', 2));\n    (Module['_FPDF_StructElement_Attr_GetType'] =\n      createExportWrapper('FPDF_StructElement_Attr_GetType', 1));\n    (Module[\n      '_FPDF_StructElement_Attr_GetBooleanValue'\n    ] = createExportWrapper('FPDF_StructElement_Attr_GetBooleanValue', 2));\n    (Module[\n      '_FPDF_StructElement_Attr_GetNumberValue'\n    ] = createExportWrapper('FPDF_StructElement_Attr_GetNumberValue', 2));\n    (Module[\n      '_FPDF_StructElement_Attr_GetStringValue'\n    ] = createExportWrapper('FPDF_StructElement_Attr_GetStringValue', 4));\n    (Module['_FPDF_StructElement_Attr_GetBlobValue'] =\n      createExportWrapper('FPDF_StructElement_Attr_GetBlobValue', 4));\n    (Module['_FPDF_StructElement_Attr_CountChildren'] =\n      createExportWrapper('FPDF_StructElement_Attr_CountChildren', 1));\n    (Module[\n      '_FPDF_StructElement_Attr_GetChildAtIndex'\n    ] = createExportWrapper('FPDF_StructElement_Attr_GetChildAtIndex', 2));\n    (Module[\n      '_FPDF_StructElement_GetMarkedContentIdCount'\n    ] = createExportWrapper('FPDF_StructElement_GetMarkedContentIdCount', 1));\n    (Module[\n      '_FPDF_StructElement_GetMarkedContentIdAtIndex'\n    ] = createExportWrapper('FPDF_StructElement_GetMarkedContentIdAtIndex', 2));\n    (Module['_FPDF_AddInstalledFont'] = createExportWrapper(\n      'FPDF_AddInstalledFont',\n      3,\n    ));\n    (Module['_FPDF_SetSystemFontInfo'] = createExportWrapper(\n      'FPDF_SetSystemFontInfo',\n      1,\n    ));\n    (Module['_FPDF_GetDefaultTTFMap'] = createExportWrapper(\n      'FPDF_GetDefaultTTFMap',\n      0,\n    ));\n    (Module['_FPDF_GetDefaultTTFMapCount'] = createExportWrapper(\n      'FPDF_GetDefaultTTFMapCount',\n      0,\n    ));\n    (Module['_FPDF_GetDefaultTTFMapEntry'] = createExportWrapper(\n      'FPDF_GetDefaultTTFMapEntry',\n      1,\n    ));\n    (Module['_FPDF_GetDefaultSystemFontInfo'] =\n      createExportWrapper('FPDF_GetDefaultSystemFontInfo', 0));\n    (Module['_FPDF_FreeDefaultSystemFontInfo'] =\n      createExportWrapper('FPDF_FreeDefaultSystemFontInfo', 1));\n    (Module['_FPDFText_LoadPage'] = createExportWrapper(\n      'FPDFText_LoadPage',\n      1,\n    ));\n    (Module['_FPDFText_ClosePage'] = createExportWrapper(\n      'FPDFText_ClosePage',\n      1,\n    ));\n    (Module['_FPDFText_CountChars'] = createExportWrapper(\n      'FPDFText_CountChars',\n      1,\n    ));\n    (Module['_FPDFText_GetUnicode'] = createExportWrapper(\n      'FPDFText_GetUnicode',\n      2,\n    ));\n    (Module['_FPDFText_GetTextObject'] = createExportWrapper(\n      'FPDFText_GetTextObject',\n      2,\n    ));\n    (Module['_FPDFText_IsGenerated'] = createExportWrapper(\n      'FPDFText_IsGenerated',\n      2,\n    ));\n    (Module['_FPDFText_IsHyphen'] = createExportWrapper(\n      'FPDFText_IsHyphen',\n      2,\n    ));\n    (Module['_FPDFText_HasUnicodeMapError'] =\n      createExportWrapper('FPDFText_HasUnicodeMapError', 2));\n    (Module['_FPDFText_GetFontSize'] = createExportWrapper(\n      'FPDFText_GetFontSize',\n      2,\n    ));\n    (Module['_FPDFText_GetFontInfo'] = createExportWrapper(\n      'FPDFText_GetFontInfo',\n      5,\n    ));\n    (Module['_FPDFText_GetFontWeight'] = createExportWrapper(\n      'FPDFText_GetFontWeight',\n      2,\n    ));\n    (Module['_FPDFText_GetFillColor'] = createExportWrapper(\n      'FPDFText_GetFillColor',\n      6,\n    ));\n    (Module['_FPDFText_GetStrokeColor'] = createExportWrapper(\n      'FPDFText_GetStrokeColor',\n      6,\n    ));\n    (Module['_FPDFText_GetCharAngle'] = createExportWrapper(\n      'FPDFText_GetCharAngle',\n      2,\n    ));\n    (Module['_FPDFText_GetCharBox'] = createExportWrapper(\n      'FPDFText_GetCharBox',\n      6,\n    ));\n    (Module['_FPDFText_GetLooseCharBox'] = createExportWrapper(\n      'FPDFText_GetLooseCharBox',\n      3,\n    ));\n    (Module['_FPDFText_GetMatrix'] = createExportWrapper(\n      'FPDFText_GetMatrix',\n      3,\n    ));\n    (Module['_FPDFText_GetCharOrigin'] = createExportWrapper(\n      'FPDFText_GetCharOrigin',\n      4,\n    ));\n    (Module['_FPDFText_GetCharIndexAtPos'] = createExportWrapper(\n      'FPDFText_GetCharIndexAtPos',\n      5,\n    ));\n    (Module['_FPDFText_GetText'] = createExportWrapper(\n      'FPDFText_GetText',\n      4,\n    ));\n    (Module['_FPDFText_CountRects'] = createExportWrapper(\n      'FPDFText_CountRects',\n      3,\n    ));\n    (Module['_FPDFText_GetRect'] = createExportWrapper(\n      'FPDFText_GetRect',\n      6,\n    ));\n    (Module['_FPDFText_GetBoundedText'] = createExportWrapper(\n      'FPDFText_GetBoundedText',\n      7,\n    ));\n    (Module['_FPDFText_FindStart'] = createExportWrapper(\n      'FPDFText_FindStart',\n      4,\n    ));\n    (Module['_FPDFText_FindNext'] = createExportWrapper(\n      'FPDFText_FindNext',\n      1,\n    ));\n    (Module['_FPDFText_FindPrev'] = createExportWrapper(\n      'FPDFText_FindPrev',\n      1,\n    ));\n    (Module['_FPDFText_GetSchResultIndex'] = createExportWrapper(\n      'FPDFText_GetSchResultIndex',\n      1,\n    ));\n    (Module['_FPDFText_GetSchCount'] = createExportWrapper(\n      'FPDFText_GetSchCount',\n      1,\n    ));\n    (Module['_FPDFText_FindClose'] = createExportWrapper(\n      'FPDFText_FindClose',\n      1,\n    ));\n    (Module['_FPDFLink_LoadWebLinks'] = createExportWrapper(\n      'FPDFLink_LoadWebLinks',\n      1,\n    ));\n    (Module['_FPDFLink_CountWebLinks'] = createExportWrapper(\n      'FPDFLink_CountWebLinks',\n      1,\n    ));\n    (Module['_FPDFLink_GetURL'] = createExportWrapper('FPDFLink_GetURL', 4));\n    (Module['_FPDFLink_CountRects'] = createExportWrapper(\n      'FPDFLink_CountRects',\n      2,\n    ));\n    (Module['_FPDFLink_GetRect'] = createExportWrapper(\n      'FPDFLink_GetRect',\n      7,\n    ));\n    (Module['_FPDFLink_GetTextRange'] = createExportWrapper(\n      'FPDFLink_GetTextRange',\n      4,\n    ));\n    (Module['_FPDFLink_CloseWebLinks'] = createExportWrapper(\n      'FPDFLink_CloseWebLinks',\n      1,\n    ));\n    (Module['_FPDFPage_GetDecodedThumbnailData'] =\n      createExportWrapper('FPDFPage_GetDecodedThumbnailData', 3));\n    (Module['_FPDFPage_GetRawThumbnailData'] =\n      createExportWrapper('FPDFPage_GetRawThumbnailData', 3));\n    (Module['_FPDFPage_GetThumbnailAsBitmap'] =\n      createExportWrapper('FPDFPage_GetThumbnailAsBitmap', 1));\n    (Module['_FPDFPage_SetMediaBox'] = createExportWrapper(\n      'FPDFPage_SetMediaBox',\n      5,\n    ));\n    (Module['_FPDFPage_SetCropBox'] = createExportWrapper(\n      'FPDFPage_SetCropBox',\n      5,\n    ));\n    (Module['_FPDFPage_SetBleedBox'] = createExportWrapper(\n      'FPDFPage_SetBleedBox',\n      5,\n    ));\n    (Module['_FPDFPage_SetTrimBox'] = createExportWrapper(\n      'FPDFPage_SetTrimBox',\n      5,\n    ));\n    (Module['_FPDFPage_SetArtBox'] = createExportWrapper(\n      'FPDFPage_SetArtBox',\n      5,\n    ));\n    (Module['_FPDFPage_GetMediaBox'] = createExportWrapper(\n      'FPDFPage_GetMediaBox',\n      5,\n    ));\n    (Module['_FPDFPage_GetCropBox'] = createExportWrapper(\n      'FPDFPage_GetCropBox',\n      5,\n    ));\n    (Module['_FPDFPage_GetBleedBox'] = createExportWrapper(\n      'FPDFPage_GetBleedBox',\n      5,\n    ));\n    (Module['_FPDFPage_GetTrimBox'] = createExportWrapper(\n      'FPDFPage_GetTrimBox',\n      5,\n    ));\n    (Module['_FPDFPage_GetArtBox'] = createExportWrapper(\n      'FPDFPage_GetArtBox',\n      5,\n    ));\n    (Module['_FPDFPage_TransFormWithClip'] = createExportWrapper(\n      'FPDFPage_TransFormWithClip',\n      3,\n    ));\n    (Module['_FPDFPageObj_TransformClipPath'] =\n      createExportWrapper('FPDFPageObj_TransformClipPath', 7));\n    (Module['_FPDFPageObj_GetClipPath'] = createExportWrapper(\n      'FPDFPageObj_GetClipPath',\n      1,\n    ));\n    (Module['_FPDFClipPath_CountPaths'] = createExportWrapper(\n      'FPDFClipPath_CountPaths',\n      1,\n    ));\n    (Module['_FPDFClipPath_CountPathSegments'] =\n      createExportWrapper('FPDFClipPath_CountPathSegments', 2));\n    (Module['_FPDFClipPath_GetPathSegment'] =\n      createExportWrapper('FPDFClipPath_GetPathSegment', 3));\n    (Module['_FPDF_CreateClipPath'] = createExportWrapper(\n      'FPDF_CreateClipPath',\n      4,\n    ));\n    (Module['_FPDF_DestroyClipPath'] = createExportWrapper(\n      'FPDF_DestroyClipPath',\n      1,\n    ));\n    (Module['_FPDFPage_InsertClipPath'] = createExportWrapper(\n      'FPDFPage_InsertClipPath',\n      2,\n    ));\n    (Module['_FPDF_InitLibrary'] = createExportWrapper(\n      'FPDF_InitLibrary',\n      0,\n    ));\n    (Module['_FPDF_DestroyLibrary'] = createExportWrapper(\n      'FPDF_DestroyLibrary',\n      0,\n    ));\n    (Module['_FPDF_SetSandBoxPolicy'] = createExportWrapper(\n      'FPDF_SetSandBoxPolicy',\n      2,\n    ));\n    (Module['_FPDF_LoadDocument'] = createExportWrapper(\n      'FPDF_LoadDocument',\n      2,\n    ));\n    (Module['_FPDF_GetFormType'] = createExportWrapper(\n      'FPDF_GetFormType',\n      1,\n    ));\n    (Module['_FPDF_LoadXFA'] = createExportWrapper('FPDF_LoadXFA', 1));\n    (Module['_FPDF_LoadMemDocument'] = createExportWrapper(\n      'FPDF_LoadMemDocument',\n      3,\n    ));\n    (Module['_FPDF_LoadMemDocument64'] = createExportWrapper(\n      'FPDF_LoadMemDocument64',\n      3,\n    ));\n    (Module['_FPDF_LoadCustomDocument'] = createExportWrapper(\n      'FPDF_LoadCustomDocument',\n      2,\n    ));\n    (Module['_FPDF_GetFileVersion'] = createExportWrapper(\n      'FPDF_GetFileVersion',\n      2,\n    ));\n    (Module[\n      '_FPDF_DocumentHasValidCrossReferenceTable'\n    ] = createExportWrapper('FPDF_DocumentHasValidCrossReferenceTable', 1));\n    (Module['_FPDF_GetDocPermissions'] = createExportWrapper(\n      'FPDF_GetDocPermissions',\n      1,\n    ));\n    (Module['_FPDF_GetDocUserPermissions'] = createExportWrapper(\n      'FPDF_GetDocUserPermissions',\n      1,\n    ));\n    (Module['_FPDF_GetSecurityHandlerRevision'] =\n      createExportWrapper('FPDF_GetSecurityHandlerRevision', 1));\n    (Module['_FPDF_GetPageCount'] = createExportWrapper(\n      'FPDF_GetPageCount',\n      1,\n    ));\n    (Module['_FPDF_LoadPage'] = createExportWrapper('FPDF_LoadPage', 2));\n    (Module['_FPDF_GetPageWidthF'] = createExportWrapper(\n      'FPDF_GetPageWidthF',\n      1,\n    ));\n    (Module['_FPDF_GetPageWidth'] = createExportWrapper(\n      'FPDF_GetPageWidth',\n      1,\n    ));\n    (Module['_FPDF_GetPageHeightF'] = createExportWrapper(\n      'FPDF_GetPageHeightF',\n      1,\n    ));\n    (Module['_FPDF_GetPageHeight'] = createExportWrapper(\n      'FPDF_GetPageHeight',\n      1,\n    ));\n    (Module['_FPDF_GetPageBoundingBox'] = createExportWrapper(\n      'FPDF_GetPageBoundingBox',\n      2,\n    ));\n    (Module['_FPDF_RenderPageBitmap'] = createExportWrapper(\n      'FPDF_RenderPageBitmap',\n      8,\n    ));\n    (Module['_FPDF_RenderPageBitmapWithMatrix'] =\n      createExportWrapper('FPDF_RenderPageBitmapWithMatrix', 5));\n    (Module['_EPDF_RenderAnnotBitmap'] = createExportWrapper(\n      'EPDF_RenderAnnotBitmap',\n      6,\n    ));\n    (Module['_FPDF_ClosePage'] = createExportWrapper('FPDF_ClosePage', 1));\n    (Module['_FPDF_CloseDocument'] = createExportWrapper(\n      'FPDF_CloseDocument',\n      1,\n    ));\n    (Module['_FPDF_GetLastError'] = createExportWrapper(\n      'FPDF_GetLastError',\n      0,\n    ));\n    (Module['_FPDF_DeviceToPage'] = createExportWrapper(\n      'FPDF_DeviceToPage',\n      10,\n    ));\n    (Module['_FPDF_PageToDevice'] = createExportWrapper(\n      'FPDF_PageToDevice',\n      10,\n    ));\n    (Module['_FPDFBitmap_Create'] = createExportWrapper(\n      'FPDFBitmap_Create',\n      3,\n    ));\n    (Module['_FPDFBitmap_CreateEx'] = createExportWrapper(\n      'FPDFBitmap_CreateEx',\n      5,\n    ));\n    (Module['_FPDFBitmap_GetFormat'] = createExportWrapper(\n      'FPDFBitmap_GetFormat',\n      1,\n    ));\n    (Module['_FPDFBitmap_FillRect'] = createExportWrapper(\n      'FPDFBitmap_FillRect',\n      6,\n    ));\n    (Module['_FPDFBitmap_GetBuffer'] = createExportWrapper(\n      'FPDFBitmap_GetBuffer',\n      1,\n    ));\n    (Module['_FPDFBitmap_GetWidth'] = createExportWrapper(\n      'FPDFBitmap_GetWidth',\n      1,\n    ));\n    (Module['_FPDFBitmap_GetHeight'] = createExportWrapper(\n      'FPDFBitmap_GetHeight',\n      1,\n    ));\n    (Module['_FPDFBitmap_GetStride'] = createExportWrapper(\n      'FPDFBitmap_GetStride',\n      1,\n    ));\n    (Module['_FPDFBitmap_Destroy'] = createExportWrapper(\n      'FPDFBitmap_Destroy',\n      1,\n    ));\n    (Module['_FPDF_GetPageSizeByIndexF'] = createExportWrapper(\n      'FPDF_GetPageSizeByIndexF',\n      3,\n    ));\n    (Module['_EPDF_GetPageRotationByIndex'] =\n      createExportWrapper('EPDF_GetPageRotationByIndex', 2));\n    (Module['_FPDF_GetPageSizeByIndex'] = createExportWrapper(\n      'FPDF_GetPageSizeByIndex',\n      4,\n    ));\n    (Module['_FPDF_VIEWERREF_GetPrintScaling'] =\n      createExportWrapper('FPDF_VIEWERREF_GetPrintScaling', 1));\n    (Module['_FPDF_VIEWERREF_GetNumCopies'] =\n      createExportWrapper('FPDF_VIEWERREF_GetNumCopies', 1));\n    (Module['_FPDF_VIEWERREF_GetPrintPageRange'] =\n      createExportWrapper('FPDF_VIEWERREF_GetPrintPageRange', 1));\n    (Module['_FPDF_VIEWERREF_GetPrintPageRangeCount'] =\n      createExportWrapper('FPDF_VIEWERREF_GetPrintPageRangeCount', 1));\n    (Module[\n      '_FPDF_VIEWERREF_GetPrintPageRangeElement'\n    ] = createExportWrapper('FPDF_VIEWERREF_GetPrintPageRangeElement', 2));\n    (Module['_FPDF_VIEWERREF_GetDuplex'] = createExportWrapper(\n      'FPDF_VIEWERREF_GetDuplex',\n      1,\n    ));\n    (Module['_FPDF_VIEWERREF_GetName'] = createExportWrapper(\n      'FPDF_VIEWERREF_GetName',\n      4,\n    ));\n    (Module['_FPDF_CountNamedDests'] = createExportWrapper(\n      'FPDF_CountNamedDests',\n      1,\n    ));\n    (Module['_FPDF_GetNamedDestByName'] = createExportWrapper(\n      'FPDF_GetNamedDestByName',\n      2,\n    ));\n    (Module['_FPDF_GetNamedDest'] = createExportWrapper(\n      'FPDF_GetNamedDest',\n      4,\n    ));\n    (Module['_FPDF_GetXFAPacketCount'] = createExportWrapper(\n      'FPDF_GetXFAPacketCount',\n      1,\n    ));\n    (Module['_FPDF_GetXFAPacketName'] = createExportWrapper(\n      'FPDF_GetXFAPacketName',\n      4,\n    ));\n    (Module['_FPDF_GetXFAPacketContent'] = createExportWrapper(\n      'FPDF_GetXFAPacketContent',\n      5,\n    ));\n    (Module['_FPDF_GetTrailerEnds'] = createExportWrapper(\n      'FPDF_GetTrailerEnds',\n      3,\n    ));\n    var _fflush = createExportWrapper('fflush', 1);\n    var _emscripten_builtin_memalign = createExportWrapper('emscripten_builtin_memalign', 2);\n    var _strerror = createExportWrapper('strerror', 1);\n    var _setThrew = createExportWrapper('setThrew', 2);\n    var _emscripten_stack_init = () =>\n      (_emscripten_stack_init = wasmExports['emscripten_stack_init'])();\n    var _emscripten_stack_get_end = () =>\n      (_emscripten_stack_get_end = wasmExports['emscripten_stack_get_end'])();\n    var __emscripten_stack_restore = (a0) =>\n      (__emscripten_stack_restore = wasmExports['_emscripten_stack_restore'])(a0);\n    var __emscripten_stack_alloc = (a0) =>\n      (__emscripten_stack_alloc = wasmExports['_emscripten_stack_alloc'])(a0);\n    var _emscripten_stack_get_current = () =>\n      (_emscripten_stack_get_current = wasmExports['emscripten_stack_get_current'])();\n    (Module['dynCall_ji'] = createExportWrapper('dynCall_ji', 2));\n    (Module['dynCall_jij'] = createExportWrapper('dynCall_jij', 4));\n    (Module['dynCall_iiij'] = createExportWrapper('dynCall_iiij', 5));\n    (Module['dynCall_iij'] = createExportWrapper('dynCall_iij', 4));\n    (Module['dynCall_j'] = createExportWrapper('dynCall_j', 1));\n    (Module['dynCall_jji'] = createExportWrapper('dynCall_jji', 4));\n    (Module['dynCall_iji'] = createExportWrapper('dynCall_iji', 4));\n    (Module['dynCall_viijii'] = createExportWrapper('dynCall_viijii', 7));\n    (Module['dynCall_iiji'] = createExportWrapper('dynCall_iiji', 5));\n    (Module['dynCall_jiji'] = createExportWrapper('dynCall_jiji', 5));\n    (Module['dynCall_iiiiij'] = createExportWrapper('dynCall_iiiiij', 7));\n    (Module['dynCall_iiiiijj'] = createExportWrapper('dynCall_iiiiijj', 9));\n    (Module['dynCall_iiiiiijj'] = createExportWrapper(\n      'dynCall_iiiiiijj',\n      10,\n    ));\n    (Module['dynCall_viji'] = createExportWrapper('dynCall_viji', 5));\n\n    function invoke_viii(index, a1, a2, a3) {\n      var sp = stackSave();\n      try {\n        getWasmTableEntry(index)(a1, a2, a3);\n      } catch (e) {\n        stackRestore(sp);\n        if (e !== e + 0) throw e;\n        _setThrew(1, 0);\n      }\n    }\n\n    function invoke_ii(index, a1) {\n      var sp = stackSave();\n      try {\n        return getWasmTableEntry(index)(a1);\n      } catch (e) {\n        stackRestore(sp);\n        if (e !== e + 0) throw e;\n        _setThrew(1, 0);\n      }\n    }\n\n    function invoke_iii(index, a1, a2) {\n      var sp = stackSave();\n      try {\n        return getWasmTableEntry(index)(a1, a2);\n      } catch (e) {\n        stackRestore(sp);\n        if (e !== e + 0) throw e;\n        _setThrew(1, 0);\n      }\n    }\n\n    function invoke_iiii(index, a1, a2, a3) {\n      var sp = stackSave();\n      try {\n        return getWasmTableEntry(index)(a1, a2, a3);\n      } catch (e) {\n        stackRestore(sp);\n        if (e !== e + 0) throw e;\n        _setThrew(1, 0);\n      }\n    }\n\n    function invoke_viiii(index, a1, a2, a3, a4) {\n      var sp = stackSave();\n      try {\n        getWasmTableEntry(index)(a1, a2, a3, a4);\n      } catch (e) {\n        stackRestore(sp);\n        if (e !== e + 0) throw e;\n        _setThrew(1, 0);\n      }\n    }\n\n    function invoke_iiiii(index, a1, a2, a3, a4) {\n      var sp = stackSave();\n      try {\n        return getWasmTableEntry(index)(a1, a2, a3, a4);\n      } catch (e) {\n        stackRestore(sp);\n        if (e !== e + 0) throw e;\n        _setThrew(1, 0);\n      }\n    }\n\n    function invoke_v(index) {\n      var sp = stackSave();\n      try {\n        getWasmTableEntry(index)();\n      } catch (e) {\n        stackRestore(sp);\n        if (e !== e + 0) throw e;\n        _setThrew(1, 0);\n      }\n    }\n\n    function invoke_vii(index, a1, a2) {\n      var sp = stackSave();\n      try {\n        getWasmTableEntry(index)(a1, a2);\n      } catch (e) {\n        stackRestore(sp);\n        if (e !== e + 0) throw e;\n        _setThrew(1, 0);\n      }\n    }\n\n    function invoke_viiiiiiiii(index, a1, a2, a3, a4, a5, a6, a7, a8, a9) {\n      var sp = stackSave();\n      try {\n        getWasmTableEntry(index)(a1, a2, a3, a4, a5, a6, a7, a8, a9);\n      } catch (e) {\n        stackRestore(sp);\n        if (e !== e + 0) throw e;\n        _setThrew(1, 0);\n      }\n    }\n\n    // include: postamble.js\n    // === Auto-generated postamble setup entry stuff ===\n\n    Module['wasmExports'] = wasmExports;\n    Module['ccall'] = ccall;\n    Module['cwrap'] = cwrap;\n    Module['addFunction'] = addFunction;\n    Module['removeFunction'] = removeFunction;\n    Module['setValue'] = setValue;\n    Module['getValue'] = getValue;\n    Module['UTF8ToString'] = UTF8ToString;\n    Module['stringToUTF8'] = stringToUTF8;\n    Module['UTF16ToString'] = UTF16ToString;\n    Module['stringToUTF16'] = stringToUTF16;\n    var missingLibrarySymbols = [\n      'writeI53ToI64',\n      'writeI53ToI64Clamped',\n      'writeI53ToI64Signaling',\n      'writeI53ToU64Clamped',\n      'writeI53ToU64Signaling',\n      'readI53FromI64',\n      'readI53FromU64',\n      'convertI32PairToI53',\n      'convertU32PairToI53',\n      'getTempRet0',\n      'setTempRet0',\n      'exitJS',\n      'inetPton4',\n      'inetNtop4',\n      'inetPton6',\n      'inetNtop6',\n      'readSockaddr',\n      'writeSockaddr',\n      'emscriptenLog',\n      'readEmAsmArgs',\n      'jstoi_q',\n      'listenOnce',\n      'autoResumeAudioContext',\n      'dynCallLegacy',\n      'getDynCaller',\n      'dynCall',\n      'handleException',\n      'keepRuntimeAlive',\n      'runtimeKeepalivePush',\n      'runtimeKeepalivePop',\n      'callUserCallback',\n      'maybeExit',\n      'asmjsMangle',\n      'HandleAllocator',\n      'getNativeTypeSize',\n      'STACK_SIZE',\n      'STACK_ALIGN',\n      'POINTER_SIZE',\n      'ASSERTIONS',\n      'reallyNegative',\n      'unSign',\n      'strLen',\n      'reSign',\n      'formatString',\n      'intArrayToString',\n      'AsciiToString',\n      'lengthBytesUTF16',\n      'UTF32ToString',\n      'stringToUTF32',\n      'lengthBytesUTF32',\n      'stringToNewUTF8',\n      'registerKeyEventCallback',\n      'maybeCStringToJsString',\n      'findEventTarget',\n      'getBoundingClientRect',\n      'fillMouseEventData',\n      'registerMouseEventCallback',\n      'registerWheelEventCallback',\n      'registerUiEventCallback',\n      'registerFocusEventCallback',\n      'fillDeviceOrientationEventData',\n      'registerDeviceOrientationEventCallback',\n      'fillDeviceMotionEventData',\n      'registerDeviceMotionEventCallback',\n      'screenOrientation',\n      'fillOrientationChangeEventData',\n      'registerOrientationChangeEventCallback',\n      'fillFullscreenChangeEventData',\n      'registerFullscreenChangeEventCallback',\n      'JSEvents_requestFullscreen',\n      'JSEvents_resizeCanvasForFullscreen',\n      'registerRestoreOldStyle',\n      'hideEverythingExceptGivenElement',\n      'restoreHiddenElements',\n      'setLetterbox',\n      'softFullscreenResizeWebGLRenderTarget',\n      'doRequestFullscreen',\n      'fillPointerlockChangeEventData',\n      'registerPointerlockChangeEventCallback',\n      'registerPointerlockErrorEventCallback',\n      'requestPointerLock',\n      'fillVisibilityChangeEventData',\n      'registerVisibilityChangeEventCallback',\n      'registerTouchEventCallback',\n      'fillGamepadEventData',\n      'registerGamepadEventCallback',\n      'registerBeforeUnloadEventCallback',\n      'fillBatteryEventData',\n      'battery',\n      'registerBatteryEventCallback',\n      'setCanvasElementSize',\n      'getCanvasElementSize',\n      'jsStackTrace',\n      'getCallstack',\n      'convertPCtoSourceLocation',\n      'checkWasiClock',\n      'wasiRightsToMuslOFlags',\n      'wasiOFlagsToMuslOFlags',\n      'createDyncallWrapper',\n      'safeSetTimeout',\n      'setImmediateWrapped',\n      'clearImmediateWrapped',\n      'polyfillSetImmediate',\n      'registerPostMainLoop',\n      'registerPreMainLoop',\n      'getPromise',\n      'makePromise',\n      'idsToPromises',\n      'makePromiseCallback',\n      'ExceptionInfo',\n      'findMatchingCatch',\n      'Browser_asyncPrepareDataCounter',\n      'safeRequestAnimationFrame',\n      'arraySum',\n      'addDays',\n      'getSocketFromFD',\n      'getSocketAddress',\n      'FS_unlink',\n      'FS_mkdirTree',\n      '_setNetworkCallback',\n      'heapObjectForWebGLType',\n      'toTypedArrayIndex',\n      'webgl_enable_ANGLE_instanced_arrays',\n      'webgl_enable_OES_vertex_array_object',\n      'webgl_enable_WEBGL_draw_buffers',\n      'webgl_enable_WEBGL_multi_draw',\n      'webgl_enable_EXT_polygon_offset_clamp',\n      'webgl_enable_EXT_clip_control',\n      'webgl_enable_WEBGL_polygon_mode',\n      'emscriptenWebGLGet',\n      'computeUnpackAlignedImageSize',\n      'colorChannelsInGlTextureFormat',\n      'emscriptenWebGLGetTexPixelData',\n      'emscriptenWebGLGetUniform',\n      'webglGetUniformLocation',\n      'webglPrepareUniformLocationsBeforeFirstUse',\n      'webglGetLeftBracePos',\n      'emscriptenWebGLGetVertexAttrib',\n      '__glGetActiveAttribOrUniform',\n      'writeGLArray',\n      'registerWebGlEventCallback',\n      'runAndAbortIfError',\n      'ALLOC_NORMAL',\n      'ALLOC_STACK',\n      'allocate',\n      'writeStringToMemory',\n      'writeAsciiToMemory',\n      'setErrNo',\n      'demangle',\n      'stackTrace',\n    ];\n    missingLibrarySymbols.forEach(missingLibrarySymbol);\n\n    var unexportedSymbols = [\n      'run',\n      'addOnPreRun',\n      'addOnInit',\n      'addOnPreMain',\n      'addOnExit',\n      'addOnPostRun',\n      'addRunDependency',\n      'removeRunDependency',\n      'out',\n      'err',\n      'callMain',\n      'abort',\n      'wasmMemory',\n      'writeStackCookie',\n      'checkStackCookie',\n      'convertI32PairToI53Checked',\n      'stackSave',\n      'stackRestore',\n      'stackAlloc',\n      'ptrToString',\n      'zeroMemory',\n      'getHeapMax',\n      'growMemory',\n      'ENV',\n      'ERRNO_CODES',\n      'strError',\n      'DNS',\n      'Protocols',\n      'Sockets',\n      'initRandomFill',\n      'randomFill',\n      'timers',\n      'warnOnce',\n      'readEmAsmArgsArray',\n      'jstoi_s',\n      'getExecutableName',\n      'asyncLoad',\n      'alignMemory',\n      'mmapAlloc',\n      'wasmTable',\n      'noExitRuntime',\n      'getCFunc',\n      'uleb128Encode',\n      'sigToWasmTypes',\n      'generateFuncType',\n      'convertJsFunctionToWasm',\n      'freeTableIndexes',\n      'functionsInTableMap',\n      'getEmptyTableSlot',\n      'updateTableMap',\n      'getFunctionAddress',\n      'PATH',\n      'PATH_FS',\n      'UTF8Decoder',\n      'UTF8ArrayToString',\n      'stringToUTF8Array',\n      'lengthBytesUTF8',\n      'intArrayFromString',\n      'stringToAscii',\n      'UTF16Decoder',\n      'stringToUTF8OnStack',\n      'writeArrayToMemory',\n      'JSEvents',\n      'specialHTMLTargets',\n      'findCanvasEventTarget',\n      'currentFullscreenStrategy',\n      'restoreOldWindowedStyle',\n      'UNWIND_CACHE',\n      'ExitStatus',\n      'getEnvStrings',\n      'doReadv',\n      'doWritev',\n      'promiseMap',\n      'uncaughtExceptionCount',\n      'exceptionLast',\n      'exceptionCaught',\n      'Browser',\n      'getPreloadedImageData__data',\n      'wget',\n      'MONTH_DAYS_REGULAR',\n      'MONTH_DAYS_LEAP',\n      'MONTH_DAYS_REGULAR_CUMULATIVE',\n      'MONTH_DAYS_LEAP_CUMULATIVE',\n      'isLeapYear',\n      'ydayFromDate',\n      'SYSCALLS',\n      'preloadPlugins',\n      'FS_createPreloadedFile',\n      'FS_modeStringToFlags',\n      'FS_getMode',\n      'FS_stdin_getChar_buffer',\n      'FS_stdin_getChar',\n      'FS_createPath',\n      'FS_createDevice',\n      'FS_readFile',\n      'FS',\n      'FS_createDataFile',\n      'FS_createLazyFile',\n      'MEMFS',\n      'TTY',\n      'PIPEFS',\n      'SOCKFS',\n      'tempFixedLengthArray',\n      'miniTempWebGLFloatBuffers',\n      'miniTempWebGLIntBuffers',\n      'GL',\n      'AL',\n      'GLUT',\n      'EGL',\n      'GLEW',\n      'IDBStore',\n      'SDL',\n      'SDL_gfx',\n      'allocateUTF8',\n      'allocateUTF8OnStack',\n      'print',\n      'printErr',\n    ];\n    unexportedSymbols.forEach(unexportedRuntimeSymbol);\n\n    var calledRun;\n    var calledPrerun;\n\n    dependenciesFulfilled = function runCaller() {\n      // If run has never been called, and we should call run (INVOKE_RUN is true, and Module.noInitialRun is not false)\n      if (!calledRun) run();\n      if (!calledRun) dependenciesFulfilled = runCaller; // try this again later, after new deps are fulfilled\n    };\n\n    function stackCheckInit() {\n      // This is normally called automatically during __wasm_call_ctors but need to\n      // get these values before even running any of the ctors so we call it redundantly\n      // here.\n      _emscripten_stack_init();\n      // TODO(sbc): Move writeStackCookie to native to to avoid this.\n      writeStackCookie();\n    }\n\n    function run() {\n      if (runDependencies > 0) {\n        return;\n      }\n\n      stackCheckInit();\n\n      if (!calledPrerun) {\n        calledPrerun = 1;\n        preRun();\n\n        // a preRun added a dependency, run will be called later\n        if (runDependencies > 0) {\n          return;\n        }\n      }\n\n      function doRun() {\n        // run may have just been called through dependencies being fulfilled just in this very frame,\n        // or while the async setStatus time below was happening\n        if (calledRun) return;\n        calledRun = 1;\n        Module['calledRun'] = 1;\n\n        if (ABORT) return;\n\n        initRuntime();\n\n        readyPromiseResolve(Module);\n        Module['onRuntimeInitialized']?.();\n\n        assert(\n          !Module['_main'],\n          'compiled without a main, but one is present. if you added it from JS, use Module[\"onRuntimeInitialized\"]',\n        );\n\n        postRun();\n      }\n\n      if (Module['setStatus']) {\n        Module['setStatus']('Running...');\n        setTimeout(() => {\n          setTimeout(() => Module['setStatus'](''), 1);\n          doRun();\n        }, 1);\n      } else {\n        doRun();\n      }\n      checkStackCookie();\n    }\n\n    if (Module['preInit']) {\n      if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']];\n      while (Module['preInit'].length > 0) {\n        Module['preInit'].pop()();\n      }\n    }\n\n    run();\n\n    // end include: postamble.js\n\n    // include: postamble_modularize.js\n    // In MODULARIZE mode we wrap the generated code in a factory function\n    // and return either the Module itself, or a promise of the module.\n    //\n    // We assign to the `moduleRtn` global here and configure closure to see\n    // this as and extern so it won't get minified.\n\n    moduleRtn = readyPromise;\n\n    // Assertion for attempting to access module properties on the incoming\n    // moduleArg.  In the past we used this object as the prototype of the module\n    // and assigned properties to it, but now we return a distinct object.  This\n    // keeps the instance private until it is ready (i.e the promise has been\n    // resolved).\n    for (const prop of Object.keys(Module)) {\n      if (!(prop in moduleArg)) {\n        Object.defineProperty(moduleArg, prop, {\n          configurable: true,\n          get() {\n            abort(\n              `Access to module property ('${prop}') is no longer possible via the module constructor argument; Instead, use the result of the module constructor.`,\n            );\n          },\n        });\n      }\n    }\n    // end include: postamble_modularize.js\n\n    return moduleRtn;\n  };\n})();\n\n/* AUTO-GENERATED — DO NOT EDIT BY HAND */\nconst functions = {\n    EPDF_GetMetaKeyCount: [['number', 'boolean'], 'number'],\n    EPDF_GetMetaKeyName: [\n        ['number', 'number', 'boolean', 'number', 'number'],\n        'number',\n    ],\n    EPDF_GetMetaTrapped: [['number'], 'number'],\n    EPDF_GetPageRotationByIndex: [['number', 'number'], 'number'],\n    EPDF_HasMetaText: [['number', 'string'], 'boolean'],\n    EPDF_PNG_EncodeRGBA: [\n        ['number', 'number', 'number', 'number', 'number', 'number'],\n        'number',\n    ],\n    EPDF_RenderAnnotBitmap: [\n        ['number', 'number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    EPDF_SetMetaText: [['number', 'string', 'number'], 'boolean'],\n    EPDF_SetMetaTrapped: [['number', 'number'], 'boolean'],\n    EPDFAction_CreateGoTo: [['number', 'number'], 'number'],\n    EPDFAction_CreateGoToNamed: [['number', 'string'], 'number'],\n    EPDFAction_CreateLaunch: [['number', 'number'], 'number'],\n    EPDFAction_CreateRemoteGoToByName: [['number', 'number', 'number'], 'number'],\n    EPDFAction_CreateRemoteGoToDest: [['number', 'number', 'number'], 'number'],\n    EPDFAction_CreateURI: [['number', 'string'], 'number'],\n    EPDFAnnot_ClearColor: [['number', 'number'], 'boolean'],\n    EPDFAnnot_GenerateAppearance: [['number'], 'boolean'],\n    EPDFAnnot_GenerateAppearanceWithBlend: [['number', 'number'], 'boolean'],\n    EPDFAnnot_GetBlendMode: [['number'], 'number'],\n    EPDFAnnot_GetBorderDashPattern: [['number', 'number', 'number'], 'boolean'],\n    EPDFAnnot_GetBorderDashPatternCount: [['number'], 'number'],\n    EPDFAnnot_GetBorderEffect: [['number', 'number'], 'boolean'],\n    EPDFAnnot_GetBorderStyle: [['number', 'number'], 'number'],\n    EPDFAnnot_GetColor: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    EPDFAnnot_GetDefaultAppearance: [\n        ['number', 'number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    EPDFAnnot_GetIcon: [['number'], 'number'],\n    EPDFAnnot_GetIntent: [['number', 'number', 'number'], 'number'],\n    EPDFAnnot_GetLineEndings: [['number', 'number', 'number'], 'boolean'],\n    EPDFAnnot_GetOpacity: [['number', 'number'], 'boolean'],\n    EPDFAnnot_GetRectangleDifferences: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    EPDFAnnot_GetRichContent: [['number', 'number', 'number'], 'number'],\n    EPDFAnnot_GetTextAlignment: [['number'], 'number'],\n    EPDFAnnot_GetVerticalAlignment: [['number'], 'number'],\n    EPDFAnnot_SetBorderDashPattern: [['number', 'number', 'number'], 'boolean'],\n    EPDFAnnot_SetBorderStyle: [['number', 'number', 'number'], 'boolean'],\n    EPDFAnnot_SetColor: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    EPDFAnnot_SetDefaultAppearance: [\n        ['number', 'number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    EPDFAnnot_SetIcon: [['number', 'number'], 'boolean'],\n    EPDFAnnot_SetIntent: [['number', 'string'], 'boolean'],\n    EPDFAnnot_SetLine: [['number', 'number', 'number'], 'boolean'],\n    EPDFAnnot_SetLineEndings: [['number', 'number', 'number'], 'boolean'],\n    EPDFAnnot_SetLinkedAnnot: [['number', 'string', 'number'], 'boolean'],\n    EPDFAnnot_SetOpacity: [['number', 'number'], 'boolean'],\n    EPDFAnnot_SetTextAlignment: [['number', 'number'], 'boolean'],\n    EPDFAnnot_SetVerticalAlignment: [['number', 'number'], 'boolean'],\n    EPDFAnnot_SetVertices: [['number', 'number', 'number'], 'boolean'],\n    EPDFAnnot_UpdateAppearanceToRect: [['number', 'number'], 'boolean'],\n    EPDFAttachment_GetDescription: [['number', 'number', 'number'], 'number'],\n    EPDFAttachment_GetIntegerValue: [['number', 'string', 'number'], 'boolean'],\n    EPDFAttachment_SetDescription: [['number', 'number'], 'boolean'],\n    EPDFAttachment_SetSubtype: [['number', 'string'], 'boolean'],\n    EPDFBookmark_AppendChild: [['number', 'number', 'number'], 'number'],\n    EPDFBookmark_Clear: [['number'], 'boolean'],\n    EPDFBookmark_ClearTarget: [['number'], 'boolean'],\n    EPDFBookmark_Create: [['number', 'number'], 'number'],\n    EPDFBookmark_Delete: [['number', 'number'], 'boolean'],\n    EPDFBookmark_InsertAfter: [['number', 'number', 'number', 'number'], 'number'],\n    EPDFBookmark_SetAction: [['number', 'number', 'number'], 'boolean'],\n    EPDFBookmark_SetDest: [['number', 'number', 'number'], 'boolean'],\n    EPDFBookmark_SetTitle: [['number', 'number'], 'boolean'],\n    EPDFCatalog_GetLanguage: [['number', 'number', 'number'], 'number'],\n    EPDFDest_CreateRemoteView: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'number',\n    ],\n    EPDFDest_CreateRemoteXYZ: [\n        ['number', 'number', 'boolean', 'number', 'boolean', 'number', 'boolean', 'number'],\n        'number',\n    ],\n    EPDFDest_CreateView: [['number', 'number', 'number', 'number'], 'number'],\n    EPDFDest_CreateXYZ: [\n        ['number', 'boolean', 'number', 'boolean', 'number', 'boolean', 'number'],\n        'number',\n    ],\n    EPDFNamedDest_Remove: [['number', 'string'], 'boolean'],\n    EPDFNamedDest_SetDest: [['number', 'string', 'number'], 'boolean'],\n    EPDFPage_CreateAnnot: [['number', 'number'], 'number'],\n    EPDFPage_GetAnnotByName: [['number', 'number'], 'number'],\n    EPDFPage_GetAnnotCountRaw: [['number', 'number'], 'number'],\n    EPDFPage_GetAnnotRaw: [['number', 'number', 'number'], 'number'],\n    EPDFPage_RemoveAnnotByName: [['number', 'number'], 'boolean'],\n    EPDFPage_RemoveAnnotRaw: [['number', 'number', 'number'], 'boolean'],\n    EPDFText_RedactInQuads: [\n        ['number', 'number', 'number', 'boolean', 'boolean'],\n        'boolean',\n    ],\n    EPDFText_RedactInRect: [['number', 'number', 'boolean', 'boolean'], 'boolean'],\n    FORM_CanRedo: [['number', 'number'], 'boolean'],\n    FORM_CanUndo: [['number', 'number'], 'boolean'],\n    FORM_DoDocumentAAction: [['number', 'number'], null],\n    FORM_DoDocumentJSAction: [['number'], null],\n    FORM_DoDocumentOpenAction: [['number'], null],\n    FORM_DoPageAAction: [['number', 'number', 'number'], null],\n    FORM_ForceToKillFocus: [['number'], 'boolean'],\n    FORM_GetFocusedAnnot: [['number', 'number', 'number'], 'boolean'],\n    FORM_GetFocusedText: [['number', 'number', 'number', 'number'], 'number'],\n    FORM_GetSelectedText: [['number', 'number', 'number', 'number'], 'number'],\n    FORM_IsIndexSelected: [['number', 'number', 'number'], 'boolean'],\n    FORM_OnAfterLoadPage: [['number', 'number'], null],\n    FORM_OnBeforeClosePage: [['number', 'number'], null],\n    FORM_OnChar: [['number', 'number', 'number', 'number'], 'boolean'],\n    FORM_OnFocus: [['number', 'number', 'number', 'number', 'number'], 'boolean'],\n    FORM_OnKeyDown: [['number', 'number', 'number', 'number'], 'boolean'],\n    FORM_OnKeyUp: [['number', 'number', 'number', 'number'], 'boolean'],\n    FORM_OnLButtonDoubleClick: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FORM_OnLButtonDown: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FORM_OnLButtonUp: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FORM_OnMouseMove: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FORM_OnMouseWheel: [\n        ['number', 'number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FORM_OnRButtonDown: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FORM_OnRButtonUp: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FORM_Redo: [['number', 'number'], 'boolean'],\n    FORM_ReplaceAndKeepSelection: [['number', 'number', 'number'], null],\n    FORM_ReplaceSelection: [['number', 'number', 'number'], null],\n    FORM_SelectAllText: [['number', 'number'], 'boolean'],\n    FORM_SetFocusedAnnot: [['number', 'number'], 'boolean'],\n    FORM_SetIndexSelected: [['number', 'number', 'number', 'boolean'], 'boolean'],\n    FORM_Undo: [['number', 'number'], 'boolean'],\n    FPDF_AddInstalledFont: [['number', 'number', 'number'], null],\n    FPDF_CloseDocument: [['number'], null],\n    FPDF_ClosePage: [['number'], null],\n    FPDF_CloseXObject: [['number'], null],\n    FPDF_CopyViewerPreferences: [['number', 'number'], 'boolean'],\n    FPDF_CountNamedDests: [['number'], 'number'],\n    FPDF_CreateClipPath: [['number', 'number', 'number', 'number'], 'number'],\n    FPDF_CreateNewDocument: [[], 'number'],\n    FPDF_DestroyClipPath: [['number'], null],\n    FPDF_DestroyLibrary: [[], null],\n    FPDF_DeviceToPage: [\n        [\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n        ],\n        'boolean',\n    ],\n    FPDF_DocumentHasValidCrossReferenceTable: [['number'], 'boolean'],\n    FPDF_FFLDraw: [\n        [\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n        ],\n        null,\n    ],\n    FPDF_FreeDefaultSystemFontInfo: [['number'], null],\n    FPDF_GetDefaultSystemFontInfo: [[], 'number'],\n    FPDF_GetDefaultTTFMap: [[], 'number'],\n    FPDF_GetDefaultTTFMapCount: [[], 'number'],\n    FPDF_GetDefaultTTFMapEntry: [['number'], 'number'],\n    FPDF_GetDocPermissions: [['number'], 'number'],\n    FPDF_GetDocUserPermissions: [['number'], 'number'],\n    FPDF_GetFileIdentifier: [['number', 'number', 'number', 'number'], 'number'],\n    FPDF_GetFileVersion: [['number', 'number'], 'boolean'],\n    FPDF_GetFormType: [['number'], 'number'],\n    FPDF_GetLastError: [[], 'number'],\n    FPDF_GetMetaText: [['number', 'string', 'number', 'number'], 'number'],\n    FPDF_GetNamedDest: [['number', 'number', 'number', 'number'], 'number'],\n    FPDF_GetNamedDestByName: [['number', 'string'], 'number'],\n    FPDF_GetPageAAction: [['number', 'number'], 'number'],\n    FPDF_GetPageBoundingBox: [['number', 'number'], 'boolean'],\n    FPDF_GetPageCount: [['number'], 'number'],\n    FPDF_GetPageHeight: [['number'], 'number'],\n    FPDF_GetPageHeightF: [['number'], 'number'],\n    FPDF_GetPageLabel: [['number', 'number', 'number', 'number'], 'number'],\n    FPDF_GetPageSizeByIndex: [['number', 'number', 'number', 'number'], 'number'],\n    FPDF_GetPageSizeByIndexF: [['number', 'number', 'number'], 'boolean'],\n    FPDF_GetPageWidth: [['number'], 'number'],\n    FPDF_GetPageWidthF: [['number'], 'number'],\n    FPDF_GetSecurityHandlerRevision: [['number'], 'number'],\n    FPDF_GetSignatureCount: [['number'], 'number'],\n    FPDF_GetSignatureObject: [['number', 'number'], 'number'],\n    FPDF_GetTrailerEnds: [['number', 'number', 'number'], 'number'],\n    FPDF_GetXFAPacketContent: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDF_GetXFAPacketCount: [['number'], 'number'],\n    FPDF_GetXFAPacketName: [['number', 'number', 'number', 'number'], 'number'],\n    FPDF_ImportNPagesToOne: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'number',\n    ],\n    FPDF_ImportPages: [['number', 'number', 'string', 'number'], 'boolean'],\n    FPDF_ImportPagesByIndex: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDF_InitLibrary: [[], null],\n    FPDF_InitLibraryWithConfig: [['number'], null],\n    FPDF_LoadCustomDocument: [['number', 'string'], 'number'],\n    FPDF_LoadDocument: [['number', 'string'], 'number'],\n    FPDF_LoadMemDocument: [['number', 'number', 'string'], 'number'],\n    FPDF_LoadMemDocument64: [['number', 'number', 'string'], 'number'],\n    FPDF_LoadPage: [['number', 'number'], 'number'],\n    FPDF_LoadXFA: [['number'], 'boolean'],\n    FPDF_MovePages: [['number', 'number', 'number', 'number'], 'boolean'],\n    FPDF_NewFormObjectFromXObject: [['number'], 'number'],\n    FPDF_NewXObjectFromPage: [['number', 'number', 'number'], 'number'],\n    FPDF_PageToDevice: [\n        [\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n        ],\n        'boolean',\n    ],\n    FPDF_RemoveFormFieldHighlight: [['number'], null],\n    FPDF_RenderPage_Close: [['number'], null],\n    FPDF_RenderPage_Continue: [['number', 'number'], 'number'],\n    FPDF_RenderPageBitmap: [\n        ['number', 'number', 'number', 'number', 'number', 'number', 'number', 'number'],\n        null,\n    ],\n    FPDF_RenderPageBitmap_Start: [\n        [\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n        ],\n        'number',\n    ],\n    FPDF_RenderPageBitmapWithColorScheme_Start: [\n        [\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n        ],\n        'number',\n    ],\n    FPDF_RenderPageBitmapWithMatrix: [\n        ['number', 'number', 'number', 'number', 'number'],\n        null,\n    ],\n    FPDF_SaveAsCopy: [['number', 'number', 'number'], 'boolean'],\n    FPDF_SaveWithVersion: [['number', 'number', 'number', 'number'], 'boolean'],\n    FPDF_SetFormFieldHighlightAlpha: [['number', 'number'], null],\n    FPDF_SetFormFieldHighlightColor: [['number', 'number', 'number'], null],\n    FPDF_SetSandBoxPolicy: [['number', 'boolean'], null],\n    FPDF_SetSystemFontInfo: [['number'], null],\n    FPDF_StructElement_Attr_CountChildren: [['number'], 'number'],\n    FPDF_StructElement_Attr_GetBlobValue: [\n        ['number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDF_StructElement_Attr_GetBooleanValue: [['number', 'number'], 'boolean'],\n    FPDF_StructElement_Attr_GetChildAtIndex: [['number', 'number'], 'number'],\n    FPDF_StructElement_Attr_GetCount: [['number'], 'number'],\n    FPDF_StructElement_Attr_GetName: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDF_StructElement_Attr_GetNumberValue: [['number', 'number'], 'boolean'],\n    FPDF_StructElement_Attr_GetStringValue: [\n        ['number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDF_StructElement_Attr_GetType: [['number'], 'number'],\n    FPDF_StructElement_Attr_GetValue: [['number', 'string'], 'number'],\n    FPDF_StructElement_CountChildren: [['number'], 'number'],\n    FPDF_StructElement_GetActualText: [['number', 'number', 'number'], 'number'],\n    FPDF_StructElement_GetAltText: [['number', 'number', 'number'], 'number'],\n    FPDF_StructElement_GetAttributeAtIndex: [['number', 'number'], 'number'],\n    FPDF_StructElement_GetAttributeCount: [['number'], 'number'],\n    FPDF_StructElement_GetChildAtIndex: [['number', 'number'], 'number'],\n    FPDF_StructElement_GetChildMarkedContentID: [['number', 'number'], 'number'],\n    FPDF_StructElement_GetID: [['number', 'number', 'number'], 'number'],\n    FPDF_StructElement_GetLang: [['number', 'number', 'number'], 'number'],\n    FPDF_StructElement_GetMarkedContentID: [['number'], 'number'],\n    FPDF_StructElement_GetMarkedContentIdAtIndex: [['number', 'number'], 'number'],\n    FPDF_StructElement_GetMarkedContentIdCount: [['number'], 'number'],\n    FPDF_StructElement_GetObjType: [['number', 'number', 'number'], 'number'],\n    FPDF_StructElement_GetParent: [['number'], 'number'],\n    FPDF_StructElement_GetStringAttribute: [\n        ['number', 'string', 'number', 'number'],\n        'number',\n    ],\n    FPDF_StructElement_GetTitle: [['number', 'number', 'number'], 'number'],\n    FPDF_StructElement_GetType: [['number', 'number', 'number'], 'number'],\n    FPDF_StructTree_Close: [['number'], null],\n    FPDF_StructTree_CountChildren: [['number'], 'number'],\n    FPDF_StructTree_GetChildAtIndex: [['number', 'number'], 'number'],\n    FPDF_StructTree_GetForPage: [['number'], 'number'],\n    FPDF_VIEWERREF_GetDuplex: [['number'], 'number'],\n    FPDF_VIEWERREF_GetName: [['number', 'string', 'number', 'number'], 'number'],\n    FPDF_VIEWERREF_GetNumCopies: [['number'], 'number'],\n    FPDF_VIEWERREF_GetPrintPageRange: [['number'], 'number'],\n    FPDF_VIEWERREF_GetPrintPageRangeCount: [['number'], 'number'],\n    FPDF_VIEWERREF_GetPrintPageRangeElement: [['number', 'number'], 'number'],\n    FPDF_VIEWERREF_GetPrintScaling: [['number'], 'boolean'],\n    FPDFAction_GetDest: [['number', 'number'], 'number'],\n    FPDFAction_GetFilePath: [['number', 'number', 'number'], 'number'],\n    FPDFAction_GetType: [['number'], 'number'],\n    FPDFAction_GetURIPath: [['number', 'number', 'number', 'number'], 'number'],\n    FPDFAnnot_AddFileAttachment: [['number', 'number'], 'number'],\n    FPDFAnnot_AddInkStroke: [['number', 'number', 'number'], 'number'],\n    FPDFAnnot_AppendAttachmentPoints: [['number', 'number'], 'boolean'],\n    FPDFAnnot_AppendObject: [['number', 'number'], 'boolean'],\n    FPDFAnnot_CountAttachmentPoints: [['number'], 'number'],\n    FPDFAnnot_GetAP: [['number', 'number', 'number', 'number'], 'number'],\n    FPDFAnnot_GetAttachmentPoints: [['number', 'number', 'number'], 'boolean'],\n    FPDFAnnot_GetBorder: [['number', 'number', 'number', 'number'], 'boolean'],\n    FPDFAnnot_GetColor: [\n        ['number', 'number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFAnnot_GetFileAttachment: [['number'], 'number'],\n    FPDFAnnot_GetFlags: [['number'], 'number'],\n    FPDFAnnot_GetFocusableSubtypes: [['number', 'number', 'number'], 'boolean'],\n    FPDFAnnot_GetFocusableSubtypesCount: [['number'], 'number'],\n    FPDFAnnot_GetFontColor: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFAnnot_GetFontSize: [['number', 'number', 'number'], 'boolean'],\n    FPDFAnnot_GetFormAdditionalActionJavaScript: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'number',\n    ],\n    FPDFAnnot_GetFormControlCount: [['number', 'number'], 'number'],\n    FPDFAnnot_GetFormControlIndex: [['number', 'number'], 'number'],\n    FPDFAnnot_GetFormFieldAlternateName: [\n        ['number', 'number', 'number', 'number'],\n        'number',\n    ],\n    FPDFAnnot_GetFormFieldAtPoint: [['number', 'number', 'number'], 'number'],\n    FPDFAnnot_GetFormFieldExportValue: [\n        ['number', 'number', 'number', 'number'],\n        'number',\n    ],\n    FPDFAnnot_GetFormFieldFlags: [['number', 'number'], 'number'],\n    FPDFAnnot_GetFormFieldName: [\n        ['number', 'number', 'number', 'number'],\n        'number',\n    ],\n    FPDFAnnot_GetFormFieldType: [['number', 'number'], 'number'],\n    FPDFAnnot_GetFormFieldValue: [\n        ['number', 'number', 'number', 'number'],\n        'number',\n    ],\n    FPDFAnnot_GetInkListCount: [['number'], 'number'],\n    FPDFAnnot_GetInkListPath: [['number', 'number', 'number', 'number'], 'number'],\n    FPDFAnnot_GetLine: [['number', 'number', 'number'], 'boolean'],\n    FPDFAnnot_GetLink: [['number'], 'number'],\n    FPDFAnnot_GetLinkedAnnot: [['number', 'string'], 'number'],\n    FPDFAnnot_GetNumberValue: [['number', 'string', 'number'], 'boolean'],\n    FPDFAnnot_GetObject: [['number', 'number'], 'number'],\n    FPDFAnnot_GetObjectCount: [['number'], 'number'],\n    FPDFAnnot_GetOptionCount: [['number', 'number'], 'number'],\n    FPDFAnnot_GetOptionLabel: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'number',\n    ],\n    FPDFAnnot_GetRect: [['number', 'number'], 'boolean'],\n    FPDFAnnot_GetStringValue: [['number', 'string', 'number', 'number'], 'number'],\n    FPDFAnnot_GetSubtype: [['number'], 'number'],\n    FPDFAnnot_GetValueType: [['number', 'string'], 'number'],\n    FPDFAnnot_GetVertices: [['number', 'number', 'number'], 'number'],\n    FPDFAnnot_HasAttachmentPoints: [['number'], 'boolean'],\n    FPDFAnnot_HasKey: [['number', 'string'], 'boolean'],\n    FPDFAnnot_IsChecked: [['number', 'number'], 'boolean'],\n    FPDFAnnot_IsObjectSupportedSubtype: [['number'], 'boolean'],\n    FPDFAnnot_IsOptionSelected: [['number', 'number', 'number'], 'boolean'],\n    FPDFAnnot_IsSupportedSubtype: [['number'], 'boolean'],\n    FPDFAnnot_RemoveInkList: [['number'], 'boolean'],\n    FPDFAnnot_RemoveObject: [['number', 'number'], 'boolean'],\n    FPDFAnnot_SetAP: [['number', 'number', 'number'], 'boolean'],\n    FPDFAnnot_SetAttachmentPoints: [['number', 'number', 'number'], 'boolean'],\n    FPDFAnnot_SetBorder: [['number', 'number', 'number', 'number'], 'boolean'],\n    FPDFAnnot_SetColor: [\n        ['number', 'number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFAnnot_SetFlags: [['number', 'number'], 'boolean'],\n    FPDFAnnot_SetFocusableSubtypes: [['number', 'number', 'number'], 'boolean'],\n    FPDFAnnot_SetFontColor: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFAnnot_SetFormFieldFlags: [['number', 'number', 'number'], 'boolean'],\n    FPDFAnnot_SetRect: [['number', 'number'], 'boolean'],\n    FPDFAnnot_SetStringValue: [['number', 'string', 'number'], 'boolean'],\n    FPDFAnnot_SetURI: [['number', 'number'], 'boolean'],\n    FPDFAnnot_UpdateObject: [['number', 'number'], 'boolean'],\n    FPDFAttachment_GetFile: [['number', 'number', 'number', 'number'], 'boolean'],\n    FPDFAttachment_GetName: [['number', 'number', 'number'], 'number'],\n    FPDFAttachment_GetStringValue: [\n        ['number', 'string', 'number', 'number'],\n        'number',\n    ],\n    FPDFAttachment_GetSubtype: [['number', 'number', 'number'], 'number'],\n    FPDFAttachment_GetValueType: [['number', 'string'], 'number'],\n    FPDFAttachment_HasKey: [['number', 'string'], 'boolean'],\n    FPDFAttachment_SetFile: [['number', 'number', 'number', 'number'], 'boolean'],\n    FPDFAttachment_SetStringValue: [['number', 'string', 'number'], 'boolean'],\n    FPDFAvail_Create: [['number', 'number'], 'number'],\n    FPDFAvail_Destroy: [['number'], null],\n    FPDFAvail_GetDocument: [['number', 'string'], 'number'],\n    FPDFAvail_GetFirstPageNum: [['number'], 'number'],\n    FPDFAvail_IsDocAvail: [['number', 'number'], 'number'],\n    FPDFAvail_IsFormAvail: [['number', 'number'], 'number'],\n    FPDFAvail_IsLinearized: [['number'], 'number'],\n    FPDFAvail_IsPageAvail: [['number', 'number', 'number'], 'number'],\n    FPDFBitmap_Create: [['number', 'number', 'number'], 'number'],\n    FPDFBitmap_CreateEx: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'number',\n    ],\n    FPDFBitmap_Destroy: [['number'], null],\n    FPDFBitmap_FillRect: [\n        ['number', 'number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFBitmap_GetBuffer: [['number'], 'number'],\n    FPDFBitmap_GetFormat: [['number'], 'number'],\n    FPDFBitmap_GetHeight: [['number'], 'number'],\n    FPDFBitmap_GetStride: [['number'], 'number'],\n    FPDFBitmap_GetWidth: [['number'], 'number'],\n    FPDFBookmark_Find: [['number', 'number'], 'number'],\n    FPDFBookmark_GetAction: [['number'], 'number'],\n    FPDFBookmark_GetCount: [['number'], 'number'],\n    FPDFBookmark_GetDest: [['number', 'number'], 'number'],\n    FPDFBookmark_GetFirstChild: [['number', 'number'], 'number'],\n    FPDFBookmark_GetNextSibling: [['number', 'number'], 'number'],\n    FPDFBookmark_GetTitle: [['number', 'number', 'number'], 'number'],\n    FPDFCatalog_IsTagged: [['number'], 'boolean'],\n    FPDFCatalog_SetLanguage: [['number', 'string'], 'boolean'],\n    FPDFClipPath_CountPaths: [['number'], 'number'],\n    FPDFClipPath_CountPathSegments: [['number', 'number'], 'number'],\n    FPDFClipPath_GetPathSegment: [['number', 'number', 'number'], 'number'],\n    FPDFDest_GetDestPageIndex: [['number', 'number'], 'number'],\n    FPDFDest_GetLocationInPage: [\n        ['number', 'number', 'number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFDest_GetView: [['number', 'number', 'number'], 'number'],\n    FPDFDoc_AddAttachment: [['number', 'number'], 'number'],\n    FPDFDoc_CloseJavaScriptAction: [['number'], null],\n    FPDFDoc_DeleteAttachment: [['number', 'number'], 'boolean'],\n    FPDFDOC_ExitFormFillEnvironment: [['number'], null],\n    FPDFDoc_GetAttachment: [['number', 'number'], 'number'],\n    FPDFDoc_GetAttachmentCount: [['number'], 'number'],\n    FPDFDoc_GetJavaScriptAction: [['number', 'number'], 'number'],\n    FPDFDoc_GetJavaScriptActionCount: [['number'], 'number'],\n    FPDFDoc_GetPageMode: [['number'], 'number'],\n    FPDFDOC_InitFormFillEnvironment: [['number', 'number'], 'number'],\n    FPDFFont_Close: [['number'], null],\n    FPDFFont_GetAscent: [['number', 'number', 'number'], 'boolean'],\n    FPDFFont_GetBaseFontName: [['number', 'number', 'number'], 'number'],\n    FPDFFont_GetDescent: [['number', 'number', 'number'], 'boolean'],\n    FPDFFont_GetFamilyName: [['number', 'number', 'number'], 'number'],\n    FPDFFont_GetFlags: [['number'], 'number'],\n    FPDFFont_GetFontData: [['number', 'number', 'number', 'number'], 'boolean'],\n    FPDFFont_GetGlyphPath: [['number', 'number', 'number'], 'number'],\n    FPDFFont_GetGlyphWidth: [['number', 'number', 'number', 'number'], 'boolean'],\n    FPDFFont_GetIsEmbedded: [['number'], 'number'],\n    FPDFFont_GetItalicAngle: [['number', 'number'], 'boolean'],\n    FPDFFont_GetWeight: [['number'], 'number'],\n    FPDFFormObj_CountObjects: [['number'], 'number'],\n    FPDFFormObj_GetObject: [['number', 'number'], 'number'],\n    FPDFFormObj_RemoveObject: [['number', 'number'], 'boolean'],\n    FPDFGlyphPath_CountGlyphSegments: [['number'], 'number'],\n    FPDFGlyphPath_GetGlyphPathSegment: [['number', 'number'], 'number'],\n    FPDFImageObj_GetBitmap: [['number'], 'number'],\n    FPDFImageObj_GetIccProfileDataDecoded: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFImageObj_GetImageDataDecoded: [['number', 'number', 'number'], 'number'],\n    FPDFImageObj_GetImageDataRaw: [['number', 'number', 'number'], 'number'],\n    FPDFImageObj_GetImageFilter: [\n        ['number', 'number', 'number', 'number'],\n        'number',\n    ],\n    FPDFImageObj_GetImageFilterCount: [['number'], 'number'],\n    FPDFImageObj_GetImageMetadata: [['number', 'number', 'number'], 'boolean'],\n    FPDFImageObj_GetImagePixelSize: [['number', 'number', 'number'], 'boolean'],\n    FPDFImageObj_GetRenderedBitmap: [['number', 'number', 'number'], 'number'],\n    FPDFImageObj_LoadJpegFile: [\n        ['number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFImageObj_LoadJpegFileInline: [\n        ['number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFImageObj_SetBitmap: [['number', 'number', 'number', 'number'], 'boolean'],\n    FPDFImageObj_SetMatrix: [\n        ['number', 'number', 'number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFJavaScriptAction_GetName: [['number', 'number', 'number'], 'number'],\n    FPDFJavaScriptAction_GetScript: [['number', 'number', 'number'], 'number'],\n    FPDFLink_CloseWebLinks: [['number'], null],\n    FPDFLink_CountQuadPoints: [['number'], 'number'],\n    FPDFLink_CountRects: [['number', 'number'], 'number'],\n    FPDFLink_CountWebLinks: [['number'], 'number'],\n    FPDFLink_Enumerate: [['number', 'number', 'number'], 'boolean'],\n    FPDFLink_GetAction: [['number'], 'number'],\n    FPDFLink_GetAnnot: [['number', 'number'], 'number'],\n    FPDFLink_GetAnnotRect: [['number', 'number'], 'boolean'],\n    FPDFLink_GetDest: [['number', 'number'], 'number'],\n    FPDFLink_GetLinkAtPoint: [['number', 'number', 'number'], 'number'],\n    FPDFLink_GetLinkZOrderAtPoint: [['number', 'number', 'number'], 'number'],\n    FPDFLink_GetQuadPoints: [['number', 'number', 'number'], 'boolean'],\n    FPDFLink_GetRect: [\n        ['number', 'number', 'number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFLink_GetTextRange: [['number', 'number', 'number', 'number'], 'boolean'],\n    FPDFLink_GetURL: [['number', 'number', 'number', 'number'], 'number'],\n    FPDFLink_LoadWebLinks: [['number'], 'number'],\n    FPDFPage_CloseAnnot: [['number'], null],\n    FPDFPage_CountObjects: [['number'], 'number'],\n    FPDFPage_CreateAnnot: [['number', 'number'], 'number'],\n    FPDFPage_Delete: [['number', 'number'], null],\n    FPDFPage_Flatten: [['number', 'number'], 'number'],\n    FPDFPage_FormFieldZOrderAtPoint: [\n        ['number', 'number', 'number', 'number'],\n        'number',\n    ],\n    FPDFPage_GenerateContent: [['number'], 'boolean'],\n    FPDFPage_GetAnnot: [['number', 'number'], 'number'],\n    FPDFPage_GetAnnotCount: [['number'], 'number'],\n    FPDFPage_GetAnnotIndex: [['number', 'number'], 'number'],\n    FPDFPage_GetArtBox: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFPage_GetBleedBox: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFPage_GetCropBox: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFPage_GetDecodedThumbnailData: [['number', 'number', 'number'], 'number'],\n    FPDFPage_GetMediaBox: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFPage_GetObject: [['number', 'number'], 'number'],\n    FPDFPage_GetRawThumbnailData: [['number', 'number', 'number'], 'number'],\n    FPDFPage_GetRotation: [['number'], 'number'],\n    FPDFPage_GetThumbnailAsBitmap: [['number'], 'number'],\n    FPDFPage_GetTrimBox: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFPage_HasFormFieldAtPoint: [\n        ['number', 'number', 'number', 'number'],\n        'number',\n    ],\n    FPDFPage_HasTransparency: [['number'], 'boolean'],\n    FPDFPage_InsertClipPath: [['number', 'number'], null],\n    FPDFPage_InsertObject: [['number', 'number'], null],\n    FPDFPage_InsertObjectAtIndex: [['number', 'number', 'number'], 'boolean'],\n    FPDFPage_New: [['number', 'number', 'number', 'number'], 'number'],\n    FPDFPage_RemoveAnnot: [['number', 'number'], 'boolean'],\n    FPDFPage_RemoveObject: [['number', 'number'], 'boolean'],\n    FPDFPage_SetArtBox: [['number', 'number', 'number', 'number', 'number'], null],\n    FPDFPage_SetBleedBox: [\n        ['number', 'number', 'number', 'number', 'number'],\n        null,\n    ],\n    FPDFPage_SetCropBox: [['number', 'number', 'number', 'number', 'number'], null],\n    FPDFPage_SetMediaBox: [\n        ['number', 'number', 'number', 'number', 'number'],\n        null,\n    ],\n    FPDFPage_SetRotation: [['number', 'number'], null],\n    FPDFPage_SetTrimBox: [['number', 'number', 'number', 'number', 'number'], null],\n    FPDFPage_TransformAnnots: [\n        ['number', 'number', 'number', 'number', 'number', 'number', 'number'],\n        null,\n    ],\n    FPDFPage_TransFormWithClip: [['number', 'number', 'number'], 'boolean'],\n    FPDFPageObj_AddMark: [['number', 'string'], 'number'],\n    FPDFPageObj_CountMarks: [['number'], 'number'],\n    FPDFPageObj_CreateNewPath: [['number', 'number'], 'number'],\n    FPDFPageObj_CreateNewRect: [['number', 'number', 'number', 'number'], 'number'],\n    FPDFPageObj_CreateTextObj: [['number', 'number', 'number'], 'number'],\n    FPDFPageObj_Destroy: [['number'], null],\n    FPDFPageObj_GetBounds: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFPageObj_GetClipPath: [['number'], 'number'],\n    FPDFPageObj_GetDashArray: [['number', 'number', 'number'], 'boolean'],\n    FPDFPageObj_GetDashCount: [['number'], 'number'],\n    FPDFPageObj_GetDashPhase: [['number', 'number'], 'boolean'],\n    FPDFPageObj_GetFillColor: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFPageObj_GetIsActive: [['number', 'number'], 'boolean'],\n    FPDFPageObj_GetLineCap: [['number'], 'number'],\n    FPDFPageObj_GetLineJoin: [['number'], 'number'],\n    FPDFPageObj_GetMark: [['number', 'number'], 'number'],\n    FPDFPageObj_GetMarkedContentID: [['number'], 'number'],\n    FPDFPageObj_GetMatrix: [['number', 'number'], 'boolean'],\n    FPDFPageObj_GetRotatedBounds: [['number', 'number'], 'boolean'],\n    FPDFPageObj_GetStrokeColor: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFPageObj_GetStrokeWidth: [['number', 'number'], 'boolean'],\n    FPDFPageObj_GetType: [['number'], 'number'],\n    FPDFPageObj_HasTransparency: [['number'], 'boolean'],\n    FPDFPageObj_NewImageObj: [['number'], 'number'],\n    FPDFPageObj_NewTextObj: [['number', 'string', 'number'], 'number'],\n    FPDFPageObj_RemoveMark: [['number', 'number'], 'boolean'],\n    FPDFPageObj_SetBlendMode: [['number', 'string'], null],\n    FPDFPageObj_SetDashArray: [['number', 'number', 'number', 'number'], 'boolean'],\n    FPDFPageObj_SetDashPhase: [['number', 'number'], 'boolean'],\n    FPDFPageObj_SetFillColor: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFPageObj_SetIsActive: [['number', 'boolean'], 'boolean'],\n    FPDFPageObj_SetLineCap: [['number', 'number'], 'boolean'],\n    FPDFPageObj_SetLineJoin: [['number', 'number'], 'boolean'],\n    FPDFPageObj_SetMatrix: [['number', 'number'], 'boolean'],\n    FPDFPageObj_SetStrokeColor: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFPageObj_SetStrokeWidth: [['number', 'number'], 'boolean'],\n    FPDFPageObj_Transform: [\n        ['number', 'number', 'number', 'number', 'number', 'number', 'number'],\n        null,\n    ],\n    FPDFPageObj_TransformClipPath: [\n        ['number', 'number', 'number', 'number', 'number', 'number', 'number'],\n        null,\n    ],\n    FPDFPageObj_TransformF: [['number', 'number'], 'boolean'],\n    FPDFPageObjMark_CountParams: [['number'], 'number'],\n    FPDFPageObjMark_GetName: [['number', 'number', 'number', 'number'], 'boolean'],\n    FPDFPageObjMark_GetParamBlobValue: [\n        ['number', 'string', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFPageObjMark_GetParamIntValue: [['number', 'string', 'number'], 'boolean'],\n    FPDFPageObjMark_GetParamKey: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFPageObjMark_GetParamStringValue: [\n        ['number', 'string', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFPageObjMark_GetParamValueType: [['number', 'string'], 'number'],\n    FPDFPageObjMark_RemoveParam: [['number', 'number', 'string'], 'boolean'],\n    FPDFPageObjMark_SetBlobParam: [\n        ['number', 'number', 'number', 'string', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFPageObjMark_SetIntParam: [\n        ['number', 'number', 'number', 'string', 'number'],\n        'boolean',\n    ],\n    FPDFPageObjMark_SetStringParam: [\n        ['number', 'number', 'number', 'string', 'string'],\n        'boolean',\n    ],\n    FPDFPath_BezierTo: [\n        ['number', 'number', 'number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFPath_Close: [['number'], 'boolean'],\n    FPDFPath_CountSegments: [['number'], 'number'],\n    FPDFPath_GetDrawMode: [['number', 'number', 'number'], 'boolean'],\n    FPDFPath_GetPathSegment: [['number', 'number'], 'number'],\n    FPDFPath_LineTo: [['number', 'number', 'number'], 'boolean'],\n    FPDFPath_MoveTo: [['number', 'number', 'number'], 'boolean'],\n    FPDFPath_SetDrawMode: [['number', 'number', 'boolean'], 'boolean'],\n    FPDFPathSegment_GetClose: [['number'], 'boolean'],\n    FPDFPathSegment_GetPoint: [['number', 'number', 'number'], 'boolean'],\n    FPDFPathSegment_GetType: [['number'], 'number'],\n    FPDFSignatureObj_GetByteRange: [['number', 'number', 'number'], 'number'],\n    FPDFSignatureObj_GetContents: [['number', 'number', 'number'], 'number'],\n    FPDFSignatureObj_GetDocMDPPermission: [['number'], 'number'],\n    FPDFSignatureObj_GetReason: [['number', 'number', 'number'], 'number'],\n    FPDFSignatureObj_GetSubFilter: [['number', 'number', 'number'], 'number'],\n    FPDFSignatureObj_GetTime: [['number', 'number', 'number'], 'number'],\n    FPDFText_ClosePage: [['number'], null],\n    FPDFText_CountChars: [['number'], 'number'],\n    FPDFText_CountRects: [['number', 'number', 'number'], 'number'],\n    FPDFText_FindClose: [['number'], null],\n    FPDFText_FindNext: [['number'], 'boolean'],\n    FPDFText_FindPrev: [['number'], 'boolean'],\n    FPDFText_FindStart: [['number', 'number', 'number', 'number'], 'number'],\n    FPDFText_GetBoundedText: [\n        ['number', 'number', 'number', 'number', 'number', 'number', 'number'],\n        'number',\n    ],\n    FPDFText_GetCharAngle: [['number', 'number'], 'number'],\n    FPDFText_GetCharBox: [\n        ['number', 'number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFText_GetCharIndexAtPos: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'number',\n    ],\n    FPDFText_GetCharIndexFromTextIndex: [['number', 'number'], 'number'],\n    FPDFText_GetCharOrigin: [['number', 'number', 'number', 'number'], 'boolean'],\n    FPDFText_GetFillColor: [\n        ['number', 'number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFText_GetFontInfo: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'number',\n    ],\n    FPDFText_GetFontSize: [['number', 'number'], 'number'],\n    FPDFText_GetFontWeight: [['number', 'number'], 'number'],\n    FPDFText_GetLooseCharBox: [['number', 'number', 'number'], 'boolean'],\n    FPDFText_GetMatrix: [['number', 'number', 'number'], 'boolean'],\n    FPDFText_GetRect: [\n        ['number', 'number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFText_GetSchCount: [['number'], 'number'],\n    FPDFText_GetSchResultIndex: [['number'], 'number'],\n    FPDFText_GetStrokeColor: [\n        ['number', 'number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFText_GetText: [['number', 'number', 'number', 'number'], 'number'],\n    FPDFText_GetTextIndexFromCharIndex: [['number', 'number'], 'number'],\n    FPDFText_GetTextObject: [['number', 'number'], 'number'],\n    FPDFText_GetUnicode: [['number', 'number'], 'number'],\n    FPDFText_HasUnicodeMapError: [['number', 'number'], 'number'],\n    FPDFText_IsGenerated: [['number', 'number'], 'number'],\n    FPDFText_IsHyphen: [['number', 'number'], 'number'],\n    FPDFText_LoadCidType2Font: [\n        ['number', 'number', 'number', 'string', 'number', 'number'],\n        'number',\n    ],\n    FPDFText_LoadFont: [\n        ['number', 'number', 'number', 'number', 'boolean'],\n        'number',\n    ],\n    FPDFText_LoadPage: [['number'], 'number'],\n    FPDFText_LoadStandardFont: [['number', 'string'], 'number'],\n    FPDFText_SetCharcodes: [['number', 'number', 'number'], 'boolean'],\n    FPDFText_SetText: [['number', 'number'], 'boolean'],\n    FPDFTextObj_GetFont: [['number'], 'number'],\n    FPDFTextObj_GetFontSize: [['number', 'number'], 'boolean'],\n    FPDFTextObj_GetRenderedBitmap: [\n        ['number', 'number', 'number', 'number'],\n        'number',\n    ],\n    FPDFTextObj_GetText: [['number', 'number', 'number', 'number'], 'number'],\n    FPDFTextObj_GetTextRenderMode: [['number'], 'number'],\n    FPDFTextObj_SetTextRenderMode: [['number', 'number'], 'boolean'],\n    PDFiumExt_CloseFileWriter: [['number'], null],\n    PDFiumExt_CloseFormFillInfo: [['number'], null],\n    PDFiumExt_ExitFormFillEnvironment: [['number'], null],\n    PDFiumExt_GetFileWriterData: [['number', 'number', 'number'], 'number'],\n    PDFiumExt_GetFileWriterSize: [['number'], 'number'],\n    PDFiumExt_Init: [[], null],\n    PDFiumExt_InitFormFillEnvironment: [['number', 'number'], 'number'],\n    PDFiumExt_OpenFileWriter: [[], 'number'],\n    PDFiumExt_OpenFormFillInfo: [[], 'number'],\n    PDFiumExt_SaveAsCopy: [['number', 'number'], 'number'],\n};\n\nconst DEFAULT_PDFIUM_WASM_URL = 'https://cdn.jsdelivr.net/npm/@kopjra/embedpdf-pdfium@2.0.0-next.1/dist/pdfium.wasm';\nasync function createWrappedModule(pdfium) {\n    const module = {\n        pdfium,\n    };\n    for (const key in functions) {\n        const ident = key;\n        const args = functions[ident][0];\n        const ret = functions[ident][1];\n        // @ts-ignore\n        module[ident] = pdfium.cwrap(key, ret, args);\n    }\n    return module;\n}\n\nasync function init(moduleOverrides) {\n    const pdfium = await createPdfium(moduleOverrides);\n    return createWrappedModule(pdfium);\n}\n\nexport { DEFAULT_PDFIUM_WASM_URL, init };\n//# sourceMappingURL=index.browser.js.map\n","import { Logger } from '@kopjra/embedpdf-models';\nimport { init } from '@kopjra/embedpdf-pdfium';\n\nimport { PdfiumEngine } from '../engine';\n\nexport async function createPdfiumEngine(wasmUrl: string, logger?: Logger): Promise<PdfiumEngine> {\n  const response = await fetch(wasmUrl);\n  const wasmBinary = await response.arrayBuffer();\n  const wasmModule = await init({ wasmBinary });\n  return new PdfiumEngine(wasmModule, { logger });\n}\n"],"names":["readString","wasmModule","readChars","parseChars","defaultLength","buffer","wasmExports","malloc","i","HEAP8","actualLength","str","free","readArrayBuffer","bufferSize","bufferPtr","arrayBuffer","ArrayBuffer","view","DataView","setInt8","getValue","RESERVED_INFO_KEYS","Set","isValidCustomKey","key","length","has","c","charCodeAt","DEFAULT_CONFIG","pageTtl","maxPagesPerDocument","PdfCache","constructor","pdfium","memoryManager","config","this","docs","Map","setDocument","id","filePtr","docPtr","ctx","get","DocumentContext","set","getContext","docId","closeDocument","dispose","delete","closeAllDocuments","values","clear","updateConfig","newConfig","Object","assign","getCacheStats","pagesByDocument","totalPages","entries","pageCount","getCacheSize","documents","size","pageCache","PageCache","acquirePage","pageIdx","acquire","borrowPage","fn","forceReleaseAll","pdf","FPDF_CloseDocument","cache","accessOrder","evictIfNeeded","pagePtr","FPDF_LoadPage","PageContext","removeFromAccessOrder","updateAccessOrder","clearExpiryTimer","bumpRefCount","existed","release","disposeImmediate","updateTtl","lruPageIdx","getRefCount","push","index","indexOf","splice","ttl","onFinalDispose","refCount","disposed","Error","expiryTimer","clearTimeout","newTtl","setTimeout","textPagePtr","FPDFText_ClosePage","formHandle","FORM_OnBeforeClosePage","PDFiumExt_ExitFormFillEnvironment","formInfoPtr","PDFiumExt_CloseFormFillInfo","FPDF_ClosePage","getTextPage","ensureAlive","FPDFText_LoadPage","getFormHandle","PDFiumExt_OpenFormFillInfo","PDFiumExt_InitFormFillEnvironment","FORM_OnAfterLoadPage","withAnnotation","annotIdx","annotPtr","FPDFPage_GetAnnot","FPDFPage_CloseAnnot","LIMITS","MAX_TOTAL_MEMORY","LOG_SOURCE","LOG_CATEGORY","MemoryManager","pdfiumModule","logger","allocations","totalAllocated","ptr","allocation","timestamp","Date","now","stack","isEnabled","warn","getStats","allocationCount","Array","from","checkLeaks","alloc","OffscreenCanvasError","message","super","name","browserImageDataToBlobConverter","getImageData","imageType","quality","OffscreenCanvas","Promise","reject","pdfImage","imageData","ImageData","data","width","height","off","putImageData","convertToBlob","type","PdfiumEngine","options","memoryLeakCheckInterval","NoopLogger","imageDataConverter","setInterval","initialize","debug","perf","PDFiumExt_Init","PdfTaskHelper","resolve","destroy","FPDF_DestroyLibrary","clearInterval","withWString","value","stringToUTF16","withFloatArray","arr","bytes","setValue","openDocumentUrl","file","mode","password","requestOptions","url","task","create","fetchFullAndOpen","wait","doc","err","reason","error","code","PdfErrorCode","Unknown","String","checkRangeSupport","headResponse","fetch","method","headers","credentials","fileLength","supportsRanges","parseInt","content","testResponse","Range","status","e","response","ok","statusText","arrayBuf","pdfFile","openDocumentBuffer","openDocumentWithRangeRequest","knownFileLength","retrieveFileLength","openDocumentFromLoader","callback","offset","xhr","XMLHttpRequest","open","overrideMimeType","setRequestHeader","forEach","withCredentials","send","convertResponseToUint8Array","responseText","resp","lenStr","text","array","Uint8Array","HEAPU8","FPDF_LoadMemDocument","lastError","FPDF_GetLastError","FPDF_GetPageCount","pages","sizePtr","FPDF_GetPageSizeByIndexF","rotation","EPDF_GetPageRotationByIndex","page","pdfDoc","fileLoader","callbackPtr","addFunction","_pThis","pBuf","fileAccessPtr","FPDF_LoadCustomDocument","getMetadata","DocNotOpen","creationRaw","readMetaText","modRaw","metadata","title","author","subject","keywords","producer","creator","creationDate","pdfDateToDate","modificationDate","trapped","getMetaTrapped","custom","readAllMeta","setMetadata","meta","strMap","field","v","s","setMetaText","writeDate","d","raw","dateToPdfDate","setMetaTrapped","getDocPermissions","permissions","FPDF_GetDocPermissions","getDocUserPermissions","FPDF_GetDocUserPermissions","getSignatures","signatures","count","FPDF_GetSignatureCount","signatureObjPtr","FPDF_GetSignatureObject","contents","FPDFSignatureObj_GetContents","byteRange","FPDFSignatureObj_GetByteRange","subFilter","FPDFSignatureObj_GetSubFilter","bufferLength","FPDFSignatureObj_GetReason","UTF16ToString","time","FPDFSignatureObj_GetTime","UTF8ToString","docMDP","FPDFSignatureObj_GetDocMDPPermission","getBookmarks","bookmarks","readPdfBookmarks","setBookmarks","list","EPDFBookmark_Clear","build","parentPtr","items","item","bmPtr","wptr","EPDFBookmark_AppendChild","target","applyBookmarkTarget","_a","children","deleteBookmarks","renderPage","rect","origin","x","y","renderRectEncoded","renderPageRect","getAllAnnotations","cancelled","ignore","out","processChunk","startIdx","endIdx","Math","min","annots","readPageAnnotationsRaw","progress","annotations","readAllAnnotations","annotationsByPage","pageAnnotations","readPageAnnotations","getPageAnnotations","createPageAnnotation","annotation","context","pageCtx","annotationPtr","EPDFPage_CreateAnnot","CantCreateAnnot","isUuidV4","uuidV4","setAnnotString","CantSetAnnotString","setPageAnnoRect","CantSetAnnotRect","isSucceed","PdfAnnotationSubtype","INK","addInkStroke","STAMP","addStampContent","TEXT","addTextContent","FREETEXT","addFreeTextContent","LINE","addLineContent","POLYLINE","POLYGON","addPolyContent","CIRCLE","SQUARE","addShapeContent","UNDERLINE","STRIKEOUT","SQUIGGLY","HIGHLIGHT","addTextMarkupContent","blendMode","EPDFAnnot_GenerateAppearanceWithBlend","EPDFAnnot_GenerateAppearance","FPDFPage_GenerateContent","FPDFPage_RemoveAnnot","CantSetAnnotContent","updatePageAnnotation","getAnnotationByName","NotFound","FPDFAnnot_RemoveInkList","removePageAnnotation","result","removeAnnotationByName","getPageTextRects","textRects","readPageTextRects","renderThumbnail","scaleFactor","rest","max","getAttachments","attachments","FPDFDoc_GetAttachmentCount","attachment","readPdfAttachment","addAttachment","params","description","mimeType","byteLength","attachmentPtr","wNamePtr","FPDFDoc_AddAttachment","wDescriptionPtr","EPDFAttachment_SetDescription","EPDFAttachment_SetSubtype","u8","len","contentPtr","FPDFAttachment_SetFile","removeAttachment","FPDFDoc_DeleteAttachment","readAttachmentContent","FPDFDoc_GetAttachment","FPDFAttachment_GetFile","CantReadAttachmentSize","CantReadAttachmentContent","setFormFieldValue","formFillInfoPtr","FORM_SetFocusedAnnot","CantFocusAnnot","kind","FORM_SelectAllText","FORM_ForceToKillFocus","CantSelectText","textPtr","FORM_ReplaceSelection","FORM_SetIndexSelected","isSelected","CantSelectOption","kReturn","FORM_OnChar","CantCheckField","flattenPage","flag","PdfPageFlattenFlag","Display","FPDFPage_Flatten","extractPages","pageIndexes","newDocPtr","FPDF_CreateNewDocument","CantCreateNewDoc","pageIndexesPtr","FPDF_ImportPagesByIndex","CantImportPages","saveDocument","extractText","strings","charCount","FPDFText_CountChars","FPDFText_GetText","join","getTextSlices","slices","byPage","pageIndex","slice","pos","bufPtr","charIndex","stripPdfUnwantedMarkers","merge","files","fileIds","map","ptrs","reverse","FPDF_ImportPages","random","mergePages","mergeConfigs","configIds","pageIndices","validPageIndices","filter","pageString","saveAsCopy","modified","setAnnotationDate","created","inReplyToId","setInReplyToId","setAnnotationIcon","icon","PdfAnnotationIcon","Comment","setAnnotationFlags","flags","state","stateModel","setBorderStyle","PdfAnnotationBorderStyle","SOLID","setAnnotationOpacity","opacity","setAnnotationTextAlignment","textAlign","setAnnotationVerticalAlignment","verticalAlign","setAnnotationDefaultAppearance","fontFamily","fontSize","fontColor","intent","setAnnotIntent","backgroundColor","setAnnotationColor","PdfAnnotationColorType","Color","EPDFAnnot_ClearColor","strokeWidth","setInkList","inkList","color","setLinePoints","linePoints","start","end","setLineEndings","lineEndings","PdfAnnotationLineEnding","None","_b","strokeStyle","setBorderDashPattern","strokeDashArray","InteriorColor","strokeColor","setPdfAnnoVertices","vertices","setAnnotCustom","syncQuadPointsAnno","segmentRects","FPDFAnnot_GetObjectCount","FPDFAnnot_RemoveObject","addImageObject","EPDFAnnot_UpdateAppearanceToRect","PdfStampFit","Cover","pixelCount","bitmapBufferPtr","red","green","blue","alpha","bitmapPtr","FPDFBitmap_CreateEx","imageObjectPtr","FPDFPageObj_NewImageObj","FPDFBitmap_Destroy","FPDFImageObj_SetBitmap","FPDFPageObj_Destroy","matrixPtr","FPDFPageObj_SetMatrix","pagePos","convertDevicePointToPagePoint","FPDFPageObj_Transform","FPDFAnnot_AppendObject","writerPtr","PDFiumExt_OpenFileWriter","PDFiumExt_SaveAsCopy","PDFiumExt_GetFileWriterSize","dataPtr","PDFiumExt_GetFileWriterData","PDFiumExt_CloseFileWriter","readCatalogLanguage","byteLen","EPDFCatalog_GetLanguage","EPDF_HasMetaText","FPDF_GetMetaText","EPDF_SetMetaText","Number","EPDF_GetMetaTrapped","PdfTrappedStatus","NotSet","True","False","toSet","EPDF_SetMetaTrapped","getMetaKeyCount","customOnly","EPDF_GetMetaKeyCount","getMetaKeyName","EPDF_GetMetaKeyName","buflen","n","rootBookmarkPtr","bookmarkPtr","FPDFBookmark_GetFirstChild","bookmark","readPdfBookmark","FPDFBookmark_GetNextSibling","FPDFBookmark_GetTitle","readPdfBookmarkTarget","FPDFBookmark_GetAction","FPDFBookmark_GetDest","rectsCount","FPDFText_CountRects","topPtr","leftPtr","rightPtr","bottomPtr","FPDFText_GetRect","left","top","right","bottom","deviceXPtr","deviceYPtr","FPDF_PageToDevice","ceil","abs","utf16Length","FPDFText_GetBoundedText","bytesCount","textBuffer","FPDFText_GetCharIndexAtPos","FPDFText_GetFontSize","FPDFText_GetFontInfo","textBufferPtr","flagsPtr","textRect","font","family","getPageGeometry","label","glyphCount","glyphs","g","readGlyphInfo","runs","buildRunsFromGlyphs","current","curObjPtr","bounds","objPtr","FPDFText_GetTextObject","charStart","minX","minY","maxX","maxY","isEmpty","isSpace","dx1Ptr","dy1Ptr","dx2Ptr","dy2Ptr","rectPtr","FPDFText_GetLooseCharBox","p","x1","y1","x2","y2","FPDFText_GetUnicode","getPageGlyphs","total","readCharBox","FPDFText_GetCharBox","annotationCount","FPDFPage_GetAnnotCount","anno","readPageAnnotation","EPDFPage_GetAnnotCountRaw","EPDFPage_GetAnnotRaw","getAnnotString","subType","FPDFAnnot_GetSubtype","readPdfTextAnno","readPdfFreeTextAnno","LINK","readPdfLinkAnno","WIDGET","readPdfWidgetAnno","FILEATTACHMENT","readPdfFileAttachmentAnno","readPdfInkAnno","readPdfPolygonAnno","readPdfPolylineAnno","readPdfLineAnno","readPdfHighlightAnno","readPdfStampAnno","readPdfSquareAnno","readPdfCircleAnno","readPdfUnderlineAnno","readPdfSquigglyAnno","readPdfStrikeOutAnno","CARET","readPdfCaretAnno","readPdfAnno","readAnnotationColor","colorType","rPtr","gPtr","bPtr","colour","EPDFAnnot_GetColor","getAnnotationColor","annotationColor","pdfColorToWebColor","webColor","pdfColor","webColorToPdfColor","EPDFAnnot_SetColor","getAnnotationOpacity","opacityPtr","EPDFAnnot_GetOpacity","pdfAlphaToWebOpacity","pdfOpacity","webOpacityToPdfAlpha","EPDFAnnot_SetOpacity","getAnnotationTextAlignment","EPDFAnnot_GetTextAlignment","alignment","EPDFAnnot_SetTextAlignment","getAnnotationVerticalAlignment","EPDFAnnot_GetVerticalAlignment","EPDFAnnot_SetVerticalAlignment","getAnnotationDefaultAppearance","fontPtr","EPDFAnnot_GetDefaultAppearance","EPDFAnnot_SetDefaultAppearance","getBorderStyle","widthPtr","style","UNKNOWN","EPDFAnnot_GetBorderStyle","EPDFAnnot_SetBorderStyle","getAnnotationIcon","EPDFAnnot_GetIcon","EPDFAnnot_SetIcon","getBorderEffect","intensityPtr","EPDFAnnot_GetBorderEffect","intensity","getRectangleDifferences","lPtr","tPtr","EPDFAnnot_GetRectangleDifferences","getAnnotationDate","date","getAttachmentDate","getAttachmentString","setAttachmentDate","setAttachmentString","getBorderDashPattern","EPDFAnnot_GetBorderDashPatternCount","pattern","arrPtr","okNative","EPDFAnnot_GetBorderDashPattern","EPDFAnnot_SetBorderDashPattern","clean","isFinite","getLineEndings","startPtr","endPtr","EPDFAnnot_GetLineEndings","EPDFAnnot_SetLineEndings","getLinePoints","FPDFAnnot_GetLine","sx","sy","ex","ey","convertPagePointToDevicePoint","p1","p2","buf","EPDFAnnot_SetLine","getQuadPointsAnno","quadCount","FPDFAnnot_CountAttachmentPoints","quads","qi","quadPtr","FPDFAnnot_GetAttachmentPoints","xs","ys","base","p3","p4","quadToRect","rects","writeQuad","r","q","rectToQuad","FPDFAnnot_SetAttachmentPoints","FPDFAnnot_AppendAttachmentPoints","redactTextInRects","recurseForms","drawBlackBoxes","_c","_d","allocFSQuadsBufferFromRects","EPDFText_RedactInQuads","getInkList","pathCount","FPDFAnnot_GetInkListCount","points","FPDFAnnot_GetInkListPath","j","px","py","stroke","pDev","pPage","idx","FPDFAnnot_AddInkStroke","getAnnotCustom","annoRect","readPageAnnoRect","convertPageRectToDeviceRect","getInReplyToId","getAnnotationFlags","defaultStyle","da","richContent","getAnnotRichContent","PdfStandardFont","linkPtr","FPDFAnnot_GetLink","readPdfLinkAnnoTarget","FPDFLink_GetAction","FPDFLink_GetDest","pageRect","readPdfWidgetAnnoField","EPDFAnnot_GetBlendMode","getAnnotIntent","readPdfAnnoVertices","interiorColor","DASHED","first","last","pop","readPdfPageObject","pageObjectPtr","FPDFPageObj_GetType","PdfPageObjectType","PATH","readPathObject","IMAGE","readImageObject","FORM","readFormObject","pathObjectPtr","segmentCount","FPDFPath_CountSegments","FPDFPageObj_GetBounds","segments","segment","readPdfSegment","matrix","readPdfPageObjectTransformMatrix","annotationObjectPtr","segmentIndex","segmentPtr","FPDFPath_GetPathSegment","segmentType","FPDFPathSegment_GetType","isClosed","FPDFPathSegment_GetClose","pointXPtr","pointYPtr","FPDFPathSegment_GetPoint","pointX","pointY","point","FPDFImageObj_GetBitmap","FPDFBitmap_GetBuffer","bitmapWidth","FPDFBitmap_GetWidth","bitmapHeight","FPDFBitmap_GetHeight","format","FPDFBitmap_GetFormat","Uint8ClampedArray","formObjectPtr","objectCount","FPDFFormObj_CountObjects","objects","FPDFFormObj_GetObject","pageObj","FPDFPageObj_GetMatrix","a","b","f","readStampAnnotationContents","FPDFAnnot_GetObject","getStrokeWidth","hPtr","vPtr","wPtr","FPDFAnnot_GetBorder","rawFlags","FPDFAnnot_GetFlags","flagsToNames","namesToFlags","FPDFAnnot_SetFlags","FPDFAnnot_GetLinkedAnnot","EPDFAnnot_SetLinkedAnnot","FPDFAnnot_GetStringValue","FPDFAttachment_GetStringValue","getAttachmentNumber","outPtr","EPDFAttachment_GetIntegerValue","JSON","parse","console","jsonString","stringify","EPDFAnnot_GetIntent","EPDFAnnot_SetIntent","EPDFAnnot_GetRichContent","EPDFPage_GetAnnotByName","EPDFPage_RemoveAnnotByName","wValPtr","FPDFAnnot_SetStringValue","FPDFAttachment_SetStringValue","FPDFAnnot_GetVertices","pointsPtr","pagePt","EPDFAnnot_SetVertices","getActionPtr","getDestinationPtr","actionPtr","action","readPdfAction","destinationPtr","destination","readPdfDestination","FPDFAnnot_GetFormFieldFlags","FPDFAnnot_GetFormFieldType","FPDFAnnot_GetFormFieldName","alternateName","FPDFAnnot_GetFormFieldAlternateName","FPDFAnnot_GetFormFieldValue","PDF_FORM_FIELD_TYPE","COMBOBOX","LISTBOX","FPDFAnnot_GetOptionCount","FPDFAnnot_GetOptionLabel","FPDFAnnot_IsOptionSelected","isChecked","exportValue","CHECKBOX","RADIOBUTTON","FPDFAnnot_IsChecked","FPDFAnnot_GetFormFieldExportValue","renderPageAnnotation","Rotation","Degree0","dpr","AppearanceMode","Normal","imageQuality","Task","finalScale","toIntRect","devRect","transformRect","wDev","hDev","stride","heapPtr","FPDFBitmap_FillRect","M","buildUserToDeviceMatrix","mPtr","Float32Array","HEAPF32","EPDF_RenderAnnotBitmap","rgba","subarray","then","catch","blob","encodeViaWasm","wasmError","finally","opts","blobFrom","mime","copy","Blob","outPtrPtr","EPDF_PNG_EncodeRGBA","baseW","baseH","swap","round","withForms","clipPtr","withAnnotations","FPDF_RenderPageBitmapWithMatrix","formParams","pageSize","rectLeft","rectBottom","rectRight","rectTop","pageWidth","pageHeight","scaleX","hypot","scaleY","formsWidth","formsHeight","startX","startY","Degree90","Degree180","Degree270","computeFormDrawParams","FPDF_FFLDraw","heapBuf","info","createLocalDestPtr","dest","zoom","PdfZoomMode","XYZ","EPDFDest_CreateXYZ","viewEnum","FitPage","FitHorizontal","FitVertical","FitRectangle","EPDFDest_CreateView","destPtr","EPDFBookmark_SetDest","PdfActionType","Goto","actPtr","EPDFAction_CreateGoTo","EPDFBookmark_SetAction","URI","EPDFAction_CreateURI","uri","LaunchAppOrOpenFile","path","EPDFAction_CreateLaunch","RemoteGoto","Unsupported","FPDFAction_GetType","FPDFAction_GetDest","FPDFAction_GetURIPath","FPDFAction_GetFilePath","FPDFDest_GetDestPageIndex","paramsCountPtr","paramsPtr","maxParmamsCount","zoomMode","FPDFDest_GetView","paramsCount","paramPtr","hasXPtr","hasYPtr","hasZPtr","xPtr","yPtr","zPtr","FPDFDest_GetLocationInPage","hasX","hasY","hasZ","FPDFAttachment_GetName","EPDFAttachment_GetDescription","FPDFAttachment_GetSubtype","checksum","position","DW","DH","readPageAnnoAppearanceStreams","normal","readPageAnnoAppearanceStream","rollover","Rollover","down","Down","FPDFAnnot_GetAP","ap","setPageAnnoAppearanceStream","apContent","FPDFAnnot_SetAP","x0d","floor","y0d","x1d","y1d","TL","TR","BR","BL","FPDFAnnot_SetRect","pageRectPtr","FPDFAnnot_GetRect","getHighlightRects","startIndex","highlightRects","l","t","searchAllPages","keyword","results","keywordPtr","reduce","acc","MatchFlag","allResults","pageResults","searchAllInPage","buildContext","fullText","windowChars","WORD_BREAK","test","collected","findWordStart","findWordEnd","before","replace","trimStart","match","after","trimEnd","tidy","truncatedLeft","truncatedRight","searchHandle","FPDFText_FindStart","FPDFText_FindNext","FPDFText_GetSchResultIndex","FPDFText_GetSchCount","FPDFText_FindClose","preparePrintDocument","includeAnnotations","pageRange","printDocPtr","sanitizedPageRange","sanitizePageRange","removalResult","removeAnnotationsFromPrintDocument","success","annotationsRemoved","pagesProcessed","totalAnnotationsRemoved","annotCount","annotationsRemovedFromPage","annotIndex","EPDFPage_RemoveAnnotRaw","trim","sanitized","parts","split","part","trimmed","includes","startStr","endStr","isNaN","validStart","validEnd","pageNum","validPageNum","sort","optimized","rangeStart","rangeEnd","toString","_scriptName","createPdfium","document","require","pathToFileURL","__filename","href","_documentCurrentScript","tagName","toUpperCase","src","URL","baseURI","async","moduleArg","moduleRtn","readyPromiseResolve","readyPromiseReject","Module","readyPromise","prop","getOwnPropertyDescriptor","defineProperty","abort","ENVIRONMENT_IS_WEB","window","ENVIRONMENT_IS_WORKER","importScripts","process","versions","node","readAsync","readBinary","ENVIRONMENT_IS_SHELL","moduleOverrides","thisProgram","scriptDirectory","readbuffer","read","assert","globalThis","print","log","printErr","self","location","currentScript","startsWith","substr","lastIndexOf","responseType","isFileURI","bind","legacyModuleProp","wasmMemory","wasmBinary","WebAssembly","HEAP16","HEAPU16","HEAP32","HEAPU32","HEAPF64","ABORT","condition","updateMemoryViews","Int8Array","Int16Array","Uint16Array","Int32Array","Uint32Array","Float64Array","checkStackCookie","_emscripten_stack_get_end","cookie1","cookie2","ptrToString","prototype","__ATPRERUN__","__ATINIT__","__ATPOSTRUN__","runtimeInitialized","addOnPreRun","cb","unshift","addOnPostRun","imul","fround","clz32","trunc","runDependencies","runDependencyWatcher","dependenciesFulfilled","runDependencyTracking","getUniqueRunDependency","orig","addRunDependency","call","shown","dep","removeRunDependency","what","RuntimeError","wasmBinaryFile","tempDouble","tempI64","isDataURI","filename","createExportWrapper","nargs","args","findWasmBinary","getBinarySync","instantiateArrayBuffer","binaryFile","imports","receiver","getBinaryPromise","binary","instantiate","h16","h8","newName","incoming","configurable","isExportedByForceFilesystem","hookGlobalSymbolAccess","sym","func","missingGlobal","msg","warnOnce","unexportedRuntimeSymbol","callRuntimeCallbacks","callbacks","padStart","stackRestore","val","__emscripten_stack_restore","stackSave","_emscripten_stack_get_current","UTF8Decoder","TextDecoder","UTF8ArrayToString","heapOrArray","maxBytesToRead","NaN","decode","u0","u1","u2","fromCharCode","ch","syscallGetVarargI","SYSCALLS","varargs","ret","syscallGetVarargP","isAbs","charAt","splitPath","exec","normalizeArray","allowAboveRoot","up","normalize","isAbsolute","trailingSlash","dirname","root","dir","basename","lastSlash","paths","join2","randomFill","crypto","getRandomValues","initRandomFill","PATH_FS","resolvedPath","resolvedAbsolute","FS","cwd","TypeError","relative","to","fromParts","toParts","samePartsLength","outputParts","concat","FS_stdin_getChar_buffer","lengthBytesUTF8","stringToUTF8Array","heap","outIdx","maxBytesToWrite","u","intArrayFromString","stringy","dontAddNull","u8array","numBytesWritten","wasmTable","functionsInTableMap","TTY","ttys","init","shutdown","register","dev","ops","input","output","registerDevice","stream_ops","stream","tty","rdev","ErrnoError","seekable","close","fsync","get_char","bytesRead","write","put_char","default_tty_ops","prompt","readline","shift","FS_stdin_getChar","ioctl_tcgets","c_iflag","c_oflag","c_cflag","c_lflag","c_cc","ioctl_tcsets","optional_actions","ioctl_tiocgwinsz","default_tty1_ops","alignMemory","mmapAlloc","_emscripten_builtin_memalign","address","fill","zeroMemory","MEMFS","ops_table","mount","createNode","parent","isBlkdev","isFIFO","getattr","node_ops","setattr","lookup","mknod","rename","unlink","rmdir","readdir","symlink","llseek","allocate","mmap","msync","link","readlink","chrdev","chrdev_stream_ops","isDir","isFile","usedBytes","isLink","isChrdev","getFileDataAsTypedArray","expandFileStorage","newCapacity","prevCapacity","oldContents","resizeFileStorage","newSize","attr","ino","nlink","uid","gid","atime","mtime","ctime","blksize","blocks","genericErrors","old_node","new_dir","new_name","new_node","lookupNode","keys","newname","oldpath","canOwn","whence","prot","allocated","byteOffset","mmapFlags","preloadPlugins","FS_getMode","canRead","canWrite","ERRNO_CODES","EPERM","ENOENT","ESRCH","EINTR","EIO","ENXIO","E2BIG","ENOEXEC","EBADF","ECHILD","EAGAIN","EWOULDBLOCK","ENOMEM","EACCES","EFAULT","ENOTBLK","EBUSY","EEXIST","EXDEV","ENODEV","ENOTDIR","EISDIR","EINVAL","ENFILE","EMFILE","ENOTTY","ETXTBSY","EFBIG","ENOSPC","ESPIPE","EROFS","EMLINK","EPIPE","EDOM","ERANGE","ENOMSG","EIDRM","ECHRNG","EL2NSYNC","EL3HLT","EL3RST","ELNRNG","EUNATCH","ENOCSI","EL2HLT","EDEADLK","ENOLCK","EBADE","EBADR","EXFULL","ENOANO","EBADRQC","EBADSLT","EDEADLOCK","EBFONT","ENOSTR","ENODATA","ETIME","ENOSR","ENONET","ENOPKG","EREMOTE","ENOLINK","EADV","ESRMNT","ECOMM","EPROTO","EMULTIHOP","EDOTDOT","EBADMSG","ENOTUNIQ","EBADFD","EREMCHG","ELIBACC","ELIBBAD","ELIBSCN","ELIBMAX","ELIBEXEC","ENOSYS","ENOTEMPTY","ENAMETOOLONG","ELOOP","EOPNOTSUPP","EPFNOSUPPORT","ECONNRESET","ENOBUFS","EAFNOSUPPORT","EPROTOTYPE","ENOTSOCK","ENOPROTOOPT","ESHUTDOWN","ECONNREFUSED","EADDRINUSE","ECONNABORTED","ENETUNREACH","ENETDOWN","ETIMEDOUT","EHOSTDOWN","EHOSTUNREACH","EINPROGRESS","EALREADY","EDESTADDRREQ","EMSGSIZE","EPROTONOSUPPORT","ESOCKTNOSUPPORT","EADDRNOTAVAIL","ENETRESET","EISCONN","ENOTCONN","ETOOMANYREFS","EUSERS","EDQUOT","ESTALE","ENOTSUP","ENOMEDIUM","EILSEQ","EOVERFLOW","ECANCELED","ENOTRECOVERABLE","EOWNERDEAD","ESTRPIPE","mounts","devices","streams","nextInode","nameTable","currentPath","initialized","ignorePermissions","errno","_strerror","strError","filesystems","syncFSRequests","readFiles","FSStream","shared","object","isRead","isWrite","isAppend","FSNode","mounted","readMode","writeMode","isFolder","isDevice","lookupPath","follow_mount","recurse_count","current_path","islast","isMountpoint","follow","getPath","isRoot","mountpoint","hashName","parentid","hash","hashAddNode","name_next","hashRemoveNode","errCode","mayLookup","nodeName","destroyNode","isSocket","flagsToPermissionString","perms","nodePermissions","mayCreate","mayDelete","isdir","mayOpen","MAX_OPEN_FDS","nextfd","fd","getStreamChecked","getStream","createStream","closeStream","dupStream","origStream","dup","device","getDevice","major","minor","makedev","ma","mi","getMounts","check","m","syncfs","populate","completed","doCallback","done","errored","pseudo","mountRoot","unmount","next","mkdir","mkdirTree","dirs","mkdev","newpath","old_path","new_path","old_dir","old_dirname","new_dirname","old_name","stat","dontFollow","lstat","chmod","lchmod","fchmod","chown","lchown","fchown","truncate","ftruncate","utime","w","FS_modeStringToFlags","ungotten","getdents","seeking","bytesWritten","ioctl","cmd","arg","readFile","encoding","writeFile","actualNumBytes","isView","chdir","createDefaultDirectories","createDefaultDevices","randomBuffer","randomLeft","randomByte","createDevice","createSpecialDirectories","proc_self","createStandardStreams","stdin","stdout","stderr","staticInit","quit","_fflush","findObject","dontResolveLastLink","analyzePath","exists","parentExists","parentPath","parentObject","createPath","createFile","properties","createDataFile","forceLoadFile","obj","createLazyFile","LazyUint8Array","lengthKnown","chunks","chunkOffset","chunkSize","chunkNum","getter","setDataGetter","cacheLength","header","datalength","getResponseHeader","hasByteServing","usesGzip","lazyArray","doXHR","_length","_chunkSize","defineProperties","writeChunks","absolutePath","createFolder","createLink","joinPath","standardizePath","DEFAULT_POLLMASK","calculateAt","dirfd","allowEmpty","getStreamFromFD","doStat","getTime","doMsync","addr","getStr","convertI32PairToI53Checked","lo","hi","stringToUTF8","MONTH_DAYS_LEAP_CUMULATIVE","MONTH_DAYS_REGULAR_CUMULATIVE","growMemory","grow","ENV","getEnvStrings","env","USER","LOGNAME","PWD","HOME","LANG","navigator","languages","_","wasmTableMirror","getWasmTableEntry","funcPtr","UTF16Decoder","uleb128Encode","convertJsFunctionToWasm","sig","Function","typeNames","parameters","sigToWasmTypes","typeSectionBody","sigRet","sigParam","typeCodes","generateFuncType","module","Instance","exports","getFunctionAddress","WeakMap","updateTableMap","freeTableIndexes","setWasmTableEntry","stackAlloc","sz","__emscripten_stack_alloc","ccall","ident","returnType","argTypes","toC","string","stringToUTF8OnStack","getCFunc","cArgs","converter","Boolean","convertReturnValue","createPreloadedFile","onload","onerror","dontCreateFile","preFinish","fullname","processData","byteArray","finish","fileData","FS_createDataFile","Browser","handled","plugin","FS_handledByPreloadPlugin","asyncLoad","wasmImports","__assert_fail","line","__syscall_fcntl64","__syscall_fstat64","__syscall_ftruncate64","length_low","length_high","__syscall_getdents64","dirp","struct_size","child","__syscall_ioctl","op","termios","argp","winsize","__syscall_lstat64","__syscall_newfstatat","nofollow","__syscall_openat","__syscall_rmdir","__syscall_stat64","__syscall_unlinkat","_abort_js","_emscripten_memcpy_js","num","copyWithin","_emscripten_throw_longjmp","Infinity","_gmtime_js","time_low","time_high","tmPtr","getUTCSeconds","getUTCMinutes","getUTCHours","getUTCDate","getUTCMonth","getUTCFullYear","getUTCDay","UTC","yday","_localtime_js","getSeconds","getMinutes","getHours","getDate","getMonth","getFullYear","getDay","year","ydayFromDate","getTimezoneOffset","summerOffset","winterOffset","dst","_tzset_js","timezone","daylight","std_name","dst_name","currentYear","winter","summer","stdTimezoneOffset","extractZone","timezoneOffset","sign","absOffset","winterName","summerName","emscripten_date_now","emscripten_resize_heap","requestedSize","oldSize","maxHeapSize","cutDown","overGrownHeapSize","environ_get","__environ","environ_buf","bufSize","stringToAscii","environ_sizes_get","penviron_count","penviron_buf_size","fd_close","fd_read","iov","iovcnt","pnum","curr","doReadv","fd_seek","offset_low","offset_high","newOffset","fd_sync","fd_write","doWritev","invoke_ii","a1","sp","_setThrew","invoke_iii","a2","invoke_iiii","a3","invoke_iiiii","a4","invoke_v","invoke_vii","invoke_viii","invoke_viiii","invoke_viiiiiiiii","a5","a6","a7","a8","a9","wasi_snapshot_preview1","receiveInstance","instance","trueModule","instantiateStreaming","createWasm","calledRun","calledPrerun","_emscripten_stack_init","a0","stackCheckInit","run","preRuns","doRun","postRuns","postRun","rtn","RangeError","getEmptyTableSlot","wrapped","endsWith","maxIdx","codeUnit","numCharsToWrite","librarySymbol","runCaller","functions","EPDFAction_CreateGoToNamed","EPDFAction_CreateRemoteGoToByName","EPDFAction_CreateRemoteGoToDest","EPDFBookmark_ClearTarget","EPDFBookmark_Create","EPDFBookmark_Delete","EPDFBookmark_InsertAfter","EPDFBookmark_SetTitle","EPDFDest_CreateRemoteView","EPDFDest_CreateRemoteXYZ","EPDFNamedDest_Remove","EPDFNamedDest_SetDest","EPDFText_RedactInRect","FORM_CanRedo","FORM_CanUndo","FORM_DoDocumentAAction","FORM_DoDocumentJSAction","FORM_DoDocumentOpenAction","FORM_DoPageAAction","FORM_GetFocusedAnnot","FORM_GetFocusedText","FORM_GetSelectedText","FORM_IsIndexSelected","FORM_OnFocus","FORM_OnKeyDown","FORM_OnKeyUp","FORM_OnLButtonDoubleClick","FORM_OnLButtonDown","FORM_OnLButtonUp","FORM_OnMouseMove","FORM_OnMouseWheel","FORM_OnRButtonDown","FORM_OnRButtonUp","FORM_Redo","FORM_ReplaceAndKeepSelection","FORM_Undo","FPDF_AddInstalledFont","FPDF_CloseXObject","FPDF_CopyViewerPreferences","FPDF_CountNamedDests","FPDF_CreateClipPath","FPDF_DestroyClipPath","FPDF_DeviceToPage","FPDF_DocumentHasValidCrossReferenceTable","FPDF_FreeDefaultSystemFontInfo","FPDF_GetDefaultSystemFontInfo","FPDF_GetDefaultTTFMap","FPDF_GetDefaultTTFMapCount","FPDF_GetDefaultTTFMapEntry","FPDF_GetFileIdentifier","FPDF_GetFileVersion","FPDF_GetFormType","FPDF_GetNamedDest","FPDF_GetNamedDestByName","FPDF_GetPageAAction","FPDF_GetPageBoundingBox","FPDF_GetPageHeight","FPDF_GetPageHeightF","FPDF_GetPageLabel","FPDF_GetPageSizeByIndex","FPDF_GetPageWidth","FPDF_GetPageWidthF","FPDF_GetSecurityHandlerRevision","FPDF_GetTrailerEnds","FPDF_GetXFAPacketContent","FPDF_GetXFAPacketCount","FPDF_GetXFAPacketName","FPDF_ImportNPagesToOne","FPDF_InitLibrary","FPDF_InitLibraryWithConfig","FPDF_LoadDocument","FPDF_LoadMemDocument64","FPDF_LoadXFA","FPDF_MovePages","FPDF_NewFormObjectFromXObject","FPDF_NewXObjectFromPage","FPDF_RemoveFormFieldHighlight","FPDF_RenderPage_Close","FPDF_RenderPage_Continue","FPDF_RenderPageBitmap","FPDF_RenderPageBitmap_Start","FPDF_RenderPageBitmapWithColorScheme_Start","FPDF_SaveAsCopy","FPDF_SaveWithVersion","FPDF_SetFormFieldHighlightAlpha","FPDF_SetFormFieldHighlightColor","FPDF_SetSandBoxPolicy","FPDF_SetSystemFontInfo","FPDF_StructElement_Attr_CountChildren","FPDF_StructElement_Attr_GetBlobValue","FPDF_StructElement_Attr_GetBooleanValue","FPDF_StructElement_Attr_GetChildAtIndex","FPDF_StructElement_Attr_GetCount","FPDF_StructElement_Attr_GetName","FPDF_StructElement_Attr_GetNumberValue","FPDF_StructElement_Attr_GetStringValue","FPDF_StructElement_Attr_GetType","FPDF_StructElement_Attr_GetValue","FPDF_StructElement_CountChildren","FPDF_StructElement_GetActualText","FPDF_StructElement_GetAltText","FPDF_StructElement_GetAttributeAtIndex","FPDF_StructElement_GetAttributeCount","FPDF_StructElement_GetChildAtIndex","FPDF_StructElement_GetChildMarkedContentID","FPDF_StructElement_GetID","FPDF_StructElement_GetLang","FPDF_StructElement_GetMarkedContentID","FPDF_StructElement_GetMarkedContentIdAtIndex","FPDF_StructElement_GetMarkedContentIdCount","FPDF_StructElement_GetObjType","FPDF_StructElement_GetParent","FPDF_StructElement_GetStringAttribute","FPDF_StructElement_GetTitle","FPDF_StructElement_GetType","FPDF_StructTree_Close","FPDF_StructTree_CountChildren","FPDF_StructTree_GetChildAtIndex","FPDF_StructTree_GetForPage","FPDF_VIEWERREF_GetDuplex","FPDF_VIEWERREF_GetName","FPDF_VIEWERREF_GetNumCopies","FPDF_VIEWERREF_GetPrintPageRange","FPDF_VIEWERREF_GetPrintPageRangeCount","FPDF_VIEWERREF_GetPrintPageRangeElement","FPDF_VIEWERREF_GetPrintScaling","FPDFAnnot_AddFileAttachment","FPDFAnnot_GetColor","FPDFAnnot_GetFileAttachment","FPDFAnnot_GetFocusableSubtypes","FPDFAnnot_GetFocusableSubtypesCount","FPDFAnnot_GetFontColor","FPDFAnnot_GetFontSize","FPDFAnnot_GetFormAdditionalActionJavaScript","FPDFAnnot_GetFormControlCount","FPDFAnnot_GetFormControlIndex","FPDFAnnot_GetFormFieldAtPoint","FPDFAnnot_GetNumberValue","FPDFAnnot_GetValueType","FPDFAnnot_HasAttachmentPoints","FPDFAnnot_HasKey","FPDFAnnot_IsObjectSupportedSubtype","FPDFAnnot_IsSupportedSubtype","FPDFAnnot_SetBorder","FPDFAnnot_SetColor","FPDFAnnot_SetFocusableSubtypes","FPDFAnnot_SetFontColor","FPDFAnnot_SetFormFieldFlags","FPDFAnnot_SetURI","FPDFAnnot_UpdateObject","FPDFAttachment_GetValueType","FPDFAttachment_HasKey","FPDFAvail_Create","FPDFAvail_Destroy","FPDFAvail_GetDocument","FPDFAvail_GetFirstPageNum","FPDFAvail_IsDocAvail","FPDFAvail_IsFormAvail","FPDFAvail_IsLinearized","FPDFAvail_IsPageAvail","FPDFBitmap_Create","FPDFBitmap_GetStride","FPDFBookmark_Find","FPDFBookmark_GetCount","FPDFCatalog_IsTagged","FPDFCatalog_SetLanguage","FPDFClipPath_CountPaths","FPDFClipPath_CountPathSegments","FPDFClipPath_GetPathSegment","FPDFDoc_CloseJavaScriptAction","FPDFDOC_ExitFormFillEnvironment","FPDFDoc_GetJavaScriptAction","FPDFDoc_GetJavaScriptActionCount","FPDFDoc_GetPageMode","FPDFDOC_InitFormFillEnvironment","FPDFFont_Close","FPDFFont_GetAscent","FPDFFont_GetBaseFontName","FPDFFont_GetDescent","FPDFFont_GetFamilyName","FPDFFont_GetFlags","FPDFFont_GetFontData","FPDFFont_GetGlyphPath","FPDFFont_GetGlyphWidth","FPDFFont_GetIsEmbedded","FPDFFont_GetItalicAngle","FPDFFont_GetWeight","FPDFFormObj_RemoveObject","FPDFGlyphPath_CountGlyphSegments","FPDFGlyphPath_GetGlyphPathSegment","FPDFImageObj_GetIccProfileDataDecoded","FPDFImageObj_GetImageDataDecoded","FPDFImageObj_GetImageDataRaw","FPDFImageObj_GetImageFilter","FPDFImageObj_GetImageFilterCount","FPDFImageObj_GetImageMetadata","FPDFImageObj_GetImagePixelSize","FPDFImageObj_GetRenderedBitmap","FPDFImageObj_LoadJpegFile","FPDFImageObj_LoadJpegFileInline","FPDFImageObj_SetMatrix","FPDFJavaScriptAction_GetName","FPDFJavaScriptAction_GetScript","FPDFLink_CloseWebLinks","FPDFLink_CountQuadPoints","FPDFLink_CountRects","FPDFLink_CountWebLinks","FPDFLink_Enumerate","FPDFLink_GetAnnot","FPDFLink_GetAnnotRect","FPDFLink_GetLinkAtPoint","FPDFLink_GetLinkZOrderAtPoint","FPDFLink_GetQuadPoints","FPDFLink_GetRect","FPDFLink_GetTextRange","FPDFLink_GetURL","FPDFLink_LoadWebLinks","FPDFPage_CountObjects","FPDFPage_CreateAnnot","FPDFPage_Delete","FPDFPage_FormFieldZOrderAtPoint","FPDFPage_GetAnnotIndex","FPDFPage_GetArtBox","FPDFPage_GetBleedBox","FPDFPage_GetCropBox","FPDFPage_GetDecodedThumbnailData","FPDFPage_GetMediaBox","FPDFPage_GetObject","FPDFPage_GetRawThumbnailData","FPDFPage_GetRotation","FPDFPage_GetThumbnailAsBitmap","FPDFPage_GetTrimBox","FPDFPage_HasFormFieldAtPoint","FPDFPage_HasTransparency","FPDFPage_InsertClipPath","FPDFPage_InsertObject","FPDFPage_InsertObjectAtIndex","FPDFPage_New","FPDFPage_RemoveObject","FPDFPage_SetArtBox","FPDFPage_SetBleedBox","FPDFPage_SetCropBox","FPDFPage_SetMediaBox","FPDFPage_SetRotation","FPDFPage_SetTrimBox","FPDFPage_TransformAnnots","FPDFPage_TransFormWithClip","FPDFPageObj_AddMark","FPDFPageObj_CountMarks","FPDFPageObj_CreateNewPath","FPDFPageObj_CreateNewRect","FPDFPageObj_CreateTextObj","FPDFPageObj_GetClipPath","FPDFPageObj_GetDashArray","FPDFPageObj_GetDashCount","FPDFPageObj_GetDashPhase","FPDFPageObj_GetFillColor","FPDFPageObj_GetIsActive","FPDFPageObj_GetLineCap","FPDFPageObj_GetLineJoin","FPDFPageObj_GetMark","FPDFPageObj_GetMarkedContentID","FPDFPageObj_GetRotatedBounds","FPDFPageObj_GetStrokeColor","FPDFPageObj_GetStrokeWidth","FPDFPageObj_HasTransparency","FPDFPageObj_NewTextObj","FPDFPageObj_RemoveMark","FPDFPageObj_SetBlendMode","FPDFPageObj_SetDashArray","FPDFPageObj_SetDashPhase","FPDFPageObj_SetFillColor","FPDFPageObj_SetIsActive","FPDFPageObj_SetLineCap","FPDFPageObj_SetLineJoin","FPDFPageObj_SetStrokeColor","FPDFPageObj_SetStrokeWidth","FPDFPageObj_TransformClipPath","FPDFPageObj_TransformF","FPDFPageObjMark_CountParams","FPDFPageObjMark_GetName","FPDFPageObjMark_GetParamBlobValue","FPDFPageObjMark_GetParamIntValue","FPDFPageObjMark_GetParamKey","FPDFPageObjMark_GetParamStringValue","FPDFPageObjMark_GetParamValueType","FPDFPageObjMark_RemoveParam","FPDFPageObjMark_SetBlobParam","FPDFPageObjMark_SetIntParam","FPDFPageObjMark_SetStringParam","FPDFPath_BezierTo","FPDFPath_Close","FPDFPath_GetDrawMode","FPDFPath_LineTo","FPDFPath_MoveTo","FPDFPath_SetDrawMode","FPDFText_FindPrev","FPDFText_GetCharAngle","FPDFText_GetCharIndexFromTextIndex","FPDFText_GetCharOrigin","FPDFText_GetFillColor","FPDFText_GetFontWeight","FPDFText_GetMatrix","FPDFText_GetStrokeColor","FPDFText_GetTextIndexFromCharIndex","FPDFText_HasUnicodeMapError","FPDFText_IsGenerated","FPDFText_IsHyphen","FPDFText_LoadCidType2Font","FPDFText_LoadFont","FPDFText_LoadStandardFont","FPDFText_SetCharcodes","FPDFText_SetText","FPDFTextObj_GetFont","FPDFTextObj_GetFontSize","FPDFTextObj_GetRenderedBitmap","FPDFTextObj_GetText","FPDFTextObj_GetTextRenderMode","FPDFTextObj_SetTextRenderMode","cwrap","createWrappedModule","wasmUrl"],"mappings":"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AAAC,GAAA,WAAAA,EAAAC,QAAAC,eAAAF,EAAAG,KAAA,IAAAC,IAAA,6BAAAT,SAAAU,SAAAN,KAEXO,eAAgBC,EAAY,IACjC,IAAIC,EAmBAC,EAAqBC,EAHrBC,EAASJ,EAITK,EAAe,IAAI7iC,QAAQ,CAACuB,EAAStB,KACvCyiC,EAAsBnhC,EACtBohC,EAAqB1iC,IAEvB,CACE,wBACA,uBACA,uBACA,+BACA,oBACA,uBACA,0BACA,oBACA,uBACA,yBACA,8BACA,2BACA,qCACA,mCACA,wBACA,wBACA,gCACA,yCACA,0BACA,kCACA,uCACA,6BACA,4BACA,sBACA,kCACA,qBACA,uBACA,4BACA,wBACA,qCACA,4BACA,8BACA,kCACA,kCACA,4BACA,sBACA,kCACA,qBACA,uBACA,qBACA,4BACA,4BACA,wBACA,8BACA,kCACA,yBACA,oCACA,iCACA,kCACA,iCACA,6BACA,4BACA,sBACA,4BACA,uBACA,uBACA,4BACA,0BACA,wBACA,yBACA,2BACA,6BACA,4BACA,uBACA,sBACA,wBACA,yBACA,wBACA,2BACA,6BACA,wBACA,8BACA,2BACA,0BACA,yBACA,gBACA,gBACA,0BACA,2BACA,6BACA,sBACA,yBACA,wBACA,uBACA,wBACA,wBACA,wBACA,0BACA,eACA,gBACA,kBACA,gBACA,6BACA,sBACA,oBACA,oBACA,qBACA,sBACA,oBACA,aACA,gCACA,yBACA,sBACA,wBACA,yBACA,aACA,yBACA,sBACA,kBACA,qBACA,8BACA,wBACA,uBACA,0BACA,wBACA,uBACA,qBACA,4CACA,gBACA,kCACA,iCACA,yBACA,8BACA,8BACA,0BACA,8BACA,0BACA,uBACA,oBACA,qBACA,oBACA,qBACA,2BACA,uBACA,2BACA,qBACA,sBACA,uBACA,qBACA,2BACA,4BACA,qBACA,sBACA,mCACA,0BACA,2BACA,uBACA,4BACA,0BACA,yBACA,0BACA,oBACA,2BACA,oBACA,8BACA,2BACA,qBACA,wBACA,0BACA,iBACA,gBACA,kBACA,iCACA,2BACA,qBACA,iCACA,yBACA,4BACA,yBACA,+BACA,8CACA,mCACA,mBACA,wBACA,mCACA,mCACA,yBACA,0BACA,yCACA,wCACA,2CACA,2CACA,oCACA,mCACA,0CACA,0CACA,mCACA,oCACA,oCACA,oCACA,iCACA,0CACA,wCACA,sCACA,8CACA,4BACA,8BACA,yCACA,gDACA,8CACA,iCACA,gCACA,yCACA,+BACA,8BACA,yBACA,iCACA,mCACA,8BACA,4BACA,0BACA,+BACA,oCACA,yCACA,2CACA,kCACA,sBACA,0BACA,sBACA,yBACA,+BACA,0BACA,oCACA,0BACA,mCACA,mBACA,iCACA,uBACA,sBACA,+BACA,sBACA,kCACA,uCACA,0BACA,yBACA,+CACA,iCACA,iCACA,uCACA,iCACA,qCACA,+BACA,8BACA,8BACA,+BACA,6BACA,4BACA,qBACA,qBACA,4BACA,4BACA,uBACA,4BACA,4BACA,4BACA,qBACA,4BACA,wBACA,0BACA,yBACA,iCACA,oBACA,uBACA,sCACA,8BACA,gCACA,2BACA,0BACA,mBACA,iCACA,uBACA,sBACA,sBACA,kCACA,0BACA,+BACA,qBACA,4BACA,oBACA,0BACA,0BACA,0BACA,iCACA,6BACA,+BACA,yBACA,0BACA,iCACA,oBACA,qBACA,yBACA,6BACA,wBACA,yBACA,0BACA,yBACA,qBACA,uBACA,sBACA,uBACA,wBACA,wBACA,wBACA,wBACA,uBACA,qBACA,0BACA,yBACA,wBACA,8BACA,+BACA,yBACA,wBACA,2BACA,2BACA,kCACA,+BACA,6BACA,8BACA,oBACA,yBACA,iCACA,4BACA,mCACA,yBACA,8BACA,+BACA,oCACA,uBACA,mCACA,kBACA,sBACA,4BACA,uBACA,0BACA,qBACA,wBACA,yBACA,0BACA,0BACA,2BACA,sBACA,4BACA,yBACA,4BACA,oCACA,qCACA,0BACA,yCACA,oCACA,gCACA,+BACA,oCACA,iCACA,kCACA,kCACA,6BACA,mCACA,0BACA,0BACA,gCACA,kCACA,0BACA,4BACA,uBACA,0BACA,sBACA,sBACA,qBACA,yBACA,oBACA,2BACA,iCACA,0BACA,oBACA,yBACA,mBACA,yBACA,uBACA,yBACA,wBACA,mBACA,oBACA,mCACA,4BACA,qBACA,0BACA,0BACA,sBACA,wBACA,uBACA,oCACA,wBACA,sBACA,gCACA,wBACA,iCACA,uBACA,gCACA,4BACA,2BACA,yBACA,gCACA,gBACA,wBACA,yBACA,sBACA,wBACA,uBACA,wBACA,wBACA,uBACA,4BACA,8BACA,uBACA,0BACA,6BACA,6BACA,6BACA,uBACA,yBACA,2BACA,4BACA,4BACA,4BACA,4BACA,2BACA,0BACA,2BACA,uBACA,kCACA,yBACA,gCACA,8BACA,8BACA,uBACA,+BACA,2BACA,0BACA,0BACA,4BACA,4BACA,4BACA,4BACA,2BACA,0BACA,2BACA,yBACA,8BACA,8BACA,yBACA,iCACA,0BACA,+BACA,2BACA,qCACA,oCACA,+BACA,uCACA,qCACA,+BACA,gCACA,+BACA,kCACA,qBACA,kBACA,0BACA,wBACA,2BACA,mBACA,mBACA,wBACA,4BACA,4BACA,2BACA,iCACA,gCACA,wCACA,8BACA,iCACA,4BACA,sBACA,uBACA,uBACA,sBACA,qBACA,qBACA,sBACA,2BACA,yBACA,uBACA,8BACA,sCACA,0BACA,yBACA,wBACA,wBACA,0BACA,4BACA,sBACA,oBACA,wBACA,8BACA,2BACA,oBACA,sCACA,0BACA,uBACA,+BACA,wBACA,qBACA,6BACA,qBACA,qBACA,6BACA,yBACA,oBACA,uBACA,2BACA,iCACA,uBACA,iCACA,iCACA,6BACA,+BACA,qCACA,+BACA,+BACA,kBACA,qCACA,4BACA,8BACA,wBACA,UACA,QACA,UACA,6BACA,wBACAkF,QAAS29B,IACJnpC,OAAOopC,yBAAyBF,EAAcC,IACjDnpC,OAAOqpC,eAAeH,EAAcC,EAAM,CACxChqC,IAAK,IACHmqC,EACE,mBACEH,EACA,iJAEN9pC,IAAK,IACHiqC,EACE,mBACEH,EACA,qJAUZ,IAA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CA,cACA,cACA,SACA,YACA,YACA,YACA,YACA,eACA,gBACA,gBACA,gBACA,UACA,aACA,yBACA,gBACA,eACA,UACA,kBACA,mBACA,uBACA,sBACA,mBACA,YACA,cACA,kBACA,oBACA,aACA,cACA,eACA,aACA,iBACA,SACA,SACA,SACA,eACA,mBACA,gBACA,mBACA,gBACA,gBACA,mBACA,kBACA,2BACA,yBACA,kBACA,wBACA,qBACA,6BACA,6BACA,0BACA,6BACA,iCACA,yCACA,4BACA,oCACA,oBACA,iCACA,yCACA,gCACA,wCACA,6BACA,qCACA,0BACA,mCACA,wBACA,eACA,wCACA,sBACA,iCACA,yCACA,wCACA,qBACA,gCACA,wCACA,6BACA,uBACA,+BACA,oCACA,uBACA,UACA,+BACA,uBACA,uBACA,eACA,eACA,4BACA,iBACA,yBACA,yBACA,uBACA,iBACA,sBACA,wBACA,uBACA,uBACA,sBACA,aACA,cACA,gBACA,sBACA,gBACA,oBACA,kCACA,4BACA,WACA,UACA,kBACA,mBACA,YACA,eACA,sBACA,yBACA,oBACA,sCACA,uCACA,kCACA,gCACA,wCACA,gCACA,kCACA,qBACA,gCACA,iCACA,iCACA,4BACA,0BACA,6CACA,uBACA,iCACA,+BACA,eACA,6BACA,qBACA,eACA,cACA,WACA,sBACA,qBACA,WACA,WACA,cAEoBviB,QA1lMtB,SAA8BqkC,GAC5BD,GAAuBC,EAAK,KAG1B,IAAIG,EAAM,KAAKH,mJAIX2sB,EAAgB3sB,EACf2sB,EAAc1xB,WAAW,OAC5B0xB,EAAgB,IAAM3sB,GAExBG,GAAO,8CAA8CwsB,MACjD7sB,GAA4BE,KAC9BG,GACE,4FAEJC,GAASD,KAKXE,GAAwBL,EAC1B,GAqkMwB,CACtB,MACA,cACA,YACA,eACA,YACA,eACA,mBACA,sBACA,MACA,MACA,WACA,QACA,aACA,mBACA,mBACA,6BACA,YACA,eACA,aACA,cACA,aACA,aACA,aACA,MACA,cACA,WACA,MACA,YACA,UACA,iBACA,aACA,SACA,WAC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"}