n3.js-messages 0.2.0 → 0.2.1
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 +42 -1
- package/browser/index.global.js +4 -4
- package/browser/index.global.js.map +3 -3
- package/browser/index.js +5 -5
- package/browser/index.js.map +3 -3
- package/common.d.ts +6 -4
- package/lib/MessageParserCore.js +9 -6
- package/lib/MessageParserCore.js.map +1 -1
- package/lib/MessageWriter.js +2 -2
- package/lib/MessageWriter.js.map +1 -1
- package/lib/formats.js +14 -1
- package/lib/formats.js.map +1 -1
- package/package.json +1 -1
- package/src/MessageParserCore.js +9 -6
- package/src/MessageWriter.js +2 -2
- package/src/formats.js +12 -1
package/browser/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../node_modules/events/events.js", "../node_modules/base64-js/index.js", "../node_modules/ieee754/index.js", "../node_modules/buffer/index.js", "../node_modules/safe-buffer/index.js", "../node_modules/string_decoder/lib/string_decoder.js", "../src/MessageParserCore.js", "../node_modules/n3/src/IRIs.js", "../node_modules/n3/src/N3Lexer.js", "../node_modules/n3/src/N3DataFactory.js", "../node_modules/n3/src/N3Parser.js", "../node_modules/n3/src/N3Util.js", "../node_modules/n3/src/Util.js", "../node_modules/n3/src/BaseIRI.js", "../node_modules/n3/src/N3Writer.js", "../src/formats.js", "../src/MessageWriter.js", "../src/MessageParser.js", "../src/browser.js"],
|
|
4
|
-
"sourcesContent": ["// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n", "'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n", "/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n", "/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <https://feross.org>\n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nconst base64 = require('base64-js')\nconst ieee754 = require('ieee754')\nconst customInspectSymbol =\n (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nconst K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n const arr = new Uint8Array(1)\n const proto = { foo: function () { return 42 } }\n Object.setPrototypeOf(proto, Uint8Array.prototype)\n Object.setPrototypeOf(arr, proto)\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n const buf = new Uint8Array(length)\n Object.setPrototypeOf(buf, Buffer.prototype)\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayView(value)\n }\n\n if (value == null) {\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof SharedArrayBuffer !== 'undefined' &&\n (isInstance(value, SharedArrayBuffer) ||\n (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n const valueOf = value.valueOf && value.valueOf()\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length)\n }\n\n const b = fromObject(value)\n if (b) return b\n\n if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be of type number')\n } else if (size < 0) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpreted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n const length = byteLength(string, encoding) | 0\n let buf = createBuffer(length)\n\n const actual = buf.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n const length = array.length < 0 ? 0 : checked(array.length) | 0\n const buf = createBuffer(length)\n for (let i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayView (arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n const copy = new Uint8Array(arrayView)\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n }\n return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\"offset\" is outside of buffer bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\"length\" is outside of buffer bounds')\n }\n\n let buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(buf, Buffer.prototype)\n\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n const len = checked(obj.length) | 0\n const buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\n }\n\n if (a === b) return 0\n\n let x = a.length\n let y = b.length\n\n for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n let i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n const buffer = Buffer.allocUnsafe(length)\n let pos = 0\n for (i = 0; i < list.length; ++i) {\n let buf = list[i]\n if (isInstance(buf, Uint8Array)) {\n if (pos + buf.length > buffer.length) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n buf.copy(buffer, pos)\n } else {\n Uint8Array.prototype.set.call(\n buffer,\n buf,\n pos\n )\n }\n } else if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n } else {\n buf.copy(buffer, pos)\n }\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n const len = string.length\n const mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n let loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n const i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n const len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (let i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n const len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (let i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n const len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (let i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n const length = this.length\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n let str = ''\n const max = exports.INSPECT_MAX_BYTES\n str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n if (this.length > max) str += ' ... '\n return '<Buffer ' + str + '>'\n}\nif (customInspectSymbol) {\n Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength)\n }\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n let x = thisEnd - thisStart\n let y = end - start\n const len = Math.min(x, y)\n\n const thisCopy = this.slice(thisStart, thisEnd)\n const targetCopy = target.slice(start, end)\n\n for (let i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n let indexSize = 1\n let arrLength = arr.length\n let valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n let i\n if (dir) {\n let foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n let found = true\n for (let j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n const remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n const strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n let i\n for (i = 0; i < length; ++i) {\n const parsed = parseInt(string.substr(i * 2, 2), 16)\n if (numberIsNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n const remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n case 'latin1':\n case 'binary':\n return asciiWrite(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n const res = []\n\n let i = start\n while (i < end) {\n const firstByte = buf[i]\n let codePoint = null\n let bytesPerSequence = (firstByte > 0xEF)\n ? 4\n : (firstByte > 0xDF)\n ? 3\n : (firstByte > 0xBF)\n ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n let secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n const len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n let res = ''\n let i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n const len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n let out = ''\n for (let i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]]\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n const bytes = buf.slice(start, end)\n let res = ''\n // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n for (let i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n const len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n const newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n let val = this[offset + --byteLength]\n let mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const lo = first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24\n\n const hi = this[++offset] +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n last * 2 ** 24\n\n return BigInt(lo) + (BigInt(hi) << BigInt(32))\n})\n\nBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const hi = first * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n const lo = this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last\n\n return (BigInt(hi) << BigInt(32)) + BigInt(lo)\n})\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let i = byteLength\n let mul = 1\n let val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = this[offset + 4] +\n this[offset + 5] * 2 ** 8 +\n this[offset + 6] * 2 ** 16 +\n (last << 24) // Overflow\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24)\n})\n\nBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = (first << 24) + // Overflow\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last)\n})\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let mul = 1\n let i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let i = byteLength - 1\n let mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction wrtBigUInt64LE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n return offset\n}\n\nfunction wrtBigUInt64BE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset + 7] = lo\n lo = lo >> 8\n buf[offset + 6] = lo\n lo = lo >> 8\n buf[offset + 5] = lo\n lo = lo >> 8\n buf[offset + 4] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset + 3] = hi\n hi = hi >> 8\n buf[offset + 2] = hi\n hi = hi >> 8\n buf[offset + 1] = hi\n hi = hi >> 8\n buf[offset] = hi\n return offset + 8\n}\n\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = 0\n let mul = 1\n let sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = byteLength - 1\n let mul = 1\n let sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n const len = end - start\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end)\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, end),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n if (val.length === 1) {\n const code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n encoding === 'latin1') {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255\n } else if (typeof val === 'boolean') {\n val = Number(val)\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n let i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n const bytes = Buffer.isBuffer(val)\n ? val\n : Buffer.from(val, encoding)\n const len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nconst errors = {}\nfunction E (sym, getMessage, Base) {\n errors[sym] = class NodeError extends Base {\n constructor () {\n super()\n\n Object.defineProperty(this, 'message', {\n value: getMessage.apply(this, arguments),\n writable: true,\n configurable: true\n })\n\n // Add the error code to the name to include it in the stack trace.\n this.name = `${this.name} [${sym}]`\n // Access the stack to generate the error message including the error code\n // from the name.\n this.stack // eslint-disable-line no-unused-expressions\n // Reset the name to the actual name.\n delete this.name\n }\n\n get code () {\n return sym\n }\n\n set code (value) {\n Object.defineProperty(this, 'code', {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n })\n }\n\n toString () {\n return `${this.name} [${sym}]: ${this.message}`\n }\n }\n}\n\nE('ERR_BUFFER_OUT_OF_BOUNDS',\n function (name) {\n if (name) {\n return `${name} is outside of buffer bounds`\n }\n\n return 'Attempt to access memory outside buffer bounds'\n }, RangeError)\nE('ERR_INVALID_ARG_TYPE',\n function (name, actual) {\n return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`\n }, TypeError)\nE('ERR_OUT_OF_RANGE',\n function (str, range, input) {\n let msg = `The value of \"${str}\" is out of range.`\n let received = input\n if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n received = addNumericalSeparator(String(input))\n } else if (typeof input === 'bigint') {\n received = String(input)\n if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n received = addNumericalSeparator(received)\n }\n received += 'n'\n }\n msg += ` It must be ${range}. Received ${received}`\n return msg\n }, RangeError)\n\nfunction addNumericalSeparator (val) {\n let res = ''\n let i = val.length\n const start = val[0] === '-' ? 1 : 0\n for (; i >= start + 4; i -= 3) {\n res = `_${val.slice(i - 3, i)}${res}`\n }\n return `${val.slice(0, i)}${res}`\n}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds (buf, offset, byteLength) {\n validateNumber(offset, 'offset')\n if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n boundsError(offset, buf.length - (byteLength + 1))\n }\n}\n\nfunction checkIntBI (value, min, max, buf, offset, byteLength) {\n if (value > max || value < min) {\n const n = typeof min === 'bigint' ? 'n' : ''\n let range\n if (byteLength > 3) {\n if (min === 0 || min === BigInt(0)) {\n range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`\n } else {\n range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` +\n `${(byteLength + 1) * 8 - 1}${n}`\n }\n } else {\n range = `>= ${min}${n} and <= ${max}${n}`\n }\n throw new errors.ERR_OUT_OF_RANGE('value', range, value)\n }\n checkBounds(buf, offset, byteLength)\n}\n\nfunction validateNumber (value, name) {\n if (typeof value !== 'number') {\n throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)\n }\n}\n\nfunction boundsError (value, length, type) {\n if (Math.floor(value) !== value) {\n validateNumber(value, type)\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value)\n }\n\n if (length < 0) {\n throw new errors.ERR_BUFFER_OUT_OF_BOUNDS()\n }\n\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset',\n `>= ${type ? 1 : 0} and <= ${length}`,\n value)\n}\n\n// HELPER FUNCTIONS\n// ================\n\nconst INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n let codePoint\n const length = string.length\n let leadSurrogate = null\n const bytes = []\n\n for (let i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n let c, hi, lo\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n let i\n for (i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nconst hexSliceLookupTable = (function () {\n const alphabet = '0123456789abcdef'\n const table = new Array(256)\n for (let i = 0; i < 16; ++i) {\n const i16 = i * 16\n for (let j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j]\n }\n }\n return table\n})()\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod (fn) {\n return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn\n}\n\nfunction BufferBigIntNotDefined () {\n throw new Error('BigInt not supported')\n}\n", "/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.prototype = Object.create(Buffer.prototype)\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\n/*</replacement>*/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n encoding = '' + encoding;\n switch (encoding && encoding.toLowerCase()) {\n case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n return true;\n default:\n return false;\n }\n};\n\nfunction _normalizeEncoding(enc) {\n if (!enc) return 'utf8';\n var retried;\n while (true) {\n switch (enc) {\n case 'utf8':\n case 'utf-8':\n return 'utf8';\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return 'utf16le';\n case 'latin1':\n case 'binary':\n return 'latin1';\n case 'base64':\n case 'ascii':\n case 'hex':\n return enc;\n default:\n if (retried) return; // undefined\n enc = ('' + enc).toLowerCase();\n retried = true;\n }\n }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n var nenc = _normalizeEncoding(enc);\n if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n this.encoding = normalizeEncoding(encoding);\n var nb;\n switch (this.encoding) {\n case 'utf16le':\n this.text = utf16Text;\n this.end = utf16End;\n nb = 4;\n break;\n case 'utf8':\n this.fillLast = utf8FillLast;\n nb = 4;\n break;\n case 'base64':\n this.text = base64Text;\n this.end = base64End;\n nb = 3;\n break;\n default:\n this.write = simpleWrite;\n this.end = simpleEnd;\n return;\n }\n this.lastNeed = 0;\n this.lastTotal = 0;\n this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n if (buf.length === 0) return '';\n var r;\n var i;\n if (this.lastNeed) {\n r = this.fillLast(buf);\n if (r === undefined) return '';\n i = this.lastNeed;\n this.lastNeed = 0;\n } else {\n i = 0;\n }\n if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n var j = buf.length - 1;\n if (j < i) return 0;\n var nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 1;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 2;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) {\n if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n }\n return nb;\n }\n return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n if ((buf[0] & 0xC0) !== 0x80) {\n self.lastNeed = 0;\n return '\\ufffd';\n }\n if (self.lastNeed > 1 && buf.length > 1) {\n if ((buf[1] & 0xC0) !== 0x80) {\n self.lastNeed = 1;\n return '\\ufffd';\n }\n if (self.lastNeed > 2 && buf.length > 2) {\n if ((buf[2] & 0xC0) !== 0x80) {\n self.lastNeed = 2;\n return '\\ufffd';\n }\n }\n }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n var p = this.lastTotal - this.lastNeed;\n var r = utf8CheckExtraBytes(this, buf, p);\n if (r !== undefined) return r;\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, p, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, p, 0, buf.length);\n this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n var total = utf8CheckIncomplete(this, buf, i);\n if (!this.lastNeed) return buf.toString('utf8', i);\n this.lastTotal = total;\n var end = buf.length - (total - this.lastNeed);\n buf.copy(this.lastChar, 0, end);\n return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + '\\ufffd';\n return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n if ((buf.length - i) % 2 === 0) {\n var r = buf.toString('utf16le', i);\n if (r) {\n var c = r.charCodeAt(r.length - 1);\n if (c >= 0xD800 && c <= 0xDBFF) {\n this.lastNeed = 2;\n this.lastTotal = 4;\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n return r.slice(0, -1);\n }\n }\n return r;\n }\n this.lastNeed = 1;\n this.lastTotal = 2;\n this.lastChar[0] = buf[buf.length - 1];\n return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) {\n var end = this.lastTotal - this.lastNeed;\n return r + this.lastChar.toString('utf16le', 0, end);\n }\n return r;\n}\n\nfunction base64Text(buf, i) {\n var n = (buf.length - i) % 3;\n if (n === 0) return buf.toString('base64', i);\n this.lastNeed = 3 - n;\n this.lastTotal = 3;\n if (n === 1) {\n this.lastChar[0] = buf[buf.length - 1];\n } else {\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n }\n return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n return buf && buf.length ? this.write(buf) : '';\n}", "// **MessageParserCore** is the push-based engine behind all message parsers.\n// It feeds text to the N3.js parser, which recognizes the message delimiters\n// through its `directives` option, and groups the resulting quads into messages.\nimport { EventEmitter } from 'events';\nimport { Parser, DataFactory } from 'n3';\nimport { resolveFormat, isMessagesVersion, baseVersion, isSupportedVersion } from './formats.js';\n\n/** @typedef {import('@rdfjs/types').Term} BaseTerm */\n/** @template {import('@rdfjs/types').BaseQuad} [Q=import('@rdfjs/types').Quad] */\nexport default class MessageParserCore {\n // `sink` receives `message(quads, index)`, `end(prefixes)`, `error(error)`\n // and optionally `quad(quad, messageIndex)`, `prefix(prefix, term)`, `version(label)`\n /**\n * @param {import('../common.js').MessageParserOptions<Q> | undefined} options\n * @param {import('./internal.js').ParserSink<Q>} sink\n */\n constructor(options, sink) {\n options = options || {};\n const format = resolveFormat(options.format);\n this._sink = sink;\n\n /** @type {import('../common.js').MessageQuadFactory<Q>} */\n this._factory = options.factory || /** @type {import('../common.js').MessageQuadFactory<Q>} */ (DataFactory);\n this._blankNodePrefix = typeof options.blankNodePrefix === 'string' ?\n options.blankNodePrefix.replace(/^_:/, '') : undefined;\n this._blankNodeCounter = 0;\n this._supportedVersions = Parser.SUPPORTED_VERSIONS;\n this._messages = options.messages === true || isMessagesVersion(options.version);\n this._index = 0;\n\n /** @type {Q[] | null} */\n this._current = null;\n\n /** @type {Map<string, import('@rdfjs/types').BlankNode> | null} */\n this._scope = null;\n this._seenQuad = false;\n this._failed = false;\n this._finished = false;\n\n /** @type {import('n3').ParserOptions} */\n const n3Options = {\n format: format.name,\n factory: /** @type {import('@rdfjs/types').DataFactory} */ (/** @type {unknown} */ (this._factory)),\n // Version labels are validated here, because N3.js does not know `-messages` labels\n parseUnsupportedVersions: true,\n // N3.js reports `MESSAGE` and `@message .` between statements through `onDirective`,\n // in order with the quads, and rejects them anywhere else\n directives: ['message'],\n };\n if (options.baseIRI)\n n3Options.baseIRI = options.baseIRI;\n if (options.version) {\n this._checkVersion(options.version, true);\n n3Options.version = baseVersion(options.version);\n }\n\n this._input = new EventEmitter();\n this._lineMode = format.lineMode;\n // The line of the current token, and of the last delimiter\n this._line = 0;\n this._delimiterLine = 0;\n new Parser(n3Options).parse(this._input, {\n onQuad: (error, quad, prefixes) => this._onQuad(error, /** @type {Q | null} */ (quad), prefixes),\n onPrefix: (prefix, term) => this._failed || sink.prefix && sink.prefix(prefix, term),\n onVersion: label => this._failed || this._announce(label),\n onDirective: () => this._failed || this._delimiter(),\n onToken: token => this._onToken(token),\n });\n }\n\n // ### `write` accepts the next chunk of text\n /** @param {string} text */\n write(text) {\n if (!this._failed && !this._finished && text.length > 0)\n this._input.emit('data', text);\n }\n\n // ### `end` signals the end of the input\n end() {\n if (!this._failed && !this._finished)\n this._input.emit('end');\n }\n\n // Keeps track of lines; in N-Triples and N-Quads, a delimiter must be on its own line\n /** @param {{ line: number; type: string }} token */\n _onToken(token) {\n const line = token.line, delimiter = token.type === 'MESSAGE';\n if (this._lineMode && !this._failed &&\n (delimiter ? line === this._line : line === this._delimiterLine && token.type !== 'eof'))\n this._fail(new Error(`Unexpected \"MESSAGE\" on line ${line}.`));\n if (delimiter)\n this._delimiterLine = line;\n this._line = line;\n }\n\n /** @param {Error | null} error\n * @param {Q | null} quad\n * @param {Record<string, import('@rdfjs/types').NamedNode>} [prefixes] */\n _onQuad(error, quad, prefixes) {\n if (this._failed || this._finished)\n return;\n if (error)\n this._fail(error);\n else if (quad)\n this._addQuad(quad);\n else {\n this._finished = true;\n if (this._current !== null)\n this._emitMessage();\n this._sink.end(prefixes);\n }\n }\n\n /** @param {Q} quad */\n _addQuad(quad) {\n this._seenQuad = true;\n // Blank node labels are scoped to their message\n if (this._messages)\n quad = this._scopeQuad(quad);\n if (this._current === null)\n this._current = [];\n this._current.push(quad);\n if (this._sink.quad)\n this._sink.quad(quad, this._index);\n }\n\n /** @param {string} label */\n _announce(label) {\n const error = this._checkVersion(label);\n if (error)\n return this._fail(error);\n if (isMessagesVersion(label) && !this._messages) {\n if (this._seenQuad)\n return this._fail(new Error(`Version \"${label}\" must be announced before the first statement.`));\n this._messages = true;\n }\n if (this._sink.version)\n this._sink.version(label);\n }\n\n // Validates a version label, and returns an error for unsupported ones\n /** @param {string} label\n * @param {boolean} [throwing] */\n _checkVersion(label, throwing) {\n if (isSupportedVersion(baseVersion(label), this._supportedVersions))\n return null;\n const error = new Error(`Detected unsupported version: \"${label}\"`);\n if (throwing)\n throw error;\n return error;\n }\n\n _delimiter() {\n if (!this._messages) {\n return this._fail(new Error(`Unexpected \"MESSAGE\" on line ${this._line}: the document did not announce ` +\n 'a version with the \"-messages\" suffix.'));\n }\n this._emitMessage();\n }\n\n // Finalizes the current message, which is empty if no quad was seen\n _emitMessage() {\n const quads = this._current || [];\n this._current = null;\n this._scope = null;\n this._sink.message(quads, this._index++);\n }\n\n /** @param {Error} error */\n _fail(error) {\n this._failed = true;\n this._current = null;\n this._sink.error(error);\n }\n\n // ## Blank node scoping\n\n /** @param {Q} quad\n * @returns {Q} */\n _scopeQuad(quad) {\n const subject = this._scopeTerm(quad.subject);\n const predicate = this._scopeTerm(quad.predicate);\n const object = this._scopeTerm(quad.object);\n const graph = this._scopeTerm(quad.graph);\n return subject === quad.subject && predicate === quad.predicate &&\n object === quad.object && graph === quad.graph ?\n quad : this._factory.quad(subject, predicate, object, graph);\n }\n\n /** @template {BaseTerm} T\n * @param {T} term\n * @returns {T} */\n _scopeTerm(term) {\n if (term.termType === 'BlankNode') {\n const scope = this._scope || (this._scope = new Map());\n let scoped = scope.get(term.value);\n if (!scoped) {\n scoped = this._blankNodePrefix === undefined ? this._factory.blankNode() :\n this._factory.blankNode(`${this._blankNodePrefix}${this._blankNodeCounter++}`);\n scope.set(term.value, scoped);\n }\n return /** @type {T} */ (/** @type {unknown} */ (scoped));\n }\n return term.termType === 'Quad' ? /** @type {T} */ (/** @type {unknown} */ (\n this._scopeQuad(/** @type {Q} */ (/** @type {unknown} */ (term))))) : term;\n }\n}\n", "const RDF = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#',\n XSD = 'http://www.w3.org/2001/XMLSchema#',\n SWAP = 'http://www.w3.org/2000/10/swap/';\n\nexport default {\n xsd: {\n decimal: `${XSD}decimal`,\n boolean: `${XSD}boolean`,\n dateTime: `${XSD}dateTime`,\n double: `${XSD}double`,\n integer: `${XSD}integer`,\n string: `${XSD}string`,\n },\n rdf: {\n type: `${RDF}type`,\n nil: `${RDF}nil`,\n first: `${RDF}first`,\n rest: `${RDF}rest`,\n langString: `${RDF}langString`,\n dirLangString: `${RDF}dirLangString`,\n reifies: `${RDF}reifies`,\n },\n owl: {\n sameAs: 'http://www.w3.org/2002/07/owl#sameAs',\n },\n r: {\n forSome: `${SWAP}reify#forSome`,\n forAll: `${SWAP}reify#forAll`,\n },\n log: {\n implies: `${SWAP}log#implies`,\n isImpliedBy: `${SWAP}log#isImpliedBy`,\n },\n};\n", "// **N3Lexer** tokenizes N3 documents.\nimport namespaces from './IRIs';\n\nconst { xsd } = namespaces;\nconst SPACE = 0x20, TAB = 0x09, LF = 0x0A, CR = 0x0D, HASH = 0x23,\n DOT = 0x2E, COLON = 0x3A, ZERO = 0x30, NINE = 0x39,\n PERCENT = 0x25, BACKSLASH = 0x5C;\n\n// Whitespace as matched by `\\s`\nfunction isWhitespace(charCode) {\n return charCode === SPACE || charCode >= TAB && charCode <= CR ||\n charCode >= 0xA0 && (charCode === 0xA0 || charCode === 0x1680 ||\n charCode >= 0x2000 && charCode <= 0x200A || charCode === 0x2028 || charCode === 0x2029 ||\n charCode === 0x202F || charCode === 0x205F || charCode === 0x3000 || charCode === 0xFEFF);\n}\n// Characters that can directly follow a name: whitespace and punctuation\n// (the lookahead `[,;!\\^\\s#()\\[\\]\\{\\}\"'<>]` of the former regular expressions)\nconst asciiDelimiters = new Uint8Array(0x80);\nfor (const char of ',;!^#()[]{}\"\\'<> \\t\\n\\v\\f\\r')\n asciiDelimiters[char.charCodeAt(0)] = 1;\nfunction isDelimiter(charCode) {\n return charCode < 0x80 ? asciiDelimiters[charCode] === 1 : isWhitespace(charCode);\n}\n// Whether a name can end before the given position: it must be followed by\n// a delimiter, optionally after a dot. At the end of finished input, it can always end.\nfunction canEndName(input, pos, inputFinished) {\n let charCode = input.charCodeAt(pos);\n if (charCode === DOT)\n charCode = input.charCodeAt(++pos);\n if (pos >= input.length)\n return inputFinished;\n return isDelimiter(charCode);\n}\n\n// Fixed escape sequences allowed in string literals (ECHAR)\nconst stringEscapeReplacements = {\n '\\\\': '\\\\', \"'\": \"'\", '\"': '\"',\n 'n': '\\n', 'r': '\\r', 't': '\\t', 'f': '\\f', 'b': '\\b',\n};\n// Fixed escape sequences allowed in local names of prefixed names (PN_LOCAL_ESC)\nconst localNameEscapeReplacements = {\n '_': '_', '~': '~', '.': '.', '-': '-', '!': '!', '$': '$', '&': '&',\n \"'\": \"'\", '(': '(', ')': ')', '*': '*', '+': '+', ',': ',', ';': ';',\n '=': '=', '/': '/', '?': '?', '#': '#', '@': '@', '%': '%',\n};\nconst illegalIriChars = /[\\x00-\\x20<>\\\\\"\\{\\}\\|\\^\\`]/;\n\n// Character classes of names, as bit flags for ASCII characters\nconst PREFIX_START = 1, // PN_CHARS_BASE\n LOCAL_START = 2, // PN_CHARS_U, digits, and colon\n NAME_CHAR = 4, // PN_CHARS\n LOCAL_CHAR = 8, // PN_CHARS and colon\n LOCAL_ESCAPE = 16; // characters that can be escaped in local names (PN_LOCAL_ESC)\nconst asciiNameClasses = new Uint8Array(0x80);\nfor (let charCode = 0; charCode < 0x80; charCode++) {\n const char = String.fromCharCode(charCode);\n const letter = char >= 'A' && char <= 'Z' || char >= 'a' && char <= 'z';\n const nameChar = letter || char === '_' || char === '-' || char >= '0' && char <= '9';\n asciiNameClasses[charCode] =\n (letter ? PREFIX_START : 0) |\n (nameChar && char !== '-' || char === ':' ? LOCAL_START : 0) |\n (nameChar ? NAME_CHAR : 0) |\n (nameChar || char === ':' ? LOCAL_CHAR : 0) |\n (char in localNameEscapeReplacements ? LOCAL_ESCAPE : 0);\n}\n// Returns the length (0, 1, or 2 code units) of the character at the given position\n// if it is in the given name character class\nfunction nameCharLength(input, pos, charClass) {\n const charCode = input.charCodeAt(pos);\n if (charCode < 0x80)\n return (asciiNameClasses[charCode] & charClass) !== 0 ? 1 : 0;\n // Characters from U+10000 to U+EFFFF consist of a surrogate pair\n if (charCode >= 0xD800 && charCode <= 0xDB7F) {\n const low = input.charCodeAt(pos + 1);\n return low >= 0xDC00 && low <= 0xDFFF ? 2 : 0;\n }\n // PN_CHARS has some characters that PN_CHARS_BASE does not\n if (charClass >= NAME_CHAR && (charCode === 0xB7 || charCode >= 0x300 && charCode <= 0x36F ||\n charCode === 0x203F || charCode === 0x2040))\n return 1;\n // PN_CHARS_BASE\n return charCode >= 0xC0 && charCode <= 0x1FFF && charCode !== 0xD7 && charCode !== 0xF7 &&\n (charCode < 0x300 || charCode >= 0x370 && charCode !== 0x37E) ||\n charCode >= 0x200C && charCode <= 0x200D || charCode >= 0x2070 && charCode <= 0x218F ||\n charCode >= 0x2C00 && charCode <= 0x2FEF || charCode >= 0x3001 && charCode <= 0xD7FF ||\n charCode >= 0xF900 && charCode <= 0xFDCF || charCode >= 0xFDF0 && charCode <= 0xFFFD ? 1 : 0;\n}\nfunction isLocalEscape(charCode) {\n return charCode < 0x80 && (asciiNameClasses[charCode] & LOCAL_ESCAPE) !== 0;\n}\nfunction isHexDigit(charCode) {\n return charCode >= ZERO && charCode <= NINE ||\n charCode >= 0x41 && charCode <= 0x46 || charCode >= 0x61 && charCode <= 0x66;\n}\n// Returns the end of the prefix (PN_PREFIX) at the given position,\n// which can contain single dots, but not start or end with one\nfunction skipPrefix(input, pos) {\n let length = nameCharLength(input, pos, PREFIX_START);\n while (length !== 0) {\n pos += length;\n const next = input.charCodeAt(pos) === DOT ? pos + 1 : pos;\n // Most names are ASCII, so look those up without a call\n const charCode = input.charCodeAt(next);\n length = charCode < 0x80 ? (asciiNameClasses[charCode] & NAME_CHAR) !== 0 ? 1 : 0 :\n nameCharLength(input, next, NAME_CHAR);\n if (length !== 0)\n pos = next;\n }\n return pos;\n}\n// Returns the end of the local name (PN_LOCAL) at the given position,\n// which can contain dots, but not start or end with one\nfunction skipLocalName(input, pos) {\n let end = pos, charClass = LOCAL_START;\n while (true) {\n // Most names are ASCII, so look those up without a call\n const charCode = input.charCodeAt(pos);\n let length = charCode < 0x80 ? (asciiNameClasses[charCode] & charClass) !== 0 ? 1 : 0 :\n nameCharLength(input, pos, charClass);\n // Percent-encoded character (PERCENT)\n if (length === 0 && charCode === PERCENT &&\n isHexDigit(input.charCodeAt(pos + 1)) && isHexDigit(input.charCodeAt(pos + 2)))\n length = 3;\n // Escaped character (PN_LOCAL_ESC)\n else if (length === 0 && charCode === BACKSLASH && isLocalEscape(input.charCodeAt(pos + 1)))\n length = 2;\n if (length !== 0) {\n end = pos += length;\n charClass = LOCAL_CHAR;\n }\n // Dots are allowed after the first character, but not at the end\n else if (charCode === DOT && charClass === LOCAL_CHAR)\n pos++;\n else\n return end;\n }\n}\n// Returns the end of the prefixed name at the given position, or -1 if there is none\nfunction skipPrefixedName(input, pos, inputFinished) {\n const colon = skipPrefix(input, pos);\n if (input.charCodeAt(colon) !== COLON)\n return -1;\n const end = skipLocalName(input, colon + 1);\n return canEndName(input, end, inputFinished) ? end : -1;\n}\n\n// A valid code point is a Unicode scalar value: at most U+10FFFF and not a surrogate\nfunction isValidCodePoint(charCode) {\n return charCode <= 0x10FFFF && (charCode < 0xD800 || charCode > 0xDFFF);\n}\n\nconst lineModeRegExps = {\n _iri: true,\n _unescapedIri: true,\n _simpleQuotedString: true,\n _langcode: true,\n _blank: true,\n _commentLine: true,\n _whitespace: true,\n};\nconst invalidRegExp = /$0^/;\nconst nonWhitespace = /\\S*/y;\n\n// Matches a sticky regular expression at the given position of the input\nfunction execAt(regExp, input, pos) {\n regExp.lastIndex = pos;\n return regExp.exec(input);\n}\nfunction testAt(regExp, input, pos) {\n regExp.lastIndex = pos;\n return regExp.test(input);\n}\n// Matches the rest of the input followed by a space, as at the end of the input,\n// a token that can contain (but not end with) a dot needs a non-dot character after it\nfunction execAtEnd(regExp, input, pos) {\n regExp.lastIndex = 0;\n return regExp.exec(`${input.slice(pos)} `);\n}\n\n// Whitespace or the start of a comment\nfunction isSeparatorCode(code) {\n return code === SPACE || code === TAB || code === LF || code === CR || code === HASH;\n}\n\n// Words with a fixed meaning in the grammar, which cannot name an additional directive\nconst reservedWords = /^(?:prefix|base|version|graph|forsome|forall|iri|a|true|false|has|is|of|id)$/i;\n\n// Unfinished input in a stream up to this length is tokenized again with every chunk\nconst MIN_RESCAN_LENGTH = 1024;\n\n// ## Constructor\nexport default class N3Lexer {\n constructor(options) {\n // ## Regular expressions\n // It's slightly faster to have these as properties than as in-scope variables.\n // They are sticky, so they only match at the `lastIndex` set by `execAt`.\n this._iri = /<((?:[^ <>{}\\\\]|\\\\[uU])+)>[ \\t]*/y; // IRI with escape sequences; needs sanity check after unescaping\n this._unescapedIri = /<([^\\x00-\\x20<>\\\\\"\\{\\}\\|\\^\\`]*)>[ \\t]*/y; // IRI without escape sequences; no unescaping\n this._simpleQuotedString = /\"([^\"\\\\\\r\\n]*)\"(?=[^\"])/y; // string without escape sequences\n this._simpleApostropheString = /'([^'\\\\\\r\\n]*)'(?=[^'])/y;\n this._langcode = /@([a-z]+(?:-[a-z0-9]+)*)(?=[^a-z0-9])/iy;\n this._variable = /\\?(?:(?:[A-Z_a-z\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02ff\\u0370-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff])(?:[\\-0-9:A-Z_a-z\\xb7\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u203f\\u2040\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff])*)(?=[.,;!\\^\\s#()\\[\\]\\{\\}\"'<>])/y;\n this._blank = /_:((?:[0-9A-Z_a-z\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02ff\\u0370-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff])(?:\\.?[\\-0-9A-Z_a-z\\xb7\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u203f\\u2040\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff])*)(?:[ \\t]+|(?=\\.?[,;:!\\^\\s#()\\[\\]\\{\\}\"'<>]))/y;\n this._number = /[\\-+]?(?:(\\d+\\.\\d*|\\.?\\d+)[eE][\\-+]?\\d+|(?=\\.?\\d)\\d*(?:(\\.)\\d+)?)(?=\\.?[,;:!\\^\\s#()\\[\\]\\{\\}\"'<>])/y;\n this._boolean = /(?:true|false)(?=[.,;!\\^\\s#()\\[\\]\\{\\}\"'<>])/y;\n this._atKeyword = /@[a-z]+(?=[\\s#<:\"'.])/iy;\n this._keyword = /(?:PREFIX|BASE|VERSION|GRAPH)(?=[\\s#<\"'])/iy;\n this._n3Verb = /(?:has|is|of)(?=[\\s#()\\[\\]\\{\\}\"'<>?_+\\-0-9])/y;\n this._n3Id = /id(?=[\\s#<])/y;\n this._shortPredicates = /a(?=[\\s#()\\[\\]\\{\\}\"'<>])/y;\n this._commentLine = /[ \\t]*#([^\\n\\r]*)(?:\\r\\n|\\n|\\r)([ \\t]*)/y;\n this._whitespace = /[ \\t]+/y;\n options = options || {};\n\n // Whether the log:isImpliedBy predicate is supported\n this._isImpliedBy = options.isImpliedBy;\n\n // In line mode (N-Triples or N-Quads), only simple features may be parsed\n if (this._lineMode = !!options.lineMode) {\n this._n3Mode = false;\n // Don't tokenize special literals\n for (const key in this) {\n if (!(key in lineModeRegExps) && this[key] instanceof RegExp)\n this[key] = invalidRegExp;\n }\n // The only keyword in N-Triples and N-Quads is VERSION, which is case-sensitive\n this._keyword = /VERSION(?=[\\s#<\"])/y;\n }\n // When not in line mode, enable N3 functionality by default\n else {\n this._n3Mode = options.n3 !== false;\n }\n // Recognize additional directive keywords, such as MESSAGE\n // (the @-form of a directive is always tokenized as an @-keyword)\n this._directive = null;\n if (options.directives && options.directives.length !== 0) {\n for (const name of options.directives) {\n if (!/^[a-z]+$/i.test(name) || reservedWords.test(name))\n throw new Error(`Invalid directive name: \"${name}\"`);\n }\n this._directive = new RegExp(`(?:${options.directives.join('|')})(?=[\\\\s#<])`, 'iy');\n this._directiveMaxLength = Math.max(...options.directives.map(name => name.length));\n // The first characters of directive names, so other words skip the regular expression\n this._directiveStarts = options.directives.map(name => name[0].toLowerCase() + name[0].toUpperCase()).join('');\n }\n // Don't output comment tokens by default\n this.comments = !!options.comments;\n // Cache the last tested closing position of long literals\n this._literalClosingPos = 0;\n }\n\n // ## Private methods\n\n // ### `_tokenizeToEnd` tokenizes as for as possible, emitting tokens through the callback\n _tokenizeToEnd(callback, inputFinished) {\n // Continue parsing as far as possible; the loop will return eventually.\n // Rather than slicing off every token, track the position of the remaining input;\n // the regular expressions are sticky, so they match at that position.\n const input = this._input;\n let pos = 0;\n let currentLineLength = this._linePosition + input.length;\n while (true) {\n // Consume one separator line at a time, including its following indentation.\n while (true) {\n let charCode = input.charCodeAt(pos), separatorLength = 0;\n if (charCode === SPACE || charCode === TAB) {\n const next = input.charCodeAt(pos + 1);\n separatorLength = next === SPACE || next === TAB ?\n execAt(this._whitespace, input, pos)[0].length : 1;\n charCode = input.charCodeAt(pos + separatorLength);\n }\n if (charCode === HASH) {\n const comment = execAt(this._commentLine, input, pos);\n if (comment) {\n const commentLength = comment[0].length;\n // Keep a trailing CR buffered in case the next chunk starts with LF.\n if (!inputFinished && pos + commentLength === input.length &&\n input.charCodeAt(input.length - 1) === CR)\n return this._suspend(input, pos, currentLineLength);\n if (this.comments)\n emitComment(comment[1], this._line, currentLineLength - (input.length - pos) + separatorLength);\n pos += commentLength;\n currentLineLength = input.length - pos + comment[2].length;\n this._line++;\n }\n else {\n // A comment without a line ending stays buffered until EOF.\n pos += separatorLength;\n if (!inputFinished)\n return this._suspend(input, pos, currentLineLength);\n if (this.comments)\n emitComment(input.slice(pos + 1), this._line, currentLineLength - (input.length - pos));\n pos = input.length;\n break;\n }\n }\n else if (charCode === LF || charCode === CR) {\n // A CR at the end of a chunk may still be followed by LF.\n if (!inputFinished && charCode === CR && pos + separatorLength + 1 === input.length)\n return this._suspend(input, pos, currentLineLength);\n separatorLength += charCode === CR && input.charCodeAt(pos + separatorLength + 1) === LF ? 2 : 1;\n // Indentation is consumed with the newline, but belongs to the next line's columns.\n let indentationLength = 0;\n const next = input.charCodeAt(pos + separatorLength);\n if (next === SPACE || next === TAB) {\n const following = input.charCodeAt(pos + separatorLength + 1);\n indentationLength = following === SPACE || following === TAB ?\n execAt(this._whitespace, input, pos + separatorLength)[0].length : 1;\n }\n pos += separatorLength + indentationLength;\n currentLineLength = input.length - pos + indentationLength;\n this._line++;\n }\n else {\n pos += separatorLength;\n break;\n }\n }\n if (pos >= input.length) {\n // A datatype marker needs a type\n if (inputFinished && this._previousMarker === '^^')\n return reportSyntaxError(this, input, pos);\n this._linePosition = currentLineLength;\n if (inputFinished) {\n emitToken('eof', '', '', this._line, currentLineLength, 0);\n return this._input = null;\n }\n return this._input = '';\n }\n\n // Look for specific token types based on the first character\n const line = this._line, firstChar = input[pos];\n let type = '', value = '', prefix = '',\n match = null, matchLength = 0, lexicalLength = 0,\n finalLineLength = 0, inconclusive = false, tripleQuoted = false;\n switch (firstChar) {\n case '^':\n // A datatype marker separated from its type cannot be followed by another marker\n if (this._previousMarker === '^^')\n return reportSyntaxError(this, input, pos);\n // We need at least 3 tokens lookahead to distinguish ^^<IRI> and ^^pre:fixed\n if (input.length - pos < 3)\n break;\n // Try to match a type\n else if (input[pos + 1] === '^') {\n this._previousMarker = '^^';\n // Move to type IRI or prefixed name\n pos += 2;\n if (input[pos] !== '<') {\n // Whitespace and comments may separate the marker from the type\n if (isSeparatorCode(input.charCodeAt(pos)))\n continue; // eslint-disable-line no-continue\n inconclusive = true;\n break;\n }\n }\n // If no type, it must be a path expression\n else {\n if (this._n3Mode) {\n matchLength = 1;\n type = '^';\n }\n break;\n }\n // Fall through in case the type is an IRI\n case '<':\n // Try to find a full IRI without escape sequences\n if (match = execAt(this._unescapedIri, input, pos)) {\n type = 'IRI', value = match[1];\n lexicalLength = match[1].length + 2;\n }\n // Try to find a full IRI with escape sequences\n else if (match = execAt(this._iri, input, pos)) {\n value = this._unescape(match[1], stringEscapeReplacements);\n if (value === null || illegalIriChars.test(value))\n return reportSyntaxError(this, input, pos);\n type = 'IRI';\n lexicalLength = match[1].length + 2;\n }\n // Try to find a triple term\n else if (input.length - pos > 2 && input[pos + 1] === '<' && input[pos + 2] === '(')\n type = '<<(', matchLength = 3;\n // Try to find a reified triple\n else if (!this._lineMode && input.length - pos > (inputFinished ? 1 : 2) && input[pos + 1] === '<')\n type = '<<', matchLength = 2;\n // Try to find a backwards implication arrow\n else if (this._n3Mode && input.length - pos > 1 && input[pos + 1] === '=') {\n matchLength = 2;\n if (this._isImpliedBy) type = 'abbreviation', value = '<';\n else type = 'inverse', value = '>';\n }\n // Try to find an inverted predicate marker\n else if (this._n3Mode && input.length - pos > 1 && input[pos + 1] === '-')\n type = 'inversePredicate', matchLength = 2;\n break;\n\n case '>':\n // Try to find a reified triple\n if (input.length - pos > 1 && input[pos + 1] === '>')\n type = '>>', matchLength = 2;\n break;\n\n case '_':\n // Try to find a blank node. Since it can contain (but not end with) a dot,\n // we always need a non-dot character before deciding it is a blank node.\n // Therefore, try inserting a space if we're at the end of the input.\n if ((match = execAt(this._blank, input, pos)) ||\n inputFinished && (match = execAtEnd(this._blank, input, pos))) {\n type = 'blank', prefix = '_', value = match[1];\n lexicalLength = match[1].length + 2;\n }\n break;\n\n case '\"':\n // Try to find a literal without escape sequences\n if (match = execAt(this._simpleQuotedString, input, pos))\n value = match[1];\n // Try to find a literal wrapped in three pairs of quotes\n else {\n ({ value, matchLength, finalLineLength, tripleQuoted } = this._parseLiteral(input, pos));\n if (value === null)\n return reportSyntaxError(this, input, pos);\n }\n if (match !== null || matchLength !== 0) {\n type = 'literal';\n this._literalClosingPos = 0;\n }\n break;\n\n case \"'\":\n if (!this._lineMode) {\n // Try to find a literal without escape sequences\n if (match = execAt(this._simpleApostropheString, input, pos))\n value = match[1];\n // Try to find a literal wrapped in three pairs of quotes\n else {\n ({ value, matchLength, finalLineLength, tripleQuoted } = this._parseLiteral(input, pos));\n if (value === null)\n return reportSyntaxError(this, input, pos);\n }\n if (match !== null || matchLength !== 0) {\n type = 'literal';\n this._literalClosingPos = 0;\n }\n }\n break;\n\n case '?':\n // Try to find a variable\n if (this._n3Mode && (match = execAt(this._variable, input, pos)))\n type = 'var', value = match[0];\n break;\n\n case '@':\n // Try to find a language code. A language code can contain dash-separated\n // subtags, so if the match is immediately followed by a single dash and the\n // input is not finished, another subtag may still arrive in a later chunk and\n // the match would be premature; wait for more input in that case.\n // A double dash starts a direction code, which cannot extend the language code.\n if (this._previousMarker === 'literal' && (match = execAt(this._langcode, input, pos)) && match[1] !== 'version') {\n const end = pos + match[0].length;\n if (!inputFinished && input[end] === '-' && input[end + 1] !== '-')\n match = null;\n else\n type = 'langcode', value = match[1];\n }\n // Try to find a keyword\n else if (match = execAt(this._atKeyword, input, pos))\n type = match[0];\n break;\n\n case '.':\n // Try to find a dot as punctuation\n if (input.length - pos === 1 ? inputFinished : (input[pos + 1] < '0' || input[pos + 1] > '9')) {\n type = '.';\n matchLength = 1;\n break;\n }\n // Fall through to numerical case (could be a decimal dot)\n\n case '0':\n case '1':\n case '2':\n case '3':\n case '4':\n case '5':\n case '6':\n case '7':\n case '8':\n case '9':\n case '+':\n case '-':\n if (input[pos + 1] === '-') {\n // Try to find a direction code\n if (this._previousMarker === 'langcode') {\n if (input.startsWith('--ltr', pos))\n type = 'dircode', value = 'ltr', matchLength = 5;\n else if (input.startsWith('--rtl', pos))\n type = 'dircode', value = 'rtl', matchLength = 5;\n }\n break;\n }\n\n // Try to find a number. Since it can contain (but not end with) a dot,\n // we always need a non-dot character before deciding it is a number.\n // Therefore, try inserting a space if we're at the end of the input.\n if (match = execAt(this._number, input, pos) ||\n inputFinished && (match = execAtEnd(this._number, input, pos))) {\n type = 'literal', value = match[0];\n prefix = (typeof match[1] === 'string' ? xsd.double :\n (typeof match[2] === 'string' ? xsd.decimal : xsd.integer));\n }\n break;\n\n case 'B':\n case 'b':\n case 'p':\n case 'P':\n case 'G':\n case 'g':\n case 'V':\n case 'v':\n // Try to find a SPARQL-style keyword\n if (match = execAt(this._keyword, input, pos))\n type = match[0].toUpperCase();\n else\n inconclusive = true;\n break;\n\n case 'f':\n case 't':\n // Try to match a boolean\n if (testAt(this._boolean, input, pos))\n type = 'literal', value = firstChar === 't' ? 'true' : 'false', prefix = xsd.boolean, matchLength = value.length;\n else\n inconclusive = true;\n break;\n\n case 'a':\n // Try to find an abbreviated predicate\n if (testAt(this._shortPredicates, input, pos))\n type = 'abbreviation', value = 'a', matchLength = 1;\n else\n inconclusive = true;\n break;\n\n case 'h':\n case 'o':\n // Try to find an N3 verb keyword\n if (this._n3Mode && (match = this._matchN3Verb(input, pos, inputFinished)))\n type = match[0];\n else\n inconclusive = true;\n break;\n\n case 'i':\n // Try to find an IRI property list identifier or N3 verb keyword\n if (this._n3Mode && testAt(this._n3Id, input, pos))\n type = 'id', matchLength = 2;\n else if (this._n3Mode && (match = this._matchN3Verb(input, pos, inputFinished)))\n type = match[0];\n else\n inconclusive = true;\n break;\n\n case '=':\n // Try to find an implication arrow or equals sign\n if (this._n3Mode && input.length - pos > 1) {\n type = 'abbreviation';\n if (input[pos + 1] !== '>')\n matchLength = 1, value = '=';\n else\n matchLength = 2, value = '>';\n }\n break;\n\n case '!':\n if (!this._n3Mode)\n break;\n case ')':\n if (!inputFinished && (input.length - pos === 1 || (input.length - pos === 2 && input[pos + 1] === '>'))) {\n // Don't consume yet, as it *could* become a triple term end.\n break;\n }\n // Try to find a triple term\n if (input.length - pos > 2 && input[pos + 1] === '>' && input[pos + 2] === '>') {\n type = ')>>', matchLength = 3;\n break;\n }\n case ',':\n case ';':\n case '[':\n case ']':\n case '(':\n case '}':\n case '~':\n if (!this._lineMode) {\n matchLength = 1;\n type = firstChar;\n }\n break;\n case '{':\n // We need at least 2 tokens lookahead to distinguish \"{|\" and \"{ \"\n if (!this._lineMode && input.length - pos >= 2) {\n // Try to find a quoted triple annotation start\n if (input[pos + 1] === '|')\n type = '{|', matchLength = 2;\n else\n type = firstChar, matchLength = 1;\n }\n break;\n case '|':\n // We need 2 tokens lookahead to parse \"|}\"\n // Try to find a quoted triple annotation end\n if (input.length - pos >= 2 && input[pos + 1] === '}')\n type = '|}', matchLength = 2;\n break;\n\n default:\n inconclusive = true;\n }\n\n // Some first characters do not allow an immediate decision, so inspect more\n if (inconclusive) {\n // Try to find a prefix\n let end;\n if ((this._previousMarker === '@prefix' || this._previousMarker === 'PREFIX') &&\n input.charCodeAt(end = skipPrefix(input, pos)) === COLON &&\n end + 1 < input.length && (input[end + 1] === '#' || input[end + 1] === '<' ||\n isWhitespace(input.charCodeAt(end + 1)))) {\n type = 'prefix', value = input.slice(pos, end);\n matchLength = end + 1 - pos;\n }\n // Try to find an additional directive keyword\n // (at the end of the input, only a short final word can be one)\n else if (this._directive !== null && this._directiveStarts.includes(firstChar) &&\n ((match = execAt(this._directive, input, pos)) ||\n inputFinished && input.length - pos <= this._directiveMaxLength &&\n (match = execAtEnd(this._directive, input, pos))))\n type = match[0].toUpperCase();\n // Try to find a prefixed name. Since it can contain (but not end with) a dot,\n // we always need a non-dot character before deciding it is a prefixed name,\n // except at the end of the input.\n else if (!this._lineMode && (end = skipPrefixedName(input, pos, inputFinished)) >= 0) {\n const colon = input.indexOf(':', pos);\n type = 'prefixed', prefix = input.slice(pos, colon);\n value = this._unescape(input.slice(colon + 1, end), localNameEscapeReplacements);\n matchLength = end - pos;\n }\n }\n\n // A type token is special: it can only be emitted after an IRI or prefixed name is read\n if (this._previousMarker === '^^') {\n switch (type) {\n case 'prefixed': type = 'type'; break;\n case 'IRI': type = 'typeIRI'; break;\n default: type = '';\n }\n }\n\n // What if nothing of the above was found?\n if (!type) {\n // We could be in streaming mode, and then we just wait for more input to arrive.\n // Otherwise, a syntax error has occurred in the input.\n // One exception: error on an unaccounted linebreak (= not inside a triple-quoted literal).\n if (inputFinished || (!input.startsWith(\"'''\", pos) && !input.startsWith('\"\"\"', pos) &&\n /\\n|\\r/.test(input.slice(pos))))\n return reportSyntaxError(this, input, pos);\n else\n return this._suspend(input, pos, currentLineLength);\n }\n\n // Emit the parsed token\n // Consumption includes separator whitespace; lexicalLength excludes it\n // and any synthetic EOF space. Consumption is clamped to the input below.\n const length = matchLength || match[0].length;\n const start = currentLineLength - (input.length - pos);\n let token;\n if (finalLineLength) {\n token = {\n type, value, prefix, line, start,\n end: finalLineLength, endLine: this._line, tripleQuoted,\n };\n callback(null, token);\n }\n // Triple-quoted strings are marked, since version declarations do not allow them\n else if (tripleQuoted) {\n token = { type, value, prefix, line, start, end: start + length, tripleQuoted };\n callback(null, token);\n }\n else\n token = emitToken(type, value, prefix, line, start, lexicalLength || length);\n this.previousToken = token;\n // The string of a version declaration cannot take a language tag, so a following @keyword is a keyword\n this._previousMarker = type === 'literal' && (this._previousMarker === 'VERSION' || this._previousMarker === '@version') ? 'version' : type;\n\n // Advance to next part to tokenize\n pos = Math.min(pos + length, input.length);\n if (finalLineLength)\n currentLineLength = input.length - pos + finalLineLength;\n }\n\n // Emits a comment at its exact position within matched whitespace.\n function emitComment(value, line, start) {\n callback(null, {\n type: 'comment', value, prefix: '', line,\n start, end: start + value.length + 1,\n });\n }\n // Emits the token through the callback\n function emitToken(type, value, prefix, line, start, length) {\n const token = { type, value, prefix, line, start, end: start + length };\n callback(null, token);\n return token;\n }\n // Signals the syntax error through the callback\n function reportSyntaxError(self, input, pos) {\n callback(self._syntaxError(execAt(nonWhitespace, input, pos)[0]));\n }\n }\n\n // ### `_suspend` keeps the unconsumed input until more input arrives\n _suspend(input, pos, currentLineLength) {\n this._linePosition = currentLineLength - (input.length - pos);\n return this._input = input.slice(pos);\n }\n\n // ### `_matchN3Verb` matches an N3 verb unless the input is a longer prefixed name\n _matchN3Verb(input, pos, inputFinished) {\n const verb = execAt(this._n3Verb, input, pos);\n if (!verb)\n return null;\n\n // Most verb boundaries cannot be part of a prefix, so keep the common path fast.\n // U+1680 and U+FEFF are whitespace to the regular expression but name characters.\n const next = input[pos + verb[0].length];\n if (next !== '-' && next !== '_' && (next < '0' || next > '9') &&\n next !== '\\u1680' && next !== '\\ufeff')\n return verb;\n\n // A prefix can start with a verb and continue with characters that are also\n // valid verb boundaries. Prefer the longer prefixed name when it is complete.\n if (skipPrefixedName(input, pos, true) >= 0)\n return null;\n\n // If a stream chunk ends partway through such a prefix,\n // wait for the colon instead of prematurely emitting the verb.\n if (!inputFinished && skipPrefix(input, pos) === input.length)\n return null;\n return verb;\n }\n\n // ### `_unescape` replaces N3 escape codes by their corresponding characters,\n // allowing only the fixed escape sequences from the given replacement table\n _unescape(item, replacements) {\n let backslash = item.indexOf('\\\\');\n if (backslash < 0)\n return item;\n\n let result = '', start = 0;\n // A trailing lone backslash is not an escape sequence.\n while (backslash >= 0 && backslash + 1 < item.length) {\n const escapedChar = item[backslash + 1];\n let end = backslash + 2, replacement;\n if (escapedChar === 'u' || escapedChar === 'U') {\n end += escapedChar === 'u' ? 4 : 8;\n if (end > item.length)\n return null;\n\n let charCode = 0;\n for (let i = backslash + 2; i < end; i++) {\n let digit = item.charCodeAt(i);\n if (digit >= 0x30 && digit <= 0x39) // 0\u20139\n digit -= 0x30;\n else if (digit >= 0x41 && digit <= 0x46) // A\u2013F\n digit -= 0x41 - 10;\n else if (digit >= 0x61 && digit <= 0x66) // a\u2013f\n digit -= 0x61 - 10;\n else\n return null;\n // Eight digits can exceed a signed 32-bit integer; avoid bitwise shifts.\n charCode = charCode * 16 + digit;\n }\n if (!isValidCodePoint(charCode))\n return null;\n replacement = String.fromCodePoint(charCode);\n }\n else {\n if (!(escapedChar in replacements))\n return null;\n replacement = replacements[escapedChar];\n }\n result += item.slice(start, backslash) + replacement;\n start = end;\n backslash = item.indexOf('\\\\', start);\n }\n return result + item.slice(start);\n }\n\n // ### `_parseLiteral` parses a literal at the given position into an unescaped value\n _parseLiteral(input, pos) {\n // Ensure we have enough lookahead to identify triple-quoted strings\n if (input.length - pos >= 3) {\n // The caller has already identified a single or double quote.\n const quote = input[pos];\n const openingLength = input[pos + 1] === quote && input[pos + 2] === quote ? 3 : 1;\n let opening = quote;\n if (openingLength === 3)\n opening = quote === '\"' ? '\"\"\"' : \"'''\";\n\n // Find the next candidate closing quotes\n let closingPos = pos + Math.max(this._literalClosingPos, openingLength);\n while ((closingPos = input.indexOf(opening, closingPos)) > pos) {\n // Count backslashes right before the closing quotes\n let backslashCount = 0;\n while (input[closingPos - backslashCount - 1] === '\\\\')\n backslashCount++;\n\n // An even number of backslashes (in particular 0)\n // means these are actual, non-escaped closing quotes\n if (backslashCount % 2 === 0) {\n // Extract and unescape the value\n const raw = input.substring(pos + openingLength, closingPos),\n lines = raw.split(/\\r\\n|\\r|\\n/),\n lineCount = lines.length - 1;\n const matchLength = closingPos - pos + openingLength;\n // Only triple-quoted strings can be multi-line\n if (openingLength === 1 && lineCount !== 0 ||\n openingLength === 3 && this._lineMode)\n break;\n this._line += lineCount;\n const finalLineLength = lineCount === 0 ? 0 : lines[lines.length - 1].length + openingLength;\n return {\n value: this._unescape(raw, stringEscapeReplacements), matchLength, finalLineLength,\n tripleQuoted: openingLength === 3,\n };\n }\n closingPos++;\n }\n this._literalClosingPos = input.length - pos - openingLength + 1;\n }\n return { value: '', matchLength: 0, finalLineLength: 0, tripleQuoted: false };\n }\n\n // ### `_tryTokenizeToEnd` tokenizes as far as possible, reporting failures through the callback\n _tryTokenizeToEnd(callback, inputFinished) {\n // Keep track of errors thrown by the callback, which must reach the caller unchanged\n let callbackError;\n try {\n this._tokenizeToEnd((error, token) => {\n try {\n return callback(error, token);\n }\n catch (thrown) {\n throw (callbackError = thrown);\n }\n }, inputFinished);\n }\n catch (error) {\n // Matching an extremely long token can exhaust the regular expression stack\n if (error === callbackError || !(error instanceof RangeError))\n throw error;\n callback(this._syntaxError(null, `Token too long on line ${this._line}.`));\n }\n }\n\n // ### `_syntaxError` creates a syntax error for the given issue\n _syntaxError(issue, message = `Unexpected \"${issue}\" on line ${this._line}.`) {\n this._input = null;\n const err = new Error(message);\n err.context = {\n token: undefined,\n line: this._line,\n previousToken: this.previousToken,\n };\n return err;\n }\n\n // ### `_startTokenization` resets the lexer state for a new input\n _startTokenization() {\n this._line = 1;\n this._linePosition = 0;\n this._previousMarker = undefined;\n this.previousToken = undefined;\n this._literalClosingPos = 0;\n this._input = undefined;\n // Deferred tokenization and stream events can outlive their invocation.\n // Ignore them once a later call takes ownership of the lexer state.\n return this._tokenization = {};\n }\n\n // ### `_tokenizeString` synchronously emits the tokens of a complete string through the callback,\n // so that the caller can consume each token without the lexer collecting them all first\n _tokenizeString(input, callback) {\n this._startTokenization();\n this._input = this._readStartingBom(input);\n this._tryTokenizeToEnd(callback, true);\n }\n\n // ### Strips off any starting UTF BOM mark.\n _readStartingBom(input) {\n if (input.startsWith('\\ufeff')) {\n this._linePosition = 1;\n return input.slice(1);\n }\n return input;\n }\n\n // ## Public methods\n\n // ### `tokenize` starts the transformation of an N3 document into an array of tokens.\n // The input can be a string or a stream.\n // Token ranges use one-based lines and zero-based, end-exclusive UTF-16 columns.\n // Separator whitespace counts towards the next token's start, outside either range.\n // Multiline tokens also have endLine; their end column is relative to that line.\n tokenize(input, callback) {\n const tokenization = this._startTokenization();\n\n // If the input is a string, continuously emit tokens through the callback until the end\n if (typeof input === 'string') {\n this._input = this._readStartingBom(input);\n // If a callback was passed, asynchronously call it\n if (typeof callback === 'function')\n queueMicrotask(() => {\n if (this._tokenization === tokenization)\n this._tryTokenizeToEnd(callback, true);\n });\n // If no callback was passed, tokenize synchronously and return\n else {\n const tokens = [];\n let error;\n this._tryTokenizeToEnd((e, t) => e ? (error = e) : tokens.push(t), true);\n if (error) throw error;\n return tokens;\n }\n }\n // Otherwise, the input must be a stream\n else {\n let decoder, retryLength = 0;\n if (typeof input.setEncoding === 'function')\n input.setEncoding('utf8');\n // Adds the data chunk to the buffer and parses as far as possible\n input.on('data', data => {\n if (this._tokenization === tokenization && this._input !== null && data.length !== 0) {\n // Decode bytes, keeping an incomplete trailing character for the next chunk\n if (typeof data !== 'string') {\n decoder = decoder || new TextDecoder('utf-8', { ignoreBOM: true });\n if (!(data = decoder.decode(data, { stream: true })))\n return;\n }\n // Only read a BOM at the start\n if (typeof this._input === 'undefined')\n this._input = this._readStartingBom(data);\n else\n this._input += data;\n // Tokenize as far as possible. When a previous attempt left a long unfinished token,\n // wait until the buffered input has doubled, so the token is not rescanned for every chunk.\n if (this._input.length >= retryLength) {\n this._tryTokenizeToEnd(callback, false);\n retryLength = this._input !== null && this._input.length > MIN_RESCAN_LENGTH ?\n 2 * this._input.length : 0;\n }\n }\n });\n // Parses until the end\n input.on('end', () => {\n if (this._tokenization === tokenization && this._input !== null) {\n // Decode any incomplete character left at the end\n const rest = decoder ? decoder.decode() : '';\n if (rest)\n this._input = typeof this._input === 'string' ? this._input + rest : rest;\n if (typeof this._input === 'string')\n this._tryTokenizeToEnd(callback, true);\n }\n });\n input.on('error', error => {\n if (this._tokenization === tokenization)\n callback(error);\n });\n }\n }\n}\n", "// N3.js implementations of the RDF/JS core data types\n// See http://rdf.js.org/data-model-spec/\n\nimport namespaces from './IRIs';\n\nconst { rdf, xsd } = namespaces;\n\n// eslint-disable-next-line prefer-const\nlet DEFAULTGRAPH;\nlet _blankNodeCounter = 0;\n// The ID of the empty IRI, which cannot be '' as that is the ID of the default graph\nconst EMPTY_IRI_ID = '<>';\n\nconst escapedLiteral = /^\"(.*\".*)(?=\"[^\"]*$)/;\n\n// ## DataFactory singleton\nconst DataFactory = {\n namedNode,\n blankNode,\n variable,\n literal,\n defaultGraph,\n quad,\n triple: quad,\n fromTerm,\n fromQuad,\n};\nexport default DataFactory;\n\n// ## Term constructor\nexport class Term {\n constructor(id) {\n this.id = id;\n }\n\n // ### The value of this term\n get value() {\n return this.id;\n }\n\n // ### Returns whether this object represents the same term as the other\n equals(other) {\n // If both terms were created by this library,\n // equality can be computed through ids of the same term type,\n // since IRIs such as `?x` have the same id as other terms\n if (other instanceof Term)\n return this.id === other.id && this.termType === other.termType;\n // Otherwise, compare term type and value\n return !!other && this.termType === other.termType &&\n this.value === other.value;\n }\n\n // ### Implement hashCode for Immutable.js, since we implement `equals`\n // https://immutable-js.com/docs/v4.0.0/ValueObject/#hashCode()\n hashCode() {\n return 0;\n }\n\n // ### Returns a plain object representation of this term\n toJSON() {\n return {\n termType: this.termType,\n value: this.value,\n };\n }\n}\n\n\n// ## NamedNode constructor\nexport class NamedNode extends Term {\n // ### Creates a named node\n /**\n * @deprecated Create named nodes through a data factory instead\n * (`DataFactory.namedNode(iri)`), so that term validation can be applied;\n * the constructor assumes an already-validated IRI.\n */\n constructor(iri) {\n if (iri !== '')\n super(iri);\n // The empty IRI gets a distinct ID, since '' is the ID of the default graph\n else {\n super(EMPTY_IRI_ID);\n Object.defineProperty(this, 'value', { value: '' });\n }\n }\n\n // ### The term type of this term\n get termType() {\n return 'NamedNode';\n }\n}\n\n// ## Literal constructor\nexport class Literal extends Term {\n // ### Creates a literal\n /**\n * @deprecated Create literals through a data factory instead\n * (`DataFactory.literal(value, languageOrDatatype)`), so that term\n * validation can be applied; the constructor takes the internal\n * id representation and assumes it is already valid.\n */\n constructor(id) {\n super(id);\n }\n\n // ### The term type of this term\n get termType() {\n return 'Literal';\n }\n\n // ### The text value of this literal\n get value() {\n return this.id.substring(1, this.id.lastIndexOf('\"'));\n }\n\n // ### The language of this literal\n get language() {\n // Find the last quotation mark (e.g., '\"abc\"@en-us')\n const id = this.id;\n let atPos = id.lastIndexOf('\"') + 1;\n const dirPos = id.lastIndexOf('--');\n // If \"@\" it follows, return the remaining substring; empty otherwise\n return atPos < id.length && id[atPos++] === '@' ? (dirPos > atPos ? id.substr(0, dirPos) : id).substr(atPos).toLowerCase() : '';\n }\n\n // ### The direction of this literal\n get direction() {\n // Find the last double dash after the closing quote and language tag (e.g., '\"abc\"@en-us--ltr')\n const id = this.id;\n const endPos = id.lastIndexOf('\"');\n const dirPos = id[endPos + 1] === '@' ? id.lastIndexOf('--') : -1;\n return dirPos > endPos && dirPos + 2 < id.length ? id.substr(dirPos + 2).toLowerCase() : '';\n }\n\n // ### The datatype IRI of this literal\n get datatype() {\n return new NamedNode(this.datatypeString);\n }\n\n // ### The datatype string of this literal\n get datatypeString() {\n // Find the last quotation mark (e.g., '\"abc\"^^http://ex.org/types#t')\n const id = this.id, dtPos = id.lastIndexOf('\"') + 1;\n const char = dtPos < id.length ? id[dtPos] : '';\n // If \"^\" it follows, return the remaining substring\n return char === '^' ? id.substr(dtPos + 2) :\n // If \"@\" follows, return rdf:langString or rdf:dirLangString; xsd:string otherwise\n (char !== '@' ? xsd.string : (id.indexOf('--', dtPos) > 0 ? rdf.dirLangString : rdf.langString));\n }\n\n // ### Returns whether this object represents the same term as the other\n equals(other) {\n // If both literals were created by this library,\n // equality can be computed through ids\n if (other instanceof Literal)\n return this.id === other.id;\n // Otherwise, compare term type, value, language, and datatype\n return !!other && !!other.datatype &&\n this.termType === other.termType &&\n this.value === other.value &&\n this.language === other.language &&\n ((this.direction === other.direction) || (this.direction === '' && !other.direction)) &&\n this.datatype.value === other.datatype.value;\n }\n\n toJSON() {\n return {\n termType: this.termType,\n value: this.value,\n language: this.language,\n direction: this.direction,\n datatype: { termType: 'NamedNode', value: this.datatypeString },\n };\n }\n}\n\n// ## BlankNode constructor\nexport class BlankNode extends Term {\n // ### Creates a blank node\n /**\n * @deprecated Create blank nodes through a data factory instead\n * (`DataFactory.blankNode(name)`), so that term validation can be applied;\n * the constructor assumes an already-validated name.\n */\n constructor(name) {\n super(`_:${name}`);\n }\n\n // ### The term type of this term\n get termType() {\n return 'BlankNode';\n }\n\n // ### The name of this blank node\n get value() {\n return this.id.substr(2);\n }\n}\n\nexport class Variable extends Term {\n // ### Creates a variable\n /**\n * @deprecated Create variables through a data factory instead\n * (`DataFactory.variable(name)`), so that term validation can be applied;\n * the constructor assumes an already-validated name.\n */\n constructor(name) {\n super(`?${name}`);\n }\n\n // ### The term type of this term\n get termType() {\n return 'Variable';\n }\n\n // ### The name of this variable\n get value() {\n return this.id.substr(1);\n }\n}\n\n// ## DefaultGraph constructor\nexport class DefaultGraph extends Term {\n // ### Creates the default graph\n /**\n * @deprecated Obtain the default graph through a data factory instead\n * (`DataFactory.defaultGraph()`).\n */\n constructor() {\n super('');\n return DEFAULTGRAPH || this;\n }\n\n // ### The term type of this term\n get termType() {\n return 'DefaultGraph';\n }\n\n // ### Returns whether this object represents the same term as the other\n equals(other) {\n // If both terms were created by this library,\n // equality can be computed through strict equality;\n // otherwise, compare term types.\n return (this === other) || (!!other && (this.termType === other.termType));\n }\n}\n\n// ## DefaultGraph singleton\nDEFAULTGRAPH = new DefaultGraph();\n\n// ### Constructs a term from the given internal string ID\n// The third 'nested' parameter of this function is to aid\n// with recursion over nested terms. It should not be used\n// by consumers of this library.\n// See https://github.com/rdfjs/N3.js/pull/311#discussion_r1061042725\nexport function termFromId(id, factory, nested) {\n factory = factory || DataFactory;\n\n // Falsy value or empty string indicate the default graph\n if (!id)\n return factory.defaultGraph();\n\n // Identify the term type based on the first character\n switch (id[0]) {\n case '?':\n return factory.variable(id.substr(1));\n case '_':\n return factory.blankNode(id.substr(2));\n case '\"':\n // Shortcut for internal literals\n if (factory === DataFactory)\n return new Literal(id);\n // Literal without datatype or language\n if (id[id.length - 1] === '\"')\n return factory.literal(id.substr(1, id.length - 2));\n // Literal with datatype or language\n const endPos = id.lastIndexOf('\"', id.length - 1);\n let languageOrDatatype;\n if (id[endPos + 1] === '@') {\n languageOrDatatype = id.substr(endPos + 2);\n const dashDashIndex = languageOrDatatype.lastIndexOf('--');\n if (dashDashIndex > 0 && dashDashIndex < languageOrDatatype.length) {\n languageOrDatatype = {\n language: languageOrDatatype.substr(0, dashDashIndex),\n direction: languageOrDatatype.substr(dashDashIndex + 2),\n };\n }\n }\n else {\n languageOrDatatype = factory.namedNode(id.substr(endPos + 3));\n }\n return factory.literal(id.substr(1, endPos - 1),\n languageOrDatatype);\n case '[':\n id = JSON.parse(id);\n break;\n case '<':\n if (id === EMPTY_IRI_ID)\n return factory.namedNode('');\n // falls through\n default:\n if (!nested || !Array.isArray(id)) {\n return factory.namedNode(id);\n }\n }\n return factory.quad(\n termFromId(id[0], factory, true),\n termFromId(id[1], factory, true),\n termFromId(id[2], factory, true),\n id[3] && termFromId(id[3], factory, true),\n );\n}\n\n// ### Constructs an internal string ID from the given term or ID string\n// The third 'nested' parameter of this function is to aid\n// with recursion over nested terms. It should not be used\n// by consumers of this library.\n// See https://github.com/rdfjs/N3.js/pull/311#discussion_r1061042725\nexport function termToId(term, nested) {\n if (typeof term === 'string')\n return term;\n if (term instanceof Term && term.termType !== 'Quad')\n return term.id;\n if (!term)\n return DEFAULTGRAPH.id;\n\n // Term instantiated with another library\n switch (term.termType) {\n case 'NamedNode': {\n const iri = term.value;\n return iri !== '' ? iri : EMPTY_IRI_ID;\n }\n case 'BlankNode': return `_:${term.value}`;\n case 'Variable': return `?${term.value}`;\n case 'DefaultGraph': return '';\n case 'Literal': return `\"${term.value}\"${\n term.language ? `@${term.language}${term.direction ? `--${term.direction}` : ''}` :\n (term.datatype && term.datatype.value !== xsd.string ? `^^${term.datatype.value}` : '')}`;\n case 'Quad':\n const res = [\n termToId(term.subject, true),\n termToId(term.predicate, true),\n termToId(term.object, true),\n ];\n if (term.graph && term.graph.termType !== 'DefaultGraph') {\n res.push(termToId(term.graph, true));\n }\n return nested ? res : JSON.stringify(res);\n default: throw new Error(`Unexpected termType: ${term.termType}`);\n }\n}\n\n\n// ## Quad constructor\nexport class Quad extends Term {\n // ### Creates a quad\n /**\n * @deprecated Create quads through a data factory instead\n * (`DataFactory.quad(subject, predicate, object, graph)`), so that term\n * validation can be applied; the constructor assumes already-validated terms.\n */\n constructor(subject, predicate, object, graph) {\n super('');\n this._subject = subject;\n this._predicate = predicate;\n this._object = object;\n this._graph = graph || DEFAULTGRAPH;\n }\n\n // ### The term type of this term\n get termType() {\n return 'Quad';\n }\n\n get subject() {\n return this._subject;\n }\n\n get predicate() {\n return this._predicate;\n }\n\n get object() {\n return this._object;\n }\n\n get graph() {\n return this._graph;\n }\n\n // ### Returns a plain object representation of this quad\n toJSON() {\n return {\n termType: this.termType,\n subject: this._subject.toJSON(),\n predicate: this._predicate.toJSON(),\n object: this._object.toJSON(),\n graph: this._graph.toJSON(),\n };\n }\n\n // ### Returns whether this object represents the same quad as the other\n equals(other) {\n return !!other && this._subject.equals(other.subject) &&\n this._predicate.equals(other.predicate) &&\n this._object.equals(other.object) &&\n this._graph.equals(other.graph);\n }\n}\nexport { Quad as Triple };\n\n// ### Escapes the quotes within the given literal\nexport function escapeQuotes(id) {\n return id.replace(escapedLiteral, (_, quoted) => `\"${quoted.replace(/\"/g, '\"\"')}`);\n}\n\n// ### Unescapes the quotes within the given literal\nexport function unescapeQuotes(id) {\n return id.replace(escapedLiteral, (_, quoted) => `\"${quoted.replace(/\"\"/g, '\"')}`);\n}\n\n// ### Creates an IRI\nfunction namedNode(iri) {\n return new NamedNode(iri);\n}\n\n// ### Creates a blank node\nfunction blankNode(name) {\n return new BlankNode(name || `n3-${_blankNodeCounter++}`);\n}\n\n// ### Creates a literal\nfunction literal(value, languageOrDataType) {\n // Create a language-tagged string\n if (typeof languageOrDataType === 'string')\n return new Literal(`\"${value}\"@${languageOrDataType.toLowerCase()}`);\n\n // Create a language-tagged string with base direction\n if (languageOrDataType !== undefined && !('termType' in languageOrDataType)) {\n return new Literal(`\"${value}\"@${languageOrDataType.language.toLowerCase()}${languageOrDataType.direction ? `--${languageOrDataType.direction.toLowerCase()}` : ''}`);\n }\n\n // Automatically determine datatype for booleans, numbers, BigInts, and dates\n let datatype = languageOrDataType ? languageOrDataType.value : '';\n if (datatype === '') {\n // Convert a boolean\n if (typeof value === 'boolean')\n datatype = xsd.boolean;\n // Convert an integer or double\n else if (typeof value === 'number') {\n if (Number.isFinite(value))\n // From 1e21 upward, a number's string form turns exponential (\"1e+21\"),\n // which is not a valid xsd:integer lexical, so type it as xsd:double\n // (the same cut-off as JSON-LD 1.1's Object to RDF Conversion)\n datatype = Number.isInteger(value) && Math.abs(value) < 1e21 ? xsd.integer : xsd.double;\n else {\n datatype = xsd.double;\n if (!Number.isNaN(value))\n value = value > 0 ? 'INF' : '-INF';\n }\n }\n // Convert a BigInt, whose decimal string is always a valid xsd:integer lexical\n else if (typeof value === 'bigint')\n datatype = xsd.integer;\n // Convert a valid date\n else if (value instanceof Date && !Number.isNaN(value.getTime())) {\n datatype = xsd.dateTime;\n value = value.toISOString();\n }\n }\n\n // Create a datatyped literal\n return (datatype === '' || datatype === xsd.string) ?\n new Literal(`\"${value}\"`) :\n new Literal(`\"${value}\"^^${datatype}`);\n}\n\n// ### Creates a variable\nfunction variable(name) {\n return new Variable(name);\n}\n\n// ### Returns the default graph\nfunction defaultGraph() {\n return DEFAULTGRAPH;\n}\n\n// ### Creates a quad\nfunction quad(subject, predicate, object, graph) {\n return new Quad(subject, predicate, object, graph);\n}\n\nexport function fromTerm(term) {\n if (term instanceof Term)\n return term;\n\n // Term instantiated with another library\n switch (term.termType) {\n case 'NamedNode': return namedNode(term.value);\n case 'BlankNode': return blankNode(term.value);\n case 'Variable': return variable(term.value);\n case 'DefaultGraph': return DEFAULTGRAPH;\n case 'Literal': return literal(term.value, !term.language ? term.datatype :\n term.direction ? { language: term.language, direction: term.direction } : term.language);\n case 'Quad': return fromQuad(term);\n default: throw new Error(`Unexpected termType: ${term.termType}`);\n }\n}\n\nexport function fromQuad(inQuad) {\n if (inQuad instanceof Quad)\n return inQuad;\n\n if (inQuad.termType !== 'Quad')\n throw new Error(`Unexpected termType: ${inQuad.termType}`);\n\n return quad(fromTerm(inQuad.subject), fromTerm(inQuad.predicate), fromTerm(inQuad.object), fromTerm(inQuad.graph));\n}\n", "// **N3Parser** parses N3 documents.\nimport N3Lexer from './N3Lexer';\nimport N3DataFactory from './N3DataFactory';\nimport namespaces from './IRIs';\n\nlet blankNodePrefix = 0;\n// Detects `.` and `..` path segments in an IRI\nconst dotSegments = /(^|\\/)\\.\\.?($|[/#?])/;\n// Detects `.` and `..` segments in the path of an IRI, ignoring its query and fragment\nconst pathDotSegments = /^[^?#]*(?:^|\\/)\\.\\.?(?:$|[/#?])/;\n\n// ## Constructor\nexport default class N3Parser {\n constructor(options) {\n this._contextStack = [];\n this._graph = null;\n\n // Set the document IRI\n options = options || {};\n this._setBase(options.baseIRI);\n options.factory && initDataFactory(this, options.factory);\n\n // Set supported features depending on the format\n const format = (typeof options.format === 'string') ?\n options.format.match(/(?:^|\\W)(\\w*)$/)[1].toLowerCase() : '',\n isTurtle = /turtle/.test(format), isTriG = /trig/.test(format),\n isNTriples = /triple/.test(format), isNQuads = /quad/.test(format),\n isN3 = this._n3Mode = /n3/.test(format),\n isLineMode = isNTriples || isNQuads;\n // Keep inverse handling off the non-N3 emission path\n this._emitCurrent = this._emit;\n if (isN3) {\n this._createQuad = this._createQuadInDirection;\n this._emit = this._emitInDirection;\n this._emitCurrent = this._emitCurrentInDirection;\n }\n if (!(this._supportsNamedGraphs = !(isTurtle || isN3)))\n this._readPredicateOrNamedGraph = this._readPredicate;\n // Support triples in other graphs\n this._supportsQuads = !(isTurtle || isTriG || isNTriples || isN3);\n // Whether the log:isImpliedBy predicate is supported\n this._isImpliedBy = options.isImpliedBy;\n // Whether an undeclared empty prefix resolves against the document IRI\n this._implicitEmptyPrefix = !!options.implicitEmptyPrefix;\n // Whether an empty formula is read as the boolean literal true,\n // as in the N3 spec tests (opt-in until the next major version)\n this._emptyFormulaAsTrue = !!options.emptyFormulaAsTrue;\n // Disable relative IRIs in N-Triples or N-Quads mode\n if (isLineMode)\n this._resolveRelativeIRI = iri => { return null; };\n this._blankNodePrefix = typeof options.blankNodePrefix !== 'string' ? '' :\n options.blankNodePrefix.replace(/^(?!_:)/, '_:');\n // Map the token types of additional directives (@name and NAME) to their names\n this._directives = null;\n if (options.directives) {\n this._directives = Object.create(null);\n for (const name of options.directives)\n this._directives[`@${name.toLowerCase()}`] = this._directives[name.toUpperCase()] = name;\n }\n this._lexer = options.lexer || new N3Lexer({\n lineMode: isLineMode, n3: isN3, isImpliedBy: this._isImpliedBy, directives: options.directives,\n });\n // Disable explicit quantifiers by default\n this._explicitQuantifiers = !!options.explicitQuantifiers;\n // Disable formula-only blank node scoping by default\n this._formulaScopedBlankNodes = !!options.formulaScopedBlankNodes;\n // Disable parsing of unsupported versions by default\n this._parseUnsupportedVersions = !!options.parseUnsupportedVersions;\n this._version = options.version;\n // Maximum nesting depth of triple terms (default 1024; Infinity disables the limit)\n const maxTripleTermDepth = options.maxTripleTermDepth;\n this._maxTripleTermDepth = maxTripleTermDepth === Infinity ||\n Number.isInteger(maxTripleTermDepth) && maxTripleTermDepth >= 0 ? maxTripleTermDepth : 1024;\n }\n\n // ## Static class methods\n\n // ### `_resetBlankNodePrefix` restarts blank node prefix identification\n static _resetBlankNodePrefix() {\n blankNodePrefix = 0;\n }\n\n // ## Private methods\n\n // ### `_setBase` sets the base IRI to resolve relative IRIs\n _setBase(baseIRI) {\n if (!baseIRI) {\n this._base = '';\n this._basePath = '';\n this._basePathHasDotSegments = false;\n }\n else {\n // Remove fragment if present\n const fragmentPos = baseIRI.indexOf('#');\n if (fragmentPos >= 0)\n baseIRI = baseIRI.substr(0, fragmentPos);\n // Set base IRI and its components\n this._base = baseIRI;\n const queryPos = baseIRI.indexOf('?');\n const path = queryPos < 0 ? baseIRI : baseIRI.substr(0, queryPos);\n this._basePath = baseIRI.indexOf('/') < 0 ? baseIRI :\n path.substr(0, path.lastIndexOf('/') + 1);\n const base = baseIRI;\n baseIRI = baseIRI.match(/^(?:([a-z][a-z0-9+.-]*:))?(\\/\\/[^\\/?#]*)?/i);\n this._baseRoot = baseIRI[0];\n this._baseScheme = baseIRI[1];\n // If the base has an authority but an empty path,\n // relative IRIs merge under the path '/' (RFC 3986 \u00A75.2.3)\n if (baseIRI[2] !== undefined && (base.length === this._baseRoot.length || base[this._baseRoot.length] === '?'))\n this._basePath = `${this._baseRoot}/`;\n // Check once whether resolving against the base path needs to remove dot segments\n this._basePathHasDotSegments = dotSegments.test(this._basePath);\n }\n }\n\n // ### `_enterTripleTerm` stores the current parsing context when entering a triple term,\n // failing if triple terms nest deeper than the maximum depth\n _enterTripleTerm(type, subject, predicate, token) {\n if (this._tripleTermDepth >= this._maxTripleTermDepth) {\n this._error(`Triple terms nested deeper than ${this._maxTripleTermDepth} level${this._maxTripleTermDepth === 1 ? '' : 's'}`, token);\n return false;\n }\n this._tripleTermDepth++;\n this._saveContext(type, this._graph, subject, predicate, null);\n this._graph = null;\n return true;\n }\n\n // ### `_saveContext` stores the current parsing context\n // when entering a new scope (list, blank node, formula)\n _saveContext(type, graph, subject, predicate, object) {\n // Only N3 contexts need the extra parser state.\n if (!this._n3Mode) {\n this._contextStack.push({ type, subject, predicate, object, graph });\n return;\n }\n const context = {\n type,\n subject, predicate, object, graph,\n inverse: this._inversePredicate,\n expectOf: this._expectOf,\n blankPrefix: this._prefixes._,\n prefixChanges: this._prefixChanges,\n quantifiedChanges: this._quantifiedChanges,\n emptyFormula: this._emptyFormula,\n };\n // Prefix and base declarations are scoped to their formula,\n // so record prefix changes to undo them when the formula ends\n if (type === 'formula') {\n context.base = [this._base, this._basePath, this._baseRoot, this._baseScheme,\n this._basePathHasDotSegments];\n this._prefixChanges = [];\n }\n this._contextStack.push(context);\n // Every new scope resets the predicate direction\n this._inversePredicate = false;\n this._expectOf = false;\n // In N3, blank nodes and quantifiers are scoped to a formula;\n // with `formulaScopedBlankNodes`, lists and blank node property lists\n // share the enclosing scope instead of rescoping\n if (!this._formulaScopedBlankNodes || type === 'formula') {\n // Label the scope with the enclosing formula's blank node\n // (using a dot as separator, as a blank node label cannot start with it)\n this._prefixes._ = (this._graph ? `${this._graph.value}.` : '.');\n this._quantifiedChanges = [];\n }\n // A formula starts empty and must not inherit its parent's subject\n if (type === 'formula') {\n this._subject = null;\n this._emptyFormula = true;\n }\n }\n\n // ### `_restoreContext` restores the parent context\n // when leaving a scope (list, blank node, formula)\n _restoreContext(type, token) {\n // Obtain the previous context\n const context = this._contextStack.pop();\n if (!context || context.type !== type)\n return this._error(`Unexpected ${token.type}`, token);\n\n // Restore the quad of the previous context\n this._subject = context.subject;\n this._predicate = context.predicate;\n this._object = context.object;\n this._graph = context.graph;\n\n // Restore N3 context settings\n if (this._n3Mode) {\n this._inversePredicate = context.inverse;\n this._expectOf = context.expectOf;\n if (type === 'formula')\n [this._base, this._basePath, this._baseRoot, this._baseScheme,\n this._basePathHasDotSegments] = context.base;\n if (this._prefixChanges !== context.prefixChanges) {\n undoChanges(this._prefixes, this._prefixChanges);\n this._prefixChanges = context.prefixChanges;\n }\n this._prefixes._ = context.blankPrefix;\n if (this._quantifiedChanges !== context.quantifiedChanges) {\n undoChanges(this._quantified, this._quantifiedChanges);\n this._quantifiedChanges = context.quantifiedChanges;\n }\n this._emptyFormula = context.emptyFormula;\n }\n }\n\n // ### `_readBeforeTopContext` is called once only at the start of parsing.\n _readBeforeTopContext(token) {\n if (this._version && !this._isValidVersion(this._version))\n return this._error(`Detected unsupported version as media type parameter: \"${this._version}\"`, token);\n return this._readInTopContext(token);\n }\n\n // ### `_readInTopContext` reads a token when in the top context\n _readInTopContext(token) {\n switch (token.type) {\n // If an EOF token arrives in the top context, signal that we're done\n case 'eof':\n if (this._graph !== null)\n return this._error('Unclosed graph', token);\n delete this._prefixes._;\n return this._callback(null, null, this._prefixes);\n // It could be a prefix declaration\n case 'PREFIX':\n this._sparqlStyle = true;\n case '@prefix':\n return this._readPrefix;\n // It could be a base declaration\n case 'BASE':\n this._sparqlStyle = true;\n case '@base':\n return this._readBaseIRI;\n // It could be a version declaration\n case 'VERSION':\n this._sparqlStyle = true;\n case '@version':\n return this._readVersion;\n // It could be a graph\n case '{':\n if (this._supportsNamedGraphs) {\n this._graph = '';\n this._subject = null;\n return this._readSubject;\n }\n case 'GRAPH':\n if (this._supportsNamedGraphs)\n return this._readNamedGraphLabel;\n // Otherwise, the next token must be a subject, unless it is an additional directive\n default:\n if (this._directives !== null && token.type in this._directives && this._graph === null) {\n this._sparqlStyle = token.type[0] !== '@';\n this._directiveCallback(this._directives[token.type]);\n return this._readDeclarationPunctuation;\n }\n return this._readSubject(token);\n }\n }\n\n // ### `_readInFormulaContext` reads a token at the statement level of a formula\n _readInFormulaContext(token) {\n switch (token.type) {\n case 'PREFIX':\n this._sparqlStyle = true;\n case '@prefix':\n return this._readPrefix;\n case 'BASE':\n this._sparqlStyle = true;\n case '@base':\n return this._readBaseIRI;\n default:\n return this._readSubject(token);\n }\n }\n\n // ### `_getStatementReader` returns the reader for the current statement scope\n _getStatementReader() {\n const context = this._contextStack[this._contextStack.length - 1];\n return context && context.type === 'formula' ? this._readInFormulaContext : this._readInTopContext;\n }\n\n // ### `_readEntity` reads an IRI, prefixed name, blank node, or variable\n _readEntity(token, quantifier) {\n let value;\n switch (token.type) {\n // Read a relative or absolute IRI\n case 'IRI':\n case 'typeIRI':\n const iri = this._resolveIRI(token.value);\n if (iri === null)\n return this._error('Invalid IRI', token);\n value = this._factory.namedNode(iri);\n break;\n // Read a prefixed name\n case 'type':\n case 'prefixed':\n const prefix = this._prefixes[token.prefix];\n if (prefix === undefined)\n return this._error(`Undefined prefix \"${token.prefix}:\"`, token);\n value = this._factory.namedNode(prefix + token.value);\n break;\n // Read a blank node\n case 'blank':\n value = this._factory.blankNode(this._prefixes[token.prefix] + token.value);\n break;\n // Read a variable\n case 'var':\n value = this._factory.variable(token.value.substr(1));\n break;\n // Everything else is not an entity\n default:\n return this._error(`Expected entity but got ${token.type}`, token);\n }\n // In N3 mode, replace the entity if it is quantified\n if (!quantifier && this._n3Mode && (value.id in this._quantified))\n value = this._quantified[value.id];\n return value;\n }\n\n // ### `_readList` starts reading a list in the subject, predicate, or object position\n _readList(token, subject, predicate, object) {\n const stack = this._contextStack, parent = stack.length && stack[stack.length - 1];\n if (parent.type === '<<') {\n return this._error('Unexpected list in reified triple', token);\n }\n // Start a new list\n this._saveContext('list', this._graph, subject, predicate, object);\n this._subject = null;\n return this._readListItem;\n }\n\n // ### `_readSubject` reads a quad's subject\n _readSubject(token) {\n this._predicate = null;\n // Any statement token means the enclosing formula is not empty\n if (token.type !== '}')\n this._emptyFormula = false;\n switch (token.type) {\n case '[':\n // Start a new quad with a new blank node as subject\n this._saveContext('blank', this._graph,\n this._subject = this._factory.blankNode(), null, null);\n return this._readBlankNodeHead;\n case '(':\n return this._readList(token, this.RDF_NIL, null, null);\n case '{':\n // Start a new formula\n if (!this._n3Mode)\n return this._error('Unexpected graph', token);\n this._saveContext('formula', this._graph,\n this._graph = this._factory.blankNode(), null, null);\n return this._readInFormulaContext;\n case '}':\n // No subject; the graph in which we are reading is closed instead\n return this._readPunctuation(token);\n case '@forSome':\n if (!this._n3Mode)\n return this._error('Unexpected \"@forSome\"', token);\n this._subject = null;\n this._predicate = this.N3_FORSOME;\n this._quantifier = 'blankNode';\n return this._readQuantifierList;\n case '@forAll':\n if (!this._n3Mode)\n return this._error('Unexpected \"@forAll\"', token);\n this._subject = null;\n this._predicate = this.N3_FORALL;\n this._quantifier = 'variable';\n return this._readQuantifierList;\n case 'literal':\n if (!this._n3Mode)\n return this._error('Unexpected literal', token);\n\n if (token.prefix.length === 0) {\n this._literalValue = token.value;\n return this._completeSubjectLiteral;\n }\n else {\n this._subject = this._factory.literal(token.value, this._factory.namedNode(token.prefix));\n // This branch is N3-only, so the literal subject might start a path\n return this._getPathReader(this._readPredicateOrNamedGraph);\n }\n case '<<(':\n if (!this._n3Mode)\n return this._error('Disallowed triple term as subject', token);\n return this._enterTripleTerm('<<(', null, null, token) && this._readSubject;\n case '<<':\n return this._enterTripleTerm('<<', null, null, token) && this._readSubject;\n default:\n // Read the subject entity\n if ((this._subject = this._readEntity(token)) === undefined)\n return;\n // In N3 mode, the subject might be a path\n if (this._n3Mode)\n return this._getPathReader(this._readPredicateOrNamedGraph);\n }\n\n // The next token must be a predicate,\n // or, if the subject was actually a graph IRI, a named graph\n return this._readPredicateOrNamedGraph;\n }\n\n // ### `_readPredicate` reads a quad's predicate\n _readPredicate(token) {\n const type = token.type;\n let pathable = false;\n switch (type) {\n case 'inverse':\n this._inversePredicate = true;\n case 'abbreviation':\n this._predicate = this.ABBREVIATIONS[token.value];\n break;\n case 'has':\n return this._readPredicateAfterVerb;\n case 'is':\n this._inversePredicate = true;\n this._expectOf = true;\n return this._readPredicateAfterVerb;\n case 'inversePredicate':\n this._inversePredicate = true;\n return this._readPredicateAfterVerb;\n case '|}':\n // Expected predicate didn't come, must have been trailing semicolon\n // or an empty annotation block\n this._subject = null;\n return this._readAnnotationBlockPunctuation(token);\n case '.':\n case ']':\n case '}':\n // Expected predicate didn't come, must have been trailing semicolon.\n // In N3 mode, a subject (such as a path) can be a statement by itself.\n if (this._predicate === null && !this._n3Mode)\n return this._error(`Unexpected ${type}`, token);\n this._subject = null;\n return type === ']' ? this._readBlankNodeTail(token) : this._readPunctuation(token);\n case ';':\n // Additional semicolons can be safely ignored\n return this._predicate !== null ? this._readPredicate :\n this._error('Expected predicate but got ;', token);\n case 'literal':\n if (!this._n3Mode)\n return this._error('Unexpected literal', token);\n\n if (token.prefix.length === 0) {\n this._literalValue = token.value;\n return this._completePredicateLiteral;\n }\n else\n this._predicate = this._factory.literal(token.value, this._factory.namedNode(token.prefix));\n\n pathable = true;\n break;\n case '(':\n // In N3, a list can be a predicate\n return this._n3Mode ?\n this._readList(token, this._subject, this.RDF_NIL, null) :\n this._error(`Expected entity but got ${type}`, token);\n case '[':\n if (this._n3Mode) {\n // Start a new quad with a new blank node as subject\n this._saveContext('blank', this._graph, this._subject,\n this._subject = this._factory.blankNode(), null);\n return this._readBlankNodeHead;\n }\n return this._error('Disallowed blank node as predicate', token);\n case '{':\n // In N3, a formula can be a predicate\n if (this._n3Mode) {\n this._saveContext('formula', this._graph, this._subject,\n this._graph = this._factory.blankNode(), null);\n return this._readSubject;\n }\n return this._readEntity(token);\n case 'blank':\n if (!this._n3Mode)\n return this._error('Disallowed blank node as predicate', token);\n default:\n if ((this._predicate = this._readEntity(token)) === undefined)\n return;\n pathable = this._n3Mode;\n }\n this._validAnnotation = true;\n // The next token must be an object\n return pathable ? this._getPathReader(this._readObject, 'predicate') : this._readObject;\n }\n\n // ### `_readPredicateAfterVerb` reads the predicate following `has` or `is`\n _readPredicateAfterVerb(token) {\n if (token.type === 'has' || token.type === 'is' || token.type === 'of' ||\n token.type === 'inversePredicate')\n return this._error(`Expected expression but got ${token.type}`, token);\n return this._readPredicate(token);\n }\n\n // ### `_readObject` reads a quad's object\n _readObject(token) {\n if (this._expectOf) {\n if (token.type !== 'of')\n return this._error(`Expected of but got ${token.type}`, token);\n this._expectOf = false;\n return this._readObject;\n }\n switch (token.type) {\n case 'literal':\n // Regular literal, can still get a datatype or language\n if (token.prefix.length === 0) {\n this._literalValue = token.value;\n return this._readDataTypeOrLang;\n }\n // Pre-datatyped string literal (prefix stores the datatype)\n else {\n this._object = this._factory.literal(token.value, this._factory.namedNode(token.prefix));\n // In N3 mode, the literal object might start a path\n if (this._n3Mode)\n return this._getPathReader(this._getContextEndReader());\n }\n break;\n case '[':\n // Start a new quad with a new blank node as subject\n this._saveContext('blank', this._graph, this._subject, this._predicate,\n this._subject = this._factory.blankNode());\n return this._readBlankNodeHead;\n case '(':\n return this._readList(token, this._subject, this._predicate, this.RDF_NIL);\n case '{':\n // Start a new formula\n if (!this._n3Mode)\n return this._error('Unexpected graph', token);\n this._saveContext('formula', this._graph, this._subject, this._predicate,\n this._graph = this._factory.blankNode());\n return this._readInFormulaContext;\n case '<<(':\n return this._enterTripleTerm('<<(', this._subject, this._predicate, token) && this._readSubject;\n case '<<':\n return this._enterTripleTerm('<<', this._subject, this._predicate, token) && this._readSubject;\n default:\n // Read the object entity\n if ((this._object = this._readEntity(token)) === undefined)\n return;\n // In N3 mode, the object might be a path\n if (this._n3Mode)\n return this._getPathReader(this._getContextEndReader());\n }\n return this._getContextEndReader();\n }\n\n // ### `_readPredicateOrNamedGraph` reads a quad's predicate, or a named graph\n _readPredicateOrNamedGraph(token) {\n return token.type === '{' ? this._readGraph(token) : this._readPredicate(token);\n }\n\n // ### `_readGraph` reads a graph\n _readGraph(token) {\n if (token.type !== '{')\n return this._error(`Expected graph but got ${token.type}`, token);\n // The \"subject\" we read is actually the GRAPH's label\n this._graph = this._subject, this._subject = null;\n return this._readSubject;\n }\n\n // ### `_readBlankNodeHead` reads the head of a blank node\n _readBlankNodeHead(token) {\n if (token.type === ']') {\n this._subject = null;\n return this._readBlankNodeTail(token);\n }\n else {\n const stack = this._contextStack, parentParent = stack.length > 1 && stack[stack.length - 2];\n if (parentParent.type === '<<') {\n return this._error('Unexpected compound blank node expression in reified triple', token);\n }\n if (token.type === 'id')\n return this._readIriPropertyListId;\n this._predicate = null;\n return this._readPredicate(token);\n }\n }\n\n // ### `_readIriPropertyListId` replaces a property list's blank node with its IRI\n _readIriPropertyListId(token) {\n const iri = this._readEntity(token);\n if (iri === undefined)\n return;\n if (iri.termType !== 'NamedNode')\n return this._error(`Expected IRI after id but got ${token.type}`, token);\n\n const placeholder = this._subject;\n this._subject = iri;\n const context = this._contextStack[this._contextStack.length - 1];\n if (context.subject === placeholder)\n context.subject = iri;\n if (context.predicate === placeholder)\n context.predicate = iri;\n if (context.object === placeholder)\n context.object = iri;\n this._predicate = null;\n return this._readIriPropertyListPredicate;\n }\n\n // ### `_readIriPropertyListPredicate` requires properties after an IRI property list ID\n _readIriPropertyListPredicate(token) {\n if (token.type === ';' || token.type === ']' || token.type === '.' || token.type === '}')\n return this._error(`Expected predicate but got ${token.type}`, token);\n return this._readPredicate(token);\n }\n\n // ### `_readBlankNodeTail` reads the end of a blank node\n _readBlankNodeTail(token) {\n if (token.type !== ']')\n return this._readBlankNodePunctuation(token);\n\n // Store blank node quad\n if (this._subject !== null)\n this._emitCurrent(this._subject, this._predicate, this._object, this._graph);\n\n // Restore the parent context containing this blank node\n const empty = this._predicate === null;\n this._restoreContext('blank', token);\n // If the blank node was the object, restore previous context and read punctuation\n if (this._object !== null)\n return this._getContextEndReader();\n // If the blank node was the predicate, continue reading the object\n else if (this._predicate !== null)\n return this._getPathReader(this._readObject, 'predicate');\n // If the blank node was the subject, continue reading the predicate\n else\n // If the blank node was empty, it could be a named graph label\n return empty ? this._readPredicateOrNamedGraph : this._readPredicateAfterBlank;\n }\n\n // ### `_readPredicateAfterBlank` reads a predicate after an anonymous blank node\n _readPredicateAfterBlank(token) {\n switch (token.type) {\n case '.':\n case '}':\n // No predicate is coming if the triple is terminated here\n this._subject = null;\n return this._readPunctuation(token);\n default:\n return this._readPredicate(token);\n }\n }\n\n // ### `_readListItem` reads items from a list\n _readListItem(token) {\n let item = null, // The item of the list\n list = null, // The list itself\n next = this._readListItem; // The next function to execute\n const previousList = this._subject, // The previous list that contains this list\n stack = this._contextStack, // The stack of parent contexts\n parent = stack[stack.length - 1]; // The parent containing the current list\n\n switch (token.type) {\n case '[':\n // Stack the current list quad and start a new quad with a blank node as subject\n this._saveContext('blank', this._graph,\n list = this._factory.blankNode(), this.RDF_FIRST,\n this._subject = item = this._factory.blankNode());\n next = this._readBlankNodeHead;\n break;\n case '(':\n // Stack the current list quad and start a new list\n this._saveContext('list', this._graph,\n list = this._factory.blankNode(), this.RDF_FIRST, this.RDF_NIL);\n this._subject = null;\n break;\n case ')':\n // Closing the list; restore the parent context\n this._restoreContext('list', token);\n // If this list is contained within a parent list, return the membership quad here.\n // This will be `<parent list element> rdf:first <this list>.`.\n if (stack.length !== 0 && stack[stack.length - 1].type === 'list') {\n // In N3 mode, this list might be the start of a path\n if (this._n3Mode) {\n // Close this list's tail, as a path would alter the membership quad only\n if (previousList !== null)\n this._emit(previousList, this.RDF_REST, this.RDF_NIL, this._graph);\n // Create a new context to read the path;\n // _readPath will restore the context and output the membership quad\n this._saveContext('item', this._graph, this._subject, this._predicate, this._object);\n this._subject = this._object, this._predicate = null;\n return this._getPathReader(this._readListItem);\n }\n this._emit(this._subject, this._predicate, this._object, this._graph);\n }\n // Was this list the parent's subject?\n if (this._predicate === null) {\n // The next token is the predicate\n next = this._n3Mode ? this._getPathReader(this._readPredicate) : this._readPredicate;\n // No list tail if this was an empty list\n if (this._subject === this.RDF_NIL)\n return next;\n }\n // Was this list the parent's predicate?\n else if (this._object === null) {\n // The next token is the object\n next = this._getPathReader(this._readObject, 'predicate');\n // No list tail if this was an empty list\n if (this._predicate === this.RDF_NIL)\n return next;\n }\n // The list was in the parent context's object\n else {\n next = this._getContextEndReader();\n // In N3 mode, the list object might be the start of a path\n if (this._n3Mode)\n next = this._getPathReader(next);\n // No list tail if this was an empty list\n if (this._object === this.RDF_NIL)\n return next;\n }\n // Close the list by making the head nil\n list = this.RDF_NIL;\n break;\n case 'literal':\n // Regular literal, can still get a datatype or language\n if (token.prefix.length === 0) {\n this._literalValue = token.value;\n next = this._readListItemDataTypeOrLang;\n }\n // Pre-datatyped string literal (prefix stores the datatype)\n else {\n item = this._factory.literal(token.value, this._factory.namedNode(token.prefix));\n next = this._getContextEndReader();\n }\n break;\n case '{':\n // Start a new formula\n if (!this._n3Mode)\n return this._error('Unexpected graph', token);\n // The formula is an item of the list,\n // so it must be linked in the list's graph before the graph changes\n list = this._factory.blankNode();\n item = this._factory.blankNode();\n // Is this the first element of the list?\n if (previousList === null) {\n // This list is either the subject or the object of its parent\n if (parent.predicate === null)\n parent.subject = list;\n else\n parent.object = list;\n }\n else {\n // Continue the previous list with the current list\n this._emit(previousList, this.RDF_REST, list, this._graph);\n }\n // Output the item\n this._emit(list, this.RDF_FIRST, item, this._graph);\n // Stack the current list quad and start the formula\n this._saveContext('formula', this._graph, list, this.RDF_FIRST,\n this._graph = item);\n this._subject = null;\n return this._readInFormulaContext;\n case '<<(':\n case '<<':\n if (!this._enterTripleTerm(token.type, null, null, token))\n return;\n next = this._readSubject;\n break;\n default:\n if ((item = this._readEntity(token)) === undefined)\n return;\n }\n\n // Create a new blank node if no item head was assigned yet\n if (list === null)\n this._subject = list = this._factory.blankNode();\n\n // When reading a reified triple or triple term, store the list as subject in the stack, as this will be overridden when reading the triple.\n if (token.type === '<<' || token.type === '<<(')\n stack[stack.length - 1].subject = this._subject;\n\n // Is this the first element of the list?\n if (previousList === null) {\n // The list is the subject of the parent\n if (parent.predicate === null)\n parent.subject = list;\n // The list is the predicate of the parent\n else if (parent.object === null)\n parent.predicate = list;\n // The list is the object of the parent\n else\n parent.object = list;\n }\n else {\n // Continue the previous list with the current list\n this._emit(previousList, this.RDF_REST, list, this._graph);\n }\n // If an item was read, add it to the list\n if (item !== null) {\n // In N3 mode, the item might be a path\n if (this._n3Mode && (token.type === 'IRI' || token.type === 'prefixed' ||\n token.type === 'var' || token.type === 'blank' ||\n token.type === 'literal')) {\n // Create a new context to add the item's path\n this._saveContext('item', this._graph, list, this.RDF_FIRST, item);\n this._subject = item, this._predicate = null;\n // _readPath will restore the context and output the item\n return this._getPathReader(this._readListItem);\n }\n // Output the item\n this._emit(list, this.RDF_FIRST, item, this._graph);\n }\n return next;\n }\n\n // ### `_readDataTypeOrLang` reads an _optional_ datatype or language\n _readDataTypeOrLang(token) {\n return this._completeObjectLiteral(token, false);\n }\n\n\n // ### `_readListItemDataTypeOrLang` reads an _optional_ datatype or language in a list\n _readListItemDataTypeOrLang(token) {\n return this._completeObjectLiteral(token, true);\n }\n\n // ### `_completeLiteral` completes a literal with an optional datatype or language\n // Defers possible direction tags without allocating bound callbacks.\n _completeLiteral(token, component) {\n let literal, readCb = false;\n\n switch (token.type) {\n // Create a datatyped literal\n case 'type':\n case 'typeIRI':\n const datatype = this._readEntity(token);\n if (datatype === undefined) return; // No datatype means an error occurred\n if (datatype.value === namespaces.rdf.langString || datatype.value === namespaces.rdf.dirLangString) {\n return this._error('Detected illegal (directional) languaged-tagged string with explicit datatype', token);\n }\n literal = this._factory.literal(this._literalValue, datatype);\n token = null;\n break;\n // Create a language-tagged string\n case 'langcode':\n if (token.value.split('-').some(t => t.length > 8))\n return this._error('Detected language tag with subtag longer than 8 characters', token);\n literal = this._factory.literal(this._literalValue, token.value);\n this._literalLanguage = token.value;\n token = null;\n // Save state for a possible direction tag\n this._literalComponent = component;\n readCb = true;\n break;\n // Create a simple string literal by default\n default:\n literal = this._factory.literal(this._literalValue);\n }\n\n return { token, literal, readCb };\n }\n\n // ### `_readDirCode` reads an optional directional language tag\n _readDirCode(token) {\n const component = this._literalComponent, listItem = this._literalListItem;\n // Attempt to read a dircode\n if (token.type === 'dircode') {\n const term = this._factory.literal(this._literalValue, { language: this._literalLanguage, direction: token.value });\n if (component === 'subject')\n this._subject = term;\n else if (component === 'predicate')\n this._predicate = term;\n else\n this._object = term;\n this._literalLanguage = undefined;\n token = null;\n }\n\n if (component === 'subject' || component === 'predicate') {\n // A subject or predicate literal implies N3 mode, so it might start a path\n const next = component === 'subject' ? this._readPredicateOrNamedGraph : this._readObject;\n const reader = this._getPathEndReader(token, next, component);\n return reader || next.call(this, token);\n }\n return this._completeObjectLiteralPost(token, listItem);\n }\n\n // Completes a literal in subject or predicate position\n _completeTermLiteral(token, component) {\n const completed = this._completeLiteral(token, component);\n if (!completed)\n return;\n\n let next;\n if (component === 'subject') {\n this._subject = completed.literal;\n next = this._readPredicateOrNamedGraph;\n }\n else {\n this._predicate = completed.literal;\n this._validAnnotation = true;\n next = this._readObject;\n }\n\n // Postpone completion if the literal is only partially completed (such as lang+dir).\n if (completed.readCb) {\n this._literalListItem = false;\n return this._readDirCode;\n }\n\n // A subject or predicate literal implies N3 mode, so it might start a path.\n const reader = this._getPathEndReader(completed.token, next, component);\n if (reader)\n return reader;\n\n // Consume the non-path token now\n return next.call(this, completed.token);\n }\n\n // Completes a literal in subject position\n _completeSubjectLiteral(token) {\n return this._completeTermLiteral(token, 'subject');\n }\n\n // Completes a literal in predicate position\n _completePredicateLiteral(token) {\n return this._completeTermLiteral(token, 'predicate');\n }\n\n // Completes a literal in object position\n _completeObjectLiteral(token, listItem) {\n const completed = this._completeLiteral(token, 'object');\n if (!completed)\n return;\n\n this._object = completed.literal;\n\n // Postpone completion if the literal is only partially completed (such as lang+dir).\n if (completed.readCb) {\n this._literalListItem = listItem;\n return this._readDirCode;\n }\n\n return this._completeObjectLiteralPost(completed.token, listItem);\n }\n\n _completeObjectLiteralPost(token, listItem) {\n // In N3 mode, the literal object might start a path\n if (this._n3Mode && (token === null || token.type === '!' || token.type === '^')) {\n // If this literal was part of a list, defer writing the item;\n // _readPath will then restore the context and output it\n if (listItem) {\n this._saveContext('item', this._graph, this._subject, this.RDF_FIRST, this._object);\n this._subject = this._object, this._predicate = null;\n return this._getPathEndReader(token, this._readListItem);\n }\n return this._getPathEndReader(token, this._getContextEndReader());\n }\n // If this literal was part of a list, write the item\n // (we could also check the context stack, but passing in a flag is faster)\n if (listItem)\n this._emit(this._subject, this.RDF_FIRST, this._object, this._graph);\n // If the token was consumed, continue with the rest of the input\n if (token === null)\n return this._getContextEndReader();\n // Otherwise, consume the token now\n else {\n this._readCallback = this._getContextEndReader();\n return this._readCallback(token);\n }\n }\n\n // ### `_readFormulaTail` reads the end of a formula\n _readFormulaTail(token) {\n if (token.type !== '}')\n return this._readPunctuation(token);\n\n // Store the last quad of the formula\n if (this._subject !== null)\n this._emitCurrent(this._subject, this._predicate, this._object, this._graph);\n\n const formula = this._graph, empty = this._emptyFormula;\n // Restore the parent context containing this formula\n this._restoreContext('formula', token);\n\n // When the emptyFormulaAsTrue option is set, an empty formula\n // is read as the boolean literal true, following the N3 spec tests\n // and the direction discussed in https://github.com/w3c-cg/N3/issues/185\n if (empty && this._emptyFormulaAsTrue) {\n if (this._subject === formula)\n this._subject = this.N3_TRUE;\n else if (this._predicate === formula)\n this._predicate = this.N3_TRUE;\n else\n this._object = this.N3_TRUE;\n }\n\n // Continue according to the formula's position in the enclosing statement\n if (this._object !== null)\n return this._getPathReader(this._getContextEndReader(), 'object');\n if (this._predicate !== null)\n return this._getPathReader(this._readObject, 'predicate');\n return this._getPathReader(this._readPredicate, 'subject');\n }\n\n // ### `_readPunctuation` reads punctuation between quads or quad parts\n _readPunctuation(token) {\n let next, graph = this._graph;\n const subject = this._subject, inversePredicate = this._inversePredicate;\n switch (token.type) {\n // A closing brace ends a graph\n case '}':\n if (this._graph === null)\n return this._error('Unexpected graph closing', token);\n if (this._n3Mode)\n return this._readFormulaTail(token);\n this._graph = null;\n // A dot just ends the statement, without sharing anything with the next\n case '.':\n this._subject = null;\n this._tripleTerm = null;\n next = this._getStatementReader();\n if (inversePredicate) this._inversePredicate = false;\n break;\n // Semicolon means the subject is shared; predicate and object are different\n case ';':\n if (inversePredicate) this._inversePredicate = false;\n next = this._readPredicate;\n break;\n // Comma means both the subject and predicate are shared; the object is different\n case ',':\n next = this._readObject;\n break;\n // A reifier or annotation block annotates the triple just read\n case '~':\n case '{|':\n return this._readAnnotationStart(token);\n // An annotation block can only be closed from within one\n case '|}':\n return this._error('Unexpected annotation syntax closing', token);\n default:\n // An entity means this is a quad (only allowed if not already inside a graph)\n if (this._supportsQuads && this._graph === null && (graph = this._readEntity(token)) !== undefined) {\n next = this._readQuadPunctuation;\n break;\n }\n return this._error(`Expected punctuation to follow \"${this._object.id}\"`, token);\n }\n // A quad has been completed now, so return it\n if (subject !== null) {\n const predicate = this._predicate, object = this._object;\n this._emit(subject, predicate, object, graph, inversePredicate);\n }\n return next;\n }\n\n // ### `_readBlankNodePunctuation` reads punctuation in a blank node\n _readBlankNodePunctuation(token) {\n let next, resetInversePredicate = false;\n switch (token.type) {\n // Semicolon means the subject is shared; predicate and object are different\n case ';':\n resetInversePredicate = this._inversePredicate;\n next = this._readPredicate;\n break;\n // Comma means both the subject and predicate are shared; the object is different\n case ',':\n next = this._readObject;\n break;\n // Annotation syntax applies to the quad just read, exactly as it does\n // outside of a blank node property list\n case '~':\n case '{|':\n return this._readAnnotationStart(token);\n case '|}':\n return this._error('Unexpected annotation syntax closing', token);\n default:\n return this._error(`Expected punctuation to follow \"${this._object.id}\"`, token);\n }\n // A quad has been completed now, so return it\n this._emitCurrent(this._subject, this._predicate, this._object, this._graph);\n if (resetInversePredicate)\n this._inversePredicate = false;\n return next;\n }\n\n // ### `_readQuadPunctuation` reads punctuation after a quad\n _readQuadPunctuation(token) {\n if (token.type !== '.')\n return this._error('Expected dot to follow quad', token);\n return this._readInTopContext;\n }\n\n // ### `_readPrefix` reads the prefix of a prefix declaration\n _readPrefix(token) {\n if (token.type !== 'prefix')\n return this._error('Expected prefix to follow @prefix', token);\n this._prefix = token.value;\n return this._readPrefixIRI;\n }\n\n // ### `_readPrefixIRI` reads the IRI of a prefix declaration\n _readPrefixIRI(token) {\n if (token.type !== 'IRI')\n return this._error(`Expected IRI to follow prefix \"${this._prefix}:\"`, token);\n const prefixNode = this._readEntity(token);\n if (this._prefixChanges !== null)\n this._prefixChanges.push(this._prefix, this._prefixes[this._prefix]);\n this._prefixes[this._prefix] = prefixNode.value;\n this._prefixCallback(this._prefix, prefixNode);\n return this._readDeclarationPunctuation;\n }\n\n // ### `_readBaseIRI` reads the IRI of a base declaration\n _readBaseIRI(token) {\n const iri = token.type === 'IRI' && this._resolveIRI(token.value);\n if (!iri)\n return this._error('Expected valid IRI to follow base declaration', token);\n this._setBase(iri);\n return this._readDeclarationPunctuation;\n }\n\n // ### `_isValidVersion` checks if the given version is valid for this parser to handle.\n _isValidVersion(version) {\n return this._parseUnsupportedVersions || N3Parser.SUPPORTED_VERSIONS.includes(version);\n }\n\n // ### `_readVersion` reads version string declaration\n _readVersion(token) {\n if (token.type !== 'literal')\n return this._error('Expected literal to follow version declaration', token);\n // Only short strings are allowed, so no numbers or booleans (which have a datatype prefix)\n if (token.prefix !== '' || token.tripleQuoted)\n return this._error('Version declarations must use single quotes', token);\n this._versionCallback(token.value);\n if (!this._isValidVersion(token.value))\n return this._error(`Detected unsupported version: \"${token.value}\"`, token);\n return this._readDeclarationPunctuation;\n }\n\n // ### `_readNamedGraphLabel` reads the label of a named graph\n _readNamedGraphLabel(token) {\n switch (token.type) {\n case 'IRI':\n case 'blank':\n case 'prefixed':\n return this._readSubject(token), this._readGraph;\n case '[':\n return this._readNamedGraphBlankLabel;\n default:\n return this._error('Invalid graph label', token);\n }\n }\n\n // ### `_readNamedGraphLabel` reads a blank node label of a named graph\n _readNamedGraphBlankLabel(token) {\n if (token.type !== ']')\n return this._error('Invalid graph label', token);\n this._subject = this._factory.blankNode();\n return this._readGraph;\n }\n\n // ### `_readDeclarationPunctuation` reads the punctuation of a declaration\n _readDeclarationPunctuation(token) {\n // SPARQL-style declarations don't have punctuation\n if (this._sparqlStyle) {\n this._sparqlStyle = false;\n return this._getStatementReader().call(this, token);\n }\n\n if (token.type !== '.')\n return this._error('Expected declaration to end with a dot', token);\n return this._getStatementReader();\n }\n\n // Reads a list of quantified symbols from a @forSome or @forAll statement\n _readQuantifierList(token) {\n let entity;\n switch (token.type) {\n case 'IRI':\n case 'prefixed':\n if ((entity = this._readEntity(token, true)) !== undefined)\n break;\n default:\n return this._error(`Unexpected ${token.type}`, token);\n }\n // Without explicit quantifiers, map entities to a quantified entity\n if (!this._explicitQuantifiers) {\n if (this._quantifiedChanges !== null)\n this._quantifiedChanges.push(entity.id, this._quantified[entity.id]);\n this._quantified[entity.id] = this._factory[this._quantifier](this._factory.blankNode().value);\n }\n // With explicit quantifiers, output the reified quantifier\n else {\n // If this is the first item, start a new quantifier list\n if (this._subject === null)\n this._emit(this._graph || this.DEFAULTGRAPH, this._predicate,\n this._subject = this._factory.blankNode(), this.QUANTIFIERS_GRAPH);\n // Otherwise, continue the previous list\n else\n this._emit(this._subject, this.RDF_REST,\n this._subject = this._factory.blankNode(), this.QUANTIFIERS_GRAPH);\n // Output the list item\n this._emit(this._subject, this.RDF_FIRST, entity, this.QUANTIFIERS_GRAPH);\n }\n return this._readQuantifierPunctuation;\n }\n\n // Reads punctuation from a @forSome or @forAll statement\n _readQuantifierPunctuation(token) {\n // Read more quantifiers\n if (token.type === ',')\n return this._readQuantifierList;\n // End of the quantifier list\n else {\n // With explicit quantifiers, close the quantifier list\n if (this._explicitQuantifiers) {\n this._emit(this._subject, this.RDF_REST, this.RDF_NIL, this.QUANTIFIERS_GRAPH);\n this._subject = null;\n }\n // Read a dot\n this._readCallback = this._getContextEndReader();\n return this._readCallback(token);\n }\n }\n\n // ### `_getPathReader` reads a potential path and then resumes with the given function\n _getPathReader(afterPath, position) {\n this._afterPath = afterPath;\n this._pathPosition = position || (this._predicate === null ? 'subject' : 'object');\n return this._readPath;\n }\n\n // ### `_getPathEndReader` continues reading after a term that might start a path,\n // given the pending token that follows the term (or `null` if it was consumed)\n _getPathEndReader(token, afterPath, position) {\n // Other pending tokens are not handled here\n if (token !== null && token.type !== '!' && token.type !== '^')\n return null;\n const reader = this._getPathReader(afterPath, position);\n // If no token is pending, wait for the next one; otherwise, consume it now\n return token === null ? reader : reader.call(this, token);\n }\n\n // ### `_readPath` reads a potential path\n _readPath(token) {\n switch (token.type) {\n // Forward path\n case '!': return this._readForwardPath;\n // Backward path\n case '^': return this._readBackwardPath;\n // Not a path; resume reading where we left off\n default:\n const afterPath = this._afterPath;\n const stack = this._contextStack, parent = stack.length && stack[stack.length - 1];\n // If we were reading a list item, we still need to output it\n if (parent && parent.type === 'item') {\n // The list item is the remaining subejct after reading the path\n const item = this._subject;\n // Switch back to the context of the list\n this._restoreContext('item', token);\n // Output the list item\n this._emit(this._subject, this.RDF_FIRST, item, this._graph);\n }\n this._afterPath = null;\n this._pathPosition = null;\n return afterPath.call(this, token);\n }\n }\n\n // ### `_readForwardPath` reads a '!' path\n _readForwardPath(token) {\n let subject, predicate;\n const object = this._factory.blankNode();\n // The next token is the predicate\n if ((predicate = this._readEntity(token)) === undefined)\n return;\n // Replace the path expression with the generated object in its current position\n if (this._pathPosition === 'subject')\n subject = this._subject, this._subject = object;\n else if (this._pathPosition === 'predicate')\n subject = this._predicate, this._predicate = object;\n else\n subject = this._object, this._object = object;\n // Emit the path's current quad and read its next section\n this._emit(subject, predicate, object, this._graph);\n return this._readPath;\n }\n\n // ### `_readBackwardPath` reads a '^' path\n _readBackwardPath(token) {\n const subject = this._factory.blankNode();\n let predicate, object;\n // The next token is the predicate\n if ((predicate = this._readEntity(token)) === undefined)\n return;\n // Replace the path expression with the generated subject in its current position\n if (this._pathPosition === 'subject')\n object = this._subject, this._subject = subject;\n else if (this._pathPosition === 'predicate')\n object = this._predicate, this._predicate = subject;\n else\n object = this._object, this._object = subject;\n // Emit the path's current quad and read its next section\n this._emit(subject, predicate, object, this._graph);\n return this._readPath;\n }\n\n// ### `_readTripleTermTail` reads the end of a triple term\n _readTripleTermTail(token) {\n if (token.type !== ')>>')\n return this._error(`Expected )>> but got ${token.type}`, token);\n // Read the quad and restore the previous context\n const quad = this._createQuad(this._subject, this._predicate, this._object,\n this._graph, this._inversePredicate);\n this._restoreContext('<<(', token);\n this._tripleTermDepth--;\n\n // If we're in a list, continue processing that list\n const stack = this._contextStack, parent = stack.length && stack[stack.length - 1];\n if (parent && parent.type === 'list') {\n this._emit(this._subject, this.RDF_FIRST, quad, this._graph);\n return this._getContextEndReader();\n }\n // If the triple was the subject, continue by reading the predicate.\n if (this._subject === null) {\n this._subject = quad;\n return this._readPredicate;\n }\n // If the triple was the object, read context end.\n else {\n this._object = quad;\n return this._getContextEndReader();\n }\n }\n\n // ### `_readReifiedTripleTailOrReifier` reads a reifier or the end of a nested reified triple\n _readReifiedTripleTailOrReifier(token) {\n if (token.type === '~') {\n return this._readReifier;\n }\n return this._readReifiedTripleTail(token);\n }\n\n // ### `_readReifiedTripleTail` reads the end of a nested reified triple\n _readReifiedTripleTail(token) {\n if (token.type !== '>>')\n return this._error(`Expected >> but got ${token.type}`, token);\n // Read the triple term and restore the previous context\n this._tripleTerm = null;\n const reifier = this._readTripleTerm();\n this._restoreContext('<<', token);\n this._tripleTermDepth--;\n\n // // If we're in a list, continue processing that list\n const stack = this._contextStack, parent = stack.length && stack[stack.length - 1];\n if (parent && parent.type === 'list') {\n this._emit(this._subject, this.RDF_FIRST, reifier, this._graph);\n return this._getContextEndReader();\n }\n // If the triple was the subject, continue by reading the predicate.\n else if (this._subject === null) {\n this._subject = reifier;\n return this._readPredicateOrReifierTripleEnd;\n }\n // If the triple was the object, read context end.\n else {\n this._object = reifier;\n return this._getContextEndReader();\n }\n }\n\n _readPredicateOrReifierTripleEnd(token) {\n if (token.type === '.') {\n this._subject = null;\n return this._readPunctuation(token);\n }\n return this._readPredicate(token);\n }\n\n // ### `_readReifier` reads the triple term identifier after a tilde when in a reifying triple.\n _readReifier(token) {\n // Without an identifier, the reifier is a fresh blank node\n if (token.type === '>>')\n return this._readReifiedTripleTail(token);\n this._reifier = this._readEntity(token);\n return this._readReifiedTripleTail;\n }\n\n // ### `_readAnnotationStart` reads the first reifier or annotation block after an object,\n // which completes the annotated quad\n _readAnnotationStart(token) {\n this._emitCurrent(this._subject, this._predicate, this._object, this._graph);\n // A new triple is annotated, so its triple term cannot be reused\n this._tripleTerm = null;\n return this._readAnnotation(token);\n }\n\n // ### `_readAnnotation` reads what follows an annotated quad:\n // further reifiers or annotation blocks for that same quad, or punctuation\n _readAnnotation(token) {\n switch (token.type) {\n case '~':\n return this._readReifierInAnnotation;\n case '{|':\n return this._readAnnotationBlockHead(token);\n }\n // The annotated quad was already emitted when its annotation started,\n // so continue without emitting it a second time\n this._tripleTerm = null;\n switch (token.type) {\n // The subject stays shared with the next predicate-object pair\n case ';':\n this._inversePredicate = false;\n return this._readPredicate;\n // The subject and predicate stay shared with the next object\n case ',':\n return this._readObject;\n default:\n this._subject = null;\n // Resume in the enclosing context\n return this._getContextEndReader().call(this, token);\n }\n }\n\n // ### `_readReifierInAnnotation` reads the optional reifier after a tilde in annotation syntax\n _readReifierInAnnotation(token) {\n switch (token.type) {\n case 'IRI':\n case 'typeIRI':\n case 'type':\n case 'prefixed':\n case 'blank':\n case 'var':\n this._reifier = this._readEntity(token);\n return this._readAnnotationBlockOrReifier;\n }\n // Without an identifier, the reifier is a fresh blank node\n this._reifier = this._factory.blankNode();\n return this._readAnnotationBlockOrReifier(token);\n }\n\n // ### `_readAnnotationBlockOrReifier` reads what follows a reifier:\n // either an annotation block, which uses the reifier as its subject,\n // or anything else, in which case the reifier stands alone\n _readAnnotationBlockOrReifier(token) {\n if (token.type === '{|')\n return this._readAnnotationBlockHead(token);\n this._readTripleTerm();\n return this._readAnnotation(token);\n }\n\n // ### `_readAnnotationBlockHead` opens an annotation block,\n // whose predicate-object pairs describe the reifier of the annotated quad\n _readAnnotationBlockHead(token) {\n const reifier = this._readTripleTerm();\n this._saveContext('annotation', this._graph, this._subject, this._predicate, this._object);\n // Restored when the block closes, so further annotations reuse the same triple term\n this._contextStack[this._contextStack.length - 1].tripleTerm = this._tripleTerm;\n this._subject = reifier;\n this._predicate = this._object = this._tripleTerm = null;\n this._inversePredicate = false;\n this._validAnnotation = false;\n return this._readPredicate;\n }\n\n // ### `_readAnnotationBlockPunctuation` reads punctuation inside an annotation block\n _readAnnotationBlockPunctuation(token) {\n const stack = this._contextStack;\n if (token.type === '|}') {\n if (!stack.length || stack[stack.length - 1].type !== 'annotation')\n return this._error('Unexpected annotation syntax closing', token);\n if (!this._validAnnotation)\n return this._error('Annotation block can not be empty', token);\n // Emit the last quad of the block, unless a trailing semicolon already did\n if (this._subject !== null)\n this._emitCurrent(this._subject, this._predicate, this._object, this._graph);\n // Return to the annotated quad, which can be followed by more annotations\n const { tripleTerm } = stack[stack.length - 1];\n this._restoreContext('annotation', token);\n this._tripleTerm = tripleTerm;\n return this._readAnnotation;\n }\n // Otherwise, punctuation inside a block works like inside a blank node property list\n return this._readBlankNodePunctuation(token);\n }\n\n _readTripleTerm() {\n const stack = this._contextStack, parent = stack.length && stack[stack.length - 1];\n const parentGraph = parent ? parent.graph : undefined;\n const reifier = this._reifier || this._factory.blankNode();\n this._reifier = null;\n this._tripleTerm = this._tripleTerm || this._createQuad(\n this._subject, this._predicate, this._object, null, this._inversePredicate,\n );\n this._emit(reifier, this.RDF_REIFIES, this._tripleTerm, parentGraph || this._graph || this.DEFAULTGRAPH);\n return reifier;\n }\n\n // ### `_getContextEndReader` gets the next reader function at the end of a context\n _getContextEndReader() {\n const contextStack = this._contextStack;\n if (!contextStack.length)\n return this._readPunctuation;\n\n switch (contextStack[contextStack.length - 1].type) {\n case 'blank':\n return this._readBlankNodeTail;\n case 'list':\n return this._readListItem;\n case 'formula':\n return this._readFormulaTail;\n case '<<(':\n return this._readTripleTermTail;\n case '<<':\n return this._readReifiedTripleTailOrReifier;\n case 'annotation':\n return this._readAnnotationBlockPunctuation;\n }\n }\n\n // ### `_createQuad` creates a quad\n _createQuad(subject, predicate, object, graph) {\n return this._factory.quad(subject, predicate, object, graph || this.DEFAULTGRAPH);\n }\n\n // ### `_createQuadInDirection` creates a quad in the active predicate direction\n _createQuadInDirection(subject, predicate, object, graph, inversePredicate) {\n return inversePredicate ?\n this._factory.quad(object, predicate, subject, graph || this.DEFAULTGRAPH) :\n this._factory.quad(subject, predicate, object, graph || this.DEFAULTGRAPH);\n }\n\n // ### `_emitInDirection` sends a quad in the active predicate direction\n _emitInDirection(subject, predicate, object, graph, inversePredicate) {\n this._callback(null, this._createQuad(subject, predicate, object, graph, inversePredicate));\n }\n\n // ### `_emitCurrentInDirection` sends a quad in the current predicate direction\n _emitCurrentInDirection(subject, predicate, object, graph) {\n this._callback(null, this._createQuad(subject, predicate, object, graph, this._inversePredicate));\n }\n\n // ### `_emit` sends a quad through the callback\n _emit(subject, predicate, object, graph) {\n this._callback(null, this._factory.quad(subject, predicate, object, graph || this.DEFAULTGRAPH));\n }\n\n // ### `_error` emits an error message through the callback\n _error(message, token) {\n // Bound input-derived content while preserving the line suffix and full token context.\n const suffix = ` on line ${token.line}.`;\n if (message.length + suffix.length > 200)\n message = `${message.slice(0, 199 - suffix.length)}\u2026`;\n const err = new Error(`${message}${suffix}`);\n err.context = {\n token: token,\n line: token.line,\n previousToken: this._lexer.previousToken,\n };\n this._callback(err);\n this._callback = noop;\n }\n\n // ### `_resolveIRI` resolves an IRI against the base path\n _resolveIRI(iri) {\n return /^[a-z][a-z0-9+.-]*:/i.test(iri) ? iri : this._resolveRelativeIRI(iri);\n }\n\n // ### `_resolveRelativeIRI` resolves an IRI against the base path,\n // assuming that a base path has been set and that the IRI is indeed relative\n _resolveRelativeIRI(iri) {\n // An empty relative IRI indicates the base IRI\n if (!iri.length)\n return this._base;\n // Decide resolving strategy based in the first character\n switch (iri[0]) {\n // Resolve relative fragment IRIs against the base IRI\n case '#': return this._base + iri;\n // Resolve relative query string IRIs by replacing the query string\n case '?': {\n const queryPos = this._base.indexOf('?');\n return (queryPos < 0 ? this._base : this._base.substr(0, queryPos)) + iri;\n }\n // Resolve root-relative IRIs at the root of the base IRI\n case '/':\n // Resolve scheme-relative IRIs to the scheme,\n // keeping the reference's authority intact (RFC 3986 \u00A75.2.4)\n if (iri[1] !== '/')\n return this._baseRoot + this._removeDotSegments(iri);\n // Without a base scheme, a leading ':' marks where the authority starts\n return this._baseScheme ? this._removeDotSegments(this._baseScheme + iri) :\n this._removeDotSegments(`:${iri}`).substr(1);\n // Resolve all other IRIs at the base IRI's path\n default:\n // Relative IRIs cannot contain a colon in the first path segment\n if (/^[^/:]*:/.test(iri))\n return null;\n // Only scan the joined IRI for dot segments if either part can contain them,\n // as the base path can be long and the joined IRI would need to be copied\n return this._basePathHasDotSegments || pathDotSegments.test(iri) ?\n this._removeDotSegments(this._basePath + iri) : this._basePath + iri;\n }\n }\n\n // ### `_removeDotSegments` resolves './' and '../' path segments in an IRI as per RFC3986\n _removeDotSegments(iri) {\n // Don't modify the IRI if it does not contain any dot segments\n if (!dotSegments.test(iri))\n return iri;\n\n // Start with an imaginary slash before the IRI in order to resolve trailing './' and '../'\n const length = iri.length;\n let result = '', i = -1, pathStart = -1, segmentStart = 0, next = '/';\n\n while (i < length) {\n switch (next) {\n // The path starts with the first slash after the authority\n case ':':\n if (pathStart < 0) {\n // Skip two slashes before the authority\n if (iri[++i] === '/' && iri[++i] === '/')\n // Skip to the end of the authority\n while ((pathStart = i + 1) < length && iri[pathStart] !== '/' && iri[pathStart] !== '?' && iri[pathStart] !== '#')\n i = pathStart;\n }\n break;\n // Don't modify a query string or fragment\n case '?':\n case '#':\n i = length;\n break;\n // Handle '/.' or '/..' path segments\n case '/':\n if (iri[i + 1] === '.') {\n next = iri[++i + 1];\n switch (next) {\n // Remove a '/.' segment\n case '/':\n result += iri.substring(segmentStart, i - 1);\n segmentStart = i + 1;\n break;\n // Remove a trailing '/.' segment\n case undefined:\n case '?':\n case '#':\n return result + iri.substring(segmentStart, i) + iri.substr(i + 1);\n // Remove a '/..' segment\n case '.':\n next = iri[++i + 1];\n if (next === undefined || next === '/' || next === '?' || next === '#') {\n result += iri.substring(segmentStart, i - 2);\n // Try to remove the parent path from result\n if ((segmentStart = result.lastIndexOf('/')) >= pathStart)\n result = result.substr(0, segmentStart);\n // Remove a trailing '/..' segment\n if (next !== '/')\n return `${result}/${iri.substr(i + 1)}`;\n segmentStart = i + 1;\n }\n }\n }\n }\n next = iri[++i];\n }\n return result + iri.substring(segmentStart);\n }\n\n // ## Public methods\n\n // ### `parse` parses the N3 input and emits each parsed quad through the onQuad callback.\n parse(input, quadCallback, prefixCallback, versionCallback) {\n // The second parameter also accepts an object of named callbacks.\n // As a second and third parameter it still accepts a separate quadCallback and prefixCallback for backward compatibility as well\n let onQuad, onPrefix, onComment, onVersion, onDirective, onToken, onTokenEnd;\n if (quadCallback && (quadCallback.onQuad || quadCallback.onPrefix || quadCallback.onComment || quadCallback.onVersion ||\n quadCallback.onDirective || quadCallback.onToken || quadCallback.onTokenEnd)) {\n onQuad = quadCallback.onQuad;\n onPrefix = quadCallback.onPrefix;\n onComment = quadCallback.onComment;\n onVersion = quadCallback.onVersion;\n onDirective = quadCallback.onDirective;\n onToken = quadCallback.onToken;\n onTokenEnd = quadCallback.onTokenEnd;\n }\n else {\n onQuad = quadCallback;\n onPrefix = prefixCallback;\n onVersion = versionCallback;\n }\n // The read callback is the next function to be executed when a token arrives.\n // We start reading in the top context.\n this._readCallback = this._readBeforeTopContext;\n // A parse that failed part-way can have left scopes and a statement open\n this._contextStack = [];\n this._graph = this._subject = this._predicate = this._object = null;\n this._tripleTerm = this._reifier = null;\n this._sparqlStyle = false;\n this._prefixes = Object.create(null);\n this._prefixes._ = this._blankNodePrefix ? this._blankNodePrefix.substr(2)\n : `b${blankNodePrefix++}_`;\n // Optionally bind the N3 empty prefix to the document's local namespace\n if (this._n3Mode && this._implicitEmptyPrefix && this._base)\n this._prefixes[''] = this._resolveIRI('#');\n this._prefixCallback = onPrefix || noop;\n this._versionCallback = onVersion || noop;\n this._directiveCallback = onDirective || noop;\n this._inversePredicate = false;\n this._expectOf = false;\n this._quantified = Object.create(null);\n // Changes to prefixes and quantifiers in nested scopes, to undo when leaving them\n this._prefixChanges = null;\n this._quantifiedChanges = null;\n this._emptyFormula = false;\n this._tripleTermDepth = 0;\n\n const readGrammarToken = token => {\n return this._readCallback = this._readCallback(token);\n };\n let readToken = readGrammarToken;\n\n // Comments bypass the grammar, but participate in the token lifecycle.\n if (onComment || this._lexer.comments) {\n this._lexer.comments = true;\n readToken = token => {\n if (token.type !== 'comment')\n return readGrammarToken(token);\n if (onComment) onComment(token.value);\n return this._readCallback;\n };\n }\n\n // Install observers once per parse, leaving the ordinary token path intact.\n if (onToken || onTokenEnd) {\n const consumeToken = readToken;\n readToken = token => {\n try {\n try {\n if (onToken) onToken(token);\n return consumeToken(token);\n }\n finally {\n if (onTokenEnd) onTokenEnd(token);\n }\n }\n catch (error) {\n // A consumer exception aborts this parse, including later chunks.\n this._readCallback = null;\n throw error;\n }\n };\n }\n\n // Parse synchronously if no quad callback is given.\n if (!onQuad) {\n const quads = [];\n let error;\n this._callback = (e, t) => { e ? (error = e) : t && quads.push(t); };\n const lexer = this._lexer;\n // Without callbacks, nothing observes the parse before the whole document\n // has lexed, so tokens can be parsed as they are lexed instead of being\n // collected into an array first. A lexer that replaces the built-in\n // tokenize keeps going through its own implementation.\n if (!onPrefix && !onVersion && !onDirective && !onComment && !onToken && !onTokenEnd &&\n lexer.tokenize === N3Lexer.prototype.tokenize && typeof lexer._tokenizeString === 'function') {\n // A lexical error used to stop the parse before any token was read,\n // so undo base declarations that were read before it\n const base = [this._base, this._basePath, this._baseRoot, this._baseScheme];\n lexer._tokenizeString(input, (e, token) => {\n if (e) {\n [this._base, this._basePath, this._baseRoot, this._baseScheme] = base;\n this._callback(e), this._callback = noop;\n }\n else if (this._readCallback) readToken(token);\n });\n }\n else\n lexer.tokenize(input).every(readToken);\n if (error) throw error;\n return quads;\n }\n\n const processNextToken = (error, token) => {\n if (error !== null)\n this._callback(error), this._callback = noop;\n else if (this._readCallback)\n readToken(token);\n };\n\n // Parse asynchronously otherwise, executing the read callback when a token arrives\n this._callback = onQuad;\n this._lexer.tokenize(input, processNextToken);\n }\n}\n\n// ### `undoChanges` restores the entries of a map from a list of key and previous value pairs\nfunction undoChanges(map, changes) {\n for (let i = changes.length - 2; i >= 0; i -= 2) {\n if (changes[i + 1] === undefined)\n delete map[changes[i]];\n else\n map[changes[i]] = changes[i + 1];\n }\n}\n\n// The empty function\nfunction noop() {}\n\n// Initializes the parser with the given data factory\nfunction initDataFactory(parser, factory) {\n parser._factory = factory;\n\n parser.DEFAULTGRAPH = factory.defaultGraph();\n\n // Set common named nodes\n parser.RDF_FIRST = factory.namedNode(namespaces.rdf.first);\n parser.RDF_REST = factory.namedNode(namespaces.rdf.rest);\n parser.RDF_NIL = factory.namedNode(namespaces.rdf.nil);\n parser.RDF_REIFIES = factory.namedNode(namespaces.rdf.reifies);\n parser.N3_FORALL = factory.namedNode(namespaces.r.forAll);\n parser.N3_FORSOME = factory.namedNode(namespaces.r.forSome);\n parser.N3_TRUE = factory.literal('true', factory.namedNode(namespaces.xsd.boolean));\n parser.ABBREVIATIONS = {\n 'a': factory.namedNode(namespaces.rdf.type),\n '=': factory.namedNode(namespaces.owl.sameAs),\n '>': factory.namedNode(namespaces.log.implies),\n '<': factory.namedNode(namespaces.log.isImpliedBy),\n };\n parser.QUANTIFIERS_GRAPH = factory.namedNode('urn:n3:quantifiers');\n}\nN3Parser.SUPPORTED_VERSIONS = [\n '1.2',\n '1.2-basic',\n '1.1',\n];\ninitDataFactory(N3Parser.prototype, N3DataFactory);\n", "// **N3Util** provides N3 utility functions.\n\nimport N3DataFactory from './N3DataFactory';\n\n// Tests whether the given term represents an IRI\nexport function isNamedNode(term) {\n return !!term && term.termType === 'NamedNode';\n}\n\n// Tests whether the given term represents a blank node\nexport function isBlankNode(term) {\n return !!term && term.termType === 'BlankNode';\n}\n\n// Tests whether the given term represents a literal\nexport function isLiteral(term) {\n return !!term && term.termType === 'Literal';\n}\n\n// Tests whether the given term represents a variable\nexport function isVariable(term) {\n return !!term && term.termType === 'Variable';\n}\n\n// Tests whether the given term represents a quad\nexport function isQuad(term) {\n return !!term && term.termType === 'Quad';\n}\n\n// Tests whether the given term represents the default graph\nexport function isDefaultGraph(term) {\n return !!term && term.termType === 'DefaultGraph';\n}\n\n// Tests whether the given quad is in the default graph\nexport function inDefaultGraph(quad) {\n return isDefaultGraph(quad.graph);\n}\n\n// Creates a function that prepends the given IRI to a local name\nexport function prefix(iri, factory) {\n return prefixes({ '': iri.value || iri }, factory)('');\n}\n\n// Creates a function that allows registering and expanding prefixes\nexport function prefixes(defaultPrefixes, factory) {\n // Add all of the default prefixes\n const prefixes = Object.create(null);\n for (const prefix in defaultPrefixes)\n processPrefix(prefix, defaultPrefixes[prefix]);\n // Set the default factory if none was specified\n factory = factory || N3DataFactory;\n\n // Registers a new prefix (if an IRI was specified)\n // or retrieves a function that expands an existing prefix (if no IRI was specified)\n function processPrefix(prefix, iri) {\n // Create a new prefix if an IRI is specified or the prefix doesn't exist\n if (typeof iri === 'string') {\n // Create a function that expands the prefix\n const cache = Object.create(null);\n prefixes[prefix] = local => {\n return cache[local] || (cache[local] = factory.namedNode(iri + local));\n };\n }\n else if (!(prefix in prefixes)) {\n throw new Error(`Unknown prefix: ${prefix}`);\n }\n return prefixes[prefix];\n }\n return processPrefix;\n}\n", "export function escapeRegex(regex) {\n return regex.replace(/[.*+?^${}()|[\\]\\\\/-]/g, '\\\\$&');\n}\n", "import { escapeRegex } from './Util';\n\n// Do not handle base IRIs without scheme, and currently unsupported cases:\n// - file: IRIs (which could also use backslashes)\n// - IRIs containing /. or /.. or //\nconst BASE_UNSUPPORTED = /^:?[^:?#]*(?:[?#]|$)|^file:|^[^:]*:\\/*[^?#]+?\\/(?:\\.\\.?(?:\\/|$)|\\/)/i;\n// Supported suffixes have a first path segment other than . or ..,\n// and further path segments of at least 3 characters\nconst SUFFIX_SUPPORTED = /^(?:(?!\\.\\.?(?:[/?#]|$))[^/?#]+(?:\\/[^/?#]{3,})*\\/?)?(?:[?#]|$)/;\nconst CURRENT = './';\nconst PARENT = '../';\nconst QUERY = '?';\nconst FRAGMENT = '#';\n\nexport default class BaseIRI {\n constructor(base) {\n this.base = base;\n this._baseLength = 0;\n this._baseMatcher = null;\n this._pathReplacements = new Array(base.length + 1);\n }\n\n static supports(base) {\n return !BASE_UNSUPPORTED.test(base);\n }\n\n _getBaseMatcher() {\n if (this._baseMatcher)\n return this._baseMatcher;\n if (!BaseIRI.supports(this.base))\n return this._baseMatcher = /.^/;\n\n // Extract the scheme\n const scheme = /^[^:]*:\\/*/.exec(this.base)[0];\n const regexHead = ['^', escapeRegex(scheme)];\n const regexTail = [];\n\n // Generate a regex for every path segment\n const segments = [], segmenter = /[^/?#]*([/?#])/y;\n let segment, query = 0, fragment = 0, last = segmenter.lastIndex = scheme.length;\n while (!query && !fragment && (segment = segmenter.exec(this.base))) {\n // Truncate base resolution path at fragment start\n if (segment[1] === FRAGMENT)\n fragment = segmenter.lastIndex - 1;\n else {\n // Create regex that matches the segment\n regexHead.push(escapeRegex(segment[0]), '(?:');\n regexTail.push(')?');\n\n // Create dedicated query string replacement\n if (segment[1] !== QUERY)\n segments.push(last = segmenter.lastIndex);\n else {\n query = last = segmenter.lastIndex;\n fragment = this.base.indexOf(FRAGMENT, query);\n this._pathReplacements[query] = QUERY;\n }\n }\n }\n\n // Precalculate parent path substitutions\n for (let i = 0; i < segments.length; i++)\n this._pathReplacements[segments[i]] = PARENT.repeat(segments.length - i - 1);\n this._pathReplacements[segments[segments.length - 1]] = CURRENT;\n\n // Add the remainder of the base IRI (without fragment) to the regex\n this._baseLength = fragment > 0 ? fragment : this.base.length;\n regexHead.push(\n escapeRegex(this.base.substring(last, this._baseLength)),\n query ? '(?:#|$)' : '(?:[?#]|$)',\n );\n return this._baseMatcher = new RegExp([...regexHead, ...regexTail].join(''));\n }\n\n toRelative(iri) {\n // Unsupported or non-matching base IRI\n const match = this._getBaseMatcher().exec(iri);\n if (!match)\n return iri;\n\n // Exact base IRI match\n const length = match[0].length;\n if (length === this._baseLength && length === iri.length)\n return '';\n\n // Parent path match\n const parentPath = this._pathReplacements[length];\n if (parentPath) {\n const suffix = iri.substring(length);\n // Don't abbreviate unsupported path\n if (parentPath !== QUERY && !SUFFIX_SUPPORTED.test(suffix))\n return iri;\n // Omit ./ with fragment or query string,\n // unless the first segment has a colon and would be read as a scheme\n if (parentPath === CURRENT && /^[^?#]/.test(suffix) &&\n (suffix.indexOf(':') < 0 || !/^[^/?#]*:/.test(suffix)))\n return suffix;\n // Append suffix to relative parent path\n return parentPath + suffix;\n }\n\n // Fragment or query string, so include delimiter\n return iri.substring(length - 1);\n }\n}\n", "// **N3Writer** writes N3 documents.\nimport namespaces from './IRIs';\nimport { default as N3DataFactory, Term } from './N3DataFactory';\nimport { isDefaultGraph } from './N3Util';\nimport BaseIRI from './BaseIRI';\nimport { escapeRegex } from './Util';\n\nconst DEFAULTGRAPH = N3DataFactory.defaultGraph();\n\nconst { rdf, xsd } = namespaces;\nconst { hasOwnProperty } = Object.prototype;\n\n// Characters that require escaping in Turtle, TriG, and N3,\n// where characters outside the Basic Multilingual Plane are escaped as well\nconst escape = /[\"\\\\\\t\\n\\r\\b\\f\\u0000-\\u0019\\ud800-\\udbff]/,\n escapeAll = /[\"\\\\\\t\\n\\r\\b\\f\\u0000-\\u0019]|[\\ud800-\\udbff][\\udc00-\\udfff]/g,\n // Characters that require escaping in canonical N-Triples and N-Quads:\n // U+0000\u2013U+001F, `\"`, `\\`, U+007F, U+FFFE, and U+FFFF.\n // A negated class is as fast to test as a shorter class listing characters.\n canonicalEscape = /[^ !#-\\[\\]-~\\u0080-\\uFFFD]/,\n canonicalEscapeAll = /[^ !#-\\[\\]-~\\u0080-\\uFFFD]/g,\n escapedCharacters = {\n '\\\\': '\\\\\\\\', '\"': '\\\\\"', '\\t': '\\\\t',\n '\\n': '\\\\n', '\\r': '\\\\r', '\\b': '\\\\b', '\\f': '\\\\f',\n };\n\n// Characters that a version label cannot contain\nconst invalidVersionLabel = /[\"\\\\\\u0000-\\u001f\\u007f]|[\\ud800-\\udbff](?![\\udc00-\\udfff])|(?:^|[^\\ud800-\\udbff])[\\udc00-\\udfff]/;\n\n// A local name (PN_LOCAL) as written in a prefixed name, without backslash escapes,\n// so that it denotes the same characters as the IRI it is taken from.\n// Characters outside the Basic Multilingual Plane are escaped before matching, so they never occur.\nconst localNameStart = 'A-Za-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF' +\n '\\\\u200C\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD_:0-9',\n localNameChar = `${localNameStart}\\\\-\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F\\\\u2040`,\n percent = '%[0-9A-Fa-f]{2}',\n localName = new RegExp(`^(?:(?:[${localNameStart}]|${percent})` +\n `(?:(?:[${localNameChar}.]|${percent})*(?:[${localNameChar}]|${percent}))?)?$`);\n\n// ## Placeholder class to represent already pretty-printed terms\nclass SerializedTerm extends Term {\n // Pretty-printed nodes are not equal to any other node\n // (e.g., [] does not equal [])\n equals(other) {\n return other === this;\n }\n}\n\n// ## Constructor\nexport default class N3Writer {\n constructor(outputStream, options) {\n // ### `_prefixRegex` matches a prefixed name or IRI that begins with one of the added prefixes\n this._prefixRegex = /$0^/;\n this._hasPrefixes = false;\n\n // Shift arguments if the first argument is not a stream\n if (outputStream && typeof outputStream.write !== 'function')\n options = outputStream, outputStream = null;\n options = options || {};\n this._lists = options.lists;\n\n // If no output stream given, send the output as string through the end callback\n if (!outputStream) {\n let output = '';\n this._outputStream = {\n write(chunk, encoding, done) { output += chunk; done && done(); },\n end: done => { done && done(null, output); },\n };\n this._endStream = true;\n }\n else {\n this._outputStream = outputStream;\n this._endStream = options.end === undefined ? true : !!options.end;\n }\n\n // A version label is written as-is, so it cannot contain characters that need escaping,\n // nor unpaired surrogates (which cannot be encoded)\n if (options.version && invalidVersionLabel.test(options.version))\n throw new Error(`Invalid version label: ${JSON.stringify(options.version)}`);\n\n // Initialize writer, depending on the format\n this._subject = null;\n if (!(/triple|quad/i).test(options.format)) {\n this._lineMode = false;\n this._escape = escape, this._escapeAll = escapeAll, this._characterReplacer = characterReplacer;\n this._graph = DEFAULTGRAPH;\n if (options.version)\n this._write(`@version \"${options.version}\".\\n`);\n this._prefixIRIs = Object.create(null);\n // Escaped prefix IRIs and names for the prefix matcher, computed once per prefix\n this._prefixPatterns = Object.create(null);\n if (options.baseIRI) {\n this._baseIri = new BaseIRI(options.baseIRI);\n if (options.writeBase)\n this._write(`@base <${options.baseIRI}>.\\n`);\n }\n options.prefixes && this.addPrefixes(options.prefixes);\n }\n else {\n this._lineMode = true;\n this._writeQuad = this._writeQuadLine;\n // N-Triples and N-Quads are written in their canonical form\n this._escape = canonicalEscape, this._escapeAll = canonicalEscapeAll;\n this._characterReplacer = canonicalCharacterReplacer;\n if (options.version)\n this._write(`VERSION \"${options.version}\"\\n`);\n }\n }\n\n // ## Private methods\n\n // ### Whether the current graph is the default graph\n get _inDefaultGraph() {\n return DEFAULTGRAPH.equals(this._graph);\n }\n\n // ### `_write` writes the argument to the output stream\n _write(string, callback) {\n this._outputStream.write(string, 'utf8', callback);\n }\n\n // ### `_endStatement` finishes a pending statement and closes an open graph block\n _endStatement() {\n if (this._subject !== null) {\n this._write(this._inDefaultGraph ? '.\\n' : '\\n}\\n');\n this._subject = null;\n this._graph = DEFAULTGRAPH;\n }\n }\n\n // ### `_writeQuad` writes the quad to the output stream\n _writeQuad(subject, predicate, object, graph, done) {\n try {\n // Write the graph's label if it has changed\n // (the id-based fast path of `equals` would conflate\n // the empty named node `<>` with the default graph)\n if (graph !== this._graph &&\n (!graph.equals(this._graph) || graph.termType !== this._graph.termType)) {\n // Close the previous graph and start the new one\n this._write((this._subject === null ? '' : (this._inDefaultGraph ? '.\\n' : '\\n}\\n')) +\n (DEFAULTGRAPH.equals(graph) ? '' : `${this._encodeIriOrBlank(graph)} {\\n`));\n this._graph = graph;\n this._subject = null;\n }\n // Don't repeat the subject if it's the same\n if (subject === this._subject || subject.equals(this._subject)) {\n // Don't repeat the predicate if it's the same\n if (predicate === this._predicate || predicate.equals(this._predicate))\n this._write(`, ${this._encodeObject(object)}`, done);\n // Same subject, different predicate\n else\n this._write(`;\\n ${\n this._encodePredicate(this._predicate = predicate)} ${\n this._encodeObject(object)}`, done);\n }\n // Different subject; write the whole quad\n else\n this._write(`${(this._subject === null ? '' : '.\\n') +\n this._encodeSubject(this._subject = subject)} ${\n this._encodePredicate(this._predicate = predicate)} ${\n this._encodeObject(object)}`, done);\n }\n catch (error) { done && done(error); }\n }\n\n // ### `_writeQuadLine` writes the quad to the output stream as a single line\n _writeQuadLine(subject, predicate, object, graph, done) {\n // Write the quad without prefixes\n delete this._prefixMatch;\n this._write(this.quadToString(subject, predicate, object, graph), done);\n }\n\n // ### `quadToString` serializes a quad as a string\n quadToString(subject, predicate, object, graph) {\n return `${this._encodeSubject(subject)} ${\n predicate.termType === 'Literal' ?\n this._encodeLiteral(predicate) : this._encodeIriOrBlank(predicate)} ${\n this._encodeObject(object)\n }${graph && !isDefaultGraph(graph) ? ` ${this._encodeIriOrBlank(graph)} .\\n` : ' .\\n'}`;\n }\n\n // ### `quadsToString` serializes an array of quads as a string\n quadsToString(quads) {\n let quadsString = '';\n for (const quad of quads)\n quadsString += this.quadToString(quad.subject, quad.predicate, quad.object, quad.graph);\n return quadsString;\n }\n\n // ### `_encodeSubject` represents a subject\n _encodeSubject(entity) {\n switch (entity.termType) {\n case 'Quad':\n return this._encodeQuad(entity);\n // Literal subjects are only valid in N3\n case 'Literal':\n return this._encodeLiteral(entity);\n default:\n return this._encodeIriOrBlank(entity);\n }\n }\n\n // ### `_encodeIriOrBlank` represents an IRI or blank node\n _encodeIriOrBlank(entity) {\n // A blank node or list is represented as-is\n if (entity.termType !== 'NamedNode') {\n // If it is a list head, pretty-print it\n if (this._lists && hasOwnProperty.call(this._lists, entity.value))\n entity = this.list(this._lists[entity.value]);\n // Terms from this library already hold their serialization as id\n if (entity instanceof Term)\n return entity.id;\n return entity.termType === 'Variable' ? `?${entity.value}` : `_:${entity.value}`;\n }\n let iri = entity.value;\n // Use relative IRIs if requested and possible\n if (this._baseIri) {\n iri = this._baseIri.toRelative(iri);\n }\n // Escape special characters\n if (this._escape.test(iri))\n iri = iri.replace(this._escapeAll, this._characterReplacer);\n // Try to represent the IRI as prefixed name, unless no prefixes were added\n const prefixMatch = this._hasPrefixes ? (this._prefixRegex || this._createPrefixRegex()).exec(iri) : null;\n if (!prefixMatch)\n return `<${iri}>`;\n // An IRI that starts with a registered prefix IRI\n if (prefixMatch[1])\n return this._prefixIRIs[prefixMatch[1]] + prefixMatch[2];\n // An IRI that already looks like a prefixed name, if the rest is a valid local name\n return localName.test(iri.slice(prefixMatch[0].length)) ? iri : `<${iri}>`;\n }\n\n // ### `_encodeLiteral` represents a literal\n _encodeLiteral(literal) {\n // Escape special characters\n let value = literal.value;\n if (this._escape.test(value))\n value = value.replace(this._escapeAll, this._characterReplacer);\n\n // Write a language-tagged literal\n const language = literal.language;\n if (language) {\n const literalDirection = literal.direction;\n const direction = literalDirection ? `--${literalDirection}` : '';\n return `\"${value}\"@${language}${direction}`;\n }\n\n // Write dedicated literals per data type\n if (this._lineMode) {\n // Only abbreviate strings in N-Triples or N-Quads\n if (literal.datatype.value === xsd.string)\n return `\"${value}\"`;\n }\n else {\n // Use common datatype abbreviations in Turtle or TriG\n switch (literal.datatype.value) {\n case xsd.string:\n return `\"${value}\"`;\n case xsd.boolean:\n if (value === 'true' || value === 'false')\n return value;\n break;\n case xsd.integer:\n if (/^[+-]?\\d+$/.test(value))\n return value;\n break;\n case xsd.decimal:\n if (/^[+-]?\\d*\\.\\d+$/.test(value))\n return value;\n break;\n case xsd.double:\n if (/^[+-]?(?:\\d+\\.\\d*|\\.?\\d+)[eE][+-]?\\d+$/.test(value))\n return value;\n break;\n }\n }\n\n // Write a regular datatyped literal\n return `\"${value}\"^^${this._encodeIriOrBlank(literal.datatype)}`;\n }\n\n // ### `_encodePredicate` represents a predicate\n _encodePredicate(predicate) {\n switch (predicate.termType) {\n case 'NamedNode':\n return predicate.value === rdf.type ? 'a' : this._encodeIriOrBlank(predicate);\n // Literal predicates are only valid in N3\n case 'Literal':\n return this._encodeLiteral(predicate);\n default:\n return this._encodeIriOrBlank(predicate);\n }\n }\n\n // ### `_encodeObject` represents an object\n _encodeObject(object) {\n switch (object.termType) {\n case 'Quad':\n return this._encodeQuad(object);\n case 'Literal':\n return this._encodeLiteral(object);\n default:\n return this._encodeIriOrBlank(object);\n }\n }\n\n // ### `_encodeQuad` encodes an RDF-star quad\n _encodeQuad({ subject, predicate, object, graph }) {\n // Canonical N-Triples and N-Quads put spaces inside the delimiters\n const space = this._lineMode ? ' ' : '';\n return `<<(${space}${\n this._encodeSubject(subject)} ${\n this._encodePredicate(predicate)} ${\n this._encodeObject(object)}${\n isDefaultGraph(graph) ? '' : ` ${this._encodeIriOrBlank(graph)}`}${space})>>`;\n }\n\n // ### `_blockedWrite` replaces `_write` after the writer has been closed\n _blockedWrite() {\n throw new Error('Cannot write because the writer has been closed.');\n }\n\n // ### `addQuad` adds the quad to the output stream\n addQuad(subject, predicate, object, graph, done) {\n // The quad was given as an object, so shift parameters\n if (object === undefined)\n this._writeQuad(subject.subject, subject.predicate, subject.object, subject.graph, predicate);\n // The optional `graph` parameter was not provided\n else if (typeof graph === 'function')\n this._writeQuad(subject, predicate, object, DEFAULTGRAPH, graph);\n // The `graph` parameter was provided\n else\n this._writeQuad(subject, predicate, object, graph || DEFAULTGRAPH, done);\n }\n\n // ### `addQuads` adds the quads to the output stream\n addQuads(quads) {\n for (let i = 0; i < quads.length; i++)\n this.addQuad(quads[i]);\n }\n\n // ### `addPrefix` adds the prefix to the output stream\n addPrefix(prefix, iri, done) {\n const prefixes = {};\n prefixes[prefix] = iri;\n this.addPrefixes(prefixes, done);\n }\n\n // ### `addPrefixes` adds the prefixes to the output stream\n addPrefixes(prefixes, done) {\n // Ignore prefixes if not supported by the serialization\n if (!this._prefixIRIs)\n return done && done();\n\n // Write all new prefixes\n let hasPrefixes = false;\n for (let prefix in prefixes) {\n let iri = prefixes[prefix];\n if (typeof iri !== 'string')\n iri = iri.value;\n hasPrefixes = true;\n // Finish a possible pending quad\n this._endStatement();\n // Store and write the prefix\n this._prefixIRIs[iri] = (prefix += ':');\n this._prefixPatterns[iri] = [escapeRegex(iri), escapeRegex(prefix)];\n this._write(`@prefix ${prefix} <${iri}>.\\n`);\n }\n // Recreate the prefix matcher when it is next needed, so that adding\n // prefixes one by one does not rebuild it for every prefix\n if (hasPrefixes) {\n this._hasPrefixes = true;\n this._prefixRegex = null;\n }\n // End a prefix block with a newline\n this._write(hasPrefixes ? '\\n' : '', done);\n }\n\n // ### `_createPrefixRegex` creates the matcher for the current prefixes\n _createPrefixRegex() {\n let IRIlist = '', prefixList = '';\n for (const prefixIRI in this._prefixPatterns) {\n const [IRIpattern, prefixPattern] = this._prefixPatterns[prefixIRI];\n IRIlist += IRIlist ? `|${IRIpattern}` : IRIpattern;\n prefixList += prefixList ? `|${prefixPattern}` : prefixPattern;\n }\n return this._prefixRegex = new RegExp(`^(${IRIlist})([_a-zA-Z0-9](?:\\\\.?[\\\\-_a-zA-Z0-9])*)$|` +\n `^(?:${prefixList})`);\n }\n\n // ### `blank` creates a blank node with the given content\n blank(predicate, object) {\n let children = predicate, child, length;\n // Empty blank node\n if (predicate === undefined)\n children = [];\n // Blank node passed as blank(Term(\"predicate\"), Term(\"object\"))\n else if (predicate.termType)\n children = [{ predicate: predicate, object: object }];\n // Blank node passed as blank({ predicate: predicate, object: object })\n else if (!('length' in predicate))\n children = [predicate];\n\n switch (length = children.length) {\n // Generate an empty blank node\n case 0:\n return new SerializedTerm('[]');\n // Generate a non-nested one-triple blank node\n case 1:\n child = children[0];\n if (!(child.object instanceof SerializedTerm))\n return new SerializedTerm(`[ ${this._encodePredicate(child.predicate)} ${\n this._encodeObject(child.object)} ]`);\n // Generate a multi-triple or nested blank node\n default:\n let contents = '[';\n // Write all triples in order\n for (let i = 0; i < length; i++) {\n child = children[i];\n // Write only the object is the predicate is the same as the previous\n if (child.predicate.equals(predicate))\n contents += `, ${this._encodeObject(child.object)}`;\n // Otherwise, write the predicate and the object\n else {\n contents += `${(i ? ';\\n ' : '\\n ') +\n this._encodePredicate(child.predicate)} ${\n this._encodeObject(child.object)}`;\n predicate = child.predicate;\n }\n }\n return new SerializedTerm(`${contents}\\n]`);\n }\n }\n\n // ### `list` creates a list node with the given content\n list(elements) {\n const length = elements && elements.length || 0, contents = new Array(length);\n for (let i = 0; i < length; i++)\n contents[i] = this._encodeObject(elements[i]);\n return new SerializedTerm(`(${contents.join(' ')})`);\n }\n\n // ### `end` signals the end of the output stream\n end(done) {\n // Finish a possible pending quad\n this._endStatement();\n // Disallow further writing\n this._write = this._blockedWrite;\n\n // Try to end the underlying stream, ensuring done is called exactly one time\n let singleDone = done && ((error, result) => { singleDone = null, done(error, result); });\n if (this._endStream) {\n try { return this._outputStream.end(singleDone); }\n catch (error) { /* error closing stream */ }\n }\n singleDone && singleDone();\n }\n}\n\n// Replaces a character by its escaped version\nfunction characterReplacer(character) {\n // Replace a single character by its escaped version\n let result = escapedCharacters[character];\n if (result === undefined) {\n // Replace a single character with its 4-bit unicode escape sequence\n if (character.length === 1) {\n result = character.charCodeAt(0).toString(16);\n result = '\\\\u0000'.substr(0, 6 - result.length) + result;\n }\n // Replace a surrogate pair with its 8-bit unicode escape sequence\n else {\n result = ((character.charCodeAt(0) - 0xD800) * 0x400 +\n character.charCodeAt(1) + 0x2400).toString(16);\n result = '\\\\U00000000'.substr(0, 10 - result.length) + result;\n }\n }\n return result;\n}\n\n// Replaces a character by its canonical N-Triples escape:\n// a short escape where one exists, and an upper-case `\\uXXXX` escape otherwise\nfunction canonicalCharacterReplacer(character) {\n let result = escapedCharacters[character];\n if (result === undefined) {\n result = character.charCodeAt(0).toString(16).toUpperCase();\n result = '\\\\u0000'.substr(0, 6 - result.length) + result;\n }\n return result;\n}\n", "// **formats** describes the RDF syntaxes that support RDF Messages.\n\n/** @type {Record<string, { name: string; lineMode: boolean }>} */\nconst FORMATS = {\n turtle: { name: 'Turtle', lineMode: false },\n trig: { name: 'TriG', lineMode: false },\n ntriples: { name: 'N-Triples', lineMode: true },\n nquads: { name: 'N-Quads', lineMode: true },\n};\n\n// The version labels of RDF 1.2 syntaxes, as accepted by N3.js\nconst BASE_VERSIONS = ['1.2', '1.2-basic', '1.1'];\n\n// ### `resolveFormat` maps a format name or media type to a supported syntax\nexport function resolveFormat(format = 'TriG') {\n const key = String(format).toLowerCase().replace(/;[\\s\\S]*$/, '').trim()\n .replace(/^(?:text|application)\\//, '')\n .replace(/^x-/, '')\n .replace(/[-_ ]/g, '');\n const resolved = FORMATS[key];\n if (!resolved)\n throw new TypeError(`Unsupported RDF Messages format: \"${format}\". ` +\n 'Supported formats are Turtle, TriG, N-Triples and N-Quads.');\n return resolved;\n}\n\n/** @param {unknown} version */\n// ### `isMessagesVersion` checks whether a version label announces RDF Messages\nexport function isMessagesVersion(version) {\n return typeof version === 'string' && version.endsWith('-messages');\n}\n\n/** @param {string} version */\n// ### `baseVersion` strips the `-messages` suffix of a version label\nexport function baseVersion(version) {\n return isMessagesVersion(version) ? version.slice(0, -'-messages'.length) : version;\n}\n\n/** @param {string} version */\n// ### `isSupportedVersion` checks whether a (base) version label is supported\nexport function isSupportedVersion(version, supported = BASE_VERSIONS) {\n return supported.includes(version);\n}\n", "// **MessageWriter** writes RDF Message Logs (Turtle, TriG, N-Triples and N-Quads).\n//\n// One N3.js writer writes the whole log: its `version` option announces the log,\n// and after each message, `_endStatement` finishes the pending statement (and graph block)\n// before a delimiter is written (`MESSAGE` in line formats, `@message .` in Turtle and TriG).\n// That way, consumers receive a message as soon as it is written, no serialization state\n// (current graph, subject, predicate) leaks from one message into the next, and trailing\n// empty messages survive a round trip (a delimiter before the end of the input does not create a message).\nimport { Writer } from 'n3';\nimport { resolveFormat, isMessagesVersion, baseVersion, isSupportedVersion } from './formats.js';\n\n/** @extends {Writer<import('@rdfjs/types').BaseQuad>} */\nclass LogWriter extends Writer {\n // ### `addDelimiter` ends the current message\n addDelimiter() {\n this._endStatement();\n this._write(this._lineMode ? 'MESSAGE\\n' : '@message .\\n');\n }\n}\n\n/** @typedef {import('./internal.js').Done} Done */\n/** @typedef {import('./internal.js').End} End */\n/** @typedef {import('../common.js').MessageWriterOptions} Options */\n/** @typedef {Pick<import('./internal.js').Output, 'write'> & Partial<Pick<import('./internal.js').Output, 'end'>>} Output */\nexport default class MessageWriter {\n // `outputStream` is optional: without it, `end` returns the output as a string\n /** @overload\n * @param {Options} [options] */\n /** @overload\n * @param {Output | null} outputStream\n * @param {Options} [options] */\n /** @param {Output | Options | null} [outputStream]\n * @param {Options} [options] */\n constructor(outputStream, options) {\n if (outputStream && typeof /** @type {Output} */ (outputStream).write !== 'function')\n options = /** @type {Options} */ (outputStream), outputStream = null;\n options = options || {};\n this._format = resolveFormat(options.format);\n this._options = options;\n this._version = options.version === undefined ? '1.2-messages' : options.version;\n if (!isMessagesVersion(this._version) || !isSupportedVersion(baseVersion(this._version)))\n throw new TypeError(`Unsupported RDF Messages version: \"${this._version}\"`);\n\n this._output = '';\n this._stream = /** @type {Output | null | undefined} */ (outputStream);\n this._endStream = !outputStream || options.end !== false;\n this._pending = 0;\n\n /** @type {Done[]} */\n this._waiting = [];\n\n /** @type {Error | null} */\n this._error = null;\n this._started = false;\n this._ended = false;\n this._open = false;\n this._count = 0; // messages begun so far: the index of the next message\n this._declared = Object.assign({}, options.prefixes);\n\n /** @type {Record<string, string>} */\n this._newPrefixes = {};\n // The N3.js writer writes to this sink, which it never ends\n /** @type {Pick<Output, 'write'>} */\n this._sink = { write: (chunk, encoding, done) => this._write(chunk, done) };\n\n /** @type {LogWriter | null} */\n this._writer = null;\n }\n\n // ### `addMessage` writes the quads of one message, followed by a delimiter.\n // The callback (or returned promise) completes once the output is flushed.\n /** @param {import('@rdfjs/types').BaseQuad[]} quads\n * @param {Done} [done] */\n addMessage(quads, done) {\n return this._complete(done, () => {\n if (this._open) throw new Error('A message is already open');\n this._begin();\n for (const quad of quads || []) this._add(quad);\n this._close();\n });\n }\n\n // ### `beginMessage` opens a message. It is optional: the first `addQuad` opens one implicitly.\n /** @param {Done} [done] */\n beginMessage(done) {\n return this._complete(done, () => {\n if (this._open) throw new Error('A message is already open');\n this._begin();\n });\n }\n\n // ### `addQuad` writes a quad into the open message right away (a message is opened if there is none).\n // With a `messageIndex` (0-based), a change of index ends the current message and writes the empty\n // messages in between, as rdf-writer-ts does; a lower index than the current one is an error.\n /** @param {import('@rdfjs/types').BaseQuad} quad\n * @param {number | Done} [messageIndex]\n * @param {Done} [done] */\n addQuad(quad, messageIndex, done) {\n if (typeof messageIndex === 'function') done = messageIndex, messageIndex = undefined;\n return this._complete(done, () => {\n if (messageIndex !== undefined && messageIndex !== null) this._moveTo(messageIndex);\n else if (!this._open) this._begin();\n this._add(quad);\n });\n }\n\n // ### `endMessage` ends the open message with a delimiter. Without an open message, it writes an empty one.\n /** @param {Done} [done] */\n endMessage(done) {\n return this._complete(done, () => {\n if (!this._open) this._begin();\n this._close();\n });\n }\n\n // ### `addPrefix` declares a prefix, which is written before the next message\n // and stays in effect for all messages after it\n /** @param {string} prefix\n * @param {string | import('@rdfjs/types').NamedNode} iri\n * @param {Done} [done] */\n addPrefix(prefix, iri, done) {\n return this._complete(done, () => {\n if (!this._format.lineMode && this._declared[prefix] !== (typeof iri === 'string' ? iri : iri.value))\n this._newPrefixes[prefix] = typeof iri === 'string' ? iri : iri.value;\n });\n }\n\n // ### `end` ends the log and, unless disabled, the output stream.\n // The callback receives the output as a string if no output stream was given.\n /** @overload\n * @returns {Promise<string | void>} */\n /** @overload\n * @param {End} done\n * @returns {void} */\n /** @param {End} [done]\n * @returns {Promise<string | void> | void} */\n end(done) {\n // Ending twice is harmless\n if (this._ended)\n return typeof done === 'function' ? done(null) : Promise.resolve();\n this._start();\n if (this._open)\n this._close();\n if (typeof done === 'function')\n return this._finish(done);\n return new Promise((resolve, reject) => this._finish((error, result) => error ? reject(error) : resolve(result)));\n }\n\n // ## Private methods\n\n // Runs an action and reports completion with a callback or a promise\n /** @param {Done | undefined} done\n * @param {() => void} action\n * @returns {Promise<void> | void} */\n _complete(done, action) {\n if (this._ended)\n this._error = this._error || new Error('Cannot write after end');\n else\n try {\n action();\n }\n catch (error) {\n this._error = this._error || /** @type {Error} */ (error);\n }\n if (typeof done === 'function')\n return this._whenFlushed(done);\n return new Promise((resolve, reject) => this._whenFlushed(error => error ? reject(error) : resolve()));\n }\n\n // Ends the output once all queued writes were accepted\n /** @param {End} callback */\n _finish(callback) {\n this._ended = true;\n this._whenFlushed(error => this._endOutput(error, callback));\n }\n\n /** @param {Error | null | undefined} error\n * @param {End} callback */\n _endOutput(error, callback) {\n if (error || !this._endStream)\n return callback(error);\n if (!this._stream)\n return callback(null, this._output);\n try {\n (/** @type {Required<Output>} */ (this._stream)).end(endError => callback(endError));\n }\n catch (endError) {\n callback(/** @type {Error} */ (endError));\n }\n }\n\n // Calls back once all queued writes were accepted by the output\n /** @param {Done} done */\n _whenFlushed(done) {\n if (this._pending === 0)\n this._settle(done);\n else\n this._waiting.push(done);\n }\n\n /** @param {Done} done */\n _settle(done) {\n const error = this._error;\n this._error = null;\n done(error || null);\n }\n\n /** @param {string} chunk\n * @param {Done} [done] */\n _write(chunk, done) {\n if (!this._stream) {\n this._output += chunk;\n return done && done();\n }\n this._pending++;\n try {\n this._stream.write(chunk, 'utf8', error => this._written(error, done));\n }\n catch (error) {\n this._written(/** @type {Error} */ (error), done);\n }\n }\n\n // Registers that the output accepted a write, and wakes up those waiting for the output\n /** @param {Error | null | undefined} error\n * @param {Done} [done] */\n _written(error, done) {\n this._pending--;\n this._error = this._error || error || null;\n done && done(error);\n if (this._pending === 0)\n this._waiting.splice(0).forEach(callback => this._settle(callback));\n }\n\n // Announces the RDF Messages version, which makes parsers expect delimiters,\n // and declares the base and prefixes, which stay in effect for all messages\n _start() {\n if (!this._started) {\n this._started = true;\n const options = this._options;\n this._writer = new LogWriter(this._sink, {\n format: this._format.name,\n end: false,\n version: this._version,\n baseIRI: options.baseIRI,\n writeBase: options.writeBase,\n prefixes: this._declared,\n });\n }\n }\n\n // Opens a message: declares the prefixes that were added since the previous one\n _begin() {\n this._start();\n const writer = /** @type {LogWriter} */ (this._writer);\n for (const prefix of Object.keys(this._newPrefixes)) {\n const iri = /** @type {string} */ (this._newPrefixes[prefix]);\n writer.addPrefix(prefix, iri);\n this._declared[prefix] = iri;\n }\n this._newPrefixes = {};\n this._open = true;\n this._count++;\n }\n\n /** @param {import('@rdfjs/types').BaseQuad} quad */\n _add(quad) {\n /** @type {Done} */\n const record = error => error && (this._error = this._error || error);\n (/** @type {LogWriter} */ (this._writer)).addQuad(quad.subject, quad.predicate, quad.object, quad.graph, record);\n }\n _close() {\n this._open = false;\n (/** @type {LogWriter} */ (this._writer)).addDelimiter();\n }\n\n // Makes message `index` the open message, writing empty messages for the gap\n /** @param {number} index */\n _moveTo(index) {\n const current = this._count - 1;\n if (!Number.isInteger(index) || index < 0) throw new RangeError(`Invalid message index: ${index}`);\n if (this._open && index === current) return;\n if (index <= current) throw new RangeError(`Message index ${index} is lower than the current message index ${current}`);\n if (this._open) this._close();\n while (this._count < index) {\n this._begin();\n this._close();\n }\n this._begin();\n }\n}\n\n/** @param {Iterable<import('@rdfjs/types').BaseQuad[]>} messages\n * @param {Options} [options]\n * @returns {string} */\n// ### `writeMessages` synchronously serializes an array of messages to a string\nexport function writeMessages(messages, options) {\n const writer = new MessageWriter(options);\n\n /** @type {Error[]} */\n const errors = [];\n let output = '';\n\n /** @param {Error | null | undefined} error */\n function collect(error) {\n if (error)\n errors.push(error);\n }\n for (const message of messages)\n writer.addMessage(message, collect);\n writer.end((error, result) => (collect(error), output = /** @type {string} */ (result)));\n if (errors.length > 0)\n throw errors[0];\n return output;\n}\n", "// **MessageParser** parses RDF Message Logs (Turtle, TriG, N-Triples and N-Quads).\nimport { StringDecoder } from 'string_decoder';\nimport MessageParserCore from './MessageParserCore.js';\n\n/** @template {import('@rdfjs/types').BaseQuad} [Q=import('@rdfjs/types').Quad] */\nexport default class MessageParser {\n /** @param {import('../common.js').MessageParserOptions<Q>} [options] */\n constructor(options) {\n /** @type {import('../common.js').MessageParserOptions<Q>} */\n this._options = options || {};\n // Fail early on unsupported options\n // Construction only validates options; this core never receives input.\n this._createCore(/** @type {import('./internal.js').ParserSink<Q>} */ ({}));\n }\n\n /** @param {import('./internal.js').ParserSink<Q>} sink */\n _createCore(sink) {\n return new MessageParserCore(this._options, sink);\n }\n\n // ### `parse` parses a string or a readable stream of RDF Messages.\n //\n // Without callbacks, a string is parsed synchronously into an array of\n // messages (arrays of quads), and parse errors are thrown.\n // With a callback `(error, message, prefixes)`, or an object with the\n // callbacks `onMessage(error, message, prefixes)`, `onQuad(error, quad, messageIndex)`,\n // `onPrefix(prefix, term)` and `onVersion(label)`, messages are reported as soon\n // as they are complete. The final call has `null` as message.\n /**\n * @overload\n * @param {string} input\n * @returns {Q[][]}\n */\n /**\n * @overload\n * @param {string | NodeJS.ReadableStream} input\n * @param {import('../common.js').MessageCallback<Q> | import('../common.js').MessageParseCallbacks<Q>} [callbacks]\n * @returns {void}\n */\n /**\n * @param {string | NodeJS.ReadableStream} input\n * @param {import('../common.js').MessageCallback<Q> | import('../common.js').MessageParseCallbacks<Q>} [callbacks]\n * @returns {Q[][] | undefined}\n */\n parse(input, callbacks) {\n if (typeof callbacks === 'function')\n callbacks = { onMessage: callbacks };\n\n /** @type {Q[][] | null} */\n const messages = callbacks ? null : [];\n\n /** @type {Error | null} */\n let error = null;\n callbacks = callbacks || {};\n\n /** @type {import('./internal.js').ParserSink<Q>} */\n const sink = {\n message: (quads, index) => callbacks.onMessage ? callbacks.onMessage(null, quads, undefined, index) : messages && messages.push(quads),\n end: prefixes => callbacks.onMessage && callbacks.onMessage(null, null, prefixes),\n error: e => {\n error = e;\n callbacks.onMessage && callbacks.onMessage(e, null);\n callbacks.onQuad && callbacks.onQuad(e);\n },\n };\n if (callbacks.onQuad)\n sink.quad = (quad, index) => callbacks.onQuad?.(null, quad, index);\n if (callbacks.onPrefix)\n sink.prefix = callbacks.onPrefix;\n if (callbacks.onVersion)\n sink.version = callbacks.onVersion;\n const core = this._createCore(sink);\n\n // Parse a string at once\n if (typeof input === 'string') {\n core.write(input);\n core.end();\n if (error && messages)\n throw error;\n return messages || undefined;\n }\n\n // Parse a stream chunk by chunk\n const decoder = new StringDecoder('utf8');\n input.on('data', chunk => core.write(typeof chunk === 'string' ? chunk : decoder.write(chunk)));\n input.on('end', () => {\n core.write(decoder.end());\n core.end();\n });\n input.on('error', e => sink.error(e));\n return undefined;\n }\n}\n\n/**\n * @template {import('@rdfjs/types').BaseQuad} [Q=import('@rdfjs/types').Quad]\n * @param {string} input\n * @param {import('../common.js').MessageParserOptions<Q>} [options]\n */\n// ### `parseMessages` synchronously parses a string into an array of messages\nexport function parseMessages(input, options) {\n return new MessageParser(options).parse(input);\n}\n", "import MessageParserCore from './MessageParserCore.js';\nimport MessageWriter from './MessageWriter.js';\n\nexport { default as MessageParser, parseMessages } from './MessageParser.js';\nexport { default as MessageWriter, writeMessages } from './MessageWriter.js';\n\n/**\n * A Web Streams parser; strings and UTF-8 bytes can be piped directly from fetch.\n * @template {import('@rdfjs/types').BaseQuad} [Q=import('@rdfjs/types').Quad]\n * @extends {TransformStream<import('../browser.js').MessageChunk, Q[]>}\n */\nexport class MessageStreamParser extends TransformStream {\n /** @param {import('../browser.js').BrowserParserOptions<Q>} [options] */\n constructor(options = {}) {\n const decoder = new TextDecoder();\n\n /** @type {MessageParserCore<Q>} */\n let core;\n super({\n start(controller) {\n core = new MessageParserCore(options, {\n message: quads => controller.enqueue(quads),\n end: () => {},\n error: error => { throw error; },\n prefix: options.onPrefix,\n version: options.onVersion,\n });\n },\n transform(chunk) {\n core.write(typeof chunk === 'string' ? chunk : decoder.decode(chunk, { stream: true }));\n },\n flush() {\n core.write(decoder.decode());\n core.end();\n },\n });\n }\n}\n\n/** A Web Streams writer; accepts messages or individual indexed quads.\n * @extends {TransformStream<import('../browser.js').MessageWriterInput, string>} */\nexport class MessageStreamWriter extends TransformStream {\n /** @param {import('../common.js').MessageWriterOptions} [options] */\n constructor(options) {\n /** @type {MessageWriter} */\n let writer;\n super({\n start(controller) {\n /** @type {Pick<import('./internal.js').Output, 'write'>} */\n const output = { write: (chunk, encoding, done) => { controller.enqueue(chunk); done(); } };\n writer = new MessageWriter(output, { ...options, end: false });\n },\n transform(message) {\n return Array.isArray(message) ? writer.addMessage(message) : writer.addQuad(message.quad, message.messageIndex);\n },\n flush() {\n return writer.end().then(() => {});\n },\n });\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["require_events", "__commonJSMin", "exports", "module", "R", "ReflectApply", "target", "receiver", "args", "ReflectOwnKeys", "ProcessEmitWarning", "warning", "NumberIsNaN", "value", "EventEmitter", "once", "defaultMaxListeners", "checkListener", "listener", "arg", "n", "_getMaxListeners", "that", "type", "i", "doError", "events", "er", "err", "handler", "len", "listeners", "arrayClone", "_addListener", "prepend", "m", "existing", "w", "onceWrapper", "_onceWrap", "state", "wrapped", "list", "position", "originalListener", "spliceOne", "keys", "key", "_listeners", "unwrap", "evlistener", "unwrapListeners", "emitter", "listenerCount", "arr", "copy", "index", "ret", "name", "resolve", "reject", "errorListener", "resolver", "eventTargetAgnosticAddListener", "addErrorHandlerIfEventEmitter", "flags", "wrapListener", "require_base64_js", "__commonJSMin", "exports", "byteLength", "toByteArray", "fromByteArray", "lookup", "revLookup", "Arr", "code", "i", "len", "getLens", "b64", "validLen", "placeHoldersLen", "lens", "_byteLength", "tmp", "arr", "curByte", "tripletToBase64", "num", "encodeChunk", "uint8", "start", "end", "output", "extraBytes", "parts", "maxChunkLength", "len2", "require_ieee754", "__commonJSMin", "exports", "buffer", "offset", "isLE", "mLen", "nBytes", "e", "m", "eLen", "eMax", "eBias", "nBits", "i", "d", "s", "value", "c", "rt", "require_buffer", "__commonJSMin", "exports", "base64", "ieee754", "customInspectSymbol", "Buffer", "SlowBuffer", "K_MAX_LENGTH", "typedArraySupport", "arr", "proto", "createBuffer", "length", "buf", "arg", "encodingOrOffset", "allocUnsafe", "from", "value", "fromString", "fromArrayView", "isInstance", "fromArrayBuffer", "valueOf", "b", "fromObject", "assertSize", "size", "alloc", "fill", "encoding", "checked", "string", "byteLength", "actual", "fromArrayLike", "array", "i", "arrayView", "copy", "byteOffset", "obj", "len", "numberIsNaN", "a", "x", "y", "list", "buffer", "pos", "mustMatch", "loweredCase", "utf8ToBytes", "base64ToBytes", "slowToString", "start", "end", "hexSlice", "utf8Slice", "asciiSlice", "latin1Slice", "base64Slice", "utf16leSlice", "swap", "n", "m", "str", "max", "target", "thisStart", "thisEnd", "thisCopy", "targetCopy", "bidirectionalIndexOf", "val", "dir", "arrayIndexOf", "indexSize", "arrLength", "valLength", "read", "foundIndex", "found", "j", "hexWrite", "offset", "remaining", "strLen", "parsed", "utf8Write", "blitBuffer", "asciiWrite", "asciiToBytes", "base64Write", "ucs2Write", "utf16leToBytes", "res", "firstByte", "codePoint", "bytesPerSequence", "secondByte", "thirdByte", "fourthByte", "tempCodePoint", "decodeCodePointsArray", "MAX_ARGUMENTS_LENGTH", "codePoints", "ret", "out", "hexSliceLookupTable", "bytes", "newBuf", "checkOffset", "ext", "noAssert", "mul", "defineBigIntMethod", "validateNumber", "first", "last", "boundsError", "lo", "hi", "checkInt", "min", "maxBytes", "wrtBigUInt64LE", "checkIntBI", "wrtBigUInt64BE", "limit", "sub", "checkIEEE754", "writeFloat", "littleEndian", "writeDouble", "targetStart", "code", "errors", "E", "sym", "getMessage", "Base", "name", "range", "input", "msg", "received", "addNumericalSeparator", "checkBounds", "type", "INVALID_BASE64_RE", "base64clean", "units", "leadSurrogate", "byteArray", "c", "src", "dst", "alphabet", "table", "i16", "fn", "BufferBigIntNotDefined", "require_safe_buffer", "__commonJSMin", "exports", "module", "buffer", "Buffer", "copyProps", "src", "dst", "key", "SafeBuffer", "arg", "encodingOrOffset", "length", "size", "fill", "encoding", "buf", "require_string_decoder", "__commonJSMin", "exports", "Buffer", "isEncoding", "encoding", "_normalizeEncoding", "enc", "retried", "normalizeEncoding", "nenc", "StringDecoder", "nb", "utf16Text", "utf16End", "utf8FillLast", "base64Text", "base64End", "simpleWrite", "simpleEnd", "buf", "r", "i", "utf8End", "utf8Text", "utf8CheckByte", "byte", "utf8CheckIncomplete", "self", "j", "utf8CheckExtraBytes", "p", "total", "end", "c", "n", "import_events", "RDF", "XSD", "SWAP", "IRIs_default", "xsd", "IRIs_default", "SPACE", "TAB", "LF", "CR", "HASH", "DOT", "COLON", "ZERO", "NINE", "PERCENT", "BACKSLASH", "isWhitespace", "charCode", "asciiDelimiters", "char", "isDelimiter", "canEndName", "input", "pos", "inputFinished", "stringEscapeReplacements", "localNameEscapeReplacements", "illegalIriChars", "PREFIX_START", "LOCAL_START", "NAME_CHAR", "LOCAL_CHAR", "LOCAL_ESCAPE", "asciiNameClasses", "letter", "nameChar", "nameCharLength", "charClass", "low", "isLocalEscape", "isHexDigit", "skipPrefix", "length", "next", "skipLocalName", "end", "skipPrefixedName", "colon", "isValidCodePoint", "lineModeRegExps", "invalidRegExp", "nonWhitespace", "execAt", "regExp", "testAt", "execAtEnd", "isSeparatorCode", "code", "reservedWords", "MIN_RESCAN_LENGTH", "N3Lexer", "options", "key", "name", "callback", "currentLineLength", "separatorLength", "comment", "commentLength", "emitComment", "indentationLength", "following", "reportSyntaxError", "emitToken", "line", "firstChar", "type", "value", "prefix", "match", "matchLength", "lexicalLength", "finalLineLength", "inconclusive", "tripleQuoted", "start", "token", "self", "verb", "item", "replacements", "backslash", "result", "escapedChar", "replacement", "i", "digit", "quote", "openingLength", "opening", "closingPos", "backslashCount", "raw", "lines", "lineCount", "callbackError", "error", "thrown", "issue", "message", "err", "tokenization", "tokens", "e", "t", "decoder", "retryLength", "data", "rest", "rdf", "xsd", "IRIs_default", "DEFAULTGRAPH", "_blankNodeCounter", "EMPTY_IRI_ID", "DataFactory", "namedNode", "blankNode", "variable", "literal", "defaultGraph", "quad", "fromTerm", "fromQuad", "N3DataFactory_default", "Term", "_Term", "id", "other", "NamedNode", "iri", "EMPTY_IRI_ID", "Literal", "_Literal", "atPos", "dirPos", "endPos", "dtPos", "char", "xsd", "rdf", "BlankNode", "name", "Variable", "DefaultGraph", "DEFAULTGRAPH", "Quad", "Term", "subject", "predicate", "object", "graph", "DEFAULTGRAPH", "other", "namedNode", "iri", "NamedNode", "blankNode", "name", "BlankNode", "_blankNodeCounter", "literal", "value", "languageOrDataType", "Literal", "datatype", "xsd", "variable", "Variable", "defaultGraph", "DEFAULTGRAPH", "quad", "subject", "predicate", "object", "graph", "Quad", "fromTerm", "term", "Term", "fromQuad", "inQuad", "blankNodePrefix", "dotSegments", "pathDotSegments", "N3Parser", "_N3Parser", "options", "initDataFactory", "format", "isTurtle", "isTriG", "isNTriples", "isNQuads", "isN3", "isLineMode", "iri", "name", "N3Lexer", "maxTripleTermDepth", "baseIRI", "fragmentPos", "queryPos", "path", "base", "type", "subject", "predicate", "token", "graph", "object", "context", "undoChanges", "quantifier", "value", "prefix", "stack", "pathable", "placeholder", "empty", "item", "list", "next", "previousList", "parent", "component", "literal", "readCb", "datatype", "IRIs_default", "t", "listItem", "term", "completed", "reader", "formula", "inversePredicate", "resetInversePredicate", "prefixNode", "version", "entity", "afterPath", "position", "quad", "reifier", "tripleTerm", "parentGraph", "contextStack", "message", "suffix", "err", "noop", "length", "result", "i", "pathStart", "segmentStart", "input", "quadCallback", "prefixCallback", "versionCallback", "onQuad", "onPrefix", "onComment", "onVersion", "onDirective", "onToken", "onTokenEnd", "readGrammarToken", "readToken", "consumeToken", "error", "quads", "e", "lexer", "processNextToken", "map", "changes", "parser", "factory", "N3DataFactory_default", "isDefaultGraph", "term", "escapeRegex", "regex", "BASE_UNSUPPORTED", "SUFFIX_SUPPORTED", "CURRENT", "PARENT", "QUERY", "FRAGMENT", "BaseIRI", "_BaseIRI", "base", "scheme", "regexHead", "escapeRegex", "regexTail", "segments", "segmenter", "segment", "query", "fragment", "last", "i", "iri", "match", "length", "parentPath", "suffix", "DEFAULTGRAPH", "N3DataFactory_default", "rdf", "xsd", "IRIs_default", "hasOwnProperty", "escape", "escapeAll", "canonicalEscape", "canonicalEscapeAll", "escapedCharacters", "invalidVersionLabel", "localNameStart", "localNameChar", "percent", "localName", "SerializedTerm", "Term", "other", "N3Writer", "outputStream", "options", "output", "chunk", "encoding", "done", "canonicalCharacterReplacer", "characterReplacer", "BaseIRI", "string", "callback", "subject", "predicate", "object", "graph", "error", "isDefaultGraph", "quads", "quadsString", "quad", "entity", "iri", "prefixMatch", "literal", "value", "language", "literalDirection", "direction", "space", "i", "prefix", "prefixes", "hasPrefixes", "escapeRegex", "IRIlist", "prefixList", "prefixIRI", "IRIpattern", "prefixPattern", "children", "child", "length", "contents", "elements", "singleDone", "result", "character", "FORMATS", "BASE_VERSIONS", "resolveFormat", "format", "key", "resolved", "isMessagesVersion", "version", "baseVersion", "isSupportedVersion", "supported", "MessageParserCore", "options", "sink", "format", "resolveFormat", "N3DataFactory_default", "N3Parser", "isMessagesVersion", "n3Options", "baseVersion", "error", "quad", "prefixes", "prefix", "term", "label", "token", "text", "line", "delimiter", "throwing", "isSupportedVersion", "quads", "subject", "predicate", "object", "graph", "scope", "scoped", "LogWriter", "N3Writer", "MessageWriter", "outputStream", "options", "resolveFormat", "isMessagesVersion", "isSupportedVersion", "baseVersion", "chunk", "encoding", "done", "quads", "quad", "messageIndex", "prefix", "iri", "resolve", "reject", "error", "result", "action", "callback", "endError", "writer", "record", "index", "current", "writeMessages", "messages", "errors", "output", "collect", "message", "import_string_decoder", "MessageParser", "options", "sink", "MessageParserCore", "input", "callbacks", "messages", "error", "quads", "index", "prefixes", "e", "quad", "core", "decoder", "chunk", "parseMessages", "MessageStreamParser", "options", "decoder", "core", "controller", "MessageParserCore", "quads", "error", "chunk", "MessageStreamWriter", "writer", "output", "encoding", "done", "MessageWriter", "message"]
|
|
4
|
+
"sourcesContent": ["// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n", "'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n", "/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n", "/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <https://feross.org>\n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nconst base64 = require('base64-js')\nconst ieee754 = require('ieee754')\nconst customInspectSymbol =\n (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nconst K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n const arr = new Uint8Array(1)\n const proto = { foo: function () { return 42 } }\n Object.setPrototypeOf(proto, Uint8Array.prototype)\n Object.setPrototypeOf(arr, proto)\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n const buf = new Uint8Array(length)\n Object.setPrototypeOf(buf, Buffer.prototype)\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayView(value)\n }\n\n if (value == null) {\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof SharedArrayBuffer !== 'undefined' &&\n (isInstance(value, SharedArrayBuffer) ||\n (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n const valueOf = value.valueOf && value.valueOf()\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length)\n }\n\n const b = fromObject(value)\n if (b) return b\n\n if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be of type number')\n } else if (size < 0) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpreted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n const length = byteLength(string, encoding) | 0\n let buf = createBuffer(length)\n\n const actual = buf.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n const length = array.length < 0 ? 0 : checked(array.length) | 0\n const buf = createBuffer(length)\n for (let i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayView (arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n const copy = new Uint8Array(arrayView)\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n }\n return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\"offset\" is outside of buffer bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\"length\" is outside of buffer bounds')\n }\n\n let buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(buf, Buffer.prototype)\n\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n const len = checked(obj.length) | 0\n const buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\n }\n\n if (a === b) return 0\n\n let x = a.length\n let y = b.length\n\n for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n let i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n const buffer = Buffer.allocUnsafe(length)\n let pos = 0\n for (i = 0; i < list.length; ++i) {\n let buf = list[i]\n if (isInstance(buf, Uint8Array)) {\n if (pos + buf.length > buffer.length) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n buf.copy(buffer, pos)\n } else {\n Uint8Array.prototype.set.call(\n buffer,\n buf,\n pos\n )\n }\n } else if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n } else {\n buf.copy(buffer, pos)\n }\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n const len = string.length\n const mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n let loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n const i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n const len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (let i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n const len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (let i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n const len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (let i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n const length = this.length\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n let str = ''\n const max = exports.INSPECT_MAX_BYTES\n str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n if (this.length > max) str += ' ... '\n return '<Buffer ' + str + '>'\n}\nif (customInspectSymbol) {\n Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength)\n }\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n let x = thisEnd - thisStart\n let y = end - start\n const len = Math.min(x, y)\n\n const thisCopy = this.slice(thisStart, thisEnd)\n const targetCopy = target.slice(start, end)\n\n for (let i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n let indexSize = 1\n let arrLength = arr.length\n let valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n let i\n if (dir) {\n let foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n let found = true\n for (let j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n const remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n const strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n let i\n for (i = 0; i < length; ++i) {\n const parsed = parseInt(string.substr(i * 2, 2), 16)\n if (numberIsNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n const remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n case 'latin1':\n case 'binary':\n return asciiWrite(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n const res = []\n\n let i = start\n while (i < end) {\n const firstByte = buf[i]\n let codePoint = null\n let bytesPerSequence = (firstByte > 0xEF)\n ? 4\n : (firstByte > 0xDF)\n ? 3\n : (firstByte > 0xBF)\n ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n let secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n const len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n let res = ''\n let i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n const len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n let out = ''\n for (let i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]]\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n const bytes = buf.slice(start, end)\n let res = ''\n // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n for (let i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n const len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n const newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n let val = this[offset + --byteLength]\n let mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const lo = first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24\n\n const hi = this[++offset] +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n last * 2 ** 24\n\n return BigInt(lo) + (BigInt(hi) << BigInt(32))\n})\n\nBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const hi = first * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n const lo = this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last\n\n return (BigInt(hi) << BigInt(32)) + BigInt(lo)\n})\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let i = byteLength\n let mul = 1\n let val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = this[offset + 4] +\n this[offset + 5] * 2 ** 8 +\n this[offset + 6] * 2 ** 16 +\n (last << 24) // Overflow\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24)\n})\n\nBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = (first << 24) + // Overflow\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last)\n})\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let mul = 1\n let i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let i = byteLength - 1\n let mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction wrtBigUInt64LE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n return offset\n}\n\nfunction wrtBigUInt64BE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset + 7] = lo\n lo = lo >> 8\n buf[offset + 6] = lo\n lo = lo >> 8\n buf[offset + 5] = lo\n lo = lo >> 8\n buf[offset + 4] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset + 3] = hi\n hi = hi >> 8\n buf[offset + 2] = hi\n hi = hi >> 8\n buf[offset + 1] = hi\n hi = hi >> 8\n buf[offset] = hi\n return offset + 8\n}\n\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = 0\n let mul = 1\n let sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = byteLength - 1\n let mul = 1\n let sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n const len = end - start\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end)\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, end),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n if (val.length === 1) {\n const code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n encoding === 'latin1') {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255\n } else if (typeof val === 'boolean') {\n val = Number(val)\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n let i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n const bytes = Buffer.isBuffer(val)\n ? val\n : Buffer.from(val, encoding)\n const len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nconst errors = {}\nfunction E (sym, getMessage, Base) {\n errors[sym] = class NodeError extends Base {\n constructor () {\n super()\n\n Object.defineProperty(this, 'message', {\n value: getMessage.apply(this, arguments),\n writable: true,\n configurable: true\n })\n\n // Add the error code to the name to include it in the stack trace.\n this.name = `${this.name} [${sym}]`\n // Access the stack to generate the error message including the error code\n // from the name.\n this.stack // eslint-disable-line no-unused-expressions\n // Reset the name to the actual name.\n delete this.name\n }\n\n get code () {\n return sym\n }\n\n set code (value) {\n Object.defineProperty(this, 'code', {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n })\n }\n\n toString () {\n return `${this.name} [${sym}]: ${this.message}`\n }\n }\n}\n\nE('ERR_BUFFER_OUT_OF_BOUNDS',\n function (name) {\n if (name) {\n return `${name} is outside of buffer bounds`\n }\n\n return 'Attempt to access memory outside buffer bounds'\n }, RangeError)\nE('ERR_INVALID_ARG_TYPE',\n function (name, actual) {\n return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`\n }, TypeError)\nE('ERR_OUT_OF_RANGE',\n function (str, range, input) {\n let msg = `The value of \"${str}\" is out of range.`\n let received = input\n if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n received = addNumericalSeparator(String(input))\n } else if (typeof input === 'bigint') {\n received = String(input)\n if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n received = addNumericalSeparator(received)\n }\n received += 'n'\n }\n msg += ` It must be ${range}. Received ${received}`\n return msg\n }, RangeError)\n\nfunction addNumericalSeparator (val) {\n let res = ''\n let i = val.length\n const start = val[0] === '-' ? 1 : 0\n for (; i >= start + 4; i -= 3) {\n res = `_${val.slice(i - 3, i)}${res}`\n }\n return `${val.slice(0, i)}${res}`\n}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds (buf, offset, byteLength) {\n validateNumber(offset, 'offset')\n if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n boundsError(offset, buf.length - (byteLength + 1))\n }\n}\n\nfunction checkIntBI (value, min, max, buf, offset, byteLength) {\n if (value > max || value < min) {\n const n = typeof min === 'bigint' ? 'n' : ''\n let range\n if (byteLength > 3) {\n if (min === 0 || min === BigInt(0)) {\n range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`\n } else {\n range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` +\n `${(byteLength + 1) * 8 - 1}${n}`\n }\n } else {\n range = `>= ${min}${n} and <= ${max}${n}`\n }\n throw new errors.ERR_OUT_OF_RANGE('value', range, value)\n }\n checkBounds(buf, offset, byteLength)\n}\n\nfunction validateNumber (value, name) {\n if (typeof value !== 'number') {\n throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)\n }\n}\n\nfunction boundsError (value, length, type) {\n if (Math.floor(value) !== value) {\n validateNumber(value, type)\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value)\n }\n\n if (length < 0) {\n throw new errors.ERR_BUFFER_OUT_OF_BOUNDS()\n }\n\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset',\n `>= ${type ? 1 : 0} and <= ${length}`,\n value)\n}\n\n// HELPER FUNCTIONS\n// ================\n\nconst INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n let codePoint\n const length = string.length\n let leadSurrogate = null\n const bytes = []\n\n for (let i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n let c, hi, lo\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n let i\n for (i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nconst hexSliceLookupTable = (function () {\n const alphabet = '0123456789abcdef'\n const table = new Array(256)\n for (let i = 0; i < 16; ++i) {\n const i16 = i * 16\n for (let j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j]\n }\n }\n return table\n})()\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod (fn) {\n return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn\n}\n\nfunction BufferBigIntNotDefined () {\n throw new Error('BigInt not supported')\n}\n", "/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.prototype = Object.create(Buffer.prototype)\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\n/*</replacement>*/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n encoding = '' + encoding;\n switch (encoding && encoding.toLowerCase()) {\n case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n return true;\n default:\n return false;\n }\n};\n\nfunction _normalizeEncoding(enc) {\n if (!enc) return 'utf8';\n var retried;\n while (true) {\n switch (enc) {\n case 'utf8':\n case 'utf-8':\n return 'utf8';\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return 'utf16le';\n case 'latin1':\n case 'binary':\n return 'latin1';\n case 'base64':\n case 'ascii':\n case 'hex':\n return enc;\n default:\n if (retried) return; // undefined\n enc = ('' + enc).toLowerCase();\n retried = true;\n }\n }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n var nenc = _normalizeEncoding(enc);\n if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n this.encoding = normalizeEncoding(encoding);\n var nb;\n switch (this.encoding) {\n case 'utf16le':\n this.text = utf16Text;\n this.end = utf16End;\n nb = 4;\n break;\n case 'utf8':\n this.fillLast = utf8FillLast;\n nb = 4;\n break;\n case 'base64':\n this.text = base64Text;\n this.end = base64End;\n nb = 3;\n break;\n default:\n this.write = simpleWrite;\n this.end = simpleEnd;\n return;\n }\n this.lastNeed = 0;\n this.lastTotal = 0;\n this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n if (buf.length === 0) return '';\n var r;\n var i;\n if (this.lastNeed) {\n r = this.fillLast(buf);\n if (r === undefined) return '';\n i = this.lastNeed;\n this.lastNeed = 0;\n } else {\n i = 0;\n }\n if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n var j = buf.length - 1;\n if (j < i) return 0;\n var nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 1;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 2;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) {\n if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n }\n return nb;\n }\n return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n if ((buf[0] & 0xC0) !== 0x80) {\n self.lastNeed = 0;\n return '\\ufffd';\n }\n if (self.lastNeed > 1 && buf.length > 1) {\n if ((buf[1] & 0xC0) !== 0x80) {\n self.lastNeed = 1;\n return '\\ufffd';\n }\n if (self.lastNeed > 2 && buf.length > 2) {\n if ((buf[2] & 0xC0) !== 0x80) {\n self.lastNeed = 2;\n return '\\ufffd';\n }\n }\n }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n var p = this.lastTotal - this.lastNeed;\n var r = utf8CheckExtraBytes(this, buf, p);\n if (r !== undefined) return r;\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, p, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, p, 0, buf.length);\n this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n var total = utf8CheckIncomplete(this, buf, i);\n if (!this.lastNeed) return buf.toString('utf8', i);\n this.lastTotal = total;\n var end = buf.length - (total - this.lastNeed);\n buf.copy(this.lastChar, 0, end);\n return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + '\\ufffd';\n return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n if ((buf.length - i) % 2 === 0) {\n var r = buf.toString('utf16le', i);\n if (r) {\n var c = r.charCodeAt(r.length - 1);\n if (c >= 0xD800 && c <= 0xDBFF) {\n this.lastNeed = 2;\n this.lastTotal = 4;\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n return r.slice(0, -1);\n }\n }\n return r;\n }\n this.lastNeed = 1;\n this.lastTotal = 2;\n this.lastChar[0] = buf[buf.length - 1];\n return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) {\n var end = this.lastTotal - this.lastNeed;\n return r + this.lastChar.toString('utf16le', 0, end);\n }\n return r;\n}\n\nfunction base64Text(buf, i) {\n var n = (buf.length - i) % 3;\n if (n === 0) return buf.toString('base64', i);\n this.lastNeed = 3 - n;\n this.lastTotal = 3;\n if (n === 1) {\n this.lastChar[0] = buf[buf.length - 1];\n } else {\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n }\n return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n return buf && buf.length ? this.write(buf) : '';\n}", "// **MessageParserCore** is the push-based engine behind all message parsers.\n// It feeds text to the N3.js parser, which recognizes the message delimiters\n// through its `directives` option, and groups the resulting quads into messages.\nimport { EventEmitter } from 'events';\nimport { Parser, DataFactory } from 'n3';\nimport { resolveFormat, isMessagesVersion, baseVersion, isSupportedVersion } from './formats.js';\n\n/** @typedef {import('@rdfjs/types').Term} BaseTerm */\n/** @template {import('@rdfjs/types').BaseQuad} [Q=import('@rdfjs/types').Quad] */\nexport default class MessageParserCore {\n // `sink` receives `message(quads, index)`, `end(prefixes)`, `error(error)`\n // and optionally `quad(quad, messageIndex)`, `prefix(prefix, term)`, `version(label)`\n /**\n * @param {import('../common.js').MessageParserOptions<Q> | undefined} options\n * @param {import('./internal.js').ParserSink<Q>} sink\n */\n constructor(options, sink) {\n options = options || {};\n const format = resolveFormat(options.format);\n this._version = options.version ?? format.version;\n this._sink = sink;\n\n /** @type {import('../common.js').MessageQuadFactory<Q>} */\n this._factory = options.factory || /** @type {import('../common.js').MessageQuadFactory<Q>} */ (DataFactory);\n this._blankNodePrefix = typeof options.blankNodePrefix === 'string' ?\n options.blankNodePrefix.replace(/^_:/, '') : undefined;\n this._blankNodeCounter = 0;\n this._supportedVersions = Parser.SUPPORTED_VERSIONS;\n this._messages = options.messages === true || isMessagesVersion(this._version);\n this._index = 0;\n\n /** @type {Q[] | null} */\n this._current = null;\n\n /** @type {Map<string, import('@rdfjs/types').BlankNode> | null} */\n this._scope = null;\n this._seenQuad = false;\n this._failed = false;\n this._finished = false;\n\n /** @type {import('n3').ParserOptions} */\n const n3Options = {\n format: format.name,\n factory: /** @type {import('@rdfjs/types').DataFactory} */ (/** @type {unknown} */ (this._factory)),\n // Version labels are validated here, because N3.js does not know `-messages` labels\n parseUnsupportedVersions: true,\n // N3.js reports `MESSAGE` and `@message .` between statements through `onDirective`,\n // in order with the quads, and rejects them anywhere else\n directives: ['message'],\n };\n if (options.baseIRI)\n n3Options.baseIRI = options.baseIRI;\n if (this._version !== undefined) {\n this._checkVersion(this._version, true);\n n3Options.version = baseVersion(this._version);\n }\n\n this._input = new EventEmitter();\n this._lineMode = format.lineMode;\n // The line of the current token, and of the last delimiter\n this._line = 0;\n this._delimiterLine = 0;\n new Parser(n3Options).parse(this._input, {\n onQuad: (error, quad, prefixes) => this._onQuad(error, /** @type {Q | null} */ (quad), prefixes),\n onPrefix: (prefix, term) => this._failed || sink.prefix && sink.prefix(prefix, term),\n onVersion: label => this._failed || this._announce(label),\n onDirective: () => this._failed || this._delimiter(),\n onToken: token => this._onToken(token),\n });\n }\n\n // ### `write` accepts the next chunk of text\n /** @param {string} text */\n write(text) {\n if (!this._failed && !this._finished && text.length > 0)\n this._input.emit('data', text);\n }\n\n // ### `end` signals the end of the input\n end() {\n if (!this._failed && !this._finished)\n this._input.emit('end');\n }\n\n // Keeps track of lines; in N-Triples and N-Quads, a delimiter must be on its own line\n /** @param {{ line: number; type: string }} token */\n _onToken(token) {\n const line = token.line, delimiter = token.type === 'MESSAGE';\n if (this._lineMode && !this._failed &&\n (delimiter ? line === this._line : line === this._delimiterLine && token.type !== 'eof'))\n this._fail(new Error(`Unexpected \"MESSAGE\" on line ${line}.`));\n if (delimiter)\n this._delimiterLine = line;\n this._line = line;\n }\n\n /** @param {Error | null} error\n * @param {Q | null} quad\n * @param {Record<string, import('@rdfjs/types').NamedNode>} [prefixes] */\n _onQuad(error, quad, prefixes) {\n if (this._failed || this._finished)\n return;\n if (error)\n this._fail(error);\n else if (quad)\n this._addQuad(quad);\n else {\n this._finished = true;\n if (this._current !== null)\n this._emitMessage();\n this._sink.end(prefixes);\n }\n }\n\n /** @param {Q} quad */\n _addQuad(quad) {\n this._seenQuad = true;\n // Blank node labels are scoped to their message\n if (this._messages)\n quad = this._scopeQuad(quad);\n if (this._current === null)\n this._current = [];\n this._current.push(quad);\n if (this._sink.quad)\n this._sink.quad(quad, this._index);\n }\n\n /** @param {string} label */\n _announce(label) {\n // An externally supplied version takes precedence over in-line announcements.\n const version = this._version ?? label;\n const error = this._checkVersion(version);\n if (error)\n return this._fail(error);\n if (isMessagesVersion(version) && !this._messages) {\n if (this._seenQuad)\n return this._fail(new Error(`Version \"${label}\" must be announced before the first statement.`));\n this._messages = true;\n }\n if (this._sink.version)\n this._sink.version(label);\n }\n\n // Validates a version label, and returns an error for unsupported ones\n /** @param {string} label\n * @param {boolean} [throwing] */\n _checkVersion(label, throwing) {\n if (isSupportedVersion(baseVersion(label), this._supportedVersions))\n return null;\n const error = new Error(`Detected unsupported version: \"${label}\"`);\n if (throwing)\n throw error;\n return error;\n }\n\n _delimiter() {\n if (!this._messages) {\n return this._fail(new Error(`Unexpected \"MESSAGE\" on line ${this._line}: the document did not announce ` +\n 'a version with the \"-messages\" suffix.'));\n }\n this._emitMessage();\n }\n\n // Finalizes the current message, which is empty if no quad was seen\n _emitMessage() {\n const quads = this._current || [];\n this._current = null;\n this._scope = null;\n this._sink.message(quads, this._index++);\n }\n\n /** @param {Error} error */\n _fail(error) {\n this._failed = true;\n this._current = null;\n this._sink.error(error);\n }\n\n // ## Blank node scoping\n\n /** @param {Q} quad\n * @returns {Q} */\n _scopeQuad(quad) {\n const subject = this._scopeTerm(quad.subject);\n const predicate = this._scopeTerm(quad.predicate);\n const object = this._scopeTerm(quad.object);\n const graph = this._scopeTerm(quad.graph);\n return subject === quad.subject && predicate === quad.predicate &&\n object === quad.object && graph === quad.graph ?\n quad : this._factory.quad(subject, predicate, object, graph);\n }\n\n /** @template {BaseTerm} T\n * @param {T} term\n * @returns {T} */\n _scopeTerm(term) {\n if (term.termType === 'BlankNode') {\n const scope = this._scope || (this._scope = new Map());\n let scoped = scope.get(term.value);\n if (!scoped) {\n scoped = this._blankNodePrefix === undefined ? this._factory.blankNode() :\n this._factory.blankNode(`${this._blankNodePrefix}${this._blankNodeCounter++}`);\n scope.set(term.value, scoped);\n }\n return /** @type {T} */ (/** @type {unknown} */ (scoped));\n }\n return term.termType === 'Quad' ? /** @type {T} */ (/** @type {unknown} */ (\n this._scopeQuad(/** @type {Q} */ (/** @type {unknown} */ (term))))) : term;\n }\n}\n", "const RDF = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#',\n XSD = 'http://www.w3.org/2001/XMLSchema#',\n SWAP = 'http://www.w3.org/2000/10/swap/';\n\nexport default {\n xsd: {\n decimal: `${XSD}decimal`,\n boolean: `${XSD}boolean`,\n dateTime: `${XSD}dateTime`,\n double: `${XSD}double`,\n integer: `${XSD}integer`,\n string: `${XSD}string`,\n },\n rdf: {\n type: `${RDF}type`,\n nil: `${RDF}nil`,\n first: `${RDF}first`,\n rest: `${RDF}rest`,\n langString: `${RDF}langString`,\n dirLangString: `${RDF}dirLangString`,\n reifies: `${RDF}reifies`,\n },\n owl: {\n sameAs: 'http://www.w3.org/2002/07/owl#sameAs',\n },\n r: {\n forSome: `${SWAP}reify#forSome`,\n forAll: `${SWAP}reify#forAll`,\n },\n log: {\n implies: `${SWAP}log#implies`,\n isImpliedBy: `${SWAP}log#isImpliedBy`,\n },\n};\n", "// **N3Lexer** tokenizes N3 documents.\nimport namespaces from './IRIs';\n\nconst { xsd } = namespaces;\nconst SPACE = 0x20, TAB = 0x09, LF = 0x0A, CR = 0x0D, HASH = 0x23,\n DOT = 0x2E, COLON = 0x3A, ZERO = 0x30, NINE = 0x39,\n PERCENT = 0x25, BACKSLASH = 0x5C;\n\n// Whitespace as matched by `\\s`\nfunction isWhitespace(charCode) {\n return charCode === SPACE || charCode >= TAB && charCode <= CR ||\n charCode >= 0xA0 && (charCode === 0xA0 || charCode === 0x1680 ||\n charCode >= 0x2000 && charCode <= 0x200A || charCode === 0x2028 || charCode === 0x2029 ||\n charCode === 0x202F || charCode === 0x205F || charCode === 0x3000 || charCode === 0xFEFF);\n}\n// Characters that can directly follow a name: whitespace and punctuation\n// (the lookahead `[,;!\\^\\s#()\\[\\]\\{\\}\"'<>]` of the former regular expressions)\nconst asciiDelimiters = new Uint8Array(0x80);\nfor (const char of ',;!^#()[]{}\"\\'<> \\t\\n\\v\\f\\r')\n asciiDelimiters[char.charCodeAt(0)] = 1;\nfunction isDelimiter(charCode) {\n return charCode < 0x80 ? asciiDelimiters[charCode] === 1 : isWhitespace(charCode);\n}\n// Whether a name can end before the given position: it must be followed by\n// a delimiter, optionally after a dot. At the end of finished input, it can always end.\nfunction canEndName(input, pos, inputFinished) {\n let charCode = input.charCodeAt(pos);\n if (charCode === DOT)\n charCode = input.charCodeAt(++pos);\n if (pos >= input.length)\n return inputFinished;\n return isDelimiter(charCode);\n}\n\n// Fixed escape sequences allowed in string literals (ECHAR)\nconst stringEscapeReplacements = {\n '\\\\': '\\\\', \"'\": \"'\", '\"': '\"',\n 'n': '\\n', 'r': '\\r', 't': '\\t', 'f': '\\f', 'b': '\\b',\n};\n// Fixed escape sequences allowed in local names of prefixed names (PN_LOCAL_ESC)\nconst localNameEscapeReplacements = {\n '_': '_', '~': '~', '.': '.', '-': '-', '!': '!', '$': '$', '&': '&',\n \"'\": \"'\", '(': '(', ')': ')', '*': '*', '+': '+', ',': ',', ';': ';',\n '=': '=', '/': '/', '?': '?', '#': '#', '@': '@', '%': '%',\n};\nconst illegalIriChars = /[\\x00-\\x20<>\\\\\"\\{\\}\\|\\^\\`]/;\n\n// Character classes of names, as bit flags for ASCII characters\nconst PREFIX_START = 1, // PN_CHARS_BASE\n LOCAL_START = 2, // PN_CHARS_U, digits, and colon\n NAME_CHAR = 4, // PN_CHARS\n LOCAL_CHAR = 8, // PN_CHARS and colon\n LOCAL_ESCAPE = 16; // characters that can be escaped in local names (PN_LOCAL_ESC)\nconst asciiNameClasses = new Uint8Array(0x80);\nfor (let charCode = 0; charCode < 0x80; charCode++) {\n const char = String.fromCharCode(charCode);\n const letter = char >= 'A' && char <= 'Z' || char >= 'a' && char <= 'z';\n const nameChar = letter || char === '_' || char === '-' || char >= '0' && char <= '9';\n asciiNameClasses[charCode] =\n (letter ? PREFIX_START : 0) |\n (nameChar && char !== '-' || char === ':' ? LOCAL_START : 0) |\n (nameChar ? NAME_CHAR : 0) |\n (nameChar || char === ':' ? LOCAL_CHAR : 0) |\n (char in localNameEscapeReplacements ? LOCAL_ESCAPE : 0);\n}\n// Returns the length (0, 1, or 2 code units) of the character at the given position\n// if it is in the given name character class\nfunction nameCharLength(input, pos, charClass) {\n const charCode = input.charCodeAt(pos);\n if (charCode < 0x80)\n return (asciiNameClasses[charCode] & charClass) !== 0 ? 1 : 0;\n // Characters from U+10000 to U+EFFFF consist of a surrogate pair\n if (charCode >= 0xD800 && charCode <= 0xDB7F) {\n const low = input.charCodeAt(pos + 1);\n return low >= 0xDC00 && low <= 0xDFFF ? 2 : 0;\n }\n // PN_CHARS has some characters that PN_CHARS_BASE does not\n if (charClass >= NAME_CHAR && (charCode === 0xB7 || charCode >= 0x300 && charCode <= 0x36F ||\n charCode === 0x203F || charCode === 0x2040))\n return 1;\n // PN_CHARS_BASE\n return charCode >= 0xC0 && charCode <= 0x1FFF && charCode !== 0xD7 && charCode !== 0xF7 &&\n (charCode < 0x300 || charCode >= 0x370 && charCode !== 0x37E) ||\n charCode >= 0x200C && charCode <= 0x200D || charCode >= 0x2070 && charCode <= 0x218F ||\n charCode >= 0x2C00 && charCode <= 0x2FEF || charCode >= 0x3001 && charCode <= 0xD7FF ||\n charCode >= 0xF900 && charCode <= 0xFDCF || charCode >= 0xFDF0 && charCode <= 0xFFFD ? 1 : 0;\n}\nfunction isLocalEscape(charCode) {\n return charCode < 0x80 && (asciiNameClasses[charCode] & LOCAL_ESCAPE) !== 0;\n}\nfunction isHexDigit(charCode) {\n return charCode >= ZERO && charCode <= NINE ||\n charCode >= 0x41 && charCode <= 0x46 || charCode >= 0x61 && charCode <= 0x66;\n}\n// Returns the end of the prefix (PN_PREFIX) at the given position,\n// which can contain single dots, but not start or end with one\nfunction skipPrefix(input, pos) {\n let length = nameCharLength(input, pos, PREFIX_START);\n while (length !== 0) {\n pos += length;\n const next = input.charCodeAt(pos) === DOT ? pos + 1 : pos;\n // Most names are ASCII, so look those up without a call\n const charCode = input.charCodeAt(next);\n length = charCode < 0x80 ? (asciiNameClasses[charCode] & NAME_CHAR) !== 0 ? 1 : 0 :\n nameCharLength(input, next, NAME_CHAR);\n if (length !== 0)\n pos = next;\n }\n return pos;\n}\n// Returns the end of the local name (PN_LOCAL) at the given position,\n// which can contain dots, but not start or end with one\nfunction skipLocalName(input, pos) {\n let end = pos, charClass = LOCAL_START;\n while (true) {\n // Most names are ASCII, so look those up without a call\n const charCode = input.charCodeAt(pos);\n let length = charCode < 0x80 ? (asciiNameClasses[charCode] & charClass) !== 0 ? 1 : 0 :\n nameCharLength(input, pos, charClass);\n // Percent-encoded character (PERCENT)\n if (length === 0 && charCode === PERCENT &&\n isHexDigit(input.charCodeAt(pos + 1)) && isHexDigit(input.charCodeAt(pos + 2)))\n length = 3;\n // Escaped character (PN_LOCAL_ESC)\n else if (length === 0 && charCode === BACKSLASH && isLocalEscape(input.charCodeAt(pos + 1)))\n length = 2;\n if (length !== 0) {\n end = pos += length;\n charClass = LOCAL_CHAR;\n }\n // Dots are allowed after the first character, but not at the end\n else if (charCode === DOT && charClass === LOCAL_CHAR)\n pos++;\n else\n return end;\n }\n}\n// Returns the end of the prefixed name at the given position, or -1 if there is none\nfunction skipPrefixedName(input, pos, inputFinished) {\n const colon = skipPrefix(input, pos);\n if (input.charCodeAt(colon) !== COLON)\n return -1;\n const end = skipLocalName(input, colon + 1);\n return canEndName(input, end, inputFinished) ? end : -1;\n}\n\n// A valid code point is a Unicode scalar value: at most U+10FFFF and not a surrogate\nfunction isValidCodePoint(charCode) {\n return charCode <= 0x10FFFF && (charCode < 0xD800 || charCode > 0xDFFF);\n}\n\nconst lineModeRegExps = {\n _iri: true,\n _unescapedIri: true,\n _simpleQuotedString: true,\n _langcode: true,\n _blank: true,\n _commentLine: true,\n _whitespace: true,\n};\nconst invalidRegExp = /$0^/;\nconst nonWhitespace = /\\S*/y;\n\n// Matches a sticky regular expression at the given position of the input\nfunction execAt(regExp, input, pos) {\n regExp.lastIndex = pos;\n return regExp.exec(input);\n}\nfunction testAt(regExp, input, pos) {\n regExp.lastIndex = pos;\n return regExp.test(input);\n}\n// Matches the rest of the input followed by a space, as at the end of the input,\n// a token that can contain (but not end with) a dot needs a non-dot character after it\nfunction execAtEnd(regExp, input, pos) {\n regExp.lastIndex = 0;\n return regExp.exec(`${input.slice(pos)} `);\n}\n\n// Whitespace or the start of a comment\nfunction isSeparatorCode(code) {\n return code === SPACE || code === TAB || code === LF || code === CR || code === HASH;\n}\n\n// Words with a fixed meaning in the grammar, which cannot name an additional directive\nconst reservedWords = /^(?:prefix|base|version|graph|forsome|forall|iri|a|true|false|has|is|of|id)$/i;\n\n// Unfinished input in a stream up to this length is tokenized again with every chunk\nconst MIN_RESCAN_LENGTH = 1024;\n\n// ## Constructor\nexport default class N3Lexer {\n constructor(options) {\n // ## Regular expressions\n // It's slightly faster to have these as properties than as in-scope variables.\n // They are sticky, so they only match at the `lastIndex` set by `execAt`.\n this._iri = /<((?:[^ <>{}\\\\]|\\\\[uU])+)>[ \\t]*/y; // IRI with escape sequences; needs sanity check after unescaping\n this._unescapedIri = /<([^\\x00-\\x20<>\\\\\"\\{\\}\\|\\^\\`]*)>[ \\t]*/y; // IRI without escape sequences; no unescaping\n this._simpleQuotedString = /\"([^\"\\\\\\r\\n]*)\"(?=[^\"])/y; // string without escape sequences\n this._simpleApostropheString = /'([^'\\\\\\r\\n]*)'(?=[^'])/y;\n this._langcode = /@([a-z]+(?:-[a-z0-9]+)*)(?=[^a-z0-9])/iy;\n this._variable = /\\?(?:(?:[A-Z_a-z\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02ff\\u0370-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff])(?:[\\-0-9:A-Z_a-z\\xb7\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u203f\\u2040\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff])*)(?=[.,;!\\^\\s#()\\[\\]\\{\\}\"'<>])/y;\n this._blank = /_:((?:[0-9A-Z_a-z\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02ff\\u0370-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff])(?:\\.?[\\-0-9A-Z_a-z\\xb7\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u203f\\u2040\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff])*)(?:[ \\t]+|(?=\\.?[,;:!\\^\\s#()\\[\\]\\{\\}\"'<>]))/y;\n this._number = /[\\-+]?(?:(\\d+\\.\\d*|\\.?\\d+)[eE][\\-+]?\\d+|(?=\\.?\\d)\\d*(?:(\\.)\\d+)?)(?=\\.?[,;:!\\^\\s#()\\[\\]\\{\\}\"'<>])/y;\n this._boolean = /(?:true|false)(?=[.,;!\\^\\s#()\\[\\]\\{\\}\"'<>])/y;\n this._atKeyword = /@[a-z]+(?=[\\s#<:\"'.])/iy;\n this._keyword = /(?:PREFIX|BASE|VERSION|GRAPH)(?=[\\s#<\"'])/iy;\n this._n3Verb = /(?:has|is|of)(?=[\\s#()\\[\\]\\{\\}\"'<>?_+\\-0-9])/y;\n this._n3Id = /id(?=[\\s#<])/y;\n this._shortPredicates = /a(?=[\\s#()\\[\\]\\{\\}\"'<>])/y;\n this._commentLine = /[ \\t]*#([^\\n\\r]*)(?:\\r\\n|\\n|\\r)([ \\t]*)/y;\n this._whitespace = /[ \\t]+/y;\n options = options || {};\n\n // Whether the log:isImpliedBy predicate is supported\n this._isImpliedBy = options.isImpliedBy;\n\n // In line mode (N-Triples or N-Quads), only simple features may be parsed\n if (this._lineMode = !!options.lineMode) {\n this._n3Mode = false;\n // Don't tokenize special literals\n for (const key in this) {\n if (!(key in lineModeRegExps) && this[key] instanceof RegExp)\n this[key] = invalidRegExp;\n }\n // The only keyword in N-Triples and N-Quads is VERSION, which is case-sensitive\n this._keyword = /VERSION(?=[\\s#<\"])/y;\n }\n // When not in line mode, enable N3 functionality by default\n else {\n this._n3Mode = options.n3 !== false;\n }\n // Recognize additional directive keywords, such as MESSAGE\n // (the @-form of a directive is always tokenized as an @-keyword)\n this._directive = null;\n if (options.directives && options.directives.length !== 0) {\n for (const name of options.directives) {\n if (!/^[a-z]+$/i.test(name) || reservedWords.test(name))\n throw new Error(`Invalid directive name: \"${name}\"`);\n }\n this._directive = new RegExp(`(?:${options.directives.join('|')})(?=[\\\\s#<])`, 'iy');\n this._directiveMaxLength = Math.max(...options.directives.map(name => name.length));\n // The first characters of directive names, so other words skip the regular expression\n this._directiveStarts = options.directives.map(name => name[0].toLowerCase() + name[0].toUpperCase()).join('');\n }\n // Don't output comment tokens by default\n this.comments = !!options.comments;\n // Cache the last tested closing position of long literals\n this._literalClosingPos = 0;\n }\n\n // ## Private methods\n\n // ### `_tokenizeToEnd` tokenizes as for as possible, emitting tokens through the callback\n _tokenizeToEnd(callback, inputFinished) {\n // Continue parsing as far as possible; the loop will return eventually.\n // Rather than slicing off every token, track the position of the remaining input;\n // the regular expressions are sticky, so they match at that position.\n const input = this._input;\n let pos = 0;\n let currentLineLength = this._linePosition + input.length;\n while (true) {\n // Consume one separator line at a time, including its following indentation.\n while (true) {\n let charCode = input.charCodeAt(pos), separatorLength = 0;\n if (charCode === SPACE || charCode === TAB) {\n const next = input.charCodeAt(pos + 1);\n separatorLength = next === SPACE || next === TAB ?\n execAt(this._whitespace, input, pos)[0].length : 1;\n charCode = input.charCodeAt(pos + separatorLength);\n }\n if (charCode === HASH) {\n const comment = execAt(this._commentLine, input, pos);\n if (comment) {\n const commentLength = comment[0].length;\n // Keep a trailing CR buffered in case the next chunk starts with LF.\n if (!inputFinished && pos + commentLength === input.length &&\n input.charCodeAt(input.length - 1) === CR)\n return this._suspend(input, pos, currentLineLength);\n if (this.comments)\n emitComment(comment[1], this._line, currentLineLength - (input.length - pos) + separatorLength);\n pos += commentLength;\n currentLineLength = input.length - pos + comment[2].length;\n this._line++;\n }\n else {\n // A comment without a line ending stays buffered until EOF.\n pos += separatorLength;\n if (!inputFinished)\n return this._suspend(input, pos, currentLineLength);\n if (this.comments)\n emitComment(input.slice(pos + 1), this._line, currentLineLength - (input.length - pos));\n pos = input.length;\n break;\n }\n }\n else if (charCode === LF || charCode === CR) {\n // A CR at the end of a chunk may still be followed by LF.\n if (!inputFinished && charCode === CR && pos + separatorLength + 1 === input.length)\n return this._suspend(input, pos, currentLineLength);\n separatorLength += charCode === CR && input.charCodeAt(pos + separatorLength + 1) === LF ? 2 : 1;\n // Indentation is consumed with the newline, but belongs to the next line's columns.\n let indentationLength = 0;\n const next = input.charCodeAt(pos + separatorLength);\n if (next === SPACE || next === TAB) {\n const following = input.charCodeAt(pos + separatorLength + 1);\n indentationLength = following === SPACE || following === TAB ?\n execAt(this._whitespace, input, pos + separatorLength)[0].length : 1;\n }\n pos += separatorLength + indentationLength;\n currentLineLength = input.length - pos + indentationLength;\n this._line++;\n }\n else {\n pos += separatorLength;\n break;\n }\n }\n if (pos >= input.length) {\n // A datatype marker needs a type\n if (inputFinished && this._previousMarker === '^^')\n return reportSyntaxError(this, input, pos);\n this._linePosition = currentLineLength;\n if (inputFinished) {\n emitToken('eof', '', '', this._line, currentLineLength, 0);\n return this._input = null;\n }\n return this._input = '';\n }\n\n // Look for specific token types based on the first character\n const line = this._line, firstChar = input[pos];\n let type = '', value = '', prefix = '',\n match = null, matchLength = 0, lexicalLength = 0,\n finalLineLength = 0, inconclusive = false, tripleQuoted = false;\n switch (firstChar) {\n case '^':\n // A datatype marker separated from its type cannot be followed by another marker\n if (this._previousMarker === '^^')\n return reportSyntaxError(this, input, pos);\n // We need at least 3 tokens lookahead to distinguish ^^<IRI> and ^^pre:fixed\n if (input.length - pos < 3)\n break;\n // Try to match a type\n else if (input[pos + 1] === '^') {\n this._previousMarker = '^^';\n // Move to type IRI or prefixed name\n pos += 2;\n if (input[pos] !== '<') {\n // Whitespace and comments may separate the marker from the type\n if (isSeparatorCode(input.charCodeAt(pos)))\n continue; // eslint-disable-line no-continue\n inconclusive = true;\n break;\n }\n }\n // If no type, it must be a path expression\n else {\n if (this._n3Mode) {\n matchLength = 1;\n type = '^';\n }\n break;\n }\n // Fall through in case the type is an IRI\n case '<':\n // Try to find a full IRI without escape sequences\n if (match = execAt(this._unescapedIri, input, pos)) {\n type = 'IRI', value = match[1];\n lexicalLength = match[1].length + 2;\n }\n // Try to find a full IRI with escape sequences\n else if (match = execAt(this._iri, input, pos)) {\n value = this._unescape(match[1], stringEscapeReplacements);\n if (value === null || illegalIriChars.test(value))\n return reportSyntaxError(this, input, pos);\n type = 'IRI';\n lexicalLength = match[1].length + 2;\n }\n // Try to find a triple term\n else if (input.length - pos > 2 && input[pos + 1] === '<' && input[pos + 2] === '(')\n type = '<<(', matchLength = 3;\n // Try to find a reified triple\n else if (!this._lineMode && input.length - pos > (inputFinished ? 1 : 2) && input[pos + 1] === '<')\n type = '<<', matchLength = 2;\n // Try to find a backwards implication arrow\n else if (this._n3Mode && input.length - pos > 1 && input[pos + 1] === '=') {\n matchLength = 2;\n if (this._isImpliedBy) type = 'abbreviation', value = '<';\n else type = 'inverse', value = '>';\n }\n // Try to find an inverted predicate marker\n else if (this._n3Mode && input.length - pos > 1 && input[pos + 1] === '-')\n type = 'inversePredicate', matchLength = 2;\n break;\n\n case '>':\n // Try to find a reified triple\n if (input.length - pos > 1 && input[pos + 1] === '>')\n type = '>>', matchLength = 2;\n break;\n\n case '_':\n // Try to find a blank node. Since it can contain (but not end with) a dot,\n // we always need a non-dot character before deciding it is a blank node.\n // Therefore, try inserting a space if we're at the end of the input.\n if ((match = execAt(this._blank, input, pos)) ||\n inputFinished && (match = execAtEnd(this._blank, input, pos))) {\n type = 'blank', prefix = '_', value = match[1];\n lexicalLength = match[1].length + 2;\n }\n break;\n\n case '\"':\n // Try to find a literal without escape sequences\n if (match = execAt(this._simpleQuotedString, input, pos))\n value = match[1];\n // Try to find a literal wrapped in three pairs of quotes\n else {\n ({ value, matchLength, finalLineLength, tripleQuoted } = this._parseLiteral(input, pos));\n if (value === null)\n return reportSyntaxError(this, input, pos);\n }\n if (match !== null || matchLength !== 0) {\n type = 'literal';\n this._literalClosingPos = 0;\n }\n break;\n\n case \"'\":\n if (!this._lineMode) {\n // Try to find a literal without escape sequences\n if (match = execAt(this._simpleApostropheString, input, pos))\n value = match[1];\n // Try to find a literal wrapped in three pairs of quotes\n else {\n ({ value, matchLength, finalLineLength, tripleQuoted } = this._parseLiteral(input, pos));\n if (value === null)\n return reportSyntaxError(this, input, pos);\n }\n if (match !== null || matchLength !== 0) {\n type = 'literal';\n this._literalClosingPos = 0;\n }\n }\n break;\n\n case '?':\n // Try to find a variable\n if (this._n3Mode && (match = execAt(this._variable, input, pos)))\n type = 'var', value = match[0];\n break;\n\n case '@':\n // Try to find a language code. A language code can contain dash-separated\n // subtags, so if the match is immediately followed by a single dash and the\n // input is not finished, another subtag may still arrive in a later chunk and\n // the match would be premature; wait for more input in that case.\n // A double dash starts a direction code, which cannot extend the language code.\n if (this._previousMarker === 'literal' && (match = execAt(this._langcode, input, pos)) && match[1] !== 'version') {\n const end = pos + match[0].length;\n if (!inputFinished && input[end] === '-' && input[end + 1] !== '-')\n match = null;\n else\n type = 'langcode', value = match[1];\n }\n // Try to find a keyword\n else if (match = execAt(this._atKeyword, input, pos))\n type = match[0];\n break;\n\n case '.':\n // Try to find a dot as punctuation\n if (input.length - pos === 1 ? inputFinished : (input[pos + 1] < '0' || input[pos + 1] > '9')) {\n type = '.';\n matchLength = 1;\n break;\n }\n // Fall through to numerical case (could be a decimal dot)\n\n case '0':\n case '1':\n case '2':\n case '3':\n case '4':\n case '5':\n case '6':\n case '7':\n case '8':\n case '9':\n case '+':\n case '-':\n if (input[pos + 1] === '-') {\n // Try to find a direction code\n if (this._previousMarker === 'langcode') {\n if (input.startsWith('--ltr', pos))\n type = 'dircode', value = 'ltr', matchLength = 5;\n else if (input.startsWith('--rtl', pos))\n type = 'dircode', value = 'rtl', matchLength = 5;\n }\n break;\n }\n\n // Try to find a number. Since it can contain (but not end with) a dot,\n // we always need a non-dot character before deciding it is a number.\n // Therefore, try inserting a space if we're at the end of the input.\n if (match = execAt(this._number, input, pos) ||\n inputFinished && (match = execAtEnd(this._number, input, pos))) {\n type = 'literal', value = match[0];\n prefix = (typeof match[1] === 'string' ? xsd.double :\n (typeof match[2] === 'string' ? xsd.decimal : xsd.integer));\n }\n break;\n\n case 'B':\n case 'b':\n case 'p':\n case 'P':\n case 'G':\n case 'g':\n case 'V':\n case 'v':\n // Try to find a SPARQL-style keyword\n if (match = execAt(this._keyword, input, pos))\n type = match[0].toUpperCase();\n else\n inconclusive = true;\n break;\n\n case 'f':\n case 't':\n // Try to match a boolean\n if (testAt(this._boolean, input, pos))\n type = 'literal', value = firstChar === 't' ? 'true' : 'false', prefix = xsd.boolean, matchLength = value.length;\n else\n inconclusive = true;\n break;\n\n case 'a':\n // Try to find an abbreviated predicate\n if (testAt(this._shortPredicates, input, pos))\n type = 'abbreviation', value = 'a', matchLength = 1;\n else\n inconclusive = true;\n break;\n\n case 'h':\n case 'o':\n // Try to find an N3 verb keyword\n if (this._n3Mode && (match = this._matchN3Verb(input, pos, inputFinished)))\n type = match[0];\n else\n inconclusive = true;\n break;\n\n case 'i':\n // Try to find an IRI property list identifier or N3 verb keyword\n if (this._n3Mode && testAt(this._n3Id, input, pos))\n type = 'id', matchLength = 2;\n else if (this._n3Mode && (match = this._matchN3Verb(input, pos, inputFinished)))\n type = match[0];\n else\n inconclusive = true;\n break;\n\n case '=':\n // Try to find an implication arrow or equals sign\n if (this._n3Mode && input.length - pos > 1) {\n type = 'abbreviation';\n if (input[pos + 1] !== '>')\n matchLength = 1, value = '=';\n else\n matchLength = 2, value = '>';\n }\n break;\n\n case '!':\n if (!this._n3Mode)\n break;\n case ')':\n if (!inputFinished && (input.length - pos === 1 || (input.length - pos === 2 && input[pos + 1] === '>'))) {\n // Don't consume yet, as it *could* become a triple term end.\n break;\n }\n // Try to find a triple term\n if (input.length - pos > 2 && input[pos + 1] === '>' && input[pos + 2] === '>') {\n type = ')>>', matchLength = 3;\n break;\n }\n case ',':\n case ';':\n case '[':\n case ']':\n case '(':\n case '}':\n case '~':\n if (!this._lineMode) {\n matchLength = 1;\n type = firstChar;\n }\n break;\n case '{':\n // We need at least 2 tokens lookahead to distinguish \"{|\" and \"{ \"\n if (!this._lineMode && input.length - pos >= 2) {\n // Try to find a quoted triple annotation start\n if (input[pos + 1] === '|')\n type = '{|', matchLength = 2;\n else\n type = firstChar, matchLength = 1;\n }\n break;\n case '|':\n // We need 2 tokens lookahead to parse \"|}\"\n // Try to find a quoted triple annotation end\n if (input.length - pos >= 2 && input[pos + 1] === '}')\n type = '|}', matchLength = 2;\n break;\n\n default:\n inconclusive = true;\n }\n\n // Some first characters do not allow an immediate decision, so inspect more\n if (inconclusive) {\n // Try to find a prefix\n let end;\n if ((this._previousMarker === '@prefix' || this._previousMarker === 'PREFIX') &&\n input.charCodeAt(end = skipPrefix(input, pos)) === COLON &&\n end + 1 < input.length && (input[end + 1] === '#' || input[end + 1] === '<' ||\n isWhitespace(input.charCodeAt(end + 1)))) {\n type = 'prefix', value = input.slice(pos, end);\n matchLength = end + 1 - pos;\n }\n // Try to find an additional directive keyword\n // (at the end of the input, only a short final word can be one)\n else if (this._directive !== null && this._directiveStarts.includes(firstChar) &&\n ((match = execAt(this._directive, input, pos)) ||\n inputFinished && input.length - pos <= this._directiveMaxLength &&\n (match = execAtEnd(this._directive, input, pos))))\n type = match[0].toUpperCase();\n // Try to find a prefixed name. Since it can contain (but not end with) a dot,\n // we always need a non-dot character before deciding it is a prefixed name,\n // except at the end of the input.\n else if (!this._lineMode && (end = skipPrefixedName(input, pos, inputFinished)) >= 0) {\n const colon = input.indexOf(':', pos);\n type = 'prefixed', prefix = input.slice(pos, colon);\n value = this._unescape(input.slice(colon + 1, end), localNameEscapeReplacements);\n matchLength = end - pos;\n }\n }\n\n // A type token is special: it can only be emitted after an IRI or prefixed name is read\n if (this._previousMarker === '^^') {\n switch (type) {\n case 'prefixed': type = 'type'; break;\n case 'IRI': type = 'typeIRI'; break;\n default: type = '';\n }\n }\n\n // What if nothing of the above was found?\n if (!type) {\n // We could be in streaming mode, and then we just wait for more input to arrive.\n // Otherwise, a syntax error has occurred in the input.\n // One exception: error on an unaccounted linebreak (= not inside a triple-quoted literal).\n if (inputFinished || (!input.startsWith(\"'''\", pos) && !input.startsWith('\"\"\"', pos) &&\n /\\n|\\r/.test(input.slice(pos))))\n return reportSyntaxError(this, input, pos);\n else\n return this._suspend(input, pos, currentLineLength);\n }\n\n // Emit the parsed token\n // Consumption includes separator whitespace; lexicalLength excludes it\n // and any synthetic EOF space. Consumption is clamped to the input below.\n const length = matchLength || match[0].length;\n const start = currentLineLength - (input.length - pos);\n let token;\n if (finalLineLength) {\n token = {\n type, value, prefix, line, start,\n end: finalLineLength, endLine: this._line, tripleQuoted,\n };\n callback(null, token);\n }\n // Triple-quoted strings are marked, since version declarations do not allow them\n else if (tripleQuoted) {\n token = { type, value, prefix, line, start, end: start + length, tripleQuoted };\n callback(null, token);\n }\n else\n token = emitToken(type, value, prefix, line, start, lexicalLength || length);\n this.previousToken = token;\n // The string of a version declaration cannot take a language tag, so a following @keyword is a keyword\n this._previousMarker = type === 'literal' && (this._previousMarker === 'VERSION' || this._previousMarker === '@version') ? 'version' : type;\n\n // Advance to next part to tokenize\n pos = Math.min(pos + length, input.length);\n if (finalLineLength)\n currentLineLength = input.length - pos + finalLineLength;\n }\n\n // Emits a comment at its exact position within matched whitespace.\n function emitComment(value, line, start) {\n callback(null, {\n type: 'comment', value, prefix: '', line,\n start, end: start + value.length + 1,\n });\n }\n // Emits the token through the callback\n function emitToken(type, value, prefix, line, start, length) {\n const token = { type, value, prefix, line, start, end: start + length };\n callback(null, token);\n return token;\n }\n // Signals the syntax error through the callback\n function reportSyntaxError(self, input, pos) {\n callback(self._syntaxError(execAt(nonWhitespace, input, pos)[0]));\n }\n }\n\n // ### `_suspend` keeps the unconsumed input until more input arrives\n _suspend(input, pos, currentLineLength) {\n this._linePosition = currentLineLength - (input.length - pos);\n return this._input = input.slice(pos);\n }\n\n // ### `_matchN3Verb` matches an N3 verb unless the input is a longer prefixed name\n _matchN3Verb(input, pos, inputFinished) {\n const verb = execAt(this._n3Verb, input, pos);\n if (!verb)\n return null;\n\n // Most verb boundaries cannot be part of a prefix, so keep the common path fast.\n // U+1680 and U+FEFF are whitespace to the regular expression but name characters.\n const next = input[pos + verb[0].length];\n if (next !== '-' && next !== '_' && (next < '0' || next > '9') &&\n next !== '\\u1680' && next !== '\\ufeff')\n return verb;\n\n // A prefix can start with a verb and continue with characters that are also\n // valid verb boundaries. Prefer the longer prefixed name when it is complete.\n if (skipPrefixedName(input, pos, true) >= 0)\n return null;\n\n // If a stream chunk ends partway through such a prefix,\n // wait for the colon instead of prematurely emitting the verb.\n if (!inputFinished && skipPrefix(input, pos) === input.length)\n return null;\n return verb;\n }\n\n // ### `_unescape` replaces N3 escape codes by their corresponding characters,\n // allowing only the fixed escape sequences from the given replacement table\n _unescape(item, replacements) {\n let backslash = item.indexOf('\\\\');\n if (backslash < 0)\n return item;\n\n let result = '', start = 0;\n // A trailing lone backslash is not an escape sequence.\n while (backslash >= 0 && backslash + 1 < item.length) {\n const escapedChar = item[backslash + 1];\n let end = backslash + 2, replacement;\n if (escapedChar === 'u' || escapedChar === 'U') {\n end += escapedChar === 'u' ? 4 : 8;\n if (end > item.length)\n return null;\n\n let charCode = 0;\n for (let i = backslash + 2; i < end; i++) {\n let digit = item.charCodeAt(i);\n if (digit >= 0x30 && digit <= 0x39) // 0\u20139\n digit -= 0x30;\n else if (digit >= 0x41 && digit <= 0x46) // A\u2013F\n digit -= 0x41 - 10;\n else if (digit >= 0x61 && digit <= 0x66) // a\u2013f\n digit -= 0x61 - 10;\n else\n return null;\n // Eight digits can exceed a signed 32-bit integer; avoid bitwise shifts.\n charCode = charCode * 16 + digit;\n }\n if (!isValidCodePoint(charCode))\n return null;\n replacement = String.fromCodePoint(charCode);\n }\n else {\n if (!(escapedChar in replacements))\n return null;\n replacement = replacements[escapedChar];\n }\n result += item.slice(start, backslash) + replacement;\n start = end;\n backslash = item.indexOf('\\\\', start);\n }\n return result + item.slice(start);\n }\n\n // ### `_parseLiteral` parses a literal at the given position into an unescaped value\n _parseLiteral(input, pos) {\n // Ensure we have enough lookahead to identify triple-quoted strings\n if (input.length - pos >= 3) {\n // The caller has already identified a single or double quote.\n const quote = input[pos];\n const openingLength = input[pos + 1] === quote && input[pos + 2] === quote ? 3 : 1;\n let opening = quote;\n if (openingLength === 3)\n opening = quote === '\"' ? '\"\"\"' : \"'''\";\n\n // Find the next candidate closing quotes\n let closingPos = pos + Math.max(this._literalClosingPos, openingLength);\n while ((closingPos = input.indexOf(opening, closingPos)) > pos) {\n // Count backslashes right before the closing quotes\n let backslashCount = 0;\n while (input[closingPos - backslashCount - 1] === '\\\\')\n backslashCount++;\n\n // An even number of backslashes (in particular 0)\n // means these are actual, non-escaped closing quotes\n if (backslashCount % 2 === 0) {\n // Extract and unescape the value\n const raw = input.substring(pos + openingLength, closingPos),\n lines = raw.split(/\\r\\n|\\r|\\n/),\n lineCount = lines.length - 1;\n const matchLength = closingPos - pos + openingLength;\n // Only triple-quoted strings can be multi-line\n if (openingLength === 1 && lineCount !== 0 ||\n openingLength === 3 && this._lineMode)\n break;\n this._line += lineCount;\n const finalLineLength = lineCount === 0 ? 0 : lines[lines.length - 1].length + openingLength;\n return {\n value: this._unescape(raw, stringEscapeReplacements), matchLength, finalLineLength,\n tripleQuoted: openingLength === 3,\n };\n }\n closingPos++;\n }\n this._literalClosingPos = input.length - pos - openingLength + 1;\n }\n return { value: '', matchLength: 0, finalLineLength: 0, tripleQuoted: false };\n }\n\n // ### `_tryTokenizeToEnd` tokenizes as far as possible, reporting failures through the callback\n _tryTokenizeToEnd(callback, inputFinished) {\n // Keep track of errors thrown by the callback, which must reach the caller unchanged\n let callbackError;\n try {\n this._tokenizeToEnd((error, token) => {\n try {\n return callback(error, token);\n }\n catch (thrown) {\n throw (callbackError = thrown);\n }\n }, inputFinished);\n }\n catch (error) {\n // Matching an extremely long token can exhaust the regular expression stack\n if (error === callbackError || !(error instanceof RangeError))\n throw error;\n callback(this._syntaxError(null, `Token too long on line ${this._line}.`));\n }\n }\n\n // ### `_syntaxError` creates a syntax error for the given issue\n _syntaxError(issue, message = `Unexpected \"${issue}\" on line ${this._line}.`) {\n this._input = null;\n const err = new Error(message);\n err.context = {\n token: undefined,\n line: this._line,\n previousToken: this.previousToken,\n };\n return err;\n }\n\n // ### `_startTokenization` resets the lexer state for a new input\n _startTokenization() {\n this._line = 1;\n this._linePosition = 0;\n this._previousMarker = undefined;\n this.previousToken = undefined;\n this._literalClosingPos = 0;\n this._input = undefined;\n // Deferred tokenization and stream events can outlive their invocation.\n // Ignore them once a later call takes ownership of the lexer state.\n return this._tokenization = {};\n }\n\n // ### `_tokenizeString` synchronously emits the tokens of a complete string through the callback,\n // so that the caller can consume each token without the lexer collecting them all first\n _tokenizeString(input, callback) {\n this._startTokenization();\n this._input = this._readStartingBom(input);\n this._tryTokenizeToEnd(callback, true);\n }\n\n // ### Strips off any starting UTF BOM mark.\n _readStartingBom(input) {\n if (input.startsWith('\\ufeff')) {\n this._linePosition = 1;\n return input.slice(1);\n }\n return input;\n }\n\n // ## Public methods\n\n // ### `tokenize` starts the transformation of an N3 document into an array of tokens.\n // The input can be a string or a stream.\n // Token ranges use one-based lines and zero-based, end-exclusive UTF-16 columns.\n // Separator whitespace counts towards the next token's start, outside either range.\n // Multiline tokens also have endLine; their end column is relative to that line.\n tokenize(input, callback) {\n const tokenization = this._startTokenization();\n\n // If the input is a string, continuously emit tokens through the callback until the end\n if (typeof input === 'string') {\n this._input = this._readStartingBom(input);\n // If a callback was passed, asynchronously call it\n if (typeof callback === 'function')\n queueMicrotask(() => {\n if (this._tokenization === tokenization)\n this._tryTokenizeToEnd(callback, true);\n });\n // If no callback was passed, tokenize synchronously and return\n else {\n const tokens = [];\n let error;\n this._tryTokenizeToEnd((e, t) => e ? (error = e) : tokens.push(t), true);\n if (error) throw error;\n return tokens;\n }\n }\n // Otherwise, the input must be a stream\n else {\n let decoder, retryLength = 0;\n if (typeof input.setEncoding === 'function')\n input.setEncoding('utf8');\n // Adds the data chunk to the buffer and parses as far as possible\n input.on('data', data => {\n if (this._tokenization === tokenization && this._input !== null && data.length !== 0) {\n // Decode bytes, keeping an incomplete trailing character for the next chunk\n if (typeof data !== 'string') {\n decoder = decoder || new TextDecoder('utf-8', { ignoreBOM: true });\n if (!(data = decoder.decode(data, { stream: true })))\n return;\n }\n // Only read a BOM at the start\n if (typeof this._input === 'undefined')\n this._input = this._readStartingBom(data);\n else\n this._input += data;\n // Tokenize as far as possible. When a previous attempt left a long unfinished token,\n // wait until the buffered input has doubled, so the token is not rescanned for every chunk.\n if (this._input.length >= retryLength) {\n this._tryTokenizeToEnd(callback, false);\n retryLength = this._input !== null && this._input.length > MIN_RESCAN_LENGTH ?\n 2 * this._input.length : 0;\n }\n }\n });\n // Parses until the end\n input.on('end', () => {\n if (this._tokenization === tokenization && this._input !== null) {\n // Decode any incomplete character left at the end\n const rest = decoder ? decoder.decode() : '';\n if (rest)\n this._input = typeof this._input === 'string' ? this._input + rest : rest;\n if (typeof this._input === 'string')\n this._tryTokenizeToEnd(callback, true);\n }\n });\n input.on('error', error => {\n if (this._tokenization === tokenization)\n callback(error);\n });\n }\n }\n}\n", "// N3.js implementations of the RDF/JS core data types\n// See http://rdf.js.org/data-model-spec/\n\nimport namespaces from './IRIs';\n\nconst { rdf, xsd } = namespaces;\n\n// eslint-disable-next-line prefer-const\nlet DEFAULTGRAPH;\nlet _blankNodeCounter = 0;\n// The ID of the empty IRI, which cannot be '' as that is the ID of the default graph\nconst EMPTY_IRI_ID = '<>';\n\nconst escapedLiteral = /^\"(.*\".*)(?=\"[^\"]*$)/;\n\n// ## DataFactory singleton\nconst DataFactory = {\n namedNode,\n blankNode,\n variable,\n literal,\n defaultGraph,\n quad,\n triple: quad,\n fromTerm,\n fromQuad,\n};\nexport default DataFactory;\n\n// ## Term constructor\nexport class Term {\n constructor(id) {\n this.id = id;\n }\n\n // ### The value of this term\n get value() {\n return this.id;\n }\n\n // ### Returns whether this object represents the same term as the other\n equals(other) {\n // If both terms were created by this library,\n // equality can be computed through ids of the same term type,\n // since IRIs such as `?x` have the same id as other terms\n if (other instanceof Term)\n return this.id === other.id && this.termType === other.termType;\n // Otherwise, compare term type and value\n return !!other && this.termType === other.termType &&\n this.value === other.value;\n }\n\n // ### Implement hashCode for Immutable.js, since we implement `equals`\n // https://immutable-js.com/docs/v4.0.0/ValueObject/#hashCode()\n hashCode() {\n return 0;\n }\n\n // ### Returns a plain object representation of this term\n toJSON() {\n return {\n termType: this.termType,\n value: this.value,\n };\n }\n}\n\n\n// ## NamedNode constructor\nexport class NamedNode extends Term {\n // ### Creates a named node\n /**\n * @deprecated Create named nodes through a data factory instead\n * (`DataFactory.namedNode(iri)`), so that term validation can be applied;\n * the constructor assumes an already-validated IRI.\n */\n constructor(iri) {\n if (iri !== '')\n super(iri);\n // The empty IRI gets a distinct ID, since '' is the ID of the default graph\n else {\n super(EMPTY_IRI_ID);\n Object.defineProperty(this, 'value', { value: '' });\n }\n }\n\n // ### The term type of this term\n get termType() {\n return 'NamedNode';\n }\n}\n\n// ## Literal constructor\nexport class Literal extends Term {\n // ### Creates a literal\n /**\n * @deprecated Create literals through a data factory instead\n * (`DataFactory.literal(value, languageOrDatatype)`), so that term\n * validation can be applied; the constructor takes the internal\n * id representation and assumes it is already valid.\n */\n constructor(id) {\n super(id);\n }\n\n // ### The term type of this term\n get termType() {\n return 'Literal';\n }\n\n // ### The text value of this literal\n get value() {\n return this.id.substring(1, this.id.lastIndexOf('\"'));\n }\n\n // ### The language of this literal\n get language() {\n // Find the last quotation mark (e.g., '\"abc\"@en-us')\n const id = this.id;\n let atPos = id.lastIndexOf('\"') + 1;\n const dirPos = id.lastIndexOf('--');\n // If \"@\" it follows, return the remaining substring; empty otherwise\n return atPos < id.length && id[atPos++] === '@' ? (dirPos > atPos ? id.substr(0, dirPos) : id).substr(atPos).toLowerCase() : '';\n }\n\n // ### The direction of this literal\n get direction() {\n // Find the last double dash after the closing quote and language tag (e.g., '\"abc\"@en-us--ltr')\n const id = this.id;\n const endPos = id.lastIndexOf('\"');\n const dirPos = id[endPos + 1] === '@' ? id.lastIndexOf('--') : -1;\n return dirPos > endPos && dirPos + 2 < id.length ? id.substr(dirPos + 2).toLowerCase() : '';\n }\n\n // ### The datatype IRI of this literal\n get datatype() {\n return new NamedNode(this.datatypeString);\n }\n\n // ### The datatype string of this literal\n get datatypeString() {\n // Find the last quotation mark (e.g., '\"abc\"^^http://ex.org/types#t')\n const id = this.id, dtPos = id.lastIndexOf('\"') + 1;\n const char = dtPos < id.length ? id[dtPos] : '';\n // If \"^\" it follows, return the remaining substring\n return char === '^' ? id.substr(dtPos + 2) :\n // If \"@\" follows, return rdf:langString or rdf:dirLangString; xsd:string otherwise\n (char !== '@' ? xsd.string : (id.indexOf('--', dtPos) > 0 ? rdf.dirLangString : rdf.langString));\n }\n\n // ### Returns whether this object represents the same term as the other\n equals(other) {\n // If both literals were created by this library,\n // equality can be computed through ids\n if (other instanceof Literal)\n return this.id === other.id;\n // Otherwise, compare term type, value, language, and datatype\n return !!other && !!other.datatype &&\n this.termType === other.termType &&\n this.value === other.value &&\n this.language === other.language &&\n ((this.direction === other.direction) || (this.direction === '' && !other.direction)) &&\n this.datatype.value === other.datatype.value;\n }\n\n toJSON() {\n return {\n termType: this.termType,\n value: this.value,\n language: this.language,\n direction: this.direction,\n datatype: { termType: 'NamedNode', value: this.datatypeString },\n };\n }\n}\n\n// ## BlankNode constructor\nexport class BlankNode extends Term {\n // ### Creates a blank node\n /**\n * @deprecated Create blank nodes through a data factory instead\n * (`DataFactory.blankNode(name)`), so that term validation can be applied;\n * the constructor assumes an already-validated name.\n */\n constructor(name) {\n super(`_:${name}`);\n }\n\n // ### The term type of this term\n get termType() {\n return 'BlankNode';\n }\n\n // ### The name of this blank node\n get value() {\n return this.id.substr(2);\n }\n}\n\nexport class Variable extends Term {\n // ### Creates a variable\n /**\n * @deprecated Create variables through a data factory instead\n * (`DataFactory.variable(name)`), so that term validation can be applied;\n * the constructor assumes an already-validated name.\n */\n constructor(name) {\n super(`?${name}`);\n }\n\n // ### The term type of this term\n get termType() {\n return 'Variable';\n }\n\n // ### The name of this variable\n get value() {\n return this.id.substr(1);\n }\n}\n\n// ## DefaultGraph constructor\nexport class DefaultGraph extends Term {\n // ### Creates the default graph\n /**\n * @deprecated Obtain the default graph through a data factory instead\n * (`DataFactory.defaultGraph()`).\n */\n constructor() {\n super('');\n return DEFAULTGRAPH || this;\n }\n\n // ### The term type of this term\n get termType() {\n return 'DefaultGraph';\n }\n\n // ### Returns whether this object represents the same term as the other\n equals(other) {\n // If both terms were created by this library,\n // equality can be computed through strict equality;\n // otherwise, compare term types.\n return (this === other) || (!!other && (this.termType === other.termType));\n }\n}\n\n// ## DefaultGraph singleton\nDEFAULTGRAPH = new DefaultGraph();\n\n// ### Constructs a term from the given internal string ID\n// The third 'nested' parameter of this function is to aid\n// with recursion over nested terms. It should not be used\n// by consumers of this library.\n// See https://github.com/rdfjs/N3.js/pull/311#discussion_r1061042725\nexport function termFromId(id, factory, nested) {\n factory = factory || DataFactory;\n\n // Falsy value or empty string indicate the default graph\n if (!id)\n return factory.defaultGraph();\n\n // Identify the term type based on the first character\n switch (id[0]) {\n case '?':\n return factory.variable(id.substr(1));\n case '_':\n return factory.blankNode(id.substr(2));\n case '\"':\n // Shortcut for internal literals\n if (factory === DataFactory)\n return new Literal(id);\n // Literal without datatype or language\n if (id[id.length - 1] === '\"')\n return factory.literal(id.substr(1, id.length - 2));\n // Literal with datatype or language\n const endPos = id.lastIndexOf('\"', id.length - 1);\n let languageOrDatatype;\n if (id[endPos + 1] === '@') {\n languageOrDatatype = id.substr(endPos + 2);\n const dashDashIndex = languageOrDatatype.lastIndexOf('--');\n if (dashDashIndex > 0 && dashDashIndex < languageOrDatatype.length) {\n languageOrDatatype = {\n language: languageOrDatatype.substr(0, dashDashIndex),\n direction: languageOrDatatype.substr(dashDashIndex + 2),\n };\n }\n }\n else {\n languageOrDatatype = factory.namedNode(id.substr(endPos + 3));\n }\n return factory.literal(id.substr(1, endPos - 1),\n languageOrDatatype);\n case '[':\n id = JSON.parse(id);\n break;\n case '<':\n if (id === EMPTY_IRI_ID)\n return factory.namedNode('');\n // falls through\n default:\n if (!nested || !Array.isArray(id)) {\n return factory.namedNode(id);\n }\n }\n return factory.quad(\n termFromId(id[0], factory, true),\n termFromId(id[1], factory, true),\n termFromId(id[2], factory, true),\n id[3] && termFromId(id[3], factory, true),\n );\n}\n\n// ### Constructs an internal string ID from the given term or ID string\n// The third 'nested' parameter of this function is to aid\n// with recursion over nested terms. It should not be used\n// by consumers of this library.\n// See https://github.com/rdfjs/N3.js/pull/311#discussion_r1061042725\nexport function termToId(term, nested) {\n if (typeof term === 'string')\n return term;\n if (term instanceof Term && term.termType !== 'Quad')\n return term.id;\n if (!term)\n return DEFAULTGRAPH.id;\n\n // Term instantiated with another library\n switch (term.termType) {\n case 'NamedNode': {\n const iri = term.value;\n return iri !== '' ? iri : EMPTY_IRI_ID;\n }\n case 'BlankNode': return `_:${term.value}`;\n case 'Variable': return `?${term.value}`;\n case 'DefaultGraph': return '';\n case 'Literal': return `\"${term.value}\"${\n term.language ? `@${term.language}${term.direction ? `--${term.direction}` : ''}` :\n (term.datatype && term.datatype.value !== xsd.string ? `^^${term.datatype.value}` : '')}`;\n case 'Quad':\n const res = [\n termToId(term.subject, true),\n termToId(term.predicate, true),\n termToId(term.object, true),\n ];\n if (term.graph && term.graph.termType !== 'DefaultGraph') {\n res.push(termToId(term.graph, true));\n }\n return nested ? res : JSON.stringify(res);\n default: throw new Error(`Unexpected termType: ${term.termType}`);\n }\n}\n\n\n// ## Quad constructor\nexport class Quad extends Term {\n // ### Creates a quad\n /**\n * @deprecated Create quads through a data factory instead\n * (`DataFactory.quad(subject, predicate, object, graph)`), so that term\n * validation can be applied; the constructor assumes already-validated terms.\n */\n constructor(subject, predicate, object, graph) {\n super('');\n this._subject = subject;\n this._predicate = predicate;\n this._object = object;\n this._graph = graph || DEFAULTGRAPH;\n }\n\n // ### The term type of this term\n get termType() {\n return 'Quad';\n }\n\n get subject() {\n return this._subject;\n }\n\n get predicate() {\n return this._predicate;\n }\n\n get object() {\n return this._object;\n }\n\n get graph() {\n return this._graph;\n }\n\n // ### Returns a plain object representation of this quad\n toJSON() {\n return {\n termType: this.termType,\n subject: this._subject.toJSON(),\n predicate: this._predicate.toJSON(),\n object: this._object.toJSON(),\n graph: this._graph.toJSON(),\n };\n }\n\n // ### Returns whether this object represents the same quad as the other\n equals(other) {\n return !!other && this._subject.equals(other.subject) &&\n this._predicate.equals(other.predicate) &&\n this._object.equals(other.object) &&\n this._graph.equals(other.graph);\n }\n}\nexport { Quad as Triple };\n\n// ### Escapes the quotes within the given literal\nexport function escapeQuotes(id) {\n return id.replace(escapedLiteral, (_, quoted) => `\"${quoted.replace(/\"/g, '\"\"')}`);\n}\n\n// ### Unescapes the quotes within the given literal\nexport function unescapeQuotes(id) {\n return id.replace(escapedLiteral, (_, quoted) => `\"${quoted.replace(/\"\"/g, '\"')}`);\n}\n\n// ### Creates an IRI\nfunction namedNode(iri) {\n return new NamedNode(iri);\n}\n\n// ### Creates a blank node\nfunction blankNode(name) {\n return new BlankNode(name || `n3-${_blankNodeCounter++}`);\n}\n\n// ### Creates a literal\nfunction literal(value, languageOrDataType) {\n // Create a language-tagged string\n if (typeof languageOrDataType === 'string')\n return new Literal(`\"${value}\"@${languageOrDataType.toLowerCase()}`);\n\n // Create a language-tagged string with base direction\n if (languageOrDataType !== undefined && !('termType' in languageOrDataType)) {\n return new Literal(`\"${value}\"@${languageOrDataType.language.toLowerCase()}${languageOrDataType.direction ? `--${languageOrDataType.direction.toLowerCase()}` : ''}`);\n }\n\n // Automatically determine datatype for booleans, numbers, BigInts, and dates\n let datatype = languageOrDataType ? languageOrDataType.value : '';\n if (datatype === '') {\n // Convert a boolean\n if (typeof value === 'boolean')\n datatype = xsd.boolean;\n // Convert an integer or double\n else if (typeof value === 'number') {\n if (Number.isFinite(value))\n // From 1e21 upward, a number's string form turns exponential (\"1e+21\"),\n // which is not a valid xsd:integer lexical, so type it as xsd:double\n // (the same cut-off as JSON-LD 1.1's Object to RDF Conversion)\n datatype = Number.isInteger(value) && Math.abs(value) < 1e21 ? xsd.integer : xsd.double;\n else {\n datatype = xsd.double;\n if (!Number.isNaN(value))\n value = value > 0 ? 'INF' : '-INF';\n }\n }\n // Convert a BigInt, whose decimal string is always a valid xsd:integer lexical\n else if (typeof value === 'bigint')\n datatype = xsd.integer;\n // Convert a valid date\n else if (value instanceof Date && !Number.isNaN(value.getTime())) {\n datatype = xsd.dateTime;\n value = value.toISOString();\n }\n }\n\n // Create a datatyped literal\n return (datatype === '' || datatype === xsd.string) ?\n new Literal(`\"${value}\"`) :\n new Literal(`\"${value}\"^^${datatype}`);\n}\n\n// ### Creates a variable\nfunction variable(name) {\n return new Variable(name);\n}\n\n// ### Returns the default graph\nfunction defaultGraph() {\n return DEFAULTGRAPH;\n}\n\n// ### Creates a quad\nfunction quad(subject, predicate, object, graph) {\n return new Quad(subject, predicate, object, graph);\n}\n\nexport function fromTerm(term) {\n if (term instanceof Term)\n return term;\n\n // Term instantiated with another library\n switch (term.termType) {\n case 'NamedNode': return namedNode(term.value);\n case 'BlankNode': return blankNode(term.value);\n case 'Variable': return variable(term.value);\n case 'DefaultGraph': return DEFAULTGRAPH;\n case 'Literal': return literal(term.value, !term.language ? term.datatype :\n term.direction ? { language: term.language, direction: term.direction } : term.language);\n case 'Quad': return fromQuad(term);\n default: throw new Error(`Unexpected termType: ${term.termType}`);\n }\n}\n\nexport function fromQuad(inQuad) {\n if (inQuad instanceof Quad)\n return inQuad;\n\n if (inQuad.termType !== 'Quad')\n throw new Error(`Unexpected termType: ${inQuad.termType}`);\n\n return quad(fromTerm(inQuad.subject), fromTerm(inQuad.predicate), fromTerm(inQuad.object), fromTerm(inQuad.graph));\n}\n", "// **N3Parser** parses N3 documents.\nimport N3Lexer from './N3Lexer';\nimport N3DataFactory from './N3DataFactory';\nimport namespaces from './IRIs';\n\nlet blankNodePrefix = 0;\n// Detects `.` and `..` path segments in an IRI\nconst dotSegments = /(^|\\/)\\.\\.?($|[/#?])/;\n// Detects `.` and `..` segments in the path of an IRI, ignoring its query and fragment\nconst pathDotSegments = /^[^?#]*(?:^|\\/)\\.\\.?(?:$|[/#?])/;\n\n// ## Constructor\nexport default class N3Parser {\n constructor(options) {\n this._contextStack = [];\n this._graph = null;\n\n // Set the document IRI\n options = options || {};\n this._setBase(options.baseIRI);\n options.factory && initDataFactory(this, options.factory);\n\n // Set supported features depending on the format\n const format = (typeof options.format === 'string') ?\n options.format.match(/(?:^|\\W)(\\w*)$/)[1].toLowerCase() : '',\n isTurtle = /turtle/.test(format), isTriG = /trig/.test(format),\n isNTriples = /triple/.test(format), isNQuads = /quad/.test(format),\n isN3 = this._n3Mode = /n3/.test(format),\n isLineMode = isNTriples || isNQuads;\n // Keep inverse handling off the non-N3 emission path\n this._emitCurrent = this._emit;\n if (isN3) {\n this._createQuad = this._createQuadInDirection;\n this._emit = this._emitInDirection;\n this._emitCurrent = this._emitCurrentInDirection;\n }\n if (!(this._supportsNamedGraphs = !(isTurtle || isN3)))\n this._readPredicateOrNamedGraph = this._readPredicate;\n // Support triples in other graphs\n this._supportsQuads = !(isTurtle || isTriG || isNTriples || isN3);\n // Whether the log:isImpliedBy predicate is supported\n this._isImpliedBy = options.isImpliedBy;\n // Whether an undeclared empty prefix resolves against the document IRI\n this._implicitEmptyPrefix = !!options.implicitEmptyPrefix;\n // Whether an empty formula is read as the boolean literal true,\n // as in the N3 spec tests (opt-in until the next major version)\n this._emptyFormulaAsTrue = !!options.emptyFormulaAsTrue;\n // Disable relative IRIs in N-Triples or N-Quads mode\n if (isLineMode)\n this._resolveRelativeIRI = iri => { return null; };\n this._blankNodePrefix = typeof options.blankNodePrefix !== 'string' ? '' :\n options.blankNodePrefix.replace(/^(?!_:)/, '_:');\n // Map the token types of additional directives (@name and NAME) to their names\n this._directives = null;\n if (options.directives) {\n this._directives = Object.create(null);\n for (const name of options.directives)\n this._directives[`@${name.toLowerCase()}`] = this._directives[name.toUpperCase()] = name;\n }\n this._lexer = options.lexer || new N3Lexer({\n lineMode: isLineMode, n3: isN3, isImpliedBy: this._isImpliedBy, directives: options.directives,\n });\n // Disable explicit quantifiers by default\n this._explicitQuantifiers = !!options.explicitQuantifiers;\n // Disable formula-only blank node scoping by default\n this._formulaScopedBlankNodes = !!options.formulaScopedBlankNodes;\n // Disable parsing of unsupported versions by default\n this._parseUnsupportedVersions = !!options.parseUnsupportedVersions;\n this._version = options.version;\n // Maximum nesting depth of triple terms (default 1024; Infinity disables the limit)\n const maxTripleTermDepth = options.maxTripleTermDepth;\n this._maxTripleTermDepth = maxTripleTermDepth === Infinity ||\n Number.isInteger(maxTripleTermDepth) && maxTripleTermDepth >= 0 ? maxTripleTermDepth : 1024;\n }\n\n // ## Static class methods\n\n // ### `_resetBlankNodePrefix` restarts blank node prefix identification\n static _resetBlankNodePrefix() {\n blankNodePrefix = 0;\n }\n\n // ## Private methods\n\n // ### `_setBase` sets the base IRI to resolve relative IRIs\n _setBase(baseIRI) {\n if (!baseIRI) {\n this._base = '';\n this._basePath = '';\n this._basePathHasDotSegments = false;\n }\n else {\n // Remove fragment if present\n const fragmentPos = baseIRI.indexOf('#');\n if (fragmentPos >= 0)\n baseIRI = baseIRI.substr(0, fragmentPos);\n // Set base IRI and its components\n this._base = baseIRI;\n const queryPos = baseIRI.indexOf('?');\n const path = queryPos < 0 ? baseIRI : baseIRI.substr(0, queryPos);\n this._basePath = baseIRI.indexOf('/') < 0 ? baseIRI :\n path.substr(0, path.lastIndexOf('/') + 1);\n const base = baseIRI;\n baseIRI = baseIRI.match(/^(?:([a-z][a-z0-9+.-]*:))?(\\/\\/[^\\/?#]*)?/i);\n this._baseRoot = baseIRI[0];\n this._baseScheme = baseIRI[1];\n // If the base has an authority but an empty path,\n // relative IRIs merge under the path '/' (RFC 3986 \u00A75.2.3)\n if (baseIRI[2] !== undefined && (base.length === this._baseRoot.length || base[this._baseRoot.length] === '?'))\n this._basePath = `${this._baseRoot}/`;\n // Check once whether resolving against the base path needs to remove dot segments\n this._basePathHasDotSegments = dotSegments.test(this._basePath);\n }\n }\n\n // ### `_enterTripleTerm` stores the current parsing context when entering a triple term,\n // failing if triple terms nest deeper than the maximum depth\n _enterTripleTerm(type, subject, predicate, token) {\n if (this._tripleTermDepth >= this._maxTripleTermDepth) {\n this._error(`Triple terms nested deeper than ${this._maxTripleTermDepth} level${this._maxTripleTermDepth === 1 ? '' : 's'}`, token);\n return false;\n }\n this._tripleTermDepth++;\n this._saveContext(type, this._graph, subject, predicate, null);\n this._graph = null;\n return true;\n }\n\n // ### `_saveContext` stores the current parsing context\n // when entering a new scope (list, blank node, formula)\n _saveContext(type, graph, subject, predicate, object) {\n // Only N3 contexts need the extra parser state.\n if (!this._n3Mode) {\n this._contextStack.push({ type, subject, predicate, object, graph });\n return;\n }\n const context = {\n type,\n subject, predicate, object, graph,\n inverse: this._inversePredicate,\n expectOf: this._expectOf,\n blankPrefix: this._prefixes._,\n prefixChanges: this._prefixChanges,\n quantifiedChanges: this._quantifiedChanges,\n emptyFormula: this._emptyFormula,\n };\n // Prefix and base declarations are scoped to their formula,\n // so record prefix changes to undo them when the formula ends\n if (type === 'formula') {\n context.base = [this._base, this._basePath, this._baseRoot, this._baseScheme,\n this._basePathHasDotSegments];\n this._prefixChanges = [];\n }\n this._contextStack.push(context);\n // Every new scope resets the predicate direction\n this._inversePredicate = false;\n this._expectOf = false;\n // In N3, blank nodes and quantifiers are scoped to a formula;\n // with `formulaScopedBlankNodes`, lists and blank node property lists\n // share the enclosing scope instead of rescoping\n if (!this._formulaScopedBlankNodes || type === 'formula') {\n // Label the scope with the enclosing formula's blank node\n // (using a dot as separator, as a blank node label cannot start with it)\n this._prefixes._ = (this._graph ? `${this._graph.value}.` : '.');\n this._quantifiedChanges = [];\n }\n // A formula starts empty and must not inherit its parent's subject\n if (type === 'formula') {\n this._subject = null;\n this._emptyFormula = true;\n }\n }\n\n // ### `_restoreContext` restores the parent context\n // when leaving a scope (list, blank node, formula)\n _restoreContext(type, token) {\n // Obtain the previous context\n const context = this._contextStack.pop();\n if (!context || context.type !== type)\n return this._error(`Unexpected ${token.type}`, token);\n\n // Restore the quad of the previous context\n this._subject = context.subject;\n this._predicate = context.predicate;\n this._object = context.object;\n this._graph = context.graph;\n\n // Restore N3 context settings\n if (this._n3Mode) {\n this._inversePredicate = context.inverse;\n this._expectOf = context.expectOf;\n if (type === 'formula')\n [this._base, this._basePath, this._baseRoot, this._baseScheme,\n this._basePathHasDotSegments] = context.base;\n if (this._prefixChanges !== context.prefixChanges) {\n undoChanges(this._prefixes, this._prefixChanges);\n this._prefixChanges = context.prefixChanges;\n }\n this._prefixes._ = context.blankPrefix;\n if (this._quantifiedChanges !== context.quantifiedChanges) {\n undoChanges(this._quantified, this._quantifiedChanges);\n this._quantifiedChanges = context.quantifiedChanges;\n }\n this._emptyFormula = context.emptyFormula;\n }\n }\n\n // ### `_readBeforeTopContext` is called once only at the start of parsing.\n _readBeforeTopContext(token) {\n if (this._version && !this._isValidVersion(this._version))\n return this._error(`Detected unsupported version as media type parameter: \"${this._version}\"`, token);\n return this._readInTopContext(token);\n }\n\n // ### `_readInTopContext` reads a token when in the top context\n _readInTopContext(token) {\n switch (token.type) {\n // If an EOF token arrives in the top context, signal that we're done\n case 'eof':\n if (this._graph !== null)\n return this._error('Unclosed graph', token);\n delete this._prefixes._;\n return this._callback(null, null, this._prefixes);\n // It could be a prefix declaration\n case 'PREFIX':\n this._sparqlStyle = true;\n case '@prefix':\n return this._readPrefix;\n // It could be a base declaration\n case 'BASE':\n this._sparqlStyle = true;\n case '@base':\n return this._readBaseIRI;\n // It could be a version declaration\n case 'VERSION':\n this._sparqlStyle = true;\n case '@version':\n return this._readVersion;\n // It could be a graph\n case '{':\n if (this._supportsNamedGraphs) {\n this._graph = '';\n this._subject = null;\n return this._readSubject;\n }\n case 'GRAPH':\n if (this._supportsNamedGraphs)\n return this._readNamedGraphLabel;\n // Otherwise, the next token must be a subject, unless it is an additional directive\n default:\n if (this._directives !== null && token.type in this._directives && this._graph === null) {\n this._sparqlStyle = token.type[0] !== '@';\n this._directiveCallback(this._directives[token.type]);\n return this._readDeclarationPunctuation;\n }\n return this._readSubject(token);\n }\n }\n\n // ### `_readInFormulaContext` reads a token at the statement level of a formula\n _readInFormulaContext(token) {\n switch (token.type) {\n case 'PREFIX':\n this._sparqlStyle = true;\n case '@prefix':\n return this._readPrefix;\n case 'BASE':\n this._sparqlStyle = true;\n case '@base':\n return this._readBaseIRI;\n default:\n return this._readSubject(token);\n }\n }\n\n // ### `_getStatementReader` returns the reader for the current statement scope\n _getStatementReader() {\n const context = this._contextStack[this._contextStack.length - 1];\n return context && context.type === 'formula' ? this._readInFormulaContext : this._readInTopContext;\n }\n\n // ### `_readEntity` reads an IRI, prefixed name, blank node, or variable\n _readEntity(token, quantifier) {\n let value;\n switch (token.type) {\n // Read a relative or absolute IRI\n case 'IRI':\n case 'typeIRI':\n const iri = this._resolveIRI(token.value);\n if (iri === null)\n return this._error('Invalid IRI', token);\n value = this._factory.namedNode(iri);\n break;\n // Read a prefixed name\n case 'type':\n case 'prefixed':\n const prefix = this._prefixes[token.prefix];\n if (prefix === undefined)\n return this._error(`Undefined prefix \"${token.prefix}:\"`, token);\n value = this._factory.namedNode(prefix + token.value);\n break;\n // Read a blank node\n case 'blank':\n value = this._factory.blankNode(this._prefixes[token.prefix] + token.value);\n break;\n // Read a variable\n case 'var':\n value = this._factory.variable(token.value.substr(1));\n break;\n // Everything else is not an entity\n default:\n return this._error(`Expected entity but got ${token.type}`, token);\n }\n // In N3 mode, replace the entity if it is quantified\n if (!quantifier && this._n3Mode && (value.id in this._quantified))\n value = this._quantified[value.id];\n return value;\n }\n\n // ### `_readList` starts reading a list in the subject, predicate, or object position\n _readList(token, subject, predicate, object) {\n const stack = this._contextStack, parent = stack.length && stack[stack.length - 1];\n if (parent.type === '<<') {\n return this._error('Unexpected list in reified triple', token);\n }\n // Start a new list\n this._saveContext('list', this._graph, subject, predicate, object);\n this._subject = null;\n return this._readListItem;\n }\n\n // ### `_readSubject` reads a quad's subject\n _readSubject(token) {\n this._predicate = null;\n // Any statement token means the enclosing formula is not empty\n if (token.type !== '}')\n this._emptyFormula = false;\n switch (token.type) {\n case '[':\n // Start a new quad with a new blank node as subject\n this._saveContext('blank', this._graph,\n this._subject = this._factory.blankNode(), null, null);\n return this._readBlankNodeHead;\n case '(':\n return this._readList(token, this.RDF_NIL, null, null);\n case '{':\n // Start a new formula\n if (!this._n3Mode)\n return this._error('Unexpected graph', token);\n this._saveContext('formula', this._graph,\n this._graph = this._factory.blankNode(), null, null);\n return this._readInFormulaContext;\n case '}':\n // No subject; the graph in which we are reading is closed instead\n return this._readPunctuation(token);\n case '@forSome':\n if (!this._n3Mode)\n return this._error('Unexpected \"@forSome\"', token);\n this._subject = null;\n this._predicate = this.N3_FORSOME;\n this._quantifier = 'blankNode';\n return this._readQuantifierList;\n case '@forAll':\n if (!this._n3Mode)\n return this._error('Unexpected \"@forAll\"', token);\n this._subject = null;\n this._predicate = this.N3_FORALL;\n this._quantifier = 'variable';\n return this._readQuantifierList;\n case 'literal':\n if (!this._n3Mode)\n return this._error('Unexpected literal', token);\n\n if (token.prefix.length === 0) {\n this._literalValue = token.value;\n return this._completeSubjectLiteral;\n }\n else {\n this._subject = this._factory.literal(token.value, this._factory.namedNode(token.prefix));\n // This branch is N3-only, so the literal subject might start a path\n return this._getPathReader(this._readPredicateOrNamedGraph);\n }\n case '<<(':\n if (!this._n3Mode)\n return this._error('Disallowed triple term as subject', token);\n return this._enterTripleTerm('<<(', null, null, token) && this._readSubject;\n case '<<':\n return this._enterTripleTerm('<<', null, null, token) && this._readSubject;\n default:\n // Read the subject entity\n if ((this._subject = this._readEntity(token)) === undefined)\n return;\n // In N3 mode, the subject might be a path\n if (this._n3Mode)\n return this._getPathReader(this._readPredicateOrNamedGraph);\n }\n\n // The next token must be a predicate,\n // or, if the subject was actually a graph IRI, a named graph\n return this._readPredicateOrNamedGraph;\n }\n\n // ### `_readPredicate` reads a quad's predicate\n _readPredicate(token) {\n const type = token.type;\n let pathable = false;\n switch (type) {\n case 'inverse':\n this._inversePredicate = true;\n case 'abbreviation':\n this._predicate = this.ABBREVIATIONS[token.value];\n break;\n case 'has':\n return this._readPredicateAfterVerb;\n case 'is':\n this._inversePredicate = true;\n this._expectOf = true;\n return this._readPredicateAfterVerb;\n case 'inversePredicate':\n this._inversePredicate = true;\n return this._readPredicateAfterVerb;\n case '|}':\n // Expected predicate didn't come, must have been trailing semicolon\n // or an empty annotation block\n this._subject = null;\n return this._readAnnotationBlockPunctuation(token);\n case '.':\n case ']':\n case '}':\n // Expected predicate didn't come, must have been trailing semicolon.\n // In N3 mode, a subject (such as a path) can be a statement by itself.\n if (this._predicate === null && !this._n3Mode)\n return this._error(`Unexpected ${type}`, token);\n this._subject = null;\n return type === ']' ? this._readBlankNodeTail(token) : this._readPunctuation(token);\n case ';':\n // Additional semicolons can be safely ignored\n return this._predicate !== null ? this._readPredicate :\n this._error('Expected predicate but got ;', token);\n case 'literal':\n if (!this._n3Mode)\n return this._error('Unexpected literal', token);\n\n if (token.prefix.length === 0) {\n this._literalValue = token.value;\n return this._completePredicateLiteral;\n }\n else\n this._predicate = this._factory.literal(token.value, this._factory.namedNode(token.prefix));\n\n pathable = true;\n break;\n case '(':\n // In N3, a list can be a predicate\n return this._n3Mode ?\n this._readList(token, this._subject, this.RDF_NIL, null) :\n this._error(`Expected entity but got ${type}`, token);\n case '[':\n if (this._n3Mode) {\n // Start a new quad with a new blank node as subject\n this._saveContext('blank', this._graph, this._subject,\n this._subject = this._factory.blankNode(), null);\n return this._readBlankNodeHead;\n }\n return this._error('Disallowed blank node as predicate', token);\n case '{':\n // In N3, a formula can be a predicate\n if (this._n3Mode) {\n this._saveContext('formula', this._graph, this._subject,\n this._graph = this._factory.blankNode(), null);\n return this._readSubject;\n }\n return this._readEntity(token);\n case 'blank':\n if (!this._n3Mode)\n return this._error('Disallowed blank node as predicate', token);\n default:\n if ((this._predicate = this._readEntity(token)) === undefined)\n return;\n pathable = this._n3Mode;\n }\n this._validAnnotation = true;\n // The next token must be an object\n return pathable ? this._getPathReader(this._readObject, 'predicate') : this._readObject;\n }\n\n // ### `_readPredicateAfterVerb` reads the predicate following `has` or `is`\n _readPredicateAfterVerb(token) {\n if (token.type === 'has' || token.type === 'is' || token.type === 'of' ||\n token.type === 'inversePredicate')\n return this._error(`Expected expression but got ${token.type}`, token);\n return this._readPredicate(token);\n }\n\n // ### `_readObject` reads a quad's object\n _readObject(token) {\n if (this._expectOf) {\n if (token.type !== 'of')\n return this._error(`Expected of but got ${token.type}`, token);\n this._expectOf = false;\n return this._readObject;\n }\n switch (token.type) {\n case 'literal':\n // Regular literal, can still get a datatype or language\n if (token.prefix.length === 0) {\n this._literalValue = token.value;\n return this._readDataTypeOrLang;\n }\n // Pre-datatyped string literal (prefix stores the datatype)\n else {\n this._object = this._factory.literal(token.value, this._factory.namedNode(token.prefix));\n // In N3 mode, the literal object might start a path\n if (this._n3Mode)\n return this._getPathReader(this._getContextEndReader());\n }\n break;\n case '[':\n // Start a new quad with a new blank node as subject\n this._saveContext('blank', this._graph, this._subject, this._predicate,\n this._subject = this._factory.blankNode());\n return this._readBlankNodeHead;\n case '(':\n return this._readList(token, this._subject, this._predicate, this.RDF_NIL);\n case '{':\n // Start a new formula\n if (!this._n3Mode)\n return this._error('Unexpected graph', token);\n this._saveContext('formula', this._graph, this._subject, this._predicate,\n this._graph = this._factory.blankNode());\n return this._readInFormulaContext;\n case '<<(':\n return this._enterTripleTerm('<<(', this._subject, this._predicate, token) && this._readSubject;\n case '<<':\n return this._enterTripleTerm('<<', this._subject, this._predicate, token) && this._readSubject;\n default:\n // Read the object entity\n if ((this._object = this._readEntity(token)) === undefined)\n return;\n // In N3 mode, the object might be a path\n if (this._n3Mode)\n return this._getPathReader(this._getContextEndReader());\n }\n return this._getContextEndReader();\n }\n\n // ### `_readPredicateOrNamedGraph` reads a quad's predicate, or a named graph\n _readPredicateOrNamedGraph(token) {\n return token.type === '{' ? this._readGraph(token) : this._readPredicate(token);\n }\n\n // ### `_readGraph` reads a graph\n _readGraph(token) {\n if (token.type !== '{')\n return this._error(`Expected graph but got ${token.type}`, token);\n // The \"subject\" we read is actually the GRAPH's label\n this._graph = this._subject, this._subject = null;\n return this._readSubject;\n }\n\n // ### `_readBlankNodeHead` reads the head of a blank node\n _readBlankNodeHead(token) {\n if (token.type === ']') {\n this._subject = null;\n return this._readBlankNodeTail(token);\n }\n else {\n const stack = this._contextStack, parentParent = stack.length > 1 && stack[stack.length - 2];\n if (parentParent.type === '<<') {\n return this._error('Unexpected compound blank node expression in reified triple', token);\n }\n if (token.type === 'id')\n return this._readIriPropertyListId;\n this._predicate = null;\n return this._readPredicate(token);\n }\n }\n\n // ### `_readIriPropertyListId` replaces a property list's blank node with its IRI\n _readIriPropertyListId(token) {\n const iri = this._readEntity(token);\n if (iri === undefined)\n return;\n if (iri.termType !== 'NamedNode')\n return this._error(`Expected IRI after id but got ${token.type}`, token);\n\n const placeholder = this._subject;\n this._subject = iri;\n const context = this._contextStack[this._contextStack.length - 1];\n if (context.subject === placeholder)\n context.subject = iri;\n if (context.predicate === placeholder)\n context.predicate = iri;\n if (context.object === placeholder)\n context.object = iri;\n this._predicate = null;\n return this._readIriPropertyListPredicate;\n }\n\n // ### `_readIriPropertyListPredicate` requires properties after an IRI property list ID\n _readIriPropertyListPredicate(token) {\n if (token.type === ';' || token.type === ']' || token.type === '.' || token.type === '}')\n return this._error(`Expected predicate but got ${token.type}`, token);\n return this._readPredicate(token);\n }\n\n // ### `_readBlankNodeTail` reads the end of a blank node\n _readBlankNodeTail(token) {\n if (token.type !== ']')\n return this._readBlankNodePunctuation(token);\n\n // Store blank node quad\n if (this._subject !== null)\n this._emitCurrent(this._subject, this._predicate, this._object, this._graph);\n\n // Restore the parent context containing this blank node\n const empty = this._predicate === null;\n this._restoreContext('blank', token);\n // If the blank node was the object, restore previous context and read punctuation\n if (this._object !== null)\n return this._getContextEndReader();\n // If the blank node was the predicate, continue reading the object\n else if (this._predicate !== null)\n return this._getPathReader(this._readObject, 'predicate');\n // If the blank node was the subject, continue reading the predicate\n else\n // If the blank node was empty, it could be a named graph label\n return empty ? this._readPredicateOrNamedGraph : this._readPredicateAfterBlank;\n }\n\n // ### `_readPredicateAfterBlank` reads a predicate after an anonymous blank node\n _readPredicateAfterBlank(token) {\n switch (token.type) {\n case '.':\n case '}':\n // No predicate is coming if the triple is terminated here\n this._subject = null;\n return this._readPunctuation(token);\n default:\n return this._readPredicate(token);\n }\n }\n\n // ### `_readListItem` reads items from a list\n _readListItem(token) {\n let item = null, // The item of the list\n list = null, // The list itself\n next = this._readListItem; // The next function to execute\n const previousList = this._subject, // The previous list that contains this list\n stack = this._contextStack, // The stack of parent contexts\n parent = stack[stack.length - 1]; // The parent containing the current list\n\n switch (token.type) {\n case '[':\n // Stack the current list quad and start a new quad with a blank node as subject\n this._saveContext('blank', this._graph,\n list = this._factory.blankNode(), this.RDF_FIRST,\n this._subject = item = this._factory.blankNode());\n next = this._readBlankNodeHead;\n break;\n case '(':\n // Stack the current list quad and start a new list\n this._saveContext('list', this._graph,\n list = this._factory.blankNode(), this.RDF_FIRST, this.RDF_NIL);\n this._subject = null;\n break;\n case ')':\n // Closing the list; restore the parent context\n this._restoreContext('list', token);\n // If this list is contained within a parent list, return the membership quad here.\n // This will be `<parent list element> rdf:first <this list>.`.\n if (stack.length !== 0 && stack[stack.length - 1].type === 'list') {\n // In N3 mode, this list might be the start of a path\n if (this._n3Mode) {\n // Close this list's tail, as a path would alter the membership quad only\n if (previousList !== null)\n this._emit(previousList, this.RDF_REST, this.RDF_NIL, this._graph);\n // Create a new context to read the path;\n // _readPath will restore the context and output the membership quad\n this._saveContext('item', this._graph, this._subject, this._predicate, this._object);\n this._subject = this._object, this._predicate = null;\n return this._getPathReader(this._readListItem);\n }\n this._emit(this._subject, this._predicate, this._object, this._graph);\n }\n // Was this list the parent's subject?\n if (this._predicate === null) {\n // The next token is the predicate\n next = this._n3Mode ? this._getPathReader(this._readPredicate) : this._readPredicate;\n // No list tail if this was an empty list\n if (this._subject === this.RDF_NIL)\n return next;\n }\n // Was this list the parent's predicate?\n else if (this._object === null) {\n // The next token is the object\n next = this._getPathReader(this._readObject, 'predicate');\n // No list tail if this was an empty list\n if (this._predicate === this.RDF_NIL)\n return next;\n }\n // The list was in the parent context's object\n else {\n next = this._getContextEndReader();\n // In N3 mode, the list object might be the start of a path\n if (this._n3Mode)\n next = this._getPathReader(next);\n // No list tail if this was an empty list\n if (this._object === this.RDF_NIL)\n return next;\n }\n // Close the list by making the head nil\n list = this.RDF_NIL;\n break;\n case 'literal':\n // Regular literal, can still get a datatype or language\n if (token.prefix.length === 0) {\n this._literalValue = token.value;\n next = this._readListItemDataTypeOrLang;\n }\n // Pre-datatyped string literal (prefix stores the datatype)\n else {\n item = this._factory.literal(token.value, this._factory.namedNode(token.prefix));\n next = this._getContextEndReader();\n }\n break;\n case '{':\n // Start a new formula\n if (!this._n3Mode)\n return this._error('Unexpected graph', token);\n // The formula is an item of the list,\n // so it must be linked in the list's graph before the graph changes\n list = this._factory.blankNode();\n item = this._factory.blankNode();\n // Is this the first element of the list?\n if (previousList === null) {\n // This list is either the subject or the object of its parent\n if (parent.predicate === null)\n parent.subject = list;\n else\n parent.object = list;\n }\n else {\n // Continue the previous list with the current list\n this._emit(previousList, this.RDF_REST, list, this._graph);\n }\n // Output the item\n this._emit(list, this.RDF_FIRST, item, this._graph);\n // Stack the current list quad and start the formula\n this._saveContext('formula', this._graph, list, this.RDF_FIRST,\n this._graph = item);\n this._subject = null;\n return this._readInFormulaContext;\n case '<<(':\n case '<<':\n if (!this._enterTripleTerm(token.type, null, null, token))\n return;\n next = this._readSubject;\n break;\n default:\n if ((item = this._readEntity(token)) === undefined)\n return;\n }\n\n // Create a new blank node if no item head was assigned yet\n if (list === null)\n this._subject = list = this._factory.blankNode();\n\n // When reading a reified triple or triple term, store the list as subject in the stack, as this will be overridden when reading the triple.\n if (token.type === '<<' || token.type === '<<(')\n stack[stack.length - 1].subject = this._subject;\n\n // Is this the first element of the list?\n if (previousList === null) {\n // The list is the subject of the parent\n if (parent.predicate === null)\n parent.subject = list;\n // The list is the predicate of the parent\n else if (parent.object === null)\n parent.predicate = list;\n // The list is the object of the parent\n else\n parent.object = list;\n }\n else {\n // Continue the previous list with the current list\n this._emit(previousList, this.RDF_REST, list, this._graph);\n }\n // If an item was read, add it to the list\n if (item !== null) {\n // In N3 mode, the item might be a path\n if (this._n3Mode && (token.type === 'IRI' || token.type === 'prefixed' ||\n token.type === 'var' || token.type === 'blank' ||\n token.type === 'literal')) {\n // Create a new context to add the item's path\n this._saveContext('item', this._graph, list, this.RDF_FIRST, item);\n this._subject = item, this._predicate = null;\n // _readPath will restore the context and output the item\n return this._getPathReader(this._readListItem);\n }\n // Output the item\n this._emit(list, this.RDF_FIRST, item, this._graph);\n }\n return next;\n }\n\n // ### `_readDataTypeOrLang` reads an _optional_ datatype or language\n _readDataTypeOrLang(token) {\n return this._completeObjectLiteral(token, false);\n }\n\n\n // ### `_readListItemDataTypeOrLang` reads an _optional_ datatype or language in a list\n _readListItemDataTypeOrLang(token) {\n return this._completeObjectLiteral(token, true);\n }\n\n // ### `_completeLiteral` completes a literal with an optional datatype or language\n // Defers possible direction tags without allocating bound callbacks.\n _completeLiteral(token, component) {\n let literal, readCb = false;\n\n switch (token.type) {\n // Create a datatyped literal\n case 'type':\n case 'typeIRI':\n const datatype = this._readEntity(token);\n if (datatype === undefined) return; // No datatype means an error occurred\n if (datatype.value === namespaces.rdf.langString || datatype.value === namespaces.rdf.dirLangString) {\n return this._error('Detected illegal (directional) languaged-tagged string with explicit datatype', token);\n }\n literal = this._factory.literal(this._literalValue, datatype);\n token = null;\n break;\n // Create a language-tagged string\n case 'langcode':\n if (token.value.split('-').some(t => t.length > 8))\n return this._error('Detected language tag with subtag longer than 8 characters', token);\n literal = this._factory.literal(this._literalValue, token.value);\n this._literalLanguage = token.value;\n token = null;\n // Save state for a possible direction tag\n this._literalComponent = component;\n readCb = true;\n break;\n // Create a simple string literal by default\n default:\n literal = this._factory.literal(this._literalValue);\n }\n\n return { token, literal, readCb };\n }\n\n // ### `_readDirCode` reads an optional directional language tag\n _readDirCode(token) {\n const component = this._literalComponent, listItem = this._literalListItem;\n // Attempt to read a dircode\n if (token.type === 'dircode') {\n const term = this._factory.literal(this._literalValue, { language: this._literalLanguage, direction: token.value });\n if (component === 'subject')\n this._subject = term;\n else if (component === 'predicate')\n this._predicate = term;\n else\n this._object = term;\n this._literalLanguage = undefined;\n token = null;\n }\n\n if (component === 'subject' || component === 'predicate') {\n // A subject or predicate literal implies N3 mode, so it might start a path\n const next = component === 'subject' ? this._readPredicateOrNamedGraph : this._readObject;\n const reader = this._getPathEndReader(token, next, component);\n return reader || next.call(this, token);\n }\n return this._completeObjectLiteralPost(token, listItem);\n }\n\n // Completes a literal in subject or predicate position\n _completeTermLiteral(token, component) {\n const completed = this._completeLiteral(token, component);\n if (!completed)\n return;\n\n let next;\n if (component === 'subject') {\n this._subject = completed.literal;\n next = this._readPredicateOrNamedGraph;\n }\n else {\n this._predicate = completed.literal;\n this._validAnnotation = true;\n next = this._readObject;\n }\n\n // Postpone completion if the literal is only partially completed (such as lang+dir).\n if (completed.readCb) {\n this._literalListItem = false;\n return this._readDirCode;\n }\n\n // A subject or predicate literal implies N3 mode, so it might start a path.\n const reader = this._getPathEndReader(completed.token, next, component);\n if (reader)\n return reader;\n\n // Consume the non-path token now\n return next.call(this, completed.token);\n }\n\n // Completes a literal in subject position\n _completeSubjectLiteral(token) {\n return this._completeTermLiteral(token, 'subject');\n }\n\n // Completes a literal in predicate position\n _completePredicateLiteral(token) {\n return this._completeTermLiteral(token, 'predicate');\n }\n\n // Completes a literal in object position\n _completeObjectLiteral(token, listItem) {\n const completed = this._completeLiteral(token, 'object');\n if (!completed)\n return;\n\n this._object = completed.literal;\n\n // Postpone completion if the literal is only partially completed (such as lang+dir).\n if (completed.readCb) {\n this._literalListItem = listItem;\n return this._readDirCode;\n }\n\n return this._completeObjectLiteralPost(completed.token, listItem);\n }\n\n _completeObjectLiteralPost(token, listItem) {\n // In N3 mode, the literal object might start a path\n if (this._n3Mode && (token === null || token.type === '!' || token.type === '^')) {\n // If this literal was part of a list, defer writing the item;\n // _readPath will then restore the context and output it\n if (listItem) {\n this._saveContext('item', this._graph, this._subject, this.RDF_FIRST, this._object);\n this._subject = this._object, this._predicate = null;\n return this._getPathEndReader(token, this._readListItem);\n }\n return this._getPathEndReader(token, this._getContextEndReader());\n }\n // If this literal was part of a list, write the item\n // (we could also check the context stack, but passing in a flag is faster)\n if (listItem)\n this._emit(this._subject, this.RDF_FIRST, this._object, this._graph);\n // If the token was consumed, continue with the rest of the input\n if (token === null)\n return this._getContextEndReader();\n // Otherwise, consume the token now\n else {\n this._readCallback = this._getContextEndReader();\n return this._readCallback(token);\n }\n }\n\n // ### `_readFormulaTail` reads the end of a formula\n _readFormulaTail(token) {\n if (token.type !== '}')\n return this._readPunctuation(token);\n\n // Store the last quad of the formula\n if (this._subject !== null)\n this._emitCurrent(this._subject, this._predicate, this._object, this._graph);\n\n const formula = this._graph, empty = this._emptyFormula;\n // Restore the parent context containing this formula\n this._restoreContext('formula', token);\n\n // When the emptyFormulaAsTrue option is set, an empty formula\n // is read as the boolean literal true, following the N3 spec tests\n // and the direction discussed in https://github.com/w3c-cg/N3/issues/185\n if (empty && this._emptyFormulaAsTrue) {\n if (this._subject === formula)\n this._subject = this.N3_TRUE;\n else if (this._predicate === formula)\n this._predicate = this.N3_TRUE;\n else\n this._object = this.N3_TRUE;\n }\n\n // Continue according to the formula's position in the enclosing statement\n if (this._object !== null)\n return this._getPathReader(this._getContextEndReader(), 'object');\n if (this._predicate !== null)\n return this._getPathReader(this._readObject, 'predicate');\n return this._getPathReader(this._readPredicate, 'subject');\n }\n\n // ### `_readPunctuation` reads punctuation between quads or quad parts\n _readPunctuation(token) {\n let next, graph = this._graph;\n const subject = this._subject, inversePredicate = this._inversePredicate;\n switch (token.type) {\n // A closing brace ends a graph\n case '}':\n if (this._graph === null)\n return this._error('Unexpected graph closing', token);\n if (this._n3Mode)\n return this._readFormulaTail(token);\n this._graph = null;\n // A dot just ends the statement, without sharing anything with the next\n case '.':\n this._subject = null;\n this._tripleTerm = null;\n next = this._getStatementReader();\n if (inversePredicate) this._inversePredicate = false;\n break;\n // Semicolon means the subject is shared; predicate and object are different\n case ';':\n if (inversePredicate) this._inversePredicate = false;\n next = this._readPredicate;\n break;\n // Comma means both the subject and predicate are shared; the object is different\n case ',':\n next = this._readObject;\n break;\n // A reifier or annotation block annotates the triple just read\n case '~':\n case '{|':\n return this._readAnnotationStart(token);\n // An annotation block can only be closed from within one\n case '|}':\n return this._error('Unexpected annotation syntax closing', token);\n default:\n // An entity means this is a quad (only allowed if not already inside a graph)\n if (this._supportsQuads && this._graph === null && (graph = this._readEntity(token)) !== undefined) {\n next = this._readQuadPunctuation;\n break;\n }\n return this._error(`Expected punctuation to follow \"${this._object.id}\"`, token);\n }\n // A quad has been completed now, so return it\n if (subject !== null) {\n const predicate = this._predicate, object = this._object;\n this._emit(subject, predicate, object, graph, inversePredicate);\n }\n return next;\n }\n\n // ### `_readBlankNodePunctuation` reads punctuation in a blank node\n _readBlankNodePunctuation(token) {\n let next, resetInversePredicate = false;\n switch (token.type) {\n // Semicolon means the subject is shared; predicate and object are different\n case ';':\n resetInversePredicate = this._inversePredicate;\n next = this._readPredicate;\n break;\n // Comma means both the subject and predicate are shared; the object is different\n case ',':\n next = this._readObject;\n break;\n // Annotation syntax applies to the quad just read, exactly as it does\n // outside of a blank node property list\n case '~':\n case '{|':\n return this._readAnnotationStart(token);\n case '|}':\n return this._error('Unexpected annotation syntax closing', token);\n default:\n return this._error(`Expected punctuation to follow \"${this._object.id}\"`, token);\n }\n // A quad has been completed now, so return it\n this._emitCurrent(this._subject, this._predicate, this._object, this._graph);\n if (resetInversePredicate)\n this._inversePredicate = false;\n return next;\n }\n\n // ### `_readQuadPunctuation` reads punctuation after a quad\n _readQuadPunctuation(token) {\n if (token.type !== '.')\n return this._error('Expected dot to follow quad', token);\n return this._readInTopContext;\n }\n\n // ### `_readPrefix` reads the prefix of a prefix declaration\n _readPrefix(token) {\n if (token.type !== 'prefix')\n return this._error('Expected prefix to follow @prefix', token);\n this._prefix = token.value;\n return this._readPrefixIRI;\n }\n\n // ### `_readPrefixIRI` reads the IRI of a prefix declaration\n _readPrefixIRI(token) {\n if (token.type !== 'IRI')\n return this._error(`Expected IRI to follow prefix \"${this._prefix}:\"`, token);\n const prefixNode = this._readEntity(token);\n if (this._prefixChanges !== null)\n this._prefixChanges.push(this._prefix, this._prefixes[this._prefix]);\n this._prefixes[this._prefix] = prefixNode.value;\n this._prefixCallback(this._prefix, prefixNode);\n return this._readDeclarationPunctuation;\n }\n\n // ### `_readBaseIRI` reads the IRI of a base declaration\n _readBaseIRI(token) {\n const iri = token.type === 'IRI' && this._resolveIRI(token.value);\n if (!iri)\n return this._error('Expected valid IRI to follow base declaration', token);\n this._setBase(iri);\n return this._readDeclarationPunctuation;\n }\n\n // ### `_isValidVersion` checks if the given version is valid for this parser to handle.\n _isValidVersion(version) {\n return this._parseUnsupportedVersions || N3Parser.SUPPORTED_VERSIONS.includes(version);\n }\n\n // ### `_readVersion` reads version string declaration\n _readVersion(token) {\n if (token.type !== 'literal')\n return this._error('Expected literal to follow version declaration', token);\n // Only short strings are allowed, so no numbers or booleans (which have a datatype prefix)\n if (token.prefix !== '' || token.tripleQuoted)\n return this._error('Version declarations must use single quotes', token);\n this._versionCallback(token.value);\n if (!this._isValidVersion(token.value))\n return this._error(`Detected unsupported version: \"${token.value}\"`, token);\n return this._readDeclarationPunctuation;\n }\n\n // ### `_readNamedGraphLabel` reads the label of a named graph\n _readNamedGraphLabel(token) {\n switch (token.type) {\n case 'IRI':\n case 'blank':\n case 'prefixed':\n return this._readSubject(token), this._readGraph;\n case '[':\n return this._readNamedGraphBlankLabel;\n default:\n return this._error('Invalid graph label', token);\n }\n }\n\n // ### `_readNamedGraphLabel` reads a blank node label of a named graph\n _readNamedGraphBlankLabel(token) {\n if (token.type !== ']')\n return this._error('Invalid graph label', token);\n this._subject = this._factory.blankNode();\n return this._readGraph;\n }\n\n // ### `_readDeclarationPunctuation` reads the punctuation of a declaration\n _readDeclarationPunctuation(token) {\n // SPARQL-style declarations don't have punctuation\n if (this._sparqlStyle) {\n this._sparqlStyle = false;\n return this._getStatementReader().call(this, token);\n }\n\n if (token.type !== '.')\n return this._error('Expected declaration to end with a dot', token);\n return this._getStatementReader();\n }\n\n // Reads a list of quantified symbols from a @forSome or @forAll statement\n _readQuantifierList(token) {\n let entity;\n switch (token.type) {\n case 'IRI':\n case 'prefixed':\n if ((entity = this._readEntity(token, true)) !== undefined)\n break;\n default:\n return this._error(`Unexpected ${token.type}`, token);\n }\n // Without explicit quantifiers, map entities to a quantified entity\n if (!this._explicitQuantifiers) {\n if (this._quantifiedChanges !== null)\n this._quantifiedChanges.push(entity.id, this._quantified[entity.id]);\n this._quantified[entity.id] = this._factory[this._quantifier](this._factory.blankNode().value);\n }\n // With explicit quantifiers, output the reified quantifier\n else {\n // If this is the first item, start a new quantifier list\n if (this._subject === null)\n this._emit(this._graph || this.DEFAULTGRAPH, this._predicate,\n this._subject = this._factory.blankNode(), this.QUANTIFIERS_GRAPH);\n // Otherwise, continue the previous list\n else\n this._emit(this._subject, this.RDF_REST,\n this._subject = this._factory.blankNode(), this.QUANTIFIERS_GRAPH);\n // Output the list item\n this._emit(this._subject, this.RDF_FIRST, entity, this.QUANTIFIERS_GRAPH);\n }\n return this._readQuantifierPunctuation;\n }\n\n // Reads punctuation from a @forSome or @forAll statement\n _readQuantifierPunctuation(token) {\n // Read more quantifiers\n if (token.type === ',')\n return this._readQuantifierList;\n // End of the quantifier list\n else {\n // With explicit quantifiers, close the quantifier list\n if (this._explicitQuantifiers) {\n this._emit(this._subject, this.RDF_REST, this.RDF_NIL, this.QUANTIFIERS_GRAPH);\n this._subject = null;\n }\n // Read a dot\n this._readCallback = this._getContextEndReader();\n return this._readCallback(token);\n }\n }\n\n // ### `_getPathReader` reads a potential path and then resumes with the given function\n _getPathReader(afterPath, position) {\n this._afterPath = afterPath;\n this._pathPosition = position || (this._predicate === null ? 'subject' : 'object');\n return this._readPath;\n }\n\n // ### `_getPathEndReader` continues reading after a term that might start a path,\n // given the pending token that follows the term (or `null` if it was consumed)\n _getPathEndReader(token, afterPath, position) {\n // Other pending tokens are not handled here\n if (token !== null && token.type !== '!' && token.type !== '^')\n return null;\n const reader = this._getPathReader(afterPath, position);\n // If no token is pending, wait for the next one; otherwise, consume it now\n return token === null ? reader : reader.call(this, token);\n }\n\n // ### `_readPath` reads a potential path\n _readPath(token) {\n switch (token.type) {\n // Forward path\n case '!': return this._readForwardPath;\n // Backward path\n case '^': return this._readBackwardPath;\n // Not a path; resume reading where we left off\n default:\n const afterPath = this._afterPath;\n const stack = this._contextStack, parent = stack.length && stack[stack.length - 1];\n // If we were reading a list item, we still need to output it\n if (parent && parent.type === 'item') {\n // The list item is the remaining subejct after reading the path\n const item = this._subject;\n // Switch back to the context of the list\n this._restoreContext('item', token);\n // Output the list item\n this._emit(this._subject, this.RDF_FIRST, item, this._graph);\n }\n this._afterPath = null;\n this._pathPosition = null;\n return afterPath.call(this, token);\n }\n }\n\n // ### `_readForwardPath` reads a '!' path\n _readForwardPath(token) {\n let subject, predicate;\n const object = this._factory.blankNode();\n // The next token is the predicate\n if ((predicate = this._readEntity(token)) === undefined)\n return;\n // Replace the path expression with the generated object in its current position\n if (this._pathPosition === 'subject')\n subject = this._subject, this._subject = object;\n else if (this._pathPosition === 'predicate')\n subject = this._predicate, this._predicate = object;\n else\n subject = this._object, this._object = object;\n // Emit the path's current quad and read its next section\n this._emit(subject, predicate, object, this._graph);\n return this._readPath;\n }\n\n // ### `_readBackwardPath` reads a '^' path\n _readBackwardPath(token) {\n const subject = this._factory.blankNode();\n let predicate, object;\n // The next token is the predicate\n if ((predicate = this._readEntity(token)) === undefined)\n return;\n // Replace the path expression with the generated subject in its current position\n if (this._pathPosition === 'subject')\n object = this._subject, this._subject = subject;\n else if (this._pathPosition === 'predicate')\n object = this._predicate, this._predicate = subject;\n else\n object = this._object, this._object = subject;\n // Emit the path's current quad and read its next section\n this._emit(subject, predicate, object, this._graph);\n return this._readPath;\n }\n\n// ### `_readTripleTermTail` reads the end of a triple term\n _readTripleTermTail(token) {\n if (token.type !== ')>>')\n return this._error(`Expected )>> but got ${token.type}`, token);\n // Read the quad and restore the previous context\n const quad = this._createQuad(this._subject, this._predicate, this._object,\n this._graph, this._inversePredicate);\n this._restoreContext('<<(', token);\n this._tripleTermDepth--;\n\n // If we're in a list, continue processing that list\n const stack = this._contextStack, parent = stack.length && stack[stack.length - 1];\n if (parent && parent.type === 'list') {\n this._emit(this._subject, this.RDF_FIRST, quad, this._graph);\n return this._getContextEndReader();\n }\n // If the triple was the subject, continue by reading the predicate.\n if (this._subject === null) {\n this._subject = quad;\n return this._readPredicate;\n }\n // If the triple was the object, read context end.\n else {\n this._object = quad;\n return this._getContextEndReader();\n }\n }\n\n // ### `_readReifiedTripleTailOrReifier` reads a reifier or the end of a nested reified triple\n _readReifiedTripleTailOrReifier(token) {\n if (token.type === '~') {\n return this._readReifier;\n }\n return this._readReifiedTripleTail(token);\n }\n\n // ### `_readReifiedTripleTail` reads the end of a nested reified triple\n _readReifiedTripleTail(token) {\n if (token.type !== '>>')\n return this._error(`Expected >> but got ${token.type}`, token);\n // Read the triple term and restore the previous context\n this._tripleTerm = null;\n const reifier = this._readTripleTerm();\n this._restoreContext('<<', token);\n this._tripleTermDepth--;\n\n // // If we're in a list, continue processing that list\n const stack = this._contextStack, parent = stack.length && stack[stack.length - 1];\n if (parent && parent.type === 'list') {\n this._emit(this._subject, this.RDF_FIRST, reifier, this._graph);\n return this._getContextEndReader();\n }\n // If the triple was the subject, continue by reading the predicate.\n else if (this._subject === null) {\n this._subject = reifier;\n return this._readPredicateOrReifierTripleEnd;\n }\n // If the triple was the object, read context end.\n else {\n this._object = reifier;\n return this._getContextEndReader();\n }\n }\n\n _readPredicateOrReifierTripleEnd(token) {\n if (token.type === '.') {\n this._subject = null;\n return this._readPunctuation(token);\n }\n return this._readPredicate(token);\n }\n\n // ### `_readReifier` reads the triple term identifier after a tilde when in a reifying triple.\n _readReifier(token) {\n // Without an identifier, the reifier is a fresh blank node\n if (token.type === '>>')\n return this._readReifiedTripleTail(token);\n this._reifier = this._readEntity(token);\n return this._readReifiedTripleTail;\n }\n\n // ### `_readAnnotationStart` reads the first reifier or annotation block after an object,\n // which completes the annotated quad\n _readAnnotationStart(token) {\n this._emitCurrent(this._subject, this._predicate, this._object, this._graph);\n // A new triple is annotated, so its triple term cannot be reused\n this._tripleTerm = null;\n return this._readAnnotation(token);\n }\n\n // ### `_readAnnotation` reads what follows an annotated quad:\n // further reifiers or annotation blocks for that same quad, or punctuation\n _readAnnotation(token) {\n switch (token.type) {\n case '~':\n return this._readReifierInAnnotation;\n case '{|':\n return this._readAnnotationBlockHead(token);\n }\n // The annotated quad was already emitted when its annotation started,\n // so continue without emitting it a second time\n this._tripleTerm = null;\n switch (token.type) {\n // The subject stays shared with the next predicate-object pair\n case ';':\n this._inversePredicate = false;\n return this._readPredicate;\n // The subject and predicate stay shared with the next object\n case ',':\n return this._readObject;\n default:\n this._subject = null;\n // Resume in the enclosing context\n return this._getContextEndReader().call(this, token);\n }\n }\n\n // ### `_readReifierInAnnotation` reads the optional reifier after a tilde in annotation syntax\n _readReifierInAnnotation(token) {\n switch (token.type) {\n case 'IRI':\n case 'typeIRI':\n case 'type':\n case 'prefixed':\n case 'blank':\n case 'var':\n this._reifier = this._readEntity(token);\n return this._readAnnotationBlockOrReifier;\n }\n // Without an identifier, the reifier is a fresh blank node\n this._reifier = this._factory.blankNode();\n return this._readAnnotationBlockOrReifier(token);\n }\n\n // ### `_readAnnotationBlockOrReifier` reads what follows a reifier:\n // either an annotation block, which uses the reifier as its subject,\n // or anything else, in which case the reifier stands alone\n _readAnnotationBlockOrReifier(token) {\n if (token.type === '{|')\n return this._readAnnotationBlockHead(token);\n this._readTripleTerm();\n return this._readAnnotation(token);\n }\n\n // ### `_readAnnotationBlockHead` opens an annotation block,\n // whose predicate-object pairs describe the reifier of the annotated quad\n _readAnnotationBlockHead(token) {\n const reifier = this._readTripleTerm();\n this._saveContext('annotation', this._graph, this._subject, this._predicate, this._object);\n // Restored when the block closes, so further annotations reuse the same triple term\n this._contextStack[this._contextStack.length - 1].tripleTerm = this._tripleTerm;\n this._subject = reifier;\n this._predicate = this._object = this._tripleTerm = null;\n this._inversePredicate = false;\n this._validAnnotation = false;\n return this._readPredicate;\n }\n\n // ### `_readAnnotationBlockPunctuation` reads punctuation inside an annotation block\n _readAnnotationBlockPunctuation(token) {\n const stack = this._contextStack;\n if (token.type === '|}') {\n if (!stack.length || stack[stack.length - 1].type !== 'annotation')\n return this._error('Unexpected annotation syntax closing', token);\n if (!this._validAnnotation)\n return this._error('Annotation block can not be empty', token);\n // Emit the last quad of the block, unless a trailing semicolon already did\n if (this._subject !== null)\n this._emitCurrent(this._subject, this._predicate, this._object, this._graph);\n // Return to the annotated quad, which can be followed by more annotations\n const { tripleTerm } = stack[stack.length - 1];\n this._restoreContext('annotation', token);\n this._tripleTerm = tripleTerm;\n return this._readAnnotation;\n }\n // Otherwise, punctuation inside a block works like inside a blank node property list\n return this._readBlankNodePunctuation(token);\n }\n\n _readTripleTerm() {\n const stack = this._contextStack, parent = stack.length && stack[stack.length - 1];\n const parentGraph = parent ? parent.graph : undefined;\n const reifier = this._reifier || this._factory.blankNode();\n this._reifier = null;\n this._tripleTerm = this._tripleTerm || this._createQuad(\n this._subject, this._predicate, this._object, null, this._inversePredicate,\n );\n this._emit(reifier, this.RDF_REIFIES, this._tripleTerm, parentGraph || this._graph || this.DEFAULTGRAPH);\n return reifier;\n }\n\n // ### `_getContextEndReader` gets the next reader function at the end of a context\n _getContextEndReader() {\n const contextStack = this._contextStack;\n if (!contextStack.length)\n return this._readPunctuation;\n\n switch (contextStack[contextStack.length - 1].type) {\n case 'blank':\n return this._readBlankNodeTail;\n case 'list':\n return this._readListItem;\n case 'formula':\n return this._readFormulaTail;\n case '<<(':\n return this._readTripleTermTail;\n case '<<':\n return this._readReifiedTripleTailOrReifier;\n case 'annotation':\n return this._readAnnotationBlockPunctuation;\n }\n }\n\n // ### `_createQuad` creates a quad\n _createQuad(subject, predicate, object, graph) {\n return this._factory.quad(subject, predicate, object, graph || this.DEFAULTGRAPH);\n }\n\n // ### `_createQuadInDirection` creates a quad in the active predicate direction\n _createQuadInDirection(subject, predicate, object, graph, inversePredicate) {\n return inversePredicate ?\n this._factory.quad(object, predicate, subject, graph || this.DEFAULTGRAPH) :\n this._factory.quad(subject, predicate, object, graph || this.DEFAULTGRAPH);\n }\n\n // ### `_emitInDirection` sends a quad in the active predicate direction\n _emitInDirection(subject, predicate, object, graph, inversePredicate) {\n this._callback(null, this._createQuad(subject, predicate, object, graph, inversePredicate));\n }\n\n // ### `_emitCurrentInDirection` sends a quad in the current predicate direction\n _emitCurrentInDirection(subject, predicate, object, graph) {\n this._callback(null, this._createQuad(subject, predicate, object, graph, this._inversePredicate));\n }\n\n // ### `_emit` sends a quad through the callback\n _emit(subject, predicate, object, graph) {\n this._callback(null, this._factory.quad(subject, predicate, object, graph || this.DEFAULTGRAPH));\n }\n\n // ### `_error` emits an error message through the callback\n _error(message, token) {\n // Bound input-derived content while preserving the line suffix and full token context.\n const suffix = ` on line ${token.line}.`;\n if (message.length + suffix.length > 200)\n message = `${message.slice(0, 199 - suffix.length)}\u2026`;\n const err = new Error(`${message}${suffix}`);\n err.context = {\n token: token,\n line: token.line,\n previousToken: this._lexer.previousToken,\n };\n this._callback(err);\n this._callback = noop;\n }\n\n // ### `_resolveIRI` resolves an IRI against the base path\n _resolveIRI(iri) {\n return /^[a-z][a-z0-9+.-]*:/i.test(iri) ? iri : this._resolveRelativeIRI(iri);\n }\n\n // ### `_resolveRelativeIRI` resolves an IRI against the base path,\n // assuming that a base path has been set and that the IRI is indeed relative\n _resolveRelativeIRI(iri) {\n // An empty relative IRI indicates the base IRI\n if (!iri.length)\n return this._base;\n // Decide resolving strategy based in the first character\n switch (iri[0]) {\n // Resolve relative fragment IRIs against the base IRI\n case '#': return this._base + iri;\n // Resolve relative query string IRIs by replacing the query string\n case '?': {\n const queryPos = this._base.indexOf('?');\n return (queryPos < 0 ? this._base : this._base.substr(0, queryPos)) + iri;\n }\n // Resolve root-relative IRIs at the root of the base IRI\n case '/':\n // Resolve scheme-relative IRIs to the scheme,\n // keeping the reference's authority intact (RFC 3986 \u00A75.2.4)\n if (iri[1] !== '/')\n return this._baseRoot + this._removeDotSegments(iri);\n // Without a base scheme, a leading ':' marks where the authority starts\n return this._baseScheme ? this._removeDotSegments(this._baseScheme + iri) :\n this._removeDotSegments(`:${iri}`).substr(1);\n // Resolve all other IRIs at the base IRI's path\n default:\n // Relative IRIs cannot contain a colon in the first path segment\n if (/^[^/:]*:/.test(iri))\n return null;\n // Only scan the joined IRI for dot segments if either part can contain them,\n // as the base path can be long and the joined IRI would need to be copied\n return this._basePathHasDotSegments || pathDotSegments.test(iri) ?\n this._removeDotSegments(this._basePath + iri) : this._basePath + iri;\n }\n }\n\n // ### `_removeDotSegments` resolves './' and '../' path segments in an IRI as per RFC3986\n _removeDotSegments(iri) {\n // Don't modify the IRI if it does not contain any dot segments\n if (!dotSegments.test(iri))\n return iri;\n\n // Start with an imaginary slash before the IRI in order to resolve trailing './' and '../'\n const length = iri.length;\n let result = '', i = -1, pathStart = -1, segmentStart = 0, next = '/';\n\n while (i < length) {\n switch (next) {\n // The path starts with the first slash after the authority\n case ':':\n if (pathStart < 0) {\n // Skip two slashes before the authority\n if (iri[++i] === '/' && iri[++i] === '/')\n // Skip to the end of the authority\n while ((pathStart = i + 1) < length && iri[pathStart] !== '/' && iri[pathStart] !== '?' && iri[pathStart] !== '#')\n i = pathStart;\n }\n break;\n // Don't modify a query string or fragment\n case '?':\n case '#':\n i = length;\n break;\n // Handle '/.' or '/..' path segments\n case '/':\n if (iri[i + 1] === '.') {\n next = iri[++i + 1];\n switch (next) {\n // Remove a '/.' segment\n case '/':\n result += iri.substring(segmentStart, i - 1);\n segmentStart = i + 1;\n break;\n // Remove a trailing '/.' segment\n case undefined:\n case '?':\n case '#':\n return result + iri.substring(segmentStart, i) + iri.substr(i + 1);\n // Remove a '/..' segment\n case '.':\n next = iri[++i + 1];\n if (next === undefined || next === '/' || next === '?' || next === '#') {\n result += iri.substring(segmentStart, i - 2);\n // Try to remove the parent path from result\n if ((segmentStart = result.lastIndexOf('/')) >= pathStart)\n result = result.substr(0, segmentStart);\n // Remove a trailing '/..' segment\n if (next !== '/')\n return `${result}/${iri.substr(i + 1)}`;\n segmentStart = i + 1;\n }\n }\n }\n }\n next = iri[++i];\n }\n return result + iri.substring(segmentStart);\n }\n\n // ## Public methods\n\n // ### `parse` parses the N3 input and emits each parsed quad through the onQuad callback.\n parse(input, quadCallback, prefixCallback, versionCallback) {\n // The second parameter also accepts an object of named callbacks.\n // As a second and third parameter it still accepts a separate quadCallback and prefixCallback for backward compatibility as well\n let onQuad, onPrefix, onComment, onVersion, onDirective, onToken, onTokenEnd;\n if (quadCallback && (quadCallback.onQuad || quadCallback.onPrefix || quadCallback.onComment || quadCallback.onVersion ||\n quadCallback.onDirective || quadCallback.onToken || quadCallback.onTokenEnd)) {\n onQuad = quadCallback.onQuad;\n onPrefix = quadCallback.onPrefix;\n onComment = quadCallback.onComment;\n onVersion = quadCallback.onVersion;\n onDirective = quadCallback.onDirective;\n onToken = quadCallback.onToken;\n onTokenEnd = quadCallback.onTokenEnd;\n }\n else {\n onQuad = quadCallback;\n onPrefix = prefixCallback;\n onVersion = versionCallback;\n }\n // The read callback is the next function to be executed when a token arrives.\n // We start reading in the top context.\n this._readCallback = this._readBeforeTopContext;\n // A parse that failed part-way can have left scopes and a statement open\n this._contextStack = [];\n this._graph = this._subject = this._predicate = this._object = null;\n this._tripleTerm = this._reifier = null;\n this._sparqlStyle = false;\n this._prefixes = Object.create(null);\n this._prefixes._ = this._blankNodePrefix ? this._blankNodePrefix.substr(2)\n : `b${blankNodePrefix++}_`;\n // Optionally bind the N3 empty prefix to the document's local namespace\n if (this._n3Mode && this._implicitEmptyPrefix && this._base)\n this._prefixes[''] = this._resolveIRI('#');\n this._prefixCallback = onPrefix || noop;\n this._versionCallback = onVersion || noop;\n this._directiveCallback = onDirective || noop;\n this._inversePredicate = false;\n this._expectOf = false;\n this._quantified = Object.create(null);\n // Changes to prefixes and quantifiers in nested scopes, to undo when leaving them\n this._prefixChanges = null;\n this._quantifiedChanges = null;\n this._emptyFormula = false;\n this._tripleTermDepth = 0;\n\n const readGrammarToken = token => {\n return this._readCallback = this._readCallback(token);\n };\n let readToken = readGrammarToken;\n\n // Comments bypass the grammar, but participate in the token lifecycle.\n if (onComment || this._lexer.comments) {\n this._lexer.comments = true;\n readToken = token => {\n if (token.type !== 'comment')\n return readGrammarToken(token);\n if (onComment) onComment(token.value);\n return this._readCallback;\n };\n }\n\n // Install observers once per parse, leaving the ordinary token path intact.\n if (onToken || onTokenEnd) {\n const consumeToken = readToken;\n readToken = token => {\n try {\n try {\n if (onToken) onToken(token);\n return consumeToken(token);\n }\n finally {\n if (onTokenEnd) onTokenEnd(token);\n }\n }\n catch (error) {\n // A consumer exception aborts this parse, including later chunks.\n this._readCallback = null;\n throw error;\n }\n };\n }\n\n // Parse synchronously if no quad callback is given.\n if (!onQuad) {\n const quads = [];\n let error;\n this._callback = (e, t) => { e ? (error = e) : t && quads.push(t); };\n const lexer = this._lexer;\n // Without callbacks, nothing observes the parse before the whole document\n // has lexed, so tokens can be parsed as they are lexed instead of being\n // collected into an array first. A lexer that replaces the built-in\n // tokenize keeps going through its own implementation.\n if (!onPrefix && !onVersion && !onDirective && !onComment && !onToken && !onTokenEnd &&\n lexer.tokenize === N3Lexer.prototype.tokenize && typeof lexer._tokenizeString === 'function') {\n // A lexical error used to stop the parse before any token was read,\n // so undo base declarations that were read before it\n const base = [this._base, this._basePath, this._baseRoot, this._baseScheme];\n lexer._tokenizeString(input, (e, token) => {\n if (e) {\n [this._base, this._basePath, this._baseRoot, this._baseScheme] = base;\n this._callback(e), this._callback = noop;\n }\n else if (this._readCallback) readToken(token);\n });\n }\n else\n lexer.tokenize(input).every(readToken);\n if (error) throw error;\n return quads;\n }\n\n const processNextToken = (error, token) => {\n if (error !== null)\n this._callback(error), this._callback = noop;\n else if (this._readCallback)\n readToken(token);\n };\n\n // Parse asynchronously otherwise, executing the read callback when a token arrives\n this._callback = onQuad;\n this._lexer.tokenize(input, processNextToken);\n }\n}\n\n// ### `undoChanges` restores the entries of a map from a list of key and previous value pairs\nfunction undoChanges(map, changes) {\n for (let i = changes.length - 2; i >= 0; i -= 2) {\n if (changes[i + 1] === undefined)\n delete map[changes[i]];\n else\n map[changes[i]] = changes[i + 1];\n }\n}\n\n// The empty function\nfunction noop() {}\n\n// Initializes the parser with the given data factory\nfunction initDataFactory(parser, factory) {\n parser._factory = factory;\n\n parser.DEFAULTGRAPH = factory.defaultGraph();\n\n // Set common named nodes\n parser.RDF_FIRST = factory.namedNode(namespaces.rdf.first);\n parser.RDF_REST = factory.namedNode(namespaces.rdf.rest);\n parser.RDF_NIL = factory.namedNode(namespaces.rdf.nil);\n parser.RDF_REIFIES = factory.namedNode(namespaces.rdf.reifies);\n parser.N3_FORALL = factory.namedNode(namespaces.r.forAll);\n parser.N3_FORSOME = factory.namedNode(namespaces.r.forSome);\n parser.N3_TRUE = factory.literal('true', factory.namedNode(namespaces.xsd.boolean));\n parser.ABBREVIATIONS = {\n 'a': factory.namedNode(namespaces.rdf.type),\n '=': factory.namedNode(namespaces.owl.sameAs),\n '>': factory.namedNode(namespaces.log.implies),\n '<': factory.namedNode(namespaces.log.isImpliedBy),\n };\n parser.QUANTIFIERS_GRAPH = factory.namedNode('urn:n3:quantifiers');\n}\nN3Parser.SUPPORTED_VERSIONS = [\n '1.2',\n '1.2-basic',\n '1.1',\n];\ninitDataFactory(N3Parser.prototype, N3DataFactory);\n", "// **N3Util** provides N3 utility functions.\n\nimport N3DataFactory from './N3DataFactory';\n\n// Tests whether the given term represents an IRI\nexport function isNamedNode(term) {\n return !!term && term.termType === 'NamedNode';\n}\n\n// Tests whether the given term represents a blank node\nexport function isBlankNode(term) {\n return !!term && term.termType === 'BlankNode';\n}\n\n// Tests whether the given term represents a literal\nexport function isLiteral(term) {\n return !!term && term.termType === 'Literal';\n}\n\n// Tests whether the given term represents a variable\nexport function isVariable(term) {\n return !!term && term.termType === 'Variable';\n}\n\n// Tests whether the given term represents a quad\nexport function isQuad(term) {\n return !!term && term.termType === 'Quad';\n}\n\n// Tests whether the given term represents the default graph\nexport function isDefaultGraph(term) {\n return !!term && term.termType === 'DefaultGraph';\n}\n\n// Tests whether the given quad is in the default graph\nexport function inDefaultGraph(quad) {\n return isDefaultGraph(quad.graph);\n}\n\n// Creates a function that prepends the given IRI to a local name\nexport function prefix(iri, factory) {\n return prefixes({ '': iri.value || iri }, factory)('');\n}\n\n// Creates a function that allows registering and expanding prefixes\nexport function prefixes(defaultPrefixes, factory) {\n // Add all of the default prefixes\n const prefixes = Object.create(null);\n for (const prefix in defaultPrefixes)\n processPrefix(prefix, defaultPrefixes[prefix]);\n // Set the default factory if none was specified\n factory = factory || N3DataFactory;\n\n // Registers a new prefix (if an IRI was specified)\n // or retrieves a function that expands an existing prefix (if no IRI was specified)\n function processPrefix(prefix, iri) {\n // Create a new prefix if an IRI is specified or the prefix doesn't exist\n if (typeof iri === 'string') {\n // Create a function that expands the prefix\n const cache = Object.create(null);\n prefixes[prefix] = local => {\n return cache[local] || (cache[local] = factory.namedNode(iri + local));\n };\n }\n else if (!(prefix in prefixes)) {\n throw new Error(`Unknown prefix: ${prefix}`);\n }\n return prefixes[prefix];\n }\n return processPrefix;\n}\n", "export function escapeRegex(regex) {\n return regex.replace(/[.*+?^${}()|[\\]\\\\/-]/g, '\\\\$&');\n}\n", "import { escapeRegex } from './Util';\n\n// Do not handle base IRIs without scheme, and currently unsupported cases:\n// - file: IRIs (which could also use backslashes)\n// - IRIs containing /. or /.. or //\nconst BASE_UNSUPPORTED = /^:?[^:?#]*(?:[?#]|$)|^file:|^[^:]*:\\/*[^?#]+?\\/(?:\\.\\.?(?:\\/|$)|\\/)/i;\n// Supported suffixes have a first path segment other than . or ..,\n// and further path segments of at least 3 characters\nconst SUFFIX_SUPPORTED = /^(?:(?!\\.\\.?(?:[/?#]|$))[^/?#]+(?:\\/[^/?#]{3,})*\\/?)?(?:[?#]|$)/;\nconst CURRENT = './';\nconst PARENT = '../';\nconst QUERY = '?';\nconst FRAGMENT = '#';\n\nexport default class BaseIRI {\n constructor(base) {\n this.base = base;\n this._baseLength = 0;\n this._baseMatcher = null;\n this._pathReplacements = new Array(base.length + 1);\n }\n\n static supports(base) {\n return !BASE_UNSUPPORTED.test(base);\n }\n\n _getBaseMatcher() {\n if (this._baseMatcher)\n return this._baseMatcher;\n if (!BaseIRI.supports(this.base))\n return this._baseMatcher = /.^/;\n\n // Extract the scheme\n const scheme = /^[^:]*:\\/*/.exec(this.base)[0];\n const regexHead = ['^', escapeRegex(scheme)];\n const regexTail = [];\n\n // Generate a regex for every path segment\n const segments = [], segmenter = /[^/?#]*([/?#])/y;\n let segment, query = 0, fragment = 0, last = segmenter.lastIndex = scheme.length;\n while (!query && !fragment && (segment = segmenter.exec(this.base))) {\n // Truncate base resolution path at fragment start\n if (segment[1] === FRAGMENT)\n fragment = segmenter.lastIndex - 1;\n else {\n // Create regex that matches the segment\n regexHead.push(escapeRegex(segment[0]), '(?:');\n regexTail.push(')?');\n\n // Create dedicated query string replacement\n if (segment[1] !== QUERY)\n segments.push(last = segmenter.lastIndex);\n else {\n query = last = segmenter.lastIndex;\n fragment = this.base.indexOf(FRAGMENT, query);\n this._pathReplacements[query] = QUERY;\n }\n }\n }\n\n // Precalculate parent path substitutions\n for (let i = 0; i < segments.length; i++)\n this._pathReplacements[segments[i]] = PARENT.repeat(segments.length - i - 1);\n this._pathReplacements[segments[segments.length - 1]] = CURRENT;\n\n // Add the remainder of the base IRI (without fragment) to the regex\n this._baseLength = fragment > 0 ? fragment : this.base.length;\n regexHead.push(\n escapeRegex(this.base.substring(last, this._baseLength)),\n query ? '(?:#|$)' : '(?:[?#]|$)',\n );\n return this._baseMatcher = new RegExp([...regexHead, ...regexTail].join(''));\n }\n\n toRelative(iri) {\n // Unsupported or non-matching base IRI\n const match = this._getBaseMatcher().exec(iri);\n if (!match)\n return iri;\n\n // Exact base IRI match\n const length = match[0].length;\n if (length === this._baseLength && length === iri.length)\n return '';\n\n // Parent path match\n const parentPath = this._pathReplacements[length];\n if (parentPath) {\n const suffix = iri.substring(length);\n // Don't abbreviate unsupported path\n if (parentPath !== QUERY && !SUFFIX_SUPPORTED.test(suffix))\n return iri;\n // Omit ./ with fragment or query string,\n // unless the first segment has a colon and would be read as a scheme\n if (parentPath === CURRENT && /^[^?#]/.test(suffix) &&\n (suffix.indexOf(':') < 0 || !/^[^/?#]*:/.test(suffix)))\n return suffix;\n // Append suffix to relative parent path\n return parentPath + suffix;\n }\n\n // Fragment or query string, so include delimiter\n return iri.substring(length - 1);\n }\n}\n", "// **N3Writer** writes N3 documents.\nimport namespaces from './IRIs';\nimport { default as N3DataFactory, Term } from './N3DataFactory';\nimport { isDefaultGraph } from './N3Util';\nimport BaseIRI from './BaseIRI';\nimport { escapeRegex } from './Util';\n\nconst DEFAULTGRAPH = N3DataFactory.defaultGraph();\n\nconst { rdf, xsd } = namespaces;\nconst { hasOwnProperty } = Object.prototype;\n\n// Characters that require escaping in Turtle, TriG, and N3,\n// where characters outside the Basic Multilingual Plane are escaped as well\nconst escape = /[\"\\\\\\t\\n\\r\\b\\f\\u0000-\\u0019\\ud800-\\udbff]/,\n escapeAll = /[\"\\\\\\t\\n\\r\\b\\f\\u0000-\\u0019]|[\\ud800-\\udbff][\\udc00-\\udfff]/g,\n // Characters that require escaping in canonical N-Triples and N-Quads:\n // U+0000\u2013U+001F, `\"`, `\\`, U+007F, U+FFFE, and U+FFFF.\n // A negated class is as fast to test as a shorter class listing characters.\n canonicalEscape = /[^ !#-\\[\\]-~\\u0080-\\uFFFD]/,\n canonicalEscapeAll = /[^ !#-\\[\\]-~\\u0080-\\uFFFD]/g,\n escapedCharacters = {\n '\\\\': '\\\\\\\\', '\"': '\\\\\"', '\\t': '\\\\t',\n '\\n': '\\\\n', '\\r': '\\\\r', '\\b': '\\\\b', '\\f': '\\\\f',\n };\n\n// Characters that a version label cannot contain\nconst invalidVersionLabel = /[\"\\\\\\u0000-\\u001f\\u007f]|[\\ud800-\\udbff](?![\\udc00-\\udfff])|(?:^|[^\\ud800-\\udbff])[\\udc00-\\udfff]/;\n\n// A local name (PN_LOCAL) as written in a prefixed name, without backslash escapes,\n// so that it denotes the same characters as the IRI it is taken from.\n// Characters outside the Basic Multilingual Plane are escaped before matching, so they never occur.\nconst localNameStart = 'A-Za-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF' +\n '\\\\u200C\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD_:0-9',\n localNameChar = `${localNameStart}\\\\-\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F\\\\u2040`,\n percent = '%[0-9A-Fa-f]{2}',\n localName = new RegExp(`^(?:(?:[${localNameStart}]|${percent})` +\n `(?:(?:[${localNameChar}.]|${percent})*(?:[${localNameChar}]|${percent}))?)?$`);\n\n// ## Placeholder class to represent already pretty-printed terms\nclass SerializedTerm extends Term {\n // Pretty-printed nodes are not equal to any other node\n // (e.g., [] does not equal [])\n equals(other) {\n return other === this;\n }\n}\n\n// ## Constructor\nexport default class N3Writer {\n constructor(outputStream, options) {\n // ### `_prefixRegex` matches a prefixed name or IRI that begins with one of the added prefixes\n this._prefixRegex = /$0^/;\n this._hasPrefixes = false;\n\n // Shift arguments if the first argument is not a stream\n if (outputStream && typeof outputStream.write !== 'function')\n options = outputStream, outputStream = null;\n options = options || {};\n this._lists = options.lists;\n\n // If no output stream given, send the output as string through the end callback\n if (!outputStream) {\n let output = '';\n this._outputStream = {\n write(chunk, encoding, done) { output += chunk; done && done(); },\n end: done => { done && done(null, output); },\n };\n this._endStream = true;\n }\n else {\n this._outputStream = outputStream;\n this._endStream = options.end === undefined ? true : !!options.end;\n }\n\n // A version label is written as-is, so it cannot contain characters that need escaping,\n // nor unpaired surrogates (which cannot be encoded)\n if (options.version && invalidVersionLabel.test(options.version))\n throw new Error(`Invalid version label: ${JSON.stringify(options.version)}`);\n\n // Initialize writer, depending on the format\n this._subject = null;\n if (!(/triple|quad/i).test(options.format)) {\n this._lineMode = false;\n this._escape = escape, this._escapeAll = escapeAll, this._characterReplacer = characterReplacer;\n this._graph = DEFAULTGRAPH;\n if (options.version)\n this._write(`@version \"${options.version}\".\\n`);\n this._prefixIRIs = Object.create(null);\n // Escaped prefix IRIs and names for the prefix matcher, computed once per prefix\n this._prefixPatterns = Object.create(null);\n if (options.baseIRI) {\n this._baseIri = new BaseIRI(options.baseIRI);\n if (options.writeBase)\n this._write(`@base <${options.baseIRI}>.\\n`);\n }\n options.prefixes && this.addPrefixes(options.prefixes);\n }\n else {\n this._lineMode = true;\n this._writeQuad = this._writeQuadLine;\n // N-Triples and N-Quads are written in their canonical form\n this._escape = canonicalEscape, this._escapeAll = canonicalEscapeAll;\n this._characterReplacer = canonicalCharacterReplacer;\n if (options.version)\n this._write(`VERSION \"${options.version}\"\\n`);\n }\n }\n\n // ## Private methods\n\n // ### Whether the current graph is the default graph\n get _inDefaultGraph() {\n return DEFAULTGRAPH.equals(this._graph);\n }\n\n // ### `_write` writes the argument to the output stream\n _write(string, callback) {\n this._outputStream.write(string, 'utf8', callback);\n }\n\n // ### `_endStatement` finishes a pending statement and closes an open graph block\n _endStatement() {\n if (this._subject !== null) {\n this._write(this._inDefaultGraph ? '.\\n' : '\\n}\\n');\n this._subject = null;\n this._graph = DEFAULTGRAPH;\n }\n }\n\n // ### `_writeQuad` writes the quad to the output stream\n _writeQuad(subject, predicate, object, graph, done) {\n try {\n // Write the graph's label if it has changed\n // (the id-based fast path of `equals` would conflate\n // the empty named node `<>` with the default graph)\n if (graph !== this._graph &&\n (!graph.equals(this._graph) || graph.termType !== this._graph.termType)) {\n // Close the previous graph and start the new one\n this._write((this._subject === null ? '' : (this._inDefaultGraph ? '.\\n' : '\\n}\\n')) +\n (DEFAULTGRAPH.equals(graph) ? '' : `${this._encodeIriOrBlank(graph)} {\\n`));\n this._graph = graph;\n this._subject = null;\n }\n // Don't repeat the subject if it's the same\n if (subject === this._subject || subject.equals(this._subject)) {\n // Don't repeat the predicate if it's the same\n if (predicate === this._predicate || predicate.equals(this._predicate))\n this._write(`, ${this._encodeObject(object)}`, done);\n // Same subject, different predicate\n else\n this._write(`;\\n ${\n this._encodePredicate(this._predicate = predicate)} ${\n this._encodeObject(object)}`, done);\n }\n // Different subject; write the whole quad\n else\n this._write(`${(this._subject === null ? '' : '.\\n') +\n this._encodeSubject(this._subject = subject)} ${\n this._encodePredicate(this._predicate = predicate)} ${\n this._encodeObject(object)}`, done);\n }\n catch (error) { done && done(error); }\n }\n\n // ### `_writeQuadLine` writes the quad to the output stream as a single line\n _writeQuadLine(subject, predicate, object, graph, done) {\n // Write the quad without prefixes\n delete this._prefixMatch;\n this._write(this.quadToString(subject, predicate, object, graph), done);\n }\n\n // ### `quadToString` serializes a quad as a string\n quadToString(subject, predicate, object, graph) {\n return `${this._encodeSubject(subject)} ${\n predicate.termType === 'Literal' ?\n this._encodeLiteral(predicate) : this._encodeIriOrBlank(predicate)} ${\n this._encodeObject(object)\n }${graph && !isDefaultGraph(graph) ? ` ${this._encodeIriOrBlank(graph)} .\\n` : ' .\\n'}`;\n }\n\n // ### `quadsToString` serializes an array of quads as a string\n quadsToString(quads) {\n let quadsString = '';\n for (const quad of quads)\n quadsString += this.quadToString(quad.subject, quad.predicate, quad.object, quad.graph);\n return quadsString;\n }\n\n // ### `_encodeSubject` represents a subject\n _encodeSubject(entity) {\n switch (entity.termType) {\n case 'Quad':\n return this._encodeQuad(entity);\n // Literal subjects are only valid in N3\n case 'Literal':\n return this._encodeLiteral(entity);\n default:\n return this._encodeIriOrBlank(entity);\n }\n }\n\n // ### `_encodeIriOrBlank` represents an IRI or blank node\n _encodeIriOrBlank(entity) {\n // A blank node or list is represented as-is\n if (entity.termType !== 'NamedNode') {\n // If it is a list head, pretty-print it\n if (this._lists && hasOwnProperty.call(this._lists, entity.value))\n entity = this.list(this._lists[entity.value]);\n // Terms from this library already hold their serialization as id\n if (entity instanceof Term)\n return entity.id;\n return entity.termType === 'Variable' ? `?${entity.value}` : `_:${entity.value}`;\n }\n let iri = entity.value;\n // Use relative IRIs if requested and possible\n if (this._baseIri) {\n iri = this._baseIri.toRelative(iri);\n }\n // Escape special characters\n if (this._escape.test(iri))\n iri = iri.replace(this._escapeAll, this._characterReplacer);\n // Try to represent the IRI as prefixed name, unless no prefixes were added\n const prefixMatch = this._hasPrefixes ? (this._prefixRegex || this._createPrefixRegex()).exec(iri) : null;\n if (!prefixMatch)\n return `<${iri}>`;\n // An IRI that starts with a registered prefix IRI\n if (prefixMatch[1])\n return this._prefixIRIs[prefixMatch[1]] + prefixMatch[2];\n // An IRI that already looks like a prefixed name, if the rest is a valid local name\n return localName.test(iri.slice(prefixMatch[0].length)) ? iri : `<${iri}>`;\n }\n\n // ### `_encodeLiteral` represents a literal\n _encodeLiteral(literal) {\n // Escape special characters\n let value = literal.value;\n if (this._escape.test(value))\n value = value.replace(this._escapeAll, this._characterReplacer);\n\n // Write a language-tagged literal\n const language = literal.language;\n if (language) {\n const literalDirection = literal.direction;\n const direction = literalDirection ? `--${literalDirection}` : '';\n return `\"${value}\"@${language}${direction}`;\n }\n\n // Write dedicated literals per data type\n if (this._lineMode) {\n // Only abbreviate strings in N-Triples or N-Quads\n if (literal.datatype.value === xsd.string)\n return `\"${value}\"`;\n }\n else {\n // Use common datatype abbreviations in Turtle or TriG\n switch (literal.datatype.value) {\n case xsd.string:\n return `\"${value}\"`;\n case xsd.boolean:\n if (value === 'true' || value === 'false')\n return value;\n break;\n case xsd.integer:\n if (/^[+-]?\\d+$/.test(value))\n return value;\n break;\n case xsd.decimal:\n if (/^[+-]?\\d*\\.\\d+$/.test(value))\n return value;\n break;\n case xsd.double:\n if (/^[+-]?(?:\\d+\\.\\d*|\\.?\\d+)[eE][+-]?\\d+$/.test(value))\n return value;\n break;\n }\n }\n\n // Write a regular datatyped literal\n return `\"${value}\"^^${this._encodeIriOrBlank(literal.datatype)}`;\n }\n\n // ### `_encodePredicate` represents a predicate\n _encodePredicate(predicate) {\n switch (predicate.termType) {\n case 'NamedNode':\n return predicate.value === rdf.type ? 'a' : this._encodeIriOrBlank(predicate);\n // Literal predicates are only valid in N3\n case 'Literal':\n return this._encodeLiteral(predicate);\n default:\n return this._encodeIriOrBlank(predicate);\n }\n }\n\n // ### `_encodeObject` represents an object\n _encodeObject(object) {\n switch (object.termType) {\n case 'Quad':\n return this._encodeQuad(object);\n case 'Literal':\n return this._encodeLiteral(object);\n default:\n return this._encodeIriOrBlank(object);\n }\n }\n\n // ### `_encodeQuad` encodes an RDF-star quad\n _encodeQuad({ subject, predicate, object, graph }) {\n // Canonical N-Triples and N-Quads put spaces inside the delimiters\n const space = this._lineMode ? ' ' : '';\n return `<<(${space}${\n this._encodeSubject(subject)} ${\n this._encodePredicate(predicate)} ${\n this._encodeObject(object)}${\n isDefaultGraph(graph) ? '' : ` ${this._encodeIriOrBlank(graph)}`}${space})>>`;\n }\n\n // ### `_blockedWrite` replaces `_write` after the writer has been closed\n _blockedWrite() {\n throw new Error('Cannot write because the writer has been closed.');\n }\n\n // ### `addQuad` adds the quad to the output stream\n addQuad(subject, predicate, object, graph, done) {\n // The quad was given as an object, so shift parameters\n if (object === undefined)\n this._writeQuad(subject.subject, subject.predicate, subject.object, subject.graph, predicate);\n // The optional `graph` parameter was not provided\n else if (typeof graph === 'function')\n this._writeQuad(subject, predicate, object, DEFAULTGRAPH, graph);\n // The `graph` parameter was provided\n else\n this._writeQuad(subject, predicate, object, graph || DEFAULTGRAPH, done);\n }\n\n // ### `addQuads` adds the quads to the output stream\n addQuads(quads) {\n for (let i = 0; i < quads.length; i++)\n this.addQuad(quads[i]);\n }\n\n // ### `addPrefix` adds the prefix to the output stream\n addPrefix(prefix, iri, done) {\n const prefixes = {};\n prefixes[prefix] = iri;\n this.addPrefixes(prefixes, done);\n }\n\n // ### `addPrefixes` adds the prefixes to the output stream\n addPrefixes(prefixes, done) {\n // Ignore prefixes if not supported by the serialization\n if (!this._prefixIRIs)\n return done && done();\n\n // Write all new prefixes\n let hasPrefixes = false;\n for (let prefix in prefixes) {\n let iri = prefixes[prefix];\n if (typeof iri !== 'string')\n iri = iri.value;\n hasPrefixes = true;\n // Finish a possible pending quad\n this._endStatement();\n // Store and write the prefix\n this._prefixIRIs[iri] = (prefix += ':');\n this._prefixPatterns[iri] = [escapeRegex(iri), escapeRegex(prefix)];\n this._write(`@prefix ${prefix} <${iri}>.\\n`);\n }\n // Recreate the prefix matcher when it is next needed, so that adding\n // prefixes one by one does not rebuild it for every prefix\n if (hasPrefixes) {\n this._hasPrefixes = true;\n this._prefixRegex = null;\n }\n // End a prefix block with a newline\n this._write(hasPrefixes ? '\\n' : '', done);\n }\n\n // ### `_createPrefixRegex` creates the matcher for the current prefixes\n _createPrefixRegex() {\n let IRIlist = '', prefixList = '';\n for (const prefixIRI in this._prefixPatterns) {\n const [IRIpattern, prefixPattern] = this._prefixPatterns[prefixIRI];\n IRIlist += IRIlist ? `|${IRIpattern}` : IRIpattern;\n prefixList += prefixList ? `|${prefixPattern}` : prefixPattern;\n }\n return this._prefixRegex = new RegExp(`^(${IRIlist})([_a-zA-Z0-9](?:\\\\.?[\\\\-_a-zA-Z0-9])*)$|` +\n `^(?:${prefixList})`);\n }\n\n // ### `blank` creates a blank node with the given content\n blank(predicate, object) {\n let children = predicate, child, length;\n // Empty blank node\n if (predicate === undefined)\n children = [];\n // Blank node passed as blank(Term(\"predicate\"), Term(\"object\"))\n else if (predicate.termType)\n children = [{ predicate: predicate, object: object }];\n // Blank node passed as blank({ predicate: predicate, object: object })\n else if (!('length' in predicate))\n children = [predicate];\n\n switch (length = children.length) {\n // Generate an empty blank node\n case 0:\n return new SerializedTerm('[]');\n // Generate a non-nested one-triple blank node\n case 1:\n child = children[0];\n if (!(child.object instanceof SerializedTerm))\n return new SerializedTerm(`[ ${this._encodePredicate(child.predicate)} ${\n this._encodeObject(child.object)} ]`);\n // Generate a multi-triple or nested blank node\n default:\n let contents = '[';\n // Write all triples in order\n for (let i = 0; i < length; i++) {\n child = children[i];\n // Write only the object is the predicate is the same as the previous\n if (child.predicate.equals(predicate))\n contents += `, ${this._encodeObject(child.object)}`;\n // Otherwise, write the predicate and the object\n else {\n contents += `${(i ? ';\\n ' : '\\n ') +\n this._encodePredicate(child.predicate)} ${\n this._encodeObject(child.object)}`;\n predicate = child.predicate;\n }\n }\n return new SerializedTerm(`${contents}\\n]`);\n }\n }\n\n // ### `list` creates a list node with the given content\n list(elements) {\n const length = elements && elements.length || 0, contents = new Array(length);\n for (let i = 0; i < length; i++)\n contents[i] = this._encodeObject(elements[i]);\n return new SerializedTerm(`(${contents.join(' ')})`);\n }\n\n // ### `end` signals the end of the output stream\n end(done) {\n // Finish a possible pending quad\n this._endStatement();\n // Disallow further writing\n this._write = this._blockedWrite;\n\n // Try to end the underlying stream, ensuring done is called exactly one time\n let singleDone = done && ((error, result) => { singleDone = null, done(error, result); });\n if (this._endStream) {\n try { return this._outputStream.end(singleDone); }\n catch (error) { /* error closing stream */ }\n }\n singleDone && singleDone();\n }\n}\n\n// Replaces a character by its escaped version\nfunction characterReplacer(character) {\n // Replace a single character by its escaped version\n let result = escapedCharacters[character];\n if (result === undefined) {\n // Replace a single character with its 4-bit unicode escape sequence\n if (character.length === 1) {\n result = character.charCodeAt(0).toString(16);\n result = '\\\\u0000'.substr(0, 6 - result.length) + result;\n }\n // Replace a surrogate pair with its 8-bit unicode escape sequence\n else {\n result = ((character.charCodeAt(0) - 0xD800) * 0x400 +\n character.charCodeAt(1) + 0x2400).toString(16);\n result = '\\\\U00000000'.substr(0, 10 - result.length) + result;\n }\n }\n return result;\n}\n\n// Replaces a character by its canonical N-Triples escape:\n// a short escape where one exists, and an upper-case `\\uXXXX` escape otherwise\nfunction canonicalCharacterReplacer(character) {\n let result = escapedCharacters[character];\n if (result === undefined) {\n result = character.charCodeAt(0).toString(16).toUpperCase();\n result = '\\\\u0000'.substr(0, 6 - result.length) + result;\n }\n return result;\n}\n", "// **formats** describes the RDF syntaxes that support RDF Messages.\n\n/** @type {Record<string, { name: string; lineMode: boolean }>} */\nconst FORMATS = {\n turtle: { name: 'Turtle', lineMode: false },\n trig: { name: 'TriG', lineMode: false },\n ntriples: { name: 'N-Triples', lineMode: true },\n nquads: { name: 'N-Quads', lineMode: true },\n};\n\n// The version labels of RDF 1.2 syntaxes, as accepted by N3.js\nconst BASE_VERSIONS = ['1.2', '1.2-basic', '1.1'];\n\n// ### `resolveFormat` maps a format name or media type to a supported syntax\n/** @returns {{ name: string; lineMode: boolean; version?: string }} */\nexport function resolveFormat(format = 'TriG') {\n const key = String(format).toLowerCase().replace(/;[\\s\\S]*$/, '').trim()\n .replace(/^(?:text|application)\\//, '')\n .replace(/^x-/, '')\n .replace(/[-_ ]/g, '');\n const resolved = FORMATS[key];\n if (!resolved)\n throw new TypeError(`Unsupported RDF Messages format: \"${format}\". ` +\n 'Supported formats are Turtle, TriG, N-Triples and N-Quads.');\n let version;\n // Consume quoted values whole, so a semicolon inside another parameter cannot\n // accidentally introduce a version parameter. Parameter names are case-insensitive.\n for (const parameter of String(format).matchAll(/;\\s*([^;=\\s]+)\\s*=\\s*(\"(?:[^\"\\\\]|\\\\.)*\"|[^;]*)\\s*(?=;|$)/g)) {\n if (/** @type {string} */ (parameter[1]).toLowerCase() === 'version') {\n if (version !== undefined)\n throw new TypeError('Duplicate RDF version parameter.');\n version = /** @type {string} */ (parameter[2]).trim().replace(/^\"(.*)\"$/, '$1').replace(/\\\\(.)/g, '$1');\n }\n }\n return version === undefined ? resolved : { ...resolved, version };\n}\n\n/** @param {unknown} version */\n// ### `isMessagesVersion` checks whether a version label announces RDF Messages\nexport function isMessagesVersion(version) {\n return typeof version === 'string' && version.endsWith('-messages');\n}\n\n/** @param {string} version */\n// ### `baseVersion` strips the `-messages` suffix of a version label\nexport function baseVersion(version) {\n return isMessagesVersion(version) ? version.slice(0, -'-messages'.length) : version;\n}\n\n/** @param {string} version */\n// ### `isSupportedVersion` checks whether a (base) version label is supported\nexport function isSupportedVersion(version, supported = BASE_VERSIONS) {\n return supported.includes(version);\n}\n", "// **MessageWriter** writes RDF Message Logs (Turtle, TriG, N-Triples and N-Quads).\n//\n// One N3.js writer writes the whole log: its `version` option announces the log,\n// and after each message, `_endStatement` finishes the pending statement (and graph block)\n// before a delimiter is written (`MESSAGE` in line formats, `@message .` in Turtle and TriG).\n// That way, consumers receive a message as soon as it is written, no serialization state\n// (current graph, subject, predicate) leaks from one message into the next, and trailing\n// empty messages survive a round trip (a delimiter before the end of the input does not create a message).\nimport { Writer } from 'n3';\nimport { resolveFormat, isMessagesVersion, baseVersion, isSupportedVersion } from './formats.js';\n\n/** @extends {Writer<import('@rdfjs/types').BaseQuad>} */\nclass LogWriter extends Writer {\n // ### `addDelimiter` ends the current message\n addDelimiter() {\n this._endStatement();\n this._write(this._lineMode ? 'MESSAGE\\n' : '@message .\\n');\n }\n}\n\n/** @typedef {import('./internal.js').Done} Done */\n/** @typedef {import('./internal.js').End} End */\n/** @typedef {import('../common.js').MessageWriterOptions} Options */\n/** @typedef {Pick<import('./internal.js').Output, 'write'> & Partial<Pick<import('./internal.js').Output, 'end'>>} Output */\nexport default class MessageWriter {\n // `outputStream` is optional: without it, `end` returns the output as a string\n /** @overload\n * @param {Options} [options] */\n /** @overload\n * @param {Output | null} outputStream\n * @param {Options} [options] */\n /** @param {Output | Options | null} [outputStream]\n * @param {Options} [options] */\n constructor(outputStream, options) {\n if (outputStream && typeof /** @type {Output} */ (outputStream).write !== 'function')\n options = /** @type {Options} */ (outputStream), outputStream = null;\n options = options || {};\n this._format = resolveFormat(options.format);\n this._options = options;\n this._version = options.version ?? this._format.version ?? '1.2-messages';\n if (!isMessagesVersion(this._version) || !isSupportedVersion(baseVersion(this._version)))\n throw new TypeError(`Unsupported RDF Messages version: \"${this._version}\"`);\n\n this._output = '';\n this._stream = /** @type {Output | null | undefined} */ (outputStream);\n this._endStream = !outputStream || options.end !== false;\n this._pending = 0;\n\n /** @type {Done[]} */\n this._waiting = [];\n\n /** @type {Error | null} */\n this._error = null;\n this._started = false;\n this._ended = false;\n this._open = false;\n this._count = 0; // messages begun so far: the index of the next message\n this._declared = Object.assign({}, options.prefixes);\n\n /** @type {Record<string, string>} */\n this._newPrefixes = {};\n // The N3.js writer writes to this sink, which it never ends\n /** @type {Pick<Output, 'write'>} */\n this._sink = { write: (chunk, encoding, done) => this._write(chunk, done) };\n\n /** @type {LogWriter | null} */\n this._writer = null;\n }\n\n // ### `addMessage` writes the quads of one message, followed by a delimiter.\n // The callback (or returned promise) completes once the output is flushed.\n /** @param {import('@rdfjs/types').BaseQuad[]} quads\n * @param {Done} [done] */\n addMessage(quads, done) {\n return this._complete(done, () => {\n if (this._open) throw new Error('A message is already open');\n this._begin();\n for (const quad of quads || []) this._add(quad);\n this._close();\n });\n }\n\n // ### `beginMessage` opens a message. It is optional: the first `addQuad` opens one implicitly.\n /** @param {Done} [done] */\n beginMessage(done) {\n return this._complete(done, () => {\n if (this._open) throw new Error('A message is already open');\n this._begin();\n });\n }\n\n // ### `addQuad` writes a quad into the open message right away (a message is opened if there is none).\n // With a `messageIndex` (0-based), a change of index ends the current message and writes the empty\n // messages in between, as rdf-writer-ts does; a lower index than the current one is an error.\n /** @param {import('@rdfjs/types').BaseQuad} quad\n * @param {number | Done} [messageIndex]\n * @param {Done} [done] */\n addQuad(quad, messageIndex, done) {\n if (typeof messageIndex === 'function') done = messageIndex, messageIndex = undefined;\n return this._complete(done, () => {\n if (messageIndex !== undefined && messageIndex !== null) this._moveTo(messageIndex);\n else if (!this._open) this._begin();\n this._add(quad);\n });\n }\n\n // ### `endMessage` ends the open message with a delimiter. Without an open message, it writes an empty one.\n /** @param {Done} [done] */\n endMessage(done) {\n return this._complete(done, () => {\n if (!this._open) this._begin();\n this._close();\n });\n }\n\n // ### `addPrefix` declares a prefix, which is written before the next message\n // and stays in effect for all messages after it\n /** @param {string} prefix\n * @param {string | import('@rdfjs/types').NamedNode} iri\n * @param {Done} [done] */\n addPrefix(prefix, iri, done) {\n return this._complete(done, () => {\n if (!this._format.lineMode && this._declared[prefix] !== (typeof iri === 'string' ? iri : iri.value))\n this._newPrefixes[prefix] = typeof iri === 'string' ? iri : iri.value;\n });\n }\n\n // ### `end` ends the log and, unless disabled, the output stream.\n // The callback receives the output as a string if no output stream was given.\n /** @overload\n * @returns {Promise<string | void>} */\n /** @overload\n * @param {End} done\n * @returns {void} */\n /** @param {End} [done]\n * @returns {Promise<string | void> | void} */\n end(done) {\n // Ending twice is harmless\n if (this._ended)\n return typeof done === 'function' ? done(null) : Promise.resolve();\n this._start();\n if (this._open)\n this._close();\n if (typeof done === 'function')\n return this._finish(done);\n return new Promise((resolve, reject) => this._finish((error, result) => error ? reject(error) : resolve(result)));\n }\n\n // ## Private methods\n\n // Runs an action and reports completion with a callback or a promise\n /** @param {Done | undefined} done\n * @param {() => void} action\n * @returns {Promise<void> | void} */\n _complete(done, action) {\n if (this._ended)\n this._error = this._error || new Error('Cannot write after end');\n else\n try {\n action();\n }\n catch (error) {\n this._error = this._error || /** @type {Error} */ (error);\n }\n if (typeof done === 'function')\n return this._whenFlushed(done);\n return new Promise((resolve, reject) => this._whenFlushed(error => error ? reject(error) : resolve()));\n }\n\n // Ends the output once all queued writes were accepted\n /** @param {End} callback */\n _finish(callback) {\n this._ended = true;\n this._whenFlushed(error => this._endOutput(error, callback));\n }\n\n /** @param {Error | null | undefined} error\n * @param {End} callback */\n _endOutput(error, callback) {\n if (error || !this._endStream)\n return callback(error);\n if (!this._stream)\n return callback(null, this._output);\n try {\n (/** @type {Required<Output>} */ (this._stream)).end(endError => callback(endError));\n }\n catch (endError) {\n callback(/** @type {Error} */ (endError));\n }\n }\n\n // Calls back once all queued writes were accepted by the output\n /** @param {Done} done */\n _whenFlushed(done) {\n if (this._pending === 0)\n this._settle(done);\n else\n this._waiting.push(done);\n }\n\n /** @param {Done} done */\n _settle(done) {\n const error = this._error;\n this._error = null;\n done(error || null);\n }\n\n /** @param {string} chunk\n * @param {Done} [done] */\n _write(chunk, done) {\n if (!this._stream) {\n this._output += chunk;\n return done && done();\n }\n this._pending++;\n try {\n this._stream.write(chunk, 'utf8', error => this._written(error, done));\n }\n catch (error) {\n this._written(/** @type {Error} */ (error), done);\n }\n }\n\n // Registers that the output accepted a write, and wakes up those waiting for the output\n /** @param {Error | null | undefined} error\n * @param {Done} [done] */\n _written(error, done) {\n this._pending--;\n this._error = this._error || error || null;\n done && done(error);\n if (this._pending === 0)\n this._waiting.splice(0).forEach(callback => this._settle(callback));\n }\n\n // Announces the RDF Messages version, which makes parsers expect delimiters,\n // and declares the base and prefixes, which stay in effect for all messages\n _start() {\n if (!this._started) {\n this._started = true;\n const options = this._options;\n this._writer = new LogWriter(this._sink, {\n format: this._format.name,\n end: false,\n version: options.writeVersion === false ? undefined : this._version,\n baseIRI: options.baseIRI,\n writeBase: options.writeBase,\n prefixes: this._declared,\n });\n }\n }\n\n // Opens a message: declares the prefixes that were added since the previous one\n _begin() {\n this._start();\n const writer = /** @type {LogWriter} */ (this._writer);\n for (const prefix of Object.keys(this._newPrefixes)) {\n const iri = /** @type {string} */ (this._newPrefixes[prefix]);\n writer.addPrefix(prefix, iri);\n this._declared[prefix] = iri;\n }\n this._newPrefixes = {};\n this._open = true;\n this._count++;\n }\n\n /** @param {import('@rdfjs/types').BaseQuad} quad */\n _add(quad) {\n /** @type {Done} */\n const record = error => error && (this._error = this._error || error);\n (/** @type {LogWriter} */ (this._writer)).addQuad(quad.subject, quad.predicate, quad.object, quad.graph, record);\n }\n _close() {\n this._open = false;\n (/** @type {LogWriter} */ (this._writer)).addDelimiter();\n }\n\n // Makes message `index` the open message, writing empty messages for the gap\n /** @param {number} index */\n _moveTo(index) {\n const current = this._count - 1;\n if (!Number.isInteger(index) || index < 0) throw new RangeError(`Invalid message index: ${index}`);\n if (this._open && index === current) return;\n if (index <= current) throw new RangeError(`Message index ${index} is lower than the current message index ${current}`);\n if (this._open) this._close();\n while (this._count < index) {\n this._begin();\n this._close();\n }\n this._begin();\n }\n}\n\n/** @param {Iterable<import('@rdfjs/types').BaseQuad[]>} messages\n * @param {Options} [options]\n * @returns {string} */\n// ### `writeMessages` synchronously serializes an array of messages to a string\nexport function writeMessages(messages, options) {\n const writer = new MessageWriter(options);\n\n /** @type {Error[]} */\n const errors = [];\n let output = '';\n\n /** @param {Error | null | undefined} error */\n function collect(error) {\n if (error)\n errors.push(error);\n }\n for (const message of messages)\n writer.addMessage(message, collect);\n writer.end((error, result) => (collect(error), output = /** @type {string} */ (result)));\n if (errors.length > 0)\n throw errors[0];\n return output;\n}\n", "// **MessageParser** parses RDF Message Logs (Turtle, TriG, N-Triples and N-Quads).\nimport { StringDecoder } from 'string_decoder';\nimport MessageParserCore from './MessageParserCore.js';\n\n/** @template {import('@rdfjs/types').BaseQuad} [Q=import('@rdfjs/types').Quad] */\nexport default class MessageParser {\n /** @param {import('../common.js').MessageParserOptions<Q>} [options] */\n constructor(options) {\n /** @type {import('../common.js').MessageParserOptions<Q>} */\n this._options = options || {};\n // Fail early on unsupported options\n // Construction only validates options; this core never receives input.\n this._createCore(/** @type {import('./internal.js').ParserSink<Q>} */ ({}));\n }\n\n /** @param {import('./internal.js').ParserSink<Q>} sink */\n _createCore(sink) {\n return new MessageParserCore(this._options, sink);\n }\n\n // ### `parse` parses a string or a readable stream of RDF Messages.\n //\n // Without callbacks, a string is parsed synchronously into an array of\n // messages (arrays of quads), and parse errors are thrown.\n // With a callback `(error, message, prefixes)`, or an object with the\n // callbacks `onMessage(error, message, prefixes)`, `onQuad(error, quad, messageIndex)`,\n // `onPrefix(prefix, term)` and `onVersion(label)`, messages are reported as soon\n // as they are complete. The final call has `null` as message.\n /**\n * @overload\n * @param {string} input\n * @returns {Q[][]}\n */\n /**\n * @overload\n * @param {string | NodeJS.ReadableStream} input\n * @param {import('../common.js').MessageCallback<Q> | import('../common.js').MessageParseCallbacks<Q>} [callbacks]\n * @returns {void}\n */\n /**\n * @param {string | NodeJS.ReadableStream} input\n * @param {import('../common.js').MessageCallback<Q> | import('../common.js').MessageParseCallbacks<Q>} [callbacks]\n * @returns {Q[][] | undefined}\n */\n parse(input, callbacks) {\n if (typeof callbacks === 'function')\n callbacks = { onMessage: callbacks };\n\n /** @type {Q[][] | null} */\n const messages = callbacks ? null : [];\n\n /** @type {Error | null} */\n let error = null;\n callbacks = callbacks || {};\n\n /** @type {import('./internal.js').ParserSink<Q>} */\n const sink = {\n message: (quads, index) => callbacks.onMessage ? callbacks.onMessage(null, quads, undefined, index) : messages && messages.push(quads),\n end: prefixes => callbacks.onMessage && callbacks.onMessage(null, null, prefixes),\n error: e => {\n error = e;\n callbacks.onMessage && callbacks.onMessage(e, null);\n callbacks.onQuad && callbacks.onQuad(e);\n },\n };\n if (callbacks.onQuad)\n sink.quad = (quad, index) => callbacks.onQuad?.(null, quad, index);\n if (callbacks.onPrefix)\n sink.prefix = callbacks.onPrefix;\n if (callbacks.onVersion)\n sink.version = callbacks.onVersion;\n const core = this._createCore(sink);\n\n // Parse a string at once\n if (typeof input === 'string') {\n core.write(input);\n core.end();\n if (error && messages)\n throw error;\n return messages || undefined;\n }\n\n // Parse a stream chunk by chunk\n const decoder = new StringDecoder('utf8');\n input.on('data', chunk => core.write(typeof chunk === 'string' ? chunk : decoder.write(chunk)));\n input.on('end', () => {\n core.write(decoder.end());\n core.end();\n });\n input.on('error', e => sink.error(e));\n return undefined;\n }\n}\n\n/**\n * @template {import('@rdfjs/types').BaseQuad} [Q=import('@rdfjs/types').Quad]\n * @param {string} input\n * @param {import('../common.js').MessageParserOptions<Q>} [options]\n */\n// ### `parseMessages` synchronously parses a string into an array of messages\nexport function parseMessages(input, options) {\n return new MessageParser(options).parse(input);\n}\n", "import MessageParserCore from './MessageParserCore.js';\nimport MessageWriter from './MessageWriter.js';\n\nexport { default as MessageParser, parseMessages } from './MessageParser.js';\nexport { default as MessageWriter, writeMessages } from './MessageWriter.js';\n\n/**\n * A Web Streams parser; strings and UTF-8 bytes can be piped directly from fetch.\n * @template {import('@rdfjs/types').BaseQuad} [Q=import('@rdfjs/types').Quad]\n * @extends {TransformStream<import('../browser.js').MessageChunk, Q[]>}\n */\nexport class MessageStreamParser extends TransformStream {\n /** @param {import('../browser.js').BrowserParserOptions<Q>} [options] */\n constructor(options = {}) {\n const decoder = new TextDecoder();\n\n /** @type {MessageParserCore<Q>} */\n let core;\n super({\n start(controller) {\n core = new MessageParserCore(options, {\n message: quads => controller.enqueue(quads),\n end: () => {},\n error: error => { throw error; },\n prefix: options.onPrefix,\n version: options.onVersion,\n });\n },\n transform(chunk) {\n core.write(typeof chunk === 'string' ? chunk : decoder.decode(chunk, { stream: true }));\n },\n flush() {\n core.write(decoder.decode());\n core.end();\n },\n });\n }\n}\n\n/** A Web Streams writer; accepts messages or individual indexed quads.\n * @extends {TransformStream<import('../browser.js').MessageWriterInput, string>} */\nexport class MessageStreamWriter extends TransformStream {\n /** @param {import('../common.js').MessageWriterOptions} [options] */\n constructor(options) {\n /** @type {MessageWriter} */\n let writer;\n super({\n start(controller) {\n /** @type {Pick<import('./internal.js').Output, 'write'>} */\n const output = { write: (chunk, encoding, done) => { controller.enqueue(chunk); done(); } };\n writer = new MessageWriter(output, { ...options, end: false });\n },\n transform(message) {\n return Array.isArray(message) ? writer.addMessage(message) : writer.addQuad(message.quad, message.messageIndex);\n },\n flush() {\n return writer.end().then(() => {});\n },\n });\n }\n}\n"],
|
|
5
|
+
"mappings": "0jBAAA,IAAAA,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAuBA,IAAIC,EAAI,OAAO,SAAY,SAAW,QAAU,KAC5CC,GAAeD,GAAK,OAAOA,EAAE,OAAU,WACvCA,EAAE,MACF,SAAsBE,EAAQC,EAAUC,EAAM,CAC9C,OAAO,SAAS,UAAU,MAAM,KAAKF,EAAQC,EAAUC,CAAI,CAC7D,EAEEC,GACAL,GAAK,OAAOA,EAAE,SAAY,WAC5BK,GAAiBL,EAAE,QACV,OAAO,sBAChBK,GAAiB,SAAwBH,EAAQ,CAC/C,OAAO,OAAO,oBAAoBA,CAAM,EACrC,OAAO,OAAO,sBAAsBA,CAAM,CAAC,CAChD,EAEAG,GAAiB,SAAwBH,EAAQ,CAC/C,OAAO,OAAO,oBAAoBA,CAAM,CAC1C,EAGF,SAASI,GAAmBC,EAAS,CAC/B,SAAW,QAAQ,MAAM,QAAQ,KAAKA,CAAO,CACnD,CAEA,IAAIC,GAAc,OAAO,OAAS,SAAqBC,EAAO,CAC5D,OAAOA,IAAUA,CACnB,EAEA,SAASC,GAAe,CACtBA,EAAa,KAAK,KAAK,IAAI,CAC7B,CACAX,GAAO,QAAUW,EACjBX,GAAO,QAAQ,KAAOY,GAGtBD,EAAa,aAAeA,EAE5BA,EAAa,UAAU,QAAU,OACjCA,EAAa,UAAU,aAAe,EACtCA,EAAa,UAAU,cAAgB,OAIvC,IAAIE,GAAsB,GAE1B,SAASC,GAAcC,EAAU,CAC/B,GAAI,OAAOA,GAAa,WACtB,MAAM,IAAI,UAAU,mEAAqE,OAAOA,CAAQ,CAE5G,CAEA,OAAO,eAAeJ,EAAc,sBAAuB,CACzD,WAAY,GACZ,IAAK,UAAW,CACd,OAAOE,EACT,EACA,IAAK,SAASG,EAAK,CACjB,GAAI,OAAOA,GAAQ,UAAYA,EAAM,GAAKP,GAAYO,CAAG,EACvD,MAAM,IAAI,WAAW,kGAAoGA,EAAM,GAAG,EAEpIH,GAAsBG,CACxB,CACF,CAAC,EAEDL,EAAa,KAAO,UAAW,EAEzB,KAAK,UAAY,QACjB,KAAK,UAAY,OAAO,eAAe,IAAI,EAAE,WAC/C,KAAK,QAAU,OAAO,OAAO,IAAI,EACjC,KAAK,aAAe,GAGtB,KAAK,cAAgB,KAAK,eAAiB,MAC7C,EAIAA,EAAa,UAAU,gBAAkB,SAAyBM,EAAG,CACnE,GAAI,OAAOA,GAAM,UAAYA,EAAI,GAAKR,GAAYQ,CAAC,EACjD,MAAM,IAAI,WAAW,gFAAkFA,EAAI,GAAG,EAEhH,YAAK,cAAgBA,EACd,IACT,EAEA,SAASC,GAAiBC,EAAM,CAC9B,OAAIA,EAAK,gBAAkB,OAClBR,EAAa,oBACfQ,EAAK,aACd,CAEAR,EAAa,UAAU,gBAAkB,UAA2B,CAClE,OAAOO,GAAiB,IAAI,CAC9B,EAEAP,EAAa,UAAU,KAAO,SAAcS,EAAM,CAEhD,QADIf,EAAO,CAAC,EACHgB,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAKhB,EAAK,KAAK,UAAUgB,CAAC,CAAC,EACjE,IAAIC,EAAWF,IAAS,QAEpBG,EAAS,KAAK,QAClB,GAAIA,IAAW,OACbD,EAAWA,GAAWC,EAAO,QAAU,eAChC,CAACD,EACR,MAAO,GAGT,GAAIA,EAAS,CACX,IAAIE,EAGJ,GAFInB,EAAK,OAAS,IAChBmB,EAAKnB,EAAK,CAAC,GACTmB,aAAc,MAGhB,MAAMA,EAGR,IAAIC,EAAM,IAAI,MAAM,oBAAsBD,EAAK,KAAOA,EAAG,QAAU,IAAM,GAAG,EAC5E,MAAAC,EAAI,QAAUD,EACRC,CACR,CAEA,IAAIC,EAAUH,EAAOH,CAAI,EAEzB,GAAIM,IAAY,OACd,MAAO,GAET,GAAI,OAAOA,GAAY,WACrBxB,GAAawB,EAAS,KAAMrB,CAAI,MAIhC,SAFIsB,EAAMD,EAAQ,OACdE,EAAYC,GAAWH,EAASC,CAAG,EAC9BN,EAAI,EAAGA,EAAIM,EAAK,EAAEN,EACzBnB,GAAa0B,EAAUP,CAAC,EAAG,KAAMhB,CAAI,EAGzC,MAAO,EACT,EAEA,SAASyB,GAAa3B,EAAQiB,EAAML,EAAUgB,EAAS,CACrD,IAAIC,EACAT,EACAU,EAsBJ,GApBAnB,GAAcC,CAAQ,EAEtBQ,EAASpB,EAAO,QACZoB,IAAW,QACbA,EAASpB,EAAO,QAAU,OAAO,OAAO,IAAI,EAC5CA,EAAO,aAAe,IAIlBoB,EAAO,cAAgB,SACzBpB,EAAO,KAAK,cAAeiB,EACfL,EAAS,SAAWA,EAAS,SAAWA,CAAQ,EAI5DQ,EAASpB,EAAO,SAElB8B,EAAWV,EAAOH,CAAI,GAGpBa,IAAa,OAEfA,EAAWV,EAAOH,CAAI,EAAIL,EAC1B,EAAEZ,EAAO,qBAEL,OAAO8B,GAAa,WAEtBA,EAAWV,EAAOH,CAAI,EACpBW,EAAU,CAAChB,EAAUkB,CAAQ,EAAI,CAACA,EAAUlB,CAAQ,EAE7CgB,EACTE,EAAS,QAAQlB,CAAQ,EAEzBkB,EAAS,KAAKlB,CAAQ,EAIxBiB,EAAId,GAAiBf,CAAM,EACvB6B,EAAI,GAAKC,EAAS,OAASD,GAAK,CAACC,EAAS,OAAQ,CACpDA,EAAS,OAAS,GAGlB,IAAIC,EAAI,IAAI,MAAM,+CACED,EAAS,OAAS,IAAM,OAAOb,CAAI,EAAI,mEAEvB,EACpCc,EAAE,KAAO,8BACTA,EAAE,QAAU/B,EACZ+B,EAAE,KAAOd,EACTc,EAAE,MAAQD,EAAS,OACnB1B,GAAmB2B,CAAC,CACtB,CAGF,OAAO/B,CACT,CAEAQ,EAAa,UAAU,YAAc,SAAqBS,EAAML,EAAU,CACxE,OAAOe,GAAa,KAAMV,EAAML,EAAU,EAAK,CACjD,EAEAJ,EAAa,UAAU,GAAKA,EAAa,UAAU,YAEnDA,EAAa,UAAU,gBACnB,SAAyBS,EAAML,EAAU,CACvC,OAAOe,GAAa,KAAMV,EAAML,EAAU,EAAI,CAChD,EAEJ,SAASoB,IAAc,CACrB,GAAI,CAAC,KAAK,MAGR,OAFA,KAAK,OAAO,eAAe,KAAK,KAAM,KAAK,MAAM,EACjD,KAAK,MAAQ,GACT,UAAU,SAAW,EAChB,KAAK,SAAS,KAAK,KAAK,MAAM,EAChC,KAAK,SAAS,MAAM,KAAK,OAAQ,SAAS,CAErD,CAEA,SAASC,GAAUjC,EAAQiB,EAAML,EAAU,CACzC,IAAIsB,EAAQ,CAAE,MAAO,GAAO,OAAQ,OAAW,OAAQlC,EAAQ,KAAMiB,EAAM,SAAUL,CAAS,EAC1FuB,EAAUH,GAAY,KAAKE,CAAK,EACpC,OAAAC,EAAQ,SAAWvB,EACnBsB,EAAM,OAASC,EACRA,CACT,CAEA3B,EAAa,UAAU,KAAO,SAAcS,EAAML,EAAU,CAC1D,OAAAD,GAAcC,CAAQ,EACtB,KAAK,GAAGK,EAAMgB,GAAU,KAAMhB,EAAML,CAAQ,CAAC,EACtC,IACT,EAEAJ,EAAa,UAAU,oBACnB,SAA6BS,EAAML,EAAU,CAC3C,OAAAD,GAAcC,CAAQ,EACtB,KAAK,gBAAgBK,EAAMgB,GAAU,KAAMhB,EAAML,CAAQ,CAAC,EACnD,IACT,EAGJJ,EAAa,UAAU,eACnB,SAAwBS,EAAML,EAAU,CACtC,IAAIwB,EAAMhB,EAAQiB,EAAUnB,EAAGoB,EAK/B,GAHA3B,GAAcC,CAAQ,EAEtBQ,EAAS,KAAK,QACVA,IAAW,OACb,OAAO,KAGT,GADAgB,EAAOhB,EAAOH,CAAI,EACdmB,IAAS,OACX,OAAO,KAET,GAAIA,IAASxB,GAAYwB,EAAK,WAAaxB,EACrC,EAAE,KAAK,eAAiB,EAC1B,KAAK,QAAU,OAAO,OAAO,IAAI,GAEjC,OAAOQ,EAAOH,CAAI,EACdG,EAAO,gBACT,KAAK,KAAK,iBAAkBH,EAAMmB,EAAK,UAAYxB,CAAQ,WAEtD,OAAOwB,GAAS,WAAY,CAGrC,IAFAC,EAAW,GAENnB,EAAIkB,EAAK,OAAS,EAAGlB,GAAK,EAAGA,IAChC,GAAIkB,EAAKlB,CAAC,IAAMN,GAAYwB,EAAKlB,CAAC,EAAE,WAAaN,EAAU,CACzD0B,EAAmBF,EAAKlB,CAAC,EAAE,SAC3BmB,EAAWnB,EACX,KACF,CAGF,GAAImB,EAAW,EACb,OAAO,KAELA,IAAa,EACfD,EAAK,MAAM,EAEXG,GAAUH,EAAMC,CAAQ,EAGtBD,EAAK,SAAW,IAClBhB,EAAOH,CAAI,EAAImB,EAAK,CAAC,GAEnBhB,EAAO,iBAAmB,QAC5B,KAAK,KAAK,iBAAkBH,EAAMqB,GAAoB1B,CAAQ,CAClE,CAEA,OAAO,IACT,EAEJJ,EAAa,UAAU,IAAMA,EAAa,UAAU,eAEpDA,EAAa,UAAU,mBACnB,SAA4BS,EAAM,CAChC,IAAIQ,EAAWL,EAAQF,EAGvB,GADAE,EAAS,KAAK,QACVA,IAAW,OACb,OAAO,KAGT,GAAIA,EAAO,iBAAmB,OAC5B,OAAI,UAAU,SAAW,GACvB,KAAK,QAAU,OAAO,OAAO,IAAI,EACjC,KAAK,aAAe,GACXA,EAAOH,CAAI,IAAM,SACtB,EAAE,KAAK,eAAiB,EAC1B,KAAK,QAAU,OAAO,OAAO,IAAI,EAEjC,OAAOG,EAAOH,CAAI,GAEf,KAIT,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAIuB,EAAO,OAAO,KAAKpB,CAAM,EACzBqB,EACJ,IAAKvB,EAAI,EAAGA,EAAIsB,EAAK,OAAQ,EAAEtB,EAC7BuB,EAAMD,EAAKtB,CAAC,EACRuB,IAAQ,kBACZ,KAAK,mBAAmBA,CAAG,EAE7B,YAAK,mBAAmB,gBAAgB,EACxC,KAAK,QAAU,OAAO,OAAO,IAAI,EACjC,KAAK,aAAe,EACb,IACT,CAIA,GAFAhB,EAAYL,EAAOH,CAAI,EAEnB,OAAOQ,GAAc,WACvB,KAAK,eAAeR,EAAMQ,CAAS,UAC1BA,IAAc,OAEvB,IAAKP,EAAIO,EAAU,OAAS,EAAGP,GAAK,EAAGA,IACrC,KAAK,eAAeD,EAAMQ,EAAUP,CAAC,CAAC,EAI1C,OAAO,IACT,EAEJ,SAASwB,GAAW1C,EAAQiB,EAAM0B,EAAQ,CACxC,IAAIvB,EAASpB,EAAO,QAEpB,GAAIoB,IAAW,OACb,MAAO,CAAC,EAEV,IAAIwB,EAAaxB,EAAOH,CAAI,EAC5B,OAAI2B,IAAe,OACV,CAAC,EAEN,OAAOA,GAAe,WACjBD,EAAS,CAACC,EAAW,UAAYA,CAAU,EAAI,CAACA,CAAU,EAE5DD,EACLE,GAAgBD,CAAU,EAAIlB,GAAWkB,EAAYA,EAAW,MAAM,CAC1E,CAEApC,EAAa,UAAU,UAAY,SAAmBS,EAAM,CAC1D,OAAOyB,GAAW,KAAMzB,EAAM,EAAI,CACpC,EAEAT,EAAa,UAAU,aAAe,SAAsBS,EAAM,CAChE,OAAOyB,GAAW,KAAMzB,EAAM,EAAK,CACrC,EAEAT,EAAa,cAAgB,SAASsC,EAAS7B,EAAM,CACnD,OAAI,OAAO6B,EAAQ,eAAkB,WAC5BA,EAAQ,cAAc7B,CAAI,EAE1B8B,GAAc,KAAKD,EAAS7B,CAAI,CAE3C,EAEAT,EAAa,UAAU,cAAgBuC,GACvC,SAASA,GAAc9B,EAAM,CAC3B,IAAIG,EAAS,KAAK,QAElB,GAAIA,IAAW,OAAW,CACxB,IAAIwB,EAAaxB,EAAOH,CAAI,EAE5B,GAAI,OAAO2B,GAAe,WACxB,MAAO,GACF,GAAIA,IAAe,OACxB,OAAOA,EAAW,MAEtB,CAEA,MAAO,EACT,CAEApC,EAAa,UAAU,WAAa,UAAsB,CACxD,OAAO,KAAK,aAAe,EAAIL,GAAe,KAAK,OAAO,EAAI,CAAC,CACjE,EAEA,SAASuB,GAAWsB,EAAKlC,EAAG,CAE1B,QADImC,EAAO,IAAI,MAAMnC,CAAC,EACbI,EAAI,EAAGA,EAAIJ,EAAG,EAAEI,EACvB+B,EAAK/B,CAAC,EAAI8B,EAAI9B,CAAC,EACjB,OAAO+B,CACT,CAEA,SAASV,GAAUH,EAAMc,EAAO,CAC9B,KAAOA,EAAQ,EAAId,EAAK,OAAQc,IAC9Bd,EAAKc,CAAK,EAAId,EAAKc,EAAQ,CAAC,EAC9Bd,EAAK,IAAI,CACX,CAEA,SAASS,GAAgBG,EAAK,CAE5B,QADIG,EAAM,IAAI,MAAMH,EAAI,MAAM,EACrB9B,EAAI,EAAGA,EAAIiC,EAAI,OAAQ,EAAEjC,EAChCiC,EAAIjC,CAAC,EAAI8B,EAAI9B,CAAC,EAAE,UAAY8B,EAAI9B,CAAC,EAEnC,OAAOiC,CACT,CAEA,SAAS1C,GAAKqC,EAASM,EAAM,CAC3B,OAAO,IAAI,QAAQ,SAAUC,EAASC,EAAQ,CAC5C,SAASC,EAAcjC,EAAK,CAC1BwB,EAAQ,eAAeM,EAAMI,CAAQ,EACrCF,EAAOhC,CAAG,CACZ,CAEA,SAASkC,GAAW,CACd,OAAOV,EAAQ,gBAAmB,YACpCA,EAAQ,eAAe,QAASS,CAAa,EAE/CF,EAAQ,CAAC,EAAE,MAAM,KAAK,SAAS,CAAC,CAClC,CAEAI,GAA+BX,EAASM,EAAMI,EAAU,CAAE,KAAM,EAAK,CAAC,EAClEJ,IAAS,SACXM,GAA8BZ,EAASS,EAAe,CAAE,KAAM,EAAK,CAAC,CAExE,CAAC,CACH,CAEA,SAASG,GAA8BZ,EAASvB,EAASoC,EAAO,CAC1D,OAAOb,EAAQ,IAAO,YACxBW,GAA+BX,EAAS,QAASvB,EAASoC,CAAK,CAEnE,CAEA,SAASF,GAA+BX,EAASM,EAAMxC,EAAU+C,EAAO,CACtE,GAAI,OAAOb,EAAQ,IAAO,WACpBa,EAAM,KACRb,EAAQ,KAAKM,EAAMxC,CAAQ,EAE3BkC,EAAQ,GAAGM,EAAMxC,CAAQ,UAElB,OAAOkC,EAAQ,kBAAqB,WAG7CA,EAAQ,iBAAiBM,EAAM,SAASQ,EAAa/C,EAAK,CAGpD8C,EAAM,MACRb,EAAQ,oBAAoBM,EAAMQ,CAAY,EAEhDhD,EAASC,CAAG,CACd,CAAC,MAED,OAAM,IAAI,UAAU,sEAAwE,OAAOiC,CAAO,CAE9G,IChfA,IAAAe,GAAAC,EAAAC,IAAA,cAEAA,GAAQ,WAAaC,GACrBD,GAAQ,YAAcE,GACtBF,GAAQ,cAAgBG,GAExB,IAAIC,EAAS,CAAC,EACVC,EAAY,CAAC,EACbC,GAAM,OAAO,WAAe,IAAc,WAAa,MAEvDC,GAAO,mEACX,IAASC,EAAI,EAAGC,GAAMF,GAAK,OAAQC,EAAIC,GAAK,EAAED,EAC5CJ,EAAOI,CAAC,EAAID,GAAKC,CAAC,EAClBH,EAAUE,GAAK,WAAWC,CAAC,CAAC,EAAIA,EAFzB,IAAAA,EAAOC,GAOhBJ,EAAU,EAAiB,EAAI,GAC/BA,EAAU,EAAiB,EAAI,GAE/B,SAASK,GAASC,EAAK,CACrB,IAAIF,EAAME,EAAI,OAEd,GAAIF,EAAM,EAAI,EACZ,MAAM,IAAI,MAAM,gDAAgD,EAKlE,IAAIG,EAAWD,EAAI,QAAQ,GAAG,EAC1BC,IAAa,KAAIA,EAAWH,GAEhC,IAAII,EAAkBD,IAAaH,EAC/B,EACA,EAAKG,EAAW,EAEpB,MAAO,CAACA,EAAUC,CAAe,CACnC,CAGA,SAASZ,GAAYU,EAAK,CACxB,IAAIG,EAAOJ,GAAQC,CAAG,EAClBC,EAAWE,EAAK,CAAC,EACjBD,EAAkBC,EAAK,CAAC,EAC5B,OAASF,EAAWC,GAAmB,EAAI,EAAKA,CAClD,CAEA,SAASE,GAAaJ,EAAKC,EAAUC,EAAiB,CACpD,OAASD,EAAWC,GAAmB,EAAI,EAAKA,CAClD,CAEA,SAASX,GAAaS,EAAK,CACzB,IAAIK,EACAF,EAAOJ,GAAQC,CAAG,EAClBC,EAAWE,EAAK,CAAC,EACjBD,EAAkBC,EAAK,CAAC,EAExBG,EAAM,IAAIX,GAAIS,GAAYJ,EAAKC,EAAUC,CAAe,CAAC,EAEzDK,EAAU,EAGVT,EAAMI,EAAkB,EACxBD,EAAW,EACXA,EAEAJ,EACJ,IAAKA,EAAI,EAAGA,EAAIC,EAAKD,GAAK,EACxBQ,EACGX,EAAUM,EAAI,WAAWH,CAAC,CAAC,GAAK,GAChCH,EAAUM,EAAI,WAAWH,EAAI,CAAC,CAAC,GAAK,GACpCH,EAAUM,EAAI,WAAWH,EAAI,CAAC,CAAC,GAAK,EACrCH,EAAUM,EAAI,WAAWH,EAAI,CAAC,CAAC,EACjCS,EAAIC,GAAS,EAAKF,GAAO,GAAM,IAC/BC,EAAIC,GAAS,EAAKF,GAAO,EAAK,IAC9BC,EAAIC,GAAS,EAAIF,EAAM,IAGzB,OAAIH,IAAoB,IACtBG,EACGX,EAAUM,EAAI,WAAWH,CAAC,CAAC,GAAK,EAChCH,EAAUM,EAAI,WAAWH,EAAI,CAAC,CAAC,GAAK,EACvCS,EAAIC,GAAS,EAAIF,EAAM,KAGrBH,IAAoB,IACtBG,EACGX,EAAUM,EAAI,WAAWH,CAAC,CAAC,GAAK,GAChCH,EAAUM,EAAI,WAAWH,EAAI,CAAC,CAAC,GAAK,EACpCH,EAAUM,EAAI,WAAWH,EAAI,CAAC,CAAC,GAAK,EACvCS,EAAIC,GAAS,EAAKF,GAAO,EAAK,IAC9BC,EAAIC,GAAS,EAAIF,EAAM,KAGlBC,CACT,CAEA,SAASE,GAAiBC,EAAK,CAC7B,OAAOhB,EAAOgB,GAAO,GAAK,EAAI,EAC5BhB,EAAOgB,GAAO,GAAK,EAAI,EACvBhB,EAAOgB,GAAO,EAAI,EAAI,EACtBhB,EAAOgB,EAAM,EAAI,CACrB,CAEA,SAASC,GAAaC,EAAOC,EAAOC,EAAK,CAGvC,QAFIR,EACAS,EAAS,CAAC,EACLjB,EAAIe,EAAOf,EAAIgB,EAAKhB,GAAK,EAChCQ,GACIM,EAAMd,CAAC,GAAK,GAAM,WAClBc,EAAMd,EAAI,CAAC,GAAK,EAAK,QACtBc,EAAMd,EAAI,CAAC,EAAI,KAClBiB,EAAO,KAAKN,GAAgBH,CAAG,CAAC,EAElC,OAAOS,EAAO,KAAK,EAAE,CACvB,CAEA,SAAStB,GAAemB,EAAO,CAQ7B,QAPIN,EACAP,EAAMa,EAAM,OACZI,EAAajB,EAAM,EACnBkB,EAAQ,CAAC,EACTC,EAAiB,MAGZpB,EAAI,EAAGqB,EAAOpB,EAAMiB,EAAYlB,EAAIqB,EAAMrB,GAAKoB,EACtDD,EAAM,KAAKN,GAAYC,EAAOd,EAAIA,EAAIoB,EAAkBC,EAAOA,EAAQrB,EAAIoB,CAAe,CAAC,EAI7F,OAAIF,IAAe,GACjBV,EAAMM,EAAMb,EAAM,CAAC,EACnBkB,EAAM,KACJvB,EAAOY,GAAO,CAAC,EACfZ,EAAQY,GAAO,EAAK,EAAI,EACxB,IACF,GACSU,IAAe,IACxBV,GAAOM,EAAMb,EAAM,CAAC,GAAK,GAAKa,EAAMb,EAAM,CAAC,EAC3CkB,EAAM,KACJvB,EAAOY,GAAO,EAAE,EAChBZ,EAAQY,GAAO,EAAK,EAAI,EACxBZ,EAAQY,GAAO,EAAK,EAAI,EACxB,GACF,GAGKW,EAAM,KAAK,EAAE,CACtB,ICrJA,IAAAG,GAAAC,EAAAC,IAAA,CACAA,GAAQ,KAAO,SAAUC,EAAQC,EAAQC,EAAMC,EAAMC,EAAQ,CAC3D,IAAIC,EAAGC,EACHC,EAAQH,EAAS,EAAKD,EAAO,EAC7BK,GAAQ,GAAKD,GAAQ,EACrBE,EAAQD,GAAQ,EAChBE,EAAQ,GACRC,EAAIT,EAAQE,EAAS,EAAK,EAC1BQ,EAAIV,EAAO,GAAK,EAChBW,EAAIb,EAAOC,EAASU,CAAC,EAOzB,IALAA,GAAKC,EAELP,EAAIQ,GAAM,GAAM,CAACH,GAAU,EAC3BG,IAAO,CAACH,EACRA,GAASH,EACFG,EAAQ,EAAGL,EAAKA,EAAI,IAAOL,EAAOC,EAASU,CAAC,EAAGA,GAAKC,EAAGF,GAAS,EAAG,CAK1E,IAHAJ,EAAID,GAAM,GAAM,CAACK,GAAU,EAC3BL,IAAO,CAACK,EACRA,GAASP,EACFO,EAAQ,EAAGJ,EAAKA,EAAI,IAAON,EAAOC,EAASU,CAAC,EAAGA,GAAKC,EAAGF,GAAS,EAAG,CAE1E,GAAIL,IAAM,EACRA,EAAI,EAAII,MACH,IAAIJ,IAAMG,EACf,OAAOF,EAAI,KAAQO,EAAI,GAAK,GAAK,MAEjCP,EAAIA,EAAI,KAAK,IAAI,EAAGH,CAAI,EACxBE,EAAIA,EAAII,EAEV,OAAQI,EAAI,GAAK,GAAKP,EAAI,KAAK,IAAI,EAAGD,EAAIF,CAAI,CAChD,EAEAJ,GAAQ,MAAQ,SAAUC,EAAQc,EAAOb,EAAQC,EAAMC,EAAMC,EAAQ,CACnE,IAAIC,EAAGC,EAAGS,EACNR,EAAQH,EAAS,EAAKD,EAAO,EAC7BK,GAAQ,GAAKD,GAAQ,EACrBE,EAAQD,GAAQ,EAChBQ,EAAMb,IAAS,GAAK,KAAK,IAAI,EAAG,GAAG,EAAI,KAAK,IAAI,EAAG,GAAG,EAAI,EAC1DQ,EAAIT,EAAO,EAAKE,EAAS,EACzB,EAAIF,EAAO,EAAI,GACfW,EAAIC,EAAQ,GAAMA,IAAU,GAAK,EAAIA,EAAQ,EAAK,EAAI,EAmC1D,IAjCAA,EAAQ,KAAK,IAAIA,CAAK,EAElB,MAAMA,CAAK,GAAKA,IAAU,KAC5BR,EAAI,MAAMQ,CAAK,EAAI,EAAI,EACvBT,EAAIG,IAEJH,EAAI,KAAK,MAAM,KAAK,IAAIS,CAAK,EAAI,KAAK,GAAG,EACrCA,GAASC,EAAI,KAAK,IAAI,EAAG,CAACV,CAAC,GAAK,IAClCA,IACAU,GAAK,GAEHV,EAAII,GAAS,EACfK,GAASE,EAAKD,EAEdD,GAASE,EAAK,KAAK,IAAI,EAAG,EAAIP,CAAK,EAEjCK,EAAQC,GAAK,IACfV,IACAU,GAAK,GAGHV,EAAII,GAASD,GACfF,EAAI,EACJD,EAAIG,GACKH,EAAII,GAAS,GACtBH,GAAMQ,EAAQC,EAAK,GAAK,KAAK,IAAI,EAAGZ,CAAI,EACxCE,EAAIA,EAAII,IAERH,EAAIQ,EAAQ,KAAK,IAAI,EAAGL,EAAQ,CAAC,EAAI,KAAK,IAAI,EAAGN,CAAI,EACrDE,EAAI,IAIDF,GAAQ,EAAGH,EAAOC,EAASU,CAAC,EAAIL,EAAI,IAAMK,GAAK,EAAGL,GAAK,IAAKH,GAAQ,EAAG,CAI9E,IAFAE,EAAKA,GAAKF,EAAQG,EAClBC,GAAQJ,EACDI,EAAO,EAAGP,EAAOC,EAASU,CAAC,EAAIN,EAAI,IAAMM,GAAK,EAAGN,GAAK,IAAKE,GAAQ,EAAG,CAE7EP,EAAOC,EAASU,EAAI,CAAC,GAAKE,EAAI,GAChC,ICpFA,IAAAI,GAAAC,EAAAC,IAAA,cAUA,IAAMC,GAAS,KACTC,GAAU,KACVC,GACH,OAAO,QAAW,YAAc,OAAO,OAAO,KAAW,WACtD,OAAO,IAAO,4BAA4B,EAC1C,KAENH,GAAQ,OAASI,EACjBJ,GAAQ,WAAaK,GACrBL,GAAQ,kBAAoB,GAE5B,IAAMM,GAAe,WACrBN,GAAQ,WAAaM,GAgBrBF,EAAO,oBAAsBG,GAAkB,EAE3C,CAACH,EAAO,qBAAuB,OAAO,QAAY,KAClD,OAAO,QAAQ,OAAU,YAC3B,QAAQ,MACN,+IAEF,EAGF,SAASG,IAAqB,CAE5B,GAAI,CACF,IAAMC,EAAM,IAAI,WAAW,CAAC,EACtBC,EAAQ,CAAE,IAAK,UAAY,CAAE,MAAO,GAAG,CAAE,EAC/C,cAAO,eAAeA,EAAO,WAAW,SAAS,EACjD,OAAO,eAAeD,EAAKC,CAAK,EACzBD,EAAI,IAAI,IAAM,EACvB,MAAY,CACV,MAAO,EACT,CACF,CAEA,OAAO,eAAeJ,EAAO,UAAW,SAAU,CAChD,WAAY,GACZ,IAAK,UAAY,CACf,GAAKA,EAAO,SAAS,IAAI,EACzB,OAAO,KAAK,MACd,CACF,CAAC,EAED,OAAO,eAAeA,EAAO,UAAW,SAAU,CAChD,WAAY,GACZ,IAAK,UAAY,CACf,GAAKA,EAAO,SAAS,IAAI,EACzB,OAAO,KAAK,UACd,CACF,CAAC,EAED,SAASM,EAAcC,EAAQ,CAC7B,GAAIA,EAASL,GACX,MAAM,IAAI,WAAW,cAAgBK,EAAS,gCAAgC,EAGhF,IAAMC,EAAM,IAAI,WAAWD,CAAM,EACjC,cAAO,eAAeC,EAAKR,EAAO,SAAS,EACpCQ,CACT,CAYA,SAASR,EAAQS,EAAKC,EAAkBH,EAAQ,CAE9C,GAAI,OAAOE,GAAQ,SAAU,CAC3B,GAAI,OAAOC,GAAqB,SAC9B,MAAM,IAAI,UACR,oEACF,EAEF,OAAOC,GAAYF,CAAG,CACxB,CACA,OAAOG,GAAKH,EAAKC,EAAkBH,CAAM,CAC3C,CAEAP,EAAO,SAAW,KAElB,SAASY,GAAMC,EAAOH,EAAkBH,EAAQ,CAC9C,GAAI,OAAOM,GAAU,SACnB,OAAOC,GAAWD,EAAOH,CAAgB,EAG3C,GAAI,YAAY,OAAOG,CAAK,EAC1B,OAAOE,GAAcF,CAAK,EAG5B,GAAIA,GAAS,KACX,MAAM,IAAI,UACR,kHAC0C,OAAOA,CACnD,EAQF,GALIG,EAAWH,EAAO,WAAW,GAC5BA,GAASG,EAAWH,EAAM,OAAQ,WAAW,GAI9C,OAAO,kBAAsB,MAC5BG,EAAWH,EAAO,iBAAiB,GACnCA,GAASG,EAAWH,EAAM,OAAQ,iBAAiB,GACtD,OAAOI,GAAgBJ,EAAOH,EAAkBH,CAAM,EAGxD,GAAI,OAAOM,GAAU,SACnB,MAAM,IAAI,UACR,uEACF,EAGF,IAAMK,EAAUL,EAAM,SAAWA,EAAM,QAAQ,EAC/C,GAAIK,GAAW,MAAQA,IAAYL,EACjC,OAAOb,EAAO,KAAKkB,EAASR,EAAkBH,CAAM,EAGtD,IAAMY,EAAIC,GAAWP,CAAK,EAC1B,GAAIM,EAAG,OAAOA,EAEd,GAAI,OAAO,OAAW,KAAe,OAAO,aAAe,MACvD,OAAON,EAAM,OAAO,WAAW,GAAM,WACvC,OAAOb,EAAO,KAAKa,EAAM,OAAO,WAAW,EAAE,QAAQ,EAAGH,EAAkBH,CAAM,EAGlF,MAAM,IAAI,UACR,kHAC0C,OAAOM,CACnD,CACF,CAUAb,EAAO,KAAO,SAAUa,EAAOH,EAAkBH,EAAQ,CACvD,OAAOK,GAAKC,EAAOH,EAAkBH,CAAM,CAC7C,EAIA,OAAO,eAAeP,EAAO,UAAW,WAAW,SAAS,EAC5D,OAAO,eAAeA,EAAQ,UAAU,EAExC,SAASqB,GAAYC,EAAM,CACzB,GAAI,OAAOA,GAAS,SAClB,MAAM,IAAI,UAAU,wCAAwC,EACvD,GAAIA,EAAO,EAChB,MAAM,IAAI,WAAW,cAAgBA,EAAO,gCAAgC,CAEhF,CAEA,SAASC,GAAOD,EAAME,EAAMC,EAAU,CAEpC,OADAJ,GAAWC,CAAI,EACXA,GAAQ,EACHhB,EAAagB,CAAI,EAEtBE,IAAS,OAIJ,OAAOC,GAAa,SACvBnB,EAAagB,CAAI,EAAE,KAAKE,EAAMC,CAAQ,EACtCnB,EAAagB,CAAI,EAAE,KAAKE,CAAI,EAE3BlB,EAAagB,CAAI,CAC1B,CAMAtB,EAAO,MAAQ,SAAUsB,EAAME,EAAMC,EAAU,CAC7C,OAAOF,GAAMD,EAAME,EAAMC,CAAQ,CACnC,EAEA,SAASd,GAAaW,EAAM,CAC1B,OAAAD,GAAWC,CAAI,EACRhB,EAAagB,EAAO,EAAI,EAAII,GAAQJ,CAAI,EAAI,CAAC,CACtD,CAKAtB,EAAO,YAAc,SAAUsB,EAAM,CACnC,OAAOX,GAAYW,CAAI,CACzB,EAIAtB,EAAO,gBAAkB,SAAUsB,EAAM,CACvC,OAAOX,GAAYW,CAAI,CACzB,EAEA,SAASR,GAAYa,EAAQF,EAAU,CAKrC,IAJI,OAAOA,GAAa,UAAYA,IAAa,MAC/CA,EAAW,QAGT,CAACzB,EAAO,WAAWyB,CAAQ,EAC7B,MAAM,IAAI,UAAU,qBAAuBA,CAAQ,EAGrD,IAAMlB,EAASqB,GAAWD,EAAQF,CAAQ,EAAI,EAC1CjB,EAAMF,EAAaC,CAAM,EAEvBsB,EAASrB,EAAI,MAAMmB,EAAQF,CAAQ,EAEzC,OAAII,IAAWtB,IAIbC,EAAMA,EAAI,MAAM,EAAGqB,CAAM,GAGpBrB,CACT,CAEA,SAASsB,GAAeC,EAAO,CAC7B,IAAMxB,EAASwB,EAAM,OAAS,EAAI,EAAIL,GAAQK,EAAM,MAAM,EAAI,EACxDvB,EAAMF,EAAaC,CAAM,EAC/B,QAASyB,EAAI,EAAGA,EAAIzB,EAAQyB,GAAK,EAC/BxB,EAAIwB,CAAC,EAAID,EAAMC,CAAC,EAAI,IAEtB,OAAOxB,CACT,CAEA,SAASO,GAAekB,EAAW,CACjC,GAAIjB,EAAWiB,EAAW,UAAU,EAAG,CACrC,IAAMC,EAAO,IAAI,WAAWD,CAAS,EACrC,OAAOhB,GAAgBiB,EAAK,OAAQA,EAAK,WAAYA,EAAK,UAAU,CACtE,CACA,OAAOJ,GAAcG,CAAS,CAChC,CAEA,SAAShB,GAAiBc,EAAOI,EAAY5B,EAAQ,CACnD,GAAI4B,EAAa,GAAKJ,EAAM,WAAaI,EACvC,MAAM,IAAI,WAAW,sCAAsC,EAG7D,GAAIJ,EAAM,WAAaI,GAAc5B,GAAU,GAC7C,MAAM,IAAI,WAAW,sCAAsC,EAG7D,IAAIC,EACJ,OAAI2B,IAAe,QAAa5B,IAAW,OACzCC,EAAM,IAAI,WAAWuB,CAAK,EACjBxB,IAAW,OACpBC,EAAM,IAAI,WAAWuB,EAAOI,CAAU,EAEtC3B,EAAM,IAAI,WAAWuB,EAAOI,EAAY5B,CAAM,EAIhD,OAAO,eAAeC,EAAKR,EAAO,SAAS,EAEpCQ,CACT,CAEA,SAASY,GAAYgB,EAAK,CACxB,GAAIpC,EAAO,SAASoC,CAAG,EAAG,CACxB,IAAMC,EAAMX,GAAQU,EAAI,MAAM,EAAI,EAC5B5B,EAAMF,EAAa+B,CAAG,EAE5B,OAAI7B,EAAI,SAAW,GAInB4B,EAAI,KAAK5B,EAAK,EAAG,EAAG6B,CAAG,EAChB7B,CACT,CAEA,GAAI4B,EAAI,SAAW,OACjB,OAAI,OAAOA,EAAI,QAAW,UAAYE,GAAYF,EAAI,MAAM,EACnD9B,EAAa,CAAC,EAEhBwB,GAAcM,CAAG,EAG1B,GAAIA,EAAI,OAAS,UAAY,MAAM,QAAQA,EAAI,IAAI,EACjD,OAAON,GAAcM,EAAI,IAAI,CAEjC,CAEA,SAASV,GAASnB,EAAQ,CAGxB,GAAIA,GAAUL,GACZ,MAAM,IAAI,WAAW,0DACaA,GAAa,SAAS,EAAE,EAAI,QAAQ,EAExE,OAAOK,EAAS,CAClB,CAEA,SAASN,GAAYM,EAAQ,CAC3B,MAAI,CAACA,GAAUA,IACbA,EAAS,GAEJP,EAAO,MAAM,CAACO,CAAM,CAC7B,CAEAP,EAAO,SAAW,SAAmBmB,EAAG,CACtC,OAAOA,GAAK,MAAQA,EAAE,YAAc,IAClCA,IAAMnB,EAAO,SACjB,EAEAA,EAAO,QAAU,SAAkBuC,EAAGpB,EAAG,CAGvC,GAFIH,EAAWuB,EAAG,UAAU,IAAGA,EAAIvC,EAAO,KAAKuC,EAAGA,EAAE,OAAQA,EAAE,UAAU,GACpEvB,EAAWG,EAAG,UAAU,IAAGA,EAAInB,EAAO,KAAKmB,EAAGA,EAAE,OAAQA,EAAE,UAAU,GACpE,CAACnB,EAAO,SAASuC,CAAC,GAAK,CAACvC,EAAO,SAASmB,CAAC,EAC3C,MAAM,IAAI,UACR,uEACF,EAGF,GAAIoB,IAAMpB,EAAG,MAAO,GAEpB,IAAIqB,EAAID,EAAE,OACNE,EAAItB,EAAE,OAEV,QAASa,EAAI,EAAGK,EAAM,KAAK,IAAIG,EAAGC,CAAC,EAAGT,EAAIK,EAAK,EAAEL,EAC/C,GAAIO,EAAEP,CAAC,IAAMb,EAAEa,CAAC,EAAG,CACjBQ,EAAID,EAAEP,CAAC,EACPS,EAAItB,EAAEa,CAAC,EACP,KACF,CAGF,OAAIQ,EAAIC,EAAU,GACdA,EAAID,EAAU,EACX,CACT,EAEAxC,EAAO,WAAa,SAAqByB,EAAU,CACjD,OAAQ,OAAOA,CAAQ,EAAE,YAAY,EAAG,CACtC,IAAK,MACL,IAAK,OACL,IAAK,QACL,IAAK,QACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,WACH,MAAO,GACT,QACE,MAAO,EACX,CACF,EAEAzB,EAAO,OAAS,SAAiB0C,EAAMnC,EAAQ,CAC7C,GAAI,CAAC,MAAM,QAAQmC,CAAI,EACrB,MAAM,IAAI,UAAU,6CAA6C,EAGnE,GAAIA,EAAK,SAAW,EAClB,OAAO1C,EAAO,MAAM,CAAC,EAGvB,IAAIgC,EACJ,GAAIzB,IAAW,OAEb,IADAA,EAAS,EACJyB,EAAI,EAAGA,EAAIU,EAAK,OAAQ,EAAEV,EAC7BzB,GAAUmC,EAAKV,CAAC,EAAE,OAItB,IAAMW,EAAS3C,EAAO,YAAYO,CAAM,EACpCqC,EAAM,EACV,IAAKZ,EAAI,EAAGA,EAAIU,EAAK,OAAQ,EAAEV,EAAG,CAChC,IAAIxB,EAAMkC,EAAKV,CAAC,EAChB,GAAIhB,EAAWR,EAAK,UAAU,EACxBoC,EAAMpC,EAAI,OAASmC,EAAO,QACvB3C,EAAO,SAASQ,CAAG,IAAGA,EAAMR,EAAO,KAAKQ,CAAG,GAChDA,EAAI,KAAKmC,EAAQC,CAAG,GAEpB,WAAW,UAAU,IAAI,KACvBD,EACAnC,EACAoC,CACF,UAEQ5C,EAAO,SAASQ,CAAG,EAG7BA,EAAI,KAAKmC,EAAQC,CAAG,MAFpB,OAAM,IAAI,UAAU,6CAA6C,EAInEA,GAAOpC,EAAI,MACb,CACA,OAAOmC,CACT,EAEA,SAASf,GAAYD,EAAQF,EAAU,CACrC,GAAIzB,EAAO,SAAS2B,CAAM,EACxB,OAAOA,EAAO,OAEhB,GAAI,YAAY,OAAOA,CAAM,GAAKX,EAAWW,EAAQ,WAAW,EAC9D,OAAOA,EAAO,WAEhB,GAAI,OAAOA,GAAW,SACpB,MAAM,IAAI,UACR,2FACmB,OAAOA,CAC5B,EAGF,IAAMU,EAAMV,EAAO,OACbkB,EAAa,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,GAC5D,GAAI,CAACA,GAAaR,IAAQ,EAAG,MAAO,GAGpC,IAAIS,EAAc,GAClB,OACE,OAAQrB,EAAU,CAChB,IAAK,QACL,IAAK,SACL,IAAK,SACH,OAAOY,EACT,IAAK,OACL,IAAK,QACH,OAAOU,GAAYpB,CAAM,EAAE,OAC7B,IAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,WACH,OAAOU,EAAM,EACf,IAAK,MACH,OAAOA,IAAQ,EACjB,IAAK,SACH,OAAOW,GAAcrB,CAAM,EAAE,OAC/B,QACE,GAAImB,EACF,OAAOD,EAAY,GAAKE,GAAYpB,CAAM,EAAE,OAE9CF,GAAY,GAAKA,GAAU,YAAY,EACvCqB,EAAc,EAClB,CAEJ,CACA9C,EAAO,WAAa4B,GAEpB,SAASqB,GAAcxB,EAAUyB,EAAOC,EAAK,CAC3C,IAAIL,EAAc,GA8BlB,IArBII,IAAU,QAAaA,EAAQ,KACjCA,EAAQ,GAINA,EAAQ,KAAK,UAIbC,IAAQ,QAAaA,EAAM,KAAK,UAClCA,EAAM,KAAK,QAGTA,GAAO,KAKXA,KAAS,EACTD,KAAW,EAEPC,GAAOD,GACT,MAAO,GAKT,IAFKzB,IAAUA,EAAW,UAGxB,OAAQA,EAAU,CAChB,IAAK,MACH,OAAO2B,GAAS,KAAMF,EAAOC,CAAG,EAElC,IAAK,OACL,IAAK,QACH,OAAOE,GAAU,KAAMH,EAAOC,CAAG,EAEnC,IAAK,QACH,OAAOG,GAAW,KAAMJ,EAAOC,CAAG,EAEpC,IAAK,SACL,IAAK,SACH,OAAOI,GAAY,KAAML,EAAOC,CAAG,EAErC,IAAK,SACH,OAAOK,GAAY,KAAMN,EAAOC,CAAG,EAErC,IAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,WACH,OAAOM,GAAa,KAAMP,EAAOC,CAAG,EAEtC,QACE,GAAIL,EAAa,MAAM,IAAI,UAAU,qBAAuBrB,CAAQ,EACpEA,GAAYA,EAAW,IAAI,YAAY,EACvCqB,EAAc,EAClB,CAEJ,CAQA9C,EAAO,UAAU,UAAY,GAE7B,SAAS0D,EAAMvC,EAAGwC,EAAGC,EAAG,CACtB,IAAM5B,EAAIb,EAAEwC,CAAC,EACbxC,EAAEwC,CAAC,EAAIxC,EAAEyC,CAAC,EACVzC,EAAEyC,CAAC,EAAI5B,CACT,CAEAhC,EAAO,UAAU,OAAS,UAAmB,CAC3C,IAAMqC,EAAM,KAAK,OACjB,GAAIA,EAAM,IAAM,EACd,MAAM,IAAI,WAAW,2CAA2C,EAElE,QAASL,EAAI,EAAGA,EAAIK,EAAKL,GAAK,EAC5B0B,EAAK,KAAM1B,EAAGA,EAAI,CAAC,EAErB,OAAO,IACT,EAEAhC,EAAO,UAAU,OAAS,UAAmB,CAC3C,IAAMqC,EAAM,KAAK,OACjB,GAAIA,EAAM,IAAM,EACd,MAAM,IAAI,WAAW,2CAA2C,EAElE,QAASL,EAAI,EAAGA,EAAIK,EAAKL,GAAK,EAC5B0B,EAAK,KAAM1B,EAAGA,EAAI,CAAC,EACnB0B,EAAK,KAAM1B,EAAI,EAAGA,EAAI,CAAC,EAEzB,OAAO,IACT,EAEAhC,EAAO,UAAU,OAAS,UAAmB,CAC3C,IAAMqC,EAAM,KAAK,OACjB,GAAIA,EAAM,IAAM,EACd,MAAM,IAAI,WAAW,2CAA2C,EAElE,QAASL,EAAI,EAAGA,EAAIK,EAAKL,GAAK,EAC5B0B,EAAK,KAAM1B,EAAGA,EAAI,CAAC,EACnB0B,EAAK,KAAM1B,EAAI,EAAGA,EAAI,CAAC,EACvB0B,EAAK,KAAM1B,EAAI,EAAGA,EAAI,CAAC,EACvB0B,EAAK,KAAM1B,EAAI,EAAGA,EAAI,CAAC,EAEzB,OAAO,IACT,EAEAhC,EAAO,UAAU,SAAW,UAAqB,CAC/C,IAAMO,EAAS,KAAK,OACpB,OAAIA,IAAW,EAAU,GACrB,UAAU,SAAW,EAAU8C,GAAU,KAAM,EAAG9C,CAAM,EACrD0C,GAAa,MAAM,KAAM,SAAS,CAC3C,EAEAjD,EAAO,UAAU,eAAiBA,EAAO,UAAU,SAEnDA,EAAO,UAAU,OAAS,SAAiBmB,EAAG,CAC5C,GAAI,CAACnB,EAAO,SAASmB,CAAC,EAAG,MAAM,IAAI,UAAU,2BAA2B,EACxE,OAAI,OAASA,EAAU,GAChBnB,EAAO,QAAQ,KAAMmB,CAAC,IAAM,CACrC,EAEAnB,EAAO,UAAU,QAAU,UAAoB,CAC7C,IAAI6D,EAAM,GACJC,EAAMlE,GAAQ,kBACpB,OAAAiE,EAAM,KAAK,SAAS,MAAO,EAAGC,CAAG,EAAE,QAAQ,UAAW,KAAK,EAAE,KAAK,EAC9D,KAAK,OAASA,IAAKD,GAAO,SACvB,WAAaA,EAAM,GAC5B,EACI9D,KACFC,EAAO,UAAUD,EAAmB,EAAIC,EAAO,UAAU,SAG3DA,EAAO,UAAU,QAAU,SAAkB+D,EAAQb,EAAOC,EAAKa,EAAWC,EAAS,CAInF,GAHIjD,EAAW+C,EAAQ,UAAU,IAC/BA,EAAS/D,EAAO,KAAK+D,EAAQA,EAAO,OAAQA,EAAO,UAAU,GAE3D,CAAC/D,EAAO,SAAS+D,CAAM,EACzB,MAAM,IAAI,UACR,iFACoB,OAAOA,CAC7B,EAgBF,GAbIb,IAAU,SACZA,EAAQ,GAENC,IAAQ,SACVA,EAAMY,EAASA,EAAO,OAAS,GAE7BC,IAAc,SAChBA,EAAY,GAEVC,IAAY,SACdA,EAAU,KAAK,QAGbf,EAAQ,GAAKC,EAAMY,EAAO,QAAUC,EAAY,GAAKC,EAAU,KAAK,OACtE,MAAM,IAAI,WAAW,oBAAoB,EAG3C,GAAID,GAAaC,GAAWf,GAASC,EACnC,MAAO,GAET,GAAIa,GAAaC,EACf,MAAO,GAET,GAAIf,GAASC,EACX,MAAO,GAQT,GALAD,KAAW,EACXC,KAAS,EACTa,KAAe,EACfC,KAAa,EAET,OAASF,EAAQ,MAAO,GAE5B,IAAIvB,EAAIyB,EAAUD,EACdvB,EAAIU,EAAMD,EACRb,EAAM,KAAK,IAAIG,EAAGC,CAAC,EAEnByB,EAAW,KAAK,MAAMF,EAAWC,CAAO,EACxCE,EAAaJ,EAAO,MAAMb,EAAOC,CAAG,EAE1C,QAASnB,EAAI,EAAGA,EAAIK,EAAK,EAAEL,EACzB,GAAIkC,EAASlC,CAAC,IAAMmC,EAAWnC,CAAC,EAAG,CACjCQ,EAAI0B,EAASlC,CAAC,EACdS,EAAI0B,EAAWnC,CAAC,EAChB,KACF,CAGF,OAAIQ,EAAIC,EAAU,GACdA,EAAID,EAAU,EACX,CACT,EAWA,SAAS4B,GAAsBzB,EAAQ0B,EAAKlC,EAAYV,EAAU6C,EAAK,CAErE,GAAI3B,EAAO,SAAW,EAAG,MAAO,GAmBhC,GAhBI,OAAOR,GAAe,UACxBV,EAAWU,EACXA,EAAa,GACJA,EAAa,WACtBA,EAAa,WACJA,EAAa,cACtBA,EAAa,aAEfA,EAAa,CAACA,EACVG,GAAYH,CAAU,IAExBA,EAAamC,EAAM,EAAK3B,EAAO,OAAS,GAItCR,EAAa,IAAGA,EAAaQ,EAAO,OAASR,GAC7CA,GAAcQ,EAAO,OAAQ,CAC/B,GAAI2B,EAAK,MAAO,GACXnC,EAAaQ,EAAO,OAAS,CACpC,SAAWR,EAAa,EACtB,GAAImC,EAAKnC,EAAa,MACjB,OAAO,GASd,GALI,OAAOkC,GAAQ,WACjBA,EAAMrE,EAAO,KAAKqE,EAAK5C,CAAQ,GAI7BzB,EAAO,SAASqE,CAAG,EAErB,OAAIA,EAAI,SAAW,EACV,GAEFE,GAAa5B,EAAQ0B,EAAKlC,EAAYV,EAAU6C,CAAG,EACrD,GAAI,OAAOD,GAAQ,SAExB,OADAA,EAAMA,EAAM,IACR,OAAO,WAAW,UAAU,SAAY,WACtCC,EACK,WAAW,UAAU,QAAQ,KAAK3B,EAAQ0B,EAAKlC,CAAU,EAEzD,WAAW,UAAU,YAAY,KAAKQ,EAAQ0B,EAAKlC,CAAU,EAGjEoC,GAAa5B,EAAQ,CAAC0B,CAAG,EAAGlC,EAAYV,EAAU6C,CAAG,EAG9D,MAAM,IAAI,UAAU,sCAAsC,CAC5D,CAEA,SAASC,GAAcnE,EAAKiE,EAAKlC,EAAYV,EAAU6C,EAAK,CAC1D,IAAIE,EAAY,EACZC,EAAYrE,EAAI,OAChBsE,EAAYL,EAAI,OAEpB,GAAI5C,IAAa,SACfA,EAAW,OAAOA,CAAQ,EAAE,YAAY,EACpCA,IAAa,QAAUA,IAAa,SACpCA,IAAa,WAAaA,IAAa,YAAY,CACrD,GAAIrB,EAAI,OAAS,GAAKiE,EAAI,OAAS,EACjC,MAAO,GAETG,EAAY,EACZC,GAAa,EACbC,GAAa,EACbvC,GAAc,CAChB,CAGF,SAASwC,EAAMnE,EAAKwB,EAAG,CACrB,OAAIwC,IAAc,EACThE,EAAIwB,CAAC,EAELxB,EAAI,aAAawB,EAAIwC,CAAS,CAEzC,CAEA,IAAIxC,EACJ,GAAIsC,EAAK,CACP,IAAIM,EAAa,GACjB,IAAK5C,EAAIG,EAAYH,EAAIyC,EAAWzC,IAClC,GAAI2C,EAAKvE,EAAK4B,CAAC,IAAM2C,EAAKN,EAAKO,IAAe,GAAK,EAAI5C,EAAI4C,CAAU,GAEnE,GADIA,IAAe,KAAIA,EAAa5C,GAChCA,EAAI4C,EAAa,IAAMF,EAAW,OAAOE,EAAaJ,OAEtDI,IAAe,KAAI5C,GAAKA,EAAI4C,GAChCA,EAAa,EAGnB,KAEE,KADIzC,EAAauC,EAAYD,IAAWtC,EAAasC,EAAYC,GAC5D1C,EAAIG,EAAYH,GAAK,EAAGA,IAAK,CAChC,IAAI6C,EAAQ,GACZ,QAASC,EAAI,EAAGA,EAAIJ,EAAWI,IAC7B,GAAIH,EAAKvE,EAAK4B,EAAI8C,CAAC,IAAMH,EAAKN,EAAKS,CAAC,EAAG,CACrCD,EAAQ,GACR,KACF,CAEF,GAAIA,EAAO,OAAO7C,CACpB,CAGF,MAAO,EACT,CAEAhC,EAAO,UAAU,SAAW,SAAmBqE,EAAKlC,EAAYV,EAAU,CACxE,OAAO,KAAK,QAAQ4C,EAAKlC,EAAYV,CAAQ,IAAM,EACrD,EAEAzB,EAAO,UAAU,QAAU,SAAkBqE,EAAKlC,EAAYV,EAAU,CACtE,OAAO2C,GAAqB,KAAMC,EAAKlC,EAAYV,EAAU,EAAI,CACnE,EAEAzB,EAAO,UAAU,YAAc,SAAsBqE,EAAKlC,EAAYV,EAAU,CAC9E,OAAO2C,GAAqB,KAAMC,EAAKlC,EAAYV,EAAU,EAAK,CACpE,EAEA,SAASsD,GAAUvE,EAAKmB,EAAQqD,EAAQzE,EAAQ,CAC9CyE,EAAS,OAAOA,CAAM,GAAK,EAC3B,IAAMC,EAAYzE,EAAI,OAASwE,EAC1BzE,GAGHA,EAAS,OAAOA,CAAM,EAClBA,EAAS0E,IACX1E,EAAS0E,IAJX1E,EAAS0E,EAQX,IAAMC,EAASvD,EAAO,OAElBpB,EAAS2E,EAAS,IACpB3E,EAAS2E,EAAS,GAEpB,IAAIlD,EACJ,IAAKA,EAAI,EAAGA,EAAIzB,EAAQ,EAAEyB,EAAG,CAC3B,IAAMmD,EAAS,SAASxD,EAAO,OAAOK,EAAI,EAAG,CAAC,EAAG,EAAE,EACnD,GAAIM,GAAY6C,CAAM,EAAG,OAAOnD,EAChCxB,EAAIwE,EAAShD,CAAC,EAAImD,CACpB,CACA,OAAOnD,CACT,CAEA,SAASoD,GAAW5E,EAAKmB,EAAQqD,EAAQzE,EAAQ,CAC/C,OAAO8E,GAAWtC,GAAYpB,EAAQnB,EAAI,OAASwE,CAAM,EAAGxE,EAAKwE,EAAQzE,CAAM,CACjF,CAEA,SAAS+E,GAAY9E,EAAKmB,EAAQqD,EAAQzE,EAAQ,CAChD,OAAO8E,GAAWE,GAAa5D,CAAM,EAAGnB,EAAKwE,EAAQzE,CAAM,CAC7D,CAEA,SAASiF,GAAahF,EAAKmB,EAAQqD,EAAQzE,EAAQ,CACjD,OAAO8E,GAAWrC,GAAcrB,CAAM,EAAGnB,EAAKwE,EAAQzE,CAAM,CAC9D,CAEA,SAASkF,GAAWjF,EAAKmB,EAAQqD,EAAQzE,EAAQ,CAC/C,OAAO8E,GAAWK,GAAe/D,EAAQnB,EAAI,OAASwE,CAAM,EAAGxE,EAAKwE,EAAQzE,CAAM,CACpF,CAEAP,EAAO,UAAU,MAAQ,SAAgB2B,EAAQqD,EAAQzE,EAAQkB,EAAU,CAEzE,GAAIuD,IAAW,OACbvD,EAAW,OACXlB,EAAS,KAAK,OACdyE,EAAS,UAEAzE,IAAW,QAAa,OAAOyE,GAAW,SACnDvD,EAAWuD,EACXzE,EAAS,KAAK,OACdyE,EAAS,UAEA,SAASA,CAAM,EACxBA,EAASA,IAAW,EAChB,SAASzE,CAAM,GACjBA,EAASA,IAAW,EAChBkB,IAAa,SAAWA,EAAW,UAEvCA,EAAWlB,EACXA,EAAS,YAGX,OAAM,IAAI,MACR,yEACF,EAGF,IAAM0E,EAAY,KAAK,OAASD,EAGhC,IAFIzE,IAAW,QAAaA,EAAS0E,KAAW1E,EAAS0E,GAEpDtD,EAAO,OAAS,IAAMpB,EAAS,GAAKyE,EAAS,IAAOA,EAAS,KAAK,OACrE,MAAM,IAAI,WAAW,wCAAwC,EAG1DvD,IAAUA,EAAW,QAE1B,IAAIqB,EAAc,GAClB,OACE,OAAQrB,EAAU,CAChB,IAAK,MACH,OAAOsD,GAAS,KAAMpD,EAAQqD,EAAQzE,CAAM,EAE9C,IAAK,OACL,IAAK,QACH,OAAO6E,GAAU,KAAMzD,EAAQqD,EAAQzE,CAAM,EAE/C,IAAK,QACL,IAAK,SACL,IAAK,SACH,OAAO+E,GAAW,KAAM3D,EAAQqD,EAAQzE,CAAM,EAEhD,IAAK,SAEH,OAAOiF,GAAY,KAAM7D,EAAQqD,EAAQzE,CAAM,EAEjD,IAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,WACH,OAAOkF,GAAU,KAAM9D,EAAQqD,EAAQzE,CAAM,EAE/C,QACE,GAAIuC,EAAa,MAAM,IAAI,UAAU,qBAAuBrB,CAAQ,EACpEA,GAAY,GAAKA,GAAU,YAAY,EACvCqB,EAAc,EAClB,CAEJ,EAEA9C,EAAO,UAAU,OAAS,UAAmB,CAC3C,MAAO,CACL,KAAM,SACN,KAAM,MAAM,UAAU,MAAM,KAAK,KAAK,MAAQ,KAAM,CAAC,CACvD,CACF,EAEA,SAASwD,GAAahD,EAAK0C,EAAOC,EAAK,CACrC,OAAID,IAAU,GAAKC,IAAQ3C,EAAI,OACtBX,GAAO,cAAcW,CAAG,EAExBX,GAAO,cAAcW,EAAI,MAAM0C,EAAOC,CAAG,CAAC,CAErD,CAEA,SAASE,GAAW7C,EAAK0C,EAAOC,EAAK,CACnCA,EAAM,KAAK,IAAI3C,EAAI,OAAQ2C,CAAG,EAC9B,IAAMwC,EAAM,CAAC,EAET3D,EAAIkB,EACR,KAAOlB,EAAImB,GAAK,CACd,IAAMyC,EAAYpF,EAAIwB,CAAC,EACnB6D,EAAY,KACZC,EAAoBF,EAAY,IAChC,EACCA,EAAY,IACT,EACCA,EAAY,IACT,EACA,EAEZ,GAAI5D,EAAI8D,GAAoB3C,EAAK,CAC/B,IAAI4C,EAAYC,EAAWC,EAAYC,EAEvC,OAAQJ,EAAkB,CACxB,IAAK,GACCF,EAAY,MACdC,EAAYD,GAEd,MACF,IAAK,GACHG,EAAavF,EAAIwB,EAAI,CAAC,GACjB+D,EAAa,OAAU,MAC1BG,GAAiBN,EAAY,KAAS,EAAOG,EAAa,GACtDG,EAAgB,MAClBL,EAAYK,IAGhB,MACF,IAAK,GACHH,EAAavF,EAAIwB,EAAI,CAAC,EACtBgE,EAAYxF,EAAIwB,EAAI,CAAC,GAChB+D,EAAa,OAAU,MAASC,EAAY,OAAU,MACzDE,GAAiBN,EAAY,KAAQ,IAAOG,EAAa,KAAS,EAAOC,EAAY,GACjFE,EAAgB,OAAUA,EAAgB,OAAUA,EAAgB,SACtEL,EAAYK,IAGhB,MACF,IAAK,GACHH,EAAavF,EAAIwB,EAAI,CAAC,EACtBgE,EAAYxF,EAAIwB,EAAI,CAAC,EACrBiE,EAAazF,EAAIwB,EAAI,CAAC,GACjB+D,EAAa,OAAU,MAASC,EAAY,OAAU,MAASC,EAAa,OAAU,MACzFC,GAAiBN,EAAY,KAAQ,IAAQG,EAAa,KAAS,IAAOC,EAAY,KAAS,EAAOC,EAAa,GAC/GC,EAAgB,OAAUA,EAAgB,UAC5CL,EAAYK,GAGpB,CACF,CAEIL,IAAc,MAGhBA,EAAY,MACZC,EAAmB,GACVD,EAAY,QAErBA,GAAa,MACbF,EAAI,KAAKE,IAAc,GAAK,KAAQ,KAAM,EAC1CA,EAAY,MAASA,EAAY,MAGnCF,EAAI,KAAKE,CAAS,EAClB7D,GAAK8D,CACP,CAEA,OAAOK,GAAsBR,CAAG,CAClC,CAKA,IAAMS,GAAuB,KAE7B,SAASD,GAAuBE,EAAY,CAC1C,IAAMhE,EAAMgE,EAAW,OACvB,GAAIhE,GAAO+D,GACT,OAAO,OAAO,aAAa,MAAM,OAAQC,CAAU,EAIrD,IAAIV,EAAM,GACN3D,EAAI,EACR,KAAOA,EAAIK,GACTsD,GAAO,OAAO,aAAa,MACzB,OACAU,EAAW,MAAMrE,EAAGA,GAAKoE,EAAoB,CAC/C,EAEF,OAAOT,CACT,CAEA,SAASrC,GAAY9C,EAAK0C,EAAOC,EAAK,CACpC,IAAImD,EAAM,GACVnD,EAAM,KAAK,IAAI3C,EAAI,OAAQ2C,CAAG,EAE9B,QAASnB,EAAIkB,EAAOlB,EAAImB,EAAK,EAAEnB,EAC7BsE,GAAO,OAAO,aAAa9F,EAAIwB,CAAC,EAAI,GAAI,EAE1C,OAAOsE,CACT,CAEA,SAAS/C,GAAa/C,EAAK0C,EAAOC,EAAK,CACrC,IAAImD,EAAM,GACVnD,EAAM,KAAK,IAAI3C,EAAI,OAAQ2C,CAAG,EAE9B,QAASnB,EAAIkB,EAAOlB,EAAImB,EAAK,EAAEnB,EAC7BsE,GAAO,OAAO,aAAa9F,EAAIwB,CAAC,CAAC,EAEnC,OAAOsE,CACT,CAEA,SAASlD,GAAU5C,EAAK0C,EAAOC,EAAK,CAClC,IAAMd,EAAM7B,EAAI,QAEZ,CAAC0C,GAASA,EAAQ,KAAGA,EAAQ,IAC7B,CAACC,GAAOA,EAAM,GAAKA,EAAMd,KAAKc,EAAMd,GAExC,IAAIkE,EAAM,GACV,QAASvE,EAAIkB,EAAOlB,EAAImB,EAAK,EAAEnB,EAC7BuE,GAAOC,GAAoBhG,EAAIwB,CAAC,CAAC,EAEnC,OAAOuE,CACT,CAEA,SAAS9C,GAAcjD,EAAK0C,EAAOC,EAAK,CACtC,IAAMsD,EAAQjG,EAAI,MAAM0C,EAAOC,CAAG,EAC9BwC,EAAM,GAEV,QAAS3D,EAAI,EAAGA,EAAIyE,EAAM,OAAS,EAAGzE,GAAK,EACzC2D,GAAO,OAAO,aAAac,EAAMzE,CAAC,EAAKyE,EAAMzE,EAAI,CAAC,EAAI,GAAI,EAE5D,OAAO2D,CACT,CAEA3F,EAAO,UAAU,MAAQ,SAAgBkD,EAAOC,EAAK,CACnD,IAAMd,EAAM,KAAK,OACjBa,EAAQ,CAAC,CAACA,EACVC,EAAMA,IAAQ,OAAYd,EAAM,CAAC,CAACc,EAE9BD,EAAQ,GACVA,GAASb,EACLa,EAAQ,IAAGA,EAAQ,IACdA,EAAQb,IACjBa,EAAQb,GAGNc,EAAM,GACRA,GAAOd,EACHc,EAAM,IAAGA,EAAM,IACVA,EAAMd,IACfc,EAAMd,GAGJc,EAAMD,IAAOC,EAAMD,GAEvB,IAAMwD,EAAS,KAAK,SAASxD,EAAOC,CAAG,EAEvC,cAAO,eAAeuD,EAAQ1G,EAAO,SAAS,EAEvC0G,CACT,EAKA,SAASC,EAAa3B,EAAQ4B,EAAKrG,EAAQ,CACzC,GAAKyE,EAAS,IAAO,GAAKA,EAAS,EAAG,MAAM,IAAI,WAAW,oBAAoB,EAC/E,GAAIA,EAAS4B,EAAMrG,EAAQ,MAAM,IAAI,WAAW,uCAAuC,CACzF,CAEAP,EAAO,UAAU,WACjBA,EAAO,UAAU,WAAa,SAAqBgF,EAAQpD,EAAYiF,EAAU,CAC/E7B,EAASA,IAAW,EACpBpD,EAAaA,IAAe,EACvBiF,GAAUF,EAAY3B,EAAQpD,EAAY,KAAK,MAAM,EAE1D,IAAIyC,EAAM,KAAKW,CAAM,EACjB8B,EAAM,EACN9E,EAAI,EACR,KAAO,EAAEA,EAAIJ,IAAekF,GAAO,MACjCzC,GAAO,KAAKW,EAAShD,CAAC,EAAI8E,EAG5B,OAAOzC,CACT,EAEArE,EAAO,UAAU,WACjBA,EAAO,UAAU,WAAa,SAAqBgF,EAAQpD,EAAYiF,EAAU,CAC/E7B,EAASA,IAAW,EACpBpD,EAAaA,IAAe,EACvBiF,GACHF,EAAY3B,EAAQpD,EAAY,KAAK,MAAM,EAG7C,IAAIyC,EAAM,KAAKW,EAAS,EAAEpD,CAAU,EAChCkF,EAAM,EACV,KAAOlF,EAAa,IAAMkF,GAAO,MAC/BzC,GAAO,KAAKW,EAAS,EAAEpD,CAAU,EAAIkF,EAGvC,OAAOzC,CACT,EAEArE,EAAO,UAAU,UACjBA,EAAO,UAAU,UAAY,SAAoBgF,EAAQ6B,EAAU,CACjE,OAAA7B,EAASA,IAAW,EACf6B,GAAUF,EAAY3B,EAAQ,EAAG,KAAK,MAAM,EAC1C,KAAKA,CAAM,CACpB,EAEAhF,EAAO,UAAU,aACjBA,EAAO,UAAU,aAAe,SAAuBgF,EAAQ6B,EAAU,CACvE,OAAA7B,EAASA,IAAW,EACf6B,GAAUF,EAAY3B,EAAQ,EAAG,KAAK,MAAM,EAC1C,KAAKA,CAAM,EAAK,KAAKA,EAAS,CAAC,GAAK,CAC7C,EAEAhF,EAAO,UAAU,aACjBA,EAAO,UAAU,aAAe,SAAuBgF,EAAQ6B,EAAU,CACvE,OAAA7B,EAASA,IAAW,EACf6B,GAAUF,EAAY3B,EAAQ,EAAG,KAAK,MAAM,EACzC,KAAKA,CAAM,GAAK,EAAK,KAAKA,EAAS,CAAC,CAC9C,EAEAhF,EAAO,UAAU,aACjBA,EAAO,UAAU,aAAe,SAAuBgF,EAAQ6B,EAAU,CACvE,OAAA7B,EAASA,IAAW,EACf6B,GAAUF,EAAY3B,EAAQ,EAAG,KAAK,MAAM,GAExC,KAAKA,CAAM,EACf,KAAKA,EAAS,CAAC,GAAK,EACpB,KAAKA,EAAS,CAAC,GAAK,IACpB,KAAKA,EAAS,CAAC,EAAI,QAC1B,EAEAhF,EAAO,UAAU,aACjBA,EAAO,UAAU,aAAe,SAAuBgF,EAAQ6B,EAAU,CACvE,OAAA7B,EAASA,IAAW,EACf6B,GAAUF,EAAY3B,EAAQ,EAAG,KAAK,MAAM,EAEzC,KAAKA,CAAM,EAAI,UACnB,KAAKA,EAAS,CAAC,GAAK,GACrB,KAAKA,EAAS,CAAC,GAAK,EACrB,KAAKA,EAAS,CAAC,EACnB,EAEAhF,EAAO,UAAU,gBAAkB+G,EAAmB,SAA0B/B,EAAQ,CACtFA,EAASA,IAAW,EACpBgC,GAAehC,EAAQ,QAAQ,EAC/B,IAAMiC,EAAQ,KAAKjC,CAAM,EACnBkC,EAAO,KAAKlC,EAAS,CAAC,GACxBiC,IAAU,QAAaC,IAAS,SAClCC,GAAYnC,EAAQ,KAAK,OAAS,CAAC,EAGrC,IAAMoC,EAAKH,EACT,KAAK,EAAEjC,CAAM,EAAI,GAAK,EACtB,KAAK,EAAEA,CAAM,EAAI,GAAK,GACtB,KAAK,EAAEA,CAAM,EAAI,GAAK,GAElBqC,EAAK,KAAK,EAAErC,CAAM,EACtB,KAAK,EAAEA,CAAM,EAAI,GAAK,EACtB,KAAK,EAAEA,CAAM,EAAI,GAAK,GACtBkC,EAAO,GAAK,GAEd,OAAO,OAAOE,CAAE,GAAK,OAAOC,CAAE,GAAK,OAAO,EAAE,EAC9C,CAAC,EAEDrH,EAAO,UAAU,gBAAkB+G,EAAmB,SAA0B/B,EAAQ,CACtFA,EAASA,IAAW,EACpBgC,GAAehC,EAAQ,QAAQ,EAC/B,IAAMiC,EAAQ,KAAKjC,CAAM,EACnBkC,EAAO,KAAKlC,EAAS,CAAC,GACxBiC,IAAU,QAAaC,IAAS,SAClCC,GAAYnC,EAAQ,KAAK,OAAS,CAAC,EAGrC,IAAMqC,EAAKJ,EAAQ,GAAK,GACtB,KAAK,EAAEjC,CAAM,EAAI,GAAK,GACtB,KAAK,EAAEA,CAAM,EAAI,GAAK,EACtB,KAAK,EAAEA,CAAM,EAEToC,EAAK,KAAK,EAAEpC,CAAM,EAAI,GAAK,GAC/B,KAAK,EAAEA,CAAM,EAAI,GAAK,GACtB,KAAK,EAAEA,CAAM,EAAI,GAAK,EACtBkC,EAEF,OAAQ,OAAOG,CAAE,GAAK,OAAO,EAAE,GAAK,OAAOD,CAAE,CAC/C,CAAC,EAEDpH,EAAO,UAAU,UAAY,SAAoBgF,EAAQpD,EAAYiF,EAAU,CAC7E7B,EAASA,IAAW,EACpBpD,EAAaA,IAAe,EACvBiF,GAAUF,EAAY3B,EAAQpD,EAAY,KAAK,MAAM,EAE1D,IAAIyC,EAAM,KAAKW,CAAM,EACjB8B,EAAM,EACN9E,EAAI,EACR,KAAO,EAAEA,EAAIJ,IAAekF,GAAO,MACjCzC,GAAO,KAAKW,EAAShD,CAAC,EAAI8E,EAE5B,OAAAA,GAAO,IAEHzC,GAAOyC,IAAKzC,GAAO,KAAK,IAAI,EAAG,EAAIzC,CAAU,GAE1CyC,CACT,EAEArE,EAAO,UAAU,UAAY,SAAoBgF,EAAQpD,EAAYiF,EAAU,CAC7E7B,EAASA,IAAW,EACpBpD,EAAaA,IAAe,EACvBiF,GAAUF,EAAY3B,EAAQpD,EAAY,KAAK,MAAM,EAE1D,IAAII,EAAIJ,EACJkF,EAAM,EACNzC,EAAM,KAAKW,EAAS,EAAEhD,CAAC,EAC3B,KAAOA,EAAI,IAAM8E,GAAO,MACtBzC,GAAO,KAAKW,EAAS,EAAEhD,CAAC,EAAI8E,EAE9B,OAAAA,GAAO,IAEHzC,GAAOyC,IAAKzC,GAAO,KAAK,IAAI,EAAG,EAAIzC,CAAU,GAE1CyC,CACT,EAEArE,EAAO,UAAU,SAAW,SAAmBgF,EAAQ6B,EAAU,CAG/D,OAFA7B,EAASA,IAAW,EACf6B,GAAUF,EAAY3B,EAAQ,EAAG,KAAK,MAAM,EAC3C,KAAKA,CAAM,EAAI,KACZ,IAAO,KAAKA,CAAM,EAAI,GAAK,GADA,KAAKA,CAAM,CAEjD,EAEAhF,EAAO,UAAU,YAAc,SAAsBgF,EAAQ6B,EAAU,CACrE7B,EAASA,IAAW,EACf6B,GAAUF,EAAY3B,EAAQ,EAAG,KAAK,MAAM,EACjD,IAAMX,EAAM,KAAKW,CAAM,EAAK,KAAKA,EAAS,CAAC,GAAK,EAChD,OAAQX,EAAM,MAAUA,EAAM,WAAaA,CAC7C,EAEArE,EAAO,UAAU,YAAc,SAAsBgF,EAAQ6B,EAAU,CACrE7B,EAASA,IAAW,EACf6B,GAAUF,EAAY3B,EAAQ,EAAG,KAAK,MAAM,EACjD,IAAMX,EAAM,KAAKW,EAAS,CAAC,EAAK,KAAKA,CAAM,GAAK,EAChD,OAAQX,EAAM,MAAUA,EAAM,WAAaA,CAC7C,EAEArE,EAAO,UAAU,YAAc,SAAsBgF,EAAQ6B,EAAU,CACrE,OAAA7B,EAASA,IAAW,EACf6B,GAAUF,EAAY3B,EAAQ,EAAG,KAAK,MAAM,EAEzC,KAAKA,CAAM,EAChB,KAAKA,EAAS,CAAC,GAAK,EACpB,KAAKA,EAAS,CAAC,GAAK,GACpB,KAAKA,EAAS,CAAC,GAAK,EACzB,EAEAhF,EAAO,UAAU,YAAc,SAAsBgF,EAAQ6B,EAAU,CACrE,OAAA7B,EAASA,IAAW,EACf6B,GAAUF,EAAY3B,EAAQ,EAAG,KAAK,MAAM,EAEzC,KAAKA,CAAM,GAAK,GACrB,KAAKA,EAAS,CAAC,GAAK,GACpB,KAAKA,EAAS,CAAC,GAAK,EACpB,KAAKA,EAAS,CAAC,CACpB,EAEAhF,EAAO,UAAU,eAAiB+G,EAAmB,SAAyB/B,EAAQ,CACpFA,EAASA,IAAW,EACpBgC,GAAehC,EAAQ,QAAQ,EAC/B,IAAMiC,EAAQ,KAAKjC,CAAM,EACnBkC,EAAO,KAAKlC,EAAS,CAAC,GACxBiC,IAAU,QAAaC,IAAS,SAClCC,GAAYnC,EAAQ,KAAK,OAAS,CAAC,EAGrC,IAAMX,EAAM,KAAKW,EAAS,CAAC,EACzB,KAAKA,EAAS,CAAC,EAAI,GAAK,EACxB,KAAKA,EAAS,CAAC,EAAI,GAAK,IACvBkC,GAAQ,IAEX,OAAQ,OAAO7C,CAAG,GAAK,OAAO,EAAE,GAC9B,OAAO4C,EACP,KAAK,EAAEjC,CAAM,EAAI,GAAK,EACtB,KAAK,EAAEA,CAAM,EAAI,GAAK,GACtB,KAAK,EAAEA,CAAM,EAAI,GAAK,EAAE,CAC5B,CAAC,EAEDhF,EAAO,UAAU,eAAiB+G,EAAmB,SAAyB/B,EAAQ,CACpFA,EAASA,IAAW,EACpBgC,GAAehC,EAAQ,QAAQ,EAC/B,IAAMiC,EAAQ,KAAKjC,CAAM,EACnBkC,EAAO,KAAKlC,EAAS,CAAC,GACxBiC,IAAU,QAAaC,IAAS,SAClCC,GAAYnC,EAAQ,KAAK,OAAS,CAAC,EAGrC,IAAMX,GAAO4C,GAAS,IACpB,KAAK,EAAEjC,CAAM,EAAI,GAAK,GACtB,KAAK,EAAEA,CAAM,EAAI,GAAK,EACtB,KAAK,EAAEA,CAAM,EAEf,OAAQ,OAAOX,CAAG,GAAK,OAAO,EAAE,GAC9B,OAAO,KAAK,EAAEW,CAAM,EAAI,GAAK,GAC7B,KAAK,EAAEA,CAAM,EAAI,GAAK,GACtB,KAAK,EAAEA,CAAM,EAAI,GAAK,EACtBkC,CAAI,CACR,CAAC,EAEDlH,EAAO,UAAU,YAAc,SAAsBgF,EAAQ6B,EAAU,CACrE,OAAA7B,EAASA,IAAW,EACf6B,GAAUF,EAAY3B,EAAQ,EAAG,KAAK,MAAM,EAC1ClF,GAAQ,KAAK,KAAMkF,EAAQ,GAAM,GAAI,CAAC,CAC/C,EAEAhF,EAAO,UAAU,YAAc,SAAsBgF,EAAQ6B,EAAU,CACrE,OAAA7B,EAASA,IAAW,EACf6B,GAAUF,EAAY3B,EAAQ,EAAG,KAAK,MAAM,EAC1ClF,GAAQ,KAAK,KAAMkF,EAAQ,GAAO,GAAI,CAAC,CAChD,EAEAhF,EAAO,UAAU,aAAe,SAAuBgF,EAAQ6B,EAAU,CACvE,OAAA7B,EAASA,IAAW,EACf6B,GAAUF,EAAY3B,EAAQ,EAAG,KAAK,MAAM,EAC1ClF,GAAQ,KAAK,KAAMkF,EAAQ,GAAM,GAAI,CAAC,CAC/C,EAEAhF,EAAO,UAAU,aAAe,SAAuBgF,EAAQ6B,EAAU,CACvE,OAAA7B,EAASA,IAAW,EACf6B,GAAUF,EAAY3B,EAAQ,EAAG,KAAK,MAAM,EAC1ClF,GAAQ,KAAK,KAAMkF,EAAQ,GAAO,GAAI,CAAC,CAChD,EAEA,SAASsC,EAAU9G,EAAKK,EAAOmE,EAAQ4B,EAAK9C,EAAKyD,EAAK,CACpD,GAAI,CAACvH,EAAO,SAASQ,CAAG,EAAG,MAAM,IAAI,UAAU,6CAA6C,EAC5F,GAAIK,EAAQiD,GAAOjD,EAAQ0G,EAAK,MAAM,IAAI,WAAW,mCAAmC,EACxF,GAAIvC,EAAS4B,EAAMpG,EAAI,OAAQ,MAAM,IAAI,WAAW,oBAAoB,CAC1E,CAEAR,EAAO,UAAU,YACjBA,EAAO,UAAU,YAAc,SAAsBa,EAAOmE,EAAQpD,EAAYiF,EAAU,CAIxF,GAHAhG,EAAQ,CAACA,EACTmE,EAASA,IAAW,EACpBpD,EAAaA,IAAe,EACxB,CAACiF,EAAU,CACb,IAAMW,EAAW,KAAK,IAAI,EAAG,EAAI5F,CAAU,EAAI,EAC/C0F,EAAS,KAAMzG,EAAOmE,EAAQpD,EAAY4F,EAAU,CAAC,CACvD,CAEA,IAAIV,EAAM,EACN9E,EAAI,EAER,IADA,KAAKgD,CAAM,EAAInE,EAAQ,IAChB,EAAEmB,EAAIJ,IAAekF,GAAO,MACjC,KAAK9B,EAAShD,CAAC,EAAKnB,EAAQiG,EAAO,IAGrC,OAAO9B,EAASpD,CAClB,EAEA5B,EAAO,UAAU,YACjBA,EAAO,UAAU,YAAc,SAAsBa,EAAOmE,EAAQpD,EAAYiF,EAAU,CAIxF,GAHAhG,EAAQ,CAACA,EACTmE,EAASA,IAAW,EACpBpD,EAAaA,IAAe,EACxB,CAACiF,EAAU,CACb,IAAMW,EAAW,KAAK,IAAI,EAAG,EAAI5F,CAAU,EAAI,EAC/C0F,EAAS,KAAMzG,EAAOmE,EAAQpD,EAAY4F,EAAU,CAAC,CACvD,CAEA,IAAIxF,EAAIJ,EAAa,EACjBkF,EAAM,EAEV,IADA,KAAK9B,EAAShD,CAAC,EAAInB,EAAQ,IACpB,EAAEmB,GAAK,IAAM8E,GAAO,MACzB,KAAK9B,EAAShD,CAAC,EAAKnB,EAAQiG,EAAO,IAGrC,OAAO9B,EAASpD,CAClB,EAEA5B,EAAO,UAAU,WACjBA,EAAO,UAAU,WAAa,SAAqBa,EAAOmE,EAAQ6B,EAAU,CAC1E,OAAAhG,EAAQ,CAACA,EACTmE,EAASA,IAAW,EACf6B,GAAUS,EAAS,KAAMzG,EAAOmE,EAAQ,EAAG,IAAM,CAAC,EACvD,KAAKA,CAAM,EAAKnE,EAAQ,IACjBmE,EAAS,CAClB,EAEAhF,EAAO,UAAU,cACjBA,EAAO,UAAU,cAAgB,SAAwBa,EAAOmE,EAAQ6B,EAAU,CAChF,OAAAhG,EAAQ,CAACA,EACTmE,EAASA,IAAW,EACf6B,GAAUS,EAAS,KAAMzG,EAAOmE,EAAQ,EAAG,MAAQ,CAAC,EACzD,KAAKA,CAAM,EAAKnE,EAAQ,IACxB,KAAKmE,EAAS,CAAC,EAAKnE,IAAU,EACvBmE,EAAS,CAClB,EAEAhF,EAAO,UAAU,cACjBA,EAAO,UAAU,cAAgB,SAAwBa,EAAOmE,EAAQ6B,EAAU,CAChF,OAAAhG,EAAQ,CAACA,EACTmE,EAASA,IAAW,EACf6B,GAAUS,EAAS,KAAMzG,EAAOmE,EAAQ,EAAG,MAAQ,CAAC,EACzD,KAAKA,CAAM,EAAKnE,IAAU,EAC1B,KAAKmE,EAAS,CAAC,EAAKnE,EAAQ,IACrBmE,EAAS,CAClB,EAEAhF,EAAO,UAAU,cACjBA,EAAO,UAAU,cAAgB,SAAwBa,EAAOmE,EAAQ6B,EAAU,CAChF,OAAAhG,EAAQ,CAACA,EACTmE,EAASA,IAAW,EACf6B,GAAUS,EAAS,KAAMzG,EAAOmE,EAAQ,EAAG,WAAY,CAAC,EAC7D,KAAKA,EAAS,CAAC,EAAKnE,IAAU,GAC9B,KAAKmE,EAAS,CAAC,EAAKnE,IAAU,GAC9B,KAAKmE,EAAS,CAAC,EAAKnE,IAAU,EAC9B,KAAKmE,CAAM,EAAKnE,EAAQ,IACjBmE,EAAS,CAClB,EAEAhF,EAAO,UAAU,cACjBA,EAAO,UAAU,cAAgB,SAAwBa,EAAOmE,EAAQ6B,EAAU,CAChF,OAAAhG,EAAQ,CAACA,EACTmE,EAASA,IAAW,EACf6B,GAAUS,EAAS,KAAMzG,EAAOmE,EAAQ,EAAG,WAAY,CAAC,EAC7D,KAAKA,CAAM,EAAKnE,IAAU,GAC1B,KAAKmE,EAAS,CAAC,EAAKnE,IAAU,GAC9B,KAAKmE,EAAS,CAAC,EAAKnE,IAAU,EAC9B,KAAKmE,EAAS,CAAC,EAAKnE,EAAQ,IACrBmE,EAAS,CAClB,EAEA,SAASyC,GAAgBjH,EAAKK,EAAOmE,EAAQuC,EAAKzD,EAAK,CACrD4D,GAAW7G,EAAO0G,EAAKzD,EAAKtD,EAAKwE,EAAQ,CAAC,EAE1C,IAAIoC,EAAK,OAAOvG,EAAQ,OAAO,UAAU,CAAC,EAC1CL,EAAIwE,GAAQ,EAAIoC,EAChBA,EAAKA,GAAM,EACX5G,EAAIwE,GAAQ,EAAIoC,EAChBA,EAAKA,GAAM,EACX5G,EAAIwE,GAAQ,EAAIoC,EAChBA,EAAKA,GAAM,EACX5G,EAAIwE,GAAQ,EAAIoC,EAChB,IAAIC,EAAK,OAAOxG,GAAS,OAAO,EAAE,EAAI,OAAO,UAAU,CAAC,EACxD,OAAAL,EAAIwE,GAAQ,EAAIqC,EAChBA,EAAKA,GAAM,EACX7G,EAAIwE,GAAQ,EAAIqC,EAChBA,EAAKA,GAAM,EACX7G,EAAIwE,GAAQ,EAAIqC,EAChBA,EAAKA,GAAM,EACX7G,EAAIwE,GAAQ,EAAIqC,EACTrC,CACT,CAEA,SAAS2C,GAAgBnH,EAAKK,EAAOmE,EAAQuC,EAAKzD,EAAK,CACrD4D,GAAW7G,EAAO0G,EAAKzD,EAAKtD,EAAKwE,EAAQ,CAAC,EAE1C,IAAIoC,EAAK,OAAOvG,EAAQ,OAAO,UAAU,CAAC,EAC1CL,EAAIwE,EAAS,CAAC,EAAIoC,EAClBA,EAAKA,GAAM,EACX5G,EAAIwE,EAAS,CAAC,EAAIoC,EAClBA,EAAKA,GAAM,EACX5G,EAAIwE,EAAS,CAAC,EAAIoC,EAClBA,EAAKA,GAAM,EACX5G,EAAIwE,EAAS,CAAC,EAAIoC,EAClB,IAAIC,EAAK,OAAOxG,GAAS,OAAO,EAAE,EAAI,OAAO,UAAU,CAAC,EACxD,OAAAL,EAAIwE,EAAS,CAAC,EAAIqC,EAClBA,EAAKA,GAAM,EACX7G,EAAIwE,EAAS,CAAC,EAAIqC,EAClBA,EAAKA,GAAM,EACX7G,EAAIwE,EAAS,CAAC,EAAIqC,EAClBA,EAAKA,GAAM,EACX7G,EAAIwE,CAAM,EAAIqC,EACPrC,EAAS,CAClB,CAEAhF,EAAO,UAAU,iBAAmB+G,EAAmB,SAA2BlG,EAAOmE,EAAS,EAAG,CACnG,OAAOyC,GAAe,KAAM5G,EAAOmE,EAAQ,OAAO,CAAC,EAAG,OAAO,oBAAoB,CAAC,CACpF,CAAC,EAEDhF,EAAO,UAAU,iBAAmB+G,EAAmB,SAA2BlG,EAAOmE,EAAS,EAAG,CACnG,OAAO2C,GAAe,KAAM9G,EAAOmE,EAAQ,OAAO,CAAC,EAAG,OAAO,oBAAoB,CAAC,CACpF,CAAC,EAEDhF,EAAO,UAAU,WAAa,SAAqBa,EAAOmE,EAAQpD,EAAYiF,EAAU,CAGtF,GAFAhG,EAAQ,CAACA,EACTmE,EAASA,IAAW,EAChB,CAAC6B,EAAU,CACb,IAAMe,EAAQ,KAAK,IAAI,EAAI,EAAIhG,EAAc,CAAC,EAE9C0F,EAAS,KAAMzG,EAAOmE,EAAQpD,EAAYgG,EAAQ,EAAG,CAACA,CAAK,CAC7D,CAEA,IAAI5F,EAAI,EACJ8E,EAAM,EACNe,EAAM,EAEV,IADA,KAAK7C,CAAM,EAAInE,EAAQ,IAChB,EAAEmB,EAAIJ,IAAekF,GAAO,MAC7BjG,EAAQ,GAAKgH,IAAQ,GAAK,KAAK7C,EAAShD,EAAI,CAAC,IAAM,IACrD6F,EAAM,GAER,KAAK7C,EAAShD,CAAC,GAAMnB,EAAQiG,GAAQ,GAAKe,EAAM,IAGlD,OAAO7C,EAASpD,CAClB,EAEA5B,EAAO,UAAU,WAAa,SAAqBa,EAAOmE,EAAQpD,EAAYiF,EAAU,CAGtF,GAFAhG,EAAQ,CAACA,EACTmE,EAASA,IAAW,EAChB,CAAC6B,EAAU,CACb,IAAMe,EAAQ,KAAK,IAAI,EAAI,EAAIhG,EAAc,CAAC,EAE9C0F,EAAS,KAAMzG,EAAOmE,EAAQpD,EAAYgG,EAAQ,EAAG,CAACA,CAAK,CAC7D,CAEA,IAAI5F,EAAIJ,EAAa,EACjBkF,EAAM,EACNe,EAAM,EAEV,IADA,KAAK7C,EAAShD,CAAC,EAAInB,EAAQ,IACpB,EAAEmB,GAAK,IAAM8E,GAAO,MACrBjG,EAAQ,GAAKgH,IAAQ,GAAK,KAAK7C,EAAShD,EAAI,CAAC,IAAM,IACrD6F,EAAM,GAER,KAAK7C,EAAShD,CAAC,GAAMnB,EAAQiG,GAAQ,GAAKe,EAAM,IAGlD,OAAO7C,EAASpD,CAClB,EAEA5B,EAAO,UAAU,UAAY,SAAoBa,EAAOmE,EAAQ6B,EAAU,CACxE,OAAAhG,EAAQ,CAACA,EACTmE,EAASA,IAAW,EACf6B,GAAUS,EAAS,KAAMzG,EAAOmE,EAAQ,EAAG,IAAM,IAAK,EACvDnE,EAAQ,IAAGA,EAAQ,IAAOA,EAAQ,GACtC,KAAKmE,CAAM,EAAKnE,EAAQ,IACjBmE,EAAS,CAClB,EAEAhF,EAAO,UAAU,aAAe,SAAuBa,EAAOmE,EAAQ6B,EAAU,CAC9E,OAAAhG,EAAQ,CAACA,EACTmE,EAASA,IAAW,EACf6B,GAAUS,EAAS,KAAMzG,EAAOmE,EAAQ,EAAG,MAAQ,MAAO,EAC/D,KAAKA,CAAM,EAAKnE,EAAQ,IACxB,KAAKmE,EAAS,CAAC,EAAKnE,IAAU,EACvBmE,EAAS,CAClB,EAEAhF,EAAO,UAAU,aAAe,SAAuBa,EAAOmE,EAAQ6B,EAAU,CAC9E,OAAAhG,EAAQ,CAACA,EACTmE,EAASA,IAAW,EACf6B,GAAUS,EAAS,KAAMzG,EAAOmE,EAAQ,EAAG,MAAQ,MAAO,EAC/D,KAAKA,CAAM,EAAKnE,IAAU,EAC1B,KAAKmE,EAAS,CAAC,EAAKnE,EAAQ,IACrBmE,EAAS,CAClB,EAEAhF,EAAO,UAAU,aAAe,SAAuBa,EAAOmE,EAAQ6B,EAAU,CAC9E,OAAAhG,EAAQ,CAACA,EACTmE,EAASA,IAAW,EACf6B,GAAUS,EAAS,KAAMzG,EAAOmE,EAAQ,EAAG,WAAY,WAAW,EACvE,KAAKA,CAAM,EAAKnE,EAAQ,IACxB,KAAKmE,EAAS,CAAC,EAAKnE,IAAU,EAC9B,KAAKmE,EAAS,CAAC,EAAKnE,IAAU,GAC9B,KAAKmE,EAAS,CAAC,EAAKnE,IAAU,GACvBmE,EAAS,CAClB,EAEAhF,EAAO,UAAU,aAAe,SAAuBa,EAAOmE,EAAQ6B,EAAU,CAC9E,OAAAhG,EAAQ,CAACA,EACTmE,EAASA,IAAW,EACf6B,GAAUS,EAAS,KAAMzG,EAAOmE,EAAQ,EAAG,WAAY,WAAW,EACnEnE,EAAQ,IAAGA,EAAQ,WAAaA,EAAQ,GAC5C,KAAKmE,CAAM,EAAKnE,IAAU,GAC1B,KAAKmE,EAAS,CAAC,EAAKnE,IAAU,GAC9B,KAAKmE,EAAS,CAAC,EAAKnE,IAAU,EAC9B,KAAKmE,EAAS,CAAC,EAAKnE,EAAQ,IACrBmE,EAAS,CAClB,EAEAhF,EAAO,UAAU,gBAAkB+G,EAAmB,SAA0BlG,EAAOmE,EAAS,EAAG,CACjG,OAAOyC,GAAe,KAAM5G,EAAOmE,EAAQ,CAAC,OAAO,oBAAoB,EAAG,OAAO,oBAAoB,CAAC,CACxG,CAAC,EAEDhF,EAAO,UAAU,gBAAkB+G,EAAmB,SAA0BlG,EAAOmE,EAAS,EAAG,CACjG,OAAO2C,GAAe,KAAM9G,EAAOmE,EAAQ,CAAC,OAAO,oBAAoB,EAAG,OAAO,oBAAoB,CAAC,CACxG,CAAC,EAED,SAAS8C,GAActH,EAAKK,EAAOmE,EAAQ4B,EAAK9C,EAAKyD,EAAK,CACxD,GAAIvC,EAAS4B,EAAMpG,EAAI,OAAQ,MAAM,IAAI,WAAW,oBAAoB,EACxE,GAAIwE,EAAS,EAAG,MAAM,IAAI,WAAW,oBAAoB,CAC3D,CAEA,SAAS+C,GAAYvH,EAAKK,EAAOmE,EAAQgD,EAAcnB,EAAU,CAC/D,OAAAhG,EAAQ,CAACA,EACTmE,EAASA,IAAW,EACf6B,GACHiB,GAAatH,EAAKK,EAAOmE,EAAQ,EAAG,qBAAwB,qBAAuB,EAErFlF,GAAQ,MAAMU,EAAKK,EAAOmE,EAAQgD,EAAc,GAAI,CAAC,EAC9ChD,EAAS,CAClB,CAEAhF,EAAO,UAAU,aAAe,SAAuBa,EAAOmE,EAAQ6B,EAAU,CAC9E,OAAOkB,GAAW,KAAMlH,EAAOmE,EAAQ,GAAM6B,CAAQ,CACvD,EAEA7G,EAAO,UAAU,aAAe,SAAuBa,EAAOmE,EAAQ6B,EAAU,CAC9E,OAAOkB,GAAW,KAAMlH,EAAOmE,EAAQ,GAAO6B,CAAQ,CACxD,EAEA,SAASoB,GAAazH,EAAKK,EAAOmE,EAAQgD,EAAcnB,EAAU,CAChE,OAAAhG,EAAQ,CAACA,EACTmE,EAASA,IAAW,EACf6B,GACHiB,GAAatH,EAAKK,EAAOmE,EAAQ,EAAG,sBAAyB,sBAAwB,EAEvFlF,GAAQ,MAAMU,EAAKK,EAAOmE,EAAQgD,EAAc,GAAI,CAAC,EAC9ChD,EAAS,CAClB,CAEAhF,EAAO,UAAU,cAAgB,SAAwBa,EAAOmE,EAAQ6B,EAAU,CAChF,OAAOoB,GAAY,KAAMpH,EAAOmE,EAAQ,GAAM6B,CAAQ,CACxD,EAEA7G,EAAO,UAAU,cAAgB,SAAwBa,EAAOmE,EAAQ6B,EAAU,CAChF,OAAOoB,GAAY,KAAMpH,EAAOmE,EAAQ,GAAO6B,CAAQ,CACzD,EAGA7G,EAAO,UAAU,KAAO,SAAe+D,EAAQmE,EAAahF,EAAOC,EAAK,CACtE,GAAI,CAACnD,EAAO,SAAS+D,CAAM,EAAG,MAAM,IAAI,UAAU,6BAA6B,EAS/E,GARKb,IAAOA,EAAQ,GAChB,CAACC,GAAOA,IAAQ,IAAGA,EAAM,KAAK,QAC9B+E,GAAenE,EAAO,SAAQmE,EAAcnE,EAAO,QAClDmE,IAAaA,EAAc,GAC5B/E,EAAM,GAAKA,EAAMD,IAAOC,EAAMD,GAG9BC,IAAQD,GACRa,EAAO,SAAW,GAAK,KAAK,SAAW,EAAG,MAAO,GAGrD,GAAImE,EAAc,EAChB,MAAM,IAAI,WAAW,2BAA2B,EAElD,GAAIhF,EAAQ,GAAKA,GAAS,KAAK,OAAQ,MAAM,IAAI,WAAW,oBAAoB,EAChF,GAAIC,EAAM,EAAG,MAAM,IAAI,WAAW,yBAAyB,EAGvDA,EAAM,KAAK,SAAQA,EAAM,KAAK,QAC9BY,EAAO,OAASmE,EAAc/E,EAAMD,IACtCC,EAAMY,EAAO,OAASmE,EAAchF,GAGtC,IAAMb,EAAMc,EAAMD,EAElB,OAAI,OAASa,GAAU,OAAO,WAAW,UAAU,YAAe,WAEhE,KAAK,WAAWmE,EAAahF,EAAOC,CAAG,EAEvC,WAAW,UAAU,IAAI,KACvBY,EACA,KAAK,SAASb,EAAOC,CAAG,EACxB+E,CACF,EAGK7F,CACT,EAMArC,EAAO,UAAU,KAAO,SAAeqE,EAAKnB,EAAOC,EAAK1B,EAAU,CAEhE,GAAI,OAAO4C,GAAQ,SAAU,CAS3B,GARI,OAAOnB,GAAU,UACnBzB,EAAWyB,EACXA,EAAQ,EACRC,EAAM,KAAK,QACF,OAAOA,GAAQ,WACxB1B,EAAW0B,EACXA,EAAM,KAAK,QAET1B,IAAa,QAAa,OAAOA,GAAa,SAChD,MAAM,IAAI,UAAU,2BAA2B,EAEjD,GAAI,OAAOA,GAAa,UAAY,CAACzB,EAAO,WAAWyB,CAAQ,EAC7D,MAAM,IAAI,UAAU,qBAAuBA,CAAQ,EAErD,GAAI4C,EAAI,SAAW,EAAG,CACpB,IAAM8D,EAAO9D,EAAI,WAAW,CAAC,GACxB5C,IAAa,QAAU0G,EAAO,KAC/B1G,IAAa,YAEf4C,EAAM8D,EAEV,CACF,MAAW,OAAO9D,GAAQ,SACxBA,EAAMA,EAAM,IACH,OAAOA,GAAQ,YACxBA,EAAM,OAAOA,CAAG,GAIlB,GAAInB,EAAQ,GAAK,KAAK,OAASA,GAAS,KAAK,OAASC,EACpD,MAAM,IAAI,WAAW,oBAAoB,EAG3C,GAAIA,GAAOD,EACT,OAAO,KAGTA,EAAQA,IAAU,EAClBC,EAAMA,IAAQ,OAAY,KAAK,OAASA,IAAQ,EAE3CkB,IAAKA,EAAM,GAEhB,IAAIrC,EACJ,GAAI,OAAOqC,GAAQ,SACjB,IAAKrC,EAAIkB,EAAOlB,EAAImB,EAAK,EAAEnB,EACzB,KAAKA,CAAC,EAAIqC,MAEP,CACL,IAAMoC,EAAQzG,EAAO,SAASqE,CAAG,EAC7BA,EACArE,EAAO,KAAKqE,EAAK5C,CAAQ,EACvBY,EAAMoE,EAAM,OAClB,GAAIpE,IAAQ,EACV,MAAM,IAAI,UAAU,cAAgBgC,EAClC,mCAAmC,EAEvC,IAAKrC,EAAI,EAAGA,EAAImB,EAAMD,EAAO,EAAElB,EAC7B,KAAKA,EAAIkB,CAAK,EAAIuD,EAAMzE,EAAIK,CAAG,CAEnC,CAEA,OAAO,IACT,EAMA,IAAM+F,GAAS,CAAC,EAChB,SAASC,GAAGC,EAAKC,EAAYC,EAAM,CACjCJ,GAAOE,CAAG,EAAI,cAAwBE,CAAK,CACzC,aAAe,CACb,MAAM,EAEN,OAAO,eAAe,KAAM,UAAW,CACrC,MAAOD,EAAW,MAAM,KAAM,SAAS,EACvC,SAAU,GACV,aAAc,EAChB,CAAC,EAGD,KAAK,KAAO,GAAG,KAAK,IAAI,KAAKD,CAAG,IAGhC,KAAK,MAEL,OAAO,KAAK,IACd,CAEA,IAAI,MAAQ,CACV,OAAOA,CACT,CAEA,IAAI,KAAMzH,EAAO,CACf,OAAO,eAAe,KAAM,OAAQ,CAClC,aAAc,GACd,WAAY,GACZ,MAAAA,EACA,SAAU,EACZ,CAAC,CACH,CAEA,UAAY,CACV,MAAO,GAAG,KAAK,IAAI,KAAKyH,CAAG,MAAM,KAAK,OAAO,EAC/C,CACF,CACF,CAEAD,GAAE,2BACA,SAAUI,EAAM,CACd,OAAIA,EACK,GAAGA,CAAI,+BAGT,gDACT,EAAG,UAAU,EACfJ,GAAE,uBACA,SAAUI,EAAM5G,EAAQ,CACtB,MAAO,QAAQ4G,CAAI,oDAAoD,OAAO5G,CAAM,EACtF,EAAG,SAAS,EACdwG,GAAE,mBACA,SAAUxE,EAAK6E,EAAOC,EAAO,CAC3B,IAAIC,EAAM,iBAAiB/E,CAAG,qBAC1BgF,EAAWF,EACf,OAAI,OAAO,UAAUA,CAAK,GAAK,KAAK,IAAIA,CAAK,EAAI,GAAK,GACpDE,EAAWC,GAAsB,OAAOH,CAAK,CAAC,EACrC,OAAOA,GAAU,WAC1BE,EAAW,OAAOF,CAAK,GACnBA,EAAQ,OAAO,CAAC,GAAK,OAAO,EAAE,GAAKA,EAAQ,EAAE,OAAO,CAAC,GAAK,OAAO,EAAE,MACrEE,EAAWC,GAAsBD,CAAQ,GAE3CA,GAAY,KAEdD,GAAO,eAAeF,CAAK,cAAcG,CAAQ,GAC1CD,CACT,EAAG,UAAU,EAEf,SAASE,GAAuBzE,EAAK,CACnC,IAAIsB,EAAM,GACN3D,EAAIqC,EAAI,OACNnB,EAAQmB,EAAI,CAAC,IAAM,IAAM,EAAI,EACnC,KAAOrC,GAAKkB,EAAQ,EAAGlB,GAAK,EAC1B2D,EAAM,IAAItB,EAAI,MAAMrC,EAAI,EAAGA,CAAC,CAAC,GAAG2D,CAAG,GAErC,MAAO,GAAGtB,EAAI,MAAM,EAAGrC,CAAC,CAAC,GAAG2D,CAAG,EACjC,CAKA,SAASoD,GAAavI,EAAKwE,EAAQpD,EAAY,CAC7CoF,GAAehC,EAAQ,QAAQ,GAC3BxE,EAAIwE,CAAM,IAAM,QAAaxE,EAAIwE,EAASpD,CAAU,IAAM,SAC5DuF,GAAYnC,EAAQxE,EAAI,QAAUoB,EAAa,EAAE,CAErD,CAEA,SAAS8F,GAAY7G,EAAO0G,EAAKzD,EAAKtD,EAAKwE,EAAQpD,EAAY,CAC7D,GAAIf,EAAQiD,GAAOjD,EAAQ0G,EAAK,CAC9B,IAAM5D,EAAI,OAAO4D,GAAQ,SAAW,IAAM,GACtCmB,EACJ,MAAI9G,EAAa,EACX2F,IAAQ,GAAKA,IAAQ,OAAO,CAAC,EAC/BmB,EAAQ,OAAO/E,CAAC,WAAWA,CAAC,QAAQ/B,EAAa,GAAK,CAAC,GAAG+B,CAAC,GAE3D+E,EAAQ,SAAS/E,CAAC,QAAQ/B,EAAa,GAAK,EAAI,CAAC,GAAG+B,CAAC,iBACzC/B,EAAa,GAAK,EAAI,CAAC,GAAG+B,CAAC,GAGzC+E,EAAQ,MAAMnB,CAAG,GAAG5D,CAAC,WAAWG,CAAG,GAAGH,CAAC,GAEnC,IAAIyE,GAAO,iBAAiB,QAASM,EAAO7H,CAAK,CACzD,CACAkI,GAAYvI,EAAKwE,EAAQpD,CAAU,CACrC,CAEA,SAASoF,GAAgBnG,EAAO4H,EAAM,CACpC,GAAI,OAAO5H,GAAU,SACnB,MAAM,IAAIuH,GAAO,qBAAqBK,EAAM,SAAU5H,CAAK,CAE/D,CAEA,SAASsG,GAAatG,EAAON,EAAQyI,EAAM,CACzC,MAAI,KAAK,MAAMnI,CAAK,IAAMA,GACxBmG,GAAenG,EAAOmI,CAAI,EACpB,IAAIZ,GAAO,iBAAiBY,GAAQ,SAAU,aAAcnI,CAAK,GAGrEN,EAAS,EACL,IAAI6H,GAAO,yBAGb,IAAIA,GAAO,iBAAiBY,GAAQ,SACR,MAAMA,EAAO,EAAI,CAAC,WAAWzI,CAAM,GACnCM,CAAK,CACzC,CAKA,IAAMoI,GAAoB,oBAE1B,SAASC,GAAarF,EAAK,CAMzB,GAJAA,EAAMA,EAAI,MAAM,GAAG,EAAE,CAAC,EAEtBA,EAAMA,EAAI,KAAK,EAAE,QAAQoF,GAAmB,EAAE,EAE1CpF,EAAI,OAAS,EAAG,MAAO,GAE3B,KAAOA,EAAI,OAAS,IAAM,GACxBA,EAAMA,EAAM,IAEd,OAAOA,CACT,CAEA,SAASd,GAAapB,EAAQwH,EAAO,CACnCA,EAAQA,GAAS,IACjB,IAAItD,EACEtF,EAASoB,EAAO,OAClByH,EAAgB,KACd3C,EAAQ,CAAC,EAEf,QAASzE,EAAI,EAAGA,EAAIzB,EAAQ,EAAEyB,EAAG,CAI/B,GAHA6D,EAAYlE,EAAO,WAAWK,CAAC,EAG3B6D,EAAY,OAAUA,EAAY,MAAQ,CAE5C,GAAI,CAACuD,EAAe,CAElB,GAAIvD,EAAY,MAAQ,EAEjBsD,GAAS,GAAK,IAAI1C,EAAM,KAAK,IAAM,IAAM,GAAI,EAClD,QACF,SAAWzE,EAAI,IAAMzB,EAAQ,EAEtB4I,GAAS,GAAK,IAAI1C,EAAM,KAAK,IAAM,IAAM,GAAI,EAClD,QACF,CAGA2C,EAAgBvD,EAEhB,QACF,CAGA,GAAIA,EAAY,MAAQ,EACjBsD,GAAS,GAAK,IAAI1C,EAAM,KAAK,IAAM,IAAM,GAAI,EAClD2C,EAAgBvD,EAChB,QACF,CAGAA,GAAauD,EAAgB,OAAU,GAAKvD,EAAY,OAAU,KACpE,MAAWuD,IAEJD,GAAS,GAAK,IAAI1C,EAAM,KAAK,IAAM,IAAM,GAAI,EAMpD,GAHA2C,EAAgB,KAGZvD,EAAY,IAAM,CACpB,IAAKsD,GAAS,GAAK,EAAG,MACtB1C,EAAM,KAAKZ,CAAS,CACtB,SAAWA,EAAY,KAAO,CAC5B,IAAKsD,GAAS,GAAK,EAAG,MACtB1C,EAAM,KACJZ,GAAa,EAAM,IACnBA,EAAY,GAAO,GACrB,CACF,SAAWA,EAAY,MAAS,CAC9B,IAAKsD,GAAS,GAAK,EAAG,MACtB1C,EAAM,KACJZ,GAAa,GAAM,IACnBA,GAAa,EAAM,GAAO,IAC1BA,EAAY,GAAO,GACrB,CACF,SAAWA,EAAY,QAAU,CAC/B,IAAKsD,GAAS,GAAK,EAAG,MACtB1C,EAAM,KACJZ,GAAa,GAAO,IACpBA,GAAa,GAAM,GAAO,IAC1BA,GAAa,EAAM,GAAO,IAC1BA,EAAY,GAAO,GACrB,CACF,KACE,OAAM,IAAI,MAAM,oBAAoB,CAExC,CAEA,OAAOY,CACT,CAEA,SAASlB,GAAc1B,EAAK,CAC1B,IAAMwF,EAAY,CAAC,EACnB,QAASrH,EAAI,EAAGA,EAAI6B,EAAI,OAAQ,EAAE7B,EAEhCqH,EAAU,KAAKxF,EAAI,WAAW7B,CAAC,EAAI,GAAI,EAEzC,OAAOqH,CACT,CAEA,SAAS3D,GAAgB7B,EAAKsF,EAAO,CACnC,IAAIG,EAAGjC,EAAID,EACLiC,EAAY,CAAC,EACnB,QAASrH,EAAI,EAAGA,EAAI6B,EAAI,QACjB,GAAAsF,GAAS,GAAK,GADW,EAAEnH,EAGhCsH,EAAIzF,EAAI,WAAW7B,CAAC,EACpBqF,EAAKiC,GAAK,EACVlC,EAAKkC,EAAI,IACTD,EAAU,KAAKjC,CAAE,EACjBiC,EAAU,KAAKhC,CAAE,EAGnB,OAAOgC,CACT,CAEA,SAASrG,GAAea,EAAK,CAC3B,OAAOhE,GAAO,YAAYqJ,GAAYrF,CAAG,CAAC,CAC5C,CAEA,SAASwB,GAAYkE,EAAKC,EAAKxE,EAAQzE,EAAQ,CAC7C,IAAIyB,EACJ,IAAKA,EAAI,EAAGA,EAAIzB,GACT,EAAAyB,EAAIgD,GAAUwE,EAAI,QAAYxH,GAAKuH,EAAI,QADtB,EAAEvH,EAExBwH,EAAIxH,EAAIgD,CAAM,EAAIuE,EAAIvH,CAAC,EAEzB,OAAOA,CACT,CAKA,SAAShB,EAAYoB,EAAK4G,EAAM,CAC9B,OAAO5G,aAAe4G,GACnB5G,GAAO,MAAQA,EAAI,aAAe,MAAQA,EAAI,YAAY,MAAQ,MACjEA,EAAI,YAAY,OAAS4G,EAAK,IACpC,CACA,SAAS1G,GAAaF,EAAK,CAEzB,OAAOA,IAAQA,CACjB,CAIA,IAAMoE,IAAuB,UAAY,CACvC,IAAMiD,EAAW,mBACXC,EAAQ,IAAI,MAAM,GAAG,EAC3B,QAAS1H,EAAI,EAAGA,EAAI,GAAI,EAAEA,EAAG,CAC3B,IAAM2H,EAAM3H,EAAI,GAChB,QAAS8C,EAAI,EAAGA,EAAI,GAAI,EAAEA,EACxB4E,EAAMC,EAAM7E,CAAC,EAAI2E,EAASzH,CAAC,EAAIyH,EAAS3E,CAAC,CAE7C,CACA,OAAO4E,CACT,GAAG,EAGH,SAAS3C,EAAoB6C,EAAI,CAC/B,OAAO,OAAO,OAAW,IAAcC,GAAyBD,CAClE,CAEA,SAASC,IAA0B,CACjC,MAAM,IAAI,MAAM,sBAAsB,CACxC,ICzjEA,IAAAC,GAAAC,EAAA,CAAAC,GAAAC,KAAA,CAEA,IAAIC,GAAS,KACTC,EAASD,GAAO,OAGpB,SAASE,GAAWC,EAAKC,EAAK,CAC5B,QAASC,KAAOF,EACdC,EAAIC,CAAG,EAAIF,EAAIE,CAAG,CAEtB,CACIJ,EAAO,MAAQA,EAAO,OAASA,EAAO,aAAeA,EAAO,gBAC9DF,GAAO,QAAUC,IAGjBE,GAAUF,GAAQF,EAAO,EACzBA,GAAQ,OAASQ,GAGnB,SAASA,EAAYC,EAAKC,EAAkBC,EAAQ,CAClD,OAAOR,EAAOM,EAAKC,EAAkBC,CAAM,CAC7C,CAEAH,EAAW,UAAY,OAAO,OAAOL,EAAO,SAAS,EAGrDC,GAAUD,EAAQK,CAAU,EAE5BA,EAAW,KAAO,SAAUC,EAAKC,EAAkBC,EAAQ,CACzD,GAAI,OAAOF,GAAQ,SACjB,MAAM,IAAI,UAAU,+BAA+B,EAErD,OAAON,EAAOM,EAAKC,EAAkBC,CAAM,CAC7C,EAEAH,EAAW,MAAQ,SAAUI,EAAMC,EAAMC,EAAU,CACjD,GAAI,OAAOF,GAAS,SAClB,MAAM,IAAI,UAAU,2BAA2B,EAEjD,IAAIG,EAAMZ,EAAOS,CAAI,EACrB,OAAIC,IAAS,OACP,OAAOC,GAAa,SACtBC,EAAI,KAAKF,EAAMC,CAAQ,EAEvBC,EAAI,KAAKF,CAAI,EAGfE,EAAI,KAAK,CAAC,EAELA,CACT,EAEAP,EAAW,YAAc,SAAUI,EAAM,CACvC,GAAI,OAAOA,GAAS,SAClB,MAAM,IAAI,UAAU,2BAA2B,EAEjD,OAAOT,EAAOS,CAAI,CACpB,EAEAJ,EAAW,gBAAkB,SAAUI,EAAM,CAC3C,GAAI,OAAOA,GAAS,SAClB,MAAM,IAAI,UAAU,2BAA2B,EAEjD,OAAOV,GAAO,WAAWU,CAAI,CAC/B,IChEA,IAAAI,GAAAC,EAAAC,IAAA,cAyBA,IAAIC,GAAS,KAAuB,OAGhCC,GAAaD,GAAO,YAAc,SAAUE,EAAU,CAExD,OADAA,EAAW,GAAKA,EACRA,GAAYA,EAAS,YAAY,EAAG,CAC1C,IAAK,MAAM,IAAK,OAAO,IAAK,QAAQ,IAAK,QAAQ,IAAK,SAAS,IAAK,SAAS,IAAK,OAAO,IAAK,QAAQ,IAAK,UAAU,IAAK,WAAW,IAAK,MACxI,MAAO,GACT,QACE,MAAO,EACX,CACF,EAEA,SAASC,GAAmBC,EAAK,CAC/B,GAAI,CAACA,EAAK,MAAO,OAEjB,QADIC,IAEF,OAAQD,EAAK,CACX,IAAK,OACL,IAAK,QACH,MAAO,OACT,IAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,WACH,MAAO,UACT,IAAK,SACL,IAAK,SACH,MAAO,SACT,IAAK,SACL,IAAK,QACL,IAAK,MACH,OAAOA,EACT,QACE,GAAIC,EAAS,OACbD,GAAO,GAAKA,GAAK,YAAY,EAC7BC,EAAU,EACd,CAEJ,CAIA,SAASC,GAAkBF,EAAK,CAC9B,IAAIG,EAAOJ,GAAmBC,CAAG,EACjC,GAAI,OAAOG,GAAS,WAAaP,GAAO,aAAeC,IAAc,CAACA,GAAWG,CAAG,GAAI,MAAM,IAAI,MAAM,qBAAuBA,CAAG,EAClI,OAAOG,GAAQH,CACjB,CAKAL,GAAQ,cAAgBS,GACxB,SAASA,GAAcN,EAAU,CAC/B,KAAK,SAAWI,GAAkBJ,CAAQ,EAC1C,IAAIO,EACJ,OAAQ,KAAK,SAAU,CACrB,IAAK,UACH,KAAK,KAAOC,GACZ,KAAK,IAAMC,GACXF,EAAK,EACL,MACF,IAAK,OACH,KAAK,SAAWG,GAChBH,EAAK,EACL,MACF,IAAK,SACH,KAAK,KAAOI,GACZ,KAAK,IAAMC,GACXL,EAAK,EACL,MACF,QACE,KAAK,MAAQM,GACb,KAAK,IAAMC,GACX,MACJ,CACA,KAAK,SAAW,EAChB,KAAK,UAAY,EACjB,KAAK,SAAWhB,GAAO,YAAYS,CAAE,CACvC,CAEAD,GAAc,UAAU,MAAQ,SAAUS,EAAK,CAC7C,GAAIA,EAAI,SAAW,EAAG,MAAO,GAC7B,IAAIC,EACAC,EACJ,GAAI,KAAK,SAAU,CAEjB,GADAD,EAAI,KAAK,SAASD,CAAG,EACjBC,IAAM,OAAW,MAAO,GAC5BC,EAAI,KAAK,SACT,KAAK,SAAW,CAClB,MACEA,EAAI,EAEN,OAAIA,EAAIF,EAAI,OAAeC,EAAIA,EAAI,KAAK,KAAKD,EAAKE,CAAC,EAAI,KAAK,KAAKF,EAAKE,CAAC,EAChED,GAAK,EACd,EAEAV,GAAc,UAAU,IAAMY,GAG9BZ,GAAc,UAAU,KAAOa,GAG/Bb,GAAc,UAAU,SAAW,SAAUS,EAAK,CAChD,GAAI,KAAK,UAAYA,EAAI,OACvB,OAAAA,EAAI,KAAK,KAAK,SAAU,KAAK,UAAY,KAAK,SAAU,EAAG,KAAK,QAAQ,EACjE,KAAK,SAAS,SAAS,KAAK,SAAU,EAAG,KAAK,SAAS,EAEhEA,EAAI,KAAK,KAAK,SAAU,KAAK,UAAY,KAAK,SAAU,EAAGA,EAAI,MAAM,EACrE,KAAK,UAAYA,EAAI,MACvB,EAIA,SAASK,GAAcC,EAAM,CAC3B,OAAIA,GAAQ,IAAa,EAAWA,GAAQ,IAAM,EAAa,EAAWA,GAAQ,IAAM,GAAa,EAAWA,GAAQ,IAAM,GAAa,EACpIA,GAAQ,IAAM,EAAO,GAAK,EACnC,CAKA,SAASC,GAAoBC,EAAMR,EAAKE,EAAG,CACzC,IAAIO,EAAIT,EAAI,OAAS,EACrB,GAAIS,EAAIP,EAAG,MAAO,GAClB,IAAIV,EAAKa,GAAcL,EAAIS,CAAC,CAAC,EAC7B,OAAIjB,GAAM,GACJA,EAAK,IAAGgB,EAAK,SAAWhB,EAAK,GAC1BA,GAEL,EAAEiB,EAAIP,GAAKV,IAAO,GAAW,GACjCA,EAAKa,GAAcL,EAAIS,CAAC,CAAC,EACrBjB,GAAM,GACJA,EAAK,IAAGgB,EAAK,SAAWhB,EAAK,GAC1BA,GAEL,EAAEiB,EAAIP,GAAKV,IAAO,GAAW,GACjCA,EAAKa,GAAcL,EAAIS,CAAC,CAAC,EACrBjB,GAAM,GACJA,EAAK,IACHA,IAAO,EAAGA,EAAK,EAAOgB,EAAK,SAAWhB,EAAK,GAE1CA,GAEF,GACT,CAUA,SAASkB,GAAoBF,EAAMR,EAAKW,EAAG,CACzC,IAAKX,EAAI,CAAC,EAAI,OAAU,IACtB,OAAAQ,EAAK,SAAW,EACT,SAET,GAAIA,EAAK,SAAW,GAAKR,EAAI,OAAS,EAAG,CACvC,IAAKA,EAAI,CAAC,EAAI,OAAU,IACtB,OAAAQ,EAAK,SAAW,EACT,SAET,GAAIA,EAAK,SAAW,GAAKR,EAAI,OAAS,IAC/BA,EAAI,CAAC,EAAI,OAAU,IACtB,OAAAQ,EAAK,SAAW,EACT,QAGb,CACF,CAGA,SAASb,GAAaK,EAAK,CACzB,IAAIW,EAAI,KAAK,UAAY,KAAK,SAC1BV,EAAIS,GAAoB,KAAMV,EAAKW,CAAC,EACxC,GAAIV,IAAM,OAAW,OAAOA,EAC5B,GAAI,KAAK,UAAYD,EAAI,OACvB,OAAAA,EAAI,KAAK,KAAK,SAAUW,EAAG,EAAG,KAAK,QAAQ,EACpC,KAAK,SAAS,SAAS,KAAK,SAAU,EAAG,KAAK,SAAS,EAEhEX,EAAI,KAAK,KAAK,SAAUW,EAAG,EAAGX,EAAI,MAAM,EACxC,KAAK,UAAYA,EAAI,MACvB,CAKA,SAASI,GAASJ,EAAKE,EAAG,CACxB,IAAIU,EAAQL,GAAoB,KAAMP,EAAKE,CAAC,EAC5C,GAAI,CAAC,KAAK,SAAU,OAAOF,EAAI,SAAS,OAAQE,CAAC,EACjD,KAAK,UAAYU,EACjB,IAAIC,EAAMb,EAAI,QAAUY,EAAQ,KAAK,UACrC,OAAAZ,EAAI,KAAK,KAAK,SAAU,EAAGa,CAAG,EACvBb,EAAI,SAAS,OAAQE,EAAGW,CAAG,CACpC,CAIA,SAASV,GAAQH,EAAK,CACpB,IAAIC,EAAID,GAAOA,EAAI,OAAS,KAAK,MAAMA,CAAG,EAAI,GAC9C,OAAI,KAAK,SAAiBC,EAAI,SACvBA,CACT,CAMA,SAASR,GAAUO,EAAKE,EAAG,CACzB,IAAKF,EAAI,OAASE,GAAK,IAAM,EAAG,CAC9B,IAAID,EAAID,EAAI,SAAS,UAAWE,CAAC,EACjC,GAAID,EAAG,CACL,IAAIa,EAAIb,EAAE,WAAWA,EAAE,OAAS,CAAC,EACjC,GAAIa,GAAK,OAAUA,GAAK,MACtB,YAAK,SAAW,EAChB,KAAK,UAAY,EACjB,KAAK,SAAS,CAAC,EAAId,EAAIA,EAAI,OAAS,CAAC,EACrC,KAAK,SAAS,CAAC,EAAIA,EAAIA,EAAI,OAAS,CAAC,EAC9BC,EAAE,MAAM,EAAG,EAAE,CAExB,CACA,OAAOA,CACT,CACA,YAAK,SAAW,EAChB,KAAK,UAAY,EACjB,KAAK,SAAS,CAAC,EAAID,EAAIA,EAAI,OAAS,CAAC,EAC9BA,EAAI,SAAS,UAAWE,EAAGF,EAAI,OAAS,CAAC,CAClD,CAIA,SAASN,GAASM,EAAK,CACrB,IAAIC,EAAID,GAAOA,EAAI,OAAS,KAAK,MAAMA,CAAG,EAAI,GAC9C,GAAI,KAAK,SAAU,CACjB,IAAIa,EAAM,KAAK,UAAY,KAAK,SAChC,OAAOZ,EAAI,KAAK,SAAS,SAAS,UAAW,EAAGY,CAAG,CACrD,CACA,OAAOZ,CACT,CAEA,SAASL,GAAWI,EAAKE,EAAG,CAC1B,IAAIa,GAAKf,EAAI,OAASE,GAAK,EAC3B,OAAIa,IAAM,EAAUf,EAAI,SAAS,SAAUE,CAAC,GAC5C,KAAK,SAAW,EAAIa,EACpB,KAAK,UAAY,EACbA,IAAM,EACR,KAAK,SAAS,CAAC,EAAIf,EAAIA,EAAI,OAAS,CAAC,GAErC,KAAK,SAAS,CAAC,EAAIA,EAAIA,EAAI,OAAS,CAAC,EACrC,KAAK,SAAS,CAAC,EAAIA,EAAIA,EAAI,OAAS,CAAC,GAEhCA,EAAI,SAAS,SAAUE,EAAGF,EAAI,OAASe,CAAC,EACjD,CAEA,SAASlB,GAAUG,EAAK,CACtB,IAAIC,EAAID,GAAOA,EAAI,OAAS,KAAK,MAAMA,CAAG,EAAI,GAC9C,OAAI,KAAK,SAAiBC,EAAI,KAAK,SAAS,SAAS,SAAU,EAAG,EAAI,KAAK,QAAQ,EAC5EA,CACT,CAGA,SAASH,GAAYE,EAAK,CACxB,OAAOA,EAAI,SAAS,KAAK,QAAQ,CACnC,CAEA,SAASD,GAAUC,EAAK,CACtB,OAAOA,GAAOA,EAAI,OAAS,KAAK,MAAMA,CAAG,EAAI,EAC/C,ICpSA,IAAAgB,GAA6B,WCH7B,IAAMC,EAAO,8CACTC,EAAO,oCACPC,GAAO,kCAEJC,EAAQ,CACb,IAAK,CACH,QAAS,GAAGF,CAAG,UACf,QAAS,GAAGA,CAAG,UACf,SAAU,GAAGA,CAAG,WAChB,OAAS,GAAGA,CAAG,SACf,QAAS,GAAGA,CAAG,UACf,OAAS,GAAGA,CAAG,QACjB,EACA,IAAK,CACH,KAAe,GAAGD,CAAG,OACrB,IAAe,GAAGA,CAAG,MACrB,MAAe,GAAGA,CAAG,QACrB,KAAe,GAAGA,CAAG,OACrB,WAAe,GAAGA,CAAG,aACrB,cAAe,GAAGA,CAAG,gBACrB,QAAe,GAAGA,CAAG,SACvB,EACA,IAAK,CACH,OAAQ,sCACV,EACA,EAAG,CACD,QAAS,GAAGE,EAAI,gBAChB,OAAS,GAAGA,EAAI,cAClB,EACA,IAAK,CACH,QAAS,GAAGA,EAAI,cAChB,YAAa,GAAGA,EAAI,iBACtB,CACF,EC9BA,GAAM,CAAE,IAAAE,EAAI,EAAIC,EACVC,EAAQ,GAAMC,EAAM,EAAMC,GAAK,GAAMC,EAAK,GAAMC,GAAO,GACzDC,GAAM,GAAMC,GAAQ,GAAMC,GAAO,GAAMC,GAAO,GAC9CC,GAAU,GAAMC,GAAY,GAGhC,SAASC,GAAaC,EAAU,CAC9B,OAAOA,IAAaZ,GAASY,GAAYX,GAAOW,GAAYT,GAC1DS,GAAY,MAASA,IAAa,KAAQA,IAAa,MACrDA,GAAY,MAAUA,GAAY,MAAUA,IAAa,MAAUA,IAAa,MAChFA,IAAa,MAAUA,IAAa,MAAUA,IAAa,OAAUA,IAAa,MACxF,CAGA,IAAMC,GAAkB,IAAI,WAAW,GAAI,EAC3C,QAAWC,IAAQ;AAAA,QACjBD,GAAgBC,EAAK,WAAW,CAAC,CAAC,EAAI,EACxC,SAASC,GAAYH,EAAU,CAC7B,OAAOA,EAAW,IAAOC,GAAgBD,CAAQ,IAAM,EAAID,GAAaC,CAAQ,CAClF,CAGA,SAASI,GAAWC,EAAOC,EAAKC,EAAe,CAC7C,IAAIP,EAAWK,EAAM,WAAWC,CAAG,EAGnC,OAFIN,IAAaP,KACfO,EAAWK,EAAM,WAAW,EAAEC,CAAG,GAC/BA,GAAOD,EAAM,OACRE,EACFJ,GAAYH,CAAQ,CAC7B,CAGA,IAAMQ,GAA2B,CAC/B,KAAM,KAAM,IAAK,IAAK,IAAK,IAC3B,EAAK;AAAA,EAAM,EAAK,KAAM,EAAK,IAAM,EAAK,KAAM,EAAK,IACnD,EAEMC,GAA8B,CAClC,EAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GACzD,EACMC,GAAkB,6BAGlBC,GAAe,EACjBC,GAAc,EACdC,GAAY,EACZC,GAAa,EACbC,GAAe,GACbC,GAAmB,IAAI,WAAW,GAAI,EAC5C,QAAShB,EAAW,EAAGA,EAAW,IAAMA,IAAY,CAClD,IAAME,EAAO,OAAO,aAAaF,CAAQ,EACnCiB,EAASf,GAAQ,KAAOA,GAAQ,KAAOA,GAAQ,KAAOA,GAAQ,IAC9DgB,EAAWD,GAAUf,IAAS,KAAOA,IAAS,KAAOA,GAAQ,KAAOA,GAAQ,IAClFc,GAAiBhB,CAAQ,GACtBiB,EAASN,GAAe,IACxBO,GAAYhB,IAAS,KAAOA,IAAS,IAAMU,GAAc,IACzDM,EAAWL,GAAY,IACvBK,GAAYhB,IAAS,IAAMY,GAAa,IACxCZ,KAAQO,GAA8BM,GAAe,EAC1D,CAGA,SAASI,GAAed,EAAOC,EAAKc,EAAW,CAC7C,IAAMpB,EAAWK,EAAM,WAAWC,CAAG,EACrC,GAAIN,EAAW,IACb,OAAQgB,GAAiBhB,CAAQ,EAAIoB,KAAe,EAAI,EAAI,EAE9D,GAAIpB,GAAY,OAAUA,GAAY,MAAQ,CAC5C,IAAMqB,EAAMhB,EAAM,WAAWC,EAAM,CAAC,EACpC,OAAOe,GAAO,OAAUA,GAAO,MAAS,EAAI,CAC9C,CAEA,OAAID,GAAaP,KAAcb,IAAa,KAAQA,GAAY,KAASA,GAAY,KACtDA,IAAa,MAAUA,IAAa,OAG5DA,GAAY,KAAQA,GAAY,MAAUA,IAAa,KAAQA,IAAa,MACzEA,EAAW,KAASA,GAAY,KAASA,IAAa,MACzDA,GAAY,MAAUA,GAAY,MAAUA,GAAY,MAAUA,GAAY,MAC9EA,GAAY,OAAUA,GAAY,OAAUA,GAAY,OAAUA,GAAY,OAC9EA,GAAY,OAAUA,GAAY,OAAUA,GAAY,OAAUA,GAAY,MAN5E,EAMyF,CACpG,CACA,SAASsB,GAActB,EAAU,CAC/B,OAAOA,EAAW,MAASgB,GAAiBhB,CAAQ,EAAIe,MAAkB,CAC5E,CACA,SAASQ,GAAWvB,EAAU,CAC5B,OAAOA,GAAYL,IAAQK,GAAYJ,IACrCI,GAAY,IAAQA,GAAY,IAAQA,GAAY,IAAQA,GAAY,GAC5E,CAGA,SAASwB,GAAWnB,EAAOC,EAAK,CAC9B,IAAImB,EAASN,GAAed,EAAOC,EAAKK,EAAY,EACpD,KAAOc,IAAW,GAAG,CACnBnB,GAAOmB,EACP,IAAMC,EAAOrB,EAAM,WAAWC,CAAG,IAAMb,GAAMa,EAAM,EAAIA,EAEjDN,EAAWK,EAAM,WAAWqB,CAAI,EACtCD,EAASzB,EAAW,KAAQgB,GAAiBhB,CAAQ,EAAIa,MAAe,EAAI,EAAI,EAC9EM,GAAed,EAAOqB,EAAMb,EAAS,EACnCY,IAAW,IACbnB,EAAMoB,EACV,CACA,OAAOpB,CACT,CAGA,SAASqB,GAActB,EAAOC,EAAK,CACjC,IAAIsB,EAAMtB,EAAKc,EAAYR,GAC3B,OAAa,CAEX,IAAMZ,EAAWK,EAAM,WAAWC,CAAG,EACjCmB,EAASzB,EAAW,KAAQgB,GAAiBhB,CAAQ,EAAIoB,KAAe,EAAI,EAAI,EAClFD,GAAed,EAAOC,EAAKc,CAAS,EAQtC,GANIK,IAAW,GAAKzB,IAAaH,IAC7B0B,GAAWlB,EAAM,WAAWC,EAAM,CAAC,CAAC,GAAKiB,GAAWlB,EAAM,WAAWC,EAAM,CAAC,CAAC,EAC/EmB,EAAS,EAEFA,IAAW,GAAKzB,IAAaF,IAAawB,GAAcjB,EAAM,WAAWC,EAAM,CAAC,CAAC,IACxFmB,EAAS,GACPA,IAAW,EACbG,EAAMtB,GAAOmB,EACbL,EAAYN,WAGLd,IAAaP,IAAO2B,IAAcN,GACzCR,QAEA,QAAOsB,CACX,CACF,CAEA,SAASC,GAAiBxB,EAAOC,EAAKC,EAAe,CACnD,IAAMuB,EAAQN,GAAWnB,EAAOC,CAAG,EACnC,GAAID,EAAM,WAAWyB,CAAK,IAAMpC,GAC9B,MAAO,GACT,IAAMkC,EAAMD,GAActB,EAAOyB,EAAQ,CAAC,EAC1C,OAAO1B,GAAWC,EAAOuB,EAAKrB,CAAa,EAAIqB,EAAM,EACvD,CAGA,SAASG,GAAiB/B,EAAU,CAClC,OAAOA,GAAY,UAAaA,EAAW,OAAUA,EAAW,MAClE,CAEA,IAAMgC,GAAkB,CACtB,KAAM,GACN,cAAe,GACf,oBAAqB,GACrB,UAAW,GACX,OAAQ,GACR,aAAc,GACd,YAAa,EACf,EACMC,GAAgB,MAChBC,GAAgB,OAGtB,SAASC,EAAOC,EAAQ/B,EAAOC,EAAK,CAClC,OAAA8B,EAAO,UAAY9B,EACZ8B,EAAO,KAAK/B,CAAK,CAC1B,CACA,SAASgC,GAAOD,EAAQ/B,EAAOC,EAAK,CAClC,OAAA8B,EAAO,UAAY9B,EACZ8B,EAAO,KAAK/B,CAAK,CAC1B,CAGA,SAASiC,GAAUF,EAAQ/B,EAAOC,EAAK,CACrC,OAAA8B,EAAO,UAAY,EACZA,EAAO,KAAK,GAAG/B,EAAM,MAAMC,CAAG,CAAC,GAAG,CAC3C,CAGA,SAASiC,GAAgBC,EAAM,CAC7B,OAAOA,IAASpD,GAASoD,IAASnD,GAAOmD,IAASlD,IAAMkD,IAASjD,GAAMiD,IAAShD,EAClF,CAGA,IAAMiD,GAAgB,gFAGhBC,GAAoB,KAGLC,GAArB,KAA6B,CAC3B,YAAYC,EAAS,CA0BnB,GAtBA,KAAK,KAAO,oCACZ,KAAK,cAAgB,0CACrB,KAAK,oBAAsB,2BAC3B,KAAK,wBAA0B,2BAC/B,KAAK,UAAY,0CACjB,KAAK,UAAY,iZACjB,KAAK,OAAS,kaACd,KAAK,QAAU,qGACf,KAAK,SAAW,+CAChB,KAAK,WAAa,0BAClB,KAAK,SAAW,8CAChB,KAAK,QAAU,gDACf,KAAK,MAAQ,gBACb,KAAK,iBAAmB,4BACxB,KAAK,aAAe,2CACpB,KAAK,YAAc,UACnBA,EAAUA,GAAW,CAAC,EAGtB,KAAK,aAAeA,EAAQ,YAGxB,KAAK,UAAY,CAAC,CAACA,EAAQ,SAAU,CACvC,KAAK,QAAU,GAEf,QAAWC,KAAO,KACZ,EAAEA,KAAOb,KAAoB,KAAKa,CAAG,YAAa,SACpD,KAAKA,CAAG,EAAIZ,IAGhB,KAAK,SAAW,qBAClB,MAGE,KAAK,QAAUW,EAAQ,KAAO,GAKhC,GADA,KAAK,WAAa,KACdA,EAAQ,YAAcA,EAAQ,WAAW,SAAW,EAAG,CACzD,QAAWE,KAAQF,EAAQ,WACzB,GAAI,CAAC,YAAY,KAAKE,CAAI,GAAKL,GAAc,KAAKK,CAAI,EACpD,MAAM,IAAI,MAAM,4BAA4BA,CAAI,GAAG,EAEvD,KAAK,WAAa,IAAI,OAAO,MAAMF,EAAQ,WAAW,KAAK,GAAG,CAAC,eAAgB,IAAI,EACnF,KAAK,oBAAsB,KAAK,IAAI,GAAGA,EAAQ,WAAW,IAAIE,GAAQA,EAAK,MAAM,CAAC,EAElF,KAAK,iBAAmBF,EAAQ,WAAW,IAAIE,GAAQA,EAAK,CAAC,EAAE,YAAY,EAAIA,EAAK,CAAC,EAAE,YAAY,CAAC,EAAE,KAAK,EAAE,CAC/G,CAEA,KAAK,SAAW,CAAC,CAACF,EAAQ,SAE1B,KAAK,mBAAqB,CAC5B,CAKA,eAAeG,EAAUxC,EAAe,CAItC,IAAMF,EAAQ,KAAK,OACfC,EAAM,EACN0C,EAAoB,KAAK,cAAgB3C,EAAM,OACnD,OAAa,CAEX,OAAa,CACX,IAAIL,EAAWK,EAAM,WAAWC,CAAG,EAAG2C,EAAkB,EACxD,GAAIjD,IAAaZ,GAASY,IAAaX,EAAK,CAC1C,IAAMqC,EAAOrB,EAAM,WAAWC,EAAM,CAAC,EACrC2C,EAAkBvB,IAAStC,GAASsC,IAASrC,EAC3C8C,EAAO,KAAK,YAAa9B,EAAOC,CAAG,EAAE,CAAC,EAAE,OAAS,EACnDN,EAAWK,EAAM,WAAWC,EAAM2C,CAAe,CACnD,CACA,GAAIjD,IAAaR,GAAM,CACrB,IAAM0D,EAAUf,EAAO,KAAK,aAAc9B,EAAOC,CAAG,EACpD,GAAI4C,EAAS,CACX,IAAMC,GAAgBD,EAAQ,CAAC,EAAE,OAEjC,GAAI,CAAC3C,GAAiBD,EAAM6C,KAAkB9C,EAAM,QAChDA,EAAM,WAAWA,EAAM,OAAS,CAAC,IAAMd,EACzC,OAAO,KAAK,SAASc,EAAOC,EAAK0C,CAAiB,EAChD,KAAK,UACPI,EAAYF,EAAQ,CAAC,EAAG,KAAK,MAAOF,GAAqB3C,EAAM,OAASC,GAAO2C,CAAe,EAChG3C,GAAO6C,GACPH,EAAoB3C,EAAM,OAASC,EAAM4C,EAAQ,CAAC,EAAE,OACpD,KAAK,OACP,KACK,CAGH,GADA5C,GAAO2C,EACH,CAAC1C,EACH,OAAO,KAAK,SAASF,EAAOC,EAAK0C,CAAiB,EAChD,KAAK,UACPI,EAAY/C,EAAM,MAAMC,EAAM,CAAC,EAAG,KAAK,MAAO0C,GAAqB3C,EAAM,OAASC,EAAI,EACxFA,EAAMD,EAAM,OACZ,KACF,CACF,SACSL,IAAaV,IAAMU,IAAaT,EAAI,CAE3C,GAAI,CAACgB,GAAiBP,IAAaT,GAAMe,EAAM2C,EAAkB,IAAM5C,EAAM,OAC3E,OAAO,KAAK,SAASA,EAAOC,EAAK0C,CAAiB,EACpDC,GAAmBjD,IAAaT,GAAMc,EAAM,WAAWC,EAAM2C,EAAkB,CAAC,IAAM3D,GAAK,EAAI,EAE/F,IAAI+D,EAAoB,EAClB3B,GAAOrB,EAAM,WAAWC,EAAM2C,CAAe,EACnD,GAAIvB,KAAStC,GAASsC,KAASrC,EAAK,CAClC,IAAMiE,GAAYjD,EAAM,WAAWC,EAAM2C,EAAkB,CAAC,EAC5DI,EAAoBC,KAAclE,GAASkE,KAAcjE,EACvD8C,EAAO,KAAK,YAAa9B,EAAOC,EAAM2C,CAAe,EAAE,CAAC,EAAE,OAAS,CACvE,CACA3C,GAAO2C,EAAkBI,EACzBL,EAAoB3C,EAAM,OAASC,EAAM+C,EACzC,KAAK,OACP,KACK,CACH/C,GAAO2C,EACP,KACF,CACF,CACA,GAAI3C,GAAOD,EAAM,OAEf,OAAIE,GAAiB,KAAK,kBAAoB,KACrCgD,EAAkB,KAAMlD,EAAOC,CAAG,GAC3C,KAAK,cAAgB0C,EACjBzC,GACFiD,EAAU,MAAO,GAAI,GAAI,KAAK,MAAOR,EAAmB,CAAC,EAClD,KAAK,OAAS,MAEhB,KAAK,OAAS,IAIvB,IAAMS,EAAO,KAAK,MAAOC,EAAYrD,EAAMC,CAAG,EAC1CqD,EAAO,GAAIC,EAAQ,GAAIC,EAAS,GAChCC,EAAQ,KAAMC,EAAc,EAAGC,EAAgB,EAC/CC,EAAkB,EAAGC,EAAe,GAAOC,EAAe,GAC9D,OAAQT,EAAW,CACnB,IAAK,IAEH,GAAI,KAAK,kBAAoB,KAC3B,OAAOH,EAAkB,KAAMlD,EAAOC,CAAG,EAE3C,GAAID,EAAM,OAASC,EAAM,EACvB,MAEG,GAAID,EAAMC,EAAM,CAAC,IAAM,KAI1B,GAHA,KAAK,gBAAkB,KAEvBA,GAAO,EACHD,EAAMC,CAAG,IAAM,IAAK,CAEtB,GAAIiC,GAAgBlC,EAAM,WAAWC,CAAG,CAAC,EACvC,SACF4D,EAAe,GACf,KACF,MAGG,CACC,KAAK,UACPH,EAAc,EACdJ,EAAO,KAET,KACF,CAEF,IAAK,IAEH,GAAIG,EAAQ3B,EAAO,KAAK,cAAe9B,EAAOC,CAAG,EAC/CqD,EAAO,MAAOC,EAAQE,EAAM,CAAC,EAC7BE,EAAgBF,EAAM,CAAC,EAAE,OAAS,UAG3BA,EAAQ3B,EAAO,KAAK,KAAM9B,EAAOC,CAAG,EAAG,CAE9C,GADAsD,EAAQ,KAAK,UAAUE,EAAM,CAAC,EAAGtD,EAAwB,EACrDoD,IAAU,MAAQlD,GAAgB,KAAKkD,CAAK,EAC9C,OAAOL,EAAkB,KAAMlD,EAAOC,CAAG,EAC3CqD,EAAO,MACPK,EAAgBF,EAAM,CAAC,EAAE,OAAS,CACpC,MAESzD,EAAM,OAASC,EAAM,GAAKD,EAAMC,EAAM,CAAC,IAAM,KAAOD,EAAMC,EAAM,CAAC,IAAM,KAC9EqD,EAAO,MAAOI,EAAc,GAErB,CAAC,KAAK,WAAa1D,EAAM,OAASC,GAAOC,EAAgB,EAAI,IAAMF,EAAMC,EAAM,CAAC,IAAM,KAC7FqD,EAAO,KAAMI,EAAc,GAEpB,KAAK,SAAW1D,EAAM,OAASC,EAAM,GAAKD,EAAMC,EAAM,CAAC,IAAM,KACpEyD,EAAc,EACV,KAAK,cAAcJ,EAAO,eAAgBC,EAAQ,MACjDD,EAAO,UAAWC,EAAQ,MAGxB,KAAK,SAAWvD,EAAM,OAASC,EAAM,GAAKD,EAAMC,EAAM,CAAC,IAAM,MACpEqD,EAAO,mBAAoBI,EAAc,GAC3C,MAEF,IAAK,IAEC1D,EAAM,OAASC,EAAM,GAAKD,EAAMC,EAAM,CAAC,IAAM,MAC/CqD,EAAO,KAAMI,EAAc,GAC7B,MAEF,IAAK,MAIED,EAAQ3B,EAAO,KAAK,OAAQ9B,EAAOC,CAAG,IACvCC,IAAkBuD,EAAQxB,GAAU,KAAK,OAAQjC,EAAOC,CAAG,MAC7DqD,EAAO,QAASE,EAAS,IAAKD,EAAQE,EAAM,CAAC,EAC7CE,EAAgBF,EAAM,CAAC,EAAE,OAAS,GAEpC,MAEF,IAAK,IAEH,GAAIA,EAAQ3B,EAAO,KAAK,oBAAqB9B,EAAOC,CAAG,EACrDsD,EAAQE,EAAM,CAAC,UAGd,CAAE,MAAAF,EAAO,YAAAG,EAAa,gBAAAE,EAAiB,aAAAE,CAAa,EAAI,KAAK,cAAc9D,EAAOC,CAAG,EAClFsD,IAAU,KACZ,OAAOL,EAAkB,KAAMlD,EAAOC,CAAG,GAEzCwD,IAAU,MAAQC,IAAgB,KACpCJ,EAAO,UACP,KAAK,mBAAqB,GAE5B,MAEF,IAAK,IACH,GAAI,CAAC,KAAK,UAAW,CAEnB,GAAIG,EAAQ3B,EAAO,KAAK,wBAAyB9B,EAAOC,CAAG,EACzDsD,EAAQE,EAAM,CAAC,UAGd,CAAE,MAAAF,EAAO,YAAAG,EAAa,gBAAAE,EAAiB,aAAAE,CAAa,EAAI,KAAK,cAAc9D,EAAOC,CAAG,EAClFsD,IAAU,KACZ,OAAOL,EAAkB,KAAMlD,EAAOC,CAAG,GAEzCwD,IAAU,MAAQC,IAAgB,KACpCJ,EAAO,UACP,KAAK,mBAAqB,EAE9B,CACA,MAEF,IAAK,IAEC,KAAK,UAAYG,EAAQ3B,EAAO,KAAK,UAAW9B,EAAOC,CAAG,KAC5DqD,EAAO,MAAOC,EAAQE,EAAM,CAAC,GAC/B,MAEF,IAAK,IAMH,GAAI,KAAK,kBAAoB,YAAcA,EAAQ3B,EAAO,KAAK,UAAW9B,EAAOC,CAAG,IAAMwD,EAAM,CAAC,IAAM,UAAW,CAChH,IAAMlC,EAAMtB,EAAMwD,EAAM,CAAC,EAAE,OACvB,CAACvD,GAAiBF,EAAMuB,CAAG,IAAM,KAAOvB,EAAMuB,EAAM,CAAC,IAAM,IAC7DkC,EAAQ,MAERH,EAAO,WAAYC,EAAQE,EAAM,CAAC,EACtC,MAESA,EAAQ3B,EAAO,KAAK,WAAY9B,EAAOC,CAAG,KACjDqD,EAAOG,EAAM,CAAC,GAChB,MAEF,IAAK,IAEH,GAAIzD,EAAM,OAASC,IAAQ,EAAIC,EAAiBF,EAAMC,EAAM,CAAC,EAAI,KAAOD,EAAMC,EAAM,CAAC,EAAI,IAAM,CAC7FqD,EAAO,IACPI,EAAc,EACd,KACF,CAGF,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACH,GAAI1D,EAAMC,EAAM,CAAC,IAAM,IAAK,CAEtB,KAAK,kBAAoB,aACvBD,EAAM,WAAW,QAASC,CAAG,GAC/BqD,EAAO,UAAWC,EAAQ,MAAOG,EAAc,GACxC1D,EAAM,WAAW,QAASC,CAAG,IACpCqD,EAAO,UAAWC,EAAQ,MAAOG,EAAc,IAEnD,KACF,EAKID,EAAQ3B,EAAO,KAAK,QAAS9B,EAAOC,CAAG,GACvCC,IAAkBuD,EAAQxB,GAAU,KAAK,QAASjC,EAAOC,CAAG,MAC9DqD,EAAO,UAAWC,EAAQE,EAAM,CAAC,EACjCD,EAAU,OAAOC,EAAM,CAAC,GAAM,SAAW5E,GAAI,OAClC,OAAO4E,EAAM,CAAC,GAAM,SAAW5E,GAAI,QAAUA,GAAI,SAE9D,MAEF,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,KAEC4E,EAAQ3B,EAAO,KAAK,SAAU9B,EAAOC,CAAG,GAC1CqD,EAAOG,EAAM,CAAC,EAAE,YAAY,EAE5BI,EAAe,GACjB,MAEF,IAAK,IACL,IAAK,IAEC7B,GAAO,KAAK,SAAUhC,EAAOC,CAAG,GAClCqD,EAAO,UAAWC,EAAQF,IAAc,IAAM,OAAS,QAASG,EAAS3E,GAAI,QAAS6E,EAAcH,EAAM,QAE1GM,EAAe,GACjB,MAEF,IAAK,IAEC7B,GAAO,KAAK,iBAAkBhC,EAAOC,CAAG,GAC1CqD,EAAO,eAAgBC,EAAQ,IAAKG,EAAc,GAElDG,EAAe,GACjB,MAEF,IAAK,IACL,IAAK,IAEC,KAAK,UAAYJ,EAAQ,KAAK,aAAazD,EAAOC,EAAKC,CAAa,GACtEoD,EAAOG,EAAM,CAAC,EAEdI,EAAe,GACjB,MAEF,IAAK,IAEC,KAAK,SAAW7B,GAAO,KAAK,MAAOhC,EAAOC,CAAG,GAC/CqD,EAAO,KAAMI,EAAc,GACpB,KAAK,UAAYD,EAAQ,KAAK,aAAazD,EAAOC,EAAKC,CAAa,GAC3EoD,EAAOG,EAAM,CAAC,EAEdI,EAAe,GACjB,MAEF,IAAK,IAEC,KAAK,SAAW7D,EAAM,OAASC,EAAM,IACvCqD,EAAO,eACHtD,EAAMC,EAAM,CAAC,IAAM,KACrByD,EAAc,EAAGH,EAAQ,MAEzBG,EAAc,EAAGH,EAAQ,MAE7B,MAEF,IAAK,IACH,GAAI,CAAC,KAAK,QACR,MACJ,IAAK,IACH,GAAI,CAACrD,IAAkBF,EAAM,OAASC,IAAQ,GAAMD,EAAM,OAASC,IAAQ,GAAKD,EAAMC,EAAM,CAAC,IAAM,KAEjG,MAGF,GAAID,EAAM,OAASC,EAAM,GAAKD,EAAMC,EAAM,CAAC,IAAM,KAAOD,EAAMC,EAAM,CAAC,IAAM,IAAK,CAC9EqD,EAAO,MAAOI,EAAc,EAC5B,KACF,CACF,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACE,KAAK,YACRA,EAAc,EACdJ,EAAOD,GAET,MACF,IAAK,IAEC,CAAC,KAAK,WAAarD,EAAM,OAASC,GAAO,IAEvCD,EAAMC,EAAM,CAAC,IAAM,KACrBqD,EAAO,KAAMI,EAAc,IAE3BJ,EAAOD,EAAWK,EAAc,IAEpC,MACF,IAAK,IAGC1D,EAAM,OAASC,GAAO,GAAKD,EAAMC,EAAM,CAAC,IAAM,MAChDqD,EAAO,KAAMI,EAAc,GAC7B,MAEF,QACEG,EAAe,EACjB,CAGA,GAAIA,EAAc,CAEhB,IAAItC,EACJ,IAAK,KAAK,kBAAoB,WAAa,KAAK,kBAAoB,WAChEvB,EAAM,WAAWuB,EAAMJ,GAAWnB,EAAOC,CAAG,CAAC,IAAMZ,IACnDkC,EAAM,EAAIvB,EAAM,SAAWA,EAAMuB,EAAM,CAAC,IAAM,KAAOvB,EAAMuB,EAAM,CAAC,IAAM,KAC7C7B,GAAaM,EAAM,WAAWuB,EAAM,CAAC,CAAC,GACnE+B,EAAO,SAAUC,EAAQvD,EAAM,MAAMC,EAAKsB,CAAG,EAC7CmC,EAAcnC,EAAM,EAAItB,UAIjB,KAAK,aAAe,MAAQ,KAAK,iBAAiB,SAASoD,CAAS,KAClEI,EAAQ3B,EAAO,KAAK,WAAY9B,EAAOC,CAAG,IAC5CC,GAAiBF,EAAM,OAASC,GAAO,KAAK,sBAC3CwD,EAAQxB,GAAU,KAAK,WAAYjC,EAAOC,CAAG,IACrDqD,EAAOG,EAAM,CAAC,EAAE,YAAY,UAIrB,CAAC,KAAK,YAAclC,EAAMC,GAAiBxB,EAAOC,EAAKC,CAAa,IAAM,EAAG,CACpF,IAAMuB,EAAQzB,EAAM,QAAQ,IAAKC,CAAG,EACpCqD,EAAO,WAAYE,EAASxD,EAAM,MAAMC,EAAKwB,CAAK,EAClD8B,EAAQ,KAAK,UAAUvD,EAAM,MAAMyB,EAAQ,EAAGF,CAAG,EAAGnB,EAA2B,EAC/EsD,EAAcnC,EAAMtB,CACtB,CACF,CAGA,GAAI,KAAK,kBAAoB,KAC3B,OAAQqD,EAAM,CACd,IAAK,WAAYA,EAAO,OAAW,MACnC,IAAK,MAAYA,EAAO,UAAW,MACnC,QAAiBA,EAAO,EACxB,CAIF,GAAI,CAACA,EAIH,OAAIpD,GAAkB,CAACF,EAAM,WAAW,MAAOC,CAAG,GAAK,CAACD,EAAM,WAAW,MAAOC,CAAG,GAC7D,QAAQ,KAAKD,EAAM,MAAMC,CAAG,CAAC,EAC1CiD,EAAkB,KAAMlD,EAAOC,CAAG,EAElC,KAAK,SAASD,EAAOC,EAAK0C,CAAiB,EAMtD,IAAMvB,GAASsC,GAAeD,EAAM,CAAC,EAAE,OACjCM,GAAQpB,GAAqB3C,EAAM,OAASC,GAC9C+D,EACAJ,GACFI,EAAQ,CACN,KAAAV,EAAM,MAAAC,EAAO,OAAAC,EAAQ,KAAAJ,EAAM,MAAAW,GAC3B,IAAKH,EAAiB,QAAS,KAAK,MAAO,aAAAE,CAC7C,EACApB,EAAS,KAAMsB,CAAK,GAGbF,GACPE,EAAQ,CAAE,KAAAV,EAAM,MAAAC,EAAO,OAAAC,EAAQ,KAAAJ,EAAM,MAAAW,GAAO,IAAKA,GAAQ3C,GAAQ,aAAA0C,CAAa,EAC9EpB,EAAS,KAAMsB,CAAK,GAGpBA,EAAQb,EAAUG,EAAMC,EAAOC,EAAQJ,EAAMW,GAAOJ,GAAiBvC,EAAM,EAC7E,KAAK,cAAgB4C,EAErB,KAAK,gBAAkBV,IAAS,YAAc,KAAK,kBAAoB,WAAa,KAAK,kBAAoB,YAAc,UAAYA,EAGvIrD,EAAM,KAAK,IAAIA,EAAMmB,GAAQpB,EAAM,MAAM,EACrC4D,IACFjB,EAAoB3C,EAAM,OAASC,EAAM2D,EAC7C,CAGA,SAASb,EAAYQ,EAAOH,EAAMW,EAAO,CACvCrB,EAAS,KAAM,CACb,KAAM,UAAW,MAAAa,EAAO,OAAQ,GAAI,KAAAH,EACpC,MAAAW,EAAO,IAAKA,EAAQR,EAAM,OAAS,CACrC,CAAC,CACH,CAEA,SAASJ,EAAUG,EAAMC,EAAOC,EAAQJ,EAAMW,EAAO3C,EAAQ,CAC3D,IAAM4C,EAAQ,CAAE,KAAAV,EAAM,MAAAC,EAAO,OAAAC,EAAQ,KAAAJ,EAAM,MAAAW,EAAO,IAAKA,EAAQ3C,CAAO,EACtE,OAAAsB,EAAS,KAAMsB,CAAK,EACbA,CACT,CAEA,SAASd,EAAkBe,EAAMjE,EAAOC,EAAK,CAC3CyC,EAASuB,EAAK,aAAanC,EAAOD,GAAe7B,EAAOC,CAAG,EAAE,CAAC,CAAC,CAAC,CAClE,CACF,CAGA,SAASD,EAAOC,EAAK0C,EAAmB,CACtC,YAAK,cAAgBA,GAAqB3C,EAAM,OAASC,GAClD,KAAK,OAASD,EAAM,MAAMC,CAAG,CACtC,CAGA,aAAaD,EAAOC,EAAKC,EAAe,CACtC,IAAMgE,EAAOpC,EAAO,KAAK,QAAS9B,EAAOC,CAAG,EAC5C,GAAI,CAACiE,EACH,OAAO,KAIT,IAAM7C,EAAOrB,EAAMC,EAAMiE,EAAK,CAAC,EAAE,MAAM,EACvC,OAAI7C,IAAS,KAAOA,IAAS,MAAQA,EAAO,KAAOA,EAAO,MACtDA,IAAS,UAAYA,IAAS,SACzB6C,EAIL1C,GAAiBxB,EAAOC,EAAK,EAAI,GAAK,GAKtC,CAACC,GAAiBiB,GAAWnB,EAAOC,CAAG,IAAMD,EAAM,OAC9C,KACFkE,CACT,CAIA,UAAUC,EAAMC,EAAc,CAC5B,IAAIC,EAAYF,EAAK,QAAQ,IAAI,EACjC,GAAIE,EAAY,EACd,OAAOF,EAET,IAAIG,EAAS,GAAIP,EAAQ,EAEzB,KAAOM,GAAa,GAAKA,EAAY,EAAIF,EAAK,QAAQ,CACpD,IAAMI,EAAcJ,EAAKE,EAAY,CAAC,EAClC9C,EAAM8C,EAAY,EAAGG,EACzB,GAAID,IAAgB,KAAOA,IAAgB,IAAK,CAE9C,GADAhD,GAAOgD,IAAgB,IAAM,EAAI,EAC7BhD,EAAM4C,EAAK,OACb,OAAO,KAET,IAAIxE,EAAW,EACf,QAAS8E,EAAIJ,EAAY,EAAGI,EAAIlD,EAAKkD,IAAK,CACxC,IAAIC,EAAQP,EAAK,WAAWM,CAAC,EAC7B,GAAIC,GAAS,IAAQA,GAAS,GAC5BA,GAAS,WACFA,GAAS,IAAQA,GAAS,GACjCA,GAAS,WACFA,GAAS,IAAQA,GAAS,IACjCA,GAAS,OAET,QAAO,KAET/E,EAAWA,EAAW,GAAK+E,CAC7B,CACA,GAAI,CAAChD,GAAiB/B,CAAQ,EAC5B,OAAO,KACT6E,EAAc,OAAO,cAAc7E,CAAQ,CAC7C,KACK,CACH,GAAI,EAAE4E,KAAeH,GACnB,OAAO,KACTI,EAAcJ,EAAaG,CAAW,CACxC,CACAD,GAAUH,EAAK,MAAMJ,EAAOM,CAAS,EAAIG,EACzCT,EAAQxC,EACR8C,EAAYF,EAAK,QAAQ,KAAMJ,CAAK,CACtC,CACA,OAAOO,EAASH,EAAK,MAAMJ,CAAK,CAClC,CAGA,cAAc/D,EAAOC,EAAK,CAExB,GAAID,EAAM,OAASC,GAAO,EAAG,CAE3B,IAAM0E,EAAQ3E,EAAMC,CAAG,EACjB2E,EAAgB5E,EAAMC,EAAM,CAAC,IAAM0E,GAAS3E,EAAMC,EAAM,CAAC,IAAM0E,EAAQ,EAAI,EAC7EE,EAAUF,EACVC,IAAkB,IACpBC,EAAUF,IAAU,IAAM,MAAQ,OAGpC,IAAIG,EAAa7E,EAAM,KAAK,IAAI,KAAK,mBAAoB2E,CAAa,EACtE,MAAQE,EAAa9E,EAAM,QAAQ6E,EAASC,CAAU,GAAK7E,GAAK,CAE9D,IAAI8E,EAAiB,EACrB,KAAO/E,EAAM8E,EAAaC,EAAiB,CAAC,IAAM,MAChDA,IAIF,GAAIA,EAAiB,IAAM,EAAG,CAE5B,IAAMC,EAAMhF,EAAM,UAAUC,EAAM2E,EAAeE,CAAU,EACvDG,EAAQD,EAAI,MAAM,YAAY,EAC9BE,EAAYD,EAAM,OAAS,EACzBvB,EAAcoB,EAAa7E,EAAM2E,EAEvC,GAAIA,IAAkB,GAAKM,IAAc,GACrCN,IAAkB,GAAK,KAAK,UAC9B,MACF,KAAK,OAASM,EACd,IAAMtB,EAAkBsB,IAAc,EAAI,EAAID,EAAMA,EAAM,OAAS,CAAC,EAAE,OAASL,EAC/E,MAAO,CACL,MAAO,KAAK,UAAUI,EAAK7E,EAAwB,EAAG,YAAAuD,EAAa,gBAAAE,EACnE,aAAcgB,IAAkB,CAClC,CACF,CACAE,GACF,CACA,KAAK,mBAAqB9E,EAAM,OAASC,EAAM2E,EAAgB,CACjE,CACA,MAAO,CAAE,MAAO,GAAI,YAAa,EAAG,gBAAiB,EAAG,aAAc,EAAM,CAC9E,CAGA,kBAAkBlC,EAAUxC,EAAe,CAEzC,IAAIiF,EACJ,GAAI,CACF,KAAK,eAAe,CAACC,EAAOpB,IAAU,CACpC,GAAI,CACF,OAAOtB,EAAS0C,EAAOpB,CAAK,CAC9B,OACOqB,EAAQ,CACb,MAAOF,EAAgBE,CACzB,CACF,EAAGnF,CAAa,CAClB,OACOkF,EAAO,CAEZ,GAAIA,IAAUD,GAAiB,EAAEC,aAAiB,YAChD,MAAMA,EACR1C,EAAS,KAAK,aAAa,KAAM,0BAA0B,KAAK,KAAK,GAAG,CAAC,CAC3E,CACF,CAGA,aAAa4C,EAAOC,EAAU,eAAeD,CAAK,aAAa,KAAK,KAAK,IAAK,CAC5E,KAAK,OAAS,KACd,IAAME,EAAM,IAAI,MAAMD,CAAO,EAC7B,OAAAC,EAAI,QAAU,CACZ,MAAO,OACP,KAAM,KAAK,MACX,cAAe,KAAK,aACtB,EACOA,CACT,CAGA,oBAAqB,CACnB,YAAK,MAAQ,EACb,KAAK,cAAgB,EACrB,KAAK,gBAAkB,OACvB,KAAK,cAAgB,OACrB,KAAK,mBAAqB,EAC1B,KAAK,OAAS,OAGP,KAAK,cAAgB,CAAC,CAC/B,CAIA,gBAAgBxF,EAAO0C,EAAU,CAC/B,KAAK,mBAAmB,EACxB,KAAK,OAAS,KAAK,iBAAiB1C,CAAK,EACzC,KAAK,kBAAkB0C,EAAU,EAAI,CACvC,CAGA,iBAAiB1C,EAAO,CACtB,OAAIA,EAAM,WAAW,QAAQ,GAC3B,KAAK,cAAgB,EACdA,EAAM,MAAM,CAAC,GAEfA,CACT,CASA,SAASA,EAAO0C,EAAU,CACxB,IAAM+C,EAAe,KAAK,mBAAmB,EAG7C,GAAI,OAAOzF,GAAU,SAGnB,GAFA,KAAK,OAAS,KAAK,iBAAiBA,CAAK,EAErC,OAAO0C,GAAa,WACtB,eAAe,IAAM,CACf,KAAK,gBAAkB+C,GACzB,KAAK,kBAAkB/C,EAAU,EAAI,CACzC,CAAC,MAEE,CACH,IAAMgD,EAAS,CAAC,EACZN,EAEJ,GADA,KAAK,kBAAkB,CAACO,EAAGC,IAAMD,EAAKP,EAAQO,EAAKD,EAAO,KAAKE,CAAC,EAAG,EAAI,EACnER,EAAO,MAAMA,EACjB,OAAOM,CACT,KAGG,CACH,IAAIG,EAASC,EAAc,EACvB,OAAO9F,EAAM,aAAgB,YAC/BA,EAAM,YAAY,MAAM,EAE1BA,EAAM,GAAG,OAAQ+F,GAAQ,CACvB,GAAI,KAAK,gBAAkBN,GAAgB,KAAK,SAAW,MAAQM,EAAK,SAAW,EAAG,CAEpF,GAAI,OAAOA,GAAS,WAClBF,EAAUA,GAAW,IAAI,YAAY,QAAS,CAAE,UAAW,EAAK,CAAC,EAC7D,EAAEE,EAAOF,EAAQ,OAAOE,EAAM,CAAE,OAAQ,EAAK,CAAC,IAChD,OAGA,OAAO,KAAK,OAAW,IACzB,KAAK,OAAS,KAAK,iBAAiBA,CAAI,EAExC,KAAK,QAAUA,EAGb,KAAK,OAAO,QAAUD,IACxB,KAAK,kBAAkBpD,EAAU,EAAK,EACtCoD,EAAc,KAAK,SAAW,MAAQ,KAAK,OAAO,OAASzD,GACzD,EAAI,KAAK,OAAO,OAAS,EAE/B,CACF,CAAC,EAEDrC,EAAM,GAAG,MAAO,IAAM,CACpB,GAAI,KAAK,gBAAkByF,GAAgB,KAAK,SAAW,KAAM,CAE/D,IAAMO,EAAOH,EAAUA,EAAQ,OAAO,EAAI,GACtCG,IACF,KAAK,OAAS,OAAO,KAAK,QAAW,SAAW,KAAK,OAASA,EAAOA,GACnE,OAAO,KAAK,QAAW,UACzB,KAAK,kBAAkBtD,EAAU,EAAI,CACzC,CACF,CAAC,EACD1C,EAAM,GAAG,QAASoF,GAAS,CACrB,KAAK,gBAAkBK,GACzB/C,EAAS0C,CAAK,CAClB,CAAC,CACH,CACF,CACF,ECh9BA,GAAM,CAAE,IAAAa,GAAK,IAAAC,CAAI,EAAIC,EAGjBC,GACAC,GAAoB,EAElBC,GAAe,KAKrB,IAAMC,GAAc,CAClB,UAAAC,GACA,UAAAC,GACA,SAAAC,GACA,QAAAC,GACA,aAAAC,GACA,KAAAC,GACA,OAAQA,GACR,SAAAC,GACA,SAAAC,EACF,EACOC,EAAQT,GAGFU,EAAN,MAAMC,CAAK,CAChB,YAAYC,EAAI,CACd,KAAK,GAAKA,CACZ,CAGA,IAAI,OAAQ,CACV,OAAO,KAAK,EACd,CAGA,OAAOC,EAAO,CAIZ,OAAIA,aAAiBF,EACZ,KAAK,KAAOE,EAAM,IAAM,KAAK,WAAaA,EAAM,SAElD,CAAC,CAACA,GAAS,KAAK,WAAaA,EAAM,UACxB,KAAK,QAAaA,EAAM,KAC5C,CAIA,UAAW,CACT,MAAO,EACT,CAGA,QAAS,CACP,MAAO,CACL,SAAU,KAAK,SACf,MAAU,KAAK,KACjB,CACF,CACF,EAIaC,GAAN,cAAwBJ,CAAK,CAOlC,YAAYK,EAAK,CACXA,IAAQ,GACV,MAAMA,CAAG,GAGT,MAAMC,EAAY,EAClB,OAAO,eAAe,KAAM,QAAS,CAAE,MAAO,EAAG,CAAC,EAEtD,CAGA,IAAI,UAAW,CACb,MAAO,WACT,CACF,EAGaC,GAAN,MAAMC,UAAgBR,CAAK,CAQhC,YAAYE,EAAI,CACd,MAAMA,CAAE,CACV,CAGA,IAAI,UAAW,CACb,MAAO,SACT,CAGA,IAAI,OAAQ,CACV,OAAO,KAAK,GAAG,UAAU,EAAG,KAAK,GAAG,YAAY,GAAG,CAAC,CACtD,CAGA,IAAI,UAAW,CAEb,IAAMA,EAAK,KAAK,GACZO,EAAQP,EAAG,YAAY,GAAG,EAAI,EAC5BQ,EAASR,EAAG,YAAY,IAAI,EAElC,OAAOO,EAAQP,EAAG,QAAUA,EAAGO,GAAO,IAAM,KAAOC,EAASD,EAAQP,EAAG,OAAO,EAAGQ,CAAM,EAAIR,GAAI,OAAOO,CAAK,EAAE,YAAY,EAAI,EAC/H,CAGA,IAAI,WAAY,CAEd,IAAMP,EAAK,KAAK,GACVS,EAAST,EAAG,YAAY,GAAG,EAC3BQ,EAASR,EAAGS,EAAS,CAAC,IAAM,IAAMT,EAAG,YAAY,IAAI,EAAI,GAC/D,OAAOQ,EAASC,GAAUD,EAAS,EAAIR,EAAG,OAASA,EAAG,OAAOQ,EAAS,CAAC,EAAE,YAAY,EAAI,EAC3F,CAGA,IAAI,UAAW,CACb,OAAO,IAAIN,GAAU,KAAK,cAAc,CAC1C,CAGA,IAAI,gBAAiB,CAEnB,IAAMF,EAAK,KAAK,GAAIU,EAAQV,EAAG,YAAY,GAAG,EAAI,EAC5CW,EAAOD,EAAQV,EAAG,OAASA,EAAGU,CAAK,EAAI,GAE7C,OAAOC,IAAS,IAAMX,EAAG,OAAOU,EAAQ,CAAC,EAEjCC,IAAS,IAAMC,EAAI,OAAUZ,EAAG,QAAQ,KAAMU,CAAK,EAAI,EAAIG,GAAI,cAAgBA,GAAI,UAC7F,CAGA,OAAOZ,EAAO,CAGZ,OAAIA,aAAiBK,EACZ,KAAK,KAAOL,EAAM,GAEpB,CAAC,CAACA,GAAS,CAAC,CAACA,EAAM,UACR,KAAK,WAAaA,EAAM,UACxB,KAAK,QAAaA,EAAM,OACxB,KAAK,WAAaA,EAAM,WACtB,KAAK,YAAcA,EAAM,WAAe,KAAK,YAAc,IAAM,CAACA,EAAM,YAC1E,KAAK,SAAS,QAAUA,EAAM,SAAS,KAC3D,CAEA,QAAS,CACP,MAAO,CACL,SAAW,KAAK,SAChB,MAAW,KAAK,MAChB,SAAW,KAAK,SAChB,UAAW,KAAK,UAChB,SAAU,CAAE,SAAU,YAAa,MAAO,KAAK,cAAe,CAChE,CACF,CACF,EAGaa,GAAN,cAAwBhB,CAAK,CAOlC,YAAYiB,EAAM,CAChB,MAAM,KAAKA,CAAI,EAAE,CACnB,CAGA,IAAI,UAAW,CACb,MAAO,WACT,CAGA,IAAI,OAAQ,CACV,OAAO,KAAK,GAAG,OAAO,CAAC,CACzB,CACF,EAEaC,GAAN,cAAuBlB,CAAK,CAOjC,YAAYiB,EAAM,CAChB,MAAM,IAAIA,CAAI,EAAE,CAClB,CAGA,IAAI,UAAW,CACb,MAAO,UACT,CAGA,IAAI,OAAQ,CACV,OAAO,KAAK,GAAG,OAAO,CAAC,CACzB,CACF,EAGaE,GAAN,cAA2BnB,CAAK,CAMrC,aAAc,CACZ,aAAM,EAAE,EACDoB,IAAgB,IACzB,CAGA,IAAI,UAAW,CACb,MAAO,cACT,CAGA,OAAOjB,EAAO,CAIZ,OAAQ,OAASA,GAAW,CAAC,CAACA,GAAU,KAAK,WAAaA,EAAM,QAClE,CACF,EAGAiB,GAAe,IAAID,GA0GZ,IAAME,GAAN,cAAmBC,CAAK,CAO7B,YAAYC,EAASC,EAAWC,EAAQC,EAAO,CAC7C,MAAM,EAAE,EACR,KAAK,SAAaH,EAClB,KAAK,WAAaC,EAClB,KAAK,QAAaC,EAClB,KAAK,OAAaC,GAASC,EAC7B,CAGA,IAAI,UAAW,CACb,MAAO,MACT,CAEA,IAAI,SAAU,CACZ,OAAO,KAAK,QACd,CAEA,IAAI,WAAY,CACd,OAAO,KAAK,UACd,CAEA,IAAI,QAAS,CACX,OAAO,KAAK,OACd,CAEA,IAAI,OAAQ,CACV,OAAO,KAAK,MACd,CAGA,QAAS,CACP,MAAO,CACL,SAAW,KAAK,SAChB,QAAW,KAAK,SAAS,OAAO,EAChC,UAAW,KAAK,WAAW,OAAO,EAClC,OAAW,KAAK,QAAQ,OAAO,EAC/B,MAAW,KAAK,OAAO,OAAO,CAChC,CACF,CAGA,OAAOC,EAAO,CACZ,MAAO,CAAC,CAACA,GAAS,KAAK,SAAS,OAAOA,EAAM,OAAO,GAClC,KAAK,WAAW,OAAOA,EAAM,SAAS,GACtC,KAAK,QAAQ,OAAOA,EAAM,MAAM,GAChC,KAAK,OAAO,OAAOA,EAAM,KAAK,CAClD,CACF,EAcA,SAASC,GAAUC,EAAK,CACtB,OAAO,IAAIC,GAAUD,CAAG,CAC1B,CAGA,SAASE,GAAUC,EAAM,CACvB,OAAO,IAAIC,GAAUD,GAAQ,MAAME,IAAmB,EAAE,CAC1D,CAGA,SAASC,GAAQC,EAAOC,EAAoB,CAE1C,GAAI,OAAOA,GAAuB,SAChC,OAAO,IAAIC,GAAQ,IAAIF,CAAK,KAAKC,EAAmB,YAAY,CAAC,EAAE,EAGrE,GAAIA,IAAuB,QAAa,EAAE,aAAcA,GACtD,OAAO,IAAIC,GAAQ,IAAIF,CAAK,KAAKC,EAAmB,SAAS,YAAY,CAAC,GAAGA,EAAmB,UAAY,KAAKA,EAAmB,UAAU,YAAY,CAAC,GAAK,EAAE,EAAE,EAItK,IAAIE,EAAWF,EAAqBA,EAAmB,MAAQ,GAC/D,OAAIE,IAAa,KAEX,OAAOH,GAAU,UACnBG,EAAWC,EAAI,QAER,OAAOJ,GAAU,SACpB,OAAO,SAASA,CAAK,EAIvBG,EAAW,OAAO,UAAUH,CAAK,GAAK,KAAK,IAAIA,CAAK,EAAI,KAAOI,EAAI,QAAUA,EAAI,QAEjFD,EAAWC,EAAI,OACV,OAAO,MAAMJ,CAAK,IACrBA,EAAQA,EAAQ,EAAI,MAAQ,SAIzB,OAAOA,GAAU,SACxBG,EAAWC,EAAI,QAERJ,aAAiB,MAAQ,CAAC,OAAO,MAAMA,EAAM,QAAQ,CAAC,IAC7DG,EAAWC,EAAI,SACfJ,EAAQA,EAAM,YAAY,IAKtBG,IAAa,IAAMA,IAAaC,EAAI,OAC1C,IAAIF,GAAQ,IAAIF,CAAK,GAAG,EACxB,IAAIE,GAAQ,IAAIF,CAAK,MAAMG,CAAQ,EAAE,CACzC,CAGA,SAASE,GAAST,EAAM,CACtB,OAAO,IAAIU,GAASV,CAAI,CAC1B,CAGA,SAASW,IAAe,CACtB,OAAOC,EACT,CAGA,SAASC,GAAKC,EAASC,EAAWC,EAAQC,EAAO,CAC/C,OAAO,IAAIC,GAAKJ,EAASC,EAAWC,EAAQC,CAAK,CACnD,CAEO,SAASE,GAASC,EAAM,CAC7B,GAAIA,aAAgBC,EAClB,OAAOD,EAGT,OAAQA,EAAK,SAAU,CACvB,IAAK,YAAgB,OAAOxB,GAAUwB,EAAK,KAAK,EAChD,IAAK,YAAgB,OAAOrB,GAAUqB,EAAK,KAAK,EAChD,IAAK,WAAgB,OAAOX,GAASW,EAAK,KAAK,EAC/C,IAAK,eAAgB,OAAOR,GAC5B,IAAK,UAAgB,OAAOT,GAAQiB,EAAK,MAAQA,EAAK,SACpDA,EAAK,UAAY,CAAE,SAAUA,EAAK,SAAU,UAAWA,EAAK,SAAU,EAAIA,EAAK,SADhBA,EAAK,QACmB,EACzF,IAAK,OAAgB,OAAOE,GAASF,CAAI,EACzC,QAAqB,MAAM,IAAI,MAAM,wBAAwBA,EAAK,QAAQ,EAAE,CAC5E,CACF,CAEO,SAASE,GAASC,EAAQ,CAC/B,GAAIA,aAAkBL,GACpB,OAAOK,EAET,GAAIA,EAAO,WAAa,OACtB,MAAM,IAAI,MAAM,wBAAwBA,EAAO,QAAQ,EAAE,EAE3D,OAAOV,GAAKM,GAASI,EAAO,OAAO,EAAGJ,GAASI,EAAO,SAAS,EAAGJ,GAASI,EAAO,MAAM,EAAGJ,GAASI,EAAO,KAAK,CAAC,CACnH,CChgBA,IAAIC,GAAkB,EAEhBC,GAAc,uBAEdC,GAAkB,kCAGHC,EAArB,MAAqBC,CAAS,CAC5B,YAAYC,EAAS,CACnB,KAAK,cAAgB,CAAC,EACtB,KAAK,OAAS,KAGdA,EAAUA,GAAW,CAAC,EACtB,KAAK,SAASA,EAAQ,OAAO,EAC7BA,EAAQ,SAAWC,GAAgB,KAAMD,EAAQ,OAAO,EAGxD,IAAME,EAAU,OAAOF,EAAQ,QAAW,SAC7BA,EAAQ,OAAO,MAAM,gBAAgB,EAAE,CAAC,EAAE,YAAY,EAAI,GACnEG,EAAW,SAAS,KAAKD,CAAM,EAAGE,EAAS,OAAO,KAAKF,CAAM,EAC7DG,EAAa,SAAS,KAAKH,CAAM,EAAGI,EAAW,OAAO,KAAKJ,CAAM,EACjEK,EAAO,KAAK,QAAU,KAAK,KAAKL,CAAM,EACtCM,EAAaH,GAAcC,EA0B/B,GAxBA,KAAK,aAAe,KAAK,MACrBC,IACF,KAAK,YAAc,KAAK,uBACxB,KAAK,MAAQ,KAAK,iBAClB,KAAK,aAAe,KAAK,0BAErB,KAAK,qBAAuB,EAAEJ,GAAYI,MAC9C,KAAK,2BAA6B,KAAK,gBAEzC,KAAK,eAAiB,EAAEJ,GAAYC,GAAUC,GAAcE,GAE5D,KAAK,aAAeP,EAAQ,YAE5B,KAAK,qBAAuB,CAAC,CAACA,EAAQ,oBAGtC,KAAK,oBAAsB,CAAC,CAACA,EAAQ,mBAEjCQ,IACF,KAAK,oBAAsBC,GAAgB,MAC7C,KAAK,iBAAmB,OAAOT,EAAQ,iBAAoB,SAAW,GAC5CA,EAAQ,gBAAgB,QAAQ,UAAW,IAAI,EAEzE,KAAK,YAAc,KACfA,EAAQ,WAAY,CACtB,KAAK,YAAc,OAAO,OAAO,IAAI,EACrC,QAAWU,KAAQV,EAAQ,WACzB,KAAK,YAAY,IAAIU,EAAK,YAAY,CAAC,EAAE,EAAI,KAAK,YAAYA,EAAK,YAAY,CAAC,EAAIA,CACxF,CACA,KAAK,OAASV,EAAQ,OAAS,IAAIW,GAAQ,CACzC,SAAUH,EAAY,GAAID,EAAM,YAAa,KAAK,aAAc,WAAYP,EAAQ,UACtF,CAAC,EAED,KAAK,qBAAuB,CAAC,CAACA,EAAQ,oBAEtC,KAAK,yBAA2B,CAAC,CAACA,EAAQ,wBAE1C,KAAK,0BAA4B,CAAC,CAACA,EAAQ,yBAC3C,KAAK,SAAWA,EAAQ,QAExB,IAAMY,EAAqBZ,EAAQ,mBACnC,KAAK,oBAAsBY,IAAuB,KAChD,OAAO,UAAUA,CAAkB,GAAKA,GAAsB,EAAIA,EAAqB,IAC3F,CAKA,OAAO,uBAAwB,CAC7BjB,GAAkB,CACpB,CAKA,SAASkB,EAAS,CAChB,GAAI,CAACA,EACH,KAAK,MAAQ,GACb,KAAK,UAAY,GACjB,KAAK,wBAA0B,OAE5B,CAEH,IAAMC,EAAcD,EAAQ,QAAQ,GAAG,EACnCC,GAAe,IACjBD,EAAUA,EAAQ,OAAO,EAAGC,CAAW,GAEzC,KAAK,MAAQD,EACb,IAAME,EAAWF,EAAQ,QAAQ,GAAG,EAC9BG,EAAOD,EAAW,EAAIF,EAAUA,EAAQ,OAAO,EAAGE,CAAQ,EAChE,KAAK,UAAcF,EAAQ,QAAQ,GAAG,EAAI,EAAIA,EAC3BG,EAAK,OAAO,EAAGA,EAAK,YAAY,GAAG,EAAI,CAAC,EAC3D,IAAMC,EAAOJ,EACbA,EAAUA,EAAQ,MAAM,4CAA4C,EACpE,KAAK,UAAcA,EAAQ,CAAC,EAC5B,KAAK,YAAcA,EAAQ,CAAC,EAGxBA,EAAQ,CAAC,IAAM,SAAcI,EAAK,SAAW,KAAK,UAAU,QAAUA,EAAK,KAAK,UAAU,MAAM,IAAM,OACxG,KAAK,UAAY,GAAG,KAAK,SAAS,KAEpC,KAAK,wBAA0BrB,GAAY,KAAK,KAAK,SAAS,CAChE,CACF,CAIA,iBAAiBsB,EAAMC,EAASC,EAAWC,EAAO,CAChD,OAAI,KAAK,kBAAoB,KAAK,qBAChC,KAAK,OAAO,mCAAmC,KAAK,mBAAmB,SAAS,KAAK,sBAAwB,EAAI,GAAK,GAAG,GAAIA,CAAK,EAC3H,KAET,KAAK,mBACL,KAAK,aAAaH,EAAM,KAAK,OAAQC,EAASC,EAAW,IAAI,EAC7D,KAAK,OAAS,KACP,GACT,CAIA,aAAaF,EAAMI,EAAOH,EAASC,EAAWG,EAAQ,CAEpD,GAAI,CAAC,KAAK,QAAS,CACjB,KAAK,cAAc,KAAK,CAAE,KAAAL,EAAM,QAAAC,EAAS,UAAAC,EAAW,OAAAG,EAAQ,MAAAD,CAAM,CAAC,EACnE,MACF,CACA,IAAME,EAAU,CACd,KAAAN,EACA,QAAAC,EAAS,UAAAC,EAAW,OAAAG,EAAQ,MAAAD,EAC5B,QAAS,KAAK,kBACd,SAAU,KAAK,UACf,YAAa,KAAK,UAAU,EAC5B,cAAe,KAAK,eACpB,kBAAmB,KAAK,mBACxB,aAAc,KAAK,aACrB,EAGIJ,IAAS,YACXM,EAAQ,KAAO,CAAC,KAAK,MAAO,KAAK,UAAW,KAAK,UAAW,KAAK,YAC/D,KAAK,uBAAuB,EAC9B,KAAK,eAAiB,CAAC,GAEzB,KAAK,cAAc,KAAKA,CAAO,EAE/B,KAAK,kBAAoB,GACzB,KAAK,UAAY,IAIb,CAAC,KAAK,0BAA4BN,IAAS,aAG7C,KAAK,UAAU,EAAK,KAAK,OAAS,GAAG,KAAK,OAAO,KAAK,IAAM,IAC5D,KAAK,mBAAqB,CAAC,GAGzBA,IAAS,YACX,KAAK,SAAW,KAChB,KAAK,cAAgB,GAEzB,CAIA,gBAAgBA,EAAMG,EAAO,CAE3B,IAAMG,EAAU,KAAK,cAAc,IAAI,EACvC,GAAI,CAACA,GAAWA,EAAQ,OAASN,EAC/B,OAAO,KAAK,OAAO,cAAcG,EAAM,IAAI,GAAIA,CAAK,EAGtD,KAAK,SAAaG,EAAQ,QAC1B,KAAK,WAAaA,EAAQ,UAC1B,KAAK,QAAaA,EAAQ,OAC1B,KAAK,OAAaA,EAAQ,MAGtB,KAAK,UACP,KAAK,kBAAoBA,EAAQ,QACjC,KAAK,UAAYA,EAAQ,SACrBN,IAAS,YACX,CAAC,KAAK,MAAO,KAAK,UAAW,KAAK,UAAW,KAAK,YAChD,KAAK,uBAAuB,EAAIM,EAAQ,MACxC,KAAK,iBAAmBA,EAAQ,gBAClCC,GAAY,KAAK,UAAW,KAAK,cAAc,EAC/C,KAAK,eAAiBD,EAAQ,eAEhC,KAAK,UAAU,EAAIA,EAAQ,YACvB,KAAK,qBAAuBA,EAAQ,oBACtCC,GAAY,KAAK,YAAa,KAAK,kBAAkB,EACrD,KAAK,mBAAqBD,EAAQ,mBAEpC,KAAK,cAAgBA,EAAQ,aAEjC,CAGA,sBAAsBH,EAAO,CAC3B,OAAI,KAAK,UAAY,CAAC,KAAK,gBAAgB,KAAK,QAAQ,EAC/C,KAAK,OAAO,0DAA0D,KAAK,QAAQ,IAAKA,CAAK,EAC/F,KAAK,kBAAkBA,CAAK,CACrC,CAGA,kBAAkBA,EAAO,CACvB,OAAQA,EAAM,KAAM,CAEpB,IAAK,MACH,OAAI,KAAK,SAAW,KACX,KAAK,OAAO,iBAAkBA,CAAK,GAC5C,OAAO,KAAK,UAAU,EACf,KAAK,UAAU,KAAM,KAAM,KAAK,SAAS,GAElD,IAAK,SACH,KAAK,aAAe,GACtB,IAAK,UACH,OAAO,KAAK,YAEd,IAAK,OACH,KAAK,aAAe,GACtB,IAAK,QACH,OAAO,KAAK,aAEd,IAAK,UACH,KAAK,aAAe,GACtB,IAAK,WACH,OAAO,KAAK,aAEd,IAAK,IACH,GAAI,KAAK,qBACP,YAAK,OAAS,GACd,KAAK,SAAW,KACT,KAAK,aAEhB,IAAK,QACH,GAAI,KAAK,qBACP,OAAO,KAAK,qBAEhB,QACE,OAAI,KAAK,cAAgB,MAAQA,EAAM,QAAQ,KAAK,aAAe,KAAK,SAAW,MACjF,KAAK,aAAeA,EAAM,KAAK,CAAC,IAAM,IACtC,KAAK,mBAAmB,KAAK,YAAYA,EAAM,IAAI,CAAC,EAC7C,KAAK,6BAEP,KAAK,aAAaA,CAAK,CAChC,CACF,CAGA,sBAAsBA,EAAO,CAC3B,OAAQA,EAAM,KAAM,CACpB,IAAK,SACH,KAAK,aAAe,GACtB,IAAK,UACH,OAAO,KAAK,YACd,IAAK,OACH,KAAK,aAAe,GACtB,IAAK,QACH,OAAO,KAAK,aACd,QACE,OAAO,KAAK,aAAaA,CAAK,CAChC,CACF,CAGA,qBAAsB,CACpB,IAAMG,EAAU,KAAK,cAAc,KAAK,cAAc,OAAS,CAAC,EAChE,OAAOA,GAAWA,EAAQ,OAAS,UAAY,KAAK,sBAAwB,KAAK,iBACnF,CAGA,YAAYH,EAAOK,EAAY,CAC7B,IAAIC,EACJ,OAAQN,EAAM,KAAM,CAEpB,IAAK,MACL,IAAK,UACH,IAAMZ,EAAM,KAAK,YAAYY,EAAM,KAAK,EACxC,GAAIZ,IAAQ,KACV,OAAO,KAAK,OAAO,cAAeY,CAAK,EACzCM,EAAQ,KAAK,SAAS,UAAUlB,CAAG,EACnC,MAEF,IAAK,OACL,IAAK,WACH,IAAMmB,EAAS,KAAK,UAAUP,EAAM,MAAM,EAC1C,GAAIO,IAAW,OACb,OAAO,KAAK,OAAO,qBAAqBP,EAAM,MAAM,KAAMA,CAAK,EACjEM,EAAQ,KAAK,SAAS,UAAUC,EAASP,EAAM,KAAK,EACpD,MAEF,IAAK,QACHM,EAAQ,KAAK,SAAS,UAAU,KAAK,UAAUN,EAAM,MAAM,EAAIA,EAAM,KAAK,EAC1E,MAEF,IAAK,MACHM,EAAQ,KAAK,SAAS,SAASN,EAAM,MAAM,OAAO,CAAC,CAAC,EACpD,MAEF,QACE,OAAO,KAAK,OAAO,2BAA2BA,EAAM,IAAI,GAAIA,CAAK,CACnE,CAEA,MAAI,CAACK,GAAc,KAAK,SAAYC,EAAM,MAAM,KAAK,cACnDA,EAAQ,KAAK,YAAYA,EAAM,EAAE,GAC5BA,CACT,CAGA,UAAUN,EAAOF,EAASC,EAAWG,EAAQ,CAC3C,IAAMM,EAAQ,KAAK,cACnB,OAD2CA,EAAM,QAAUA,EAAMA,EAAM,OAAS,CAAC,GACtE,OAAS,KACX,KAAK,OAAO,oCAAqCR,CAAK,GAG/D,KAAK,aAAa,OAAQ,KAAK,OAAQF,EAASC,EAAWG,CAAM,EACjE,KAAK,SAAW,KACT,KAAK,cACd,CAGA,aAAaF,EAAO,CAKlB,OAJA,KAAK,WAAa,KAEdA,EAAM,OAAS,MACjB,KAAK,cAAgB,IACfA,EAAM,KAAM,CACpB,IAAK,IAEH,YAAK,aAAa,QAAS,KAAK,OACd,KAAK,SAAW,KAAK,SAAS,UAAU,EAAG,KAAM,IAAI,EAChE,KAAK,mBACd,IAAK,IACH,OAAO,KAAK,UAAUA,EAAO,KAAK,QAAS,KAAM,IAAI,EACvD,IAAK,IAEH,OAAK,KAAK,SAEV,KAAK,aAAa,UAAW,KAAK,OAChB,KAAK,OAAS,KAAK,SAAS,UAAU,EAAG,KAAM,IAAI,EAC9D,KAAK,uBAHH,KAAK,OAAO,mBAAoBA,CAAK,EAIhD,IAAK,IAEH,OAAO,KAAK,iBAAiBA,CAAK,EACpC,IAAK,WACH,OAAK,KAAK,SAEV,KAAK,SAAW,KAChB,KAAK,WAAa,KAAK,WACvB,KAAK,YAAc,YACZ,KAAK,qBAJH,KAAK,OAAO,wBAAyBA,CAAK,EAKrD,IAAK,UACH,OAAK,KAAK,SAEV,KAAK,SAAW,KAChB,KAAK,WAAa,KAAK,UACvB,KAAK,YAAc,WACZ,KAAK,qBAJH,KAAK,OAAO,uBAAwBA,CAAK,EAKpD,IAAK,UACH,OAAK,KAAK,QAGNA,EAAM,OAAO,SAAW,GAC1B,KAAK,cAAgBA,EAAM,MACpB,KAAK,0BAGZ,KAAK,SAAW,KAAK,SAAS,QAAQA,EAAM,MAAO,KAAK,SAAS,UAAUA,EAAM,MAAM,CAAC,EAEjF,KAAK,eAAe,KAAK,0BAA0B,GATnD,KAAK,OAAO,qBAAsBA,CAAK,EAWlD,IAAK,MACH,OAAK,KAAK,QAEH,KAAK,iBAAiB,MAAO,KAAM,KAAMA,CAAK,GAAK,KAAK,aADtD,KAAK,OAAO,oCAAqCA,CAAK,EAEjE,IAAK,KACH,OAAO,KAAK,iBAAiB,KAAM,KAAM,KAAMA,CAAK,GAAK,KAAK,aAChE,QAEE,IAAK,KAAK,SAAW,KAAK,YAAYA,CAAK,KAAO,OAChD,OAEF,GAAI,KAAK,QACP,OAAO,KAAK,eAAe,KAAK,0BAA0B,CAC9D,CAIA,OAAO,KAAK,0BACd,CAGA,eAAeA,EAAO,CACpB,IAAMH,EAAOG,EAAM,KACfS,EAAW,GACf,OAAQZ,EAAM,CACd,IAAK,UACH,KAAK,kBAAoB,GAC3B,IAAK,eACH,KAAK,WAAa,KAAK,cAAcG,EAAM,KAAK,EAChD,MACF,IAAK,MACH,OAAO,KAAK,wBACd,IAAK,KACH,YAAK,kBAAoB,GACzB,KAAK,UAAY,GACV,KAAK,wBACd,IAAK,mBACH,YAAK,kBAAoB,GAClB,KAAK,wBACd,IAAK,KAGH,YAAK,SAAW,KACT,KAAK,gCAAgCA,CAAK,EACnD,IAAK,IACL,IAAK,IACL,IAAK,IAGH,OAAI,KAAK,aAAe,MAAQ,CAAC,KAAK,QAC7B,KAAK,OAAO,cAAcH,CAAI,GAAIG,CAAK,GAChD,KAAK,SAAW,KACTH,IAAS,IAAM,KAAK,mBAAmBG,CAAK,EAAI,KAAK,iBAAiBA,CAAK,GACpF,IAAK,IAEH,OAAO,KAAK,aAAe,KAAO,KAAK,eAChC,KAAK,OAAO,+BAAgCA,CAAK,EAC1D,IAAK,UACH,GAAI,CAAC,KAAK,QACR,OAAO,KAAK,OAAO,qBAAsBA,CAAK,EAEhD,GAAIA,EAAM,OAAO,SAAW,EAC1B,YAAK,cAAgBA,EAAM,MACpB,KAAK,0BAGZ,KAAK,WAAa,KAAK,SAAS,QAAQA,EAAM,MAAO,KAAK,SAAS,UAAUA,EAAM,MAAM,CAAC,EAE5FS,EAAW,GACX,MACF,IAAK,IAEH,OAAO,KAAK,QACV,KAAK,UAAUT,EAAO,KAAK,SAAU,KAAK,QAAS,IAAI,EACvD,KAAK,OAAO,2BAA2BH,CAAI,GAAIG,CAAK,EACxD,IAAK,IACH,OAAI,KAAK,SAEP,KAAK,aAAa,QAAS,KAAK,OAAQ,KAAK,SAC3B,KAAK,SAAW,KAAK,SAAS,UAAU,EAAG,IAAI,EAC1D,KAAK,oBAEP,KAAK,OAAO,qCAAsCA,CAAK,EAChE,IAAK,IAEH,OAAI,KAAK,SACP,KAAK,aAAa,UAAW,KAAK,OAAQ,KAAK,SAC7B,KAAK,OAAS,KAAK,SAAS,UAAU,EAAG,IAAI,EACxD,KAAK,cAEP,KAAK,YAAYA,CAAK,EAC/B,IAAK,QACH,GAAI,CAAC,KAAK,QACR,OAAO,KAAK,OAAO,qCAAsCA,CAAK,EAClE,QACE,IAAK,KAAK,WAAa,KAAK,YAAYA,CAAK,KAAO,OAClD,OACFS,EAAW,KAAK,OAClB,CACA,YAAK,iBAAmB,GAEjBA,EAAW,KAAK,eAAe,KAAK,YAAa,WAAW,EAAI,KAAK,WAC9E,CAGA,wBAAwBT,EAAO,CAC7B,OAAIA,EAAM,OAAS,OAASA,EAAM,OAAS,MAAQA,EAAM,OAAS,MAC9DA,EAAM,OAAS,mBACV,KAAK,OAAO,+BAA+BA,EAAM,IAAI,GAAIA,CAAK,EAChE,KAAK,eAAeA,CAAK,CAClC,CAGA,YAAYA,EAAO,CACjB,GAAI,KAAK,UACP,OAAIA,EAAM,OAAS,KACV,KAAK,OAAO,uBAAuBA,EAAM,IAAI,GAAIA,CAAK,GAC/D,KAAK,UAAY,GACV,KAAK,aAEd,OAAQA,EAAM,KAAM,CACpB,IAAK,UAEH,GAAIA,EAAM,OAAO,SAAW,EAC1B,YAAK,cAAgBA,EAAM,MACpB,KAAK,oBAMZ,GAFA,KAAK,QAAU,KAAK,SAAS,QAAQA,EAAM,MAAO,KAAK,SAAS,UAAUA,EAAM,MAAM,CAAC,EAEnF,KAAK,QACP,OAAO,KAAK,eAAe,KAAK,qBAAqB,CAAC,EAE1D,MACF,IAAK,IAEH,YAAK,aAAa,QAAS,KAAK,OAAQ,KAAK,SAAU,KAAK,WAC1C,KAAK,SAAW,KAAK,SAAS,UAAU,CAAC,EACpD,KAAK,mBACd,IAAK,IACH,OAAO,KAAK,UAAUA,EAAO,KAAK,SAAU,KAAK,WAAY,KAAK,OAAO,EAC3E,IAAK,IAEH,OAAK,KAAK,SAEV,KAAK,aAAa,UAAW,KAAK,OAAQ,KAAK,SAAU,KAAK,WAC5C,KAAK,OAAS,KAAK,SAAS,UAAU,CAAC,EAClD,KAAK,uBAHH,KAAK,OAAO,mBAAoBA,CAAK,EAIhD,IAAK,MACH,OAAO,KAAK,iBAAiB,MAAO,KAAK,SAAU,KAAK,WAAYA,CAAK,GAAK,KAAK,aACrF,IAAK,KACH,OAAO,KAAK,iBAAiB,KAAM,KAAK,SAAU,KAAK,WAAYA,CAAK,GAAK,KAAK,aACpF,QAEE,IAAK,KAAK,QAAU,KAAK,YAAYA,CAAK,KAAO,OAC/C,OAEF,GAAI,KAAK,QACP,OAAO,KAAK,eAAe,KAAK,qBAAqB,CAAC,CAC1D,CACA,OAAO,KAAK,qBAAqB,CACnC,CAGA,2BAA2BA,EAAO,CAChC,OAAOA,EAAM,OAAS,IAAM,KAAK,WAAWA,CAAK,EAAI,KAAK,eAAeA,CAAK,CAChF,CAGA,WAAWA,EAAO,CAChB,OAAIA,EAAM,OAAS,IACV,KAAK,OAAO,0BAA0BA,EAAM,IAAI,GAAIA,CAAK,GAElE,KAAK,OAAS,KAAK,SAAU,KAAK,SAAW,KACtC,KAAK,aACd,CAGA,mBAAmBA,EAAO,CACxB,GAAIA,EAAM,OAAS,IACjB,YAAK,SAAW,KACT,KAAK,mBAAmBA,CAAK,EAEjC,CACH,IAAMQ,EAAQ,KAAK,cACnB,OADiDA,EAAM,OAAS,GAAKA,EAAMA,EAAM,OAAS,CAAC,GAC1E,OAAS,KACjB,KAAK,OAAO,8DAA+DR,CAAK,EAErFA,EAAM,OAAS,KACV,KAAK,wBACd,KAAK,WAAa,KACX,KAAK,eAAeA,CAAK,EAClC,CACF,CAGA,uBAAuBA,EAAO,CAC5B,IAAMZ,EAAM,KAAK,YAAYY,CAAK,EAClC,GAAIZ,IAAQ,OACV,OACF,GAAIA,EAAI,WAAa,YACnB,OAAO,KAAK,OAAO,iCAAiCY,EAAM,IAAI,GAAIA,CAAK,EAEzE,IAAMU,EAAc,KAAK,SACzB,KAAK,SAAWtB,EAChB,IAAMe,EAAU,KAAK,cAAc,KAAK,cAAc,OAAS,CAAC,EAChE,OAAIA,EAAQ,UAAYO,IACtBP,EAAQ,QAAUf,GAChBe,EAAQ,YAAcO,IACxBP,EAAQ,UAAYf,GAClBe,EAAQ,SAAWO,IACrBP,EAAQ,OAASf,GACnB,KAAK,WAAa,KACX,KAAK,6BACd,CAGA,8BAA8BY,EAAO,CACnC,OAAIA,EAAM,OAAS,KAAOA,EAAM,OAAS,KAAOA,EAAM,OAAS,KAAOA,EAAM,OAAS,IAC5E,KAAK,OAAO,8BAA8BA,EAAM,IAAI,GAAIA,CAAK,EAC/D,KAAK,eAAeA,CAAK,CAClC,CAGA,mBAAmBA,EAAO,CACxB,GAAIA,EAAM,OAAS,IACjB,OAAO,KAAK,0BAA0BA,CAAK,EAGzC,KAAK,WAAa,MACpB,KAAK,aAAa,KAAK,SAAU,KAAK,WAAY,KAAK,QAAS,KAAK,MAAM,EAG7E,IAAMW,EAAQ,KAAK,aAAe,KAGlC,OAFA,KAAK,gBAAgB,QAASX,CAAK,EAE/B,KAAK,UAAY,KACZ,KAAK,qBAAqB,EAE1B,KAAK,aAAe,KACpB,KAAK,eAAe,KAAK,YAAa,WAAW,EAIjDW,EAAQ,KAAK,2BAA6B,KAAK,wBAC1D,CAGA,yBAAyBX,EAAO,CAC9B,OAAQA,EAAM,KAAM,CACpB,IAAK,IACL,IAAK,IAEH,YAAK,SAAW,KACT,KAAK,iBAAiBA,CAAK,EACpC,QACE,OAAO,KAAK,eAAeA,CAAK,CAClC,CACF,CAGA,cAAcA,EAAO,CACnB,IAAIY,EAAO,KACPC,EAAO,KACPC,EAAO,KAAK,cACVC,EAAe,KAAK,SACtBP,EAAQ,KAAK,cACbQ,EAASR,EAAMA,EAAM,OAAS,CAAC,EAEnC,OAAQR,EAAM,KAAM,CACpB,IAAK,IAEH,KAAK,aAAa,QAAS,KAAK,OACda,EAAO,KAAK,SAAS,UAAU,EAAG,KAAK,UACvC,KAAK,SAAWD,EAAO,KAAK,SAAS,UAAU,CAAC,EAClEE,EAAO,KAAK,mBACZ,MACF,IAAK,IAEH,KAAK,aAAa,OAAQ,KAAK,OACbD,EAAO,KAAK,SAAS,UAAU,EAAG,KAAK,UAAW,KAAK,OAAO,EAChF,KAAK,SAAW,KAChB,MACF,IAAK,IAKH,GAHA,KAAK,gBAAgB,OAAQb,CAAK,EAG9BQ,EAAM,SAAW,GAAKA,EAAMA,EAAM,OAAS,CAAC,EAAE,OAAS,OAAQ,CAEjE,GAAI,KAAK,QAEP,OAAIO,IAAiB,MACnB,KAAK,MAAMA,EAAc,KAAK,SAAU,KAAK,QAAS,KAAK,MAAM,EAGnE,KAAK,aAAa,OAAQ,KAAK,OAAQ,KAAK,SAAU,KAAK,WAAY,KAAK,OAAO,EACnF,KAAK,SAAW,KAAK,QAAS,KAAK,WAAa,KACzC,KAAK,eAAe,KAAK,aAAa,EAE/C,KAAK,MAAM,KAAK,SAAU,KAAK,WAAY,KAAK,QAAS,KAAK,MAAM,CACtE,CAEA,GAAI,KAAK,aAAe,MAItB,GAFAD,EAAO,KAAK,QAAU,KAAK,eAAe,KAAK,cAAc,EAAI,KAAK,eAElE,KAAK,WAAa,KAAK,QACzB,OAAOA,UAGF,KAAK,UAAY,MAIxB,GAFAA,EAAO,KAAK,eAAe,KAAK,YAAa,WAAW,EAEpD,KAAK,aAAe,KAAK,QAC3B,OAAOA,UAITA,EAAO,KAAK,qBAAqB,EAE7B,KAAK,UACPA,EAAO,KAAK,eAAeA,CAAI,GAE7B,KAAK,UAAY,KAAK,QACxB,OAAOA,EAGXD,EAAO,KAAK,QACZ,MACF,IAAK,UAECb,EAAM,OAAO,SAAW,GAC1B,KAAK,cAAgBA,EAAM,MAC3Bc,EAAO,KAAK,8BAIZF,EAAO,KAAK,SAAS,QAAQZ,EAAM,MAAO,KAAK,SAAS,UAAUA,EAAM,MAAM,CAAC,EAC/Ec,EAAO,KAAK,qBAAqB,GAEnC,MACF,IAAK,IAEH,OAAK,KAAK,SAIVD,EAAO,KAAK,SAAS,UAAU,EAC/BD,EAAO,KAAK,SAAS,UAAU,EAE3BG,IAAiB,KAEfC,EAAO,YAAc,KACvBA,EAAO,QAAUH,EAEjBG,EAAO,OAASH,EAIlB,KAAK,MAAME,EAAc,KAAK,SAAUF,EAAM,KAAK,MAAM,EAG3D,KAAK,MAAMA,EAAM,KAAK,UAAWD,EAAM,KAAK,MAAM,EAElD,KAAK,aAAa,UAAW,KAAK,OAAQC,EAAM,KAAK,UACnC,KAAK,OAASD,CAAI,EACpC,KAAK,SAAW,KACT,KAAK,uBAvBH,KAAK,OAAO,mBAAoBZ,CAAK,EAwBhD,IAAK,MACL,IAAK,KACH,GAAI,CAAC,KAAK,iBAAiBA,EAAM,KAAM,KAAM,KAAMA,CAAK,EACtD,OACFc,EAAO,KAAK,aACZ,MACF,QACE,IAAKF,EAAO,KAAK,YAAYZ,CAAK,KAAO,OACvC,MACJ,CA2BA,GAxBIa,IAAS,OACX,KAAK,SAAWA,EAAO,KAAK,SAAS,UAAU,IAG7Cb,EAAM,OAAS,MAAQA,EAAM,OAAS,SACxCQ,EAAMA,EAAM,OAAS,CAAC,EAAE,QAAU,KAAK,UAGrCO,IAAiB,KAEfC,EAAO,YAAc,KACvBA,EAAO,QAAUH,EAEVG,EAAO,SAAW,KACzBA,EAAO,UAAYH,EAGnBG,EAAO,OAASH,EAIlB,KAAK,MAAME,EAAc,KAAK,SAAUF,EAAM,KAAK,MAAM,EAGvDD,IAAS,KAAM,CAEjB,GAAI,KAAK,UAAYZ,EAAM,OAAS,OAASA,EAAM,OAAS,YACvCA,EAAM,OAAS,OAASA,EAAM,OAAS,SACvCA,EAAM,OAAS,WAElC,YAAK,aAAa,OAAQ,KAAK,OAAQa,EAAM,KAAK,UAAWD,CAAI,EACjE,KAAK,SAAWA,EAAM,KAAK,WAAa,KAEjC,KAAK,eAAe,KAAK,aAAa,EAG/C,KAAK,MAAMC,EAAM,KAAK,UAAWD,EAAM,KAAK,MAAM,CACpD,CACA,OAAOE,CACT,CAGA,oBAAoBd,EAAO,CACzB,OAAO,KAAK,uBAAuBA,EAAO,EAAK,CACjD,CAIA,4BAA4BA,EAAO,CACjC,OAAO,KAAK,uBAAuBA,EAAO,EAAI,CAChD,CAIA,iBAAiBA,EAAOiB,EAAW,CACjC,IAAIC,EAASC,EAAS,GAEtB,OAAQnB,EAAM,KAAM,CAEpB,IAAK,OACL,IAAK,UACH,IAAMoB,EAAW,KAAK,YAAYpB,CAAK,EACvC,GAAIoB,IAAa,OAAW,OAC5B,GAAIA,EAAS,QAAUC,EAAW,IAAI,YAAcD,EAAS,QAAUC,EAAW,IAAI,cACpF,OAAO,KAAK,OAAO,gFAAiFrB,CAAK,EAE3GkB,EAAU,KAAK,SAAS,QAAQ,KAAK,cAAeE,CAAQ,EAC5DpB,EAAQ,KACR,MAEF,IAAK,WACH,GAAIA,EAAM,MAAM,MAAM,GAAG,EAAE,KAAKsB,GAAKA,EAAE,OAAS,CAAC,EAC/C,OAAO,KAAK,OAAO,6DAA8DtB,CAAK,EACxFkB,EAAU,KAAK,SAAS,QAAQ,KAAK,cAAelB,EAAM,KAAK,EAC/D,KAAK,iBAAmBA,EAAM,MAC9BA,EAAQ,KAER,KAAK,kBAAoBiB,EACzBE,EAAS,GACT,MAEF,QACED,EAAU,KAAK,SAAS,QAAQ,KAAK,aAAa,CACpD,CAEA,MAAO,CAAE,MAAAlB,EAAO,QAAAkB,EAAS,OAAAC,CAAO,CAClC,CAGA,aAAanB,EAAO,CAClB,IAAMiB,EAAY,KAAK,kBAAmBM,EAAW,KAAK,iBAE1D,GAAIvB,EAAM,OAAS,UAAW,CAC5B,IAAMwB,EAAO,KAAK,SAAS,QAAQ,KAAK,cAAe,CAAE,SAAU,KAAK,iBAAkB,UAAWxB,EAAM,KAAM,CAAC,EAC9GiB,IAAc,UAChB,KAAK,SAAWO,EACTP,IAAc,YACrB,KAAK,WAAaO,EAElB,KAAK,QAAUA,EACjB,KAAK,iBAAmB,OACxBxB,EAAQ,IACV,CAEA,GAAIiB,IAAc,WAAaA,IAAc,YAAa,CAExD,IAAMH,EAAOG,IAAc,UAAY,KAAK,2BAA6B,KAAK,YAE9E,OADe,KAAK,kBAAkBjB,EAAOc,EAAMG,CAAS,GAC3CH,EAAK,KAAK,KAAMd,CAAK,CACxC,CACA,OAAO,KAAK,2BAA2BA,EAAOuB,CAAQ,CACxD,CAGA,qBAAqBvB,EAAOiB,EAAW,CACrC,IAAMQ,EAAY,KAAK,iBAAiBzB,EAAOiB,CAAS,EACxD,GAAI,CAACQ,EACH,OAEF,IAAIX,EAYJ,GAXIG,IAAc,WAChB,KAAK,SAAWQ,EAAU,QAC1BX,EAAO,KAAK,6BAGZ,KAAK,WAAaW,EAAU,QAC5B,KAAK,iBAAmB,GACxBX,EAAO,KAAK,aAIVW,EAAU,OACZ,YAAK,iBAAmB,GACjB,KAAK,aAId,IAAMC,EAAS,KAAK,kBAAkBD,EAAU,MAAOX,EAAMG,CAAS,EACtE,OAAIS,GAIGZ,EAAK,KAAK,KAAMW,EAAU,KAAK,CACxC,CAGA,wBAAwBzB,EAAO,CAC7B,OAAO,KAAK,qBAAqBA,EAAO,SAAS,CACnD,CAGA,0BAA0BA,EAAO,CAC/B,OAAO,KAAK,qBAAqBA,EAAO,WAAW,CACrD,CAGA,uBAAuBA,EAAOuB,EAAU,CACtC,IAAME,EAAY,KAAK,iBAAiBzB,EAAO,QAAQ,EACvD,GAAKyB,EAML,OAHA,KAAK,QAAUA,EAAU,QAGrBA,EAAU,QACZ,KAAK,iBAAmBF,EACjB,KAAK,cAGP,KAAK,2BAA2BE,EAAU,MAAOF,CAAQ,CAClE,CAEA,2BAA2BvB,EAAOuB,EAAU,CAE1C,OAAI,KAAK,UAAYvB,IAAU,MAAQA,EAAM,OAAS,KAAOA,EAAM,OAAS,KAGtEuB,GACF,KAAK,aAAa,OAAQ,KAAK,OAAQ,KAAK,SAAU,KAAK,UAAW,KAAK,OAAO,EAClF,KAAK,SAAW,KAAK,QAAS,KAAK,WAAa,KACzC,KAAK,kBAAkBvB,EAAO,KAAK,aAAa,GAElD,KAAK,kBAAkBA,EAAO,KAAK,qBAAqB,CAAC,GAI9DuB,GACF,KAAK,MAAM,KAAK,SAAU,KAAK,UAAW,KAAK,QAAS,KAAK,MAAM,EAEjEvB,IAAU,KACL,KAAK,qBAAqB,GAGjC,KAAK,cAAgB,KAAK,qBAAqB,EACxC,KAAK,cAAcA,CAAK,GAEnC,CAGA,iBAAiBA,EAAO,CACtB,GAAIA,EAAM,OAAS,IACjB,OAAO,KAAK,iBAAiBA,CAAK,EAGhC,KAAK,WAAa,MACpB,KAAK,aAAa,KAAK,SAAU,KAAK,WAAY,KAAK,QAAS,KAAK,MAAM,EAE7E,IAAM2B,EAAU,KAAK,OAAQhB,EAAQ,KAAK,cAiB1C,OAfA,KAAK,gBAAgB,UAAWX,CAAK,EAKjCW,GAAS,KAAK,sBACZ,KAAK,WAAagB,EACpB,KAAK,SAAW,KAAK,QACd,KAAK,aAAeA,EAC3B,KAAK,WAAa,KAAK,QAEvB,KAAK,QAAU,KAAK,SAIpB,KAAK,UAAY,KACZ,KAAK,eAAe,KAAK,qBAAqB,EAAG,QAAQ,EAC9D,KAAK,aAAe,KACf,KAAK,eAAe,KAAK,YAAa,WAAW,EACnD,KAAK,eAAe,KAAK,eAAgB,SAAS,CAC3D,CAGA,iBAAiB3B,EAAO,CACtB,IAAIc,EAAMb,EAAQ,KAAK,OACjBH,EAAU,KAAK,SAAU8B,EAAmB,KAAK,kBACvD,OAAQ5B,EAAM,KAAM,CAEpB,IAAK,IACH,GAAI,KAAK,SAAW,KAClB,OAAO,KAAK,OAAO,2BAA4BA,CAAK,EACtD,GAAI,KAAK,QACP,OAAO,KAAK,iBAAiBA,CAAK,EACpC,KAAK,OAAS,KAEhB,IAAK,IACH,KAAK,SAAW,KAChB,KAAK,YAAc,KACnBc,EAAO,KAAK,oBAAoB,EAC5Bc,IAAkB,KAAK,kBAAoB,IAC/C,MAEF,IAAK,IACCA,IAAkB,KAAK,kBAAoB,IAC/Cd,EAAO,KAAK,eACZ,MAEF,IAAK,IACHA,EAAO,KAAK,YACZ,MAEF,IAAK,IACL,IAAK,KACH,OAAO,KAAK,qBAAqBd,CAAK,EAExC,IAAK,KACH,OAAO,KAAK,OAAO,uCAAwCA,CAAK,EAClE,QAEE,GAAI,KAAK,gBAAkB,KAAK,SAAW,OAASC,EAAQ,KAAK,YAAYD,CAAK,KAAO,OAAW,CAClGc,EAAO,KAAK,qBACZ,KACF,CACA,OAAO,KAAK,OAAO,mCAAmC,KAAK,QAAQ,EAAE,IAAKd,CAAK,CACjF,CAEA,GAAIF,IAAY,KAAM,CACpB,IAAMC,EAAY,KAAK,WAAYG,EAAS,KAAK,QACjD,KAAK,MAAMJ,EAASC,EAAWG,EAAQD,EAAO2B,CAAgB,CAChE,CACA,OAAOd,CACT,CAGA,0BAA0Bd,EAAO,CAC/B,IAAIc,EAAMe,EAAwB,GAClC,OAAQ7B,EAAM,KAAM,CAEpB,IAAK,IACH6B,EAAwB,KAAK,kBAC7Bf,EAAO,KAAK,eACZ,MAEF,IAAK,IACHA,EAAO,KAAK,YACZ,MAGF,IAAK,IACL,IAAK,KACH,OAAO,KAAK,qBAAqBd,CAAK,EACxC,IAAK,KACH,OAAO,KAAK,OAAO,uCAAwCA,CAAK,EAClE,QACE,OAAO,KAAK,OAAO,mCAAmC,KAAK,QAAQ,EAAE,IAAKA,CAAK,CACjF,CAEA,YAAK,aAAa,KAAK,SAAU,KAAK,WAAY,KAAK,QAAS,KAAK,MAAM,EACvE6B,IACF,KAAK,kBAAoB,IACpBf,CACT,CAGA,qBAAqBd,EAAO,CAC1B,OAAIA,EAAM,OAAS,IACV,KAAK,OAAO,8BAA+BA,CAAK,EAClD,KAAK,iBACd,CAGA,YAAYA,EAAO,CACjB,OAAIA,EAAM,OAAS,SACV,KAAK,OAAO,oCAAqCA,CAAK,GAC/D,KAAK,QAAUA,EAAM,MACd,KAAK,eACd,CAGA,eAAeA,EAAO,CACpB,GAAIA,EAAM,OAAS,MACjB,OAAO,KAAK,OAAO,kCAAkC,KAAK,OAAO,KAAMA,CAAK,EAC9E,IAAM8B,EAAa,KAAK,YAAY9B,CAAK,EACzC,OAAI,KAAK,iBAAmB,MAC1B,KAAK,eAAe,KAAK,KAAK,QAAS,KAAK,UAAU,KAAK,OAAO,CAAC,EACrE,KAAK,UAAU,KAAK,OAAO,EAAI8B,EAAW,MAC1C,KAAK,gBAAgB,KAAK,QAASA,CAAU,EACtC,KAAK,2BACd,CAGA,aAAa9B,EAAO,CAClB,IAAMZ,EAAMY,EAAM,OAAS,OAAS,KAAK,YAAYA,EAAM,KAAK,EAChE,OAAKZ,GAEL,KAAK,SAASA,CAAG,EACV,KAAK,6BAFH,KAAK,OAAO,gDAAiDY,CAAK,CAG7E,CAGA,gBAAgB+B,EAAS,CACvB,OAAO,KAAK,2BAA6BrD,EAAS,mBAAmB,SAASqD,CAAO,CACvF,CAGA,aAAa/B,EAAO,CAClB,OAAIA,EAAM,OAAS,UACV,KAAK,OAAO,iDAAkDA,CAAK,EAExEA,EAAM,SAAW,IAAMA,EAAM,aACxB,KAAK,OAAO,8CAA+CA,CAAK,GACzE,KAAK,iBAAiBA,EAAM,KAAK,EAC5B,KAAK,gBAAgBA,EAAM,KAAK,EAE9B,KAAK,4BADH,KAAK,OAAO,kCAAkCA,EAAM,KAAK,IAAKA,CAAK,EAE9E,CAGA,qBAAqBA,EAAO,CAC1B,OAAQA,EAAM,KAAM,CACpB,IAAK,MACL,IAAK,QACL,IAAK,WACH,OAAO,KAAK,aAAaA,CAAK,EAAG,KAAK,WACxC,IAAK,IACH,OAAO,KAAK,0BACd,QACE,OAAO,KAAK,OAAO,sBAAuBA,CAAK,CACjD,CACF,CAGA,0BAA0BA,EAAO,CAC/B,OAAIA,EAAM,OAAS,IACV,KAAK,OAAO,sBAAuBA,CAAK,GACjD,KAAK,SAAW,KAAK,SAAS,UAAU,EACjC,KAAK,WACd,CAGA,4BAA4BA,EAAO,CAEjC,OAAI,KAAK,cACP,KAAK,aAAe,GACb,KAAK,oBAAoB,EAAE,KAAK,KAAMA,CAAK,GAGhDA,EAAM,OAAS,IACV,KAAK,OAAO,yCAA0CA,CAAK,EAC7D,KAAK,oBAAoB,CAClC,CAGA,oBAAoBA,EAAO,CACzB,IAAIgC,EACJ,OAAQhC,EAAM,KAAM,CACpB,IAAK,MACL,IAAK,WACH,IAAKgC,EAAS,KAAK,YAAYhC,EAAO,EAAI,KAAO,OAC/C,MACJ,QACE,OAAO,KAAK,OAAO,cAAcA,EAAM,IAAI,GAAIA,CAAK,CACtD,CAEA,OAAK,KAAK,sBAQJ,KAAK,WAAa,KACpB,KAAK,MAAM,KAAK,QAAU,KAAK,aAAc,KAAK,WACvC,KAAK,SAAW,KAAK,SAAS,UAAU,EAAG,KAAK,iBAAiB,EAG5E,KAAK,MAAM,KAAK,SAAU,KAAK,SACpB,KAAK,SAAW,KAAK,SAAS,UAAU,EAAG,KAAK,iBAAiB,EAE9E,KAAK,MAAM,KAAK,SAAU,KAAK,UAAWgC,EAAQ,KAAK,iBAAiB,IAfpE,KAAK,qBAAuB,MAC9B,KAAK,mBAAmB,KAAKA,EAAO,GAAI,KAAK,YAAYA,EAAO,EAAE,CAAC,EACrE,KAAK,YAAYA,EAAO,EAAE,EAAI,KAAK,SAAS,KAAK,WAAW,EAAE,KAAK,SAAS,UAAU,EAAE,KAAK,GAexF,KAAK,0BACd,CAGA,2BAA2BhC,EAAO,CAEhC,OAAIA,EAAM,OAAS,IACV,KAAK,qBAIR,KAAK,uBACP,KAAK,MAAM,KAAK,SAAU,KAAK,SAAU,KAAK,QAAS,KAAK,iBAAiB,EAC7E,KAAK,SAAW,MAGlB,KAAK,cAAgB,KAAK,qBAAqB,EACxC,KAAK,cAAcA,CAAK,EAEnC,CAGA,eAAeiC,EAAWC,EAAU,CAClC,YAAK,WAAaD,EAClB,KAAK,cAAgBC,IAAa,KAAK,aAAe,KAAO,UAAY,UAClE,KAAK,SACd,CAIA,kBAAkBlC,EAAOiC,EAAWC,EAAU,CAE5C,GAAIlC,IAAU,MAAQA,EAAM,OAAS,KAAOA,EAAM,OAAS,IACzD,OAAO,KACT,IAAM0B,EAAS,KAAK,eAAeO,EAAWC,CAAQ,EAEtD,OAAOlC,IAAU,KAAO0B,EAASA,EAAO,KAAK,KAAM1B,CAAK,CAC1D,CAGA,UAAUA,EAAO,CACf,OAAQA,EAAM,KAAM,CAEpB,IAAK,IAAK,OAAO,KAAK,iBAEtB,IAAK,IAAK,OAAO,KAAK,kBAEtB,QACE,IAAMiC,EAAY,KAAK,WACjBzB,EAAQ,KAAK,cAAeQ,EAASR,EAAM,QAAUA,EAAMA,EAAM,OAAS,CAAC,EAEjF,GAAIQ,GAAUA,EAAO,OAAS,OAAQ,CAEpC,IAAMJ,EAAO,KAAK,SAElB,KAAK,gBAAgB,OAAQZ,CAAK,EAElC,KAAK,MAAM,KAAK,SAAU,KAAK,UAAWY,EAAM,KAAK,MAAM,CAC7D,CACA,YAAK,WAAa,KAClB,KAAK,cAAgB,KACdqB,EAAU,KAAK,KAAMjC,CAAK,CACnC,CACF,CAGA,iBAAiBA,EAAO,CACtB,IAAIF,EAASC,EACPG,EAAS,KAAK,SAAS,UAAU,EAEvC,IAAKH,EAAY,KAAK,YAAYC,CAAK,KAAO,OAG9C,OAAI,KAAK,gBAAkB,WACzBF,EAAU,KAAK,SAAU,KAAK,SAAWI,GAClC,KAAK,gBAAkB,aAC9BJ,EAAU,KAAK,WAAY,KAAK,WAAaI,IAE7CJ,EAAU,KAAK,QAAU,KAAK,QAAWI,GAE3C,KAAK,MAAMJ,EAASC,EAAWG,EAAQ,KAAK,MAAM,EAC3C,KAAK,SACd,CAGA,kBAAkBF,EAAO,CACvB,IAAMF,EAAU,KAAK,SAAS,UAAU,EACpCC,EAAWG,EAEf,IAAKH,EAAY,KAAK,YAAYC,CAAK,KAAO,OAG9C,OAAI,KAAK,gBAAkB,WACzBE,EAAS,KAAK,SAAU,KAAK,SAAWJ,GACjC,KAAK,gBAAkB,aAC9BI,EAAS,KAAK,WAAY,KAAK,WAAaJ,IAE5CI,EAAS,KAAK,QAAU,KAAK,QAAWJ,GAE1C,KAAK,MAAMA,EAASC,EAAWG,EAAQ,KAAK,MAAM,EAC3C,KAAK,SACd,CAGA,oBAAoBF,EAAO,CACzB,GAAIA,EAAM,OAAS,MACjB,OAAO,KAAK,OAAO,wBAAwBA,EAAM,IAAI,GAAIA,CAAK,EAEhE,IAAMmC,EAAO,KAAK,YAAY,KAAK,SAAU,KAAK,WAAY,KAAK,QAC/D,KAAK,OAAQ,KAAK,iBAAiB,EACvC,KAAK,gBAAgB,MAAOnC,CAAK,EACjC,KAAK,mBAGL,IAAMQ,EAAQ,KAAK,cAAeQ,EAASR,EAAM,QAAUA,EAAMA,EAAM,OAAS,CAAC,EACjF,OAAIQ,GAAUA,EAAO,OAAS,QAC5B,KAAK,MAAM,KAAK,SAAU,KAAK,UAAWmB,EAAM,KAAK,MAAM,EACpD,KAAK,qBAAqB,GAG/B,KAAK,WAAa,MACpB,KAAK,SAAWA,EACT,KAAK,iBAIZ,KAAK,QAAUA,EACR,KAAK,qBAAqB,EAErC,CAGA,gCAAgCnC,EAAO,CACrC,OAAIA,EAAM,OAAS,IACV,KAAK,aAEP,KAAK,uBAAuBA,CAAK,CAC1C,CAGA,uBAAuBA,EAAO,CAC5B,GAAIA,EAAM,OAAS,KACjB,OAAO,KAAK,OAAO,uBAAuBA,EAAM,IAAI,GAAIA,CAAK,EAE/D,KAAK,YAAc,KACnB,IAAMoC,EAAU,KAAK,gBAAgB,EACrC,KAAK,gBAAgB,KAAMpC,CAAK,EAChC,KAAK,mBAGL,IAAMQ,EAAQ,KAAK,cAAeQ,EAASR,EAAM,QAAUA,EAAMA,EAAM,OAAS,CAAC,EACjF,OAAIQ,GAAUA,EAAO,OAAS,QAC5B,KAAK,MAAM,KAAK,SAAU,KAAK,UAAWoB,EAAS,KAAK,MAAM,EACvD,KAAK,qBAAqB,GAG1B,KAAK,WAAa,MACzB,KAAK,SAAWA,EACT,KAAK,mCAIZ,KAAK,QAAUA,EACR,KAAK,qBAAqB,EAErC,CAEA,iCAAiCpC,EAAO,CACtC,OAAIA,EAAM,OAAS,KACjB,KAAK,SAAW,KACT,KAAK,iBAAiBA,CAAK,GAE7B,KAAK,eAAeA,CAAK,CAClC,CAGA,aAAaA,EAAO,CAElB,OAAIA,EAAM,OAAS,KACV,KAAK,uBAAuBA,CAAK,GAC1C,KAAK,SAAW,KAAK,YAAYA,CAAK,EAC/B,KAAK,uBACd,CAIA,qBAAqBA,EAAO,CAC1B,YAAK,aAAa,KAAK,SAAU,KAAK,WAAY,KAAK,QAAS,KAAK,MAAM,EAE3E,KAAK,YAAc,KACZ,KAAK,gBAAgBA,CAAK,CACnC,CAIA,gBAAgBA,EAAO,CACrB,OAAQA,EAAM,KAAM,CACpB,IAAK,IACH,OAAO,KAAK,yBACd,IAAK,KACH,OAAO,KAAK,yBAAyBA,CAAK,CAC5C,CAIA,OADA,KAAK,YAAc,KACXA,EAAM,KAAM,CAEpB,IAAK,IACH,YAAK,kBAAoB,GAClB,KAAK,eAEd,IAAK,IACH,OAAO,KAAK,YACd,QACE,YAAK,SAAW,KAET,KAAK,qBAAqB,EAAE,KAAK,KAAMA,CAAK,CACrD,CACF,CAGA,yBAAyBA,EAAO,CAC9B,OAAQA,EAAM,KAAM,CACpB,IAAK,MACL,IAAK,UACL,IAAK,OACL,IAAK,WACL,IAAK,QACL,IAAK,MACH,YAAK,SAAW,KAAK,YAAYA,CAAK,EAC/B,KAAK,6BACd,CAEA,YAAK,SAAW,KAAK,SAAS,UAAU,EACjC,KAAK,8BAA8BA,CAAK,CACjD,CAKA,8BAA8BA,EAAO,CACnC,OAAIA,EAAM,OAAS,KACV,KAAK,yBAAyBA,CAAK,GAC5C,KAAK,gBAAgB,EACd,KAAK,gBAAgBA,CAAK,EACnC,CAIA,yBAAyBA,EAAO,CAC9B,IAAMoC,EAAU,KAAK,gBAAgB,EACrC,YAAK,aAAa,aAAc,KAAK,OAAQ,KAAK,SAAU,KAAK,WAAY,KAAK,OAAO,EAEzF,KAAK,cAAc,KAAK,cAAc,OAAS,CAAC,EAAE,WAAa,KAAK,YACpE,KAAK,SAAWA,EAChB,KAAK,WAAa,KAAK,QAAU,KAAK,YAAc,KACpD,KAAK,kBAAoB,GACzB,KAAK,iBAAmB,GACjB,KAAK,cACd,CAGA,gCAAgCpC,EAAO,CACrC,IAAMQ,EAAQ,KAAK,cACnB,GAAIR,EAAM,OAAS,KAAM,CACvB,GAAI,CAACQ,EAAM,QAAUA,EAAMA,EAAM,OAAS,CAAC,EAAE,OAAS,aACpD,OAAO,KAAK,OAAO,uCAAwCR,CAAK,EAClE,GAAI,CAAC,KAAK,iBACR,OAAO,KAAK,OAAO,oCAAqCA,CAAK,EAE3D,KAAK,WAAa,MACpB,KAAK,aAAa,KAAK,SAAU,KAAK,WAAY,KAAK,QAAS,KAAK,MAAM,EAE7E,GAAM,CAAE,WAAAqC,CAAW,EAAI7B,EAAMA,EAAM,OAAS,CAAC,EAC7C,YAAK,gBAAgB,aAAcR,CAAK,EACxC,KAAK,YAAcqC,EACZ,KAAK,eACd,CAEA,OAAO,KAAK,0BAA0BrC,CAAK,CAC7C,CAEA,iBAAkB,CAChB,IAAMQ,EAAQ,KAAK,cAAeQ,EAASR,EAAM,QAAUA,EAAMA,EAAM,OAAS,CAAC,EAC3E8B,EAActB,EAASA,EAAO,MAAQ,OACtCoB,EAAU,KAAK,UAAY,KAAK,SAAS,UAAU,EACzD,YAAK,SAAW,KAChB,KAAK,YAAc,KAAK,aAAe,KAAK,YAC1C,KAAK,SAAU,KAAK,WAAY,KAAK,QAAS,KAAM,KAAK,iBAC3D,EACA,KAAK,MAAMA,EAAS,KAAK,YAAa,KAAK,YAAaE,GAAe,KAAK,QAAU,KAAK,YAAY,EAChGF,CACT,CAGA,sBAAuB,CACrB,IAAMG,EAAe,KAAK,cAC1B,GAAI,CAACA,EAAa,OAChB,OAAO,KAAK,iBAEd,OAAQA,EAAaA,EAAa,OAAS,CAAC,EAAE,KAAM,CACpD,IAAK,QACH,OAAO,KAAK,mBACd,IAAK,OACH,OAAO,KAAK,cACd,IAAK,UACH,OAAO,KAAK,iBACd,IAAK,MACH,OAAO,KAAK,oBACd,IAAK,KACH,OAAO,KAAK,gCACd,IAAK,aACH,OAAO,KAAK,+BACd,CACF,CAGA,YAAYzC,EAASC,EAAWG,EAAQD,EAAO,CAC7C,OAAO,KAAK,SAAS,KAAKH,EAASC,EAAWG,EAAQD,GAAS,KAAK,YAAY,CAClF,CAGA,uBAAuBH,EAASC,EAAWG,EAAQD,EAAO2B,EAAkB,CAC1E,OAAOA,EACL,KAAK,SAAS,KAAK1B,EAAQH,EAAWD,EAASG,GAAS,KAAK,YAAY,EACzE,KAAK,SAAS,KAAKH,EAASC,EAAWG,EAAQD,GAAS,KAAK,YAAY,CAC7E,CAGA,iBAAiBH,EAASC,EAAWG,EAAQD,EAAO2B,EAAkB,CACpE,KAAK,UAAU,KAAM,KAAK,YAAY9B,EAASC,EAAWG,EAAQD,EAAO2B,CAAgB,CAAC,CAC5F,CAGA,wBAAwB9B,EAASC,EAAWG,EAAQD,EAAO,CACzD,KAAK,UAAU,KAAM,KAAK,YAAYH,EAASC,EAAWG,EAAQD,EAAO,KAAK,iBAAiB,CAAC,CAClG,CAGA,MAAMH,EAASC,EAAWG,EAAQD,EAAO,CACvC,KAAK,UAAU,KAAM,KAAK,SAAS,KAAKH,EAASC,EAAWG,EAAQD,GAAS,KAAK,YAAY,CAAC,CACjG,CAGA,OAAOuC,EAASxC,EAAO,CAErB,IAAMyC,EAAS,YAAYzC,EAAM,IAAI,IACjCwC,EAAQ,OAASC,EAAO,OAAS,MACnCD,EAAU,GAAGA,EAAQ,MAAM,EAAG,IAAMC,EAAO,MAAM,CAAC,UACpD,IAAMC,EAAM,IAAI,MAAM,GAAGF,CAAO,GAAGC,CAAM,EAAE,EAC3CC,EAAI,QAAU,CACZ,MAAO1C,EACP,KAAMA,EAAM,KACZ,cAAe,KAAK,OAAO,aAC7B,EACA,KAAK,UAAU0C,CAAG,EAClB,KAAK,UAAYC,EACnB,CAGA,YAAYvD,EAAK,CACf,MAAO,uBAAuB,KAAKA,CAAG,EAAIA,EAAM,KAAK,oBAAoBA,CAAG,CAC9E,CAIA,oBAAoBA,EAAK,CAEvB,GAAI,CAACA,EAAI,OACP,OAAO,KAAK,MAEd,OAAQA,EAAI,CAAC,EAAG,CAEhB,IAAK,IAAK,OAAO,KAAK,MAAQA,EAE9B,IAAK,IAAK,CACR,IAAMM,EAAW,KAAK,MAAM,QAAQ,GAAG,EACvC,OAAQA,EAAW,EAAI,KAAK,MAAQ,KAAK,MAAM,OAAO,EAAGA,CAAQ,GAAKN,CACxE,CAEA,IAAK,IAGH,OAAIA,EAAI,CAAC,IAAM,IACN,KAAK,UAAY,KAAK,mBAAmBA,CAAG,EAE9C,KAAK,YAAc,KAAK,mBAAmB,KAAK,YAAcA,CAAG,EACtE,KAAK,mBAAmB,IAAIA,CAAG,EAAE,EAAE,OAAO,CAAC,EAE/C,QAEE,MAAI,WAAW,KAAKA,CAAG,EACd,KAGF,KAAK,yBAA2BZ,GAAgB,KAAKY,CAAG,EAC7D,KAAK,mBAAmB,KAAK,UAAYA,CAAG,EAAI,KAAK,UAAYA,CACrE,CACF,CAGA,mBAAmBA,EAAK,CAEtB,GAAI,CAACb,GAAY,KAAKa,CAAG,EACvB,OAAOA,EAGT,IAAMwD,EAASxD,EAAI,OACfyD,EAAS,GAAIC,EAAI,GAAIC,EAAY,GAAIC,EAAe,EAAGlC,EAAO,IAElE,KAAOgC,EAAIF,GAAQ,CACjB,OAAQ9B,EAAM,CAEd,IAAK,IACH,GAAIiC,EAAY,GAEV3D,EAAI,EAAE0D,CAAC,IAAM,KAAO1D,EAAI,EAAE0D,CAAC,IAAM,IAEnC,MAAQC,EAAYD,EAAI,GAAKF,GAAUxD,EAAI2D,CAAS,IAAM,KAAO3D,EAAI2D,CAAS,IAAM,KAAO3D,EAAI2D,CAAS,IAAM,KAC5GD,EAAIC,EAEV,MAEF,IAAK,IACL,IAAK,IACHD,EAAIF,EACJ,MAEF,IAAK,IACH,GAAIxD,EAAI0D,EAAI,CAAC,IAAM,IAEjB,OADAhC,EAAO1B,EAAI,EAAE0D,EAAI,CAAC,EACVhC,EAAM,CAEd,IAAK,IACH+B,GAAUzD,EAAI,UAAU4D,EAAcF,EAAI,CAAC,EAC3CE,EAAeF,EAAI,EACnB,MAEF,KAAK,OACL,IAAK,IACL,IAAK,IACH,OAAOD,EAASzD,EAAI,UAAU4D,EAAcF,CAAC,EAAI1D,EAAI,OAAO0D,EAAI,CAAC,EAEnE,IAAK,IAEH,GADAhC,EAAO1B,EAAI,EAAE0D,EAAI,CAAC,EACdhC,IAAS,QAAaA,IAAS,KAAOA,IAAS,KAAOA,IAAS,IAAK,CAMtE,GALA+B,GAAUzD,EAAI,UAAU4D,EAAcF,EAAI,CAAC,GAEtCE,EAAeH,EAAO,YAAY,GAAG,IAAME,IAC9CF,EAASA,EAAO,OAAO,EAAGG,CAAY,GAEpClC,IAAS,IACX,MAAO,GAAG+B,CAAM,IAAIzD,EAAI,OAAO0D,EAAI,CAAC,CAAC,GACvCE,EAAeF,EAAI,CACrB,CACF,CAEJ,CACAhC,EAAO1B,EAAI,EAAE0D,CAAC,CAChB,CACA,OAAOD,EAASzD,EAAI,UAAU4D,CAAY,CAC5C,CAKA,MAAMC,EAAOC,EAAcC,EAAgBC,EAAiB,CAG1D,IAAIC,EAAQC,EAAUC,EAAWC,EAAWC,EAAaC,EAASC,EAC9DT,IAAiBA,EAAa,QAAUA,EAAa,UAAYA,EAAa,WAAaA,EAAa,WACvFA,EAAa,aAAeA,EAAa,SAAWA,EAAa,aACpFG,EAASH,EAAa,OACtBI,EAAWJ,EAAa,SACxBK,EAAYL,EAAa,UACzBM,EAAYN,EAAa,UACzBO,EAAcP,EAAa,YAC3BQ,EAAUR,EAAa,QACvBS,EAAaT,EAAa,aAG1BG,EAASH,EACTI,EAAWH,EACXK,EAAYJ,GAId,KAAK,cAAgB,KAAK,sBAE1B,KAAK,cAAgB,CAAC,EACtB,KAAK,OAAS,KAAK,SAAW,KAAK,WAAa,KAAK,QAAU,KAC/D,KAAK,YAAc,KAAK,SAAW,KACnC,KAAK,aAAe,GACpB,KAAK,UAAY,OAAO,OAAO,IAAI,EACnC,KAAK,UAAU,EAAI,KAAK,iBAAmB,KAAK,iBAAiB,OAAO,CAAC,EAC9B,IAAI9E,IAAiB,IAE5D,KAAK,SAAW,KAAK,sBAAwB,KAAK,QACpD,KAAK,UAAU,EAAE,EAAI,KAAK,YAAY,GAAG,GAC3C,KAAK,gBAAkBgF,GAAYX,GACnC,KAAK,iBAAmBa,GAAab,GACrC,KAAK,mBAAqBc,GAAed,GACzC,KAAK,kBAAoB,GACzB,KAAK,UAAY,GACjB,KAAK,YAAc,OAAO,OAAO,IAAI,EAErC,KAAK,eAAiB,KACtB,KAAK,mBAAqB,KAC1B,KAAK,cAAgB,GACrB,KAAK,iBAAmB,EAExB,IAAMiB,EAAmB5D,GAChB,KAAK,cAAgB,KAAK,cAAcA,CAAK,EAElD6D,EAAYD,EAchB,IAXIL,GAAa,KAAK,OAAO,YAC3B,KAAK,OAAO,SAAW,GACvBM,EAAY7D,GACNA,EAAM,OAAS,UACV4D,EAAiB5D,CAAK,GAC3BuD,GAAWA,EAAUvD,EAAM,KAAK,EAC7B,KAAK,gBAKZ0D,GAAWC,EAAY,CACzB,IAAMG,EAAeD,EACrBA,EAAY7D,GAAS,CACnB,GAAI,CACF,GAAI,CACF,OAAI0D,GAASA,EAAQ1D,CAAK,EACnB8D,EAAa9D,CAAK,CAC3B,QACA,CACM2D,GAAYA,EAAW3D,CAAK,CAClC,CACF,OACO+D,EAAO,CAEZ,WAAK,cAAgB,KACfA,CACR,CACF,CACF,CAGA,GAAI,CAACV,EAAQ,CACX,IAAMW,EAAQ,CAAC,EACXD,EACJ,KAAK,UAAY,CAACE,EAAG3C,IAAM,CAAE2C,EAAKF,EAAQE,EAAK3C,GAAK0C,EAAM,KAAK1C,CAAC,CAAG,EACnE,IAAM4C,EAAQ,KAAK,OAKnB,GAAI,CAACZ,GAAY,CAACE,GAAa,CAACC,GAAe,CAACF,GAAa,CAACG,GAAW,CAACC,GACtEO,EAAM,WAAa5E,GAAQ,UAAU,UAAY,OAAO4E,EAAM,iBAAoB,WAAY,CAGhG,IAAMtE,EAAO,CAAC,KAAK,MAAO,KAAK,UAAW,KAAK,UAAW,KAAK,WAAW,EAC1EsE,EAAM,gBAAgBjB,EAAO,CAACgB,EAAGjE,KAAU,CACrCiE,GACF,CAAC,KAAK,MAAO,KAAK,UAAW,KAAK,UAAW,KAAK,WAAW,EAAIrE,EACjE,KAAK,UAAUqE,CAAC,EAAG,KAAK,UAAYtB,IAE7B,KAAK,eAAekB,EAAU7D,EAAK,CAC9C,CAAC,CACH,MAEEkE,EAAM,SAASjB,CAAK,EAAE,MAAMY,CAAS,EACvC,GAAIE,EAAO,MAAMA,EACjB,OAAOC,CACT,CAEA,IAAMG,EAAmB,CAACJ,EAAO/D,IAAU,CACrC+D,IAAU,MACZ,KAAK,UAAUA,CAAK,EAAG,KAAK,UAAYpB,IACjC,KAAK,eACZkB,EAAU7D,CAAK,CACnB,EAGA,KAAK,UAAYqD,EACjB,KAAK,OAAO,SAASJ,EAAOkB,CAAgB,CAC9C,CACF,EAGA,SAAS/D,GAAYgE,EAAKC,EAAS,CACjC,QAASvB,EAAIuB,EAAQ,OAAS,EAAGvB,GAAK,EAAGA,GAAK,EACxCuB,EAAQvB,EAAI,CAAC,IAAM,OACrB,OAAOsB,EAAIC,EAAQvB,CAAC,CAAC,EAErBsB,EAAIC,EAAQvB,CAAC,CAAC,EAAIuB,EAAQvB,EAAI,CAAC,CAErC,CAGA,SAASH,IAAO,CAAC,CAGjB,SAAS/D,GAAgB0F,EAAQC,EAAS,CACxCD,EAAO,SAAWC,EAElBD,EAAO,aAAeC,EAAQ,aAAa,EAG3CD,EAAO,UAAcC,EAAQ,UAAUlD,EAAW,IAAI,KAAK,EAC3DiD,EAAO,SAAcC,EAAQ,UAAUlD,EAAW,IAAI,IAAI,EAC1DiD,EAAO,QAAcC,EAAQ,UAAUlD,EAAW,IAAI,GAAG,EACzDiD,EAAO,YAAcC,EAAQ,UAAUlD,EAAW,IAAI,OAAO,EAC7DiD,EAAO,UAAcC,EAAQ,UAAUlD,EAAW,EAAE,MAAM,EAC1DiD,EAAO,WAAcC,EAAQ,UAAUlD,EAAW,EAAE,OAAO,EAC3DiD,EAAO,QAAcC,EAAQ,QAAQ,OAAQA,EAAQ,UAAUlD,EAAW,IAAI,OAAO,CAAC,EACtFiD,EAAO,cAAgB,CACrB,EAAKC,EAAQ,UAAUlD,EAAW,IAAI,IAAI,EAC1C,IAAKkD,EAAQ,UAAUlD,EAAW,IAAI,MAAM,EAC5C,IAAKkD,EAAQ,UAAUlD,EAAW,IAAI,OAAO,EAC7C,IAAKkD,EAAQ,UAAUlD,EAAW,IAAI,WAAW,CACnD,EACAiD,EAAO,kBAAoBC,EAAQ,UAAU,oBAAoB,CACnE,CACA9F,EAAS,mBAAqB,CAC5B,MACA,YACA,KACF,EACAG,GAAgBH,EAAS,UAAW+F,CAAa,ECpwD1C,SAASC,GAAeC,EAAM,CACnC,MAAO,CAAC,CAACA,GAAQA,EAAK,WAAa,cACrC,CChCO,SAASC,EAAYC,EAAO,CACjC,OAAOA,EAAM,QAAQ,wBAAyB,MAAM,CACtD,CCGA,IAAMC,GAAmB,uEAGnBC,GAAmB,kEACnBC,GAAU,KACVC,GAAS,MACTC,GAAQ,IACRC,GAAW,IAEIC,GAArB,MAAqBC,CAAQ,CAC3B,YAAYC,EAAM,CAChB,KAAK,KAAOA,EACZ,KAAK,YAAc,EACnB,KAAK,aAAe,KACpB,KAAK,kBAAoB,IAAI,MAAMA,EAAK,OAAS,CAAC,CACpD,CAEA,OAAO,SAASA,EAAM,CACpB,MAAO,CAACR,GAAiB,KAAKQ,CAAI,CACpC,CAEA,iBAAkB,CAChB,GAAI,KAAK,aACP,OAAO,KAAK,aACd,GAAI,CAACD,EAAQ,SAAS,KAAK,IAAI,EAC7B,OAAO,KAAK,aAAe,KAG7B,IAAME,EAAS,aAAa,KAAK,KAAK,IAAI,EAAE,CAAC,EACvCC,EAAY,CAAC,IAAKC,EAAYF,CAAM,CAAC,EACrCG,EAAY,CAAC,EAGbC,EAAW,CAAC,EAAGC,EAAY,kBAC7BC,EAASC,EAAQ,EAAGC,EAAW,EAAGC,EAAOJ,EAAU,UAAYL,EAAO,OAC1E,KAAO,CAACO,GAAS,CAACC,IAAaF,EAAUD,EAAU,KAAK,KAAK,IAAI,IAE3DC,EAAQ,CAAC,IAAMV,GACjBY,EAAWH,EAAU,UAAY,GAGjCJ,EAAU,KAAKC,EAAYI,EAAQ,CAAC,CAAC,EAAG,KAAK,EAC7CH,EAAU,KAAK,IAAI,EAGfG,EAAQ,CAAC,IAAMX,GACjBS,EAAS,KAAKK,EAAOJ,EAAU,SAAS,GAExCE,EAAQE,EAAOJ,EAAU,UACzBG,EAAW,KAAK,KAAK,QAAQZ,GAAUW,CAAK,EAC5C,KAAK,kBAAkBA,CAAK,EAAIZ,KAMtC,QAASe,EAAI,EAAGA,EAAIN,EAAS,OAAQM,IACnC,KAAK,kBAAkBN,EAASM,CAAC,CAAC,EAAIhB,GAAO,OAAOU,EAAS,OAASM,EAAI,CAAC,EAC7E,YAAK,kBAAkBN,EAASA,EAAS,OAAS,CAAC,CAAC,EAAIX,GAGxD,KAAK,YAAce,EAAW,EAAIA,EAAW,KAAK,KAAK,OACvDP,EAAU,KACRC,EAAY,KAAK,KAAK,UAAUO,EAAM,KAAK,WAAW,CAAC,EACvDF,EAAQ,UAAY,YACtB,EACO,KAAK,aAAe,IAAI,OAAO,CAAC,GAAGN,EAAW,GAAGE,CAAS,EAAE,KAAK,EAAE,CAAC,CAC7E,CAEA,WAAWQ,EAAK,CAEd,IAAMC,EAAQ,KAAK,gBAAgB,EAAE,KAAKD,CAAG,EAC7C,GAAI,CAACC,EACH,OAAOD,EAGT,IAAME,EAASD,EAAM,CAAC,EAAE,OACxB,GAAIC,IAAW,KAAK,aAAeA,IAAWF,EAAI,OAChD,MAAO,GAGT,IAAMG,EAAa,KAAK,kBAAkBD,CAAM,EAChD,GAAIC,EAAY,CACd,IAAMC,EAASJ,EAAI,UAAUE,CAAM,EAEnC,OAAIC,IAAenB,IAAS,CAACH,GAAiB,KAAKuB,CAAM,EAChDJ,EAGLG,IAAerB,IAAW,SAAS,KAAKsB,CAAM,IAC7CA,EAAO,QAAQ,GAAG,EAAI,GAAK,CAAC,YAAY,KAAKA,CAAM,GAC/CA,EAEFD,EAAaC,CACtB,CAGA,OAAOJ,EAAI,UAAUE,EAAS,CAAC,CACjC,CACF,ECjGA,IAAMG,GAAeC,EAAc,aAAa,EAE1C,CAAE,IAAAC,GAAK,IAAAC,EAAI,EAAIC,EACf,CAAE,eAAAC,EAAe,EAAI,OAAO,UAI5BC,GAAY,4CACdC,GAAY,+DAIZC,GAAqB,6BACrBC,GAAqB,8BACrBC,GAAoB,CAClB,KAAM,OAAQ,IAAK,MAAO,IAAM,MAChC,KAAM,MAAO,KAAM,MAAO,KAAM,MAAO,KAAM,KAC/C,EAGEC,GAAsB,oGAKtBC,GAAiB,kLAEnBC,GAAgB,GAAGD,EAAc,0CACjCE,GAAU,kBACVC,GAAY,IAAI,OAAO,WAAWH,EAAc,KAAKE,EAAO,WAC3BD,EAAa,MAAMC,EAAO,SAASD,EAAa,KAAKC,EAAO,QAAQ,EAGnGE,EAAN,cAA6BC,CAAK,CAGhC,OAAOC,EAAO,CACZ,OAAOA,IAAU,IACnB,CACF,EAGqBC,GAArB,KAA8B,CAC5B,YAAYC,EAAcC,EAAS,CAYjC,GAVA,KAAK,aAAe,MACpB,KAAK,aAAe,GAGhBD,GAAgB,OAAOA,EAAa,OAAU,aAChDC,EAAUD,EAAcA,EAAe,MACzCC,EAAUA,GAAW,CAAC,EACtB,KAAK,OAASA,EAAQ,MAGjBD,EASH,KAAK,cAAgBA,EACrB,KAAK,WAAaC,EAAQ,MAAQ,OAAY,GAAO,CAAC,CAACA,EAAQ,QAV9C,CACjB,IAAIC,EAAS,GACb,KAAK,cAAgB,CACnB,MAAMC,EAAOC,EAAUC,EAAM,CAAEH,GAAUC,EAAOE,GAAQA,EAAK,CAAG,EAChE,IAAKA,GAAQ,CAAEA,GAAQA,EAAK,KAAMH,CAAM,CAAG,CAC7C,EACA,KAAK,WAAa,EACpB,CAQA,GAAID,EAAQ,SAAWV,GAAoB,KAAKU,EAAQ,OAAO,EAC7D,MAAM,IAAI,MAAM,0BAA0B,KAAK,UAAUA,EAAQ,OAAO,CAAC,EAAE,EAG7E,KAAK,SAAW,KACV,eAAgB,KAAKA,EAAQ,MAAM,GAiBvC,KAAK,UAAY,GACjB,KAAK,WAAa,KAAK,eAEvB,KAAK,QAAUb,GAAiB,KAAK,WAAaC,GAClD,KAAK,mBAAqBiB,GACtBL,EAAQ,SACV,KAAK,OAAO,YAAYA,EAAQ,OAAO;AAAA,CAAK,IAtB9C,KAAK,UAAY,GACjB,KAAK,QAAUf,GAAQ,KAAK,WAAaC,GAAW,KAAK,mBAAqBoB,GAC9E,KAAK,OAAS3B,GACVqB,EAAQ,SACV,KAAK,OAAO,aAAaA,EAAQ,OAAO;AAAA,CAAM,EAChD,KAAK,YAAc,OAAO,OAAO,IAAI,EAErC,KAAK,gBAAkB,OAAO,OAAO,IAAI,EACrCA,EAAQ,UACV,KAAK,SAAW,IAAIO,GAAQP,EAAQ,OAAO,EACvCA,EAAQ,WACV,KAAK,OAAO,UAAUA,EAAQ,OAAO;AAAA,CAAM,GAE/CA,EAAQ,UAAY,KAAK,YAAYA,EAAQ,QAAQ,EAWzD,CAKA,IAAI,iBAAkB,CACpB,OAAOrB,GAAa,OAAO,KAAK,MAAM,CACxC,CAGA,OAAO6B,EAAQC,EAAU,CACvB,KAAK,cAAc,MAAMD,EAAQ,OAAQC,CAAQ,CACnD,CAGA,eAAgB,CACV,KAAK,WAAa,OACpB,KAAK,OAAO,KAAK,gBAAkB;AAAA,EAAQ;AAAA;AAAA,CAAO,EAClD,KAAK,SAAW,KAChB,KAAK,OAAS9B,GAElB,CAGA,WAAW+B,EAASC,EAAWC,EAAQC,EAAOT,EAAM,CAClD,GAAI,CAIES,IAAU,KAAK,SACd,CAACA,EAAM,OAAO,KAAK,MAAM,GAAKA,EAAM,WAAa,KAAK,OAAO,YAEhE,KAAK,QAAQ,KAAK,WAAa,KAAO,GAAM,KAAK,gBAAkB;AAAA,EAAQ;AAAA;AAAA,IAC9DlC,GAAa,OAAOkC,CAAK,EAAI,GAAK,GAAG,KAAK,kBAAkBA,CAAK,CAAC;AAAA,EAAO,EACtF,KAAK,OAASA,EACd,KAAK,SAAW,MAGdH,IAAY,KAAK,UAAYA,EAAQ,OAAO,KAAK,QAAQ,EAEvDC,IAAc,KAAK,YAAcA,EAAU,OAAO,KAAK,UAAU,EACnE,KAAK,OAAO,KAAK,KAAK,cAAcC,CAAM,CAAC,GAAIR,CAAI,EAGnD,KAAK,OAAO;AAAA,MACA,KAAK,iBAAiB,KAAK,WAAaO,CAAS,CAAC,IAClD,KAAK,cAAcC,CAAM,CAAC,GAAIR,CAAI,EAIhD,KAAK,OAAO,IAAI,KAAK,WAAa,KAAO,GAAK;AAAA,GAClC,KAAK,eAAe,KAAK,SAAWM,CAAO,CAAC,IAC5C,KAAK,iBAAiB,KAAK,WAAaC,CAAS,CAAC,IAClD,KAAK,cAAcC,CAAM,CAAC,GAAIR,CAAI,CAClD,OACOU,EAAO,CAAEV,GAAQA,EAAKU,CAAK,CAAG,CACvC,CAGA,eAAeJ,EAASC,EAAWC,EAAQC,EAAOT,EAAM,CAEtD,OAAO,KAAK,aACZ,KAAK,OAAO,KAAK,aAAaM,EAASC,EAAWC,EAAQC,CAAK,EAAGT,CAAI,CACxE,CAGA,aAAaM,EAASC,EAAWC,EAAQC,EAAO,CAC9C,MAAQ,GAAG,KAAK,eAAeH,CAAO,CAAC,IAC/BC,EAAU,WAAa,UACrB,KAAK,eAAeA,CAAS,EAAI,KAAK,kBAAkBA,CAAS,CAAC,IACpE,KAAK,cAAcC,CAAM,CACzB,GAAGC,GAAS,CAACE,GAAeF,CAAK,EAAI,IAAI,KAAK,kBAAkBA,CAAK,CAAC;AAAA,EAAS;AAAA,CAAM,EAC/F,CAGA,cAAcG,EAAO,CACnB,IAAIC,EAAc,GAClB,QAAWC,KAAQF,EACjBC,GAAe,KAAK,aAAaC,EAAK,QAASA,EAAK,UAAWA,EAAK,OAAQA,EAAK,KAAK,EACxF,OAAOD,CACT,CAGA,eAAeE,EAAQ,CACrB,OAAQA,EAAO,SAAU,CACzB,IAAK,OACH,OAAO,KAAK,YAAYA,CAAM,EAEhC,IAAK,UACH,OAAO,KAAK,eAAeA,CAAM,EACnC,QACE,OAAO,KAAK,kBAAkBA,CAAM,CACtC,CACF,CAGA,kBAAkBA,EAAQ,CAExB,GAAIA,EAAO,WAAa,YAKtB,OAHI,KAAK,QAAUnC,GAAe,KAAK,KAAK,OAAQmC,EAAO,KAAK,IAC9DA,EAAS,KAAK,KAAK,KAAK,OAAOA,EAAO,KAAK,CAAC,GAE1CA,aAAkBvB,EACbuB,EAAO,GACTA,EAAO,WAAa,WAAa,IAAIA,EAAO,KAAK,GAAK,KAAKA,EAAO,KAAK,GAEhF,IAAIC,EAAMD,EAAO,MAEb,KAAK,WACPC,EAAM,KAAK,SAAS,WAAWA,CAAG,GAGhC,KAAK,QAAQ,KAAKA,CAAG,IACvBA,EAAMA,EAAI,QAAQ,KAAK,WAAY,KAAK,kBAAkB,GAE5D,IAAMC,EAAc,KAAK,cAAgB,KAAK,cAAgB,KAAK,mBAAmB,GAAG,KAAKD,CAAG,EAAI,KACrG,OAAKC,EAGDA,EAAY,CAAC,EACR,KAAK,YAAYA,EAAY,CAAC,CAAC,EAAIA,EAAY,CAAC,EAElD3B,GAAU,KAAK0B,EAAI,MAAMC,EAAY,CAAC,EAAE,MAAM,CAAC,EAAID,EAAM,IAAIA,CAAG,IAL9D,IAAIA,CAAG,GAMlB,CAGA,eAAeE,EAAS,CAEtB,IAAIC,EAAQD,EAAQ,MAChB,KAAK,QAAQ,KAAKC,CAAK,IACzBA,EAAQA,EAAM,QAAQ,KAAK,WAAY,KAAK,kBAAkB,GAGhE,IAAMC,EAAWF,EAAQ,SACzB,GAAIE,EAAU,CACZ,IAAMC,EAAmBH,EAAQ,UAC3BI,EAAYD,EAAmB,KAAKA,CAAgB,GAAK,GAC/D,MAAO,IAAIF,CAAK,KAAKC,CAAQ,GAAGE,CAAS,EAC3C,CAGA,GAAI,KAAK,WAEP,GAAIJ,EAAQ,SAAS,QAAUxC,GAAI,OACjC,MAAO,IAAIyC,CAAK,QAIlB,QAAQD,EAAQ,SAAS,MAAO,CAChC,KAAKxC,GAAI,OACP,MAAO,IAAIyC,CAAK,IAClB,KAAKzC,GAAI,QACP,GAAIyC,IAAU,QAAUA,IAAU,QAChC,OAAOA,EACT,MACF,KAAKzC,GAAI,QACP,GAAI,aAAa,KAAKyC,CAAK,EACzB,OAAOA,EACT,MACF,KAAKzC,GAAI,QACP,GAAI,kBAAkB,KAAKyC,CAAK,EAC9B,OAAOA,EACT,MACF,KAAKzC,GAAI,OACP,GAAI,yCAAyC,KAAKyC,CAAK,EACrD,OAAOA,EACT,KACF,CAIF,MAAO,IAAIA,CAAK,MAAM,KAAK,kBAAkBD,EAAQ,QAAQ,CAAC,EAChE,CAGA,iBAAiBX,EAAW,CAC1B,OAAQA,EAAU,SAAU,CAC5B,IAAK,YACH,OAAOA,EAAU,QAAU9B,GAAI,KAAO,IAAM,KAAK,kBAAkB8B,CAAS,EAE9E,IAAK,UACH,OAAO,KAAK,eAAeA,CAAS,EACtC,QACE,OAAO,KAAK,kBAAkBA,CAAS,CACzC,CACF,CAGA,cAAcC,EAAQ,CACpB,OAAQA,EAAO,SAAU,CACzB,IAAK,OACH,OAAO,KAAK,YAAYA,CAAM,EAChC,IAAK,UACH,OAAO,KAAK,eAAeA,CAAM,EACnC,QACE,OAAO,KAAK,kBAAkBA,CAAM,CACtC,CACF,CAGA,YAAY,CAAE,QAAAF,EAAS,UAAAC,EAAW,OAAAC,EAAQ,MAAAC,CAAM,EAAG,CAEjD,IAAMc,EAAQ,KAAK,UAAY,IAAM,GACrC,MAAO,MAAMA,CAAK,GAChB,KAAK,eAAejB,CAAO,CAAC,IAC5B,KAAK,iBAAiBC,CAAS,CAAC,IAChC,KAAK,cAAcC,CAAM,CAAC,GAC1BG,GAAeF,CAAK,EAAI,GAAK,IAAI,KAAK,kBAAkBA,CAAK,CAAC,EAAE,GAAGc,CAAK,KAC5E,CAGA,eAAgB,CACd,MAAM,IAAI,MAAM,kDAAkD,CACpE,CAGA,QAAQjB,EAASC,EAAWC,EAAQC,EAAOT,EAAM,CAE3CQ,IAAW,OACb,KAAK,WAAWF,EAAQ,QAASA,EAAQ,UAAWA,EAAQ,OAAQA,EAAQ,MAAOC,CAAS,EAErF,OAAOE,GAAU,WACxB,KAAK,WAAWH,EAASC,EAAWC,EAAQjC,GAAckC,CAAK,EAG/D,KAAK,WAAWH,EAASC,EAAWC,EAAQC,GAASlC,GAAcyB,CAAI,CAC3E,CAGA,SAASY,EAAO,CACd,QAASY,EAAI,EAAGA,EAAIZ,EAAM,OAAQY,IAChC,KAAK,QAAQZ,EAAMY,CAAC,CAAC,CACzB,CAGA,UAAUC,EAAQT,EAAKhB,EAAM,CAC3B,IAAM0B,EAAW,CAAC,EAClBA,EAASD,CAAM,EAAIT,EACnB,KAAK,YAAYU,EAAU1B,CAAI,CACjC,CAGA,YAAY0B,EAAU1B,EAAM,CAE1B,GAAI,CAAC,KAAK,YACR,OAAOA,GAAQA,EAAK,EAGtB,IAAI2B,EAAc,GAClB,QAASF,KAAUC,EAAU,CAC3B,IAAIV,EAAMU,EAASD,CAAM,EACrB,OAAOT,GAAQ,WACjBA,EAAMA,EAAI,OACZW,EAAc,GAEd,KAAK,cAAc,EAEnB,KAAK,YAAYX,CAAG,EAAKS,GAAU,IACnC,KAAK,gBAAgBT,CAAG,EAAI,CAACY,EAAYZ,CAAG,EAAGY,EAAYH,CAAM,CAAC,EAClE,KAAK,OAAO,WAAWA,CAAM,KAAKT,CAAG;AAAA,CAAM,CAC7C,CAGIW,IACF,KAAK,aAAe,GACpB,KAAK,aAAe,MAGtB,KAAK,OAAOA,EAAc;AAAA,EAAO,GAAI3B,CAAI,CAC3C,CAGA,oBAAqB,CACnB,IAAI6B,EAAU,GAAIC,EAAa,GAC/B,QAAWC,KAAa,KAAK,gBAAiB,CAC5C,GAAM,CAACC,EAAYC,CAAa,EAAI,KAAK,gBAAgBF,CAAS,EAClEF,GAAWA,EAAU,IAAIG,CAAU,GAAKA,EACxCF,GAAcA,EAAa,IAAIG,CAAa,GAAKA,CACnD,CACA,OAAO,KAAK,aAAe,IAAI,OAAO,KAAKJ,CAAO,gDACLC,CAAU,GAAG,CAC5D,CAGA,MAAMvB,EAAWC,EAAQ,CACvB,IAAI0B,EAAW3B,EAAW4B,EAAOC,EAWjC,OATI7B,IAAc,OAChB2B,EAAW,CAAC,EAEL3B,EAAU,SACjB2B,EAAW,CAAC,CAAE,UAAW3B,EAAW,OAAQC,CAAO,CAAC,EAE3C,WAAYD,IACrB2B,EAAW,CAAC3B,CAAS,GAEf6B,EAASF,EAAS,OAAQ,CAElC,IAAK,GACH,OAAO,IAAI3C,EAAe,IAAI,EAEhC,IAAK,GAEH,GADA4C,EAAQD,EAAS,CAAC,EACd,EAAEC,EAAM,kBAAkB5C,GAC5B,OAAO,IAAIA,EAAe,KAAK,KAAK,iBAAiB4C,EAAM,SAAS,CAAC,IAC3C,KAAK,cAAcA,EAAM,MAAM,CAAC,IAAI,EAElE,QACE,IAAIE,EAAW,IAEf,QAASb,EAAI,EAAGA,EAAIY,EAAQZ,IAC1BW,EAAQD,EAASV,CAAC,EAEdW,EAAM,UAAU,OAAO5B,CAAS,EAClC8B,GAAY,KAAK,KAAK,cAAcF,EAAM,MAAM,CAAC,IAGjDE,GAAY,IAAIb,EAAI;AAAA,IAAU;AAAA,KAClB,KAAK,iBAAiBW,EAAM,SAAS,CAAC,IACtC,KAAK,cAAcA,EAAM,MAAM,CAAC,GAC5C5B,EAAY4B,EAAM,WAGtB,OAAO,IAAI5C,EAAe,GAAG8C,CAAQ;AAAA,EAAK,CAC5C,CACF,CAGA,KAAKC,EAAU,CACb,IAAMF,EAASE,GAAYA,EAAS,QAAU,EAAGD,EAAW,IAAI,MAAMD,CAAM,EAC5E,QAASZ,EAAI,EAAGA,EAAIY,EAAQZ,IAC1Ba,EAASb,CAAC,EAAI,KAAK,cAAcc,EAASd,CAAC,CAAC,EAC9C,OAAO,IAAIjC,EAAe,IAAI8C,EAAS,KAAK,GAAG,CAAC,GAAG,CACrD,CAGA,IAAIrC,EAAM,CAER,KAAK,cAAc,EAEnB,KAAK,OAAS,KAAK,cAGnB,IAAIuC,EAAavC,IAAS,CAACU,EAAO8B,IAAW,CAAED,EAAa,KAAMvC,EAAKU,EAAO8B,CAAM,CAAG,GACvF,GAAI,KAAK,WACP,GAAI,CAAE,OAAO,KAAK,cAAc,IAAID,CAAU,CAAG,MACnC,CAA6B,CAE7CA,GAAcA,EAAW,CAC3B,CACF,EAGA,SAASrC,GAAkBuC,EAAW,CAEpC,IAAID,EAASvD,GAAkBwD,CAAS,EACxC,OAAID,IAAW,SAETC,EAAU,SAAW,GACvBD,EAASC,EAAU,WAAW,CAAC,EAAE,SAAS,EAAE,EAC5CD,EAAS,UAAU,OAAO,EAAG,EAAIA,EAAO,MAAM,EAAIA,IAIlDA,IAAWC,EAAU,WAAW,CAAC,EAAI,OAAU,KACpCA,EAAU,WAAW,CAAC,EAAI,MAAQ,SAAS,EAAE,EACxDD,EAAS,cAAc,OAAO,EAAG,GAAKA,EAAO,MAAM,EAAIA,IAGpDA,CACT,CAIA,SAASvC,GAA2BwC,EAAW,CAC7C,IAAID,EAASvD,GAAkBwD,CAAS,EACxC,OAAID,IAAW,SACbA,EAASC,EAAU,WAAW,CAAC,EAAE,SAAS,EAAE,EAAE,YAAY,EAC1DD,EAAS,UAAU,OAAO,EAAG,EAAIA,EAAO,MAAM,EAAIA,GAE7CA,CACT,CCteA,IAAME,GAAU,CACd,OAAQ,CAAE,KAAM,SAAU,SAAU,EAAM,EAC1C,KAAM,CAAE,KAAM,OAAQ,SAAU,EAAM,EACtC,SAAU,CAAE,KAAM,YAAa,SAAU,EAAK,EAC9C,OAAQ,CAAE,KAAM,UAAW,SAAU,EAAK,CAC5C,EAGMC,GAAgB,CAAC,MAAO,YAAa,KAAK,EAIzC,SAASC,GAAcC,EAAS,OAAQ,CAC7C,IAAMC,EAAM,OAAOD,CAAM,EAAE,YAAY,EAAE,QAAQ,YAAa,EAAE,EAAE,KAAK,EACpE,QAAQ,0BAA2B,EAAE,EACrC,QAAQ,MAAO,EAAE,EACjB,QAAQ,SAAU,EAAE,EACjBE,EAAWL,GAAQI,CAAG,EAC5B,GAAI,CAACC,EACH,MAAM,IAAI,UAAU,qCAAqCF,CAAM,+DACiB,EAClF,IAAIG,EAGJ,QAAWC,KAAa,OAAOJ,CAAM,EAAE,SAAS,2DAA2D,EACzG,GAA2BI,EAAU,CAAC,EAAG,YAAY,IAAM,UAAW,CACpE,GAAID,IAAY,OACd,MAAM,IAAI,UAAU,kCAAkC,EACxDA,EAAiCC,EAAU,CAAC,EAAG,KAAK,EAAE,QAAQ,WAAY,IAAI,EAAE,QAAQ,SAAU,IAAI,CACxG,CAEF,OAAOD,IAAY,OAAYD,EAAW,CAAE,GAAGA,EAAU,QAAAC,CAAQ,CACnE,CAIO,SAASE,GAAkBF,EAAS,CACzC,OAAO,OAAOA,GAAY,UAAYA,EAAQ,SAAS,WAAW,CACpE,CAIO,SAASG,GAAYH,EAAS,CACnC,OAAOE,GAAkBF,CAAO,EAAIA,EAAQ,MAAM,EAAG,EAAmB,EAAIA,CAC9E,CAIO,SAASI,GAAmBJ,EAASK,EAAYV,GAAe,CACrE,OAAOU,EAAU,SAASL,CAAO,CACnC,CT5CA,IAAqBM,EAArB,KAAuC,CAOrC,YAAYC,EAASC,EAAM,CACzBD,EAAUA,GAAW,CAAC,EACtB,IAAME,EAASC,GAAcH,EAAQ,MAAM,EAC3C,KAAK,SAAWA,EAAQ,SAAWE,EAAO,QAC1C,KAAK,MAAQD,EAGb,KAAK,SAAWD,EAAQ,SAAwEI,EAChG,KAAK,iBAAmB,OAAOJ,EAAQ,iBAAoB,SACzDA,EAAQ,gBAAgB,QAAQ,MAAO,EAAE,EAAI,OAC/C,KAAK,kBAAoB,EACzB,KAAK,mBAAqBK,EAAO,mBACjC,KAAK,UAAYL,EAAQ,WAAa,IAAQM,GAAkB,KAAK,QAAQ,EAC7E,KAAK,OAAS,EAGd,KAAK,SAAW,KAGhB,KAAK,OAAS,KACd,KAAK,UAAY,GACjB,KAAK,QAAU,GACf,KAAK,UAAY,GAGjB,IAAMC,EAAY,CAChB,OAAQL,EAAO,KACf,QAAoF,KAAK,SAEzF,yBAA0B,GAG1B,WAAY,CAAC,SAAS,CACxB,EACIF,EAAQ,UACVO,EAAU,QAAUP,EAAQ,SAC1B,KAAK,WAAa,SACpB,KAAK,cAAc,KAAK,SAAU,EAAI,EACtCO,EAAU,QAAUC,GAAY,KAAK,QAAQ,GAG/C,KAAK,OAAS,IAAI,gBAClB,KAAK,UAAYN,EAAO,SAExB,KAAK,MAAQ,EACb,KAAK,eAAiB,EACtB,IAAIG,EAAOE,CAAS,EAAE,MAAM,KAAK,OAAQ,CACvC,OAAQ,CAACE,EAAOC,EAAMC,IAAa,KAAK,QAAQF,EAAgCC,EAAOC,CAAQ,EAC/F,SAAU,CAACC,EAAQC,IAAS,KAAK,SAAWZ,EAAK,QAAUA,EAAK,OAAOW,EAAQC,CAAI,EACnF,UAAWC,GAAS,KAAK,SAAW,KAAK,UAAUA,CAAK,EACxD,YAAa,IAAM,KAAK,SAAW,KAAK,WAAW,EACnD,QAASC,GAAS,KAAK,SAASA,CAAK,CACvC,CAAC,CACH,CAIA,MAAMC,EAAM,CACN,CAAC,KAAK,SAAW,CAAC,KAAK,WAAaA,EAAK,OAAS,GACpD,KAAK,OAAO,KAAK,OAAQA,CAAI,CACjC,CAGA,KAAM,CACA,CAAC,KAAK,SAAW,CAAC,KAAK,WACzB,KAAK,OAAO,KAAK,KAAK,CAC1B,CAIA,SAASD,EAAO,CACd,IAAME,EAAOF,EAAM,KAAMG,EAAYH,EAAM,OAAS,UAChD,KAAK,WAAa,CAAC,KAAK,UACvBG,EAAYD,IAAS,KAAK,MAAQA,IAAS,KAAK,gBAAkBF,EAAM,OAAS,QACpF,KAAK,MAAM,IAAI,MAAM,gCAAgCE,CAAI,GAAG,CAAC,EAC3DC,IACF,KAAK,eAAiBD,GACxB,KAAK,MAAQA,CACf,CAKA,QAAQR,EAAOC,EAAMC,EAAU,CACzB,KAAK,SAAW,KAAK,YAErBF,EACF,KAAK,MAAMA,CAAK,EACTC,EACP,KAAK,SAASA,CAAI,GAElB,KAAK,UAAY,GACb,KAAK,WAAa,MACpB,KAAK,aAAa,EACpB,KAAK,MAAM,IAAIC,CAAQ,GAE3B,CAGA,SAASD,EAAM,CACb,KAAK,UAAY,GAEb,KAAK,YACPA,EAAO,KAAK,WAAWA,CAAI,GACzB,KAAK,WAAa,OACpB,KAAK,SAAW,CAAC,GACnB,KAAK,SAAS,KAAKA,CAAI,EACnB,KAAK,MAAM,MACb,KAAK,MAAM,KAAKA,EAAM,KAAK,MAAM,CACrC,CAGA,UAAUI,EAAO,CAEf,IAAMK,EAAU,KAAK,UAAYL,EAC3BL,EAAQ,KAAK,cAAcU,CAAO,EACxC,GAAIV,EACF,OAAO,KAAK,MAAMA,CAAK,EACzB,GAAIH,GAAkBa,CAAO,GAAK,CAAC,KAAK,UAAW,CACjD,GAAI,KAAK,UACP,OAAO,KAAK,MAAM,IAAI,MAAM,YAAYL,CAAK,iDAAiD,CAAC,EACjG,KAAK,UAAY,EACnB,CACI,KAAK,MAAM,SACb,KAAK,MAAM,QAAQA,CAAK,CAC5B,CAKA,cAAcA,EAAOM,EAAU,CAC7B,GAAIC,GAAmBb,GAAYM,CAAK,EAAG,KAAK,kBAAkB,EAChE,OAAO,KACT,IAAML,EAAQ,IAAI,MAAM,kCAAkCK,CAAK,GAAG,EAClE,GAAIM,EACF,MAAMX,EACR,OAAOA,CACT,CAEA,YAAa,CACX,GAAI,CAAC,KAAK,UACR,OAAO,KAAK,MAAM,IAAI,MAAM,gCAAgC,KAAK,KAAK,wEACF,CAAC,EAEvE,KAAK,aAAa,CACpB,CAGA,cAAe,CACb,IAAMa,EAAQ,KAAK,UAAY,CAAC,EAChC,KAAK,SAAW,KAChB,KAAK,OAAS,KACd,KAAK,MAAM,QAAQA,EAAO,KAAK,QAAQ,CACzC,CAGA,MAAMb,EAAO,CACX,KAAK,QAAU,GACf,KAAK,SAAW,KAChB,KAAK,MAAM,MAAMA,CAAK,CACxB,CAMA,WAAWC,EAAM,CACf,IAAMa,EAAU,KAAK,WAAWb,EAAK,OAAO,EACtCc,EAAY,KAAK,WAAWd,EAAK,SAAS,EAC1Ce,EAAS,KAAK,WAAWf,EAAK,MAAM,EACpCgB,EAAQ,KAAK,WAAWhB,EAAK,KAAK,EACxC,OAAOa,IAAYb,EAAK,SAAWc,IAAcd,EAAK,WAC/Ce,IAAWf,EAAK,QAAUgB,IAAUhB,EAAK,MAC9CA,EAAO,KAAK,SAAS,KAAKa,EAASC,EAAWC,EAAQC,CAAK,CAC/D,CAKA,WAAWb,EAAM,CACf,GAAIA,EAAK,WAAa,YAAa,CACjC,IAAMc,EAAQ,KAAK,SAAW,KAAK,OAAS,IAAI,KAC5CC,EAASD,EAAM,IAAId,EAAK,KAAK,EACjC,OAAKe,IACHA,EAAS,KAAK,mBAAqB,OAAY,KAAK,SAAS,UAAU,EACrE,KAAK,SAAS,UAAU,GAAG,KAAK,gBAAgB,GAAG,KAAK,mBAAmB,EAAE,EAC/ED,EAAM,IAAId,EAAK,MAAOe,CAAM,GAEmBA,CACnD,CACA,OAAOf,EAAK,WAAa,OACvB,KAAK,WAAqDA,CAAM,EAAMA,CAC1E,CACF,EUrMA,IAAMgB,GAAN,cAAwBC,EAAO,CAE7B,cAAe,CACb,KAAK,cAAc,EACnB,KAAK,OAAO,KAAK,UAAY;AAAA,EAAc;AAAA,CAAc,CAC3D,CACF,EAMqBC,EAArB,KAAmC,CASjC,YAAYC,EAAcC,EAAS,CAOjC,GANID,GAAgB,OAA8BA,EAAc,OAAU,aACxEC,EAAkCD,EAAeA,EAAe,MAClEC,EAAUA,GAAW,CAAC,EACtB,KAAK,QAAUC,GAAcD,EAAQ,MAAM,EAC3C,KAAK,SAAWA,EAChB,KAAK,SAAWA,EAAQ,SAAW,KAAK,QAAQ,SAAW,eACvD,CAACE,GAAkB,KAAK,QAAQ,GAAK,CAACC,GAAmBC,GAAY,KAAK,QAAQ,CAAC,EACrF,MAAM,IAAI,UAAU,sCAAsC,KAAK,QAAQ,GAAG,EAE5E,KAAK,QAAU,GACf,KAAK,QAAoDL,EACzD,KAAK,WAAa,CAACA,GAAgBC,EAAQ,MAAQ,GACnD,KAAK,SAAW,EAGhB,KAAK,SAAW,CAAC,EAGjB,KAAK,OAAS,KACd,KAAK,SAAW,GAChB,KAAK,OAAS,GACd,KAAK,MAAQ,GACb,KAAK,OAAS,EACd,KAAK,UAAY,OAAO,OAAO,CAAC,EAAGA,EAAQ,QAAQ,EAGnD,KAAK,aAAe,CAAC,EAGrB,KAAK,MAAQ,CAAE,MAAO,CAACK,EAAOC,EAAUC,IAAS,KAAK,OAAOF,EAAOE,CAAI,CAAE,EAG1E,KAAK,QAAU,IACjB,CAMA,WAAWC,EAAOD,EAAM,CACtB,OAAO,KAAK,UAAUA,EAAM,IAAM,CAChC,GAAI,KAAK,MAAO,MAAM,IAAI,MAAM,2BAA2B,EAC3D,KAAK,OAAO,EACZ,QAAWE,KAAQD,GAAS,CAAC,EAAG,KAAK,KAAKC,CAAI,EAC9C,KAAK,OAAO,CACd,CAAC,CACH,CAIA,aAAaF,EAAM,CACjB,OAAO,KAAK,UAAUA,EAAM,IAAM,CAChC,GAAI,KAAK,MAAO,MAAM,IAAI,MAAM,2BAA2B,EAC3D,KAAK,OAAO,CACd,CAAC,CACH,CAQA,QAAQE,EAAMC,EAAcH,EAAM,CAChC,OAAI,OAAOG,GAAiB,aAAYH,EAAOG,EAAcA,EAAe,QACrE,KAAK,UAAUH,EAAM,IAAM,CACEG,GAAiB,KAAM,KAAK,QAAQA,CAAY,EACxE,KAAK,OAAO,KAAK,OAAO,EAClC,KAAK,KAAKD,CAAI,CAChB,CAAC,CACH,CAIA,WAAWF,EAAM,CACf,OAAO,KAAK,UAAUA,EAAM,IAAM,CAC3B,KAAK,OAAO,KAAK,OAAO,EAC7B,KAAK,OAAO,CACd,CAAC,CACH,CAOA,UAAUI,EAAQC,EAAKL,EAAM,CAC3B,OAAO,KAAK,UAAUA,EAAM,IAAM,CAC5B,CAAC,KAAK,QAAQ,UAAY,KAAK,UAAUI,CAAM,KAAO,OAAOC,GAAQ,SAAWA,EAAMA,EAAI,SAC5F,KAAK,aAAaD,CAAM,EAAI,OAAOC,GAAQ,SAAWA,EAAMA,EAAI,MACpE,CAAC,CACH,CAWA,IAAIL,EAAM,CAER,OAAI,KAAK,OACA,OAAOA,GAAS,WAAaA,EAAK,IAAI,EAAI,QAAQ,QAAQ,GACnE,KAAK,OAAO,EACR,KAAK,OACP,KAAK,OAAO,EACV,OAAOA,GAAS,WACX,KAAK,QAAQA,CAAI,EACnB,IAAI,QAAQ,CAACM,EAASC,IAAW,KAAK,QAAQ,CAACC,EAAOC,IAAWD,EAAQD,EAAOC,CAAK,EAAIF,EAAQG,CAAM,CAAC,CAAC,EAClH,CAQA,UAAUT,EAAMU,EAAQ,CACtB,GAAI,KAAK,OACP,KAAK,OAAS,KAAK,QAAU,IAAI,MAAM,wBAAwB,MAE/D,IAAI,CACFA,EAAO,CACT,OACOF,EAAO,CACZ,KAAK,OAAS,KAAK,QAAgCA,CACrD,CACF,OAAI,OAAOR,GAAS,WACX,KAAK,aAAaA,CAAI,EACxB,IAAI,QAAQ,CAACM,EAASC,IAAW,KAAK,aAAaC,GAASA,EAAQD,EAAOC,CAAK,EAAIF,EAAQ,CAAC,CAAC,CACvG,CAIA,QAAQK,EAAU,CAChB,KAAK,OAAS,GACd,KAAK,aAAaH,GAAS,KAAK,WAAWA,EAAOG,CAAQ,CAAC,CAC7D,CAIA,WAAWH,EAAOG,EAAU,CAC1B,GAAIH,GAAS,CAAC,KAAK,WACjB,OAAOG,EAASH,CAAK,EACvB,GAAI,CAAC,KAAK,QACR,OAAOG,EAAS,KAAM,KAAK,OAAO,EACpC,GAAI,CACgC,KAAK,QAAU,IAAIC,GAAYD,EAASC,CAAQ,CAAC,CACrF,OACOA,EAAU,CACfD,EAA+BC,CAAS,CAC1C,CACF,CAIA,aAAaZ,EAAM,CACb,KAAK,WAAa,EACpB,KAAK,QAAQA,CAAI,EAEjB,KAAK,SAAS,KAAKA,CAAI,CAC3B,CAGA,QAAQA,EAAM,CACZ,IAAMQ,EAAQ,KAAK,OACnB,KAAK,OAAS,KACdR,EAAKQ,GAAS,IAAI,CACpB,CAIA,OAAOV,EAAOE,EAAM,CAClB,GAAI,CAAC,KAAK,QACR,YAAK,SAAWF,EACTE,GAAQA,EAAK,EAEtB,KAAK,WACL,GAAI,CACF,KAAK,QAAQ,MAAMF,EAAO,OAAQU,GAAS,KAAK,SAASA,EAAOR,CAAI,CAAC,CACvE,OACOQ,EAAO,CACZ,KAAK,SAA+BA,EAAQR,CAAI,CAClD,CACF,CAKA,SAASQ,EAAOR,EAAM,CACpB,KAAK,WACL,KAAK,OAAS,KAAK,QAAUQ,GAAS,KACtCR,GAAQA,EAAKQ,CAAK,EACd,KAAK,WAAa,GACpB,KAAK,SAAS,OAAO,CAAC,EAAE,QAAQG,GAAY,KAAK,QAAQA,CAAQ,CAAC,CACtE,CAIA,QAAS,CACP,GAAI,CAAC,KAAK,SAAU,CAClB,KAAK,SAAW,GAChB,IAAMlB,EAAU,KAAK,SACrB,KAAK,QAAU,IAAIJ,GAAU,KAAK,MAAO,CACvC,OAAQ,KAAK,QAAQ,KACrB,IAAK,GACL,QAASI,EAAQ,eAAiB,GAAQ,OAAY,KAAK,SAC3D,QAASA,EAAQ,QACjB,UAAWA,EAAQ,UACnB,SAAU,KAAK,SACjB,CAAC,CACH,CACF,CAGA,QAAS,CACP,KAAK,OAAO,EACZ,IAAMoB,EAAmC,KAAK,QAC9C,QAAWT,KAAU,OAAO,KAAK,KAAK,YAAY,EAAG,CACnD,IAAMC,EAA6B,KAAK,aAAaD,CAAM,EAC3DS,EAAO,UAAUT,EAAQC,CAAG,EAC5B,KAAK,UAAUD,CAAM,EAAIC,CAC3B,CACA,KAAK,aAAe,CAAC,EACrB,KAAK,MAAQ,GACb,KAAK,QACP,CAGA,KAAKH,EAAM,CAET,IAAMY,EAASN,GAASA,IAAU,KAAK,OAAS,KAAK,QAAUA,GACpC,KAAK,QAAU,QAAQN,EAAK,QAASA,EAAK,UAAWA,EAAK,OAAQA,EAAK,MAAOY,CAAM,CACjH,CACA,QAAS,CACP,KAAK,MAAQ,GACc,KAAK,QAAU,aAAa,CACzD,CAIA,QAAQC,EAAO,CACb,IAAMC,EAAU,KAAK,OAAS,EAC9B,GAAI,CAAC,OAAO,UAAUD,CAAK,GAAKA,EAAQ,EAAG,MAAM,IAAI,WAAW,0BAA0BA,CAAK,EAAE,EACjG,GAAI,OAAK,OAASA,IAAUC,GAC5B,IAAID,GAASC,EAAS,MAAM,IAAI,WAAW,iBAAiBD,CAAK,4CAA4CC,CAAO,EAAE,EAEtH,IADI,KAAK,OAAO,KAAK,OAAO,EACrB,KAAK,OAASD,GACnB,KAAK,OAAO,EACZ,KAAK,OAAO,EAEd,KAAK,OAAO,EACd,CACF,EAMO,SAASE,GAAcC,EAAUzB,EAAS,CAC/C,IAAMoB,EAAS,IAAItB,EAAcE,CAAO,EAGlC0B,EAAS,CAAC,EACZC,EAAS,GAGb,SAASC,EAAQb,EAAO,CAClBA,GACFW,EAAO,KAAKX,CAAK,CACrB,CACA,QAAWc,KAAWJ,EACpBL,EAAO,WAAWS,EAASD,CAAO,EAEpC,GADAR,EAAO,IAAI,CAACL,EAAOC,KAAYY,EAAQb,CAAK,EAAGY,EAAgCX,EAAQ,EACnFU,EAAO,OAAS,EAClB,MAAMA,EAAO,CAAC,EAChB,OAAOC,CACT,CCzTA,IAAAG,GAA8B,WAI9B,IAAqBC,GAArB,KAAmC,CAEjC,YAAYC,EAAS,CAEnB,KAAK,SAAWA,GAAW,CAAC,EAG5B,KAAK,YAAkE,CAAC,CAAE,CAC5E,CAGA,YAAYC,EAAM,CAChB,OAAO,IAAIC,EAAkB,KAAK,SAAUD,CAAI,CAClD,CA0BA,MAAME,EAAOC,EAAW,CAClB,OAAOA,GAAc,aACvBA,EAAY,CAAE,UAAWA,CAAU,GAGrC,IAAMC,EAAWD,EAAY,KAAO,CAAC,EAGjCE,EAAQ,KACZF,EAAYA,GAAa,CAAC,EAG1B,IAAMH,EAAO,CACX,QAAS,CAACM,EAAOC,IAAUJ,EAAU,UAAYA,EAAU,UAAU,KAAMG,EAAO,OAAWC,CAAK,EAAIH,GAAYA,EAAS,KAAKE,CAAK,EACrI,IAAKE,GAAYL,EAAU,WAAaA,EAAU,UAAU,KAAM,KAAMK,CAAQ,EAChF,MAAOC,GAAK,CACVJ,EAAQI,EACRN,EAAU,WAAaA,EAAU,UAAUM,EAAG,IAAI,EAClDN,EAAU,QAAUA,EAAU,OAAOM,CAAC,CACxC,CACF,EACIN,EAAU,SACZH,EAAK,KAAO,CAACU,EAAMH,IAAUJ,EAAU,SAAS,KAAMO,EAAMH,CAAK,GAC/DJ,EAAU,WACZH,EAAK,OAASG,EAAU,UACtBA,EAAU,YACZH,EAAK,QAAUG,EAAU,WAC3B,IAAMQ,EAAO,KAAK,YAAYX,CAAI,EAGlC,GAAI,OAAOE,GAAU,SAAU,CAG7B,GAFAS,EAAK,MAAMT,CAAK,EAChBS,EAAK,IAAI,EACLN,GAASD,EACX,MAAMC,EACR,OAAOD,GAAY,MACrB,CAGA,IAAMQ,EAAU,IAAI,iBAAc,MAAM,EACxCV,EAAM,GAAG,OAAQW,GAASF,EAAK,MAAM,OAAOE,GAAU,SAAWA,EAAQD,EAAQ,MAAMC,CAAK,CAAC,CAAC,EAC9FX,EAAM,GAAG,MAAO,IAAM,CACpBS,EAAK,MAAMC,EAAQ,IAAI,CAAC,EACxBD,EAAK,IAAI,CACX,CAAC,EACDT,EAAM,GAAG,QAASO,GAAKT,EAAK,MAAMS,CAAC,CAAC,CAEtC,CACF,EAQO,SAASK,GAAcZ,EAAOH,EAAS,CAC5C,OAAO,IAAID,GAAcC,CAAO,EAAE,MAAMG,CAAK,CAC/C,CC3FO,IAAMa,GAAN,cAAkC,eAAgB,CAEvD,YAAYC,EAAU,CAAC,EAAG,CACxB,IAAMC,EAAU,IAAI,YAGhBC,EACJ,MAAM,CACJ,MAAMC,EAAY,CAChBD,EAAO,IAAIE,EAAkBJ,EAAS,CACpC,QAASK,GAASF,EAAW,QAAQE,CAAK,EAC1C,IAAK,IAAM,CAAC,EACZ,MAAOC,GAAS,CAAE,MAAMA,CAAO,EAC/B,OAAQN,EAAQ,SAChB,QAASA,EAAQ,SACnB,CAAC,CACH,EACA,UAAUO,EAAO,CACfL,EAAK,MAAM,OAAOK,GAAU,SAAWA,EAAQN,EAAQ,OAAOM,EAAO,CAAE,OAAQ,EAAK,CAAC,CAAC,CACxF,EACA,OAAQ,CACNL,EAAK,MAAMD,EAAQ,OAAO,CAAC,EAC3BC,EAAK,IAAI,CACX,CACF,CAAC,CACH,CACF,EAIaM,GAAN,cAAkC,eAAgB,CAEvD,YAAYR,EAAS,CAEnB,IAAIS,EACJ,MAAM,CACJ,MAAMN,EAAY,CAEhB,IAAMO,EAAS,CAAE,MAAO,CAACH,EAAOI,EAAUC,IAAS,CAAET,EAAW,QAAQI,CAAK,EAAGK,EAAK,CAAG,CAAE,EAC1FH,EAAS,IAAII,EAAcH,EAAQ,CAAE,GAAGV,EAAS,IAAK,EAAM,CAAC,CAC/D,EACA,UAAUc,EAAS,CACjB,OAAO,MAAM,QAAQA,CAAO,EAAIL,EAAO,WAAWK,CAAO,EAAIL,EAAO,QAAQK,EAAQ,KAAMA,EAAQ,YAAY,CAChH,EACA,OAAQ,CACN,OAAOL,EAAO,IAAI,EAAE,KAAK,IAAM,CAAC,CAAC,CACnC,CACF,CAAC,CACH,CACF",
|
|
6
|
+
"names": ["require_events", "__commonJSMin", "exports", "module", "R", "ReflectApply", "target", "receiver", "args", "ReflectOwnKeys", "ProcessEmitWarning", "warning", "NumberIsNaN", "value", "EventEmitter", "once", "defaultMaxListeners", "checkListener", "listener", "arg", "n", "_getMaxListeners", "that", "type", "i", "doError", "events", "er", "err", "handler", "len", "listeners", "arrayClone", "_addListener", "prepend", "m", "existing", "w", "onceWrapper", "_onceWrap", "state", "wrapped", "list", "position", "originalListener", "spliceOne", "keys", "key", "_listeners", "unwrap", "evlistener", "unwrapListeners", "emitter", "listenerCount", "arr", "copy", "index", "ret", "name", "resolve", "reject", "errorListener", "resolver", "eventTargetAgnosticAddListener", "addErrorHandlerIfEventEmitter", "flags", "wrapListener", "require_base64_js", "__commonJSMin", "exports", "byteLength", "toByteArray", "fromByteArray", "lookup", "revLookup", "Arr", "code", "i", "len", "getLens", "b64", "validLen", "placeHoldersLen", "lens", "_byteLength", "tmp", "arr", "curByte", "tripletToBase64", "num", "encodeChunk", "uint8", "start", "end", "output", "extraBytes", "parts", "maxChunkLength", "len2", "require_ieee754", "__commonJSMin", "exports", "buffer", "offset", "isLE", "mLen", "nBytes", "e", "m", "eLen", "eMax", "eBias", "nBits", "i", "d", "s", "value", "c", "rt", "require_buffer", "__commonJSMin", "exports", "base64", "ieee754", "customInspectSymbol", "Buffer", "SlowBuffer", "K_MAX_LENGTH", "typedArraySupport", "arr", "proto", "createBuffer", "length", "buf", "arg", "encodingOrOffset", "allocUnsafe", "from", "value", "fromString", "fromArrayView", "isInstance", "fromArrayBuffer", "valueOf", "b", "fromObject", "assertSize", "size", "alloc", "fill", "encoding", "checked", "string", "byteLength", "actual", "fromArrayLike", "array", "i", "arrayView", "copy", "byteOffset", "obj", "len", "numberIsNaN", "a", "x", "y", "list", "buffer", "pos", "mustMatch", "loweredCase", "utf8ToBytes", "base64ToBytes", "slowToString", "start", "end", "hexSlice", "utf8Slice", "asciiSlice", "latin1Slice", "base64Slice", "utf16leSlice", "swap", "n", "m", "str", "max", "target", "thisStart", "thisEnd", "thisCopy", "targetCopy", "bidirectionalIndexOf", "val", "dir", "arrayIndexOf", "indexSize", "arrLength", "valLength", "read", "foundIndex", "found", "j", "hexWrite", "offset", "remaining", "strLen", "parsed", "utf8Write", "blitBuffer", "asciiWrite", "asciiToBytes", "base64Write", "ucs2Write", "utf16leToBytes", "res", "firstByte", "codePoint", "bytesPerSequence", "secondByte", "thirdByte", "fourthByte", "tempCodePoint", "decodeCodePointsArray", "MAX_ARGUMENTS_LENGTH", "codePoints", "ret", "out", "hexSliceLookupTable", "bytes", "newBuf", "checkOffset", "ext", "noAssert", "mul", "defineBigIntMethod", "validateNumber", "first", "last", "boundsError", "lo", "hi", "checkInt", "min", "maxBytes", "wrtBigUInt64LE", "checkIntBI", "wrtBigUInt64BE", "limit", "sub", "checkIEEE754", "writeFloat", "littleEndian", "writeDouble", "targetStart", "code", "errors", "E", "sym", "getMessage", "Base", "name", "range", "input", "msg", "received", "addNumericalSeparator", "checkBounds", "type", "INVALID_BASE64_RE", "base64clean", "units", "leadSurrogate", "byteArray", "c", "src", "dst", "alphabet", "table", "i16", "fn", "BufferBigIntNotDefined", "require_safe_buffer", "__commonJSMin", "exports", "module", "buffer", "Buffer", "copyProps", "src", "dst", "key", "SafeBuffer", "arg", "encodingOrOffset", "length", "size", "fill", "encoding", "buf", "require_string_decoder", "__commonJSMin", "exports", "Buffer", "isEncoding", "encoding", "_normalizeEncoding", "enc", "retried", "normalizeEncoding", "nenc", "StringDecoder", "nb", "utf16Text", "utf16End", "utf8FillLast", "base64Text", "base64End", "simpleWrite", "simpleEnd", "buf", "r", "i", "utf8End", "utf8Text", "utf8CheckByte", "byte", "utf8CheckIncomplete", "self", "j", "utf8CheckExtraBytes", "p", "total", "end", "c", "n", "import_events", "RDF", "XSD", "SWAP", "IRIs_default", "xsd", "IRIs_default", "SPACE", "TAB", "LF", "CR", "HASH", "DOT", "COLON", "ZERO", "NINE", "PERCENT", "BACKSLASH", "isWhitespace", "charCode", "asciiDelimiters", "char", "isDelimiter", "canEndName", "input", "pos", "inputFinished", "stringEscapeReplacements", "localNameEscapeReplacements", "illegalIriChars", "PREFIX_START", "LOCAL_START", "NAME_CHAR", "LOCAL_CHAR", "LOCAL_ESCAPE", "asciiNameClasses", "letter", "nameChar", "nameCharLength", "charClass", "low", "isLocalEscape", "isHexDigit", "skipPrefix", "length", "next", "skipLocalName", "end", "skipPrefixedName", "colon", "isValidCodePoint", "lineModeRegExps", "invalidRegExp", "nonWhitespace", "execAt", "regExp", "testAt", "execAtEnd", "isSeparatorCode", "code", "reservedWords", "MIN_RESCAN_LENGTH", "N3Lexer", "options", "key", "name", "callback", "currentLineLength", "separatorLength", "comment", "commentLength", "emitComment", "indentationLength", "following", "reportSyntaxError", "emitToken", "line", "firstChar", "type", "value", "prefix", "match", "matchLength", "lexicalLength", "finalLineLength", "inconclusive", "tripleQuoted", "start", "token", "self", "verb", "item", "replacements", "backslash", "result", "escapedChar", "replacement", "i", "digit", "quote", "openingLength", "opening", "closingPos", "backslashCount", "raw", "lines", "lineCount", "callbackError", "error", "thrown", "issue", "message", "err", "tokenization", "tokens", "e", "t", "decoder", "retryLength", "data", "rest", "rdf", "xsd", "IRIs_default", "DEFAULTGRAPH", "_blankNodeCounter", "EMPTY_IRI_ID", "DataFactory", "namedNode", "blankNode", "variable", "literal", "defaultGraph", "quad", "fromTerm", "fromQuad", "N3DataFactory_default", "Term", "_Term", "id", "other", "NamedNode", "iri", "EMPTY_IRI_ID", "Literal", "_Literal", "atPos", "dirPos", "endPos", "dtPos", "char", "xsd", "rdf", "BlankNode", "name", "Variable", "DefaultGraph", "DEFAULTGRAPH", "Quad", "Term", "subject", "predicate", "object", "graph", "DEFAULTGRAPH", "other", "namedNode", "iri", "NamedNode", "blankNode", "name", "BlankNode", "_blankNodeCounter", "literal", "value", "languageOrDataType", "Literal", "datatype", "xsd", "variable", "Variable", "defaultGraph", "DEFAULTGRAPH", "quad", "subject", "predicate", "object", "graph", "Quad", "fromTerm", "term", "Term", "fromQuad", "inQuad", "blankNodePrefix", "dotSegments", "pathDotSegments", "N3Parser", "_N3Parser", "options", "initDataFactory", "format", "isTurtle", "isTriG", "isNTriples", "isNQuads", "isN3", "isLineMode", "iri", "name", "N3Lexer", "maxTripleTermDepth", "baseIRI", "fragmentPos", "queryPos", "path", "base", "type", "subject", "predicate", "token", "graph", "object", "context", "undoChanges", "quantifier", "value", "prefix", "stack", "pathable", "placeholder", "empty", "item", "list", "next", "previousList", "parent", "component", "literal", "readCb", "datatype", "IRIs_default", "t", "listItem", "term", "completed", "reader", "formula", "inversePredicate", "resetInversePredicate", "prefixNode", "version", "entity", "afterPath", "position", "quad", "reifier", "tripleTerm", "parentGraph", "contextStack", "message", "suffix", "err", "noop", "length", "result", "i", "pathStart", "segmentStart", "input", "quadCallback", "prefixCallback", "versionCallback", "onQuad", "onPrefix", "onComment", "onVersion", "onDirective", "onToken", "onTokenEnd", "readGrammarToken", "readToken", "consumeToken", "error", "quads", "e", "lexer", "processNextToken", "map", "changes", "parser", "factory", "N3DataFactory_default", "isDefaultGraph", "term", "escapeRegex", "regex", "BASE_UNSUPPORTED", "SUFFIX_SUPPORTED", "CURRENT", "PARENT", "QUERY", "FRAGMENT", "BaseIRI", "_BaseIRI", "base", "scheme", "regexHead", "escapeRegex", "regexTail", "segments", "segmenter", "segment", "query", "fragment", "last", "i", "iri", "match", "length", "parentPath", "suffix", "DEFAULTGRAPH", "N3DataFactory_default", "rdf", "xsd", "IRIs_default", "hasOwnProperty", "escape", "escapeAll", "canonicalEscape", "canonicalEscapeAll", "escapedCharacters", "invalidVersionLabel", "localNameStart", "localNameChar", "percent", "localName", "SerializedTerm", "Term", "other", "N3Writer", "outputStream", "options", "output", "chunk", "encoding", "done", "canonicalCharacterReplacer", "characterReplacer", "BaseIRI", "string", "callback", "subject", "predicate", "object", "graph", "error", "isDefaultGraph", "quads", "quadsString", "quad", "entity", "iri", "prefixMatch", "literal", "value", "language", "literalDirection", "direction", "space", "i", "prefix", "prefixes", "hasPrefixes", "escapeRegex", "IRIlist", "prefixList", "prefixIRI", "IRIpattern", "prefixPattern", "children", "child", "length", "contents", "elements", "singleDone", "result", "character", "FORMATS", "BASE_VERSIONS", "resolveFormat", "format", "key", "resolved", "version", "parameter", "isMessagesVersion", "baseVersion", "isSupportedVersion", "supported", "MessageParserCore", "options", "sink", "format", "resolveFormat", "N3DataFactory_default", "N3Parser", "isMessagesVersion", "n3Options", "baseVersion", "error", "quad", "prefixes", "prefix", "term", "label", "token", "text", "line", "delimiter", "version", "throwing", "isSupportedVersion", "quads", "subject", "predicate", "object", "graph", "scope", "scoped", "LogWriter", "N3Writer", "MessageWriter", "outputStream", "options", "resolveFormat", "isMessagesVersion", "isSupportedVersion", "baseVersion", "chunk", "encoding", "done", "quads", "quad", "messageIndex", "prefix", "iri", "resolve", "reject", "error", "result", "action", "callback", "endError", "writer", "record", "index", "current", "writeMessages", "messages", "errors", "output", "collect", "message", "import_string_decoder", "MessageParser", "options", "sink", "MessageParserCore", "input", "callbacks", "messages", "error", "quads", "index", "prefixes", "e", "quad", "core", "decoder", "chunk", "parseMessages", "MessageStreamParser", "options", "decoder", "core", "controller", "MessageParserCore", "quads", "error", "chunk", "MessageStreamWriter", "writer", "output", "encoding", "done", "MessageWriter", "message"]
|
|
7
7
|
}
|