@arbidocs/cli 0.1.2 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +7 -28
- package/dist/index.cjs.map +1 -1
- package/package.json +2 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/config.ts","../src/commands/config-cmd.ts","../../../node_modules/fake-indexeddb/build/esm/lib/errors.js","../../../node_modules/fake-indexeddb/build/esm/lib/isSharedArrayBuffer.js","../../../node_modules/fake-indexeddb/build/esm/lib/valueToKeyWithoutThrowing.js","../../../node_modules/fake-indexeddb/build/esm/lib/valueToKey.js","../../../node_modules/fake-indexeddb/build/esm/lib/cmp.js","../../../node_modules/fake-indexeddb/build/esm/FDBKeyRange.js","../../../node_modules/fake-indexeddb/build/esm/lib/extractKey.js","../../../node_modules/fake-indexeddb/build/esm/lib/cloneValueForInsertion.js","../../../node_modules/fake-indexeddb/build/esm/FDBCursor.js","../../../node_modules/fake-indexeddb/build/esm/FDBCursorWithValue.js","../../../node_modules/fake-indexeddb/build/esm/lib/FakeEventTarget.js","../../../node_modules/fake-indexeddb/build/esm/FDBRequest.js","../../../node_modules/fake-indexeddb/build/esm/lib/FakeDOMStringList.js","../../../node_modules/fake-indexeddb/build/esm/lib/valueToKeyRange.js","../../../node_modules/fake-indexeddb/build/esm/lib/getKeyPath.js","../../../node_modules/fake-indexeddb/build/esm/lib/isPotentiallyValidKeyRange.js","../../../node_modules/fake-indexeddb/build/esm/lib/enforceRange.js","../../../node_modules/fake-indexeddb/build/esm/lib/extractGetAllOptions.js","../../../node_modules/fake-indexeddb/build/esm/FDBIndex.js","../../../node_modules/fake-indexeddb/build/esm/lib/canInjectKey.js","../../../node_modules/fake-indexeddb/build/esm/FDBRecord.js","../../../node_modules/fake-indexeddb/build/esm/lib/binarySearchTree.js","../../../node_modules/fake-indexeddb/build/esm/lib/RecordStore.js","../../../node_modules/fake-indexeddb/build/esm/lib/Index.js","../../../node_modules/fake-indexeddb/build/esm/lib/validateKeyPath.js","../../../node_modules/fake-indexeddb/build/esm/FDBObjectStore.js","../../../node_modules/fake-indexeddb/build/esm/lib/FakeEvent.js","../../../node_modules/fake-indexeddb/build/esm/lib/scheduling.js","../../../node_modules/fake-indexeddb/build/esm/FDBTransaction.js","../../../node_modules/fake-indexeddb/build/esm/lib/KeyGenerator.js","../../../node_modules/fake-indexeddb/build/esm/lib/ObjectStore.js","../../../node_modules/fake-indexeddb/build/esm/lib/closeConnection.js","../../../node_modules/fake-indexeddb/build/esm/FDBDatabase.js","../../../node_modules/fake-indexeddb/build/esm/FDBOpenDBRequest.js","../../../node_modules/fake-indexeddb/build/esm/FDBVersionChangeEvent.js","../../../node_modules/fake-indexeddb/build/esm/lib/intersection.js","../../../node_modules/fake-indexeddb/build/esm/lib/Database.js","../../../node_modules/fake-indexeddb/build/esm/lib/validateRequiredArguments.js","../../../node_modules/fake-indexeddb/build/esm/FDBFactory.js","../../../node_modules/fake-indexeddb/build/esm/fakeIndexedDB.js","../../../node_modules/fake-indexeddb/auto/index.mjs","../src/prompts.ts","../src/commands/login.ts","../src/commands/register.ts","../src/commands/logout.ts","../src/commands/status.ts","../src/helpers.ts","../src/commands/workspaces.ts","../src/commands/docs.ts","../src/commands/upload.ts","../src/commands/download.ts","../src/commands/ask.ts","../src/commands/watch.ts","../src/commands/contacts.ts","../src/commands/dm.ts","../src/commands/tags.ts","../src/commands/doctags.ts","../src/commands/conversations.ts","../src/commands/settings.ts","../src/commands/agentconfig.ts","../src/commands/health.ts","../src/commands/tui.ts","../src/index.ts"],"names":["FileConfigStore","ArbiError","program","input","callback","current","confirmActiveTransaction","rolledBack","store","db","select","checkbox","search","password","confirm","createArbiClient","workspaces","ws","coreResolveAuth","coreResolveWorkspace","documents","fs","path","connectWebSocket","isMessageType","assistant","streamSSE","contactOps","dmOps","data","tagOps","doctagOps","convOps","settingsOps","acOps","healthOps","require","createRequire","execFileSync","spawn","Command"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * CLI configuration persistence — thin wrapper around @arbidocs/core FileConfigStore.\n *\n * Provides module-level functions that delegate to the shared store instance.\n * The `require*` methods catch ArbiError and call process.exit(1) for CLI behavior.\n */\n\nimport { FileConfigStore, ArbiError } from '@arbidocs/core'\nimport type { CliConfig, CliCredentials, ChatSession } from '@arbidocs/core'\n\nexport type { CliConfig, CliCredentials, ChatSession }\n\n/** Shared store instance used by all CLI commands */\nexport const store = new FileConfigStore()\n\n// ── Config ───────────────────────────────────────────────────────────────────\n\nexport function getConfig(): CliConfig | null {\n return store.getConfig()\n}\n\nexport function saveConfig(config: CliConfig): void {\n store.saveConfig(config)\n}\n\nexport function updateConfig(updates: Partial<CliConfig>): void {\n store.updateConfig(updates)\n}\n\nexport function requireConfig(): CliConfig {\n try {\n return store.requireConfig()\n } catch (err) {\n if (err instanceof ArbiError) {\n console.error(err.message)\n process.exit(1)\n }\n throw err\n }\n}\n\n// ── Credentials ──────────────────────────────────────────────────────────────\n\nexport function getCredentials(): CliCredentials | null {\n return store.getCredentials()\n}\n\nexport function saveCredentials(creds: CliCredentials): void {\n store.saveCredentials(creds)\n}\n\nexport function deleteCredentials(): void {\n store.deleteCredentials()\n}\n\nexport function requireCredentials(): CliCredentials {\n try {\n return store.requireCredentials()\n } catch (err) {\n if (err instanceof ArbiError) {\n console.error(err.message)\n process.exit(1)\n }\n throw err\n }\n}\n\n// ── Chat session ─────────────────────────────────────────────────────────────\n\nexport function getChatSession(): ChatSession {\n return store.getChatSession()\n}\n\nexport function saveChatSession(session: ChatSession): void {\n store.saveChatSession(session)\n}\n\nexport function updateChatSession(updates: Partial<ChatSession>): void {\n store.updateChatSession(updates)\n}\n\nexport function clearChatSession(): void {\n store.clearChatSession()\n}\n","/**\n * arbi config set-url <url>\n */\n\nimport { Command } from 'commander'\nimport { updateConfig } from '../config.js'\n\nexport function registerConfigCommand(program: Command): void {\n const config = program.command('config').description('Manage CLI configuration')\n\n config\n .command('set-url <url>')\n .description('Set the ARBI server URL')\n .action((url: string) => {\n try {\n const parsed = new URL(url)\n const deploymentDomain = parsed.hostname\n updateConfig({ baseUrl: url.replace(/\\/+$/, ''), deploymentDomain })\n console.log(`Server URL: ${url}`)\n console.log(`Domain: ${deploymentDomain}`)\n } catch {\n console.error(`Invalid URL: ${url}`)\n process.exit(1)\n }\n })\n}\n","const messages = {\n AbortError: \"A request was aborted, for example through a call to IDBTransaction.abort.\",\n ConstraintError: \"A mutation operation in the transaction failed because a constraint was not satisfied. For example, an object such as an object store or index already exists and a request attempted to create a new one.\",\n DataCloneError: \"The data being stored could not be cloned by the internal structured cloning algorithm.\",\n DataError: \"Data provided to an operation does not meet requirements.\",\n InvalidAccessError: \"An invalid operation was performed on an object. For example transaction creation attempt was made, but an empty scope was provided.\",\n InvalidStateError: \"An operation was called on an object on which it is not allowed or at a time when it is not allowed. Also occurs if a request is made on a source object that has been deleted or removed. Use TransactionInactiveError or ReadOnlyError when possible, as they are more specific variations of InvalidStateError.\",\n NotFoundError: \"The operation failed because the requested database object could not be found. For example, an object store did not exist but was being opened.\",\n ReadOnlyError: 'The mutating operation was attempted in a \"readonly\" transaction.',\n TransactionInactiveError: \"A request was placed against a transaction which is currently not active, or which is finished.\",\n SyntaxError: \"The keypath argument contains an invalid key path\",\n VersionError: \"An attempt was made to open a database using a lower version than the existing version.\"\n};\n\n// Cannot set an error code on an error using the normal setter;\n// this leads to \"Cannot set property code of which has only a getter\"\nconst setErrorCode = (error, value) => {\n Object.defineProperty(error, 'code', {\n value,\n writable: false,\n enumerable: true,\n configurable: false\n });\n};\nexport class AbortError extends DOMException {\n constructor(message = messages.AbortError) {\n super(message, \"AbortError\");\n }\n}\nexport class ConstraintError extends DOMException {\n constructor(message = messages.ConstraintError) {\n super(message, \"ConstraintError\");\n }\n}\nexport class DataCloneError extends DOMException {\n constructor(message = messages.DataCloneError) {\n super(message, \"DataCloneError\");\n }\n}\nexport class DataError extends DOMException {\n constructor(message = messages.DataError) {\n super(message, \"DataError\");\n setErrorCode(this, 0);\n }\n}\nexport class InvalidAccessError extends DOMException {\n constructor(message = messages.InvalidAccessError) {\n super(message, \"InvalidAccessError\");\n }\n}\nexport class InvalidStateError extends DOMException {\n constructor(message = messages.InvalidStateError) {\n super(message, \"InvalidStateError\");\n setErrorCode(this, 11);\n }\n}\nexport class NotFoundError extends DOMException {\n constructor(message = messages.NotFoundError) {\n super(message, \"NotFoundError\");\n }\n}\nexport class ReadOnlyError extends DOMException {\n constructor(message = messages.ReadOnlyError) {\n super(message, \"ReadOnlyError\");\n }\n}\nexport class SyntaxError extends DOMException {\n constructor(message = messages.VersionError) {\n super(message, \"SyntaxError\");\n setErrorCode(this, 12);\n }\n}\nexport class TransactionInactiveError extends DOMException {\n constructor(message = messages.TransactionInactiveError) {\n super(message, \"TransactionInactiveError\");\n setErrorCode(this, 0);\n }\n}\nexport class VersionError extends DOMException {\n constructor(message = messages.VersionError) {\n super(message, \"VersionError\");\n }\n}","export default function isSharedArrayBuffer(input) {\n return typeof SharedArrayBuffer !== \"undefined\" && input instanceof SharedArrayBuffer;\n}","import isSharedArrayBuffer from \"./isSharedArrayBuffer.js\";\nexport const INVALID_TYPE = Symbol(\"INVALID_TYPE\");\nexport const INVALID_VALUE = Symbol(\"INVALID_VALUE\");\n\n// https://w3c.github.io/IndexedDB/#convert-value-to-key\n// The \"without exceptions\" version is because we typically want to throw exceptions (DataError) but not for\n// the \"is potentially valid key range\" routine.\nconst valueToKeyWithoutThrowing = (input, seen) => {\n if (typeof input === \"number\") {\n if (isNaN(input)) {\n // If input is NaN then return \"invalid value\".\n return INVALID_VALUE;\n }\n return input;\n } else if (Object.prototype.toString.call(input) === \"[object Date]\") {\n const ms = input.valueOf();\n if (isNaN(ms)) {\n // If ms is NaN then return \"invalid value\".\n return INVALID_VALUE;\n }\n return new Date(ms);\n } else if (typeof input === \"string\") {\n return input;\n } else if (\n // https://w3c.github.io/IndexedDB/#ref-for-dfn-buffer-source-type\n input instanceof ArrayBuffer || isSharedArrayBuffer(input) || typeof ArrayBuffer !== \"undefined\" && ArrayBuffer.isView && ArrayBuffer.isView(input)) {\n // We can't consistently test detachedness, so instead we check if byteLength === 0\n // This isn't foolproof, but there's no perfect way to detect if Uint8Arrays or\n // SharedArrayBuffers are detached\n if (\"detached\" in input ? input.detached : input.byteLength === 0) {\n // If input is detached then return \"invalid value\".\n return INVALID_VALUE;\n }\n let arrayBuffer;\n let offset = 0;\n let length = 0;\n if (input instanceof ArrayBuffer || isSharedArrayBuffer(input)) {\n arrayBuffer = input;\n length = input.byteLength;\n } else {\n arrayBuffer = input.buffer;\n offset = input.byteOffset;\n length = input.byteLength;\n }\n return arrayBuffer.slice(offset, offset + length);\n } else if (Array.isArray(input)) {\n if (seen === undefined) {\n seen = new Set();\n } else if (seen.has(input)) {\n // If seen contains input, then return \"invalid value\".\n return INVALID_VALUE;\n }\n seen.add(input);\n\n // This algorithm is tricky to account for `bindings-inject-keys-bypass.any.js`. We _should_ return early when\n // encountering an invalid key/type, but we also need to avoid triggering `Object.prototype['10']` if it's been\n // overridden. One simple way to do this (and which doesn't rely on sparse arrays or other exotic solutions that\n // could cause de-opts) is to use `Array.from()` with a mapper function, which does not trigger the prototype\n // setter [1]. It does prevent an early return, but we can at least short-circuit inside the mapper function\n // (which isn't strictly necessary to pass the WPTs, but is closer to the spec).\n // [1]: See https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.from, specifically\n // the chain CreateDataPropertyOrThrow -> CreateDataProperty -> DefineOwnProperty which defines\n // the array element as an \"own\" property.\n let hasInvalid = false;\n const keys = Array.from({\n length: input.length\n }, (_, i) => {\n if (hasInvalid) {\n return;\n }\n const hop = Object.hasOwn(input, i);\n if (!hop) {\n // If hop is false, return \"invalid value\".\n hasInvalid = true;\n return;\n }\n const entry = input[i];\n const key = valueToKeyWithoutThrowing(entry, seen);\n // If key is \"invalid value\" or \"invalid type\" abort these steps and return \"invalid value\".\n if (key === INVALID_VALUE || key === INVALID_TYPE) {\n hasInvalid = true;\n return;\n }\n return key;\n });\n if (hasInvalid) {\n return INVALID_VALUE;\n }\n return keys;\n } else {\n // Otherwise: Return \"invalid type\".\n return INVALID_TYPE;\n }\n};\nexport default valueToKeyWithoutThrowing;","import { DataError } from \"./errors.js\";\nimport valueToKeyWithoutThrowing, { INVALID_TYPE, INVALID_VALUE } from \"./valueToKeyWithoutThrowing.js\";\n// https://w3c.github.io/IndexedDB/#convert-value-to-key\n// Plus throwing a DataError for invalid value/invalid key, which is commonly done\n// in lots of IndexedDB operations\nconst valueToKey = (input, seen) => {\n const result = valueToKeyWithoutThrowing(input, seen);\n if (result === INVALID_VALUE || result === INVALID_TYPE) {\n // If key is \"invalid value\" or \"invalid type\", throw a \"DataError\" DOMException\n throw new DataError();\n }\n return result;\n};\nexport default valueToKey;","import { DataError } from \"./errors.js\";\nimport valueToKey from \"./valueToKey.js\";\nconst getType = x => {\n if (typeof x === \"number\") {\n return \"Number\";\n }\n if (Object.prototype.toString.call(x) === \"[object Date]\") {\n return \"Date\";\n }\n if (Array.isArray(x)) {\n return \"Array\";\n }\n if (typeof x === \"string\") {\n return \"String\";\n }\n if (x instanceof ArrayBuffer) {\n return \"Binary\";\n }\n throw new DataError();\n};\n\n// https://w3c.github.io/IndexedDB/#compare-two-keys\nconst cmp = (first, second) => {\n if (second === undefined) {\n throw new TypeError();\n }\n first = valueToKey(first);\n second = valueToKey(second);\n const t1 = getType(first);\n const t2 = getType(second);\n if (t1 !== t2) {\n if (t1 === \"Array\") {\n return 1;\n }\n if (t1 === \"Binary\" && (t2 === \"String\" || t2 === \"Date\" || t2 === \"Number\")) {\n return 1;\n }\n if (t1 === \"String\" && (t2 === \"Date\" || t2 === \"Number\")) {\n return 1;\n }\n if (t1 === \"Date\" && t2 === \"Number\") {\n return 1;\n }\n return -1;\n }\n if (t1 === \"Binary\") {\n first = new Uint8Array(first);\n second = new Uint8Array(second);\n }\n if (t1 === \"Array\" || t1 === \"Binary\") {\n const length = Math.min(first.length, second.length);\n for (let i = 0; i < length; i++) {\n const result = cmp(first[i], second[i]);\n if (result !== 0) {\n return result;\n }\n }\n if (first.length > second.length) {\n return 1;\n }\n if (first.length < second.length) {\n return -1;\n }\n return 0;\n }\n if (t1 === \"Date\") {\n if (first.getTime() === second.getTime()) {\n return 0;\n }\n } else {\n if (first === second) {\n return 0;\n }\n }\n return first > second ? 1 : -1;\n};\nexport default cmp;","import cmp from \"./lib/cmp.js\";\nimport { DataError } from \"./lib/errors.js\";\nimport valueToKey from \"./lib/valueToKey.js\";\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#range-concept\nclass FDBKeyRange {\n static only(value) {\n if (arguments.length === 0) {\n throw new TypeError();\n }\n value = valueToKey(value);\n return new FDBKeyRange(value, value, false, false);\n }\n static lowerBound(lower, open = false) {\n if (arguments.length === 0) {\n throw new TypeError();\n }\n lower = valueToKey(lower);\n return new FDBKeyRange(lower, undefined, open, true);\n }\n static upperBound(upper, open = false) {\n if (arguments.length === 0) {\n throw new TypeError();\n }\n upper = valueToKey(upper);\n return new FDBKeyRange(undefined, upper, true, open);\n }\n static bound(lower, upper, lowerOpen = false, upperOpen = false) {\n if (arguments.length < 2) {\n throw new TypeError();\n }\n const cmpResult = cmp(lower, upper);\n if (cmpResult === 1 || cmpResult === 0 && (lowerOpen || upperOpen)) {\n throw new DataError();\n }\n lower = valueToKey(lower);\n upper = valueToKey(upper);\n return new FDBKeyRange(lower, upper, lowerOpen, upperOpen);\n }\n constructor(lower, upper, lowerOpen, upperOpen) {\n this.lower = lower;\n this.upper = upper;\n this.lowerOpen = lowerOpen;\n this.upperOpen = upperOpen;\n }\n\n // https://w3c.github.io/IndexedDB/#dom-idbkeyrange-includes\n includes(key) {\n if (arguments.length === 0) {\n throw new TypeError();\n }\n key = valueToKey(key);\n if (this.lower !== undefined) {\n const cmpResult = cmp(this.lower, key);\n if (cmpResult === 1 || cmpResult === 0 && this.lowerOpen) {\n return false;\n }\n }\n if (this.upper !== undefined) {\n const cmpResult = cmp(this.upper, key);\n if (cmpResult === -1 || cmpResult === 0 && this.upperOpen) {\n return false;\n }\n }\n return true;\n }\n get [Symbol.toStringTag]() {\n return \"IDBKeyRange\";\n }\n}\nexport default FDBKeyRange;","import valueToKey from \"./valueToKey.js\";\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-extracting-a-key-from-a-value-using-a-key-path\nconst extractKey = (keyPath, value) => {\n if (Array.isArray(keyPath)) {\n const result = [];\n for (let item of keyPath) {\n // This doesn't make sense to me based on the spec, but it is needed to pass the W3C KeyPath tests (see same\n // comment in validateKeyPath)\n if (item !== undefined && item !== null && typeof item !== \"string\" && item.toString) {\n item = item.toString();\n }\n const key = extractKey(item, value).key;\n result.push(valueToKey(key));\n }\n return {\n type: \"found\",\n key: result\n };\n }\n if (keyPath === \"\") {\n return {\n type: \"found\",\n key: value\n };\n }\n let remainingKeyPath = keyPath;\n let object = value;\n while (remainingKeyPath !== null) {\n let identifier;\n const i = remainingKeyPath.indexOf(\".\");\n if (i >= 0) {\n identifier = remainingKeyPath.slice(0, i);\n remainingKeyPath = remainingKeyPath.slice(i + 1);\n } else {\n identifier = remainingKeyPath;\n remainingKeyPath = null;\n }\n\n // special cases: https://w3c.github.io/IndexedDB/#evaluate-a-key-path-on-a-value\n const isSpecialIdentifier = identifier === \"length\" && (typeof object === \"string\" || Array.isArray(object)) || (identifier === \"size\" || identifier === \"type\") && typeof Blob !== \"undefined\" && object instanceof Blob || (identifier === \"name\" || identifier === \"lastModified\") && typeof File !== \"undefined\" && object instanceof File;\n if (!isSpecialIdentifier && (typeof object !== \"object\" || object === null || !Object.hasOwn(object, identifier))) {\n return {\n type: \"notFound\"\n };\n }\n object = object[identifier];\n }\n return {\n type: \"found\",\n key: object\n };\n};\nexport default extractKey;","// https://w3c.github.io/IndexedDB/#clone-value\n// Note that we only need to call this during insertions because the spec does not expect any cloning during retrieval,\n// only `StructuredDeserialize()` (e.g. see [1]). This is also only required for values, not keys, since keys do not\n// require cloning during insertion (e.g. see [2]).\n// [1]: https://w3c.github.io/IndexedDB/#retrieve-multiple-items-from-an-object-store\n// [2]: https://w3c.github.io/IndexedDB/#add-or-put\nexport function cloneValueForInsertion(value, transaction) {\n // Assert: transaction’s state is active.\n if (transaction._state !== \"active\") {\n throw new Error(\"Assert: transaction state is active\");\n }\n\n // Set transaction’s state to inactive.\n transaction._state = \"inactive\";\n try {\n // Let serialized be StructuredSerializeForStorage(value).\n // Let clone be ? StructuredDeserialize(serialized, targetRealm).\n // Return clone.\n return structuredClone(value);\n } finally {\n // Set transaction’s state to active.\n transaction._state = \"active\";\n }\n}","import FDBKeyRange from \"./FDBKeyRange.js\";\nimport FDBObjectStore from \"./FDBObjectStore.js\";\nimport cmp from \"./lib/cmp.js\";\nimport { DataError, InvalidAccessError, InvalidStateError, ReadOnlyError, TransactionInactiveError } from \"./lib/errors.js\";\nimport extractKey from \"./lib/extractKey.js\";\nimport valueToKey from \"./lib/valueToKey.js\";\nimport { cloneValueForInsertion } from \"./lib/cloneValueForInsertion.js\";\nconst getEffectiveObjectStore = cursor => {\n if (cursor.source instanceof FDBObjectStore) {\n return cursor.source;\n }\n return cursor.source.objectStore;\n};\n\n// This takes a key range, a list of lower bounds, and a list of upper bounds and combines them all into a single key\n// range. It does not handle gt/gte distinctions, because it doesn't really matter much anyway, since for next/prev\n// cursor iteration it'd also have to look at values to be precise, which would be complicated. This should get us 99%\n// of the way there.\nconst makeKeyRange = (range, lowers, uppers) => {\n // Start with bounds from range\n let lower = range !== undefined ? range.lower : undefined;\n let upper = range !== undefined ? range.upper : undefined;\n\n // Augment with values from lowers and uppers\n for (const lowerTemp of lowers) {\n if (lowerTemp === undefined) {\n continue;\n }\n if (lower === undefined || cmp(lower, lowerTemp) === 1) {\n lower = lowerTemp;\n }\n }\n for (const upperTemp of uppers) {\n if (upperTemp === undefined) {\n continue;\n }\n if (upper === undefined || cmp(upper, upperTemp) === -1) {\n upper = upperTemp;\n }\n }\n if (lower !== undefined && upper !== undefined) {\n return FDBKeyRange.bound(lower, upper);\n }\n if (lower !== undefined) {\n return FDBKeyRange.lowerBound(lower);\n }\n if (upper !== undefined) {\n return FDBKeyRange.upperBound(upper);\n }\n};\n\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#cursor\nclass FDBCursor {\n _gotValue = false;\n _position = undefined; // Key of previously returned record\n _objectStorePosition = undefined;\n _keyOnly = false;\n _key = undefined;\n _primaryKey = undefined;\n constructor(source, range, direction = \"next\", request, keyOnly = false) {\n this._range = range;\n this._source = source;\n this._direction = direction;\n this._request = request;\n this._keyOnly = keyOnly;\n }\n\n // Read only properties\n get source() {\n return this._source;\n }\n set source(val) {\n /* For babel */\n }\n get request() {\n return this._request;\n }\n set request(val) {\n /* For babel */\n }\n get direction() {\n return this._direction;\n }\n set direction(val) {\n /* For babel */\n }\n get key() {\n return this._key;\n }\n set key(val) {\n /* For babel */\n }\n get primaryKey() {\n return this._primaryKey;\n }\n set primaryKey(val) {\n /* For babel */\n }\n\n // https://w3c.github.io/IndexedDB/#iterate-a-cursor\n _iterate(key, primaryKey) {\n const sourceIsObjectStore = this.source instanceof FDBObjectStore;\n\n // Can't use sourceIsObjectStore because TypeScript\n const records = this.source instanceof FDBObjectStore ? this.source._rawObjectStore.records : this.source._rawIndex.records;\n let foundRecord;\n if (this.direction === \"next\") {\n const range = makeKeyRange(this._range, [key, this._position], []);\n for (const record of records.values(range)) {\n const cmpResultKey = key !== undefined ? cmp(record.key, key) : undefined;\n const cmpResultPosition = this._position !== undefined ? cmp(record.key, this._position) : undefined;\n if (key !== undefined) {\n if (cmpResultKey === -1) {\n continue;\n }\n }\n if (primaryKey !== undefined) {\n if (cmpResultKey === -1) {\n continue;\n }\n const cmpResultPrimaryKey = cmp(record.value, primaryKey);\n if (cmpResultKey === 0 && cmpResultPrimaryKey === -1) {\n continue;\n }\n }\n if (this._position !== undefined && sourceIsObjectStore) {\n if (cmpResultPosition !== 1) {\n continue;\n }\n }\n if (this._position !== undefined && !sourceIsObjectStore) {\n if (cmpResultPosition === -1) {\n continue;\n }\n if (cmpResultPosition === 0 && cmp(record.value, this._objectStorePosition) !== 1) {\n continue;\n }\n }\n if (this._range !== undefined) {\n if (!this._range.includes(record.key)) {\n continue;\n }\n }\n foundRecord = record;\n break;\n }\n } else if (this.direction === \"nextunique\") {\n // This could be done without iterating, if the range was defined slightly better (to handle gt/gte cases).\n // But the performance difference should be small, and that wouldn't work anyway for directions where the\n // value needs to be used (like next and prev).\n const range = makeKeyRange(this._range, [key, this._position], []);\n for (const record of records.values(range)) {\n if (key !== undefined) {\n if (cmp(record.key, key) === -1) {\n continue;\n }\n }\n if (this._position !== undefined) {\n if (cmp(record.key, this._position) !== 1) {\n continue;\n }\n }\n if (this._range !== undefined) {\n if (!this._range.includes(record.key)) {\n continue;\n }\n }\n foundRecord = record;\n break;\n }\n } else if (this.direction === \"prev\") {\n const range = makeKeyRange(this._range, [], [key, this._position]);\n for (const record of records.values(range, \"prev\")) {\n const cmpResultKey = key !== undefined ? cmp(record.key, key) : undefined;\n const cmpResultPosition = this._position !== undefined ? cmp(record.key, this._position) : undefined;\n if (key !== undefined) {\n if (cmpResultKey === 1) {\n continue;\n }\n }\n if (primaryKey !== undefined) {\n if (cmpResultKey === 1) {\n continue;\n }\n const cmpResultPrimaryKey = cmp(record.value, primaryKey);\n if (cmpResultKey === 0 && cmpResultPrimaryKey === 1) {\n continue;\n }\n }\n if (this._position !== undefined && sourceIsObjectStore) {\n if (cmpResultPosition !== -1) {\n continue;\n }\n }\n if (this._position !== undefined && !sourceIsObjectStore) {\n if (cmpResultPosition === 1) {\n continue;\n }\n if (cmpResultPosition === 0 && cmp(record.value, this._objectStorePosition) !== -1) {\n continue;\n }\n }\n if (this._range !== undefined) {\n if (!this._range.includes(record.key)) {\n continue;\n }\n }\n foundRecord = record;\n break;\n }\n } else if (this.direction === \"prevunique\") {\n let tempRecord;\n const range = makeKeyRange(this._range, [], [key, this._position]);\n for (const record of records.values(range, \"prev\")) {\n if (key !== undefined) {\n if (cmp(record.key, key) === 1) {\n continue;\n }\n }\n if (this._position !== undefined) {\n if (cmp(record.key, this._position) !== -1) {\n continue;\n }\n }\n if (this._range !== undefined) {\n if (!this._range.includes(record.key)) {\n continue;\n }\n }\n tempRecord = record;\n break;\n }\n if (tempRecord) {\n foundRecord = records.get(tempRecord.key);\n }\n }\n let result;\n if (!foundRecord) {\n this._key = undefined;\n if (!sourceIsObjectStore) {\n this._objectStorePosition = undefined;\n }\n\n // \"this instanceof FDBCursorWithValue\" would be better and not require (this as any), but causes runtime\n // error due to circular dependency.\n if (!this._keyOnly && this.toString() === \"[object IDBCursorWithValue]\") {\n this.value = undefined;\n }\n result = null;\n } else {\n this._position = foundRecord.key;\n if (!sourceIsObjectStore) {\n this._objectStorePosition = foundRecord.value;\n }\n this._key = foundRecord.key;\n if (sourceIsObjectStore) {\n this._primaryKey = structuredClone(foundRecord.key);\n if (!this._keyOnly && this.toString() === \"[object IDBCursorWithValue]\") {\n this.value = structuredClone(foundRecord.value);\n }\n } else {\n this._primaryKey = structuredClone(foundRecord.value);\n if (!this._keyOnly && this.toString() === \"[object IDBCursorWithValue]\") {\n if (this.source instanceof FDBObjectStore) {\n // Can't use sourceIsObjectStore because TypeScript\n throw new Error(\"This should never happen\");\n }\n const value = this.source.objectStore._rawObjectStore.getValue(foundRecord.value);\n this.value = structuredClone(value);\n }\n }\n this._gotValue = true;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n result = this;\n }\n return result;\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBCursor-update-IDBRequest-any-value\n update(value) {\n if (value === undefined) {\n throw new TypeError();\n }\n const effectiveObjectStore = getEffectiveObjectStore(this);\n const effectiveKey = Object.hasOwn(this.source, \"_rawIndex\") ? this.primaryKey : this._position;\n const transaction = effectiveObjectStore.transaction;\n if (transaction._state !== \"active\") {\n throw new TransactionInactiveError();\n }\n if (transaction.mode === \"readonly\") {\n throw new ReadOnlyError();\n }\n if (effectiveObjectStore._rawObjectStore.deleted) {\n throw new InvalidStateError();\n }\n if (!(this.source instanceof FDBObjectStore) && this.source._rawIndex.deleted) {\n throw new InvalidStateError();\n }\n if (!this._gotValue || !Object.hasOwn(this, \"value\")) {\n throw new InvalidStateError();\n }\n const clone = cloneValueForInsertion(value, transaction);\n if (effectiveObjectStore.keyPath !== null) {\n let tempKey;\n try {\n tempKey = extractKey(effectiveObjectStore.keyPath, clone).key;\n } catch (err) {\n /* Handled immediately below */\n }\n if (cmp(tempKey, effectiveKey) !== 0) {\n throw new DataError();\n }\n }\n const record = {\n key: effectiveKey,\n value: clone\n };\n return transaction._execRequestAsync({\n operation: effectiveObjectStore._rawObjectStore.storeRecord.bind(effectiveObjectStore._rawObjectStore, record, false, transaction._rollbackLog),\n source: this\n });\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBCursor-advance-void-unsigned-long-count\n advance(count) {\n if (!Number.isInteger(count) || count <= 0) {\n throw new TypeError();\n }\n const effectiveObjectStore = getEffectiveObjectStore(this);\n const transaction = effectiveObjectStore.transaction;\n if (transaction._state !== \"active\") {\n throw new TransactionInactiveError();\n }\n if (effectiveObjectStore._rawObjectStore.deleted) {\n throw new InvalidStateError();\n }\n if (!(this.source instanceof FDBObjectStore) && this.source._rawIndex.deleted) {\n throw new InvalidStateError();\n }\n if (!this._gotValue) {\n throw new InvalidStateError();\n }\n if (this._request) {\n this._request.readyState = \"pending\";\n }\n transaction._execRequestAsync({\n operation: () => {\n let result;\n for (let i = 0; i < count; i++) {\n result = this._iterate();\n\n // Not sure why this is needed\n if (!result) {\n break;\n }\n }\n return result;\n },\n request: this._request,\n source: this.source\n });\n this._gotValue = false;\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBCursor-continue-void-any-key\n continue(key) {\n const effectiveObjectStore = getEffectiveObjectStore(this);\n const transaction = effectiveObjectStore.transaction;\n if (transaction._state !== \"active\") {\n throw new TransactionInactiveError();\n }\n if (effectiveObjectStore._rawObjectStore.deleted) {\n throw new InvalidStateError();\n }\n if (!(this.source instanceof FDBObjectStore) && this.source._rawIndex.deleted) {\n throw new InvalidStateError();\n }\n if (!this._gotValue) {\n throw new InvalidStateError();\n }\n if (key !== undefined) {\n key = valueToKey(key);\n const cmpResult = cmp(key, this._position);\n if (cmpResult <= 0 && (this.direction === \"next\" || this.direction === \"nextunique\") || cmpResult >= 0 && (this.direction === \"prev\" || this.direction === \"prevunique\")) {\n throw new DataError();\n }\n }\n if (this._request) {\n this._request.readyState = \"pending\";\n }\n transaction._execRequestAsync({\n operation: this._iterate.bind(this, key),\n request: this._request,\n source: this.source\n });\n this._gotValue = false;\n }\n\n // hthttps://w3c.github.io/IndexedDB/#dom-idbcursor-continueprimarykey\n continuePrimaryKey(key, primaryKey) {\n const effectiveObjectStore = getEffectiveObjectStore(this);\n const transaction = effectiveObjectStore.transaction;\n if (transaction._state !== \"active\") {\n throw new TransactionInactiveError();\n }\n if (effectiveObjectStore._rawObjectStore.deleted) {\n throw new InvalidStateError();\n }\n if (!(this.source instanceof FDBObjectStore) && this.source._rawIndex.deleted) {\n throw new InvalidStateError();\n }\n if (this.source instanceof FDBObjectStore || this.direction !== \"next\" && this.direction !== \"prev\") {\n throw new InvalidAccessError();\n }\n if (!this._gotValue) {\n throw new InvalidStateError();\n }\n\n // Not sure about this\n if (key === undefined || primaryKey === undefined) {\n throw new DataError();\n }\n key = valueToKey(key);\n const cmpResult = cmp(key, this._position);\n if (cmpResult === -1 && this.direction === \"next\" || cmpResult === 1 && this.direction === \"prev\") {\n throw new DataError();\n }\n const cmpResult2 = cmp(primaryKey, this._objectStorePosition);\n if (cmpResult === 0) {\n if (cmpResult2 <= 0 && this.direction === \"next\" || cmpResult2 >= 0 && this.direction === \"prev\") {\n throw new DataError();\n }\n }\n if (this._request) {\n this._request.readyState = \"pending\";\n }\n transaction._execRequestAsync({\n operation: this._iterate.bind(this, key, primaryKey),\n request: this._request,\n source: this.source\n });\n this._gotValue = false;\n }\n delete() {\n const effectiveObjectStore = getEffectiveObjectStore(this);\n const effectiveKey = Object.hasOwn(this.source, \"_rawIndex\") ? this.primaryKey : this._position;\n const transaction = effectiveObjectStore.transaction;\n if (transaction._state !== \"active\") {\n throw new TransactionInactiveError();\n }\n if (transaction.mode === \"readonly\") {\n throw new ReadOnlyError();\n }\n if (effectiveObjectStore._rawObjectStore.deleted) {\n throw new InvalidStateError();\n }\n if (!(this.source instanceof FDBObjectStore) && this.source._rawIndex.deleted) {\n throw new InvalidStateError();\n }\n if (!this._gotValue || !Object.hasOwn(this, \"value\")) {\n throw new InvalidStateError();\n }\n return transaction._execRequestAsync({\n operation: effectiveObjectStore._rawObjectStore.deleteRecord.bind(effectiveObjectStore._rawObjectStore, effectiveKey, transaction._rollbackLog),\n source: this\n });\n }\n get [Symbol.toStringTag]() {\n return \"IDBCursor\";\n }\n}\nexport default FDBCursor;","import FDBCursor from \"./FDBCursor.js\";\nclass FDBCursorWithValue extends FDBCursor {\n value = undefined;\n constructor(source, range, direction, request) {\n super(source, range, direction, request);\n }\n get [Symbol.toStringTag]() {\n return \"IDBCursorWithValue\";\n }\n}\nexport default FDBCursorWithValue;","import { InvalidStateError } from \"./errors.js\";\nconst stopped = (event, listener) => {\n return event.immediatePropagationStopped || event.eventPhase === event.CAPTURING_PHASE && listener.capture === false || event.eventPhase === event.BUBBLING_PHASE && listener.capture === true;\n};\n\n// http://www.w3.org/TR/dom/#concept-event-listener-invoke\nconst invokeEventListeners = (event, obj) => {\n event.currentTarget = obj;\n const errors = [];\n const invoke = callbackOrObject => {\n try {\n const callback = typeof callbackOrObject === \"function\" ? callbackOrObject : callbackOrObject.handleEvent;\n // @ts-expect-error EventCallback's types are not quite right here\n callback.call(event.currentTarget, event);\n } catch (err) {\n errors.push(err);\n }\n };\n\n // The callback might cause obj.listeners to mutate as we traverse it.\n // Take a copy of the array so that nothing sneaks in and we don't lose\n // our place.\n for (const listener of obj.listeners.slice()) {\n if (event.type !== listener.type || stopped(event, listener)) {\n continue;\n }\n invoke(listener.callback);\n }\n const typeToProp = {\n abort: \"onabort\",\n blocked: \"onblocked\",\n close: \"onclose\",\n complete: \"oncomplete\",\n error: \"onerror\",\n success: \"onsuccess\",\n upgradeneeded: \"onupgradeneeded\",\n versionchange: \"onversionchange\"\n };\n const prop = typeToProp[event.type];\n if (prop === undefined) {\n throw new Error(`Unknown event type: \"${event.type}\"`);\n }\n const callback = event.currentTarget[prop];\n if (callback) {\n const listener = {\n callback,\n capture: false,\n type: event.type\n };\n if (!stopped(event, listener)) {\n invoke(listener.callback);\n }\n }\n\n // we want to execute all listeners before deciding if we want to throw, because there could be an error thrown by\n // the first listener, but the second should still be invoked\n if (errors.length) {\n throw new AggregateError(errors);\n }\n};\nclass FakeEventTarget {\n listeners = [];\n\n // These will be overridden in individual subclasses and made not readonly\n\n addEventListener(type, callback, options) {\n const capture = !!(typeof options === \"object\" && options ? options.capture : options);\n this.listeners.push({\n callback,\n capture,\n type\n });\n }\n removeEventListener(type, callback, options) {\n const capture = !!(typeof options === \"object\" && options ? options.capture : options);\n const i = this.listeners.findIndex(listener => {\n return listener.type === type && listener.callback === callback && listener.capture === capture;\n });\n this.listeners.splice(i, 1);\n }\n\n // http://www.w3.org/TR/dom/#dispatching-events\n dispatchEvent(event) {\n if (event.dispatched || !event.initialized) {\n throw new InvalidStateError(\"The object is in an invalid state.\");\n }\n event.isTrusted = false;\n event.dispatched = true;\n event.target = this;\n // NOT SURE WHEN THIS SHOULD BE SET event.eventPath = [];\n\n event.eventPhase = event.CAPTURING_PHASE;\n for (const obj of event.eventPath) {\n if (!event.propagationStopped) {\n invokeEventListeners(event, obj);\n }\n }\n event.eventPhase = event.AT_TARGET;\n if (!event.propagationStopped) {\n invokeEventListeners(event, event.target);\n }\n if (event.bubbles) {\n event.eventPath.reverse();\n event.eventPhase = event.BUBBLING_PHASE;\n for (const obj of event.eventPath) {\n if (!event.propagationStopped) {\n invokeEventListeners(event, obj);\n }\n }\n }\n event.dispatched = false;\n event.eventPhase = event.NONE;\n event.currentTarget = null;\n if (event.canceled) {\n return false;\n }\n return true;\n }\n}\nexport default FakeEventTarget;","import { InvalidStateError } from \"./lib/errors.js\";\nimport FakeEventTarget from \"./lib/FakeEventTarget.js\";\nclass FDBRequest extends FakeEventTarget {\n _result = null;\n _error = null;\n source = null;\n transaction = null;\n readyState = \"pending\";\n onsuccess = null;\n onerror = null;\n get error() {\n if (this.readyState === \"pending\") {\n throw new InvalidStateError();\n }\n return this._error;\n }\n set error(value) {\n this._error = value;\n }\n get result() {\n if (this.readyState === \"pending\") {\n throw new InvalidStateError();\n }\n return this._result;\n }\n set result(value) {\n this._result = value;\n }\n get [Symbol.toStringTag]() {\n return \"IDBRequest\";\n }\n}\nexport default FDBRequest;","class FakeDOMStringList {\n constructor(...values) {\n this._values = values;\n for (let i = 0; i < values.length; i++) {\n this[i] = values[i];\n }\n }\n contains(value) {\n return this._values.includes(value);\n }\n item(i) {\n if (i < 0 || i >= this._values.length) {\n return null;\n }\n return this._values[i];\n }\n get length() {\n return this._values.length;\n }\n [Symbol.iterator]() {\n return this._values[Symbol.iterator]();\n }\n\n // Handled by proxy\n\n // Used internally, should not be used by others. I could maybe get rid of these and replace rather than mutate, but too lazy to check the spec.\n _push(...values) {\n for (let i = 0; i < values.length; i++) {\n this[this._values.length + i] = values[i];\n }\n this._values.push(...values);\n }\n _sort(...values) {\n this._values.sort(...values);\n for (let i = 0; i < this._values.length; i++) {\n this[i] = this._values[i];\n }\n return this;\n }\n}\nexport default FakeDOMStringList;","import FDBKeyRange from \"../FDBKeyRange.js\";\nimport { DataError } from \"./errors.js\";\nimport valueToKey from \"./valueToKey.js\";\n\n// http://w3c.github.io/IndexedDB/#convert-a-value-to-a-key-range\nconst valueToKeyRange = (value, nullDisallowedFlag = false) => {\n if (value instanceof FDBKeyRange) {\n return value;\n }\n if (value === null || value === undefined) {\n if (nullDisallowedFlag) {\n throw new DataError();\n }\n return new FDBKeyRange(undefined, undefined, false, false);\n }\n const key = valueToKey(value);\n return FDBKeyRange.only(key);\n};\nexport default valueToKeyRange;","// Keys provided as functions or arrays or objects need to be stringified\nconst convertKey = key => typeof key === 'object' && key ? key + '' : key;\n\n// https://www.w3.org/TR/IndexedDB/#dom-idbobjectstore-keypath\nexport function getKeyPath(keyPath) {\n // It's important to clone the Array here because of the WPT test:\n // \"Different instances are returned from different store instances.\"\n // Also note that the same instance must be returned across multiple gets\n return Array.isArray(keyPath) ? keyPath.map(convertKey) : convertKey(keyPath);\n}","import FDBKeyRange from \"../FDBKeyRange.js\";\nimport valueToKeyWithoutThrowing, { INVALID_TYPE } from \"./valueToKeyWithoutThrowing.js\";\n\n// https://www.w3.org/TR/IndexedDB/#is-a-potentially-valid-key-range\nconst isPotentiallyValidKeyRange = value => {\n // If value is a key range, return true.\n if (value instanceof FDBKeyRange) {\n return true;\n }\n\n // Let key be the result of converting a value to a key with value.\n const key = valueToKeyWithoutThrowing(value);\n\n // If key is \"invalid type\" return false.\n // Else return true.\n return key !== INVALID_TYPE;\n};\nexport default isPotentiallyValidKeyRange;","// https://heycam.github.io/webidl/#EnforceRange\n\nconst enforceRange = (num, type) => {\n const min = 0;\n const max = type === \"unsigned long\" ? 4294967295 : 9007199254740991;\n if (isNaN(num) || num < min || num > max) {\n throw new TypeError();\n }\n if (num >= 0) {\n return Math.floor(num);\n }\n};\nexport default enforceRange;","import isPotentiallyValidKeyRange from \"./isPotentiallyValidKeyRange.js\";\nimport enforceRange from \"./enforceRange.js\";\n// https://www.w3.org/TR/IndexedDB/#create-request-to-retrieve-multiple-items\nconst extractGetAllOptions = (queryOrOptions, count, numArguments) => {\n let query;\n let direction;\n if (queryOrOptions === undefined || queryOrOptions === null || isPotentiallyValidKeyRange(queryOrOptions)) {\n // queryOrOptions is FDBKeyRange | Key | null | undefined\n query = queryOrOptions;\n if (numArguments > 1 && count !== undefined) {\n count = enforceRange(count, \"unsigned long\");\n }\n } else {\n // queryOrOptions is FDBGetAllOptions\n const getAllOptions = queryOrOptions;\n if (getAllOptions.query !== undefined) {\n query = getAllOptions.query;\n }\n if (getAllOptions.count !== undefined) {\n count = enforceRange(getAllOptions.count, \"unsigned long\");\n }\n if (getAllOptions.direction !== undefined) {\n direction = getAllOptions.direction;\n }\n }\n return {\n query,\n count,\n direction\n };\n};\nexport default extractGetAllOptions;","import FDBCursor from \"./FDBCursor.js\";\nimport FDBCursorWithValue from \"./FDBCursorWithValue.js\";\nimport FDBKeyRange from \"./FDBKeyRange.js\";\nimport FDBRequest from \"./FDBRequest.js\";\nimport { ConstraintError, InvalidStateError, TransactionInactiveError } from \"./lib/errors.js\";\nimport FakeDOMStringList from \"./lib/FakeDOMStringList.js\";\nimport valueToKey from \"./lib/valueToKey.js\";\nimport valueToKeyRange from \"./lib/valueToKeyRange.js\";\nimport { getKeyPath } from \"./lib/getKeyPath.js\";\nimport extractGetAllOptions from \"./lib/extractGetAllOptions.js\";\nimport enforceRange from \"./lib/enforceRange.js\";\nconst confirmActiveTransaction = index => {\n if (index._rawIndex.deleted || index.objectStore._rawObjectStore.deleted) {\n throw new InvalidStateError();\n }\n if (index.objectStore.transaction._state !== \"active\") {\n throw new TransactionInactiveError();\n }\n};\n\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#idl-def-IDBIndex\nclass FDBIndex {\n constructor(objectStore, rawIndex) {\n this._rawIndex = rawIndex;\n this._name = rawIndex.name;\n this.objectStore = objectStore;\n this.keyPath = getKeyPath(rawIndex.keyPath);\n this.multiEntry = rawIndex.multiEntry;\n this.unique = rawIndex.unique;\n }\n get name() {\n return this._name;\n }\n\n // https://w3c.github.io/IndexedDB/#dom-idbindex-name\n set name(name) {\n const transaction = this.objectStore.transaction;\n if (!transaction.db._runningVersionchangeTransaction) {\n throw transaction._state === \"active\" ? new InvalidStateError() : new TransactionInactiveError();\n }\n if (transaction._state !== \"active\") {\n throw new TransactionInactiveError();\n }\n if (this._rawIndex.deleted || this.objectStore._rawObjectStore.deleted) {\n throw new InvalidStateError();\n }\n name = String(name);\n if (name === this._name) {\n return;\n }\n if (this.objectStore.indexNames.contains(name)) {\n throw new ConstraintError();\n }\n const oldName = this._name;\n const oldIndexNames = [...this.objectStore.indexNames];\n this._name = name;\n this._rawIndex.name = name;\n this.objectStore._indexesCache.delete(oldName);\n this.objectStore._indexesCache.set(name, this);\n this.objectStore._rawObjectStore.rawIndexes.delete(oldName);\n this.objectStore._rawObjectStore.rawIndexes.set(name, this._rawIndex);\n this.objectStore.indexNames = new FakeDOMStringList(...Array.from(this.objectStore._rawObjectStore.rawIndexes.keys()).filter(indexName => {\n const index = this.objectStore._rawObjectStore.rawIndexes.get(indexName);\n return index && !index.deleted;\n }).sort());\n\n // https://www.w3.org/TR/IndexedDB/#abort-an-upgrade-transaction - \"If handle’s index was not newly created during transaction, set handle’s name to its index’s name.\"\n if (!this.objectStore.transaction._createdIndexes.has(this._rawIndex)) {\n transaction._rollbackLog.push(() => {\n this._name = oldName;\n this._rawIndex.name = oldName;\n this.objectStore._indexesCache.delete(name);\n this.objectStore._indexesCache.set(oldName, this);\n this.objectStore._rawObjectStore.rawIndexes.delete(name);\n this.objectStore._rawObjectStore.rawIndexes.set(oldName, this._rawIndex);\n this.objectStore.indexNames = new FakeDOMStringList(...oldIndexNames);\n });\n }\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBIndex-openCursor-IDBRequest-any-range-IDBCursorDirection-direction\n openCursor(range, direction) {\n confirmActiveTransaction(this);\n if (range === null) {\n range = undefined;\n }\n if (range !== undefined && !(range instanceof FDBKeyRange)) {\n range = FDBKeyRange.only(valueToKey(range));\n }\n const request = new FDBRequest();\n request.source = this;\n request.transaction = this.objectStore.transaction;\n const cursor = new FDBCursorWithValue(this, range, direction, request);\n return this.objectStore.transaction._execRequestAsync({\n operation: cursor._iterate.bind(cursor),\n request,\n source: this\n });\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBIndex-openKeyCursor-IDBRequest-any-range-IDBCursorDirection-direction\n openKeyCursor(range, direction) {\n confirmActiveTransaction(this);\n if (range === null) {\n range = undefined;\n }\n if (range !== undefined && !(range instanceof FDBKeyRange)) {\n range = FDBKeyRange.only(valueToKey(range));\n }\n const request = new FDBRequest();\n request.source = this;\n request.transaction = this.objectStore.transaction;\n const cursor = new FDBCursor(this, range, direction, request, true);\n return this.objectStore.transaction._execRequestAsync({\n operation: cursor._iterate.bind(cursor),\n request,\n source: this\n });\n }\n get(key) {\n confirmActiveTransaction(this);\n if (!(key instanceof FDBKeyRange)) {\n key = valueToKey(key);\n }\n return this.objectStore.transaction._execRequestAsync({\n operation: this._rawIndex.getValue.bind(this._rawIndex, key),\n source: this\n });\n }\n\n // http://w3c.github.io/IndexedDB/#dom-idbindex-getall\n getAll(queryOrOptions, count) {\n const options = extractGetAllOptions(queryOrOptions, count, arguments.length);\n confirmActiveTransaction(this);\n const range = valueToKeyRange(options.query);\n return this.objectStore.transaction._execRequestAsync({\n operation: this._rawIndex.getAllValues.bind(this._rawIndex, range, options.count, options.direction),\n source: this\n });\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBIndex-getKey-IDBRequest-any-key\n getKey(key) {\n confirmActiveTransaction(this);\n if (!(key instanceof FDBKeyRange)) {\n key = valueToKey(key);\n }\n return this.objectStore.transaction._execRequestAsync({\n operation: this._rawIndex.getKey.bind(this._rawIndex, key),\n source: this\n });\n }\n\n // http://w3c.github.io/IndexedDB/#dom-idbindex-getallkeys\n getAllKeys(queryOrOptions, count) {\n const options = extractGetAllOptions(queryOrOptions, count, arguments.length);\n confirmActiveTransaction(this);\n const range = valueToKeyRange(options.query);\n return this.objectStore.transaction._execRequestAsync({\n operation: this._rawIndex.getAllKeys.bind(this._rawIndex, range, options.count, options.direction),\n source: this\n });\n }\n\n // https://www.w3.org/TR/IndexedDB/#dom-idbobjectstore-getallrecords\n getAllRecords(options) {\n let query;\n let count;\n let direction;\n if (options !== undefined) {\n if (options.query !== undefined) {\n query = options.query;\n }\n if (options.count !== undefined) {\n count = enforceRange(options.count, \"unsigned long\");\n }\n if (options.direction !== undefined) {\n direction = options.direction;\n }\n }\n confirmActiveTransaction(this);\n const range = valueToKeyRange(query);\n return this.objectStore.transaction._execRequestAsync({\n operation: this._rawIndex.getAllRecords.bind(this._rawIndex, range, count, direction),\n source: this\n });\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBIndex-count-IDBRequest-any-key\n count(key) {\n confirmActiveTransaction(this);\n if (key === null) {\n key = undefined;\n }\n if (key !== undefined && !(key instanceof FDBKeyRange)) {\n key = FDBKeyRange.only(valueToKey(key));\n }\n return this.objectStore.transaction._execRequestAsync({\n operation: () => {\n return this._rawIndex.count(key);\n },\n source: this\n });\n }\n get [Symbol.toStringTag]() {\n return \"IDBIndex\";\n }\n}\nexport default FDBIndex;","// http://w3c.github.io/IndexedDB/#check-that-a-key-could-be-injected-into-a-value\nconst canInjectKey = (keyPath, value) => {\n if (Array.isArray(keyPath)) {\n throw new Error(\"The key paths used in this section are always strings and never sequences, since it is not possible to create a object store which has a key generator and also has a key path that is a sequence.\");\n }\n const identifiers = keyPath.split(\".\");\n if (identifiers.length === 0) {\n throw new Error(\"Assert: identifiers is not empty\");\n }\n identifiers.pop();\n for (const identifier of identifiers) {\n if (typeof value !== \"object\" && !Array.isArray(value)) {\n return false;\n }\n const hop = Object.hasOwn(value, identifier);\n if (!hop) {\n return true;\n }\n value = value[identifier];\n }\n return typeof value === \"object\" || Array.isArray(value);\n};\nexport default canInjectKey;","class FDBRecord {\n constructor(key, primaryKey, value) {\n this._key = key;\n this._primaryKey = primaryKey;\n this._value = value;\n }\n get key() {\n return this._key;\n }\n set key(_) {\n /* for babel */\n }\n get primaryKey() {\n return this._primaryKey;\n }\n set primaryKey(_) {\n /* for babel */\n }\n get value() {\n return this._value;\n }\n set value(_) {\n /* for babel */\n }\n get [Symbol.toStringTag]() {\n return \"IDBRecord\";\n }\n}\nexport default FDBRecord;","import FDBKeyRange from \"../FDBKeyRange.js\";\nimport cmp from \"./cmp.js\";\nimport { ConstraintError } from \"./errors.js\";\n// what fraction of the total number of nodes are allowed to be deleted tombstones?\nconst MAX_TOMBSTONE_FACTOR = 2 / 3;\nconst EVERYTHING_KEY_RANGE = new FDBKeyRange(undefined, undefined, false, false);\n/**\n * Simple red-black binary tree with some aspects of a scapegoat tree. The main goal here is simplicity of\n * implementation, tailored to the needs of IndexedDB.\n *\n * Basically this implements a [red-black tree][1] for insertions, but uses the much simpler [scapegoat tree][2]\n * strategy for deletions. Deletions are a simple matter of rebuilding the tree from scratch if more than 2/3 of the\n * tree is full of deleted (tombstone) markers.\n *\n * [1]: https://en.wikipedia.org/wiki/Red%E2%80%93black_tree\n * [2]: https://en.wikipedia.org/wiki/Scapegoat_tree\n */\nexport default class BinarySearchTree {\n _numTombstones = 0;\n _numNodes = 0;\n\n /**\n *\n * @param keysAreUnique - whether keys can be unique, and thus whether we cn skip checking `record.value` when\n * comparing. This is basically used to distinguish ObjectStores (where the value is the entire object, not used\n * as a key) from non-unique Indexes (where both the key and the value are meaningful keys used for sorting)\n */\n constructor(keysAreUnique) {\n this._keysAreUnique = !!keysAreUnique;\n }\n size() {\n return this._numNodes - this._numTombstones;\n }\n get(record) {\n return this._getByComparator(this._root, otherRecord => this._compare(record, otherRecord));\n }\n contains(record) {\n return !!this.get(record);\n }\n _compare(a, b) {\n const keyComparison = cmp(a.key, b.key);\n if (keyComparison !== 0) {\n return keyComparison;\n }\n // if keys are unique, then we can (and must) avoid comparing the values, since they may be non-comparable\n // (e.g. in the case of an ObjectStore, they are record objects)\n return this._keysAreUnique ? 0 : cmp(a.value, b.value);\n }\n _getByComparator(node, comparator) {\n let current = node;\n while (current) {\n const comparison = comparator(current.record);\n if (comparison < 0) {\n current = current.left;\n } else if (comparison > 0) {\n current = current.right;\n } else {\n return current.record;\n }\n }\n }\n\n /**\n * Put a new record, and return the overwritten record if an overwrite occurred.\n * @param record\n * @param noOverwrite - throw a ConstraintError in case of overwrite\n */\n put(record, noOverwrite = false) {\n if (!this._root) {\n this._root = {\n record,\n left: undefined,\n right: undefined,\n parent: undefined,\n deleted: false,\n // the root is always black in a red-black tree\n red: false\n };\n this._numNodes++;\n return;\n }\n return this._put(this._root, record, noOverwrite);\n }\n _put(node, record, noOverwrite) {\n const comparison = this._compare(record, node.record);\n if (comparison < 0) {\n if (node.left) {\n return this._put(node.left, record, noOverwrite);\n } else {\n node.left = {\n record,\n left: undefined,\n right: undefined,\n parent: node,\n deleted: false,\n red: true\n };\n this._onNewNodeInserted(node.left);\n }\n } else if (comparison > 0) {\n if (node.right) {\n return this._put(node.right, record, noOverwrite);\n } else {\n node.right = {\n record,\n left: undefined,\n right: undefined,\n parent: node,\n deleted: false,\n red: true\n };\n this._onNewNodeInserted(node.right);\n }\n } else if (node.deleted) {\n // undelete\n node.deleted = false;\n node.record = record;\n this._numTombstones--;\n } else if (noOverwrite) {\n // replace not allowed in case of noOverwrite\n throw new ConstraintError();\n } else {\n // replace, don't add, so no need to increment. return the overwritten record\n const overwrittenRecord = node.record;\n node.record = record;\n return overwrittenRecord;\n }\n }\n delete(record) {\n if (!this._root) {\n return;\n }\n this._delete(this._root, record);\n if (this._numTombstones > this._numNodes * MAX_TOMBSTONE_FACTOR) {\n // to keep the implementation simple, and because most users of fake-indexeddb are not going to be deleting\n // a lot of nodes, just rebuild the whole tree (defragment) if the tree is too full of tombstones,\n // as inspired by the scapegoat tree: https://en.wikipedia.org/wiki/Scapegoat_tree#Deletion\n const records = [...this.getAllRecords()];\n this._root = this._rebuild(records, undefined, false);\n this._numNodes = records.length;\n this._numTombstones = 0;\n }\n }\n _delete(node, record) {\n if (!node) {\n return;\n }\n const comparison = this._compare(record, node.record);\n if (comparison < 0) {\n this._delete(node.left, record);\n } else if (comparison > 0) {\n this._delete(node.right, record);\n } else if (!node.deleted) {\n this._numTombstones++;\n node.deleted = true;\n }\n }\n *getAllRecords(descending = false) {\n yield* this.getRecords(EVERYTHING_KEY_RANGE, descending);\n }\n *getRecords(keyRange, descending = false) {\n yield* this._getRecordsForNode(this._root, keyRange, descending);\n }\n *_getRecordsForNode(node, keyRange, descending = false) {\n if (!node) {\n return;\n }\n yield* this._findRecords(node, keyRange, descending);\n }\n *_findRecords(node, keyRange, descending = false) {\n const {\n lower,\n upper,\n lowerOpen,\n upperOpen\n } = keyRange;\n const {\n record: {\n key\n }\n } = node;\n const lowerComparison = lower === undefined ? -1 : cmp(lower, key);\n const upperComparison = upper === undefined ? 1 : cmp(upper, key);\n\n // if keys are non-unique then we need to go left/right even for equality\n // else we can just do LT/GT rather than LTE/GTE as a slight optimization\n const moreLeft = this._keysAreUnique ? lowerComparison < 0 : lowerComparison <= 0;\n const moreRight = this._keysAreUnique ? upperComparison > 0 : upperComparison >= 0;\n\n // in descending mode we start with rightmost nodes, else leftmost\n const moreStart = descending ? moreRight : moreLeft;\n const moreEnd = descending ? moreLeft : moreRight;\n const start = descending ? \"right\" : \"left\";\n const end = descending ? \"left\" : \"right\";\n\n // does the current record actually match the key range?\n const lowerMatches = lowerOpen ? lowerComparison < 0 : lowerComparison <= 0;\n const upperMatches = upperOpen ? upperComparison > 0 : upperComparison >= 0;\n if (moreStart && node[start]) {\n yield* this._findRecords(node[start], keyRange, descending);\n }\n if (lowerMatches && upperMatches && !node.deleted) {\n yield node.record;\n }\n if (moreEnd && node[end]) {\n yield* this._findRecords(node[end], keyRange, descending);\n }\n }\n _onNewNodeInserted(newNode) {\n this._numNodes++;\n this._rebalanceTree(newNode);\n }\n\n // based on https://en.wikipedia.org/wiki/Red%E2%80%93black_tree#Insertion\n _rebalanceTree(node) {\n let parent = node.parent;\n do {\n // case 1 - no red/black violation\n if (!parent.red) {\n return;\n }\n const grandparent = parent.parent;\n if (!grandparent) {\n // case #4 - parent is the red root, node is also red, so parent goes black\n parent.red = false;\n return;\n }\n const parentIsRightChild = parent === grandparent.right;\n const uncle = parentIsRightChild ? grandparent.left : grandparent.right;\n if (!uncle || !uncle.red) {\n if (node === (parentIsRightChild ? parent.left : parent.right)) {\n // case #5 - parent is red but uncle is black\n this._rotateSubtree(parent, parentIsRightChild);\n node = parent;\n parent = parentIsRightChild ? grandparent.right : grandparent.left;\n }\n\n // case #6 - node is \"outer\" grandchild of grandparent\n this._rotateSubtree(grandparent, !parentIsRightChild);\n parent.red = false;\n grandparent.red = true;\n return;\n }\n\n // case #2 - parent and uncle are both red, so both of them go black and grandparent goes red\n parent.red = false;\n uncle.red = false;\n grandparent.red = true;\n node = grandparent;\n } while (node.parent ? parent = node.parent : false);\n\n // case #3 - current node is the root, all constraints satisfied\n }\n\n // based on https://en.wikipedia.org/wiki/Red%E2%80%93black_tree#Implementation\n _rotateSubtree(node, right) {\n const parent = node.parent;\n const newRoot = right ? node.left : node.right; // opposite direction\n const newChild = right ? newRoot.right : newRoot.left;\n node[right ? \"left\" : \"right\"] = newChild;\n if (newChild) {\n newChild.parent = node;\n }\n newRoot[right ? \"right\" : \"left\"] = node;\n newRoot.parent = parent;\n node.parent = newRoot;\n if (parent) {\n parent[node === parent.right ? \"right\" : \"left\"] = newRoot;\n } else {\n this._root = newRoot;\n }\n return newRoot;\n }\n\n // rebuild the whole tree from scratch, used to avoid too many deletion tombstones accumulating\n _rebuild(records, parent, red) {\n const {\n length\n } = records;\n if (!length) {\n return undefined;\n }\n const mid = length >>> 1; // like Math.floor(records.length / 2) but fast\n\n const node = {\n record: records[mid],\n left: undefined,\n right: undefined,\n parent,\n deleted: false,\n red\n };\n const left = this._rebuild(records.slice(0, mid), node, !red);\n const right = this._rebuild(records.slice(mid + 1), node, !red);\n node.left = left;\n node.right = right;\n return node;\n }\n}","import FDBKeyRange from \"../FDBKeyRange.js\";\nimport cmp from \"./cmp.js\";\nimport BinarySearchTree from \"./binarySearchTree.js\";\nclass RecordStore {\n constructor(keysAreUnique) {\n this.keysAreUnique = keysAreUnique;\n this.records = new BinarySearchTree(this.keysAreUnique);\n }\n get(key) {\n const range = key instanceof FDBKeyRange ? key : FDBKeyRange.only(key);\n return this.records.getRecords(range).next().value;\n }\n\n /**\n * Put a new record, and return the overwritten record if an overwrite occurred.\n * @param newRecord\n * @param noOverwrite - throw a ConstraintError in case of overwrite\n */\n put(newRecord, noOverwrite = false) {\n return this.records.put(newRecord, noOverwrite);\n }\n delete(key) {\n const range = key instanceof FDBKeyRange ? key : FDBKeyRange.only(key);\n const deletedRecords = [...this.records.getRecords(range)];\n for (const record of deletedRecords) {\n this.records.delete(record);\n }\n return deletedRecords;\n }\n deleteByValue(key) {\n const range = key instanceof FDBKeyRange ? key : FDBKeyRange.only(key);\n const deletedRecords = [];\n for (const record of this.records.getAllRecords()) {\n if (range.includes(record.value)) {\n this.records.delete(record);\n deletedRecords.push(record);\n }\n }\n return deletedRecords;\n }\n clear() {\n const deletedRecords = [...this.records.getAllRecords()];\n this.records = new BinarySearchTree(this.keysAreUnique);\n return deletedRecords;\n }\n values(range, direction = \"next\") {\n const descending = direction === \"prev\" || direction === \"prevunique\";\n const records = range ? this.records.getRecords(range, descending) : this.records.getAllRecords(descending);\n return {\n [Symbol.iterator]: () => {\n const next = () => {\n return records.next();\n };\n if (direction === \"next\" || direction === \"prev\") {\n return {\n next\n };\n }\n\n // For nextunique/prevunique, return an iterator that skips seen values\n // Note that we must return the _lowest_ value regardless of direction:\n // > Iterating with \"prevunique\" visits the same records that \"nextunique\"\n // > visits, but in reverse order.\n // https://w3c.github.io/IndexedDB/#dom-idbcursordirection-prevunique\n if (direction === \"nextunique\") {\n let previousValue = undefined;\n return {\n next: () => {\n let current = next();\n // for nextunique, continue if we already emitted the lowest unique value\n while (!current.done && previousValue !== undefined && cmp(previousValue.key, current.value.key) === 0) {\n current = next();\n }\n previousValue = current.value;\n return current;\n }\n };\n }\n\n // prevunique is a bit more complex due to needing to check the next value, which\n // invokes the iterable, so we need to keep a buffer of one \"lookahead\" result\n let current = next();\n let nextResult = next();\n return {\n next: () => {\n while (!nextResult.done && cmp(current.value.key, nextResult.value.key) === 0) {\n // note we return the _lowest_ possible value, hence set the current\n current = nextResult;\n nextResult = next();\n }\n const result = current;\n current = nextResult;\n nextResult = next();\n return result;\n }\n };\n }\n };\n }\n size() {\n return this.records.size();\n }\n}\nexport default RecordStore;","import FDBRecord from \"../FDBRecord.js\";\nimport { ConstraintError } from \"./errors.js\";\nimport extractKey from \"./extractKey.js\";\nimport RecordStore from \"./RecordStore.js\";\nimport valueToKey from \"./valueToKey.js\";\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-index\nclass Index {\n deleted = false;\n // Initialized should be used to decide whether to throw an error or abort the versionchange transaction when there is a\n // constraint\n initialized = false;\n constructor(rawObjectStore, name, keyPath, multiEntry, unique) {\n this.rawObjectStore = rawObjectStore;\n this.name = name;\n this.keyPath = keyPath;\n this.multiEntry = multiEntry;\n this.unique = unique;\n this.records = new RecordStore(unique);\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-retrieving-a-value-from-an-index\n getKey(key) {\n const record = this.records.get(key);\n return record !== undefined ? record.value : undefined;\n }\n\n // http://w3c.github.io/IndexedDB/#retrieve-multiple-referenced-values-from-an-index\n getAllKeys(range, count, direction) {\n if (count === undefined || count === 0) {\n count = Infinity;\n }\n const records = [];\n for (const record of this.records.values(range, direction)) {\n records.push(structuredClone(record.value));\n if (records.length >= count) {\n break;\n }\n }\n return records;\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#index-referenced-value-retrieval-operation\n getValue(key) {\n const record = this.records.get(key);\n return record !== undefined ? this.rawObjectStore.getValue(record.value) : undefined;\n }\n\n // http://w3c.github.io/IndexedDB/#retrieve-multiple-referenced-values-from-an-index\n getAllValues(range, count, direction) {\n if (count === undefined || count === 0) {\n count = Infinity;\n }\n const records = [];\n for (const record of this.records.values(range, direction)) {\n records.push(this.rawObjectStore.getValue(record.value));\n if (records.length >= count) {\n break;\n }\n }\n return records;\n }\n\n // https://www.w3.org/TR/IndexedDB/#dom-idbindex-getallrecords\n getAllRecords(range, count, direction) {\n if (count === undefined || count === 0) {\n count = Infinity;\n }\n const records = [];\n for (const record of this.records.values(range, direction)) {\n records.push(new FDBRecord(structuredClone(record.key), structuredClone(this.rawObjectStore.getKey(record.value)), this.rawObjectStore.getValue(record.value)));\n if (records.length >= count) {\n break;\n }\n }\n return records;\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-storing-a-record-into-an-object-store (step 7)\n storeRecord(newRecord) {\n let indexKey;\n try {\n indexKey = extractKey(this.keyPath, newRecord.value).key;\n } catch (err) {\n if (err.name === \"DataError\") {\n // Invalid key is not an actual error, just means we do not store an entry in this index\n return;\n }\n throw err;\n }\n if (!this.multiEntry || !Array.isArray(indexKey)) {\n try {\n valueToKey(indexKey);\n } catch (e) {\n return;\n }\n } else {\n // remove any elements from index key that are not valid keys and remove any duplicate elements from index\n // key such that only one instance of the duplicate value remains.\n const keep = [];\n for (const part of indexKey) {\n if (keep.indexOf(part) < 0) {\n try {\n keep.push(valueToKey(part));\n } catch (err) {\n /* Do nothing */\n }\n }\n }\n indexKey = keep;\n }\n if (!this.multiEntry || !Array.isArray(indexKey)) {\n if (this.unique) {\n const existingRecord = this.records.get(indexKey);\n if (existingRecord) {\n throw new ConstraintError();\n }\n }\n } else {\n if (this.unique) {\n for (const individualIndexKey of indexKey) {\n const existingRecord = this.records.get(individualIndexKey);\n if (existingRecord) {\n throw new ConstraintError();\n }\n }\n }\n }\n if (!this.multiEntry || !Array.isArray(indexKey)) {\n this.records.put({\n key: indexKey,\n value: newRecord.key\n });\n } else {\n for (const individualIndexKey of indexKey) {\n this.records.put({\n key: individualIndexKey,\n value: newRecord.key\n });\n }\n }\n }\n initialize(transaction) {\n if (this.initialized) {\n throw new Error(\"Index already initialized\");\n }\n transaction._execRequestAsync({\n operation: () => {\n try {\n // Create index based on current value of objectstore\n for (const record of this.rawObjectStore.records.values()) {\n this.storeRecord(record);\n }\n this.initialized = true;\n } catch (err) {\n // console.error(err);\n transaction._abort(err.name);\n }\n },\n source: null\n });\n }\n count(range) {\n let count = 0;\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n for (const record of this.records.values(range)) {\n count += 1;\n }\n return count;\n }\n}\nexport default Index;","import { SyntaxError } from \"./errors.js\";\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-valid-key-path\nconst validateKeyPath = (keyPath, parent) => {\n // This doesn't make sense to me based on the spec, but it is needed to pass the W3C KeyPath tests (see same\n // comment in extractKey)\n if (keyPath !== undefined && keyPath !== null && typeof keyPath !== \"string\" && keyPath.toString && (parent === \"array\" || !Array.isArray(keyPath))) {\n keyPath = keyPath.toString();\n }\n if (typeof keyPath === \"string\") {\n if (keyPath === \"\" && parent !== \"string\") {\n return;\n }\n try {\n // https://mathiasbynens.be/demo/javascript-identifier-regex for ECMAScript 5.1 / Unicode v7.0.0, with\n // reserved words at beginning removed\n const validIdentifierRegex =\n // eslint-disable-next-line no-misleading-character-class\n /^(?:[$A-Z_a-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0-\\u08B2\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC])(?:[$0-9A-Z_a-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u0483-\\u0487\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0610-\\u061A\\u0620-\\u0669\\u066E-\\u06D3\\u06D5-\\u06DC\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF\\u0710-\\u074A\\u074D-\\u07B1\\u07C0-\\u07F5\\u07FA\\u0800-\\u082D\\u0840-\\u085B\\u08A0-\\u08B2\\u08E4-\\u0963\\u0966-\\u096F\\u0971-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09F1\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C00-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58\\u0C59\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C81-\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D01-\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D57\\u0D60-\\u0D63\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB9\\u0EBB-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F84\\u0F86-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u135F\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17D3\\u17D7\\u17DC\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19D9\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1AB0-\\u1ABD\\u1B00-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1BF3\\u1C00-\\u1C37\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1CD0-\\u1CD2\\u1CD4-\\u1CF6\\u1CF8\\u1CF9\\u1D00-\\u1DF5\\u1DFC-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u200C\\u200D\\u203F\\u2040\\u2054\\u2071\\u207F\\u2090-\\u209C\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D7F-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u2E2F\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099\\u309A\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66F\\uA674-\\uA67D\\uA67F-\\uA69D\\uA69F-\\uA6F1\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA827\\uA840-\\uA873\\uA880-\\uA8C4\\uA8D0-\\uA8D9\\uA8E0-\\uA8F7\\uA8FB\\uA900-\\uA92D\\uA930-\\uA953\\uA960-\\uA97C\\uA980-\\uA9C0\\uA9CF-\\uA9D9\\uA9E0-\\uA9FE\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A-\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEF\\uAAF2-\\uAAF6\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE00-\\uFE0F\\uFE20-\\uFE2D\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF3F\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC])*$/;\n if (keyPath.length >= 1 && validIdentifierRegex.test(keyPath)) {\n return;\n }\n } catch (err) {\n throw new SyntaxError(err.message);\n }\n if (keyPath.indexOf(\" \") >= 0) {\n throw new SyntaxError(\"The keypath argument contains an invalid key path (no spaces allowed).\");\n }\n }\n if (Array.isArray(keyPath) && keyPath.length > 0) {\n if (parent) {\n // No nested arrays\n throw new SyntaxError(\"The keypath argument contains an invalid key path (nested arrays).\");\n }\n for (const part of keyPath) {\n validateKeyPath(part, \"array\");\n }\n return;\n } else if (typeof keyPath === \"string\" && keyPath.indexOf(\".\") >= 0) {\n keyPath = keyPath.split(\".\");\n for (const part of keyPath) {\n validateKeyPath(part, \"string\");\n }\n return;\n }\n throw new SyntaxError();\n};\nexport default validateKeyPath;","import FDBCursor from \"./FDBCursor.js\";\nimport FDBCursorWithValue from \"./FDBCursorWithValue.js\";\nimport FDBIndex from \"./FDBIndex.js\";\nimport FDBKeyRange from \"./FDBKeyRange.js\";\nimport FDBRequest from \"./FDBRequest.js\";\nimport canInjectKey from \"./lib/canInjectKey.js\";\nimport { ConstraintError, DataError, InvalidAccessError, InvalidStateError, NotFoundError, ReadOnlyError, TransactionInactiveError } from \"./lib/errors.js\";\nimport extractKey from \"./lib/extractKey.js\";\nimport FakeDOMStringList from \"./lib/FakeDOMStringList.js\";\nimport Index from \"./lib/Index.js\";\nimport validateKeyPath from \"./lib/validateKeyPath.js\";\nimport valueToKey from \"./lib/valueToKey.js\";\nimport valueToKeyRange from \"./lib/valueToKeyRange.js\";\nimport { getKeyPath } from \"./lib/getKeyPath.js\";\nimport extractGetAllOptions from \"./lib/extractGetAllOptions.js\";\nimport enforceRange from \"./lib/enforceRange.js\";\nimport { cloneValueForInsertion } from \"./lib/cloneValueForInsertion.js\";\nconst confirmActiveTransaction = objectStore => {\n if (objectStore._rawObjectStore.deleted) {\n throw new InvalidStateError();\n }\n if (objectStore.transaction._state !== \"active\") {\n throw new TransactionInactiveError();\n }\n};\nconst buildRecordAddPut = (objectStore, value, key) => {\n confirmActiveTransaction(objectStore);\n if (objectStore.transaction.mode === \"readonly\") {\n throw new ReadOnlyError();\n }\n if (objectStore.keyPath !== null) {\n if (key !== undefined) {\n throw new DataError();\n }\n }\n const clone = cloneValueForInsertion(value, objectStore.transaction);\n if (objectStore.keyPath !== null) {\n const tempKey = extractKey(objectStore.keyPath, clone);\n if (tempKey.type === \"found\") {\n valueToKey(tempKey.key);\n } else {\n if (!objectStore._rawObjectStore.keyGenerator) {\n throw new DataError();\n } else if (!canInjectKey(objectStore.keyPath, clone)) {\n throw new DataError();\n }\n }\n }\n if (objectStore.keyPath === null && objectStore._rawObjectStore.keyGenerator === null && key === undefined) {\n throw new DataError();\n }\n if (key !== undefined) {\n key = valueToKey(key);\n }\n return {\n key,\n value: clone\n };\n};\n\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#object-store\nclass FDBObjectStore {\n _indexesCache = new Map();\n constructor(transaction, rawObjectStore) {\n this._rawObjectStore = rawObjectStore;\n this._name = rawObjectStore.name;\n this.keyPath = getKeyPath(rawObjectStore.keyPath);\n this.autoIncrement = rawObjectStore.autoIncrement;\n this.transaction = transaction;\n this.indexNames = new FakeDOMStringList(...Array.from(rawObjectStore.rawIndexes.keys()).sort());\n }\n get name() {\n return this._name;\n }\n\n // http://w3c.github.io/IndexedDB/#dom-idbobjectstore-name\n set name(name) {\n const transaction = this.transaction;\n if (!transaction.db._runningVersionchangeTransaction) {\n throw transaction._state === \"active\" ? new InvalidStateError() : new TransactionInactiveError();\n }\n confirmActiveTransaction(this);\n name = String(name);\n if (name === this._name) {\n return;\n }\n if (this._rawObjectStore.rawDatabase.rawObjectStores.has(name)) {\n throw new ConstraintError();\n }\n const oldName = this._name;\n const oldObjectStoreNames = [...transaction.db.objectStoreNames];\n this._name = name;\n this._rawObjectStore.name = name;\n this.transaction._objectStoresCache.delete(oldName);\n this.transaction._objectStoresCache.set(name, this);\n this._rawObjectStore.rawDatabase.rawObjectStores.delete(oldName);\n this._rawObjectStore.rawDatabase.rawObjectStores.set(name, this._rawObjectStore);\n transaction.db.objectStoreNames = new FakeDOMStringList(...Array.from(this._rawObjectStore.rawDatabase.rawObjectStores.keys()).filter(objectStoreName => {\n const objectStore = this._rawObjectStore.rawDatabase.rawObjectStores.get(objectStoreName);\n return objectStore && !objectStore.deleted;\n }).sort());\n const oldScope = new Set(transaction._scope);\n const oldTransactionObjectStoreNames = [...transaction.objectStoreNames];\n this.transaction._scope.delete(oldName);\n transaction._scope.add(name);\n transaction.objectStoreNames = new FakeDOMStringList(...Array.from(transaction._scope).sort());\n\n // https://www.w3.org/TR/IndexedDB/#abort-an-upgrade-transaction - \"If handle’s object store was not newly created during transaction, set handle’s name to its object store’s name.\"\n if (!this.transaction._createdObjectStores.has(this._rawObjectStore)) {\n transaction._rollbackLog.push(() => {\n this._name = oldName;\n this._rawObjectStore.name = oldName;\n this.transaction._objectStoresCache.delete(name);\n this.transaction._objectStoresCache.set(oldName, this);\n this._rawObjectStore.rawDatabase.rawObjectStores.delete(name);\n this._rawObjectStore.rawDatabase.rawObjectStores.set(oldName, this._rawObjectStore);\n transaction.db.objectStoreNames = new FakeDOMStringList(...oldObjectStoreNames);\n transaction._scope = oldScope;\n transaction.objectStoreNames = new FakeDOMStringList(...oldTransactionObjectStoreNames);\n });\n }\n }\n put(value, key) {\n if (arguments.length === 0) {\n throw new TypeError();\n }\n const record = buildRecordAddPut(this, value, key);\n return this.transaction._execRequestAsync({\n operation: this._rawObjectStore.storeRecord.bind(this._rawObjectStore, record, false, this.transaction._rollbackLog),\n source: this\n });\n }\n add(value, key) {\n if (arguments.length === 0) {\n throw new TypeError();\n }\n const record = buildRecordAddPut(this, value, key);\n return this.transaction._execRequestAsync({\n operation: this._rawObjectStore.storeRecord.bind(this._rawObjectStore, record, true, this.transaction._rollbackLog),\n source: this\n });\n }\n delete(key) {\n if (arguments.length === 0) {\n throw new TypeError();\n }\n confirmActiveTransaction(this);\n if (this.transaction.mode === \"readonly\") {\n throw new ReadOnlyError();\n }\n if (!(key instanceof FDBKeyRange)) {\n key = valueToKey(key);\n }\n return this.transaction._execRequestAsync({\n operation: this._rawObjectStore.deleteRecord.bind(this._rawObjectStore, key, this.transaction._rollbackLog),\n source: this\n });\n }\n get(key) {\n if (arguments.length === 0) {\n throw new TypeError();\n }\n confirmActiveTransaction(this);\n if (!(key instanceof FDBKeyRange)) {\n key = valueToKey(key);\n }\n return this.transaction._execRequestAsync({\n operation: this._rawObjectStore.getValue.bind(this._rawObjectStore, key),\n source: this\n });\n }\n\n // http://w3c.github.io/IndexedDB/#dom-idbobjectstore-getall\n getAll(queryOrOptions, count) {\n const options = extractGetAllOptions(queryOrOptions, count, arguments.length);\n confirmActiveTransaction(this);\n const range = valueToKeyRange(options.query);\n return this.transaction._execRequestAsync({\n operation: this._rawObjectStore.getAllValues.bind(this._rawObjectStore, range, options.count, options.direction),\n source: this\n });\n }\n\n // http://w3c.github.io/IndexedDB/#dom-idbobjectstore-getkey\n getKey(key) {\n if (arguments.length === 0) {\n throw new TypeError();\n }\n confirmActiveTransaction(this);\n if (!(key instanceof FDBKeyRange)) {\n key = valueToKey(key);\n }\n return this.transaction._execRequestAsync({\n operation: this._rawObjectStore.getKey.bind(this._rawObjectStore, key),\n source: this\n });\n }\n\n // http://w3c.github.io/IndexedDB/#dom-idbobjectstore-getallkeys\n getAllKeys(queryOrOptions, count) {\n const options = extractGetAllOptions(queryOrOptions, count, arguments.length);\n confirmActiveTransaction(this);\n const range = valueToKeyRange(options.query);\n return this.transaction._execRequestAsync({\n operation: this._rawObjectStore.getAllKeys.bind(this._rawObjectStore, range, options.count, options.direction),\n source: this\n });\n }\n\n // https://www.w3.org/TR/IndexedDB/#dom-idbobjectstore-getallrecords\n getAllRecords(options) {\n let query;\n let count;\n let direction;\n if (options !== undefined) {\n if (options.query !== undefined) {\n query = options.query;\n }\n if (options.count !== undefined) {\n count = enforceRange(options.count, \"unsigned long\");\n }\n if (options.direction !== undefined) {\n direction = options.direction;\n }\n }\n confirmActiveTransaction(this);\n const range = valueToKeyRange(query);\n return this.transaction._execRequestAsync({\n operation: this._rawObjectStore.getAllRecords.bind(this._rawObjectStore, range, count, direction),\n source: this\n });\n }\n clear() {\n confirmActiveTransaction(this);\n if (this.transaction.mode === \"readonly\") {\n throw new ReadOnlyError();\n }\n return this.transaction._execRequestAsync({\n operation: this._rawObjectStore.clear.bind(this._rawObjectStore, this.transaction._rollbackLog),\n source: this\n });\n }\n openCursor(range, direction) {\n confirmActiveTransaction(this);\n if (range === null) {\n range = undefined;\n }\n if (range !== undefined && !(range instanceof FDBKeyRange)) {\n range = FDBKeyRange.only(valueToKey(range));\n }\n const request = new FDBRequest();\n request.source = this;\n request.transaction = this.transaction;\n const cursor = new FDBCursorWithValue(this, range, direction, request);\n return this.transaction._execRequestAsync({\n operation: cursor._iterate.bind(cursor),\n request,\n source: this\n });\n }\n openKeyCursor(range, direction) {\n confirmActiveTransaction(this);\n if (range === null) {\n range = undefined;\n }\n if (range !== undefined && !(range instanceof FDBKeyRange)) {\n range = FDBKeyRange.only(valueToKey(range));\n }\n const request = new FDBRequest();\n request.source = this;\n request.transaction = this.transaction;\n const cursor = new FDBCursor(this, range, direction, request, true);\n return this.transaction._execRequestAsync({\n operation: cursor._iterate.bind(cursor),\n request,\n source: this\n });\n }\n\n // tslint:-next-line max-line-length\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBObjectStore-createIndex-IDBIndex-DOMString-name-DOMString-sequence-DOMString--keyPath-IDBIndexParameters-optionalParameters\n createIndex(name, keyPath, optionalParameters = {}) {\n if (arguments.length < 2) {\n throw new TypeError();\n }\n const multiEntry = optionalParameters.multiEntry !== undefined ? optionalParameters.multiEntry : false;\n const unique = optionalParameters.unique !== undefined ? optionalParameters.unique : false;\n if (this.transaction.mode !== \"versionchange\") {\n throw new InvalidStateError();\n }\n confirmActiveTransaction(this);\n if (this.indexNames.contains(name)) {\n throw new ConstraintError();\n }\n validateKeyPath(keyPath);\n if (Array.isArray(keyPath) && multiEntry) {\n throw new InvalidAccessError();\n }\n\n // The index that is requested to be created can contain constraints on the data allowed in the index's\n // referenced object store, such as requiring uniqueness of the values referenced by the index's keyPath. If the\n // referenced object store already contains data which violates these constraints, this MUST NOT cause the\n // implementation of createIndex to throw an exception or affect what it returns. The implementation MUST still\n // create and return an IDBIndex object. Instead the implementation must queue up an operation to abort the\n // \"versionchange\" transaction which was used for the createIndex call.\n\n // Save for rollbackLog\n const indexNames = [...this.indexNames];\n const index = new Index(this._rawObjectStore, name, keyPath, multiEntry, unique);\n this.indexNames._push(name);\n this.indexNames._sort();\n this.transaction._createdIndexes.add(index);\n this._rawObjectStore.rawIndexes.set(name, index);\n index.initialize(this.transaction); // This is async by design\n\n this.transaction._rollbackLog.push(() => {\n index.deleted = true;\n this.indexNames = new FakeDOMStringList(...indexNames);\n this._rawObjectStore.rawIndexes.delete(index.name);\n });\n return new FDBIndex(this, index);\n }\n\n // https://w3c.github.io/IndexedDB/#dom-idbobjectstore-index\n index(name) {\n if (arguments.length === 0) {\n throw new TypeError();\n }\n if (this._rawObjectStore.deleted || this.transaction._state === \"finished\") {\n throw new InvalidStateError();\n }\n const index = this._indexesCache.get(name);\n if (index !== undefined) {\n return index;\n }\n const rawIndex = this._rawObjectStore.rawIndexes.get(name);\n if (!this.indexNames.contains(name) || rawIndex === undefined) {\n throw new NotFoundError();\n }\n const index2 = new FDBIndex(this, rawIndex);\n this._indexesCache.set(name, index2);\n return index2;\n }\n deleteIndex(name) {\n if (arguments.length === 0) {\n throw new TypeError();\n }\n if (this.transaction.mode !== \"versionchange\") {\n throw new InvalidStateError();\n }\n confirmActiveTransaction(this);\n const rawIndex = this._rawObjectStore.rawIndexes.get(name);\n if (rawIndex === undefined) {\n throw new NotFoundError();\n }\n this.transaction._rollbackLog.push(() => {\n rawIndex.deleted = false;\n this._rawObjectStore.rawIndexes.set(rawIndex.name, rawIndex);\n this.indexNames._push(rawIndex.name);\n this.indexNames._sort();\n });\n this.indexNames = new FakeDOMStringList(...Array.from(this.indexNames).filter(indexName => {\n return indexName !== name;\n }));\n rawIndex.deleted = true; // Not sure if this is supposed to happen synchronously\n\n this.transaction._execRequestAsync({\n operation: () => {\n const rawIndex2 = this._rawObjectStore.rawIndexes.get(name);\n\n // Hack in case another index is given this name before this async request is processed. It'd be better\n // to have a real unique ID for each index.\n if (rawIndex === rawIndex2) {\n this._rawObjectStore.rawIndexes.delete(name);\n }\n },\n source: this\n });\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBObjectStore-count-IDBRequest-any-key\n count(key) {\n confirmActiveTransaction(this);\n if (key === null) {\n key = undefined;\n }\n if (key !== undefined && !(key instanceof FDBKeyRange)) {\n key = FDBKeyRange.only(valueToKey(key));\n }\n return this.transaction._execRequestAsync({\n operation: () => {\n return this._rawObjectStore.count(key);\n },\n source: this\n });\n }\n get [Symbol.toStringTag]() {\n return \"IDBObjectStore\";\n }\n}\nexport default FDBObjectStore;","class Event {\n eventPath = [];\n NONE = 0;\n CAPTURING_PHASE = 1;\n AT_TARGET = 2;\n BUBBLING_PHASE = 3;\n\n // Flags\n propagationStopped = false;\n immediatePropagationStopped = false;\n canceled = false;\n initialized = true;\n dispatched = false;\n target = null;\n currentTarget = null;\n eventPhase = 0;\n defaultPrevented = false;\n isTrusted = false;\n timeStamp = Date.now();\n constructor(type, eventInitDict = {}) {\n this.type = type;\n this.bubbles = eventInitDict.bubbles !== undefined ? eventInitDict.bubbles : false;\n this.cancelable = eventInitDict.cancelable !== undefined ? eventInitDict.cancelable : false;\n }\n preventDefault() {\n if (this.cancelable) {\n this.canceled = true;\n }\n }\n stopPropagation() {\n this.propagationStopped = true;\n }\n stopImmediatePropagation() {\n this.propagationStopped = true;\n this.immediatePropagationStopped = true;\n }\n}\nexport default Event;","// When running within Node.js (including jsdom), we want to use setImmediate\n// (which runs immediately) rather than setTimeout (which enforces a minimum\n// delay of 1ms, and on Windows only has a resolution of 15ms or so). jsdom\n// doesn't provide setImmediate (to better match the browser environment) and\n// sandboxes scripts, but its sandbox is by necessity imperfect, so we can break\n// out of it:\n//\n// - https://github.com/jsdom/jsdom#executing-scripts\n// - https://github.com/jsdom/jsdom/issues/2729\n// - https://github.com/scala-js/scala-js-macrotask-executor/pull/17\nfunction getSetImmediateFromJsdom() {\n if (typeof navigator !== \"undefined\" && /jsdom/.test(navigator.userAgent)) {\n const outerRealmFunctionConstructor = Node.constructor;\n return new outerRealmFunctionConstructor(\"return setImmediate\")();\n } else {\n return undefined;\n }\n}\n\n// waiting on this PR for typescript types: https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/1249\n\n// 'postTask' runs right after microtasks, so equivalent to setTimeout but without the 4ms clamping.\n// Using the default priority of 'user-visible' to avoid blocking input while still running fairly quickly.\n// See: https://developer.mozilla.org/en-US/docs/Web/API/Prioritized_Task_Scheduling_API#task_priorities\nconst schedulerPostTask = typeof scheduler !== \"undefined\" && (fn => scheduler.postTask(fn));\n\n// fallback for environments that don't support any of the above\nconst doSetTimeout = fn => setTimeout(fn, 0);\n\n// Schedules a task to run later. Use Node.js's setImmediate if available and\n// setTimeout otherwise. Note that options like process.nextTick or\n// queueMicrotask will likely not work: IndexedDB semantics require that\n// transactions are marked as not active when the event loop runs. The next\n// tick queue and microtask queue run within the current event loop macrotask,\n// so they'd process database operations too quickly.\nexport const queueTask = fn => {\n const setImmediate = globalThis.setImmediate || getSetImmediateFromJsdom() || schedulerPostTask || doSetTimeout;\n setImmediate(fn);\n};","import FDBObjectStore from \"./FDBObjectStore.js\";\nimport FDBRequest from \"./FDBRequest.js\";\nimport { AbortError, InvalidStateError, NotFoundError, TransactionInactiveError } from \"./lib/errors.js\";\nimport FakeDOMStringList from \"./lib/FakeDOMStringList.js\";\nimport FakeEvent from \"./lib/FakeEvent.js\";\nimport FakeEventTarget from \"./lib/FakeEventTarget.js\";\nimport { queueTask } from \"./lib/scheduling.js\";\nconst prioritizedListenerTypes = [\"error\", \"abort\", \"complete\"];\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#transaction\nclass FDBTransaction extends FakeEventTarget {\n _state = \"active\";\n _started = false;\n _rollbackLog = [];\n _objectStoresCache = new Map();\n _openRequest = null;\n error = null;\n onabort = null;\n oncomplete = null;\n onerror = null;\n _prioritizedListeners = new Map();\n _requests = [];\n _createdIndexes = new Set();\n _createdObjectStores = new Set();\n constructor(storeNames, mode, durability, db) {\n super();\n this._scope = new Set(storeNames);\n this.mode = mode;\n this.durability = durability;\n this.db = db;\n this.objectStoreNames = new FakeDOMStringList(...Array.from(this._scope).sort());\n for (const type of prioritizedListenerTypes) {\n // Attach prioritized (internal) listeners before any external listeners are attached.\n // This ensures that these listeners run with the same timing regardless of whether\n // the user uses `on*` or `addEventListener` for event listeners.\n this.addEventListener(type, () => {\n this._prioritizedListeners.get(type)?.();\n });\n }\n }\n\n // https://w3c.github.io/IndexedDB/#abort-transaction\n _abort(errName) {\n for (const f of this._rollbackLog.reverse()) {\n f();\n }\n if (errName !== null) {\n const e = new DOMException(undefined, errName);\n this.error = e;\n }\n\n // Should this directly remove from _requests?\n for (const {\n request\n } of this._requests) {\n if (request.readyState !== \"done\") {\n request.readyState = \"done\"; // This will cancel execution of this request's operation\n if (request.source) {\n // https://w3c.github.io/IndexedDB/#ref-for-list-iterate%E2%91%A2\n // For each request of transaction’s request list, abort the steps to asynchronously\n // execute a request for request, set request’s processed flag to true, and queue a\n // database task to run these steps:\n queueTask(() => {\n // Set request’s result to undefined.\n request.result = undefined;\n // Set request’s error to a newly created \"AbortError\" DOMException.\n request.error = new AbortError();\n\n // Fire an event named error at request with its bubbles and cancelable attributes initialized\n // to true.\n const event = new FakeEvent(\"error\", {\n bubbles: true,\n cancelable: true\n });\n event.eventPath = [this.db, this];\n try {\n request.dispatchEvent(event);\n } catch (_err) {\n if (this._state === \"active\") {\n this._abort(\"AbortError\");\n }\n }\n });\n }\n }\n }\n\n // Queue a database task to run these steps:\n queueTask(() => {\n // If transaction is an upgrade transaction, then set transaction’s connection’s associated database’s\n // upgrade transaction to null.\n // (i.e. remove it from the list of `db.connections`)\n const isUpgradeTransaction = this.mode === \"versionchange\";\n if (isUpgradeTransaction) {\n this.db._rawDatabase.connections = this.db._rawDatabase.connections.filter(connection => !connection._rawDatabase.transactions.includes(this));\n }\n // Fire an event named abort at transaction with its bubbles attribute initialized to true.\n const event = new FakeEvent(\"abort\", {\n bubbles: true,\n cancelable: false\n });\n event.eventPath = [this.db];\n this.dispatchEvent(event);\n\n // If transaction is an upgrade transaction, then:\n if (isUpgradeTransaction) {\n // Let request be the open request associated with transaction.\n const request = this._openRequest;\n // Set request’s transaction to null.\n request.transaction = null;\n // Set request’s result to undefined.\n request.result = undefined;\n }\n });\n this._state = \"finished\";\n }\n abort() {\n if (this._state === \"committing\" || this._state === \"finished\") {\n throw new InvalidStateError();\n }\n this._state = \"active\";\n this._abort(null);\n }\n\n // http://w3c.github.io/IndexedDB/#dom-idbtransaction-objectstore\n objectStore(name) {\n if (this._state !== \"active\") {\n throw new InvalidStateError();\n }\n const objectStore = this._objectStoresCache.get(name);\n if (objectStore !== undefined) {\n return objectStore;\n }\n const rawObjectStore = this.db._rawDatabase.rawObjectStores.get(name);\n if (!this._scope.has(name) || rawObjectStore === undefined) {\n throw new NotFoundError();\n }\n const objectStore2 = new FDBObjectStore(this, rawObjectStore);\n this._objectStoresCache.set(name, objectStore2);\n return objectStore2;\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-asynchronously-executing-a-request\n _execRequestAsync(obj) {\n const source = obj.source;\n const operation = obj.operation;\n let request = Object.hasOwn(obj, \"request\") ? obj.request : null;\n if (this._state !== \"active\") {\n throw new TransactionInactiveError();\n }\n\n // Request should only be passed for cursors\n if (!request) {\n if (!source) {\n // Special requests like indexes that just need to run some code\n request = new FDBRequest();\n } else {\n request = new FDBRequest();\n request.source = source;\n request.transaction = source.transaction;\n }\n }\n this._requests.push({\n operation,\n request\n });\n return request;\n }\n _start() {\n this._started = true;\n\n // Remove from request queue - cursor ones will be added back if necessary by cursor.continue and such\n let operation;\n let request;\n while (this._requests.length > 0) {\n const r = this._requests.shift();\n\n // This should only be false if transaction was aborted\n if (r && r.request.readyState !== \"done\") {\n request = r.request;\n operation = r.operation;\n break;\n }\n }\n if (request && operation) {\n if (!request.source) {\n // Special requests like indexes that just need to run some code, with error handling already built into\n // operation\n operation();\n } else {\n let defaultAction;\n let event;\n try {\n const result = operation();\n request.readyState = \"done\";\n request.result = result;\n request.error = undefined;\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-fire-a-success-event\n if (this._state === \"inactive\") {\n this._state = \"active\";\n }\n event = new FakeEvent(\"success\", {\n bubbles: false,\n cancelable: false\n });\n } catch (err) {\n request.readyState = \"done\";\n request.result = undefined;\n request.error = err;\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-fire-an-error-event\n if (this._state === \"inactive\") {\n this._state = \"active\";\n }\n event = new FakeEvent(\"error\", {\n bubbles: true,\n cancelable: true\n });\n defaultAction = this._abort.bind(this, err.name);\n }\n try {\n event.eventPath = [this.db, this];\n request.dispatchEvent(event);\n } catch (_err) {\n if (this._state === \"active\") {\n this._abort(\"AbortError\");\n defaultAction = undefined; // do not abort again\n }\n }\n\n // Default action of event\n if (!event.canceled) {\n if (defaultAction) {\n defaultAction();\n }\n }\n }\n\n // Give it another chance for new handlers to be set before finishing\n queueTask(this._start.bind(this));\n return;\n }\n\n // Check if transaction complete event needs to be fired\n if (this._state !== \"finished\") {\n // Either aborted or committed already\n this._state = \"finished\";\n if (!this.error) {\n const event = new FakeEvent(\"complete\");\n this.dispatchEvent(event);\n }\n }\n }\n commit() {\n if (this._state !== \"active\") {\n throw new InvalidStateError();\n }\n this._state = \"committing\";\n }\n get [Symbol.toStringTag]() {\n return \"IDBTransaction\";\n }\n}\nexport default FDBTransaction;","import { ConstraintError } from \"./errors.js\";\nconst MAX_KEY = 9007199254740992;\nclass KeyGenerator {\n // This is kind of wrong. Should start at 1 and increment only after record is saved\n num = 0;\n next() {\n if (this.num >= MAX_KEY) {\n throw new ConstraintError();\n }\n this.num += 1;\n return this.num;\n }\n\n // https://w3c.github.io/IndexedDB/#possibly-update-the-key-generator\n setIfLarger(num) {\n const value = Math.floor(Math.min(num, MAX_KEY)) - 1;\n if (value >= this.num) {\n this.num = value + 1;\n }\n }\n}\nexport default KeyGenerator;","import FDBRecord from \"../FDBRecord.js\";\nimport { DataError } from \"./errors.js\";\nimport extractKey from \"./extractKey.js\";\nimport KeyGenerator from \"./KeyGenerator.js\";\nimport RecordStore from \"./RecordStore.js\";\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-object-store\nclass ObjectStore {\n deleted = false;\n records = new RecordStore(true);\n rawIndexes = new Map();\n constructor(rawDatabase, name, keyPath, autoIncrement) {\n this.rawDatabase = rawDatabase;\n this.keyGenerator = autoIncrement === true ? new KeyGenerator() : null;\n this.deleted = false;\n this.name = name;\n this.keyPath = keyPath;\n this.autoIncrement = autoIncrement;\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-retrieving-a-value-from-an-object-store\n getKey(key) {\n const record = this.records.get(key);\n return record !== undefined ? structuredClone(record.key) : undefined;\n }\n\n // http://w3c.github.io/IndexedDB/#retrieve-multiple-keys-from-an-object-store\n getAllKeys(range, count, direction) {\n if (count === undefined || count === 0) {\n count = Infinity;\n }\n const records = [];\n for (const record of this.records.values(range, direction)) {\n records.push(structuredClone(record.key));\n if (records.length >= count) {\n break;\n }\n }\n return records;\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-retrieving-a-value-from-an-object-store\n getValue(key) {\n const record = this.records.get(key);\n return record !== undefined ? structuredClone(record.value) : undefined;\n }\n\n // http://w3c.github.io/IndexedDB/#retrieve-multiple-values-from-an-object-store\n getAllValues(range, count, direction) {\n if (count === undefined || count === 0) {\n count = Infinity;\n }\n const records = [];\n for (const record of this.records.values(range, direction)) {\n records.push(structuredClone(record.value));\n if (records.length >= count) {\n break;\n }\n }\n return records;\n }\n\n // https://www.w3.org/TR/IndexedDB/#dom-idbobjectstore-getallrecords\n getAllRecords(range, count, direction) {\n if (count === undefined || count === 0) {\n count = Infinity;\n }\n const records = [];\n for (const record of this.records.values(range, direction)) {\n records.push(new FDBRecord(structuredClone(record.key), structuredClone(record.key), structuredClone(record.value)));\n if (records.length >= count) {\n break;\n }\n }\n return records;\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-storing-a-record-into-an-object-store\n storeRecord(newRecord, noOverwrite, rollbackLog) {\n if (this.keyPath !== null) {\n const key = extractKey(this.keyPath, newRecord.value).key;\n if (key !== undefined) {\n newRecord.key = key;\n }\n }\n const rollbackLogForThisOperation = [];\n if (this.keyGenerator !== null && newRecord.key === undefined) {\n let rolledBack = false;\n const keyGeneratorBefore = this.keyGenerator.num;\n const rollbackKeyGenerator = () => {\n if (rolledBack) {\n return;\n }\n rolledBack = true;\n if (this.keyGenerator) {\n this.keyGenerator.num = keyGeneratorBefore;\n }\n };\n rollbackLogForThisOperation.push(rollbackKeyGenerator);\n if (rollbackLog) {\n rollbackLog.push(rollbackKeyGenerator);\n }\n newRecord.key = this.keyGenerator.next();\n\n // Set in value if keyPath defiend but led to no key\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-to-assign-a-key-to-a-value-using-a-key-path\n if (this.keyPath !== null) {\n if (Array.isArray(this.keyPath)) {\n throw new Error(\"Cannot have an array key path in an object store with a key generator\");\n }\n let remainingKeyPath = this.keyPath;\n let object = newRecord.value;\n let identifier;\n let i = 0; // Just to run the loop at least once\n while (i >= 0) {\n if (typeof object !== \"object\") {\n throw new DataError();\n }\n i = remainingKeyPath.indexOf(\".\");\n if (i >= 0) {\n identifier = remainingKeyPath.slice(0, i);\n remainingKeyPath = remainingKeyPath.slice(i + 1);\n if (!Object.hasOwn(object, identifier)) {\n // Bypass prototype when setting (See `bindings-inject-values-bypass.any.js`)\n // Equivalent to `object[identifier] = ...` without using `Object.prototype`\n Object.defineProperty(object, identifier, {\n configurable: true,\n enumerable: true,\n writable: true,\n value: {}\n });\n }\n object = object[identifier];\n }\n }\n identifier = remainingKeyPath;\n\n // Bypass prototype when setting (See `bindings-inject-values-bypass.any.js`)\n // Equivalent to `object[identifier] = ...` without using `Object.prototype`\n Object.defineProperty(object, identifier, {\n configurable: true,\n enumerable: true,\n writable: true,\n value: newRecord.key\n });\n }\n } else if (this.keyGenerator !== null && typeof newRecord.key === \"number\") {\n this.keyGenerator.setIfLarger(newRecord.key);\n }\n const existingRecord = this.records.put(newRecord, noOverwrite);\n let rolledBack = false;\n const rollbackStoreRecord = () => {\n if (rolledBack) {\n return;\n }\n rolledBack = true;\n if (existingRecord) {\n // overwrite on rollback\n this.storeRecord(existingRecord, false);\n } else {\n // delete on rollback\n this.deleteRecord(newRecord.key);\n }\n };\n rollbackLogForThisOperation.push(rollbackStoreRecord);\n if (rollbackLog) {\n rollbackLog.push(rollbackStoreRecord);\n }\n\n // Delete existing indexes\n if (existingRecord) {\n for (const rawIndex of this.rawIndexes.values()) {\n rawIndex.records.deleteByValue(newRecord.key);\n }\n }\n\n // Update indexes\n try {\n for (const rawIndex of this.rawIndexes.values()) {\n if (rawIndex.initialized) {\n rawIndex.storeRecord(newRecord);\n }\n }\n } catch (err) {\n // If this request fails here and preventDefault is used to stop the transaction from aborting, we need to roll back the addition of this record to the store, otherwise it will be present in subsequent requests on this transaction. Same for key generator.\n if (err.name === \"ConstraintError\") {\n for (const rollback of rollbackLogForThisOperation) {\n rollback();\n }\n }\n throw err;\n }\n return newRecord.key;\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-deleting-records-from-an-object-store\n deleteRecord(key, rollbackLog) {\n const deletedRecords = this.records.delete(key);\n if (rollbackLog) {\n for (const record of deletedRecords) {\n rollbackLog.push(() => {\n this.storeRecord(record, true);\n });\n }\n }\n for (const rawIndex of this.rawIndexes.values()) {\n rawIndex.records.deleteByValue(key);\n }\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-clearing-an-object-store\n clear(rollbackLog) {\n const deletedRecords = this.records.clear();\n if (rollbackLog) {\n for (const record of deletedRecords) {\n rollbackLog.push(() => {\n this.storeRecord(record, true);\n });\n }\n }\n for (const rawIndex of this.rawIndexes.values()) {\n rawIndex.records.clear();\n }\n }\n count(range) {\n // optimization: if there is no range, or if the range is everything, then we can just count the total size\n if (range === undefined || range.lower === undefined && range.upper === undefined) {\n return this.records.size();\n }\n let count = 0;\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n for (const record of this.records.values(range)) {\n count += 1;\n }\n return count;\n }\n}\nexport default ObjectStore;","import FakeEvent from \"./FakeEvent.js\";\nimport { queueTask } from \"./scheduling.js\";\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#database-closing-steps\nconst closeConnection = (connection, forced = false) => {\n connection._closePending = true;\n const transactionsComplete = connection._rawDatabase.transactions.every(transaction => {\n return transaction._state === \"finished\";\n });\n if (transactionsComplete) {\n connection._closed = true;\n connection._rawDatabase.connections = connection._rawDatabase.connections.filter(otherConnection => {\n return connection !== otherConnection;\n });\n if (forced) {\n const event = new FakeEvent(\"close\", {\n bubbles: false,\n cancelable: false\n });\n event.eventPath = [];\n connection.dispatchEvent(event);\n }\n } else {\n queueTask(() => {\n closeConnection(connection, forced);\n });\n }\n};\nexport default closeConnection;","import FDBTransaction from \"./FDBTransaction.js\";\nimport { ConstraintError, InvalidAccessError, InvalidStateError, NotFoundError, TransactionInactiveError } from \"./lib/errors.js\";\nimport FakeDOMStringList from \"./lib/FakeDOMStringList.js\";\nimport FakeEventTarget from \"./lib/FakeEventTarget.js\";\nimport ObjectStore from \"./lib/ObjectStore.js\";\nimport validateKeyPath from \"./lib/validateKeyPath.js\";\nimport closeConnection from \"./lib/closeConnection.js\";\n// Common first 3 steps of https://www.w3.org/TR/IndexedDB/#dom-idbdatabase-createobjectstore and https://www.w3.org/TR/IndexedDB/#dom-idbdatabase-deleteobjectstore\nconst confirmActiveVersionchangeTransaction = database => {\n // Let transaction be database’s upgrade transaction if it is not null, or throw an \"InvalidStateError\" DOMException otherwise.\n let transaction;\n if (database._runningVersionchangeTransaction) {\n // Find the latest versionchange transaction\n transaction = database._rawDatabase.transactions.findLast(tx => {\n return tx.mode === \"versionchange\";\n });\n }\n if (!transaction) {\n throw new InvalidStateError();\n }\n\n // If transaction’s state is not active, then throw a \"TransactionInactiveError\" DOMException.\n if (transaction._state !== \"active\") {\n throw new TransactionInactiveError();\n }\n return transaction;\n};\n\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#database-interface\nclass FDBDatabase extends FakeEventTarget {\n _closePending = false;\n _closed = false;\n _runningVersionchangeTransaction = false;\n constructor(rawDatabase) {\n super();\n this._rawDatabase = rawDatabase;\n this._rawDatabase.connections.push(this);\n this.name = rawDatabase.name;\n this.version = rawDatabase.version;\n this.objectStoreNames = new FakeDOMStringList(...Array.from(rawDatabase.rawObjectStores.keys()).sort());\n }\n\n // http://w3c.github.io/IndexedDB/#dom-idbdatabase-createobjectstore\n createObjectStore(name, options = {}) {\n if (name === undefined) {\n throw new TypeError();\n }\n const transaction = confirmActiveVersionchangeTransaction(this);\n const keyPath = options !== null && options.keyPath !== undefined ? options.keyPath : null;\n const autoIncrement = options !== null && options.autoIncrement !== undefined ? options.autoIncrement : false;\n if (keyPath !== null) {\n validateKeyPath(keyPath);\n }\n if (this._rawDatabase.rawObjectStores.has(name)) {\n throw new ConstraintError();\n }\n if (autoIncrement && (keyPath === \"\" || Array.isArray(keyPath))) {\n throw new InvalidAccessError();\n }\n\n // Save for rollbackLog\n const objectStoreNames = [...this.objectStoreNames];\n const transactionObjectStoreNames = [...transaction.objectStoreNames];\n const rawObjectStore = new ObjectStore(this._rawDatabase, name, keyPath, autoIncrement);\n this.objectStoreNames._push(name);\n this.objectStoreNames._sort();\n transaction._scope.add(name);\n transaction._createdObjectStores.add(rawObjectStore);\n this._rawDatabase.rawObjectStores.set(name, rawObjectStore);\n transaction.objectStoreNames = new FakeDOMStringList(...this.objectStoreNames);\n transaction._rollbackLog.push(() => {\n rawObjectStore.deleted = true;\n this.objectStoreNames = new FakeDOMStringList(...objectStoreNames);\n transaction.objectStoreNames = new FakeDOMStringList(...transactionObjectStoreNames);\n transaction._scope.delete(rawObjectStore.name);\n this._rawDatabase.rawObjectStores.delete(rawObjectStore.name);\n });\n return transaction.objectStore(name);\n }\n\n // https://www.w3.org/TR/IndexedDB/#dom-idbdatabase-deleteobjectstore\n deleteObjectStore(name) {\n if (name === undefined) {\n throw new TypeError();\n }\n const transaction = confirmActiveVersionchangeTransaction(this);\n\n // Let store be the object store named name in database, or throw a \"NotFoundError\" DOMException if none.\n const store = this._rawDatabase.rawObjectStores.get(name);\n if (store === undefined) {\n throw new NotFoundError();\n }\n\n // Remove store from this’s object store set.\n // This method synchronously modifies the objectStoreNames property on the IDBDatabase instance on which it was called.\n this.objectStoreNames = new FakeDOMStringList(...Array.from(this.objectStoreNames).filter(objectStoreName => {\n return objectStoreName !== name;\n }));\n transaction.objectStoreNames = new FakeDOMStringList(...this.objectStoreNames);\n\n // If there is an object store handle associated with store and transaction, remove all entries from its index set.\n const objectStore = transaction._objectStoresCache.get(name);\n let prevIndexNames;\n if (objectStore) {\n prevIndexNames = [...objectStore.indexNames];\n objectStore.indexNames = new FakeDOMStringList();\n }\n transaction._rollbackLog.push(() => {\n store.deleted = false;\n this._rawDatabase.rawObjectStores.set(store.name, store);\n this.objectStoreNames._push(store.name);\n transaction.objectStoreNames._push(store.name);\n this.objectStoreNames._sort();\n if (objectStore && prevIndexNames) {\n objectStore.indexNames = new FakeDOMStringList(...prevIndexNames);\n }\n });\n\n // Destroy store.\n store.deleted = true;\n this._rawDatabase.rawObjectStores.delete(name);\n transaction._objectStoresCache.delete(name);\n }\n transaction(storeNames, mode, options) {\n mode = mode !== undefined ? mode : \"readonly\";\n if (mode !== \"readonly\" && mode !== \"readwrite\" && mode !== \"versionchange\") {\n throw new TypeError(\"Invalid mode: \" + mode);\n }\n const hasActiveVersionchange = this._rawDatabase.transactions.some(transaction => {\n return transaction._state === \"active\" && transaction.mode === \"versionchange\" && transaction.db === this;\n });\n if (hasActiveVersionchange) {\n throw new InvalidStateError();\n }\n if (this._closePending) {\n throw new InvalidStateError();\n }\n if (!Array.isArray(storeNames)) {\n storeNames = [storeNames];\n }\n if (storeNames.length === 0 && mode !== \"versionchange\") {\n throw new InvalidAccessError();\n }\n for (const storeName of storeNames) {\n if (!this.objectStoreNames.contains(storeName)) {\n throw new NotFoundError(\"No objectStore named \" + storeName + \" in this database\");\n }\n }\n\n // the actual algo is more complex but this passes the IDB tests: https://webidl.spec.whatwg.org/#es-dictionary\n const durability = options?.durability ?? \"default\";\n // invalid enums throw a TypeError: https://webidl.spec.whatwg.org/#es-enumeration\n if (durability !== \"default\" && durability !== \"strict\" && durability !== \"relaxed\") {\n throw new TypeError(\n // based on Firefox's error message\n `'${durability}' (value of 'durability' member of IDBTransactionOptions) ` + `is not a valid value for enumeration IDBTransactionDurability`);\n }\n const tx = new FDBTransaction(storeNames, mode, durability, this);\n this._rawDatabase.transactions.push(tx);\n this._rawDatabase.processTransactions(); // See if can start right away (async)\n\n return tx;\n }\n close() {\n closeConnection(this);\n }\n get [Symbol.toStringTag]() {\n return \"IDBDatabase\";\n }\n}\nexport default FDBDatabase;","import FDBRequest from \"./FDBRequest.js\";\nclass FDBOpenDBRequest extends FDBRequest {\n onupgradeneeded = null;\n onblocked = null;\n get [Symbol.toStringTag]() {\n return \"IDBOpenDBRequest\";\n }\n}\nexport default FDBOpenDBRequest;","import FakeEvent from \"./lib/FakeEvent.js\";\nclass FDBVersionChangeEvent extends FakeEvent {\n constructor(type, parameters = {}) {\n super(type);\n this.newVersion = parameters.newVersion !== undefined ? parameters.newVersion : null;\n this.oldVersion = parameters.oldVersion !== undefined ? parameters.oldVersion : 0;\n }\n get [Symbol.toStringTag]() {\n return \"IDBVersionChangeEvent\";\n }\n}\nexport default FDBVersionChangeEvent;","/**\n * Minimal polyfill of `Set.prototype.intersection`, available in Node 22+.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/intersection\n * @param set1\n * @param set2\n */\nexport function intersection(set1, set2) {\n if (\"intersection\" in set1) {\n return set1.intersection(set2);\n }\n return new Set([...set1].filter(item => set2.has(item)));\n}","import { queueTask } from \"./scheduling.js\";\nimport { intersection } from \"./intersection.js\";\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-database\nclass Database {\n transactions = [];\n rawObjectStores = new Map();\n connections = [];\n constructor(name, version) {\n this.name = name;\n this.version = version;\n this.processTransactions = this.processTransactions.bind(this);\n }\n processTransactions() {\n queueTask(() => {\n const running = this.transactions.filter(transaction => transaction._started && transaction._state !== \"finished\");\n const waiting = this.transactions.filter(transaction => !transaction._started && transaction._state !== \"finished\");\n\n // The next transaction to run is the first waiting one that doesn't overlap with either a running one or a\n // preceding waiting one. This allows non-overlapping transactions to run in parallel.\n // The exception is readonly transactions, which are allowed to run in parallel with other readonly\n // transactions, even with overlapping scopes, since no data is being modified.\n const next = waiting.find((transaction, i) => {\n const anyRunning = running.some(other => !(transaction.mode === \"readonly\" && other.mode === \"readonly\") && intersection(other._scope, transaction._scope).size > 0);\n if (anyRunning) {\n return false;\n }\n\n // If any _preceding_ waiting transactions are blocked, then that's also blocking.\n // E.g. if you have 3 transactions: [a], [a,b], and [b,c], then [a] blocks [a,b] which blocks [b,c]\n // until [a] is complete, even though [a] and [b,c] share no overlap.\n // Note that readonly transactions do not have to be handled as a special case here,\n // because if any transactions with overlapping scopes are blocked, then we can assume they are\n const anyWaiting = waiting.slice(0, i).some(other => intersection(other._scope, transaction._scope).size > 0);\n return !anyWaiting;\n });\n if (next) {\n next.addEventListener(\"complete\", this.processTransactions);\n next.addEventListener(\"abort\", this.processTransactions);\n next._start();\n }\n });\n }\n}\nexport default Database;","// WebIDL requires passing the right number of non-optional arguments, e.g. IDBFactory.open() must have at least 1 arg\nexport function validateRequiredArguments(numArguments, expectedNumArguments, methodName) {\n if (numArguments < expectedNumArguments) {\n // imitate Firefox's error message\n throw new TypeError(`${methodName}: At least ${expectedNumArguments} ${expectedNumArguments === 1 ? \"argument\" : \"arguments\"} ` + `required, but only ${arguments.length} passed`);\n }\n}","import FDBDatabase from \"./FDBDatabase.js\";\nimport FDBOpenDBRequest from \"./FDBOpenDBRequest.js\";\nimport FDBVersionChangeEvent from \"./FDBVersionChangeEvent.js\";\nimport cmp from \"./lib/cmp.js\";\nimport Database from \"./lib/Database.js\";\nimport enforceRange from \"./lib/enforceRange.js\";\nimport { AbortError, VersionError } from \"./lib/errors.js\";\nimport FakeEvent from \"./lib/FakeEvent.js\";\nimport { queueTask } from \"./lib/scheduling.js\";\nimport { validateRequiredArguments } from \"./lib/validateRequiredArguments.js\";\n// https://w3c.github.io/IndexedDB/#connection-queue\nconst runTaskInConnectionQueue = (connectionQueues, name, task) => {\n // Let queue be the connection queue for storageKey and name.\n // (note FakeIndexedDB does not support storageKeys currently)\n // Add request to queue.\n // Wait until all previous requests in queue have been processed.\n const queue = connectionQueues.get(name) ?? Promise.resolve();\n connectionQueues.set(name, queue.then(task));\n};\nconst waitForOthersClosedDelete = (databases, name, openDatabases, cb) => {\n const anyOpen = openDatabases.some(openDatabase2 => {\n return !openDatabase2._closed && !openDatabase2._closePending;\n });\n if (anyOpen) {\n queueTask(() => waitForOthersClosedDelete(databases, name, openDatabases, cb));\n return;\n }\n databases.delete(name);\n cb(null);\n};\n\n// https://w3c.github.io/IndexedDB/#delete-a-database\nconst deleteDatabase = (databases, connectionQueues, name, request, cb) => {\n const deleteDBTask = () => {\n return new Promise(resolve => {\n const db = databases.get(name);\n const oldVersion = db !== undefined ? db.version : 0;\n const onComplete = err => {\n try {\n if (err) {\n cb(err);\n } else {\n cb(null, oldVersion);\n }\n } finally {\n resolve();\n }\n };\n try {\n const db = databases.get(name);\n if (db === undefined) {\n onComplete(null);\n return;\n }\n\n // Let openConnections be the set of all connections associated with db.\n const openConnections = db.connections.filter(connection => {\n return !connection._closed;\n });\n\n // For each entry of openConnections that does not have its close pending flag set to true, queue a\n // database task to fire a version change event named versionchange at entry with db’s version and null.\n for (const openDatabase2 of openConnections) {\n if (!openDatabase2._closePending) {\n queueTask(() => {\n const event = new FDBVersionChangeEvent(\"versionchange\", {\n newVersion: null,\n oldVersion: db.version\n });\n openDatabase2.dispatchEvent(event);\n });\n }\n }\n\n // Wait for all of the events to be fired. (i.e. queue a task)\n queueTask(() => {\n // If any of the connections in openConnections are still not closed, queue a database task to\n // fire a version change event named blocked at request with db’s version and null.\n\n const anyOpen = openConnections.some(openDatabase3 => {\n return !openDatabase3._closed && !openDatabase3._closePending;\n });\n\n // If any of the connections in openConnections are still not closed, queue a database task to\n // fire a version change event named blocked at request with db’s version and null.\n if (anyOpen) {\n queueTask(() => {\n const event = new FDBVersionChangeEvent(\"blocked\", {\n newVersion: null,\n oldVersion: db.version\n });\n request.dispatchEvent(event);\n });\n }\n\n // Wait until all connections in openConnections are closed.\n waitForOthersClosedDelete(databases, name, openConnections, onComplete);\n });\n } catch (err) {\n onComplete(err);\n }\n });\n };\n runTaskInConnectionQueue(connectionQueues, name, deleteDBTask);\n};\n\n// https://w3c.github.io/IndexedDB/#ref-for-database-version%E2%91%A0%E2%91%A2\nconst runVersionchangeTransaction = (connection, version, request, cb) => {\n connection._runningVersionchangeTransaction = true;\n const oldVersion = connection._oldVersion = connection.version;\n\n // Let openConnections be the set of all connections, except connection, associated with db.\n const openConnections = connection._rawDatabase.connections.filter(otherDatabase => {\n return connection !== otherDatabase;\n });\n\n // For each entry of openConnections that does not have its close pending flag set to true, queue a\n // database task to fire a version change event named versionchange at entry with db’s version and version.\n for (const openDatabase2 of openConnections) {\n if (!openDatabase2._closed && !openDatabase2._closePending) {\n queueTask(() => {\n const event = new FDBVersionChangeEvent(\"versionchange\", {\n newVersion: version,\n oldVersion\n });\n openDatabase2.dispatchEvent(event);\n });\n }\n }\n\n // Wait for all of the events to be fired.\n // (i.e. queue a task)\n queueTask(() => {\n const anyOpen = openConnections.some(openDatabase3 => {\n return !openDatabase3._closed && !openDatabase3._closePending;\n });\n\n // If any of the connections in openConnections are still not closed, queue a database task to fire a version change event named blocked at request with db’s version and version.\n if (anyOpen) {\n queueTask(() => {\n const event = new FDBVersionChangeEvent(\"blocked\", {\n newVersion: version,\n oldVersion\n });\n request.dispatchEvent(event);\n });\n }\n\n // Wait until all connections in openConnections are closed.\n const waitForOthersClosed = () => {\n const anyOpen2 = openConnections.some(openDatabase2 => {\n return !openDatabase2._closed && !openDatabase2._closePending;\n });\n if (anyOpen2) {\n queueTask(waitForOthersClosed);\n return;\n }\n\n // Set the version of database to version. This change is considered part of the transaction, and so if the\n // transaction is aborted, this change is reverted.\n connection._rawDatabase.version = version;\n connection.version = version;\n\n // Get rid of this setImmediate?\n const transaction = connection.transaction(Array.from(connection.objectStoreNames), \"versionchange\");\n\n // associate the transaction with the open request for later lookup\n transaction._openRequest = request;\n\n // https://w3c.github.io/IndexedDB/#upgrade-a-database\n // Set request’s result to connection.\n request.result = connection;\n // Set request’s done flag to true.\n request.readyState = \"done\";\n // Set request’s transaction to transaction.\n request.transaction = transaction;\n transaction._rollbackLog.push(() => {\n connection._rawDatabase.version = oldVersion;\n connection.version = oldVersion;\n });\n\n // Set transaction’s state to active.\n transaction._state = \"active\";\n\n // Let didThrow be the result of firing a version change event named upgradeneeded at request with old version and version.\n const event = new FDBVersionChangeEvent(\"upgradeneeded\", {\n newVersion: version,\n oldVersion\n });\n let didThrow = false;\n try {\n request.dispatchEvent(event);\n } catch (_err) {\n didThrow = true;\n }\n const concludeUpgrade = () => {\n // If transaction’s state is active, then:\n if (transaction._state === \"active\") {\n // Set transaction’s state to inactive.\n transaction._state = \"inactive\";\n if (didThrow) {\n // If didThrow is true, run abort a transaction with transaction and a newly created \"AbortError\" DOMException.\n transaction._abort(\"AbortError\");\n }\n }\n };\n\n // The \"upgrade a database\" steps are supposed to run as a database task on the database access task source\n // (i.e. off the main thread), but since we're actually running on the main thread, we have to be tricky:\n // 1. If any `upgradeneeded` event handlers errored, abort synchronously\n // 2. Else yield to allow any microtasks to run in response to that event\n if (didThrow) {\n concludeUpgrade();\n } else {\n queueTask(concludeUpgrade);\n }\n transaction._prioritizedListeners.set(\"error\", () => {\n connection._runningVersionchangeTransaction = false;\n connection._oldVersion = undefined;\n // throw arguments[0].target.error;\n // console.log(\"error in versionchange transaction - not sure if anything needs to be done here\", e.target.error.name);\n });\n transaction._prioritizedListeners.set(\"abort\", () => {\n connection._runningVersionchangeTransaction = false;\n connection._oldVersion = undefined;\n queueTask(() => {\n // Reset transaction in a tick after onabort (upgrade-transaction-lifecycle-user-aborted.any)\n request.transaction = null;\n cb(new AbortError());\n });\n });\n transaction._prioritizedListeners.set(\"complete\", () => {\n connection._runningVersionchangeTransaction = false;\n connection._oldVersion = undefined;\n // Let other complete event handlers run before continuing\n queueTask(() => {\n // Reset transaction in a tick after oncomplete (upgrade-transaction-lifecycle-committed.any.js)\n request.transaction = null;\n if (connection._closePending) {\n cb(new AbortError());\n } else {\n cb(null);\n }\n });\n });\n };\n waitForOthersClosed();\n });\n};\n\n// https://w3c.github.io/IndexedDB/#opening\nconst openDatabase = (databases, connectionQueues, name, version, request, cb) => {\n const openDBTask = () => {\n return new Promise(resolve => {\n const onComplete = err => {\n try {\n if (err) {\n // DO THIS HERE: ensure that connection is closed by running the steps for closing a database connection before these\n // steps are aborted.\n cb(err);\n } else {\n cb(null, connection);\n }\n } finally {\n resolve();\n }\n };\n\n // Let db be the database named name in storageKey, or null otherwise.\n let db = databases.get(name);\n if (db === undefined) {\n // If db is null, let db be a new database with name `name`, version 0 (zero), and with no object stores.\n db = new Database(name, 0);\n databases.set(name, db);\n }\n\n // If version is undefined, let version be 1 if db is null, or db’s version otherwise.\n if (version === undefined) {\n version = db.version !== 0 ? db.version : 1;\n }\n\n // If db’s version is greater than version, return a newly created \"VersionError\" DOMException and abort these steps.\n if (db.version > version) {\n return onComplete(new VersionError());\n }\n\n // Let connection be a new connection to db.\n const connection = new FDBDatabase(db);\n\n // If db’s version is less than version, then:\n if (db.version < version) {\n // (run a version change transaction and resolve so that the next promise in the queue will execute)\n runVersionchangeTransaction(connection, version, request, err => {\n onComplete(err);\n });\n } else {\n onComplete(null);\n }\n });\n };\n runTaskInConnectionQueue(connectionQueues, name, openDBTask);\n};\nclass FDBFactory {\n _databases = new Map();\n // https://w3c.github.io/IndexedDB/#connection-queue\n _connectionQueues = new Map(); // promise chain as lightweight FIFO task queue\n\n // https://w3c.github.io/IndexedDB/#dom-idbfactory-cmp\n cmp(first, second) {\n validateRequiredArguments(arguments.length, 2, \"IDBFactory.cmp\");\n return cmp(first, second);\n }\n\n // https://w3c.github.io/IndexedDB/#dom-idbfactory-deletedatabase\n deleteDatabase(name) {\n validateRequiredArguments(arguments.length, 1, \"IDBFactory.deleteDatabase\");\n const request = new FDBOpenDBRequest();\n request.source = null;\n queueTask(() => {\n deleteDatabase(this._databases, this._connectionQueues, name, request, (err, oldVersion) => {\n if (err) {\n request.error = new DOMException(err.message, err.name);\n request.readyState = \"done\";\n const event = new FakeEvent(\"error\", {\n bubbles: true,\n cancelable: true\n });\n event.eventPath = [];\n request.dispatchEvent(event);\n return;\n }\n request.result = undefined;\n request.readyState = \"done\";\n const event2 = new FDBVersionChangeEvent(\"success\", {\n newVersion: null,\n oldVersion\n });\n request.dispatchEvent(event2);\n });\n });\n return request;\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBFactory-open-IDBOpenDBRequest-DOMString-name-unsigned-long-long-version\n open(name, version) {\n validateRequiredArguments(arguments.length, 1, \"IDBFactory.open\");\n if (arguments.length > 1 && version !== undefined) {\n // Based on spec, not sure why \"MAX_SAFE_INTEGER\" instead of \"unsigned long long\", but it's needed to pass\n // tests\n version = enforceRange(version, \"MAX_SAFE_INTEGER\");\n }\n if (version === 0) {\n throw new TypeError(\"Database version cannot be 0\");\n }\n const request = new FDBOpenDBRequest();\n request.source = null;\n queueTask(() => {\n openDatabase(this._databases, this._connectionQueues, name, version, request, (err, connection) => {\n if (err) {\n request.result = undefined;\n request.readyState = \"done\";\n request.error = new DOMException(err.message, err.name);\n const event = new FakeEvent(\"error\", {\n bubbles: true,\n cancelable: true\n });\n event.eventPath = [];\n request.dispatchEvent(event);\n return;\n }\n request.result = connection;\n request.readyState = \"done\";\n const event2 = new FakeEvent(\"success\");\n event2.eventPath = [];\n request.dispatchEvent(event2);\n });\n });\n return request;\n }\n\n // https://w3c.github.io/IndexedDB/#dom-idbfactory-databases\n databases() {\n return Promise.resolve(Array.from(this._databases.entries(), ([name, database]) => {\n const activeVersionChangeConnection = database.connections.find(connection => connection._runningVersionchangeTransaction);\n // If a versionchange is in progress, report the old version. See `get-databases.any.js` test:\n // \"The result of databases() should contain the versions of databases at the time of calling,\n // regardless of versionchange transactions currently running.\"\n const version = activeVersionChangeConnection ? activeVersionChangeConnection._oldVersion : database.version;\n return {\n name,\n version\n };\n }).filter(({\n version\n }) => {\n // Ignore newly-created DBs with active versionchange transactions. See `get-databases.any.js` test:\n // \"The result of databases() should be only those databases which have been created at the\n // time of calling, regardless of versionchange transactions currently running.\"\n return version > 0;\n }));\n }\n get [Symbol.toStringTag]() {\n return \"IDBFactory\";\n }\n}\nexport default FDBFactory;","import FDBFactory from \"./FDBFactory.js\";\nconst fakeIndexedDB = new FDBFactory();\nexport default fakeIndexedDB;","import fakeIndexedDB from \"../build/esm/fakeIndexedDB.js\";\nimport FDBCursor from \"../build/esm/FDBCursor.js\";\nimport FDBCursorWithValue from \"../build/esm/FDBCursorWithValue.js\";\nimport FDBDatabase from \"../build/esm/FDBDatabase.js\";\nimport FDBFactory from \"../build/esm/FDBFactory.js\";\nimport FDBIndex from \"../build/esm/FDBIndex.js\";\nimport FDBKeyRange from \"../build/esm/FDBKeyRange.js\";\nimport FDBObjectStore from \"../build/esm/FDBObjectStore.js\";\nimport FDBOpenDBRequest from \"../build/esm/FDBOpenDBRequest.js\";\nimport FDBRecord from \"../build/esm/FDBRecord.js\";\nimport FDBRequest from \"../build/esm/FDBRequest.js\";\nimport FDBTransaction from \"../build/esm/FDBTransaction.js\";\nimport FDBVersionChangeEvent from \"../build/esm/FDBVersionChangeEvent.js\";\n\n// http://stackoverflow.com/a/33268326/786644 - works in browser, worker, and Node.js\nvar globalVar =\n typeof window !== \"undefined\"\n ? window\n : typeof WorkerGlobalScope !== \"undefined\"\n ? self\n : typeof global !== \"undefined\"\n ? global\n : Function(\"return this;\")();\n\n// Partly match the native behavior for `globalThis.indexedDB`, `globalThis.IDBCursor`, etc.\n// Per the IDL, `indexedDB` is readonly but the others are readwrite. For us, though, we want it to still\n// be overwritable with `globalThis.<global> = ...`, so we make them all readwrite.\n// https://w3c.github.io/IndexedDB/#idl-index\nconst createPropertyDescriptor = (value) => {\n return {\n value,\n enumerable: false,\n configurable: true,\n writable: true,\n };\n};\n\nObject.defineProperties(globalVar, {\n indexedDB: createPropertyDescriptor(fakeIndexedDB),\n IDBCursor: createPropertyDescriptor(FDBCursor),\n IDBCursorWithValue: createPropertyDescriptor(FDBCursorWithValue),\n IDBDatabase: createPropertyDescriptor(FDBDatabase),\n IDBFactory: createPropertyDescriptor(FDBFactory),\n IDBIndex: createPropertyDescriptor(FDBIndex),\n IDBKeyRange: createPropertyDescriptor(FDBKeyRange),\n IDBObjectStore: createPropertyDescriptor(FDBObjectStore),\n IDBOpenDBRequest: createPropertyDescriptor(FDBOpenDBRequest),\n IDBRecord: createPropertyDescriptor(FDBRecord),\n IDBRequest: createPropertyDescriptor(FDBRequest),\n IDBTransaction: createPropertyDescriptor(FDBTransaction),\n IDBVersionChangeEvent: createPropertyDescriptor(FDBVersionChangeEvent),\n});\n","/**\n * Interactive prompt helpers using @inquirer/prompts.\n *\n * These are only used in interactive (TTY) flows.\n * AI agents and CI should bypass prompts by passing all values via flags/env vars.\n */\n\nimport { select, input, password, confirm, checkbox, search } from '@inquirer/prompts'\n\nexport { select, input, password, confirm, checkbox, search }\n\n/**\n * Prompt user to pick from a list of items.\n * Returns the value of the selected choice.\n */\nexport async function promptSelect<T>(\n message: string,\n choices: Array<{ name: string; value: T; description?: string }>\n): Promise<T> {\n return select({ message, choices })\n}\n\n/**\n * Prompt user to pick multiple items from a list.\n * Returns array of selected values.\n */\nexport async function promptCheckbox<T>(\n message: string,\n choices: Array<{ name: string; value: T; checked?: boolean }>\n): Promise<T[]> {\n return checkbox({ message, choices })\n}\n\n/**\n * Prompt user to search and pick from a large list.\n * Type-ahead fuzzy filtering — best for docs (could be hundreds).\n */\nexport async function promptSearch<T>(\n message: string,\n choices: Array<{ name: string; value: T; description?: string }>\n): Promise<T> {\n return search({\n message,\n source: async (term) => {\n if (!term) return choices\n const lower = term.toLowerCase()\n return choices.filter((c) => c.name.toLowerCase().includes(lower))\n },\n })\n}\n\n/**\n * Prompt for text input. Returns trimmed string.\n */\nexport async function promptInput(message: string, required = true): Promise<string> {\n return input({\n message,\n validate: required ? (v) => (v.trim() ? true : 'Required') : undefined,\n })\n}\n\n/**\n * Prompt for a password (masked input).\n */\nexport async function promptPassword(message: string): Promise<string> {\n return password({\n message,\n mask: '*',\n validate: (v) => (v ? true : 'Required'),\n })\n}\n\n/**\n * Prompt for yes/no confirmation.\n */\nexport async function promptConfirm(message: string, defaultValue = true): Promise<boolean> {\n return confirm({ message, default: defaultValue })\n}\n","/**\n * arbi login [--email <email>] [--password <password>]\n *\n * Authenticates via SDK, stores signing key.\n * If email/password not provided via flags or env vars, prompts interactively.\n * After login, shows interactive workspace picker.\n */\n\nimport { Command } from 'commander'\nimport 'fake-indexeddb/auto'\nimport { createArbiClient } from '@arbidocs/sdk'\nimport { requireConfig, saveCredentials, updateConfig } from '../config.js'\nimport { promptInput, promptPassword, promptSelect } from '../prompts.js'\n\nexport function registerLoginCommand(program: Command): void {\n program\n .command('login')\n .description('Log in to ARBI')\n .option('-e, --email <email>', 'Email address (or ARBI_EMAIL env var)')\n .option('-p, --password <password>', 'Password (or ARBI_PASSWORD env var)')\n .option('-w, --workspace <id>', 'Workspace ID to select after login')\n .action(async (opts: { email?: string; password?: string; workspace?: string }) => {\n const config = requireConfig()\n\n // Resolve credentials: flags > env vars > interactive prompt\n const email = opts.email || process.env.ARBI_EMAIL || (await promptInput('Email'))\n const pw = opts.password || process.env.ARBI_PASSWORD || (await promptPassword('Password'))\n\n const arbi = createArbiClient({\n baseUrl: config.baseUrl,\n deploymentDomain: config.deploymentDomain,\n credentials: 'omit',\n })\n\n await arbi.crypto.initSodium()\n\n try {\n const result = await arbi.auth.login({ email, password: pw })\n\n saveCredentials({\n email,\n signingPrivateKeyBase64: arbi.crypto.bytesToBase64(result.signingPrivateKey),\n serverSessionKeyBase64: arbi.crypto.bytesToBase64(result.serverSessionKey),\n })\n\n const { data: workspaces } = await arbi.fetch.GET('/api/user/workspaces')\n const wsList = workspaces || []\n\n console.log(`Logged in as ${email}`)\n\n if (wsList.length === 0) {\n console.log('No workspaces found.')\n return\n }\n\n // If workspace specified via flag, select it directly\n if (opts.workspace) {\n const ws = wsList.find((w) => w.external_id === opts.workspace)\n if (!ws) {\n console.error(`Workspace ${opts.workspace} not found.`)\n process.exit(1)\n }\n updateConfig({ selectedWorkspaceId: ws.external_id })\n console.log(`Workspace: ${ws.name} (${ws.external_id})`)\n return\n }\n\n // Auto-select if only one workspace\n if (wsList.length === 1) {\n updateConfig({ selectedWorkspaceId: wsList[0].external_id })\n console.log(`Workspace: ${wsList[0].name} (${wsList[0].external_id})`)\n return\n }\n\n // Interactive workspace selection\n const choices = wsList.map((ws) => {\n const totalDocs = ws.shared_document_count + ws.private_document_count\n return {\n name: `${ws.name} (${totalDocs} docs)`,\n value: ws.external_id,\n description: ws.external_id,\n }\n })\n\n const selected = await promptSelect('Select workspace', choices)\n updateConfig({ selectedWorkspaceId: selected })\n const ws = wsList.find((w) => w.external_id === selected)!\n console.log(`Workspace: ${ws.name} (${selected})`)\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err)\n console.error(`Login failed: ${msg}`)\n process.exit(1)\n }\n })\n}\n","/**\n * arbi register — interactive registration\n * arbi register --non-interactive [opts] — CI/automation mode (requires SUPPORT_API_KEY)\n *\n * Interactive mode:\n * 1. Prompt for email\n * 2. Enter an invitation code, or request a verification email\n * 3. Set password + name\n * 4. On success, offer to log in immediately\n *\n * Non-interactive mode:\n * All fields via flags / env vars, verification code fetched via SUPPORT_API_KEY.\n */\n\nimport { Command } from 'commander'\nimport 'fake-indexeddb/auto'\nimport { createArbiClient } from '@arbidocs/sdk'\nimport { requireConfig, saveCredentials, updateConfig } from '../config.js'\nimport { promptInput, promptPassword, promptConfirm, promptSelect } from '../prompts.js'\n\nconst CENTRAL_API_URL = 'https://central.arbi.work'\n\n// ── CI verification code fetch ───────────────────────────────────────────────\n\nasync function getVerificationCode(email: string, apiKey: string): Promise<string> {\n const params = new URLSearchParams({ email })\n const res = await fetch(`${CENTRAL_API_URL}/license-management/verify-ci?${params.toString()}`, {\n method: 'GET',\n headers: { 'x-api-key': apiKey },\n })\n\n if (!res.ok) {\n const body = await res.text().catch(() => '')\n throw new Error(`Failed to get verification code: ${res.status} ${body}`)\n }\n\n const data = (await res.json()) as { verification_words?: string[]; verification_code?: string }\n const words = data?.verification_words ?? data?.verification_code ?? null\n if (!words) throw new Error('No verification code in response')\n\n return Array.isArray(words) ? words.join(' ') : String(words)\n}\n\n// ── Command ──────────────────────────────────────────────────────────────────\n\nexport function registerRegisterCommand(program: Command): void {\n program\n .command('register')\n .description('Register a new ARBI account')\n .option('--non-interactive', 'CI/automation mode (requires SUPPORT_API_KEY env var)')\n .option('-e, --email <email>', 'Email address (or ARBI_EMAIL env var)')\n .option('-p, --password <password>', 'Password (or ARBI_PASSWORD env var)')\n .option('--first-name <name>', 'First name')\n .option('--last-name <name>', 'Last name')\n .action(\n async (opts: {\n nonInteractive?: boolean\n email?: string\n password?: string\n firstName?: string\n lastName?: string\n }) => {\n const config = requireConfig()\n\n if (opts.nonInteractive) {\n await nonInteractiveRegister(config, opts)\n } else {\n await interactiveRegister(config, opts)\n }\n }\n )\n}\n\n// ── Interactive mode ─────────────────────────────────────────────────────────\n\nasync function interactiveRegister(\n config: { baseUrl: string; deploymentDomain: string },\n opts: { email?: string; password?: string; firstName?: string; lastName?: string }\n) {\n // 1. Email\n const email = opts.email || (await promptInput('Email'))\n\n const arbi = createArbiClient({\n baseUrl: config.baseUrl,\n deploymentDomain: config.deploymentDomain,\n credentials: 'omit',\n })\n await arbi.crypto.initSodium()\n\n // 2. Verification code — enter existing or request one\n const codeMethod = await promptSelect('Verification method', [\n { name: 'I have an invitation code', value: 'code' },\n { name: 'Send me a verification email', value: 'email' },\n ])\n\n let verificationCode: string\n if (codeMethod === 'code') {\n verificationCode = await promptInput('Invitation code')\n } else {\n console.log('Sending verification email...')\n const verifyResponse = await arbi.fetch.POST('/api/user/verify-email', {\n body: { email },\n })\n if (verifyResponse.error) {\n console.error(`Failed to send verification email: ${JSON.stringify(verifyResponse.error)}`)\n process.exit(1)\n }\n console.log('Verification email sent. Check your inbox.')\n verificationCode = await promptInput('Verification code')\n }\n\n // 3. Password\n const password = opts.password || (await promptPassword('Password'))\n const confirmPw = await promptPassword('Confirm password')\n if (password !== confirmPw) {\n console.error('Passwords do not match.')\n process.exit(1)\n }\n\n // 4. Name\n const firstName = opts.firstName || (await promptInput('First name', false)) || 'User'\n const lastName = opts.lastName || (await promptInput('Last name', false)) || ''\n\n // 5. Register\n try {\n await arbi.auth.register({\n email,\n password,\n verificationCode,\n firstName,\n lastName,\n })\n console.log(`\\nRegistered successfully as ${email}`)\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err)\n console.error(`Registration failed: ${msg}`)\n process.exit(1)\n }\n\n // 6. Offer to log in\n const doLogin = await promptConfirm('Log in now?')\n if (doLogin) {\n try {\n const loginResult = await arbi.auth.login({ email, password })\n saveCredentials({\n email,\n signingPrivateKeyBase64: arbi.crypto.bytesToBase64(loginResult.signingPrivateKey),\n serverSessionKeyBase64: arbi.crypto.bytesToBase64(loginResult.serverSessionKey),\n })\n\n const { data: workspaces } = await arbi.fetch.GET('/api/user/workspaces')\n const wsList = workspaces || []\n\n console.log(`Logged in as ${email}`)\n if (wsList.length === 1) {\n updateConfig({ selectedWorkspaceId: wsList[0].external_id })\n console.log(`Workspace: ${wsList[0].name} (${wsList[0].external_id})`)\n } else if (wsList.length > 1) {\n const choices = wsList.map((ws) => {\n const totalDocs = ws.shared_document_count + ws.private_document_count\n return {\n name: `${ws.name} (${totalDocs} docs)`,\n value: ws.external_id,\n description: ws.external_id,\n }\n })\n const selected = await promptSelect('Select workspace', choices)\n updateConfig({ selectedWorkspaceId: selected })\n const ws = wsList.find((w) => w.external_id === selected)!\n console.log(`Workspace: ${ws.name} (${selected})`)\n }\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err)\n console.error(`Login failed: ${msg}`)\n console.error('You can log in later with: arbi login')\n }\n }\n}\n\n// ── Non-interactive mode ─────────────────────────────────────────────────────\n\nasync function nonInteractiveRegister(\n config: { baseUrl: string; deploymentDomain: string },\n opts: { email?: string; password?: string; firstName?: string; lastName?: string }\n) {\n const email = opts.email || process.env.ARBI_EMAIL\n const password = opts.password || process.env.ARBI_PASSWORD\n const supportApiKey = process.env.SUPPORT_API_KEY\n\n if (!email) {\n console.error('Email required. Use --email <email> or set ARBI_EMAIL')\n process.exit(1)\n }\n if (!password) {\n console.error('Password required. Use --password <password> or set ARBI_PASSWORD')\n process.exit(1)\n }\n if (!supportApiKey) {\n console.error('SUPPORT_API_KEY env var is required for --non-interactive registration')\n process.exit(1)\n }\n\n const arbi = createArbiClient({\n baseUrl: config.baseUrl,\n deploymentDomain: config.deploymentDomain,\n credentials: 'omit',\n })\n await arbi.crypto.initSodium()\n\n // Request verification email\n const verifyResponse = await arbi.fetch.POST('/api/user/verify-email', {\n body: { email },\n })\n if (verifyResponse.error) {\n console.error(`verify-email failed: ${JSON.stringify(verifyResponse.error)}`)\n process.exit(1)\n }\n\n // Fetch code from CI endpoint\n const verificationCode = await getVerificationCode(email, supportApiKey)\n\n // Register\n try {\n await arbi.auth.register({\n email,\n password,\n verificationCode,\n firstName: opts.firstName ?? 'Test',\n lastName: opts.lastName ?? 'User',\n })\n console.log(`Registered: ${email}`)\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err)\n console.error(`Registration failed: ${msg}`)\n process.exit(1)\n }\n}\n","/**\n * arbi logout\n */\n\nimport { Command } from 'commander'\nimport { deleteCredentials, updateConfig } from '../config.js'\n\nexport function registerLogoutCommand(program: Command): void {\n program\n .command('logout')\n .description('Log out of ARBI')\n .action(() => {\n deleteCredentials()\n updateConfig({ selectedWorkspaceId: undefined })\n console.log('Logged out.')\n })\n}\n","/**\n * arbi status\n *\n * Shows current config + login state (no API calls).\n */\n\nimport { Command } from 'commander'\nimport { getConfig, getCredentials } from '../config.js'\n\nexport function registerStatusCommand(program: Command): void {\n program\n .command('status')\n .description('Show current configuration and login status')\n .action(() => {\n const config = getConfig()\n const creds = getCredentials()\n\n if (!config?.baseUrl) {\n console.log('Not configured. Run: arbi config set-url <url>')\n return\n }\n\n console.log(`Server: ${config.baseUrl}`)\n\n if (creds) {\n console.log(`User: ${creds.email}`)\n } else {\n console.log('User: (not logged in)')\n }\n\n if (config.selectedWorkspaceId) {\n console.log(`Workspace: ${config.selectedWorkspaceId}`)\n } else {\n console.log('Workspace: (none selected)')\n }\n })\n}\n","/**\n * Shared CLI helpers — eliminates boilerplate across all commands.\n *\n * Error handling wraps core's throwing functions with process.exit(1).\n * Auth/workspace resolution delegates to core via the CLI's store instance.\n * Table formatting and JSON parsing are CLI-specific.\n */\n\nimport {\n ArbiError,\n resolveAuth as coreResolveAuth,\n resolveWorkspace as coreResolveWorkspace,\n type AuthContext,\n type WorkspaceContext,\n} from '@arbidocs/core'\nimport { store } from './config.js'\n\n// Re-export context types for convenience\nexport type { AuthContext, WorkspaceContext }\n\n// ── Error handling ────────────────────────────────────────────────────────────\n\n/**\n * Wrap a command action — catches errors, formats message, exits.\n * Every command handler should use this instead of manual try/catch.\n */\nexport function runAction(fn: () => Promise<void>): () => Promise<void> {\n return async () => {\n try {\n await fn()\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err)\n console.error(`Error: ${msg}`)\n process.exit(1)\n }\n }\n}\n\n// ── Auth & workspace resolution ───────────────────────────────────────────────\n\n/**\n * Authenticate and return the SDK client + config.\n * Delegates to core, catches ArbiError for CLI exit behavior.\n */\nexport async function resolveAuth(): Promise<AuthContext> {\n try {\n return await coreResolveAuth(store)\n } catch (err) {\n if (err instanceof ArbiError) {\n console.error(err.message)\n process.exit(1)\n }\n throw err\n }\n}\n\n/**\n * Authenticate, resolve workspace, and set up headers.\n * Delegates to core, catches ArbiError for CLI exit behavior.\n */\nexport async function resolveWorkspace(workspaceOpt?: string): Promise<WorkspaceContext> {\n try {\n return await coreResolveWorkspace(store, workspaceOpt)\n } catch (err) {\n if (err instanceof ArbiError) {\n console.error(err.message)\n process.exit(1)\n }\n throw err\n }\n}\n\n// ── Table formatting ──────────────────────────────────────────────────────────\n\nexport interface Column {\n header: string\n width: number\n value: (row: Record<string, unknown>) => string\n}\n\n/**\n * Print a formatted table with header + rows.\n * Handles truncation to column width and padding.\n */\nexport function printTable<T extends Record<string, unknown>>(columns: Column[], rows: T[]): void {\n // Header\n console.log(columns.map((c) => c.header.padEnd(c.width)).join(''))\n\n // Rows\n for (const row of rows) {\n console.log(\n columns\n .map((c) => {\n const val = c.value(row as Record<string, unknown>)\n return val.slice(0, c.width - 2).padEnd(c.width)\n })\n .join('')\n )\n }\n}\n\n// ── JSON parsing ──────────────────────────────────────────────────────────────\n\n/**\n * Parse a JSON string argument with a helpful error message.\n */\nexport function parseJsonArg<T = Record<string, unknown>>(input: string, example: string): T {\n try {\n return JSON.parse(input) as T\n } catch {\n console.error(`Invalid JSON. Example: ${example}`)\n process.exit(1)\n }\n}\n","/**\n * arbi workspaces — list workspaces\n * arbi workspace select/create/delete/update — workspace CRUD\n * arbi workspace users/add-user/remove-user — user management\n * arbi workspace set-role/copy — role & copy operations\n */\n\nimport { Command } from 'commander'\nimport { workspaces } from '@arbidocs/core'\nimport { runAction, resolveAuth, resolveWorkspace, printTable, parseJsonArg } from '../helpers.js'\nimport { updateConfig } from '../config.js'\nimport { promptSelect } from '../prompts.js'\n\nexport function registerWorkspacesCommand(program: Command): void {\n program\n .command('workspaces')\n .description('List workspaces')\n .action(\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const data = await workspaces.listWorkspaces(arbi)\n\n if (data.length === 0) {\n console.log('No workspaces found.')\n return\n }\n\n printTable(\n [\n { header: 'ID', width: 24, value: (r) => r.external_id as string },\n { header: 'NAME', width: 30, value: (r) => r.name as string },\n {\n header: 'DOCS',\n width: 6,\n value: (r) =>\n String((r.shared_document_count as number) + (r.private_document_count as number)),\n },\n {\n header: 'ROLE',\n width: 10,\n value: (r) => (r.users as { role: string }[])?.[0]?.role ?? '',\n },\n ],\n data\n )\n })\n )\n\n const workspace = program.command('workspace').description('Workspace management')\n\n workspace\n .command('select [id]')\n .description('Select active workspace (interactive picker if no ID given)')\n .action((id?: string) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const data = await workspaces.listWorkspaces(arbi)\n\n if (data.length === 0) {\n console.log('No workspaces found.')\n return\n }\n\n let selectedId: string\n if (id) {\n const ws = data.find((w) => w.external_id === id)\n if (!ws) {\n console.error(`Workspace ${id} not found.`)\n console.error('Available workspaces:')\n for (const w of data) console.error(` ${w.external_id} ${w.name}`)\n process.exit(1)\n }\n selectedId = id\n } else {\n // Interactive picker\n const choices = data.map((ws) => {\n const totalDocs = ws.shared_document_count + ws.private_document_count\n return {\n name: `${ws.name} (${totalDocs} docs)`,\n value: ws.external_id as string,\n description: ws.external_id as string,\n }\n })\n selectedId = await promptSelect('Select workspace', choices)\n }\n\n updateConfig({ selectedWorkspaceId: selectedId })\n const ws = data.find((w) => w.external_id === selectedId)!\n console.log(`Selected: ${ws.name} (${selectedId})`)\n })()\n )\n\n workspace\n .command('create <name>')\n .description('Create a new workspace')\n .option('-d, --description <text>', 'Workspace description')\n .option('--public', 'Make workspace public', false)\n .action((name: string, opts: { description?: string; public?: boolean }) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const data = await workspaces.createWorkspace(\n arbi,\n name,\n opts.description,\n opts.public ?? false\n )\n console.log(`Created: ${data.name} (${data.external_id})`)\n })()\n )\n\n workspace\n .command('delete <id>')\n .description('Delete a workspace')\n .action((id: string) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const data = await workspaces.deleteWorkspace(arbi, id)\n console.log(data?.detail ?? `Deleted workspace ${id}`)\n })()\n )\n\n workspace\n .command('update <id> <json>')\n .description('Update workspace properties (pass JSON)')\n .action((id: string, json: string) =>\n runAction(async () => {\n const body = parseJsonArg(json, 'arbi workspace update wrk-123 \\'{\"name\": \"New Name\"}\\'')\n const { arbi } = await resolveWorkspace(id)\n const data = await workspaces.updateWorkspace(arbi, id, body)\n console.log(`Updated: ${data.name} (${data.external_id})`)\n })()\n )\n\n workspace\n .command('users')\n .description('List users in the active workspace')\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .action((opts: { workspace?: string }) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace(opts.workspace)\n const data = await workspaces.listWorkspaceUsers(arbi, workspaceId)\n\n if (data.length === 0) {\n console.log('No users found.')\n return\n }\n\n type User = {\n external_id?: string\n email?: string\n given_name?: string\n family_name?: string\n }\n printTable(\n [\n {\n header: 'USER_ID',\n width: 16,\n value: (r) => (r.user as User)?.external_id ?? '',\n },\n {\n header: 'NAME',\n width: 20,\n value: (r) => {\n const u = r.user as User\n return [u?.given_name, u?.family_name].filter(Boolean).join(' ') || ''\n },\n },\n {\n header: 'EMAIL',\n width: 30,\n value: (r) => (r.user as User)?.email ?? '',\n },\n { header: 'ROLE', width: 14, value: (r) => r.role as string },\n { header: 'DOCS', width: 6, value: (r) => String(r.document_count) },\n { header: 'CONVS', width: 6, value: (r) => String(r.conversation_count) },\n ],\n data\n )\n })()\n )\n\n workspace\n .command('add-user <emails...>')\n .description('Add users to the active workspace')\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .option('-r, --role <role>', 'Role: owner, collaborator, guest', 'collaborator')\n .action((emails: string[], opts: { workspace?: string; role?: string }) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace(opts.workspace)\n const role = (opts.role ?? 'collaborator') as 'owner' | 'collaborator' | 'guest'\n const data = await workspaces.addWorkspaceUsers(arbi, workspaceId, emails, role)\n for (const u of data) console.log(`Added: ${u.user.email} as ${u.role}`)\n })()\n )\n\n workspace\n .command('remove-user <user-ids...>')\n .description('Remove users from the active workspace')\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .action((userIds: string[], opts: { workspace?: string }) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace(opts.workspace)\n await workspaces.removeWorkspaceUsers(arbi, workspaceId, userIds)\n console.log(`Removed ${userIds.length} user(s).`)\n })()\n )\n\n workspace\n .command('set-role <role> <user-ids...>')\n .description('Update user roles (owner, collaborator, guest)')\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .action((role: string, userIds: string[], opts: { workspace?: string }) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace(opts.workspace)\n const data = await workspaces.setUserRole(\n arbi,\n workspaceId,\n userIds,\n role as 'owner' | 'collaborator' | 'guest'\n )\n for (const u of data) console.log(`Updated: ${u.user.email} → ${u.role}`)\n })()\n )\n\n workspace\n .command('copy <target-workspace-id> <doc-ids...>')\n .description('Copy documents to another workspace')\n .option('-w, --workspace <id>', 'Source workspace ID (defaults to selected workspace)')\n .action((targetId: string, docIds: string[], opts: { workspace?: string }) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace(opts.workspace)\n const data = await workspaces.copyDocuments(arbi, workspaceId, targetId, docIds)\n console.log(`${data.detail} (${data.documents_copied} document(s) copied)`)\n })()\n )\n}\n","/**\n * arbi docs — list documents\n * arbi doc get [ids...] — get doc details (picker if no IDs)\n * arbi doc delete [ids...] — delete docs (picker if no IDs)\n * arbi doc update [json] — update docs (form if no JSON)\n * arbi doc upload-url <urls...> — upload from URLs\n * arbi doc parsed [doc-id] <stage> — parsed content (picker if no doc ID)\n */\n\nimport { Command } from 'commander'\nimport { documents } from '@arbidocs/core'\nimport { runAction, resolveWorkspace, printTable, parseJsonArg } from '../helpers.js'\nimport { promptSearch, promptCheckbox, promptInput, promptSelect } from '../prompts.js'\n\nfunction formatSize(bytes: number | null | undefined): string {\n if (!bytes) return '-'\n if (bytes < 1024) return `${bytes} B`\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`\n}\n\n/** Fetch workspace docs and return as picker choices */\nasync function fetchDocChoices(\n arbi: Awaited<ReturnType<typeof resolveWorkspace>>['arbi'],\n workspaceId: string\n) {\n const data = await documents.listDocuments(arbi, workspaceId)\n if (data.length === 0) {\n console.log('No documents found.')\n process.exit(0)\n }\n return data.map((d) => ({\n name: `${d.file_name ?? 'Unnamed'} (${d.status})`,\n value: d.external_id as string,\n description: d.external_id as string,\n }))\n}\n\nexport function registerDocsCommand(program: Command): void {\n program\n .command('docs')\n .description('List documents in the active workspace')\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .action((opts: { workspace?: string }) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace(opts.workspace)\n const data = await documents.listDocuments(arbi, workspaceId)\n\n if (data.length === 0) {\n console.log('No documents found.')\n return\n }\n\n printTable(\n [\n { header: 'ID', width: 24, value: (r) => r.external_id as string },\n { header: 'NAME', width: 36, value: (r) => (r.file_name as string) ?? 'Unnamed' },\n { header: 'STATUS', width: 14, value: (r) => (r.status as string) ?? '' },\n { header: 'SIZE', width: 10, value: (r) => formatSize(r.file_size as number | null) },\n ],\n data\n )\n })()\n )\n\n const doc = program.command('doc').description('Document management')\n\n doc\n .command('get [ids...]')\n .description('Get document details (interactive picker if no IDs given)')\n .action((ids?: string[]) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace()\n let docIds = ids && ids.length > 0 ? ids : undefined\n if (!docIds) {\n const choices = await fetchDocChoices(arbi, workspaceId)\n const selected = await promptCheckbox('Select documents', choices)\n if (selected.length === 0) return\n docIds = selected\n }\n const data = await documents.getDocuments(arbi, docIds)\n console.log(JSON.stringify(data, null, 2))\n })()\n )\n\n doc\n .command('delete [ids...]')\n .description('Delete documents (interactive picker if no IDs given)')\n .action((ids?: string[]) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace()\n let docIds = ids && ids.length > 0 ? ids : undefined\n if (!docIds) {\n const choices = await fetchDocChoices(arbi, workspaceId)\n const selected = await promptCheckbox('Select documents to delete', choices)\n if (selected.length === 0) return\n docIds = selected\n }\n await documents.deleteDocuments(arbi, docIds)\n console.log(`Deleted ${docIds.length} document(s).`)\n })()\n )\n\n doc\n .command('update [json]')\n .description('Update documents (interactive form if no JSON given)')\n .action((json?: string) =>\n runAction(async () => {\n if (json) {\n const parsed = parseJsonArg<\n Record<string, unknown>[] | { documents: Record<string, unknown>[] }\n >(json, 'arbi doc update \\'[{\"external_id\": \"doc-123\", \"shared\": true}]\\'')\n const docs = Array.isArray(parsed) ? parsed : parsed.documents\n\n const { arbi } = await resolveWorkspace()\n const data = await documents.updateDocuments(arbi, docs)\n console.log(`Updated ${data.length} document(s).`)\n } else {\n // Interactive: pick a doc, then ask what to change\n const { arbi, workspaceId } = await resolveWorkspace()\n const choices = await fetchDocChoices(arbi, workspaceId)\n const docId = await promptSearch('Select document to update', choices)\n\n const field = await promptSelect('Field to update', [\n { name: 'Title', value: 'title' },\n { name: 'Shared', value: 'shared' },\n { name: 'Author', value: 'author' },\n { name: 'Abstract', value: 'abstract' },\n { name: 'Date', value: 'date' },\n ])\n\n let value: unknown\n if (field === 'shared') {\n value = await promptSelect('Shared?', [\n { name: 'Yes', value: true },\n { name: 'No', value: false },\n ])\n } else if (field === 'date') {\n value = (await promptInput('Date (YYYY-MM-DD)', false)) || null\n } else {\n value = await promptInput(`${field.charAt(0).toUpperCase() + field.slice(1)}`)\n }\n\n const data = await documents.updateDocuments(arbi, [\n { external_id: docId, [field]: value },\n ])\n console.log(`Updated ${data.length} document(s).`)\n }\n })()\n )\n\n doc\n .command('upload-url <urls...>')\n .description('Upload documents from URLs')\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .option('--shared', 'Make documents shared', false)\n .action((urls: string[], opts: { workspace?: string; shared?: boolean }) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace(opts.workspace)\n const data = await documents.uploadUrl(arbi, urls, workspaceId, opts.shared ?? false)\n console.log(`Uploaded: ${data.doc_ext_ids.join(', ')}`)\n if (data.duplicates && data.duplicates.length > 0) {\n console.log(`Duplicates: ${data.duplicates.join(', ')}`)\n }\n })()\n )\n\n doc\n .command('parsed [doc-id] [stage]')\n .description('Get parsed document content (stage: marker, subchunk, final)')\n .action((docId?: string, stage?: string) =>\n runAction(async () => {\n const { arbi, accessToken, workspaceKeyHeader, workspaceId, config } =\n await resolveWorkspace()\n\n // Pick doc if not given\n if (!docId) {\n const choices = await fetchDocChoices(arbi, workspaceId)\n docId = await promptSearch('Select document', choices)\n }\n\n // Pick stage if not given\n const validStages = ['marker', 'subchunk', 'final']\n if (!stage) {\n stage = await promptSelect('Parsing stage', [\n { name: 'Final (processed)', value: 'final' },\n { name: 'Subchunk', value: 'subchunk' },\n { name: 'Marker (raw)', value: 'marker' },\n ])\n } else if (!validStages.includes(stage)) {\n console.error(`Invalid stage: ${stage}. Must be one of: ${validStages.join(', ')}`)\n process.exit(1)\n }\n\n const data = await documents.getParsedContent(\n config.baseUrl,\n accessToken,\n workspaceKeyHeader,\n docId,\n stage\n )\n console.log(JSON.stringify(data, null, 2))\n })()\n )\n}\n","/**\n * arbi upload <file...> [--workspace <id>] [--watch]\n */\n\nimport { Command } from 'commander'\nimport fs from 'node:fs'\nimport path from 'node:path'\nimport { isMessageType, type WsTaskUpdateMessage } from '@arbidocs/sdk'\nimport { documents, connectWebSocket } from '@arbidocs/core'\nimport { runAction, resolveWorkspace } from '../helpers.js'\n\nexport function registerUploadCommand(program: Command): void {\n program\n .command('upload <files...>')\n .description('Upload documents to the active workspace')\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .option('-W, --watch', 'Watch document processing progress after upload')\n .action((files: string[], opts: { workspace?: string; watch?: boolean }) =>\n runAction(async () => {\n // Validate files exist before authenticating\n for (const f of files) {\n if (!fs.existsSync(f)) {\n console.error(`File not found: ${f}`)\n process.exit(1)\n }\n }\n\n const { config, accessToken, workspaceKeyHeader, workspaceId } = await resolveWorkspace(\n opts.workspace\n )\n\n // Track uploaded doc IDs and their file names for --watch\n const uploadedDocs = new Map<string, string>()\n\n for (const filePath of files) {\n const fileBuffer = fs.readFileSync(filePath)\n const fileName = path.basename(filePath)\n\n const result = await documents.uploadFile(\n config.baseUrl,\n accessToken,\n workspaceKeyHeader,\n workspaceId,\n new Blob([fileBuffer]),\n fileName\n )\n\n console.log(`Uploaded: ${fileName} (${result.doc_ext_ids.join(', ')})`)\n if (result.duplicates && result.duplicates.length > 0) {\n console.log(` Duplicates: ${result.duplicates.join(', ')}`)\n }\n\n for (const id of result.doc_ext_ids) uploadedDocs.set(id, fileName)\n }\n\n // --watch: monitor processing via WebSocket\n if (opts.watch && uploadedDocs.size > 0) {\n const pending = new Set(uploadedDocs.keys())\n console.log(`\\nWatching ${pending.size} document(s)...`)\n\n const conn = await connectWebSocket({\n baseUrl: config.baseUrl,\n accessToken,\n onMessage: (msg) => {\n if (isMessageType<WsTaskUpdateMessage>(msg, 'task_update')) {\n if (!pending.has(msg.doc_ext_id)) return\n console.log(\n ` ${uploadedDocs.get(msg.doc_ext_id) || msg.file_name}: ${msg.status} (${msg.progress}%)`\n )\n if (msg.status === 'completed' || msg.status === 'failed') {\n pending.delete(msg.doc_ext_id)\n if (pending.size === 0) {\n console.log('\\nAll documents processed.')\n conn.close()\n }\n }\n }\n },\n onClose: () => {\n if (pending.size > 0)\n console.log(`\\nConnection closed. ${pending.size} document(s) still processing.`)\n },\n })\n }\n })()\n )\n}\n","/**\n * arbi download [doc-id] [--output <path>]\n *\n * Interactive doc picker if no doc-id given.\n */\n\nimport { Command } from 'commander'\nimport fs from 'node:fs'\nimport path from 'node:path'\nimport { documents } from '@arbidocs/core'\nimport { runAction, resolveWorkspace } from '../helpers.js'\nimport { promptSearch } from '../prompts.js'\n\nexport function registerDownloadCommand(program: Command): void {\n program\n .command('download [doc-id]')\n .description('Download a document (interactive picker if no ID given)')\n .option('-o, --output <path>', 'Output file path')\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .action((docId: string | undefined, opts: { output?: string; workspace?: string }) =>\n runAction(async () => {\n const { arbi, config, accessToken, workspaceKeyHeader, workspaceId } =\n await resolveWorkspace(opts.workspace)\n\n // Pick doc if not given\n if (!docId) {\n const data = await documents.listDocuments(arbi, workspaceId)\n if (data.length === 0) {\n console.log('No documents found.')\n return\n }\n const choices = data.map((d) => ({\n name: `${d.file_name ?? 'Unnamed'} (${d.status})`,\n value: d.external_id as string,\n description: d.external_id as string,\n }))\n docId = await promptSearch('Select document to download', choices)\n }\n\n const res = await documents.downloadDocument(\n config.baseUrl,\n accessToken,\n workspaceKeyHeader,\n docId\n )\n\n let filename = `${docId}`\n const disposition = res.headers.get('content-disposition')\n if (disposition) {\n const match = disposition.match(/filename[*]?=(?:UTF-8''|\"?)([^\";]+)/i)\n if (match) filename = decodeURIComponent(match[1].replace(/\"/g, ''))\n }\n\n const outputPath = opts.output || path.join(process.cwd(), filename)\n const buffer = Buffer.from(await res.arrayBuffer())\n fs.writeFileSync(outputPath, buffer)\n console.log(\n `Downloaded: ${path.basename(outputPath)} (${(buffer.length / (1024 * 1024)).toFixed(1)} MB)`\n )\n })()\n )\n}\n","/**\n * arbi ask \"question\" [--workspace <id>] [--new]\n *\n * Streams SSE response from POST /api/assistant/query.\n * Always includes all workspace documents in retrieval context.\n * Maintains conversation continuity: each response's assistant message ID\n * is saved and sent as parent_message_ext_id in the next query.\n * Use --new to start a fresh conversation.\n */\n\nimport { Command } from 'commander'\nimport { streamSSE, documents, assistant } from '@arbidocs/core'\nimport { runAction, resolveWorkspace } from '../helpers.js'\nimport { getChatSession, updateChatSession, clearChatSession } from '../config.js'\n\nexport function registerAskCommand(program: Command): void {\n program\n .command('ask <question>')\n .description('Ask the RAG assistant a question')\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .option('-c, --config <id>', 'Config ext_id to use (e.g. cfg-xxx)')\n .option('-n, --new', 'Start a new conversation (ignore previous context)')\n .option('-v, --verbose', 'Show agent steps and tool calls')\n .action(\n (\n question: string,\n opts: { workspace?: string; config?: string; new?: boolean; verbose?: boolean }\n ) =>\n runAction(async () => {\n const { arbi, accessToken, workspaceKeyHeader, workspaceId, config } =\n await resolveWorkspace(opts.workspace)\n\n // Load chat session\n const session = getChatSession()\n\n // --new flag clears conversation state\n if (opts.new) {\n clearChatSession()\n session.lastMessageExtId = null\n }\n\n // Always include all workspace documents in retrieval context\n const docs = await documents.listDocuments(arbi, workspaceId)\n const docIds = docs.map((d) => d.external_id as string)\n\n // Query the assistant\n const res = await assistant.queryAssistant({\n baseUrl: config.baseUrl,\n accessToken,\n workspaceKeyHeader,\n workspaceId,\n question,\n docIds,\n parentMessageExtId: session.lastMessageExtId,\n configExtId: opts.config,\n })\n\n const { assistantMessageExtId } = await streamSSE(res, {\n onToken: (content) => process.stdout.write(content),\n onAgentStep: (data) => {\n if (opts.verbose) {\n const focus = data.focus || data.status || ''\n console.error(`\\n[agent] ${focus}`)\n }\n },\n onError: (message) => console.error(`\\nError: ${message}`),\n })\n\n process.stdout.write('\\n')\n\n // Save assistant message ID for conversation continuity\n if (assistantMessageExtId) {\n updateChatSession({ lastMessageExtId: assistantMessageExtId })\n }\n })()\n )\n}\n","/**\n * arbi watch — stream workspace activity in real time\n */\n\nimport { Command } from 'commander'\nimport {\n isMessageType,\n type WsTaskUpdateMessage,\n type WsBatchCompleteMessage,\n type WsErrorMessage,\n} from '@arbidocs/sdk'\nimport { runAction, resolveWorkspace } from '../helpers.js'\nimport { connectWebSocket } from '@arbidocs/core'\n\nfunction timestamp(): string {\n return new Date().toLocaleTimeString('en-GB', { hour12: false })\n}\n\nexport function registerWatchCommand(program: Command): void {\n program\n .command('watch')\n .description('Watch workspace activity in real time')\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .action((opts: { workspace?: string }) =>\n runAction(async () => {\n const { config, accessToken, workspaceId } = await resolveWorkspace(opts.workspace)\n\n console.log(`Watching workspace ${workspaceId}... (Ctrl+C to stop)`)\n\n await connectWebSocket({\n baseUrl: config.baseUrl,\n accessToken,\n onMessage: (msg) => {\n if (isMessageType<WsTaskUpdateMessage>(msg, 'task_update')) {\n console.log(\n `[${timestamp()}] task_update: ${msg.file_name} - ${msg.status} (${msg.progress}%)`\n )\n } else if (isMessageType<WsBatchCompleteMessage>(msg, 'batch_complete')) {\n console.log(\n `[${timestamp()}] batch_complete: ${msg.batch_type} - ${msg.doc_ext_ids.length} docs`\n )\n } else if (isMessageType<WsErrorMessage>(msg, 'error')) {\n console.log(`[${timestamp()}] error: ${msg.message}`)\n } else {\n console.log(`[${timestamp()}] ${msg.type}: ${JSON.stringify(msg)}`)\n }\n },\n onClose: (code, reason) => {\n console.log(`\\nConnection closed (code ${code}${reason ? ': ' + reason : ''})`)\n },\n })\n })()\n )\n}\n","/**\n * arbi contacts — list contacts\n * arbi contacts add [emails] — add contacts (prompt if no emails)\n * arbi contacts remove [ids] — remove contacts (picker if no IDs)\n */\n\nimport { Command } from 'commander'\nimport { contacts as contactOps } from '@arbidocs/core'\nimport { runAction, resolveAuth, printTable } from '../helpers.js'\nimport { promptCheckbox, promptInput } from '../prompts.js'\n\nexport function registerContactsCommand(program: Command): void {\n const contacts = program.command('contacts').description('Manage contacts')\n\n contacts\n .command('list')\n .description('List all contacts')\n .action(\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const data = await contactOps.listContacts(arbi)\n\n if (data.length === 0) {\n console.log('No contacts found.')\n return\n }\n\n type User = { given_name?: string; family_name?: string }\n printTable(\n [\n { header: 'ID', width: 16, value: (r) => r.external_id as string },\n {\n header: 'NAME',\n width: 20,\n value: (r) => {\n const u = r.user as User | null\n return u ? [u.given_name, u.family_name].filter(Boolean).join(' ') : ''\n },\n },\n { header: 'EMAIL', width: 30, value: (r) => r.email as string },\n { header: 'STATUS', width: 18, value: (r) => r.status as string },\n ],\n data\n )\n })\n )\n\n contacts\n .command('add [emails...]')\n .description('Add contacts by email (prompt if no emails given)')\n .action((emails?: string[]) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n if (!emails || emails.length === 0) {\n const input = await promptInput('Email address(es), comma-separated')\n emails = input\n .split(',')\n .map((e) => e.trim())\n .filter(Boolean)\n if (emails.length === 0) return\n }\n const data = await contactOps.addContacts(arbi, emails)\n for (const c of data) {\n console.log(`Added: ${c.email} (${c.external_id}) — ${c.status}`)\n }\n })()\n )\n\n contacts\n .command('remove [ids...]')\n .description('Remove contacts (interactive picker if no IDs given)')\n .action((ids?: string[]) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n let contactIds = ids && ids.length > 0 ? ids : undefined\n if (!contactIds) {\n const data = await contactOps.listContacts(arbi)\n if (data.length === 0) {\n console.log('No contacts found.')\n return\n }\n type User = { given_name?: string; family_name?: string }\n contactIds = await promptCheckbox(\n 'Select contacts to remove',\n data.map((c) => {\n const u = c.user as User | null\n const name = u ? [u.given_name, u.family_name].filter(Boolean).join(' ') : ''\n return {\n name: name ? `${name} (${c.email})` : (c.email as string),\n value: c.external_id as string,\n }\n })\n )\n if (contactIds.length === 0) return\n }\n await contactOps.removeContacts(arbi, contactIds)\n console.log(`Removed ${contactIds.length} contact(s).`)\n })()\n )\n\n // Default action: list\n contacts.action(async () => {\n await contacts.commands.find((c) => c.name() === 'list')!.parseAsync([], { from: 'user' })\n })\n}\n","/**\n * arbi dm list — list DMs / notifications\n * arbi dm send [recipient] [content] — send a DM (picker + prompt if no args)\n * arbi dm read [ids...] — mark messages as read (picker if no IDs)\n * arbi dm delete [ids...] — delete messages (picker if no IDs)\n */\n\nimport { Command } from 'commander'\nimport { dm as dmOps, contacts as contactOps } from '@arbidocs/core'\nimport { runAction, resolveAuth, printTable } from '../helpers.js'\nimport { promptSelect, promptCheckbox, promptInput } from '../prompts.js'\n\nexport function registerDmCommand(program: Command): void {\n const dm = program.command('dm').description('Direct messages')\n\n dm.command('list')\n .description('List all DMs and notifications')\n .action(\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const data = await dmOps.listDMs(arbi)\n\n if (data.length === 0) {\n console.log('No messages found.')\n return\n }\n\n type Sender = { email?: string; given_name?: string; family_name?: string }\n printTable(\n [\n { header: 'ID', width: 16, value: (r) => r.external_id as string },\n { header: 'TYPE', width: 18, value: (r) => r.type as string },\n {\n header: 'FROM',\n width: 22,\n value: (r) => {\n const s = r.sender as Sender | null\n if (!s) return ''\n const name = [s.given_name, s.family_name].filter(Boolean).join(' ')\n return name || s.email || ''\n },\n },\n { header: 'READ', width: 6, value: (r) => (r.read ? 'yes' : 'no') },\n { header: 'CONTENT', width: 40, value: (r) => (r.content as string) ?? '' },\n ],\n data\n )\n })\n )\n\n dm.command('send [recipient] [content]')\n .description('Send a DM (interactive if no args; recipient can be email or user ext_id)')\n .action((recipient?: string, content?: string) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n\n // Pick recipient from contacts if not given\n if (!recipient) {\n const contacts = await contactOps.listContacts(arbi)\n if (contacts.length === 0) {\n console.error('No contacts found. Add contacts first: arbi contacts add <email>')\n process.exit(1)\n }\n type User = { external_id?: string; given_name?: string; family_name?: string }\n recipient = await promptSelect(\n 'Send to',\n contacts.map((c) => {\n const u = c.user as User | null\n const name = u ? [u.given_name, u.family_name].filter(Boolean).join(' ') : ''\n return {\n name: name ? `${name} (${c.email})` : (c.email as string),\n value: u?.external_id ?? (c.external_id as string),\n description: c.email as string,\n }\n })\n )\n }\n\n // Prompt for content if not given\n if (!content) {\n content = await promptInput('Message')\n }\n\n // If recipient looks like an email, resolve to ext_id via contacts\n let recipientExtId = recipient\n if (recipient.includes('@')) {\n const contacts = await contactOps.listContacts(arbi)\n type ContactUser = { external_id?: string }\n const match = contacts.find((c) => c.email === recipient)\n if (!match) {\n console.error(`No contact found with email: ${recipient}`)\n console.error('Add them first: arbi contacts add ' + recipient)\n process.exit(1)\n }\n recipientExtId = (match.user as ContactUser)?.external_id ?? (match.external_id as string)\n }\n\n const data = await dmOps.sendDM(arbi, [{ recipient_ext_id: recipientExtId, content }])\n for (const n of data) {\n console.log(`Sent: ${n.external_id} → ${n.recipient.email}`)\n }\n })()\n )\n\n dm.command('read [ids...]')\n .description('Mark messages as read (interactive picker if no IDs given)')\n .action((ids?: string[]) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n let msgIds = ids && ids.length > 0 ? ids : undefined\n if (!msgIds) {\n const data = await dmOps.listDMs(arbi)\n type Sender = { given_name?: string; family_name?: string; email?: string }\n const unread = data.filter((m) => !m.read)\n if (unread.length === 0) {\n console.log('No unread messages.')\n return\n }\n msgIds = await promptCheckbox(\n 'Select messages to mark as read',\n unread.map((m) => {\n const s = m.sender as Sender | null\n const from = s\n ? [s.given_name, s.family_name].filter(Boolean).join(' ') || s.email || ''\n : ''\n return {\n name: `${from}: ${((m.content as string) ?? '').slice(0, 50)}`,\n value: m.external_id as string,\n }\n })\n )\n if (msgIds.length === 0) return\n }\n const data = await dmOps.markRead(arbi, msgIds)\n console.log(`Marked ${data.length} message(s) as read.`)\n })()\n )\n\n dm.command('delete [ids...]')\n .description('Delete messages (interactive picker if no IDs given)')\n .action((ids?: string[]) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n let msgIds = ids && ids.length > 0 ? ids : undefined\n if (!msgIds) {\n const data = await dmOps.listDMs(arbi)\n if (data.length === 0) {\n console.log('No messages found.')\n return\n }\n type Sender = { given_name?: string; family_name?: string; email?: string }\n msgIds = await promptCheckbox(\n 'Select messages to delete',\n data.map((m) => {\n const s = m.sender as Sender | null\n const from = s\n ? [s.given_name, s.family_name].filter(Boolean).join(' ') || s.email || ''\n : ''\n return {\n name: `${from}: ${((m.content as string) ?? '').slice(0, 50)}`,\n value: m.external_id as string,\n }\n })\n )\n if (msgIds.length === 0) return\n }\n await dmOps.deleteDMs(arbi, msgIds)\n console.log(`Deleted ${msgIds.length} message(s).`)\n })()\n )\n\n // Default action: list\n dm.action(async () => {\n await dm.commands.find((c) => c.name() === 'list')!.parseAsync([], { from: 'user' })\n })\n}\n","/**\n * arbi tags — list tags in workspace\n * arbi tags create [name] — create a tag (form if no name)\n * arbi tags delete [id] — delete a tag (picker if no ID)\n * arbi tags update [id] [json] — update a tag (picker + form if no args)\n */\n\nimport { Command } from 'commander'\nimport { tags as tagOps } from '@arbidocs/core'\nimport { runAction, resolveWorkspace, printTable, parseJsonArg } from '../helpers.js'\nimport { promptSelect, promptInput, promptConfirm } from '../prompts.js'\n\n/** Fetch workspace tags and return as picker choices */\nasync function fetchTagChoices(\n arbi: Awaited<ReturnType<typeof resolveWorkspace>>['arbi'],\n workspaceId: string\n) {\n const data = await tagOps.listTags(arbi, workspaceId)\n if (data.length === 0) {\n console.log('No tags found.')\n process.exit(0)\n }\n return {\n data,\n choices: data.map((t) => ({\n name: `${t.name} (${(t.tag_type as { type?: string })?.type ?? 'unknown'}, ${t.doctag_count} docs)`,\n value: t.external_id as string,\n description: t.external_id as string,\n })),\n }\n}\n\nexport function registerTagsCommand(program: Command): void {\n const tags = program.command('tags').description('Manage tags')\n\n tags\n .command('list')\n .description('List tags in the active workspace')\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .action((opts: { workspace?: string }) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace(opts.workspace)\n const data = await tagOps.listTags(arbi, workspaceId)\n\n if (data.length === 0) {\n console.log('No tags found.')\n return\n }\n\n printTable(\n [\n { header: 'ID', width: 24, value: (r) => r.external_id as string },\n { header: 'NAME', width: 24, value: (r) => r.name as string },\n {\n header: 'TYPE',\n width: 12,\n value: (r) => (r.tag_type as { type?: string })?.type ?? '',\n },\n { header: 'DOCS', width: 6, value: (r) => String(r.doctag_count) },\n { header: 'SHARED', width: 8, value: (r) => (r.shared ? 'yes' : 'no') },\n ],\n data\n )\n })()\n )\n\n tags\n .command('create [name]')\n .description('Create a new tag (interactive form if no name given)')\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .option(\n '-t, --type <type>',\n 'Tag type (checkbox, text, number, select, folder, search, date, assistant)',\n 'checkbox'\n )\n .option('-i, --instruction <text>', 'Tag instruction')\n .option('--shared', 'Make tag shared', false)\n .action(\n (\n name: string | undefined,\n opts: { workspace?: string; type?: string; instruction?: string; shared?: boolean }\n ) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace(opts.workspace)\n\n // Interactive form if name not given\n const interactive = !name\n if (!name) {\n name = await promptInput('Tag name')\n }\n const tagType =\n opts.type ||\n (await promptSelect('Tag type', [\n { name: 'Checkbox', value: 'checkbox' },\n { name: 'Text', value: 'text' },\n { name: 'Number', value: 'number' },\n { name: 'Select', value: 'select' },\n { name: 'Date', value: 'date' },\n { name: 'Folder', value: 'folder' },\n { name: 'Search', value: 'search' },\n { name: 'Assistant', value: 'assistant' },\n ]))\n const instruction = interactive\n ? (opts.instruction ?? ((await promptInput('Instruction (optional)', false)) || null))\n : (opts.instruction ?? null)\n const shared = interactive\n ? opts.shared || (await promptConfirm('Shared?', false))\n : (opts.shared ?? false)\n\n const data = await tagOps.createTag(arbi, {\n name,\n workspaceId,\n tagType: { type: tagType, options: [] },\n instruction,\n shared,\n })\n console.log(`Created: ${data.name} (${data.external_id})`)\n })()\n )\n\n tags\n .command('delete [id]')\n .description('Delete a tag (interactive picker if no ID given)')\n .action((id?: string) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace()\n if (!id) {\n const { choices } = await fetchTagChoices(arbi, workspaceId)\n id = await promptSelect('Select tag to delete', choices)\n }\n const data = await tagOps.deleteTag(arbi, id)\n console.log(data?.detail ?? `Deleted tag ${id}`)\n })()\n )\n\n tags\n .command('update [id] [json]')\n .description('Update a tag (interactive picker + form if no args)')\n .action((id?: string, json?: string) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace()\n if (!id) {\n const { choices } = await fetchTagChoices(arbi, workspaceId)\n id = await promptSelect('Select tag to update', choices)\n }\n\n let body: Record<string, unknown>\n if (json) {\n body = parseJsonArg(json, 'arbi tags update tag-123 \\'{\"name\": \"New Name\"}\\'')\n } else {\n const field = await promptSelect('Field to update', [\n { name: 'Name', value: 'name' },\n { name: 'Instruction', value: 'instruction' },\n { name: 'Shared', value: 'shared' },\n ])\n if (field === 'shared') {\n body = { shared: await promptConfirm('Shared?') }\n } else {\n body = { [field]: await promptInput(field.charAt(0).toUpperCase() + field.slice(1)) }\n }\n }\n\n const data = await tagOps.updateTag(arbi, id, body)\n console.log(`Updated: ${data.name} (${data.external_id})`)\n })()\n )\n\n // Default action: list\n tags.action(async (_opts: Record<string, unknown>, cmd: Command) => {\n await cmd.commands.find((c) => c.name() === 'list')!.parseAsync([], { from: 'user' })\n })\n}\n","/**\n * arbi doctags create [tag-id] [doc-ids...] — assign tag to docs (pickers if no args)\n * arbi doctags delete [tag-id] [doc-ids...] — remove tag from docs (pickers if no args)\n * arbi doctags generate — AI-generate doctags (pickers if no flags)\n */\n\nimport { Command } from 'commander'\nimport { doctags as doctagOps, tags as tagOps, documents } from '@arbidocs/core'\nimport { runAction, resolveWorkspace } from '../helpers.js'\nimport { promptSelect, promptCheckbox } from '../prompts.js'\n\n/** Fetch tags as picker choices */\nasync function pickTag(\n arbi: Awaited<ReturnType<typeof resolveWorkspace>>['arbi'],\n workspaceId: string,\n message = 'Select tag'\n) {\n const data = await tagOps.listTags(arbi, workspaceId)\n if (data.length === 0) {\n console.log('No tags found.')\n process.exit(0)\n }\n return promptSelect(\n message,\n data.map((t) => ({\n name: `${t.name} (${(t.tag_type as { type?: string })?.type ?? ''})`,\n value: t.external_id as string,\n description: t.external_id as string,\n }))\n )\n}\n\n/** Fetch docs as checkbox choices */\nasync function pickDocs(\n arbi: Awaited<ReturnType<typeof resolveWorkspace>>['arbi'],\n workspaceId: string,\n message = 'Select documents'\n) {\n const data = await documents.listDocuments(arbi, workspaceId)\n if (data.length === 0) {\n console.log('No documents found.')\n process.exit(0)\n }\n return promptCheckbox(\n message,\n data.map((d) => ({\n name: `${d.file_name ?? 'Unnamed'} (${d.status})`,\n value: d.external_id as string,\n }))\n )\n}\n\nexport function registerDoctagsCommand(program: Command): void {\n const doctagsCmd = program.command('doctags').description('Manage document tags (doctags)')\n\n doctagsCmd\n .command('create [tag-id] [doc-ids...]')\n .description('Assign a tag to documents (interactive pickers if no args)')\n .option('-n, --note <text>', 'Note for the doctag')\n .action((tagId?: string, docIds?: string[], opts?: { note?: string }) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace()\n if (!tagId) tagId = await pickTag(arbi, workspaceId, 'Select tag to assign')\n if (!docIds || docIds.length === 0)\n docIds = await pickDocs(arbi, workspaceId, 'Select documents to tag')\n if (docIds.length === 0) return\n const data = await doctagOps.assignDocTags(arbi, tagId, docIds, opts?.note)\n console.log(`Created ${data.length} doctag(s) for tag ${tagId}.`)\n })()\n )\n\n doctagsCmd\n .command('delete [tag-id] [doc-ids...]')\n .description('Remove a tag from documents (interactive pickers if no args)')\n .action((tagId?: string, docIds?: string[]) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace()\n if (!tagId) tagId = await pickTag(arbi, workspaceId, 'Select tag to remove')\n if (!docIds || docIds.length === 0)\n docIds = await pickDocs(arbi, workspaceId, 'Select documents to untag')\n if (docIds.length === 0) return\n await doctagOps.removeDocTags(arbi, tagId, docIds)\n console.log(`Removed tag ${tagId} from ${docIds.length} document(s).`)\n })()\n )\n\n doctagsCmd\n .command('generate')\n .description('AI-generate doctags (interactive pickers if no flags)')\n .option('--tags <ids>', 'Comma-separated tag IDs')\n .option('--docs <ids>', 'Comma-separated document IDs')\n .action((opts: { tags?: string; docs?: string }) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace()\n\n let tagIds: string[]\n if (opts.tags) {\n tagIds = opts.tags.split(',').map((s) => s.trim())\n } else {\n const data = await tagOps.listTags(arbi, workspaceId)\n if (data.length === 0) {\n console.log('No tags found.')\n return\n }\n tagIds = await promptCheckbox(\n 'Select tags to generate',\n data.map((t) => ({\n name: `${t.name} (${(t.tag_type as { type?: string })?.type ?? ''})`,\n value: t.external_id as string,\n }))\n )\n if (tagIds.length === 0) return\n }\n\n let docIds: string[]\n if (opts.docs) {\n docIds = opts.docs.split(',').map((s) => s.trim())\n } else {\n docIds = await pickDocs(arbi, workspaceId, 'Select documents for AI tagging')\n if (docIds.length === 0) return\n }\n\n const data = await doctagOps.generateDocTags(arbi, tagIds, docIds)\n console.log(\n `Generating doctags for ${data.doc_ext_ids.length} doc(s) with ${data.tag_ext_ids.length} tag(s).`\n )\n })()\n )\n}\n","/**\n * arbi conversations list — list conversations\n * arbi conversations threads [id] — show threads (picker if no ID)\n * arbi conversations delete [id] — delete (picker if no ID)\n * arbi conversations share [id] — share (picker if no ID)\n * arbi conversations title [id] [title] — update title (picker + prompt)\n * arbi conversations add-user [id] [user-id] — add user (picker + prompt)\n * arbi conversations remove-user [id] [uid] — remove user (picker + prompt)\n * arbi conversations message <message-id> — get message details\n * arbi conversations delete-message <msg-id> — delete message\n */\n\nimport { Command } from 'commander'\nimport { conversations as convOps } from '@arbidocs/core'\nimport { runAction, resolveAuth, resolveWorkspace, printTable } from '../helpers.js'\nimport { promptSelect, promptInput } from '../prompts.js'\n\n/** Fetch workspace conversations and return as picker choices */\nasync function pickConversation(\n arbi: Awaited<ReturnType<typeof resolveWorkspace>>['arbi'],\n workspaceId: string,\n message = 'Select conversation'\n) {\n const data = await convOps.listConversations(arbi, workspaceId)\n if (data.length === 0) {\n console.log('No conversations found.')\n process.exit(0)\n }\n return promptSelect(\n message,\n data.map((c) => ({\n name: `${(c.title as string) ?? 'Untitled'} (${c.message_count} msgs)`,\n value: c.external_id as string,\n description: c.external_id as string,\n }))\n )\n}\n\nexport function registerConversationsCommand(program: Command): void {\n const conv = program.command('conversations').description('Manage conversations')\n\n conv\n .command('list')\n .description('List conversations in the active workspace')\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .action((opts: { workspace?: string }) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace(opts.workspace)\n const data = await convOps.listConversations(arbi, workspaceId)\n\n if (data.length === 0) {\n console.log('No conversations found.')\n return\n }\n\n printTable(\n [\n { header: 'ID', width: 24, value: (r) => r.external_id as string },\n { header: 'TITLE', width: 36, value: (r) => (r.title as string) ?? 'Untitled' },\n { header: 'MSGS', width: 6, value: (r) => String(r.message_count) },\n { header: 'SHARED', width: 8, value: (r) => (r.is_shared ? 'yes' : 'no') },\n ],\n data\n )\n })()\n )\n\n conv\n .command('threads [conversation-id]')\n .description('Show threads (interactive picker if no ID given)')\n .action((conversationId?: string) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace()\n if (!conversationId) conversationId = await pickConversation(arbi, workspaceId)\n const data = await convOps.getConversationThreads(arbi, conversationId)\n console.log(JSON.stringify(data, null, 2))\n })()\n )\n\n conv\n .command('delete [conversation-id]')\n .description('Delete a conversation (interactive picker if no ID given)')\n .action((conversationId?: string) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace()\n if (!conversationId)\n conversationId = await pickConversation(\n arbi,\n workspaceId,\n 'Select conversation to delete'\n )\n const data = await convOps.deleteConversation(arbi, conversationId)\n console.log(data?.detail ?? `Deleted conversation ${conversationId}`)\n })()\n )\n\n conv\n .command('share [conversation-id]')\n .description('Share a conversation (interactive picker if no ID given)')\n .action((conversationId?: string) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace()\n if (!conversationId)\n conversationId = await pickConversation(arbi, workspaceId, 'Select conversation to share')\n const data = await convOps.shareConversation(arbi, conversationId)\n console.log(data?.detail ?? `Shared conversation ${conversationId}`)\n })()\n )\n\n conv\n .command('title [conversation-id] [title]')\n .description('Update conversation title (interactive if no args)')\n .action((conversationId?: string, title?: string) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace()\n if (!conversationId) conversationId = await pickConversation(arbi, workspaceId)\n if (!title) title = await promptInput('New title')\n const data = await convOps.updateConversationTitle(arbi, conversationId, title)\n console.log(data?.detail ?? `Updated title to: ${title}`)\n })()\n )\n\n conv\n .command('add-user [conversation-id] [user-id]')\n .description('Add a user to a conversation (interactive if no args)')\n .action((conversationId?: string, userId?: string) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace()\n if (!conversationId) conversationId = await pickConversation(arbi, workspaceId)\n if (!userId) userId = await promptInput('User ext_id or email')\n const data = await convOps.addConversationUser(arbi, conversationId, userId)\n console.log(data?.detail ?? `Added user ${userId} to conversation`)\n })()\n )\n\n conv\n .command('remove-user [conversation-id] [user-id]')\n .description('Remove a user from a conversation (interactive if no args)')\n .action((conversationId?: string, userId?: string) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace()\n if (!conversationId) conversationId = await pickConversation(arbi, workspaceId)\n if (!userId) userId = await promptInput('User ext_id')\n const data = await convOps.removeConversationUser(arbi, conversationId, userId)\n console.log(data?.detail ?? `Removed user ${userId} from conversation`)\n })()\n )\n\n conv\n .command('message <message-id>')\n .description('Get message details')\n .action((messageId: string) =>\n runAction(async () => {\n const { arbi } = await resolveWorkspace()\n const data = await convOps.getMessage(arbi, messageId)\n console.log(JSON.stringify(data, null, 2))\n })()\n )\n\n conv\n .command('delete-message <message-id>')\n .description('Delete a message and its descendants')\n .action((messageId: string) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const data = await convOps.deleteMessage(arbi, messageId)\n console.log(data?.detail ?? `Deleted message ${messageId}`)\n })()\n )\n\n // Default action: list\n conv.action(async (_opts: Record<string, unknown>, cmd: Command) => {\n await cmd.commands.find((c) => c.name() === 'list')!.parseAsync([], { from: 'user' })\n })\n}\n","/**\n * arbi settings — show current user settings\n * arbi settings set — update a setting\n */\n\nimport { Command } from 'commander'\nimport { settings as settingsOps } from '@arbidocs/core'\nimport { runAction, resolveAuth, parseJsonArg } from '../helpers.js'\n\nexport function registerSettingsCommand(program: Command): void {\n const settings = program.command('settings').description('Manage user settings')\n\n settings\n .command('get')\n .description('Show current user settings')\n .action(\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const data = await settingsOps.getSettings(arbi)\n console.log(JSON.stringify(data, null, 2))\n })\n )\n\n settings\n .command('set <json>')\n .description('Update user settings (pass JSON object)')\n .action((json: string) =>\n runAction(async () => {\n const body = parseJsonArg(json, 'arbi settings set \\'{\"hide_online_status\": true}\\'')\n const { arbi } = await resolveAuth()\n await settingsOps.updateSettings(arbi, body)\n console.log('Settings updated.')\n })()\n )\n\n // Default action: get\n settings.action(async () => {\n await settings.commands.find((c) => c.name() === 'get')!.parseAsync([], { from: 'user' })\n })\n}\n","/**\n * arbi agentconfig list — list saved config versions\n * arbi agentconfig get [id] — show config (picker if no ID, 'default' for system)\n * arbi agentconfig save [json] — save new config (interactive if no JSON)\n * arbi agentconfig delete [id] — delete config (picker if no ID)\n * arbi agentconfig schema — dump JSON schema for all config models\n */\n\nimport { Command } from 'commander'\nimport { agentconfig as acOps } from '@arbidocs/core'\nimport { runAction, resolveAuth, printTable, parseJsonArg } from '../helpers.js'\nimport { promptSelect, promptInput, promptConfirm } from '../prompts.js'\n\n/** Config sections that have a MODEL_NAME field — the most common thing to change */\nconst MODEL_SECTIONS = [\n 'Agents',\n 'QueryLLM',\n 'EvaluatorLLM',\n 'TitleLLM',\n 'SummariseLLM',\n 'DoctagLLM',\n 'ArtifactLLM',\n] as const\n\n/** Pick a config version from saved versions */\nasync function pickConfig(\n arbi: Awaited<ReturnType<typeof resolveAuth>>['arbi'],\n message = 'Select configuration'\n) {\n const data = await acOps.listConfigs(arbi)\n if (data.versions.length === 0) {\n console.log('No saved configurations found.')\n process.exit(0)\n }\n return promptSelect(\n message,\n data.versions.map((v) => ({\n name: `${v.title || '(untitled)'} — ${new Date(v.created_at).toLocaleString()}`,\n value: v.external_id,\n description: v.external_id,\n }))\n )\n}\n\n/** Fetch available models for interactive picker */\nasync function fetchModels(arbi: Awaited<ReturnType<typeof resolveAuth>>['arbi']) {\n const data = await acOps.getModels(arbi)\n return data.models.map((m) => ({\n name: `${m.model_name} (${m.provider ?? m.api_type})`,\n value: m.model_name,\n description: m.api_type,\n }))\n}\n\n/** Interactive config builder — walks through most common settings */\nasync function buildConfigInteractively(\n arbi: Awaited<ReturnType<typeof resolveAuth>>['arbi']\n): Promise<Record<string, unknown>> {\n const body: Record<string, unknown> = {}\n\n // Title\n const title = await promptInput('Config title (optional)', false)\n if (title) body.title = title\n\n // Pick section to configure\n const section = await promptSelect('Section to configure', [\n { name: 'Agents — main agent model, persona, tools', value: 'Agents' },\n { name: 'QueryLLM — answer review model', value: 'QueryLLM' },\n { name: 'EvaluatorLLM — chunk evaluation', value: 'EvaluatorLLM' },\n { name: 'TitleLLM — title generation', value: 'TitleLLM' },\n { name: 'SummariseLLM — conversation summariser', value: 'SummariseLLM' },\n { name: 'DoctagLLM — AI document tagging', value: 'DoctagLLM' },\n { name: 'ArtifactLLM — skill/memory synthesis', value: 'ArtifactLLM' },\n { name: 'Retriever — search parameters', value: 'Retriever' },\n { name: 'Reranker — reranking model', value: 'Reranker' },\n { name: 'ModelCitation — citation thresholds', value: 'ModelCitation' },\n { name: 'Chunker — chunk size', value: 'Chunker' },\n { name: 'Embedder — embedding model', value: 'Embedder' },\n { name: 'KeywordEmbedder — BM25 parameters', value: 'KeywordEmbedder' },\n ])\n\n const sectionConfig: Record<string, unknown> = {}\n\n // Sections with MODEL_NAME get a model picker\n if ((MODEL_SECTIONS as readonly string[]).includes(section)) {\n const models = await fetchModels(arbi)\n if (models.length > 0) {\n const changeModel = await promptConfirm('Change model?', true)\n if (changeModel) {\n const modelKey = section === 'Agents' ? 'AGENT_MODEL_NAME' : 'MODEL_NAME'\n sectionConfig[modelKey] = await promptSelect('Model', models)\n\n if (section === 'Agents') {\n sectionConfig.AGENT_API_TYPE = 'remote'\n } else {\n sectionConfig.API_TYPE = 'remote'\n }\n }\n }\n }\n\n // Section-specific fields\n if (section === 'Agents') {\n const field = await promptSelect('What else to change?', [\n { name: 'Nothing else', value: 'done' },\n { name: 'Temperature', value: 'LLM_AGENT_TEMPERATURE' },\n { name: 'Max tokens', value: 'AGENT_MAX_TOKENS' },\n { name: 'Max iterations', value: 'AGENT_MAX_ITERATIONS' },\n { name: 'Persona', value: 'PERSONA' },\n { name: 'Web search enabled', value: 'WEB_SEARCH' },\n { name: 'Human in the loop', value: 'HUMAN_IN_THE_LOOP' },\n ])\n if (field !== 'done') {\n if (field === 'WEB_SEARCH' || field === 'HUMAN_IN_THE_LOOP') {\n sectionConfig[field] = await promptConfirm(field + '?')\n } else if (field === 'LLM_AGENT_TEMPERATURE') {\n sectionConfig[field] = parseFloat(await promptInput('Temperature (0.0 - 2.0)'))\n } else if (field === 'AGENT_MAX_TOKENS' || field === 'AGENT_MAX_ITERATIONS') {\n sectionConfig[field] = parseInt(await promptInput(field), 10)\n } else {\n sectionConfig[field] = await promptInput(field)\n }\n }\n } else if (section === 'Retriever') {\n const field = await promptSelect('Field to change', [\n { name: 'Search mode', value: 'SEARCH_MODE' },\n { name: 'Min similarity score', value: 'MIN_RETRIEVAL_SIM_SCORE' },\n { name: 'Max chunks to retrieve', value: 'MAX_TOTAL_CHUNKS_TO_RETRIEVE' },\n { name: 'Max distinct documents', value: 'MAX_DISTINCT_DOCUMENTS' },\n { name: 'Hybrid dense weight', value: 'HYBRID_DENSE_WEIGHT' },\n { name: 'Hybrid sparse weight', value: 'HYBRID_SPARSE_WEIGHT' },\n ])\n if (field === 'SEARCH_MODE') {\n sectionConfig[field] = await promptSelect('Search mode', [\n { name: 'Semantic (dense)', value: 'semantic' },\n { name: 'Keyword (sparse/BM25)', value: 'keyword' },\n { name: 'Hybrid (dense + sparse)', value: 'hybrid' },\n ])\n } else {\n sectionConfig[field] = parseFloat(await promptInput(field))\n }\n } else if (section === 'ModelCitation') {\n const field = await promptSelect('Field to change', [\n { name: 'Similarity threshold', value: 'SIM_THREASHOLD' },\n { name: 'Min char size', value: 'MIN_CHAR_SIZE_TO_ANSWER' },\n { name: 'Max citations', value: 'MAX_NUMB_CITATIONS' },\n ])\n sectionConfig[field] = parseFloat(await promptInput(field))\n } else if (section === 'Chunker') {\n sectionConfig.MAX_CHUNK_TOKENS = parseInt(await promptInput('Max chunk tokens'), 10)\n } else if (section === 'Reranker') {\n const field = await promptSelect('Field to change', [\n { name: 'Max chunks after rerank', value: 'MAX_NUMB_OF_CHUNKS' },\n { name: 'Model', value: 'MODEL_NAME' },\n ])\n if (field === 'MODEL_NAME') {\n const models = await fetchModels(arbi)\n sectionConfig.MODEL_NAME = await promptSelect('Model', models)\n sectionConfig.API_TYPE = 'remote'\n } else {\n sectionConfig[field] = parseInt(await promptInput(field), 10)\n }\n } else if (\n section === 'QueryLLM' ||\n section === 'EvaluatorLLM' ||\n section === 'TitleLLM' ||\n section === 'SummariseLLM' ||\n section === 'DoctagLLM' ||\n section === 'ArtifactLLM'\n ) {\n // LLM sections share temperature/max_tokens\n const field = await promptSelect('What else to change?', [\n { name: 'Nothing else', value: 'done' },\n { name: 'Temperature', value: 'TEMPERATURE' },\n { name: 'Max tokens', value: 'MAX_TOKENS' },\n ])\n if (field !== 'done') {\n sectionConfig[field] =\n field === 'TEMPERATURE'\n ? parseFloat(await promptInput('Temperature (0.0 - 2.0)'))\n : parseInt(await promptInput('Max tokens'), 10)\n }\n }\n\n if (Object.keys(sectionConfig).length > 0) {\n body[section] = sectionConfig\n }\n\n return body\n}\n\nexport function registerAgentconfigCommand(program: Command): void {\n const ac = program.command('agentconfig').description('Manage agent configurations')\n\n ac.command('list')\n .description('List saved configuration versions')\n .action(\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const data = await acOps.listConfigs(arbi)\n\n if (data.versions.length === 0) {\n console.log('No saved configurations.')\n return\n }\n\n printTable(\n [\n { header: 'ID', width: 24, value: (r) => r.external_id as string },\n { header: 'TITLE', width: 30, value: (r) => (r.title as string) ?? '(untitled)' },\n {\n header: 'CREATED',\n width: 22,\n value: (r) => new Date(r.created_at as string).toLocaleString(),\n },\n ],\n data.versions\n )\n })\n )\n\n ac.command('get [config-id]')\n .description('Show configuration details (picker if no ID; use \"default\" for system defaults)')\n .action((configId?: string) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n if (!configId) {\n configId = await promptSelect('Which configuration?', [\n { name: 'System defaults', value: 'default', description: 'Built-in defaults' },\n { name: 'Pick from saved versions...', value: '__pick__' },\n ])\n if (configId === '__pick__') {\n configId = await pickConfig(arbi)\n }\n }\n const data = await acOps.getConfig(arbi, configId)\n console.log(JSON.stringify(data, null, 2))\n })()\n )\n\n ac.command('save [json]')\n .description('Save a new configuration (interactive if no JSON given)')\n .option('-t, --title <title>', 'Config title')\n .option('--tag <tag-ext-id>', 'Associate with an assistant tag')\n .option('--message <msg-ext-id>', 'Associate with a parent message')\n .action((json?: string, opts?: { title?: string; tag?: string; message?: string }) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n\n let body: Record<string, unknown>\n if (json) {\n body = parseJsonArg(\n json,\n 'arbi agentconfig save \\'{\"Agents\": {\"AGENT_MODEL_NAME\": \"GPT4o@OpenAI\"}, \"title\": \"GPT-4o config\"}\\''\n )\n if (opts?.title) body.title = opts.title\n } else {\n body = await buildConfigInteractively(arbi)\n }\n\n if (opts?.tag) body.tag_ext_id = opts.tag\n if (opts?.message) body.parent_message_ext_id = opts.message\n\n const data = await acOps.saveConfig(arbi, body)\n console.log(`Saved: ${data.title || '(untitled)'} (${data.external_id})`)\n })()\n )\n\n ac.command('delete [config-id]')\n .description('Delete a configuration (picker if no ID)')\n .action((configId?: string) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n if (!configId) configId = await pickConfig(arbi, 'Select configuration to delete')\n const data = await acOps.deleteConfig(arbi, configId)\n console.log(data.detail)\n })()\n )\n\n ac.command('schema')\n .description('Show JSON schema for all configuration models')\n .action(\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const data = await acOps.getSchema(arbi)\n console.log(JSON.stringify(data, null, 2))\n })\n )\n\n // Default action: list\n ac.action(async () => {\n await ac.commands.find((c) => c.name() === 'list')!.parseAsync([], { from: 'user' })\n })\n}\n","/**\n * arbi health — show server health\n * arbi models — list available models\n */\n\nimport { Command } from 'commander'\nimport { health as healthOps } from '@arbidocs/core'\nimport { runAction, resolveAuth, printTable } from '../helpers.js'\n\nexport function registerHealthCommand(program: Command): void {\n program\n .command('health')\n .description('Show server health status')\n .action(\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const data = await healthOps.getHealth(arbi)\n\n console.log(`Status: ${data.status}`)\n if (data.backend_git_hash) console.log(`Backend: ${data.backend_git_hash}`)\n if (data.frontend_docker_version) console.log(`Frontend: ${data.frontend_docker_version}`)\n\n if (data.services.length > 0) {\n console.log('\\nServices:')\n for (const s of data.services) {\n console.log(` ${s.name}: ${s.status}${s.detail ? ` — ${s.detail}` : ''}`)\n }\n }\n\n if (data.models_health) {\n console.log(`\\nModels (${data.models_health.application}):`)\n for (const m of data.models_health.models) {\n console.log(` ${m.model}: ${m.status}${m.detail ? ` — ${m.detail}` : ''}`)\n }\n }\n })\n )\n\n program\n .command('models')\n .description('List available AI models')\n .action(\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const data = await healthOps.getHealthModels(arbi)\n\n if (data.models.length === 0) {\n console.log('No models available.')\n return\n }\n\n printTable(\n [\n { header: 'NAME', width: 30, value: (r) => r.model_name as string },\n { header: 'PROVIDER', width: 20, value: (r) => (r.provider as string) ?? '' },\n { header: 'API_TYPE', width: 16, value: (r) => r.api_type as string },\n ],\n data.models\n )\n })\n )\n}\n","/**\n * arbi tui [--workspace <id>]\n *\n * Launches the interactive terminal UI (arbi-tui).\n *\n * Resolution order:\n * 1. Try to require('@arbidocs/tui') — works if TUI is a dependency or peer\n * 2. Try to resolve 'arbi-tui' on PATH — works if globally installed\n * 3. Fall back to npx @arbidocs/tui — downloads and runs if needed\n */\n\nimport { Command } from 'commander'\nimport { spawn, execFileSync } from 'node:child_process'\nimport { createRequire } from 'node:module'\n\nfunction findTuiEntryPoint(): string | null {\n // Try to resolve the package from the CLI's install location.\n // This works for: monorepo workspace, npm peer/optional dep, global co-install.\n const require = createRequire(import.meta.url)\n try {\n // resolve() returns the main entry point path without executing it\n return require.resolve('@arbidocs/tui')\n } catch {\n // Not installed alongside the CLI\n }\n\n // Try to find 'arbi-tui' on PATH (global install of TUI package)\n try {\n const resolved = execFileSync('which', ['arbi-tui'], { encoding: 'utf-8' }).trim()\n if (resolved) return resolved\n } catch {\n // Not on PATH\n }\n\n return null\n}\n\nexport function registerTuiCommand(program: Command): void {\n program\n .command('tui')\n .description('Launch interactive terminal UI')\n .option('-w, --workspace <id>', 'Workspace ID to use')\n .allowUnknownOption(true)\n .action((opts: { workspace?: string }, cmd: Command) => {\n // Build args to pass through\n const args: string[] = []\n if (opts.workspace) {\n args.push('-w', opts.workspace)\n }\n args.push(...cmd.args)\n\n const entryPoint = findTuiEntryPoint()\n\n if (entryPoint) {\n // Found locally — run with node directly\n const child = spawn(process.execPath, [entryPoint, ...args], {\n stdio: 'inherit',\n env: process.env,\n })\n child.on('exit', (code) => process.exit(code ?? 0))\n } else {\n // Not found — use npx to download and run\n console.log('arbi-tui not installed locally. Launching via npx...\\n')\n const child = spawn('npx', ['--yes', '@arbidocs/tui', ...args], {\n stdio: 'inherit',\n env: process.env,\n })\n child.on('exit', (code) => process.exit(code ?? 0))\n }\n })\n}\n","/**\n * ARBI CLI — entry point\n *\n * Wires all commands into commander and runs.\n */\n\n// Suppress SDK middleware logging (console.debug/info go to stdout in Node.js, polluting piped output)\nconsole.debug = () => {}\nconst _origInfo = console.info\nconsole.info = (...args: unknown[]) => {\n if (typeof args[0] === 'string' && args[0].startsWith('[API]')) return\n _origInfo(...args)\n}\n\nimport { Command } from 'commander'\nimport { registerConfigCommand } from './commands/config-cmd.js'\nimport { registerLoginCommand } from './commands/login.js'\nimport { registerRegisterCommand } from './commands/register.js'\nimport { registerLogoutCommand } from './commands/logout.js'\nimport { registerStatusCommand } from './commands/status.js'\nimport { registerWorkspacesCommand } from './commands/workspaces.js'\nimport { registerDocsCommand } from './commands/docs.js'\nimport { registerUploadCommand } from './commands/upload.js'\nimport { registerDownloadCommand } from './commands/download.js'\nimport { registerAskCommand } from './commands/ask.js'\nimport { registerWatchCommand } from './commands/watch.js'\nimport { registerContactsCommand } from './commands/contacts.js'\nimport { registerDmCommand } from './commands/dm.js'\nimport { registerTagsCommand } from './commands/tags.js'\nimport { registerDoctagsCommand } from './commands/doctags.js'\nimport { registerConversationsCommand } from './commands/conversations.js'\nimport { registerSettingsCommand } from './commands/settings.js'\nimport { registerAgentconfigCommand } from './commands/agentconfig.js'\nimport { registerHealthCommand } from './commands/health.js'\nimport { registerTuiCommand } from './commands/tui.js'\n\nconst program = new Command()\n\nprogram.name('arbi').description('ARBI CLI — interact with ARBI from the terminal').version('0.1.0')\n\nregisterConfigCommand(program)\nregisterLoginCommand(program)\nregisterRegisterCommand(program)\nregisterLogoutCommand(program)\nregisterStatusCommand(program)\nregisterWorkspacesCommand(program)\nregisterDocsCommand(program)\nregisterUploadCommand(program)\nregisterDownloadCommand(program)\nregisterAskCommand(program)\nregisterWatchCommand(program)\nregisterContactsCommand(program)\nregisterDmCommand(program)\nregisterTagsCommand(program)\nregisterDoctagsCommand(program)\nregisterConversationsCommand(program)\nregisterSettingsCommand(program)\nregisterAgentconfigCommand(program)\nregisterHealthCommand(program)\nregisterTuiCommand(program)\n\nprogram.parse()\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/config.ts","../src/commands/config-cmd.ts","../../../node_modules/fake-indexeddb/build/esm/lib/errors.js","../../../node_modules/fake-indexeddb/build/esm/lib/isSharedArrayBuffer.js","../../../node_modules/fake-indexeddb/build/esm/lib/valueToKeyWithoutThrowing.js","../../../node_modules/fake-indexeddb/build/esm/lib/valueToKey.js","../../../node_modules/fake-indexeddb/build/esm/lib/cmp.js","../../../node_modules/fake-indexeddb/build/esm/FDBKeyRange.js","../../../node_modules/fake-indexeddb/build/esm/lib/extractKey.js","../../../node_modules/fake-indexeddb/build/esm/lib/cloneValueForInsertion.js","../../../node_modules/fake-indexeddb/build/esm/FDBCursor.js","../../../node_modules/fake-indexeddb/build/esm/FDBCursorWithValue.js","../../../node_modules/fake-indexeddb/build/esm/lib/FakeEventTarget.js","../../../node_modules/fake-indexeddb/build/esm/FDBRequest.js","../../../node_modules/fake-indexeddb/build/esm/lib/FakeDOMStringList.js","../../../node_modules/fake-indexeddb/build/esm/lib/valueToKeyRange.js","../../../node_modules/fake-indexeddb/build/esm/lib/getKeyPath.js","../../../node_modules/fake-indexeddb/build/esm/lib/isPotentiallyValidKeyRange.js","../../../node_modules/fake-indexeddb/build/esm/lib/enforceRange.js","../../../node_modules/fake-indexeddb/build/esm/lib/extractGetAllOptions.js","../../../node_modules/fake-indexeddb/build/esm/FDBIndex.js","../../../node_modules/fake-indexeddb/build/esm/lib/canInjectKey.js","../../../node_modules/fake-indexeddb/build/esm/FDBRecord.js","../../../node_modules/fake-indexeddb/build/esm/lib/binarySearchTree.js","../../../node_modules/fake-indexeddb/build/esm/lib/RecordStore.js","../../../node_modules/fake-indexeddb/build/esm/lib/Index.js","../../../node_modules/fake-indexeddb/build/esm/lib/validateKeyPath.js","../../../node_modules/fake-indexeddb/build/esm/FDBObjectStore.js","../../../node_modules/fake-indexeddb/build/esm/lib/FakeEvent.js","../../../node_modules/fake-indexeddb/build/esm/lib/scheduling.js","../../../node_modules/fake-indexeddb/build/esm/FDBTransaction.js","../../../node_modules/fake-indexeddb/build/esm/lib/KeyGenerator.js","../../../node_modules/fake-indexeddb/build/esm/lib/ObjectStore.js","../../../node_modules/fake-indexeddb/build/esm/lib/closeConnection.js","../../../node_modules/fake-indexeddb/build/esm/FDBDatabase.js","../../../node_modules/fake-indexeddb/build/esm/FDBOpenDBRequest.js","../../../node_modules/fake-indexeddb/build/esm/FDBVersionChangeEvent.js","../../../node_modules/fake-indexeddb/build/esm/lib/intersection.js","../../../node_modules/fake-indexeddb/build/esm/lib/Database.js","../../../node_modules/fake-indexeddb/build/esm/lib/validateRequiredArguments.js","../../../node_modules/fake-indexeddb/build/esm/FDBFactory.js","../../../node_modules/fake-indexeddb/build/esm/fakeIndexedDB.js","../../../node_modules/fake-indexeddb/auto/index.mjs","../src/prompts.ts","../src/commands/login.ts","../src/commands/register.ts","../src/commands/logout.ts","../src/commands/status.ts","../src/helpers.ts","../src/commands/workspaces.ts","../src/commands/docs.ts","../src/commands/upload.ts","../src/commands/download.ts","../src/commands/ask.ts","../src/commands/watch.ts","../src/commands/contacts.ts","../src/commands/dm.ts","../src/commands/tags.ts","../src/commands/doctags.ts","../src/commands/conversations.ts","../src/commands/settings.ts","../src/commands/agentconfig.ts","../src/commands/health.ts","../src/commands/tui.ts","../src/index.ts"],"names":["FileConfigStore","ArbiError","program","input","callback","current","confirmActiveTransaction","rolledBack","store","db","select","checkbox","search","password","confirm","createArbiClient","workspaces","ws","coreResolveAuth","coreResolveWorkspace","documents","fs","path","connectWebSocket","isMessageType","assistant","streamSSE","contactOps","dmOps","data","tagOps","doctagOps","convOps","settingsOps","acOps","healthOps","require","createRequire","spawn","Command"],"mappings":";;;;;;;;;;;;;;;;;;AAaO,IAAM,KAAA,GAAQ,IAAIA,oBAAA,EAAgB;AAIlC,SAAS,SAAA,GAA8B;AAC5C,EAAA,OAAO,MAAM,SAAA,EAAU;AACzB;AAMO,SAAS,aAAa,OAAA,EAAmC;AAC9D,EAAA,KAAA,CAAM,aAAa,OAAO,CAAA;AAC5B;AAEO,SAAS,aAAA,GAA2B;AACzC,EAAA,IAAI;AACF,IAAA,OAAO,MAAM,aAAA,EAAc;AAAA,EAC7B,SAAS,GAAA,EAAK;AACZ,IAAA,IAAI,eAAeC,cAAA,EAAW;AAC5B,MAAA,OAAA,CAAQ,KAAA,CAAM,IAAI,OAAO,CAAA;AACzB,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AACA,IAAA,MAAM,GAAA;AAAA,EACR;AACF;AAIO,SAAS,cAAA,GAAwC;AACtD,EAAA,OAAO,MAAM,cAAA,EAAe;AAC9B;AAEO,SAAS,gBAAgB,KAAA,EAA6B;AAC3D,EAAA,KAAA,CAAM,gBAAgB,KAAK,CAAA;AAC7B;AAEO,SAAS,iBAAA,GAA0B;AACxC,EAAA,KAAA,CAAM,iBAAA,EAAkB;AAC1B;AAgBO,SAAS,cAAA,GAA8B;AAC5C,EAAA,OAAO,MAAM,cAAA,EAAe;AAC9B;AAMO,SAAS,kBAAkB,OAAA,EAAqC;AACrE,EAAA,KAAA,CAAM,kBAAkB,OAAO,CAAA;AACjC;AAEO,SAAS,gBAAA,GAAyB;AACvC,EAAA,KAAA,CAAM,gBAAA,EAAiB;AACzB;;;AC5EO,SAAS,sBAAsBC,QAAAA,EAAwB;AAC5D,EAAA,MAAM,SAASA,QAAAA,CAAQ,OAAA,CAAQ,QAAQ,CAAA,CAAE,YAAY,0BAA0B,CAAA;AAE/E,EAAA,MAAA,CACG,OAAA,CAAQ,eAAe,CAAA,CACvB,WAAA,CAAY,yBAAyB,CAAA,CACrC,MAAA,CAAO,CAAC,GAAA,KAAgB;AACvB,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,IAAI,GAAA,CAAI,GAAG,CAAA;AAC1B,MAAA,MAAM,mBAAmB,MAAA,CAAO,QAAA;AAChC,MAAA,YAAA,CAAa,EAAE,SAAS,GAAA,CAAI,OAAA,CAAQ,QAAQ,EAAE,CAAA,EAAG,kBAAkB,CAAA;AACnE,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,YAAA,EAAe,GAAG,CAAA,CAAE,CAAA;AAChC,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,YAAA,EAAe,gBAAgB,CAAA,CAAE,CAAA;AAAA,IAC/C,CAAA,CAAA,MAAQ;AACN,MAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,aAAA,EAAgB,GAAG,CAAA,CAAE,CAAA;AACnC,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF,CAAC,CAAA;AACL;;;ACzBA,IAAM,QAAA,GAAW;AAAA,EACf,UAAA,EAAY,4EAAA;AAAA,EACZ,eAAA,EAAiB,4MAAA;AAAA,EAEjB,SAAA,EAAW,2DAAA;AAAA,EACX,kBAAA,EAAoB,sIAAA;AAAA,EACpB,iBAAA,EAAmB,oTAAA;AAAA,EACnB,aAAA,EAAe,iJAAA;AAAA,EACf,aAAA,EAAe,mEAAA;AAAA,EACf,wBAAA,EAA0B,iGAAA;AAAA,EAE1B,YAAA,EAAc;AAChB,CAAA;AAIA,IAAM,YAAA,GAAe,CAAC,KAAA,EAAO,KAAA,KAAU;AACrC,EAAA,MAAA,CAAO,cAAA,CAAe,OAAO,MAAA,EAAQ;AAAA,IACnC,KAAA;AAAA,IACA,QAAA,EAAU,KAAA;AAAA,IACV,UAAA,EAAY,IAAA;AAAA,IACZ,YAAA,EAAc;AAAA,GACf,CAAA;AACH,CAAA;AACO,IAAM,UAAA,GAAN,cAAyB,YAAA,CAAa;AAAA,EAC3C,WAAA,CAAY,OAAA,GAAU,QAAA,CAAS,UAAA,EAAY;AACzC,IAAA,KAAA,CAAM,SAAS,YAAY,CAAA;AAAA,EAC7B;AACF,CAAA;AACO,IAAM,eAAA,GAAN,cAA8B,YAAA,CAAa;AAAA,EAChD,WAAA,CAAY,OAAA,GAAU,QAAA,CAAS,eAAA,EAAiB;AAC9C,IAAA,KAAA,CAAM,SAAS,iBAAiB,CAAA;AAAA,EAClC;AACF,CAAA;AAMO,IAAM,SAAA,GAAN,cAAwB,YAAA,CAAa;AAAA,EAC1C,WAAA,CAAY,OAAA,GAAU,QAAA,CAAS,SAAA,EAAW;AACxC,IAAA,KAAA,CAAM,SAAS,WAAW,CAAA;AAC1B,IAAA,YAAA,CAAa,MAAM,CAAC,CAAA;AAAA,EACtB;AACF,CAAA;AACO,IAAM,kBAAA,GAAN,cAAiC,YAAA,CAAa;AAAA,EACnD,WAAA,CAAY,OAAA,GAAU,QAAA,CAAS,kBAAA,EAAoB;AACjD,IAAA,KAAA,CAAM,SAAS,oBAAoB,CAAA;AAAA,EACrC;AACF,CAAA;AACO,IAAM,iBAAA,GAAN,cAAgC,YAAA,CAAa;AAAA,EAClD,WAAA,CAAY,OAAA,GAAU,QAAA,CAAS,iBAAA,EAAmB;AAChD,IAAA,KAAA,CAAM,SAAS,mBAAmB,CAAA;AAClC,IAAA,YAAA,CAAa,MAAM,EAAE,CAAA;AAAA,EACvB;AACF,CAAA;AACO,IAAM,aAAA,GAAN,cAA4B,YAAA,CAAa;AAAA,EAC9C,WAAA,CAAY,OAAA,GAAU,QAAA,CAAS,aAAA,EAAe;AAC5C,IAAA,KAAA,CAAM,SAAS,eAAe,CAAA;AAAA,EAChC;AACF,CAAA;AACO,IAAM,aAAA,GAAN,cAA4B,YAAA,CAAa;AAAA,EAC9C,WAAA,CAAY,OAAA,GAAU,QAAA,CAAS,aAAA,EAAe;AAC5C,IAAA,KAAA,CAAM,SAAS,eAAe,CAAA;AAAA,EAChC;AACF,CAAA;AACO,IAAM,WAAA,GAAN,cAA0B,YAAA,CAAa;AAAA,EAC5C,WAAA,CAAY,OAAA,GAAU,QAAA,CAAS,YAAA,EAAc;AAC3C,IAAA,KAAA,CAAM,SAAS,aAAa,CAAA;AAC5B,IAAA,YAAA,CAAa,MAAM,EAAE,CAAA;AAAA,EACvB;AACF,CAAA;AACO,IAAM,wBAAA,GAAN,cAAuC,YAAA,CAAa;AAAA,EACzD,WAAA,CAAY,OAAA,GAAU,QAAA,CAAS,wBAAA,EAA0B;AACvD,IAAA,KAAA,CAAM,SAAS,0BAA0B,CAAA;AACzC,IAAA,YAAA,CAAa,MAAM,CAAC,CAAA;AAAA,EACtB;AACF,CAAA;AACO,IAAM,YAAA,GAAN,cAA2B,YAAA,CAAa;AAAA,EAC7C,WAAA,CAAY,OAAA,GAAU,QAAA,CAAS,YAAA,EAAc;AAC3C,IAAA,KAAA,CAAM,SAAS,cAAc,CAAA;AAAA,EAC/B;AACF,CAAA;;;AClFe,SAAR,oBAAqCC,MAAAA,EAAO;AACjD,EAAA,OAAO,OAAO,iBAAA,KAAsB,WAAA,IAAeA,MAAAA,YAAiB,iBAAA;AACtE;;;ACDO,IAAM,YAAA,0BAAsB,cAAc,CAAA;AAC1C,IAAM,aAAA,0BAAuB,eAAe,CAAA;AAKnD,IAAM,yBAAA,GAA4B,CAACA,MAAAA,EAAO,IAAA,KAAS;AACjD,EAAA,IAAI,OAAOA,WAAU,QAAA,EAAU;AAC7B,IAAA,IAAI,KAAA,CAAMA,MAAK,CAAA,EAAG;AAEhB,MAAA,OAAO,aAAA;AAAA,IACT;AACA,IAAA,OAAOA,MAAAA;AAAA,EACT,WAAW,MAAA,CAAO,SAAA,CAAU,SAAS,IAAA,CAAKA,MAAK,MAAM,eAAA,EAAiB;AACpE,IAAA,MAAM,EAAA,GAAKA,OAAM,OAAA,EAAQ;AACzB,IAAA,IAAI,KAAA,CAAM,EAAE,CAAA,EAAG;AAEb,MAAA,OAAO,aAAA;AAAA,IACT;AACA,IAAA,OAAO,IAAI,KAAK,EAAE,CAAA;AAAA,EACpB,CAAA,MAAA,IAAW,OAAOA,MAAAA,KAAU,QAAA,EAAU;AACpC,IAAA,OAAOA,MAAAA;AAAA,EACT,CAAA,MAAA;AAAA;AAAA,IAEAA,MAAAA,YAAiB,WAAA,IAAe,mBAAA,CAAoBA,MAAK,CAAA,IAAK,OAAO,WAAA,KAAgB,WAAA,IAAe,WAAA,CAAY,MAAA,IAAU,WAAA,CAAY,MAAA,CAAOA,MAAK;AAAA,IAAG;AAInJ,IAAA,IAAI,cAAcA,MAAAA,GAAQA,MAAAA,CAAM,QAAA,GAAWA,MAAAA,CAAM,eAAe,CAAA,EAAG;AAEjE,MAAA,OAAO,aAAA;AAAA,IACT;AACA,IAAA,IAAI,WAAA;AACJ,IAAA,IAAI,MAAA,GAAS,CAAA;AACb,IAAA,IAAI,MAAA,GAAS,CAAA;AACb,IAAA,IAAIA,MAAAA,YAAiB,WAAA,IAAe,mBAAA,CAAoBA,MAAK,CAAA,EAAG;AAC9D,MAAA,WAAA,GAAcA,MAAAA;AACd,MAAA,MAAA,GAASA,MAAAA,CAAM,UAAA;AAAA,IACjB,CAAA,MAAO;AACL,MAAA,WAAA,GAAcA,MAAAA,CAAM,MAAA;AACpB,MAAA,MAAA,GAASA,MAAAA,CAAM,UAAA;AACf,MAAA,MAAA,GAASA,MAAAA,CAAM,UAAA;AAAA,IACjB;AACA,IAAA,OAAO,WAAA,CAAY,KAAA,CAAM,MAAA,EAAQ,MAAA,GAAS,MAAM,CAAA;AAAA,EAClD,CAAA,MAAA,IAAW,KAAA,CAAM,OAAA,CAAQA,MAAK,CAAA,EAAG;AAC/B,IAAA,IAAI,SAAS,MAAA,EAAW;AACtB,MAAA,IAAA,uBAAW,GAAA,EAAI;AAAA,IACjB,CAAA,MAAA,IAAW,IAAA,CAAK,GAAA,CAAIA,MAAK,CAAA,EAAG;AAE1B,MAAA,OAAO,aAAA;AAAA,IACT;AACA,IAAA,IAAA,CAAK,IAAIA,MAAK,CAAA;AAWd,IAAA,IAAI,UAAA,GAAa,KAAA;AACjB,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK;AAAA,MACtB,QAAQA,MAAAA,CAAM;AAAA,KAChB,EAAG,CAAC,CAAA,EAAG,CAAA,KAAM;AACX,MAAA,IAAI,UAAA,EAAY;AACd,QAAA;AAAA,MACF;AACA,MAAA,MAAM,GAAA,GAAM,MAAA,CAAO,MAAA,CAAOA,MAAAA,EAAO,CAAC,CAAA;AAClC,MAAA,IAAI,CAAC,GAAA,EAAK;AAER,QAAA,UAAA,GAAa,IAAA;AACb,QAAA;AAAA,MACF;AACA,MAAA,MAAM,KAAA,GAAQA,OAAM,CAAC,CAAA;AACrB,MAAA,MAAM,GAAA,GAAM,yBAAA,CAA0B,KAAA,EAAO,IAAI,CAAA;AAEjD,MAAA,IAAI,GAAA,KAAQ,aAAA,IAAiB,GAAA,KAAQ,YAAA,EAAc;AACjD,QAAA,UAAA,GAAa,IAAA;AACb,QAAA;AAAA,MACF;AACA,MAAA,OAAO,GAAA;AAAA,IACT,CAAC,CAAA;AACD,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,OAAO,aAAA;AAAA,IACT;AACA,IAAA,OAAO,IAAA;AAAA,EACT,CAAA,MAAO;AAEL,IAAA,OAAO,YAAA;AAAA,EACT;AACF,CAAA;AACA,IAAO,iCAAA,GAAQ,yBAAA;;;ACzFf,IAAM,UAAA,GAAa,CAACA,MAAAA,EAAO,IAAA,KAAS;AAClC,EAAA,MAAM,MAAA,GAAS,iCAAA,CAA0BA,MAAAA,EAAO,IAAI,CAAA;AACpD,EAAA,IAAI,MAAA,KAAW,aAAA,IAAiB,MAAA,KAAW,YAAA,EAAc;AAEvD,IAAA,MAAM,IAAI,SAAA,EAAU;AAAA,EACtB;AACA,EAAA,OAAO,MAAA;AACT,CAAA;AACA,IAAO,kBAAA,GAAQ,UAAA;;;ACXf,IAAM,UAAU,CAAA,CAAA,KAAK;AACnB,EAAA,IAAI,OAAO,MAAM,QAAA,EAAU;AACzB,IAAA,OAAO,QAAA;AAAA,EACT;AACA,EAAA,IAAI,OAAO,SAAA,CAAU,QAAA,CAAS,IAAA,CAAK,CAAC,MAAM,eAAA,EAAiB;AACzD,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,EAAG;AACpB,IAAA,OAAO,OAAA;AAAA,EACT;AACA,EAAA,IAAI,OAAO,MAAM,QAAA,EAAU;AACzB,IAAA,OAAO,QAAA;AAAA,EACT;AACA,EAAA,IAAI,aAAa,WAAA,EAAa;AAC5B,IAAA,OAAO,QAAA;AAAA,EACT;AACA,EAAA,MAAM,IAAI,SAAA,EAAU;AACtB,CAAA;AAGA,IAAM,GAAA,GAAM,CAAC,KAAA,EAAO,MAAA,KAAW;AAC7B,EAAA,IAAI,WAAW,MAAA,EAAW;AACxB,IAAA,MAAM,IAAI,SAAA,EAAU;AAAA,EACtB;AACA,EAAA,KAAA,GAAQ,mBAAW,KAAK,CAAA;AACxB,EAAA,MAAA,GAAS,mBAAW,MAAM,CAAA;AAC1B,EAAA,MAAM,EAAA,GAAK,QAAQ,KAAK,CAAA;AACxB,EAAA,MAAM,EAAA,GAAK,QAAQ,MAAM,CAAA;AACzB,EAAA,IAAI,OAAO,EAAA,EAAI;AACb,IAAA,IAAI,OAAO,OAAA,EAAS;AAClB,MAAA,OAAO,CAAA;AAAA,IACT;AACA,IAAA,IAAI,OAAO,QAAA,KAAa,EAAA,KAAO,YAAY,EAAA,KAAO,MAAA,IAAU,OAAO,QAAA,CAAA,EAAW;AAC5E,MAAA,OAAO,CAAA;AAAA,IACT;AACA,IAAA,IAAI,EAAA,KAAO,QAAA,KAAa,EAAA,KAAO,MAAA,IAAU,OAAO,QAAA,CAAA,EAAW;AACzD,MAAA,OAAO,CAAA;AAAA,IACT;AACA,IAAA,IAAI,EAAA,KAAO,MAAA,IAAU,EAAA,KAAO,QAAA,EAAU;AACpC,MAAA,OAAO,CAAA;AAAA,IACT;AACA,IAAA,OAAO,EAAA;AAAA,EACT;AACA,EAAA,IAAI,OAAO,QAAA,EAAU;AACnB,IAAA,KAAA,GAAQ,IAAI,WAAW,KAAK,CAAA;AAC5B,IAAA,MAAA,GAAS,IAAI,WAAW,MAAM,CAAA;AAAA,EAChC;AACA,EAAA,IAAI,EAAA,KAAO,OAAA,IAAW,EAAA,KAAO,QAAA,EAAU;AACrC,IAAA,MAAM,SAAS,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,MAAA,EAAQ,OAAO,MAAM,CAAA;AACnD,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,EAAQ,CAAA,EAAA,EAAK;AAC/B,MAAA,MAAM,SAAS,GAAA,CAAI,KAAA,CAAM,CAAC,CAAA,EAAG,MAAA,CAAO,CAAC,CAAC,CAAA;AACtC,MAAA,IAAI,WAAW,CAAA,EAAG;AAChB,QAAA,OAAO,MAAA;AAAA,MACT;AAAA,IACF;AACA,IAAA,IAAI,KAAA,CAAM,MAAA,GAAS,MAAA,CAAO,MAAA,EAAQ;AAChC,MAAA,OAAO,CAAA;AAAA,IACT;AACA,IAAA,IAAI,KAAA,CAAM,MAAA,GAAS,MAAA,CAAO,MAAA,EAAQ;AAChC,MAAA,OAAO,EAAA;AAAA,IACT;AACA,IAAA,OAAO,CAAA;AAAA,EACT;AACA,EAAA,IAAI,OAAO,MAAA,EAAQ;AACjB,IAAA,IAAI,KAAA,CAAM,OAAA,EAAQ,KAAM,MAAA,CAAO,SAAQ,EAAG;AACxC,MAAA,OAAO,CAAA;AAAA,IACT;AAAA,EACF,CAAA,MAAO;AACL,IAAA,IAAI,UAAU,MAAA,EAAQ;AACpB,MAAA,OAAO,CAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAO,KAAA,GAAQ,SAAS,CAAA,GAAI,EAAA;AAC9B,CAAA;AACA,IAAO,WAAA,GAAQ,GAAA;;;ACxEf,IAAM,WAAA,GAAN,MAAM,YAAA,CAAY;AAAA,EAChB,OAAO,KAAK,KAAA,EAAO;AACjB,IAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AAC1B,MAAA,MAAM,IAAI,SAAA,EAAU;AAAA,IACtB;AACA,IAAA,KAAA,GAAQ,mBAAW,KAAK,CAAA;AACxB,IAAA,OAAO,IAAI,YAAA,CAAY,KAAA,EAAO,KAAA,EAAO,OAAO,KAAK,CAAA;AAAA,EACnD;AAAA,EACA,OAAO,UAAA,CAAW,KAAA,EAAO,IAAA,GAAO,KAAA,EAAO;AACrC,IAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AAC1B,MAAA,MAAM,IAAI,SAAA,EAAU;AAAA,IACtB;AACA,IAAA,KAAA,GAAQ,mBAAW,KAAK,CAAA;AACxB,IAAA,OAAO,IAAI,YAAA,CAAY,KAAA,EAAO,MAAA,EAAW,MAAM,IAAI,CAAA;AAAA,EACrD;AAAA,EACA,OAAO,UAAA,CAAW,KAAA,EAAO,IAAA,GAAO,KAAA,EAAO;AACrC,IAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AAC1B,MAAA,MAAM,IAAI,SAAA,EAAU;AAAA,IACtB;AACA,IAAA,KAAA,GAAQ,mBAAW,KAAK,CAAA;AACxB,IAAA,OAAO,IAAI,YAAA,CAAY,MAAA,EAAW,KAAA,EAAO,MAAM,IAAI,CAAA;AAAA,EACrD;AAAA,EACA,OAAO,KAAA,CAAM,KAAA,EAAO,OAAO,SAAA,GAAY,KAAA,EAAO,YAAY,KAAA,EAAO;AAC/D,IAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACxB,MAAA,MAAM,IAAI,SAAA,EAAU;AAAA,IACtB;AACA,IAAA,MAAM,SAAA,GAAY,WAAA,CAAI,KAAA,EAAO,KAAK,CAAA;AAClC,IAAA,IAAI,SAAA,KAAc,CAAA,IAAK,SAAA,KAAc,CAAA,KAAM,aAAa,SAAA,CAAA,EAAY;AAClE,MAAA,MAAM,IAAI,SAAA,EAAU;AAAA,IACtB;AACA,IAAA,KAAA,GAAQ,mBAAW,KAAK,CAAA;AACxB,IAAA,KAAA,GAAQ,mBAAW,KAAK,CAAA;AACxB,IAAA,OAAO,IAAI,YAAA,CAAY,KAAA,EAAO,KAAA,EAAO,WAAW,SAAS,CAAA;AAAA,EAC3D;AAAA,EACA,WAAA,CAAY,KAAA,EAAO,KAAA,EAAO,SAAA,EAAW,SAAA,EAAW;AAC9C,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AACb,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AACb,IAAA,IAAA,CAAK,SAAA,GAAY,SAAA;AACjB,IAAA,IAAA,CAAK,SAAA,GAAY,SAAA;AAAA,EACnB;AAAA;AAAA,EAGA,SAAS,GAAA,EAAK;AACZ,IAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AAC1B,MAAA,MAAM,IAAI,SAAA,EAAU;AAAA,IACtB;AACA,IAAA,GAAA,GAAM,mBAAW,GAAG,CAAA;AACpB,IAAA,IAAI,IAAA,CAAK,UAAU,MAAA,EAAW;AAC5B,MAAA,MAAM,SAAA,GAAY,WAAA,CAAI,IAAA,CAAK,KAAA,EAAO,GAAG,CAAA;AACrC,MAAA,IAAI,SAAA,KAAc,CAAA,IAAK,SAAA,KAAc,CAAA,IAAK,KAAK,SAAA,EAAW;AACxD,QAAA,OAAO,KAAA;AAAA,MACT;AAAA,IACF;AACA,IAAA,IAAI,IAAA,CAAK,UAAU,MAAA,EAAW;AAC5B,MAAA,MAAM,SAAA,GAAY,WAAA,CAAI,IAAA,CAAK,KAAA,EAAO,GAAG,CAAA;AACrC,MAAA,IAAI,SAAA,KAAc,EAAA,IAAM,SAAA,KAAc,CAAA,IAAK,KAAK,SAAA,EAAW;AACzD,QAAA,OAAO,KAAA;AAAA,MACT;AAAA,IACF;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EACA,KAAK,MAAA,CAAO,WAAW,CAAA,GAAI;AACzB,IAAA,OAAO,aAAA;AAAA,EACT;AACF,CAAA;AACA,IAAO,mBAAA,GAAQ,WAAA;;;ACnEf,IAAM,UAAA,GAAa,CAAC,OAAA,EAAS,KAAA,KAAU;AACrC,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,EAAG;AAC1B,IAAA,MAAM,SAAS,EAAC;AAChB,IAAA,KAAA,IAAS,QAAQ,OAAA,EAAS;AAGxB,MAAA,IAAI,IAAA,KAAS,UAAa,IAAA,KAAS,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,IAAY,KAAK,QAAA,EAAU;AACpF,QAAA,IAAA,GAAO,KAAK,QAAA,EAAS;AAAA,MACvB;AACA,MAAA,MAAM,GAAA,GAAM,UAAA,CAAW,IAAA,EAAM,KAAK,CAAA,CAAE,GAAA;AACpC,MAAA,MAAA,CAAO,IAAA,CAAK,kBAAA,CAAW,GAAG,CAAC,CAAA;AAAA,IAC7B;AACA,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,OAAA;AAAA,MACN,GAAA,EAAK;AAAA,KACP;AAAA,EACF;AACA,EAAA,IAAI,YAAY,EAAA,EAAI;AAClB,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,OAAA;AAAA,MACN,GAAA,EAAK;AAAA,KACP;AAAA,EACF;AACA,EAAA,IAAI,gBAAA,GAAmB,OAAA;AACvB,EAAA,IAAI,MAAA,GAAS,KAAA;AACb,EAAA,OAAO,qBAAqB,IAAA,EAAM;AAChC,IAAA,IAAI,UAAA;AACJ,IAAA,MAAM,CAAA,GAAI,gBAAA,CAAiB,OAAA,CAAQ,GAAG,CAAA;AACtC,IAAA,IAAI,KAAK,CAAA,EAAG;AACV,MAAA,UAAA,GAAa,gBAAA,CAAiB,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA;AACxC,MAAA,gBAAA,GAAmB,gBAAA,CAAiB,KAAA,CAAM,CAAA,GAAI,CAAC,CAAA;AAAA,IACjD,CAAA,MAAO;AACL,MAAA,UAAA,GAAa,gBAAA;AACb,MAAA,gBAAA,GAAmB,IAAA;AAAA,IACrB;AAGA,IAAA,MAAM,mBAAA,GAAsB,UAAA,KAAe,QAAA,KAAa,OAAO,MAAA,KAAW,QAAA,IAAY,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,CAAA,IAAA,CAAO,UAAA,KAAe,MAAA,IAAU,UAAA,KAAe,WAAW,OAAO,IAAA,KAAS,WAAA,IAAe,MAAA,YAAkB,IAAA,IAAA,CAAS,UAAA,KAAe,MAAA,IAAU,UAAA,KAAe,cAAA,KAAmB,OAAO,IAAA,KAAS,WAAA,IAAe,MAAA,YAAkB,IAAA;AAC1U,IAAA,IAAI,CAAC,mBAAA,KAAwB,OAAO,MAAA,KAAW,QAAA,IAAY,MAAA,KAAW,IAAA,IAAQ,CAAC,MAAA,CAAO,MAAA,CAAO,MAAA,EAAQ,UAAU,CAAA,CAAA,EAAI;AACjH,MAAA,OAAO;AAAA,QACL,IAAA,EAAM;AAAA,OACR;AAAA,IACF;AACA,IAAA,MAAA,GAAS,OAAO,UAAU,CAAA;AAAA,EAC5B;AACA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,OAAA;AAAA,IACN,GAAA,EAAK;AAAA,GACP;AACF,CAAA;AACA,IAAO,kBAAA,GAAQ,UAAA;;;AC9CR,SAAS,sBAAA,CAAuB,OAAO,WAAA,EAAa;AAEzD,EAAA,IAAI,WAAA,CAAY,WAAW,QAAA,EAAU;AACnC,IAAA,MAAM,IAAI,MAAM,qCAAqC,CAAA;AAAA,EACvD;AAGA,EAAA,WAAA,CAAY,MAAA,GAAS,UAAA;AACrB,EAAA,IAAI;AAIF,IAAA,OAAO,gBAAgB,KAAK,CAAA;AAAA,EAC9B,CAAA,SAAE;AAEA,IAAA,WAAA,CAAY,MAAA,GAAS,QAAA;AAAA,EACvB;AACF;;;AChBA,IAAM,0BAA0B,CAAA,MAAA,KAAU;AACxC,EAAA,IAAI,MAAA,CAAO,kBAAkB,sBAAA,EAAgB;AAC3C,IAAA,OAAO,MAAA,CAAO,MAAA;AAAA,EAChB;AACA,EAAA,OAAO,OAAO,MAAA,CAAO,WAAA;AACvB,CAAA;AAMA,IAAM,YAAA,GAAe,CAAC,KAAA,EAAO,MAAA,EAAQ,MAAA,KAAW;AAE9C,EAAA,IAAI,KAAA,GAAQ,KAAA,KAAU,MAAA,GAAY,KAAA,CAAM,KAAA,GAAQ,MAAA;AAChD,EAAA,IAAI,KAAA,GAAQ,KAAA,KAAU,MAAA,GAAY,KAAA,CAAM,KAAA,GAAQ,MAAA;AAGhD,EAAA,KAAA,MAAW,aAAa,MAAA,EAAQ;AAC9B,IAAA,IAAI,cAAc,MAAA,EAAW;AAC3B,MAAA;AAAA,IACF;AACA,IAAA,IAAI,UAAU,MAAA,IAAa,WAAA,CAAI,KAAA,EAAO,SAAS,MAAM,CAAA,EAAG;AACtD,MAAA,KAAA,GAAQ,SAAA;AAAA,IACV;AAAA,EACF;AACA,EAAA,KAAA,MAAW,aAAa,MAAA,EAAQ;AAC9B,IAAA,IAAI,cAAc,MAAA,EAAW;AAC3B,MAAA;AAAA,IACF;AACA,IAAA,IAAI,UAAU,MAAA,IAAa,WAAA,CAAI,KAAA,EAAO,SAAS,MAAM,EAAA,EAAI;AACvD,MAAA,KAAA,GAAQ,SAAA;AAAA,IACV;AAAA,EACF;AACA,EAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,MAAA,EAAW;AAC9C,IAAA,OAAO,mBAAA,CAAY,KAAA,CAAM,KAAA,EAAO,KAAK,CAAA;AAAA,EACvC;AACA,EAAA,IAAI,UAAU,MAAA,EAAW;AACvB,IAAA,OAAO,mBAAA,CAAY,WAAW,KAAK,CAAA;AAAA,EACrC;AACA,EAAA,IAAI,UAAU,MAAA,EAAW;AACvB,IAAA,OAAO,mBAAA,CAAY,WAAW,KAAK,CAAA;AAAA,EACrC;AACF,CAAA;AAGA,IAAM,YAAN,MAAgB;AAAA,EACd,SAAA,GAAY,KAAA;AAAA,EACZ,SAAA,GAAY,MAAA;AAAA;AAAA,EACZ,oBAAA,GAAuB,MAAA;AAAA,EACvB,QAAA,GAAW,KAAA;AAAA,EACX,IAAA,GAAO,MAAA;AAAA,EACP,WAAA,GAAc,MAAA;AAAA,EACd,YAAY,MAAA,EAAQ,KAAA,EAAO,YAAY,MAAA,EAAQ,OAAA,EAAS,UAAU,KAAA,EAAO;AACvE,IAAA,IAAA,CAAK,MAAA,GAAS,KAAA;AACd,IAAA,IAAA,CAAK,OAAA,GAAU,MAAA;AACf,IAAA,IAAA,CAAK,UAAA,GAAa,SAAA;AAClB,IAAA,IAAA,CAAK,QAAA,GAAW,OAAA;AAChB,IAAA,IAAA,CAAK,QAAA,GAAW,OAAA;AAAA,EAClB;AAAA;AAAA,EAGA,IAAI,MAAA,GAAS;AACX,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACd;AAAA,EACA,IAAI,OAAO,GAAA,EAAK;AAAA,EAEhB;AAAA,EACA,IAAI,OAAA,GAAU;AACZ,IAAA,OAAO,IAAA,CAAK,QAAA;AAAA,EACd;AAAA,EACA,IAAI,QAAQ,GAAA,EAAK;AAAA,EAEjB;AAAA,EACA,IAAI,SAAA,GAAY;AACd,IAAA,OAAO,IAAA,CAAK,UAAA;AAAA,EACd;AAAA,EACA,IAAI,UAAU,GAAA,EAAK;AAAA,EAEnB;AAAA,EACA,IAAI,GAAA,GAAM;AACR,IAAA,OAAO,IAAA,CAAK,IAAA;AAAA,EACd;AAAA,EACA,IAAI,IAAI,GAAA,EAAK;AAAA,EAEb;AAAA,EACA,IAAI,UAAA,GAAa;AACf,IAAA,OAAO,IAAA,CAAK,WAAA;AAAA,EACd;AAAA,EACA,IAAI,WAAW,GAAA,EAAK;AAAA,EAEpB;AAAA;AAAA,EAGA,QAAA,CAAS,KAAK,UAAA,EAAY;AACxB,IAAA,MAAM,mBAAA,GAAsB,KAAK,MAAA,YAAkB,sBAAA;AAGnD,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,MAAA,YAAkB,sBAAA,GAAiB,IAAA,CAAK,OAAO,eAAA,CAAgB,OAAA,GAAU,IAAA,CAAK,MAAA,CAAO,SAAA,CAAU,OAAA;AACpH,IAAA,IAAI,WAAA;AACJ,IAAA,IAAI,IAAA,CAAK,cAAc,MAAA,EAAQ;AAC7B,MAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,IAAA,CAAK,MAAA,EAAQ,CAAC,KAAK,IAAA,CAAK,SAAS,CAAA,EAAG,EAAE,CAAA;AACjE,MAAA,KAAA,MAAW,MAAA,IAAU,OAAA,CAAQ,MAAA,CAAO,KAAK,CAAA,EAAG;AAC1C,QAAA,MAAM,eAAe,GAAA,KAAQ,MAAA,GAAY,YAAI,MAAA,CAAO,GAAA,EAAK,GAAG,CAAA,GAAI,MAAA;AAChE,QAAA,MAAM,iBAAA,GAAoB,KAAK,SAAA,KAAc,MAAA,GAAY,YAAI,MAAA,CAAO,GAAA,EAAK,IAAA,CAAK,SAAS,CAAA,GAAI,MAAA;AAC3F,QAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,UAAA,IAAI,iBAAiB,EAAA,EAAI;AACvB,YAAA;AAAA,UACF;AAAA,QACF;AACA,QAAA,IAAI,eAAe,MAAA,EAAW;AAC5B,UAAA,IAAI,iBAAiB,EAAA,EAAI;AACvB,YAAA;AAAA,UACF;AACA,UAAA,MAAM,mBAAA,GAAsB,WAAA,CAAI,MAAA,CAAO,KAAA,EAAO,UAAU,CAAA;AACxD,UAAA,IAAI,YAAA,KAAiB,CAAA,IAAK,mBAAA,KAAwB,EAAA,EAAI;AACpD,YAAA;AAAA,UACF;AAAA,QACF;AACA,QAAA,IAAI,IAAA,CAAK,SAAA,KAAc,MAAA,IAAa,mBAAA,EAAqB;AACvD,UAAA,IAAI,sBAAsB,CAAA,EAAG;AAC3B,YAAA;AAAA,UACF;AAAA,QACF;AACA,QAAA,IAAI,IAAA,CAAK,SAAA,KAAc,MAAA,IAAa,CAAC,mBAAA,EAAqB;AACxD,UAAA,IAAI,sBAAsB,EAAA,EAAI;AAC5B,YAAA;AAAA,UACF;AACA,UAAA,IAAI,iBAAA,KAAsB,KAAK,WAAA,CAAI,MAAA,CAAO,OAAO,IAAA,CAAK,oBAAoB,MAAM,CAAA,EAAG;AACjF,YAAA;AAAA,UACF;AAAA,QACF;AACA,QAAA,IAAI,IAAA,CAAK,WAAW,MAAA,EAAW;AAC7B,UAAA,IAAI,CAAC,IAAA,CAAK,MAAA,CAAO,QAAA,CAAS,MAAA,CAAO,GAAG,CAAA,EAAG;AACrC,YAAA;AAAA,UACF;AAAA,QACF;AACA,QAAA,WAAA,GAAc,MAAA;AACd,QAAA;AAAA,MACF;AAAA,IACF,CAAA,MAAA,IAAW,IAAA,CAAK,SAAA,KAAc,YAAA,EAAc;AAI1C,MAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,IAAA,CAAK,MAAA,EAAQ,CAAC,KAAK,IAAA,CAAK,SAAS,CAAA,EAAG,EAAE,CAAA;AACjE,MAAA,KAAA,MAAW,MAAA,IAAU,OAAA,CAAQ,MAAA,CAAO,KAAK,CAAA,EAAG;AAC1C,QAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,UAAA,IAAI,WAAA,CAAI,MAAA,CAAO,GAAA,EAAK,GAAG,MAAM,EAAA,EAAI;AAC/B,YAAA;AAAA,UACF;AAAA,QACF;AACA,QAAA,IAAI,IAAA,CAAK,cAAc,MAAA,EAAW;AAChC,UAAA,IAAI,YAAI,MAAA,CAAO,GAAA,EAAK,IAAA,CAAK,SAAS,MAAM,CAAA,EAAG;AACzC,YAAA;AAAA,UACF;AAAA,QACF;AACA,QAAA,IAAI,IAAA,CAAK,WAAW,MAAA,EAAW;AAC7B,UAAA,IAAI,CAAC,IAAA,CAAK,MAAA,CAAO,QAAA,CAAS,MAAA,CAAO,GAAG,CAAA,EAAG;AACrC,YAAA;AAAA,UACF;AAAA,QACF;AACA,QAAA,WAAA,GAAc,MAAA;AACd,QAAA;AAAA,MACF;AAAA,IACF,CAAA,MAAA,IAAW,IAAA,CAAK,SAAA,KAAc,MAAA,EAAQ;AACpC,MAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,IAAA,CAAK,MAAA,EAAQ,IAAI,CAAC,GAAA,EAAK,IAAA,CAAK,SAAS,CAAC,CAAA;AACjE,MAAA,KAAA,MAAW,MAAA,IAAU,OAAA,CAAQ,MAAA,CAAO,KAAA,EAAO,MAAM,CAAA,EAAG;AAClD,QAAA,MAAM,eAAe,GAAA,KAAQ,MAAA,GAAY,YAAI,MAAA,CAAO,GAAA,EAAK,GAAG,CAAA,GAAI,MAAA;AAChE,QAAA,MAAM,iBAAA,GAAoB,KAAK,SAAA,KAAc,MAAA,GAAY,YAAI,MAAA,CAAO,GAAA,EAAK,IAAA,CAAK,SAAS,CAAA,GAAI,MAAA;AAC3F,QAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,UAAA,IAAI,iBAAiB,CAAA,EAAG;AACtB,YAAA;AAAA,UACF;AAAA,QACF;AACA,QAAA,IAAI,eAAe,MAAA,EAAW;AAC5B,UAAA,IAAI,iBAAiB,CAAA,EAAG;AACtB,YAAA;AAAA,UACF;AACA,UAAA,MAAM,mBAAA,GAAsB,WAAA,CAAI,MAAA,CAAO,KAAA,EAAO,UAAU,CAAA;AACxD,UAAA,IAAI,YAAA,KAAiB,CAAA,IAAK,mBAAA,KAAwB,CAAA,EAAG;AACnD,YAAA;AAAA,UACF;AAAA,QACF;AACA,QAAA,IAAI,IAAA,CAAK,SAAA,KAAc,MAAA,IAAa,mBAAA,EAAqB;AACvD,UAAA,IAAI,sBAAsB,EAAA,EAAI;AAC5B,YAAA;AAAA,UACF;AAAA,QACF;AACA,QAAA,IAAI,IAAA,CAAK,SAAA,KAAc,MAAA,IAAa,CAAC,mBAAA,EAAqB;AACxD,UAAA,IAAI,sBAAsB,CAAA,EAAG;AAC3B,YAAA;AAAA,UACF;AACA,UAAA,IAAI,iBAAA,KAAsB,KAAK,WAAA,CAAI,MAAA,CAAO,OAAO,IAAA,CAAK,oBAAoB,MAAM,EAAA,EAAI;AAClF,YAAA;AAAA,UACF;AAAA,QACF;AACA,QAAA,IAAI,IAAA,CAAK,WAAW,MAAA,EAAW;AAC7B,UAAA,IAAI,CAAC,IAAA,CAAK,MAAA,CAAO,QAAA,CAAS,MAAA,CAAO,GAAG,CAAA,EAAG;AACrC,YAAA;AAAA,UACF;AAAA,QACF;AACA,QAAA,WAAA,GAAc,MAAA;AACd,QAAA;AAAA,MACF;AAAA,IACF,CAAA,MAAA,IAAW,IAAA,CAAK,SAAA,KAAc,YAAA,EAAc;AAC1C,MAAA,IAAI,UAAA;AACJ,MAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,IAAA,CAAK,MAAA,EAAQ,IAAI,CAAC,GAAA,EAAK,IAAA,CAAK,SAAS,CAAC,CAAA;AACjE,MAAA,KAAA,MAAW,MAAA,IAAU,OAAA,CAAQ,MAAA,CAAO,KAAA,EAAO,MAAM,CAAA,EAAG;AAClD,QAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,UAAA,IAAI,WAAA,CAAI,MAAA,CAAO,GAAA,EAAK,GAAG,MAAM,CAAA,EAAG;AAC9B,YAAA;AAAA,UACF;AAAA,QACF;AACA,QAAA,IAAI,IAAA,CAAK,cAAc,MAAA,EAAW;AAChC,UAAA,IAAI,YAAI,MAAA,CAAO,GAAA,EAAK,IAAA,CAAK,SAAS,MAAM,EAAA,EAAI;AAC1C,YAAA;AAAA,UACF;AAAA,QACF;AACA,QAAA,IAAI,IAAA,CAAK,WAAW,MAAA,EAAW;AAC7B,UAAA,IAAI,CAAC,IAAA,CAAK,MAAA,CAAO,QAAA,CAAS,MAAA,CAAO,GAAG,CAAA,EAAG;AACrC,YAAA;AAAA,UACF;AAAA,QACF;AACA,QAAA,UAAA,GAAa,MAAA;AACb,QAAA;AAAA,MACF;AACA,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,WAAA,GAAc,OAAA,CAAQ,GAAA,CAAI,UAAA,CAAW,GAAG,CAAA;AAAA,MAC1C;AAAA,IACF;AACA,IAAA,IAAI,MAAA;AACJ,IAAA,IAAI,CAAC,WAAA,EAAa;AAChB,MAAA,IAAA,CAAK,IAAA,GAAO,MAAA;AACZ,MAAA,IAAI,CAAC,mBAAA,EAAqB;AACxB,QAAA,IAAA,CAAK,oBAAA,GAAuB,MAAA;AAAA,MAC9B;AAIA,MAAA,IAAI,CAAC,IAAA,CAAK,QAAA,IAAY,IAAA,CAAK,QAAA,OAAe,6BAAA,EAA+B;AACvE,QAAA,IAAA,CAAK,KAAA,GAAQ,MAAA;AAAA,MACf;AACA,MAAA,MAAA,GAAS,IAAA;AAAA,IACX,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,YAAY,WAAA,CAAY,GAAA;AAC7B,MAAA,IAAI,CAAC,mBAAA,EAAqB;AACxB,QAAA,IAAA,CAAK,uBAAuB,WAAA,CAAY,KAAA;AAAA,MAC1C;AACA,MAAA,IAAA,CAAK,OAAO,WAAA,CAAY,GAAA;AACxB,MAAA,IAAI,mBAAA,EAAqB;AACvB,QAAA,IAAA,CAAK,WAAA,GAAc,eAAA,CAAgB,WAAA,CAAY,GAAG,CAAA;AAClD,QAAA,IAAI,CAAC,IAAA,CAAK,QAAA,IAAY,IAAA,CAAK,QAAA,OAAe,6BAAA,EAA+B;AACvE,UAAA,IAAA,CAAK,KAAA,GAAQ,eAAA,CAAgB,WAAA,CAAY,KAAK,CAAA;AAAA,QAChD;AAAA,MACF,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,WAAA,GAAc,eAAA,CAAgB,WAAA,CAAY,KAAK,CAAA;AACpD,QAAA,IAAI,CAAC,IAAA,CAAK,QAAA,IAAY,IAAA,CAAK,QAAA,OAAe,6BAAA,EAA+B;AACvE,UAAA,IAAI,IAAA,CAAK,kBAAkB,sBAAA,EAAgB;AAEzC,YAAA,MAAM,IAAI,MAAM,0BAA0B,CAAA;AAAA,UAC5C;AACA,UAAA,MAAM,QAAQ,IAAA,CAAK,MAAA,CAAO,YAAY,eAAA,CAAgB,QAAA,CAAS,YAAY,KAAK,CAAA;AAChF,UAAA,IAAA,CAAK,KAAA,GAAQ,gBAAgB,KAAK,CAAA;AAAA,QACpC;AAAA,MACF;AACA,MAAA,IAAA,CAAK,SAAA,GAAY,IAAA;AAEjB,MAAA,MAAA,GAAS,IAAA;AAAA,IACX;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA,EAGA,OAAO,KAAA,EAAO;AACZ,IAAA,IAAI,UAAU,MAAA,EAAW;AACvB,MAAA,MAAM,IAAI,SAAA,EAAU;AAAA,IACtB;AACA,IAAA,MAAM,oBAAA,GAAuB,wBAAwB,IAAI,CAAA;AACzD,IAAA,MAAM,YAAA,GAAe,OAAO,MAAA,CAAO,IAAA,CAAK,QAAQ,WAAW,CAAA,GAAI,IAAA,CAAK,UAAA,GAAa,IAAA,CAAK,SAAA;AACtF,IAAA,MAAM,cAAc,oBAAA,CAAqB,WAAA;AACzC,IAAA,IAAI,WAAA,CAAY,WAAW,QAAA,EAAU;AACnC,MAAA,MAAM,IAAI,wBAAA,EAAyB;AAAA,IACrC;AACA,IAAA,IAAI,WAAA,CAAY,SAAS,UAAA,EAAY;AACnC,MAAA,MAAM,IAAI,aAAA,EAAc;AAAA,IAC1B;AACA,IAAA,IAAI,oBAAA,CAAqB,gBAAgB,OAAA,EAAS;AAChD,MAAA,MAAM,IAAI,iBAAA,EAAkB;AAAA,IAC9B;AACA,IAAA,IAAI,EAAE,IAAA,CAAK,MAAA,YAAkB,2BAAmB,IAAA,CAAK,MAAA,CAAO,UAAU,OAAA,EAAS;AAC7E,MAAA,MAAM,IAAI,iBAAA,EAAkB;AAAA,IAC9B;AACA,IAAA,IAAI,CAAC,KAAK,SAAA,IAAa,CAAC,OAAO,MAAA,CAAO,IAAA,EAAM,OAAO,CAAA,EAAG;AACpD,MAAA,MAAM,IAAI,iBAAA,EAAkB;AAAA,IAC9B;AACA,IAAA,MAAM,KAAA,GAAQ,sBAAA,CAAuB,KAAA,EAAO,WAAW,CAAA;AACvD,IAAA,IAAI,oBAAA,CAAqB,YAAY,IAAA,EAAM;AACzC,MAAA,IAAI,OAAA;AACJ,MAAA,IAAI;AACF,QAAA,OAAA,GAAU,kBAAA,CAAW,oBAAA,CAAqB,OAAA,EAAS,KAAK,CAAA,CAAE,GAAA;AAAA,MAC5D,SAAS,GAAA,EAAK;AAAA,MAEd;AACA,MAAA,IAAI,WAAA,CAAI,OAAA,EAAS,YAAY,CAAA,KAAM,CAAA,EAAG;AACpC,QAAA,MAAM,IAAI,SAAA,EAAU;AAAA,MACtB;AAAA,IACF;AACA,IAAA,MAAM,MAAA,GAAS;AAAA,MACb,GAAA,EAAK,YAAA;AAAA,MACL,KAAA,EAAO;AAAA,KACT;AACA,IAAA,OAAO,YAAY,iBAAA,CAAkB;AAAA,MACnC,SAAA,EAAW,oBAAA,CAAqB,eAAA,CAAgB,WAAA,CAAY,IAAA,CAAK,qBAAqB,eAAA,EAAiB,MAAA,EAAQ,KAAA,EAAO,WAAA,CAAY,YAAY,CAAA;AAAA,MAC9I,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,QAAQ,KAAA,EAAO;AACb,IAAA,IAAI,CAAC,MAAA,CAAO,SAAA,CAAU,KAAK,CAAA,IAAK,SAAS,CAAA,EAAG;AAC1C,MAAA,MAAM,IAAI,SAAA,EAAU;AAAA,IACtB;AACA,IAAA,MAAM,oBAAA,GAAuB,wBAAwB,IAAI,CAAA;AACzD,IAAA,MAAM,cAAc,oBAAA,CAAqB,WAAA;AACzC,IAAA,IAAI,WAAA,CAAY,WAAW,QAAA,EAAU;AACnC,MAAA,MAAM,IAAI,wBAAA,EAAyB;AAAA,IACrC;AACA,IAAA,IAAI,oBAAA,CAAqB,gBAAgB,OAAA,EAAS;AAChD,MAAA,MAAM,IAAI,iBAAA,EAAkB;AAAA,IAC9B;AACA,IAAA,IAAI,EAAE,IAAA,CAAK,MAAA,YAAkB,2BAAmB,IAAA,CAAK,MAAA,CAAO,UAAU,OAAA,EAAS;AAC7E,MAAA,MAAM,IAAI,iBAAA,EAAkB;AAAA,IAC9B;AACA,IAAA,IAAI,CAAC,KAAK,SAAA,EAAW;AACnB,MAAA,MAAM,IAAI,iBAAA,EAAkB;AAAA,IAC9B;AACA,IAAA,IAAI,KAAK,QAAA,EAAU;AACjB,MAAA,IAAA,CAAK,SAAS,UAAA,GAAa,SAAA;AAAA,IAC7B;AACA,IAAA,WAAA,CAAY,iBAAA,CAAkB;AAAA,MAC5B,WAAW,MAAM;AACf,QAAA,IAAI,MAAA;AACJ,QAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,EAAO,CAAA,EAAA,EAAK;AAC9B,UAAA,MAAA,GAAS,KAAK,QAAA,EAAS;AAGvB,UAAA,IAAI,CAAC,MAAA,EAAQ;AACX,YAAA;AAAA,UACF;AAAA,QACF;AACA,QAAA,OAAO,MAAA;AAAA,MACT,CAAA;AAAA,MACA,SAAS,IAAA,CAAK,QAAA;AAAA,MACd,QAAQ,IAAA,CAAK;AAAA,KACd,CAAA;AACD,IAAA,IAAA,CAAK,SAAA,GAAY,KAAA;AAAA,EACnB;AAAA;AAAA,EAGA,SAAS,GAAA,EAAK;AACZ,IAAA,MAAM,oBAAA,GAAuB,wBAAwB,IAAI,CAAA;AACzD,IAAA,MAAM,cAAc,oBAAA,CAAqB,WAAA;AACzC,IAAA,IAAI,WAAA,CAAY,WAAW,QAAA,EAAU;AACnC,MAAA,MAAM,IAAI,wBAAA,EAAyB;AAAA,IACrC;AACA,IAAA,IAAI,oBAAA,CAAqB,gBAAgB,OAAA,EAAS;AAChD,MAAA,MAAM,IAAI,iBAAA,EAAkB;AAAA,IAC9B;AACA,IAAA,IAAI,EAAE,IAAA,CAAK,MAAA,YAAkB,2BAAmB,IAAA,CAAK,MAAA,CAAO,UAAU,OAAA,EAAS;AAC7E,MAAA,MAAM,IAAI,iBAAA,EAAkB;AAAA,IAC9B;AACA,IAAA,IAAI,CAAC,KAAK,SAAA,EAAW;AACnB,MAAA,MAAM,IAAI,iBAAA,EAAkB;AAAA,IAC9B;AACA,IAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,MAAA,GAAA,GAAM,mBAAW,GAAG,CAAA;AACpB,MAAA,MAAM,SAAA,GAAY,WAAA,CAAI,GAAA,EAAK,IAAA,CAAK,SAAS,CAAA;AACzC,MAAA,IAAI,SAAA,IAAa,CAAA,KAAM,IAAA,CAAK,SAAA,KAAc,UAAU,IAAA,CAAK,SAAA,KAAc,YAAA,CAAA,IAAiB,SAAA,IAAa,MAAM,IAAA,CAAK,SAAA,KAAc,MAAA,IAAU,IAAA,CAAK,cAAc,YAAA,CAAA,EAAe;AACxK,QAAA,MAAM,IAAI,SAAA,EAAU;AAAA,MACtB;AAAA,IACF;AACA,IAAA,IAAI,KAAK,QAAA,EAAU;AACjB,MAAA,IAAA,CAAK,SAAS,UAAA,GAAa,SAAA;AAAA,IAC7B;AACA,IAAA,WAAA,CAAY,iBAAA,CAAkB;AAAA,MAC5B,SAAA,EAAW,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,MAAM,GAAG,CAAA;AAAA,MACvC,SAAS,IAAA,CAAK,QAAA;AAAA,MACd,QAAQ,IAAA,CAAK;AAAA,KACd,CAAA;AACD,IAAA,IAAA,CAAK,SAAA,GAAY,KAAA;AAAA,EACnB;AAAA;AAAA,EAGA,kBAAA,CAAmB,KAAK,UAAA,EAAY;AAClC,IAAA,MAAM,oBAAA,GAAuB,wBAAwB,IAAI,CAAA;AACzD,IAAA,MAAM,cAAc,oBAAA,CAAqB,WAAA;AACzC,IAAA,IAAI,WAAA,CAAY,WAAW,QAAA,EAAU;AACnC,MAAA,MAAM,IAAI,wBAAA,EAAyB;AAAA,IACrC;AACA,IAAA,IAAI,oBAAA,CAAqB,gBAAgB,OAAA,EAAS;AAChD,MAAA,MAAM,IAAI,iBAAA,EAAkB;AAAA,IAC9B;AACA,IAAA,IAAI,EAAE,IAAA,CAAK,MAAA,YAAkB,2BAAmB,IAAA,CAAK,MAAA,CAAO,UAAU,OAAA,EAAS;AAC7E,MAAA,MAAM,IAAI,iBAAA,EAAkB;AAAA,IAC9B;AACA,IAAA,IAAI,IAAA,CAAK,kBAAkB,sBAAA,IAAkB,IAAA,CAAK,cAAc,MAAA,IAAU,IAAA,CAAK,cAAc,MAAA,EAAQ;AACnG,MAAA,MAAM,IAAI,kBAAA,EAAmB;AAAA,IAC/B;AACA,IAAA,IAAI,CAAC,KAAK,SAAA,EAAW;AACnB,MAAA,MAAM,IAAI,iBAAA,EAAkB;AAAA,IAC9B;AAGA,IAAA,IAAI,GAAA,KAAQ,MAAA,IAAa,UAAA,KAAe,MAAA,EAAW;AACjD,MAAA,MAAM,IAAI,SAAA,EAAU;AAAA,IACtB;AACA,IAAA,GAAA,GAAM,mBAAW,GAAG,CAAA;AACpB,IAAA,MAAM,SAAA,GAAY,WAAA,CAAI,GAAA,EAAK,IAAA,CAAK,SAAS,CAAA;AACzC,IAAA,IAAI,SAAA,KAAc,MAAM,IAAA,CAAK,SAAA,KAAc,UAAU,SAAA,KAAc,CAAA,IAAK,IAAA,CAAK,SAAA,KAAc,MAAA,EAAQ;AACjG,MAAA,MAAM,IAAI,SAAA,EAAU;AAAA,IACtB;AACA,IAAA,MAAM,UAAA,GAAa,WAAA,CAAI,UAAA,EAAY,IAAA,CAAK,oBAAoB,CAAA;AAC5D,IAAA,IAAI,cAAc,CAAA,EAAG;AACnB,MAAA,IAAI,UAAA,IAAc,KAAK,IAAA,CAAK,SAAA,KAAc,UAAU,UAAA,IAAc,CAAA,IAAK,IAAA,CAAK,SAAA,KAAc,MAAA,EAAQ;AAChG,QAAA,MAAM,IAAI,SAAA,EAAU;AAAA,MACtB;AAAA,IACF;AACA,IAAA,IAAI,KAAK,QAAA,EAAU;AACjB,MAAA,IAAA,CAAK,SAAS,UAAA,GAAa,SAAA;AAAA,IAC7B;AACA,IAAA,WAAA,CAAY,iBAAA,CAAkB;AAAA,MAC5B,WAAW,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,IAAA,EAAM,KAAK,UAAU,CAAA;AAAA,MACnD,SAAS,IAAA,CAAK,QAAA;AAAA,MACd,QAAQ,IAAA,CAAK;AAAA,KACd,CAAA;AACD,IAAA,IAAA,CAAK,SAAA,GAAY,KAAA;AAAA,EACnB;AAAA,EACA,MAAA,GAAS;AACP,IAAA,MAAM,oBAAA,GAAuB,wBAAwB,IAAI,CAAA;AACzD,IAAA,MAAM,YAAA,GAAe,OAAO,MAAA,CAAO,IAAA,CAAK,QAAQ,WAAW,CAAA,GAAI,IAAA,CAAK,UAAA,GAAa,IAAA,CAAK,SAAA;AACtF,IAAA,MAAM,cAAc,oBAAA,CAAqB,WAAA;AACzC,IAAA,IAAI,WAAA,CAAY,WAAW,QAAA,EAAU;AACnC,MAAA,MAAM,IAAI,wBAAA,EAAyB;AAAA,IACrC;AACA,IAAA,IAAI,WAAA,CAAY,SAAS,UAAA,EAAY;AACnC,MAAA,MAAM,IAAI,aAAA,EAAc;AAAA,IAC1B;AACA,IAAA,IAAI,oBAAA,CAAqB,gBAAgB,OAAA,EAAS;AAChD,MAAA,MAAM,IAAI,iBAAA,EAAkB;AAAA,IAC9B;AACA,IAAA,IAAI,EAAE,IAAA,CAAK,MAAA,YAAkB,2BAAmB,IAAA,CAAK,MAAA,CAAO,UAAU,OAAA,EAAS;AAC7E,MAAA,MAAM,IAAI,iBAAA,EAAkB;AAAA,IAC9B;AACA,IAAA,IAAI,CAAC,KAAK,SAAA,IAAa,CAAC,OAAO,MAAA,CAAO,IAAA,EAAM,OAAO,CAAA,EAAG;AACpD,MAAA,MAAM,IAAI,iBAAA,EAAkB;AAAA,IAC9B;AACA,IAAA,OAAO,YAAY,iBAAA,CAAkB;AAAA,MACnC,SAAA,EAAW,qBAAqB,eAAA,CAAgB,YAAA,CAAa,KAAK,oBAAA,CAAqB,eAAA,EAAiB,YAAA,EAAc,WAAA,CAAY,YAAY,CAAA;AAAA,MAC9I,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAAA,EACA,KAAK,MAAA,CAAO,WAAW,CAAA,GAAI;AACzB,IAAA,OAAO,WAAA;AAAA,EACT;AACF,CAAA;AACA,IAAO,iBAAA,GAAQ,SAAA;;;ACtdf,IAAM,kBAAA,GAAN,cAAiC,iBAAA,CAAU;AAAA,EACzC,KAAA,GAAQ,MAAA;AAAA,EACR,WAAA,CAAY,MAAA,EAAQ,KAAA,EAAO,SAAA,EAAW,OAAA,EAAS;AAC7C,IAAA,KAAA,CAAM,MAAA,EAAQ,KAAA,EAAO,SAAA,EAAW,OAAO,CAAA;AAAA,EACzC;AAAA,EACA,KAAK,MAAA,CAAO,WAAW,CAAA,GAAI;AACzB,IAAA,OAAO,oBAAA;AAAA,EACT;AACF,CAAA;AACA,IAAO,0BAAA,GAAQ,kBAAA;;;ACTf,IAAM,OAAA,GAAU,CAAC,KAAA,EAAO,QAAA,KAAa;AACnC,EAAA,OAAO,KAAA,CAAM,2BAAA,IAA+B,KAAA,CAAM,UAAA,KAAe,MAAM,eAAA,IAAmB,QAAA,CAAS,OAAA,KAAY,KAAA,IAAS,KAAA,CAAM,UAAA,KAAe,KAAA,CAAM,cAAA,IAAkB,SAAS,OAAA,KAAY,IAAA;AAC5L,CAAA;AAGA,IAAM,oBAAA,GAAuB,CAAC,KAAA,EAAO,GAAA,KAAQ;AAC3C,EAAA,KAAA,CAAM,aAAA,GAAgB,GAAA;AACtB,EAAA,MAAM,SAAS,EAAC;AAChB,EAAA,MAAM,SAAS,CAAA,gBAAA,KAAoB;AACjC,IAAA,IAAI;AACF,MAAA,MAAMC,SAAAA,GAAW,OAAO,gBAAA,KAAqB,UAAA,GAAa,mBAAmB,gBAAA,CAAiB,WAAA;AAE9F,MAAAA,SAAAA,CAAS,IAAA,CAAK,KAAA,CAAM,aAAA,EAAe,KAAK,CAAA;AAAA,IAC1C,SAAS,GAAA,EAAK;AACZ,MAAA,MAAA,CAAO,KAAK,GAAG,CAAA;AAAA,IACjB;AAAA,EACF,CAAA;AAKA,EAAA,KAAA,MAAW,QAAA,IAAY,GAAA,CAAI,SAAA,CAAU,KAAA,EAAM,EAAG;AAC5C,IAAA,IAAI,MAAM,IAAA,KAAS,QAAA,CAAS,QAAQ,OAAA,CAAQ,KAAA,EAAO,QAAQ,CAAA,EAAG;AAC5D,MAAA;AAAA,IACF;AACA,IAAA,MAAA,CAAO,SAAS,QAAQ,CAAA;AAAA,EAC1B;AACA,EAAA,MAAM,UAAA,GAAa;AAAA,IACjB,KAAA,EAAO,SAAA;AAAA,IACP,OAAA,EAAS,WAAA;AAAA,IACT,KAAA,EAAO,SAAA;AAAA,IACP,QAAA,EAAU,YAAA;AAAA,IACV,KAAA,EAAO,SAAA;AAAA,IACP,OAAA,EAAS,WAAA;AAAA,IACT,aAAA,EAAe,iBAAA;AAAA,IACf,aAAA,EAAe;AAAA,GACjB;AACA,EAAA,MAAM,IAAA,GAAO,UAAA,CAAW,KAAA,CAAM,IAAI,CAAA;AAClC,EAAA,IAAI,SAAS,MAAA,EAAW;AACtB,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qBAAA,EAAwB,KAAA,CAAM,IAAI,CAAA,CAAA,CAAG,CAAA;AAAA,EACvD;AACA,EAAA,MAAM,QAAA,GAAW,KAAA,CAAM,aAAA,CAAc,IAAI,CAAA;AACzC,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,MAAM,QAAA,GAAW;AAAA,MACf,QAAA;AAAA,MACA,OAAA,EAAS,KAAA;AAAA,MACT,MAAM,KAAA,CAAM;AAAA,KACd;AACA,IAAA,IAAI,CAAC,OAAA,CAAQ,KAAA,EAAO,QAAQ,CAAA,EAAG;AAC7B,MAAA,MAAA,CAAO,SAAS,QAAQ,CAAA;AAAA,IAC1B;AAAA,EACF;AAIA,EAAA,IAAI,OAAO,MAAA,EAAQ;AACjB,IAAA,MAAM,IAAI,eAAe,MAAM,CAAA;AAAA,EACjC;AACF,CAAA;AACA,IAAM,kBAAN,MAAsB;AAAA,EACpB,YAAY,EAAC;AAAA;AAAA,EAIb,gBAAA,CAAiB,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS;AACxC,IAAA,MAAM,OAAA,GAAU,CAAC,EAAE,OAAO,YAAY,QAAA,IAAY,OAAA,GAAU,QAAQ,OAAA,GAAU,OAAA,CAAA;AAC9E,IAAA,IAAA,CAAK,UAAU,IAAA,CAAK;AAAA,MAClB,QAAA;AAAA,MACA,OAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EACA,mBAAA,CAAoB,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS;AAC3C,IAAA,MAAM,OAAA,GAAU,CAAC,EAAE,OAAO,YAAY,QAAA,IAAY,OAAA,GAAU,QAAQ,OAAA,GAAU,OAAA,CAAA;AAC9E,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,SAAA,CAAU,SAAA,CAAU,CAAA,QAAA,KAAY;AAC7C,MAAA,OAAO,SAAS,IAAA,KAAS,IAAA,IAAQ,SAAS,QAAA,KAAa,QAAA,IAAY,SAAS,OAAA,KAAY,OAAA;AAAA,IAC1F,CAAC,CAAA;AACD,IAAA,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,CAAA,EAAG,CAAC,CAAA;AAAA,EAC5B;AAAA;AAAA,EAGA,cAAc,KAAA,EAAO;AACnB,IAAA,IAAI,KAAA,CAAM,UAAA,IAAc,CAAC,KAAA,CAAM,WAAA,EAAa;AAC1C,MAAA,MAAM,IAAI,kBAAkB,oCAAoC,CAAA;AAAA,IAClE;AACA,IAAA,KAAA,CAAM,SAAA,GAAY,KAAA;AAClB,IAAA,KAAA,CAAM,UAAA,GAAa,IAAA;AACnB,IAAA,KAAA,CAAM,MAAA,GAAS,IAAA;AAGf,IAAA,KAAA,CAAM,aAAa,KAAA,CAAM,eAAA;AACzB,IAAA,KAAA,MAAW,GAAA,IAAO,MAAM,SAAA,EAAW;AACjC,MAAA,IAAI,CAAC,MAAM,kBAAA,EAAoB;AAC7B,QAAA,oBAAA,CAAqB,OAAO,GAAG,CAAA;AAAA,MACjC;AAAA,IACF;AACA,IAAA,KAAA,CAAM,aAAa,KAAA,CAAM,SAAA;AACzB,IAAA,IAAI,CAAC,MAAM,kBAAA,EAAoB;AAC7B,MAAA,oBAAA,CAAqB,KAAA,EAAO,MAAM,MAAM,CAAA;AAAA,IAC1C;AACA,IAAA,IAAI,MAAM,OAAA,EAAS;AACjB,MAAA,KAAA,CAAM,UAAU,OAAA,EAAQ;AACxB,MAAA,KAAA,CAAM,aAAa,KAAA,CAAM,cAAA;AACzB,MAAA,KAAA,MAAW,GAAA,IAAO,MAAM,SAAA,EAAW;AACjC,QAAA,IAAI,CAAC,MAAM,kBAAA,EAAoB;AAC7B,UAAA,oBAAA,CAAqB,OAAO,GAAG,CAAA;AAAA,QACjC;AAAA,MACF;AAAA,IACF;AACA,IAAA,KAAA,CAAM,UAAA,GAAa,KAAA;AACnB,IAAA,KAAA,CAAM,aAAa,KAAA,CAAM,IAAA;AACzB,IAAA,KAAA,CAAM,aAAA,GAAgB,IAAA;AACtB,IAAA,IAAI,MAAM,QAAA,EAAU;AAClB,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AACF,CAAA;AACA,IAAO,uBAAA,GAAQ,eAAA;;;ACrHf,IAAM,UAAA,GAAN,cAAyB,uBAAA,CAAgB;AAAA,EACvC,OAAA,GAAU,IAAA;AAAA,EACV,MAAA,GAAS,IAAA;AAAA,EACT,MAAA,GAAS,IAAA;AAAA,EACT,WAAA,GAAc,IAAA;AAAA,EACd,UAAA,GAAa,SAAA;AAAA,EACb,SAAA,GAAY,IAAA;AAAA,EACZ,OAAA,GAAU,IAAA;AAAA,EACV,IAAI,KAAA,GAAQ;AACV,IAAA,IAAI,IAAA,CAAK,eAAe,SAAA,EAAW;AACjC,MAAA,MAAM,IAAI,iBAAA,EAAkB;AAAA,IAC9B;AACA,IAAA,OAAO,IAAA,CAAK,MAAA;AAAA,EACd;AAAA,EACA,IAAI,MAAM,KAAA,EAAO;AACf,IAAA,IAAA,CAAK,MAAA,GAAS,KAAA;AAAA,EAChB;AAAA,EACA,IAAI,MAAA,GAAS;AACX,IAAA,IAAI,IAAA,CAAK,eAAe,SAAA,EAAW;AACjC,MAAA,MAAM,IAAI,iBAAA,EAAkB;AAAA,IAC9B;AACA,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACd;AAAA,EACA,IAAI,OAAO,KAAA,EAAO;AAChB,IAAA,IAAA,CAAK,OAAA,GAAU,KAAA;AAAA,EACjB;AAAA,EACA,KAAK,MAAA,CAAO,WAAW,CAAA,GAAI;AACzB,IAAA,OAAO,YAAA;AAAA,EACT;AACF,CAAA;AACA,IAAO,kBAAA,GAAQ,UAAA;;;AChCf,IAAM,oBAAN,MAAwB;AAAA,EACtB,eAAe,MAAA,EAAQ;AACrB,IAAA,IAAA,CAAK,OAAA,GAAU,MAAA;AACf,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AACtC,MAAA,IAAA,CAAK,CAAC,CAAA,GAAI,MAAA,CAAO,CAAC,CAAA;AAAA,IACpB;AAAA,EACF;AAAA,EACA,SAAS,KAAA,EAAO;AACd,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,QAAA,CAAS,KAAK,CAAA;AAAA,EACpC;AAAA,EACA,KAAK,CAAA,EAAG;AACN,IAAA,IAAI,CAAA,GAAI,CAAA,IAAK,CAAA,IAAK,IAAA,CAAK,QAAQ,MAAA,EAAQ;AACrC,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAC,CAAA;AAAA,EACvB;AAAA,EACA,IAAI,MAAA,GAAS;AACX,IAAA,OAAO,KAAK,OAAA,CAAQ,MAAA;AAAA,EACtB;AAAA,EACA,CAAC,MAAA,CAAO,QAAQ,CAAA,GAAI;AAClB,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,QAAQ,CAAA,EAAE;AAAA,EACvC;AAAA;AAAA;AAAA,EAKA,SAAS,MAAA,EAAQ;AACf,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AACtC,MAAA,IAAA,CAAK,KAAK,OAAA,CAAQ,MAAA,GAAS,CAAC,CAAA,GAAI,OAAO,CAAC,CAAA;AAAA,IAC1C;AACA,IAAA,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,GAAG,MAAM,CAAA;AAAA,EAC7B;AAAA,EACA,SAAS,MAAA,EAAQ;AACf,IAAA,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,GAAG,MAAM,CAAA;AAC3B,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,OAAA,CAAQ,QAAQ,CAAA,EAAA,EAAK;AAC5C,MAAA,IAAA,CAAK,CAAC,CAAA,GAAI,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAA;AAAA,IAC1B;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AACF,CAAA;AACA,IAAO,yBAAA,GAAQ,iBAAA;;;ACnCf,IAAM,eAAA,GAAkB,CAAC,KAAA,EAAO,kBAAA,GAAqB,KAAA,KAAU;AAC7D,EAAA,IAAI,iBAAiB,mBAAA,EAAa;AAChC,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW;AACzC,IAAA,IAAI,kBAAA,EAAoB;AACtB,MAAA,MAAM,IAAI,SAAA,EAAU;AAAA,IACtB;AACA,IAAA,OAAO,IAAI,mBAAA,CAAY,MAAA,EAAW,MAAA,EAAW,OAAO,KAAK,CAAA;AAAA,EAC3D;AACA,EAAA,MAAM,GAAA,GAAM,mBAAW,KAAK,CAAA;AAC5B,EAAA,OAAO,mBAAA,CAAY,KAAK,GAAG,CAAA;AAC7B,CAAA;AACA,IAAO,uBAAA,GAAQ,eAAA;;;ACjBf,IAAM,aAAa,CAAA,GAAA,KAAO,OAAO,QAAQ,QAAA,IAAY,GAAA,GAAM,MAAM,EAAA,GAAK,GAAA;AAG/D,SAAS,WAAW,OAAA,EAAS;AAIlC,EAAA,OAAO,KAAA,CAAM,QAAQ,OAAO,CAAA,GAAI,QAAQ,GAAA,CAAI,UAAU,CAAA,GAAI,UAAA,CAAW,OAAO,CAAA;AAC9E;;;ACLA,IAAM,6BAA6B,CAAA,KAAA,KAAS;AAE1C,EAAA,IAAI,iBAAiB,mBAAA,EAAa;AAChC,IAAA,OAAO,IAAA;AAAA,EACT;AAGA,EAAA,MAAM,GAAA,GAAM,kCAA0B,KAAK,CAAA;AAI3C,EAAA,OAAO,GAAA,KAAQ,YAAA;AACjB,CAAA;AACA,IAAO,kCAAA,GAAQ,0BAAA;;;ACff,IAAM,YAAA,GAAe,CAAC,GAAA,EAAK,IAAA,KAAS;AAClC,EAAA,MAAM,GAAA,GAAM,CAAA;AACZ,EAAA,MAAM,GAAA,GAAM,IAAA,KAAS,eAAA,GAAkB,UAAA,GAAa,gBAAA;AACpD,EAAA,IAAI,MAAM,GAAG,CAAA,IAAK,GAAA,GAAM,GAAA,IAAO,MAAM,GAAA,EAAK;AACxC,IAAA,MAAM,IAAI,SAAA,EAAU;AAAA,EACtB;AACA,EAAA,IAAI,OAAO,CAAA,EAAG;AACZ,IAAA,OAAO,IAAA,CAAK,MAAM,GAAG,CAAA;AAAA,EACvB;AACF,CAAA;AACA,IAAO,oBAAA,GAAQ,YAAA;;;ACTf,IAAM,oBAAA,GAAuB,CAAC,cAAA,EAAgB,KAAA,EAAO,YAAA,KAAiB;AACpE,EAAA,IAAI,KAAA;AACJ,EAAA,IAAI,SAAA;AACJ,EAAA,IAAI,mBAAmB,MAAA,IAAa,cAAA,KAAmB,IAAA,IAAQ,kCAAA,CAA2B,cAAc,CAAA,EAAG;AAEzG,IAAA,KAAA,GAAQ,cAAA;AACR,IAAA,IAAI,YAAA,GAAe,CAAA,IAAK,KAAA,KAAU,MAAA,EAAW;AAC3C,MAAA,KAAA,GAAQ,oBAAA,CAAa,OAAO,eAAe,CAAA;AAAA,IAC7C;AAAA,EACF,CAAA,MAAO;AAEL,IAAA,MAAM,aAAA,GAAgB,cAAA;AACtB,IAAA,IAAI,aAAA,CAAc,UAAU,MAAA,EAAW;AACrC,MAAA,KAAA,GAAQ,aAAA,CAAc,KAAA;AAAA,IACxB;AACA,IAAA,IAAI,aAAA,CAAc,UAAU,MAAA,EAAW;AACrC,MAAA,KAAA,GAAQ,oBAAA,CAAa,aAAA,CAAc,KAAA,EAAO,eAAe,CAAA;AAAA,IAC3D;AACA,IAAA,IAAI,aAAA,CAAc,cAAc,MAAA,EAAW;AACzC,MAAA,SAAA,GAAY,aAAA,CAAc,SAAA;AAAA,IAC5B;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,KAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACF;AACF,CAAA;AACA,IAAO,4BAAA,GAAQ,oBAAA;;;ACpBf,IAAM,2BAA2B,CAAA,KAAA,KAAS;AACxC,EAAA,IAAI,MAAM,SAAA,CAAU,OAAA,IAAW,KAAA,CAAM,WAAA,CAAY,gBAAgB,OAAA,EAAS;AACxE,IAAA,MAAM,IAAI,iBAAA,EAAkB;AAAA,EAC9B;AACA,EAAA,IAAI,KAAA,CAAM,WAAA,CAAY,WAAA,CAAY,MAAA,KAAW,QAAA,EAAU;AACrD,IAAA,MAAM,IAAI,wBAAA,EAAyB;AAAA,EACrC;AACF,CAAA;AAGA,IAAM,WAAN,MAAe;AAAA,EACb,WAAA,CAAY,aAAa,QAAA,EAAU;AACjC,IAAA,IAAA,CAAK,SAAA,GAAY,QAAA;AACjB,IAAA,IAAA,CAAK,QAAQ,QAAA,CAAS,IAAA;AACtB,IAAA,IAAA,CAAK,WAAA,GAAc,WAAA;AACnB,IAAA,IAAA,CAAK,OAAA,GAAU,UAAA,CAAW,QAAA,CAAS,OAAO,CAAA;AAC1C,IAAA,IAAA,CAAK,aAAa,QAAA,CAAS,UAAA;AAC3B,IAAA,IAAA,CAAK,SAAS,QAAA,CAAS,MAAA;AAAA,EACzB;AAAA,EACA,IAAI,IAAA,GAAO;AACT,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA;AAAA,EAGA,IAAI,KAAK,IAAA,EAAM;AACb,IAAA,MAAM,WAAA,GAAc,KAAK,WAAA,CAAY,WAAA;AACrC,IAAA,IAAI,CAAC,WAAA,CAAY,EAAA,CAAG,gCAAA,EAAkC;AACpD,MAAA,MAAM,YAAY,MAAA,KAAW,QAAA,GAAW,IAAI,iBAAA,EAAkB,GAAI,IAAI,wBAAA,EAAyB;AAAA,IACjG;AACA,IAAA,IAAI,WAAA,CAAY,WAAW,QAAA,EAAU;AACnC,MAAA,MAAM,IAAI,wBAAA,EAAyB;AAAA,IACrC;AACA,IAAA,IAAI,KAAK,SAAA,CAAU,OAAA,IAAW,IAAA,CAAK,WAAA,CAAY,gBAAgB,OAAA,EAAS;AACtE,MAAA,MAAM,IAAI,iBAAA,EAAkB;AAAA,IAC9B;AACA,IAAA,IAAA,GAAO,OAAO,IAAI,CAAA;AAClB,IAAA,IAAI,IAAA,KAAS,KAAK,KAAA,EAAO;AACvB,MAAA;AAAA,IACF;AACA,IAAA,IAAI,IAAA,CAAK,WAAA,CAAY,UAAA,CAAW,QAAA,CAAS,IAAI,CAAA,EAAG;AAC9C,MAAA,MAAM,IAAI,eAAA,EAAgB;AAAA,IAC5B;AACA,IAAA,MAAM,UAAU,IAAA,CAAK,KAAA;AACrB,IAAA,MAAM,aAAA,GAAgB,CAAC,GAAG,IAAA,CAAK,YAAY,UAAU,CAAA;AACrD,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAA;AACb,IAAA,IAAA,CAAK,UAAU,IAAA,GAAO,IAAA;AACtB,IAAA,IAAA,CAAK,WAAA,CAAY,aAAA,CAAc,MAAA,CAAO,OAAO,CAAA;AAC7C,IAAA,IAAA,CAAK,WAAA,CAAY,aAAA,CAAc,GAAA,CAAI,IAAA,EAAM,IAAI,CAAA;AAC7C,IAAA,IAAA,CAAK,WAAA,CAAY,eAAA,CAAgB,UAAA,CAAW,MAAA,CAAO,OAAO,CAAA;AAC1D,IAAA,IAAA,CAAK,YAAY,eAAA,CAAgB,UAAA,CAAW,GAAA,CAAI,IAAA,EAAM,KAAK,SAAS,CAAA;AACpE,IAAA,IAAA,CAAK,WAAA,CAAY,UAAA,GAAa,IAAI,yBAAA,CAAkB,GAAG,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,WAAA,CAAY,gBAAgB,UAAA,CAAW,IAAA,EAAM,CAAA,CAAE,OAAO,CAAA,SAAA,KAAa;AACxI,MAAA,MAAM,QAAQ,IAAA,CAAK,WAAA,CAAY,eAAA,CAAgB,UAAA,CAAW,IAAI,SAAS,CAAA;AACvE,MAAA,OAAO,KAAA,IAAS,CAAC,KAAA,CAAM,OAAA;AAAA,IACzB,CAAC,CAAA,CAAE,IAAA,EAAM,CAAA;AAGT,IAAA,IAAI,CAAC,KAAK,WAAA,CAAY,WAAA,CAAY,gBAAgB,GAAA,CAAI,IAAA,CAAK,SAAS,CAAA,EAAG;AACrE,MAAA,WAAA,CAAY,YAAA,CAAa,KAAK,MAAM;AAClC,QAAA,IAAA,CAAK,KAAA,GAAQ,OAAA;AACb,QAAA,IAAA,CAAK,UAAU,IAAA,GAAO,OAAA;AACtB,QAAA,IAAA,CAAK,WAAA,CAAY,aAAA,CAAc,MAAA,CAAO,IAAI,CAAA;AAC1C,QAAA,IAAA,CAAK,WAAA,CAAY,aAAA,CAAc,GAAA,CAAI,OAAA,EAAS,IAAI,CAAA;AAChD,QAAA,IAAA,CAAK,WAAA,CAAY,eAAA,CAAgB,UAAA,CAAW,MAAA,CAAO,IAAI,CAAA;AACvD,QAAA,IAAA,CAAK,YAAY,eAAA,CAAgB,UAAA,CAAW,GAAA,CAAI,OAAA,EAAS,KAAK,SAAS,CAAA;AACvE,QAAA,IAAA,CAAK,WAAA,CAAY,UAAA,GAAa,IAAI,yBAAA,CAAkB,GAAG,aAAa,CAAA;AAAA,MACtE,CAAC,CAAA;AAAA,IACH;AAAA,EACF;AAAA;AAAA,EAGA,UAAA,CAAW,OAAO,SAAA,EAAW;AAC3B,IAAA,wBAAA,CAAyB,IAAI,CAAA;AAC7B,IAAA,IAAI,UAAU,IAAA,EAAM;AAClB,MAAA,KAAA,GAAQ,MAAA;AAAA,IACV;AACA,IAAA,IAAI,KAAA,KAAU,MAAA,IAAa,EAAE,KAAA,YAAiB,mBAAA,CAAA,EAAc;AAC1D,MAAA,KAAA,GAAQ,mBAAA,CAAY,IAAA,CAAK,kBAAA,CAAW,KAAK,CAAC,CAAA;AAAA,IAC5C;AACA,IAAA,MAAM,OAAA,GAAU,IAAI,kBAAA,EAAW;AAC/B,IAAA,OAAA,CAAQ,MAAA,GAAS,IAAA;AACjB,IAAA,OAAA,CAAQ,WAAA,GAAc,KAAK,WAAA,CAAY,WAAA;AACvC,IAAA,MAAM,SAAS,IAAI,0BAAA,CAAmB,IAAA,EAAM,KAAA,EAAO,WAAW,OAAO,CAAA;AACrE,IAAA,OAAO,IAAA,CAAK,WAAA,CAAY,WAAA,CAAY,iBAAA,CAAkB;AAAA,MACpD,SAAA,EAAW,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,MAAM,CAAA;AAAA,MACtC,OAAA;AAAA,MACA,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,aAAA,CAAc,OAAO,SAAA,EAAW;AAC9B,IAAA,wBAAA,CAAyB,IAAI,CAAA;AAC7B,IAAA,IAAI,UAAU,IAAA,EAAM;AAClB,MAAA,KAAA,GAAQ,MAAA;AAAA,IACV;AACA,IAAA,IAAI,KAAA,KAAU,MAAA,IAAa,EAAE,KAAA,YAAiB,mBAAA,CAAA,EAAc;AAC1D,MAAA,KAAA,GAAQ,mBAAA,CAAY,IAAA,CAAK,kBAAA,CAAW,KAAK,CAAC,CAAA;AAAA,IAC5C;AACA,IAAA,MAAM,OAAA,GAAU,IAAI,kBAAA,EAAW;AAC/B,IAAA,OAAA,CAAQ,MAAA,GAAS,IAAA;AACjB,IAAA,OAAA,CAAQ,WAAA,GAAc,KAAK,WAAA,CAAY,WAAA;AACvC,IAAA,MAAM,SAAS,IAAI,iBAAA,CAAU,MAAM,KAAA,EAAO,SAAA,EAAW,SAAS,IAAI,CAAA;AAClE,IAAA,OAAO,IAAA,CAAK,WAAA,CAAY,WAAA,CAAY,iBAAA,CAAkB;AAAA,MACpD,SAAA,EAAW,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,MAAM,CAAA;AAAA,MACtC,OAAA;AAAA,MACA,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAAA,EACA,IAAI,GAAA,EAAK;AACP,IAAA,wBAAA,CAAyB,IAAI,CAAA;AAC7B,IAAA,IAAI,EAAE,eAAe,mBAAA,CAAA,EAAc;AACjC,MAAA,GAAA,GAAM,mBAAW,GAAG,CAAA;AAAA,IACtB;AACA,IAAA,OAAO,IAAA,CAAK,WAAA,CAAY,WAAA,CAAY,iBAAA,CAAkB;AAAA,MACpD,WAAW,IAAA,CAAK,SAAA,CAAU,SAAS,IAAA,CAAK,IAAA,CAAK,WAAW,GAAG,CAAA;AAAA,MAC3D,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAA,CAAO,gBAAgB,KAAA,EAAO;AAC5B,IAAA,MAAM,OAAA,GAAU,4BAAA,CAAqB,cAAA,EAAgB,KAAA,EAAO,UAAU,MAAM,CAAA;AAC5E,IAAA,wBAAA,CAAyB,IAAI,CAAA;AAC7B,IAAA,MAAM,KAAA,GAAQ,uBAAA,CAAgB,OAAA,CAAQ,KAAK,CAAA;AAC3C,IAAA,OAAO,IAAA,CAAK,WAAA,CAAY,WAAA,CAAY,iBAAA,CAAkB;AAAA,MACpD,SAAA,EAAW,IAAA,CAAK,SAAA,CAAU,YAAA,CAAa,IAAA,CAAK,IAAA,CAAK,SAAA,EAAW,KAAA,EAAO,OAAA,CAAQ,KAAA,EAAO,OAAA,CAAQ,SAAS,CAAA;AAAA,MACnG,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,OAAO,GAAA,EAAK;AACV,IAAA,wBAAA,CAAyB,IAAI,CAAA;AAC7B,IAAA,IAAI,EAAE,eAAe,mBAAA,CAAA,EAAc;AACjC,MAAA,GAAA,GAAM,mBAAW,GAAG,CAAA;AAAA,IACtB;AACA,IAAA,OAAO,IAAA,CAAK,WAAA,CAAY,WAAA,CAAY,iBAAA,CAAkB;AAAA,MACpD,WAAW,IAAA,CAAK,SAAA,CAAU,OAAO,IAAA,CAAK,IAAA,CAAK,WAAW,GAAG,CAAA;AAAA,MACzD,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,UAAA,CAAW,gBAAgB,KAAA,EAAO;AAChC,IAAA,MAAM,OAAA,GAAU,4BAAA,CAAqB,cAAA,EAAgB,KAAA,EAAO,UAAU,MAAM,CAAA;AAC5E,IAAA,wBAAA,CAAyB,IAAI,CAAA;AAC7B,IAAA,MAAM,KAAA,GAAQ,uBAAA,CAAgB,OAAA,CAAQ,KAAK,CAAA;AAC3C,IAAA,OAAO,IAAA,CAAK,WAAA,CAAY,WAAA,CAAY,iBAAA,CAAkB;AAAA,MACpD,SAAA,EAAW,IAAA,CAAK,SAAA,CAAU,UAAA,CAAW,IAAA,CAAK,IAAA,CAAK,SAAA,EAAW,KAAA,EAAO,OAAA,CAAQ,KAAA,EAAO,OAAA,CAAQ,SAAS,CAAA;AAAA,MACjG,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,cAAc,OAAA,EAAS;AACrB,IAAA,IAAI,KAAA;AACJ,IAAA,IAAI,KAAA;AACJ,IAAA,IAAI,SAAA;AACJ,IAAA,IAAI,YAAY,MAAA,EAAW;AACzB,MAAA,IAAI,OAAA,CAAQ,UAAU,MAAA,EAAW;AAC/B,QAAA,KAAA,GAAQ,OAAA,CAAQ,KAAA;AAAA,MAClB;AACA,MAAA,IAAI,OAAA,CAAQ,UAAU,MAAA,EAAW;AAC/B,QAAA,KAAA,GAAQ,oBAAA,CAAa,OAAA,CAAQ,KAAA,EAAO,eAAe,CAAA;AAAA,MACrD;AACA,MAAA,IAAI,OAAA,CAAQ,cAAc,MAAA,EAAW;AACnC,QAAA,SAAA,GAAY,OAAA,CAAQ,SAAA;AAAA,MACtB;AAAA,IACF;AACA,IAAA,wBAAA,CAAyB,IAAI,CAAA;AAC7B,IAAA,MAAM,KAAA,GAAQ,wBAAgB,KAAK,CAAA;AACnC,IAAA,OAAO,IAAA,CAAK,WAAA,CAAY,WAAA,CAAY,iBAAA,CAAkB;AAAA,MACpD,SAAA,EAAW,KAAK,SAAA,CAAU,aAAA,CAAc,KAAK,IAAA,CAAK,SAAA,EAAW,KAAA,EAAO,KAAA,EAAO,SAAS,CAAA;AAAA,MACpF,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,GAAA,EAAK;AACT,IAAA,wBAAA,CAAyB,IAAI,CAAA;AAC7B,IAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,MAAA,GAAA,GAAM,MAAA;AAAA,IACR;AACA,IAAA,IAAI,GAAA,KAAQ,MAAA,IAAa,EAAE,GAAA,YAAe,mBAAA,CAAA,EAAc;AACtD,MAAA,GAAA,GAAM,mBAAA,CAAY,IAAA,CAAK,kBAAA,CAAW,GAAG,CAAC,CAAA;AAAA,IACxC;AACA,IAAA,OAAO,IAAA,CAAK,WAAA,CAAY,WAAA,CAAY,iBAAA,CAAkB;AAAA,MACpD,WAAW,MAAM;AACf,QAAA,OAAO,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,GAAG,CAAA;AAAA,MACjC,CAAA;AAAA,MACA,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAAA,EACA,KAAK,MAAA,CAAO,WAAW,CAAA,GAAI;AACzB,IAAA,OAAO,UAAA;AAAA,EACT;AACF,CAAA;AACA,IAAO,gBAAA,GAAQ,QAAA;;;AC/Mf,IAAM,YAAA,GAAe,CAAC,OAAA,EAAS,KAAA,KAAU;AACvC,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,EAAG;AAC1B,IAAA,MAAM,IAAI,MAAM,oMAAoM,CAAA;AAAA,EACtN;AACA,EAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,KAAA,CAAM,GAAG,CAAA;AACrC,EAAA,IAAI,WAAA,CAAY,WAAW,CAAA,EAAG;AAC5B,IAAA,MAAM,IAAI,MAAM,kCAAkC,CAAA;AAAA,EACpD;AACA,EAAA,WAAA,CAAY,GAAA,EAAI;AAChB,EAAA,KAAA,MAAW,cAAc,WAAA,EAAa;AACpC,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACtD,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,MAAM,GAAA,GAAM,MAAA,CAAO,MAAA,CAAO,KAAA,EAAO,UAAU,CAAA;AAC3C,IAAA,IAAI,CAAC,GAAA,EAAK;AACR,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,KAAA,GAAQ,MAAM,UAAU,CAAA;AAAA,EAC1B;AACA,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,CAAM,QAAQ,KAAK,CAAA;AACzD,CAAA;AACA,IAAO,oBAAA,GAAQ,YAAA;;;ACtBf,IAAM,YAAN,MAAgB;AAAA,EACd,WAAA,CAAY,GAAA,EAAK,UAAA,EAAY,KAAA,EAAO;AAClC,IAAA,IAAA,CAAK,IAAA,GAAO,GAAA;AACZ,IAAA,IAAA,CAAK,WAAA,GAAc,UAAA;AACnB,IAAA,IAAA,CAAK,MAAA,GAAS,KAAA;AAAA,EAChB;AAAA,EACA,IAAI,GAAA,GAAM;AACR,IAAA,OAAO,IAAA,CAAK,IAAA;AAAA,EACd;AAAA,EACA,IAAI,IAAI,CAAA,EAAG;AAAA,EAEX;AAAA,EACA,IAAI,UAAA,GAAa;AACf,IAAA,OAAO,IAAA,CAAK,WAAA;AAAA,EACd;AAAA,EACA,IAAI,WAAW,CAAA,EAAG;AAAA,EAElB;AAAA,EACA,IAAI,KAAA,GAAQ;AACV,IAAA,OAAO,IAAA,CAAK,MAAA;AAAA,EACd;AAAA,EACA,IAAI,MAAM,CAAA,EAAG;AAAA,EAEb;AAAA,EACA,KAAK,MAAA,CAAO,WAAW,CAAA,GAAI;AACzB,IAAA,OAAO,WAAA;AAAA,EACT;AACF,CAAA;AACA,IAAO,iBAAA,GAAQ,SAAA;;;ACxBf,IAAM,uBAAuB,CAAA,GAAI,CAAA;AACjC,IAAM,uBAAuB,IAAI,mBAAA,CAAY,MAAA,EAAW,MAAA,EAAW,OAAO,KAAK,CAAA;AAY/E,IAAqB,mBAArB,MAAsC;AAAA,EACpC,cAAA,GAAiB,CAAA;AAAA,EACjB,SAAA,GAAY,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQZ,YAAY,aAAA,EAAe;AACzB,IAAA,IAAA,CAAK,cAAA,GAAiB,CAAC,CAAC,aAAA;AAAA,EAC1B;AAAA,EACA,IAAA,GAAO;AACL,IAAA,OAAO,IAAA,CAAK,YAAY,IAAA,CAAK,cAAA;AAAA,EAC/B;AAAA,EACA,IAAI,MAAA,EAAQ;AACV,IAAA,OAAO,IAAA,CAAK,iBAAiB,IAAA,CAAK,KAAA,EAAO,iBAAe,IAAA,CAAK,QAAA,CAAS,MAAA,EAAQ,WAAW,CAAC,CAAA;AAAA,EAC5F;AAAA,EACA,SAAS,MAAA,EAAQ;AACf,IAAA,OAAO,CAAC,CAAC,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA;AAAA,EAC1B;AAAA,EACA,QAAA,CAAS,GAAG,CAAA,EAAG;AACb,IAAA,MAAM,aAAA,GAAgB,WAAA,CAAI,CAAA,CAAE,GAAA,EAAK,EAAE,GAAG,CAAA;AACtC,IAAA,IAAI,kBAAkB,CAAA,EAAG;AACvB,MAAA,OAAO,aAAA;AAAA,IACT;AAGA,IAAA,OAAO,KAAK,cAAA,GAAiB,CAAA,GAAI,YAAI,CAAA,CAAE,KAAA,EAAO,EAAE,KAAK,CAAA;AAAA,EACvD;AAAA,EACA,gBAAA,CAAiB,MAAM,UAAA,EAAY;AACjC,IAAA,IAAI,OAAA,GAAU,IAAA;AACd,IAAA,OAAO,OAAA,EAAS;AACd,MAAA,MAAM,UAAA,GAAa,UAAA,CAAW,OAAA,CAAQ,MAAM,CAAA;AAC5C,MAAA,IAAI,aAAa,CAAA,EAAG;AAClB,QAAA,OAAA,GAAU,OAAA,CAAQ,IAAA;AAAA,MACpB,CAAA,MAAA,IAAW,aAAa,CAAA,EAAG;AACzB,QAAA,OAAA,GAAU,OAAA,CAAQ,KAAA;AAAA,MACpB,CAAA,MAAO;AACL,QAAA,OAAO,OAAA,CAAQ,MAAA;AAAA,MACjB;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,GAAA,CAAI,MAAA,EAAQ,WAAA,GAAc,KAAA,EAAO;AAC/B,IAAA,IAAI,CAAC,KAAK,KAAA,EAAO;AACf,MAAA,IAAA,CAAK,KAAA,GAAQ;AAAA,QACX,MAAA;AAAA,QACA,IAAA,EAAM,MAAA;AAAA,QACN,KAAA,EAAO,MAAA;AAAA,QACP,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS,KAAA;AAAA;AAAA,QAET,GAAA,EAAK;AAAA,OACP;AACA,MAAA,IAAA,CAAK,SAAA,EAAA;AACL,MAAA;AAAA,IACF;AACA,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,KAAA,EAAO,QAAQ,WAAW,CAAA;AAAA,EAClD;AAAA,EACA,IAAA,CAAK,IAAA,EAAM,MAAA,EAAQ,WAAA,EAAa;AAC9B,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,QAAA,CAAS,MAAA,EAAQ,KAAK,MAAM,CAAA;AACpD,IAAA,IAAI,aAAa,CAAA,EAAG;AAClB,MAAA,IAAI,KAAK,IAAA,EAAM;AACb,QAAA,OAAO,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,IAAA,EAAM,QAAQ,WAAW,CAAA;AAAA,MACjD,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,IAAA,GAAO;AAAA,UACV,MAAA;AAAA,UACA,IAAA,EAAM,MAAA;AAAA,UACN,KAAA,EAAO,MAAA;AAAA,UACP,MAAA,EAAQ,IAAA;AAAA,UACR,OAAA,EAAS,KAAA;AAAA,UACT,GAAA,EAAK;AAAA,SACP;AACA,QAAA,IAAA,CAAK,kBAAA,CAAmB,KAAK,IAAI,CAAA;AAAA,MACnC;AAAA,IACF,CAAA,MAAA,IAAW,aAAa,CAAA,EAAG;AACzB,MAAA,IAAI,KAAK,KAAA,EAAO;AACd,QAAA,OAAO,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,KAAA,EAAO,QAAQ,WAAW,CAAA;AAAA,MAClD,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,KAAA,GAAQ;AAAA,UACX,MAAA;AAAA,UACA,IAAA,EAAM,MAAA;AAAA,UACN,KAAA,EAAO,MAAA;AAAA,UACP,MAAA,EAAQ,IAAA;AAAA,UACR,OAAA,EAAS,KAAA;AAAA,UACT,GAAA,EAAK;AAAA,SACP;AACA,QAAA,IAAA,CAAK,kBAAA,CAAmB,KAAK,KAAK,CAAA;AAAA,MACpC;AAAA,IACF,CAAA,MAAA,IAAW,KAAK,OAAA,EAAS;AAEvB,MAAA,IAAA,CAAK,OAAA,GAAU,KAAA;AACf,MAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,MAAA,IAAA,CAAK,cAAA,EAAA;AAAA,IACP,WAAW,WAAA,EAAa;AAEtB,MAAA,MAAM,IAAI,eAAA,EAAgB;AAAA,IAC5B,CAAA,MAAO;AAEL,MAAA,MAAM,oBAAoB,IAAA,CAAK,MAAA;AAC/B,MAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,MAAA,OAAO,iBAAA;AAAA,IACT;AAAA,EACF;AAAA,EACA,OAAO,MAAA,EAAQ;AACb,IAAA,IAAI,CAAC,KAAK,KAAA,EAAO;AACf,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,KAAA,EAAO,MAAM,CAAA;AAC/B,IAAA,IAAI,IAAA,CAAK,cAAA,GAAiB,IAAA,CAAK,SAAA,GAAY,oBAAA,EAAsB;AAI/D,MAAA,MAAM,OAAA,GAAU,CAAC,GAAG,IAAA,CAAK,eAAe,CAAA;AACxC,MAAA,IAAA,CAAK,KAAA,GAAQ,IAAA,CAAK,QAAA,CAAS,OAAA,EAAS,QAAW,KAAK,CAAA;AACpD,MAAA,IAAA,CAAK,YAAY,OAAA,CAAQ,MAAA;AACzB,MAAA,IAAA,CAAK,cAAA,GAAiB,CAAA;AAAA,IACxB;AAAA,EACF;AAAA,EACA,OAAA,CAAQ,MAAM,MAAA,EAAQ;AACpB,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA;AAAA,IACF;AACA,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,QAAA,CAAS,MAAA,EAAQ,KAAK,MAAM,CAAA;AACpD,IAAA,IAAI,aAAa,CAAA,EAAG;AAClB,MAAA,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,IAAA,EAAM,MAAM,CAAA;AAAA,IAChC,CAAA,MAAA,IAAW,aAAa,CAAA,EAAG;AACzB,MAAA,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,KAAA,EAAO,MAAM,CAAA;AAAA,IACjC,CAAA,MAAA,IAAW,CAAC,IAAA,CAAK,OAAA,EAAS;AACxB,MAAA,IAAA,CAAK,cAAA,EAAA;AACL,MAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AAAA,IACjB;AAAA,EACF;AAAA,EACA,CAAC,aAAA,CAAc,UAAA,GAAa,KAAA,EAAO;AACjC,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,oBAAA,EAAsB,UAAU,CAAA;AAAA,EACzD;AAAA,EACA,CAAC,UAAA,CAAW,QAAA,EAAU,UAAA,GAAa,KAAA,EAAO;AACxC,IAAA,OAAO,IAAA,CAAK,kBAAA,CAAmB,IAAA,CAAK,KAAA,EAAO,UAAU,UAAU,CAAA;AAAA,EACjE;AAAA,EACA,CAAC,kBAAA,CAAmB,IAAA,EAAM,QAAA,EAAU,aAAa,KAAA,EAAO;AACtD,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA;AAAA,IACF;AACA,IAAA,OAAO,IAAA,CAAK,YAAA,CAAa,IAAA,EAAM,QAAA,EAAU,UAAU,CAAA;AAAA,EACrD;AAAA,EACA,CAAC,YAAA,CAAa,IAAA,EAAM,QAAA,EAAU,aAAa,KAAA,EAAO;AAChD,IAAA,MAAM;AAAA,MACJ,KAAA;AAAA,MACA,KAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA,KACF,GAAI,QAAA;AACJ,IAAA,MAAM;AAAA,MACJ,MAAA,EAAQ;AAAA,QACN;AAAA;AACF,KACF,GAAI,IAAA;AACJ,IAAA,MAAM,kBAAkB,KAAA,KAAU,MAAA,GAAY,EAAA,GAAK,WAAA,CAAI,OAAO,GAAG,CAAA;AACjE,IAAA,MAAM,kBAAkB,KAAA,KAAU,MAAA,GAAY,CAAA,GAAI,WAAA,CAAI,OAAO,GAAG,CAAA;AAIhE,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,cAAA,GAAiB,eAAA,GAAkB,IAAI,eAAA,IAAmB,CAAA;AAChF,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,cAAA,GAAiB,eAAA,GAAkB,IAAI,eAAA,IAAmB,CAAA;AAGjF,IAAA,MAAM,SAAA,GAAY,aAAa,SAAA,GAAY,QAAA;AAC3C,IAAA,MAAM,OAAA,GAAU,aAAa,QAAA,GAAW,SAAA;AACxC,IAAA,MAAM,KAAA,GAAQ,aAAa,OAAA,GAAU,MAAA;AACrC,IAAA,MAAM,GAAA,GAAM,aAAa,MAAA,GAAS,OAAA;AAGlC,IAAA,MAAM,YAAA,GAAe,SAAA,GAAY,eAAA,GAAkB,CAAA,GAAI,eAAA,IAAmB,CAAA;AAC1E,IAAA,MAAM,YAAA,GAAe,SAAA,GAAY,eAAA,GAAkB,CAAA,GAAI,eAAA,IAAmB,CAAA;AAC1E,IAAA,IAAI,SAAA,IAAa,IAAA,CAAK,KAAK,CAAA,EAAG;AAC5B,MAAA,OAAO,KAAK,YAAA,CAAa,IAAA,CAAK,KAAK,CAAA,EAAG,UAAU,UAAU,CAAA;AAAA,IAC5D;AACA,IAAA,IAAI,YAAA,IAAgB,YAAA,IAAgB,CAAC,IAAA,CAAK,OAAA,EAAS;AACjD,MAAA,MAAM,IAAA,CAAK,MAAA;AAAA,IACb;AACA,IAAA,IAAI,OAAA,IAAW,IAAA,CAAK,GAAG,CAAA,EAAG;AACxB,MAAA,OAAO,KAAK,YAAA,CAAa,IAAA,CAAK,GAAG,CAAA,EAAG,UAAU,UAAU,CAAA;AAAA,IAC1D;AAAA,EACF;AAAA,EACA,mBAAmB,OAAA,EAAS;AAC1B,IAAA,IAAA,CAAK,SAAA,EAAA;AACL,IAAA,IAAA,CAAK,eAAe,OAAO,CAAA;AAAA,EAC7B;AAAA;AAAA,EAGA,eAAe,IAAA,EAAM;AACnB,IAAA,IAAI,SAAS,IAAA,CAAK,MAAA;AAClB,IAAA,GAAG;AAED,MAAA,IAAI,CAAC,OAAO,GAAA,EAAK;AACf,QAAA;AAAA,MACF;AACA,MAAA,MAAM,cAAc,MAAA,CAAO,MAAA;AAC3B,MAAA,IAAI,CAAC,WAAA,EAAa;AAEhB,QAAA,MAAA,CAAO,GAAA,GAAM,KAAA;AACb,QAAA;AAAA,MACF;AACA,MAAA,MAAM,kBAAA,GAAqB,WAAW,WAAA,CAAY,KAAA;AAClD,MAAA,MAAM,KAAA,GAAQ,kBAAA,GAAqB,WAAA,CAAY,IAAA,GAAO,WAAA,CAAY,KAAA;AAClE,MAAA,IAAI,CAAC,KAAA,IAAS,CAAC,KAAA,CAAM,GAAA,EAAK;AACxB,QAAA,IAAI,IAAA,MAAU,kBAAA,GAAqB,MAAA,CAAO,IAAA,GAAO,OAAO,KAAA,CAAA,EAAQ;AAE9D,UAAA,IAAA,CAAK,cAAA,CAAe,QAAQ,kBAAkB,CAAA;AAC9C,UAAA,IAAA,GAAO,MAAA;AACP,UAAA,MAAA,GAAS,kBAAA,GAAqB,WAAA,CAAY,KAAA,GAAQ,WAAA,CAAY,IAAA;AAAA,QAChE;AAGA,QAAA,IAAA,CAAK,cAAA,CAAe,WAAA,EAAa,CAAC,kBAAkB,CAAA;AACpD,QAAA,MAAA,CAAO,GAAA,GAAM,KAAA;AACb,QAAA,WAAA,CAAY,GAAA,GAAM,IAAA;AAClB,QAAA;AAAA,MACF;AAGA,MAAA,MAAA,CAAO,GAAA,GAAM,KAAA;AACb,MAAA,KAAA,CAAM,GAAA,GAAM,KAAA;AACZ,MAAA,WAAA,CAAY,GAAA,GAAM,IAAA;AAClB,MAAA,IAAA,GAAO,WAAA;AAAA,IACT,CAAA,QAAS,IAAA,CAAK,MAAA,GAAS,MAAA,GAAS,KAAK,MAAA,GAAS,KAAA;AAAA,EAGhD;AAAA;AAAA,EAGA,cAAA,CAAe,MAAM,KAAA,EAAO;AAC1B,IAAA,MAAM,SAAS,IAAA,CAAK,MAAA;AACpB,IAAA,MAAM,OAAA,GAAU,KAAA,GAAQ,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,KAAA;AACzC,IAAA,MAAM,QAAA,GAAW,KAAA,GAAQ,OAAA,CAAQ,KAAA,GAAQ,OAAA,CAAQ,IAAA;AACjD,IAAA,IAAA,CAAK,KAAA,GAAQ,MAAA,GAAS,OAAO,CAAA,GAAI,QAAA;AACjC,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,QAAA,CAAS,MAAA,GAAS,IAAA;AAAA,IACpB;AACA,IAAA,OAAA,CAAQ,KAAA,GAAQ,OAAA,GAAU,MAAM,CAAA,GAAI,IAAA;AACpC,IAAA,OAAA,CAAQ,MAAA,GAAS,MAAA;AACjB,IAAA,IAAA,CAAK,MAAA,GAAS,OAAA;AACd,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,MAAA,CAAO,IAAA,KAAS,MAAA,CAAO,KAAA,GAAQ,OAAA,GAAU,MAAM,CAAA,GAAI,OAAA;AAAA,IACrD,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,KAAA,GAAQ,OAAA;AAAA,IACf;AACA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA;AAAA,EAGA,QAAA,CAAS,OAAA,EAAS,MAAA,EAAQ,GAAA,EAAK;AAC7B,IAAA,MAAM;AAAA,MACJ;AAAA,KACF,GAAI,OAAA;AACJ,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,OAAO,MAAA;AAAA,IACT;AACA,IAAA,MAAM,MAAM,MAAA,KAAW,CAAA;AAEvB,IAAA,MAAM,IAAA,GAAO;AAAA,MACX,MAAA,EAAQ,QAAQ,GAAG,CAAA;AAAA,MACnB,IAAA,EAAM,MAAA;AAAA,MACN,KAAA,EAAO,MAAA;AAAA,MACP,MAAA;AAAA,MACA,OAAA,EAAS,KAAA;AAAA,MACT;AAAA,KACF;AACA,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,QAAA,CAAS,OAAA,CAAQ,KAAA,CAAM,GAAG,GAAG,CAAA,EAAG,IAAA,EAAM,CAAC,GAAG,CAAA;AAC5D,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,QAAA,CAAS,OAAA,CAAQ,KAAA,CAAM,MAAM,CAAC,CAAA,EAAG,IAAA,EAAM,CAAC,GAAG,CAAA;AAC9D,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AACb,IAAA,OAAO,IAAA;AAAA,EACT;AACF,CAAA;;;ACvSA,IAAM,cAAN,MAAkB;AAAA,EAChB,YAAY,aAAA,EAAe;AACzB,IAAA,IAAA,CAAK,aAAA,GAAgB,aAAA;AACrB,IAAA,IAAA,CAAK,OAAA,GAAU,IAAI,gBAAA,CAAiB,IAAA,CAAK,aAAa,CAAA;AAAA,EACxD;AAAA,EACA,IAAI,GAAA,EAAK;AACP,IAAA,MAAM,QAAQ,GAAA,YAAe,mBAAA,GAAc,GAAA,GAAM,mBAAA,CAAY,KAAK,GAAG,CAAA;AACrE,IAAA,OAAO,KAAK,OAAA,CAAQ,UAAA,CAAW,KAAK,CAAA,CAAE,MAAK,CAAE,KAAA;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,GAAA,CAAI,SAAA,EAAW,WAAA,GAAc,KAAA,EAAO;AAClC,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,SAAA,EAAW,WAAW,CAAA;AAAA,EAChD;AAAA,EACA,OAAO,GAAA,EAAK;AACV,IAAA,MAAM,QAAQ,GAAA,YAAe,mBAAA,GAAc,GAAA,GAAM,mBAAA,CAAY,KAAK,GAAG,CAAA;AACrE,IAAA,MAAM,iBAAiB,CAAC,GAAG,KAAK,OAAA,CAAQ,UAAA,CAAW,KAAK,CAAC,CAAA;AACzD,IAAA,KAAA,MAAW,UAAU,cAAA,EAAgB;AACnC,MAAA,IAAA,CAAK,OAAA,CAAQ,OAAO,MAAM,CAAA;AAAA,IAC5B;AACA,IAAA,OAAO,cAAA;AAAA,EACT;AAAA,EACA,cAAc,GAAA,EAAK;AACjB,IAAA,MAAM,QAAQ,GAAA,YAAe,mBAAA,GAAc,GAAA,GAAM,mBAAA,CAAY,KAAK,GAAG,CAAA;AACrE,IAAA,MAAM,iBAAiB,EAAC;AACxB,IAAA,KAAA,MAAW,MAAA,IAAU,IAAA,CAAK,OAAA,CAAQ,aAAA,EAAc,EAAG;AACjD,MAAA,IAAI,KAAA,CAAM,QAAA,CAAS,MAAA,CAAO,KAAK,CAAA,EAAG;AAChC,QAAA,IAAA,CAAK,OAAA,CAAQ,OAAO,MAAM,CAAA;AAC1B,QAAA,cAAA,CAAe,KAAK,MAAM,CAAA;AAAA,MAC5B;AAAA,IACF;AACA,IAAA,OAAO,cAAA;AAAA,EACT;AAAA,EACA,KAAA,GAAQ;AACN,IAAA,MAAM,iBAAiB,CAAC,GAAG,IAAA,CAAK,OAAA,CAAQ,eAAe,CAAA;AACvD,IAAA,IAAA,CAAK,OAAA,GAAU,IAAI,gBAAA,CAAiB,IAAA,CAAK,aAAa,CAAA;AACtD,IAAA,OAAO,cAAA;AAAA,EACT;AAAA,EACA,MAAA,CAAO,KAAA,EAAO,SAAA,GAAY,MAAA,EAAQ;AAChC,IAAA,MAAM,UAAA,GAAa,SAAA,KAAc,MAAA,IAAU,SAAA,KAAc,YAAA;AACzD,IAAA,MAAM,OAAA,GAAU,KAAA,GAAQ,IAAA,CAAK,OAAA,CAAQ,UAAA,CAAW,KAAA,EAAO,UAAU,CAAA,GAAI,IAAA,CAAK,OAAA,CAAQ,aAAA,CAAc,UAAU,CAAA;AAC1G,IAAA,OAAO;AAAA,MACL,CAAC,MAAA,CAAO,QAAQ,GAAG,MAAM;AACvB,QAAA,MAAM,OAAO,MAAM;AACjB,UAAA,OAAO,QAAQ,IAAA,EAAK;AAAA,QACtB,CAAA;AACA,QAAA,IAAI,SAAA,KAAc,MAAA,IAAU,SAAA,KAAc,MAAA,EAAQ;AAChD,UAAA,OAAO;AAAA,YACL;AAAA,WACF;AAAA,QACF;AAOA,QAAA,IAAI,cAAc,YAAA,EAAc;AAC9B,UAAA,IAAI,aAAA,GAAgB,MAAA;AACpB,UAAA,OAAO;AAAA,YACL,MAAM,MAAM;AACV,cAAA,IAAIC,WAAU,IAAA,EAAK;AAEnB,cAAA,OAAO,CAACA,QAAAA,CAAQ,IAAA,IAAQ,aAAA,KAAkB,MAAA,IAAa,WAAA,CAAI,aAAA,CAAc,GAAA,EAAKA,QAAAA,CAAQ,KAAA,CAAM,GAAG,CAAA,KAAM,CAAA,EAAG;AACtG,gBAAAA,WAAU,IAAA,EAAK;AAAA,cACjB;AACA,cAAA,aAAA,GAAgBA,QAAAA,CAAQ,KAAA;AACxB,cAAA,OAAOA,QAAAA;AAAA,YACT;AAAA,WACF;AAAA,QACF;AAIA,QAAA,IAAI,UAAU,IAAA,EAAK;AACnB,QAAA,IAAI,aAAa,IAAA,EAAK;AACtB,QAAA,OAAO;AAAA,UACL,MAAM,MAAM;AACV,YAAA,OAAO,CAAC,UAAA,CAAW,IAAA,IAAQ,WAAA,CAAI,OAAA,CAAQ,KAAA,CAAM,GAAA,EAAK,UAAA,CAAW,KAAA,CAAM,GAAG,CAAA,KAAM,CAAA,EAAG;AAE7E,cAAA,OAAA,GAAU,UAAA;AACV,cAAA,UAAA,GAAa,IAAA,EAAK;AAAA,YACpB;AACA,YAAA,MAAM,MAAA,GAAS,OAAA;AACf,YAAA,OAAA,GAAU,UAAA;AACV,YAAA,UAAA,GAAa,IAAA,EAAK;AAClB,YAAA,OAAO,MAAA;AAAA,UACT;AAAA,SACF;AAAA,MACF;AAAA,KACF;AAAA,EACF;AAAA,EACA,IAAA,GAAO;AACL,IAAA,OAAO,IAAA,CAAK,QAAQ,IAAA,EAAK;AAAA,EAC3B;AACF,CAAA;AACA,IAAO,mBAAA,GAAQ,WAAA;;;ACjGf,IAAM,QAAN,MAAY;AAAA,EACV,OAAA,GAAU,KAAA;AAAA;AAAA;AAAA,EAGV,WAAA,GAAc,KAAA;AAAA,EACd,WAAA,CAAY,cAAA,EAAgB,IAAA,EAAM,OAAA,EAAS,YAAY,MAAA,EAAQ;AAC7D,IAAA,IAAA,CAAK,cAAA,GAAiB,cAAA;AACtB,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AACf,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAClB,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,OAAA,GAAU,IAAI,mBAAA,CAAY,MAAM,CAAA;AAAA,EACvC;AAAA;AAAA,EAGA,OAAO,GAAA,EAAK;AACV,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA;AACnC,IAAA,OAAO,MAAA,KAAW,MAAA,GAAY,MAAA,CAAO,KAAA,GAAQ,MAAA;AAAA,EAC/C;AAAA;AAAA,EAGA,UAAA,CAAW,KAAA,EAAO,KAAA,EAAO,SAAA,EAAW;AAClC,IAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,CAAA,EAAG;AACtC,MAAA,KAAA,GAAQ,QAAA;AAAA,IACV;AACA,IAAA,MAAM,UAAU,EAAC;AACjB,IAAA,KAAA,MAAW,UAAU,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,KAAA,EAAO,SAAS,CAAA,EAAG;AAC1D,MAAA,OAAA,CAAQ,IAAA,CAAK,eAAA,CAAgB,MAAA,CAAO,KAAK,CAAC,CAAA;AAC1C,MAAA,IAAI,OAAA,CAAQ,UAAU,KAAA,EAAO;AAC3B,QAAA;AAAA,MACF;AAAA,IACF;AACA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA;AAAA,EAGA,SAAS,GAAA,EAAK;AACZ,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA;AACnC,IAAA,OAAO,WAAW,MAAA,GAAY,IAAA,CAAK,eAAe,QAAA,CAAS,MAAA,CAAO,KAAK,CAAA,GAAI,MAAA;AAAA,EAC7E;AAAA;AAAA,EAGA,YAAA,CAAa,KAAA,EAAO,KAAA,EAAO,SAAA,EAAW;AACpC,IAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,CAAA,EAAG;AACtC,MAAA,KAAA,GAAQ,QAAA;AAAA,IACV;AACA,IAAA,MAAM,UAAU,EAAC;AACjB,IAAA,KAAA,MAAW,UAAU,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,KAAA,EAAO,SAAS,CAAA,EAAG;AAC1D,MAAA,OAAA,CAAQ,KAAK,IAAA,CAAK,cAAA,CAAe,QAAA,CAAS,MAAA,CAAO,KAAK,CAAC,CAAA;AACvD,MAAA,IAAI,OAAA,CAAQ,UAAU,KAAA,EAAO;AAC3B,QAAA;AAAA,MACF;AAAA,IACF;AACA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA;AAAA,EAGA,aAAA,CAAc,KAAA,EAAO,KAAA,EAAO,SAAA,EAAW;AACrC,IAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,CAAA,EAAG;AACtC,MAAA,KAAA,GAAQ,QAAA;AAAA,IACV;AACA,IAAA,MAAM,UAAU,EAAC;AACjB,IAAA,KAAA,MAAW,UAAU,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,KAAA,EAAO,SAAS,CAAA,EAAG;AAC1D,MAAA,OAAA,CAAQ,IAAA,CAAK,IAAI,iBAAA,CAAU,eAAA,CAAgB,OAAO,GAAG,CAAA,EAAG,gBAAgB,IAAA,CAAK,cAAA,CAAe,OAAO,MAAA,CAAO,KAAK,CAAC,CAAA,EAAG,IAAA,CAAK,eAAe,QAAA,CAAS,MAAA,CAAO,KAAK,CAAC,CAAC,CAAA;AAC9J,MAAA,IAAI,OAAA,CAAQ,UAAU,KAAA,EAAO;AAC3B,QAAA;AAAA,MACF;AAAA,IACF;AACA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA;AAAA,EAGA,YAAY,SAAA,EAAW;AACrB,IAAA,IAAI,QAAA;AACJ,IAAA,IAAI;AACF,MAAA,QAAA,GAAW,kBAAA,CAAW,IAAA,CAAK,OAAA,EAAS,SAAA,CAAU,KAAK,CAAA,CAAE,GAAA;AAAA,IACvD,SAAS,GAAA,EAAK;AACZ,MAAA,IAAI,GAAA,CAAI,SAAS,WAAA,EAAa;AAE5B,QAAA;AAAA,MACF;AACA,MAAA,MAAM,GAAA;AAAA,IACR;AACA,IAAA,IAAI,CAAC,IAAA,CAAK,UAAA,IAAc,CAAC,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,EAAG;AAChD,MAAA,IAAI;AACF,QAAA,kBAAA,CAAW,QAAQ,CAAA;AAAA,MACrB,SAAS,CAAA,EAAG;AACV,QAAA;AAAA,MACF;AAAA,IACF,CAAA,MAAO;AAGL,MAAA,MAAM,OAAO,EAAC;AACd,MAAA,KAAA,MAAW,QAAQ,QAAA,EAAU;AAC3B,QAAA,IAAI,IAAA,CAAK,OAAA,CAAQ,IAAI,CAAA,GAAI,CAAA,EAAG;AAC1B,UAAA,IAAI;AACF,YAAA,IAAA,CAAK,IAAA,CAAK,kBAAA,CAAW,IAAI,CAAC,CAAA;AAAA,UAC5B,SAAS,GAAA,EAAK;AAAA,UAEd;AAAA,QACF;AAAA,MACF;AACA,MAAA,QAAA,GAAW,IAAA;AAAA,IACb;AACA,IAAA,IAAI,CAAC,IAAA,CAAK,UAAA,IAAc,CAAC,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,EAAG;AAChD,MAAA,IAAI,KAAK,MAAA,EAAQ;AACf,QAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,QAAQ,CAAA;AAChD,QAAA,IAAI,cAAA,EAAgB;AAClB,UAAA,MAAM,IAAI,eAAA,EAAgB;AAAA,QAC5B;AAAA,MACF;AAAA,IACF,CAAA,MAAO;AACL,MAAA,IAAI,KAAK,MAAA,EAAQ;AACf,QAAA,KAAA,MAAW,sBAAsB,QAAA,EAAU;AACzC,UAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,kBAAkB,CAAA;AAC1D,UAAA,IAAI,cAAA,EAAgB;AAClB,YAAA,MAAM,IAAI,eAAA,EAAgB;AAAA,UAC5B;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,IAAA,IAAI,CAAC,IAAA,CAAK,UAAA,IAAc,CAAC,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,EAAG;AAChD,MAAA,IAAA,CAAK,QAAQ,GAAA,CAAI;AAAA,QACf,GAAA,EAAK,QAAA;AAAA,QACL,OAAO,SAAA,CAAU;AAAA,OAClB,CAAA;AAAA,IACH,CAAA,MAAO;AACL,MAAA,KAAA,MAAW,sBAAsB,QAAA,EAAU;AACzC,QAAA,IAAA,CAAK,QAAQ,GAAA,CAAI;AAAA,UACf,GAAA,EAAK,kBAAA;AAAA,UACL,OAAO,SAAA,CAAU;AAAA,SAClB,CAAA;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAAA,EACA,WAAW,WAAA,EAAa;AACtB,IAAA,IAAI,KAAK,WAAA,EAAa;AACpB,MAAA,MAAM,IAAI,MAAM,2BAA2B,CAAA;AAAA,IAC7C;AACA,IAAA,WAAA,CAAY,iBAAA,CAAkB;AAAA,MAC5B,WAAW,MAAM;AACf,QAAA,IAAI;AAEF,UAAA,KAAA,MAAW,MAAA,IAAU,IAAA,CAAK,cAAA,CAAe,OAAA,CAAQ,QAAO,EAAG;AACzD,YAAA,IAAA,CAAK,YAAY,MAAM,CAAA;AAAA,UACzB;AACA,UAAA,IAAA,CAAK,WAAA,GAAc,IAAA;AAAA,QACrB,SAAS,GAAA,EAAK;AAEZ,UAAA,WAAA,CAAY,MAAA,CAAO,IAAI,IAAI,CAAA;AAAA,QAC7B;AAAA,MACF,CAAA;AAAA,MACA,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAAA,EACA,MAAM,KAAA,EAAO;AACX,IAAA,IAAI,KAAA,GAAQ,CAAA;AAGZ,IAAA,KAAA,MAAW,MAAA,IAAU,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,KAAK,CAAA,EAAG;AAC/C,MAAA,KAAA,IAAS,CAAA;AAAA,IACX;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AACF,CAAA;AACA,IAAO,aAAA,GAAQ,KAAA;;;ACzKf,IAAM,eAAA,GAAkB,CAAC,OAAA,EAAS,MAAA,KAAW;AAG3C,EAAA,IAAI,OAAA,KAAY,MAAA,IAAa,OAAA,KAAY,IAAA,IAAQ,OAAO,OAAA,KAAY,QAAA,IAAY,OAAA,CAAQ,QAAA,KAAa,WAAW,OAAA,IAAW,CAAC,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,CAAA,EAAI;AACnJ,IAAA,OAAA,GAAU,QAAQ,QAAA,EAAS;AAAA,EAC7B;AACA,EAAA,IAAI,OAAO,YAAY,QAAA,EAAU;AAC/B,IAAA,IAAI,OAAA,KAAY,EAAA,IAAM,MAAA,KAAW,QAAA,EAAU;AACzC,MAAA;AAAA,IACF;AACA,IAAA,IAAI;AAGF,MAAA,MAAM,oBAAA;AAAA;AAAA,QAEN;AAAA,OAAA;AACA,MAAA,IAAI,QAAQ,MAAA,IAAU,CAAA,IAAK,oBAAA,CAAqB,IAAA,CAAK,OAAO,CAAA,EAAG;AAC7D,QAAA;AAAA,MACF;AAAA,IACF,SAAS,GAAA,EAAK;AACZ,MAAA,MAAM,IAAI,WAAA,CAAY,GAAA,CAAI,OAAO,CAAA;AAAA,IACnC;AACA,IAAA,IAAI,OAAA,CAAQ,OAAA,CAAQ,GAAG,CAAA,IAAK,CAAA,EAAG;AAC7B,MAAA,MAAM,IAAI,YAAY,wEAAwE,CAAA;AAAA,IAChG;AAAA,EACF;AACA,EAAA,IAAI,MAAM,OAAA,CAAQ,OAAO,CAAA,IAAK,OAAA,CAAQ,SAAS,CAAA,EAAG;AAChD,IAAA,IAAI,MAAA,EAAQ;AAEV,MAAA,MAAM,IAAI,YAAY,oEAAoE,CAAA;AAAA,IAC5F;AACA,IAAA,KAAA,MAAW,QAAQ,OAAA,EAAS;AAC1B,MAAA,eAAA,CAAgB,MAAM,OAAO,CAAA;AAAA,IAC/B;AACA,IAAA;AAAA,EACF,CAAA,MAAA,IAAW,OAAO,OAAA,KAAY,QAAA,IAAY,QAAQ,OAAA,CAAQ,GAAG,KAAK,CAAA,EAAG;AACnE,IAAA,OAAA,GAAU,OAAA,CAAQ,MAAM,GAAG,CAAA;AAC3B,IAAA,KAAA,MAAW,QAAQ,OAAA,EAAS;AAC1B,MAAA,eAAA,CAAgB,MAAM,QAAQ,CAAA;AAAA,IAChC;AACA,IAAA;AAAA,EACF;AACA,EAAA,MAAM,IAAI,WAAA,EAAY;AACxB,CAAA;AACA,IAAO,uBAAA,GAAQ,eAAA;;;AC7Bf,IAAMC,4BAA2B,CAAA,WAAA,KAAe;AAC9C,EAAA,IAAI,WAAA,CAAY,gBAAgB,OAAA,EAAS;AACvC,IAAA,MAAM,IAAI,iBAAA,EAAkB;AAAA,EAC9B;AACA,EAAA,IAAI,WAAA,CAAY,WAAA,CAAY,MAAA,KAAW,QAAA,EAAU;AAC/C,IAAA,MAAM,IAAI,wBAAA,EAAyB;AAAA,EACrC;AACF,CAAA;AACA,IAAM,iBAAA,GAAoB,CAAC,WAAA,EAAa,KAAA,EAAO,GAAA,KAAQ;AACrD,EAAAA,0BAAyB,WAAW,CAAA;AACpC,EAAA,IAAI,WAAA,CAAY,WAAA,CAAY,IAAA,KAAS,UAAA,EAAY;AAC/C,IAAA,MAAM,IAAI,aAAA,EAAc;AAAA,EAC1B;AACA,EAAA,IAAI,WAAA,CAAY,YAAY,IAAA,EAAM;AAChC,IAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,MAAA,MAAM,IAAI,SAAA,EAAU;AAAA,IACtB;AAAA,EACF;AACA,EAAA,MAAM,KAAA,GAAQ,sBAAA,CAAuB,KAAA,EAAO,WAAA,CAAY,WAAW,CAAA;AACnE,EAAA,IAAI,WAAA,CAAY,YAAY,IAAA,EAAM;AAChC,IAAA,MAAM,OAAA,GAAU,kBAAA,CAAW,WAAA,CAAY,OAAA,EAAS,KAAK,CAAA;AACrD,IAAA,IAAI,OAAA,CAAQ,SAAS,OAAA,EAAS;AAC5B,MAAA,kBAAA,CAAW,QAAQ,GAAG,CAAA;AAAA,IACxB,CAAA,MAAO;AACL,MAAA,IAAI,CAAC,WAAA,CAAY,eAAA,CAAgB,YAAA,EAAc;AAC7C,QAAA,MAAM,IAAI,SAAA,EAAU;AAAA,MACtB,WAAW,CAAC,oBAAA,CAAa,WAAA,CAAY,OAAA,EAAS,KAAK,CAAA,EAAG;AACpD,QAAA,MAAM,IAAI,SAAA,EAAU;AAAA,MACtB;AAAA,IACF;AAAA,EACF;AACA,EAAA,IAAI,WAAA,CAAY,YAAY,IAAA,IAAQ,WAAA,CAAY,gBAAgB,YAAA,KAAiB,IAAA,IAAQ,QAAQ,MAAA,EAAW;AAC1G,IAAA,MAAM,IAAI,SAAA,EAAU;AAAA,EACtB;AACA,EAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,IAAA,GAAA,GAAM,mBAAW,GAAG,CAAA;AAAA,EACtB;AACA,EAAA,OAAO;AAAA,IACL,GAAA;AAAA,IACA,KAAA,EAAO;AAAA,GACT;AACF,CAAA;AAGA,IAAM,iBAAN,MAAqB;AAAA,EACnB,aAAA,uBAAoB,GAAA,EAAI;AAAA,EACxB,WAAA,CAAY,aAAa,cAAA,EAAgB;AACvC,IAAA,IAAA,CAAK,eAAA,GAAkB,cAAA;AACvB,IAAA,IAAA,CAAK,QAAQ,cAAA,CAAe,IAAA;AAC5B,IAAA,IAAA,CAAK,OAAA,GAAU,UAAA,CAAW,cAAA,CAAe,OAAO,CAAA;AAChD,IAAA,IAAA,CAAK,gBAAgB,cAAA,CAAe,aAAA;AACpC,IAAA,IAAA,CAAK,WAAA,GAAc,WAAA;AACnB,IAAA,IAAA,CAAK,UAAA,GAAa,IAAI,yBAAA,CAAkB,GAAG,KAAA,CAAM,IAAA,CAAK,cAAA,CAAe,UAAA,CAAW,IAAA,EAAM,CAAA,CAAE,IAAA,EAAM,CAAA;AAAA,EAChG;AAAA,EACA,IAAI,IAAA,GAAO;AACT,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA;AAAA,EAGA,IAAI,KAAK,IAAA,EAAM;AACb,IAAA,MAAM,cAAc,IAAA,CAAK,WAAA;AACzB,IAAA,IAAI,CAAC,WAAA,CAAY,EAAA,CAAG,gCAAA,EAAkC;AACpD,MAAA,MAAM,YAAY,MAAA,KAAW,QAAA,GAAW,IAAI,iBAAA,EAAkB,GAAI,IAAI,wBAAA,EAAyB;AAAA,IACjG;AACA,IAAAA,0BAAyB,IAAI,CAAA;AAC7B,IAAA,IAAA,GAAO,OAAO,IAAI,CAAA;AAClB,IAAA,IAAI,IAAA,KAAS,KAAK,KAAA,EAAO;AACvB,MAAA;AAAA,IACF;AACA,IAAA,IAAI,KAAK,eAAA,CAAgB,WAAA,CAAY,eAAA,CAAgB,GAAA,CAAI,IAAI,CAAA,EAAG;AAC9D,MAAA,MAAM,IAAI,eAAA,EAAgB;AAAA,IAC5B;AACA,IAAA,MAAM,UAAU,IAAA,CAAK,KAAA;AACrB,IAAA,MAAM,mBAAA,GAAsB,CAAC,GAAG,WAAA,CAAY,GAAG,gBAAgB,CAAA;AAC/D,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAA;AACb,IAAA,IAAA,CAAK,gBAAgB,IAAA,GAAO,IAAA;AAC5B,IAAA,IAAA,CAAK,WAAA,CAAY,kBAAA,CAAmB,MAAA,CAAO,OAAO,CAAA;AAClD,IAAA,IAAA,CAAK,WAAA,CAAY,kBAAA,CAAmB,GAAA,CAAI,IAAA,EAAM,IAAI,CAAA;AAClD,IAAA,IAAA,CAAK,eAAA,CAAgB,WAAA,CAAY,eAAA,CAAgB,MAAA,CAAO,OAAO,CAAA;AAC/D,IAAA,IAAA,CAAK,gBAAgB,WAAA,CAAY,eAAA,CAAgB,GAAA,CAAI,IAAA,EAAM,KAAK,eAAe,CAAA;AAC/E,IAAA,WAAA,CAAY,EAAA,CAAG,gBAAA,GAAmB,IAAI,yBAAA,CAAkB,GAAG,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,eAAA,CAAgB,YAAY,eAAA,CAAgB,IAAA,EAAM,CAAA,CAAE,OAAO,CAAA,eAAA,KAAmB;AACvJ,MAAA,MAAM,cAAc,IAAA,CAAK,eAAA,CAAgB,WAAA,CAAY,eAAA,CAAgB,IAAI,eAAe,CAAA;AACxF,MAAA,OAAO,WAAA,IAAe,CAAC,WAAA,CAAY,OAAA;AAAA,IACrC,CAAC,CAAA,CAAE,IAAA,EAAM,CAAA;AACT,IAAA,MAAM,QAAA,GAAW,IAAI,GAAA,CAAI,WAAA,CAAY,MAAM,CAAA;AAC3C,IAAA,MAAM,8BAAA,GAAiC,CAAC,GAAG,WAAA,CAAY,gBAAgB,CAAA;AACvE,IAAA,IAAA,CAAK,WAAA,CAAY,MAAA,CAAO,MAAA,CAAO,OAAO,CAAA;AACtC,IAAA,WAAA,CAAY,MAAA,CAAO,IAAI,IAAI,CAAA;AAC3B,IAAA,WAAA,CAAY,gBAAA,GAAmB,IAAI,yBAAA,CAAkB,GAAG,KAAA,CAAM,KAAK,WAAA,CAAY,MAAM,CAAA,CAAE,IAAA,EAAM,CAAA;AAG7F,IAAA,IAAI,CAAC,IAAA,CAAK,WAAA,CAAY,qBAAqB,GAAA,CAAI,IAAA,CAAK,eAAe,CAAA,EAAG;AACpE,MAAA,WAAA,CAAY,YAAA,CAAa,KAAK,MAAM;AAClC,QAAA,IAAA,CAAK,KAAA,GAAQ,OAAA;AACb,QAAA,IAAA,CAAK,gBAAgB,IAAA,GAAO,OAAA;AAC5B,QAAA,IAAA,CAAK,WAAA,CAAY,kBAAA,CAAmB,MAAA,CAAO,IAAI,CAAA;AAC/C,QAAA,IAAA,CAAK,WAAA,CAAY,kBAAA,CAAmB,GAAA,CAAI,OAAA,EAAS,IAAI,CAAA;AACrD,QAAA,IAAA,CAAK,eAAA,CAAgB,WAAA,CAAY,eAAA,CAAgB,MAAA,CAAO,IAAI,CAAA;AAC5D,QAAA,IAAA,CAAK,gBAAgB,WAAA,CAAY,eAAA,CAAgB,GAAA,CAAI,OAAA,EAAS,KAAK,eAAe,CAAA;AAClF,QAAA,WAAA,CAAY,EAAA,CAAG,gBAAA,GAAmB,IAAI,yBAAA,CAAkB,GAAG,mBAAmB,CAAA;AAC9E,QAAA,WAAA,CAAY,MAAA,GAAS,QAAA;AACrB,QAAA,WAAA,CAAY,gBAAA,GAAmB,IAAI,yBAAA,CAAkB,GAAG,8BAA8B,CAAA;AAAA,MACxF,CAAC,CAAA;AAAA,IACH;AAAA,EACF;AAAA,EACA,GAAA,CAAI,OAAO,GAAA,EAAK;AACd,IAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AAC1B,MAAA,MAAM,IAAI,SAAA,EAAU;AAAA,IACtB;AACA,IAAA,MAAM,MAAA,GAAS,iBAAA,CAAkB,IAAA,EAAM,KAAA,EAAO,GAAG,CAAA;AACjD,IAAA,OAAO,IAAA,CAAK,YAAY,iBAAA,CAAkB;AAAA,MACxC,SAAA,EAAW,IAAA,CAAK,eAAA,CAAgB,WAAA,CAAY,IAAA,CAAK,IAAA,CAAK,eAAA,EAAiB,MAAA,EAAQ,KAAA,EAAO,IAAA,CAAK,WAAA,CAAY,YAAY,CAAA;AAAA,MACnH,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAAA,EACA,GAAA,CAAI,OAAO,GAAA,EAAK;AACd,IAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AAC1B,MAAA,MAAM,IAAI,SAAA,EAAU;AAAA,IACtB;AACA,IAAA,MAAM,MAAA,GAAS,iBAAA,CAAkB,IAAA,EAAM,KAAA,EAAO,GAAG,CAAA;AACjD,IAAA,OAAO,IAAA,CAAK,YAAY,iBAAA,CAAkB;AAAA,MACxC,SAAA,EAAW,IAAA,CAAK,eAAA,CAAgB,WAAA,CAAY,IAAA,CAAK,IAAA,CAAK,eAAA,EAAiB,MAAA,EAAQ,IAAA,EAAM,IAAA,CAAK,WAAA,CAAY,YAAY,CAAA;AAAA,MAClH,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAAA,EACA,OAAO,GAAA,EAAK;AACV,IAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AAC1B,MAAA,MAAM,IAAI,SAAA,EAAU;AAAA,IACtB;AACA,IAAAA,0BAAyB,IAAI,CAAA;AAC7B,IAAA,IAAI,IAAA,CAAK,WAAA,CAAY,IAAA,KAAS,UAAA,EAAY;AACxC,MAAA,MAAM,IAAI,aAAA,EAAc;AAAA,IAC1B;AACA,IAAA,IAAI,EAAE,eAAe,mBAAA,CAAA,EAAc;AACjC,MAAA,GAAA,GAAM,mBAAW,GAAG,CAAA;AAAA,IACtB;AACA,IAAA,OAAO,IAAA,CAAK,YAAY,iBAAA,CAAkB;AAAA,MACxC,SAAA,EAAW,IAAA,CAAK,eAAA,CAAgB,YAAA,CAAa,IAAA,CAAK,KAAK,eAAA,EAAiB,GAAA,EAAK,IAAA,CAAK,WAAA,CAAY,YAAY,CAAA;AAAA,MAC1G,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAAA,EACA,IAAI,GAAA,EAAK;AACP,IAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AAC1B,MAAA,MAAM,IAAI,SAAA,EAAU;AAAA,IACtB;AACA,IAAAA,0BAAyB,IAAI,CAAA;AAC7B,IAAA,IAAI,EAAE,eAAe,mBAAA,CAAA,EAAc;AACjC,MAAA,GAAA,GAAM,mBAAW,GAAG,CAAA;AAAA,IACtB;AACA,IAAA,OAAO,IAAA,CAAK,YAAY,iBAAA,CAAkB;AAAA,MACxC,WAAW,IAAA,CAAK,eAAA,CAAgB,SAAS,IAAA,CAAK,IAAA,CAAK,iBAAiB,GAAG,CAAA;AAAA,MACvE,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAA,CAAO,gBAAgB,KAAA,EAAO;AAC5B,IAAA,MAAM,OAAA,GAAU,4BAAA,CAAqB,cAAA,EAAgB,KAAA,EAAO,UAAU,MAAM,CAAA;AAC5E,IAAAA,0BAAyB,IAAI,CAAA;AAC7B,IAAA,MAAM,KAAA,GAAQ,uBAAA,CAAgB,OAAA,CAAQ,KAAK,CAAA;AAC3C,IAAA,OAAO,IAAA,CAAK,YAAY,iBAAA,CAAkB;AAAA,MACxC,SAAA,EAAW,IAAA,CAAK,eAAA,CAAgB,YAAA,CAAa,IAAA,CAAK,IAAA,CAAK,eAAA,EAAiB,KAAA,EAAO,OAAA,CAAQ,KAAA,EAAO,OAAA,CAAQ,SAAS,CAAA;AAAA,MAC/G,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,OAAO,GAAA,EAAK;AACV,IAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AAC1B,MAAA,MAAM,IAAI,SAAA,EAAU;AAAA,IACtB;AACA,IAAAA,0BAAyB,IAAI,CAAA;AAC7B,IAAA,IAAI,EAAE,eAAe,mBAAA,CAAA,EAAc;AACjC,MAAA,GAAA,GAAM,mBAAW,GAAG,CAAA;AAAA,IACtB;AACA,IAAA,OAAO,IAAA,CAAK,YAAY,iBAAA,CAAkB;AAAA,MACxC,WAAW,IAAA,CAAK,eAAA,CAAgB,OAAO,IAAA,CAAK,IAAA,CAAK,iBAAiB,GAAG,CAAA;AAAA,MACrE,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,UAAA,CAAW,gBAAgB,KAAA,EAAO;AAChC,IAAA,MAAM,OAAA,GAAU,4BAAA,CAAqB,cAAA,EAAgB,KAAA,EAAO,UAAU,MAAM,CAAA;AAC5E,IAAAA,0BAAyB,IAAI,CAAA;AAC7B,IAAA,MAAM,KAAA,GAAQ,uBAAA,CAAgB,OAAA,CAAQ,KAAK,CAAA;AAC3C,IAAA,OAAO,IAAA,CAAK,YAAY,iBAAA,CAAkB;AAAA,MACxC,SAAA,EAAW,IAAA,CAAK,eAAA,CAAgB,UAAA,CAAW,IAAA,CAAK,IAAA,CAAK,eAAA,EAAiB,KAAA,EAAO,OAAA,CAAQ,KAAA,EAAO,OAAA,CAAQ,SAAS,CAAA;AAAA,MAC7G,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,cAAc,OAAA,EAAS;AACrB,IAAA,IAAI,KAAA;AACJ,IAAA,IAAI,KAAA;AACJ,IAAA,IAAI,SAAA;AACJ,IAAA,IAAI,YAAY,MAAA,EAAW;AACzB,MAAA,IAAI,OAAA,CAAQ,UAAU,MAAA,EAAW;AAC/B,QAAA,KAAA,GAAQ,OAAA,CAAQ,KAAA;AAAA,MAClB;AACA,MAAA,IAAI,OAAA,CAAQ,UAAU,MAAA,EAAW;AAC/B,QAAA,KAAA,GAAQ,oBAAA,CAAa,OAAA,CAAQ,KAAA,EAAO,eAAe,CAAA;AAAA,MACrD;AACA,MAAA,IAAI,OAAA,CAAQ,cAAc,MAAA,EAAW;AACnC,QAAA,SAAA,GAAY,OAAA,CAAQ,SAAA;AAAA,MACtB;AAAA,IACF;AACA,IAAAA,0BAAyB,IAAI,CAAA;AAC7B,IAAA,MAAM,KAAA,GAAQ,wBAAgB,KAAK,CAAA;AACnC,IAAA,OAAO,IAAA,CAAK,YAAY,iBAAA,CAAkB;AAAA,MACxC,SAAA,EAAW,KAAK,eAAA,CAAgB,aAAA,CAAc,KAAK,IAAA,CAAK,eAAA,EAAiB,KAAA,EAAO,KAAA,EAAO,SAAS,CAAA;AAAA,MAChG,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAAA,EACA,KAAA,GAAQ;AACN,IAAAA,0BAAyB,IAAI,CAAA;AAC7B,IAAA,IAAI,IAAA,CAAK,WAAA,CAAY,IAAA,KAAS,UAAA,EAAY;AACxC,MAAA,MAAM,IAAI,aAAA,EAAc;AAAA,IAC1B;AACA,IAAA,OAAO,IAAA,CAAK,YAAY,iBAAA,CAAkB;AAAA,MACxC,SAAA,EAAW,KAAK,eAAA,CAAgB,KAAA,CAAM,KAAK,IAAA,CAAK,eAAA,EAAiB,IAAA,CAAK,WAAA,CAAY,YAAY,CAAA;AAAA,MAC9F,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAAA,EACA,UAAA,CAAW,OAAO,SAAA,EAAW;AAC3B,IAAAA,0BAAyB,IAAI,CAAA;AAC7B,IAAA,IAAI,UAAU,IAAA,EAAM;AAClB,MAAA,KAAA,GAAQ,MAAA;AAAA,IACV;AACA,IAAA,IAAI,KAAA,KAAU,MAAA,IAAa,EAAE,KAAA,YAAiB,mBAAA,CAAA,EAAc;AAC1D,MAAA,KAAA,GAAQ,mBAAA,CAAY,IAAA,CAAK,kBAAA,CAAW,KAAK,CAAC,CAAA;AAAA,IAC5C;AACA,IAAA,MAAM,OAAA,GAAU,IAAI,kBAAA,EAAW;AAC/B,IAAA,OAAA,CAAQ,MAAA,GAAS,IAAA;AACjB,IAAA,OAAA,CAAQ,cAAc,IAAA,CAAK,WAAA;AAC3B,IAAA,MAAM,SAAS,IAAI,0BAAA,CAAmB,IAAA,EAAM,KAAA,EAAO,WAAW,OAAO,CAAA;AACrE,IAAA,OAAO,IAAA,CAAK,YAAY,iBAAA,CAAkB;AAAA,MACxC,SAAA,EAAW,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,MAAM,CAAA;AAAA,MACtC,OAAA;AAAA,MACA,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAAA,EACA,aAAA,CAAc,OAAO,SAAA,EAAW;AAC9B,IAAAA,0BAAyB,IAAI,CAAA;AAC7B,IAAA,IAAI,UAAU,IAAA,EAAM;AAClB,MAAA,KAAA,GAAQ,MAAA;AAAA,IACV;AACA,IAAA,IAAI,KAAA,KAAU,MAAA,IAAa,EAAE,KAAA,YAAiB,mBAAA,CAAA,EAAc;AAC1D,MAAA,KAAA,GAAQ,mBAAA,CAAY,IAAA,CAAK,kBAAA,CAAW,KAAK,CAAC,CAAA;AAAA,IAC5C;AACA,IAAA,MAAM,OAAA,GAAU,IAAI,kBAAA,EAAW;AAC/B,IAAA,OAAA,CAAQ,MAAA,GAAS,IAAA;AACjB,IAAA,OAAA,CAAQ,cAAc,IAAA,CAAK,WAAA;AAC3B,IAAA,MAAM,SAAS,IAAI,iBAAA,CAAU,MAAM,KAAA,EAAO,SAAA,EAAW,SAAS,IAAI,CAAA;AAClE,IAAA,OAAO,IAAA,CAAK,YAAY,iBAAA,CAAkB;AAAA,MACxC,SAAA,EAAW,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,MAAM,CAAA;AAAA,MACtC,OAAA;AAAA,MACA,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAAA;AAAA;AAAA,EAIA,WAAA,CAAY,IAAA,EAAM,OAAA,EAAS,kBAAA,GAAqB,EAAC,EAAG;AAClD,IAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACxB,MAAA,MAAM,IAAI,SAAA,EAAU;AAAA,IACtB;AACA,IAAA,MAAM,UAAA,GAAa,kBAAA,CAAmB,UAAA,KAAe,MAAA,GAAY,mBAAmB,UAAA,GAAa,KAAA;AACjG,IAAA,MAAM,MAAA,GAAS,kBAAA,CAAmB,MAAA,KAAW,MAAA,GAAY,mBAAmB,MAAA,GAAS,KAAA;AACrF,IAAA,IAAI,IAAA,CAAK,WAAA,CAAY,IAAA,KAAS,eAAA,EAAiB;AAC7C,MAAA,MAAM,IAAI,iBAAA,EAAkB;AAAA,IAC9B;AACA,IAAAA,0BAAyB,IAAI,CAAA;AAC7B,IAAA,IAAI,IAAA,CAAK,UAAA,CAAW,QAAA,CAAS,IAAI,CAAA,EAAG;AAClC,MAAA,MAAM,IAAI,eAAA,EAAgB;AAAA,IAC5B;AACA,IAAA,uBAAA,CAAgB,OAAO,CAAA;AACvB,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,IAAK,UAAA,EAAY;AACxC,MAAA,MAAM,IAAI,kBAAA,EAAmB;AAAA,IAC/B;AAUA,IAAA,MAAM,UAAA,GAAa,CAAC,GAAG,IAAA,CAAK,UAAU,CAAA;AACtC,IAAA,MAAM,KAAA,GAAQ,IAAI,aAAA,CAAM,IAAA,CAAK,iBAAiB,IAAA,EAAM,OAAA,EAAS,YAAY,MAAM,CAAA;AAC/E,IAAA,IAAA,CAAK,UAAA,CAAW,MAAM,IAAI,CAAA;AAC1B,IAAA,IAAA,CAAK,WAAW,KAAA,EAAM;AACtB,IAAA,IAAA,CAAK,WAAA,CAAY,eAAA,CAAgB,GAAA,CAAI,KAAK,CAAA;AAC1C,IAAA,IAAA,CAAK,eAAA,CAAgB,UAAA,CAAW,GAAA,CAAI,IAAA,EAAM,KAAK,CAAA;AAC/C,IAAA,KAAA,CAAM,UAAA,CAAW,KAAK,WAAW,CAAA;AAEjC,IAAA,IAAA,CAAK,WAAA,CAAY,YAAA,CAAa,IAAA,CAAK,MAAM;AACvC,MAAA,KAAA,CAAM,OAAA,GAAU,IAAA;AAChB,MAAA,IAAA,CAAK,UAAA,GAAa,IAAI,yBAAA,CAAkB,GAAG,UAAU,CAAA;AACrD,MAAA,IAAA,CAAK,eAAA,CAAgB,UAAA,CAAW,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA;AAAA,IACnD,CAAC,CAAA;AACD,IAAA,OAAO,IAAI,gBAAA,CAAS,IAAA,EAAM,KAAK,CAAA;AAAA,EACjC;AAAA;AAAA,EAGA,MAAM,IAAA,EAAM;AACV,IAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AAC1B,MAAA,MAAM,IAAI,SAAA,EAAU;AAAA,IACtB;AACA,IAAA,IAAI,KAAK,eAAA,CAAgB,OAAA,IAAW,IAAA,CAAK,WAAA,CAAY,WAAW,UAAA,EAAY;AAC1E,MAAA,MAAM,IAAI,iBAAA,EAAkB;AAAA,IAC9B;AACA,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,aAAA,CAAc,GAAA,CAAI,IAAI,CAAA;AACzC,IAAA,IAAI,UAAU,MAAA,EAAW;AACvB,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,eAAA,CAAgB,UAAA,CAAW,IAAI,IAAI,CAAA;AACzD,IAAA,IAAI,CAAC,IAAA,CAAK,UAAA,CAAW,SAAS,IAAI,CAAA,IAAK,aAAa,MAAA,EAAW;AAC7D,MAAA,MAAM,IAAI,aAAA,EAAc;AAAA,IAC1B;AACA,IAAA,MAAM,MAAA,GAAS,IAAI,gBAAA,CAAS,IAAA,EAAM,QAAQ,CAAA;AAC1C,IAAA,IAAA,CAAK,aAAA,CAAc,GAAA,CAAI,IAAA,EAAM,MAAM,CAAA;AACnC,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EACA,YAAY,IAAA,EAAM;AAChB,IAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AAC1B,MAAA,MAAM,IAAI,SAAA,EAAU;AAAA,IACtB;AACA,IAAA,IAAI,IAAA,CAAK,WAAA,CAAY,IAAA,KAAS,eAAA,EAAiB;AAC7C,MAAA,MAAM,IAAI,iBAAA,EAAkB;AAAA,IAC9B;AACA,IAAAA,0BAAyB,IAAI,CAAA;AAC7B,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,eAAA,CAAgB,UAAA,CAAW,IAAI,IAAI,CAAA;AACzD,IAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,MAAA,MAAM,IAAI,aAAA,EAAc;AAAA,IAC1B;AACA,IAAA,IAAA,CAAK,WAAA,CAAY,YAAA,CAAa,IAAA,CAAK,MAAM;AACvC,MAAA,QAAA,CAAS,OAAA,GAAU,KAAA;AACnB,MAAA,IAAA,CAAK,eAAA,CAAgB,UAAA,CAAW,GAAA,CAAI,QAAA,CAAS,MAAM,QAAQ,CAAA;AAC3D,MAAA,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,QAAA,CAAS,IAAI,CAAA;AACnC,MAAA,IAAA,CAAK,WAAW,KAAA,EAAM;AAAA,IACxB,CAAC,CAAA;AACD,IAAA,IAAA,CAAK,UAAA,GAAa,IAAI,yBAAA,CAAkB,GAAG,KAAA,CAAM,KAAK,IAAA,CAAK,UAAU,CAAA,CAAE,MAAA,CAAO,CAAA,SAAA,KAAa;AACzF,MAAA,OAAO,SAAA,KAAc,IAAA;AAAA,IACvB,CAAC,CAAC,CAAA;AACF,IAAA,QAAA,CAAS,OAAA,GAAU,IAAA;AAEnB,IAAA,IAAA,CAAK,YAAY,iBAAA,CAAkB;AAAA,MACjC,WAAW,MAAM;AACf,QAAA,MAAM,SAAA,GAAY,IAAA,CAAK,eAAA,CAAgB,UAAA,CAAW,IAAI,IAAI,CAAA;AAI1D,QAAA,IAAI,aAAa,SAAA,EAAW;AAC1B,UAAA,IAAA,CAAK,eAAA,CAAgB,UAAA,CAAW,MAAA,CAAO,IAAI,CAAA;AAAA,QAC7C;AAAA,MACF,CAAA;AAAA,MACA,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,GAAA,EAAK;AACT,IAAAA,0BAAyB,IAAI,CAAA;AAC7B,IAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,MAAA,GAAA,GAAM,MAAA;AAAA,IACR;AACA,IAAA,IAAI,GAAA,KAAQ,MAAA,IAAa,EAAE,GAAA,YAAe,mBAAA,CAAA,EAAc;AACtD,MAAA,GAAA,GAAM,mBAAA,CAAY,IAAA,CAAK,kBAAA,CAAW,GAAG,CAAC,CAAA;AAAA,IACxC;AACA,IAAA,OAAO,IAAA,CAAK,YAAY,iBAAA,CAAkB;AAAA,MACxC,WAAW,MAAM;AACf,QAAA,OAAO,IAAA,CAAK,eAAA,CAAgB,KAAA,CAAM,GAAG,CAAA;AAAA,MACvC,CAAA;AAAA,MACA,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAAA,EACA,KAAK,MAAA,CAAO,WAAW,CAAA,GAAI;AACzB,IAAA,OAAO,gBAAA;AAAA,EACT;AACF,CAAA;AACA,IAAO,sBAAA,GAAQ,cAAA;;;AChZf,IAAM,QAAN,MAAY;AAAA,EACV,YAAY,EAAC;AAAA,EACb,IAAA,GAAO,CAAA;AAAA,EACP,eAAA,GAAkB,CAAA;AAAA,EAClB,SAAA,GAAY,CAAA;AAAA,EACZ,cAAA,GAAiB,CAAA;AAAA;AAAA,EAGjB,kBAAA,GAAqB,KAAA;AAAA,EACrB,2BAAA,GAA8B,KAAA;AAAA,EAC9B,QAAA,GAAW,KAAA;AAAA,EACX,WAAA,GAAc,IAAA;AAAA,EACd,UAAA,GAAa,KAAA;AAAA,EACb,MAAA,GAAS,IAAA;AAAA,EACT,aAAA,GAAgB,IAAA;AAAA,EAChB,UAAA,GAAa,CAAA;AAAA,EACb,gBAAA,GAAmB,KAAA;AAAA,EACnB,SAAA,GAAY,KAAA;AAAA,EACZ,SAAA,GAAY,KAAK,GAAA,EAAI;AAAA,EACrB,WAAA,CAAY,IAAA,EAAM,aAAA,GAAgB,EAAC,EAAG;AACpC,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,OAAA,GAAU,aAAA,CAAc,OAAA,KAAY,MAAA,GAAY,cAAc,OAAA,GAAU,KAAA;AAC7E,IAAA,IAAA,CAAK,UAAA,GAAa,aAAA,CAAc,UAAA,KAAe,MAAA,GAAY,cAAc,UAAA,GAAa,KAAA;AAAA,EACxF;AAAA,EACA,cAAA,GAAiB;AACf,IAAA,IAAI,KAAK,UAAA,EAAY;AACnB,MAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AAAA,IAClB;AAAA,EACF;AAAA,EACA,eAAA,GAAkB;AAChB,IAAA,IAAA,CAAK,kBAAA,GAAqB,IAAA;AAAA,EAC5B;AAAA,EACA,wBAAA,GAA2B;AACzB,IAAA,IAAA,CAAK,kBAAA,GAAqB,IAAA;AAC1B,IAAA,IAAA,CAAK,2BAAA,GAA8B,IAAA;AAAA,EACrC;AACF,CAAA;AACA,IAAO,iBAAA,GAAQ,KAAA;;;AC3Bf,SAAS,wBAAA,GAA2B;AAClC,EAAA,IAAI,OAAO,SAAA,KAAc,WAAA,IAAe,QAAQ,IAAA,CAAK,SAAA,CAAU,SAAS,CAAA,EAAG;AACzE,IAAA,MAAM,gCAAgC,IAAA,CAAK,WAAA;AAC3C,IAAA,OAAO,IAAI,6BAAA,CAA8B,qBAAqB,CAAA,EAAE;AAAA,EAClE,CAAA,MAAO;AACL,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAOA,IAAM,oBAAoB,OAAO,SAAA,KAAc,gBAAgB,CAAA,EAAA,KAAM,SAAA,CAAU,SAAS,EAAE,CAAA,CAAA;AAG1F,IAAM,YAAA,GAAe,CAAA,EAAA,KAAM,UAAA,CAAW,EAAA,EAAI,CAAC,CAAA;AAQpC,IAAM,YAAY,CAAA,EAAA,KAAM;AAC7B,EAAA,MAAM,YAAA,GAAe,UAAA,CAAW,YAAA,IAAgB,wBAAA,MAA8B,iBAAA,IAAqB,YAAA;AACnG,EAAA,YAAA,CAAa,EAAE,CAAA;AACjB,CAAA;;;AC/BA,IAAM,wBAAA,GAA2B,CAAC,OAAA,EAAS,OAAA,EAAS,UAAU,CAAA;AAE9D,IAAM,cAAA,GAAN,cAA6B,uBAAA,CAAgB;AAAA,EAC3C,MAAA,GAAS,QAAA;AAAA,EACT,QAAA,GAAW,KAAA;AAAA,EACX,eAAe,EAAC;AAAA,EAChB,kBAAA,uBAAyB,GAAA,EAAI;AAAA,EAC7B,YAAA,GAAe,IAAA;AAAA,EACf,KAAA,GAAQ,IAAA;AAAA,EACR,OAAA,GAAU,IAAA;AAAA,EACV,UAAA,GAAa,IAAA;AAAA,EACb,OAAA,GAAU,IAAA;AAAA,EACV,qBAAA,uBAA4B,GAAA,EAAI;AAAA,EAChC,YAAY,EAAC;AAAA,EACb,eAAA,uBAAsB,GAAA,EAAI;AAAA,EAC1B,oBAAA,uBAA2B,GAAA,EAAI;AAAA,EAC/B,WAAA,CAAY,UAAA,EAAY,IAAA,EAAM,UAAA,EAAY,EAAA,EAAI;AAC5C,IAAA,KAAA,EAAM;AACN,IAAA,IAAA,CAAK,MAAA,GAAS,IAAI,GAAA,CAAI,UAAU,CAAA;AAChC,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAClB,IAAA,IAAA,CAAK,EAAA,GAAK,EAAA;AACV,IAAA,IAAA,CAAK,gBAAA,GAAmB,IAAI,yBAAA,CAAkB,GAAG,KAAA,CAAM,KAAK,IAAA,CAAK,MAAM,CAAA,CAAE,IAAA,EAAM,CAAA;AAC/E,IAAA,KAAA,MAAW,QAAQ,wBAAA,EAA0B;AAI3C,MAAA,IAAA,CAAK,gBAAA,CAAiB,MAAM,MAAM;AAChC,QAAA,IAAA,CAAK,qBAAA,CAAsB,GAAA,CAAI,IAAI,CAAA,IAAI;AAAA,MACzC,CAAC,CAAA;AAAA,IACH;AAAA,EACF;AAAA;AAAA,EAGA,OAAO,OAAA,EAAS;AACd,IAAA,KAAA,MAAW,CAAA,IAAK,IAAA,CAAK,YAAA,CAAa,OAAA,EAAQ,EAAG;AAC3C,MAAA,CAAA,EAAE;AAAA,IACJ;AACA,IAAA,IAAI,YAAY,IAAA,EAAM;AACpB,MAAA,MAAM,CAAA,GAAI,IAAI,YAAA,CAAa,MAAA,EAAW,OAAO,CAAA;AAC7C,MAAA,IAAA,CAAK,KAAA,GAAQ,CAAA;AAAA,IACf;AAGA,IAAA,KAAA,MAAW;AAAA,MACT;AAAA,KACF,IAAK,KAAK,SAAA,EAAW;AACnB,MAAA,IAAI,OAAA,CAAQ,eAAe,MAAA,EAAQ;AACjC,QAAA,OAAA,CAAQ,UAAA,GAAa,MAAA;AACrB,QAAA,IAAI,QAAQ,MAAA,EAAQ;AAKlB,UAAA,SAAA,CAAU,MAAM;AAEd,YAAA,OAAA,CAAQ,MAAA,GAAS,MAAA;AAEjB,YAAA,OAAA,CAAQ,KAAA,GAAQ,IAAI,UAAA,EAAW;AAI/B,YAAA,MAAM,KAAA,GAAQ,IAAI,iBAAA,CAAU,OAAA,EAAS;AAAA,cACnC,OAAA,EAAS,IAAA;AAAA,cACT,UAAA,EAAY;AAAA,aACb,CAAA;AACD,YAAA,KAAA,CAAM,SAAA,GAAY,CAAC,IAAA,CAAK,EAAA,EAAI,IAAI,CAAA;AAChC,YAAA,IAAI;AACF,cAAA,OAAA,CAAQ,cAAc,KAAK,CAAA;AAAA,YAC7B,SAAS,IAAA,EAAM;AACb,cAAA,IAAI,IAAA,CAAK,WAAW,QAAA,EAAU;AAC5B,gBAAA,IAAA,CAAK,OAAO,YAAY,CAAA;AAAA,cAC1B;AAAA,YACF;AAAA,UACF,CAAC,CAAA;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAGA,IAAA,SAAA,CAAU,MAAM;AAId,MAAA,MAAM,oBAAA,GAAuB,KAAK,IAAA,KAAS,eAAA;AAC3C,MAAA,IAAI,oBAAA,EAAsB;AACxB,QAAA,IAAA,CAAK,EAAA,CAAG,YAAA,CAAa,WAAA,GAAc,IAAA,CAAK,GAAG,YAAA,CAAa,WAAA,CAAY,MAAA,CAAO,CAAA,UAAA,KAAc,CAAC,UAAA,CAAW,YAAA,CAAa,YAAA,CAAa,QAAA,CAAS,IAAI,CAAC,CAAA;AAAA,MAC/I;AAEA,MAAA,MAAM,KAAA,GAAQ,IAAI,iBAAA,CAAU,OAAA,EAAS;AAAA,QACnC,OAAA,EAAS,IAAA;AAAA,QACT,UAAA,EAAY;AAAA,OACb,CAAA;AACD,MAAA,KAAA,CAAM,SAAA,GAAY,CAAC,IAAA,CAAK,EAAE,CAAA;AAC1B,MAAA,IAAA,CAAK,cAAc,KAAK,CAAA;AAGxB,MAAA,IAAI,oBAAA,EAAsB;AAExB,QAAA,MAAM,UAAU,IAAA,CAAK,YAAA;AAErB,QAAA,OAAA,CAAQ,WAAA,GAAc,IAAA;AAEtB,QAAA,OAAA,CAAQ,MAAA,GAAS,MAAA;AAAA,MACnB;AAAA,IACF,CAAC,CAAA;AACD,IAAA,IAAA,CAAK,MAAA,GAAS,UAAA;AAAA,EAChB;AAAA,EACA,KAAA,GAAQ;AACN,IAAA,IAAI,IAAA,CAAK,MAAA,KAAW,YAAA,IAAgB,IAAA,CAAK,WAAW,UAAA,EAAY;AAC9D,MAAA,MAAM,IAAI,iBAAA,EAAkB;AAAA,IAC9B;AACA,IAAA,IAAA,CAAK,MAAA,GAAS,QAAA;AACd,IAAA,IAAA,CAAK,OAAO,IAAI,CAAA;AAAA,EAClB;AAAA;AAAA,EAGA,YAAY,IAAA,EAAM;AAChB,IAAA,IAAI,IAAA,CAAK,WAAW,QAAA,EAAU;AAC5B,MAAA,MAAM,IAAI,iBAAA,EAAkB;AAAA,IAC9B;AACA,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,kBAAA,CAAmB,GAAA,CAAI,IAAI,CAAA;AACpD,IAAA,IAAI,gBAAgB,MAAA,EAAW;AAC7B,MAAA,OAAO,WAAA;AAAA,IACT;AACA,IAAA,MAAM,iBAAiB,IAAA,CAAK,EAAA,CAAG,YAAA,CAAa,eAAA,CAAgB,IAAI,IAAI,CAAA;AACpE,IAAA,IAAI,CAAC,IAAA,CAAK,MAAA,CAAO,IAAI,IAAI,CAAA,IAAK,mBAAmB,MAAA,EAAW;AAC1D,MAAA,MAAM,IAAI,aAAA,EAAc;AAAA,IAC1B;AACA,IAAA,MAAM,YAAA,GAAe,IAAI,sBAAA,CAAe,IAAA,EAAM,cAAc,CAAA;AAC5D,IAAA,IAAA,CAAK,kBAAA,CAAmB,GAAA,CAAI,IAAA,EAAM,YAAY,CAAA;AAC9C,IAAA,OAAO,YAAA;AAAA,EACT;AAAA;AAAA,EAGA,kBAAkB,GAAA,EAAK;AACrB,IAAA,MAAM,SAAS,GAAA,CAAI,MAAA;AACnB,IAAA,MAAM,YAAY,GAAA,CAAI,SAAA;AACtB,IAAA,IAAI,UAAU,MAAA,CAAO,MAAA,CAAO,KAAK,SAAS,CAAA,GAAI,IAAI,OAAA,GAAU,IAAA;AAC5D,IAAA,IAAI,IAAA,CAAK,WAAW,QAAA,EAAU;AAC5B,MAAA,MAAM,IAAI,wBAAA,EAAyB;AAAA,IACrC;AAGA,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,IAAI,CAAC,MAAA,EAAQ;AAEX,QAAA,OAAA,GAAU,IAAI,kBAAA,EAAW;AAAA,MAC3B,CAAA,MAAO;AACL,QAAA,OAAA,GAAU,IAAI,kBAAA,EAAW;AACzB,QAAA,OAAA,CAAQ,MAAA,GAAS,MAAA;AACjB,QAAA,OAAA,CAAQ,cAAc,MAAA,CAAO,WAAA;AAAA,MAC/B;AAAA,IACF;AACA,IAAA,IAAA,CAAK,UAAU,IAAA,CAAK;AAAA,MAClB,SAAA;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,OAAO,OAAA;AAAA,EACT;AAAA,EACA,MAAA,GAAS;AACP,IAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AAGhB,IAAA,IAAI,SAAA;AACJ,IAAA,IAAI,OAAA;AACJ,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,MAAA,GAAS,CAAA,EAAG;AAChC,MAAA,MAAM,CAAA,GAAI,IAAA,CAAK,SAAA,CAAU,KAAA,EAAM;AAG/B,MAAA,IAAI,CAAA,IAAK,CAAA,CAAE,OAAA,CAAQ,UAAA,KAAe,MAAA,EAAQ;AACxC,QAAA,OAAA,GAAU,CAAA,CAAE,OAAA;AACZ,QAAA,SAAA,GAAY,CAAA,CAAE,SAAA;AACd,QAAA;AAAA,MACF;AAAA,IACF;AACA,IAAA,IAAI,WAAW,SAAA,EAAW;AACxB,MAAA,IAAI,CAAC,QAAQ,MAAA,EAAQ;AAGnB,QAAA,SAAA,EAAU;AAAA,MACZ,CAAA,MAAO;AACL,QAAA,IAAI,aAAA;AACJ,QAAA,IAAI,KAAA;AACJ,QAAA,IAAI;AACF,UAAA,MAAM,SAAS,SAAA,EAAU;AACzB,UAAA,OAAA,CAAQ,UAAA,GAAa,MAAA;AACrB,UAAA,OAAA,CAAQ,MAAA,GAAS,MAAA;AACjB,UAAA,OAAA,CAAQ,KAAA,GAAQ,KAAA,CAAA;AAGhB,UAAA,IAAI,IAAA,CAAK,WAAW,UAAA,EAAY;AAC9B,YAAA,IAAA,CAAK,MAAA,GAAS,QAAA;AAAA,UAChB;AACA,UAAA,KAAA,GAAQ,IAAI,kBAAU,SAAA,EAAW;AAAA,YAC/B,OAAA,EAAS,KAAA;AAAA,YACT,UAAA,EAAY;AAAA,WACb,CAAA;AAAA,QACH,SAAS,GAAA,EAAK;AACZ,UAAA,OAAA,CAAQ,UAAA,GAAa,MAAA;AACrB,UAAA,OAAA,CAAQ,MAAA,GAAS,MAAA;AACjB,UAAA,OAAA,CAAQ,KAAA,GAAQ,GAAA;AAGhB,UAAA,IAAI,IAAA,CAAK,WAAW,UAAA,EAAY;AAC9B,YAAA,IAAA,CAAK,MAAA,GAAS,QAAA;AAAA,UAChB;AACA,UAAA,KAAA,GAAQ,IAAI,kBAAU,OAAA,EAAS;AAAA,YAC7B,OAAA,EAAS,IAAA;AAAA,YACT,UAAA,EAAY;AAAA,WACb,CAAA;AACD,UAAA,aAAA,GAAgB,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,IAAA,EAAM,IAAI,IAAI,CAAA;AAAA,QACjD;AACA,QAAA,IAAI;AACF,UAAA,KAAA,CAAM,SAAA,GAAY,CAAC,IAAA,CAAK,EAAA,EAAI,IAAI,CAAA;AAChC,UAAA,OAAA,CAAQ,cAAc,KAAK,CAAA;AAAA,QAC7B,SAAS,IAAA,EAAM;AACb,UAAA,IAAI,IAAA,CAAK,WAAW,QAAA,EAAU;AAC5B,YAAA,IAAA,CAAK,OAAO,YAAY,CAAA;AACxB,YAAA,aAAA,GAAgB,MAAA;AAAA,UAClB;AAAA,QACF;AAGA,QAAA,IAAI,CAAC,MAAM,QAAA,EAAU;AACnB,UAAA,IAAI,aAAA,EAAe;AACjB,YAAA,aAAA,EAAc;AAAA,UAChB;AAAA,QACF;AAAA,MACF;AAGA,MAAA,SAAA,CAAU,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,IAAI,CAAC,CAAA;AAChC,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,IAAA,CAAK,WAAW,UAAA,EAAY;AAE9B,MAAA,IAAA,CAAK,MAAA,GAAS,UAAA;AACd,MAAA,IAAI,CAAC,KAAK,KAAA,EAAO;AACf,QAAA,MAAM,KAAA,GAAQ,IAAI,iBAAA,CAAU,UAAU,CAAA;AACtC,QAAA,IAAA,CAAK,cAAc,KAAK,CAAA;AAAA,MAC1B;AAAA,IACF;AAAA,EACF;AAAA,EACA,MAAA,GAAS;AACP,IAAA,IAAI,IAAA,CAAK,WAAW,QAAA,EAAU;AAC5B,MAAA,MAAM,IAAI,iBAAA,EAAkB;AAAA,IAC9B;AACA,IAAA,IAAA,CAAK,MAAA,GAAS,YAAA;AAAA,EAChB;AAAA,EACA,KAAK,MAAA,CAAO,WAAW,CAAA,GAAI;AACzB,IAAA,OAAO,gBAAA;AAAA,EACT;AACF,CAAA;AACA,IAAO,sBAAA,GAAQ,cAAA;;;ACtQf,IAAM,OAAA,GAAU,gBAAA;AAChB,IAAM,eAAN,MAAmB;AAAA;AAAA,EAEjB,GAAA,GAAM,CAAA;AAAA,EACN,IAAA,GAAO;AACL,IAAA,IAAI,IAAA,CAAK,OAAO,OAAA,EAAS;AACvB,MAAA,MAAM,IAAI,eAAA,EAAgB;AAAA,IAC5B;AACA,IAAA,IAAA,CAAK,GAAA,IAAO,CAAA;AACZ,IAAA,OAAO,IAAA,CAAK,GAAA;AAAA,EACd;AAAA;AAAA,EAGA,YAAY,GAAA,EAAK;AACf,IAAA,MAAM,KAAA,GAAQ,KAAK,KAAA,CAAM,IAAA,CAAK,IAAI,GAAA,EAAK,OAAO,CAAC,CAAA,GAAI,CAAA;AACnD,IAAA,IAAI,KAAA,IAAS,KAAK,GAAA,EAAK;AACrB,MAAA,IAAA,CAAK,MAAM,KAAA,GAAQ,CAAA;AAAA,IACrB;AAAA,EACF;AACF,CAAA;AACA,IAAO,oBAAA,GAAQ,YAAA;;;ACff,IAAM,cAAN,MAAkB;AAAA,EAChB,OAAA,GAAU,KAAA;AAAA,EACV,OAAA,GAAU,IAAI,mBAAA,CAAY,IAAI,CAAA;AAAA,EAC9B,UAAA,uBAAiB,GAAA,EAAI;AAAA,EACrB,WAAA,CAAY,WAAA,EAAa,IAAA,EAAM,OAAA,EAAS,aAAA,EAAe;AACrD,IAAA,IAAA,CAAK,WAAA,GAAc,WAAA;AACnB,IAAA,IAAA,CAAK,YAAA,GAAe,aAAA,KAAkB,IAAA,GAAO,IAAI,sBAAa,GAAI,IAAA;AAClE,IAAA,IAAA,CAAK,OAAA,GAAU,KAAA;AACf,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AACf,IAAA,IAAA,CAAK,aAAA,GAAgB,aAAA;AAAA,EACvB;AAAA;AAAA,EAGA,OAAO,GAAA,EAAK;AACV,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA;AACnC,IAAA,OAAO,MAAA,KAAW,MAAA,GAAY,eAAA,CAAgB,MAAA,CAAO,GAAG,CAAA,GAAI,MAAA;AAAA,EAC9D;AAAA;AAAA,EAGA,UAAA,CAAW,KAAA,EAAO,KAAA,EAAO,SAAA,EAAW;AAClC,IAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,CAAA,EAAG;AACtC,MAAA,KAAA,GAAQ,QAAA;AAAA,IACV;AACA,IAAA,MAAM,UAAU,EAAC;AACjB,IAAA,KAAA,MAAW,UAAU,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,KAAA,EAAO,SAAS,CAAA,EAAG;AAC1D,MAAA,OAAA,CAAQ,IAAA,CAAK,eAAA,CAAgB,MAAA,CAAO,GAAG,CAAC,CAAA;AACxC,MAAA,IAAI,OAAA,CAAQ,UAAU,KAAA,EAAO;AAC3B,QAAA;AAAA,MACF;AAAA,IACF;AACA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA;AAAA,EAGA,SAAS,GAAA,EAAK;AACZ,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA;AACnC,IAAA,OAAO,MAAA,KAAW,MAAA,GAAY,eAAA,CAAgB,MAAA,CAAO,KAAK,CAAA,GAAI,MAAA;AAAA,EAChE;AAAA;AAAA,EAGA,YAAA,CAAa,KAAA,EAAO,KAAA,EAAO,SAAA,EAAW;AACpC,IAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,CAAA,EAAG;AACtC,MAAA,KAAA,GAAQ,QAAA;AAAA,IACV;AACA,IAAA,MAAM,UAAU,EAAC;AACjB,IAAA,KAAA,MAAW,UAAU,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,KAAA,EAAO,SAAS,CAAA,EAAG;AAC1D,MAAA,OAAA,CAAQ,IAAA,CAAK,eAAA,CAAgB,MAAA,CAAO,KAAK,CAAC,CAAA;AAC1C,MAAA,IAAI,OAAA,CAAQ,UAAU,KAAA,EAAO;AAC3B,QAAA;AAAA,MACF;AAAA,IACF;AACA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA;AAAA,EAGA,aAAA,CAAc,KAAA,EAAO,KAAA,EAAO,SAAA,EAAW;AACrC,IAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,CAAA,EAAG;AACtC,MAAA,KAAA,GAAQ,QAAA;AAAA,IACV;AACA,IAAA,MAAM,UAAU,EAAC;AACjB,IAAA,KAAA,MAAW,UAAU,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,KAAA,EAAO,SAAS,CAAA,EAAG;AAC1D,MAAA,OAAA,CAAQ,IAAA,CAAK,IAAI,iBAAA,CAAU,eAAA,CAAgB,OAAO,GAAG,CAAA,EAAG,eAAA,CAAgB,MAAA,CAAO,GAAG,CAAA,EAAG,eAAA,CAAgB,MAAA,CAAO,KAAK,CAAC,CAAC,CAAA;AACnH,MAAA,IAAI,OAAA,CAAQ,UAAU,KAAA,EAAO;AAC3B,QAAA;AAAA,MACF;AAAA,IACF;AACA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA;AAAA,EAGA,WAAA,CAAY,SAAA,EAAW,WAAA,EAAa,WAAA,EAAa;AAC/C,IAAA,IAAI,IAAA,CAAK,YAAY,IAAA,EAAM;AACzB,MAAA,MAAM,MAAM,kBAAA,CAAW,IAAA,CAAK,OAAA,EAAS,SAAA,CAAU,KAAK,CAAA,CAAE,GAAA;AACtD,MAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,QAAA,SAAA,CAAU,GAAA,GAAM,GAAA;AAAA,MAClB;AAAA,IACF;AACA,IAAA,MAAM,8BAA8B,EAAC;AACrC,IAAA,IAAI,IAAA,CAAK,YAAA,KAAiB,IAAA,IAAQ,SAAA,CAAU,QAAQ,MAAA,EAAW;AAC7D,MAAA,IAAIC,WAAAA,GAAa,KAAA;AACjB,MAAA,MAAM,kBAAA,GAAqB,KAAK,YAAA,CAAa,GAAA;AAC7C,MAAA,MAAM,uBAAuB,MAAM;AACjC,QAAA,IAAIA,WAAAA,EAAY;AACd,UAAA;AAAA,QACF;AACA,QAAAA,WAAAA,GAAa,IAAA;AACb,QAAA,IAAI,KAAK,YAAA,EAAc;AACrB,UAAA,IAAA,CAAK,aAAa,GAAA,GAAM,kBAAA;AAAA,QAC1B;AAAA,MACF,CAAA;AACA,MAAA,2BAAA,CAA4B,KAAK,oBAAoB,CAAA;AACrD,MAAA,IAAI,WAAA,EAAa;AACf,QAAA,WAAA,CAAY,KAAK,oBAAoB,CAAA;AAAA,MACvC;AACA,MAAA,SAAA,CAAU,GAAA,GAAM,IAAA,CAAK,YAAA,CAAa,IAAA,EAAK;AAIvC,MAAA,IAAI,IAAA,CAAK,YAAY,IAAA,EAAM;AACzB,QAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,OAAO,CAAA,EAAG;AAC/B,UAAA,MAAM,IAAI,MAAM,uEAAuE,CAAA;AAAA,QACzF;AACA,QAAA,IAAI,mBAAmB,IAAA,CAAK,OAAA;AAC5B,QAAA,IAAI,SAAS,SAAA,CAAU,KAAA;AACvB,QAAA,IAAI,UAAA;AACJ,QAAA,IAAI,CAAA,GAAI,CAAA;AACR,QAAA,OAAO,KAAK,CAAA,EAAG;AACb,UAAA,IAAI,OAAO,WAAW,QAAA,EAAU;AAC9B,YAAA,MAAM,IAAI,SAAA,EAAU;AAAA,UACtB;AACA,UAAA,CAAA,GAAI,gBAAA,CAAiB,QAAQ,GAAG,CAAA;AAChC,UAAA,IAAI,KAAK,CAAA,EAAG;AACV,YAAA,UAAA,GAAa,gBAAA,CAAiB,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA;AACxC,YAAA,gBAAA,GAAmB,gBAAA,CAAiB,KAAA,CAAM,CAAA,GAAI,CAAC,CAAA;AAC/C,YAAA,IAAI,CAAC,MAAA,CAAO,MAAA,CAAO,MAAA,EAAQ,UAAU,CAAA,EAAG;AAGtC,cAAA,MAAA,CAAO,cAAA,CAAe,QAAQ,UAAA,EAAY;AAAA,gBACxC,YAAA,EAAc,IAAA;AAAA,gBACd,UAAA,EAAY,IAAA;AAAA,gBACZ,QAAA,EAAU,IAAA;AAAA,gBACV,OAAO;AAAC,eACT,CAAA;AAAA,YACH;AACA,YAAA,MAAA,GAAS,OAAO,UAAU,CAAA;AAAA,UAC5B;AAAA,QACF;AACA,QAAA,UAAA,GAAa,gBAAA;AAIb,QAAA,MAAA,CAAO,cAAA,CAAe,QAAQ,UAAA,EAAY;AAAA,UACxC,YAAA,EAAc,IAAA;AAAA,UACd,UAAA,EAAY,IAAA;AAAA,UACZ,QAAA,EAAU,IAAA;AAAA,UACV,OAAO,SAAA,CAAU;AAAA,SAClB,CAAA;AAAA,MACH;AAAA,IACF,WAAW,IAAA,CAAK,YAAA,KAAiB,QAAQ,OAAO,SAAA,CAAU,QAAQ,QAAA,EAAU;AAC1E,MAAA,IAAA,CAAK,YAAA,CAAa,WAAA,CAAY,SAAA,CAAU,GAAG,CAAA;AAAA,IAC7C;AACA,IAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,WAAW,WAAW,CAAA;AAC9D,IAAA,IAAI,UAAA,GAAa,KAAA;AACjB,IAAA,MAAM,sBAAsB,MAAM;AAChC,MAAA,IAAI,UAAA,EAAY;AACd,QAAA;AAAA,MACF;AACA,MAAA,UAAA,GAAa,IAAA;AACb,MAAA,IAAI,cAAA,EAAgB;AAElB,QAAA,IAAA,CAAK,WAAA,CAAY,gBAAgB,KAAK,CAAA;AAAA,MACxC,CAAA,MAAO;AAEL,QAAA,IAAA,CAAK,YAAA,CAAa,UAAU,GAAG,CAAA;AAAA,MACjC;AAAA,IACF,CAAA;AACA,IAAA,2BAAA,CAA4B,KAAK,mBAAmB,CAAA;AACpD,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,WAAA,CAAY,KAAK,mBAAmB,CAAA;AAAA,IACtC;AAGA,IAAA,IAAI,cAAA,EAAgB;AAClB,MAAA,KAAA,MAAW,QAAA,IAAY,IAAA,CAAK,UAAA,CAAW,MAAA,EAAO,EAAG;AAC/C,QAAA,QAAA,CAAS,OAAA,CAAQ,aAAA,CAAc,SAAA,CAAU,GAAG,CAAA;AAAA,MAC9C;AAAA,IACF;AAGA,IAAA,IAAI;AACF,MAAA,KAAA,MAAW,QAAA,IAAY,IAAA,CAAK,UAAA,CAAW,MAAA,EAAO,EAAG;AAC/C,QAAA,IAAI,SAAS,WAAA,EAAa;AACxB,UAAA,QAAA,CAAS,YAAY,SAAS,CAAA;AAAA,QAChC;AAAA,MACF;AAAA,IACF,SAAS,GAAA,EAAK;AAEZ,MAAA,IAAI,GAAA,CAAI,SAAS,iBAAA,EAAmB;AAClC,QAAA,KAAA,MAAW,YAAY,2BAAA,EAA6B;AAClD,UAAA,QAAA,EAAS;AAAA,QACX;AAAA,MACF;AACA,MAAA,MAAM,GAAA;AAAA,IACR;AACA,IAAA,OAAO,SAAA,CAAU,GAAA;AAAA,EACnB;AAAA;AAAA,EAGA,YAAA,CAAa,KAAK,WAAA,EAAa;AAC7B,IAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,GAAG,CAAA;AAC9C,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,KAAA,MAAW,UAAU,cAAA,EAAgB;AACnC,QAAA,WAAA,CAAY,KAAK,MAAM;AACrB,UAAA,IAAA,CAAK,WAAA,CAAY,QAAQ,IAAI,CAAA;AAAA,QAC/B,CAAC,CAAA;AAAA,MACH;AAAA,IACF;AACA,IAAA,KAAA,MAAW,QAAA,IAAY,IAAA,CAAK,UAAA,CAAW,MAAA,EAAO,EAAG;AAC/C,MAAA,QAAA,CAAS,OAAA,CAAQ,cAAc,GAAG,CAAA;AAAA,IACpC;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,WAAA,EAAa;AACjB,IAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,OAAA,CAAQ,KAAA,EAAM;AAC1C,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,KAAA,MAAW,UAAU,cAAA,EAAgB;AACnC,QAAA,WAAA,CAAY,KAAK,MAAM;AACrB,UAAA,IAAA,CAAK,WAAA,CAAY,QAAQ,IAAI,CAAA;AAAA,QAC/B,CAAC,CAAA;AAAA,MACH;AAAA,IACF;AACA,IAAA,KAAA,MAAW,QAAA,IAAY,IAAA,CAAK,UAAA,CAAW,MAAA,EAAO,EAAG;AAC/C,MAAA,QAAA,CAAS,QAAQ,KAAA,EAAM;AAAA,IACzB;AAAA,EACF;AAAA,EACA,MAAM,KAAA,EAAO;AAEX,IAAA,IAAI,UAAU,MAAA,IAAa,KAAA,CAAM,UAAU,MAAA,IAAa,KAAA,CAAM,UAAU,MAAA,EAAW;AACjF,MAAA,OAAO,IAAA,CAAK,QAAQ,IAAA,EAAK;AAAA,IAC3B;AACA,IAAA,IAAI,KAAA,GAAQ,CAAA;AAGZ,IAAA,KAAA,MAAW,MAAA,IAAU,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,KAAK,CAAA,EAAG;AAC/C,MAAA,KAAA,IAAS,CAAA;AAAA,IACX;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AACF,CAAA;AACA,IAAO,mBAAA,GAAQ,WAAA;;;AC1Of,IAAM,eAAA,GAAkB,CAAC,UAAA,EAAY,MAAA,GAAS,KAAA,KAAU;AACtD,EAAA,UAAA,CAAW,aAAA,GAAgB,IAAA;AAC3B,EAAA,MAAM,oBAAA,GAAuB,UAAA,CAAW,YAAA,CAAa,YAAA,CAAa,MAAM,CAAA,WAAA,KAAe;AACrF,IAAA,OAAO,YAAY,MAAA,KAAW,UAAA;AAAA,EAChC,CAAC,CAAA;AACD,EAAA,IAAI,oBAAA,EAAsB;AACxB,IAAA,UAAA,CAAW,OAAA,GAAU,IAAA;AACrB,IAAA,UAAA,CAAW,aAAa,WAAA,GAAc,UAAA,CAAW,YAAA,CAAa,WAAA,CAAY,OAAO,CAAA,eAAA,KAAmB;AAClG,MAAA,OAAO,UAAA,KAAe,eAAA;AAAA,IACxB,CAAC,CAAA;AACD,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,MAAM,KAAA,GAAQ,IAAI,iBAAA,CAAU,OAAA,EAAS;AAAA,QACnC,OAAA,EAAS,KAAA;AAAA,QACT,UAAA,EAAY;AAAA,OACb,CAAA;AACD,MAAA,KAAA,CAAM,YAAY,EAAC;AACnB,MAAA,UAAA,CAAW,cAAc,KAAK,CAAA;AAAA,IAChC;AAAA,EACF,CAAA,MAAO;AACL,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,eAAA,CAAgB,YAAY,MAAM,CAAA;AAAA,IACpC,CAAC,CAAA;AAAA,EACH;AACF,CAAA;AACA,IAAO,uBAAA,GAAQ,eAAA;;;ACnBf,IAAM,wCAAwC,CAAA,QAAA,KAAY;AAExD,EAAA,IAAI,WAAA;AACJ,EAAA,IAAI,SAAS,gCAAA,EAAkC;AAE7C,IAAA,WAAA,GAAc,QAAA,CAAS,YAAA,CAAa,YAAA,CAAa,QAAA,CAAS,CAAA,EAAA,KAAM;AAC9D,MAAA,OAAO,GAAG,IAAA,KAAS,eAAA;AAAA,IACrB,CAAC,CAAA;AAAA,EACH;AACA,EAAA,IAAI,CAAC,WAAA,EAAa;AAChB,IAAA,MAAM,IAAI,iBAAA,EAAkB;AAAA,EAC9B;AAGA,EAAA,IAAI,WAAA,CAAY,WAAW,QAAA,EAAU;AACnC,IAAA,MAAM,IAAI,wBAAA,EAAyB;AAAA,EACrC;AACA,EAAA,OAAO,WAAA;AACT,CAAA;AAGA,IAAM,WAAA,GAAN,cAA0B,uBAAA,CAAgB;AAAA,EACxC,aAAA,GAAgB,KAAA;AAAA,EAChB,OAAA,GAAU,KAAA;AAAA,EACV,gCAAA,GAAmC,KAAA;AAAA,EACnC,YAAY,WAAA,EAAa;AACvB,IAAA,KAAA,EAAM;AACN,IAAA,IAAA,CAAK,YAAA,GAAe,WAAA;AACpB,IAAA,IAAA,CAAK,YAAA,CAAa,WAAA,CAAY,IAAA,CAAK,IAAI,CAAA;AACvC,IAAA,IAAA,CAAK,OAAO,WAAA,CAAY,IAAA;AACxB,IAAA,IAAA,CAAK,UAAU,WAAA,CAAY,OAAA;AAC3B,IAAA,IAAA,CAAK,gBAAA,GAAmB,IAAI,yBAAA,CAAkB,GAAG,KAAA,CAAM,IAAA,CAAK,WAAA,CAAY,eAAA,CAAgB,IAAA,EAAM,CAAA,CAAE,IAAA,EAAM,CAAA;AAAA,EACxG;AAAA;AAAA,EAGA,iBAAA,CAAkB,IAAA,EAAM,OAAA,GAAU,EAAC,EAAG;AACpC,IAAA,IAAI,SAAS,MAAA,EAAW;AACtB,MAAA,MAAM,IAAI,SAAA,EAAU;AAAA,IACtB;AACA,IAAA,MAAM,WAAA,GAAc,sCAAsC,IAAI,CAAA;AAC9D,IAAA,MAAM,UAAU,OAAA,KAAY,IAAA,IAAQ,QAAQ,OAAA,KAAY,MAAA,GAAY,QAAQ,OAAA,GAAU,IAAA;AACtF,IAAA,MAAM,gBAAgB,OAAA,KAAY,IAAA,IAAQ,QAAQ,aAAA,KAAkB,MAAA,GAAY,QAAQ,aAAA,GAAgB,KAAA;AACxG,IAAA,IAAI,YAAY,IAAA,EAAM;AACpB,MAAA,uBAAA,CAAgB,OAAO,CAAA;AAAA,IACzB;AACA,IAAA,IAAI,IAAA,CAAK,YAAA,CAAa,eAAA,CAAgB,GAAA,CAAI,IAAI,CAAA,EAAG;AAC/C,MAAA,MAAM,IAAI,eAAA,EAAgB;AAAA,IAC5B;AACA,IAAA,IAAI,kBAAkB,OAAA,KAAY,EAAA,IAAM,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,CAAA,EAAI;AAC/D,MAAA,MAAM,IAAI,kBAAA,EAAmB;AAAA,IAC/B;AAGA,IAAA,MAAM,gBAAA,GAAmB,CAAC,GAAG,IAAA,CAAK,gBAAgB,CAAA;AAClD,IAAA,MAAM,2BAAA,GAA8B,CAAC,GAAG,WAAA,CAAY,gBAAgB,CAAA;AACpE,IAAA,MAAM,iBAAiB,IAAI,mBAAA,CAAY,KAAK,YAAA,EAAc,IAAA,EAAM,SAAS,aAAa,CAAA;AACtF,IAAA,IAAA,CAAK,gBAAA,CAAiB,MAAM,IAAI,CAAA;AAChC,IAAA,IAAA,CAAK,iBAAiB,KAAA,EAAM;AAC5B,IAAA,WAAA,CAAY,MAAA,CAAO,IAAI,IAAI,CAAA;AAC3B,IAAA,WAAA,CAAY,oBAAA,CAAqB,IAAI,cAAc,CAAA;AACnD,IAAA,IAAA,CAAK,YAAA,CAAa,eAAA,CAAgB,GAAA,CAAI,IAAA,EAAM,cAAc,CAAA;AAC1D,IAAA,WAAA,CAAY,gBAAA,GAAmB,IAAI,yBAAA,CAAkB,GAAG,KAAK,gBAAgB,CAAA;AAC7E,IAAA,WAAA,CAAY,YAAA,CAAa,KAAK,MAAM;AAClC,MAAA,cAAA,CAAe,OAAA,GAAU,IAAA;AACzB,MAAA,IAAA,CAAK,gBAAA,GAAmB,IAAI,yBAAA,CAAkB,GAAG,gBAAgB,CAAA;AACjE,MAAA,WAAA,CAAY,gBAAA,GAAmB,IAAI,yBAAA,CAAkB,GAAG,2BAA2B,CAAA;AACnF,MAAA,WAAA,CAAY,MAAA,CAAO,MAAA,CAAO,cAAA,CAAe,IAAI,CAAA;AAC7C,MAAA,IAAA,CAAK,YAAA,CAAa,eAAA,CAAgB,MAAA,CAAO,cAAA,CAAe,IAAI,CAAA;AAAA,IAC9D,CAAC,CAAA;AACD,IAAA,OAAO,WAAA,CAAY,YAAY,IAAI,CAAA;AAAA,EACrC;AAAA;AAAA,EAGA,kBAAkB,IAAA,EAAM;AACtB,IAAA,IAAI,SAAS,MAAA,EAAW;AACtB,MAAA,MAAM,IAAI,SAAA,EAAU;AAAA,IACtB;AACA,IAAA,MAAM,WAAA,GAAc,sCAAsC,IAAI,CAAA;AAG9D,IAAA,MAAMC,MAAAA,GAAQ,IAAA,CAAK,YAAA,CAAa,eAAA,CAAgB,IAAI,IAAI,CAAA;AACxD,IAAA,IAAIA,WAAU,MAAA,EAAW;AACvB,MAAA,MAAM,IAAI,aAAA,EAAc;AAAA,IAC1B;AAIA,IAAA,IAAA,CAAK,gBAAA,GAAmB,IAAI,yBAAA,CAAkB,GAAG,KAAA,CAAM,KAAK,IAAA,CAAK,gBAAgB,CAAA,CAAE,MAAA,CAAO,CAAA,eAAA,KAAmB;AAC3G,MAAA,OAAO,eAAA,KAAoB,IAAA;AAAA,IAC7B,CAAC,CAAC,CAAA;AACF,IAAA,WAAA,CAAY,gBAAA,GAAmB,IAAI,yBAAA,CAAkB,GAAG,KAAK,gBAAgB,CAAA;AAG7E,IAAA,MAAM,WAAA,GAAc,WAAA,CAAY,kBAAA,CAAmB,GAAA,CAAI,IAAI,CAAA;AAC3D,IAAA,IAAI,cAAA;AACJ,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,cAAA,GAAiB,CAAC,GAAG,WAAA,CAAY,UAAU,CAAA;AAC3C,MAAA,WAAA,CAAY,UAAA,GAAa,IAAI,yBAAA,EAAkB;AAAA,IACjD;AACA,IAAA,WAAA,CAAY,YAAA,CAAa,KAAK,MAAM;AAClC,MAAAA,OAAM,OAAA,GAAU,KAAA;AAChB,MAAA,IAAA,CAAK,YAAA,CAAa,eAAA,CAAgB,GAAA,CAAIA,MAAAA,CAAM,MAAMA,MAAK,CAAA;AACvD,MAAA,IAAA,CAAK,gBAAA,CAAiB,KAAA,CAAMA,MAAAA,CAAM,IAAI,CAAA;AACtC,MAAA,WAAA,CAAY,gBAAA,CAAiB,KAAA,CAAMA,MAAAA,CAAM,IAAI,CAAA;AAC7C,MAAA,IAAA,CAAK,iBAAiB,KAAA,EAAM;AAC5B,MAAA,IAAI,eAAe,cAAA,EAAgB;AACjC,QAAA,WAAA,CAAY,UAAA,GAAa,IAAI,yBAAA,CAAkB,GAAG,cAAc,CAAA;AAAA,MAClE;AAAA,IACF,CAAC,CAAA;AAGD,IAAAA,OAAM,OAAA,GAAU,IAAA;AAChB,IAAA,IAAA,CAAK,YAAA,CAAa,eAAA,CAAgB,MAAA,CAAO,IAAI,CAAA;AAC7C,IAAA,WAAA,CAAY,kBAAA,CAAmB,OAAO,IAAI,CAAA;AAAA,EAC5C;AAAA,EACA,WAAA,CAAY,UAAA,EAAY,IAAA,EAAM,OAAA,EAAS;AACrC,IAAA,IAAA,GAAO,IAAA,KAAS,SAAY,IAAA,GAAO,UAAA;AACnC,IAAA,IAAI,IAAA,KAAS,UAAA,IAAc,IAAA,KAAS,WAAA,IAAe,SAAS,eAAA,EAAiB;AAC3E,MAAA,MAAM,IAAI,SAAA,CAAU,gBAAA,GAAmB,IAAI,CAAA;AAAA,IAC7C;AACA,IAAA,MAAM,sBAAA,GAAyB,IAAA,CAAK,YAAA,CAAa,YAAA,CAAa,KAAK,CAAA,WAAA,KAAe;AAChF,MAAA,OAAO,YAAY,MAAA,KAAW,QAAA,IAAY,YAAY,IAAA,KAAS,eAAA,IAAmB,YAAY,EAAA,KAAO,IAAA;AAAA,IACvG,CAAC,CAAA;AACD,IAAA,IAAI,sBAAA,EAAwB;AAC1B,MAAA,MAAM,IAAI,iBAAA,EAAkB;AAAA,IAC9B;AACA,IAAA,IAAI,KAAK,aAAA,EAAe;AACtB,MAAA,MAAM,IAAI,iBAAA,EAAkB;AAAA,IAC9B;AACA,IAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,UAAU,CAAA,EAAG;AAC9B,MAAA,UAAA,GAAa,CAAC,UAAU,CAAA;AAAA,IAC1B;AACA,IAAA,IAAI,UAAA,CAAW,MAAA,KAAW,CAAA,IAAK,IAAA,KAAS,eAAA,EAAiB;AACvD,MAAA,MAAM,IAAI,kBAAA,EAAmB;AAAA,IAC/B;AACA,IAAA,KAAA,MAAW,aAAa,UAAA,EAAY;AAClC,MAAA,IAAI,CAAC,IAAA,CAAK,gBAAA,CAAiB,QAAA,CAAS,SAAS,CAAA,EAAG;AAC9C,QAAA,MAAM,IAAI,aAAA,CAAc,uBAAA,GAA0B,SAAA,GAAY,mBAAmB,CAAA;AAAA,MACnF;AAAA,IACF;AAGA,IAAA,MAAM,UAAA,GAAa,SAAS,UAAA,IAAc,SAAA;AAE1C,IAAA,IAAI,UAAA,KAAe,SAAA,IAAa,UAAA,KAAe,QAAA,IAAY,eAAe,SAAA,EAAW;AACnF,MAAA,MAAM,IAAI,SAAA;AAAA;AAAA,QAEV,IAAI,UAAU,CAAA,uHAAA;AAAA,OAA8H;AAAA,IAC9I;AACA,IAAA,MAAM,KAAK,IAAI,sBAAA,CAAe,UAAA,EAAY,IAAA,EAAM,YAAY,IAAI,CAAA;AAChE,IAAA,IAAA,CAAK,YAAA,CAAa,YAAA,CAAa,IAAA,CAAK,EAAE,CAAA;AACtC,IAAA,IAAA,CAAK,aAAa,mBAAA,EAAoB;AAEtC,IAAA,OAAO,EAAA;AAAA,EACT;AAAA,EACA,KAAA,GAAQ;AACN,IAAA,uBAAA,CAAgB,IAAI,CAAA;AAAA,EACtB;AAAA,EACA,KAAK,MAAA,CAAO,WAAW,CAAA,GAAI;AACzB,IAAA,OAAO,aAAA;AAAA,EACT;AACF,CAAA;AACA,IAAO,mBAAA,GAAQ,WAAA;;;ACzKf,IAAM,gBAAA,GAAN,cAA+B,kBAAA,CAAW;AAAA,EACxC,eAAA,GAAkB,IAAA;AAAA,EAClB,SAAA,GAAY,IAAA;AAAA,EACZ,KAAK,MAAA,CAAO,WAAW,CAAA,GAAI;AACzB,IAAA,OAAO,kBAAA;AAAA,EACT;AACF,CAAA;AACA,IAAO,wBAAA,GAAQ,gBAAA;;;ACPf,IAAM,qBAAA,GAAN,cAAoC,iBAAA,CAAU;AAAA,EAC5C,WAAA,CAAY,IAAA,EAAM,UAAA,GAAa,EAAC,EAAG;AACjC,IAAA,KAAA,CAAM,IAAI,CAAA;AACV,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA,CAAW,UAAA,KAAe,MAAA,GAAY,WAAW,UAAA,GAAa,IAAA;AAChF,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA,CAAW,UAAA,KAAe,MAAA,GAAY,WAAW,UAAA,GAAa,CAAA;AAAA,EAClF;AAAA,EACA,KAAK,MAAA,CAAO,WAAW,CAAA,GAAI;AACzB,IAAA,OAAO,uBAAA;AAAA,EACT;AACF,CAAA;AACA,IAAO,6BAAA,GAAQ,qBAAA;;;ACLR,SAAS,YAAA,CAAa,MAAM,IAAA,EAAM;AACvC,EAAA,IAAI,kBAAkB,IAAA,EAAM;AAC1B,IAAA,OAAO,IAAA,CAAK,aAAa,IAAI,CAAA;AAAA,EAC/B;AACA,EAAA,OAAO,IAAI,GAAA,CAAI,CAAC,GAAG,IAAI,CAAA,CAAE,MAAA,CAAO,CAAA,IAAA,KAAQ,IAAA,CAAK,GAAA,CAAI,IAAI,CAAC,CAAC,CAAA;AACzD;;;ACRA,IAAM,WAAN,MAAe;AAAA,EACb,eAAe,EAAC;AAAA,EAChB,eAAA,uBAAsB,GAAA,EAAI;AAAA,EAC1B,cAAc,EAAC;AAAA,EACf,WAAA,CAAY,MAAM,OAAA,EAAS;AACzB,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AACf,IAAA,IAAA,CAAK,mBAAA,GAAsB,IAAA,CAAK,mBAAA,CAAoB,IAAA,CAAK,IAAI,CAAA;AAAA,EAC/D;AAAA,EACA,mBAAA,GAAsB;AACpB,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,MAAM,OAAA,GAAU,KAAK,YAAA,CAAa,MAAA,CAAO,iBAAe,WAAA,CAAY,QAAA,IAAY,WAAA,CAAY,MAAA,KAAW,UAAU,CAAA;AACjH,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,YAAA,CAAa,MAAA,CAAO,CAAA,WAAA,KAAe,CAAC,WAAA,CAAY,QAAA,IAAY,WAAA,CAAY,MAAA,KAAW,UAAU,CAAA;AAMlH,MAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,IAAA,CAAK,CAAC,aAAa,CAAA,KAAM;AAC5C,QAAA,MAAM,aAAa,OAAA,CAAQ,IAAA,CAAK,WAAS,EAAE,WAAA,CAAY,SAAS,UAAA,IAAc,KAAA,CAAM,IAAA,KAAS,UAAA,CAAA,IAAe,aAAa,KAAA,CAAM,MAAA,EAAQ,YAAY,MAAM,CAAA,CAAE,OAAO,CAAC,CAAA;AACnK,QAAA,IAAI,UAAA,EAAY;AACd,UAAA,OAAO,KAAA;AAAA,QACT;AAOA,QAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,CAAE,IAAA,CAAK,CAAA,KAAA,KAAS,YAAA,CAAa,MAAM,MAAA,EAAQ,WAAA,CAAY,MAAM,CAAA,CAAE,OAAO,CAAC,CAAA;AAC5G,QAAA,OAAO,CAAC,UAAA;AAAA,MACV,CAAC,CAAA;AACD,MAAA,IAAI,IAAA,EAAM;AACR,QAAA,IAAA,CAAK,gBAAA,CAAiB,UAAA,EAAY,IAAA,CAAK,mBAAmB,CAAA;AAC1D,QAAA,IAAA,CAAK,gBAAA,CAAiB,OAAA,EAAS,IAAA,CAAK,mBAAmB,CAAA;AACvD,QAAA,IAAA,CAAK,MAAA,EAAO;AAAA,MACd;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AACF,CAAA;AACA,IAAO,gBAAA,GAAQ,QAAA;;;AC1CR,SAAS,yBAAA,CAA0B,YAAA,EAAc,oBAAA,EAAsB,UAAA,EAAY;AACxF,EAAA,IAAI,eAAe,oBAAA,EAAsB;AAEvC,IAAA,MAAM,IAAI,SAAA,CAAU,CAAA,EAAG,UAAU,cAAc,oBAAoB,CAAA,CAAA,EAAI,oBAAA,KAAyB,CAAA,GAAI,UAAA,GAAa,WAAW,CAAA,oBAAA,EAA4B,SAAA,CAAU,MAAM,CAAA,OAAA,CAAS,CAAA;AAAA,EACnL;AACF;;;ACKA,IAAM,wBAAA,GAA2B,CAAC,gBAAA,EAAkB,IAAA,EAAM,IAAA,KAAS;AAKjE,EAAA,MAAM,QAAQ,gBAAA,CAAiB,GAAA,CAAI,IAAI,CAAA,IAAK,QAAQ,OAAA,EAAQ;AAC5D,EAAA,gBAAA,CAAiB,GAAA,CAAI,IAAA,EAAM,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC,CAAA;AAC7C,CAAA;AACA,IAAM,yBAAA,GAA4B,CAAC,SAAA,EAAW,IAAA,EAAM,eAAe,EAAA,KAAO;AACxE,EAAA,MAAM,OAAA,GAAU,aAAA,CAAc,IAAA,CAAK,CAAA,aAAA,KAAiB;AAClD,IAAA,OAAO,CAAC,aAAA,CAAc,OAAA,IAAW,CAAC,aAAA,CAAc,aAAA;AAAA,EAClD,CAAC,CAAA;AACD,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,SAAA,CAAU,MAAM,yBAAA,CAA0B,SAAA,EAAW,IAAA,EAAM,aAAA,EAAe,EAAE,CAAC,CAAA;AAC7E,IAAA;AAAA,EACF;AACA,EAAA,SAAA,CAAU,OAAO,IAAI,CAAA;AACrB,EAAA,EAAA,CAAG,IAAI,CAAA;AACT,CAAA;AAGA,IAAM,iBAAiB,CAAC,SAAA,EAAW,gBAAA,EAAkB,IAAA,EAAM,SAAS,EAAA,KAAO;AACzE,EAAA,MAAM,eAAe,MAAM;AACzB,IAAA,OAAO,IAAI,QAAQ,CAAA,OAAA,KAAW;AAC5B,MAAA,MAAM,EAAA,GAAK,SAAA,CAAU,GAAA,CAAI,IAAI,CAAA;AAC7B,MAAA,MAAM,UAAA,GAAa,EAAA,KAAO,MAAA,GAAY,EAAA,CAAG,OAAA,GAAU,CAAA;AACnD,MAAA,MAAM,aAAa,CAAA,GAAA,KAAO;AACxB,QAAA,IAAI;AACF,UAAA,IAAI,GAAA,EAAK;AACP,YAAA,EAAA,CAAG,GAAG,CAAA;AAAA,UACR,CAAA,MAAO;AACL,YAAA,EAAA,CAAG,MAAM,UAAU,CAAA;AAAA,UACrB;AAAA,QACF,CAAA,SAAE;AACA,UAAA,OAAA,EAAQ;AAAA,QACV;AAAA,MACF,CAAA;AACA,MAAA,IAAI;AACF,QAAA,MAAMC,GAAAA,GAAK,SAAA,CAAU,GAAA,CAAI,IAAI,CAAA;AAC7B,QAAA,IAAIA,QAAO,KAAA,CAAA,EAAW;AACpB,UAAA,UAAA,CAAW,IAAI,CAAA;AACf,UAAA;AAAA,QACF;AAGA,QAAA,MAAM,eAAA,GAAkBA,GAAAA,CAAG,WAAA,CAAY,MAAA,CAAO,CAAA,UAAA,KAAc;AAC1D,UAAA,OAAO,CAAC,UAAA,CAAW,OAAA;AAAA,QACrB,CAAC,CAAA;AAID,QAAA,KAAA,MAAW,iBAAiB,eAAA,EAAiB;AAC3C,UAAA,IAAI,CAAC,cAAc,aAAA,EAAe;AAChC,YAAA,SAAA,CAAU,MAAM;AACd,cAAA,MAAM,KAAA,GAAQ,IAAI,6BAAA,CAAsB,eAAA,EAAiB;AAAA,gBACvD,UAAA,EAAY,IAAA;AAAA,gBACZ,YAAYA,GAAAA,CAAG;AAAA,eAChB,CAAA;AACD,cAAA,aAAA,CAAc,cAAc,KAAK,CAAA;AAAA,YACnC,CAAC,CAAA;AAAA,UACH;AAAA,QACF;AAGA,QAAA,SAAA,CAAU,MAAM;AAId,UAAA,MAAM,OAAA,GAAU,eAAA,CAAgB,IAAA,CAAK,CAAA,aAAA,KAAiB;AACpD,YAAA,OAAO,CAAC,aAAA,CAAc,OAAA,IAAW,CAAC,aAAA,CAAc,aAAA;AAAA,UAClD,CAAC,CAAA;AAID,UAAA,IAAI,OAAA,EAAS;AACX,YAAA,SAAA,CAAU,MAAM;AACd,cAAA,MAAM,KAAA,GAAQ,IAAI,6BAAA,CAAsB,SAAA,EAAW;AAAA,gBACjD,UAAA,EAAY,IAAA;AAAA,gBACZ,YAAYA,GAAAA,CAAG;AAAA,eAChB,CAAA;AACD,cAAA,OAAA,CAAQ,cAAc,KAAK,CAAA;AAAA,YAC7B,CAAC,CAAA;AAAA,UACH;AAGA,UAAA,yBAAA,CAA0B,SAAA,EAAW,IAAA,EAAM,eAAA,EAAiB,UAAU,CAAA;AAAA,QACxE,CAAC,CAAA;AAAA,MACH,SAAS,GAAA,EAAK;AACZ,QAAA,UAAA,CAAW,GAAG,CAAA;AAAA,MAChB;AAAA,IACF,CAAC,CAAA;AAAA,EACH,CAAA;AACA,EAAA,wBAAA,CAAyB,gBAAA,EAAkB,MAAM,YAAY,CAAA;AAC/D,CAAA;AAGA,IAAM,2BAAA,GAA8B,CAAC,UAAA,EAAY,OAAA,EAAS,SAAS,EAAA,KAAO;AACxE,EAAA,UAAA,CAAW,gCAAA,GAAmC,IAAA;AAC9C,EAAA,MAAM,UAAA,GAAa,UAAA,CAAW,WAAA,GAAc,UAAA,CAAW,OAAA;AAGvD,EAAA,MAAM,eAAA,GAAkB,UAAA,CAAW,YAAA,CAAa,WAAA,CAAY,OAAO,CAAA,aAAA,KAAiB;AAClF,IAAA,OAAO,UAAA,KAAe,aAAA;AAAA,EACxB,CAAC,CAAA;AAID,EAAA,KAAA,MAAW,iBAAiB,eAAA,EAAiB;AAC3C,IAAA,IAAI,CAAC,aAAA,CAAc,OAAA,IAAW,CAAC,cAAc,aAAA,EAAe;AAC1D,MAAA,SAAA,CAAU,MAAM;AACd,QAAA,MAAM,KAAA,GAAQ,IAAI,6BAAA,CAAsB,eAAA,EAAiB;AAAA,UACvD,UAAA,EAAY,OAAA;AAAA,UACZ;AAAA,SACD,CAAA;AACD,QAAA,aAAA,CAAc,cAAc,KAAK,CAAA;AAAA,MACnC,CAAC,CAAA;AAAA,IACH;AAAA,EACF;AAIA,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,OAAA,GAAU,eAAA,CAAgB,IAAA,CAAK,CAAA,aAAA,KAAiB;AACpD,MAAA,OAAO,CAAC,aAAA,CAAc,OAAA,IAAW,CAAC,aAAA,CAAc,aAAA;AAAA,IAClD,CAAC,CAAA;AAGD,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,SAAA,CAAU,MAAM;AACd,QAAA,MAAM,KAAA,GAAQ,IAAI,6BAAA,CAAsB,SAAA,EAAW;AAAA,UACjD,UAAA,EAAY,OAAA;AAAA,UACZ;AAAA,SACD,CAAA;AACD,QAAA,OAAA,CAAQ,cAAc,KAAK,CAAA;AAAA,MAC7B,CAAC,CAAA;AAAA,IACH;AAGA,IAAA,MAAM,sBAAsB,MAAM;AAChC,MAAA,MAAM,QAAA,GAAW,eAAA,CAAgB,IAAA,CAAK,CAAA,aAAA,KAAiB;AACrD,QAAA,OAAO,CAAC,aAAA,CAAc,OAAA,IAAW,CAAC,aAAA,CAAc,aAAA;AAAA,MAClD,CAAC,CAAA;AACD,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,SAAA,CAAU,mBAAmB,CAAA;AAC7B,QAAA;AAAA,MACF;AAIA,MAAA,UAAA,CAAW,aAAa,OAAA,GAAU,OAAA;AAClC,MAAA,UAAA,CAAW,OAAA,GAAU,OAAA;AAGrB,MAAA,MAAM,WAAA,GAAc,WAAW,WAAA,CAAY,KAAA,CAAM,KAAK,UAAA,CAAW,gBAAgB,GAAG,eAAe,CAAA;AAGnG,MAAA,WAAA,CAAY,YAAA,GAAe,OAAA;AAI3B,MAAA,OAAA,CAAQ,MAAA,GAAS,UAAA;AAEjB,MAAA,OAAA,CAAQ,UAAA,GAAa,MAAA;AAErB,MAAA,OAAA,CAAQ,WAAA,GAAc,WAAA;AACtB,MAAA,WAAA,CAAY,YAAA,CAAa,KAAK,MAAM;AAClC,QAAA,UAAA,CAAW,aAAa,OAAA,GAAU,UAAA;AAClC,QAAA,UAAA,CAAW,OAAA,GAAU,UAAA;AAAA,MACvB,CAAC,CAAA;AAGD,MAAA,WAAA,CAAY,MAAA,GAAS,QAAA;AAGrB,MAAA,MAAM,KAAA,GAAQ,IAAI,6BAAA,CAAsB,eAAA,EAAiB;AAAA,QACvD,UAAA,EAAY,OAAA;AAAA,QACZ;AAAA,OACD,CAAA;AACD,MAAA,IAAI,QAAA,GAAW,KAAA;AACf,MAAA,IAAI;AACF,QAAA,OAAA,CAAQ,cAAc,KAAK,CAAA;AAAA,MAC7B,SAAS,IAAA,EAAM;AACb,QAAA,QAAA,GAAW,IAAA;AAAA,MACb;AACA,MAAA,MAAM,kBAAkB,MAAM;AAE5B,QAAA,IAAI,WAAA,CAAY,WAAW,QAAA,EAAU;AAEnC,UAAA,WAAA,CAAY,MAAA,GAAS,UAAA;AACrB,UAAA,IAAI,QAAA,EAAU;AAEZ,YAAA,WAAA,CAAY,OAAO,YAAY,CAAA;AAAA,UACjC;AAAA,QACF;AAAA,MACF,CAAA;AAMA,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,eAAA,EAAgB;AAAA,MAClB,CAAA,MAAO;AACL,QAAA,SAAA,CAAU,eAAe,CAAA;AAAA,MAC3B;AACA,MAAA,WAAA,CAAY,qBAAA,CAAsB,GAAA,CAAI,OAAA,EAAS,MAAM;AACnD,QAAA,UAAA,CAAW,gCAAA,GAAmC,KAAA;AAC9C,QAAA,UAAA,CAAW,WAAA,GAAc,MAAA;AAAA,MAG3B,CAAC,CAAA;AACD,MAAA,WAAA,CAAY,qBAAA,CAAsB,GAAA,CAAI,OAAA,EAAS,MAAM;AACnD,QAAA,UAAA,CAAW,gCAAA,GAAmC,KAAA;AAC9C,QAAA,UAAA,CAAW,WAAA,GAAc,MAAA;AACzB,QAAA,SAAA,CAAU,MAAM;AAEd,UAAA,OAAA,CAAQ,WAAA,GAAc,IAAA;AACtB,UAAA,EAAA,CAAG,IAAI,YAAY,CAAA;AAAA,QACrB,CAAC,CAAA;AAAA,MACH,CAAC,CAAA;AACD,MAAA,WAAA,CAAY,qBAAA,CAAsB,GAAA,CAAI,UAAA,EAAY,MAAM;AACtD,QAAA,UAAA,CAAW,gCAAA,GAAmC,KAAA;AAC9C,QAAA,UAAA,CAAW,WAAA,GAAc,MAAA;AAEzB,QAAA,SAAA,CAAU,MAAM;AAEd,UAAA,OAAA,CAAQ,WAAA,GAAc,IAAA;AACtB,UAAA,IAAI,WAAW,aAAA,EAAe;AAC5B,YAAA,EAAA,CAAG,IAAI,YAAY,CAAA;AAAA,UACrB,CAAA,MAAO;AACL,YAAA,EAAA,CAAG,IAAI,CAAA;AAAA,UACT;AAAA,QACF,CAAC,CAAA;AAAA,MACH,CAAC,CAAA;AAAA,IACH,CAAA;AACA,IAAA,mBAAA,EAAoB;AAAA,EACtB,CAAC,CAAA;AACH,CAAA;AAGA,IAAM,eAAe,CAAC,SAAA,EAAW,kBAAkB,IAAA,EAAM,OAAA,EAAS,SAAS,EAAA,KAAO;AAChF,EAAA,MAAM,aAAa,MAAM;AACvB,IAAA,OAAO,IAAI,QAAQ,CAAA,OAAA,KAAW;AAC5B,MAAA,MAAM,aAAa,CAAA,GAAA,KAAO;AACxB,QAAA,IAAI;AACF,UAAA,IAAI,GAAA,EAAK;AAGP,YAAA,EAAA,CAAG,GAAG,CAAA;AAAA,UACR,CAAA,MAAO;AACL,YAAA,EAAA,CAAG,MAAM,UAAU,CAAA;AAAA,UACrB;AAAA,QACF,CAAA,SAAE;AACA,UAAA,OAAA,EAAQ;AAAA,QACV;AAAA,MACF,CAAA;AAGA,MAAA,IAAI,EAAA,GAAK,SAAA,CAAU,GAAA,CAAI,IAAI,CAAA;AAC3B,MAAA,IAAI,OAAO,MAAA,EAAW;AAEpB,QAAA,EAAA,GAAK,IAAI,gBAAA,CAAS,IAAA,EAAM,CAAC,CAAA;AACzB,QAAA,SAAA,CAAU,GAAA,CAAI,MAAM,EAAE,CAAA;AAAA,MACxB;AAGA,MAAA,IAAI,YAAY,MAAA,EAAW;AACzB,QAAA,OAAA,GAAU,EAAA,CAAG,OAAA,KAAY,CAAA,GAAI,EAAA,CAAG,OAAA,GAAU,CAAA;AAAA,MAC5C;AAGA,MAAA,IAAI,EAAA,CAAG,UAAU,OAAA,EAAS;AACxB,QAAA,OAAO,UAAA,CAAW,IAAI,YAAA,EAAc,CAAA;AAAA,MACtC;AAGA,MAAA,MAAM,UAAA,GAAa,IAAI,mBAAA,CAAY,EAAE,CAAA;AAGrC,MAAA,IAAI,EAAA,CAAG,UAAU,OAAA,EAAS;AAExB,QAAA,2BAAA,CAA4B,UAAA,EAAY,OAAA,EAAS,OAAA,EAAS,CAAA,GAAA,KAAO;AAC/D,UAAA,UAAA,CAAW,GAAG,CAAA;AAAA,QAChB,CAAC,CAAA;AAAA,MACH,CAAA,MAAO;AACL,QAAA,UAAA,CAAW,IAAI,CAAA;AAAA,MACjB;AAAA,IACF,CAAC,CAAA;AAAA,EACH,CAAA;AACA,EAAA,wBAAA,CAAyB,gBAAA,EAAkB,MAAM,UAAU,CAAA;AAC7D,CAAA;AACA,IAAM,aAAN,MAAiB;AAAA,EACf,UAAA,uBAAiB,GAAA,EAAI;AAAA;AAAA,EAErB,iBAAA,uBAAwB,GAAA,EAAI;AAAA;AAAA;AAAA,EAG5B,GAAA,CAAI,OAAO,MAAA,EAAQ;AACjB,IAAA,yBAAA,CAA0B,SAAA,CAAU,MAAA,EAAQ,CAAA,EAAG,gBAAgB,CAAA;AAC/D,IAAA,OAAO,WAAA,CAAI,OAAO,MAAM,CAAA;AAAA,EAC1B;AAAA;AAAA,EAGA,eAAe,IAAA,EAAM;AACnB,IAAA,yBAAA,CAA0B,SAAA,CAAU,MAAA,EAAQ,CAAA,EAAG,2BAA2B,CAAA;AAC1E,IAAA,MAAM,OAAA,GAAU,IAAI,wBAAA,EAAiB;AACrC,IAAA,OAAA,CAAQ,MAAA,GAAS,IAAA;AACjB,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,cAAA,CAAe,IAAA,CAAK,YAAY,IAAA,CAAK,iBAAA,EAAmB,MAAM,OAAA,EAAS,CAAC,KAAK,UAAA,KAAe;AAC1F,QAAA,IAAI,GAAA,EAAK;AACP,UAAA,OAAA,CAAQ,QAAQ,IAAI,YAAA,CAAa,GAAA,CAAI,OAAA,EAAS,IAAI,IAAI,CAAA;AACtD,UAAA,OAAA,CAAQ,UAAA,GAAa,MAAA;AACrB,UAAA,MAAM,KAAA,GAAQ,IAAI,iBAAA,CAAU,OAAA,EAAS;AAAA,YACnC,OAAA,EAAS,IAAA;AAAA,YACT,UAAA,EAAY;AAAA,WACb,CAAA;AACD,UAAA,KAAA,CAAM,YAAY,EAAC;AACnB,UAAA,OAAA,CAAQ,cAAc,KAAK,CAAA;AAC3B,UAAA;AAAA,QACF;AACA,QAAA,OAAA,CAAQ,MAAA,GAAS,KAAA,CAAA;AACjB,QAAA,OAAA,CAAQ,UAAA,GAAa,MAAA;AACrB,QAAA,MAAM,MAAA,GAAS,IAAI,6BAAA,CAAsB,SAAA,EAAW;AAAA,UAClD,UAAA,EAAY,IAAA;AAAA,UACZ;AAAA,SACD,CAAA;AACD,QAAA,OAAA,CAAQ,cAAc,MAAM,CAAA;AAAA,MAC9B,CAAC,CAAA;AAAA,IACH,CAAC,CAAA;AACD,IAAA,OAAO,OAAA;AAAA,EACT;AAAA;AAAA,EAGA,IAAA,CAAK,MAAM,OAAA,EAAS;AAClB,IAAA,yBAAA,CAA0B,SAAA,CAAU,MAAA,EAAQ,CAAA,EAAG,iBAAiB,CAAA;AAChE,IAAA,IAAI,SAAA,CAAU,MAAA,GAAS,CAAA,IAAK,OAAA,KAAY,MAAA,EAAW;AAGjD,MAAA,OAAA,GAAU,oBAAA,CAAa,SAAS,kBAAkB,CAAA;AAAA,IACpD;AACA,IAAA,IAAI,YAAY,CAAA,EAAG;AACjB,MAAA,MAAM,IAAI,UAAU,8BAA8B,CAAA;AAAA,IACpD;AACA,IAAA,MAAM,OAAA,GAAU,IAAI,wBAAA,EAAiB;AACrC,IAAA,OAAA,CAAQ,MAAA,GAAS,IAAA;AACjB,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,YAAA,CAAa,IAAA,CAAK,YAAY,IAAA,CAAK,iBAAA,EAAmB,MAAM,OAAA,EAAS,OAAA,EAAS,CAAC,GAAA,EAAK,UAAA,KAAe;AACjG,QAAA,IAAI,GAAA,EAAK;AACP,UAAA,OAAA,CAAQ,MAAA,GAAS,KAAA,CAAA;AACjB,UAAA,OAAA,CAAQ,UAAA,GAAa,MAAA;AACrB,UAAA,OAAA,CAAQ,QAAQ,IAAI,YAAA,CAAa,GAAA,CAAI,OAAA,EAAS,IAAI,IAAI,CAAA;AACtD,UAAA,MAAM,KAAA,GAAQ,IAAI,iBAAA,CAAU,OAAA,EAAS;AAAA,YACnC,OAAA,EAAS,IAAA;AAAA,YACT,UAAA,EAAY;AAAA,WACb,CAAA;AACD,UAAA,KAAA,CAAM,YAAY,EAAC;AACnB,UAAA,OAAA,CAAQ,cAAc,KAAK,CAAA;AAC3B,UAAA;AAAA,QACF;AACA,QAAA,OAAA,CAAQ,MAAA,GAAS,UAAA;AACjB,QAAA,OAAA,CAAQ,UAAA,GAAa,MAAA;AACrB,QAAA,MAAM,MAAA,GAAS,IAAI,iBAAA,CAAU,SAAS,CAAA;AACtC,QAAA,MAAA,CAAO,YAAY,EAAC;AACpB,QAAA,OAAA,CAAQ,cAAc,MAAM,CAAA;AAAA,MAC9B,CAAC,CAAA;AAAA,IACH,CAAC,CAAA;AACD,IAAA,OAAO,OAAA;AAAA,EACT;AAAA;AAAA,EAGA,SAAA,GAAY;AACV,IAAA,OAAO,OAAA,CAAQ,OAAA,CAAQ,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,OAAA,EAAQ,EAAG,CAAC,CAAC,IAAA,EAAM,QAAQ,CAAA,KAAM;AACjF,MAAA,MAAM,gCAAgC,QAAA,CAAS,WAAA,CAAY,IAAA,CAAK,CAAA,UAAA,KAAc,WAAW,gCAAgC,CAAA;AAIzH,MAAA,MAAM,OAAA,GAAU,6BAAA,GAAgC,6BAAA,CAA8B,WAAA,GAAc,QAAA,CAAS,OAAA;AACrG,MAAA,OAAO;AAAA,QACL,IAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAC,CAAA,CAAE,MAAA,CAAO,CAAC;AAAA,MACT;AAAA,KACF,KAAM;AAIJ,MAAA,OAAO,OAAA,GAAU,CAAA;AAAA,IACnB,CAAC,CAAC,CAAA;AAAA,EACJ;AAAA,EACA,KAAK,MAAA,CAAO,WAAW,CAAA,GAAI;AACzB,IAAA,OAAO,YAAA;AAAA,EACT;AACF,CAAA;AACA,IAAO,kBAAA,GAAQ,UAAA;;;ACpZf,IAAM,aAAA,GAAgB,IAAI,kBAAA,EAAW;AACrC,IAAO,qBAAA,GAAQ,aAAA;;;ACaf,IAAI,SAAA,GACA,OAAO,MAAA,KAAW,WAAA,GACZ,SACA,OAAO,iBAAA,KAAsB,WAAA,GAC3B,IAAA,GACA,OAAO,MAAA,KAAW,WAAA,GAChB,MAAA,GACA,QAAA,CAAS,cAAc,CAAA,EAAE;AAMvC,IAAM,wBAAA,GAA2B,CAAC,KAAA,KAAU;AACxC,EAAA,OAAO;AAAA,IACH,KAAA;AAAA,IACA,UAAA,EAAY,KAAA;AAAA,IACZ,YAAA,EAAc,IAAA;AAAA,IACd,QAAA,EAAU;AAAA,GACd;AACJ,CAAA;AAEA,MAAA,CAAO,iBAAiB,SAAA,EAAW;AAAA,EAC/B,SAAA,EAAW,yBAAyB,qBAAa,CAAA;AAAA,EACjD,SAAA,EAAW,yBAAyB,iBAAS,CAAA;AAAA,EAC7C,kBAAA,EAAoB,yBAAyB,0BAAkB,CAAA;AAAA,EAC/D,WAAA,EAAa,yBAAyB,mBAAW,CAAA;AAAA,EACjD,UAAA,EAAY,yBAAyB,kBAAU,CAAA;AAAA,EAC/C,QAAA,EAAU,yBAAyB,gBAAQ,CAAA;AAAA,EAC3C,WAAA,EAAa,yBAAyB,mBAAW,CAAA;AAAA,EACjD,cAAA,EAAgB,yBAAyB,sBAAc,CAAA;AAAA,EACvD,gBAAA,EAAkB,yBAAyB,wBAAgB,CAAA;AAAA,EAC3D,SAAA,EAAW,yBAAyB,iBAAS,CAAA;AAAA,EAC7C,UAAA,EAAY,yBAAyB,kBAAU,CAAA;AAAA,EAC/C,cAAA,EAAgB,yBAAyB,sBAAc,CAAA;AAAA,EACvD,qBAAA,EAAuB,yBAAyB,6BAAqB;AACzE,CAAC,CAAA;ACpCD,eAAsB,YAAA,CACpB,SACA,OAAA,EACY;AACZ,EAAA,OAAOC,cAAA,CAAO,EAAE,OAAA,EAAS,OAAA,EAAS,CAAA;AACpC;AAMA,eAAsB,cAAA,CACpB,SACA,OAAA,EACc;AACd,EAAA,OAAOC,gBAAA,CAAS,EAAE,OAAA,EAAS,OAAA,EAAS,CAAA;AACtC;AAMA,eAAsB,YAAA,CACpB,SACA,OAAA,EACY;AACZ,EAAA,OAAOC,cAAA,CAAO;AAAA,IACZ,OAAA;AAAA,IACA,MAAA,EAAQ,OAAO,IAAA,KAAS;AACtB,MAAA,IAAI,CAAC,MAAM,OAAO,OAAA;AAClB,MAAA,MAAM,KAAA,GAAQ,KAAK,WAAA,EAAY;AAC/B,MAAA,OAAO,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,KAAK,WAAA,EAAY,CAAE,QAAA,CAAS,KAAK,CAAC,CAAA;AAAA,IACnE;AAAA,GACD,CAAA;AACH;AAKA,eAAsB,WAAA,CAAY,OAAA,EAAiB,QAAA,GAAW,IAAA,EAAuB;AACnF,EAAA,OAAOT,aAAA,CAAM;AAAA,IACX,OAAA;AAAA,IACA,QAAA,EAAU,WAAW,CAAC,CAAA,KAAO,EAAE,IAAA,EAAK,GAAI,OAAO,UAAA,GAAc;AAAA,GAC9D,CAAA;AACH;AAKA,eAAsB,eAAe,OAAA,EAAkC;AACrE,EAAA,OAAOU,gBAAA,CAAS;AAAA,IACd,OAAA;AAAA,IACA,IAAA,EAAM,GAAA;AAAA,IACN,QAAA,EAAU,CAAC,CAAA,KAAO,CAAA,GAAI,IAAA,GAAO;AAAA,GAC9B,CAAA;AACH;AAKA,eAAsB,aAAA,CAAc,OAAA,EAAiB,YAAA,GAAe,IAAA,EAAwB;AAC1F,EAAA,OAAOC,eAAA,CAAQ,EAAE,OAAA,EAAS,OAAA,EAAS,cAAc,CAAA;AACnD;;;AC/DO,SAAS,qBAAqBZ,QAAAA,EAAwB;AAC3D,EAAAA,QAAAA,CACG,QAAQ,OAAO,CAAA,CACf,YAAY,gBAAgB,CAAA,CAC5B,OAAO,qBAAA,EAAuB,uCAAuC,EACrE,MAAA,CAAO,2BAAA,EAA6B,qCAAqC,CAAA,CACzE,MAAA,CAAO,wBAAwB,oCAAoC,CAAA,CACnE,MAAA,CAAO,OAAO,IAAA,KAAoE;AACjF,IAAA,MAAM,SAAS,aAAA,EAAc;AAG7B,IAAA,MAAM,KAAA,GAAQ,KAAK,KAAA,IAAS,OAAA,CAAQ,IAAI,UAAA,IAAe,MAAM,YAAY,OAAO,CAAA;AAChF,IAAA,MAAM,EAAA,GAAK,KAAK,QAAA,IAAY,OAAA,CAAQ,IAAI,aAAA,IAAkB,MAAM,eAAe,UAAU,CAAA;AAEzF,IAAA,MAAM,OAAOa,oBAAA,CAAiB;AAAA,MAC5B,SAAS,MAAA,CAAO,OAAA;AAAA,MAChB,kBAAkB,MAAA,CAAO,gBAAA;AAAA,MACzB,WAAA,EAAa;AAAA,KACd,CAAA;AAED,IAAA,MAAM,IAAA,CAAK,OAAO,UAAA,EAAW;AAE7B,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,IAAA,CAAK,MAAM,EAAE,KAAA,EAAO,QAAA,EAAU,EAAA,EAAI,CAAA;AAE5D,MAAA,eAAA,CAAgB;AAAA,QACd,KAAA;AAAA,QACA,uBAAA,EAAyB,IAAA,CAAK,MAAA,CAAO,aAAA,CAAc,OAAO,iBAAiB,CAAA;AAAA,QAC3E,sBAAA,EAAwB,IAAA,CAAK,MAAA,CAAO,aAAA,CAAc,OAAO,gBAAgB;AAAA,OAC1E,CAAA;AAED,MAAA,MAAM,EAAE,MAAMC,WAAAA,EAAW,GAAI,MAAM,IAAA,CAAK,KAAA,CAAM,IAAI,sBAAsB,CAAA;AACxE,MAAA,MAAM,MAAA,GAASA,eAAc,EAAC;AAE9B,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,aAAA,EAAgB,KAAK,CAAA,CAAE,CAAA;AAEnC,MAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,QAAA,OAAA,CAAQ,IAAI,sBAAsB,CAAA;AAClC,QAAA;AAAA,MACF;AAGA,MAAA,IAAI,KAAK,SAAA,EAAW;AAClB,QAAA,MAAMC,GAAAA,GAAK,OAAO,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,WAAA,KAAgB,KAAK,SAAS,CAAA;AAC9D,QAAA,IAAI,CAACA,GAAAA,EAAI;AACP,UAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,UAAA,EAAa,IAAA,CAAK,SAAS,CAAA,WAAA,CAAa,CAAA;AACtD,UAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,QAChB;AACA,QAAA,YAAA,CAAa,EAAE,mBAAA,EAAqBA,GAAAA,CAAG,WAAA,EAAa,CAAA;AACpD,QAAA,OAAA,CAAQ,IAAI,CAAA,WAAA,EAAcA,GAAAA,CAAG,IAAI,CAAA,EAAA,EAAKA,GAAAA,CAAG,WAAW,CAAA,CAAA,CAAG,CAAA;AACvD,QAAA;AAAA,MACF;AAGA,MAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,QAAA,YAAA,CAAa,EAAE,mBAAA,EAAqB,MAAA,CAAO,CAAC,CAAA,CAAE,aAAa,CAAA;AAC3D,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,WAAA,EAAc,MAAA,CAAO,CAAC,CAAA,CAAE,IAAI,CAAA,EAAA,EAAK,MAAA,CAAO,CAAC,CAAA,CAAE,WAAW,CAAA,CAAA,CAAG,CAAA;AACrE,QAAA;AAAA,MACF;AAGA,MAAA,MAAM,OAAA,GAAU,MAAA,CAAO,GAAA,CAAI,CAACA,GAAAA,KAAO;AACjC,QAAA,MAAM,SAAA,GAAYA,GAAAA,CAAG,qBAAA,GAAwBA,GAAAA,CAAG,sBAAA;AAChD,QAAA,OAAO;AAAA,UACL,IAAA,EAAM,CAAA,EAAGA,GAAAA,CAAG,IAAI,KAAK,SAAS,CAAA,MAAA,CAAA;AAAA,UAC9B,OAAOA,GAAAA,CAAG,WAAA;AAAA,UACV,aAAaA,GAAAA,CAAG;AAAA,SAClB;AAAA,MACF,CAAC,CAAA;AAED,MAAA,MAAM,QAAA,GAAW,MAAM,YAAA,CAAa,kBAAA,EAAoB,OAAO,CAAA;AAC/D,MAAA,YAAA,CAAa,EAAE,mBAAA,EAAqB,QAAA,EAAU,CAAA;AAC9C,MAAA,MAAM,KAAK,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,gBAAgB,QAAQ,CAAA;AACxD,MAAA,OAAA,CAAQ,IAAI,CAAA,WAAA,EAAc,EAAA,CAAG,IAAI,CAAA,EAAA,EAAK,QAAQ,CAAA,CAAA,CAAG,CAAA;AAAA,IACnD,SAAS,GAAA,EAAK;AACZ,MAAA,MAAM,MAAM,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAC3D,MAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,cAAA,EAAiB,GAAG,CAAA,CAAE,CAAA;AACpC,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF,CAAC,CAAA;AACL;AC1EA,IAAM,eAAA,GAAkB,2BAAA;AAIxB,eAAe,mBAAA,CAAoB,OAAe,MAAA,EAAiC;AACjF,EAAA,MAAM,MAAA,GAAS,IAAI,eAAA,CAAgB,EAAE,OAAO,CAAA;AAC5C,EAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,CAAA,EAAG,eAAe,CAAA,8BAAA,EAAiC,MAAA,CAAO,QAAA,EAAU,CAAA,CAAA,EAAI;AAAA,IAC9F,MAAA,EAAQ,KAAA;AAAA,IACR,OAAA,EAAS,EAAE,WAAA,EAAa,MAAA;AAAO,GAChC,CAAA;AAED,EAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACX,IAAA,MAAM,OAAO,MAAM,GAAA,CAAI,MAAK,CAAE,KAAA,CAAM,MAAM,EAAE,CAAA;AAC5C,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,iCAAA,EAAoC,IAAI,MAAM,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE,CAAA;AAAA,EAC1E;AAEA,EAAA,MAAM,IAAA,GAAQ,MAAM,GAAA,CAAI,IAAA,EAAK;AAC7B,EAAA,MAAM,KAAA,GAAQ,IAAA,EAAM,kBAAA,IAAsB,IAAA,EAAM,iBAAA,IAAqB,IAAA;AACrE,EAAA,IAAI,CAAC,KAAA,EAAO,MAAM,IAAI,MAAM,kCAAkC,CAAA;AAE9D,EAAA,OAAO,KAAA,CAAM,QAAQ,KAAK,CAAA,GAAI,MAAM,IAAA,CAAK,GAAG,CAAA,GAAI,MAAA,CAAO,KAAK,CAAA;AAC9D;AAIO,SAAS,wBAAwBf,QAAAA,EAAwB;AAC9D,EAAAA,QAAAA,CACG,OAAA,CAAQ,UAAU,CAAA,CAClB,WAAA,CAAY,6BAA6B,CAAA,CACzC,MAAA,CAAO,mBAAA,EAAqB,uDAAuD,CAAA,CACnF,MAAA,CAAO,qBAAA,EAAuB,uCAAuC,CAAA,CACrE,MAAA,CAAO,2BAAA,EAA6B,qCAAqC,CAAA,CACzE,MAAA,CAAO,qBAAA,EAAuB,YAAY,CAAA,CAC1C,MAAA,CAAO,oBAAA,EAAsB,WAAW,CAAA,CACxC,MAAA;AAAA,IACC,OAAO,IAAA,KAMD;AACJ,MAAA,MAAM,SAAS,aAAA,EAAc;AAE7B,MAAA,IAAI,KAAK,cAAA,EAAgB;AACvB,QAAA,MAAM,sBAAA,CAAuB,QAAQ,IAAI,CAAA;AAAA,MAC3C,CAAA,MAAO;AACL,QAAA,MAAM,mBAAA,CAAoB,QAAQ,IAAI,CAAA;AAAA,MACxC;AAAA,IACF;AAAA,GACF;AACJ;AAIA,eAAe,mBAAA,CACb,QACA,IAAA,EACA;AAEA,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,IAAU,MAAM,YAAY,OAAO,CAAA;AAEtD,EAAA,MAAM,OAAOa,oBAAAA,CAAiB;AAAA,IAC5B,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,kBAAkB,MAAA,CAAO,gBAAA;AAAA,IACzB,WAAA,EAAa;AAAA,GACd,CAAA;AACD,EAAA,MAAM,IAAA,CAAK,OAAO,UAAA,EAAW;AAG7B,EAAA,MAAM,UAAA,GAAa,MAAM,YAAA,CAAa,qBAAA,EAAuB;AAAA,IAC3D,EAAE,IAAA,EAAM,2BAAA,EAA6B,KAAA,EAAO,MAAA,EAAO;AAAA,IACnD,EAAE,IAAA,EAAM,8BAAA,EAAgC,KAAA,EAAO,OAAA;AAAQ,GACxD,CAAA;AAED,EAAA,IAAI,gBAAA;AACJ,EAAA,IAAI,eAAe,MAAA,EAAQ;AACzB,IAAA,gBAAA,GAAmB,MAAM,YAAY,iBAAiB,CAAA;AAAA,EACxD,CAAA,MAAO;AACL,IAAA,OAAA,CAAQ,IAAI,+BAA+B,CAAA;AAC3C,IAAA,MAAM,cAAA,GAAiB,MAAM,IAAA,CAAK,KAAA,CAAM,KAAK,wBAAA,EAA0B;AAAA,MACrE,IAAA,EAAM,EAAE,KAAA;AAAM,KACf,CAAA;AACD,IAAA,IAAI,eAAe,KAAA,EAAO;AACxB,MAAA,OAAA,CAAQ,MAAM,CAAA,mCAAA,EAAsC,IAAA,CAAK,UAAU,cAAA,CAAe,KAAK,CAAC,CAAA,CAAE,CAAA;AAC1F,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AACA,IAAA,OAAA,CAAQ,IAAI,4CAA4C,CAAA;AACxD,IAAA,gBAAA,GAAmB,MAAM,YAAY,mBAAmB,CAAA;AAAA,EAC1D;AAGA,EAAA,MAAMF,SAAAA,GAAW,IAAA,CAAK,QAAA,IAAa,MAAM,eAAe,UAAU,CAAA;AAClE,EAAA,MAAM,SAAA,GAAY,MAAM,cAAA,CAAe,kBAAkB,CAAA;AACzD,EAAA,IAAIA,cAAa,SAAA,EAAW;AAC1B,IAAA,OAAA,CAAQ,MAAM,yBAAyB,CAAA;AACvC,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AAGA,EAAA,MAAM,YAAY,IAAA,CAAK,SAAA,IAAc,MAAM,WAAA,CAAY,YAAA,EAAc,KAAK,CAAA,IAAM,MAAA;AAChF,EAAA,MAAM,WAAW,IAAA,CAAK,QAAA,IAAa,MAAM,WAAA,CAAY,WAAA,EAAa,KAAK,CAAA,IAAM,EAAA;AAG7E,EAAA,IAAI;AACF,IAAA,MAAM,IAAA,CAAK,KAAK,QAAA,CAAS;AAAA,MACvB,KAAA;AAAA,MACA,QAAA,EAAAA,SAAAA;AAAA,MACA,gBAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,2BAAA,EAAgC,KAAK,CAAA,CAAE,CAAA;AAAA,EACrD,SAAS,GAAA,EAAK;AACZ,IAAA,MAAM,MAAM,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAC3D,IAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,qBAAA,EAAwB,GAAG,CAAA,CAAE,CAAA;AAC3C,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AAGA,EAAA,MAAM,OAAA,GAAU,MAAM,aAAA,CAAc,aAAa,CAAA;AACjD,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,IAAI;AACF,MAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,IAAA,CAAK,MAAM,EAAE,KAAA,EAAO,QAAA,EAAAA,SAAAA,EAAU,CAAA;AAC7D,MAAA,eAAA,CAAgB;AAAA,QACd,KAAA;AAAA,QACA,uBAAA,EAAyB,IAAA,CAAK,MAAA,CAAO,aAAA,CAAc,YAAY,iBAAiB,CAAA;AAAA,QAChF,sBAAA,EAAwB,IAAA,CAAK,MAAA,CAAO,aAAA,CAAc,YAAY,gBAAgB;AAAA,OAC/E,CAAA;AAED,MAAA,MAAM,EAAE,MAAMG,WAAAA,EAAW,GAAI,MAAM,IAAA,CAAK,KAAA,CAAM,IAAI,sBAAsB,CAAA;AACxE,MAAA,MAAM,MAAA,GAASA,eAAc,EAAC;AAE9B,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,aAAA,EAAgB,KAAK,CAAA,CAAE,CAAA;AACnC,MAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,QAAA,YAAA,CAAa,EAAE,mBAAA,EAAqB,MAAA,CAAO,CAAC,CAAA,CAAE,aAAa,CAAA;AAC3D,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,WAAA,EAAc,MAAA,CAAO,CAAC,CAAA,CAAE,IAAI,CAAA,EAAA,EAAK,MAAA,CAAO,CAAC,CAAA,CAAE,WAAW,CAAA,CAAA,CAAG,CAAA;AAAA,MACvE,CAAA,MAAA,IAAW,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG;AAC5B,QAAA,MAAM,OAAA,GAAU,MAAA,CAAO,GAAA,CAAI,CAACC,GAAAA,KAAO;AACjC,UAAA,MAAM,SAAA,GAAYA,GAAAA,CAAG,qBAAA,GAAwBA,GAAAA,CAAG,sBAAA;AAChD,UAAA,OAAO;AAAA,YACL,IAAA,EAAM,CAAA,EAAGA,GAAAA,CAAG,IAAI,KAAK,SAAS,CAAA,MAAA,CAAA;AAAA,YAC9B,OAAOA,GAAAA,CAAG,WAAA;AAAA,YACV,aAAaA,GAAAA,CAAG;AAAA,WAClB;AAAA,QACF,CAAC,CAAA;AACD,QAAA,MAAM,QAAA,GAAW,MAAM,YAAA,CAAa,kBAAA,EAAoB,OAAO,CAAA;AAC/D,QAAA,YAAA,CAAa,EAAE,mBAAA,EAAqB,QAAA,EAAU,CAAA;AAC9C,QAAA,MAAM,KAAK,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,gBAAgB,QAAQ,CAAA;AACxD,QAAA,OAAA,CAAQ,IAAI,CAAA,WAAA,EAAc,EAAA,CAAG,IAAI,CAAA,EAAA,EAAK,QAAQ,CAAA,CAAA,CAAG,CAAA;AAAA,MACnD;AAAA,IACF,SAAS,GAAA,EAAK;AACZ,MAAA,MAAM,MAAM,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAC3D,MAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,cAAA,EAAiB,GAAG,CAAA,CAAE,CAAA;AACpC,MAAA,OAAA,CAAQ,MAAM,uCAAuC,CAAA;AAAA,IACvD;AAAA,EACF;AACF;AAIA,eAAe,sBAAA,CACb,QACA,IAAA,EACA;AACA,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,IAAS,OAAA,CAAQ,GAAA,CAAI,UAAA;AACxC,EAAA,MAAMJ,SAAAA,GAAW,IAAA,CAAK,QAAA,IAAY,OAAA,CAAQ,GAAA,CAAI,aAAA;AAC9C,EAAA,MAAM,aAAA,GAAgB,QAAQ,GAAA,CAAI,eAAA;AAElC,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,OAAA,CAAQ,MAAM,uDAAuD,CAAA;AACrE,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AACA,EAAA,IAAI,CAACA,SAAAA,EAAU;AACb,IAAA,OAAA,CAAQ,MAAM,mEAAmE,CAAA;AACjF,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AACA,EAAA,IAAI,CAAC,aAAA,EAAe;AAClB,IAAA,OAAA,CAAQ,MAAM,wEAAwE,CAAA;AACtF,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AAEA,EAAA,MAAM,OAAOE,oBAAAA,CAAiB;AAAA,IAC5B,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,kBAAkB,MAAA,CAAO,gBAAA;AAAA,IACzB,WAAA,EAAa;AAAA,GACd,CAAA;AACD,EAAA,MAAM,IAAA,CAAK,OAAO,UAAA,EAAW;AAG7B,EAAA,MAAM,cAAA,GAAiB,MAAM,IAAA,CAAK,KAAA,CAAM,KAAK,wBAAA,EAA0B;AAAA,IACrE,IAAA,EAAM,EAAE,KAAA;AAAM,GACf,CAAA;AACD,EAAA,IAAI,eAAe,KAAA,EAAO;AACxB,IAAA,OAAA,CAAQ,MAAM,CAAA,qBAAA,EAAwB,IAAA,CAAK,UAAU,cAAA,CAAe,KAAK,CAAC,CAAA,CAAE,CAAA;AAC5E,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AAGA,EAAA,MAAM,gBAAA,GAAmB,MAAM,mBAAA,CAAoB,KAAA,EAAO,aAAa,CAAA;AAGvE,EAAA,IAAI;AACF,IAAA,MAAM,IAAA,CAAK,KAAK,QAAA,CAAS;AAAA,MACvB,KAAA;AAAA,MACA,QAAA,EAAAF,SAAAA;AAAA,MACA,gBAAA;AAAA,MACA,SAAA,EAAW,KAAK,SAAA,IAAa,MAAA;AAAA,MAC7B,QAAA,EAAU,KAAK,QAAA,IAAY;AAAA,KAC5B,CAAA;AACD,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,YAAA,EAAe,KAAK,CAAA,CAAE,CAAA;AAAA,EACpC,SAAS,GAAA,EAAK;AACZ,IAAA,MAAM,MAAM,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAC3D,IAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,qBAAA,EAAwB,GAAG,CAAA,CAAE,CAAA;AAC3C,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AACF;;;ACrOO,SAAS,sBAAsBX,QAAAA,EAAwB;AAC5D,EAAAA,QAAAA,CACG,QAAQ,QAAQ,CAAA,CAChB,YAAY,iBAAiB,CAAA,CAC7B,OAAO,MAAM;AACZ,IAAA,iBAAA,EAAkB;AAClB,IAAA,YAAA,CAAa,EAAE,mBAAA,EAAqB,MAAA,EAAW,CAAA;AAC/C,IAAA,OAAA,CAAQ,IAAI,aAAa,CAAA;AAAA,EAC3B,CAAC,CAAA;AACL;;;ACPO,SAAS,sBAAsBA,QAAAA,EAAwB;AAC5D,EAAAA,QAAAA,CACG,QAAQ,QAAQ,CAAA,CAChB,YAAY,6CAA6C,CAAA,CACzD,OAAO,MAAM;AACZ,IAAA,MAAM,SAAS,SAAA,EAAU;AACzB,IAAA,MAAM,QAAQ,cAAA,EAAe;AAE7B,IAAA,IAAI,CAAC,QAAQ,OAAA,EAAS;AACpB,MAAA,OAAA,CAAQ,IAAI,gDAAgD,CAAA;AAC5D,MAAA;AAAA,IACF;AAEA,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,WAAA,EAAc,MAAA,CAAO,OAAO,CAAA,CAAE,CAAA;AAE1C,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,WAAA,EAAc,KAAA,CAAM,KAAK,CAAA,CAAE,CAAA;AAAA,IACzC,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,IAAI,4BAA4B,CAAA;AAAA,IAC1C;AAEA,IAAA,IAAI,OAAO,mBAAA,EAAqB;AAC9B,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,WAAA,EAAc,MAAA,CAAO,mBAAmB,CAAA,CAAE,CAAA;AAAA,IACxD,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,IAAI,4BAA4B,CAAA;AAAA,IAC1C;AAAA,EACF,CAAC,CAAA;AACL;ACVO,SAAS,UAAU,EAAA,EAA8C;AACtE,EAAA,OAAO,YAAY;AACjB,IAAA,IAAI;AACF,MAAA,MAAM,EAAA,EAAG;AAAA,IACX,SAAS,GAAA,EAAK;AACZ,MAAA,MAAM,MAAM,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAC3D,MAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,OAAA,EAAU,GAAG,CAAA,CAAE,CAAA;AAC7B,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF,CAAA;AACF;AAQA,eAAsB,WAAA,GAAoC;AACxD,EAAA,IAAI;AACF,IAAA,OAAO,MAAMgB,iBAAgB,KAAK,CAAA;AAAA,EACpC,SAAS,GAAA,EAAK;AACZ,IAAA,IAAI,eAAejB,cAAAA,EAAW;AAC5B,MAAA,OAAA,CAAQ,KAAA,CAAM,IAAI,OAAO,CAAA;AACzB,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AACA,IAAA,MAAM,GAAA;AAAA,EACR;AACF;AAMA,eAAsB,iBAAiB,YAAA,EAAkD;AACvF,EAAA,IAAI;AACF,IAAA,OAAO,MAAMkB,qBAAA,CAAqB,KAAA,EAAO,YAAY,CAAA;AAAA,EACvD,SAAS,GAAA,EAAK;AACZ,IAAA,IAAI,eAAelB,cAAAA,EAAW;AAC5B,MAAA,OAAA,CAAQ,KAAA,CAAM,IAAI,OAAO,CAAA;AACzB,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AACA,IAAA,MAAM,GAAA;AAAA,EACR;AACF;AAcO,SAAS,UAAA,CAA8C,SAAmB,IAAA,EAAiB;AAEhG,EAAA,OAAA,CAAQ,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAM,CAAA,CAAE,MAAA,CAAO,MAAA,CAAO,CAAA,CAAE,KAAK,CAAC,CAAA,CAAE,IAAA,CAAK,EAAE,CAAC,CAAA;AAGjE,EAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,IAAA,OAAA,CAAQ,GAAA;AAAA,MACN,OAAA,CACG,GAAA,CAAI,CAAC,CAAA,KAAM;AACV,QAAA,MAAM,GAAA,GAAM,CAAA,CAAE,KAAA,CAAM,GAA8B,CAAA;AAClD,QAAA,OAAO,GAAA,CAAI,MAAM,CAAA,EAAG,CAAA,CAAE,QAAQ,CAAC,CAAA,CAAE,MAAA,CAAO,CAAA,CAAE,KAAK,CAAA;AAAA,MACjD,CAAC,CAAA,CACA,IAAA,CAAK,EAAE;AAAA,KACZ;AAAA,EACF;AACF;AAOO,SAAS,YAAA,CAA0CE,QAAe,OAAA,EAAoB;AAC3F,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,CAAK,MAAMA,MAAK,CAAA;AAAA,EACzB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,uBAAA,EAA0B,OAAO,CAAA,CAAE,CAAA;AACjD,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AACF;;;ACpGO,SAAS,0BAA0BD,QAAAA,EAAwB;AAChE,EAAAA,SACG,OAAA,CAAQ,YAAY,CAAA,CACpB,WAAA,CAAY,iBAAiB,CAAA,CAC7B,MAAA;AAAA,IACC,UAAU,YAAY;AACpB,MAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,WAAA,EAAY;AACnC,MAAA,MAAM,IAAA,GAAO,MAAMc,eAAA,CAAW,cAAA,CAAe,IAAI,CAAA;AAEjD,MAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACrB,QAAA,OAAA,CAAQ,IAAI,sBAAsB,CAAA;AAClC,QAAA;AAAA,MACF;AAEA,MAAA,UAAA;AAAA,QACE;AAAA,UACE,EAAE,QAAQ,IAAA,EAAM,KAAA,EAAO,IAAI,KAAA,EAAO,CAAC,CAAA,KAAM,CAAA,CAAE,WAAA,EAAsB;AAAA,UACjE,EAAE,QAAQ,MAAA,EAAQ,KAAA,EAAO,IAAI,KAAA,EAAO,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,EAAe;AAAA,UAC5D;AAAA,YACE,MAAA,EAAQ,MAAA;AAAA,YACR,KAAA,EAAO,CAAA;AAAA,YACP,OAAO,CAAC,CAAA,KACN,OAAQ,CAAA,CAAE,qBAAA,GAAoC,EAAE,sBAAiC;AAAA,WACrF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,MAAA;AAAA,YACR,KAAA,EAAO,EAAA;AAAA,YACP,OAAO,CAAC,CAAA,KAAO,EAAE,KAAA,GAA+B,CAAC,GAAG,IAAA,IAAQ;AAAA;AAC9D,SACF;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAC;AAAA,GACH;AAEF,EAAA,MAAM,YAAYd,QAAAA,CAAQ,OAAA,CAAQ,WAAW,CAAA,CAAE,YAAY,sBAAsB,CAAA;AAEjF,EAAA,SAAA,CACG,OAAA,CAAQ,aAAa,CAAA,CACrB,WAAA,CAAY,6DAA6D,CAAA,CACzE,MAAA;AAAA,IAAO,CAAC,EAAA,KACP,SAAA,CAAU,YAAY;AACpB,MAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,WAAA,EAAY;AACnC,MAAA,MAAM,IAAA,GAAO,MAAMc,eAAA,CAAW,cAAA,CAAe,IAAI,CAAA;AAEjD,MAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACrB,QAAA,OAAA,CAAQ,IAAI,sBAAsB,CAAA;AAClC,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,UAAA;AACJ,MAAA,IAAI,EAAA,EAAI;AACN,QAAA,MAAMC,MAAK,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,gBAAgB,EAAE,CAAA;AAChD,QAAA,IAAI,CAACA,GAAAA,EAAI;AACP,UAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,UAAA,EAAa,EAAE,CAAA,WAAA,CAAa,CAAA;AAC1C,UAAA,OAAA,CAAQ,MAAM,uBAAuB,CAAA;AACrC,UAAA,KAAA,MAAW,CAAA,IAAK,IAAA,EAAM,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAA,EAAK,EAAE,WAAW,CAAA,EAAA,EAAK,CAAA,CAAE,IAAI,CAAA,CAAE,CAAA;AACnE,UAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,QAChB;AACA,QAAA,UAAA,GAAa,EAAA;AAAA,MACf,CAAA,MAAO;AAEL,QAAA,MAAM,OAAA,GAAU,IAAA,CAAK,GAAA,CAAI,CAACA,GAAAA,KAAO;AAC/B,UAAA,MAAM,SAAA,GAAYA,GAAAA,CAAG,qBAAA,GAAwBA,GAAAA,CAAG,sBAAA;AAChD,UAAA,OAAO;AAAA,YACL,IAAA,EAAM,CAAA,EAAGA,GAAAA,CAAG,IAAI,KAAK,SAAS,CAAA,MAAA,CAAA;AAAA,YAC9B,OAAOA,GAAAA,CAAG,WAAA;AAAA,YACV,aAAaA,GAAAA,CAAG;AAAA,WAClB;AAAA,QACF,CAAC,CAAA;AACD,QAAA,UAAA,GAAa,MAAM,YAAA,CAAa,kBAAA,EAAoB,OAAO,CAAA;AAAA,MAC7D;AAEA,MAAA,YAAA,CAAa,EAAE,mBAAA,EAAqB,UAAA,EAAY,CAAA;AAChD,MAAA,MAAM,KAAK,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,gBAAgB,UAAU,CAAA;AACxD,MAAA,OAAA,CAAQ,IAAI,CAAA,UAAA,EAAa,EAAA,CAAG,IAAI,CAAA,EAAA,EAAK,UAAU,CAAA,CAAA,CAAG,CAAA;AAAA,IACpD,CAAC,CAAA;AAAE,GACL;AAEF,EAAA,SAAA,CACG,OAAA,CAAQ,eAAe,CAAA,CACvB,WAAA,CAAY,wBAAwB,CAAA,CACpC,MAAA,CAAO,0BAAA,EAA4B,uBAAuB,CAAA,CAC1D,MAAA,CAAO,UAAA,EAAY,uBAAA,EAAyB,KAAK,CAAA,CACjD,MAAA;AAAA,IAAO,CAAC,IAAA,EAAc,IAAA,KACrB,SAAA,CAAU,YAAY;AACpB,MAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,WAAA,EAAY;AACnC,MAAA,MAAM,IAAA,GAAO,MAAMD,eAAA,CAAW,eAAA;AAAA,QAC5B,IAAA;AAAA,QACA,IAAA;AAAA,QACA,IAAA,CAAK,WAAA;AAAA,QACL,KAAK,MAAA,IAAU;AAAA,OACjB;AACA,MAAA,OAAA,CAAQ,IAAI,CAAA,SAAA,EAAY,IAAA,CAAK,IAAI,CAAA,EAAA,EAAK,IAAA,CAAK,WAAW,CAAA,CAAA,CAAG,CAAA;AAAA,IAC3D,CAAC,CAAA;AAAE,GACL;AAEF,EAAA,SAAA,CACG,OAAA,CAAQ,aAAa,CAAA,CACrB,WAAA,CAAY,oBAAoB,CAAA,CAChC,MAAA;AAAA,IAAO,CAAC,EAAA,KACP,SAAA,CAAU,YAAY;AACpB,MAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,WAAA,EAAY;AACnC,MAAA,MAAM,IAAA,GAAO,MAAMA,eAAA,CAAW,eAAA,CAAgB,MAAM,EAAE,CAAA;AACtD,MAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,EAAM,MAAA,IAAU,CAAA,kBAAA,EAAqB,EAAE,CAAA,CAAE,CAAA;AAAA,IACvD,CAAC,CAAA;AAAE,GACL;AAEF,EAAA,SAAA,CACG,OAAA,CAAQ,oBAAoB,CAAA,CAC5B,WAAA,CAAY,yCAAyC,CAAA,CACrD,MAAA;AAAA,IAAO,CAAC,EAAA,EAAY,IAAA,KACnB,SAAA,CAAU,YAAY;AACpB,MAAA,MAAM,IAAA,GAAO,YAAA,CAAa,IAAA,EAAM,CAAA,oDAAA,CAAwD,CAAA;AACxF,MAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,iBAAiB,EAAE,CAAA;AAC1C,MAAA,MAAM,OAAO,MAAMA,eAAA,CAAW,eAAA,CAAgB,IAAA,EAAM,IAAI,IAAI,CAAA;AAC5D,MAAA,OAAA,CAAQ,IAAI,CAAA,SAAA,EAAY,IAAA,CAAK,IAAI,CAAA,EAAA,EAAK,IAAA,CAAK,WAAW,CAAA,CAAA,CAAG,CAAA;AAAA,IAC3D,CAAC,CAAA;AAAE,GACL;AAEF,EAAA,SAAA,CACG,OAAA,CAAQ,OAAO,CAAA,CACf,WAAA,CAAY,oCAAoC,CAAA,CAChD,MAAA,CAAO,sBAAA,EAAwB,+CAA+C,CAAA,CAC9E,MAAA;AAAA,IAAO,CAAC,IAAA,KACP,SAAA,CAAU,YAAY;AACpB,MAAA,MAAM,EAAE,IAAA,EAAM,WAAA,KAAgB,MAAM,gBAAA,CAAiB,KAAK,SAAS,CAAA;AACnE,MAAA,MAAM,IAAA,GAAO,MAAMA,eAAA,CAAW,kBAAA,CAAmB,MAAM,WAAW,CAAA;AAElE,MAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACrB,QAAA,OAAA,CAAQ,IAAI,iBAAiB,CAAA;AAC7B,QAAA;AAAA,MACF;AAQA,MAAA,UAAA;AAAA,QACE;AAAA,UACE;AAAA,YACE,MAAA,EAAQ,SAAA;AAAA,YACR,KAAA,EAAO,EAAA;AAAA,YACP,KAAA,EAAO,CAAC,CAAA,KAAO,CAAA,CAAE,MAAe,WAAA,IAAe;AAAA,WACjD;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,MAAA;AAAA,YACR,KAAA,EAAO,EAAA;AAAA,YACP,KAAA,EAAO,CAAC,CAAA,KAAM;AACZ,cAAA,MAAM,IAAI,CAAA,CAAE,IAAA;AACZ,cAAA,OAAO,CAAC,CAAA,EAAG,UAAA,EAAY,CAAA,EAAG,WAAW,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA,IAAK,EAAA;AAAA,YACtE;AAAA,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,OAAA;AAAA,YACR,KAAA,EAAO,EAAA;AAAA,YACP,KAAA,EAAO,CAAC,CAAA,KAAO,CAAA,CAAE,MAAe,KAAA,IAAS;AAAA,WAC3C;AAAA,UACA,EAAE,QAAQ,MAAA,EAAQ,KAAA,EAAO,IAAI,KAAA,EAAO,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,EAAe;AAAA,UAC5D,EAAE,MAAA,EAAQ,MAAA,EAAQ,KAAA,EAAO,CAAA,EAAG,KAAA,EAAO,CAAC,CAAA,KAAM,MAAA,CAAO,CAAA,CAAE,cAAc,CAAA,EAAE;AAAA,UACnE,EAAE,MAAA,EAAQ,OAAA,EAAS,KAAA,EAAO,CAAA,EAAG,KAAA,EAAO,CAAC,CAAA,KAAM,MAAA,CAAO,CAAA,CAAE,kBAAkB,CAAA;AAAE,SAC1E;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAC,CAAA;AAAE,GACL;AAEF,EAAA,SAAA,CACG,OAAA,CAAQ,sBAAsB,CAAA,CAC9B,WAAA,CAAY,mCAAmC,CAAA,CAC/C,MAAA,CAAO,sBAAA,EAAwB,+CAA+C,CAAA,CAC9E,MAAA,CAAO,mBAAA,EAAqB,kCAAA,EAAoC,cAAc,CAAA,CAC9E,MAAA;AAAA,IAAO,CAAC,MAAA,EAAkB,IAAA,KACzB,SAAA,CAAU,YAAY;AACpB,MAAA,MAAM,EAAE,IAAA,EAAM,WAAA,KAAgB,MAAM,gBAAA,CAAiB,KAAK,SAAS,CAAA;AACnE,MAAA,MAAM,IAAA,GAAQ,KAAK,IAAA,IAAQ,cAAA;AAC3B,MAAA,MAAM,OAAO,MAAMA,eAAA,CAAW,kBAAkB,IAAA,EAAM,WAAA,EAAa,QAAQ,IAAI,CAAA;AAC/E,MAAA,KAAA,MAAW,CAAA,IAAK,IAAA,EAAM,OAAA,CAAQ,GAAA,CAAI,CAAA,OAAA,EAAU,CAAA,CAAE,IAAA,CAAK,KAAK,CAAA,IAAA,EAAO,CAAA,CAAE,IAAI,CAAA,CAAE,CAAA;AAAA,IACzE,CAAC,CAAA;AAAE,GACL;AAEF,EAAA,SAAA,CACG,OAAA,CAAQ,2BAA2B,CAAA,CACnC,WAAA,CAAY,wCAAwC,CAAA,CACpD,MAAA,CAAO,sBAAA,EAAwB,+CAA+C,CAAA,CAC9E,MAAA;AAAA,IAAO,CAAC,OAAA,EAAmB,IAAA,KAC1B,SAAA,CAAU,YAAY;AACpB,MAAA,MAAM,EAAE,IAAA,EAAM,WAAA,KAAgB,MAAM,gBAAA,CAAiB,KAAK,SAAS,CAAA;AACnE,MAAA,MAAMA,eAAA,CAAW,oBAAA,CAAqB,IAAA,EAAM,WAAA,EAAa,OAAO,CAAA;AAChE,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,QAAA,EAAW,OAAA,CAAQ,MAAM,CAAA,SAAA,CAAW,CAAA;AAAA,IAClD,CAAC,CAAA;AAAE,GACL;AAEF,EAAA,SAAA,CACG,OAAA,CAAQ,+BAA+B,CAAA,CACvC,WAAA,CAAY,gDAAgD,CAAA,CAC5D,MAAA,CAAO,sBAAA,EAAwB,+CAA+C,CAAA,CAC9E,MAAA;AAAA,IAAO,CAAC,IAAA,EAAc,OAAA,EAAmB,IAAA,KACxC,UAAU,YAAY;AACpB,MAAA,MAAM,EAAE,IAAA,EAAM,WAAA,KAAgB,MAAM,gBAAA,CAAiB,KAAK,SAAS,CAAA;AACnE,MAAA,MAAM,IAAA,GAAO,MAAMA,eAAA,CAAW,WAAA;AAAA,QAC5B,IAAA;AAAA,QACA,WAAA;AAAA,QACA,OAAA;AAAA,QACA;AAAA,OACF;AACA,MAAA,KAAA,MAAW,CAAA,IAAK,IAAA,EAAM,OAAA,CAAQ,GAAA,CAAI,CAAA,SAAA,EAAY,CAAA,CAAE,IAAA,CAAK,KAAK,CAAA,QAAA,EAAM,CAAA,CAAE,IAAI,CAAA,CAAE,CAAA;AAAA,IAC1E,CAAC,CAAA;AAAE,GACL;AAEF,EAAA,SAAA,CACG,OAAA,CAAQ,yCAAyC,CAAA,CACjD,WAAA,CAAY,qCAAqC,CAAA,CACjD,MAAA,CAAO,sBAAA,EAAwB,sDAAsD,CAAA,CACrF,MAAA;AAAA,IAAO,CAAC,QAAA,EAAkB,MAAA,EAAkB,IAAA,KAC3C,UAAU,YAAY;AACpB,MAAA,MAAM,EAAE,IAAA,EAAM,WAAA,KAAgB,MAAM,gBAAA,CAAiB,KAAK,SAAS,CAAA;AACnE,MAAA,MAAM,OAAO,MAAMA,eAAA,CAAW,cAAc,IAAA,EAAM,WAAA,EAAa,UAAU,MAAM,CAAA;AAC/E,MAAA,OAAA,CAAQ,IAAI,CAAA,EAAG,IAAA,CAAK,MAAM,CAAA,EAAA,EAAK,IAAA,CAAK,gBAAgB,CAAA,oBAAA,CAAsB,CAAA;AAAA,IAC5E,CAAC,CAAA;AAAE,GACL;AACJ;AC9NA,SAAS,WAAW,KAAA,EAA0C;AAC5D,EAAA,IAAI,CAAC,OAAO,OAAO,GAAA;AACnB,EAAA,IAAI,KAAA,GAAQ,IAAA,EAAM,OAAO,CAAA,EAAG,KAAK,CAAA,EAAA,CAAA;AACjC,EAAA,IAAI,KAAA,GAAQ,OAAO,IAAA,EAAM,OAAO,IAAI,KAAA,GAAQ,IAAA,EAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,GAAA,CAAA;AAC5D,EAAA,OAAO,IAAI,KAAA,IAAS,IAAA,GAAO,IAAA,CAAA,EAAO,OAAA,CAAQ,CAAC,CAAC,CAAA,GAAA,CAAA;AAC9C;AAGA,eAAe,eAAA,CACb,MACA,WAAA,EACA;AACA,EAAA,MAAM,IAAA,GAAO,MAAMI,cAAA,CAAU,aAAA,CAAc,MAAM,WAAW,CAAA;AAC5D,EAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACrB,IAAA,OAAA,CAAQ,IAAI,qBAAqB,CAAA;AACjC,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AACA,EAAA,OAAO,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,IACtB,MAAM,CAAA,EAAG,CAAA,CAAE,aAAa,SAAS,CAAA,EAAA,EAAK,EAAE,MAAM,CAAA,CAAA,CAAA;AAAA,IAC9C,OAAO,CAAA,CAAE,WAAA;AAAA,IACT,aAAa,CAAA,CAAE;AAAA,GACjB,CAAE,CAAA;AACJ;AAEO,SAAS,oBAAoBlB,QAAAA,EAAwB;AAC1D,EAAAA,QAAAA,CACG,OAAA,CAAQ,MAAM,CAAA,CACd,WAAA,CAAY,wCAAwC,CAAA,CACpD,MAAA,CAAO,sBAAA,EAAwB,+CAA+C,CAAA,CAC9E,MAAA;AAAA,IAAO,CAAC,IAAA,KACP,SAAA,CAAU,YAAY;AACpB,MAAA,MAAM,EAAE,IAAA,EAAM,WAAA,KAAgB,MAAM,gBAAA,CAAiB,KAAK,SAAS,CAAA;AACnE,MAAA,MAAM,IAAA,GAAO,MAAMkB,cAAA,CAAU,aAAA,CAAc,MAAM,WAAW,CAAA;AAE5D,MAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACrB,QAAA,OAAA,CAAQ,IAAI,qBAAqB,CAAA;AACjC,QAAA;AAAA,MACF;AAEA,MAAA,UAAA;AAAA,QACE;AAAA,UACE,EAAE,QAAQ,IAAA,EAAM,KAAA,EAAO,IAAI,KAAA,EAAO,CAAC,CAAA,KAAM,CAAA,CAAE,WAAA,EAAsB;AAAA,UACjE,EAAE,MAAA,EAAQ,MAAA,EAAQ,KAAA,EAAO,EAAA,EAAI,OAAO,CAAC,CAAA,KAAO,CAAA,CAAE,SAAA,IAAwB,SAAA,EAAU;AAAA,UAChF,EAAE,MAAA,EAAQ,QAAA,EAAU,KAAA,EAAO,EAAA,EAAI,OAAO,CAAC,CAAA,KAAO,CAAA,CAAE,MAAA,IAAqB,EAAA,EAAG;AAAA,UACxE,EAAE,MAAA,EAAQ,MAAA,EAAQ,KAAA,EAAO,EAAA,EAAI,KAAA,EAAO,CAAC,CAAA,KAAM,UAAA,CAAW,CAAA,CAAE,SAA0B,CAAA;AAAE,SACtF;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAC,CAAA;AAAE,GACL;AAEF,EAAA,MAAM,MAAMlB,QAAAA,CAAQ,OAAA,CAAQ,KAAK,CAAA,CAAE,YAAY,qBAAqB,CAAA;AAEpE,EAAA,GAAA,CACG,OAAA,CAAQ,cAAc,CAAA,CACtB,WAAA,CAAY,2DAA2D,CAAA,CACvE,MAAA;AAAA,IAAO,CAAC,GAAA,KACP,SAAA,CAAU,YAAY;AACpB,MAAA,MAAM,EAAE,IAAA,EAAM,WAAA,EAAY,GAAI,MAAM,gBAAA,EAAiB;AACrD,MAAA,IAAI,MAAA,GAAS,GAAA,IAAO,GAAA,CAAI,MAAA,GAAS,IAAI,GAAA,GAAM,KAAA,CAAA;AAC3C,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA,MAAM,OAAA,GAAU,MAAM,eAAA,CAAgB,IAAA,EAAM,WAAW,CAAA;AACvD,QAAA,MAAM,QAAA,GAAW,MAAM,cAAA,CAAe,kBAAA,EAAoB,OAAO,CAAA;AACjE,QAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AAC3B,QAAA,MAAA,GAAS,QAAA;AAAA,MACX;AACA,MAAA,MAAM,IAAA,GAAO,MAAMkB,cAAA,CAAU,YAAA,CAAa,MAAM,MAAM,CAAA;AACtD,MAAA,OAAA,CAAQ,IAAI,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,IAC3C,CAAC,CAAA;AAAE,GACL;AAEF,EAAA,GAAA,CACG,OAAA,CAAQ,iBAAiB,CAAA,CACzB,WAAA,CAAY,uDAAuD,CAAA,CACnE,MAAA;AAAA,IAAO,CAAC,GAAA,KACP,SAAA,CAAU,YAAY;AACpB,MAAA,MAAM,EAAE,IAAA,EAAM,WAAA,EAAY,GAAI,MAAM,gBAAA,EAAiB;AACrD,MAAA,IAAI,MAAA,GAAS,GAAA,IAAO,GAAA,CAAI,MAAA,GAAS,IAAI,GAAA,GAAM,KAAA,CAAA;AAC3C,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA,MAAM,OAAA,GAAU,MAAM,eAAA,CAAgB,IAAA,EAAM,WAAW,CAAA;AACvD,QAAA,MAAM,QAAA,GAAW,MAAM,cAAA,CAAe,4BAAA,EAA8B,OAAO,CAAA;AAC3E,QAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AAC3B,QAAA,MAAA,GAAS,QAAA;AAAA,MACX;AACA,MAAA,MAAMA,cAAA,CAAU,eAAA,CAAgB,IAAA,EAAM,MAAM,CAAA;AAC5C,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,QAAA,EAAW,MAAA,CAAO,MAAM,CAAA,aAAA,CAAe,CAAA;AAAA,IACrD,CAAC,CAAA;AAAE,GACL;AAEF,EAAA,GAAA,CACG,OAAA,CAAQ,eAAe,CAAA,CACvB,WAAA,CAAY,sDAAsD,CAAA,CAClE,MAAA;AAAA,IAAO,CAAC,IAAA,KACP,SAAA,CAAU,YAAY;AACpB,MAAA,IAAI,IAAA,EAAM;AACR,QAAA,MAAM,MAAA,GAAS,YAAA,CAEb,IAAA,EAAM,CAAA,8DAAA,CAAkE,CAAA;AAC1E,QAAA,MAAM,OAAO,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,GAAI,SAAS,MAAA,CAAO,SAAA;AAErD,QAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,gBAAA,EAAiB;AACxC,QAAA,MAAM,IAAA,GAAO,MAAMA,cAAA,CAAU,eAAA,CAAgB,MAAM,IAAI,CAAA;AACvD,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,QAAA,EAAW,IAAA,CAAK,MAAM,CAAA,aAAA,CAAe,CAAA;AAAA,MACnD,CAAA,MAAO;AAEL,QAAA,MAAM,EAAE,IAAA,EAAM,WAAA,EAAY,GAAI,MAAM,gBAAA,EAAiB;AACrD,QAAA,MAAM,OAAA,GAAU,MAAM,eAAA,CAAgB,IAAA,EAAM,WAAW,CAAA;AACvD,QAAA,MAAM,KAAA,GAAQ,MAAM,YAAA,CAAa,2BAAA,EAA6B,OAAO,CAAA;AAErE,QAAA,MAAM,KAAA,GAAQ,MAAM,YAAA,CAAa,iBAAA,EAAmB;AAAA,UAClD,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,OAAA,EAAQ;AAAA,UAChC,EAAE,IAAA,EAAM,QAAA,EAAU,KAAA,EAAO,QAAA,EAAS;AAAA,UAClC,EAAE,IAAA,EAAM,QAAA,EAAU,KAAA,EAAO,QAAA,EAAS;AAAA,UAClC,EAAE,IAAA,EAAM,UAAA,EAAY,KAAA,EAAO,UAAA,EAAW;AAAA,UACtC,EAAE,IAAA,EAAM,MAAA,EAAQ,KAAA,EAAO,MAAA;AAAO,SAC/B,CAAA;AAED,QAAA,IAAI,KAAA;AACJ,QAAA,IAAI,UAAU,QAAA,EAAU;AACtB,UAAA,KAAA,GAAQ,MAAM,aAAa,SAAA,EAAW;AAAA,YACpC,EAAE,IAAA,EAAM,KAAA,EAAO,KAAA,EAAO,IAAA,EAAK;AAAA,YAC3B,EAAE,IAAA,EAAM,IAAA,EAAM,KAAA,EAAO,KAAA;AAAM,WAC5B,CAAA;AAAA,QACH,CAAA,MAAA,IAAW,UAAU,MAAA,EAAQ;AAC3B,UAAA,KAAA,GAAS,MAAM,WAAA,CAAY,mBAAA,EAAqB,KAAK,CAAA,IAAM,IAAA;AAAA,QAC7D,CAAA,MAAO;AACL,UAAA,KAAA,GAAQ,MAAM,WAAA,CAAY,CAAA,EAAG,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,CAAE,WAAA,EAAY,GAAI,KAAA,CAAM,KAAA,CAAM,CAAC,CAAC,CAAA,CAAE,CAAA;AAAA,QAC/E;AAEA,QAAA,MAAM,IAAA,GAAO,MAAMA,cAAA,CAAU,eAAA,CAAgB,IAAA,EAAM;AAAA,UACjD,EAAE,WAAA,EAAa,KAAA,EAAO,CAAC,KAAK,GAAG,KAAA;AAAM,SACtC,CAAA;AACD,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,QAAA,EAAW,IAAA,CAAK,MAAM,CAAA,aAAA,CAAe,CAAA;AAAA,MACnD;AAAA,IACF,CAAC,CAAA;AAAE,GACL;AAEF,EAAA,GAAA,CACG,OAAA,CAAQ,sBAAsB,CAAA,CAC9B,WAAA,CAAY,4BAA4B,CAAA,CACxC,MAAA,CAAO,sBAAA,EAAwB,+CAA+C,CAAA,CAC9E,MAAA,CAAO,UAAA,EAAY,uBAAA,EAAyB,KAAK,CAAA,CACjD,MAAA;AAAA,IAAO,CAAC,IAAA,EAAgB,IAAA,KACvB,SAAA,CAAU,YAAY;AACpB,MAAA,MAAM,EAAE,IAAA,EAAM,WAAA,KAAgB,MAAM,gBAAA,CAAiB,KAAK,SAAS,CAAA;AACnE,MAAA,MAAM,IAAA,GAAO,MAAMA,cAAA,CAAU,SAAA,CAAU,MAAM,IAAA,EAAM,WAAA,EAAa,IAAA,CAAK,MAAA,IAAU,KAAK,CAAA;AACpF,MAAA,OAAA,CAAQ,IAAI,CAAA,UAAA,EAAa,IAAA,CAAK,YAAY,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AACtD,MAAA,IAAI,IAAA,CAAK,UAAA,IAAc,IAAA,CAAK,UAAA,CAAW,SAAS,CAAA,EAAG;AACjD,QAAA,OAAA,CAAQ,IAAI,CAAA,YAAA,EAAe,IAAA,CAAK,WAAW,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,MACzD;AAAA,IACF,CAAC,CAAA;AAAE,GACL;AAEF,EAAA,GAAA,CACG,OAAA,CAAQ,yBAAyB,CAAA,CACjC,WAAA,CAAY,8DAA8D,CAAA,CAC1E,MAAA;AAAA,IAAO,CAAC,KAAA,EAAgB,KAAA,KACvB,SAAA,CAAU,YAAY;AACpB,MAAA,MAAM,EAAE,MAAM,WAAA,EAAa,kBAAA,EAAoB,aAAa,MAAA,EAAO,GACjE,MAAM,gBAAA,EAAiB;AAGzB,MAAA,IAAI,CAAC,KAAA,EAAO;AACV,QAAA,MAAM,OAAA,GAAU,MAAM,eAAA,CAAgB,IAAA,EAAM,WAAW,CAAA;AACvD,QAAA,KAAA,GAAQ,MAAM,YAAA,CAAa,iBAAA,EAAmB,OAAO,CAAA;AAAA,MACvD;AAGA,MAAA,MAAM,WAAA,GAAc,CAAC,QAAA,EAAU,UAAA,EAAY,OAAO,CAAA;AAClD,MAAA,IAAI,CAAC,KAAA,EAAO;AACV,QAAA,KAAA,GAAQ,MAAM,aAAa,eAAA,EAAiB;AAAA,UAC1C,EAAE,IAAA,EAAM,mBAAA,EAAqB,KAAA,EAAO,OAAA,EAAQ;AAAA,UAC5C,EAAE,IAAA,EAAM,UAAA,EAAY,KAAA,EAAO,UAAA,EAAW;AAAA,UACtC,EAAE,IAAA,EAAM,cAAA,EAAgB,KAAA,EAAO,QAAA;AAAS,SACzC,CAAA;AAAA,MACH,CAAA,MAAA,IAAW,CAAC,WAAA,CAAY,QAAA,CAAS,KAAK,CAAA,EAAG;AACvC,QAAA,OAAA,CAAQ,KAAA,CAAM,kBAAkB,KAAK,CAAA,kBAAA,EAAqB,YAAY,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAClF,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AAEA,MAAA,MAAM,IAAA,GAAO,MAAMA,cAAA,CAAU,gBAAA;AAAA,QAC3B,MAAA,CAAO,OAAA;AAAA,QACP,WAAA;AAAA,QACA,kBAAA;AAAA,QACA,KAAA;AAAA,QACA;AAAA,OACF;AACA,MAAA,OAAA,CAAQ,IAAI,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,IAC3C,CAAC,CAAA;AAAE,GACL;AACJ;ACjMO,SAAS,sBAAsBlB,QAAAA,EAAwB;AAC5D,EAAAA,QAAAA,CACG,OAAA,CAAQ,mBAAmB,CAAA,CAC3B,YAAY,0CAA0C,CAAA,CACtD,MAAA,CAAO,sBAAA,EAAwB,+CAA+C,CAAA,CAC9E,MAAA,CAAO,aAAA,EAAe,iDAAiD,CAAA,CACvE,MAAA;AAAA,IAAO,CAAC,KAAA,EAAiB,IAAA,KACxB,SAAA,CAAU,YAAY;AAEpB,MAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,QAAA,IAAI,CAACmB,mBAAA,CAAG,UAAA,CAAW,CAAC,CAAA,EAAG;AACrB,UAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,gBAAA,EAAmB,CAAC,CAAA,CAAE,CAAA;AACpC,UAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,QAChB;AAAA,MACF;AAEA,MAAA,MAAM,EAAE,MAAA,EAAQ,WAAA,EAAa,kBAAA,EAAoB,WAAA,KAAgB,MAAM,gBAAA;AAAA,QACrE,IAAA,CAAK;AAAA,OACP;AAGA,MAAA,MAAM,YAAA,uBAAmB,GAAA,EAAoB;AAE7C,MAAA,KAAA,MAAW,YAAY,KAAA,EAAO;AAC5B,QAAA,MAAM,UAAA,GAAaA,mBAAA,CAAG,YAAA,CAAa,QAAQ,CAAA;AAC3C,QAAA,MAAM,QAAA,GAAWC,sBAAA,CAAK,QAAA,CAAS,QAAQ,CAAA;AAEvC,QAAA,MAAM,MAAA,GAAS,MAAMF,cAAAA,CAAU,UAAA;AAAA,UAC7B,MAAA,CAAO,OAAA;AAAA,UACP,WAAA;AAAA,UACA,kBAAA;AAAA,UACA,WAAA;AAAA,UACA,IAAI,IAAA,CAAK,CAAC,UAAU,CAAC,CAAA;AAAA,UACrB;AAAA,SACF;AAEA,QAAA,OAAA,CAAQ,GAAA,CAAI,aAAa,QAAQ,CAAA,EAAA,EAAK,OAAO,WAAA,CAAY,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAG,CAAA;AACtE,QAAA,IAAI,MAAA,CAAO,UAAA,IAAc,MAAA,CAAO,UAAA,CAAW,SAAS,CAAA,EAAG;AACrD,UAAA,OAAA,CAAQ,IAAI,CAAA,cAAA,EAAiB,MAAA,CAAO,WAAW,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,QAC7D;AAEA,QAAA,KAAA,MAAW,MAAM,MAAA,CAAO,WAAA,EAAa,YAAA,CAAa,GAAA,CAAI,IAAI,QAAQ,CAAA;AAAA,MACpE;AAGA,MAAA,IAAI,IAAA,CAAK,KAAA,IAAS,YAAA,CAAa,IAAA,GAAO,CAAA,EAAG;AACvC,QAAA,MAAM,OAAA,GAAU,IAAI,GAAA,CAAI,YAAA,CAAa,MAAM,CAAA;AAC3C,QAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,SAAA,EAAc,OAAA,CAAQ,IAAI,CAAA,eAAA,CAAiB,CAAA;AAEvD,QAAA,MAAM,IAAA,GAAO,MAAMG,qBAAA,CAAiB;AAAA,UAClC,SAAS,MAAA,CAAO,OAAA;AAAA,UAChB,WAAA;AAAA,UACA,SAAA,EAAW,CAAC,GAAA,KAAQ;AAClB,YAAA,IAAIC,iBAAA,CAAmC,GAAA,EAAK,aAAa,CAAA,EAAG;AAC1D,cAAA,IAAI,CAAC,OAAA,CAAQ,GAAA,CAAI,GAAA,CAAI,UAAU,CAAA,EAAG;AAClC,cAAA,OAAA,CAAQ,GAAA;AAAA,gBACN,CAAA,EAAA,EAAK,YAAA,CAAa,GAAA,CAAI,GAAA,CAAI,UAAU,CAAA,IAAK,GAAA,CAAI,SAAS,CAAA,EAAA,EAAK,GAAA,CAAI,MAAM,CAAA,EAAA,EAAK,IAAI,QAAQ,CAAA,EAAA;AAAA,eACxF;AACA,cAAA,IAAI,GAAA,CAAI,MAAA,KAAW,WAAA,IAAe,GAAA,CAAI,WAAW,QAAA,EAAU;AACzD,gBAAA,OAAA,CAAQ,MAAA,CAAO,IAAI,UAAU,CAAA;AAC7B,gBAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,kBAAA,OAAA,CAAQ,IAAI,4BAA4B,CAAA;AACxC,kBAAA,IAAA,CAAK,KAAA,EAAM;AAAA,gBACb;AAAA,cACF;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA,SAAS,MAAM;AACb,YAAA,IAAI,QAAQ,IAAA,GAAO,CAAA;AACjB,cAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,mBAAA,EAAwB,OAAA,CAAQ,IAAI,CAAA,8BAAA,CAAgC,CAAA;AAAA,UACpF;AAAA,SACD,CAAA;AAAA,MACH;AAAA,IACF,CAAC,CAAA;AAAE,GACL;AACJ;ACzEO,SAAS,wBAAwBtB,QAAAA,EAAwB;AAC9D,EAAAA,QAAAA,CACG,OAAA,CAAQ,mBAAmB,CAAA,CAC3B,YAAY,yDAAyD,CAAA,CACrE,MAAA,CAAO,qBAAA,EAAuB,kBAAkB,CAAA,CAChD,MAAA,CAAO,sBAAA,EAAwB,+CAA+C,CAAA,CAC9E,MAAA;AAAA,IAAO,CAAC,KAAA,EAA2B,IAAA,KAClC,SAAA,CAAU,YAAY;AACpB,MAAA,MAAM,EAAE,IAAA,EAAM,MAAA,EAAQ,WAAA,EAAa,kBAAA,EAAoB,aAAY,GACjE,MAAM,gBAAA,CAAiB,IAAA,CAAK,SAAS,CAAA;AAGvC,MAAA,IAAI,CAAC,KAAA,EAAO;AACV,QAAA,MAAM,IAAA,GAAO,MAAMkB,cAAAA,CAAU,aAAA,CAAc,MAAM,WAAW,CAAA;AAC5D,QAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACrB,UAAA,OAAA,CAAQ,IAAI,qBAAqB,CAAA;AACjC,UAAA;AAAA,QACF;AACA,QAAA,MAAM,OAAA,GAAU,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,UAC/B,MAAM,CAAA,EAAG,CAAA,CAAE,aAAa,SAAS,CAAA,EAAA,EAAK,EAAE,MAAM,CAAA,CAAA,CAAA;AAAA,UAC9C,OAAO,CAAA,CAAE,WAAA;AAAA,UACT,aAAa,CAAA,CAAE;AAAA,SACjB,CAAE,CAAA;AACF,QAAA,KAAA,GAAQ,MAAM,YAAA,CAAa,6BAAA,EAA+B,OAAO,CAAA;AAAA,MACnE;AAEA,MAAA,MAAM,GAAA,GAAM,MAAMA,cAAAA,CAAU,gBAAA;AAAA,QAC1B,MAAA,CAAO,OAAA;AAAA,QACP,WAAA;AAAA,QACA,kBAAA;AAAA,QACA;AAAA,OACF;AAEA,MAAA,IAAI,QAAA,GAAW,GAAG,KAAK,CAAA,CAAA;AACvB,MAAA,MAAM,WAAA,GAAc,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,qBAAqB,CAAA;AACzD,MAAA,IAAI,WAAA,EAAa;AACf,QAAA,MAAM,KAAA,GAAQ,WAAA,CAAY,KAAA,CAAM,sCAAsC,CAAA;AACtE,QAAA,IAAI,KAAA,aAAkB,kBAAA,CAAmB,KAAA,CAAM,CAAC,CAAA,CAAE,OAAA,CAAQ,IAAA,EAAM,EAAE,CAAC,CAAA;AAAA,MACrE;AAEA,MAAA,MAAM,UAAA,GAAa,KAAK,MAAA,IAAUE,sBAAAA,CAAK,KAAK,OAAA,CAAQ,GAAA,IAAO,QAAQ,CAAA;AACnE,MAAA,MAAM,SAAS,MAAA,CAAO,IAAA,CAAK,MAAM,GAAA,CAAI,aAAa,CAAA;AAClD,MAAAD,mBAAAA,CAAG,aAAA,CAAc,UAAA,EAAY,MAAM,CAAA;AACnC,MAAA,OAAA,CAAQ,GAAA;AAAA,QACN,CAAA,YAAA,EAAeC,sBAAAA,CAAK,QAAA,CAAS,UAAU,CAAC,CAAA,EAAA,EAAA,CAAM,MAAA,CAAO,MAAA,IAAU,IAAA,GAAO,IAAA,CAAA,EAAO,OAAA,CAAQ,CAAC,CAAC,CAAA,IAAA;AAAA,OACzF;AAAA,IACF,CAAC,CAAA;AAAE,GACL;AACJ;AC9CO,SAAS,mBAAmBpB,QAAAA,EAAwB;AACzD,EAAAA,QAAAA,CACG,QAAQ,gBAAgB,CAAA,CACxB,YAAY,kCAAkC,CAAA,CAC9C,MAAA,CAAO,sBAAA,EAAwB,+CAA+C,CAAA,CAC9E,OAAO,mBAAA,EAAqB,qCAAqC,EACjE,MAAA,CAAO,WAAA,EAAa,oDAAoD,CAAA,CACxE,MAAA,CAAO,eAAA,EAAiB,iCAAiC,CAAA,CACzD,MAAA;AAAA,IACC,CACE,QAAA,EACA,IAAA,KAEA,SAAA,CAAU,YAAY;AACpB,MAAA,MAAM,EAAE,IAAA,EAAM,WAAA,EAAa,kBAAA,EAAoB,WAAA,EAAa,QAAO,GACjE,MAAM,gBAAA,CAAiB,IAAA,CAAK,SAAS,CAAA;AAGvC,MAAA,MAAM,UAAU,cAAA,EAAe;AAG/B,MAAA,IAAI,KAAK,GAAA,EAAK;AACZ,QAAA,gBAAA,EAAiB;AACjB,QAAA,OAAA,CAAQ,gBAAA,GAAmB,IAAA;AAAA,MAC7B;AAGA,MAAA,MAAM,IAAA,GAAO,MAAMkB,cAAAA,CAAU,aAAA,CAAc,MAAM,WAAW,CAAA;AAC5D,MAAA,MAAM,SAAS,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,WAAqB,CAAA;AAGtD,MAAA,MAAM,GAAA,GAAM,MAAMK,cAAA,CAAU,cAAA,CAAe;AAAA,QACzC,SAAS,MAAA,CAAO,OAAA;AAAA,QAChB,WAAA;AAAA,QACA,kBAAA;AAAA,QACA,WAAA;AAAA,QACA,QAAA;AAAA,QACA,MAAA;AAAA,QACA,oBAAoB,OAAA,CAAQ,gBAAA;AAAA,QAC5B,aAAa,IAAA,CAAK;AAAA,OACnB,CAAA;AAED,MAAA,MAAM,EAAE,qBAAA,EAAsB,GAAI,MAAMC,eAAU,GAAA,EAAK;AAAA,QACrD,SAAS,CAAC,OAAA,KAAY,OAAA,CAAQ,MAAA,CAAO,MAAM,OAAO,CAAA;AAAA,QAClD,WAAA,EAAa,CAAC,IAAA,KAAS;AACrB,UAAA,IAAI,KAAK,OAAA,EAAS;AAChB,YAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,IAAS,IAAA,CAAK,MAAA,IAAU,EAAA;AAC3C,YAAA,OAAA,CAAQ,KAAA,CAAM;AAAA,QAAA,EAAa,KAAK,CAAA,CAAE,CAAA;AAAA,UACpC;AAAA,QACF,CAAA;AAAA,QACA,OAAA,EAAS,CAAC,OAAA,KAAY,OAAA,CAAQ,KAAA,CAAM;AAAA,OAAA,EAAY,OAAO,CAAA,CAAE;AAAA,OAC1D,CAAA;AAED,MAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,IAAI,CAAA;AAGzB,MAAA,IAAI,qBAAA,EAAuB;AACzB,QAAA,iBAAA,CAAkB,EAAE,gBAAA,EAAkB,qBAAA,EAAuB,CAAA;AAAA,MAC/D;AAAA,IACF,CAAC,CAAA;AAAE,GACP;AACJ;AC9DA,SAAS,SAAA,GAAoB;AAC3B,EAAA,OAAA,iBAAO,IAAI,MAAK,EAAE,kBAAA,CAAmB,SAAS,EAAE,MAAA,EAAQ,OAAO,CAAA;AACjE;AAEO,SAAS,qBAAqBxB,QAAAA,EAAwB;AAC3D,EAAAA,QAAAA,CACG,OAAA,CAAQ,OAAO,CAAA,CACf,WAAA,CAAY,uCAAuC,CAAA,CACnD,MAAA,CAAO,sBAAA,EAAwB,+CAA+C,CAAA,CAC9E,MAAA;AAAA,IAAO,CAAC,IAAA,KACP,SAAA,CAAU,YAAY;AACpB,MAAA,MAAM,EAAE,QAAQ,WAAA,EAAa,WAAA,KAAgB,MAAM,gBAAA,CAAiB,KAAK,SAAS,CAAA;AAElF,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,mBAAA,EAAsB,WAAW,CAAA,oBAAA,CAAsB,CAAA;AAEnE,MAAA,MAAMqB,qBAAAA,CAAiB;AAAA,QACrB,SAAS,MAAA,CAAO,OAAA;AAAA,QAChB,WAAA;AAAA,QACA,SAAA,EAAW,CAAC,GAAA,KAAQ;AAClB,UAAA,IAAIC,iBAAAA,CAAmC,GAAA,EAAK,aAAa,CAAA,EAAG;AAC1D,YAAA,OAAA,CAAQ,GAAA;AAAA,cACN,CAAA,CAAA,EAAI,SAAA,EAAW,CAAA,eAAA,EAAkB,GAAA,CAAI,SAAS,CAAA,GAAA,EAAM,GAAA,CAAI,MAAM,CAAA,EAAA,EAAK,GAAA,CAAI,QAAQ,CAAA,EAAA;AAAA,aACjF;AAAA,UACF,CAAA,MAAA,IAAWA,iBAAAA,CAAsC,GAAA,EAAK,gBAAgB,CAAA,EAAG;AACvE,YAAA,OAAA,CAAQ,GAAA;AAAA,cACN,CAAA,CAAA,EAAI,WAAW,CAAA,kBAAA,EAAqB,IAAI,UAAU,CAAA,GAAA,EAAM,GAAA,CAAI,WAAA,CAAY,MAAM,CAAA,KAAA;AAAA,aAChF;AAAA,UACF,CAAA,MAAA,IAAWA,iBAAAA,CAA8B,GAAA,EAAK,OAAO,CAAA,EAAG;AACtD,YAAA,OAAA,CAAQ,IAAI,CAAA,CAAA,EAAI,SAAA,EAAW,CAAA,SAAA,EAAY,GAAA,CAAI,OAAO,CAAA,CAAE,CAAA;AAAA,UACtD,CAAA,MAAO;AACL,YAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,CAAA,EAAI,SAAA,EAAW,CAAA,EAAA,EAAK,GAAA,CAAI,IAAI,CAAA,EAAA,EAAK,IAAA,CAAK,SAAA,CAAU,GAAG,CAAC,CAAA,CAAE,CAAA;AAAA,UACpE;AAAA,QACF,CAAA;AAAA,QACA,OAAA,EAAS,CAAC,IAAA,EAAM,MAAA,KAAW;AACzB,UAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,wBAAA,EAA6B,IAAI,CAAA,EAAG,MAAA,GAAS,IAAA,GAAO,MAAA,GAAS,EAAE,CAAA,CAAA,CAAG,CAAA;AAAA,QAChF;AAAA,OACD,CAAA;AAAA,IACH,CAAC,CAAA;AAAE,GACL;AACJ;AC1CO,SAAS,wBAAwBtB,QAAAA,EAAwB;AAC9D,EAAA,MAAM,WAAWA,QAAAA,CAAQ,OAAA,CAAQ,UAAU,CAAA,CAAE,YAAY,iBAAiB,CAAA;AAE1E,EAAA,QAAA,CACG,OAAA,CAAQ,MAAM,CAAA,CACd,WAAA,CAAY,mBAAmB,CAAA,CAC/B,MAAA;AAAA,IACC,UAAU,YAAY;AACpB,MAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,WAAA,EAAY;AACnC,MAAA,MAAM,IAAA,GAAO,MAAMyB,aAAA,CAAW,YAAA,CAAa,IAAI,CAAA;AAE/C,MAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACrB,QAAA,OAAA,CAAQ,IAAI,oBAAoB,CAAA;AAChC,QAAA;AAAA,MACF;AAGA,MAAA,UAAA;AAAA,QACE;AAAA,UACE,EAAE,QAAQ,IAAA,EAAM,KAAA,EAAO,IAAI,KAAA,EAAO,CAAC,CAAA,KAAM,CAAA,CAAE,WAAA,EAAsB;AAAA,UACjE;AAAA,YACE,MAAA,EAAQ,MAAA;AAAA,YACR,KAAA,EAAO,EAAA;AAAA,YACP,KAAA,EAAO,CAAC,CAAA,KAAM;AACZ,cAAA,MAAM,IAAI,CAAA,CAAE,IAAA;AACZ,cAAA,OAAO,CAAA,GAAI,CAAC,CAAA,CAAE,UAAA,EAAY,CAAA,CAAE,WAAW,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA,GAAI,EAAA;AAAA,YACvE;AAAA,WACF;AAAA,UACA,EAAE,QAAQ,OAAA,EAAS,KAAA,EAAO,IAAI,KAAA,EAAO,CAAC,CAAA,KAAM,CAAA,CAAE,KAAA,EAAgB;AAAA,UAC9D,EAAE,QAAQ,QAAA,EAAU,KAAA,EAAO,IAAI,KAAA,EAAO,CAAC,CAAA,KAAM,CAAA,CAAE,MAAA;AAAiB,SAClE;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAC;AAAA,GACH;AAEF,EAAA,QAAA,CACG,OAAA,CAAQ,iBAAiB,CAAA,CACzB,WAAA,CAAY,mDAAmD,CAAA,CAC/D,MAAA;AAAA,IAAO,CAAC,MAAA,KACP,SAAA,CAAU,YAAY;AACpB,MAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,WAAA,EAAY;AACnC,MAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG;AAClC,QAAA,MAAMxB,MAAAA,GAAQ,MAAM,WAAA,CAAY,oCAAoC,CAAA;AACpE,QAAA,MAAA,GAASA,MAAAA,CACN,KAAA,CAAM,GAAG,CAAA,CACT,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,EAAM,CAAA,CACnB,MAAA,CAAO,OAAO,CAAA;AACjB,QAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AAAA,MAC3B;AACA,MAAA,MAAM,IAAA,GAAO,MAAMwB,aAAA,CAAW,WAAA,CAAY,MAAM,MAAM,CAAA;AACtD,MAAA,KAAA,MAAW,KAAK,IAAA,EAAM;AACpB,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,OAAA,EAAU,CAAA,CAAE,KAAK,CAAA,EAAA,EAAK,EAAE,WAAW,CAAA,SAAA,EAAO,CAAA,CAAE,MAAM,CAAA,CAAE,CAAA;AAAA,MAClE;AAAA,IACF,CAAC,CAAA;AAAE,GACL;AAEF,EAAA,QAAA,CACG,OAAA,CAAQ,iBAAiB,CAAA,CACzB,WAAA,CAAY,sDAAsD,CAAA,CAClE,MAAA;AAAA,IAAO,CAAC,GAAA,KACP,SAAA,CAAU,YAAY;AACpB,MAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,WAAA,EAAY;AACnC,MAAA,IAAI,UAAA,GAAa,GAAA,IAAO,GAAA,CAAI,MAAA,GAAS,IAAI,GAAA,GAAM,KAAA,CAAA;AAC/C,MAAA,IAAI,CAAC,UAAA,EAAY;AACf,QAAA,MAAM,IAAA,GAAO,MAAMA,aAAA,CAAW,YAAA,CAAa,IAAI,CAAA;AAC/C,QAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACrB,UAAA,OAAA,CAAQ,IAAI,oBAAoB,CAAA;AAChC,UAAA;AAAA,QACF;AAEA,QAAA,UAAA,GAAa,MAAM,cAAA;AAAA,UACjB,2BAAA;AAAA,UACA,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,KAAM;AACd,YAAA,MAAM,IAAI,CAAA,CAAE,IAAA;AACZ,YAAA,MAAM,IAAA,GAAO,CAAA,GAAI,CAAC,CAAA,CAAE,UAAA,EAAY,CAAA,CAAE,WAAW,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA,GAAI,EAAA;AAC3E,YAAA,OAAO;AAAA,cACL,IAAA,EAAM,OAAO,CAAA,EAAG,IAAI,KAAK,CAAA,CAAE,KAAK,MAAO,CAAA,CAAE,KAAA;AAAA,cACzC,OAAO,CAAA,CAAE;AAAA,aACX;AAAA,UACF,CAAC;AAAA,SACH;AACA,QAAA,IAAI,UAAA,CAAW,WAAW,CAAA,EAAG;AAAA,MAC/B;AACA,MAAA,MAAMA,aAAA,CAAW,cAAA,CAAe,IAAA,EAAM,UAAU,CAAA;AAChD,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,QAAA,EAAW,UAAA,CAAW,MAAM,CAAA,YAAA,CAAc,CAAA;AAAA,IACxD,CAAC,CAAA;AAAE,GACL;AAGF,EAAA,QAAA,CAAS,OAAO,YAAY;AAC1B,IAAA,MAAM,SAAS,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,KAAM,EAAE,IAAA,EAAK,KAAM,MAAM,CAAA,CAAG,WAAW,EAAC,EAAG,EAAE,IAAA,EAAM,QAAQ,CAAA;AAAA,EAC3F,CAAC,CAAA;AACH;AC5FO,SAAS,kBAAkBzB,QAAAA,EAAwB;AACxD,EAAA,MAAM,KAAKA,QAAAA,CAAQ,OAAA,CAAQ,IAAI,CAAA,CAAE,YAAY,iBAAiB,CAAA;AAE9D,EAAA,EAAA,CAAG,OAAA,CAAQ,MAAM,CAAA,CACd,WAAA,CAAY,gCAAgC,CAAA,CAC5C,MAAA;AAAA,IACC,UAAU,YAAY;AACpB,MAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,WAAA,EAAY;AACnC,MAAA,MAAM,IAAA,GAAO,MAAM0B,OAAA,CAAM,OAAA,CAAQ,IAAI,CAAA;AAErC,MAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACrB,QAAA,OAAA,CAAQ,IAAI,oBAAoB,CAAA;AAChC,QAAA;AAAA,MACF;AAGA,MAAA,UAAA;AAAA,QACE;AAAA,UACE,EAAE,QAAQ,IAAA,EAAM,KAAA,EAAO,IAAI,KAAA,EAAO,CAAC,CAAA,KAAM,CAAA,CAAE,WAAA,EAAsB;AAAA,UACjE,EAAE,QAAQ,MAAA,EAAQ,KAAA,EAAO,IAAI,KAAA,EAAO,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,EAAe;AAAA,UAC5D;AAAA,YACE,MAAA,EAAQ,MAAA;AAAA,YACR,KAAA,EAAO,EAAA;AAAA,YACP,KAAA,EAAO,CAAC,CAAA,KAAM;AACZ,cAAA,MAAM,IAAI,CAAA,CAAE,MAAA;AACZ,cAAA,IAAI,CAAC,GAAG,OAAO,EAAA;AACf,cAAA,MAAM,IAAA,GAAO,CAAC,CAAA,CAAE,UAAA,EAAY,CAAA,CAAE,WAAW,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AACnE,cAAA,OAAO,IAAA,IAAQ,EAAE,KAAA,IAAS,EAAA;AAAA,YAC5B;AAAA,WACF;AAAA,UACA,EAAE,MAAA,EAAQ,MAAA,EAAQ,KAAA,EAAO,CAAA,EAAG,KAAA,EAAO,CAAC,CAAA,KAAO,CAAA,CAAE,IAAA,GAAO,KAAA,GAAQ,IAAA,EAAM;AAAA,UAClE,EAAE,MAAA,EAAQ,SAAA,EAAW,KAAA,EAAO,EAAA,EAAI,OAAO,CAAC,CAAA,KAAO,CAAA,CAAE,OAAA,IAAsB,EAAA;AAAG,SAC5E;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAC;AAAA,GACH;AAEF,EAAA,EAAA,CAAG,OAAA,CAAQ,4BAA4B,CAAA,CACpC,WAAA,CAAY,2EAA2E,CAAA,CACvF,MAAA;AAAA,IAAO,CAAC,SAAA,EAAoB,OAAA,KAC3B,SAAA,CAAU,YAAY;AACpB,MAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,WAAA,EAAY;AAGnC,MAAA,IAAI,CAAC,SAAA,EAAW;AACd,QAAA,MAAM,QAAA,GAAW,MAAMD,aAAAA,CAAW,YAAA,CAAa,IAAI,CAAA;AACnD,QAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,UAAA,OAAA,CAAQ,MAAM,kEAAkE,CAAA;AAChF,UAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,QAChB;AAEA,QAAA,SAAA,GAAY,MAAM,YAAA;AAAA,UAChB,SAAA;AAAA,UACA,QAAA,CAAS,GAAA,CAAI,CAAC,CAAA,KAAM;AAClB,YAAA,MAAM,IAAI,CAAA,CAAE,IAAA;AACZ,YAAA,MAAM,IAAA,GAAO,CAAA,GAAI,CAAC,CAAA,CAAE,UAAA,EAAY,CAAA,CAAE,WAAW,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA,GAAI,EAAA;AAC3E,YAAA,OAAO;AAAA,cACL,IAAA,EAAM,OAAO,CAAA,EAAG,IAAI,KAAK,CAAA,CAAE,KAAK,MAAO,CAAA,CAAE,KAAA;AAAA,cACzC,KAAA,EAAO,CAAA,EAAG,WAAA,IAAgB,CAAA,CAAE,WAAA;AAAA,cAC5B,aAAa,CAAA,CAAE;AAAA,aACjB;AAAA,UACF,CAAC;AAAA,SACH;AAAA,MACF;AAGA,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,OAAA,GAAU,MAAM,YAAY,SAAS,CAAA;AAAA,MACvC;AAGA,MAAA,IAAI,cAAA,GAAiB,SAAA;AACrB,MAAA,IAAI,SAAA,CAAU,QAAA,CAAS,GAAG,CAAA,EAAG;AAC3B,QAAA,MAAM,QAAA,GAAW,MAAMA,aAAAA,CAAW,YAAA,CAAa,IAAI,CAAA;AAEnD,QAAA,MAAM,QAAQ,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,UAAU,SAAS,CAAA;AACxD,QAAA,IAAI,CAAC,KAAA,EAAO;AACV,UAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,6BAAA,EAAgC,SAAS,CAAA,CAAE,CAAA;AACzD,UAAA,OAAA,CAAQ,KAAA,CAAM,uCAAuC,SAAS,CAAA;AAC9D,UAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,QAChB;AACA,QAAA,cAAA,GAAkB,KAAA,CAAM,IAAA,EAAsB,WAAA,IAAgB,KAAA,CAAM,WAAA;AAAA,MACtE;AAEA,MAAA,MAAM,IAAA,GAAO,MAAMC,OAAA,CAAM,MAAA,CAAO,IAAA,EAAM,CAAC,EAAE,gBAAA,EAAkB,cAAA,EAAgB,OAAA,EAAS,CAAC,CAAA;AACrF,MAAA,KAAA,MAAW,KAAK,IAAA,EAAM;AACpB,QAAA,OAAA,CAAQ,GAAA,CAAI,SAAS,CAAA,CAAE,WAAW,WAAM,CAAA,CAAE,SAAA,CAAU,KAAK,CAAA,CAAE,CAAA;AAAA,MAC7D;AAAA,IACF,CAAC,CAAA;AAAE,GACL;AAEF,EAAA,EAAA,CAAG,OAAA,CAAQ,eAAe,CAAA,CACvB,WAAA,CAAY,4DAA4D,CAAA,CACxE,MAAA;AAAA,IAAO,CAAC,GAAA,KACP,SAAA,CAAU,YAAY;AACpB,MAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,WAAA,EAAY;AACnC,MAAA,IAAI,MAAA,GAAS,GAAA,IAAO,GAAA,CAAI,MAAA,GAAS,IAAI,GAAA,GAAM,KAAA,CAAA;AAC3C,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA,MAAMC,KAAAA,GAAO,MAAMD,OAAA,CAAM,OAAA,CAAQ,IAAI,CAAA;AAErC,QAAA,MAAM,SAASC,KAAAA,CAAK,MAAA,CAAO,CAAC,CAAA,KAAM,CAAC,EAAE,IAAI,CAAA;AACzC,QAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,UAAA,OAAA,CAAQ,IAAI,qBAAqB,CAAA;AACjC,UAAA;AAAA,QACF;AACA,QAAA,MAAA,GAAS,MAAM,cAAA;AAAA,UACb,iCAAA;AAAA,UACA,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,KAAM;AAChB,YAAA,MAAM,IAAI,CAAA,CAAE,MAAA;AACZ,YAAA,MAAM,OAAO,CAAA,GACT,CAAC,CAAA,CAAE,UAAA,EAAY,EAAE,WAAW,CAAA,CAAE,MAAA,CAAO,OAAO,EAAE,IAAA,CAAK,GAAG,CAAA,IAAK,CAAA,CAAE,SAAS,EAAA,GACtE,EAAA;AACJ,YAAA,OAAO;AAAA,cACL,IAAA,EAAM,CAAA,EAAG,IAAI,CAAA,EAAA,EAAA,CAAO,CAAA,CAAE,WAAsB,EAAA,EAAI,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA,CAAA;AAAA,cAC5D,OAAO,CAAA,CAAE;AAAA,aACX;AAAA,UACF,CAAC;AAAA,SACH;AACA,QAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AAAA,MAC3B;AACA,MAAA,MAAM,IAAA,GAAO,MAAMD,OAAA,CAAM,QAAA,CAAS,MAAM,MAAM,CAAA;AAC9C,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,OAAA,EAAU,IAAA,CAAK,MAAM,CAAA,oBAAA,CAAsB,CAAA;AAAA,IACzD,CAAC,CAAA;AAAE,GACL;AAEF,EAAA,EAAA,CAAG,OAAA,CAAQ,iBAAiB,CAAA,CACzB,WAAA,CAAY,sDAAsD,CAAA,CAClE,MAAA;AAAA,IAAO,CAAC,GAAA,KACP,SAAA,CAAU,YAAY;AACpB,MAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,WAAA,EAAY;AACnC,MAAA,IAAI,MAAA,GAAS,GAAA,IAAO,GAAA,CAAI,MAAA,GAAS,IAAI,GAAA,GAAM,KAAA,CAAA;AAC3C,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA,MAAM,IAAA,GAAO,MAAMA,OAAA,CAAM,OAAA,CAAQ,IAAI,CAAA;AACrC,QAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACrB,UAAA,OAAA,CAAQ,IAAI,oBAAoB,CAAA;AAChC,UAAA;AAAA,QACF;AAEA,QAAA,MAAA,GAAS,MAAM,cAAA;AAAA,UACb,2BAAA;AAAA,UACA,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,KAAM;AACd,YAAA,MAAM,IAAI,CAAA,CAAE,MAAA;AACZ,YAAA,MAAM,OAAO,CAAA,GACT,CAAC,CAAA,CAAE,UAAA,EAAY,EAAE,WAAW,CAAA,CAAE,MAAA,CAAO,OAAO,EAAE,IAAA,CAAK,GAAG,CAAA,IAAK,CAAA,CAAE,SAAS,EAAA,GACtE,EAAA;AACJ,YAAA,OAAO;AAAA,cACL,IAAA,EAAM,CAAA,EAAG,IAAI,CAAA,EAAA,EAAA,CAAO,CAAA,CAAE,WAAsB,EAAA,EAAI,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA,CAAA;AAAA,cAC5D,OAAO,CAAA,CAAE;AAAA,aACX;AAAA,UACF,CAAC;AAAA,SACH;AACA,QAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AAAA,MAC3B;AACA,MAAA,MAAMA,OAAA,CAAM,SAAA,CAAU,IAAA,EAAM,MAAM,CAAA;AAClC,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,QAAA,EAAW,MAAA,CAAO,MAAM,CAAA,YAAA,CAAc,CAAA;AAAA,IACpD,CAAC,CAAA;AAAE,GACL;AAGF,EAAA,EAAA,CAAG,OAAO,YAAY;AACpB,IAAA,MAAM,GAAG,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,KAAM,EAAE,IAAA,EAAK,KAAM,MAAM,CAAA,CAAG,WAAW,EAAC,EAAG,EAAE,IAAA,EAAM,QAAQ,CAAA;AAAA,EACrF,CAAC,CAAA;AACH;AClKA,eAAe,eAAA,CACb,MACA,WAAA,EACA;AACA,EAAA,MAAM,IAAA,GAAO,MAAME,SAAA,CAAO,QAAA,CAAS,MAAM,WAAW,CAAA;AACpD,EAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACrB,IAAA,OAAA,CAAQ,IAAI,gBAAgB,CAAA;AAC5B,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AACA,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,OAAA,EAAS,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,MACxB,IAAA,EAAM,CAAA,EAAG,CAAA,CAAE,IAAI,CAAA,EAAA,EAAM,CAAA,CAAE,QAAA,EAAgC,IAAA,IAAQ,SAAS,CAAA,EAAA,EAAK,CAAA,CAAE,YAAY,CAAA,MAAA,CAAA;AAAA,MAC3F,OAAO,CAAA,CAAE,WAAA;AAAA,MACT,aAAa,CAAA,CAAE;AAAA,KACjB,CAAE;AAAA,GACJ;AACF;AAEO,SAAS,oBAAoB5B,QAAAA,EAAwB;AAC1D,EAAA,MAAM,OAAOA,QAAAA,CAAQ,OAAA,CAAQ,MAAM,CAAA,CAAE,YAAY,aAAa,CAAA;AAE9D,EAAA,IAAA,CACG,OAAA,CAAQ,MAAM,CAAA,CACd,WAAA,CAAY,mCAAmC,CAAA,CAC/C,MAAA,CAAO,sBAAA,EAAwB,+CAA+C,CAAA,CAC9E,MAAA;AAAA,IAAO,CAAC,IAAA,KACP,SAAA,CAAU,YAAY;AACpB,MAAA,MAAM,EAAE,IAAA,EAAM,WAAA,KAAgB,MAAM,gBAAA,CAAiB,KAAK,SAAS,CAAA;AACnE,MAAA,MAAM,IAAA,GAAO,MAAM4B,SAAA,CAAO,QAAA,CAAS,MAAM,WAAW,CAAA;AAEpD,MAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACrB,QAAA,OAAA,CAAQ,IAAI,gBAAgB,CAAA;AAC5B,QAAA;AAAA,MACF;AAEA,MAAA,UAAA;AAAA,QACE;AAAA,UACE,EAAE,QAAQ,IAAA,EAAM,KAAA,EAAO,IAAI,KAAA,EAAO,CAAC,CAAA,KAAM,CAAA,CAAE,WAAA,EAAsB;AAAA,UACjE,EAAE,QAAQ,MAAA,EAAQ,KAAA,EAAO,IAAI,KAAA,EAAO,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,EAAe;AAAA,UAC5D;AAAA,YACE,MAAA,EAAQ,MAAA;AAAA,YACR,KAAA,EAAO,EAAA;AAAA,YACP,KAAA,EAAO,CAAC,CAAA,KAAO,CAAA,CAAE,UAAgC,IAAA,IAAQ;AAAA,WAC3D;AAAA,UACA,EAAE,MAAA,EAAQ,MAAA,EAAQ,KAAA,EAAO,CAAA,EAAG,KAAA,EAAO,CAAC,CAAA,KAAM,MAAA,CAAO,CAAA,CAAE,YAAY,CAAA,EAAE;AAAA,UACjE,EAAE,MAAA,EAAQ,QAAA,EAAU,KAAA,EAAO,CAAA,EAAG,KAAA,EAAO,CAAC,CAAA,KAAO,CAAA,CAAE,MAAA,GAAS,KAAA,GAAQ,IAAA;AAAM,SACxE;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAC,CAAA;AAAE,GACL;AAEF,EAAA,IAAA,CACG,OAAA,CAAQ,eAAe,CAAA,CACvB,WAAA,CAAY,sDAAsD,CAAA,CAClE,MAAA,CAAO,sBAAA,EAAwB,+CAA+C,CAAA,CAC9E,MAAA;AAAA,IACC,mBAAA;AAAA,IACA,4EAAA;AAAA,IACA;AAAA,GACF,CACC,OAAO,0BAAA,EAA4B,iBAAiB,EACpD,MAAA,CAAO,UAAA,EAAY,iBAAA,EAAmB,KAAK,CAAA,CAC3C,MAAA;AAAA,IACC,CACE,IAAA,EACA,IAAA,KAEA,SAAA,CAAU,YAAY;AACpB,MAAA,MAAM,EAAE,IAAA,EAAM,WAAA,KAAgB,MAAM,gBAAA,CAAiB,KAAK,SAAS,CAAA;AAGnE,MAAA,MAAM,cAAc,CAAC,IAAA;AACrB,MAAA,IAAI,CAAC,IAAA,EAAM;AACT,QAAA,IAAA,GAAO,MAAM,YAAY,UAAU,CAAA;AAAA,MACrC;AACA,MAAA,MAAM,OAAA,GACJ,IAAA,CAAK,IAAA,IACJ,MAAM,aAAa,UAAA,EAAY;AAAA,QAC9B,EAAE,IAAA,EAAM,UAAA,EAAY,KAAA,EAAO,UAAA,EAAW;AAAA,QACtC,EAAE,IAAA,EAAM,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAO;AAAA,QAC9B,EAAE,IAAA,EAAM,QAAA,EAAU,KAAA,EAAO,QAAA,EAAS;AAAA,QAClC,EAAE,IAAA,EAAM,QAAA,EAAU,KAAA,EAAO,QAAA,EAAS;AAAA,QAClC,EAAE,IAAA,EAAM,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAO;AAAA,QAC9B,EAAE,IAAA,EAAM,QAAA,EAAU,KAAA,EAAO,QAAA,EAAS;AAAA,QAClC,EAAE,IAAA,EAAM,QAAA,EAAU,KAAA,EAAO,QAAA,EAAS;AAAA,QAClC,EAAE,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,WAAA;AAAY,OACzC,CAAA;AACH,MAAA,MAAM,WAAA,GAAc,WAAA,GACf,IAAA,CAAK,WAAA,KAAiB,MAAM,WAAA,CAAY,wBAAA,EAA0B,KAAK,CAAA,IAAM,IAAA,CAAA,GAC7E,IAAA,CAAK,WAAA,IAAe,IAAA;AACzB,MAAA,MAAM,MAAA,GAAS,WAAA,GACX,IAAA,CAAK,MAAA,IAAW,MAAM,cAAc,SAAA,EAAW,KAAK,CAAA,GACnD,IAAA,CAAK,MAAA,IAAU,KAAA;AAEpB,MAAA,MAAM,IAAA,GAAO,MAAMA,SAAA,CAAO,SAAA,CAAU,IAAA,EAAM;AAAA,QACxC,IAAA;AAAA,QACA,WAAA;AAAA,QACA,SAAS,EAAE,IAAA,EAAM,OAAA,EAAS,OAAA,EAAS,EAAC,EAAE;AAAA,QACtC,WAAA;AAAA,QACA;AAAA,OACD,CAAA;AACD,MAAA,OAAA,CAAQ,IAAI,CAAA,SAAA,EAAY,IAAA,CAAK,IAAI,CAAA,EAAA,EAAK,IAAA,CAAK,WAAW,CAAA,CAAA,CAAG,CAAA;AAAA,IAC3D,CAAC,CAAA;AAAE,GACP;AAEF,EAAA,IAAA,CACG,OAAA,CAAQ,aAAa,CAAA,CACrB,WAAA,CAAY,kDAAkD,CAAA,CAC9D,MAAA;AAAA,IAAO,CAAC,EAAA,KACP,SAAA,CAAU,YAAY;AACpB,MAAA,MAAM,EAAE,IAAA,EAAM,WAAA,EAAY,GAAI,MAAM,gBAAA,EAAiB;AACrD,MAAA,IAAI,CAAC,EAAA,EAAI;AACP,QAAA,MAAM,EAAE,OAAA,EAAQ,GAAI,MAAM,eAAA,CAAgB,MAAM,WAAW,CAAA;AAC3D,QAAA,EAAA,GAAK,MAAM,YAAA,CAAa,sBAAA,EAAwB,OAAO,CAAA;AAAA,MACzD;AACA,MAAA,MAAM,IAAA,GAAO,MAAMA,SAAA,CAAO,SAAA,CAAU,MAAM,EAAE,CAAA;AAC5C,MAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,EAAM,MAAA,IAAU,CAAA,YAAA,EAAe,EAAE,CAAA,CAAE,CAAA;AAAA,IACjD,CAAC,CAAA;AAAE,GACL;AAEF,EAAA,IAAA,CACG,OAAA,CAAQ,oBAAoB,CAAA,CAC5B,WAAA,CAAY,qDAAqD,CAAA,CACjE,MAAA;AAAA,IAAO,CAAC,EAAA,EAAa,IAAA,KACpB,SAAA,CAAU,YAAY;AACpB,MAAA,MAAM,EAAE,IAAA,EAAM,WAAA,EAAY,GAAI,MAAM,gBAAA,EAAiB;AACrD,MAAA,IAAI,CAAC,EAAA,EAAI;AACP,QAAA,MAAM,EAAE,OAAA,EAAQ,GAAI,MAAM,eAAA,CAAgB,MAAM,WAAW,CAAA;AAC3D,QAAA,EAAA,GAAK,MAAM,YAAA,CAAa,sBAAA,EAAwB,OAAO,CAAA;AAAA,MACzD;AAEA,MAAA,IAAI,IAAA;AACJ,MAAA,IAAI,IAAA,EAAM;AACR,QAAA,IAAA,GAAO,YAAA,CAAa,MAAM,CAAA,+CAAA,CAAmD,CAAA;AAAA,MAC/E,CAAA,MAAO;AACL,QAAA,MAAM,KAAA,GAAQ,MAAM,YAAA,CAAa,iBAAA,EAAmB;AAAA,UAClD,EAAE,IAAA,EAAM,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAO;AAAA,UAC9B,EAAE,IAAA,EAAM,aAAA,EAAe,KAAA,EAAO,aAAA,EAAc;AAAA,UAC5C,EAAE,IAAA,EAAM,QAAA,EAAU,KAAA,EAAO,QAAA;AAAS,SACnC,CAAA;AACD,QAAA,IAAI,UAAU,QAAA,EAAU;AACtB,UAAA,IAAA,GAAO,EAAE,MAAA,EAAQ,MAAM,aAAA,CAAc,SAAS,CAAA,EAAE;AAAA,QAClD,CAAA,MAAO;AACL,UAAA,IAAA,GAAO,EAAE,CAAC,KAAK,GAAG,MAAM,YAAY,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,CAAE,aAAY,GAAI,KAAA,CAAM,KAAA,CAAM,CAAC,CAAC,CAAA,EAAE;AAAA,QACtF;AAAA,MACF;AAEA,MAAA,MAAM,OAAO,MAAMA,SAAA,CAAO,SAAA,CAAU,IAAA,EAAM,IAAI,IAAI,CAAA;AAClD,MAAA,OAAA,CAAQ,IAAI,CAAA,SAAA,EAAY,IAAA,CAAK,IAAI,CAAA,EAAA,EAAK,IAAA,CAAK,WAAW,CAAA,CAAA,CAAG,CAAA;AAAA,IAC3D,CAAC,CAAA;AAAE,GACL;AAGF,EAAA,IAAA,CAAK,MAAA,CAAO,OAAO,KAAA,EAAgC,GAAA,KAAiB;AAClE,IAAA,MAAM,IAAI,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,KAAM,EAAE,IAAA,EAAK,KAAM,MAAM,CAAA,CAAG,WAAW,EAAC,EAAG,EAAE,IAAA,EAAM,QAAQ,CAAA;AAAA,EACtF,CAAC,CAAA;AACH;AC/JA,eAAe,OAAA,CACb,IAAA,EACA,WAAA,EACA,OAAA,GAAU,YAAA,EACV;AACA,EAAA,MAAM,IAAA,GAAO,MAAMA,SAAAA,CAAO,QAAA,CAAS,MAAM,WAAW,CAAA;AACpD,EAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACrB,IAAA,OAAA,CAAQ,IAAI,gBAAgB,CAAA;AAC5B,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AACA,EAAA,OAAO,YAAA;AAAA,IACL,OAAA;AAAA,IACA,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,MACf,IAAA,EAAM,GAAG,CAAA,CAAE,IAAI,KAAM,CAAA,CAAE,QAAA,EAAgC,QAAQ,EAAE,CAAA,CAAA,CAAA;AAAA,MACjE,OAAO,CAAA,CAAE,WAAA;AAAA,MACT,aAAa,CAAA,CAAE;AAAA,KACjB,CAAE;AAAA,GACJ;AACF;AAGA,eAAe,QAAA,CACb,IAAA,EACA,WAAA,EACA,OAAA,GAAU,kBAAA,EACV;AACA,EAAA,MAAM,IAAA,GAAO,MAAMV,cAAAA,CAAU,aAAA,CAAc,MAAM,WAAW,CAAA;AAC5D,EAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACrB,IAAA,OAAA,CAAQ,IAAI,qBAAqB,CAAA;AACjC,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AACA,EAAA,OAAO,cAAA;AAAA,IACL,OAAA;AAAA,IACA,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,MACf,MAAM,CAAA,EAAG,CAAA,CAAE,aAAa,SAAS,CAAA,EAAA,EAAK,EAAE,MAAM,CAAA,CAAA,CAAA;AAAA,MAC9C,OAAO,CAAA,CAAE;AAAA,KACX,CAAE;AAAA,GACJ;AACF;AAEO,SAAS,uBAAuBlB,QAAAA,EAAwB;AAC7D,EAAA,MAAM,aAAaA,QAAAA,CAAQ,OAAA,CAAQ,SAAS,CAAA,CAAE,YAAY,gCAAgC,CAAA;AAE1F,EAAA,UAAA,CACG,OAAA,CAAQ,8BAA8B,CAAA,CACtC,WAAA,CAAY,4DAA4D,CAAA,CACxE,MAAA,CAAO,mBAAA,EAAqB,qBAAqB,CAAA,CACjD,MAAA;AAAA,IAAO,CAAC,KAAA,EAAgB,MAAA,EAAmB,IAAA,KAC1C,UAAU,YAAY;AACpB,MAAA,MAAM,EAAE,IAAA,EAAM,WAAA,EAAY,GAAI,MAAM,gBAAA,EAAiB;AACrD,MAAA,IAAI,CAAC,KAAA,EAAO,KAAA,GAAQ,MAAM,OAAA,CAAQ,IAAA,EAAM,aAAa,sBAAsB,CAAA;AAC3E,MAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,MAAA,KAAW,CAAA;AAC/B,QAAA,MAAA,GAAS,MAAM,QAAA,CAAS,IAAA,EAAM,WAAA,EAAa,yBAAyB,CAAA;AACtE,MAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACzB,MAAA,MAAM,IAAA,GAAO,MAAM6B,YAAA,CAAU,aAAA,CAAc,MAAM,KAAA,EAAO,MAAA,EAAQ,MAAM,IAAI,CAAA;AAC1E,MAAA,OAAA,CAAQ,IAAI,CAAA,QAAA,EAAW,IAAA,CAAK,MAAM,CAAA,mBAAA,EAAsB,KAAK,CAAA,CAAA,CAAG,CAAA;AAAA,IAClE,CAAC,CAAA;AAAE,GACL;AAEF,EAAA,UAAA,CACG,OAAA,CAAQ,8BAA8B,CAAA,CACtC,WAAA,CAAY,8DAA8D,CAAA,CAC1E,MAAA;AAAA,IAAO,CAAC,KAAA,EAAgB,MAAA,KACvB,SAAA,CAAU,YAAY;AACpB,MAAA,MAAM,EAAE,IAAA,EAAM,WAAA,EAAY,GAAI,MAAM,gBAAA,EAAiB;AACrD,MAAA,IAAI,CAAC,KAAA,EAAO,KAAA,GAAQ,MAAM,OAAA,CAAQ,IAAA,EAAM,aAAa,sBAAsB,CAAA;AAC3E,MAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,MAAA,KAAW,CAAA;AAC/B,QAAA,MAAA,GAAS,MAAM,QAAA,CAAS,IAAA,EAAM,WAAA,EAAa,2BAA2B,CAAA;AACxE,MAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACzB,MAAA,MAAMA,YAAA,CAAU,aAAA,CAAc,IAAA,EAAM,KAAA,EAAO,MAAM,CAAA;AACjD,MAAA,OAAA,CAAQ,IAAI,CAAA,YAAA,EAAe,KAAK,CAAA,MAAA,EAAS,MAAA,CAAO,MAAM,CAAA,aAAA,CAAe,CAAA;AAAA,IACvE,CAAC,CAAA;AAAE,GACL;AAEF,EAAA,UAAA,CACG,OAAA,CAAQ,UAAU,CAAA,CAClB,WAAA,CAAY,uDAAuD,CAAA,CACnE,MAAA,CAAO,cAAA,EAAgB,yBAAyB,CAAA,CAChD,MAAA,CAAO,cAAA,EAAgB,8BAA8B,CAAA,CACrD,MAAA;AAAA,IAAO,CAAC,IAAA,KACP,SAAA,CAAU,YAAY;AACpB,MAAA,MAAM,EAAE,IAAA,EAAM,WAAA,EAAY,GAAI,MAAM,gBAAA,EAAiB;AAErD,MAAA,IAAI,MAAA;AACJ,MAAA,IAAI,KAAK,IAAA,EAAM;AACb,QAAA,MAAA,GAAS,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA,CAAE,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,EAAM,CAAA;AAAA,MACnD,CAAA,MAAO;AACL,QAAA,MAAMF,KAAAA,GAAO,MAAMC,SAAAA,CAAO,QAAA,CAAS,MAAM,WAAW,CAAA;AACpD,QAAA,IAAID,KAAAA,CAAK,WAAW,CAAA,EAAG;AACrB,UAAA,OAAA,CAAQ,IAAI,gBAAgB,CAAA;AAC5B,UAAA;AAAA,QACF;AACA,QAAA,MAAA,GAAS,MAAM,cAAA;AAAA,UACb,yBAAA;AAAA,UACAA,KAAAA,CAAK,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,YACf,IAAA,EAAM,GAAG,CAAA,CAAE,IAAI,KAAM,CAAA,CAAE,QAAA,EAAgC,QAAQ,EAAE,CAAA,CAAA,CAAA;AAAA,YACjE,OAAO,CAAA,CAAE;AAAA,WACX,CAAE;AAAA,SACJ;AACA,QAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AAAA,MAC3B;AAEA,MAAA,IAAI,MAAA;AACJ,MAAA,IAAI,KAAK,IAAA,EAAM;AACb,QAAA,MAAA,GAAS,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA,CAAE,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,EAAM,CAAA;AAAA,MACnD,CAAA,MAAO;AACL,QAAA,MAAA,GAAS,MAAM,QAAA,CAAS,IAAA,EAAM,WAAA,EAAa,iCAAiC,CAAA;AAC5E,QAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AAAA,MAC3B;AAEA,MAAA,MAAM,OAAO,MAAME,YAAA,CAAU,eAAA,CAAgB,IAAA,EAAM,QAAQ,MAAM,CAAA;AACjE,MAAA,OAAA,CAAQ,GAAA;AAAA,QACN,0BAA0B,IAAA,CAAK,WAAA,CAAY,MAAM,CAAA,aAAA,EAAgB,IAAA,CAAK,YAAY,MAAM,CAAA,QAAA;AAAA,OAC1F;AAAA,IACF,CAAC,CAAA;AAAE,GACL;AACJ;AC9GA,eAAe,gBAAA,CACb,IAAA,EACA,WAAA,EACA,OAAA,GAAU,qBAAA,EACV;AACA,EAAA,MAAM,IAAA,GAAO,MAAMC,kBAAA,CAAQ,iBAAA,CAAkB,MAAM,WAAW,CAAA;AAC9D,EAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACrB,IAAA,OAAA,CAAQ,IAAI,yBAAyB,CAAA;AACrC,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AACA,EAAA,OAAO,YAAA;AAAA,IACL,OAAA;AAAA,IACA,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,MACf,MAAM,CAAA,EAAI,CAAA,CAAE,SAAoB,UAAU,CAAA,EAAA,EAAK,EAAE,aAAa,CAAA,MAAA,CAAA;AAAA,MAC9D,OAAO,CAAA,CAAE,WAAA;AAAA,MACT,aAAa,CAAA,CAAE;AAAA,KACjB,CAAE;AAAA,GACJ;AACF;AAEO,SAAS,6BAA6B9B,QAAAA,EAAwB;AACnE,EAAA,MAAM,OAAOA,QAAAA,CAAQ,OAAA,CAAQ,eAAe,CAAA,CAAE,YAAY,sBAAsB,CAAA;AAEhF,EAAA,IAAA,CACG,OAAA,CAAQ,MAAM,CAAA,CACd,WAAA,CAAY,4CAA4C,CAAA,CACxD,MAAA,CAAO,sBAAA,EAAwB,+CAA+C,CAAA,CAC9E,MAAA;AAAA,IAAO,CAAC,IAAA,KACP,SAAA,CAAU,YAAY;AACpB,MAAA,MAAM,EAAE,IAAA,EAAM,WAAA,KAAgB,MAAM,gBAAA,CAAiB,KAAK,SAAS,CAAA;AACnE,MAAA,MAAM,IAAA,GAAO,MAAM8B,kBAAA,CAAQ,iBAAA,CAAkB,MAAM,WAAW,CAAA;AAE9D,MAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACrB,QAAA,OAAA,CAAQ,IAAI,yBAAyB,CAAA;AACrC,QAAA;AAAA,MACF;AAEA,MAAA,UAAA;AAAA,QACE;AAAA,UACE,EAAE,QAAQ,IAAA,EAAM,KAAA,EAAO,IAAI,KAAA,EAAO,CAAC,CAAA,KAAM,CAAA,CAAE,WAAA,EAAsB;AAAA,UACjE,EAAE,MAAA,EAAQ,OAAA,EAAS,KAAA,EAAO,EAAA,EAAI,OAAO,CAAC,CAAA,KAAO,CAAA,CAAE,KAAA,IAAoB,UAAA,EAAW;AAAA,UAC9E,EAAE,MAAA,EAAQ,MAAA,EAAQ,KAAA,EAAO,CAAA,EAAG,KAAA,EAAO,CAAC,CAAA,KAAM,MAAA,CAAO,CAAA,CAAE,aAAa,CAAA,EAAE;AAAA,UAClE,EAAE,MAAA,EAAQ,QAAA,EAAU,KAAA,EAAO,CAAA,EAAG,KAAA,EAAO,CAAC,CAAA,KAAO,CAAA,CAAE,SAAA,GAAY,KAAA,GAAQ,IAAA;AAAM,SAC3E;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAC,CAAA;AAAE,GACL;AAEF,EAAA,IAAA,CACG,OAAA,CAAQ,2BAA2B,CAAA,CACnC,WAAA,CAAY,kDAAkD,CAAA,CAC9D,MAAA;AAAA,IAAO,CAAC,cAAA,KACP,SAAA,CAAU,YAAY;AACpB,MAAA,MAAM,EAAE,IAAA,EAAM,WAAA,EAAY,GAAI,MAAM,gBAAA,EAAiB;AACrD,MAAA,IAAI,CAAC,cAAA,EAAgB,cAAA,GAAiB,MAAM,gBAAA,CAAiB,MAAM,WAAW,CAAA;AAC9E,MAAA,MAAM,IAAA,GAAO,MAAMA,kBAAA,CAAQ,sBAAA,CAAuB,MAAM,cAAc,CAAA;AACtE,MAAA,OAAA,CAAQ,IAAI,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,IAC3C,CAAC,CAAA;AAAE,GACL;AAEF,EAAA,IAAA,CACG,OAAA,CAAQ,0BAA0B,CAAA,CAClC,WAAA,CAAY,2DAA2D,CAAA,CACvE,MAAA;AAAA,IAAO,CAAC,cAAA,KACP,SAAA,CAAU,YAAY;AACpB,MAAA,MAAM,EAAE,IAAA,EAAM,WAAA,EAAY,GAAI,MAAM,gBAAA,EAAiB;AACrD,MAAA,IAAI,CAAC,cAAA;AACH,QAAA,cAAA,GAAiB,MAAM,gBAAA;AAAA,UACrB,IAAA;AAAA,UACA,WAAA;AAAA,UACA;AAAA,SACF;AACF,MAAA,MAAM,IAAA,GAAO,MAAMA,kBAAA,CAAQ,kBAAA,CAAmB,MAAM,cAAc,CAAA;AAClE,MAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,EAAM,MAAA,IAAU,CAAA,qBAAA,EAAwB,cAAc,CAAA,CAAE,CAAA;AAAA,IACtE,CAAC,CAAA;AAAE,GACL;AAEF,EAAA,IAAA,CACG,OAAA,CAAQ,yBAAyB,CAAA,CACjC,WAAA,CAAY,0DAA0D,CAAA,CACtE,MAAA;AAAA,IAAO,CAAC,cAAA,KACP,SAAA,CAAU,YAAY;AACpB,MAAA,MAAM,EAAE,IAAA,EAAM,WAAA,EAAY,GAAI,MAAM,gBAAA,EAAiB;AACrD,MAAA,IAAI,CAAC,cAAA;AACH,QAAA,cAAA,GAAiB,MAAM,gBAAA,CAAiB,IAAA,EAAM,WAAA,EAAa,8BAA8B,CAAA;AAC3F,MAAA,MAAM,IAAA,GAAO,MAAMA,kBAAA,CAAQ,iBAAA,CAAkB,MAAM,cAAc,CAAA;AACjE,MAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,EAAM,MAAA,IAAU,CAAA,oBAAA,EAAuB,cAAc,CAAA,CAAE,CAAA;AAAA,IACrE,CAAC,CAAA;AAAE,GACL;AAEF,EAAA,IAAA,CACG,OAAA,CAAQ,iCAAiC,CAAA,CACzC,WAAA,CAAY,oDAAoD,CAAA,CAChE,MAAA;AAAA,IAAO,CAAC,cAAA,EAAyB,KAAA,KAChC,SAAA,CAAU,YAAY;AACpB,MAAA,MAAM,EAAE,IAAA,EAAM,WAAA,EAAY,GAAI,MAAM,gBAAA,EAAiB;AACrD,MAAA,IAAI,CAAC,cAAA,EAAgB,cAAA,GAAiB,MAAM,gBAAA,CAAiB,MAAM,WAAW,CAAA;AAC9E,MAAA,IAAI,CAAC,KAAA,EAAO,KAAA,GAAQ,MAAM,YAAY,WAAW,CAAA;AACjD,MAAA,MAAM,OAAO,MAAMA,kBAAA,CAAQ,uBAAA,CAAwB,IAAA,EAAM,gBAAgB,KAAK,CAAA;AAC9E,MAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,EAAM,MAAA,IAAU,CAAA,kBAAA,EAAqB,KAAK,CAAA,CAAE,CAAA;AAAA,IAC1D,CAAC,CAAA;AAAE,GACL;AAEF,EAAA,IAAA,CACG,OAAA,CAAQ,sCAAsC,CAAA,CAC9C,WAAA,CAAY,uDAAuD,CAAA,CACnE,MAAA;AAAA,IAAO,CAAC,cAAA,EAAyB,MAAA,KAChC,SAAA,CAAU,YAAY;AACpB,MAAA,MAAM,EAAE,IAAA,EAAM,WAAA,EAAY,GAAI,MAAM,gBAAA,EAAiB;AACrD,MAAA,IAAI,CAAC,cAAA,EAAgB,cAAA,GAAiB,MAAM,gBAAA,CAAiB,MAAM,WAAW,CAAA;AAC9E,MAAA,IAAI,CAAC,MAAA,EAAQ,MAAA,GAAS,MAAM,YAAY,sBAAsB,CAAA;AAC9D,MAAA,MAAM,OAAO,MAAMA,kBAAA,CAAQ,mBAAA,CAAoB,IAAA,EAAM,gBAAgB,MAAM,CAAA;AAC3E,MAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,EAAM,MAAA,IAAU,CAAA,WAAA,EAAc,MAAM,CAAA,gBAAA,CAAkB,CAAA;AAAA,IACpE,CAAC,CAAA;AAAE,GACL;AAEF,EAAA,IAAA,CACG,OAAA,CAAQ,yCAAyC,CAAA,CACjD,WAAA,CAAY,4DAA4D,CAAA,CACxE,MAAA;AAAA,IAAO,CAAC,cAAA,EAAyB,MAAA,KAChC,SAAA,CAAU,YAAY;AACpB,MAAA,MAAM,EAAE,IAAA,EAAM,WAAA,EAAY,GAAI,MAAM,gBAAA,EAAiB;AACrD,MAAA,IAAI,CAAC,cAAA,EAAgB,cAAA,GAAiB,MAAM,gBAAA,CAAiB,MAAM,WAAW,CAAA;AAC9E,MAAA,IAAI,CAAC,MAAA,EAAQ,MAAA,GAAS,MAAM,YAAY,aAAa,CAAA;AACrD,MAAA,MAAM,OAAO,MAAMA,kBAAA,CAAQ,sBAAA,CAAuB,IAAA,EAAM,gBAAgB,MAAM,CAAA;AAC9E,MAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,EAAM,MAAA,IAAU,CAAA,aAAA,EAAgB,MAAM,CAAA,kBAAA,CAAoB,CAAA;AAAA,IACxE,CAAC,CAAA;AAAE,GACL;AAEF,EAAA,IAAA,CACG,OAAA,CAAQ,sBAAsB,CAAA,CAC9B,WAAA,CAAY,qBAAqB,CAAA,CACjC,MAAA;AAAA,IAAO,CAAC,SAAA,KACP,SAAA,CAAU,YAAY;AACpB,MAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,gBAAA,EAAiB;AACxC,MAAA,MAAM,IAAA,GAAO,MAAMA,kBAAA,CAAQ,UAAA,CAAW,MAAM,SAAS,CAAA;AACrD,MAAA,OAAA,CAAQ,IAAI,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,IAC3C,CAAC,CAAA;AAAE,GACL;AAEF,EAAA,IAAA,CACG,OAAA,CAAQ,6BAA6B,CAAA,CACrC,WAAA,CAAY,sCAAsC,CAAA,CAClD,MAAA;AAAA,IAAO,CAAC,SAAA,KACP,SAAA,CAAU,YAAY;AACpB,MAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,WAAA,EAAY;AACnC,MAAA,MAAM,IAAA,GAAO,MAAMA,kBAAA,CAAQ,aAAA,CAAc,MAAM,SAAS,CAAA;AACxD,MAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,EAAM,MAAA,IAAU,CAAA,gBAAA,EAAmB,SAAS,CAAA,CAAE,CAAA;AAAA,IAC5D,CAAC,CAAA;AAAE,GACL;AAGF,EAAA,IAAA,CAAK,MAAA,CAAO,OAAO,KAAA,EAAgC,GAAA,KAAiB;AAClE,IAAA,MAAM,IAAI,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,KAAM,EAAE,IAAA,EAAK,KAAM,MAAM,CAAA,CAAG,WAAW,EAAC,EAAG,EAAE,IAAA,EAAM,QAAQ,CAAA;AAAA,EACtF,CAAC,CAAA;AACH;ACrKO,SAAS,wBAAwB9B,QAAAA,EAAwB;AAC9D,EAAA,MAAM,WAAWA,QAAAA,CAAQ,OAAA,CAAQ,UAAU,CAAA,CAAE,YAAY,sBAAsB,CAAA;AAE/E,EAAA,QAAA,CACG,OAAA,CAAQ,KAAK,CAAA,CACb,WAAA,CAAY,4BAA4B,CAAA,CACxC,MAAA;AAAA,IACC,UAAU,YAAY;AACpB,MAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,WAAA,EAAY;AACnC,MAAA,MAAM,IAAA,GAAO,MAAM+B,aAAA,CAAY,WAAA,CAAY,IAAI,CAAA;AAC/C,MAAA,OAAA,CAAQ,IAAI,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,IAC3C,CAAC;AAAA,GACH;AAEF,EAAA,QAAA,CACG,OAAA,CAAQ,YAAY,CAAA,CACpB,WAAA,CAAY,yCAAyC,CAAA,CACrD,MAAA;AAAA,IAAO,CAAC,IAAA,KACP,SAAA,CAAU,YAAY;AACpB,MAAA,MAAM,IAAA,GAAO,YAAA,CAAa,IAAA,EAAM,CAAA,gDAAA,CAAoD,CAAA;AACpF,MAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,WAAA,EAAY;AACnC,MAAA,MAAMA,aAAA,CAAY,cAAA,CAAe,IAAA,EAAM,IAAI,CAAA;AAC3C,MAAA,OAAA,CAAQ,IAAI,mBAAmB,CAAA;AAAA,IACjC,CAAC,CAAA;AAAE,GACL;AAGF,EAAA,QAAA,CAAS,OAAO,YAAY;AAC1B,IAAA,MAAM,SAAS,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,KAAM,EAAE,IAAA,EAAK,KAAM,KAAK,CAAA,CAAG,WAAW,EAAC,EAAG,EAAE,IAAA,EAAM,QAAQ,CAAA;AAAA,EAC1F,CAAC,CAAA;AACH;ACzBA,IAAM,cAAA,GAAiB;AAAA,EACrB,QAAA;AAAA,EACA,UAAA;AAAA,EACA,cAAA;AAAA,EACA,UAAA;AAAA,EACA,cAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAAA;AAGA,eAAe,UAAA,CACb,IAAA,EACA,OAAA,GAAU,sBAAA,EACV;AACA,EAAA,MAAM,IAAA,GAAO,MAAMC,gBAAA,CAAM,WAAA,CAAY,IAAI,CAAA;AACzC,EAAA,IAAI,IAAA,CAAK,QAAA,CAAS,MAAA,KAAW,CAAA,EAAG;AAC9B,IAAA,OAAA,CAAQ,IAAI,gCAAgC,CAAA;AAC5C,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AACA,EAAA,OAAO,YAAA;AAAA,IACL,OAAA;AAAA,IACA,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,MACxB,IAAA,EAAM,CAAA,EAAG,CAAA,CAAE,KAAA,IAAS,YAAY,CAAA,QAAA,EAAM,IAAI,IAAA,CAAK,CAAA,CAAE,UAAU,CAAA,CAAE,cAAA,EAAgB,CAAA,CAAA;AAAA,MAC7E,OAAO,CAAA,CAAE,WAAA;AAAA,MACT,aAAa,CAAA,CAAE;AAAA,KACjB,CAAE;AAAA,GACJ;AACF;AAGA,eAAe,YAAY,IAAA,EAAuD;AAChF,EAAA,MAAM,IAAA,GAAO,MAAMA,gBAAA,CAAM,SAAA,CAAU,IAAI,CAAA;AACvC,EAAA,OAAO,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,IAC7B,IAAA,EAAM,GAAG,CAAA,CAAE,UAAU,KAAK,CAAA,CAAE,QAAA,IAAY,EAAE,QAAQ,CAAA,CAAA,CAAA;AAAA,IAClD,OAAO,CAAA,CAAE,UAAA;AAAA,IACT,aAAa,CAAA,CAAE;AAAA,GACjB,CAAE,CAAA;AACJ;AAGA,eAAe,yBACb,IAAA,EACkC;AAClC,EAAA,MAAM,OAAgC,EAAC;AAGvC,EAAA,MAAM,KAAA,GAAQ,MAAM,WAAA,CAAY,yBAAA,EAA2B,KAAK,CAAA;AAChE,EAAA,IAAI,KAAA,OAAY,KAAA,GAAQ,KAAA;AAGxB,EAAA,MAAM,OAAA,GAAU,MAAM,YAAA,CAAa,sBAAA,EAAwB;AAAA,IACzD,EAAE,IAAA,EAAM,gDAAA,EAA6C,KAAA,EAAO,QAAA,EAAS;AAAA,IACrE,EAAE,IAAA,EAAM,qCAAA,EAAkC,KAAA,EAAO,UAAA,EAAW;AAAA,IAC5D,EAAE,IAAA,EAAM,sCAAA,EAAmC,KAAA,EAAO,cAAA,EAAe;AAAA,IACjE,EAAE,IAAA,EAAM,kCAAA,EAA+B,KAAA,EAAO,UAAA,EAAW;AAAA,IACzD,EAAE,IAAA,EAAM,6CAAA,EAA0C,KAAA,EAAO,cAAA,EAAe;AAAA,IACxE,EAAE,IAAA,EAAM,sCAAA,EAAmC,KAAA,EAAO,WAAA,EAAY;AAAA,IAC9D,EAAE,IAAA,EAAM,2CAAA,EAAwC,KAAA,EAAO,aAAA,EAAc;AAAA,IACrE,EAAE,IAAA,EAAM,oCAAA,EAAiC,KAAA,EAAO,WAAA,EAAY;AAAA,IAC5D,EAAE,IAAA,EAAM,iCAAA,EAA8B,KAAA,EAAO,UAAA,EAAW;AAAA,IACxD,EAAE,IAAA,EAAM,0CAAA,EAAuC,KAAA,EAAO,eAAA,EAAgB;AAAA,IACtE,EAAE,IAAA,EAAM,2BAAA,EAAwB,KAAA,EAAO,SAAA,EAAU;AAAA,IACjD,EAAE,IAAA,EAAM,iCAAA,EAA8B,KAAA,EAAO,UAAA,EAAW;AAAA,IACxD,EAAE,IAAA,EAAM,wCAAA,EAAqC,KAAA,EAAO,iBAAA;AAAkB,GACvE,CAAA;AAED,EAAA,MAAM,gBAAyC,EAAC;AAGhD,EAAA,IAAK,cAAA,CAAqC,QAAA,CAAS,OAAO,CAAA,EAAG;AAC3D,IAAA,MAAM,MAAA,GAAS,MAAM,WAAA,CAAY,IAAI,CAAA;AACrC,IAAA,IAAI,MAAA,CAAO,SAAS,CAAA,EAAG;AACrB,MAAA,MAAM,WAAA,GAAc,MAAM,aAAA,CAAc,eAAA,EAAiB,IAAI,CAAA;AAC7D,MAAA,IAAI,WAAA,EAAa;AACf,QAAA,MAAM,QAAA,GAAW,OAAA,KAAY,QAAA,GAAW,kBAAA,GAAqB,YAAA;AAC7D,QAAA,aAAA,CAAc,QAAQ,CAAA,GAAI,MAAM,YAAA,CAAa,SAAS,MAAM,CAAA;AAE5D,QAAA,IAAI,YAAY,QAAA,EAAU;AACxB,UAAA,aAAA,CAAc,cAAA,GAAiB,QAAA;AAAA,QACjC,CAAA,MAAO;AACL,UAAA,aAAA,CAAc,QAAA,GAAW,QAAA;AAAA,QAC3B;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAGA,EAAA,IAAI,YAAY,QAAA,EAAU;AACxB,IAAA,MAAM,KAAA,GAAQ,MAAM,YAAA,CAAa,sBAAA,EAAwB;AAAA,MACvD,EAAE,IAAA,EAAM,cAAA,EAAgB,KAAA,EAAO,MAAA,EAAO;AAAA,MACtC,EAAE,IAAA,EAAM,aAAA,EAAe,KAAA,EAAO,uBAAA,EAAwB;AAAA,MACtD,EAAE,IAAA,EAAM,YAAA,EAAc,KAAA,EAAO,kBAAA,EAAmB;AAAA,MAChD,EAAE,IAAA,EAAM,gBAAA,EAAkB,KAAA,EAAO,sBAAA,EAAuB;AAAA,MACxD,EAAE,IAAA,EAAM,SAAA,EAAW,KAAA,EAAO,SAAA,EAAU;AAAA,MACpC,EAAE,IAAA,EAAM,oBAAA,EAAsB,KAAA,EAAO,YAAA,EAAa;AAAA,MAClD,EAAE,IAAA,EAAM,mBAAA,EAAqB,KAAA,EAAO,mBAAA;AAAoB,KACzD,CAAA;AACD,IAAA,IAAI,UAAU,MAAA,EAAQ;AACpB,MAAA,IAAI,KAAA,KAAU,YAAA,IAAgB,KAAA,KAAU,mBAAA,EAAqB;AAC3D,QAAA,aAAA,CAAc,KAAK,CAAA,GAAI,MAAM,aAAA,CAAc,QAAQ,GAAG,CAAA;AAAA,MACxD,CAAA,MAAA,IAAW,UAAU,uBAAA,EAAyB;AAC5C,QAAA,aAAA,CAAc,KAAK,CAAA,GAAI,UAAA,CAAW,MAAM,WAAA,CAAY,yBAAyB,CAAC,CAAA;AAAA,MAChF,CAAA,MAAA,IAAW,KAAA,KAAU,kBAAA,IAAsB,KAAA,KAAU,sBAAA,EAAwB;AAC3E,QAAA,aAAA,CAAc,KAAK,CAAA,GAAI,QAAA,CAAS,MAAM,WAAA,CAAY,KAAK,GAAG,EAAE,CAAA;AAAA,MAC9D,CAAA,MAAO;AACL,QAAA,aAAA,CAAc,KAAK,CAAA,GAAI,MAAM,WAAA,CAAY,KAAK,CAAA;AAAA,MAChD;AAAA,IACF;AAAA,EACF,CAAA,MAAA,IAAW,YAAY,WAAA,EAAa;AAClC,IAAA,MAAM,KAAA,GAAQ,MAAM,YAAA,CAAa,iBAAA,EAAmB;AAAA,MAClD,EAAE,IAAA,EAAM,aAAA,EAAe,KAAA,EAAO,aAAA,EAAc;AAAA,MAC5C,EAAE,IAAA,EAAM,sBAAA,EAAwB,KAAA,EAAO,yBAAA,EAA0B;AAAA,MACjE,EAAE,IAAA,EAAM,wBAAA,EAA0B,KAAA,EAAO,8BAAA,EAA+B;AAAA,MACxE,EAAE,IAAA,EAAM,wBAAA,EAA0B,KAAA,EAAO,wBAAA,EAAyB;AAAA,MAClE,EAAE,IAAA,EAAM,qBAAA,EAAuB,KAAA,EAAO,qBAAA,EAAsB;AAAA,MAC5D,EAAE,IAAA,EAAM,sBAAA,EAAwB,KAAA,EAAO,sBAAA;AAAuB,KAC/D,CAAA;AACD,IAAA,IAAI,UAAU,aAAA,EAAe;AAC3B,MAAA,aAAA,CAAc,KAAK,CAAA,GAAI,MAAM,YAAA,CAAa,aAAA,EAAe;AAAA,QACvD,EAAE,IAAA,EAAM,kBAAA,EAAoB,KAAA,EAAO,UAAA,EAAW;AAAA,QAC9C,EAAE,IAAA,EAAM,uBAAA,EAAyB,KAAA,EAAO,SAAA,EAAU;AAAA,QAClD,EAAE,IAAA,EAAM,yBAAA,EAA2B,KAAA,EAAO,QAAA;AAAS,OACpD,CAAA;AAAA,IACH,CAAA,MAAO;AACL,MAAA,aAAA,CAAc,KAAK,CAAA,GAAI,UAAA,CAAW,MAAM,WAAA,CAAY,KAAK,CAAC,CAAA;AAAA,IAC5D;AAAA,EACF,CAAA,MAAA,IAAW,YAAY,eAAA,EAAiB;AACtC,IAAA,MAAM,KAAA,GAAQ,MAAM,YAAA,CAAa,iBAAA,EAAmB;AAAA,MAClD,EAAE,IAAA,EAAM,sBAAA,EAAwB,KAAA,EAAO,gBAAA,EAAiB;AAAA,MACxD,EAAE,IAAA,EAAM,eAAA,EAAiB,KAAA,EAAO,yBAAA,EAA0B;AAAA,MAC1D,EAAE,IAAA,EAAM,eAAA,EAAiB,KAAA,EAAO,oBAAA;AAAqB,KACtD,CAAA;AACD,IAAA,aAAA,CAAc,KAAK,CAAA,GAAI,UAAA,CAAW,MAAM,WAAA,CAAY,KAAK,CAAC,CAAA;AAAA,EAC5D,CAAA,MAAA,IAAW,YAAY,SAAA,EAAW;AAChC,IAAA,aAAA,CAAc,mBAAmB,QAAA,CAAS,MAAM,WAAA,CAAY,kBAAkB,GAAG,EAAE,CAAA;AAAA,EACrF,CAAA,MAAA,IAAW,YAAY,UAAA,EAAY;AACjC,IAAA,MAAM,KAAA,GAAQ,MAAM,YAAA,CAAa,iBAAA,EAAmB;AAAA,MAClD,EAAE,IAAA,EAAM,yBAAA,EAA2B,KAAA,EAAO,oBAAA,EAAqB;AAAA,MAC/D,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,YAAA;AAAa,KACtC,CAAA;AACD,IAAA,IAAI,UAAU,YAAA,EAAc;AAC1B,MAAA,MAAM,MAAA,GAAS,MAAM,WAAA,CAAY,IAAI,CAAA;AACrC,MAAA,aAAA,CAAc,UAAA,GAAa,MAAM,YAAA,CAAa,OAAA,EAAS,MAAM,CAAA;AAC7D,MAAA,aAAA,CAAc,QAAA,GAAW,QAAA;AAAA,IAC3B,CAAA,MAAO;AACL,MAAA,aAAA,CAAc,KAAK,CAAA,GAAI,QAAA,CAAS,MAAM,WAAA,CAAY,KAAK,GAAG,EAAE,CAAA;AAAA,IAC9D;AAAA,EACF,CAAA,MAAA,IACE,OAAA,KAAY,UAAA,IACZ,OAAA,KAAY,cAAA,IACZ,OAAA,KAAY,UAAA,IACZ,OAAA,KAAY,cAAA,IACZ,OAAA,KAAY,WAAA,IACZ,OAAA,KAAY,aAAA,EACZ;AAEA,IAAA,MAAM,KAAA,GAAQ,MAAM,YAAA,CAAa,sBAAA,EAAwB;AAAA,MACvD,EAAE,IAAA,EAAM,cAAA,EAAgB,KAAA,EAAO,MAAA,EAAO;AAAA,MACtC,EAAE,IAAA,EAAM,aAAA,EAAe,KAAA,EAAO,aAAA,EAAc;AAAA,MAC5C,EAAE,IAAA,EAAM,YAAA,EAAc,KAAA,EAAO,YAAA;AAAa,KAC3C,CAAA;AACD,IAAA,IAAI,UAAU,MAAA,EAAQ;AACpB,MAAA,aAAA,CAAc,KAAK,CAAA,GACjB,KAAA,KAAU,aAAA,GACN,WAAW,MAAM,WAAA,CAAY,yBAAyB,CAAC,IACvD,QAAA,CAAS,MAAM,WAAA,CAAY,YAAY,GAAG,EAAE,CAAA;AAAA,IACpD;AAAA,EACF;AAEA,EAAA,IAAI,MAAA,CAAO,IAAA,CAAK,aAAa,CAAA,CAAE,SAAS,CAAA,EAAG;AACzC,IAAA,IAAA,CAAK,OAAO,CAAA,GAAI,aAAA;AAAA,EAClB;AAEA,EAAA,OAAO,IAAA;AACT;AAEO,SAAS,2BAA2BhC,QAAAA,EAAwB;AACjE,EAAA,MAAM,KAAKA,QAAAA,CAAQ,OAAA,CAAQ,aAAa,CAAA,CAAE,YAAY,6BAA6B,CAAA;AAEnF,EAAA,EAAA,CAAG,OAAA,CAAQ,MAAM,CAAA,CACd,WAAA,CAAY,mCAAmC,CAAA,CAC/C,MAAA;AAAA,IACC,UAAU,YAAY;AACpB,MAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,WAAA,EAAY;AACnC,MAAA,MAAM,IAAA,GAAO,MAAMgC,gBAAA,CAAM,WAAA,CAAY,IAAI,CAAA;AAEzC,MAAA,IAAI,IAAA,CAAK,QAAA,CAAS,MAAA,KAAW,CAAA,EAAG;AAC9B,QAAA,OAAA,CAAQ,IAAI,0BAA0B,CAAA;AACtC,QAAA;AAAA,MACF;AAEA,MAAA,UAAA;AAAA,QACE;AAAA,UACE,EAAE,QAAQ,IAAA,EAAM,KAAA,EAAO,IAAI,KAAA,EAAO,CAAC,CAAA,KAAM,CAAA,CAAE,WAAA,EAAsB;AAAA,UACjE,EAAE,MAAA,EAAQ,OAAA,EAAS,KAAA,EAAO,EAAA,EAAI,OAAO,CAAC,CAAA,KAAO,CAAA,CAAE,KAAA,IAAoB,YAAA,EAAa;AAAA,UAChF;AAAA,YACE,MAAA,EAAQ,SAAA;AAAA,YACR,KAAA,EAAO,EAAA;AAAA,YACP,KAAA,EAAO,CAAC,CAAA,KAAM,IAAI,KAAK,CAAA,CAAE,UAAoB,EAAE,cAAA;AAAe;AAChE,SACF;AAAA,QACA,IAAA,CAAK;AAAA,OACP;AAAA,IACF,CAAC;AAAA,GACH;AAEF,EAAA,EAAA,CAAG,OAAA,CAAQ,iBAAiB,CAAA,CACzB,WAAA,CAAY,iFAAiF,CAAA,CAC7F,MAAA;AAAA,IAAO,CAAC,QAAA,KACP,SAAA,CAAU,YAAY;AACpB,MAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,WAAA,EAAY;AACnC,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,QAAA,GAAW,MAAM,aAAa,sBAAA,EAAwB;AAAA,UACpD,EAAE,IAAA,EAAM,iBAAA,EAAmB,KAAA,EAAO,SAAA,EAAW,aAAa,mBAAA,EAAoB;AAAA,UAC9E,EAAE,IAAA,EAAM,6BAAA,EAA+B,KAAA,EAAO,UAAA;AAAW,SAC1D,CAAA;AACD,QAAA,IAAI,aAAa,UAAA,EAAY;AAC3B,UAAA,QAAA,GAAW,MAAM,WAAW,IAAI,CAAA;AAAA,QAClC;AAAA,MACF;AACA,MAAA,MAAM,IAAA,GAAO,MAAMA,gBAAA,CAAM,SAAA,CAAU,MAAM,QAAQ,CAAA;AACjD,MAAA,OAAA,CAAQ,IAAI,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,IAC3C,CAAC,CAAA;AAAE,GACL;AAEF,EAAA,EAAA,CAAG,QAAQ,aAAa,CAAA,CACrB,WAAA,CAAY,yDAAyD,EACrE,MAAA,CAAO,qBAAA,EAAuB,cAAc,CAAA,CAC5C,OAAO,oBAAA,EAAsB,iCAAiC,EAC9D,MAAA,CAAO,wBAAA,EAA0B,iCAAiC,CAAA,CAClE,MAAA;AAAA,IAAO,CAAC,IAAA,EAAe,IAAA,KACtB,SAAA,CAAU,YAAY;AACpB,MAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,WAAA,EAAY;AAEnC,MAAA,IAAI,IAAA;AACJ,MAAA,IAAI,IAAA,EAAM;AACR,QAAA,IAAA,GAAO,YAAA;AAAA,UACL,IAAA;AAAA,UACA,CAAA,kGAAA;AAAA,SACF;AACA,QAAA,IAAI,IAAA,EAAM,KAAA,EAAO,IAAA,CAAK,KAAA,GAAQ,IAAA,CAAK,KAAA;AAAA,MACrC,CAAA,MAAO;AACL,QAAA,IAAA,GAAO,MAAM,yBAAyB,IAAI,CAAA;AAAA,MAC5C;AAEA,MAAA,IAAI,IAAA,EAAM,GAAA,EAAK,IAAA,CAAK,UAAA,GAAa,IAAA,CAAK,GAAA;AACtC,MAAA,IAAI,IAAA,EAAM,OAAA,EAAS,IAAA,CAAK,qBAAA,GAAwB,IAAA,CAAK,OAAA;AAErD,MAAA,MAAM,IAAA,GAAO,MAAMA,gBAAA,CAAM,UAAA,CAAW,MAAM,IAAI,CAAA;AAC9C,MAAA,OAAA,CAAQ,GAAA,CAAI,UAAU,IAAA,CAAK,KAAA,IAAS,YAAY,CAAA,EAAA,EAAK,IAAA,CAAK,WAAW,CAAA,CAAA,CAAG,CAAA;AAAA,IAC1E,CAAC,CAAA;AAAE,GACL;AAEF,EAAA,EAAA,CAAG,OAAA,CAAQ,oBAAoB,CAAA,CAC5B,WAAA,CAAY,0CAA0C,CAAA,CACtD,MAAA;AAAA,IAAO,CAAC,QAAA,KACP,SAAA,CAAU,YAAY;AACpB,MAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,WAAA,EAAY;AACnC,MAAA,IAAI,CAAC,QAAA,EAAU,QAAA,GAAW,MAAM,UAAA,CAAW,MAAM,gCAAgC,CAAA;AACjF,MAAA,MAAM,IAAA,GAAO,MAAMA,gBAAA,CAAM,YAAA,CAAa,MAAM,QAAQ,CAAA;AACpD,MAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,MAAM,CAAA;AAAA,IACzB,CAAC,CAAA;AAAE,GACL;AAEF,EAAA,EAAA,CAAG,OAAA,CAAQ,QAAQ,CAAA,CAChB,WAAA,CAAY,+CAA+C,CAAA,CAC3D,MAAA;AAAA,IACC,UAAU,YAAY;AACpB,MAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,WAAA,EAAY;AACnC,MAAA,MAAM,IAAA,GAAO,MAAMA,gBAAA,CAAM,SAAA,CAAU,IAAI,CAAA;AACvC,MAAA,OAAA,CAAQ,IAAI,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,IAC3C,CAAC;AAAA,GACH;AAGF,EAAA,EAAA,CAAG,OAAO,YAAY;AACpB,IAAA,MAAM,GAAG,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,KAAM,EAAE,IAAA,EAAK,KAAM,MAAM,CAAA,CAAG,WAAW,EAAC,EAAG,EAAE,IAAA,EAAM,QAAQ,CAAA;AAAA,EACrF,CAAC,CAAA;AACH;AC5RO,SAAS,sBAAsBhC,QAAAA,EAAwB;AAC5D,EAAAA,SACG,OAAA,CAAQ,QAAQ,CAAA,CAChB,WAAA,CAAY,2BAA2B,CAAA,CACvC,MAAA;AAAA,IACC,UAAU,YAAY;AACpB,MAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,WAAA,EAAY;AACnC,MAAA,MAAM,IAAA,GAAO,MAAMiC,WAAA,CAAU,SAAA,CAAU,IAAI,CAAA;AAE3C,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,QAAA,EAAW,IAAA,CAAK,MAAM,CAAA,CAAE,CAAA;AACpC,MAAA,IAAI,KAAK,gBAAA,EAAkB,OAAA,CAAQ,IAAI,CAAA,SAAA,EAAY,IAAA,CAAK,gBAAgB,CAAA,CAAE,CAAA;AAC1E,MAAA,IAAI,KAAK,uBAAA,EAAyB,OAAA,CAAQ,IAAI,CAAA,UAAA,EAAa,IAAA,CAAK,uBAAuB,CAAA,CAAE,CAAA;AAEzF,MAAA,IAAI,IAAA,CAAK,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AAC5B,QAAA,OAAA,CAAQ,IAAI,aAAa,CAAA;AACzB,QAAA,KAAA,MAAW,CAAA,IAAK,KAAK,QAAA,EAAU;AAC7B,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,CAAA,CAAE,IAAI,KAAK,CAAA,CAAE,MAAM,CAAA,EAAG,CAAA,CAAE,SAAS,CAAA,QAAA,EAAM,CAAA,CAAE,MAAM,CAAA,CAAA,GAAK,EAAE,CAAA,CAAE,CAAA;AAAA,QAC3E;AAAA,MACF;AAEA,MAAA,IAAI,KAAK,aAAA,EAAe;AACtB,QAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,QAAA,EAAa,IAAA,CAAK,aAAA,CAAc,WAAW,CAAA,EAAA,CAAI,CAAA;AAC3D,QAAA,KAAA,MAAW,CAAA,IAAK,IAAA,CAAK,aAAA,CAAc,MAAA,EAAQ;AACzC,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,CAAA,CAAE,KAAK,KAAK,CAAA,CAAE,MAAM,CAAA,EAAG,CAAA,CAAE,SAAS,CAAA,QAAA,EAAM,CAAA,CAAE,MAAM,CAAA,CAAA,GAAK,EAAE,CAAA,CAAE,CAAA;AAAA,QAC5E;AAAA,MACF;AAAA,IACF,CAAC;AAAA,GACH;AAEF,EAAAjC,SACG,OAAA,CAAQ,QAAQ,CAAA,CAChB,WAAA,CAAY,0BAA0B,CAAA,CACtC,MAAA;AAAA,IACC,UAAU,YAAY;AACpB,MAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,WAAA,EAAY;AACnC,MAAA,MAAM,IAAA,GAAO,MAAMiC,WAAA,CAAU,eAAA,CAAgB,IAAI,CAAA;AAEjD,MAAA,IAAI,IAAA,CAAK,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG;AAC5B,QAAA,OAAA,CAAQ,IAAI,sBAAsB,CAAA;AAClC,QAAA;AAAA,MACF;AAEA,MAAA,UAAA;AAAA,QACE;AAAA,UACE,EAAE,QAAQ,MAAA,EAAQ,KAAA,EAAO,IAAI,KAAA,EAAO,CAAC,CAAA,KAAM,CAAA,CAAE,UAAA,EAAqB;AAAA,UAClE,EAAE,MAAA,EAAQ,UAAA,EAAY,KAAA,EAAO,EAAA,EAAI,OAAO,CAAC,CAAA,KAAO,CAAA,CAAE,QAAA,IAAuB,EAAA,EAAG;AAAA,UAC5E,EAAE,QAAQ,UAAA,EAAY,KAAA,EAAO,IAAI,KAAA,EAAO,CAAC,CAAA,KAAM,CAAA,CAAE,QAAA;AAAmB,SACtE;AAAA,QACA,IAAA,CAAK;AAAA,OACP;AAAA,IACF,CAAC;AAAA,GACH;AACJ;AClDO,SAAS,mBAAmBjC,QAAAA,EAAwB;AACzD,EAAAA,SACG,OAAA,CAAQ,KAAK,CAAA,CACb,WAAA,CAAY,gCAAgC,CAAA,CAC5C,MAAA,CAAO,sBAAA,EAAwB,qBAAqB,EACpD,kBAAA,CAAmB,IAAI,EACvB,MAAA,CAAO,CAAC,MAA8B,GAAA,KAAiB;AACtD,IAAA,MAAMkC,QAAAA,GAAUC,sBAAA,CAAc,2PAAe,CAAA;AAC7C,IAAA,MAAM,UAAA,GAAaD,QAAAA,CAAQ,OAAA,CAAQ,eAAe,CAAA;AAElD,IAAA,MAAM,OAAiB,EAAC;AACxB,IAAA,IAAI,KAAK,SAAA,EAAW;AAClB,MAAA,IAAA,CAAK,IAAA,CAAK,IAAA,EAAM,IAAA,CAAK,SAAS,CAAA;AAAA,IAChC;AACA,IAAA,IAAA,CAAK,IAAA,CAAK,GAAG,GAAA,CAAI,IAAI,CAAA;AAErB,IAAA,MAAM,KAAA,GAAQE,oBAAM,OAAA,CAAQ,QAAA,EAAU,CAAC,UAAA,EAAY,GAAG,IAAI,CAAA,EAAG;AAAA,MAC3D,KAAA,EAAO,SAAA;AAAA,MACP,KAAK,OAAA,CAAQ;AAAA,KACd,CAAA;AAED,IAAA,KAAA,CAAM,EAAA,CAAG,QAAQ,CAAC,IAAA,KAAS,QAAQ,IAAA,CAAK,IAAA,IAAQ,CAAC,CAAC,CAAA;AAAA,EACpD,CAAC,CAAA;AACL;;;AC3BA,OAAA,CAAQ,QAAQ,MAAM;AAAC,CAAA;AACvB,IAAM,YAAY,OAAA,CAAQ,IAAA;AAC1B,OAAA,CAAQ,IAAA,GAAO,IAAI,IAAA,KAAoB;AACrC,EAAA,IAAI,OAAO,IAAA,CAAK,CAAC,CAAA,KAAM,QAAA,IAAY,KAAK,CAAC,CAAA,CAAE,UAAA,CAAW,OAAO,CAAA,EAAG;AAChE,EAAA,SAAA,CAAU,GAAG,IAAI,CAAA;AACnB,CAAA;AAwBA,IAAM,OAAA,GAAU,IAAIC,iBAAA,EAAQ;AAE5B,OAAA,CAAQ,KAAK,MAAM,CAAA,CAAE,YAAY,sDAAiD,CAAA,CAAE,QAAQ,OAAO,CAAA;AAEnG,qBAAA,CAAsB,OAAO,CAAA;AAC7B,oBAAA,CAAqB,OAAO,CAAA;AAC5B,uBAAA,CAAwB,OAAO,CAAA;AAC/B,qBAAA,CAAsB,OAAO,CAAA;AAC7B,qBAAA,CAAsB,OAAO,CAAA;AAC7B,yBAAA,CAA0B,OAAO,CAAA;AACjC,mBAAA,CAAoB,OAAO,CAAA;AAC3B,qBAAA,CAAsB,OAAO,CAAA;AAC7B,uBAAA,CAAwB,OAAO,CAAA;AAC/B,kBAAA,CAAmB,OAAO,CAAA;AAC1B,oBAAA,CAAqB,OAAO,CAAA;AAC5B,uBAAA,CAAwB,OAAO,CAAA;AAC/B,iBAAA,CAAkB,OAAO,CAAA;AACzB,mBAAA,CAAoB,OAAO,CAAA;AAC3B,sBAAA,CAAuB,OAAO,CAAA;AAC9B,4BAAA,CAA6B,OAAO,CAAA;AACpC,uBAAA,CAAwB,OAAO,CAAA;AAC/B,0BAAA,CAA2B,OAAO,CAAA;AAClC,qBAAA,CAAsB,OAAO,CAAA;AAC7B,kBAAA,CAAmB,OAAO,CAAA;AAE1B,OAAA,CAAQ,KAAA,EAAM","file":"index.cjs","sourcesContent":["/**\n * CLI configuration persistence — thin wrapper around @arbidocs/core FileConfigStore.\n *\n * Provides module-level functions that delegate to the shared store instance.\n * The `require*` methods catch ArbiError and call process.exit(1) for CLI behavior.\n */\n\nimport { FileConfigStore, ArbiError } from '@arbidocs/core'\nimport type { CliConfig, CliCredentials, ChatSession } from '@arbidocs/core'\n\nexport type { CliConfig, CliCredentials, ChatSession }\n\n/** Shared store instance used by all CLI commands */\nexport const store = new FileConfigStore()\n\n// ── Config ───────────────────────────────────────────────────────────────────\n\nexport function getConfig(): CliConfig | null {\n return store.getConfig()\n}\n\nexport function saveConfig(config: CliConfig): void {\n store.saveConfig(config)\n}\n\nexport function updateConfig(updates: Partial<CliConfig>): void {\n store.updateConfig(updates)\n}\n\nexport function requireConfig(): CliConfig {\n try {\n return store.requireConfig()\n } catch (err) {\n if (err instanceof ArbiError) {\n console.error(err.message)\n process.exit(1)\n }\n throw err\n }\n}\n\n// ── Credentials ──────────────────────────────────────────────────────────────\n\nexport function getCredentials(): CliCredentials | null {\n return store.getCredentials()\n}\n\nexport function saveCredentials(creds: CliCredentials): void {\n store.saveCredentials(creds)\n}\n\nexport function deleteCredentials(): void {\n store.deleteCredentials()\n}\n\nexport function requireCredentials(): CliCredentials {\n try {\n return store.requireCredentials()\n } catch (err) {\n if (err instanceof ArbiError) {\n console.error(err.message)\n process.exit(1)\n }\n throw err\n }\n}\n\n// ── Chat session ─────────────────────────────────────────────────────────────\n\nexport function getChatSession(): ChatSession {\n return store.getChatSession()\n}\n\nexport function saveChatSession(session: ChatSession): void {\n store.saveChatSession(session)\n}\n\nexport function updateChatSession(updates: Partial<ChatSession>): void {\n store.updateChatSession(updates)\n}\n\nexport function clearChatSession(): void {\n store.clearChatSession()\n}\n","/**\n * arbi config set-url <url>\n */\n\nimport { Command } from 'commander'\nimport { updateConfig } from '../config.js'\n\nexport function registerConfigCommand(program: Command): void {\n const config = program.command('config').description('Manage CLI configuration')\n\n config\n .command('set-url <url>')\n .description('Set the ARBI server URL')\n .action((url: string) => {\n try {\n const parsed = new URL(url)\n const deploymentDomain = parsed.hostname\n updateConfig({ baseUrl: url.replace(/\\/+$/, ''), deploymentDomain })\n console.log(`Server URL: ${url}`)\n console.log(`Domain: ${deploymentDomain}`)\n } catch {\n console.error(`Invalid URL: ${url}`)\n process.exit(1)\n }\n })\n}\n","const messages = {\n AbortError: \"A request was aborted, for example through a call to IDBTransaction.abort.\",\n ConstraintError: \"A mutation operation in the transaction failed because a constraint was not satisfied. For example, an object such as an object store or index already exists and a request attempted to create a new one.\",\n DataCloneError: \"The data being stored could not be cloned by the internal structured cloning algorithm.\",\n DataError: \"Data provided to an operation does not meet requirements.\",\n InvalidAccessError: \"An invalid operation was performed on an object. For example transaction creation attempt was made, but an empty scope was provided.\",\n InvalidStateError: \"An operation was called on an object on which it is not allowed or at a time when it is not allowed. Also occurs if a request is made on a source object that has been deleted or removed. Use TransactionInactiveError or ReadOnlyError when possible, as they are more specific variations of InvalidStateError.\",\n NotFoundError: \"The operation failed because the requested database object could not be found. For example, an object store did not exist but was being opened.\",\n ReadOnlyError: 'The mutating operation was attempted in a \"readonly\" transaction.',\n TransactionInactiveError: \"A request was placed against a transaction which is currently not active, or which is finished.\",\n SyntaxError: \"The keypath argument contains an invalid key path\",\n VersionError: \"An attempt was made to open a database using a lower version than the existing version.\"\n};\n\n// Cannot set an error code on an error using the normal setter;\n// this leads to \"Cannot set property code of which has only a getter\"\nconst setErrorCode = (error, value) => {\n Object.defineProperty(error, 'code', {\n value,\n writable: false,\n enumerable: true,\n configurable: false\n });\n};\nexport class AbortError extends DOMException {\n constructor(message = messages.AbortError) {\n super(message, \"AbortError\");\n }\n}\nexport class ConstraintError extends DOMException {\n constructor(message = messages.ConstraintError) {\n super(message, \"ConstraintError\");\n }\n}\nexport class DataCloneError extends DOMException {\n constructor(message = messages.DataCloneError) {\n super(message, \"DataCloneError\");\n }\n}\nexport class DataError extends DOMException {\n constructor(message = messages.DataError) {\n super(message, \"DataError\");\n setErrorCode(this, 0);\n }\n}\nexport class InvalidAccessError extends DOMException {\n constructor(message = messages.InvalidAccessError) {\n super(message, \"InvalidAccessError\");\n }\n}\nexport class InvalidStateError extends DOMException {\n constructor(message = messages.InvalidStateError) {\n super(message, \"InvalidStateError\");\n setErrorCode(this, 11);\n }\n}\nexport class NotFoundError extends DOMException {\n constructor(message = messages.NotFoundError) {\n super(message, \"NotFoundError\");\n }\n}\nexport class ReadOnlyError extends DOMException {\n constructor(message = messages.ReadOnlyError) {\n super(message, \"ReadOnlyError\");\n }\n}\nexport class SyntaxError extends DOMException {\n constructor(message = messages.VersionError) {\n super(message, \"SyntaxError\");\n setErrorCode(this, 12);\n }\n}\nexport class TransactionInactiveError extends DOMException {\n constructor(message = messages.TransactionInactiveError) {\n super(message, \"TransactionInactiveError\");\n setErrorCode(this, 0);\n }\n}\nexport class VersionError extends DOMException {\n constructor(message = messages.VersionError) {\n super(message, \"VersionError\");\n }\n}","export default function isSharedArrayBuffer(input) {\n return typeof SharedArrayBuffer !== \"undefined\" && input instanceof SharedArrayBuffer;\n}","import isSharedArrayBuffer from \"./isSharedArrayBuffer.js\";\nexport const INVALID_TYPE = Symbol(\"INVALID_TYPE\");\nexport const INVALID_VALUE = Symbol(\"INVALID_VALUE\");\n\n// https://w3c.github.io/IndexedDB/#convert-value-to-key\n// The \"without exceptions\" version is because we typically want to throw exceptions (DataError) but not for\n// the \"is potentially valid key range\" routine.\nconst valueToKeyWithoutThrowing = (input, seen) => {\n if (typeof input === \"number\") {\n if (isNaN(input)) {\n // If input is NaN then return \"invalid value\".\n return INVALID_VALUE;\n }\n return input;\n } else if (Object.prototype.toString.call(input) === \"[object Date]\") {\n const ms = input.valueOf();\n if (isNaN(ms)) {\n // If ms is NaN then return \"invalid value\".\n return INVALID_VALUE;\n }\n return new Date(ms);\n } else if (typeof input === \"string\") {\n return input;\n } else if (\n // https://w3c.github.io/IndexedDB/#ref-for-dfn-buffer-source-type\n input instanceof ArrayBuffer || isSharedArrayBuffer(input) || typeof ArrayBuffer !== \"undefined\" && ArrayBuffer.isView && ArrayBuffer.isView(input)) {\n // We can't consistently test detachedness, so instead we check if byteLength === 0\n // This isn't foolproof, but there's no perfect way to detect if Uint8Arrays or\n // SharedArrayBuffers are detached\n if (\"detached\" in input ? input.detached : input.byteLength === 0) {\n // If input is detached then return \"invalid value\".\n return INVALID_VALUE;\n }\n let arrayBuffer;\n let offset = 0;\n let length = 0;\n if (input instanceof ArrayBuffer || isSharedArrayBuffer(input)) {\n arrayBuffer = input;\n length = input.byteLength;\n } else {\n arrayBuffer = input.buffer;\n offset = input.byteOffset;\n length = input.byteLength;\n }\n return arrayBuffer.slice(offset, offset + length);\n } else if (Array.isArray(input)) {\n if (seen === undefined) {\n seen = new Set();\n } else if (seen.has(input)) {\n // If seen contains input, then return \"invalid value\".\n return INVALID_VALUE;\n }\n seen.add(input);\n\n // This algorithm is tricky to account for `bindings-inject-keys-bypass.any.js`. We _should_ return early when\n // encountering an invalid key/type, but we also need to avoid triggering `Object.prototype['10']` if it's been\n // overridden. One simple way to do this (and which doesn't rely on sparse arrays or other exotic solutions that\n // could cause de-opts) is to use `Array.from()` with a mapper function, which does not trigger the prototype\n // setter [1]. It does prevent an early return, but we can at least short-circuit inside the mapper function\n // (which isn't strictly necessary to pass the WPTs, but is closer to the spec).\n // [1]: See https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.from, specifically\n // the chain CreateDataPropertyOrThrow -> CreateDataProperty -> DefineOwnProperty which defines\n // the array element as an \"own\" property.\n let hasInvalid = false;\n const keys = Array.from({\n length: input.length\n }, (_, i) => {\n if (hasInvalid) {\n return;\n }\n const hop = Object.hasOwn(input, i);\n if (!hop) {\n // If hop is false, return \"invalid value\".\n hasInvalid = true;\n return;\n }\n const entry = input[i];\n const key = valueToKeyWithoutThrowing(entry, seen);\n // If key is \"invalid value\" or \"invalid type\" abort these steps and return \"invalid value\".\n if (key === INVALID_VALUE || key === INVALID_TYPE) {\n hasInvalid = true;\n return;\n }\n return key;\n });\n if (hasInvalid) {\n return INVALID_VALUE;\n }\n return keys;\n } else {\n // Otherwise: Return \"invalid type\".\n return INVALID_TYPE;\n }\n};\nexport default valueToKeyWithoutThrowing;","import { DataError } from \"./errors.js\";\nimport valueToKeyWithoutThrowing, { INVALID_TYPE, INVALID_VALUE } from \"./valueToKeyWithoutThrowing.js\";\n// https://w3c.github.io/IndexedDB/#convert-value-to-key\n// Plus throwing a DataError for invalid value/invalid key, which is commonly done\n// in lots of IndexedDB operations\nconst valueToKey = (input, seen) => {\n const result = valueToKeyWithoutThrowing(input, seen);\n if (result === INVALID_VALUE || result === INVALID_TYPE) {\n // If key is \"invalid value\" or \"invalid type\", throw a \"DataError\" DOMException\n throw new DataError();\n }\n return result;\n};\nexport default valueToKey;","import { DataError } from \"./errors.js\";\nimport valueToKey from \"./valueToKey.js\";\nconst getType = x => {\n if (typeof x === \"number\") {\n return \"Number\";\n }\n if (Object.prototype.toString.call(x) === \"[object Date]\") {\n return \"Date\";\n }\n if (Array.isArray(x)) {\n return \"Array\";\n }\n if (typeof x === \"string\") {\n return \"String\";\n }\n if (x instanceof ArrayBuffer) {\n return \"Binary\";\n }\n throw new DataError();\n};\n\n// https://w3c.github.io/IndexedDB/#compare-two-keys\nconst cmp = (first, second) => {\n if (second === undefined) {\n throw new TypeError();\n }\n first = valueToKey(first);\n second = valueToKey(second);\n const t1 = getType(first);\n const t2 = getType(second);\n if (t1 !== t2) {\n if (t1 === \"Array\") {\n return 1;\n }\n if (t1 === \"Binary\" && (t2 === \"String\" || t2 === \"Date\" || t2 === \"Number\")) {\n return 1;\n }\n if (t1 === \"String\" && (t2 === \"Date\" || t2 === \"Number\")) {\n return 1;\n }\n if (t1 === \"Date\" && t2 === \"Number\") {\n return 1;\n }\n return -1;\n }\n if (t1 === \"Binary\") {\n first = new Uint8Array(first);\n second = new Uint8Array(second);\n }\n if (t1 === \"Array\" || t1 === \"Binary\") {\n const length = Math.min(first.length, second.length);\n for (let i = 0; i < length; i++) {\n const result = cmp(first[i], second[i]);\n if (result !== 0) {\n return result;\n }\n }\n if (first.length > second.length) {\n return 1;\n }\n if (first.length < second.length) {\n return -1;\n }\n return 0;\n }\n if (t1 === \"Date\") {\n if (first.getTime() === second.getTime()) {\n return 0;\n }\n } else {\n if (first === second) {\n return 0;\n }\n }\n return first > second ? 1 : -1;\n};\nexport default cmp;","import cmp from \"./lib/cmp.js\";\nimport { DataError } from \"./lib/errors.js\";\nimport valueToKey from \"./lib/valueToKey.js\";\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#range-concept\nclass FDBKeyRange {\n static only(value) {\n if (arguments.length === 0) {\n throw new TypeError();\n }\n value = valueToKey(value);\n return new FDBKeyRange(value, value, false, false);\n }\n static lowerBound(lower, open = false) {\n if (arguments.length === 0) {\n throw new TypeError();\n }\n lower = valueToKey(lower);\n return new FDBKeyRange(lower, undefined, open, true);\n }\n static upperBound(upper, open = false) {\n if (arguments.length === 0) {\n throw new TypeError();\n }\n upper = valueToKey(upper);\n return new FDBKeyRange(undefined, upper, true, open);\n }\n static bound(lower, upper, lowerOpen = false, upperOpen = false) {\n if (arguments.length < 2) {\n throw new TypeError();\n }\n const cmpResult = cmp(lower, upper);\n if (cmpResult === 1 || cmpResult === 0 && (lowerOpen || upperOpen)) {\n throw new DataError();\n }\n lower = valueToKey(lower);\n upper = valueToKey(upper);\n return new FDBKeyRange(lower, upper, lowerOpen, upperOpen);\n }\n constructor(lower, upper, lowerOpen, upperOpen) {\n this.lower = lower;\n this.upper = upper;\n this.lowerOpen = lowerOpen;\n this.upperOpen = upperOpen;\n }\n\n // https://w3c.github.io/IndexedDB/#dom-idbkeyrange-includes\n includes(key) {\n if (arguments.length === 0) {\n throw new TypeError();\n }\n key = valueToKey(key);\n if (this.lower !== undefined) {\n const cmpResult = cmp(this.lower, key);\n if (cmpResult === 1 || cmpResult === 0 && this.lowerOpen) {\n return false;\n }\n }\n if (this.upper !== undefined) {\n const cmpResult = cmp(this.upper, key);\n if (cmpResult === -1 || cmpResult === 0 && this.upperOpen) {\n return false;\n }\n }\n return true;\n }\n get [Symbol.toStringTag]() {\n return \"IDBKeyRange\";\n }\n}\nexport default FDBKeyRange;","import valueToKey from \"./valueToKey.js\";\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-extracting-a-key-from-a-value-using-a-key-path\nconst extractKey = (keyPath, value) => {\n if (Array.isArray(keyPath)) {\n const result = [];\n for (let item of keyPath) {\n // This doesn't make sense to me based on the spec, but it is needed to pass the W3C KeyPath tests (see same\n // comment in validateKeyPath)\n if (item !== undefined && item !== null && typeof item !== \"string\" && item.toString) {\n item = item.toString();\n }\n const key = extractKey(item, value).key;\n result.push(valueToKey(key));\n }\n return {\n type: \"found\",\n key: result\n };\n }\n if (keyPath === \"\") {\n return {\n type: \"found\",\n key: value\n };\n }\n let remainingKeyPath = keyPath;\n let object = value;\n while (remainingKeyPath !== null) {\n let identifier;\n const i = remainingKeyPath.indexOf(\".\");\n if (i >= 0) {\n identifier = remainingKeyPath.slice(0, i);\n remainingKeyPath = remainingKeyPath.slice(i + 1);\n } else {\n identifier = remainingKeyPath;\n remainingKeyPath = null;\n }\n\n // special cases: https://w3c.github.io/IndexedDB/#evaluate-a-key-path-on-a-value\n const isSpecialIdentifier = identifier === \"length\" && (typeof object === \"string\" || Array.isArray(object)) || (identifier === \"size\" || identifier === \"type\") && typeof Blob !== \"undefined\" && object instanceof Blob || (identifier === \"name\" || identifier === \"lastModified\") && typeof File !== \"undefined\" && object instanceof File;\n if (!isSpecialIdentifier && (typeof object !== \"object\" || object === null || !Object.hasOwn(object, identifier))) {\n return {\n type: \"notFound\"\n };\n }\n object = object[identifier];\n }\n return {\n type: \"found\",\n key: object\n };\n};\nexport default extractKey;","// https://w3c.github.io/IndexedDB/#clone-value\n// Note that we only need to call this during insertions because the spec does not expect any cloning during retrieval,\n// only `StructuredDeserialize()` (e.g. see [1]). This is also only required for values, not keys, since keys do not\n// require cloning during insertion (e.g. see [2]).\n// [1]: https://w3c.github.io/IndexedDB/#retrieve-multiple-items-from-an-object-store\n// [2]: https://w3c.github.io/IndexedDB/#add-or-put\nexport function cloneValueForInsertion(value, transaction) {\n // Assert: transaction’s state is active.\n if (transaction._state !== \"active\") {\n throw new Error(\"Assert: transaction state is active\");\n }\n\n // Set transaction’s state to inactive.\n transaction._state = \"inactive\";\n try {\n // Let serialized be StructuredSerializeForStorage(value).\n // Let clone be ? StructuredDeserialize(serialized, targetRealm).\n // Return clone.\n return structuredClone(value);\n } finally {\n // Set transaction’s state to active.\n transaction._state = \"active\";\n }\n}","import FDBKeyRange from \"./FDBKeyRange.js\";\nimport FDBObjectStore from \"./FDBObjectStore.js\";\nimport cmp from \"./lib/cmp.js\";\nimport { DataError, InvalidAccessError, InvalidStateError, ReadOnlyError, TransactionInactiveError } from \"./lib/errors.js\";\nimport extractKey from \"./lib/extractKey.js\";\nimport valueToKey from \"./lib/valueToKey.js\";\nimport { cloneValueForInsertion } from \"./lib/cloneValueForInsertion.js\";\nconst getEffectiveObjectStore = cursor => {\n if (cursor.source instanceof FDBObjectStore) {\n return cursor.source;\n }\n return cursor.source.objectStore;\n};\n\n// This takes a key range, a list of lower bounds, and a list of upper bounds and combines them all into a single key\n// range. It does not handle gt/gte distinctions, because it doesn't really matter much anyway, since for next/prev\n// cursor iteration it'd also have to look at values to be precise, which would be complicated. This should get us 99%\n// of the way there.\nconst makeKeyRange = (range, lowers, uppers) => {\n // Start with bounds from range\n let lower = range !== undefined ? range.lower : undefined;\n let upper = range !== undefined ? range.upper : undefined;\n\n // Augment with values from lowers and uppers\n for (const lowerTemp of lowers) {\n if (lowerTemp === undefined) {\n continue;\n }\n if (lower === undefined || cmp(lower, lowerTemp) === 1) {\n lower = lowerTemp;\n }\n }\n for (const upperTemp of uppers) {\n if (upperTemp === undefined) {\n continue;\n }\n if (upper === undefined || cmp(upper, upperTemp) === -1) {\n upper = upperTemp;\n }\n }\n if (lower !== undefined && upper !== undefined) {\n return FDBKeyRange.bound(lower, upper);\n }\n if (lower !== undefined) {\n return FDBKeyRange.lowerBound(lower);\n }\n if (upper !== undefined) {\n return FDBKeyRange.upperBound(upper);\n }\n};\n\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#cursor\nclass FDBCursor {\n _gotValue = false;\n _position = undefined; // Key of previously returned record\n _objectStorePosition = undefined;\n _keyOnly = false;\n _key = undefined;\n _primaryKey = undefined;\n constructor(source, range, direction = \"next\", request, keyOnly = false) {\n this._range = range;\n this._source = source;\n this._direction = direction;\n this._request = request;\n this._keyOnly = keyOnly;\n }\n\n // Read only properties\n get source() {\n return this._source;\n }\n set source(val) {\n /* For babel */\n }\n get request() {\n return this._request;\n }\n set request(val) {\n /* For babel */\n }\n get direction() {\n return this._direction;\n }\n set direction(val) {\n /* For babel */\n }\n get key() {\n return this._key;\n }\n set key(val) {\n /* For babel */\n }\n get primaryKey() {\n return this._primaryKey;\n }\n set primaryKey(val) {\n /* For babel */\n }\n\n // https://w3c.github.io/IndexedDB/#iterate-a-cursor\n _iterate(key, primaryKey) {\n const sourceIsObjectStore = this.source instanceof FDBObjectStore;\n\n // Can't use sourceIsObjectStore because TypeScript\n const records = this.source instanceof FDBObjectStore ? this.source._rawObjectStore.records : this.source._rawIndex.records;\n let foundRecord;\n if (this.direction === \"next\") {\n const range = makeKeyRange(this._range, [key, this._position], []);\n for (const record of records.values(range)) {\n const cmpResultKey = key !== undefined ? cmp(record.key, key) : undefined;\n const cmpResultPosition = this._position !== undefined ? cmp(record.key, this._position) : undefined;\n if (key !== undefined) {\n if (cmpResultKey === -1) {\n continue;\n }\n }\n if (primaryKey !== undefined) {\n if (cmpResultKey === -1) {\n continue;\n }\n const cmpResultPrimaryKey = cmp(record.value, primaryKey);\n if (cmpResultKey === 0 && cmpResultPrimaryKey === -1) {\n continue;\n }\n }\n if (this._position !== undefined && sourceIsObjectStore) {\n if (cmpResultPosition !== 1) {\n continue;\n }\n }\n if (this._position !== undefined && !sourceIsObjectStore) {\n if (cmpResultPosition === -1) {\n continue;\n }\n if (cmpResultPosition === 0 && cmp(record.value, this._objectStorePosition) !== 1) {\n continue;\n }\n }\n if (this._range !== undefined) {\n if (!this._range.includes(record.key)) {\n continue;\n }\n }\n foundRecord = record;\n break;\n }\n } else if (this.direction === \"nextunique\") {\n // This could be done without iterating, if the range was defined slightly better (to handle gt/gte cases).\n // But the performance difference should be small, and that wouldn't work anyway for directions where the\n // value needs to be used (like next and prev).\n const range = makeKeyRange(this._range, [key, this._position], []);\n for (const record of records.values(range)) {\n if (key !== undefined) {\n if (cmp(record.key, key) === -1) {\n continue;\n }\n }\n if (this._position !== undefined) {\n if (cmp(record.key, this._position) !== 1) {\n continue;\n }\n }\n if (this._range !== undefined) {\n if (!this._range.includes(record.key)) {\n continue;\n }\n }\n foundRecord = record;\n break;\n }\n } else if (this.direction === \"prev\") {\n const range = makeKeyRange(this._range, [], [key, this._position]);\n for (const record of records.values(range, \"prev\")) {\n const cmpResultKey = key !== undefined ? cmp(record.key, key) : undefined;\n const cmpResultPosition = this._position !== undefined ? cmp(record.key, this._position) : undefined;\n if (key !== undefined) {\n if (cmpResultKey === 1) {\n continue;\n }\n }\n if (primaryKey !== undefined) {\n if (cmpResultKey === 1) {\n continue;\n }\n const cmpResultPrimaryKey = cmp(record.value, primaryKey);\n if (cmpResultKey === 0 && cmpResultPrimaryKey === 1) {\n continue;\n }\n }\n if (this._position !== undefined && sourceIsObjectStore) {\n if (cmpResultPosition !== -1) {\n continue;\n }\n }\n if (this._position !== undefined && !sourceIsObjectStore) {\n if (cmpResultPosition === 1) {\n continue;\n }\n if (cmpResultPosition === 0 && cmp(record.value, this._objectStorePosition) !== -1) {\n continue;\n }\n }\n if (this._range !== undefined) {\n if (!this._range.includes(record.key)) {\n continue;\n }\n }\n foundRecord = record;\n break;\n }\n } else if (this.direction === \"prevunique\") {\n let tempRecord;\n const range = makeKeyRange(this._range, [], [key, this._position]);\n for (const record of records.values(range, \"prev\")) {\n if (key !== undefined) {\n if (cmp(record.key, key) === 1) {\n continue;\n }\n }\n if (this._position !== undefined) {\n if (cmp(record.key, this._position) !== -1) {\n continue;\n }\n }\n if (this._range !== undefined) {\n if (!this._range.includes(record.key)) {\n continue;\n }\n }\n tempRecord = record;\n break;\n }\n if (tempRecord) {\n foundRecord = records.get(tempRecord.key);\n }\n }\n let result;\n if (!foundRecord) {\n this._key = undefined;\n if (!sourceIsObjectStore) {\n this._objectStorePosition = undefined;\n }\n\n // \"this instanceof FDBCursorWithValue\" would be better and not require (this as any), but causes runtime\n // error due to circular dependency.\n if (!this._keyOnly && this.toString() === \"[object IDBCursorWithValue]\") {\n this.value = undefined;\n }\n result = null;\n } else {\n this._position = foundRecord.key;\n if (!sourceIsObjectStore) {\n this._objectStorePosition = foundRecord.value;\n }\n this._key = foundRecord.key;\n if (sourceIsObjectStore) {\n this._primaryKey = structuredClone(foundRecord.key);\n if (!this._keyOnly && this.toString() === \"[object IDBCursorWithValue]\") {\n this.value = structuredClone(foundRecord.value);\n }\n } else {\n this._primaryKey = structuredClone(foundRecord.value);\n if (!this._keyOnly && this.toString() === \"[object IDBCursorWithValue]\") {\n if (this.source instanceof FDBObjectStore) {\n // Can't use sourceIsObjectStore because TypeScript\n throw new Error(\"This should never happen\");\n }\n const value = this.source.objectStore._rawObjectStore.getValue(foundRecord.value);\n this.value = structuredClone(value);\n }\n }\n this._gotValue = true;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n result = this;\n }\n return result;\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBCursor-update-IDBRequest-any-value\n update(value) {\n if (value === undefined) {\n throw new TypeError();\n }\n const effectiveObjectStore = getEffectiveObjectStore(this);\n const effectiveKey = Object.hasOwn(this.source, \"_rawIndex\") ? this.primaryKey : this._position;\n const transaction = effectiveObjectStore.transaction;\n if (transaction._state !== \"active\") {\n throw new TransactionInactiveError();\n }\n if (transaction.mode === \"readonly\") {\n throw new ReadOnlyError();\n }\n if (effectiveObjectStore._rawObjectStore.deleted) {\n throw new InvalidStateError();\n }\n if (!(this.source instanceof FDBObjectStore) && this.source._rawIndex.deleted) {\n throw new InvalidStateError();\n }\n if (!this._gotValue || !Object.hasOwn(this, \"value\")) {\n throw new InvalidStateError();\n }\n const clone = cloneValueForInsertion(value, transaction);\n if (effectiveObjectStore.keyPath !== null) {\n let tempKey;\n try {\n tempKey = extractKey(effectiveObjectStore.keyPath, clone).key;\n } catch (err) {\n /* Handled immediately below */\n }\n if (cmp(tempKey, effectiveKey) !== 0) {\n throw new DataError();\n }\n }\n const record = {\n key: effectiveKey,\n value: clone\n };\n return transaction._execRequestAsync({\n operation: effectiveObjectStore._rawObjectStore.storeRecord.bind(effectiveObjectStore._rawObjectStore, record, false, transaction._rollbackLog),\n source: this\n });\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBCursor-advance-void-unsigned-long-count\n advance(count) {\n if (!Number.isInteger(count) || count <= 0) {\n throw new TypeError();\n }\n const effectiveObjectStore = getEffectiveObjectStore(this);\n const transaction = effectiveObjectStore.transaction;\n if (transaction._state !== \"active\") {\n throw new TransactionInactiveError();\n }\n if (effectiveObjectStore._rawObjectStore.deleted) {\n throw new InvalidStateError();\n }\n if (!(this.source instanceof FDBObjectStore) && this.source._rawIndex.deleted) {\n throw new InvalidStateError();\n }\n if (!this._gotValue) {\n throw new InvalidStateError();\n }\n if (this._request) {\n this._request.readyState = \"pending\";\n }\n transaction._execRequestAsync({\n operation: () => {\n let result;\n for (let i = 0; i < count; i++) {\n result = this._iterate();\n\n // Not sure why this is needed\n if (!result) {\n break;\n }\n }\n return result;\n },\n request: this._request,\n source: this.source\n });\n this._gotValue = false;\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBCursor-continue-void-any-key\n continue(key) {\n const effectiveObjectStore = getEffectiveObjectStore(this);\n const transaction = effectiveObjectStore.transaction;\n if (transaction._state !== \"active\") {\n throw new TransactionInactiveError();\n }\n if (effectiveObjectStore._rawObjectStore.deleted) {\n throw new InvalidStateError();\n }\n if (!(this.source instanceof FDBObjectStore) && this.source._rawIndex.deleted) {\n throw new InvalidStateError();\n }\n if (!this._gotValue) {\n throw new InvalidStateError();\n }\n if (key !== undefined) {\n key = valueToKey(key);\n const cmpResult = cmp(key, this._position);\n if (cmpResult <= 0 && (this.direction === \"next\" || this.direction === \"nextunique\") || cmpResult >= 0 && (this.direction === \"prev\" || this.direction === \"prevunique\")) {\n throw new DataError();\n }\n }\n if (this._request) {\n this._request.readyState = \"pending\";\n }\n transaction._execRequestAsync({\n operation: this._iterate.bind(this, key),\n request: this._request,\n source: this.source\n });\n this._gotValue = false;\n }\n\n // hthttps://w3c.github.io/IndexedDB/#dom-idbcursor-continueprimarykey\n continuePrimaryKey(key, primaryKey) {\n const effectiveObjectStore = getEffectiveObjectStore(this);\n const transaction = effectiveObjectStore.transaction;\n if (transaction._state !== \"active\") {\n throw new TransactionInactiveError();\n }\n if (effectiveObjectStore._rawObjectStore.deleted) {\n throw new InvalidStateError();\n }\n if (!(this.source instanceof FDBObjectStore) && this.source._rawIndex.deleted) {\n throw new InvalidStateError();\n }\n if (this.source instanceof FDBObjectStore || this.direction !== \"next\" && this.direction !== \"prev\") {\n throw new InvalidAccessError();\n }\n if (!this._gotValue) {\n throw new InvalidStateError();\n }\n\n // Not sure about this\n if (key === undefined || primaryKey === undefined) {\n throw new DataError();\n }\n key = valueToKey(key);\n const cmpResult = cmp(key, this._position);\n if (cmpResult === -1 && this.direction === \"next\" || cmpResult === 1 && this.direction === \"prev\") {\n throw new DataError();\n }\n const cmpResult2 = cmp(primaryKey, this._objectStorePosition);\n if (cmpResult === 0) {\n if (cmpResult2 <= 0 && this.direction === \"next\" || cmpResult2 >= 0 && this.direction === \"prev\") {\n throw new DataError();\n }\n }\n if (this._request) {\n this._request.readyState = \"pending\";\n }\n transaction._execRequestAsync({\n operation: this._iterate.bind(this, key, primaryKey),\n request: this._request,\n source: this.source\n });\n this._gotValue = false;\n }\n delete() {\n const effectiveObjectStore = getEffectiveObjectStore(this);\n const effectiveKey = Object.hasOwn(this.source, \"_rawIndex\") ? this.primaryKey : this._position;\n const transaction = effectiveObjectStore.transaction;\n if (transaction._state !== \"active\") {\n throw new TransactionInactiveError();\n }\n if (transaction.mode === \"readonly\") {\n throw new ReadOnlyError();\n }\n if (effectiveObjectStore._rawObjectStore.deleted) {\n throw new InvalidStateError();\n }\n if (!(this.source instanceof FDBObjectStore) && this.source._rawIndex.deleted) {\n throw new InvalidStateError();\n }\n if (!this._gotValue || !Object.hasOwn(this, \"value\")) {\n throw new InvalidStateError();\n }\n return transaction._execRequestAsync({\n operation: effectiveObjectStore._rawObjectStore.deleteRecord.bind(effectiveObjectStore._rawObjectStore, effectiveKey, transaction._rollbackLog),\n source: this\n });\n }\n get [Symbol.toStringTag]() {\n return \"IDBCursor\";\n }\n}\nexport default FDBCursor;","import FDBCursor from \"./FDBCursor.js\";\nclass FDBCursorWithValue extends FDBCursor {\n value = undefined;\n constructor(source, range, direction, request) {\n super(source, range, direction, request);\n }\n get [Symbol.toStringTag]() {\n return \"IDBCursorWithValue\";\n }\n}\nexport default FDBCursorWithValue;","import { InvalidStateError } from \"./errors.js\";\nconst stopped = (event, listener) => {\n return event.immediatePropagationStopped || event.eventPhase === event.CAPTURING_PHASE && listener.capture === false || event.eventPhase === event.BUBBLING_PHASE && listener.capture === true;\n};\n\n// http://www.w3.org/TR/dom/#concept-event-listener-invoke\nconst invokeEventListeners = (event, obj) => {\n event.currentTarget = obj;\n const errors = [];\n const invoke = callbackOrObject => {\n try {\n const callback = typeof callbackOrObject === \"function\" ? callbackOrObject : callbackOrObject.handleEvent;\n // @ts-expect-error EventCallback's types are not quite right here\n callback.call(event.currentTarget, event);\n } catch (err) {\n errors.push(err);\n }\n };\n\n // The callback might cause obj.listeners to mutate as we traverse it.\n // Take a copy of the array so that nothing sneaks in and we don't lose\n // our place.\n for (const listener of obj.listeners.slice()) {\n if (event.type !== listener.type || stopped(event, listener)) {\n continue;\n }\n invoke(listener.callback);\n }\n const typeToProp = {\n abort: \"onabort\",\n blocked: \"onblocked\",\n close: \"onclose\",\n complete: \"oncomplete\",\n error: \"onerror\",\n success: \"onsuccess\",\n upgradeneeded: \"onupgradeneeded\",\n versionchange: \"onversionchange\"\n };\n const prop = typeToProp[event.type];\n if (prop === undefined) {\n throw new Error(`Unknown event type: \"${event.type}\"`);\n }\n const callback = event.currentTarget[prop];\n if (callback) {\n const listener = {\n callback,\n capture: false,\n type: event.type\n };\n if (!stopped(event, listener)) {\n invoke(listener.callback);\n }\n }\n\n // we want to execute all listeners before deciding if we want to throw, because there could be an error thrown by\n // the first listener, but the second should still be invoked\n if (errors.length) {\n throw new AggregateError(errors);\n }\n};\nclass FakeEventTarget {\n listeners = [];\n\n // These will be overridden in individual subclasses and made not readonly\n\n addEventListener(type, callback, options) {\n const capture = !!(typeof options === \"object\" && options ? options.capture : options);\n this.listeners.push({\n callback,\n capture,\n type\n });\n }\n removeEventListener(type, callback, options) {\n const capture = !!(typeof options === \"object\" && options ? options.capture : options);\n const i = this.listeners.findIndex(listener => {\n return listener.type === type && listener.callback === callback && listener.capture === capture;\n });\n this.listeners.splice(i, 1);\n }\n\n // http://www.w3.org/TR/dom/#dispatching-events\n dispatchEvent(event) {\n if (event.dispatched || !event.initialized) {\n throw new InvalidStateError(\"The object is in an invalid state.\");\n }\n event.isTrusted = false;\n event.dispatched = true;\n event.target = this;\n // NOT SURE WHEN THIS SHOULD BE SET event.eventPath = [];\n\n event.eventPhase = event.CAPTURING_PHASE;\n for (const obj of event.eventPath) {\n if (!event.propagationStopped) {\n invokeEventListeners(event, obj);\n }\n }\n event.eventPhase = event.AT_TARGET;\n if (!event.propagationStopped) {\n invokeEventListeners(event, event.target);\n }\n if (event.bubbles) {\n event.eventPath.reverse();\n event.eventPhase = event.BUBBLING_PHASE;\n for (const obj of event.eventPath) {\n if (!event.propagationStopped) {\n invokeEventListeners(event, obj);\n }\n }\n }\n event.dispatched = false;\n event.eventPhase = event.NONE;\n event.currentTarget = null;\n if (event.canceled) {\n return false;\n }\n return true;\n }\n}\nexport default FakeEventTarget;","import { InvalidStateError } from \"./lib/errors.js\";\nimport FakeEventTarget from \"./lib/FakeEventTarget.js\";\nclass FDBRequest extends FakeEventTarget {\n _result = null;\n _error = null;\n source = null;\n transaction = null;\n readyState = \"pending\";\n onsuccess = null;\n onerror = null;\n get error() {\n if (this.readyState === \"pending\") {\n throw new InvalidStateError();\n }\n return this._error;\n }\n set error(value) {\n this._error = value;\n }\n get result() {\n if (this.readyState === \"pending\") {\n throw new InvalidStateError();\n }\n return this._result;\n }\n set result(value) {\n this._result = value;\n }\n get [Symbol.toStringTag]() {\n return \"IDBRequest\";\n }\n}\nexport default FDBRequest;","class FakeDOMStringList {\n constructor(...values) {\n this._values = values;\n for (let i = 0; i < values.length; i++) {\n this[i] = values[i];\n }\n }\n contains(value) {\n return this._values.includes(value);\n }\n item(i) {\n if (i < 0 || i >= this._values.length) {\n return null;\n }\n return this._values[i];\n }\n get length() {\n return this._values.length;\n }\n [Symbol.iterator]() {\n return this._values[Symbol.iterator]();\n }\n\n // Handled by proxy\n\n // Used internally, should not be used by others. I could maybe get rid of these and replace rather than mutate, but too lazy to check the spec.\n _push(...values) {\n for (let i = 0; i < values.length; i++) {\n this[this._values.length + i] = values[i];\n }\n this._values.push(...values);\n }\n _sort(...values) {\n this._values.sort(...values);\n for (let i = 0; i < this._values.length; i++) {\n this[i] = this._values[i];\n }\n return this;\n }\n}\nexport default FakeDOMStringList;","import FDBKeyRange from \"../FDBKeyRange.js\";\nimport { DataError } from \"./errors.js\";\nimport valueToKey from \"./valueToKey.js\";\n\n// http://w3c.github.io/IndexedDB/#convert-a-value-to-a-key-range\nconst valueToKeyRange = (value, nullDisallowedFlag = false) => {\n if (value instanceof FDBKeyRange) {\n return value;\n }\n if (value === null || value === undefined) {\n if (nullDisallowedFlag) {\n throw new DataError();\n }\n return new FDBKeyRange(undefined, undefined, false, false);\n }\n const key = valueToKey(value);\n return FDBKeyRange.only(key);\n};\nexport default valueToKeyRange;","// Keys provided as functions or arrays or objects need to be stringified\nconst convertKey = key => typeof key === 'object' && key ? key + '' : key;\n\n// https://www.w3.org/TR/IndexedDB/#dom-idbobjectstore-keypath\nexport function getKeyPath(keyPath) {\n // It's important to clone the Array here because of the WPT test:\n // \"Different instances are returned from different store instances.\"\n // Also note that the same instance must be returned across multiple gets\n return Array.isArray(keyPath) ? keyPath.map(convertKey) : convertKey(keyPath);\n}","import FDBKeyRange from \"../FDBKeyRange.js\";\nimport valueToKeyWithoutThrowing, { INVALID_TYPE } from \"./valueToKeyWithoutThrowing.js\";\n\n// https://www.w3.org/TR/IndexedDB/#is-a-potentially-valid-key-range\nconst isPotentiallyValidKeyRange = value => {\n // If value is a key range, return true.\n if (value instanceof FDBKeyRange) {\n return true;\n }\n\n // Let key be the result of converting a value to a key with value.\n const key = valueToKeyWithoutThrowing(value);\n\n // If key is \"invalid type\" return false.\n // Else return true.\n return key !== INVALID_TYPE;\n};\nexport default isPotentiallyValidKeyRange;","// https://heycam.github.io/webidl/#EnforceRange\n\nconst enforceRange = (num, type) => {\n const min = 0;\n const max = type === \"unsigned long\" ? 4294967295 : 9007199254740991;\n if (isNaN(num) || num < min || num > max) {\n throw new TypeError();\n }\n if (num >= 0) {\n return Math.floor(num);\n }\n};\nexport default enforceRange;","import isPotentiallyValidKeyRange from \"./isPotentiallyValidKeyRange.js\";\nimport enforceRange from \"./enforceRange.js\";\n// https://www.w3.org/TR/IndexedDB/#create-request-to-retrieve-multiple-items\nconst extractGetAllOptions = (queryOrOptions, count, numArguments) => {\n let query;\n let direction;\n if (queryOrOptions === undefined || queryOrOptions === null || isPotentiallyValidKeyRange(queryOrOptions)) {\n // queryOrOptions is FDBKeyRange | Key | null | undefined\n query = queryOrOptions;\n if (numArguments > 1 && count !== undefined) {\n count = enforceRange(count, \"unsigned long\");\n }\n } else {\n // queryOrOptions is FDBGetAllOptions\n const getAllOptions = queryOrOptions;\n if (getAllOptions.query !== undefined) {\n query = getAllOptions.query;\n }\n if (getAllOptions.count !== undefined) {\n count = enforceRange(getAllOptions.count, \"unsigned long\");\n }\n if (getAllOptions.direction !== undefined) {\n direction = getAllOptions.direction;\n }\n }\n return {\n query,\n count,\n direction\n };\n};\nexport default extractGetAllOptions;","import FDBCursor from \"./FDBCursor.js\";\nimport FDBCursorWithValue from \"./FDBCursorWithValue.js\";\nimport FDBKeyRange from \"./FDBKeyRange.js\";\nimport FDBRequest from \"./FDBRequest.js\";\nimport { ConstraintError, InvalidStateError, TransactionInactiveError } from \"./lib/errors.js\";\nimport FakeDOMStringList from \"./lib/FakeDOMStringList.js\";\nimport valueToKey from \"./lib/valueToKey.js\";\nimport valueToKeyRange from \"./lib/valueToKeyRange.js\";\nimport { getKeyPath } from \"./lib/getKeyPath.js\";\nimport extractGetAllOptions from \"./lib/extractGetAllOptions.js\";\nimport enforceRange from \"./lib/enforceRange.js\";\nconst confirmActiveTransaction = index => {\n if (index._rawIndex.deleted || index.objectStore._rawObjectStore.deleted) {\n throw new InvalidStateError();\n }\n if (index.objectStore.transaction._state !== \"active\") {\n throw new TransactionInactiveError();\n }\n};\n\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#idl-def-IDBIndex\nclass FDBIndex {\n constructor(objectStore, rawIndex) {\n this._rawIndex = rawIndex;\n this._name = rawIndex.name;\n this.objectStore = objectStore;\n this.keyPath = getKeyPath(rawIndex.keyPath);\n this.multiEntry = rawIndex.multiEntry;\n this.unique = rawIndex.unique;\n }\n get name() {\n return this._name;\n }\n\n // https://w3c.github.io/IndexedDB/#dom-idbindex-name\n set name(name) {\n const transaction = this.objectStore.transaction;\n if (!transaction.db._runningVersionchangeTransaction) {\n throw transaction._state === \"active\" ? new InvalidStateError() : new TransactionInactiveError();\n }\n if (transaction._state !== \"active\") {\n throw new TransactionInactiveError();\n }\n if (this._rawIndex.deleted || this.objectStore._rawObjectStore.deleted) {\n throw new InvalidStateError();\n }\n name = String(name);\n if (name === this._name) {\n return;\n }\n if (this.objectStore.indexNames.contains(name)) {\n throw new ConstraintError();\n }\n const oldName = this._name;\n const oldIndexNames = [...this.objectStore.indexNames];\n this._name = name;\n this._rawIndex.name = name;\n this.objectStore._indexesCache.delete(oldName);\n this.objectStore._indexesCache.set(name, this);\n this.objectStore._rawObjectStore.rawIndexes.delete(oldName);\n this.objectStore._rawObjectStore.rawIndexes.set(name, this._rawIndex);\n this.objectStore.indexNames = new FakeDOMStringList(...Array.from(this.objectStore._rawObjectStore.rawIndexes.keys()).filter(indexName => {\n const index = this.objectStore._rawObjectStore.rawIndexes.get(indexName);\n return index && !index.deleted;\n }).sort());\n\n // https://www.w3.org/TR/IndexedDB/#abort-an-upgrade-transaction - \"If handle’s index was not newly created during transaction, set handle’s name to its index’s name.\"\n if (!this.objectStore.transaction._createdIndexes.has(this._rawIndex)) {\n transaction._rollbackLog.push(() => {\n this._name = oldName;\n this._rawIndex.name = oldName;\n this.objectStore._indexesCache.delete(name);\n this.objectStore._indexesCache.set(oldName, this);\n this.objectStore._rawObjectStore.rawIndexes.delete(name);\n this.objectStore._rawObjectStore.rawIndexes.set(oldName, this._rawIndex);\n this.objectStore.indexNames = new FakeDOMStringList(...oldIndexNames);\n });\n }\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBIndex-openCursor-IDBRequest-any-range-IDBCursorDirection-direction\n openCursor(range, direction) {\n confirmActiveTransaction(this);\n if (range === null) {\n range = undefined;\n }\n if (range !== undefined && !(range instanceof FDBKeyRange)) {\n range = FDBKeyRange.only(valueToKey(range));\n }\n const request = new FDBRequest();\n request.source = this;\n request.transaction = this.objectStore.transaction;\n const cursor = new FDBCursorWithValue(this, range, direction, request);\n return this.objectStore.transaction._execRequestAsync({\n operation: cursor._iterate.bind(cursor),\n request,\n source: this\n });\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBIndex-openKeyCursor-IDBRequest-any-range-IDBCursorDirection-direction\n openKeyCursor(range, direction) {\n confirmActiveTransaction(this);\n if (range === null) {\n range = undefined;\n }\n if (range !== undefined && !(range instanceof FDBKeyRange)) {\n range = FDBKeyRange.only(valueToKey(range));\n }\n const request = new FDBRequest();\n request.source = this;\n request.transaction = this.objectStore.transaction;\n const cursor = new FDBCursor(this, range, direction, request, true);\n return this.objectStore.transaction._execRequestAsync({\n operation: cursor._iterate.bind(cursor),\n request,\n source: this\n });\n }\n get(key) {\n confirmActiveTransaction(this);\n if (!(key instanceof FDBKeyRange)) {\n key = valueToKey(key);\n }\n return this.objectStore.transaction._execRequestAsync({\n operation: this._rawIndex.getValue.bind(this._rawIndex, key),\n source: this\n });\n }\n\n // http://w3c.github.io/IndexedDB/#dom-idbindex-getall\n getAll(queryOrOptions, count) {\n const options = extractGetAllOptions(queryOrOptions, count, arguments.length);\n confirmActiveTransaction(this);\n const range = valueToKeyRange(options.query);\n return this.objectStore.transaction._execRequestAsync({\n operation: this._rawIndex.getAllValues.bind(this._rawIndex, range, options.count, options.direction),\n source: this\n });\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBIndex-getKey-IDBRequest-any-key\n getKey(key) {\n confirmActiveTransaction(this);\n if (!(key instanceof FDBKeyRange)) {\n key = valueToKey(key);\n }\n return this.objectStore.transaction._execRequestAsync({\n operation: this._rawIndex.getKey.bind(this._rawIndex, key),\n source: this\n });\n }\n\n // http://w3c.github.io/IndexedDB/#dom-idbindex-getallkeys\n getAllKeys(queryOrOptions, count) {\n const options = extractGetAllOptions(queryOrOptions, count, arguments.length);\n confirmActiveTransaction(this);\n const range = valueToKeyRange(options.query);\n return this.objectStore.transaction._execRequestAsync({\n operation: this._rawIndex.getAllKeys.bind(this._rawIndex, range, options.count, options.direction),\n source: this\n });\n }\n\n // https://www.w3.org/TR/IndexedDB/#dom-idbobjectstore-getallrecords\n getAllRecords(options) {\n let query;\n let count;\n let direction;\n if (options !== undefined) {\n if (options.query !== undefined) {\n query = options.query;\n }\n if (options.count !== undefined) {\n count = enforceRange(options.count, \"unsigned long\");\n }\n if (options.direction !== undefined) {\n direction = options.direction;\n }\n }\n confirmActiveTransaction(this);\n const range = valueToKeyRange(query);\n return this.objectStore.transaction._execRequestAsync({\n operation: this._rawIndex.getAllRecords.bind(this._rawIndex, range, count, direction),\n source: this\n });\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBIndex-count-IDBRequest-any-key\n count(key) {\n confirmActiveTransaction(this);\n if (key === null) {\n key = undefined;\n }\n if (key !== undefined && !(key instanceof FDBKeyRange)) {\n key = FDBKeyRange.only(valueToKey(key));\n }\n return this.objectStore.transaction._execRequestAsync({\n operation: () => {\n return this._rawIndex.count(key);\n },\n source: this\n });\n }\n get [Symbol.toStringTag]() {\n return \"IDBIndex\";\n }\n}\nexport default FDBIndex;","// http://w3c.github.io/IndexedDB/#check-that-a-key-could-be-injected-into-a-value\nconst canInjectKey = (keyPath, value) => {\n if (Array.isArray(keyPath)) {\n throw new Error(\"The key paths used in this section are always strings and never sequences, since it is not possible to create a object store which has a key generator and also has a key path that is a sequence.\");\n }\n const identifiers = keyPath.split(\".\");\n if (identifiers.length === 0) {\n throw new Error(\"Assert: identifiers is not empty\");\n }\n identifiers.pop();\n for (const identifier of identifiers) {\n if (typeof value !== \"object\" && !Array.isArray(value)) {\n return false;\n }\n const hop = Object.hasOwn(value, identifier);\n if (!hop) {\n return true;\n }\n value = value[identifier];\n }\n return typeof value === \"object\" || Array.isArray(value);\n};\nexport default canInjectKey;","class FDBRecord {\n constructor(key, primaryKey, value) {\n this._key = key;\n this._primaryKey = primaryKey;\n this._value = value;\n }\n get key() {\n return this._key;\n }\n set key(_) {\n /* for babel */\n }\n get primaryKey() {\n return this._primaryKey;\n }\n set primaryKey(_) {\n /* for babel */\n }\n get value() {\n return this._value;\n }\n set value(_) {\n /* for babel */\n }\n get [Symbol.toStringTag]() {\n return \"IDBRecord\";\n }\n}\nexport default FDBRecord;","import FDBKeyRange from \"../FDBKeyRange.js\";\nimport cmp from \"./cmp.js\";\nimport { ConstraintError } from \"./errors.js\";\n// what fraction of the total number of nodes are allowed to be deleted tombstones?\nconst MAX_TOMBSTONE_FACTOR = 2 / 3;\nconst EVERYTHING_KEY_RANGE = new FDBKeyRange(undefined, undefined, false, false);\n/**\n * Simple red-black binary tree with some aspects of a scapegoat tree. The main goal here is simplicity of\n * implementation, tailored to the needs of IndexedDB.\n *\n * Basically this implements a [red-black tree][1] for insertions, but uses the much simpler [scapegoat tree][2]\n * strategy for deletions. Deletions are a simple matter of rebuilding the tree from scratch if more than 2/3 of the\n * tree is full of deleted (tombstone) markers.\n *\n * [1]: https://en.wikipedia.org/wiki/Red%E2%80%93black_tree\n * [2]: https://en.wikipedia.org/wiki/Scapegoat_tree\n */\nexport default class BinarySearchTree {\n _numTombstones = 0;\n _numNodes = 0;\n\n /**\n *\n * @param keysAreUnique - whether keys can be unique, and thus whether we cn skip checking `record.value` when\n * comparing. This is basically used to distinguish ObjectStores (where the value is the entire object, not used\n * as a key) from non-unique Indexes (where both the key and the value are meaningful keys used for sorting)\n */\n constructor(keysAreUnique) {\n this._keysAreUnique = !!keysAreUnique;\n }\n size() {\n return this._numNodes - this._numTombstones;\n }\n get(record) {\n return this._getByComparator(this._root, otherRecord => this._compare(record, otherRecord));\n }\n contains(record) {\n return !!this.get(record);\n }\n _compare(a, b) {\n const keyComparison = cmp(a.key, b.key);\n if (keyComparison !== 0) {\n return keyComparison;\n }\n // if keys are unique, then we can (and must) avoid comparing the values, since they may be non-comparable\n // (e.g. in the case of an ObjectStore, they are record objects)\n return this._keysAreUnique ? 0 : cmp(a.value, b.value);\n }\n _getByComparator(node, comparator) {\n let current = node;\n while (current) {\n const comparison = comparator(current.record);\n if (comparison < 0) {\n current = current.left;\n } else if (comparison > 0) {\n current = current.right;\n } else {\n return current.record;\n }\n }\n }\n\n /**\n * Put a new record, and return the overwritten record if an overwrite occurred.\n * @param record\n * @param noOverwrite - throw a ConstraintError in case of overwrite\n */\n put(record, noOverwrite = false) {\n if (!this._root) {\n this._root = {\n record,\n left: undefined,\n right: undefined,\n parent: undefined,\n deleted: false,\n // the root is always black in a red-black tree\n red: false\n };\n this._numNodes++;\n return;\n }\n return this._put(this._root, record, noOverwrite);\n }\n _put(node, record, noOverwrite) {\n const comparison = this._compare(record, node.record);\n if (comparison < 0) {\n if (node.left) {\n return this._put(node.left, record, noOverwrite);\n } else {\n node.left = {\n record,\n left: undefined,\n right: undefined,\n parent: node,\n deleted: false,\n red: true\n };\n this._onNewNodeInserted(node.left);\n }\n } else if (comparison > 0) {\n if (node.right) {\n return this._put(node.right, record, noOverwrite);\n } else {\n node.right = {\n record,\n left: undefined,\n right: undefined,\n parent: node,\n deleted: false,\n red: true\n };\n this._onNewNodeInserted(node.right);\n }\n } else if (node.deleted) {\n // undelete\n node.deleted = false;\n node.record = record;\n this._numTombstones--;\n } else if (noOverwrite) {\n // replace not allowed in case of noOverwrite\n throw new ConstraintError();\n } else {\n // replace, don't add, so no need to increment. return the overwritten record\n const overwrittenRecord = node.record;\n node.record = record;\n return overwrittenRecord;\n }\n }\n delete(record) {\n if (!this._root) {\n return;\n }\n this._delete(this._root, record);\n if (this._numTombstones > this._numNodes * MAX_TOMBSTONE_FACTOR) {\n // to keep the implementation simple, and because most users of fake-indexeddb are not going to be deleting\n // a lot of nodes, just rebuild the whole tree (defragment) if the tree is too full of tombstones,\n // as inspired by the scapegoat tree: https://en.wikipedia.org/wiki/Scapegoat_tree#Deletion\n const records = [...this.getAllRecords()];\n this._root = this._rebuild(records, undefined, false);\n this._numNodes = records.length;\n this._numTombstones = 0;\n }\n }\n _delete(node, record) {\n if (!node) {\n return;\n }\n const comparison = this._compare(record, node.record);\n if (comparison < 0) {\n this._delete(node.left, record);\n } else if (comparison > 0) {\n this._delete(node.right, record);\n } else if (!node.deleted) {\n this._numTombstones++;\n node.deleted = true;\n }\n }\n *getAllRecords(descending = false) {\n yield* this.getRecords(EVERYTHING_KEY_RANGE, descending);\n }\n *getRecords(keyRange, descending = false) {\n yield* this._getRecordsForNode(this._root, keyRange, descending);\n }\n *_getRecordsForNode(node, keyRange, descending = false) {\n if (!node) {\n return;\n }\n yield* this._findRecords(node, keyRange, descending);\n }\n *_findRecords(node, keyRange, descending = false) {\n const {\n lower,\n upper,\n lowerOpen,\n upperOpen\n } = keyRange;\n const {\n record: {\n key\n }\n } = node;\n const lowerComparison = lower === undefined ? -1 : cmp(lower, key);\n const upperComparison = upper === undefined ? 1 : cmp(upper, key);\n\n // if keys are non-unique then we need to go left/right even for equality\n // else we can just do LT/GT rather than LTE/GTE as a slight optimization\n const moreLeft = this._keysAreUnique ? lowerComparison < 0 : lowerComparison <= 0;\n const moreRight = this._keysAreUnique ? upperComparison > 0 : upperComparison >= 0;\n\n // in descending mode we start with rightmost nodes, else leftmost\n const moreStart = descending ? moreRight : moreLeft;\n const moreEnd = descending ? moreLeft : moreRight;\n const start = descending ? \"right\" : \"left\";\n const end = descending ? \"left\" : \"right\";\n\n // does the current record actually match the key range?\n const lowerMatches = lowerOpen ? lowerComparison < 0 : lowerComparison <= 0;\n const upperMatches = upperOpen ? upperComparison > 0 : upperComparison >= 0;\n if (moreStart && node[start]) {\n yield* this._findRecords(node[start], keyRange, descending);\n }\n if (lowerMatches && upperMatches && !node.deleted) {\n yield node.record;\n }\n if (moreEnd && node[end]) {\n yield* this._findRecords(node[end], keyRange, descending);\n }\n }\n _onNewNodeInserted(newNode) {\n this._numNodes++;\n this._rebalanceTree(newNode);\n }\n\n // based on https://en.wikipedia.org/wiki/Red%E2%80%93black_tree#Insertion\n _rebalanceTree(node) {\n let parent = node.parent;\n do {\n // case 1 - no red/black violation\n if (!parent.red) {\n return;\n }\n const grandparent = parent.parent;\n if (!grandparent) {\n // case #4 - parent is the red root, node is also red, so parent goes black\n parent.red = false;\n return;\n }\n const parentIsRightChild = parent === grandparent.right;\n const uncle = parentIsRightChild ? grandparent.left : grandparent.right;\n if (!uncle || !uncle.red) {\n if (node === (parentIsRightChild ? parent.left : parent.right)) {\n // case #5 - parent is red but uncle is black\n this._rotateSubtree(parent, parentIsRightChild);\n node = parent;\n parent = parentIsRightChild ? grandparent.right : grandparent.left;\n }\n\n // case #6 - node is \"outer\" grandchild of grandparent\n this._rotateSubtree(grandparent, !parentIsRightChild);\n parent.red = false;\n grandparent.red = true;\n return;\n }\n\n // case #2 - parent and uncle are both red, so both of them go black and grandparent goes red\n parent.red = false;\n uncle.red = false;\n grandparent.red = true;\n node = grandparent;\n } while (node.parent ? parent = node.parent : false);\n\n // case #3 - current node is the root, all constraints satisfied\n }\n\n // based on https://en.wikipedia.org/wiki/Red%E2%80%93black_tree#Implementation\n _rotateSubtree(node, right) {\n const parent = node.parent;\n const newRoot = right ? node.left : node.right; // opposite direction\n const newChild = right ? newRoot.right : newRoot.left;\n node[right ? \"left\" : \"right\"] = newChild;\n if (newChild) {\n newChild.parent = node;\n }\n newRoot[right ? \"right\" : \"left\"] = node;\n newRoot.parent = parent;\n node.parent = newRoot;\n if (parent) {\n parent[node === parent.right ? \"right\" : \"left\"] = newRoot;\n } else {\n this._root = newRoot;\n }\n return newRoot;\n }\n\n // rebuild the whole tree from scratch, used to avoid too many deletion tombstones accumulating\n _rebuild(records, parent, red) {\n const {\n length\n } = records;\n if (!length) {\n return undefined;\n }\n const mid = length >>> 1; // like Math.floor(records.length / 2) but fast\n\n const node = {\n record: records[mid],\n left: undefined,\n right: undefined,\n parent,\n deleted: false,\n red\n };\n const left = this._rebuild(records.slice(0, mid), node, !red);\n const right = this._rebuild(records.slice(mid + 1), node, !red);\n node.left = left;\n node.right = right;\n return node;\n }\n}","import FDBKeyRange from \"../FDBKeyRange.js\";\nimport cmp from \"./cmp.js\";\nimport BinarySearchTree from \"./binarySearchTree.js\";\nclass RecordStore {\n constructor(keysAreUnique) {\n this.keysAreUnique = keysAreUnique;\n this.records = new BinarySearchTree(this.keysAreUnique);\n }\n get(key) {\n const range = key instanceof FDBKeyRange ? key : FDBKeyRange.only(key);\n return this.records.getRecords(range).next().value;\n }\n\n /**\n * Put a new record, and return the overwritten record if an overwrite occurred.\n * @param newRecord\n * @param noOverwrite - throw a ConstraintError in case of overwrite\n */\n put(newRecord, noOverwrite = false) {\n return this.records.put(newRecord, noOverwrite);\n }\n delete(key) {\n const range = key instanceof FDBKeyRange ? key : FDBKeyRange.only(key);\n const deletedRecords = [...this.records.getRecords(range)];\n for (const record of deletedRecords) {\n this.records.delete(record);\n }\n return deletedRecords;\n }\n deleteByValue(key) {\n const range = key instanceof FDBKeyRange ? key : FDBKeyRange.only(key);\n const deletedRecords = [];\n for (const record of this.records.getAllRecords()) {\n if (range.includes(record.value)) {\n this.records.delete(record);\n deletedRecords.push(record);\n }\n }\n return deletedRecords;\n }\n clear() {\n const deletedRecords = [...this.records.getAllRecords()];\n this.records = new BinarySearchTree(this.keysAreUnique);\n return deletedRecords;\n }\n values(range, direction = \"next\") {\n const descending = direction === \"prev\" || direction === \"prevunique\";\n const records = range ? this.records.getRecords(range, descending) : this.records.getAllRecords(descending);\n return {\n [Symbol.iterator]: () => {\n const next = () => {\n return records.next();\n };\n if (direction === \"next\" || direction === \"prev\") {\n return {\n next\n };\n }\n\n // For nextunique/prevunique, return an iterator that skips seen values\n // Note that we must return the _lowest_ value regardless of direction:\n // > Iterating with \"prevunique\" visits the same records that \"nextunique\"\n // > visits, but in reverse order.\n // https://w3c.github.io/IndexedDB/#dom-idbcursordirection-prevunique\n if (direction === \"nextunique\") {\n let previousValue = undefined;\n return {\n next: () => {\n let current = next();\n // for nextunique, continue if we already emitted the lowest unique value\n while (!current.done && previousValue !== undefined && cmp(previousValue.key, current.value.key) === 0) {\n current = next();\n }\n previousValue = current.value;\n return current;\n }\n };\n }\n\n // prevunique is a bit more complex due to needing to check the next value, which\n // invokes the iterable, so we need to keep a buffer of one \"lookahead\" result\n let current = next();\n let nextResult = next();\n return {\n next: () => {\n while (!nextResult.done && cmp(current.value.key, nextResult.value.key) === 0) {\n // note we return the _lowest_ possible value, hence set the current\n current = nextResult;\n nextResult = next();\n }\n const result = current;\n current = nextResult;\n nextResult = next();\n return result;\n }\n };\n }\n };\n }\n size() {\n return this.records.size();\n }\n}\nexport default RecordStore;","import FDBRecord from \"../FDBRecord.js\";\nimport { ConstraintError } from \"./errors.js\";\nimport extractKey from \"./extractKey.js\";\nimport RecordStore from \"./RecordStore.js\";\nimport valueToKey from \"./valueToKey.js\";\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-index\nclass Index {\n deleted = false;\n // Initialized should be used to decide whether to throw an error or abort the versionchange transaction when there is a\n // constraint\n initialized = false;\n constructor(rawObjectStore, name, keyPath, multiEntry, unique) {\n this.rawObjectStore = rawObjectStore;\n this.name = name;\n this.keyPath = keyPath;\n this.multiEntry = multiEntry;\n this.unique = unique;\n this.records = new RecordStore(unique);\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-retrieving-a-value-from-an-index\n getKey(key) {\n const record = this.records.get(key);\n return record !== undefined ? record.value : undefined;\n }\n\n // http://w3c.github.io/IndexedDB/#retrieve-multiple-referenced-values-from-an-index\n getAllKeys(range, count, direction) {\n if (count === undefined || count === 0) {\n count = Infinity;\n }\n const records = [];\n for (const record of this.records.values(range, direction)) {\n records.push(structuredClone(record.value));\n if (records.length >= count) {\n break;\n }\n }\n return records;\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#index-referenced-value-retrieval-operation\n getValue(key) {\n const record = this.records.get(key);\n return record !== undefined ? this.rawObjectStore.getValue(record.value) : undefined;\n }\n\n // http://w3c.github.io/IndexedDB/#retrieve-multiple-referenced-values-from-an-index\n getAllValues(range, count, direction) {\n if (count === undefined || count === 0) {\n count = Infinity;\n }\n const records = [];\n for (const record of this.records.values(range, direction)) {\n records.push(this.rawObjectStore.getValue(record.value));\n if (records.length >= count) {\n break;\n }\n }\n return records;\n }\n\n // https://www.w3.org/TR/IndexedDB/#dom-idbindex-getallrecords\n getAllRecords(range, count, direction) {\n if (count === undefined || count === 0) {\n count = Infinity;\n }\n const records = [];\n for (const record of this.records.values(range, direction)) {\n records.push(new FDBRecord(structuredClone(record.key), structuredClone(this.rawObjectStore.getKey(record.value)), this.rawObjectStore.getValue(record.value)));\n if (records.length >= count) {\n break;\n }\n }\n return records;\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-storing-a-record-into-an-object-store (step 7)\n storeRecord(newRecord) {\n let indexKey;\n try {\n indexKey = extractKey(this.keyPath, newRecord.value).key;\n } catch (err) {\n if (err.name === \"DataError\") {\n // Invalid key is not an actual error, just means we do not store an entry in this index\n return;\n }\n throw err;\n }\n if (!this.multiEntry || !Array.isArray(indexKey)) {\n try {\n valueToKey(indexKey);\n } catch (e) {\n return;\n }\n } else {\n // remove any elements from index key that are not valid keys and remove any duplicate elements from index\n // key such that only one instance of the duplicate value remains.\n const keep = [];\n for (const part of indexKey) {\n if (keep.indexOf(part) < 0) {\n try {\n keep.push(valueToKey(part));\n } catch (err) {\n /* Do nothing */\n }\n }\n }\n indexKey = keep;\n }\n if (!this.multiEntry || !Array.isArray(indexKey)) {\n if (this.unique) {\n const existingRecord = this.records.get(indexKey);\n if (existingRecord) {\n throw new ConstraintError();\n }\n }\n } else {\n if (this.unique) {\n for (const individualIndexKey of indexKey) {\n const existingRecord = this.records.get(individualIndexKey);\n if (existingRecord) {\n throw new ConstraintError();\n }\n }\n }\n }\n if (!this.multiEntry || !Array.isArray(indexKey)) {\n this.records.put({\n key: indexKey,\n value: newRecord.key\n });\n } else {\n for (const individualIndexKey of indexKey) {\n this.records.put({\n key: individualIndexKey,\n value: newRecord.key\n });\n }\n }\n }\n initialize(transaction) {\n if (this.initialized) {\n throw new Error(\"Index already initialized\");\n }\n transaction._execRequestAsync({\n operation: () => {\n try {\n // Create index based on current value of objectstore\n for (const record of this.rawObjectStore.records.values()) {\n this.storeRecord(record);\n }\n this.initialized = true;\n } catch (err) {\n // console.error(err);\n transaction._abort(err.name);\n }\n },\n source: null\n });\n }\n count(range) {\n let count = 0;\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n for (const record of this.records.values(range)) {\n count += 1;\n }\n return count;\n }\n}\nexport default Index;","import { SyntaxError } from \"./errors.js\";\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-valid-key-path\nconst validateKeyPath = (keyPath, parent) => {\n // This doesn't make sense to me based on the spec, but it is needed to pass the W3C KeyPath tests (see same\n // comment in extractKey)\n if (keyPath !== undefined && keyPath !== null && typeof keyPath !== \"string\" && keyPath.toString && (parent === \"array\" || !Array.isArray(keyPath))) {\n keyPath = keyPath.toString();\n }\n if (typeof keyPath === \"string\") {\n if (keyPath === \"\" && parent !== \"string\") {\n return;\n }\n try {\n // https://mathiasbynens.be/demo/javascript-identifier-regex for ECMAScript 5.1 / Unicode v7.0.0, with\n // reserved words at beginning removed\n const validIdentifierRegex =\n // eslint-disable-next-line no-misleading-character-class\n /^(?:[$A-Z_a-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0-\\u08B2\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC])(?:[$0-9A-Z_a-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u0483-\\u0487\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0610-\\u061A\\u0620-\\u0669\\u066E-\\u06D3\\u06D5-\\u06DC\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF\\u0710-\\u074A\\u074D-\\u07B1\\u07C0-\\u07F5\\u07FA\\u0800-\\u082D\\u0840-\\u085B\\u08A0-\\u08B2\\u08E4-\\u0963\\u0966-\\u096F\\u0971-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09F1\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C00-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58\\u0C59\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C81-\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D01-\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D57\\u0D60-\\u0D63\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB9\\u0EBB-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F84\\u0F86-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u135F\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17D3\\u17D7\\u17DC\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19D9\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1AB0-\\u1ABD\\u1B00-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1BF3\\u1C00-\\u1C37\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1CD0-\\u1CD2\\u1CD4-\\u1CF6\\u1CF8\\u1CF9\\u1D00-\\u1DF5\\u1DFC-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u200C\\u200D\\u203F\\u2040\\u2054\\u2071\\u207F\\u2090-\\u209C\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D7F-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u2E2F\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099\\u309A\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66F\\uA674-\\uA67D\\uA67F-\\uA69D\\uA69F-\\uA6F1\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA827\\uA840-\\uA873\\uA880-\\uA8C4\\uA8D0-\\uA8D9\\uA8E0-\\uA8F7\\uA8FB\\uA900-\\uA92D\\uA930-\\uA953\\uA960-\\uA97C\\uA980-\\uA9C0\\uA9CF-\\uA9D9\\uA9E0-\\uA9FE\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A-\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEF\\uAAF2-\\uAAF6\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE00-\\uFE0F\\uFE20-\\uFE2D\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF3F\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC])*$/;\n if (keyPath.length >= 1 && validIdentifierRegex.test(keyPath)) {\n return;\n }\n } catch (err) {\n throw new SyntaxError(err.message);\n }\n if (keyPath.indexOf(\" \") >= 0) {\n throw new SyntaxError(\"The keypath argument contains an invalid key path (no spaces allowed).\");\n }\n }\n if (Array.isArray(keyPath) && keyPath.length > 0) {\n if (parent) {\n // No nested arrays\n throw new SyntaxError(\"The keypath argument contains an invalid key path (nested arrays).\");\n }\n for (const part of keyPath) {\n validateKeyPath(part, \"array\");\n }\n return;\n } else if (typeof keyPath === \"string\" && keyPath.indexOf(\".\") >= 0) {\n keyPath = keyPath.split(\".\");\n for (const part of keyPath) {\n validateKeyPath(part, \"string\");\n }\n return;\n }\n throw new SyntaxError();\n};\nexport default validateKeyPath;","import FDBCursor from \"./FDBCursor.js\";\nimport FDBCursorWithValue from \"./FDBCursorWithValue.js\";\nimport FDBIndex from \"./FDBIndex.js\";\nimport FDBKeyRange from \"./FDBKeyRange.js\";\nimport FDBRequest from \"./FDBRequest.js\";\nimport canInjectKey from \"./lib/canInjectKey.js\";\nimport { ConstraintError, DataError, InvalidAccessError, InvalidStateError, NotFoundError, ReadOnlyError, TransactionInactiveError } from \"./lib/errors.js\";\nimport extractKey from \"./lib/extractKey.js\";\nimport FakeDOMStringList from \"./lib/FakeDOMStringList.js\";\nimport Index from \"./lib/Index.js\";\nimport validateKeyPath from \"./lib/validateKeyPath.js\";\nimport valueToKey from \"./lib/valueToKey.js\";\nimport valueToKeyRange from \"./lib/valueToKeyRange.js\";\nimport { getKeyPath } from \"./lib/getKeyPath.js\";\nimport extractGetAllOptions from \"./lib/extractGetAllOptions.js\";\nimport enforceRange from \"./lib/enforceRange.js\";\nimport { cloneValueForInsertion } from \"./lib/cloneValueForInsertion.js\";\nconst confirmActiveTransaction = objectStore => {\n if (objectStore._rawObjectStore.deleted) {\n throw new InvalidStateError();\n }\n if (objectStore.transaction._state !== \"active\") {\n throw new TransactionInactiveError();\n }\n};\nconst buildRecordAddPut = (objectStore, value, key) => {\n confirmActiveTransaction(objectStore);\n if (objectStore.transaction.mode === \"readonly\") {\n throw new ReadOnlyError();\n }\n if (objectStore.keyPath !== null) {\n if (key !== undefined) {\n throw new DataError();\n }\n }\n const clone = cloneValueForInsertion(value, objectStore.transaction);\n if (objectStore.keyPath !== null) {\n const tempKey = extractKey(objectStore.keyPath, clone);\n if (tempKey.type === \"found\") {\n valueToKey(tempKey.key);\n } else {\n if (!objectStore._rawObjectStore.keyGenerator) {\n throw new DataError();\n } else if (!canInjectKey(objectStore.keyPath, clone)) {\n throw new DataError();\n }\n }\n }\n if (objectStore.keyPath === null && objectStore._rawObjectStore.keyGenerator === null && key === undefined) {\n throw new DataError();\n }\n if (key !== undefined) {\n key = valueToKey(key);\n }\n return {\n key,\n value: clone\n };\n};\n\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#object-store\nclass FDBObjectStore {\n _indexesCache = new Map();\n constructor(transaction, rawObjectStore) {\n this._rawObjectStore = rawObjectStore;\n this._name = rawObjectStore.name;\n this.keyPath = getKeyPath(rawObjectStore.keyPath);\n this.autoIncrement = rawObjectStore.autoIncrement;\n this.transaction = transaction;\n this.indexNames = new FakeDOMStringList(...Array.from(rawObjectStore.rawIndexes.keys()).sort());\n }\n get name() {\n return this._name;\n }\n\n // http://w3c.github.io/IndexedDB/#dom-idbobjectstore-name\n set name(name) {\n const transaction = this.transaction;\n if (!transaction.db._runningVersionchangeTransaction) {\n throw transaction._state === \"active\" ? new InvalidStateError() : new TransactionInactiveError();\n }\n confirmActiveTransaction(this);\n name = String(name);\n if (name === this._name) {\n return;\n }\n if (this._rawObjectStore.rawDatabase.rawObjectStores.has(name)) {\n throw new ConstraintError();\n }\n const oldName = this._name;\n const oldObjectStoreNames = [...transaction.db.objectStoreNames];\n this._name = name;\n this._rawObjectStore.name = name;\n this.transaction._objectStoresCache.delete(oldName);\n this.transaction._objectStoresCache.set(name, this);\n this._rawObjectStore.rawDatabase.rawObjectStores.delete(oldName);\n this._rawObjectStore.rawDatabase.rawObjectStores.set(name, this._rawObjectStore);\n transaction.db.objectStoreNames = new FakeDOMStringList(...Array.from(this._rawObjectStore.rawDatabase.rawObjectStores.keys()).filter(objectStoreName => {\n const objectStore = this._rawObjectStore.rawDatabase.rawObjectStores.get(objectStoreName);\n return objectStore && !objectStore.deleted;\n }).sort());\n const oldScope = new Set(transaction._scope);\n const oldTransactionObjectStoreNames = [...transaction.objectStoreNames];\n this.transaction._scope.delete(oldName);\n transaction._scope.add(name);\n transaction.objectStoreNames = new FakeDOMStringList(...Array.from(transaction._scope).sort());\n\n // https://www.w3.org/TR/IndexedDB/#abort-an-upgrade-transaction - \"If handle’s object store was not newly created during transaction, set handle’s name to its object store’s name.\"\n if (!this.transaction._createdObjectStores.has(this._rawObjectStore)) {\n transaction._rollbackLog.push(() => {\n this._name = oldName;\n this._rawObjectStore.name = oldName;\n this.transaction._objectStoresCache.delete(name);\n this.transaction._objectStoresCache.set(oldName, this);\n this._rawObjectStore.rawDatabase.rawObjectStores.delete(name);\n this._rawObjectStore.rawDatabase.rawObjectStores.set(oldName, this._rawObjectStore);\n transaction.db.objectStoreNames = new FakeDOMStringList(...oldObjectStoreNames);\n transaction._scope = oldScope;\n transaction.objectStoreNames = new FakeDOMStringList(...oldTransactionObjectStoreNames);\n });\n }\n }\n put(value, key) {\n if (arguments.length === 0) {\n throw new TypeError();\n }\n const record = buildRecordAddPut(this, value, key);\n return this.transaction._execRequestAsync({\n operation: this._rawObjectStore.storeRecord.bind(this._rawObjectStore, record, false, this.transaction._rollbackLog),\n source: this\n });\n }\n add(value, key) {\n if (arguments.length === 0) {\n throw new TypeError();\n }\n const record = buildRecordAddPut(this, value, key);\n return this.transaction._execRequestAsync({\n operation: this._rawObjectStore.storeRecord.bind(this._rawObjectStore, record, true, this.transaction._rollbackLog),\n source: this\n });\n }\n delete(key) {\n if (arguments.length === 0) {\n throw new TypeError();\n }\n confirmActiveTransaction(this);\n if (this.transaction.mode === \"readonly\") {\n throw new ReadOnlyError();\n }\n if (!(key instanceof FDBKeyRange)) {\n key = valueToKey(key);\n }\n return this.transaction._execRequestAsync({\n operation: this._rawObjectStore.deleteRecord.bind(this._rawObjectStore, key, this.transaction._rollbackLog),\n source: this\n });\n }\n get(key) {\n if (arguments.length === 0) {\n throw new TypeError();\n }\n confirmActiveTransaction(this);\n if (!(key instanceof FDBKeyRange)) {\n key = valueToKey(key);\n }\n return this.transaction._execRequestAsync({\n operation: this._rawObjectStore.getValue.bind(this._rawObjectStore, key),\n source: this\n });\n }\n\n // http://w3c.github.io/IndexedDB/#dom-idbobjectstore-getall\n getAll(queryOrOptions, count) {\n const options = extractGetAllOptions(queryOrOptions, count, arguments.length);\n confirmActiveTransaction(this);\n const range = valueToKeyRange(options.query);\n return this.transaction._execRequestAsync({\n operation: this._rawObjectStore.getAllValues.bind(this._rawObjectStore, range, options.count, options.direction),\n source: this\n });\n }\n\n // http://w3c.github.io/IndexedDB/#dom-idbobjectstore-getkey\n getKey(key) {\n if (arguments.length === 0) {\n throw new TypeError();\n }\n confirmActiveTransaction(this);\n if (!(key instanceof FDBKeyRange)) {\n key = valueToKey(key);\n }\n return this.transaction._execRequestAsync({\n operation: this._rawObjectStore.getKey.bind(this._rawObjectStore, key),\n source: this\n });\n }\n\n // http://w3c.github.io/IndexedDB/#dom-idbobjectstore-getallkeys\n getAllKeys(queryOrOptions, count) {\n const options = extractGetAllOptions(queryOrOptions, count, arguments.length);\n confirmActiveTransaction(this);\n const range = valueToKeyRange(options.query);\n return this.transaction._execRequestAsync({\n operation: this._rawObjectStore.getAllKeys.bind(this._rawObjectStore, range, options.count, options.direction),\n source: this\n });\n }\n\n // https://www.w3.org/TR/IndexedDB/#dom-idbobjectstore-getallrecords\n getAllRecords(options) {\n let query;\n let count;\n let direction;\n if (options !== undefined) {\n if (options.query !== undefined) {\n query = options.query;\n }\n if (options.count !== undefined) {\n count = enforceRange(options.count, \"unsigned long\");\n }\n if (options.direction !== undefined) {\n direction = options.direction;\n }\n }\n confirmActiveTransaction(this);\n const range = valueToKeyRange(query);\n return this.transaction._execRequestAsync({\n operation: this._rawObjectStore.getAllRecords.bind(this._rawObjectStore, range, count, direction),\n source: this\n });\n }\n clear() {\n confirmActiveTransaction(this);\n if (this.transaction.mode === \"readonly\") {\n throw new ReadOnlyError();\n }\n return this.transaction._execRequestAsync({\n operation: this._rawObjectStore.clear.bind(this._rawObjectStore, this.transaction._rollbackLog),\n source: this\n });\n }\n openCursor(range, direction) {\n confirmActiveTransaction(this);\n if (range === null) {\n range = undefined;\n }\n if (range !== undefined && !(range instanceof FDBKeyRange)) {\n range = FDBKeyRange.only(valueToKey(range));\n }\n const request = new FDBRequest();\n request.source = this;\n request.transaction = this.transaction;\n const cursor = new FDBCursorWithValue(this, range, direction, request);\n return this.transaction._execRequestAsync({\n operation: cursor._iterate.bind(cursor),\n request,\n source: this\n });\n }\n openKeyCursor(range, direction) {\n confirmActiveTransaction(this);\n if (range === null) {\n range = undefined;\n }\n if (range !== undefined && !(range instanceof FDBKeyRange)) {\n range = FDBKeyRange.only(valueToKey(range));\n }\n const request = new FDBRequest();\n request.source = this;\n request.transaction = this.transaction;\n const cursor = new FDBCursor(this, range, direction, request, true);\n return this.transaction._execRequestAsync({\n operation: cursor._iterate.bind(cursor),\n request,\n source: this\n });\n }\n\n // tslint:-next-line max-line-length\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBObjectStore-createIndex-IDBIndex-DOMString-name-DOMString-sequence-DOMString--keyPath-IDBIndexParameters-optionalParameters\n createIndex(name, keyPath, optionalParameters = {}) {\n if (arguments.length < 2) {\n throw new TypeError();\n }\n const multiEntry = optionalParameters.multiEntry !== undefined ? optionalParameters.multiEntry : false;\n const unique = optionalParameters.unique !== undefined ? optionalParameters.unique : false;\n if (this.transaction.mode !== \"versionchange\") {\n throw new InvalidStateError();\n }\n confirmActiveTransaction(this);\n if (this.indexNames.contains(name)) {\n throw new ConstraintError();\n }\n validateKeyPath(keyPath);\n if (Array.isArray(keyPath) && multiEntry) {\n throw new InvalidAccessError();\n }\n\n // The index that is requested to be created can contain constraints on the data allowed in the index's\n // referenced object store, such as requiring uniqueness of the values referenced by the index's keyPath. If the\n // referenced object store already contains data which violates these constraints, this MUST NOT cause the\n // implementation of createIndex to throw an exception or affect what it returns. The implementation MUST still\n // create and return an IDBIndex object. Instead the implementation must queue up an operation to abort the\n // \"versionchange\" transaction which was used for the createIndex call.\n\n // Save for rollbackLog\n const indexNames = [...this.indexNames];\n const index = new Index(this._rawObjectStore, name, keyPath, multiEntry, unique);\n this.indexNames._push(name);\n this.indexNames._sort();\n this.transaction._createdIndexes.add(index);\n this._rawObjectStore.rawIndexes.set(name, index);\n index.initialize(this.transaction); // This is async by design\n\n this.transaction._rollbackLog.push(() => {\n index.deleted = true;\n this.indexNames = new FakeDOMStringList(...indexNames);\n this._rawObjectStore.rawIndexes.delete(index.name);\n });\n return new FDBIndex(this, index);\n }\n\n // https://w3c.github.io/IndexedDB/#dom-idbobjectstore-index\n index(name) {\n if (arguments.length === 0) {\n throw new TypeError();\n }\n if (this._rawObjectStore.deleted || this.transaction._state === \"finished\") {\n throw new InvalidStateError();\n }\n const index = this._indexesCache.get(name);\n if (index !== undefined) {\n return index;\n }\n const rawIndex = this._rawObjectStore.rawIndexes.get(name);\n if (!this.indexNames.contains(name) || rawIndex === undefined) {\n throw new NotFoundError();\n }\n const index2 = new FDBIndex(this, rawIndex);\n this._indexesCache.set(name, index2);\n return index2;\n }\n deleteIndex(name) {\n if (arguments.length === 0) {\n throw new TypeError();\n }\n if (this.transaction.mode !== \"versionchange\") {\n throw new InvalidStateError();\n }\n confirmActiveTransaction(this);\n const rawIndex = this._rawObjectStore.rawIndexes.get(name);\n if (rawIndex === undefined) {\n throw new NotFoundError();\n }\n this.transaction._rollbackLog.push(() => {\n rawIndex.deleted = false;\n this._rawObjectStore.rawIndexes.set(rawIndex.name, rawIndex);\n this.indexNames._push(rawIndex.name);\n this.indexNames._sort();\n });\n this.indexNames = new FakeDOMStringList(...Array.from(this.indexNames).filter(indexName => {\n return indexName !== name;\n }));\n rawIndex.deleted = true; // Not sure if this is supposed to happen synchronously\n\n this.transaction._execRequestAsync({\n operation: () => {\n const rawIndex2 = this._rawObjectStore.rawIndexes.get(name);\n\n // Hack in case another index is given this name before this async request is processed. It'd be better\n // to have a real unique ID for each index.\n if (rawIndex === rawIndex2) {\n this._rawObjectStore.rawIndexes.delete(name);\n }\n },\n source: this\n });\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBObjectStore-count-IDBRequest-any-key\n count(key) {\n confirmActiveTransaction(this);\n if (key === null) {\n key = undefined;\n }\n if (key !== undefined && !(key instanceof FDBKeyRange)) {\n key = FDBKeyRange.only(valueToKey(key));\n }\n return this.transaction._execRequestAsync({\n operation: () => {\n return this._rawObjectStore.count(key);\n },\n source: this\n });\n }\n get [Symbol.toStringTag]() {\n return \"IDBObjectStore\";\n }\n}\nexport default FDBObjectStore;","class Event {\n eventPath = [];\n NONE = 0;\n CAPTURING_PHASE = 1;\n AT_TARGET = 2;\n BUBBLING_PHASE = 3;\n\n // Flags\n propagationStopped = false;\n immediatePropagationStopped = false;\n canceled = false;\n initialized = true;\n dispatched = false;\n target = null;\n currentTarget = null;\n eventPhase = 0;\n defaultPrevented = false;\n isTrusted = false;\n timeStamp = Date.now();\n constructor(type, eventInitDict = {}) {\n this.type = type;\n this.bubbles = eventInitDict.bubbles !== undefined ? eventInitDict.bubbles : false;\n this.cancelable = eventInitDict.cancelable !== undefined ? eventInitDict.cancelable : false;\n }\n preventDefault() {\n if (this.cancelable) {\n this.canceled = true;\n }\n }\n stopPropagation() {\n this.propagationStopped = true;\n }\n stopImmediatePropagation() {\n this.propagationStopped = true;\n this.immediatePropagationStopped = true;\n }\n}\nexport default Event;","// When running within Node.js (including jsdom), we want to use setImmediate\n// (which runs immediately) rather than setTimeout (which enforces a minimum\n// delay of 1ms, and on Windows only has a resolution of 15ms or so). jsdom\n// doesn't provide setImmediate (to better match the browser environment) and\n// sandboxes scripts, but its sandbox is by necessity imperfect, so we can break\n// out of it:\n//\n// - https://github.com/jsdom/jsdom#executing-scripts\n// - https://github.com/jsdom/jsdom/issues/2729\n// - https://github.com/scala-js/scala-js-macrotask-executor/pull/17\nfunction getSetImmediateFromJsdom() {\n if (typeof navigator !== \"undefined\" && /jsdom/.test(navigator.userAgent)) {\n const outerRealmFunctionConstructor = Node.constructor;\n return new outerRealmFunctionConstructor(\"return setImmediate\")();\n } else {\n return undefined;\n }\n}\n\n// waiting on this PR for typescript types: https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/1249\n\n// 'postTask' runs right after microtasks, so equivalent to setTimeout but without the 4ms clamping.\n// Using the default priority of 'user-visible' to avoid blocking input while still running fairly quickly.\n// See: https://developer.mozilla.org/en-US/docs/Web/API/Prioritized_Task_Scheduling_API#task_priorities\nconst schedulerPostTask = typeof scheduler !== \"undefined\" && (fn => scheduler.postTask(fn));\n\n// fallback for environments that don't support any of the above\nconst doSetTimeout = fn => setTimeout(fn, 0);\n\n// Schedules a task to run later. Use Node.js's setImmediate if available and\n// setTimeout otherwise. Note that options like process.nextTick or\n// queueMicrotask will likely not work: IndexedDB semantics require that\n// transactions are marked as not active when the event loop runs. The next\n// tick queue and microtask queue run within the current event loop macrotask,\n// so they'd process database operations too quickly.\nexport const queueTask = fn => {\n const setImmediate = globalThis.setImmediate || getSetImmediateFromJsdom() || schedulerPostTask || doSetTimeout;\n setImmediate(fn);\n};","import FDBObjectStore from \"./FDBObjectStore.js\";\nimport FDBRequest from \"./FDBRequest.js\";\nimport { AbortError, InvalidStateError, NotFoundError, TransactionInactiveError } from \"./lib/errors.js\";\nimport FakeDOMStringList from \"./lib/FakeDOMStringList.js\";\nimport FakeEvent from \"./lib/FakeEvent.js\";\nimport FakeEventTarget from \"./lib/FakeEventTarget.js\";\nimport { queueTask } from \"./lib/scheduling.js\";\nconst prioritizedListenerTypes = [\"error\", \"abort\", \"complete\"];\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#transaction\nclass FDBTransaction extends FakeEventTarget {\n _state = \"active\";\n _started = false;\n _rollbackLog = [];\n _objectStoresCache = new Map();\n _openRequest = null;\n error = null;\n onabort = null;\n oncomplete = null;\n onerror = null;\n _prioritizedListeners = new Map();\n _requests = [];\n _createdIndexes = new Set();\n _createdObjectStores = new Set();\n constructor(storeNames, mode, durability, db) {\n super();\n this._scope = new Set(storeNames);\n this.mode = mode;\n this.durability = durability;\n this.db = db;\n this.objectStoreNames = new FakeDOMStringList(...Array.from(this._scope).sort());\n for (const type of prioritizedListenerTypes) {\n // Attach prioritized (internal) listeners before any external listeners are attached.\n // This ensures that these listeners run with the same timing regardless of whether\n // the user uses `on*` or `addEventListener` for event listeners.\n this.addEventListener(type, () => {\n this._prioritizedListeners.get(type)?.();\n });\n }\n }\n\n // https://w3c.github.io/IndexedDB/#abort-transaction\n _abort(errName) {\n for (const f of this._rollbackLog.reverse()) {\n f();\n }\n if (errName !== null) {\n const e = new DOMException(undefined, errName);\n this.error = e;\n }\n\n // Should this directly remove from _requests?\n for (const {\n request\n } of this._requests) {\n if (request.readyState !== \"done\") {\n request.readyState = \"done\"; // This will cancel execution of this request's operation\n if (request.source) {\n // https://w3c.github.io/IndexedDB/#ref-for-list-iterate%E2%91%A2\n // For each request of transaction’s request list, abort the steps to asynchronously\n // execute a request for request, set request’s processed flag to true, and queue a\n // database task to run these steps:\n queueTask(() => {\n // Set request’s result to undefined.\n request.result = undefined;\n // Set request’s error to a newly created \"AbortError\" DOMException.\n request.error = new AbortError();\n\n // Fire an event named error at request with its bubbles and cancelable attributes initialized\n // to true.\n const event = new FakeEvent(\"error\", {\n bubbles: true,\n cancelable: true\n });\n event.eventPath = [this.db, this];\n try {\n request.dispatchEvent(event);\n } catch (_err) {\n if (this._state === \"active\") {\n this._abort(\"AbortError\");\n }\n }\n });\n }\n }\n }\n\n // Queue a database task to run these steps:\n queueTask(() => {\n // If transaction is an upgrade transaction, then set transaction’s connection’s associated database’s\n // upgrade transaction to null.\n // (i.e. remove it from the list of `db.connections`)\n const isUpgradeTransaction = this.mode === \"versionchange\";\n if (isUpgradeTransaction) {\n this.db._rawDatabase.connections = this.db._rawDatabase.connections.filter(connection => !connection._rawDatabase.transactions.includes(this));\n }\n // Fire an event named abort at transaction with its bubbles attribute initialized to true.\n const event = new FakeEvent(\"abort\", {\n bubbles: true,\n cancelable: false\n });\n event.eventPath = [this.db];\n this.dispatchEvent(event);\n\n // If transaction is an upgrade transaction, then:\n if (isUpgradeTransaction) {\n // Let request be the open request associated with transaction.\n const request = this._openRequest;\n // Set request’s transaction to null.\n request.transaction = null;\n // Set request’s result to undefined.\n request.result = undefined;\n }\n });\n this._state = \"finished\";\n }\n abort() {\n if (this._state === \"committing\" || this._state === \"finished\") {\n throw new InvalidStateError();\n }\n this._state = \"active\";\n this._abort(null);\n }\n\n // http://w3c.github.io/IndexedDB/#dom-idbtransaction-objectstore\n objectStore(name) {\n if (this._state !== \"active\") {\n throw new InvalidStateError();\n }\n const objectStore = this._objectStoresCache.get(name);\n if (objectStore !== undefined) {\n return objectStore;\n }\n const rawObjectStore = this.db._rawDatabase.rawObjectStores.get(name);\n if (!this._scope.has(name) || rawObjectStore === undefined) {\n throw new NotFoundError();\n }\n const objectStore2 = new FDBObjectStore(this, rawObjectStore);\n this._objectStoresCache.set(name, objectStore2);\n return objectStore2;\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-asynchronously-executing-a-request\n _execRequestAsync(obj) {\n const source = obj.source;\n const operation = obj.operation;\n let request = Object.hasOwn(obj, \"request\") ? obj.request : null;\n if (this._state !== \"active\") {\n throw new TransactionInactiveError();\n }\n\n // Request should only be passed for cursors\n if (!request) {\n if (!source) {\n // Special requests like indexes that just need to run some code\n request = new FDBRequest();\n } else {\n request = new FDBRequest();\n request.source = source;\n request.transaction = source.transaction;\n }\n }\n this._requests.push({\n operation,\n request\n });\n return request;\n }\n _start() {\n this._started = true;\n\n // Remove from request queue - cursor ones will be added back if necessary by cursor.continue and such\n let operation;\n let request;\n while (this._requests.length > 0) {\n const r = this._requests.shift();\n\n // This should only be false if transaction was aborted\n if (r && r.request.readyState !== \"done\") {\n request = r.request;\n operation = r.operation;\n break;\n }\n }\n if (request && operation) {\n if (!request.source) {\n // Special requests like indexes that just need to run some code, with error handling already built into\n // operation\n operation();\n } else {\n let defaultAction;\n let event;\n try {\n const result = operation();\n request.readyState = \"done\";\n request.result = result;\n request.error = undefined;\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-fire-a-success-event\n if (this._state === \"inactive\") {\n this._state = \"active\";\n }\n event = new FakeEvent(\"success\", {\n bubbles: false,\n cancelable: false\n });\n } catch (err) {\n request.readyState = \"done\";\n request.result = undefined;\n request.error = err;\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-fire-an-error-event\n if (this._state === \"inactive\") {\n this._state = \"active\";\n }\n event = new FakeEvent(\"error\", {\n bubbles: true,\n cancelable: true\n });\n defaultAction = this._abort.bind(this, err.name);\n }\n try {\n event.eventPath = [this.db, this];\n request.dispatchEvent(event);\n } catch (_err) {\n if (this._state === \"active\") {\n this._abort(\"AbortError\");\n defaultAction = undefined; // do not abort again\n }\n }\n\n // Default action of event\n if (!event.canceled) {\n if (defaultAction) {\n defaultAction();\n }\n }\n }\n\n // Give it another chance for new handlers to be set before finishing\n queueTask(this._start.bind(this));\n return;\n }\n\n // Check if transaction complete event needs to be fired\n if (this._state !== \"finished\") {\n // Either aborted or committed already\n this._state = \"finished\";\n if (!this.error) {\n const event = new FakeEvent(\"complete\");\n this.dispatchEvent(event);\n }\n }\n }\n commit() {\n if (this._state !== \"active\") {\n throw new InvalidStateError();\n }\n this._state = \"committing\";\n }\n get [Symbol.toStringTag]() {\n return \"IDBTransaction\";\n }\n}\nexport default FDBTransaction;","import { ConstraintError } from \"./errors.js\";\nconst MAX_KEY = 9007199254740992;\nclass KeyGenerator {\n // This is kind of wrong. Should start at 1 and increment only after record is saved\n num = 0;\n next() {\n if (this.num >= MAX_KEY) {\n throw new ConstraintError();\n }\n this.num += 1;\n return this.num;\n }\n\n // https://w3c.github.io/IndexedDB/#possibly-update-the-key-generator\n setIfLarger(num) {\n const value = Math.floor(Math.min(num, MAX_KEY)) - 1;\n if (value >= this.num) {\n this.num = value + 1;\n }\n }\n}\nexport default KeyGenerator;","import FDBRecord from \"../FDBRecord.js\";\nimport { DataError } from \"./errors.js\";\nimport extractKey from \"./extractKey.js\";\nimport KeyGenerator from \"./KeyGenerator.js\";\nimport RecordStore from \"./RecordStore.js\";\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-object-store\nclass ObjectStore {\n deleted = false;\n records = new RecordStore(true);\n rawIndexes = new Map();\n constructor(rawDatabase, name, keyPath, autoIncrement) {\n this.rawDatabase = rawDatabase;\n this.keyGenerator = autoIncrement === true ? new KeyGenerator() : null;\n this.deleted = false;\n this.name = name;\n this.keyPath = keyPath;\n this.autoIncrement = autoIncrement;\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-retrieving-a-value-from-an-object-store\n getKey(key) {\n const record = this.records.get(key);\n return record !== undefined ? structuredClone(record.key) : undefined;\n }\n\n // http://w3c.github.io/IndexedDB/#retrieve-multiple-keys-from-an-object-store\n getAllKeys(range, count, direction) {\n if (count === undefined || count === 0) {\n count = Infinity;\n }\n const records = [];\n for (const record of this.records.values(range, direction)) {\n records.push(structuredClone(record.key));\n if (records.length >= count) {\n break;\n }\n }\n return records;\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-retrieving-a-value-from-an-object-store\n getValue(key) {\n const record = this.records.get(key);\n return record !== undefined ? structuredClone(record.value) : undefined;\n }\n\n // http://w3c.github.io/IndexedDB/#retrieve-multiple-values-from-an-object-store\n getAllValues(range, count, direction) {\n if (count === undefined || count === 0) {\n count = Infinity;\n }\n const records = [];\n for (const record of this.records.values(range, direction)) {\n records.push(structuredClone(record.value));\n if (records.length >= count) {\n break;\n }\n }\n return records;\n }\n\n // https://www.w3.org/TR/IndexedDB/#dom-idbobjectstore-getallrecords\n getAllRecords(range, count, direction) {\n if (count === undefined || count === 0) {\n count = Infinity;\n }\n const records = [];\n for (const record of this.records.values(range, direction)) {\n records.push(new FDBRecord(structuredClone(record.key), structuredClone(record.key), structuredClone(record.value)));\n if (records.length >= count) {\n break;\n }\n }\n return records;\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-storing-a-record-into-an-object-store\n storeRecord(newRecord, noOverwrite, rollbackLog) {\n if (this.keyPath !== null) {\n const key = extractKey(this.keyPath, newRecord.value).key;\n if (key !== undefined) {\n newRecord.key = key;\n }\n }\n const rollbackLogForThisOperation = [];\n if (this.keyGenerator !== null && newRecord.key === undefined) {\n let rolledBack = false;\n const keyGeneratorBefore = this.keyGenerator.num;\n const rollbackKeyGenerator = () => {\n if (rolledBack) {\n return;\n }\n rolledBack = true;\n if (this.keyGenerator) {\n this.keyGenerator.num = keyGeneratorBefore;\n }\n };\n rollbackLogForThisOperation.push(rollbackKeyGenerator);\n if (rollbackLog) {\n rollbackLog.push(rollbackKeyGenerator);\n }\n newRecord.key = this.keyGenerator.next();\n\n // Set in value if keyPath defiend but led to no key\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-to-assign-a-key-to-a-value-using-a-key-path\n if (this.keyPath !== null) {\n if (Array.isArray(this.keyPath)) {\n throw new Error(\"Cannot have an array key path in an object store with a key generator\");\n }\n let remainingKeyPath = this.keyPath;\n let object = newRecord.value;\n let identifier;\n let i = 0; // Just to run the loop at least once\n while (i >= 0) {\n if (typeof object !== \"object\") {\n throw new DataError();\n }\n i = remainingKeyPath.indexOf(\".\");\n if (i >= 0) {\n identifier = remainingKeyPath.slice(0, i);\n remainingKeyPath = remainingKeyPath.slice(i + 1);\n if (!Object.hasOwn(object, identifier)) {\n // Bypass prototype when setting (See `bindings-inject-values-bypass.any.js`)\n // Equivalent to `object[identifier] = ...` without using `Object.prototype`\n Object.defineProperty(object, identifier, {\n configurable: true,\n enumerable: true,\n writable: true,\n value: {}\n });\n }\n object = object[identifier];\n }\n }\n identifier = remainingKeyPath;\n\n // Bypass prototype when setting (See `bindings-inject-values-bypass.any.js`)\n // Equivalent to `object[identifier] = ...` without using `Object.prototype`\n Object.defineProperty(object, identifier, {\n configurable: true,\n enumerable: true,\n writable: true,\n value: newRecord.key\n });\n }\n } else if (this.keyGenerator !== null && typeof newRecord.key === \"number\") {\n this.keyGenerator.setIfLarger(newRecord.key);\n }\n const existingRecord = this.records.put(newRecord, noOverwrite);\n let rolledBack = false;\n const rollbackStoreRecord = () => {\n if (rolledBack) {\n return;\n }\n rolledBack = true;\n if (existingRecord) {\n // overwrite on rollback\n this.storeRecord(existingRecord, false);\n } else {\n // delete on rollback\n this.deleteRecord(newRecord.key);\n }\n };\n rollbackLogForThisOperation.push(rollbackStoreRecord);\n if (rollbackLog) {\n rollbackLog.push(rollbackStoreRecord);\n }\n\n // Delete existing indexes\n if (existingRecord) {\n for (const rawIndex of this.rawIndexes.values()) {\n rawIndex.records.deleteByValue(newRecord.key);\n }\n }\n\n // Update indexes\n try {\n for (const rawIndex of this.rawIndexes.values()) {\n if (rawIndex.initialized) {\n rawIndex.storeRecord(newRecord);\n }\n }\n } catch (err) {\n // If this request fails here and preventDefault is used to stop the transaction from aborting, we need to roll back the addition of this record to the store, otherwise it will be present in subsequent requests on this transaction. Same for key generator.\n if (err.name === \"ConstraintError\") {\n for (const rollback of rollbackLogForThisOperation) {\n rollback();\n }\n }\n throw err;\n }\n return newRecord.key;\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-deleting-records-from-an-object-store\n deleteRecord(key, rollbackLog) {\n const deletedRecords = this.records.delete(key);\n if (rollbackLog) {\n for (const record of deletedRecords) {\n rollbackLog.push(() => {\n this.storeRecord(record, true);\n });\n }\n }\n for (const rawIndex of this.rawIndexes.values()) {\n rawIndex.records.deleteByValue(key);\n }\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-clearing-an-object-store\n clear(rollbackLog) {\n const deletedRecords = this.records.clear();\n if (rollbackLog) {\n for (const record of deletedRecords) {\n rollbackLog.push(() => {\n this.storeRecord(record, true);\n });\n }\n }\n for (const rawIndex of this.rawIndexes.values()) {\n rawIndex.records.clear();\n }\n }\n count(range) {\n // optimization: if there is no range, or if the range is everything, then we can just count the total size\n if (range === undefined || range.lower === undefined && range.upper === undefined) {\n return this.records.size();\n }\n let count = 0;\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n for (const record of this.records.values(range)) {\n count += 1;\n }\n return count;\n }\n}\nexport default ObjectStore;","import FakeEvent from \"./FakeEvent.js\";\nimport { queueTask } from \"./scheduling.js\";\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#database-closing-steps\nconst closeConnection = (connection, forced = false) => {\n connection._closePending = true;\n const transactionsComplete = connection._rawDatabase.transactions.every(transaction => {\n return transaction._state === \"finished\";\n });\n if (transactionsComplete) {\n connection._closed = true;\n connection._rawDatabase.connections = connection._rawDatabase.connections.filter(otherConnection => {\n return connection !== otherConnection;\n });\n if (forced) {\n const event = new FakeEvent(\"close\", {\n bubbles: false,\n cancelable: false\n });\n event.eventPath = [];\n connection.dispatchEvent(event);\n }\n } else {\n queueTask(() => {\n closeConnection(connection, forced);\n });\n }\n};\nexport default closeConnection;","import FDBTransaction from \"./FDBTransaction.js\";\nimport { ConstraintError, InvalidAccessError, InvalidStateError, NotFoundError, TransactionInactiveError } from \"./lib/errors.js\";\nimport FakeDOMStringList from \"./lib/FakeDOMStringList.js\";\nimport FakeEventTarget from \"./lib/FakeEventTarget.js\";\nimport ObjectStore from \"./lib/ObjectStore.js\";\nimport validateKeyPath from \"./lib/validateKeyPath.js\";\nimport closeConnection from \"./lib/closeConnection.js\";\n// Common first 3 steps of https://www.w3.org/TR/IndexedDB/#dom-idbdatabase-createobjectstore and https://www.w3.org/TR/IndexedDB/#dom-idbdatabase-deleteobjectstore\nconst confirmActiveVersionchangeTransaction = database => {\n // Let transaction be database’s upgrade transaction if it is not null, or throw an \"InvalidStateError\" DOMException otherwise.\n let transaction;\n if (database._runningVersionchangeTransaction) {\n // Find the latest versionchange transaction\n transaction = database._rawDatabase.transactions.findLast(tx => {\n return tx.mode === \"versionchange\";\n });\n }\n if (!transaction) {\n throw new InvalidStateError();\n }\n\n // If transaction’s state is not active, then throw a \"TransactionInactiveError\" DOMException.\n if (transaction._state !== \"active\") {\n throw new TransactionInactiveError();\n }\n return transaction;\n};\n\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#database-interface\nclass FDBDatabase extends FakeEventTarget {\n _closePending = false;\n _closed = false;\n _runningVersionchangeTransaction = false;\n constructor(rawDatabase) {\n super();\n this._rawDatabase = rawDatabase;\n this._rawDatabase.connections.push(this);\n this.name = rawDatabase.name;\n this.version = rawDatabase.version;\n this.objectStoreNames = new FakeDOMStringList(...Array.from(rawDatabase.rawObjectStores.keys()).sort());\n }\n\n // http://w3c.github.io/IndexedDB/#dom-idbdatabase-createobjectstore\n createObjectStore(name, options = {}) {\n if (name === undefined) {\n throw new TypeError();\n }\n const transaction = confirmActiveVersionchangeTransaction(this);\n const keyPath = options !== null && options.keyPath !== undefined ? options.keyPath : null;\n const autoIncrement = options !== null && options.autoIncrement !== undefined ? options.autoIncrement : false;\n if (keyPath !== null) {\n validateKeyPath(keyPath);\n }\n if (this._rawDatabase.rawObjectStores.has(name)) {\n throw new ConstraintError();\n }\n if (autoIncrement && (keyPath === \"\" || Array.isArray(keyPath))) {\n throw new InvalidAccessError();\n }\n\n // Save for rollbackLog\n const objectStoreNames = [...this.objectStoreNames];\n const transactionObjectStoreNames = [...transaction.objectStoreNames];\n const rawObjectStore = new ObjectStore(this._rawDatabase, name, keyPath, autoIncrement);\n this.objectStoreNames._push(name);\n this.objectStoreNames._sort();\n transaction._scope.add(name);\n transaction._createdObjectStores.add(rawObjectStore);\n this._rawDatabase.rawObjectStores.set(name, rawObjectStore);\n transaction.objectStoreNames = new FakeDOMStringList(...this.objectStoreNames);\n transaction._rollbackLog.push(() => {\n rawObjectStore.deleted = true;\n this.objectStoreNames = new FakeDOMStringList(...objectStoreNames);\n transaction.objectStoreNames = new FakeDOMStringList(...transactionObjectStoreNames);\n transaction._scope.delete(rawObjectStore.name);\n this._rawDatabase.rawObjectStores.delete(rawObjectStore.name);\n });\n return transaction.objectStore(name);\n }\n\n // https://www.w3.org/TR/IndexedDB/#dom-idbdatabase-deleteobjectstore\n deleteObjectStore(name) {\n if (name === undefined) {\n throw new TypeError();\n }\n const transaction = confirmActiveVersionchangeTransaction(this);\n\n // Let store be the object store named name in database, or throw a \"NotFoundError\" DOMException if none.\n const store = this._rawDatabase.rawObjectStores.get(name);\n if (store === undefined) {\n throw new NotFoundError();\n }\n\n // Remove store from this’s object store set.\n // This method synchronously modifies the objectStoreNames property on the IDBDatabase instance on which it was called.\n this.objectStoreNames = new FakeDOMStringList(...Array.from(this.objectStoreNames).filter(objectStoreName => {\n return objectStoreName !== name;\n }));\n transaction.objectStoreNames = new FakeDOMStringList(...this.objectStoreNames);\n\n // If there is an object store handle associated with store and transaction, remove all entries from its index set.\n const objectStore = transaction._objectStoresCache.get(name);\n let prevIndexNames;\n if (objectStore) {\n prevIndexNames = [...objectStore.indexNames];\n objectStore.indexNames = new FakeDOMStringList();\n }\n transaction._rollbackLog.push(() => {\n store.deleted = false;\n this._rawDatabase.rawObjectStores.set(store.name, store);\n this.objectStoreNames._push(store.name);\n transaction.objectStoreNames._push(store.name);\n this.objectStoreNames._sort();\n if (objectStore && prevIndexNames) {\n objectStore.indexNames = new FakeDOMStringList(...prevIndexNames);\n }\n });\n\n // Destroy store.\n store.deleted = true;\n this._rawDatabase.rawObjectStores.delete(name);\n transaction._objectStoresCache.delete(name);\n }\n transaction(storeNames, mode, options) {\n mode = mode !== undefined ? mode : \"readonly\";\n if (mode !== \"readonly\" && mode !== \"readwrite\" && mode !== \"versionchange\") {\n throw new TypeError(\"Invalid mode: \" + mode);\n }\n const hasActiveVersionchange = this._rawDatabase.transactions.some(transaction => {\n return transaction._state === \"active\" && transaction.mode === \"versionchange\" && transaction.db === this;\n });\n if (hasActiveVersionchange) {\n throw new InvalidStateError();\n }\n if (this._closePending) {\n throw new InvalidStateError();\n }\n if (!Array.isArray(storeNames)) {\n storeNames = [storeNames];\n }\n if (storeNames.length === 0 && mode !== \"versionchange\") {\n throw new InvalidAccessError();\n }\n for (const storeName of storeNames) {\n if (!this.objectStoreNames.contains(storeName)) {\n throw new NotFoundError(\"No objectStore named \" + storeName + \" in this database\");\n }\n }\n\n // the actual algo is more complex but this passes the IDB tests: https://webidl.spec.whatwg.org/#es-dictionary\n const durability = options?.durability ?? \"default\";\n // invalid enums throw a TypeError: https://webidl.spec.whatwg.org/#es-enumeration\n if (durability !== \"default\" && durability !== \"strict\" && durability !== \"relaxed\") {\n throw new TypeError(\n // based on Firefox's error message\n `'${durability}' (value of 'durability' member of IDBTransactionOptions) ` + `is not a valid value for enumeration IDBTransactionDurability`);\n }\n const tx = new FDBTransaction(storeNames, mode, durability, this);\n this._rawDatabase.transactions.push(tx);\n this._rawDatabase.processTransactions(); // See if can start right away (async)\n\n return tx;\n }\n close() {\n closeConnection(this);\n }\n get [Symbol.toStringTag]() {\n return \"IDBDatabase\";\n }\n}\nexport default FDBDatabase;","import FDBRequest from \"./FDBRequest.js\";\nclass FDBOpenDBRequest extends FDBRequest {\n onupgradeneeded = null;\n onblocked = null;\n get [Symbol.toStringTag]() {\n return \"IDBOpenDBRequest\";\n }\n}\nexport default FDBOpenDBRequest;","import FakeEvent from \"./lib/FakeEvent.js\";\nclass FDBVersionChangeEvent extends FakeEvent {\n constructor(type, parameters = {}) {\n super(type);\n this.newVersion = parameters.newVersion !== undefined ? parameters.newVersion : null;\n this.oldVersion = parameters.oldVersion !== undefined ? parameters.oldVersion : 0;\n }\n get [Symbol.toStringTag]() {\n return \"IDBVersionChangeEvent\";\n }\n}\nexport default FDBVersionChangeEvent;","/**\n * Minimal polyfill of `Set.prototype.intersection`, available in Node 22+.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/intersection\n * @param set1\n * @param set2\n */\nexport function intersection(set1, set2) {\n if (\"intersection\" in set1) {\n return set1.intersection(set2);\n }\n return new Set([...set1].filter(item => set2.has(item)));\n}","import { queueTask } from \"./scheduling.js\";\nimport { intersection } from \"./intersection.js\";\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-database\nclass Database {\n transactions = [];\n rawObjectStores = new Map();\n connections = [];\n constructor(name, version) {\n this.name = name;\n this.version = version;\n this.processTransactions = this.processTransactions.bind(this);\n }\n processTransactions() {\n queueTask(() => {\n const running = this.transactions.filter(transaction => transaction._started && transaction._state !== \"finished\");\n const waiting = this.transactions.filter(transaction => !transaction._started && transaction._state !== \"finished\");\n\n // The next transaction to run is the first waiting one that doesn't overlap with either a running one or a\n // preceding waiting one. This allows non-overlapping transactions to run in parallel.\n // The exception is readonly transactions, which are allowed to run in parallel with other readonly\n // transactions, even with overlapping scopes, since no data is being modified.\n const next = waiting.find((transaction, i) => {\n const anyRunning = running.some(other => !(transaction.mode === \"readonly\" && other.mode === \"readonly\") && intersection(other._scope, transaction._scope).size > 0);\n if (anyRunning) {\n return false;\n }\n\n // If any _preceding_ waiting transactions are blocked, then that's also blocking.\n // E.g. if you have 3 transactions: [a], [a,b], and [b,c], then [a] blocks [a,b] which blocks [b,c]\n // until [a] is complete, even though [a] and [b,c] share no overlap.\n // Note that readonly transactions do not have to be handled as a special case here,\n // because if any transactions with overlapping scopes are blocked, then we can assume they are\n const anyWaiting = waiting.slice(0, i).some(other => intersection(other._scope, transaction._scope).size > 0);\n return !anyWaiting;\n });\n if (next) {\n next.addEventListener(\"complete\", this.processTransactions);\n next.addEventListener(\"abort\", this.processTransactions);\n next._start();\n }\n });\n }\n}\nexport default Database;","// WebIDL requires passing the right number of non-optional arguments, e.g. IDBFactory.open() must have at least 1 arg\nexport function validateRequiredArguments(numArguments, expectedNumArguments, methodName) {\n if (numArguments < expectedNumArguments) {\n // imitate Firefox's error message\n throw new TypeError(`${methodName}: At least ${expectedNumArguments} ${expectedNumArguments === 1 ? \"argument\" : \"arguments\"} ` + `required, but only ${arguments.length} passed`);\n }\n}","import FDBDatabase from \"./FDBDatabase.js\";\nimport FDBOpenDBRequest from \"./FDBOpenDBRequest.js\";\nimport FDBVersionChangeEvent from \"./FDBVersionChangeEvent.js\";\nimport cmp from \"./lib/cmp.js\";\nimport Database from \"./lib/Database.js\";\nimport enforceRange from \"./lib/enforceRange.js\";\nimport { AbortError, VersionError } from \"./lib/errors.js\";\nimport FakeEvent from \"./lib/FakeEvent.js\";\nimport { queueTask } from \"./lib/scheduling.js\";\nimport { validateRequiredArguments } from \"./lib/validateRequiredArguments.js\";\n// https://w3c.github.io/IndexedDB/#connection-queue\nconst runTaskInConnectionQueue = (connectionQueues, name, task) => {\n // Let queue be the connection queue for storageKey and name.\n // (note FakeIndexedDB does not support storageKeys currently)\n // Add request to queue.\n // Wait until all previous requests in queue have been processed.\n const queue = connectionQueues.get(name) ?? Promise.resolve();\n connectionQueues.set(name, queue.then(task));\n};\nconst waitForOthersClosedDelete = (databases, name, openDatabases, cb) => {\n const anyOpen = openDatabases.some(openDatabase2 => {\n return !openDatabase2._closed && !openDatabase2._closePending;\n });\n if (anyOpen) {\n queueTask(() => waitForOthersClosedDelete(databases, name, openDatabases, cb));\n return;\n }\n databases.delete(name);\n cb(null);\n};\n\n// https://w3c.github.io/IndexedDB/#delete-a-database\nconst deleteDatabase = (databases, connectionQueues, name, request, cb) => {\n const deleteDBTask = () => {\n return new Promise(resolve => {\n const db = databases.get(name);\n const oldVersion = db !== undefined ? db.version : 0;\n const onComplete = err => {\n try {\n if (err) {\n cb(err);\n } else {\n cb(null, oldVersion);\n }\n } finally {\n resolve();\n }\n };\n try {\n const db = databases.get(name);\n if (db === undefined) {\n onComplete(null);\n return;\n }\n\n // Let openConnections be the set of all connections associated with db.\n const openConnections = db.connections.filter(connection => {\n return !connection._closed;\n });\n\n // For each entry of openConnections that does not have its close pending flag set to true, queue a\n // database task to fire a version change event named versionchange at entry with db’s version and null.\n for (const openDatabase2 of openConnections) {\n if (!openDatabase2._closePending) {\n queueTask(() => {\n const event = new FDBVersionChangeEvent(\"versionchange\", {\n newVersion: null,\n oldVersion: db.version\n });\n openDatabase2.dispatchEvent(event);\n });\n }\n }\n\n // Wait for all of the events to be fired. (i.e. queue a task)\n queueTask(() => {\n // If any of the connections in openConnections are still not closed, queue a database task to\n // fire a version change event named blocked at request with db’s version and null.\n\n const anyOpen = openConnections.some(openDatabase3 => {\n return !openDatabase3._closed && !openDatabase3._closePending;\n });\n\n // If any of the connections in openConnections are still not closed, queue a database task to\n // fire a version change event named blocked at request with db’s version and null.\n if (anyOpen) {\n queueTask(() => {\n const event = new FDBVersionChangeEvent(\"blocked\", {\n newVersion: null,\n oldVersion: db.version\n });\n request.dispatchEvent(event);\n });\n }\n\n // Wait until all connections in openConnections are closed.\n waitForOthersClosedDelete(databases, name, openConnections, onComplete);\n });\n } catch (err) {\n onComplete(err);\n }\n });\n };\n runTaskInConnectionQueue(connectionQueues, name, deleteDBTask);\n};\n\n// https://w3c.github.io/IndexedDB/#ref-for-database-version%E2%91%A0%E2%91%A2\nconst runVersionchangeTransaction = (connection, version, request, cb) => {\n connection._runningVersionchangeTransaction = true;\n const oldVersion = connection._oldVersion = connection.version;\n\n // Let openConnections be the set of all connections, except connection, associated with db.\n const openConnections = connection._rawDatabase.connections.filter(otherDatabase => {\n return connection !== otherDatabase;\n });\n\n // For each entry of openConnections that does not have its close pending flag set to true, queue a\n // database task to fire a version change event named versionchange at entry with db’s version and version.\n for (const openDatabase2 of openConnections) {\n if (!openDatabase2._closed && !openDatabase2._closePending) {\n queueTask(() => {\n const event = new FDBVersionChangeEvent(\"versionchange\", {\n newVersion: version,\n oldVersion\n });\n openDatabase2.dispatchEvent(event);\n });\n }\n }\n\n // Wait for all of the events to be fired.\n // (i.e. queue a task)\n queueTask(() => {\n const anyOpen = openConnections.some(openDatabase3 => {\n return !openDatabase3._closed && !openDatabase3._closePending;\n });\n\n // If any of the connections in openConnections are still not closed, queue a database task to fire a version change event named blocked at request with db’s version and version.\n if (anyOpen) {\n queueTask(() => {\n const event = new FDBVersionChangeEvent(\"blocked\", {\n newVersion: version,\n oldVersion\n });\n request.dispatchEvent(event);\n });\n }\n\n // Wait until all connections in openConnections are closed.\n const waitForOthersClosed = () => {\n const anyOpen2 = openConnections.some(openDatabase2 => {\n return !openDatabase2._closed && !openDatabase2._closePending;\n });\n if (anyOpen2) {\n queueTask(waitForOthersClosed);\n return;\n }\n\n // Set the version of database to version. This change is considered part of the transaction, and so if the\n // transaction is aborted, this change is reverted.\n connection._rawDatabase.version = version;\n connection.version = version;\n\n // Get rid of this setImmediate?\n const transaction = connection.transaction(Array.from(connection.objectStoreNames), \"versionchange\");\n\n // associate the transaction with the open request for later lookup\n transaction._openRequest = request;\n\n // https://w3c.github.io/IndexedDB/#upgrade-a-database\n // Set request’s result to connection.\n request.result = connection;\n // Set request’s done flag to true.\n request.readyState = \"done\";\n // Set request’s transaction to transaction.\n request.transaction = transaction;\n transaction._rollbackLog.push(() => {\n connection._rawDatabase.version = oldVersion;\n connection.version = oldVersion;\n });\n\n // Set transaction’s state to active.\n transaction._state = \"active\";\n\n // Let didThrow be the result of firing a version change event named upgradeneeded at request with old version and version.\n const event = new FDBVersionChangeEvent(\"upgradeneeded\", {\n newVersion: version,\n oldVersion\n });\n let didThrow = false;\n try {\n request.dispatchEvent(event);\n } catch (_err) {\n didThrow = true;\n }\n const concludeUpgrade = () => {\n // If transaction’s state is active, then:\n if (transaction._state === \"active\") {\n // Set transaction’s state to inactive.\n transaction._state = \"inactive\";\n if (didThrow) {\n // If didThrow is true, run abort a transaction with transaction and a newly created \"AbortError\" DOMException.\n transaction._abort(\"AbortError\");\n }\n }\n };\n\n // The \"upgrade a database\" steps are supposed to run as a database task on the database access task source\n // (i.e. off the main thread), but since we're actually running on the main thread, we have to be tricky:\n // 1. If any `upgradeneeded` event handlers errored, abort synchronously\n // 2. Else yield to allow any microtasks to run in response to that event\n if (didThrow) {\n concludeUpgrade();\n } else {\n queueTask(concludeUpgrade);\n }\n transaction._prioritizedListeners.set(\"error\", () => {\n connection._runningVersionchangeTransaction = false;\n connection._oldVersion = undefined;\n // throw arguments[0].target.error;\n // console.log(\"error in versionchange transaction - not sure if anything needs to be done here\", e.target.error.name);\n });\n transaction._prioritizedListeners.set(\"abort\", () => {\n connection._runningVersionchangeTransaction = false;\n connection._oldVersion = undefined;\n queueTask(() => {\n // Reset transaction in a tick after onabort (upgrade-transaction-lifecycle-user-aborted.any)\n request.transaction = null;\n cb(new AbortError());\n });\n });\n transaction._prioritizedListeners.set(\"complete\", () => {\n connection._runningVersionchangeTransaction = false;\n connection._oldVersion = undefined;\n // Let other complete event handlers run before continuing\n queueTask(() => {\n // Reset transaction in a tick after oncomplete (upgrade-transaction-lifecycle-committed.any.js)\n request.transaction = null;\n if (connection._closePending) {\n cb(new AbortError());\n } else {\n cb(null);\n }\n });\n });\n };\n waitForOthersClosed();\n });\n};\n\n// https://w3c.github.io/IndexedDB/#opening\nconst openDatabase = (databases, connectionQueues, name, version, request, cb) => {\n const openDBTask = () => {\n return new Promise(resolve => {\n const onComplete = err => {\n try {\n if (err) {\n // DO THIS HERE: ensure that connection is closed by running the steps for closing a database connection before these\n // steps are aborted.\n cb(err);\n } else {\n cb(null, connection);\n }\n } finally {\n resolve();\n }\n };\n\n // Let db be the database named name in storageKey, or null otherwise.\n let db = databases.get(name);\n if (db === undefined) {\n // If db is null, let db be a new database with name `name`, version 0 (zero), and with no object stores.\n db = new Database(name, 0);\n databases.set(name, db);\n }\n\n // If version is undefined, let version be 1 if db is null, or db’s version otherwise.\n if (version === undefined) {\n version = db.version !== 0 ? db.version : 1;\n }\n\n // If db’s version is greater than version, return a newly created \"VersionError\" DOMException and abort these steps.\n if (db.version > version) {\n return onComplete(new VersionError());\n }\n\n // Let connection be a new connection to db.\n const connection = new FDBDatabase(db);\n\n // If db’s version is less than version, then:\n if (db.version < version) {\n // (run a version change transaction and resolve so that the next promise in the queue will execute)\n runVersionchangeTransaction(connection, version, request, err => {\n onComplete(err);\n });\n } else {\n onComplete(null);\n }\n });\n };\n runTaskInConnectionQueue(connectionQueues, name, openDBTask);\n};\nclass FDBFactory {\n _databases = new Map();\n // https://w3c.github.io/IndexedDB/#connection-queue\n _connectionQueues = new Map(); // promise chain as lightweight FIFO task queue\n\n // https://w3c.github.io/IndexedDB/#dom-idbfactory-cmp\n cmp(first, second) {\n validateRequiredArguments(arguments.length, 2, \"IDBFactory.cmp\");\n return cmp(first, second);\n }\n\n // https://w3c.github.io/IndexedDB/#dom-idbfactory-deletedatabase\n deleteDatabase(name) {\n validateRequiredArguments(arguments.length, 1, \"IDBFactory.deleteDatabase\");\n const request = new FDBOpenDBRequest();\n request.source = null;\n queueTask(() => {\n deleteDatabase(this._databases, this._connectionQueues, name, request, (err, oldVersion) => {\n if (err) {\n request.error = new DOMException(err.message, err.name);\n request.readyState = \"done\";\n const event = new FakeEvent(\"error\", {\n bubbles: true,\n cancelable: true\n });\n event.eventPath = [];\n request.dispatchEvent(event);\n return;\n }\n request.result = undefined;\n request.readyState = \"done\";\n const event2 = new FDBVersionChangeEvent(\"success\", {\n newVersion: null,\n oldVersion\n });\n request.dispatchEvent(event2);\n });\n });\n return request;\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBFactory-open-IDBOpenDBRequest-DOMString-name-unsigned-long-long-version\n open(name, version) {\n validateRequiredArguments(arguments.length, 1, \"IDBFactory.open\");\n if (arguments.length > 1 && version !== undefined) {\n // Based on spec, not sure why \"MAX_SAFE_INTEGER\" instead of \"unsigned long long\", but it's needed to pass\n // tests\n version = enforceRange(version, \"MAX_SAFE_INTEGER\");\n }\n if (version === 0) {\n throw new TypeError(\"Database version cannot be 0\");\n }\n const request = new FDBOpenDBRequest();\n request.source = null;\n queueTask(() => {\n openDatabase(this._databases, this._connectionQueues, name, version, request, (err, connection) => {\n if (err) {\n request.result = undefined;\n request.readyState = \"done\";\n request.error = new DOMException(err.message, err.name);\n const event = new FakeEvent(\"error\", {\n bubbles: true,\n cancelable: true\n });\n event.eventPath = [];\n request.dispatchEvent(event);\n return;\n }\n request.result = connection;\n request.readyState = \"done\";\n const event2 = new FakeEvent(\"success\");\n event2.eventPath = [];\n request.dispatchEvent(event2);\n });\n });\n return request;\n }\n\n // https://w3c.github.io/IndexedDB/#dom-idbfactory-databases\n databases() {\n return Promise.resolve(Array.from(this._databases.entries(), ([name, database]) => {\n const activeVersionChangeConnection = database.connections.find(connection => connection._runningVersionchangeTransaction);\n // If a versionchange is in progress, report the old version. See `get-databases.any.js` test:\n // \"The result of databases() should contain the versions of databases at the time of calling,\n // regardless of versionchange transactions currently running.\"\n const version = activeVersionChangeConnection ? activeVersionChangeConnection._oldVersion : database.version;\n return {\n name,\n version\n };\n }).filter(({\n version\n }) => {\n // Ignore newly-created DBs with active versionchange transactions. See `get-databases.any.js` test:\n // \"The result of databases() should be only those databases which have been created at the\n // time of calling, regardless of versionchange transactions currently running.\"\n return version > 0;\n }));\n }\n get [Symbol.toStringTag]() {\n return \"IDBFactory\";\n }\n}\nexport default FDBFactory;","import FDBFactory from \"./FDBFactory.js\";\nconst fakeIndexedDB = new FDBFactory();\nexport default fakeIndexedDB;","import fakeIndexedDB from \"../build/esm/fakeIndexedDB.js\";\nimport FDBCursor from \"../build/esm/FDBCursor.js\";\nimport FDBCursorWithValue from \"../build/esm/FDBCursorWithValue.js\";\nimport FDBDatabase from \"../build/esm/FDBDatabase.js\";\nimport FDBFactory from \"../build/esm/FDBFactory.js\";\nimport FDBIndex from \"../build/esm/FDBIndex.js\";\nimport FDBKeyRange from \"../build/esm/FDBKeyRange.js\";\nimport FDBObjectStore from \"../build/esm/FDBObjectStore.js\";\nimport FDBOpenDBRequest from \"../build/esm/FDBOpenDBRequest.js\";\nimport FDBRecord from \"../build/esm/FDBRecord.js\";\nimport FDBRequest from \"../build/esm/FDBRequest.js\";\nimport FDBTransaction from \"../build/esm/FDBTransaction.js\";\nimport FDBVersionChangeEvent from \"../build/esm/FDBVersionChangeEvent.js\";\n\n// http://stackoverflow.com/a/33268326/786644 - works in browser, worker, and Node.js\nvar globalVar =\n typeof window !== \"undefined\"\n ? window\n : typeof WorkerGlobalScope !== \"undefined\"\n ? self\n : typeof global !== \"undefined\"\n ? global\n : Function(\"return this;\")();\n\n// Partly match the native behavior for `globalThis.indexedDB`, `globalThis.IDBCursor`, etc.\n// Per the IDL, `indexedDB` is readonly but the others are readwrite. For us, though, we want it to still\n// be overwritable with `globalThis.<global> = ...`, so we make them all readwrite.\n// https://w3c.github.io/IndexedDB/#idl-index\nconst createPropertyDescriptor = (value) => {\n return {\n value,\n enumerable: false,\n configurable: true,\n writable: true,\n };\n};\n\nObject.defineProperties(globalVar, {\n indexedDB: createPropertyDescriptor(fakeIndexedDB),\n IDBCursor: createPropertyDescriptor(FDBCursor),\n IDBCursorWithValue: createPropertyDescriptor(FDBCursorWithValue),\n IDBDatabase: createPropertyDescriptor(FDBDatabase),\n IDBFactory: createPropertyDescriptor(FDBFactory),\n IDBIndex: createPropertyDescriptor(FDBIndex),\n IDBKeyRange: createPropertyDescriptor(FDBKeyRange),\n IDBObjectStore: createPropertyDescriptor(FDBObjectStore),\n IDBOpenDBRequest: createPropertyDescriptor(FDBOpenDBRequest),\n IDBRecord: createPropertyDescriptor(FDBRecord),\n IDBRequest: createPropertyDescriptor(FDBRequest),\n IDBTransaction: createPropertyDescriptor(FDBTransaction),\n IDBVersionChangeEvent: createPropertyDescriptor(FDBVersionChangeEvent),\n});\n","/**\n * Interactive prompt helpers using @inquirer/prompts.\n *\n * These are only used in interactive (TTY) flows.\n * AI agents and CI should bypass prompts by passing all values via flags/env vars.\n */\n\nimport { select, input, password, confirm, checkbox, search } from '@inquirer/prompts'\n\nexport { select, input, password, confirm, checkbox, search }\n\n/**\n * Prompt user to pick from a list of items.\n * Returns the value of the selected choice.\n */\nexport async function promptSelect<T>(\n message: string,\n choices: Array<{ name: string; value: T; description?: string }>\n): Promise<T> {\n return select({ message, choices })\n}\n\n/**\n * Prompt user to pick multiple items from a list.\n * Returns array of selected values.\n */\nexport async function promptCheckbox<T>(\n message: string,\n choices: Array<{ name: string; value: T; checked?: boolean }>\n): Promise<T[]> {\n return checkbox({ message, choices })\n}\n\n/**\n * Prompt user to search and pick from a large list.\n * Type-ahead fuzzy filtering — best for docs (could be hundreds).\n */\nexport async function promptSearch<T>(\n message: string,\n choices: Array<{ name: string; value: T; description?: string }>\n): Promise<T> {\n return search({\n message,\n source: async (term) => {\n if (!term) return choices\n const lower = term.toLowerCase()\n return choices.filter((c) => c.name.toLowerCase().includes(lower))\n },\n })\n}\n\n/**\n * Prompt for text input. Returns trimmed string.\n */\nexport async function promptInput(message: string, required = true): Promise<string> {\n return input({\n message,\n validate: required ? (v) => (v.trim() ? true : 'Required') : undefined,\n })\n}\n\n/**\n * Prompt for a password (masked input).\n */\nexport async function promptPassword(message: string): Promise<string> {\n return password({\n message,\n mask: '*',\n validate: (v) => (v ? true : 'Required'),\n })\n}\n\n/**\n * Prompt for yes/no confirmation.\n */\nexport async function promptConfirm(message: string, defaultValue = true): Promise<boolean> {\n return confirm({ message, default: defaultValue })\n}\n","/**\n * arbi login [--email <email>] [--password <password>]\n *\n * Authenticates via SDK, stores signing key.\n * If email/password not provided via flags or env vars, prompts interactively.\n * After login, shows interactive workspace picker.\n */\n\nimport { Command } from 'commander'\nimport 'fake-indexeddb/auto'\nimport { createArbiClient } from '@arbidocs/sdk'\nimport { requireConfig, saveCredentials, updateConfig } from '../config.js'\nimport { promptInput, promptPassword, promptSelect } from '../prompts.js'\n\nexport function registerLoginCommand(program: Command): void {\n program\n .command('login')\n .description('Log in to ARBI')\n .option('-e, --email <email>', 'Email address (or ARBI_EMAIL env var)')\n .option('-p, --password <password>', 'Password (or ARBI_PASSWORD env var)')\n .option('-w, --workspace <id>', 'Workspace ID to select after login')\n .action(async (opts: { email?: string; password?: string; workspace?: string }) => {\n const config = requireConfig()\n\n // Resolve credentials: flags > env vars > interactive prompt\n const email = opts.email || process.env.ARBI_EMAIL || (await promptInput('Email'))\n const pw = opts.password || process.env.ARBI_PASSWORD || (await promptPassword('Password'))\n\n const arbi = createArbiClient({\n baseUrl: config.baseUrl,\n deploymentDomain: config.deploymentDomain,\n credentials: 'omit',\n })\n\n await arbi.crypto.initSodium()\n\n try {\n const result = await arbi.auth.login({ email, password: pw })\n\n saveCredentials({\n email,\n signingPrivateKeyBase64: arbi.crypto.bytesToBase64(result.signingPrivateKey),\n serverSessionKeyBase64: arbi.crypto.bytesToBase64(result.serverSessionKey),\n })\n\n const { data: workspaces } = await arbi.fetch.GET('/api/user/workspaces')\n const wsList = workspaces || []\n\n console.log(`Logged in as ${email}`)\n\n if (wsList.length === 0) {\n console.log('No workspaces found.')\n return\n }\n\n // If workspace specified via flag, select it directly\n if (opts.workspace) {\n const ws = wsList.find((w) => w.external_id === opts.workspace)\n if (!ws) {\n console.error(`Workspace ${opts.workspace} not found.`)\n process.exit(1)\n }\n updateConfig({ selectedWorkspaceId: ws.external_id })\n console.log(`Workspace: ${ws.name} (${ws.external_id})`)\n return\n }\n\n // Auto-select if only one workspace\n if (wsList.length === 1) {\n updateConfig({ selectedWorkspaceId: wsList[0].external_id })\n console.log(`Workspace: ${wsList[0].name} (${wsList[0].external_id})`)\n return\n }\n\n // Interactive workspace selection\n const choices = wsList.map((ws) => {\n const totalDocs = ws.shared_document_count + ws.private_document_count\n return {\n name: `${ws.name} (${totalDocs} docs)`,\n value: ws.external_id,\n description: ws.external_id,\n }\n })\n\n const selected = await promptSelect('Select workspace', choices)\n updateConfig({ selectedWorkspaceId: selected })\n const ws = wsList.find((w) => w.external_id === selected)!\n console.log(`Workspace: ${ws.name} (${selected})`)\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err)\n console.error(`Login failed: ${msg}`)\n process.exit(1)\n }\n })\n}\n","/**\n * arbi register — interactive registration\n * arbi register --non-interactive [opts] — CI/automation mode (requires SUPPORT_API_KEY)\n *\n * Interactive mode:\n * 1. Prompt for email\n * 2. Enter an invitation code, or request a verification email\n * 3. Set password + name\n * 4. On success, offer to log in immediately\n *\n * Non-interactive mode:\n * All fields via flags / env vars, verification code fetched via SUPPORT_API_KEY.\n */\n\nimport { Command } from 'commander'\nimport 'fake-indexeddb/auto'\nimport { createArbiClient } from '@arbidocs/sdk'\nimport { requireConfig, saveCredentials, updateConfig } from '../config.js'\nimport { promptInput, promptPassword, promptConfirm, promptSelect } from '../prompts.js'\n\nconst CENTRAL_API_URL = 'https://central.arbi.work'\n\n// ── CI verification code fetch ───────────────────────────────────────────────\n\nasync function getVerificationCode(email: string, apiKey: string): Promise<string> {\n const params = new URLSearchParams({ email })\n const res = await fetch(`${CENTRAL_API_URL}/license-management/verify-ci?${params.toString()}`, {\n method: 'GET',\n headers: { 'x-api-key': apiKey },\n })\n\n if (!res.ok) {\n const body = await res.text().catch(() => '')\n throw new Error(`Failed to get verification code: ${res.status} ${body}`)\n }\n\n const data = (await res.json()) as { verification_words?: string[]; verification_code?: string }\n const words = data?.verification_words ?? data?.verification_code ?? null\n if (!words) throw new Error('No verification code in response')\n\n return Array.isArray(words) ? words.join(' ') : String(words)\n}\n\n// ── Command ──────────────────────────────────────────────────────────────────\n\nexport function registerRegisterCommand(program: Command): void {\n program\n .command('register')\n .description('Register a new ARBI account')\n .option('--non-interactive', 'CI/automation mode (requires SUPPORT_API_KEY env var)')\n .option('-e, --email <email>', 'Email address (or ARBI_EMAIL env var)')\n .option('-p, --password <password>', 'Password (or ARBI_PASSWORD env var)')\n .option('--first-name <name>', 'First name')\n .option('--last-name <name>', 'Last name')\n .action(\n async (opts: {\n nonInteractive?: boolean\n email?: string\n password?: string\n firstName?: string\n lastName?: string\n }) => {\n const config = requireConfig()\n\n if (opts.nonInteractive) {\n await nonInteractiveRegister(config, opts)\n } else {\n await interactiveRegister(config, opts)\n }\n }\n )\n}\n\n// ── Interactive mode ─────────────────────────────────────────────────────────\n\nasync function interactiveRegister(\n config: { baseUrl: string; deploymentDomain: string },\n opts: { email?: string; password?: string; firstName?: string; lastName?: string }\n) {\n // 1. Email\n const email = opts.email || (await promptInput('Email'))\n\n const arbi = createArbiClient({\n baseUrl: config.baseUrl,\n deploymentDomain: config.deploymentDomain,\n credentials: 'omit',\n })\n await arbi.crypto.initSodium()\n\n // 2. Verification code — enter existing or request one\n const codeMethod = await promptSelect('Verification method', [\n { name: 'I have an invitation code', value: 'code' },\n { name: 'Send me a verification email', value: 'email' },\n ])\n\n let verificationCode: string\n if (codeMethod === 'code') {\n verificationCode = await promptInput('Invitation code')\n } else {\n console.log('Sending verification email...')\n const verifyResponse = await arbi.fetch.POST('/api/user/verify-email', {\n body: { email },\n })\n if (verifyResponse.error) {\n console.error(`Failed to send verification email: ${JSON.stringify(verifyResponse.error)}`)\n process.exit(1)\n }\n console.log('Verification email sent. Check your inbox.')\n verificationCode = await promptInput('Verification code')\n }\n\n // 3. Password\n const password = opts.password || (await promptPassword('Password'))\n const confirmPw = await promptPassword('Confirm password')\n if (password !== confirmPw) {\n console.error('Passwords do not match.')\n process.exit(1)\n }\n\n // 4. Name\n const firstName = opts.firstName || (await promptInput('First name', false)) || 'User'\n const lastName = opts.lastName || (await promptInput('Last name', false)) || ''\n\n // 5. Register\n try {\n await arbi.auth.register({\n email,\n password,\n verificationCode,\n firstName,\n lastName,\n })\n console.log(`\\nRegistered successfully as ${email}`)\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err)\n console.error(`Registration failed: ${msg}`)\n process.exit(1)\n }\n\n // 6. Offer to log in\n const doLogin = await promptConfirm('Log in now?')\n if (doLogin) {\n try {\n const loginResult = await arbi.auth.login({ email, password })\n saveCredentials({\n email,\n signingPrivateKeyBase64: arbi.crypto.bytesToBase64(loginResult.signingPrivateKey),\n serverSessionKeyBase64: arbi.crypto.bytesToBase64(loginResult.serverSessionKey),\n })\n\n const { data: workspaces } = await arbi.fetch.GET('/api/user/workspaces')\n const wsList = workspaces || []\n\n console.log(`Logged in as ${email}`)\n if (wsList.length === 1) {\n updateConfig({ selectedWorkspaceId: wsList[0].external_id })\n console.log(`Workspace: ${wsList[0].name} (${wsList[0].external_id})`)\n } else if (wsList.length > 1) {\n const choices = wsList.map((ws) => {\n const totalDocs = ws.shared_document_count + ws.private_document_count\n return {\n name: `${ws.name} (${totalDocs} docs)`,\n value: ws.external_id,\n description: ws.external_id,\n }\n })\n const selected = await promptSelect('Select workspace', choices)\n updateConfig({ selectedWorkspaceId: selected })\n const ws = wsList.find((w) => w.external_id === selected)!\n console.log(`Workspace: ${ws.name} (${selected})`)\n }\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err)\n console.error(`Login failed: ${msg}`)\n console.error('You can log in later with: arbi login')\n }\n }\n}\n\n// ── Non-interactive mode ─────────────────────────────────────────────────────\n\nasync function nonInteractiveRegister(\n config: { baseUrl: string; deploymentDomain: string },\n opts: { email?: string; password?: string; firstName?: string; lastName?: string }\n) {\n const email = opts.email || process.env.ARBI_EMAIL\n const password = opts.password || process.env.ARBI_PASSWORD\n const supportApiKey = process.env.SUPPORT_API_KEY\n\n if (!email) {\n console.error('Email required. Use --email <email> or set ARBI_EMAIL')\n process.exit(1)\n }\n if (!password) {\n console.error('Password required. Use --password <password> or set ARBI_PASSWORD')\n process.exit(1)\n }\n if (!supportApiKey) {\n console.error('SUPPORT_API_KEY env var is required for --non-interactive registration')\n process.exit(1)\n }\n\n const arbi = createArbiClient({\n baseUrl: config.baseUrl,\n deploymentDomain: config.deploymentDomain,\n credentials: 'omit',\n })\n await arbi.crypto.initSodium()\n\n // Request verification email\n const verifyResponse = await arbi.fetch.POST('/api/user/verify-email', {\n body: { email },\n })\n if (verifyResponse.error) {\n console.error(`verify-email failed: ${JSON.stringify(verifyResponse.error)}`)\n process.exit(1)\n }\n\n // Fetch code from CI endpoint\n const verificationCode = await getVerificationCode(email, supportApiKey)\n\n // Register\n try {\n await arbi.auth.register({\n email,\n password,\n verificationCode,\n firstName: opts.firstName ?? 'Test',\n lastName: opts.lastName ?? 'User',\n })\n console.log(`Registered: ${email}`)\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err)\n console.error(`Registration failed: ${msg}`)\n process.exit(1)\n }\n}\n","/**\n * arbi logout\n */\n\nimport { Command } from 'commander'\nimport { deleteCredentials, updateConfig } from '../config.js'\n\nexport function registerLogoutCommand(program: Command): void {\n program\n .command('logout')\n .description('Log out of ARBI')\n .action(() => {\n deleteCredentials()\n updateConfig({ selectedWorkspaceId: undefined })\n console.log('Logged out.')\n })\n}\n","/**\n * arbi status\n *\n * Shows current config + login state (no API calls).\n */\n\nimport { Command } from 'commander'\nimport { getConfig, getCredentials } from '../config.js'\n\nexport function registerStatusCommand(program: Command): void {\n program\n .command('status')\n .description('Show current configuration and login status')\n .action(() => {\n const config = getConfig()\n const creds = getCredentials()\n\n if (!config?.baseUrl) {\n console.log('Not configured. Run: arbi config set-url <url>')\n return\n }\n\n console.log(`Server: ${config.baseUrl}`)\n\n if (creds) {\n console.log(`User: ${creds.email}`)\n } else {\n console.log('User: (not logged in)')\n }\n\n if (config.selectedWorkspaceId) {\n console.log(`Workspace: ${config.selectedWorkspaceId}`)\n } else {\n console.log('Workspace: (none selected)')\n }\n })\n}\n","/**\n * Shared CLI helpers — eliminates boilerplate across all commands.\n *\n * Error handling wraps core's throwing functions with process.exit(1).\n * Auth/workspace resolution delegates to core via the CLI's store instance.\n * Table formatting and JSON parsing are CLI-specific.\n */\n\nimport {\n ArbiError,\n resolveAuth as coreResolveAuth,\n resolveWorkspace as coreResolveWorkspace,\n type AuthContext,\n type WorkspaceContext,\n} from '@arbidocs/core'\nimport { store } from './config.js'\n\n// Re-export context types for convenience\nexport type { AuthContext, WorkspaceContext }\n\n// ── Error handling ────────────────────────────────────────────────────────────\n\n/**\n * Wrap a command action — catches errors, formats message, exits.\n * Every command handler should use this instead of manual try/catch.\n */\nexport function runAction(fn: () => Promise<void>): () => Promise<void> {\n return async () => {\n try {\n await fn()\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err)\n console.error(`Error: ${msg}`)\n process.exit(1)\n }\n }\n}\n\n// ── Auth & workspace resolution ───────────────────────────────────────────────\n\n/**\n * Authenticate and return the SDK client + config.\n * Delegates to core, catches ArbiError for CLI exit behavior.\n */\nexport async function resolveAuth(): Promise<AuthContext> {\n try {\n return await coreResolveAuth(store)\n } catch (err) {\n if (err instanceof ArbiError) {\n console.error(err.message)\n process.exit(1)\n }\n throw err\n }\n}\n\n/**\n * Authenticate, resolve workspace, and set up headers.\n * Delegates to core, catches ArbiError for CLI exit behavior.\n */\nexport async function resolveWorkspace(workspaceOpt?: string): Promise<WorkspaceContext> {\n try {\n return await coreResolveWorkspace(store, workspaceOpt)\n } catch (err) {\n if (err instanceof ArbiError) {\n console.error(err.message)\n process.exit(1)\n }\n throw err\n }\n}\n\n// ── Table formatting ──────────────────────────────────────────────────────────\n\nexport interface Column {\n header: string\n width: number\n value: (row: Record<string, unknown>) => string\n}\n\n/**\n * Print a formatted table with header + rows.\n * Handles truncation to column width and padding.\n */\nexport function printTable<T extends Record<string, unknown>>(columns: Column[], rows: T[]): void {\n // Header\n console.log(columns.map((c) => c.header.padEnd(c.width)).join(''))\n\n // Rows\n for (const row of rows) {\n console.log(\n columns\n .map((c) => {\n const val = c.value(row as Record<string, unknown>)\n return val.slice(0, c.width - 2).padEnd(c.width)\n })\n .join('')\n )\n }\n}\n\n// ── JSON parsing ──────────────────────────────────────────────────────────────\n\n/**\n * Parse a JSON string argument with a helpful error message.\n */\nexport function parseJsonArg<T = Record<string, unknown>>(input: string, example: string): T {\n try {\n return JSON.parse(input) as T\n } catch {\n console.error(`Invalid JSON. Example: ${example}`)\n process.exit(1)\n }\n}\n","/**\n * arbi workspaces — list workspaces\n * arbi workspace select/create/delete/update — workspace CRUD\n * arbi workspace users/add-user/remove-user — user management\n * arbi workspace set-role/copy — role & copy operations\n */\n\nimport { Command } from 'commander'\nimport { workspaces } from '@arbidocs/core'\nimport { runAction, resolveAuth, resolveWorkspace, printTable, parseJsonArg } from '../helpers.js'\nimport { updateConfig } from '../config.js'\nimport { promptSelect } from '../prompts.js'\n\nexport function registerWorkspacesCommand(program: Command): void {\n program\n .command('workspaces')\n .description('List workspaces')\n .action(\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const data = await workspaces.listWorkspaces(arbi)\n\n if (data.length === 0) {\n console.log('No workspaces found.')\n return\n }\n\n printTable(\n [\n { header: 'ID', width: 24, value: (r) => r.external_id as string },\n { header: 'NAME', width: 30, value: (r) => r.name as string },\n {\n header: 'DOCS',\n width: 6,\n value: (r) =>\n String((r.shared_document_count as number) + (r.private_document_count as number)),\n },\n {\n header: 'ROLE',\n width: 10,\n value: (r) => (r.users as { role: string }[])?.[0]?.role ?? '',\n },\n ],\n data\n )\n })\n )\n\n const workspace = program.command('workspace').description('Workspace management')\n\n workspace\n .command('select [id]')\n .description('Select active workspace (interactive picker if no ID given)')\n .action((id?: string) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const data = await workspaces.listWorkspaces(arbi)\n\n if (data.length === 0) {\n console.log('No workspaces found.')\n return\n }\n\n let selectedId: string\n if (id) {\n const ws = data.find((w) => w.external_id === id)\n if (!ws) {\n console.error(`Workspace ${id} not found.`)\n console.error('Available workspaces:')\n for (const w of data) console.error(` ${w.external_id} ${w.name}`)\n process.exit(1)\n }\n selectedId = id\n } else {\n // Interactive picker\n const choices = data.map((ws) => {\n const totalDocs = ws.shared_document_count + ws.private_document_count\n return {\n name: `${ws.name} (${totalDocs} docs)`,\n value: ws.external_id as string,\n description: ws.external_id as string,\n }\n })\n selectedId = await promptSelect('Select workspace', choices)\n }\n\n updateConfig({ selectedWorkspaceId: selectedId })\n const ws = data.find((w) => w.external_id === selectedId)!\n console.log(`Selected: ${ws.name} (${selectedId})`)\n })()\n )\n\n workspace\n .command('create <name>')\n .description('Create a new workspace')\n .option('-d, --description <text>', 'Workspace description')\n .option('--public', 'Make workspace public', false)\n .action((name: string, opts: { description?: string; public?: boolean }) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const data = await workspaces.createWorkspace(\n arbi,\n name,\n opts.description,\n opts.public ?? false\n )\n console.log(`Created: ${data.name} (${data.external_id})`)\n })()\n )\n\n workspace\n .command('delete <id>')\n .description('Delete a workspace')\n .action((id: string) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const data = await workspaces.deleteWorkspace(arbi, id)\n console.log(data?.detail ?? `Deleted workspace ${id}`)\n })()\n )\n\n workspace\n .command('update <id> <json>')\n .description('Update workspace properties (pass JSON)')\n .action((id: string, json: string) =>\n runAction(async () => {\n const body = parseJsonArg(json, 'arbi workspace update wrk-123 \\'{\"name\": \"New Name\"}\\'')\n const { arbi } = await resolveWorkspace(id)\n const data = await workspaces.updateWorkspace(arbi, id, body)\n console.log(`Updated: ${data.name} (${data.external_id})`)\n })()\n )\n\n workspace\n .command('users')\n .description('List users in the active workspace')\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .action((opts: { workspace?: string }) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace(opts.workspace)\n const data = await workspaces.listWorkspaceUsers(arbi, workspaceId)\n\n if (data.length === 0) {\n console.log('No users found.')\n return\n }\n\n type User = {\n external_id?: string\n email?: string\n given_name?: string\n family_name?: string\n }\n printTable(\n [\n {\n header: 'USER_ID',\n width: 16,\n value: (r) => (r.user as User)?.external_id ?? '',\n },\n {\n header: 'NAME',\n width: 20,\n value: (r) => {\n const u = r.user as User\n return [u?.given_name, u?.family_name].filter(Boolean).join(' ') || ''\n },\n },\n {\n header: 'EMAIL',\n width: 30,\n value: (r) => (r.user as User)?.email ?? '',\n },\n { header: 'ROLE', width: 14, value: (r) => r.role as string },\n { header: 'DOCS', width: 6, value: (r) => String(r.document_count) },\n { header: 'CONVS', width: 6, value: (r) => String(r.conversation_count) },\n ],\n data\n )\n })()\n )\n\n workspace\n .command('add-user <emails...>')\n .description('Add users to the active workspace')\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .option('-r, --role <role>', 'Role: owner, collaborator, guest', 'collaborator')\n .action((emails: string[], opts: { workspace?: string; role?: string }) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace(opts.workspace)\n const role = (opts.role ?? 'collaborator') as 'owner' | 'collaborator' | 'guest'\n const data = await workspaces.addWorkspaceUsers(arbi, workspaceId, emails, role)\n for (const u of data) console.log(`Added: ${u.user.email} as ${u.role}`)\n })()\n )\n\n workspace\n .command('remove-user <user-ids...>')\n .description('Remove users from the active workspace')\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .action((userIds: string[], opts: { workspace?: string }) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace(opts.workspace)\n await workspaces.removeWorkspaceUsers(arbi, workspaceId, userIds)\n console.log(`Removed ${userIds.length} user(s).`)\n })()\n )\n\n workspace\n .command('set-role <role> <user-ids...>')\n .description('Update user roles (owner, collaborator, guest)')\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .action((role: string, userIds: string[], opts: { workspace?: string }) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace(opts.workspace)\n const data = await workspaces.setUserRole(\n arbi,\n workspaceId,\n userIds,\n role as 'owner' | 'collaborator' | 'guest'\n )\n for (const u of data) console.log(`Updated: ${u.user.email} → ${u.role}`)\n })()\n )\n\n workspace\n .command('copy <target-workspace-id> <doc-ids...>')\n .description('Copy documents to another workspace')\n .option('-w, --workspace <id>', 'Source workspace ID (defaults to selected workspace)')\n .action((targetId: string, docIds: string[], opts: { workspace?: string }) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace(opts.workspace)\n const data = await workspaces.copyDocuments(arbi, workspaceId, targetId, docIds)\n console.log(`${data.detail} (${data.documents_copied} document(s) copied)`)\n })()\n )\n}\n","/**\n * arbi docs — list documents\n * arbi doc get [ids...] — get doc details (picker if no IDs)\n * arbi doc delete [ids...] — delete docs (picker if no IDs)\n * arbi doc update [json] — update docs (form if no JSON)\n * arbi doc upload-url <urls...> — upload from URLs\n * arbi doc parsed [doc-id] <stage> — parsed content (picker if no doc ID)\n */\n\nimport { Command } from 'commander'\nimport { documents } from '@arbidocs/core'\nimport { runAction, resolveWorkspace, printTable, parseJsonArg } from '../helpers.js'\nimport { promptSearch, promptCheckbox, promptInput, promptSelect } from '../prompts.js'\n\nfunction formatSize(bytes: number | null | undefined): string {\n if (!bytes) return '-'\n if (bytes < 1024) return `${bytes} B`\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`\n}\n\n/** Fetch workspace docs and return as picker choices */\nasync function fetchDocChoices(\n arbi: Awaited<ReturnType<typeof resolveWorkspace>>['arbi'],\n workspaceId: string\n) {\n const data = await documents.listDocuments(arbi, workspaceId)\n if (data.length === 0) {\n console.log('No documents found.')\n process.exit(0)\n }\n return data.map((d) => ({\n name: `${d.file_name ?? 'Unnamed'} (${d.status})`,\n value: d.external_id as string,\n description: d.external_id as string,\n }))\n}\n\nexport function registerDocsCommand(program: Command): void {\n program\n .command('docs')\n .description('List documents in the active workspace')\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .action((opts: { workspace?: string }) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace(opts.workspace)\n const data = await documents.listDocuments(arbi, workspaceId)\n\n if (data.length === 0) {\n console.log('No documents found.')\n return\n }\n\n printTable(\n [\n { header: 'ID', width: 24, value: (r) => r.external_id as string },\n { header: 'NAME', width: 36, value: (r) => (r.file_name as string) ?? 'Unnamed' },\n { header: 'STATUS', width: 14, value: (r) => (r.status as string) ?? '' },\n { header: 'SIZE', width: 10, value: (r) => formatSize(r.file_size as number | null) },\n ],\n data\n )\n })()\n )\n\n const doc = program.command('doc').description('Document management')\n\n doc\n .command('get [ids...]')\n .description('Get document details (interactive picker if no IDs given)')\n .action((ids?: string[]) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace()\n let docIds = ids && ids.length > 0 ? ids : undefined\n if (!docIds) {\n const choices = await fetchDocChoices(arbi, workspaceId)\n const selected = await promptCheckbox('Select documents', choices)\n if (selected.length === 0) return\n docIds = selected\n }\n const data = await documents.getDocuments(arbi, docIds)\n console.log(JSON.stringify(data, null, 2))\n })()\n )\n\n doc\n .command('delete [ids...]')\n .description('Delete documents (interactive picker if no IDs given)')\n .action((ids?: string[]) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace()\n let docIds = ids && ids.length > 0 ? ids : undefined\n if (!docIds) {\n const choices = await fetchDocChoices(arbi, workspaceId)\n const selected = await promptCheckbox('Select documents to delete', choices)\n if (selected.length === 0) return\n docIds = selected\n }\n await documents.deleteDocuments(arbi, docIds)\n console.log(`Deleted ${docIds.length} document(s).`)\n })()\n )\n\n doc\n .command('update [json]')\n .description('Update documents (interactive form if no JSON given)')\n .action((json?: string) =>\n runAction(async () => {\n if (json) {\n const parsed = parseJsonArg<\n Record<string, unknown>[] | { documents: Record<string, unknown>[] }\n >(json, 'arbi doc update \\'[{\"external_id\": \"doc-123\", \"shared\": true}]\\'')\n const docs = Array.isArray(parsed) ? parsed : parsed.documents\n\n const { arbi } = await resolveWorkspace()\n const data = await documents.updateDocuments(arbi, docs)\n console.log(`Updated ${data.length} document(s).`)\n } else {\n // Interactive: pick a doc, then ask what to change\n const { arbi, workspaceId } = await resolveWorkspace()\n const choices = await fetchDocChoices(arbi, workspaceId)\n const docId = await promptSearch('Select document to update', choices)\n\n const field = await promptSelect('Field to update', [\n { name: 'Title', value: 'title' },\n { name: 'Shared', value: 'shared' },\n { name: 'Author', value: 'author' },\n { name: 'Abstract', value: 'abstract' },\n { name: 'Date', value: 'date' },\n ])\n\n let value: unknown\n if (field === 'shared') {\n value = await promptSelect('Shared?', [\n { name: 'Yes', value: true },\n { name: 'No', value: false },\n ])\n } else if (field === 'date') {\n value = (await promptInput('Date (YYYY-MM-DD)', false)) || null\n } else {\n value = await promptInput(`${field.charAt(0).toUpperCase() + field.slice(1)}`)\n }\n\n const data = await documents.updateDocuments(arbi, [\n { external_id: docId, [field]: value },\n ])\n console.log(`Updated ${data.length} document(s).`)\n }\n })()\n )\n\n doc\n .command('upload-url <urls...>')\n .description('Upload documents from URLs')\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .option('--shared', 'Make documents shared', false)\n .action((urls: string[], opts: { workspace?: string; shared?: boolean }) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace(opts.workspace)\n const data = await documents.uploadUrl(arbi, urls, workspaceId, opts.shared ?? false)\n console.log(`Uploaded: ${data.doc_ext_ids.join(', ')}`)\n if (data.duplicates && data.duplicates.length > 0) {\n console.log(`Duplicates: ${data.duplicates.join(', ')}`)\n }\n })()\n )\n\n doc\n .command('parsed [doc-id] [stage]')\n .description('Get parsed document content (stage: marker, subchunk, final)')\n .action((docId?: string, stage?: string) =>\n runAction(async () => {\n const { arbi, accessToken, workspaceKeyHeader, workspaceId, config } =\n await resolveWorkspace()\n\n // Pick doc if not given\n if (!docId) {\n const choices = await fetchDocChoices(arbi, workspaceId)\n docId = await promptSearch('Select document', choices)\n }\n\n // Pick stage if not given\n const validStages = ['marker', 'subchunk', 'final']\n if (!stage) {\n stage = await promptSelect('Parsing stage', [\n { name: 'Final (processed)', value: 'final' },\n { name: 'Subchunk', value: 'subchunk' },\n { name: 'Marker (raw)', value: 'marker' },\n ])\n } else if (!validStages.includes(stage)) {\n console.error(`Invalid stage: ${stage}. Must be one of: ${validStages.join(', ')}`)\n process.exit(1)\n }\n\n const data = await documents.getParsedContent(\n config.baseUrl,\n accessToken,\n workspaceKeyHeader,\n docId,\n stage\n )\n console.log(JSON.stringify(data, null, 2))\n })()\n )\n}\n","/**\n * arbi upload <file...> [--workspace <id>] [--watch]\n */\n\nimport { Command } from 'commander'\nimport fs from 'node:fs'\nimport path from 'node:path'\nimport { isMessageType, type WsTaskUpdateMessage } from '@arbidocs/sdk'\nimport { documents, connectWebSocket } from '@arbidocs/core'\nimport { runAction, resolveWorkspace } from '../helpers.js'\n\nexport function registerUploadCommand(program: Command): void {\n program\n .command('upload <files...>')\n .description('Upload documents to the active workspace')\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .option('-W, --watch', 'Watch document processing progress after upload')\n .action((files: string[], opts: { workspace?: string; watch?: boolean }) =>\n runAction(async () => {\n // Validate files exist before authenticating\n for (const f of files) {\n if (!fs.existsSync(f)) {\n console.error(`File not found: ${f}`)\n process.exit(1)\n }\n }\n\n const { config, accessToken, workspaceKeyHeader, workspaceId } = await resolveWorkspace(\n opts.workspace\n )\n\n // Track uploaded doc IDs and their file names for --watch\n const uploadedDocs = new Map<string, string>()\n\n for (const filePath of files) {\n const fileBuffer = fs.readFileSync(filePath)\n const fileName = path.basename(filePath)\n\n const result = await documents.uploadFile(\n config.baseUrl,\n accessToken,\n workspaceKeyHeader,\n workspaceId,\n new Blob([fileBuffer]),\n fileName\n )\n\n console.log(`Uploaded: ${fileName} (${result.doc_ext_ids.join(', ')})`)\n if (result.duplicates && result.duplicates.length > 0) {\n console.log(` Duplicates: ${result.duplicates.join(', ')}`)\n }\n\n for (const id of result.doc_ext_ids) uploadedDocs.set(id, fileName)\n }\n\n // --watch: monitor processing via WebSocket\n if (opts.watch && uploadedDocs.size > 0) {\n const pending = new Set(uploadedDocs.keys())\n console.log(`\\nWatching ${pending.size} document(s)...`)\n\n const conn = await connectWebSocket({\n baseUrl: config.baseUrl,\n accessToken,\n onMessage: (msg) => {\n if (isMessageType<WsTaskUpdateMessage>(msg, 'task_update')) {\n if (!pending.has(msg.doc_ext_id)) return\n console.log(\n ` ${uploadedDocs.get(msg.doc_ext_id) || msg.file_name}: ${msg.status} (${msg.progress}%)`\n )\n if (msg.status === 'completed' || msg.status === 'failed') {\n pending.delete(msg.doc_ext_id)\n if (pending.size === 0) {\n console.log('\\nAll documents processed.')\n conn.close()\n }\n }\n }\n },\n onClose: () => {\n if (pending.size > 0)\n console.log(`\\nConnection closed. ${pending.size} document(s) still processing.`)\n },\n })\n }\n })()\n )\n}\n","/**\n * arbi download [doc-id] [--output <path>]\n *\n * Interactive doc picker if no doc-id given.\n */\n\nimport { Command } from 'commander'\nimport fs from 'node:fs'\nimport path from 'node:path'\nimport { documents } from '@arbidocs/core'\nimport { runAction, resolveWorkspace } from '../helpers.js'\nimport { promptSearch } from '../prompts.js'\n\nexport function registerDownloadCommand(program: Command): void {\n program\n .command('download [doc-id]')\n .description('Download a document (interactive picker if no ID given)')\n .option('-o, --output <path>', 'Output file path')\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .action((docId: string | undefined, opts: { output?: string; workspace?: string }) =>\n runAction(async () => {\n const { arbi, config, accessToken, workspaceKeyHeader, workspaceId } =\n await resolveWorkspace(opts.workspace)\n\n // Pick doc if not given\n if (!docId) {\n const data = await documents.listDocuments(arbi, workspaceId)\n if (data.length === 0) {\n console.log('No documents found.')\n return\n }\n const choices = data.map((d) => ({\n name: `${d.file_name ?? 'Unnamed'} (${d.status})`,\n value: d.external_id as string,\n description: d.external_id as string,\n }))\n docId = await promptSearch('Select document to download', choices)\n }\n\n const res = await documents.downloadDocument(\n config.baseUrl,\n accessToken,\n workspaceKeyHeader,\n docId\n )\n\n let filename = `${docId}`\n const disposition = res.headers.get('content-disposition')\n if (disposition) {\n const match = disposition.match(/filename[*]?=(?:UTF-8''|\"?)([^\";]+)/i)\n if (match) filename = decodeURIComponent(match[1].replace(/\"/g, ''))\n }\n\n const outputPath = opts.output || path.join(process.cwd(), filename)\n const buffer = Buffer.from(await res.arrayBuffer())\n fs.writeFileSync(outputPath, buffer)\n console.log(\n `Downloaded: ${path.basename(outputPath)} (${(buffer.length / (1024 * 1024)).toFixed(1)} MB)`\n )\n })()\n )\n}\n","/**\n * arbi ask \"question\" [--workspace <id>] [--new]\n *\n * Streams SSE response from POST /api/assistant/query.\n * Always includes all workspace documents in retrieval context.\n * Maintains conversation continuity: each response's assistant message ID\n * is saved and sent as parent_message_ext_id in the next query.\n * Use --new to start a fresh conversation.\n */\n\nimport { Command } from 'commander'\nimport { streamSSE, documents, assistant } from '@arbidocs/core'\nimport { runAction, resolveWorkspace } from '../helpers.js'\nimport { getChatSession, updateChatSession, clearChatSession } from '../config.js'\n\nexport function registerAskCommand(program: Command): void {\n program\n .command('ask <question>')\n .description('Ask the RAG assistant a question')\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .option('-c, --config <id>', 'Config ext_id to use (e.g. cfg-xxx)')\n .option('-n, --new', 'Start a new conversation (ignore previous context)')\n .option('-v, --verbose', 'Show agent steps and tool calls')\n .action(\n (\n question: string,\n opts: { workspace?: string; config?: string; new?: boolean; verbose?: boolean }\n ) =>\n runAction(async () => {\n const { arbi, accessToken, workspaceKeyHeader, workspaceId, config } =\n await resolveWorkspace(opts.workspace)\n\n // Load chat session\n const session = getChatSession()\n\n // --new flag clears conversation state\n if (opts.new) {\n clearChatSession()\n session.lastMessageExtId = null\n }\n\n // Always include all workspace documents in retrieval context\n const docs = await documents.listDocuments(arbi, workspaceId)\n const docIds = docs.map((d) => d.external_id as string)\n\n // Query the assistant\n const res = await assistant.queryAssistant({\n baseUrl: config.baseUrl,\n accessToken,\n workspaceKeyHeader,\n workspaceId,\n question,\n docIds,\n parentMessageExtId: session.lastMessageExtId,\n configExtId: opts.config,\n })\n\n const { assistantMessageExtId } = await streamSSE(res, {\n onToken: (content) => process.stdout.write(content),\n onAgentStep: (data) => {\n if (opts.verbose) {\n const focus = data.focus || data.status || ''\n console.error(`\\n[agent] ${focus}`)\n }\n },\n onError: (message) => console.error(`\\nError: ${message}`),\n })\n\n process.stdout.write('\\n')\n\n // Save assistant message ID for conversation continuity\n if (assistantMessageExtId) {\n updateChatSession({ lastMessageExtId: assistantMessageExtId })\n }\n })()\n )\n}\n","/**\n * arbi watch — stream workspace activity in real time\n */\n\nimport { Command } from 'commander'\nimport {\n isMessageType,\n type WsTaskUpdateMessage,\n type WsBatchCompleteMessage,\n type WsErrorMessage,\n} from '@arbidocs/sdk'\nimport { runAction, resolveWorkspace } from '../helpers.js'\nimport { connectWebSocket } from '@arbidocs/core'\n\nfunction timestamp(): string {\n return new Date().toLocaleTimeString('en-GB', { hour12: false })\n}\n\nexport function registerWatchCommand(program: Command): void {\n program\n .command('watch')\n .description('Watch workspace activity in real time')\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .action((opts: { workspace?: string }) =>\n runAction(async () => {\n const { config, accessToken, workspaceId } = await resolveWorkspace(opts.workspace)\n\n console.log(`Watching workspace ${workspaceId}... (Ctrl+C to stop)`)\n\n await connectWebSocket({\n baseUrl: config.baseUrl,\n accessToken,\n onMessage: (msg) => {\n if (isMessageType<WsTaskUpdateMessage>(msg, 'task_update')) {\n console.log(\n `[${timestamp()}] task_update: ${msg.file_name} - ${msg.status} (${msg.progress}%)`\n )\n } else if (isMessageType<WsBatchCompleteMessage>(msg, 'batch_complete')) {\n console.log(\n `[${timestamp()}] batch_complete: ${msg.batch_type} - ${msg.doc_ext_ids.length} docs`\n )\n } else if (isMessageType<WsErrorMessage>(msg, 'error')) {\n console.log(`[${timestamp()}] error: ${msg.message}`)\n } else {\n console.log(`[${timestamp()}] ${msg.type}: ${JSON.stringify(msg)}`)\n }\n },\n onClose: (code, reason) => {\n console.log(`\\nConnection closed (code ${code}${reason ? ': ' + reason : ''})`)\n },\n })\n })()\n )\n}\n","/**\n * arbi contacts — list contacts\n * arbi contacts add [emails] — add contacts (prompt if no emails)\n * arbi contacts remove [ids] — remove contacts (picker if no IDs)\n */\n\nimport { Command } from 'commander'\nimport { contacts as contactOps } from '@arbidocs/core'\nimport { runAction, resolveAuth, printTable } from '../helpers.js'\nimport { promptCheckbox, promptInput } from '../prompts.js'\n\nexport function registerContactsCommand(program: Command): void {\n const contacts = program.command('contacts').description('Manage contacts')\n\n contacts\n .command('list')\n .description('List all contacts')\n .action(\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const data = await contactOps.listContacts(arbi)\n\n if (data.length === 0) {\n console.log('No contacts found.')\n return\n }\n\n type User = { given_name?: string; family_name?: string }\n printTable(\n [\n { header: 'ID', width: 16, value: (r) => r.external_id as string },\n {\n header: 'NAME',\n width: 20,\n value: (r) => {\n const u = r.user as User | null\n return u ? [u.given_name, u.family_name].filter(Boolean).join(' ') : ''\n },\n },\n { header: 'EMAIL', width: 30, value: (r) => r.email as string },\n { header: 'STATUS', width: 18, value: (r) => r.status as string },\n ],\n data\n )\n })\n )\n\n contacts\n .command('add [emails...]')\n .description('Add contacts by email (prompt if no emails given)')\n .action((emails?: string[]) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n if (!emails || emails.length === 0) {\n const input = await promptInput('Email address(es), comma-separated')\n emails = input\n .split(',')\n .map((e) => e.trim())\n .filter(Boolean)\n if (emails.length === 0) return\n }\n const data = await contactOps.addContacts(arbi, emails)\n for (const c of data) {\n console.log(`Added: ${c.email} (${c.external_id}) — ${c.status}`)\n }\n })()\n )\n\n contacts\n .command('remove [ids...]')\n .description('Remove contacts (interactive picker if no IDs given)')\n .action((ids?: string[]) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n let contactIds = ids && ids.length > 0 ? ids : undefined\n if (!contactIds) {\n const data = await contactOps.listContacts(arbi)\n if (data.length === 0) {\n console.log('No contacts found.')\n return\n }\n type User = { given_name?: string; family_name?: string }\n contactIds = await promptCheckbox(\n 'Select contacts to remove',\n data.map((c) => {\n const u = c.user as User | null\n const name = u ? [u.given_name, u.family_name].filter(Boolean).join(' ') : ''\n return {\n name: name ? `${name} (${c.email})` : (c.email as string),\n value: c.external_id as string,\n }\n })\n )\n if (contactIds.length === 0) return\n }\n await contactOps.removeContacts(arbi, contactIds)\n console.log(`Removed ${contactIds.length} contact(s).`)\n })()\n )\n\n // Default action: list\n contacts.action(async () => {\n await contacts.commands.find((c) => c.name() === 'list')!.parseAsync([], { from: 'user' })\n })\n}\n","/**\n * arbi dm list — list DMs / notifications\n * arbi dm send [recipient] [content] — send a DM (picker + prompt if no args)\n * arbi dm read [ids...] — mark messages as read (picker if no IDs)\n * arbi dm delete [ids...] — delete messages (picker if no IDs)\n */\n\nimport { Command } from 'commander'\nimport { dm as dmOps, contacts as contactOps } from '@arbidocs/core'\nimport { runAction, resolveAuth, printTable } from '../helpers.js'\nimport { promptSelect, promptCheckbox, promptInput } from '../prompts.js'\n\nexport function registerDmCommand(program: Command): void {\n const dm = program.command('dm').description('Direct messages')\n\n dm.command('list')\n .description('List all DMs and notifications')\n .action(\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const data = await dmOps.listDMs(arbi)\n\n if (data.length === 0) {\n console.log('No messages found.')\n return\n }\n\n type Sender = { email?: string; given_name?: string; family_name?: string }\n printTable(\n [\n { header: 'ID', width: 16, value: (r) => r.external_id as string },\n { header: 'TYPE', width: 18, value: (r) => r.type as string },\n {\n header: 'FROM',\n width: 22,\n value: (r) => {\n const s = r.sender as Sender | null\n if (!s) return ''\n const name = [s.given_name, s.family_name].filter(Boolean).join(' ')\n return name || s.email || ''\n },\n },\n { header: 'READ', width: 6, value: (r) => (r.read ? 'yes' : 'no') },\n { header: 'CONTENT', width: 40, value: (r) => (r.content as string) ?? '' },\n ],\n data\n )\n })\n )\n\n dm.command('send [recipient] [content]')\n .description('Send a DM (interactive if no args; recipient can be email or user ext_id)')\n .action((recipient?: string, content?: string) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n\n // Pick recipient from contacts if not given\n if (!recipient) {\n const contacts = await contactOps.listContacts(arbi)\n if (contacts.length === 0) {\n console.error('No contacts found. Add contacts first: arbi contacts add <email>')\n process.exit(1)\n }\n type User = { external_id?: string; given_name?: string; family_name?: string }\n recipient = await promptSelect(\n 'Send to',\n contacts.map((c) => {\n const u = c.user as User | null\n const name = u ? [u.given_name, u.family_name].filter(Boolean).join(' ') : ''\n return {\n name: name ? `${name} (${c.email})` : (c.email as string),\n value: u?.external_id ?? (c.external_id as string),\n description: c.email as string,\n }\n })\n )\n }\n\n // Prompt for content if not given\n if (!content) {\n content = await promptInput('Message')\n }\n\n // If recipient looks like an email, resolve to ext_id via contacts\n let recipientExtId = recipient\n if (recipient.includes('@')) {\n const contacts = await contactOps.listContacts(arbi)\n type ContactUser = { external_id?: string }\n const match = contacts.find((c) => c.email === recipient)\n if (!match) {\n console.error(`No contact found with email: ${recipient}`)\n console.error('Add them first: arbi contacts add ' + recipient)\n process.exit(1)\n }\n recipientExtId = (match.user as ContactUser)?.external_id ?? (match.external_id as string)\n }\n\n const data = await dmOps.sendDM(arbi, [{ recipient_ext_id: recipientExtId, content }])\n for (const n of data) {\n console.log(`Sent: ${n.external_id} → ${n.recipient.email}`)\n }\n })()\n )\n\n dm.command('read [ids...]')\n .description('Mark messages as read (interactive picker if no IDs given)')\n .action((ids?: string[]) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n let msgIds = ids && ids.length > 0 ? ids : undefined\n if (!msgIds) {\n const data = await dmOps.listDMs(arbi)\n type Sender = { given_name?: string; family_name?: string; email?: string }\n const unread = data.filter((m) => !m.read)\n if (unread.length === 0) {\n console.log('No unread messages.')\n return\n }\n msgIds = await promptCheckbox(\n 'Select messages to mark as read',\n unread.map((m) => {\n const s = m.sender as Sender | null\n const from = s\n ? [s.given_name, s.family_name].filter(Boolean).join(' ') || s.email || ''\n : ''\n return {\n name: `${from}: ${((m.content as string) ?? '').slice(0, 50)}`,\n value: m.external_id as string,\n }\n })\n )\n if (msgIds.length === 0) return\n }\n const data = await dmOps.markRead(arbi, msgIds)\n console.log(`Marked ${data.length} message(s) as read.`)\n })()\n )\n\n dm.command('delete [ids...]')\n .description('Delete messages (interactive picker if no IDs given)')\n .action((ids?: string[]) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n let msgIds = ids && ids.length > 0 ? ids : undefined\n if (!msgIds) {\n const data = await dmOps.listDMs(arbi)\n if (data.length === 0) {\n console.log('No messages found.')\n return\n }\n type Sender = { given_name?: string; family_name?: string; email?: string }\n msgIds = await promptCheckbox(\n 'Select messages to delete',\n data.map((m) => {\n const s = m.sender as Sender | null\n const from = s\n ? [s.given_name, s.family_name].filter(Boolean).join(' ') || s.email || ''\n : ''\n return {\n name: `${from}: ${((m.content as string) ?? '').slice(0, 50)}`,\n value: m.external_id as string,\n }\n })\n )\n if (msgIds.length === 0) return\n }\n await dmOps.deleteDMs(arbi, msgIds)\n console.log(`Deleted ${msgIds.length} message(s).`)\n })()\n )\n\n // Default action: list\n dm.action(async () => {\n await dm.commands.find((c) => c.name() === 'list')!.parseAsync([], { from: 'user' })\n })\n}\n","/**\n * arbi tags — list tags in workspace\n * arbi tags create [name] — create a tag (form if no name)\n * arbi tags delete [id] — delete a tag (picker if no ID)\n * arbi tags update [id] [json] — update a tag (picker + form if no args)\n */\n\nimport { Command } from 'commander'\nimport { tags as tagOps } from '@arbidocs/core'\nimport { runAction, resolveWorkspace, printTable, parseJsonArg } from '../helpers.js'\nimport { promptSelect, promptInput, promptConfirm } from '../prompts.js'\n\n/** Fetch workspace tags and return as picker choices */\nasync function fetchTagChoices(\n arbi: Awaited<ReturnType<typeof resolveWorkspace>>['arbi'],\n workspaceId: string\n) {\n const data = await tagOps.listTags(arbi, workspaceId)\n if (data.length === 0) {\n console.log('No tags found.')\n process.exit(0)\n }\n return {\n data,\n choices: data.map((t) => ({\n name: `${t.name} (${(t.tag_type as { type?: string })?.type ?? 'unknown'}, ${t.doctag_count} docs)`,\n value: t.external_id as string,\n description: t.external_id as string,\n })),\n }\n}\n\nexport function registerTagsCommand(program: Command): void {\n const tags = program.command('tags').description('Manage tags')\n\n tags\n .command('list')\n .description('List tags in the active workspace')\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .action((opts: { workspace?: string }) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace(opts.workspace)\n const data = await tagOps.listTags(arbi, workspaceId)\n\n if (data.length === 0) {\n console.log('No tags found.')\n return\n }\n\n printTable(\n [\n { header: 'ID', width: 24, value: (r) => r.external_id as string },\n { header: 'NAME', width: 24, value: (r) => r.name as string },\n {\n header: 'TYPE',\n width: 12,\n value: (r) => (r.tag_type as { type?: string })?.type ?? '',\n },\n { header: 'DOCS', width: 6, value: (r) => String(r.doctag_count) },\n { header: 'SHARED', width: 8, value: (r) => (r.shared ? 'yes' : 'no') },\n ],\n data\n )\n })()\n )\n\n tags\n .command('create [name]')\n .description('Create a new tag (interactive form if no name given)')\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .option(\n '-t, --type <type>',\n 'Tag type (checkbox, text, number, select, folder, search, date, assistant)',\n 'checkbox'\n )\n .option('-i, --instruction <text>', 'Tag instruction')\n .option('--shared', 'Make tag shared', false)\n .action(\n (\n name: string | undefined,\n opts: { workspace?: string; type?: string; instruction?: string; shared?: boolean }\n ) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace(opts.workspace)\n\n // Interactive form if name not given\n const interactive = !name\n if (!name) {\n name = await promptInput('Tag name')\n }\n const tagType =\n opts.type ||\n (await promptSelect('Tag type', [\n { name: 'Checkbox', value: 'checkbox' },\n { name: 'Text', value: 'text' },\n { name: 'Number', value: 'number' },\n { name: 'Select', value: 'select' },\n { name: 'Date', value: 'date' },\n { name: 'Folder', value: 'folder' },\n { name: 'Search', value: 'search' },\n { name: 'Assistant', value: 'assistant' },\n ]))\n const instruction = interactive\n ? (opts.instruction ?? ((await promptInput('Instruction (optional)', false)) || null))\n : (opts.instruction ?? null)\n const shared = interactive\n ? opts.shared || (await promptConfirm('Shared?', false))\n : (opts.shared ?? false)\n\n const data = await tagOps.createTag(arbi, {\n name,\n workspaceId,\n tagType: { type: tagType, options: [] },\n instruction,\n shared,\n })\n console.log(`Created: ${data.name} (${data.external_id})`)\n })()\n )\n\n tags\n .command('delete [id]')\n .description('Delete a tag (interactive picker if no ID given)')\n .action((id?: string) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace()\n if (!id) {\n const { choices } = await fetchTagChoices(arbi, workspaceId)\n id = await promptSelect('Select tag to delete', choices)\n }\n const data = await tagOps.deleteTag(arbi, id)\n console.log(data?.detail ?? `Deleted tag ${id}`)\n })()\n )\n\n tags\n .command('update [id] [json]')\n .description('Update a tag (interactive picker + form if no args)')\n .action((id?: string, json?: string) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace()\n if (!id) {\n const { choices } = await fetchTagChoices(arbi, workspaceId)\n id = await promptSelect('Select tag to update', choices)\n }\n\n let body: Record<string, unknown>\n if (json) {\n body = parseJsonArg(json, 'arbi tags update tag-123 \\'{\"name\": \"New Name\"}\\'')\n } else {\n const field = await promptSelect('Field to update', [\n { name: 'Name', value: 'name' },\n { name: 'Instruction', value: 'instruction' },\n { name: 'Shared', value: 'shared' },\n ])\n if (field === 'shared') {\n body = { shared: await promptConfirm('Shared?') }\n } else {\n body = { [field]: await promptInput(field.charAt(0).toUpperCase() + field.slice(1)) }\n }\n }\n\n const data = await tagOps.updateTag(arbi, id, body)\n console.log(`Updated: ${data.name} (${data.external_id})`)\n })()\n )\n\n // Default action: list\n tags.action(async (_opts: Record<string, unknown>, cmd: Command) => {\n await cmd.commands.find((c) => c.name() === 'list')!.parseAsync([], { from: 'user' })\n })\n}\n","/**\n * arbi doctags create [tag-id] [doc-ids...] — assign tag to docs (pickers if no args)\n * arbi doctags delete [tag-id] [doc-ids...] — remove tag from docs (pickers if no args)\n * arbi doctags generate — AI-generate doctags (pickers if no flags)\n */\n\nimport { Command } from 'commander'\nimport { doctags as doctagOps, tags as tagOps, documents } from '@arbidocs/core'\nimport { runAction, resolveWorkspace } from '../helpers.js'\nimport { promptSelect, promptCheckbox } from '../prompts.js'\n\n/** Fetch tags as picker choices */\nasync function pickTag(\n arbi: Awaited<ReturnType<typeof resolveWorkspace>>['arbi'],\n workspaceId: string,\n message = 'Select tag'\n) {\n const data = await tagOps.listTags(arbi, workspaceId)\n if (data.length === 0) {\n console.log('No tags found.')\n process.exit(0)\n }\n return promptSelect(\n message,\n data.map((t) => ({\n name: `${t.name} (${(t.tag_type as { type?: string })?.type ?? ''})`,\n value: t.external_id as string,\n description: t.external_id as string,\n }))\n )\n}\n\n/** Fetch docs as checkbox choices */\nasync function pickDocs(\n arbi: Awaited<ReturnType<typeof resolveWorkspace>>['arbi'],\n workspaceId: string,\n message = 'Select documents'\n) {\n const data = await documents.listDocuments(arbi, workspaceId)\n if (data.length === 0) {\n console.log('No documents found.')\n process.exit(0)\n }\n return promptCheckbox(\n message,\n data.map((d) => ({\n name: `${d.file_name ?? 'Unnamed'} (${d.status})`,\n value: d.external_id as string,\n }))\n )\n}\n\nexport function registerDoctagsCommand(program: Command): void {\n const doctagsCmd = program.command('doctags').description('Manage document tags (doctags)')\n\n doctagsCmd\n .command('create [tag-id] [doc-ids...]')\n .description('Assign a tag to documents (interactive pickers if no args)')\n .option('-n, --note <text>', 'Note for the doctag')\n .action((tagId?: string, docIds?: string[], opts?: { note?: string }) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace()\n if (!tagId) tagId = await pickTag(arbi, workspaceId, 'Select tag to assign')\n if (!docIds || docIds.length === 0)\n docIds = await pickDocs(arbi, workspaceId, 'Select documents to tag')\n if (docIds.length === 0) return\n const data = await doctagOps.assignDocTags(arbi, tagId, docIds, opts?.note)\n console.log(`Created ${data.length} doctag(s) for tag ${tagId}.`)\n })()\n )\n\n doctagsCmd\n .command('delete [tag-id] [doc-ids...]')\n .description('Remove a tag from documents (interactive pickers if no args)')\n .action((tagId?: string, docIds?: string[]) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace()\n if (!tagId) tagId = await pickTag(arbi, workspaceId, 'Select tag to remove')\n if (!docIds || docIds.length === 0)\n docIds = await pickDocs(arbi, workspaceId, 'Select documents to untag')\n if (docIds.length === 0) return\n await doctagOps.removeDocTags(arbi, tagId, docIds)\n console.log(`Removed tag ${tagId} from ${docIds.length} document(s).`)\n })()\n )\n\n doctagsCmd\n .command('generate')\n .description('AI-generate doctags (interactive pickers if no flags)')\n .option('--tags <ids>', 'Comma-separated tag IDs')\n .option('--docs <ids>', 'Comma-separated document IDs')\n .action((opts: { tags?: string; docs?: string }) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace()\n\n let tagIds: string[]\n if (opts.tags) {\n tagIds = opts.tags.split(',').map((s) => s.trim())\n } else {\n const data = await tagOps.listTags(arbi, workspaceId)\n if (data.length === 0) {\n console.log('No tags found.')\n return\n }\n tagIds = await promptCheckbox(\n 'Select tags to generate',\n data.map((t) => ({\n name: `${t.name} (${(t.tag_type as { type?: string })?.type ?? ''})`,\n value: t.external_id as string,\n }))\n )\n if (tagIds.length === 0) return\n }\n\n let docIds: string[]\n if (opts.docs) {\n docIds = opts.docs.split(',').map((s) => s.trim())\n } else {\n docIds = await pickDocs(arbi, workspaceId, 'Select documents for AI tagging')\n if (docIds.length === 0) return\n }\n\n const data = await doctagOps.generateDocTags(arbi, tagIds, docIds)\n console.log(\n `Generating doctags for ${data.doc_ext_ids.length} doc(s) with ${data.tag_ext_ids.length} tag(s).`\n )\n })()\n )\n}\n","/**\n * arbi conversations list — list conversations\n * arbi conversations threads [id] — show threads (picker if no ID)\n * arbi conversations delete [id] — delete (picker if no ID)\n * arbi conversations share [id] — share (picker if no ID)\n * arbi conversations title [id] [title] — update title (picker + prompt)\n * arbi conversations add-user [id] [user-id] — add user (picker + prompt)\n * arbi conversations remove-user [id] [uid] — remove user (picker + prompt)\n * arbi conversations message <message-id> — get message details\n * arbi conversations delete-message <msg-id> — delete message\n */\n\nimport { Command } from 'commander'\nimport { conversations as convOps } from '@arbidocs/core'\nimport { runAction, resolveAuth, resolveWorkspace, printTable } from '../helpers.js'\nimport { promptSelect, promptInput } from '../prompts.js'\n\n/** Fetch workspace conversations and return as picker choices */\nasync function pickConversation(\n arbi: Awaited<ReturnType<typeof resolveWorkspace>>['arbi'],\n workspaceId: string,\n message = 'Select conversation'\n) {\n const data = await convOps.listConversations(arbi, workspaceId)\n if (data.length === 0) {\n console.log('No conversations found.')\n process.exit(0)\n }\n return promptSelect(\n message,\n data.map((c) => ({\n name: `${(c.title as string) ?? 'Untitled'} (${c.message_count} msgs)`,\n value: c.external_id as string,\n description: c.external_id as string,\n }))\n )\n}\n\nexport function registerConversationsCommand(program: Command): void {\n const conv = program.command('conversations').description('Manage conversations')\n\n conv\n .command('list')\n .description('List conversations in the active workspace')\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .action((opts: { workspace?: string }) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace(opts.workspace)\n const data = await convOps.listConversations(arbi, workspaceId)\n\n if (data.length === 0) {\n console.log('No conversations found.')\n return\n }\n\n printTable(\n [\n { header: 'ID', width: 24, value: (r) => r.external_id as string },\n { header: 'TITLE', width: 36, value: (r) => (r.title as string) ?? 'Untitled' },\n { header: 'MSGS', width: 6, value: (r) => String(r.message_count) },\n { header: 'SHARED', width: 8, value: (r) => (r.is_shared ? 'yes' : 'no') },\n ],\n data\n )\n })()\n )\n\n conv\n .command('threads [conversation-id]')\n .description('Show threads (interactive picker if no ID given)')\n .action((conversationId?: string) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace()\n if (!conversationId) conversationId = await pickConversation(arbi, workspaceId)\n const data = await convOps.getConversationThreads(arbi, conversationId)\n console.log(JSON.stringify(data, null, 2))\n })()\n )\n\n conv\n .command('delete [conversation-id]')\n .description('Delete a conversation (interactive picker if no ID given)')\n .action((conversationId?: string) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace()\n if (!conversationId)\n conversationId = await pickConversation(\n arbi,\n workspaceId,\n 'Select conversation to delete'\n )\n const data = await convOps.deleteConversation(arbi, conversationId)\n console.log(data?.detail ?? `Deleted conversation ${conversationId}`)\n })()\n )\n\n conv\n .command('share [conversation-id]')\n .description('Share a conversation (interactive picker if no ID given)')\n .action((conversationId?: string) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace()\n if (!conversationId)\n conversationId = await pickConversation(arbi, workspaceId, 'Select conversation to share')\n const data = await convOps.shareConversation(arbi, conversationId)\n console.log(data?.detail ?? `Shared conversation ${conversationId}`)\n })()\n )\n\n conv\n .command('title [conversation-id] [title]')\n .description('Update conversation title (interactive if no args)')\n .action((conversationId?: string, title?: string) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace()\n if (!conversationId) conversationId = await pickConversation(arbi, workspaceId)\n if (!title) title = await promptInput('New title')\n const data = await convOps.updateConversationTitle(arbi, conversationId, title)\n console.log(data?.detail ?? `Updated title to: ${title}`)\n })()\n )\n\n conv\n .command('add-user [conversation-id] [user-id]')\n .description('Add a user to a conversation (interactive if no args)')\n .action((conversationId?: string, userId?: string) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace()\n if (!conversationId) conversationId = await pickConversation(arbi, workspaceId)\n if (!userId) userId = await promptInput('User ext_id or email')\n const data = await convOps.addConversationUser(arbi, conversationId, userId)\n console.log(data?.detail ?? `Added user ${userId} to conversation`)\n })()\n )\n\n conv\n .command('remove-user [conversation-id] [user-id]')\n .description('Remove a user from a conversation (interactive if no args)')\n .action((conversationId?: string, userId?: string) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace()\n if (!conversationId) conversationId = await pickConversation(arbi, workspaceId)\n if (!userId) userId = await promptInput('User ext_id')\n const data = await convOps.removeConversationUser(arbi, conversationId, userId)\n console.log(data?.detail ?? `Removed user ${userId} from conversation`)\n })()\n )\n\n conv\n .command('message <message-id>')\n .description('Get message details')\n .action((messageId: string) =>\n runAction(async () => {\n const { arbi } = await resolveWorkspace()\n const data = await convOps.getMessage(arbi, messageId)\n console.log(JSON.stringify(data, null, 2))\n })()\n )\n\n conv\n .command('delete-message <message-id>')\n .description('Delete a message and its descendants')\n .action((messageId: string) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const data = await convOps.deleteMessage(arbi, messageId)\n console.log(data?.detail ?? `Deleted message ${messageId}`)\n })()\n )\n\n // Default action: list\n conv.action(async (_opts: Record<string, unknown>, cmd: Command) => {\n await cmd.commands.find((c) => c.name() === 'list')!.parseAsync([], { from: 'user' })\n })\n}\n","/**\n * arbi settings — show current user settings\n * arbi settings set — update a setting\n */\n\nimport { Command } from 'commander'\nimport { settings as settingsOps } from '@arbidocs/core'\nimport { runAction, resolveAuth, parseJsonArg } from '../helpers.js'\n\nexport function registerSettingsCommand(program: Command): void {\n const settings = program.command('settings').description('Manage user settings')\n\n settings\n .command('get')\n .description('Show current user settings')\n .action(\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const data = await settingsOps.getSettings(arbi)\n console.log(JSON.stringify(data, null, 2))\n })\n )\n\n settings\n .command('set <json>')\n .description('Update user settings (pass JSON object)')\n .action((json: string) =>\n runAction(async () => {\n const body = parseJsonArg(json, 'arbi settings set \\'{\"hide_online_status\": true}\\'')\n const { arbi } = await resolveAuth()\n await settingsOps.updateSettings(arbi, body)\n console.log('Settings updated.')\n })()\n )\n\n // Default action: get\n settings.action(async () => {\n await settings.commands.find((c) => c.name() === 'get')!.parseAsync([], { from: 'user' })\n })\n}\n","/**\n * arbi agentconfig list — list saved config versions\n * arbi agentconfig get [id] — show config (picker if no ID, 'default' for system)\n * arbi agentconfig save [json] — save new config (interactive if no JSON)\n * arbi agentconfig delete [id] — delete config (picker if no ID)\n * arbi agentconfig schema — dump JSON schema for all config models\n */\n\nimport { Command } from 'commander'\nimport { agentconfig as acOps } from '@arbidocs/core'\nimport { runAction, resolveAuth, printTable, parseJsonArg } from '../helpers.js'\nimport { promptSelect, promptInput, promptConfirm } from '../prompts.js'\n\n/** Config sections that have a MODEL_NAME field — the most common thing to change */\nconst MODEL_SECTIONS = [\n 'Agents',\n 'QueryLLM',\n 'EvaluatorLLM',\n 'TitleLLM',\n 'SummariseLLM',\n 'DoctagLLM',\n 'ArtifactLLM',\n] as const\n\n/** Pick a config version from saved versions */\nasync function pickConfig(\n arbi: Awaited<ReturnType<typeof resolveAuth>>['arbi'],\n message = 'Select configuration'\n) {\n const data = await acOps.listConfigs(arbi)\n if (data.versions.length === 0) {\n console.log('No saved configurations found.')\n process.exit(0)\n }\n return promptSelect(\n message,\n data.versions.map((v) => ({\n name: `${v.title || '(untitled)'} — ${new Date(v.created_at).toLocaleString()}`,\n value: v.external_id,\n description: v.external_id,\n }))\n )\n}\n\n/** Fetch available models for interactive picker */\nasync function fetchModels(arbi: Awaited<ReturnType<typeof resolveAuth>>['arbi']) {\n const data = await acOps.getModels(arbi)\n return data.models.map((m) => ({\n name: `${m.model_name} (${m.provider ?? m.api_type})`,\n value: m.model_name,\n description: m.api_type,\n }))\n}\n\n/** Interactive config builder — walks through most common settings */\nasync function buildConfigInteractively(\n arbi: Awaited<ReturnType<typeof resolveAuth>>['arbi']\n): Promise<Record<string, unknown>> {\n const body: Record<string, unknown> = {}\n\n // Title\n const title = await promptInput('Config title (optional)', false)\n if (title) body.title = title\n\n // Pick section to configure\n const section = await promptSelect('Section to configure', [\n { name: 'Agents — main agent model, persona, tools', value: 'Agents' },\n { name: 'QueryLLM — answer review model', value: 'QueryLLM' },\n { name: 'EvaluatorLLM — chunk evaluation', value: 'EvaluatorLLM' },\n { name: 'TitleLLM — title generation', value: 'TitleLLM' },\n { name: 'SummariseLLM — conversation summariser', value: 'SummariseLLM' },\n { name: 'DoctagLLM — AI document tagging', value: 'DoctagLLM' },\n { name: 'ArtifactLLM — skill/memory synthesis', value: 'ArtifactLLM' },\n { name: 'Retriever — search parameters', value: 'Retriever' },\n { name: 'Reranker — reranking model', value: 'Reranker' },\n { name: 'ModelCitation — citation thresholds', value: 'ModelCitation' },\n { name: 'Chunker — chunk size', value: 'Chunker' },\n { name: 'Embedder — embedding model', value: 'Embedder' },\n { name: 'KeywordEmbedder — BM25 parameters', value: 'KeywordEmbedder' },\n ])\n\n const sectionConfig: Record<string, unknown> = {}\n\n // Sections with MODEL_NAME get a model picker\n if ((MODEL_SECTIONS as readonly string[]).includes(section)) {\n const models = await fetchModels(arbi)\n if (models.length > 0) {\n const changeModel = await promptConfirm('Change model?', true)\n if (changeModel) {\n const modelKey = section === 'Agents' ? 'AGENT_MODEL_NAME' : 'MODEL_NAME'\n sectionConfig[modelKey] = await promptSelect('Model', models)\n\n if (section === 'Agents') {\n sectionConfig.AGENT_API_TYPE = 'remote'\n } else {\n sectionConfig.API_TYPE = 'remote'\n }\n }\n }\n }\n\n // Section-specific fields\n if (section === 'Agents') {\n const field = await promptSelect('What else to change?', [\n { name: 'Nothing else', value: 'done' },\n { name: 'Temperature', value: 'LLM_AGENT_TEMPERATURE' },\n { name: 'Max tokens', value: 'AGENT_MAX_TOKENS' },\n { name: 'Max iterations', value: 'AGENT_MAX_ITERATIONS' },\n { name: 'Persona', value: 'PERSONA' },\n { name: 'Web search enabled', value: 'WEB_SEARCH' },\n { name: 'Human in the loop', value: 'HUMAN_IN_THE_LOOP' },\n ])\n if (field !== 'done') {\n if (field === 'WEB_SEARCH' || field === 'HUMAN_IN_THE_LOOP') {\n sectionConfig[field] = await promptConfirm(field + '?')\n } else if (field === 'LLM_AGENT_TEMPERATURE') {\n sectionConfig[field] = parseFloat(await promptInput('Temperature (0.0 - 2.0)'))\n } else if (field === 'AGENT_MAX_TOKENS' || field === 'AGENT_MAX_ITERATIONS') {\n sectionConfig[field] = parseInt(await promptInput(field), 10)\n } else {\n sectionConfig[field] = await promptInput(field)\n }\n }\n } else if (section === 'Retriever') {\n const field = await promptSelect('Field to change', [\n { name: 'Search mode', value: 'SEARCH_MODE' },\n { name: 'Min similarity score', value: 'MIN_RETRIEVAL_SIM_SCORE' },\n { name: 'Max chunks to retrieve', value: 'MAX_TOTAL_CHUNKS_TO_RETRIEVE' },\n { name: 'Max distinct documents', value: 'MAX_DISTINCT_DOCUMENTS' },\n { name: 'Hybrid dense weight', value: 'HYBRID_DENSE_WEIGHT' },\n { name: 'Hybrid sparse weight', value: 'HYBRID_SPARSE_WEIGHT' },\n ])\n if (field === 'SEARCH_MODE') {\n sectionConfig[field] = await promptSelect('Search mode', [\n { name: 'Semantic (dense)', value: 'semantic' },\n { name: 'Keyword (sparse/BM25)', value: 'keyword' },\n { name: 'Hybrid (dense + sparse)', value: 'hybrid' },\n ])\n } else {\n sectionConfig[field] = parseFloat(await promptInput(field))\n }\n } else if (section === 'ModelCitation') {\n const field = await promptSelect('Field to change', [\n { name: 'Similarity threshold', value: 'SIM_THREASHOLD' },\n { name: 'Min char size', value: 'MIN_CHAR_SIZE_TO_ANSWER' },\n { name: 'Max citations', value: 'MAX_NUMB_CITATIONS' },\n ])\n sectionConfig[field] = parseFloat(await promptInput(field))\n } else if (section === 'Chunker') {\n sectionConfig.MAX_CHUNK_TOKENS = parseInt(await promptInput('Max chunk tokens'), 10)\n } else if (section === 'Reranker') {\n const field = await promptSelect('Field to change', [\n { name: 'Max chunks after rerank', value: 'MAX_NUMB_OF_CHUNKS' },\n { name: 'Model', value: 'MODEL_NAME' },\n ])\n if (field === 'MODEL_NAME') {\n const models = await fetchModels(arbi)\n sectionConfig.MODEL_NAME = await promptSelect('Model', models)\n sectionConfig.API_TYPE = 'remote'\n } else {\n sectionConfig[field] = parseInt(await promptInput(field), 10)\n }\n } else if (\n section === 'QueryLLM' ||\n section === 'EvaluatorLLM' ||\n section === 'TitleLLM' ||\n section === 'SummariseLLM' ||\n section === 'DoctagLLM' ||\n section === 'ArtifactLLM'\n ) {\n // LLM sections share temperature/max_tokens\n const field = await promptSelect('What else to change?', [\n { name: 'Nothing else', value: 'done' },\n { name: 'Temperature', value: 'TEMPERATURE' },\n { name: 'Max tokens', value: 'MAX_TOKENS' },\n ])\n if (field !== 'done') {\n sectionConfig[field] =\n field === 'TEMPERATURE'\n ? parseFloat(await promptInput('Temperature (0.0 - 2.0)'))\n : parseInt(await promptInput('Max tokens'), 10)\n }\n }\n\n if (Object.keys(sectionConfig).length > 0) {\n body[section] = sectionConfig\n }\n\n return body\n}\n\nexport function registerAgentconfigCommand(program: Command): void {\n const ac = program.command('agentconfig').description('Manage agent configurations')\n\n ac.command('list')\n .description('List saved configuration versions')\n .action(\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const data = await acOps.listConfigs(arbi)\n\n if (data.versions.length === 0) {\n console.log('No saved configurations.')\n return\n }\n\n printTable(\n [\n { header: 'ID', width: 24, value: (r) => r.external_id as string },\n { header: 'TITLE', width: 30, value: (r) => (r.title as string) ?? '(untitled)' },\n {\n header: 'CREATED',\n width: 22,\n value: (r) => new Date(r.created_at as string).toLocaleString(),\n },\n ],\n data.versions\n )\n })\n )\n\n ac.command('get [config-id]')\n .description('Show configuration details (picker if no ID; use \"default\" for system defaults)')\n .action((configId?: string) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n if (!configId) {\n configId = await promptSelect('Which configuration?', [\n { name: 'System defaults', value: 'default', description: 'Built-in defaults' },\n { name: 'Pick from saved versions...', value: '__pick__' },\n ])\n if (configId === '__pick__') {\n configId = await pickConfig(arbi)\n }\n }\n const data = await acOps.getConfig(arbi, configId)\n console.log(JSON.stringify(data, null, 2))\n })()\n )\n\n ac.command('save [json]')\n .description('Save a new configuration (interactive if no JSON given)')\n .option('-t, --title <title>', 'Config title')\n .option('--tag <tag-ext-id>', 'Associate with an assistant tag')\n .option('--message <msg-ext-id>', 'Associate with a parent message')\n .action((json?: string, opts?: { title?: string; tag?: string; message?: string }) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n\n let body: Record<string, unknown>\n if (json) {\n body = parseJsonArg(\n json,\n 'arbi agentconfig save \\'{\"Agents\": {\"AGENT_MODEL_NAME\": \"GPT4o@OpenAI\"}, \"title\": \"GPT-4o config\"}\\''\n )\n if (opts?.title) body.title = opts.title\n } else {\n body = await buildConfigInteractively(arbi)\n }\n\n if (opts?.tag) body.tag_ext_id = opts.tag\n if (opts?.message) body.parent_message_ext_id = opts.message\n\n const data = await acOps.saveConfig(arbi, body)\n console.log(`Saved: ${data.title || '(untitled)'} (${data.external_id})`)\n })()\n )\n\n ac.command('delete [config-id]')\n .description('Delete a configuration (picker if no ID)')\n .action((configId?: string) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n if (!configId) configId = await pickConfig(arbi, 'Select configuration to delete')\n const data = await acOps.deleteConfig(arbi, configId)\n console.log(data.detail)\n })()\n )\n\n ac.command('schema')\n .description('Show JSON schema for all configuration models')\n .action(\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const data = await acOps.getSchema(arbi)\n console.log(JSON.stringify(data, null, 2))\n })\n )\n\n // Default action: list\n ac.action(async () => {\n await ac.commands.find((c) => c.name() === 'list')!.parseAsync([], { from: 'user' })\n })\n}\n","/**\n * arbi health — show server health\n * arbi models — list available models\n */\n\nimport { Command } from 'commander'\nimport { health as healthOps } from '@arbidocs/core'\nimport { runAction, resolveAuth, printTable } from '../helpers.js'\n\nexport function registerHealthCommand(program: Command): void {\n program\n .command('health')\n .description('Show server health status')\n .action(\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const data = await healthOps.getHealth(arbi)\n\n console.log(`Status: ${data.status}`)\n if (data.backend_git_hash) console.log(`Backend: ${data.backend_git_hash}`)\n if (data.frontend_docker_version) console.log(`Frontend: ${data.frontend_docker_version}`)\n\n if (data.services.length > 0) {\n console.log('\\nServices:')\n for (const s of data.services) {\n console.log(` ${s.name}: ${s.status}${s.detail ? ` — ${s.detail}` : ''}`)\n }\n }\n\n if (data.models_health) {\n console.log(`\\nModels (${data.models_health.application}):`)\n for (const m of data.models_health.models) {\n console.log(` ${m.model}: ${m.status}${m.detail ? ` — ${m.detail}` : ''}`)\n }\n }\n })\n )\n\n program\n .command('models')\n .description('List available AI models')\n .action(\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const data = await healthOps.getHealthModels(arbi)\n\n if (data.models.length === 0) {\n console.log('No models available.')\n return\n }\n\n printTable(\n [\n { header: 'NAME', width: 30, value: (r) => r.model_name as string },\n { header: 'PROVIDER', width: 20, value: (r) => (r.provider as string) ?? '' },\n { header: 'API_TYPE', width: 16, value: (r) => r.api_type as string },\n ],\n data.models\n )\n })\n )\n}\n","/**\n * arbi tui [--workspace <id>]\n *\n * Launches the interactive terminal UI (@arbidocs/tui).\n * The TUI package is a direct dependency, so it's always available.\n */\n\nimport { Command } from 'commander'\nimport { spawn } from 'node:child_process'\nimport { createRequire } from 'node:module'\n\nexport function registerTuiCommand(program: Command): void {\n program\n .command('tui')\n .description('Launch interactive terminal UI')\n .option('-w, --workspace <id>', 'Workspace ID to use')\n .allowUnknownOption(true)\n .action((opts: { workspace?: string }, cmd: Command) => {\n const require = createRequire(import.meta.url)\n const entryPoint = require.resolve('@arbidocs/tui')\n\n const args: string[] = []\n if (opts.workspace) {\n args.push('-w', opts.workspace)\n }\n args.push(...cmd.args)\n\n const child = spawn(process.execPath, [entryPoint, ...args], {\n stdio: 'inherit',\n env: process.env,\n })\n\n child.on('exit', (code) => process.exit(code ?? 0))\n })\n}\n","/**\n * ARBI CLI — entry point\n *\n * Wires all commands into commander and runs.\n */\n\n// Suppress SDK middleware logging (console.debug/info go to stdout in Node.js, polluting piped output)\nconsole.debug = () => {}\nconst _origInfo = console.info\nconsole.info = (...args: unknown[]) => {\n if (typeof args[0] === 'string' && args[0].startsWith('[API]')) return\n _origInfo(...args)\n}\n\nimport { Command } from 'commander'\nimport { registerConfigCommand } from './commands/config-cmd.js'\nimport { registerLoginCommand } from './commands/login.js'\nimport { registerRegisterCommand } from './commands/register.js'\nimport { registerLogoutCommand } from './commands/logout.js'\nimport { registerStatusCommand } from './commands/status.js'\nimport { registerWorkspacesCommand } from './commands/workspaces.js'\nimport { registerDocsCommand } from './commands/docs.js'\nimport { registerUploadCommand } from './commands/upload.js'\nimport { registerDownloadCommand } from './commands/download.js'\nimport { registerAskCommand } from './commands/ask.js'\nimport { registerWatchCommand } from './commands/watch.js'\nimport { registerContactsCommand } from './commands/contacts.js'\nimport { registerDmCommand } from './commands/dm.js'\nimport { registerTagsCommand } from './commands/tags.js'\nimport { registerDoctagsCommand } from './commands/doctags.js'\nimport { registerConversationsCommand } from './commands/conversations.js'\nimport { registerSettingsCommand } from './commands/settings.js'\nimport { registerAgentconfigCommand } from './commands/agentconfig.js'\nimport { registerHealthCommand } from './commands/health.js'\nimport { registerTuiCommand } from './commands/tui.js'\n\nconst program = new Command()\n\nprogram.name('arbi').description('ARBI CLI — interact with ARBI from the terminal').version('0.1.0')\n\nregisterConfigCommand(program)\nregisterLoginCommand(program)\nregisterRegisterCommand(program)\nregisterLogoutCommand(program)\nregisterStatusCommand(program)\nregisterWorkspacesCommand(program)\nregisterDocsCommand(program)\nregisterUploadCommand(program)\nregisterDownloadCommand(program)\nregisterAskCommand(program)\nregisterWatchCommand(program)\nregisterContactsCommand(program)\nregisterDmCommand(program)\nregisterTagsCommand(program)\nregisterDoctagsCommand(program)\nregisterConversationsCommand(program)\nregisterSettingsCommand(program)\nregisterAgentconfigCommand(program)\nregisterHealthCommand(program)\nregisterTuiCommand(program)\n\nprogram.parse()\n"]}
|