ghc-proxy 0.3.1 → 0.3.2
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/README.md +8 -8
- package/dist/GptEncoding-DuDWxow_.mjs +1134 -0
- package/dist/GptEncoding-DuDWxow_.mjs.map +1 -0
- package/dist/cl100k_base-YsziDpoU.mjs +101373 -0
- package/dist/cl100k_base-YsziDpoU.mjs.map +1 -0
- package/dist/file-type-BNd4XJK1.mjs +4527 -0
- package/dist/file-type-BNd4XJK1.mjs.map +1 -0
- package/dist/main.mjs +46890 -1323
- package/dist/main.mjs.map +1 -1
- package/dist/o200k_base-C_Bgi80R.mjs +204724 -0
- package/dist/o200k_base-C_Bgi80R.mjs.map +1 -0
- package/dist/p50k_base-DRo0AxsG.mjs +50482 -0
- package/dist/p50k_base-DRo0AxsG.mjs.map +1 -0
- package/dist/p50k_base-teVr-d1Y.mjs +10 -0
- package/dist/p50k_base-teVr-d1Y.mjs.map +1 -0
- package/dist/p50k_edit-nucqZWIv.mjs +10 -0
- package/dist/p50k_edit-nucqZWIv.mjs.map +1 -0
- package/dist/prompt-mE5xxWUf.mjs +848 -0
- package/dist/prompt-mE5xxWUf.mjs.map +1 -0
- package/dist/r50k_base-B2MFjxES.mjs +50464 -0
- package/dist/r50k_base-B2MFjxES.mjs.map +1 -0
- package/package.json +6 -7
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-type-BNd4XJK1.mjs","names":["fsOpen","strtok3.EndOfStreamError","strtok3.fromBuffer","strtok3.fromBlob","strtok3.fromWebStream","Token.UINT8","Token.StringType","Token.INT32_BE","Token.UINT64_LE","Token.UINT16_BE","Token.UINT16_LE","Token.UINT32_BE","Token.UINT32_LE"],"sources":["../node_modules/strtok3/lib/stream/Errors.js","../node_modules/strtok3/lib/stream/AbstractStreamReader.js","../node_modules/strtok3/lib/stream/WebStreamReader.js","../node_modules/strtok3/lib/stream/WebStreamByobReader.js","../node_modules/strtok3/lib/stream/WebStreamDefaultReader.js","../node_modules/strtok3/lib/stream/WebStreamReaderFactory.js","../node_modules/strtok3/lib/AbstractTokenizer.js","../node_modules/strtok3/lib/ReadStreamTokenizer.js","../node_modules/strtok3/lib/BufferTokenizer.js","../node_modules/strtok3/lib/BlobTokenizer.js","../node_modules/strtok3/lib/core.js","../node_modules/strtok3/lib/FileTokenizer.js","../node_modules/strtok3/lib/index.js","../node_modules/@borewit/text-codec/lib/index.js","../node_modules/token-types/lib/index.js","../node_modules/ms/index.js","../node_modules/debug/src/common.js","../node_modules/debug/src/browser.js","../node_modules/debug/src/node.js","../node_modules/debug/src/index.js","../node_modules/@tokenizer/inflate/lib/ZipToken.js","../node_modules/@tokenizer/inflate/lib/ZipHandler.js","../node_modules/@tokenizer/inflate/lib/GzipHandler.js","../node_modules/uint8array-extras/index.js","../node_modules/file-type/util.js","../node_modules/file-type/supported.js","../node_modules/file-type/core.js"],"sourcesContent":["export const defaultMessages = 'End-Of-Stream';\n/**\n * Thrown on read operation of the end of file or stream has been reached\n */\nexport class EndOfStreamError extends Error {\n constructor() {\n super(defaultMessages);\n this.name = \"EndOfStreamError\";\n }\n}\nexport class AbortError extends Error {\n constructor(message = \"The operation was aborted\") {\n super(message);\n this.name = \"AbortError\";\n }\n}\n","import { EndOfStreamError, AbortError } from \"./Errors.js\";\nexport class AbstractStreamReader {\n constructor() {\n this.endOfStream = false;\n this.interrupted = false;\n /**\n * Store peeked data\n * @type {Array}\n */\n this.peekQueue = [];\n }\n async peek(uint8Array, mayBeLess = false) {\n const bytesRead = await this.read(uint8Array, mayBeLess);\n this.peekQueue.push(uint8Array.subarray(0, bytesRead)); // Put read data back to peek buffer\n return bytesRead;\n }\n async read(buffer, mayBeLess = false) {\n if (buffer.length === 0) {\n return 0;\n }\n let bytesRead = this.readFromPeekBuffer(buffer);\n if (!this.endOfStream) {\n bytesRead += await this.readRemainderFromStream(buffer.subarray(bytesRead), mayBeLess);\n }\n if (bytesRead === 0 && !mayBeLess) {\n throw new EndOfStreamError();\n }\n return bytesRead;\n }\n /**\n * Read chunk from stream\n * @param buffer - Target Uint8Array (or Buffer) to store data read from stream in\n * @returns Number of bytes read\n */\n readFromPeekBuffer(buffer) {\n let remaining = buffer.length;\n let bytesRead = 0;\n // consume peeked data first\n while (this.peekQueue.length > 0 && remaining > 0) {\n const peekData = this.peekQueue.pop(); // Front of queue\n if (!peekData)\n throw new Error('peekData should be defined');\n const lenCopy = Math.min(peekData.length, remaining);\n buffer.set(peekData.subarray(0, lenCopy), bytesRead);\n bytesRead += lenCopy;\n remaining -= lenCopy;\n if (lenCopy < peekData.length) {\n // remainder back to queue\n this.peekQueue.push(peekData.subarray(lenCopy));\n }\n }\n return bytesRead;\n }\n async readRemainderFromStream(buffer, mayBeLess) {\n let bytesRead = 0;\n // Continue reading from stream if required\n while (bytesRead < buffer.length && !this.endOfStream) {\n if (this.interrupted) {\n throw new AbortError();\n }\n const chunkLen = await this.readFromStream(buffer.subarray(bytesRead), mayBeLess);\n if (chunkLen === 0)\n break;\n bytesRead += chunkLen;\n }\n if (!mayBeLess && bytesRead < buffer.length) {\n throw new EndOfStreamError();\n }\n return bytesRead;\n }\n}\n","import { AbstractStreamReader } from \"./AbstractStreamReader.js\";\nexport class WebStreamReader extends AbstractStreamReader {\n constructor(reader) {\n super();\n this.reader = reader;\n }\n async abort() {\n return this.close();\n }\n async close() {\n this.reader.releaseLock();\n }\n}\n","import { WebStreamReader } from './WebStreamReader.js';\n/**\n * Read from a WebStream using a BYOB reader\n * Reference: https://nodejs.org/api/webstreams.html#class-readablestreambyobreader\n */\nexport class WebStreamByobReader extends WebStreamReader {\n /**\n * Read from stream\n * @param buffer - Target Uint8Array (or Buffer) to store data read from stream in\n * @param mayBeLess - If true, may fill the buffer partially\n * @protected Bytes read\n */\n async readFromStream(buffer, mayBeLess) {\n if (buffer.length === 0)\n return 0;\n // @ts-ignore\n const result = await this.reader.read(new Uint8Array(buffer.length), { min: mayBeLess ? undefined : buffer.length });\n if (result.done) {\n this.endOfStream = result.done;\n }\n if (result.value) {\n buffer.set(result.value);\n return result.value.length;\n }\n return 0;\n }\n}\n","import { EndOfStreamError } from './Errors.js';\nimport { AbstractStreamReader } from \"./AbstractStreamReader.js\";\nexport class WebStreamDefaultReader extends AbstractStreamReader {\n constructor(reader) {\n super();\n this.reader = reader;\n this.buffer = null; // Internal buffer to store excess data\n }\n /**\n * Copy chunk to target, and store the remainder in this.buffer\n */\n writeChunk(target, chunk) {\n const written = Math.min(chunk.length, target.length);\n target.set(chunk.subarray(0, written));\n // Adjust the remainder of the buffer\n if (written < chunk.length) {\n this.buffer = chunk.subarray(written);\n }\n else {\n this.buffer = null;\n }\n return written;\n }\n /**\n * Read from stream\n * @param buffer - Target Uint8Array (or Buffer) to store data read from stream in\n * @param mayBeLess - If true, may fill the buffer partially\n * @protected Bytes read\n */\n async readFromStream(buffer, mayBeLess) {\n if (buffer.length === 0)\n return 0;\n let totalBytesRead = 0;\n // Serve from the internal buffer first\n if (this.buffer) {\n totalBytesRead += this.writeChunk(buffer, this.buffer);\n }\n // Continue reading from the stream if more data is needed\n while (totalBytesRead < buffer.length && !this.endOfStream) {\n const result = await this.reader.read();\n if (result.done) {\n this.endOfStream = true;\n break;\n }\n if (result.value) {\n totalBytesRead += this.writeChunk(buffer.subarray(totalBytesRead), result.value);\n }\n }\n if (!mayBeLess && totalBytesRead === 0 && this.endOfStream) {\n throw new EndOfStreamError();\n }\n return totalBytesRead;\n }\n abort() {\n this.interrupted = true;\n return this.reader.cancel();\n }\n async close() {\n await this.abort();\n this.reader.releaseLock();\n }\n}\n","import { WebStreamByobReader } from './WebStreamByobReader.js';\nimport { WebStreamDefaultReader } from './WebStreamDefaultReader.js';\nexport function makeWebStreamReader(stream) {\n try {\n const reader = stream.getReader({ mode: \"byob\" });\n if (reader instanceof ReadableStreamDefaultReader) {\n // Fallback to default reader in case `mode: byob` is ignored\n return new WebStreamDefaultReader(reader);\n }\n return new WebStreamByobReader(reader);\n }\n catch (error) {\n if (error instanceof TypeError) {\n // Fallback to default reader in case `mode: byob` rejected by a `TypeError`\n return new WebStreamDefaultReader(stream.getReader());\n }\n throw error;\n }\n}\n","import { EndOfStreamError } from './stream/index.js';\n/**\n * Core tokenizer\n */\nexport class AbstractTokenizer {\n /**\n * Constructor\n * @param options Tokenizer options\n * @protected\n */\n constructor(options) {\n this.numBuffer = new Uint8Array(8);\n /**\n * Tokenizer-stream position\n */\n this.position = 0;\n this.onClose = options?.onClose;\n if (options?.abortSignal) {\n options.abortSignal.addEventListener('abort', () => {\n this.abort();\n });\n }\n }\n /**\n * Read a token from the tokenizer-stream\n * @param token - The token to read\n * @param position - If provided, the desired position in the tokenizer-stream\n * @returns Promise with token data\n */\n async readToken(token, position = this.position) {\n const uint8Array = new Uint8Array(token.len);\n const len = await this.readBuffer(uint8Array, { position });\n if (len < token.len)\n throw new EndOfStreamError();\n return token.get(uint8Array, 0);\n }\n /**\n * Peek a token from the tokenizer-stream.\n * @param token - Token to peek from the tokenizer-stream.\n * @param position - Offset where to begin reading within the file. If position is null, data will be read from the current file position.\n * @returns Promise with token data\n */\n async peekToken(token, position = this.position) {\n const uint8Array = new Uint8Array(token.len);\n const len = await this.peekBuffer(uint8Array, { position });\n if (len < token.len)\n throw new EndOfStreamError();\n return token.get(uint8Array, 0);\n }\n /**\n * Read a numeric token from the stream\n * @param token - Numeric token\n * @returns Promise with number\n */\n async readNumber(token) {\n const len = await this.readBuffer(this.numBuffer, { length: token.len });\n if (len < token.len)\n throw new EndOfStreamError();\n return token.get(this.numBuffer, 0);\n }\n /**\n * Read a numeric token from the stream\n * @param token - Numeric token\n * @returns Promise with number\n */\n async peekNumber(token) {\n const len = await this.peekBuffer(this.numBuffer, { length: token.len });\n if (len < token.len)\n throw new EndOfStreamError();\n return token.get(this.numBuffer, 0);\n }\n /**\n * Ignore number of bytes, advances the pointer in under tokenizer-stream.\n * @param length - Number of bytes to ignore\n * @return resolves the number of bytes ignored, equals length if this available, otherwise the number of bytes available\n */\n async ignore(length) {\n if (this.fileInfo.size !== undefined) {\n const bytesLeft = this.fileInfo.size - this.position;\n if (length > bytesLeft) {\n this.position += bytesLeft;\n return bytesLeft;\n }\n }\n this.position += length;\n return length;\n }\n async close() {\n await this.abort();\n await this.onClose?.();\n }\n normalizeOptions(uint8Array, options) {\n if (!this.supportsRandomAccess() && options && options.position !== undefined && options.position < this.position) {\n throw new Error('`options.position` must be equal or greater than `tokenizer.position`');\n }\n return {\n ...{\n mayBeLess: false,\n offset: 0,\n length: uint8Array.length,\n position: this.position\n }, ...options\n };\n }\n abort() {\n return Promise.resolve(); // Ignore abort signal\n }\n}\n","import { AbstractTokenizer } from './AbstractTokenizer.js';\nimport { EndOfStreamError } from './stream/index.js';\nconst maxBufferSize = 256000;\nexport class ReadStreamTokenizer extends AbstractTokenizer {\n /**\n * Constructor\n * @param streamReader stream-reader to read from\n * @param options Tokenizer options\n */\n constructor(streamReader, options) {\n super(options);\n this.streamReader = streamReader;\n this.fileInfo = options?.fileInfo ?? {};\n }\n /**\n * Read buffer from tokenizer\n * @param uint8Array - Target Uint8Array to fill with data read from the tokenizer-stream\n * @param options - Read behaviour options\n * @returns Promise with number of bytes read\n */\n async readBuffer(uint8Array, options) {\n const normOptions = this.normalizeOptions(uint8Array, options);\n const skipBytes = normOptions.position - this.position;\n if (skipBytes > 0) {\n await this.ignore(skipBytes);\n return this.readBuffer(uint8Array, options);\n }\n if (skipBytes < 0) {\n throw new Error('`options.position` must be equal or greater than `tokenizer.position`');\n }\n if (normOptions.length === 0) {\n return 0;\n }\n const bytesRead = await this.streamReader.read(uint8Array.subarray(0, normOptions.length), normOptions.mayBeLess);\n this.position += bytesRead;\n if ((!options || !options.mayBeLess) && bytesRead < normOptions.length) {\n throw new EndOfStreamError();\n }\n return bytesRead;\n }\n /**\n * Peek (read ahead) buffer from tokenizer\n * @param uint8Array - Uint8Array (or Buffer) to write data to\n * @param options - Read behaviour options\n * @returns Promise with number of bytes peeked\n */\n async peekBuffer(uint8Array, options) {\n const normOptions = this.normalizeOptions(uint8Array, options);\n let bytesRead = 0;\n if (normOptions.position) {\n const skipBytes = normOptions.position - this.position;\n if (skipBytes > 0) {\n const skipBuffer = new Uint8Array(normOptions.length + skipBytes);\n bytesRead = await this.peekBuffer(skipBuffer, { mayBeLess: normOptions.mayBeLess });\n uint8Array.set(skipBuffer.subarray(skipBytes));\n return bytesRead - skipBytes;\n }\n if (skipBytes < 0) {\n throw new Error('Cannot peek from a negative offset in a stream');\n }\n }\n if (normOptions.length > 0) {\n try {\n bytesRead = await this.streamReader.peek(uint8Array.subarray(0, normOptions.length), normOptions.mayBeLess);\n }\n catch (err) {\n if (options?.mayBeLess && err instanceof EndOfStreamError) {\n return 0;\n }\n throw err;\n }\n if ((!normOptions.mayBeLess) && bytesRead < normOptions.length) {\n throw new EndOfStreamError();\n }\n }\n return bytesRead;\n }\n async ignore(length) {\n // debug(`ignore ${this.position}...${this.position + length - 1}`);\n const bufSize = Math.min(maxBufferSize, length);\n const buf = new Uint8Array(bufSize);\n let totBytesRead = 0;\n while (totBytesRead < length) {\n const remaining = length - totBytesRead;\n const bytesRead = await this.readBuffer(buf, { length: Math.min(bufSize, remaining) });\n if (bytesRead < 0) {\n return bytesRead;\n }\n totBytesRead += bytesRead;\n }\n return totBytesRead;\n }\n abort() {\n return this.streamReader.abort();\n }\n async close() {\n return this.streamReader.close();\n }\n supportsRandomAccess() {\n return false;\n }\n}\n","import { EndOfStreamError } from './stream/index.js';\nimport { AbstractTokenizer } from './AbstractTokenizer.js';\nexport class BufferTokenizer extends AbstractTokenizer {\n /**\n * Construct BufferTokenizer\n * @param uint8Array - Uint8Array to tokenize\n * @param options Tokenizer options\n */\n constructor(uint8Array, options) {\n super(options);\n this.uint8Array = uint8Array;\n this.fileInfo = { ...options?.fileInfo ?? {}, ...{ size: uint8Array.length } };\n }\n /**\n * Read buffer from tokenizer\n * @param uint8Array - Uint8Array to tokenize\n * @param options - Read behaviour options\n * @returns {Promise<number>}\n */\n async readBuffer(uint8Array, options) {\n if (options?.position) {\n this.position = options.position;\n }\n const bytesRead = await this.peekBuffer(uint8Array, options);\n this.position += bytesRead;\n return bytesRead;\n }\n /**\n * Peek (read ahead) buffer from tokenizer\n * @param uint8Array\n * @param options - Read behaviour options\n * @returns {Promise<number>}\n */\n async peekBuffer(uint8Array, options) {\n const normOptions = this.normalizeOptions(uint8Array, options);\n const bytes2read = Math.min(this.uint8Array.length - normOptions.position, normOptions.length);\n if ((!normOptions.mayBeLess) && bytes2read < normOptions.length) {\n throw new EndOfStreamError();\n }\n uint8Array.set(this.uint8Array.subarray(normOptions.position, normOptions.position + bytes2read));\n return bytes2read;\n }\n close() {\n return super.close();\n }\n supportsRandomAccess() {\n return true;\n }\n setPosition(position) {\n this.position = position;\n }\n}\n","import { EndOfStreamError } from './stream/index.js';\nimport { AbstractTokenizer } from './AbstractTokenizer.js';\nexport class BlobTokenizer extends AbstractTokenizer {\n /**\n * Construct BufferTokenizer\n * @param blob - Uint8Array to tokenize\n * @param options Tokenizer options\n */\n constructor(blob, options) {\n super(options);\n this.blob = blob;\n this.fileInfo = { ...options?.fileInfo ?? {}, ...{ size: blob.size, mimeType: blob.type } };\n }\n /**\n * Read buffer from tokenizer\n * @param uint8Array - Uint8Array to tokenize\n * @param options - Read behaviour options\n * @returns {Promise<number>}\n */\n async readBuffer(uint8Array, options) {\n if (options?.position) {\n this.position = options.position;\n }\n const bytesRead = await this.peekBuffer(uint8Array, options);\n this.position += bytesRead;\n return bytesRead;\n }\n /**\n * Peek (read ahead) buffer from tokenizer\n * @param buffer\n * @param options - Read behaviour options\n * @returns {Promise<number>}\n */\n async peekBuffer(buffer, options) {\n const normOptions = this.normalizeOptions(buffer, options);\n const bytes2read = Math.min(this.blob.size - normOptions.position, normOptions.length);\n if ((!normOptions.mayBeLess) && bytes2read < normOptions.length) {\n throw new EndOfStreamError();\n }\n const arrayBuffer = await this.blob.slice(normOptions.position, normOptions.position + bytes2read).arrayBuffer();\n buffer.set(new Uint8Array(arrayBuffer));\n return bytes2read;\n }\n close() {\n return super.close();\n }\n supportsRandomAccess() {\n return true;\n }\n setPosition(position) {\n this.position = position;\n }\n}\n","import { StreamReader, makeWebStreamReader } from './stream/index.js';\nimport { ReadStreamTokenizer } from './ReadStreamTokenizer.js';\nimport { BufferTokenizer } from './BufferTokenizer.js';\nimport { BlobTokenizer } from './BlobTokenizer.js';\nexport { EndOfStreamError, AbortError } from './stream/index.js';\nexport { AbstractTokenizer } from './AbstractTokenizer.js';\n/**\n * Construct ReadStreamTokenizer from given Stream.\n * Will set fileSize, if provided given Stream has set the .path property/\n * @param stream - Read from Node.js Stream.Readable\n * @param options - Tokenizer options\n * @returns ReadStreamTokenizer\n */\nexport function fromStream(stream, options) {\n const streamReader = new StreamReader(stream);\n const _options = options ?? {};\n const chainedClose = _options.onClose;\n _options.onClose = async () => {\n await streamReader.close();\n if (chainedClose) {\n return chainedClose();\n }\n };\n return new ReadStreamTokenizer(streamReader, _options);\n}\n/**\n * Construct ReadStreamTokenizer from given ReadableStream (WebStream API).\n * Will set fileSize, if provided given Stream has set the .path property/\n * @param webStream - Read from Node.js Stream.Readable (must be a byte stream)\n * @param options - Tokenizer options\n * @returns ReadStreamTokenizer\n */\nexport function fromWebStream(webStream, options) {\n const webStreamReader = makeWebStreamReader(webStream);\n const _options = options ?? {};\n const chainedClose = _options.onClose;\n _options.onClose = async () => {\n await webStreamReader.close();\n if (chainedClose) {\n return chainedClose();\n }\n };\n return new ReadStreamTokenizer(webStreamReader, _options);\n}\n/**\n * Construct ReadStreamTokenizer from given Buffer.\n * @param uint8Array - Uint8Array to tokenize\n * @param options - Tokenizer options\n * @returns BufferTokenizer\n */\nexport function fromBuffer(uint8Array, options) {\n return new BufferTokenizer(uint8Array, options);\n}\n/**\n * Construct ReadStreamTokenizer from given Blob.\n * @param blob - Uint8Array to tokenize\n * @param options - Tokenizer options\n * @returns BufferTokenizer\n */\nexport function fromBlob(blob, options) {\n return new BlobTokenizer(blob, options);\n}\n","import { AbstractTokenizer } from './AbstractTokenizer.js';\nimport { EndOfStreamError } from './stream/index.js';\nimport { open as fsOpen } from 'node:fs/promises';\nexport class FileTokenizer extends AbstractTokenizer {\n /**\n * Create tokenizer from provided file path\n * @param sourceFilePath File path\n */\n static async fromFile(sourceFilePath) {\n const fileHandle = await fsOpen(sourceFilePath, 'r');\n const stat = await fileHandle.stat();\n return new FileTokenizer(fileHandle, { fileInfo: { path: sourceFilePath, size: stat.size } });\n }\n constructor(fileHandle, options) {\n super(options);\n this.fileHandle = fileHandle;\n this.fileInfo = options.fileInfo;\n }\n /**\n * Read buffer from file\n * @param uint8Array - Uint8Array to write result to\n * @param options - Read behaviour options\n * @returns Promise number of bytes read\n */\n async readBuffer(uint8Array, options) {\n const normOptions = this.normalizeOptions(uint8Array, options);\n this.position = normOptions.position;\n if (normOptions.length === 0)\n return 0;\n const res = await this.fileHandle.read(uint8Array, 0, normOptions.length, normOptions.position);\n this.position += res.bytesRead;\n if (res.bytesRead < normOptions.length && (!options || !options.mayBeLess)) {\n throw new EndOfStreamError();\n }\n return res.bytesRead;\n }\n /**\n * Peek buffer from file\n * @param uint8Array - Uint8Array (or Buffer) to write data to\n * @param options - Read behaviour options\n * @returns Promise number of bytes read\n */\n async peekBuffer(uint8Array, options) {\n const normOptions = this.normalizeOptions(uint8Array, options);\n const res = await this.fileHandle.read(uint8Array, 0, normOptions.length, normOptions.position);\n if ((!normOptions.mayBeLess) && res.bytesRead < normOptions.length) {\n throw new EndOfStreamError();\n }\n return res.bytesRead;\n }\n async close() {\n await this.fileHandle.close();\n return super.close();\n }\n setPosition(position) {\n this.position = position;\n }\n supportsRandomAccess() {\n return true;\n }\n}\n","import { stat as fsStat } from 'node:fs/promises';\nimport { fromStream as coreFromStream } from './core.js';\nimport { FileTokenizer } from \"./FileTokenizer.js\";\nexport { FileTokenizer } from './FileTokenizer.js';\nexport * from './core.js';\n/**\n * Construct ReadStreamTokenizer from given Stream.\n * Will set fileSize, if provided given Stream has set the .path property.\n * @param stream - Node.js Stream.Readable\n * @param options - Pass additional file information to the tokenizer\n * @returns Tokenizer\n */\nexport async function fromStream(stream, options) {\n const rst = coreFromStream(stream, options);\n if (stream.path) {\n const stat = await fsStat(stream.path);\n rst.fileInfo.path = stream.path;\n rst.fileInfo.size = stat.size;\n }\n return rst;\n}\nexport const fromFile = FileTokenizer.fromFile;\n","const WINDOWS_1252_EXTRA = {\n 0x80: \"€\", 0x82: \"‚\", 0x83: \"ƒ\", 0x84: \"„\", 0x85: \"…\", 0x86: \"†\",\n 0x87: \"‡\", 0x88: \"ˆ\", 0x89: \"‰\", 0x8a: \"Š\", 0x8b: \"‹\", 0x8c: \"Œ\",\n 0x8e: \"Ž\", 0x91: \"‘\", 0x92: \"’\", 0x93: \"“\", 0x94: \"”\", 0x95: \"•\",\n 0x96: \"–\", 0x97: \"—\", 0x98: \"˜\", 0x99: \"™\", 0x9a: \"š\", 0x9b: \"›\",\n 0x9c: \"œ\", 0x9e: \"ž\", 0x9f: \"Ÿ\",\n};\nconst WINDOWS_1252_REVERSE = {};\nfor (const [code, char] of Object.entries(WINDOWS_1252_EXTRA)) {\n WINDOWS_1252_REVERSE[char] = Number.parseInt(code, 10);\n}\nlet _utf8Decoder;\nlet _utf8Encoder;\nfunction utf8Decoder() {\n if (typeof globalThis.TextDecoder === \"undefined\")\n return undefined;\n return (_utf8Decoder !== null && _utf8Decoder !== void 0 ? _utf8Decoder : (_utf8Decoder = new globalThis.TextDecoder(\"utf-8\")));\n}\nfunction utf8Encoder() {\n if (typeof globalThis.TextEncoder === \"undefined\")\n return undefined;\n return (_utf8Encoder !== null && _utf8Encoder !== void 0 ? _utf8Encoder : (_utf8Encoder = new globalThis.TextEncoder()));\n}\nconst CHUNK = 32 * 1024;\nconst REPLACEMENT = 0xfffd;\n/**\n * Decode text from binary data\n */\nexport function textDecode(bytes, encoding = \"utf-8\") {\n switch (encoding.toLowerCase()) {\n case \"utf-8\":\n case \"utf8\": {\n const dec = utf8Decoder();\n return dec ? dec.decode(bytes) : decodeUTF8(bytes);\n }\n case \"utf-16le\":\n return decodeUTF16LE(bytes);\n case \"us-ascii\":\n case \"ascii\":\n return decodeASCII(bytes);\n case \"latin1\":\n case \"iso-8859-1\":\n return decodeLatin1(bytes);\n case \"windows-1252\":\n return decodeWindows1252(bytes);\n default:\n throw new RangeError(`Encoding '${encoding}' not supported`);\n }\n}\nexport function textEncode(input = \"\", encoding = \"utf-8\") {\n switch (encoding.toLowerCase()) {\n case \"utf-8\":\n case \"utf8\": {\n const enc = utf8Encoder();\n return enc ? enc.encode(input) : encodeUTF8(input);\n }\n case \"utf-16le\":\n return encodeUTF16LE(input);\n case \"us-ascii\":\n case \"ascii\":\n return encodeASCII(input);\n case \"latin1\":\n case \"iso-8859-1\":\n return encodeLatin1(input);\n case \"windows-1252\":\n return encodeWindows1252(input);\n default:\n throw new RangeError(`Encoding '${encoding}' not supported`);\n }\n}\nfunction appendCodePoint(out, cp) {\n if (cp <= 0xffff) {\n out.push(String.fromCharCode(cp));\n return;\n }\n cp -= 0x10000;\n out.push(String.fromCharCode(0xd800 + (cp >> 10), 0xdc00 + (cp & 0x3ff)));\n}\nfunction flushChunk(parts, chunk) {\n if (chunk.length === 0)\n return;\n parts.push(String.fromCharCode.apply(null, chunk));\n chunk.length = 0;\n}\nfunction pushCodeUnit(parts, chunk, codeUnit) {\n chunk.push(codeUnit);\n if (chunk.length >= CHUNK)\n flushChunk(parts, chunk);\n}\nfunction pushCodePoint(parts, chunk, cp) {\n if (cp <= 0xffff) {\n pushCodeUnit(parts, chunk, cp);\n return;\n }\n cp -= 0x10000;\n pushCodeUnit(parts, chunk, 0xd800 + (cp >> 10));\n pushCodeUnit(parts, chunk, 0xdc00 + (cp & 0x3ff));\n}\nfunction decodeUTF8(bytes) {\n const parts = [];\n const chunk = [];\n let i = 0;\n // Match TextDecoder(\"utf-8\") default BOM handling\n if (bytes.length >= 3 &&\n bytes[0] === 0xef &&\n bytes[1] === 0xbb &&\n bytes[2] === 0xbf) {\n i = 3;\n }\n while (i < bytes.length) {\n const b1 = bytes[i];\n if (b1 <= 0x7f) {\n pushCodeUnit(parts, chunk, b1);\n i++;\n continue;\n }\n // Invalid leading bytes: continuation byte or impossible prefixes\n if (b1 < 0xc2 || b1 > 0xf4) {\n pushCodeUnit(parts, chunk, REPLACEMENT);\n i++;\n continue;\n }\n // 2-byte sequence\n if (b1 <= 0xdf) {\n if (i + 1 >= bytes.length) {\n pushCodeUnit(parts, chunk, REPLACEMENT);\n i++;\n continue;\n }\n const b2 = bytes[i + 1];\n if ((b2 & 0xc0) !== 0x80) {\n pushCodeUnit(parts, chunk, REPLACEMENT);\n i++;\n continue;\n }\n const cp = ((b1 & 0x1f) << 6) | (b2 & 0x3f);\n pushCodeUnit(parts, chunk, cp);\n i += 2;\n continue;\n }\n // 3-byte sequence\n if (b1 <= 0xef) {\n if (i + 2 >= bytes.length) {\n pushCodeUnit(parts, chunk, REPLACEMENT);\n i++;\n continue;\n }\n const b2 = bytes[i + 1];\n const b3 = bytes[i + 2];\n const valid = (b2 & 0xc0) === 0x80 &&\n (b3 & 0xc0) === 0x80 &&\n !(b1 === 0xe0 && b2 < 0xa0) && // overlong\n !(b1 === 0xed && b2 >= 0xa0); // surrogate range\n if (!valid) {\n pushCodeUnit(parts, chunk, REPLACEMENT);\n i++;\n continue;\n }\n const cp = ((b1 & 0x0f) << 12) |\n ((b2 & 0x3f) << 6) |\n (b3 & 0x3f);\n pushCodeUnit(parts, chunk, cp);\n i += 3;\n continue;\n }\n // 4-byte sequence\n if (i + 3 >= bytes.length) {\n pushCodeUnit(parts, chunk, REPLACEMENT);\n i++;\n continue;\n }\n const b2 = bytes[i + 1];\n const b3 = bytes[i + 2];\n const b4 = bytes[i + 3];\n const valid = (b2 & 0xc0) === 0x80 &&\n (b3 & 0xc0) === 0x80 &&\n (b4 & 0xc0) === 0x80 &&\n !(b1 === 0xf0 && b2 < 0x90) && // overlong\n !(b1 === 0xf4 && b2 > 0x8f); // > U+10FFFF\n if (!valid) {\n pushCodeUnit(parts, chunk, REPLACEMENT);\n i++;\n continue;\n }\n const cp = ((b1 & 0x07) << 18) |\n ((b2 & 0x3f) << 12) |\n ((b3 & 0x3f) << 6) |\n (b4 & 0x3f);\n pushCodePoint(parts, chunk, cp);\n i += 4;\n }\n flushChunk(parts, chunk);\n return parts.join(\"\");\n}\nfunction decodeUTF16LE(bytes) {\n const parts = [];\n const chunk = [];\n const len = bytes.length;\n let i = 0;\n while (i + 1 < len) {\n const u1 = bytes[i] | (bytes[i + 1] << 8);\n i += 2;\n // High surrogate\n if (u1 >= 0xd800 && u1 <= 0xdbff) {\n if (i + 1 < len) {\n const u2 = bytes[i] | (bytes[i + 1] << 8);\n if (u2 >= 0xdc00 && u2 <= 0xdfff) {\n pushCodeUnit(parts, chunk, u1);\n pushCodeUnit(parts, chunk, u2);\n i += 2;\n }\n else {\n pushCodeUnit(parts, chunk, REPLACEMENT);\n }\n }\n else {\n pushCodeUnit(parts, chunk, REPLACEMENT);\n }\n continue;\n }\n // Lone low surrogate\n if (u1 >= 0xdc00 && u1 <= 0xdfff) {\n pushCodeUnit(parts, chunk, REPLACEMENT);\n continue;\n }\n pushCodeUnit(parts, chunk, u1);\n }\n // Odd trailing byte\n if (i < len) {\n pushCodeUnit(parts, chunk, REPLACEMENT);\n }\n flushChunk(parts, chunk);\n return parts.join(\"\");\n}\nfunction decodeASCII(bytes) {\n const parts = [];\n for (let i = 0; i < bytes.length; i += CHUNK) {\n const end = Math.min(bytes.length, i + CHUNK);\n const codes = new Array(end - i);\n for (let j = i, k = 0; j < end; j++, k++) {\n codes[k] = bytes[j] & 0x7f;\n }\n parts.push(String.fromCharCode.apply(null, codes));\n }\n return parts.join(\"\");\n}\nfunction decodeLatin1(bytes) {\n const parts = [];\n for (let i = 0; i < bytes.length; i += CHUNK) {\n const end = Math.min(bytes.length, i + CHUNK);\n const codes = new Array(end - i);\n for (let j = i, k = 0; j < end; j++, k++) {\n codes[k] = bytes[j];\n }\n parts.push(String.fromCharCode.apply(null, codes));\n }\n return parts.join(\"\");\n}\nfunction decodeWindows1252(bytes) {\n const parts = [];\n let out = \"\";\n for (let i = 0; i < bytes.length; i++) {\n const b = bytes[i];\n const extra = b >= 0x80 && b <= 0x9f ? WINDOWS_1252_EXTRA[b] : undefined;\n out += extra !== null && extra !== void 0 ? extra : String.fromCharCode(b);\n if (out.length >= CHUNK) {\n parts.push(out);\n out = \"\";\n }\n }\n if (out)\n parts.push(out);\n return parts.join(\"\");\n}\nfunction encodeUTF8(str) {\n const out = [];\n for (let i = 0; i < str.length; i++) {\n let cp = str.charCodeAt(i);\n // Valid surrogate pair\n if (cp >= 0xd800 && cp <= 0xdbff) {\n if (i + 1 < str.length) {\n const lo = str.charCodeAt(i + 1);\n if (lo >= 0xdc00 && lo <= 0xdfff) {\n cp = 0x10000 + ((cp - 0xd800) << 10) + (lo - 0xdc00);\n i++;\n }\n else {\n cp = REPLACEMENT;\n }\n }\n else {\n cp = REPLACEMENT;\n }\n }\n else if (cp >= 0xdc00 && cp <= 0xdfff) {\n // Lone low surrogate\n cp = REPLACEMENT;\n }\n if (cp < 0x80) {\n out.push(cp);\n }\n else if (cp < 0x800) {\n out.push(0xc0 | (cp >> 6), 0x80 | (cp & 0x3f));\n }\n else if (cp < 0x10000) {\n out.push(0xe0 | (cp >> 12), 0x80 | ((cp >> 6) & 0x3f), 0x80 | (cp & 0x3f));\n }\n else {\n out.push(0xf0 | (cp >> 18), 0x80 | ((cp >> 12) & 0x3f), 0x80 | ((cp >> 6) & 0x3f), 0x80 | (cp & 0x3f));\n }\n }\n return new Uint8Array(out);\n}\nfunction encodeUTF16LE(str) {\n // Preserve JS string code units, but do not emit non-well-formed UTF-16.\n // Replace lone surrogates with U+FFFD.\n const units = [];\n for (let i = 0; i < str.length; i++) {\n const u = str.charCodeAt(i);\n if (u >= 0xd800 && u <= 0xdbff) {\n if (i + 1 < str.length) {\n const lo = str.charCodeAt(i + 1);\n if (lo >= 0xdc00 && lo <= 0xdfff) {\n units.push(u, lo);\n i++;\n }\n else {\n units.push(REPLACEMENT);\n }\n }\n else {\n units.push(REPLACEMENT);\n }\n continue;\n }\n if (u >= 0xdc00 && u <= 0xdfff) {\n units.push(REPLACEMENT);\n continue;\n }\n units.push(u);\n }\n const out = new Uint8Array(units.length * 2);\n for (let i = 0; i < units.length; i++) {\n const code = units[i];\n const o = i * 2;\n out[o] = code & 0xff;\n out[o + 1] = code >>> 8;\n }\n return out;\n}\nfunction encodeASCII(str) {\n const out = new Uint8Array(str.length);\n for (let i = 0; i < str.length; i++)\n out[i] = str.charCodeAt(i) & 0x7f;\n return out;\n}\nfunction encodeLatin1(str) {\n const out = new Uint8Array(str.length);\n for (let i = 0; i < str.length; i++)\n out[i] = str.charCodeAt(i) & 0xff;\n return out;\n}\nfunction encodeWindows1252(str) {\n const out = new Uint8Array(str.length);\n for (let i = 0; i < str.length; i++) {\n const ch = str[i];\n const code = ch.charCodeAt(0);\n if (WINDOWS_1252_REVERSE[ch] !== undefined) {\n out[i] = WINDOWS_1252_REVERSE[ch];\n continue;\n }\n if ((code >= 0x00 && code <= 0x7f) ||\n (code >= 0xa0 && code <= 0xff)) {\n out[i] = code;\n continue;\n }\n out[i] = 0x3f; // '?'\n }\n return out;\n}\n","import * as ieee754 from 'ieee754';\nimport { textDecode } from \"@borewit/text-codec\";\n// Primitive types\nfunction dv(array) {\n return new DataView(array.buffer, array.byteOffset);\n}\n/*\n * 8-bit unsigned integer\n */\nexport const UINT8 = {\n len: 1,\n get(array, offset) {\n return dv(array).getUint8(offset);\n },\n put(array, offset, value) {\n dv(array).setUint8(offset, value);\n return offset + 1;\n }\n};\n/**\n * 16-bit unsigned integer, Little Endian byte order\n */\nexport const UINT16_LE = {\n len: 2,\n get(array, offset) {\n return dv(array).getUint16(offset, true);\n },\n put(array, offset, value) {\n dv(array).setUint16(offset, value, true);\n return offset + 2;\n }\n};\n/**\n * 16-bit unsigned integer, Big Endian byte order\n */\nexport const UINT16_BE = {\n len: 2,\n get(array, offset) {\n return dv(array).getUint16(offset);\n },\n put(array, offset, value) {\n dv(array).setUint16(offset, value);\n return offset + 2;\n }\n};\n/**\n * 24-bit unsigned integer, Little Endian byte order\n */\nexport const UINT24_LE = {\n len: 3,\n get(array, offset) {\n const dataView = dv(array);\n return dataView.getUint8(offset) + (dataView.getUint16(offset + 1, true) << 8);\n },\n put(array, offset, value) {\n const dataView = dv(array);\n dataView.setUint8(offset, value & 0xff);\n dataView.setUint16(offset + 1, value >> 8, true);\n return offset + 3;\n }\n};\n/**\n * 24-bit unsigned integer, Big Endian byte order\n */\nexport const UINT24_BE = {\n len: 3,\n get(array, offset) {\n const dataView = dv(array);\n return (dataView.getUint16(offset) << 8) + dataView.getUint8(offset + 2);\n },\n put(array, offset, value) {\n const dataView = dv(array);\n dataView.setUint16(offset, value >> 8);\n dataView.setUint8(offset + 2, value & 0xff);\n return offset + 3;\n }\n};\n/**\n * 32-bit unsigned integer, Little Endian byte order\n */\nexport const UINT32_LE = {\n len: 4,\n get(array, offset) {\n return dv(array).getUint32(offset, true);\n },\n put(array, offset, value) {\n dv(array).setUint32(offset, value, true);\n return offset + 4;\n }\n};\n/**\n * 32-bit unsigned integer, Big Endian byte order\n */\nexport const UINT32_BE = {\n len: 4,\n get(array, offset) {\n return dv(array).getUint32(offset);\n },\n put(array, offset, value) {\n dv(array).setUint32(offset, value);\n return offset + 4;\n }\n};\n/**\n * 8-bit signed integer\n */\nexport const INT8 = {\n len: 1,\n get(array, offset) {\n return dv(array).getInt8(offset);\n },\n put(array, offset, value) {\n dv(array).setInt8(offset, value);\n return offset + 1;\n }\n};\n/**\n * 16-bit signed integer, Big Endian byte order\n */\nexport const INT16_BE = {\n len: 2,\n get(array, offset) {\n return dv(array).getInt16(offset);\n },\n put(array, offset, value) {\n dv(array).setInt16(offset, value);\n return offset + 2;\n }\n};\n/**\n * 16-bit signed integer, Little Endian byte order\n */\nexport const INT16_LE = {\n len: 2,\n get(array, offset) {\n return dv(array).getInt16(offset, true);\n },\n put(array, offset, value) {\n dv(array).setInt16(offset, value, true);\n return offset + 2;\n }\n};\n/**\n * 24-bit signed integer, Little Endian byte order\n */\nexport const INT24_LE = {\n len: 3,\n get(array, offset) {\n const unsigned = UINT24_LE.get(array, offset);\n return unsigned > 0x7fffff ? unsigned - 0x1000000 : unsigned;\n },\n put(array, offset, value) {\n const dataView = dv(array);\n dataView.setUint8(offset, value & 0xff);\n dataView.setUint16(offset + 1, value >> 8, true);\n return offset + 3;\n }\n};\n/**\n * 24-bit signed integer, Big Endian byte order\n */\nexport const INT24_BE = {\n len: 3,\n get(array, offset) {\n const unsigned = UINT24_BE.get(array, offset);\n return unsigned > 0x7fffff ? unsigned - 0x1000000 : unsigned;\n },\n put(array, offset, value) {\n const dataView = dv(array);\n dataView.setUint16(offset, value >> 8);\n dataView.setUint8(offset + 2, value & 0xff);\n return offset + 3;\n }\n};\n/**\n * 32-bit signed integer, Big Endian byte order\n */\nexport const INT32_BE = {\n len: 4,\n get(array, offset) {\n return dv(array).getInt32(offset);\n },\n put(array, offset, value) {\n dv(array).setInt32(offset, value);\n return offset + 4;\n }\n};\n/**\n * 32-bit signed integer, Big Endian byte order\n */\nexport const INT32_LE = {\n len: 4,\n get(array, offset) {\n return dv(array).getInt32(offset, true);\n },\n put(array, offset, value) {\n dv(array).setInt32(offset, value, true);\n return offset + 4;\n }\n};\n/**\n * 64-bit unsigned integer, Little Endian byte order\n */\nexport const UINT64_LE = {\n len: 8,\n get(array, offset) {\n return dv(array).getBigUint64(offset, true);\n },\n put(array, offset, value) {\n dv(array).setBigUint64(offset, value, true);\n return offset + 8;\n }\n};\n/**\n * 64-bit signed integer, Little Endian byte order\n */\nexport const INT64_LE = {\n len: 8,\n get(array, offset) {\n return dv(array).getBigInt64(offset, true);\n },\n put(array, offset, value) {\n dv(array).setBigInt64(offset, value, true);\n return offset + 8;\n }\n};\n/**\n * 64-bit unsigned integer, Big Endian byte order\n */\nexport const UINT64_BE = {\n len: 8,\n get(array, offset) {\n return dv(array).getBigUint64(offset);\n },\n put(array, offset, value) {\n dv(array).setBigUint64(offset, value);\n return offset + 8;\n }\n};\n/**\n * 64-bit signed integer, Big Endian byte order\n */\nexport const INT64_BE = {\n len: 8,\n get(array, offset) {\n return dv(array).getBigInt64(offset);\n },\n put(array, offset, value) {\n dv(array).setBigInt64(offset, value);\n return offset + 8;\n }\n};\n/**\n * IEEE 754 16-bit (half precision) float, big endian\n */\nexport const Float16_BE = {\n len: 2,\n get(dataView, offset) {\n return ieee754.read(dataView, offset, false, 10, this.len);\n },\n put(dataView, offset, value) {\n ieee754.write(dataView, value, offset, false, 10, this.len);\n return offset + this.len;\n }\n};\n/**\n * IEEE 754 16-bit (half precision) float, little endian\n */\nexport const Float16_LE = {\n len: 2,\n get(array, offset) {\n return ieee754.read(array, offset, true, 10, this.len);\n },\n put(array, offset, value) {\n ieee754.write(array, value, offset, true, 10, this.len);\n return offset + this.len;\n }\n};\n/**\n * IEEE 754 32-bit (single precision) float, big endian\n */\nexport const Float32_BE = {\n len: 4,\n get(array, offset) {\n return dv(array).getFloat32(offset);\n },\n put(array, offset, value) {\n dv(array).setFloat32(offset, value);\n return offset + 4;\n }\n};\n/**\n * IEEE 754 32-bit (single precision) float, little endian\n */\nexport const Float32_LE = {\n len: 4,\n get(array, offset) {\n return dv(array).getFloat32(offset, true);\n },\n put(array, offset, value) {\n dv(array).setFloat32(offset, value, true);\n return offset + 4;\n }\n};\n/**\n * IEEE 754 64-bit (double precision) float, big endian\n */\nexport const Float64_BE = {\n len: 8,\n get(array, offset) {\n return dv(array).getFloat64(offset);\n },\n put(array, offset, value) {\n dv(array).setFloat64(offset, value);\n return offset + 8;\n }\n};\n/**\n * IEEE 754 64-bit (double precision) float, little endian\n */\nexport const Float64_LE = {\n len: 8,\n get(array, offset) {\n return dv(array).getFloat64(offset, true);\n },\n put(array, offset, value) {\n dv(array).setFloat64(offset, value, true);\n return offset + 8;\n }\n};\n/**\n * IEEE 754 80-bit (extended precision) float, big endian\n */\nexport const Float80_BE = {\n len: 10,\n get(array, offset) {\n return ieee754.read(array, offset, false, 63, this.len);\n },\n put(array, offset, value) {\n ieee754.write(array, value, offset, false, 63, this.len);\n return offset + this.len;\n }\n};\n/**\n * IEEE 754 80-bit (extended precision) float, little endian\n */\nexport const Float80_LE = {\n len: 10,\n get(array, offset) {\n return ieee754.read(array, offset, true, 63, this.len);\n },\n put(array, offset, value) {\n ieee754.write(array, value, offset, true, 63, this.len);\n return offset + this.len;\n }\n};\n/**\n * Ignore a given number of bytes\n */\nexport class IgnoreType {\n /**\n * @param len number of bytes to ignore\n */\n constructor(len) {\n this.len = len;\n }\n // ToDo: don't read, but skip data\n get(_array, _off) {\n }\n}\nexport class Uint8ArrayType {\n constructor(len) {\n this.len = len;\n }\n get(array, offset) {\n return array.subarray(offset, offset + this.len);\n }\n}\n/**\n * Consume a fixed number of bytes from the stream and return a string with a specified encoding.\n * Supports all encodings supported by TextDecoder, plus 'windows-1252'.\n */\nexport class StringType {\n constructor(len, encoding) {\n this.len = len;\n this.encoding = encoding;\n }\n get(data, offset = 0) {\n const bytes = data.subarray(offset, offset + this.len);\n return textDecode(bytes, this.encoding);\n }\n}\n/**\n * ANSI Latin 1 String using Windows-1252 (Code Page 1252)\n * Windows-1252 is a superset of ISO 8859-1 / Latin-1.\n */\nexport class AnsiStringType extends StringType {\n constructor(len) {\n super(len, 'windows-1252');\n }\n}\n","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '')\n\t\t\t.trim()\n\t\t\t.replace(/\\s+/g, ',')\n\t\t\t.split(',')\n\t\t\t.filter(Boolean);\n\n\t\tfor (const ns of split) {\n\t\t\tif (ns[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(ns.slice(1));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(ns);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Checks if the given string matches a namespace template, honoring\n\t * asterisks as wildcards.\n\t *\n\t * @param {String} search\n\t * @param {String} template\n\t * @return {Boolean}\n\t */\n\tfunction matchesTemplate(search, template) {\n\t\tlet searchIndex = 0;\n\t\tlet templateIndex = 0;\n\t\tlet starIndex = -1;\n\t\tlet matchIndex = 0;\n\n\t\twhile (searchIndex < search.length) {\n\t\t\tif (templateIndex < template.length && (template[templateIndex] === search[searchIndex] || template[templateIndex] === '*')) {\n\t\t\t\t// Match character or proceed with wildcard\n\t\t\t\tif (template[templateIndex] === '*') {\n\t\t\t\t\tstarIndex = templateIndex;\n\t\t\t\t\tmatchIndex = searchIndex;\n\t\t\t\t\ttemplateIndex++; // Skip the '*'\n\t\t\t\t} else {\n\t\t\t\t\tsearchIndex++;\n\t\t\t\t\ttemplateIndex++;\n\t\t\t\t}\n\t\t\t} else if (starIndex !== -1) { // eslint-disable-line no-negated-condition\n\t\t\t\t// Backtrack to the last '*' and try to match more characters\n\t\t\t\ttemplateIndex = starIndex + 1;\n\t\t\t\tmatchIndex++;\n\t\t\t\tsearchIndex = matchIndex;\n\t\t\t} else {\n\t\t\t\treturn false; // No match\n\t\t\t}\n\t\t}\n\n\t\t// Handle trailing '*' in template\n\t\twhile (templateIndex < template.length && template[templateIndex] === '*') {\n\t\t\ttemplateIndex++;\n\t\t}\n\n\t\treturn templateIndex === template.length;\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names,\n\t\t\t...createDebug.skips.map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tfor (const skip of createDebug.skips) {\n\t\t\tif (matchesTemplate(name, skip)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (const ns of createDebug.names) {\n\t\t\tif (matchesTemplate(name, ns)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n","/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\tlet m;\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\t// eslint-disable-next-line no-return-assign\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)) && parseInt(m[1], 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug') || exports.storage.getItem('DEBUG') ;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n","/**\n * Module dependencies.\n */\n\nconst tty = require('tty');\nconst util = require('util');\n\n/**\n * This is the Node.js implementation of `debug()`.\n */\n\nexports.init = init;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.destroy = util.deprecate(\n\t() => {},\n\t'Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'\n);\n\n/**\n * Colors.\n */\n\nexports.colors = [6, 2, 3, 4, 5, 1];\n\ntry {\n\t// Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json)\n\t// eslint-disable-next-line import/no-extraneous-dependencies\n\tconst supportsColor = require('supports-color');\n\n\tif (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) {\n\t\texports.colors = [\n\t\t\t20,\n\t\t\t21,\n\t\t\t26,\n\t\t\t27,\n\t\t\t32,\n\t\t\t33,\n\t\t\t38,\n\t\t\t39,\n\t\t\t40,\n\t\t\t41,\n\t\t\t42,\n\t\t\t43,\n\t\t\t44,\n\t\t\t45,\n\t\t\t56,\n\t\t\t57,\n\t\t\t62,\n\t\t\t63,\n\t\t\t68,\n\t\t\t69,\n\t\t\t74,\n\t\t\t75,\n\t\t\t76,\n\t\t\t77,\n\t\t\t78,\n\t\t\t79,\n\t\t\t80,\n\t\t\t81,\n\t\t\t92,\n\t\t\t93,\n\t\t\t98,\n\t\t\t99,\n\t\t\t112,\n\t\t\t113,\n\t\t\t128,\n\t\t\t129,\n\t\t\t134,\n\t\t\t135,\n\t\t\t148,\n\t\t\t149,\n\t\t\t160,\n\t\t\t161,\n\t\t\t162,\n\t\t\t163,\n\t\t\t164,\n\t\t\t165,\n\t\t\t166,\n\t\t\t167,\n\t\t\t168,\n\t\t\t169,\n\t\t\t170,\n\t\t\t171,\n\t\t\t172,\n\t\t\t173,\n\t\t\t178,\n\t\t\t179,\n\t\t\t184,\n\t\t\t185,\n\t\t\t196,\n\t\t\t197,\n\t\t\t198,\n\t\t\t199,\n\t\t\t200,\n\t\t\t201,\n\t\t\t202,\n\t\t\t203,\n\t\t\t204,\n\t\t\t205,\n\t\t\t206,\n\t\t\t207,\n\t\t\t208,\n\t\t\t209,\n\t\t\t214,\n\t\t\t215,\n\t\t\t220,\n\t\t\t221\n\t\t];\n\t}\n} catch (error) {\n\t// Swallow - we only care if `supports-color` is available; it doesn't have to be.\n}\n\n/**\n * Build up the default `inspectOpts` object from the environment variables.\n *\n * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js\n */\n\nexports.inspectOpts = Object.keys(process.env).filter(key => {\n\treturn /^debug_/i.test(key);\n}).reduce((obj, key) => {\n\t// Camel-case\n\tconst prop = key\n\t\t.substring(6)\n\t\t.toLowerCase()\n\t\t.replace(/_([a-z])/g, (_, k) => {\n\t\t\treturn k.toUpperCase();\n\t\t});\n\n\t// Coerce string value into JS value\n\tlet val = process.env[key];\n\tif (/^(yes|on|true|enabled)$/i.test(val)) {\n\t\tval = true;\n\t} else if (/^(no|off|false|disabled)$/i.test(val)) {\n\t\tval = false;\n\t} else if (val === 'null') {\n\t\tval = null;\n\t} else {\n\t\tval = Number(val);\n\t}\n\n\tobj[prop] = val;\n\treturn obj;\n}, {});\n\n/**\n * Is stdout a TTY? Colored output is enabled when `true`.\n */\n\nfunction useColors() {\n\treturn 'colors' in exports.inspectOpts ?\n\t\tBoolean(exports.inspectOpts.colors) :\n\t\ttty.isatty(process.stderr.fd);\n}\n\n/**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\tconst {namespace: name, useColors} = this;\n\n\tif (useColors) {\n\t\tconst c = this.color;\n\t\tconst colorCode = '\\u001B[3' + (c < 8 ? c : '8;5;' + c);\n\t\tconst prefix = ` ${colorCode};1m${name} \\u001B[0m`;\n\n\t\targs[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n\t\targs.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\\u001B[0m');\n\t} else {\n\t\targs[0] = getDate() + name + ' ' + args[0];\n\t}\n}\n\nfunction getDate() {\n\tif (exports.inspectOpts.hideDate) {\n\t\treturn '';\n\t}\n\treturn new Date().toISOString() + ' ';\n}\n\n/**\n * Invokes `util.formatWithOptions()` with the specified arguments and writes to stderr.\n */\n\nfunction log(...args) {\n\treturn process.stderr.write(util.formatWithOptions(exports.inspectOpts, ...args) + '\\n');\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\tif (namespaces) {\n\t\tprocess.env.DEBUG = namespaces;\n\t} else {\n\t\t// If you set a process.env field to null or undefined, it gets cast to the\n\t\t// string 'null' or 'undefined'. Just delete instead.\n\t\tdelete process.env.DEBUG;\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n\treturn process.env.DEBUG;\n}\n\n/**\n * Init logic for `debug` instances.\n *\n * Create a new `inspectOpts` object in case `useColors` is set\n * differently for a particular `debug` instance.\n */\n\nfunction init(debug) {\n\tdebug.inspectOpts = {};\n\n\tconst keys = Object.keys(exports.inspectOpts);\n\tfor (let i = 0; i < keys.length; i++) {\n\t\tdebug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %o to `util.inspect()`, all on a single line.\n */\n\nformatters.o = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts)\n\t\t.split('\\n')\n\t\t.map(str => str.trim())\n\t\t.join(' ');\n};\n\n/**\n * Map %O to `util.inspect()`, allowing multiple lines if needed.\n */\n\nformatters.O = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts);\n};\n","/**\n * Detect Electron renderer / nwjs process, which is node, but we should\n * treat as a browser.\n */\n\nif (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) {\n\tmodule.exports = require('./browser.js');\n} else {\n\tmodule.exports = require('./node.js');\n}\n","/**\n * Ref https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT\n */\nimport { UINT16_LE, UINT32_LE } from \"token-types\";\nexport const Signature = {\n LocalFileHeader: 0x04034b50,\n DataDescriptor: 0x08074b50,\n CentralFileHeader: 0x02014b50,\n EndOfCentralDirectory: 0x06054b50\n};\nexport const DataDescriptor = {\n get(array) {\n return {\n signature: UINT32_LE.get(array, 0),\n compressedSize: UINT32_LE.get(array, 8),\n uncompressedSize: UINT32_LE.get(array, 12),\n };\n }, len: 16\n};\n/**\n * First part of the ZIP Local File Header\n * Offset | Bytes| Description\n * -------|------+-------------------------------------------------------------------\n * 0 | 4 | Signature (0x04034b50)\n * 4 | 2 | Minimum version needed to extract\n * 6 | 2 | Bit flag\n * 8 | 2 | Compression method\n * 10 | 2 | File last modification time (MS-DOS format)\n * 12 | 2 | File last modification date (MS-DOS format)\n * 14 | 4 | CRC-32 of uncompressed data\n * 18 | 4 | Compressed size\n * 22 | 4 | Uncompressed size\n * 26 | 2 | File name length (n)\n * 28 | 2 | Extra field length (m)\n * 30 | n | File name\n * 30 + n | m | Extra field\n */\nexport const LocalFileHeaderToken = {\n get(array) {\n const flags = UINT16_LE.get(array, 6);\n return {\n signature: UINT32_LE.get(array, 0),\n minVersion: UINT16_LE.get(array, 4),\n dataDescriptor: !!(flags & 0x0008),\n compressedMethod: UINT16_LE.get(array, 8),\n compressedSize: UINT32_LE.get(array, 18),\n uncompressedSize: UINT32_LE.get(array, 22),\n filenameLength: UINT16_LE.get(array, 26),\n extraFieldLength: UINT16_LE.get(array, 28),\n filename: null\n };\n }, len: 30\n};\n/**\n * 4.3.16 End of central directory record:\n * end of central dir signature (0x06064b50) 4 bytes\n * number of this disk 2 bytes\n * number of the disk with the start of the central directory 2 bytes\n * total number of entries in the central directory on this disk 2 bytes\n * total number of entries in the size of the central directory 2 bytes\n * sizeOfTheCentralDirectory 4 bytes\n * offset of start of central directory with respect to the starting disk number 4 bytes\n * .ZIP file comment length 2 bytes\n * .ZIP file comment (variable size)\n */\nexport const EndOfCentralDirectoryRecordToken = {\n get(array) {\n return {\n signature: UINT32_LE.get(array, 0),\n nrOfThisDisk: UINT16_LE.get(array, 4),\n nrOfThisDiskWithTheStart: UINT16_LE.get(array, 6),\n nrOfEntriesOnThisDisk: UINT16_LE.get(array, 8),\n nrOfEntriesOfSize: UINT16_LE.get(array, 10),\n sizeOfCd: UINT32_LE.get(array, 12),\n offsetOfStartOfCd: UINT32_LE.get(array, 16),\n zipFileCommentLength: UINT16_LE.get(array, 20),\n };\n }, len: 22\n};\n/**\n * File header:\n * central file header signature 4 bytes 0 (0x02014b50)\n * version made by 2 bytes 4\n * version needed to extract 2 bytes 6\n * general purpose bit flag 2 bytes 8\n * compression method 2 bytes 10\n * last mod file time 2 bytes 12\n * last mod file date 2 bytes 14\n * crc-32 4 bytes 16\n * compressed size 4 bytes 20\n * uncompressed size 4 bytes 24\n * file name length 2 bytes 28\n * extra field length 2 bytes 30\n * file comment length 2 bytes 32\n * disk number start 2 bytes 34\n * internal file attributes 2 bytes 36\n * external file attributes 4 bytes 38\n * relative offset of local header 4 bytes 42\n */\nexport const FileHeader = {\n get(array) {\n const flags = UINT16_LE.get(array, 8);\n return {\n signature: UINT32_LE.get(array, 0),\n minVersion: UINT16_LE.get(array, 6),\n dataDescriptor: !!(flags & 0x0008),\n compressedMethod: UINT16_LE.get(array, 10),\n compressedSize: UINT32_LE.get(array, 20),\n uncompressedSize: UINT32_LE.get(array, 24),\n filenameLength: UINT16_LE.get(array, 28),\n extraFieldLength: UINT16_LE.get(array, 30),\n fileCommentLength: UINT16_LE.get(array, 32),\n relativeOffsetOfLocalHeader: UINT32_LE.get(array, 42),\n filename: null\n };\n }, len: 46\n};\n","import { StringType, UINT32_LE } from 'token-types';\nimport initDebug from 'debug';\nimport { DataDescriptor, EndOfCentralDirectoryRecordToken, FileHeader, LocalFileHeaderToken, Signature } from \"./ZipToken.js\";\nfunction signatureToArray(signature) {\n const signatureBytes = new Uint8Array(UINT32_LE.len);\n UINT32_LE.put(signatureBytes, 0, signature);\n return signatureBytes;\n}\nconst debug = initDebug('tokenizer:inflate');\nconst syncBufferSize = 256 * 1024;\nconst ddSignatureArray = signatureToArray(Signature.DataDescriptor);\nconst eocdSignatureBytes = signatureToArray(Signature.EndOfCentralDirectory);\nexport class ZipHandler {\n constructor(tokenizer) {\n this.tokenizer = tokenizer;\n this.syncBuffer = new Uint8Array(syncBufferSize);\n }\n async isZip() {\n return await this.peekSignature() === Signature.LocalFileHeader;\n }\n peekSignature() {\n return this.tokenizer.peekToken(UINT32_LE);\n }\n async findEndOfCentralDirectoryLocator() {\n const randomReadTokenizer = this.tokenizer;\n const chunkLength = Math.min(16 * 1024, randomReadTokenizer.fileInfo.size);\n const buffer = this.syncBuffer.subarray(0, chunkLength);\n await this.tokenizer.readBuffer(buffer, { position: randomReadTokenizer.fileInfo.size - chunkLength });\n // Search the buffer from end to beginning for EOCD signature\n // const signature = 0x06054b50;\n for (let i = buffer.length - 4; i >= 0; i--) {\n // Compare 4 bytes directly without calling readUInt32LE\n if (buffer[i] === eocdSignatureBytes[0] &&\n buffer[i + 1] === eocdSignatureBytes[1] &&\n buffer[i + 2] === eocdSignatureBytes[2] &&\n buffer[i + 3] === eocdSignatureBytes[3]) {\n return randomReadTokenizer.fileInfo.size - chunkLength + i;\n }\n }\n return -1;\n }\n async readCentralDirectory() {\n if (!this.tokenizer.supportsRandomAccess()) {\n debug('Cannot reading central-directory without random-read support');\n return;\n }\n debug('Reading central-directory...');\n const pos = this.tokenizer.position;\n const offset = await this.findEndOfCentralDirectoryLocator();\n if (offset > 0) {\n debug('Central-directory 32-bit signature found');\n const eocdHeader = await this.tokenizer.readToken(EndOfCentralDirectoryRecordToken, offset);\n const files = [];\n this.tokenizer.setPosition(eocdHeader.offsetOfStartOfCd);\n for (let n = 0; n < eocdHeader.nrOfEntriesOfSize; ++n) {\n const entry = await this.tokenizer.readToken(FileHeader);\n if (entry.signature !== Signature.CentralFileHeader) {\n throw new Error('Expected Central-File-Header signature');\n }\n entry.filename = await this.tokenizer.readToken(new StringType(entry.filenameLength, 'utf-8'));\n await this.tokenizer.ignore(entry.extraFieldLength);\n await this.tokenizer.ignore(entry.fileCommentLength);\n files.push(entry);\n debug(`Add central-directory file-entry: n=${n + 1}/${files.length}: filename=${files[n].filename}`);\n }\n this.tokenizer.setPosition(pos);\n return files;\n }\n this.tokenizer.setPosition(pos);\n }\n async unzip(fileCb) {\n const entries = await this.readCentralDirectory();\n if (entries) {\n // Use Central Directory to iterate over files\n return this.iterateOverCentralDirectory(entries, fileCb);\n }\n // Scan Zip files for local-file-header\n let stop = false;\n do {\n const zipHeader = await this.readLocalFileHeader();\n if (!zipHeader)\n break;\n const next = fileCb(zipHeader);\n stop = !!next.stop;\n let fileData;\n await this.tokenizer.ignore(zipHeader.extraFieldLength);\n if (zipHeader.dataDescriptor && zipHeader.compressedSize === 0) {\n const chunks = [];\n let len = syncBufferSize;\n debug('Compressed-file-size unknown, scanning for next data-descriptor-signature....');\n let nextHeaderIndex = -1;\n while (nextHeaderIndex < 0 && len === syncBufferSize) {\n len = await this.tokenizer.peekBuffer(this.syncBuffer, { mayBeLess: true });\n nextHeaderIndex = indexOf(this.syncBuffer.subarray(0, len), ddSignatureArray);\n const size = nextHeaderIndex >= 0 ? nextHeaderIndex : len;\n if (next.handler) {\n const data = new Uint8Array(size);\n await this.tokenizer.readBuffer(data);\n chunks.push(data);\n }\n else {\n // Move position to the next header if found, skip the whole buffer otherwise\n await this.tokenizer.ignore(size);\n }\n }\n debug(`Found data-descriptor-signature at pos=${this.tokenizer.position}`);\n if (next.handler) {\n await this.inflate(zipHeader, mergeArrays(chunks), next.handler);\n }\n }\n else {\n if (next.handler) {\n debug(`Reading compressed-file-data: ${zipHeader.compressedSize} bytes`);\n fileData = new Uint8Array(zipHeader.compressedSize);\n await this.tokenizer.readBuffer(fileData);\n await this.inflate(zipHeader, fileData, next.handler);\n }\n else {\n debug(`Ignoring compressed-file-data: ${zipHeader.compressedSize} bytes`);\n await this.tokenizer.ignore(zipHeader.compressedSize);\n }\n }\n debug(`Reading data-descriptor at pos=${this.tokenizer.position}`);\n if (zipHeader.dataDescriptor) {\n // await this.tokenizer.ignore(DataDescriptor.len);\n const dataDescriptor = await this.tokenizer.readToken(DataDescriptor);\n if (dataDescriptor.signature !== 0x08074b50) {\n throw new Error(`Expected data-descriptor-signature at position ${this.tokenizer.position - DataDescriptor.len}`);\n }\n }\n } while (!stop);\n }\n async iterateOverCentralDirectory(entries, fileCb) {\n for (const fileHeader of entries) {\n const next = fileCb(fileHeader);\n if (next.handler) {\n this.tokenizer.setPosition(fileHeader.relativeOffsetOfLocalHeader);\n const zipHeader = await this.readLocalFileHeader();\n if (zipHeader) {\n await this.tokenizer.ignore(zipHeader.extraFieldLength);\n const fileData = new Uint8Array(fileHeader.compressedSize);\n await this.tokenizer.readBuffer(fileData);\n await this.inflate(zipHeader, fileData, next.handler);\n }\n }\n if (next.stop)\n break;\n }\n }\n async inflate(zipHeader, fileData, cb) {\n if (zipHeader.compressedMethod === 0) {\n // Stored (uncompressed)\n return cb(fileData);\n }\n if (zipHeader.compressedMethod !== 8) {\n throw new Error(`Unsupported ZIP compression method: ${zipHeader.compressedMethod}`);\n }\n debug(`Decompress filename=${zipHeader.filename}, compressed-size=${fileData.length}`);\n const uncompressedData = await ZipHandler.decompressDeflateRaw(fileData);\n return cb(uncompressedData);\n }\n static async decompressDeflateRaw(data) {\n // Wrap Uint8Array in a ReadableStream without copying\n const input = new ReadableStream({\n start(controller) {\n controller.enqueue(data);\n controller.close();\n }\n });\n const ds = new DecompressionStream(\"deflate-raw\");\n const output = input.pipeThrough(ds);\n try {\n // Collect decompressed bytes from the output stream\n const response = new Response(output);\n const buffer = await response.arrayBuffer();\n return new Uint8Array(buffer);\n }\n catch (err) {\n // Provide ZIP-specific error context\n const message = err instanceof Error\n ? `Failed to deflate ZIP entry: ${err.message}`\n : \"Unknown decompression error in ZIP entry\";\n throw new TypeError(message);\n }\n }\n async readLocalFileHeader() {\n const signature = await this.tokenizer.peekToken(UINT32_LE);\n if (signature === Signature.LocalFileHeader) {\n const header = await this.tokenizer.readToken(LocalFileHeaderToken);\n header.filename = await this.tokenizer.readToken(new StringType(header.filenameLength, 'utf-8'));\n return header;\n }\n if (signature === Signature.CentralFileHeader) {\n return false;\n }\n if (signature === 0xE011CFD0) {\n throw new Error('Encrypted ZIP');\n }\n throw new Error('Unexpected signature');\n }\n}\nfunction indexOf(buffer, portion) {\n const bufferLength = buffer.length;\n const portionLength = portion.length;\n // Return -1 if the portion is longer than the buffer\n if (portionLength > bufferLength)\n return -1;\n // Search for the portion in the buffer\n for (let i = 0; i <= bufferLength - portionLength; i++) {\n let found = true;\n for (let j = 0; j < portionLength; j++) {\n if (buffer[i + j] !== portion[j]) {\n found = false;\n break;\n }\n }\n if (found) {\n return i; // Return the starting offset\n }\n }\n return -1; // Not found\n}\nfunction mergeArrays(chunks) {\n // Concatenate chunks into a single Uint8Array\n const totalLength = chunks.reduce((acc, curr) => acc + curr.length, 0);\n const mergedArray = new Uint8Array(totalLength);\n let offset = 0;\n for (const chunk of chunks) {\n mergedArray.set(chunk, offset);\n offset += chunk.length;\n }\n return mergedArray;\n}\n","export class GzipHandler {\n constructor(tokenizer) {\n this.tokenizer = tokenizer;\n }\n inflate() {\n const tokenizer = this.tokenizer;\n return new ReadableStream({\n async pull(controller) {\n const buffer = new Uint8Array(1024);\n const size = await tokenizer.readBuffer(buffer, { mayBeLess: true });\n if (size === 0) {\n controller.close();\n return;\n }\n controller.enqueue(buffer.subarray(0, size));\n }\n }).pipeThrough(new DecompressionStream(\"gzip\"));\n }\n}\n","const objectToString = Object.prototype.toString;\nconst uint8ArrayStringified = '[object Uint8Array]';\nconst arrayBufferStringified = '[object ArrayBuffer]';\n\nfunction isType(value, typeConstructor, typeStringified) {\n\tif (!value) {\n\t\treturn false;\n\t}\n\n\tif (value.constructor === typeConstructor) {\n\t\treturn true;\n\t}\n\n\treturn objectToString.call(value) === typeStringified;\n}\n\nexport function isUint8Array(value) {\n\treturn isType(value, Uint8Array, uint8ArrayStringified);\n}\n\nfunction isArrayBuffer(value) {\n\treturn isType(value, ArrayBuffer, arrayBufferStringified);\n}\n\nfunction isUint8ArrayOrArrayBuffer(value) {\n\treturn isUint8Array(value) || isArrayBuffer(value);\n}\n\nexport function assertUint8Array(value) {\n\tif (!isUint8Array(value)) {\n\t\tthrow new TypeError(`Expected \\`Uint8Array\\`, got \\`${typeof value}\\``);\n\t}\n}\n\nexport function assertUint8ArrayOrArrayBuffer(value) {\n\tif (!isUint8ArrayOrArrayBuffer(value)) {\n\t\tthrow new TypeError(`Expected \\`Uint8Array\\` or \\`ArrayBuffer\\`, got \\`${typeof value}\\``);\n\t}\n}\n\nexport function toUint8Array(value) {\n\tif (value instanceof ArrayBuffer) {\n\t\treturn new Uint8Array(value);\n\t}\n\n\tif (ArrayBuffer.isView(value)) {\n\t\treturn new Uint8Array(value.buffer, value.byteOffset, value.byteLength);\n\t}\n\n\tthrow new TypeError(`Unsupported value, got \\`${typeof value}\\`.`);\n}\n\nexport function concatUint8Arrays(arrays, totalLength) {\n\tif (arrays.length === 0) {\n\t\treturn new Uint8Array(0);\n\t}\n\n\ttotalLength ??= arrays.reduce((accumulator, currentValue) => accumulator + currentValue.length, 0);\n\n\tconst returnValue = new Uint8Array(totalLength);\n\n\tlet offset = 0;\n\tfor (const array of arrays) {\n\t\tassertUint8Array(array);\n\t\treturnValue.set(array, offset);\n\t\toffset += array.length;\n\t}\n\n\treturn returnValue;\n}\n\nexport function areUint8ArraysEqual(a, b) {\n\tassertUint8Array(a);\n\tassertUint8Array(b);\n\n\tif (a === b) {\n\t\treturn true;\n\t}\n\n\tif (a.length !== b.length) {\n\t\treturn false;\n\t}\n\n\t// eslint-disable-next-line unicorn/no-for-loop\n\tfor (let index = 0; index < a.length; index++) {\n\t\tif (a[index] !== b[index]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\nexport function compareUint8Arrays(a, b) {\n\tassertUint8Array(a);\n\tassertUint8Array(b);\n\n\tconst length = Math.min(a.length, b.length);\n\n\tfor (let index = 0; index < length; index++) {\n\t\tconst diff = a[index] - b[index];\n\t\tif (diff !== 0) {\n\t\t\treturn Math.sign(diff);\n\t\t}\n\t}\n\n\t// At this point, all the compared elements are equal.\n\t// The shorter array should come first if the arrays are of different lengths.\n\treturn Math.sign(a.length - b.length);\n}\n\nconst cachedDecoders = {\n\tutf8: new globalThis.TextDecoder('utf8'),\n};\n\nexport function uint8ArrayToString(array, encoding = 'utf8') {\n\tassertUint8ArrayOrArrayBuffer(array);\n\tcachedDecoders[encoding] ??= new globalThis.TextDecoder(encoding);\n\treturn cachedDecoders[encoding].decode(array);\n}\n\nfunction assertString(value) {\n\tif (typeof value !== 'string') {\n\t\tthrow new TypeError(`Expected \\`string\\`, got \\`${typeof value}\\``);\n\t}\n}\n\nconst cachedEncoder = new globalThis.TextEncoder();\n\nexport function stringToUint8Array(string) {\n\tassertString(string);\n\treturn cachedEncoder.encode(string);\n}\n\nfunction base64ToBase64Url(base64) {\n\treturn base64.replaceAll('+', '-').replaceAll('/', '_').replace(/=+$/, '');\n}\n\nfunction base64UrlToBase64(base64url) {\n\tconst base64 = base64url.replaceAll('-', '+').replaceAll('_', '/');\n\tconst padding = (4 - (base64.length % 4)) % 4;\n\treturn base64 + '='.repeat(padding);\n}\n\n// Reference: https://phuoc.ng/collection/this-vs-that/concat-vs-push/\n// Important: Keep this value divisible by 3 so intermediate chunks produce no Base64 padding.\nconst MAX_BLOCK_SIZE = 65_535;\n\nexport function uint8ArrayToBase64(array, {urlSafe = false} = {}) {\n\tassertUint8Array(array);\n\n\tlet base64 = '';\n\n\tfor (let index = 0; index < array.length; index += MAX_BLOCK_SIZE) {\n\t\tconst chunk = array.subarray(index, index + MAX_BLOCK_SIZE);\n\t\t// Required as `btoa` and `atob` don't properly support Unicode: https://developer.mozilla.org/en-US/docs/Glossary/Base64#the_unicode_problem\n\t\tbase64 += globalThis.btoa(String.fromCodePoint.apply(undefined, chunk));\n\t}\n\n\treturn urlSafe ? base64ToBase64Url(base64) : base64;\n}\n\nexport function base64ToUint8Array(base64String) {\n\tassertString(base64String);\n\treturn Uint8Array.from(globalThis.atob(base64UrlToBase64(base64String)), x => x.codePointAt(0));\n}\n\nexport function stringToBase64(string, {urlSafe = false} = {}) {\n\tassertString(string);\n\treturn uint8ArrayToBase64(stringToUint8Array(string), {urlSafe});\n}\n\nexport function base64ToString(base64String) {\n\tassertString(base64String);\n\treturn uint8ArrayToString(base64ToUint8Array(base64String));\n}\n\nconst byteToHexLookupTable = Array.from({length: 256}, (_, index) => index.toString(16).padStart(2, '0'));\n\nexport function uint8ArrayToHex(array) {\n\tassertUint8Array(array);\n\n\t// Concatenating a string is faster than using an array.\n\tlet hexString = '';\n\n\t// eslint-disable-next-line unicorn/no-for-loop -- Max performance is critical.\n\tfor (let index = 0; index < array.length; index++) {\n\t\thexString += byteToHexLookupTable[array[index]];\n\t}\n\n\treturn hexString;\n}\n\nconst hexToDecimalLookupTable = {\n\t0: 0,\n\t1: 1,\n\t2: 2,\n\t3: 3,\n\t4: 4,\n\t5: 5,\n\t6: 6,\n\t7: 7,\n\t8: 8,\n\t9: 9,\n\ta: 10,\n\tb: 11,\n\tc: 12,\n\td: 13,\n\te: 14,\n\tf: 15,\n\tA: 10,\n\tB: 11,\n\tC: 12,\n\tD: 13,\n\tE: 14,\n\tF: 15,\n};\n\nexport function hexToUint8Array(hexString) {\n\tassertString(hexString);\n\n\tif (hexString.length % 2 !== 0) {\n\t\tthrow new Error('Invalid Hex string length.');\n\t}\n\n\tconst resultLength = hexString.length / 2;\n\tconst bytes = new Uint8Array(resultLength);\n\n\tfor (let index = 0; index < resultLength; index++) {\n\t\tconst highNibble = hexToDecimalLookupTable[hexString[index * 2]];\n\t\tconst lowNibble = hexToDecimalLookupTable[hexString[(index * 2) + 1]];\n\n\t\tif (highNibble === undefined || lowNibble === undefined) {\n\t\t\tthrow new Error(`Invalid Hex character encountered at position ${index * 2}`);\n\t\t}\n\n\t\tbytes[index] = (highNibble << 4) | lowNibble; // eslint-disable-line no-bitwise\n\t}\n\n\treturn bytes;\n}\n\n/**\n@param {DataView} view\n@returns {number}\n*/\nexport function getUintBE(view) {\n\tconst {byteLength} = view;\n\n\tif (byteLength === 6) {\n\t\treturn (view.getUint16(0) * (2 ** 32)) + view.getUint32(2);\n\t}\n\n\tif (byteLength === 5) {\n\t\treturn (view.getUint8(0) * (2 ** 32)) + view.getUint32(1);\n\t}\n\n\tif (byteLength === 4) {\n\t\treturn view.getUint32(0);\n\t}\n\n\tif (byteLength === 3) {\n\t\treturn (view.getUint8(0) * (2 ** 16)) + view.getUint16(1);\n\t}\n\n\tif (byteLength === 2) {\n\t\treturn view.getUint16(0);\n\t}\n\n\tif (byteLength === 1) {\n\t\treturn view.getUint8(0);\n\t}\n}\n\n/**\n@param {Uint8Array} array\n@param {Uint8Array} value\n@returns {number}\n*/\nexport function indexOf(array, value) {\n\tconst arrayLength = array.length;\n\tconst valueLength = value.length;\n\n\tif (valueLength === 0) {\n\t\treturn -1;\n\t}\n\n\tif (valueLength > arrayLength) {\n\t\treturn -1;\n\t}\n\n\tconst validOffsetLength = arrayLength - valueLength;\n\n\tfor (let index = 0; index <= validOffsetLength; index++) {\n\t\tlet isMatch = true;\n\t\tfor (let index2 = 0; index2 < valueLength; index2++) {\n\t\t\tif (array[index + index2] !== value[index2]) {\n\t\t\t\tisMatch = false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (isMatch) {\n\t\t\treturn index;\n\t\t}\n\t}\n\n\treturn -1;\n}\n\n/**\n@param {Uint8Array} array\n@param {Uint8Array} value\n@returns {boolean}\n*/\nexport function includes(array, value) {\n\treturn indexOf(array, value) !== -1;\n}\n","import {StringType} from 'token-types';\n\nexport function stringToBytes(string, encoding) {\n\tif (encoding === 'utf-16le') {\n\t\tconst bytes = [];\n\t\tfor (let index = 0; index < string.length; index++) {\n\t\t\tconst code = string.charCodeAt(index); // eslint-disable-line unicorn/prefer-code-point\n\t\t\tbytes.push(code & 0xFF, (code >> 8) & 0xFF); // High byte\n\t\t}\n\n\t\treturn bytes;\n\t}\n\n\tif (encoding === 'utf-16be') {\n\t\tconst bytes = [];\n\t\tfor (let index = 0; index < string.length; index++) {\n\t\t\tconst code = string.charCodeAt(index); // eslint-disable-line unicorn/prefer-code-point\n\t\t\tbytes.push((code >> 8) & 0xFF, code & 0xFF); // Low byte\n\t\t}\n\n\t\treturn bytes;\n\t}\n\n\treturn [...string].map(character => character.charCodeAt(0)); // eslint-disable-line unicorn/prefer-code-point\n}\n\n/**\nChecks whether the TAR checksum is valid.\n\n@param {Uint8Array} arrayBuffer - The TAR header `[offset ... offset + 512]`.\n@param {number} offset - TAR header offset.\n@returns {boolean} `true` if the TAR checksum is valid, otherwise `false`.\n*/\nexport function tarHeaderChecksumMatches(arrayBuffer, offset = 0) {\n\tconst readSum = Number.parseInt(new StringType(6).get(arrayBuffer, 148).replace(/\\0.*$/, '').trim(), 8); // Read sum in header\n\tif (Number.isNaN(readSum)) {\n\t\treturn false;\n\t}\n\n\tlet sum = 8 * 0x20; // Initialize signed bit sum\n\n\tfor (let index = offset; index < offset + 148; index++) {\n\t\tsum += arrayBuffer[index];\n\t}\n\n\tfor (let index = offset + 156; index < offset + 512; index++) {\n\t\tsum += arrayBuffer[index];\n\t}\n\n\treturn readSum === sum;\n}\n\n/**\nID3 UINT32 sync-safe tokenizer token.\n28 bits (representing up to 256MB) integer, the msb is 0 to avoid \"false syncsignals\".\n*/\nexport const uint32SyncSafeToken = {\n\tget: (buffer, offset) => (buffer[offset + 3] & 0x7F) | ((buffer[offset + 2]) << 7) | ((buffer[offset + 1]) << 14) | ((buffer[offset]) << 21),\n\tlen: 4,\n};\n","export const extensions = [\n\t'jpg',\n\t'png',\n\t'apng',\n\t'gif',\n\t'webp',\n\t'flif',\n\t'xcf',\n\t'cr2',\n\t'cr3',\n\t'orf',\n\t'arw',\n\t'dng',\n\t'nef',\n\t'rw2',\n\t'raf',\n\t'tif',\n\t'bmp',\n\t'icns',\n\t'jxr',\n\t'psd',\n\t'indd',\n\t'zip',\n\t'tar',\n\t'rar',\n\t'gz',\n\t'bz2',\n\t'7z',\n\t'dmg',\n\t'mp4',\n\t'mid',\n\t'mkv',\n\t'webm',\n\t'mov',\n\t'avi',\n\t'mpg',\n\t'mp2',\n\t'mp3',\n\t'm4a',\n\t'oga',\n\t'ogg',\n\t'ogv',\n\t'opus',\n\t'flac',\n\t'wav',\n\t'spx',\n\t'amr',\n\t'pdf',\n\t'epub',\n\t'elf',\n\t'macho',\n\t'exe',\n\t'swf',\n\t'rtf',\n\t'wasm',\n\t'woff',\n\t'woff2',\n\t'eot',\n\t'ttf',\n\t'otf',\n\t'ttc',\n\t'ico',\n\t'flv',\n\t'ps',\n\t'xz',\n\t'sqlite',\n\t'nes',\n\t'crx',\n\t'xpi',\n\t'cab',\n\t'deb',\n\t'ar',\n\t'rpm',\n\t'Z',\n\t'lz',\n\t'cfb',\n\t'mxf',\n\t'mts',\n\t'blend',\n\t'bpg',\n\t'docx',\n\t'pptx',\n\t'xlsx',\n\t'3gp',\n\t'3g2',\n\t'j2c',\n\t'jp2',\n\t'jpm',\n\t'jpx',\n\t'mj2',\n\t'aif',\n\t'qcp',\n\t'odt',\n\t'ods',\n\t'odp',\n\t'xml',\n\t'mobi',\n\t'heic',\n\t'cur',\n\t'ktx',\n\t'ape',\n\t'wv',\n\t'dcm',\n\t'ics',\n\t'glb',\n\t'pcap',\n\t'dsf',\n\t'lnk',\n\t'alias',\n\t'voc',\n\t'ac3',\n\t'm4v',\n\t'm4p',\n\t'm4b',\n\t'f4v',\n\t'f4p',\n\t'f4b',\n\t'f4a',\n\t'mie',\n\t'asf',\n\t'ogm',\n\t'ogx',\n\t'mpc',\n\t'arrow',\n\t'shp',\n\t'aac',\n\t'mp1',\n\t'it',\n\t's3m',\n\t'xm',\n\t'skp',\n\t'avif',\n\t'eps',\n\t'lzh',\n\t'pgp',\n\t'asar',\n\t'stl',\n\t'chm',\n\t'3mf',\n\t'zst',\n\t'jxl',\n\t'vcf',\n\t'jls',\n\t'pst',\n\t'dwg',\n\t'parquet',\n\t'class',\n\t'arj',\n\t'cpio',\n\t'ace',\n\t'avro',\n\t'icc',\n\t'fbx',\n\t'vsdx',\n\t'vtt',\n\t'apk',\n\t'drc',\n\t'lz4',\n\t'potx',\n\t'xltx',\n\t'dotx',\n\t'xltm',\n\t'ott',\n\t'ots',\n\t'otp',\n\t'odg',\n\t'otg',\n\t'xlsm',\n\t'docm',\n\t'dotm',\n\t'potm',\n\t'pptm',\n\t'jar',\n\t'jmp',\n\t'rm',\n\t'sav',\n\t'ppsm',\n\t'ppsx',\n\t'tar.gz',\n\t'reg',\n\t'dat',\n];\n\nexport const mimeTypes = [\n\t'image/jpeg',\n\t'image/png',\n\t'image/gif',\n\t'image/webp',\n\t'image/flif',\n\t'image/x-xcf',\n\t'image/x-canon-cr2',\n\t'image/x-canon-cr3',\n\t'image/tiff',\n\t'image/bmp',\n\t'image/vnd.ms-photo',\n\t'image/vnd.adobe.photoshop',\n\t'application/x-indesign',\n\t'application/epub+zip',\n\t'application/x-xpinstall',\n\t'application/vnd.ms-powerpoint.slideshow.macroenabled.12',\n\t'application/vnd.oasis.opendocument.text',\n\t'application/vnd.oasis.opendocument.spreadsheet',\n\t'application/vnd.oasis.opendocument.presentation',\n\t'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n\t'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n\t'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n\t'application/vnd.openxmlformats-officedocument.presentationml.slideshow',\n\t'application/zip',\n\t'application/x-tar',\n\t'application/x-rar-compressed',\n\t'application/gzip',\n\t'application/x-bzip2',\n\t'application/x-7z-compressed',\n\t'application/x-apple-diskimage',\n\t'application/vnd.apache.arrow.file',\n\t'video/mp4',\n\t'audio/midi',\n\t'video/matroska',\n\t'video/webm',\n\t'video/quicktime',\n\t'video/vnd.avi',\n\t'audio/wav',\n\t'audio/qcelp',\n\t'audio/x-ms-asf',\n\t'video/x-ms-asf',\n\t'application/vnd.ms-asf',\n\t'video/mpeg',\n\t'video/3gpp',\n\t'audio/mpeg',\n\t'audio/mp4', // RFC 4337\n\t'video/ogg',\n\t'audio/ogg',\n\t'audio/ogg; codecs=opus',\n\t'application/ogg',\n\t'audio/flac',\n\t'audio/ape',\n\t'audio/wavpack',\n\t'audio/amr',\n\t'application/pdf',\n\t'application/x-elf',\n\t'application/x-mach-binary',\n\t'application/x-msdownload',\n\t'application/x-shockwave-flash',\n\t'application/rtf',\n\t'application/wasm',\n\t'font/woff',\n\t'font/woff2',\n\t'application/vnd.ms-fontobject',\n\t'font/ttf',\n\t'font/otf',\n\t'font/collection',\n\t'image/x-icon',\n\t'video/x-flv',\n\t'application/postscript',\n\t'application/eps',\n\t'application/x-xz',\n\t'application/x-sqlite3',\n\t'application/x-nintendo-nes-rom',\n\t'application/x-google-chrome-extension',\n\t'application/vnd.ms-cab-compressed',\n\t'application/x-deb',\n\t'application/x-unix-archive',\n\t'application/x-rpm',\n\t'application/x-compress',\n\t'application/x-lzip',\n\t'application/x-cfb',\n\t'application/x-mie',\n\t'application/mxf',\n\t'video/mp2t',\n\t'application/x-blender',\n\t'image/bpg',\n\t'image/j2c',\n\t'image/jp2',\n\t'image/jpx',\n\t'image/jpm',\n\t'image/mj2',\n\t'audio/aiff',\n\t'application/xml',\n\t'application/x-mobipocket-ebook',\n\t'image/heif',\n\t'image/heif-sequence',\n\t'image/heic',\n\t'image/heic-sequence',\n\t'image/icns',\n\t'image/ktx',\n\t'application/dicom',\n\t'audio/x-musepack',\n\t'text/calendar',\n\t'text/vcard',\n\t'text/vtt',\n\t'model/gltf-binary',\n\t'application/vnd.tcpdump.pcap',\n\t'audio/x-dsf', // Non-standard\n\t'application/x.ms.shortcut', // Invented by us\n\t'application/x.apple.alias', // Invented by us\n\t'audio/x-voc',\n\t'audio/vnd.dolby.dd-raw',\n\t'audio/x-m4a',\n\t'image/apng',\n\t'image/x-olympus-orf',\n\t'image/x-sony-arw',\n\t'image/x-adobe-dng',\n\t'image/x-nikon-nef',\n\t'image/x-panasonic-rw2',\n\t'image/x-fujifilm-raf',\n\t'video/x-m4v',\n\t'video/3gpp2',\n\t'application/x-esri-shape',\n\t'audio/aac',\n\t'audio/x-it',\n\t'audio/x-s3m',\n\t'audio/x-xm',\n\t'video/MP1S',\n\t'video/MP2P',\n\t'application/vnd.sketchup.skp',\n\t'image/avif',\n\t'application/x-lzh-compressed',\n\t'application/pgp-encrypted',\n\t'application/x-asar',\n\t'model/stl',\n\t'application/vnd.ms-htmlhelp',\n\t'model/3mf',\n\t'image/jxl',\n\t'application/zstd',\n\t'image/jls',\n\t'application/vnd.ms-outlook',\n\t'image/vnd.dwg',\n\t'application/vnd.apache.parquet',\n\t'application/java-vm',\n\t'application/x-arj',\n\t'application/x-cpio',\n\t'application/x-ace-compressed',\n\t'application/avro',\n\t'application/vnd.iccprofile',\n\t'application/x.autodesk.fbx', // Invented by us\n\t'application/vnd.visio',\n\t'application/vnd.android.package-archive',\n\t'application/vnd.google.draco', // Invented by us\n\t'application/x-lz4', // Invented by us\n\t'application/vnd.openxmlformats-officedocument.presentationml.template',\n\t'application/vnd.openxmlformats-officedocument.spreadsheetml.template',\n\t'application/vnd.openxmlformats-officedocument.wordprocessingml.template',\n\t'application/vnd.ms-excel.template.macroenabled.12',\n\t'application/vnd.oasis.opendocument.text-template',\n\t'application/vnd.oasis.opendocument.spreadsheet-template',\n\t'application/vnd.oasis.opendocument.presentation-template',\n\t'application/vnd.oasis.opendocument.graphics',\n\t'application/vnd.oasis.opendocument.graphics-template',\n\t'application/vnd.ms-excel.sheet.macroenabled.12',\n\t'application/vnd.ms-word.document.macroenabled.12',\n\t'application/vnd.ms-word.template.macroenabled.12',\n\t'application/vnd.ms-powerpoint.template.macroenabled.12',\n\t'application/vnd.ms-powerpoint.presentation.macroenabled.12',\n\t'application/java-archive',\n\t'application/vnd.rn-realmedia',\n\t'application/x-spss-sav',\n\t'application/x-ms-regedit',\n\t'application/x-ft-windows-registry-hive',\n\t'application/x-jmp-data',\n];\n","/**\nPrimary entry point, Node.js specific entry point is index.js\n*/\n\nimport * as Token from 'token-types';\nimport * as strtok3 from 'strtok3/core';\nimport {ZipHandler, GzipHandler} from '@tokenizer/inflate';\nimport {getUintBE} from 'uint8array-extras';\nimport {\n\tstringToBytes,\n\ttarHeaderChecksumMatches,\n\tuint32SyncSafeToken,\n} from './util.js';\nimport {extensions, mimeTypes} from './supported.js';\n\nexport const reasonableDetectionSizeInBytes = 4100; // A fair amount of file-types are detectable within this range.\n// Keep defensive limits small enough to avoid accidental memory spikes from untrusted inputs.\nconst maximumMpegOffsetTolerance = reasonableDetectionSizeInBytes - 2;\nconst maximumZipEntrySizeInBytes = 1024 * 1024;\nconst maximumUntrustedSkipSizeInBytes = 16 * 1024 * 1024;\nconst maximumNestedGzipDetectionSizeInBytes = maximumUntrustedSkipSizeInBytes;\nconst maximumId3HeaderSizeInBytes = maximumUntrustedSkipSizeInBytes;\nconst maximumEbmlDocumentTypeSizeInBytes = 64;\nconst maximumEbmlElementPayloadSizeInBytes = maximumUntrustedSkipSizeInBytes;\nconst maximumEbmlElementCount = 256;\nconst maximumPngChunkSizeInBytes = maximumUntrustedSkipSizeInBytes;\nconst maximumTiffIfdOffsetInBytes = maximumUntrustedSkipSizeInBytes;\nconst recoverableZipErrorMessages = new Set([\n\t'Unexpected signature',\n\t'Encrypted ZIP',\n\t'Expected Central-File-Header signature',\n]);\nconst recoverableZipErrorMessagePrefixes = [\n\t'Unsupported ZIP compression method:',\n\t'ZIP entry decompressed data exceeds ',\n];\nconst recoverableZipErrorCodes = new Set([\n\t'Z_BUF_ERROR',\n\t'Z_DATA_ERROR',\n\t'ERR_INVALID_STATE',\n]);\n\nclass ParserHardLimitError extends Error {}\n\nfunction getSafeBound(value, maximum, reason) {\n\tif (\n\t\t!Number.isFinite(value)\n\t\t|| value < 0\n\t\t|| value > maximum\n\t) {\n\t\tthrow new ParserHardLimitError(`${reason} has invalid size ${value} (maximum ${maximum} bytes)`);\n\t}\n\n\treturn value;\n}\n\nasync function safeIgnore(tokenizer, length, {maximumLength = maximumUntrustedSkipSizeInBytes, reason = 'skip'} = {}) {\n\tconst safeLength = getSafeBound(length, maximumLength, reason);\n\tawait tokenizer.ignore(safeLength);\n}\n\nasync function safeReadBuffer(tokenizer, buffer, options, {maximumLength = buffer.length, reason = 'read'} = {}) {\n\tconst length = options?.length ?? buffer.length;\n\tconst safeLength = getSafeBound(length, maximumLength, reason);\n\treturn tokenizer.readBuffer(buffer, {\n\t\t...options,\n\t\tlength: safeLength,\n\t});\n}\n\nasync function decompressDeflateRawWithLimit(data, {maximumLength = maximumZipEntrySizeInBytes} = {}) {\n\tconst input = new ReadableStream({\n\t\tstart(controller) {\n\t\t\tcontroller.enqueue(data);\n\t\t\tcontroller.close();\n\t\t},\n\t});\n\tconst output = input.pipeThrough(new DecompressionStream('deflate-raw'));\n\tconst reader = output.getReader();\n\tconst chunks = [];\n\tlet totalLength = 0;\n\n\ttry {\n\t\tfor (;;) {\n\t\t\tconst {done, value} = await reader.read();\n\t\t\tif (done) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\ttotalLength += value.length;\n\t\t\tif (totalLength > maximumLength) {\n\t\t\t\tawait reader.cancel();\n\t\t\t\tthrow new Error(`ZIP entry decompressed data exceeds ${maximumLength} bytes`);\n\t\t\t}\n\n\t\t\tchunks.push(value);\n\t\t}\n\t} finally {\n\t\treader.releaseLock();\n\t}\n\n\tconst uncompressedData = new Uint8Array(totalLength);\n\tlet offset = 0;\n\tfor (const chunk of chunks) {\n\t\tuncompressedData.set(chunk, offset);\n\t\toffset += chunk.length;\n\t}\n\n\treturn uncompressedData;\n}\n\n// Override the default inflate to enforce decompression size limits, since @tokenizer/inflate does not expose a configuration hook for this.\nZipHandler.prototype.inflate = async function (zipHeader, fileData, callback) {\n\tif (zipHeader.compressedMethod === 0) {\n\t\treturn callback(fileData);\n\t}\n\n\tif (zipHeader.compressedMethod !== 8) {\n\t\tthrow new Error(`Unsupported ZIP compression method: ${zipHeader.compressedMethod}`);\n\t}\n\n\tconst maximumLength = hasUnknownFileSize(this.tokenizer) ? maximumZipEntrySizeInBytes : Number.MAX_SAFE_INTEGER;\n\tconst uncompressedData = await decompressDeflateRawWithLimit(fileData, {maximumLength});\n\treturn callback(uncompressedData);\n};\n\nfunction createByteLimitedReadableStream(stream, maximumBytes) {\n\tconst reader = stream.getReader();\n\tlet emittedBytes = 0;\n\tlet sourceDone = false;\n\tlet sourceCanceled = false;\n\n\tconst cancelSource = async reason => {\n\t\tif (\n\t\t\tsourceDone\n\t\t\t|| sourceCanceled\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tsourceCanceled = true;\n\t\tawait reader.cancel(reason);\n\t};\n\n\treturn new ReadableStream({\n\t\tasync pull(controller) {\n\t\t\tif (emittedBytes >= maximumBytes) {\n\t\t\t\tcontroller.close();\n\t\t\t\tawait cancelSource();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst {done, value} = await reader.read();\n\t\t\tif (\n\t\t\t\tdone\n\t\t\t\t|| !value\n\t\t\t) {\n\t\t\t\tsourceDone = true;\n\t\t\t\tcontroller.close();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst remainingBytes = maximumBytes - emittedBytes;\n\t\t\tif (value.length > remainingBytes) {\n\t\t\t\tcontroller.enqueue(value.subarray(0, remainingBytes));\n\t\t\t\temittedBytes += remainingBytes;\n\t\t\t\tcontroller.close();\n\t\t\t\tawait cancelSource();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcontroller.enqueue(value);\n\t\t\temittedBytes += value.length;\n\t\t},\n\t\tasync cancel(reason) {\n\t\t\tawait cancelSource(reason);\n\t\t},\n\t});\n}\n\nexport async function fileTypeFromStream(stream, options) {\n\treturn new FileTypeParser(options).fromStream(stream);\n}\n\nexport async function fileTypeFromBuffer(input, options) {\n\treturn new FileTypeParser(options).fromBuffer(input);\n}\n\nexport async function fileTypeFromBlob(blob, options) {\n\treturn new FileTypeParser(options).fromBlob(blob);\n}\n\nfunction getFileTypeFromMimeType(mimeType) {\n\tmimeType = mimeType.toLowerCase();\n\tswitch (mimeType) {\n\t\tcase 'application/epub+zip':\n\t\t\treturn {\n\t\t\t\text: 'epub',\n\t\t\t\tmime: mimeType,\n\t\t\t};\n\t\tcase 'application/vnd.oasis.opendocument.text':\n\t\t\treturn {\n\t\t\t\text: 'odt',\n\t\t\t\tmime: mimeType,\n\t\t\t};\n\t\tcase 'application/vnd.oasis.opendocument.text-template':\n\t\t\treturn {\n\t\t\t\text: 'ott',\n\t\t\t\tmime: mimeType,\n\t\t\t};\n\t\tcase 'application/vnd.oasis.opendocument.spreadsheet':\n\t\t\treturn {\n\t\t\t\text: 'ods',\n\t\t\t\tmime: mimeType,\n\t\t\t};\n\t\tcase 'application/vnd.oasis.opendocument.spreadsheet-template':\n\t\t\treturn {\n\t\t\t\text: 'ots',\n\t\t\t\tmime: mimeType,\n\t\t\t};\n\t\tcase 'application/vnd.oasis.opendocument.presentation':\n\t\t\treturn {\n\t\t\t\text: 'odp',\n\t\t\t\tmime: mimeType,\n\t\t\t};\n\t\tcase 'application/vnd.oasis.opendocument.presentation-template':\n\t\t\treturn {\n\t\t\t\text: 'otp',\n\t\t\t\tmime: mimeType,\n\t\t\t};\n\t\tcase 'application/vnd.oasis.opendocument.graphics':\n\t\t\treturn {\n\t\t\t\text: 'odg',\n\t\t\t\tmime: mimeType,\n\t\t\t};\n\t\tcase 'application/vnd.oasis.opendocument.graphics-template':\n\t\t\treturn {\n\t\t\t\text: 'otg',\n\t\t\t\tmime: mimeType,\n\t\t\t};\n\t\tcase 'application/vnd.openxmlformats-officedocument.presentationml.slideshow':\n\t\t\treturn {\n\t\t\t\text: 'ppsx',\n\t\t\t\tmime: mimeType,\n\t\t\t};\n\t\tcase 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet':\n\t\t\treturn {\n\t\t\t\text: 'xlsx',\n\t\t\t\tmime: mimeType,\n\t\t\t};\n\t\tcase 'application/vnd.ms-excel.sheet.macroenabled':\n\t\t\treturn {\n\t\t\t\text: 'xlsm',\n\t\t\t\tmime: 'application/vnd.ms-excel.sheet.macroenabled.12',\n\t\t\t};\n\t\tcase 'application/vnd.openxmlformats-officedocument.spreadsheetml.template':\n\t\t\treturn {\n\t\t\t\text: 'xltx',\n\t\t\t\tmime: mimeType,\n\t\t\t};\n\t\tcase 'application/vnd.ms-excel.template.macroenabled':\n\t\t\treturn {\n\t\t\t\text: 'xltm',\n\t\t\t\tmime: 'application/vnd.ms-excel.template.macroenabled.12',\n\t\t\t};\n\t\tcase 'application/vnd.ms-powerpoint.slideshow.macroenabled':\n\t\t\treturn {\n\t\t\t\text: 'ppsm',\n\t\t\t\tmime: 'application/vnd.ms-powerpoint.slideshow.macroenabled.12',\n\t\t\t};\n\t\tcase 'application/vnd.openxmlformats-officedocument.wordprocessingml.document':\n\t\t\treturn {\n\t\t\t\text: 'docx',\n\t\t\t\tmime: mimeType,\n\t\t\t};\n\t\tcase 'application/vnd.ms-word.document.macroenabled':\n\t\t\treturn {\n\t\t\t\text: 'docm',\n\t\t\t\tmime: 'application/vnd.ms-word.document.macroenabled.12',\n\t\t\t};\n\t\tcase 'application/vnd.openxmlformats-officedocument.wordprocessingml.template':\n\t\t\treturn {\n\t\t\t\text: 'dotx',\n\t\t\t\tmime: mimeType,\n\t\t\t};\n\t\tcase 'application/vnd.ms-word.template.macroenabledtemplate':\n\t\t\treturn {\n\t\t\t\text: 'dotm',\n\t\t\t\tmime: 'application/vnd.ms-word.template.macroenabled.12',\n\t\t\t};\n\t\tcase 'application/vnd.openxmlformats-officedocument.presentationml.template':\n\t\t\treturn {\n\t\t\t\text: 'potx',\n\t\t\t\tmime: mimeType,\n\t\t\t};\n\t\tcase 'application/vnd.ms-powerpoint.template.macroenabled':\n\t\t\treturn {\n\t\t\t\text: 'potm',\n\t\t\t\tmime: 'application/vnd.ms-powerpoint.template.macroenabled.12',\n\t\t\t};\n\t\tcase 'application/vnd.openxmlformats-officedocument.presentationml.presentation':\n\t\t\treturn {\n\t\t\t\text: 'pptx',\n\t\t\t\tmime: mimeType,\n\t\t\t};\n\t\tcase 'application/vnd.ms-powerpoint.presentation.macroenabled':\n\t\t\treturn {\n\t\t\t\text: 'pptm',\n\t\t\t\tmime: 'application/vnd.ms-powerpoint.presentation.macroenabled.12',\n\t\t\t};\n\t\tcase 'application/vnd.ms-visio.drawing':\n\t\t\treturn {\n\t\t\t\text: 'vsdx',\n\t\t\t\tmime: 'application/vnd.visio',\n\t\t\t};\n\t\tcase 'application/vnd.ms-package.3dmanufacturing-3dmodel+xml':\n\t\t\treturn {\n\t\t\t\text: '3mf',\n\t\t\t\tmime: 'model/3mf',\n\t\t\t};\n\t\tdefault:\n\t}\n}\n\nfunction _check(buffer, headers, options) {\n\toptions = {\n\t\toffset: 0,\n\t\t...options,\n\t};\n\n\tfor (const [index, header] of headers.entries()) {\n\t\t// If a bitmask is set\n\t\tif (options.mask) {\n\t\t\t// If header doesn't equal `buf` with bits masked off\n\t\t\tif (header !== (options.mask[index] & buffer[index + options.offset])) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} else if (header !== buffer[index + options.offset]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\nexport function normalizeSampleSize(sampleSize) {\n\t// Accept odd caller input, but preserve valid caller-requested probe depth.\n\tif (!Number.isFinite(sampleSize)) {\n\t\treturn reasonableDetectionSizeInBytes;\n\t}\n\n\treturn Math.max(1, Math.trunc(sampleSize));\n}\n\nfunction normalizeMpegOffsetTolerance(mpegOffsetTolerance) {\n\t// This value controls scan depth and therefore worst-case CPU work.\n\tif (!Number.isFinite(mpegOffsetTolerance)) {\n\t\treturn 0;\n\t}\n\n\treturn Math.max(0, Math.min(maximumMpegOffsetTolerance, Math.trunc(mpegOffsetTolerance)));\n}\n\nfunction getKnownFileSizeOrMaximum(fileSize) {\n\tif (!Number.isFinite(fileSize)) {\n\t\treturn Number.MAX_SAFE_INTEGER;\n\t}\n\n\treturn Math.max(0, fileSize);\n}\n\nfunction hasUnknownFileSize(tokenizer) {\n\tconst fileSize = tokenizer.fileInfo.size;\n\treturn (\n\t\t!Number.isFinite(fileSize)\n\t\t|| fileSize === Number.MAX_SAFE_INTEGER\n\t);\n}\n\nfunction hasExceededUnknownSizeScanBudget(tokenizer, startOffset, maximumBytes) {\n\treturn (\n\t\thasUnknownFileSize(tokenizer)\n\t\t&& tokenizer.position - startOffset > maximumBytes\n\t);\n}\n\nfunction isRecoverableZipError(error) {\n\tif (error instanceof strtok3.EndOfStreamError) {\n\t\treturn true;\n\t}\n\n\tif (error instanceof ParserHardLimitError) {\n\t\treturn true;\n\t}\n\n\tif (!(error instanceof Error)) {\n\t\treturn false;\n\t}\n\n\tif (recoverableZipErrorMessages.has(error.message)) {\n\t\treturn true;\n\t}\n\n\tif (\n\t\terror instanceof TypeError\n\t\t&& recoverableZipErrorCodes.has(error.code)\n\t) {\n\t\treturn true;\n\t}\n\n\tfor (const prefix of recoverableZipErrorMessagePrefixes) {\n\t\tif (error.message.startsWith(prefix)) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n}\n\nfunction canReadZipEntryForDetection(zipHeader, maximumSize = maximumZipEntrySizeInBytes) {\n\tconst sizes = [zipHeader.compressedSize, zipHeader.uncompressedSize];\n\tfor (const size of sizes) {\n\t\tif (\n\t\t\t!Number.isFinite(size)\n\t\t\t|| size < 0\n\t\t\t|| size > maximumSize\n\t\t) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\nfunction createOpenXmlZipDetectionState() {\n\treturn {\n\t\thasContentTypesEntry: false,\n\t\thasParsedContentTypesEntry: false,\n\t\tisParsingContentTypes: false,\n\t\thasUnparseableContentTypes: false,\n\t\thasWordDirectory: false,\n\t\thasPresentationDirectory: false,\n\t\thasSpreadsheetDirectory: false,\n\t\thasThreeDimensionalModelEntry: false,\n\t};\n}\n\nfunction updateOpenXmlZipDetectionStateFromFilename(openXmlState, filename) {\n\tif (filename.startsWith('word/')) {\n\t\topenXmlState.hasWordDirectory = true;\n\t}\n\n\tif (filename.startsWith('ppt/')) {\n\t\topenXmlState.hasPresentationDirectory = true;\n\t}\n\n\tif (filename.startsWith('xl/')) {\n\t\topenXmlState.hasSpreadsheetDirectory = true;\n\t}\n\n\tif (\n\t\tfilename.startsWith('3D/')\n\t\t&& filename.endsWith('.model')\n\t) {\n\t\topenXmlState.hasThreeDimensionalModelEntry = true;\n\t}\n}\n\nfunction getOpenXmlFileTypeFromZipEntries(openXmlState) {\n\t// Only use directory-name heuristic when [Content_Types].xml was present in the archive\n\t// but its handler was skipped (not invoked, not currently running, and not already resolved).\n\t// This avoids guessing from directory names when content-type parsing already gave a definitive answer or failed.\n\tif (\n\t\t!openXmlState.hasContentTypesEntry\n\t\t|| openXmlState.hasUnparseableContentTypes\n\t\t|| openXmlState.isParsingContentTypes\n\t\t|| openXmlState.hasParsedContentTypesEntry\n\t) {\n\t\treturn;\n\t}\n\n\tif (openXmlState.hasWordDirectory) {\n\t\treturn {\n\t\t\text: 'docx',\n\t\t\tmime: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n\t\t};\n\t}\n\n\tif (openXmlState.hasPresentationDirectory) {\n\t\treturn {\n\t\t\text: 'pptx',\n\t\t\tmime: 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n\t\t};\n\t}\n\n\tif (openXmlState.hasSpreadsheetDirectory) {\n\t\treturn {\n\t\t\text: 'xlsx',\n\t\t\tmime: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n\t\t};\n\t}\n\n\tif (openXmlState.hasThreeDimensionalModelEntry) {\n\t\treturn {\n\t\t\text: '3mf',\n\t\t\tmime: 'model/3mf',\n\t\t};\n\t}\n}\n\nfunction getOpenXmlMimeTypeFromContentTypesXml(xmlContent) {\n\t// We only need the `ContentType=\"...main+xml\"` value, so a small string scan is enough and avoids full XML parsing.\n\tconst endPosition = xmlContent.indexOf('.main+xml\"');\n\tif (endPosition === -1) {\n\t\tconst mimeType = 'application/vnd.ms-package.3dmanufacturing-3dmodel+xml';\n\t\tif (xmlContent.includes(`ContentType=\"${mimeType}\"`)) {\n\t\t\treturn mimeType;\n\t\t}\n\n\t\treturn;\n\t}\n\n\tconst truncatedContent = xmlContent.slice(0, endPosition);\n\tconst firstQuotePosition = truncatedContent.lastIndexOf('\"');\n\t// If no quote is found, `lastIndexOf` returns -1 and this intentionally falls back to the full truncated prefix.\n\treturn truncatedContent.slice(firstQuotePosition + 1);\n}\n\nexport async function fileTypeFromTokenizer(tokenizer, options) {\n\treturn new FileTypeParser(options).fromTokenizer(tokenizer);\n}\n\nexport async function fileTypeStream(webStream, options) {\n\treturn new FileTypeParser(options).toDetectionStream(webStream, options);\n}\n\nexport class FileTypeParser {\n\tconstructor(options) {\n\t\tconst normalizedMpegOffsetTolerance = normalizeMpegOffsetTolerance(options?.mpegOffsetTolerance);\n\t\tthis.options = {\n\t\t\t...options,\n\t\t\tmpegOffsetTolerance: normalizedMpegOffsetTolerance,\n\t\t};\n\n\t\tthis.detectors = [...(this.options.customDetectors ?? []),\n\t\t\t{id: 'core', detect: this.detectConfident},\n\t\t\t{id: 'core.imprecise', detect: this.detectImprecise}];\n\t\tthis.tokenizerOptions = {\n\t\t\tabortSignal: this.options.signal,\n\t\t};\n\t}\n\n\tasync fromTokenizer(tokenizer) {\n\t\tconst initialPosition = tokenizer.position;\n\t\t// Iterate through all file-type detectors\n\t\tfor (const detector of this.detectors) {\n\t\t\tlet fileType;\n\t\t\ttry {\n\t\t\t\tfileType = await detector.detect(tokenizer);\n\t\t\t} catch (error) {\n\t\t\t\tif (error instanceof strtok3.EndOfStreamError) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (error instanceof ParserHardLimitError) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\tif (fileType) {\n\t\t\t\treturn fileType;\n\t\t\t}\n\n\t\t\tif (initialPosition !== tokenizer.position) {\n\t\t\t\treturn undefined; // Cannot proceed scanning of the tokenizer is at an arbitrary position\n\t\t\t}\n\t\t}\n\t}\n\n\tasync fromBuffer(input) {\n\t\tif (!(input instanceof Uint8Array || input instanceof ArrayBuffer)) {\n\t\t\tthrow new TypeError(`Expected the \\`input\\` argument to be of type \\`Uint8Array\\` or \\`ArrayBuffer\\`, got \\`${typeof input}\\``);\n\t\t}\n\n\t\tconst buffer = input instanceof Uint8Array ? input : new Uint8Array(input);\n\n\t\tif (!(buffer?.length > 1)) {\n\t\t\treturn;\n\t\t}\n\n\t\treturn this.fromTokenizer(strtok3.fromBuffer(buffer, this.tokenizerOptions));\n\t}\n\n\tasync fromBlob(blob) {\n\t\tconst tokenizer = strtok3.fromBlob(blob, this.tokenizerOptions);\n\t\ttry {\n\t\t\treturn await this.fromTokenizer(tokenizer);\n\t\t} finally {\n\t\t\tawait tokenizer.close();\n\t\t}\n\t}\n\n\tasync fromStream(stream) {\n\t\tconst tokenizer = strtok3.fromWebStream(stream, this.tokenizerOptions);\n\t\ttry {\n\t\t\treturn await this.fromTokenizer(tokenizer);\n\t\t} finally {\n\t\t\tawait tokenizer.close();\n\t\t}\n\t}\n\n\tasync toDetectionStream(stream, options) {\n\t\tconst sampleSize = normalizeSampleSize(options?.sampleSize ?? reasonableDetectionSizeInBytes);\n\t\tlet detectedFileType;\n\t\tlet firstChunk;\n\n\t\tconst reader = stream.getReader({mode: 'byob'});\n\t\ttry {\n\t\t\t// Read the first chunk from the stream\n\t\t\tconst {value: chunk, done} = await reader.read(new Uint8Array(sampleSize));\n\t\t\tfirstChunk = chunk;\n\t\t\tif (!done && chunk) {\n\t\t\t\ttry {\n\t\t\t\t\t// Attempt to detect the file type from the chunk\n\t\t\t\t\tdetectedFileType = await this.fromBuffer(chunk.subarray(0, sampleSize));\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (!(error instanceof strtok3.EndOfStreamError)) {\n\t\t\t\t\t\tthrow error; // Re-throw non-EndOfStreamError\n\t\t\t\t\t}\n\n\t\t\t\t\tdetectedFileType = undefined;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfirstChunk = chunk;\n\t\t} finally {\n\t\t\treader.releaseLock(); // Ensure the reader is released\n\t\t}\n\n\t\t// Create a new ReadableStream to manage locking issues\n\t\tconst transformStream = new TransformStream({\n\t\t\tasync start(controller) {\n\t\t\t\tcontroller.enqueue(firstChunk); // Enqueue the initial chunk\n\t\t\t},\n\t\t\ttransform(chunk, controller) {\n\t\t\t\t// Pass through the chunks without modification\n\t\t\t\tcontroller.enqueue(chunk);\n\t\t\t},\n\t\t});\n\n\t\tconst newStream = stream.pipeThrough(transformStream);\n\t\tnewStream.fileType = detectedFileType;\n\n\t\treturn newStream;\n\t}\n\n\tcheck(header, options) {\n\t\treturn _check(this.buffer, header, options);\n\t}\n\n\tcheckString(header, options) {\n\t\treturn this.check(stringToBytes(header, options?.encoding), options);\n\t}\n\n\t// Detections with a high degree of certainty in identifying the correct file type\n\tdetectConfident = async tokenizer => {\n\t\tthis.buffer = new Uint8Array(reasonableDetectionSizeInBytes);\n\n\t\t// Keep reading until EOF if the file size is unknown.\n\t\tif (tokenizer.fileInfo.size === undefined) {\n\t\t\ttokenizer.fileInfo.size = Number.MAX_SAFE_INTEGER;\n\t\t}\n\n\t\tthis.tokenizer = tokenizer;\n\n\t\tawait tokenizer.peekBuffer(this.buffer, {length: 32, mayBeLess: true});\n\n\t\t// -- 2-byte signatures --\n\n\t\tif (this.check([0x42, 0x4D])) {\n\t\t\treturn {\n\t\t\t\text: 'bmp',\n\t\t\t\tmime: 'image/bmp',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x0B, 0x77])) {\n\t\t\treturn {\n\t\t\t\text: 'ac3',\n\t\t\t\tmime: 'audio/vnd.dolby.dd-raw',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x78, 0x01])) {\n\t\t\treturn {\n\t\t\t\text: 'dmg',\n\t\t\t\tmime: 'application/x-apple-diskimage',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x4D, 0x5A])) {\n\t\t\treturn {\n\t\t\t\text: 'exe',\n\t\t\t\tmime: 'application/x-msdownload',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x25, 0x21])) {\n\t\t\tawait tokenizer.peekBuffer(this.buffer, {length: 24, mayBeLess: true});\n\n\t\t\tif (\n\t\t\t\tthis.checkString('PS-Adobe-', {offset: 2})\n\t\t\t\t&& this.checkString(' EPSF-', {offset: 14})\n\t\t\t) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'eps',\n\t\t\t\t\tmime: 'application/eps',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\text: 'ps',\n\t\t\t\tmime: 'application/postscript',\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\tthis.check([0x1F, 0xA0])\n\t\t\t|| this.check([0x1F, 0x9D])\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'Z',\n\t\t\t\tmime: 'application/x-compress',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0xC7, 0x71])) {\n\t\t\treturn {\n\t\t\t\text: 'cpio',\n\t\t\t\tmime: 'application/x-cpio',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x60, 0xEA])) {\n\t\t\treturn {\n\t\t\t\text: 'arj',\n\t\t\t\tmime: 'application/x-arj',\n\t\t\t};\n\t\t}\n\n\t\t// -- 3-byte signatures --\n\n\t\tif (this.check([0xEF, 0xBB, 0xBF])) { // UTF-8-BOM\n\t\t\t// Strip off UTF-8-BOM\n\t\t\tawait this.tokenizer.ignore(3);\n\t\t\treturn this.detectConfident(tokenizer);\n\t\t}\n\n\t\tif (this.check([0x47, 0x49, 0x46])) {\n\t\t\treturn {\n\t\t\t\text: 'gif',\n\t\t\t\tmime: 'image/gif',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x49, 0x49, 0xBC])) {\n\t\t\treturn {\n\t\t\t\text: 'jxr',\n\t\t\t\tmime: 'image/vnd.ms-photo',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x1F, 0x8B, 0x8])) {\n\t\t\tconst gzipHandler = new GzipHandler(tokenizer);\n\t\t\tconst limitedInflatedStream = createByteLimitedReadableStream(gzipHandler.inflate(), maximumNestedGzipDetectionSizeInBytes);\n\t\t\tlet compressedFileType;\n\t\t\ttry {\n\t\t\t\tcompressedFileType = await this.fromStream(limitedInflatedStream);\n\t\t\t} catch (error) {\n\t\t\t\tif (error?.name === 'AbortError') {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\n\t\t\t\t// Decompression or inner-detection failures are expected for non-tar gzip files.\n\t\t\t}\n\n\t\t\t// We only need enough inflated bytes to confidently decide whether this is tar.gz.\n\t\t\tif (compressedFileType?.ext === 'tar') {\n\t\t\t\treturn {\n\t\t\t\t\text: 'tar.gz',\n\t\t\t\t\tmime: 'application/gzip',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\text: 'gz',\n\t\t\t\tmime: 'application/gzip',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x42, 0x5A, 0x68])) {\n\t\t\treturn {\n\t\t\t\text: 'bz2',\n\t\t\t\tmime: 'application/x-bzip2',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('ID3')) {\n\t\t\tawait safeIgnore(tokenizer, 6, {\n\t\t\t\tmaximumLength: 6,\n\t\t\t\treason: 'ID3 header prefix',\n\t\t\t}); // Skip ID3 header until the header size\n\t\t\tconst id3HeaderLength = await tokenizer.readToken(uint32SyncSafeToken);\n\t\t\tconst isUnknownFileSize = hasUnknownFileSize(tokenizer);\n\t\t\tif (\n\t\t\t\t!Number.isFinite(id3HeaderLength)\n\t\t\t\t\t|| id3HeaderLength < 0\n\t\t\t\t// Keep ID3 probing bounded for unknown-size streams to avoid attacker-controlled large skips.\n\t\t\t\t|| (\n\t\t\t\t\tisUnknownFileSize\n\t\t\t\t\t&& id3HeaderLength > maximumId3HeaderSizeInBytes\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (tokenizer.position + id3HeaderLength > tokenizer.fileInfo.size) {\n\t\t\t\tif (isUnknownFileSize) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\text: 'mp3',\n\t\t\t\t\tmime: 'audio/mpeg',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tawait safeIgnore(tokenizer, id3HeaderLength, {\n\t\t\t\t\tmaximumLength: isUnknownFileSize ? maximumId3HeaderSizeInBytes : tokenizer.fileInfo.size,\n\t\t\t\t\treason: 'ID3 payload',\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tif (error instanceof strtok3.EndOfStreamError) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\treturn this.fromTokenizer(tokenizer); // Skip ID3 header, recursion\n\t\t}\n\n\t\t// Musepack, SV7\n\t\tif (this.checkString('MP+')) {\n\t\t\treturn {\n\t\t\t\text: 'mpc',\n\t\t\t\tmime: 'audio/x-musepack',\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\t(this.buffer[0] === 0x43 || this.buffer[0] === 0x46)\n\t\t\t&& this.check([0x57, 0x53], {offset: 1})\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'swf',\n\t\t\t\tmime: 'application/x-shockwave-flash',\n\t\t\t};\n\t\t}\n\n\t\t// -- 4-byte signatures --\n\n\t\t// Requires a sample size of 4 bytes\n\t\tif (this.check([0xFF, 0xD8, 0xFF])) {\n\t\t\tif (this.check([0xF7], {offset: 3})) { // JPG7/SOF55, indicating a ISO/IEC 14495 / JPEG-LS file\n\t\t\t\treturn {\n\t\t\t\t\text: 'jls',\n\t\t\t\t\tmime: 'image/jls',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\text: 'jpg',\n\t\t\t\tmime: 'image/jpeg',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x4F, 0x62, 0x6A, 0x01])) {\n\t\t\treturn {\n\t\t\t\text: 'avro',\n\t\t\t\tmime: 'application/avro',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('FLIF')) {\n\t\t\treturn {\n\t\t\t\text: 'flif',\n\t\t\t\tmime: 'image/flif',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('8BPS')) {\n\t\t\treturn {\n\t\t\t\text: 'psd',\n\t\t\t\tmime: 'image/vnd.adobe.photoshop',\n\t\t\t};\n\t\t}\n\n\t\t// Musepack, SV8\n\t\tif (this.checkString('MPCK')) {\n\t\t\treturn {\n\t\t\t\text: 'mpc',\n\t\t\t\tmime: 'audio/x-musepack',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('FORM')) {\n\t\t\treturn {\n\t\t\t\text: 'aif',\n\t\t\t\tmime: 'audio/aiff',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('icns', {offset: 0})) {\n\t\t\treturn {\n\t\t\t\text: 'icns',\n\t\t\t\tmime: 'image/icns',\n\t\t\t};\n\t\t}\n\n\t\t// Zip-based file formats\n\t\t// Need to be before the `zip` check\n\t\tif (this.check([0x50, 0x4B, 0x3, 0x4])) { // Local file header signature\n\t\t\tlet fileType;\n\t\t\tconst openXmlState = createOpenXmlZipDetectionState();\n\n\t\t\ttry {\n\t\t\t\tawait new ZipHandler(tokenizer).unzip(zipHeader => {\n\t\t\t\t\tupdateOpenXmlZipDetectionStateFromFilename(openXmlState, zipHeader.filename);\n\n\t\t\t\t\tconst isOpenXmlContentTypesEntry = zipHeader.filename === '[Content_Types].xml';\n\t\t\t\t\tconst openXmlFileTypeFromEntries = getOpenXmlFileTypeFromZipEntries(openXmlState);\n\t\t\t\t\tif (\n\t\t\t\t\t\t!isOpenXmlContentTypesEntry\n\t\t\t\t\t\t&& openXmlFileTypeFromEntries\n\t\t\t\t\t) {\n\t\t\t\t\t\tfileType = openXmlFileTypeFromEntries;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tstop: true,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\tswitch (zipHeader.filename) {\n\t\t\t\t\t\tcase 'META-INF/mozilla.rsa':\n\t\t\t\t\t\t\tfileType = {\n\t\t\t\t\t\t\t\text: 'xpi',\n\t\t\t\t\t\t\t\tmime: 'application/x-xpinstall',\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstop: true,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\tcase 'META-INF/MANIFEST.MF':\n\t\t\t\t\t\t\tfileType = {\n\t\t\t\t\t\t\t\text: 'jar',\n\t\t\t\t\t\t\t\tmime: 'application/java-archive',\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstop: true,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\tcase 'mimetype':\n\t\t\t\t\t\t\tif (!canReadZipEntryForDetection(zipHeader)) {\n\t\t\t\t\t\t\t\treturn {};\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tasync handler(fileData) {\n\t\t\t\t\t\t\t\t\t// Use TextDecoder to decode the UTF-8 encoded data\n\t\t\t\t\t\t\t\t\tconst mimeType = new TextDecoder('utf-8').decode(fileData).trim();\n\t\t\t\t\t\t\t\t\tfileType = getFileTypeFromMimeType(mimeType);\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tstop: true,\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\tcase '[Content_Types].xml': {\n\t\t\t\t\t\t\topenXmlState.hasContentTypesEntry = true;\n\n\t\t\t\t\t\t\tconst maximumContentTypesEntrySize = hasUnknownFileSize(tokenizer) ? maximumZipEntrySizeInBytes : Number.MAX_SAFE_INTEGER;\n\t\t\t\t\t\t\tif (!canReadZipEntryForDetection(zipHeader, maximumContentTypesEntrySize)) {\n\t\t\t\t\t\t\t\topenXmlState.hasUnparseableContentTypes = true;\n\t\t\t\t\t\t\t\treturn {};\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\topenXmlState.isParsingContentTypes = true;\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tasync handler(fileData) {\n\t\t\t\t\t\t\t\t\t// Use TextDecoder to decode the UTF-8 encoded data\n\t\t\t\t\t\t\t\t\tconst xmlContent = new TextDecoder('utf-8').decode(fileData);\n\t\t\t\t\t\t\t\t\tconst mimeType = getOpenXmlMimeTypeFromContentTypesXml(xmlContent);\n\t\t\t\t\t\t\t\t\tif (mimeType) {\n\t\t\t\t\t\t\t\t\t\tfileType = getFileTypeFromMimeType(mimeType);\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\topenXmlState.hasParsedContentTypesEntry = true;\n\t\t\t\t\t\t\t\t\topenXmlState.isParsingContentTypes = false;\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tstop: true,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tif (/classes\\d*\\.dex/.test(zipHeader.filename)) {\n\t\t\t\t\t\t\t\tfileType = {\n\t\t\t\t\t\t\t\t\text: 'apk',\n\t\t\t\t\t\t\t\t\tmime: 'application/vnd.android.package-archive',\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\treturn {stop: true};\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn {};\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tif (!isRecoverableZipError(error)) {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\n\t\t\t\tif (openXmlState.isParsingContentTypes) {\n\t\t\t\t\topenXmlState.isParsingContentTypes = false;\n\t\t\t\t\topenXmlState.hasUnparseableContentTypes = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn fileType ?? getOpenXmlFileTypeFromZipEntries(openXmlState) ?? {\n\t\t\t\text: 'zip',\n\t\t\t\tmime: 'application/zip',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('OggS')) {\n\t\t\t// This is an OGG container\n\t\t\tawait tokenizer.ignore(28);\n\t\t\tconst type = new Uint8Array(8);\n\t\t\tawait tokenizer.readBuffer(type);\n\n\t\t\t// Needs to be before `ogg` check\n\t\t\tif (_check(type, [0x4F, 0x70, 0x75, 0x73, 0x48, 0x65, 0x61, 0x64])) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'opus',\n\t\t\t\t\tmime: 'audio/ogg; codecs=opus',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// If ' theora' in header.\n\t\t\tif (_check(type, [0x80, 0x74, 0x68, 0x65, 0x6F, 0x72, 0x61])) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'ogv',\n\t\t\t\t\tmime: 'video/ogg',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// If '\\x01video' in header.\n\t\t\tif (_check(type, [0x01, 0x76, 0x69, 0x64, 0x65, 0x6F, 0x00])) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'ogm',\n\t\t\t\t\tmime: 'video/ogg',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// If ' FLAC' in header https://xiph.org/flac/faq.html\n\t\t\tif (_check(type, [0x7F, 0x46, 0x4C, 0x41, 0x43])) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'oga',\n\t\t\t\t\tmime: 'audio/ogg',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// 'Speex ' in header https://en.wikipedia.org/wiki/Speex\n\t\t\tif (_check(type, [0x53, 0x70, 0x65, 0x65, 0x78, 0x20, 0x20])) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'spx',\n\t\t\t\t\tmime: 'audio/ogg',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// If '\\x01vorbis' in header\n\t\t\tif (_check(type, [0x01, 0x76, 0x6F, 0x72, 0x62, 0x69, 0x73])) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'ogg',\n\t\t\t\t\tmime: 'audio/ogg',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Default OGG container https://www.iana.org/assignments/media-types/application/ogg\n\t\t\treturn {\n\t\t\t\text: 'ogx',\n\t\t\t\tmime: 'application/ogg',\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\tthis.check([0x50, 0x4B])\n\t\t\t&& (this.buffer[2] === 0x3 || this.buffer[2] === 0x5 || this.buffer[2] === 0x7)\n\t\t\t&& (this.buffer[3] === 0x4 || this.buffer[3] === 0x6 || this.buffer[3] === 0x8)\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'zip',\n\t\t\t\tmime: 'application/zip',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('MThd')) {\n\t\t\treturn {\n\t\t\t\text: 'mid',\n\t\t\t\tmime: 'audio/midi',\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\tthis.checkString('wOFF')\n\t\t\t&& (\n\t\t\t\tthis.check([0x00, 0x01, 0x00, 0x00], {offset: 4})\n\t\t\t\t|| this.checkString('OTTO', {offset: 4})\n\t\t\t)\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'woff',\n\t\t\t\tmime: 'font/woff',\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\tthis.checkString('wOF2')\n\t\t\t&& (\n\t\t\t\tthis.check([0x00, 0x01, 0x00, 0x00], {offset: 4})\n\t\t\t\t|| this.checkString('OTTO', {offset: 4})\n\t\t\t)\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'woff2',\n\t\t\t\tmime: 'font/woff2',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0xD4, 0xC3, 0xB2, 0xA1]) || this.check([0xA1, 0xB2, 0xC3, 0xD4])) {\n\t\t\treturn {\n\t\t\t\text: 'pcap',\n\t\t\t\tmime: 'application/vnd.tcpdump.pcap',\n\t\t\t};\n\t\t}\n\n\t\t// Sony DSD Stream File (DSF)\n\t\tif (this.checkString('DSD ')) {\n\t\t\treturn {\n\t\t\t\text: 'dsf',\n\t\t\t\tmime: 'audio/x-dsf', // Non-standard\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('LZIP')) {\n\t\t\treturn {\n\t\t\t\text: 'lz',\n\t\t\t\tmime: 'application/x-lzip',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('fLaC')) {\n\t\t\treturn {\n\t\t\t\text: 'flac',\n\t\t\t\tmime: 'audio/flac',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x42, 0x50, 0x47, 0xFB])) {\n\t\t\treturn {\n\t\t\t\text: 'bpg',\n\t\t\t\tmime: 'image/bpg',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('wvpk')) {\n\t\t\treturn {\n\t\t\t\text: 'wv',\n\t\t\t\tmime: 'audio/wavpack',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('%PDF')) {\n\t\t\t// Assume this is just a normal PDF\n\t\t\treturn {\n\t\t\t\text: 'pdf',\n\t\t\t\tmime: 'application/pdf',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x00, 0x61, 0x73, 0x6D])) {\n\t\t\treturn {\n\t\t\t\text: 'wasm',\n\t\t\t\tmime: 'application/wasm',\n\t\t\t};\n\t\t}\n\n\t\t// TIFF, little-endian type\n\t\tif (this.check([0x49, 0x49])) {\n\t\t\tconst fileType = await this.readTiffHeader(false);\n\t\t\tif (fileType) {\n\t\t\t\treturn fileType;\n\t\t\t}\n\t\t}\n\n\t\t// TIFF, big-endian type\n\t\tif (this.check([0x4D, 0x4D])) {\n\t\t\tconst fileType = await this.readTiffHeader(true);\n\t\t\tif (fileType) {\n\t\t\t\treturn fileType;\n\t\t\t}\n\t\t}\n\n\t\tif (this.checkString('MAC ')) {\n\t\t\treturn {\n\t\t\t\text: 'ape',\n\t\t\t\tmime: 'audio/ape',\n\t\t\t};\n\t\t}\n\n\t\t// https://github.com/file/file/blob/master/magic/Magdir/matroska\n\t\tif (this.check([0x1A, 0x45, 0xDF, 0xA3])) { // Root element: EBML\n\t\t\tasync function readField() {\n\t\t\t\tconst msb = await tokenizer.peekNumber(Token.UINT8);\n\t\t\t\tlet mask = 0x80;\n\t\t\t\tlet ic = 0; // 0 = A, 1 = B, 2 = C, 3 = D\n\n\t\t\t\twhile ((msb & mask) === 0 && mask !== 0) {\n\t\t\t\t\t++ic;\n\t\t\t\t\tmask >>= 1;\n\t\t\t\t}\n\n\t\t\t\tconst id = new Uint8Array(ic + 1);\n\t\t\t\tawait safeReadBuffer(tokenizer, id, undefined, {\n\t\t\t\t\tmaximumLength: id.length,\n\t\t\t\t\treason: 'EBML field',\n\t\t\t\t});\n\t\t\t\treturn id;\n\t\t\t}\n\n\t\t\tasync function readElement() {\n\t\t\t\tconst idField = await readField();\n\t\t\t\tconst lengthField = await readField();\n\n\t\t\t\tlengthField[0] ^= 0x80 >> (lengthField.length - 1);\n\t\t\t\tconst nrLength = Math.min(6, lengthField.length); // JavaScript can max read 6 bytes integer\n\n\t\t\t\tconst idView = new DataView(idField.buffer);\n\t\t\t\tconst lengthView = new DataView(lengthField.buffer, lengthField.length - nrLength, nrLength);\n\n\t\t\t\treturn {\n\t\t\t\t\tid: getUintBE(idView),\n\t\t\t\t\tlen: getUintBE(lengthView),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tasync function readChildren(children) {\n\t\t\t\tlet ebmlElementCount = 0;\n\t\t\t\twhile (children > 0) {\n\t\t\t\t\tebmlElementCount++;\n\t\t\t\t\tif (ebmlElementCount > maximumEbmlElementCount) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst element = await readElement();\n\n\t\t\t\t\tif (element.id === 0x42_82) {\n\t\t\t\t\t\t// `DocType` is a short string (\"webm\", \"matroska\", ...), reject implausible lengths to avoid large allocations.\n\t\t\t\t\t\tif (element.len > maximumEbmlDocumentTypeSizeInBytes) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst documentTypeLength = getSafeBound(element.len, maximumEbmlDocumentTypeSizeInBytes, 'EBML DocType');\n\t\t\t\t\t\tconst rawValue = await tokenizer.readToken(new Token.StringType(documentTypeLength));\n\t\t\t\t\t\treturn rawValue.replaceAll(/\\00.*$/g, ''); // Return DocType\n\t\t\t\t\t}\n\n\t\t\t\t\tif (\n\t\t\t\t\t\thasUnknownFileSize(tokenizer)\n\t\t\t\t\t\t&& (\n\t\t\t\t\t\t\t!Number.isFinite(element.len)\n\t\t\t\t\t\t\t|| element.len < 0\n\t\t\t\t\t\t\t|| element.len > maximumEbmlElementPayloadSizeInBytes\n\t\t\t\t\t\t)\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tawait safeIgnore(tokenizer, element.len, {\n\t\t\t\t\t\tmaximumLength: hasUnknownFileSize(tokenizer) ? maximumEbmlElementPayloadSizeInBytes : tokenizer.fileInfo.size,\n\t\t\t\t\t\treason: 'EBML payload',\n\t\t\t\t\t}); // ignore payload\n\t\t\t\t\t--children;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst rootElement = await readElement();\n\t\t\tconst documentType = await readChildren(rootElement.len);\n\n\t\t\tswitch (documentType) {\n\t\t\t\tcase 'webm':\n\t\t\t\t\treturn {\n\t\t\t\t\t\text: 'webm',\n\t\t\t\t\t\tmime: 'video/webm',\n\t\t\t\t\t};\n\n\t\t\t\tcase 'matroska':\n\t\t\t\t\treturn {\n\t\t\t\t\t\text: 'mkv',\n\t\t\t\t\t\tmime: 'video/matroska',\n\t\t\t\t\t};\n\n\t\t\t\tdefault:\n\t\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tif (this.checkString('SQLi')) {\n\t\t\treturn {\n\t\t\t\text: 'sqlite',\n\t\t\t\tmime: 'application/x-sqlite3',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x4E, 0x45, 0x53, 0x1A])) {\n\t\t\treturn {\n\t\t\t\text: 'nes',\n\t\t\t\tmime: 'application/x-nintendo-nes-rom',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('Cr24')) {\n\t\t\treturn {\n\t\t\t\text: 'crx',\n\t\t\t\tmime: 'application/x-google-chrome-extension',\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\tthis.checkString('MSCF')\n\t\t\t|| this.checkString('ISc(')\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'cab',\n\t\t\t\tmime: 'application/vnd.ms-cab-compressed',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0xED, 0xAB, 0xEE, 0xDB])) {\n\t\t\treturn {\n\t\t\t\text: 'rpm',\n\t\t\t\tmime: 'application/x-rpm',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0xC5, 0xD0, 0xD3, 0xC6])) {\n\t\t\treturn {\n\t\t\t\text: 'eps',\n\t\t\t\tmime: 'application/eps',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x28, 0xB5, 0x2F, 0xFD])) {\n\t\t\treturn {\n\t\t\t\text: 'zst',\n\t\t\t\tmime: 'application/zstd',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x7F, 0x45, 0x4C, 0x46])) {\n\t\t\treturn {\n\t\t\t\text: 'elf',\n\t\t\t\tmime: 'application/x-elf',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x21, 0x42, 0x44, 0x4E])) {\n\t\t\treturn {\n\t\t\t\text: 'pst',\n\t\t\t\tmime: 'application/vnd.ms-outlook',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('PAR1') || this.checkString('PARE')) {\n\t\t\treturn {\n\t\t\t\text: 'parquet',\n\t\t\t\tmime: 'application/vnd.apache.parquet',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('ttcf')) {\n\t\t\treturn {\n\t\t\t\text: 'ttc',\n\t\t\t\tmime: 'font/collection',\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\tthis.check([0xFE, 0xED, 0xFA, 0xCE]) // 32-bit, big-endian\n\t\t\t|| this.check([0xFE, 0xED, 0xFA, 0xCF]) // 64-bit, big-endian\n\t\t\t|| this.check([0xCE, 0xFA, 0xED, 0xFE]) // 32-bit, little-endian\n\t\t\t|| this.check([0xCF, 0xFA, 0xED, 0xFE]) // 64-bit, little-endian\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'macho',\n\t\t\t\tmime: 'application/x-mach-binary',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x04, 0x22, 0x4D, 0x18])) {\n\t\t\treturn {\n\t\t\t\text: 'lz4',\n\t\t\t\tmime: 'application/x-lz4', // Invented by us\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('regf')) {\n\t\t\treturn {\n\t\t\t\text: 'dat',\n\t\t\t\tmime: 'application/x-ft-windows-registry-hive',\n\t\t\t};\n\t\t}\n\n\t\t// SPSS Statistical Data File\n\t\tif (this.checkString('$FL2') || this.checkString('$FL3')) {\n\t\t\treturn {\n\t\t\t\text: 'sav',\n\t\t\t\tmime: 'application/x-spss-sav',\n\t\t\t};\n\t\t}\n\n\t\t// -- 5-byte signatures --\n\n\t\tif (this.check([0x4F, 0x54, 0x54, 0x4F, 0x00])) {\n\t\t\treturn {\n\t\t\t\text: 'otf',\n\t\t\t\tmime: 'font/otf',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('#!AMR')) {\n\t\t\treturn {\n\t\t\t\text: 'amr',\n\t\t\t\tmime: 'audio/amr',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('{\\\\rtf')) {\n\t\t\treturn {\n\t\t\t\text: 'rtf',\n\t\t\t\tmime: 'application/rtf',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x46, 0x4C, 0x56, 0x01])) {\n\t\t\treturn {\n\t\t\t\text: 'flv',\n\t\t\t\tmime: 'video/x-flv',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('IMPM')) {\n\t\t\treturn {\n\t\t\t\text: 'it',\n\t\t\t\tmime: 'audio/x-it',\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\tthis.checkString('-lh0-', {offset: 2})\n\t\t\t|| this.checkString('-lh1-', {offset: 2})\n\t\t\t|| this.checkString('-lh2-', {offset: 2})\n\t\t\t|| this.checkString('-lh3-', {offset: 2})\n\t\t\t|| this.checkString('-lh4-', {offset: 2})\n\t\t\t|| this.checkString('-lh5-', {offset: 2})\n\t\t\t|| this.checkString('-lh6-', {offset: 2})\n\t\t\t|| this.checkString('-lh7-', {offset: 2})\n\t\t\t|| this.checkString('-lzs-', {offset: 2})\n\t\t\t|| this.checkString('-lz4-', {offset: 2})\n\t\t\t|| this.checkString('-lz5-', {offset: 2})\n\t\t\t|| this.checkString('-lhd-', {offset: 2})\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'lzh',\n\t\t\t\tmime: 'application/x-lzh-compressed',\n\t\t\t};\n\t\t}\n\n\t\t// MPEG program stream (PS or MPEG-PS)\n\t\tif (this.check([0x00, 0x00, 0x01, 0xBA])) {\n\t\t\t// MPEG-PS, MPEG-1 Part 1\n\t\t\tif (this.check([0x21], {offset: 4, mask: [0xF1]})) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'mpg', // May also be .ps, .mpeg\n\t\t\t\t\tmime: 'video/MP1S',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// MPEG-PS, MPEG-2 Part 1\n\t\t\tif (this.check([0x44], {offset: 4, mask: [0xC4]})) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'mpg', // May also be .mpg, .m2p, .vob or .sub\n\t\t\t\t\tmime: 'video/MP2P',\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif (this.checkString('ITSF')) {\n\t\t\treturn {\n\t\t\t\text: 'chm',\n\t\t\t\tmime: 'application/vnd.ms-htmlhelp',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0xCA, 0xFE, 0xBA, 0xBE])) {\n\t\t\t// Java bytecode and Mach-O universal binaries have the same magic number.\n\t\t\t// We disambiguate based on the next 4 bytes, as done by `file`.\n\t\t\t// See https://github.com/file/file/blob/master/magic/Magdir/cafebabe\n\t\t\tconst machOArchitectureCount = Token.UINT32_BE.get(this.buffer, 4);\n\t\t\tconst javaClassFileMajorVersion = Token.UINT16_BE.get(this.buffer, 6);\n\n\t\t\tif (machOArchitectureCount > 0 && machOArchitectureCount <= 30) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'macho',\n\t\t\t\t\tmime: 'application/x-mach-binary',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (javaClassFileMajorVersion > 30) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'class',\n\t\t\t\t\tmime: 'application/java-vm',\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif (this.checkString('.RMF')) {\n\t\t\treturn {\n\t\t\t\text: 'rm',\n\t\t\t\tmime: 'application/vnd.rn-realmedia',\n\t\t\t};\n\t\t}\n\n\t\t// -- 5-byte signatures --\n\n\t\tif (this.checkString('DRACO')) {\n\t\t\treturn {\n\t\t\t\text: 'drc',\n\t\t\t\tmime: 'application/vnd.google.draco', // Invented by us\n\t\t\t};\n\t\t}\n\n\t\t// -- 6-byte signatures --\n\n\t\tif (this.check([0xFD, 0x37, 0x7A, 0x58, 0x5A, 0x00])) {\n\t\t\treturn {\n\t\t\t\text: 'xz',\n\t\t\t\tmime: 'application/x-xz',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('<?xml ')) {\n\t\t\treturn {\n\t\t\t\text: 'xml',\n\t\t\t\tmime: 'application/xml',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x37, 0x7A, 0xBC, 0xAF, 0x27, 0x1C])) {\n\t\t\treturn {\n\t\t\t\text: '7z',\n\t\t\t\tmime: 'application/x-7z-compressed',\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\tthis.check([0x52, 0x61, 0x72, 0x21, 0x1A, 0x7])\n\t\t\t&& (this.buffer[6] === 0x0 || this.buffer[6] === 0x1)\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'rar',\n\t\t\t\tmime: 'application/x-rar-compressed',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('solid ')) {\n\t\t\treturn {\n\t\t\t\text: 'stl',\n\t\t\t\tmime: 'model/stl',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('AC')) {\n\t\t\tconst version = new Token.StringType(4, 'latin1').get(this.buffer, 2);\n\t\t\tif (version.match('^d*') && version >= 1000 && version <= 1050) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'dwg',\n\t\t\t\t\tmime: 'image/vnd.dwg',\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif (this.checkString('070707')) {\n\t\t\treturn {\n\t\t\t\text: 'cpio',\n\t\t\t\tmime: 'application/x-cpio',\n\t\t\t};\n\t\t}\n\n\t\t// -- 7-byte signatures --\n\n\t\tif (this.checkString('BLENDER')) {\n\t\t\treturn {\n\t\t\t\text: 'blend',\n\t\t\t\tmime: 'application/x-blender',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('!<arch>')) {\n\t\t\tawait tokenizer.ignore(8);\n\t\t\tconst string = await tokenizer.readToken(new Token.StringType(13, 'ascii'));\n\t\t\tif (string === 'debian-binary') {\n\t\t\t\treturn {\n\t\t\t\t\text: 'deb',\n\t\t\t\t\tmime: 'application/x-deb',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\text: 'ar',\n\t\t\t\tmime: 'application/x-unix-archive',\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\tthis.checkString('WEBVTT')\n\t\t\t&&\t(\n\t\t\t\t// One of LF, CR, tab, space, or end of file must follow \"WEBVTT\" per the spec (see `fixture/fixture-vtt-*.vtt` for examples). Note that `\\0` is technically the null character (there is no such thing as an EOF character). However, checking for `\\0` gives us the same result as checking for the end of the stream.\n\t\t\t\t(['\\n', '\\r', '\\t', ' ', '\\0'].some(char7 => this.checkString(char7, {offset: 6}))))\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'vtt',\n\t\t\t\tmime: 'text/vtt',\n\t\t\t};\n\t\t}\n\n\t\t// -- 8-byte signatures --\n\n\t\tif (this.check([0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A])) {\n\t\t\tconst pngFileType = {\n\t\t\t\text: 'png',\n\t\t\t\tmime: 'image/png',\n\t\t\t};\n\n\t\t\tconst apngFileType = {\n\t\t\t\text: 'apng',\n\t\t\t\tmime: 'image/apng',\n\t\t\t};\n\n\t\t\t// APNG format (https://wiki.mozilla.org/APNG_Specification)\n\t\t\t// 1. Find the first IDAT (image data) chunk (49 44 41 54)\n\t\t\t// 2. Check if there is an \"acTL\" chunk before the IDAT one (61 63 54 4C)\n\n\t\t\t// Offset calculated as follows:\n\t\t\t// - 8 bytes: PNG signature\n\t\t\t// - 4 (length) + 4 (chunk type) + 13 (chunk data) + 4 (CRC): IHDR chunk\n\n\t\t\tawait tokenizer.ignore(8); // ignore PNG signature\n\n\t\t\tasync function readChunkHeader() {\n\t\t\t\treturn {\n\t\t\t\t\tlength: await tokenizer.readToken(Token.INT32_BE),\n\t\t\t\t\ttype: await tokenizer.readToken(new Token.StringType(4, 'latin1')),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst isUnknownPngStream = hasUnknownFileSize(tokenizer);\n\t\t\tconst pngScanStart = tokenizer.position;\n\t\t\tdo {\n\t\t\t\tif (hasExceededUnknownSizeScanBudget(tokenizer, pngScanStart, maximumPngChunkSizeInBytes)) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tconst chunk = await readChunkHeader();\n\t\t\t\tif (chunk.length < 0) {\n\t\t\t\t\treturn; // Invalid chunk length\n\t\t\t\t}\n\n\t\t\t\tswitch (chunk.type) {\n\t\t\t\t\tcase 'IDAT':\n\t\t\t\t\t\treturn pngFileType;\n\t\t\t\t\tcase 'acTL':\n\t\t\t\t\t\treturn apngFileType;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tisUnknownPngStream\n\t\t\t\t\t\t\t\t&& chunk.length > maximumPngChunkSizeInBytes\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t// Avoid huge attacker-controlled skips when probing unknown-size streams.\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait safeIgnore(tokenizer, chunk.length + 4, {\n\t\t\t\t\t\t\t\tmaximumLength: isUnknownPngStream ? maximumPngChunkSizeInBytes + 4 : tokenizer.fileInfo.size,\n\t\t\t\t\t\t\t\treason: 'PNG chunk payload',\n\t\t\t\t\t\t\t}); // Ignore chunk-data + CRC\n\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t!isUnknownPngStream\n\t\t\t\t\t\t\t\t\t&& (\n\t\t\t\t\t\t\t\t\t\terror instanceof ParserHardLimitError\n\t\t\t\t\t\t\t\t\t\t|| error instanceof strtok3.EndOfStreamError\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\treturn pngFileType;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tthrow error;\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} while (tokenizer.position + 8 < tokenizer.fileInfo.size);\n\n\t\t\treturn pngFileType;\n\t\t}\n\n\t\tif (this.check([0x41, 0x52, 0x52, 0x4F, 0x57, 0x31, 0x00, 0x00])) {\n\t\t\treturn {\n\t\t\t\text: 'arrow',\n\t\t\t\tmime: 'application/vnd.apache.arrow.file',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x67, 0x6C, 0x54, 0x46, 0x02, 0x00, 0x00, 0x00])) {\n\t\t\treturn {\n\t\t\t\text: 'glb',\n\t\t\t\tmime: 'model/gltf-binary',\n\t\t\t};\n\t\t}\n\n\t\t// `mov` format variants\n\t\tif (\n\t\t\tthis.check([0x66, 0x72, 0x65, 0x65], {offset: 4}) // `free`\n\t\t\t|| this.check([0x6D, 0x64, 0x61, 0x74], {offset: 4}) // `mdat` MJPEG\n\t\t\t|| this.check([0x6D, 0x6F, 0x6F, 0x76], {offset: 4}) // `moov`\n\t\t\t|| this.check([0x77, 0x69, 0x64, 0x65], {offset: 4}) // `wide`\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'mov',\n\t\t\t\tmime: 'video/quicktime',\n\t\t\t};\n\t\t}\n\n\t\t// -- 9-byte signatures --\n\n\t\tif (this.check([0x49, 0x49, 0x52, 0x4F, 0x08, 0x00, 0x00, 0x00, 0x18])) {\n\t\t\treturn {\n\t\t\t\text: 'orf',\n\t\t\t\tmime: 'image/x-olympus-orf',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('gimp xcf ')) {\n\t\t\treturn {\n\t\t\t\text: 'xcf',\n\t\t\t\tmime: 'image/x-xcf',\n\t\t\t};\n\t\t}\n\n\t\t// File Type Box (https://en.wikipedia.org/wiki/ISO_base_media_file_format)\n\t\t// It's not required to be first, but it's recommended to be. Almost all ISO base media files start with `ftyp` box.\n\t\t// `ftyp` box must contain a brand major identifier, which must consist of ISO 8859-1 printable characters.\n\t\t// Here we check for 8859-1 printable characters (for simplicity, it's a mask which also catches one non-printable character).\n\t\tif (\n\t\t\tthis.checkString('ftyp', {offset: 4})\n\t\t\t&& (this.buffer[8] & 0x60) !== 0x00 // Brand major, first character ASCII?\n\t\t) {\n\t\t\t// They all can have MIME `video/mp4` except `application/mp4` special-case which is hard to detect.\n\t\t\t// For some cases, we're specific, everything else falls to `video/mp4` with `mp4` extension.\n\t\t\tconst brandMajor = new Token.StringType(4, 'latin1').get(this.buffer, 8).replace('\\0', ' ').trim();\n\t\t\tswitch (brandMajor) {\n\t\t\t\tcase 'avif':\n\t\t\t\tcase 'avis':\n\t\t\t\t\treturn {ext: 'avif', mime: 'image/avif'};\n\t\t\t\tcase 'mif1':\n\t\t\t\t\treturn {ext: 'heic', mime: 'image/heif'};\n\t\t\t\tcase 'msf1':\n\t\t\t\t\treturn {ext: 'heic', mime: 'image/heif-sequence'};\n\t\t\t\tcase 'heic':\n\t\t\t\tcase 'heix':\n\t\t\t\t\treturn {ext: 'heic', mime: 'image/heic'};\n\t\t\t\tcase 'hevc':\n\t\t\t\tcase 'hevx':\n\t\t\t\t\treturn {ext: 'heic', mime: 'image/heic-sequence'};\n\t\t\t\tcase 'qt':\n\t\t\t\t\treturn {ext: 'mov', mime: 'video/quicktime'};\n\t\t\t\tcase 'M4V':\n\t\t\t\tcase 'M4VH':\n\t\t\t\tcase 'M4VP':\n\t\t\t\t\treturn {ext: 'm4v', mime: 'video/x-m4v'};\n\t\t\t\tcase 'M4P':\n\t\t\t\t\treturn {ext: 'm4p', mime: 'video/mp4'};\n\t\t\t\tcase 'M4B':\n\t\t\t\t\treturn {ext: 'm4b', mime: 'audio/mp4'};\n\t\t\t\tcase 'M4A':\n\t\t\t\t\treturn {ext: 'm4a', mime: 'audio/x-m4a'};\n\t\t\t\tcase 'F4V':\n\t\t\t\t\treturn {ext: 'f4v', mime: 'video/mp4'};\n\t\t\t\tcase 'F4P':\n\t\t\t\t\treturn {ext: 'f4p', mime: 'video/mp4'};\n\t\t\t\tcase 'F4A':\n\t\t\t\t\treturn {ext: 'f4a', mime: 'audio/mp4'};\n\t\t\t\tcase 'F4B':\n\t\t\t\t\treturn {ext: 'f4b', mime: 'audio/mp4'};\n\t\t\t\tcase 'crx':\n\t\t\t\t\treturn {ext: 'cr3', mime: 'image/x-canon-cr3'};\n\t\t\t\tdefault:\n\t\t\t\t\tif (brandMajor.startsWith('3g')) {\n\t\t\t\t\t\tif (brandMajor.startsWith('3g2')) {\n\t\t\t\t\t\t\treturn {ext: '3g2', mime: 'video/3gpp2'};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn {ext: '3gp', mime: 'video/3gpp'};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn {ext: 'mp4', mime: 'video/mp4'};\n\t\t\t}\n\t\t}\n\n\t\t// -- 10-byte signatures --\n\n\t\tif (this.checkString('REGEDIT4\\r\\n')) {\n\t\t\treturn {\n\t\t\t\text: 'reg',\n\t\t\t\tmime: 'application/x-ms-regedit',\n\t\t\t};\n\t\t}\n\n\t\t// -- 12-byte signatures --\n\n\t\t// RIFF file format which might be AVI, WAV, QCP, etc\n\t\tif (this.check([0x52, 0x49, 0x46, 0x46])) {\n\t\t\tif (this.checkString('WEBP', {offset: 8})) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'webp',\n\t\t\t\t\tmime: 'image/webp',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (this.check([0x41, 0x56, 0x49], {offset: 8})) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'avi',\n\t\t\t\t\tmime: 'video/vnd.avi',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (this.check([0x57, 0x41, 0x56, 0x45], {offset: 8})) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'wav',\n\t\t\t\t\tmime: 'audio/wav',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// QLCM, QCP file\n\t\t\tif (this.check([0x51, 0x4C, 0x43, 0x4D], {offset: 8})) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'qcp',\n\t\t\t\t\tmime: 'audio/qcelp',\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif (this.check([0x49, 0x49, 0x55, 0x00, 0x18, 0x00, 0x00, 0x00, 0x88, 0xE7, 0x74, 0xD8])) {\n\t\t\treturn {\n\t\t\t\text: 'rw2',\n\t\t\t\tmime: 'image/x-panasonic-rw2',\n\t\t\t};\n\t\t}\n\n\t\t// ASF_Header_Object first 80 bytes\n\t\tif (this.check([0x30, 0x26, 0xB2, 0x75, 0x8E, 0x66, 0xCF, 0x11, 0xA6, 0xD9])) {\n\t\t\tlet isMalformedAsf = false;\n\t\t\ttry {\n\t\t\t\tasync function readHeader() {\n\t\t\t\t\tconst guid = new Uint8Array(16);\n\t\t\t\t\tawait safeReadBuffer(tokenizer, guid, undefined, {\n\t\t\t\t\t\tmaximumLength: guid.length,\n\t\t\t\t\t\treason: 'ASF header GUID',\n\t\t\t\t\t});\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: guid,\n\t\t\t\t\t\tsize: Number(await tokenizer.readToken(Token.UINT64_LE)),\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tawait safeIgnore(tokenizer, 30, {\n\t\t\t\t\tmaximumLength: 30,\n\t\t\t\t\treason: 'ASF header prelude',\n\t\t\t\t});\n\t\t\t\tconst isUnknownFileSize = hasUnknownFileSize(tokenizer);\n\t\t\t\tconst asfHeaderScanStart = tokenizer.position;\n\t\t\t\twhile (tokenizer.position + 24 < tokenizer.fileInfo.size) {\n\t\t\t\t\tif (hasExceededUnknownSizeScanBudget(tokenizer, asfHeaderScanStart, maximumUntrustedSkipSizeInBytes)) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst previousPosition = tokenizer.position;\n\t\t\t\t\tconst header = await readHeader();\n\t\t\t\t\tlet payload = header.size - 24;\n\t\t\t\t\tif (\n\t\t\t\t\t\t!Number.isFinite(payload)\n\t\t\t\t\t\t|| payload < 0\n\t\t\t\t\t) {\n\t\t\t\t\t\tisMalformedAsf = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (_check(header.id, [0x91, 0x07, 0xDC, 0xB7, 0xB7, 0xA9, 0xCF, 0x11, 0x8E, 0xE6, 0x00, 0xC0, 0x0C, 0x20, 0x53, 0x65])) {\n\t\t\t\t\t\t// Sync on Stream-Properties-Object (B7DC0791-A9B7-11CF-8EE6-00C00C205365)\n\t\t\t\t\t\tconst typeId = new Uint8Array(16);\n\t\t\t\t\t\tpayload -= await safeReadBuffer(tokenizer, typeId, undefined, {\n\t\t\t\t\t\t\tmaximumLength: typeId.length,\n\t\t\t\t\t\t\treason: 'ASF stream type GUID',\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (_check(typeId, [0x40, 0x9E, 0x69, 0xF8, 0x4D, 0x5B, 0xCF, 0x11, 0xA8, 0xFD, 0x00, 0x80, 0x5F, 0x5C, 0x44, 0x2B])) {\n\t\t\t\t\t\t\t// Found audio:\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\text: 'asf',\n\t\t\t\t\t\t\t\tmime: 'audio/x-ms-asf',\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (_check(typeId, [0xC0, 0xEF, 0x19, 0xBC, 0x4D, 0x5B, 0xCF, 0x11, 0xA8, 0xFD, 0x00, 0x80, 0x5F, 0x5C, 0x44, 0x2B])) {\n\t\t\t\t\t\t\t// Found video:\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\text: 'asf',\n\t\t\t\t\t\t\t\tmime: 'video/x-ms-asf',\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tawait safeIgnore(tokenizer, payload, {\n\t\t\t\t\t\tmaximumLength: isUnknownFileSize ? maximumUntrustedSkipSizeInBytes : tokenizer.fileInfo.size,\n\t\t\t\t\t\treason: 'ASF header payload',\n\t\t\t\t\t});\n\n\t\t\t\t\t// Safeguard against malformed files: break if the position did not advance.\n\t\t\t\t\tif (tokenizer.position <= previousPosition) {\n\t\t\t\t\t\tisMalformedAsf = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tif (\n\t\t\t\t\terror instanceof strtok3.EndOfStreamError\n\t\t\t\t\t|| error instanceof ParserHardLimitError\n\t\t\t\t) {\n\t\t\t\t\tif (hasUnknownFileSize(tokenizer)) {\n\t\t\t\t\t\tisMalformedAsf = true;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (isMalformedAsf) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Default to ASF generic extension\n\t\t\treturn {\n\t\t\t\text: 'asf',\n\t\t\t\tmime: 'application/vnd.ms-asf',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0xAB, 0x4B, 0x54, 0x58, 0x20, 0x31, 0x31, 0xBB, 0x0D, 0x0A, 0x1A, 0x0A])) {\n\t\t\treturn {\n\t\t\t\text: 'ktx',\n\t\t\t\tmime: 'image/ktx',\n\t\t\t};\n\t\t}\n\n\t\tif ((this.check([0x7E, 0x10, 0x04]) || this.check([0x7E, 0x18, 0x04])) && this.check([0x30, 0x4D, 0x49, 0x45], {offset: 4})) {\n\t\t\treturn {\n\t\t\t\text: 'mie',\n\t\t\t\tmime: 'application/x-mie',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x27, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], {offset: 2})) {\n\t\t\treturn {\n\t\t\t\text: 'shp',\n\t\t\t\tmime: 'application/x-esri-shape',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0xFF, 0x4F, 0xFF, 0x51])) {\n\t\t\treturn {\n\t\t\t\text: 'j2c',\n\t\t\t\tmime: 'image/j2c',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x00, 0x00, 0x00, 0x0C, 0x6A, 0x50, 0x20, 0x20, 0x0D, 0x0A, 0x87, 0x0A])) {\n\t\t\t// JPEG-2000 family\n\n\t\t\tawait tokenizer.ignore(20);\n\t\t\tconst type = await tokenizer.readToken(new Token.StringType(4, 'ascii'));\n\t\t\tswitch (type) {\n\t\t\t\tcase 'jp2 ':\n\t\t\t\t\treturn {\n\t\t\t\t\t\text: 'jp2',\n\t\t\t\t\t\tmime: 'image/jp2',\n\t\t\t\t\t};\n\t\t\t\tcase 'jpx ':\n\t\t\t\t\treturn {\n\t\t\t\t\t\text: 'jpx',\n\t\t\t\t\t\tmime: 'image/jpx',\n\t\t\t\t\t};\n\t\t\t\tcase 'jpm ':\n\t\t\t\t\treturn {\n\t\t\t\t\t\text: 'jpm',\n\t\t\t\t\t\tmime: 'image/jpm',\n\t\t\t\t\t};\n\t\t\t\tcase 'mjp2':\n\t\t\t\t\treturn {\n\t\t\t\t\t\text: 'mj2',\n\t\t\t\t\t\tmime: 'image/mj2',\n\t\t\t\t\t};\n\t\t\t\tdefault:\n\t\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tif (\n\t\t\tthis.check([0xFF, 0x0A])\n\t\t\t|| this.check([0x00, 0x00, 0x00, 0x0C, 0x4A, 0x58, 0x4C, 0x20, 0x0D, 0x0A, 0x87, 0x0A])\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'jxl',\n\t\t\t\tmime: 'image/jxl',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0xFE, 0xFF])) { // UTF-16-BOM-BE\n\t\t\tif (this.checkString('<?xml ', {offset: 2, encoding: 'utf-16be'})) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'xml',\n\t\t\t\t\tmime: 'application/xml',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn undefined; // Some unknown text based format\n\t\t}\n\n\t\tif (this.check([0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1])) {\n\t\t\t// Detected Microsoft Compound File Binary File (MS-CFB) Format.\n\t\t\treturn {\n\t\t\t\text: 'cfb',\n\t\t\t\tmime: 'application/x-cfb',\n\t\t\t};\n\t\t}\n\n\t\t// Increase sample size from 32 to 256.\n\t\tawait tokenizer.peekBuffer(this.buffer, {length: Math.min(256, tokenizer.fileInfo.size), mayBeLess: true});\n\n\t\tif (this.check([0x61, 0x63, 0x73, 0x70], {offset: 36})) {\n\t\t\treturn {\n\t\t\t\text: 'icc',\n\t\t\t\tmime: 'application/vnd.iccprofile',\n\t\t\t};\n\t\t}\n\n\t\t// ACE: requires 14 bytes in the buffer\n\t\tif (this.checkString('**ACE', {offset: 7}) && this.checkString('**', {offset: 12})) {\n\t\t\treturn {\n\t\t\t\text: 'ace',\n\t\t\t\tmime: 'application/x-ace-compressed',\n\t\t\t};\n\t\t}\n\n\t\t// -- 15-byte signatures --\n\n\t\tif (this.checkString('BEGIN:')) {\n\t\t\tif (this.checkString('VCARD', {offset: 6})) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'vcf',\n\t\t\t\t\tmime: 'text/vcard',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (this.checkString('VCALENDAR', {offset: 6})) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'ics',\n\t\t\t\t\tmime: 'text/calendar',\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\t// `raf` is here just to keep all the raw image detectors together.\n\t\tif (this.checkString('FUJIFILMCCD-RAW')) {\n\t\t\treturn {\n\t\t\t\text: 'raf',\n\t\t\t\tmime: 'image/x-fujifilm-raf',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('Extended Module:')) {\n\t\t\treturn {\n\t\t\t\text: 'xm',\n\t\t\t\tmime: 'audio/x-xm',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('Creative Voice File')) {\n\t\t\treturn {\n\t\t\t\text: 'voc',\n\t\t\t\tmime: 'audio/x-voc',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x04, 0x00, 0x00, 0x00]) && this.buffer.length >= 16) { // Rough & quick check Pickle/ASAR\n\t\t\tconst jsonSize = new DataView(this.buffer.buffer).getUint32(12, true);\n\n\t\t\tif (jsonSize > 12 && this.buffer.length >= jsonSize + 16) {\n\t\t\t\ttry {\n\t\t\t\t\tconst header = new TextDecoder().decode(this.buffer.subarray(16, jsonSize + 16));\n\t\t\t\t\tconst json = JSON.parse(header);\n\t\t\t\t\t// Check if Pickle is ASAR\n\t\t\t\t\tif (json.files) { // Final check, assuring Pickle/ASAR format\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\text: 'asar',\n\t\t\t\t\t\t\tmime: 'application/x-asar',\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t} catch {}\n\t\t\t}\n\t\t}\n\n\t\tif (this.check([0x06, 0x0E, 0x2B, 0x34, 0x02, 0x05, 0x01, 0x01, 0x0D, 0x01, 0x02, 0x01, 0x01, 0x02])) {\n\t\t\treturn {\n\t\t\t\text: 'mxf',\n\t\t\t\tmime: 'application/mxf',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('SCRM', {offset: 44})) {\n\t\t\treturn {\n\t\t\t\text: 's3m',\n\t\t\t\tmime: 'audio/x-s3m',\n\t\t\t};\n\t\t}\n\n\t\t// Raw MPEG-2 transport stream (188-byte packets)\n\t\tif (this.check([0x47]) && this.check([0x47], {offset: 188})) {\n\t\t\treturn {\n\t\t\t\text: 'mts',\n\t\t\t\tmime: 'video/mp2t',\n\t\t\t};\n\t\t}\n\n\t\t// Blu-ray Disc Audio-Video (BDAV) MPEG-2 transport stream has 4-byte TP_extra_header before each 188-byte packet\n\t\tif (this.check([0x47], {offset: 4}) && this.check([0x47], {offset: 196})) {\n\t\t\treturn {\n\t\t\t\text: 'mts',\n\t\t\t\tmime: 'video/mp2t',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x42, 0x4F, 0x4F, 0x4B, 0x4D, 0x4F, 0x42, 0x49], {offset: 60})) {\n\t\t\treturn {\n\t\t\t\text: 'mobi',\n\t\t\t\tmime: 'application/x-mobipocket-ebook',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x44, 0x49, 0x43, 0x4D], {offset: 128})) {\n\t\t\treturn {\n\t\t\t\text: 'dcm',\n\t\t\t\tmime: 'application/dicom',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x4C, 0x00, 0x00, 0x00, 0x01, 0x14, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46])) {\n\t\t\treturn {\n\t\t\t\text: 'lnk',\n\t\t\t\tmime: 'application/x.ms.shortcut', // Invented by us\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x62, 0x6F, 0x6F, 0x6B, 0x00, 0x00, 0x00, 0x00, 0x6D, 0x61, 0x72, 0x6B, 0x00, 0x00, 0x00, 0x00])) {\n\t\t\treturn {\n\t\t\t\text: 'alias',\n\t\t\t\tmime: 'application/x.apple.alias', // Invented by us\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('Kaydara FBX Binary \\u0000')) {\n\t\t\treturn {\n\t\t\t\text: 'fbx',\n\t\t\t\tmime: 'application/x.autodesk.fbx', // Invented by us\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\tthis.check([0x4C, 0x50], {offset: 34})\n\t\t\t&& (\n\t\t\t\tthis.check([0x00, 0x00, 0x01], {offset: 8})\n\t\t\t\t|| this.check([0x01, 0x00, 0x02], {offset: 8})\n\t\t\t\t|| this.check([0x02, 0x00, 0x02], {offset: 8})\n\t\t\t)\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'eot',\n\t\t\t\tmime: 'application/vnd.ms-fontobject',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x06, 0x06, 0xED, 0xF5, 0xD8, 0x1D, 0x46, 0xE5, 0xBD, 0x31, 0xEF, 0xE7, 0xFE, 0x74, 0xB7, 0x1D])) {\n\t\t\treturn {\n\t\t\t\text: 'indd',\n\t\t\t\tmime: 'application/x-indesign',\n\t\t\t};\n\t\t}\n\n\t\t// -- 16-byte signatures --\n\n\t\t// JMP files - check for both Little Endian and Big Endian signatures\n\t\tif (this.check([0xFF, 0xFF, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00])\n\t\t\t|| this.check([0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x01])) {\n\t\t\treturn {\n\t\t\t\text: 'jmp',\n\t\t\t\tmime: 'application/x-jmp-data',\n\t\t\t};\n\t\t}\n\n\t\t// Increase sample size from 256 to 512\n\t\tawait tokenizer.peekBuffer(this.buffer, {length: Math.min(512, tokenizer.fileInfo.size), mayBeLess: true});\n\n\t\t// Requires a buffer size of 512 bytes\n\t\tif ((this.checkString('ustar', {offset: 257}) && (this.checkString('\\0', {offset: 262}) || this.checkString(' ', {offset: 262})))\n\t\t\t|| (this.check([0, 0, 0, 0, 0, 0], {offset: 257}) && tarHeaderChecksumMatches(this.buffer))) {\n\t\t\treturn {\n\t\t\t\text: 'tar',\n\t\t\t\tmime: 'application/x-tar',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0xFF, 0xFE])) { // UTF-16-BOM-LE\n\t\t\tconst encoding = 'utf-16le';\n\t\t\tif (this.checkString('<?xml ', {offset: 2, encoding})) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'xml',\n\t\t\t\t\tmime: 'application/xml',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (this.check([0xFF, 0x0E], {offset: 2}) && this.checkString('SketchUp Model', {offset: 4, encoding})) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'skp',\n\t\t\t\t\tmime: 'application/vnd.sketchup.skp',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (this.checkString('Windows Registry Editor Version 5.00\\r\\n', {offset: 2, encoding})) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'reg',\n\t\t\t\t\tmime: 'application/x-ms-regedit',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn undefined; // Some text based format\n\t\t}\n\n\t\tif (this.checkString('-----BEGIN PGP MESSAGE-----')) {\n\t\t\treturn {\n\t\t\t\text: 'pgp',\n\t\t\t\tmime: 'application/pgp-encrypted',\n\t\t\t};\n\t\t}\n\t};\n\t// Detections with limited supporting data, resulting in a higher likelihood of false positives\n\tdetectImprecise = async tokenizer => {\n\t\tthis.buffer = new Uint8Array(reasonableDetectionSizeInBytes);\n\t\tconst fileSize = getKnownFileSizeOrMaximum(tokenizer.fileInfo.size);\n\n\t\t// Read initial sample size of 8 bytes\n\t\tawait tokenizer.peekBuffer(this.buffer, {length: Math.min(8, fileSize), mayBeLess: true});\n\n\t\tif (\n\t\t\tthis.check([0x0, 0x0, 0x1, 0xBA])\n\t\t\t|| this.check([0x0, 0x0, 0x1, 0xB3])\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'mpg',\n\t\t\t\tmime: 'video/mpeg',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x00, 0x01, 0x00, 0x00, 0x00])) {\n\t\t\treturn {\n\t\t\t\text: 'ttf',\n\t\t\t\tmime: 'font/ttf',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x00, 0x00, 0x01, 0x00])) {\n\t\t\treturn {\n\t\t\t\text: 'ico',\n\t\t\t\tmime: 'image/x-icon',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x00, 0x00, 0x02, 0x00])) {\n\t\t\treturn {\n\t\t\t\text: 'cur',\n\t\t\t\tmime: 'image/x-icon',\n\t\t\t};\n\t\t}\n\n\t\t// Adjust buffer to `mpegOffsetTolerance`\n\t\tawait tokenizer.peekBuffer(this.buffer, {length: Math.min(2 + this.options.mpegOffsetTolerance, fileSize), mayBeLess: true});\n\n\t\t// Check MPEG 1 or 2 Layer 3 header, or 'layer 0' for ADTS (MPEG sync-word 0xFFE)\n\t\tif (this.buffer.length >= (2 + this.options.mpegOffsetTolerance)) {\n\t\t\tfor (let depth = 0; depth <= this.options.mpegOffsetTolerance; ++depth) {\n\t\t\t\tconst type = this.scanMpeg(depth);\n\t\t\t\tif (type) {\n\t\t\t\t\treturn type;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tasync readTiffTag(bigEndian) {\n\t\tconst tagId = await this.tokenizer.readToken(bigEndian ? Token.UINT16_BE : Token.UINT16_LE);\n\t\tawait this.tokenizer.ignore(10);\n\t\tswitch (tagId) {\n\t\t\tcase 50_341:\n\t\t\t\treturn {\n\t\t\t\t\text: 'arw',\n\t\t\t\t\tmime: 'image/x-sony-arw',\n\t\t\t\t};\n\t\t\tcase 50_706:\n\t\t\t\treturn {\n\t\t\t\t\text: 'dng',\n\t\t\t\t\tmime: 'image/x-adobe-dng',\n\t\t\t\t};\n\t\t\tdefault:\n\t\t}\n\t}\n\n\tasync readTiffIFD(bigEndian) {\n\t\tconst numberOfTags = await this.tokenizer.readToken(bigEndian ? Token.UINT16_BE : Token.UINT16_LE);\n\t\tif (\n\t\t\thasUnknownFileSize(this.tokenizer)\n\t\t\t&& (2 + (numberOfTags * 12)) > maximumTiffIfdOffsetInBytes\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tfor (let n = 0; n < numberOfTags; ++n) {\n\t\t\tconst fileType = await this.readTiffTag(bigEndian);\n\t\t\tif (fileType) {\n\t\t\t\treturn fileType;\n\t\t\t}\n\t\t}\n\t}\n\n\tasync readTiffHeader(bigEndian) {\n\t\tconst tiffFileType = {\n\t\t\text: 'tif',\n\t\t\tmime: 'image/tiff',\n\t\t};\n\n\t\tconst version = (bigEndian ? Token.UINT16_BE : Token.UINT16_LE).get(this.buffer, 2);\n\t\tconst ifdOffset = (bigEndian ? Token.UINT32_BE : Token.UINT32_LE).get(this.buffer, 4);\n\n\t\tif (version === 42) {\n\t\t\t// TIFF file header\n\t\t\tif (ifdOffset >= 6) {\n\t\t\t\tif (this.checkString('CR', {offset: 8})) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\text: 'cr2',\n\t\t\t\t\t\tmime: 'image/x-canon-cr2',\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tif (ifdOffset >= 8) {\n\t\t\t\t\tconst someId1 = (bigEndian ? Token.UINT16_BE : Token.UINT16_LE).get(this.buffer, 8);\n\t\t\t\t\tconst someId2 = (bigEndian ? Token.UINT16_BE : Token.UINT16_LE).get(this.buffer, 10);\n\n\t\t\t\t\tif (\n\t\t\t\t\t\t(someId1 === 0x1C && someId2 === 0xFE)\n\t\t\t\t\t\t|| (someId1 === 0x1F && someId2 === 0x0B)) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\text: 'nef',\n\t\t\t\t\t\t\tmime: 'image/x-nikon-nef',\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst maximumTiffOffset = hasUnknownFileSize(this.tokenizer) ? maximumTiffIfdOffsetInBytes : this.tokenizer.fileInfo.size;\n\n\t\t\ttry {\n\t\t\t\tawait safeIgnore(this.tokenizer, ifdOffset, {\n\t\t\t\t\tmaximumLength: maximumTiffOffset,\n\t\t\t\t\treason: 'TIFF IFD offset',\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tif (error instanceof strtok3.EndOfStreamError) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\tlet fileType;\n\t\t\ttry {\n\t\t\t\tfileType = await this.readTiffIFD(bigEndian);\n\t\t\t} catch (error) {\n\t\t\t\tif (error instanceof strtok3.EndOfStreamError) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\treturn fileType ?? tiffFileType;\n\t\t}\n\n\t\tif (version === 43) {\t// Big TIFF file header\n\t\t\treturn tiffFileType;\n\t\t}\n\t}\n\n\t/**\n\tScan check MPEG 1 or 2 Layer 3 header, or 'layer 0' for ADTS (MPEG sync-word 0xFFE).\n\n\t@param offset - Offset to scan for sync-preamble.\n\t@returns {{ext: string, mime: string}}\n\t*/\n\tscanMpeg(offset) {\n\t\tif (this.check([0xFF, 0xE0], {offset, mask: [0xFF, 0xE0]})) {\n\t\t\tif (this.check([0x10], {offset: offset + 1, mask: [0x16]})) {\n\t\t\t\t// Check for (ADTS) MPEG-2\n\t\t\t\tif (this.check([0x08], {offset: offset + 1, mask: [0x08]})) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\text: 'aac',\n\t\t\t\t\t\tmime: 'audio/aac',\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Must be (ADTS) MPEG-4\n\t\t\t\treturn {\n\t\t\t\t\text: 'aac',\n\t\t\t\t\tmime: 'audio/aac',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// MPEG 1 or 2 Layer 3 header\n\t\t\t// Check for MPEG layer 3\n\t\t\tif (this.check([0x02], {offset: offset + 1, mask: [0x06]})) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'mp3',\n\t\t\t\t\tmime: 'audio/mpeg',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Check for MPEG layer 2\n\t\t\tif (this.check([0x04], {offset: offset + 1, mask: [0x06]})) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'mp2',\n\t\t\t\t\tmime: 'audio/mpeg',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Check for MPEG layer 1\n\t\t\tif (this.check([0x06], {offset: offset + 1, mask: [0x06]})) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'mp1',\n\t\t\t\t\tmime: 'audio/mpeg',\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport const supportedExtensions = new Set(extensions);\nexport const supportedMimeTypes = new Set(mimeTypes);\n"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26],"mappings":";;;;;AAAA,MAAa,kBAAkB;;;;AAI/B,IAAa,mBAAb,cAAsC,MAAM;CACxC,cAAc;AACV,QAAM,gBAAgB;AACtB,OAAK,OAAO;;;AAGpB,IAAa,aAAb,cAAgC,MAAM;CAClC,YAAY,UAAU,6BAA6B;AAC/C,QAAM,QAAQ;AACd,OAAK,OAAO;;;;;;ACZpB,IAAa,uBAAb,MAAkC;CAC9B,cAAc;AACV,OAAK,cAAc;AACnB,OAAK,cAAc;;;;;AAKnB,OAAK,YAAY,EAAE;;CAEvB,MAAM,KAAK,YAAY,YAAY,OAAO;EACtC,MAAM,YAAY,MAAM,KAAK,KAAK,YAAY,UAAU;AACxD,OAAK,UAAU,KAAK,WAAW,SAAS,GAAG,UAAU,CAAC;AACtD,SAAO;;CAEX,MAAM,KAAK,QAAQ,YAAY,OAAO;AAClC,MAAI,OAAO,WAAW,EAClB,QAAO;EAEX,IAAI,YAAY,KAAK,mBAAmB,OAAO;AAC/C,MAAI,CAAC,KAAK,YACN,cAAa,MAAM,KAAK,wBAAwB,OAAO,SAAS,UAAU,EAAE,UAAU;AAE1F,MAAI,cAAc,KAAK,CAAC,UACpB,OAAM,IAAI,kBAAkB;AAEhC,SAAO;;;;;;;CAOX,mBAAmB,QAAQ;EACvB,IAAI,YAAY,OAAO;EACvB,IAAI,YAAY;AAEhB,SAAO,KAAK,UAAU,SAAS,KAAK,YAAY,GAAG;GAC/C,MAAM,WAAW,KAAK,UAAU,KAAK;AACrC,OAAI,CAAC,SACD,OAAM,IAAI,MAAM,6BAA6B;GACjD,MAAM,UAAU,KAAK,IAAI,SAAS,QAAQ,UAAU;AACpD,UAAO,IAAI,SAAS,SAAS,GAAG,QAAQ,EAAE,UAAU;AACpD,gBAAa;AACb,gBAAa;AACb,OAAI,UAAU,SAAS,OAEnB,MAAK,UAAU,KAAK,SAAS,SAAS,QAAQ,CAAC;;AAGvD,SAAO;;CAEX,MAAM,wBAAwB,QAAQ,WAAW;EAC7C,IAAI,YAAY;AAEhB,SAAO,YAAY,OAAO,UAAU,CAAC,KAAK,aAAa;AACnD,OAAI,KAAK,YACL,OAAM,IAAI,YAAY;GAE1B,MAAM,WAAW,MAAM,KAAK,eAAe,OAAO,SAAS,UAAU,EAAE,UAAU;AACjF,OAAI,aAAa,EACb;AACJ,gBAAa;;AAEjB,MAAI,CAAC,aAAa,YAAY,OAAO,OACjC,OAAM,IAAI,kBAAkB;AAEhC,SAAO;;;;;;ACnEf,IAAa,kBAAb,cAAqC,qBAAqB;CACtD,YAAY,QAAQ;AAChB,SAAO;AACP,OAAK,SAAS;;CAElB,MAAM,QAAQ;AACV,SAAO,KAAK,OAAO;;CAEvB,MAAM,QAAQ;AACV,OAAK,OAAO,aAAa;;;;;;;;;;ACLjC,IAAa,sBAAb,cAAyC,gBAAgB;;;;;;;CAOrD,MAAM,eAAe,QAAQ,WAAW;AACpC,MAAI,OAAO,WAAW,EAClB,QAAO;EAEX,MAAM,SAAS,MAAM,KAAK,OAAO,KAAK,IAAI,WAAW,OAAO,OAAO,EAAE,EAAE,KAAK,YAAY,SAAY,OAAO,QAAQ,CAAC;AACpH,MAAI,OAAO,KACP,MAAK,cAAc,OAAO;AAE9B,MAAI,OAAO,OAAO;AACd,UAAO,IAAI,OAAO,MAAM;AACxB,UAAO,OAAO,MAAM;;AAExB,SAAO;;;;;;ACtBf,IAAa,yBAAb,cAA4C,qBAAqB;CAC7D,YAAY,QAAQ;AAChB,SAAO;AACP,OAAK,SAAS;AACd,OAAK,SAAS;;;;;CAKlB,WAAW,QAAQ,OAAO;EACtB,MAAM,UAAU,KAAK,IAAI,MAAM,QAAQ,OAAO,OAAO;AACrD,SAAO,IAAI,MAAM,SAAS,GAAG,QAAQ,CAAC;AAEtC,MAAI,UAAU,MAAM,OAChB,MAAK,SAAS,MAAM,SAAS,QAAQ;MAGrC,MAAK,SAAS;AAElB,SAAO;;;;;;;;CAQX,MAAM,eAAe,QAAQ,WAAW;AACpC,MAAI,OAAO,WAAW,EAClB,QAAO;EACX,IAAI,iBAAiB;AAErB,MAAI,KAAK,OACL,mBAAkB,KAAK,WAAW,QAAQ,KAAK,OAAO;AAG1D,SAAO,iBAAiB,OAAO,UAAU,CAAC,KAAK,aAAa;GACxD,MAAM,SAAS,MAAM,KAAK,OAAO,MAAM;AACvC,OAAI,OAAO,MAAM;AACb,SAAK,cAAc;AACnB;;AAEJ,OAAI,OAAO,MACP,mBAAkB,KAAK,WAAW,OAAO,SAAS,eAAe,EAAE,OAAO,MAAM;;AAGxF,MAAI,CAAC,aAAa,mBAAmB,KAAK,KAAK,YAC3C,OAAM,IAAI,kBAAkB;AAEhC,SAAO;;CAEX,QAAQ;AACJ,OAAK,cAAc;AACnB,SAAO,KAAK,OAAO,QAAQ;;CAE/B,MAAM,QAAQ;AACV,QAAM,KAAK,OAAO;AAClB,OAAK,OAAO,aAAa;;;;;;ACzDjC,SAAgB,oBAAoB,QAAQ;AACxC,KAAI;EACA,MAAM,SAAS,OAAO,UAAU,EAAE,MAAM,QAAQ,CAAC;AACjD,MAAI,kBAAkB,4BAElB,QAAO,IAAI,uBAAuB,OAAO;AAE7C,SAAO,IAAI,oBAAoB,OAAO;UAEnC,OAAO;AACV,MAAI,iBAAiB,UAEjB,QAAO,IAAI,uBAAuB,OAAO,WAAW,CAAC;AAEzD,QAAM;;;;;;;;;ACZd,IAAa,oBAAb,MAA+B;;;;;;CAM3B,YAAY,SAAS;AACjB,OAAK,YAAY,IAAI,WAAW,EAAE;;;;AAIlC,OAAK,WAAW;AAChB,OAAK,UAAU,SAAS;AACxB,MAAI,SAAS,YACT,SAAQ,YAAY,iBAAiB,eAAe;AAChD,QAAK,OAAO;IACd;;;;;;;;CASV,MAAM,UAAU,OAAO,WAAW,KAAK,UAAU;EAC7C,MAAM,aAAa,IAAI,WAAW,MAAM,IAAI;AAE5C,MADY,MAAM,KAAK,WAAW,YAAY,EAAE,UAAU,CAAC,GACjD,MAAM,IACZ,OAAM,IAAI,kBAAkB;AAChC,SAAO,MAAM,IAAI,YAAY,EAAE;;;;;;;;CAQnC,MAAM,UAAU,OAAO,WAAW,KAAK,UAAU;EAC7C,MAAM,aAAa,IAAI,WAAW,MAAM,IAAI;AAE5C,MADY,MAAM,KAAK,WAAW,YAAY,EAAE,UAAU,CAAC,GACjD,MAAM,IACZ,OAAM,IAAI,kBAAkB;AAChC,SAAO,MAAM,IAAI,YAAY,EAAE;;;;;;;CAOnC,MAAM,WAAW,OAAO;AAEpB,MADY,MAAM,KAAK,WAAW,KAAK,WAAW,EAAE,QAAQ,MAAM,KAAK,CAAC,GAC9D,MAAM,IACZ,OAAM,IAAI,kBAAkB;AAChC,SAAO,MAAM,IAAI,KAAK,WAAW,EAAE;;;;;;;CAOvC,MAAM,WAAW,OAAO;AAEpB,MADY,MAAM,KAAK,WAAW,KAAK,WAAW,EAAE,QAAQ,MAAM,KAAK,CAAC,GAC9D,MAAM,IACZ,OAAM,IAAI,kBAAkB;AAChC,SAAO,MAAM,IAAI,KAAK,WAAW,EAAE;;;;;;;CAOvC,MAAM,OAAO,QAAQ;AACjB,MAAI,KAAK,SAAS,SAAS,QAAW;GAClC,MAAM,YAAY,KAAK,SAAS,OAAO,KAAK;AAC5C,OAAI,SAAS,WAAW;AACpB,SAAK,YAAY;AACjB,WAAO;;;AAGf,OAAK,YAAY;AACjB,SAAO;;CAEX,MAAM,QAAQ;AACV,QAAM,KAAK,OAAO;AAClB,QAAM,KAAK,WAAW;;CAE1B,iBAAiB,YAAY,SAAS;AAClC,MAAI,CAAC,KAAK,sBAAsB,IAAI,WAAW,QAAQ,aAAa,UAAa,QAAQ,WAAW,KAAK,SACrG,OAAM,IAAI,MAAM,wEAAwE;AAE5F,SAAO;GAEC,WAAW;GACX,QAAQ;GACR,QAAQ,WAAW;GACnB,UAAU,KAAK;GAChB,GAAG;GACT;;CAEL,QAAQ;AACJ,SAAO,QAAQ,SAAS;;;;;;ACvGhC,MAAM,gBAAgB;AACtB,IAAa,sBAAb,cAAyC,kBAAkB;;;;;;CAMvD,YAAY,cAAc,SAAS;AAC/B,QAAM,QAAQ;AACd,OAAK,eAAe;AACpB,OAAK,WAAW,SAAS,YAAY,EAAE;;;;;;;;CAQ3C,MAAM,WAAW,YAAY,SAAS;EAClC,MAAM,cAAc,KAAK,iBAAiB,YAAY,QAAQ;EAC9D,MAAM,YAAY,YAAY,WAAW,KAAK;AAC9C,MAAI,YAAY,GAAG;AACf,SAAM,KAAK,OAAO,UAAU;AAC5B,UAAO,KAAK,WAAW,YAAY,QAAQ;;AAE/C,MAAI,YAAY,EACZ,OAAM,IAAI,MAAM,wEAAwE;AAE5F,MAAI,YAAY,WAAW,EACvB,QAAO;EAEX,MAAM,YAAY,MAAM,KAAK,aAAa,KAAK,WAAW,SAAS,GAAG,YAAY,OAAO,EAAE,YAAY,UAAU;AACjH,OAAK,YAAY;AACjB,OAAK,CAAC,WAAW,CAAC,QAAQ,cAAc,YAAY,YAAY,OAC5D,OAAM,IAAI,kBAAkB;AAEhC,SAAO;;;;;;;;CAQX,MAAM,WAAW,YAAY,SAAS;EAClC,MAAM,cAAc,KAAK,iBAAiB,YAAY,QAAQ;EAC9D,IAAI,YAAY;AAChB,MAAI,YAAY,UAAU;GACtB,MAAM,YAAY,YAAY,WAAW,KAAK;AAC9C,OAAI,YAAY,GAAG;IACf,MAAM,aAAa,IAAI,WAAW,YAAY,SAAS,UAAU;AACjE,gBAAY,MAAM,KAAK,WAAW,YAAY,EAAE,WAAW,YAAY,WAAW,CAAC;AACnF,eAAW,IAAI,WAAW,SAAS,UAAU,CAAC;AAC9C,WAAO,YAAY;;AAEvB,OAAI,YAAY,EACZ,OAAM,IAAI,MAAM,iDAAiD;;AAGzE,MAAI,YAAY,SAAS,GAAG;AACxB,OAAI;AACA,gBAAY,MAAM,KAAK,aAAa,KAAK,WAAW,SAAS,GAAG,YAAY,OAAO,EAAE,YAAY,UAAU;YAExG,KAAK;AACR,QAAI,SAAS,aAAa,eAAe,iBACrC,QAAO;AAEX,UAAM;;AAEV,OAAK,CAAC,YAAY,aAAc,YAAY,YAAY,OACpD,OAAM,IAAI,kBAAkB;;AAGpC,SAAO;;CAEX,MAAM,OAAO,QAAQ;EAEjB,MAAM,UAAU,KAAK,IAAI,eAAe,OAAO;EAC/C,MAAM,MAAM,IAAI,WAAW,QAAQ;EACnC,IAAI,eAAe;AACnB,SAAO,eAAe,QAAQ;GAC1B,MAAM,YAAY,SAAS;GAC3B,MAAM,YAAY,MAAM,KAAK,WAAW,KAAK,EAAE,QAAQ,KAAK,IAAI,SAAS,UAAU,EAAE,CAAC;AACtF,OAAI,YAAY,EACZ,QAAO;AAEX,mBAAgB;;AAEpB,SAAO;;CAEX,QAAQ;AACJ,SAAO,KAAK,aAAa,OAAO;;CAEpC,MAAM,QAAQ;AACV,SAAO,KAAK,aAAa,OAAO;;CAEpC,uBAAuB;AACnB,SAAO;;;;;;ACjGf,IAAa,kBAAb,cAAqC,kBAAkB;;;;;;CAMnD,YAAY,YAAY,SAAS;AAC7B,QAAM,QAAQ;AACd,OAAK,aAAa;AAClB,OAAK,WAAW;GAAE,GAAG,SAAS,YAAY,EAAE;GAAO,MAAM,WAAW;GAAU;;;;;;;;CAQlF,MAAM,WAAW,YAAY,SAAS;AAClC,MAAI,SAAS,SACT,MAAK,WAAW,QAAQ;EAE5B,MAAM,YAAY,MAAM,KAAK,WAAW,YAAY,QAAQ;AAC5D,OAAK,YAAY;AACjB,SAAO;;;;;;;;CAQX,MAAM,WAAW,YAAY,SAAS;EAClC,MAAM,cAAc,KAAK,iBAAiB,YAAY,QAAQ;EAC9D,MAAM,aAAa,KAAK,IAAI,KAAK,WAAW,SAAS,YAAY,UAAU,YAAY,OAAO;AAC9F,MAAK,CAAC,YAAY,aAAc,aAAa,YAAY,OACrD,OAAM,IAAI,kBAAkB;AAEhC,aAAW,IAAI,KAAK,WAAW,SAAS,YAAY,UAAU,YAAY,WAAW,WAAW,CAAC;AACjG,SAAO;;CAEX,QAAQ;AACJ,SAAO,MAAM,OAAO;;CAExB,uBAAuB;AACnB,SAAO;;CAEX,YAAY,UAAU;AAClB,OAAK,WAAW;;;;;;AC/CxB,IAAa,gBAAb,cAAmC,kBAAkB;;;;;;CAMjD,YAAY,MAAM,SAAS;AACvB,QAAM,QAAQ;AACd,OAAK,OAAO;AACZ,OAAK,WAAW;GAAE,GAAG,SAAS,YAAY,EAAE;GAAO,MAAM,KAAK;GAAM,UAAU,KAAK;GAAQ;;;;;;;;CAQ/F,MAAM,WAAW,YAAY,SAAS;AAClC,MAAI,SAAS,SACT,MAAK,WAAW,QAAQ;EAE5B,MAAM,YAAY,MAAM,KAAK,WAAW,YAAY,QAAQ;AAC5D,OAAK,YAAY;AACjB,SAAO;;;;;;;;CAQX,MAAM,WAAW,QAAQ,SAAS;EAC9B,MAAM,cAAc,KAAK,iBAAiB,QAAQ,QAAQ;EAC1D,MAAM,aAAa,KAAK,IAAI,KAAK,KAAK,OAAO,YAAY,UAAU,YAAY,OAAO;AACtF,MAAK,CAAC,YAAY,aAAc,aAAa,YAAY,OACrD,OAAM,IAAI,kBAAkB;EAEhC,MAAM,cAAc,MAAM,KAAK,KAAK,MAAM,YAAY,UAAU,YAAY,WAAW,WAAW,CAAC,aAAa;AAChH,SAAO,IAAI,IAAI,WAAW,YAAY,CAAC;AACvC,SAAO;;CAEX,QAAQ;AACJ,SAAO,MAAM,OAAO;;CAExB,uBAAuB;AACnB,SAAO;;CAEX,YAAY,UAAU;AAClB,OAAK,WAAW;;;;;;;;;;;;;AClBxB,SAAgB,cAAc,WAAW,SAAS;CAC9C,MAAM,kBAAkB,oBAAoB,UAAU;CACtD,MAAM,WAAW,WAAW,EAAE;CAC9B,MAAM,eAAe,SAAS;AAC9B,UAAS,UAAU,YAAY;AAC3B,QAAM,gBAAgB,OAAO;AAC7B,MAAI,aACA,QAAO,cAAc;;AAG7B,QAAO,IAAI,oBAAoB,iBAAiB,SAAS;;;;;;;;AAQ7D,SAAgB,WAAW,YAAY,SAAS;AAC5C,QAAO,IAAI,gBAAgB,YAAY,QAAQ;;;;;;;;AAQnD,SAAgB,SAAS,MAAM,SAAS;AACpC,QAAO,IAAI,cAAc,MAAM,QAAQ;;;;;ACzD3C,IAAa,gBAAb,MAAa,sBAAsB,kBAAkB;;;;;CAKjD,aAAa,SAAS,gBAAgB;EAClC,MAAM,aAAa,MAAMA,KAAO,gBAAgB,IAAI;AAEpD,SAAO,IAAI,cAAc,YAAY,EAAE,UAAU;GAAE,MAAM;GAAgB,OAD5D,MAAM,WAAW,MAAM,EACgD;GAAM,EAAE,CAAC;;CAEjG,YAAY,YAAY,SAAS;AAC7B,QAAM,QAAQ;AACd,OAAK,aAAa;AAClB,OAAK,WAAW,QAAQ;;;;;;;;CAQ5B,MAAM,WAAW,YAAY,SAAS;EAClC,MAAM,cAAc,KAAK,iBAAiB,YAAY,QAAQ;AAC9D,OAAK,WAAW,YAAY;AAC5B,MAAI,YAAY,WAAW,EACvB,QAAO;EACX,MAAM,MAAM,MAAM,KAAK,WAAW,KAAK,YAAY,GAAG,YAAY,QAAQ,YAAY,SAAS;AAC/F,OAAK,YAAY,IAAI;AACrB,MAAI,IAAI,YAAY,YAAY,WAAW,CAAC,WAAW,CAAC,QAAQ,WAC5D,OAAM,IAAI,kBAAkB;AAEhC,SAAO,IAAI;;;;;;;;CAQf,MAAM,WAAW,YAAY,SAAS;EAClC,MAAM,cAAc,KAAK,iBAAiB,YAAY,QAAQ;EAC9D,MAAM,MAAM,MAAM,KAAK,WAAW,KAAK,YAAY,GAAG,YAAY,QAAQ,YAAY,SAAS;AAC/F,MAAK,CAAC,YAAY,aAAc,IAAI,YAAY,YAAY,OACxD,OAAM,IAAI,kBAAkB;AAEhC,SAAO,IAAI;;CAEf,MAAM,QAAQ;AACV,QAAM,KAAK,WAAW,OAAO;AAC7B,SAAO,MAAM,OAAO;;CAExB,YAAY,UAAU;AAClB,OAAK,WAAW;;CAEpB,uBAAuB;AACnB,SAAO;;;;;;ACrCf,MAAa,WAAW,cAAc;;;;ACrBtC,MAAM,qBAAqB;CACvB,KAAM;CAAK,KAAM;CAAK,KAAM;CAAK,KAAM;CAAK,KAAM;CAAK,KAAM;CAC7D,KAAM;CAAK,KAAM;CAAK,KAAM;CAAK,KAAM;CAAK,KAAM;CAAK,KAAM;CAC7D,KAAM;CAAK,KAAM;CAAK,KAAM;CAAK,KAAM;CAAK,KAAM;CAAK,KAAM;CAC7D,KAAM;CAAK,KAAM;CAAK,KAAM;CAAK,KAAM;CAAK,KAAM;CAAK,KAAM;CAC7D,KAAM;CAAK,KAAM;CAAK,KAAM;CAC/B;AACD,MAAM,uBAAuB,EAAE;AAC/B,KAAK,MAAM,CAAC,MAAM,SAAS,OAAO,QAAQ,mBAAmB,CACzD,sBAAqB,QAAQ,OAAO,SAAS,MAAM,GAAG;AAE1D,IAAI;AAEJ,SAAS,cAAc;AACnB,KAAI,OAAO,WAAW,gBAAgB,YAClC,QAAO;AACX,QAAQ,iBAAiB,QAAQ,iBAAiB,KAAK,IAAI,eAAgB,eAAe,IAAI,WAAW,YAAY,QAAQ;;AAOjI,MAAM,QAAQ,KAAK;AACnB,MAAM,cAAc;;;;AAIpB,SAAgB,WAAW,OAAO,WAAW,SAAS;AAClD,SAAQ,SAAS,aAAa,EAA9B;EACI,KAAK;EACL,KAAK,QAAQ;GACT,MAAM,MAAM,aAAa;AACzB,UAAO,MAAM,IAAI,OAAO,MAAM,GAAG,WAAW,MAAM;;EAEtD,KAAK,WACD,QAAO,cAAc,MAAM;EAC/B,KAAK;EACL,KAAK,QACD,QAAO,YAAY,MAAM;EAC7B,KAAK;EACL,KAAK,aACD,QAAO,aAAa,MAAM;EAC9B,KAAK,eACD,QAAO,kBAAkB,MAAM;EACnC,QACI,OAAM,IAAI,WAAW,aAAa,SAAS,iBAAiB;;;AAgCxE,SAAS,WAAW,OAAO,OAAO;AAC9B,KAAI,MAAM,WAAW,EACjB;AACJ,OAAM,KAAK,OAAO,aAAa,MAAM,MAAM,MAAM,CAAC;AAClD,OAAM,SAAS;;AAEnB,SAAS,aAAa,OAAO,OAAO,UAAU;AAC1C,OAAM,KAAK,SAAS;AACpB,KAAI,MAAM,UAAU,MAChB,YAAW,OAAO,MAAM;;AAEhC,SAAS,cAAc,OAAO,OAAO,IAAI;AACrC,KAAI,MAAM,OAAQ;AACd,eAAa,OAAO,OAAO,GAAG;AAC9B;;AAEJ,OAAM;AACN,cAAa,OAAO,OAAO,SAAU,MAAM,IAAI;AAC/C,cAAa,OAAO,OAAO,SAAU,KAAK,MAAO;;AAErD,SAAS,WAAW,OAAO;CACvB,MAAM,QAAQ,EAAE;CAChB,MAAM,QAAQ,EAAE;CAChB,IAAI,IAAI;AAER,KAAI,MAAM,UAAU,KAChB,MAAM,OAAO,OACb,MAAM,OAAO,OACb,MAAM,OAAO,IACb,KAAI;AAER,QAAO,IAAI,MAAM,QAAQ;EACrB,MAAM,KAAK,MAAM;AACjB,MAAI,MAAM,KAAM;AACZ,gBAAa,OAAO,OAAO,GAAG;AAC9B;AACA;;AAGJ,MAAI,KAAK,OAAQ,KAAK,KAAM;AACxB,gBAAa,OAAO,OAAO,YAAY;AACvC;AACA;;AAGJ,MAAI,MAAM,KAAM;AACZ,OAAI,IAAI,KAAK,MAAM,QAAQ;AACvB,iBAAa,OAAO,OAAO,YAAY;AACvC;AACA;;GAEJ,MAAM,KAAK,MAAM,IAAI;AACrB,QAAK,KAAK,SAAU,KAAM;AACtB,iBAAa,OAAO,OAAO,YAAY;AACvC;AACA;;AAGJ,gBAAa,OAAO,QADP,KAAK,OAAS,IAAM,KAAK,GACR;AAC9B,QAAK;AACL;;AAGJ,MAAI,MAAM,KAAM;AACZ,OAAI,IAAI,KAAK,MAAM,QAAQ;AACvB,iBAAa,OAAO,OAAO,YAAY;AACvC;AACA;;GAEJ,MAAM,KAAK,MAAM,IAAI;GACrB,MAAM,KAAK,MAAM,IAAI;AAKrB,OAAI,GAJW,KAAK,SAAU,QACzB,KAAK,SAAU,OAChB,EAAE,OAAO,OAAQ,KAAK,QACtB,EAAE,OAAO,OAAQ,MAAM,OACf;AACR,iBAAa,OAAO,OAAO,YAAY;AACvC;AACA;;AAKJ,gBAAa,OAAO,QAHP,KAAK,OAAS,MACrB,KAAK,OAAS,IACf,KAAK,GACoB;AAC9B,QAAK;AACL;;AAGJ,MAAI,IAAI,KAAK,MAAM,QAAQ;AACvB,gBAAa,OAAO,OAAO,YAAY;AACvC;AACA;;EAEJ,MAAM,KAAK,MAAM,IAAI;EACrB,MAAM,KAAK,MAAM,IAAI;EACrB,MAAM,KAAK,MAAM,IAAI;AAMrB,MAAI,GALW,KAAK,SAAU,QACzB,KAAK,SAAU,QACf,KAAK,SAAU,OAChB,EAAE,OAAO,OAAQ,KAAK,QACtB,EAAE,OAAO,OAAQ,KAAK,OACd;AACR,gBAAa,OAAO,OAAO,YAAY;AACvC;AACA;;AAMJ,gBAAc,OAAO,QAJR,KAAK,MAAS,MACrB,KAAK,OAAS,MACd,KAAK,OAAS,IACf,KAAK,GACqB;AAC/B,OAAK;;AAET,YAAW,OAAO,MAAM;AACxB,QAAO,MAAM,KAAK,GAAG;;AAEzB,SAAS,cAAc,OAAO;CAC1B,MAAM,QAAQ,EAAE;CAChB,MAAM,QAAQ,EAAE;CAChB,MAAM,MAAM,MAAM;CAClB,IAAI,IAAI;AACR,QAAO,IAAI,IAAI,KAAK;EAChB,MAAM,KAAK,MAAM,KAAM,MAAM,IAAI,MAAM;AACvC,OAAK;AAEL,MAAI,MAAM,SAAU,MAAM,OAAQ;AAC9B,OAAI,IAAI,IAAI,KAAK;IACb,MAAM,KAAK,MAAM,KAAM,MAAM,IAAI,MAAM;AACvC,QAAI,MAAM,SAAU,MAAM,OAAQ;AAC9B,kBAAa,OAAO,OAAO,GAAG;AAC9B,kBAAa,OAAO,OAAO,GAAG;AAC9B,UAAK;UAGL,cAAa,OAAO,OAAO,YAAY;SAI3C,cAAa,OAAO,OAAO,YAAY;AAE3C;;AAGJ,MAAI,MAAM,SAAU,MAAM,OAAQ;AAC9B,gBAAa,OAAO,OAAO,YAAY;AACvC;;AAEJ,eAAa,OAAO,OAAO,GAAG;;AAGlC,KAAI,IAAI,IACJ,cAAa,OAAO,OAAO,YAAY;AAE3C,YAAW,OAAO,MAAM;AACxB,QAAO,MAAM,KAAK,GAAG;;AAEzB,SAAS,YAAY,OAAO;CACxB,MAAM,QAAQ,EAAE;AAChB,MAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,OAAO;EAC1C,MAAM,MAAM,KAAK,IAAI,MAAM,QAAQ,IAAI,MAAM;EAC7C,MAAM,QAAQ,IAAI,MAAM,MAAM,EAAE;AAChC,OAAK,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,KAAK,KAAK,IACjC,OAAM,KAAK,MAAM,KAAK;AAE1B,QAAM,KAAK,OAAO,aAAa,MAAM,MAAM,MAAM,CAAC;;AAEtD,QAAO,MAAM,KAAK,GAAG;;AAEzB,SAAS,aAAa,OAAO;CACzB,MAAM,QAAQ,EAAE;AAChB,MAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,OAAO;EAC1C,MAAM,MAAM,KAAK,IAAI,MAAM,QAAQ,IAAI,MAAM;EAC7C,MAAM,QAAQ,IAAI,MAAM,MAAM,EAAE;AAChC,OAAK,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,KAAK,KAAK,IACjC,OAAM,KAAK,MAAM;AAErB,QAAM,KAAK,OAAO,aAAa,MAAM,MAAM,MAAM,CAAC;;AAEtD,QAAO,MAAM,KAAK,GAAG;;AAEzB,SAAS,kBAAkB,OAAO;CAC9B,MAAM,QAAQ,EAAE;CAChB,IAAI,MAAM;AACV,MAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;EACnC,MAAM,IAAI,MAAM;EAChB,MAAM,QAAQ,KAAK,OAAQ,KAAK,MAAO,mBAAmB,KAAK;AAC/D,SAAO,UAAU,QAAQ,UAAU,KAAK,IAAI,QAAQ,OAAO,aAAa,EAAE;AAC1E,MAAI,IAAI,UAAU,OAAO;AACrB,SAAM,KAAK,IAAI;AACf,SAAM;;;AAGd,KAAI,IACA,OAAM,KAAK,IAAI;AACnB,QAAO,MAAM,KAAK,GAAG;;;;;AC7QzB,SAAS,GAAG,OAAO;AACf,QAAO,IAAI,SAAS,MAAM,QAAQ,MAAM,WAAW;;AAKvD,MAAa,QAAQ;CACjB,KAAK;CACL,IAAI,OAAO,QAAQ;AACf,SAAO,GAAG,MAAM,CAAC,SAAS,OAAO;;CAErC,IAAI,OAAO,QAAQ,OAAO;AACtB,KAAG,MAAM,CAAC,SAAS,QAAQ,MAAM;AACjC,SAAO,SAAS;;CAEvB;;;;AAID,MAAa,YAAY;CACrB,KAAK;CACL,IAAI,OAAO,QAAQ;AACf,SAAO,GAAG,MAAM,CAAC,UAAU,QAAQ,KAAK;;CAE5C,IAAI,OAAO,QAAQ,OAAO;AACtB,KAAG,MAAM,CAAC,UAAU,QAAQ,OAAO,KAAK;AACxC,SAAO,SAAS;;CAEvB;;;;AAID,MAAa,YAAY;CACrB,KAAK;CACL,IAAI,OAAO,QAAQ;AACf,SAAO,GAAG,MAAM,CAAC,UAAU,OAAO;;CAEtC,IAAI,OAAO,QAAQ,OAAO;AACtB,KAAG,MAAM,CAAC,UAAU,QAAQ,MAAM;AAClC,SAAO,SAAS;;CAEvB;;;;AAoCD,MAAa,YAAY;CACrB,KAAK;CACL,IAAI,OAAO,QAAQ;AACf,SAAO,GAAG,MAAM,CAAC,UAAU,QAAQ,KAAK;;CAE5C,IAAI,OAAO,QAAQ,OAAO;AACtB,KAAG,MAAM,CAAC,UAAU,QAAQ,OAAO,KAAK;AACxC,SAAO,SAAS;;CAEvB;;;;AAID,MAAa,YAAY;CACrB,KAAK;CACL,IAAI,OAAO,QAAQ;AACf,SAAO,GAAG,MAAM,CAAC,UAAU,OAAO;;CAEtC,IAAI,OAAO,QAAQ,OAAO;AACtB,KAAG,MAAM,CAAC,UAAU,QAAQ,MAAM;AAClC,SAAO,SAAS;;CAEvB;;;;AA2ED,MAAa,WAAW;CACpB,KAAK;CACL,IAAI,OAAO,QAAQ;AACf,SAAO,GAAG,MAAM,CAAC,SAAS,OAAO;;CAErC,IAAI,OAAO,QAAQ,OAAO;AACtB,KAAG,MAAM,CAAC,SAAS,QAAQ,MAAM;AACjC,SAAO,SAAS;;CAEvB;;;;AAiBD,MAAa,YAAY;CACrB,KAAK;CACL,IAAI,OAAO,QAAQ;AACf,SAAO,GAAG,MAAM,CAAC,aAAa,QAAQ,KAAK;;CAE/C,IAAI,OAAO,QAAQ,OAAO;AACtB,KAAG,MAAM,CAAC,aAAa,QAAQ,OAAO,KAAK;AAC3C,SAAO,SAAS;;CAEvB;;;;;AA0KD,IAAa,aAAb,MAAwB;CACpB,YAAY,KAAK,UAAU;AACvB,OAAK,MAAM;AACX,OAAK,WAAW;;CAEpB,IAAI,MAAM,SAAS,GAAG;AAElB,SAAO,WADO,KAAK,SAAS,QAAQ,SAAS,KAAK,IAAI,EAC7B,KAAK,SAAS;;;;;;;;;;CCjY/C,IAAI,IAAI;CACR,IAAI,IAAI,IAAI;CACZ,IAAI,IAAI,IAAI;CACZ,IAAI,IAAI,IAAI;CACZ,IAAI,IAAI,IAAI;CACZ,IAAI,IAAI,IAAI;;;;;;;;;;;;;;AAgBZ,QAAO,UAAU,SAAU,KAAK,SAAS;AACvC,YAAU,WAAW,EAAE;EACvB,IAAI,OAAO,OAAO;AAClB,MAAI,SAAS,YAAY,IAAI,SAAS,EACpC,QAAO,MAAM,IAAI;WACR,SAAS,YAAY,SAAS,IAAI,CAC3C,QAAO,QAAQ,OAAO,QAAQ,IAAI,GAAG,SAAS,IAAI;AAEpD,QAAM,IAAI,MACR,0DACE,KAAK,UAAU,IAAI,CACtB;;;;;;;;;CAWH,SAAS,MAAM,KAAK;AAClB,QAAM,OAAO,IAAI;AACjB,MAAI,IAAI,SAAS,IACf;EAEF,IAAI,QAAQ,mIAAmI,KAC7I,IACD;AACD,MAAI,CAAC,MACH;EAEF,IAAI,IAAI,WAAW,MAAM,GAAG;AAE5B,WADY,MAAM,MAAM,MAAM,aAAa,EAC3C;GACE,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK,IACH,QAAO,IAAI;GACb,KAAK;GACL,KAAK;GACL,KAAK,IACH,QAAO,IAAI;GACb,KAAK;GACL,KAAK;GACL,KAAK,IACH,QAAO,IAAI;GACb,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK,IACH,QAAO,IAAI;GACb,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK,IACH,QAAO,IAAI;GACb,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK,IACH,QAAO,IAAI;GACb,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK,KACH,QAAO;GACT,QACE;;;;;;;;;;CAYN,SAAS,SAAS,IAAI;EACpB,IAAI,QAAQ,KAAK,IAAI,GAAG;AACxB,MAAI,SAAS,EACX,QAAO,KAAK,MAAM,KAAK,EAAE,GAAG;AAE9B,MAAI,SAAS,EACX,QAAO,KAAK,MAAM,KAAK,EAAE,GAAG;AAE9B,MAAI,SAAS,EACX,QAAO,KAAK,MAAM,KAAK,EAAE,GAAG;AAE9B,MAAI,SAAS,EACX,QAAO,KAAK,MAAM,KAAK,EAAE,GAAG;AAE9B,SAAO,KAAK;;;;;;;;;CAWd,SAAS,QAAQ,IAAI;EACnB,IAAI,QAAQ,KAAK,IAAI,GAAG;AACxB,MAAI,SAAS,EACX,QAAO,OAAO,IAAI,OAAO,GAAG,MAAM;AAEpC,MAAI,SAAS,EACX,QAAO,OAAO,IAAI,OAAO,GAAG,OAAO;AAErC,MAAI,SAAS,EACX,QAAO,OAAO,IAAI,OAAO,GAAG,SAAS;AAEvC,MAAI,SAAS,EACX,QAAO,OAAO,IAAI,OAAO,GAAG,SAAS;AAEvC,SAAO,KAAK;;;;;CAOd,SAAS,OAAO,IAAI,OAAO,GAAG,MAAM;EAClC,IAAI,WAAW,SAAS,IAAI;AAC5B,SAAO,KAAK,MAAM,KAAK,EAAE,GAAG,MAAM,QAAQ,WAAW,MAAM;;;;;;;;;;;CC1J7D,SAAS,MAAM,KAAK;AACnB,cAAY,QAAQ;AACpB,cAAY,UAAU;AACtB,cAAY,SAAS;AACrB,cAAY,UAAU;AACtB,cAAY,SAAS;AACrB,cAAY,UAAU;AACtB,cAAY;AACZ,cAAY,UAAU;AAEtB,SAAO,KAAK,IAAI,CAAC,SAAQ,QAAO;AAC/B,eAAY,OAAO,IAAI;IACtB;;;;AAMF,cAAY,QAAQ,EAAE;AACtB,cAAY,QAAQ,EAAE;;;;;;AAOtB,cAAY,aAAa,EAAE;;;;;;;EAQ3B,SAAS,YAAY,WAAW;GAC/B,IAAI,OAAO;AAEX,QAAK,IAAI,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AAC1C,YAAS,QAAQ,KAAK,OAAQ,UAAU,WAAW,EAAE;AACrD,YAAQ;;AAGT,UAAO,YAAY,OAAO,KAAK,IAAI,KAAK,GAAG,YAAY,OAAO;;AAE/D,cAAY,cAAc;;;;;;;;EAS1B,SAAS,YAAY,WAAW;GAC/B,IAAI;GACJ,IAAI,iBAAiB;GACrB,IAAI;GACJ,IAAI;GAEJ,SAAS,MAAM,GAAG,MAAM;AAEvB,QAAI,CAAC,MAAM,QACV;IAGD,MAAM,OAAO;IAGb,MAAM,OAAO,uBAAO,IAAI,MAAM,CAAC;AAE/B,SAAK,OADM,QAAQ,YAAY;AAE/B,SAAK,OAAO;AACZ,SAAK,OAAO;AACZ,eAAW;AAEX,SAAK,KAAK,YAAY,OAAO,KAAK,GAAG;AAErC,QAAI,OAAO,KAAK,OAAO,SAEtB,MAAK,QAAQ,KAAK;IAInB,IAAI,QAAQ;AACZ,SAAK,KAAK,KAAK,GAAG,QAAQ,kBAAkB,OAAO,WAAW;AAE7D,SAAI,UAAU,KACb,QAAO;AAER;KACA,MAAM,YAAY,YAAY,WAAW;AACzC,SAAI,OAAO,cAAc,YAAY;MACpC,MAAM,MAAM,KAAK;AACjB,cAAQ,UAAU,KAAK,MAAM,IAAI;AAGjC,WAAK,OAAO,OAAO,EAAE;AACrB;;AAED,YAAO;MACN;AAGF,gBAAY,WAAW,KAAK,MAAM,KAAK;AAGvC,KADc,KAAK,OAAO,YAAY,KAChC,MAAM,MAAM,KAAK;;AAGxB,SAAM,YAAY;AAClB,SAAM,YAAY,YAAY,WAAW;AACzC,SAAM,QAAQ,YAAY,YAAY,UAAU;AAChD,SAAM,SAAS;AACf,SAAM,UAAU,YAAY;AAE5B,UAAO,eAAe,OAAO,WAAW;IACvC,YAAY;IACZ,cAAc;IACd,WAAW;AACV,SAAI,mBAAmB,KACtB,QAAO;AAER,SAAI,oBAAoB,YAAY,YAAY;AAC/C,wBAAkB,YAAY;AAC9B,qBAAe,YAAY,QAAQ,UAAU;;AAG9C,YAAO;;IAER,MAAK,MAAK;AACT,sBAAiB;;IAElB,CAAC;AAGF,OAAI,OAAO,YAAY,SAAS,WAC/B,aAAY,KAAK,MAAM;AAGxB,UAAO;;EAGR,SAAS,OAAO,WAAW,WAAW;GACrC,MAAM,WAAW,YAAY,KAAK,aAAa,OAAO,cAAc,cAAc,MAAM,aAAa,UAAU;AAC/G,YAAS,MAAM,KAAK;AACpB,UAAO;;;;;;;;;EAUR,SAAS,OAAO,YAAY;AAC3B,eAAY,KAAK,WAAW;AAC5B,eAAY,aAAa;AAEzB,eAAY,QAAQ,EAAE;AACtB,eAAY,QAAQ,EAAE;GAEtB,MAAM,SAAS,OAAO,eAAe,WAAW,aAAa,IAC3D,MAAM,CACN,QAAQ,QAAQ,IAAI,CACpB,MAAM,IAAI,CACV,OAAO,QAAQ;AAEjB,QAAK,MAAM,MAAM,MAChB,KAAI,GAAG,OAAO,IACb,aAAY,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC;OAEnC,aAAY,MAAM,KAAK,GAAG;;;;;;;;;;EAa7B,SAAS,gBAAgB,QAAQ,UAAU;GAC1C,IAAI,cAAc;GAClB,IAAI,gBAAgB;GACpB,IAAI,YAAY;GAChB,IAAI,aAAa;AAEjB,UAAO,cAAc,OAAO,OAC3B,KAAI,gBAAgB,SAAS,WAAW,SAAS,mBAAmB,OAAO,gBAAgB,SAAS,mBAAmB,KAEtH,KAAI,SAAS,mBAAmB,KAAK;AACpC,gBAAY;AACZ,iBAAa;AACb;UACM;AACN;AACA;;YAES,cAAc,IAAI;AAE5B,oBAAgB,YAAY;AAC5B;AACA,kBAAc;SAEd,QAAO;AAKT,UAAO,gBAAgB,SAAS,UAAU,SAAS,mBAAmB,IACrE;AAGD,UAAO,kBAAkB,SAAS;;;;;;;;EASnC,SAAS,UAAU;GAClB,MAAM,aAAa,CAClB,GAAG,YAAY,OACf,GAAG,YAAY,MAAM,KAAI,cAAa,MAAM,UAAU,CACtD,CAAC,KAAK,IAAI;AACX,eAAY,OAAO,GAAG;AACtB,UAAO;;;;;;;;;EAUR,SAAS,QAAQ,MAAM;AACtB,QAAK,MAAM,QAAQ,YAAY,MAC9B,KAAI,gBAAgB,MAAM,KAAK,CAC9B,QAAO;AAIT,QAAK,MAAM,MAAM,YAAY,MAC5B,KAAI,gBAAgB,MAAM,GAAG,CAC5B,QAAO;AAIT,UAAO;;;;;;;;;EAUR,SAAS,OAAO,KAAK;AACpB,OAAI,eAAe,MAClB,QAAO,IAAI,SAAS,IAAI;AAEzB,UAAO;;;;;;EAOR,SAAS,UAAU;AAClB,WAAQ,KAAK,wIAAwI;;AAGtJ,cAAY,OAAO,YAAY,MAAM,CAAC;AAEtC,SAAO;;AAGR,QAAO,UAAU;;;;;;;;;AC7RjB,SAAQ,aAAa;AACrB,SAAQ,OAAO;AACf,SAAQ,OAAO;AACf,SAAQ,YAAY;AACpB,SAAQ,UAAU,cAAc;AAChC,SAAQ,iBAAiB;EACxB,IAAI,SAAS;AAEb,eAAa;AACZ,OAAI,CAAC,QAAQ;AACZ,aAAS;AACT,YAAQ,KAAK,wIAAwI;;;KAGpJ;;;;AAMJ,SAAQ,SAAS;EAChB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;;;;;;CAWD,SAAS,YAAY;AAIpB,MAAI,OAAO,WAAW,eAAe,OAAO,YAAY,OAAO,QAAQ,SAAS,cAAc,OAAO,QAAQ,QAC5G,QAAO;AAIR,MAAI,OAAO,cAAc,eAAe,UAAU,aAAa,UAAU,UAAU,aAAa,CAAC,MAAM,wBAAwB,CAC9H,QAAO;EAGR,IAAI;AAKJ,SAAQ,OAAO,aAAa,eAAe,SAAS,mBAAmB,SAAS,gBAAgB,SAAS,SAAS,gBAAgB,MAAM,oBAEtI,OAAO,WAAW,eAAe,OAAO,YAAY,OAAO,QAAQ,WAAY,OAAO,QAAQ,aAAa,OAAO,QAAQ,UAG1H,OAAO,cAAc,eAAe,UAAU,cAAc,IAAI,UAAU,UAAU,aAAa,CAAC,MAAM,iBAAiB,KAAK,SAAS,EAAE,IAAI,GAAG,IAAI,MAEpJ,OAAO,cAAc,eAAe,UAAU,aAAa,UAAU,UAAU,aAAa,CAAC,MAAM,qBAAqB;;;;;;;CAS3H,SAAS,WAAW,MAAM;AACzB,OAAK,MAAM,KAAK,YAAY,OAAO,MAClC,KAAK,aACJ,KAAK,YAAY,QAAQ,OAC1B,KAAK,MACJ,KAAK,YAAY,QAAQ,OAC1B,MAAM,OAAO,QAAQ,SAAS,KAAK,KAAK;AAEzC,MAAI,CAAC,KAAK,UACT;EAGD,MAAM,IAAI,YAAY,KAAK;AAC3B,OAAK,OAAO,GAAG,GAAG,GAAG,iBAAiB;EAKtC,IAAI,QAAQ;EACZ,IAAI,QAAQ;AACZ,OAAK,GAAG,QAAQ,gBAAe,UAAS;AACvC,OAAI,UAAU,KACb;AAED;AACA,OAAI,UAAU,KAGb,SAAQ;IAER;AAEF,OAAK,OAAO,OAAO,GAAG,EAAE;;;;;;;;;;AAWzB,SAAQ,MAAM,QAAQ,SAAS,QAAQ,cAAc;;;;;;;CAQrD,SAAS,KAAK,YAAY;AACzB,MAAI;AACH,OAAI,WACH,SAAQ,QAAQ,QAAQ,SAAS,WAAW;OAE5C,SAAQ,QAAQ,WAAW,QAAQ;WAE5B,OAAO;;;;;;;;CAYjB,SAAS,OAAO;EACf,IAAI;AACJ,MAAI;AACH,OAAI,QAAQ,QAAQ,QAAQ,QAAQ,IAAI,QAAQ,QAAQ,QAAQ,QAAQ;WAChE,OAAO;AAMhB,MAAI,CAAC,KAAK,OAAO,YAAY,eAAe,SAAS,QACpD,KAAI,QAAQ,IAAI;AAGjB,SAAO;;;;;;;;;;;;CAcR,SAAS,eAAe;AACvB,MAAI;AAGH,UAAO;WACC,OAAO;;AAMjB,QAAO,2BAA8B,QAAQ;CAE7C,MAAM,EAAC,eAAc,OAAO;;;;AAM5B,YAAW,IAAI,SAAU,GAAG;AAC3B,MAAI;AACH,UAAO,KAAK,UAAU,EAAE;WAChB,OAAO;AACf,UAAO,iCAAiC,MAAM;;;;;;;;;;;CCzQhD,MAAM,gBAAc,MAAM;CAC1B,MAAM,iBAAe,OAAO;;;;AAM5B,SAAQ,OAAO;AACf,SAAQ,MAAM;AACd,SAAQ,aAAa;AACrB,SAAQ,OAAO;AACf,SAAQ,OAAO;AACf,SAAQ,YAAY;AACpB,SAAQ,UAAU,KAAK,gBAChB,IACN,wIACA;;;;AAMD,SAAQ,SAAS;EAAC;EAAG;EAAG;EAAG;EAAG;EAAG;EAAE;AAEnC,KAAI;EAGH,MAAM,0BAAwB,iBAAiB;AAE/C,MAAI,kBAAkB,cAAc,UAAU,eAAe,SAAS,EACrE,SAAQ,SAAS;GAChB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;UAEM,OAAO;;;;;;AAUhB,SAAQ,cAAc,OAAO,KAAK,QAAQ,IAAI,CAAC,QAAO,QAAO;AAC5D,SAAO,WAAW,KAAK,IAAI;GAC1B,CAAC,QAAQ,KAAK,QAAQ;EAEvB,MAAM,OAAO,IACX,UAAU,EAAE,CACZ,aAAa,CACb,QAAQ,cAAc,GAAG,MAAM;AAC/B,UAAO,EAAE,aAAa;IACrB;EAGH,IAAI,MAAM,QAAQ,IAAI;AACtB,MAAI,2BAA2B,KAAK,IAAI,CACvC,OAAM;WACI,6BAA6B,KAAK,IAAI,CAChD,OAAM;WACI,QAAQ,OAClB,OAAM;MAEN,OAAM,OAAO,IAAI;AAGlB,MAAI,QAAQ;AACZ,SAAO;IACL,EAAE,CAAC;;;;CAMN,SAAS,YAAY;AACpB,SAAO,YAAY,QAAQ,cAC1B,QAAQ,QAAQ,YAAY,OAAO,GACnC,IAAI,OAAO,QAAQ,OAAO,GAAG;;;;;;;CAS/B,SAAS,WAAW,MAAM;EACzB,MAAM,EAAC,WAAW,MAAM,cAAa;AAErC,MAAI,WAAW;GACd,MAAM,IAAI,KAAK;GACf,MAAM,YAAY,YAAc,IAAI,IAAI,IAAI,SAAS;GACrD,MAAM,SAAS,KAAK,UAAU,KAAK,KAAK;AAExC,QAAK,KAAK,SAAS,KAAK,GAAG,MAAM,KAAK,CAAC,KAAK,OAAO,OAAO;AAC1D,QAAK,KAAK,YAAY,OAAO,OAAO,QAAQ,SAAS,KAAK,KAAK,GAAG,UAAY;QAE9E,MAAK,KAAK,SAAS,GAAG,OAAO,MAAM,KAAK;;CAI1C,SAAS,UAAU;AAClB,MAAI,QAAQ,YAAY,SACvB,QAAO;AAER,0BAAO,IAAI,MAAM,EAAC,aAAa,GAAG;;;;;CAOnC,SAAS,IAAI,GAAG,MAAM;AACrB,SAAO,QAAQ,OAAO,MAAM,KAAK,kBAAkB,QAAQ,aAAa,GAAG,KAAK,GAAG,KAAK;;;;;;;;CASzF,SAAS,KAAK,YAAY;AACzB,MAAI,WACH,SAAQ,IAAI,QAAQ;MAIpB,QAAO,QAAQ,IAAI;;;;;;;;CAWrB,SAAS,OAAO;AACf,SAAO,QAAQ,IAAI;;;;;;;;CAUpB,SAAS,KAAK,OAAO;AACpB,QAAM,cAAc,EAAE;EAEtB,MAAM,OAAO,OAAO,KAAK,QAAQ,YAAY;AAC7C,OAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,IAChC,OAAM,YAAY,KAAK,MAAM,QAAQ,YAAY,KAAK;;AAIxD,QAAO,2BAA8B,QAAQ;CAE7C,MAAM,EAAC,eAAc,OAAO;;;;AAM5B,YAAW,IAAI,SAAU,GAAG;AAC3B,OAAK,YAAY,SAAS,KAAK;AAC/B,SAAO,KAAK,QAAQ,GAAG,KAAK,YAAY,CACtC,MAAM,KAAK,CACX,KAAI,QAAO,IAAI,MAAM,CAAC,CACtB,KAAK,IAAI;;;;;AAOZ,YAAW,IAAI,SAAU,GAAG;AAC3B,OAAK,YAAY,SAAS,KAAK;AAC/B,SAAO,KAAK,QAAQ,GAAG,KAAK,YAAY;;;;;;;;;;;AChQzC,KAAI,OAAO,YAAY,eAAe,QAAQ,SAAS,cAAc,QAAQ,YAAY,QAAQ,QAAQ,OACxG,QAAO;KAEP,QAAO;;;;;;;;;ACJR;;;;;;AAMA;;AAEQ;;;;;;;;;;;;;;;;;;;;;;;;;;AAyBR;;;AAGQ;;;;;;;;;;;;;;;;;;;;;;;;;;AAyBR;;AAEQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgCR;;;AAGQ;;;;;;;;;;;;;;;;;;;ACnGR,SAAS,iBAAiB,WAAW;CACjC,MAAM,iBAAiB,IAAI,WAAW,UAAU,IAAI;AACpD,WAAU,IAAI,gBAAgB,GAAG,UAAU;AAC3C,QAAO;;AAEX,MAAM,gCAAkB,oBAAoB;AAC5C,MAAM,iBAAiB,MAAM;AAC7B,MAAM,mBAAmB,iBAAiB,UAAU,eAAe;AACnE,MAAM,qBAAqB,iBAAiB,UAAU,sBAAsB;AAC5E,IAAa,aAAb,MAAa,WAAW;CACpB,YAAY,WAAW;AACnB,OAAK,YAAY;AACjB,OAAK,aAAa,IAAI,WAAW,eAAe;;CAEpD,MAAM,QAAQ;AACV,SAAO,MAAM,KAAK,eAAe,KAAK,UAAU;;CAEpD,gBAAgB;AACZ,SAAO,KAAK,UAAU,UAAU,UAAU;;CAE9C,MAAM,mCAAmC;EACrC,MAAM,sBAAsB,KAAK;EACjC,MAAM,cAAc,KAAK,IAAI,KAAK,MAAM,oBAAoB,SAAS,KAAK;EAC1E,MAAM,SAAS,KAAK,WAAW,SAAS,GAAG,YAAY;AACvD,QAAM,KAAK,UAAU,WAAW,QAAQ,EAAE,UAAU,oBAAoB,SAAS,OAAO,aAAa,CAAC;AAGtG,OAAK,IAAI,IAAI,OAAO,SAAS,GAAG,KAAK,GAAG,IAEpC,KAAI,OAAO,OAAO,mBAAmB,MACjC,OAAO,IAAI,OAAO,mBAAmB,MACrC,OAAO,IAAI,OAAO,mBAAmB,MACrC,OAAO,IAAI,OAAO,mBAAmB,GACrC,QAAO,oBAAoB,SAAS,OAAO,cAAc;AAGjE,SAAO;;CAEX,MAAM,uBAAuB;AACzB,MAAI,CAAC,KAAK,UAAU,sBAAsB,EAAE;AACxC,SAAM,+DAA+D;AACrE;;AAEJ,QAAM,+BAA+B;EACrC,MAAM,MAAM,KAAK,UAAU;EAC3B,MAAM,SAAS,MAAM,KAAK,kCAAkC;AAC5D,MAAI,SAAS,GAAG;AACZ,SAAM,2CAA2C;GACjD,MAAM,aAAa,MAAM,KAAK,UAAU,UAAU,kCAAkC,OAAO;GAC3F,MAAM,QAAQ,EAAE;AAChB,QAAK,UAAU,YAAY,WAAW,kBAAkB;AACxD,QAAK,IAAI,IAAI,GAAG,IAAI,WAAW,mBAAmB,EAAE,GAAG;IACnD,MAAM,QAAQ,MAAM,KAAK,UAAU,UAAU,WAAW;AACxD,QAAI,MAAM,cAAc,UAAU,kBAC9B,OAAM,IAAI,MAAM,yCAAyC;AAE7D,UAAM,WAAW,MAAM,KAAK,UAAU,UAAU,IAAI,WAAW,MAAM,gBAAgB,QAAQ,CAAC;AAC9F,UAAM,KAAK,UAAU,OAAO,MAAM,iBAAiB;AACnD,UAAM,KAAK,UAAU,OAAO,MAAM,kBAAkB;AACpD,UAAM,KAAK,MAAM;AACjB,UAAM,uCAAuC,IAAI,EAAE,GAAG,MAAM,OAAO,aAAa,MAAM,GAAG,WAAW;;AAExG,QAAK,UAAU,YAAY,IAAI;AAC/B,UAAO;;AAEX,OAAK,UAAU,YAAY,IAAI;;CAEnC,MAAM,MAAM,QAAQ;EAChB,MAAM,UAAU,MAAM,KAAK,sBAAsB;AACjD,MAAI,QAEA,QAAO,KAAK,4BAA4B,SAAS,OAAO;EAG5D,IAAI,OAAO;AACX,KAAG;GACC,MAAM,YAAY,MAAM,KAAK,qBAAqB;AAClD,OAAI,CAAC,UACD;GACJ,MAAM,OAAO,OAAO,UAAU;AAC9B,UAAO,CAAC,CAAC,KAAK;GACd,IAAI;AACJ,SAAM,KAAK,UAAU,OAAO,UAAU,iBAAiB;AACvD,OAAI,UAAU,kBAAkB,UAAU,mBAAmB,GAAG;IAC5D,MAAM,SAAS,EAAE;IACjB,IAAI,MAAM;AACV,UAAM,gFAAgF;IACtF,IAAI,kBAAkB;AACtB,WAAO,kBAAkB,KAAK,QAAQ,gBAAgB;AAClD,WAAM,MAAM,KAAK,UAAU,WAAW,KAAK,YAAY,EAAE,WAAW,MAAM,CAAC;AAC3E,uBAAkB,QAAQ,KAAK,WAAW,SAAS,GAAG,IAAI,EAAE,iBAAiB;KAC7E,MAAM,OAAO,mBAAmB,IAAI,kBAAkB;AACtD,SAAI,KAAK,SAAS;MACd,MAAM,OAAO,IAAI,WAAW,KAAK;AACjC,YAAM,KAAK,UAAU,WAAW,KAAK;AACrC,aAAO,KAAK,KAAK;WAIjB,OAAM,KAAK,UAAU,OAAO,KAAK;;AAGzC,UAAM,0CAA0C,KAAK,UAAU,WAAW;AAC1E,QAAI,KAAK,QACL,OAAM,KAAK,QAAQ,WAAW,YAAY,OAAO,EAAE,KAAK,QAAQ;cAIhE,KAAK,SAAS;AACd,UAAM,iCAAiC,UAAU,eAAe,QAAQ;AACxE,eAAW,IAAI,WAAW,UAAU,eAAe;AACnD,UAAM,KAAK,UAAU,WAAW,SAAS;AACzC,UAAM,KAAK,QAAQ,WAAW,UAAU,KAAK,QAAQ;UAEpD;AACD,UAAM,kCAAkC,UAAU,eAAe,QAAQ;AACzE,UAAM,KAAK,UAAU,OAAO,UAAU,eAAe;;AAG7D,SAAM,kCAAkC,KAAK,UAAU,WAAW;AAClE,OAAI,UAAU,gBAGV;SADuB,MAAM,KAAK,UAAU,UAAU,eAAe,EAClD,cAAc,UAC7B,OAAM,IAAI,MAAM,kDAAkD,KAAK,UAAU,WAAW,eAAe,MAAM;;WAGpH,CAAC;;CAEd,MAAM,4BAA4B,SAAS,QAAQ;AAC/C,OAAK,MAAM,cAAc,SAAS;GAC9B,MAAM,OAAO,OAAO,WAAW;AAC/B,OAAI,KAAK,SAAS;AACd,SAAK,UAAU,YAAY,WAAW,4BAA4B;IAClE,MAAM,YAAY,MAAM,KAAK,qBAAqB;AAClD,QAAI,WAAW;AACX,WAAM,KAAK,UAAU,OAAO,UAAU,iBAAiB;KACvD,MAAM,WAAW,IAAI,WAAW,WAAW,eAAe;AAC1D,WAAM,KAAK,UAAU,WAAW,SAAS;AACzC,WAAM,KAAK,QAAQ,WAAW,UAAU,KAAK,QAAQ;;;AAG7D,OAAI,KAAK,KACL;;;CAGZ,MAAM,QAAQ,WAAW,UAAU,IAAI;AACnC,MAAI,UAAU,qBAAqB,EAE/B,QAAO,GAAG,SAAS;AAEvB,MAAI,UAAU,qBAAqB,EAC/B,OAAM,IAAI,MAAM,uCAAuC,UAAU,mBAAmB;AAExF,QAAM,uBAAuB,UAAU,SAAS,oBAAoB,SAAS,SAAS;AAEtF,SAAO,GADkB,MAAM,WAAW,qBAAqB,SAAS,CAC7C;;CAE/B,aAAa,qBAAqB,MAAM;EAEpC,MAAM,QAAQ,IAAI,eAAe,EAC7B,MAAM,YAAY;AACd,cAAW,QAAQ,KAAK;AACxB,cAAW,OAAO;KAEzB,CAAC;EACF,MAAM,KAAK,IAAI,oBAAoB,cAAc;EACjD,MAAM,SAAS,MAAM,YAAY,GAAG;AACpC,MAAI;GAGA,MAAM,SAAS,MADE,IAAI,SAAS,OAAO,CACP,aAAa;AAC3C,UAAO,IAAI,WAAW,OAAO;WAE1B,KAAK;GAER,MAAM,UAAU,eAAe,QACzB,gCAAgC,IAAI,YACpC;AACN,SAAM,IAAI,UAAU,QAAQ;;;CAGpC,MAAM,sBAAsB;EACxB,MAAM,YAAY,MAAM,KAAK,UAAU,UAAU,UAAU;AAC3D,MAAI,cAAc,UAAU,iBAAiB;GACzC,MAAM,SAAS,MAAM,KAAK,UAAU,UAAU,qBAAqB;AACnE,UAAO,WAAW,MAAM,KAAK,UAAU,UAAU,IAAI,WAAW,OAAO,gBAAgB,QAAQ,CAAC;AAChG,UAAO;;AAEX,MAAI,cAAc,UAAU,kBACxB,QAAO;AAEX,MAAI,cAAc,WACd,OAAM,IAAI,MAAM,gBAAgB;AAEpC,QAAM,IAAI,MAAM,uBAAuB;;;AAG/C,SAAS,QAAQ,QAAQ,SAAS;CAC9B,MAAM,eAAe,OAAO;CAC5B,MAAM,gBAAgB,QAAQ;AAE9B,KAAI,gBAAgB,aAChB,QAAO;AAEX,MAAK,IAAI,IAAI,GAAG,KAAK,eAAe,eAAe,KAAK;EACpD,IAAI,QAAQ;AACZ,OAAK,IAAI,IAAI,GAAG,IAAI,eAAe,IAC/B,KAAI,OAAO,IAAI,OAAO,QAAQ,IAAI;AAC9B,WAAQ;AACR;;AAGR,MAAI,MACA,QAAO;;AAGf,QAAO;;AAEX,SAAS,YAAY,QAAQ;CAEzB,MAAM,cAAc,OAAO,QAAQ,KAAK,SAAS,MAAM,KAAK,QAAQ,EAAE;CACtE,MAAM,cAAc,IAAI,WAAW,YAAY;CAC/C,IAAI,SAAS;AACb,MAAK,MAAM,SAAS,QAAQ;AACxB,cAAY,IAAI,OAAO,OAAO;AAC9B,YAAU,MAAM;;AAEpB,QAAO;;;;;ACvOX,IAAa,cAAb,MAAyB;CACrB,YAAY,WAAW;AACnB,OAAK,YAAY;;CAErB,UAAU;EACN,MAAM,YAAY,KAAK;AACvB,SAAO,IAAI,eAAe,EACtB,MAAM,KAAK,YAAY;GACnB,MAAM,SAAS,IAAI,WAAW,KAAK;GACnC,MAAM,OAAO,MAAM,UAAU,WAAW,QAAQ,EAAE,WAAW,MAAM,CAAC;AACpE,OAAI,SAAS,GAAG;AACZ,eAAW,OAAO;AAClB;;AAEJ,cAAW,QAAQ,OAAO,SAAS,GAAG,KAAK,CAAC;KAEnD,CAAC,CAAC,YAAY,IAAI,oBAAoB,OAAO,CAAC;;;;;;AC+FvD,MAAM,iBAAiB,EACtB,MAAM,IAAI,WAAW,YAAY,OAAO,EACxC;AAcD,MAAM,gBAAgB,IAAI,WAAW,aAAa;AAkDlD,MAAM,uBAAuB,MAAM,KAAK,EAAC,QAAQ,KAAI,GAAG,GAAG,UAAU,MAAM,SAAS,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC;;;;;AAqEzG,SAAgB,UAAU,MAAM;CAC/B,MAAM,EAAC,eAAc;AAErB,KAAI,eAAe,EAClB,QAAQ,KAAK,UAAU,EAAE,GAAI,KAAK,KAAO,KAAK,UAAU,EAAE;AAG3D,KAAI,eAAe,EAClB,QAAQ,KAAK,SAAS,EAAE,GAAI,KAAK,KAAO,KAAK,UAAU,EAAE;AAG1D,KAAI,eAAe,EAClB,QAAO,KAAK,UAAU,EAAE;AAGzB,KAAI,eAAe,EAClB,QAAQ,KAAK,SAAS,EAAE,GAAI,KAAK,KAAO,KAAK,UAAU,EAAE;AAG1D,KAAI,eAAe,EAClB,QAAO,KAAK,UAAU,EAAE;AAGzB,KAAI,eAAe,EAClB,QAAO,KAAK,SAAS,EAAE;;;;;AC5QzB,SAAgB,cAAc,QAAQ,UAAU;AAC/C,KAAI,aAAa,YAAY;EAC5B,MAAM,QAAQ,EAAE;AAChB,OAAK,IAAI,QAAQ,GAAG,QAAQ,OAAO,QAAQ,SAAS;GACnD,MAAM,OAAO,OAAO,WAAW,MAAM;AACrC,SAAM,KAAK,OAAO,KAAO,QAAQ,IAAK,IAAK;;AAG5C,SAAO;;AAGR,KAAI,aAAa,YAAY;EAC5B,MAAM,QAAQ,EAAE;AAChB,OAAK,IAAI,QAAQ,GAAG,QAAQ,OAAO,QAAQ,SAAS;GACnD,MAAM,OAAO,OAAO,WAAW,MAAM;AACrC,SAAM,KAAM,QAAQ,IAAK,KAAM,OAAO,IAAK;;AAG5C,SAAO;;AAGR,QAAO,CAAC,GAAG,OAAO,CAAC,KAAI,cAAa,UAAU,WAAW,EAAE,CAAC;;;;;;;;;AAU7D,SAAgB,yBAAyB,aAAa,SAAS,GAAG;CACjE,MAAM,UAAU,OAAO,SAAS,IAAI,WAAW,EAAE,CAAC,IAAI,aAAa,IAAI,CAAC,QAAQ,SAAS,GAAG,CAAC,MAAM,EAAE,EAAE;AACvG,KAAI,OAAO,MAAM,QAAQ,CACxB,QAAO;CAGR,IAAI,MAAM;AAEV,MAAK,IAAI,QAAQ,QAAQ,QAAQ,SAAS,KAAK,QAC9C,QAAO,YAAY;AAGpB,MAAK,IAAI,QAAQ,SAAS,KAAK,QAAQ,SAAS,KAAK,QACpD,QAAO,YAAY;AAGpB,QAAO,YAAY;;;;;;AAOpB,MAAa,sBAAsB;CAClC,MAAM,QAAQ,WAAY,OAAO,SAAS,KAAK,MAAU,OAAO,SAAS,MAAO,IAAO,OAAO,SAAS,MAAO,KAAQ,OAAO,WAAY;CACzI,KAAK;CACL;;;;AC3DD,MAAa,aAAa;CACzB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AAED,MAAa,YAAY;CACxB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;;;;;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"}
|