{"version":3,"file":"workhorse.cjs","sources":["../src/types.ts","../src/util/time.ts","../node_modules/eventemitter3/index.js","../src/events/emitter.ts","../src/events/eventTypes.ts","../src/events/taskHelpers.ts","../node_modules/loglevel/lib/loglevel.js","../src/util/logging.ts","../src/plugins/TaskMonitor.ts","../src/config.ts","../node_modules/proxy-target/esm/types.js","../node_modules/coincident/esm/channel.js","../node_modules/proxy-target/esm/traps.js","../node_modules/coincident/esm/bridge.js","../node_modules/coincident/esm/index.js","../node_modules/@sqlite.org/sqlite-wasm/sqlite-wasm/jswasm/sqlite3-bundler-friendly.mjs","../node_modules/@sqlite.org/sqlite-wasm/sqlite-wasm/jswasm/sqlite3-worker1-promiser.mjs","../node_modules/sqlocal/dist/lib/create-mutex.js","../node_modules/sqlocal/dist/lib/exec-on-db.js","../node_modules/sqlocal/dist/lib/parse-database-path.js","../node_modules/sqlocal/dist/lib/normalize-database-file.js","../node_modules/sqlocal/dist/processor.js","../node_modules/sqlocal/dist/lib/sql-tag.js","../node_modules/sqlocal/dist/lib/convert-rows-to-objects.js","../node_modules/sqlocal/dist/lib/normalize-statement.js","../node_modules/sqlocal/dist/lib/get-query-key.js","../node_modules/sqlocal/dist/lib/normalize-sql.js","../node_modules/sqlocal/dist/lib/mutation-lock.js","../node_modules/sqlocal/dist/client.js","../src/queue/db/sql.ts","../src/queue/db/runQuery.ts","../src/queue/db/createDatabase.ts","../src/errors.ts","../src/queue/TaskQueue.ts","../src/executor/hooks.ts","../src/util/backoff.ts","../node_modules/xstate/dev/dist/xstate-dev.esm.js","../node_modules/xstate/dist/raise-c17ec2bc.esm.js","../node_modules/xstate/actors/dist/xstate-actors.esm.js","../node_modules/xstate/dist/log-3d9d72a9.esm.js","../node_modules/xstate/dist/xstate.esm.js","../src/executor/TaskExecutor.ts","../src/executor/TaskExecutorPool.ts","../src/defaultFactories.ts","../src/dispatcher.ts","../src/util/periodic.ts","../src/pluginHandler.ts","../src/workhorse.ts","../src/plugins/PauseWhenOffline.ts"],"sourcesContent":["import { InspectionEvent, Observer } from 'xstate';\nimport { SubscriptionEvents, WorkhorseEventMap } from '@/events/eventTypes.ts';\n\ntype LogLevel = 'trace' | 'debug' | 'info' | 'warn' | 'error';\n\ntype SqlExecutor = (\n  queryTemplate: TemplateStringsArray | string,\n  ...params: unknown[]\n) => Promise<QueryResult[]>;\ntype QueryResult = Record<string, string | number | null>[];\ntype RunQuery = (query: string, ...values: unknown[]) => Promise<QueryResult[]>;\ntype SubscriptionHandler<K extends SubscriptionEvents> = (payload: WorkhorseEventMap[K]) => void;\n\ninterface Workhorse {\n  subscribe<K extends SubscriptionEvents>(event: K, handler: SubscriptionHandler<K>): () => void;\n  queue: (taskId: string, payload: Payload) => Promise<void>;\n  run: (taskId: string, payload: Payload) => Promise<unknown>;\n  getStatus: () => Promise<QueueStatus>;\n  startPoller: () => void;\n  stopPoller: () => void;\n  poll: () => Promise<void>;\n  requeue: () => Promise<void>;\n  shutdown: () => Promise<QueueStatus>;\n}\n\ninterface CommandDispatcher {\n  getStatus: () => Promise<QueueStatus>;\n  queue: (taskId: string, payload: Payload) => Promise<QueueStatus>;\n  requeue: () => Promise<QueueStatus>;\n  startExecutors: () => Promise<QueueStatus>;\n  stopExecutors: () => Promise<QueueStatus>;\n  poll: () => Promise<QueueStatus>;\n  log: (s: string) => void;\n  shutdown: () => Promise<QueueStatus>;\n}\n\ninterface WorkhorsePlugin {\n  name: string;\n  onStart(): void;\n  onStop(): void;\n}\n\nexport type Inspector =\n  | Observer<InspectionEvent>\n  | ((inspectionEvent: InspectionEvent) => void)\n  | undefined;\n\ninterface WorkhorseConfig {\n  dbPath?: string;\n  backoff: BackoffSettings;\n  duplicates: DuplicateStrategy;\n  concurrency: number;\n  taskExecution: TaskExecutorStrategy;\n  logLevel: LogLevel;\n\n  poll: {\n    auto: boolean;\n    interval: number;\n    pre: {\n      wait: 'ready';\n      timeout?: number;\n    };\n  };\n  defaultPlugins: WorkhorsePlugin[];\n  plugins: WorkhorsePlugin[];\n}\n\ninterface Factories {\n  createDatabase: (config: WorkhorseConfig) => Promise<RunQuery>;\n  createTaskQueue: (config: WorkhorseConfig, runQuery: RunQuery) => TaskQueue;\n  createExecutorHooks: (config: WorkhorseConfig, queue: TaskQueue, run: RunTask) => TaskHooks;\n  createTaskExecutor: (\n    config: WorkhorseConfig,\n    taskRunner: TaskHooks,\n    inspect?: Inspector\n  ) => SingleTaskExecutor;\n  createExecutorPool: (\n    config: WorkhorseConfig,\n    executors: SingleTaskExecutor[],\n    inspect?: Inspector\n  ) => TaskExecutorPool;\n}\n\nenum TaskState {\n  queued = 1,\n  executing = 2,\n  successful = 3,\n  failed = 4,\n}\n\ntype RowId = number;\n\ninterface TaskRow {\n  id: RowId;\n  taskId: string;\n  payload: Payload;\n}\n\ntype WorkhorseStatus = QueueStatus;\n\ninterface TaskQueue {\n  addTask(taskId: string, payload: Payload): Promise<void>;\n  reserveTask(): Promise<TaskRow | undefined>;\n  taskSuccessful(taskRow: TaskRow): Promise<void>;\n  taskFailed(taskRow: TaskRow): Promise<void>;\n  requeue: () => Promise<void>;\n  queryTaskCount(status: TaskState): Promise<number>;\n  getStatus(): Promise<QueueStatus>;\n}\n\nenum DuplicateStrategy {\n  // if a task is added with an id that already exist ignore it\n  IGNORE = 'ignore',\n  // if a task is added with an id that already throw an error\n  FORBID = 'forbid',\n}\n\nenum TaskExecutorStrategy {\n  // loops over each executor, waits until its ready - and then performs a poll.\n  SERIAL = 'serial',\n  // like 'serial', but stores each wait-promise - and performs a Promise.all()\n  PARALLEL = 'parallel',\n  // does not wait, sends a poll message to executor and immediately returns\n  DETACHED = 'detached',\n}\n\nenum RequeueStrategy {\n  IMMEDIATE = 'immediate',\n  DEFERRED = 'deferred',\n}\n\ninterface PollOptions {\n  pollInterval?: number;\n  requeuing?: RequeueStrategy;\n}\n\n// Holds TaskExecutors, determined by config.concurrency\ninterface TaskExecutorPool {\n  startAll(): Promise<void>;\n  stopAll(): Promise<void>;\n  pollAll(): Promise<void>;\n  shutdown(): Promise<void>;\n}\n\n// Interface for the state machine that reserves taks in db, executes them and writes the result back\ninterface SingleTaskExecutor {\n  start(): void;\n  stop(): void;\n  poll(): void;\n  waitFor(tag: 'ready' | 'busy' | 'canStop' | 'stopped' | 'executed'): Promise<void>;\n  waitIf(tag: 'busy' | 'executing'): Promise<void>;\n  getStatus(): 'stopped' | 'started' | 'critical'; //TODO: Move the types from the machine into this file to make more DRY\n}\n\ninterface TaskHooks {\n  executeHook: () => Promise<void>;\n  successHook: () => Promise<void>;\n  reserveHook: () => Promise<void>;\n  failureHook: () => Promise<void>;\n}\n\ntype JSONPrimitive = string | number | boolean | null | undefined;\ntype JSONObject = { [key: string]: JSONValue };\ntype JSONArray = JSONValue[];\ntype JSONValue = JSONPrimitive | JSONObject | JSONArray;\n\ntype Payload = JSONValue;\ntype TaskResult = Payload | undefined;\n\n// TODO: Use these for building up the type for Payload as well,\n// TODO: we don't want to allow naked primitives or null values\ntype JsonValue = string | number | boolean | JsonObject | JsonArray;\ntype JsonObject = { [key: string]: JsonValue | null };\ntype JsonArray = JsonValue[];\ntype EventPayload = JsonObject;\n\ntype RunTask = (taskId: string, payload: Payload) => Promise<TaskResult>;\n\ninterface BackoffSettings {\n  initial: number;\n  multiplier: number;\n  maxTime: number;\n}\n\ninterface QueueStatus {\n  queued: number;\n  executing: number;\n  successful: number;\n  failed: number;\n}\n\ninterface TaskQueueRow extends Record<string, number | string> {\n  id: number;\n  task_id: string;\n  task_payload: string;\n}\n\nfunction assertTaskQueueRow(maybeTaskQueueRow: unknown): asserts maybeTaskQueueRow is TaskQueueRow {\n  if (typeof maybeTaskQueueRow !== 'object' || maybeTaskQueueRow == null)\n    throw new Error('Invalid TaskQueue row - is null');\n  const row = maybeTaskQueueRow as Record<string, unknown>;\n  if (typeof row.id !== 'number') throw new Error(`Invalid row TaskQueue row - missing \"id\"`);\n  if (typeof row.task_id !== 'string')\n    throw new Error(`Invalid row TaskQueue row - missing \"task_id\"`);\n  if (typeof row.task_payload !== 'string')\n    throw new Error(`Invalid row TaskQueue row - missing \"payload\"`);\n}\n\nfunction assertTaskRow(\n  maybeTaskRow: object | Record<string, string | number> | undefined\n): asserts maybeTaskRow is TaskRow {\n  if (maybeTaskRow == undefined) {\n    throw new Error('Invalid TaskRow (missing)');\n  }\n  if ('id' in maybeTaskRow && typeof maybeTaskRow.id !== 'number') {\n    throw new Error(`Invalid row - id: ${maybeTaskRow.id}`);\n  }\n  if ('taskId' in maybeTaskRow && typeof maybeTaskRow.taskId !== 'string') {\n    throw new Error(`Invalid row - taskId: ${maybeTaskRow.taskId}`);\n  }\n  if ('payload' in maybeTaskRow && typeof maybeTaskRow.payload !== 'object') {\n    throw new Error(`Invalid row - payload: ${maybeTaskRow.payload}`);\n  }\n}\n\nfunction assertNonPrimitive(payload: Payload): asserts payload is JSONObject {\n  if (typeof payload !== 'object' || payload === null || Array.isArray(payload)) {\n    throw new TypeError('Payload must be a non-primitive JSON object.');\n  }\n}\n\nexport type {\n  SqlExecutor,\n  QueryResult,\n  RunQuery,\n  RowId,\n  TaskRow,\n  Workhorse,\n  WorkhorseStatus,\n  TaskQueue,\n  QueueStatus,\n  Payload,\n  RunTask,\n  TaskResult,\n  TaskHooks,\n  TaskExecutorPool,\n  SingleTaskExecutor,\n  WorkhorseConfig,\n  BackoffSettings,\n  LogLevel,\n  PollOptions,\n  CommandDispatcher,\n  WorkhorsePlugin,\n  Factories,\n  EventPayload,\n};\nexport {\n  TaskState,\n  DuplicateStrategy,\n  TaskExecutorStrategy,\n  RequeueStrategy,\n  assertTaskQueueRow,\n  assertTaskRow,\n  assertNonPrimitive,\n};\n","type Milliseconds = number;\n\nconst millisec = (ms: number): Milliseconds => ms;\nconst seconds = (sec: number): Milliseconds => millisec(1000) * sec;\nconst minutes = (min: number): Milliseconds => seconds(60) * min;\nconst hours = (hr: number): Milliseconds => minutes(60) * hr;\nconst sleep = (ms: number): Promise<void> => new Promise((resolve) => setTimeout(resolve, ms));\n\nexport { millisec, millisec as ms, seconds, minutes, hours, sleep };\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n  , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n  Events.prototype = Object.create(null);\n\n  //\n  // This hack is needed because the `__proto__` property is still inherited in\n  // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n  //\n  if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n  this.fn = fn;\n  this.context = context;\n  this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n  if (typeof fn !== 'function') {\n    throw new TypeError('The listener must be a function');\n  }\n\n  var listener = new EE(fn, context || emitter, once)\n    , evt = prefix ? prefix + event : event;\n\n  if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n  else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n  else emitter._events[evt] = [emitter._events[evt], listener];\n\n  return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n  if (--emitter._eventsCount === 0) emitter._events = new Events();\n  else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n  this._events = new Events();\n  this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n  var names = []\n    , events\n    , name;\n\n  if (this._eventsCount === 0) return names;\n\n  for (name in (events = this._events)) {\n    if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n  }\n\n  if (Object.getOwnPropertySymbols) {\n    return names.concat(Object.getOwnPropertySymbols(events));\n  }\n\n  return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n  var evt = prefix ? prefix + event : event\n    , handlers = this._events[evt];\n\n  if (!handlers) return [];\n  if (handlers.fn) return [handlers.fn];\n\n  for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n    ee[i] = handlers[i].fn;\n  }\n\n  return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n  var evt = prefix ? prefix + event : event\n    , listeners = this._events[evt];\n\n  if (!listeners) return 0;\n  if (listeners.fn) return 1;\n  return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n  var evt = prefix ? prefix + event : event;\n\n  if (!this._events[evt]) return false;\n\n  var listeners = this._events[evt]\n    , len = arguments.length\n    , args\n    , i;\n\n  if (listeners.fn) {\n    if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n    switch (len) {\n      case 1: return listeners.fn.call(listeners.context), true;\n      case 2: return listeners.fn.call(listeners.context, a1), true;\n      case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n      case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n      case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n      case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n    }\n\n    for (i = 1, args = new Array(len -1); i < len; i++) {\n      args[i - 1] = arguments[i];\n    }\n\n    listeners.fn.apply(listeners.context, args);\n  } else {\n    var length = listeners.length\n      , j;\n\n    for (i = 0; i < length; i++) {\n      if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n      switch (len) {\n        case 1: listeners[i].fn.call(listeners[i].context); break;\n        case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n        case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n        case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n        default:\n          if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n            args[j - 1] = arguments[j];\n          }\n\n          listeners[i].fn.apply(listeners[i].context, args);\n      }\n    }\n  }\n\n  return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n  return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n  return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n  var evt = prefix ? prefix + event : event;\n\n  if (!this._events[evt]) return this;\n  if (!fn) {\n    clearEvent(this, evt);\n    return this;\n  }\n\n  var listeners = this._events[evt];\n\n  if (listeners.fn) {\n    if (\n      listeners.fn === fn &&\n      (!once || listeners.once) &&\n      (!context || listeners.context === context)\n    ) {\n      clearEvent(this, evt);\n    }\n  } else {\n    for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n      if (\n        listeners[i].fn !== fn ||\n        (once && !listeners[i].once) ||\n        (context && listeners[i].context !== context)\n      ) {\n        events.push(listeners[i]);\n      }\n    }\n\n    //\n    // Reset the array, or remove it completely if we have no more listeners.\n    //\n    if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n    else clearEvent(this, evt);\n  }\n\n  return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n  var evt;\n\n  if (event) {\n    evt = prefix ? prefix + event : event;\n    if (this._events[evt]) clearEvent(this, evt);\n  } else {\n    this._events = new Events();\n    this._eventsCount = 0;\n  }\n\n  return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n  module.exports = EventEmitter;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { EventEmitter } from 'eventemitter3';\nimport type { WorkhorseEventMap } from './eventTypes';\n\ninterface TypedEmitter<Events extends Record<string, any>> {\n  on<K extends keyof Events>(event: K, fn: (payload: Events[K]) => void): void;\n  once<K extends keyof Events>(event: K, fn: (payload: Events[K]) => void): void;\n  off<K extends keyof Events>(event: K, fn: (payload: Events[K]) => void): void;\n  emit<K extends keyof Events>(event: K, payload: Events[K]): void;\n}\n\nfunction createTypedEmitter<Events extends Record<string, any>>(): TypedEmitter<Events> {\n  const ee = new EventEmitter();\n\n  return {\n    on(event, fn) {\n      ee.on(event as string, fn as (...args: any[]) => void);\n    },\n    once(event, fn) {\n      ee.once(event as string, fn as (...args: any[]) => void);\n    },\n    off(event, fn) {\n      ee.off(event as string, fn as (...args: any[]) => void);\n    },\n    emit(event, payload) {\n      ee.emit(event as string, payload);\n    },\n  };\n}\n\nconst Emitter: TypedEmitter<WorkhorseEventMap> = createTypedEmitter();\n\nexport { Emitter, createTypedEmitter };\nexport type { TypedEmitter };\n","// events received from workhorse\nconst Notifications = {\n  /*\n  Workhorse: {\n    Config: 'workhorse.config',\n    Starting: 'workhorse.starting',\n    Started: 'workhorse.started',\n    Stopping: 'workhorse.stopping',\n  },\n  Pool: {\n    Starting: 'poll.starting',\n    Started: 'poll.started',\n    Stopping: 'poll.stopping',\n  },\n  Executor: {\n    Started: 'executor.started',\n    Stopped: 'executor.stopped',\n  },\n  */\n\n  // taskId passed as a parameter\n  Task: {\n    Added: 'task.added',\n    //Reserved: 'task.reserved',\n    //Executing: 'task.executing',\n    Success: 'task.success',\n    Failure: 'task.failure',\n  },\n  // used by workhorse.run()\n  // taskId as suffix of the event name eg 'Task.Completed.[taskId]'\n  TaskId: {\n    Success: 'taskid.success.',\n    Failure: 'taskid.failure.',\n  },\n  /*\n  Poller: {\n    Started: 'poller.started',\n    Stopped: 'poller.Stopped',\n  },\n  */\n} as const;\n\n// events sent to workhorse\nconst Actions = {\n  Log: 'log',\n  Executors: {\n    Start: 'Executors.Start',\n    Stop: 'Executors.Stop',\n  },\n  Poller: {\n    Pause: 'Poller.Pause',\n    Resume: 'Poller.Resume',\n  },\n} as const;\n\nconst Subscriptions = {\n  TaskMonitor: {\n    Updated: 'TaskMonitor.Updated',\n  },\n} as const;\n\n// If T is an object, it maps over its keys and recursively applies DeepValue to each value.\n// Finally, it indexes into the resulting mapped type with [keyof T] to form a union of all values.\n// If T is not an object (i.e. it’s a string), it just returns T.\ntype DeepValue<T> = T extends object ? { [K in keyof T]: DeepValue<T[K]> }[keyof T] : T;\n\ntype NotificationEvents = DeepValue<typeof Notifications>;\ntype ActionEvents = DeepValue<typeof Actions>;\ntype SubscriptionEvents = DeepValue<typeof Subscriptions>;\n\ntype WorkhorseEvent = NotificationEvents | ActionEvents | SubscriptionEvents;\n\ninterface WorkhorseEventMap {\n  // Task notifications\n  'task.added': { taskId: string };\n  'task.success': { taskId: string };\n  'task.failure': { taskId: string };\n\n  // Actions\n  'Executors.Start': [];\n  'Executors.Stop': [];\n\n  'Poller.Pause': [];\n  'Poller.Resume': [];\n\n  log: { message: string };\n\n  // Subscriptions\n  'TaskMonitor.Updated': {\n    total: number;\n    remaining: number;\n    progress: number;\n  };\n}\n\nexport { Notifications, Actions, Subscriptions };\nexport type { WorkhorseEvent, SubscriptionEvents, WorkhorseEventMap };\n","import { Notifications } from '@/events/eventTypes.ts';\nimport { EventEmitter } from 'eventemitter3';\n\nconst InternalEmitter = createInternalEmitter();\n\nconst taskIdSuccess = (taskId: string): string => {\n  return `${Notifications.TaskId.Success}${taskId}`;\n};\n\n//TODO: Is there a use-case for this?\n/*\nconst taskIdFailure = (taskId: string): string => {\n  return `${Notifications.TaskId.Failure}${taskId}`;\n};\n*/\n\nconst emitReturnValue = (taskId: string, returnValue: unknown): void => {\n  InternalEmitter.emitAnything(taskIdSuccess(taskId), returnValue);\n};\n\nconst waitForReturnValue = (taskId: string): Promise<unknown> => {\n  return new Promise((resolve) => {\n    InternalEmitter.once(taskIdSuccess(taskId), (args) => {\n      resolve(args);\n    });\n  });\n};\n\n// Note: don't use this object.\n// If you do, things may break in surprising ways.\n// Its sole unexcited purpose is to facilitate the functions in this file.\n// The reason this object exists is to handle the scenario when someone subscribes to the\n// result of a task, and wants to know the exact return value.\n// And the person creating the task can decide to return literally anything.\n// If that anything isn't serializable to JSON, the result of the task will not be persisted.\n// But this allows one to at least receive the result as the task finishes its execution.\nfunction createInternalEmitter() {\n  const eventEmitter = new EventEmitter();\n  type callback = (args: unknown[]) => void;\n  return {\n    once: (event: string, fn: callback) => {\n      eventEmitter.once(event, fn);\n    },\n    emitAnything: (event: string, ...args: unknown[]) => {\n      eventEmitter.emit(event, ...args);\n    },\n  } as const;\n}\n\nexport { emitReturnValue, waitForReturnValue };\n","/*\n* loglevel - https://github.com/pimterry/loglevel\n*\n* Copyright (c) 2013 Tim Perry\n* Licensed under the MIT license.\n*/\n(function (root, definition) {\n    \"use strict\";\n    if (typeof define === 'function' && define.amd) {\n        define(definition);\n    } else if (typeof module === 'object' && module.exports) {\n        module.exports = definition();\n    } else {\n        root.log = definition();\n    }\n}(this, function () {\n    \"use strict\";\n\n    // Slightly dubious tricks to cut down minimized file size\n    var noop = function() {};\n    var undefinedType = \"undefined\";\n    var isIE = (typeof window !== undefinedType) && (typeof window.navigator !== undefinedType) && (\n        /Trident\\/|MSIE /.test(window.navigator.userAgent)\n    );\n\n    var logMethods = [\n        \"trace\",\n        \"debug\",\n        \"info\",\n        \"warn\",\n        \"error\"\n    ];\n\n    var _loggersByName = {};\n    var defaultLogger = null;\n\n    // Cross-browser bind equivalent that works at least back to IE6\n    function bindMethod(obj, methodName) {\n        var method = obj[methodName];\n        if (typeof method.bind === 'function') {\n            return method.bind(obj);\n        } else {\n            try {\n                return Function.prototype.bind.call(method, obj);\n            } catch (e) {\n                // Missing bind shim or IE8 + Modernizr, fallback to wrapping\n                return function() {\n                    return Function.prototype.apply.apply(method, [obj, arguments]);\n                };\n            }\n        }\n    }\n\n    // Trace() doesn't print the message in IE, so for that case we need to wrap it\n    function traceForIE() {\n        if (console.log) {\n            if (console.log.apply) {\n                console.log.apply(console, arguments);\n            } else {\n                // In old IE, native console methods themselves don't have apply().\n                Function.prototype.apply.apply(console.log, [console, arguments]);\n            }\n        }\n        if (console.trace) console.trace();\n    }\n\n    // Build the best logging method possible for this env\n    // Wherever possible we want to bind, not wrap, to preserve stack traces\n    function realMethod(methodName) {\n        if (methodName === 'debug') {\n            methodName = 'log';\n        }\n\n        if (typeof console === undefinedType) {\n            return false; // No method possible, for now - fixed later by enableLoggingWhenConsoleArrives\n        } else if (methodName === 'trace' && isIE) {\n            return traceForIE;\n        } else if (console[methodName] !== undefined) {\n            return bindMethod(console, methodName);\n        } else if (console.log !== undefined) {\n            return bindMethod(console, 'log');\n        } else {\n            return noop;\n        }\n    }\n\n    // These private functions always need `this` to be set properly\n\n    function replaceLoggingMethods() {\n        /*jshint validthis:true */\n        var level = this.getLevel();\n\n        // Replace the actual methods.\n        for (var i = 0; i < logMethods.length; i++) {\n            var methodName = logMethods[i];\n            this[methodName] = (i < level) ?\n                noop :\n                this.methodFactory(methodName, level, this.name);\n        }\n\n        // Define log.log as an alias for log.debug\n        this.log = this.debug;\n\n        // Return any important warnings.\n        if (typeof console === undefinedType && level < this.levels.SILENT) {\n            return \"No console available for logging\";\n        }\n    }\n\n    // In old IE versions, the console isn't present until you first open it.\n    // We build realMethod() replacements here that regenerate logging methods\n    function enableLoggingWhenConsoleArrives(methodName) {\n        return function () {\n            if (typeof console !== undefinedType) {\n                replaceLoggingMethods.call(this);\n                this[methodName].apply(this, arguments);\n            }\n        };\n    }\n\n    // By default, we use closely bound real methods wherever possible, and\n    // otherwise we wait for a console to appear, and then try again.\n    function defaultMethodFactory(methodName, _level, _loggerName) {\n        /*jshint validthis:true */\n        return realMethod(methodName) ||\n               enableLoggingWhenConsoleArrives.apply(this, arguments);\n    }\n\n    function Logger(name, factory) {\n      // Private instance variables.\n      var self = this;\n      /**\n       * The level inherited from a parent logger (or a global default). We\n       * cache this here rather than delegating to the parent so that it stays\n       * in sync with the actual logging methods that we have installed (the\n       * parent could change levels but we might not have rebuilt the loggers\n       * in this child yet).\n       * @type {number}\n       */\n      var inheritedLevel;\n      /**\n       * The default level for this logger, if any. If set, this overrides\n       * `inheritedLevel`.\n       * @type {number|null}\n       */\n      var defaultLevel;\n      /**\n       * A user-specific level for this logger. If set, this overrides\n       * `defaultLevel`.\n       * @type {number|null}\n       */\n      var userLevel;\n\n      var storageKey = \"loglevel\";\n      if (typeof name === \"string\") {\n        storageKey += \":\" + name;\n      } else if (typeof name === \"symbol\") {\n        storageKey = undefined;\n      }\n\n      function persistLevelIfPossible(levelNum) {\n          var levelName = (logMethods[levelNum] || 'silent').toUpperCase();\n\n          if (typeof window === undefinedType || !storageKey) return;\n\n          // Use localStorage if available\n          try {\n              window.localStorage[storageKey] = levelName;\n              return;\n          } catch (ignore) {}\n\n          // Use session cookie as fallback\n          try {\n              window.document.cookie =\n                encodeURIComponent(storageKey) + \"=\" + levelName + \";\";\n          } catch (ignore) {}\n      }\n\n      function getPersistedLevel() {\n          var storedLevel;\n\n          if (typeof window === undefinedType || !storageKey) return;\n\n          try {\n              storedLevel = window.localStorage[storageKey];\n          } catch (ignore) {}\n\n          // Fallback to cookies if local storage gives us nothing\n          if (typeof storedLevel === undefinedType) {\n              try {\n                  var cookie = window.document.cookie;\n                  var cookieName = encodeURIComponent(storageKey);\n                  var location = cookie.indexOf(cookieName + \"=\");\n                  if (location !== -1) {\n                      storedLevel = /^([^;]+)/.exec(\n                          cookie.slice(location + cookieName.length + 1)\n                      )[1];\n                  }\n              } catch (ignore) {}\n          }\n\n          // If the stored level is not valid, treat it as if nothing was stored.\n          if (self.levels[storedLevel] === undefined) {\n              storedLevel = undefined;\n          }\n\n          return storedLevel;\n      }\n\n      function clearPersistedLevel() {\n          if (typeof window === undefinedType || !storageKey) return;\n\n          // Use localStorage if available\n          try {\n              window.localStorage.removeItem(storageKey);\n          } catch (ignore) {}\n\n          // Use session cookie as fallback\n          try {\n              window.document.cookie =\n                encodeURIComponent(storageKey) + \"=; expires=Thu, 01 Jan 1970 00:00:00 UTC\";\n          } catch (ignore) {}\n      }\n\n      function normalizeLevel(input) {\n          var level = input;\n          if (typeof level === \"string\" && self.levels[level.toUpperCase()] !== undefined) {\n              level = self.levels[level.toUpperCase()];\n          }\n          if (typeof level === \"number\" && level >= 0 && level <= self.levels.SILENT) {\n              return level;\n          } else {\n              throw new TypeError(\"log.setLevel() called with invalid level: \" + input);\n          }\n      }\n\n      /*\n       *\n       * Public logger API - see https://github.com/pimterry/loglevel for details\n       *\n       */\n\n      self.name = name;\n\n      self.levels = { \"TRACE\": 0, \"DEBUG\": 1, \"INFO\": 2, \"WARN\": 3,\n          \"ERROR\": 4, \"SILENT\": 5};\n\n      self.methodFactory = factory || defaultMethodFactory;\n\n      self.getLevel = function () {\n          if (userLevel != null) {\n            return userLevel;\n          } else if (defaultLevel != null) {\n            return defaultLevel;\n          } else {\n            return inheritedLevel;\n          }\n      };\n\n      self.setLevel = function (level, persist) {\n          userLevel = normalizeLevel(level);\n          if (persist !== false) {  // defaults to true\n              persistLevelIfPossible(userLevel);\n          }\n\n          // NOTE: in v2, this should call rebuild(), which updates children.\n          return replaceLoggingMethods.call(self);\n      };\n\n      self.setDefaultLevel = function (level) {\n          defaultLevel = normalizeLevel(level);\n          if (!getPersistedLevel()) {\n              self.setLevel(level, false);\n          }\n      };\n\n      self.resetLevel = function () {\n          userLevel = null;\n          clearPersistedLevel();\n          replaceLoggingMethods.call(self);\n      };\n\n      self.enableAll = function(persist) {\n          self.setLevel(self.levels.TRACE, persist);\n      };\n\n      self.disableAll = function(persist) {\n          self.setLevel(self.levels.SILENT, persist);\n      };\n\n      self.rebuild = function () {\n          if (defaultLogger !== self) {\n              inheritedLevel = normalizeLevel(defaultLogger.getLevel());\n          }\n          replaceLoggingMethods.call(self);\n\n          if (defaultLogger === self) {\n              for (var childName in _loggersByName) {\n                _loggersByName[childName].rebuild();\n              }\n          }\n      };\n\n      // Initialize all the internal levels.\n      inheritedLevel = normalizeLevel(\n          defaultLogger ? defaultLogger.getLevel() : \"WARN\"\n      );\n      var initialLevel = getPersistedLevel();\n      if (initialLevel != null) {\n          userLevel = normalizeLevel(initialLevel);\n      }\n      replaceLoggingMethods.call(self);\n    }\n\n    /*\n     *\n     * Top-level API\n     *\n     */\n\n    defaultLogger = new Logger();\n\n    defaultLogger.getLogger = function getLogger(name) {\n        if ((typeof name !== \"symbol\" && typeof name !== \"string\") || name === \"\") {\n            throw new TypeError(\"You must supply a name when creating a logger.\");\n        }\n\n        var logger = _loggersByName[name];\n        if (!logger) {\n            logger = _loggersByName[name] = new Logger(\n                name,\n                defaultLogger.methodFactory\n            );\n        }\n        return logger;\n    };\n\n    // Grab the current global log variable in case of overwrite\n    var _log = (typeof window !== undefinedType) ? window.log : undefined;\n    defaultLogger.noConflict = function() {\n        if (typeof window !== undefinedType &&\n               window.log === defaultLogger) {\n            window.log = _log;\n        }\n\n        return defaultLogger;\n    };\n\n    defaultLogger.getLoggers = function getLoggers() {\n        return _loggersByName;\n    };\n\n    // ES6 default export, for compatibility\n    defaultLogger['default'] = defaultLogger;\n\n    return defaultLogger;\n}));\n","import { LogLevel } from '@types';\nimport loglevel from 'loglevel';\n\nconst prefix = '[workhorse]: ';\n\nconst setLogLevel = (level: LogLevel): void => {\n  loglevel.setLevel(level);\n};\n\nconst debug = (...s: string[]): void => {\n  loglevel.debug(prefix, ...s);\n};\n\nconst log = (...s: string[]): void => {\n  loglevel.info(prefix, ...s);\n};\n\nconst error = (...s: string[]): void => {\n  loglevel.error(prefix, 'ERROR - ', ...s);\n};\n\nexport { log, error, debug, setLogLevel };\nexport type { LogLevel };\n","import { WorkhorsePlugin, EventPayload } from '@/types';\nimport { Emitter, Notifications } from '@events';\nimport { Subscriptions } from '@/events/eventTypes.ts';\nimport { debug } from '@/util/logging.ts';\n\nclass TaskMonitor implements WorkhorsePlugin {\n  public name = 'TaskMonitor';\n  private allTaskIds = new Set();\n  private remainingTaskIds = new Set();\n  private notify = () => {\n    const total = this.allTaskIds.size;\n    const remaining = this.remainingTaskIds.size;\n    let progress = 0;\n    if (total > 0) {\n      progress = (total - remaining) / total;\n    }\n    Emitter.emit(Subscriptions.TaskMonitor.Updated, { total, remaining, progress });\n  };\n\n  public add = (event: EventPayload): void => {\n    this.allTaskIds.add(event.taskId);\n    this.remainingTaskIds.add(event.taskId);\n    this.notify();\n  };\n\n  public remove = (event: EventPayload): void => {\n    this.remainingTaskIds.delete(event.taskId);\n    this.notify();\n  };\n\n  onStart(): void {\n    debug(this.name, ' starting');\n    Emitter.on(Notifications.Task.Added, this.add);\n    Emitter.on(Notifications.Task.Success, this.remove);\n  }\n\n  onStop(): void {\n    Emitter.off(Notifications.Task.Added, this.add);\n    Emitter.off(Notifications.Task.Success, this.remove);\n  }\n}\n\nexport { TaskMonitor };\n","import { DuplicateStrategy, TaskExecutorStrategy, WorkhorseConfig } from './types';\nimport { millisec, minutes, seconds } from './util/time';\nimport { TaskMonitor } from '@/plugins/TaskMonitor.ts';\n\nconst defaults: WorkhorseConfig = {\n  concurrency: 1,\n  taskExecution: TaskExecutorStrategy.SERIAL,\n  logLevel: 'info',\n\n  poll: {\n    auto: false,\n    interval: millisec(100),\n\n    //TODO: Call these something else these names are not clear\n    pre: {\n      wait: 'ready',\n    },\n  },\n  backoff: {\n    initial: seconds(0.5),\n    multiplier: 2.5,\n    maxTime: minutes(15),\n  },\n  duplicates: DuplicateStrategy.IGNORE,\n  defaultPlugins: [new TaskMonitor()],\n  plugins: [],\n};\n\nconst defaultOptions = (): WorkhorseConfig => {\n  return defaults;\n};\n\nexport { defaultOptions };\n","export const ARRAY     = 'array';\nexport const BIGINT    = 'bigint';\nexport const BOOLEAN   = 'boolean';\nexport const FUNCTION  = 'function';\nexport const NULL      = 'null';\nexport const NUMBER    = 'number';\nexport const OBJECT    = 'object';\nexport const STRING    = 'string';\nexport const SYMBOL    = 'symbol';\nexport const UNDEFINED = 'undefined';\n","// ⚠️ AUTOMATICALLY GENERATED - DO NOT CHANGE\nexport const CHANNEL = '64e10b34-2bf7-4616-9668-f99de5aa046e';\n\nexport const MAIN = 'M' + CHANNEL;\nexport const THREAD = 'T' + CHANNEL;\n","export const APPLY                        = 'apply';\nexport const CONSTRUCT                    = 'construct';\nexport const DEFINE_PROPERTY              = 'defineProperty';\nexport const DELETE_PROPERTY              = 'deleteProperty';\nexport const GET                          = 'get';\nexport const GET_OWN_PROPERTY_DESCRIPTOR  = 'getOwnPropertyDescriptor';\nexport const GET_PROTOTYPE_OF             = 'getPrototypeOf';\nexport const HAS                          = 'has';\nexport const IS_EXTENSIBLE                = 'isExtensible';\nexport const OWN_KEYS                     = 'ownKeys';\nexport const PREVENT_EXTENSION            = 'preventExtensions';\nexport const SET                          = 'set';\nexport const SET_PROTOTYPE_OF             = 'setPrototypeOf';\n","// The goal of this file is to normalize SAB\n// at least in main -> worker() use cases.\n// This still cannot possibly solve the sync\n// worker -> main() use case if SharedArrayBuffer\n// is not available or usable.\n\nimport {CHANNEL} from './channel.js';\n\nconst {isArray} = Array;\n\nlet {SharedArrayBuffer, window} = globalThis;\nlet {notify, wait, waitAsync} = Atomics;\nlet postPatched = null;\n\n// This is needed for some version of Firefox\nif (!waitAsync) {\n  waitAsync = buffer => ({\n    value: new Promise(onmessage => {\n      // encodeURIComponent('onmessage=({data:b})=>(Atomics.wait(b,0),postMessage(0))')\n      let w = new Worker('data:application/javascript,onmessage%3D(%7Bdata%3Ab%7D)%3D%3E(Atomics.wait(b%2C0)%2CpostMessage(0))');\n      w.onmessage = onmessage;\n      w.postMessage(buffer);\n    })\n  });\n}\n\n// Monkey-patch SharedArrayBuffer if needed\ntry {\n  new SharedArrayBuffer(4);\n}\ncatch (_) {\n  SharedArrayBuffer = ArrayBuffer;\n\n  const ids = new WeakMap;\n  // patch only main -> worker():async use case\n  if (window) {\n    const resolvers = new Map;\n    const {prototype: {postMessage}} = Worker;\n\n    const listener = event => {\n      const details = event.data?.[CHANNEL];\n      if (!isArray(details)) {\n        event.stopImmediatePropagation();\n        const { id, sb } = details;\n        resolvers.get(id)(sb);\n      }\n    };\n\n    postPatched = function (data, ...rest) {\n      const details = data?.[CHANNEL];\n      if (isArray(details)) {\n        const [id, sb] = details;\n        ids.set(sb, id);\n        this.addEventListener('message', listener);\n      }\n      return postMessage.call(this, data, ...rest);\n    };\n\n    waitAsync = sb => ({\n      value: new Promise(resolve => {\n        resolvers.set(ids.get(sb), resolve);\n      }).then(buff => {\n        resolvers.delete(ids.get(sb));\n        ids.delete(sb);\n        for (let i = 0; i < buff.length; i++) sb[i] = buff[i];\n        return 'ok';\n      })\n    });\n  }\n  else {\n    const as = (id, sb) => ({[CHANNEL]: { id, sb }});\n\n    notify = sb => {\n      postMessage(as(ids.get(sb), sb));\n    };\n\n    addEventListener('message', event => {\n      const details = event.data?.[CHANNEL];\n      if (isArray(details)) {\n        const [id, sb] = details;\n        ids.set(sb, id);\n      }\n    });\n  }\n}\n\nexport {SharedArrayBuffer, isArray, notify, postPatched, wait, waitAsync};\n","/*! (c) Andrea Giammarchi - ISC */\n\nimport {FUNCTION} from 'proxy-target/types';\n\nimport {CHANNEL} from './channel.js';\nimport {GET, HAS, SET} from './shared/traps.js';\n\nimport {SharedArrayBuffer, isArray, notify, postPatched, wait, waitAsync} from './bridge.js';\n\n// just minifier friendly for Blob Workers' cases\nconst {Int32Array, Map, Uint16Array} = globalThis;\n\n// common constants / utilities for repeated operations\nconst {BYTES_PER_ELEMENT: I32_BYTES} = Int32Array;\nconst {BYTES_PER_ELEMENT: UI16_BYTES} = Uint16Array;\n\nconst waitInterrupt = (sb, delay, handler) => {\n  while (wait(sb, 0, 0, delay) === 'timed-out')\n    handler();\n};\n\n// retain buffers to transfer\nconst buffers = new WeakSet;\n\n// retain either main threads or workers global context\nconst context = new WeakMap;\n\nconst syncResult = {value: {then: fn => fn()}};\n\n// used to generate a unique `id` per each worker `postMessage` \"transaction\"\nlet uid = 0;\n\n/**\n * @typedef {Object} Interrupt used to sanity-check interrupts while waiting synchronously.\n * @prop {function} [handler] a callback invoked every `delay` milliseconds.\n * @prop {number} [delay=42] define `handler` invokes in terms of milliseconds.\n */\n\n/**\n * Create once a `Proxy` able to orchestrate synchronous `postMessage` out of the box.\n * @param {globalThis | Worker} self the context in which code should run\n * @param {{parse: (serialized: string) => any, stringify: (serializable: any) => string, transform?: (value:any) => any, interrupt?: () => void | Interrupt}} [JSON] an optional `JSON` like interface to `parse` or `stringify` content with extra `transform` ability.\n * @returns {ProxyHandler<globalThis> | ProxyHandler<Worker>}\n */\nconst coincident = (self, {parse = JSON.parse, stringify = JSON.stringify, transform, interrupt} = JSON) => {\n  // create a Proxy once for the given context (globalThis or Worker instance)\n  if (!context.has(self)) {\n    // ensure no SAB gets a chance to pass through this call\n    const sendMessage = postPatched || self.postMessage;\n    // ensure the CHANNEL and data are posted correctly\n    const post = (transfer, ...args) => sendMessage.call(self, {[CHANNEL]: args}, {transfer});\n\n    const handler = typeof interrupt === FUNCTION ? interrupt : interrupt?.handler;\n    const delay = interrupt?.delay || 42;\n    const decoder = new TextDecoder('utf-16');\n\n    // automatically uses sync wait (worker -> main)\n    // or fallback to async wait (main -> worker)\n    const waitFor = (isAsync, sb) => isAsync ?\n      waitAsync(sb, 0) :\n      ((handler ? waitInterrupt(sb, delay, handler) : wait(sb, 0)), syncResult);\n\n    // prevent Harakiri https://github.com/WebReflection/coincident/issues/18\n    let seppuku = false;\n\n    context.set(self, new Proxy(new Map, {\n      // there is very little point in checking prop in proxy for this very specific case\n      // and I don't want to orchestrate a whole roundtrip neither, as stuff would fail\n      // regardless if from Worker we access non existent Main callback, and vice-versa.\n      // This is here mostly to guarantee that if such check is performed, at least the\n      // get trap goes through and then it's up to developers guarantee they are accessing\n      // stuff that actually exists elsewhere.\n      [HAS]: (_, action) => typeof action === 'string' && !action.startsWith('_'),\n\n      // worker related: get any utility that should be available on the main thread\n      [GET]: (_, action) => action === 'then' ? null : ((...args) => {\n        // transaction id\n        const id = uid++;\n\n        // first contact: just ask for how big the buffer should be\n        // the value would be stored at index [1] while [0] is just control\n        let sb = new Int32Array(new SharedArrayBuffer(I32_BYTES * 2));\n\n        // if a transfer list has been passed, drop it from args\n        let transfer = [];\n        if (buffers.has(args.at(-1) || transfer))\n          buffers.delete(transfer = args.pop());\n\n        // ask for invoke with arguments and wait for it\n        post(transfer, id, sb, action, transform ? args.map(transform) : args);\n\n        // helps deciding how to wait for results\n        const isAsync = self !== globalThis;\n\n        // warn users about possible deadlock still allowing them\n        // to explicitly `proxy.invoke().then(...)` without blocking\n        let deadlock = 0;\n        if (seppuku && isAsync)\n          deadlock = setTimeout(console.warn, 1000, `💀🔒 - Possible deadlock if proxy.${action}(...args) is awaited`);\n\n        return waitFor(isAsync, sb).value.then(() => {\n          clearTimeout(deadlock);\n\n          // commit transaction using the returned / needed buffer length\n          const length = sb[1];\n\n          // filter undefined results\n          if (!length) return;\n\n          // calculate the needed ui16 bytes length to store the result string\n          const bytes = UI16_BYTES * length;\n\n          // round up to the next amount of bytes divided by 4 to allow i32 operations\n          sb = new Int32Array(new SharedArrayBuffer(bytes + (bytes % I32_BYTES)));\n\n          // ask for results and wait for it\n          post([], id, sb);\n          return waitFor(isAsync, sb).value.then(() => parse(\n            decoder.decode(new Uint16Array(sb.buffer).slice(0, length)))\n          );\n        });\n      }),\n\n      // main thread related: react to any utility a worker is asking for\n      [SET](actions, action, callback) {\n        const type = typeof callback;\n        if (type !== FUNCTION)\n          throw new Error(`Unable to assign ${action} as ${type}`);\n        // lazy event listener and logic handling, triggered once by setters actions\n        if (!actions.size) {\n          // maps results by `id` as they are asked for\n          const results = new Map;\n          // add the event listener once (first defined setter, all others work the same)\n          self.addEventListener('message', async (event) => {\n            // grub the very same library CHANNEL; ignore otherwise\n            const details = event.data?.[CHANNEL];\n            if (isArray(details)) {\n              // if early enough, avoid leaking data to other listeners\n              event.stopImmediatePropagation();\n              const [id, sb, ...rest] = details;\n              let error;\n              // action available: it must be defined/known on the main thread\n              if (rest.length) {\n                const [action, args] = rest;\n                if (actions.has(action)) {\n                  seppuku = true;\n                  try {\n                    // await for result either sync or async and serialize it\n                    const result = await actions.get(action)(...args);\n                    if (result !== void 0) {\n                      const serialized = stringify(transform ? transform(result) : result);\n                      // store the result for \"the very next\" event listener call\n                      results.set(id, serialized);\n                      // communicate the required SharedArrayBuffer length out of the\n                      // resulting serialized string\n                      sb[1] = serialized.length;\n                    }\n                  }\n                  catch (_) {\n                    error = _;\n                  }\n                  finally {\n                    seppuku = false;\n                  }\n                }\n                // unknown action should be notified as missing on the main thread\n                else {\n                  error = new Error(`Unsupported action: ${action}`);\n                }\n                // unlock the wait lock later on\n                sb[0] = 1;\n              }\n              // no action means: get results out of the well known `id`\n              // wait lock automatically unlocked here as no `0` value would\n              // possibly ever land at index `0`\n              else {\n                const result = results.get(id);\n                results.delete(id);\n                // populate the SharedArrayBuffer with utf-16 chars code\n                for (let ui16a = new Uint16Array(sb.buffer), i = 0; i < result.length; i++)\n                  ui16a[i] = result.charCodeAt(i);\n              }\n              // release te worker waiting either the length or the result\n              notify(sb, 0);\n              if (error) throw error;\n            }\n          });\n        }\n        // store this action callback allowing the setter in the process\n        return !!actions.set(action, callback);\n      }\n    }));\n  }\n  return context.get(self);\n};\n\ncoincident.transfer = (...args) => (buffers.add(args), args);\n\nexport default coincident;\n","/*\n ** LICENSE for the sqlite3 WebAssembly/JavaScript APIs.\n **\n ** This bundle (typically released as sqlite3.js or sqlite3.mjs)\n ** is an amalgamation of JavaScript source code from two projects:\n **\n ** 1) https://emscripten.org: the Emscripten \"glue code\" is covered by\n **    the terms of the MIT license and University of Illinois/NCSA\n **    Open Source License, as described at:\n **\n **    https://emscripten.org/docs/introducing_emscripten/emscripten_license.html\n **\n ** 2) https://sqlite.org: all code and documentation labeled as being\n **    from this source are released under the same terms as the sqlite3\n **    C library:\n **\n ** 2022-10-16\n **\n ** The author disclaims copyright to this source code.  In place of a\n ** legal notice, here is a blessing:\n **\n ** *   May you do good and not evil.\n ** *   May you find forgiveness for yourself and forgive others.\n ** *   May you share freely, never taking more than you give.\n */\n/*\n ** This code was built from sqlite3 version...\n **\n ** SQLITE_VERSION \"3.47.1\"\n ** SQLITE_VERSION_NUMBER 3047001\n ** SQLITE_SOURCE_ID \"2024-11-25 12:07:48 b95d11e958643b969c47a8e5857f3793b9e69700b8f1469371386369a26e577e\"\n **\n ** Using the Emscripten SDK version 3.1.67.\n */\n\nvar sqlite3InitModule = (() => {\n  var _scriptName = import.meta.url;\n\n  return function (moduleArg = {}) {\n    var moduleRtn;\n\n    var Module = moduleArg;\n\n    var readyPromiseResolve, readyPromiseReject;\n    var readyPromise = new Promise((resolve, reject) => {\n      readyPromiseResolve = resolve;\n      readyPromiseReject = reject;\n    });\n\n    var ENVIRONMENT_IS_WEB = typeof window == 'object';\n    var ENVIRONMENT_IS_WORKER = typeof importScripts == 'function';\n\n    var ENVIRONMENT_IS_NODE =\n      typeof process == 'object' &&\n      typeof process.versions == 'object' &&\n      typeof process.versions.node == 'string';\n    var ENVIRONMENT_IS_SHELL =\n      !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER;\n\n    const sqlite3InitModuleState =\n      globalThis.sqlite3InitModuleState ||\n      Object.assign(Object.create(null), {\n        debugModule: () => {},\n      });\n    delete globalThis.sqlite3InitModuleState;\n    sqlite3InitModuleState.debugModule(\n      'globalThis.location =',\n      globalThis.location,\n    );\n\n    var moduleOverrides = Object.assign({}, Module);\n\n    var arguments_ = [];\n    var thisProgram = './this.program';\n    var quit_ = (status, toThrow) => {\n      throw toThrow;\n    };\n\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    var readAsync, readBinary;\n\n    if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {\n      if (ENVIRONMENT_IS_WORKER) {\n        scriptDirectory = self.location.href;\n      } else if (typeof document != 'undefined' && document.currentScript) {\n        scriptDirectory = document.currentScript.src;\n      }\n\n      if (_scriptName) {\n        scriptDirectory = _scriptName;\n      }\n\n      if (scriptDirectory.startsWith('blob:')) {\n        scriptDirectory = '';\n      } else {\n        scriptDirectory = scriptDirectory.substr(\n          0,\n          scriptDirectory.replace(/[?#].*/, '').lastIndexOf('/') + 1,\n        );\n      }\n\n      {\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(xhr.response);\n          };\n        }\n\n        readAsync = (url) => {\n          return fetch(url, { credentials: 'same-origin' }).then((response) => {\n            if (response.ok) {\n              return response.arrayBuffer();\n            }\n            return Promise.reject(\n              new Error(response.status + ' : ' + response.url),\n            );\n          });\n        };\n      }\n    } else {\n    }\n\n    var out = Module['print'] || console.log.bind(console);\n    var err = Module['printErr'] || console.error.bind(console);\n\n    Object.assign(Module, moduleOverrides);\n\n    moduleOverrides = null;\n\n    if (Module['arguments']) arguments_ = Module['arguments'];\n\n    if (Module['thisProgram']) thisProgram = Module['thisProgram'];\n\n    var wasmBinary = Module['wasmBinary'];\n\n    var wasmMemory;\n\n    var ABORT = false;\n\n    var EXITSTATUS;\n\n    function assert(condition, text) {\n      if (!condition) {\n        abort(text);\n      }\n    }\n\n    var HEAP,\n      HEAP8,\n      HEAPU8,\n      HEAP16,\n      HEAPU16,\n      HEAP32,\n      HEAPU32,\n      HEAPF32,\n      HEAP64,\n      HEAPU64,\n      HEAPF64;\n\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      Module['HEAP64'] = HEAP64 = new BigInt64Array(b);\n      Module['HEAPU64'] = HEAPU64 = new BigUint64Array(b);\n    }\n\n    if (Module['wasmMemory']) {\n      wasmMemory = Module['wasmMemory'];\n    } else {\n      var INITIAL_MEMORY = Module['INITIAL_MEMORY'] || 16777216;\n\n      wasmMemory = new WebAssembly.Memory({\n        initial: INITIAL_MEMORY / 65536,\n\n        maximum: 32768,\n      });\n    }\n\n    updateMemoryViews();\n\n    var __ATPRERUN__ = [];\n    var __ATINIT__ = [];\n    var __ATEXIT__ = [];\n    var __ATPOSTRUN__ = [];\n\n    var runtimeInitialized = false;\n\n    function preRun() {\n      if (Module['preRun']) {\n        if (typeof Module['preRun'] == 'function')\n          Module['preRun'] = [Module['preRun']];\n        while (Module['preRun'].length) {\n          addOnPreRun(Module['preRun'].shift());\n        }\n      }\n      callRuntimeCallbacks(__ATPRERUN__);\n    }\n\n    function initRuntime() {\n      runtimeInitialized = true;\n\n      if (!Module['noFSInit'] && !FS.initialized) FS.init();\n      FS.ignorePermissions = false;\n\n      TTY.init();\n      callRuntimeCallbacks(__ATINIT__);\n    }\n\n    function postRun() {\n      if (Module['postRun']) {\n        if (typeof Module['postRun'] == 'function')\n          Module['postRun'] = [Module['postRun']];\n        while (Module['postRun'].length) {\n          addOnPostRun(Module['postRun'].shift());\n        }\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 addOnExit(cb) {}\n\n    function addOnPostRun(cb) {\n      __ATPOSTRUN__.unshift(cb);\n    }\n\n    var runDependencies = 0;\n    var runDependencyWatcher = null;\n    var dependenciesFulfilled = null;\n\n    function getUniqueRunDependency(id) {\n      return id;\n    }\n\n    function addRunDependency(id) {\n      runDependencies++;\n\n      Module['monitorRunDependencies']?.(runDependencies);\n    }\n\n    function removeRunDependency(id) {\n      runDependencies--;\n\n      Module['monitorRunDependencies']?.(runDependencies);\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();\n        }\n      }\n    }\n\n    function abort(what) {\n      Module['onAbort']?.(what);\n\n      what = 'Aborted(' + what + ')';\n\n      err(what);\n\n      ABORT = true;\n\n      what += '. Build with -sASSERTIONS for more info.';\n\n      var e = new WebAssembly.RuntimeError(what);\n\n      readyPromiseReject(e);\n\n      throw e;\n    }\n\n    var dataURIPrefix = 'data:application/octet-stream;base64,';\n\n    var isDataURI = (filename) => filename.startsWith(dataURIPrefix);\n\n    var isFileURI = (filename) => filename.startsWith('file://');\n\n    function findWasmBinary() {\n      if (Module['locateFile']) {\n        var f = 'sqlite3.wasm';\n        if (!isDataURI(f)) {\n          return locateFile(f);\n        }\n        return f;\n      }\n\n      return new URL('sqlite3.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 (!wasmBinary) {\n        return readAsync(binaryFile).then(\n          (response) => new Uint8Array(response),\n\n          () => getBinarySync(binaryFile),\n        );\n      }\n\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          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        typeof fetch == 'function'\n      ) {\n        return fetch(binaryFile, { credentials: 'same-origin' }).then(\n          (response) => {\n            var result = WebAssembly.instantiateStreaming(response, imports);\n\n            return result.then(callback, function (reason) {\n              err(`wasm streaming compile failed: ${reason}`);\n              err('falling back to ArrayBuffer instantiation');\n              return instantiateArrayBuffer(binaryFile, imports, callback);\n            });\n          },\n        );\n      }\n      return instantiateArrayBuffer(binaryFile, imports, callback);\n    }\n\n    function getWasmImports() {\n      return {\n        env: wasmImports,\n        wasi_snapshot_preview1: wasmImports,\n      };\n    }\n\n    function createWasm() {\n      var info = getWasmImports();\n\n      function receiveInstance(instance, module) {\n        wasmExports = instance.exports;\n\n        addOnInit(wasmExports['__wasm_call_ctors']);\n\n        removeRunDependency('wasm-instantiate');\n        return wasmExports;\n      }\n\n      addRunDependency('wasm-instantiate');\n\n      function receiveInstantiationResult(result) {\n        receiveInstance(result['instance']);\n      }\n\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\n          readyPromiseReject(e);\n        }\n      }\n\n      if (!wasmBinaryFile) wasmBinaryFile = findWasmBinary();\n\n      instantiateAsync(\n        wasmBinary,\n        wasmBinaryFile,\n        info,\n        receiveInstantiationResult,\n      ).catch(readyPromiseReject);\n      return {};\n    }\n\n    function ExitStatus(status) {\n      this.name = 'ExitStatus';\n      this.message = `Program terminated with exit(${status})`;\n      this.status = status;\n    }\n\n    var callRuntimeCallbacks = (callbacks) => {\n      while (callbacks.length > 0) {\n        callbacks.shift()(Module);\n      }\n    };\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          return HEAP64[ptr >> 3];\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    var noExitRuntime = Module['noExitRuntime'] || true;\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          HEAP64[ptr >> 3] = BigInt(value);\n          break;\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 PATH = {\n      isAbs: (path) => path.charAt(0) === '/',\n      splitPath: (filename) => {\n        var splitPathRe =\n          /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;\n        return splitPathRe.exec(filename).slice(1);\n      },\n      normalizeArray: (parts, allowAboveRoot) => {\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\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\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          return '.';\n        }\n        if (dir) {\n          dir = dir.substr(0, dir.length - 1);\n        }\n        return root + dir;\n      },\n      basename: (path) => {\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 (\n        typeof crypto == 'object' &&\n        typeof crypto['getRandomValues'] == 'function'\n      ) {\n        return (view) => crypto.getRandomValues(view);\n      } else abort('initRandomDevice');\n    };\n    var randomFill = (view) => {\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\n          if (typeof path != 'string') {\n            throw new TypeError('Arguments to path.resolve must be strings');\n          } else if (!path) {\n            return '';\n          }\n          resolvedPath = path + '/' + resolvedPath;\n          resolvedAbsolute = PATH.isAbs(path);\n        }\n\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 UTF8Decoder =\n      typeof TextDecoder != 'undefined' ? new TextDecoder() : undefined;\n\n    var UTF8ArrayToString = (heapOrArray, idx, maxBytesToRead) => {\n      var endIdx = idx + maxBytesToRead;\n      var endPtr = idx;\n\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\n      while (idx < endPtr) {\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          u0 =\n            ((u0 & 7) << 18) |\n            (u1 << 12) |\n            (u2 << 6) |\n            (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(\n            0xd800 | (ch >> 10),\n            0xdc00 | (ch & 0x3ff),\n          );\n        }\n      }\n      return str;\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        var c = str.charCodeAt(i);\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      if (!(maxBytesToWrite > 0)) return 0;\n\n      var startIdx = outIdx;\n      var endIdx = outIdx + maxBytesToWrite - 1;\n      for (var i = 0; i < str.length; ++i) {\n        var u = str.charCodeAt(i);\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          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\n      heap[outIdx] = 0;\n      return outIdx - startIdx;\n    };\n\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(\n        stringy,\n        u8array,\n        0,\n        u8array.length,\n      );\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 (\n          typeof window != 'undefined' &&\n          typeof window.prompt == 'function'\n        ) {\n          result = window.prompt('Input: ');\n          if (result !== null) {\n            result += '\\n';\n          }\n        } else {\n        }\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      shutdown() {},\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          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) {\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, 0));\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            out(UTF8ArrayToString(tty.output, 0));\n            tty.output = [];\n          }\n        },\n        ioctl_tcgets(tty) {\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,\n              0x00, 0x12, 0x0f, 0x17, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n              0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n            ],\n          };\n        },\n        ioctl_tcsets(tty, optional_actions, data) {\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, 0));\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, 0));\n            tty.output = [];\n          }\n        },\n      },\n    };\n\n    var zeroMemory = (address, size) => {\n      HEAPU8.fill(0, address, address + size);\n      return address;\n    };\n\n    var alignMemory = (size, alignment) => {\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) return 0;\n      return zeroMemory(ptr, size);\n    };\n    var MEMFS = {\n      ops_table: null,\n      mount(mount) {\n        return MEMFS.createNode(null, '/', 16384 | 511, 0);\n      },\n      createNode(parent, name, mode, dev) {\n        if (FS.isBlkdev(mode) || FS.isFIFO(mode)) {\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;\n\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\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)\n          return node.contents.subarray(0, node.usedBytes);\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;\n\n        var CAPACITY_DOUBLING_MAX = 1024 * 1024;\n        newCapacity = Math.max(\n          newCapacity,\n          (prevCapacity *\n            (prevCapacity < CAPACITY_DOUBLING_MAX ? 2.0 : 1.125)) >>>\n            0,\n        );\n        if (prevCapacity != 0) newCapacity = Math.max(newCapacity, 256);\n        var oldContents = node.contents;\n        node.contents = new Uint8Array(newCapacity);\n        if (node.usedBytes > 0)\n          node.contents.set(oldContents.subarray(0, node.usedBytes), 0);\n      },\n      resizeFileStorage(node, newSize) {\n        if (node.usedBytes == newSize) return;\n        if (newSize == 0) {\n          node.contents = null;\n          node.usedBytes = 0;\n        } else {\n          var oldContents = node.contents;\n          node.contents = new Uint8Array(newSize);\n          if (oldContents) {\n            node.contents.set(\n              oldContents.subarray(0, Math.min(newSize, node.usedBytes)),\n            );\n          }\n          node.usedBytes = newSize;\n        }\n      },\n      node_ops: {\n        getattr(node) {\n          var attr = {};\n\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\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 (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\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 | 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          if (size > 8 && contents.subarray) {\n            buffer.set(contents.subarray(position, position + size), offset);\n          } else {\n            for (var i = 0; i < size; i++)\n              buffer[offset + i] = contents[position + i];\n          }\n          return size;\n        },\n        write(stream, buffer, offset, length, position, canOwn) {\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            if (canOwn) {\n              node.contents = buffer.subarray(offset, offset + length);\n              node.usedBytes = length;\n              return length;\n            } else if (node.usedBytes === 0 && position === 0) {\n              node.contents = buffer.slice(offset, offset + length);\n              node.usedBytes = length;\n              return length;\n            } else if (position + length <= node.usedBytes) {\n              node.contents.set(\n                buffer.subarray(offset, offset + length),\n                position,\n              );\n              return length;\n            }\n          }\n\n          MEMFS.expandFileStorage(node, position + length);\n          if (node.contents.subarray && buffer.subarray) {\n            node.contents.set(\n              buffer.subarray(offset, offset + length),\n              position,\n            );\n          } else {\n            for (var i = 0; i < length; i++) {\n              node.contents[position + i] = buffer[offset + i];\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(\n            stream.node.usedBytes,\n            offset + length,\n          );\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\n          if (!(flags & 2) && contents && contents.buffer === HEAP8.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              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(\n                    contents,\n                    position,\n                    position + length,\n                  );\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\n          return 0;\n        },\n      },\n    };\n\n    var asyncLoad = (url, onload, onerror, noRunDep) => {\n      var dep = !noRunDep ? getUniqueRunDependency(`al ${url}`) : '';\n      readAsync(url).then(\n        (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 = (\n      parent,\n      name,\n      fileData,\n      canRead,\n      canWrite,\n      canOwn,\n    ) => {\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      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      var fullname = name ? PATH_FS.resolve(PATH.join2(parent, name)) : parent;\n      var dep = getUniqueRunDependency(`cp ${fullname}`);\n      function processData(byteArray) {\n        function finish(byteArray) {\n          preFinish?.();\n          if (!dontCreateFile) {\n            FS_createDataFile(\n              parent,\n              name,\n              byteArray,\n              canRead,\n              canWrite,\n              canOwn,\n            );\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 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 {\n        constructor(errno) {\n          this.name = 'ErrnoError';\n          this.errno = errno;\n        }\n      },\n      genericErrors: {},\n      filesystems: null,\n      syncFSRequests: 0,\n      FSStream: class {\n        constructor() {\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;\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          throw new FS.ErrnoError(32);\n        }\n\n        var parts = path.split('/').filter((p) => !!p);\n\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            break;\n          }\n\n          current = FS.lookupNode(current, parts[i]);\n          current_path = PATH.join2(current_path, parts[i]);\n\n          if (FS.isMountpoint(current)) {\n            if (!islast || (islast && opts.follow_mount)) {\n              current = current.mounted.root;\n            }\n          }\n\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, {\n                recurse_count: opts.recurse_count + 1,\n              });\n              current = lookup.node;\n\n              if (count++ > 40) {\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] !== '/'\n              ? `${mount}/${path}`\n              : 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\n        return FS.lookup(parent, name);\n      },\n      createNode(parent, name, mode, rdev) {\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\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 (FS.flagsToPermissionString(flags) !== 'r' || flags & 512) {\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        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\n          stream.stream_ops = device.stream_ops;\n\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          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        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        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;\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        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          node.mounted = mount;\n\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        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        node.mounted = null;\n\n        var idx = node.mount.mounts.indexOf(mount);\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;\n        mode &= 4095;\n        mode |= 32768;\n        return FS.mknod(path, mode, 0);\n      },\n      mkdir(path, mode) {\n        mode = mode !== undefined ? mode : 511;\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;\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\n        var lookup, old_dir, new_dir;\n\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\n        if (old_dir.mount !== new_dir.mount) {\n          throw new FS.ErrnoError(75);\n        }\n\n        var old_node = FS.lookupNode(old_dir, old_name);\n\n        var relative = PATH_FS.relative(old_path, new_dirname);\n        if (relative.charAt(0) !== '.') {\n          throw new FS.ErrnoError(28);\n        }\n\n        relative = PATH_FS.relative(new_path, old_dirname);\n        if (relative.charAt(0) !== '.') {\n          throw new FS.ErrnoError(55);\n        }\n\n        var new_node;\n        try {\n          new_node = FS.lookupNode(new_dir, new_name);\n        } catch (e) {}\n\n        if (old_node === new_node) {\n          return;\n        }\n\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\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 (\n          FS.isMountpoint(old_node) ||\n          (new_node && FS.isMountpoint(new_node))\n        ) {\n          throw new FS.ErrnoError(10);\n        }\n\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\n        FS.hashRemoveNode(old_node);\n\n        try {\n          old_dir.node_ops.rename(old_node, new_dir, new_name);\n\n          old_node.parent = new_dir;\n        } catch (e) {\n          throw e;\n        } finally {\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          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(\n          FS.getPath(link.parent),\n          link.node_ops.readlink(link),\n        );\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        });\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 : 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        }\n\n        var created = false;\n        if (flags & 64) {\n          if (node) {\n            if (flags & 128) {\n              throw new FS.ErrnoError(20);\n            }\n          } else {\n            node = FS.mknod(path, mode, 0);\n            created = true;\n          }\n        }\n        if (!node) {\n          throw new FS.ErrnoError(44);\n        }\n\n        if (FS.isChrdev(node.mode)) {\n          flags &= ~512;\n        }\n\n        if (flags & 65536 && !FS.isDir(node.mode)) {\n          throw new FS.ErrnoError(54);\n        }\n\n        if (!created) {\n          var errCode = FS.mayOpen(node, flags);\n          if (errCode) {\n            throw new FS.ErrnoError(errCode);\n          }\n        }\n\n        if (flags & 512 && !created) {\n          FS.truncate(node, 0);\n        }\n\n        flags &= ~(128 | 512 | 131072);\n\n        var stream = FS.createStream({\n          node,\n          path: FS.getPath(node),\n          flags,\n          seekable: true,\n          position: 0,\n          stream_ops: node.stream_ops,\n\n          ungotten: [],\n          error: false,\n        });\n\n        if (stream.stream_ops.open) {\n          stream.stream_ops.open(stream);\n        }\n        if (Module['logReadFiles'] && !(flags & 1)) {\n          if (!FS.readFiles) FS.readFiles = {};\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;\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        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(\n          stream,\n          buffer,\n          offset,\n          length,\n          position,\n        );\n        if (!seeking) stream.position += bytesRead;\n        return bytesRead;\n      },\n      write(stream, buffer, offset, length, position, canOwn) {\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          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        if (\n          (prot & 2) !== 0 &&\n          (flags & 2) === 0 &&\n          (stream.flags & 2097155) !== 2\n        ) {\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        if (!stream.stream_ops.msync) {\n          return 0;\n        }\n        return stream.stream_ops.msync(\n          stream,\n          buffer,\n          offset,\n          length,\n          mmapFlags,\n        );\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, 0);\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        FS.mkdir('/dev');\n\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\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\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\n        FS.mkdir('/dev/shm');\n        FS.mkdir('/dev/shm/tmp');\n      },\n      createSpecialDirectories() {\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, 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;\n                  return ret;\n                },\n              };\n              return node;\n            },\n          },\n          {},\n          '/proc/self/fd',\n        );\n      },\n      createStandardStreams(input, output, error) {\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        var stdin = FS.open('/dev/stdin', 0);\n        var stdout = FS.open('/dev/stdout', 1);\n        var stderr = FS.open('/dev/stderr', 1);\n      },\n      staticInit() {\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        FS.initialized = true;\n\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\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        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          parent = current;\n        }\n        return current;\n      },\n      createFile(parent, name, properties, canRead, canWrite) {\n        var path = PATH.join2(\n          typeof parent == 'string' ? parent : FS.getPath(parent),\n          name,\n        );\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)\n              arr[i] = data.charCodeAt(i);\n            data = arr;\n          }\n\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(\n          typeof parent == 'string' ? parent : FS.getPath(parent),\n          name,\n        );\n        var mode = FS_getMode(!!input, !!output);\n        if (!FS.createDevice.major) FS.createDevice.major = 64;\n        var dev = FS.makedev(FS.createDevice.major++, 0);\n\n        FS.registerDevice(dev, {\n          open(stream) {\n            stream.seekable = false;\n          },\n          close(stream) {\n            if (output?.buffer?.length) {\n              output(10);\n            }\n          },\n          read(stream, buffer, offset, length, pos) {\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)\n          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          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        class LazyUint8Array {\n          constructor() {\n            this.lengthKnown = false;\n            this.chunks = [];\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            var xhr = new XMLHttpRequest();\n            xhr.open('HEAD', url, false);\n            xhr.send(null);\n            if (\n              !((xhr.status >= 200 && xhr.status < 300) || xhr.status === 304)\n            )\n              throw new Error(\n                \"Couldn't load \" + url + '. Status: ' + xhr.status,\n              );\n            var datalength = Number(xhr.getResponseHeader('Content-length'));\n            var header;\n            var hasByteServing =\n              (header = xhr.getResponseHeader('Accept-Ranges')) &&\n              header === 'bytes';\n            var usesGzip =\n              (header = xhr.getResponseHeader('Content-Encoding')) &&\n              header === 'gzip';\n\n            var chunkSize = 1024 * 1024;\n\n            if (!hasByteServing) chunkSize = datalength;\n\n            var doXHR = (from, to) => {\n              if (from > to)\n                throw new Error(\n                  'invalid range (' +\n                    from +\n                    ', ' +\n                    to +\n                    ') or no bytes requested!',\n                );\n              if (to > datalength - 1)\n                throw new Error(\n                  'only ' + datalength + ' bytes available! programmer error!',\n                );\n\n              var xhr = new XMLHttpRequest();\n              xhr.open('GET', url, false);\n              if (datalength !== chunkSize)\n                xhr.setRequestHeader('Range', 'bytes=' + from + '-' + to);\n\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 (\n                !((xhr.status >= 200 && xhr.status < 300) || xhr.status === 304)\n              )\n                throw new Error(\n                  \"Couldn't load \" + url + '. Status: ' + xhr.status,\n                );\n              if (xhr.response !== undefined) {\n                return new Uint8Array(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;\n              end = Math.min(end, datalength - 1);\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              chunkSize = datalength = 1;\n              datalength = this.getter(0).length;\n              chunkSize = datalength;\n              out(\n                'LazyFiles on gzip forces download of the whole file when length is accessed',\n              );\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\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\n        Object.defineProperties(node, {\n          usedBytes: {\n            get: function () {\n              return this.contents.length;\n            },\n          },\n        });\n\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          if (contents.slice) {\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              buffer[offset + i] = contents.get(position + i);\n            }\n          }\n          return size;\n        }\n\n        stream_ops.read = (stream, buffer, offset, length, position) => {\n          FS.forceLoadFile(node);\n          return writeChunks(stream, buffer, offset, length, position);\n        };\n\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    };\n\n    var UTF8ToString = (ptr, maxBytesToRead) => {\n      return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : '';\n    };\n    var SYSCALLS = {\n      DEFAULT_POLLMASK: 5,\n      calculateAt(dirfd, path, allowEmpty) {\n        if (PATH.isAbs(path)) {\n          return path;\n        }\n\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        HEAP64[(buf + 24) >> 3] = BigInt(stat.size);\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        HEAP64[(buf + 40) >> 3] = BigInt(Math.floor(atime / 1000));\n        HEAPU32[(buf + 48) >> 2] = (atime % 1000) * 1000 * 1000;\n        HEAP64[(buf + 56) >> 3] = BigInt(Math.floor(mtime / 1000));\n        HEAPU32[(buf + 64) >> 2] = (mtime % 1000) * 1000 * 1000;\n        HEAP64[(buf + 72) >> 3] = BigInt(Math.floor(ctime / 1000));\n        HEAPU32[(buf + 80) >> 2] = (ctime % 1000) * 1000 * 1000;\n        HEAP64[(buf + 88) >> 3] = BigInt(stat.ino);\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          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_chmod(path, mode) {\n      try {\n        path = SYSCALLS.getStr(path);\n        FS.chmod(path, mode);\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_faccessat(dirfd, path, amode, flags) {\n      try {\n        path = SYSCALLS.getStr(path);\n        path = SYSCALLS.calculateAt(dirfd, path);\n        if (amode & ~7) {\n          return -28;\n        }\n        var lookup = FS.lookupPath(path, { follow: true });\n        var node = lookup.node;\n        if (!node) {\n          return -44;\n        }\n        var perms = '';\n        if (amode & 4) perms += 'r';\n        if (amode & 2) perms += 'w';\n        if (amode & 1) perms += 'x';\n        if (perms && FS.nodePermissions(node, perms)) {\n          return -2;\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    function ___syscall_fchmod(fd, mode) {\n      try {\n        FS.fchmod(fd, mode);\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_fchown32(fd, owner, group) {\n      try {\n        FS.fchown(fd, owner, group);\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 syscallGetVarargI() {\n      var ret = HEAP32[+SYSCALLS.varargs >> 2];\n      SYSCALLS.varargs += 4;\n      return ret;\n    }\n    var syscallGetVarargP = syscallGetVarargI;\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;\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\n            HEAP16[(arg + offset) >> 1] = 2;\n            return 0;\n          }\n          case 13:\n          case 14:\n            return 0;\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 INT53_MAX = 9007199254740992;\n\n    var INT53_MIN = -9007199254740992;\n    var bigintToI53Checked = (num) =>\n      num < INT53_MIN || num > INT53_MAX ? NaN : Number(num);\n    function ___syscall_ftruncate64(fd, length) {\n      length = bigintToI53Checked(length);\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      return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite);\n    };\n    function ___syscall_getcwd(buf, size) {\n      try {\n        if (size === 0) return -28;\n        var cwd = FS.cwd();\n        var cwdLengthInBytes = lengthBytesUTF8(cwd) + 1;\n        if (size < cwdLengthInBytes) return -68;\n        stringToUTF8(cwd, buf, size);\n        return cwdLengthInBytes;\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;\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;\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;\n          }\n          case 21531: {\n            var argp = syscallGetVarargP();\n            return FS.ioctl(stream, op, argp);\n          }\n          case 21523: {\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            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;\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_mkdirat(dirfd, path, mode) {\n      try {\n        path = SYSCALLS.getStr(path);\n        path = SYSCALLS.calculateAt(dirfd, path);\n\n        path = PATH.normalize(path);\n        if (path[path.length - 1] === '/')\n          path = path.substr(0, path.length - 1);\n        FS.mkdir(path, mode, 0);\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_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        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_readlinkat(dirfd, path, buf, bufsize) {\n      try {\n        path = SYSCALLS.getStr(path);\n        path = SYSCALLS.calculateAt(dirfd, path);\n        if (bufsize <= 0) return -28;\n        var ret = FS.readlink(path);\n\n        var len = Math.min(bufsize, lengthBytesUTF8(ret));\n        var endChar = HEAP8[buf + len];\n        stringToUTF8(ret, buf, bufsize + 1);\n\n        HEAP8[buf + len] = endChar;\n        return len;\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 readI53FromI64 = (ptr) => {\n      return HEAPU32[ptr >> 2] + HEAP32[(ptr + 4) >> 2] * 4294967296;\n    };\n\n    function ___syscall_utimensat(dirfd, path, times, flags) {\n      try {\n        path = SYSCALLS.getStr(path);\n        path = SYSCALLS.calculateAt(dirfd, path, true);\n        var now = Date.now(),\n          atime,\n          mtime;\n        if (!times) {\n          atime = now;\n          mtime = now;\n        } else {\n          var seconds = readI53FromI64(times);\n          var nanoseconds = HEAP32[(times + 8) >> 2];\n          if (nanoseconds == 1073741823) {\n            atime = now;\n          } else if (nanoseconds == 1073741822) {\n            atime = -1;\n          } else {\n            atime = seconds * 1000 + nanoseconds / (1000 * 1000);\n          }\n          times += 16;\n          seconds = readI53FromI64(times);\n          nanoseconds = HEAP32[(times + 8) >> 2];\n          if (nanoseconds == 1073741823) {\n            mtime = now;\n          } else if (nanoseconds == 1073741822) {\n            mtime = -1;\n          } else {\n            mtime = seconds * 1000 + nanoseconds / (1000 * 1000);\n          }\n        }\n\n        if (mtime != -1 || atime != -1) {\n          FS.utime(path, atime, mtime);\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 nowIsMonotonic = 1;\n    var __emscripten_get_now_is_monotonic = () => nowIsMonotonic;\n\n    var isLeapYear = (year) =>\n      year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n\n    var MONTH_DAYS_LEAP_CUMULATIVE = [\n      0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335,\n    ];\n\n    var MONTH_DAYS_REGULAR_CUMULATIVE = [\n      0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334,\n    ];\n    var ydayFromDate = (date) => {\n      var leap = isLeapYear(date.getFullYear());\n      var monthDaysCumulative = leap\n        ? MONTH_DAYS_LEAP_CUMULATIVE\n        : MONTH_DAYS_REGULAR_CUMULATIVE;\n      var yday = monthDaysCumulative[date.getMonth()] + date.getDate() - 1;\n\n      return yday;\n    };\n\n    function __localtime_js(time, tmPtr) {\n      time = bigintToI53Checked(time);\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      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    function __mmap_js(len, prot, flags, fd, offset, allocated, addr) {\n      offset = bigintToI53Checked(offset);\n\n      try {\n        if (isNaN(offset)) return 61;\n        var stream = SYSCALLS.getStreamFromFD(fd);\n        var res = FS.mmap(stream, len, offset, prot, flags);\n        var ptr = res.ptr;\n        HEAP32[allocated >> 2] = res.allocated;\n        HEAPU32[addr >> 2] = ptr;\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 __munmap_js(addr, len, prot, flags, fd, offset) {\n      offset = bigintToI53Checked(offset);\n\n      try {\n        var stream = SYSCALLS.getStreamFromFD(fd);\n        if (prot & 2) {\n          SYSCALLS.doMsync(addr, stream, len, flags, offset);\n        }\n      } catch (e) {\n        if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n        return -e.errno;\n      }\n    }\n\n    var __tzset_js = (timezone, daylight, std_name, dst_name) => {\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      var stdTimezoneOffset = Math.max(winterOffset, summerOffset);\n\n      HEAPU32[timezone >> 2] = stdTimezoneOffset * 60;\n\n      HEAP32[daylight >> 2] = Number(winterOffset != summerOffset);\n\n      var extractZone = (timezoneOffset) => {\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      if (summerOffset < winterOffset) {\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 _emscripten_get_now;\n\n    _emscripten_get_now = () => performance.now();\n    var getHeapMax = () => 2147483648;\n\n    var growMemory = (size) => {\n      var b = wasmMemory.buffer;\n      var pages = (size - b.byteLength + 65535) / 65536;\n      try {\n        wasmMemory.grow(pages);\n        updateMemoryViews();\n        return 1;\n      } catch (e) {}\n    };\n    var _emscripten_resize_heap = (requestedSize) => {\n      var oldSize = HEAPU8.length;\n\n      requestedSize >>>= 0;\n\n      var maxHeapSize = getHeapMax();\n      if (requestedSize > maxHeapSize) {\n        return false;\n      }\n\n      for (var cutDown = 1; cutDown <= 4; cutDown *= 2) {\n        var overGrownHeapSize = oldSize * (1 + 0.2 / cutDown);\n\n        overGrownHeapSize = Math.min(\n          overGrownHeapSize,\n          requestedSize + 100663296,\n        );\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      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        var lang =\n          (\n            (typeof navigator == 'object' &&\n              navigator.languages &&\n              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\n        for (var x in ENV) {\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        HEAP8[buffer++] = str.charCodeAt(i);\n      }\n\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    function _fd_fdstat_get(fd, pbuf) {\n      try {\n        var rightsBase = 0;\n        var rightsInheriting = 0;\n        var flags = 0;\n        {\n          var stream = SYSCALLS.getStreamFromFD(fd);\n\n          var type = stream.tty\n            ? 2\n            : FS.isDir(stream.mode)\n              ? 3\n              : FS.isLink(stream.mode)\n                ? 7\n                : 4;\n        }\n        HEAP8[pbuf] = type;\n        HEAP16[(pbuf + 2) >> 1] = flags;\n        HEAP64[(pbuf + 8) >> 3] = BigInt(rightsBase);\n        HEAP64[(pbuf + 16) >> 3] = BigInt(rightsInheriting);\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 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;\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, whence, newOffset) {\n      offset = bigintToI53Checked(offset);\n\n      try {\n        if (isNaN(offset)) return 61;\n        var stream = SYSCALLS.getStreamFromFD(fd);\n        FS.llseek(stream, offset, whence);\n        HEAP64[newOffset >> 3] = BigInt(stream.position);\n        if (stream.getdents && offset === 0 && whence === 0)\n          stream.getdents = null;\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;\n      } catch (e) {\n        if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n        return e.errno;\n      }\n    }\n\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          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    FS.createPreloadedFile = FS_createPreloadedFile;\n    FS.staticInit();\n\n    var wasmImports = {\n      __syscall_chmod: ___syscall_chmod,\n\n      __syscall_faccessat: ___syscall_faccessat,\n\n      __syscall_fchmod: ___syscall_fchmod,\n\n      __syscall_fchown32: ___syscall_fchown32,\n\n      __syscall_fcntl64: ___syscall_fcntl64,\n\n      __syscall_fstat64: ___syscall_fstat64,\n\n      __syscall_ftruncate64: ___syscall_ftruncate64,\n\n      __syscall_getcwd: ___syscall_getcwd,\n\n      __syscall_ioctl: ___syscall_ioctl,\n\n      __syscall_lstat64: ___syscall_lstat64,\n\n      __syscall_mkdirat: ___syscall_mkdirat,\n\n      __syscall_newfstatat: ___syscall_newfstatat,\n\n      __syscall_openat: ___syscall_openat,\n\n      __syscall_readlinkat: ___syscall_readlinkat,\n\n      __syscall_rmdir: ___syscall_rmdir,\n\n      __syscall_stat64: ___syscall_stat64,\n\n      __syscall_unlinkat: ___syscall_unlinkat,\n\n      __syscall_utimensat: ___syscall_utimensat,\n\n      _emscripten_get_now_is_monotonic: __emscripten_get_now_is_monotonic,\n\n      _localtime_js: __localtime_js,\n\n      _mmap_js: __mmap_js,\n\n      _munmap_js: __munmap_js,\n\n      _tzset_js: __tzset_js,\n\n      emscripten_date_now: _emscripten_date_now,\n\n      emscripten_get_now: _emscripten_get_now,\n\n      emscripten_resize_heap: _emscripten_resize_heap,\n\n      environ_get: _environ_get,\n\n      environ_sizes_get: _environ_sizes_get,\n\n      fd_close: _fd_close,\n\n      fd_fdstat_get: _fd_fdstat_get,\n\n      fd_read: _fd_read,\n\n      fd_seek: _fd_seek,\n\n      fd_sync: _fd_sync,\n\n      fd_write: _fd_write,\n\n      memory: wasmMemory,\n    };\n    var wasmExports = createWasm();\n    var ___wasm_call_ctors = () =>\n      (___wasm_call_ctors = wasmExports['__wasm_call_ctors'])();\n    var _sqlite3_status64 = (Module['_sqlite3_status64'] = (a0, a1, a2, a3) =>\n      (_sqlite3_status64 = Module['_sqlite3_status64'] =\n        wasmExports['sqlite3_status64'])(a0, a1, a2, a3));\n    var _sqlite3_status = (Module['_sqlite3_status'] = (a0, a1, a2, a3) =>\n      (_sqlite3_status = Module['_sqlite3_status'] =\n        wasmExports['sqlite3_status'])(a0, a1, a2, a3));\n    var _sqlite3_db_status = (Module['_sqlite3_db_status'] = (\n      a0,\n      a1,\n      a2,\n      a3,\n      a4,\n    ) =>\n      (_sqlite3_db_status = Module['_sqlite3_db_status'] =\n        wasmExports['sqlite3_db_status'])(a0, a1, a2, a3, a4));\n    var _sqlite3_msize = (Module['_sqlite3_msize'] = (a0) =>\n      (_sqlite3_msize = Module['_sqlite3_msize'] =\n        wasmExports['sqlite3_msize'])(a0));\n    var _sqlite3_vfs_find = (Module['_sqlite3_vfs_find'] = (a0) =>\n      (_sqlite3_vfs_find = Module['_sqlite3_vfs_find'] =\n        wasmExports['sqlite3_vfs_find'])(a0));\n    var _sqlite3_initialize = (Module['_sqlite3_initialize'] = () =>\n      (_sqlite3_initialize = Module['_sqlite3_initialize'] =\n        wasmExports['sqlite3_initialize'])());\n    var _sqlite3_malloc = (Module['_sqlite3_malloc'] = (a0) =>\n      (_sqlite3_malloc = Module['_sqlite3_malloc'] =\n        wasmExports['sqlite3_malloc'])(a0));\n    var _sqlite3_free = (Module['_sqlite3_free'] = (a0) =>\n      (_sqlite3_free = Module['_sqlite3_free'] = wasmExports['sqlite3_free'])(\n        a0,\n      ));\n    var _sqlite3_vfs_register = (Module['_sqlite3_vfs_register'] = (a0, a1) =>\n      (_sqlite3_vfs_register = Module['_sqlite3_vfs_register'] =\n        wasmExports['sqlite3_vfs_register'])(a0, a1));\n    var _sqlite3_vfs_unregister = (Module['_sqlite3_vfs_unregister'] = (a0) =>\n      (_sqlite3_vfs_unregister = Module['_sqlite3_vfs_unregister'] =\n        wasmExports['sqlite3_vfs_unregister'])(a0));\n    var _sqlite3_malloc64 = (Module['_sqlite3_malloc64'] = (a0) =>\n      (_sqlite3_malloc64 = Module['_sqlite3_malloc64'] =\n        wasmExports['sqlite3_malloc64'])(a0));\n    var _sqlite3_realloc = (Module['_sqlite3_realloc'] = (a0, a1) =>\n      (_sqlite3_realloc = Module['_sqlite3_realloc'] =\n        wasmExports['sqlite3_realloc'])(a0, a1));\n    var _sqlite3_realloc64 = (Module['_sqlite3_realloc64'] = (a0, a1) =>\n      (_sqlite3_realloc64 = Module['_sqlite3_realloc64'] =\n        wasmExports['sqlite3_realloc64'])(a0, a1));\n    var _sqlite3_value_text = (Module['_sqlite3_value_text'] = (a0) =>\n      (_sqlite3_value_text = Module['_sqlite3_value_text'] =\n        wasmExports['sqlite3_value_text'])(a0));\n    var _sqlite3_randomness = (Module['_sqlite3_randomness'] = (a0, a1) =>\n      (_sqlite3_randomness = Module['_sqlite3_randomness'] =\n        wasmExports['sqlite3_randomness'])(a0, a1));\n    var _sqlite3_stricmp = (Module['_sqlite3_stricmp'] = (a0, a1) =>\n      (_sqlite3_stricmp = Module['_sqlite3_stricmp'] =\n        wasmExports['sqlite3_stricmp'])(a0, a1));\n    var _sqlite3_strnicmp = (Module['_sqlite3_strnicmp'] = (a0, a1, a2) =>\n      (_sqlite3_strnicmp = Module['_sqlite3_strnicmp'] =\n        wasmExports['sqlite3_strnicmp'])(a0, a1, a2));\n    var _sqlite3_uri_parameter = (Module['_sqlite3_uri_parameter'] = (a0, a1) =>\n      (_sqlite3_uri_parameter = Module['_sqlite3_uri_parameter'] =\n        wasmExports['sqlite3_uri_parameter'])(a0, a1));\n    var _sqlite3_uri_boolean = (Module['_sqlite3_uri_boolean'] = (a0, a1, a2) =>\n      (_sqlite3_uri_boolean = Module['_sqlite3_uri_boolean'] =\n        wasmExports['sqlite3_uri_boolean'])(a0, a1, a2));\n    var _sqlite3_serialize = (Module['_sqlite3_serialize'] = (a0, a1, a2, a3) =>\n      (_sqlite3_serialize = Module['_sqlite3_serialize'] =\n        wasmExports['sqlite3_serialize'])(a0, a1, a2, a3));\n    var _sqlite3_prepare_v2 = (Module['_sqlite3_prepare_v2'] = (\n      a0,\n      a1,\n      a2,\n      a3,\n      a4,\n    ) =>\n      (_sqlite3_prepare_v2 = Module['_sqlite3_prepare_v2'] =\n        wasmExports['sqlite3_prepare_v2'])(a0, a1, a2, a3, a4));\n    var _sqlite3_step = (Module['_sqlite3_step'] = (a0) =>\n      (_sqlite3_step = Module['_sqlite3_step'] = wasmExports['sqlite3_step'])(\n        a0,\n      ));\n    var _sqlite3_column_int64 = (Module['_sqlite3_column_int64'] = (a0, a1) =>\n      (_sqlite3_column_int64 = Module['_sqlite3_column_int64'] =\n        wasmExports['sqlite3_column_int64'])(a0, a1));\n    var _sqlite3_reset = (Module['_sqlite3_reset'] = (a0) =>\n      (_sqlite3_reset = Module['_sqlite3_reset'] =\n        wasmExports['sqlite3_reset'])(a0));\n    var _sqlite3_exec = (Module['_sqlite3_exec'] = (a0, a1, a2, a3, a4) =>\n      (_sqlite3_exec = Module['_sqlite3_exec'] = wasmExports['sqlite3_exec'])(\n        a0,\n        a1,\n        a2,\n        a3,\n        a4,\n      ));\n    var _sqlite3_column_int = (Module['_sqlite3_column_int'] = (a0, a1) =>\n      (_sqlite3_column_int = Module['_sqlite3_column_int'] =\n        wasmExports['sqlite3_column_int'])(a0, a1));\n    var _sqlite3_finalize = (Module['_sqlite3_finalize'] = (a0) =>\n      (_sqlite3_finalize = Module['_sqlite3_finalize'] =\n        wasmExports['sqlite3_finalize'])(a0));\n    var _sqlite3_file_control = (Module['_sqlite3_file_control'] = (\n      a0,\n      a1,\n      a2,\n      a3,\n    ) =>\n      (_sqlite3_file_control = Module['_sqlite3_file_control'] =\n        wasmExports['sqlite3_file_control'])(a0, a1, a2, a3));\n    var _sqlite3_column_name = (Module['_sqlite3_column_name'] = (a0, a1) =>\n      (_sqlite3_column_name = Module['_sqlite3_column_name'] =\n        wasmExports['sqlite3_column_name'])(a0, a1));\n    var _sqlite3_column_text = (Module['_sqlite3_column_text'] = (a0, a1) =>\n      (_sqlite3_column_text = Module['_sqlite3_column_text'] =\n        wasmExports['sqlite3_column_text'])(a0, a1));\n    var _sqlite3_column_type = (Module['_sqlite3_column_type'] = (a0, a1) =>\n      (_sqlite3_column_type = Module['_sqlite3_column_type'] =\n        wasmExports['sqlite3_column_type'])(a0, a1));\n    var _sqlite3_errmsg = (Module['_sqlite3_errmsg'] = (a0) =>\n      (_sqlite3_errmsg = Module['_sqlite3_errmsg'] =\n        wasmExports['sqlite3_errmsg'])(a0));\n    var _sqlite3_deserialize = (Module['_sqlite3_deserialize'] = (\n      a0,\n      a1,\n      a2,\n      a3,\n      a4,\n      a5,\n    ) =>\n      (_sqlite3_deserialize = Module['_sqlite3_deserialize'] =\n        wasmExports['sqlite3_deserialize'])(a0, a1, a2, a3, a4, a5));\n    var _sqlite3_clear_bindings = (Module['_sqlite3_clear_bindings'] = (a0) =>\n      (_sqlite3_clear_bindings = Module['_sqlite3_clear_bindings'] =\n        wasmExports['sqlite3_clear_bindings'])(a0));\n    var _sqlite3_value_blob = (Module['_sqlite3_value_blob'] = (a0) =>\n      (_sqlite3_value_blob = Module['_sqlite3_value_blob'] =\n        wasmExports['sqlite3_value_blob'])(a0));\n    var _sqlite3_value_bytes = (Module['_sqlite3_value_bytes'] = (a0) =>\n      (_sqlite3_value_bytes = Module['_sqlite3_value_bytes'] =\n        wasmExports['sqlite3_value_bytes'])(a0));\n    var _sqlite3_value_double = (Module['_sqlite3_value_double'] = (a0) =>\n      (_sqlite3_value_double = Module['_sqlite3_value_double'] =\n        wasmExports['sqlite3_value_double'])(a0));\n    var _sqlite3_value_int = (Module['_sqlite3_value_int'] = (a0) =>\n      (_sqlite3_value_int = Module['_sqlite3_value_int'] =\n        wasmExports['sqlite3_value_int'])(a0));\n    var _sqlite3_value_int64 = (Module['_sqlite3_value_int64'] = (a0) =>\n      (_sqlite3_value_int64 = Module['_sqlite3_value_int64'] =\n        wasmExports['sqlite3_value_int64'])(a0));\n    var _sqlite3_value_subtype = (Module['_sqlite3_value_subtype'] = (a0) =>\n      (_sqlite3_value_subtype = Module['_sqlite3_value_subtype'] =\n        wasmExports['sqlite3_value_subtype'])(a0));\n    var _sqlite3_value_pointer = (Module['_sqlite3_value_pointer'] = (a0, a1) =>\n      (_sqlite3_value_pointer = Module['_sqlite3_value_pointer'] =\n        wasmExports['sqlite3_value_pointer'])(a0, a1));\n    var _sqlite3_value_type = (Module['_sqlite3_value_type'] = (a0) =>\n      (_sqlite3_value_type = Module['_sqlite3_value_type'] =\n        wasmExports['sqlite3_value_type'])(a0));\n    var _sqlite3_value_nochange = (Module['_sqlite3_value_nochange'] = (a0) =>\n      (_sqlite3_value_nochange = Module['_sqlite3_value_nochange'] =\n        wasmExports['sqlite3_value_nochange'])(a0));\n    var _sqlite3_value_frombind = (Module['_sqlite3_value_frombind'] = (a0) =>\n      (_sqlite3_value_frombind = Module['_sqlite3_value_frombind'] =\n        wasmExports['sqlite3_value_frombind'])(a0));\n    var _sqlite3_value_dup = (Module['_sqlite3_value_dup'] = (a0) =>\n      (_sqlite3_value_dup = Module['_sqlite3_value_dup'] =\n        wasmExports['sqlite3_value_dup'])(a0));\n    var _sqlite3_value_free = (Module['_sqlite3_value_free'] = (a0) =>\n      (_sqlite3_value_free = Module['_sqlite3_value_free'] =\n        wasmExports['sqlite3_value_free'])(a0));\n    var _sqlite3_result_blob = (Module['_sqlite3_result_blob'] = (\n      a0,\n      a1,\n      a2,\n      a3,\n    ) =>\n      (_sqlite3_result_blob = Module['_sqlite3_result_blob'] =\n        wasmExports['sqlite3_result_blob'])(a0, a1, a2, a3));\n    var _sqlite3_result_error_toobig = (Module['_sqlite3_result_error_toobig'] =\n      (a0) =>\n        (_sqlite3_result_error_toobig = Module['_sqlite3_result_error_toobig'] =\n          wasmExports['sqlite3_result_error_toobig'])(a0));\n    var _sqlite3_result_error_nomem = (Module['_sqlite3_result_error_nomem'] = (\n      a0,\n    ) =>\n      (_sqlite3_result_error_nomem = Module['_sqlite3_result_error_nomem'] =\n        wasmExports['sqlite3_result_error_nomem'])(a0));\n    var _sqlite3_result_double = (Module['_sqlite3_result_double'] = (a0, a1) =>\n      (_sqlite3_result_double = Module['_sqlite3_result_double'] =\n        wasmExports['sqlite3_result_double'])(a0, a1));\n    var _sqlite3_result_error = (Module['_sqlite3_result_error'] = (\n      a0,\n      a1,\n      a2,\n    ) =>\n      (_sqlite3_result_error = Module['_sqlite3_result_error'] =\n        wasmExports['sqlite3_result_error'])(a0, a1, a2));\n    var _sqlite3_result_int = (Module['_sqlite3_result_int'] = (a0, a1) =>\n      (_sqlite3_result_int = Module['_sqlite3_result_int'] =\n        wasmExports['sqlite3_result_int'])(a0, a1));\n    var _sqlite3_result_int64 = (Module['_sqlite3_result_int64'] = (a0, a1) =>\n      (_sqlite3_result_int64 = Module['_sqlite3_result_int64'] =\n        wasmExports['sqlite3_result_int64'])(a0, a1));\n    var _sqlite3_result_null = (Module['_sqlite3_result_null'] = (a0) =>\n      (_sqlite3_result_null = Module['_sqlite3_result_null'] =\n        wasmExports['sqlite3_result_null'])(a0));\n    var _sqlite3_result_pointer = (Module['_sqlite3_result_pointer'] = (\n      a0,\n      a1,\n      a2,\n      a3,\n    ) =>\n      (_sqlite3_result_pointer = Module['_sqlite3_result_pointer'] =\n        wasmExports['sqlite3_result_pointer'])(a0, a1, a2, a3));\n    var _sqlite3_result_subtype = (Module['_sqlite3_result_subtype'] = (\n      a0,\n      a1,\n    ) =>\n      (_sqlite3_result_subtype = Module['_sqlite3_result_subtype'] =\n        wasmExports['sqlite3_result_subtype'])(a0, a1));\n    var _sqlite3_result_text = (Module['_sqlite3_result_text'] = (\n      a0,\n      a1,\n      a2,\n      a3,\n    ) =>\n      (_sqlite3_result_text = Module['_sqlite3_result_text'] =\n        wasmExports['sqlite3_result_text'])(a0, a1, a2, a3));\n    var _sqlite3_result_zeroblob = (Module['_sqlite3_result_zeroblob'] = (\n      a0,\n      a1,\n    ) =>\n      (_sqlite3_result_zeroblob = Module['_sqlite3_result_zeroblob'] =\n        wasmExports['sqlite3_result_zeroblob'])(a0, a1));\n    var _sqlite3_result_zeroblob64 = (Module['_sqlite3_result_zeroblob64'] = (\n      a0,\n      a1,\n    ) =>\n      (_sqlite3_result_zeroblob64 = Module['_sqlite3_result_zeroblob64'] =\n        wasmExports['sqlite3_result_zeroblob64'])(a0, a1));\n    var _sqlite3_result_error_code = (Module['_sqlite3_result_error_code'] = (\n      a0,\n      a1,\n    ) =>\n      (_sqlite3_result_error_code = Module['_sqlite3_result_error_code'] =\n        wasmExports['sqlite3_result_error_code'])(a0, a1));\n    var _sqlite3_user_data = (Module['_sqlite3_user_data'] = (a0) =>\n      (_sqlite3_user_data = Module['_sqlite3_user_data'] =\n        wasmExports['sqlite3_user_data'])(a0));\n    var _sqlite3_context_db_handle = (Module['_sqlite3_context_db_handle'] = (\n      a0,\n    ) =>\n      (_sqlite3_context_db_handle = Module['_sqlite3_context_db_handle'] =\n        wasmExports['sqlite3_context_db_handle'])(a0));\n    var _sqlite3_vtab_nochange = (Module['_sqlite3_vtab_nochange'] = (a0) =>\n      (_sqlite3_vtab_nochange = Module['_sqlite3_vtab_nochange'] =\n        wasmExports['sqlite3_vtab_nochange'])(a0));\n    var _sqlite3_vtab_in_first = (Module['_sqlite3_vtab_in_first'] = (a0, a1) =>\n      (_sqlite3_vtab_in_first = Module['_sqlite3_vtab_in_first'] =\n        wasmExports['sqlite3_vtab_in_first'])(a0, a1));\n    var _sqlite3_vtab_in_next = (Module['_sqlite3_vtab_in_next'] = (a0, a1) =>\n      (_sqlite3_vtab_in_next = Module['_sqlite3_vtab_in_next'] =\n        wasmExports['sqlite3_vtab_in_next'])(a0, a1));\n    var _sqlite3_aggregate_context = (Module['_sqlite3_aggregate_context'] = (\n      a0,\n      a1,\n    ) =>\n      (_sqlite3_aggregate_context = Module['_sqlite3_aggregate_context'] =\n        wasmExports['sqlite3_aggregate_context'])(a0, a1));\n    var _sqlite3_get_auxdata = (Module['_sqlite3_get_auxdata'] = (a0, a1) =>\n      (_sqlite3_get_auxdata = Module['_sqlite3_get_auxdata'] =\n        wasmExports['sqlite3_get_auxdata'])(a0, a1));\n    var _sqlite3_set_auxdata = (Module['_sqlite3_set_auxdata'] = (\n      a0,\n      a1,\n      a2,\n      a3,\n    ) =>\n      (_sqlite3_set_auxdata = Module['_sqlite3_set_auxdata'] =\n        wasmExports['sqlite3_set_auxdata'])(a0, a1, a2, a3));\n    var _sqlite3_column_count = (Module['_sqlite3_column_count'] = (a0) =>\n      (_sqlite3_column_count = Module['_sqlite3_column_count'] =\n        wasmExports['sqlite3_column_count'])(a0));\n    var _sqlite3_data_count = (Module['_sqlite3_data_count'] = (a0) =>\n      (_sqlite3_data_count = Module['_sqlite3_data_count'] =\n        wasmExports['sqlite3_data_count'])(a0));\n    var _sqlite3_column_blob = (Module['_sqlite3_column_blob'] = (a0, a1) =>\n      (_sqlite3_column_blob = Module['_sqlite3_column_blob'] =\n        wasmExports['sqlite3_column_blob'])(a0, a1));\n    var _sqlite3_column_bytes = (Module['_sqlite3_column_bytes'] = (a0, a1) =>\n      (_sqlite3_column_bytes = Module['_sqlite3_column_bytes'] =\n        wasmExports['sqlite3_column_bytes'])(a0, a1));\n    var _sqlite3_column_double = (Module['_sqlite3_column_double'] = (a0, a1) =>\n      (_sqlite3_column_double = Module['_sqlite3_column_double'] =\n        wasmExports['sqlite3_column_double'])(a0, a1));\n    var _sqlite3_column_value = (Module['_sqlite3_column_value'] = (a0, a1) =>\n      (_sqlite3_column_value = Module['_sqlite3_column_value'] =\n        wasmExports['sqlite3_column_value'])(a0, a1));\n    var _sqlite3_column_decltype = (Module['_sqlite3_column_decltype'] = (\n      a0,\n      a1,\n    ) =>\n      (_sqlite3_column_decltype = Module['_sqlite3_column_decltype'] =\n        wasmExports['sqlite3_column_decltype'])(a0, a1));\n    var _sqlite3_bind_blob = (Module['_sqlite3_bind_blob'] = (\n      a0,\n      a1,\n      a2,\n      a3,\n      a4,\n    ) =>\n      (_sqlite3_bind_blob = Module['_sqlite3_bind_blob'] =\n        wasmExports['sqlite3_bind_blob'])(a0, a1, a2, a3, a4));\n    var _sqlite3_bind_double = (Module['_sqlite3_bind_double'] = (a0, a1, a2) =>\n      (_sqlite3_bind_double = Module['_sqlite3_bind_double'] =\n        wasmExports['sqlite3_bind_double'])(a0, a1, a2));\n    var _sqlite3_bind_int = (Module['_sqlite3_bind_int'] = (a0, a1, a2) =>\n      (_sqlite3_bind_int = Module['_sqlite3_bind_int'] =\n        wasmExports['sqlite3_bind_int'])(a0, a1, a2));\n    var _sqlite3_bind_int64 = (Module['_sqlite3_bind_int64'] = (a0, a1, a2) =>\n      (_sqlite3_bind_int64 = Module['_sqlite3_bind_int64'] =\n        wasmExports['sqlite3_bind_int64'])(a0, a1, a2));\n    var _sqlite3_bind_null = (Module['_sqlite3_bind_null'] = (a0, a1) =>\n      (_sqlite3_bind_null = Module['_sqlite3_bind_null'] =\n        wasmExports['sqlite3_bind_null'])(a0, a1));\n    var _sqlite3_bind_pointer = (Module['_sqlite3_bind_pointer'] = (\n      a0,\n      a1,\n      a2,\n      a3,\n      a4,\n    ) =>\n      (_sqlite3_bind_pointer = Module['_sqlite3_bind_pointer'] =\n        wasmExports['sqlite3_bind_pointer'])(a0, a1, a2, a3, a4));\n    var _sqlite3_bind_text = (Module['_sqlite3_bind_text'] = (\n      a0,\n      a1,\n      a2,\n      a3,\n      a4,\n    ) =>\n      (_sqlite3_bind_text = Module['_sqlite3_bind_text'] =\n        wasmExports['sqlite3_bind_text'])(a0, a1, a2, a3, a4));\n    var _sqlite3_bind_parameter_count = (Module[\n      '_sqlite3_bind_parameter_count'\n    ] = (a0) =>\n      (_sqlite3_bind_parameter_count = Module['_sqlite3_bind_parameter_count'] =\n        wasmExports['sqlite3_bind_parameter_count'])(a0));\n    var _sqlite3_bind_parameter_name = (Module['_sqlite3_bind_parameter_name'] =\n      (a0, a1) =>\n        (_sqlite3_bind_parameter_name = Module['_sqlite3_bind_parameter_name'] =\n          wasmExports['sqlite3_bind_parameter_name'])(a0, a1));\n    var _sqlite3_bind_parameter_index = (Module[\n      '_sqlite3_bind_parameter_index'\n    ] = (a0, a1) =>\n      (_sqlite3_bind_parameter_index = Module['_sqlite3_bind_parameter_index'] =\n        wasmExports['sqlite3_bind_parameter_index'])(a0, a1));\n    var _sqlite3_db_handle = (Module['_sqlite3_db_handle'] = (a0) =>\n      (_sqlite3_db_handle = Module['_sqlite3_db_handle'] =\n        wasmExports['sqlite3_db_handle'])(a0));\n    var _sqlite3_stmt_readonly = (Module['_sqlite3_stmt_readonly'] = (a0) =>\n      (_sqlite3_stmt_readonly = Module['_sqlite3_stmt_readonly'] =\n        wasmExports['sqlite3_stmt_readonly'])(a0));\n    var _sqlite3_stmt_isexplain = (Module['_sqlite3_stmt_isexplain'] = (a0) =>\n      (_sqlite3_stmt_isexplain = Module['_sqlite3_stmt_isexplain'] =\n        wasmExports['sqlite3_stmt_isexplain'])(a0));\n    var _sqlite3_stmt_explain = (Module['_sqlite3_stmt_explain'] = (a0, a1) =>\n      (_sqlite3_stmt_explain = Module['_sqlite3_stmt_explain'] =\n        wasmExports['sqlite3_stmt_explain'])(a0, a1));\n    var _sqlite3_stmt_busy = (Module['_sqlite3_stmt_busy'] = (a0) =>\n      (_sqlite3_stmt_busy = Module['_sqlite3_stmt_busy'] =\n        wasmExports['sqlite3_stmt_busy'])(a0));\n    var _sqlite3_stmt_status = (Module['_sqlite3_stmt_status'] = (a0, a1, a2) =>\n      (_sqlite3_stmt_status = Module['_sqlite3_stmt_status'] =\n        wasmExports['sqlite3_stmt_status'])(a0, a1, a2));\n    var _sqlite3_sql = (Module['_sqlite3_sql'] = (a0) =>\n      (_sqlite3_sql = Module['_sqlite3_sql'] = wasmExports['sqlite3_sql'])(a0));\n    var _sqlite3_expanded_sql = (Module['_sqlite3_expanded_sql'] = (a0) =>\n      (_sqlite3_expanded_sql = Module['_sqlite3_expanded_sql'] =\n        wasmExports['sqlite3_expanded_sql'])(a0));\n    var _sqlite3_preupdate_old = (Module['_sqlite3_preupdate_old'] = (\n      a0,\n      a1,\n      a2,\n    ) =>\n      (_sqlite3_preupdate_old = Module['_sqlite3_preupdate_old'] =\n        wasmExports['sqlite3_preupdate_old'])(a0, a1, a2));\n    var _sqlite3_preupdate_count = (Module['_sqlite3_preupdate_count'] = (a0) =>\n      (_sqlite3_preupdate_count = Module['_sqlite3_preupdate_count'] =\n        wasmExports['sqlite3_preupdate_count'])(a0));\n    var _sqlite3_preupdate_depth = (Module['_sqlite3_preupdate_depth'] = (a0) =>\n      (_sqlite3_preupdate_depth = Module['_sqlite3_preupdate_depth'] =\n        wasmExports['sqlite3_preupdate_depth'])(a0));\n    var _sqlite3_preupdate_blobwrite = (Module['_sqlite3_preupdate_blobwrite'] =\n      (a0) =>\n        (_sqlite3_preupdate_blobwrite = Module['_sqlite3_preupdate_blobwrite'] =\n          wasmExports['sqlite3_preupdate_blobwrite'])(a0));\n    var _sqlite3_preupdate_new = (Module['_sqlite3_preupdate_new'] = (\n      a0,\n      a1,\n      a2,\n    ) =>\n      (_sqlite3_preupdate_new = Module['_sqlite3_preupdate_new'] =\n        wasmExports['sqlite3_preupdate_new'])(a0, a1, a2));\n    var _sqlite3_value_numeric_type = (Module['_sqlite3_value_numeric_type'] = (\n      a0,\n    ) =>\n      (_sqlite3_value_numeric_type = Module['_sqlite3_value_numeric_type'] =\n        wasmExports['sqlite3_value_numeric_type'])(a0));\n    var _sqlite3_set_authorizer = (Module['_sqlite3_set_authorizer'] = (\n      a0,\n      a1,\n      a2,\n    ) =>\n      (_sqlite3_set_authorizer = Module['_sqlite3_set_authorizer'] =\n        wasmExports['sqlite3_set_authorizer'])(a0, a1, a2));\n    var _sqlite3_strglob = (Module['_sqlite3_strglob'] = (a0, a1) =>\n      (_sqlite3_strglob = Module['_sqlite3_strglob'] =\n        wasmExports['sqlite3_strglob'])(a0, a1));\n    var _sqlite3_strlike = (Module['_sqlite3_strlike'] = (a0, a1, a2) =>\n      (_sqlite3_strlike = Module['_sqlite3_strlike'] =\n        wasmExports['sqlite3_strlike'])(a0, a1, a2));\n    var _sqlite3_auto_extension = (Module['_sqlite3_auto_extension'] = (a0) =>\n      (_sqlite3_auto_extension = Module['_sqlite3_auto_extension'] =\n        wasmExports['sqlite3_auto_extension'])(a0));\n    var _sqlite3_cancel_auto_extension = (Module[\n      '_sqlite3_cancel_auto_extension'\n    ] = (a0) =>\n      (_sqlite3_cancel_auto_extension = Module[\n        '_sqlite3_cancel_auto_extension'\n      ] =\n        wasmExports['sqlite3_cancel_auto_extension'])(a0));\n    var _sqlite3_reset_auto_extension = (Module[\n      '_sqlite3_reset_auto_extension'\n    ] = () =>\n      (_sqlite3_reset_auto_extension = Module['_sqlite3_reset_auto_extension'] =\n        wasmExports['sqlite3_reset_auto_extension'])());\n    var _sqlite3_prepare_v3 = (Module['_sqlite3_prepare_v3'] = (\n      a0,\n      a1,\n      a2,\n      a3,\n      a4,\n      a5,\n    ) =>\n      (_sqlite3_prepare_v3 = Module['_sqlite3_prepare_v3'] =\n        wasmExports['sqlite3_prepare_v3'])(a0, a1, a2, a3, a4, a5));\n    var _sqlite3_create_module = (Module['_sqlite3_create_module'] = (\n      a0,\n      a1,\n      a2,\n      a3,\n    ) =>\n      (_sqlite3_create_module = Module['_sqlite3_create_module'] =\n        wasmExports['sqlite3_create_module'])(a0, a1, a2, a3));\n    var _sqlite3_create_module_v2 = (Module['_sqlite3_create_module_v2'] = (\n      a0,\n      a1,\n      a2,\n      a3,\n      a4,\n    ) =>\n      (_sqlite3_create_module_v2 = Module['_sqlite3_create_module_v2'] =\n        wasmExports['sqlite3_create_module_v2'])(a0, a1, a2, a3, a4));\n    var _sqlite3_drop_modules = (Module['_sqlite3_drop_modules'] = (a0, a1) =>\n      (_sqlite3_drop_modules = Module['_sqlite3_drop_modules'] =\n        wasmExports['sqlite3_drop_modules'])(a0, a1));\n    var _sqlite3_declare_vtab = (Module['_sqlite3_declare_vtab'] = (a0, a1) =>\n      (_sqlite3_declare_vtab = Module['_sqlite3_declare_vtab'] =\n        wasmExports['sqlite3_declare_vtab'])(a0, a1));\n    var _sqlite3_vtab_on_conflict = (Module['_sqlite3_vtab_on_conflict'] = (\n      a0,\n    ) =>\n      (_sqlite3_vtab_on_conflict = Module['_sqlite3_vtab_on_conflict'] =\n        wasmExports['sqlite3_vtab_on_conflict'])(a0));\n    var _sqlite3_vtab_collation = (Module['_sqlite3_vtab_collation'] = (\n      a0,\n      a1,\n    ) =>\n      (_sqlite3_vtab_collation = Module['_sqlite3_vtab_collation'] =\n        wasmExports['sqlite3_vtab_collation'])(a0, a1));\n    var _sqlite3_vtab_in = (Module['_sqlite3_vtab_in'] = (a0, a1, a2) =>\n      (_sqlite3_vtab_in = Module['_sqlite3_vtab_in'] =\n        wasmExports['sqlite3_vtab_in'])(a0, a1, a2));\n    var _sqlite3_vtab_rhs_value = (Module['_sqlite3_vtab_rhs_value'] = (\n      a0,\n      a1,\n      a2,\n    ) =>\n      (_sqlite3_vtab_rhs_value = Module['_sqlite3_vtab_rhs_value'] =\n        wasmExports['sqlite3_vtab_rhs_value'])(a0, a1, a2));\n    var _sqlite3_vtab_distinct = (Module['_sqlite3_vtab_distinct'] = (a0) =>\n      (_sqlite3_vtab_distinct = Module['_sqlite3_vtab_distinct'] =\n        wasmExports['sqlite3_vtab_distinct'])(a0));\n    var _sqlite3_keyword_name = (Module['_sqlite3_keyword_name'] = (\n      a0,\n      a1,\n      a2,\n    ) =>\n      (_sqlite3_keyword_name = Module['_sqlite3_keyword_name'] =\n        wasmExports['sqlite3_keyword_name'])(a0, a1, a2));\n    var _sqlite3_keyword_count = (Module['_sqlite3_keyword_count'] = () =>\n      (_sqlite3_keyword_count = Module['_sqlite3_keyword_count'] =\n        wasmExports['sqlite3_keyword_count'])());\n    var _sqlite3_keyword_check = (Module['_sqlite3_keyword_check'] = (a0, a1) =>\n      (_sqlite3_keyword_check = Module['_sqlite3_keyword_check'] =\n        wasmExports['sqlite3_keyword_check'])(a0, a1));\n    var _sqlite3_complete = (Module['_sqlite3_complete'] = (a0) =>\n      (_sqlite3_complete = Module['_sqlite3_complete'] =\n        wasmExports['sqlite3_complete'])(a0));\n    var _sqlite3_libversion = (Module['_sqlite3_libversion'] = () =>\n      (_sqlite3_libversion = Module['_sqlite3_libversion'] =\n        wasmExports['sqlite3_libversion'])());\n    var _sqlite3_libversion_number = (Module['_sqlite3_libversion_number'] =\n      () =>\n        (_sqlite3_libversion_number = Module['_sqlite3_libversion_number'] =\n          wasmExports['sqlite3_libversion_number'])());\n    var _sqlite3_shutdown = (Module['_sqlite3_shutdown'] = () =>\n      (_sqlite3_shutdown = Module['_sqlite3_shutdown'] =\n        wasmExports['sqlite3_shutdown'])());\n    var _sqlite3_last_insert_rowid = (Module['_sqlite3_last_insert_rowid'] = (\n      a0,\n    ) =>\n      (_sqlite3_last_insert_rowid = Module['_sqlite3_last_insert_rowid'] =\n        wasmExports['sqlite3_last_insert_rowid'])(a0));\n    var _sqlite3_set_last_insert_rowid = (Module[\n      '_sqlite3_set_last_insert_rowid'\n    ] = (a0, a1) =>\n      (_sqlite3_set_last_insert_rowid = Module[\n        '_sqlite3_set_last_insert_rowid'\n      ] =\n        wasmExports['sqlite3_set_last_insert_rowid'])(a0, a1));\n    var _sqlite3_changes64 = (Module['_sqlite3_changes64'] = (a0) =>\n      (_sqlite3_changes64 = Module['_sqlite3_changes64'] =\n        wasmExports['sqlite3_changes64'])(a0));\n    var _sqlite3_changes = (Module['_sqlite3_changes'] = (a0) =>\n      (_sqlite3_changes = Module['_sqlite3_changes'] =\n        wasmExports['sqlite3_changes'])(a0));\n    var _sqlite3_total_changes64 = (Module['_sqlite3_total_changes64'] = (a0) =>\n      (_sqlite3_total_changes64 = Module['_sqlite3_total_changes64'] =\n        wasmExports['sqlite3_total_changes64'])(a0));\n    var _sqlite3_total_changes = (Module['_sqlite3_total_changes'] = (a0) =>\n      (_sqlite3_total_changes = Module['_sqlite3_total_changes'] =\n        wasmExports['sqlite3_total_changes'])(a0));\n    var _sqlite3_txn_state = (Module['_sqlite3_txn_state'] = (a0, a1) =>\n      (_sqlite3_txn_state = Module['_sqlite3_txn_state'] =\n        wasmExports['sqlite3_txn_state'])(a0, a1));\n    var _sqlite3_close_v2 = (Module['_sqlite3_close_v2'] = (a0) =>\n      (_sqlite3_close_v2 = Module['_sqlite3_close_v2'] =\n        wasmExports['sqlite3_close_v2'])(a0));\n    var _sqlite3_busy_handler = (Module['_sqlite3_busy_handler'] = (\n      a0,\n      a1,\n      a2,\n    ) =>\n      (_sqlite3_busy_handler = Module['_sqlite3_busy_handler'] =\n        wasmExports['sqlite3_busy_handler'])(a0, a1, a2));\n    var _sqlite3_progress_handler = (Module['_sqlite3_progress_handler'] = (\n      a0,\n      a1,\n      a2,\n      a3,\n    ) =>\n      (_sqlite3_progress_handler = Module['_sqlite3_progress_handler'] =\n        wasmExports['sqlite3_progress_handler'])(a0, a1, a2, a3));\n    var _sqlite3_busy_timeout = (Module['_sqlite3_busy_timeout'] = (a0, a1) =>\n      (_sqlite3_busy_timeout = Module['_sqlite3_busy_timeout'] =\n        wasmExports['sqlite3_busy_timeout'])(a0, a1));\n    var _sqlite3_interrupt = (Module['_sqlite3_interrupt'] = (a0) =>\n      (_sqlite3_interrupt = Module['_sqlite3_interrupt'] =\n        wasmExports['sqlite3_interrupt'])(a0));\n    var _sqlite3_is_interrupted = (Module['_sqlite3_is_interrupted'] = (a0) =>\n      (_sqlite3_is_interrupted = Module['_sqlite3_is_interrupted'] =\n        wasmExports['sqlite3_is_interrupted'])(a0));\n    var _sqlite3_create_function = (Module['_sqlite3_create_function'] = (\n      a0,\n      a1,\n      a2,\n      a3,\n      a4,\n      a5,\n      a6,\n      a7,\n    ) =>\n      (_sqlite3_create_function = Module['_sqlite3_create_function'] =\n        wasmExports['sqlite3_create_function'])(\n        a0,\n        a1,\n        a2,\n        a3,\n        a4,\n        a5,\n        a6,\n        a7,\n      ));\n    var _sqlite3_create_function_v2 = (Module['_sqlite3_create_function_v2'] = (\n      a0,\n      a1,\n      a2,\n      a3,\n      a4,\n      a5,\n      a6,\n      a7,\n      a8,\n    ) =>\n      (_sqlite3_create_function_v2 = Module['_sqlite3_create_function_v2'] =\n        wasmExports['sqlite3_create_function_v2'])(\n        a0,\n        a1,\n        a2,\n        a3,\n        a4,\n        a5,\n        a6,\n        a7,\n        a8,\n      ));\n    var _sqlite3_create_window_function = (Module[\n      '_sqlite3_create_window_function'\n    ] = (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) =>\n      (_sqlite3_create_window_function = Module[\n        '_sqlite3_create_window_function'\n      ] =\n        wasmExports['sqlite3_create_window_function'])(\n        a0,\n        a1,\n        a2,\n        a3,\n        a4,\n        a5,\n        a6,\n        a7,\n        a8,\n        a9,\n      ));\n    var _sqlite3_overload_function = (Module['_sqlite3_overload_function'] = (\n      a0,\n      a1,\n      a2,\n    ) =>\n      (_sqlite3_overload_function = Module['_sqlite3_overload_function'] =\n        wasmExports['sqlite3_overload_function'])(a0, a1, a2));\n    var _sqlite3_trace_v2 = (Module['_sqlite3_trace_v2'] = (a0, a1, a2, a3) =>\n      (_sqlite3_trace_v2 = Module['_sqlite3_trace_v2'] =\n        wasmExports['sqlite3_trace_v2'])(a0, a1, a2, a3));\n    var _sqlite3_commit_hook = (Module['_sqlite3_commit_hook'] = (a0, a1, a2) =>\n      (_sqlite3_commit_hook = Module['_sqlite3_commit_hook'] =\n        wasmExports['sqlite3_commit_hook'])(a0, a1, a2));\n    var _sqlite3_update_hook = (Module['_sqlite3_update_hook'] = (a0, a1, a2) =>\n      (_sqlite3_update_hook = Module['_sqlite3_update_hook'] =\n        wasmExports['sqlite3_update_hook'])(a0, a1, a2));\n    var _sqlite3_rollback_hook = (Module['_sqlite3_rollback_hook'] = (\n      a0,\n      a1,\n      a2,\n    ) =>\n      (_sqlite3_rollback_hook = Module['_sqlite3_rollback_hook'] =\n        wasmExports['sqlite3_rollback_hook'])(a0, a1, a2));\n    var _sqlite3_preupdate_hook = (Module['_sqlite3_preupdate_hook'] = (\n      a0,\n      a1,\n      a2,\n    ) =>\n      (_sqlite3_preupdate_hook = Module['_sqlite3_preupdate_hook'] =\n        wasmExports['sqlite3_preupdate_hook'])(a0, a1, a2));\n    var _sqlite3_error_offset = (Module['_sqlite3_error_offset'] = (a0) =>\n      (_sqlite3_error_offset = Module['_sqlite3_error_offset'] =\n        wasmExports['sqlite3_error_offset'])(a0));\n    var _sqlite3_errcode = (Module['_sqlite3_errcode'] = (a0) =>\n      (_sqlite3_errcode = Module['_sqlite3_errcode'] =\n        wasmExports['sqlite3_errcode'])(a0));\n    var _sqlite3_extended_errcode = (Module['_sqlite3_extended_errcode'] = (\n      a0,\n    ) =>\n      (_sqlite3_extended_errcode = Module['_sqlite3_extended_errcode'] =\n        wasmExports['sqlite3_extended_errcode'])(a0));\n    var _sqlite3_errstr = (Module['_sqlite3_errstr'] = (a0) =>\n      (_sqlite3_errstr = Module['_sqlite3_errstr'] =\n        wasmExports['sqlite3_errstr'])(a0));\n    var _sqlite3_limit = (Module['_sqlite3_limit'] = (a0, a1, a2) =>\n      (_sqlite3_limit = Module['_sqlite3_limit'] =\n        wasmExports['sqlite3_limit'])(a0, a1, a2));\n    var _sqlite3_open = (Module['_sqlite3_open'] = (a0, a1) =>\n      (_sqlite3_open = Module['_sqlite3_open'] = wasmExports['sqlite3_open'])(\n        a0,\n        a1,\n      ));\n    var _sqlite3_open_v2 = (Module['_sqlite3_open_v2'] = (a0, a1, a2, a3) =>\n      (_sqlite3_open_v2 = Module['_sqlite3_open_v2'] =\n        wasmExports['sqlite3_open_v2'])(a0, a1, a2, a3));\n    var _sqlite3_create_collation = (Module['_sqlite3_create_collation'] = (\n      a0,\n      a1,\n      a2,\n      a3,\n      a4,\n    ) =>\n      (_sqlite3_create_collation = Module['_sqlite3_create_collation'] =\n        wasmExports['sqlite3_create_collation'])(a0, a1, a2, a3, a4));\n    var _sqlite3_create_collation_v2 = (Module['_sqlite3_create_collation_v2'] =\n      (a0, a1, a2, a3, a4, a5) =>\n        (_sqlite3_create_collation_v2 = Module['_sqlite3_create_collation_v2'] =\n          wasmExports['sqlite3_create_collation_v2'])(a0, a1, a2, a3, a4, a5));\n    var _sqlite3_collation_needed = (Module['_sqlite3_collation_needed'] = (\n      a0,\n      a1,\n      a2,\n    ) =>\n      (_sqlite3_collation_needed = Module['_sqlite3_collation_needed'] =\n        wasmExports['sqlite3_collation_needed'])(a0, a1, a2));\n    var _sqlite3_get_autocommit = (Module['_sqlite3_get_autocommit'] = (a0) =>\n      (_sqlite3_get_autocommit = Module['_sqlite3_get_autocommit'] =\n        wasmExports['sqlite3_get_autocommit'])(a0));\n    var _sqlite3_table_column_metadata = (Module[\n      '_sqlite3_table_column_metadata'\n    ] = (a0, a1, a2, a3, a4, a5, a6, a7, a8) =>\n      (_sqlite3_table_column_metadata = Module[\n        '_sqlite3_table_column_metadata'\n      ] =\n        wasmExports['sqlite3_table_column_metadata'])(\n        a0,\n        a1,\n        a2,\n        a3,\n        a4,\n        a5,\n        a6,\n        a7,\n        a8,\n      ));\n    var _sqlite3_extended_result_codes = (Module[\n      '_sqlite3_extended_result_codes'\n    ] = (a0, a1) =>\n      (_sqlite3_extended_result_codes = Module[\n        '_sqlite3_extended_result_codes'\n      ] =\n        wasmExports['sqlite3_extended_result_codes'])(a0, a1));\n    var _sqlite3_uri_key = (Module['_sqlite3_uri_key'] = (a0, a1) =>\n      (_sqlite3_uri_key = Module['_sqlite3_uri_key'] =\n        wasmExports['sqlite3_uri_key'])(a0, a1));\n    var _sqlite3_uri_int64 = (Module['_sqlite3_uri_int64'] = (a0, a1, a2) =>\n      (_sqlite3_uri_int64 = Module['_sqlite3_uri_int64'] =\n        wasmExports['sqlite3_uri_int64'])(a0, a1, a2));\n    var _sqlite3_db_name = (Module['_sqlite3_db_name'] = (a0, a1) =>\n      (_sqlite3_db_name = Module['_sqlite3_db_name'] =\n        wasmExports['sqlite3_db_name'])(a0, a1));\n    var _sqlite3_db_filename = (Module['_sqlite3_db_filename'] = (a0, a1) =>\n      (_sqlite3_db_filename = Module['_sqlite3_db_filename'] =\n        wasmExports['sqlite3_db_filename'])(a0, a1));\n    var _sqlite3_db_readonly = (Module['_sqlite3_db_readonly'] = (a0, a1) =>\n      (_sqlite3_db_readonly = Module['_sqlite3_db_readonly'] =\n        wasmExports['sqlite3_db_readonly'])(a0, a1));\n    var _sqlite3_compileoption_used = (Module['_sqlite3_compileoption_used'] = (\n      a0,\n    ) =>\n      (_sqlite3_compileoption_used = Module['_sqlite3_compileoption_used'] =\n        wasmExports['sqlite3_compileoption_used'])(a0));\n    var _sqlite3_compileoption_get = (Module['_sqlite3_compileoption_get'] = (\n      a0,\n    ) =>\n      (_sqlite3_compileoption_get = Module['_sqlite3_compileoption_get'] =\n        wasmExports['sqlite3_compileoption_get'])(a0));\n    var _sqlite3session_diff = (Module['_sqlite3session_diff'] = (\n      a0,\n      a1,\n      a2,\n      a3,\n    ) =>\n      (_sqlite3session_diff = Module['_sqlite3session_diff'] =\n        wasmExports['sqlite3session_diff'])(a0, a1, a2, a3));\n    var _sqlite3session_attach = (Module['_sqlite3session_attach'] = (a0, a1) =>\n      (_sqlite3session_attach = Module['_sqlite3session_attach'] =\n        wasmExports['sqlite3session_attach'])(a0, a1));\n    var _sqlite3session_create = (Module['_sqlite3session_create'] = (\n      a0,\n      a1,\n      a2,\n    ) =>\n      (_sqlite3session_create = Module['_sqlite3session_create'] =\n        wasmExports['sqlite3session_create'])(a0, a1, a2));\n    var _sqlite3session_delete = (Module['_sqlite3session_delete'] = (a0) =>\n      (_sqlite3session_delete = Module['_sqlite3session_delete'] =\n        wasmExports['sqlite3session_delete'])(a0));\n    var _sqlite3session_table_filter = (Module['_sqlite3session_table_filter'] =\n      (a0, a1, a2) =>\n        (_sqlite3session_table_filter = Module['_sqlite3session_table_filter'] =\n          wasmExports['sqlite3session_table_filter'])(a0, a1, a2));\n    var _sqlite3session_changeset = (Module['_sqlite3session_changeset'] = (\n      a0,\n      a1,\n      a2,\n    ) =>\n      (_sqlite3session_changeset = Module['_sqlite3session_changeset'] =\n        wasmExports['sqlite3session_changeset'])(a0, a1, a2));\n    var _sqlite3session_changeset_strm = (Module[\n      '_sqlite3session_changeset_strm'\n    ] = (a0, a1, a2) =>\n      (_sqlite3session_changeset_strm = Module[\n        '_sqlite3session_changeset_strm'\n      ] =\n        wasmExports['sqlite3session_changeset_strm'])(a0, a1, a2));\n    var _sqlite3session_patchset_strm = (Module[\n      '_sqlite3session_patchset_strm'\n    ] = (a0, a1, a2) =>\n      (_sqlite3session_patchset_strm = Module['_sqlite3session_patchset_strm'] =\n        wasmExports['sqlite3session_patchset_strm'])(a0, a1, a2));\n    var _sqlite3session_patchset = (Module['_sqlite3session_patchset'] = (\n      a0,\n      a1,\n      a2,\n    ) =>\n      (_sqlite3session_patchset = Module['_sqlite3session_patchset'] =\n        wasmExports['sqlite3session_patchset'])(a0, a1, a2));\n    var _sqlite3session_enable = (Module['_sqlite3session_enable'] = (a0, a1) =>\n      (_sqlite3session_enable = Module['_sqlite3session_enable'] =\n        wasmExports['sqlite3session_enable'])(a0, a1));\n    var _sqlite3session_indirect = (Module['_sqlite3session_indirect'] = (\n      a0,\n      a1,\n    ) =>\n      (_sqlite3session_indirect = Module['_sqlite3session_indirect'] =\n        wasmExports['sqlite3session_indirect'])(a0, a1));\n    var _sqlite3session_isempty = (Module['_sqlite3session_isempty'] = (a0) =>\n      (_sqlite3session_isempty = Module['_sqlite3session_isempty'] =\n        wasmExports['sqlite3session_isempty'])(a0));\n    var _sqlite3session_memory_used = (Module['_sqlite3session_memory_used'] = (\n      a0,\n    ) =>\n      (_sqlite3session_memory_used = Module['_sqlite3session_memory_used'] =\n        wasmExports['sqlite3session_memory_used'])(a0));\n    var _sqlite3session_object_config = (Module[\n      '_sqlite3session_object_config'\n    ] = (a0, a1, a2) =>\n      (_sqlite3session_object_config = Module['_sqlite3session_object_config'] =\n        wasmExports['sqlite3session_object_config'])(a0, a1, a2));\n    var _sqlite3session_changeset_size = (Module[\n      '_sqlite3session_changeset_size'\n    ] = (a0) =>\n      (_sqlite3session_changeset_size = Module[\n        '_sqlite3session_changeset_size'\n      ] =\n        wasmExports['sqlite3session_changeset_size'])(a0));\n    var _sqlite3changeset_start = (Module['_sqlite3changeset_start'] = (\n      a0,\n      a1,\n      a2,\n    ) =>\n      (_sqlite3changeset_start = Module['_sqlite3changeset_start'] =\n        wasmExports['sqlite3changeset_start'])(a0, a1, a2));\n    var _sqlite3changeset_start_v2 = (Module['_sqlite3changeset_start_v2'] = (\n      a0,\n      a1,\n      a2,\n      a3,\n    ) =>\n      (_sqlite3changeset_start_v2 = Module['_sqlite3changeset_start_v2'] =\n        wasmExports['sqlite3changeset_start_v2'])(a0, a1, a2, a3));\n    var _sqlite3changeset_start_strm = (Module['_sqlite3changeset_start_strm'] =\n      (a0, a1, a2) =>\n        (_sqlite3changeset_start_strm = Module['_sqlite3changeset_start_strm'] =\n          wasmExports['sqlite3changeset_start_strm'])(a0, a1, a2));\n    var _sqlite3changeset_start_v2_strm = (Module[\n      '_sqlite3changeset_start_v2_strm'\n    ] = (a0, a1, a2, a3) =>\n      (_sqlite3changeset_start_v2_strm = Module[\n        '_sqlite3changeset_start_v2_strm'\n      ] =\n        wasmExports['sqlite3changeset_start_v2_strm'])(a0, a1, a2, a3));\n    var _sqlite3changeset_next = (Module['_sqlite3changeset_next'] = (a0) =>\n      (_sqlite3changeset_next = Module['_sqlite3changeset_next'] =\n        wasmExports['sqlite3changeset_next'])(a0));\n    var _sqlite3changeset_op = (Module['_sqlite3changeset_op'] = (\n      a0,\n      a1,\n      a2,\n      a3,\n      a4,\n    ) =>\n      (_sqlite3changeset_op = Module['_sqlite3changeset_op'] =\n        wasmExports['sqlite3changeset_op'])(a0, a1, a2, a3, a4));\n    var _sqlite3changeset_pk = (Module['_sqlite3changeset_pk'] = (a0, a1, a2) =>\n      (_sqlite3changeset_pk = Module['_sqlite3changeset_pk'] =\n        wasmExports['sqlite3changeset_pk'])(a0, a1, a2));\n    var _sqlite3changeset_old = (Module['_sqlite3changeset_old'] = (\n      a0,\n      a1,\n      a2,\n    ) =>\n      (_sqlite3changeset_old = Module['_sqlite3changeset_old'] =\n        wasmExports['sqlite3changeset_old'])(a0, a1, a2));\n    var _sqlite3changeset_new = (Module['_sqlite3changeset_new'] = (\n      a0,\n      a1,\n      a2,\n    ) =>\n      (_sqlite3changeset_new = Module['_sqlite3changeset_new'] =\n        wasmExports['sqlite3changeset_new'])(a0, a1, a2));\n    var _sqlite3changeset_conflict = (Module['_sqlite3changeset_conflict'] = (\n      a0,\n      a1,\n      a2,\n    ) =>\n      (_sqlite3changeset_conflict = Module['_sqlite3changeset_conflict'] =\n        wasmExports['sqlite3changeset_conflict'])(a0, a1, a2));\n    var _sqlite3changeset_fk_conflicts = (Module[\n      '_sqlite3changeset_fk_conflicts'\n    ] = (a0, a1) =>\n      (_sqlite3changeset_fk_conflicts = Module[\n        '_sqlite3changeset_fk_conflicts'\n      ] =\n        wasmExports['sqlite3changeset_fk_conflicts'])(a0, a1));\n    var _sqlite3changeset_finalize = (Module['_sqlite3changeset_finalize'] = (\n      a0,\n    ) =>\n      (_sqlite3changeset_finalize = Module['_sqlite3changeset_finalize'] =\n        wasmExports['sqlite3changeset_finalize'])(a0));\n    var _sqlite3changeset_invert = (Module['_sqlite3changeset_invert'] = (\n      a0,\n      a1,\n      a2,\n      a3,\n    ) =>\n      (_sqlite3changeset_invert = Module['_sqlite3changeset_invert'] =\n        wasmExports['sqlite3changeset_invert'])(a0, a1, a2, a3));\n    var _sqlite3changeset_invert_strm = (Module[\n      '_sqlite3changeset_invert_strm'\n    ] = (a0, a1, a2, a3) =>\n      (_sqlite3changeset_invert_strm = Module['_sqlite3changeset_invert_strm'] =\n        wasmExports['sqlite3changeset_invert_strm'])(a0, a1, a2, a3));\n    var _sqlite3changeset_apply_v2 = (Module['_sqlite3changeset_apply_v2'] = (\n      a0,\n      a1,\n      a2,\n      a3,\n      a4,\n      a5,\n      a6,\n      a7,\n      a8,\n    ) =>\n      (_sqlite3changeset_apply_v2 = Module['_sqlite3changeset_apply_v2'] =\n        wasmExports['sqlite3changeset_apply_v2'])(\n        a0,\n        a1,\n        a2,\n        a3,\n        a4,\n        a5,\n        a6,\n        a7,\n        a8,\n      ));\n    var _sqlite3changeset_apply = (Module['_sqlite3changeset_apply'] = (\n      a0,\n      a1,\n      a2,\n      a3,\n      a4,\n      a5,\n    ) =>\n      (_sqlite3changeset_apply = Module['_sqlite3changeset_apply'] =\n        wasmExports['sqlite3changeset_apply'])(a0, a1, a2, a3, a4, a5));\n    var _sqlite3changeset_apply_v2_strm = (Module[\n      '_sqlite3changeset_apply_v2_strm'\n    ] = (a0, a1, a2, a3, a4, a5, a6, a7, a8) =>\n      (_sqlite3changeset_apply_v2_strm = Module[\n        '_sqlite3changeset_apply_v2_strm'\n      ] =\n        wasmExports['sqlite3changeset_apply_v2_strm'])(\n        a0,\n        a1,\n        a2,\n        a3,\n        a4,\n        a5,\n        a6,\n        a7,\n        a8,\n      ));\n    var _sqlite3changeset_apply_strm = (Module['_sqlite3changeset_apply_strm'] =\n      (a0, a1, a2, a3, a4, a5) =>\n        (_sqlite3changeset_apply_strm = Module['_sqlite3changeset_apply_strm'] =\n          wasmExports['sqlite3changeset_apply_strm'])(a0, a1, a2, a3, a4, a5));\n    var _sqlite3changegroup_new = (Module['_sqlite3changegroup_new'] = (a0) =>\n      (_sqlite3changegroup_new = Module['_sqlite3changegroup_new'] =\n        wasmExports['sqlite3changegroup_new'])(a0));\n    var _sqlite3changegroup_add = (Module['_sqlite3changegroup_add'] = (\n      a0,\n      a1,\n      a2,\n    ) =>\n      (_sqlite3changegroup_add = Module['_sqlite3changegroup_add'] =\n        wasmExports['sqlite3changegroup_add'])(a0, a1, a2));\n    var _sqlite3changegroup_output = (Module['_sqlite3changegroup_output'] = (\n      a0,\n      a1,\n      a2,\n    ) =>\n      (_sqlite3changegroup_output = Module['_sqlite3changegroup_output'] =\n        wasmExports['sqlite3changegroup_output'])(a0, a1, a2));\n    var _sqlite3changegroup_add_strm = (Module['_sqlite3changegroup_add_strm'] =\n      (a0, a1, a2) =>\n        (_sqlite3changegroup_add_strm = Module['_sqlite3changegroup_add_strm'] =\n          wasmExports['sqlite3changegroup_add_strm'])(a0, a1, a2));\n    var _sqlite3changegroup_output_strm = (Module[\n      '_sqlite3changegroup_output_strm'\n    ] = (a0, a1, a2) =>\n      (_sqlite3changegroup_output_strm = Module[\n        '_sqlite3changegroup_output_strm'\n      ] =\n        wasmExports['sqlite3changegroup_output_strm'])(a0, a1, a2));\n    var _sqlite3changegroup_delete = (Module['_sqlite3changegroup_delete'] = (\n      a0,\n    ) =>\n      (_sqlite3changegroup_delete = Module['_sqlite3changegroup_delete'] =\n        wasmExports['sqlite3changegroup_delete'])(a0));\n    var _sqlite3changeset_concat = (Module['_sqlite3changeset_concat'] = (\n      a0,\n      a1,\n      a2,\n      a3,\n      a4,\n      a5,\n    ) =>\n      (_sqlite3changeset_concat = Module['_sqlite3changeset_concat'] =\n        wasmExports['sqlite3changeset_concat'])(a0, a1, a2, a3, a4, a5));\n    var _sqlite3changeset_concat_strm = (Module[\n      '_sqlite3changeset_concat_strm'\n    ] = (a0, a1, a2, a3, a4, a5) =>\n      (_sqlite3changeset_concat_strm = Module['_sqlite3changeset_concat_strm'] =\n        wasmExports['sqlite3changeset_concat_strm'])(a0, a1, a2, a3, a4, a5));\n    var _sqlite3session_config = (Module['_sqlite3session_config'] = (a0, a1) =>\n      (_sqlite3session_config = Module['_sqlite3session_config'] =\n        wasmExports['sqlite3session_config'])(a0, a1));\n    var _sqlite3_sourceid = (Module['_sqlite3_sourceid'] = () =>\n      (_sqlite3_sourceid = Module['_sqlite3_sourceid'] =\n        wasmExports['sqlite3_sourceid'])());\n    var _sqlite3__wasm_pstack_ptr = (Module['_sqlite3__wasm_pstack_ptr'] = () =>\n      (_sqlite3__wasm_pstack_ptr = Module['_sqlite3__wasm_pstack_ptr'] =\n        wasmExports['sqlite3__wasm_pstack_ptr'])());\n    var _sqlite3__wasm_pstack_restore = (Module[\n      '_sqlite3__wasm_pstack_restore'\n    ] = (a0) =>\n      (_sqlite3__wasm_pstack_restore = Module['_sqlite3__wasm_pstack_restore'] =\n        wasmExports['sqlite3__wasm_pstack_restore'])(a0));\n    var _sqlite3__wasm_pstack_alloc = (Module['_sqlite3__wasm_pstack_alloc'] = (\n      a0,\n    ) =>\n      (_sqlite3__wasm_pstack_alloc = Module['_sqlite3__wasm_pstack_alloc'] =\n        wasmExports['sqlite3__wasm_pstack_alloc'])(a0));\n    var _sqlite3__wasm_pstack_remaining = (Module[\n      '_sqlite3__wasm_pstack_remaining'\n    ] = () =>\n      (_sqlite3__wasm_pstack_remaining = Module[\n        '_sqlite3__wasm_pstack_remaining'\n      ] =\n        wasmExports['sqlite3__wasm_pstack_remaining'])());\n    var _sqlite3__wasm_pstack_quota = (Module['_sqlite3__wasm_pstack_quota'] =\n      () =>\n        (_sqlite3__wasm_pstack_quota = Module['_sqlite3__wasm_pstack_quota'] =\n          wasmExports['sqlite3__wasm_pstack_quota'])());\n    var _sqlite3__wasm_db_error = (Module['_sqlite3__wasm_db_error'] = (\n      a0,\n      a1,\n      a2,\n    ) =>\n      (_sqlite3__wasm_db_error = Module['_sqlite3__wasm_db_error'] =\n        wasmExports['sqlite3__wasm_db_error'])(a0, a1, a2));\n    var _sqlite3__wasm_test_struct = (Module['_sqlite3__wasm_test_struct'] = (\n      a0,\n    ) =>\n      (_sqlite3__wasm_test_struct = Module['_sqlite3__wasm_test_struct'] =\n        wasmExports['sqlite3__wasm_test_struct'])(a0));\n    var _sqlite3__wasm_enum_json = (Module['_sqlite3__wasm_enum_json'] = () =>\n      (_sqlite3__wasm_enum_json = Module['_sqlite3__wasm_enum_json'] =\n        wasmExports['sqlite3__wasm_enum_json'])());\n    var _sqlite3__wasm_vfs_unlink = (Module['_sqlite3__wasm_vfs_unlink'] = (\n      a0,\n      a1,\n    ) =>\n      (_sqlite3__wasm_vfs_unlink = Module['_sqlite3__wasm_vfs_unlink'] =\n        wasmExports['sqlite3__wasm_vfs_unlink'])(a0, a1));\n    var _sqlite3__wasm_db_vfs = (Module['_sqlite3__wasm_db_vfs'] = (a0, a1) =>\n      (_sqlite3__wasm_db_vfs = Module['_sqlite3__wasm_db_vfs'] =\n        wasmExports['sqlite3__wasm_db_vfs'])(a0, a1));\n    var _sqlite3__wasm_db_reset = (Module['_sqlite3__wasm_db_reset'] = (a0) =>\n      (_sqlite3__wasm_db_reset = Module['_sqlite3__wasm_db_reset'] =\n        wasmExports['sqlite3__wasm_db_reset'])(a0));\n    var _sqlite3__wasm_db_export_chunked = (Module[\n      '_sqlite3__wasm_db_export_chunked'\n    ] = (a0, a1) =>\n      (_sqlite3__wasm_db_export_chunked = Module[\n        '_sqlite3__wasm_db_export_chunked'\n      ] =\n        wasmExports['sqlite3__wasm_db_export_chunked'])(a0, a1));\n    var _sqlite3__wasm_db_serialize = (Module['_sqlite3__wasm_db_serialize'] = (\n      a0,\n      a1,\n      a2,\n      a3,\n      a4,\n    ) =>\n      (_sqlite3__wasm_db_serialize = Module['_sqlite3__wasm_db_serialize'] =\n        wasmExports['sqlite3__wasm_db_serialize'])(a0, a1, a2, a3, a4));\n    var _sqlite3__wasm_vfs_create_file = (Module[\n      '_sqlite3__wasm_vfs_create_file'\n    ] = (a0, a1, a2, a3) =>\n      (_sqlite3__wasm_vfs_create_file = Module[\n        '_sqlite3__wasm_vfs_create_file'\n      ] =\n        wasmExports['sqlite3__wasm_vfs_create_file'])(a0, a1, a2, a3));\n    var _sqlite3__wasm_posix_create_file = (Module[\n      '_sqlite3__wasm_posix_create_file'\n    ] = (a0, a1, a2) =>\n      (_sqlite3__wasm_posix_create_file = Module[\n        '_sqlite3__wasm_posix_create_file'\n      ] =\n        wasmExports['sqlite3__wasm_posix_create_file'])(a0, a1, a2));\n    var _sqlite3__wasm_kvvfsMakeKeyOnPstack = (Module[\n      '_sqlite3__wasm_kvvfsMakeKeyOnPstack'\n    ] = (a0, a1) =>\n      (_sqlite3__wasm_kvvfsMakeKeyOnPstack = Module[\n        '_sqlite3__wasm_kvvfsMakeKeyOnPstack'\n      ] =\n        wasmExports['sqlite3__wasm_kvvfsMakeKeyOnPstack'])(a0, a1));\n    var _sqlite3__wasm_kvvfs_methods = (Module['_sqlite3__wasm_kvvfs_methods'] =\n      () =>\n        (_sqlite3__wasm_kvvfs_methods = Module['_sqlite3__wasm_kvvfs_methods'] =\n          wasmExports['sqlite3__wasm_kvvfs_methods'])());\n    var _sqlite3__wasm_vtab_config = (Module['_sqlite3__wasm_vtab_config'] = (\n      a0,\n      a1,\n      a2,\n    ) =>\n      (_sqlite3__wasm_vtab_config = Module['_sqlite3__wasm_vtab_config'] =\n        wasmExports['sqlite3__wasm_vtab_config'])(a0, a1, a2));\n    var _sqlite3__wasm_db_config_ip = (Module['_sqlite3__wasm_db_config_ip'] = (\n      a0,\n      a1,\n      a2,\n      a3,\n    ) =>\n      (_sqlite3__wasm_db_config_ip = Module['_sqlite3__wasm_db_config_ip'] =\n        wasmExports['sqlite3__wasm_db_config_ip'])(a0, a1, a2, a3));\n    var _sqlite3__wasm_db_config_pii = (Module['_sqlite3__wasm_db_config_pii'] =\n      (a0, a1, a2, a3, a4) =>\n        (_sqlite3__wasm_db_config_pii = Module['_sqlite3__wasm_db_config_pii'] =\n          wasmExports['sqlite3__wasm_db_config_pii'])(a0, a1, a2, a3, a4));\n    var _sqlite3__wasm_db_config_s = (Module['_sqlite3__wasm_db_config_s'] = (\n      a0,\n      a1,\n      a2,\n    ) =>\n      (_sqlite3__wasm_db_config_s = Module['_sqlite3__wasm_db_config_s'] =\n        wasmExports['sqlite3__wasm_db_config_s'])(a0, a1, a2));\n    var _sqlite3__wasm_config_i = (Module['_sqlite3__wasm_config_i'] = (\n      a0,\n      a1,\n    ) =>\n      (_sqlite3__wasm_config_i = Module['_sqlite3__wasm_config_i'] =\n        wasmExports['sqlite3__wasm_config_i'])(a0, a1));\n    var _sqlite3__wasm_config_ii = (Module['_sqlite3__wasm_config_ii'] = (\n      a0,\n      a1,\n      a2,\n    ) =>\n      (_sqlite3__wasm_config_ii = Module['_sqlite3__wasm_config_ii'] =\n        wasmExports['sqlite3__wasm_config_ii'])(a0, a1, a2));\n    var _sqlite3__wasm_config_j = (Module['_sqlite3__wasm_config_j'] = (\n      a0,\n      a1,\n    ) =>\n      (_sqlite3__wasm_config_j = Module['_sqlite3__wasm_config_j'] =\n        wasmExports['sqlite3__wasm_config_j'])(a0, a1));\n    var _sqlite3__wasm_qfmt_token = (Module['_sqlite3__wasm_qfmt_token'] = (\n      a0,\n      a1,\n    ) =>\n      (_sqlite3__wasm_qfmt_token = Module['_sqlite3__wasm_qfmt_token'] =\n        wasmExports['sqlite3__wasm_qfmt_token'])(a0, a1));\n    var _sqlite3__wasm_init_wasmfs = (Module['_sqlite3__wasm_init_wasmfs'] = (\n      a0,\n    ) =>\n      (_sqlite3__wasm_init_wasmfs = Module['_sqlite3__wasm_init_wasmfs'] =\n        wasmExports['sqlite3__wasm_init_wasmfs'])(a0));\n    var _sqlite3__wasm_test_intptr = (Module['_sqlite3__wasm_test_intptr'] = (\n      a0,\n    ) =>\n      (_sqlite3__wasm_test_intptr = Module['_sqlite3__wasm_test_intptr'] =\n        wasmExports['sqlite3__wasm_test_intptr'])(a0));\n    var _sqlite3__wasm_test_voidptr = (Module['_sqlite3__wasm_test_voidptr'] = (\n      a0,\n    ) =>\n      (_sqlite3__wasm_test_voidptr = Module['_sqlite3__wasm_test_voidptr'] =\n        wasmExports['sqlite3__wasm_test_voidptr'])(a0));\n    var _sqlite3__wasm_test_int64_max = (Module[\n      '_sqlite3__wasm_test_int64_max'\n    ] = () =>\n      (_sqlite3__wasm_test_int64_max = Module['_sqlite3__wasm_test_int64_max'] =\n        wasmExports['sqlite3__wasm_test_int64_max'])());\n    var _sqlite3__wasm_test_int64_min = (Module[\n      '_sqlite3__wasm_test_int64_min'\n    ] = () =>\n      (_sqlite3__wasm_test_int64_min = Module['_sqlite3__wasm_test_int64_min'] =\n        wasmExports['sqlite3__wasm_test_int64_min'])());\n    var _sqlite3__wasm_test_int64_times2 = (Module[\n      '_sqlite3__wasm_test_int64_times2'\n    ] = (a0) =>\n      (_sqlite3__wasm_test_int64_times2 = Module[\n        '_sqlite3__wasm_test_int64_times2'\n      ] =\n        wasmExports['sqlite3__wasm_test_int64_times2'])(a0));\n    var _sqlite3__wasm_test_int64_minmax = (Module[\n      '_sqlite3__wasm_test_int64_minmax'\n    ] = (a0, a1) =>\n      (_sqlite3__wasm_test_int64_minmax = Module[\n        '_sqlite3__wasm_test_int64_minmax'\n      ] =\n        wasmExports['sqlite3__wasm_test_int64_minmax'])(a0, a1));\n    var _sqlite3__wasm_test_int64ptr = (Module['_sqlite3__wasm_test_int64ptr'] =\n      (a0) =>\n        (_sqlite3__wasm_test_int64ptr = Module['_sqlite3__wasm_test_int64ptr'] =\n          wasmExports['sqlite3__wasm_test_int64ptr'])(a0));\n    var _sqlite3__wasm_test_stack_overflow = (Module[\n      '_sqlite3__wasm_test_stack_overflow'\n    ] = (a0) =>\n      (_sqlite3__wasm_test_stack_overflow = Module[\n        '_sqlite3__wasm_test_stack_overflow'\n      ] =\n        wasmExports['sqlite3__wasm_test_stack_overflow'])(a0));\n    var _sqlite3__wasm_test_str_hello = (Module[\n      '_sqlite3__wasm_test_str_hello'\n    ] = (a0) =>\n      (_sqlite3__wasm_test_str_hello = Module['_sqlite3__wasm_test_str_hello'] =\n        wasmExports['sqlite3__wasm_test_str_hello'])(a0));\n    var _sqlite3__wasm_SQLTester_strglob = (Module[\n      '_sqlite3__wasm_SQLTester_strglob'\n    ] = (a0, a1) =>\n      (_sqlite3__wasm_SQLTester_strglob = Module[\n        '_sqlite3__wasm_SQLTester_strglob'\n      ] =\n        wasmExports['sqlite3__wasm_SQLTester_strglob'])(a0, a1));\n    var _malloc = (Module['_malloc'] = (a0) =>\n      (_malloc = Module['_malloc'] = wasmExports['malloc'])(a0));\n    var _free = (Module['_free'] = (a0) =>\n      (_free = Module['_free'] = wasmExports['free'])(a0));\n    var _realloc = (Module['_realloc'] = (a0, a1) =>\n      (_realloc = Module['_realloc'] = wasmExports['realloc'])(a0, a1));\n    var _emscripten_builtin_memalign = (a0, a1) =>\n      (_emscripten_builtin_memalign =\n        wasmExports['emscripten_builtin_memalign'])(a0, a1);\n    var __emscripten_stack_restore = (a0) =>\n      (__emscripten_stack_restore = wasmExports['_emscripten_stack_restore'])(\n        a0,\n      );\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 =\n        wasmExports['emscripten_stack_get_current'])();\n\n    Module['wasmMemory'] = wasmMemory;\n\n    var calledRun;\n\n    dependenciesFulfilled = function runCaller() {\n      if (!calledRun) run();\n      if (!calledRun) dependenciesFulfilled = runCaller;\n    };\n\n    function run() {\n      if (runDependencies > 0) {\n        return;\n      }\n\n      preRun();\n\n      if (runDependencies > 0) {\n        return;\n      }\n\n      function doRun() {\n        if (calledRun) return;\n        calledRun = true;\n        Module['calledRun'] = true;\n\n        if (ABORT) return;\n\n        initRuntime();\n\n        readyPromiseResolve(Module);\n        Module['onRuntimeInitialized']?.();\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    }\n\n    if (Module['preInit']) {\n      if (typeof Module['preInit'] == 'function')\n        Module['preInit'] = [Module['preInit']];\n      while (Module['preInit'].length > 0) {\n        Module['preInit'].pop()();\n      }\n    }\n\n    run();\n\n    if (!Module.postRun) Module.postRun = [];\n    Module.postRun.push(function (Module) {\n      'use strict';\n\n      'use strict';\n      globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap(\n        apiConfig = globalThis.sqlite3ApiConfig ||\n          sqlite3ApiBootstrap.defaultConfig,\n      ) {\n        if (sqlite3ApiBootstrap.sqlite3) {\n          (sqlite3ApiBootstrap.sqlite3.config || console).warn(\n            'sqlite3ApiBootstrap() called multiple times.',\n            'Config and external initializers are ignored on calls after the first.',\n          );\n          return sqlite3ApiBootstrap.sqlite3;\n        }\n        const config = Object.assign(\n          Object.create(null),\n          {\n            exports: undefined,\n            memory: undefined,\n            bigIntEnabled: (() => {\n              if ('undefined' !== typeof Module) {\n                if (!!Module.HEAPU64) return true;\n              }\n              return !!globalThis.BigInt64Array;\n            })(),\n            debug: console.debug.bind(console),\n            warn: console.warn.bind(console),\n            error: console.error.bind(console),\n            log: console.log.bind(console),\n            wasmfsOpfsDir: '/opfs',\n\n            useStdAlloc: false,\n          },\n          apiConfig || {},\n        );\n\n        Object.assign(\n          config,\n          {\n            allocExportName: config.useStdAlloc ? 'malloc' : 'sqlite3_malloc',\n            deallocExportName: config.useStdAlloc ? 'free' : 'sqlite3_free',\n            reallocExportName: config.useStdAlloc\n              ? 'realloc'\n              : 'sqlite3_realloc',\n          },\n          config,\n        );\n\n        ['exports', 'memory', 'wasmfsOpfsDir'].forEach((k) => {\n          if ('function' === typeof config[k]) {\n            config[k] = config[k]();\n          }\n        });\n\n        delete globalThis.sqlite3ApiConfig;\n        delete sqlite3ApiBootstrap.defaultConfig;\n\n        const capi = Object.create(null);\n\n        const wasm = Object.create(null);\n\n        const __rcStr = (rc) => {\n          return (\n            (capi.sqlite3_js_rc_str && capi.sqlite3_js_rc_str(rc)) ||\n            'Unknown result code #' + rc\n          );\n        };\n\n        const __isInt = (n) => 'number' === typeof n && n === (n | 0);\n\n        class SQLite3Error extends Error {\n          constructor(...args) {\n            let rc;\n            if (args.length) {\n              if (__isInt(args[0])) {\n                rc = args[0];\n                if (1 === args.length) {\n                  super(__rcStr(args[0]));\n                } else {\n                  const rcStr = __rcStr(rc);\n                  if ('object' === typeof args[1]) {\n                    super(rcStr, args[1]);\n                  } else {\n                    args[0] = rcStr + ':';\n                    super(args.join(' '));\n                  }\n                }\n              } else {\n                if (2 === args.length && 'object' === typeof args[1]) {\n                  super(...args);\n                } else {\n                  super(args.join(' '));\n                }\n              }\n            }\n            this.resultCode = rc || capi.SQLITE_ERROR;\n            this.name = 'SQLite3Error';\n          }\n        }\n\n        SQLite3Error.toss = (...args) => {\n          throw new SQLite3Error(...args);\n        };\n        const toss3 = SQLite3Error.toss;\n\n        if (config.wasmfsOpfsDir && !/^\\/[^/]+$/.test(config.wasmfsOpfsDir)) {\n          toss3(\n            \"config.wasmfsOpfsDir must be falsy or in the form '/dir-name'.\",\n          );\n        }\n\n        const isInt32 = (n) => {\n          return (\n            'bigint' !== typeof n &&\n            !!(n === (n | 0) && n <= 2147483647 && n >= -2147483648)\n          );\n        };\n\n        const bigIntFits64 = function f(b) {\n          if (!f._max) {\n            f._max = BigInt('0x7fffffffffffffff');\n            f._min = ~f._max;\n          }\n          return b >= f._min && b <= f._max;\n        };\n\n        const bigIntFits32 = (b) => b >= -0x7fffffffn - 1n && b <= 0x7fffffffn;\n\n        const bigIntFitsDouble = function f(b) {\n          if (!f._min) {\n            f._min = Number.MIN_SAFE_INTEGER;\n            f._max = Number.MAX_SAFE_INTEGER;\n          }\n          return b >= f._min && b <= f._max;\n        };\n\n        const isTypedArray = (v) => {\n          return v && v.constructor && isInt32(v.constructor.BYTES_PER_ELEMENT)\n            ? v\n            : false;\n        };\n\n        const __SAB =\n          'undefined' === typeof SharedArrayBuffer\n            ? function () {}\n            : SharedArrayBuffer;\n\n        const isSharedTypedArray = (aTypedArray) =>\n          aTypedArray.buffer instanceof __SAB;\n\n        const typedArrayPart = (aTypedArray, begin, end) => {\n          return isSharedTypedArray(aTypedArray)\n            ? aTypedArray.slice(begin, end)\n            : aTypedArray.subarray(begin, end);\n        };\n\n        const isBindableTypedArray = (v) => {\n          return (\n            v &&\n            (v instanceof Uint8Array ||\n              v instanceof Int8Array ||\n              v instanceof ArrayBuffer)\n          );\n        };\n\n        const isSQLableTypedArray = (v) => {\n          return (\n            v &&\n            (v instanceof Uint8Array ||\n              v instanceof Int8Array ||\n              v instanceof ArrayBuffer)\n          );\n        };\n\n        const affirmBindableTypedArray = (v) => {\n          return (\n            isBindableTypedArray(v) ||\n            toss3('Value is not of a supported TypedArray type.')\n          );\n        };\n\n        const utf8Decoder = new TextDecoder('utf-8');\n\n        const typedArrayToString = function (typedArray, begin, end) {\n          return utf8Decoder.decode(typedArrayPart(typedArray, begin, end));\n        };\n\n        const flexibleString = function (v) {\n          if (isSQLableTypedArray(v)) {\n            return typedArrayToString(\n              v instanceof ArrayBuffer ? new Uint8Array(v) : v,\n            );\n          } else if (Array.isArray(v)) return v.join('');\n          else if (wasm.isPtr(v)) v = wasm.cstrToJs(v);\n          return v;\n        };\n\n        class WasmAllocError extends Error {\n          constructor(...args) {\n            if (2 === args.length && 'object' === typeof args[1]) {\n              super(...args);\n            } else if (args.length) {\n              super(args.join(' '));\n            } else {\n              super('Allocation failed.');\n            }\n            this.resultCode = capi.SQLITE_NOMEM;\n            this.name = 'WasmAllocError';\n          }\n        }\n\n        WasmAllocError.toss = (...args) => {\n          throw new WasmAllocError(...args);\n        };\n\n        Object.assign(capi, {\n          sqlite3_bind_blob: undefined,\n\n          sqlite3_bind_text: undefined,\n\n          sqlite3_create_function_v2: (\n            pDb,\n            funcName,\n            nArg,\n            eTextRep,\n            pApp,\n            xFunc,\n            xStep,\n            xFinal,\n            xDestroy,\n          ) => {},\n\n          sqlite3_create_function: (\n            pDb,\n            funcName,\n            nArg,\n            eTextRep,\n            pApp,\n            xFunc,\n            xStep,\n            xFinal,\n          ) => {},\n\n          sqlite3_create_window_function: (\n            pDb,\n            funcName,\n            nArg,\n            eTextRep,\n            pApp,\n            xStep,\n            xFinal,\n            xValue,\n            xInverse,\n            xDestroy,\n          ) => {},\n\n          sqlite3_prepare_v3: (\n            dbPtr,\n            sql,\n            sqlByteLen,\n            prepFlags,\n            stmtPtrPtr,\n            strPtrPtr,\n          ) => {},\n\n          sqlite3_prepare_v2: (\n            dbPtr,\n            sql,\n            sqlByteLen,\n            stmtPtrPtr,\n            strPtrPtr,\n          ) => {},\n\n          sqlite3_exec: (pDb, sql, callback, pVoid, pErrMsg) => {},\n\n          sqlite3_randomness: (n, outPtr) => {},\n        });\n\n        const util = {\n          affirmBindableTypedArray,\n          flexibleString,\n          bigIntFits32,\n          bigIntFits64,\n          bigIntFitsDouble,\n          isBindableTypedArray,\n          isInt32,\n          isSQLableTypedArray,\n          isTypedArray,\n          typedArrayToString,\n          isUIThread: () =>\n            globalThis.window === globalThis && !!globalThis.document,\n\n          isSharedTypedArray,\n          toss: function (...args) {\n            throw new Error(args.join(' '));\n          },\n          toss3,\n          typedArrayPart,\n\n          affirmDbHeader: function (bytes) {\n            if (bytes instanceof ArrayBuffer) bytes = new Uint8Array(bytes);\n            const header = 'SQLite format 3';\n            if (header.length > bytes.byteLength) {\n              toss3('Input does not contain an SQLite3 database header.');\n            }\n            for (let i = 0; i < header.length; ++i) {\n              if (header.charCodeAt(i) !== bytes[i]) {\n                toss3('Input does not contain an SQLite3 database header.');\n              }\n            }\n          },\n\n          affirmIsDb: function (bytes) {\n            if (bytes instanceof ArrayBuffer) bytes = new Uint8Array(bytes);\n            const n = bytes.byteLength;\n            if (n < 512 || n % 512 !== 0) {\n              toss3('Byte array size', n, 'is invalid for an SQLite3 db.');\n            }\n            util.affirmDbHeader(bytes);\n          },\n        };\n\n        Object.assign(wasm, {\n          ptrSizeof: config.wasmPtrSizeof || 4,\n\n          ptrIR: config.wasmPtrIR || 'i32',\n\n          bigIntEnabled: !!config.bigIntEnabled,\n\n          exports:\n            config.exports ||\n            toss3('Missing API config.exports (WASM module exports).'),\n\n          memory:\n            config.memory ||\n            config.exports['memory'] ||\n            toss3(\n              'API config object requires a WebAssembly.Memory object',\n              'in either config.exports.memory (exported)',\n              'or config.memory (imported).',\n            ),\n\n          alloc: undefined,\n\n          realloc: undefined,\n\n          dealloc: undefined,\n        });\n\n        wasm.allocFromTypedArray = function (srcTypedArray) {\n          if (srcTypedArray instanceof ArrayBuffer) {\n            srcTypedArray = new Uint8Array(srcTypedArray);\n          }\n          affirmBindableTypedArray(srcTypedArray);\n          const pRet = wasm.alloc(srcTypedArray.byteLength || 1);\n          wasm\n            .heapForSize(srcTypedArray.constructor)\n            .set(srcTypedArray.byteLength ? srcTypedArray : [0], pRet);\n          return pRet;\n        };\n\n        {\n          const keyAlloc = config.allocExportName,\n            keyDealloc = config.deallocExportName,\n            keyRealloc = config.reallocExportName;\n          for (const key of [keyAlloc, keyDealloc, keyRealloc]) {\n            const f = wasm.exports[key];\n            if (!(f instanceof Function))\n              toss3('Missing required exports[', key, '] function.');\n          }\n\n          wasm.alloc = function f(n) {\n            return (\n              f.impl(n) ||\n              WasmAllocError.toss('Failed to allocate', n, ' bytes.')\n            );\n          };\n          wasm.alloc.impl = wasm.exports[keyAlloc];\n          wasm.realloc = function f(m, n) {\n            const m2 = f.impl(m, n);\n            return n\n              ? m2 || WasmAllocError.toss('Failed to reallocate', n, ' bytes.')\n              : 0;\n          };\n          wasm.realloc.impl = wasm.exports[keyRealloc];\n          wasm.dealloc = wasm.exports[keyDealloc];\n        }\n\n        wasm.compileOptionUsed = function f(optName) {\n          if (!arguments.length) {\n            if (f._result) return f._result;\n            else if (!f._opt) {\n              f._rx = /^([^=]+)=(.+)/;\n              f._rxInt = /^-?\\d+$/;\n              f._opt = function (opt, rv) {\n                const m = f._rx.exec(opt);\n                rv[0] = m ? m[1] : opt;\n                rv[1] = m ? (f._rxInt.test(m[2]) ? +m[2] : m[2]) : true;\n              };\n            }\n            const rc = {},\n              ov = [0, 0];\n            let i = 0,\n              k;\n            while ((k = capi.sqlite3_compileoption_get(i++))) {\n              f._opt(k, ov);\n              rc[ov[0]] = ov[1];\n            }\n            return (f._result = rc);\n          } else if (Array.isArray(optName)) {\n            const rc = {};\n            optName.forEach((v) => {\n              rc[v] = capi.sqlite3_compileoption_used(v);\n            });\n            return rc;\n          } else if ('object' === typeof optName) {\n            Object.keys(optName).forEach((k) => {\n              optName[k] = capi.sqlite3_compileoption_used(k);\n            });\n            return optName;\n          }\n          return 'string' === typeof optName\n            ? !!capi.sqlite3_compileoption_used(optName)\n            : false;\n        };\n\n        wasm.pstack = Object.assign(Object.create(null), {\n          restore: wasm.exports.sqlite3__wasm_pstack_restore,\n\n          alloc: function (n) {\n            if ('string' === typeof n && !(n = wasm.sizeofIR(n))) {\n              WasmAllocError.toss(\n                'Invalid value for pstack.alloc(',\n                arguments[0],\n                ')',\n              );\n            }\n            return (\n              wasm.exports.sqlite3__wasm_pstack_alloc(n) ||\n              WasmAllocError.toss(\n                'Could not allocate',\n                n,\n                'bytes from the pstack.',\n              )\n            );\n          },\n\n          allocChunks: function (n, sz) {\n            if ('string' === typeof sz && !(sz = wasm.sizeofIR(sz))) {\n              WasmAllocError.toss(\n                'Invalid size value for allocChunks(',\n                arguments[1],\n                ')',\n              );\n            }\n            const mem = wasm.pstack.alloc(n * sz);\n            const rc = [];\n            let i = 0,\n              offset = 0;\n            for (; i < n; ++i, offset += sz) rc.push(mem + offset);\n            return rc;\n          },\n\n          allocPtr: (n = 1, safePtrSize = true) => {\n            return 1 === n\n              ? wasm.pstack.alloc(safePtrSize ? 8 : wasm.ptrSizeof)\n              : wasm.pstack.allocChunks(n, safePtrSize ? 8 : wasm.ptrSizeof);\n          },\n\n          call: function (f) {\n            const stackPos = wasm.pstack.pointer;\n            try {\n              return f(sqlite3);\n            } finally {\n              wasm.pstack.restore(stackPos);\n            }\n          },\n        });\n        Object.defineProperties(wasm.pstack, {\n          pointer: {\n            configurable: false,\n            iterable: true,\n            writeable: false,\n            get: wasm.exports.sqlite3__wasm_pstack_ptr,\n          },\n\n          quota: {\n            configurable: false,\n            iterable: true,\n            writeable: false,\n            get: wasm.exports.sqlite3__wasm_pstack_quota,\n          },\n\n          remaining: {\n            configurable: false,\n            iterable: true,\n            writeable: false,\n            get: wasm.exports.sqlite3__wasm_pstack_remaining,\n          },\n        });\n\n        capi.sqlite3_randomness = (...args) => {\n          if (\n            1 === args.length &&\n            util.isTypedArray(args[0]) &&\n            1 === args[0].BYTES_PER_ELEMENT\n          ) {\n            const ta = args[0];\n            if (0 === ta.byteLength) {\n              wasm.exports.sqlite3_randomness(0, 0);\n              return ta;\n            }\n            const stack = wasm.pstack.pointer;\n            try {\n              let n = ta.byteLength,\n                offset = 0;\n              const r = wasm.exports.sqlite3_randomness;\n              const heap = wasm.heap8u();\n              const nAlloc = n < 512 ? n : 512;\n              const ptr = wasm.pstack.alloc(nAlloc);\n              do {\n                const j = n > nAlloc ? nAlloc : n;\n                r(j, ptr);\n                ta.set(typedArrayPart(heap, ptr, ptr + j), offset);\n                n -= j;\n                offset += j;\n              } while (n > 0);\n            } catch (e) {\n              console.error(\n                'Highly unexpected (and ignored!) ' +\n                  'exception in sqlite3_randomness():',\n                e,\n              );\n            } finally {\n              wasm.pstack.restore(stack);\n            }\n            return ta;\n          }\n          wasm.exports.sqlite3_randomness(...args);\n        };\n\n        let __wasmfsOpfsDir = undefined;\n\n        capi.sqlite3_wasmfs_opfs_dir = function () {\n          if (undefined !== __wasmfsOpfsDir) return __wasmfsOpfsDir;\n\n          const pdir = config.wasmfsOpfsDir;\n          if (\n            !pdir ||\n            !globalThis.FileSystemHandle ||\n            !globalThis.FileSystemDirectoryHandle ||\n            !globalThis.FileSystemFileHandle\n          ) {\n            return (__wasmfsOpfsDir = '');\n          }\n          try {\n            if (\n              pdir &&\n              0 ===\n                wasm.xCallWrapped(\n                  'sqlite3__wasm_init_wasmfs',\n                  'i32',\n                  ['string'],\n                  pdir,\n                )\n            ) {\n              return (__wasmfsOpfsDir = pdir);\n            } else {\n              return (__wasmfsOpfsDir = '');\n            }\n          } catch (e) {\n            return (__wasmfsOpfsDir = '');\n          }\n        };\n\n        capi.sqlite3_wasmfs_filename_is_persistent = function (name) {\n          const p = capi.sqlite3_wasmfs_opfs_dir();\n          return p && name ? name.startsWith(p + '/') : false;\n        };\n\n        capi.sqlite3_js_db_uses_vfs = function (pDb, vfsName, dbName = 0) {\n          try {\n            const pK = capi.sqlite3_vfs_find(vfsName);\n            if (!pK) return false;\n            else if (!pDb) {\n              return pK === capi.sqlite3_vfs_find(0) ? pK : false;\n            } else {\n              return pK === capi.sqlite3_js_db_vfs(pDb, dbName) ? pK : false;\n            }\n          } catch (e) {\n            return false;\n          }\n        };\n\n        capi.sqlite3_js_vfs_list = function () {\n          const rc = [];\n          let pVfs = capi.sqlite3_vfs_find(0);\n          while (pVfs) {\n            const oVfs = new capi.sqlite3_vfs(pVfs);\n            rc.push(wasm.cstrToJs(oVfs.$zName));\n            pVfs = oVfs.$pNext;\n            oVfs.dispose();\n          }\n          return rc;\n        };\n\n        capi.sqlite3_js_db_export = function (pDb, schema = 0) {\n          pDb = wasm.xWrap.testConvertArg('sqlite3*', pDb);\n          if (!pDb) toss3('Invalid sqlite3* argument.');\n          if (!wasm.bigIntEnabled) toss3('BigInt64 support is not enabled.');\n          const scope = wasm.scopedAllocPush();\n          let pOut;\n          try {\n            const pSize = wasm.scopedAlloc(8 + wasm.ptrSizeof);\n            const ppOut = pSize + 8;\n\n            const zSchema = schema\n              ? wasm.isPtr(schema)\n                ? schema\n                : wasm.scopedAllocCString('' + schema)\n              : 0;\n            let rc = wasm.exports.sqlite3__wasm_db_serialize(\n              pDb,\n              zSchema,\n              ppOut,\n              pSize,\n              0,\n            );\n            if (rc) {\n              toss3(\n                'Database serialization failed with code',\n                sqlite3.capi.sqlite3_js_rc_str(rc),\n              );\n            }\n            pOut = wasm.peekPtr(ppOut);\n            const nOut = wasm.peek(pSize, 'i64');\n            rc = nOut\n              ? wasm.heap8u().slice(pOut, pOut + Number(nOut))\n              : new Uint8Array();\n            return rc;\n          } finally {\n            if (pOut) wasm.exports.sqlite3_free(pOut);\n            wasm.scopedAllocPop(scope);\n          }\n        };\n\n        capi.sqlite3_js_db_vfs = (dbPointer, dbName = 0) =>\n          util.sqlite3__wasm_db_vfs(dbPointer, dbName);\n\n        capi.sqlite3_js_aggregate_context = (pCtx, n) => {\n          return (\n            capi.sqlite3_aggregate_context(pCtx, n) ||\n            (n\n              ? WasmAllocError.toss(\n                  'Cannot allocate',\n                  n,\n                  'bytes for sqlite3_aggregate_context()',\n                )\n              : 0)\n          );\n        };\n\n        capi.sqlite3_js_posix_create_file = function (filename, data, dataLen) {\n          let pData;\n          if (data && wasm.isPtr(data)) {\n            pData = data;\n          } else if (\n            data instanceof ArrayBuffer ||\n            data instanceof Uint8Array\n          ) {\n            pData = wasm.allocFromTypedArray(data);\n            if (arguments.length < 3 || !util.isInt32(dataLen) || dataLen < 0) {\n              dataLen = data.byteLength;\n            }\n          } else {\n            SQLite3Error.toss(\n              'Invalid 2nd argument for sqlite3_js_posix_create_file().',\n            );\n          }\n          try {\n            if (!util.isInt32(dataLen) || dataLen < 0) {\n              SQLite3Error.toss(\n                'Invalid 3rd argument for sqlite3_js_posix_create_file().',\n              );\n            }\n            const rc = util.sqlite3__wasm_posix_create_file(\n              filename,\n              pData,\n              dataLen,\n            );\n            if (rc)\n              SQLite3Error.toss(\n                'Creation of file failed with sqlite3 result code',\n                capi.sqlite3_js_rc_str(rc),\n              );\n          } finally {\n            wasm.dealloc(pData);\n          }\n        };\n\n        capi.sqlite3_js_vfs_create_file = function (\n          vfs,\n          filename,\n          data,\n          dataLen,\n        ) {\n          config.warn(\n            'sqlite3_js_vfs_create_file() is deprecated and',\n            'should be avoided because it can lead to C-level crashes.',\n            'See its documentation for alternative options.',\n          );\n          let pData;\n          if (data) {\n            if (wasm.isPtr(data)) {\n              pData = data;\n            } else if (data instanceof ArrayBuffer) {\n              data = new Uint8Array(data);\n            }\n            if (data instanceof Uint8Array) {\n              pData = wasm.allocFromTypedArray(data);\n              if (\n                arguments.length < 4 ||\n                !util.isInt32(dataLen) ||\n                dataLen < 0\n              ) {\n                dataLen = data.byteLength;\n              }\n            } else {\n              SQLite3Error.toss(\n                'Invalid 3rd argument type for sqlite3_js_vfs_create_file().',\n              );\n            }\n          } else {\n            pData = 0;\n          }\n          if (!util.isInt32(dataLen) || dataLen < 0) {\n            wasm.dealloc(pData);\n            SQLite3Error.toss(\n              'Invalid 4th argument for sqlite3_js_vfs_create_file().',\n            );\n          }\n          try {\n            const rc = util.sqlite3__wasm_vfs_create_file(\n              vfs,\n              filename,\n              pData,\n              dataLen,\n            );\n            if (rc)\n              SQLite3Error.toss(\n                'Creation of file failed with sqlite3 result code',\n                capi.sqlite3_js_rc_str(rc),\n              );\n          } finally {\n            wasm.dealloc(pData);\n          }\n        };\n\n        capi.sqlite3_js_sql_to_string = (sql) => {\n          if ('string' === typeof sql) {\n            return sql;\n          }\n          const x = flexibleString(v);\n          return x === v ? undefined : x;\n        };\n\n        if (util.isUIThread()) {\n          const __kvvfsInfo = function (which) {\n            const rc = Object.create(null);\n            rc.prefix = 'kvvfs-' + which;\n            rc.stores = [];\n            if ('session' === which || '' === which)\n              rc.stores.push(globalThis.sessionStorage);\n            if ('local' === which || '' === which)\n              rc.stores.push(globalThis.localStorage);\n            return rc;\n          };\n\n          capi.sqlite3_js_kvvfs_clear = function (which = '') {\n            let rc = 0;\n            const kvinfo = __kvvfsInfo(which);\n            kvinfo.stores.forEach((s) => {\n              const toRm = [];\n              let i;\n              for (i = 0; i < s.length; ++i) {\n                const k = s.key(i);\n                if (k.startsWith(kvinfo.prefix)) toRm.push(k);\n              }\n              toRm.forEach((kk) => s.removeItem(kk));\n              rc += toRm.length;\n            });\n            return rc;\n          };\n\n          capi.sqlite3_js_kvvfs_size = function (which = '') {\n            let sz = 0;\n            const kvinfo = __kvvfsInfo(which);\n            kvinfo.stores.forEach((s) => {\n              let i;\n              for (i = 0; i < s.length; ++i) {\n                const k = s.key(i);\n                if (k.startsWith(kvinfo.prefix)) {\n                  sz += k.length;\n                  sz += s.getItem(k).length;\n                }\n              }\n            });\n            return sz * 2;\n          };\n        }\n\n        capi.sqlite3_db_config = function (pDb, op, ...args) {\n          if (!this.s) {\n            this.s = wasm.xWrap('sqlite3__wasm_db_config_s', 'int', [\n              'sqlite3*',\n              'int',\n              'string:static',\n            ]);\n            this.pii = wasm.xWrap('sqlite3__wasm_db_config_pii', 'int', [\n              'sqlite3*',\n              'int',\n              '*',\n              'int',\n              'int',\n            ]);\n            this.ip = wasm.xWrap('sqlite3__wasm_db_config_ip', 'int', [\n              'sqlite3*',\n              'int',\n              'int',\n              '*',\n            ]);\n          }\n          switch (op) {\n            case capi.SQLITE_DBCONFIG_ENABLE_FKEY:\n            case capi.SQLITE_DBCONFIG_ENABLE_TRIGGER:\n            case capi.SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER:\n            case capi.SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION:\n            case capi.SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE:\n            case capi.SQLITE_DBCONFIG_ENABLE_QPSG:\n            case capi.SQLITE_DBCONFIG_TRIGGER_EQP:\n            case capi.SQLITE_DBCONFIG_RESET_DATABASE:\n            case capi.SQLITE_DBCONFIG_DEFENSIVE:\n            case capi.SQLITE_DBCONFIG_WRITABLE_SCHEMA:\n            case capi.SQLITE_DBCONFIG_LEGACY_ALTER_TABLE:\n            case capi.SQLITE_DBCONFIG_DQS_DML:\n            case capi.SQLITE_DBCONFIG_DQS_DDL:\n            case capi.SQLITE_DBCONFIG_ENABLE_VIEW:\n            case capi.SQLITE_DBCONFIG_LEGACY_FILE_FORMAT:\n            case capi.SQLITE_DBCONFIG_TRUSTED_SCHEMA:\n            case capi.SQLITE_DBCONFIG_STMT_SCANSTATUS:\n            case capi.SQLITE_DBCONFIG_REVERSE_SCANORDER:\n              return this.ip(pDb, op, args[0], args[1] || 0);\n            case capi.SQLITE_DBCONFIG_LOOKASIDE:\n              return this.pii(pDb, op, args[0], args[1], args[2]);\n            case capi.SQLITE_DBCONFIG_MAINDBNAME:\n              return this.s(pDb, op, args[0]);\n            default:\n              return capi.SQLITE_MISUSE;\n          }\n        }.bind(Object.create(null));\n\n        capi.sqlite3_value_to_js = function (\n          pVal,\n          throwIfCannotConvert = true,\n        ) {\n          let arg;\n          const valType = capi.sqlite3_value_type(pVal);\n          switch (valType) {\n            case capi.SQLITE_INTEGER:\n              if (wasm.bigIntEnabled) {\n                arg = capi.sqlite3_value_int64(pVal);\n                if (util.bigIntFitsDouble(arg)) arg = Number(arg);\n              } else arg = capi.sqlite3_value_double(pVal);\n              break;\n            case capi.SQLITE_FLOAT:\n              arg = capi.sqlite3_value_double(pVal);\n              break;\n            case capi.SQLITE_TEXT:\n              arg = capi.sqlite3_value_text(pVal);\n              break;\n            case capi.SQLITE_BLOB: {\n              const n = capi.sqlite3_value_bytes(pVal);\n              const pBlob = capi.sqlite3_value_blob(pVal);\n              if (n && !pBlob)\n                sqlite3.WasmAllocError.toss(\n                  'Cannot allocate memory for blob argument of',\n                  n,\n                  'byte(s)',\n                );\n              arg = n ? wasm.heap8u().slice(pBlob, pBlob + Number(n)) : null;\n              break;\n            }\n            case capi.SQLITE_NULL:\n              arg = null;\n              break;\n            default:\n              if (throwIfCannotConvert) {\n                toss3(\n                  capi.SQLITE_MISMATCH,\n                  'Unhandled sqlite3_value_type():',\n                  valType,\n                );\n              }\n              arg = undefined;\n          }\n          return arg;\n        };\n\n        capi.sqlite3_values_to_js = function (\n          argc,\n          pArgv,\n          throwIfCannotConvert = true,\n        ) {\n          let i;\n          const tgt = [];\n          for (i = 0; i < argc; ++i) {\n            tgt.push(\n              capi.sqlite3_value_to_js(\n                wasm.peekPtr(pArgv + wasm.ptrSizeof * i),\n                throwIfCannotConvert,\n              ),\n            );\n          }\n          return tgt;\n        };\n\n        capi.sqlite3_result_error_js = function (pCtx, e) {\n          if (e instanceof WasmAllocError) {\n            capi.sqlite3_result_error_nomem(pCtx);\n          } else {\n            capi.sqlite3_result_error(pCtx, '' + e, -1);\n          }\n        };\n\n        capi.sqlite3_result_js = function (pCtx, val) {\n          if (val instanceof Error) {\n            capi.sqlite3_result_error_js(pCtx, val);\n            return;\n          }\n          try {\n            switch (typeof val) {\n              case 'undefined':\n                break;\n              case 'boolean':\n                capi.sqlite3_result_int(pCtx, val ? 1 : 0);\n                break;\n              case 'bigint':\n                if (util.bigIntFits32(val)) {\n                  capi.sqlite3_result_int(pCtx, Number(val));\n                } else if (util.bigIntFitsDouble(val)) {\n                  capi.sqlite3_result_double(pCtx, Number(val));\n                } else if (wasm.bigIntEnabled) {\n                  if (util.bigIntFits64(val))\n                    capi.sqlite3_result_int64(pCtx, val);\n                  else\n                    toss3(\n                      'BigInt value',\n                      val.toString(),\n                      'is too BigInt for int64.',\n                    );\n                } else {\n                  toss3('BigInt value', val.toString(), 'is too BigInt.');\n                }\n                break;\n              case 'number': {\n                let f;\n                if (util.isInt32(val)) {\n                  f = capi.sqlite3_result_int;\n                } else if (\n                  wasm.bigIntEnabled &&\n                  Number.isInteger(val) &&\n                  util.bigIntFits64(BigInt(val))\n                ) {\n                  f = capi.sqlite3_result_int64;\n                } else {\n                  f = capi.sqlite3_result_double;\n                }\n                f(pCtx, val);\n                break;\n              }\n              case 'string': {\n                const [p, n] = wasm.allocCString(val, true);\n                capi.sqlite3_result_text(pCtx, p, n, capi.SQLITE_WASM_DEALLOC);\n                break;\n              }\n              case 'object':\n                if (null === val) {\n                  capi.sqlite3_result_null(pCtx);\n                  break;\n                } else if (util.isBindableTypedArray(val)) {\n                  const pBlob = wasm.allocFromTypedArray(val);\n                  capi.sqlite3_result_blob(\n                    pCtx,\n                    pBlob,\n                    val.byteLength,\n                    capi.SQLITE_WASM_DEALLOC,\n                  );\n                  break;\n                }\n\n              default:\n                toss3(\n                  \"Don't not how to handle this UDF result value:\",\n                  typeof val,\n                  val,\n                );\n            }\n          } catch (e) {\n            capi.sqlite3_result_error_js(pCtx, e);\n          }\n        };\n\n        capi.sqlite3_column_js = function (\n          pStmt,\n          iCol,\n          throwIfCannotConvert = true,\n        ) {\n          const v = capi.sqlite3_column_value(pStmt, iCol);\n          return 0 === v\n            ? undefined\n            : capi.sqlite3_value_to_js(v, throwIfCannotConvert);\n        };\n\n        const __newOldValue = function (pObj, iCol, impl) {\n          impl = capi[impl];\n          if (!this.ptr) this.ptr = wasm.allocPtr();\n          else wasm.pokePtr(this.ptr, 0);\n          const rc = impl(pObj, iCol, this.ptr);\n          if (rc)\n            return SQLite3Error.toss(\n              rc,\n              arguments[2] + '() failed with code ' + rc,\n            );\n          const pv = wasm.peekPtr(this.ptr);\n          return pv ? capi.sqlite3_value_to_js(pv, true) : undefined;\n        }.bind(Object.create(null));\n\n        capi.sqlite3_preupdate_new_js = (pDb, iCol) =>\n          __newOldValue(pDb, iCol, 'sqlite3_preupdate_new');\n\n        capi.sqlite3_preupdate_old_js = (pDb, iCol) =>\n          __newOldValue(pDb, iCol, 'sqlite3_preupdate_old');\n\n        capi.sqlite3changeset_new_js = (pChangesetIter, iCol) =>\n          __newOldValue(pChangesetIter, iCol, 'sqlite3changeset_new');\n\n        capi.sqlite3changeset_old_js = (pChangesetIter, iCol) =>\n          __newOldValue(pChangesetIter, iCol, 'sqlite3changeset_old');\n\n        const sqlite3 = {\n          WasmAllocError: WasmAllocError,\n          SQLite3Error: SQLite3Error,\n          capi,\n          util,\n          wasm,\n          config,\n\n          version: Object.create(null),\n\n          client: undefined,\n\n          asyncPostInit: async function ff() {\n            if (ff.isReady instanceof Promise) return ff.isReady;\n            let lia = sqlite3ApiBootstrap.initializersAsync;\n            delete sqlite3ApiBootstrap.initializersAsync;\n            const postInit = async () => {\n              if (!sqlite3.__isUnderTest) {\n                delete sqlite3.util;\n\n                delete sqlite3.StructBinder;\n              }\n              return sqlite3;\n            };\n            const catcher = (e) => {\n              config.error('an async sqlite3 initializer failed:', e);\n              throw e;\n            };\n            if (!lia || !lia.length) {\n              return (ff.isReady = postInit().catch(catcher));\n            }\n            lia = lia.map((f) => {\n              return f instanceof Function ? async (x) => f(sqlite3) : f;\n            });\n            lia.push(postInit);\n            let p = Promise.resolve(sqlite3);\n            while (lia.length) p = p.then(lia.shift());\n            return (ff.isReady = p.catch(catcher));\n          },\n\n          scriptInfo: undefined,\n        };\n        try {\n          sqlite3ApiBootstrap.initializers.forEach((f) => {\n            f(sqlite3);\n          });\n        } catch (e) {\n          console.error('sqlite3 bootstrap initializer threw:', e);\n          throw e;\n        }\n        delete sqlite3ApiBootstrap.initializers;\n        sqlite3ApiBootstrap.sqlite3 = sqlite3;\n        return sqlite3;\n      };\n\n      globalThis.sqlite3ApiBootstrap.initializers = [];\n\n      globalThis.sqlite3ApiBootstrap.initializersAsync = [];\n\n      globalThis.sqlite3ApiBootstrap.defaultConfig = Object.create(null);\n\n      globalThis.sqlite3ApiBootstrap.sqlite3 = undefined;\n\n      globalThis.WhWasmUtilInstaller = function (target) {\n        'use strict';\n        if (undefined === target.bigIntEnabled) {\n          target.bigIntEnabled = !!globalThis['BigInt64Array'];\n        }\n\n        const toss = (...args) => {\n          throw new Error(args.join(' '));\n        };\n\n        if (!target.exports) {\n          Object.defineProperty(target, 'exports', {\n            enumerable: true,\n            configurable: true,\n            get: () => target.instance && target.instance.exports,\n          });\n        }\n\n        const ptrIR = target.pointerIR || 'i32';\n        const ptrSizeof = (target.ptrSizeof =\n          'i32' === ptrIR\n            ? 4\n            : 'i64' === ptrIR\n              ? 8\n              : toss('Unhandled ptrSizeof:', ptrIR));\n\n        const cache = Object.create(null);\n\n        cache.heapSize = 0;\n\n        cache.memory = null;\n\n        cache.freeFuncIndexes = [];\n\n        cache.scopedAlloc = [];\n\n        cache.utf8Decoder = new TextDecoder();\n        cache.utf8Encoder = new TextEncoder('utf-8');\n\n        target.sizeofIR = (n) => {\n          switch (n) {\n            case 'i8':\n              return 1;\n            case 'i16':\n              return 2;\n            case 'i32':\n            case 'f32':\n            case 'float':\n              return 4;\n            case 'i64':\n            case 'f64':\n            case 'double':\n              return 8;\n            case '*':\n              return ptrSizeof;\n            default:\n              return ('' + n).endsWith('*') ? ptrSizeof : undefined;\n          }\n        };\n\n        const heapWrappers = function () {\n          if (!cache.memory) {\n            cache.memory =\n              target.memory instanceof WebAssembly.Memory\n                ? target.memory\n                : target.exports.memory;\n          } else if (cache.heapSize === cache.memory.buffer.byteLength) {\n            return cache;\n          }\n\n          const b = cache.memory.buffer;\n          cache.HEAP8 = new Int8Array(b);\n          cache.HEAP8U = new Uint8Array(b);\n          cache.HEAP16 = new Int16Array(b);\n          cache.HEAP16U = new Uint16Array(b);\n          cache.HEAP32 = new Int32Array(b);\n          cache.HEAP32U = new Uint32Array(b);\n          if (target.bigIntEnabled) {\n            cache.HEAP64 = new BigInt64Array(b);\n            cache.HEAP64U = new BigUint64Array(b);\n          }\n          cache.HEAP32F = new Float32Array(b);\n          cache.HEAP64F = new Float64Array(b);\n          cache.heapSize = b.byteLength;\n          return cache;\n        };\n\n        target.heap8 = () => heapWrappers().HEAP8;\n\n        target.heap8u = () => heapWrappers().HEAP8U;\n\n        target.heap16 = () => heapWrappers().HEAP16;\n\n        target.heap16u = () => heapWrappers().HEAP16U;\n\n        target.heap32 = () => heapWrappers().HEAP32;\n\n        target.heap32u = () => heapWrappers().HEAP32U;\n\n        target.heapForSize = function (n, unsigned = true) {\n          let ctor;\n          const c =\n            cache.memory && cache.heapSize === cache.memory.buffer.byteLength\n              ? cache\n              : heapWrappers();\n          switch (n) {\n            case Int8Array:\n              return c.HEAP8;\n            case Uint8Array:\n              return c.HEAP8U;\n            case Int16Array:\n              return c.HEAP16;\n            case Uint16Array:\n              return c.HEAP16U;\n            case Int32Array:\n              return c.HEAP32;\n            case Uint32Array:\n              return c.HEAP32U;\n            case 8:\n              return unsigned ? c.HEAP8U : c.HEAP8;\n            case 16:\n              return unsigned ? c.HEAP16U : c.HEAP16;\n            case 32:\n              return unsigned ? c.HEAP32U : c.HEAP32;\n            case 64:\n              if (c.HEAP64) return unsigned ? c.HEAP64U : c.HEAP64;\n              break;\n            default:\n              if (target.bigIntEnabled) {\n                if (n === globalThis['BigUint64Array']) return c.HEAP64U;\n                else if (n === globalThis['BigInt64Array']) return c.HEAP64;\n                break;\n              }\n          }\n          toss(\n            'Invalid heapForSize() size: expecting 8, 16, 32,',\n            'or (if BigInt is enabled) 64.',\n          );\n        };\n\n        target.functionTable = function () {\n          return target.exports.__indirect_function_table;\n        };\n\n        target.functionEntry = function (fptr) {\n          const ft = target.functionTable();\n          return fptr < ft.length ? ft.get(fptr) : undefined;\n        };\n\n        target.jsFuncToWasm = function f(func, sig) {\n          if (!f._) {\n            f._ = {\n              sigTypes: Object.assign(Object.create(null), {\n                i: 'i32',\n                p: 'i32',\n                P: 'i32',\n                s: 'i32',\n                j: 'i64',\n                f: 'f32',\n                d: 'f64',\n              }),\n\n              typeCodes: Object.assign(Object.create(null), {\n                f64: 0x7c,\n                f32: 0x7d,\n                i64: 0x7e,\n                i32: 0x7f,\n              }),\n\n              uleb128Encode: function (tgt, method, n) {\n                if (n < 128) tgt[method](n);\n                else tgt[method](n % 128 | 128, n >> 7);\n              },\n\n              rxJSig: /^(\\w)\\((\\w*)\\)$/,\n\n              sigParams: function (sig) {\n                const m = f._.rxJSig.exec(sig);\n                return m ? m[2] : sig.substr(1);\n              },\n\n              letterType: (x) =>\n                f._.sigTypes[x] || toss('Invalid signature letter:', x),\n\n              pushSigType: (dest, letter) =>\n                dest.push(f._.typeCodes[f._.letterType(letter)]),\n            };\n          }\n          if ('string' === typeof func) {\n            const x = sig;\n            sig = func;\n            func = x;\n          }\n          const sigParams = f._.sigParams(sig);\n          const wasmCode = [0x01, 0x60];\n          f._.uleb128Encode(wasmCode, 'push', sigParams.length);\n          for (const x of sigParams) f._.pushSigType(wasmCode, x);\n          if ('v' === sig[0]) wasmCode.push(0);\n          else {\n            wasmCode.push(1);\n            f._.pushSigType(wasmCode, sig[0]);\n          }\n          f._.uleb128Encode(wasmCode, 'unshift', wasmCode.length);\n          wasmCode.unshift(\n            0x00,\n            0x61,\n            0x73,\n            0x6d,\n            0x01,\n            0x00,\n            0x00,\n            0x00,\n            0x01,\n          );\n          wasmCode.push(\n            0x02,\n            0x07,\n\n            0x01,\n            0x01,\n            0x65,\n            0x01,\n            0x66,\n            0x00,\n            0x00,\n            0x07,\n            0x05,\n\n            0x01,\n            0x01,\n            0x66,\n            0x00,\n            0x00,\n          );\n          return new WebAssembly.Instance(\n            new WebAssembly.Module(new Uint8Array(wasmCode)),\n            {\n              e: { f: func },\n            },\n          ).exports['f'];\n        };\n\n        const __installFunction = function f(func, sig, scoped) {\n          if (scoped && !cache.scopedAlloc.length) {\n            toss('No scopedAllocPush() scope is active.');\n          }\n          if ('string' === typeof func) {\n            const x = sig;\n            sig = func;\n            func = x;\n          }\n          if ('string' !== typeof sig || !(func instanceof Function)) {\n            toss(\n              'Invalid arguments: expecting (function,signature) ' +\n                'or (signature,function).',\n            );\n          }\n          const ft = target.functionTable();\n          const oldLen = ft.length;\n          let ptr;\n          while (cache.freeFuncIndexes.length) {\n            ptr = cache.freeFuncIndexes.pop();\n            if (ft.get(ptr)) {\n              ptr = null;\n              continue;\n            } else {\n              break;\n            }\n          }\n          if (!ptr) {\n            ptr = oldLen;\n            ft.grow(1);\n          }\n          try {\n            ft.set(ptr, func);\n            if (scoped) {\n              cache.scopedAlloc[cache.scopedAlloc.length - 1].push(ptr);\n            }\n            return ptr;\n          } catch (e) {\n            if (!(e instanceof TypeError)) {\n              if (ptr === oldLen) cache.freeFuncIndexes.push(oldLen);\n              throw e;\n            }\n          }\n\n          try {\n            const fptr = target.jsFuncToWasm(func, sig);\n            ft.set(ptr, fptr);\n            if (scoped) {\n              cache.scopedAlloc[cache.scopedAlloc.length - 1].push(ptr);\n            }\n          } catch (e) {\n            if (ptr === oldLen) cache.freeFuncIndexes.push(oldLen);\n            throw e;\n          }\n          return ptr;\n        };\n\n        target.installFunction = (func, sig) =>\n          __installFunction(func, sig, false);\n\n        target.scopedInstallFunction = (func, sig) =>\n          __installFunction(func, sig, true);\n\n        target.uninstallFunction = function (ptr) {\n          if (!ptr && 0 !== ptr) return undefined;\n          const fi = cache.freeFuncIndexes;\n          const ft = target.functionTable();\n          fi.push(ptr);\n          const rc = ft.get(ptr);\n          ft.set(ptr, null);\n          return rc;\n        };\n\n        target.peek = function f(ptr, type = 'i8') {\n          if (type.endsWith('*')) type = ptrIR;\n          const c =\n            cache.memory && cache.heapSize === cache.memory.buffer.byteLength\n              ? cache\n              : heapWrappers();\n          const list = Array.isArray(ptr) ? [] : undefined;\n          let rc;\n          do {\n            if (list) ptr = arguments[0].shift();\n            switch (type) {\n              case 'i1':\n              case 'i8':\n                rc = c.HEAP8[ptr >> 0];\n                break;\n              case 'i16':\n                rc = c.HEAP16[ptr >> 1];\n                break;\n              case 'i32':\n                rc = c.HEAP32[ptr >> 2];\n                break;\n              case 'float':\n              case 'f32':\n                rc = c.HEAP32F[ptr >> 2];\n                break;\n              case 'double':\n              case 'f64':\n                rc = Number(c.HEAP64F[ptr >> 3]);\n                break;\n              case 'i64':\n                if (target.bigIntEnabled) {\n                  rc = BigInt(c.HEAP64[ptr >> 3]);\n                  break;\n                }\n\n              default:\n                toss('Invalid type for peek():', type);\n            }\n            if (list) list.push(rc);\n          } while (list && arguments[0].length);\n          return list || rc;\n        };\n\n        target.poke = function (ptr, value, type = 'i8') {\n          if (type.endsWith('*')) type = ptrIR;\n          const c =\n            cache.memory && cache.heapSize === cache.memory.buffer.byteLength\n              ? cache\n              : heapWrappers();\n          for (const p of Array.isArray(ptr) ? ptr : [ptr]) {\n            switch (type) {\n              case 'i1':\n              case 'i8':\n                c.HEAP8[p >> 0] = value;\n                continue;\n              case 'i16':\n                c.HEAP16[p >> 1] = value;\n                continue;\n              case 'i32':\n                c.HEAP32[p >> 2] = value;\n                continue;\n              case 'float':\n              case 'f32':\n                c.HEAP32F[p >> 2] = value;\n                continue;\n              case 'double':\n              case 'f64':\n                c.HEAP64F[p >> 3] = value;\n                continue;\n              case 'i64':\n                if (c.HEAP64) {\n                  c.HEAP64[p >> 3] = BigInt(value);\n                  continue;\n                }\n\n              default:\n                toss('Invalid type for poke(): ' + type);\n            }\n          }\n          return this;\n        };\n\n        target.peekPtr = (...ptr) =>\n          target.peek(1 === ptr.length ? ptr[0] : ptr, ptrIR);\n\n        target.pokePtr = (ptr, value = 0) => target.poke(ptr, value, ptrIR);\n\n        target.peek8 = (...ptr) =>\n          target.peek(1 === ptr.length ? ptr[0] : ptr, 'i8');\n\n        target.poke8 = (ptr, value) => target.poke(ptr, value, 'i8');\n\n        target.peek16 = (...ptr) =>\n          target.peek(1 === ptr.length ? ptr[0] : ptr, 'i16');\n\n        target.poke16 = (ptr, value) => target.poke(ptr, value, 'i16');\n\n        target.peek32 = (...ptr) =>\n          target.peek(1 === ptr.length ? ptr[0] : ptr, 'i32');\n\n        target.poke32 = (ptr, value) => target.poke(ptr, value, 'i32');\n\n        target.peek64 = (...ptr) =>\n          target.peek(1 === ptr.length ? ptr[0] : ptr, 'i64');\n\n        target.poke64 = (ptr, value) => target.poke(ptr, value, 'i64');\n\n        target.peek32f = (...ptr) =>\n          target.peek(1 === ptr.length ? ptr[0] : ptr, 'f32');\n\n        target.poke32f = (ptr, value) => target.poke(ptr, value, 'f32');\n\n        target.peek64f = (...ptr) =>\n          target.peek(1 === ptr.length ? ptr[0] : ptr, 'f64');\n\n        target.poke64f = (ptr, value) => target.poke(ptr, value, 'f64');\n\n        target.getMemValue = target.peek;\n\n        target.getPtrValue = target.peekPtr;\n\n        target.setMemValue = target.poke;\n\n        target.setPtrValue = target.pokePtr;\n\n        target.isPtr32 = (ptr) =>\n          'number' === typeof ptr && ptr === (ptr | 0) && ptr >= 0;\n\n        target.isPtr = target.isPtr32;\n\n        target.cstrlen = function (ptr) {\n          if (!ptr || !target.isPtr(ptr)) return null;\n          const h = heapWrappers().HEAP8U;\n          let pos = ptr;\n          for (; h[pos] !== 0; ++pos) {}\n          return pos - ptr;\n        };\n\n        const __SAB =\n          'undefined' === typeof SharedArrayBuffer\n            ? function () {}\n            : SharedArrayBuffer;\n        const __utf8Decode = function (arrayBuffer, begin, end) {\n          return cache.utf8Decoder.decode(\n            arrayBuffer.buffer instanceof __SAB\n              ? arrayBuffer.slice(begin, end)\n              : arrayBuffer.subarray(begin, end),\n          );\n        };\n\n        target.cstrToJs = function (ptr) {\n          const n = target.cstrlen(ptr);\n          return n\n            ? __utf8Decode(heapWrappers().HEAP8U, ptr, ptr + n)\n            : null === n\n              ? n\n              : '';\n        };\n\n        target.jstrlen = function (str) {\n          if ('string' !== typeof str) return null;\n          const n = str.length;\n          let len = 0;\n          for (let i = 0; i < n; ++i) {\n            let u = str.charCodeAt(i);\n            if (u >= 0xd800 && u <= 0xdfff) {\n              u =\n                (0x10000 + ((u & 0x3ff) << 10)) | (str.charCodeAt(++i) & 0x3ff);\n            }\n            if (u <= 0x7f) ++len;\n            else if (u <= 0x7ff) len += 2;\n            else if (u <= 0xffff) len += 3;\n            else len += 4;\n          }\n          return len;\n        };\n\n        target.jstrcpy = function (\n          jstr,\n          tgt,\n          offset = 0,\n          maxBytes = -1,\n          addNul = true,\n        ) {\n          if (\n            !tgt ||\n            (!(tgt instanceof Int8Array) && !(tgt instanceof Uint8Array))\n          ) {\n            toss('jstrcpy() target must be an Int8Array or Uint8Array.');\n          }\n          if (maxBytes < 0) maxBytes = tgt.length - offset;\n          if (!(maxBytes > 0) || !(offset >= 0)) return 0;\n          let i = 0,\n            max = jstr.length;\n          const begin = offset,\n            end = offset + maxBytes - (addNul ? 1 : 0);\n          for (; i < max && offset < end; ++i) {\n            let u = jstr.charCodeAt(i);\n            if (u >= 0xd800 && u <= 0xdfff) {\n              u =\n                (0x10000 + ((u & 0x3ff) << 10)) |\n                (jstr.charCodeAt(++i) & 0x3ff);\n            }\n            if (u <= 0x7f) {\n              if (offset >= end) break;\n              tgt[offset++] = u;\n            } else if (u <= 0x7ff) {\n              if (offset + 1 >= end) break;\n              tgt[offset++] = 0xc0 | (u >> 6);\n              tgt[offset++] = 0x80 | (u & 0x3f);\n            } else if (u <= 0xffff) {\n              if (offset + 2 >= end) break;\n              tgt[offset++] = 0xe0 | (u >> 12);\n              tgt[offset++] = 0x80 | ((u >> 6) & 0x3f);\n              tgt[offset++] = 0x80 | (u & 0x3f);\n            } else {\n              if (offset + 3 >= end) break;\n              tgt[offset++] = 0xf0 | (u >> 18);\n              tgt[offset++] = 0x80 | ((u >> 12) & 0x3f);\n              tgt[offset++] = 0x80 | ((u >> 6) & 0x3f);\n              tgt[offset++] = 0x80 | (u & 0x3f);\n            }\n          }\n          if (addNul) tgt[offset++] = 0;\n          return offset - begin;\n        };\n\n        target.cstrncpy = function (tgtPtr, srcPtr, n) {\n          if (!tgtPtr || !srcPtr)\n            toss('cstrncpy() does not accept NULL strings.');\n          if (n < 0) n = target.cstrlen(strPtr) + 1;\n          else if (!(n > 0)) return 0;\n          const heap = target.heap8u();\n          let i = 0,\n            ch;\n          for (; i < n && (ch = heap[srcPtr + i]); ++i) {\n            heap[tgtPtr + i] = ch;\n          }\n          if (i < n) heap[tgtPtr + i++] = 0;\n          return i;\n        };\n\n        target.jstrToUintArray = (str, addNul = false) => {\n          return cache.utf8Encoder.encode(addNul ? str + '\\0' : str);\n        };\n\n        const __affirmAlloc = (obj, funcName) => {\n          if (\n            !(obj.alloc instanceof Function) ||\n            !(obj.dealloc instanceof Function)\n          ) {\n            toss(\n              'Object is missing alloc() and/or dealloc() function(s)',\n              'required by',\n              funcName + '().',\n            );\n          }\n        };\n\n        const __allocCStr = function (\n          jstr,\n          returnWithLength,\n          allocator,\n          funcName,\n        ) {\n          __affirmAlloc(target, funcName);\n          if ('string' !== typeof jstr) return null;\n          if (0) {\n            const n = target.jstrlen(jstr),\n              ptr = allocator(n + 1);\n            target.jstrcpy(jstr, target.heap8u(), ptr, n + 1, true);\n            return returnWithLength ? [ptr, n] : ptr;\n          } else {\n            const u = cache.utf8Encoder.encode(jstr),\n              ptr = allocator(u.length + 1),\n              heap = heapWrappers().HEAP8U;\n            heap.set(u, ptr);\n            heap[ptr + u.length] = 0;\n            return returnWithLength ? [ptr, u.length] : ptr;\n          }\n        };\n\n        target.allocCString = (jstr, returnWithLength = false) =>\n          __allocCStr(jstr, returnWithLength, target.alloc, 'allocCString()');\n\n        target.scopedAllocPush = function () {\n          __affirmAlloc(target, 'scopedAllocPush');\n          const a = [];\n          cache.scopedAlloc.push(a);\n          return a;\n        };\n\n        target.scopedAllocPop = function (state) {\n          __affirmAlloc(target, 'scopedAllocPop');\n          const n = arguments.length\n            ? cache.scopedAlloc.indexOf(state)\n            : cache.scopedAlloc.length - 1;\n          if (n < 0) toss('Invalid state object for scopedAllocPop().');\n          if (0 === arguments.length) state = cache.scopedAlloc[n];\n          cache.scopedAlloc.splice(n, 1);\n          for (let p; (p = state.pop()); ) {\n            if (target.functionEntry(p)) {\n              target.uninstallFunction(p);\n            } else target.dealloc(p);\n          }\n        };\n\n        target.scopedAlloc = function (n) {\n          if (!cache.scopedAlloc.length) {\n            toss('No scopedAllocPush() scope is active.');\n          }\n          const p = target.alloc(n);\n          cache.scopedAlloc[cache.scopedAlloc.length - 1].push(p);\n          return p;\n        };\n\n        Object.defineProperty(target.scopedAlloc, 'level', {\n          configurable: false,\n          enumerable: false,\n          get: () => cache.scopedAlloc.length,\n          set: () => toss(\"The 'active' property is read-only.\"),\n        });\n\n        target.scopedAllocCString = (jstr, returnWithLength = false) =>\n          __allocCStr(\n            jstr,\n            returnWithLength,\n            target.scopedAlloc,\n            'scopedAllocCString()',\n          );\n\n        const __allocMainArgv = function (isScoped, list) {\n          const pList = target[isScoped ? 'scopedAlloc' : 'alloc'](\n            (list.length + 1) * target.ptrSizeof,\n          );\n          let i = 0;\n          list.forEach((e) => {\n            target.pokePtr(\n              pList + target.ptrSizeof * i++,\n              target[isScoped ? 'scopedAllocCString' : 'allocCString']('' + e),\n            );\n          });\n          target.pokePtr(pList + target.ptrSizeof * i, 0);\n          return pList;\n        };\n\n        target.scopedAllocMainArgv = (list) => __allocMainArgv(true, list);\n\n        target.allocMainArgv = (list) => __allocMainArgv(false, list);\n\n        target.cArgvToJs = (argc, pArgv) => {\n          const list = [];\n          for (let i = 0; i < argc; ++i) {\n            const arg = target.peekPtr(pArgv + target.ptrSizeof * i);\n            list.push(arg ? target.cstrToJs(arg) : null);\n          }\n          return list;\n        };\n\n        target.scopedAllocCall = function (func) {\n          target.scopedAllocPush();\n          try {\n            return func();\n          } finally {\n            target.scopedAllocPop();\n          }\n        };\n\n        const __allocPtr = function (howMany, safePtrSize, method) {\n          __affirmAlloc(target, method);\n          const pIr = safePtrSize ? 'i64' : ptrIR;\n          let m = target[method](howMany * (safePtrSize ? 8 : ptrSizeof));\n          target.poke(m, 0, pIr);\n          if (1 === howMany) {\n            return m;\n          }\n          const a = [m];\n          for (let i = 1; i < howMany; ++i) {\n            m += safePtrSize ? 8 : ptrSizeof;\n            a[i] = m;\n            target.poke(m, 0, pIr);\n          }\n          return a;\n        };\n\n        target.allocPtr = (howMany = 1, safePtrSize = true) =>\n          __allocPtr(howMany, safePtrSize, 'alloc');\n\n        target.scopedAllocPtr = (howMany = 1, safePtrSize = true) =>\n          __allocPtr(howMany, safePtrSize, 'scopedAlloc');\n\n        target.xGet = function (name) {\n          return (\n            target.exports[name] || toss('Cannot find exported symbol:', name)\n          );\n        };\n\n        const __argcMismatch = (f, n) =>\n          toss(f + '() requires', n, 'argument(s).');\n\n        target.xCall = function (fname, ...args) {\n          const f = fname instanceof Function ? fname : target.xGet(fname);\n          if (!(f instanceof Function))\n            toss('Exported symbol', fname, 'is not a function.');\n          if (f.length !== args.length)\n            __argcMismatch(f === fname ? f.name : fname, f.length);\n          return 2 === arguments.length && Array.isArray(arguments[1])\n            ? f.apply(null, arguments[1])\n            : f.apply(null, args);\n        };\n\n        cache.xWrap = Object.create(null);\n        cache.xWrap.convert = Object.create(null);\n\n        cache.xWrap.convert.arg = new Map();\n\n        cache.xWrap.convert.result = new Map();\n        const xArg = cache.xWrap.convert.arg,\n          xResult = cache.xWrap.convert.result;\n\n        if (target.bigIntEnabled) {\n          xArg.set('i64', (i) => BigInt(i));\n        }\n        const __xArgPtr =\n          'i32' === ptrIR ? (i) => i | 0 : (i) => BigInt(i) | BigInt(0);\n        xArg\n          .set('i32', __xArgPtr)\n          .set('i16', (i) => (i | 0) & 0xffff)\n          .set('i8', (i) => (i | 0) & 0xff)\n          .set('f32', (i) => Number(i).valueOf())\n          .set('float', xArg.get('f32'))\n          .set('f64', xArg.get('f32'))\n          .set('double', xArg.get('f64'))\n          .set('int', xArg.get('i32'))\n          .set('null', (i) => i)\n          .set(null, xArg.get('null'))\n          .set('**', __xArgPtr)\n          .set('*', __xArgPtr);\n        xResult\n          .set('*', __xArgPtr)\n          .set('pointer', __xArgPtr)\n          .set('number', (v) => Number(v))\n          .set('void', (v) => undefined)\n          .set('null', (v) => v)\n          .set(null, xResult.get('null'));\n\n        {\n          const copyToResult = [\n            'i8',\n            'i16',\n            'i32',\n            'int',\n            'f32',\n            'float',\n            'f64',\n            'double',\n          ];\n          if (target.bigIntEnabled) copyToResult.push('i64');\n          const adaptPtr = xArg.get(ptrIR);\n          for (const t of copyToResult) {\n            xArg.set(t + '*', adaptPtr);\n            xResult.set(t + '*', adaptPtr);\n            xResult.set(t, xArg.get(t) || toss('Missing arg converter:', t));\n          }\n        }\n\n        const __xArgString = function (v) {\n          if ('string' === typeof v) return target.scopedAllocCString(v);\n          return v ? __xArgPtr(v) : null;\n        };\n        xArg\n          .set('string', __xArgString)\n          .set('utf8', __xArgString)\n          .set('pointer', __xArgString);\n\n        xResult\n          .set('string', (i) => target.cstrToJs(i))\n          .set('utf8', xResult.get('string'))\n          .set('string:dealloc', (i) => {\n            try {\n              return i ? target.cstrToJs(i) : null;\n            } finally {\n              target.dealloc(i);\n            }\n          })\n          .set('utf8:dealloc', xResult.get('string:dealloc'))\n          .set('json', (i) => JSON.parse(target.cstrToJs(i)))\n          .set('json:dealloc', (i) => {\n            try {\n              return i ? JSON.parse(target.cstrToJs(i)) : null;\n            } finally {\n              target.dealloc(i);\n            }\n          });\n\n        const AbstractArgAdapter = class {\n          constructor(opt) {\n            this.name = opt.name || 'unnamed adapter';\n          }\n\n          convertArg(v, argv, argIndex) {\n            toss('AbstractArgAdapter must be subclassed.');\n          }\n        };\n\n        xArg.FuncPtrAdapter = class FuncPtrAdapter extends AbstractArgAdapter {\n          constructor(opt) {\n            super(opt);\n            if (xArg.FuncPtrAdapter.warnOnUse) {\n              console.warn(\n                'xArg.FuncPtrAdapter is an internal-only API',\n                'and is not intended to be invoked from',\n                'client-level code. Invoked with:',\n                opt,\n              );\n            }\n            this.name = opt.name || 'unnamed';\n            this.signature = opt.signature;\n            if (opt.contextKey instanceof Function) {\n              this.contextKey = opt.contextKey;\n              if (!opt.bindScope) opt.bindScope = 'context';\n            }\n            this.bindScope =\n              opt.bindScope ||\n              toss(\n                'FuncPtrAdapter options requires a bindScope (explicit or implied).',\n              );\n            if (FuncPtrAdapter.bindScopes.indexOf(opt.bindScope) < 0) {\n              toss(\n                'Invalid options.bindScope (' +\n                  opt.bindMod +\n                  ') for FuncPtrAdapter. ' +\n                  'Expecting one of: (' +\n                  FuncPtrAdapter.bindScopes.join(', ') +\n                  ')',\n              );\n            }\n            this.isTransient = 'transient' === this.bindScope;\n            this.isContext = 'context' === this.bindScope;\n            this.isPermanent = 'permanent' === this.bindScope;\n            this.singleton = 'singleton' === this.bindScope ? [] : undefined;\n\n            this.callProxy =\n              opt.callProxy instanceof Function ? opt.callProxy : undefined;\n          }\n\n          contextKey(argv, argIndex) {\n            return this;\n          }\n\n          contextMap(key) {\n            const cm = this.__cmap || (this.__cmap = new Map());\n            let rc = cm.get(key);\n            if (undefined === rc) cm.set(key, (rc = []));\n            return rc;\n          }\n\n          convertArg(v, argv, argIndex) {\n            let pair = this.singleton;\n            if (!pair && this.isContext) {\n              pair = this.contextMap(this.contextKey(argv, argIndex));\n            }\n            if (pair && pair[0] === v) return pair[1];\n            if (v instanceof Function) {\n              if (this.callProxy) v = this.callProxy(v);\n              const fp = __installFunction(v, this.signature, this.isTransient);\n              if (FuncPtrAdapter.debugFuncInstall) {\n                FuncPtrAdapter.debugOut(\n                  'FuncPtrAdapter installed',\n                  this,\n                  this.contextKey(argv, argIndex),\n                  '@' + fp,\n                  v,\n                );\n              }\n              if (pair) {\n                if (pair[1]) {\n                  if (FuncPtrAdapter.debugFuncInstall) {\n                    FuncPtrAdapter.debugOut(\n                      'FuncPtrAdapter uninstalling',\n                      this,\n                      this.contextKey(argv, argIndex),\n                      '@' + pair[1],\n                      v,\n                    );\n                  }\n                  try {\n                    cache.scopedAlloc[cache.scopedAlloc.length - 1].push(\n                      pair[1],\n                    );\n                  } catch (e) {}\n                }\n                pair[0] = v;\n                pair[1] = fp;\n              }\n              return fp;\n            } else if (target.isPtr(v) || null === v || undefined === v) {\n              if (pair && pair[1] && pair[1] !== v) {\n                if (FuncPtrAdapter.debugFuncInstall) {\n                  FuncPtrAdapter.debugOut(\n                    'FuncPtrAdapter uninstalling',\n                    this,\n                    this.contextKey(argv, argIndex),\n                    '@' + pair[1],\n                    v,\n                  );\n                }\n                try {\n                  cache.scopedAlloc[cache.scopedAlloc.length - 1].push(pair[1]);\n                } catch (e) {}\n                pair[0] = pair[1] = v | 0;\n              }\n              return v || 0;\n            } else {\n              throw new TypeError(\n                'Invalid FuncPtrAdapter argument type. ' +\n                  'Expecting a function pointer or a ' +\n                  (this.name ? this.name + ' ' : '') +\n                  'function matching signature ' +\n                  this.signature +\n                  '.',\n              );\n            }\n          }\n        };\n\n        xArg.FuncPtrAdapter.warnOnUse = false;\n\n        xArg.FuncPtrAdapter.debugFuncInstall = false;\n\n        xArg.FuncPtrAdapter.debugOut = console.debug.bind(console);\n\n        xArg.FuncPtrAdapter.bindScopes = [\n          'transient',\n          'context',\n          'singleton',\n          'permanent',\n        ];\n\n        const __xArgAdapterCheck = (t) =>\n          xArg.get(t) || toss('Argument adapter not found:', t);\n\n        const __xResultAdapterCheck = (t) =>\n          xResult.get(t) || toss('Result adapter not found:', t);\n\n        cache.xWrap.convertArg = (t, ...args) => __xArgAdapterCheck(t)(...args);\n\n        cache.xWrap.convertArgNoCheck = (t, ...args) => xArg.get(t)(...args);\n\n        cache.xWrap.convertResult = (t, v) =>\n          null === t ? v : t ? __xResultAdapterCheck(t)(v) : undefined;\n\n        cache.xWrap.convertResultNoCheck = (t, v) =>\n          null === t ? v : t ? xResult.get(t)(v) : undefined;\n\n        target.xWrap = function (fArg, resultType, ...argTypes) {\n          if (3 === arguments.length && Array.isArray(arguments[2])) {\n            argTypes = arguments[2];\n          }\n          if (target.isPtr(fArg)) {\n            fArg =\n              target.functionEntry(fArg) ||\n              toss('Function pointer not found in WASM function table.');\n          }\n          const fIsFunc = fArg instanceof Function;\n          const xf = fIsFunc ? fArg : target.xGet(fArg);\n          if (fIsFunc) fArg = xf.name || 'unnamed function';\n          if (argTypes.length !== xf.length) __argcMismatch(fArg, xf.length);\n          if (null === resultType && 0 === xf.length) {\n            return xf;\n          }\n          if (undefined !== resultType && null !== resultType)\n            __xResultAdapterCheck(resultType);\n          for (const t of argTypes) {\n            if (t instanceof AbstractArgAdapter)\n              xArg.set(t, (...args) => t.convertArg(...args));\n            else __xArgAdapterCheck(t);\n          }\n          const cxw = cache.xWrap;\n          if (0 === xf.length) {\n            return (...args) =>\n              args.length\n                ? __argcMismatch(fArg, xf.length)\n                : cxw.convertResult(resultType, xf.call(null));\n          }\n          return function (...args) {\n            if (args.length !== xf.length) __argcMismatch(fArg, xf.length);\n            const scope = target.scopedAllocPush();\n            try {\n              let i = 0;\n              for (; i < args.length; ++i)\n                args[i] = cxw.convertArgNoCheck(argTypes[i], args[i], args, i);\n              return cxw.convertResultNoCheck(resultType, xf.apply(null, args));\n            } finally {\n              target.scopedAllocPop(scope);\n            }\n          };\n        };\n\n        const __xAdapter = function (\n          func,\n          argc,\n          typeName,\n          adapter,\n          modeName,\n          xcvPart,\n        ) {\n          if ('string' === typeof typeName) {\n            if (1 === argc) return xcvPart.get(typeName);\n            else if (2 === argc) {\n              if (!adapter) {\n                delete xcvPart.get(typeName);\n                return func;\n              } else if (!(adapter instanceof Function)) {\n                toss(modeName, 'requires a function argument.');\n              }\n              xcvPart.set(typeName, adapter);\n              return func;\n            }\n          }\n          toss('Invalid arguments to', modeName);\n        };\n\n        target.xWrap.resultAdapter = function f(typeName, adapter) {\n          return __xAdapter(\n            f,\n            arguments.length,\n            typeName,\n            adapter,\n            'resultAdapter()',\n            xResult,\n          );\n        };\n\n        target.xWrap.argAdapter = function f(typeName, adapter) {\n          return __xAdapter(\n            f,\n            arguments.length,\n            typeName,\n            adapter,\n            'argAdapter()',\n            xArg,\n          );\n        };\n\n        target.xWrap.FuncPtrAdapter = xArg.FuncPtrAdapter;\n\n        target.xCallWrapped = function (fArg, resultType, argTypes, ...args) {\n          if (Array.isArray(arguments[3])) args = arguments[3];\n          return target\n            .xWrap(fArg, resultType, argTypes || [])\n            .apply(null, args || []);\n        };\n\n        target.xWrap.testConvertArg = cache.xWrap.convertArg;\n\n        target.xWrap.testConvertResult = cache.xWrap.convertResult;\n\n        return target;\n      };\n\n      globalThis.WhWasmUtilInstaller.yawl = function (config) {\n        const wfetch = () => fetch(config.uri, { credentials: 'same-origin' });\n        const wui = this;\n        const finalThen = function (arg) {\n          if (config.wasmUtilTarget) {\n            const toss = (...args) => {\n              throw new Error(args.join(' '));\n            };\n            const tgt = config.wasmUtilTarget;\n            tgt.module = arg.module;\n            tgt.instance = arg.instance;\n\n            if (!tgt.instance.exports.memory) {\n              tgt.memory =\n                (config.imports &&\n                  config.imports.env &&\n                  config.imports.env.memory) ||\n                toss(\"Missing 'memory' object!\");\n            }\n            if (!tgt.alloc && arg.instance.exports.malloc) {\n              const exports = arg.instance.exports;\n              tgt.alloc = function (n) {\n                return (\n                  exports.malloc(n) || toss('Allocation of', n, 'bytes failed.')\n                );\n              };\n              tgt.dealloc = function (m) {\n                exports.free(m);\n              };\n            }\n            wui(tgt);\n          }\n          if (config.onload) config.onload(arg, config);\n          return arg;\n        };\n        const loadWasm = WebAssembly.instantiateStreaming\n          ? function loadWasmStreaming() {\n              return WebAssembly.instantiateStreaming(\n                wfetch(),\n                config.imports || {},\n              ).then(finalThen);\n            }\n          : function loadWasmOldSchool() {\n              return wfetch()\n                .then((response) => response.arrayBuffer())\n                .then((bytes) =>\n                  WebAssembly.instantiate(bytes, config.imports || {}),\n                )\n                .then(finalThen);\n            };\n        return loadWasm;\n      }.bind(globalThis.WhWasmUtilInstaller);\n\n      ('use strict');\n      globalThis.Jaccwabyt = function StructBinderFactory(config) {\n        const toss = (...args) => {\n          throw new Error(args.join(' '));\n        };\n\n        if (\n          !(config.heap instanceof WebAssembly.Memory) &&\n          !(config.heap instanceof Function)\n        ) {\n          toss(\n            'config.heap must be WebAssembly.Memory instance or a function.',\n          );\n        }\n        ['alloc', 'dealloc'].forEach(function (k) {\n          config[k] instanceof Function ||\n            toss(\"Config option '\" + k + \"' must be a function.\");\n        });\n        const SBF = StructBinderFactory;\n        const heap =\n            config.heap instanceof Function\n              ? config.heap\n              : () => new Uint8Array(config.heap.buffer),\n          alloc = config.alloc,\n          dealloc = config.dealloc,\n          log = config.log || console.log.bind(console),\n          memberPrefix = config.memberPrefix || '',\n          memberSuffix = config.memberSuffix || '',\n          bigIntEnabled =\n            undefined === config.bigIntEnabled\n              ? !!globalThis['BigInt64Array']\n              : !!config.bigIntEnabled,\n          BigInt = globalThis['BigInt'],\n          BigInt64Array = globalThis['BigInt64Array'],\n          ptrSizeof = config.ptrSizeof || 4,\n          ptrIR = config.ptrIR || 'i32';\n        if (!SBF.debugFlags) {\n          SBF.__makeDebugFlags = function (deriveFrom = null) {\n            if (deriveFrom && deriveFrom.__flags)\n              deriveFrom = deriveFrom.__flags;\n            const f = function f(flags) {\n              if (0 === arguments.length) {\n                return f.__flags;\n              }\n              if (flags < 0) {\n                delete f.__flags.getter;\n                delete f.__flags.setter;\n                delete f.__flags.alloc;\n                delete f.__flags.dealloc;\n              } else {\n                f.__flags.getter = 0 !== (0x01 & flags);\n                f.__flags.setter = 0 !== (0x02 & flags);\n                f.__flags.alloc = 0 !== (0x04 & flags);\n                f.__flags.dealloc = 0 !== (0x08 & flags);\n              }\n              return f._flags;\n            };\n            Object.defineProperty(f, '__flags', {\n              iterable: false,\n              writable: false,\n              value: Object.create(deriveFrom),\n            });\n            if (!deriveFrom) f(0);\n            return f;\n          };\n          SBF.debugFlags = SBF.__makeDebugFlags();\n        }\n\n        const isLittleEndian = (function () {\n          const buffer = new ArrayBuffer(2);\n          new DataView(buffer).setInt16(0, 256, true);\n\n          return new Int16Array(buffer)[0] === 256;\n        })();\n\n        const isFuncSig = (s) => '(' === s[1];\n\n        const isPtrSig = (s) => 'p' === s || 'P' === s;\n        const isAutoPtrSig = (s) => 'P' === s;\n        const sigLetter = (s) => (isFuncSig(s) ? 'p' : s[0]);\n\n        const sigIR = function (s) {\n          switch (sigLetter(s)) {\n            case 'c':\n            case 'C':\n              return 'i8';\n            case 'i':\n              return 'i32';\n            case 'p':\n            case 'P':\n            case 's':\n              return ptrIR;\n            case 'j':\n              return 'i64';\n            case 'f':\n              return 'float';\n            case 'd':\n              return 'double';\n          }\n          toss('Unhandled signature IR:', s);\n        };\n\n        const affirmBigIntArray = BigInt64Array\n          ? () => true\n          : () => toss('BigInt64Array is not available.');\n\n        const sigDVGetter = function (s) {\n          switch (sigLetter(s)) {\n            case 'p':\n            case 'P':\n            case 's': {\n              switch (ptrSizeof) {\n                case 4:\n                  return 'getInt32';\n                case 8:\n                  return affirmBigIntArray() && 'getBigInt64';\n              }\n              break;\n            }\n            case 'i':\n              return 'getInt32';\n            case 'c':\n              return 'getInt8';\n            case 'C':\n              return 'getUint8';\n            case 'j':\n              return affirmBigIntArray() && 'getBigInt64';\n            case 'f':\n              return 'getFloat32';\n            case 'd':\n              return 'getFloat64';\n          }\n          toss('Unhandled DataView getter for signature:', s);\n        };\n\n        const sigDVSetter = function (s) {\n          switch (sigLetter(s)) {\n            case 'p':\n            case 'P':\n            case 's': {\n              switch (ptrSizeof) {\n                case 4:\n                  return 'setInt32';\n                case 8:\n                  return affirmBigIntArray() && 'setBigInt64';\n              }\n              break;\n            }\n            case 'i':\n              return 'setInt32';\n            case 'c':\n              return 'setInt8';\n            case 'C':\n              return 'setUint8';\n            case 'j':\n              return affirmBigIntArray() && 'setBigInt64';\n            case 'f':\n              return 'setFloat32';\n            case 'd':\n              return 'setFloat64';\n          }\n          toss('Unhandled DataView setter for signature:', s);\n        };\n\n        const sigDVSetWrapper = function (s) {\n          switch (sigLetter(s)) {\n            case 'i':\n            case 'f':\n            case 'c':\n            case 'C':\n            case 'd':\n              return Number;\n            case 'j':\n              return affirmBigIntArray() && BigInt;\n            case 'p':\n            case 'P':\n            case 's':\n              switch (ptrSizeof) {\n                case 4:\n                  return Number;\n                case 8:\n                  return affirmBigIntArray() && BigInt;\n              }\n              break;\n          }\n          toss('Unhandled DataView set wrapper for signature:', s);\n        };\n\n        const sPropName = (s, k) => s + '::' + k;\n\n        const __propThrowOnSet = function (structName, propName) {\n          return () => toss(sPropName(structName, propName), 'is read-only.');\n        };\n\n        const __instancePointerMap = new WeakMap();\n\n        const xPtrPropName = '(pointer-is-external)';\n\n        const __freeStruct = function (ctor, obj, m) {\n          if (!m) m = __instancePointerMap.get(obj);\n          if (m) {\n            __instancePointerMap.delete(obj);\n            if (Array.isArray(obj.ondispose)) {\n              let x;\n              while ((x = obj.ondispose.shift())) {\n                try {\n                  if (x instanceof Function) x.call(obj);\n                  else if (x instanceof StructType) x.dispose();\n                  else if ('number' === typeof x) dealloc(x);\n                } catch (e) {\n                  console.warn(\n                    'ondispose() for',\n                    ctor.structName,\n                    '@',\n                    m,\n                    'threw. NOT propagating it.',\n                    e,\n                  );\n                }\n              }\n            } else if (obj.ondispose instanceof Function) {\n              try {\n                obj.ondispose();\n              } catch (e) {\n                console.warn(\n                  'ondispose() for',\n                  ctor.structName,\n                  '@',\n                  m,\n                  'threw. NOT propagating it.',\n                  e,\n                );\n              }\n            }\n            delete obj.ondispose;\n            if (ctor.debugFlags.__flags.dealloc) {\n              log(\n                'debug.dealloc:',\n                obj[xPtrPropName] ? 'EXTERNAL' : '',\n                ctor.structName,\n                'instance:',\n                ctor.structInfo.sizeof,\n                'bytes @' + m,\n              );\n            }\n            if (!obj[xPtrPropName]) dealloc(m);\n          }\n        };\n\n        const rop = (v) => {\n          return {\n            configurable: false,\n            writable: false,\n            iterable: false,\n            value: v,\n          };\n        };\n\n        const __allocStruct = function (ctor, obj, m) {\n          let fill = !m;\n          if (m) Object.defineProperty(obj, xPtrPropName, rop(m));\n          else {\n            m = alloc(ctor.structInfo.sizeof);\n            if (!m) toss('Allocation of', ctor.structName, 'structure failed.');\n          }\n          try {\n            if (ctor.debugFlags.__flags.alloc) {\n              log(\n                'debug.alloc:',\n                fill ? '' : 'EXTERNAL',\n                ctor.structName,\n                'instance:',\n                ctor.structInfo.sizeof,\n                'bytes @' + m,\n              );\n            }\n            if (fill) heap().fill(0, m, m + ctor.structInfo.sizeof);\n            __instancePointerMap.set(obj, m);\n          } catch (e) {\n            __freeStruct(ctor, obj, m);\n            throw e;\n          }\n        };\n\n        const __memoryDump = function () {\n          const p = this.pointer;\n          return p\n            ? new Uint8Array(heap().slice(p, p + this.structInfo.sizeof))\n            : null;\n        };\n\n        const __memberKey = (k) => memberPrefix + k + memberSuffix;\n        const __memberKeyProp = rop(__memberKey);\n\n        const __lookupMember = function (\n          structInfo,\n          memberName,\n          tossIfNotFound = true,\n        ) {\n          let m = structInfo.members[memberName];\n          if (!m && (memberPrefix || memberSuffix)) {\n            for (const v of Object.values(structInfo.members)) {\n              if (v.key === memberName) {\n                m = v;\n                break;\n              }\n            }\n            if (!m && tossIfNotFound) {\n              toss(\n                sPropName(structInfo.name, memberName),\n                'is not a mapped struct member.',\n              );\n            }\n          }\n          return m;\n        };\n\n        const __memberSignature = function f(\n          obj,\n          memberName,\n          emscriptenFormat = false,\n        ) {\n          if (!f._)\n            f._ = (x) =>\n              x.replace(/[^vipPsjrdcC]/g, '').replace(/[pPscC]/g, 'i');\n          const m = __lookupMember(obj.structInfo, memberName, true);\n          return emscriptenFormat ? f._(m.signature) : m.signature;\n        };\n\n        const __ptrPropDescriptor = {\n          configurable: false,\n          enumerable: false,\n          get: function () {\n            return __instancePointerMap.get(this);\n          },\n          set: () => toss(\"Cannot assign the 'pointer' property of a struct.\"),\n        };\n\n        const __structMemberKeys = rop(function () {\n          const a = [];\n          for (const k of Object.keys(this.structInfo.members)) {\n            a.push(this.memberKey(k));\n          }\n          return a;\n        });\n\n        const __utf8Decoder = new TextDecoder('utf-8');\n        const __utf8Encoder = new TextEncoder();\n\n        const __SAB =\n          'undefined' === typeof SharedArrayBuffer\n            ? function () {}\n            : SharedArrayBuffer;\n        const __utf8Decode = function (arrayBuffer, begin, end) {\n          return __utf8Decoder.decode(\n            arrayBuffer.buffer instanceof __SAB\n              ? arrayBuffer.slice(begin, end)\n              : arrayBuffer.subarray(begin, end),\n          );\n        };\n\n        const __memberIsString = function (\n          obj,\n          memberName,\n          tossIfNotFound = false,\n        ) {\n          const m = __lookupMember(obj.structInfo, memberName, tossIfNotFound);\n          return m && 1 === m.signature.length && 's' === m.signature[0]\n            ? m\n            : false;\n        };\n\n        const __affirmCStringSignature = function (member) {\n          if ('s' === member.signature) return;\n          toss(\n            'Invalid member type signature for C-string value:',\n            JSON.stringify(member),\n          );\n        };\n\n        const __memberToJsString = function f(obj, memberName) {\n          const m = __lookupMember(obj.structInfo, memberName, true);\n          __affirmCStringSignature(m);\n          const addr = obj[m.key];\n\n          if (!addr) return null;\n          let pos = addr;\n          const mem = heap();\n          for (; mem[pos] !== 0; ++pos) {}\n\n          return addr === pos ? '' : __utf8Decode(mem, addr, pos);\n        };\n\n        const __addOnDispose = function (obj, ...v) {\n          if (obj.ondispose) {\n            if (!Array.isArray(obj.ondispose)) {\n              obj.ondispose = [obj.ondispose];\n            }\n          } else {\n            obj.ondispose = [];\n          }\n          obj.ondispose.push(...v);\n        };\n\n        const __allocCString = function (str) {\n          const u = __utf8Encoder.encode(str);\n          const mem = alloc(u.length + 1);\n          if (!mem) toss('Allocation error while duplicating string:', str);\n          const h = heap();\n\n          h.set(u, mem);\n          h[mem + u.length] = 0;\n\n          return mem;\n        };\n\n        const __setMemberCString = function (obj, memberName, str) {\n          const m = __lookupMember(obj.structInfo, memberName, true);\n          __affirmCStringSignature(m);\n\n          const mem = __allocCString(str);\n          obj[m.key] = mem;\n          __addOnDispose(obj, mem);\n          return obj;\n        };\n\n        const StructType = function ctor(structName, structInfo) {\n          if (arguments[2] !== rop) {\n            toss(\n              'Do not call the StructType constructor',\n              'from client-level code.',\n            );\n          }\n          Object.defineProperties(this, {\n            structName: rop(structName),\n            structInfo: rop(structInfo),\n          });\n        };\n\n        StructType.prototype = Object.create(null, {\n          dispose: rop(function () {\n            __freeStruct(this.constructor, this);\n          }),\n          lookupMember: rop(function (memberName, tossIfNotFound = true) {\n            return __lookupMember(this.structInfo, memberName, tossIfNotFound);\n          }),\n          memberToJsString: rop(function (memberName) {\n            return __memberToJsString(this, memberName);\n          }),\n          memberIsString: rop(function (memberName, tossIfNotFound = true) {\n            return __memberIsString(this, memberName, tossIfNotFound);\n          }),\n          memberKey: __memberKeyProp,\n          memberKeys: __structMemberKeys,\n          memberSignature: rop(function (memberName, emscriptenFormat = false) {\n            return __memberSignature(this, memberName, emscriptenFormat);\n          }),\n          memoryDump: rop(__memoryDump),\n          pointer: __ptrPropDescriptor,\n          setMemberCString: rop(function (memberName, str) {\n            return __setMemberCString(this, memberName, str);\n          }),\n        });\n\n        Object.assign(StructType.prototype, {\n          addOnDispose: function (...v) {\n            __addOnDispose(this, ...v);\n            return this;\n          },\n        });\n\n        Object.defineProperties(StructType, {\n          allocCString: rop(__allocCString),\n          isA: rop((v) => v instanceof StructType),\n          hasExternalPointer: rop(\n            (v) => v instanceof StructType && !!v[xPtrPropName],\n          ),\n          memberKey: __memberKeyProp,\n        });\n\n        const isNumericValue = (v) =>\n          Number.isFinite(v) || v instanceof (BigInt || Number);\n\n        const makeMemberWrapper = function f(ctor, name, descr) {\n          if (!f._) {\n            f._ = { getters: {}, setters: {}, sw: {} };\n            const a = ['i', 'c', 'C', 'p', 'P', 's', 'f', 'd', 'v()'];\n            if (bigIntEnabled) a.push('j');\n            a.forEach(function (v) {\n              f._.getters[v] = sigDVGetter(v);\n              f._.setters[v] = sigDVSetter(v);\n              f._.sw[v] = sigDVSetWrapper(v);\n            });\n            const rxSig1 = /^[ipPsjfdcC]$/,\n              rxSig2 = /^[vipPsjfdcC]\\([ipPsjfdcC]*\\)$/;\n            f.sigCheck = function (obj, name, key, sig) {\n              if (Object.prototype.hasOwnProperty.call(obj, key)) {\n                toss(obj.structName, 'already has a property named', key + '.');\n              }\n              rxSig1.test(sig) ||\n                rxSig2.test(sig) ||\n                toss(\n                  'Malformed signature for',\n                  sPropName(obj.structName, name) + ':',\n                  sig,\n                );\n            };\n          }\n          const key = ctor.memberKey(name);\n          f.sigCheck(ctor.prototype, name, key, descr.signature);\n          descr.key = key;\n          descr.name = name;\n          const sigGlyph = sigLetter(descr.signature);\n          const xPropName = sPropName(ctor.prototype.structName, key);\n          const dbg = ctor.prototype.debugFlags.__flags;\n\n          const prop = Object.create(null);\n          prop.configurable = false;\n          prop.enumerable = false;\n          prop.get = function () {\n            if (dbg.getter) {\n              log(\n                'debug.getter:',\n                f._.getters[sigGlyph],\n                'for',\n                sigIR(sigGlyph),\n                xPropName,\n                '@',\n                this.pointer,\n                '+',\n                descr.offset,\n                'sz',\n                descr.sizeof,\n              );\n            }\n            let rc = new DataView(\n              heap().buffer,\n              this.pointer + descr.offset,\n              descr.sizeof,\n            )[f._.getters[sigGlyph]](0, isLittleEndian);\n            if (dbg.getter) log('debug.getter:', xPropName, 'result =', rc);\n            return rc;\n          };\n          if (descr.readOnly) {\n            prop.set = __propThrowOnSet(ctor.prototype.structName, key);\n          } else {\n            prop.set = function (v) {\n              if (dbg.setter) {\n                log(\n                  'debug.setter:',\n                  f._.setters[sigGlyph],\n                  'for',\n                  sigIR(sigGlyph),\n                  xPropName,\n                  '@',\n                  this.pointer,\n                  '+',\n                  descr.offset,\n                  'sz',\n                  descr.sizeof,\n                  v,\n                );\n              }\n              if (!this.pointer) {\n                toss('Cannot set struct property on disposed instance.');\n              }\n              if (null === v) v = 0;\n              else\n                while (!isNumericValue(v)) {\n                  if (\n                    isAutoPtrSig(descr.signature) &&\n                    v instanceof StructType\n                  ) {\n                    v = v.pointer || 0;\n                    if (dbg.setter)\n                      log('debug.setter:', xPropName, 'resolved to', v);\n                    break;\n                  }\n                  toss('Invalid value for pointer-type', xPropName + '.');\n                }\n              new DataView(\n                heap().buffer,\n                this.pointer + descr.offset,\n                descr.sizeof,\n              )[f._.setters[sigGlyph]](0, f._.sw[sigGlyph](v), isLittleEndian);\n            };\n          }\n          Object.defineProperty(ctor.prototype, key, prop);\n        };\n\n        const StructBinder = function StructBinder(structName, structInfo) {\n          if (1 === arguments.length) {\n            structInfo = structName;\n            structName = structInfo.name;\n          } else if (!structInfo.name) {\n            structInfo.name = structName;\n          }\n          if (!structName) toss('Struct name is required.');\n          let lastMember = false;\n          Object.keys(structInfo.members).forEach((k) => {\n            const m = structInfo.members[k];\n            if (!m.sizeof) toss(structName, 'member', k, 'is missing sizeof.');\n            else if (m.sizeof === 1) {\n              m.signature === 'c' ||\n                m.signature === 'C' ||\n                toss(\n                  'Unexpected sizeof==1 member',\n                  sPropName(structInfo.name, k),\n                  'with signature',\n                  m.signature,\n                );\n            } else {\n              if (0 !== m.sizeof % 4) {\n                console.warn(\n                  'Invalid struct member description =',\n                  m,\n                  'from',\n                  structInfo,\n                );\n                toss(\n                  structName,\n                  'member',\n                  k,\n                  'sizeof is not aligned. sizeof=' + m.sizeof,\n                );\n              }\n              if (0 !== m.offset % 4) {\n                console.warn(\n                  'Invalid struct member description =',\n                  m,\n                  'from',\n                  structInfo,\n                );\n                toss(\n                  structName,\n                  'member',\n                  k,\n                  'offset is not aligned. offset=' + m.offset,\n                );\n              }\n            }\n            if (!lastMember || lastMember.offset < m.offset) lastMember = m;\n          });\n          if (!lastMember) toss('No member property descriptions found.');\n          else if (structInfo.sizeof < lastMember.offset + lastMember.sizeof) {\n            toss(\n              'Invalid struct config:',\n              structName,\n              'max member offset (' + lastMember.offset + ') ',\n              'extends past end of struct (sizeof=' + structInfo.sizeof + ').',\n            );\n          }\n          const debugFlags = rop(SBF.__makeDebugFlags(StructBinder.debugFlags));\n\n          const StructCtor = function StructCtor(externalMemory) {\n            if (!(this instanceof StructCtor)) {\n              toss(\n                'The',\n                structName,\n                \"constructor may only be called via 'new'.\",\n              );\n            } else if (arguments.length) {\n              if (\n                externalMemory !== (externalMemory | 0) ||\n                externalMemory <= 0\n              ) {\n                toss('Invalid pointer value for', structName, 'constructor.');\n              }\n              __allocStruct(StructCtor, this, externalMemory);\n            } else {\n              __allocStruct(StructCtor, this);\n            }\n          };\n          Object.defineProperties(StructCtor, {\n            debugFlags: debugFlags,\n            isA: rop((v) => v instanceof StructCtor),\n            memberKey: __memberKeyProp,\n            memberKeys: __structMemberKeys,\n            methodInfoForKey: rop(function (mKey) {}),\n            structInfo: rop(structInfo),\n            structName: rop(structName),\n          });\n          StructCtor.prototype = new StructType(structName, structInfo, rop);\n          Object.defineProperties(StructCtor.prototype, {\n            debugFlags: debugFlags,\n            constructor: rop(StructCtor),\n          });\n          Object.keys(structInfo.members).forEach((name) =>\n            makeMemberWrapper(StructCtor, name, structInfo.members[name]),\n          );\n          return StructCtor;\n        };\n        StructBinder.StructType = StructType;\n        StructBinder.config = config;\n        StructBinder.allocCString = __allocCString;\n        if (!StructBinder.debugFlags) {\n          StructBinder.debugFlags = SBF.__makeDebugFlags(SBF.debugFlags);\n        }\n        return StructBinder;\n      };\n\n      globalThis.sqlite3ApiBootstrap.initializers.push(function (sqlite3) {\n        'use strict';\n        const toss = (...args) => {\n          throw new Error(args.join(' '));\n        };\n        const toss3 = sqlite3.SQLite3Error.toss;\n        const capi = sqlite3.capi,\n          wasm = sqlite3.wasm,\n          util = sqlite3.util;\n        globalThis.WhWasmUtilInstaller(wasm);\n        delete globalThis.WhWasmUtilInstaller;\n\n        if (0) {\n          const dealloc = wasm.exports[sqlite3.config.deallocExportName];\n          const nFunc = wasm.functionTable().length;\n          let i;\n          for (i = 0; i < nFunc; ++i) {\n            const e = wasm.functionEntry(i);\n            if (dealloc === e) {\n              capi.SQLITE_WASM_DEALLOC = i;\n              break;\n            }\n          }\n          if (dealloc !== wasm.functionEntry(capi.SQLITE_WASM_DEALLOC)) {\n            toss(\n              'Internal error: cannot find function pointer for SQLITE_WASM_DEALLOC.',\n            );\n          }\n        }\n\n        wasm.bindingSignatures = [\n          ['sqlite3_aggregate_context', 'void*', 'sqlite3_context*', 'int'],\n\n          ['sqlite3_bind_double', 'int', 'sqlite3_stmt*', 'int', 'f64'],\n          ['sqlite3_bind_int', 'int', 'sqlite3_stmt*', 'int', 'int'],\n          ['sqlite3_bind_null', undefined, 'sqlite3_stmt*', 'int'],\n          ['sqlite3_bind_parameter_count', 'int', 'sqlite3_stmt*'],\n          ['sqlite3_bind_parameter_index', 'int', 'sqlite3_stmt*', 'string'],\n          ['sqlite3_bind_parameter_name', 'string', 'sqlite3_stmt*', 'int'],\n          [\n            'sqlite3_bind_pointer',\n            'int',\n            'sqlite3_stmt*',\n            'int',\n            '*',\n            'string:static',\n            '*',\n          ],\n          [\n            'sqlite3_busy_handler',\n            'int',\n            [\n              'sqlite3*',\n              new wasm.xWrap.FuncPtrAdapter({\n                signature: 'i(pi)',\n                contextKey: (argv, argIndex) => argv[0],\n              }),\n              '*',\n            ],\n          ],\n          ['sqlite3_busy_timeout', 'int', 'sqlite3*', 'int'],\n\n          ['sqlite3_changes', 'int', 'sqlite3*'],\n          ['sqlite3_clear_bindings', 'int', 'sqlite3_stmt*'],\n          ['sqlite3_collation_needed', 'int', 'sqlite3*', '*', '*'],\n          ['sqlite3_column_blob', '*', 'sqlite3_stmt*', 'int'],\n          ['sqlite3_column_bytes', 'int', 'sqlite3_stmt*', 'int'],\n          ['sqlite3_column_count', 'int', 'sqlite3_stmt*'],\n          ['sqlite3_column_decltype', 'string', 'sqlite3_stmt*', 'int'],\n          ['sqlite3_column_double', 'f64', 'sqlite3_stmt*', 'int'],\n          ['sqlite3_column_int', 'int', 'sqlite3_stmt*', 'int'],\n          ['sqlite3_column_name', 'string', 'sqlite3_stmt*', 'int'],\n          ['sqlite3_column_text', 'string', 'sqlite3_stmt*', 'int'],\n          ['sqlite3_column_type', 'int', 'sqlite3_stmt*', 'int'],\n          ['sqlite3_column_value', 'sqlite3_value*', 'sqlite3_stmt*', 'int'],\n          [\n            'sqlite3_commit_hook',\n            'void*',\n            [\n              'sqlite3*',\n              new wasm.xWrap.FuncPtrAdapter({\n                name: 'sqlite3_commit_hook',\n                signature: 'i(p)',\n                contextKey: (argv) => argv[0],\n              }),\n              '*',\n            ],\n          ],\n          ['sqlite3_compileoption_get', 'string', 'int'],\n          ['sqlite3_compileoption_used', 'int', 'string'],\n          ['sqlite3_complete', 'int', 'string:flexible'],\n          ['sqlite3_context_db_handle', 'sqlite3*', 'sqlite3_context*'],\n\n          ['sqlite3_data_count', 'int', 'sqlite3_stmt*'],\n          ['sqlite3_db_filename', 'string', 'sqlite3*', 'string'],\n          ['sqlite3_db_handle', 'sqlite3*', 'sqlite3_stmt*'],\n          ['sqlite3_db_name', 'string', 'sqlite3*', 'int'],\n          ['sqlite3_db_readonly', 'int', 'sqlite3*', 'string'],\n          ['sqlite3_db_status', 'int', 'sqlite3*', 'int', '*', '*', 'int'],\n          ['sqlite3_errcode', 'int', 'sqlite3*'],\n          ['sqlite3_errmsg', 'string', 'sqlite3*'],\n          ['sqlite3_error_offset', 'int', 'sqlite3*'],\n          ['sqlite3_errstr', 'string', 'int'],\n          [\n            'sqlite3_exec',\n            'int',\n            [\n              'sqlite3*',\n              'string:flexible',\n              new wasm.xWrap.FuncPtrAdapter({\n                signature: 'i(pipp)',\n                bindScope: 'transient',\n                callProxy: (callback) => {\n                  let aNames;\n                  return (pVoid, nCols, pColVals, pColNames) => {\n                    try {\n                      const aVals = wasm.cArgvToJs(nCols, pColVals);\n                      if (!aNames) aNames = wasm.cArgvToJs(nCols, pColNames);\n                      return callback(aVals, aNames) | 0;\n                    } catch (e) {\n                      return e.resultCode || capi.SQLITE_ERROR;\n                    }\n                  };\n                },\n              }),\n              '*',\n              '**',\n            ],\n          ],\n          ['sqlite3_expanded_sql', 'string', 'sqlite3_stmt*'],\n          ['sqlite3_extended_errcode', 'int', 'sqlite3*'],\n          ['sqlite3_extended_result_codes', 'int', 'sqlite3*', 'int'],\n          ['sqlite3_file_control', 'int', 'sqlite3*', 'string', 'int', '*'],\n          ['sqlite3_finalize', 'int', 'sqlite3_stmt*'],\n          ['sqlite3_free', undefined, '*'],\n          ['sqlite3_get_autocommit', 'int', 'sqlite3*'],\n          ['sqlite3_get_auxdata', '*', 'sqlite3_context*', 'int'],\n          ['sqlite3_initialize', undefined],\n          ['sqlite3_interrupt', undefined, 'sqlite3*'],\n          ['sqlite3_is_interrupted', 'int', 'sqlite3*'],\n          ['sqlite3_keyword_count', 'int'],\n          ['sqlite3_keyword_name', 'int', ['int', '**', '*']],\n          ['sqlite3_keyword_check', 'int', ['string', 'int']],\n          ['sqlite3_libversion', 'string'],\n          ['sqlite3_libversion_number', 'int'],\n          ['sqlite3_limit', 'int', ['sqlite3*', 'int', 'int']],\n          ['sqlite3_malloc', '*', 'int'],\n          ['sqlite3_open', 'int', 'string', '*'],\n          ['sqlite3_open_v2', 'int', 'string', '*', 'int', 'string'],\n\n          ['sqlite3_realloc', '*', '*', 'int'],\n          ['sqlite3_reset', 'int', 'sqlite3_stmt*'],\n\n          [\n            'sqlite3_result_blob',\n            undefined,\n            'sqlite3_context*',\n            '*',\n            'int',\n            '*',\n          ],\n          ['sqlite3_result_double', undefined, 'sqlite3_context*', 'f64'],\n          [\n            'sqlite3_result_error',\n            undefined,\n            'sqlite3_context*',\n            'string',\n            'int',\n          ],\n          ['sqlite3_result_error_code', undefined, 'sqlite3_context*', 'int'],\n          ['sqlite3_result_error_nomem', undefined, 'sqlite3_context*'],\n          ['sqlite3_result_error_toobig', undefined, 'sqlite3_context*'],\n          ['sqlite3_result_int', undefined, 'sqlite3_context*', 'int'],\n          ['sqlite3_result_null', undefined, 'sqlite3_context*'],\n          [\n            'sqlite3_result_pointer',\n            undefined,\n            'sqlite3_context*',\n            '*',\n            'string:static',\n            '*',\n          ],\n          ['sqlite3_result_subtype', undefined, 'sqlite3_value*', 'int'],\n          [\n            'sqlite3_result_text',\n            undefined,\n            'sqlite3_context*',\n            'string',\n            'int',\n            '*',\n          ],\n          ['sqlite3_result_zeroblob', undefined, 'sqlite3_context*', 'int'],\n          [\n            'sqlite3_rollback_hook',\n            'void*',\n            [\n              'sqlite3*',\n              new wasm.xWrap.FuncPtrAdapter({\n                name: 'sqlite3_rollback_hook',\n                signature: 'v(p)',\n                contextKey: (argv) => argv[0],\n              }),\n              '*',\n            ],\n          ],\n          [\n            'sqlite3_set_auxdata',\n            undefined,\n            [\n              'sqlite3_context*',\n              'int',\n              '*',\n              new wasm.xWrap.FuncPtrAdapter({\n                name: 'xDestroyAuxData',\n                signature: 'v(*)',\n                contextKey: (argv, argIndex) => argv[0],\n              }),\n            ],\n          ],\n          ['sqlite3_shutdown', undefined],\n          ['sqlite3_sourceid', 'string'],\n          ['sqlite3_sql', 'string', 'sqlite3_stmt*'],\n          ['sqlite3_status', 'int', 'int', '*', '*', 'int'],\n          ['sqlite3_step', 'int', 'sqlite3_stmt*'],\n          ['sqlite3_stmt_busy', 'int', 'sqlite3_stmt*'],\n          ['sqlite3_stmt_readonly', 'int', 'sqlite3_stmt*'],\n          ['sqlite3_stmt_status', 'int', 'sqlite3_stmt*', 'int', 'int'],\n          ['sqlite3_strglob', 'int', 'string', 'string'],\n          ['sqlite3_stricmp', 'int', 'string', 'string'],\n          ['sqlite3_strlike', 'int', 'string', 'string', 'int'],\n          ['sqlite3_strnicmp', 'int', 'string', 'string', 'int'],\n          [\n            'sqlite3_table_column_metadata',\n            'int',\n            'sqlite3*',\n            'string',\n            'string',\n            'string',\n            '**',\n            '**',\n            '*',\n            '*',\n            '*',\n          ],\n          ['sqlite3_total_changes', 'int', 'sqlite3*'],\n          [\n            'sqlite3_trace_v2',\n            'int',\n            [\n              'sqlite3*',\n              'int',\n              new wasm.xWrap.FuncPtrAdapter({\n                name: 'sqlite3_trace_v2::callback',\n                signature: 'i(ippp)',\n                contextKey: (argv, argIndex) => argv[0],\n              }),\n              '*',\n            ],\n          ],\n          ['sqlite3_txn_state', 'int', ['sqlite3*', 'string']],\n\n          ['sqlite3_uri_boolean', 'int', 'sqlite3_filename', 'string', 'int'],\n          ['sqlite3_uri_key', 'string', 'sqlite3_filename', 'int'],\n          ['sqlite3_uri_parameter', 'string', 'sqlite3_filename', 'string'],\n          ['sqlite3_user_data', 'void*', 'sqlite3_context*'],\n          ['sqlite3_value_blob', '*', 'sqlite3_value*'],\n          ['sqlite3_value_bytes', 'int', 'sqlite3_value*'],\n          ['sqlite3_value_double', 'f64', 'sqlite3_value*'],\n          ['sqlite3_value_dup', 'sqlite3_value*', 'sqlite3_value*'],\n          ['sqlite3_value_free', undefined, 'sqlite3_value*'],\n          ['sqlite3_value_frombind', 'int', 'sqlite3_value*'],\n          ['sqlite3_value_int', 'int', 'sqlite3_value*'],\n          ['sqlite3_value_nochange', 'int', 'sqlite3_value*'],\n          ['sqlite3_value_numeric_type', 'int', 'sqlite3_value*'],\n          ['sqlite3_value_pointer', '*', 'sqlite3_value*', 'string:static'],\n          ['sqlite3_value_subtype', 'int', 'sqlite3_value*'],\n          ['sqlite3_value_text', 'string', 'sqlite3_value*'],\n          ['sqlite3_value_type', 'int', 'sqlite3_value*'],\n          ['sqlite3_vfs_find', '*', 'string'],\n          ['sqlite3_vfs_register', 'int', 'sqlite3_vfs*', 'int'],\n          ['sqlite3_vfs_unregister', 'int', 'sqlite3_vfs*'],\n        ];\n\n        if (!!wasm.exports.sqlite3_progress_handler) {\n          wasm.bindingSignatures.push([\n            'sqlite3_progress_handler',\n            undefined,\n            [\n              'sqlite3*',\n              'int',\n              new wasm.xWrap.FuncPtrAdapter({\n                name: 'xProgressHandler',\n                signature: 'i(p)',\n                bindScope: 'context',\n                contextKey: (argv, argIndex) => argv[0],\n              }),\n              '*',\n            ],\n          ]);\n        }\n\n        if (!!wasm.exports.sqlite3_stmt_explain) {\n          wasm.bindingSignatures.push(\n            ['sqlite3_stmt_explain', 'int', 'sqlite3_stmt*', 'int'],\n            ['sqlite3_stmt_isexplain', 'int', 'sqlite3_stmt*'],\n          );\n        }\n\n        if (!!wasm.exports.sqlite3_set_authorizer) {\n          wasm.bindingSignatures.push([\n            'sqlite3_set_authorizer',\n            'int',\n            [\n              'sqlite3*',\n              new wasm.xWrap.FuncPtrAdapter({\n                name: 'sqlite3_set_authorizer::xAuth',\n                signature: 'i(pi' + 'ssss)',\n                contextKey: (argv, argIndex) => argv[0],\n                callProxy: (callback) => {\n                  return (pV, iCode, s0, s1, s2, s3) => {\n                    try {\n                      s0 = s0 && wasm.cstrToJs(s0);\n                      s1 = s1 && wasm.cstrToJs(s1);\n                      s2 = s2 && wasm.cstrToJs(s2);\n                      s3 = s3 && wasm.cstrToJs(s3);\n                      return callback(pV, iCode, s0, s1, s2, s3) || 0;\n                    } catch (e) {\n                      return e.resultCode || capi.SQLITE_ERROR;\n                    }\n                  };\n                },\n              }),\n              '*',\n            ],\n          ]);\n        }\n\n        if (false && wasm.compileOptionUsed('SQLITE_ENABLE_NORMALIZE')) {\n          wasm.bindingSignatures.push([\n            'sqlite3_normalized_sql',\n            'string',\n            'sqlite3_stmt*',\n          ]);\n        }\n\n        wasm.bindingSignatures.int64 = [\n          ['sqlite3_bind_int64', 'int', ['sqlite3_stmt*', 'int', 'i64']],\n          ['sqlite3_changes64', 'i64', ['sqlite3*']],\n          ['sqlite3_column_int64', 'i64', ['sqlite3_stmt*', 'int']],\n          [\n            'sqlite3_deserialize',\n            'int',\n            'sqlite3*',\n            'string',\n            '*',\n            'i64',\n            'i64',\n            'int',\n          ],\n          ['sqlite3_last_insert_rowid', 'i64', ['sqlite3*']],\n          ['sqlite3_malloc64', '*', 'i64'],\n          ['sqlite3_msize', 'i64', '*'],\n          ['sqlite3_overload_function', 'int', ['sqlite3*', 'string', 'int']],\n          ['sqlite3_realloc64', '*', '*', 'i64'],\n          ['sqlite3_result_int64', undefined, '*', 'i64'],\n          ['sqlite3_result_zeroblob64', 'int', '*', 'i64'],\n          ['sqlite3_serialize', '*', 'sqlite3*', 'string', '*', 'int'],\n          ['sqlite3_set_last_insert_rowid', undefined, ['sqlite3*', 'i64']],\n          ['sqlite3_status64', 'int', 'int', '*', '*', 'int'],\n          ['sqlite3_total_changes64', 'i64', ['sqlite3*']],\n          [\n            'sqlite3_update_hook',\n            '*',\n            [\n              'sqlite3*',\n              new wasm.xWrap.FuncPtrAdapter({\n                name: 'sqlite3_update_hook',\n                signature: 'v(iippj)',\n                contextKey: (argv) => argv[0],\n                callProxy: (callback) => {\n                  return (p, op, z0, z1, rowid) => {\n                    callback(\n                      p,\n                      op,\n                      wasm.cstrToJs(z0),\n                      wasm.cstrToJs(z1),\n                      rowid,\n                    );\n                  };\n                },\n              }),\n              '*',\n            ],\n          ],\n          ['sqlite3_uri_int64', 'i64', ['sqlite3_filename', 'string', 'i64']],\n          ['sqlite3_value_int64', 'i64', 'sqlite3_value*'],\n        ];\n\n        if (wasm.bigIntEnabled && !!wasm.exports.sqlite3_declare_vtab) {\n          wasm.bindingSignatures.int64.push(\n            [\n              'sqlite3_create_module',\n              'int',\n              ['sqlite3*', 'string', 'sqlite3_module*', '*'],\n            ],\n            [\n              'sqlite3_create_module_v2',\n              'int',\n              ['sqlite3*', 'string', 'sqlite3_module*', '*', '*'],\n            ],\n            ['sqlite3_declare_vtab', 'int', ['sqlite3*', 'string:flexible']],\n            ['sqlite3_drop_modules', 'int', ['sqlite3*', '**']],\n            ['sqlite3_vtab_collation', 'string', 'sqlite3_index_info*', 'int'],\n            ['sqlite3_vtab_distinct', 'int', 'sqlite3_index_info*'],\n            ['sqlite3_vtab_in', 'int', 'sqlite3_index_info*', 'int', 'int'],\n            ['sqlite3_vtab_in_first', 'int', 'sqlite3_value*', '**'],\n            ['sqlite3_vtab_in_next', 'int', 'sqlite3_value*', '**'],\n\n            ['sqlite3_vtab_nochange', 'int', 'sqlite3_context*'],\n            ['sqlite3_vtab_on_conflict', 'int', 'sqlite3*'],\n            [\n              'sqlite3_vtab_rhs_value',\n              'int',\n              'sqlite3_index_info*',\n              'int',\n              '**',\n            ],\n          );\n        }\n\n        if (wasm.bigIntEnabled && !!wasm.exports.sqlite3_preupdate_hook) {\n          wasm.bindingSignatures.int64.push(\n            ['sqlite3_preupdate_blobwrite', 'int', 'sqlite3*'],\n            ['sqlite3_preupdate_count', 'int', 'sqlite3*'],\n            ['sqlite3_preupdate_depth', 'int', 'sqlite3*'],\n            [\n              'sqlite3_preupdate_hook',\n              '*',\n              [\n                'sqlite3*',\n                new wasm.xWrap.FuncPtrAdapter({\n                  name: 'sqlite3_preupdate_hook',\n                  signature: 'v(ppippjj)',\n                  contextKey: (argv) => argv[0],\n                  callProxy: (callback) => {\n                    return (p, db, op, zDb, zTbl, iKey1, iKey2) => {\n                      callback(\n                        p,\n                        db,\n                        op,\n                        wasm.cstrToJs(zDb),\n                        wasm.cstrToJs(zTbl),\n                        iKey1,\n                        iKey2,\n                      );\n                    };\n                  },\n                }),\n                '*',\n              ],\n            ],\n            ['sqlite3_preupdate_new', 'int', ['sqlite3*', 'int', '**']],\n            ['sqlite3_preupdate_old', 'int', ['sqlite3*', 'int', '**']],\n          );\n        }\n\n        if (\n          wasm.bigIntEnabled &&\n          !!wasm.exports.sqlite3changegroup_add &&\n          !!wasm.exports.sqlite3session_create &&\n          !!wasm.exports.sqlite3_preupdate_hook\n        ) {\n          const __ipsProxy = {\n            signature: 'i(ps)',\n            callProxy: (callback) => {\n              return (p, s) => {\n                try {\n                  return callback(p, wasm.cstrToJs(s)) | 0;\n                } catch (e) {\n                  return e.resultCode || capi.SQLITE_ERROR;\n                }\n              };\n            },\n          };\n\n          wasm.bindingSignatures.int64.push(\n            ...[\n              [\n                'sqlite3changegroup_add',\n                'int',\n                ['sqlite3_changegroup*', 'int', 'void*'],\n              ],\n              [\n                'sqlite3changegroup_add_strm',\n                'int',\n                [\n                  'sqlite3_changegroup*',\n                  new wasm.xWrap.FuncPtrAdapter({\n                    name: 'xInput',\n                    signature: 'i(ppp)',\n                    bindScope: 'transient',\n                  }),\n                  'void*',\n                ],\n              ],\n              [\n                'sqlite3changegroup_delete',\n                undefined,\n                ['sqlite3_changegroup*'],\n              ],\n              ['sqlite3changegroup_new', 'int', ['**']],\n              [\n                'sqlite3changegroup_output',\n                'int',\n                ['sqlite3_changegroup*', 'int*', '**'],\n              ],\n              [\n                'sqlite3changegroup_output_strm',\n                'int',\n                [\n                  'sqlite3_changegroup*',\n                  new wasm.xWrap.FuncPtrAdapter({\n                    name: 'xOutput',\n                    signature: 'i(ppi)',\n                    bindScope: 'transient',\n                  }),\n                  'void*',\n                ],\n              ],\n              [\n                'sqlite3changeset_apply',\n                'int',\n                [\n                  'sqlite3*',\n                  'int',\n                  'void*',\n                  new wasm.xWrap.FuncPtrAdapter({\n                    name: 'xFilter',\n                    bindScope: 'transient',\n                    ...__ipsProxy,\n                  }),\n                  new wasm.xWrap.FuncPtrAdapter({\n                    name: 'xConflict',\n                    signature: 'i(pip)',\n                    bindScope: 'transient',\n                  }),\n                  'void*',\n                ],\n              ],\n              [\n                'sqlite3changeset_apply_strm',\n                'int',\n                [\n                  'sqlite3*',\n                  new wasm.xWrap.FuncPtrAdapter({\n                    name: 'xInput',\n                    signature: 'i(ppp)',\n                    bindScope: 'transient',\n                  }),\n                  'void*',\n                  new wasm.xWrap.FuncPtrAdapter({\n                    name: 'xFilter',\n                    bindScope: 'transient',\n                    ...__ipsProxy,\n                  }),\n                  new wasm.xWrap.FuncPtrAdapter({\n                    name: 'xConflict',\n                    signature: 'i(pip)',\n                    bindScope: 'transient',\n                  }),\n                  'void*',\n                ],\n              ],\n              [\n                'sqlite3changeset_apply_v2',\n                'int',\n                [\n                  'sqlite3*',\n                  'int',\n                  'void*',\n                  new wasm.xWrap.FuncPtrAdapter({\n                    name: 'xFilter',\n                    bindScope: 'transient',\n                    ...__ipsProxy,\n                  }),\n                  new wasm.xWrap.FuncPtrAdapter({\n                    name: 'xConflict',\n                    signature: 'i(pip)',\n                    bindScope: 'transient',\n                  }),\n                  'void*',\n                  '**',\n                  'int*',\n                  'int',\n                ],\n              ],\n              [\n                'sqlite3changeset_apply_v2_strm',\n                'int',\n                [\n                  'sqlite3*',\n                  new wasm.xWrap.FuncPtrAdapter({\n                    name: 'xInput',\n                    signature: 'i(ppp)',\n                    bindScope: 'transient',\n                  }),\n                  'void*',\n                  new wasm.xWrap.FuncPtrAdapter({\n                    name: 'xFilter',\n                    bindScope: 'transient',\n                    ...__ipsProxy,\n                  }),\n                  new wasm.xWrap.FuncPtrAdapter({\n                    name: 'xConflict',\n                    signature: 'i(pip)',\n                    bindScope: 'transient',\n                  }),\n                  'void*',\n                  '**',\n                  'int*',\n                  'int',\n                ],\n              ],\n              [\n                'sqlite3changeset_concat',\n                'int',\n                ['int', 'void*', 'int', 'void*', 'int*', '**'],\n              ],\n              [\n                'sqlite3changeset_concat_strm',\n                'int',\n                [\n                  new wasm.xWrap.FuncPtrAdapter({\n                    name: 'xInputA',\n                    signature: 'i(ppp)',\n                    bindScope: 'transient',\n                  }),\n                  'void*',\n                  new wasm.xWrap.FuncPtrAdapter({\n                    name: 'xInputB',\n                    signature: 'i(ppp)',\n                    bindScope: 'transient',\n                  }),\n                  'void*',\n                  new wasm.xWrap.FuncPtrAdapter({\n                    name: 'xOutput',\n                    signature: 'i(ppi)',\n                    bindScope: 'transient',\n                  }),\n                  'void*',\n                ],\n              ],\n              [\n                'sqlite3changeset_conflict',\n                'int',\n                ['sqlite3_changeset_iter*', 'int', '**'],\n              ],\n              ['sqlite3changeset_finalize', 'int', ['sqlite3_changeset_iter*']],\n              [\n                'sqlite3changeset_fk_conflicts',\n                'int',\n                ['sqlite3_changeset_iter*', 'int*'],\n              ],\n              [\n                'sqlite3changeset_invert',\n                'int',\n                ['int', 'void*', 'int*', '**'],\n              ],\n              [\n                'sqlite3changeset_invert_strm',\n                'int',\n                [\n                  new wasm.xWrap.FuncPtrAdapter({\n                    name: 'xInput',\n                    signature: 'i(ppp)',\n                    bindScope: 'transient',\n                  }),\n                  'void*',\n                  new wasm.xWrap.FuncPtrAdapter({\n                    name: 'xOutput',\n                    signature: 'i(ppi)',\n                    bindScope: 'transient',\n                  }),\n                  'void*',\n                ],\n              ],\n              [\n                'sqlite3changeset_new',\n                'int',\n                ['sqlite3_changeset_iter*', 'int', '**'],\n              ],\n              ['sqlite3changeset_next', 'int', ['sqlite3_changeset_iter*']],\n              [\n                'sqlite3changeset_old',\n                'int',\n                ['sqlite3_changeset_iter*', 'int', '**'],\n              ],\n              [\n                'sqlite3changeset_op',\n                'int',\n                ['sqlite3_changeset_iter*', '**', 'int*', 'int*', 'int*'],\n              ],\n              [\n                'sqlite3changeset_pk',\n                'int',\n                ['sqlite3_changeset_iter*', '**', 'int*'],\n              ],\n              ['sqlite3changeset_start', 'int', ['**', 'int', '*']],\n              [\n                'sqlite3changeset_start_strm',\n                'int',\n                [\n                  '**',\n                  new wasm.xWrap.FuncPtrAdapter({\n                    name: 'xInput',\n                    signature: 'i(ppp)',\n                    bindScope: 'transient',\n                  }),\n                  'void*',\n                ],\n              ],\n              ['sqlite3changeset_start_v2', 'int', ['**', 'int', '*', 'int']],\n              [\n                'sqlite3changeset_start_v2_strm',\n                'int',\n                [\n                  '**',\n                  new wasm.xWrap.FuncPtrAdapter({\n                    name: 'xInput',\n                    signature: 'i(ppp)',\n                    bindScope: 'transient',\n                  }),\n                  'void*',\n                  'int',\n                ],\n              ],\n              ['sqlite3session_attach', 'int', ['sqlite3_session*', 'string']],\n              [\n                'sqlite3session_changeset',\n                'int',\n                ['sqlite3_session*', 'int*', '**'],\n              ],\n              ['sqlite3session_changeset_size', 'i64', ['sqlite3_session*']],\n              [\n                'sqlite3session_changeset_strm',\n                'int',\n                [\n                  'sqlite3_session*',\n                  new wasm.xWrap.FuncPtrAdapter({\n                    name: 'xOutput',\n                    signature: 'i(ppp)',\n                    bindScope: 'transient',\n                  }),\n                  'void*',\n                ],\n              ],\n              ['sqlite3session_config', 'int', ['int', 'void*']],\n              ['sqlite3session_create', 'int', ['sqlite3*', 'string', '**']],\n\n              [\n                'sqlite3session_diff',\n                'int',\n                ['sqlite3_session*', 'string', 'string', '**'],\n              ],\n              ['sqlite3session_enable', 'int', ['sqlite3_session*', 'int']],\n              ['sqlite3session_indirect', 'int', ['sqlite3_session*', 'int']],\n              ['sqlite3session_isempty', 'int', ['sqlite3_session*']],\n              ['sqlite3session_memory_used', 'i64', ['sqlite3_session*']],\n              [\n                'sqlite3session_object_config',\n                'int',\n                ['sqlite3_session*', 'int', 'void*'],\n              ],\n              [\n                'sqlite3session_patchset',\n                'int',\n                ['sqlite3_session*', '*', '**'],\n              ],\n              [\n                'sqlite3session_patchset_strm',\n                'int',\n                [\n                  'sqlite3_session*',\n                  new wasm.xWrap.FuncPtrAdapter({\n                    name: 'xOutput',\n                    signature: 'i(ppp)',\n                    bindScope: 'transient',\n                  }),\n                  'void*',\n                ],\n              ],\n              [\n                'sqlite3session_table_filter',\n                undefined,\n                [\n                  'sqlite3_session*',\n                  new wasm.xWrap.FuncPtrAdapter({\n                    name: 'xFilter',\n                    ...__ipsProxy,\n                    contextKey: (argv, argIndex) => argv[0],\n                  }),\n                  '*',\n                ],\n              ],\n            ],\n          );\n        }\n\n        wasm.bindingSignatures.wasmInternal = [\n          ['sqlite3__wasm_db_reset', 'int', 'sqlite3*'],\n          ['sqlite3__wasm_db_vfs', 'sqlite3_vfs*', 'sqlite3*', 'string'],\n          [\n            'sqlite3__wasm_vfs_create_file',\n            'int',\n            'sqlite3_vfs*',\n            'string',\n            '*',\n            'int',\n          ],\n          ['sqlite3__wasm_posix_create_file', 'int', 'string', '*', 'int'],\n          ['sqlite3__wasm_vfs_unlink', 'int', 'sqlite3_vfs*', 'string'],\n          ['sqlite3__wasm_qfmt_token', 'string:dealloc', 'string', 'int'],\n        ];\n\n        sqlite3.StructBinder = globalThis.Jaccwabyt({\n          heap: 0 ? wasm.memory : wasm.heap8u,\n          alloc: wasm.alloc,\n          dealloc: wasm.dealloc,\n          bigIntEnabled: wasm.bigIntEnabled,\n          memberPrefix: '$',\n        });\n        delete globalThis.Jaccwabyt;\n\n        {\n          const __xString = wasm.xWrap.argAdapter('string');\n          wasm.xWrap.argAdapter('string:flexible', (v) =>\n            __xString(util.flexibleString(v)),\n          );\n\n          wasm.xWrap.argAdapter(\n            'string:static',\n            function (v) {\n              if (wasm.isPtr(v)) return v;\n              v = '' + v;\n              let rc = this[v];\n              return rc || (this[v] = wasm.allocCString(v));\n            }.bind(Object.create(null)),\n          );\n\n          const __xArgPtr = wasm.xWrap.argAdapter('*');\n          const nilType = function () {};\n          wasm.xWrap.argAdapter('sqlite3_filename', __xArgPtr)(\n            'sqlite3_context*',\n            __xArgPtr,\n          )('sqlite3_value*', __xArgPtr)('void*', __xArgPtr)(\n            'sqlite3_changegroup*',\n            __xArgPtr,\n          )('sqlite3_changeset_iter*', __xArgPtr)(\n            'sqlite3_session*',\n            __xArgPtr,\n          )('sqlite3_stmt*', (v) =>\n            __xArgPtr(\n              v instanceof (sqlite3?.oo1?.Stmt || nilType) ? v.pointer : v,\n            ),\n          )('sqlite3*', (v) =>\n            __xArgPtr(\n              v instanceof (sqlite3?.oo1?.DB || nilType) ? v.pointer : v,\n            ),\n          )('sqlite3_vfs*', (v) => {\n            if ('string' === typeof v) {\n              return (\n                capi.sqlite3_vfs_find(v) ||\n                sqlite3.SQLite3Error.toss(\n                  capi.SQLITE_NOTFOUND,\n                  'Unknown sqlite3_vfs name:',\n                  v,\n                )\n              );\n            }\n            return __xArgPtr(\n              v instanceof (capi.sqlite3_vfs || nilType) ? v.pointer : v,\n            );\n          });\n          if (wasm.exports.sqlite3_declare_vtab) {\n            wasm.xWrap.argAdapter('sqlite3_index_info*', (v) =>\n              __xArgPtr(\n                v instanceof (capi.sqlite3_index_info || nilType)\n                  ? v.pointer\n                  : v,\n              ),\n            )('sqlite3_module*', (v) =>\n              __xArgPtr(\n                v instanceof (capi.sqlite3_module || nilType) ? v.pointer : v,\n              ),\n            );\n          }\n\n          const __xRcPtr = wasm.xWrap.resultAdapter('*');\n          wasm.xWrap.resultAdapter('sqlite3*', __xRcPtr)(\n            'sqlite3_context*',\n            __xRcPtr,\n          )('sqlite3_stmt*', __xRcPtr)('sqlite3_value*', __xRcPtr)(\n            'sqlite3_vfs*',\n            __xRcPtr,\n          )('void*', __xRcPtr);\n\n          if (0 === wasm.exports.sqlite3_step.length) {\n            wasm.xWrap.doArgcCheck = false;\n            sqlite3.config.warn(\n              'Disabling sqlite3.wasm.xWrap.doArgcCheck due to environmental quirks.',\n            );\n          }\n          for (const e of wasm.bindingSignatures) {\n            capi[e[0]] = wasm.xWrap.apply(null, e);\n          }\n          for (const e of wasm.bindingSignatures.wasmInternal) {\n            util[e[0]] = wasm.xWrap.apply(null, e);\n          }\n\n          const fI64Disabled = function (fname) {\n            return () =>\n              toss(\n                fname + '() is unavailable due to lack',\n                'of BigInt support in this build.',\n              );\n          };\n          for (const e of wasm.bindingSignatures.int64) {\n            capi[e[0]] = wasm.bigIntEnabled\n              ? wasm.xWrap.apply(null, e)\n              : fI64Disabled(e[0]);\n          }\n\n          delete wasm.bindingSignatures;\n\n          if (wasm.exports.sqlite3__wasm_db_error) {\n            const __db_err = wasm.xWrap(\n              'sqlite3__wasm_db_error',\n              'int',\n              'sqlite3*',\n              'int',\n              'string',\n            );\n\n            util.sqlite3__wasm_db_error = function (pDb, resultCode, message) {\n              if (resultCode instanceof sqlite3.WasmAllocError) {\n                resultCode = capi.SQLITE_NOMEM;\n                message = 0;\n              } else if (resultCode instanceof Error) {\n                message = message || '' + resultCode;\n                resultCode = resultCode.resultCode || capi.SQLITE_ERROR;\n              }\n              return pDb ? __db_err(pDb, resultCode, message) : resultCode;\n            };\n          } else {\n            util.sqlite3__wasm_db_error = function (pDb, errCode, msg) {\n              console.warn(\n                'sqlite3__wasm_db_error() is not exported.',\n                arguments,\n              );\n              return errCode;\n            };\n          }\n        }\n\n        {\n          const cJson = wasm.xCall('sqlite3__wasm_enum_json');\n          if (!cJson) {\n            toss(\n              \"Maintenance required: increase sqlite3__wasm_enum_json()'s\",\n              'static buffer size!',\n            );\n          }\n\n          wasm.ctype = JSON.parse(wasm.cstrToJs(cJson));\n\n          const defineGroups = [\n            'access',\n            'authorizer',\n            'blobFinalizers',\n            'changeset',\n            'config',\n            'dataTypes',\n            'dbConfig',\n            'dbStatus',\n            'encodings',\n            'fcntl',\n            'flock',\n            'ioCap',\n            'limits',\n            'openFlags',\n            'prepareFlags',\n            'resultCodes',\n            'sqlite3Status',\n            'stmtStatus',\n            'syncFlags',\n            'trace',\n            'txnState',\n            'udfFlags',\n            'version',\n          ];\n          if (wasm.bigIntEnabled) {\n            defineGroups.push('serialize', 'session', 'vtab');\n          }\n          for (const t of defineGroups) {\n            for (const e of Object.entries(wasm.ctype[t])) {\n              capi[e[0]] = e[1];\n            }\n          }\n          if (!wasm.functionEntry(capi.SQLITE_WASM_DEALLOC)) {\n            toss(\n              'Internal error: cannot resolve exported function',\n              'entry SQLITE_WASM_DEALLOC (==' + capi.SQLITE_WASM_DEALLOC + ').',\n            );\n          }\n          const __rcMap = Object.create(null);\n          for (const t of ['resultCodes']) {\n            for (const e of Object.entries(wasm.ctype[t])) {\n              __rcMap[e[1]] = e[0];\n            }\n          }\n\n          capi.sqlite3_js_rc_str = (rc) => __rcMap[rc];\n\n          const notThese = Object.assign(Object.create(null), {\n            WasmTestStruct: true,\n\n            sqlite3_kvvfs_methods: !util.isUIThread(),\n\n            sqlite3_index_info: !wasm.bigIntEnabled,\n            sqlite3_index_constraint: !wasm.bigIntEnabled,\n            sqlite3_index_orderby: !wasm.bigIntEnabled,\n            sqlite3_index_constraint_usage: !wasm.bigIntEnabled,\n          });\n          for (const s of wasm.ctype.structs) {\n            if (!notThese[s.name]) {\n              capi[s.name] = sqlite3.StructBinder(s);\n            }\n          }\n          if (capi.sqlite3_index_info) {\n            for (const k of [\n              'sqlite3_index_constraint',\n              'sqlite3_index_orderby',\n              'sqlite3_index_constraint_usage',\n            ]) {\n              capi.sqlite3_index_info[k] = capi[k];\n              delete capi[k];\n            }\n            capi.sqlite3_vtab_config = wasm.xWrap(\n              'sqlite3__wasm_vtab_config',\n              'int',\n              ['sqlite3*', 'int', 'int'],\n            );\n          }\n        }\n\n        const __dbArgcMismatch = (pDb, f, n) => {\n          return util.sqlite3__wasm_db_error(\n            pDb,\n            capi.SQLITE_MISUSE,\n            f + '() requires ' + n + ' argument' + (1 === n ? '' : 's') + '.',\n          );\n        };\n\n        const __errEncoding = (pDb) => {\n          return util.sqlite3__wasm_db_error(\n            pDb,\n            capi.SQLITE_FORMAT,\n            'SQLITE_UTF8 is the only supported encoding.',\n          );\n        };\n\n        const __argPDb = (pDb) => wasm.xWrap.argAdapter('sqlite3*')(pDb);\n        const __argStr = (str) => (wasm.isPtr(str) ? wasm.cstrToJs(str) : str);\n        const __dbCleanupMap = function (pDb, mode) {\n          pDb = __argPDb(pDb);\n          let m = this.dbMap.get(pDb);\n          if (!mode) {\n            this.dbMap.delete(pDb);\n            return m;\n          } else if (!m && mode > 0) {\n            this.dbMap.set(pDb, (m = Object.create(null)));\n          }\n          return m;\n        }.bind(\n          Object.assign(Object.create(null), {\n            dbMap: new Map(),\n          }),\n        );\n\n        __dbCleanupMap.addCollation = function (pDb, name) {\n          const m = __dbCleanupMap(pDb, 1);\n          if (!m.collation) m.collation = new Set();\n          m.collation.add(__argStr(name).toLowerCase());\n        };\n\n        __dbCleanupMap._addUDF = function (pDb, name, arity, map) {\n          name = __argStr(name).toLowerCase();\n          let u = map.get(name);\n          if (!u) map.set(name, (u = new Set()));\n          u.add(arity < 0 ? -1 : arity);\n        };\n\n        __dbCleanupMap.addFunction = function (pDb, name, arity) {\n          const m = __dbCleanupMap(pDb, 1);\n          if (!m.udf) m.udf = new Map();\n          this._addUDF(pDb, name, arity, m.udf);\n        };\n\n        if (wasm.exports.sqlite3_create_window_function) {\n          __dbCleanupMap.addWindowFunc = function (pDb, name, arity) {\n            const m = __dbCleanupMap(pDb, 1);\n            if (!m.wudf) m.wudf = new Map();\n            this._addUDF(pDb, name, arity, m.wudf);\n          };\n        }\n\n        __dbCleanupMap.cleanup = function (pDb) {\n          pDb = __argPDb(pDb);\n\n          const closeArgs = [pDb];\n          for (const name of [\n            'sqlite3_busy_handler',\n            'sqlite3_commit_hook',\n            'sqlite3_preupdate_hook',\n            'sqlite3_progress_handler',\n            'sqlite3_rollback_hook',\n            'sqlite3_set_authorizer',\n            'sqlite3_trace_v2',\n            'sqlite3_update_hook',\n          ]) {\n            const x = wasm.exports[name];\n            if (!x) {\n              continue;\n            }\n            closeArgs.length = x.length;\n            try {\n              capi[name](...closeArgs);\n            } catch (e) {\n              sqlite3.config.warn(\n                'close-time call of',\n                name + '(',\n                closeArgs,\n                ') threw:',\n                e,\n              );\n            }\n          }\n          const m = __dbCleanupMap(pDb, 0);\n          if (!m) return;\n          if (m.collation) {\n            for (const name of m.collation) {\n              try {\n                capi.sqlite3_create_collation_v2(\n                  pDb,\n                  name,\n                  capi.SQLITE_UTF8,\n                  0,\n                  0,\n                  0,\n                );\n              } catch (e) {}\n            }\n            delete m.collation;\n          }\n          let i;\n          for (i = 0; i < 2; ++i) {\n            const fmap = i ? m.wudf : m.udf;\n            if (!fmap) continue;\n            const func = i\n              ? capi.sqlite3_create_window_function\n              : capi.sqlite3_create_function_v2;\n            for (const e of fmap) {\n              const name = e[0],\n                arities = e[1];\n              const fargs = [pDb, name, 0, capi.SQLITE_UTF8, 0, 0, 0, 0, 0];\n              if (i) fargs.push(0);\n              for (const arity of arities) {\n                try {\n                  fargs[2] = arity;\n                  func.apply(null, fargs);\n                } catch (e) {}\n              }\n              arities.clear();\n            }\n            fmap.clear();\n          }\n          delete m.udf;\n          delete m.wudf;\n        };\n\n        {\n          const __sqlite3CloseV2 = wasm.xWrap(\n            'sqlite3_close_v2',\n            'int',\n            'sqlite3*',\n          );\n          capi.sqlite3_close_v2 = function (pDb) {\n            if (1 !== arguments.length)\n              return __dbArgcMismatch(pDb, 'sqlite3_close_v2', 1);\n            if (pDb) {\n              try {\n                __dbCleanupMap.cleanup(pDb);\n              } catch (e) {}\n            }\n            return __sqlite3CloseV2(pDb);\n          };\n        }\n\n        if (capi.sqlite3session_create) {\n          const __sqlite3SessionDelete = wasm.xWrap(\n            'sqlite3session_delete',\n            undefined,\n            ['sqlite3_session*'],\n          );\n          capi.sqlite3session_delete = function (pSession) {\n            if (1 !== arguments.length) {\n              return __dbArgcMismatch(pDb, 'sqlite3session_delete', 1);\n            } else if (pSession) {\n              capi.sqlite3session_table_filter(pSession, 0, 0);\n            }\n            __sqlite3SessionDelete(pSession);\n          };\n        }\n\n        {\n          const contextKey = (argv, argIndex) => {\n            return (\n              'argv[' +\n              argIndex +\n              ']:' +\n              argv[0] +\n              ':' +\n              wasm.cstrToJs(argv[1]).toLowerCase()\n            );\n          };\n          const __sqlite3CreateCollationV2 = wasm.xWrap(\n            'sqlite3_create_collation_v2',\n            'int',\n            [\n              'sqlite3*',\n              'string',\n              'int',\n              '*',\n              new wasm.xWrap.FuncPtrAdapter({\n                name: 'xCompare',\n                signature: 'i(pipip)',\n                contextKey,\n              }),\n              new wasm.xWrap.FuncPtrAdapter({\n                name: 'xDestroy',\n                signature: 'v(p)',\n                contextKey,\n              }),\n            ],\n          );\n\n          capi.sqlite3_create_collation_v2 = function (\n            pDb,\n            zName,\n            eTextRep,\n            pArg,\n            xCompare,\n            xDestroy,\n          ) {\n            if (6 !== arguments.length)\n              return __dbArgcMismatch(pDb, 'sqlite3_create_collation_v2', 6);\n            else if (0 === (eTextRep & 0xf)) {\n              eTextRep |= capi.SQLITE_UTF8;\n            } else if (capi.SQLITE_UTF8 !== (eTextRep & 0xf)) {\n              return __errEncoding(pDb);\n            }\n            try {\n              const rc = __sqlite3CreateCollationV2(\n                pDb,\n                zName,\n                eTextRep,\n                pArg,\n                xCompare,\n                xDestroy,\n              );\n              if (0 === rc && xCompare instanceof Function) {\n                __dbCleanupMap.addCollation(pDb, zName);\n              }\n              return rc;\n            } catch (e) {\n              return util.sqlite3__wasm_db_error(pDb, e);\n            }\n          };\n\n          capi.sqlite3_create_collation = (\n            pDb,\n            zName,\n            eTextRep,\n            pArg,\n            xCompare,\n          ) => {\n            return 5 === arguments.length\n              ? capi.sqlite3_create_collation_v2(\n                  pDb,\n                  zName,\n                  eTextRep,\n                  pArg,\n                  xCompare,\n                  0,\n                )\n              : __dbArgcMismatch(pDb, 'sqlite3_create_collation', 5);\n          };\n        }\n\n        {\n          const contextKey = function (argv, argIndex) {\n            return (\n              argv[0] +\n              ':' +\n              (argv[2] < 0 ? -1 : argv[2]) +\n              ':' +\n              argIndex +\n              ':' +\n              wasm.cstrToJs(argv[1]).toLowerCase()\n            );\n          };\n\n          const __cfProxy = Object.assign(Object.create(null), {\n            xInverseAndStep: {\n              signature: 'v(pip)',\n              contextKey,\n              callProxy: (callback) => {\n                return (pCtx, argc, pArgv) => {\n                  try {\n                    callback(pCtx, ...capi.sqlite3_values_to_js(argc, pArgv));\n                  } catch (e) {\n                    capi.sqlite3_result_error_js(pCtx, e);\n                  }\n                };\n              },\n            },\n            xFinalAndValue: {\n              signature: 'v(p)',\n              contextKey,\n              callProxy: (callback) => {\n                return (pCtx) => {\n                  try {\n                    capi.sqlite3_result_js(pCtx, callback(pCtx));\n                  } catch (e) {\n                    capi.sqlite3_result_error_js(pCtx, e);\n                  }\n                };\n              },\n            },\n            xFunc: {\n              signature: 'v(pip)',\n              contextKey,\n              callProxy: (callback) => {\n                return (pCtx, argc, pArgv) => {\n                  try {\n                    capi.sqlite3_result_js(\n                      pCtx,\n                      callback(pCtx, ...capi.sqlite3_values_to_js(argc, pArgv)),\n                    );\n                  } catch (e) {\n                    capi.sqlite3_result_error_js(pCtx, e);\n                  }\n                };\n              },\n            },\n            xDestroy: {\n              signature: 'v(p)',\n              contextKey,\n\n              callProxy: (callback) => {\n                return (pVoid) => {\n                  try {\n                    callback(pVoid);\n                  } catch (e) {\n                    console.error('UDF xDestroy method threw:', e);\n                  }\n                };\n              },\n            },\n          });\n\n          const __sqlite3CreateFunction = wasm.xWrap(\n            'sqlite3_create_function_v2',\n            'int',\n            [\n              'sqlite3*',\n              'string',\n              'int',\n              'int',\n              '*',\n              new wasm.xWrap.FuncPtrAdapter({\n                name: 'xFunc',\n                ...__cfProxy.xFunc,\n              }),\n              new wasm.xWrap.FuncPtrAdapter({\n                name: 'xStep',\n                ...__cfProxy.xInverseAndStep,\n              }),\n              new wasm.xWrap.FuncPtrAdapter({\n                name: 'xFinal',\n                ...__cfProxy.xFinalAndValue,\n              }),\n              new wasm.xWrap.FuncPtrAdapter({\n                name: 'xDestroy',\n                ...__cfProxy.xDestroy,\n              }),\n            ],\n          );\n\n          const __sqlite3CreateWindowFunction = wasm.exports\n            .sqlite3_create_window_function\n            ? wasm.xWrap('sqlite3_create_window_function', 'int', [\n                'sqlite3*',\n                'string',\n                'int',\n                'int',\n                '*',\n                new wasm.xWrap.FuncPtrAdapter({\n                  name: 'xStep',\n                  ...__cfProxy.xInverseAndStep,\n                }),\n                new wasm.xWrap.FuncPtrAdapter({\n                  name: 'xFinal',\n                  ...__cfProxy.xFinalAndValue,\n                }),\n                new wasm.xWrap.FuncPtrAdapter({\n                  name: 'xValue',\n                  ...__cfProxy.xFinalAndValue,\n                }),\n                new wasm.xWrap.FuncPtrAdapter({\n                  name: 'xInverse',\n                  ...__cfProxy.xInverseAndStep,\n                }),\n                new wasm.xWrap.FuncPtrAdapter({\n                  name: 'xDestroy',\n                  ...__cfProxy.xDestroy,\n                }),\n              ])\n            : undefined;\n\n          capi.sqlite3_create_function_v2 = function f(\n            pDb,\n            funcName,\n            nArg,\n            eTextRep,\n            pApp,\n            xFunc,\n            xStep,\n            xFinal,\n            xDestroy,\n          ) {\n            if (f.length !== arguments.length) {\n              return __dbArgcMismatch(\n                pDb,\n                'sqlite3_create_function_v2',\n                f.length,\n              );\n            } else if (0 === (eTextRep & 0xf)) {\n              eTextRep |= capi.SQLITE_UTF8;\n            } else if (capi.SQLITE_UTF8 !== (eTextRep & 0xf)) {\n              return __errEncoding(pDb);\n            }\n            try {\n              const rc = __sqlite3CreateFunction(\n                pDb,\n                funcName,\n                nArg,\n                eTextRep,\n                pApp,\n                xFunc,\n                xStep,\n                xFinal,\n                xDestroy,\n              );\n              if (\n                0 === rc &&\n                (xFunc instanceof Function ||\n                  xStep instanceof Function ||\n                  xFinal instanceof Function ||\n                  xDestroy instanceof Function)\n              ) {\n                __dbCleanupMap.addFunction(pDb, funcName, nArg);\n              }\n              return rc;\n            } catch (e) {\n              console.error('sqlite3_create_function_v2() setup threw:', e);\n              return util.sqlite3__wasm_db_error(\n                pDb,\n                e,\n                'Creation of UDF threw: ' + e,\n              );\n            }\n          };\n\n          capi.sqlite3_create_function = function f(\n            pDb,\n            funcName,\n            nArg,\n            eTextRep,\n            pApp,\n            xFunc,\n            xStep,\n            xFinal,\n          ) {\n            return f.length === arguments.length\n              ? capi.sqlite3_create_function_v2(\n                  pDb,\n                  funcName,\n                  nArg,\n                  eTextRep,\n                  pApp,\n                  xFunc,\n                  xStep,\n                  xFinal,\n                  0,\n                )\n              : __dbArgcMismatch(pDb, 'sqlite3_create_function', f.length);\n          };\n\n          if (__sqlite3CreateWindowFunction) {\n            capi.sqlite3_create_window_function = function f(\n              pDb,\n              funcName,\n              nArg,\n              eTextRep,\n              pApp,\n              xStep,\n              xFinal,\n              xValue,\n              xInverse,\n              xDestroy,\n            ) {\n              if (f.length !== arguments.length) {\n                return __dbArgcMismatch(\n                  pDb,\n                  'sqlite3_create_window_function',\n                  f.length,\n                );\n              } else if (0 === (eTextRep & 0xf)) {\n                eTextRep |= capi.SQLITE_UTF8;\n              } else if (capi.SQLITE_UTF8 !== (eTextRep & 0xf)) {\n                return __errEncoding(pDb);\n              }\n              try {\n                const rc = __sqlite3CreateWindowFunction(\n                  pDb,\n                  funcName,\n                  nArg,\n                  eTextRep,\n                  pApp,\n                  xStep,\n                  xFinal,\n                  xValue,\n                  xInverse,\n                  xDestroy,\n                );\n                if (\n                  0 === rc &&\n                  (xStep instanceof Function ||\n                    xFinal instanceof Function ||\n                    xValue instanceof Function ||\n                    xInverse instanceof Function ||\n                    xDestroy instanceof Function)\n                ) {\n                  __dbCleanupMap.addWindowFunc(pDb, funcName, nArg);\n                }\n                return rc;\n              } catch (e) {\n                console.error(\n                  'sqlite3_create_window_function() setup threw:',\n                  e,\n                );\n                return util.sqlite3__wasm_db_error(\n                  pDb,\n                  e,\n                  'Creation of UDF threw: ' + e,\n                );\n              }\n            };\n          } else {\n            delete capi.sqlite3_create_window_function;\n          }\n\n          capi.sqlite3_create_function_v2.udfSetResult =\n            capi.sqlite3_create_function.udfSetResult = capi.sqlite3_result_js;\n          if (capi.sqlite3_create_window_function) {\n            capi.sqlite3_create_window_function.udfSetResult =\n              capi.sqlite3_result_js;\n          }\n\n          capi.sqlite3_create_function_v2.udfConvertArgs =\n            capi.sqlite3_create_function.udfConvertArgs =\n              capi.sqlite3_values_to_js;\n          if (capi.sqlite3_create_window_function) {\n            capi.sqlite3_create_window_function.udfConvertArgs =\n              capi.sqlite3_values_to_js;\n          }\n\n          capi.sqlite3_create_function_v2.udfSetError =\n            capi.sqlite3_create_function.udfSetError =\n              capi.sqlite3_result_error_js;\n          if (capi.sqlite3_create_window_function) {\n            capi.sqlite3_create_window_function.udfSetError =\n              capi.sqlite3_result_error_js;\n          }\n        }\n\n        {\n          const __flexiString = (v, n) => {\n            if ('string' === typeof v) {\n              n = -1;\n            } else if (util.isSQLableTypedArray(v)) {\n              n = v.byteLength;\n              v = util.typedArrayToString(\n                v instanceof ArrayBuffer ? new Uint8Array(v) : v,\n              );\n            } else if (Array.isArray(v)) {\n              v = v.join('');\n              n = -1;\n            }\n            return [v, n];\n          };\n\n          const __prepare = {\n            basic: wasm.xWrap('sqlite3_prepare_v3', 'int', [\n              'sqlite3*',\n              'string',\n              'int',\n              'int',\n              '**',\n              '**',\n            ]),\n\n            full: wasm.xWrap('sqlite3_prepare_v3', 'int', [\n              'sqlite3*',\n              '*',\n              'int',\n              'int',\n              '**',\n              '**',\n            ]),\n          };\n\n          capi.sqlite3_prepare_v3 = function f(\n            pDb,\n            sql,\n            sqlLen,\n            prepFlags,\n            ppStmt,\n            pzTail,\n          ) {\n            if (f.length !== arguments.length) {\n              return __dbArgcMismatch(pDb, 'sqlite3_prepare_v3', f.length);\n            }\n            const [xSql, xSqlLen] = __flexiString(sql, sqlLen);\n            switch (typeof xSql) {\n              case 'string':\n                return __prepare.basic(\n                  pDb,\n                  xSql,\n                  xSqlLen,\n                  prepFlags,\n                  ppStmt,\n                  null,\n                );\n              case 'number':\n                return __prepare.full(\n                  pDb,\n                  xSql,\n                  xSqlLen,\n                  prepFlags,\n                  ppStmt,\n                  pzTail,\n                );\n              default:\n                return util.sqlite3__wasm_db_error(\n                  pDb,\n                  capi.SQLITE_MISUSE,\n                  'Invalid SQL argument type for sqlite3_prepare_v2/v3().',\n                );\n            }\n          };\n\n          capi.sqlite3_prepare_v2 = function f(\n            pDb,\n            sql,\n            sqlLen,\n            ppStmt,\n            pzTail,\n          ) {\n            return f.length === arguments.length\n              ? capi.sqlite3_prepare_v3(pDb, sql, sqlLen, 0, ppStmt, pzTail)\n              : __dbArgcMismatch(pDb, 'sqlite3_prepare_v2', f.length);\n          };\n        }\n\n        {\n          const __bindText = wasm.xWrap('sqlite3_bind_text', 'int', [\n            'sqlite3_stmt*',\n            'int',\n            'string',\n            'int',\n            '*',\n          ]);\n          const __bindBlob = wasm.xWrap('sqlite3_bind_blob', 'int', [\n            'sqlite3_stmt*',\n            'int',\n            '*',\n            'int',\n            '*',\n          ]);\n\n          capi.sqlite3_bind_text = function f(\n            pStmt,\n            iCol,\n            text,\n            nText,\n            xDestroy,\n          ) {\n            if (f.length !== arguments.length) {\n              return __dbArgcMismatch(\n                capi.sqlite3_db_handle(pStmt),\n                'sqlite3_bind_text',\n                f.length,\n              );\n            } else if (wasm.isPtr(text) || null === text) {\n              return __bindText(pStmt, iCol, text, nText, xDestroy);\n            } else if (text instanceof ArrayBuffer) {\n              text = new Uint8Array(text);\n            } else if (Array.isArray(pMem)) {\n              text = pMem.join('');\n            }\n            let p, n;\n            try {\n              if (util.isSQLableTypedArray(text)) {\n                p = wasm.allocFromTypedArray(text);\n                n = text.byteLength;\n              } else if ('string' === typeof text) {\n                [p, n] = wasm.allocCString(text);\n              } else {\n                return util.sqlite3__wasm_db_error(\n                  capi.sqlite3_db_handle(pStmt),\n                  capi.SQLITE_MISUSE,\n                  'Invalid 3rd argument type for sqlite3_bind_text().',\n                );\n              }\n              return __bindText(pStmt, iCol, p, n, capi.SQLITE_WASM_DEALLOC);\n            } catch (e) {\n              wasm.dealloc(p);\n              return util.sqlite3__wasm_db_error(\n                capi.sqlite3_db_handle(pStmt),\n                e,\n              );\n            }\n          };\n\n          capi.sqlite3_bind_blob = function f(\n            pStmt,\n            iCol,\n            pMem,\n            nMem,\n            xDestroy,\n          ) {\n            if (f.length !== arguments.length) {\n              return __dbArgcMismatch(\n                capi.sqlite3_db_handle(pStmt),\n                'sqlite3_bind_blob',\n                f.length,\n              );\n            } else if (wasm.isPtr(pMem) || null === pMem) {\n              return __bindBlob(pStmt, iCol, pMem, nMem, xDestroy);\n            } else if (pMem instanceof ArrayBuffer) {\n              pMem = new Uint8Array(pMem);\n            } else if (Array.isArray(pMem)) {\n              pMem = pMem.join('');\n            }\n            let p, n;\n            try {\n              if (util.isBindableTypedArray(pMem)) {\n                p = wasm.allocFromTypedArray(pMem);\n                n = nMem >= 0 ? nMem : pMem.byteLength;\n              } else if ('string' === typeof pMem) {\n                [p, n] = wasm.allocCString(pMem);\n              } else {\n                return util.sqlite3__wasm_db_error(\n                  capi.sqlite3_db_handle(pStmt),\n                  capi.SQLITE_MISUSE,\n                  'Invalid 3rd argument type for sqlite3_bind_blob().',\n                );\n              }\n              return __bindBlob(pStmt, iCol, p, n, capi.SQLITE_WASM_DEALLOC);\n            } catch (e) {\n              wasm.dealloc(p);\n              return util.sqlite3__wasm_db_error(\n                capi.sqlite3_db_handle(pStmt),\n                e,\n              );\n            }\n          };\n        }\n\n        {\n          capi.sqlite3_config = function (op, ...args) {\n            if (arguments.length < 2) return capi.SQLITE_MISUSE;\n            switch (op) {\n              case capi.SQLITE_CONFIG_COVERING_INDEX_SCAN:\n              case capi.SQLITE_CONFIG_MEMSTATUS:\n              case capi.SQLITE_CONFIG_SMALL_MALLOC:\n              case capi.SQLITE_CONFIG_SORTERREF_SIZE:\n              case capi.SQLITE_CONFIG_STMTJRNL_SPILL:\n              case capi.SQLITE_CONFIG_URI:\n                return wasm.exports.sqlite3__wasm_config_i(op, args[0]);\n              case capi.SQLITE_CONFIG_LOOKASIDE:\n                return wasm.exports.sqlite3__wasm_config_ii(\n                  op,\n                  args[0],\n                  args[1],\n                );\n              case capi.SQLITE_CONFIG_MEMDB_MAXSIZE:\n                return wasm.exports.sqlite3__wasm_config_j(op, args[0]);\n              case capi.SQLITE_CONFIG_GETMALLOC:\n              case capi.SQLITE_CONFIG_GETMUTEX:\n              case capi.SQLITE_CONFIG_GETPCACHE2:\n              case capi.SQLITE_CONFIG_GETPCACHE:\n              case capi.SQLITE_CONFIG_HEAP:\n              case capi.SQLITE_CONFIG_LOG:\n              case capi.SQLITE_CONFIG_MALLOC:\n              case capi.SQLITE_CONFIG_MMAP_SIZE:\n              case capi.SQLITE_CONFIG_MULTITHREAD:\n              case capi.SQLITE_CONFIG_MUTEX:\n              case capi.SQLITE_CONFIG_PAGECACHE:\n              case capi.SQLITE_CONFIG_PCACHE2:\n              case capi.SQLITE_CONFIG_PCACHE:\n              case capi.SQLITE_CONFIG_PCACHE_HDRSZ:\n              case capi.SQLITE_CONFIG_PMASZ:\n              case capi.SQLITE_CONFIG_SERIALIZED:\n              case capi.SQLITE_CONFIG_SINGLETHREAD:\n              case capi.SQLITE_CONFIG_SQLLOG:\n              case capi.SQLITE_CONFIG_WIN32_HEAPSIZE:\n              default:\n                return capi.SQLITE_NOTFOUND;\n            }\n          };\n        }\n\n        {\n          const __autoExtFptr = new Set();\n\n          capi.sqlite3_auto_extension = function (fPtr) {\n            if (fPtr instanceof Function) {\n              fPtr = wasm.installFunction('i(ppp)', fPtr);\n            } else if (1 !== arguments.length || !wasm.isPtr(fPtr)) {\n              return capi.SQLITE_MISUSE;\n            }\n            const rc = wasm.exports.sqlite3_auto_extension(fPtr);\n            if (fPtr !== arguments[0]) {\n              if (0 === rc) __autoExtFptr.add(fPtr);\n              else wasm.uninstallFunction(fPtr);\n            }\n            return rc;\n          };\n\n          capi.sqlite3_cancel_auto_extension = function (fPtr) {\n            if (!fPtr || 1 !== arguments.length || !wasm.isPtr(fPtr)) return 0;\n            return wasm.exports.sqlite3_cancel_auto_extension(fPtr);\n          };\n\n          capi.sqlite3_reset_auto_extension = function () {\n            wasm.exports.sqlite3_reset_auto_extension();\n            for (const fp of __autoExtFptr) wasm.uninstallFunction(fp);\n            __autoExtFptr.clear();\n          };\n        }\n\n        const pKvvfs = capi.sqlite3_vfs_find('kvvfs');\n        if (pKvvfs) {\n          if (util.isUIThread()) {\n            const kvvfsMethods = new capi.sqlite3_kvvfs_methods(\n              wasm.exports.sqlite3__wasm_kvvfs_methods(),\n            );\n            delete capi.sqlite3_kvvfs_methods;\n\n            const kvvfsMakeKey =\n                wasm.exports.sqlite3__wasm_kvvfsMakeKeyOnPstack,\n              pstack = wasm.pstack;\n\n            const kvvfsStorage = (zClass) =>\n              115 === wasm.peek(zClass) ? sessionStorage : localStorage;\n\n            const kvvfsImpls = {\n              xRead: (zClass, zKey, zBuf, nBuf) => {\n                const stack = pstack.pointer,\n                  astack = wasm.scopedAllocPush();\n                try {\n                  const zXKey = kvvfsMakeKey(zClass, zKey);\n                  if (!zXKey) return -3;\n                  const jKey = wasm.cstrToJs(zXKey);\n                  const jV = kvvfsStorage(zClass).getItem(jKey);\n                  if (!jV) return -1;\n                  const nV = jV.length;\n                  if (nBuf <= 0) return nV;\n                  else if (1 === nBuf) {\n                    wasm.poke(zBuf, 0);\n                    return nV;\n                  }\n                  const zV = wasm.scopedAllocCString(jV);\n                  if (nBuf > nV + 1) nBuf = nV + 1;\n                  wasm.heap8u().copyWithin(zBuf, zV, zV + nBuf - 1);\n                  wasm.poke(zBuf + nBuf - 1, 0);\n                  return nBuf - 1;\n                } catch (e) {\n                  console.error('kvstorageRead()', e);\n                  return -2;\n                } finally {\n                  pstack.restore(stack);\n                  wasm.scopedAllocPop(astack);\n                }\n              },\n              xWrite: (zClass, zKey, zData) => {\n                const stack = pstack.pointer;\n                try {\n                  const zXKey = kvvfsMakeKey(zClass, zKey);\n                  if (!zXKey) return 1;\n                  const jKey = wasm.cstrToJs(zXKey);\n                  kvvfsStorage(zClass).setItem(jKey, wasm.cstrToJs(zData));\n                  return 0;\n                } catch (e) {\n                  console.error('kvstorageWrite()', e);\n                  return capi.SQLITE_IOERR;\n                } finally {\n                  pstack.restore(stack);\n                }\n              },\n              xDelete: (zClass, zKey) => {\n                const stack = pstack.pointer;\n                try {\n                  const zXKey = kvvfsMakeKey(zClass, zKey);\n                  if (!zXKey) return 1;\n                  kvvfsStorage(zClass).removeItem(wasm.cstrToJs(zXKey));\n                  return 0;\n                } catch (e) {\n                  console.error('kvstorageDelete()', e);\n                  return capi.SQLITE_IOERR;\n                } finally {\n                  pstack.restore(stack);\n                }\n              },\n            };\n            for (const k of Object.keys(kvvfsImpls)) {\n              kvvfsMethods[kvvfsMethods.memberKey(k)] = wasm.installFunction(\n                kvvfsMethods.memberSignature(k),\n                kvvfsImpls[k],\n              );\n            }\n          } else {\n            capi.sqlite3_vfs_unregister(pKvvfs);\n          }\n        }\n\n        wasm.xWrap.FuncPtrAdapter.warnOnUse = true;\n\n        const StructBinder = sqlite3.StructBinder;\n        const installMethod = function callee(\n          tgt,\n          name,\n          func,\n          applyArgcCheck = callee.installMethodArgcCheck,\n        ) {\n          if (!(tgt instanceof StructBinder.StructType)) {\n            toss('Usage error: target object is-not-a StructType.');\n          } else if (!(func instanceof Function) && !wasm.isPtr(func)) {\n            toss('Usage errror: expecting a Function or WASM pointer to one.');\n          }\n          if (1 === arguments.length) {\n            return (n, f) => callee(tgt, n, f, applyArgcCheck);\n          }\n          if (!callee.argcProxy) {\n            callee.argcProxy = function (tgt, funcName, func, sig) {\n              return function (...args) {\n                if (func.length !== arguments.length) {\n                  toss(\n                    'Argument mismatch for',\n                    tgt.structInfo.name +\n                      '::' +\n                      funcName +\n                      ': Native signature is:',\n                    sig,\n                  );\n                }\n                return func.apply(this, args);\n              };\n            };\n\n            callee.removeFuncList = function () {\n              if (this.ondispose.__removeFuncList) {\n                this.ondispose.__removeFuncList.forEach((v, ndx) => {\n                  if ('number' === typeof v) {\n                    try {\n                      wasm.uninstallFunction(v);\n                    } catch (e) {}\n                  }\n                });\n                delete this.ondispose.__removeFuncList;\n              }\n            };\n          }\n          const sigN = tgt.memberSignature(name);\n          if (sigN.length < 2) {\n            toss(\n              'Member',\n              name,\n              'does not have a function pointer signature:',\n              sigN,\n            );\n          }\n          const memKey = tgt.memberKey(name);\n          const fProxy =\n            applyArgcCheck && !wasm.isPtr(func)\n              ? callee.argcProxy(tgt, memKey, func, sigN)\n              : func;\n          if (wasm.isPtr(fProxy)) {\n            if (fProxy && !wasm.functionEntry(fProxy)) {\n              toss('Pointer', fProxy, 'is not a WASM function table entry.');\n            }\n            tgt[memKey] = fProxy;\n          } else {\n            const pFunc = wasm.installFunction(\n              fProxy,\n              tgt.memberSignature(name, true),\n            );\n            tgt[memKey] = pFunc;\n            if (!tgt.ondispose || !tgt.ondispose.__removeFuncList) {\n              tgt.addOnDispose(\n                'ondispose.__removeFuncList handler',\n                callee.removeFuncList,\n              );\n              tgt.ondispose.__removeFuncList = [];\n            }\n            tgt.ondispose.__removeFuncList.push(memKey, pFunc);\n          }\n          return (n, f) => callee(tgt, n, f, applyArgcCheck);\n        };\n        installMethod.installMethodArgcCheck = false;\n\n        const installMethods = function (\n          structInstance,\n          methods,\n          applyArgcCheck = installMethod.installMethodArgcCheck,\n        ) {\n          const seen = new Map();\n          for (const k of Object.keys(methods)) {\n            const m = methods[k];\n            const prior = seen.get(m);\n            if (prior) {\n              const mkey = structInstance.memberKey(k);\n              structInstance[mkey] =\n                structInstance[structInstance.memberKey(prior)];\n            } else {\n              installMethod(structInstance, k, m, applyArgcCheck);\n              seen.set(m, k);\n            }\n          }\n          return structInstance;\n        };\n\n        StructBinder.StructType.prototype.installMethod = function callee(\n          name,\n          func,\n          applyArgcCheck = installMethod.installMethodArgcCheck,\n        ) {\n          return arguments.length < 3 && name && 'object' === typeof name\n            ? installMethods(this, ...arguments)\n            : installMethod(this, ...arguments);\n        };\n\n        StructBinder.StructType.prototype.installMethods = function (\n          methods,\n          applyArgcCheck = installMethod.installMethodArgcCheck,\n        ) {\n          return installMethods(this, methods, applyArgcCheck);\n        };\n      });\n\n      globalThis.sqlite3ApiBootstrap.initializers.push(function (sqlite3) {\n        sqlite3.version = {\n          libVersion: '3.47.1',\n          libVersionNumber: 3047001,\n          sourceId:\n            '2024-11-25 12:07:48 b95d11e958643b969c47a8e5857f3793b9e69700b8f1469371386369a26e577e',\n          downloadVersion: 3470100,\n        };\n      });\n\n      globalThis.sqlite3ApiBootstrap.initializers.push(function (sqlite3) {\n        const toss = (...args) => {\n          throw new Error(args.join(' '));\n        };\n        const toss3 = (...args) => {\n          throw new sqlite3.SQLite3Error(...args);\n        };\n\n        const capi = sqlite3.capi,\n          wasm = sqlite3.wasm,\n          util = sqlite3.util;\n\n        const __ptrMap = new WeakMap();\n\n        const __stmtMap = new WeakMap();\n\n        const getOwnOption = (opts, p, dflt) => {\n          const d = Object.getOwnPropertyDescriptor(opts, p);\n          return d ? d.value : dflt;\n        };\n\n        const checkSqlite3Rc = function (dbPtr, sqliteResultCode) {\n          if (sqliteResultCode) {\n            if (dbPtr instanceof DB) dbPtr = dbPtr.pointer;\n            toss3(\n              sqliteResultCode,\n              'sqlite3 result code',\n              sqliteResultCode + ':',\n              dbPtr\n                ? capi.sqlite3_errmsg(dbPtr)\n                : capi.sqlite3_errstr(sqliteResultCode),\n            );\n          }\n          return arguments[0];\n        };\n\n        const __dbTraceToConsole = wasm.installFunction(\n          'i(ippp)',\n          function (t, c, p, x) {\n            if (capi.SQLITE_TRACE_STMT === t) {\n              console.log(\n                'SQL TRACE #' + ++this.counter + ' via sqlite3@' + c + ':',\n                wasm.cstrToJs(x),\n              );\n            }\n          }.bind({ counter: 0 }),\n        );\n\n        const __vfsPostOpenCallback = Object.create(null);\n\n        const dbCtorHelper = function ctor(...args) {\n          if (!ctor._name2vfs) {\n            ctor._name2vfs = Object.create(null);\n            const isWorkerThread =\n              'function' === typeof importScripts\n                ? (n) =>\n                    toss3(\n                      'The VFS for',\n                      n,\n                      'is only available in the main window thread.',\n                    )\n                : false;\n            ctor._name2vfs[':localStorage:'] = {\n              vfs: 'kvvfs',\n              filename: isWorkerThread || (() => 'local'),\n            };\n            ctor._name2vfs[':sessionStorage:'] = {\n              vfs: 'kvvfs',\n              filename: isWorkerThread || (() => 'session'),\n            };\n          }\n          const opt = ctor.normalizeArgs(...args);\n          let fn = opt.filename,\n            vfsName = opt.vfs,\n            flagsStr = opt.flags;\n          if (\n            ('string' !== typeof fn && 'number' !== typeof fn) ||\n            'string' !== typeof flagsStr ||\n            (vfsName &&\n              'string' !== typeof vfsName &&\n              'number' !== typeof vfsName)\n          ) {\n            sqlite3.config.error('Invalid DB ctor args', opt, arguments);\n            toss3('Invalid arguments for DB constructor.');\n          }\n          let fnJs = 'number' === typeof fn ? wasm.cstrToJs(fn) : fn;\n          const vfsCheck = ctor._name2vfs[fnJs];\n          if (vfsCheck) {\n            vfsName = vfsCheck.vfs;\n            fn = fnJs = vfsCheck.filename(fnJs);\n          }\n          let pDb,\n            oflags = 0;\n          if (flagsStr.indexOf('c') >= 0) {\n            oflags |= capi.SQLITE_OPEN_CREATE | capi.SQLITE_OPEN_READWRITE;\n          }\n          if (flagsStr.indexOf('w') >= 0) oflags |= capi.SQLITE_OPEN_READWRITE;\n          if (0 === oflags) oflags |= capi.SQLITE_OPEN_READONLY;\n          oflags |= capi.SQLITE_OPEN_EXRESCODE;\n          const stack = wasm.pstack.pointer;\n          try {\n            const pPtr = wasm.pstack.allocPtr();\n            let rc = capi.sqlite3_open_v2(fn, pPtr, oflags, vfsName || 0);\n            pDb = wasm.peekPtr(pPtr);\n            checkSqlite3Rc(pDb, rc);\n            capi.sqlite3_extended_result_codes(pDb, 1);\n            if (flagsStr.indexOf('t') >= 0) {\n              capi.sqlite3_trace_v2(\n                pDb,\n                capi.SQLITE_TRACE_STMT,\n                __dbTraceToConsole,\n                pDb,\n              );\n            }\n          } catch (e) {\n            if (pDb) capi.sqlite3_close_v2(pDb);\n            throw e;\n          } finally {\n            wasm.pstack.restore(stack);\n          }\n          this.filename = fnJs;\n          __ptrMap.set(this, pDb);\n          __stmtMap.set(this, Object.create(null));\n          try {\n            const pVfs =\n              capi.sqlite3_js_db_vfs(pDb) ||\n              toss3('Internal error: cannot get VFS for new db handle.');\n            const postInitSql = __vfsPostOpenCallback[pVfs];\n            if (postInitSql) {\n              if (postInitSql instanceof Function) {\n                postInitSql(this, sqlite3);\n              } else {\n                checkSqlite3Rc(\n                  pDb,\n                  capi.sqlite3_exec(pDb, postInitSql, 0, 0, 0),\n                );\n              }\n            }\n          } catch (e) {\n            this.close();\n            throw e;\n          }\n        };\n\n        dbCtorHelper.setVfsPostOpenCallback = function (pVfs, callback) {\n          if (!(callback instanceof Function)) {\n            toss3(\n              'dbCtorHelper.setVfsPostOpenCallback() should not be used with ' +\n                'a non-function argument.',\n              arguments,\n            );\n          }\n          __vfsPostOpenCallback[pVfs] = callback;\n        };\n\n        dbCtorHelper.normalizeArgs = function (\n          filename = ':memory:',\n          flags = 'c',\n          vfs = null,\n        ) {\n          const arg = {};\n          if (\n            1 === arguments.length &&\n            arguments[0] &&\n            'object' === typeof arguments[0]\n          ) {\n            Object.assign(arg, arguments[0]);\n            if (undefined === arg.flags) arg.flags = 'c';\n            if (undefined === arg.vfs) arg.vfs = null;\n            if (undefined === arg.filename) arg.filename = ':memory:';\n          } else {\n            arg.filename = filename;\n            arg.flags = flags;\n            arg.vfs = vfs;\n          }\n          return arg;\n        };\n\n        const DB = function (...args) {\n          dbCtorHelper.apply(this, args);\n        };\n        DB.dbCtorHelper = dbCtorHelper;\n\n        const BindTypes = {\n          null: 1,\n          number: 2,\n          string: 3,\n          boolean: 4,\n          blob: 5,\n        };\n        BindTypes['undefined'] == BindTypes.null;\n        if (wasm.bigIntEnabled) {\n          BindTypes.bigint = BindTypes.number;\n        }\n\n        const Stmt = function () {\n          if (BindTypes !== arguments[2]) {\n            toss3(\n              capi.SQLITE_MISUSE,\n              'Do not call the Stmt constructor directly. Use DB.prepare().',\n            );\n          }\n          this.db = arguments[0];\n          __ptrMap.set(this, arguments[1]);\n          this.parameterCount = capi.sqlite3_bind_parameter_count(this.pointer);\n        };\n\n        const affirmDbOpen = function (db) {\n          if (!db.pointer) toss3('DB has been closed.');\n          return db;\n        };\n\n        const affirmColIndex = function (stmt, ndx) {\n          if (ndx !== (ndx | 0) || ndx < 0 || ndx >= stmt.columnCount) {\n            toss3('Column index', ndx, 'is out of range.');\n          }\n          return stmt;\n        };\n\n        const parseExecArgs = function (db, args) {\n          const out = Object.create(null);\n          out.opt = Object.create(null);\n          switch (args.length) {\n            case 1:\n              if (\n                'string' === typeof args[0] ||\n                util.isSQLableTypedArray(args[0])\n              ) {\n                out.sql = args[0];\n              } else if (Array.isArray(args[0])) {\n                out.sql = args[0];\n              } else if (args[0] && 'object' === typeof args[0]) {\n                out.opt = args[0];\n                out.sql = out.opt.sql;\n              }\n              break;\n            case 2:\n              out.sql = args[0];\n              out.opt = args[1];\n              break;\n            default:\n              toss3('Invalid argument count for exec().');\n          }\n          out.sql = util.flexibleString(out.sql);\n          if ('string' !== typeof out.sql) {\n            toss3('Missing SQL argument or unsupported SQL value type.');\n          }\n          const opt = out.opt;\n          switch (opt.returnValue) {\n            case 'resultRows':\n              if (!opt.resultRows) opt.resultRows = [];\n              out.returnVal = () => opt.resultRows;\n              break;\n            case 'saveSql':\n              if (!opt.saveSql) opt.saveSql = [];\n              out.returnVal = () => opt.saveSql;\n              break;\n            case undefined:\n            case 'this':\n              out.returnVal = () => db;\n              break;\n            default:\n              toss3('Invalid returnValue value:', opt.returnValue);\n          }\n          if (!opt.callback && !opt.returnValue && undefined !== opt.rowMode) {\n            if (!opt.resultRows) opt.resultRows = [];\n            out.returnVal = () => opt.resultRows;\n          }\n          if (opt.callback || opt.resultRows) {\n            switch (undefined === opt.rowMode ? 'array' : opt.rowMode) {\n              case 'object':\n                out.cbArg = (stmt, cache) => {\n                  if (!cache.columnNames)\n                    cache.columnNames = stmt.getColumnNames([]);\n\n                  const row = stmt.get([]);\n                  const rv = Object.create(null);\n                  for (const i in cache.columnNames)\n                    rv[cache.columnNames[i]] = row[i];\n                  return rv;\n                };\n                break;\n              case 'array':\n                out.cbArg = (stmt) => stmt.get([]);\n                break;\n              case 'stmt':\n                if (Array.isArray(opt.resultRows)) {\n                  toss3(\n                    'exec(): invalid rowMode for a resultRows array: must',\n                    \"be one of 'array', 'object',\",\n                    'a result column number, or column name reference.',\n                  );\n                }\n                out.cbArg = (stmt) => stmt;\n                break;\n              default:\n                if (util.isInt32(opt.rowMode)) {\n                  out.cbArg = (stmt) => stmt.get(opt.rowMode);\n                  break;\n                } else if (\n                  'string' === typeof opt.rowMode &&\n                  opt.rowMode.length > 1 &&\n                  '$' === opt.rowMode[0]\n                ) {\n                  const $colName = opt.rowMode.substr(1);\n                  out.cbArg = (stmt) => {\n                    const rc = stmt.get(Object.create(null))[$colName];\n                    return undefined === rc\n                      ? toss3(\n                          capi.SQLITE_NOTFOUND,\n                          'exec(): unknown result column:',\n                          $colName,\n                        )\n                      : rc;\n                  };\n                  break;\n                }\n                toss3('Invalid rowMode:', opt.rowMode);\n            }\n          }\n          return out;\n        };\n\n        const __selectFirstRow = (db, sql, bind, ...getArgs) => {\n          const stmt = db.prepare(sql);\n          try {\n            const rc = stmt.bind(bind).step()\n              ? stmt.get(...getArgs)\n              : undefined;\n            stmt.reset();\n            return rc;\n          } finally {\n            stmt.finalize();\n          }\n        };\n\n        const __selectAll = (db, sql, bind, rowMode) =>\n          db.exec({\n            sql,\n            bind,\n            rowMode,\n            returnValue: 'resultRows',\n          });\n\n        DB.checkRc = (db, resultCode) => checkSqlite3Rc(db, resultCode);\n\n        DB.prototype = {\n          isOpen: function () {\n            return !!this.pointer;\n          },\n\n          affirmOpen: function () {\n            return affirmDbOpen(this);\n          },\n\n          close: function () {\n            if (this.pointer) {\n              if (this.onclose && this.onclose.before instanceof Function) {\n                try {\n                  this.onclose.before(this);\n                } catch (e) {}\n              }\n              const pDb = this.pointer;\n              Object.keys(__stmtMap.get(this)).forEach((k, s) => {\n                if (s && s.pointer) {\n                  try {\n                    s.finalize();\n                  } catch (e) {}\n                }\n              });\n              __ptrMap.delete(this);\n              __stmtMap.delete(this);\n              capi.sqlite3_close_v2(pDb);\n              if (this.onclose && this.onclose.after instanceof Function) {\n                try {\n                  this.onclose.after(this);\n                } catch (e) {}\n              }\n              delete this.filename;\n            }\n          },\n\n          changes: function (total = false, sixtyFour = false) {\n            const p = affirmDbOpen(this).pointer;\n            if (total) {\n              return sixtyFour\n                ? capi.sqlite3_total_changes64(p)\n                : capi.sqlite3_total_changes(p);\n            } else {\n              return sixtyFour\n                ? capi.sqlite3_changes64(p)\n                : capi.sqlite3_changes(p);\n            }\n          },\n\n          dbFilename: function (dbName = 'main') {\n            return capi.sqlite3_db_filename(affirmDbOpen(this).pointer, dbName);\n          },\n\n          dbName: function (dbNumber = 0) {\n            return capi.sqlite3_db_name(affirmDbOpen(this).pointer, dbNumber);\n          },\n\n          dbVfsName: function (dbName = 0) {\n            let rc;\n            const pVfs = capi.sqlite3_js_db_vfs(\n              affirmDbOpen(this).pointer,\n              dbName,\n            );\n            if (pVfs) {\n              const v = new capi.sqlite3_vfs(pVfs);\n              try {\n                rc = wasm.cstrToJs(v.$zName);\n              } finally {\n                v.dispose();\n              }\n            }\n            return rc;\n          },\n\n          prepare: function (sql) {\n            affirmDbOpen(this);\n            const stack = wasm.pstack.pointer;\n            let ppStmt, pStmt;\n            try {\n              ppStmt = wasm.pstack.alloc(8);\n              DB.checkRc(\n                this,\n                capi.sqlite3_prepare_v2(this.pointer, sql, -1, ppStmt, null),\n              );\n              pStmt = wasm.peekPtr(ppStmt);\n            } finally {\n              wasm.pstack.restore(stack);\n            }\n            if (!pStmt) toss3('Cannot prepare empty SQL.');\n            const stmt = new Stmt(this, pStmt, BindTypes);\n            __stmtMap.get(this)[pStmt] = stmt;\n            return stmt;\n          },\n\n          exec: function () {\n            affirmDbOpen(this);\n            const arg = parseExecArgs(this, arguments);\n            if (!arg.sql) {\n              return toss3('exec() requires an SQL string.');\n            }\n            const opt = arg.opt;\n            const callback = opt.callback;\n            const resultRows = Array.isArray(opt.resultRows)\n              ? opt.resultRows\n              : undefined;\n            let stmt;\n            let bind = opt.bind;\n            let evalFirstResult = !!(\n              arg.cbArg ||\n              opt.columnNames ||\n              resultRows\n            );\n            const stack = wasm.scopedAllocPush();\n            const saveSql = Array.isArray(opt.saveSql)\n              ? opt.saveSql\n              : undefined;\n            try {\n              const isTA = util.isSQLableTypedArray(arg.sql);\n              let sqlByteLen = isTA\n                ? arg.sql.byteLength\n                : wasm.jstrlen(arg.sql);\n              const ppStmt = wasm.scopedAlloc(\n                2 * wasm.ptrSizeof + (sqlByteLen + 1),\n              );\n              const pzTail = ppStmt + wasm.ptrSizeof;\n              let pSql = pzTail + wasm.ptrSizeof;\n              const pSqlEnd = pSql + sqlByteLen;\n              if (isTA) wasm.heap8().set(arg.sql, pSql);\n              else wasm.jstrcpy(arg.sql, wasm.heap8(), pSql, sqlByteLen, false);\n              wasm.poke(pSql + sqlByteLen, 0);\n              while (pSql && wasm.peek(pSql, 'i8')) {\n                wasm.pokePtr([ppStmt, pzTail], 0);\n                DB.checkRc(\n                  this,\n                  capi.sqlite3_prepare_v3(\n                    this.pointer,\n                    pSql,\n                    sqlByteLen,\n                    0,\n                    ppStmt,\n                    pzTail,\n                  ),\n                );\n                const pStmt = wasm.peekPtr(ppStmt);\n                pSql = wasm.peekPtr(pzTail);\n                sqlByteLen = pSqlEnd - pSql;\n                if (!pStmt) continue;\n                if (saveSql) saveSql.push(capi.sqlite3_sql(pStmt).trim());\n                stmt = new Stmt(this, pStmt, BindTypes);\n                if (bind && stmt.parameterCount) {\n                  stmt.bind(bind);\n                  bind = null;\n                }\n                if (evalFirstResult && stmt.columnCount) {\n                  let gotColNames = Array.isArray(opt.columnNames) ? 0 : 1;\n                  evalFirstResult = false;\n                  if (arg.cbArg || resultRows) {\n                    const cbArgCache = Object.create(null);\n                    for (; stmt.step(); stmt._lockedByExec = false) {\n                      if (0 === gotColNames++) {\n                        stmt.getColumnNames(\n                          (cbArgCache.columnNames = opt.columnNames || []),\n                        );\n                      }\n                      stmt._lockedByExec = true;\n                      const row = arg.cbArg(stmt, cbArgCache);\n                      if (resultRows) resultRows.push(row);\n                      if (callback && false === callback.call(opt, row, stmt)) {\n                        break;\n                      }\n                    }\n                    stmt._lockedByExec = false;\n                  }\n                  if (0 === gotColNames) {\n                    stmt.getColumnNames(opt.columnNames);\n                  }\n                } else {\n                  stmt.step();\n                }\n                stmt.reset().finalize();\n                stmt = null;\n              }\n            } finally {\n              wasm.scopedAllocPop(stack);\n              if (stmt) {\n                delete stmt._lockedByExec;\n                stmt.finalize();\n              }\n            }\n            return arg.returnVal();\n          },\n\n          createFunction: function f(name, xFunc, opt) {\n            const isFunc = (f) => f instanceof Function;\n            switch (arguments.length) {\n              case 1:\n                opt = name;\n                name = opt.name;\n                xFunc = opt.xFunc || 0;\n                break;\n              case 2:\n                if (!isFunc(xFunc)) {\n                  opt = xFunc;\n                  xFunc = opt.xFunc || 0;\n                }\n                break;\n              case 3:\n                break;\n              default:\n                break;\n            }\n            if (!opt) opt = {};\n            if ('string' !== typeof name) {\n              toss3('Invalid arguments: missing function name.');\n            }\n            let xStep = opt.xStep || 0;\n            let xFinal = opt.xFinal || 0;\n            const xValue = opt.xValue || 0;\n            const xInverse = opt.xInverse || 0;\n            let isWindow = undefined;\n            if (isFunc(xFunc)) {\n              isWindow = false;\n              if (isFunc(xStep) || isFunc(xFinal)) {\n                toss3('Ambiguous arguments: scalar or aggregate?');\n              }\n              xStep = xFinal = null;\n            } else if (isFunc(xStep)) {\n              if (!isFunc(xFinal)) {\n                toss3('Missing xFinal() callback for aggregate or window UDF.');\n              }\n              xFunc = null;\n            } else if (isFunc(xFinal)) {\n              toss3('Missing xStep() callback for aggregate or window UDF.');\n            } else {\n              toss3('Missing function-type properties.');\n            }\n            if (false === isWindow) {\n              if (isFunc(xValue) || isFunc(xInverse)) {\n                toss3(\n                  'xValue and xInverse are not permitted for non-window UDFs.',\n                );\n              }\n            } else if (isFunc(xValue)) {\n              if (!isFunc(xInverse)) {\n                toss3('xInverse must be provided if xValue is.');\n              }\n              isWindow = true;\n            } else if (isFunc(xInverse)) {\n              toss3('xValue must be provided if xInverse is.');\n            }\n            const pApp = opt.pApp;\n            if (\n              undefined !== pApp &&\n              null !== pApp &&\n              ('number' !== typeof pApp || !util.isInt32(pApp))\n            ) {\n              toss3(\n                'Invalid value for pApp property. Must be a legal WASM pointer value.',\n              );\n            }\n            const xDestroy = opt.xDestroy || 0;\n            if (xDestroy && !isFunc(xDestroy)) {\n              toss3('xDestroy property must be a function.');\n            }\n            let fFlags = 0;\n            if (getOwnOption(opt, 'deterministic'))\n              fFlags |= capi.SQLITE_DETERMINISTIC;\n            if (getOwnOption(opt, 'directOnly'))\n              fFlags |= capi.SQLITE_DIRECTONLY;\n            if (getOwnOption(opt, 'innocuous')) fFlags |= capi.SQLITE_INNOCUOUS;\n            name = name.toLowerCase();\n            const xArity = xFunc || xStep;\n            const arity = getOwnOption(opt, 'arity');\n            const arityArg =\n              'number' === typeof arity\n                ? arity\n                : xArity.length\n                  ? xArity.length - 1\n                  : 0;\n            let rc;\n            if (isWindow) {\n              rc = capi.sqlite3_create_window_function(\n                this.pointer,\n                name,\n                arityArg,\n                capi.SQLITE_UTF8 | fFlags,\n                pApp || 0,\n                xStep,\n                xFinal,\n                xValue,\n                xInverse,\n                xDestroy,\n              );\n            } else {\n              rc = capi.sqlite3_create_function_v2(\n                this.pointer,\n                name,\n                arityArg,\n                capi.SQLITE_UTF8 | fFlags,\n                pApp || 0,\n                xFunc,\n                xStep,\n                xFinal,\n                xDestroy,\n              );\n            }\n            DB.checkRc(this, rc);\n            return this;\n          },\n\n          selectValue: function (sql, bind, asType) {\n            return __selectFirstRow(this, sql, bind, 0, asType);\n          },\n\n          selectValues: function (sql, bind, asType) {\n            const stmt = this.prepare(sql),\n              rc = [];\n            try {\n              stmt.bind(bind);\n              while (stmt.step()) rc.push(stmt.get(0, asType));\n              stmt.reset();\n            } finally {\n              stmt.finalize();\n            }\n            return rc;\n          },\n\n          selectArray: function (sql, bind) {\n            return __selectFirstRow(this, sql, bind, []);\n          },\n\n          selectObject: function (sql, bind) {\n            return __selectFirstRow(this, sql, bind, {});\n          },\n\n          selectArrays: function (sql, bind) {\n            return __selectAll(this, sql, bind, 'array');\n          },\n\n          selectObjects: function (sql, bind) {\n            return __selectAll(this, sql, bind, 'object');\n          },\n\n          openStatementCount: function () {\n            return this.pointer ? Object.keys(__stmtMap.get(this)).length : 0;\n          },\n\n          transaction: function (callback) {\n            let opener = 'BEGIN';\n            if (arguments.length > 1) {\n              if (/[^a-zA-Z]/.test(arguments[0])) {\n                toss3(\n                  capi.SQLITE_MISUSE,\n                  'Invalid argument for BEGIN qualifier.',\n                );\n              }\n              opener += ' ' + arguments[0];\n              callback = arguments[1];\n            }\n            affirmDbOpen(this).exec(opener);\n            try {\n              const rc = callback(this);\n              this.exec('COMMIT');\n              return rc;\n            } catch (e) {\n              this.exec('ROLLBACK');\n              throw e;\n            }\n          },\n\n          savepoint: function (callback) {\n            affirmDbOpen(this).exec('SAVEPOINT oo1');\n            try {\n              const rc = callback(this);\n              this.exec('RELEASE oo1');\n              return rc;\n            } catch (e) {\n              this.exec('ROLLBACK to SAVEPOINT oo1; RELEASE SAVEPOINT oo1');\n              throw e;\n            }\n          },\n\n          checkRc: function (resultCode) {\n            return checkSqlite3Rc(this, resultCode);\n          },\n        };\n\n        const affirmStmtOpen = function (stmt) {\n          if (!stmt.pointer) toss3('Stmt has been closed.');\n          return stmt;\n        };\n\n        const isSupportedBindType = function (v) {\n          let t = BindTypes[null === v || undefined === v ? 'null' : typeof v];\n          switch (t) {\n            case BindTypes.boolean:\n            case BindTypes.null:\n            case BindTypes.number:\n            case BindTypes.string:\n              return t;\n            case BindTypes.bigint:\n              if (wasm.bigIntEnabled) return t;\n\n            default:\n              return util.isBindableTypedArray(v) ? BindTypes.blob : undefined;\n          }\n        };\n\n        const affirmSupportedBindType = function (v) {\n          return (\n            isSupportedBindType(v) ||\n            toss3('Unsupported bind() argument type:', typeof v)\n          );\n        };\n\n        const affirmParamIndex = function (stmt, key) {\n          const n =\n            'number' === typeof key\n              ? key\n              : capi.sqlite3_bind_parameter_index(stmt.pointer, key);\n          if (0 === n || !util.isInt32(n)) {\n            toss3('Invalid bind() parameter name: ' + key);\n          } else if (n < 1 || n > stmt.parameterCount)\n            toss3('Bind index', key, 'is out of range.');\n          return n;\n        };\n\n        const affirmNotLockedByExec = function (stmt, currentOpName) {\n          if (stmt._lockedByExec) {\n            toss3(\n              'Operation is illegal when statement is locked:',\n              currentOpName,\n            );\n          }\n          return stmt;\n        };\n\n        const bindOne = function f(stmt, ndx, bindType, val) {\n          affirmNotLockedByExec(affirmStmtOpen(stmt), 'bind()');\n          if (!f._) {\n            f._tooBigInt = (v) =>\n              toss3(\n                'BigInt value is too big to store without precision loss:',\n                v,\n              );\n            f._ = {\n              string: function (stmt, ndx, val, asBlob) {\n                const [pStr, n] = wasm.allocCString(val, true);\n                const f = asBlob\n                  ? capi.sqlite3_bind_blob\n                  : capi.sqlite3_bind_text;\n                return f(stmt.pointer, ndx, pStr, n, capi.SQLITE_WASM_DEALLOC);\n              },\n            };\n          }\n          affirmSupportedBindType(val);\n          ndx = affirmParamIndex(stmt, ndx);\n          let rc = 0;\n          switch (\n            null === val || undefined === val ? BindTypes.null : bindType\n          ) {\n            case BindTypes.null:\n              rc = capi.sqlite3_bind_null(stmt.pointer, ndx);\n              break;\n            case BindTypes.string:\n              rc = f._.string(stmt, ndx, val, false);\n              break;\n            case BindTypes.number: {\n              let m;\n              if (util.isInt32(val)) m = capi.sqlite3_bind_int;\n              else if ('bigint' === typeof val) {\n                if (!util.bigIntFits64(val)) {\n                  f._tooBigInt(val);\n                } else if (wasm.bigIntEnabled) {\n                  m = capi.sqlite3_bind_int64;\n                } else if (util.bigIntFitsDouble(val)) {\n                  val = Number(val);\n                  m = capi.sqlite3_bind_double;\n                } else {\n                  f._tooBigInt(val);\n                }\n              } else {\n                val = Number(val);\n                if (wasm.bigIntEnabled && Number.isInteger(val)) {\n                  m = capi.sqlite3_bind_int64;\n                } else {\n                  m = capi.sqlite3_bind_double;\n                }\n              }\n              rc = m(stmt.pointer, ndx, val);\n              break;\n            }\n            case BindTypes.boolean:\n              rc = capi.sqlite3_bind_int(stmt.pointer, ndx, val ? 1 : 0);\n              break;\n            case BindTypes.blob: {\n              if ('string' === typeof val) {\n                rc = f._.string(stmt, ndx, val, true);\n                break;\n              } else if (val instanceof ArrayBuffer) {\n                val = new Uint8Array(val);\n              } else if (!util.isBindableTypedArray(val)) {\n                toss3(\n                  'Binding a value as a blob requires',\n                  'that it be a string, Uint8Array, Int8Array, or ArrayBuffer.',\n                );\n              }\n              const pBlob = wasm.alloc(val.byteLength || 1);\n              wasm.heap8().set(val.byteLength ? val : [0], pBlob);\n              rc = capi.sqlite3_bind_blob(\n                stmt.pointer,\n                ndx,\n                pBlob,\n                val.byteLength,\n                capi.SQLITE_WASM_DEALLOC,\n              );\n              break;\n            }\n            default:\n              sqlite3.config.warn('Unsupported bind() argument type:', val);\n              toss3('Unsupported bind() argument type: ' + typeof val);\n          }\n          if (rc) DB.checkRc(stmt.db.pointer, rc);\n          stmt._mayGet = false;\n          return stmt;\n        };\n\n        Stmt.prototype = {\n          finalize: function () {\n            if (this.pointer) {\n              affirmNotLockedByExec(this, 'finalize()');\n              const rc = capi.sqlite3_finalize(this.pointer);\n              delete __stmtMap.get(this.db)[this.pointer];\n              __ptrMap.delete(this);\n              delete this._mayGet;\n              delete this.parameterCount;\n              delete this._lockedByExec;\n              delete this.db;\n              return rc;\n            }\n          },\n\n          clearBindings: function () {\n            affirmNotLockedByExec(affirmStmtOpen(this), 'clearBindings()');\n            capi.sqlite3_clear_bindings(this.pointer);\n            this._mayGet = false;\n            return this;\n          },\n\n          reset: function (alsoClearBinds) {\n            affirmNotLockedByExec(this, 'reset()');\n            if (alsoClearBinds) this.clearBindings();\n            const rc = capi.sqlite3_reset(affirmStmtOpen(this).pointer);\n            this._mayGet = false;\n            checkSqlite3Rc(this.db, rc);\n            return this;\n          },\n\n          bind: function () {\n            affirmStmtOpen(this);\n            let ndx, arg;\n            switch (arguments.length) {\n              case 1:\n                ndx = 1;\n                arg = arguments[0];\n                break;\n              case 2:\n                ndx = arguments[0];\n                arg = arguments[1];\n                break;\n              default:\n                toss3('Invalid bind() arguments.');\n            }\n            if (undefined === arg) {\n              return this;\n            } else if (!this.parameterCount) {\n              toss3('This statement has no bindable parameters.');\n            }\n            this._mayGet = false;\n            if (null === arg) {\n              return bindOne(this, ndx, BindTypes.null, arg);\n            } else if (Array.isArray(arg)) {\n              if (1 !== arguments.length) {\n                toss3(\n                  'When binding an array, an index argument is not permitted.',\n                );\n              }\n              arg.forEach((v, i) =>\n                bindOne(this, i + 1, affirmSupportedBindType(v), v),\n              );\n              return this;\n            } else if (arg instanceof ArrayBuffer) {\n              arg = new Uint8Array(arg);\n            }\n            if ('object' === typeof arg && !util.isBindableTypedArray(arg)) {\n              if (1 !== arguments.length) {\n                toss3(\n                  'When binding an object, an index argument is not permitted.',\n                );\n              }\n              Object.keys(arg).forEach((k) =>\n                bindOne(this, k, affirmSupportedBindType(arg[k]), arg[k]),\n              );\n              return this;\n            } else {\n              return bindOne(this, ndx, affirmSupportedBindType(arg), arg);\n            }\n            toss3('Should not reach this point.');\n          },\n\n          bindAsBlob: function (ndx, arg) {\n            affirmStmtOpen(this);\n            if (1 === arguments.length) {\n              arg = ndx;\n              ndx = 1;\n            }\n            const t = affirmSupportedBindType(arg);\n            if (\n              BindTypes.string !== t &&\n              BindTypes.blob !== t &&\n              BindTypes.null !== t\n            ) {\n              toss3('Invalid value type for bindAsBlob()');\n            }\n            return bindOne(this, ndx, BindTypes.blob, arg);\n          },\n\n          step: function () {\n            affirmNotLockedByExec(this, 'step()');\n            const rc = capi.sqlite3_step(affirmStmtOpen(this).pointer);\n            switch (rc) {\n              case capi.SQLITE_DONE:\n                return (this._mayGet = false);\n              case capi.SQLITE_ROW:\n                return (this._mayGet = true);\n              default:\n                this._mayGet = false;\n                sqlite3.config.warn(\n                  'sqlite3_step() rc=',\n                  rc,\n                  capi.sqlite3_js_rc_str(rc),\n                  'SQL =',\n                  capi.sqlite3_sql(this.pointer),\n                );\n                DB.checkRc(this.db.pointer, rc);\n            }\n          },\n\n          stepReset: function () {\n            this.step();\n            return this.reset();\n          },\n\n          stepFinalize: function () {\n            try {\n              const rc = this.step();\n              this.reset();\n              return rc;\n            } finally {\n              try {\n                this.finalize();\n              } catch (e) {}\n            }\n          },\n\n          get: function (ndx, asType) {\n            if (!affirmStmtOpen(this)._mayGet) {\n              toss3('Stmt.step() has not (recently) returned true.');\n            }\n            if (Array.isArray(ndx)) {\n              let i = 0;\n              const n = this.columnCount;\n              while (i < n) {\n                ndx[i] = this.get(i++);\n              }\n              return ndx;\n            } else if (ndx && 'object' === typeof ndx) {\n              let i = 0;\n              const n = this.columnCount;\n              while (i < n) {\n                ndx[capi.sqlite3_column_name(this.pointer, i)] = this.get(i++);\n              }\n              return ndx;\n            }\n            affirmColIndex(this, ndx);\n            switch (\n              undefined === asType\n                ? capi.sqlite3_column_type(this.pointer, ndx)\n                : asType\n            ) {\n              case capi.SQLITE_NULL:\n                return null;\n              case capi.SQLITE_INTEGER: {\n                if (wasm.bigIntEnabled) {\n                  const rc = capi.sqlite3_column_int64(this.pointer, ndx);\n                  if (\n                    rc >= Number.MIN_SAFE_INTEGER &&\n                    rc <= Number.MAX_SAFE_INTEGER\n                  ) {\n                    return Number(rc).valueOf();\n                  }\n                  return rc;\n                } else {\n                  const rc = capi.sqlite3_column_double(this.pointer, ndx);\n                  if (\n                    rc > Number.MAX_SAFE_INTEGER ||\n                    rc < Number.MIN_SAFE_INTEGER\n                  ) {\n                    toss3(\n                      'Integer is out of range for JS integer range: ' + rc,\n                    );\n                  }\n\n                  return util.isInt32(rc) ? rc | 0 : rc;\n                }\n              }\n              case capi.SQLITE_FLOAT:\n                return capi.sqlite3_column_double(this.pointer, ndx);\n              case capi.SQLITE_TEXT:\n                return capi.sqlite3_column_text(this.pointer, ndx);\n              case capi.SQLITE_BLOB: {\n                const n = capi.sqlite3_column_bytes(this.pointer, ndx),\n                  ptr = capi.sqlite3_column_blob(this.pointer, ndx),\n                  rc = new Uint8Array(n);\n\n                if (n) rc.set(wasm.heap8u().slice(ptr, ptr + n), 0);\n\n                if (n && this.db._blobXfer instanceof Array) {\n                  this.db._blobXfer.push(rc.buffer);\n                }\n                return rc;\n              }\n              default:\n                toss3(\n                  \"Don't know how to translate\",\n                  'type of result column #' + ndx + '.',\n                );\n            }\n            toss3('Not reached.');\n          },\n\n          getInt: function (ndx) {\n            return this.get(ndx, capi.SQLITE_INTEGER);\n          },\n\n          getFloat: function (ndx) {\n            return this.get(ndx, capi.SQLITE_FLOAT);\n          },\n\n          getString: function (ndx) {\n            return this.get(ndx, capi.SQLITE_TEXT);\n          },\n\n          getBlob: function (ndx) {\n            return this.get(ndx, capi.SQLITE_BLOB);\n          },\n\n          getJSON: function (ndx) {\n            const s = this.get(ndx, capi.SQLITE_STRING);\n            return null === s ? s : JSON.parse(s);\n          },\n\n          getColumnName: function (ndx) {\n            return capi.sqlite3_column_name(\n              affirmColIndex(affirmStmtOpen(this), ndx).pointer,\n              ndx,\n            );\n          },\n\n          getColumnNames: function (tgt = []) {\n            affirmColIndex(affirmStmtOpen(this), 0);\n            const n = this.columnCount;\n            for (let i = 0; i < n; ++i) {\n              tgt.push(capi.sqlite3_column_name(this.pointer, i));\n            }\n            return tgt;\n          },\n\n          getParamIndex: function (name) {\n            return affirmStmtOpen(this).parameterCount\n              ? capi.sqlite3_bind_parameter_index(this.pointer, name)\n              : undefined;\n          },\n\n          getParamName: function (ndx) {\n            return affirmStmtOpen(this).parameterCount\n              ? capi.sqlite3_bind_parameter_name(this.pointer, ndx)\n              : undefined;\n          },\n\n          isBusy: function () {\n            return 0 !== capi.sqlite3_stmt_busy(affirmStmtOpen(this));\n          },\n\n          isReadOnly: function () {\n            return 0 !== capi.sqlite3_stmt_readonly(affirmStmtOpen(this));\n          },\n        };\n\n        {\n          const prop = {\n            enumerable: true,\n            get: function () {\n              return __ptrMap.get(this);\n            },\n            set: () => toss3('The pointer property is read-only.'),\n          };\n          Object.defineProperty(Stmt.prototype, 'pointer', prop);\n          Object.defineProperty(DB.prototype, 'pointer', prop);\n        }\n\n        Object.defineProperty(Stmt.prototype, 'columnCount', {\n          enumerable: false,\n          get: function () {\n            return capi.sqlite3_column_count(this.pointer);\n          },\n          set: () => toss3('The columnCount property is read-only.'),\n        });\n\n        sqlite3.oo1 = {\n          DB,\n          Stmt,\n        };\n\n        if (util.isUIThread()) {\n          sqlite3.oo1.JsStorageDb = function (storageName = 'session') {\n            const opt = dbCtorHelper.normalizeArgs(...arguments);\n            storageName = opt.filename;\n            if ('session' !== storageName && 'local' !== storageName) {\n              toss3(\"JsStorageDb db name must be one of 'session' or 'local'.\");\n            }\n            opt.vfs = 'kvvfs';\n            dbCtorHelper.call(this, opt);\n          };\n          const jdb = sqlite3.oo1.JsStorageDb;\n          jdb.prototype = Object.create(DB.prototype);\n\n          jdb.clearStorage = capi.sqlite3_js_kvvfs_clear;\n\n          jdb.prototype.clearStorage = function () {\n            return jdb.clearStorage(affirmDbOpen(this).filename);\n          };\n\n          jdb.storageSize = capi.sqlite3_js_kvvfs_size;\n\n          jdb.prototype.storageSize = function () {\n            return jdb.storageSize(affirmDbOpen(this).filename);\n          };\n        }\n      });\n\n      globalThis.sqlite3ApiBootstrap.initializers.push(function (sqlite3) {\n        const util = sqlite3.util;\n        sqlite3.initWorker1API = function () {\n          'use strict';\n          const toss = (...args) => {\n            throw new Error(args.join(' '));\n          };\n          if (!(globalThis.WorkerGlobalScope instanceof Function)) {\n            toss('initWorker1API() must be run from a Worker thread.');\n          }\n          const sqlite3 = this.sqlite3 || toss('Missing this.sqlite3 object.');\n          const DB = sqlite3.oo1.DB;\n\n          const getDbId = function (db) {\n            let id = wState.idMap.get(db);\n            if (id) return id;\n            id = 'db#' + ++wState.idSeq + '@' + db.pointer;\n\n            wState.idMap.set(db, id);\n            return id;\n          };\n\n          const wState = {\n            dbList: [],\n\n            idSeq: 0,\n\n            idMap: new WeakMap(),\n\n            xfer: [],\n            open: function (opt) {\n              const db = new DB(opt);\n              this.dbs[getDbId(db)] = db;\n              if (this.dbList.indexOf(db) < 0) this.dbList.push(db);\n              return db;\n            },\n            close: function (db, alsoUnlink) {\n              if (db) {\n                delete this.dbs[getDbId(db)];\n                const filename = db.filename;\n                const pVfs = util.sqlite3__wasm_db_vfs(db.pointer, 0);\n                db.close();\n                const ddNdx = this.dbList.indexOf(db);\n                if (ddNdx >= 0) this.dbList.splice(ddNdx, 1);\n                if (alsoUnlink && filename && pVfs) {\n                  util.sqlite3__wasm_vfs_unlink(pVfs, filename);\n                }\n              }\n            },\n\n            post: function (msg, xferList) {\n              if (xferList && xferList.length) {\n                globalThis.postMessage(msg, Array.from(xferList));\n                xferList.length = 0;\n              } else {\n                globalThis.postMessage(msg);\n              }\n            },\n\n            dbs: Object.create(null),\n\n            getDb: function (id, require = true) {\n              return (\n                this.dbs[id] ||\n                (require ? toss('Unknown (or closed) DB ID:', id) : undefined)\n              );\n            },\n          };\n\n          const affirmDbOpen = function (db = wState.dbList[0]) {\n            return db && db.pointer ? db : toss('DB is not opened.');\n          };\n\n          const getMsgDb = function (msgData, affirmExists = true) {\n            const db = wState.getDb(msgData.dbId, false) || wState.dbList[0];\n            return affirmExists ? affirmDbOpen(db) : db;\n          };\n\n          const getDefaultDbId = function () {\n            return wState.dbList[0] && getDbId(wState.dbList[0]);\n          };\n\n          const isSpecialDbFilename = (n) => {\n            return '' === n || ':' === n[0];\n          };\n\n          const wMsgHandler = {\n            open: function (ev) {\n              const oargs = Object.create(null),\n                args = ev.args || Object.create(null);\n              if (args.simulateError) {\n                toss('Throwing because of simulateError flag.');\n              }\n              const rc = Object.create(null);\n              oargs.vfs = args.vfs;\n              oargs.filename = args.filename || '';\n              const db = wState.open(oargs);\n              rc.filename = db.filename;\n              rc.persistent = !!sqlite3.capi.sqlite3_js_db_uses_vfs(\n                db.pointer,\n                'opfs',\n              );\n              rc.dbId = getDbId(db);\n              rc.vfs = db.dbVfsName();\n              return rc;\n            },\n\n            close: function (ev) {\n              const db = getMsgDb(ev, false);\n              const response = {\n                filename: db && db.filename,\n              };\n              if (db) {\n                const doUnlink =\n                  ev.args && 'object' === typeof ev.args\n                    ? !!ev.args.unlink\n                    : false;\n                wState.close(db, doUnlink);\n              }\n              return response;\n            },\n\n            exec: function (ev) {\n              const rc =\n                'string' === typeof ev.args\n                  ? { sql: ev.args }\n                  : ev.args || Object.create(null);\n              if ('stmt' === rc.rowMode) {\n                toss(\n                  \"Invalid rowMode for 'exec': stmt mode\",\n                  'does not work in the Worker API.',\n                );\n              } else if (!rc.sql) {\n                toss(\"'exec' requires input SQL.\");\n              }\n              const db = getMsgDb(ev);\n              if (rc.callback || Array.isArray(rc.resultRows)) {\n                db._blobXfer = wState.xfer;\n              }\n              const theCallback = rc.callback;\n              let rowNumber = 0;\n              const hadColNames = !!rc.columnNames;\n              if ('string' === typeof theCallback) {\n                if (!hadColNames) rc.columnNames = [];\n\n                rc.callback = function (row, stmt) {\n                  wState.post(\n                    {\n                      type: theCallback,\n                      columnNames: rc.columnNames,\n                      rowNumber: ++rowNumber,\n                      row: row,\n                    },\n                    wState.xfer,\n                  );\n                };\n              }\n              try {\n                const changeCount = !!rc.countChanges\n                  ? db.changes(true, 64 === rc.countChanges)\n                  : undefined;\n                db.exec(rc);\n                if (undefined !== changeCount) {\n                  rc.changeCount =\n                    db.changes(true, 64 === rc.countChanges) - changeCount;\n                }\n                if (rc.callback instanceof Function) {\n                  rc.callback = theCallback;\n\n                  wState.post({\n                    type: theCallback,\n                    columnNames: rc.columnNames,\n                    rowNumber: null,\n                    row: undefined,\n                  });\n                }\n              } finally {\n                delete db._blobXfer;\n                if (rc.callback) rc.callback = theCallback;\n              }\n              return rc;\n            },\n\n            'config-get': function () {\n              const rc = Object.create(null),\n                src = sqlite3.config;\n              ['bigIntEnabled'].forEach(function (k) {\n                if (Object.getOwnPropertyDescriptor(src, k)) rc[k] = src[k];\n              });\n              rc.version = sqlite3.version;\n              rc.vfsList = sqlite3.capi.sqlite3_js_vfs_list();\n              return rc;\n            },\n\n            export: function (ev) {\n              const db = getMsgDb(ev);\n              const response = {\n                byteArray: sqlite3.capi.sqlite3_js_db_export(db.pointer),\n                filename: db.filename,\n                mimetype: 'application/x-sqlite3',\n              };\n              wState.xfer.push(response.byteArray.buffer);\n              return response;\n            },\n\n            toss: function (ev) {\n              toss('Testing worker exception');\n            },\n          };\n\n          globalThis.onmessage = async function (ev) {\n            ev = ev.data;\n            let result,\n              dbId = ev.dbId,\n              evType = ev.type;\n            const arrivalTime = performance.now();\n            try {\n              if (\n                wMsgHandler.hasOwnProperty(evType) &&\n                wMsgHandler[evType] instanceof Function\n              ) {\n                result = await wMsgHandler[evType](ev);\n              } else {\n                toss('Unknown db worker message type:', ev.type);\n              }\n            } catch (err) {\n              evType = 'error';\n              result = {\n                operation: ev.type,\n                message: err.message,\n                errorClass: err.name,\n                input: ev,\n              };\n              if (err.stack) {\n                result.stack =\n                  'string' === typeof err.stack\n                    ? err.stack.split(/\\n\\s*/)\n                    : err.stack;\n              }\n              if (0)\n                sqlite3.config.warn(\n                  'Worker is propagating an exception to main thread.',\n                  'Reporting it _here_ for the stack trace:',\n                  err,\n                  result,\n                );\n            }\n            if (!dbId) {\n              dbId = result.dbId || getDefaultDbId();\n            }\n\n            wState.post(\n              {\n                type: evType,\n                dbId: dbId,\n                messageId: ev.messageId,\n                workerReceivedTime: arrivalTime,\n                workerRespondTime: performance.now(),\n                departureTime: ev.departureTime,\n\n                result: result,\n              },\n              wState.xfer,\n            );\n          };\n          globalThis.postMessage({\n            type: 'sqlite3-api',\n            result: 'worker1-ready',\n          });\n        }.bind({ sqlite3 });\n      });\n\n      ('use strict');\n      globalThis.sqlite3ApiBootstrap.initializers.push(function (sqlite3) {\n        const wasm = sqlite3.wasm,\n          capi = sqlite3.capi,\n          toss = sqlite3.util.toss3;\n        const vfs = Object.create(null);\n        sqlite3.vfs = vfs;\n\n        capi.sqlite3_vfs.prototype.registerVfs = function (asDefault = false) {\n          if (!(this instanceof sqlite3.capi.sqlite3_vfs)) {\n            toss('Expecting a sqlite3_vfs-type argument.');\n          }\n          const rc = capi.sqlite3_vfs_register(this, asDefault ? 1 : 0);\n          if (rc) {\n            toss('sqlite3_vfs_register(', this, ') failed with rc', rc);\n          }\n          if (this.pointer !== capi.sqlite3_vfs_find(this.$zName)) {\n            toss(\n              'BUG: sqlite3_vfs_find(vfs.$zName) failed for just-installed VFS',\n              this,\n            );\n          }\n          return this;\n        };\n\n        vfs.installVfs = function (opt) {\n          let count = 0;\n          const propList = ['io', 'vfs'];\n          for (const key of propList) {\n            const o = opt[key];\n            if (o) {\n              ++count;\n              o.struct.installMethods(o.methods, !!o.applyArgcCheck);\n              if ('vfs' === key) {\n                if (!o.struct.$zName && 'string' === typeof o.name) {\n                  o.struct.addOnDispose(\n                    (o.struct.$zName = wasm.allocCString(o.name)),\n                  );\n                }\n                o.struct.registerVfs(!!o.asDefault);\n              }\n            }\n          }\n          if (!count)\n            toss(\n              'Misuse: installVfs() options object requires at least',\n              'one of:',\n              propList,\n            );\n          return this;\n        };\n      });\n\n      ('use strict');\n      globalThis.sqlite3ApiBootstrap.initializers.push(function (sqlite3) {\n        if (!sqlite3.wasm.exports.sqlite3_declare_vtab) {\n          return;\n        }\n        const wasm = sqlite3.wasm,\n          capi = sqlite3.capi,\n          toss = sqlite3.util.toss3;\n        const vtab = Object.create(null);\n        sqlite3.vtab = vtab;\n\n        const sii = capi.sqlite3_index_info;\n\n        sii.prototype.nthConstraint = function (n, asPtr = false) {\n          if (n < 0 || n >= this.$nConstraint) return false;\n          const ptr =\n            this.$aConstraint +\n            sii.sqlite3_index_constraint.structInfo.sizeof * n;\n          return asPtr ? ptr : new sii.sqlite3_index_constraint(ptr);\n        };\n\n        sii.prototype.nthConstraintUsage = function (n, asPtr = false) {\n          if (n < 0 || n >= this.$nConstraint) return false;\n          const ptr =\n            this.$aConstraintUsage +\n            sii.sqlite3_index_constraint_usage.structInfo.sizeof * n;\n          return asPtr ? ptr : new sii.sqlite3_index_constraint_usage(ptr);\n        };\n\n        sii.prototype.nthOrderBy = function (n, asPtr = false) {\n          if (n < 0 || n >= this.$nOrderBy) return false;\n          const ptr =\n            this.$aOrderBy + sii.sqlite3_index_orderby.structInfo.sizeof * n;\n          return asPtr ? ptr : new sii.sqlite3_index_orderby(ptr);\n        };\n\n        const __xWrapFactory = function (methodName, StructType) {\n          return function (ptr, removeMapping = false) {\n            if (0 === arguments.length) ptr = new StructType();\n            if (ptr instanceof StructType) {\n              this.set(ptr.pointer, ptr);\n              return ptr;\n            } else if (!wasm.isPtr(ptr)) {\n              sqlite3.SQLite3Error.toss(\n                'Invalid argument to',\n                methodName + '()',\n              );\n            }\n            let rc = this.get(ptr);\n            if (removeMapping) this.delete(ptr);\n            return rc;\n          }.bind(new Map());\n        };\n\n        const StructPtrMapper = function (name, StructType) {\n          const __xWrap = __xWrapFactory(name, StructType);\n\n          return Object.assign(Object.create(null), {\n            StructType,\n\n            create: (ppOut) => {\n              const rc = __xWrap();\n              wasm.pokePtr(ppOut, rc.pointer);\n              return rc;\n            },\n\n            get: (pCObj) => __xWrap(pCObj),\n\n            unget: (pCObj) => __xWrap(pCObj, true),\n\n            dispose: (pCObj) => {\n              const o = __xWrap(pCObj, true);\n              if (o) o.dispose();\n            },\n          });\n        };\n\n        vtab.xVtab = StructPtrMapper('xVtab', capi.sqlite3_vtab);\n\n        vtab.xCursor = StructPtrMapper('xCursor', capi.sqlite3_vtab_cursor);\n\n        vtab.xIndexInfo = (pIdxInfo) => new capi.sqlite3_index_info(pIdxInfo);\n\n        vtab.xError = function f(methodName, err, defaultRc) {\n          if (f.errorReporter instanceof Function) {\n            try {\n              f.errorReporter(\n                'sqlite3_module::' + methodName + '(): ' + err.message,\n              );\n            } catch (e) {}\n          }\n          let rc;\n          if (err instanceof sqlite3.WasmAllocError) rc = capi.SQLITE_NOMEM;\n          else if (arguments.length > 2) rc = defaultRc;\n          else if (err instanceof sqlite3.SQLite3Error) rc = err.resultCode;\n          return rc || capi.SQLITE_ERROR;\n        };\n        vtab.xError.errorReporter = 1 ? console.error.bind(console) : false;\n\n        vtab.xRowid = (ppRowid64, value) => wasm.poke(ppRowid64, value, 'i64');\n\n        vtab.setupModule = function (opt) {\n          let createdMod = false;\n          const mod =\n            this instanceof capi.sqlite3_module\n              ? this\n              : opt.struct || (createdMod = new capi.sqlite3_module());\n          try {\n            const methods = opt.methods || toss(\"Missing 'methods' object.\");\n            for (const e of Object.entries({\n              xConnect: 'xCreate',\n              xDisconnect: 'xDestroy',\n            })) {\n              const k = e[0],\n                v = e[1];\n              if (true === methods[k]) methods[k] = methods[v];\n              else if (true === methods[v]) methods[v] = methods[k];\n            }\n            if (opt.catchExceptions) {\n              const fwrap = function (methodName, func) {\n                if (['xConnect', 'xCreate'].indexOf(methodName) >= 0) {\n                  return function (pDb, pAux, argc, argv, ppVtab, pzErr) {\n                    try {\n                      return func(...arguments) || 0;\n                    } catch (e) {\n                      if (!(e instanceof sqlite3.WasmAllocError)) {\n                        wasm.dealloc(wasm.peekPtr(pzErr));\n                        wasm.pokePtr(pzErr, wasm.allocCString(e.message));\n                      }\n                      return vtab.xError(methodName, e);\n                    }\n                  };\n                } else {\n                  return function (...args) {\n                    try {\n                      return func(...args) || 0;\n                    } catch (e) {\n                      return vtab.xError(methodName, e);\n                    }\n                  };\n                }\n              };\n              const mnames = [\n                'xCreate',\n                'xConnect',\n                'xBestIndex',\n                'xDisconnect',\n                'xDestroy',\n                'xOpen',\n                'xClose',\n                'xFilter',\n                'xNext',\n                'xEof',\n                'xColumn',\n                'xRowid',\n                'xUpdate',\n                'xBegin',\n                'xSync',\n                'xCommit',\n                'xRollback',\n                'xFindFunction',\n                'xRename',\n                'xSavepoint',\n                'xRelease',\n                'xRollbackTo',\n                'xShadowName',\n              ];\n              const remethods = Object.create(null);\n              for (const k of mnames) {\n                const m = methods[k];\n                if (!(m instanceof Function)) continue;\n                else if ('xConnect' === k && methods.xCreate === m) {\n                  remethods[k] = methods.xCreate;\n                } else if ('xCreate' === k && methods.xConnect === m) {\n                  remethods[k] = methods.xConnect;\n                } else {\n                  remethods[k] = fwrap(k, m);\n                }\n              }\n              mod.installMethods(remethods, false);\n            } else {\n              mod.installMethods(methods, !!opt.applyArgcCheck);\n            }\n            if (0 === mod.$iVersion) {\n              let v;\n              if ('number' === typeof opt.iVersion) v = opt.iVersion;\n              else if (mod.$xShadowName) v = 3;\n              else if (mod.$xSavePoint || mod.$xRelease || mod.$xRollbackTo)\n                v = 2;\n              else v = 1;\n              mod.$iVersion = v;\n            }\n          } catch (e) {\n            if (createdMod) createdMod.dispose();\n            throw e;\n          }\n          return mod;\n        };\n\n        capi.sqlite3_module.prototype.setupModule = function (opt) {\n          return vtab.setupModule.call(this, opt);\n        };\n      });\n\n      ('use strict');\n      globalThis.sqlite3ApiBootstrap.initializers.push(function (sqlite3) {\n        const installOpfsVfs = function callee(options) {\n          if (!globalThis.SharedArrayBuffer || !globalThis.Atomics) {\n            return Promise.reject(\n              new Error(\n                'Cannot install OPFS: Missing SharedArrayBuffer and/or Atomics. ' +\n                  'The server must emit the COOP/COEP response headers to enable those. ' +\n                  'See https://sqlite.org/wasm/doc/trunk/persistence.md#coop-coep',\n              ),\n            );\n          } else if ('undefined' === typeof WorkerGlobalScope) {\n            return Promise.reject(\n              new Error(\n                'The OPFS sqlite3_vfs cannot run in the main thread ' +\n                  'because it requires Atomics.wait().',\n              ),\n            );\n          } else if (\n            !globalThis.FileSystemHandle ||\n            !globalThis.FileSystemDirectoryHandle ||\n            !globalThis.FileSystemFileHandle ||\n            !globalThis.FileSystemFileHandle.prototype.createSyncAccessHandle ||\n            !navigator?.storage?.getDirectory\n          ) {\n            return Promise.reject(new Error('Missing required OPFS APIs.'));\n          }\n          if (!options || 'object' !== typeof options) {\n            options = Object.create(null);\n          }\n          const urlParams = new URL(globalThis.location.href).searchParams;\n          if (urlParams.has('opfs-disable')) {\n            return Promise.resolve(sqlite3);\n          }\n          if (undefined === options.verbose) {\n            options.verbose = urlParams.has('opfs-verbose')\n              ? +urlParams.get('opfs-verbose') || 2\n              : 1;\n          }\n          if (undefined === options.sanityChecks) {\n            options.sanityChecks = urlParams.has('opfs-sanity-check');\n          }\n          if (undefined === options.proxyUri) {\n            options.proxyUri = callee.defaultProxyUri;\n          }\n\n          if ('function' === typeof options.proxyUri) {\n            options.proxyUri = options.proxyUri();\n          }\n          const thePromise = new Promise(function (\n            promiseResolve_,\n            promiseReject_,\n          ) {\n            const loggers = [\n              sqlite3.config.error,\n              sqlite3.config.warn,\n              sqlite3.config.log,\n            ];\n            const logImpl = (level, ...args) => {\n              if (options.verbose > level)\n                loggers[level]('OPFS syncer:', ...args);\n            };\n            const log = (...args) => logImpl(2, ...args);\n            const warn = (...args) => logImpl(1, ...args);\n            const error = (...args) => logImpl(0, ...args);\n            const toss = sqlite3.util.toss;\n            const capi = sqlite3.capi;\n            const util = sqlite3.util;\n            const wasm = sqlite3.wasm;\n            const sqlite3_vfs = capi.sqlite3_vfs;\n            const sqlite3_file = capi.sqlite3_file;\n            const sqlite3_io_methods = capi.sqlite3_io_methods;\n\n            const opfsUtil = Object.create(null);\n\n            const thisThreadHasOPFS = () => {\n              return (\n                globalThis.FileSystemHandle &&\n                globalThis.FileSystemDirectoryHandle &&\n                globalThis.FileSystemFileHandle &&\n                globalThis.FileSystemFileHandle.prototype\n                  .createSyncAccessHandle &&\n                navigator?.storage?.getDirectory\n              );\n            };\n\n            opfsUtil.metrics = {\n              dump: function () {\n                let k,\n                  n = 0,\n                  t = 0,\n                  w = 0;\n                for (k in state.opIds) {\n                  const m = metrics[k];\n                  n += m.count;\n                  t += m.time;\n                  w += m.wait;\n                  m.avgTime = m.count && m.time ? m.time / m.count : 0;\n                  m.avgWait = m.count && m.wait ? m.wait / m.count : 0;\n                }\n                sqlite3.config.log(\n                  globalThis.location.href,\n                  'metrics for',\n                  globalThis.location.href,\n                  ':',\n                  metrics,\n                  '\\nTotal of',\n                  n,\n                  'op(s) for',\n                  t,\n                  'ms (incl. ' + w + ' ms of waiting on the async side)',\n                );\n                sqlite3.config.log('Serialization metrics:', metrics.s11n);\n                W.postMessage({ type: 'opfs-async-metrics' });\n              },\n              reset: function () {\n                let k;\n                const r = (m) => (m.count = m.time = m.wait = 0);\n                for (k in state.opIds) {\n                  r((metrics[k] = Object.create(null)));\n                }\n                let s = (metrics.s11n = Object.create(null));\n                s = s.serialize = Object.create(null);\n                s.count = s.time = 0;\n                s = metrics.s11n.deserialize = Object.create(null);\n                s.count = s.time = 0;\n              },\n            };\n            const opfsIoMethods = new sqlite3_io_methods();\n            const opfsVfs = new sqlite3_vfs().addOnDispose(() =>\n              opfsIoMethods.dispose(),\n            );\n            let promiseWasRejected = undefined;\n            const promiseReject = (err) => {\n              promiseWasRejected = true;\n              opfsVfs.dispose();\n              return promiseReject_(err);\n            };\n            const promiseResolve = () => {\n              promiseWasRejected = false;\n              return promiseResolve_(sqlite3);\n            };\n            const W = new Worker(\n              new URL('sqlite3-opfs-async-proxy.js', import.meta.url),\n            );\n            setTimeout(() => {\n              if (undefined === promiseWasRejected) {\n                promiseReject(\n                  new Error(\n                    'Timeout while waiting for OPFS async proxy worker.',\n                  ),\n                );\n              }\n            }, 4000);\n            W._originalOnError = W.onerror;\n            W.onerror = function (err) {\n              error('Error initializing OPFS asyncer:', err);\n              promiseReject(\n                new Error(\n                  'Loading OPFS async Worker failed for unknown reasons.',\n                ),\n              );\n            };\n            const pDVfs = capi.sqlite3_vfs_find(null);\n            const dVfs = pDVfs ? new sqlite3_vfs(pDVfs) : null;\n            opfsIoMethods.$iVersion = 1;\n            opfsVfs.$iVersion = 2;\n            opfsVfs.$szOsFile = capi.sqlite3_file.structInfo.sizeof;\n            opfsVfs.$mxPathname = 1024;\n            opfsVfs.$zName = wasm.allocCString('opfs');\n\n            opfsVfs.$xDlOpen =\n              opfsVfs.$xDlError =\n              opfsVfs.$xDlSym =\n              opfsVfs.$xDlClose =\n                null;\n            opfsVfs.addOnDispose(\n              '$zName',\n              opfsVfs.$zName,\n              'cleanup default VFS wrapper',\n              () => (dVfs ? dVfs.dispose() : null),\n            );\n\n            const state = Object.create(null);\n            state.verbose = options.verbose;\n            state.littleEndian = (() => {\n              const buffer = new ArrayBuffer(2);\n              new DataView(buffer).setInt16(0, 256, true);\n\n              return new Int16Array(buffer)[0] === 256;\n            })();\n\n            state.asyncIdleWaitTime = 150;\n\n            state.asyncS11nExceptions = 1;\n\n            state.fileBufferSize = 1024 * 64;\n            state.sabS11nOffset = state.fileBufferSize;\n\n            state.sabS11nSize = opfsVfs.$mxPathname * 2;\n\n            state.sabIO = new SharedArrayBuffer(\n              state.fileBufferSize + state.sabS11nSize,\n            );\n            state.opIds = Object.create(null);\n            const metrics = Object.create(null);\n            {\n              let i = 0;\n\n              state.opIds.whichOp = i++;\n\n              state.opIds.rc = i++;\n\n              state.opIds.xAccess = i++;\n              state.opIds.xClose = i++;\n              state.opIds.xDelete = i++;\n              state.opIds.xDeleteNoWait = i++;\n              state.opIds.xFileSize = i++;\n              state.opIds.xLock = i++;\n              state.opIds.xOpen = i++;\n              state.opIds.xRead = i++;\n              state.opIds.xSleep = i++;\n              state.opIds.xSync = i++;\n              state.opIds.xTruncate = i++;\n              state.opIds.xUnlock = i++;\n              state.opIds.xWrite = i++;\n              state.opIds.mkdir = i++;\n              state.opIds['opfs-async-metrics'] = i++;\n              state.opIds['opfs-async-shutdown'] = i++;\n\n              state.opIds.retry = i++;\n              state.sabOP = new SharedArrayBuffer(i * 4);\n              opfsUtil.metrics.reset();\n            }\n\n            state.sq3Codes = Object.create(null);\n            [\n              'SQLITE_ACCESS_EXISTS',\n              'SQLITE_ACCESS_READWRITE',\n              'SQLITE_BUSY',\n              'SQLITE_CANTOPEN',\n              'SQLITE_ERROR',\n              'SQLITE_IOERR',\n              'SQLITE_IOERR_ACCESS',\n              'SQLITE_IOERR_CLOSE',\n              'SQLITE_IOERR_DELETE',\n              'SQLITE_IOERR_FSYNC',\n              'SQLITE_IOERR_LOCK',\n              'SQLITE_IOERR_READ',\n              'SQLITE_IOERR_SHORT_READ',\n              'SQLITE_IOERR_TRUNCATE',\n              'SQLITE_IOERR_UNLOCK',\n              'SQLITE_IOERR_WRITE',\n              'SQLITE_LOCK_EXCLUSIVE',\n              'SQLITE_LOCK_NONE',\n              'SQLITE_LOCK_PENDING',\n              'SQLITE_LOCK_RESERVED',\n              'SQLITE_LOCK_SHARED',\n              'SQLITE_LOCKED',\n              'SQLITE_MISUSE',\n              'SQLITE_NOTFOUND',\n              'SQLITE_OPEN_CREATE',\n              'SQLITE_OPEN_DELETEONCLOSE',\n              'SQLITE_OPEN_MAIN_DB',\n              'SQLITE_OPEN_READONLY',\n            ].forEach((k) => {\n              if (undefined === (state.sq3Codes[k] = capi[k])) {\n                toss('Maintenance required: not found:', k);\n              }\n            });\n            state.opfsFlags = Object.assign(Object.create(null), {\n              OPFS_UNLOCK_ASAP: 0x01,\n\n              OPFS_UNLINK_BEFORE_OPEN: 0x02,\n\n              defaultUnlockAsap: false,\n            });\n\n            const opRun = (op, ...args) => {\n              const opNdx = state.opIds[op] || toss('Invalid op ID:', op);\n              state.s11n.serialize(...args);\n              Atomics.store(state.sabOPView, state.opIds.rc, -1);\n              Atomics.store(state.sabOPView, state.opIds.whichOp, opNdx);\n              Atomics.notify(state.sabOPView, state.opIds.whichOp);\n              const t = performance.now();\n              while (\n                'not-equal' !==\n                Atomics.wait(state.sabOPView, state.opIds.rc, -1)\n              ) {}\n\n              const rc = Atomics.load(state.sabOPView, state.opIds.rc);\n              metrics[op].wait += performance.now() - t;\n              if (rc && state.asyncS11nExceptions) {\n                const err = state.s11n.deserialize();\n                if (err) error(op + '() async error:', ...err);\n              }\n              return rc;\n            };\n\n            opfsUtil.debug = {\n              asyncShutdown: () => {\n                warn(\n                  'Shutting down OPFS async listener. The OPFS VFS will no longer work.',\n                );\n                opRun('opfs-async-shutdown');\n              },\n              asyncRestart: () => {\n                warn(\n                  'Attempting to restart OPFS VFS async listener. Might work, might not.',\n                );\n                W.postMessage({ type: 'opfs-async-restart' });\n              },\n            };\n\n            const initS11n = () => {\n              if (state.s11n) return state.s11n;\n              const textDecoder = new TextDecoder(),\n                textEncoder = new TextEncoder('utf-8'),\n                viewU8 = new Uint8Array(\n                  state.sabIO,\n                  state.sabS11nOffset,\n                  state.sabS11nSize,\n                ),\n                viewDV = new DataView(\n                  state.sabIO,\n                  state.sabS11nOffset,\n                  state.sabS11nSize,\n                );\n              state.s11n = Object.create(null);\n\n              const TypeIds = Object.create(null);\n              TypeIds.number = {\n                id: 1,\n                size: 8,\n                getter: 'getFloat64',\n                setter: 'setFloat64',\n              };\n              TypeIds.bigint = {\n                id: 2,\n                size: 8,\n                getter: 'getBigInt64',\n                setter: 'setBigInt64',\n              };\n              TypeIds.boolean = {\n                id: 3,\n                size: 4,\n                getter: 'getInt32',\n                setter: 'setInt32',\n              };\n              TypeIds.string = { id: 4 };\n\n              const getTypeId = (v) =>\n                TypeIds[typeof v] ||\n                toss(\n                  'Maintenance required: this value type cannot be serialized.',\n                  v,\n                );\n              const getTypeIdById = (tid) => {\n                switch (tid) {\n                  case TypeIds.number.id:\n                    return TypeIds.number;\n                  case TypeIds.bigint.id:\n                    return TypeIds.bigint;\n                  case TypeIds.boolean.id:\n                    return TypeIds.boolean;\n                  case TypeIds.string.id:\n                    return TypeIds.string;\n                  default:\n                    toss('Invalid type ID:', tid);\n                }\n              };\n\n              state.s11n.deserialize = function (clear = false) {\n                ++metrics.s11n.deserialize.count;\n                const t = performance.now();\n                const argc = viewU8[0];\n                const rc = argc ? [] : null;\n                if (argc) {\n                  const typeIds = [];\n                  let offset = 1,\n                    i,\n                    n,\n                    v;\n                  for (i = 0; i < argc; ++i, ++offset) {\n                    typeIds.push(getTypeIdById(viewU8[offset]));\n                  }\n                  for (i = 0; i < argc; ++i) {\n                    const t = typeIds[i];\n                    if (t.getter) {\n                      v = viewDV[t.getter](offset, state.littleEndian);\n                      offset += t.size;\n                    } else {\n                      n = viewDV.getInt32(offset, state.littleEndian);\n                      offset += 4;\n                      v = textDecoder.decode(viewU8.slice(offset, offset + n));\n                      offset += n;\n                    }\n                    rc.push(v);\n                  }\n                }\n                if (clear) viewU8[0] = 0;\n\n                metrics.s11n.deserialize.time += performance.now() - t;\n                return rc;\n              };\n\n              state.s11n.serialize = function (...args) {\n                const t = performance.now();\n                ++metrics.s11n.serialize.count;\n                if (args.length) {\n                  const typeIds = [];\n                  let i = 0,\n                    offset = 1;\n                  viewU8[0] = args.length & 0xff;\n                  for (; i < args.length; ++i, ++offset) {\n                    typeIds.push(getTypeId(args[i]));\n                    viewU8[offset] = typeIds[i].id;\n                  }\n                  for (i = 0; i < args.length; ++i) {\n                    const t = typeIds[i];\n                    if (t.setter) {\n                      viewDV[t.setter](offset, args[i], state.littleEndian);\n                      offset += t.size;\n                    } else {\n                      const s = textEncoder.encode(args[i]);\n                      viewDV.setInt32(offset, s.byteLength, state.littleEndian);\n                      offset += 4;\n                      viewU8.set(s, offset);\n                      offset += s.byteLength;\n                    }\n                  }\n                } else {\n                  viewU8[0] = 0;\n                }\n                metrics.s11n.serialize.time += performance.now() - t;\n              };\n              return state.s11n;\n            };\n\n            const randomFilename = function f(len = 16) {\n              if (!f._chars) {\n                f._chars =\n                  'abcdefghijklmnopqrstuvwxyz' +\n                  'ABCDEFGHIJKLMNOPQRSTUVWXYZ' +\n                  '012346789';\n                f._n = f._chars.length;\n              }\n              const a = [];\n              let i = 0;\n              for (; i < len; ++i) {\n                const ndx = (Math.random() * (f._n * 64)) % f._n | 0;\n                a[i] = f._chars[ndx];\n              }\n              return a.join('');\n            };\n\n            const __openFiles = Object.create(null);\n\n            const opTimer = Object.create(null);\n            opTimer.op = undefined;\n            opTimer.start = undefined;\n            const mTimeStart = (op) => {\n              opTimer.start = performance.now();\n              opTimer.op = op;\n              ++metrics[op].count;\n            };\n            const mTimeEnd = () =>\n              (metrics[opTimer.op].time += performance.now() - opTimer.start);\n\n            const ioSyncWrappers = {\n              xCheckReservedLock: function (pFile, pOut) {\n                wasm.poke(pOut, 0, 'i32');\n                return 0;\n              },\n              xClose: function (pFile) {\n                mTimeStart('xClose');\n                let rc = 0;\n                const f = __openFiles[pFile];\n                if (f) {\n                  delete __openFiles[pFile];\n                  rc = opRun('xClose', pFile);\n                  if (f.sq3File) f.sq3File.dispose();\n                }\n                mTimeEnd();\n                return rc;\n              },\n              xDeviceCharacteristics: function (pFile) {\n                return capi.SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN;\n              },\n              xFileControl: function (pFile, opId, pArg) {\n                return capi.SQLITE_NOTFOUND;\n              },\n              xFileSize: function (pFile, pSz64) {\n                mTimeStart('xFileSize');\n                let rc = opRun('xFileSize', pFile);\n                if (0 == rc) {\n                  try {\n                    const sz = state.s11n.deserialize()[0];\n                    wasm.poke(pSz64, sz, 'i64');\n                  } catch (e) {\n                    error('Unexpected error reading xFileSize() result:', e);\n                    rc = state.sq3Codes.SQLITE_IOERR;\n                  }\n                }\n                mTimeEnd();\n                return rc;\n              },\n              xLock: function (pFile, lockType) {\n                mTimeStart('xLock');\n                const f = __openFiles[pFile];\n                let rc = 0;\n\n                if (!f.lockType) {\n                  rc = opRun('xLock', pFile, lockType);\n                  if (0 === rc) f.lockType = lockType;\n                } else {\n                  f.lockType = lockType;\n                }\n                mTimeEnd();\n                return rc;\n              },\n              xRead: function (pFile, pDest, n, offset64) {\n                mTimeStart('xRead');\n                const f = __openFiles[pFile];\n                let rc;\n                try {\n                  rc = opRun('xRead', pFile, n, Number(offset64));\n                  if (0 === rc || capi.SQLITE_IOERR_SHORT_READ === rc) {\n                    wasm.heap8u().set(f.sabView.subarray(0, n), pDest);\n                  }\n                } catch (e) {\n                  error('xRead(', arguments, ') failed:', e, f);\n                  rc = capi.SQLITE_IOERR_READ;\n                }\n                mTimeEnd();\n                return rc;\n              },\n              xSync: function (pFile, flags) {\n                mTimeStart('xSync');\n                ++metrics.xSync.count;\n                const rc = opRun('xSync', pFile, flags);\n                mTimeEnd();\n                return rc;\n              },\n              xTruncate: function (pFile, sz64) {\n                mTimeStart('xTruncate');\n                const rc = opRun('xTruncate', pFile, Number(sz64));\n                mTimeEnd();\n                return rc;\n              },\n              xUnlock: function (pFile, lockType) {\n                mTimeStart('xUnlock');\n                const f = __openFiles[pFile];\n                let rc = 0;\n                if (capi.SQLITE_LOCK_NONE === lockType && f.lockType) {\n                  rc = opRun('xUnlock', pFile, lockType);\n                }\n                if (0 === rc) f.lockType = lockType;\n                mTimeEnd();\n                return rc;\n              },\n              xWrite: function (pFile, pSrc, n, offset64) {\n                mTimeStart('xWrite');\n                const f = __openFiles[pFile];\n                let rc;\n                try {\n                  f.sabView.set(wasm.heap8u().subarray(pSrc, pSrc + n));\n                  rc = opRun('xWrite', pFile, n, Number(offset64));\n                } catch (e) {\n                  error('xWrite(', arguments, ') failed:', e, f);\n                  rc = capi.SQLITE_IOERR_WRITE;\n                }\n                mTimeEnd();\n                return rc;\n              },\n            };\n\n            const vfsSyncWrappers = {\n              xAccess: function (pVfs, zName, flags, pOut) {\n                mTimeStart('xAccess');\n                const rc = opRun('xAccess', wasm.cstrToJs(zName));\n                wasm.poke(pOut, rc ? 0 : 1, 'i32');\n                mTimeEnd();\n                return 0;\n              },\n              xCurrentTime: function (pVfs, pOut) {\n                wasm.poke(\n                  pOut,\n                  2440587.5 + new Date().getTime() / 86400000,\n                  'double',\n                );\n                return 0;\n              },\n              xCurrentTimeInt64: function (pVfs, pOut) {\n                wasm.poke(\n                  pOut,\n                  2440587.5 * 86400000 + new Date().getTime(),\n                  'i64',\n                );\n                return 0;\n              },\n              xDelete: function (pVfs, zName, doSyncDir) {\n                mTimeStart('xDelete');\n                const rc = opRun(\n                  'xDelete',\n                  wasm.cstrToJs(zName),\n                  doSyncDir,\n                  false,\n                );\n                mTimeEnd();\n                return rc;\n              },\n              xFullPathname: function (pVfs, zName, nOut, pOut) {\n                const i = wasm.cstrncpy(pOut, zName, nOut);\n                return i < nOut ? 0 : capi.SQLITE_CANTOPEN;\n              },\n              xGetLastError: function (pVfs, nOut, pOut) {\n                warn('OPFS xGetLastError() has nothing sensible to return.');\n                return 0;\n              },\n\n              xOpen: function f(pVfs, zName, pFile, flags, pOutFlags) {\n                mTimeStart('xOpen');\n                let opfsFlags = 0;\n                if (0 === zName) {\n                  zName = randomFilename();\n                } else if (wasm.isPtr(zName)) {\n                  if (capi.sqlite3_uri_boolean(zName, 'opfs-unlock-asap', 0)) {\n                    opfsFlags |= state.opfsFlags.OPFS_UNLOCK_ASAP;\n                  }\n                  if (\n                    capi.sqlite3_uri_boolean(zName, 'delete-before-open', 0)\n                  ) {\n                    opfsFlags |= state.opfsFlags.OPFS_UNLINK_BEFORE_OPEN;\n                  }\n                  zName = wasm.cstrToJs(zName);\n                }\n                const fh = Object.create(null);\n                fh.fid = pFile;\n                fh.filename = zName;\n                fh.sab = new SharedArrayBuffer(state.fileBufferSize);\n                fh.flags = flags;\n                fh.readOnly =\n                  !(sqlite3.SQLITE_OPEN_CREATE & flags) &&\n                  !!(flags & capi.SQLITE_OPEN_READONLY);\n                const rc = opRun('xOpen', pFile, zName, flags, opfsFlags);\n                if (!rc) {\n                  if (fh.readOnly) {\n                    wasm.poke(pOutFlags, capi.SQLITE_OPEN_READONLY, 'i32');\n                  }\n                  __openFiles[pFile] = fh;\n                  fh.sabView = state.sabFileBufView;\n                  fh.sq3File = new sqlite3_file(pFile);\n                  fh.sq3File.$pMethods = opfsIoMethods.pointer;\n                  fh.lockType = capi.SQLITE_LOCK_NONE;\n                }\n                mTimeEnd();\n                return rc;\n              },\n            };\n\n            if (dVfs) {\n              opfsVfs.$xRandomness = dVfs.$xRandomness;\n              opfsVfs.$xSleep = dVfs.$xSleep;\n            }\n            if (!opfsVfs.$xRandomness) {\n              vfsSyncWrappers.xRandomness = function (pVfs, nOut, pOut) {\n                const heap = wasm.heap8u();\n                let i = 0;\n                for (; i < nOut; ++i)\n                  heap[pOut + i] = (Math.random() * 255000) & 0xff;\n                return i;\n              };\n            }\n            if (!opfsVfs.$xSleep) {\n              vfsSyncWrappers.xSleep = function (pVfs, ms) {\n                Atomics.wait(state.sabOPView, state.opIds.xSleep, 0, ms);\n                return 0;\n              };\n            }\n\n            opfsUtil.getResolvedPath = function (filename, splitIt) {\n              const p = new URL(filename, 'file://irrelevant').pathname;\n              return splitIt ? p.split('/').filter((v) => !!v) : p;\n            };\n\n            opfsUtil.getDirForFilename = async function f(\n              absFilename,\n              createDirs = false,\n            ) {\n              const path = opfsUtil.getResolvedPath(absFilename, true);\n              const filename = path.pop();\n              let dh = opfsUtil.rootDirectory;\n              for (const dirName of path) {\n                if (dirName) {\n                  dh = await dh.getDirectoryHandle(dirName, {\n                    create: !!createDirs,\n                  });\n                }\n              }\n              return [dh, filename];\n            };\n\n            opfsUtil.mkdir = async function (absDirName) {\n              try {\n                await opfsUtil.getDirForFilename(\n                  absDirName + '/filepart',\n                  true,\n                );\n                return true;\n              } catch (e) {\n                return false;\n              }\n            };\n\n            opfsUtil.entryExists = async function (fsEntryName) {\n              try {\n                const [dh, fn] = await opfsUtil.getDirForFilename(fsEntryName);\n                await dh.getFileHandle(fn);\n                return true;\n              } catch (e) {\n                return false;\n              }\n            };\n\n            opfsUtil.randomFilename = randomFilename;\n\n            opfsUtil.treeList = async function () {\n              const doDir = async function callee(dirHandle, tgt) {\n                tgt.name = dirHandle.name;\n                tgt.dirs = [];\n                tgt.files = [];\n                for await (const handle of dirHandle.values()) {\n                  if ('directory' === handle.kind) {\n                    const subDir = Object.create(null);\n                    tgt.dirs.push(subDir);\n                    await callee(handle, subDir);\n                  } else {\n                    tgt.files.push(handle.name);\n                  }\n                }\n              };\n              const root = Object.create(null);\n              await doDir(opfsUtil.rootDirectory, root);\n              return root;\n            };\n\n            opfsUtil.rmfr = async function () {\n              const dir = opfsUtil.rootDirectory,\n                opt = { recurse: true };\n              for await (const handle of dir.values()) {\n                dir.removeEntry(handle.name, opt);\n              }\n            };\n\n            opfsUtil.unlink = async function (\n              fsEntryName,\n              recursive = false,\n              throwOnError = false,\n            ) {\n              try {\n                const [hDir, filenamePart] = await opfsUtil.getDirForFilename(\n                  fsEntryName,\n                  false,\n                );\n                await hDir.removeEntry(filenamePart, { recursive });\n                return true;\n              } catch (e) {\n                if (throwOnError) {\n                  throw new Error(\n                    'unlink(',\n                    arguments[0],\n                    ') failed: ' + e.message,\n                    {\n                      cause: e,\n                    },\n                  );\n                }\n                return false;\n              }\n            };\n\n            opfsUtil.traverse = async function (opt) {\n              const defaultOpt = {\n                recursive: true,\n                directory: opfsUtil.rootDirectory,\n              };\n              if ('function' === typeof opt) {\n                opt = { callback: opt };\n              }\n              opt = Object.assign(defaultOpt, opt || {});\n              const doDir = async function callee(dirHandle, depth) {\n                for await (const handle of dirHandle.values()) {\n                  if (false === opt.callback(handle, dirHandle, depth))\n                    return false;\n                  else if (opt.recursive && 'directory' === handle.kind) {\n                    if (false === (await callee(handle, depth + 1))) break;\n                  }\n                }\n              };\n              doDir(opt.directory, 0);\n            };\n\n            const importDbChunked = async function (filename, callback) {\n              const [hDir, fnamePart] = await opfsUtil.getDirForFilename(\n                filename,\n                true,\n              );\n              const hFile = await hDir.getFileHandle(fnamePart, {\n                create: true,\n              });\n              let sah = await hFile.createSyncAccessHandle();\n              let nWrote = 0,\n                chunk,\n                checkedHeader = false,\n                err = false;\n              try {\n                sah.truncate(0);\n                while (undefined !== (chunk = await callback())) {\n                  if (chunk instanceof ArrayBuffer)\n                    chunk = new Uint8Array(chunk);\n                  if (0 === nWrote && chunk.byteLength >= 15) {\n                    util.affirmDbHeader(chunk);\n                    checkedHeader = true;\n                  }\n                  sah.write(chunk, { at: nWrote });\n                  nWrote += chunk.byteLength;\n                }\n                if (nWrote < 512 || 0 !== nWrote % 512) {\n                  toss(\n                    'Input size',\n                    nWrote,\n                    'is not correct for an SQLite database.',\n                  );\n                }\n                if (!checkedHeader) {\n                  const header = new Uint8Array(20);\n                  sah.read(header, { at: 0 });\n                  util.affirmDbHeader(header);\n                }\n                sah.write(new Uint8Array([1, 1]), { at: 18 });\n                return nWrote;\n              } catch (e) {\n                await sah.close();\n                sah = undefined;\n                await hDir.removeEntry(fnamePart).catch(() => {});\n                throw e;\n              } finally {\n                if (sah) await sah.close();\n              }\n            };\n\n            opfsUtil.importDb = async function (filename, bytes) {\n              if (bytes instanceof Function) {\n                return importDbChunked(filename, bytes);\n              }\n              if (bytes instanceof ArrayBuffer) bytes = new Uint8Array(bytes);\n              util.affirmIsDb(bytes);\n              const n = bytes.byteLength;\n              const [hDir, fnamePart] = await opfsUtil.getDirForFilename(\n                filename,\n                true,\n              );\n              let sah,\n                err,\n                nWrote = 0;\n              try {\n                const hFile = await hDir.getFileHandle(fnamePart, {\n                  create: true,\n                });\n                sah = await hFile.createSyncAccessHandle();\n                sah.truncate(0);\n                nWrote = sah.write(bytes, { at: 0 });\n                if (nWrote != n) {\n                  toss(\n                    'Expected to write ' +\n                      n +\n                      ' bytes but wrote ' +\n                      nWrote +\n                      '.',\n                  );\n                }\n                sah.write(new Uint8Array([1, 1]), { at: 18 });\n                return nWrote;\n              } catch (e) {\n                if (sah) {\n                  await sah.close();\n                  sah = undefined;\n                }\n                await hDir.removeEntry(fnamePart).catch(() => {});\n                throw e;\n              } finally {\n                if (sah) await sah.close();\n              }\n            };\n\n            if (sqlite3.oo1) {\n              const OpfsDb = function (...args) {\n                const opt = sqlite3.oo1.DB.dbCtorHelper.normalizeArgs(...args);\n                opt.vfs = opfsVfs.$zName;\n                sqlite3.oo1.DB.dbCtorHelper.call(this, opt);\n              };\n              OpfsDb.prototype = Object.create(sqlite3.oo1.DB.prototype);\n              sqlite3.oo1.OpfsDb = OpfsDb;\n              OpfsDb.importDb = opfsUtil.importDb;\n              sqlite3.oo1.DB.dbCtorHelper.setVfsPostOpenCallback(\n                opfsVfs.pointer,\n                function (oo1Db, sqlite3) {\n                  sqlite3.capi.sqlite3_busy_timeout(oo1Db, 10000);\n                },\n              );\n            }\n\n            const sanityCheck = function () {\n              const scope = wasm.scopedAllocPush();\n              const sq3File = new sqlite3_file();\n              try {\n                const fid = sq3File.pointer;\n                const openFlags =\n                  capi.SQLITE_OPEN_CREATE |\n                  capi.SQLITE_OPEN_READWRITE |\n                  capi.SQLITE_OPEN_MAIN_DB;\n                const pOut = wasm.scopedAlloc(8);\n                const dbFile = '/sanity/check/file' + randomFilename(8);\n                const zDbFile = wasm.scopedAllocCString(dbFile);\n                let rc;\n                state.s11n.serialize('This is ä string.');\n                rc = state.s11n.deserialize();\n                log('deserialize() says:', rc);\n                if ('This is ä string.' !== rc[0]) toss('String d13n error.');\n                vfsSyncWrappers.xAccess(opfsVfs.pointer, zDbFile, 0, pOut);\n                rc = wasm.peek(pOut, 'i32');\n                log('xAccess(', dbFile, ') exists ?=', rc);\n                rc = vfsSyncWrappers.xOpen(\n                  opfsVfs.pointer,\n                  zDbFile,\n                  fid,\n                  openFlags,\n                  pOut,\n                );\n                log(\n                  'open rc =',\n                  rc,\n                  'state.sabOPView[xOpen] =',\n                  state.sabOPView[state.opIds.xOpen],\n                );\n                if (0 !== rc) {\n                  error('open failed with code', rc);\n                  return;\n                }\n                vfsSyncWrappers.xAccess(opfsVfs.pointer, zDbFile, 0, pOut);\n                rc = wasm.peek(pOut, 'i32');\n                if (!rc) toss('xAccess() failed to detect file.');\n                rc = ioSyncWrappers.xSync(sq3File.pointer, 0);\n                if (rc) toss('sync failed w/ rc', rc);\n                rc = ioSyncWrappers.xTruncate(sq3File.pointer, 1024);\n                if (rc) toss('truncate failed w/ rc', rc);\n                wasm.poke(pOut, 0, 'i64');\n                rc = ioSyncWrappers.xFileSize(sq3File.pointer, pOut);\n                if (rc) toss('xFileSize failed w/ rc', rc);\n                log('xFileSize says:', wasm.peek(pOut, 'i64'));\n                rc = ioSyncWrappers.xWrite(sq3File.pointer, zDbFile, 10, 1);\n                if (rc) toss('xWrite() failed!');\n                const readBuf = wasm.scopedAlloc(16);\n                rc = ioSyncWrappers.xRead(sq3File.pointer, readBuf, 6, 2);\n                wasm.poke(readBuf + 6, 0);\n                let jRead = wasm.cstrToJs(readBuf);\n                log('xRead() got:', jRead);\n                if ('sanity' !== jRead) toss('Unexpected xRead() value.');\n                if (vfsSyncWrappers.xSleep) {\n                  log('xSleep()ing before close()ing...');\n                  vfsSyncWrappers.xSleep(opfsVfs.pointer, 2000);\n                  log('waking up from xSleep()');\n                }\n                rc = ioSyncWrappers.xClose(fid);\n                log('xClose rc =', rc, 'sabOPView =', state.sabOPView);\n                log('Deleting file:', dbFile);\n                vfsSyncWrappers.xDelete(opfsVfs.pointer, zDbFile, 0x1234);\n                vfsSyncWrappers.xAccess(opfsVfs.pointer, zDbFile, 0, pOut);\n                rc = wasm.peek(pOut, 'i32');\n                if (rc)\n                  toss(\n                    'Expecting 0 from xAccess(',\n                    dbFile,\n                    ') after xDelete().',\n                  );\n                warn('End of OPFS sanity checks.');\n              } finally {\n                sq3File.dispose();\n                wasm.scopedAllocPop(scope);\n              }\n            };\n\n            W.onmessage = function ({ data }) {\n              switch (data.type) {\n                case 'opfs-unavailable':\n                  promiseReject(new Error(data.payload.join(' ')));\n                  break;\n                case 'opfs-async-loaded':\n                  W.postMessage({ type: 'opfs-async-init', args: state });\n                  break;\n                case 'opfs-async-inited': {\n                  if (true === promiseWasRejected) {\n                    break;\n                  }\n                  try {\n                    sqlite3.vfs.installVfs({\n                      io: { struct: opfsIoMethods, methods: ioSyncWrappers },\n                      vfs: { struct: opfsVfs, methods: vfsSyncWrappers },\n                    });\n                    state.sabOPView = new Int32Array(state.sabOP);\n                    state.sabFileBufView = new Uint8Array(\n                      state.sabIO,\n                      0,\n                      state.fileBufferSize,\n                    );\n                    state.sabS11nView = new Uint8Array(\n                      state.sabIO,\n                      state.sabS11nOffset,\n                      state.sabS11nSize,\n                    );\n                    initS11n();\n                    if (options.sanityChecks) {\n                      warn(\n                        'Running sanity checks because of opfs-sanity-check URL arg...',\n                      );\n                      sanityCheck();\n                    }\n                    if (thisThreadHasOPFS()) {\n                      navigator.storage\n                        .getDirectory()\n                        .then((d) => {\n                          W.onerror = W._originalOnError;\n                          delete W._originalOnError;\n                          sqlite3.opfs = opfsUtil;\n                          opfsUtil.rootDirectory = d;\n                          log('End of OPFS sqlite3_vfs setup.', opfsVfs);\n                          promiseResolve();\n                        })\n                        .catch(promiseReject);\n                    } else {\n                      promiseResolve();\n                    }\n                  } catch (e) {\n                    error(e);\n                    promiseReject(e);\n                  }\n                  break;\n                }\n                default: {\n                  const errMsg =\n                    'Unexpected message from the OPFS async worker: ' +\n                    JSON.stringify(data);\n                  error(errMsg);\n                  promiseReject(new Error(errMsg));\n                  break;\n                }\n              }\n            };\n          });\n          return thePromise;\n        };\n        installOpfsVfs.defaultProxyUri = 'sqlite3-opfs-async-proxy.js';\n        globalThis.sqlite3ApiBootstrap.initializersAsync.push(\n          async (sqlite3) => {\n            try {\n              let proxyJs = installOpfsVfs.defaultProxyUri;\n              if (sqlite3.scriptInfo.sqlite3Dir) {\n                installOpfsVfs.defaultProxyUri =\n                  sqlite3.scriptInfo.sqlite3Dir + proxyJs;\n              }\n              return installOpfsVfs().catch((e) => {\n                sqlite3.config.warn(\n                  'Ignoring inability to install OPFS sqlite3_vfs:',\n                  e.message,\n                );\n              });\n            } catch (e) {\n              sqlite3.config.error('installOpfsVfs() exception:', e);\n              return Promise.reject(e);\n            }\n          },\n        );\n      });\n\n      globalThis.sqlite3ApiBootstrap.initializers.push(function (sqlite3) {\n        'use strict';\n        const toss = sqlite3.util.toss;\n        const toss3 = sqlite3.util.toss3;\n        const initPromises = Object.create(null);\n        const capi = sqlite3.capi;\n        const util = sqlite3.util;\n        const wasm = sqlite3.wasm;\n\n        const SECTOR_SIZE = 4096;\n        const HEADER_MAX_PATH_SIZE = 512;\n        const HEADER_FLAGS_SIZE = 4;\n        const HEADER_DIGEST_SIZE = 8;\n        const HEADER_CORPUS_SIZE = HEADER_MAX_PATH_SIZE + HEADER_FLAGS_SIZE;\n        const HEADER_OFFSET_FLAGS = HEADER_MAX_PATH_SIZE;\n        const HEADER_OFFSET_DIGEST = HEADER_CORPUS_SIZE;\n        const HEADER_OFFSET_DATA = SECTOR_SIZE;\n\n        const PERSISTENT_FILE_TYPES =\n          capi.SQLITE_OPEN_MAIN_DB |\n          capi.SQLITE_OPEN_MAIN_JOURNAL |\n          capi.SQLITE_OPEN_SUPER_JOURNAL |\n          capi.SQLITE_OPEN_WAL;\n\n        const OPAQUE_DIR_NAME = '.opaque';\n\n        const getRandomName = () => Math.random().toString(36).slice(2);\n\n        const textDecoder = new TextDecoder();\n        const textEncoder = new TextEncoder();\n\n        const optionDefaults = Object.assign(Object.create(null), {\n          name: 'opfs-sahpool',\n          directory: undefined,\n          initialCapacity: 6,\n          clearOnInit: false,\n\n          verbosity: 2,\n          forceReinitIfPreviouslyFailed: false,\n        });\n\n        const loggers = [\n          sqlite3.config.error,\n          sqlite3.config.warn,\n          sqlite3.config.log,\n        ];\n        const log = sqlite3.config.log;\n        const warn = sqlite3.config.warn;\n        const error = sqlite3.config.error;\n\n        const __mapVfsToPool = new Map();\n        const getPoolForVfs = (pVfs) => __mapVfsToPool.get(pVfs);\n        const setPoolForVfs = (pVfs, pool) => {\n          if (pool) __mapVfsToPool.set(pVfs, pool);\n          else __mapVfsToPool.delete(pVfs);\n        };\n\n        const __mapSqlite3File = new Map();\n        const getPoolForPFile = (pFile) => __mapSqlite3File.get(pFile);\n        const setPoolForPFile = (pFile, pool) => {\n          if (pool) __mapSqlite3File.set(pFile, pool);\n          else __mapSqlite3File.delete(pFile);\n        };\n\n        const ioMethods = {\n          xCheckReservedLock: function (pFile, pOut) {\n            const pool = getPoolForPFile(pFile);\n            pool.log('xCheckReservedLock');\n            pool.storeErr();\n            wasm.poke32(pOut, 1);\n            return 0;\n          },\n          xClose: function (pFile) {\n            const pool = getPoolForPFile(pFile);\n            pool.storeErr();\n            const file = pool.getOFileForS3File(pFile);\n            if (file) {\n              try {\n                pool.log(`xClose ${file.path}`);\n                pool.mapS3FileToOFile(pFile, false);\n                file.sah.flush();\n                if (file.flags & capi.SQLITE_OPEN_DELETEONCLOSE) {\n                  pool.deletePath(file.path);\n                }\n              } catch (e) {\n                return pool.storeErr(e, capi.SQLITE_IOERR);\n              }\n            }\n            return 0;\n          },\n          xDeviceCharacteristics: function (pFile) {\n            return capi.SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN;\n          },\n          xFileControl: function (pFile, opId, pArg) {\n            return capi.SQLITE_NOTFOUND;\n          },\n          xFileSize: function (pFile, pSz64) {\n            const pool = getPoolForPFile(pFile);\n            pool.log(`xFileSize`);\n            const file = pool.getOFileForS3File(pFile);\n            const size = file.sah.getSize() - HEADER_OFFSET_DATA;\n\n            wasm.poke64(pSz64, BigInt(size));\n            return 0;\n          },\n          xLock: function (pFile, lockType) {\n            const pool = getPoolForPFile(pFile);\n            pool.log(`xLock ${lockType}`);\n            pool.storeErr();\n            const file = pool.getOFileForS3File(pFile);\n            file.lockType = lockType;\n            return 0;\n          },\n          xRead: function (pFile, pDest, n, offset64) {\n            const pool = getPoolForPFile(pFile);\n            pool.storeErr();\n            const file = pool.getOFileForS3File(pFile);\n            pool.log(`xRead ${file.path} ${n} @ ${offset64}`);\n            try {\n              const nRead = file.sah.read(\n                wasm.heap8u().subarray(pDest, pDest + n),\n                { at: HEADER_OFFSET_DATA + Number(offset64) },\n              );\n              if (nRead < n) {\n                wasm.heap8u().fill(0, pDest + nRead, pDest + n);\n                return capi.SQLITE_IOERR_SHORT_READ;\n              }\n              return 0;\n            } catch (e) {\n              return pool.storeErr(e, capi.SQLITE_IOERR);\n            }\n          },\n          xSectorSize: function (pFile) {\n            return SECTOR_SIZE;\n          },\n          xSync: function (pFile, flags) {\n            const pool = getPoolForPFile(pFile);\n            pool.log(`xSync ${flags}`);\n            pool.storeErr();\n            const file = pool.getOFileForS3File(pFile);\n\n            try {\n              file.sah.flush();\n              return 0;\n            } catch (e) {\n              return pool.storeErr(e, capi.SQLITE_IOERR);\n            }\n          },\n          xTruncate: function (pFile, sz64) {\n            const pool = getPoolForPFile(pFile);\n            pool.log(`xTruncate ${sz64}`);\n            pool.storeErr();\n            const file = pool.getOFileForS3File(pFile);\n\n            try {\n              file.sah.truncate(HEADER_OFFSET_DATA + Number(sz64));\n              return 0;\n            } catch (e) {\n              return pool.storeErr(e, capi.SQLITE_IOERR);\n            }\n          },\n          xUnlock: function (pFile, lockType) {\n            const pool = getPoolForPFile(pFile);\n            pool.log('xUnlock');\n            const file = pool.getOFileForS3File(pFile);\n            file.lockType = lockType;\n            return 0;\n          },\n          xWrite: function (pFile, pSrc, n, offset64) {\n            const pool = getPoolForPFile(pFile);\n            pool.storeErr();\n            const file = pool.getOFileForS3File(pFile);\n            pool.log(`xWrite ${file.path} ${n} ${offset64}`);\n            try {\n              const nBytes = file.sah.write(\n                wasm.heap8u().subarray(pSrc, pSrc + n),\n                { at: HEADER_OFFSET_DATA + Number(offset64) },\n              );\n              return n === nBytes ? 0 : toss('Unknown write() failure.');\n            } catch (e) {\n              return pool.storeErr(e, capi.SQLITE_IOERR);\n            }\n          },\n        };\n\n        const opfsIoMethods = new capi.sqlite3_io_methods();\n        opfsIoMethods.$iVersion = 1;\n        sqlite3.vfs.installVfs({\n          io: { struct: opfsIoMethods, methods: ioMethods },\n        });\n\n        const vfsMethods = {\n          xAccess: function (pVfs, zName, flags, pOut) {\n            const pool = getPoolForVfs(pVfs);\n            pool.storeErr();\n            try {\n              const name = pool.getPath(zName);\n              wasm.poke32(pOut, pool.hasFilename(name) ? 1 : 0);\n            } catch (e) {\n              wasm.poke32(pOut, 0);\n            }\n            return 0;\n          },\n          xCurrentTime: function (pVfs, pOut) {\n            wasm.poke(\n              pOut,\n              2440587.5 + new Date().getTime() / 86400000,\n              'double',\n            );\n            return 0;\n          },\n          xCurrentTimeInt64: function (pVfs, pOut) {\n            wasm.poke(pOut, 2440587.5 * 86400000 + new Date().getTime(), 'i64');\n            return 0;\n          },\n          xDelete: function (pVfs, zName, doSyncDir) {\n            const pool = getPoolForVfs(pVfs);\n            pool.log(`xDelete ${wasm.cstrToJs(zName)}`);\n            pool.storeErr();\n            try {\n              pool.deletePath(pool.getPath(zName));\n              return 0;\n            } catch (e) {\n              pool.storeErr(e);\n              return capi.SQLITE_IOERR_DELETE;\n            }\n          },\n          xFullPathname: function (pVfs, zName, nOut, pOut) {\n            const i = wasm.cstrncpy(pOut, zName, nOut);\n            return i < nOut ? 0 : capi.SQLITE_CANTOPEN;\n          },\n          xGetLastError: function (pVfs, nOut, pOut) {\n            const pool = getPoolForVfs(pVfs);\n            const e = pool.popErr();\n            pool.log(`xGetLastError ${nOut} e =`, e);\n            if (e) {\n              const scope = wasm.scopedAllocPush();\n              try {\n                const [cMsg, n] = wasm.scopedAllocCString(e.message, true);\n                wasm.cstrncpy(pOut, cMsg, nOut);\n                if (n > nOut) wasm.poke8(pOut + nOut - 1, 0);\n              } catch (e) {\n                return capi.SQLITE_NOMEM;\n              } finally {\n                wasm.scopedAllocPop(scope);\n              }\n            }\n            return e ? e.sqlite3Rc || capi.SQLITE_IOERR : 0;\n          },\n\n          xOpen: function f(pVfs, zName, pFile, flags, pOutFlags) {\n            const pool = getPoolForVfs(pVfs);\n            try {\n              pool.log(`xOpen ${wasm.cstrToJs(zName)} ${flags}`);\n\n              const path =\n                zName && wasm.peek8(zName)\n                  ? pool.getPath(zName)\n                  : getRandomName();\n              let sah = pool.getSAHForPath(path);\n              if (!sah && flags & capi.SQLITE_OPEN_CREATE) {\n                if (pool.getFileCount() < pool.getCapacity()) {\n                  sah = pool.nextAvailableSAH();\n                  pool.setAssociatedPath(sah, path, flags);\n                } else {\n                  toss('SAH pool is full. Cannot create file', path);\n                }\n              }\n              if (!sah) {\n                toss('file not found:', path);\n              }\n\n              const file = { path, flags, sah };\n              pool.mapS3FileToOFile(pFile, file);\n              file.lockType = capi.SQLITE_LOCK_NONE;\n              const sq3File = new capi.sqlite3_file(pFile);\n              sq3File.$pMethods = opfsIoMethods.pointer;\n              sq3File.dispose();\n              wasm.poke32(pOutFlags, flags);\n              return 0;\n            } catch (e) {\n              pool.storeErr(e);\n              return capi.SQLITE_CANTOPEN;\n            }\n          },\n        };\n\n        const createOpfsVfs = function (vfsName) {\n          if (sqlite3.capi.sqlite3_vfs_find(vfsName)) {\n            toss3('VFS name is already registered:', vfsName);\n          }\n          const opfsVfs = new capi.sqlite3_vfs();\n\n          const pDVfs = capi.sqlite3_vfs_find(null);\n          const dVfs = pDVfs ? new capi.sqlite3_vfs(pDVfs) : null;\n          opfsVfs.$iVersion = 2;\n          opfsVfs.$szOsFile = capi.sqlite3_file.structInfo.sizeof;\n          opfsVfs.$mxPathname = HEADER_MAX_PATH_SIZE;\n          opfsVfs.addOnDispose(\n            (opfsVfs.$zName = wasm.allocCString(vfsName)),\n            () => setPoolForVfs(opfsVfs.pointer, 0),\n          );\n\n          if (dVfs) {\n            opfsVfs.$xRandomness = dVfs.$xRandomness;\n            opfsVfs.$xSleep = dVfs.$xSleep;\n            dVfs.dispose();\n          }\n          if (!opfsVfs.$xRandomness && !vfsMethods.xRandomness) {\n            vfsMethods.xRandomness = function (pVfs, nOut, pOut) {\n              const heap = wasm.heap8u();\n              let i = 0;\n              for (; i < nOut; ++i)\n                heap[pOut + i] = (Math.random() * 255000) & 0xff;\n              return i;\n            };\n          }\n          if (!opfsVfs.$xSleep && !vfsMethods.xSleep) {\n            vfsMethods.xSleep = (pVfs, ms) => 0;\n          }\n          sqlite3.vfs.installVfs({\n            vfs: { struct: opfsVfs, methods: vfsMethods },\n          });\n          return opfsVfs;\n        };\n\n        class OpfsSAHPool {\n          vfsDir;\n\n          #dhVfsRoot;\n\n          #dhOpaque;\n\n          #dhVfsParent;\n\n          #mapSAHToName = new Map();\n\n          #mapFilenameToSAH = new Map();\n\n          #availableSAH = new Set();\n\n          #mapS3FileToOFile_ = new Map();\n\n          #apBody = new Uint8Array(HEADER_CORPUS_SIZE);\n\n          #dvBody;\n\n          #cVfs;\n\n          #verbosity;\n\n          constructor(options = Object.create(null)) {\n            this.#verbosity = options.verbosity ?? optionDefaults.verbosity;\n            this.vfsName = options.name || optionDefaults.name;\n            this.#cVfs = createOpfsVfs(this.vfsName);\n            setPoolForVfs(this.#cVfs.pointer, this);\n            this.vfsDir = options.directory || '.' + this.vfsName;\n            this.#dvBody = new DataView(\n              this.#apBody.buffer,\n              this.#apBody.byteOffset,\n            );\n            this.isReady = this.reset(\n              !!(options.clearOnInit ?? optionDefaults.clearOnInit),\n            ).then(() => {\n              if (this.$error) throw this.$error;\n              return this.getCapacity()\n                ? Promise.resolve(undefined)\n                : this.addCapacity(\n                    options.initialCapacity || optionDefaults.initialCapacity,\n                  );\n            });\n          }\n\n          #logImpl(level, ...args) {\n            if (this.#verbosity > level)\n              loggers[level](this.vfsName + ':', ...args);\n          }\n          log(...args) {\n            this.#logImpl(2, ...args);\n          }\n          warn(...args) {\n            this.#logImpl(1, ...args);\n          }\n          error(...args) {\n            this.#logImpl(0, ...args);\n          }\n\n          getVfs() {\n            return this.#cVfs;\n          }\n\n          getCapacity() {\n            return this.#mapSAHToName.size;\n          }\n\n          getFileCount() {\n            return this.#mapFilenameToSAH.size;\n          }\n\n          getFileNames() {\n            const rc = [];\n            const iter = this.#mapFilenameToSAH.keys();\n            for (const n of iter) rc.push(n);\n            return rc;\n          }\n\n          async addCapacity(n) {\n            for (let i = 0; i < n; ++i) {\n              const name = getRandomName();\n              const h = await this.#dhOpaque.getFileHandle(name, {\n                create: true,\n              });\n              const ah = await h.createSyncAccessHandle();\n              this.#mapSAHToName.set(ah, name);\n              this.setAssociatedPath(ah, '', 0);\n            }\n            return this.getCapacity();\n          }\n\n          async reduceCapacity(n) {\n            let nRm = 0;\n            for (const ah of Array.from(this.#availableSAH)) {\n              if (nRm === n || this.getFileCount() === this.getCapacity()) {\n                break;\n              }\n              const name = this.#mapSAHToName.get(ah);\n\n              ah.close();\n              await this.#dhOpaque.removeEntry(name);\n              this.#mapSAHToName.delete(ah);\n              this.#availableSAH.delete(ah);\n              ++nRm;\n            }\n            return nRm;\n          }\n\n          releaseAccessHandles() {\n            for (const ah of this.#mapSAHToName.keys()) ah.close();\n            this.#mapSAHToName.clear();\n            this.#mapFilenameToSAH.clear();\n            this.#availableSAH.clear();\n          }\n\n          async acquireAccessHandles(clearFiles) {\n            const files = [];\n            for await (const [name, h] of this.#dhOpaque) {\n              if ('file' === h.kind) {\n                files.push([name, h]);\n              }\n            }\n            return Promise.all(\n              files.map(async ([name, h]) => {\n                try {\n                  const ah = await h.createSyncAccessHandle();\n                  this.#mapSAHToName.set(ah, name);\n                  if (clearFiles) {\n                    ah.truncate(HEADER_OFFSET_DATA);\n                    this.setAssociatedPath(ah, '', 0);\n                  } else {\n                    const path = this.getAssociatedPath(ah);\n                    if (path) {\n                      this.#mapFilenameToSAH.set(path, ah);\n                    } else {\n                      this.#availableSAH.add(ah);\n                    }\n                  }\n                } catch (e) {\n                  this.storeErr(e);\n                  this.releaseAccessHandles();\n                  throw e;\n                }\n              }),\n            );\n          }\n\n          getAssociatedPath(sah) {\n            sah.read(this.#apBody, { at: 0 });\n\n            const flags = this.#dvBody.getUint32(HEADER_OFFSET_FLAGS);\n            if (\n              this.#apBody[0] &&\n              (flags & capi.SQLITE_OPEN_DELETEONCLOSE ||\n                (flags & PERSISTENT_FILE_TYPES) === 0)\n            ) {\n              warn(\n                `Removing file with unexpected flags ${flags.toString(16)}`,\n                this.#apBody,\n              );\n              this.setAssociatedPath(sah, '', 0);\n              return '';\n            }\n\n            const fileDigest = new Uint32Array(HEADER_DIGEST_SIZE / 4);\n            sah.read(fileDigest, { at: HEADER_OFFSET_DIGEST });\n            const compDigest = this.computeDigest(this.#apBody);\n            if (fileDigest.every((v, i) => v === compDigest[i])) {\n              const pathBytes = this.#apBody.findIndex((v) => 0 === v);\n              if (0 === pathBytes) {\n                sah.truncate(HEADER_OFFSET_DATA);\n              }\n              return pathBytes\n                ? textDecoder.decode(this.#apBody.subarray(0, pathBytes))\n                : '';\n            } else {\n              warn('Disassociating file with bad digest.');\n              this.setAssociatedPath(sah, '', 0);\n              return '';\n            }\n          }\n\n          setAssociatedPath(sah, path, flags) {\n            const enc = textEncoder.encodeInto(path, this.#apBody);\n            if (HEADER_MAX_PATH_SIZE <= enc.written + 1) {\n              toss('Path too long:', path);\n            }\n            this.#apBody.fill(0, enc.written, HEADER_MAX_PATH_SIZE);\n            this.#dvBody.setUint32(HEADER_OFFSET_FLAGS, flags);\n\n            const digest = this.computeDigest(this.#apBody);\n            sah.write(this.#apBody, { at: 0 });\n            sah.write(digest, { at: HEADER_OFFSET_DIGEST });\n            sah.flush();\n\n            if (path) {\n              this.#mapFilenameToSAH.set(path, sah);\n              this.#availableSAH.delete(sah);\n            } else {\n              sah.truncate(HEADER_OFFSET_DATA);\n              this.#availableSAH.add(sah);\n            }\n          }\n\n          computeDigest(byteArray) {\n            let h1 = 0xdeadbeef;\n            let h2 = 0x41c6ce57;\n            for (const v of byteArray) {\n              h1 = 31 * h1 + v * 307;\n              h2 = 31 * h2 + v * 307;\n            }\n            return new Uint32Array([h1 >>> 0, h2 >>> 0]);\n          }\n\n          async reset(clearFiles) {\n            await this.isReady;\n            let h = await navigator.storage.getDirectory();\n            let prev, prevName;\n            for (const d of this.vfsDir.split('/')) {\n              if (d) {\n                prev = h;\n                h = await h.getDirectoryHandle(d, { create: true });\n              }\n            }\n            this.#dhVfsRoot = h;\n            this.#dhVfsParent = prev;\n            this.#dhOpaque = await this.#dhVfsRoot.getDirectoryHandle(\n              OPAQUE_DIR_NAME,\n              { create: true },\n            );\n            this.releaseAccessHandles();\n            return this.acquireAccessHandles(clearFiles);\n          }\n\n          getPath(arg) {\n            if (wasm.isPtr(arg)) arg = wasm.cstrToJs(arg);\n            return (\n              arg instanceof URL ? arg : new URL(arg, 'file://localhost/')\n            ).pathname;\n          }\n\n          deletePath(path) {\n            const sah = this.#mapFilenameToSAH.get(path);\n            if (sah) {\n              this.#mapFilenameToSAH.delete(path);\n              this.setAssociatedPath(sah, '', 0);\n            }\n            return !!sah;\n          }\n\n          storeErr(e, code) {\n            if (e) {\n              e.sqlite3Rc = code || capi.SQLITE_IOERR;\n              this.error(e);\n            }\n            this.$error = e;\n            return code;\n          }\n\n          popErr() {\n            const rc = this.$error;\n            this.$error = undefined;\n            return rc;\n          }\n\n          nextAvailableSAH() {\n            const [rc] = this.#availableSAH.keys();\n            return rc;\n          }\n\n          getOFileForS3File(pFile) {\n            return this.#mapS3FileToOFile_.get(pFile);\n          }\n\n          mapS3FileToOFile(pFile, file) {\n            if (file) {\n              this.#mapS3FileToOFile_.set(pFile, file);\n              setPoolForPFile(pFile, this);\n            } else {\n              this.#mapS3FileToOFile_.delete(pFile);\n              setPoolForPFile(pFile, false);\n            }\n          }\n\n          hasFilename(name) {\n            return this.#mapFilenameToSAH.has(name);\n          }\n\n          getSAHForPath(path) {\n            return this.#mapFilenameToSAH.get(path);\n          }\n\n          async removeVfs() {\n            if (!this.#cVfs.pointer || !this.#dhOpaque) return false;\n            capi.sqlite3_vfs_unregister(this.#cVfs.pointer);\n            this.#cVfs.dispose();\n            delete initPromises[this.vfsName];\n            try {\n              this.releaseAccessHandles();\n              await this.#dhVfsRoot.removeEntry(OPAQUE_DIR_NAME, {\n                recursive: true,\n              });\n              this.#dhOpaque = undefined;\n              await this.#dhVfsParent.removeEntry(this.#dhVfsRoot.name, {\n                recursive: true,\n              });\n              this.#dhVfsRoot = this.#dhVfsParent = undefined;\n            } catch (e) {\n              sqlite3.config.error(this.vfsName, 'removeVfs() failed:', e);\n            }\n            return true;\n          }\n\n          exportFile(name) {\n            const sah =\n              this.#mapFilenameToSAH.get(name) || toss('File not found:', name);\n            const n = sah.getSize() - HEADER_OFFSET_DATA;\n            const b = new Uint8Array(n > 0 ? n : 0);\n            if (n > 0) {\n              const nRead = sah.read(b, { at: HEADER_OFFSET_DATA });\n              if (nRead != n) {\n                toss(\n                  'Expected to read ' + n + ' bytes but read ' + nRead + '.',\n                );\n              }\n            }\n            return b;\n          }\n\n          async importDbChunked(name, callback) {\n            const sah =\n              this.#mapFilenameToSAH.get(name) ||\n              this.nextAvailableSAH() ||\n              toss('No available handles to import to.');\n            sah.truncate(0);\n            let nWrote = 0,\n              chunk,\n              checkedHeader = false,\n              err = false;\n            try {\n              while (undefined !== (chunk = await callback())) {\n                if (chunk instanceof ArrayBuffer) chunk = new Uint8Array(chunk);\n                if (0 === nWrote && chunk.byteLength >= 15) {\n                  util.affirmDbHeader(chunk);\n                  checkedHeader = true;\n                }\n                sah.write(chunk, { at: HEADER_OFFSET_DATA + nWrote });\n                nWrote += chunk.byteLength;\n              }\n              if (nWrote < 512 || 0 !== nWrote % 512) {\n                toss(\n                  'Input size',\n                  nWrote,\n                  'is not correct for an SQLite database.',\n                );\n              }\n              if (!checkedHeader) {\n                const header = new Uint8Array(20);\n                sah.read(header, { at: 0 });\n                util.affirmDbHeader(header);\n              }\n              sah.write(new Uint8Array([1, 1]), {\n                at: HEADER_OFFSET_DATA + 18,\n              });\n            } catch (e) {\n              this.setAssociatedPath(sah, '', 0);\n              throw e;\n            }\n            this.setAssociatedPath(sah, name, capi.SQLITE_OPEN_MAIN_DB);\n            return nWrote;\n          }\n\n          importDb(name, bytes) {\n            if (bytes instanceof ArrayBuffer) bytes = new Uint8Array(bytes);\n            else if (bytes instanceof Function)\n              return this.importDbChunked(name, bytes);\n            const sah =\n              this.#mapFilenameToSAH.get(name) ||\n              this.nextAvailableSAH() ||\n              toss('No available handles to import to.');\n            const n = bytes.byteLength;\n            if (n < 512 || n % 512 != 0) {\n              toss('Byte array size is invalid for an SQLite db.');\n            }\n            const header = 'SQLite format 3';\n            for (let i = 0; i < header.length; ++i) {\n              if (header.charCodeAt(i) !== bytes[i]) {\n                toss('Input does not contain an SQLite database header.');\n              }\n            }\n            const nWrote = sah.write(bytes, { at: HEADER_OFFSET_DATA });\n            if (nWrote != n) {\n              this.setAssociatedPath(sah, '', 0);\n              toss(\n                'Expected to write ' + n + ' bytes but wrote ' + nWrote + '.',\n              );\n            } else {\n              sah.write(new Uint8Array([1, 1]), {\n                at: HEADER_OFFSET_DATA + 18,\n              });\n              this.setAssociatedPath(sah, name, capi.SQLITE_OPEN_MAIN_DB);\n            }\n            return nWrote;\n          }\n        }\n\n        class OpfsSAHPoolUtil {\n          #p;\n\n          constructor(sahPool) {\n            this.#p = sahPool;\n            this.vfsName = sahPool.vfsName;\n          }\n\n          async addCapacity(n) {\n            return this.#p.addCapacity(n);\n          }\n\n          async reduceCapacity(n) {\n            return this.#p.reduceCapacity(n);\n          }\n\n          getCapacity() {\n            return this.#p.getCapacity(this.#p);\n          }\n\n          getFileCount() {\n            return this.#p.getFileCount();\n          }\n          getFileNames() {\n            return this.#p.getFileNames();\n          }\n\n          async reserveMinimumCapacity(min) {\n            const c = this.#p.getCapacity();\n            return c < min ? this.#p.addCapacity(min - c) : c;\n          }\n\n          exportFile(name) {\n            return this.#p.exportFile(name);\n          }\n\n          importDb(name, bytes) {\n            return this.#p.importDb(name, bytes);\n          }\n\n          async wipeFiles() {\n            return this.#p.reset(true);\n          }\n\n          unlink(filename) {\n            return this.#p.deletePath(filename);\n          }\n\n          async removeVfs() {\n            return this.#p.removeVfs();\n          }\n        }\n\n        const apiVersionCheck = async () => {\n          const dh = await navigator.storage.getDirectory();\n          const fn = '.opfs-sahpool-sync-check-' + getRandomName();\n          const fh = await dh.getFileHandle(fn, { create: true });\n          const ah = await fh.createSyncAccessHandle();\n          const close = ah.close();\n          await close;\n          await dh.removeEntry(fn);\n          if (close?.then) {\n            toss(\n              'The local OPFS API is too old for opfs-sahpool:',\n              'it has an async FileSystemSyncAccessHandle.close() method.',\n            );\n          }\n          return true;\n        };\n\n        sqlite3.installOpfsSAHPoolVfs = async function (\n          options = Object.create(null),\n        ) {\n          options = Object.assign(\n            Object.create(null),\n            optionDefaults,\n            options || {},\n          );\n          const vfsName = options.name;\n          if (options.$testThrowPhase1) {\n            throw options.$testThrowPhase1;\n          }\n          if (initPromises[vfsName]) {\n            try {\n              const p = await initPromises[vfsName];\n\n              return p;\n            } catch (e) {\n              if (options.forceReinitIfPreviouslyFailed) {\n                delete initPromises[vfsName];\n              } else {\n                throw e;\n              }\n            }\n          }\n          if (\n            !globalThis.FileSystemHandle ||\n            !globalThis.FileSystemDirectoryHandle ||\n            !globalThis.FileSystemFileHandle ||\n            !globalThis.FileSystemFileHandle.prototype.createSyncAccessHandle ||\n            !navigator?.storage?.getDirectory\n          ) {\n            return (initPromises[vfsName] = Promise.reject(\n              new Error('Missing required OPFS APIs.'),\n            ));\n          }\n\n          return (initPromises[vfsName] = apiVersionCheck()\n            .then(async function () {\n              if (options.$testThrowPhase2) {\n                throw options.$testThrowPhase2;\n              }\n              const thePool = new OpfsSAHPool(options);\n              return thePool.isReady\n                .then(async () => {\n                  const poolUtil = new OpfsSAHPoolUtil(thePool);\n                  if (sqlite3.oo1) {\n                    const oo1 = sqlite3.oo1;\n                    const theVfs = thePool.getVfs();\n                    const OpfsSAHPoolDb = function (...args) {\n                      const opt = oo1.DB.dbCtorHelper.normalizeArgs(...args);\n                      opt.vfs = theVfs.$zName;\n                      oo1.DB.dbCtorHelper.call(this, opt);\n                    };\n                    OpfsSAHPoolDb.prototype = Object.create(oo1.DB.prototype);\n                    poolUtil.OpfsSAHPoolDb = OpfsSAHPoolDb;\n                  }\n                  thePool.log('VFS initialized.');\n                  return poolUtil;\n                })\n                .catch(async (e) => {\n                  await thePool.removeVfs().catch(() => {});\n                  throw e;\n                });\n            })\n            .catch((err) => {\n              return (initPromises[vfsName] = Promise.reject(err));\n            }));\n        };\n      });\n\n      ('use strict');\n      if ('undefined' !== typeof Module) {\n        const SABC = Object.assign(\n          Object.create(null),\n          {\n            exports:\n              'undefined' === typeof wasmExports ? Module['asm'] : wasmExports,\n            memory: Module.wasmMemory,\n          },\n          globalThis.sqlite3ApiConfig || {},\n        );\n\n        globalThis.sqlite3ApiConfig = SABC;\n        let sqlite3;\n        try {\n          sqlite3 = globalThis.sqlite3ApiBootstrap();\n        } catch (e) {\n          console.error('sqlite3ApiBootstrap() error:', e);\n          throw e;\n        } finally {\n          delete globalThis.sqlite3ApiBootstrap;\n          delete globalThis.sqlite3ApiConfig;\n        }\n\n        Module.sqlite3 = sqlite3;\n      } else {\n        console.warn(\n          'This is not running in an Emscripten module context, so',\n          'globalThis.sqlite3ApiBootstrap() is _not_ being called due to lack',\n          'of config info for the WASM environment.',\n          'It must be called manually.',\n        );\n      }\n    });\n\n    moduleRtn = readyPromise;\n\n    return moduleRtn;\n  };\n})();\n\nconst toExportForESM = (function () {\n  const originalInit = sqlite3InitModule;\n  if (!originalInit) {\n    throw new Error(\n      'Expecting globalThis.sqlite3InitModule to be defined by the Emscripten build.',\n    );\n  }\n\n  const initModuleState = (globalThis.sqlite3InitModuleState = Object.assign(\n    Object.create(null),\n    {\n      moduleScript: globalThis?.document?.currentScript,\n      isWorker: 'undefined' !== typeof WorkerGlobalScope,\n      location: globalThis.location,\n      urlParams: globalThis?.location?.href\n        ? new URL(globalThis.location.href).searchParams\n        : new URLSearchParams(),\n    },\n  ));\n  initModuleState.debugModule = initModuleState.urlParams.has(\n    'sqlite3.debugModule',\n  )\n    ? (...args) => console.warn('sqlite3.debugModule:', ...args)\n    : () => {};\n\n  if (initModuleState.urlParams.has('sqlite3.dir')) {\n    initModuleState.sqlite3Dir =\n      initModuleState.urlParams.get('sqlite3.dir') + '/';\n  } else if (initModuleState.moduleScript) {\n    const li = initModuleState.moduleScript.src.split('/');\n    li.pop();\n    initModuleState.sqlite3Dir = li.join('/') + '/';\n  }\n\n  globalThis.sqlite3InitModule = function ff(...args) {\n    return originalInit(...args)\n      .then((EmscriptenModule) => {\n        const s = EmscriptenModule.sqlite3;\n        s.scriptInfo = initModuleState;\n\n        if (ff.__isUnderTest) s.__isUnderTest = true;\n        const f = s.asyncPostInit;\n        delete s.asyncPostInit;\n        return f();\n      })\n      .catch((e) => {\n        console.error('Exception loading sqlite3 module:', e);\n        throw e;\n      });\n  };\n  globalThis.sqlite3InitModule.ready = originalInit.ready;\n\n  if (globalThis.sqlite3InitModuleState.moduleScript) {\n    const sim = globalThis.sqlite3InitModuleState;\n    let src = sim.moduleScript.src.split('/');\n    src.pop();\n    sim.scriptDir = src.join('/') + '/';\n  }\n  initModuleState.debugModule('sqlite3InitModuleState =', initModuleState);\n  if (0) {\n    console.warn('Replaced sqlite3InitModule()');\n    console.warn('globalThis.location.href =', globalThis.location.href);\n    if ('undefined' !== typeof document) {\n      console.warn(\n        'document.currentScript.src =',\n        document?.currentScript?.src,\n      );\n    }\n  }\n  return globalThis.sqlite3InitModule;\n})();\nsqlite3InitModule = toExportForESM;\nexport default sqlite3InitModule;\n","/*\n  2022-08-24\n\n  The author disclaims copyright to this source code.  In place of a\n  legal notice, here is a blessing:\n\n  *   May you do good and not evil.\n  *   May you find forgiveness for yourself and forgive others.\n  *   May you share freely, never taking more than you give.\n\n  ***********************************************************************\n\n  This file implements a Promise-based proxy for the sqlite3 Worker\n  API #1. It is intended to be included either from the main thread or\n  a Worker, but only if (A) the environment supports nested Workers\n  and (B) it's _not_ a Worker which loads the sqlite3 WASM/JS\n  module. This file's features will load that module and provide a\n  slightly simpler client-side interface than the slightly-lower-level\n  Worker API does.\n\n  This script necessarily exposes one global symbol, but clients may\n  freely `delete` that symbol after calling it.\n*/\n'use strict';\n\nglobalThis.sqlite3Worker1Promiser = function callee(\n  config = callee.defaultConfig,\n) {\n  if (1 === arguments.length && 'function' === typeof arguments[0]) {\n    const f = config;\n    config = Object.assign(Object.create(null), callee.defaultConfig);\n    config.onready = f;\n  } else {\n    config = Object.assign(Object.create(null), callee.defaultConfig, config);\n  }\n  const handlerMap = Object.create(null);\n  const noop = function () {};\n  const err = config.onerror || noop;\n  const debug = config.debug || noop;\n  const idTypeMap = config.generateMessageId ? undefined : Object.create(null);\n  const genMsgId =\n    config.generateMessageId ||\n    function (msg) {\n      return (\n        msg.type + '#' + (idTypeMap[msg.type] = (idTypeMap[msg.type] || 0) + 1)\n      );\n    };\n  const toss = (...args) => {\n    throw new Error(args.join(' '));\n  };\n  if (!config.worker) config.worker = callee.defaultConfig.worker;\n  if ('function' === typeof config.worker) config.worker = config.worker();\n  let dbId;\n  let promiserFunc;\n  config.worker.onmessage = function (ev) {\n    ev = ev.data;\n    debug('worker1.onmessage', ev);\n    let msgHandler = handlerMap[ev.messageId];\n    if (!msgHandler) {\n      if (ev && 'sqlite3-api' === ev.type && 'worker1-ready' === ev.result) {\n        if (config.onready) config.onready(promiserFunc);\n        return;\n      }\n      msgHandler = handlerMap[ev.type];\n      if (msgHandler && msgHandler.onrow) {\n        msgHandler.onrow(ev);\n        return;\n      }\n      if (config.onunhandled) config.onunhandled(arguments[0]);\n      else err('sqlite3Worker1Promiser() unhandled worker message:', ev);\n      return;\n    }\n    delete handlerMap[ev.messageId];\n    switch (ev.type) {\n      case 'error':\n        msgHandler.reject(ev);\n        return;\n      case 'open':\n        if (!dbId) dbId = ev.dbId;\n        break;\n      case 'close':\n        if (ev.dbId === dbId) dbId = undefined;\n        break;\n      default:\n        break;\n    }\n    try {\n      msgHandler.resolve(ev);\n    } catch (e) {\n      msgHandler.reject(e);\n    }\n  };\n  return (promiserFunc = function () {\n    let msg;\n    if (1 === arguments.length) {\n      msg = arguments[0];\n    } else if (2 === arguments.length) {\n      msg = Object.create(null);\n      msg.type = arguments[0];\n      msg.args = arguments[1];\n      msg.dbId = msg.args.dbId;\n    } else {\n      toss('Invalid arguments for sqlite3Worker1Promiser()-created factory.');\n    }\n    if (!msg.dbId && msg.type !== 'open') msg.dbId = dbId;\n    msg.messageId = genMsgId(msg);\n    msg.departureTime = performance.now();\n    const proxy = Object.create(null);\n    proxy.message = msg;\n    let rowCallbackId;\n    if ('exec' === msg.type && msg.args) {\n      if ('function' === typeof msg.args.callback) {\n        rowCallbackId = msg.messageId + ':row';\n        proxy.onrow = msg.args.callback;\n        msg.args.callback = rowCallbackId;\n        handlerMap[rowCallbackId] = proxy;\n      } else if ('string' === typeof msg.args.callback) {\n        toss(\n          'exec callback may not be a string when using the Promise interface.',\n        );\n      }\n    }\n\n    let p = new Promise(function (resolve, reject) {\n      proxy.resolve = resolve;\n      proxy.reject = reject;\n      handlerMap[msg.messageId] = proxy;\n      debug(\n        'Posting',\n        msg.type,\n        'message to Worker dbId=' + (dbId || 'default') + ':',\n        msg,\n      );\n      config.worker.postMessage(msg);\n    });\n    if (rowCallbackId) p = p.finally(() => delete handlerMap[rowCallbackId]);\n    return p;\n  });\n};\n\nglobalThis.sqlite3Worker1Promiser.defaultConfig = {\n  worker: function () {\n    return new Worker(\n      new URL('sqlite3-worker1-bundler-friendly.mjs', import.meta.url),\n      {\n        type: 'module',\n      },\n    );\n  },\n  onerror: (...args) => console.error('worker1 promiser error', ...args),\n};\n\nsqlite3Worker1Promiser.v2 = function (config) {\n  let oldFunc;\n  if ('function' == typeof config) {\n    oldFunc = config;\n    config = {};\n  } else if ('function' === typeof config?.onready) {\n    oldFunc = config.onready;\n    delete config.onready;\n  }\n  const promiseProxy = Object.create(null);\n  config = Object.assign(config || Object.create(null), {\n    onready: async function (func) {\n      try {\n        if (oldFunc) await oldFunc(func);\n        promiseProxy.resolve(func);\n      } catch (e) {\n        promiseProxy.reject(e);\n      }\n    },\n  });\n  const p = new Promise(function (resolve, reject) {\n    promiseProxy.resolve = resolve;\n    promiseProxy.reject = reject;\n  });\n  try {\n    this.original(config);\n  } catch (e) {\n    promiseProxy.reject(e);\n  }\n  return p;\n}.bind({\n  original: sqlite3Worker1Promiser,\n});\n\nexport default sqlite3Worker1Promiser.v2;\n","export function createMutex() {\n    let promise;\n    let resolve;\n    const lock = async () => {\n        while (promise) {\n            await promise;\n        }\n        promise = new Promise((res) => {\n            resolve = res;\n        });\n    };\n    const unlock = async () => {\n        const res = resolve;\n        promise = undefined;\n        resolve = undefined;\n        res?.();\n    };\n    return { lock, unlock };\n}\n//# sourceMappingURL=create-mutex.js.map","export function execOnDb(db, statement) {\n    const statementData = {\n        rows: [],\n        columns: [],\n    };\n    const rows = db.exec({\n        sql: statement.sql,\n        bind: statement.params,\n        returnValue: 'resultRows',\n        rowMode: 'array',\n        columnNames: statementData.columns,\n    });\n    switch (statement.method) {\n        case 'run':\n            break;\n        case 'get':\n            statementData.rows = rows[0] ?? [];\n            break;\n        case 'all':\n        default:\n            statementData.rows = rows;\n            break;\n    }\n    return statementData;\n}\n//# sourceMappingURL=exec-on-db.js.map","export function parseDatabasePath(path) {\n    const directories = path.split(/[\\\\/]/).filter((part) => part !== '');\n    const fileName = directories.pop();\n    if (!fileName) {\n        throw new Error('Database path is invalid.');\n    }\n    const tempFileNames = ['journal', 'wal', 'shm'].map((ext) => `${fileName}-${ext}`);\n    const getDirectoryHandle = async () => {\n        let dirHandle = await navigator.storage.getDirectory();\n        for (let dirName of directories)\n            dirHandle = await dirHandle.getDirectoryHandle(dirName);\n        return dirHandle;\n    };\n    return {\n        directories,\n        fileName,\n        tempFileNames,\n        getDirectoryHandle,\n    };\n}\n//# sourceMappingURL=parse-database-path.js.map","export async function normalizeDatabaseFile(dbFile, convertStreamTo) {\n    let bufferOrStream;\n    if (dbFile instanceof Blob) {\n        bufferOrStream = dbFile.stream();\n    }\n    else {\n        bufferOrStream = dbFile;\n    }\n    if (bufferOrStream instanceof ReadableStream && convertStreamTo) {\n        const stream = bufferOrStream;\n        const reader = stream.getReader();\n        switch (convertStreamTo) {\n            case 'callback':\n                return async () => {\n                    const chunk = await reader.read();\n                    return chunk.value;\n                };\n            case 'buffer':\n                const chunks = [];\n                let streamDone = false;\n                while (!streamDone) {\n                    const chunk = await reader.read();\n                    if (chunk.value)\n                        chunks.push(chunk.value);\n                    streamDone = chunk.done;\n                }\n                const arrayLength = chunks.reduce((length, chunk) => {\n                    return length + chunk.length;\n                }, 0);\n                const buffer = new Uint8Array(arrayLength);\n                let offset = 0;\n                chunks.forEach((chunk) => {\n                    buffer.set(chunk, offset);\n                    offset += chunk.length;\n                });\n                return buffer;\n        }\n    }\n    else {\n        return bufferOrStream;\n    }\n}\n//# sourceMappingURL=normalize-database-file.js.map","import sqlite3InitModule from '@sqlite.org/sqlite-wasm';\nimport coincident from 'coincident';\nimport { createMutex } from './lib/create-mutex.js';\nimport { execOnDb } from './lib/exec-on-db.js';\nimport { parseDatabasePath } from './lib/parse-database-path.js';\nimport { normalizeDatabaseFile } from './lib/normalize-database-file.js';\nexport class SQLocalProcessor {\n    constructor(sameContext) {\n        Object.defineProperty(this, \"sqlite3\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"db\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"dbStorageType\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"config\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: {}\n        });\n        Object.defineProperty(this, \"pointers\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: []\n        });\n        Object.defineProperty(this, \"userFunctions\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: new Map()\n        });\n        Object.defineProperty(this, \"initMutex\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: createMutex()\n        });\n        Object.defineProperty(this, \"transactionMutex\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: createMutex()\n        });\n        Object.defineProperty(this, \"transactionKey\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: null\n        });\n        Object.defineProperty(this, \"proxy\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"reinitChannel\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"onmessage\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"init\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: async (reason) => {\n                if (!this.config.databasePath)\n                    return;\n                await this.initMutex.lock();\n                const { databasePath, readOnly, verbose } = this.config;\n                const flags = [\n                    readOnly === true ? 'r' : 'cw',\n                    verbose === true ? 't' : '',\n                ].join('');\n                try {\n                    if (!this.sqlite3) {\n                        this.sqlite3 = await sqlite3InitModule();\n                    }\n                    if (this.db) {\n                        this.destroy();\n                    }\n                    if ('opfs' in this.sqlite3 && databasePath !== ':memory:') {\n                        this.db = new this.sqlite3.oo1.OpfsDb(databasePath, flags);\n                        this.dbStorageType = 'opfs';\n                    }\n                    else {\n                        this.db = new this.sqlite3.oo1.DB(databasePath, flags);\n                        this.dbStorageType = 'memory';\n                        if (databasePath !== ':memory:') {\n                            console.warn(`The origin private file system is not available, so ${databasePath} will not be persisted. Make sure your web server is configured to use the correct HTTP response headers (See https://sqlocal.dallashoffman.com/guide/setup#cross-origin-isolation).`);\n                        }\n                    }\n                    if (this.dbStorageType !== 'memory') {\n                        this.reinitChannel = new BroadcastChannel(`_sqlocal_reinit_(${databasePath})`);\n                        this.reinitChannel.onmessage = (event) => {\n                            if (this.config.clientKey !== event.data.clientKey) {\n                                this.init(event.data.reason);\n                            }\n                        };\n                    }\n                    this.userFunctions.forEach(this.initUserFunction);\n                    this.execInitStatements();\n                    this.emitMessage({ type: 'event', event: 'connect', reason });\n                }\n                catch (error) {\n                    this.emitMessage({\n                        type: 'error',\n                        error,\n                        queryKey: null,\n                    });\n                    this.destroy();\n                }\n                finally {\n                    await this.initMutex.unlock();\n                }\n            }\n        });\n        Object.defineProperty(this, \"postMessage\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: async (event, _transfer) => {\n                const message = event instanceof MessageEvent ? event.data : event;\n                await this.initMutex.lock();\n                switch (message.type) {\n                    case 'config':\n                        this.editConfig(message);\n                        break;\n                    case 'query':\n                    case 'batch':\n                    case 'transaction':\n                        this.exec(message);\n                        break;\n                    case 'function':\n                        this.createUserFunction(message);\n                        break;\n                    case 'getinfo':\n                        this.getDatabaseInfo(message);\n                        break;\n                    case 'import':\n                        this.importDb(message);\n                        break;\n                    case 'export':\n                        this.exportDb(message);\n                        break;\n                    case 'delete':\n                        this.deleteDb(message);\n                        break;\n                    case 'destroy':\n                        this.destroy(message);\n                        break;\n                }\n                await this.initMutex.unlock();\n            }\n        });\n        Object.defineProperty(this, \"emitMessage\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: (message, transfer = []) => {\n                if (this.onmessage) {\n                    this.onmessage(message, transfer);\n                }\n            }\n        });\n        Object.defineProperty(this, \"editConfig\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: (message) => {\n                this.config = message.config;\n                this.init('initial');\n            }\n        });\n        Object.defineProperty(this, \"exec\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: async (message) => {\n                if (!this.db)\n                    return;\n                try {\n                    const response = {\n                        type: 'data',\n                        queryKey: message.queryKey,\n                        data: [],\n                    };\n                    switch (message.type) {\n                        case 'query':\n                            const partOfTransaction = this.transactionKey !== null &&\n                                this.transactionKey === message.transactionKey;\n                            try {\n                                if (!partOfTransaction) {\n                                    await this.transactionMutex.lock();\n                                }\n                                const statementData = execOnDb(this.db, message);\n                                response.data.push(statementData);\n                            }\n                            finally {\n                                if (!partOfTransaction) {\n                                    await this.transactionMutex.unlock();\n                                }\n                            }\n                            break;\n                        case 'batch':\n                            try {\n                                await this.transactionMutex.lock();\n                                this.db.transaction((tx) => {\n                                    for (let statement of message.statements) {\n                                        const statementData = execOnDb(tx, statement);\n                                        response.data.push(statementData);\n                                    }\n                                });\n                            }\n                            finally {\n                                await this.transactionMutex.unlock();\n                            }\n                            break;\n                        case 'transaction':\n                            if (message.action === 'begin') {\n                                await this.transactionMutex.lock();\n                                this.transactionKey = message.transactionKey;\n                                this.db.exec({ sql: 'BEGIN' });\n                            }\n                            if ((message.action === 'commit' || message.action === 'rollback') &&\n                                this.transactionKey !== null &&\n                                this.transactionKey === message.transactionKey) {\n                                const sql = message.action === 'commit' ? 'COMMIT' : 'ROLLBACK';\n                                this.db.exec({ sql });\n                                this.transactionKey = null;\n                                await this.transactionMutex.unlock();\n                            }\n                            break;\n                    }\n                    this.emitMessage(response);\n                }\n                catch (error) {\n                    this.emitMessage({\n                        type: 'error',\n                        error,\n                        queryKey: message.queryKey,\n                    });\n                }\n            }\n        });\n        Object.defineProperty(this, \"execInitStatements\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: () => {\n                if (this.db && this.config.onInitStatements) {\n                    for (let statement of this.config.onInitStatements) {\n                        execOnDb(this.db, statement);\n                    }\n                }\n            }\n        });\n        Object.defineProperty(this, \"getDatabaseInfo\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: async (message) => {\n                try {\n                    const databasePath = this.config.databasePath;\n                    const storageType = this.dbStorageType;\n                    const persisted = storageType !== undefined\n                        ? storageType !== 'memory'\n                            ? await navigator.storage?.persisted()\n                            : false\n                        : undefined;\n                    const sizeResult = this.db?.exec({\n                        sql: 'SELECT page_count * page_size AS size FROM pragma_page_count(), pragma_page_size()',\n                        returnValue: 'resultRows',\n                        rowMode: 'array',\n                    });\n                    const size = sizeResult?.[0]?.[0];\n                    const databaseSizeBytes = typeof size === 'number' ? size : undefined;\n                    this.emitMessage({\n                        type: 'info',\n                        queryKey: message.queryKey,\n                        info: { databasePath, databaseSizeBytes, storageType, persisted },\n                    });\n                }\n                catch (error) {\n                    this.emitMessage({\n                        type: 'error',\n                        queryKey: message.queryKey,\n                        error,\n                    });\n                }\n            }\n        });\n        Object.defineProperty(this, \"createUserFunction\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: (message) => {\n                const { functionName, functionType, queryKey } = message;\n                let func;\n                if (this.userFunctions.has(functionName)) {\n                    this.emitMessage({\n                        type: 'error',\n                        error: new Error(`A user-defined function with the name \"${functionName}\" has already been created for this SQLocal instance.`),\n                        queryKey,\n                    });\n                    return;\n                }\n                if (functionType === 'callback') {\n                    func = (...args) => {\n                        this.emitMessage({\n                            type: 'callback',\n                            name: functionName,\n                            args: args,\n                        });\n                    };\n                }\n                else {\n                    func = this.proxy[`_sqlocal_func_${functionName}`];\n                }\n                try {\n                    this.initUserFunction({\n                        type: functionType,\n                        name: functionName,\n                        func,\n                    });\n                    this.emitMessage({\n                        type: 'success',\n                        queryKey,\n                    });\n                }\n                catch (error) {\n                    this.emitMessage({\n                        type: 'error',\n                        error,\n                        queryKey,\n                    });\n                }\n            }\n        });\n        Object.defineProperty(this, \"initUserFunction\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: (fn) => {\n                if (!this.db)\n                    return;\n                this.db.createFunction({\n                    name: fn.name,\n                    xFunc: (_, ...args) => fn.func(...args),\n                    arity: -1,\n                });\n                this.userFunctions.set(fn.name, fn);\n            }\n        });\n        Object.defineProperty(this, \"importDb\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: async (message) => {\n                if (!this.sqlite3 || !this.config.databasePath || !this.db)\n                    return;\n                const { queryKey, database } = message;\n                let errored = false;\n                try {\n                    if (this.dbStorageType === 'opfs') {\n                        this.destroy();\n                        const data = await normalizeDatabaseFile(database, 'callback');\n                        await this.sqlite3.oo1.OpfsDb.importDb(this.config.databasePath, data);\n                    }\n                    else {\n                        const data = await normalizeDatabaseFile(database, 'buffer');\n                        const dataPointer = this.sqlite3.wasm.allocFromTypedArray(data);\n                        this.pointers.push(dataPointer);\n                        const resultCode = this.sqlite3.capi.sqlite3_deserialize(this.db, 'main', dataPointer, data.byteLength, data.byteLength, this.config.readOnly\n                            ? this.sqlite3.capi.SQLITE_DESERIALIZE_READONLY\n                            : this.sqlite3.capi.SQLITE_DESERIALIZE_RESIZEABLE);\n                        this.db.checkRc(resultCode);\n                        this.execInitStatements();\n                    }\n                }\n                catch (error) {\n                    this.emitMessage({\n                        type: 'error',\n                        error,\n                        queryKey,\n                    });\n                    errored = true;\n                }\n                finally {\n                    if (this.dbStorageType !== 'memory') {\n                        await this.init('overwrite');\n                    }\n                }\n                if (!errored) {\n                    this.emitMessage({\n                        type: 'success',\n                        queryKey,\n                    });\n                }\n            }\n        });\n        Object.defineProperty(this, \"exportDb\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: (message) => {\n                if (!this.sqlite3 || !this.db)\n                    return;\n                const { queryKey } = message;\n                try {\n                    const buffer = this.sqlite3.capi.sqlite3_js_db_export(this.db);\n                    this.emitMessage({\n                        type: 'buffer',\n                        queryKey,\n                        buffer,\n                    }, [buffer]);\n                }\n                catch (error) {\n                    this.emitMessage({\n                        type: 'error',\n                        error,\n                        queryKey,\n                    });\n                }\n            }\n        });\n        Object.defineProperty(this, \"deleteDb\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: async (message) => {\n                if (!this.config.databasePath)\n                    return;\n                const { queryKey } = message;\n                let errored = false;\n                try {\n                    if (this.dbStorageType === 'opfs') {\n                        const { getDirectoryHandle, fileName, tempFileNames } = parseDatabasePath(this.config.databasePath);\n                        const dirHandle = await getDirectoryHandle();\n                        const fileNames = [fileName, ...tempFileNames];\n                        this.destroy();\n                        await Promise.all(fileNames.map(async (name) => {\n                            return dirHandle.removeEntry(name).catch((err) => {\n                                if (!(err instanceof DOMException && err.name === 'NotFoundError')) {\n                                    throw err;\n                                }\n                            });\n                        }));\n                    }\n                    else {\n                        this.destroy();\n                    }\n                }\n                catch (error) {\n                    this.emitMessage({\n                        type: 'error',\n                        error,\n                        queryKey,\n                    });\n                    errored = true;\n                }\n                finally {\n                    await this.init('delete');\n                }\n                if (!errored) {\n                    this.emitMessage({\n                        type: 'success',\n                        queryKey,\n                    });\n                }\n            }\n        });\n        Object.defineProperty(this, \"destroy\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: (message) => {\n                if (this.db) {\n                    this.db.exec({ sql: 'PRAGMA optimize' });\n                    this.db.close();\n                    this.db = undefined;\n                    this.dbStorageType = undefined;\n                }\n                if (this.reinitChannel) {\n                    this.reinitChannel.close();\n                    this.reinitChannel = undefined;\n                }\n                this.pointers.forEach((pointer) => this.sqlite3?.wasm.dealloc(pointer));\n                this.pointers = [];\n                if (message) {\n                    this.emitMessage({\n                        type: 'success',\n                        queryKey: message.queryKey,\n                    });\n                }\n            }\n        });\n        const proxy = sameContext ? globalThis : coincident(globalThis);\n        this.proxy = proxy;\n        this.init('initial');\n    }\n}\n//# sourceMappingURL=processor.js.map","export function sqlTag(queryTemplate, ...params) {\n    return {\n        sql: queryTemplate.join('?'),\n        params,\n    };\n}\n//# sourceMappingURL=sql-tag.js.map","function isArrayOfArrays(rows) {\n    return !rows.some((row) => !Array.isArray(row));\n}\nexport function convertRowsToObjects(rows, columns) {\n    let checkedRows;\n    if (isArrayOfArrays(rows)) {\n        checkedRows = rows;\n    }\n    else {\n        checkedRows = [rows];\n    }\n    return checkedRows.map((row) => {\n        const rowObj = {};\n        columns.forEach((column, columnIndex) => {\n            rowObj[column] = row[columnIndex];\n        });\n        return rowObj;\n    });\n}\n//# sourceMappingURL=convert-rows-to-objects.js.map","import { sqlTag } from './sql-tag.js';\nfunction isDrizzleStatement(statement) {\n    return (typeof statement === 'object' &&\n        statement !== null &&\n        'getSQL' in statement &&\n        typeof statement.getSQL === 'function');\n}\nfunction isStatement(statement) {\n    return (typeof statement === 'object' &&\n        statement !== null &&\n        'sql' in statement === true &&\n        typeof statement.sql === 'string' &&\n        'params' in statement === true);\n}\nexport function normalizeStatement(statement) {\n    if (typeof statement === 'function') {\n        statement = statement(sqlTag);\n    }\n    if (isDrizzleStatement(statement)) {\n        try {\n            if (!('toSQL' in statement && typeof statement.toSQL === 'function')) {\n                throw 1;\n            }\n            const drizzleStatement = statement.toSQL();\n            if (!isStatement(drizzleStatement)) {\n                throw 2;\n            }\n            return drizzleStatement;\n        }\n        catch {\n            throw new Error('The passed statement could not be parsed.');\n        }\n    }\n    const sql = statement.sql;\n    let params = [];\n    if ('params' in statement) {\n        params = statement.params;\n    }\n    else if ('parameters' in statement) {\n        params = statement.parameters;\n    }\n    return { sql, params };\n}\n//# sourceMappingURL=normalize-statement.js.map","export function getQueryKey() {\n    return crypto.randomUUID();\n}\n//# sourceMappingURL=get-query-key.js.map","import { sqlTag } from './sql-tag.js';\nexport function normalizeSql(maybeQueryTemplate, params) {\n    let statement;\n    if (typeof maybeQueryTemplate === 'string') {\n        statement = { sql: maybeQueryTemplate, params };\n    }\n    else {\n        statement = sqlTag(maybeQueryTemplate, ...params);\n    }\n    return statement;\n}\n//# sourceMappingURL=normalize-sql.js.map","export async function mutationLock(mode, bypass, config, mutation) {\n    if (!bypass && 'locks' in navigator) {\n        return navigator.locks.request(`_sqlocal_mutation_(${config.databasePath})`, { mode }, mutation);\n    }\n    else {\n        return mutation();\n    }\n}\n//# sourceMappingURL=mutation-lock.js.map","import coincident from 'coincident';\nimport { SQLocalProcessor } from './processor.js';\nimport { sqlTag } from './lib/sql-tag.js';\nimport { convertRowsToObjects } from './lib/convert-rows-to-objects.js';\nimport { normalizeStatement } from './lib/normalize-statement.js';\nimport { getQueryKey } from './lib/get-query-key.js';\nimport { normalizeSql } from './lib/normalize-sql.js';\nimport { parseDatabasePath } from './lib/parse-database-path.js';\nimport { mutationLock } from './lib/mutation-lock.js';\nimport { normalizeDatabaseFile } from './lib/normalize-database-file.js';\nexport class SQLocal {\n    constructor(config) {\n        Object.defineProperty(this, \"config\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"clientKey\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"processor\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"isDestroyed\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: false\n        });\n        Object.defineProperty(this, \"bypassMutationLock\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: false\n        });\n        Object.defineProperty(this, \"userCallbacks\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: new Map()\n        });\n        Object.defineProperty(this, \"queriesInProgress\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: new Map()\n        });\n        Object.defineProperty(this, \"proxy\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"reinitChannel\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"processMessageEvent\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: (event) => {\n                const message = event instanceof MessageEvent ? event.data : event;\n                const queries = this.queriesInProgress;\n                switch (message.type) {\n                    case 'success':\n                    case 'data':\n                    case 'buffer':\n                    case 'info':\n                    case 'error':\n                        if (message.queryKey && queries.has(message.queryKey)) {\n                            const [resolve, reject] = queries.get(message.queryKey);\n                            if (message.type === 'error') {\n                                reject(message.error);\n                            }\n                            else {\n                                resolve(message);\n                            }\n                            queries.delete(message.queryKey);\n                        }\n                        else if (message.type === 'error') {\n                            throw message.error;\n                        }\n                        break;\n                    case 'callback':\n                        const userCallback = this.userCallbacks.get(message.name);\n                        if (userCallback) {\n                            userCallback(...(message.args ?? []));\n                        }\n                        break;\n                    case 'event':\n                        this.config.onConnect?.(message.reason);\n                        break;\n                }\n            }\n        });\n        Object.defineProperty(this, \"createQuery\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: async (message) => {\n                return mutationLock('shared', this.bypassMutationLock ||\n                    message.type === 'import' ||\n                    message.type === 'delete', this.config, async () => {\n                    if (this.isDestroyed === true) {\n                        throw new Error('This SQLocal client has been destroyed. You will need to initialize a new client in order to make further queries.');\n                    }\n                    const queryKey = getQueryKey();\n                    switch (message.type) {\n                        case 'import':\n                            this.processor.postMessage({\n                                ...message,\n                                queryKey,\n                            }, [message.database]);\n                            break;\n                        default:\n                            this.processor.postMessage({\n                                ...message,\n                                queryKey,\n                            });\n                            break;\n                    }\n                    return new Promise((resolve, reject) => {\n                        this.queriesInProgress.set(queryKey, [resolve, reject]);\n                    });\n                });\n            }\n        });\n        Object.defineProperty(this, \"exec\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: async (sql, params, method = 'all', transactionKey) => {\n                const message = await this.createQuery({\n                    type: 'query',\n                    transactionKey,\n                    sql,\n                    params,\n                    method,\n                });\n                const data = {\n                    rows: [],\n                    columns: [],\n                };\n                if (message.type === 'data') {\n                    data.rows = message.data[0]?.rows ?? [];\n                    data.columns = message.data[0]?.columns ?? [];\n                }\n                return data;\n            }\n        });\n        Object.defineProperty(this, \"execBatch\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: async (statements) => {\n                const message = await this.createQuery({\n                    type: 'batch',\n                    statements,\n                });\n                const data = new Array(statements.length).fill({\n                    rows: [],\n                    columns: [],\n                });\n                if (message.type === 'data') {\n                    message.data.forEach((result, resultIndex) => {\n                        data[resultIndex] = result;\n                    });\n                }\n                return data;\n            }\n        });\n        Object.defineProperty(this, \"sql\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: async (queryTemplate, ...params) => {\n                const statement = normalizeSql(queryTemplate, params);\n                const { rows, columns } = await this.exec(statement.sql, statement.params, 'all');\n                const resultRecords = convertRowsToObjects(rows, columns);\n                return resultRecords;\n            }\n        });\n        Object.defineProperty(this, \"batch\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: async (passStatements) => {\n                const statements = passStatements(sqlTag);\n                const data = await this.execBatch(statements);\n                return data.map(({ rows, columns }) => {\n                    const resultRecords = convertRowsToObjects(rows, columns);\n                    return resultRecords;\n                });\n            }\n        });\n        Object.defineProperty(this, \"beginTransaction\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: async () => {\n                const transactionKey = getQueryKey();\n                await this.createQuery({\n                    type: 'transaction',\n                    transactionKey,\n                    action: 'begin',\n                });\n                const query = async (passStatement) => {\n                    const statement = normalizeStatement(passStatement);\n                    const { rows, columns } = await this.exec(statement.sql, statement.params, 'all', transactionKey);\n                    const resultRecords = convertRowsToObjects(rows, columns);\n                    return resultRecords;\n                };\n                const sql = async (queryTemplate, ...params) => {\n                    const statement = normalizeSql(queryTemplate, params);\n                    const resultRecords = await query(statement);\n                    return resultRecords;\n                };\n                const commit = async () => {\n                    await this.createQuery({\n                        type: 'transaction',\n                        transactionKey,\n                        action: 'commit',\n                    });\n                };\n                const rollback = async () => {\n                    await this.createQuery({\n                        type: 'transaction',\n                        transactionKey,\n                        action: 'rollback',\n                    });\n                };\n                return {\n                    query,\n                    sql,\n                    commit,\n                    rollback,\n                };\n            }\n        });\n        Object.defineProperty(this, \"transaction\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: async (transaction) => {\n                return mutationLock('exclusive', false, this.config, async () => {\n                    let tx;\n                    this.bypassMutationLock = true;\n                    try {\n                        tx = await this.beginTransaction();\n                        const result = await transaction({\n                            sql: tx.sql,\n                            query: tx.query,\n                        });\n                        await tx.commit();\n                        return result;\n                    }\n                    catch (err) {\n                        await tx?.rollback();\n                        throw err;\n                    }\n                    finally {\n                        this.bypassMutationLock = false;\n                    }\n                });\n            }\n        });\n        Object.defineProperty(this, \"createCallbackFunction\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: async (funcName, func) => {\n                await this.createQuery({\n                    type: 'function',\n                    functionName: funcName,\n                    functionType: 'callback',\n                });\n                this.userCallbacks.set(funcName, func);\n            }\n        });\n        Object.defineProperty(this, \"createScalarFunction\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: async (funcName, func) => {\n                const key = `_sqlocal_func_${funcName}`;\n                if (this.proxy === globalThis) {\n                    this.proxy[key] = func;\n                }\n                await this.createQuery({\n                    type: 'function',\n                    functionName: funcName,\n                    functionType: 'scalar',\n                });\n                if (this.proxy !== globalThis) {\n                    this.proxy[key] = func;\n                }\n            }\n        });\n        Object.defineProperty(this, \"getDatabaseInfo\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: async () => {\n                const message = await this.createQuery({ type: 'getinfo' });\n                if (message.type === 'info') {\n                    return message.info;\n                }\n                else {\n                    throw new Error('The database failed to return valid information.');\n                }\n            }\n        });\n        Object.defineProperty(this, \"getDatabaseFile\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: async () => {\n                let fileName, fileBuffer;\n                const { storageType } = await this.getDatabaseInfo();\n                if (storageType === 'opfs') {\n                    const path = parseDatabasePath(this.config.databasePath);\n                    const { directories, getDirectoryHandle } = path;\n                    fileName = path.fileName;\n                    const tempFileName = `backup-${Date.now()}--${fileName}`;\n                    const tempFilePath = `${directories.join('/')}/${tempFileName}`;\n                    await this.exec('VACUUM INTO ?', [tempFilePath]);\n                    const dirHandle = await getDirectoryHandle();\n                    const fileHandle = await dirHandle.getFileHandle(tempFileName);\n                    const file = await fileHandle.getFile();\n                    fileBuffer = await file.arrayBuffer();\n                    await dirHandle.removeEntry(tempFileName);\n                }\n                else {\n                    const message = await this.createQuery({ type: 'export' });\n                    if (message.type === 'buffer') {\n                        fileName = 'database.sqlite3';\n                        fileBuffer = message.buffer;\n                    }\n                    else {\n                        throw new Error('The database failed to export.');\n                    }\n                }\n                return new File([fileBuffer], fileName, {\n                    type: 'application/x-sqlite3',\n                });\n            }\n        });\n        Object.defineProperty(this, \"overwriteDatabaseFile\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: async (databaseFile, beforeUnlock) => {\n                await mutationLock('exclusive', false, this.config, async () => {\n                    try {\n                        const database = await normalizeDatabaseFile(databaseFile);\n                        await this.createQuery({\n                            type: 'import',\n                            database,\n                        });\n                        if (typeof beforeUnlock === 'function') {\n                            this.bypassMutationLock = true;\n                            await beforeUnlock();\n                        }\n                        this.reinitChannel.postMessage({\n                            clientKey: this.clientKey,\n                            reason: 'overwrite',\n                        });\n                    }\n                    finally {\n                        this.bypassMutationLock = false;\n                    }\n                });\n            }\n        });\n        Object.defineProperty(this, \"deleteDatabaseFile\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: async (beforeUnlock) => {\n                await mutationLock('exclusive', false, this.config, async () => {\n                    try {\n                        await this.createQuery({\n                            type: 'delete',\n                        });\n                        if (typeof beforeUnlock === 'function') {\n                            this.bypassMutationLock = true;\n                            await beforeUnlock();\n                        }\n                        this.reinitChannel.postMessage({\n                            clientKey: this.clientKey,\n                            reason: 'delete',\n                        });\n                    }\n                    finally {\n                        this.bypassMutationLock = false;\n                    }\n                });\n            }\n        });\n        Object.defineProperty(this, \"destroy\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: async () => {\n                await this.createQuery({ type: 'destroy' });\n                if (this.processor instanceof Worker) {\n                    this.processor.removeEventListener('message', this.processMessageEvent);\n                    this.processor.terminate();\n                }\n                this.queriesInProgress.clear();\n                this.userCallbacks.clear();\n                this.reinitChannel.close();\n                this.isDestroyed = true;\n            }\n        });\n        const clientConfig = typeof config === 'string' ? { databasePath: config } : config;\n        const { onInit, onConnect, ...commonConfig } = clientConfig;\n        this.config = clientConfig;\n        this.clientKey = getQueryKey();\n        this.reinitChannel = new BroadcastChannel(`_sqlocal_reinit_(${commonConfig.databasePath})`);\n        if (typeof globalThis.Worker !== 'undefined' &&\n            commonConfig.databasePath !== ':memory:') {\n            this.processor = new Worker(new URL('./worker', import.meta.url), {\n                type: 'module',\n            });\n            this.processor.addEventListener('message', this.processMessageEvent);\n            this.proxy = coincident(this.processor);\n        }\n        else {\n            this.processor = new SQLocalProcessor(true);\n            this.processor.onmessage = (message) => this.processMessageEvent(message);\n            this.proxy = globalThis;\n        }\n        this.processor.postMessage({\n            type: 'config',\n            config: {\n                ...commonConfig,\n                clientKey: this.clientKey,\n                onInitStatements: onInit?.(sqlTag) ?? [],\n            },\n        });\n    }\n}\n//# sourceMappingURL=client.js.map","import { assertTaskQueueRow, Payload, QueryResult, TaskRow, TaskState } from '@/types.ts';\n\nconst schema = `\n-- When a task returns something other than undefined it is turned into JSON and stored here\nCREATE TABLE task_result (id VARCHAR(36) PRIMARY KEY, result TEXT);\n\nCREATE TABLE task_status (\n    id INTEGER PRIMARY KEY,                 -- Status ID (e.g., 1 for 'queued')\n    name VARCHAR(16) UNIQUE NOT NULL,       -- Status name (e.g., 'queued', 'executing')\n    is_terminal BOOLEAN DEFAULT 0 NOT NULL  -- Whether this status is terminal\n);\n\nINSERT INTO task_status (id, name, is_terminal) VALUES\n    (${TaskState.queued}, 'queued', 0),         -- task is wating to be picked up\n    (${TaskState.executing}, 'executing', 0),   -- task is being processed\n    (${TaskState.successful}, 'successful', 1), -- task has been completed successfully\n    (${TaskState.failed}, 'failed', 0);         -- task has failed and can be retried\n\nCREATE TABLE task_queue (\n-- Datbase row id\nid INTEGER PRIMARY KEY AUTOINCREMENT,\n-- User specified string that uniquely identifies a task                   \ntask_id VARCHAR(36) UNIQUE NOT NULL,\n-- The JSON payload of the task                     \ntask_payload TEXT NOT NULL,\n-- Foreign key to task_status                                    \nstatus_id INTEGER NOT NULL REFERENCES task_status(id),\n-- Retry counter, must be non-negative    \nretries INTEGER DEFAULT 0 CHECK (retries >= 0),\n-- Task creation timestamp          \ncreated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,\n-- Last update timestamp  \nupdated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,\n-- Completion timestamp (NULL if not completed)  \ncompleted_at TIMESTAMP);\n\n--PRAGMA journal_mode=WAL;\n`;\n\nfunction toTaskRow(dbRow: unknown): TaskRow {\n  assertTaskQueueRow(dbRow);\n  return {\n    id: dbRow.id,\n    taskId: dbRow.task_id,\n    payload: JSON.parse(dbRow.task_payload) as Payload,\n  } as TaskRow;\n}\n\nfunction addTaskQuery(): string {\n  return `\n        INSERT INTO task_queue (task_id, task_payload, status_id)\n        VALUES (?, ?, ${TaskState.queued});\n    `;\n}\n\nfunction addTaskIfNotExistsQuery(): string {\n  return `\n        INSERT OR IGNORE INTO task_queue (task_id, task_payload, status_id)\n        VALUES (?, ?, ${TaskState.queued});\n    `;\n}\n\nfunction reserveTaskAtomic(): string {\n  return `\n      UPDATE task_queue\n      SET\n        status_id = ${TaskState.executing},\n        updated_at = CURRENT_TIMESTAMP\n      WHERE id IN (\n        SELECT id\n        FROM task_queue\n        WHERE status_id = ${TaskState.queued}\n        ORDER BY id ASC\n        LIMIT 1\n      )\n      RETURNING *;\n    `;\n}\n\nfunction reserveTaskQuery(): string {\n  return `\n        SELECT * FROM task_queue\n        WHERE status_id = ${TaskState.queued} -- 'queued'\n        ORDER BY id ASC\n        LIMIT 1;\n    `;\n}\n\nfunction updateTaskStatusQuery(rowId: number, status: number): string {\n  return `\n        UPDATE task_queue\n        SET status_id = ${status}, updated_at = CURRENT_TIMESTAMP\n        WHERE id = ${rowId};\n    `;\n}\n\nfunction taskSuccessQuery(rowId: number): string {\n  return `\n        UPDATE task_queue\n        SET status_id = ${TaskState.successful},\n        completed_at = CURRENT_TIMESTAMP, \n        updated_at = CURRENT_TIMESTAMP\n        WHERE id = ${rowId};\n    `;\n}\n\nfunction taskFailureQuery(rowId: number): string {\n  return `\n        UPDATE task_queue\n        SET status_id = ${TaskState.failed},\n        updated_at = CURRENT_TIMESTAMP\n        WHERE id = ${rowId};\n    `;\n}\n\nfunction requeueFailuresQuery(): string {\n  return `\n        UPDATE task_queue\n        SET status_id = ${TaskState.queued},\n        updated_at = CURRENT_TIMESTAMP\n        WHERE status_id = ${TaskState.failed};\n    `;\n}\n\nfunction getSingleStatusQuery(status: number): string {\n  return `\n        SELECT COUNT(*) FROM task_queue\n        WHERE status_id = ${status};\n    `;\n}\n\nfunction getAllStatusQuery(): string {\n  return `SELECT status_id, COUNT(*) AS count\n            FROM task_queue\n            GROUP BY status_id;\n    `;\n}\n\ninterface StatusQuery extends QueryResult {\n  status_id: number;\n  count: number;\n}\n\nexport {\n  schema,\n  addTaskQuery,\n  addTaskIfNotExistsQuery,\n  reserveTaskQuery,\n  reserveTaskAtomic,\n  updateTaskStatusQuery,\n  taskSuccessQuery,\n  taskFailureQuery,\n  requeueFailuresQuery,\n  getSingleStatusQuery,\n  getAllStatusQuery,\n  toTaskRow,\n};\nexport type { StatusQuery };\n","import { QueryResult, RunQuery, SqlExecutor } from '@/types.ts';\n\nconst createQueryRunnerSqlocal = (sql: SqlExecutor): RunQuery => {\n  const runQuery = async (query: string, ...values: unknown[]): Promise<QueryResult[]> => {\n    return await sql(query, ...values);\n  };\n  return runQuery;\n};\n\nexport { createQueryRunnerSqlocal };\n","import { SQLocal } from 'sqlocal';\nimport { RunQuery, SqlExecutor, WorkhorseConfig } from '@/types.ts';\nimport { schema } from './sql.ts';\nimport { createQueryRunnerSqlocal } from './runQuery.ts';\n\nasync function createSchema(sql: SqlExecutor): Promise<void> {\n  await sql(schema);\n}\n\nconst createDatabase = async (config: WorkhorseConfig): Promise<RunQuery> => {\n  const dbPath = config.dbPath ?? 'workhorse.sqlite3';\n  const { deleteDatabaseFile } = new SQLocal(dbPath);\n  await deleteDatabaseFile();\n  // stored in the origin private file system\n  const { sql } = new SQLocal(dbPath);\n  await createSchema(sql);\n  return createQueryRunnerSqlocal(sql);\n};\n\nexport { createDatabase, schema };\n","class ReservationFailed extends Error {}\nclass DuplicateTaskError extends Error {}\n\nclass UnreachableError extends Error {\n  constructor(nvr: never, message: string) {\n    super(`${nvr}: ${message}`);\n    this.name = 'UnreachableError';\n  }\n}\n\nexport { ReservationFailed, DuplicateTaskError, UnreachableError };\n","/* eslint-disable @typescript-eslint/no-unsafe-enum-comparison */\n// TODO: Fix switch statement so this eslint-disable can be removed\nimport {\n  Payload,\n  QueueStatus,\n  TaskQueue,\n  TaskRow,\n  TaskState,\n  DuplicateStrategy,\n  WorkhorseConfig,\n  RunQuery,\n  assertTaskRow,\n  QueryResult,\n} from '@/types.ts';\nimport {\n  addTaskQuery,\n  taskSuccessQuery,\n  taskFailureQuery,\n  getSingleStatusQuery,\n  toTaskRow,\n  requeueFailuresQuery,\n  addTaskIfNotExistsQuery,\n  reserveTaskAtomic as reserveTaskAtomicQuery,\n  getAllStatusQuery,\n  StatusQuery,\n} from './db/sql';\nimport { DuplicateTaskError, UnreachableError } from '@/errors.ts';\nimport { Emitter, Notifications } from '@events';\n\nfunction createTaskQueue(config: WorkhorseConfig, sql: RunQuery): TaskQueue {\n  const taskQueue: TaskQueue = {\n    addTask: async (taskId: string, payload: Payload) => {\n      let query = '';\n      switch (config.duplicates) {\n        case DuplicateStrategy.FORBID:\n          query = addTaskQuery();\n          break;\n        case DuplicateStrategy.IGNORE:\n          query = addTaskIfNotExistsQuery();\n          break;\n        default:\n          query = 'This should not be possible' as never;\n      }\n      try {\n        await sql(query, taskId, JSON.stringify(payload));\n        Emitter.emit(Notifications.Task.Added, { taskId });\n      } catch (e) {\n        if (e instanceof Error) {\n          if ('code' in e) {\n            if (e.code === 'SQLITE_CONSTRAINT_UNIQUE') {\n              throw new DuplicateTaskError(`Duplicate task: ${taskId}`);\n            }\n          }\n        }\n      }\n    },\n    reserveTask: async () => {\n      const reserveQuery = reserveTaskAtomicQuery();\n      const updatedRows = await sql(reserveQuery);\n\n      if (updatedRows.length !== 1) {\n        return undefined;\n      }\n\n      const dbRow = updatedRows[0];\n      assertTaskRow(dbRow);\n      return toTaskRow(dbRow);\n    },\n    taskSuccessful: async (taskRow: TaskRow) => {\n      const query = taskSuccessQuery(taskRow.id);\n      await sql(query);\n      Emitter.emit(Notifications.Task.Success, { taskId: taskRow.taskId });\n    },\n    taskFailed: async (taskRow: TaskRow) => {\n      const query = taskFailureQuery(taskRow.id);\n      await sql(query);\n      Emitter.emit(Notifications.Task.Failure, { taskId: taskRow.taskId });\n    },\n    requeue: async (): Promise<undefined> => {\n      const query = requeueFailuresQuery();\n      await sql(query);\n    },\n    queryTaskCount: async (status: TaskState): Promise<number> => {\n      const query = getSingleStatusQuery(status);\n      const records = await sql(query);\n\n      const record = records[0];\n      const key = 'COUNT(*)';\n      if (key in record && record[key] !== 'number') {\n        return record[key] as number;\n      } else {\n        const shouldNotHappen: never = 'Should not happen' as never;\n        throw new Error(shouldNotHappen);\n      }\n    },\n    getStatus: async (): Promise<QueueStatus> => {\n      const query = getAllStatusQuery();\n      const records = await sql(query);\n\n      // Start with default counts\n      const queueStatus: QueueStatus = {\n        queued: 0,\n        executing: 0,\n        successful: 0,\n        failed: 0,\n      };\n\n      // Map records to QueueStatus\n      records.forEach((record) => {\n        assertStatusQuery(record);\n        switch (record.status_id) {\n          case TaskState.queued:\n            queueStatus.queued = record.count;\n            break;\n          case TaskState.executing:\n            queueStatus.executing = record.count;\n            break;\n          case TaskState.successful:\n            queueStatus.successful = record.count;\n            break;\n          case TaskState.failed:\n            queueStatus.failed = record.count;\n            break;\n          default:\n            throw new UnreachableError(\n              record.status_id as never,\n              `Unexpected status_id: ${record.status_id}`\n            );\n        }\n      });\n\n      return queueStatus;\n    },\n  };\n\n  return taskQueue;\n}\n\nfunction assertStatusQuery(maybeQueueStatus: QueryResult): asserts maybeQueueStatus is StatusQuery {\n  if (!('status_id' in maybeQueueStatus))\n    throw Error(`Expected status_id in ${JSON.stringify(maybeQueueStatus)}`);\n  if (!('count' in maybeQueueStatus))\n    throw Error(`Expected count in ${JSON.stringify(maybeQueueStatus)}`);\n}\n\nexport { createTaskQueue };\n","import { assertTaskRow, RunTask, TaskQueue, TaskRow, TaskHooks, WorkhorseConfig } from '@/types.ts';\nimport log from 'loglevel';\nimport { ReservationFailed } from '@/errors.ts';\nimport * as taskHelpers from '@/events/taskHelpers';\n\nconst createExecutorHooks = (\n  _config: WorkhorseConfig,\n  queue: TaskQueue,\n  run: RunTask\n): TaskHooks => {\n  let task: undefined | TaskRow = undefined;\n  let taskResult: unknown;\n  return {\n    reserveHook: async (): Promise<void> => {\n      log.debug(`Reserving task...`);\n      task = await queue.reserveTask();\n      if (!task) {\n        log.debug('No reservation');\n        throw new ReservationFailed('No reservation');\n      } else {\n        assertTaskRow(task);\n        log.debug(`Reserved task: ${task.taskId}`);\n      }\n    },\n    executeHook: async (): Promise<void> => {\n      assertTaskRow(task);\n      log.debug(`Task running: ${task.taskId}`);\n      taskResult = await run(task.taskId, task.payload);\n    },\n    successHook: async (): Promise<void> => {\n      assertTaskRow(task);\n      log.debug(`Task successful: ${task.taskId}`);\n      await queue.taskSuccessful(task);\n      taskHelpers.emitReturnValue(task.taskId, taskResult);\n    },\n    failureHook: async (): Promise<void> => {\n      assertTaskRow(task);\n      log.debug(`Task failed: ${task.taskId}`);\n      await queue.taskFailed(task);\n    },\n  };\n};\n\nexport { createExecutorHooks };\n","import { BackoffSettings } from '@/types.ts';\n\ninterface Backoff {\n  getBackoff(): number;\n  increaseBackoff(): void;\n  resetBackoff(): void;\n}\n\nconst createBackoff = (config: BackoffSettings): Backoff => {\n  let currentBackoff = config.initial;\n\n  return {\n    getBackoff: () => currentBackoff,\n    increaseBackoff: () => {\n      currentBackoff = Math.min(currentBackoff * config.multiplier, config.maxTime);\n    },\n    resetBackoff: () => {\n      currentBackoff = config.initial;\n    },\n  };\n};\n\nexport { createBackoff };\nexport type { Backoff };\n","// From https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/globalThis\nfunction getGlobal() {\n  if (typeof globalThis !== 'undefined') {\n    return globalThis;\n  }\n  if (typeof self !== 'undefined') {\n    return self;\n  }\n  if (typeof window !== 'undefined') {\n    return window;\n  }\n  if (typeof global !== 'undefined') {\n    return global;\n  }\n}\nfunction getDevTools() {\n  const w = getGlobal();\n  if (w.__xstate__) {\n    return w.__xstate__;\n  }\n  return undefined;\n}\nfunction registerService(service) {\n  if (typeof window === 'undefined') {\n    return;\n  }\n  const devTools = getDevTools();\n  if (devTools) {\n    devTools.register(service);\n  }\n}\nconst devToolsAdapter = service => {\n  if (typeof window === 'undefined') {\n    return;\n  }\n  const devTools = getDevTools();\n  if (devTools) {\n    devTools.register(service);\n  }\n};\n\nexport { devToolsAdapter, getGlobal, registerService };\n","import { devToolsAdapter } from '../dev/dist/xstate-dev.esm.js';\n\nclass Mailbox {\n  constructor(_process) {\n    this._process = _process;\n    this._active = false;\n    this._current = null;\n    this._last = null;\n  }\n  start() {\n    this._active = true;\n    this.flush();\n  }\n  clear() {\n    // we can't set _current to null because we might be currently processing\n    // and enqueue following clear shouldnt start processing the enqueued item immediately\n    if (this._current) {\n      this._current.next = null;\n      this._last = this._current;\n    }\n  }\n  enqueue(event) {\n    const enqueued = {\n      value: event,\n      next: null\n    };\n    if (this._current) {\n      this._last.next = enqueued;\n      this._last = enqueued;\n      return;\n    }\n    this._current = enqueued;\n    this._last = enqueued;\n    if (this._active) {\n      this.flush();\n    }\n  }\n  flush() {\n    while (this._current) {\n      // atm the given _process is responsible for implementing proper try/catch handling\n      // we assume here that this won't throw in a way that can affect this mailbox\n      const consumed = this._current;\n      this._process(consumed.value);\n      this._current = consumed.next;\n    }\n    this._last = null;\n  }\n}\n\nconst STATE_DELIMITER = '.';\nconst TARGETLESS_KEY = '';\nconst NULL_EVENT = '';\nconst STATE_IDENTIFIER = '#';\nconst WILDCARD = '*';\nconst XSTATE_INIT = 'xstate.init';\nconst XSTATE_ERROR = 'xstate.error';\nconst XSTATE_STOP = 'xstate.stop';\n\n/**\n * Returns an event that represents an implicit event that is sent after the\n * specified `delay`.\n *\n * @param delayRef The delay in milliseconds\n * @param id The state node ID where this event is handled\n */\nfunction createAfterEvent(delayRef, id) {\n  return {\n    type: `xstate.after.${delayRef}.${id}`\n  };\n}\n\n/**\n * Returns an event that represents that a final state node has been reached in\n * the parent state node.\n *\n * @param id The final state node's parent state node `id`\n * @param output The data to pass into the event\n */\nfunction createDoneStateEvent(id, output) {\n  return {\n    type: `xstate.done.state.${id}`,\n    output\n  };\n}\n\n/**\n * Returns an event that represents that an invoked service has terminated.\n *\n * An invoked service is terminated when it has reached a top-level final state\n * node, but not when it is canceled.\n *\n * @param invokeId The invoked service ID\n * @param output The data to pass into the event\n */\nfunction createDoneActorEvent(invokeId, output) {\n  return {\n    type: `xstate.done.actor.${invokeId}`,\n    output,\n    actorId: invokeId\n  };\n}\nfunction createErrorActorEvent(id, error) {\n  return {\n    type: `xstate.error.actor.${id}`,\n    error,\n    actorId: id\n  };\n}\nfunction createInitEvent(input) {\n  return {\n    type: XSTATE_INIT,\n    input\n  };\n}\n\n/**\n * This function makes sure that unhandled errors are thrown in a separate\n * macrotask. It allows those errors to be detected by global error handlers and\n * reported to bug tracking services without interrupting our own stack of\n * execution.\n *\n * @param err Error to be thrown\n */\nfunction reportUnhandledError(err) {\n  setTimeout(() => {\n    throw err;\n  });\n}\n\nconst symbolObservable = (() => typeof Symbol === 'function' && Symbol.observable || '@@observable')();\n\nfunction matchesState(parentStateId, childStateId) {\n  const parentStateValue = toStateValue(parentStateId);\n  const childStateValue = toStateValue(childStateId);\n  if (typeof childStateValue === 'string') {\n    if (typeof parentStateValue === 'string') {\n      return childStateValue === parentStateValue;\n    }\n\n    // Parent more specific than child\n    return false;\n  }\n  if (typeof parentStateValue === 'string') {\n    return parentStateValue in childStateValue;\n  }\n  return Object.keys(parentStateValue).every(key => {\n    if (!(key in childStateValue)) {\n      return false;\n    }\n    return matchesState(parentStateValue[key], childStateValue[key]);\n  });\n}\nfunction toStatePath(stateId) {\n  if (isArray(stateId)) {\n    return stateId;\n  }\n  const result = [];\n  let segment = '';\n  for (let i = 0; i < stateId.length; i++) {\n    const char = stateId.charCodeAt(i);\n    switch (char) {\n      // \\\n      case 92:\n        // consume the next character\n        segment += stateId[i + 1];\n        // and skip over it\n        i++;\n        continue;\n      // .\n      case 46:\n        result.push(segment);\n        segment = '';\n        continue;\n    }\n    segment += stateId[i];\n  }\n  result.push(segment);\n  return result;\n}\nfunction toStateValue(stateValue) {\n  if (isMachineSnapshot(stateValue)) {\n    return stateValue.value;\n  }\n  if (typeof stateValue !== 'string') {\n    return stateValue;\n  }\n  const statePath = toStatePath(stateValue);\n  return pathToStateValue(statePath);\n}\nfunction pathToStateValue(statePath) {\n  if (statePath.length === 1) {\n    return statePath[0];\n  }\n  const value = {};\n  let marker = value;\n  for (let i = 0; i < statePath.length - 1; i++) {\n    if (i === statePath.length - 2) {\n      marker[statePath[i]] = statePath[i + 1];\n    } else {\n      const previous = marker;\n      marker = {};\n      previous[statePath[i]] = marker;\n    }\n  }\n  return value;\n}\nfunction mapValues(collection, iteratee) {\n  const result = {};\n  const collectionKeys = Object.keys(collection);\n  for (let i = 0; i < collectionKeys.length; i++) {\n    const key = collectionKeys[i];\n    result[key] = iteratee(collection[key], key, collection, i);\n  }\n  return result;\n}\nfunction toArrayStrict(value) {\n  if (isArray(value)) {\n    return value;\n  }\n  return [value];\n}\nfunction toArray(value) {\n  if (value === undefined) {\n    return [];\n  }\n  return toArrayStrict(value);\n}\nfunction resolveOutput(mapper, context, event, self) {\n  if (typeof mapper === 'function') {\n    return mapper({\n      context,\n      event,\n      self\n    });\n  }\n  return mapper;\n}\nfunction isArray(value) {\n  return Array.isArray(value);\n}\nfunction isErrorActorEvent(event) {\n  return event.type.startsWith('xstate.error.actor');\n}\nfunction toTransitionConfigArray(configLike) {\n  return toArrayStrict(configLike).map(transitionLike => {\n    if (typeof transitionLike === 'undefined' || typeof transitionLike === 'string') {\n      return {\n        target: transitionLike\n      };\n    }\n    return transitionLike;\n  });\n}\nfunction normalizeTarget(target) {\n  if (target === undefined || target === TARGETLESS_KEY) {\n    return undefined;\n  }\n  return toArray(target);\n}\nfunction toObserver(nextHandler, errorHandler, completionHandler) {\n  const isObserver = typeof nextHandler === 'object';\n  const self = isObserver ? nextHandler : undefined;\n  return {\n    next: (isObserver ? nextHandler.next : nextHandler)?.bind(self),\n    error: (isObserver ? nextHandler.error : errorHandler)?.bind(self),\n    complete: (isObserver ? nextHandler.complete : completionHandler)?.bind(self)\n  };\n}\nfunction createInvokeId(stateNodeId, index) {\n  return `${index}.${stateNodeId}`;\n}\nfunction resolveReferencedActor(machine, src) {\n  const match = src.match(/^xstate\\.invoke\\.(\\d+)\\.(.*)/);\n  if (!match) {\n    return machine.implementations.actors[src];\n  }\n  const [, indexStr, nodeId] = match;\n  const node = machine.getStateNodeById(nodeId);\n  const invokeConfig = node.config.invoke;\n  return (Array.isArray(invokeConfig) ? invokeConfig[indexStr] : invokeConfig).src;\n}\nfunction getAllOwnEventDescriptors(snapshot) {\n  return [...new Set([...snapshot._nodes.flatMap(sn => sn.ownEvents)])];\n}\n\nfunction createScheduledEventId(actorRef, id) {\n  return `${actorRef.sessionId}.${id}`;\n}\nlet idCounter = 0;\nfunction createSystem(rootActor, options) {\n  const children = new Map();\n  const keyedActors = new Map();\n  const reverseKeyedActors = new WeakMap();\n  const inspectionObservers = new Set();\n  const timerMap = {};\n  const {\n    clock,\n    logger\n  } = options;\n  const scheduler = {\n    schedule: (source, target, event, delay, id = Math.random().toString(36).slice(2)) => {\n      const scheduledEvent = {\n        source,\n        target,\n        event,\n        delay,\n        id,\n        startedAt: Date.now()\n      };\n      const scheduledEventId = createScheduledEventId(source, id);\n      system._snapshot._scheduledEvents[scheduledEventId] = scheduledEvent;\n      const timeout = clock.setTimeout(() => {\n        delete timerMap[scheduledEventId];\n        delete system._snapshot._scheduledEvents[scheduledEventId];\n        system._relay(source, target, event);\n      }, delay);\n      timerMap[scheduledEventId] = timeout;\n    },\n    cancel: (source, id) => {\n      const scheduledEventId = createScheduledEventId(source, id);\n      const timeout = timerMap[scheduledEventId];\n      delete timerMap[scheduledEventId];\n      delete system._snapshot._scheduledEvents[scheduledEventId];\n      if (timeout !== undefined) {\n        clock.clearTimeout(timeout);\n      }\n    },\n    cancelAll: actorRef => {\n      for (const scheduledEventId in system._snapshot._scheduledEvents) {\n        const scheduledEvent = system._snapshot._scheduledEvents[scheduledEventId];\n        if (scheduledEvent.source === actorRef) {\n          scheduler.cancel(actorRef, scheduledEvent.id);\n        }\n      }\n    }\n  };\n  const sendInspectionEvent = event => {\n    if (!inspectionObservers.size) {\n      return;\n    }\n    const resolvedInspectionEvent = {\n      ...event,\n      rootId: rootActor.sessionId\n    };\n    inspectionObservers.forEach(observer => observer.next?.(resolvedInspectionEvent));\n  };\n  const system = {\n    _snapshot: {\n      _scheduledEvents: (options?.snapshot && options.snapshot.scheduler) ?? {}\n    },\n    _bookId: () => `x:${idCounter++}`,\n    _register: (sessionId, actorRef) => {\n      children.set(sessionId, actorRef);\n      return sessionId;\n    },\n    _unregister: actorRef => {\n      children.delete(actorRef.sessionId);\n      const systemId = reverseKeyedActors.get(actorRef);\n      if (systemId !== undefined) {\n        keyedActors.delete(systemId);\n        reverseKeyedActors.delete(actorRef);\n      }\n    },\n    get: systemId => {\n      return keyedActors.get(systemId);\n    },\n    _set: (systemId, actorRef) => {\n      const existing = keyedActors.get(systemId);\n      if (existing && existing !== actorRef) {\n        throw new Error(`Actor with system ID '${systemId}' already exists.`);\n      }\n      keyedActors.set(systemId, actorRef);\n      reverseKeyedActors.set(actorRef, systemId);\n    },\n    inspect: observerOrFn => {\n      const observer = toObserver(observerOrFn);\n      inspectionObservers.add(observer);\n      return {\n        unsubscribe() {\n          inspectionObservers.delete(observer);\n        }\n      };\n    },\n    _sendInspectionEvent: sendInspectionEvent,\n    _relay: (source, target, event) => {\n      system._sendInspectionEvent({\n        type: '@xstate.event',\n        sourceRef: source,\n        actorRef: target,\n        event\n      });\n      target._send(event);\n    },\n    scheduler,\n    getSnapshot: () => {\n      return {\n        _scheduledEvents: {\n          ...system._snapshot._scheduledEvents\n        }\n      };\n    },\n    start: () => {\n      const scheduledEvents = system._snapshot._scheduledEvents;\n      system._snapshot._scheduledEvents = {};\n      for (const scheduledId in scheduledEvents) {\n        const {\n          source,\n          target,\n          event,\n          delay,\n          id\n        } = scheduledEvents[scheduledId];\n        scheduler.schedule(source, target, event, delay, id);\n      }\n    },\n    _clock: clock,\n    _logger: logger\n  };\n  return system;\n}\n\nlet executingCustomAction = false;\nconst $$ACTOR_TYPE = 1;\n\n// those values are currently used by @xstate/react directly so it's important to keep the assigned values in sync\nlet ProcessingStatus = /*#__PURE__*/function (ProcessingStatus) {\n  ProcessingStatus[ProcessingStatus[\"NotStarted\"] = 0] = \"NotStarted\";\n  ProcessingStatus[ProcessingStatus[\"Running\"] = 1] = \"Running\";\n  ProcessingStatus[ProcessingStatus[\"Stopped\"] = 2] = \"Stopped\";\n  return ProcessingStatus;\n}({});\nconst defaultOptions = {\n  clock: {\n    setTimeout: (fn, ms) => {\n      return setTimeout(fn, ms);\n    },\n    clearTimeout: id => {\n      return clearTimeout(id);\n    }\n  },\n  logger: console.log.bind(console),\n  devTools: false\n};\n\n/**\n * An Actor is a running process that can receive events, send events and change\n * its behavior based on the events it receives, which can cause effects outside\n * of the actor. When you run a state machine, it becomes an actor.\n */\nclass Actor {\n  /**\n   * Creates a new actor instance for the given logic with the provided options,\n   * if any.\n   *\n   * @param logic The logic to create an actor from\n   * @param options Actor options\n   */\n  constructor(logic, options) {\n    this.logic = logic;\n    /** The current internal state of the actor. */\n    this._snapshot = void 0;\n    /**\n     * The clock that is responsible for setting and clearing timeouts, such as\n     * delayed events and transitions.\n     */\n    this.clock = void 0;\n    this.options = void 0;\n    /** The unique identifier for this actor relative to its parent. */\n    this.id = void 0;\n    this.mailbox = new Mailbox(this._process.bind(this));\n    this.observers = new Set();\n    this.eventListeners = new Map();\n    this.logger = void 0;\n    /** @internal */\n    this._processingStatus = ProcessingStatus.NotStarted;\n    // Actor Ref\n    this._parent = void 0;\n    /** @internal */\n    this._syncSnapshot = void 0;\n    this.ref = void 0;\n    // TODO: add typings for system\n    this._actorScope = void 0;\n    this._systemId = void 0;\n    /** The globally unique process ID for this invocation. */\n    this.sessionId = void 0;\n    /** The system to which this actor belongs. */\n    this.system = void 0;\n    this._doneEvent = void 0;\n    this.src = void 0;\n    // array of functions to defer\n    this._deferred = [];\n    const resolvedOptions = {\n      ...defaultOptions,\n      ...options\n    };\n    const {\n      clock,\n      logger,\n      parent,\n      syncSnapshot,\n      id,\n      systemId,\n      inspect\n    } = resolvedOptions;\n    this.system = parent ? parent.system : createSystem(this, {\n      clock,\n      logger\n    });\n    if (inspect && !parent) {\n      // Always inspect at the system-level\n      this.system.inspect(toObserver(inspect));\n    }\n    this.sessionId = this.system._bookId();\n    this.id = id ?? this.sessionId;\n    this.logger = options?.logger ?? this.system._logger;\n    this.clock = options?.clock ?? this.system._clock;\n    this._parent = parent;\n    this._syncSnapshot = syncSnapshot;\n    this.options = resolvedOptions;\n    this.src = resolvedOptions.src ?? logic;\n    this.ref = this;\n    this._actorScope = {\n      self: this,\n      id: this.id,\n      sessionId: this.sessionId,\n      logger: this.logger,\n      defer: fn => {\n        this._deferred.push(fn);\n      },\n      system: this.system,\n      stopChild: child => {\n        if (child._parent !== this) {\n          throw new Error(`Cannot stop child actor ${child.id} of ${this.id} because it is not a child`);\n        }\n        child._stop();\n      },\n      emit: emittedEvent => {\n        const listeners = this.eventListeners.get(emittedEvent.type);\n        const wildcardListener = this.eventListeners.get('*');\n        if (!listeners && !wildcardListener) {\n          return;\n        }\n        const allListeners = [...(listeners ? listeners.values() : []), ...(wildcardListener ? wildcardListener.values() : [])];\n        for (const handler of allListeners) {\n          handler(emittedEvent);\n        }\n      },\n      actionExecutor: action => {\n        const exec = () => {\n          this._actorScope.system._sendInspectionEvent({\n            type: '@xstate.action',\n            actorRef: this,\n            action: {\n              type: action.type,\n              params: action.params\n            }\n          });\n          if (!action.exec) {\n            return;\n          }\n          const saveExecutingCustomAction = executingCustomAction;\n          try {\n            executingCustomAction = true;\n            action.exec(action.info, action.params);\n          } finally {\n            executingCustomAction = saveExecutingCustomAction;\n          }\n        };\n        if (this._processingStatus === ProcessingStatus.Running) {\n          exec();\n        } else {\n          this._deferred.push(exec);\n        }\n      }\n    };\n\n    // Ensure that the send method is bound to this Actor instance\n    // if destructured\n    this.send = this.send.bind(this);\n    this.system._sendInspectionEvent({\n      type: '@xstate.actor',\n      actorRef: this\n    });\n    if (systemId) {\n      this._systemId = systemId;\n      this.system._set(systemId, this);\n    }\n    this._initState(options?.snapshot ?? options?.state);\n    if (systemId && this._snapshot.status !== 'active') {\n      this.system._unregister(this);\n    }\n  }\n  _initState(persistedState) {\n    try {\n      this._snapshot = persistedState ? this.logic.restoreSnapshot ? this.logic.restoreSnapshot(persistedState, this._actorScope) : persistedState : this.logic.getInitialSnapshot(this._actorScope, this.options?.input);\n    } catch (err) {\n      // if we get here then it means that we assign a value to this._snapshot that is not of the correct type\n      // we can't get the true `TSnapshot & { status: 'error'; }`, it's impossible\n      // so right now this is a lie of sorts\n      this._snapshot = {\n        status: 'error',\n        output: undefined,\n        error: err\n      };\n    }\n  }\n  update(snapshot, event) {\n    // Update state\n    this._snapshot = snapshot;\n\n    // Execute deferred effects\n    let deferredFn;\n    while (deferredFn = this._deferred.shift()) {\n      try {\n        deferredFn();\n      } catch (err) {\n        // this error can only be caught when executing *initial* actions\n        // it's the only time when we call actions provided by the user through those deferreds\n        // when the actor is already running we always execute them synchronously while transitioning\n        // no \"builtin deferred\" should actually throw an error since they are either safe\n        // or the control flow is passed through the mailbox and errors should be caught by the `_process` used by the mailbox\n        this._deferred.length = 0;\n        this._snapshot = {\n          ...snapshot,\n          status: 'error',\n          error: err\n        };\n      }\n    }\n    switch (this._snapshot.status) {\n      case 'active':\n        for (const observer of this.observers) {\n          try {\n            observer.next?.(snapshot);\n          } catch (err) {\n            reportUnhandledError(err);\n          }\n        }\n        break;\n      case 'done':\n        // next observers are meant to be notified about done snapshots\n        // this can be seen as something that is different from how observable work\n        // but with observables `complete` callback is called without any arguments\n        // it's more ergonomic for XState to treat a done snapshot as a \"next\" value\n        // and the completion event as something that is separate,\n        // something that merely follows emitting that done snapshot\n        for (const observer of this.observers) {\n          try {\n            observer.next?.(snapshot);\n          } catch (err) {\n            reportUnhandledError(err);\n          }\n        }\n        this._stopProcedure();\n        this._complete();\n        this._doneEvent = createDoneActorEvent(this.id, this._snapshot.output);\n        if (this._parent) {\n          this.system._relay(this, this._parent, this._doneEvent);\n        }\n        break;\n      case 'error':\n        this._error(this._snapshot.error);\n        break;\n    }\n    this.system._sendInspectionEvent({\n      type: '@xstate.snapshot',\n      actorRef: this,\n      event,\n      snapshot\n    });\n  }\n\n  /**\n   * Subscribe an observer to an actor’s snapshot values.\n   *\n   * @remarks\n   * The observer will receive the actor’s snapshot value when it is emitted.\n   * The observer can be:\n   *\n   * - A plain function that receives the latest snapshot, or\n   * - An observer object whose `.next(snapshot)` method receives the latest\n   *   snapshot\n   *\n   * @example\n   *\n   * ```ts\n   * // Observer as a plain function\n   * const subscription = actor.subscribe((snapshot) => {\n   *   console.log(snapshot);\n   * });\n   * ```\n   *\n   * @example\n   *\n   * ```ts\n   * // Observer as an object\n   * const subscription = actor.subscribe({\n   *   next(snapshot) {\n   *     console.log(snapshot);\n   *   },\n   *   error(err) {\n   *     // ...\n   *   },\n   *   complete() {\n   *     // ...\n   *   }\n   * });\n   * ```\n   *\n   * The return value of `actor.subscribe(observer)` is a subscription object\n   * that has an `.unsubscribe()` method. You can call\n   * `subscription.unsubscribe()` to unsubscribe the observer:\n   *\n   * @example\n   *\n   * ```ts\n   * const subscription = actor.subscribe((snapshot) => {\n   *   // ...\n   * });\n   *\n   * // Unsubscribe the observer\n   * subscription.unsubscribe();\n   * ```\n   *\n   * When the actor is stopped, all of its observers will automatically be\n   * unsubscribed.\n   *\n   * @param observer - Either a plain function that receives the latest\n   *   snapshot, or an observer object whose `.next(snapshot)` method receives\n   *   the latest snapshot\n   */\n\n  subscribe(nextListenerOrObserver, errorListener, completeListener) {\n    const observer = toObserver(nextListenerOrObserver, errorListener, completeListener);\n    if (this._processingStatus !== ProcessingStatus.Stopped) {\n      this.observers.add(observer);\n    } else {\n      switch (this._snapshot.status) {\n        case 'done':\n          try {\n            observer.complete?.();\n          } catch (err) {\n            reportUnhandledError(err);\n          }\n          break;\n        case 'error':\n          {\n            const err = this._snapshot.error;\n            if (!observer.error) {\n              reportUnhandledError(err);\n            } else {\n              try {\n                observer.error(err);\n              } catch (err) {\n                reportUnhandledError(err);\n              }\n            }\n            break;\n          }\n      }\n    }\n    return {\n      unsubscribe: () => {\n        this.observers.delete(observer);\n      }\n    };\n  }\n  on(type, handler) {\n    let listeners = this.eventListeners.get(type);\n    if (!listeners) {\n      listeners = new Set();\n      this.eventListeners.set(type, listeners);\n    }\n    const wrappedHandler = handler.bind(undefined);\n    listeners.add(wrappedHandler);\n    return {\n      unsubscribe: () => {\n        listeners.delete(wrappedHandler);\n      }\n    };\n  }\n\n  /** Starts the Actor from the initial state */\n  start() {\n    if (this._processingStatus === ProcessingStatus.Running) {\n      // Do not restart the service if it is already started\n      return this;\n    }\n    if (this._syncSnapshot) {\n      this.subscribe({\n        next: snapshot => {\n          if (snapshot.status === 'active') {\n            this.system._relay(this, this._parent, {\n              type: `xstate.snapshot.${this.id}`,\n              snapshot\n            });\n          }\n        },\n        error: () => {}\n      });\n    }\n    this.system._register(this.sessionId, this);\n    if (this._systemId) {\n      this.system._set(this._systemId, this);\n    }\n    this._processingStatus = ProcessingStatus.Running;\n\n    // TODO: this isn't correct when rehydrating\n    const initEvent = createInitEvent(this.options.input);\n    this.system._sendInspectionEvent({\n      type: '@xstate.event',\n      sourceRef: this._parent,\n      actorRef: this,\n      event: initEvent\n    });\n    const status = this._snapshot.status;\n    switch (status) {\n      case 'done':\n        // a state machine can be \"done\" upon initialization (it could reach a final state using initial microsteps)\n        // we still need to complete observers, flush deferreds etc\n        this.update(this._snapshot, initEvent);\n        // TODO: rethink cleanup of observers, mailbox, etc\n        return this;\n      case 'error':\n        this._error(this._snapshot.error);\n        return this;\n    }\n    if (!this._parent) {\n      this.system.start();\n    }\n    if (this.logic.start) {\n      try {\n        this.logic.start(this._snapshot, this._actorScope);\n      } catch (err) {\n        this._snapshot = {\n          ...this._snapshot,\n          status: 'error',\n          error: err\n        };\n        this._error(err);\n        return this;\n      }\n    }\n\n    // TODO: this notifies all subscribers but usually this is redundant\n    // there is no real change happening here\n    // we need to rethink if this needs to be refactored\n    this.update(this._snapshot, initEvent);\n    if (this.options.devTools) {\n      this.attachDevTools();\n    }\n    this.mailbox.start();\n    return this;\n  }\n  _process(event) {\n    let nextState;\n    let caughtError;\n    try {\n      nextState = this.logic.transition(this._snapshot, event, this._actorScope);\n    } catch (err) {\n      // we wrap it in a box so we can rethrow it later even if falsy value gets caught here\n      caughtError = {\n        err\n      };\n    }\n    if (caughtError) {\n      const {\n        err\n      } = caughtError;\n      this._snapshot = {\n        ...this._snapshot,\n        status: 'error',\n        error: err\n      };\n      this._error(err);\n      return;\n    }\n    this.update(nextState, event);\n    if (event.type === XSTATE_STOP) {\n      this._stopProcedure();\n      this._complete();\n    }\n  }\n  _stop() {\n    if (this._processingStatus === ProcessingStatus.Stopped) {\n      return this;\n    }\n    this.mailbox.clear();\n    if (this._processingStatus === ProcessingStatus.NotStarted) {\n      this._processingStatus = ProcessingStatus.Stopped;\n      return this;\n    }\n    this.mailbox.enqueue({\n      type: XSTATE_STOP\n    });\n    return this;\n  }\n\n  /** Stops the Actor and unsubscribe all listeners. */\n  stop() {\n    if (this._parent) {\n      throw new Error('A non-root actor cannot be stopped directly.');\n    }\n    return this._stop();\n  }\n  _complete() {\n    for (const observer of this.observers) {\n      try {\n        observer.complete?.();\n      } catch (err) {\n        reportUnhandledError(err);\n      }\n    }\n    this.observers.clear();\n  }\n  _reportError(err) {\n    if (!this.observers.size) {\n      if (!this._parent) {\n        reportUnhandledError(err);\n      }\n      return;\n    }\n    let reportError = false;\n    for (const observer of this.observers) {\n      const errorListener = observer.error;\n      reportError ||= !errorListener;\n      try {\n        errorListener?.(err);\n      } catch (err2) {\n        reportUnhandledError(err2);\n      }\n    }\n    this.observers.clear();\n    if (reportError) {\n      reportUnhandledError(err);\n    }\n  }\n  _error(err) {\n    this._stopProcedure();\n    this._reportError(err);\n    if (this._parent) {\n      this.system._relay(this, this._parent, createErrorActorEvent(this.id, err));\n    }\n  }\n  // TODO: atm children don't belong entirely to the actor so\n  // in a way - it's not even super aware of them\n  // so we can't stop them from here but we really should!\n  // right now, they are being stopped within the machine's transition\n  // but that could throw and leave us with \"orphaned\" active actors\n  _stopProcedure() {\n    if (this._processingStatus !== ProcessingStatus.Running) {\n      // Actor already stopped; do nothing\n      return this;\n    }\n\n    // Cancel all delayed events\n    this.system.scheduler.cancelAll(this);\n\n    // TODO: mailbox.reset\n    this.mailbox.clear();\n    // TODO: after `stop` we must prepare ourselves for receiving events again\n    // events sent *after* stop signal must be queued\n    // it seems like this should be the common behavior for all of our consumers\n    // so perhaps this should be unified somehow for all of them\n    this.mailbox = new Mailbox(this._process.bind(this));\n    this._processingStatus = ProcessingStatus.Stopped;\n    this.system._unregister(this);\n    return this;\n  }\n\n  /** @internal */\n  _send(event) {\n    if (this._processingStatus === ProcessingStatus.Stopped) {\n      return;\n    }\n    this.mailbox.enqueue(event);\n  }\n\n  /**\n   * Sends an event to the running Actor to trigger a transition.\n   *\n   * @param event The event to send\n   */\n  send(event) {\n    this.system._relay(undefined, this, event);\n  }\n  attachDevTools() {\n    const {\n      devTools\n    } = this.options;\n    if (devTools) {\n      const resolvedDevToolsAdapter = typeof devTools === 'function' ? devTools : devToolsAdapter;\n      resolvedDevToolsAdapter(this);\n    }\n  }\n  toJSON() {\n    return {\n      xstate$$type: $$ACTOR_TYPE,\n      id: this.id\n    };\n  }\n\n  /**\n   * Obtain the internal state of the actor, which can be persisted.\n   *\n   * @remarks\n   * The internal state can be persisted from any actor, not only machines.\n   *\n   * Note that the persisted state is not the same as the snapshot from\n   * {@link Actor.getSnapshot}. Persisted state represents the internal state of\n   * the actor, while snapshots represent the actor's last emitted value.\n   *\n   * Can be restored with {@link ActorOptions.state}\n   * @see https://stately.ai/docs/persistence\n   */\n\n  getPersistedSnapshot(options) {\n    return this.logic.getPersistedSnapshot(this._snapshot, options);\n  }\n  [symbolObservable]() {\n    return this;\n  }\n\n  /**\n   * Read an actor’s snapshot synchronously.\n   *\n   * @remarks\n   * The snapshot represent an actor's last emitted value.\n   *\n   * When an actor receives an event, its internal state may change. An actor\n   * may emit a snapshot when a state transition occurs.\n   *\n   * Note that some actors, such as callback actors generated with\n   * `fromCallback`, will not emit snapshots.\n   * @see {@link Actor.subscribe} to subscribe to an actor’s snapshot values.\n   * @see {@link Actor.getPersistedSnapshot} to persist the internal state of an actor (which is more than just a snapshot).\n   */\n  getSnapshot() {\n    return this._snapshot;\n  }\n}\n/**\n * Creates a new actor instance for the given actor logic with the provided\n * options, if any.\n *\n * @remarks\n * When you create an actor from actor logic via `createActor(logic)`, you\n * implicitly create an actor system where the created actor is the root actor.\n * Any actors spawned from this root actor and its descendants are part of that\n * actor system.\n * @example\n *\n * ```ts\n * import { createActor } from 'xstate';\n * import { someActorLogic } from './someActorLogic.ts';\n *\n * // Creating the actor, which implicitly creates an actor system with itself as the root actor\n * const actor = createActor(someActorLogic);\n *\n * actor.subscribe((snapshot) => {\n *   console.log(snapshot);\n * });\n *\n * // Actors must be started by calling `actor.start()`, which will also start the actor system.\n * actor.start();\n *\n * // Actors can receive events\n * actor.send({ type: 'someEvent' });\n *\n * // You can stop root actors by calling `actor.stop()`, which will also stop the actor system and all actors in that system.\n * actor.stop();\n * ```\n *\n * @param logic - The actor logic to create an actor from. For a state machine\n *   actor logic creator, see {@link createMachine}. Other actor logic creators\n *   include {@link fromCallback}, {@link fromEventObservable},\n *   {@link fromObservable}, {@link fromPromise}, and {@link fromTransition}.\n * @param options - Actor options\n */\nfunction createActor(logic, ...[options]) {\n  return new Actor(logic, options);\n}\n\n/**\n * Creates a new Interpreter instance for the given machine with the provided\n * options, if any.\n *\n * @deprecated Use `createActor` instead\n * @alias\n */\nconst interpret = createActor;\n\n/**\n * @deprecated Use `Actor` instead.\n * @alias\n */\n\nfunction resolveCancel(_, snapshot, actionArgs, actionParams, {\n  sendId\n}) {\n  const resolvedSendId = typeof sendId === 'function' ? sendId(actionArgs, actionParams) : sendId;\n  return [snapshot, {\n    sendId: resolvedSendId\n  }, undefined];\n}\nfunction executeCancel(actorScope, params) {\n  actorScope.defer(() => {\n    actorScope.system.scheduler.cancel(actorScope.self, params.sendId);\n  });\n}\n/**\n * Cancels a delayed `sendTo(...)` action that is waiting to be executed. The\n * canceled `sendTo(...)` action will not send its event or execute, unless the\n * `delay` has already elapsed before `cancel(...)` is called.\n *\n * @example\n *\n * ```ts\n * import { createMachine, sendTo, cancel } from 'xstate';\n *\n * const machine = createMachine({\n *   // ...\n *   on: {\n *     sendEvent: {\n *       actions: sendTo(\n *         'some-actor',\n *         { type: 'someEvent' },\n *         {\n *           id: 'some-id',\n *           delay: 1000\n *         }\n *       )\n *     },\n *     cancelEvent: {\n *       actions: cancel('some-id')\n *     }\n *   }\n * });\n * ```\n *\n * @param sendId The `id` of the `sendTo(...)` action to cancel.\n */\nfunction cancel(sendId) {\n  function cancel(_args, _params) {\n  }\n  cancel.type = 'xstate.cancel';\n  cancel.sendId = sendId;\n  cancel.resolve = resolveCancel;\n  cancel.execute = executeCancel;\n  return cancel;\n}\n\nfunction resolveSpawn(actorScope, snapshot, actionArgs, _actionParams, {\n  id,\n  systemId,\n  src,\n  input,\n  syncSnapshot\n}) {\n  const logic = typeof src === 'string' ? resolveReferencedActor(snapshot.machine, src) : src;\n  const resolvedId = typeof id === 'function' ? id(actionArgs) : id;\n  let actorRef;\n  let resolvedInput = undefined;\n  if (logic) {\n    resolvedInput = typeof input === 'function' ? input({\n      context: snapshot.context,\n      event: actionArgs.event,\n      self: actorScope.self\n    }) : input;\n    actorRef = createActor(logic, {\n      id: resolvedId,\n      src,\n      parent: actorScope.self,\n      syncSnapshot,\n      systemId,\n      input: resolvedInput\n    });\n  }\n  return [cloneMachineSnapshot(snapshot, {\n    children: {\n      ...snapshot.children,\n      [resolvedId]: actorRef\n    }\n  }), {\n    id,\n    systemId,\n    actorRef,\n    src,\n    input: resolvedInput\n  }, undefined];\n}\nfunction executeSpawn(actorScope, {\n  actorRef\n}) {\n  if (!actorRef) {\n    return;\n  }\n  actorScope.defer(() => {\n    if (actorRef._processingStatus === ProcessingStatus.Stopped) {\n      return;\n    }\n    actorRef.start();\n  });\n}\nfunction spawnChild(...[src, {\n  id,\n  systemId,\n  input,\n  syncSnapshot = false\n} = {}]) {\n  function spawnChild(_args, _params) {\n  }\n  spawnChild.type = 'xstate.spawnChild';\n  spawnChild.id = id;\n  spawnChild.systemId = systemId;\n  spawnChild.src = src;\n  spawnChild.input = input;\n  spawnChild.syncSnapshot = syncSnapshot;\n  spawnChild.resolve = resolveSpawn;\n  spawnChild.execute = executeSpawn;\n  return spawnChild;\n}\n\nfunction resolveStop(_, snapshot, args, actionParams, {\n  actorRef\n}) {\n  const actorRefOrString = typeof actorRef === 'function' ? actorRef(args, actionParams) : actorRef;\n  const resolvedActorRef = typeof actorRefOrString === 'string' ? snapshot.children[actorRefOrString] : actorRefOrString;\n  let children = snapshot.children;\n  if (resolvedActorRef) {\n    children = {\n      ...children\n    };\n    delete children[resolvedActorRef.id];\n  }\n  return [cloneMachineSnapshot(snapshot, {\n    children\n  }), resolvedActorRef, undefined];\n}\nfunction executeStop(actorScope, actorRef) {\n  if (!actorRef) {\n    return;\n  }\n\n  // we need to eagerly unregister it here so a new actor with the same systemId can be registered immediately\n  // since we defer actual stopping of the actor but we don't defer actor creations (and we can't do that)\n  // this could throw on `systemId` collision, for example, when dealing with reentering transitions\n  actorScope.system._unregister(actorRef);\n\n  // this allows us to prevent an actor from being started if it gets stopped within the same macrostep\n  // this can happen, for example, when the invoking state is being exited immediately by an always transition\n  if (actorRef._processingStatus !== ProcessingStatus.Running) {\n    actorScope.stopChild(actorRef);\n    return;\n  }\n  // stopping a child enqueues a stop event in the child actor's mailbox\n  // we need for all of the already enqueued events to be processed before we stop the child\n  // the parent itself might want to send some events to a child (for example from exit actions on the invoking state)\n  // and we don't want to ignore those events\n  actorScope.defer(() => {\n    actorScope.stopChild(actorRef);\n  });\n}\n/**\n * Stops a child actor.\n *\n * @param actorRef The actor to stop.\n */\nfunction stopChild(actorRef) {\n  function stop(_args, _params) {\n  }\n  stop.type = 'xstate.stopChild';\n  stop.actorRef = actorRef;\n  stop.resolve = resolveStop;\n  stop.execute = executeStop;\n  return stop;\n}\n\n/**\n * Stops a child actor.\n *\n * @deprecated Use `stopChild(...)` instead\n * @alias\n */\nconst stop = stopChild;\n\nfunction checkStateIn(snapshot, _, {\n  stateValue\n}) {\n  if (typeof stateValue === 'string' && isStateId(stateValue)) {\n    const target = snapshot.machine.getStateNodeById(stateValue);\n    return snapshot._nodes.some(sn => sn === target);\n  }\n  return snapshot.matches(stateValue);\n}\nfunction stateIn(stateValue) {\n  function stateIn() {\n    return false;\n  }\n  stateIn.check = checkStateIn;\n  stateIn.stateValue = stateValue;\n  return stateIn;\n}\nfunction checkNot(snapshot, {\n  context,\n  event\n}, {\n  guards\n}) {\n  return !evaluateGuard(guards[0], context, event, snapshot);\n}\n\n/**\n * Higher-order guard that evaluates to `true` if the `guard` passed to it\n * evaluates to `false`.\n *\n * @category Guards\n * @example\n *\n * ```ts\n * import { setup, not } from 'xstate';\n *\n * const machine = setup({\n *   guards: {\n *     someNamedGuard: () => false\n *   }\n * }).createMachine({\n *   on: {\n *     someEvent: {\n *       guard: not('someNamedGuard'),\n *       actions: () => {\n *         // will be executed if guard in `not(...)`\n *         // evaluates to `false`\n *       }\n *     }\n *   }\n * });\n * ```\n *\n * @returns A guard\n */\nfunction not(guard) {\n  function not(_args, _params) {\n    return false;\n  }\n  not.check = checkNot;\n  not.guards = [guard];\n  return not;\n}\nfunction checkAnd(snapshot, {\n  context,\n  event\n}, {\n  guards\n}) {\n  return guards.every(guard => evaluateGuard(guard, context, event, snapshot));\n}\n\n/**\n * Higher-order guard that evaluates to `true` if all `guards` passed to it\n * evaluate to `true`.\n *\n * @category Guards\n * @example\n *\n * ```ts\n * import { setup, and } from 'xstate';\n *\n * const machine = setup({\n *   guards: {\n *     someNamedGuard: () => true\n *   }\n * }).createMachine({\n *   on: {\n *     someEvent: {\n *       guard: and([({ context }) => context.value > 0, 'someNamedGuard']),\n *       actions: () => {\n *         // will be executed if all guards in `and(...)`\n *         // evaluate to true\n *       }\n *     }\n *   }\n * });\n * ```\n *\n * @returns A guard action object\n */\nfunction and(guards) {\n  function and(_args, _params) {\n    return false;\n  }\n  and.check = checkAnd;\n  and.guards = guards;\n  return and;\n}\nfunction checkOr(snapshot, {\n  context,\n  event\n}, {\n  guards\n}) {\n  return guards.some(guard => evaluateGuard(guard, context, event, snapshot));\n}\n\n/**\n * Higher-order guard that evaluates to `true` if any of the `guards` passed to\n * it evaluate to `true`.\n *\n * @category Guards\n * @example\n *\n * ```ts\n * import { setup, or } from 'xstate';\n *\n * const machine = setup({\n *   guards: {\n *     someNamedGuard: () => true\n *   }\n * }).createMachine({\n *   on: {\n *     someEvent: {\n *       guard: or([({ context }) => context.value > 0, 'someNamedGuard']),\n *       actions: () => {\n *         // will be executed if any of the guards in `or(...)`\n *         // evaluate to true\n *       }\n *     }\n *   }\n * });\n * ```\n *\n * @returns A guard action object\n */\nfunction or(guards) {\n  function or(_args, _params) {\n    return false;\n  }\n  or.check = checkOr;\n  or.guards = guards;\n  return or;\n}\n\n// TODO: throw on cycles (depth check should be enough)\nfunction evaluateGuard(guard, context, event, snapshot) {\n  const {\n    machine\n  } = snapshot;\n  const isInline = typeof guard === 'function';\n  const resolved = isInline ? guard : machine.implementations.guards[typeof guard === 'string' ? guard : guard.type];\n  if (!isInline && !resolved) {\n    throw new Error(`Guard '${typeof guard === 'string' ? guard : guard.type}' is not implemented.'.`);\n  }\n  if (typeof resolved !== 'function') {\n    return evaluateGuard(resolved, context, event, snapshot);\n  }\n  const guardArgs = {\n    context,\n    event\n  };\n  const guardParams = isInline || typeof guard === 'string' ? undefined : 'params' in guard ? typeof guard.params === 'function' ? guard.params({\n    context,\n    event\n  }) : guard.params : undefined;\n  if (!('check' in resolved)) {\n    // the existing type of `.guards` assumes non-nullable `TExpressionGuard`\n    // inline guards expect `TExpressionGuard` to be set to `undefined`\n    // it's fine to cast this here, our logic makes sure that we call those 2 \"variants\" correctly\n    return resolved(guardArgs, guardParams);\n  }\n  const builtinGuard = resolved;\n  return builtinGuard.check(snapshot, guardArgs, resolved // this holds all params\n  );\n}\n\nconst isAtomicStateNode = stateNode => stateNode.type === 'atomic' || stateNode.type === 'final';\nfunction getChildren(stateNode) {\n  return Object.values(stateNode.states).filter(sn => sn.type !== 'history');\n}\nfunction getProperAncestors(stateNode, toStateNode) {\n  const ancestors = [];\n  if (toStateNode === stateNode) {\n    return ancestors;\n  }\n\n  // add all ancestors\n  let m = stateNode.parent;\n  while (m && m !== toStateNode) {\n    ancestors.push(m);\n    m = m.parent;\n  }\n  return ancestors;\n}\nfunction getAllStateNodes(stateNodes) {\n  const nodeSet = new Set(stateNodes);\n  const adjList = getAdjList(nodeSet);\n\n  // add descendants\n  for (const s of nodeSet) {\n    // if previously active, add existing child nodes\n    if (s.type === 'compound' && (!adjList.get(s) || !adjList.get(s).length)) {\n      getInitialStateNodesWithTheirAncestors(s).forEach(sn => nodeSet.add(sn));\n    } else {\n      if (s.type === 'parallel') {\n        for (const child of getChildren(s)) {\n          if (child.type === 'history') {\n            continue;\n          }\n          if (!nodeSet.has(child)) {\n            const initialStates = getInitialStateNodesWithTheirAncestors(child);\n            for (const initialStateNode of initialStates) {\n              nodeSet.add(initialStateNode);\n            }\n          }\n        }\n      }\n    }\n  }\n\n  // add all ancestors\n  for (const s of nodeSet) {\n    let m = s.parent;\n    while (m) {\n      nodeSet.add(m);\n      m = m.parent;\n    }\n  }\n  return nodeSet;\n}\nfunction getValueFromAdj(baseNode, adjList) {\n  const childStateNodes = adjList.get(baseNode);\n  if (!childStateNodes) {\n    return {}; // todo: fix?\n  }\n  if (baseNode.type === 'compound') {\n    const childStateNode = childStateNodes[0];\n    if (childStateNode) {\n      if (isAtomicStateNode(childStateNode)) {\n        return childStateNode.key;\n      }\n    } else {\n      return {};\n    }\n  }\n  const stateValue = {};\n  for (const childStateNode of childStateNodes) {\n    stateValue[childStateNode.key] = getValueFromAdj(childStateNode, adjList);\n  }\n  return stateValue;\n}\nfunction getAdjList(stateNodes) {\n  const adjList = new Map();\n  for (const s of stateNodes) {\n    if (!adjList.has(s)) {\n      adjList.set(s, []);\n    }\n    if (s.parent) {\n      if (!adjList.has(s.parent)) {\n        adjList.set(s.parent, []);\n      }\n      adjList.get(s.parent).push(s);\n    }\n  }\n  return adjList;\n}\nfunction getStateValue(rootNode, stateNodes) {\n  const config = getAllStateNodes(stateNodes);\n  return getValueFromAdj(rootNode, getAdjList(config));\n}\nfunction isInFinalState(stateNodeSet, stateNode) {\n  if (stateNode.type === 'compound') {\n    return getChildren(stateNode).some(s => s.type === 'final' && stateNodeSet.has(s));\n  }\n  if (stateNode.type === 'parallel') {\n    return getChildren(stateNode).every(sn => isInFinalState(stateNodeSet, sn));\n  }\n  return stateNode.type === 'final';\n}\nconst isStateId = str => str[0] === STATE_IDENTIFIER;\nfunction getCandidates(stateNode, receivedEventType) {\n  const candidates = stateNode.transitions.get(receivedEventType) || [...stateNode.transitions.keys()].filter(eventDescriptor => {\n    // check if transition is a wildcard transition,\n    // which matches any non-transient events\n    if (eventDescriptor === WILDCARD) {\n      return true;\n    }\n    if (!eventDescriptor.endsWith('.*')) {\n      return false;\n    }\n    const partialEventTokens = eventDescriptor.split('.');\n    const eventTokens = receivedEventType.split('.');\n    for (let tokenIndex = 0; tokenIndex < partialEventTokens.length; tokenIndex++) {\n      const partialEventToken = partialEventTokens[tokenIndex];\n      const eventToken = eventTokens[tokenIndex];\n      if (partialEventToken === '*') {\n        const isLastToken = tokenIndex === partialEventTokens.length - 1;\n        return isLastToken;\n      }\n      if (partialEventToken !== eventToken) {\n        return false;\n      }\n    }\n    return true;\n  }).sort((a, b) => b.length - a.length).flatMap(key => stateNode.transitions.get(key));\n  return candidates;\n}\n\n/** All delayed transitions from the config. */\nfunction getDelayedTransitions(stateNode) {\n  const afterConfig = stateNode.config.after;\n  if (!afterConfig) {\n    return [];\n  }\n  const mutateEntryExit = delay => {\n    const afterEvent = createAfterEvent(delay, stateNode.id);\n    const eventType = afterEvent.type;\n    stateNode.entry.push(raise(afterEvent, {\n      id: eventType,\n      delay\n    }));\n    stateNode.exit.push(cancel(eventType));\n    return eventType;\n  };\n  const delayedTransitions = Object.keys(afterConfig).flatMap(delay => {\n    const configTransition = afterConfig[delay];\n    const resolvedTransition = typeof configTransition === 'string' ? {\n      target: configTransition\n    } : configTransition;\n    const resolvedDelay = Number.isNaN(+delay) ? delay : +delay;\n    const eventType = mutateEntryExit(resolvedDelay);\n    return toArray(resolvedTransition).map(transition => ({\n      ...transition,\n      event: eventType,\n      delay: resolvedDelay\n    }));\n  });\n  return delayedTransitions.map(delayedTransition => {\n    const {\n      delay\n    } = delayedTransition;\n    return {\n      ...formatTransition(stateNode, delayedTransition.event, delayedTransition),\n      delay\n    };\n  });\n}\nfunction formatTransition(stateNode, descriptor, transitionConfig) {\n  const normalizedTarget = normalizeTarget(transitionConfig.target);\n  const reenter = transitionConfig.reenter ?? false;\n  const target = resolveTarget(stateNode, normalizedTarget);\n  const transition = {\n    ...transitionConfig,\n    actions: toArray(transitionConfig.actions),\n    guard: transitionConfig.guard,\n    target,\n    source: stateNode,\n    reenter,\n    eventType: descriptor,\n    toJSON: () => ({\n      ...transition,\n      source: `#${stateNode.id}`,\n      target: target ? target.map(t => `#${t.id}`) : undefined\n    })\n  };\n  return transition;\n}\nfunction formatTransitions(stateNode) {\n  const transitions = new Map();\n  if (stateNode.config.on) {\n    for (const descriptor of Object.keys(stateNode.config.on)) {\n      if (descriptor === NULL_EVENT) {\n        throw new Error('Null events (\"\") cannot be specified as a transition key. Use `always: { ... }` instead.');\n      }\n      const transitionsConfig = stateNode.config.on[descriptor];\n      transitions.set(descriptor, toTransitionConfigArray(transitionsConfig).map(t => formatTransition(stateNode, descriptor, t)));\n    }\n  }\n  if (stateNode.config.onDone) {\n    const descriptor = `xstate.done.state.${stateNode.id}`;\n    transitions.set(descriptor, toTransitionConfigArray(stateNode.config.onDone).map(t => formatTransition(stateNode, descriptor, t)));\n  }\n  for (const invokeDef of stateNode.invoke) {\n    if (invokeDef.onDone) {\n      const descriptor = `xstate.done.actor.${invokeDef.id}`;\n      transitions.set(descriptor, toTransitionConfigArray(invokeDef.onDone).map(t => formatTransition(stateNode, descriptor, t)));\n    }\n    if (invokeDef.onError) {\n      const descriptor = `xstate.error.actor.${invokeDef.id}`;\n      transitions.set(descriptor, toTransitionConfigArray(invokeDef.onError).map(t => formatTransition(stateNode, descriptor, t)));\n    }\n    if (invokeDef.onSnapshot) {\n      const descriptor = `xstate.snapshot.${invokeDef.id}`;\n      transitions.set(descriptor, toTransitionConfigArray(invokeDef.onSnapshot).map(t => formatTransition(stateNode, descriptor, t)));\n    }\n  }\n  for (const delayedTransition of stateNode.after) {\n    let existing = transitions.get(delayedTransition.eventType);\n    if (!existing) {\n      existing = [];\n      transitions.set(delayedTransition.eventType, existing);\n    }\n    existing.push(delayedTransition);\n  }\n  return transitions;\n}\nfunction formatInitialTransition(stateNode, _target) {\n  const resolvedTarget = typeof _target === 'string' ? stateNode.states[_target] : _target ? stateNode.states[_target.target] : undefined;\n  if (!resolvedTarget && _target) {\n    throw new Error(\n    // eslint-disable-next-line @typescript-eslint/restrict-template-expressions, @typescript-eslint/no-base-to-string\n    `Initial state node \"${_target}\" not found on parent state node #${stateNode.id}`);\n  }\n  const transition = {\n    source: stateNode,\n    actions: !_target || typeof _target === 'string' ? [] : toArray(_target.actions),\n    eventType: null,\n    reenter: false,\n    target: resolvedTarget ? [resolvedTarget] : [],\n    toJSON: () => ({\n      ...transition,\n      source: `#${stateNode.id}`,\n      target: resolvedTarget ? [`#${resolvedTarget.id}`] : []\n    })\n  };\n  return transition;\n}\nfunction resolveTarget(stateNode, targets) {\n  if (targets === undefined) {\n    // an undefined target signals that the state node should not transition from that state when receiving that event\n    return undefined;\n  }\n  return targets.map(target => {\n    if (typeof target !== 'string') {\n      return target;\n    }\n    if (isStateId(target)) {\n      return stateNode.machine.getStateNodeById(target);\n    }\n    const isInternalTarget = target[0] === STATE_DELIMITER;\n    // If internal target is defined on machine,\n    // do not include machine key on target\n    if (isInternalTarget && !stateNode.parent) {\n      return getStateNodeByPath(stateNode, target.slice(1));\n    }\n    const resolvedTarget = isInternalTarget ? stateNode.key + target : target;\n    if (stateNode.parent) {\n      try {\n        const targetStateNode = getStateNodeByPath(stateNode.parent, resolvedTarget);\n        return targetStateNode;\n      } catch (err) {\n        throw new Error(`Invalid transition definition for state node '${stateNode.id}':\\n${err.message}`);\n      }\n    } else {\n      throw new Error(`Invalid target: \"${target}\" is not a valid target from the root node. Did you mean \".${target}\"?`);\n    }\n  });\n}\nfunction resolveHistoryDefaultTransition(stateNode) {\n  const normalizedTarget = normalizeTarget(stateNode.config.target);\n  if (!normalizedTarget) {\n    return stateNode.parent.initial;\n  }\n  return {\n    target: normalizedTarget.map(t => typeof t === 'string' ? getStateNodeByPath(stateNode.parent, t) : t)\n  };\n}\nfunction isHistoryNode(stateNode) {\n  return stateNode.type === 'history';\n}\nfunction getInitialStateNodesWithTheirAncestors(stateNode) {\n  const states = getInitialStateNodes(stateNode);\n  for (const initialState of states) {\n    for (const ancestor of getProperAncestors(initialState, stateNode)) {\n      states.add(ancestor);\n    }\n  }\n  return states;\n}\nfunction getInitialStateNodes(stateNode) {\n  const set = new Set();\n  function iter(descStateNode) {\n    if (set.has(descStateNode)) {\n      return;\n    }\n    set.add(descStateNode);\n    if (descStateNode.type === 'compound') {\n      iter(descStateNode.initial.target[0]);\n    } else if (descStateNode.type === 'parallel') {\n      for (const child of getChildren(descStateNode)) {\n        iter(child);\n      }\n    }\n  }\n  iter(stateNode);\n  return set;\n}\n/** Returns the child state node from its relative `stateKey`, or throws. */\nfunction getStateNode(stateNode, stateKey) {\n  if (isStateId(stateKey)) {\n    return stateNode.machine.getStateNodeById(stateKey);\n  }\n  if (!stateNode.states) {\n    throw new Error(`Unable to retrieve child state '${stateKey}' from '${stateNode.id}'; no child states exist.`);\n  }\n  const result = stateNode.states[stateKey];\n  if (!result) {\n    throw new Error(`Child state '${stateKey}' does not exist on '${stateNode.id}'`);\n  }\n  return result;\n}\n\n/**\n * Returns the relative state node from the given `statePath`, or throws.\n *\n * @param statePath The string or string array relative path to the state node.\n */\nfunction getStateNodeByPath(stateNode, statePath) {\n  if (typeof statePath === 'string' && isStateId(statePath)) {\n    try {\n      return stateNode.machine.getStateNodeById(statePath);\n    } catch {\n      // try individual paths\n      // throw e;\n    }\n  }\n  const arrayStatePath = toStatePath(statePath).slice();\n  let currentStateNode = stateNode;\n  while (arrayStatePath.length) {\n    const key = arrayStatePath.shift();\n    if (!key.length) {\n      break;\n    }\n    currentStateNode = getStateNode(currentStateNode, key);\n  }\n  return currentStateNode;\n}\n\n/**\n * Returns the state nodes represented by the current state value.\n *\n * @param stateValue The state value or State instance\n */\nfunction getStateNodes(stateNode, stateValue) {\n  if (typeof stateValue === 'string') {\n    const childStateNode = stateNode.states[stateValue];\n    if (!childStateNode) {\n      throw new Error(`State '${stateValue}' does not exist on '${stateNode.id}'`);\n    }\n    return [stateNode, childStateNode];\n  }\n  const childStateKeys = Object.keys(stateValue);\n  const childStateNodes = childStateKeys.map(subStateKey => getStateNode(stateNode, subStateKey)).filter(Boolean);\n  return [stateNode.machine.root, stateNode].concat(childStateNodes, childStateKeys.reduce((allSubStateNodes, subStateKey) => {\n    const subStateNode = getStateNode(stateNode, subStateKey);\n    if (!subStateNode) {\n      return allSubStateNodes;\n    }\n    const subStateNodes = getStateNodes(subStateNode, stateValue[subStateKey]);\n    return allSubStateNodes.concat(subStateNodes);\n  }, []));\n}\nfunction transitionAtomicNode(stateNode, stateValue, snapshot, event) {\n  const childStateNode = getStateNode(stateNode, stateValue);\n  const next = childStateNode.next(snapshot, event);\n  if (!next || !next.length) {\n    return stateNode.next(snapshot, event);\n  }\n  return next;\n}\nfunction transitionCompoundNode(stateNode, stateValue, snapshot, event) {\n  const subStateKeys = Object.keys(stateValue);\n  const childStateNode = getStateNode(stateNode, subStateKeys[0]);\n  const next = transitionNode(childStateNode, stateValue[subStateKeys[0]], snapshot, event);\n  if (!next || !next.length) {\n    return stateNode.next(snapshot, event);\n  }\n  return next;\n}\nfunction transitionParallelNode(stateNode, stateValue, snapshot, event) {\n  const allInnerTransitions = [];\n  for (const subStateKey of Object.keys(stateValue)) {\n    const subStateValue = stateValue[subStateKey];\n    if (!subStateValue) {\n      continue;\n    }\n    const subStateNode = getStateNode(stateNode, subStateKey);\n    const innerTransitions = transitionNode(subStateNode, subStateValue, snapshot, event);\n    if (innerTransitions) {\n      allInnerTransitions.push(...innerTransitions);\n    }\n  }\n  if (!allInnerTransitions.length) {\n    return stateNode.next(snapshot, event);\n  }\n  return allInnerTransitions;\n}\nfunction transitionNode(stateNode, stateValue, snapshot, event) {\n  // leaf node\n  if (typeof stateValue === 'string') {\n    return transitionAtomicNode(stateNode, stateValue, snapshot, event);\n  }\n\n  // compound node\n  if (Object.keys(stateValue).length === 1) {\n    return transitionCompoundNode(stateNode, stateValue, snapshot, event);\n  }\n\n  // parallel node\n  return transitionParallelNode(stateNode, stateValue, snapshot, event);\n}\nfunction getHistoryNodes(stateNode) {\n  return Object.keys(stateNode.states).map(key => stateNode.states[key]).filter(sn => sn.type === 'history');\n}\nfunction isDescendant(childStateNode, parentStateNode) {\n  let marker = childStateNode;\n  while (marker.parent && marker.parent !== parentStateNode) {\n    marker = marker.parent;\n  }\n  return marker.parent === parentStateNode;\n}\nfunction hasIntersection(s1, s2) {\n  const set1 = new Set(s1);\n  const set2 = new Set(s2);\n  for (const item of set1) {\n    if (set2.has(item)) {\n      return true;\n    }\n  }\n  for (const item of set2) {\n    if (set1.has(item)) {\n      return true;\n    }\n  }\n  return false;\n}\nfunction removeConflictingTransitions(enabledTransitions, stateNodeSet, historyValue) {\n  const filteredTransitions = new Set();\n  for (const t1 of enabledTransitions) {\n    let t1Preempted = false;\n    const transitionsToRemove = new Set();\n    for (const t2 of filteredTransitions) {\n      if (hasIntersection(computeExitSet([t1], stateNodeSet, historyValue), computeExitSet([t2], stateNodeSet, historyValue))) {\n        if (isDescendant(t1.source, t2.source)) {\n          transitionsToRemove.add(t2);\n        } else {\n          t1Preempted = true;\n          break;\n        }\n      }\n    }\n    if (!t1Preempted) {\n      for (const t3 of transitionsToRemove) {\n        filteredTransitions.delete(t3);\n      }\n      filteredTransitions.add(t1);\n    }\n  }\n  return Array.from(filteredTransitions);\n}\nfunction findLeastCommonAncestor(stateNodes) {\n  const [head, ...tail] = stateNodes;\n  for (const ancestor of getProperAncestors(head, undefined)) {\n    if (tail.every(sn => isDescendant(sn, ancestor))) {\n      return ancestor;\n    }\n  }\n}\nfunction getEffectiveTargetStates(transition, historyValue) {\n  if (!transition.target) {\n    return [];\n  }\n  const targets = new Set();\n  for (const targetNode of transition.target) {\n    if (isHistoryNode(targetNode)) {\n      if (historyValue[targetNode.id]) {\n        for (const node of historyValue[targetNode.id]) {\n          targets.add(node);\n        }\n      } else {\n        for (const node of getEffectiveTargetStates(resolveHistoryDefaultTransition(targetNode), historyValue)) {\n          targets.add(node);\n        }\n      }\n    } else {\n      targets.add(targetNode);\n    }\n  }\n  return [...targets];\n}\nfunction getTransitionDomain(transition, historyValue) {\n  const targetStates = getEffectiveTargetStates(transition, historyValue);\n  if (!targetStates) {\n    return;\n  }\n  if (!transition.reenter && targetStates.every(target => target === transition.source || isDescendant(target, transition.source))) {\n    return transition.source;\n  }\n  const lca = findLeastCommonAncestor(targetStates.concat(transition.source));\n  if (lca) {\n    return lca;\n  }\n\n  // at this point we know that it's a root transition since LCA couldn't be found\n  if (transition.reenter) {\n    return;\n  }\n  return transition.source.machine.root;\n}\nfunction computeExitSet(transitions, stateNodeSet, historyValue) {\n  const statesToExit = new Set();\n  for (const t of transitions) {\n    if (t.target?.length) {\n      const domain = getTransitionDomain(t, historyValue);\n      if (t.reenter && t.source === domain) {\n        statesToExit.add(domain);\n      }\n      for (const stateNode of stateNodeSet) {\n        if (isDescendant(stateNode, domain)) {\n          statesToExit.add(stateNode);\n        }\n      }\n    }\n  }\n  return [...statesToExit];\n}\nfunction areStateNodeCollectionsEqual(prevStateNodes, nextStateNodeSet) {\n  if (prevStateNodes.length !== nextStateNodeSet.size) {\n    return false;\n  }\n  for (const node of prevStateNodes) {\n    if (!nextStateNodeSet.has(node)) {\n      return false;\n    }\n  }\n  return true;\n}\n\n/** https://www.w3.org/TR/scxml/#microstepProcedure */\nfunction microstep(transitions, currentSnapshot, actorScope, event, isInitial, internalQueue) {\n  if (!transitions.length) {\n    return currentSnapshot;\n  }\n  const mutStateNodeSet = new Set(currentSnapshot._nodes);\n  let historyValue = currentSnapshot.historyValue;\n  const filteredTransitions = removeConflictingTransitions(transitions, mutStateNodeSet, historyValue);\n  let nextState = currentSnapshot;\n\n  // Exit states\n  if (!isInitial) {\n    [nextState, historyValue] = exitStates(nextState, event, actorScope, filteredTransitions, mutStateNodeSet, historyValue, internalQueue, actorScope.actionExecutor);\n  }\n\n  // Execute transition content\n  nextState = resolveActionsAndContext(nextState, event, actorScope, filteredTransitions.flatMap(t => t.actions), internalQueue, undefined);\n\n  // Enter states\n  nextState = enterStates(nextState, event, actorScope, filteredTransitions, mutStateNodeSet, internalQueue, historyValue, isInitial);\n  const nextStateNodes = [...mutStateNodeSet];\n  if (nextState.status === 'done') {\n    nextState = resolveActionsAndContext(nextState, event, actorScope, nextStateNodes.sort((a, b) => b.order - a.order).flatMap(state => state.exit), internalQueue, undefined);\n  }\n\n  // eslint-disable-next-line no-useless-catch\n  try {\n    if (historyValue === currentSnapshot.historyValue && areStateNodeCollectionsEqual(currentSnapshot._nodes, mutStateNodeSet)) {\n      return nextState;\n    }\n    return cloneMachineSnapshot(nextState, {\n      _nodes: nextStateNodes,\n      historyValue\n    });\n  } catch (e) {\n    // TODO: Refactor this once proper error handling is implemented.\n    // See https://github.com/statelyai/rfcs/pull/4\n    throw e;\n  }\n}\nfunction getMachineOutput(snapshot, event, actorScope, rootNode, rootCompletionNode) {\n  if (rootNode.output === undefined) {\n    return;\n  }\n  const doneStateEvent = createDoneStateEvent(rootCompletionNode.id, rootCompletionNode.output !== undefined && rootCompletionNode.parent ? resolveOutput(rootCompletionNode.output, snapshot.context, event, actorScope.self) : undefined);\n  return resolveOutput(rootNode.output, snapshot.context, doneStateEvent, actorScope.self);\n}\nfunction enterStates(currentSnapshot, event, actorScope, filteredTransitions, mutStateNodeSet, internalQueue, historyValue, isInitial) {\n  let nextSnapshot = currentSnapshot;\n  const statesToEnter = new Set();\n  // those are states that were directly targeted or indirectly targeted by the explicit target\n  // in other words, those are states for which initial actions should be executed\n  // when we target `#deep_child` initial actions of its ancestors shouldn't be executed\n  const statesForDefaultEntry = new Set();\n  computeEntrySet(filteredTransitions, historyValue, statesForDefaultEntry, statesToEnter);\n\n  // In the initial state, the root state node is \"entered\".\n  if (isInitial) {\n    statesForDefaultEntry.add(currentSnapshot.machine.root);\n  }\n  const completedNodes = new Set();\n  for (const stateNodeToEnter of [...statesToEnter].sort((a, b) => a.order - b.order)) {\n    mutStateNodeSet.add(stateNodeToEnter);\n    const actions = [];\n\n    // Add entry actions\n    actions.push(...stateNodeToEnter.entry);\n    for (const invokeDef of stateNodeToEnter.invoke) {\n      actions.push(spawnChild(invokeDef.src, {\n        ...invokeDef,\n        syncSnapshot: !!invokeDef.onSnapshot\n      }));\n    }\n    if (statesForDefaultEntry.has(stateNodeToEnter)) {\n      const initialActions = stateNodeToEnter.initial.actions;\n      actions.push(...initialActions);\n    }\n    nextSnapshot = resolveActionsAndContext(nextSnapshot, event, actorScope, actions, internalQueue, stateNodeToEnter.invoke.map(invokeDef => invokeDef.id));\n    if (stateNodeToEnter.type === 'final') {\n      const parent = stateNodeToEnter.parent;\n      let ancestorMarker = parent?.type === 'parallel' ? parent : parent?.parent;\n      let rootCompletionNode = ancestorMarker || stateNodeToEnter;\n      if (parent?.type === 'compound') {\n        internalQueue.push(createDoneStateEvent(parent.id, stateNodeToEnter.output !== undefined ? resolveOutput(stateNodeToEnter.output, nextSnapshot.context, event, actorScope.self) : undefined));\n      }\n      while (ancestorMarker?.type === 'parallel' && !completedNodes.has(ancestorMarker) && isInFinalState(mutStateNodeSet, ancestorMarker)) {\n        completedNodes.add(ancestorMarker);\n        internalQueue.push(createDoneStateEvent(ancestorMarker.id));\n        rootCompletionNode = ancestorMarker;\n        ancestorMarker = ancestorMarker.parent;\n      }\n      if (ancestorMarker) {\n        continue;\n      }\n      nextSnapshot = cloneMachineSnapshot(nextSnapshot, {\n        status: 'done',\n        output: getMachineOutput(nextSnapshot, event, actorScope, nextSnapshot.machine.root, rootCompletionNode)\n      });\n    }\n  }\n  return nextSnapshot;\n}\nfunction computeEntrySet(transitions, historyValue, statesForDefaultEntry, statesToEnter) {\n  for (const t of transitions) {\n    const domain = getTransitionDomain(t, historyValue);\n    for (const s of t.target || []) {\n      if (!isHistoryNode(s) && (\n      // if the target is different than the source then it will *definitely* be entered\n      t.source !== s ||\n      // we know that the domain can't lie within the source\n      // if it's different than the source then it's outside of it and it means that the target has to be entered as well\n      t.source !== domain ||\n      // reentering transitions always enter the target, even if it's the source itself\n      t.reenter)) {\n        statesToEnter.add(s);\n        statesForDefaultEntry.add(s);\n      }\n      addDescendantStatesToEnter(s, historyValue, statesForDefaultEntry, statesToEnter);\n    }\n    const targetStates = getEffectiveTargetStates(t, historyValue);\n    for (const s of targetStates) {\n      const ancestors = getProperAncestors(s, domain);\n      if (domain?.type === 'parallel') {\n        ancestors.push(domain);\n      }\n      addAncestorStatesToEnter(statesToEnter, historyValue, statesForDefaultEntry, ancestors, !t.source.parent && t.reenter ? undefined : domain);\n    }\n  }\n}\nfunction addDescendantStatesToEnter(stateNode, historyValue, statesForDefaultEntry, statesToEnter) {\n  if (isHistoryNode(stateNode)) {\n    if (historyValue[stateNode.id]) {\n      const historyStateNodes = historyValue[stateNode.id];\n      for (const s of historyStateNodes) {\n        statesToEnter.add(s);\n        addDescendantStatesToEnter(s, historyValue, statesForDefaultEntry, statesToEnter);\n      }\n      for (const s of historyStateNodes) {\n        addProperAncestorStatesToEnter(s, stateNode.parent, statesToEnter, historyValue, statesForDefaultEntry);\n      }\n    } else {\n      const historyDefaultTransition = resolveHistoryDefaultTransition(stateNode);\n      for (const s of historyDefaultTransition.target) {\n        statesToEnter.add(s);\n        if (historyDefaultTransition === stateNode.parent?.initial) {\n          statesForDefaultEntry.add(stateNode.parent);\n        }\n        addDescendantStatesToEnter(s, historyValue, statesForDefaultEntry, statesToEnter);\n      }\n      for (const s of historyDefaultTransition.target) {\n        addProperAncestorStatesToEnter(s, stateNode.parent, statesToEnter, historyValue, statesForDefaultEntry);\n      }\n    }\n  } else {\n    if (stateNode.type === 'compound') {\n      const [initialState] = stateNode.initial.target;\n      if (!isHistoryNode(initialState)) {\n        statesToEnter.add(initialState);\n        statesForDefaultEntry.add(initialState);\n      }\n      addDescendantStatesToEnter(initialState, historyValue, statesForDefaultEntry, statesToEnter);\n      addProperAncestorStatesToEnter(initialState, stateNode, statesToEnter, historyValue, statesForDefaultEntry);\n    } else {\n      if (stateNode.type === 'parallel') {\n        for (const child of getChildren(stateNode).filter(sn => !isHistoryNode(sn))) {\n          if (![...statesToEnter].some(s => isDescendant(s, child))) {\n            if (!isHistoryNode(child)) {\n              statesToEnter.add(child);\n              statesForDefaultEntry.add(child);\n            }\n            addDescendantStatesToEnter(child, historyValue, statesForDefaultEntry, statesToEnter);\n          }\n        }\n      }\n    }\n  }\n}\nfunction addAncestorStatesToEnter(statesToEnter, historyValue, statesForDefaultEntry, ancestors, reentrancyDomain) {\n  for (const anc of ancestors) {\n    if (!reentrancyDomain || isDescendant(anc, reentrancyDomain)) {\n      statesToEnter.add(anc);\n    }\n    if (anc.type === 'parallel') {\n      for (const child of getChildren(anc).filter(sn => !isHistoryNode(sn))) {\n        if (![...statesToEnter].some(s => isDescendant(s, child))) {\n          statesToEnter.add(child);\n          addDescendantStatesToEnter(child, historyValue, statesForDefaultEntry, statesToEnter);\n        }\n      }\n    }\n  }\n}\nfunction addProperAncestorStatesToEnter(stateNode, toStateNode, statesToEnter, historyValue, statesForDefaultEntry) {\n  addAncestorStatesToEnter(statesToEnter, historyValue, statesForDefaultEntry, getProperAncestors(stateNode, toStateNode));\n}\nfunction exitStates(currentSnapshot, event, actorScope, transitions, mutStateNodeSet, historyValue, internalQueue, _actionExecutor) {\n  let nextSnapshot = currentSnapshot;\n  const statesToExit = computeExitSet(transitions, mutStateNodeSet, historyValue);\n  statesToExit.sort((a, b) => b.order - a.order);\n  let changedHistory;\n\n  // From SCXML algorithm: https://www.w3.org/TR/scxml/#exitStates\n  for (const exitStateNode of statesToExit) {\n    for (const historyNode of getHistoryNodes(exitStateNode)) {\n      let predicate;\n      if (historyNode.history === 'deep') {\n        predicate = sn => isAtomicStateNode(sn) && isDescendant(sn, exitStateNode);\n      } else {\n        predicate = sn => {\n          return sn.parent === exitStateNode;\n        };\n      }\n      changedHistory ??= {\n        ...historyValue\n      };\n      changedHistory[historyNode.id] = Array.from(mutStateNodeSet).filter(predicate);\n    }\n  }\n  for (const s of statesToExit) {\n    nextSnapshot = resolveActionsAndContext(nextSnapshot, event, actorScope, [...s.exit, ...s.invoke.map(def => stopChild(def.id))], internalQueue, undefined);\n    mutStateNodeSet.delete(s);\n  }\n  return [nextSnapshot, changedHistory || historyValue];\n}\nfunction getAction(machine, actionType) {\n  return machine.implementations.actions[actionType];\n}\nfunction resolveAndExecuteActionsWithContext(currentSnapshot, event, actorScope, actions, extra, retries) {\n  const {\n    machine\n  } = currentSnapshot;\n  let intermediateSnapshot = currentSnapshot;\n  for (const action of actions) {\n    const isInline = typeof action === 'function';\n    const resolvedAction = isInline ? action :\n    // the existing type of `.actions` assumes non-nullable `TExpressionAction`\n    // it's fine to cast this here to get a common type and lack of errors in the rest of the code\n    // our logic below makes sure that we call those 2 \"variants\" correctly\n\n    getAction(machine, typeof action === 'string' ? action : action.type);\n    const actionArgs = {\n      context: intermediateSnapshot.context,\n      event,\n      self: actorScope.self,\n      system: actorScope.system\n    };\n    const actionParams = isInline || typeof action === 'string' ? undefined : 'params' in action ? typeof action.params === 'function' ? action.params({\n      context: intermediateSnapshot.context,\n      event\n    }) : action.params : undefined;\n    if (!resolvedAction || !('resolve' in resolvedAction)) {\n      actorScope.actionExecutor({\n        type: typeof action === 'string' ? action : typeof action === 'object' ? action.type : action.name || '(anonymous)',\n        info: actionArgs,\n        params: actionParams,\n        exec: resolvedAction\n      });\n      continue;\n    }\n    const builtinAction = resolvedAction;\n    const [nextState, params, actions] = builtinAction.resolve(actorScope, intermediateSnapshot, actionArgs, actionParams, resolvedAction,\n    // this holds all params\n    extra);\n    intermediateSnapshot = nextState;\n    if ('retryResolve' in builtinAction) {\n      retries?.push([builtinAction, params]);\n    }\n    if ('execute' in builtinAction) {\n      actorScope.actionExecutor({\n        type: builtinAction.type,\n        info: actionArgs,\n        params,\n        exec: builtinAction.execute.bind(null, actorScope, params)\n      });\n    }\n    if (actions) {\n      intermediateSnapshot = resolveAndExecuteActionsWithContext(intermediateSnapshot, event, actorScope, actions, extra, retries);\n    }\n  }\n  return intermediateSnapshot;\n}\nfunction resolveActionsAndContext(currentSnapshot, event, actorScope, actions, internalQueue, deferredActorIds) {\n  const retries = deferredActorIds ? [] : undefined;\n  const nextState = resolveAndExecuteActionsWithContext(currentSnapshot, event, actorScope, actions, {\n    internalQueue,\n    deferredActorIds\n  }, retries);\n  retries?.forEach(([builtinAction, params]) => {\n    builtinAction.retryResolve(actorScope, nextState, params);\n  });\n  return nextState;\n}\nfunction macrostep(snapshot, event, actorScope, internalQueue) {\n  let nextSnapshot = snapshot;\n  const microstates = [];\n  function addMicrostate(microstate, event, transitions) {\n    actorScope.system._sendInspectionEvent({\n      type: '@xstate.microstep',\n      actorRef: actorScope.self,\n      event,\n      snapshot: microstate,\n      _transitions: transitions\n    });\n    microstates.push(microstate);\n  }\n\n  // Handle stop event\n  if (event.type === XSTATE_STOP) {\n    nextSnapshot = cloneMachineSnapshot(stopChildren(nextSnapshot, event, actorScope), {\n      status: 'stopped'\n    });\n    addMicrostate(nextSnapshot, event, []);\n    return {\n      snapshot: nextSnapshot,\n      microstates\n    };\n  }\n  let nextEvent = event;\n\n  // Assume the state is at rest (no raised events)\n  // Determine the next state based on the next microstep\n  if (nextEvent.type !== XSTATE_INIT) {\n    const currentEvent = nextEvent;\n    const isErr = isErrorActorEvent(currentEvent);\n    const transitions = selectTransitions(currentEvent, nextSnapshot);\n    if (isErr && !transitions.length) {\n      // TODO: we should likely only allow transitions selected by very explicit descriptors\n      // `*` shouldn't be matched, likely `xstate.error.*` shouldnt be either\n      // similarly `xstate.error.actor.*` and `xstate.error.actor.todo.*` have to be considered too\n      nextSnapshot = cloneMachineSnapshot(snapshot, {\n        status: 'error',\n        error: currentEvent.error\n      });\n      addMicrostate(nextSnapshot, currentEvent, []);\n      return {\n        snapshot: nextSnapshot,\n        microstates\n      };\n    }\n    nextSnapshot = microstep(transitions, snapshot, actorScope, nextEvent, false,\n    // isInitial\n    internalQueue);\n    addMicrostate(nextSnapshot, currentEvent, transitions);\n  }\n  let shouldSelectEventlessTransitions = true;\n  while (nextSnapshot.status === 'active') {\n    let enabledTransitions = shouldSelectEventlessTransitions ? selectEventlessTransitions(nextSnapshot, nextEvent) : [];\n\n    // eventless transitions should always be selected after selecting *regular* transitions\n    // by assigning `undefined` to `previousState` we ensure that `shouldSelectEventlessTransitions` gets always computed to true in such a case\n    const previousState = enabledTransitions.length ? nextSnapshot : undefined;\n    if (!enabledTransitions.length) {\n      if (!internalQueue.length) {\n        break;\n      }\n      nextEvent = internalQueue.shift();\n      enabledTransitions = selectTransitions(nextEvent, nextSnapshot);\n    }\n    nextSnapshot = microstep(enabledTransitions, nextSnapshot, actorScope, nextEvent, false, internalQueue);\n    shouldSelectEventlessTransitions = nextSnapshot !== previousState;\n    addMicrostate(nextSnapshot, nextEvent, enabledTransitions);\n  }\n  if (nextSnapshot.status !== 'active') {\n    stopChildren(nextSnapshot, nextEvent, actorScope);\n  }\n  return {\n    snapshot: nextSnapshot,\n    microstates\n  };\n}\nfunction stopChildren(nextState, event, actorScope) {\n  return resolveActionsAndContext(nextState, event, actorScope, Object.values(nextState.children).map(child => stopChild(child)), [], undefined);\n}\nfunction selectTransitions(event, nextState) {\n  return nextState.machine.getTransitionData(nextState, event);\n}\nfunction selectEventlessTransitions(nextState, event) {\n  const enabledTransitionSet = new Set();\n  const atomicStates = nextState._nodes.filter(isAtomicStateNode);\n  for (const stateNode of atomicStates) {\n    loop: for (const s of [stateNode].concat(getProperAncestors(stateNode, undefined))) {\n      if (!s.always) {\n        continue;\n      }\n      for (const transition of s.always) {\n        if (transition.guard === undefined || evaluateGuard(transition.guard, nextState.context, event, nextState)) {\n          enabledTransitionSet.add(transition);\n          break loop;\n        }\n      }\n    }\n  }\n  return removeConflictingTransitions(Array.from(enabledTransitionSet), new Set(nextState._nodes), nextState.historyValue);\n}\n\n/**\n * Resolves a partial state value with its full representation in the state\n * node's machine.\n *\n * @param stateValue The partial state value to resolve.\n */\nfunction resolveStateValue(rootNode, stateValue) {\n  const allStateNodes = getAllStateNodes(getStateNodes(rootNode, stateValue));\n  return getStateValue(rootNode, [...allStateNodes]);\n}\n\nfunction isMachineSnapshot(value) {\n  return !!value && typeof value === 'object' && 'machine' in value && 'value' in value;\n}\nconst machineSnapshotMatches = function matches(testValue) {\n  return matchesState(testValue, this.value);\n};\nconst machineSnapshotHasTag = function hasTag(tag) {\n  return this.tags.has(tag);\n};\nconst machineSnapshotCan = function can(event) {\n  const transitionData = this.machine.getTransitionData(this, event);\n  return !!transitionData?.length &&\n  // Check that at least one transition is not forbidden\n  transitionData.some(t => t.target !== undefined || t.actions.length);\n};\nconst machineSnapshotToJSON = function toJSON() {\n  const {\n    _nodes: nodes,\n    tags,\n    machine,\n    getMeta,\n    toJSON,\n    can,\n    hasTag,\n    matches,\n    ...jsonValues\n  } = this;\n  return {\n    ...jsonValues,\n    tags: Array.from(tags)\n  };\n};\nconst machineSnapshotGetMeta = function getMeta() {\n  return this._nodes.reduce((acc, stateNode) => {\n    if (stateNode.meta !== undefined) {\n      acc[stateNode.id] = stateNode.meta;\n    }\n    return acc;\n  }, {});\n};\nfunction createMachineSnapshot(config, machine) {\n  return {\n    status: config.status,\n    output: config.output,\n    error: config.error,\n    machine,\n    context: config.context,\n    _nodes: config._nodes,\n    value: getStateValue(machine.root, config._nodes),\n    tags: new Set(config._nodes.flatMap(sn => sn.tags)),\n    children: config.children,\n    historyValue: config.historyValue || {},\n    matches: machineSnapshotMatches,\n    hasTag: machineSnapshotHasTag,\n    can: machineSnapshotCan,\n    getMeta: machineSnapshotGetMeta,\n    toJSON: machineSnapshotToJSON\n  };\n}\nfunction cloneMachineSnapshot(snapshot, config = {}) {\n  return createMachineSnapshot({\n    ...snapshot,\n    ...config\n  }, snapshot.machine);\n}\nfunction getPersistedSnapshot(snapshot, options) {\n  const {\n    _nodes: nodes,\n    tags,\n    machine,\n    children,\n    context,\n    can,\n    hasTag,\n    matches,\n    getMeta,\n    toJSON,\n    ...jsonValues\n  } = snapshot;\n  const childrenJson = {};\n  for (const id in children) {\n    const child = children[id];\n    childrenJson[id] = {\n      snapshot: child.getPersistedSnapshot(options),\n      src: child.src,\n      systemId: child._systemId,\n      syncSnapshot: child._syncSnapshot\n    };\n  }\n  const persisted = {\n    ...jsonValues,\n    context: persistContext(context),\n    children: childrenJson\n  };\n  return persisted;\n}\nfunction persistContext(contextPart) {\n  let copy;\n  for (const key in contextPart) {\n    const value = contextPart[key];\n    if (value && typeof value === 'object') {\n      if ('sessionId' in value && 'send' in value && 'ref' in value) {\n        copy ??= Array.isArray(contextPart) ? contextPart.slice() : {\n          ...contextPart\n        };\n        copy[key] = {\n          xstate$$type: $$ACTOR_TYPE,\n          id: value.id\n        };\n      } else {\n        const result = persistContext(value);\n        if (result !== value) {\n          copy ??= Array.isArray(contextPart) ? contextPart.slice() : {\n            ...contextPart\n          };\n          copy[key] = result;\n        }\n      }\n    }\n  }\n  return copy ?? contextPart;\n}\n\nfunction resolveRaise(_, snapshot, args, actionParams, {\n  event: eventOrExpr,\n  id,\n  delay\n}, {\n  internalQueue\n}) {\n  const delaysMap = snapshot.machine.implementations.delays;\n  if (typeof eventOrExpr === 'string') {\n    throw new Error(\n    // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n    `Only event objects may be used with raise; use raise({ type: \"${eventOrExpr}\" }) instead`);\n  }\n  const resolvedEvent = typeof eventOrExpr === 'function' ? eventOrExpr(args, actionParams) : eventOrExpr;\n  let resolvedDelay;\n  if (typeof delay === 'string') {\n    const configDelay = delaysMap && delaysMap[delay];\n    resolvedDelay = typeof configDelay === 'function' ? configDelay(args, actionParams) : configDelay;\n  } else {\n    resolvedDelay = typeof delay === 'function' ? delay(args, actionParams) : delay;\n  }\n  if (typeof resolvedDelay !== 'number') {\n    internalQueue.push(resolvedEvent);\n  }\n  return [snapshot, {\n    event: resolvedEvent,\n    id,\n    delay: resolvedDelay\n  }, undefined];\n}\nfunction executeRaise(actorScope, params) {\n  const {\n    event,\n    delay,\n    id\n  } = params;\n  if (typeof delay === 'number') {\n    actorScope.defer(() => {\n      const self = actorScope.self;\n      actorScope.system.scheduler.schedule(self, self, event, delay, id);\n    });\n    return;\n  }\n}\n/**\n * Raises an event. This places the event in the internal event queue, so that\n * the event is immediately consumed by the machine in the current step.\n *\n * @param eventType The event to raise.\n */\nfunction raise(eventOrExpr, options) {\n  function raise(_args, _params) {\n  }\n  raise.type = 'xstate.raise';\n  raise.event = eventOrExpr;\n  raise.id = options?.id;\n  raise.delay = options?.delay;\n  raise.resolve = resolveRaise;\n  raise.execute = executeRaise;\n  return raise;\n}\n\nexport { $$ACTOR_TYPE as $, createActor as A, Actor as B, interpret as C, and as D, not as E, or as F, stateIn as G, isMachineSnapshot as H, getAllOwnEventDescriptors as I, matchesState as J, pathToStateValue as K, toObserver as L, cancel as M, NULL_EVENT as N, raise as O, spawnChild as P, stop as Q, stopChild as R, STATE_DELIMITER as S, ProcessingStatus as T, cloneMachineSnapshot as U, XSTATE_ERROR as V, createErrorActorEvent as W, XSTATE_STOP as X, toTransitionConfigArray as a, formatTransition as b, createInvokeId as c, formatInitialTransition as d, evaluateGuard as e, formatTransitions as f, getDelayedTransitions as g, getCandidates as h, getAllStateNodes as i, getStateNodes as j, createMachineSnapshot as k, isInFinalState as l, mapValues as m, macrostep as n, transitionNode as o, resolveActionsAndContext as p, createInitEvent as q, resolveStateValue as r, microstep as s, toArray as t, getInitialStateNodes as u, toStatePath as v, isStateId as w, getStateNodeByPath as x, getPersistedSnapshot as y, resolveReferencedActor as z };\n","import { X as XSTATE_STOP, A as createActor } from '../../dist/raise-c17ec2bc.esm.js';\nimport '../../dev/dist/xstate-dev.esm.js';\n\n/**\n * Represents an actor created by `fromTransition`.\n *\n * The type of `self` within the actor's logic.\n *\n * @example\n *\n * ```ts\n * import {\n *   fromTransition,\n *   createActor,\n *   type AnyActorSystem\n * } from 'xstate';\n *\n * //* The actor's stored context.\n * type Context = {\n *   // The current count.\n *   count: number;\n *   // The amount to increase `count` by.\n *   step: number;\n * };\n * // The events the actor receives.\n * type Event = { type: 'increment' };\n * // The actor's input.\n * type Input = { step?: number };\n *\n * // Actor logic that increments `count` by `step` when it receives an event of\n * // type `increment`.\n * const logic = fromTransition<Context, Event, AnyActorSystem, Input>(\n *   (state, event, actorScope) => {\n *     actorScope.self;\n *     //         ^? TransitionActorRef<Context, Event>\n *\n *     if (event.type === 'increment') {\n *       return {\n *         ...state,\n *         count: state.count + state.step\n *       };\n *     }\n *     return state;\n *   },\n *   ({ input, self }) => {\n *     self;\n *     // ^? TransitionActorRef<Context, Event>\n *\n *     return {\n *       count: 0,\n *       step: input.step ?? 1\n *     };\n *   }\n * );\n *\n * const actor = createActor(logic, { input: { step: 10 } });\n * //    ^? TransitionActorRef<Context, Event>\n * ```\n *\n * @see {@link fromTransition}\n */\n\n/**\n * Returns actor logic given a transition function and its initial state.\n *\n * A “transition function” is a function that takes the current `state` and\n * received `event` object as arguments, and returns the next state, similar to\n * a reducer.\n *\n * Actors created from transition logic (“transition actors”) can:\n *\n * - Receive events\n * - Emit snapshots of its state\n *\n * The transition function’s `state` is used as its transition actor’s\n * `context`.\n *\n * Note that the \"state\" for a transition function is provided by the initial\n * state argument, and is not the same as the State object of an actor or a\n * state within a machine configuration.\n *\n * @example\n *\n * ```ts\n * const transitionLogic = fromTransition(\n *   (state, event) => {\n *     if (event.type === 'increment') {\n *       return {\n *         ...state,\n *         count: state.count + 1\n *       };\n *     }\n *     return state;\n *   },\n *   { count: 0 }\n * );\n *\n * const transitionActor = createActor(transitionLogic);\n * transitionActor.subscribe((snapshot) => {\n *   console.log(snapshot);\n * });\n * transitionActor.start();\n * // => {\n * //   status: 'active',\n * //   context: { count: 0 },\n * //   ...\n * // }\n *\n * transitionActor.send({ type: 'increment' });\n * // => {\n * //   status: 'active',\n * //   context: { count: 1 },\n * //   ...\n * // }\n * ```\n *\n * @param transition The transition function used to describe the transition\n *   logic. It should return the next state given the current state and event.\n *   It receives the following arguments:\n *\n *   - `state` - the current state.\n *   - `event` - the received event.\n *   - `actorScope` - the actor scope object, with properties like `self` and\n *       `system`.\n *\n * @param initialContext The initial state of the transition function, either an\n *   object representing the state, or a function which returns a state object.\n *   If a function, it will receive as its only argument an object with the\n *   following properties:\n *\n *   - `input` - the `input` provided to its parent transition actor.\n *   - `self` - a reference to its parent transition actor.\n *\n * @returns Actor logic\n * @see {@link https://stately.ai/docs/input | Input docs} for more information about how input is passed\n */\nfunction fromTransition(transition, initialContext) {\n  return {\n    config: transition,\n    transition: (snapshot, event, actorScope) => {\n      return {\n        ...snapshot,\n        context: transition(snapshot.context, event, actorScope)\n      };\n    },\n    getInitialSnapshot: (_, input) => {\n      return {\n        status: 'active',\n        output: undefined,\n        error: undefined,\n        context: typeof initialContext === 'function' ? initialContext({\n          input\n        }) : initialContext\n      };\n    },\n    getPersistedSnapshot: snapshot => snapshot,\n    restoreSnapshot: snapshot => snapshot\n  };\n}\n\nconst instanceStates = /* #__PURE__ */new WeakMap();\n\n/**\n * Represents an actor created by `fromCallback`.\n *\n * The type of `self` within the actor's logic.\n *\n * @example\n *\n * ```ts\n * import { fromCallback, createActor } from 'xstate';\n *\n * // The events the actor receives.\n * type Event = { type: 'someEvent' };\n * // The actor's input.\n * type Input = { name: string };\n *\n * // Actor logic that logs whenever it receives an event of type `someEvent`.\n * const logic = fromCallback<Event, Input>(({ self, input, receive }) => {\n *   self;\n *   // ^? CallbackActorRef<Event, Input>\n *\n *   receive((event) => {\n *     if (event.type === 'someEvent') {\n *       console.log(`${input.name}: received \"someEvent\" event`);\n *       // logs 'myActor: received \"someEvent\" event'\n *     }\n *   });\n * });\n *\n * const actor = createActor(logic, { input: { name: 'myActor' } });\n * //    ^? CallbackActorRef<Event, Input>\n * ```\n *\n * @see {@link fromCallback}\n */\n\n/**\n * An actor logic creator which returns callback logic as defined by a callback\n * function.\n *\n * @remarks\n * Useful for subscription-based or other free-form logic that can send events\n * back to the parent actor.\n *\n * Actors created from callback logic (“callback actors”) can:\n *\n * - Receive events via the `receive` function\n * - Send events to the parent actor via the `sendBack` function\n *\n * Callback actors are a bit different from other actors in that they:\n *\n * - Do not work with `onDone`\n * - Do not produce a snapshot using `.getSnapshot()`\n * - Do not emit values when used with `.subscribe()`\n * - Can not be stopped with `.stop()`\n *\n * @example\n *\n * ```typescript\n * const callbackLogic = fromCallback(({ sendBack, receive }) => {\n *   let lockStatus = 'unlocked';\n *\n *   const handler = (event) => {\n *     if (lockStatus === 'locked') {\n *       return;\n *     }\n *     sendBack(event);\n *   };\n *\n *   receive((event) => {\n *     if (event.type === 'lock') {\n *       lockStatus = 'locked';\n *     } else if (event.type === 'unlock') {\n *       lockStatus = 'unlocked';\n *     }\n *   });\n *\n *   document.body.addEventListener('click', handler);\n *\n *   return () => {\n *     document.body.removeEventListener('click', handler);\n *   };\n * });\n * ```\n *\n * @param callback - The callback function used to describe the callback logic\n *   The callback function is passed an object with the following properties:\n *\n *   - `receive` - A function that can send events back to the parent actor; the\n *       listener is then called whenever events are received by the callback\n *       actor\n *   - `sendBack` - A function that can send events back to the parent actor\n *   - `input` - Data that was provided to the callback actor\n *   - `self` - The parent actor of the callback actor\n *   - `system` - The actor system to which the callback actor belongs The callback\n *       function can (optionally) return a cleanup function, which is called\n *       when the actor is stopped.\n *\n * @returns Callback logic\n * @see {@link CallbackLogicFunction} for more information about the callback function and its object argument\n * @see {@link https://stately.ai/docs/input | Input docs} for more information about how input is passed\n */\nfunction fromCallback(callback) {\n  const logic = {\n    config: callback,\n    start: (state, actorScope) => {\n      const {\n        self,\n        system,\n        emit\n      } = actorScope;\n      const callbackState = {\n        receivers: undefined,\n        dispose: undefined\n      };\n      instanceStates.set(self, callbackState);\n      callbackState.dispose = callback({\n        input: state.input,\n        system,\n        self,\n        sendBack: event => {\n          if (self.getSnapshot().status === 'stopped') {\n            return;\n          }\n          if (self._parent) {\n            system._relay(self, self._parent, event);\n          }\n        },\n        receive: listener => {\n          callbackState.receivers ??= new Set();\n          callbackState.receivers.add(listener);\n        },\n        emit\n      });\n    },\n    transition: (state, event, actorScope) => {\n      const callbackState = instanceStates.get(actorScope.self);\n      if (event.type === XSTATE_STOP) {\n        state = {\n          ...state,\n          status: 'stopped',\n          error: undefined\n        };\n        callbackState.dispose?.();\n        return state;\n      }\n      callbackState.receivers?.forEach(receiver => receiver(event));\n      return state;\n    },\n    getInitialSnapshot: (_, input) => {\n      return {\n        status: 'active',\n        output: undefined,\n        error: undefined,\n        input\n      };\n    },\n    getPersistedSnapshot: snapshot => snapshot,\n    restoreSnapshot: snapshot => snapshot\n  };\n  return logic;\n}\n\nconst XSTATE_OBSERVABLE_NEXT = 'xstate.observable.next';\nconst XSTATE_OBSERVABLE_ERROR = 'xstate.observable.error';\nconst XSTATE_OBSERVABLE_COMPLETE = 'xstate.observable.complete';\n\n/**\n * Represents an actor created by `fromObservable` or `fromEventObservable`.\n *\n * The type of `self` within the actor's logic.\n *\n * @example\n *\n * ```ts\n * import { fromObservable, createActor } from 'xstate';\n * import { interval } from 'rxjs';\n *\n * // The type of the value observed by the actor's logic.\n * type Context = number;\n * // The actor's input.\n * type Input = { period?: number };\n *\n * // Actor logic that observes a number incremented every `input.period`\n * // milliseconds (default: 1_000).\n * const logic = fromObservable<Context, Input>(({ input, self }) => {\n *   self;\n *   // ^? ObservableActorRef<Event, Input>\n *\n *   return interval(input.period ?? 1_000);\n * });\n *\n * const actor = createActor(logic, { input: { period: 2_000 } });\n * //    ^? ObservableActorRef<Event, Input>\n * ```\n *\n * @see {@link fromObservable}\n * @see {@link fromEventObservable}\n */\n\n/**\n * Observable actor logic is described by an observable stream of values. Actors\n * created from observable logic (“observable actors”) can:\n *\n * - Emit snapshots of the observable’s emitted value\n *\n * The observable’s emitted value is used as its observable actor’s `context`.\n *\n * Sending events to observable actors will have no effect.\n *\n * @example\n *\n * ```ts\n * import { fromObservable, createActor } from 'xstate';\n * import { interval } from 'rxjs';\n *\n * const logic = fromObservable((obj) => interval(1000));\n *\n * const actor = createActor(logic);\n *\n * actor.subscribe((snapshot) => {\n *   console.log(snapshot.context);\n * });\n *\n * actor.start();\n * // At every second:\n * // Logs 0\n * // Logs 1\n * // Logs 2\n * // ...\n * ```\n *\n * @param observableCreator A function that creates an observable. It receives\n *   one argument, an object with the following properties:\n *\n *   - `input` - Data that was provided to the observable actor\n *   - `self` - The parent actor\n *   - `system` - The actor system to which the observable actor belongs\n *\n *   It should return a {@link Subscribable}, which is compatible with an RxJS\n *   Observable, although RxJS is not required to create them.\n * @see {@link https://rxjs.dev} for documentation on RxJS Observable and observable creators.\n * @see {@link Subscribable} interface in XState, which is based on and compatible with RxJS Observable.\n */\nfunction fromObservable(observableCreator) {\n  // TODO: add event types\n  const logic = {\n    config: observableCreator,\n    transition: (snapshot, event) => {\n      if (snapshot.status !== 'active') {\n        return snapshot;\n      }\n      switch (event.type) {\n        case XSTATE_OBSERVABLE_NEXT:\n          {\n            const newSnapshot = {\n              ...snapshot,\n              context: event.data\n            };\n            return newSnapshot;\n          }\n        case XSTATE_OBSERVABLE_ERROR:\n          return {\n            ...snapshot,\n            status: 'error',\n            error: event.data,\n            input: undefined,\n            _subscription: undefined\n          };\n        case XSTATE_OBSERVABLE_COMPLETE:\n          return {\n            ...snapshot,\n            status: 'done',\n            input: undefined,\n            _subscription: undefined\n          };\n        case XSTATE_STOP:\n          snapshot._subscription.unsubscribe();\n          return {\n            ...snapshot,\n            status: 'stopped',\n            input: undefined,\n            _subscription: undefined\n          };\n        default:\n          return snapshot;\n      }\n    },\n    getInitialSnapshot: (_, input) => {\n      return {\n        status: 'active',\n        output: undefined,\n        error: undefined,\n        context: undefined,\n        input,\n        _subscription: undefined\n      };\n    },\n    start: (state, {\n      self,\n      system,\n      emit\n    }) => {\n      if (state.status === 'done') {\n        // Do not restart a completed observable\n        return;\n      }\n      state._subscription = observableCreator({\n        input: state.input,\n        system,\n        self,\n        emit\n      }).subscribe({\n        next: value => {\n          system._relay(self, self, {\n            type: XSTATE_OBSERVABLE_NEXT,\n            data: value\n          });\n        },\n        error: err => {\n          system._relay(self, self, {\n            type: XSTATE_OBSERVABLE_ERROR,\n            data: err\n          });\n        },\n        complete: () => {\n          system._relay(self, self, {\n            type: XSTATE_OBSERVABLE_COMPLETE\n          });\n        }\n      });\n    },\n    getPersistedSnapshot: ({\n      _subscription,\n      ...state\n    }) => state,\n    restoreSnapshot: state => ({\n      ...state,\n      _subscription: undefined\n    })\n  };\n  return logic;\n}\n\n/**\n * Creates event observable logic that listens to an observable that delivers\n * event objects.\n *\n * Event observable actor logic is described by an observable stream of\n * {@link https://stately.ai/docs/transitions#event-objects | event objects}.\n * Actors created from event observable logic (“event observable actors”) can:\n *\n * - Implicitly send events to its parent actor\n * - Emit snapshots of its emitted event objects\n *\n * Sending events to event observable actors will have no effect.\n *\n * @example\n *\n * ```ts\n * import {\n *   fromEventObservable,\n *   Subscribable,\n *   EventObject,\n *   createMachine,\n *   createActor\n * } from 'xstate';\n * import { fromEvent } from 'rxjs';\n *\n * const mouseClickLogic = fromEventObservable(\n *   () => fromEvent(document.body, 'click') as Subscribable<EventObject>\n * );\n *\n * const canvasMachine = createMachine({\n *   invoke: {\n *     // Will send mouse `click` events to the canvas actor\n *     src: mouseClickLogic\n *   }\n * });\n *\n * const canvasActor = createActor(canvasMachine);\n * canvasActor.start();\n * ```\n *\n * @param lazyObservable A function that creates an observable that delivers\n *   event objects. It receives one argument, an object with the following\n *   properties:\n *\n *   - `input` - Data that was provided to the event observable actor\n *   - `self` - The parent actor\n *   - `system` - The actor system to which the event observable actor belongs.\n *\n *   It should return a {@link Subscribable}, which is compatible with an RxJS\n *   Observable, although RxJS is not required to create them.\n */\nfunction fromEventObservable(lazyObservable) {\n  // TODO: event types\n  const logic = {\n    config: lazyObservable,\n    transition: (state, event) => {\n      if (state.status !== 'active') {\n        return state;\n      }\n      switch (event.type) {\n        case XSTATE_OBSERVABLE_ERROR:\n          return {\n            ...state,\n            status: 'error',\n            error: event.data,\n            input: undefined,\n            _subscription: undefined\n          };\n        case XSTATE_OBSERVABLE_COMPLETE:\n          return {\n            ...state,\n            status: 'done',\n            input: undefined,\n            _subscription: undefined\n          };\n        case XSTATE_STOP:\n          state._subscription.unsubscribe();\n          return {\n            ...state,\n            status: 'stopped',\n            input: undefined,\n            _subscription: undefined\n          };\n        default:\n          return state;\n      }\n    },\n    getInitialSnapshot: (_, input) => {\n      return {\n        status: 'active',\n        output: undefined,\n        error: undefined,\n        context: undefined,\n        input,\n        _subscription: undefined\n      };\n    },\n    start: (state, {\n      self,\n      system,\n      emit\n    }) => {\n      if (state.status === 'done') {\n        // Do not restart a completed observable\n        return;\n      }\n      state._subscription = lazyObservable({\n        input: state.input,\n        system,\n        self,\n        emit\n      }).subscribe({\n        next: value => {\n          if (self._parent) {\n            system._relay(self, self._parent, value);\n          }\n        },\n        error: err => {\n          system._relay(self, self, {\n            type: XSTATE_OBSERVABLE_ERROR,\n            data: err\n          });\n        },\n        complete: () => {\n          system._relay(self, self, {\n            type: XSTATE_OBSERVABLE_COMPLETE\n          });\n        }\n      });\n    },\n    getPersistedSnapshot: ({\n      _subscription,\n      ...snapshot\n    }) => snapshot,\n    restoreSnapshot: snapshot => ({\n      ...snapshot,\n      _subscription: undefined\n    })\n  };\n  return logic;\n}\n\nconst XSTATE_PROMISE_RESOLVE = 'xstate.promise.resolve';\nconst XSTATE_PROMISE_REJECT = 'xstate.promise.reject';\n\n/**\n * Represents an actor created by `fromPromise`.\n *\n * The type of `self` within the actor's logic.\n *\n * @example\n *\n * ```ts\n * import { fromPromise, createActor } from 'xstate';\n *\n * // The actor's resolved output\n * type Output = string;\n * // The actor's input.\n * type Input = { message: string };\n *\n * // Actor logic that fetches the url of an image of a cat saying `input.message`.\n * const logic = fromPromise<Output, Input>(async ({ input, self }) => {\n *   self;\n *   // ^? PromiseActorRef<Output, Input>\n *\n *   const data = await fetch(\n *     `https://cataas.com/cat/says/${input.message}`\n *   );\n *   const url = await data.json();\n *   return url;\n * });\n *\n * const actor = createActor(logic, { input: { message: 'hello world' } });\n * //    ^? PromiseActorRef<Output, Input>\n * ```\n *\n * @see {@link fromPromise}\n */\n\nconst controllerMap = new WeakMap();\n\n/**\n * An actor logic creator which returns promise logic as defined by an async\n * process that resolves or rejects after some time.\n *\n * Actors created from promise actor logic (“promise actors”) can:\n *\n * - Emit the resolved value of the promise\n * - Output the resolved value of the promise\n *\n * Sending events to promise actors will have no effect.\n *\n * @example\n *\n * ```ts\n * const promiseLogic = fromPromise(async () => {\n *   const result = await fetch('https://example.com/...').then((data) =>\n *     data.json()\n *   );\n *\n *   return result;\n * });\n *\n * const promiseActor = createActor(promiseLogic);\n * promiseActor.subscribe((snapshot) => {\n *   console.log(snapshot);\n * });\n * promiseActor.start();\n * // => {\n * //   output: undefined,\n * //   status: 'active'\n * //   ...\n * // }\n *\n * // After promise resolves\n * // => {\n * //   output: { ... },\n * //   status: 'done',\n * //   ...\n * // }\n * ```\n *\n * @param promiseCreator A function which returns a Promise, and accepts an\n *   object with the following properties:\n *\n *   - `input` - Data that was provided to the promise actor\n *   - `self` - The parent actor of the promise actor\n *   - `system` - The actor system to which the promise actor belongs\n *\n * @see {@link https://stately.ai/docs/input | Input docs} for more information about how input is passed\n */\nfunction fromPromise(promiseCreator) {\n  const logic = {\n    config: promiseCreator,\n    transition: (state, event, scope) => {\n      if (state.status !== 'active') {\n        return state;\n      }\n      switch (event.type) {\n        case XSTATE_PROMISE_RESOLVE:\n          {\n            const resolvedValue = event.data;\n            return {\n              ...state,\n              status: 'done',\n              output: resolvedValue,\n              input: undefined\n            };\n          }\n        case XSTATE_PROMISE_REJECT:\n          return {\n            ...state,\n            status: 'error',\n            error: event.data,\n            input: undefined\n          };\n        case XSTATE_STOP:\n          {\n            controllerMap.get(scope.self)?.abort();\n            return {\n              ...state,\n              status: 'stopped',\n              input: undefined\n            };\n          }\n        default:\n          return state;\n      }\n    },\n    start: (state, {\n      self,\n      system,\n      emit\n    }) => {\n      // TODO: determine how to allow customizing this so that promises\n      // can be restarted if necessary\n      if (state.status !== 'active') {\n        return;\n      }\n      const controller = new AbortController();\n      controllerMap.set(self, controller);\n      const resolvedPromise = Promise.resolve(promiseCreator({\n        input: state.input,\n        system,\n        self,\n        signal: controller.signal,\n        emit\n      }));\n      resolvedPromise.then(response => {\n        if (self.getSnapshot().status !== 'active') {\n          return;\n        }\n        controllerMap.delete(self);\n        system._relay(self, self, {\n          type: XSTATE_PROMISE_RESOLVE,\n          data: response\n        });\n      }, errorData => {\n        if (self.getSnapshot().status !== 'active') {\n          return;\n        }\n        controllerMap.delete(self);\n        system._relay(self, self, {\n          type: XSTATE_PROMISE_REJECT,\n          data: errorData\n        });\n      });\n    },\n    getInitialSnapshot: (_, input) => {\n      return {\n        status: 'active',\n        output: undefined,\n        error: undefined,\n        input\n      };\n    },\n    getPersistedSnapshot: snapshot => snapshot,\n    restoreSnapshot: snapshot => snapshot\n  };\n  return logic;\n}\n\nconst emptyLogic = fromTransition(_ => undefined, undefined);\nfunction createEmptyActor() {\n  return createActor(emptyLogic);\n}\n\nexport { createEmptyActor, fromCallback, fromEventObservable, fromObservable, fromPromise, fromTransition };\n","import { T as ProcessingStatus, z as resolveReferencedActor, A as createActor, U as cloneMachineSnapshot, V as XSTATE_ERROR, W as createErrorActorEvent, e as evaluateGuard, M as cancel, O as raise, P as spawnChild, R as stopChild } from './raise-c17ec2bc.esm.js';\n\nfunction createSpawner(actorScope, {\n  machine,\n  context\n}, event, spawnedChildren) {\n  const spawn = (src, options) => {\n    if (typeof src === 'string') {\n      const logic = resolveReferencedActor(machine, src);\n      if (!logic) {\n        throw new Error(`Actor logic '${src}' not implemented in machine '${machine.id}'`);\n      }\n      const actorRef = createActor(logic, {\n        id: options?.id,\n        parent: actorScope.self,\n        syncSnapshot: options?.syncSnapshot,\n        input: typeof options?.input === 'function' ? options.input({\n          context,\n          event,\n          self: actorScope.self\n        }) : options?.input,\n        src,\n        systemId: options?.systemId\n      });\n      spawnedChildren[actorRef.id] = actorRef;\n      return actorRef;\n    } else {\n      const actorRef = createActor(src, {\n        id: options?.id,\n        parent: actorScope.self,\n        syncSnapshot: options?.syncSnapshot,\n        input: options?.input,\n        src,\n        systemId: options?.systemId\n      });\n      return actorRef;\n    }\n  };\n  return (src, options) => {\n    const actorRef = spawn(src, options); // TODO: fix types\n    spawnedChildren[actorRef.id] = actorRef;\n    actorScope.defer(() => {\n      if (actorRef._processingStatus === ProcessingStatus.Stopped) {\n        return;\n      }\n      actorRef.start();\n    });\n    return actorRef;\n  };\n}\n\nfunction resolveAssign(actorScope, snapshot, actionArgs, actionParams, {\n  assignment\n}) {\n  if (!snapshot.context) {\n    throw new Error('Cannot assign to undefined `context`. Ensure that `context` is defined in the machine config.');\n  }\n  const spawnedChildren = {};\n  const assignArgs = {\n    context: snapshot.context,\n    event: actionArgs.event,\n    spawn: createSpawner(actorScope, snapshot, actionArgs.event, spawnedChildren),\n    self: actorScope.self,\n    system: actorScope.system\n  };\n  let partialUpdate = {};\n  if (typeof assignment === 'function') {\n    partialUpdate = assignment(assignArgs, actionParams);\n  } else {\n    for (const key of Object.keys(assignment)) {\n      const propAssignment = assignment[key];\n      partialUpdate[key] = typeof propAssignment === 'function' ? propAssignment(assignArgs, actionParams) : propAssignment;\n    }\n  }\n  const updatedContext = Object.assign({}, snapshot.context, partialUpdate);\n  return [cloneMachineSnapshot(snapshot, {\n    context: updatedContext,\n    children: Object.keys(spawnedChildren).length ? {\n      ...snapshot.children,\n      ...spawnedChildren\n    } : snapshot.children\n  }), undefined, undefined];\n}\n/**\n * Updates the current context of the machine.\n *\n * @example\n *\n * ```ts\n * import { createMachine, assign } from 'xstate';\n *\n * const countMachine = createMachine({\n *   context: {\n *     count: 0,\n *     message: ''\n *   },\n *   on: {\n *     inc: {\n *       actions: assign({\n *         count: ({ context }) => context.count + 1\n *       })\n *     },\n *     updateMessage: {\n *       actions: assign(({ context, event }) => {\n *         return {\n *           message: event.message.trim()\n *         };\n *       })\n *     }\n *   }\n * });\n * ```\n *\n * @param assignment An object that represents the partial context to update, or\n *   a function that returns an object that represents the partial context to\n *   update.\n */\nfunction assign(assignment) {\n  function assign(_args, _params) {\n  }\n  assign.type = 'xstate.assign';\n  assign.assignment = assignment;\n  assign.resolve = resolveAssign;\n  return assign;\n}\n\nfunction resolveEmit(_, snapshot, args, actionParams, {\n  event: eventOrExpr\n}) {\n  const resolvedEvent = typeof eventOrExpr === 'function' ? eventOrExpr(args, actionParams) : eventOrExpr;\n  return [snapshot, {\n    event: resolvedEvent\n  }, undefined];\n}\nfunction executeEmit(actorScope, {\n  event\n}) {\n  actorScope.defer(() => actorScope.emit(event));\n}\n/**\n * Emits an event to event handlers registered on the actor via `actor.on(event,\n * handler)`.\n *\n * @example\n *\n * ```ts\n * import { emit } from 'xstate';\n *\n * const machine = createMachine({\n *   // ...\n *   on: {\n *     something: {\n *       actions: emit({\n *         type: 'emitted',\n *         some: 'data'\n *       })\n *     }\n *   }\n *   // ...\n * });\n *\n * const actor = createActor(machine).start();\n *\n * actor.on('emitted', (event) => {\n *   console.log(event);\n * });\n *\n * actor.send({ type: 'something' });\n * // logs:\n * // {\n * //   type: 'emitted',\n * //   some: 'data'\n * // }\n * ```\n */\nfunction emit(/** The event to emit, or an expression that returns an event to emit. */\neventOrExpr) {\n  function emit(_args, _params) {\n  }\n  emit.type = 'xstate.emit';\n  emit.event = eventOrExpr;\n  emit.resolve = resolveEmit;\n  emit.execute = executeEmit;\n  return emit;\n}\n\n/**\n * @remarks\n * `T | unknown` reduces to `unknown` and that can be problematic when it comes\n * to contextual typing. It especially is a problem when the union has a\n * function member, like here:\n *\n * ```ts\n * declare function test(\n *   cbOrVal: ((arg: number) => unknown) | unknown\n * ): void;\n * test((arg) => {}); // oops, implicit any\n * ```\n *\n * This type can be used to avoid this problem. This union represents the same\n * value space as `unknown`.\n */\n\n// https://github.com/microsoft/TypeScript/issues/23182#issuecomment-379091887\n\n// @TODO: Replace with native `NoInfer` when TS issue gets fixed:\n// https://github.com/microsoft/TypeScript/pull/57673\n\n/** @deprecated Use the built-in `NoInfer` type instead */\n\n/** The full definition of an event, with a string `type`. */\n\n/**\n * The string or object representing the state value relative to the parent\n * state node.\n *\n * @remarks\n * - For a child atomic state node, this is a string, e.g., `\"pending\"`.\n * - For complex state nodes, this is an object, e.g., `{ success:\n *   \"someChildState\" }`.\n */\n\n/** @deprecated Use `AnyMachineSnapshot` instead */\n\n// TODO: possibly refactor this somehow, use even a simpler type, and maybe even make `machine.options` private or something\n/** @ignore */\n\nlet SpecialTargets = /*#__PURE__*/function (SpecialTargets) {\n  SpecialTargets[\"Parent\"] = \"#_parent\";\n  SpecialTargets[\"Internal\"] = \"#_internal\";\n  return SpecialTargets;\n}({});\n\n/** @deprecated Use `AnyActor` instead. */\n\n// Based on RxJS types\n\n// TODO: in v6, this should only accept AnyActorLogic, like ActorRefFromLogic\n\n/** @deprecated Use `Actor<T>` instead. */\n\n/**\n * Represents logic which can be used by an actor.\n *\n * @template TSnapshot - The type of the snapshot.\n * @template TEvent - The type of the event object.\n * @template TInput - The type of the input.\n * @template TSystem - The type of the actor system.\n */\n\n/** @deprecated */\n\n// TODO: cover all that can be actually returned\n\nfunction resolveSendTo(actorScope, snapshot, args, actionParams, {\n  to,\n  event: eventOrExpr,\n  id,\n  delay\n}, extra) {\n  const delaysMap = snapshot.machine.implementations.delays;\n  if (typeof eventOrExpr === 'string') {\n    throw new Error(\n    // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n    `Only event objects may be used with sendTo; use sendTo({ type: \"${eventOrExpr}\" }) instead`);\n  }\n  const resolvedEvent = typeof eventOrExpr === 'function' ? eventOrExpr(args, actionParams) : eventOrExpr;\n  let resolvedDelay;\n  if (typeof delay === 'string') {\n    const configDelay = delaysMap && delaysMap[delay];\n    resolvedDelay = typeof configDelay === 'function' ? configDelay(args, actionParams) : configDelay;\n  } else {\n    resolvedDelay = typeof delay === 'function' ? delay(args, actionParams) : delay;\n  }\n  const resolvedTarget = typeof to === 'function' ? to(args, actionParams) : to;\n  let targetActorRef;\n  if (typeof resolvedTarget === 'string') {\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison\n    if (resolvedTarget === SpecialTargets.Parent) {\n      targetActorRef = actorScope.self._parent;\n    }\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison\n    else if (resolvedTarget === SpecialTargets.Internal) {\n      targetActorRef = actorScope.self;\n    } else if (resolvedTarget.startsWith('#_')) {\n      // SCXML compatibility: https://www.w3.org/TR/scxml/#SCXMLEventProcessor\n      // #_invokeid. If the target is the special term '#_invokeid', where invokeid is the invokeid of an SCXML session that the sending session has created by <invoke>, the Processor must add the event to the external queue of that session.\n      targetActorRef = snapshot.children[resolvedTarget.slice(2)];\n    } else {\n      targetActorRef = extra.deferredActorIds?.includes(resolvedTarget) ? resolvedTarget : snapshot.children[resolvedTarget];\n    }\n    if (!targetActorRef) {\n      throw new Error(`Unable to send event to actor '${resolvedTarget}' from machine '${snapshot.machine.id}'.`);\n    }\n  } else {\n    targetActorRef = resolvedTarget || actorScope.self;\n  }\n  return [snapshot, {\n    to: targetActorRef,\n    targetId: typeof resolvedTarget === 'string' ? resolvedTarget : undefined,\n    event: resolvedEvent,\n    id,\n    delay: resolvedDelay\n  }, undefined];\n}\nfunction retryResolveSendTo(_, snapshot, params) {\n  if (typeof params.to === 'string') {\n    params.to = snapshot.children[params.to];\n  }\n}\nfunction executeSendTo(actorScope, params) {\n  // this forms an outgoing events queue\n  // thanks to that the recipient actors are able to read the *updated* snapshot value of the sender\n  actorScope.defer(() => {\n    const {\n      to,\n      event,\n      delay,\n      id\n    } = params;\n    if (typeof delay === 'number') {\n      actorScope.system.scheduler.schedule(actorScope.self, to, event, delay, id);\n      return;\n    }\n    actorScope.system._relay(actorScope.self,\n    // at this point, in a deferred task, it should already be mutated by retryResolveSendTo\n    // if it initially started as a string\n    to, event.type === XSTATE_ERROR ? createErrorActorEvent(actorScope.self.id, event.data) : event);\n  });\n}\n/**\n * Sends an event to an actor.\n *\n * @param actor The `ActorRef` to send the event to.\n * @param event The event to send, or an expression that evaluates to the event\n *   to send\n * @param options Send action options\n *\n *   - `id` - The unique send event identifier (used with `cancel()`).\n *   - `delay` - The number of milliseconds to delay the sending of the event.\n */\nfunction sendTo(to, eventOrExpr, options) {\n  function sendTo(_args, _params) {\n  }\n  sendTo.type = 'xstate.sendTo';\n  sendTo.to = to;\n  sendTo.event = eventOrExpr;\n  sendTo.id = options?.id;\n  sendTo.delay = options?.delay;\n  sendTo.resolve = resolveSendTo;\n  sendTo.retryResolve = retryResolveSendTo;\n  sendTo.execute = executeSendTo;\n  return sendTo;\n}\n\n/**\n * Sends an event to this machine's parent.\n *\n * @param event The event to send to the parent machine.\n * @param options Options to pass into the send event.\n */\nfunction sendParent(event, options) {\n  return sendTo(SpecialTargets.Parent, event, options);\n}\n/**\n * Forwards (sends) an event to the `target` actor.\n *\n * @param target The target actor to forward the event to.\n * @param options Options to pass into the send action creator.\n */\nfunction forwardTo(target, options) {\n  return sendTo(target, ({\n    event\n  }) => event, options);\n}\n\nfunction resolveEnqueueActions(actorScope, snapshot, args, actionParams, {\n  collect\n}) {\n  const actions = [];\n  const enqueue = function enqueue(action) {\n    actions.push(action);\n  };\n  enqueue.assign = (...args) => {\n    actions.push(assign(...args));\n  };\n  enqueue.cancel = (...args) => {\n    actions.push(cancel(...args));\n  };\n  enqueue.raise = (...args) => {\n    // for some reason it fails to infer `TDelay` from `...args` here and picks its default (`never`)\n    // then it fails to typecheck that because `...args` use `string` in place of `TDelay`\n    actions.push(raise(...args));\n  };\n  enqueue.sendTo = (...args) => {\n    // for some reason it fails to infer `TDelay` from `...args` here and picks its default (`never`)\n    // then it fails to typecheck that because `...args` use `string` in place of `TDelay\n    actions.push(sendTo(...args));\n  };\n  enqueue.sendParent = (...args) => {\n    actions.push(sendParent(...args));\n  };\n  enqueue.spawnChild = (...args) => {\n    actions.push(spawnChild(...args));\n  };\n  enqueue.stopChild = (...args) => {\n    actions.push(stopChild(...args));\n  };\n  enqueue.emit = (...args) => {\n    actions.push(emit(...args));\n  };\n  collect({\n    context: args.context,\n    event: args.event,\n    enqueue,\n    check: guard => evaluateGuard(guard, snapshot.context, args.event, snapshot),\n    self: actorScope.self,\n    system: actorScope.system\n  }, actionParams);\n  return [snapshot, undefined, actions];\n}\n/**\n * Creates an action object that will execute actions that are queued by the\n * `enqueue(action)` function.\n *\n * @example\n *\n * ```ts\n * import { createMachine, enqueueActions } from 'xstate';\n *\n * const machine = createMachine({\n *   entry: enqueueActions(({ enqueue, check }) => {\n *     enqueue.assign({ count: 0 });\n *\n *     if (check('someGuard')) {\n *       enqueue.assign({ count: 1 });\n *     }\n *\n *     enqueue('someAction');\n *   })\n * });\n * ```\n */\nfunction enqueueActions(collect) {\n  function enqueueActions(_args, _params) {\n  }\n  enqueueActions.type = 'xstate.enqueueActions';\n  enqueueActions.collect = collect;\n  enqueueActions.resolve = resolveEnqueueActions;\n  return enqueueActions;\n}\n\nfunction resolveLog(_, snapshot, actionArgs, actionParams, {\n  value,\n  label\n}) {\n  return [snapshot, {\n    value: typeof value === 'function' ? value(actionArgs, actionParams) : value,\n    label\n  }, undefined];\n}\nfunction executeLog({\n  logger\n}, {\n  value,\n  label\n}) {\n  if (label) {\n    logger(label, value);\n  } else {\n    logger(value);\n  }\n}\n/**\n * @param expr The expression function to evaluate which will be logged. Takes\n *   in 2 arguments:\n *\n *   - `ctx` - the current state context\n *   - `event` - the event that caused this action to be executed.\n *\n * @param label The label to give to the logged expression.\n */\nfunction log(value = ({\n  context,\n  event\n}) => ({\n  context,\n  event\n}), label) {\n  function log(_args, _params) {\n  }\n  log.type = 'xstate.log';\n  log.value = value;\n  log.label = label;\n  log.resolve = resolveLog;\n  log.execute = executeLog;\n  return log;\n}\n\nexport { SpecialTargets as S, assign as a, enqueueActions as b, sendTo as c, emit as e, forwardTo as f, log as l, sendParent as s };\n","export { createEmptyActor, fromCallback, fromEventObservable, fromObservable, fromPromise, fromTransition } from '../actors/dist/xstate-actors.esm.js';\nimport { t as toArray, S as STATE_DELIMITER, m as mapValues, f as formatTransitions, a as toTransitionConfigArray, b as formatTransition, N as NULL_EVENT, e as evaluateGuard, c as createInvokeId, g as getDelayedTransitions, d as formatInitialTransition, h as getCandidates, r as resolveStateValue, i as getAllStateNodes, j as getStateNodes, k as createMachineSnapshot, l as isInFinalState, n as macrostep, o as transitionNode, p as resolveActionsAndContext, q as createInitEvent, s as microstep, u as getInitialStateNodes, v as toStatePath, w as isStateId, x as getStateNodeByPath, y as getPersistedSnapshot, z as resolveReferencedActor, A as createActor, $ as $$ACTOR_TYPE } from './raise-c17ec2bc.esm.js';\nexport { B as Actor, I as __unsafe_getAllOwnEventDescriptors, D as and, M as cancel, A as createActor, j as getStateNodes, C as interpret, H as isMachineSnapshot, J as matchesState, E as not, F as or, K as pathToStateValue, O as raise, P as spawnChild, G as stateIn, Q as stop, R as stopChild, L as toObserver } from './raise-c17ec2bc.esm.js';\nimport { a as assign } from './log-3d9d72a9.esm.js';\nexport { S as SpecialTargets, a as assign, e as emit, b as enqueueActions, f as forwardTo, l as log, s as sendParent, c as sendTo } from './log-3d9d72a9.esm.js';\nimport '../dev/dist/xstate-dev.esm.js';\n\n/**\n * Asserts that the given event object is of the specified type or types. Throws\n * an error if the event object is not of the specified types.\n *\n * @example\n *\n * ```ts\n * // ...\n * entry: ({ event }) => {\n *   assertEvent(event, 'doNothing');\n *   // event is { type: 'doNothing' }\n * },\n * // ...\n * exit: ({ event }) => {\n *   assertEvent(event, 'greet');\n *   // event is { type: 'greet'; message: string }\n *\n *   assertEvent(event, ['greet', 'notify']);\n *   // event is { type: 'greet'; message: string }\n *   // or { type: 'notify'; message: string; level: 'info' | 'error' }\n * },\n * ```\n */\nfunction assertEvent(event, type) {\n  const types = toArray(type);\n  if (!types.includes(event.type)) {\n    const typesText = types.length === 1 ? `type \"${types[0]}\"` : `one of types \"${types.join('\", \"')}\"`;\n    throw new Error(`Expected event ${JSON.stringify(event)} to have ${typesText}`);\n  }\n}\n\nconst cache = new WeakMap();\nfunction memo(object, key, fn) {\n  let memoizedData = cache.get(object);\n  if (!memoizedData) {\n    memoizedData = {\n      [key]: fn()\n    };\n    cache.set(object, memoizedData);\n  } else if (!(key in memoizedData)) {\n    memoizedData[key] = fn();\n  }\n  return memoizedData[key];\n}\n\nconst EMPTY_OBJECT = {};\nconst toSerializableAction = action => {\n  if (typeof action === 'string') {\n    return {\n      type: action\n    };\n  }\n  if (typeof action === 'function') {\n    if ('resolve' in action) {\n      return {\n        type: action.type\n      };\n    }\n    return {\n      type: action.name\n    };\n  }\n  return action;\n};\nclass StateNode {\n  constructor(/** The raw config used to create the machine. */\n  config, options) {\n    this.config = config;\n    /**\n     * The relative key of the state node, which represents its location in the\n     * overall state value.\n     */\n    this.key = void 0;\n    /** The unique ID of the state node. */\n    this.id = void 0;\n    /**\n     * The type of this state node:\n     *\n     * - `'atomic'` - no child state nodes\n     * - `'compound'` - nested child state nodes (XOR)\n     * - `'parallel'` - orthogonal nested child state nodes (AND)\n     * - `'history'` - history state node\n     * - `'final'` - final state node\n     */\n    this.type = void 0;\n    /** The string path from the root machine node to this node. */\n    this.path = void 0;\n    /** The child state nodes. */\n    this.states = void 0;\n    /**\n     * The type of history on this state node. Can be:\n     *\n     * - `'shallow'` - recalls only top-level historical state value\n     * - `'deep'` - recalls historical state value at all levels\n     */\n    this.history = void 0;\n    /** The action(s) to be executed upon entering the state node. */\n    this.entry = void 0;\n    /** The action(s) to be executed upon exiting the state node. */\n    this.exit = void 0;\n    /** The parent state node. */\n    this.parent = void 0;\n    /** The root machine node. */\n    this.machine = void 0;\n    /**\n     * The meta data associated with this state node, which will be returned in\n     * State instances.\n     */\n    this.meta = void 0;\n    /**\n     * The output data sent with the \"xstate.done.state._id_\" event if this is a\n     * final state node.\n     */\n    this.output = void 0;\n    /**\n     * The order this state node appears. Corresponds to the implicit document\n     * order.\n     */\n    this.order = -1;\n    this.description = void 0;\n    this.tags = [];\n    this.transitions = void 0;\n    this.always = void 0;\n    this.parent = options._parent;\n    this.key = options._key;\n    this.machine = options._machine;\n    this.path = this.parent ? this.parent.path.concat(this.key) : [];\n    this.id = this.config.id || [this.machine.id, ...this.path].join(STATE_DELIMITER);\n    this.type = this.config.type || (this.config.states && Object.keys(this.config.states).length ? 'compound' : this.config.history ? 'history' : 'atomic');\n    this.description = this.config.description;\n    this.order = this.machine.idMap.size;\n    this.machine.idMap.set(this.id, this);\n    this.states = this.config.states ? mapValues(this.config.states, (stateConfig, key) => {\n      const stateNode = new StateNode(stateConfig, {\n        _parent: this,\n        _key: key,\n        _machine: this.machine\n      });\n      return stateNode;\n    }) : EMPTY_OBJECT;\n    if (this.type === 'compound' && !this.config.initial) {\n      throw new Error(`No initial state specified for compound state node \"#${this.id}\". Try adding { initial: \"${Object.keys(this.states)[0]}\" } to the state config.`);\n    }\n\n    // History config\n    this.history = this.config.history === true ? 'shallow' : this.config.history || false;\n    this.entry = toArray(this.config.entry).slice();\n    this.exit = toArray(this.config.exit).slice();\n    this.meta = this.config.meta;\n    this.output = this.type === 'final' || !this.parent ? this.config.output : undefined;\n    this.tags = toArray(config.tags).slice();\n  }\n\n  /** @internal */\n  _initialize() {\n    this.transitions = formatTransitions(this);\n    if (this.config.always) {\n      this.always = toTransitionConfigArray(this.config.always).map(t => formatTransition(this, NULL_EVENT, t));\n    }\n    Object.keys(this.states).forEach(key => {\n      this.states[key]._initialize();\n    });\n  }\n\n  /** The well-structured state node definition. */\n  get definition() {\n    return {\n      id: this.id,\n      key: this.key,\n      version: this.machine.version,\n      type: this.type,\n      initial: this.initial ? {\n        target: this.initial.target,\n        source: this,\n        actions: this.initial.actions.map(toSerializableAction),\n        eventType: null,\n        reenter: false,\n        toJSON: () => ({\n          target: this.initial.target.map(t => `#${t.id}`),\n          source: `#${this.id}`,\n          actions: this.initial.actions.map(toSerializableAction),\n          eventType: null\n        })\n      } : undefined,\n      history: this.history,\n      states: mapValues(this.states, state => {\n        return state.definition;\n      }),\n      on: this.on,\n      transitions: [...this.transitions.values()].flat().map(t => ({\n        ...t,\n        actions: t.actions.map(toSerializableAction)\n      })),\n      entry: this.entry.map(toSerializableAction),\n      exit: this.exit.map(toSerializableAction),\n      meta: this.meta,\n      order: this.order || -1,\n      output: this.output,\n      invoke: this.invoke,\n      description: this.description,\n      tags: this.tags\n    };\n  }\n\n  /** @internal */\n  toJSON() {\n    return this.definition;\n  }\n\n  /** The logic invoked as actors by this state node. */\n  get invoke() {\n    return memo(this, 'invoke', () => toArray(this.config.invoke).map((invokeConfig, i) => {\n      const {\n        src,\n        systemId\n      } = invokeConfig;\n      const resolvedId = invokeConfig.id ?? createInvokeId(this.id, i);\n      const sourceName = typeof src === 'string' ? src : `xstate.invoke.${createInvokeId(this.id, i)}`;\n      return {\n        ...invokeConfig,\n        src: sourceName,\n        id: resolvedId,\n        systemId: systemId,\n        toJSON() {\n          const {\n            onDone,\n            onError,\n            ...invokeDefValues\n          } = invokeConfig;\n          return {\n            ...invokeDefValues,\n            type: 'xstate.invoke',\n            src: sourceName,\n            id: resolvedId\n          };\n        }\n      };\n    }));\n  }\n\n  /** The mapping of events to transitions. */\n  get on() {\n    return memo(this, 'on', () => {\n      const transitions = this.transitions;\n      return [...transitions].flatMap(([descriptor, t]) => t.map(t => [descriptor, t])).reduce((map, [descriptor, transition]) => {\n        map[descriptor] = map[descriptor] || [];\n        map[descriptor].push(transition);\n        return map;\n      }, {});\n    });\n  }\n  get after() {\n    return memo(this, 'delayedTransitions', () => getDelayedTransitions(this));\n  }\n  get initial() {\n    return memo(this, 'initial', () => formatInitialTransition(this, this.config.initial));\n  }\n\n  /** @internal */\n  next(snapshot, event) {\n    const eventType = event.type;\n    const actions = [];\n    let selectedTransition;\n    const candidates = memo(this, `candidates-${eventType}`, () => getCandidates(this, eventType));\n    for (const candidate of candidates) {\n      const {\n        guard\n      } = candidate;\n      const resolvedContext = snapshot.context;\n      let guardPassed = false;\n      try {\n        guardPassed = !guard || evaluateGuard(guard, resolvedContext, event, snapshot);\n      } catch (err) {\n        const guardType = typeof guard === 'string' ? guard : typeof guard === 'object' ? guard.type : undefined;\n        throw new Error(`Unable to evaluate guard ${guardType ? `'${guardType}' ` : ''}in transition for event '${eventType}' in state node '${this.id}':\\n${err.message}`);\n      }\n      if (guardPassed) {\n        actions.push(...candidate.actions);\n        selectedTransition = candidate;\n        break;\n      }\n    }\n    return selectedTransition ? [selectedTransition] : undefined;\n  }\n\n  /** All the event types accepted by this state node and its descendants. */\n  get events() {\n    return memo(this, 'events', () => {\n      const {\n        states\n      } = this;\n      const events = new Set(this.ownEvents);\n      if (states) {\n        for (const stateId of Object.keys(states)) {\n          const state = states[stateId];\n          if (state.states) {\n            for (const event of state.events) {\n              events.add(`${event}`);\n            }\n          }\n        }\n      }\n      return Array.from(events);\n    });\n  }\n\n  /**\n   * All the events that have transitions directly from this state node.\n   *\n   * Excludes any inert events.\n   */\n  get ownEvents() {\n    const events = new Set([...this.transitions.keys()].filter(descriptor => {\n      return this.transitions.get(descriptor).some(transition => !(!transition.target && !transition.actions.length && !transition.reenter));\n    }));\n    return Array.from(events);\n  }\n}\n\nconst STATE_IDENTIFIER = '#';\nclass StateMachine {\n  constructor(/** The raw config used to create the machine. */\n  config, implementations) {\n    this.config = config;\n    /** The machine's own version. */\n    this.version = void 0;\n    this.schemas = void 0;\n    this.implementations = void 0;\n    /** @internal */\n    this.__xstatenode = true;\n    /** @internal */\n    this.idMap = new Map();\n    this.root = void 0;\n    this.id = void 0;\n    this.states = void 0;\n    this.events = void 0;\n    this.id = config.id || '(machine)';\n    this.implementations = {\n      actors: implementations?.actors ?? {},\n      actions: implementations?.actions ?? {},\n      delays: implementations?.delays ?? {},\n      guards: implementations?.guards ?? {}\n    };\n    this.version = this.config.version;\n    this.schemas = this.config.schemas;\n    this.transition = this.transition.bind(this);\n    this.getInitialSnapshot = this.getInitialSnapshot.bind(this);\n    this.getPersistedSnapshot = this.getPersistedSnapshot.bind(this);\n    this.restoreSnapshot = this.restoreSnapshot.bind(this);\n    this.start = this.start.bind(this);\n    this.root = new StateNode(config, {\n      _key: this.id,\n      _machine: this\n    });\n    this.root._initialize();\n    this.states = this.root.states; // TODO: remove!\n    this.events = this.root.events;\n  }\n\n  /**\n   * Clones this state machine with the provided implementations and merges the\n   * `context` (if provided).\n   *\n   * @param implementations Options (`actions`, `guards`, `actors`, `delays`,\n   *   `context`) to recursively merge with the existing options.\n   * @returns A new `StateMachine` instance with the provided implementations.\n   */\n  provide(implementations) {\n    const {\n      actions,\n      guards,\n      actors,\n      delays\n    } = this.implementations;\n    return new StateMachine(this.config, {\n      actions: {\n        ...actions,\n        ...implementations.actions\n      },\n      guards: {\n        ...guards,\n        ...implementations.guards\n      },\n      actors: {\n        ...actors,\n        ...implementations.actors\n      },\n      delays: {\n        ...delays,\n        ...implementations.delays\n      }\n    });\n  }\n  resolveState(config) {\n    const resolvedStateValue = resolveStateValue(this.root, config.value);\n    const nodeSet = getAllStateNodes(getStateNodes(this.root, resolvedStateValue));\n    return createMachineSnapshot({\n      _nodes: [...nodeSet],\n      context: config.context || {},\n      children: {},\n      status: isInFinalState(nodeSet, this.root) ? 'done' : config.status || 'active',\n      output: config.output,\n      error: config.error,\n      historyValue: config.historyValue\n    }, this);\n  }\n\n  /**\n   * Determines the next snapshot given the current `snapshot` and received\n   * `event`. Calculates a full macrostep from all microsteps.\n   *\n   * @param snapshot The current snapshot\n   * @param event The received event\n   */\n  transition(snapshot, event, actorScope) {\n    return macrostep(snapshot, event, actorScope, []).snapshot;\n  }\n\n  /**\n   * Determines the next state given the current `state` and `event`. Calculates\n   * a microstep.\n   *\n   * @param state The current state\n   * @param event The received event\n   */\n  microstep(snapshot, event, actorScope) {\n    return macrostep(snapshot, event, actorScope, []).microstates;\n  }\n  getTransitionData(snapshot, event) {\n    return transitionNode(this.root, snapshot.value, snapshot, event) || [];\n  }\n\n  /**\n   * The initial state _before_ evaluating any microsteps. This \"pre-initial\"\n   * state is provided to initial actions executed in the initial state.\n   */\n  getPreInitialState(actorScope, initEvent, internalQueue) {\n    const {\n      context\n    } = this.config;\n    const preInitial = createMachineSnapshot({\n      context: typeof context !== 'function' && context ? context : {},\n      _nodes: [this.root],\n      children: {},\n      status: 'active'\n    }, this);\n    if (typeof context === 'function') {\n      const assignment = ({\n        spawn,\n        event,\n        self\n      }) => context({\n        spawn,\n        input: event.input,\n        self\n      });\n      return resolveActionsAndContext(preInitial, initEvent, actorScope, [assign(assignment)], internalQueue, undefined);\n    }\n    return preInitial;\n  }\n\n  /**\n   * Returns the initial `State` instance, with reference to `self` as an\n   * `ActorRef`.\n   */\n  getInitialSnapshot(actorScope, input) {\n    const initEvent = createInitEvent(input); // TODO: fix;\n    const internalQueue = [];\n    const preInitialState = this.getPreInitialState(actorScope, initEvent, internalQueue);\n    const nextState = microstep([{\n      target: [...getInitialStateNodes(this.root)],\n      source: this.root,\n      reenter: true,\n      actions: [],\n      eventType: null,\n      toJSON: null // TODO: fix\n    }], preInitialState, actorScope, initEvent, true, internalQueue);\n    const {\n      snapshot: macroState\n    } = macrostep(nextState, initEvent, actorScope, internalQueue);\n    return macroState;\n  }\n  start(snapshot) {\n    Object.values(snapshot.children).forEach(child => {\n      if (child.getSnapshot().status === 'active') {\n        child.start();\n      }\n    });\n  }\n  getStateNodeById(stateId) {\n    const fullPath = toStatePath(stateId);\n    const relativePath = fullPath.slice(1);\n    const resolvedStateId = isStateId(fullPath[0]) ? fullPath[0].slice(STATE_IDENTIFIER.length) : fullPath[0];\n    const stateNode = this.idMap.get(resolvedStateId);\n    if (!stateNode) {\n      throw new Error(`Child state node '#${resolvedStateId}' does not exist on machine '${this.id}'`);\n    }\n    return getStateNodeByPath(stateNode, relativePath);\n  }\n  get definition() {\n    return this.root.definition;\n  }\n  toJSON() {\n    return this.definition;\n  }\n  getPersistedSnapshot(snapshot, options) {\n    return getPersistedSnapshot(snapshot, options);\n  }\n  restoreSnapshot(snapshot, _actorScope) {\n    const children = {};\n    const snapshotChildren = snapshot.children;\n    Object.keys(snapshotChildren).forEach(actorId => {\n      const actorData = snapshotChildren[actorId];\n      const childState = actorData.snapshot;\n      const src = actorData.src;\n      const logic = typeof src === 'string' ? resolveReferencedActor(this, src) : src;\n      if (!logic) {\n        return;\n      }\n      const actorRef = createActor(logic, {\n        id: actorId,\n        parent: _actorScope.self,\n        syncSnapshot: actorData.syncSnapshot,\n        snapshot: childState,\n        src,\n        systemId: actorData.systemId\n      });\n      children[actorId] = actorRef;\n    });\n    const restoredSnapshot = createMachineSnapshot({\n      ...snapshot,\n      children,\n      _nodes: Array.from(getAllStateNodes(getStateNodes(this.root, snapshot.value)))\n    }, this);\n    const seen = new Set();\n    function reviveContext(contextPart, children) {\n      if (seen.has(contextPart)) {\n        return;\n      }\n      seen.add(contextPart);\n      for (const key in contextPart) {\n        const value = contextPart[key];\n        if (value && typeof value === 'object') {\n          if ('xstate$$type' in value && value.xstate$$type === $$ACTOR_TYPE) {\n            contextPart[key] = children[value.id];\n            continue;\n          }\n          reviveContext(value, children);\n        }\n      }\n    }\n    reviveContext(restoredSnapshot.context, children);\n    return restoredSnapshot;\n  }\n}\n\n/**\n * Creates a state machine (statechart) with the given configuration.\n *\n * The state machine represents the pure logic of a state machine actor.\n *\n * @example\n *\n * ```ts\n * import { createMachine } from 'xstate';\n *\n * const lightMachine = createMachine({\n *   id: 'light',\n *   initial: 'green',\n *   states: {\n *     green: {\n *       on: {\n *         TIMER: { target: 'yellow' }\n *       }\n *     },\n *     yellow: {\n *       on: {\n *         TIMER: { target: 'red' }\n *       }\n *     },\n *     red: {\n *       on: {\n *         TIMER: { target: 'green' }\n *       }\n *     }\n *   }\n * });\n *\n * const lightActor = createActor(lightMachine);\n * lightActor.start();\n *\n * lightActor.send({ type: 'TIMER' });\n * ```\n *\n * @param config The state machine configuration.\n * @param options DEPRECATED: use `setup({ ... })` or `machine.provide({ ... })`\n *   to provide machine implementations instead.\n */\nfunction createMachine(config, implementations) {\n  return new StateMachine(config, implementations);\n}\n\n/** @internal */\nfunction createInertActorScope(actorLogic) {\n  const self = createActor(actorLogic);\n  const inertActorScope = {\n    self,\n    defer: () => {},\n    id: '',\n    logger: () => {},\n    sessionId: '',\n    stopChild: () => {},\n    system: self.system,\n    emit: () => {},\n    actionExecutor: () => {}\n  };\n  return inertActorScope;\n}\n\n/** @deprecated Use `initialTransition(…)` instead. */\nfunction getInitialSnapshot(actorLogic, ...[input]) {\n  const actorScope = createInertActorScope(actorLogic);\n  return actorLogic.getInitialSnapshot(actorScope, input);\n}\n\n/**\n * Determines the next snapshot for the given `actorLogic` based on the given\n * `snapshot` and `event`.\n *\n * If the `snapshot` is `undefined`, the initial snapshot of the `actorLogic` is\n * used.\n *\n * @deprecated Use `transition(…)` instead.\n * @example\n *\n * ```ts\n * import { getNextSnapshot } from 'xstate';\n * import { trafficLightMachine } from './trafficLightMachine.ts';\n *\n * const nextSnapshot = getNextSnapshot(\n *   trafficLightMachine, // actor logic\n *   undefined, // snapshot (or initial state if undefined)\n *   { type: 'TIMER' }\n * ); // event object\n *\n * console.log(nextSnapshot.value);\n * // => 'yellow'\n *\n * const nextSnapshot2 = getNextSnapshot(\n *   trafficLightMachine, // actor logic\n *   nextSnapshot, // snapshot\n *   { type: 'TIMER' }\n * ); // event object\n *\n * console.log(nextSnapshot2.value);\n * // =>'red'\n * ```\n */\nfunction getNextSnapshot(actorLogic, snapshot, event) {\n  const inertActorScope = createInertActorScope(actorLogic);\n  inertActorScope.self._snapshot = snapshot;\n  return actorLogic.transition(snapshot, event, inertActorScope);\n}\n\n// at the moment we allow extra actors - ones that are not specified by `children`\n// this could be reconsidered in the future\n\nfunction setup({\n  schemas,\n  actors,\n  actions,\n  guards,\n  delays\n}) {\n  return {\n    createMachine: config => createMachine({\n      ...config,\n      schemas\n    }, {\n      actors,\n      actions,\n      guards,\n      delays\n    })\n  };\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging\nclass SimulatedClock {\n  constructor() {\n    this.timeouts = new Map();\n    this._now = 0;\n    this._id = 0;\n    this._flushing = false;\n    this._flushingInvalidated = false;\n  }\n  now() {\n    return this._now;\n  }\n  getId() {\n    return this._id++;\n  }\n  setTimeout(fn, timeout) {\n    this._flushingInvalidated = this._flushing;\n    const id = this.getId();\n    this.timeouts.set(id, {\n      start: this.now(),\n      timeout,\n      fn\n    });\n    return id;\n  }\n  clearTimeout(id) {\n    this._flushingInvalidated = this._flushing;\n    this.timeouts.delete(id);\n  }\n  set(time) {\n    if (this._now > time) {\n      throw new Error('Unable to travel back in time');\n    }\n    this._now = time;\n    this.flushTimeouts();\n  }\n  flushTimeouts() {\n    if (this._flushing) {\n      this._flushingInvalidated = true;\n      return;\n    }\n    this._flushing = true;\n    const sorted = [...this.timeouts].sort(([_idA, timeoutA], [_idB, timeoutB]) => {\n      const endA = timeoutA.start + timeoutA.timeout;\n      const endB = timeoutB.start + timeoutB.timeout;\n      return endB > endA ? -1 : 1;\n    });\n    for (const [id, timeout] of sorted) {\n      if (this._flushingInvalidated) {\n        this._flushingInvalidated = false;\n        this._flushing = false;\n        this.flushTimeouts();\n        return;\n      }\n      if (this.now() - timeout.start >= timeout.timeout) {\n        this.timeouts.delete(id);\n        timeout.fn.call(null);\n      }\n    }\n    this._flushing = false;\n  }\n  increment(ms) {\n    this._now += ms;\n    this.flushTimeouts();\n  }\n}\n\n/**\n * Returns a promise that resolves to the `output` of the actor when it is done.\n *\n * @example\n *\n * ```ts\n * const machine = createMachine({\n *   // ...\n *   output: {\n *     count: 42\n *   }\n * });\n *\n * const actor = createActor(machine);\n *\n * actor.start();\n *\n * const output = await toPromise(actor);\n *\n * console.log(output);\n * // logs { count: 42 }\n * ```\n */\nfunction toPromise(actor) {\n  return new Promise((resolve, reject) => {\n    actor.subscribe({\n      complete: () => {\n        resolve(actor.getSnapshot().output);\n      },\n      error: reject\n    });\n  });\n}\n\n/**\n * Given actor `logic`, a `snapshot`, and an `event`, returns a tuple of the\n * `nextSnapshot` and `actions` to execute.\n *\n * This is a pure function that does not execute `actions`.\n */\nfunction transition(logic, snapshot, event) {\n  const executableActions = [];\n  const actorScope = createInertActorScope(logic);\n  actorScope.actionExecutor = action => {\n    executableActions.push(action);\n  };\n  const nextSnapshot = logic.transition(snapshot, event, actorScope);\n  return [nextSnapshot, executableActions];\n}\n\n/**\n * Given actor `logic` and optional `input`, returns a tuple of the\n * `nextSnapshot` and `actions` to execute from the initial transition (no\n * previous state).\n *\n * This is a pure function that does not execute `actions`.\n */\nfunction initialTransition(logic, ...[input]) {\n  const executableActions = [];\n  const actorScope = createInertActorScope(logic);\n  actorScope.actionExecutor = action => {\n    executableActions.push(action);\n  };\n  const nextSnapshot = logic.getInitialSnapshot(actorScope, input);\n  return [nextSnapshot, executableActions];\n}\n\nconst defaultWaitForOptions = {\n  timeout: Infinity // much more than 10 seconds\n};\n\n/**\n * Subscribes to an actor ref and waits for its emitted value to satisfy a\n * predicate, and then resolves with that value. Will throw if the desired state\n * is not reached after an optional timeout. (defaults to Infinity).\n *\n * @example\n *\n * ```js\n * const state = await waitFor(someService, (state) => {\n *   return state.hasTag('loaded');\n * });\n *\n * state.hasTag('loaded'); // true\n * ```\n *\n * @param actorRef The actor ref to subscribe to\n * @param predicate Determines if a value matches the condition to wait for\n * @param options\n * @returns A promise that eventually resolves to the emitted value that matches\n *   the condition\n */\nfunction waitFor(actorRef, predicate, options) {\n  const resolvedOptions = {\n    ...defaultWaitForOptions,\n    ...options\n  };\n  return new Promise((res, rej) => {\n    const {\n      signal\n    } = resolvedOptions;\n    if (signal?.aborted) {\n      // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\n      rej(signal.reason);\n      return;\n    }\n    let done = false;\n    const handle = resolvedOptions.timeout === Infinity ? undefined : setTimeout(() => {\n      dispose();\n      rej(new Error(`Timeout of ${resolvedOptions.timeout} ms exceeded`));\n    }, resolvedOptions.timeout);\n    const dispose = () => {\n      clearTimeout(handle);\n      done = true;\n      sub?.unsubscribe();\n      if (abortListener) {\n        signal.removeEventListener('abort', abortListener);\n      }\n    };\n    function checkEmitted(emitted) {\n      if (predicate(emitted)) {\n        dispose();\n        res(emitted);\n      }\n    }\n\n    /**\n     * If the `signal` option is provided, this will be the listener for its\n     * `abort` event\n     */\n    let abortListener;\n    // eslint-disable-next-line prefer-const\n    let sub; // avoid TDZ when disposing synchronously\n\n    // See if the current snapshot already matches the predicate\n    checkEmitted(actorRef.getSnapshot());\n    if (done) {\n      return;\n    }\n\n    // only define the `abortListener` if the `signal` option is provided\n    if (signal) {\n      abortListener = () => {\n        dispose();\n        // XState does not \"own\" the signal, so we should reject with its reason (if any)\n        // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\n        rej(signal.reason);\n      };\n      signal.addEventListener('abort', abortListener);\n    }\n    sub = actorRef.subscribe({\n      next: checkEmitted,\n      error: err => {\n        dispose();\n        // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\n        rej(err);\n      },\n      complete: () => {\n        dispose();\n        rej(new Error(`Actor terminated without satisfying predicate`));\n      }\n    });\n    if (done) {\n      sub.unsubscribe();\n    }\n  });\n}\n\nexport { SimulatedClock, StateMachine, StateNode, assertEvent, createMachine, getInitialSnapshot, getNextSnapshot, initialTransition, setup, toPromise, transition, waitFor };\n","import { createBackoff, Backoff } from '@/util/backoff.ts';\nimport { createActor, fromPromise, setup, waitFor } from 'xstate';\nimport { WorkhorseConfig, TaskHooks, SingleTaskExecutor, Inspector } from '@/types.ts';\n\nconst reserveTask = async (): Promise<void> => {};\nconst executeTask = async (): Promise<void> => {};\nconst handleFailure = async (): Promise<void> => {};\nconst handleSuccess = async (): Promise<void> => {};\n\ntype Event = { type: 'start' } | { type: 'stop' } | { type: 'poll' };\ntype Tag =\n  | 'stopped'\n  | 'started'\n  | 'ready'\n  | 'canStop'\n  | 'busy'\n  | 'executing'\n  | 'executed'\n  | 'failure'\n  | 'success'\n  | 'critical';\ntype Status = 'stopped' | 'started' | 'critical';\ntype TaskExecutorContext = { backoff: Backoff };\n\n// Create the state machine setup\nconst machineSetup = setup({\n  types: {\n    context: {} as TaskExecutorContext,\n    events: {} as Event,\n    tags: {} as Tag,\n    input: {} as WorkhorseConfig,\n  },\n  actors: {\n    reserveHook: fromPromise(reserveTask),\n    executeHook: fromPromise(executeTask),\n    failureHook: fromPromise(handleFailure),\n    successHook: fromPromise(handleSuccess),\n  },\n  delays: {\n    DELAY: ({ context }) => context.backoff.getBackoff(),\n  },\n});\n\nexport const taskExecutorMachine = machineSetup.createMachine({\n  context: ({ input }) => {\n    return {\n      backoff: createBackoff(input.backoff),\n    };\n  },\n  id: 'TaskExecutor',\n  initial: 'idle',\n  states: {\n    idle: {\n      tags: ['stopped', 'canStop'],\n      on: { start: { target: 'ready' } },\n    },\n    ready: {\n      tags: ['ready', 'canStop', 'started'],\n      on: {\n        poll: { target: 'reservingTask' },\n        stop: { target: 'idle' },\n      },\n    },\n    reservingTask: {\n      tags: ['busy', 'started'],\n      invoke: {\n        src: 'reserveHook',\n        onDone: { target: 'taskExecuting' },\n        onError: { target: 'noReservation' },\n      },\n    },\n    taskExecuting: {\n      tags: ['executing', 'started'],\n      invoke: {\n        src: 'executeHook',\n        onDone: { target: 'taskSuccessful' },\n        onError: { target: 'taskFailed' },\n      },\n    },\n    noReservation: {\n      tags: ['started'],\n      always: { target: 'continue' },\n    },\n    taskFailed: {\n      tags: ['failure', 'executed', 'started'],\n      invoke: {\n        src: 'failureHook',\n        onDone: { target: 'backingOff' },\n        onError: { target: 'halted' },\n      },\n    },\n    taskSuccessful: {\n      tags: ['success', 'executed', 'started'],\n      entry: ({ context }) => {\n        context.backoff.resetBackoff();\n      },\n      invoke: {\n        src: 'successHook',\n        onDone: { target: 'continue' },\n        onError: { target: 'halted' },\n      },\n    },\n    continue: {\n      tags: ['started'],\n      always: { target: 'ready' },\n    },\n    backingOff: {\n      tags: ['canStop', 'started'],\n      on: { stop: 'idle' },\n      after: {\n        DELAY: { target: 'continue' },\n      },\n      exit: ({ context }) => {\n        context.backoff.increaseBackoff();\n      }, // Increase backoff on exit\n    },\n    halted: {\n      tags: ['critical', 'stopped', 'canStop'],\n      type: 'final',\n    },\n  },\n});\n\nexport function createTaskExecutor(\n  config: WorkhorseConfig,\n  taskRunner: TaskHooks,\n  inspect?: Inspector\n): SingleTaskExecutor {\n  const machine = taskExecutorMachine.provide({\n    actors: {\n      reserveHook: fromPromise(taskRunner.reserveHook),\n      executeHook: fromPromise(taskRunner.executeHook),\n      successHook: fromPromise(taskRunner.successHook),\n      failureHook: fromPromise(taskRunner.failureHook),\n    },\n  });\n\n  const actor = createActor(machine, { inspect, input: config });\n  actor.start();\n\n  const taskExecutor = {\n    start: () => {\n      actor.send({ type: 'start' });\n    },\n    stop: () => {\n      actor.send({ type: 'stop' });\n    },\n    poll: () => {\n      actor.send({ type: 'poll' });\n    },\n    waitFor: async (tag: Tag) => {\n      await waitFor(actor, (state) => state.hasTag(tag));\n    },\n    waitIf: async (tag: Tag) => {\n      await waitFor(actor, (state) => !state.hasTag(tag));\n    },\n    getStatus: (): Status => {\n      const snapshot = actor.getSnapshot();\n      const statusTags: Tag[] = ['started', 'critical', 'stopped'];\n      for (const tag of statusTags) {\n        if (snapshot.hasTag(tag)) {\n          return tag as Status;\n        }\n      }\n      const unreachable: never = snapshot.value as never;\n      throw new Error(`Unexpected state: ${unreachable} ${JSON.stringify(snapshot.tags)}`);\n    },\n  };\n\n  return taskExecutor;\n}\n","import {\n  TaskExecutorStrategy,\n  SingleTaskExecutor,\n  TaskExecutorPool,\n  Inspector,\n  WorkhorseConfig,\n} from '@/types.ts';\nimport { UnreachableError } from '@/errors.ts';\n\ninterface PollStrategies {\n  pollSerial(): Promise<void>;\n  pollParallel(): Promise<void>;\n  pollDetached(): Promise<void>;\n}\n\nconst createExecutorPool = (\n  config: WorkhorseConfig,\n  taskExecutors: SingleTaskExecutor[],\n  _inspect?: Inspector\n): TaskExecutorPool => {\n  let executors = [...taskExecutors];\n\n  // TODO: This is too messy, split into pool / polling!?\n  const executorPool: TaskExecutorPool & PollStrategies = {\n    pollSerial: async () => {\n      for (const executor of executors) {\n        const preWait = config.poll.pre.wait;\n        await executor.waitFor(preWait);\n        executor.poll();\n      }\n    },\n    pollParallel: async () => {\n      const tasks: Promise<void>[] = [];\n\n      for (const executor of executors) {\n        if (executor.getStatus() === 'started') {\n          const preWait = config.poll.pre.wait;\n          //TODO: Instead of `await executor.waitFor(preWait)`, push the promise\n          tasks.push(\n            executor.waitFor(preWait).then(() => {\n              executor.poll();\n            })\n          );\n        }\n      }\n      await Promise.all(tasks);\n    },\n    pollDetached: () => {\n      for (const executor of executors) {\n        if (executor.getStatus() === 'started') {\n          executor.poll();\n        }\n      }\n      return Promise.resolve();\n    },\n\n    startAll: async () => {\n      for (const executor of executors) {\n        executor.start();\n      }\n      for (const executor of executors) {\n        await executor.waitFor('ready');\n      }\n    },\n    stopAll: async () => {\n      for (const executor of executors) {\n        await executor.waitFor('canStop');\n        executor.stop();\n      }\n      for (const executor of executors) {\n        await executor.waitFor('stopped');\n      }\n    },\n    shutdown: async () => {\n      await executorPool.stopAll();\n      executors = [];\n    },\n    pollAll: async () => {\n      switch (config.taskExecution) {\n        case TaskExecutorStrategy.SERIAL:\n          return executorPool.pollSerial();\n        case TaskExecutorStrategy.PARALLEL:\n          return executorPool.pollParallel();\n        case TaskExecutorStrategy.DETACHED:\n          return executorPool.pollDetached();\n        default:\n          throw new UnreachableError(\n            config.taskExecution,\n            `Unrecognized poll strategy: ${config.taskExecution}`\n          );\n      }\n    },\n  } as const;\n\n  return executorPool;\n};\n\nexport { createExecutorPool };\n","import { createDatabase } from '@/db/createDatabase.ts';\nimport { createTaskQueue } from '@/queue/TaskQueue.ts';\nimport { createExecutorHooks } from '@/executor/hooks.ts';\nimport { createTaskExecutor } from '@/executor/TaskExecutor.ts';\nimport { createExecutorPool } from '@/executor/TaskExecutorPool.ts';\nimport { Factories } from '@/types.ts';\n\nconst defaultFactories = (): Factories => {\n  return {\n    createDatabase,\n    createTaskQueue,\n    createExecutorHooks,\n    createTaskExecutor,\n    createExecutorPool,\n  };\n};\n\nexport { defaultFactories };\n","import { setup, fromPromise, waitFor, createActor, assign } from 'xstate';\n\nimport {\n  Payload,\n  WorkhorseStatus,\n  TaskQueue,\n  TaskExecutorPool,\n  QueueStatus,\n  CommandDispatcher,\n} from '@/types.ts';\nimport { log } from './util/logging';\n\nenum TaskQueueCommand {\n  Queue = 'taskQueue.queue',\n  Requeue = 'taskQueue.requeue',\n  GetStatus = 'taskQueue.getStatus',\n}\n\nenum ExecutorCommand {\n  Start = 'executors.start',\n  Stop = 'executors.stop',\n  Poll = 'executors.poll',\n  Shutdown = 'executors.shutdown',\n}\n\nenum MachineCommand {\n  Reset = 'reset',\n}\n\ntype ResetEvent = { type: MachineCommand.Reset };\ntype RequeueEvent = { type: TaskQueueCommand.Requeue };\ntype QueueEvent = {\n  type: TaskQueueCommand.Queue;\n  taskId: string;\n  payload: Payload;\n};\ntype GetStatusEvent = { type: TaskQueueCommand.GetStatus };\ntype StartExecutorsEvent = { type: ExecutorCommand.Start };\ntype StopExecutorsEvent = { type: ExecutorCommand.Stop };\ntype PollEvent = { type: ExecutorCommand.Poll };\ntype ShutdownEvent = { type: ExecutorCommand.Shutdown };\n\ntype MachineEvent =\n  | ResetEvent\n  | RequeueEvent\n  | QueueEvent\n  | GetStatusEvent\n  | StartExecutorsEvent\n  | StopExecutorsEvent\n  | PollEvent\n  | ShutdownEvent;\n\ntype DispatcherContext = {\n  status: WorkhorseStatus;\n  queue: TaskQueue;\n  executors: TaskExecutorPool;\n};\n\ntype Tag = 'ready' | 'dispatching' | 'success' | 'unexpected' | 'error';\n\nconst EmptyStatus = { queued: 0, successful: 0, failed: 0, executing: 0 };\n\nconst dispatchHook = fromPromise(\n  async ({\n    input,\n  }: {\n    input: {\n      event: MachineEvent;\n      queue: TaskQueue;\n      executors: TaskExecutorPool;\n    };\n  }): Promise<QueueStatus> => {\n    const { event, queue, executors } = input;\n    let status = EmptyStatus;\n\n    switch (event.type) {\n      case TaskQueueCommand.Queue:\n        if ('taskId' in event) {\n          await queue.addTask(event.taskId, event.payload);\n        }\n        break;\n      case TaskQueueCommand.GetStatus:\n        status = await queue.getStatus();\n        break;\n      case TaskQueueCommand.Requeue:\n        await queue.requeue();\n        break;\n      case ExecutorCommand.Start:\n        await executors.startAll();\n        break;\n      case ExecutorCommand.Stop:\n        await executors.stopAll();\n        break;\n      case ExecutorCommand.Poll:\n        await executors.pollAll();\n        break;\n      case ExecutorCommand.Shutdown:\n        await executors.stopAll();\n        status = await queue.getStatus();\n        await executors.shutdown();\n    }\n\n    return status;\n  }\n);\n\nconst createDispatcherMachine = () => {\n  return setup({\n    types: {\n      context: {} as DispatcherContext,\n      events: {} as MachineEvent,\n      input: {} as {\n        queue: TaskQueue;\n        executors: TaskExecutorPool;\n      },\n      tags: {} as Tag,\n    },\n    actors: {\n      dispatchCommand: dispatchHook,\n    },\n  }).createMachine({\n    id: 'commandDispatcher',\n    initial: 'ready',\n    context: ({ input }) => {\n      return {\n        status: { ...EmptyStatus },\n        queue: input.queue,\n        executors: input.executors,\n      };\n    },\n    states: {\n      ready: {\n        tags: ['ready'],\n        on: {\n          'taskQueue.*': { target: 'dispatching' },\n          'executors.*': { target: 'dispatching' },\n          '*': { target: 'unexpectedEvent' },\n        },\n      },\n      dispatching: {\n        tags: ['dispatching'],\n        invoke: {\n          input: ({ context, event }) => {\n            return {\n              queue: context.queue,\n              executors: context.executors,\n              event,\n            };\n          },\n          src: 'dispatchCommand',\n          onDone: {\n            target: 'success',\n            actions: assign({\n              status: ({ event }) => event.output,\n            }),\n          },\n          onError: {\n            target: 'error',\n          },\n        },\n      },\n      success: {\n        tags: ['success'],\n        on: {\n          reset: {\n            target: 'ready',\n          },\n        },\n      },\n      unexpectedEvent: {\n        tags: ['unexpected'],\n        always: { target: 'ready' },\n      },\n      error: {\n        tags: ['error'],\n        type: 'final',\n      },\n    },\n  });\n};\n\nconst createDispatcher = (queue: TaskQueue, executors: TaskExecutorPool): CommandDispatcher => {\n  const machine = createDispatcherMachine();\n  const actor = createActor(machine, { input: { queue, executors } });\n\n  const execute = async (event: MachineEvent): Promise<QueueStatus> => {\n    await waitFor(actor, (state) => state.hasTag('ready'));\n    actor.send(event);\n    await waitFor(actor, (state) => state.hasTag('success'));\n    const status = actor.getSnapshot().context.status;\n    actor.send({ type: MachineCommand.Reset });\n    return status;\n  };\n\n  actor.start();\n\n  return {\n    getStatus: () => execute({ type: TaskQueueCommand.GetStatus }),\n    queue: (taskId: string, payload: Payload) =>\n      execute({ type: TaskQueueCommand.Queue, taskId, payload }),\n    requeue: () => execute({ type: TaskQueueCommand.Requeue }),\n    startExecutors: () => execute({ type: ExecutorCommand.Start }),\n    stopExecutors: () => execute({ type: ExecutorCommand.Stop }),\n    poll: () => execute({ type: ExecutorCommand.Poll }),\n    log: (s: string): void => {\n      log(s);\n    },\n    shutdown: async () => {\n      const finalStatus = await execute({ type: ExecutorCommand.Shutdown });\n      actor.stop();\n      return finalStatus;\n    },\n  };\n};\n\nexport { createDispatcher };\n","import { setup, fromPromise, createActor } from 'xstate';\n\nconst startEvent = { type: 'start' };\nconst stopEvent = { type: 'stop' };\nconst pauseEvent = { type: 'pause' };\nconst resumeEvent = { type: 'resume' };\n\ninterface PeriodicJob {\n  start(): void;\n  stop(): void;\n  pause(): void;\n  resume(): void;\n}\n\nconst createPeriodicJob = (func: () => Promise<void>, interval: number): PeriodicJob => {\n  const actor = createActor(\n    machine.provide({\n      actors: { runJob: fromPromise(func) },\n      delays: { interval },\n    })\n  );\n  actor.start();\n\n  return {\n    start: () => {\n      actor.send(startEvent);\n    },\n    stop: () => {\n      actor.send(stopEvent);\n    },\n    pause: () => {\n      actor.send(pauseEvent);\n    },\n    resume: () => {\n      actor.send(resumeEvent);\n    },\n  };\n};\n\nconst machine = setup({\n  types: {\n    context: {} as object,\n    events: {} as typeof startEvent | typeof stopEvent | typeof pauseEvent | typeof resumeEvent,\n  },\n  actors: {\n    runJob: fromPromise(async () => {}),\n  },\n}).createMachine({\n  context: {},\n  id: 'PeriodicTaskMachine',\n  initial: 'idle',\n  states: {\n    idle: {\n      on: {\n        start: {\n          target: 'running',\n        },\n      },\n    },\n    running: {\n      on: {\n        stop: {\n          target: 'idle',\n        },\n        pause: {\n          target: 'paused',\n        },\n      },\n      initial: 'invoking',\n      states: {\n        invoking: {\n          invoke: {\n            src: 'runJob',\n            input: {},\n            onDone: {\n              target: 'sleeping',\n            },\n            onError: {\n              target: '#PeriodicTaskMachine.failed',\n            },\n          },\n        },\n        sleeping: {\n          after: {\n            interval: {\n              target: 'invoking',\n            },\n          },\n        },\n      },\n    },\n    paused: {\n      on: {\n        resume: {\n          target: 'running',\n        },\n        stop: {\n          target: 'idle',\n        },\n      },\n    },\n    failed: {\n      type: 'final',\n    },\n  },\n});\n\nexport { createPeriodicJob };\nexport type { PeriodicJob };\n","import { WorkhorseConfig, WorkhorsePlugin } from '@types';\nimport { error, debug } from './util/logging';\n\ninterface PluginHandler {\n  startPlugins(config: WorkhorseConfig): WorkhorsePlugin[];\n  stopPlugins(): void;\n}\n\nconst createPluginHandler = (plugins: WorkhorsePlugin[]): PluginHandler => {\n  return {\n    startPlugins: () => {\n      return plugins.map((plugin) => {\n        try {\n          plugin.onStart();\n        } catch (e) {\n          error(`Plugin ${plugin.name} failed to start: ${e}`);\n          throw e;\n        }\n        debug(`Started plugin: ${plugin.name}`);\n        return plugin;\n      });\n    },\n\n    stopPlugins: () => {\n      plugins.forEach((plugin) => {\n        debug(`Stopping plugin: ${plugin.name}`);\n        plugin.onStop();\n      });\n      plugins.length = 0;\n    },\n  };\n};\n\nexport { createPluginHandler };\nexport type { PluginHandler };\n","import { defaultOptions } from './config';\nimport { defaultFactories } from '@/defaultFactories.ts';\n\nimport {\n  CommandDispatcher,\n  Factories,\n  Payload,\n  QueueStatus,\n  RunTask,\n  SingleTaskExecutor,\n  TaskQueue,\n  Workhorse,\n  WorkhorseConfig,\n} from '@types';\nimport { createDispatcher } from './dispatcher';\nimport { createPeriodicJob, PeriodicJob } from '@/util/periodic.ts';\nimport { error, setLogLevel } from '@/util/logging.ts';\nimport { createPluginHandler, PluginHandler } from '@/pluginHandler.ts';\nimport { Emitter, waitForReturnValue } from '@events';\nimport { Actions, SubscriptionEvents, WorkhorseEventMap } from '@/events/eventTypes.ts';\nimport { TaskMonitor } from '@/plugins/TaskMonitor.ts';\n\ntype RuntimeConfig = [TaskQueue, CommandDispatcher, PeriodicJob, PluginHandler];\n\nconst initialize = async (\n  runTask: RunTask,\n  config: WorkhorseConfig,\n  factories: Factories\n): Promise<RuntimeConfig> => {\n  setLogLevel(config.logLevel);\n\n  const database = await factories.createDatabase(config);\n  const taskQueue = factories.createTaskQueue(config, database);\n  const taskExecutors: SingleTaskExecutor[] = [];\n  for (let i = 0; i < config.concurrency; i++) {\n    const taskHooks = factories.createExecutorHooks(config, taskQueue, runTask);\n    const executor = factories.createTaskExecutor(config, taskHooks);\n    taskExecutors.push(executor);\n  }\n  const executorPool = factories.createExecutorPool(config, taskExecutors);\n  const dispatcher = createDispatcher(taskQueue, executorPool);\n\n  const allPlugins = [...config.defaultPlugins, ...config.plugins];\n  const pluginHandler = createPluginHandler(allPlugins);\n  config.plugins = pluginHandler.startPlugins(config);\n\n  const poller = async () => {\n    await dispatcher.poll();\n    const status = await dispatcher.getStatus();\n    // TODO: This should be configurable\n    if (status.queued === 0 && status.failed > 0) {\n      await dispatcher.requeue();\n    }\n  };\n  const pollingJob = createPeriodicJob(poller, config.poll.interval);\n\n  if (config.poll.auto) {\n    Emitter.on(Actions.Poller.Pause, () => {\n      pollingJob.pause();\n    });\n    Emitter.on(Actions.Poller.Resume, () => {\n      pollingJob.resume();\n    });\n\n    pollingJob.start();\n  }\n\n  return [taskQueue, dispatcher, pollingJob, pluginHandler];\n};\n\nconst createWorkhorse = async (\n  run: RunTask,\n  options: Partial<WorkhorseConfig> = {},\n  factories: Partial<Factories> = {}\n): Promise<Workhorse> => {\n  const runtimeConfig = {\n    options: { ...defaultOptions(), ...options },\n    factories: { ...defaultFactories(), ...factories },\n    defaultPlugins: [new TaskMonitor()],\n  };\n  const result = await initialize(run, runtimeConfig.options, runtimeConfig.factories);\n  const [taskQueue, dispatcher, poller, pluginHandler] = result;\n\n  const workhorse: Workhorse = {\n    subscribe<K extends SubscriptionEvents>(\n      event: K,\n      handler: (payload: WorkhorseEventMap[K]) => void\n    ): () => void {\n      Emitter.on(event, handler);\n      return () => {\n        Emitter.off(event, handler);\n      };\n    },\n    queue: async (taskId: string, payload: Payload) => {\n      await taskQueue.addTask(taskId, payload);\n    },\n    run: async (taskId: string, payload: Payload): Promise<unknown> => {\n      const resultPromise = waitForReturnValue(taskId);\n      await workhorse.queue(taskId, payload);\n      //TODO: Use a better way of handling non-awaits\n      workhorse.poll().catch(error);\n      return resultPromise;\n    },\n    getStatus: async () => {\n      return await taskQueue.getStatus();\n    },\n    startPoller: () => {\n      poller.start();\n    },\n    stopPoller: () => {\n      poller.stop();\n    },\n    poll: async () => {\n      await dispatcher.poll();\n    },\n    requeue: async () => {\n      await dispatcher.requeue();\n    },\n    shutdown: async (): Promise<QueueStatus> => {\n      poller.stop();\n      pluginHandler.stopPlugins();\n      return await dispatcher.shutdown();\n    },\n  };\n\n  await dispatcher.startExecutors();\n  return workhorse;\n};\n\nexport { createWorkhorse };\n","import { WorkhorsePlugin } from '@/types';\nimport { Emitter, Actions } from '@events';\nimport { debug } from '@/util/logging.ts';\n\nclass PauseWhenOffline implements WorkhorsePlugin {\n  public name = 'PauseWhenOffline';\n\n  onStart = (): void => {\n    if (!navigator.onLine) {\n      this.pausePoller();\n    }\n\n    window.addEventListener('online', this.resumePoller);\n    window.addEventListener('offline', this.pausePoller);\n  };\n\n  onStop = (): void => {\n    window.removeEventListener('online', this.resumePoller);\n    window.removeEventListener('offline', this.pausePoller);\n  };\n\n  private resumePoller = (): void => {\n    debug('Online - processing queue');\n    Emitter.emit(Actions.Poller.Resume, []);\n  };\n\n  private pausePoller = (): void => {\n    debug('Offline - pause processing queue');\n    Emitter.emit(Actions.Poller.Pause, []);\n  };\n}\n\nexport { PauseWhenOffline };\n"],"names":["TaskState","DuplicateStrategy","TaskExecutorStrategy","assertTaskQueueRow","maybeTaskQueueRow","row","assertTaskRow","maybeTaskRow","millisec","ms","seconds","sec","minutes","min","has","prefix","Events","EE","fn","context","once","addListener","emitter","event","listener","evt","clearEvent","EventEmitter","names","events","name","handlers","i","l","ee","listeners","a1","a2","a3","a4","a5","len","args","length","j","module","createTypedEmitter","payload","Emitter","Notifications","Actions","Subscriptions","InternalEmitter","createInternalEmitter","taskIdSuccess","taskId","emitReturnValue","returnValue","waitForReturnValue","resolve","eventEmitter","root","definition","this","noop","undefinedType","isIE","logMethods","_loggersByName","defaultLogger","bindMethod","obj","methodName","method","traceForIE","realMethod","replaceLoggingMethods","level","enableLoggingWhenConsoleArrives","defaultMethodFactory","_level","_loggerName","Logger","factory","self","inheritedLevel","defaultLevel","userLevel","storageKey","persistLevelIfPossible","levelNum","levelName","getPersistedLevel","storedLevel","cookie","cookieName","location","clearPersistedLevel","normalizeLevel","input","persist","childName","initialLevel","logger","_log","setLogLevel","loglevel","debug","s","log","error","TaskMonitor","total","remaining","progress","defaults","defaultOptions","FUNCTION","CHANNEL","GET","HAS","SET","isArray","SharedArrayBuffer","window","notify","wait","waitAsync","postPatched","buffer","onmessage","w","ids","resolvers","postMessage","details","id","sb","data","rest","buff","as","Int32Array","Map","Uint16Array","I32_BYTES","UI16_BYTES","waitInterrupt","delay","handler","buffers","syncResult","uid","coincident","parse","stringify","transform","interrupt","sendMessage","post","transfer","decoder","waitFor","isAsync","seppuku","_","action","deadlock","bytes","actions","callback","type","results","result","serialized","ui16a","sqlite3InitModule","_scriptName","_documentCurrentScript","moduleArg","moduleRtn","Module","readyPromiseResolve","readyPromiseReject","readyPromise","reject","ENVIRONMENT_IS_WEB","ENVIRONMENT_IS_WORKER","sqlite3InitModuleState","moduleOverrides","thisProgram","scriptDirectory","locateFile","path","readAsync","readBinary","url","xhr","response","out","err","wasmBinary","wasmMemory","ABORT","HEAP8","HEAPU8","HEAP16","HEAP32","HEAPU32","HEAP64","updateMemoryViews","b","INITIAL_MEMORY","__ATPRERUN__","__ATINIT__","__ATPOSTRUN__","preRun","addOnPreRun","callRuntimeCallbacks","initRuntime","FS","postRun","addOnPostRun","cb","addOnInit","runDependencies","dependenciesFulfilled","getUniqueRunDependency","addRunDependency","removeRunDependency","abort","what","e","dataURIPrefix","isDataURI","filename","findWasmBinary","f","wasmBinaryFile","getBinarySync","file","getBinaryPromise","binaryFile","instantiateArrayBuffer","imports","receiver","binary","reason","instantiateAsync","getWasmImports","wasmImports","createWasm","info","receiveInstance","instance","wasmExports","receiveInstantiationResult","callbacks","PATH","splitPathRe","parts","allowAboveRoot","up","last","isAbsolute","trailingSlash","p","dir","lastSlash","paths","r","initRandomFill","view","randomFill","PATH_FS","resolvedPath","resolvedAbsolute","from","to","trim","arr","start","end","fromParts","toParts","samePartsLength","outputParts","UTF8Decoder","UTF8ArrayToString","heapOrArray","idx","maxBytesToRead","endIdx","endPtr","str","u0","u1","u2","ch","FS_stdin_getChar_buffer","lengthBytesUTF8","c","stringToUTF8Array","heap","outIdx","maxBytesToWrite","startIdx","u","intArrayFromString","stringy","dontAddNull","u8array","numBytesWritten","FS_stdin_getChar","TTY","dev","ops","stream","tty","offset","pos","bytesRead","val","optional_actions","zeroMemory","address","size","alignMemory","alignment","mmapAlloc","ptr","_emscripten_builtin_memalign","MEMFS","mount","parent","mode","node","newCapacity","prevCapacity","CAPACITY_DOUBLING_MAX","oldContents","newSize","attr","old_node","new_dir","new_name","new_node","entries","key","newname","oldpath","position","contents","canOwn","whence","prot","flags","allocated","mmapFlags","asyncLoad","onload","onerror","noRunDep","dep","arrayBuffer","FS_createDataFile","fileData","canRead","canWrite","preloadPlugins","FS_handledByPreloadPlugin","byteArray","fullname","finish","handled","plugin","FS_createPreloadedFile","dontCreateFile","preFinish","processData","FS_modeStringToFlags","flagModes","FS_getMode","errno","rdev","opts","current","current_path","islast","count","link","lookup","parentid","hash","errCode","nodeName","flag","perms","isdir","fd","origStream","device","ma","mi","mounts","check","m","populate","completed","doCallback","done","mountpoint","pseudo","mountRoot","next","dirs","d","newpath","old_path","new_path","old_dirname","new_dirname","old_name","old_dir","relative","dontFollow","gid","atime","mtime","created","seeking","bytesWritten","cmd","arg","ret","stat","buf","actualNumBytes","randomBuffer","randomLeft","randomByte","proc_self","output","code","dontResolveLastLink","part","properties","LazyUint8Array","chunkOffset","chunkNum","getter","datalength","header","hasByteServing","usesGzip","chunkSize","doXHR","lazyArray","stream_ops","keys","writeChunks","UTF8ToString","SYSCALLS","dirfd","allowEmpty","dirstream","func","ctime","addr","___syscall_chmod","___syscall_faccessat","amode","___syscall_fchmod","___syscall_fchown32","owner","group","syscallGetVarargI","syscallGetVarargP","___syscall_fcntl64","varargs","newStream","___syscall_fstat64","INT53_MAX","INT53_MIN","bigintToI53Checked","num","___syscall_ftruncate64","stringToUTF8","outPtr","___syscall_getcwd","cwd","cwdLengthInBytes","___syscall_ioctl","op","termios","argp","c_iflag","c_oflag","c_cflag","c_lflag","c_cc","winsize","___syscall_lstat64","___syscall_mkdirat","___syscall_newfstatat","nofollow","___syscall_openat","___syscall_readlinkat","bufsize","endChar","___syscall_rmdir","___syscall_stat64","___syscall_unlinkat","readI53FromI64","___syscall_utimensat","times","now","nanoseconds","nowIsMonotonic","__emscripten_get_now_is_monotonic","isLeapYear","year","MONTH_DAYS_LEAP_CUMULATIVE","MONTH_DAYS_REGULAR_CUMULATIVE","ydayFromDate","date","leap","monthDaysCumulative","yday","__localtime_js","time","tmPtr","summerOffset","winterOffset","dst","__mmap_js","res","__munmap_js","__tzset_js","timezone","daylight","std_name","dst_name","currentYear","winter","summer","stdTimezoneOffset","extractZone","timezoneOffset","sign","absOffset","hours","winterName","summerName","_emscripten_date_now","_emscripten_get_now","getHeapMax","growMemory","pages","_emscripten_resize_heap","requestedSize","oldSize","maxHeapSize","cutDown","overGrownHeapSize","replacement","ENV","getExecutableName","getEnvStrings","lang","env","x","strings","stringToAscii","_environ_get","__environ","environ_buf","bufSize","string","_environ_sizes_get","penviron_count","penviron_buf_size","_fd_close","_fd_fdstat_get","pbuf","rightsBase","rightsInheriting","doReadv","iov","iovcnt","curr","_fd_read","pnum","_fd_seek","newOffset","_fd_sync","doWritev","_fd_write","a0","a6","a7","a8","a9","calledRun","runCaller","run","doRun","sqlite3ApiBootstrap","apiConfig","config","k","capi","wasm","__rcStr","rc","__isInt","n","SQLite3Error","rcStr","toss3","isInt32","bigIntFits64","bigIntFits32","bigIntFitsDouble","isTypedArray","v","__SAB","isSharedTypedArray","aTypedArray","typedArrayPart","begin","isBindableTypedArray","isSQLableTypedArray","affirmBindableTypedArray","utf8Decoder","typedArrayToString","typedArray","flexibleString","WasmAllocError","pDb","funcName","nArg","eTextRep","pApp","xFunc","xStep","xFinal","xDestroy","xValue","xInverse","dbPtr","sql","sqlByteLen","prepFlags","stmtPtrPtr","strPtrPtr","pVoid","pErrMsg","util","srcTypedArray","pRet","keyAlloc","keyDealloc","keyRealloc","m2","optName","opt","rv","ov","sz","mem","safePtrSize","stackPos","sqlite3","ta","stack","nAlloc","__wasmfsOpfsDir","pdir","vfsName","dbName","pK","pVfs","oVfs","schema","scope","pOut","pSize","ppOut","zSchema","nOut","dbPointer","pCtx","dataLen","pData","vfs","__kvvfsInfo","which","kvinfo","toRm","kk","pVal","throwIfCannotConvert","valType","pBlob","argc","pArgv","tgt","pStmt","iCol","__newOldValue","pObj","impl","pv","pChangesetIter","ff","lia","postInit","catcher","target","toss","ptrIR","ptrSizeof","cache","heapWrappers","unsigned","fptr","ft","sig","dest","letter","sigParams","wasmCode","__installFunction","scoped","oldLen","fi","list","value","h","__utf8Decode","jstr","maxBytes","addNul","max","tgtPtr","srcPtr","__affirmAlloc","__allocCStr","returnWithLength","allocator","a","state","__allocMainArgv","isScoped","pList","__allocPtr","howMany","pIr","__argcMismatch","fname","xArg","xResult","__xArgPtr","copyToResult","adaptPtr","t","__xArgString","AbstractArgAdapter","argv","argIndex","FuncPtrAdapter","cm","pair","fp","__xArgAdapterCheck","__xResultAdapterCheck","fArg","resultType","argTypes","fIsFunc","xf","cxw","__xAdapter","typeName","adapter","modeName","xcvPart","wfetch","wui","finalThen","exports","StructBinderFactory","SBF","alloc","dealloc","memberPrefix","memberSuffix","bigIntEnabled","BigInt","BigInt64Array","deriveFrom","isLittleEndian","isFuncSig","isAutoPtrSig","sigLetter","sigIR","affirmBigIntArray","sigDVGetter","sigDVSetter","sigDVSetWrapper","sPropName","__propThrowOnSet","structName","propName","__instancePointerMap","xPtrPropName","__freeStruct","ctor","StructType","rop","__allocStruct","fill","__memoryDump","__memberKeyProp","__lookupMember","structInfo","memberName","tossIfNotFound","__memberSignature","emscriptenFormat","__ptrPropDescriptor","__structMemberKeys","__utf8Decoder","__utf8Encoder","__memberIsString","__affirmCStringSignature","member","__memberToJsString","__addOnDispose","__allocCString","__setMemberCString","isNumericValue","makeMemberWrapper","descr","rxSig1","rxSig2","sigGlyph","xPropName","dbg","prop","StructBinder","lastMember","debugFlags","StructCtor","externalMemory","mKey","aNames","nCols","pColVals","pColNames","aVals","pV","iCode","s0","s1","s2","s3","z0","z1","rowid","db","zDb","zTbl","iKey1","iKey2","__ipsProxy","__xString","nilType","__xRcPtr","fI64Disabled","__db_err","resultCode","message","msg","cJson","defineGroups","__rcMap","notThese","__dbArgcMismatch","__errEncoding","__argPDb","__argStr","__dbCleanupMap","arity","map","closeArgs","fmap","arities","fargs","__sqlite3CloseV2","__sqlite3SessionDelete","pSession","contextKey","__sqlite3CreateCollationV2","zName","pArg","xCompare","__cfProxy","__sqlite3CreateFunction","__sqlite3CreateWindowFunction","__flexiString","__prepare","sqlLen","ppStmt","pzTail","xSql","xSqlLen","__bindText","__bindBlob","text","nText","pMem","nMem","__autoExtFptr","fPtr","pKvvfs","kvvfsMethods","kvvfsMakeKey","pstack","kvvfsStorage","zClass","kvvfsImpls","zKey","zBuf","nBuf","astack","zXKey","jKey","jV","nV","zV","zData","installMethod","callee","applyArgcCheck","ndx","sigN","memKey","fProxy","pFunc","installMethods","structInstance","methods","seen","prior","mkey","__ptrMap","__stmtMap","getOwnOption","dflt","checkSqlite3Rc","sqliteResultCode","DB","__dbTraceToConsole","__vfsPostOpenCallback","dbCtorHelper","isWorkerThread","flagsStr","fnJs","vfsCheck","oflags","pPtr","postInitSql","BindTypes","Stmt","affirmDbOpen","affirmColIndex","stmt","parseExecArgs","$colName","__selectFirstRow","bind","getArgs","__selectAll","rowMode","sixtyFour","dbNumber","resultRows","evalFirstResult","saveSql","isTA","pSql","pSqlEnd","gotColNames","cbArgCache","isFunc","isWindow","fFlags","xArity","arityArg","asType","opener","affirmStmtOpen","isSupportedBindType","affirmSupportedBindType","affirmParamIndex","affirmNotLockedByExec","currentOpName","bindOne","bindType","asBlob","pStr","alsoClearBinds","storageName","jdb","getDbId","wState","alsoUnlink","ddNdx","xferList","require","getMsgDb","msgData","affirmExists","getDefaultDbId","wMsgHandler","ev","oargs","doUnlink","theCallback","rowNumber","hadColNames","changeCount","src","dbId","evType","arrivalTime","asDefault","propList","o","vtab","sii","asPtr","__xWrapFactory","removeMapping","StructPtrMapper","__xWrap","pCObj","pIdxInfo","defaultRc","ppRowid64","createdMod","mod","fwrap","pAux","ppVtab","pzErr","mnames","remethods","installOpfsVfs","options","urlParams","promiseResolve_","promiseReject_","loggers","logImpl","warn","sqlite3_vfs","sqlite3_file","sqlite3_io_methods","opfsUtil","thisThreadHasOPFS","metrics","W","opfsIoMethods","opfsVfs","promiseWasRejected","promiseReject","promiseResolve","pDVfs","dVfs","opRun","opNdx","initS11n","textDecoder","textEncoder","viewU8","viewDV","TypeIds","getTypeId","getTypeIdById","tid","clear","typeIds","randomFilename","__openFiles","opTimer","mTimeStart","mTimeEnd","ioSyncWrappers","pFile","opId","pSz64","lockType","pDest","offset64","sz64","pSrc","vfsSyncWrappers","doSyncDir","pOutFlags","opfsFlags","fh","splitIt","absFilename","createDirs","dh","dirName","absDirName","fsEntryName","doDir","dirHandle","handle","subDir","recursive","throwOnError","hDir","filenamePart","defaultOpt","depth","importDbChunked","fnamePart","sah","nWrote","chunk","checkedHeader","OpfsDb","oo1Db","sanityCheck","sq3File","fid","openFlags","dbFile","zDbFile","readBuf","jRead","errMsg","proxyJs","initPromises","SECTOR_SIZE","HEADER_MAX_PATH_SIZE","HEADER_FLAGS_SIZE","HEADER_DIGEST_SIZE","HEADER_CORPUS_SIZE","HEADER_OFFSET_FLAGS","HEADER_OFFSET_DIGEST","HEADER_OFFSET_DATA","PERSISTENT_FILE_TYPES","OPAQUE_DIR_NAME","getRandomName","optionDefaults","__mapVfsToPool","getPoolForVfs","setPoolForVfs","pool","__mapSqlite3File","getPoolForPFile","setPoolForPFile","ioMethods","nRead","nBytes","vfsMethods","cMsg","createOpfsVfs","OpfsSAHPool","#dhVfsRoot","#dhOpaque","#dhVfsParent","#mapSAHToName","#mapFilenameToSAH","#availableSAH","#mapS3FileToOFile_","#apBody","#dvBody","#cVfs","#verbosity","#logImpl","iter","ah","nRm","clearFiles","files","fileDigest","compDigest","pathBytes","enc","digest","h1","h2","prev","OpfsSAHPoolUtil","#p","sahPool","apiVersionCheck","close","thePool","poolUtil","oo1","theVfs","OpfsSAHPoolDb","SABC","toExportForESM","originalInit","initModuleState","li","EmscriptenModule","sim","handlerMap","idTypeMap","genMsgId","promiserFunc","msgHandler","proxy","rowCallbackId","oldFunc","promiseProxy","createMutex","promise","execOnDb","statement","statementData","rows","parseDatabasePath","directories","fileName","tempFileNames","ext","normalizeDatabaseFile","convertStreamTo","bufferOrStream","reader","chunks","streamDone","arrayLength","SQLocalProcessor","sameContext","databasePath","readOnly","verbose","_transfer","partOfTransaction","tx","storageType","persisted","databaseSizeBytes","functionName","functionType","queryKey","database","errored","dataPointer","getDirectoryHandle","fileNames","pointer","sqlTag","queryTemplate","params","isArrayOfArrays","convertRowsToObjects","columns","checkedRows","rowObj","column","columnIndex","isDrizzleStatement","isStatement","normalizeStatement","drizzleStatement","getQueryKey","normalizeSql","maybeQueryTemplate","mutationLock","bypass","mutation","SQLocal","queries","userCallback","transactionKey","statements","resultIndex","passStatements","query","passStatement","transaction","fileBuffer","tempFileName","tempFilePath","databaseFile","beforeUnlock","clientConfig","onInit","onConnect","commonConfig","toTaskRow","dbRow","addTaskQuery","addTaskIfNotExistsQuery","reserveTaskAtomic","taskSuccessQuery","rowId","taskFailureQuery","requeueFailuresQuery","getSingleStatusQuery","status","getAllStatusQuery","createQueryRunnerSqlocal","values","createSchema","createDatabase","dbPath","deleteDatabaseFile","ReservationFailed","DuplicateTaskError","UnreachableError","nvr","createTaskQueue","reserveQuery","reserveTaskAtomicQuery","updatedRows","taskRow","record","shouldNotHappen","records","queueStatus","assertStatusQuery","maybeQueueStatus","createExecutorHooks","_config","queue","task","taskResult","taskHelpers.emitReturnValue","createBackoff","currentBackoff","getGlobal","getDevTools","devToolsAdapter","service","devTools","Mailbox","_process","enqueued","consumed","STATE_DELIMITER","TARGETLESS_KEY","NULL_EVENT","STATE_IDENTIFIER","WILDCARD","XSTATE_INIT","XSTATE_STOP","createAfterEvent","delayRef","createDoneStateEvent","createDoneActorEvent","invokeId","createErrorActorEvent","createInitEvent","reportUnhandledError","symbolObservable","matchesState","parentStateId","childStateId","parentStateValue","toStateValue","childStateValue","toStatePath","stateId","segment","stateValue","isMachineSnapshot","statePath","pathToStateValue","marker","previous","mapValues","collection","iteratee","collectionKeys","toArrayStrict","toArray","resolveOutput","mapper","isErrorActorEvent","toTransitionConfigArray","configLike","transitionLike","normalizeTarget","toObserver","nextHandler","errorHandler","completionHandler","isObserver","createInvokeId","stateNodeId","index","resolveReferencedActor","machine","match","indexStr","nodeId","invokeConfig","createScheduledEventId","actorRef","idCounter","createSystem","rootActor","children","keyedActors","reverseKeyedActors","inspectionObservers","timerMap","clock","scheduler","source","scheduledEvent","scheduledEventId","system","timeout","sendInspectionEvent","resolvedInspectionEvent","observer","sessionId","systemId","existing","observerOrFn","scheduledEvents","scheduledId","executingCustomAction","$$ACTOR_TYPE","ProcessingStatus","Actor","logic","resolvedOptions","syncSnapshot","inspect","child","emittedEvent","wildcardListener","allListeners","exec","saveExecutingCustomAction","persistedState","snapshot","deferredFn","nextListenerOrObserver","errorListener","completeListener","wrappedHandler","initEvent","nextState","caughtError","reportError","err2","createActor","resolveCancel","actionArgs","actionParams","sendId","resolvedSendId","executeCancel","actorScope","cancel","_args","_params","resolveSpawn","_actionParams","resolvedId","resolvedInput","cloneMachineSnapshot","executeSpawn","spawnChild","resolveStop","actorRefOrString","resolvedActorRef","executeStop","stopChild","stop","evaluateGuard","guard","isInline","resolved","guardArgs","guardParams","isAtomicStateNode","stateNode","getChildren","sn","getProperAncestors","toStateNode","ancestors","getAllStateNodes","stateNodes","nodeSet","adjList","getAdjList","getInitialStateNodesWithTheirAncestors","initialStates","initialStateNode","getValueFromAdj","baseNode","childStateNodes","childStateNode","getStateValue","rootNode","isInFinalState","stateNodeSet","isStateId","getCandidates","receivedEventType","eventDescriptor","partialEventTokens","eventTokens","tokenIndex","partialEventToken","eventToken","getDelayedTransitions","afterConfig","mutateEntryExit","afterEvent","eventType","raise","configTransition","resolvedTransition","resolvedDelay","transition","delayedTransition","formatTransition","descriptor","transitionConfig","normalizedTarget","reenter","resolveTarget","formatTransitions","transitions","transitionsConfig","invokeDef","formatInitialTransition","_target","resolvedTarget","targets","isInternalTarget","getStateNodeByPath","resolveHistoryDefaultTransition","isHistoryNode","states","getInitialStateNodes","initialState","ancestor","set","descStateNode","getStateNode","stateKey","arrayStatePath","currentStateNode","getStateNodes","childStateKeys","subStateKey","allSubStateNodes","subStateNode","subStateNodes","transitionAtomicNode","transitionCompoundNode","subStateKeys","transitionNode","transitionParallelNode","allInnerTransitions","subStateValue","innerTransitions","getHistoryNodes","isDescendant","parentStateNode","hasIntersection","set1","set2","item","removeConflictingTransitions","enabledTransitions","historyValue","filteredTransitions","t1","t1Preempted","transitionsToRemove","t2","computeExitSet","t3","findLeastCommonAncestor","head","tail","getEffectiveTargetStates","targetNode","getTransitionDomain","targetStates","lca","statesToExit","domain","areStateNodeCollectionsEqual","prevStateNodes","nextStateNodeSet","microstep","currentSnapshot","isInitial","internalQueue","mutStateNodeSet","exitStates","resolveActionsAndContext","enterStates","nextStateNodes","getMachineOutput","rootCompletionNode","doneStateEvent","nextSnapshot","statesToEnter","statesForDefaultEntry","computeEntrySet","completedNodes","stateNodeToEnter","initialActions","ancestorMarker","addDescendantStatesToEnter","addAncestorStatesToEnter","historyStateNodes","addProperAncestorStatesToEnter","historyDefaultTransition","reentrancyDomain","anc","_actionExecutor","changedHistory","exitStateNode","historyNode","predicate","def","getAction","actionType","resolveAndExecuteActionsWithContext","extra","retries","intermediateSnapshot","resolvedAction","builtinAction","deferredActorIds","macrostep","microstates","addMicrostate","microstate","stopChildren","nextEvent","currentEvent","isErr","selectTransitions","shouldSelectEventlessTransitions","selectEventlessTransitions","previousState","enabledTransitionSet","atomicStates","loop","resolveStateValue","allStateNodes","machineSnapshotMatches","testValue","machineSnapshotHasTag","tag","machineSnapshotCan","transitionData","machineSnapshotToJSON","nodes","tags","getMeta","toJSON","can","hasTag","matches","jsonValues","machineSnapshotGetMeta","acc","createMachineSnapshot","getPersistedSnapshot","childrenJson","persistContext","contextPart","copy","resolveRaise","eventOrExpr","delaysMap","resolvedEvent","configDelay","executeRaise","XSTATE_PROMISE_RESOLVE","XSTATE_PROMISE_REJECT","controllerMap","fromPromise","promiseCreator","resolvedValue","emit","controller","errorData","createSpawner","spawnedChildren","spawn","resolveAssign","assignment","assignArgs","partialUpdate","propAssignment","updatedContext","assign","memo","object","memoizedData","EMPTY_OBJECT","toSerializableAction","StateNode","stateConfig","sourceName","onDone","onError","invokeDefValues","selectedTransition","candidates","candidate","resolvedContext","guardPassed","guardType","StateMachine","implementations","guards","actors","delays","resolvedStateValue","preInitial","preInitialState","macroState","fullPath","relativePath","resolvedStateId","_actorScope","snapshotChildren","actorId","actorData","childState","restoredSnapshot","reviveContext","createMachine","setup","schemas","defaultWaitForOptions","rej","signal","dispose","sub","abortListener","checkEmitted","emitted","reserveTask","executeTask","handleFailure","handleSuccess","machineSetup","taskExecutorMachine","createTaskExecutor","taskRunner","actor","statusTags","unreachable","createExecutorPool","taskExecutors","_inspect","executors","executorPool","executor","preWait","tasks","defaultFactories","EmptyStatus","dispatchHook","createDispatcherMachine","createDispatcher","execute","finalStatus","startEvent","stopEvent","pauseEvent","resumeEvent","createPeriodicJob","interval","createPluginHandler","plugins","initialize","runTask","factories","taskQueue","taskHooks","dispatcher","allPlugins","pluginHandler","pollingJob","createWorkhorse","runtimeConfig","poller","workhorse","resultPromise","PauseWhenOffline"],"mappings":"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","x_google_ignoreList":[2,6,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,36,37,38,39,40]}