1
0
mirror of https://github.com/sehugg/8bitworkshop.git synced 2024-05-28 23:41:32 +00:00
8bitworkshop/gen/server/server.js.map

8 lines
1.6 MiB

{
"version": 3,
"sources": ["../../node_modules/depd/index.js", "../../node_modules/bytes/index.js", "../../node_modules/content-type/index.js", "../../node_modules/setprototypeof/index.js", "../../node_modules/statuses/index.js", "../../node_modules/inherits/inherits_browser.js", "../../node_modules/inherits/inherits.js", "../../node_modules/toidentifier/index.js", "../../node_modules/http-errors/index.js", "../../node_modules/body-parser/node_modules/ms/index.js", "../../node_modules/body-parser/node_modules/debug/src/debug.js", "../../node_modules/body-parser/node_modules/debug/src/browser.js", "../../node_modules/body-parser/node_modules/debug/src/node.js", "../../node_modules/body-parser/node_modules/debug/src/index.js", "../../node_modules/destroy/index.js", "../../node_modules/safer-buffer/safer.js", "../../node_modules/raw-body/node_modules/iconv-lite/lib/bom-handling.js", "../../node_modules/raw-body/node_modules/iconv-lite/encodings/internal.js", "../../node_modules/raw-body/node_modules/iconv-lite/encodings/utf16.js", "../../node_modules/raw-body/node_modules/iconv-lite/encodings/utf7.js", "../../node_modules/raw-body/node_modules/iconv-lite/encodings/sbcs-codec.js", "../../node_modules/raw-body/node_modules/iconv-lite/encodings/sbcs-data.js", "../../node_modules/raw-body/node_modules/iconv-lite/encodings/sbcs-data-generated.js", "../../node_modules/raw-body/node_modules/iconv-lite/encodings/dbcs-codec.js", "../../node_modules/raw-body/node_modules/iconv-lite/encodings/dbcs-data.js", "../../node_modules/raw-body/node_modules/iconv-lite/encodings/index.js", "../../node_modules/raw-body/node_modules/iconv-lite/lib/streams.js", "../../node_modules/raw-body/node_modules/iconv-lite/lib/extend-node.js", "../../node_modules/raw-body/node_modules/iconv-lite/lib/index.js", "../../node_modules/unpipe/index.js", "../../node_modules/raw-body/index.js", "../../node_modules/body-parser/node_modules/iconv-lite/lib/bom-handling.js", "../../node_modules/body-parser/node_modules/iconv-lite/encodings/internal.js", "../../node_modules/body-parser/node_modules/iconv-lite/encodings/utf16.js", "../../node_modules/body-parser/node_modules/iconv-lite/encodings/utf7.js", "../../node_modules/body-parser/node_modules/iconv-lite/encodings/sbcs-codec.js", "../../node_modules/body-parser/node_modules/iconv-lite/encodings/sbcs-data.js", "../../node_modules/body-parser/node_modules/iconv-lite/encodings/sbcs-data-generated.js", "../../node_modules/body-parser/node_modules/iconv-lite/encodings/dbcs-codec.js", "../../node_modules/body-parser/node_modules/iconv-lite/encodings/dbcs-data.js", "../../node_modules/body-parser/node_modules/iconv-lite/encodings/index.js", "../../node_modules/body-parser/node_modules/iconv-lite/lib/streams.js", "../../node_modules/body-parser/node_modules/iconv-lite/lib/extend-node.js", "../../node_modules/body-parser/node_modules/iconv-lite/lib/index.js", "../../node_modules/ee-first/index.js", "../../node_modules/on-finished/index.js", "../../node_modules/body-parser/lib/read.js", "../../node_modules/media-typer/index.js", "../../node_modules/mime-db/index.js", "../../node_modules/mime-types/index.js", "../../node_modules/type-is/index.js", "../../node_modules/body-parser/lib/types/json.js", "../../node_modules/body-parser/lib/types/raw.js", "../../node_modules/body-parser/lib/types/text.js", "../../node_modules/has-symbols/shams.js", "../../node_modules/has-symbols/index.js", "../../node_modules/function-bind/implementation.js", "../../node_modules/function-bind/index.js", "../../node_modules/has/src/index.js", "../../node_modules/get-intrinsic/index.js", "../../node_modules/call-bind/index.js", "../../node_modules/call-bind/callBound.js", "../../node_modules/object-inspect/util.inspect.js", "../../node_modules/object-inspect/index.js", "../../node_modules/side-channel/index.js", "../../node_modules/qs/lib/formats.js", "../../node_modules/qs/lib/utils.js", "../../node_modules/qs/lib/stringify.js", "../../node_modules/qs/lib/parse.js", "../../node_modules/qs/lib/index.js", "../../node_modules/body-parser/lib/types/urlencoded.js", "../../node_modules/body-parser/index.js", "../../node_modules/merge-descriptors/index.js", "../../node_modules/finalhandler/node_modules/ms/index.js", "../../node_modules/finalhandler/node_modules/debug/src/debug.js", "../../node_modules/finalhandler/node_modules/debug/src/browser.js", "../../node_modules/finalhandler/node_modules/debug/src/node.js", "../../node_modules/finalhandler/node_modules/debug/src/index.js", "../../node_modules/encodeurl/index.js", "../../node_modules/escape-html/index.js", "../../node_modules/parseurl/index.js", "../../node_modules/finalhandler/index.js", "../../node_modules/express/node_modules/ms/index.js", "../../node_modules/express/node_modules/debug/src/debug.js", "../../node_modules/express/node_modules/debug/src/browser.js", "../../node_modules/express/node_modules/debug/src/node.js", "../../node_modules/express/node_modules/debug/src/index.js", "../../node_modules/array-flatten/array-flatten.js", "../../node_modules/path-to-regexp/index.js", "../../node_modules/express/lib/router/layer.js", "../../node_modules/methods/index.js", "../../node_modules/express/lib/router/route.js", "../../node_modules/utils-merge/index.js", "../../node_modules/express/lib/router/index.js", "../../node_modules/express/lib/middleware/init.js", "../../node_modules/express/lib/middleware/query.js", "../../node_modules/express/lib/view.js", "../../node_modules/safe-buffer/index.js", "../../node_modules/content-disposition/index.js", "../../node_modules/send/node_modules/debug/node_modules/ms/index.js", "../../node_modules/send/node_modules/debug/src/debug.js", "../../node_modules/send/node_modules/debug/src/browser.js", "../../node_modules/send/node_modules/debug/src/node.js", "../../node_modules/send/node_modules/debug/src/index.js", "../../node_modules/etag/index.js", "../../node_modules/fresh/index.js", "../../node_modules/mime/mime.js", "../../node_modules/send/node_modules/ms/index.js", "../../node_modules/range-parser/index.js", "../../node_modules/send/index.js", "../../node_modules/forwarded/index.js", "../../node_modules/ipaddr.js/lib/ipaddr.js", "../../node_modules/proxy-addr/index.js", "../../node_modules/express/lib/utils.js", "../../node_modules/express/lib/application.js", "../../node_modules/negotiator/lib/charset.js", "../../node_modules/negotiator/lib/encoding.js", "../../node_modules/negotiator/lib/language.js", "../../node_modules/negotiator/lib/mediaType.js", "../../node_modules/negotiator/index.js", "../../node_modules/accepts/index.js", "../../node_modules/express/lib/request.js", "../../node_modules/cookie-signature/index.js", "../../node_modules/cookie/index.js", "../../node_modules/vary/index.js", "../../node_modules/express/lib/response.js", "../../node_modules/serve-static/index.js", "../../node_modules/express/lib/express.js", "../../node_modules/express/index.js", "../../node_modules/object-assign/index.js", "../../node_modules/cors/lib/index.js", "../../src/worker/server/server.ts", "../../src/worker/server/buildenv.ts", "../../src/common/workertypes.ts", "../../src/common/util.ts", "../../src/common/basic/compiler.ts", "../../src/worker/tools/misc.ts", "../../src/worker/tools/cc65.ts", "../../src/worker/tools/dasm.ts", "../../src/worker/tools/sdcc.ts", "../../src/worker/assembler.ts", "../../src/common/hdl/hdltypes.ts", "../../src/common/hdl/vxmlparser.ts", "../../src/worker/tools/verilog.ts", "../../src/worker/tools/m6809.ts", "../../src/worker/tools/m6502.ts", "../../src/worker/tools/z80.ts", "../../src/worker/tools/x86.ts", "../../src/worker/tools/arm.ts", "../../src/common/tokenizer.ts", "../../src/common/ecs/binpack.ts", "../../src/common/ecs/ecs.ts", "../../src/common/ecs/decoder.ts", "../../src/common/ecs/compiler.ts", "../../src/worker/tools/ecs.ts", "../../src/worker/tools/remote.ts", "../../src/worker/workermain.ts", "../../src/worker/server/clang.ts"],
"sourcesContent": ["/*!\n * depd\n * Copyright(c) 2014-2018 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n/**\n * Module dependencies.\n */\n\nvar relative = require('path').relative\n\n/**\n * Module exports.\n */\n\nmodule.exports = depd\n\n/**\n * Get the path to base files on.\n */\n\nvar basePath = process.cwd()\n\n/**\n * Determine if namespace is contained in the string.\n */\n\nfunction containsNamespace (str, namespace) {\n var vals = str.split(/[ ,]+/)\n var ns = String(namespace).toLowerCase()\n\n for (var i = 0; i < vals.length; i++) {\n var val = vals[i]\n\n // namespace contained\n if (val && (val === '*' || val.toLowerCase() === ns)) {\n return true\n }\n }\n\n return false\n}\n\n/**\n * Convert a data descriptor to accessor descriptor.\n */\n\nfunction convertDataDescriptorToAccessor (obj, prop, message) {\n var descriptor = Object.getOwnPropertyDescriptor(obj, prop)\n var value = descriptor.value\n\n descriptor.get = function getter () { return value }\n\n if (descriptor.writable) {\n descriptor.set = function setter (val) { return (value = val) }\n }\n\n delete descriptor.value\n delete descriptor.writable\n\n Object.defineProperty(obj, prop, descriptor)\n\n return descriptor\n}\n\n/**\n * Create arguments string to keep arity.\n */\n\nfunction createArgumentsString (arity) {\n var str = ''\n\n for (var i = 0; i < arity; i++) {\n str += ', arg' + i\n }\n\n return str.substr(2)\n}\n\n/**\n * Create stack string from stack.\n */\n\nfunction createStackString (stack) {\n var str = this.name + ': ' + this.namespace\n\n if (this.message) {\n str += ' deprecated ' + this.message\n }\n\n for (var i = 0; i < stack.length; i++) {\n str += '\\n at ' + stack[i].toString()\n }\n\n return str\n}\n\n/**\n * Create deprecate for namespace in caller.\n */\n\nfunction depd (namespace) {\n if (!namespace) {\n throw new TypeError('argument namespace is required')\n }\n\n var stack = getStack()\n var site = callSiteLocation(stack[1])\n var file = site[0]\n\n function deprecate (message) {\n // call to self as log\n log.call(deprecate, message)\n }\n\n deprecate._file = file\n deprecate._ignored = isignored(namespace)\n deprecate._namespace = namespace\n deprecate._traced = istraced(namespace)\n deprecate._warned = Object.create(null)\n\n deprecate.function = wrapfunction\n deprecate.property = wrapproperty\n\n return deprecate\n}\n\n/**\n * Determine if event emitter has listeners of a given type.\n *\n * The way to do this check is done three different ways in Node.js >= 0.8\n * so this consolidates them into a minimal set using instance methods.\n *\n * @param {EventEmitter} emitter\n * @param {string} type\n * @returns {boolean}\n * @private\n */\n\nfunction eehaslisteners (emitter, type) {\n var count = typeof emitter.listenerCount !== 'function'\n ? emitter.listeners(type).length\n : emitter.listenerCount(type)\n\n return count > 0\n}\n\n/**\n * Determine if namespace is ignored.\n */\n\nfunction isignored (namespace) {\n if (process.noDeprecation) {\n // --no-deprecation support\n return true\n }\n\n var str = process.env.NO_DEPRECATION || ''\n\n // namespace ignored\n return containsNamespace(str, namespace)\n}\n\n/**\n * Determine if namespace is traced.\n */\n\nfunction istraced (namespace) {\n if (process.traceDeprecation) {\n // --trace-deprecation support\n return true\n }\n\n var str = process.env.TRACE_DEPRECATION || ''\n\n // namespace traced\n return containsNamespace(str, namespace)\n}\n\n/**\n * Display deprecation message.\n */\n\nfunction log (message, site) {\n var haslisteners = eehaslisteners(process, 'deprecation')\n\n // abort early if no destination\n if (!haslisteners && this._ignored) {\n return\n }\n\n var caller\n var callFile\n var callSite\n var depSite\n var i = 0\n var seen = false\n var stack = getStack()\n var file = this._file\n\n if (site) {\n // provided site\n depSite = site\n callSite = callSiteLocation(stack[1])\n callSite.name = depSite.name\n file = callSite[0]\n } else {\n // get call site\n i = 2\n depSite = callSiteLocation(stack[i])\n callSite = depSite\n }\n\n // get caller of deprecated thing in relation to file\n for (; i < stack.length; i++) {\n caller = callSiteLocation(stack[i])\n callFile = caller[0]\n\n if (callFile === file) {\n seen = true\n } else if (callFile === this._file) {\n file = this._file\n } else if (seen) {\n break\n }\n }\n\n var key = caller\n ? depSite.join(':') + '__' + caller.join(':')\n : undefined\n\n if (key !== undefined && key in this._warned) {\n // already warned\n return\n }\n\n this._warned[key] = true\n\n // generate automatic message from call site\n var msg = message\n if (!msg) {\n msg = callSite === depSite || !callSite.name\n ? defaultMessage(depSite)\n : defaultMessage(callSite)\n }\n\n // emit deprecation if listeners exist\n if (haslisteners) {\n var err = DeprecationError(this._namespace, msg, stack.slice(i))\n process.emit('deprecation', err)\n return\n }\n\n // format and write message\n var format = process.stderr.isTTY\n ? formatColor\n : formatPlain\n var output = format.call(this, msg, caller, stack.slice(i))\n process.stderr.write(output + '\\n', 'utf8')\n}\n\n/**\n * Get call site location as array.\n */\n\nfunction callSiteLocation (callSite) {\n var file = callSite.getFileName() || '<anonymous>'\n var line = callSite.getLineNumber()\n var colm = callSite.getColumnNumber()\n\n if (callSite.isEval()) {\n file = callSite.getEvalOrigin() + ', ' + file\n }\n\n var site = [file, line, colm]\n\n site.callSite = callSite\n site.name = callSite.getFunctionName()\n\n return site\n}\n\n/**\n * Generate a default message from the site.\n */\n\nfunction defaultMessage (site) {\n var callSite = site.callSite\n var funcName = site.name\n\n // make useful anonymous name\n if (!funcName) {\n funcName = '<anonymous@' + formatLocation(site) + '>'\n }\n\n var context = callSite.getThis()\n var typeName = context && callSite.getTypeName()\n\n // ignore useless type name\n if (typeName === 'Object') {\n typeName = undefined\n }\n\n // make useful type name\n if (typeName === 'Function') {\n typeName = context.name || typeName\n }\n\n return typeName && callSite.getMethodName()\n ? typeName + '.' + funcName\n : funcName\n}\n\n/**\n * Format deprecation message without color.\n */\n\nfunction formatPlain (msg, caller, stack) {\n var timestamp = new Date().toUTCString()\n\n var formatted = timestamp +\n ' ' + this._namespace +\n ' deprecated ' + msg\n\n // add stack trace\n if (this._traced) {\n for (var i = 0; i < stack.length; i++) {\n formatted += '\\n at ' + stack[i].toString()\n }\n\n return formatted\n }\n\n if (caller) {\n formatted += ' at ' + formatLocation(caller)\n }\n\n return formatted\n}\n\n/**\n * Format deprecation message with color.\n */\n\nfunction formatColor (msg, caller, stack) {\n var formatted = '\\x1b[36;1m' + this._namespace + '\\x1b[22;39m' + // bold cyan\n ' \\x1b[33;1mdeprecated\\x1b[22;39m' + // bold yellow\n ' \\x1b[0m' + msg + '\\x1b[39m' // reset\n\n // add stack trace\n if (this._traced) {\n for (var i = 0; i < stack.length; i++) {\n formatted += '\\n \\x1b[36mat ' + stack[i].toString() + '\\x1b[39m' // cyan\n }\n\n return formatted\n }\n\n if (caller) {\n formatted += ' \\x1b[36m' + formatLocation(caller) + '\\x1b[39m' // cyan\n }\n\n return formatted\n}\n\n/**\n * Format call site location.\n */\n\nfunction formatLocation (callSite) {\n return relative(basePath, callSite[0]) +\n ':' + callSite[1] +\n ':' + callSite[2]\n}\n\n/**\n * Get the stack as array of call sites.\n */\n\nfunction getStack () {\n var limit = Error.stackTraceLimit\n var obj = {}\n var prep = Error.prepareStackTrace\n\n Error.prepareStackTrace = prepareObjectStackTrace\n Error.stackTraceLimit = Math.max(10, limit)\n\n // capture the stack\n Error.captureStackTrace(obj)\n\n // slice this function off the top\n var stack = obj.stack.slice(1)\n\n Error.prepareStackTrace = prep\n Error.stackTraceLimit = limit\n\n return stack\n}\n\n/**\n * Capture call site stack from v8.\n */\n\nfunction prepareObjectStackTrace (obj, stack) {\n return stack\n}\n\n/**\n * Return a wrapped function in a deprecation message.\n */\n\nfunction wrapfunction (fn, message) {\n if (typeof fn !== 'function') {\n throw new TypeError('argument fn must be a function')\n }\n\n var args = createArgumentsString(fn.length)\n var stack = getStack()\n var site = callSiteLocation(stack[1])\n\n site.name = fn.name\n\n // eslint-disable-next-line no-new-func\n var deprecatedfn = new Function('fn', 'log', 'deprecate', 'message', 'site',\n '\"use strict\"\\n' +\n 'return function (' + args + ') {' +\n 'log.call(deprecate, message, site)\\n' +\n 'return fn.apply(this, arguments)\\n' +\n '}')(fn, log, this, message, site)\n\n return deprecatedfn\n}\n\n/**\n * Wrap property in a deprecation message.\n */\n\nfunction wrapproperty (obj, prop, message) {\n if (!obj || (typeof obj !== 'object' && typeof obj !== 'function')) {\n throw new TypeError('argument obj must be object')\n }\n\n var descriptor = Object.getOwnPropertyDescriptor(obj, prop)\n\n if (!descriptor) {\n throw new TypeError('must call property on owner object')\n }\n\n if (!descriptor.configurable) {\n throw new TypeError('property must be configurable')\n }\n\n var deprecate = this\n var stack = getStack()\n var site = callSiteLocation(stack[1])\n\n // set site name\n site.name = prop\n\n // convert data descriptor\n if ('value' in descriptor) {\n descriptor = convertDataDescriptorToAccessor(obj, prop, message)\n }\n\n var get = descriptor.get\n var set = descriptor.set\n\n // wrap getter\n if (typeof get === 'function') {\n descriptor.get = function getter () {\n log.call(deprecate, message, site)\n return get.apply(this, arguments)\n }\n }\n\n // wrap setter\n if (typeof set === 'function') {\n descriptor.set = function setter () {\n log.call(deprecate, message, site)\n return set.apply(this, arguments)\n }\n }\n\n Object.defineProperty(obj, prop, descriptor)\n}\n\n/**\n * Create DeprecationError for deprecation\n */\n\nfunction DeprecationError (namespace, message, stack) {\n var error = new Error()\n var stackString\n\n Object.defineProperty(error, 'constructor', {\n value: DeprecationError\n })\n\n Object.defineProperty(error, 'message', {\n configurable: true,\n enumerable: false,\n value: message,\n writable: true\n })\n\n Object.defineProperty(error, 'name', {\n enumerable: false,\n configurable: true,\n value: 'DeprecationError',\n writable: true\n })\n\n Object.defineProperty(error, 'namespace', {\n configurable: true,\n enumerable: false,\n value: namespace,\n writable: true\n })\n\n Object.defineProperty(error, 'stack', {\n configurable: true,\n enumerable: false,\n get: function () {\n if (stackString !== undefined) {\n return stackString\n }\n\n // prepare stack trace\n return (stackString = createStackString.call(this, stack))\n },\n set: function setter (val) {\n stackString = val\n }\n })\n\n return error\n}\n", "/*!\n * bytes\n * Copyright(c) 2012-2014 TJ Holowaychuk\n * Copyright(c) 2015 Jed Watson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = bytes;\nmodule.exports.format = format;\nmodule.exports.parse = parse;\n\n/**\n * Module variables.\n * @private\n */\n\nvar formatThousandsRegExp = /\\B(?=(\\d{3})+(?!\\d))/g;\n\nvar formatDecimalsRegExp = /(?:\\.0*|(\\.[^0]+)0+)$/;\n\nvar map = {\n b: 1,\n kb: 1 << 10,\n mb: 1 << 20,\n gb: 1 << 30,\n tb: Math.pow(1024, 4),\n pb: Math.pow(1024, 5),\n};\n\nvar parseRegExp = /^((-|\\+)?(\\d+(?:\\.\\d+)?)) *(kb|mb|gb|tb|pb)$/i;\n\n/**\n * Convert the given value in bytes into a string or parse to string to an integer in bytes.\n *\n * @param {string|number} value\n * @param {{\n * case: [string],\n * decimalPlaces: [number]\n * fixedDecimals: [boolean]\n * thousandsSeparator: [string]\n * unitSeparator: [string]\n * }} [options] bytes options.\n *\n * @returns {string|number|null}\n */\n\nfunction bytes(value, options) {\n if (typeof value === 'string') {\n return parse(value);\n }\n\n if (typeof value === 'number') {\n return format(value, options);\n }\n\n return null;\n}\n\n/**\n * Format the given value in bytes into a string.\n *\n * If the value is negative, it is kept as such. If it is a float,\n * it is rounded.\n *\n * @param {number} value\n * @param {object} [options]\n * @param {number} [options.decimalPlaces=2]\n * @param {number} [options.fixedDecimals=false]\n * @param {string} [options.thousandsSeparator=]\n * @param {string} [options.unit=]\n * @param {string} [options.unitSeparator=]\n *\n * @returns {string|null}\n * @public\n */\n\nfunction format(value, options) {\n if (!Number.isFinite(value)) {\n return null;\n }\n\n var mag = Math.abs(value);\n var thousandsSeparator = (options && options.thousandsSeparator) || '';\n var unitSeparator = (options && options.unitSeparator) || '';\n var decimalPlaces = (options && options.decimalPlaces !== undefined) ? options.decimalPlaces : 2;\n var fixedDecimals = Boolean(options && options.fixedDecimals);\n var unit = (options && options.unit) || '';\n\n if (!unit || !map[unit.toLowerCase()]) {\n if (mag >= map.pb) {\n unit = 'PB';\n } else if (mag >= map.tb) {\n unit = 'TB';\n } else if (mag >= map.gb) {\n unit = 'GB';\n } else if (mag >= map.mb) {\n unit = 'MB';\n } else if (mag >= map.kb) {\n unit = 'KB';\n } else {\n unit = 'B';\n }\n }\n\n var val = value / map[unit.toLowerCase()];\n var str = val.toFixed(decimalPlaces);\n\n if (!fixedDecimals) {\n str = str.replace(formatDecimalsRegExp, '$1');\n }\n\n if (thousandsSeparator) {\n str = str.split('.').map(function (s, i) {\n return i === 0\n ? s.replace(formatThousandsRegExp, thousandsSeparator)\n : s\n }).join('.');\n }\n\n return str + unitSeparator + unit;\n}\n\n/**\n * Parse the string value into an integer in bytes.\n *\n * If no unit is given, it is assumed the value is in bytes.\n *\n * @param {number|string} val\n *\n * @returns {number|null}\n * @public\n */\n\nfunction parse(val) {\n if (typeof val === 'number' && !isNaN(val)) {\n return val;\n }\n\n if (typeof val !== 'string') {\n return null;\n }\n\n // Test if the string passed is valid\n var results = parseRegExp.exec(val);\n var floatValue;\n var unit = 'b';\n\n if (!results) {\n // Nothing could be extracted from the given string\n floatValue = parseInt(val, 10);\n unit = 'b'\n } else {\n // Retrieve the value and the unit\n floatValue = parseFloat(results[1]);\n unit = results[4].toLowerCase();\n }\n\n if (isNaN(floatValue)) {\n return null;\n }\n\n return Math.floor(map[unit] * floatValue);\n}\n", "/*!\n * content-type\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * RegExp to match *( \";\" parameter ) in RFC 7231 sec 3.1.1.1\n *\n * parameter = token \"=\" ( token / quoted-string )\n * token = 1*tchar\n * tchar = \"!\" / \"#\" / \"$\" / \"%\" / \"&\" / \"'\" / \"*\"\n * / \"+\" / \"-\" / \".\" / \"^\" / \"_\" / \"`\" / \"|\" / \"~\"\n * / DIGIT / ALPHA\n * ; any VCHAR, except delimiters\n * quoted-string = DQUOTE *( qdtext / quoted-pair ) DQUOTE\n * qdtext = HTAB / SP / %x21 / %x23-5B / %x5D-7E / obs-text\n * obs-text = %x80-FF\n * quoted-pair = \"\\\" ( HTAB / SP / VCHAR / obs-text )\n */\nvar PARAM_REGEXP = /; *([!#$%&'*+.^_`|~0-9A-Za-z-]+) *= *(\"(?:[\\u000b\\u0020\\u0021\\u0023-\\u005b\\u005d-\\u007e\\u0080-\\u00ff]|\\\\[\\u000b\\u0020-\\u00ff])*\"|[!#$%&'*+.^_`|~0-9A-Za-z-]+) */g // eslint-disable-line no-control-regex\nvar TEXT_REGEXP = /^[\\u000b\\u0020-\\u007e\\u0080-\\u00ff]+$/ // eslint-disable-line no-control-regex\nvar TOKEN_REGEXP = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/\n\n/**\n * RegExp to match quoted-pair in RFC 7230 sec 3.2.6\n *\n * quoted-pair = \"\\\" ( HTAB / SP / VCHAR / obs-text )\n * obs-text = %x80-FF\n */\nvar QESC_REGEXP = /\\\\([\\u000b\\u0020-\\u00ff])/g // eslint-disable-line no-control-regex\n\n/**\n * RegExp to match chars that must be quoted-pair in RFC 7230 sec 3.2.6\n */\nvar QUOTE_REGEXP = /([\\\\\"])/g\n\n/**\n * RegExp to match type in RFC 7231 sec 3.1.1.1\n *\n * media-type = type \"/\" subtype\n * type = token\n * subtype = token\n */\nvar TYPE_REGEXP = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+\\/[!#$%&'*+.^_`|~0-9A-Za-z-]+$/\n\n/**\n * Module exports.\n * @public\n */\n\nexports.format = format\nexports.parse = parse\n\n/**\n * Format object to media type.\n *\n * @param {object} obj\n * @return {string}\n * @public\n */\n\nfunction format (obj) {\n if (!obj || typeof obj !== 'object') {\n throw new TypeError('argument obj is required')\n }\n\n var parameters = obj.parameters\n var type = obj.type\n\n if (!type || !TYPE_REGEXP.test(type)) {\n throw new TypeError('invalid type')\n }\n\n var string = type\n\n // append parameters\n if (parameters && typeof parameters === 'object') {\n var param\n var params = Object.keys(parameters).sort()\n\n for (var i = 0; i < params.length; i++) {\n param = params[i]\n\n if (!TOKEN_REGEXP.test(param)) {\n throw new TypeError('invalid parameter name')\n }\n\n string += '; ' + param + '=' + qstring(parameters[param])\n }\n }\n\n return string\n}\n\n/**\n * Parse media type to object.\n *\n * @param {string|object} string\n * @return {Object}\n * @public\n */\n\nfunction parse (string) {\n if (!string) {\n throw new TypeError('argument string is required')\n }\n\n // support req/res-like objects as argument\n var header = typeof string === 'object'\n ? getcontenttype(string)\n : string\n\n if (typeof header !== 'string') {\n throw new TypeError('argument string is required to be a string')\n }\n\n var index = header.indexOf(';')\n var type = index !== -1\n ? header.slice(0, index).trim()\n : header.trim()\n\n if (!TYPE_REGEXP.test(type)) {\n throw new TypeError('invalid media type')\n }\n\n var obj = new ContentType(type.toLowerCase())\n\n // parse parameters\n if (index !== -1) {\n var key\n var match\n var value\n\n PARAM_REGEXP.lastIndex = index\n\n while ((match = PARAM_REGEXP.exec(header))) {\n if (match.index !== index) {\n throw new TypeError('invalid parameter format')\n }\n\n index += match[0].length\n key = match[1].toLowerCase()\n value = match[2]\n\n if (value.charCodeAt(0) === 0x22 /* \" */) {\n // remove quotes\n value = value.slice(1, -1)\n\n // remove escapes\n if (value.indexOf('\\\\') !== -1) {\n value = value.replace(QESC_REGEXP, '$1')\n }\n }\n\n obj.parameters[key] = value\n }\n\n if (index !== header.length) {\n throw new TypeError('invalid parameter format')\n }\n }\n\n return obj\n}\n\n/**\n * Get content-type from req/res objects.\n *\n * @param {object}\n * @return {Object}\n * @private\n */\n\nfunction getcontenttype (obj) {\n var header\n\n if (typeof obj.getHeader === 'function') {\n // res-like\n header = obj.getHeader('content-type')\n } else if (typeof obj.headers === 'object') {\n // req-like\n header = obj.headers && obj.headers['content-type']\n }\n\n if (typeof header !== 'string') {\n throw new TypeError('content-type header is missing from object')\n }\n\n return header\n}\n\n/**\n * Quote a string if necessary.\n *\n * @param {string} val\n * @return {string}\n * @private\n */\n\nfunction qstring (val) {\n var str = String(val)\n\n // no need to quote tokens\n if (TOKEN_REGEXP.test(str)) {\n return str\n }\n\n if (str.length > 0 && !TEXT_REGEXP.test(str)) {\n throw new TypeError('invalid parameter value')\n }\n\n return '\"' + str.replace(QUOTE_REGEXP, '\\\\$1') + '\"'\n}\n\n/**\n * Class to represent a content type.\n * @private\n */\nfunction ContentType (type) {\n this.parameters = Object.create(null)\n this.type = type\n}\n", "'use strict'\n/* eslint no-proto: 0 */\nmodule.exports = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array ? setProtoOf : mixinProperties)\n\nfunction setProtoOf (obj, proto) {\n obj.__proto__ = proto\n return obj\n}\n\nfunction mixinProperties (obj, proto) {\n for (var prop in proto) {\n if (!Object.prototype.hasOwnProperty.call(obj, prop)) {\n obj[prop] = proto[prop]\n }\n }\n return obj\n}\n", "/*!\n * statuses\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar codes = require('./codes.json')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = status\n\n// status code to message map\nstatus.message = codes\n\n// status message (lower-case) to code map\nstatus.code = createMessageToStatusCodeMap(codes)\n\n// array of status codes\nstatus.codes = createStatusCodeList(codes)\n\n// status codes for redirects\nstatus.redirect = {\n 300: true,\n 301: true,\n 302: true,\n 303: true,\n 305: true,\n 307: true,\n 308: true\n}\n\n// status codes for empty bodies\nstatus.empty = {\n 204: true,\n 205: true,\n 304: true\n}\n\n// status codes for when you should retry the request\nstatus.retry = {\n 502: true,\n 503: true,\n 504: true\n}\n\n/**\n * Create a map of message to status code.\n * @private\n */\n\nfunction createMessageToStatusCodeMap (codes) {\n var map = {}\n\n Object.keys(codes).forEach(function forEachCode (code) {\n var message = codes[code]\n var status = Number(code)\n\n // populate map\n map[message.toLowerCase()] = status\n })\n\n return map\n}\n\n/**\n * Create a list of all status codes.\n * @private\n */\n\nfunction createStatusCodeList (codes) {\n return Object.keys(codes).map(function mapCode (code) {\n return Number(code)\n })\n}\n\n/**\n * Get the status code for given message.\n * @private\n */\n\nfunction getStatusCode (message) {\n var msg = message.toLowerCase()\n\n if (!Object.prototype.hasOwnProperty.call(status.code, msg)) {\n throw new Error('invalid status message: \"' + message + '\"')\n }\n\n return status.code[msg]\n}\n\n/**\n * Get the status message for given code.\n * @private\n */\n\nfunction getStatusMessage (code) {\n if (!Object.prototype.hasOwnProperty.call(status.message, code)) {\n throw new Error('invalid status code: ' + code)\n }\n\n return status.message[code]\n}\n\n/**\n * Get the status code.\n *\n * Given a number, this will throw if it is not a known status\n * code, otherwise the code will be returned. Given a string,\n * the string will be parsed for a number and return the code\n * if valid, otherwise will lookup the code assuming this is\n * the status message.\n *\n * @param {string|number} code\n * @returns {number}\n * @public\n */\n\nfunction status (code) {\n if (typeof code === 'number') {\n return getStatusMessage(code)\n }\n\n if (typeof code !== 'string') {\n throw new TypeError('code must be a number or string')\n }\n\n // '403'\n var n = parseInt(code, 10)\n if (!isNaN(n)) {\n return getStatusMessage(n)\n }\n\n return getStatusCode(code)\n}\n", "if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n", "try {\n var util = require('util');\n /* istanbul ignore next */\n if (typeof util.inherits !== 'function') throw '';\n module.exports = util.inherits;\n} catch (e) {\n /* istanbul ignore next */\n module.exports = require('./inherits_browser.js');\n}\n", "/*!\n * toidentifier\n * Copyright(c) 2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = toIdentifier\n\n/**\n * Trasform the given string into a JavaScript identifier\n *\n * @param {string} str\n * @returns {string}\n * @public\n */\n\nfunction toIdentifier (str) {\n return str\n .split(' ')\n .map(function (token) {\n return token.slice(0, 1).toUpperCase() + token.slice(1)\n })\n .join('')\n .replace(/[^ _0-9a-z]/gi, '')\n}\n", "/*!\n * http-errors\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar deprecate = require('depd')('http-errors')\nvar setPrototypeOf = require('setprototypeof')\nvar statuses = require('statuses')\nvar inherits = require('inherits')\nvar toIdentifier = require('toidentifier')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = createError\nmodule.exports.HttpError = createHttpErrorConstructor()\nmodule.exports.isHttpError = createIsHttpErrorFunction(module.exports.HttpError)\n\n// Populate exports for all constructors\npopulateConstructorExports(module.exports, statuses.codes, module.exports.HttpError)\n\n/**\n * Get the code class of a status code.\n * @private\n */\n\nfunction codeClass (status) {\n return Number(String(status).charAt(0) + '00')\n}\n\n/**\n * Create a new HTTP Error.\n *\n * @returns {Error}\n * @public\n */\n\nfunction createError () {\n // so much arity going on ~_~\n var err\n var msg\n var status = 500\n var props = {}\n for (var i = 0; i < arguments.length; i++) {\n var arg = arguments[i]\n var type = typeof arg\n if (type === 'object' && arg instanceof Error) {\n err = arg\n status = err.status || err.statusCode || status\n } else if (type === 'number' && i === 0) {\n status = arg\n } else if (type === 'string') {\n msg = arg\n } else if (type === 'object') {\n props = arg\n } else {\n throw new TypeError('argument #' + (i + 1) + ' unsupported type ' + type)\n }\n }\n\n if (typeof status === 'number' && (status < 400 || status >= 600)) {\n deprecate('non-error status code; use only 4xx or 5xx status codes')\n }\n\n if (typeof status !== 'number' ||\n (!statuses.message[status] && (status < 400 || status >= 600))) {\n status = 500\n }\n\n // constructor\n var HttpError = createError[status] || createError[codeClass(status)]\n\n if (!err) {\n // create error\n err = HttpError\n ? new HttpError(msg)\n : new Error(msg || statuses.message[status])\n Error.captureStackTrace(err, createError)\n }\n\n if (!HttpError || !(err instanceof HttpError) || err.status !== status) {\n // add properties to generic error\n err.expose = status < 500\n err.status = err.statusCode = status\n }\n\n for (var key in props) {\n if (key !== 'status' && key !== 'statusCode') {\n err[key] = props[key]\n }\n }\n\n return err\n}\n\n/**\n * Create HTTP error abstract base class.\n * @private\n */\n\nfunction createHttpErrorConstructor () {\n function HttpError () {\n throw new TypeError('cannot construct abstract class')\n }\n\n inherits(HttpError, Error)\n\n return HttpError\n}\n\n/**\n * Create a constructor for a client error.\n * @private\n */\n\nfunction createClientErrorConstructor (HttpError, name, code) {\n var className = toClassName(name)\n\n function ClientError (message) {\n // create the error object\n var msg = message != null ? message : statuses.message[code]\n var err = new Error(msg)\n\n // capture a stack trace to the construction point\n Error.captureStackTrace(err, ClientError)\n\n // adjust the [[Prototype]]\n setPrototypeOf(err, ClientError.prototype)\n\n // redefine the error message\n Object.defineProperty(err, 'message', {\n enumerable: true,\n configurable: true,\n value: msg,\n writable: true\n })\n\n // redefine the error name\n Object.defineProperty(err, 'name', {\n enumerable: false,\n configurable: true,\n value: className,\n writable: true\n })\n\n return err\n }\n\n inherits(ClientError, HttpError)\n nameFunc(ClientError, className)\n\n ClientError.prototype.status = code\n ClientError.prototype.statusCode = code\n ClientError.prototype.expose = true\n\n return ClientError\n}\n\n/**\n * Create function to test is a value is a HttpError.\n * @private\n */\n\nfunction createIsHttpErrorFunction (HttpError) {\n return function isHttpError (val) {\n if (!val || typeof val !== 'object') {\n return false\n }\n\n if (val instanceof HttpError) {\n return true\n }\n\n return val instanceof Error &&\n typeof val.expose === 'boolean' &&\n typeof val.statusCode === 'number' && val.status === val.statusCode\n }\n}\n\n/**\n * Create a constructor for a server error.\n * @private\n */\n\nfunction createServerErrorConstructor (HttpError, name, code) {\n var className = toClassName(name)\n\n function ServerError (message) {\n // create the error object\n var msg = message != null ? message : statuses.message[code]\n var err = new Error(msg)\n\n // capture a stack trace to the construction point\n Error.captureStackTrace(err, ServerError)\n\n // adjust the [[Prototype]]\n setPrototypeOf(err, ServerError.prototype)\n\n // redefine the error message\n Object.defineProperty(err, 'message', {\n enumerable: true,\n configurable: true,\n value: msg,\n writable: true\n })\n\n // redefine the error name\n Object.defineProperty(err, 'name', {\n enumerable: false,\n configurable: true,\n value: className,\n writable: true\n })\n\n return err\n }\n\n inherits(ServerError, HttpError)\n nameFunc(ServerError, className)\n\n ServerError.prototype.status = code\n ServerError.prototype.statusCode = code\n ServerError.prototype.expose = false\n\n return ServerError\n}\n\n/**\n * Set the name of a function, if possible.\n * @private\n */\n\nfunction nameFunc (func, name) {\n var desc = Object.getOwnPropertyDescriptor(func, 'name')\n\n if (desc && desc.configurable) {\n desc.value = name\n Object.defineProperty(func, 'name', desc)\n }\n}\n\n/**\n * Populate the exports object with constructors for every error class.\n * @private\n */\n\nfunction populateConstructorExports (exports, codes, HttpError) {\n codes.forEach(function forEachCode (code) {\n var CodeError\n var name = toIdentifier(statuses.message[code])\n\n switch (codeClass(code)) {\n case 400:\n CodeError = createClientErrorConstructor(HttpError, name, code)\n break\n case 500:\n CodeError = createServerErrorConstructor(HttpError, name, code)\n break\n }\n\n if (CodeError) {\n // export the constructor\n exports[code] = CodeError\n exports[name] = CodeError\n }\n })\n}\n\n/**\n * Get a class name from a name identifier.\n * @private\n */\n\nfunction toClassName (name) {\n return name.substr(-5) !== 'Error'\n ? name + 'Error'\n : name\n}\n", "/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isNaN(val) === false) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^((?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n if (ms >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (ms >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (ms >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (ms >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n return plural(ms, d, 'day') ||\n plural(ms, h, 'hour') ||\n plural(ms, m, 'minute') ||\n plural(ms, s, 'second') ||\n ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, n, name) {\n if (ms < n) {\n return;\n }\n if (ms < n * 1.5) {\n return Math.floor(ms / n) + ' ' + name;\n }\n return Math.ceil(ms / n) + ' ' + name + 's';\n}\n", "\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = createDebug.debug = createDebug['default'] = createDebug;\nexports.coerce = coerce;\nexports.disable = disable;\nexports.enable = enable;\nexports.enabled = enabled;\nexports.humanize = require('ms');\n\n/**\n * The currently active debug mode names, and names to skip.\n */\n\nexports.names = [];\nexports.skips = [];\n\n/**\n * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n *\n * Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n */\n\nexports.formatters = {};\n\n/**\n * Previous log timestamp.\n */\n\nvar prevTime;\n\n/**\n * Select a color.\n * @param {String} namespace\n * @return {Number}\n * @api private\n */\n\nfunction selectColor(namespace) {\n var hash = 0, i;\n\n for (i in namespace) {\n hash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n hash |= 0; // Convert to 32bit integer\n }\n\n return exports.colors[Math.abs(hash) % exports.colors.length];\n}\n\n/**\n * Create a debugger with the given `namespace`.\n *\n * @param {String} namespace\n * @return {Function}\n * @api public\n */\n\nfunction createDebug(namespace) {\n\n function debug() {\n // disabled?\n if (!debug.enabled) return;\n\n var self = debug;\n\n // set `diff` timestamp\n var curr = +new Date();\n var ms = curr - (prevTime || curr);\n self.diff = ms;\n self.prev = prevTime;\n self.curr = curr;\n prevTime = curr;\n\n // turn the `arguments` into a proper Array\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n\n args[0] = exports.coerce(args[0]);\n\n if ('string' !== typeof args[0]) {\n // anything else let's inspect with %O\n args.unshift('%O');\n }\n\n // apply any `formatters` transformations\n var index = 0;\n args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) {\n // if we encounter an escaped % then don't increase the array index\n if (match === '%%') return match;\n index++;\n var formatter = exports.formatters[format];\n if ('function' === typeof formatter) {\n var val = args[index];\n match = formatter.call(self, val);\n\n // now we need to remove `args[index]` since it's inlined in the `format`\n args.splice(index, 1);\n index--;\n }\n return match;\n });\n\n // apply env-specific formatting (colors, etc.)\n exports.formatArgs.call(self, args);\n\n var logFn = debug.log || exports.log || console.log.bind(console);\n logFn.apply(self, args);\n }\n\n debug.namespace = namespace;\n debug.enabled = exports.enabled(namespace);\n debug.useColors = exports.useColors();\n debug.color = selectColor(namespace);\n\n // env-specific initialization logic for debug instances\n if ('function' === typeof exports.init) {\n exports.init(debug);\n }\n\n return debug;\n}\n\n/**\n * Enables a debug mode by namespaces. This can include modes\n * separated by a colon and wildcards.\n *\n * @param {String} namespaces\n * @api public\n */\n\nfunction enable(namespaces) {\n exports.save(namespaces);\n\n exports.names = [];\n exports.skips = [];\n\n var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n var len = split.length;\n\n for (var i = 0; i < len; i++) {\n if (!split[i]) continue; // ignore empty strings\n namespaces = split[i].replace(/\\*/g, '.*?');\n if (namespaces[0] === '-') {\n exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n } else {\n exports.names.push(new RegExp('^' + namespaces + '$'));\n }\n }\n}\n\n/**\n * Disable debug output.\n *\n * @api public\n */\n\nfunction disable() {\n exports.enable('');\n}\n\n/**\n * Returns true if the given mode name is enabled, false otherwise.\n *\n * @param {String} name\n * @return {Boolean}\n * @api public\n */\n\nfunction enabled(name) {\n var i, len;\n for (i = 0, len = exports.skips.length; i < len; i++) {\n if (exports.skips[i].test(name)) {\n return false;\n }\n }\n for (i = 0, len = exports.names.length; i < len; i++) {\n if (exports.names[i].test(name)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Coerce `val`.\n *\n * @param {Mixed} val\n * @return {Mixed}\n * @api private\n */\n\nfunction coerce(val) {\n if (val instanceof Error) return val.stack || val.message;\n return val;\n}\n", "/**\n * This is the web browser implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = 'undefined' != typeof chrome\n && 'undefined' != typeof chrome.storage\n ? chrome.storage.local\n : localstorage();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n 'lightseagreen',\n 'forestgreen',\n 'goldenrod',\n 'dodgerblue',\n 'darkorchid',\n 'crimson'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\nfunction useColors() {\n // NB: In an Electron preload script, document will be defined but not fully\n // initialized. Since we know we're in Chrome, we'll just detect this case\n // explicitly\n if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {\n return true;\n }\n\n // is webkit? http://stackoverflow.com/a/16459606/376773\n // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n // is firebug? http://stackoverflow.com/a/398120/376773\n (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n // is firefox >= v31?\n // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n // double check webkit in userAgent just in case we are in a worker\n (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nexports.formatters.j = function(v) {\n try {\n return JSON.stringify(v);\n } catch (err) {\n return '[UnexpectedJSONParseError]: ' + err.message;\n }\n};\n\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n var useColors = this.useColors;\n\n args[0] = (useColors ? '%c' : '')\n + this.namespace\n + (useColors ? ' %c' : ' ')\n + args[0]\n + (useColors ? '%c ' : ' ')\n + '+' + exports.humanize(this.diff);\n\n if (!useColors) return;\n\n var c = 'color: ' + this.color;\n args.splice(1, 0, c, 'color: inherit')\n\n // the final \"%c\" is somewhat tricky, because there could be other\n // arguments passed either before or after the %c, so we need to\n // figure out the correct index to insert the CSS into\n var index = 0;\n var lastC = 0;\n args[0].replace(/%[a-zA-Z%]/g, function(match) {\n if ('%%' === match) return;\n index++;\n if ('%c' === match) {\n // we only are interested in the *last* %c\n // (the user may have provided their own)\n lastC = index;\n }\n });\n\n args.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\n\nfunction log() {\n // this hackery is required for IE8/9, where\n // the `console.log` function doesn't have 'apply'\n return 'object' === typeof console\n && console.log\n && Function.prototype.apply.call(console.log, console, arguments);\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n try {\n if (null == namespaces) {\n exports.storage.removeItem('debug');\n } else {\n exports.storage.debug = namespaces;\n }\n } catch(e) {}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n var r;\n try {\n r = exports.storage.debug;\n } catch(e) {}\n\n // If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n if (!r && typeof process !== 'undefined' && 'env' in process) {\n r = process.env.DEBUG;\n }\n\n return r;\n}\n\n/**\n * Enable namespaces listed in `localStorage.debug` initially.\n */\n\nexports.enable(load());\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n try {\n return window.localStorage;\n } catch (e) {}\n}\n", "/**\n * Module dependencies.\n */\n\nvar tty = require('tty');\nvar util = require('util');\n\n/**\n * This is the Node.js implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.init = init;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\n\n/**\n * Colors.\n */\n\nexports.colors = [6, 2, 3, 4, 5, 1];\n\n/**\n * Build up the default `inspectOpts` object from the environment variables.\n *\n * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js\n */\n\nexports.inspectOpts = Object.keys(process.env).filter(function (key) {\n return /^debug_/i.test(key);\n}).reduce(function (obj, key) {\n // camel-case\n var prop = key\n .substring(6)\n .toLowerCase()\n .replace(/_([a-z])/g, function (_, k) { return k.toUpperCase() });\n\n // coerce string value into JS value\n var val = process.env[key];\n if (/^(yes|on|true|enabled)$/i.test(val)) val = true;\n else if (/^(no|off|false|disabled)$/i.test(val)) val = false;\n else if (val === 'null') val = null;\n else val = Number(val);\n\n obj[prop] = val;\n return obj;\n}, {});\n\n/**\n * The file descriptor to write the `debug()` calls to.\n * Set the `DEBUG_FD` env variable to override with another value. i.e.:\n *\n * $ DEBUG_FD=3 node script.js 3>debug.log\n */\n\nvar fd = parseInt(process.env.DEBUG_FD, 10) || 2;\n\nif (1 !== fd && 2 !== fd) {\n util.deprecate(function(){}, 'except for stderr(2) and stdout(1), any other usage of DEBUG_FD is deprecated. Override debug.log if you want to use a different log function (https://git.io/debug_fd)')()\n}\n\nvar stream = 1 === fd ? process.stdout :\n 2 === fd ? process.stderr :\n createWritableStdioStream(fd);\n\n/**\n * Is stdout a TTY? Colored output is enabled when `true`.\n */\n\nfunction useColors() {\n return 'colors' in exports.inspectOpts\n ? Boolean(exports.inspectOpts.colors)\n : tty.isatty(fd);\n}\n\n/**\n * Map %o to `util.inspect()`, all on a single line.\n */\n\nexports.formatters.o = function(v) {\n this.inspectOpts.colors = this.useColors;\n return util.inspect(v, this.inspectOpts)\n .split('\\n').map(function(str) {\n return str.trim()\n }).join(' ');\n};\n\n/**\n * Map %o to `util.inspect()`, allowing multiple lines if needed.\n */\n\nexports.formatters.O = function(v) {\n this.inspectOpts.colors = this.useColors;\n return util.inspect(v, this.inspectOpts);\n};\n\n/**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n var name = this.namespace;\n var useColors = this.useColors;\n\n if (useColors) {\n var c = this.color;\n var prefix = ' \\u001b[3' + c + ';1m' + name + ' ' + '\\u001b[0m';\n\n args[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n args.push('\\u001b[3' + c + 'm+' + exports.humanize(this.diff) + '\\u001b[0m');\n } else {\n args[0] = new Date().toUTCString()\n + ' ' + name + ' ' + args[0];\n }\n}\n\n/**\n * Invokes `util.format()` with the specified arguments and writes to `stream`.\n */\n\nfunction log() {\n return stream.write(util.format.apply(util, arguments) + '\\n');\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n if (null == namespaces) {\n // If you set a process.env field to null or undefined, it gets cast to the\n // string 'null' or 'undefined'. Just delete instead.\n delete process.env.DEBUG;\n } else {\n process.env.DEBUG = namespaces;\n }\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n return process.env.DEBUG;\n}\n\n/**\n * Copied from `node/src/node.js`.\n *\n * XXX: It's lame that node doesn't expose this API out-of-the-box. It also\n * relies on the undocumented `tty_wrap.guessHandleType()` which is also lame.\n */\n\nfunction createWritableStdioStream (fd) {\n var stream;\n var tty_wrap = process.binding('tty_wrap');\n\n // Note stream._type is used for test-module-load-list.js\n\n switch (tty_wrap.guessHandleType(fd)) {\n case 'TTY':\n stream = new tty.WriteStream(fd);\n stream._type = 'tty';\n\n // Hack to have stream not keep the event loop alive.\n // See https://github.com/joyent/node/issues/1726\n if (stream._handle && stream._handle.unref) {\n stream._handle.unref();\n }\n break;\n\n case 'FILE':\n var fs = require('fs');\n stream = new fs.SyncWriteStream(fd, { autoClose: false });\n stream._type = 'fs';\n break;\n\n case 'PIPE':\n case 'TCP':\n var net = require('net');\n stream = new net.Socket({\n fd: fd,\n readable: false,\n writable: true\n });\n\n // FIXME Should probably have an option in net.Socket to create a\n // stream from an existing fd which is writable only. But for now\n // we'll just add this hack and set the `readable` member to false.\n // Test: ./node test/fixtures/echo.js < /etc/passwd\n stream.readable = false;\n stream.read = null;\n stream._type = 'pipe';\n\n // FIXME Hack to have stream not keep the event loop alive.\n // See https://github.com/joyent/node/issues/1726\n if (stream._handle && stream._handle.unref) {\n stream._handle.unref();\n }\n break;\n\n default:\n // Probably an error on in uv_guess_handle()\n throw new Error('Implement me. Unknown stream file type!');\n }\n\n // For supporting legacy API we put the FD here.\n stream.fd = fd;\n\n stream._isStdio = true;\n\n return stream;\n}\n\n/**\n * Init logic for `debug` instances.\n *\n * Create a new `inspectOpts` object in case `useColors` is set\n * differently for a particular `debug` instance.\n */\n\nfunction init (debug) {\n debug.inspectOpts = {};\n\n var keys = Object.keys(exports.inspectOpts);\n for (var i = 0; i < keys.length; i++) {\n debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];\n }\n}\n\n/**\n * Enable namespaces listed in `process.env.DEBUG` initially.\n */\n\nexports.enable(load());\n", "/**\n * Detect Electron renderer process, which is node, but we should\n * treat as a browser.\n */\n\nif (typeof process !== 'undefined' && process.type === 'renderer') {\n module.exports = require('./browser.js');\n} else {\n module.exports = require('./node.js');\n}\n", "/*!\n * destroy\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015-2022 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar EventEmitter = require('events').EventEmitter\nvar ReadStream = require('fs').ReadStream\nvar Stream = require('stream')\nvar Zlib = require('zlib')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = destroy\n\n/**\n * Destroy the given stream, and optionally suppress any future `error` events.\n *\n * @param {object} stream\n * @param {boolean} suppress\n * @public\n */\n\nfunction destroy (stream, suppress) {\n if (isFsReadStream(stream)) {\n destroyReadStream(stream)\n } else if (isZlibStream(stream)) {\n destroyZlibStream(stream)\n } else if (hasDestroy(stream)) {\n stream.destroy()\n }\n\n if (isEventEmitter(stream) && suppress) {\n stream.removeAllListeners('error')\n stream.addListener('error', noop)\n }\n\n return stream\n}\n\n/**\n * Destroy a ReadStream.\n *\n * @param {object} stream\n * @private\n */\n\nfunction destroyReadStream (stream) {\n stream.destroy()\n\n if (typeof stream.close === 'function') {\n // node.js core bug work-around\n stream.on('open', onOpenClose)\n }\n}\n\n/**\n * Close a Zlib stream.\n *\n * Zlib streams below Node.js 4.5.5 have a buggy implementation\n * of .close() when zlib encountered an error.\n *\n * @param {object} stream\n * @private\n */\n\nfunction closeZlibStream (stream) {\n if (stream._hadError === true) {\n var prop = stream._binding === null\n ? '_binding'\n : '_handle'\n\n stream[prop] = {\n close: function () { this[prop] = null }\n }\n }\n\n stream.close()\n}\n\n/**\n * Destroy a Zlib stream.\n *\n * Zlib streams don't have a destroy function in Node.js 6. On top of that\n * simply calling destroy on a zlib stream in Node.js 8+ will result in a\n * memory leak. So until that is fixed, we need to call both close AND destroy.\n *\n * PR to fix memory leak: https://github.com/nodejs/node/pull/23734\n *\n * In Node.js 6+8, it's important that destroy is called before close as the\n * stream would otherwise emit the error 'zlib binding closed'.\n *\n * @param {object} stream\n * @private\n */\n\nfunction destroyZlibStream (stream) {\n if (typeof stream.destroy === 'function') {\n // node.js core bug work-around\n // istanbul ignore if: node.js 0.8\n if (stream._binding) {\n // node.js < 0.10.0\n stream.destroy()\n if (stream._processing) {\n stream._needDrain = true\n stream.once('drain', onDrainClearBinding)\n } else {\n stream._binding.clear()\n }\n } else if (stream._destroy && stream._destroy !== Stream.Transform.prototype._destroy) {\n // node.js >= 12, ^11.1.0, ^10.15.1\n stream.destroy()\n } else if (stream._destroy && typeof stream.close === 'function') {\n // node.js 7, 8\n stream.destroyed = true\n stream.close()\n } else {\n // fallback\n // istanbul ignore next\n stream.destroy()\n }\n } else if (typeof stream.close === 'function') {\n // node.js < 8 fallback\n closeZlibStream(stream)\n }\n}\n\n/**\n * Determine if stream has destroy.\n * @private\n */\n\nfunction hasDestroy (stream) {\n return stream instanceof Stream &&\n typeof stream.destroy === 'function'\n}\n\n/**\n * Determine if val is EventEmitter.\n * @private\n */\n\nfunction isEventEmitter (val) {\n return val instanceof EventEmitter\n}\n\n/**\n * Determine if stream is fs.ReadStream stream.\n * @private\n */\n\nfunction isFsReadStream (stream) {\n return stream instanceof ReadStream\n}\n\n/**\n * Determine if stream is Zlib stream.\n * @private\n */\n\nfunction isZlibStream (stream) {\n return stream instanceof Zlib.Gzip ||\n stream instanceof Zlib.Gunzip ||\n stream instanceof Zlib.Deflate ||\n stream instanceof Zlib.DeflateRaw ||\n stream instanceof Zlib.Inflate ||\n stream instanceof Zlib.InflateRaw ||\n stream instanceof Zlib.Unzip\n}\n\n/**\n * No-op function.\n * @private\n */\n\nfunction noop () {}\n\n/**\n * On drain handler to clear binding.\n * @private\n */\n\n// istanbul ignore next: node.js 0.8\nfunction onDrainClearBinding () {\n this._binding.clear()\n}\n\n/**\n * On open handler to close stream.\n * @private\n */\n\nfunction onOpenClose () {\n if (typeof this.fd === 'number') {\n // actually close down the fd\n this.close()\n }\n}\n", "/* eslint-disable node/no-deprecated-api */\n\n'use strict'\n\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\nvar safer = {}\n\nvar key\n\nfor (key in buffer) {\n if (!buffer.hasOwnProperty(key)) continue\n if (key === 'SlowBuffer' || key === 'Buffer') continue\n safer[key] = buffer[key]\n}\n\nvar Safer = safer.Buffer = {}\nfor (key in Buffer) {\n if (!Buffer.hasOwnProperty(key)) continue\n if (key === 'allocUnsafe' || key === 'allocUnsafeSlow') continue\n Safer[key] = Buffer[key]\n}\n\nsafer.Buffer.prototype = Buffer.prototype\n\nif (!Safer.from || Safer.from === Uint8Array.from) {\n Safer.from = function (value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('The \"value\" argument must not be of type number. Received type ' + typeof value)\n }\n if (value && typeof value.length === 'undefined') {\n throw new TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type ' + typeof value)\n }\n return Buffer(value, encodingOrOffset, length)\n }\n}\n\nif (!Safer.alloc) {\n Safer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('The \"size\" argument must be of type number. Received type ' + typeof size)\n }\n if (size < 0 || size >= 2 * (1 << 30)) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n var buf = Buffer(size)\n if (!fill || fill.length === 0) {\n buf.fill(0)\n } else if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n return buf\n }\n}\n\nif (!safer.kStringMaxLength) {\n try {\n safer.kStringMaxLength = process.binding('buffer').kStringMaxLength\n } catch (e) {\n // we can't determine kStringMaxLength in environments where process.binding\n // is unsupported, so let's not set it\n }\n}\n\nif (!safer.constants) {\n safer.constants = {\n MAX_LENGTH: safer.kMaxLength\n }\n if (safer.kStringMaxLength) {\n safer.constants.MAX_STRING_LENGTH = safer.kStringMaxLength\n }\n}\n\nmodule.exports = safer\n", "\"use strict\";\n\nvar BOMChar = '\\uFEFF';\n\nexports.PrependBOM = PrependBOMWrapper\nfunction PrependBOMWrapper(encoder, options) {\n this.encoder = encoder;\n this.addBOM = true;\n}\n\nPrependBOMWrapper.prototype.write = function(str) {\n if (this.addBOM) {\n str = BOMChar + str;\n this.addBOM = false;\n }\n\n return this.encoder.write(str);\n}\n\nPrependBOMWrapper.prototype.end = function() {\n return this.encoder.end();\n}\n\n\n//------------------------------------------------------------------------------\n\nexports.StripBOM = StripBOMWrapper;\nfunction StripBOMWrapper(decoder, options) {\n this.decoder = decoder;\n this.pass = false;\n this.options = options || {};\n}\n\nStripBOMWrapper.prototype.write = function(buf) {\n var res = this.decoder.write(buf);\n if (this.pass || !res)\n return res;\n\n if (res[0] === BOMChar) {\n res = res.slice(1);\n if (typeof this.options.stripBOM === 'function')\n this.options.stripBOM();\n }\n\n this.pass = true;\n return res;\n}\n\nStripBOMWrapper.prototype.end = function() {\n return this.decoder.end();\n}\n\n", "\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// Export Node.js internal encodings.\n\nmodule.exports = {\n // Encodings\n utf8: { type: \"_internal\", bomAware: true},\n cesu8: { type: \"_internal\", bomAware: true},\n unicode11utf8: \"utf8\",\n\n ucs2: { type: \"_internal\", bomAware: true},\n utf16le: \"ucs2\",\n\n binary: { type: \"_internal\" },\n base64: { type: \"_internal\" },\n hex: { type: \"_internal\" },\n\n // Codec.\n _internal: InternalCodec,\n};\n\n//------------------------------------------------------------------------------\n\nfunction InternalCodec(codecOptions, iconv) {\n this.enc = codecOptions.encodingName;\n this.bomAware = codecOptions.bomAware;\n\n if (this.enc === \"base64\")\n this.encoder = InternalEncoderBase64;\n else if (this.enc === \"cesu8\") {\n this.enc = \"utf8\"; // Use utf8 for decoding.\n this.encoder = InternalEncoderCesu8;\n\n // Add decoder for versions of Node not supporting CESU-8\n if (Buffer.from('eda0bdedb2a9', 'hex').toString() !== '\uD83D\uDCA9') {\n this.decoder = InternalDecoderCesu8;\n this.defaultCharUnicode = iconv.defaultCharUnicode;\n }\n }\n}\n\nInternalCodec.prototype.encoder = InternalEncoder;\nInternalCodec.prototype.decoder = InternalDecoder;\n\n//------------------------------------------------------------------------------\n\n// We use node.js internal decoder. Its signature is the same as ours.\nvar StringDecoder = require('string_decoder').StringDecoder;\n\nif (!StringDecoder.prototype.end) // Node v0.8 doesn't have this method.\n StringDecoder.prototype.end = function() {};\n\n\nfunction InternalDecoder(options, codec) {\n StringDecoder.call(this, codec.enc);\n}\n\nInternalDecoder.prototype = StringDecoder.prototype;\n\n\n//------------------------------------------------------------------------------\n// Encoder is mostly trivial\n\nfunction InternalEncoder(options, codec) {\n this.enc = codec.enc;\n}\n\nInternalEncoder.prototype.write = function(str) {\n return Buffer.from(str, this.enc);\n}\n\nInternalEncoder.prototype.end = function() {\n}\n\n\n//------------------------------------------------------------------------------\n// Except base64 encoder, which must keep its state.\n\nfunction InternalEncoderBase64(options, codec) {\n this.prevStr = '';\n}\n\nInternalEncoderBase64.prototype.write = function(str) {\n str = this.prevStr + str;\n var completeQuads = str.length - (str.length % 4);\n this.prevStr = str.slice(completeQuads);\n str = str.slice(0, completeQuads);\n\n return Buffer.from(str, \"base64\");\n}\n\nInternalEncoderBase64.prototype.end = function() {\n return Buffer.from(this.prevStr, \"base64\");\n}\n\n\n//------------------------------------------------------------------------------\n// CESU-8 encoder is also special.\n\nfunction InternalEncoderCesu8(options, codec) {\n}\n\nInternalEncoderCesu8.prototype.write = function(str) {\n var buf = Buffer.alloc(str.length * 3), bufIdx = 0;\n for (var i = 0; i < str.length; i++) {\n var charCode = str.charCodeAt(i);\n // Naive implementation, but it works because CESU-8 is especially easy\n // to convert from UTF-16 (which all JS strings are encoded in).\n if (charCode < 0x80)\n buf[bufIdx++] = charCode;\n else if (charCode < 0x800) {\n buf[bufIdx++] = 0xC0 + (charCode >>> 6);\n buf[bufIdx++] = 0x80 + (charCode & 0x3f);\n }\n else { // charCode will always be < 0x10000 in javascript.\n buf[bufIdx++] = 0xE0 + (charCode >>> 12);\n buf[bufIdx++] = 0x80 + ((charCode >>> 6) & 0x3f);\n buf[bufIdx++] = 0x80 + (charCode & 0x3f);\n }\n }\n return buf.slice(0, bufIdx);\n}\n\nInternalEncoderCesu8.prototype.end = function() {\n}\n\n//------------------------------------------------------------------------------\n// CESU-8 decoder is not implemented in Node v4.0+\n\nfunction InternalDecoderCesu8(options, codec) {\n this.acc = 0;\n this.contBytes = 0;\n this.accBytes = 0;\n this.defaultCharUnicode = codec.defaultCharUnicode;\n}\n\nInternalDecoderCesu8.prototype.write = function(buf) {\n var acc = this.acc, contBytes = this.contBytes, accBytes = this.accBytes, \n res = '';\n for (var i = 0; i < buf.length; i++) {\n var curByte = buf[i];\n if ((curByte & 0xC0) !== 0x80) { // Leading byte\n if (contBytes > 0) { // Previous code is invalid\n res += this.defaultCharUnicode;\n contBytes = 0;\n }\n\n if (curByte < 0x80) { // Single-byte code\n res += String.fromCharCode(curByte);\n } else if (curByte < 0xE0) { // Two-byte code\n acc = curByte & 0x1F;\n contBytes = 1; accBytes = 1;\n } else if (curByte < 0xF0) { // Three-byte code\n acc = curByte & 0x0F;\n contBytes = 2; accBytes = 1;\n } else { // Four or more are not supported for CESU-8.\n res += this.defaultCharUnicode;\n }\n } else { // Continuation byte\n if (contBytes > 0) { // We're waiting for it.\n acc = (acc << 6) | (curByte & 0x3f);\n contBytes--; accBytes++;\n if (contBytes === 0) {\n // Check for overlong encoding, but support Modified UTF-8 (encoding NULL as C0 80)\n if (accBytes === 2 && acc < 0x80 && acc > 0)\n res += this.defaultCharUnicode;\n else if (accBytes === 3 && acc < 0x800)\n res += this.defaultCharUnicode;\n else\n // Actually add character.\n res += String.fromCharCode(acc);\n }\n } else { // Unexpected continuation byte\n res += this.defaultCharUnicode;\n }\n }\n }\n this.acc = acc; this.contBytes = contBytes; this.accBytes = accBytes;\n return res;\n}\n\nInternalDecoderCesu8.prototype.end = function() {\n var res = 0;\n if (this.contBytes > 0)\n res += this.defaultCharUnicode;\n return res;\n}\n", "\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// Note: UTF16-LE (or UCS2) codec is Node.js native. See encodings/internal.js\n\n// == UTF16-BE codec. ==========================================================\n\nexports.utf16be = Utf16BECodec;\nfunction Utf16BECodec() {\n}\n\nUtf16BECodec.prototype.encoder = Utf16BEEncoder;\nUtf16BECodec.prototype.decoder = Utf16BEDecoder;\nUtf16BECodec.prototype.bomAware = true;\n\n\n// -- Encoding\n\nfunction Utf16BEEncoder() {\n}\n\nUtf16BEEncoder.prototype.write = function(str) {\n var buf = Buffer.from(str, 'ucs2');\n for (var i = 0; i < buf.length; i += 2) {\n var tmp = buf[i]; buf[i] = buf[i+1]; buf[i+1] = tmp;\n }\n return buf;\n}\n\nUtf16BEEncoder.prototype.end = function() {\n}\n\n\n// -- Decoding\n\nfunction Utf16BEDecoder() {\n this.overflowByte = -1;\n}\n\nUtf16BEDecoder.prototype.write = function(buf) {\n if (buf.length == 0)\n return '';\n\n var buf2 = Buffer.alloc(buf.length + 1),\n i = 0, j = 0;\n\n if (this.overflowByte !== -1) {\n buf2[0] = buf[0];\n buf2[1] = this.overflowByte;\n i = 1; j = 2;\n }\n\n for (; i < buf.length-1; i += 2, j+= 2) {\n buf2[j] = buf[i+1];\n buf2[j+1] = buf[i];\n }\n\n this.overflowByte = (i == buf.length-1) ? buf[buf.length-1] : -1;\n\n return buf2.slice(0, j).toString('ucs2');\n}\n\nUtf16BEDecoder.prototype.end = function() {\n}\n\n\n// == UTF-16 codec =============================================================\n// Decoder chooses automatically from UTF-16LE and UTF-16BE using BOM and space-based heuristic.\n// Defaults to UTF-16LE, as it's prevalent and default in Node.\n// http://en.wikipedia.org/wiki/UTF-16 and http://encoding.spec.whatwg.org/#utf-16le\n// Decoder default can be changed: iconv.decode(buf, 'utf16', {defaultEncoding: 'utf-16be'});\n\n// Encoder uses UTF-16LE and prepends BOM (which can be overridden with addBOM: false).\n\nexports.utf16 = Utf16Codec;\nfunction Utf16Codec(codecOptions, iconv) {\n this.iconv = iconv;\n}\n\nUtf16Codec.prototype.encoder = Utf16Encoder;\nUtf16Codec.prototype.decoder = Utf16Decoder;\n\n\n// -- Encoding (pass-through)\n\nfunction Utf16Encoder(options, codec) {\n options = options || {};\n if (options.addBOM === undefined)\n options.addBOM = true;\n this.encoder = codec.iconv.getEncoder('utf-16le', options);\n}\n\nUtf16Encoder.prototype.write = function(str) {\n return this.encoder.write(str);\n}\n\nUtf16Encoder.prototype.end = function() {\n return this.encoder.end();\n}\n\n\n// -- Decoding\n\nfunction Utf16Decoder(options, codec) {\n this.decoder = null;\n this.initialBytes = [];\n this.initialBytesLen = 0;\n\n this.options = options || {};\n this.iconv = codec.iconv;\n}\n\nUtf16Decoder.prototype.write = function(buf) {\n if (!this.decoder) {\n // Codec is not chosen yet. Accumulate initial bytes.\n this.initialBytes.push(buf);\n this.initialBytesLen += buf.length;\n \n if (this.initialBytesLen < 16) // We need more bytes to use space heuristic (see below)\n return '';\n\n // We have enough bytes -> detect endianness.\n var buf = Buffer.concat(this.initialBytes),\n encoding = detectEncoding(buf, this.options.defaultEncoding);\n this.decoder = this.iconv.getDecoder(encoding, this.options);\n this.initialBytes.length = this.initialBytesLen = 0;\n }\n\n return this.decoder.write(buf);\n}\n\nUtf16Decoder.prototype.end = function() {\n if (!this.decoder) {\n var buf = Buffer.concat(this.initialBytes),\n encoding = detectEncoding(buf, this.options.defaultEncoding);\n this.decoder = this.iconv.getDecoder(encoding, this.options);\n\n var res = this.decoder.write(buf),\n trail = this.decoder.end();\n\n return trail ? (res + trail) : res;\n }\n return this.decoder.end();\n}\n\nfunction detectEncoding(buf, defaultEncoding) {\n var enc = defaultEncoding || 'utf-16le';\n\n if (buf.length >= 2) {\n // Check BOM.\n if (buf[0] == 0xFE && buf[1] == 0xFF) // UTF-16BE BOM\n enc = 'utf-16be';\n else if (buf[0] == 0xFF && buf[1] == 0xFE) // UTF-16LE BOM\n enc = 'utf-16le';\n else {\n // No BOM found. Try to deduce encoding from initial content.\n // Most of the time, the content has ASCII chars (U+00**), but the opposite (U+**00) is uncommon.\n // So, we count ASCII as if it was LE or BE, and decide from that.\n var asciiCharsLE = 0, asciiCharsBE = 0, // Counts of chars in both positions\n _len = Math.min(buf.length - (buf.length % 2), 64); // Len is always even.\n\n for (var i = 0; i < _len; i += 2) {\n if (buf[i] === 0 && buf[i+1] !== 0) asciiCharsBE++;\n if (buf[i] !== 0 && buf[i+1] === 0) asciiCharsLE++;\n }\n\n if (asciiCharsBE > asciiCharsLE)\n enc = 'utf-16be';\n else if (asciiCharsBE < asciiCharsLE)\n enc = 'utf-16le';\n }\n }\n\n return enc;\n}\n\n\n", "\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// UTF-7 codec, according to https://tools.ietf.org/html/rfc2152\n// See also below a UTF-7-IMAP codec, according to http://tools.ietf.org/html/rfc3501#section-5.1.3\n\nexports.utf7 = Utf7Codec;\nexports.unicode11utf7 = 'utf7'; // Alias UNICODE-1-1-UTF-7\nfunction Utf7Codec(codecOptions, iconv) {\n this.iconv = iconv;\n};\n\nUtf7Codec.prototype.encoder = Utf7Encoder;\nUtf7Codec.prototype.decoder = Utf7Decoder;\nUtf7Codec.prototype.bomAware = true;\n\n\n// -- Encoding\n\nvar nonDirectChars = /[^A-Za-z0-9'\\(\\),-\\.\\/:\\? \\n\\r\\t]+/g;\n\nfunction Utf7Encoder(options, codec) {\n this.iconv = codec.iconv;\n}\n\nUtf7Encoder.prototype.write = function(str) {\n // Naive implementation.\n // Non-direct chars are encoded as \"+<base64>-\"; single \"+\" char is encoded as \"+-\".\n return Buffer.from(str.replace(nonDirectChars, function(chunk) {\n return \"+\" + (chunk === '+' ? '' : \n this.iconv.encode(chunk, 'utf16-be').toString('base64').replace(/=+$/, '')) \n + \"-\";\n }.bind(this)));\n}\n\nUtf7Encoder.prototype.end = function() {\n}\n\n\n// -- Decoding\n\nfunction Utf7Decoder(options, codec) {\n this.iconv = codec.iconv;\n this.inBase64 = false;\n this.base64Accum = '';\n}\n\nvar base64Regex = /[A-Za-z0-9\\/+]/;\nvar base64Chars = [];\nfor (var i = 0; i < 256; i++)\n base64Chars[i] = base64Regex.test(String.fromCharCode(i));\n\nvar plusChar = '+'.charCodeAt(0), \n minusChar = '-'.charCodeAt(0),\n andChar = '&'.charCodeAt(0);\n\nUtf7Decoder.prototype.write = function(buf) {\n var res = \"\", lastI = 0,\n inBase64 = this.inBase64,\n base64Accum = this.base64Accum;\n\n // The decoder is more involved as we must handle chunks in stream.\n\n for (var i = 0; i < buf.length; i++) {\n if (!inBase64) { // We're in direct mode.\n // Write direct chars until '+'\n if (buf[i] == plusChar) {\n res += this.iconv.decode(buf.slice(lastI, i), \"ascii\"); // Write direct chars.\n lastI = i+1;\n inBase64 = true;\n }\n } else { // We decode base64.\n if (!base64Chars[buf[i]]) { // Base64 ended.\n if (i == lastI && buf[i] == minusChar) {// \"+-\" -> \"+\"\n res += \"+\";\n } else {\n var b64str = base64Accum + buf.slice(lastI, i).toString();\n res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n }\n\n if (buf[i] != minusChar) // Minus is absorbed after base64.\n i--;\n\n lastI = i+1;\n inBase64 = false;\n base64Accum = '';\n }\n }\n }\n\n if (!inBase64) {\n res += this.iconv.decode(buf.slice(lastI), \"ascii\"); // Write direct chars.\n } else {\n var b64str = base64Accum + buf.slice(lastI).toString();\n\n var canBeDecoded = b64str.length - (b64str.length % 8); // Minimal chunk: 2 quads -> 2x3 bytes -> 3 chars.\n base64Accum = b64str.slice(canBeDecoded); // The rest will be decoded in future.\n b64str = b64str.slice(0, canBeDecoded);\n\n res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n }\n\n this.inBase64 = inBase64;\n this.base64Accum = base64Accum;\n\n return res;\n}\n\nUtf7Decoder.prototype.end = function() {\n var res = \"\";\n if (this.inBase64 && this.base64Accum.length > 0)\n res = this.iconv.decode(Buffer.from(this.base64Accum, 'base64'), \"utf16-be\");\n\n this.inBase64 = false;\n this.base64Accum = '';\n return res;\n}\n\n\n// UTF-7-IMAP codec.\n// RFC3501 Sec. 5.1.3 Modified UTF-7 (http://tools.ietf.org/html/rfc3501#section-5.1.3)\n// Differences:\n// * Base64 part is started by \"&\" instead of \"+\"\n// * Direct characters are 0x20-0x7E, except \"&\" (0x26)\n// * In Base64, \",\" is used instead of \"/\"\n// * Base64 must not be used to represent direct characters.\n// * No implicit shift back from Base64 (should always end with '-')\n// * String must end in non-shifted position.\n// * \"-&\" while in base64 is not allowed.\n\n\nexports.utf7imap = Utf7IMAPCodec;\nfunction Utf7IMAPCodec(codecOptions, iconv) {\n this.iconv = iconv;\n};\n\nUtf7IMAPCodec.prototype.encoder = Utf7IMAPEncoder;\nUtf7IMAPCodec.prototype.decoder = Utf7IMAPDecoder;\nUtf7IMAPCodec.prototype.bomAware = true;\n\n\n// -- Encoding\n\nfunction Utf7IMAPEncoder(options, codec) {\n this.iconv = codec.iconv;\n this.inBase64 = false;\n this.base64Accum = Buffer.alloc(6);\n this.base64AccumIdx = 0;\n}\n\nUtf7IMAPEncoder.prototype.write = function(str) {\n var inBase64 = this.inBase64,\n base64Accum = this.base64Accum,\n base64AccumIdx = this.base64AccumIdx,\n buf = Buffer.alloc(str.length*5 + 10), bufIdx = 0;\n\n for (var i = 0; i < str.length; i++) {\n var uChar = str.charCodeAt(i);\n if (0x20 <= uChar && uChar <= 0x7E) { // Direct character or '&'.\n if (inBase64) {\n if (base64AccumIdx > 0) {\n bufIdx += buf.write(base64Accum.slice(0, base64AccumIdx).toString('base64').replace(/\\//g, ',').replace(/=+$/, ''), bufIdx);\n base64AccumIdx = 0;\n }\n\n buf[bufIdx++] = minusChar; // Write '-', then go to direct mode.\n inBase64 = false;\n }\n\n if (!inBase64) {\n buf[bufIdx++] = uChar; // Write direct character\n\n if (uChar === andChar) // Ampersand -> '&-'\n buf[bufIdx++] = minusChar;\n }\n\n } else { // Non-direct character\n if (!inBase64) {\n buf[bufIdx++] = andChar; // Write '&', then go to base64 mode.\n inBase64 = true;\n }\n if (inBase64) {\n base64Accum[base64AccumIdx++] = uChar >> 8;\n base64Accum[base64AccumIdx++] = uChar & 0xFF;\n\n if (base64AccumIdx == base64Accum.length) {\n bufIdx += buf.write(base64Accum.toString('base64').replace(/\\//g, ','), bufIdx);\n base64AccumIdx = 0;\n }\n }\n }\n }\n\n this.inBase64 = inBase64;\n this.base64AccumIdx = base64AccumIdx;\n\n return buf.slice(0, bufIdx);\n}\n\nUtf7IMAPEncoder.prototype.end = function() {\n var buf = Buffer.alloc(10), bufIdx = 0;\n if (this.inBase64) {\n if (this.base64AccumIdx > 0) {\n bufIdx += buf.write(this.base64Accum.slice(0, this.base64AccumIdx).toString('base64').replace(/\\//g, ',').replace(/=+$/, ''), bufIdx);\n this.base64AccumIdx = 0;\n }\n\n buf[bufIdx++] = minusChar; // Write '-', then go to direct mode.\n this.inBase64 = false;\n }\n\n return buf.slice(0, bufIdx);\n}\n\n\n// -- Decoding\n\nfunction Utf7IMAPDecoder(options, codec) {\n this.iconv = codec.iconv;\n this.inBase64 = false;\n this.base64Accum = '';\n}\n\nvar base64IMAPChars = base64Chars.slice();\nbase64IMAPChars[','.charCodeAt(0)] = true;\n\nUtf7IMAPDecoder.prototype.write = function(buf) {\n var res = \"\", lastI = 0,\n inBase64 = this.inBase64,\n base64Accum = this.base64Accum;\n\n // The decoder is more involved as we must handle chunks in stream.\n // It is forgiving, closer to standard UTF-7 (for example, '-' is optional at the end).\n\n for (var i = 0; i < buf.length; i++) {\n if (!inBase64) { // We're in direct mode.\n // Write direct chars until '&'\n if (buf[i] == andChar) {\n res += this.iconv.decode(buf.slice(lastI, i), \"ascii\"); // Write direct chars.\n lastI = i+1;\n inBase64 = true;\n }\n } else { // We decode base64.\n if (!base64IMAPChars[buf[i]]) { // Base64 ended.\n if (i == lastI && buf[i] == minusChar) { // \"&-\" -> \"&\"\n res += \"&\";\n } else {\n var b64str = base64Accum + buf.slice(lastI, i).toString().replace(/,/g, '/');\n res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n }\n\n if (buf[i] != minusChar) // Minus may be absorbed after base64.\n i--;\n\n lastI = i+1;\n inBase64 = false;\n base64Accum = '';\n }\n }\n }\n\n if (!inBase64) {\n res += this.iconv.decode(buf.slice(lastI), \"ascii\"); // Write direct chars.\n } else {\n var b64str = base64Accum + buf.slice(lastI).toString().replace(/,/g, '/');\n\n var canBeDecoded = b64str.length - (b64str.length % 8); // Minimal chunk: 2 quads -> 2x3 bytes -> 3 chars.\n base64Accum = b64str.slice(canBeDecoded); // The rest will be decoded in future.\n b64str = b64str.slice(0, canBeDecoded);\n\n res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n }\n\n this.inBase64 = inBase64;\n this.base64Accum = base64Accum;\n\n return res;\n}\n\nUtf7IMAPDecoder.prototype.end = function() {\n var res = \"\";\n if (this.inBase64 && this.base64Accum.length > 0)\n res = this.iconv.decode(Buffer.from(this.base64Accum, 'base64'), \"utf16-be\");\n\n this.inBase64 = false;\n this.base64Accum = '';\n return res;\n}\n\n\n", "\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// Single-byte codec. Needs a 'chars' string parameter that contains 256 or 128 chars that\n// correspond to encoded bytes (if 128 - then lower half is ASCII). \n\nexports._sbcs = SBCSCodec;\nfunction SBCSCodec(codecOptions, iconv) {\n if (!codecOptions)\n throw new Error(\"SBCS codec is called without the data.\")\n \n // Prepare char buffer for decoding.\n if (!codecOptions.chars || (codecOptions.chars.length !== 128 && codecOptions.chars.length !== 256))\n throw new Error(\"Encoding '\"+codecOptions.type+\"' has incorrect 'chars' (must be of len 128 or 256)\");\n \n if (codecOptions.chars.length === 128) {\n var asciiString = \"\";\n for (var i = 0; i < 128; i++)\n asciiString += String.fromCharCode(i);\n codecOptions.chars = asciiString + codecOptions.chars;\n }\n\n this.decodeBuf = Buffer.from(codecOptions.chars, 'ucs2');\n \n // Encoding buffer.\n var encodeBuf = Buffer.alloc(65536, iconv.defaultCharSingleByte.charCodeAt(0));\n\n for (var i = 0; i < codecOptions.chars.length; i++)\n encodeBuf[codecOptions.chars.charCodeAt(i)] = i;\n\n this.encodeBuf = encodeBuf;\n}\n\nSBCSCodec.prototype.encoder = SBCSEncoder;\nSBCSCodec.prototype.decoder = SBCSDecoder;\n\n\nfunction SBCSEncoder(options, codec) {\n this.encodeBuf = codec.encodeBuf;\n}\n\nSBCSEncoder.prototype.write = function(str) {\n var buf = Buffer.alloc(str.length);\n for (var i = 0; i < str.length; i++)\n buf[i] = this.encodeBuf[str.charCodeAt(i)];\n \n return buf;\n}\n\nSBCSEncoder.prototype.end = function() {\n}\n\n\nfunction SBCSDecoder(options, codec) {\n this.decodeBuf = codec.decodeBuf;\n}\n\nSBCSDecoder.prototype.write = function(buf) {\n // Strings are immutable in JS -> we use ucs2 buffer to speed up computations.\n var decodeBuf = this.decodeBuf;\n var newBuf = Buffer.alloc(buf.length*2);\n var idx1 = 0, idx2 = 0;\n for (var i = 0; i < buf.length; i++) {\n idx1 = buf[i]*2; idx2 = i*2;\n newBuf[idx2] = decodeBuf[idx1];\n newBuf[idx2+1] = decodeBuf[idx1+1];\n }\n return newBuf.toString('ucs2');\n}\n\nSBCSDecoder.prototype.end = function() {\n}\n", "\"use strict\";\n\n// Manually added data to be used by sbcs codec in addition to generated one.\n\nmodule.exports = {\n // Not supported by iconv, not sure why.\n \"10029\": \"maccenteuro\",\n \"maccenteuro\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C4\u0100\u0101\u00C9\u0104\u00D6\u00DC\u00E1\u0105\u010C\u00E4\u010D\u0106\u0107\u00E9\u0179\u017A\u010E\u00ED\u010F\u0112\u0113\u0116\u00F3\u0117\u00F4\u00F6\u00F5\u00FA\u011A\u011B\u00FC\u2020\u00B0\u0118\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u00A9\u2122\u0119\u00A8\u2260\u0123\u012E\u012F\u012A\u2264\u2265\u012B\u0136\u2202\u2211\u0142\u013B\u013C\u013D\u013E\u0139\u013A\u0145\u0146\u0143\u00AC\u221A\u0144\u0147\u2206\u00AB\u00BB\u2026\u00A0\u0148\u0150\u00D5\u0151\u014C\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\u014D\u0154\u0155\u0158\u2039\u203A\u0159\u0156\u0157\u0160\u201A\u201E\u0161\u015A\u015B\u00C1\u0164\u0165\u00CD\u017D\u017E\u016A\u00D3\u00D4\u016B\u016E\u00DA\u016F\u0170\u0171\u0172\u0173\u00DD\u00FD\u0137\u017B\u0141\u017C\u0122\u02C7\"\n },\n\n \"808\": \"cp808\",\n \"ibm808\": \"cp808\",\n \"cp808\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u0401\u0451\u0404\u0454\u0407\u0457\u040E\u045E\u00B0\u2219\u00B7\u221A\u2116\u20AC\u25A0\u00A0\"\n },\n\n \"mik\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u2514\u2534\u252C\u251C\u2500\u253C\u2563\u2551\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2510\u2591\u2592\u2593\u2502\u2524\u2116\u00A7\u2557\u255D\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n },\n\n // Aliases of generated encodings.\n \"ascii8bit\": \"ascii\",\n \"usascii\": \"ascii\",\n \"ansix34\": \"ascii\",\n \"ansix341968\": \"ascii\",\n \"ansix341986\": \"ascii\",\n \"csascii\": \"ascii\",\n \"cp367\": \"ascii\",\n \"ibm367\": \"ascii\",\n \"isoir6\": \"ascii\",\n \"iso646us\": \"ascii\",\n \"iso646irv\": \"ascii\",\n \"us\": \"ascii\",\n\n \"latin1\": \"iso88591\",\n \"latin2\": \"iso88592\",\n \"latin3\": \"iso88593\",\n \"latin4\": \"iso88594\",\n \"latin5\": \"iso88599\",\n \"latin6\": \"iso885910\",\n \"latin7\": \"iso885913\",\n \"latin8\": \"iso885914\",\n \"latin9\": \"iso885915\",\n \"latin10\": \"iso885916\",\n\n \"csisolatin1\": \"iso88591\",\n \"csisolatin2\": \"iso88592\",\n \"csisolatin3\": \"iso88593\",\n \"csisolatin4\": \"iso88594\",\n \"csisolatincyrillic\": \"iso88595\",\n \"csisolatinarabic\": \"iso88596\",\n \"csisolatingreek\" : \"iso88597\",\n \"csisolatinhebrew\": \"iso88598\",\n \"csisolatin5\": \"iso88599\",\n \"csisolatin6\": \"iso885910\",\n\n \"l1\": \"iso88591\",\n \"l2\": \"iso88592\",\n \"l3\": \"iso88593\",\n \"l4\": \"iso88594\",\n \"l5\": \"iso88599\",\n \"l6\": \"iso885910\",\n \"l7\": \"iso885913\",\n \"l8\": \"iso885914\",\n \"l9\": \"iso885915\",\n \"l10\": \"iso885916\",\n\n \"isoir14\": \"iso646jp\",\n \"isoir57\": \"iso646cn\",\n \"isoir100\": \"iso88591\",\n \"isoir101\": \"iso88592\",\n \"isoir109\": \"iso88593\",\n \"isoir110\": \"iso88594\",\n \"isoir144\": \"iso88595\",\n \"isoir127\": \"iso88596\",\n \"isoir126\": \"iso88597\",\n \"isoir138\": \"iso88598\",\n \"isoir148\": \"iso88599\",\n \"isoir157\": \"iso885910\",\n \"isoir166\": \"tis620\",\n \"isoir179\": \"iso885913\",\n \"isoir199\": \"iso885914\",\n \"isoir203\": \"iso885915\",\n \"isoir226\": \"iso885916\",\n\n \"cp819\": \"iso88591\",\n \"ibm819\": \"iso88591\",\n\n \"cyrillic\": \"iso88595\",\n\n \"arabic\": \"iso88596\",\n \"arabic8\": \"iso88596\",\n \"ecma114\": \"iso88596\",\n \"asmo708\": \"iso88596\",\n\n \"greek\" : \"iso88597\",\n \"greek8\" : \"iso88597\",\n \"ecma118\" : \"iso88597\",\n \"elot928\" : \"iso88597\",\n\n \"hebrew\": \"iso88598\",\n \"hebrew8\": \"iso88598\",\n\n \"turkish\": \"iso88599\",\n \"turkish8\": \"iso88599\",\n\n \"thai\": \"iso885911\",\n \"thai8\": \"iso885911\",\n\n \"celtic\": \"iso885914\",\n \"celtic8\": \"iso885914\",\n \"isoceltic\": \"iso885914\",\n\n \"tis6200\": \"tis620\",\n \"tis62025291\": \"tis620\",\n \"tis62025330\": \"tis620\",\n\n \"10000\": \"macroman\",\n \"10006\": \"macgreek\",\n \"10007\": \"maccyrillic\",\n \"10079\": \"maciceland\",\n \"10081\": \"macturkish\",\n\n \"cspc8codepage437\": \"cp437\",\n \"cspc775baltic\": \"cp775\",\n \"cspc850multilingual\": \"cp850\",\n \"cspcp852\": \"cp852\",\n \"cspc862latinhebrew\": \"cp862\",\n \"cpgr\": \"cp869\",\n\n \"msee\": \"cp1250\",\n \"mscyrl\": \"cp1251\",\n \"msansi\": \"cp1252\",\n \"msgreek\": \"cp1253\",\n \"msturk\": \"cp1254\",\n \"mshebr\": \"cp1255\",\n \"msarab\": \"cp1256\",\n \"winbaltrim\": \"cp1257\",\n\n \"cp20866\": \"koi8r\",\n \"20866\": \"koi8r\",\n \"ibm878\": \"koi8r\",\n \"cskoi8r\": \"koi8r\",\n\n \"cp21866\": \"koi8u\",\n \"21866\": \"koi8u\",\n \"ibm1168\": \"koi8u\",\n\n \"strk10482002\": \"rk1048\",\n\n \"tcvn5712\": \"tcvn\",\n \"tcvn57121\": \"tcvn\",\n\n \"gb198880\": \"iso646cn\",\n \"cn\": \"iso646cn\",\n\n \"csiso14jisc6220ro\": \"iso646jp\",\n \"jisc62201969ro\": \"iso646jp\",\n \"jp\": \"iso646jp\",\n\n \"cshproman8\": \"hproman8\",\n \"r8\": \"hproman8\",\n \"roman8\": \"hproman8\",\n \"xroman8\": \"hproman8\",\n \"ibm1051\": \"hproman8\",\n\n \"mac\": \"macintosh\",\n \"csmacintosh\": \"macintosh\",\n};\n\n", "\"use strict\";\n\n// Generated data for sbcs codec. Don't edit manually. Regenerate using generation/gen-sbcs.js script.\nmodule.exports = {\n \"437\": \"cp437\",\n \"737\": \"cp737\",\n \"775\": \"cp775\",\n \"850\": \"cp850\",\n \"852\": \"cp852\",\n \"855\": \"cp855\",\n \"856\": \"cp856\",\n \"857\": \"cp857\",\n \"858\": \"cp858\",\n \"860\": \"cp860\",\n \"861\": \"cp861\",\n \"862\": \"cp862\",\n \"863\": \"cp863\",\n \"864\": \"cp864\",\n \"865\": \"cp865\",\n \"866\": \"cp866\",\n \"869\": \"cp869\",\n \"874\": \"windows874\",\n \"922\": \"cp922\",\n \"1046\": \"cp1046\",\n \"1124\": \"cp1124\",\n \"1125\": \"cp1125\",\n \"1129\": \"cp1129\",\n \"1133\": \"cp1133\",\n \"1161\": \"cp1161\",\n \"1162\": \"cp1162\",\n \"1163\": \"cp1163\",\n \"1250\": \"windows1250\",\n \"1251\": \"windows1251\",\n \"1252\": \"windows1252\",\n \"1253\": \"windows1253\",\n \"1254\": \"windows1254\",\n \"1255\": \"windows1255\",\n \"1256\": \"windows1256\",\n \"1257\": \"windows1257\",\n \"1258\": \"windows1258\",\n \"28591\": \"iso88591\",\n \"28592\": \"iso88592\",\n \"28593\": \"iso88593\",\n \"28594\": \"iso88594\",\n \"28595\": \"iso88595\",\n \"28596\": \"iso88596\",\n \"28597\": \"iso88597\",\n \"28598\": \"iso88598\",\n \"28599\": \"iso88599\",\n \"28600\": \"iso885910\",\n \"28601\": \"iso885911\",\n \"28603\": \"iso885913\",\n \"28604\": \"iso885914\",\n \"28605\": \"iso885915\",\n \"28606\": \"iso885916\",\n \"windows874\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u20AC\uFFFD\uFFFD\uFFFD\uFFFD\u2026\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u00A0\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFFFD\uFFFD\uFFFD\uFFFD\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\uFFFD\uFFFD\uFFFD\uFFFD\"\n },\n \"win874\": \"windows874\",\n \"cp874\": \"windows874\",\n \"windows1250\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u20AC\uFFFD\u201A\uFFFD\u201E\u2026\u2020\u2021\uFFFD\u2030\u0160\u2039\u015A\u0164\u017D\u0179\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\u0161\u203A\u015B\u0165\u017E\u017A\u00A0\u02C7\u02D8\u0141\u00A4\u0104\u00A6\u00A7\u00A8\u00A9\u015E\u00AB\u00AC\u00AD\u00AE\u017B\u00B0\u00B1\u02DB\u0142\u00B4\u00B5\u00B6\u00B7\u00B8\u0105\u015F\u00BB\u013D\u02DD\u013E\u017C\u0154\u00C1\u00C2\u0102\u00C4\u0139\u0106\u00C7\u010C\u00C9\u0118\u00CB\u011A\u00CD\u00CE\u010E\u0110\u0143\u0147\u00D3\u00D4\u0150\u00D6\u00D7\u0158\u016E\u00DA\u0170\u00DC\u00DD\u0162\u00DF\u0155\u00E1\u00E2\u0103\u00E4\u013A\u0107\u00E7\u010D\u00E9\u0119\u00EB\u011B\u00ED\u00EE\u010F\u0111\u0144\u0148\u00F3\u00F4\u0151\u00F6\u00F7\u0159\u016F\u00FA\u0171\u00FC\u00FD\u0163\u02D9\"\n },\n \"win1250\": \"windows1250\",\n \"cp1250\": \"windows1250\",\n \"windows1251\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0402\u0403\u201A\u0453\u201E\u2026\u2020\u2021\u20AC\u2030\u0409\u2039\u040A\u040C\u040B\u040F\u0452\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\u0459\u203A\u045A\u045C\u045B\u045F\u00A0\u040E\u045E\u0408\u00A4\u0490\u00A6\u00A7\u0401\u00A9\u0404\u00AB\u00AC\u00AD\u00AE\u0407\u00B0\u00B1\u0406\u0456\u0491\u00B5\u00B6\u00B7\u0451\u2116\u0454\u00BB\u0458\u0405\u0455\u0457\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\"\n },\n \"win1251\": \"windows1251\",\n \"cp1251\": \"windows1251\",\n \"windows1252\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0160\u2039\u0152\uFFFD\u017D\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\u0161\u203A\u0153\uFFFD\u017E\u0178\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u00D0\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u00DD\u00DE\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u00FE\u00FF\"\n },\n \"win1252\": \"windows1252\",\n \"cp1252\": \"windows1252\",\n \"windows1253\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\uFFFD\u2030\uFFFD\u2039\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\uFFFD\u203A\uFFFD\uFFFD\uFFFD\uFFFD\u00A0\u0385\u0386\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\uFFFD\u00AB\u00AC\u00AD\u00AE\u2015\u00B0\u00B1\u00B2\u00B3\u0384\u00B5\u00B6\u00B7\u0388\u0389\u038A\u00BB\u038C\u00BD\u038E\u038F\u0390\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\uFFFD\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03AA\u03AB\u03AC\u03AD\u03AE\u03AF\u03B0\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C2\u03C3\u03C4\u03C5\u03C6\u03C7\u03C8\u03C9\u03CA\u03CB\u03CC\u03CD\u03CE\uFFFD\"\n },\n \"win1253\": \"windows1253\",\n \"cp1253\": \"windows1253\",\n \"windows1254\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0160\u2039\u0152\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\u0161\u203A\u0153\uFFFD\uFFFD\u0178\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u011E\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u0130\u015E\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u011F\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u0131\u015F\u00FF\"\n },\n \"win1254\": \"windows1254\",\n \"cp1254\": \"windows1254\",\n \"windows1255\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\uFFFD\u2039\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\uFFFD\u203A\uFFFD\uFFFD\uFFFD\uFFFD\u00A0\u00A1\u00A2\u00A3\u20AA\u00A5\u00A6\u00A7\u00A8\u00A9\u00D7\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00F7\u00BB\u00BC\u00BD\u00BE\u00BF\u05B0\u05B1\u05B2\u05B3\u05B4\u05B5\u05B6\u05B7\u05B8\u05B9\u05BA\u05BB\u05BC\u05BD\u05BE\u05BF\u05C0\u05C1\u05C2\u05C3\u05F0\u05F1\u05F2\u05F3\u05F4\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\uFFFD\uFFFD\u200E\u200F\uFFFD\"\n },\n \"win1255\": \"windows1255\",\n \"cp1255\": \"windows1255\",\n \"windows1256\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u20AC\u067E\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0679\u2039\u0152\u0686\u0698\u0688\u06AF\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u06A9\u2122\u0691\u203A\u0153\u200C\u200D\u06BA\u00A0\u060C\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u06BE\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u061B\u00BB\u00BC\u00BD\u00BE\u061F\u06C1\u0621\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629\u062A\u062B\u062C\u062D\u062E\u062F\u0630\u0631\u0632\u0633\u0634\u0635\u0636\u00D7\u0637\u0638\u0639\u063A\u0640\u0641\u0642\u0643\u00E0\u0644\u00E2\u0645\u0646\u0647\u0648\u00E7\u00E8\u00E9\u00EA\u00EB\u0649\u064A\u00EE\u00EF\u064B\u064C\u064D\u064E\u00F4\u064F\u0650\u00F7\u0651\u00F9\u0652\u00FB\u00FC\u200E\u200F\u06D2\"\n },\n \"win1256\": \"windows1256\",\n \"cp1256\": \"windows1256\",\n \"windows1257\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u20AC\uFFFD\u201A\uFFFD\u201E\u2026\u2020\u2021\uFFFD\u2030\uFFFD\u2039\uFFFD\u00A8\u02C7\u00B8\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\uFFFD\u203A\uFFFD\u00AF\u02DB\uFFFD\u00A0\uFFFD\u00A2\u00A3\u00A4\uFFFD\u00A6\u00A7\u00D8\u00A9\u0156\u00AB\u00AC\u00AD\u00AE\u00C6\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00F8\u00B9\u0157\u00BB\u00BC\u00BD\u00BE\u00E6\u0104\u012E\u0100\u0106\u00C4\u00C5\u0118\u0112\u010C\u00C9\u0179\u0116\u0122\u0136\u012A\u013B\u0160\u0143\u0145\u00D3\u014C\u00D5\u00D6\u00D7\u0172\u0141\u015A\u016A\u00DC\u017B\u017D\u00DF\u0105\u012F\u0101\u0107\u00E4\u00E5\u0119\u0113\u010D\u00E9\u017A\u0117\u0123\u0137\u012B\u013C\u0161\u0144\u0146\u00F3\u014D\u00F5\u00F6\u00F7\u0173\u0142\u015B\u016B\u00FC\u017C\u017E\u02D9\"\n },\n \"win1257\": \"windows1257\",\n \"cp1257\": \"windows1257\",\n \"windows1258\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\uFFFD\u2039\u0152\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\uFFFD\u203A\u0153\uFFFD\uFFFD\u0178\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u0102\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u0300\u00CD\u00CE\u00CF\u0110\u00D1\u0309\u00D3\u00D4\u01A0\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u01AF\u0303\u00DF\u00E0\u00E1\u00E2\u0103\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u0301\u00ED\u00EE\u00EF\u0111\u00F1\u0323\u00F3\u00F4\u01A1\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u01B0\u20AB\u00FF\"\n },\n \"win1258\": \"windows1258\",\n \"cp1258\": \"windows1258\",\n \"iso88591\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u00D0\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u00DD\u00DE\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u00FE\u00FF\"\n },\n \"cp28591\": \"iso88591\",\n \"iso88592\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0104\u02D8\u0141\u00A4\u013D\u015A\u00A7\u00A8\u0160\u015E\u0164\u0179\u00AD\u017D\u017B\u00B0\u0105\u02DB\u0142\u00B4\u013E\u015B\u02C7\u00B8\u0161\u015F\u0165\u017A\u02DD\u017E\u017C\u0154\u00C1\u00C2\u0102\u00C4\u0139\u0106\u00C7\u010C\u00C9\u0118\u00CB\u011A\u00CD\u00CE\u010E\u0110\u0143\u0147\u00D3\u00D4\u0150\u00D6\u00D7\u0158\u016E\u00DA\u0170\u00DC\u00DD\u0162\u00DF\u0155\u00E1\u00E2\u0103\u00E4\u013A\u0107\u00E7\u010D\u00E9\u0119\u00EB\u011B\u00ED\u00EE\u010F\u0111\u0144\u0148\u00F3\u00F4\u0151\u00F6\u00F7\u0159\u016F\u00FA\u0171\u00FC\u00FD\u0163\u02D9\"\n },\n \"cp28592\": \"iso88592\",\n \"iso88593\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0126\u02D8\u00A3\u00A4\uFFFD\u0124\u00A7\u00A8\u0130\u015E\u011E\u0134\u00AD\uFFFD\u017B\u00B0\u0127\u00B2\u00B3\u00B4\u00B5\u0125\u00B7\u00B8\u0131\u015F\u011F\u0135\u00BD\uFFFD\u017C\u00C0\u00C1\u00C2\uFFFD\u00C4\u010A\u0108\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\uFFFD\u00D1\u00D2\u00D3\u00D4\u0120\u00D6\u00D7\u011C\u00D9\u00DA\u00DB\u00DC\u016C\u015C\u00DF\u00E0\u00E1\u00E2\uFFFD\u00E4\u010B\u0109\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\uFFFD\u00F1\u00F2\u00F3\u00F4\u0121\u00F6\u00F7\u011D\u00F9\u00FA\u00FB\u00FC\u016D\u015D\u02D9\"\n },\n \"cp28593\": \"iso88593\",\n \"iso88594\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0104\u0138\u0156\u00A4\u0128\u013B\u00A7\u00A8\u0160\u0112\u0122\u0166\u00AD\u017D\u00AF\u00B0\u0105\u02DB\u0157\u00B4\u0129\u013C\u02C7\u00B8\u0161\u0113\u0123\u0167\u014A\u017E\u014B\u0100\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u012E\u010C\u00C9\u0118\u00CB\u0116\u00CD\u00CE\u012A\u0110\u0145\u014C\u0136\u00D4\u00D5\u00D6\u00D7\u00D8\u0172\u00DA\u00DB\u00DC\u0168\u016A\u00DF\u0101\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u012F\u010D\u00E9\u0119\u00EB\u0117\u00ED\u00EE\u012B\u0111\u0146\u014D\u0137\u00F4\u00F5\u00F6\u00F7\u00F8\u0173\u00FA\u00FB\u00FC\u0169\u016B\u02D9\"\n },\n \"cp28594\": \"iso88594\",\n \"iso88595\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0401\u0402\u0403\u0404\u0405\u0406\u0407\u0408\u0409\u040A\u040B\u040C\u00AD\u040E\u040F\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u2116\u0451\u0452\u0453\u0454\u0455\u0456\u0457\u0458\u0459\u045A\u045B\u045C\u00A7\u045E\u045F\"\n },\n \"cp28595\": \"iso88595\",\n \"iso88596\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\uFFFD\uFFFD\uFFFD\u00A4\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u060C\u00AD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u061B\uFFFD\uFFFD\uFFFD\u061F\uFFFD\u0621\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629\u062A\u062B\u062C\u062D\u062E\u062F\u0630\u0631\u0632\u0633\u0634\u0635\u0636\u0637\u0638\u0639\u063A\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0640\u0641\u0642\u0643\u0644\u0645\u0646\u0647\u0648\u0649\u064A\u064B\u064C\u064D\u064E\u064F\u0650\u0651\u0652\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\"\n },\n \"cp28596\": \"iso88596\",\n \"iso88597\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u2018\u2019\u00A3\u20AC\u20AF\u00A6\u00A7\u00A8\u00A9\u037A\u00AB\u00AC\u00AD\uFFFD\u2015\u00B0\u00B1\u00B2\u00B3\u0384\u0385\u0386\u00B7\u0388\u0389\u038A\u00BB\u038C\u00BD\u038E\u038F\u0390\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\uFFFD\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03AA\u03AB\u03AC\u03AD\u03AE\u03AF\u03B0\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C2\u03C3\u03C4\u03C5\u03C6\u03C7\u03C8\u03C9\u03CA\u03CB\u03CC\u03CD\u03CE\uFFFD\"\n },\n \"cp28597\": \"iso88597\",\n \"iso88598\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\uFFFD\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00D7\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00F7\u00BB\u00BC\u00BD\u00BE\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2017\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\uFFFD\uFFFD\u200E\u200F\uFFFD\"\n },\n \"cp28598\": \"iso88598\",\n \"iso88599\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u011E\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u0130\u015E\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u011F\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u0131\u015F\u00FF\"\n },\n \"cp28599\": \"iso88599\",\n \"iso885910\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0104\u0112\u0122\u012A\u0128\u0136\u00A7\u013B\u0110\u0160\u0166\u017D\u00AD\u016A\u014A\u00B0\u0105\u0113\u0123\u012B\u0129\u0137\u00B7\u013C\u0111\u0161\u0167\u017E\u2015\u016B\u014B\u0100\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u012E\u010C\u00C9\u0118\u00CB\u0116\u00CD\u00CE\u00CF\u00D0\u0145\u014C\u00D3\u00D4\u00D5\u00D6\u0168\u00D8\u0172\u00DA\u00DB\u00DC\u00DD\u00DE\u00DF\u0101\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u012F\u010D\u00E9\u0119\u00EB\u0117\u00ED\u00EE\u00EF\u00F0\u0146\u014D\u00F3\u00F4\u00F5\u00F6\u0169\u00F8\u0173\u00FA\u00FB\u00FC\u00FD\u00FE\u0138\"\n },\n \"cp28600\": \"iso885910\",\n \"iso885911\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFFFD\uFFFD\uFFFD\uFFFD\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\uFFFD\uFFFD\uFFFD\uFFFD\"\n },\n \"cp28601\": \"iso885911\",\n \"iso885913\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u201D\u00A2\u00A3\u00A4\u201E\u00A6\u00A7\u00D8\u00A9\u0156\u00AB\u00AC\u00AD\u00AE\u00C6\u00B0\u00B1\u00B2\u00B3\u201C\u00B5\u00B6\u00B7\u00F8\u00B9\u0157\u00BB\u00BC\u00BD\u00BE\u00E6\u0104\u012E\u0100\u0106\u00C4\u00C5\u0118\u0112\u010C\u00C9\u0179\u0116\u0122\u0136\u012A\u013B\u0160\u0143\u0145\u00D3\u014C\u00D5\u00D6\u00D7\u0172\u0141\u015A\u016A\u00DC\u017B\u017D\u00DF\u0105\u012F\u0101\u0107\u00E4\u00E5\u0119\u0113\u010D\u00E9\u017A\u0117\u0123\u0137\u012B\u013C\u0161\u0144\u0146\u00F3\u014D\u00F5\u00F6\u00F7\u0173\u0142\u015B\u016B\u00FC\u017C\u017E\u2019\"\n },\n \"cp28603\": \"iso885913\",\n \"iso885914\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u1E02\u1E03\u00A3\u010A\u010B\u1E0A\u00A7\u1E80\u00A9\u1E82\u1E0B\u1EF2\u00AD\u00AE\u0178\u1E1E\u1E1F\u0120\u0121\u1E40\u1E41\u00B6\u1E56\u1E81\u1E57\u1E83\u1E60\u1EF3\u1E84\u1E85\u1E61\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u0174\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u1E6A\u00D8\u00D9\u00DA\u00DB\u00DC\u00DD\u0176\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u0175\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u1E6B\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u0177\u00FF\"\n },\n \"cp28604\": \"iso885914\",\n \"iso885915\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u20AC\u00A5\u0160\u00A7\u0161\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u017D\u00B5\u00B6\u00B7\u017E\u00B9\u00BA\u00BB\u0152\u0153\u0178\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u00D0\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u00DD\u00DE\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u00FE\u00FF\"\n },\n \"cp28605\": \"iso885915\",\n \"iso885916\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0104\u0105\u0141\u20AC\u201E\u0160\u00A7\u0161\u00A9\u0218\u00AB\u0179\u00AD\u017A\u017B\u00B0\u00B1\u010C\u0142\u017D\u201D\u00B6\u00B7\u017E\u010D\u0219\u00BB\u0152\u0153\u0178\u017C\u00C0\u00C1\u00C2\u0102\u00C4\u0106\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u0110\u0143\u00D2\u00D3\u00D4\u0150\u00D6\u015A\u0170\u00D9\u00DA\u00DB\u00DC\u0118\u021A\u00DF\u00E0\u00E1\u00E2\u0103\u00E4\u0107\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u0111\u0144\u00F2\u00F3\u00F4\u0151\u00F6\u015B\u0171\u00F9\u00FA\u00FB\u00FC\u0119\u021B\u00FF\"\n },\n \"cp28606\": \"iso885916\",\n \"cp437\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\u00EC\u00C4\u00C5\u00C9\u00E6\u00C6\u00F4\u00F6\u00F2\u00FB\u00F9\u00FF\u00D6\u00DC\u00A2\u00A3\u00A5\u20A7\u0192\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA\u00BF\u2310\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n },\n \"ibm437\": \"cp437\",\n \"csibm437\": \"cp437\",\n \"cp737\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C3\u03C2\u03C4\u03C5\u03C6\u03C7\u03C8\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03C9\u03AC\u03AD\u03AE\u03CA\u03AF\u03CC\u03CD\u03CB\u03CE\u0386\u0388\u0389\u038A\u038C\u038E\u038F\u00B1\u2265\u2264\u03AA\u03AB\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n },\n \"ibm737\": \"cp737\",\n \"csibm737\": \"cp737\",\n \"cp775\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0106\u00FC\u00E9\u0101\u00E4\u0123\u00E5\u0107\u0142\u0113\u0156\u0157\u012B\u0179\u00C4\u00C5\u00C9\u00E6\u00C6\u014D\u00F6\u0122\u00A2\u015A\u015B\u00D6\u00DC\u00F8\u00A3\u00D8\u00D7\u00A4\u0100\u012A\u00F3\u017B\u017C\u017A\u201D\u00A6\u00A9\u00AE\u00AC\u00BD\u00BC\u0141\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u0104\u010C\u0118\u0116\u2563\u2551\u2557\u255D\u012E\u0160\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u0172\u016A\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u017D\u0105\u010D\u0119\u0117\u012F\u0161\u0173\u016B\u017E\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u00D3\u00DF\u014C\u0143\u00F5\u00D5\u00B5\u0144\u0136\u0137\u013B\u013C\u0146\u0112\u0145\u2019\u00AD\u00B1\u201C\u00BE\u00B6\u00A7\u00F7\u201E\u00B0\u2219\u00B7\u00B9\u00B3\u00B2\u25A0\u00A0\"\n },\n \"ibm775\": \"cp775\",\n \"csibm775\": \"cp775\",\n \"cp850\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\u00EC\u00C4\u00C5\u00C9\u00E6\u00C6\u00F4\u00F6\u00F2\u00FB\u00F9\u00FF\u00D6\u00DC\u00F8\u00A3\u00D8\u00D7\u0192\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA\u00BF\u00AE\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u00C1\u00C2\u00C0\u00A9\u2563\u2551\u2557\u255D\u00A2\u00A5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u00E3\u00C3\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u00A4\u00F0\u00D0\u00CA\u00CB\u00C8\u0131\u00CD\u00CE\u00CF\u2518\u250C\u2588\u2584\u00A6\u00CC\u2580\u00D3\u00DF\u00D4\u00D2\u00F5\u00D5\u00B5\u00FE\u00DE\u00DA\u00DB\u00D9\u00FD\u00DD\u00AF\u00B4\u00AD\u00B1\u2017\u00BE\u00B6\u00A7\u00F7\u00B8\u00B0\u00A8\u00B7\u00B9\u00B3\u00B2\u25A0\u00A0\"\n },\n \"ibm850\": \"cp850\",\n \"csibm850\": \"cp850\",\n \"cp852\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u016F\u0107\u00E7\u0142\u00EB\u0150\u0151\u00EE\u0179\u00C4\u0106\u00C9\u0139\u013A\u00F4\u00F6\u013D\u013E\u015A\u015B\u00D6\u00DC\u0164\u0165\u0141\u00D7\u010D\u00E1\u00ED\u00F3\u00FA\u0104\u0105\u017D\u017E\u0118\u0119\u00AC\u017A\u010C\u015F\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u00C1\u00C2\u011A\u015E\u2563\u2551\u2557\u255D\u017B\u017C\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u0102\u0103\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u00A4\u0111\u0110\u010E\u00CB\u010F\u0147\u00CD\u00CE\u011B\u2518\u250C\u2588\u2584\u0162\u016E\u2580\u00D3\u00DF\u00D4\u0143\u0144\u0148\u0160\u0161\u0154\u00DA\u0155\u0170\u00FD\u00DD\u0163\u00B4\u00AD\u02DD\u02DB\u02C7\u02D8\u00A7\u00F7\u00B8\u00B0\u00A8\u02D9\u0171\u0158\u0159\u25A0\u00A0\"\n },\n \"ibm852\": \"cp852\",\n \"csibm852\": \"cp852\",\n \"cp855\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0452\u0402\u0453\u0403\u0451\u0401\u0454\u0404\u0455\u0405\u0456\u0406\u0457\u0407\u0458\u0408\u0459\u0409\u045A\u040A\u045B\u040B\u045C\u040C\u045E\u040E\u045F\u040F\u044E\u042E\u044A\u042A\u0430\u0410\u0431\u0411\u0446\u0426\u0434\u0414\u0435\u0415\u0444\u0424\u0433\u0413\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u0445\u0425\u0438\u0418\u2563\u2551\u2557\u255D\u0439\u0419\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u043A\u041A\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u00A4\u043B\u041B\u043C\u041C\u043D\u041D\u043E\u041E\u043F\u2518\u250C\u2588\u2584\u041F\u044F\u2580\u042F\u0440\u0420\u0441\u0421\u0442\u0422\u0443\u0423\u0436\u0416\u0432\u0412\u044C\u042C\u2116\u00AD\u044B\u042B\u0437\u0417\u0448\u0428\u044D\u042D\u0449\u0429\u0447\u0427\u00A7\u25A0\u00A0\"\n },\n \"ibm855\": \"cp855\",\n \"csibm855\": \"cp855\",\n \"cp856\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\uFFFD\u00A3\uFFFD\u00D7\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u00AE\u00AC\u00BD\u00BC\uFFFD\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\uFFFD\uFFFD\uFFFD\u00A9\u2563\u2551\u2557\u255D\u00A2\u00A5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\uFFFD\uFFFD\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u00A4\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2518\u250C\u2588\u2584\u00A6\uFFFD\u2580\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u00B5\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u00AF\u00B4\u00AD\u00B1\u2017\u00BE\u00B6\u00A7\u00F7\u00B8\u00B0\u00A8\u00B7\u00B9\u00B3\u00B2\u25A0\u00A0\"\n },\n \"ibm856\": \"cp856\",\n \"csibm856\": \"cp856\",\n \"cp857\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\u0131\u00C4\u00C5\u00C9\u00E6\u00C6\u00F4\u00F6\u00F2\u00FB\u00F9\u0130\u00D6\u00DC\u00F8\u00A3\u00D8\u015E\u015F\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u011E\u011F\u00BF\u00AE\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u00C1\u00C2\u00C0\u00A9\u2563\u2551\u2557\u255D\u00A2\u00A5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u00E3\u00C3\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u00A4\u00BA\u00AA\u00CA\u00CB\u00C8\uFFFD\u00CD\u00CE\u00CF\u2518\u250C\u2588\u2584\u00A6\u00CC\u2580\u00D3\u00DF\u00D4\u00D2\u00F5\u00D5\u00B5\uFFFD\u00D7\u00DA\u00DB\u00D9\u00EC\u00FF\u00AF\u00B4\u00AD\u00B1\uFFFD\u00BE\u00B6\u00A7\u00F7\u00B8\u00B0\u00A8\u00B7\u00B9\u00B3\u00B2\u25A0\u00A0\"\n },\n \"ibm857\": \"cp857\",\n \"csibm857\": \"cp857\",\n \"cp858\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\u00EC\u00C4\u00C5\u00C9\u00E6\u00C6\u00F4\u00F6\u00F2\u00FB\u00F9\u00FF\u00D6\u00DC\u00F8\u00A3\u00D8\u00D7\u0192\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA\u00BF\u00AE\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u00C1\u00C2\u00C0\u00A9\u2563\u2551\u2557\u255D\u00A2\u00A5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u00E3\u00C3\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u00A4\u00F0\u00D0\u00CA\u00CB\u00C8\u20AC\u00CD\u00CE\u00CF\u2518\u250C\u2588\u2584\u00A6\u00CC\u2580\u00D3\u00DF\u00D4\u00D2\u00F5\u00D5\u00B5\u00FE\u00DE\u00DA\u00DB\u00D9\u00FD\u00DD\u00AF\u00B4\u00AD\u00B1\u2017\u00BE\u00B6\u00A7\u00F7\u00B8\u00B0\u00A8\u00B7\u00B9\u00B3\u00B2\u25A0\u00A0\"\n },\n \"ibm858\": \"cp858\",\n \"csibm858\": \"cp858\",\n \"cp860\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E3\u00E0\u00C1\u00E7\u00EA\u00CA\u00E8\u00CD\u00D4\u00EC\u00C3\u00C2\u00C9\u00C0\u00C8\u00F4\u00F5\u00F2\u00DA\u00F9\u00CC\u00D5\u00DC\u00A2\u00A3\u00D9\u20A7\u00D3\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA\u00BF\u00D2\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n },\n \"ibm860\": \"cp860\",\n \"csibm860\": \"cp860\",\n \"cp861\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7\u00EA\u00EB\u00E8\u00D0\u00F0\u00DE\u00C4\u00C5\u00C9\u00E6\u00C6\u00F4\u00F6\u00FE\u00FB\u00DD\u00FD\u00D6\u00DC\u00F8\u00A3\u00D8\u20A7\u0192\u00E1\u00ED\u00F3\u00FA\u00C1\u00CD\u00D3\u00DA\u00BF\u2310\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n },\n \"ibm861\": \"cp861\",\n \"csibm861\": \"cp861\",\n \"cp862\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\u00A2\u00A3\u00A5\u20A7\u0192\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA\u00BF\u2310\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n },\n \"ibm862\": \"cp862\",\n \"csibm862\": \"cp862\",\n \"cp863\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00C2\u00E0\u00B6\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\u2017\u00C0\u00A7\u00C9\u00C8\u00CA\u00F4\u00CB\u00CF\u00FB\u00F9\u00A4\u00D4\u00DC\u00A2\u00A3\u00D9\u00DB\u0192\u00A6\u00B4\u00F3\u00FA\u00A8\u00B8\u00B3\u00AF\u00CE\u2310\u00AC\u00BD\u00BC\u00BE\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n },\n \"ibm863\": \"cp863\",\n \"csibm863\": \"cp863\",\n \"cp864\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$\u066A&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u007F\u00B0\u00B7\u2219\u221A\u2592\u2500\u2502\u253C\u2524\u252C\u251C\u2534\u2510\u250C\u2514\u2518\u03B2\u221E\u03C6\u00B1\u00BD\u00BC\u2248\u00AB\u00BB\uFEF7\uFEF8\uFFFD\uFFFD\uFEFB\uFEFC\uFFFD\u00A0\u00AD\uFE82\u00A3\u00A4\uFE84\uFFFD\uFFFD\uFE8E\uFE8F\uFE95\uFE99\u060C\uFE9D\uFEA1\uFEA5\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\uFED1\u061B\uFEB1\uFEB5\uFEB9\u061F\u00A2\uFE80\uFE81\uFE83\uFE85\uFECA\uFE8B\uFE8D\uFE91\uFE93\uFE97\uFE9B\uFE9F\uFEA3\uFEA7\uFEA9\uFEAB\uFEAD\uFEAF\uFEB3\uFEB7\uFEBB\uFEBF\uFEC1\uFEC5\uFECB\uFECF\u00A6\u00AC\u00F7\u00D7\uFEC9\u0640\uFED3\uFED7\uFEDB\uFEDF\uFEE3\uFEE7\uFEEB\uFEED\uFEEF\uFEF3\uFEBD\uFECC\uFECE\uFECD\uFEE1\uFE7D\u0651\uFEE5\uFEE9\uFEEC\uFEF0\uFEF2\uFED0\uFED5\uFEF5\uFEF6\uFEDD\uFED9\uFEF1\u25A0\uFFFD\"\n },\n \"ibm864\": \"cp864\",\n \"csibm864\": \"cp864\",\n \"cp865\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\u00EC\u00C4\u00C5\u00C9\u00E6\u00C6\u00F4\u00F6\u00F2\u00FB\u00F9\u00FF\u00D6\u00DC\u00F8\u00A3\u00D8\u20A7\u0192\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA\u00BF\u2310\u00AC\u00BD\u00BC\u00A1\u00AB\u00A4\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n },\n \"ibm865\": \"cp865\",\n \"csibm865\": \"cp865\",\n \"cp866\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u0401\u0451\u0404\u0454\u0407\u0457\u040E\u045E\u00B0\u2219\u00B7\u221A\u2116\u00A4\u25A0\u00A0\"\n },\n \"ibm866\": \"cp866\",\n \"csibm866\": \"cp866\",\n \"cp869\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0386\uFFFD\u00B7\u00AC\u00A6\u2018\u2019\u0388\u2015\u0389\u038A\u03AA\u038C\uFFFD\uFFFD\u038E\u03AB\u00A9\u038F\u00B2\u00B3\u03AC\u00A3\u03AD\u03AE\u03AF\u03CA\u0390\u03CC\u03CD\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u00BD\u0398\u0399\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u039A\u039B\u039C\u039D\u2563\u2551\u2557\u255D\u039E\u039F\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u03A0\u03A1\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03B1\u03B2\u03B3\u2518\u250C\u2588\u2584\u03B4\u03B5\u2580\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C3\u03C2\u03C4\u0384\u00AD\u00B1\u03C5\u03C6\u03C7\u00A7\u03C8\u0385\u00B0\u00A8\u03C9\u03CB\u03B0\u03CE\u25A0\u00A0\"\n },\n \"ibm869\": \"cp869\",\n \"csibm869\": \"cp869\",\n \"cp922\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u203E\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u0160\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u00DD\u017D\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u0161\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u017E\u00FF\"\n },\n \"ibm922\": \"cp922\",\n \"csibm922\": \"cp922\",\n \"cp1046\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\uFE88\u00D7\u00F7\uF8F6\uF8F5\uF8F4\uF8F7\uFE71\u0088\u25A0\u2502\u2500\u2510\u250C\u2514\u2518\uFE79\uFE7B\uFE7D\uFE7F\uFE77\uFE8A\uFEF0\uFEF3\uFEF2\uFECE\uFECF\uFED0\uFEF6\uFEF8\uFEFA\uFEFC\u00A0\uF8FA\uF8F9\uF8F8\u00A4\uF8FB\uFE8B\uFE91\uFE97\uFE9B\uFE9F\uFEA3\u060C\u00AD\uFEA7\uFEB3\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\uFEB7\u061B\uFEBB\uFEBF\uFECA\u061F\uFECB\u0621\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629\u062A\u062B\u062C\u062D\u062E\u062F\u0630\u0631\u0632\u0633\u0634\u0635\u0636\u0637\uFEC7\u0639\u063A\uFECC\uFE82\uFE84\uFE8E\uFED3\u0640\u0641\u0642\u0643\u0644\u0645\u0646\u0647\u0648\u0649\u064A\u064B\u064C\u064D\u064E\u064F\u0650\u0651\u0652\uFED7\uFEDB\uFEDF\uF8FC\uFEF5\uFEF7\uFEF9\uFEFB\uFEE3\uFEE7\uFEEC\uFEE9\uFFFD\"\n },\n \"ibm1046\": \"cp1046\",\n \"csibm1046\": \"cp1046\",\n \"cp1124\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0401\u0402\u0490\u0404\u0405\u0406\u0407\u0408\u0409\u040A\u040B\u040C\u00AD\u040E\u040F\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u2116\u0451\u0452\u0491\u0454\u0455\u0456\u0457\u0458\u0459\u045A\u045B\u045C\u00A7\u045E\u045F\"\n },\n \"ibm1124\": \"cp1124\",\n \"csibm1124\": \"cp1124\",\n \"cp1125\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u0401\u0451\u0490\u0491\u0404\u0454\u0406\u0456\u0407\u0457\u00B7\u221A\u2116\u00A4\u25A0\u00A0\"\n },\n \"ibm1125\": \"cp1125\",\n \"csibm1125\": \"cp1125\",\n \"cp1129\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u0153\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u0178\u00B5\u00B6\u00B7\u0152\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u0102\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u0300\u00CD\u00CE\u00CF\u0110\u00D1\u0309\u00D3\u00D4\u01A0\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u01AF\u0303\u00DF\u00E0\u00E1\u00E2\u0103\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u0301\u00ED\u00EE\u00EF\u0111\u00F1\u0323\u00F3\u00F4\u01A1\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u01B0\u20AB\u00FF\"\n },\n \"ibm1129\": \"cp1129\",\n \"csibm1129\": \"cp1129\",\n \"cp1133\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0E81\u0E82\u0E84\u0E87\u0E88\u0EAA\u0E8A\u0E8D\u0E94\u0E95\u0E96\u0E97\u0E99\u0E9A\u0E9B\u0E9C\u0E9D\u0E9E\u0E9F\u0EA1\u0EA2\u0EA3\u0EA5\u0EA7\u0EAB\u0EAD\u0EAE\uFFFD\uFFFD\uFFFD\u0EAF\u0EB0\u0EB2\u0EB3\u0EB4\u0EB5\u0EB6\u0EB7\u0EB8\u0EB9\u0EBC\u0EB1\u0EBB\u0EBD\uFFFD\uFFFD\uFFFD\u0EC0\u0EC1\u0EC2\u0EC3\u0EC4\u0EC8\u0EC9\u0ECA\u0ECB\u0ECC\u0ECD\u0EC6\uFFFD\u0EDC\u0EDD\u20AD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0ED0\u0ED1\u0ED2\u0ED3\u0ED4\u0ED5\u0ED6\u0ED7\u0ED8\u0ED9\uFFFD\uFFFD\u00A2\u00AC\u00A6\uFFFD\"\n },\n \"ibm1133\": \"cp1133\",\n \"csibm1133\": \"cp1133\",\n \"cp1161\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0E48\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\u0E49\u0E4A\u0E4B\u20AC\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\u00A2\u00AC\u00A6\u00A0\"\n },\n \"ibm1161\": \"cp1161\",\n \"csibm1161\": \"cp1161\",\n \"cp1162\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u20AC\u0081\u0082\u0083\u0084\u2026\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFFFD\uFFFD\uFFFD\uFFFD\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\uFFFD\uFFFD\uFFFD\uFFFD\"\n },\n \"ibm1162\": \"cp1162\",\n \"csibm1162\": \"cp1162\",\n \"cp1163\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u20AC\u00A5\u00A6\u00A7\u0153\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u0178\u00B5\u00B6\u00B7\u0152\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u0102\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u0300\u00CD\u00CE\u00CF\u0110\u00D1\u0309\u00D3\u00D4\u01A0\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u01AF\u0303\u00DF\u00E0\u00E1\u00E2\u0103\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u0301\u00ED\u00EE\u00EF\u0111\u00F1\u0323\u00F3\u00F4\u01A1\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u01B0\u20AB\u00FF\"\n },\n \"ibm1163\": \"cp1163\",\n \"csibm1163\": \"cp1163\",\n \"maccroatian\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C4\u00C5\u00C7\u00C9\u00D1\u00D6\u00DC\u00E1\u00E0\u00E2\u00E4\u00E3\u00E5\u00E7\u00E9\u00E8\u00EA\u00EB\u00ED\u00EC\u00EE\u00EF\u00F1\u00F3\u00F2\u00F4\u00F6\u00F5\u00FA\u00F9\u00FB\u00FC\u2020\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u0160\u2122\u00B4\u00A8\u2260\u017D\u00D8\u221E\u00B1\u2264\u2265\u2206\u00B5\u2202\u2211\u220F\u0161\u222B\u00AA\u00BA\u2126\u017E\u00F8\u00BF\u00A1\u00AC\u221A\u0192\u2248\u0106\u00AB\u010C\u2026\u00A0\u00C0\u00C3\u00D5\u0152\u0153\u0110\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\uFFFD\u00A9\u2044\u00A4\u2039\u203A\u00C6\u00BB\u2013\u00B7\u201A\u201E\u2030\u00C2\u0107\u00C1\u010D\u00C8\u00CD\u00CE\u00CF\u00CC\u00D3\u00D4\u0111\u00D2\u00DA\u00DB\u00D9\u0131\u02C6\u02DC\u00AF\u03C0\u00CB\u02DA\u00B8\u00CA\u00E6\u02C7\"\n },\n \"maccyrillic\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u2020\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u0406\u00AE\u00A9\u2122\u0402\u0452\u2260\u0403\u0453\u221E\u00B1\u2264\u2265\u0456\u00B5\u2202\u0408\u0404\u0454\u0407\u0457\u0409\u0459\u040A\u045A\u0458\u0405\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u040B\u045B\u040C\u045C\u0455\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u201E\u040E\u045E\u040F\u045F\u2116\u0401\u0451\u044F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u00A4\"\n },\n \"macgreek\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C4\u00B9\u00B2\u00C9\u00B3\u00D6\u00DC\u0385\u00E0\u00E2\u00E4\u0384\u00A8\u00E7\u00E9\u00E8\u00EA\u00EB\u00A3\u2122\u00EE\u00EF\u2022\u00BD\u2030\u00F4\u00F6\u00A6\u00AD\u00F9\u00FB\u00FC\u2020\u0393\u0394\u0398\u039B\u039E\u03A0\u00DF\u00AE\u00A9\u03A3\u03AA\u00A7\u2260\u00B0\u0387\u0391\u00B1\u2264\u2265\u00A5\u0392\u0395\u0396\u0397\u0399\u039A\u039C\u03A6\u03AB\u03A8\u03A9\u03AC\u039D\u00AC\u039F\u03A1\u2248\u03A4\u00AB\u00BB\u2026\u00A0\u03A5\u03A7\u0386\u0388\u0153\u2013\u2015\u201C\u201D\u2018\u2019\u00F7\u0389\u038A\u038C\u038E\u03AD\u03AE\u03AF\u03CC\u038F\u03CD\u03B1\u03B2\u03C8\u03B4\u03B5\u03C6\u03B3\u03B7\u03B9\u03BE\u03BA\u03BB\u03BC\u03BD\u03BF\u03C0\u03CE\u03C1\u03C3\u03C4\u03B8\u03C9\u03C2\u03C7\u03C5\u03B6\u03CA\u03CB\u0390\u03B0\uFFFD\"\n },\n \"maciceland\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C4\u00C5\u00C7\u00C9\u00D1\u00D6\u00DC\u00E1\u00E0\u00E2\u00E4\u00E3\u00E5\u00E7\u00E9\u00E8\u00EA\u00EB\u00ED\u00EC\u00EE\u00EF\u00F1\u00F3\u00F2\u00F4\u00F6\u00F5\u00FA\u00F9\u00FB\u00FC\u00DD\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u00A9\u2122\u00B4\u00A8\u2260\u00C6\u00D8\u221E\u00B1\u2264\u2265\u00A5\u00B5\u2202\u2211\u220F\u03C0\u222B\u00AA\u00BA\u2126\u00E6\u00F8\u00BF\u00A1\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u00C0\u00C3\u00D5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\u00FF\u0178\u2044\u00A4\u00D0\u00F0\u00DE\u00FE\u00FD\u00B7\u201A\u201E\u2030\u00C2\u00CA\u00C1\u00CB\u00C8\u00CD\u00CE\u00CF\u00CC\u00D3\u00D4\uFFFD\u00D2\u00DA\u00DB\u00D9\u0131\u02C6\u02DC\u00AF\u02D8\u02D9\u02DA\u00B8\u02DD\u02DB\u02C7\"\n },\n \"macroman\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C4\u00C5\u00C7\u00C9\u00D1\u00D6\u00DC\u00E1\u00E0\u00E2\u00E4\u00E3\u00E5\u00E7\u00E9\u00E8\u00EA\u00EB\u00ED\u00EC\u00EE\u00EF\u00F1\u00F3\u00F2\u00F4\u00F6\u00F5\u00FA\u00F9\u00FB\u00FC\u2020\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u00A9\u2122\u00B4\u00A8\u2260\u00C6\u00D8\u221E\u00B1\u2264\u2265\u00A5\u00B5\u2202\u2211\u220F\u03C0\u222B\u00AA\u00BA\u2126\u00E6\u00F8\u00BF\u00A1\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u00C0\u00C3\u00D5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\u00FF\u0178\u2044\u00A4\u2039\u203A\uFB01\uFB02\u2021\u00B7\u201A\u201E\u2030\u00C2\u00CA\u00C1\u00CB\u00C8\u00CD\u00CE\u00CF\u00CC\u00D3\u00D4\uFFFD\u00D2\u00DA\u00DB\u00D9\u0131\u02C6\u02DC\u00AF\u02D8\u02D9\u02DA\u00B8\u02DD\u02DB\u02C7\"\n },\n \"macromania\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C4\u00C5\u00C7\u00C9\u00D1\u00D6\u00DC\u00E1\u00E0\u00E2\u00E4\u00E3\u00E5\u00E7\u00E9\u00E8\u00EA\u00EB\u00ED\u00EC\u00EE\u00EF\u00F1\u00F3\u00F2\u00F4\u00F6\u00F5\u00FA\u00F9\u00FB\u00FC\u2020\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u00A9\u2122\u00B4\u00A8\u2260\u0102\u015E\u221E\u00B1\u2264\u2265\u00A5\u00B5\u2202\u2211\u220F\u03C0\u222B\u00AA\u00BA\u2126\u0103\u015F\u00BF\u00A1\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u00C0\u00C3\u00D5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\u00FF\u0178\u2044\u00A4\u2039\u203A\u0162\u0163\u2021\u00B7\u201A\u201E\u2030\u00C2\u00CA\u00C1\u00CB\u00C8\u00CD\u00CE\u00CF\u00CC\u00D3\u00D4\uFFFD\u00D2\u00DA\u00DB\u00D9\u0131\u02C6\u02DC\u00AF\u02D8\u02D9\u02DA\u00B8\u02DD\u02DB\u02C7\"\n },\n \"macthai\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00AB\u00BB\u2026\uF88C\uF88F\uF892\uF895\uF898\uF88B\uF88E\uF891\uF894\uF897\u201C\u201D\uF899\uFFFD\u2022\uF884\uF889\uF885\uF886\uF887\uF888\uF88A\uF88D\uF890\uF893\uF896\u2018\u2019\uFFFD\u00A0\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFEFF\u200B\u2013\u2014\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u2122\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u00AE\u00A9\uFFFD\uFFFD\uFFFD\uFFFD\"\n },\n \"macturkish\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C4\u00C5\u00C7\u00C9\u00D1\u00D6\u00DC\u00E1\u00E0\u00E2\u00E4\u00E3\u00E5\u00E7\u00E9\u00E8\u00EA\u00EB\u00ED\u00EC\u00EE\u00EF\u00F1\u00F3\u00F2\u00F4\u00F6\u00F5\u00FA\u00F9\u00FB\u00FC\u2020\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u00A9\u2122\u00B4\u00A8\u2260\u00C6\u00D8\u221E\u00B1\u2264\u2265\u00A5\u00B5\u2202\u2211\u220F\u03C0\u222B\u00AA\u00BA\u2126\u00E6\u00F8\u00BF\u00A1\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u00C0\u00C3\u00D5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\u00FF\u0178\u011E\u011F\u0130\u0131\u015E\u015F\u2021\u00B7\u201A\u201E\u2030\u00C2\u00CA\u00C1\u00CB\u00C8\u00CD\u00CE\u00CF\u00CC\u00D3\u00D4\uFFFD\u00D2\u00DA\u00DB\u00D9\uFFFD\u02C6\u02DC\u00AF\u02D8\u02D9\u02DA\u00B8\u02DD\u02DB\u02C7\"\n },\n \"macukraine\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u2020\u00B0\u0490\u00A3\u00A7\u2022\u00B6\u0406\u00AE\u00A9\u2122\u0402\u0452\u2260\u0403\u0453\u221E\u00B1\u2264\u2265\u0456\u00B5\u0491\u0408\u0404\u0454\u0407\u0457\u0409\u0459\u040A\u045A\u0458\u0405\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u040B\u045B\u040C\u045C\u0455\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u201E\u040E\u045E\u040F\u045F\u2116\u0401\u0451\u044F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u00A4\"\n },\n \"koi8r\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2580\u2584\u2588\u258C\u2590\u2591\u2592\u2593\u2320\u25A0\u2219\u221A\u2248\u2264\u2265\u00A0\u2321\u00B0\u00B2\u00B7\u00F7\u2550\u2551\u2552\u0451\u2553\u2554\u2555\u2556\u2557\u2558\u2559\u255A\u255B\u255C\u255D\u255E\u255F\u2560\u2561\u0401\u2562\u2563\u2564\u2565\u2566\u2567\u2568\u2569\u256A\u256B\u256C\u00A9\u044E\u0430\u0431\u0446\u0434\u0435\u0444\u0433\u0445\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u044F\u0440\u0441\u0442\u0443\u0436\u0432\u044C\u044B\u0437\u0448\u044D\u0449\u0447\u044A\u042E\u0410\u0411\u0426\u0414\u0415\u0424\u0413\u0425\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u042F\u0420\u0421\u0422\u0423\u0416\u0412\u042C\u042B\u0417\u0428\u042D\u0429\u0427\u042A\"\n },\n \"koi8u\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2580\u2584\u2588\u258C\u2590\u2591\u2592\u2593\u2320\u25A0\u2219\u221A\u2248\u2264\u2265\u00A0\u2321\u00B0\u00B2\u00B7\u00F7\u2550\u2551\u2552\u0451\u0454\u2554\u0456\u0457\u2557\u2558\u2559\u255A\u255B\u0491\u255D\u255E\u255F\u2560\u2561\u0401\u0404\u2563\u0406\u0407\u2566\u2567\u2568\u2569\u256A\u0490\u256C\u00A9\u044E\u0430\u0431\u0446\u0434\u0435\u0444\u0433\u0445\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u044F\u0440\u0441\u0442\u0443\u0436\u0432\u044C\u044B\u0437\u0448\u044D\u0449\u0447\u044A\u042E\u0410\u0411\u0426\u0414\u0415\u0424\u0413\u0425\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u042F\u0420\u0421\u0422\u0423\u0416\u0412\u042C\u042B\u0417\u0428\u042D\u0429\u0427\u042A\"\n },\n \"koi8ru\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2580\u2584\u2588\u258C\u2590\u2591\u2592\u2593\u2320\u25A0\u2219\u221A\u2248\u2264\u2265\u00A0\u2321\u00B0\u00B2\u00B7\u00F7\u2550\u2551\u2552\u0451\u0454\u2554\u0456\u0457\u2557\u2558\u2559\u255A\u255B\u0491\u045E\u255E\u255F\u2560\u2561\u0401\u0404\u2563\u0406\u0407\u2566\u2567\u2568\u2569\u256A\u0490\u040E\u00A9\u044E\u0430\u0431\u0446\u0434\u0435\u0444\u0433\u0445\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u044F\u0440\u0441\u0442\u0443\u0436\u0432\u044C\u044B\u0437\u0448\u044D\u0449\u0447\u044A\u042E\u0410\u0411\u0426\u0414\u0415\u0424\u0413\u0425\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u042F\u0420\u0421\u0422\u0423\u0416\u0412\u042C\u042B\u0417\u0428\u042D\u0429\u0427\u042A\"\n },\n \"koi8t\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u049B\u0493\u201A\u0492\u201E\u2026\u2020\u2021\uFFFD\u2030\u04B3\u2039\u04B2\u04B7\u04B6\uFFFD\u049A\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\uFFFD\u203A\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u04EF\u04EE\u0451\u00A4\u04E3\u00A6\u00A7\uFFFD\uFFFD\uFFFD\u00AB\u00AC\u00AD\u00AE\uFFFD\u00B0\u00B1\u00B2\u0401\uFFFD\u04E2\u00B6\u00B7\uFFFD\u2116\uFFFD\u00BB\uFFFD\uFFFD\uFFFD\u00A9\u044E\u0430\u0431\u0446\u0434\u0435\u0444\u0433\u0445\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u044F\u0440\u0441\u0442\u0443\u0436\u0432\u044C\u044B\u0437\u0448\u044D\u0449\u0447\u044A\u042E\u0410\u0411\u0426\u0414\u0415\u0424\u0413\u0425\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u042F\u0420\u0421\u0422\u0423\u0416\u0412\u042C\u042B\u0417\u0428\u042D\u0429\u0427\u042A\"\n },\n \"armscii8\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\uFFFD\u0587\u0589)(\u00BB\u00AB\u2014.\u055D,-\u058A\u2026\u055C\u055B\u055E\u0531\u0561\u0532\u0562\u0533\u0563\u0534\u0564\u0535\u0565\u0536\u0566\u0537\u0567\u0538\u0568\u0539\u0569\u053A\u056A\u053B\u056B\u053C\u056C\u053D\u056D\u053E\u056E\u053F\u056F\u0540\u0570\u0541\u0571\u0542\u0572\u0543\u0573\u0544\u0574\u0545\u0575\u0546\u0576\u0547\u0577\u0548\u0578\u0549\u0579\u054A\u057A\u054B\u057B\u054C\u057C\u054D\u057D\u054E\u057E\u054F\u057F\u0550\u0580\u0551\u0581\u0552\u0582\u0553\u0583\u0554\u0584\u0555\u0585\u0556\u0586\u055A\uFFFD\"\n },\n \"rk1048\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0402\u0403\u201A\u0453\u201E\u2026\u2020\u2021\u20AC\u2030\u0409\u2039\u040A\u049A\u04BA\u040F\u0452\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\u0459\u203A\u045A\u049B\u04BB\u045F\u00A0\u04B0\u04B1\u04D8\u00A4\u04E8\u00A6\u00A7\u0401\u00A9\u0492\u00AB\u00AC\u00AD\u00AE\u04AE\u00B0\u00B1\u0406\u0456\u04E9\u00B5\u00B6\u00B7\u0451\u2116\u0493\u00BB\u04D9\u04A2\u04A3\u04AF\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\"\n },\n \"tcvn\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\\u0000\u00DA\u1EE4\\u0003\u1EEA\u1EEC\u1EEE\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\u1EE8\u1EF0\u1EF2\u1EF6\u1EF8\u00DD\u1EF4\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u007F\u00C0\u1EA2\u00C3\u00C1\u1EA0\u1EB6\u1EAC\u00C8\u1EBA\u1EBC\u00C9\u1EB8\u1EC6\u00CC\u1EC8\u0128\u00CD\u1ECA\u00D2\u1ECE\u00D5\u00D3\u1ECC\u1ED8\u1EDC\u1EDE\u1EE0\u1EDA\u1EE2\u00D9\u1EE6\u0168\u00A0\u0102\u00C2\u00CA\u00D4\u01A0\u01AF\u0110\u0103\u00E2\u00EA\u00F4\u01A1\u01B0\u0111\u1EB0\u0300\u0309\u0303\u0301\u0323\u00E0\u1EA3\u00E3\u00E1\u1EA1\u1EB2\u1EB1\u1EB3\u1EB5\u1EAF\u1EB4\u1EAE\u1EA6\u1EA8\u1EAA\u1EA4\u1EC0\u1EB7\u1EA7\u1EA9\u1EAB\u1EA5\u1EAD\u00E8\u1EC2\u1EBB\u1EBD\u00E9\u1EB9\u1EC1\u1EC3\u1EC5\u1EBF\u1EC7\u00EC\u1EC9\u1EC4\u1EBE\u1ED2\u0129\u00ED\u1ECB\u00F2\u1ED4\u1ECF\u00F5\u00F3\u1ECD\u1ED3\u1ED5\u1ED7\u1ED1\u1ED9\u1EDD\u1EDF\u1EE1\u1EDB\u1EE3\u00F9\u1ED6\u1EE7\u0169\u00FA\u1EE5\u1EEB\u1EED\u1EEF\u1EE9\u1EF1\u1EF3\u1EF7\u1EF9\u00FD\u1EF5\u1ED0\"\n },\n \"georgianacademy\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0160\u2039\u0152\u008D\u008E\u008F\u0090\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\u0161\u203A\u0153\u009D\u009E\u0178\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u10D0\u10D1\u10D2\u10D3\u10D4\u10D5\u10D6\u10D7\u10D8\u10D9\u10DA\u10DB\u10DC\u10DD\u10DE\u10DF\u10E0\u10E1\u10E2\u10E3\u10E4\u10E5\u10E6\u10E7\u10E8\u10E9\u10EA\u10EB\u10EC\u10ED\u10EE\u10EF\u10F0\u10F1\u10F2\u10F3\u10F4\u10F5\u10F6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u00FE\u00FF\"\n },\n \"georgianps\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0160\u2039\u0152\u008D\u008E\u008F\u0090\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\u0161\u203A\u0153\u009D\u009E\u0178\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u10D0\u10D1\u10D2\u10D3\u10D4\u10D5\u10D6\u10F1\u10D7\u10D8\u10D9\u10DA\u10DB\u10DC\u10F2\u10DD\u10DE\u10DF\u10E0\u10E1\u10E2\u10F3\u10E3\u10E4\u10E5\u10E6\u10E7\u10E8\u10E9\u10EA\u10EB\u10EC\u10ED\u10EE\u10F4\u10EF\u10F0\u10F5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u00FE\u00FF\"\n },\n \"pt154\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0496\u0492\u04EE\u0493\u201E\u2026\u04B6\u04AE\u04B2\u04AF\u04A0\u04E2\u04A2\u049A\u04BA\u04B8\u0497\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u04B3\u04B7\u04A1\u04E3\u04A3\u049B\u04BB\u04B9\u00A0\u040E\u045E\u0408\u04E8\u0498\u04B0\u00A7\u0401\u00A9\u04D8\u00AB\u00AC\u04EF\u00AE\u049C\u00B0\u04B1\u0406\u0456\u0499\u04E9\u00B6\u00B7\u0451\u2116\u04D9\u00BB\u0458\u04AA\u04AB\u049D\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\"\n },\n \"viscii\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\\u0000\\u0001\u1EB2\\u0003\\u0004\u1EB4\u1EAA\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\u1EF6\\u0015\\u0016\\u0017\\u0018\u1EF8\\u001a\\u001b\\u001c\\u001d\u1EF4\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u007F\u1EA0\u1EAE\u1EB0\u1EB6\u1EA4\u1EA6\u1EA8\u1EAC\u1EBC\u1EB8\u1EBE\u1EC0\u1EC2\u1EC4\u1EC6\u1ED0\u1ED2\u1ED4\u1ED6\u1ED8\u1EE2\u1EDA\u1EDC\u1EDE\u1ECA\u1ECE\u1ECC\u1EC8\u1EE6\u0168\u1EE4\u1EF2\u00D5\u1EAF\u1EB1\u1EB7\u1EA5\u1EA7\u1EA9\u1EAD\u1EBD\u1EB9\u1EBF\u1EC1\u1EC3\u1EC5\u1EC7\u1ED1\u1ED3\u1ED5\u1ED7\u1EE0\u01A0\u1ED9\u1EDD\u1EDF\u1ECB\u1EF0\u1EE8\u1EEA\u1EEC\u01A1\u1EDB\u01AF\u00C0\u00C1\u00C2\u00C3\u1EA2\u0102\u1EB3\u1EB5\u00C8\u00C9\u00CA\u1EBA\u00CC\u00CD\u0128\u1EF3\u0110\u1EE9\u00D2\u00D3\u00D4\u1EA1\u1EF7\u1EEB\u1EED\u00D9\u00DA\u1EF9\u1EF5\u00DD\u1EE1\u01B0\u00E0\u00E1\u00E2\u00E3\u1EA3\u0103\u1EEF\u1EAB\u00E8\u00E9\u00EA\u1EBB\u00EC\u00ED\u0129\u1EC9\u0111\u1EF1\u00F2\u00F3\u00F4\u00F5\u1ECF\u1ECD\u1EE5\u00F9\u00FA\u0169\u1EE7\u00FD\u1EE3\u1EEE\"\n },\n \"iso646cn\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#\u00A5%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}\u203E\u007F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\"\n },\n \"iso646jp\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\u00A5]^_`abcdefghijklmnopqrstuvwxyz{|}\u203E\u007F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\"\n },\n \"hproman8\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00C0\u00C2\u00C8\u00CA\u00CB\u00CE\u00CF\u00B4\u02CB\u02C6\u00A8\u02DC\u00D9\u00DB\u20A4\u00AF\u00DD\u00FD\u00B0\u00C7\u00E7\u00D1\u00F1\u00A1\u00BF\u00A4\u00A3\u00A5\u00A7\u0192\u00A2\u00E2\u00EA\u00F4\u00FB\u00E1\u00E9\u00F3\u00FA\u00E0\u00E8\u00F2\u00F9\u00E4\u00EB\u00F6\u00FC\u00C5\u00EE\u00D8\u00C6\u00E5\u00ED\u00F8\u00E6\u00C4\u00EC\u00D6\u00DC\u00C9\u00EF\u00DF\u00D4\u00C1\u00C3\u00E3\u00D0\u00F0\u00CD\u00CC\u00D3\u00D2\u00D5\u00F5\u0160\u0161\u00DA\u0178\u00FF\u00DE\u00FE\u00B7\u00B5\u00B6\u00BE\u2014\u00BC\u00BD\u00AA\u00BA\u00AB\u25A0\u00BB\u00B1\uFFFD\"\n },\n \"macintosh\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C4\u00C5\u00C7\u00C9\u00D1\u00D6\u00DC\u00E1\u00E0\u00E2\u00E4\u00E3\u00E5\u00E7\u00E9\u00E8\u00EA\u00EB\u00ED\u00EC\u00EE\u00EF\u00F1\u00F3\u00F2\u00F4\u00F6\u00F5\u00FA\u00F9\u00FB\u00FC\u2020\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u00A9\u2122\u00B4\u00A8\u2260\u00C6\u00D8\u221E\u00B1\u2264\u2265\u00A5\u00B5\u2202\u2211\u220F\u03C0\u222B\u00AA\u00BA\u2126\u00E6\u00F8\u00BF\u00A1\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u00C0\u00C3\u00D5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\u00FF\u0178\u2044\u00A4\u2039\u203A\uFB01\uFB02\u2021\u00B7\u201A\u201E\u2030\u00C2\u00CA\u00C1\u00CB\u00C8\u00CD\u00CE\u00CF\u00CC\u00D3\u00D4\uFFFD\u00D2\u00DA\u00DB\u00D9\u0131\u02C6\u02DC\u00AF\u02D8\u02D9\u02DA\u00B8\u02DD\u02DB\u02C7\"\n },\n \"ascii\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\"\n },\n \"tis620\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFFFD\uFFFD\uFFFD\uFFFD\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\uFFFD\uFFFD\uFFFD\uFFFD\"\n }\n}", "\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// Multibyte codec. In this scheme, a character is represented by 1 or more bytes.\n// Our codec supports UTF-16 surrogates, extensions for GB18030 and unicode sequences.\n// To save memory and loading time, we read table files only when requested.\n\nexports._dbcs = DBCSCodec;\n\nvar UNASSIGNED = -1,\n GB18030_CODE = -2,\n SEQ_START = -10,\n NODE_START = -1000,\n UNASSIGNED_NODE = new Array(0x100),\n DEF_CHAR = -1;\n\nfor (var i = 0; i < 0x100; i++)\n UNASSIGNED_NODE[i] = UNASSIGNED;\n\n\n// Class DBCSCodec reads and initializes mapping tables.\nfunction DBCSCodec(codecOptions, iconv) {\n this.encodingName = codecOptions.encodingName;\n if (!codecOptions)\n throw new Error(\"DBCS codec is called without the data.\")\n if (!codecOptions.table)\n throw new Error(\"Encoding '\" + this.encodingName + \"' has no data.\");\n\n // Load tables.\n var mappingTable = codecOptions.table();\n\n\n // Decode tables: MBCS -> Unicode.\n\n // decodeTables is a trie, encoded as an array of arrays of integers. Internal arrays are trie nodes and all have len = 256.\n // Trie root is decodeTables[0].\n // Values: >= 0 -> unicode character code. can be > 0xFFFF\n // == UNASSIGNED -> unknown/unassigned sequence.\n // == GB18030_CODE -> this is the end of a GB18030 4-byte sequence.\n // <= NODE_START -> index of the next node in our trie to process next byte.\n // <= SEQ_START -> index of the start of a character code sequence, in decodeTableSeq.\n this.decodeTables = [];\n this.decodeTables[0] = UNASSIGNED_NODE.slice(0); // Create root node.\n\n // Sometimes a MBCS char corresponds to a sequence of unicode chars. We store them as arrays of integers here. \n this.decodeTableSeq = [];\n\n // Actual mapping tables consist of chunks. Use them to fill up decode tables.\n for (var i = 0; i < mappingTable.length; i++)\n this._addDecodeChunk(mappingTable[i]);\n\n this.defaultCharUnicode = iconv.defaultCharUnicode;\n\n \n // Encode tables: Unicode -> DBCS.\n\n // `encodeTable` is array mapping from unicode char to encoded char. All its values are integers for performance.\n // Because it can be sparse, it is represented as array of buckets by 256 chars each. Bucket can be null.\n // Values: >= 0 -> it is a normal char. Write the value (if <=256 then 1 byte, if <=65536 then 2 bytes, etc.).\n // == UNASSIGNED -> no conversion found. Output a default char.\n // <= SEQ_START -> it's an index in encodeTableSeq, see below. The character starts a sequence.\n this.encodeTable = [];\n \n // `encodeTableSeq` is used when a sequence of unicode characters is encoded as a single code. We use a tree of\n // objects where keys correspond to characters in sequence and leafs are the encoded dbcs values. A special DEF_CHAR key\n // means end of sequence (needed when one sequence is a strict subsequence of another).\n // Objects are kept separately from encodeTable to increase performance.\n this.encodeTableSeq = [];\n\n // Some chars can be decoded, but need not be encoded.\n var skipEncodeChars = {};\n if (codecOptions.encodeSkipVals)\n for (var i = 0; i < codecOptions.encodeSkipVals.length; i++) {\n var val = codecOptions.encodeSkipVals[i];\n if (typeof val === 'number')\n skipEncodeChars[val] = true;\n else\n for (var j = val.from; j <= val.to; j++)\n skipEncodeChars[j] = true;\n }\n \n // Use decode trie to recursively fill out encode tables.\n this._fillEncodeTable(0, 0, skipEncodeChars);\n\n // Add more encoding pairs when needed.\n if (codecOptions.encodeAdd) {\n for (var uChar in codecOptions.encodeAdd)\n if (Object.prototype.hasOwnProperty.call(codecOptions.encodeAdd, uChar))\n this._setEncodeChar(uChar.charCodeAt(0), codecOptions.encodeAdd[uChar]);\n }\n\n this.defCharSB = this.encodeTable[0][iconv.defaultCharSingleByte.charCodeAt(0)];\n if (this.defCharSB === UNASSIGNED) this.defCharSB = this.encodeTable[0]['?'];\n if (this.defCharSB === UNASSIGNED) this.defCharSB = \"?\".charCodeAt(0);\n\n\n // Load & create GB18030 tables when needed.\n if (typeof codecOptions.gb18030 === 'function') {\n this.gb18030 = codecOptions.gb18030(); // Load GB18030 ranges.\n\n // Add GB18030 decode tables.\n var thirdByteNodeIdx = this.decodeTables.length;\n var thirdByteNode = this.decodeTables[thirdByteNodeIdx] = UNASSIGNED_NODE.slice(0);\n\n var fourthByteNodeIdx = this.decodeTables.length;\n var fourthByteNode = this.decodeTables[fourthByteNodeIdx] = UNASSIGNED_NODE.slice(0);\n\n for (var i = 0x81; i <= 0xFE; i++) {\n var secondByteNodeIdx = NODE_START - this.decodeTables[0][i];\n var secondByteNode = this.decodeTables[secondByteNodeIdx];\n for (var j = 0x30; j <= 0x39; j++)\n secondByteNode[j] = NODE_START - thirdByteNodeIdx;\n }\n for (var i = 0x81; i <= 0xFE; i++)\n thirdByteNode[i] = NODE_START - fourthByteNodeIdx;\n for (var i = 0x30; i <= 0x39; i++)\n fourthByteNode[i] = GB18030_CODE\n } \n}\n\nDBCSCodec.prototype.encoder = DBCSEncoder;\nDBCSCodec.prototype.decoder = DBCSDecoder;\n\n// Decoder helpers\nDBCSCodec.prototype._getDecodeTrieNode = function(addr) {\n var bytes = [];\n for (; addr > 0; addr >>= 8)\n bytes.push(addr & 0xFF);\n if (bytes.length == 0)\n bytes.push(0);\n\n var node = this.decodeTables[0];\n for (var i = bytes.length-1; i > 0; i--) { // Traverse nodes deeper into the trie.\n var val = node[bytes[i]];\n\n if (val == UNASSIGNED) { // Create new node.\n node[bytes[i]] = NODE_START - this.decodeTables.length;\n this.decodeTables.push(node = UNASSIGNED_NODE.slice(0));\n }\n else if (val <= NODE_START) { // Existing node.\n node = this.decodeTables[NODE_START - val];\n }\n else\n throw new Error(\"Overwrite byte in \" + this.encodingName + \", addr: \" + addr.toString(16));\n }\n return node;\n}\n\n\nDBCSCodec.prototype._addDecodeChunk = function(chunk) {\n // First element of chunk is the hex mbcs code where we start.\n var curAddr = parseInt(chunk[0], 16);\n\n // Choose the decoding node where we'll write our chars.\n var writeTable = this._getDecodeTrieNode(curAddr);\n curAddr = curAddr & 0xFF;\n\n // Write all other elements of the chunk to the table.\n for (var k = 1; k < chunk.length; k++) {\n var part = chunk[k];\n if (typeof part === \"string\") { // String, write as-is.\n for (var l = 0; l < part.length;) {\n var code = part.charCodeAt(l++);\n if (0xD800 <= code && code < 0xDC00) { // Decode surrogate\n var codeTrail = part.charCodeAt(l++);\n if (0xDC00 <= codeTrail && codeTrail < 0xE000)\n writeTable[curAddr++] = 0x10000 + (code - 0xD800) * 0x400 + (codeTrail - 0xDC00);\n else\n throw new Error(\"Incorrect surrogate pair in \" + this.encodingName + \" at chunk \" + chunk[0]);\n }\n else if (0x0FF0 < code && code <= 0x0FFF) { // Character sequence (our own encoding used)\n var len = 0xFFF - code + 2;\n var seq = [];\n for (var m = 0; m < len; m++)\n seq.push(part.charCodeAt(l++)); // Simple variation: don't support surrogates or subsequences in seq.\n\n writeTable[curAddr++] = SEQ_START - this.decodeTableSeq.length;\n this.decodeTableSeq.push(seq);\n }\n else\n writeTable[curAddr++] = code; // Basic char\n }\n } \n else if (typeof part === \"number\") { // Integer, meaning increasing sequence starting with prev character.\n var charCode = writeTable[curAddr - 1] + 1;\n for (var l = 0; l < part; l++)\n writeTable[curAddr++] = charCode++;\n }\n else\n throw new Error(\"Incorrect type '\" + typeof part + \"' given in \" + this.encodingName + \" at chunk \" + chunk[0]);\n }\n if (curAddr > 0xFF)\n throw new Error(\"Incorrect chunk in \" + this.encodingName + \" at addr \" + chunk[0] + \": too long\" + curAddr);\n}\n\n// Encoder helpers\nDBCSCodec.prototype._getEncodeBucket = function(uCode) {\n var high = uCode >> 8; // This could be > 0xFF because of astral characters.\n if (this.encodeTable[high] === undefined)\n this.encodeTable[high] = UNASSIGNED_NODE.slice(0); // Create bucket on demand.\n return this.encodeTable[high];\n}\n\nDBCSCodec.prototype._setEncodeChar = function(uCode, dbcsCode) {\n var bucket = this._getEncodeBucket(uCode);\n var low = uCode & 0xFF;\n if (bucket[low] <= SEQ_START)\n this.encodeTableSeq[SEQ_START-bucket[low]][DEF_CHAR] = dbcsCode; // There's already a sequence, set a single-char subsequence of it.\n else if (bucket[low] == UNASSIGNED)\n bucket[low] = dbcsCode;\n}\n\nDBCSCodec.prototype._setEncodeSequence = function(seq, dbcsCode) {\n \n // Get the root of character tree according to first character of the sequence.\n var uCode = seq[0];\n var bucket = this._getEncodeBucket(uCode);\n var low = uCode & 0xFF;\n\n var node;\n if (bucket[low] <= SEQ_START) {\n // There's already a sequence with - use it.\n node = this.encodeTableSeq[SEQ_START-bucket[low]];\n }\n else {\n // There was no sequence object - allocate a new one.\n node = {};\n if (bucket[low] !== UNASSIGNED) node[DEF_CHAR] = bucket[low]; // If a char was set before - make it a single-char subsequence.\n bucket[low] = SEQ_START - this.encodeTableSeq.length;\n this.encodeTableSeq.push(node);\n }\n\n // Traverse the character tree, allocating new nodes as needed.\n for (var j = 1; j < seq.length-1; j++) {\n var oldVal = node[uCode];\n if (typeof oldVal === 'object')\n node = oldVal;\n else {\n node = node[uCode] = {}\n if (oldVal !== undefined)\n node[DEF_CHAR] = oldVal\n }\n }\n\n // Set the leaf to given dbcsCode.\n uCode = seq[seq.length-1];\n node[uCode] = dbcsCode;\n}\n\nDBCSCodec.prototype._fillEncodeTable = function(nodeIdx, prefix, skipEncodeChars) {\n var node = this.decodeTables[nodeIdx];\n for (var i = 0; i < 0x100; i++) {\n var uCode = node[i];\n var mbCode = prefix + i;\n if (skipEncodeChars[mbCode])\n continue;\n\n if (uCode >= 0)\n this._setEncodeChar(uCode, mbCode);\n else if (uCode <= NODE_START)\n this._fillEncodeTable(NODE_START - uCode, mbCode << 8, skipEncodeChars);\n else if (uCode <= SEQ_START)\n this._setEncodeSequence(this.decodeTableSeq[SEQ_START - uCode], mbCode);\n }\n}\n\n\n\n// == Encoder ==================================================================\n\nfunction DBCSEncoder(options, codec) {\n // Encoder state\n this.leadSurrogate = -1;\n this.seqObj = undefined;\n \n // Static data\n this.encodeTable = codec.encodeTable;\n this.encodeTableSeq = codec.encodeTableSeq;\n this.defaultCharSingleByte = codec.defCharSB;\n this.gb18030 = codec.gb18030;\n}\n\nDBCSEncoder.prototype.write = function(str) {\n var newBuf = Buffer.alloc(str.length * (this.gb18030 ? 4 : 3)),\n leadSurrogate = this.leadSurrogate,\n seqObj = this.seqObj, nextChar = -1,\n i = 0, j = 0;\n\n while (true) {\n // 0. Get next character.\n if (nextChar === -1) {\n if (i == str.length) break;\n var uCode = str.charCodeAt(i++);\n }\n else {\n var uCode = nextChar;\n nextChar = -1; \n }\n\n // 1. Handle surrogates.\n if (0xD800 <= uCode && uCode < 0xE000) { // Char is one of surrogates.\n if (uCode < 0xDC00) { // We've got lead surrogate.\n if (leadSurrogate === -1) {\n leadSurrogate = uCode;\n continue;\n } else {\n leadSurrogate = uCode;\n // Double lead surrogate found.\n uCode = UNASSIGNED;\n }\n } else { // We've got trail surrogate.\n if (leadSurrogate !== -1) {\n uCode = 0x10000 + (leadSurrogate - 0xD800) * 0x400 + (uCode - 0xDC00);\n leadSurrogate = -1;\n } else {\n // Incomplete surrogate pair - only trail surrogate found.\n uCode = UNASSIGNED;\n }\n \n }\n }\n else if (leadSurrogate !== -1) {\n // Incomplete surrogate pair - only lead surrogate found.\n nextChar = uCode; uCode = UNASSIGNED; // Write an error, then current char.\n leadSurrogate = -1;\n }\n\n // 2. Convert uCode character.\n var dbcsCode = UNASSIGNED;\n if (seqObj !== undefined && uCode != UNASSIGNED) { // We are in the middle of the sequence\n var resCode = seqObj[uCode];\n if (typeof resCode === 'object') { // Sequence continues.\n seqObj = resCode;\n continue;\n\n } else if (typeof resCode == 'number') { // Sequence finished. Write it.\n dbcsCode = resCode;\n\n } else if (resCode == undefined) { // Current character is not part of the sequence.\n\n // Try default character for this sequence\n resCode = seqObj[DEF_CHAR];\n if (resCode !== undefined) {\n dbcsCode = resCode; // Found. Write it.\n nextChar = uCode; // Current character will be written too in the next iteration.\n\n } else {\n // TODO: What if we have no default? (resCode == undefined)\n // Then, we should write first char of the sequence as-is and try the rest recursively.\n // Didn't do it for now because no encoding has this situation yet.\n // Currently, just skip the sequence and write current char.\n }\n }\n seqObj = undefined;\n }\n else if (uCode >= 0) { // Regular character\n var subtable = this.encodeTable[uCode >> 8];\n if (subtable !== undefined)\n dbcsCode = subtable[uCode & 0xFF];\n \n if (dbcsCode <= SEQ_START) { // Sequence start\n seqObj = this.encodeTableSeq[SEQ_START-dbcsCode];\n continue;\n }\n\n if (dbcsCode == UNASSIGNED && this.gb18030) {\n // Use GB18030 algorithm to find character(s) to write.\n var idx = findIdx(this.gb18030.uChars, uCode);\n if (idx != -1) {\n var dbcsCode = this.gb18030.gbChars[idx] + (uCode - this.gb18030.uChars[idx]);\n newBuf[j++] = 0x81 + Math.floor(dbcsCode / 12600); dbcsCode = dbcsCode % 12600;\n newBuf[j++] = 0x30 + Math.floor(dbcsCode / 1260); dbcsCode = dbcsCode % 1260;\n newBuf[j++] = 0x81 + Math.floor(dbcsCode / 10); dbcsCode = dbcsCode % 10;\n newBuf[j++] = 0x30 + dbcsCode;\n continue;\n }\n }\n }\n\n // 3. Write dbcsCode character.\n if (dbcsCode === UNASSIGNED)\n dbcsCode = this.defaultCharSingleByte;\n \n if (dbcsCode < 0x100) {\n newBuf[j++] = dbcsCode;\n }\n else if (dbcsCode < 0x10000) {\n newBuf[j++] = dbcsCode >> 8; // high byte\n newBuf[j++] = dbcsCode & 0xFF; // low byte\n }\n else {\n newBuf[j++] = dbcsCode >> 16;\n newBuf[j++] = (dbcsCode >> 8) & 0xFF;\n newBuf[j++] = dbcsCode & 0xFF;\n }\n }\n\n this.seqObj = seqObj;\n this.leadSurrogate = leadSurrogate;\n return newBuf.slice(0, j);\n}\n\nDBCSEncoder.prototype.end = function() {\n if (this.leadSurrogate === -1 && this.seqObj === undefined)\n return; // All clean. Most often case.\n\n var newBuf = Buffer.alloc(10), j = 0;\n\n if (this.seqObj) { // We're in the sequence.\n var dbcsCode = this.seqObj[DEF_CHAR];\n if (dbcsCode !== undefined) { // Write beginning of the sequence.\n if (dbcsCode < 0x100) {\n newBuf[j++] = dbcsCode;\n }\n else {\n newBuf[j++] = dbcsCode >> 8; // high byte\n newBuf[j++] = dbcsCode & 0xFF; // low byte\n }\n } else {\n // See todo above.\n }\n this.seqObj = undefined;\n }\n\n if (this.leadSurrogate !== -1) {\n // Incomplete surrogate pair - only lead surrogate found.\n newBuf[j++] = this.defaultCharSingleByte;\n this.leadSurrogate = -1;\n }\n \n return newBuf.slice(0, j);\n}\n\n// Export for testing\nDBCSEncoder.prototype.findIdx = findIdx;\n\n\n// == Decoder ==================================================================\n\nfunction DBCSDecoder(options, codec) {\n // Decoder state\n this.nodeIdx = 0;\n this.prevBuf = Buffer.alloc(0);\n\n // Static data\n this.decodeTables = codec.decodeTables;\n this.decodeTableSeq = codec.decodeTableSeq;\n this.defaultCharUnicode = codec.defaultCharUnicode;\n this.gb18030 = codec.gb18030;\n}\n\nDBCSDecoder.prototype.write = function(buf) {\n var newBuf = Buffer.alloc(buf.length*2),\n nodeIdx = this.nodeIdx, \n prevBuf = this.prevBuf, prevBufOffset = this.prevBuf.length,\n seqStart = -this.prevBuf.length, // idx of the start of current parsed sequence.\n uCode;\n\n if (prevBufOffset > 0) // Make prev buf overlap a little to make it easier to slice later.\n prevBuf = Buffer.concat([prevBuf, buf.slice(0, 10)]);\n \n for (var i = 0, j = 0; i < buf.length; i++) {\n var curByte = (i >= 0) ? buf[i] : prevBuf[i + prevBufOffset];\n\n // Lookup in current trie node.\n var uCode = this.decodeTables[nodeIdx][curByte];\n\n if (uCode >= 0) { \n // Normal character, just use it.\n }\n else if (uCode === UNASSIGNED) { // Unknown char.\n // TODO: Callback with seq.\n //var curSeq = (seqStart >= 0) ? buf.slice(seqStart, i+1) : prevBuf.slice(seqStart + prevBufOffset, i+1 + prevBufOffset);\n i = seqStart; // Try to parse again, after skipping first byte of the sequence ('i' will be incremented by 'for' cycle).\n uCode = this.defaultCharUnicode.charCodeAt(0);\n }\n else if (uCode === GB18030_CODE) {\n var curSeq = (seqStart >= 0) ? buf.slice(seqStart, i+1) : prevBuf.slice(seqStart + prevBufOffset, i+1 + prevBufOffset);\n var ptr = (curSeq[0]-0x81)*12600 + (curSeq[1]-0x30)*1260 + (curSeq[2]-0x81)*10 + (curSeq[3]-0x30);\n var idx = findIdx(this.gb18030.gbChars, ptr);\n uCode = this.gb18030.uChars[idx] + ptr - this.gb18030.gbChars[idx];\n }\n else if (uCode <= NODE_START) { // Go to next trie node.\n nodeIdx = NODE_START - uCode;\n continue;\n }\n else if (uCode <= SEQ_START) { // Output a sequence of chars.\n var seq = this.decodeTableSeq[SEQ_START - uCode];\n for (var k = 0; k < seq.length - 1; k++) {\n uCode = seq[k];\n newBuf[j++] = uCode & 0xFF;\n newBuf[j++] = uCode >> 8;\n }\n uCode = seq[seq.length-1];\n }\n else\n throw new Error(\"iconv-lite internal error: invalid decoding table value \" + uCode + \" at \" + nodeIdx + \"/\" + curByte);\n\n // Write the character to buffer, handling higher planes using surrogate pair.\n if (uCode > 0xFFFF) { \n uCode -= 0x10000;\n var uCodeLead = 0xD800 + Math.floor(uCode / 0x400);\n newBuf[j++] = uCodeLead & 0xFF;\n newBuf[j++] = uCodeLead >> 8;\n\n uCode = 0xDC00 + uCode % 0x400;\n }\n newBuf[j++] = uCode & 0xFF;\n newBuf[j++] = uCode >> 8;\n\n // Reset trie node.\n nodeIdx = 0; seqStart = i+1;\n }\n\n this.nodeIdx = nodeIdx;\n this.prevBuf = (seqStart >= 0) ? buf.slice(seqStart) : prevBuf.slice(seqStart + prevBufOffset);\n return newBuf.slice(0, j).toString('ucs2');\n}\n\nDBCSDecoder.prototype.end = function() {\n var ret = '';\n\n // Try to parse all remaining chars.\n while (this.prevBuf.length > 0) {\n // Skip 1 character in the buffer.\n ret += this.defaultCharUnicode;\n var buf = this.prevBuf.slice(1);\n\n // Parse remaining as usual.\n this.prevBuf = Buffer.alloc(0);\n this.nodeIdx = 0;\n if (buf.length > 0)\n ret += this.write(buf);\n }\n\n this.nodeIdx = 0;\n return ret;\n}\n\n// Binary search for GB18030. Returns largest i such that table[i] <= val.\nfunction findIdx(table, val) {\n if (table[0] > val)\n return -1;\n\n var l = 0, r = table.length;\n while (l < r-1) { // always table[l] <= val < table[r]\n var mid = l + Math.floor((r-l+1)/2);\n if (table[mid] <= val)\n l = mid;\n else\n r = mid;\n }\n return l;\n}\n\n", "\"use strict\";\n\n// Description of supported double byte encodings and aliases.\n// Tables are not require()-d until they are needed to speed up library load.\n// require()-s are direct to support Browserify.\n\nmodule.exports = {\n \n // == Japanese/ShiftJIS ====================================================\n // All japanese encodings are based on JIS X set of standards:\n // JIS X 0201 - Single-byte encoding of ASCII + \u00A5 + Kana chars at 0xA1-0xDF.\n // JIS X 0208 - Main set of 6879 characters, placed in 94x94 plane, to be encoded by 2 bytes. \n // Has several variations in 1978, 1983, 1990 and 1997.\n // JIS X 0212 - Supplementary plane of 6067 chars in 94x94 plane. 1990. Effectively dead.\n // JIS X 0213 - Extension and modern replacement of 0208 and 0212. Total chars: 11233.\n // 2 planes, first is superset of 0208, second - revised 0212.\n // Introduced in 2000, revised 2004. Some characters are in Unicode Plane 2 (0x2xxxx)\n\n // Byte encodings are:\n // * Shift_JIS: Compatible with 0201, uses not defined chars in top half as lead bytes for double-byte\n // encoding of 0208. Lead byte ranges: 0x81-0x9F, 0xE0-0xEF; Trail byte ranges: 0x40-0x7E, 0x80-0x9E, 0x9F-0xFC.\n // Windows CP932 is a superset of Shift_JIS. Some companies added more chars, notably KDDI.\n // * EUC-JP: Up to 3 bytes per character. Used mostly on *nixes.\n // 0x00-0x7F - lower part of 0201\n // 0x8E, 0xA1-0xDF - upper part of 0201\n // (0xA1-0xFE)x2 - 0208 plane (94x94).\n // 0x8F, (0xA1-0xFE)x2 - 0212 plane (94x94).\n // * JIS X 208: 7-bit, direct encoding of 0208. Byte ranges: 0x21-0x7E (94 values). Uncommon.\n // Used as-is in ISO2022 family.\n // * ISO2022-JP: Stateful encoding, with escape sequences to switch between ASCII, \n // 0201-1976 Roman, 0208-1978, 0208-1983.\n // * ISO2022-JP-1: Adds esc seq for 0212-1990.\n // * ISO2022-JP-2: Adds esc seq for GB2313-1980, KSX1001-1992, ISO8859-1, ISO8859-7.\n // * ISO2022-JP-3: Adds esc seq for 0201-1976 Kana set, 0213-2000 Planes 1, 2.\n // * ISO2022-JP-2004: Adds 0213-2004 Plane 1.\n //\n // After JIS X 0213 appeared, Shift_JIS-2004, EUC-JISX0213 and ISO2022-JP-2004 followed, with just changing the planes.\n //\n // Overall, it seems that it's a mess :( http://www8.plala.or.jp/tkubota1/unicode-symbols-map2.html\n\n 'shiftjis': {\n type: '_dbcs',\n table: function() { return require('./tables/shiftjis.json') },\n encodeAdd: {'\\u00a5': 0x5C, '\\u203E': 0x7E},\n encodeSkipVals: [{from: 0xED40, to: 0xF940}],\n },\n 'csshiftjis': 'shiftjis',\n 'mskanji': 'shiftjis',\n 'sjis': 'shiftjis',\n 'windows31j': 'shiftjis',\n 'ms31j': 'shiftjis',\n 'xsjis': 'shiftjis',\n 'windows932': 'shiftjis',\n 'ms932': 'shiftjis',\n '932': 'shiftjis',\n 'cp932': 'shiftjis',\n\n 'eucjp': {\n type: '_dbcs',\n table: function() { return require('./tables/eucjp.json') },\n encodeAdd: {'\\u00a5': 0x5C, '\\u203E': 0x7E},\n },\n\n // TODO: KDDI extension to Shift_JIS\n // TODO: IBM CCSID 942 = CP932, but F0-F9 custom chars and other char changes.\n // TODO: IBM CCSID 943 = Shift_JIS = CP932 with original Shift_JIS lower 128 chars.\n\n\n // == Chinese/GBK ==========================================================\n // http://en.wikipedia.org/wiki/GBK\n // We mostly implement W3C recommendation: https://www.w3.org/TR/encoding/#gbk-encoder\n\n // Oldest GB2312 (1981, ~7600 chars) is a subset of CP936\n 'gb2312': 'cp936',\n 'gb231280': 'cp936',\n 'gb23121980': 'cp936',\n 'csgb2312': 'cp936',\n 'csiso58gb231280': 'cp936',\n 'euccn': 'cp936',\n\n // Microsoft's CP936 is a subset and approximation of GBK.\n 'windows936': 'cp936',\n 'ms936': 'cp936',\n '936': 'cp936',\n 'cp936': {\n type: '_dbcs',\n table: function() { return require('./tables/cp936.json') },\n },\n\n // GBK (~22000 chars) is an extension of CP936 that added user-mapped chars and some other.\n 'gbk': {\n type: '_dbcs',\n table: function() { return require('./tables/cp936.json').concat(require('./tables/gbk-added.json')) },\n },\n 'xgbk': 'gbk',\n 'isoir58': 'gbk',\n\n // GB18030 is an algorithmic extension of GBK.\n // Main source: https://www.w3.org/TR/encoding/#gbk-encoder\n // http://icu-project.org/docs/papers/gb18030.html\n // http://source.icu-project.org/repos/icu/data/trunk/charset/data/xml/gb-18030-2000.xml\n // http://www.khngai.com/chinese/charmap/tblgbk.php?page=0\n 'gb18030': {\n type: '_dbcs',\n table: function() { return require('./tables/cp936.json').concat(require('./tables/gbk-added.json')) },\n gb18030: function() { return require('./tables/gb18030-ranges.json') },\n encodeSkipVals: [0x80],\n encodeAdd: {'\u20AC': 0xA2E3},\n },\n\n 'chinese': 'gb18030',\n\n\n // == Korean ===============================================================\n // EUC-KR, KS_C_5601 and KS X 1001 are exactly the same.\n 'windows949': 'cp949',\n 'ms949': 'cp949',\n '949': 'cp949',\n 'cp949': {\n type: '_dbcs',\n table: function() { return require('./tables/cp949.json') },\n },\n\n 'cseuckr': 'cp949',\n 'csksc56011987': 'cp949',\n 'euckr': 'cp949',\n 'isoir149': 'cp949',\n 'korean': 'cp949',\n 'ksc56011987': 'cp949',\n 'ksc56011989': 'cp949',\n 'ksc5601': 'cp949',\n\n\n // == Big5/Taiwan/Hong Kong ================================================\n // There are lots of tables for Big5 and cp950. Please see the following links for history:\n // http://moztw.org/docs/big5/ http://www.haible.de/bruno/charsets/conversion-tables/Big5.html\n // Variations, in roughly number of defined chars:\n // * Windows CP 950: Microsoft variant of Big5. Canonical: http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP950.TXT\n // * Windows CP 951: Microsoft variant of Big5-HKSCS-2001. Seems to be never public. http://me.abelcheung.org/articles/research/what-is-cp951/\n // * Big5-2003 (Taiwan standard) almost superset of cp950.\n // * Unicode-at-on (UAO) / Mozilla 1.8. Falling out of use on the Web. Not supported by other browsers.\n // * Big5-HKSCS (-2001, -2004, -2008). Hong Kong standard. \n // many unicode code points moved from PUA to Supplementary plane (U+2XXXX) over the years.\n // Plus, it has 4 combining sequences.\n // Seems that Mozilla refused to support it for 10 yrs. https://bugzilla.mozilla.org/show_bug.cgi?id=162431 https://bugzilla.mozilla.org/show_bug.cgi?id=310299\n // because big5-hkscs is the only encoding to include astral characters in non-algorithmic way.\n // Implementations are not consistent within browsers; sometimes labeled as just big5.\n // MS Internet Explorer switches from big5 to big5-hkscs when a patch applied.\n // Great discussion & recap of what's going on https://bugzilla.mozilla.org/show_bug.cgi?id=912470#c31\n // In the encoder, it might make sense to support encoding old PUA mappings to Big5 bytes seq-s.\n // Official spec: http://www.ogcio.gov.hk/en/business/tech_promotion/ccli/terms/doc/2003cmp_2008.txt\n // http://www.ogcio.gov.hk/tc/business/tech_promotion/ccli/terms/doc/hkscs-2008-big5-iso.txt\n // \n // Current understanding of how to deal with Big5(-HKSCS) is in the Encoding Standard, http://encoding.spec.whatwg.org/#big5-encoder\n // Unicode mapping (http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/OTHER/BIG5.TXT) is said to be wrong.\n\n 'windows950': 'cp950',\n 'ms950': 'cp950',\n '950': 'cp950',\n 'cp950': {\n type: '_dbcs',\n table: function() { return require('./tables/cp950.json') },\n },\n\n // Big5 has many variations and is an extension of cp950. We use Encoding Standard's as a consensus.\n 'big5': 'big5hkscs',\n 'big5hkscs': {\n type: '_dbcs',\n table: function() { return require('./tables/cp950.json').concat(require('./tables/big5-added.json')) },\n encodeSkipVals: [0xa2cc],\n },\n\n 'cnbig5': 'big5hkscs',\n 'csbig5': 'big5hkscs',\n 'xxbig5': 'big5hkscs',\n};\n", "\"use strict\";\n\n// Update this array if you add/rename/remove files in this directory.\n// We support Browserify by skipping automatic module discovery and requiring modules directly.\nvar modules = [\n require(\"./internal\"),\n require(\"./utf16\"),\n require(\"./utf7\"),\n require(\"./sbcs-codec\"),\n require(\"./sbcs-data\"),\n require(\"./sbcs-data-generated\"),\n require(\"./dbcs-codec\"),\n require(\"./dbcs-data\"),\n];\n\n// Put all encoding/alias/codec definitions to single object and export it. \nfor (var i = 0; i < modules.length; i++) {\n var module = modules[i];\n for (var enc in module)\n if (Object.prototype.hasOwnProperty.call(module, enc))\n exports[enc] = module[enc];\n}\n", "\"use strict\";\n\nvar Buffer = require(\"buffer\").Buffer,\n Transform = require(\"stream\").Transform;\n\n\n// == Exports ==================================================================\nmodule.exports = function(iconv) {\n \n // Additional Public API.\n iconv.encodeStream = function encodeStream(encoding, options) {\n return new IconvLiteEncoderStream(iconv.getEncoder(encoding, options), options);\n }\n\n iconv.decodeStream = function decodeStream(encoding, options) {\n return new IconvLiteDecoderStream(iconv.getDecoder(encoding, options), options);\n }\n\n iconv.supportsStreams = true;\n\n\n // Not published yet.\n iconv.IconvLiteEncoderStream = IconvLiteEncoderStream;\n iconv.IconvLiteDecoderStream = IconvLiteDecoderStream;\n iconv._collect = IconvLiteDecoderStream.prototype.collect;\n};\n\n\n// == Encoder stream =======================================================\nfunction IconvLiteEncoderStream(conv, options) {\n this.conv = conv;\n options = options || {};\n options.decodeStrings = false; // We accept only strings, so we don't need to decode them.\n Transform.call(this, options);\n}\n\nIconvLiteEncoderStream.prototype = Object.create(Transform.prototype, {\n constructor: { value: IconvLiteEncoderStream }\n});\n\nIconvLiteEncoderStream.prototype._transform = function(chunk, encoding, done) {\n if (typeof chunk != 'string')\n return done(new Error(\"Iconv encoding stream needs strings as its input.\"));\n try {\n var res = this.conv.write(chunk);\n if (res && res.length) this.push(res);\n done();\n }\n catch (e) {\n done(e);\n }\n}\n\nIconvLiteEncoderStream.prototype._flush = function(done) {\n try {\n var res = this.conv.end();\n if (res && res.length) this.push(res);\n done();\n }\n catch (e) {\n done(e);\n }\n}\n\nIconvLiteEncoderStream.prototype.collect = function(cb) {\n var chunks = [];\n this.on('error', cb);\n this.on('data', function(chunk) { chunks.push(chunk); });\n this.on('end', function() {\n cb(null, Buffer.concat(chunks));\n });\n return this;\n}\n\n\n// == Decoder stream =======================================================\nfunction IconvLiteDecoderStream(conv, options) {\n this.conv = conv;\n options = options || {};\n options.encoding = this.encoding = 'utf8'; // We output strings.\n Transform.call(this, options);\n}\n\nIconvLiteDecoderStream.prototype = Object.create(Transform.prototype, {\n constructor: { value: IconvLiteDecoderStream }\n});\n\nIconvLiteDecoderStream.prototype._transform = function(chunk, encoding, done) {\n if (!Buffer.isBuffer(chunk))\n return done(new Error(\"Iconv decoding stream needs buffers as its input.\"));\n try {\n var res = this.conv.write(chunk);\n if (res && res.length) this.push(res, this.encoding);\n done();\n }\n catch (e) {\n done(e);\n }\n}\n\nIconvLiteDecoderStream.prototype._flush = function(done) {\n try {\n var res = this.conv.end();\n if (res && res.length) this.push(res, this.encoding); \n done();\n }\n catch (e) {\n done(e);\n }\n}\n\nIconvLiteDecoderStream.prototype.collect = function(cb) {\n var res = '';\n this.on('error', cb);\n this.on('data', function(chunk) { res += chunk; });\n this.on('end', function() {\n cb(null, res);\n });\n return this;\n}\n\n", "\"use strict\";\nvar Buffer = require(\"buffer\").Buffer;\n// Note: not polyfilled with safer-buffer on a purpose, as overrides Buffer\n\n// == Extend Node primitives to use iconv-lite =================================\n\nmodule.exports = function (iconv) {\n var original = undefined; // Place to keep original methods.\n\n // Node authors rewrote Buffer internals to make it compatible with\n // Uint8Array and we cannot patch key functions since then.\n // Note: this does use older Buffer API on a purpose\n iconv.supportsNodeEncodingsExtension = !(Buffer.from || new Buffer(0) instanceof Uint8Array);\n\n iconv.extendNodeEncodings = function extendNodeEncodings() {\n if (original) return;\n original = {};\n\n if (!iconv.supportsNodeEncodingsExtension) {\n console.error(\"ACTION NEEDED: require('iconv-lite').extendNodeEncodings() is not supported in your version of Node\");\n console.error(\"See more info at https://github.com/ashtuchkin/iconv-lite/wiki/Node-v4-compatibility\");\n return;\n }\n\n var nodeNativeEncodings = {\n 'hex': true, 'utf8': true, 'utf-8': true, 'ascii': true, 'binary': true, \n 'base64': true, 'ucs2': true, 'ucs-2': true, 'utf16le': true, 'utf-16le': true,\n };\n\n Buffer.isNativeEncoding = function(enc) {\n return enc && nodeNativeEncodings[enc.toLowerCase()];\n }\n\n // -- SlowBuffer -----------------------------------------------------------\n var SlowBuffer = require('buffer').SlowBuffer;\n\n original.SlowBufferToString = SlowBuffer.prototype.toString;\n SlowBuffer.prototype.toString = function(encoding, start, end) {\n encoding = String(encoding || 'utf8').toLowerCase();\n\n // Use native conversion when possible\n if (Buffer.isNativeEncoding(encoding))\n return original.SlowBufferToString.call(this, encoding, start, end);\n\n // Otherwise, use our decoding method.\n if (typeof start == 'undefined') start = 0;\n if (typeof end == 'undefined') end = this.length;\n return iconv.decode(this.slice(start, end), encoding);\n }\n\n original.SlowBufferWrite = SlowBuffer.prototype.write;\n SlowBuffer.prototype.write = function(string, offset, length, encoding) {\n // Support both (string, offset, length, encoding)\n // and the legacy (string, encoding, offset, length)\n if (isFinite(offset)) {\n if (!isFinite(length)) {\n encoding = length;\n length = undefined;\n }\n } else { // legacy\n var swap = encoding;\n encoding = offset;\n offset = length;\n length = swap;\n }\n\n offset = +offset || 0;\n var remaining = this.length - offset;\n if (!length) {\n length = remaining;\n } else {\n length = +length;\n if (length > remaining) {\n length = remaining;\n }\n }\n encoding = String(encoding || 'utf8').toLowerCase();\n\n // Use native conversion when possible\n if (Buffer.isNativeEncoding(encoding))\n return original.SlowBufferWrite.call(this, string, offset, length, encoding);\n\n if (string.length > 0 && (length < 0 || offset < 0))\n throw new RangeError('attempt to write beyond buffer bounds');\n\n // Otherwise, use our encoding method.\n var buf = iconv.encode(string, encoding);\n if (buf.length < length) length = buf.length;\n buf.copy(this, offset, 0, length);\n return length;\n }\n\n // -- Buffer ---------------------------------------------------------------\n\n original.BufferIsEncoding = Buffer.isEncoding;\n Buffer.isEncoding = function(encoding) {\n return Buffer.isNativeEncoding(encoding) || iconv.encodingExists(encoding);\n }\n\n original.BufferByteLength = Buffer.byteLength;\n Buffer.byteLength = SlowBuffer.byteLength = function(str, encoding) {\n encoding = String(encoding || 'utf8').toLowerCase();\n\n // Use native conversion when possible\n if (Buffer.isNativeEncoding(encoding))\n return original.BufferByteLength.call(this, str, encoding);\n\n // Slow, I know, but we don't have a better way yet.\n return iconv.encode(str, encoding).length;\n }\n\n original.BufferToString = Buffer.prototype.toString;\n Buffer.prototype.toString = function(encoding, start, end) {\n encoding = String(encoding || 'utf8').toLowerCase();\n\n // Use native conversion when possible\n if (Buffer.isNativeEncoding(encoding))\n return original.BufferToString.call(this, encoding, start, end);\n\n // Otherwise, use our decoding method.\n if (typeof start == 'undefined') start = 0;\n if (typeof end == 'undefined') end = this.length;\n return iconv.decode(this.slice(start, end), encoding);\n }\n\n original.BufferWrite = Buffer.prototype.write;\n Buffer.prototype.write = function(string, offset, length, encoding) {\n var _offset = offset, _length = length, _encoding = encoding;\n // Support both (string, offset, length, encoding)\n // and the legacy (string, encoding, offset, length)\n if (isFinite(offset)) {\n if (!isFinite(length)) {\n encoding = length;\n length = undefined;\n }\n } else { // legacy\n var swap = encoding;\n encoding = offset;\n offset = length;\n length = swap;\n }\n\n encoding = String(encoding || 'utf8').toLowerCase();\n\n // Use native conversion when possible\n if (Buffer.isNativeEncoding(encoding))\n return original.BufferWrite.call(this, string, _offset, _length, _encoding);\n\n offset = +offset || 0;\n var remaining = this.length - offset;\n if (!length) {\n length = remaining;\n } else {\n length = +length;\n if (length > remaining) {\n length = remaining;\n }\n }\n\n if (string.length > 0 && (length < 0 || offset < 0))\n throw new RangeError('attempt to write beyond buffer bounds');\n\n // Otherwise, use our encoding method.\n var buf = iconv.encode(string, encoding);\n if (buf.length < length) length = buf.length;\n buf.copy(this, offset, 0, length);\n return length;\n\n // TODO: Set _charsWritten.\n }\n\n\n // -- Readable -------------------------------------------------------------\n if (iconv.supportsStreams) {\n var Readable = require('stream').Readable;\n\n original.ReadableSetEncoding = Readable.prototype.setEncoding;\n Readable.prototype.setEncoding = function setEncoding(enc, options) {\n // Use our own decoder, it has the same interface.\n // We cannot use original function as it doesn't handle BOM-s.\n this._readableState.decoder = iconv.getDecoder(enc, options);\n this._readableState.encoding = enc;\n }\n\n Readable.prototype.collect = iconv._collect;\n }\n }\n\n // Remove iconv-lite Node primitive extensions.\n iconv.undoExtendNodeEncodings = function undoExtendNodeEncodings() {\n if (!iconv.supportsNodeEncodingsExtension)\n return;\n if (!original)\n throw new Error(\"require('iconv-lite').undoExtendNodeEncodings(): Nothing to undo; extendNodeEncodings() is not called.\")\n\n delete Buffer.isNativeEncoding;\n\n var SlowBuffer = require('buffer').SlowBuffer;\n\n SlowBuffer.prototype.toString = original.SlowBufferToString;\n SlowBuffer.prototype.write = original.SlowBufferWrite;\n\n Buffer.isEncoding = original.BufferIsEncoding;\n Buffer.byteLength = original.BufferByteLength;\n Buffer.prototype.toString = original.BufferToString;\n Buffer.prototype.write = original.BufferWrite;\n\n if (iconv.supportsStreams) {\n var Readable = require('stream').Readable;\n\n Readable.prototype.setEncoding = original.ReadableSetEncoding;\n delete Readable.prototype.collect;\n }\n\n original = undefined;\n }\n}\n", "\"use strict\";\n\n// Some environments don't have global Buffer (e.g. React Native).\n// Solution would be installing npm modules \"buffer\" and \"stream\" explicitly.\nvar Buffer = require(\"safer-buffer\").Buffer;\n\nvar bomHandling = require(\"./bom-handling\"),\n iconv = module.exports;\n\n// All codecs and aliases are kept here, keyed by encoding name/alias.\n// They are lazy loaded in `iconv.getCodec` from `encodings/index.js`.\niconv.encodings = null;\n\n// Characters emitted in case of error.\niconv.defaultCharUnicode = '\uFFFD';\niconv.defaultCharSingleByte = '?';\n\n// Public API.\niconv.encode = function encode(str, encoding, options) {\n str = \"\" + (str || \"\"); // Ensure string.\n\n var encoder = iconv.getEncoder(encoding, options);\n\n var res = encoder.write(str);\n var trail = encoder.end();\n \n return (trail && trail.length > 0) ? Buffer.concat([res, trail]) : res;\n}\n\niconv.decode = function decode(buf, encoding, options) {\n if (typeof buf === 'string') {\n if (!iconv.skipDecodeWarning) {\n console.error('Iconv-lite warning: decode()-ing strings is deprecated. Refer to https://github.com/ashtuchkin/iconv-lite/wiki/Use-Buffers-when-decoding');\n iconv.skipDecodeWarning = true;\n }\n\n buf = Buffer.from(\"\" + (buf || \"\"), \"binary\"); // Ensure buffer.\n }\n\n var decoder = iconv.getDecoder(encoding, options);\n\n var res = decoder.write(buf);\n var trail = decoder.end();\n\n return trail ? (res + trail) : res;\n}\n\niconv.encodingExists = function encodingExists(enc) {\n try {\n iconv.getCodec(enc);\n return true;\n } catch (e) {\n return false;\n }\n}\n\n// Legacy aliases to convert functions\niconv.toEncoding = iconv.encode;\niconv.fromEncoding = iconv.decode;\n\n// Search for a codec in iconv.encodings. Cache codec data in iconv._codecDataCache.\niconv._codecDataCache = {};\niconv.getCodec = function getCodec(encoding) {\n if (!iconv.encodings)\n iconv.encodings = require(\"../encodings\"); // Lazy load all encoding definitions.\n \n // Canonicalize encoding name: strip all non-alphanumeric chars and appended year.\n var enc = iconv._canonicalizeEncoding(encoding);\n\n // Traverse iconv.encodings to find actual codec.\n var codecOptions = {};\n while (true) {\n var codec = iconv._codecDataCache[enc];\n if (codec)\n return codec;\n\n var codecDef = iconv.encodings[enc];\n\n switch (typeof codecDef) {\n case \"string\": // Direct alias to other encoding.\n enc = codecDef;\n break;\n\n case \"object\": // Alias with options. Can be layered.\n for (var key in codecDef)\n codecOptions[key] = codecDef[key];\n\n if (!codecOptions.encodingName)\n codecOptions.encodingName = enc;\n \n enc = codecDef.type;\n break;\n\n case \"function\": // Codec itself.\n if (!codecOptions.encodingName)\n codecOptions.encodingName = enc;\n\n // The codec function must load all tables and return object with .encoder and .decoder methods.\n // It'll be called only once (for each different options object).\n codec = new codecDef(codecOptions, iconv);\n\n iconv._codecDataCache[codecOptions.encodingName] = codec; // Save it to be reused later.\n return codec;\n\n default:\n throw new Error(\"Encoding not recognized: '\" + encoding + \"' (searched as: '\"+enc+\"')\");\n }\n }\n}\n\niconv._canonicalizeEncoding = function(encoding) {\n // Canonicalize encoding name: strip all non-alphanumeric chars and appended year.\n return (''+encoding).toLowerCase().replace(/:\\d{4}$|[^0-9a-z]/g, \"\");\n}\n\niconv.getEncoder = function getEncoder(encoding, options) {\n var codec = iconv.getCodec(encoding),\n encoder = new codec.encoder(options, codec);\n\n if (codec.bomAware && options && options.addBOM)\n encoder = new bomHandling.PrependBOM(encoder, options);\n\n return encoder;\n}\n\niconv.getDecoder = function getDecoder(encoding, options) {\n var codec = iconv.getCodec(encoding),\n decoder = new codec.decoder(options, codec);\n\n if (codec.bomAware && !(options && options.stripBOM === false))\n decoder = new bomHandling.StripBOM(decoder, options);\n\n return decoder;\n}\n\n\n// Load extensions in Node. All of them are omitted in Browserify build via 'browser' field in package.json.\nvar nodeVer = typeof process !== 'undefined' && process.versions && process.versions.node;\nif (nodeVer) {\n\n // Load streaming support in Node v0.10+\n var nodeVerArr = nodeVer.split(\".\").map(Number);\n if (nodeVerArr[0] > 0 || nodeVerArr[1] >= 10) {\n require(\"./streams\")(iconv);\n }\n\n // Load Node primitive extensions.\n require(\"./extend-node\")(iconv);\n}\n\nif (\"\u0100\" != \"\\u0100\") {\n console.error(\"iconv-lite warning: javascript files use encoding different from utf-8. See https://github.com/ashtuchkin/iconv-lite/wiki/Javascript-source-file-encodings for more info.\");\n}\n", "/*!\n * unpipe\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = unpipe\n\n/**\n * Determine if there are Node.js pipe-like data listeners.\n * @private\n */\n\nfunction hasPipeDataListeners(stream) {\n var listeners = stream.listeners('data')\n\n for (var i = 0; i < listeners.length; i++) {\n if (listeners[i].name === 'ondata') {\n return true\n }\n }\n\n return false\n}\n\n/**\n * Unpipe a stream from all destinations.\n *\n * @param {object} stream\n * @public\n */\n\nfunction unpipe(stream) {\n if (!stream) {\n throw new TypeError('argument stream is required')\n }\n\n if (typeof stream.unpipe === 'function') {\n // new-style\n stream.unpipe()\n return\n }\n\n // Node.js 0.8 hack\n if (!hasPipeDataListeners(stream)) {\n return\n }\n\n var listener\n var listeners = stream.listeners('close')\n\n for (var i = 0; i < listeners.length; i++) {\n listener = listeners[i]\n\n if (listener.name !== 'cleanup' && listener.name !== 'onclose') {\n continue\n }\n\n // invoke the listener\n listener.call(stream)\n }\n}\n", "/*!\n * raw-body\n * Copyright(c) 2013-2014 Jonathan Ong\n * Copyright(c) 2014-2022 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar asyncHooks = tryRequireAsyncHooks()\nvar bytes = require('bytes')\nvar createError = require('http-errors')\nvar iconv = require('iconv-lite')\nvar unpipe = require('unpipe')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = getRawBody\n\n/**\n * Module variables.\n * @private\n */\n\nvar ICONV_ENCODING_MESSAGE_REGEXP = /^Encoding not recognized: /\n\n/**\n * Get the decoder for a given encoding.\n *\n * @param {string} encoding\n * @private\n */\n\nfunction getDecoder (encoding) {\n if (!encoding) return null\n\n try {\n return iconv.getDecoder(encoding)\n } catch (e) {\n // error getting decoder\n if (!ICONV_ENCODING_MESSAGE_REGEXP.test(e.message)) throw e\n\n // the encoding was not found\n throw createError(415, 'specified encoding unsupported', {\n encoding: encoding,\n type: 'encoding.unsupported'\n })\n }\n}\n\n/**\n * Get the raw body of a stream (typically HTTP).\n *\n * @param {object} stream\n * @param {object|string|function} [options]\n * @param {function} [callback]\n * @public\n */\n\nfunction getRawBody (stream, options, callback) {\n var done = callback\n var opts = options || {}\n\n if (options === true || typeof options === 'string') {\n // short cut for encoding\n opts = {\n encoding: options\n }\n }\n\n if (typeof options === 'function') {\n done = options\n opts = {}\n }\n\n // validate callback is a function, if provided\n if (done !== undefined && typeof done !== 'function') {\n throw new TypeError('argument callback must be a function')\n }\n\n // require the callback without promises\n if (!done && !global.Promise) {\n throw new TypeError('argument callback is required')\n }\n\n // get encoding\n var encoding = opts.encoding !== true\n ? opts.encoding\n : 'utf-8'\n\n // convert the limit to an integer\n var limit = bytes.parse(opts.limit)\n\n // convert the expected length to an integer\n var length = opts.length != null && !isNaN(opts.length)\n ? parseInt(opts.length, 10)\n : null\n\n if (done) {\n // classic callback style\n return readStream(stream, encoding, length, limit, wrap(done))\n }\n\n return new Promise(function executor (resolve, reject) {\n readStream(stream, encoding, length, limit, function onRead (err, buf) {\n if (err) return reject(err)\n resolve(buf)\n })\n })\n}\n\n/**\n * Halt a stream.\n *\n * @param {Object} stream\n * @private\n */\n\nfunction halt (stream) {\n // unpipe everything from the stream\n unpipe(stream)\n\n // pause stream\n if (typeof stream.pause === 'function') {\n stream.pause()\n }\n}\n\n/**\n * Read the data from the stream.\n *\n * @param {object} stream\n * @param {string} encoding\n * @param {number} length\n * @param {number} limit\n * @param {function} callback\n * @public\n */\n\nfunction readStream (stream, encoding, length, limit, callback) {\n var complete = false\n var sync = true\n\n // check the length and limit options.\n // note: we intentionally leave the stream paused,\n // so users should handle the stream themselves.\n if (limit !== null && length !== null && length > limit) {\n return done(createError(413, 'request entity too large', {\n expected: length,\n length: length,\n limit: limit,\n type: 'entity.too.large'\n }))\n }\n\n // streams1: assert request encoding is buffer.\n // streams2+: assert the stream encoding is buffer.\n // stream._decoder: streams1\n // state.encoding: streams2\n // state.decoder: streams2, specifically < 0.10.6\n var state = stream._readableState\n if (stream._decoder || (state && (state.encoding || state.decoder))) {\n // developer error\n return done(createError(500, 'stream encoding should not be set', {\n type: 'stream.encoding.set'\n }))\n }\n\n if (typeof stream.readable !== 'undefined' && !stream.readable) {\n return done(createError(500, 'stream is not readable', {\n type: 'stream.not.readable'\n }))\n }\n\n var received = 0\n var decoder\n\n try {\n decoder = getDecoder(encoding)\n } catch (err) {\n return done(err)\n }\n\n var buffer = decoder\n ? ''\n : []\n\n // attach listeners\n stream.on('aborted', onAborted)\n stream.on('close', cleanup)\n stream.on('data', onData)\n stream.on('end', onEnd)\n stream.on('error', onEnd)\n\n // mark sync section complete\n sync = false\n\n function done () {\n var args = new Array(arguments.length)\n\n // copy arguments\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i]\n }\n\n // mark complete\n complete = true\n\n if (sync) {\n process.nextTick(invokeCallback)\n } else {\n invokeCallback()\n }\n\n function invokeCallback () {\n cleanup()\n\n if (args[0]) {\n // halt the stream on error\n halt(stream)\n }\n\n callback.apply(null, args)\n }\n }\n\n function onAborted () {\n if (complete) return\n\n done(createError(400, 'request aborted', {\n code: 'ECONNABORTED',\n expected: length,\n length: length,\n received: received,\n type: 'request.aborted'\n }))\n }\n\n function onData (chunk) {\n if (complete) return\n\n received += chunk.length\n\n if (limit !== null && received > limit) {\n done(createError(413, 'request entity too large', {\n limit: limit,\n received: received,\n type: 'entity.too.large'\n }))\n } else if (decoder) {\n buffer += decoder.write(chunk)\n } else {\n buffer.push(chunk)\n }\n }\n\n function onEnd (err) {\n if (complete) return\n if (err) return done(err)\n\n if (length !== null && received !== length) {\n done(createError(400, 'request size did not match content length', {\n expected: length,\n length: length,\n received: received,\n type: 'request.size.invalid'\n }))\n } else {\n var string = decoder\n ? buffer + (decoder.end() || '')\n : Buffer.concat(buffer)\n done(null, string)\n }\n }\n\n function cleanup () {\n buffer = null\n\n stream.removeListener('aborted', onAborted)\n stream.removeListener('data', onData)\n stream.removeListener('end', onEnd)\n stream.removeListener('error', onEnd)\n stream.removeListener('close', cleanup)\n }\n}\n\n/**\n * Try to require async_hooks\n * @private\n */\n\nfunction tryRequireAsyncHooks () {\n try {\n return require('async_hooks')\n } catch (e) {\n return {}\n }\n}\n\n/**\n * Wrap function with async resource, if possible.\n * AsyncResource.bind static method backported.\n * @private\n */\n\nfunction wrap (fn) {\n var res\n\n // create anonymous resource\n if (asyncHooks.AsyncResource) {\n res = new asyncHooks.AsyncResource(fn.name || 'bound-anonymous-fn')\n }\n\n // incompatible node.js\n if (!res || !res.runInAsyncScope) {\n return fn\n }\n\n // return bound function\n return res.runInAsyncScope.bind(res, fn, null)\n}\n", "\"use strict\";\n\nvar BOMChar = '\\uFEFF';\n\nexports.PrependBOM = PrependBOMWrapper\nfunction PrependBOMWrapper(encoder, options) {\n this.encoder = encoder;\n this.addBOM = true;\n}\n\nPrependBOMWrapper.prototype.write = function(str) {\n if (this.addBOM) {\n str = BOMChar + str;\n this.addBOM = false;\n }\n\n return this.encoder.write(str);\n}\n\nPrependBOMWrapper.prototype.end = function() {\n return this.encoder.end();\n}\n\n\n//------------------------------------------------------------------------------\n\nexports.StripBOM = StripBOMWrapper;\nfunction StripBOMWrapper(decoder, options) {\n this.decoder = decoder;\n this.pass = false;\n this.options = options || {};\n}\n\nStripBOMWrapper.prototype.write = function(buf) {\n var res = this.decoder.write(buf);\n if (this.pass || !res)\n return res;\n\n if (res[0] === BOMChar) {\n res = res.slice(1);\n if (typeof this.options.stripBOM === 'function')\n this.options.stripBOM();\n }\n\n this.pass = true;\n return res;\n}\n\nStripBOMWrapper.prototype.end = function() {\n return this.decoder.end();\n}\n\n", "\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// Export Node.js internal encodings.\n\nmodule.exports = {\n // Encodings\n utf8: { type: \"_internal\", bomAware: true},\n cesu8: { type: \"_internal\", bomAware: true},\n unicode11utf8: \"utf8\",\n\n ucs2: { type: \"_internal\", bomAware: true},\n utf16le: \"ucs2\",\n\n binary: { type: \"_internal\" },\n base64: { type: \"_internal\" },\n hex: { type: \"_internal\" },\n\n // Codec.\n _internal: InternalCodec,\n};\n\n//------------------------------------------------------------------------------\n\nfunction InternalCodec(codecOptions, iconv) {\n this.enc = codecOptions.encodingName;\n this.bomAware = codecOptions.bomAware;\n\n if (this.enc === \"base64\")\n this.encoder = InternalEncoderBase64;\n else if (this.enc === \"cesu8\") {\n this.enc = \"utf8\"; // Use utf8 for decoding.\n this.encoder = InternalEncoderCesu8;\n\n // Add decoder for versions of Node not supporting CESU-8\n if (Buffer.from('eda0bdedb2a9', 'hex').toString() !== '\uD83D\uDCA9') {\n this.decoder = InternalDecoderCesu8;\n this.defaultCharUnicode = iconv.defaultCharUnicode;\n }\n }\n}\n\nInternalCodec.prototype.encoder = InternalEncoder;\nInternalCodec.prototype.decoder = InternalDecoder;\n\n//------------------------------------------------------------------------------\n\n// We use node.js internal decoder. Its signature is the same as ours.\nvar StringDecoder = require('string_decoder').StringDecoder;\n\nif (!StringDecoder.prototype.end) // Node v0.8 doesn't have this method.\n StringDecoder.prototype.end = function() {};\n\n\nfunction InternalDecoder(options, codec) {\n StringDecoder.call(this, codec.enc);\n}\n\nInternalDecoder.prototype = StringDecoder.prototype;\n\n\n//------------------------------------------------------------------------------\n// Encoder is mostly trivial\n\nfunction InternalEncoder(options, codec) {\n this.enc = codec.enc;\n}\n\nInternalEncoder.prototype.write = function(str) {\n return Buffer.from(str, this.enc);\n}\n\nInternalEncoder.prototype.end = function() {\n}\n\n\n//------------------------------------------------------------------------------\n// Except base64 encoder, which must keep its state.\n\nfunction InternalEncoderBase64(options, codec) {\n this.prevStr = '';\n}\n\nInternalEncoderBase64.prototype.write = function(str) {\n str = this.prevStr + str;\n var completeQuads = str.length - (str.length % 4);\n this.prevStr = str.slice(completeQuads);\n str = str.slice(0, completeQuads);\n\n return Buffer.from(str, \"base64\");\n}\n\nInternalEncoderBase64.prototype.end = function() {\n return Buffer.from(this.prevStr, \"base64\");\n}\n\n\n//------------------------------------------------------------------------------\n// CESU-8 encoder is also special.\n\nfunction InternalEncoderCesu8(options, codec) {\n}\n\nInternalEncoderCesu8.prototype.write = function(str) {\n var buf = Buffer.alloc(str.length * 3), bufIdx = 0;\n for (var i = 0; i < str.length; i++) {\n var charCode = str.charCodeAt(i);\n // Naive implementation, but it works because CESU-8 is especially easy\n // to convert from UTF-16 (which all JS strings are encoded in).\n if (charCode < 0x80)\n buf[bufIdx++] = charCode;\n else if (charCode < 0x800) {\n buf[bufIdx++] = 0xC0 + (charCode >>> 6);\n buf[bufIdx++] = 0x80 + (charCode & 0x3f);\n }\n else { // charCode will always be < 0x10000 in javascript.\n buf[bufIdx++] = 0xE0 + (charCode >>> 12);\n buf[bufIdx++] = 0x80 + ((charCode >>> 6) & 0x3f);\n buf[bufIdx++] = 0x80 + (charCode & 0x3f);\n }\n }\n return buf.slice(0, bufIdx);\n}\n\nInternalEncoderCesu8.prototype.end = function() {\n}\n\n//------------------------------------------------------------------------------\n// CESU-8 decoder is not implemented in Node v4.0+\n\nfunction InternalDecoderCesu8(options, codec) {\n this.acc = 0;\n this.contBytes = 0;\n this.accBytes = 0;\n this.defaultCharUnicode = codec.defaultCharUnicode;\n}\n\nInternalDecoderCesu8.prototype.write = function(buf) {\n var acc = this.acc, contBytes = this.contBytes, accBytes = this.accBytes, \n res = '';\n for (var i = 0; i < buf.length; i++) {\n var curByte = buf[i];\n if ((curByte & 0xC0) !== 0x80) { // Leading byte\n if (contBytes > 0) { // Previous code is invalid\n res += this.defaultCharUnicode;\n contBytes = 0;\n }\n\n if (curByte < 0x80) { // Single-byte code\n res += String.fromCharCode(curByte);\n } else if (curByte < 0xE0) { // Two-byte code\n acc = curByte & 0x1F;\n contBytes = 1; accBytes = 1;\n } else if (curByte < 0xF0) { // Three-byte code\n acc = curByte & 0x0F;\n contBytes = 2; accBytes = 1;\n } else { // Four or more are not supported for CESU-8.\n res += this.defaultCharUnicode;\n }\n } else { // Continuation byte\n if (contBytes > 0) { // We're waiting for it.\n acc = (acc << 6) | (curByte & 0x3f);\n contBytes--; accBytes++;\n if (contBytes === 0) {\n // Check for overlong encoding, but support Modified UTF-8 (encoding NULL as C0 80)\n if (accBytes === 2 && acc < 0x80 && acc > 0)\n res += this.defaultCharUnicode;\n else if (accBytes === 3 && acc < 0x800)\n res += this.defaultCharUnicode;\n else\n // Actually add character.\n res += String.fromCharCode(acc);\n }\n } else { // Unexpected continuation byte\n res += this.defaultCharUnicode;\n }\n }\n }\n this.acc = acc; this.contBytes = contBytes; this.accBytes = accBytes;\n return res;\n}\n\nInternalDecoderCesu8.prototype.end = function() {\n var res = 0;\n if (this.contBytes > 0)\n res += this.defaultCharUnicode;\n return res;\n}\n", "\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// Note: UTF16-LE (or UCS2) codec is Node.js native. See encodings/internal.js\n\n// == UTF16-BE codec. ==========================================================\n\nexports.utf16be = Utf16BECodec;\nfunction Utf16BECodec() {\n}\n\nUtf16BECodec.prototype.encoder = Utf16BEEncoder;\nUtf16BECodec.prototype.decoder = Utf16BEDecoder;\nUtf16BECodec.prototype.bomAware = true;\n\n\n// -- Encoding\n\nfunction Utf16BEEncoder() {\n}\n\nUtf16BEEncoder.prototype.write = function(str) {\n var buf = Buffer.from(str, 'ucs2');\n for (var i = 0; i < buf.length; i += 2) {\n var tmp = buf[i]; buf[i] = buf[i+1]; buf[i+1] = tmp;\n }\n return buf;\n}\n\nUtf16BEEncoder.prototype.end = function() {\n}\n\n\n// -- Decoding\n\nfunction Utf16BEDecoder() {\n this.overflowByte = -1;\n}\n\nUtf16BEDecoder.prototype.write = function(buf) {\n if (buf.length == 0)\n return '';\n\n var buf2 = Buffer.alloc(buf.length + 1),\n i = 0, j = 0;\n\n if (this.overflowByte !== -1) {\n buf2[0] = buf[0];\n buf2[1] = this.overflowByte;\n i = 1; j = 2;\n }\n\n for (; i < buf.length-1; i += 2, j+= 2) {\n buf2[j] = buf[i+1];\n buf2[j+1] = buf[i];\n }\n\n this.overflowByte = (i == buf.length-1) ? buf[buf.length-1] : -1;\n\n return buf2.slice(0, j).toString('ucs2');\n}\n\nUtf16BEDecoder.prototype.end = function() {\n}\n\n\n// == UTF-16 codec =============================================================\n// Decoder chooses automatically from UTF-16LE and UTF-16BE using BOM and space-based heuristic.\n// Defaults to UTF-16LE, as it's prevalent and default in Node.\n// http://en.wikipedia.org/wiki/UTF-16 and http://encoding.spec.whatwg.org/#utf-16le\n// Decoder default can be changed: iconv.decode(buf, 'utf16', {defaultEncoding: 'utf-16be'});\n\n// Encoder uses UTF-16LE and prepends BOM (which can be overridden with addBOM: false).\n\nexports.utf16 = Utf16Codec;\nfunction Utf16Codec(codecOptions, iconv) {\n this.iconv = iconv;\n}\n\nUtf16Codec.prototype.encoder = Utf16Encoder;\nUtf16Codec.prototype.decoder = Utf16Decoder;\n\n\n// -- Encoding (pass-through)\n\nfunction Utf16Encoder(options, codec) {\n options = options || {};\n if (options.addBOM === undefined)\n options.addBOM = true;\n this.encoder = codec.iconv.getEncoder('utf-16le', options);\n}\n\nUtf16Encoder.prototype.write = function(str) {\n return this.encoder.write(str);\n}\n\nUtf16Encoder.prototype.end = function() {\n return this.encoder.end();\n}\n\n\n// -- Decoding\n\nfunction Utf16Decoder(options, codec) {\n this.decoder = null;\n this.initialBytes = [];\n this.initialBytesLen = 0;\n\n this.options = options || {};\n this.iconv = codec.iconv;\n}\n\nUtf16Decoder.prototype.write = function(buf) {\n if (!this.decoder) {\n // Codec is not chosen yet. Accumulate initial bytes.\n this.initialBytes.push(buf);\n this.initialBytesLen += buf.length;\n \n if (this.initialBytesLen < 16) // We need more bytes to use space heuristic (see below)\n return '';\n\n // We have enough bytes -> detect endianness.\n var buf = Buffer.concat(this.initialBytes),\n encoding = detectEncoding(buf, this.options.defaultEncoding);\n this.decoder = this.iconv.getDecoder(encoding, this.options);\n this.initialBytes.length = this.initialBytesLen = 0;\n }\n\n return this.decoder.write(buf);\n}\n\nUtf16Decoder.prototype.end = function() {\n if (!this.decoder) {\n var buf = Buffer.concat(this.initialBytes),\n encoding = detectEncoding(buf, this.options.defaultEncoding);\n this.decoder = this.iconv.getDecoder(encoding, this.options);\n\n var res = this.decoder.write(buf),\n trail = this.decoder.end();\n\n return trail ? (res + trail) : res;\n }\n return this.decoder.end();\n}\n\nfunction detectEncoding(buf, defaultEncoding) {\n var enc = defaultEncoding || 'utf-16le';\n\n if (buf.length >= 2) {\n // Check BOM.\n if (buf[0] == 0xFE && buf[1] == 0xFF) // UTF-16BE BOM\n enc = 'utf-16be';\n else if (buf[0] == 0xFF && buf[1] == 0xFE) // UTF-16LE BOM\n enc = 'utf-16le';\n else {\n // No BOM found. Try to deduce encoding from initial content.\n // Most of the time, the content has ASCII chars (U+00**), but the opposite (U+**00) is uncommon.\n // So, we count ASCII as if it was LE or BE, and decide from that.\n var asciiCharsLE = 0, asciiCharsBE = 0, // Counts of chars in both positions\n _len = Math.min(buf.length - (buf.length % 2), 64); // Len is always even.\n\n for (var i = 0; i < _len; i += 2) {\n if (buf[i] === 0 && buf[i+1] !== 0) asciiCharsBE++;\n if (buf[i] !== 0 && buf[i+1] === 0) asciiCharsLE++;\n }\n\n if (asciiCharsBE > asciiCharsLE)\n enc = 'utf-16be';\n else if (asciiCharsBE < asciiCharsLE)\n enc = 'utf-16le';\n }\n }\n\n return enc;\n}\n\n\n", "\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// UTF-7 codec, according to https://tools.ietf.org/html/rfc2152\n// See also below a UTF-7-IMAP codec, according to http://tools.ietf.org/html/rfc3501#section-5.1.3\n\nexports.utf7 = Utf7Codec;\nexports.unicode11utf7 = 'utf7'; // Alias UNICODE-1-1-UTF-7\nfunction Utf7Codec(codecOptions, iconv) {\n this.iconv = iconv;\n};\n\nUtf7Codec.prototype.encoder = Utf7Encoder;\nUtf7Codec.prototype.decoder = Utf7Decoder;\nUtf7Codec.prototype.bomAware = true;\n\n\n// -- Encoding\n\nvar nonDirectChars = /[^A-Za-z0-9'\\(\\),-\\.\\/:\\? \\n\\r\\t]+/g;\n\nfunction Utf7Encoder(options, codec) {\n this.iconv = codec.iconv;\n}\n\nUtf7Encoder.prototype.write = function(str) {\n // Naive implementation.\n // Non-direct chars are encoded as \"+<base64>-\"; single \"+\" char is encoded as \"+-\".\n return Buffer.from(str.replace(nonDirectChars, function(chunk) {\n return \"+\" + (chunk === '+' ? '' : \n this.iconv.encode(chunk, 'utf16-be').toString('base64').replace(/=+$/, '')) \n + \"-\";\n }.bind(this)));\n}\n\nUtf7Encoder.prototype.end = function() {\n}\n\n\n// -- Decoding\n\nfunction Utf7Decoder(options, codec) {\n this.iconv = codec.iconv;\n this.inBase64 = false;\n this.base64Accum = '';\n}\n\nvar base64Regex = /[A-Za-z0-9\\/+]/;\nvar base64Chars = [];\nfor (var i = 0; i < 256; i++)\n base64Chars[i] = base64Regex.test(String.fromCharCode(i));\n\nvar plusChar = '+'.charCodeAt(0), \n minusChar = '-'.charCodeAt(0),\n andChar = '&'.charCodeAt(0);\n\nUtf7Decoder.prototype.write = function(buf) {\n var res = \"\", lastI = 0,\n inBase64 = this.inBase64,\n base64Accum = this.base64Accum;\n\n // The decoder is more involved as we must handle chunks in stream.\n\n for (var i = 0; i < buf.length; i++) {\n if (!inBase64) { // We're in direct mode.\n // Write direct chars until '+'\n if (buf[i] == plusChar) {\n res += this.iconv.decode(buf.slice(lastI, i), \"ascii\"); // Write direct chars.\n lastI = i+1;\n inBase64 = true;\n }\n } else { // We decode base64.\n if (!base64Chars[buf[i]]) { // Base64 ended.\n if (i == lastI && buf[i] == minusChar) {// \"+-\" -> \"+\"\n res += \"+\";\n } else {\n var b64str = base64Accum + buf.slice(lastI, i).toString();\n res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n }\n\n if (buf[i] != minusChar) // Minus is absorbed after base64.\n i--;\n\n lastI = i+1;\n inBase64 = false;\n base64Accum = '';\n }\n }\n }\n\n if (!inBase64) {\n res += this.iconv.decode(buf.slice(lastI), \"ascii\"); // Write direct chars.\n } else {\n var b64str = base64Accum + buf.slice(lastI).toString();\n\n var canBeDecoded = b64str.length - (b64str.length % 8); // Minimal chunk: 2 quads -> 2x3 bytes -> 3 chars.\n base64Accum = b64str.slice(canBeDecoded); // The rest will be decoded in future.\n b64str = b64str.slice(0, canBeDecoded);\n\n res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n }\n\n this.inBase64 = inBase64;\n this.base64Accum = base64Accum;\n\n return res;\n}\n\nUtf7Decoder.prototype.end = function() {\n var res = \"\";\n if (this.inBase64 && this.base64Accum.length > 0)\n res = this.iconv.decode(Buffer.from(this.base64Accum, 'base64'), \"utf16-be\");\n\n this.inBase64 = false;\n this.base64Accum = '';\n return res;\n}\n\n\n// UTF-7-IMAP codec.\n// RFC3501 Sec. 5.1.3 Modified UTF-7 (http://tools.ietf.org/html/rfc3501#section-5.1.3)\n// Differences:\n// * Base64 part is started by \"&\" instead of \"+\"\n// * Direct characters are 0x20-0x7E, except \"&\" (0x26)\n// * In Base64, \",\" is used instead of \"/\"\n// * Base64 must not be used to represent direct characters.\n// * No implicit shift back from Base64 (should always end with '-')\n// * String must end in non-shifted position.\n// * \"-&\" while in base64 is not allowed.\n\n\nexports.utf7imap = Utf7IMAPCodec;\nfunction Utf7IMAPCodec(codecOptions, iconv) {\n this.iconv = iconv;\n};\n\nUtf7IMAPCodec.prototype.encoder = Utf7IMAPEncoder;\nUtf7IMAPCodec.prototype.decoder = Utf7IMAPDecoder;\nUtf7IMAPCodec.prototype.bomAware = true;\n\n\n// -- Encoding\n\nfunction Utf7IMAPEncoder(options, codec) {\n this.iconv = codec.iconv;\n this.inBase64 = false;\n this.base64Accum = Buffer.alloc(6);\n this.base64AccumIdx = 0;\n}\n\nUtf7IMAPEncoder.prototype.write = function(str) {\n var inBase64 = this.inBase64,\n base64Accum = this.base64Accum,\n base64AccumIdx = this.base64AccumIdx,\n buf = Buffer.alloc(str.length*5 + 10), bufIdx = 0;\n\n for (var i = 0; i < str.length; i++) {\n var uChar = str.charCodeAt(i);\n if (0x20 <= uChar && uChar <= 0x7E) { // Direct character or '&'.\n if (inBase64) {\n if (base64AccumIdx > 0) {\n bufIdx += buf.write(base64Accum.slice(0, base64AccumIdx).toString('base64').replace(/\\//g, ',').replace(/=+$/, ''), bufIdx);\n base64AccumIdx = 0;\n }\n\n buf[bufIdx++] = minusChar; // Write '-', then go to direct mode.\n inBase64 = false;\n }\n\n if (!inBase64) {\n buf[bufIdx++] = uChar; // Write direct character\n\n if (uChar === andChar) // Ampersand -> '&-'\n buf[bufIdx++] = minusChar;\n }\n\n } else { // Non-direct character\n if (!inBase64) {\n buf[bufIdx++] = andChar; // Write '&', then go to base64 mode.\n inBase64 = true;\n }\n if (inBase64) {\n base64Accum[base64AccumIdx++] = uChar >> 8;\n base64Accum[base64AccumIdx++] = uChar & 0xFF;\n\n if (base64AccumIdx == base64Accum.length) {\n bufIdx += buf.write(base64Accum.toString('base64').replace(/\\//g, ','), bufIdx);\n base64AccumIdx = 0;\n }\n }\n }\n }\n\n this.inBase64 = inBase64;\n this.base64AccumIdx = base64AccumIdx;\n\n return buf.slice(0, bufIdx);\n}\n\nUtf7IMAPEncoder.prototype.end = function() {\n var buf = Buffer.alloc(10), bufIdx = 0;\n if (this.inBase64) {\n if (this.base64AccumIdx > 0) {\n bufIdx += buf.write(this.base64Accum.slice(0, this.base64AccumIdx).toString('base64').replace(/\\//g, ',').replace(/=+$/, ''), bufIdx);\n this.base64AccumIdx = 0;\n }\n\n buf[bufIdx++] = minusChar; // Write '-', then go to direct mode.\n this.inBase64 = false;\n }\n\n return buf.slice(0, bufIdx);\n}\n\n\n// -- Decoding\n\nfunction Utf7IMAPDecoder(options, codec) {\n this.iconv = codec.iconv;\n this.inBase64 = false;\n this.base64Accum = '';\n}\n\nvar base64IMAPChars = base64Chars.slice();\nbase64IMAPChars[','.charCodeAt(0)] = true;\n\nUtf7IMAPDecoder.prototype.write = function(buf) {\n var res = \"\", lastI = 0,\n inBase64 = this.inBase64,\n base64Accum = this.base64Accum;\n\n // The decoder is more involved as we must handle chunks in stream.\n // It is forgiving, closer to standard UTF-7 (for example, '-' is optional at the end).\n\n for (var i = 0; i < buf.length; i++) {\n if (!inBase64) { // We're in direct mode.\n // Write direct chars until '&'\n if (buf[i] == andChar) {\n res += this.iconv.decode(buf.slice(lastI, i), \"ascii\"); // Write direct chars.\n lastI = i+1;\n inBase64 = true;\n }\n } else { // We decode base64.\n if (!base64IMAPChars[buf[i]]) { // Base64 ended.\n if (i == lastI && buf[i] == minusChar) { // \"&-\" -> \"&\"\n res += \"&\";\n } else {\n var b64str = base64Accum + buf.slice(lastI, i).toString().replace(/,/g, '/');\n res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n }\n\n if (buf[i] != minusChar) // Minus may be absorbed after base64.\n i--;\n\n lastI = i+1;\n inBase64 = false;\n base64Accum = '';\n }\n }\n }\n\n if (!inBase64) {\n res += this.iconv.decode(buf.slice(lastI), \"ascii\"); // Write direct chars.\n } else {\n var b64str = base64Accum + buf.slice(lastI).toString().replace(/,/g, '/');\n\n var canBeDecoded = b64str.length - (b64str.length % 8); // Minimal chunk: 2 quads -> 2x3 bytes -> 3 chars.\n base64Accum = b64str.slice(canBeDecoded); // The rest will be decoded in future.\n b64str = b64str.slice(0, canBeDecoded);\n\n res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n }\n\n this.inBase64 = inBase64;\n this.base64Accum = base64Accum;\n\n return res;\n}\n\nUtf7IMAPDecoder.prototype.end = function() {\n var res = \"\";\n if (this.inBase64 && this.base64Accum.length > 0)\n res = this.iconv.decode(Buffer.from(this.base64Accum, 'base64'), \"utf16-be\");\n\n this.inBase64 = false;\n this.base64Accum = '';\n return res;\n}\n\n\n", "\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// Single-byte codec. Needs a 'chars' string parameter that contains 256 or 128 chars that\n// correspond to encoded bytes (if 128 - then lower half is ASCII). \n\nexports._sbcs = SBCSCodec;\nfunction SBCSCodec(codecOptions, iconv) {\n if (!codecOptions)\n throw new Error(\"SBCS codec is called without the data.\")\n \n // Prepare char buffer for decoding.\n if (!codecOptions.chars || (codecOptions.chars.length !== 128 && codecOptions.chars.length !== 256))\n throw new Error(\"Encoding '\"+codecOptions.type+\"' has incorrect 'chars' (must be of len 128 or 256)\");\n \n if (codecOptions.chars.length === 128) {\n var asciiString = \"\";\n for (var i = 0; i < 128; i++)\n asciiString += String.fromCharCode(i);\n codecOptions.chars = asciiString + codecOptions.chars;\n }\n\n this.decodeBuf = Buffer.from(codecOptions.chars, 'ucs2');\n \n // Encoding buffer.\n var encodeBuf = Buffer.alloc(65536, iconv.defaultCharSingleByte.charCodeAt(0));\n\n for (var i = 0; i < codecOptions.chars.length; i++)\n encodeBuf[codecOptions.chars.charCodeAt(i)] = i;\n\n this.encodeBuf = encodeBuf;\n}\n\nSBCSCodec.prototype.encoder = SBCSEncoder;\nSBCSCodec.prototype.decoder = SBCSDecoder;\n\n\nfunction SBCSEncoder(options, codec) {\n this.encodeBuf = codec.encodeBuf;\n}\n\nSBCSEncoder.prototype.write = function(str) {\n var buf = Buffer.alloc(str.length);\n for (var i = 0; i < str.length; i++)\n buf[i] = this.encodeBuf[str.charCodeAt(i)];\n \n return buf;\n}\n\nSBCSEncoder.prototype.end = function() {\n}\n\n\nfunction SBCSDecoder(options, codec) {\n this.decodeBuf = codec.decodeBuf;\n}\n\nSBCSDecoder.prototype.write = function(buf) {\n // Strings are immutable in JS -> we use ucs2 buffer to speed up computations.\n var decodeBuf = this.decodeBuf;\n var newBuf = Buffer.alloc(buf.length*2);\n var idx1 = 0, idx2 = 0;\n for (var i = 0; i < buf.length; i++) {\n idx1 = buf[i]*2; idx2 = i*2;\n newBuf[idx2] = decodeBuf[idx1];\n newBuf[idx2+1] = decodeBuf[idx1+1];\n }\n return newBuf.toString('ucs2');\n}\n\nSBCSDecoder.prototype.end = function() {\n}\n", "\"use strict\";\n\n// Manually added data to be used by sbcs codec in addition to generated one.\n\nmodule.exports = {\n // Not supported by iconv, not sure why.\n \"10029\": \"maccenteuro\",\n \"maccenteuro\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C4\u0100\u0101\u00C9\u0104\u00D6\u00DC\u00E1\u0105\u010C\u00E4\u010D\u0106\u0107\u00E9\u0179\u017A\u010E\u00ED\u010F\u0112\u0113\u0116\u00F3\u0117\u00F4\u00F6\u00F5\u00FA\u011A\u011B\u00FC\u2020\u00B0\u0118\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u00A9\u2122\u0119\u00A8\u2260\u0123\u012E\u012F\u012A\u2264\u2265\u012B\u0136\u2202\u2211\u0142\u013B\u013C\u013D\u013E\u0139\u013A\u0145\u0146\u0143\u00AC\u221A\u0144\u0147\u2206\u00AB\u00BB\u2026\u00A0\u0148\u0150\u00D5\u0151\u014C\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\u014D\u0154\u0155\u0158\u2039\u203A\u0159\u0156\u0157\u0160\u201A\u201E\u0161\u015A\u015B\u00C1\u0164\u0165\u00CD\u017D\u017E\u016A\u00D3\u00D4\u016B\u016E\u00DA\u016F\u0170\u0171\u0172\u0173\u00DD\u00FD\u0137\u017B\u0141\u017C\u0122\u02C7\"\n },\n\n \"808\": \"cp808\",\n \"ibm808\": \"cp808\",\n \"cp808\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u0401\u0451\u0404\u0454\u0407\u0457\u040E\u045E\u00B0\u2219\u00B7\u221A\u2116\u20AC\u25A0\u00A0\"\n },\n\n \"mik\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u2514\u2534\u252C\u251C\u2500\u253C\u2563\u2551\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2510\u2591\u2592\u2593\u2502\u2524\u2116\u00A7\u2557\u255D\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n },\n\n // Aliases of generated encodings.\n \"ascii8bit\": \"ascii\",\n \"usascii\": \"ascii\",\n \"ansix34\": \"ascii\",\n \"ansix341968\": \"ascii\",\n \"ansix341986\": \"ascii\",\n \"csascii\": \"ascii\",\n \"cp367\": \"ascii\",\n \"ibm367\": \"ascii\",\n \"isoir6\": \"ascii\",\n \"iso646us\": \"ascii\",\n \"iso646irv\": \"ascii\",\n \"us\": \"ascii\",\n\n \"latin1\": \"iso88591\",\n \"latin2\": \"iso88592\",\n \"latin3\": \"iso88593\",\n \"latin4\": \"iso88594\",\n \"latin5\": \"iso88599\",\n \"latin6\": \"iso885910\",\n \"latin7\": \"iso885913\",\n \"latin8\": \"iso885914\",\n \"latin9\": \"iso885915\",\n \"latin10\": \"iso885916\",\n\n \"csisolatin1\": \"iso88591\",\n \"csisolatin2\": \"iso88592\",\n \"csisolatin3\": \"iso88593\",\n \"csisolatin4\": \"iso88594\",\n \"csisolatincyrillic\": \"iso88595\",\n \"csisolatinarabic\": \"iso88596\",\n \"csisolatingreek\" : \"iso88597\",\n \"csisolatinhebrew\": \"iso88598\",\n \"csisolatin5\": \"iso88599\",\n \"csisolatin6\": \"iso885910\",\n\n \"l1\": \"iso88591\",\n \"l2\": \"iso88592\",\n \"l3\": \"iso88593\",\n \"l4\": \"iso88594\",\n \"l5\": \"iso88599\",\n \"l6\": \"iso885910\",\n \"l7\": \"iso885913\",\n \"l8\": \"iso885914\",\n \"l9\": \"iso885915\",\n \"l10\": \"iso885916\",\n\n \"isoir14\": \"iso646jp\",\n \"isoir57\": \"iso646cn\",\n \"isoir100\": \"iso88591\",\n \"isoir101\": \"iso88592\",\n \"isoir109\": \"iso88593\",\n \"isoir110\": \"iso88594\",\n \"isoir144\": \"iso88595\",\n \"isoir127\": \"iso88596\",\n \"isoir126\": \"iso88597\",\n \"isoir138\": \"iso88598\",\n \"isoir148\": \"iso88599\",\n \"isoir157\": \"iso885910\",\n \"isoir166\": \"tis620\",\n \"isoir179\": \"iso885913\",\n \"isoir199\": \"iso885914\",\n \"isoir203\": \"iso885915\",\n \"isoir226\": \"iso885916\",\n\n \"cp819\": \"iso88591\",\n \"ibm819\": \"iso88591\",\n\n \"cyrillic\": \"iso88595\",\n\n \"arabic\": \"iso88596\",\n \"arabic8\": \"iso88596\",\n \"ecma114\": \"iso88596\",\n \"asmo708\": \"iso88596\",\n\n \"greek\" : \"iso88597\",\n \"greek8\" : \"iso88597\",\n \"ecma118\" : \"iso88597\",\n \"elot928\" : \"iso88597\",\n\n \"hebrew\": \"iso88598\",\n \"hebrew8\": \"iso88598\",\n\n \"turkish\": \"iso88599\",\n \"turkish8\": \"iso88599\",\n\n \"thai\": \"iso885911\",\n \"thai8\": \"iso885911\",\n\n \"celtic\": \"iso885914\",\n \"celtic8\": \"iso885914\",\n \"isoceltic\": \"iso885914\",\n\n \"tis6200\": \"tis620\",\n \"tis62025291\": \"tis620\",\n \"tis62025330\": \"tis620\",\n\n \"10000\": \"macroman\",\n \"10006\": \"macgreek\",\n \"10007\": \"maccyrillic\",\n \"10079\": \"maciceland\",\n \"10081\": \"macturkish\",\n\n \"cspc8codepage437\": \"cp437\",\n \"cspc775baltic\": \"cp775\",\n \"cspc850multilingual\": \"cp850\",\n \"cspcp852\": \"cp852\",\n \"cspc862latinhebrew\": \"cp862\",\n \"cpgr\": \"cp869\",\n\n \"msee\": \"cp1250\",\n \"mscyrl\": \"cp1251\",\n \"msansi\": \"cp1252\",\n \"msgreek\": \"cp1253\",\n \"msturk\": \"cp1254\",\n \"mshebr\": \"cp1255\",\n \"msarab\": \"cp1256\",\n \"winbaltrim\": \"cp1257\",\n\n \"cp20866\": \"koi8r\",\n \"20866\": \"koi8r\",\n \"ibm878\": \"koi8r\",\n \"cskoi8r\": \"koi8r\",\n\n \"cp21866\": \"koi8u\",\n \"21866\": \"koi8u\",\n \"ibm1168\": \"koi8u\",\n\n \"strk10482002\": \"rk1048\",\n\n \"tcvn5712\": \"tcvn\",\n \"tcvn57121\": \"tcvn\",\n\n \"gb198880\": \"iso646cn\",\n \"cn\": \"iso646cn\",\n\n \"csiso14jisc6220ro\": \"iso646jp\",\n \"jisc62201969ro\": \"iso646jp\",\n \"jp\": \"iso646jp\",\n\n \"cshproman8\": \"hproman8\",\n \"r8\": \"hproman8\",\n \"roman8\": \"hproman8\",\n \"xroman8\": \"hproman8\",\n \"ibm1051\": \"hproman8\",\n\n \"mac\": \"macintosh\",\n \"csmacintosh\": \"macintosh\",\n};\n\n", "\"use strict\";\n\n// Generated data for sbcs codec. Don't edit manually. Regenerate using generation/gen-sbcs.js script.\nmodule.exports = {\n \"437\": \"cp437\",\n \"737\": \"cp737\",\n \"775\": \"cp775\",\n \"850\": \"cp850\",\n \"852\": \"cp852\",\n \"855\": \"cp855\",\n \"856\": \"cp856\",\n \"857\": \"cp857\",\n \"858\": \"cp858\",\n \"860\": \"cp860\",\n \"861\": \"cp861\",\n \"862\": \"cp862\",\n \"863\": \"cp863\",\n \"864\": \"cp864\",\n \"865\": \"cp865\",\n \"866\": \"cp866\",\n \"869\": \"cp869\",\n \"874\": \"windows874\",\n \"922\": \"cp922\",\n \"1046\": \"cp1046\",\n \"1124\": \"cp1124\",\n \"1125\": \"cp1125\",\n \"1129\": \"cp1129\",\n \"1133\": \"cp1133\",\n \"1161\": \"cp1161\",\n \"1162\": \"cp1162\",\n \"1163\": \"cp1163\",\n \"1250\": \"windows1250\",\n \"1251\": \"windows1251\",\n \"1252\": \"windows1252\",\n \"1253\": \"windows1253\",\n \"1254\": \"windows1254\",\n \"1255\": \"windows1255\",\n \"1256\": \"windows1256\",\n \"1257\": \"windows1257\",\n \"1258\": \"windows1258\",\n \"28591\": \"iso88591\",\n \"28592\": \"iso88592\",\n \"28593\": \"iso88593\",\n \"28594\": \"iso88594\",\n \"28595\": \"iso88595\",\n \"28596\": \"iso88596\",\n \"28597\": \"iso88597\",\n \"28598\": \"iso88598\",\n \"28599\": \"iso88599\",\n \"28600\": \"iso885910\",\n \"28601\": \"iso885911\",\n \"28603\": \"iso885913\",\n \"28604\": \"iso885914\",\n \"28605\": \"iso885915\",\n \"28606\": \"iso885916\",\n \"windows874\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u20AC\uFFFD\uFFFD\uFFFD\uFFFD\u2026\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u00A0\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFFFD\uFFFD\uFFFD\uFFFD\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\uFFFD\uFFFD\uFFFD\uFFFD\"\n },\n \"win874\": \"windows874\",\n \"cp874\": \"windows874\",\n \"windows1250\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u20AC\uFFFD\u201A\uFFFD\u201E\u2026\u2020\u2021\uFFFD\u2030\u0160\u2039\u015A\u0164\u017D\u0179\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\u0161\u203A\u015B\u0165\u017E\u017A\u00A0\u02C7\u02D8\u0141\u00A4\u0104\u00A6\u00A7\u00A8\u00A9\u015E\u00AB\u00AC\u00AD\u00AE\u017B\u00B0\u00B1\u02DB\u0142\u00B4\u00B5\u00B6\u00B7\u00B8\u0105\u015F\u00BB\u013D\u02DD\u013E\u017C\u0154\u00C1\u00C2\u0102\u00C4\u0139\u0106\u00C7\u010C\u00C9\u0118\u00CB\u011A\u00CD\u00CE\u010E\u0110\u0143\u0147\u00D3\u00D4\u0150\u00D6\u00D7\u0158\u016E\u00DA\u0170\u00DC\u00DD\u0162\u00DF\u0155\u00E1\u00E2\u0103\u00E4\u013A\u0107\u00E7\u010D\u00E9\u0119\u00EB\u011B\u00ED\u00EE\u010F\u0111\u0144\u0148\u00F3\u00F4\u0151\u00F6\u00F7\u0159\u016F\u00FA\u0171\u00FC\u00FD\u0163\u02D9\"\n },\n \"win1250\": \"windows1250\",\n \"cp1250\": \"windows1250\",\n \"windows1251\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0402\u0403\u201A\u0453\u201E\u2026\u2020\u2021\u20AC\u2030\u0409\u2039\u040A\u040C\u040B\u040F\u0452\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\u0459\u203A\u045A\u045C\u045B\u045F\u00A0\u040E\u045E\u0408\u00A4\u0490\u00A6\u00A7\u0401\u00A9\u0404\u00AB\u00AC\u00AD\u00AE\u0407\u00B0\u00B1\u0406\u0456\u0491\u00B5\u00B6\u00B7\u0451\u2116\u0454\u00BB\u0458\u0405\u0455\u0457\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\"\n },\n \"win1251\": \"windows1251\",\n \"cp1251\": \"windows1251\",\n \"windows1252\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0160\u2039\u0152\uFFFD\u017D\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\u0161\u203A\u0153\uFFFD\u017E\u0178\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u00D0\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u00DD\u00DE\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u00FE\u00FF\"\n },\n \"win1252\": \"windows1252\",\n \"cp1252\": \"windows1252\",\n \"windows1253\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\uFFFD\u2030\uFFFD\u2039\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\uFFFD\u203A\uFFFD\uFFFD\uFFFD\uFFFD\u00A0\u0385\u0386\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\uFFFD\u00AB\u00AC\u00AD\u00AE\u2015\u00B0\u00B1\u00B2\u00B3\u0384\u00B5\u00B6\u00B7\u0388\u0389\u038A\u00BB\u038C\u00BD\u038E\u038F\u0390\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\uFFFD\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03AA\u03AB\u03AC\u03AD\u03AE\u03AF\u03B0\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C2\u03C3\u03C4\u03C5\u03C6\u03C7\u03C8\u03C9\u03CA\u03CB\u03CC\u03CD\u03CE\uFFFD\"\n },\n \"win1253\": \"windows1253\",\n \"cp1253\": \"windows1253\",\n \"windows1254\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0160\u2039\u0152\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\u0161\u203A\u0153\uFFFD\uFFFD\u0178\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u011E\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u0130\u015E\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u011F\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u0131\u015F\u00FF\"\n },\n \"win1254\": \"windows1254\",\n \"cp1254\": \"windows1254\",\n \"windows1255\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\uFFFD\u2039\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\uFFFD\u203A\uFFFD\uFFFD\uFFFD\uFFFD\u00A0\u00A1\u00A2\u00A3\u20AA\u00A5\u00A6\u00A7\u00A8\u00A9\u00D7\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00F7\u00BB\u00BC\u00BD\u00BE\u00BF\u05B0\u05B1\u05B2\u05B3\u05B4\u05B5\u05B6\u05B7\u05B8\u05B9\u05BA\u05BB\u05BC\u05BD\u05BE\u05BF\u05C0\u05C1\u05C2\u05C3\u05F0\u05F1\u05F2\u05F3\u05F4\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\uFFFD\uFFFD\u200E\u200F\uFFFD\"\n },\n \"win1255\": \"windows1255\",\n \"cp1255\": \"windows1255\",\n \"windows1256\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u20AC\u067E\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0679\u2039\u0152\u0686\u0698\u0688\u06AF\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u06A9\u2122\u0691\u203A\u0153\u200C\u200D\u06BA\u00A0\u060C\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u06BE\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u061B\u00BB\u00BC\u00BD\u00BE\u061F\u06C1\u0621\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629\u062A\u062B\u062C\u062D\u062E\u062F\u0630\u0631\u0632\u0633\u0634\u0635\u0636\u00D7\u0637\u0638\u0639\u063A\u0640\u0641\u0642\u0643\u00E0\u0644\u00E2\u0645\u0646\u0647\u0648\u00E7\u00E8\u00E9\u00EA\u00EB\u0649\u064A\u00EE\u00EF\u064B\u064C\u064D\u064E\u00F4\u064F\u0650\u00F7\u0651\u00F9\u0652\u00FB\u00FC\u200E\u200F\u06D2\"\n },\n \"win1256\": \"windows1256\",\n \"cp1256\": \"windows1256\",\n \"windows1257\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u20AC\uFFFD\u201A\uFFFD\u201E\u2026\u2020\u2021\uFFFD\u2030\uFFFD\u2039\uFFFD\u00A8\u02C7\u00B8\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\uFFFD\u203A\uFFFD\u00AF\u02DB\uFFFD\u00A0\uFFFD\u00A2\u00A3\u00A4\uFFFD\u00A6\u00A7\u00D8\u00A9\u0156\u00AB\u00AC\u00AD\u00AE\u00C6\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00F8\u00B9\u0157\u00BB\u00BC\u00BD\u00BE\u00E6\u0104\u012E\u0100\u0106\u00C4\u00C5\u0118\u0112\u010C\u00C9\u0179\u0116\u0122\u0136\u012A\u013B\u0160\u0143\u0145\u00D3\u014C\u00D5\u00D6\u00D7\u0172\u0141\u015A\u016A\u00DC\u017B\u017D\u00DF\u0105\u012F\u0101\u0107\u00E4\u00E5\u0119\u0113\u010D\u00E9\u017A\u0117\u0123\u0137\u012B\u013C\u0161\u0144\u0146\u00F3\u014D\u00F5\u00F6\u00F7\u0173\u0142\u015B\u016B\u00FC\u017C\u017E\u02D9\"\n },\n \"win1257\": \"windows1257\",\n \"cp1257\": \"windows1257\",\n \"windows1258\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\uFFFD\u2039\u0152\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\uFFFD\u203A\u0153\uFFFD\uFFFD\u0178\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u0102\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u0300\u00CD\u00CE\u00CF\u0110\u00D1\u0309\u00D3\u00D4\u01A0\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u01AF\u0303\u00DF\u00E0\u00E1\u00E2\u0103\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u0301\u00ED\u00EE\u00EF\u0111\u00F1\u0323\u00F3\u00F4\u01A1\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u01B0\u20AB\u00FF\"\n },\n \"win1258\": \"windows1258\",\n \"cp1258\": \"windows1258\",\n \"iso88591\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u00D0\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u00DD\u00DE\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u00FE\u00FF\"\n },\n \"cp28591\": \"iso88591\",\n \"iso88592\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0104\u02D8\u0141\u00A4\u013D\u015A\u00A7\u00A8\u0160\u015E\u0164\u0179\u00AD\u017D\u017B\u00B0\u0105\u02DB\u0142\u00B4\u013E\u015B\u02C7\u00B8\u0161\u015F\u0165\u017A\u02DD\u017E\u017C\u0154\u00C1\u00C2\u0102\u00C4\u0139\u0106\u00C7\u010C\u00C9\u0118\u00CB\u011A\u00CD\u00CE\u010E\u0110\u0143\u0147\u00D3\u00D4\u0150\u00D6\u00D7\u0158\u016E\u00DA\u0170\u00DC\u00DD\u0162\u00DF\u0155\u00E1\u00E2\u0103\u00E4\u013A\u0107\u00E7\u010D\u00E9\u0119\u00EB\u011B\u00ED\u00EE\u010F\u0111\u0144\u0148\u00F3\u00F4\u0151\u00F6\u00F7\u0159\u016F\u00FA\u0171\u00FC\u00FD\u0163\u02D9\"\n },\n \"cp28592\": \"iso88592\",\n \"iso88593\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0126\u02D8\u00A3\u00A4\uFFFD\u0124\u00A7\u00A8\u0130\u015E\u011E\u0134\u00AD\uFFFD\u017B\u00B0\u0127\u00B2\u00B3\u00B4\u00B5\u0125\u00B7\u00B8\u0131\u015F\u011F\u0135\u00BD\uFFFD\u017C\u00C0\u00C1\u00C2\uFFFD\u00C4\u010A\u0108\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\uFFFD\u00D1\u00D2\u00D3\u00D4\u0120\u00D6\u00D7\u011C\u00D9\u00DA\u00DB\u00DC\u016C\u015C\u00DF\u00E0\u00E1\u00E2\uFFFD\u00E4\u010B\u0109\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\uFFFD\u00F1\u00F2\u00F3\u00F4\u0121\u00F6\u00F7\u011D\u00F9\u00FA\u00FB\u00FC\u016D\u015D\u02D9\"\n },\n \"cp28593\": \"iso88593\",\n \"iso88594\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0104\u0138\u0156\u00A4\u0128\u013B\u00A7\u00A8\u0160\u0112\u0122\u0166\u00AD\u017D\u00AF\u00B0\u0105\u02DB\u0157\u00B4\u0129\u013C\u02C7\u00B8\u0161\u0113\u0123\u0167\u014A\u017E\u014B\u0100\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u012E\u010C\u00C9\u0118\u00CB\u0116\u00CD\u00CE\u012A\u0110\u0145\u014C\u0136\u00D4\u00D5\u00D6\u00D7\u00D8\u0172\u00DA\u00DB\u00DC\u0168\u016A\u00DF\u0101\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u012F\u010D\u00E9\u0119\u00EB\u0117\u00ED\u00EE\u012B\u0111\u0146\u014D\u0137\u00F4\u00F5\u00F6\u00F7\u00F8\u0173\u00FA\u00FB\u00FC\u0169\u016B\u02D9\"\n },\n \"cp28594\": \"iso88594\",\n \"iso88595\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0401\u0402\u0403\u0404\u0405\u0406\u0407\u0408\u0409\u040A\u040B\u040C\u00AD\u040E\u040F\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u2116\u0451\u0452\u0453\u0454\u0455\u0456\u0457\u0458\u0459\u045A\u045B\u045C\u00A7\u045E\u045F\"\n },\n \"cp28595\": \"iso88595\",\n \"iso88596\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\uFFFD\uFFFD\uFFFD\u00A4\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u060C\u00AD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u061B\uFFFD\uFFFD\uFFFD\u061F\uFFFD\u0621\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629\u062A\u062B\u062C\u062D\u062E\u062F\u0630\u0631\u0632\u0633\u0634\u0635\u0636\u0637\u0638\u0639\u063A\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0640\u0641\u0642\u0643\u0644\u0645\u0646\u0647\u0648\u0649\u064A\u064B\u064C\u064D\u064E\u064F\u0650\u0651\u0652\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\"\n },\n \"cp28596\": \"iso88596\",\n \"iso88597\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u2018\u2019\u00A3\u20AC\u20AF\u00A6\u00A7\u00A8\u00A9\u037A\u00AB\u00AC\u00AD\uFFFD\u2015\u00B0\u00B1\u00B2\u00B3\u0384\u0385\u0386\u00B7\u0388\u0389\u038A\u00BB\u038C\u00BD\u038E\u038F\u0390\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\uFFFD\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03AA\u03AB\u03AC\u03AD\u03AE\u03AF\u03B0\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C2\u03C3\u03C4\u03C5\u03C6\u03C7\u03C8\u03C9\u03CA\u03CB\u03CC\u03CD\u03CE\uFFFD\"\n },\n \"cp28597\": \"iso88597\",\n \"iso88598\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\uFFFD\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00D7\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00F7\u00BB\u00BC\u00BD\u00BE\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2017\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\uFFFD\uFFFD\u200E\u200F\uFFFD\"\n },\n \"cp28598\": \"iso88598\",\n \"iso88599\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u011E\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u0130\u015E\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u011F\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u0131\u015F\u00FF\"\n },\n \"cp28599\": \"iso88599\",\n \"iso885910\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0104\u0112\u0122\u012A\u0128\u0136\u00A7\u013B\u0110\u0160\u0166\u017D\u00AD\u016A\u014A\u00B0\u0105\u0113\u0123\u012B\u0129\u0137\u00B7\u013C\u0111\u0161\u0167\u017E\u2015\u016B\u014B\u0100\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u012E\u010C\u00C9\u0118\u00CB\u0116\u00CD\u00CE\u00CF\u00D0\u0145\u014C\u00D3\u00D4\u00D5\u00D6\u0168\u00D8\u0172\u00DA\u00DB\u00DC\u00DD\u00DE\u00DF\u0101\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u012F\u010D\u00E9\u0119\u00EB\u0117\u00ED\u00EE\u00EF\u00F0\u0146\u014D\u00F3\u00F4\u00F5\u00F6\u0169\u00F8\u0173\u00FA\u00FB\u00FC\u00FD\u00FE\u0138\"\n },\n \"cp28600\": \"iso885910\",\n \"iso885911\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFFFD\uFFFD\uFFFD\uFFFD\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\uFFFD\uFFFD\uFFFD\uFFFD\"\n },\n \"cp28601\": \"iso885911\",\n \"iso885913\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u201D\u00A2\u00A3\u00A4\u201E\u00A6\u00A7\u00D8\u00A9\u0156\u00AB\u00AC\u00AD\u00AE\u00C6\u00B0\u00B1\u00B2\u00B3\u201C\u00B5\u00B6\u00B7\u00F8\u00B9\u0157\u00BB\u00BC\u00BD\u00BE\u00E6\u0104\u012E\u0100\u0106\u00C4\u00C5\u0118\u0112\u010C\u00C9\u0179\u0116\u0122\u0136\u012A\u013B\u0160\u0143\u0145\u00D3\u014C\u00D5\u00D6\u00D7\u0172\u0141\u015A\u016A\u00DC\u017B\u017D\u00DF\u0105\u012F\u0101\u0107\u00E4\u00E5\u0119\u0113\u010D\u00E9\u017A\u0117\u0123\u0137\u012B\u013C\u0161\u0144\u0146\u00F3\u014D\u00F5\u00F6\u00F7\u0173\u0142\u015B\u016B\u00FC\u017C\u017E\u2019\"\n },\n \"cp28603\": \"iso885913\",\n \"iso885914\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u1E02\u1E03\u00A3\u010A\u010B\u1E0A\u00A7\u1E80\u00A9\u1E82\u1E0B\u1EF2\u00AD\u00AE\u0178\u1E1E\u1E1F\u0120\u0121\u1E40\u1E41\u00B6\u1E56\u1E81\u1E57\u1E83\u1E60\u1EF3\u1E84\u1E85\u1E61\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u0174\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u1E6A\u00D8\u00D9\u00DA\u00DB\u00DC\u00DD\u0176\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u0175\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u1E6B\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u0177\u00FF\"\n },\n \"cp28604\": \"iso885914\",\n \"iso885915\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u20AC\u00A5\u0160\u00A7\u0161\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u017D\u00B5\u00B6\u00B7\u017E\u00B9\u00BA\u00BB\u0152\u0153\u0178\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u00D0\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u00DD\u00DE\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u00FE\u00FF\"\n },\n \"cp28605\": \"iso885915\",\n \"iso885916\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0104\u0105\u0141\u20AC\u201E\u0160\u00A7\u0161\u00A9\u0218\u00AB\u0179\u00AD\u017A\u017B\u00B0\u00B1\u010C\u0142\u017D\u201D\u00B6\u00B7\u017E\u010D\u0219\u00BB\u0152\u0153\u0178\u017C\u00C0\u00C1\u00C2\u0102\u00C4\u0106\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u0110\u0143\u00D2\u00D3\u00D4\u0150\u00D6\u015A\u0170\u00D9\u00DA\u00DB\u00DC\u0118\u021A\u00DF\u00E0\u00E1\u00E2\u0103\u00E4\u0107\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u0111\u0144\u00F2\u00F3\u00F4\u0151\u00F6\u015B\u0171\u00F9\u00FA\u00FB\u00FC\u0119\u021B\u00FF\"\n },\n \"cp28606\": \"iso885916\",\n \"cp437\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\u00EC\u00C4\u00C5\u00C9\u00E6\u00C6\u00F4\u00F6\u00F2\u00FB\u00F9\u00FF\u00D6\u00DC\u00A2\u00A3\u00A5\u20A7\u0192\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA\u00BF\u2310\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n },\n \"ibm437\": \"cp437\",\n \"csibm437\": \"cp437\",\n \"cp737\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C3\u03C2\u03C4\u03C5\u03C6\u03C7\u03C8\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03C9\u03AC\u03AD\u03AE\u03CA\u03AF\u03CC\u03CD\u03CB\u03CE\u0386\u0388\u0389\u038A\u038C\u038E\u038F\u00B1\u2265\u2264\u03AA\u03AB\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n },\n \"ibm737\": \"cp737\",\n \"csibm737\": \"cp737\",\n \"cp775\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0106\u00FC\u00E9\u0101\u00E4\u0123\u00E5\u0107\u0142\u0113\u0156\u0157\u012B\u0179\u00C4\u00C5\u00C9\u00E6\u00C6\u014D\u00F6\u0122\u00A2\u015A\u015B\u00D6\u00DC\u00F8\u00A3\u00D8\u00D7\u00A4\u0100\u012A\u00F3\u017B\u017C\u017A\u201D\u00A6\u00A9\u00AE\u00AC\u00BD\u00BC\u0141\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u0104\u010C\u0118\u0116\u2563\u2551\u2557\u255D\u012E\u0160\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u0172\u016A\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u017D\u0105\u010D\u0119\u0117\u012F\u0161\u0173\u016B\u017E\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u00D3\u00DF\u014C\u0143\u00F5\u00D5\u00B5\u0144\u0136\u0137\u013B\u013C\u0146\u0112\u0145\u2019\u00AD\u00B1\u201C\u00BE\u00B6\u00A7\u00F7\u201E\u00B0\u2219\u00B7\u00B9\u00B3\u00B2\u25A0\u00A0\"\n },\n \"ibm775\": \"cp775\",\n \"csibm775\": \"cp775\",\n \"cp850\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\u00EC\u00C4\u00C5\u00C9\u00E6\u00C6\u00F4\u00F6\u00F2\u00FB\u00F9\u00FF\u00D6\u00DC\u00F8\u00A3\u00D8\u00D7\u0192\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA\u00BF\u00AE\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u00C1\u00C2\u00C0\u00A9\u2563\u2551\u2557\u255D\u00A2\u00A5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u00E3\u00C3\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u00A4\u00F0\u00D0\u00CA\u00CB\u00C8\u0131\u00CD\u00CE\u00CF\u2518\u250C\u2588\u2584\u00A6\u00CC\u2580\u00D3\u00DF\u00D4\u00D2\u00F5\u00D5\u00B5\u00FE\u00DE\u00DA\u00DB\u00D9\u00FD\u00DD\u00AF\u00B4\u00AD\u00B1\u2017\u00BE\u00B6\u00A7\u00F7\u00B8\u00B0\u00A8\u00B7\u00B9\u00B3\u00B2\u25A0\u00A0\"\n },\n \"ibm850\": \"cp850\",\n \"csibm850\": \"cp850\",\n \"cp852\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u016F\u0107\u00E7\u0142\u00EB\u0150\u0151\u00EE\u0179\u00C4\u0106\u00C9\u0139\u013A\u00F4\u00F6\u013D\u013E\u015A\u015B\u00D6\u00DC\u0164\u0165\u0141\u00D7\u010D\u00E1\u00ED\u00F3\u00FA\u0104\u0105\u017D\u017E\u0118\u0119\u00AC\u017A\u010C\u015F\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u00C1\u00C2\u011A\u015E\u2563\u2551\u2557\u255D\u017B\u017C\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u0102\u0103\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u00A4\u0111\u0110\u010E\u00CB\u010F\u0147\u00CD\u00CE\u011B\u2518\u250C\u2588\u2584\u0162\u016E\u2580\u00D3\u00DF\u00D4\u0143\u0144\u0148\u0160\u0161\u0154\u00DA\u0155\u0170\u00FD\u00DD\u0163\u00B4\u00AD\u02DD\u02DB\u02C7\u02D8\u00A7\u00F7\u00B8\u00B0\u00A8\u02D9\u0171\u0158\u0159\u25A0\u00A0\"\n },\n \"ibm852\": \"cp852\",\n \"csibm852\": \"cp852\",\n \"cp855\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0452\u0402\u0453\u0403\u0451\u0401\u0454\u0404\u0455\u0405\u0456\u0406\u0457\u0407\u0458\u0408\u0459\u0409\u045A\u040A\u045B\u040B\u045C\u040C\u045E\u040E\u045F\u040F\u044E\u042E\u044A\u042A\u0430\u0410\u0431\u0411\u0446\u0426\u0434\u0414\u0435\u0415\u0444\u0424\u0433\u0413\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u0445\u0425\u0438\u0418\u2563\u2551\u2557\u255D\u0439\u0419\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u043A\u041A\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u00A4\u043B\u041B\u043C\u041C\u043D\u041D\u043E\u041E\u043F\u2518\u250C\u2588\u2584\u041F\u044F\u2580\u042F\u0440\u0420\u0441\u0421\u0442\u0422\u0443\u0423\u0436\u0416\u0432\u0412\u044C\u042C\u2116\u00AD\u044B\u042B\u0437\u0417\u0448\u0428\u044D\u042D\u0449\u0429\u0447\u0427\u00A7\u25A0\u00A0\"\n },\n \"ibm855\": \"cp855\",\n \"csibm855\": \"cp855\",\n \"cp856\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\uFFFD\u00A3\uFFFD\u00D7\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u00AE\u00AC\u00BD\u00BC\uFFFD\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\uFFFD\uFFFD\uFFFD\u00A9\u2563\u2551\u2557\u255D\u00A2\u00A5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\uFFFD\uFFFD\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u00A4\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2518\u250C\u2588\u2584\u00A6\uFFFD\u2580\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u00B5\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u00AF\u00B4\u00AD\u00B1\u2017\u00BE\u00B6\u00A7\u00F7\u00B8\u00B0\u00A8\u00B7\u00B9\u00B3\u00B2\u25A0\u00A0\"\n },\n \"ibm856\": \"cp856\",\n \"csibm856\": \"cp856\",\n \"cp857\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\u0131\u00C4\u00C5\u00C9\u00E6\u00C6\u00F4\u00F6\u00F2\u00FB\u00F9\u0130\u00D6\u00DC\u00F8\u00A3\u00D8\u015E\u015F\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u011E\u011F\u00BF\u00AE\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u00C1\u00C2\u00C0\u00A9\u2563\u2551\u2557\u255D\u00A2\u00A5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u00E3\u00C3\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u00A4\u00BA\u00AA\u00CA\u00CB\u00C8\uFFFD\u00CD\u00CE\u00CF\u2518\u250C\u2588\u2584\u00A6\u00CC\u2580\u00D3\u00DF\u00D4\u00D2\u00F5\u00D5\u00B5\uFFFD\u00D7\u00DA\u00DB\u00D9\u00EC\u00FF\u00AF\u00B4\u00AD\u00B1\uFFFD\u00BE\u00B6\u00A7\u00F7\u00B8\u00B0\u00A8\u00B7\u00B9\u00B3\u00B2\u25A0\u00A0\"\n },\n \"ibm857\": \"cp857\",\n \"csibm857\": \"cp857\",\n \"cp858\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\u00EC\u00C4\u00C5\u00C9\u00E6\u00C6\u00F4\u00F6\u00F2\u00FB\u00F9\u00FF\u00D6\u00DC\u00F8\u00A3\u00D8\u00D7\u0192\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA\u00BF\u00AE\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u00C1\u00C2\u00C0\u00A9\u2563\u2551\u2557\u255D\u00A2\u00A5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u00E3\u00C3\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u00A4\u00F0\u00D0\u00CA\u00CB\u00C8\u20AC\u00CD\u00CE\u00CF\u2518\u250C\u2588\u2584\u00A6\u00CC\u2580\u00D3\u00DF\u00D4\u00D2\u00F5\u00D5\u00B5\u00FE\u00DE\u00DA\u00DB\u00D9\u00FD\u00DD\u00AF\u00B4\u00AD\u00B1\u2017\u00BE\u00B6\u00A7\u00F7\u00B8\u00B0\u00A8\u00B7\u00B9\u00B3\u00B2\u25A0\u00A0\"\n },\n \"ibm858\": \"cp858\",\n \"csibm858\": \"cp858\",\n \"cp860\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E3\u00E0\u00C1\u00E7\u00EA\u00CA\u00E8\u00CD\u00D4\u00EC\u00C3\u00C2\u00C9\u00C0\u00C8\u00F4\u00F5\u00F2\u00DA\u00F9\u00CC\u00D5\u00DC\u00A2\u00A3\u00D9\u20A7\u00D3\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA\u00BF\u00D2\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n },\n \"ibm860\": \"cp860\",\n \"csibm860\": \"cp860\",\n \"cp861\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7\u00EA\u00EB\u00E8\u00D0\u00F0\u00DE\u00C4\u00C5\u00C9\u00E6\u00C6\u00F4\u00F6\u00FE\u00FB\u00DD\u00FD\u00D6\u00DC\u00F8\u00A3\u00D8\u20A7\u0192\u00E1\u00ED\u00F3\u00FA\u00C1\u00CD\u00D3\u00DA\u00BF\u2310\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n },\n \"ibm861\": \"cp861\",\n \"csibm861\": \"cp861\",\n \"cp862\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\u00A2\u00A3\u00A5\u20A7\u0192\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA\u00BF\u2310\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n },\n \"ibm862\": \"cp862\",\n \"csibm862\": \"cp862\",\n \"cp863\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00C2\u00E0\u00B6\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\u2017\u00C0\u00A7\u00C9\u00C8\u00CA\u00F4\u00CB\u00CF\u00FB\u00F9\u00A4\u00D4\u00DC\u00A2\u00A3\u00D9\u00DB\u0192\u00A6\u00B4\u00F3\u00FA\u00A8\u00B8\u00B3\u00AF\u00CE\u2310\u00AC\u00BD\u00BC\u00BE\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n },\n \"ibm863\": \"cp863\",\n \"csibm863\": \"cp863\",\n \"cp864\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$\u066A&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u007F\u00B0\u00B7\u2219\u221A\u2592\u2500\u2502\u253C\u2524\u252C\u251C\u2534\u2510\u250C\u2514\u2518\u03B2\u221E\u03C6\u00B1\u00BD\u00BC\u2248\u00AB\u00BB\uFEF7\uFEF8\uFFFD\uFFFD\uFEFB\uFEFC\uFFFD\u00A0\u00AD\uFE82\u00A3\u00A4\uFE84\uFFFD\uFFFD\uFE8E\uFE8F\uFE95\uFE99\u060C\uFE9D\uFEA1\uFEA5\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\uFED1\u061B\uFEB1\uFEB5\uFEB9\u061F\u00A2\uFE80\uFE81\uFE83\uFE85\uFECA\uFE8B\uFE8D\uFE91\uFE93\uFE97\uFE9B\uFE9F\uFEA3\uFEA7\uFEA9\uFEAB\uFEAD\uFEAF\uFEB3\uFEB7\uFEBB\uFEBF\uFEC1\uFEC5\uFECB\uFECF\u00A6\u00AC\u00F7\u00D7\uFEC9\u0640\uFED3\uFED7\uFEDB\uFEDF\uFEE3\uFEE7\uFEEB\uFEED\uFEEF\uFEF3\uFEBD\uFECC\uFECE\uFECD\uFEE1\uFE7D\u0651\uFEE5\uFEE9\uFEEC\uFEF0\uFEF2\uFED0\uFED5\uFEF5\uFEF6\uFEDD\uFED9\uFEF1\u25A0\uFFFD\"\n },\n \"ibm864\": \"cp864\",\n \"csibm864\": \"cp864\",\n \"cp865\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\u00EC\u00C4\u00C5\u00C9\u00E6\u00C6\u00F4\u00F6\u00F2\u00FB\u00F9\u00FF\u00D6\u00DC\u00F8\u00A3\u00D8\u20A7\u0192\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA\u00BF\u2310\u00AC\u00BD\u00BC\u00A1\u00AB\u00A4\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n },\n \"ibm865\": \"cp865\",\n \"csibm865\": \"cp865\",\n \"cp866\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u0401\u0451\u0404\u0454\u0407\u0457\u040E\u045E\u00B0\u2219\u00B7\u221A\u2116\u00A4\u25A0\u00A0\"\n },\n \"ibm866\": \"cp866\",\n \"csibm866\": \"cp866\",\n \"cp869\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0386\uFFFD\u00B7\u00AC\u00A6\u2018\u2019\u0388\u2015\u0389\u038A\u03AA\u038C\uFFFD\uFFFD\u038E\u03AB\u00A9\u038F\u00B2\u00B3\u03AC\u00A3\u03AD\u03AE\u03AF\u03CA\u0390\u03CC\u03CD\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u00BD\u0398\u0399\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u039A\u039B\u039C\u039D\u2563\u2551\u2557\u255D\u039E\u039F\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u03A0\u03A1\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03B1\u03B2\u03B3\u2518\u250C\u2588\u2584\u03B4\u03B5\u2580\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C3\u03C2\u03C4\u0384\u00AD\u00B1\u03C5\u03C6\u03C7\u00A7\u03C8\u0385\u00B0\u00A8\u03C9\u03CB\u03B0\u03CE\u25A0\u00A0\"\n },\n \"ibm869\": \"cp869\",\n \"csibm869\": \"cp869\",\n \"cp922\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u203E\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u0160\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u00DD\u017D\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u0161\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u017E\u00FF\"\n },\n \"ibm922\": \"cp922\",\n \"csibm922\": \"cp922\",\n \"cp1046\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\uFE88\u00D7\u00F7\uF8F6\uF8F5\uF8F4\uF8F7\uFE71\u0088\u25A0\u2502\u2500\u2510\u250C\u2514\u2518\uFE79\uFE7B\uFE7D\uFE7F\uFE77\uFE8A\uFEF0\uFEF3\uFEF2\uFECE\uFECF\uFED0\uFEF6\uFEF8\uFEFA\uFEFC\u00A0\uF8FA\uF8F9\uF8F8\u00A4\uF8FB\uFE8B\uFE91\uFE97\uFE9B\uFE9F\uFEA3\u060C\u00AD\uFEA7\uFEB3\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\uFEB7\u061B\uFEBB\uFEBF\uFECA\u061F\uFECB\u0621\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629\u062A\u062B\u062C\u062D\u062E\u062F\u0630\u0631\u0632\u0633\u0634\u0635\u0636\u0637\uFEC7\u0639\u063A\uFECC\uFE82\uFE84\uFE8E\uFED3\u0640\u0641\u0642\u0643\u0644\u0645\u0646\u0647\u0648\u0649\u064A\u064B\u064C\u064D\u064E\u064F\u0650\u0651\u0652\uFED7\uFEDB\uFEDF\uF8FC\uFEF5\uFEF7\uFEF9\uFEFB\uFEE3\uFEE7\uFEEC\uFEE9\uFFFD\"\n },\n \"ibm1046\": \"cp1046\",\n \"csibm1046\": \"cp1046\",\n \"cp1124\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0401\u0402\u0490\u0404\u0405\u0406\u0407\u0408\u0409\u040A\u040B\u040C\u00AD\u040E\u040F\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u2116\u0451\u0452\u0491\u0454\u0455\u0456\u0457\u0458\u0459\u045A\u045B\u045C\u00A7\u045E\u045F\"\n },\n \"ibm1124\": \"cp1124\",\n \"csibm1124\": \"cp1124\",\n \"cp1125\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u0401\u0451\u0490\u0491\u0404\u0454\u0406\u0456\u0407\u0457\u00B7\u221A\u2116\u00A4\u25A0\u00A0\"\n },\n \"ibm1125\": \"cp1125\",\n \"csibm1125\": \"cp1125\",\n \"cp1129\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u0153\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u0178\u00B5\u00B6\u00B7\u0152\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u0102\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u0300\u00CD\u00CE\u00CF\u0110\u00D1\u0309\u00D3\u00D4\u01A0\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u01AF\u0303\u00DF\u00E0\u00E1\u00E2\u0103\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u0301\u00ED\u00EE\u00EF\u0111\u00F1\u0323\u00F3\u00F4\u01A1\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u01B0\u20AB\u00FF\"\n },\n \"ibm1129\": \"cp1129\",\n \"csibm1129\": \"cp1129\",\n \"cp1133\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0E81\u0E82\u0E84\u0E87\u0E88\u0EAA\u0E8A\u0E8D\u0E94\u0E95\u0E96\u0E97\u0E99\u0E9A\u0E9B\u0E9C\u0E9D\u0E9E\u0E9F\u0EA1\u0EA2\u0EA3\u0EA5\u0EA7\u0EAB\u0EAD\u0EAE\uFFFD\uFFFD\uFFFD\u0EAF\u0EB0\u0EB2\u0EB3\u0EB4\u0EB5\u0EB6\u0EB7\u0EB8\u0EB9\u0EBC\u0EB1\u0EBB\u0EBD\uFFFD\uFFFD\uFFFD\u0EC0\u0EC1\u0EC2\u0EC3\u0EC4\u0EC8\u0EC9\u0ECA\u0ECB\u0ECC\u0ECD\u0EC6\uFFFD\u0EDC\u0EDD\u20AD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0ED0\u0ED1\u0ED2\u0ED3\u0ED4\u0ED5\u0ED6\u0ED7\u0ED8\u0ED9\uFFFD\uFFFD\u00A2\u00AC\u00A6\uFFFD\"\n },\n \"ibm1133\": \"cp1133\",\n \"csibm1133\": \"cp1133\",\n \"cp1161\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0E48\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\u0E49\u0E4A\u0E4B\u20AC\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\u00A2\u00AC\u00A6\u00A0\"\n },\n \"ibm1161\": \"cp1161\",\n \"csibm1161\": \"cp1161\",\n \"cp1162\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u20AC\u0081\u0082\u0083\u0084\u2026\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFFFD\uFFFD\uFFFD\uFFFD\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\uFFFD\uFFFD\uFFFD\uFFFD\"\n },\n \"ibm1162\": \"cp1162\",\n \"csibm1162\": \"cp1162\",\n \"cp1163\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u20AC\u00A5\u00A6\u00A7\u0153\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u0178\u00B5\u00B6\u00B7\u0152\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u0102\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u0300\u00CD\u00CE\u00CF\u0110\u00D1\u0309\u00D3\u00D4\u01A0\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u01AF\u0303\u00DF\u00E0\u00E1\u00E2\u0103\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u0301\u00ED\u00EE\u00EF\u0111\u00F1\u0323\u00F3\u00F4\u01A1\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u01B0\u20AB\u00FF\"\n },\n \"ibm1163\": \"cp1163\",\n \"csibm1163\": \"cp1163\",\n \"maccroatian\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C4\u00C5\u00C7\u00C9\u00D1\u00D6\u00DC\u00E1\u00E0\u00E2\u00E4\u00E3\u00E5\u00E7\u00E9\u00E8\u00EA\u00EB\u00ED\u00EC\u00EE\u00EF\u00F1\u00F3\u00F2\u00F4\u00F6\u00F5\u00FA\u00F9\u00FB\u00FC\u2020\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u0160\u2122\u00B4\u00A8\u2260\u017D\u00D8\u221E\u00B1\u2264\u2265\u2206\u00B5\u2202\u2211\u220F\u0161\u222B\u00AA\u00BA\u2126\u017E\u00F8\u00BF\u00A1\u00AC\u221A\u0192\u2248\u0106\u00AB\u010C\u2026\u00A0\u00C0\u00C3\u00D5\u0152\u0153\u0110\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\uFFFD\u00A9\u2044\u00A4\u2039\u203A\u00C6\u00BB\u2013\u00B7\u201A\u201E\u2030\u00C2\u0107\u00C1\u010D\u00C8\u00CD\u00CE\u00CF\u00CC\u00D3\u00D4\u0111\u00D2\u00DA\u00DB\u00D9\u0131\u02C6\u02DC\u00AF\u03C0\u00CB\u02DA\u00B8\u00CA\u00E6\u02C7\"\n },\n \"maccyrillic\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u2020\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u0406\u00AE\u00A9\u2122\u0402\u0452\u2260\u0403\u0453\u221E\u00B1\u2264\u2265\u0456\u00B5\u2202\u0408\u0404\u0454\u0407\u0457\u0409\u0459\u040A\u045A\u0458\u0405\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u040B\u045B\u040C\u045C\u0455\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u201E\u040E\u045E\u040F\u045F\u2116\u0401\u0451\u044F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u00A4\"\n },\n \"macgreek\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C4\u00B9\u00B2\u00C9\u00B3\u00D6\u00DC\u0385\u00E0\u00E2\u00E4\u0384\u00A8\u00E7\u00E9\u00E8\u00EA\u00EB\u00A3\u2122\u00EE\u00EF\u2022\u00BD\u2030\u00F4\u00F6\u00A6\u00AD\u00F9\u00FB\u00FC\u2020\u0393\u0394\u0398\u039B\u039E\u03A0\u00DF\u00AE\u00A9\u03A3\u03AA\u00A7\u2260\u00B0\u0387\u0391\u00B1\u2264\u2265\u00A5\u0392\u0395\u0396\u0397\u0399\u039A\u039C\u03A6\u03AB\u03A8\u03A9\u03AC\u039D\u00AC\u039F\u03A1\u2248\u03A4\u00AB\u00BB\u2026\u00A0\u03A5\u03A7\u0386\u0388\u0153\u2013\u2015\u201C\u201D\u2018\u2019\u00F7\u0389\u038A\u038C\u038E\u03AD\u03AE\u03AF\u03CC\u038F\u03CD\u03B1\u03B2\u03C8\u03B4\u03B5\u03C6\u03B3\u03B7\u03B9\u03BE\u03BA\u03BB\u03BC\u03BD\u03BF\u03C0\u03CE\u03C1\u03C3\u03C4\u03B8\u03C9\u03C2\u03C7\u03C5\u03B6\u03CA\u03CB\u0390\u03B0\uFFFD\"\n },\n \"maciceland\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C4\u00C5\u00C7\u00C9\u00D1\u00D6\u00DC\u00E1\u00E0\u00E2\u00E4\u00E3\u00E5\u00E7\u00E9\u00E8\u00EA\u00EB\u00ED\u00EC\u00EE\u00EF\u00F1\u00F3\u00F2\u00F4\u00F6\u00F5\u00FA\u00F9\u00FB\u00FC\u00DD\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u00A9\u2122\u00B4\u00A8\u2260\u00C6\u00D8\u221E\u00B1\u2264\u2265\u00A5\u00B5\u2202\u2211\u220F\u03C0\u222B\u00AA\u00BA\u2126\u00E6\u00F8\u00BF\u00A1\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u00C0\u00C3\u00D5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\u00FF\u0178\u2044\u00A4\u00D0\u00F0\u00DE\u00FE\u00FD\u00B7\u201A\u201E\u2030\u00C2\u00CA\u00C1\u00CB\u00C8\u00CD\u00CE\u00CF\u00CC\u00D3\u00D4\uFFFD\u00D2\u00DA\u00DB\u00D9\u0131\u02C6\u02DC\u00AF\u02D8\u02D9\u02DA\u00B8\u02DD\u02DB\u02C7\"\n },\n \"macroman\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C4\u00C5\u00C7\u00C9\u00D1\u00D6\u00DC\u00E1\u00E0\u00E2\u00E4\u00E3\u00E5\u00E7\u00E9\u00E8\u00EA\u00EB\u00ED\u00EC\u00EE\u00EF\u00F1\u00F3\u00F2\u00F4\u00F6\u00F5\u00FA\u00F9\u00FB\u00FC\u2020\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u00A9\u2122\u00B4\u00A8\u2260\u00C6\u00D8\u221E\u00B1\u2264\u2265\u00A5\u00B5\u2202\u2211\u220F\u03C0\u222B\u00AA\u00BA\u2126\u00E6\u00F8\u00BF\u00A1\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u00C0\u00C3\u00D5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\u00FF\u0178\u2044\u00A4\u2039\u203A\uFB01\uFB02\u2021\u00B7\u201A\u201E\u2030\u00C2\u00CA\u00C1\u00CB\u00C8\u00CD\u00CE\u00CF\u00CC\u00D3\u00D4\uFFFD\u00D2\u00DA\u00DB\u00D9\u0131\u02C6\u02DC\u00AF\u02D8\u02D9\u02DA\u00B8\u02DD\u02DB\u02C7\"\n },\n \"macromania\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C4\u00C5\u00C7\u00C9\u00D1\u00D6\u00DC\u00E1\u00E0\u00E2\u00E4\u00E3\u00E5\u00E7\u00E9\u00E8\u00EA\u00EB\u00ED\u00EC\u00EE\u00EF\u00F1\u00F3\u00F2\u00F4\u00F6\u00F5\u00FA\u00F9\u00FB\u00FC\u2020\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u00A9\u2122\u00B4\u00A8\u2260\u0102\u015E\u221E\u00B1\u2264\u2265\u00A5\u00B5\u2202\u2211\u220F\u03C0\u222B\u00AA\u00BA\u2126\u0103\u015F\u00BF\u00A1\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u00C0\u00C3\u00D5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\u00FF\u0178\u2044\u00A4\u2039\u203A\u0162\u0163\u2021\u00B7\u201A\u201E\u2030\u00C2\u00CA\u00C1\u00CB\u00C8\u00CD\u00CE\u00CF\u00CC\u00D3\u00D4\uFFFD\u00D2\u00DA\u00DB\u00D9\u0131\u02C6\u02DC\u00AF\u02D8\u02D9\u02DA\u00B8\u02DD\u02DB\u02C7\"\n },\n \"macthai\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00AB\u00BB\u2026\uF88C\uF88F\uF892\uF895\uF898\uF88B\uF88E\uF891\uF894\uF897\u201C\u201D\uF899\uFFFD\u2022\uF884\uF889\uF885\uF886\uF887\uF888\uF88A\uF88D\uF890\uF893\uF896\u2018\u2019\uFFFD\u00A0\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFEFF\u200B\u2013\u2014\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u2122\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u00AE\u00A9\uFFFD\uFFFD\uFFFD\uFFFD\"\n },\n \"macturkish\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C4\u00C5\u00C7\u00C9\u00D1\u00D6\u00DC\u00E1\u00E0\u00E2\u00E4\u00E3\u00E5\u00E7\u00E9\u00E8\u00EA\u00EB\u00ED\u00EC\u00EE\u00EF\u00F1\u00F3\u00F2\u00F4\u00F6\u00F5\u00FA\u00F9\u00FB\u00FC\u2020\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u00A9\u2122\u00B4\u00A8\u2260\u00C6\u00D8\u221E\u00B1\u2264\u2265\u00A5\u00B5\u2202\u2211\u220F\u03C0\u222B\u00AA\u00BA\u2126\u00E6\u00F8\u00BF\u00A1\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u00C0\u00C3\u00D5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\u00FF\u0178\u011E\u011F\u0130\u0131\u015E\u015F\u2021\u00B7\u201A\u201E\u2030\u00C2\u00CA\u00C1\u00CB\u00C8\u00CD\u00CE\u00CF\u00CC\u00D3\u00D4\uFFFD\u00D2\u00DA\u00DB\u00D9\uFFFD\u02C6\u02DC\u00AF\u02D8\u02D9\u02DA\u00B8\u02DD\u02DB\u02C7\"\n },\n \"macukraine\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u2020\u00B0\u0490\u00A3\u00A7\u2022\u00B6\u0406\u00AE\u00A9\u2122\u0402\u0452\u2260\u0403\u0453\u221E\u00B1\u2264\u2265\u0456\u00B5\u0491\u0408\u0404\u0454\u0407\u0457\u0409\u0459\u040A\u045A\u0458\u0405\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u040B\u045B\u040C\u045C\u0455\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u201E\u040E\u045E\u040F\u045F\u2116\u0401\u0451\u044F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u00A4\"\n },\n \"koi8r\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2580\u2584\u2588\u258C\u2590\u2591\u2592\u2593\u2320\u25A0\u2219\u221A\u2248\u2264\u2265\u00A0\u2321\u00B0\u00B2\u00B7\u00F7\u2550\u2551\u2552\u0451\u2553\u2554\u2555\u2556\u2557\u2558\u2559\u255A\u255B\u255C\u255D\u255E\u255F\u2560\u2561\u0401\u2562\u2563\u2564\u2565\u2566\u2567\u2568\u2569\u256A\u256B\u256C\u00A9\u044E\u0430\u0431\u0446\u0434\u0435\u0444\u0433\u0445\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u044F\u0440\u0441\u0442\u0443\u0436\u0432\u044C\u044B\u0437\u0448\u044D\u0449\u0447\u044A\u042E\u0410\u0411\u0426\u0414\u0415\u0424\u0413\u0425\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u042F\u0420\u0421\u0422\u0423\u0416\u0412\u042C\u042B\u0417\u0428\u042D\u0429\u0427\u042A\"\n },\n \"koi8u\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2580\u2584\u2588\u258C\u2590\u2591\u2592\u2593\u2320\u25A0\u2219\u221A\u2248\u2264\u2265\u00A0\u2321\u00B0\u00B2\u00B7\u00F7\u2550\u2551\u2552\u0451\u0454\u2554\u0456\u0457\u2557\u2558\u2559\u255A\u255B\u0491\u255D\u255E\u255F\u2560\u2561\u0401\u0404\u2563\u0406\u0407\u2566\u2567\u2568\u2569\u256A\u0490\u256C\u00A9\u044E\u0430\u0431\u0446\u0434\u0435\u0444\u0433\u0445\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u044F\u0440\u0441\u0442\u0443\u0436\u0432\u044C\u044B\u0437\u0448\u044D\u0449\u0447\u044A\u042E\u0410\u0411\u0426\u0414\u0415\u0424\u0413\u0425\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u042F\u0420\u0421\u0422\u0423\u0416\u0412\u042C\u042B\u0417\u0428\u042D\u0429\u0427\u042A\"\n },\n \"koi8ru\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2580\u2584\u2588\u258C\u2590\u2591\u2592\u2593\u2320\u25A0\u2219\u221A\u2248\u2264\u2265\u00A0\u2321\u00B0\u00B2\u00B7\u00F7\u2550\u2551\u2552\u0451\u0454\u2554\u0456\u0457\u2557\u2558\u2559\u255A\u255B\u0491\u045E\u255E\u255F\u2560\u2561\u0401\u0404\u2563\u0406\u0407\u2566\u2567\u2568\u2569\u256A\u0490\u040E\u00A9\u044E\u0430\u0431\u0446\u0434\u0435\u0444\u0433\u0445\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u044F\u0440\u0441\u0442\u0443\u0436\u0432\u044C\u044B\u0437\u0448\u044D\u0449\u0447\u044A\u042E\u0410\u0411\u0426\u0414\u0415\u0424\u0413\u0425\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u042F\u0420\u0421\u0422\u0423\u0416\u0412\u042C\u042B\u0417\u0428\u042D\u0429\u0427\u042A\"\n },\n \"koi8t\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u049B\u0493\u201A\u0492\u201E\u2026\u2020\u2021\uFFFD\u2030\u04B3\u2039\u04B2\u04B7\u04B6\uFFFD\u049A\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\uFFFD\u203A\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u04EF\u04EE\u0451\u00A4\u04E3\u00A6\u00A7\uFFFD\uFFFD\uFFFD\u00AB\u00AC\u00AD\u00AE\uFFFD\u00B0\u00B1\u00B2\u0401\uFFFD\u04E2\u00B6\u00B7\uFFFD\u2116\uFFFD\u00BB\uFFFD\uFFFD\uFFFD\u00A9\u044E\u0430\u0431\u0446\u0434\u0435\u0444\u0433\u0445\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u044F\u0440\u0441\u0442\u0443\u0436\u0432\u044C\u044B\u0437\u0448\u044D\u0449\u0447\u044A\u042E\u0410\u0411\u0426\u0414\u0415\u0424\u0413\u0425\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u042F\u0420\u0421\u0422\u0423\u0416\u0412\u042C\u042B\u0417\u0428\u042D\u0429\u0427\u042A\"\n },\n \"armscii8\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\uFFFD\u0587\u0589)(\u00BB\u00AB\u2014.\u055D,-\u058A\u2026\u055C\u055B\u055E\u0531\u0561\u0532\u0562\u0533\u0563\u0534\u0564\u0535\u0565\u0536\u0566\u0537\u0567\u0538\u0568\u0539\u0569\u053A\u056A\u053B\u056B\u053C\u056C\u053D\u056D\u053E\u056E\u053F\u056F\u0540\u0570\u0541\u0571\u0542\u0572\u0543\u0573\u0544\u0574\u0545\u0575\u0546\u0576\u0547\u0577\u0548\u0578\u0549\u0579\u054A\u057A\u054B\u057B\u054C\u057C\u054D\u057D\u054E\u057E\u054F\u057F\u0550\u0580\u0551\u0581\u0552\u0582\u0553\u0583\u0554\u0584\u0555\u0585\u0556\u0586\u055A\uFFFD\"\n },\n \"rk1048\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0402\u0403\u201A\u0453\u201E\u2026\u2020\u2021\u20AC\u2030\u0409\u2039\u040A\u049A\u04BA\u040F\u0452\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\u0459\u203A\u045A\u049B\u04BB\u045F\u00A0\u04B0\u04B1\u04D8\u00A4\u04E8\u00A6\u00A7\u0401\u00A9\u0492\u00AB\u00AC\u00AD\u00AE\u04AE\u00B0\u00B1\u0406\u0456\u04E9\u00B5\u00B6\u00B7\u0451\u2116\u0493\u00BB\u04D9\u04A2\u04A3\u04AF\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\"\n },\n \"tcvn\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\\u0000\u00DA\u1EE4\\u0003\u1EEA\u1EEC\u1EEE\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\u1EE8\u1EF0\u1EF2\u1EF6\u1EF8\u00DD\u1EF4\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u007F\u00C0\u1EA2\u00C3\u00C1\u1EA0\u1EB6\u1EAC\u00C8\u1EBA\u1EBC\u00C9\u1EB8\u1EC6\u00CC\u1EC8\u0128\u00CD\u1ECA\u00D2\u1ECE\u00D5\u00D3\u1ECC\u1ED8\u1EDC\u1EDE\u1EE0\u1EDA\u1EE2\u00D9\u1EE6\u0168\u00A0\u0102\u00C2\u00CA\u00D4\u01A0\u01AF\u0110\u0103\u00E2\u00EA\u00F4\u01A1\u01B0\u0111\u1EB0\u0300\u0309\u0303\u0301\u0323\u00E0\u1EA3\u00E3\u00E1\u1EA1\u1EB2\u1EB1\u1EB3\u1EB5\u1EAF\u1EB4\u1EAE\u1EA6\u1EA8\u1EAA\u1EA4\u1EC0\u1EB7\u1EA7\u1EA9\u1EAB\u1EA5\u1EAD\u00E8\u1EC2\u1EBB\u1EBD\u00E9\u1EB9\u1EC1\u1EC3\u1EC5\u1EBF\u1EC7\u00EC\u1EC9\u1EC4\u1EBE\u1ED2\u0129\u00ED\u1ECB\u00F2\u1ED4\u1ECF\u00F5\u00F3\u1ECD\u1ED3\u1ED5\u1ED7\u1ED1\u1ED9\u1EDD\u1EDF\u1EE1\u1EDB\u1EE3\u00F9\u1ED6\u1EE7\u0169\u00FA\u1EE5\u1EEB\u1EED\u1EEF\u1EE9\u1EF1\u1EF3\u1EF7\u1EF9\u00FD\u1EF5\u1ED0\"\n },\n \"georgianacademy\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0160\u2039\u0152\u008D\u008E\u008F\u0090\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\u0161\u203A\u0153\u009D\u009E\u0178\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u10D0\u10D1\u10D2\u10D3\u10D4\u10D5\u10D6\u10D7\u10D8\u10D9\u10DA\u10DB\u10DC\u10DD\u10DE\u10DF\u10E0\u10E1\u10E2\u10E3\u10E4\u10E5\u10E6\u10E7\u10E8\u10E9\u10EA\u10EB\u10EC\u10ED\u10EE\u10EF\u10F0\u10F1\u10F2\u10F3\u10F4\u10F5\u10F6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u00FE\u00FF\"\n },\n \"georgianps\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0160\u2039\u0152\u008D\u008E\u008F\u0090\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\u0161\u203A\u0153\u009D\u009E\u0178\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u10D0\u10D1\u10D2\u10D3\u10D4\u10D5\u10D6\u10F1\u10D7\u10D8\u10D9\u10DA\u10DB\u10DC\u10F2\u10DD\u10DE\u10DF\u10E0\u10E1\u10E2\u10F3\u10E3\u10E4\u10E5\u10E6\u10E7\u10E8\u10E9\u10EA\u10EB\u10EC\u10ED\u10EE\u10F4\u10EF\u10F0\u10F5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u00FE\u00FF\"\n },\n \"pt154\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0496\u0492\u04EE\u0493\u201E\u2026\u04B6\u04AE\u04B2\u04AF\u04A0\u04E2\u04A2\u049A\u04BA\u04B8\u0497\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u04B3\u04B7\u04A1\u04E3\u04A3\u049B\u04BB\u04B9\u00A0\u040E\u045E\u0408\u04E8\u0498\u04B0\u00A7\u0401\u00A9\u04D8\u00AB\u00AC\u04EF\u00AE\u049C\u00B0\u04B1\u0406\u0456\u0499\u04E9\u00B6\u00B7\u0451\u2116\u04D9\u00BB\u0458\u04AA\u04AB\u049D\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\"\n },\n \"viscii\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\\u0000\\u0001\u1EB2\\u0003\\u0004\u1EB4\u1EAA\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\u1EF6\\u0015\\u0016\\u0017\\u0018\u1EF8\\u001a\\u001b\\u001c\\u001d\u1EF4\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u007F\u1EA0\u1EAE\u1EB0\u1EB6\u1EA4\u1EA6\u1EA8\u1EAC\u1EBC\u1EB8\u1EBE\u1EC0\u1EC2\u1EC4\u1EC6\u1ED0\u1ED2\u1ED4\u1ED6\u1ED8\u1EE2\u1EDA\u1EDC\u1EDE\u1ECA\u1ECE\u1ECC\u1EC8\u1EE6\u0168\u1EE4\u1EF2\u00D5\u1EAF\u1EB1\u1EB7\u1EA5\u1EA7\u1EA9\u1EAD\u1EBD\u1EB9\u1EBF\u1EC1\u1EC3\u1EC5\u1EC7\u1ED1\u1ED3\u1ED5\u1ED7\u1EE0\u01A0\u1ED9\u1EDD\u1EDF\u1ECB\u1EF0\u1EE8\u1EEA\u1EEC\u01A1\u1EDB\u01AF\u00C0\u00C1\u00C2\u00C3\u1EA2\u0102\u1EB3\u1EB5\u00C8\u00C9\u00CA\u1EBA\u00CC\u00CD\u0128\u1EF3\u0110\u1EE9\u00D2\u00D3\u00D4\u1EA1\u1EF7\u1EEB\u1EED\u00D9\u00DA\u1EF9\u1EF5\u00DD\u1EE1\u01B0\u00E0\u00E1\u00E2\u00E3\u1EA3\u0103\u1EEF\u1EAB\u00E8\u00E9\u00EA\u1EBB\u00EC\u00ED\u0129\u1EC9\u0111\u1EF1\u00F2\u00F3\u00F4\u00F5\u1ECF\u1ECD\u1EE5\u00F9\u00FA\u0169\u1EE7\u00FD\u1EE3\u1EEE\"\n },\n \"iso646cn\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#\u00A5%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}\u203E\u007F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\"\n },\n \"iso646jp\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\u00A5]^_`abcdefghijklmnopqrstuvwxyz{|}\u203E\u007F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\"\n },\n \"hproman8\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00C0\u00C2\u00C8\u00CA\u00CB\u00CE\u00CF\u00B4\u02CB\u02C6\u00A8\u02DC\u00D9\u00DB\u20A4\u00AF\u00DD\u00FD\u00B0\u00C7\u00E7\u00D1\u00F1\u00A1\u00BF\u00A4\u00A3\u00A5\u00A7\u0192\u00A2\u00E2\u00EA\u00F4\u00FB\u00E1\u00E9\u00F3\u00FA\u00E0\u00E8\u00F2\u00F9\u00E4\u00EB\u00F6\u00FC\u00C5\u00EE\u00D8\u00C6\u00E5\u00ED\u00F8\u00E6\u00C4\u00EC\u00D6\u00DC\u00C9\u00EF\u00DF\u00D4\u00C1\u00C3\u00E3\u00D0\u00F0\u00CD\u00CC\u00D3\u00D2\u00D5\u00F5\u0160\u0161\u00DA\u0178\u00FF\u00DE\u00FE\u00B7\u00B5\u00B6\u00BE\u2014\u00BC\u00BD\u00AA\u00BA\u00AB\u25A0\u00BB\u00B1\uFFFD\"\n },\n \"macintosh\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C4\u00C5\u00C7\u00C9\u00D1\u00D6\u00DC\u00E1\u00E0\u00E2\u00E4\u00E3\u00E5\u00E7\u00E9\u00E8\u00EA\u00EB\u00ED\u00EC\u00EE\u00EF\u00F1\u00F3\u00F2\u00F4\u00F6\u00F5\u00FA\u00F9\u00FB\u00FC\u2020\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u00A9\u2122\u00B4\u00A8\u2260\u00C6\u00D8\u221E\u00B1\u2264\u2265\u00A5\u00B5\u2202\u2211\u220F\u03C0\u222B\u00AA\u00BA\u2126\u00E6\u00F8\u00BF\u00A1\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u00C0\u00C3\u00D5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\u00FF\u0178\u2044\u00A4\u2039\u203A\uFB01\uFB02\u2021\u00B7\u201A\u201E\u2030\u00C2\u00CA\u00C1\u00CB\u00C8\u00CD\u00CE\u00CF\u00CC\u00D3\u00D4\uFFFD\u00D2\u00DA\u00DB\u00D9\u0131\u02C6\u02DC\u00AF\u02D8\u02D9\u02DA\u00B8\u02DD\u02DB\u02C7\"\n },\n \"ascii\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\"\n },\n \"tis620\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFFFD\uFFFD\uFFFD\uFFFD\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\uFFFD\uFFFD\uFFFD\uFFFD\"\n }\n}", "\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// Multibyte codec. In this scheme, a character is represented by 1 or more bytes.\n// Our codec supports UTF-16 surrogates, extensions for GB18030 and unicode sequences.\n// To save memory and loading time, we read table files only when requested.\n\nexports._dbcs = DBCSCodec;\n\nvar UNASSIGNED = -1,\n GB18030_CODE = -2,\n SEQ_START = -10,\n NODE_START = -1000,\n UNASSIGNED_NODE = new Array(0x100),\n DEF_CHAR = -1;\n\nfor (var i = 0; i < 0x100; i++)\n UNASSIGNED_NODE[i] = UNASSIGNED;\n\n\n// Class DBCSCodec reads and initializes mapping tables.\nfunction DBCSCodec(codecOptions, iconv) {\n this.encodingName = codecOptions.encodingName;\n if (!codecOptions)\n throw new Error(\"DBCS codec is called without the data.\")\n if (!codecOptions.table)\n throw new Error(\"Encoding '\" + this.encodingName + \"' has no data.\");\n\n // Load tables.\n var mappingTable = codecOptions.table();\n\n\n // Decode tables: MBCS -> Unicode.\n\n // decodeTables is a trie, encoded as an array of arrays of integers. Internal arrays are trie nodes and all have len = 256.\n // Trie root is decodeTables[0].\n // Values: >= 0 -> unicode character code. can be > 0xFFFF\n // == UNASSIGNED -> unknown/unassigned sequence.\n // == GB18030_CODE -> this is the end of a GB18030 4-byte sequence.\n // <= NODE_START -> index of the next node in our trie to process next byte.\n // <= SEQ_START -> index of the start of a character code sequence, in decodeTableSeq.\n this.decodeTables = [];\n this.decodeTables[0] = UNASSIGNED_NODE.slice(0); // Create root node.\n\n // Sometimes a MBCS char corresponds to a sequence of unicode chars. We store them as arrays of integers here. \n this.decodeTableSeq = [];\n\n // Actual mapping tables consist of chunks. Use them to fill up decode tables.\n for (var i = 0; i < mappingTable.length; i++)\n this._addDecodeChunk(mappingTable[i]);\n\n this.defaultCharUnicode = iconv.defaultCharUnicode;\n\n \n // Encode tables: Unicode -> DBCS.\n\n // `encodeTable` is array mapping from unicode char to encoded char. All its values are integers for performance.\n // Because it can be sparse, it is represented as array of buckets by 256 chars each. Bucket can be null.\n // Values: >= 0 -> it is a normal char. Write the value (if <=256 then 1 byte, if <=65536 then 2 bytes, etc.).\n // == UNASSIGNED -> no conversion found. Output a default char.\n // <= SEQ_START -> it's an index in encodeTableSeq, see below. The character starts a sequence.\n this.encodeTable = [];\n \n // `encodeTableSeq` is used when a sequence of unicode characters is encoded as a single code. We use a tree of\n // objects where keys correspond to characters in sequence and leafs are the encoded dbcs values. A special DEF_CHAR key\n // means end of sequence (needed when one sequence is a strict subsequence of another).\n // Objects are kept separately from encodeTable to increase performance.\n this.encodeTableSeq = [];\n\n // Some chars can be decoded, but need not be encoded.\n var skipEncodeChars = {};\n if (codecOptions.encodeSkipVals)\n for (var i = 0; i < codecOptions.encodeSkipVals.length; i++) {\n var val = codecOptions.encodeSkipVals[i];\n if (typeof val === 'number')\n skipEncodeChars[val] = true;\n else\n for (var j = val.from; j <= val.to; j++)\n skipEncodeChars[j] = true;\n }\n \n // Use decode trie to recursively fill out encode tables.\n this._fillEncodeTable(0, 0, skipEncodeChars);\n\n // Add more encoding pairs when needed.\n if (codecOptions.encodeAdd) {\n for (var uChar in codecOptions.encodeAdd)\n if (Object.prototype.hasOwnProperty.call(codecOptions.encodeAdd, uChar))\n this._setEncodeChar(uChar.charCodeAt(0), codecOptions.encodeAdd[uChar]);\n }\n\n this.defCharSB = this.encodeTable[0][iconv.defaultCharSingleByte.charCodeAt(0)];\n if (this.defCharSB === UNASSIGNED) this.defCharSB = this.encodeTable[0]['?'];\n if (this.defCharSB === UNASSIGNED) this.defCharSB = \"?\".charCodeAt(0);\n\n\n // Load & create GB18030 tables when needed.\n if (typeof codecOptions.gb18030 === 'function') {\n this.gb18030 = codecOptions.gb18030(); // Load GB18030 ranges.\n\n // Add GB18030 decode tables.\n var thirdByteNodeIdx = this.decodeTables.length;\n var thirdByteNode = this.decodeTables[thirdByteNodeIdx] = UNASSIGNED_NODE.slice(0);\n\n var fourthByteNodeIdx = this.decodeTables.length;\n var fourthByteNode = this.decodeTables[fourthByteNodeIdx] = UNASSIGNED_NODE.slice(0);\n\n for (var i = 0x81; i <= 0xFE; i++) {\n var secondByteNodeIdx = NODE_START - this.decodeTables[0][i];\n var secondByteNode = this.decodeTables[secondByteNodeIdx];\n for (var j = 0x30; j <= 0x39; j++)\n secondByteNode[j] = NODE_START - thirdByteNodeIdx;\n }\n for (var i = 0x81; i <= 0xFE; i++)\n thirdByteNode[i] = NODE_START - fourthByteNodeIdx;\n for (var i = 0x30; i <= 0x39; i++)\n fourthByteNode[i] = GB18030_CODE\n } \n}\n\nDBCSCodec.prototype.encoder = DBCSEncoder;\nDBCSCodec.prototype.decoder = DBCSDecoder;\n\n// Decoder helpers\nDBCSCodec.prototype._getDecodeTrieNode = function(addr) {\n var bytes = [];\n for (; addr > 0; addr >>= 8)\n bytes.push(addr & 0xFF);\n if (bytes.length == 0)\n bytes.push(0);\n\n var node = this.decodeTables[0];\n for (var i = bytes.length-1; i > 0; i--) { // Traverse nodes deeper into the trie.\n var val = node[bytes[i]];\n\n if (val == UNASSIGNED) { // Create new node.\n node[bytes[i]] = NODE_START - this.decodeTables.length;\n this.decodeTables.push(node = UNASSIGNED_NODE.slice(0));\n }\n else if (val <= NODE_START) { // Existing node.\n node = this.decodeTables[NODE_START - val];\n }\n else\n throw new Error(\"Overwrite byte in \" + this.encodingName + \", addr: \" + addr.toString(16));\n }\n return node;\n}\n\n\nDBCSCodec.prototype._addDecodeChunk = function(chunk) {\n // First element of chunk is the hex mbcs code where we start.\n var curAddr = parseInt(chunk[0], 16);\n\n // Choose the decoding node where we'll write our chars.\n var writeTable = this._getDecodeTrieNode(curAddr);\n curAddr = curAddr & 0xFF;\n\n // Write all other elements of the chunk to the table.\n for (var k = 1; k < chunk.length; k++) {\n var part = chunk[k];\n if (typeof part === \"string\") { // String, write as-is.\n for (var l = 0; l < part.length;) {\n var code = part.charCodeAt(l++);\n if (0xD800 <= code && code < 0xDC00) { // Decode surrogate\n var codeTrail = part.charCodeAt(l++);\n if (0xDC00 <= codeTrail && codeTrail < 0xE000)\n writeTable[curAddr++] = 0x10000 + (code - 0xD800) * 0x400 + (codeTrail - 0xDC00);\n else\n throw new Error(\"Incorrect surrogate pair in \" + this.encodingName + \" at chunk \" + chunk[0]);\n }\n else if (0x0FF0 < code && code <= 0x0FFF) { // Character sequence (our own encoding used)\n var len = 0xFFF - code + 2;\n var seq = [];\n for (var m = 0; m < len; m++)\n seq.push(part.charCodeAt(l++)); // Simple variation: don't support surrogates or subsequences in seq.\n\n writeTable[curAddr++] = SEQ_START - this.decodeTableSeq.length;\n this.decodeTableSeq.push(seq);\n }\n else\n writeTable[curAddr++] = code; // Basic char\n }\n } \n else if (typeof part === \"number\") { // Integer, meaning increasing sequence starting with prev character.\n var charCode = writeTable[curAddr - 1] + 1;\n for (var l = 0; l < part; l++)\n writeTable[curAddr++] = charCode++;\n }\n else\n throw new Error(\"Incorrect type '\" + typeof part + \"' given in \" + this.encodingName + \" at chunk \" + chunk[0]);\n }\n if (curAddr > 0xFF)\n throw new Error(\"Incorrect chunk in \" + this.encodingName + \" at addr \" + chunk[0] + \": too long\" + curAddr);\n}\n\n// Encoder helpers\nDBCSCodec.prototype._getEncodeBucket = function(uCode) {\n var high = uCode >> 8; // This could be > 0xFF because of astral characters.\n if (this.encodeTable[high] === undefined)\n this.encodeTable[high] = UNASSIGNED_NODE.slice(0); // Create bucket on demand.\n return this.encodeTable[high];\n}\n\nDBCSCodec.prototype._setEncodeChar = function(uCode, dbcsCode) {\n var bucket = this._getEncodeBucket(uCode);\n var low = uCode & 0xFF;\n if (bucket[low] <= SEQ_START)\n this.encodeTableSeq[SEQ_START-bucket[low]][DEF_CHAR] = dbcsCode; // There's already a sequence, set a single-char subsequence of it.\n else if (bucket[low] == UNASSIGNED)\n bucket[low] = dbcsCode;\n}\n\nDBCSCodec.prototype._setEncodeSequence = function(seq, dbcsCode) {\n \n // Get the root of character tree according to first character of the sequence.\n var uCode = seq[0];\n var bucket = this._getEncodeBucket(uCode);\n var low = uCode & 0xFF;\n\n var node;\n if (bucket[low] <= SEQ_START) {\n // There's already a sequence with - use it.\n node = this.encodeTableSeq[SEQ_START-bucket[low]];\n }\n else {\n // There was no sequence object - allocate a new one.\n node = {};\n if (bucket[low] !== UNASSIGNED) node[DEF_CHAR] = bucket[low]; // If a char was set before - make it a single-char subsequence.\n bucket[low] = SEQ_START - this.encodeTableSeq.length;\n this.encodeTableSeq.push(node);\n }\n\n // Traverse the character tree, allocating new nodes as needed.\n for (var j = 1; j < seq.length-1; j++) {\n var oldVal = node[uCode];\n if (typeof oldVal === 'object')\n node = oldVal;\n else {\n node = node[uCode] = {}\n if (oldVal !== undefined)\n node[DEF_CHAR] = oldVal\n }\n }\n\n // Set the leaf to given dbcsCode.\n uCode = seq[seq.length-1];\n node[uCode] = dbcsCode;\n}\n\nDBCSCodec.prototype._fillEncodeTable = function(nodeIdx, prefix, skipEncodeChars) {\n var node = this.decodeTables[nodeIdx];\n for (var i = 0; i < 0x100; i++) {\n var uCode = node[i];\n var mbCode = prefix + i;\n if (skipEncodeChars[mbCode])\n continue;\n\n if (uCode >= 0)\n this._setEncodeChar(uCode, mbCode);\n else if (uCode <= NODE_START)\n this._fillEncodeTable(NODE_START - uCode, mbCode << 8, skipEncodeChars);\n else if (uCode <= SEQ_START)\n this._setEncodeSequence(this.decodeTableSeq[SEQ_START - uCode], mbCode);\n }\n}\n\n\n\n// == Encoder ==================================================================\n\nfunction DBCSEncoder(options, codec) {\n // Encoder state\n this.leadSurrogate = -1;\n this.seqObj = undefined;\n \n // Static data\n this.encodeTable = codec.encodeTable;\n this.encodeTableSeq = codec.encodeTableSeq;\n this.defaultCharSingleByte = codec.defCharSB;\n this.gb18030 = codec.gb18030;\n}\n\nDBCSEncoder.prototype.write = function(str) {\n var newBuf = Buffer.alloc(str.length * (this.gb18030 ? 4 : 3)),\n leadSurrogate = this.leadSurrogate,\n seqObj = this.seqObj, nextChar = -1,\n i = 0, j = 0;\n\n while (true) {\n // 0. Get next character.\n if (nextChar === -1) {\n if (i == str.length) break;\n var uCode = str.charCodeAt(i++);\n }\n else {\n var uCode = nextChar;\n nextChar = -1; \n }\n\n // 1. Handle surrogates.\n if (0xD800 <= uCode && uCode < 0xE000) { // Char is one of surrogates.\n if (uCode < 0xDC00) { // We've got lead surrogate.\n if (leadSurrogate === -1) {\n leadSurrogate = uCode;\n continue;\n } else {\n leadSurrogate = uCode;\n // Double lead surrogate found.\n uCode = UNASSIGNED;\n }\n } else { // We've got trail surrogate.\n if (leadSurrogate !== -1) {\n uCode = 0x10000 + (leadSurrogate - 0xD800) * 0x400 + (uCode - 0xDC00);\n leadSurrogate = -1;\n } else {\n // Incomplete surrogate pair - only trail surrogate found.\n uCode = UNASSIGNED;\n }\n \n }\n }\n else if (leadSurrogate !== -1) {\n // Incomplete surrogate pair - only lead surrogate found.\n nextChar = uCode; uCode = UNASSIGNED; // Write an error, then current char.\n leadSurrogate = -1;\n }\n\n // 2. Convert uCode character.\n var dbcsCode = UNASSIGNED;\n if (seqObj !== undefined && uCode != UNASSIGNED) { // We are in the middle of the sequence\n var resCode = seqObj[uCode];\n if (typeof resCode === 'object') { // Sequence continues.\n seqObj = resCode;\n continue;\n\n } else if (typeof resCode == 'number') { // Sequence finished. Write it.\n dbcsCode = resCode;\n\n } else if (resCode == undefined) { // Current character is not part of the sequence.\n\n // Try default character for this sequence\n resCode = seqObj[DEF_CHAR];\n if (resCode !== undefined) {\n dbcsCode = resCode; // Found. Write it.\n nextChar = uCode; // Current character will be written too in the next iteration.\n\n } else {\n // TODO: What if we have no default? (resCode == undefined)\n // Then, we should write first char of the sequence as-is and try the rest recursively.\n // Didn't do it for now because no encoding has this situation yet.\n // Currently, just skip the sequence and write current char.\n }\n }\n seqObj = undefined;\n }\n else if (uCode >= 0) { // Regular character\n var subtable = this.encodeTable[uCode >> 8];\n if (subtable !== undefined)\n dbcsCode = subtable[uCode & 0xFF];\n \n if (dbcsCode <= SEQ_START) { // Sequence start\n seqObj = this.encodeTableSeq[SEQ_START-dbcsCode];\n continue;\n }\n\n if (dbcsCode == UNASSIGNED && this.gb18030) {\n // Use GB18030 algorithm to find character(s) to write.\n var idx = findIdx(this.gb18030.uChars, uCode);\n if (idx != -1) {\n var dbcsCode = this.gb18030.gbChars[idx] + (uCode - this.gb18030.uChars[idx]);\n newBuf[j++] = 0x81 + Math.floor(dbcsCode / 12600); dbcsCode = dbcsCode % 12600;\n newBuf[j++] = 0x30 + Math.floor(dbcsCode / 1260); dbcsCode = dbcsCode % 1260;\n newBuf[j++] = 0x81 + Math.floor(dbcsCode / 10); dbcsCode = dbcsCode % 10;\n newBuf[j++] = 0x30 + dbcsCode;\n continue;\n }\n }\n }\n\n // 3. Write dbcsCode character.\n if (dbcsCode === UNASSIGNED)\n dbcsCode = this.defaultCharSingleByte;\n \n if (dbcsCode < 0x100) {\n newBuf[j++] = dbcsCode;\n }\n else if (dbcsCode < 0x10000) {\n newBuf[j++] = dbcsCode >> 8; // high byte\n newBuf[j++] = dbcsCode & 0xFF; // low byte\n }\n else {\n newBuf[j++] = dbcsCode >> 16;\n newBuf[j++] = (dbcsCode >> 8) & 0xFF;\n newBuf[j++] = dbcsCode & 0xFF;\n }\n }\n\n this.seqObj = seqObj;\n this.leadSurrogate = leadSurrogate;\n return newBuf.slice(0, j);\n}\n\nDBCSEncoder.prototype.end = function() {\n if (this.leadSurrogate === -1 && this.seqObj === undefined)\n return; // All clean. Most often case.\n\n var newBuf = Buffer.alloc(10), j = 0;\n\n if (this.seqObj) { // We're in the sequence.\n var dbcsCode = this.seqObj[DEF_CHAR];\n if (dbcsCode !== undefined) { // Write beginning of the sequence.\n if (dbcsCode < 0x100) {\n newBuf[j++] = dbcsCode;\n }\n else {\n newBuf[j++] = dbcsCode >> 8; // high byte\n newBuf[j++] = dbcsCode & 0xFF; // low byte\n }\n } else {\n // See todo above.\n }\n this.seqObj = undefined;\n }\n\n if (this.leadSurrogate !== -1) {\n // Incomplete surrogate pair - only lead surrogate found.\n newBuf[j++] = this.defaultCharSingleByte;\n this.leadSurrogate = -1;\n }\n \n return newBuf.slice(0, j);\n}\n\n// Export for testing\nDBCSEncoder.prototype.findIdx = findIdx;\n\n\n// == Decoder ==================================================================\n\nfunction DBCSDecoder(options, codec) {\n // Decoder state\n this.nodeIdx = 0;\n this.prevBuf = Buffer.alloc(0);\n\n // Static data\n this.decodeTables = codec.decodeTables;\n this.decodeTableSeq = codec.decodeTableSeq;\n this.defaultCharUnicode = codec.defaultCharUnicode;\n this.gb18030 = codec.gb18030;\n}\n\nDBCSDecoder.prototype.write = function(buf) {\n var newBuf = Buffer.alloc(buf.length*2),\n nodeIdx = this.nodeIdx, \n prevBuf = this.prevBuf, prevBufOffset = this.prevBuf.length,\n seqStart = -this.prevBuf.length, // idx of the start of current parsed sequence.\n uCode;\n\n if (prevBufOffset > 0) // Make prev buf overlap a little to make it easier to slice later.\n prevBuf = Buffer.concat([prevBuf, buf.slice(0, 10)]);\n \n for (var i = 0, j = 0; i < buf.length; i++) {\n var curByte = (i >= 0) ? buf[i] : prevBuf[i + prevBufOffset];\n\n // Lookup in current trie node.\n var uCode = this.decodeTables[nodeIdx][curByte];\n\n if (uCode >= 0) { \n // Normal character, just use it.\n }\n else if (uCode === UNASSIGNED) { // Unknown char.\n // TODO: Callback with seq.\n //var curSeq = (seqStart >= 0) ? buf.slice(seqStart, i+1) : prevBuf.slice(seqStart + prevBufOffset, i+1 + prevBufOffset);\n i = seqStart; // Try to parse again, after skipping first byte of the sequence ('i' will be incremented by 'for' cycle).\n uCode = this.defaultCharUnicode.charCodeAt(0);\n }\n else if (uCode === GB18030_CODE) {\n var curSeq = (seqStart >= 0) ? buf.slice(seqStart, i+1) : prevBuf.slice(seqStart + prevBufOffset, i+1 + prevBufOffset);\n var ptr = (curSeq[0]-0x81)*12600 + (curSeq[1]-0x30)*1260 + (curSeq[2]-0x81)*10 + (curSeq[3]-0x30);\n var idx = findIdx(this.gb18030.gbChars, ptr);\n uCode = this.gb18030.uChars[idx] + ptr - this.gb18030.gbChars[idx];\n }\n else if (uCode <= NODE_START) { // Go to next trie node.\n nodeIdx = NODE_START - uCode;\n continue;\n }\n else if (uCode <= SEQ_START) { // Output a sequence of chars.\n var seq = this.decodeTableSeq[SEQ_START - uCode];\n for (var k = 0; k < seq.length - 1; k++) {\n uCode = seq[k];\n newBuf[j++] = uCode & 0xFF;\n newBuf[j++] = uCode >> 8;\n }\n uCode = seq[seq.length-1];\n }\n else\n throw new Error(\"iconv-lite internal error: invalid decoding table value \" + uCode + \" at \" + nodeIdx + \"/\" + curByte);\n\n // Write the character to buffer, handling higher planes using surrogate pair.\n if (uCode > 0xFFFF) { \n uCode -= 0x10000;\n var uCodeLead = 0xD800 + Math.floor(uCode / 0x400);\n newBuf[j++] = uCodeLead & 0xFF;\n newBuf[j++] = uCodeLead >> 8;\n\n uCode = 0xDC00 + uCode % 0x400;\n }\n newBuf[j++] = uCode & 0xFF;\n newBuf[j++] = uCode >> 8;\n\n // Reset trie node.\n nodeIdx = 0; seqStart = i+1;\n }\n\n this.nodeIdx = nodeIdx;\n this.prevBuf = (seqStart >= 0) ? buf.slice(seqStart) : prevBuf.slice(seqStart + prevBufOffset);\n return newBuf.slice(0, j).toString('ucs2');\n}\n\nDBCSDecoder.prototype.end = function() {\n var ret = '';\n\n // Try to parse all remaining chars.\n while (this.prevBuf.length > 0) {\n // Skip 1 character in the buffer.\n ret += this.defaultCharUnicode;\n var buf = this.prevBuf.slice(1);\n\n // Parse remaining as usual.\n this.prevBuf = Buffer.alloc(0);\n this.nodeIdx = 0;\n if (buf.length > 0)\n ret += this.write(buf);\n }\n\n this.nodeIdx = 0;\n return ret;\n}\n\n// Binary search for GB18030. Returns largest i such that table[i] <= val.\nfunction findIdx(table, val) {\n if (table[0] > val)\n return -1;\n\n var l = 0, r = table.length;\n while (l < r-1) { // always table[l] <= val < table[r]\n var mid = l + Math.floor((r-l+1)/2);\n if (table[mid] <= val)\n l = mid;\n else\n r = mid;\n }\n return l;\n}\n\n", "\"use strict\";\n\n// Description of supported double byte encodings and aliases.\n// Tables are not require()-d until they are needed to speed up library load.\n// require()-s are direct to support Browserify.\n\nmodule.exports = {\n \n // == Japanese/ShiftJIS ====================================================\n // All japanese encodings are based on JIS X set of standards:\n // JIS X 0201 - Single-byte encoding of ASCII + \u00A5 + Kana chars at 0xA1-0xDF.\n // JIS X 0208 - Main set of 6879 characters, placed in 94x94 plane, to be encoded by 2 bytes. \n // Has several variations in 1978, 1983, 1990 and 1997.\n // JIS X 0212 - Supplementary plane of 6067 chars in 94x94 plane. 1990. Effectively dead.\n // JIS X 0213 - Extension and modern replacement of 0208 and 0212. Total chars: 11233.\n // 2 planes, first is superset of 0208, second - revised 0212.\n // Introduced in 2000, revised 2004. Some characters are in Unicode Plane 2 (0x2xxxx)\n\n // Byte encodings are:\n // * Shift_JIS: Compatible with 0201, uses not defined chars in top half as lead bytes for double-byte\n // encoding of 0208. Lead byte ranges: 0x81-0x9F, 0xE0-0xEF; Trail byte ranges: 0x40-0x7E, 0x80-0x9E, 0x9F-0xFC.\n // Windows CP932 is a superset of Shift_JIS. Some companies added more chars, notably KDDI.\n // * EUC-JP: Up to 3 bytes per character. Used mostly on *nixes.\n // 0x00-0x7F - lower part of 0201\n // 0x8E, 0xA1-0xDF - upper part of 0201\n // (0xA1-0xFE)x2 - 0208 plane (94x94).\n // 0x8F, (0xA1-0xFE)x2 - 0212 plane (94x94).\n // * JIS X 208: 7-bit, direct encoding of 0208. Byte ranges: 0x21-0x7E (94 values). Uncommon.\n // Used as-is in ISO2022 family.\n // * ISO2022-JP: Stateful encoding, with escape sequences to switch between ASCII, \n // 0201-1976 Roman, 0208-1978, 0208-1983.\n // * ISO2022-JP-1: Adds esc seq for 0212-1990.\n // * ISO2022-JP-2: Adds esc seq for GB2313-1980, KSX1001-1992, ISO8859-1, ISO8859-7.\n // * ISO2022-JP-3: Adds esc seq for 0201-1976 Kana set, 0213-2000 Planes 1, 2.\n // * ISO2022-JP-2004: Adds 0213-2004 Plane 1.\n //\n // After JIS X 0213 appeared, Shift_JIS-2004, EUC-JISX0213 and ISO2022-JP-2004 followed, with just changing the planes.\n //\n // Overall, it seems that it's a mess :( http://www8.plala.or.jp/tkubota1/unicode-symbols-map2.html\n\n 'shiftjis': {\n type: '_dbcs',\n table: function() { return require('./tables/shiftjis.json') },\n encodeAdd: {'\\u00a5': 0x5C, '\\u203E': 0x7E},\n encodeSkipVals: [{from: 0xED40, to: 0xF940}],\n },\n 'csshiftjis': 'shiftjis',\n 'mskanji': 'shiftjis',\n 'sjis': 'shiftjis',\n 'windows31j': 'shiftjis',\n 'ms31j': 'shiftjis',\n 'xsjis': 'shiftjis',\n 'windows932': 'shiftjis',\n 'ms932': 'shiftjis',\n '932': 'shiftjis',\n 'cp932': 'shiftjis',\n\n 'eucjp': {\n type: '_dbcs',\n table: function() { return require('./tables/eucjp.json') },\n encodeAdd: {'\\u00a5': 0x5C, '\\u203E': 0x7E},\n },\n\n // TODO: KDDI extension to Shift_JIS\n // TODO: IBM CCSID 942 = CP932, but F0-F9 custom chars and other char changes.\n // TODO: IBM CCSID 943 = Shift_JIS = CP932 with original Shift_JIS lower 128 chars.\n\n\n // == Chinese/GBK ==========================================================\n // http://en.wikipedia.org/wiki/GBK\n // We mostly implement W3C recommendation: https://www.w3.org/TR/encoding/#gbk-encoder\n\n // Oldest GB2312 (1981, ~7600 chars) is a subset of CP936\n 'gb2312': 'cp936',\n 'gb231280': 'cp936',\n 'gb23121980': 'cp936',\n 'csgb2312': 'cp936',\n 'csiso58gb231280': 'cp936',\n 'euccn': 'cp936',\n\n // Microsoft's CP936 is a subset and approximation of GBK.\n 'windows936': 'cp936',\n 'ms936': 'cp936',\n '936': 'cp936',\n 'cp936': {\n type: '_dbcs',\n table: function() { return require('./tables/cp936.json') },\n },\n\n // GBK (~22000 chars) is an extension of CP936 that added user-mapped chars and some other.\n 'gbk': {\n type: '_dbcs',\n table: function() { return require('./tables/cp936.json').concat(require('./tables/gbk-added.json')) },\n },\n 'xgbk': 'gbk',\n 'isoir58': 'gbk',\n\n // GB18030 is an algorithmic extension of GBK.\n // Main source: https://www.w3.org/TR/encoding/#gbk-encoder\n // http://icu-project.org/docs/papers/gb18030.html\n // http://source.icu-project.org/repos/icu/data/trunk/charset/data/xml/gb-18030-2000.xml\n // http://www.khngai.com/chinese/charmap/tblgbk.php?page=0\n 'gb18030': {\n type: '_dbcs',\n table: function() { return require('./tables/cp936.json').concat(require('./tables/gbk-added.json')) },\n gb18030: function() { return require('./tables/gb18030-ranges.json') },\n encodeSkipVals: [0x80],\n encodeAdd: {'\u20AC': 0xA2E3},\n },\n\n 'chinese': 'gb18030',\n\n\n // == Korean ===============================================================\n // EUC-KR, KS_C_5601 and KS X 1001 are exactly the same.\n 'windows949': 'cp949',\n 'ms949': 'cp949',\n '949': 'cp949',\n 'cp949': {\n type: '_dbcs',\n table: function() { return require('./tables/cp949.json') },\n },\n\n 'cseuckr': 'cp949',\n 'csksc56011987': 'cp949',\n 'euckr': 'cp949',\n 'isoir149': 'cp949',\n 'korean': 'cp949',\n 'ksc56011987': 'cp949',\n 'ksc56011989': 'cp949',\n 'ksc5601': 'cp949',\n\n\n // == Big5/Taiwan/Hong Kong ================================================\n // There are lots of tables for Big5 and cp950. Please see the following links for history:\n // http://moztw.org/docs/big5/ http://www.haible.de/bruno/charsets/conversion-tables/Big5.html\n // Variations, in roughly number of defined chars:\n // * Windows CP 950: Microsoft variant of Big5. Canonical: http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP950.TXT\n // * Windows CP 951: Microsoft variant of Big5-HKSCS-2001. Seems to be never public. http://me.abelcheung.org/articles/research/what-is-cp951/\n // * Big5-2003 (Taiwan standard) almost superset of cp950.\n // * Unicode-at-on (UAO) / Mozilla 1.8. Falling out of use on the Web. Not supported by other browsers.\n // * Big5-HKSCS (-2001, -2004, -2008). Hong Kong standard. \n // many unicode code points moved from PUA to Supplementary plane (U+2XXXX) over the years.\n // Plus, it has 4 combining sequences.\n // Seems that Mozilla refused to support it for 10 yrs. https://bugzilla.mozilla.org/show_bug.cgi?id=162431 https://bugzilla.mozilla.org/show_bug.cgi?id=310299\n // because big5-hkscs is the only encoding to include astral characters in non-algorithmic way.\n // Implementations are not consistent within browsers; sometimes labeled as just big5.\n // MS Internet Explorer switches from big5 to big5-hkscs when a patch applied.\n // Great discussion & recap of what's going on https://bugzilla.mozilla.org/show_bug.cgi?id=912470#c31\n // In the encoder, it might make sense to support encoding old PUA mappings to Big5 bytes seq-s.\n // Official spec: http://www.ogcio.gov.hk/en/business/tech_promotion/ccli/terms/doc/2003cmp_2008.txt\n // http://www.ogcio.gov.hk/tc/business/tech_promotion/ccli/terms/doc/hkscs-2008-big5-iso.txt\n // \n // Current understanding of how to deal with Big5(-HKSCS) is in the Encoding Standard, http://encoding.spec.whatwg.org/#big5-encoder\n // Unicode mapping (http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/OTHER/BIG5.TXT) is said to be wrong.\n\n 'windows950': 'cp950',\n 'ms950': 'cp950',\n '950': 'cp950',\n 'cp950': {\n type: '_dbcs',\n table: function() { return require('./tables/cp950.json') },\n },\n\n // Big5 has many variations and is an extension of cp950. We use Encoding Standard's as a consensus.\n 'big5': 'big5hkscs',\n 'big5hkscs': {\n type: '_dbcs',\n table: function() { return require('./tables/cp950.json').concat(require('./tables/big5-added.json')) },\n encodeSkipVals: [0xa2cc],\n },\n\n 'cnbig5': 'big5hkscs',\n 'csbig5': 'big5hkscs',\n 'xxbig5': 'big5hkscs',\n};\n", "\"use strict\";\n\n// Update this array if you add/rename/remove files in this directory.\n// We support Browserify by skipping automatic module discovery and requiring modules directly.\nvar modules = [\n require(\"./internal\"),\n require(\"./utf16\"),\n require(\"./utf7\"),\n require(\"./sbcs-codec\"),\n require(\"./sbcs-data\"),\n require(\"./sbcs-data-generated\"),\n require(\"./dbcs-codec\"),\n require(\"./dbcs-data\"),\n];\n\n// Put all encoding/alias/codec definitions to single object and export it. \nfor (var i = 0; i < modules.length; i++) {\n var module = modules[i];\n for (var enc in module)\n if (Object.prototype.hasOwnProperty.call(module, enc))\n exports[enc] = module[enc];\n}\n", "\"use strict\";\n\nvar Buffer = require(\"buffer\").Buffer,\n Transform = require(\"stream\").Transform;\n\n\n// == Exports ==================================================================\nmodule.exports = function(iconv) {\n \n // Additional Public API.\n iconv.encodeStream = function encodeStream(encoding, options) {\n return new IconvLiteEncoderStream(iconv.getEncoder(encoding, options), options);\n }\n\n iconv.decodeStream = function decodeStream(encoding, options) {\n return new IconvLiteDecoderStream(iconv.getDecoder(encoding, options), options);\n }\n\n iconv.supportsStreams = true;\n\n\n // Not published yet.\n iconv.IconvLiteEncoderStream = IconvLiteEncoderStream;\n iconv.IconvLiteDecoderStream = IconvLiteDecoderStream;\n iconv._collect = IconvLiteDecoderStream.prototype.collect;\n};\n\n\n// == Encoder stream =======================================================\nfunction IconvLiteEncoderStream(conv, options) {\n this.conv = conv;\n options = options || {};\n options.decodeStrings = false; // We accept only strings, so we don't need to decode them.\n Transform.call(this, options);\n}\n\nIconvLiteEncoderStream.prototype = Object.create(Transform.prototype, {\n constructor: { value: IconvLiteEncoderStream }\n});\n\nIconvLiteEncoderStream.prototype._transform = function(chunk, encoding, done) {\n if (typeof chunk != 'string')\n return done(new Error(\"Iconv encoding stream needs strings as its input.\"));\n try {\n var res = this.conv.write(chunk);\n if (res && res.length) this.push(res);\n done();\n }\n catch (e) {\n done(e);\n }\n}\n\nIconvLiteEncoderStream.prototype._flush = function(done) {\n try {\n var res = this.conv.end();\n if (res && res.length) this.push(res);\n done();\n }\n catch (e) {\n done(e);\n }\n}\n\nIconvLiteEncoderStream.prototype.collect = function(cb) {\n var chunks = [];\n this.on('error', cb);\n this.on('data', function(chunk) { chunks.push(chunk); });\n this.on('end', function() {\n cb(null, Buffer.concat(chunks));\n });\n return this;\n}\n\n\n// == Decoder stream =======================================================\nfunction IconvLiteDecoderStream(conv, options) {\n this.conv = conv;\n options = options || {};\n options.encoding = this.encoding = 'utf8'; // We output strings.\n Transform.call(this, options);\n}\n\nIconvLiteDecoderStream.prototype = Object.create(Transform.prototype, {\n constructor: { value: IconvLiteDecoderStream }\n});\n\nIconvLiteDecoderStream.prototype._transform = function(chunk, encoding, done) {\n if (!Buffer.isBuffer(chunk))\n return done(new Error(\"Iconv decoding stream needs buffers as its input.\"));\n try {\n var res = this.conv.write(chunk);\n if (res && res.length) this.push(res, this.encoding);\n done();\n }\n catch (e) {\n done(e);\n }\n}\n\nIconvLiteDecoderStream.prototype._flush = function(done) {\n try {\n var res = this.conv.end();\n if (res && res.length) this.push(res, this.encoding); \n done();\n }\n catch (e) {\n done(e);\n }\n}\n\nIconvLiteDecoderStream.prototype.collect = function(cb) {\n var res = '';\n this.on('error', cb);\n this.on('data', function(chunk) { res += chunk; });\n this.on('end', function() {\n cb(null, res);\n });\n return this;\n}\n\n", "\"use strict\";\nvar Buffer = require(\"buffer\").Buffer;\n// Note: not polyfilled with safer-buffer on a purpose, as overrides Buffer\n\n// == Extend Node primitives to use iconv-lite =================================\n\nmodule.exports = function (iconv) {\n var original = undefined; // Place to keep original methods.\n\n // Node authors rewrote Buffer internals to make it compatible with\n // Uint8Array and we cannot patch key functions since then.\n // Note: this does use older Buffer API on a purpose\n iconv.supportsNodeEncodingsExtension = !(Buffer.from || new Buffer(0) instanceof Uint8Array);\n\n iconv.extendNodeEncodings = function extendNodeEncodings() {\n if (original) return;\n original = {};\n\n if (!iconv.supportsNodeEncodingsExtension) {\n console.error(\"ACTION NEEDED: require('iconv-lite').extendNodeEncodings() is not supported in your version of Node\");\n console.error(\"See more info at https://github.com/ashtuchkin/iconv-lite/wiki/Node-v4-compatibility\");\n return;\n }\n\n var nodeNativeEncodings = {\n 'hex': true, 'utf8': true, 'utf-8': true, 'ascii': true, 'binary': true, \n 'base64': true, 'ucs2': true, 'ucs-2': true, 'utf16le': true, 'utf-16le': true,\n };\n\n Buffer.isNativeEncoding = function(enc) {\n return enc && nodeNativeEncodings[enc.toLowerCase()];\n }\n\n // -- SlowBuffer -----------------------------------------------------------\n var SlowBuffer = require('buffer').SlowBuffer;\n\n original.SlowBufferToString = SlowBuffer.prototype.toString;\n SlowBuffer.prototype.toString = function(encoding, start, end) {\n encoding = String(encoding || 'utf8').toLowerCase();\n\n // Use native conversion when possible\n if (Buffer.isNativeEncoding(encoding))\n return original.SlowBufferToString.call(this, encoding, start, end);\n\n // Otherwise, use our decoding method.\n if (typeof start == 'undefined') start = 0;\n if (typeof end == 'undefined') end = this.length;\n return iconv.decode(this.slice(start, end), encoding);\n }\n\n original.SlowBufferWrite = SlowBuffer.prototype.write;\n SlowBuffer.prototype.write = function(string, offset, length, encoding) {\n // Support both (string, offset, length, encoding)\n // and the legacy (string, encoding, offset, length)\n if (isFinite(offset)) {\n if (!isFinite(length)) {\n encoding = length;\n length = undefined;\n }\n } else { // legacy\n var swap = encoding;\n encoding = offset;\n offset = length;\n length = swap;\n }\n\n offset = +offset || 0;\n var remaining = this.length - offset;\n if (!length) {\n length = remaining;\n } else {\n length = +length;\n if (length > remaining) {\n length = remaining;\n }\n }\n encoding = String(encoding || 'utf8').toLowerCase();\n\n // Use native conversion when possible\n if (Buffer.isNativeEncoding(encoding))\n return original.SlowBufferWrite.call(this, string, offset, length, encoding);\n\n if (string.length > 0 && (length < 0 || offset < 0))\n throw new RangeError('attempt to write beyond buffer bounds');\n\n // Otherwise, use our encoding method.\n var buf = iconv.encode(string, encoding);\n if (buf.length < length) length = buf.length;\n buf.copy(this, offset, 0, length);\n return length;\n }\n\n // -- Buffer ---------------------------------------------------------------\n\n original.BufferIsEncoding = Buffer.isEncoding;\n Buffer.isEncoding = function(encoding) {\n return Buffer.isNativeEncoding(encoding) || iconv.encodingExists(encoding);\n }\n\n original.BufferByteLength = Buffer.byteLength;\n Buffer.byteLength = SlowBuffer.byteLength = function(str, encoding) {\n encoding = String(encoding || 'utf8').toLowerCase();\n\n // Use native conversion when possible\n if (Buffer.isNativeEncoding(encoding))\n return original.BufferByteLength.call(this, str, encoding);\n\n // Slow, I know, but we don't have a better way yet.\n return iconv.encode(str, encoding).length;\n }\n\n original.BufferToString = Buffer.prototype.toString;\n Buffer.prototype.toString = function(encoding, start, end) {\n encoding = String(encoding || 'utf8').toLowerCase();\n\n // Use native conversion when possible\n if (Buffer.isNativeEncoding(encoding))\n return original.BufferToString.call(this, encoding, start, end);\n\n // Otherwise, use our decoding method.\n if (typeof start == 'undefined') start = 0;\n if (typeof end == 'undefined') end = this.length;\n return iconv.decode(this.slice(start, end), encoding);\n }\n\n original.BufferWrite = Buffer.prototype.write;\n Buffer.prototype.write = function(string, offset, length, encoding) {\n var _offset = offset, _length = length, _encoding = encoding;\n // Support both (string, offset, length, encoding)\n // and the legacy (string, encoding, offset, length)\n if (isFinite(offset)) {\n if (!isFinite(length)) {\n encoding = length;\n length = undefined;\n }\n } else { // legacy\n var swap = encoding;\n encoding = offset;\n offset = length;\n length = swap;\n }\n\n encoding = String(encoding || 'utf8').toLowerCase();\n\n // Use native conversion when possible\n if (Buffer.isNativeEncoding(encoding))\n return original.BufferWrite.call(this, string, _offset, _length, _encoding);\n\n offset = +offset || 0;\n var remaining = this.length - offset;\n if (!length) {\n length = remaining;\n } else {\n length = +length;\n if (length > remaining) {\n length = remaining;\n }\n }\n\n if (string.length > 0 && (length < 0 || offset < 0))\n throw new RangeError('attempt to write beyond buffer bounds');\n\n // Otherwise, use our encoding method.\n var buf = iconv.encode(string, encoding);\n if (buf.length < length) length = buf.length;\n buf.copy(this, offset, 0, length);\n return length;\n\n // TODO: Set _charsWritten.\n }\n\n\n // -- Readable -------------------------------------------------------------\n if (iconv.supportsStreams) {\n var Readable = require('stream').Readable;\n\n original.ReadableSetEncoding = Readable.prototype.setEncoding;\n Readable.prototype.setEncoding = function setEncoding(enc, options) {\n // Use our own decoder, it has the same interface.\n // We cannot use original function as it doesn't handle BOM-s.\n this._readableState.decoder = iconv.getDecoder(enc, options);\n this._readableState.encoding = enc;\n }\n\n Readable.prototype.collect = iconv._collect;\n }\n }\n\n // Remove iconv-lite Node primitive extensions.\n iconv.undoExtendNodeEncodings = function undoExtendNodeEncodings() {\n if (!iconv.supportsNodeEncodingsExtension)\n return;\n if (!original)\n throw new Error(\"require('iconv-lite').undoExtendNodeEncodings(): Nothing to undo; extendNodeEncodings() is not called.\")\n\n delete Buffer.isNativeEncoding;\n\n var SlowBuffer = require('buffer').SlowBuffer;\n\n SlowBuffer.prototype.toString = original.SlowBufferToString;\n SlowBuffer.prototype.write = original.SlowBufferWrite;\n\n Buffer.isEncoding = original.BufferIsEncoding;\n Buffer.byteLength = original.BufferByteLength;\n Buffer.prototype.toString = original.BufferToString;\n Buffer.prototype.write = original.BufferWrite;\n\n if (iconv.supportsStreams) {\n var Readable = require('stream').Readable;\n\n Readable.prototype.setEncoding = original.ReadableSetEncoding;\n delete Readable.prototype.collect;\n }\n\n original = undefined;\n }\n}\n", "\"use strict\";\n\n// Some environments don't have global Buffer (e.g. React Native).\n// Solution would be installing npm modules \"buffer\" and \"stream\" explicitly.\nvar Buffer = require(\"safer-buffer\").Buffer;\n\nvar bomHandling = require(\"./bom-handling\"),\n iconv = module.exports;\n\n// All codecs and aliases are kept here, keyed by encoding name/alias.\n// They are lazy loaded in `iconv.getCodec` from `encodings/index.js`.\niconv.encodings = null;\n\n// Characters emitted in case of error.\niconv.defaultCharUnicode = '\uFFFD';\niconv.defaultCharSingleByte = '?';\n\n// Public API.\niconv.encode = function encode(str, encoding, options) {\n str = \"\" + (str || \"\"); // Ensure string.\n\n var encoder = iconv.getEncoder(encoding, options);\n\n var res = encoder.write(str);\n var trail = encoder.end();\n \n return (trail && trail.length > 0) ? Buffer.concat([res, trail]) : res;\n}\n\niconv.decode = function decode(buf, encoding, options) {\n if (typeof buf === 'string') {\n if (!iconv.skipDecodeWarning) {\n console.error('Iconv-lite warning: decode()-ing strings is deprecated. Refer to https://github.com/ashtuchkin/iconv-lite/wiki/Use-Buffers-when-decoding');\n iconv.skipDecodeWarning = true;\n }\n\n buf = Buffer.from(\"\" + (buf || \"\"), \"binary\"); // Ensure buffer.\n }\n\n var decoder = iconv.getDecoder(encoding, options);\n\n var res = decoder.write(buf);\n var trail = decoder.end();\n\n return trail ? (res + trail) : res;\n}\n\niconv.encodingExists = function encodingExists(enc) {\n try {\n iconv.getCodec(enc);\n return true;\n } catch (e) {\n return false;\n }\n}\n\n// Legacy aliases to convert functions\niconv.toEncoding = iconv.encode;\niconv.fromEncoding = iconv.decode;\n\n// Search for a codec in iconv.encodings. Cache codec data in iconv._codecDataCache.\niconv._codecDataCache = {};\niconv.getCodec = function getCodec(encoding) {\n if (!iconv.encodings)\n iconv.encodings = require(\"../encodings\"); // Lazy load all encoding definitions.\n \n // Canonicalize encoding name: strip all non-alphanumeric chars and appended year.\n var enc = iconv._canonicalizeEncoding(encoding);\n\n // Traverse iconv.encodings to find actual codec.\n var codecOptions = {};\n while (true) {\n var codec = iconv._codecDataCache[enc];\n if (codec)\n return codec;\n\n var codecDef = iconv.encodings[enc];\n\n switch (typeof codecDef) {\n case \"string\": // Direct alias to other encoding.\n enc = codecDef;\n break;\n\n case \"object\": // Alias with options. Can be layered.\n for (var key in codecDef)\n codecOptions[key] = codecDef[key];\n\n if (!codecOptions.encodingName)\n codecOptions.encodingName = enc;\n \n enc = codecDef.type;\n break;\n\n case \"function\": // Codec itself.\n if (!codecOptions.encodingName)\n codecOptions.encodingName = enc;\n\n // The codec function must load all tables and return object with .encoder and .decoder methods.\n // It'll be called only once (for each different options object).\n codec = new codecDef(codecOptions, iconv);\n\n iconv._codecDataCache[codecOptions.encodingName] = codec; // Save it to be reused later.\n return codec;\n\n default:\n throw new Error(\"Encoding not recognized: '\" + encoding + \"' (searched as: '\"+enc+\"')\");\n }\n }\n}\n\niconv._canonicalizeEncoding = function(encoding) {\n // Canonicalize encoding name: strip all non-alphanumeric chars and appended year.\n return (''+encoding).toLowerCase().replace(/:\\d{4}$|[^0-9a-z]/g, \"\");\n}\n\niconv.getEncoder = function getEncoder(encoding, options) {\n var codec = iconv.getCodec(encoding),\n encoder = new codec.encoder(options, codec);\n\n if (codec.bomAware && options && options.addBOM)\n encoder = new bomHandling.PrependBOM(encoder, options);\n\n return encoder;\n}\n\niconv.getDecoder = function getDecoder(encoding, options) {\n var codec = iconv.getCodec(encoding),\n decoder = new codec.decoder(options, codec);\n\n if (codec.bomAware && !(options && options.stripBOM === false))\n decoder = new bomHandling.StripBOM(decoder, options);\n\n return decoder;\n}\n\n\n// Load extensions in Node. All of them are omitted in Browserify build via 'browser' field in package.json.\nvar nodeVer = typeof process !== 'undefined' && process.versions && process.versions.node;\nif (nodeVer) {\n\n // Load streaming support in Node v0.10+\n var nodeVerArr = nodeVer.split(\".\").map(Number);\n if (nodeVerArr[0] > 0 || nodeVerArr[1] >= 10) {\n require(\"./streams\")(iconv);\n }\n\n // Load Node primitive extensions.\n require(\"./extend-node\")(iconv);\n}\n\nif (\"\u0100\" != \"\\u0100\") {\n console.error(\"iconv-lite warning: javascript files use encoding different from utf-8. See https://github.com/ashtuchkin/iconv-lite/wiki/Javascript-source-file-encodings for more info.\");\n}\n", "/*!\n * ee-first\n * Copyright(c) 2014 Jonathan Ong\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = first\n\n/**\n * Get the first event in a set of event emitters and event pairs.\n *\n * @param {array} stuff\n * @param {function} done\n * @public\n */\n\nfunction first(stuff, done) {\n if (!Array.isArray(stuff))\n throw new TypeError('arg must be an array of [ee, events...] arrays')\n\n var cleanups = []\n\n for (var i = 0; i < stuff.length; i++) {\n var arr = stuff[i]\n\n if (!Array.isArray(arr) || arr.length < 2)\n throw new TypeError('each array member must be [ee, events...]')\n\n var ee = arr[0]\n\n for (var j = 1; j < arr.length; j++) {\n var event = arr[j]\n var fn = listener(event, callback)\n\n // listen to the event\n ee.on(event, fn)\n // push this listener to the list of cleanups\n cleanups.push({\n ee: ee,\n event: event,\n fn: fn,\n })\n }\n }\n\n function callback() {\n cleanup()\n done.apply(null, arguments)\n }\n\n function cleanup() {\n var x\n for (var i = 0; i < cleanups.length; i++) {\n x = cleanups[i]\n x.ee.removeListener(x.event, x.fn)\n }\n }\n\n function thunk(fn) {\n done = fn\n }\n\n thunk.cancel = cleanup\n\n return thunk\n}\n\n/**\n * Create the event listener.\n * @private\n */\n\nfunction listener(event, done) {\n return function onevent(arg1) {\n var args = new Array(arguments.length)\n var ee = this\n var err = event === 'error'\n ? arg1\n : null\n\n // copy args to prevent arguments escaping scope\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i]\n }\n\n done(err, ee, event, args)\n }\n}\n", "/*!\n * on-finished\n * Copyright(c) 2013 Jonathan Ong\n * Copyright(c) 2014 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = onFinished\nmodule.exports.isFinished = isFinished\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar asyncHooks = tryRequireAsyncHooks()\nvar first = require('ee-first')\n\n/**\n * Variables.\n * @private\n */\n\n/* istanbul ignore next */\nvar defer = typeof setImmediate === 'function'\n ? setImmediate\n : function (fn) { process.nextTick(fn.bind.apply(fn, arguments)) }\n\n/**\n * Invoke callback when the response has finished, useful for\n * cleaning up resources afterwards.\n *\n * @param {object} msg\n * @param {function} listener\n * @return {object}\n * @public\n */\n\nfunction onFinished (msg, listener) {\n if (isFinished(msg) !== false) {\n defer(listener, null, msg)\n return msg\n }\n\n // attach the listener to the message\n attachListener(msg, wrap(listener))\n\n return msg\n}\n\n/**\n * Determine if message is already finished.\n *\n * @param {object} msg\n * @return {boolean}\n * @public\n */\n\nfunction isFinished (msg) {\n var socket = msg.socket\n\n if (typeof msg.finished === 'boolean') {\n // OutgoingMessage\n return Boolean(msg.finished || (socket && !socket.writable))\n }\n\n if (typeof msg.complete === 'boolean') {\n // IncomingMessage\n return Boolean(msg.upgrade || !socket || !socket.readable || (msg.complete && !msg.readable))\n }\n\n // don't know\n return undefined\n}\n\n/**\n * Attach a finished listener to the message.\n *\n * @param {object} msg\n * @param {function} callback\n * @private\n */\n\nfunction attachFinishedListener (msg, callback) {\n var eeMsg\n var eeSocket\n var finished = false\n\n function onFinish (error) {\n eeMsg.cancel()\n eeSocket.cancel()\n\n finished = true\n callback(error)\n }\n\n // finished on first message event\n eeMsg = eeSocket = first([[msg, 'end', 'finish']], onFinish)\n\n function onSocket (socket) {\n // remove listener\n msg.removeListener('socket', onSocket)\n\n if (finished) return\n if (eeMsg !== eeSocket) return\n\n // finished on first socket event\n eeSocket = first([[socket, 'error', 'close']], onFinish)\n }\n\n if (msg.socket) {\n // socket already assigned\n onSocket(msg.socket)\n return\n }\n\n // wait for socket to be assigned\n msg.on('socket', onSocket)\n\n if (msg.socket === undefined) {\n // istanbul ignore next: node.js 0.8 patch\n patchAssignSocket(msg, onSocket)\n }\n}\n\n/**\n * Attach the listener to the message.\n *\n * @param {object} msg\n * @return {function}\n * @private\n */\n\nfunction attachListener (msg, listener) {\n var attached = msg.__onFinished\n\n // create a private single listener with queue\n if (!attached || !attached.queue) {\n attached = msg.__onFinished = createListener(msg)\n attachFinishedListener(msg, attached)\n }\n\n attached.queue.push(listener)\n}\n\n/**\n * Create listener on message.\n *\n * @param {object} msg\n * @return {function}\n * @private\n */\n\nfunction createListener (msg) {\n function listener (err) {\n if (msg.__onFinished === listener) msg.__onFinished = null\n if (!listener.queue) return\n\n var queue = listener.queue\n listener.queue = null\n\n for (var i = 0; i < queue.length; i++) {\n queue[i](err, msg)\n }\n }\n\n listener.queue = []\n\n return listener\n}\n\n/**\n * Patch ServerResponse.prototype.assignSocket for node.js 0.8.\n *\n * @param {ServerResponse} res\n * @param {function} callback\n * @private\n */\n\n// istanbul ignore next: node.js 0.8 patch\nfunction patchAssignSocket (res, callback) {\n var assignSocket = res.assignSocket\n\n if (typeof assignSocket !== 'function') return\n\n // res.on('socket', callback) is broken in 0.8\n res.assignSocket = function _assignSocket (socket) {\n assignSocket.call(this, socket)\n callback(socket)\n }\n}\n\n/**\n * Try to require async_hooks\n * @private\n */\n\nfunction tryRequireAsyncHooks () {\n try {\n return require('async_hooks')\n } catch (e) {\n return {}\n }\n}\n\n/**\n * Wrap function with async resource, if possible.\n * AsyncResource.bind static method backported.\n * @private\n */\n\nfunction wrap (fn) {\n var res\n\n // create anonymous resource\n if (asyncHooks.AsyncResource) {\n res = new asyncHooks.AsyncResource(fn.name || 'bound-anonymous-fn')\n }\n\n // incompatible node.js\n if (!res || !res.runInAsyncScope) {\n return fn\n }\n\n // return bound function\n return res.runInAsyncScope.bind(res, fn, null)\n}\n", "/*!\n * body-parser\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar createError = require('http-errors')\nvar destroy = require('destroy')\nvar getBody = require('raw-body')\nvar iconv = require('iconv-lite')\nvar onFinished = require('on-finished')\nvar unpipe = require('unpipe')\nvar zlib = require('zlib')\n\n/**\n * Module exports.\n */\n\nmodule.exports = read\n\n/**\n * Read a request into a buffer and parse.\n *\n * @param {object} req\n * @param {object} res\n * @param {function} next\n * @param {function} parse\n * @param {function} debug\n * @param {object} options\n * @private\n */\n\nfunction read (req, res, next, parse, debug, options) {\n var length\n var opts = options\n var stream\n\n // flag as parsed\n req._body = true\n\n // read options\n var encoding = opts.encoding !== null\n ? opts.encoding\n : null\n var verify = opts.verify\n\n try {\n // get the content stream\n stream = contentstream(req, debug, opts.inflate)\n length = stream.length\n stream.length = undefined\n } catch (err) {\n return next(err)\n }\n\n // set raw-body options\n opts.length = length\n opts.encoding = verify\n ? null\n : encoding\n\n // assert charset is supported\n if (opts.encoding === null && encoding !== null && !iconv.encodingExists(encoding)) {\n return next(createError(415, 'unsupported charset \"' + encoding.toUpperCase() + '\"', {\n charset: encoding.toLowerCase(),\n type: 'charset.unsupported'\n }))\n }\n\n // read body\n debug('read body')\n getBody(stream, opts, function (error, body) {\n if (error) {\n var _error\n\n if (error.type === 'encoding.unsupported') {\n // echo back charset\n _error = createError(415, 'unsupported charset \"' + encoding.toUpperCase() + '\"', {\n charset: encoding.toLowerCase(),\n type: 'charset.unsupported'\n })\n } else {\n // set status code on error\n _error = createError(400, error)\n }\n\n // unpipe from stream and destroy\n if (stream !== req) {\n unpipe(req)\n destroy(stream, true)\n }\n\n // read off entire request\n dump(req, function onfinished () {\n next(createError(400, _error))\n })\n return\n }\n\n // verify\n if (verify) {\n try {\n debug('verify body')\n verify(req, res, body, encoding)\n } catch (err) {\n next(createError(403, err, {\n body: body,\n type: err.type || 'entity.verify.failed'\n }))\n return\n }\n }\n\n // parse\n var str = body\n try {\n debug('parse body')\n str = typeof body !== 'string' && encoding !== null\n ? iconv.decode(body, encoding)\n : body\n req.body = parse(str)\n } catch (err) {\n next(createError(400, err, {\n body: str,\n type: err.type || 'entity.parse.failed'\n }))\n return\n }\n\n next()\n })\n}\n\n/**\n * Get the content stream of the request.\n *\n * @param {object} req\n * @param {function} debug\n * @param {boolean} [inflate=true]\n * @return {object}\n * @api private\n */\n\nfunction contentstream (req, debug, inflate) {\n var encoding = (req.headers['content-encoding'] || 'identity').toLowerCase()\n var length = req.headers['content-length']\n var stream\n\n debug('content-encoding \"%s\"', encoding)\n\n if (inflate === false && encoding !== 'identity') {\n throw createError(415, 'content encoding unsupported', {\n encoding: encoding,\n type: 'encoding.unsupported'\n })\n }\n\n switch (encoding) {\n case 'deflate':\n stream = zlib.createInflate()\n debug('inflate body')\n req.pipe(stream)\n break\n case 'gzip':\n stream = zlib.createGunzip()\n debug('gunzip body')\n req.pipe(stream)\n break\n case 'identity':\n stream = req\n stream.length = length\n break\n default:\n throw createError(415, 'unsupported content encoding \"' + encoding + '\"', {\n encoding: encoding,\n type: 'encoding.unsupported'\n })\n }\n\n return stream\n}\n\n/**\n * Dump the contents of a request.\n *\n * @param {object} req\n * @param {function} callback\n * @api private\n */\n\nfunction dump (req, callback) {\n if (onFinished.isFinished(req)) {\n callback(null)\n } else {\n onFinished(req, callback)\n req.resume()\n }\n}\n", "/*!\n * media-typer\n * Copyright(c) 2014 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n/**\n * RegExp to match *( \";\" parameter ) in RFC 2616 sec 3.7\n *\n * parameter = token \"=\" ( token | quoted-string )\n * token = 1*<any CHAR except CTLs or separators>\n * separators = \"(\" | \")\" | \"<\" | \">\" | \"@\"\n * | \",\" | \";\" | \":\" | \"\\\" | <\">\n * | \"/\" | \"[\" | \"]\" | \"?\" | \"=\"\n * | \"{\" | \"}\" | SP | HT\n * quoted-string = ( <\"> *(qdtext | quoted-pair ) <\"> )\n * qdtext = <any TEXT except <\">>\n * quoted-pair = \"\\\" CHAR\n * CHAR = <any US-ASCII character (octets 0 - 127)>\n * TEXT = <any OCTET except CTLs, but including LWS>\n * LWS = [CRLF] 1*( SP | HT )\n * CRLF = CR LF\n * CR = <US-ASCII CR, carriage return (13)>\n * LF = <US-ASCII LF, linefeed (10)>\n * SP = <US-ASCII SP, space (32)>\n * SHT = <US-ASCII HT, horizontal-tab (9)>\n * CTL = <any US-ASCII control character (octets 0 - 31) and DEL (127)>\n * OCTET = <any 8-bit sequence of data>\n */\nvar paramRegExp = /; *([!#$%&'\\*\\+\\-\\.0-9A-Z\\^_`a-z\\|~]+) *= *(\"(?:[ !\\u0023-\\u005b\\u005d-\\u007e\\u0080-\\u00ff]|\\\\[\\u0020-\\u007e])*\"|[!#$%&'\\*\\+\\-\\.0-9A-Z\\^_`a-z\\|~]+) */g;\nvar textRegExp = /^[\\u0020-\\u007e\\u0080-\\u00ff]+$/\nvar tokenRegExp = /^[!#$%&'\\*\\+\\-\\.0-9A-Z\\^_`a-z\\|~]+$/\n\n/**\n * RegExp to match quoted-pair in RFC 2616\n *\n * quoted-pair = \"\\\" CHAR\n * CHAR = <any US-ASCII character (octets 0 - 127)>\n */\nvar qescRegExp = /\\\\([\\u0000-\\u007f])/g;\n\n/**\n * RegExp to match chars that must be quoted-pair in RFC 2616\n */\nvar quoteRegExp = /([\\\\\"])/g;\n\n/**\n * RegExp to match type in RFC 6838\n *\n * type-name = restricted-name\n * subtype-name = restricted-name\n * restricted-name = restricted-name-first *126restricted-name-chars\n * restricted-name-first = ALPHA / DIGIT\n * restricted-name-chars = ALPHA / DIGIT / \"!\" / \"#\" /\n * \"$\" / \"&\" / \"-\" / \"^\" / \"_\"\n * restricted-name-chars =/ \".\" ; Characters before first dot always\n * ; specify a facet name\n * restricted-name-chars =/ \"+\" ; Characters after last plus always\n * ; specify a structured syntax suffix\n * ALPHA = %x41-5A / %x61-7A ; A-Z / a-z\n * DIGIT = %x30-39 ; 0-9\n */\nvar subtypeNameRegExp = /^[A-Za-z0-9][A-Za-z0-9!#$&^_.-]{0,126}$/\nvar typeNameRegExp = /^[A-Za-z0-9][A-Za-z0-9!#$&^_-]{0,126}$/\nvar typeRegExp = /^ *([A-Za-z0-9][A-Za-z0-9!#$&^_-]{0,126})\\/([A-Za-z0-9][A-Za-z0-9!#$&^_.+-]{0,126}) *$/;\n\n/**\n * Module exports.\n */\n\nexports.format = format\nexports.parse = parse\n\n/**\n * Format object to media type.\n *\n * @param {object} obj\n * @return {string}\n * @api public\n */\n\nfunction format(obj) {\n if (!obj || typeof obj !== 'object') {\n throw new TypeError('argument obj is required')\n }\n\n var parameters = obj.parameters\n var subtype = obj.subtype\n var suffix = obj.suffix\n var type = obj.type\n\n if (!type || !typeNameRegExp.test(type)) {\n throw new TypeError('invalid type')\n }\n\n if (!subtype || !subtypeNameRegExp.test(subtype)) {\n throw new TypeError('invalid subtype')\n }\n\n // format as type/subtype\n var string = type + '/' + subtype\n\n // append +suffix\n if (suffix) {\n if (!typeNameRegExp.test(suffix)) {\n throw new TypeError('invalid suffix')\n }\n\n string += '+' + suffix\n }\n\n // append parameters\n if (parameters && typeof parameters === 'object') {\n var param\n var params = Object.keys(parameters).sort()\n\n for (var i = 0; i < params.length; i++) {\n param = params[i]\n\n if (!tokenRegExp.test(param)) {\n throw new TypeError('invalid parameter name')\n }\n\n string += '; ' + param + '=' + qstring(parameters[param])\n }\n }\n\n return string\n}\n\n/**\n * Parse media type to object.\n *\n * @param {string|object} string\n * @return {Object}\n * @api public\n */\n\nfunction parse(string) {\n if (!string) {\n throw new TypeError('argument string is required')\n }\n\n // support req/res-like objects as argument\n if (typeof string === 'object') {\n string = getcontenttype(string)\n }\n\n if (typeof string !== 'string') {\n throw new TypeError('argument string is required to be a string')\n }\n\n var index = string.indexOf(';')\n var type = index !== -1\n ? string.substr(0, index)\n : string\n\n var key\n var match\n var obj = splitType(type)\n var params = {}\n var value\n\n paramRegExp.lastIndex = index\n\n while (match = paramRegExp.exec(string)) {\n if (match.index !== index) {\n throw new TypeError('invalid parameter format')\n }\n\n index += match[0].length\n key = match[1].toLowerCase()\n value = match[2]\n\n if (value[0] === '\"') {\n // remove quotes and escapes\n value = value\n .substr(1, value.length - 2)\n .replace(qescRegExp, '$1')\n }\n\n params[key] = value\n }\n\n if (index !== -1 && index !== string.length) {\n throw new TypeError('invalid parameter format')\n }\n\n obj.parameters = params\n\n return obj\n}\n\n/**\n * Get content-type from req/res objects.\n *\n * @param {object}\n * @return {Object}\n * @api private\n */\n\nfunction getcontenttype(obj) {\n if (typeof obj.getHeader === 'function') {\n // res-like\n return obj.getHeader('content-type')\n }\n\n if (typeof obj.headers === 'object') {\n // req-like\n return obj.headers && obj.headers['content-type']\n }\n}\n\n/**\n * Quote a string if necessary.\n *\n * @param {string} val\n * @return {string}\n * @api private\n */\n\nfunction qstring(val) {\n var str = String(val)\n\n // no need to quote tokens\n if (tokenRegExp.test(str)) {\n return str\n }\n\n if (str.length > 0 && !textRegExp.test(str)) {\n throw new TypeError('invalid parameter value')\n }\n\n return '\"' + str.replace(quoteRegExp, '\\\\$1') + '\"'\n}\n\n/**\n * Simply \"type/subtype+siffx\" into parts.\n *\n * @param {string} string\n * @return {Object}\n * @api private\n */\n\nfunction splitType(string) {\n var match = typeRegExp.exec(string.toLowerCase())\n\n if (!match) {\n throw new TypeError('invalid media type')\n }\n\n var type = match[1]\n var subtype = match[2]\n var suffix\n\n // suffix after last +\n var index = subtype.lastIndexOf('+')\n if (index !== -1) {\n suffix = subtype.substr(index + 1)\n subtype = subtype.substr(0, index)\n }\n\n var obj = {\n type: type,\n subtype: subtype,\n suffix: suffix\n }\n\n return obj\n}\n", "/*!\n * mime-db\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015-2022 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n/**\n * Module exports.\n */\n\nmodule.exports = require('./db.json')\n", "/*!\n * mime-types\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar db = require('mime-db')\nvar extname = require('path').extname\n\n/**\n * Module variables.\n * @private\n */\n\nvar EXTRACT_TYPE_REGEXP = /^\\s*([^;\\s]*)(?:;|\\s|$)/\nvar TEXT_TYPE_REGEXP = /^text\\//i\n\n/**\n * Module exports.\n * @public\n */\n\nexports.charset = charset\nexports.charsets = { lookup: charset }\nexports.contentType = contentType\nexports.extension = extension\nexports.extensions = Object.create(null)\nexports.lookup = lookup\nexports.types = Object.create(null)\n\n// Populate the extensions/types maps\npopulateMaps(exports.extensions, exports.types)\n\n/**\n * Get the default charset for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction charset (type) {\n if (!type || typeof type !== 'string') {\n return false\n }\n\n // TODO: use media-typer\n var match = EXTRACT_TYPE_REGEXP.exec(type)\n var mime = match && db[match[1].toLowerCase()]\n\n if (mime && mime.charset) {\n return mime.charset\n }\n\n // default text/* to utf-8\n if (match && TEXT_TYPE_REGEXP.test(match[1])) {\n return 'UTF-8'\n }\n\n return false\n}\n\n/**\n * Create a full Content-Type header given a MIME type or extension.\n *\n * @param {string} str\n * @return {boolean|string}\n */\n\nfunction contentType (str) {\n // TODO: should this even be in this module?\n if (!str || typeof str !== 'string') {\n return false\n }\n\n var mime = str.indexOf('/') === -1\n ? exports.lookup(str)\n : str\n\n if (!mime) {\n return false\n }\n\n // TODO: use content-type or other module\n if (mime.indexOf('charset') === -1) {\n var charset = exports.charset(mime)\n if (charset) mime += '; charset=' + charset.toLowerCase()\n }\n\n return mime\n}\n\n/**\n * Get the default extension for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction extension (type) {\n if (!type || typeof type !== 'string') {\n return false\n }\n\n // TODO: use media-typer\n var match = EXTRACT_TYPE_REGEXP.exec(type)\n\n // get extensions\n var exts = match && exports.extensions[match[1].toLowerCase()]\n\n if (!exts || !exts.length) {\n return false\n }\n\n return exts[0]\n}\n\n/**\n * Lookup the MIME type for a file path/extension.\n *\n * @param {string} path\n * @return {boolean|string}\n */\n\nfunction lookup (path) {\n if (!path || typeof path !== 'string') {\n return false\n }\n\n // get the extension (\"ext\" or \".ext\" or full path)\n var extension = extname('x.' + path)\n .toLowerCase()\n .substr(1)\n\n if (!extension) {\n return false\n }\n\n return exports.types[extension] || false\n}\n\n/**\n * Populate the extensions and types maps.\n * @private\n */\n\nfunction populateMaps (extensions, types) {\n // source preference (least -> most)\n var preference = ['nginx', 'apache', undefined, 'iana']\n\n Object.keys(db).forEach(function forEachMimeType (type) {\n var mime = db[type]\n var exts = mime.extensions\n\n if (!exts || !exts.length) {\n return\n }\n\n // mime -> extensions\n extensions[type] = exts\n\n // extension -> mime\n for (var i = 0; i < exts.length; i++) {\n var extension = exts[i]\n\n if (types[extension]) {\n var from = preference.indexOf(db[types[extension]].source)\n var to = preference.indexOf(mime.source)\n\n if (types[extension] !== 'application/octet-stream' &&\n (from > to || (from === to && types[extension].substr(0, 12) === 'application/'))) {\n // skip the remapping\n continue\n }\n }\n\n // set the extension -> mime\n types[extension] = type\n }\n })\n}\n", "/*!\n * type-is\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar typer = require('media-typer')\nvar mime = require('mime-types')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = typeofrequest\nmodule.exports.is = typeis\nmodule.exports.hasBody = hasbody\nmodule.exports.normalize = normalize\nmodule.exports.match = mimeMatch\n\n/**\n * Compare a `value` content-type with `types`.\n * Each `type` can be an extension like `html`,\n * a special shortcut like `multipart` or `urlencoded`,\n * or a mime type.\n *\n * If no types match, `false` is returned.\n * Otherwise, the first `type` that matches is returned.\n *\n * @param {String} value\n * @param {Array} types\n * @public\n */\n\nfunction typeis (value, types_) {\n var i\n var types = types_\n\n // remove parameters and normalize\n var val = tryNormalizeType(value)\n\n // no type or invalid\n if (!val) {\n return false\n }\n\n // support flattened arguments\n if (types && !Array.isArray(types)) {\n types = new Array(arguments.length - 1)\n for (i = 0; i < types.length; i++) {\n types[i] = arguments[i + 1]\n }\n }\n\n // no types, return the content type\n if (!types || !types.length) {\n return val\n }\n\n var type\n for (i = 0; i < types.length; i++) {\n if (mimeMatch(normalize(type = types[i]), val)) {\n return type[0] === '+' || type.indexOf('*') !== -1\n ? val\n : type\n }\n }\n\n // no matches\n return false\n}\n\n/**\n * Check if a request has a request body.\n * A request with a body __must__ either have `transfer-encoding`\n * or `content-length` headers set.\n * http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.3\n *\n * @param {Object} request\n * @return {Boolean}\n * @public\n */\n\nfunction hasbody (req) {\n return req.headers['transfer-encoding'] !== undefined ||\n !isNaN(req.headers['content-length'])\n}\n\n/**\n * Check if the incoming request contains the \"Content-Type\"\n * header field, and it contains any of the give mime `type`s.\n * If there is no request body, `null` is returned.\n * If there is no content type, `false` is returned.\n * Otherwise, it returns the first `type` that matches.\n *\n * Examples:\n *\n * // With Content-Type: text/html; charset=utf-8\n * this.is('html'); // => 'html'\n * this.is('text/html'); // => 'text/html'\n * this.is('text/*', 'application/json'); // => 'text/html'\n *\n * // When Content-Type is application/json\n * this.is('json', 'urlencoded'); // => 'json'\n * this.is('application/json'); // => 'application/json'\n * this.is('html', 'application/*'); // => 'application/json'\n *\n * this.is('html'); // => false\n *\n * @param {String|Array} types...\n * @return {String|false|null}\n * @public\n */\n\nfunction typeofrequest (req, types_) {\n var types = types_\n\n // no body\n if (!hasbody(req)) {\n return null\n }\n\n // support flattened arguments\n if (arguments.length > 2) {\n types = new Array(arguments.length - 1)\n for (var i = 0; i < types.length; i++) {\n types[i] = arguments[i + 1]\n }\n }\n\n // request content type\n var value = req.headers['content-type']\n\n return typeis(value, types)\n}\n\n/**\n * Normalize a mime type.\n * If it's a shorthand, expand it to a valid mime type.\n *\n * In general, you probably want:\n *\n * var type = is(req, ['urlencoded', 'json', 'multipart']);\n *\n * Then use the appropriate body parsers.\n * These three are the most common request body types\n * and are thus ensured to work.\n *\n * @param {String} type\n * @private\n */\n\nfunction normalize (type) {\n if (typeof type !== 'string') {\n // invalid type\n return false\n }\n\n switch (type) {\n case 'urlencoded':\n return 'application/x-www-form-urlencoded'\n case 'multipart':\n return 'multipart/*'\n }\n\n if (type[0] === '+') {\n // \"+json\" -> \"*/*+json\" expando\n return '*/*' + type\n }\n\n return type.indexOf('/') === -1\n ? mime.lookup(type)\n : type\n}\n\n/**\n * Check if `expected` mime type\n * matches `actual` mime type with\n * wildcard and +suffix support.\n *\n * @param {String} expected\n * @param {String} actual\n * @return {Boolean}\n * @private\n */\n\nfunction mimeMatch (expected, actual) {\n // invalid type\n if (expected === false) {\n return false\n }\n\n // split types\n var actualParts = actual.split('/')\n var expectedParts = expected.split('/')\n\n // invalid format\n if (actualParts.length !== 2 || expectedParts.length !== 2) {\n return false\n }\n\n // validate type\n if (expectedParts[0] !== '*' && expectedParts[0] !== actualParts[0]) {\n return false\n }\n\n // validate suffix wildcard\n if (expectedParts[1].substr(0, 2) === '*+') {\n return expectedParts[1].length <= actualParts[1].length + 1 &&\n expectedParts[1].substr(1) === actualParts[1].substr(1 - expectedParts[1].length)\n }\n\n // validate subtype\n if (expectedParts[1] !== '*' && expectedParts[1] !== actualParts[1]) {\n return false\n }\n\n return true\n}\n\n/**\n * Normalize a type and remove parameters.\n *\n * @param {string} value\n * @return {string}\n * @private\n */\n\nfunction normalizeType (value) {\n // parse the type\n var type = typer.parse(value)\n\n // remove the parameters\n type.parameters = undefined\n\n // reformat it\n return typer.format(type)\n}\n\n/**\n * Try to normalize a type and remove parameters.\n *\n * @param {string} value\n * @return {string}\n * @private\n */\n\nfunction tryNormalizeType (value) {\n if (!value) {\n return null\n }\n\n try {\n return normalizeType(value)\n } catch (err) {\n return null\n }\n}\n", "/*!\n * body-parser\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar bytes = require('bytes')\nvar contentType = require('content-type')\nvar createError = require('http-errors')\nvar debug = require('debug')('body-parser:json')\nvar read = require('../read')\nvar typeis = require('type-is')\n\n/**\n * Module exports.\n */\n\nmodule.exports = json\n\n/**\n * RegExp to match the first non-space in a string.\n *\n * Allowed whitespace is defined in RFC 7159:\n *\n * ws = *(\n * %x20 / ; Space\n * %x09 / ; Horizontal tab\n * %x0A / ; Line feed or New line\n * %x0D ) ; Carriage return\n */\n\nvar FIRST_CHAR_REGEXP = /^[\\x20\\x09\\x0a\\x0d]*([^\\x20\\x09\\x0a\\x0d])/ // eslint-disable-line no-control-regex\n\n/**\n * Create a middleware to parse JSON bodies.\n *\n * @param {object} [options]\n * @return {function}\n * @public\n */\n\nfunction json (options) {\n var opts = options || {}\n\n var limit = typeof opts.limit !== 'number'\n ? bytes.parse(opts.limit || '100kb')\n : opts.limit\n var inflate = opts.inflate !== false\n var reviver = opts.reviver\n var strict = opts.strict !== false\n var type = opts.type || 'application/json'\n var verify = opts.verify || false\n\n if (verify !== false && typeof verify !== 'function') {\n throw new TypeError('option verify must be function')\n }\n\n // create the appropriate type checking function\n var shouldParse = typeof type !== 'function'\n ? typeChecker(type)\n : type\n\n function parse (body) {\n if (body.length === 0) {\n // special-case empty json body, as it's a common client-side mistake\n // TODO: maybe make this configurable or part of \"strict\" option\n return {}\n }\n\n if (strict) {\n var first = firstchar(body)\n\n if (first !== '{' && first !== '[') {\n debug('strict violation')\n throw createStrictSyntaxError(body, first)\n }\n }\n\n try {\n debug('parse json')\n return JSON.parse(body, reviver)\n } catch (e) {\n throw normalizeJsonSyntaxError(e, {\n message: e.message,\n stack: e.stack\n })\n }\n }\n\n return function jsonParser (req, res, next) {\n if (req._body) {\n debug('body already parsed')\n next()\n return\n }\n\n req.body = req.body || {}\n\n // skip requests without bodies\n if (!typeis.hasBody(req)) {\n debug('skip empty body')\n next()\n return\n }\n\n debug('content-type %j', req.headers['content-type'])\n\n // determine if request should be parsed\n if (!shouldParse(req)) {\n debug('skip parsing')\n next()\n return\n }\n\n // assert charset per RFC 7159 sec 8.1\n var charset = getCharset(req) || 'utf-8'\n if (charset.slice(0, 4) !== 'utf-') {\n debug('invalid charset')\n next(createError(415, 'unsupported charset \"' + charset.toUpperCase() + '\"', {\n charset: charset,\n type: 'charset.unsupported'\n }))\n return\n }\n\n // read\n read(req, res, next, parse, debug, {\n encoding: charset,\n inflate: inflate,\n limit: limit,\n verify: verify\n })\n }\n}\n\n/**\n * Create strict violation syntax error matching native error.\n *\n * @param {string} str\n * @param {string} char\n * @return {Error}\n * @private\n */\n\nfunction createStrictSyntaxError (str, char) {\n var index = str.indexOf(char)\n var partial = index !== -1\n ? str.substring(0, index) + '#'\n : ''\n\n try {\n JSON.parse(partial); /* istanbul ignore next */ throw new SyntaxError('strict violation')\n } catch (e) {\n return normalizeJsonSyntaxError(e, {\n message: e.message.replace('#', char),\n stack: e.stack\n })\n }\n}\n\n/**\n * Get the first non-whitespace character in a string.\n *\n * @param {string} str\n * @return {function}\n * @private\n */\n\nfunction firstchar (str) {\n var match = FIRST_CHAR_REGEXP.exec(str)\n\n return match\n ? match[1]\n : undefined\n}\n\n/**\n * Get the charset of a request.\n *\n * @param {object} req\n * @api private\n */\n\nfunction getCharset (req) {\n try {\n return (contentType.parse(req).parameters.charset || '').toLowerCase()\n } catch (e) {\n return undefined\n }\n}\n\n/**\n * Normalize a SyntaxError for JSON.parse.\n *\n * @param {SyntaxError} error\n * @param {object} obj\n * @return {SyntaxError}\n */\n\nfunction normalizeJsonSyntaxError (error, obj) {\n var keys = Object.getOwnPropertyNames(error)\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i]\n if (key !== 'stack' && key !== 'message') {\n delete error[key]\n }\n }\n\n // replace stack before message for Node.js 0.10 and below\n error.stack = obj.stack.replace(error.message, obj.message)\n error.message = obj.message\n\n return error\n}\n\n/**\n * Get the simple type checker.\n *\n * @param {string} type\n * @return {function}\n */\n\nfunction typeChecker (type) {\n return function checkType (req) {\n return Boolean(typeis(req, type))\n }\n}\n", "/*!\n * body-parser\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n */\n\nvar bytes = require('bytes')\nvar debug = require('debug')('body-parser:raw')\nvar read = require('../read')\nvar typeis = require('type-is')\n\n/**\n * Module exports.\n */\n\nmodule.exports = raw\n\n/**\n * Create a middleware to parse raw bodies.\n *\n * @param {object} [options]\n * @return {function}\n * @api public\n */\n\nfunction raw (options) {\n var opts = options || {}\n\n var inflate = opts.inflate !== false\n var limit = typeof opts.limit !== 'number'\n ? bytes.parse(opts.limit || '100kb')\n : opts.limit\n var type = opts.type || 'application/octet-stream'\n var verify = opts.verify || false\n\n if (verify !== false && typeof verify !== 'function') {\n throw new TypeError('option verify must be function')\n }\n\n // create the appropriate type checking function\n var shouldParse = typeof type !== 'function'\n ? typeChecker(type)\n : type\n\n function parse (buf) {\n return buf\n }\n\n return function rawParser (req, res, next) {\n if (req._body) {\n debug('body already parsed')\n next()\n return\n }\n\n req.body = req.body || {}\n\n // skip requests without bodies\n if (!typeis.hasBody(req)) {\n debug('skip empty body')\n next()\n return\n }\n\n debug('content-type %j', req.headers['content-type'])\n\n // determine if request should be parsed\n if (!shouldParse(req)) {\n debug('skip parsing')\n next()\n return\n }\n\n // read\n read(req, res, next, parse, debug, {\n encoding: null,\n inflate: inflate,\n limit: limit,\n verify: verify\n })\n }\n}\n\n/**\n * Get the simple type checker.\n *\n * @param {string} type\n * @return {function}\n */\n\nfunction typeChecker (type) {\n return function checkType (req) {\n return Boolean(typeis(req, type))\n }\n}\n", "/*!\n * body-parser\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n */\n\nvar bytes = require('bytes')\nvar contentType = require('content-type')\nvar debug = require('debug')('body-parser:text')\nvar read = require('../read')\nvar typeis = require('type-is')\n\n/**\n * Module exports.\n */\n\nmodule.exports = text\n\n/**\n * Create a middleware to parse text bodies.\n *\n * @param {object} [options]\n * @return {function}\n * @api public\n */\n\nfunction text (options) {\n var opts = options || {}\n\n var defaultCharset = opts.defaultCharset || 'utf-8'\n var inflate = opts.inflate !== false\n var limit = typeof opts.limit !== 'number'\n ? bytes.parse(opts.limit || '100kb')\n : opts.limit\n var type = opts.type || 'text/plain'\n var verify = opts.verify || false\n\n if (verify !== false && typeof verify !== 'function') {\n throw new TypeError('option verify must be function')\n }\n\n // create the appropriate type checking function\n var shouldParse = typeof type !== 'function'\n ? typeChecker(type)\n : type\n\n function parse (buf) {\n return buf\n }\n\n return function textParser (req, res, next) {\n if (req._body) {\n debug('body already parsed')\n next()\n return\n }\n\n req.body = req.body || {}\n\n // skip requests without bodies\n if (!typeis.hasBody(req)) {\n debug('skip empty body')\n next()\n return\n }\n\n debug('content-type %j', req.headers['content-type'])\n\n // determine if request should be parsed\n if (!shouldParse(req)) {\n debug('skip parsing')\n next()\n return\n }\n\n // get charset\n var charset = getCharset(req) || defaultCharset\n\n // read\n read(req, res, next, parse, debug, {\n encoding: charset,\n inflate: inflate,\n limit: limit,\n verify: verify\n })\n }\n}\n\n/**\n * Get the charset of a request.\n *\n * @param {object} req\n * @api private\n */\n\nfunction getCharset (req) {\n try {\n return (contentType.parse(req).parameters.charset || '').toLowerCase()\n } catch (e) {\n return undefined\n }\n}\n\n/**\n * Get the simple type checker.\n *\n * @param {string} type\n * @return {function}\n */\n\nfunction typeChecker (type) {\n return function checkType (req) {\n return Boolean(typeis(req, type))\n }\n}\n", "'use strict';\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n", "'use strict';\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = require('./shams');\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n", "'use strict';\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slice.call(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n args.concat(slice.call(arguments))\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n } else {\n return target.apply(\n that,\n args.concat(slice.call(arguments))\n );\n }\n };\n\n var boundLength = Math.max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs.push('$' + i);\n }\n\n bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n", "'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = Function.prototype.bind || implementation;\n", "'use strict';\n\nvar bind = require('function-bind');\n\nmodule.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);\n", "'use strict';\n\nvar undefined;\n\nvar $SyntaxError = SyntaxError;\nvar $Function = Function;\nvar $TypeError = TypeError;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = require('has-symbols')();\n\nvar getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%BigInt64Array%': typeof BigInt64Array === 'undefined' ? undefined : BigInt64Array,\n\t'%BigUint64Array%': typeof BigUint64Array === 'undefined' ? undefined : BigUint64Array,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': Object,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': RangeError,\n\t'%ReferenceError%': ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet\n};\n\ntry {\n\tnull.error; // eslint-disable-line no-unused-expressions\n} catch (e) {\n\t// https://github.com/tc39/proposal-shadowrealm/pull/384#issuecomment-1364264229\n\tvar errorProto = getProto(getProto(e));\n\tINTRINSICS['%Error.prototype%'] = errorProto;\n}\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = require('function-bind');\nvar hasOwn = require('has');\nvar $concat = bind.call(Function.call, Array.prototype.concat);\nvar $spliceApply = bind.call(Function.apply, Array.prototype.splice);\nvar $replace = bind.call(Function.call, String.prototype.replace);\nvar $strSlice = bind.call(Function.call, String.prototype.slice);\nvar $exec = bind.call(Function.call, RegExp.prototype.exec);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tif ($exec(/^%?[^%]*%?$/, name) === null) {\n\t\tthrow new $SyntaxError('`%` may not be present anywhere but at the beginning and end of the intrinsic name');\n\t}\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n", "'use strict';\n\nvar bind = require('function-bind');\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\nvar $max = GetIntrinsic('%Math.max%');\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\nmodule.exports = function callBind(originalFunction) {\n\tvar func = $reflectApply(bind, $call, arguments);\n\tif ($gOPD && $defineProperty) {\n\t\tvar desc = $gOPD(func, 'length');\n\t\tif (desc.configurable) {\n\t\t\t// original length, plus the receiver, minus any additional arguments (after the receiver)\n\t\t\t$defineProperty(\n\t\t\t\tfunc,\n\t\t\t\t'length',\n\t\t\t\t{ value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) }\n\t\t\t);\n\t\t}\n\t}\n\treturn func;\n};\n\nvar applyBind = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n", "'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar callBind = require('./');\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n", "module.exports = require('util').inspect;\n", "var hasMap = typeof Map === 'function' && Map.prototype;\nvar mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null;\nvar mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function' ? mapSizeDescriptor.get : null;\nvar mapForEach = hasMap && Map.prototype.forEach;\nvar hasSet = typeof Set === 'function' && Set.prototype;\nvar setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null;\nvar setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function' ? setSizeDescriptor.get : null;\nvar setForEach = hasSet && Set.prototype.forEach;\nvar hasWeakMap = typeof WeakMap === 'function' && WeakMap.prototype;\nvar weakMapHas = hasWeakMap ? WeakMap.prototype.has : null;\nvar hasWeakSet = typeof WeakSet === 'function' && WeakSet.prototype;\nvar weakSetHas = hasWeakSet ? WeakSet.prototype.has : null;\nvar hasWeakRef = typeof WeakRef === 'function' && WeakRef.prototype;\nvar weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null;\nvar booleanValueOf = Boolean.prototype.valueOf;\nvar objectToString = Object.prototype.toString;\nvar functionToString = Function.prototype.toString;\nvar $match = String.prototype.match;\nvar $slice = String.prototype.slice;\nvar $replace = String.prototype.replace;\nvar $toUpperCase = String.prototype.toUpperCase;\nvar $toLowerCase = String.prototype.toLowerCase;\nvar $test = RegExp.prototype.test;\nvar $concat = Array.prototype.concat;\nvar $join = Array.prototype.join;\nvar $arrSlice = Array.prototype.slice;\nvar $floor = Math.floor;\nvar bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null;\nvar gOPS = Object.getOwnPropertySymbols;\nvar symToString = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol.prototype.toString : null;\nvar hasShammedSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'object';\n// ie, `has-tostringtag/shams\nvar toStringTag = typeof Symbol === 'function' && Symbol.toStringTag && (typeof Symbol.toStringTag === hasShammedSymbols ? 'object' : 'symbol')\n ? Symbol.toStringTag\n : null;\nvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\nvar gPO = (typeof Reflect === 'function' ? Reflect.getPrototypeOf : Object.getPrototypeOf) || (\n [].__proto__ === Array.prototype // eslint-disable-line no-proto\n ? function (O) {\n return O.__proto__; // eslint-disable-line no-proto\n }\n : null\n);\n\nfunction addNumericSeparator(num, str) {\n if (\n num === Infinity\n || num === -Infinity\n || num !== num\n || (num && num > -1000 && num < 1000)\n || $test.call(/e/, str)\n ) {\n return str;\n }\n var sepRegex = /[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;\n if (typeof num === 'number') {\n var int = num < 0 ? -$floor(-num) : $floor(num); // trunc(num)\n if (int !== num) {\n var intStr = String(int);\n var dec = $slice.call(str, intStr.length + 1);\n return $replace.call(intStr, sepRegex, '$&_') + '.' + $replace.call($replace.call(dec, /([0-9]{3})/g, '$&_'), /_$/, '');\n }\n }\n return $replace.call(str, sepRegex, '$&_');\n}\n\nvar utilInspect = require('./util.inspect');\nvar inspectCustom = utilInspect.custom;\nvar inspectSymbol = isSymbol(inspectCustom) ? inspectCustom : null;\n\nmodule.exports = function inspect_(obj, options, depth, seen) {\n var opts = options || {};\n\n if (has(opts, 'quoteStyle') && (opts.quoteStyle !== 'single' && opts.quoteStyle !== 'double')) {\n throw new TypeError('option \"quoteStyle\" must be \"single\" or \"double\"');\n }\n if (\n has(opts, 'maxStringLength') && (typeof opts.maxStringLength === 'number'\n ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity\n : opts.maxStringLength !== null\n )\n ) {\n throw new TypeError('option \"maxStringLength\", if provided, must be a positive integer, Infinity, or `null`');\n }\n var customInspect = has(opts, 'customInspect') ? opts.customInspect : true;\n if (typeof customInspect !== 'boolean' && customInspect !== 'symbol') {\n throw new TypeError('option \"customInspect\", if provided, must be `true`, `false`, or `\\'symbol\\'`');\n }\n\n if (\n has(opts, 'indent')\n && opts.indent !== null\n && opts.indent !== '\\t'\n && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0)\n ) {\n throw new TypeError('option \"indent\" must be \"\\\\t\", an integer > 0, or `null`');\n }\n if (has(opts, 'numericSeparator') && typeof opts.numericSeparator !== 'boolean') {\n throw new TypeError('option \"numericSeparator\", if provided, must be `true` or `false`');\n }\n var numericSeparator = opts.numericSeparator;\n\n if (typeof obj === 'undefined') {\n return 'undefined';\n }\n if (obj === null) {\n return 'null';\n }\n if (typeof obj === 'boolean') {\n return obj ? 'true' : 'false';\n }\n\n if (typeof obj === 'string') {\n return inspectString(obj, opts);\n }\n if (typeof obj === 'number') {\n if (obj === 0) {\n return Infinity / obj > 0 ? '0' : '-0';\n }\n var str = String(obj);\n return numericSeparator ? addNumericSeparator(obj, str) : str;\n }\n if (typeof obj === 'bigint') {\n var bigIntStr = String(obj) + 'n';\n return numericSeparator ? addNumericSeparator(obj, bigIntStr) : bigIntStr;\n }\n\n var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth;\n if (typeof depth === 'undefined') { depth = 0; }\n if (depth >= maxDepth && maxDepth > 0 && typeof obj === 'object') {\n return isArray(obj) ? '[Array]' : '[Object]';\n }\n\n var indent = getIndent(opts, depth);\n\n if (typeof seen === 'undefined') {\n seen = [];\n } else if (indexOf(seen, obj) >= 0) {\n return '[Circular]';\n }\n\n function inspect(value, from, noIndent) {\n if (from) {\n seen = $arrSlice.call(seen);\n seen.push(from);\n }\n if (noIndent) {\n var newOpts = {\n depth: opts.depth\n };\n if (has(opts, 'quoteStyle')) {\n newOpts.quoteStyle = opts.quoteStyle;\n }\n return inspect_(value, newOpts, depth + 1, seen);\n }\n return inspect_(value, opts, depth + 1, seen);\n }\n\n if (typeof obj === 'function' && !isRegExp(obj)) { // in older engines, regexes are callable\n var name = nameOf(obj);\n var keys = arrObjKeys(obj, inspect);\n return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + $join.call(keys, ', ') + ' }' : '');\n }\n if (isSymbol(obj)) {\n var symString = hasShammedSymbols ? $replace.call(String(obj), /^(Symbol\\(.*\\))_[^)]*$/, '$1') : symToString.call(obj);\n return typeof obj === 'object' && !hasShammedSymbols ? markBoxed(symString) : symString;\n }\n if (isElement(obj)) {\n var s = '<' + $toLowerCase.call(String(obj.nodeName));\n var attrs = obj.attributes || [];\n for (var i = 0; i < attrs.length; i++) {\n s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts);\n }\n s += '>';\n if (obj.childNodes && obj.childNodes.length) { s += '...'; }\n s += '</' + $toLowerCase.call(String(obj.nodeName)) + '>';\n return s;\n }\n if (isArray(obj)) {\n if (obj.length === 0) { return '[]'; }\n var xs = arrObjKeys(obj, inspect);\n if (indent && !singleLineValues(xs)) {\n return '[' + indentedJoin(xs, indent) + ']';\n }\n return '[ ' + $join.call(xs, ', ') + ' ]';\n }\n if (isError(obj)) {\n var parts = arrObjKeys(obj, inspect);\n if (!('cause' in Error.prototype) && 'cause' in obj && !isEnumerable.call(obj, 'cause')) {\n return '{ [' + String(obj) + '] ' + $join.call($concat.call('[cause]: ' + inspect(obj.cause), parts), ', ') + ' }';\n }\n if (parts.length === 0) { return '[' + String(obj) + ']'; }\n return '{ [' + String(obj) + '] ' + $join.call(parts, ', ') + ' }';\n }\n if (typeof obj === 'object' && customInspect) {\n if (inspectSymbol && typeof obj[inspectSymbol] === 'function' && utilInspect) {\n return utilInspect(obj, { depth: maxDepth - depth });\n } else if (customInspect !== 'symbol' && typeof obj.inspect === 'function') {\n return obj.inspect();\n }\n }\n if (isMap(obj)) {\n var mapParts = [];\n if (mapForEach) {\n mapForEach.call(obj, function (value, key) {\n mapParts.push(inspect(key, obj, true) + ' => ' + inspect(value, obj));\n });\n }\n return collectionOf('Map', mapSize.call(obj), mapParts, indent);\n }\n if (isSet(obj)) {\n var setParts = [];\n if (setForEach) {\n setForEach.call(obj, function (value) {\n setParts.push(inspect(value, obj));\n });\n }\n return collectionOf('Set', setSize.call(obj), setParts, indent);\n }\n if (isWeakMap(obj)) {\n return weakCollectionOf('WeakMap');\n }\n if (isWeakSet(obj)) {\n return weakCollectionOf('WeakSet');\n }\n if (isWeakRef(obj)) {\n return weakCollectionOf('WeakRef');\n }\n if (isNumber(obj)) {\n return markBoxed(inspect(Number(obj)));\n }\n if (isBigInt(obj)) {\n return markBoxed(inspect(bigIntValueOf.call(obj)));\n }\n if (isBoolean(obj)) {\n return markBoxed(booleanValueOf.call(obj));\n }\n if (isString(obj)) {\n return markBoxed(inspect(String(obj)));\n }\n if (!isDate(obj) && !isRegExp(obj)) {\n var ys = arrObjKeys(obj, inspect);\n var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object;\n var protoTag = obj instanceof Object ? '' : 'null prototype';\n var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? $slice.call(toStr(obj), 8, -1) : protoTag ? 'Object' : '';\n var constructorTag = isPlainObject || typeof obj.constructor !== 'function' ? '' : obj.constructor.name ? obj.constructor.name + ' ' : '';\n var tag = constructorTag + (stringTag || protoTag ? '[' + $join.call($concat.call([], stringTag || [], protoTag || []), ': ') + '] ' : '');\n if (ys.length === 0) { return tag + '{}'; }\n if (indent) {\n return tag + '{' + indentedJoin(ys, indent) + '}';\n }\n return tag + '{ ' + $join.call(ys, ', ') + ' }';\n }\n return String(obj);\n};\n\nfunction wrapQuotes(s, defaultStyle, opts) {\n var quoteChar = (opts.quoteStyle || defaultStyle) === 'double' ? '\"' : \"'\";\n return quoteChar + s + quoteChar;\n}\n\nfunction quote(s) {\n return $replace.call(String(s), /\"/g, '&quot;');\n}\n\nfunction isArray(obj) { return toStr(obj) === '[object Array]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isDate(obj) { return toStr(obj) === '[object Date]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isRegExp(obj) { return toStr(obj) === '[object RegExp]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isError(obj) { return toStr(obj) === '[object Error]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isString(obj) { return toStr(obj) === '[object String]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isNumber(obj) { return toStr(obj) === '[object Number]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isBoolean(obj) { return toStr(obj) === '[object Boolean]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\n\n// Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives\nfunction isSymbol(obj) {\n if (hasShammedSymbols) {\n return obj && typeof obj === 'object' && obj instanceof Symbol;\n }\n if (typeof obj === 'symbol') {\n return true;\n }\n if (!obj || typeof obj !== 'object' || !symToString) {\n return false;\n }\n try {\n symToString.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isBigInt(obj) {\n if (!obj || typeof obj !== 'object' || !bigIntValueOf) {\n return false;\n }\n try {\n bigIntValueOf.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nvar hasOwn = Object.prototype.hasOwnProperty || function (key) { return key in this; };\nfunction has(obj, key) {\n return hasOwn.call(obj, key);\n}\n\nfunction toStr(obj) {\n return objectToString.call(obj);\n}\n\nfunction nameOf(f) {\n if (f.name) { return f.name; }\n var m = $match.call(functionToString.call(f), /^function\\s*([\\w$]+)/);\n if (m) { return m[1]; }\n return null;\n}\n\nfunction indexOf(xs, x) {\n if (xs.indexOf) { return xs.indexOf(x); }\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) { return i; }\n }\n return -1;\n}\n\nfunction isMap(x) {\n if (!mapSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n mapSize.call(x);\n try {\n setSize.call(x);\n } catch (s) {\n return true;\n }\n return x instanceof Map; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakMap(x) {\n if (!weakMapHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakMapHas.call(x, weakMapHas);\n try {\n weakSetHas.call(x, weakSetHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakMap; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakRef(x) {\n if (!weakRefDeref || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakRefDeref.call(x);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isSet(x) {\n if (!setSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n setSize.call(x);\n try {\n mapSize.call(x);\n } catch (m) {\n return true;\n }\n return x instanceof Set; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakSet(x) {\n if (!weakSetHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakSetHas.call(x, weakSetHas);\n try {\n weakMapHas.call(x, weakMapHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakSet; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isElement(x) {\n if (!x || typeof x !== 'object') { return false; }\n if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) {\n return true;\n }\n return typeof x.nodeName === 'string' && typeof x.getAttribute === 'function';\n}\n\nfunction inspectString(str, opts) {\n if (str.length > opts.maxStringLength) {\n var remaining = str.length - opts.maxStringLength;\n var trailer = '... ' + remaining + ' more character' + (remaining > 1 ? 's' : '');\n return inspectString($slice.call(str, 0, opts.maxStringLength), opts) + trailer;\n }\n // eslint-disable-next-line no-control-regex\n var s = $replace.call($replace.call(str, /(['\\\\])/g, '\\\\$1'), /[\\x00-\\x1f]/g, lowbyte);\n return wrapQuotes(s, 'single', opts);\n}\n\nfunction lowbyte(c) {\n var n = c.charCodeAt(0);\n var x = {\n 8: 'b',\n 9: 't',\n 10: 'n',\n 12: 'f',\n 13: 'r'\n }[n];\n if (x) { return '\\\\' + x; }\n return '\\\\x' + (n < 0x10 ? '0' : '') + $toUpperCase.call(n.toString(16));\n}\n\nfunction markBoxed(str) {\n return 'Object(' + str + ')';\n}\n\nfunction weakCollectionOf(type) {\n return type + ' { ? }';\n}\n\nfunction collectionOf(type, size, entries, indent) {\n var joinedEntries = indent ? indentedJoin(entries, indent) : $join.call(entries, ', ');\n return type + ' (' + size + ') {' + joinedEntries + '}';\n}\n\nfunction singleLineValues(xs) {\n for (var i = 0; i < xs.length; i++) {\n if (indexOf(xs[i], '\\n') >= 0) {\n return false;\n }\n }\n return true;\n}\n\nfunction getIndent(opts, depth) {\n var baseIndent;\n if (opts.indent === '\\t') {\n baseIndent = '\\t';\n } else if (typeof opts.indent === 'number' && opts.indent > 0) {\n baseIndent = $join.call(Array(opts.indent + 1), ' ');\n } else {\n return null;\n }\n return {\n base: baseIndent,\n prev: $join.call(Array(depth + 1), baseIndent)\n };\n}\n\nfunction indentedJoin(xs, indent) {\n if (xs.length === 0) { return ''; }\n var lineJoiner = '\\n' + indent.prev + indent.base;\n return lineJoiner + $join.call(xs, ',' + lineJoiner) + '\\n' + indent.prev;\n}\n\nfunction arrObjKeys(obj, inspect) {\n var isArr = isArray(obj);\n var xs = [];\n if (isArr) {\n xs.length = obj.length;\n for (var i = 0; i < obj.length; i++) {\n xs[i] = has(obj, i) ? inspect(obj[i], obj) : '';\n }\n }\n var syms = typeof gOPS === 'function' ? gOPS(obj) : [];\n var symMap;\n if (hasShammedSymbols) {\n symMap = {};\n for (var k = 0; k < syms.length; k++) {\n symMap['$' + syms[k]] = syms[k];\n }\n }\n\n for (var key in obj) { // eslint-disable-line no-restricted-syntax\n if (!has(obj, key)) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (isArr && String(Number(key)) === key && key < obj.length) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (hasShammedSymbols && symMap['$' + key] instanceof Symbol) {\n // this is to prevent shammed Symbols, which are stored as strings, from being included in the string key section\n continue; // eslint-disable-line no-restricted-syntax, no-continue\n } else if ($test.call(/[^\\w$]/, key)) {\n xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj));\n } else {\n xs.push(key + ': ' + inspect(obj[key], obj));\n }\n }\n if (typeof gOPS === 'function') {\n for (var j = 0; j < syms.length; j++) {\n if (isEnumerable.call(obj, syms[j])) {\n xs.push('[' + inspect(syms[j]) + ']: ' + inspect(obj[syms[j]], obj));\n }\n }\n }\n return xs;\n}\n", "'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\nvar callBound = require('call-bind/callBound');\nvar inspect = require('object-inspect');\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $WeakMap = GetIntrinsic('%WeakMap%', true);\nvar $Map = GetIntrinsic('%Map%', true);\n\nvar $weakMapGet = callBound('WeakMap.prototype.get', true);\nvar $weakMapSet = callBound('WeakMap.prototype.set', true);\nvar $weakMapHas = callBound('WeakMap.prototype.has', true);\nvar $mapGet = callBound('Map.prototype.get', true);\nvar $mapSet = callBound('Map.prototype.set', true);\nvar $mapHas = callBound('Map.prototype.has', true);\n\n/*\n * This function traverses the list returning the node corresponding to the\n * given key.\n *\n * That node is also moved to the head of the list, so that if it's accessed\n * again we don't need to traverse the whole list. By doing so, all the recently\n * used nodes can be accessed relatively quickly.\n */\nvar listGetNode = function (list, key) { // eslint-disable-line consistent-return\n\tfor (var prev = list, curr; (curr = prev.next) !== null; prev = curr) {\n\t\tif (curr.key === key) {\n\t\t\tprev.next = curr.next;\n\t\t\tcurr.next = list.next;\n\t\t\tlist.next = curr; // eslint-disable-line no-param-reassign\n\t\t\treturn curr;\n\t\t}\n\t}\n};\n\nvar listGet = function (objects, key) {\n\tvar node = listGetNode(objects, key);\n\treturn node && node.value;\n};\nvar listSet = function (objects, key, value) {\n\tvar node = listGetNode(objects, key);\n\tif (node) {\n\t\tnode.value = value;\n\t} else {\n\t\t// Prepend the new node to the beginning of the list\n\t\tobjects.next = { // eslint-disable-line no-param-reassign\n\t\t\tkey: key,\n\t\t\tnext: objects.next,\n\t\t\tvalue: value\n\t\t};\n\t}\n};\nvar listHas = function (objects, key) {\n\treturn !!listGetNode(objects, key);\n};\n\nmodule.exports = function getSideChannel() {\n\tvar $wm;\n\tvar $m;\n\tvar $o;\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\tget: function (key) { // eslint-disable-line consistent-return\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapGet($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapGet($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listGet($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thas: function (key) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapHas($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapHas($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listHas($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif (!$wm) {\n\t\t\t\t\t$wm = new $WeakMap();\n\t\t\t\t}\n\t\t\t\t$weakMapSet($wm, key, value);\n\t\t\t} else if ($Map) {\n\t\t\t\tif (!$m) {\n\t\t\t\t\t$m = new $Map();\n\t\t\t\t}\n\t\t\t\t$mapSet($m, key, value);\n\t\t\t} else {\n\t\t\t\tif (!$o) {\n\t\t\t\t\t/*\n\t\t\t\t\t * Initialize the linked list as an empty node, so that we don't have\n\t\t\t\t\t * to special-case handling of the first node: we can always refer to\n\t\t\t\t\t * it as (previous node).next, instead of something like (list).head\n\t\t\t\t\t */\n\t\t\t\t\t$o = { key: {}, next: null };\n\t\t\t\t}\n\t\t\t\tlistSet($o, key, value);\n\t\t\t}\n\t\t}\n\t};\n\treturn channel;\n};\n", "'use strict';\n\nvar replace = String.prototype.replace;\nvar percentTwenties = /%20/g;\n\nvar Format = {\n RFC1738: 'RFC1738',\n RFC3986: 'RFC3986'\n};\n\nmodule.exports = {\n 'default': Format.RFC3986,\n formatters: {\n RFC1738: function (value) {\n return replace.call(value, percentTwenties, '+');\n },\n RFC3986: function (value) {\n return String(value);\n }\n },\n RFC1738: Format.RFC1738,\n RFC3986: Format.RFC3986\n};\n", "'use strict';\n\nvar formats = require('./formats');\n\nvar has = Object.prototype.hasOwnProperty;\nvar isArray = Array.isArray;\n\nvar hexTable = (function () {\n var array = [];\n for (var i = 0; i < 256; ++i) {\n array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase());\n }\n\n return array;\n}());\n\nvar compactQueue = function compactQueue(queue) {\n while (queue.length > 1) {\n var item = queue.pop();\n var obj = item.obj[item.prop];\n\n if (isArray(obj)) {\n var compacted = [];\n\n for (var j = 0; j < obj.length; ++j) {\n if (typeof obj[j] !== 'undefined') {\n compacted.push(obj[j]);\n }\n }\n\n item.obj[item.prop] = compacted;\n }\n }\n};\n\nvar arrayToObject = function arrayToObject(source, options) {\n var obj = options && options.plainObjects ? Object.create(null) : {};\n for (var i = 0; i < source.length; ++i) {\n if (typeof source[i] !== 'undefined') {\n obj[i] = source[i];\n }\n }\n\n return obj;\n};\n\nvar merge = function merge(target, source, options) {\n /* eslint no-param-reassign: 0 */\n if (!source) {\n return target;\n }\n\n if (typeof source !== 'object') {\n if (isArray(target)) {\n target.push(source);\n } else if (target && typeof target === 'object') {\n if ((options && (options.plainObjects || options.allowPrototypes)) || !has.call(Object.prototype, source)) {\n target[source] = true;\n }\n } else {\n return [target, source];\n }\n\n return target;\n }\n\n if (!target || typeof target !== 'object') {\n return [target].concat(source);\n }\n\n var mergeTarget = target;\n if (isArray(target) && !isArray(source)) {\n mergeTarget = arrayToObject(target, options);\n }\n\n if (isArray(target) && isArray(source)) {\n source.forEach(function (item, i) {\n if (has.call(target, i)) {\n var targetItem = target[i];\n if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') {\n target[i] = merge(targetItem, item, options);\n } else {\n target.push(item);\n }\n } else {\n target[i] = item;\n }\n });\n return target;\n }\n\n return Object.keys(source).reduce(function (acc, key) {\n var value = source[key];\n\n if (has.call(acc, key)) {\n acc[key] = merge(acc[key], value, options);\n } else {\n acc[key] = value;\n }\n return acc;\n }, mergeTarget);\n};\n\nvar assign = function assignSingleSource(target, source) {\n return Object.keys(source).reduce(function (acc, key) {\n acc[key] = source[key];\n return acc;\n }, target);\n};\n\nvar decode = function (str, decoder, charset) {\n var strWithoutPlus = str.replace(/\\+/g, ' ');\n if (charset === 'iso-8859-1') {\n // unescape never throws, no try...catch needed:\n return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape);\n }\n // utf-8\n try {\n return decodeURIComponent(strWithoutPlus);\n } catch (e) {\n return strWithoutPlus;\n }\n};\n\nvar encode = function encode(str, defaultEncoder, charset, kind, format) {\n // This code was originally written by Brian White (mscdex) for the io.js core querystring library.\n // It has been adapted here for stricter adherence to RFC 3986\n if (str.length === 0) {\n return str;\n }\n\n var string = str;\n if (typeof str === 'symbol') {\n string = Symbol.prototype.toString.call(str);\n } else if (typeof str !== 'string') {\n string = String(str);\n }\n\n if (charset === 'iso-8859-1') {\n return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) {\n return '%26%23' + parseInt($0.slice(2), 16) + '%3B';\n });\n }\n\n var out = '';\n for (var i = 0; i < string.length; ++i) {\n var c = string.charCodeAt(i);\n\n if (\n c === 0x2D // -\n || c === 0x2E // .\n || c === 0x5F // _\n || c === 0x7E // ~\n || (c >= 0x30 && c <= 0x39) // 0-9\n || (c >= 0x41 && c <= 0x5A) // a-z\n || (c >= 0x61 && c <= 0x7A) // A-Z\n || (format === formats.RFC1738 && (c === 0x28 || c === 0x29)) // ( )\n ) {\n out += string.charAt(i);\n continue;\n }\n\n if (c < 0x80) {\n out = out + hexTable[c];\n continue;\n }\n\n if (c < 0x800) {\n out = out + (hexTable[0xC0 | (c >> 6)] + hexTable[0x80 | (c & 0x3F)]);\n continue;\n }\n\n if (c < 0xD800 || c >= 0xE000) {\n out = out + (hexTable[0xE0 | (c >> 12)] + hexTable[0x80 | ((c >> 6) & 0x3F)] + hexTable[0x80 | (c & 0x3F)]);\n continue;\n }\n\n i += 1;\n c = 0x10000 + (((c & 0x3FF) << 10) | (string.charCodeAt(i) & 0x3FF));\n /* eslint operator-linebreak: [2, \"before\"] */\n out += hexTable[0xF0 | (c >> 18)]\n + hexTable[0x80 | ((c >> 12) & 0x3F)]\n + hexTable[0x80 | ((c >> 6) & 0x3F)]\n + hexTable[0x80 | (c & 0x3F)];\n }\n\n return out;\n};\n\nvar compact = function compact(value) {\n var queue = [{ obj: { o: value }, prop: 'o' }];\n var refs = [];\n\n for (var i = 0; i < queue.length; ++i) {\n var item = queue[i];\n var obj = item.obj[item.prop];\n\n var keys = Object.keys(obj);\n for (var j = 0; j < keys.length; ++j) {\n var key = keys[j];\n var val = obj[key];\n if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) {\n queue.push({ obj: obj, prop: key });\n refs.push(val);\n }\n }\n }\n\n compactQueue(queue);\n\n return value;\n};\n\nvar isRegExp = function isRegExp(obj) {\n return Object.prototype.toString.call(obj) === '[object RegExp]';\n};\n\nvar isBuffer = function isBuffer(obj) {\n if (!obj || typeof obj !== 'object') {\n return false;\n }\n\n return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));\n};\n\nvar combine = function combine(a, b) {\n return [].concat(a, b);\n};\n\nvar maybeMap = function maybeMap(val, fn) {\n if (isArray(val)) {\n var mapped = [];\n for (var i = 0; i < val.length; i += 1) {\n mapped.push(fn(val[i]));\n }\n return mapped;\n }\n return fn(val);\n};\n\nmodule.exports = {\n arrayToObject: arrayToObject,\n assign: assign,\n combine: combine,\n compact: compact,\n decode: decode,\n encode: encode,\n isBuffer: isBuffer,\n isRegExp: isRegExp,\n maybeMap: maybeMap,\n merge: merge\n};\n", "'use strict';\n\nvar getSideChannel = require('side-channel');\nvar utils = require('./utils');\nvar formats = require('./formats');\nvar has = Object.prototype.hasOwnProperty;\n\nvar arrayPrefixGenerators = {\n brackets: function brackets(prefix) {\n return prefix + '[]';\n },\n comma: 'comma',\n indices: function indices(prefix, key) {\n return prefix + '[' + key + ']';\n },\n repeat: function repeat(prefix) {\n return prefix;\n }\n};\n\nvar isArray = Array.isArray;\nvar split = String.prototype.split;\nvar push = Array.prototype.push;\nvar pushToArray = function (arr, valueOrArray) {\n push.apply(arr, isArray(valueOrArray) ? valueOrArray : [valueOrArray]);\n};\n\nvar toISO = Date.prototype.toISOString;\n\nvar defaultFormat = formats['default'];\nvar defaults = {\n addQueryPrefix: false,\n allowDots: false,\n charset: 'utf-8',\n charsetSentinel: false,\n delimiter: '&',\n encode: true,\n encoder: utils.encode,\n encodeValuesOnly: false,\n format: defaultFormat,\n formatter: formats.formatters[defaultFormat],\n // deprecated\n indices: false,\n serializeDate: function serializeDate(date) {\n return toISO.call(date);\n },\n skipNulls: false,\n strictNullHandling: false\n};\n\nvar isNonNullishPrimitive = function isNonNullishPrimitive(v) {\n return typeof v === 'string'\n || typeof v === 'number'\n || typeof v === 'boolean'\n || typeof v === 'symbol'\n || typeof v === 'bigint';\n};\n\nvar sentinel = {};\n\nvar stringify = function stringify(\n object,\n prefix,\n generateArrayPrefix,\n commaRoundTrip,\n strictNullHandling,\n skipNulls,\n encoder,\n filter,\n sort,\n allowDots,\n serializeDate,\n format,\n formatter,\n encodeValuesOnly,\n charset,\n sideChannel\n) {\n var obj = object;\n\n var tmpSc = sideChannel;\n var step = 0;\n var findFlag = false;\n while ((tmpSc = tmpSc.get(sentinel)) !== void undefined && !findFlag) {\n // Where object last appeared in the ref tree\n var pos = tmpSc.get(object);\n step += 1;\n if (typeof pos !== 'undefined') {\n if (pos === step) {\n throw new RangeError('Cyclic object value');\n } else {\n findFlag = true; // Break while\n }\n }\n if (typeof tmpSc.get(sentinel) === 'undefined') {\n step = 0;\n }\n }\n\n if (typeof filter === 'function') {\n obj = filter(prefix, obj);\n } else if (obj instanceof Date) {\n obj = serializeDate(obj);\n } else if (generateArrayPrefix === 'comma' && isArray(obj)) {\n obj = utils.maybeMap(obj, function (value) {\n if (value instanceof Date) {\n return serializeDate(value);\n }\n return value;\n });\n }\n\n if (obj === null) {\n if (strictNullHandling) {\n return encoder && !encodeValuesOnly ? encoder(prefix, defaults.encoder, charset, 'key', format) : prefix;\n }\n\n obj = '';\n }\n\n if (isNonNullishPrimitive(obj) || utils.isBuffer(obj)) {\n if (encoder) {\n var keyValue = encodeValuesOnly ? prefix : encoder(prefix, defaults.encoder, charset, 'key', format);\n if (generateArrayPrefix === 'comma' && encodeValuesOnly) {\n var valuesArray = split.call(String(obj), ',');\n var valuesJoined = '';\n for (var i = 0; i < valuesArray.length; ++i) {\n valuesJoined += (i === 0 ? '' : ',') + formatter(encoder(valuesArray[i], defaults.encoder, charset, 'value', format));\n }\n return [formatter(keyValue) + (commaRoundTrip && isArray(obj) && valuesArray.length === 1 ? '[]' : '') + '=' + valuesJoined];\n }\n return [formatter(keyValue) + '=' + formatter(encoder(obj, defaults.encoder, charset, 'value', format))];\n }\n return [formatter(prefix) + '=' + formatter(String(obj))];\n }\n\n var values = [];\n\n if (typeof obj === 'undefined') {\n return values;\n }\n\n var objKeys;\n if (generateArrayPrefix === 'comma' && isArray(obj)) {\n // we need to join elements in\n objKeys = [{ value: obj.length > 0 ? obj.join(',') || null : void undefined }];\n } else if (isArray(filter)) {\n objKeys = filter;\n } else {\n var keys = Object.keys(obj);\n objKeys = sort ? keys.sort(sort) : keys;\n }\n\n var adjustedPrefix = commaRoundTrip && isArray(obj) && obj.length === 1 ? prefix + '[]' : prefix;\n\n for (var j = 0; j < objKeys.length; ++j) {\n var key = objKeys[j];\n var value = typeof key === 'object' && typeof key.value !== 'undefined' ? key.value : obj[key];\n\n if (skipNulls && value === null) {\n continue;\n }\n\n var keyPrefix = isArray(obj)\n ? typeof generateArrayPrefix === 'function' ? generateArrayPrefix(adjustedPrefix, key) : adjustedPrefix\n : adjustedPrefix + (allowDots ? '.' + key : '[' + key + ']');\n\n sideChannel.set(object, step);\n var valueSideChannel = getSideChannel();\n valueSideChannel.set(sentinel, sideChannel);\n pushToArray(values, stringify(\n value,\n keyPrefix,\n generateArrayPrefix,\n commaRoundTrip,\n strictNullHandling,\n skipNulls,\n encoder,\n filter,\n sort,\n allowDots,\n serializeDate,\n format,\n formatter,\n encodeValuesOnly,\n charset,\n valueSideChannel\n ));\n }\n\n return values;\n};\n\nvar normalizeStringifyOptions = function normalizeStringifyOptions(opts) {\n if (!opts) {\n return defaults;\n }\n\n if (opts.encoder !== null && typeof opts.encoder !== 'undefined' && typeof opts.encoder !== 'function') {\n throw new TypeError('Encoder has to be a function.');\n }\n\n var charset = opts.charset || defaults.charset;\n if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n }\n\n var format = formats['default'];\n if (typeof opts.format !== 'undefined') {\n if (!has.call(formats.formatters, opts.format)) {\n throw new TypeError('Unknown format option provided.');\n }\n format = opts.format;\n }\n var formatter = formats.formatters[format];\n\n var filter = defaults.filter;\n if (typeof opts.filter === 'function' || isArray(opts.filter)) {\n filter = opts.filter;\n }\n\n return {\n addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix,\n allowDots: typeof opts.allowDots === 'undefined' ? defaults.allowDots : !!opts.allowDots,\n charset: charset,\n charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter,\n encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode,\n encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder,\n encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly,\n filter: filter,\n format: format,\n formatter: formatter,\n serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate,\n skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls,\n sort: typeof opts.sort === 'function' ? opts.sort : null,\n strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling\n };\n};\n\nmodule.exports = function (object, opts) {\n var obj = object;\n var options = normalizeStringifyOptions(opts);\n\n var objKeys;\n var filter;\n\n if (typeof options.filter === 'function') {\n filter = options.filter;\n obj = filter('', obj);\n } else if (isArray(options.filter)) {\n filter = options.filter;\n objKeys = filter;\n }\n\n var keys = [];\n\n if (typeof obj !== 'object' || obj === null) {\n return '';\n }\n\n var arrayFormat;\n if (opts && opts.arrayFormat in arrayPrefixGenerators) {\n arrayFormat = opts.arrayFormat;\n } else if (opts && 'indices' in opts) {\n arrayFormat = opts.indices ? 'indices' : 'repeat';\n } else {\n arrayFormat = 'indices';\n }\n\n var generateArrayPrefix = arrayPrefixGenerators[arrayFormat];\n if (opts && 'commaRoundTrip' in opts && typeof opts.commaRoundTrip !== 'boolean') {\n throw new TypeError('`commaRoundTrip` must be a boolean, or absent');\n }\n var commaRoundTrip = generateArrayPrefix === 'comma' && opts && opts.commaRoundTrip;\n\n if (!objKeys) {\n objKeys = Object.keys(obj);\n }\n\n if (options.sort) {\n objKeys.sort(options.sort);\n }\n\n var sideChannel = getSideChannel();\n for (var i = 0; i < objKeys.length; ++i) {\n var key = objKeys[i];\n\n if (options.skipNulls && obj[key] === null) {\n continue;\n }\n pushToArray(keys, stringify(\n obj[key],\n key,\n generateArrayPrefix,\n commaRoundTrip,\n options.strictNullHandling,\n options.skipNulls,\n options.encode ? options.encoder : null,\n options.filter,\n options.sort,\n options.allowDots,\n options.serializeDate,\n options.format,\n options.formatter,\n options.encodeValuesOnly,\n options.charset,\n sideChannel\n ));\n }\n\n var joined = keys.join(options.delimiter);\n var prefix = options.addQueryPrefix === true ? '?' : '';\n\n if (options.charsetSentinel) {\n if (options.charset === 'iso-8859-1') {\n // encodeURIComponent('&#10003;'), the \"numeric entity\" representation of a checkmark\n prefix += 'utf8=%26%2310003%3B&';\n } else {\n // encodeURIComponent('\u2713')\n prefix += 'utf8=%E2%9C%93&';\n }\n }\n\n return joined.length > 0 ? prefix + joined : '';\n};\n", "'use strict';\n\nvar utils = require('./utils');\n\nvar has = Object.prototype.hasOwnProperty;\nvar isArray = Array.isArray;\n\nvar defaults = {\n allowDots: false,\n allowPrototypes: false,\n allowSparse: false,\n arrayLimit: 20,\n charset: 'utf-8',\n charsetSentinel: false,\n comma: false,\n decoder: utils.decode,\n delimiter: '&',\n depth: 5,\n ignoreQueryPrefix: false,\n interpretNumericEntities: false,\n parameterLimit: 1000,\n parseArrays: true,\n plainObjects: false,\n strictNullHandling: false\n};\n\nvar interpretNumericEntities = function (str) {\n return str.replace(/&#(\\d+);/g, function ($0, numberStr) {\n return String.fromCharCode(parseInt(numberStr, 10));\n });\n};\n\nvar parseArrayValue = function (val, options) {\n if (val && typeof val === 'string' && options.comma && val.indexOf(',') > -1) {\n return val.split(',');\n }\n\n return val;\n};\n\n// This is what browsers will submit when the \u2713 character occurs in an\n// application/x-www-form-urlencoded body and the encoding of the page containing\n// the form is iso-8859-1, or when the submitted form has an accept-charset\n// attribute of iso-8859-1. Presumably also with other charsets that do not contain\n// the \u2713 character, such as us-ascii.\nvar isoSentinel = 'utf8=%26%2310003%3B'; // encodeURIComponent('&#10003;')\n\n// These are the percent-encoded utf-8 octets representing a checkmark, indicating that the request actually is utf-8 encoded.\nvar charsetSentinel = 'utf8=%E2%9C%93'; // encodeURIComponent('\u2713')\n\nvar parseValues = function parseQueryStringValues(str, options) {\n var obj = {};\n var cleanStr = options.ignoreQueryPrefix ? str.replace(/^\\?/, '') : str;\n var limit = options.parameterLimit === Infinity ? undefined : options.parameterLimit;\n var parts = cleanStr.split(options.delimiter, limit);\n var skipIndex = -1; // Keep track of where the utf8 sentinel was found\n var i;\n\n var charset = options.charset;\n if (options.charsetSentinel) {\n for (i = 0; i < parts.length; ++i) {\n if (parts[i].indexOf('utf8=') === 0) {\n if (parts[i] === charsetSentinel) {\n charset = 'utf-8';\n } else if (parts[i] === isoSentinel) {\n charset = 'iso-8859-1';\n }\n skipIndex = i;\n i = parts.length; // The eslint settings do not allow break;\n }\n }\n }\n\n for (i = 0; i < parts.length; ++i) {\n if (i === skipIndex) {\n continue;\n }\n var part = parts[i];\n\n var bracketEqualsPos = part.indexOf(']=');\n var pos = bracketEqualsPos === -1 ? part.indexOf('=') : bracketEqualsPos + 1;\n\n var key, val;\n if (pos === -1) {\n key = options.decoder(part, defaults.decoder, charset, 'key');\n val = options.strictNullHandling ? null : '';\n } else {\n key = options.decoder(part.slice(0, pos), defaults.decoder, charset, 'key');\n val = utils.maybeMap(\n parseArrayValue(part.slice(pos + 1), options),\n function (encodedVal) {\n return options.decoder(encodedVal, defaults.decoder, charset, 'value');\n }\n );\n }\n\n if (val && options.interpretNumericEntities && charset === 'iso-8859-1') {\n val = interpretNumericEntities(val);\n }\n\n if (part.indexOf('[]=') > -1) {\n val = isArray(val) ? [val] : val;\n }\n\n if (has.call(obj, key)) {\n obj[key] = utils.combine(obj[key], val);\n } else {\n obj[key] = val;\n }\n }\n\n return obj;\n};\n\nvar parseObject = function (chain, val, options, valuesParsed) {\n var leaf = valuesParsed ? val : parseArrayValue(val, options);\n\n for (var i = chain.length - 1; i >= 0; --i) {\n var obj;\n var root = chain[i];\n\n if (root === '[]' && options.parseArrays) {\n obj = [].concat(leaf);\n } else {\n obj = options.plainObjects ? Object.create(null) : {};\n var cleanRoot = root.charAt(0) === '[' && root.charAt(root.length - 1) === ']' ? root.slice(1, -1) : root;\n var index = parseInt(cleanRoot, 10);\n if (!options.parseArrays && cleanRoot === '') {\n obj = { 0: leaf };\n } else if (\n !isNaN(index)\n && root !== cleanRoot\n && String(index) === cleanRoot\n && index >= 0\n && (options.parseArrays && index <= options.arrayLimit)\n ) {\n obj = [];\n obj[index] = leaf;\n } else if (cleanRoot !== '__proto__') {\n obj[cleanRoot] = leaf;\n }\n }\n\n leaf = obj;\n }\n\n return leaf;\n};\n\nvar parseKeys = function parseQueryStringKeys(givenKey, val, options, valuesParsed) {\n if (!givenKey) {\n return;\n }\n\n // Transform dot notation to bracket notation\n var key = options.allowDots ? givenKey.replace(/\\.([^.[]+)/g, '[$1]') : givenKey;\n\n // The regex chunks\n\n var brackets = /(\\[[^[\\]]*])/;\n var child = /(\\[[^[\\]]*])/g;\n\n // Get the parent\n\n var segment = options.depth > 0 && brackets.exec(key);\n var parent = segment ? key.slice(0, segment.index) : key;\n\n // Stash the parent if it exists\n\n var keys = [];\n if (parent) {\n // If we aren't using plain objects, optionally prefix keys that would overwrite object prototype properties\n if (!options.plainObjects && has.call(Object.prototype, parent)) {\n if (!options.allowPrototypes) {\n return;\n }\n }\n\n keys.push(parent);\n }\n\n // Loop through children appending to the array until we hit depth\n\n var i = 0;\n while (options.depth > 0 && (segment = child.exec(key)) !== null && i < options.depth) {\n i += 1;\n if (!options.plainObjects && has.call(Object.prototype, segment[1].slice(1, -1))) {\n if (!options.allowPrototypes) {\n return;\n }\n }\n keys.push(segment[1]);\n }\n\n // If there's a remainder, just add whatever is left\n\n if (segment) {\n keys.push('[' + key.slice(segment.index) + ']');\n }\n\n return parseObject(keys, val, options, valuesParsed);\n};\n\nvar normalizeParseOptions = function normalizeParseOptions(opts) {\n if (!opts) {\n return defaults;\n }\n\n if (opts.decoder !== null && opts.decoder !== undefined && typeof opts.decoder !== 'function') {\n throw new TypeError('Decoder has to be a function.');\n }\n\n if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n }\n var charset = typeof opts.charset === 'undefined' ? defaults.charset : opts.charset;\n\n return {\n allowDots: typeof opts.allowDots === 'undefined' ? defaults.allowDots : !!opts.allowDots,\n allowPrototypes: typeof opts.allowPrototypes === 'boolean' ? opts.allowPrototypes : defaults.allowPrototypes,\n allowSparse: typeof opts.allowSparse === 'boolean' ? opts.allowSparse : defaults.allowSparse,\n arrayLimit: typeof opts.arrayLimit === 'number' ? opts.arrayLimit : defaults.arrayLimit,\n charset: charset,\n charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n comma: typeof opts.comma === 'boolean' ? opts.comma : defaults.comma,\n decoder: typeof opts.decoder === 'function' ? opts.decoder : defaults.decoder,\n delimiter: typeof opts.delimiter === 'string' || utils.isRegExp(opts.delimiter) ? opts.delimiter : defaults.delimiter,\n // eslint-disable-next-line no-implicit-coercion, no-extra-parens\n depth: (typeof opts.depth === 'number' || opts.depth === false) ? +opts.depth : defaults.depth,\n ignoreQueryPrefix: opts.ignoreQueryPrefix === true,\n interpretNumericEntities: typeof opts.interpretNumericEntities === 'boolean' ? opts.interpretNumericEntities : defaults.interpretNumericEntities,\n parameterLimit: typeof opts.parameterLimit === 'number' ? opts.parameterLimit : defaults.parameterLimit,\n parseArrays: opts.parseArrays !== false,\n plainObjects: typeof opts.plainObjects === 'boolean' ? opts.plainObjects : defaults.plainObjects,\n strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling\n };\n};\n\nmodule.exports = function (str, opts) {\n var options = normalizeParseOptions(opts);\n\n if (str === '' || str === null || typeof str === 'undefined') {\n return options.plainObjects ? Object.create(null) : {};\n }\n\n var tempObj = typeof str === 'string' ? parseValues(str, options) : str;\n var obj = options.plainObjects ? Object.create(null) : {};\n\n // Iterate over the keys and setup the new object\n\n var keys = Object.keys(tempObj);\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n var newObj = parseKeys(key, tempObj[key], options, typeof str === 'string');\n obj = utils.merge(obj, newObj, options);\n }\n\n if (options.allowSparse === true) {\n return obj;\n }\n\n return utils.compact(obj);\n};\n", "'use strict';\n\nvar stringify = require('./stringify');\nvar parse = require('./parse');\nvar formats = require('./formats');\n\nmodule.exports = {\n formats: formats,\n parse: parse,\n stringify: stringify\n};\n", "/*!\n * body-parser\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar bytes = require('bytes')\nvar contentType = require('content-type')\nvar createError = require('http-errors')\nvar debug = require('debug')('body-parser:urlencoded')\nvar deprecate = require('depd')('body-parser')\nvar read = require('../read')\nvar typeis = require('type-is')\n\n/**\n * Module exports.\n */\n\nmodule.exports = urlencoded\n\n/**\n * Cache of parser modules.\n */\n\nvar parsers = Object.create(null)\n\n/**\n * Create a middleware to parse urlencoded bodies.\n *\n * @param {object} [options]\n * @return {function}\n * @public\n */\n\nfunction urlencoded (options) {\n var opts = options || {}\n\n // notice because option default will flip in next major\n if (opts.extended === undefined) {\n deprecate('undefined extended: provide extended option')\n }\n\n var extended = opts.extended !== false\n var inflate = opts.inflate !== false\n var limit = typeof opts.limit !== 'number'\n ? bytes.parse(opts.limit || '100kb')\n : opts.limit\n var type = opts.type || 'application/x-www-form-urlencoded'\n var verify = opts.verify || false\n\n if (verify !== false && typeof verify !== 'function') {\n throw new TypeError('option verify must be function')\n }\n\n // create the appropriate query parser\n var queryparse = extended\n ? extendedparser(opts)\n : simpleparser(opts)\n\n // create the appropriate type checking function\n var shouldParse = typeof type !== 'function'\n ? typeChecker(type)\n : type\n\n function parse (body) {\n return body.length\n ? queryparse(body)\n : {}\n }\n\n return function urlencodedParser (req, res, next) {\n if (req._body) {\n debug('body already parsed')\n next()\n return\n }\n\n req.body = req.body || {}\n\n // skip requests without bodies\n if (!typeis.hasBody(req)) {\n debug('skip empty body')\n next()\n return\n }\n\n debug('content-type %j', req.headers['content-type'])\n\n // determine if request should be parsed\n if (!shouldParse(req)) {\n debug('skip parsing')\n next()\n return\n }\n\n // assert charset\n var charset = getCharset(req) || 'utf-8'\n if (charset !== 'utf-8') {\n debug('invalid charset')\n next(createError(415, 'unsupported charset \"' + charset.toUpperCase() + '\"', {\n charset: charset,\n type: 'charset.unsupported'\n }))\n return\n }\n\n // read\n read(req, res, next, parse, debug, {\n debug: debug,\n encoding: charset,\n inflate: inflate,\n limit: limit,\n verify: verify\n })\n }\n}\n\n/**\n * Get the extended query parser.\n *\n * @param {object} options\n */\n\nfunction extendedparser (options) {\n var parameterLimit = options.parameterLimit !== undefined\n ? options.parameterLimit\n : 1000\n var parse = parser('qs')\n\n if (isNaN(parameterLimit) || parameterLimit < 1) {\n throw new TypeError('option parameterLimit must be a positive number')\n }\n\n if (isFinite(parameterLimit)) {\n parameterLimit = parameterLimit | 0\n }\n\n return function queryparse (body) {\n var paramCount = parameterCount(body, parameterLimit)\n\n if (paramCount === undefined) {\n debug('too many parameters')\n throw createError(413, 'too many parameters', {\n type: 'parameters.too.many'\n })\n }\n\n var arrayLimit = Math.max(100, paramCount)\n\n debug('parse extended urlencoding')\n return parse(body, {\n allowPrototypes: true,\n arrayLimit: arrayLimit,\n depth: Infinity,\n parameterLimit: parameterLimit\n })\n }\n}\n\n/**\n * Get the charset of a request.\n *\n * @param {object} req\n * @api private\n */\n\nfunction getCharset (req) {\n try {\n return (contentType.parse(req).parameters.charset || '').toLowerCase()\n } catch (e) {\n return undefined\n }\n}\n\n/**\n * Count the number of parameters, stopping once limit reached\n *\n * @param {string} body\n * @param {number} limit\n * @api private\n */\n\nfunction parameterCount (body, limit) {\n var count = 0\n var index = 0\n\n while ((index = body.indexOf('&', index)) !== -1) {\n count++\n index++\n\n if (count === limit) {\n return undefined\n }\n }\n\n return count\n}\n\n/**\n * Get parser for module name dynamically.\n *\n * @param {string} name\n * @return {function}\n * @api private\n */\n\nfunction parser (name) {\n var mod = parsers[name]\n\n if (mod !== undefined) {\n return mod.parse\n }\n\n // this uses a switch for static require analysis\n switch (name) {\n case 'qs':\n mod = require('qs')\n break\n case 'querystring':\n mod = require('querystring')\n break\n }\n\n // store to prevent invoking require()\n parsers[name] = mod\n\n return mod.parse\n}\n\n/**\n * Get the simple query parser.\n *\n * @param {object} options\n */\n\nfunction simpleparser (options) {\n var parameterLimit = options.parameterLimit !== undefined\n ? options.parameterLimit\n : 1000\n var parse = parser('querystring')\n\n if (isNaN(parameterLimit) || parameterLimit < 1) {\n throw new TypeError('option parameterLimit must be a positive number')\n }\n\n if (isFinite(parameterLimit)) {\n parameterLimit = parameterLimit | 0\n }\n\n return function queryparse (body) {\n var paramCount = parameterCount(body, parameterLimit)\n\n if (paramCount === undefined) {\n debug('too many parameters')\n throw createError(413, 'too many parameters', {\n type: 'parameters.too.many'\n })\n }\n\n debug('parse urlencoding')\n return parse(body, undefined, undefined, { maxKeys: parameterLimit })\n }\n}\n\n/**\n * Get the simple type checker.\n *\n * @param {string} type\n * @return {function}\n */\n\nfunction typeChecker (type) {\n return function checkType (req) {\n return Boolean(typeis(req, type))\n }\n}\n", "/*!\n * body-parser\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar deprecate = require('depd')('body-parser')\n\n/**\n * Cache of loaded parsers.\n * @private\n */\n\nvar parsers = Object.create(null)\n\n/**\n * @typedef Parsers\n * @type {function}\n * @property {function} json\n * @property {function} raw\n * @property {function} text\n * @property {function} urlencoded\n */\n\n/**\n * Module exports.\n * @type {Parsers}\n */\n\nexports = module.exports = deprecate.function(bodyParser,\n 'bodyParser: use individual json/urlencoded middlewares')\n\n/**\n * JSON parser.\n * @public\n */\n\nObject.defineProperty(exports, 'json', {\n configurable: true,\n enumerable: true,\n get: createParserGetter('json')\n})\n\n/**\n * Raw parser.\n * @public\n */\n\nObject.defineProperty(exports, 'raw', {\n configurable: true,\n enumerable: true,\n get: createParserGetter('raw')\n})\n\n/**\n * Text parser.\n * @public\n */\n\nObject.defineProperty(exports, 'text', {\n configurable: true,\n enumerable: true,\n get: createParserGetter('text')\n})\n\n/**\n * URL-encoded parser.\n * @public\n */\n\nObject.defineProperty(exports, 'urlencoded', {\n configurable: true,\n enumerable: true,\n get: createParserGetter('urlencoded')\n})\n\n/**\n * Create a middleware to parse json and urlencoded bodies.\n *\n * @param {object} [options]\n * @return {function}\n * @deprecated\n * @public\n */\n\nfunction bodyParser (options) {\n // use default type for parsers\n var opts = Object.create(options || null, {\n type: {\n configurable: true,\n enumerable: true,\n value: undefined,\n writable: true\n }\n })\n\n var _urlencoded = exports.urlencoded(opts)\n var _json = exports.json(opts)\n\n return function bodyParser (req, res, next) {\n _json(req, res, function (err) {\n if (err) return next(err)\n _urlencoded(req, res, next)\n })\n }\n}\n\n/**\n * Create a getter for loading a parser.\n * @private\n */\n\nfunction createParserGetter (name) {\n return function get () {\n return loadParser(name)\n }\n}\n\n/**\n * Load a parser module.\n * @private\n */\n\nfunction loadParser (parserName) {\n var parser = parsers[parserName]\n\n if (parser !== undefined) {\n return parser\n }\n\n // this uses a switch for static require analysis\n switch (parserName) {\n case 'json':\n parser = require('./lib/types/json')\n break\n case 'raw':\n parser = require('./lib/types/raw')\n break\n case 'text':\n parser = require('./lib/types/text')\n break\n case 'urlencoded':\n parser = require('./lib/types/urlencoded')\n break\n }\n\n // store to prevent invoking require()\n return (parsers[parserName] = parser)\n}\n", "/*!\n * merge-descriptors\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = merge\n\n/**\n * Module variables.\n * @private\n */\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty\n\n/**\n * Merge the property descriptors of `src` into `dest`\n *\n * @param {object} dest Object to add descriptors to\n * @param {object} src Object to clone descriptors from\n * @param {boolean} [redefine=true] Redefine `dest` properties with `src` properties\n * @returns {object} Reference to dest\n * @public\n */\n\nfunction merge(dest, src, redefine) {\n if (!dest) {\n throw new TypeError('argument dest is required')\n }\n\n if (!src) {\n throw new TypeError('argument src is required')\n }\n\n if (redefine === undefined) {\n // Default to true\n redefine = true\n }\n\n Object.getOwnPropertyNames(src).forEach(function forEachOwnPropertyName(name) {\n if (!redefine && hasOwnProperty.call(dest, name)) {\n // Skip desriptor\n return\n }\n\n // Copy descriptor\n var descriptor = Object.getOwnPropertyDescriptor(src, name)\n Object.defineProperty(dest, name, descriptor)\n })\n\n return dest\n}\n", "/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isNaN(val) === false) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^((?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n if (ms >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (ms >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (ms >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (ms >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n return plural(ms, d, 'day') ||\n plural(ms, h, 'hour') ||\n plural(ms, m, 'minute') ||\n plural(ms, s, 'second') ||\n ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, n, name) {\n if (ms < n) {\n return;\n }\n if (ms < n * 1.5) {\n return Math.floor(ms / n) + ' ' + name;\n }\n return Math.ceil(ms / n) + ' ' + name + 's';\n}\n", "\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = createDebug.debug = createDebug['default'] = createDebug;\nexports.coerce = coerce;\nexports.disable = disable;\nexports.enable = enable;\nexports.enabled = enabled;\nexports.humanize = require('ms');\n\n/**\n * The currently active debug mode names, and names to skip.\n */\n\nexports.names = [];\nexports.skips = [];\n\n/**\n * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n *\n * Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n */\n\nexports.formatters = {};\n\n/**\n * Previous log timestamp.\n */\n\nvar prevTime;\n\n/**\n * Select a color.\n * @param {String} namespace\n * @return {Number}\n * @api private\n */\n\nfunction selectColor(namespace) {\n var hash = 0, i;\n\n for (i in namespace) {\n hash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n hash |= 0; // Convert to 32bit integer\n }\n\n return exports.colors[Math.abs(hash) % exports.colors.length];\n}\n\n/**\n * Create a debugger with the given `namespace`.\n *\n * @param {String} namespace\n * @return {Function}\n * @api public\n */\n\nfunction createDebug(namespace) {\n\n function debug() {\n // disabled?\n if (!debug.enabled) return;\n\n var self = debug;\n\n // set `diff` timestamp\n var curr = +new Date();\n var ms = curr - (prevTime || curr);\n self.diff = ms;\n self.prev = prevTime;\n self.curr = curr;\n prevTime = curr;\n\n // turn the `arguments` into a proper Array\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n\n args[0] = exports.coerce(args[0]);\n\n if ('string' !== typeof args[0]) {\n // anything else let's inspect with %O\n args.unshift('%O');\n }\n\n // apply any `formatters` transformations\n var index = 0;\n args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) {\n // if we encounter an escaped % then don't increase the array index\n if (match === '%%') return match;\n index++;\n var formatter = exports.formatters[format];\n if ('function' === typeof formatter) {\n var val = args[index];\n match = formatter.call(self, val);\n\n // now we need to remove `args[index]` since it's inlined in the `format`\n args.splice(index, 1);\n index--;\n }\n return match;\n });\n\n // apply env-specific formatting (colors, etc.)\n exports.formatArgs.call(self, args);\n\n var logFn = debug.log || exports.log || console.log.bind(console);\n logFn.apply(self, args);\n }\n\n debug.namespace = namespace;\n debug.enabled = exports.enabled(namespace);\n debug.useColors = exports.useColors();\n debug.color = selectColor(namespace);\n\n // env-specific initialization logic for debug instances\n if ('function' === typeof exports.init) {\n exports.init(debug);\n }\n\n return debug;\n}\n\n/**\n * Enables a debug mode by namespaces. This can include modes\n * separated by a colon and wildcards.\n *\n * @param {String} namespaces\n * @api public\n */\n\nfunction enable(namespaces) {\n exports.save(namespaces);\n\n exports.names = [];\n exports.skips = [];\n\n var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n var len = split.length;\n\n for (var i = 0; i < len; i++) {\n if (!split[i]) continue; // ignore empty strings\n namespaces = split[i].replace(/\\*/g, '.*?');\n if (namespaces[0] === '-') {\n exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n } else {\n exports.names.push(new RegExp('^' + namespaces + '$'));\n }\n }\n}\n\n/**\n * Disable debug output.\n *\n * @api public\n */\n\nfunction disable() {\n exports.enable('');\n}\n\n/**\n * Returns true if the given mode name is enabled, false otherwise.\n *\n * @param {String} name\n * @return {Boolean}\n * @api public\n */\n\nfunction enabled(name) {\n var i, len;\n for (i = 0, len = exports.skips.length; i < len; i++) {\n if (exports.skips[i].test(name)) {\n return false;\n }\n }\n for (i = 0, len = exports.names.length; i < len; i++) {\n if (exports.names[i].test(name)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Coerce `val`.\n *\n * @param {Mixed} val\n * @return {Mixed}\n * @api private\n */\n\nfunction coerce(val) {\n if (val instanceof Error) return val.stack || val.message;\n return val;\n}\n", "/**\n * This is the web browser implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = 'undefined' != typeof chrome\n && 'undefined' != typeof chrome.storage\n ? chrome.storage.local\n : localstorage();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n 'lightseagreen',\n 'forestgreen',\n 'goldenrod',\n 'dodgerblue',\n 'darkorchid',\n 'crimson'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\nfunction useColors() {\n // NB: In an Electron preload script, document will be defined but not fully\n // initialized. Since we know we're in Chrome, we'll just detect this case\n // explicitly\n if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {\n return true;\n }\n\n // is webkit? http://stackoverflow.com/a/16459606/376773\n // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n // is firebug? http://stackoverflow.com/a/398120/376773\n (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n // is firefox >= v31?\n // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n // double check webkit in userAgent just in case we are in a worker\n (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nexports.formatters.j = function(v) {\n try {\n return JSON.stringify(v);\n } catch (err) {\n return '[UnexpectedJSONParseError]: ' + err.message;\n }\n};\n\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n var useColors = this.useColors;\n\n args[0] = (useColors ? '%c' : '')\n + this.namespace\n + (useColors ? ' %c' : ' ')\n + args[0]\n + (useColors ? '%c ' : ' ')\n + '+' + exports.humanize(this.diff);\n\n if (!useColors) return;\n\n var c = 'color: ' + this.color;\n args.splice(1, 0, c, 'color: inherit')\n\n // the final \"%c\" is somewhat tricky, because there could be other\n // arguments passed either before or after the %c, so we need to\n // figure out the correct index to insert the CSS into\n var index = 0;\n var lastC = 0;\n args[0].replace(/%[a-zA-Z%]/g, function(match) {\n if ('%%' === match) return;\n index++;\n if ('%c' === match) {\n // we only are interested in the *last* %c\n // (the user may have provided their own)\n lastC = index;\n }\n });\n\n args.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\n\nfunction log() {\n // this hackery is required for IE8/9, where\n // the `console.log` function doesn't have 'apply'\n return 'object' === typeof console\n && console.log\n && Function.prototype.apply.call(console.log, console, arguments);\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n try {\n if (null == namespaces) {\n exports.storage.removeItem('debug');\n } else {\n exports.storage.debug = namespaces;\n }\n } catch(e) {}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n var r;\n try {\n r = exports.storage.debug;\n } catch(e) {}\n\n // If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n if (!r && typeof process !== 'undefined' && 'env' in process) {\n r = process.env.DEBUG;\n }\n\n return r;\n}\n\n/**\n * Enable namespaces listed in `localStorage.debug` initially.\n */\n\nexports.enable(load());\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n try {\n return window.localStorage;\n } catch (e) {}\n}\n", "/**\n * Module dependencies.\n */\n\nvar tty = require('tty');\nvar util = require('util');\n\n/**\n * This is the Node.js implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.init = init;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\n\n/**\n * Colors.\n */\n\nexports.colors = [6, 2, 3, 4, 5, 1];\n\n/**\n * Build up the default `inspectOpts` object from the environment variables.\n *\n * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js\n */\n\nexports.inspectOpts = Object.keys(process.env).filter(function (key) {\n return /^debug_/i.test(key);\n}).reduce(function (obj, key) {\n // camel-case\n var prop = key\n .substring(6)\n .toLowerCase()\n .replace(/_([a-z])/g, function (_, k) { return k.toUpperCase() });\n\n // coerce string value into JS value\n var val = process.env[key];\n if (/^(yes|on|true|enabled)$/i.test(val)) val = true;\n else if (/^(no|off|false|disabled)$/i.test(val)) val = false;\n else if (val === 'null') val = null;\n else val = Number(val);\n\n obj[prop] = val;\n return obj;\n}, {});\n\n/**\n * The file descriptor to write the `debug()` calls to.\n * Set the `DEBUG_FD` env variable to override with another value. i.e.:\n *\n * $ DEBUG_FD=3 node script.js 3>debug.log\n */\n\nvar fd = parseInt(process.env.DEBUG_FD, 10) || 2;\n\nif (1 !== fd && 2 !== fd) {\n util.deprecate(function(){}, 'except for stderr(2) and stdout(1), any other usage of DEBUG_FD is deprecated. Override debug.log if you want to use a different log function (https://git.io/debug_fd)')()\n}\n\nvar stream = 1 === fd ? process.stdout :\n 2 === fd ? process.stderr :\n createWritableStdioStream(fd);\n\n/**\n * Is stdout a TTY? Colored output is enabled when `true`.\n */\n\nfunction useColors() {\n return 'colors' in exports.inspectOpts\n ? Boolean(exports.inspectOpts.colors)\n : tty.isatty(fd);\n}\n\n/**\n * Map %o to `util.inspect()`, all on a single line.\n */\n\nexports.formatters.o = function(v) {\n this.inspectOpts.colors = this.useColors;\n return util.inspect(v, this.inspectOpts)\n .split('\\n').map(function(str) {\n return str.trim()\n }).join(' ');\n};\n\n/**\n * Map %o to `util.inspect()`, allowing multiple lines if needed.\n */\n\nexports.formatters.O = function(v) {\n this.inspectOpts.colors = this.useColors;\n return util.inspect(v, this.inspectOpts);\n};\n\n/**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n var name = this.namespace;\n var useColors = this.useColors;\n\n if (useColors) {\n var c = this.color;\n var prefix = ' \\u001b[3' + c + ';1m' + name + ' ' + '\\u001b[0m';\n\n args[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n args.push('\\u001b[3' + c + 'm+' + exports.humanize(this.diff) + '\\u001b[0m');\n } else {\n args[0] = new Date().toUTCString()\n + ' ' + name + ' ' + args[0];\n }\n}\n\n/**\n * Invokes `util.format()` with the specified arguments and writes to `stream`.\n */\n\nfunction log() {\n return stream.write(util.format.apply(util, arguments) + '\\n');\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n if (null == namespaces) {\n // If you set a process.env field to null or undefined, it gets cast to the\n // string 'null' or 'undefined'. Just delete instead.\n delete process.env.DEBUG;\n } else {\n process.env.DEBUG = namespaces;\n }\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n return process.env.DEBUG;\n}\n\n/**\n * Copied from `node/src/node.js`.\n *\n * XXX: It's lame that node doesn't expose this API out-of-the-box. It also\n * relies on the undocumented `tty_wrap.guessHandleType()` which is also lame.\n */\n\nfunction createWritableStdioStream (fd) {\n var stream;\n var tty_wrap = process.binding('tty_wrap');\n\n // Note stream._type is used for test-module-load-list.js\n\n switch (tty_wrap.guessHandleType(fd)) {\n case 'TTY':\n stream = new tty.WriteStream(fd);\n stream._type = 'tty';\n\n // Hack to have stream not keep the event loop alive.\n // See https://github.com/joyent/node/issues/1726\n if (stream._handle && stream._handle.unref) {\n stream._handle.unref();\n }\n break;\n\n case 'FILE':\n var fs = require('fs');\n stream = new fs.SyncWriteStream(fd, { autoClose: false });\n stream._type = 'fs';\n break;\n\n case 'PIPE':\n case 'TCP':\n var net = require('net');\n stream = new net.Socket({\n fd: fd,\n readable: false,\n writable: true\n });\n\n // FIXME Should probably have an option in net.Socket to create a\n // stream from an existing fd which is writable only. But for now\n // we'll just add this hack and set the `readable` member to false.\n // Test: ./node test/fixtures/echo.js < /etc/passwd\n stream.readable = false;\n stream.read = null;\n stream._type = 'pipe';\n\n // FIXME Hack to have stream not keep the event loop alive.\n // See https://github.com/joyent/node/issues/1726\n if (stream._handle && stream._handle.unref) {\n stream._handle.unref();\n }\n break;\n\n default:\n // Probably an error on in uv_guess_handle()\n throw new Error('Implement me. Unknown stream file type!');\n }\n\n // For supporting legacy API we put the FD here.\n stream.fd = fd;\n\n stream._isStdio = true;\n\n return stream;\n}\n\n/**\n * Init logic for `debug` instances.\n *\n * Create a new `inspectOpts` object in case `useColors` is set\n * differently for a particular `debug` instance.\n */\n\nfunction init (debug) {\n debug.inspectOpts = {};\n\n var keys = Object.keys(exports.inspectOpts);\n for (var i = 0; i < keys.length; i++) {\n debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];\n }\n}\n\n/**\n * Enable namespaces listed in `process.env.DEBUG` initially.\n */\n\nexports.enable(load());\n", "/**\n * Detect Electron renderer process, which is node, but we should\n * treat as a browser.\n */\n\nif (typeof process !== 'undefined' && process.type === 'renderer') {\n module.exports = require('./browser.js');\n} else {\n module.exports = require('./node.js');\n}\n", "/*!\n * encodeurl\n * Copyright(c) 2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = encodeUrl\n\n/**\n * RegExp to match non-URL code points, *after* encoding (i.e. not including \"%\")\n * and including invalid escape sequences.\n * @private\n */\n\nvar ENCODE_CHARS_REGEXP = /(?:[^\\x21\\x25\\x26-\\x3B\\x3D\\x3F-\\x5B\\x5D\\x5F\\x61-\\x7A\\x7E]|%(?:[^0-9A-Fa-f]|[0-9A-Fa-f][^0-9A-Fa-f]|$))+/g\n\n/**\n * RegExp to match unmatched surrogate pair.\n * @private\n */\n\nvar UNMATCHED_SURROGATE_PAIR_REGEXP = /(^|[^\\uD800-\\uDBFF])[\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF]([^\\uDC00-\\uDFFF]|$)/g\n\n/**\n * String to replace unmatched surrogate pair with.\n * @private\n */\n\nvar UNMATCHED_SURROGATE_PAIR_REPLACE = '$1\\uFFFD$2'\n\n/**\n * Encode a URL to a percent-encoded form, excluding already-encoded sequences.\n *\n * This function will take an already-encoded URL and encode all the non-URL\n * code points. This function will not encode the \"%\" character unless it is\n * not part of a valid sequence (`%20` will be left as-is, but `%foo` will\n * be encoded as `%25foo`).\n *\n * This encode is meant to be \"safe\" and does not throw errors. It will try as\n * hard as it can to properly encode the given URL, including replacing any raw,\n * unpaired surrogate pairs with the Unicode replacement character prior to\n * encoding.\n *\n * @param {string} url\n * @return {string}\n * @public\n */\n\nfunction encodeUrl (url) {\n return String(url)\n .replace(UNMATCHED_SURROGATE_PAIR_REGEXP, UNMATCHED_SURROGATE_PAIR_REPLACE)\n .replace(ENCODE_CHARS_REGEXP, encodeURI)\n}\n", "/*!\n * escape-html\n * Copyright(c) 2012-2013 TJ Holowaychuk\n * Copyright(c) 2015 Andreas Lubbe\n * Copyright(c) 2015 Tiancheng \"Timothy\" Gu\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module variables.\n * @private\n */\n\nvar matchHtmlRegExp = /[\"'&<>]/;\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = escapeHtml;\n\n/**\n * Escape special characters in the given string of html.\n *\n * @param {string} string The string to escape for inserting into HTML\n * @return {string}\n * @public\n */\n\nfunction escapeHtml(string) {\n var str = '' + string;\n var match = matchHtmlRegExp.exec(str);\n\n if (!match) {\n return str;\n }\n\n var escape;\n var html = '';\n var index = 0;\n var lastIndex = 0;\n\n for (index = match.index; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34: // \"\n escape = '&quot;';\n break;\n case 38: // &\n escape = '&amp;';\n break;\n case 39: // '\n escape = '&#39;';\n break;\n case 60: // <\n escape = '&lt;';\n break;\n case 62: // >\n escape = '&gt;';\n break;\n default:\n continue;\n }\n\n if (lastIndex !== index) {\n html += str.substring(lastIndex, index);\n }\n\n lastIndex = index + 1;\n html += escape;\n }\n\n return lastIndex !== index\n ? html + str.substring(lastIndex, index)\n : html;\n}\n", "/*!\n * parseurl\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2014-2017 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar url = require('url')\nvar parse = url.parse\nvar Url = url.Url\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = parseurl\nmodule.exports.original = originalurl\n\n/**\n * Parse the `req` url with memoization.\n *\n * @param {ServerRequest} req\n * @return {Object}\n * @public\n */\n\nfunction parseurl (req) {\n var url = req.url\n\n if (url === undefined) {\n // URL is undefined\n return undefined\n }\n\n var parsed = req._parsedUrl\n\n if (fresh(url, parsed)) {\n // Return cached URL parse\n return parsed\n }\n\n // Parse the URL\n parsed = fastparse(url)\n parsed._raw = url\n\n return (req._parsedUrl = parsed)\n};\n\n/**\n * Parse the `req` original url with fallback and memoization.\n *\n * @param {ServerRequest} req\n * @return {Object}\n * @public\n */\n\nfunction originalurl (req) {\n var url = req.originalUrl\n\n if (typeof url !== 'string') {\n // Fallback\n return parseurl(req)\n }\n\n var parsed = req._parsedOriginalUrl\n\n if (fresh(url, parsed)) {\n // Return cached URL parse\n return parsed\n }\n\n // Parse the URL\n parsed = fastparse(url)\n parsed._raw = url\n\n return (req._parsedOriginalUrl = parsed)\n};\n\n/**\n * Parse the `str` url with fast-path short-cut.\n *\n * @param {string} str\n * @return {Object}\n * @private\n */\n\nfunction fastparse (str) {\n if (typeof str !== 'string' || str.charCodeAt(0) !== 0x2f /* / */) {\n return parse(str)\n }\n\n var pathname = str\n var query = null\n var search = null\n\n // This takes the regexp from https://github.com/joyent/node/pull/7878\n // Which is /^(\\/[^?#\\s]*)(\\?[^#\\s]*)?$/\n // And unrolls it into a for loop\n for (var i = 1; i < str.length; i++) {\n switch (str.charCodeAt(i)) {\n case 0x3f: /* ? */\n if (search === null) {\n pathname = str.substring(0, i)\n query = str.substring(i + 1)\n search = str.substring(i)\n }\n break\n case 0x09: /* \\t */\n case 0x0a: /* \\n */\n case 0x0c: /* \\f */\n case 0x0d: /* \\r */\n case 0x20: /* */\n case 0x23: /* # */\n case 0xa0:\n case 0xfeff:\n return parse(str)\n }\n }\n\n var url = Url !== undefined\n ? new Url()\n : {}\n\n url.path = str\n url.href = str\n url.pathname = pathname\n\n if (search !== null) {\n url.query = query\n url.search = search\n }\n\n return url\n}\n\n/**\n * Determine if parsed is still fresh for url.\n *\n * @param {string} url\n * @param {object} parsedUrl\n * @return {boolean}\n * @private\n */\n\nfunction fresh (url, parsedUrl) {\n return typeof parsedUrl === 'object' &&\n parsedUrl !== null &&\n (Url === undefined || parsedUrl instanceof Url) &&\n parsedUrl._raw === url\n}\n", "/*!\n * finalhandler\n * Copyright(c) 2014-2022 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar debug = require('debug')('finalhandler')\nvar encodeUrl = require('encodeurl')\nvar escapeHtml = require('escape-html')\nvar onFinished = require('on-finished')\nvar parseUrl = require('parseurl')\nvar statuses = require('statuses')\nvar unpipe = require('unpipe')\n\n/**\n * Module variables.\n * @private\n */\n\nvar DOUBLE_SPACE_REGEXP = /\\x20{2}/g\nvar NEWLINE_REGEXP = /\\n/g\n\n/* istanbul ignore next */\nvar defer = typeof setImmediate === 'function'\n ? setImmediate\n : function (fn) { process.nextTick(fn.bind.apply(fn, arguments)) }\nvar isFinished = onFinished.isFinished\n\n/**\n * Create a minimal HTML document.\n *\n * @param {string} message\n * @private\n */\n\nfunction createHtmlDocument (message) {\n var body = escapeHtml(message)\n .replace(NEWLINE_REGEXP, '<br>')\n .replace(DOUBLE_SPACE_REGEXP, ' &nbsp;')\n\n return '<!DOCTYPE html>\\n' +\n '<html lang=\"en\">\\n' +\n '<head>\\n' +\n '<meta charset=\"utf-8\">\\n' +\n '<title>Error</title>\\n' +\n '</head>\\n' +\n '<body>\\n' +\n '<pre>' + body + '</pre>\\n' +\n '</body>\\n' +\n '</html>\\n'\n}\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = finalhandler\n\n/**\n * Create a function to handle the final response.\n *\n * @param {Request} req\n * @param {Response} res\n * @param {Object} [options]\n * @return {Function}\n * @public\n */\n\nfunction finalhandler (req, res, options) {\n var opts = options || {}\n\n // get environment\n var env = opts.env || process.env.NODE_ENV || 'development'\n\n // get error callback\n var onerror = opts.onerror\n\n return function (err) {\n var headers\n var msg\n var status\n\n // ignore 404 on in-flight response\n if (!err && headersSent(res)) {\n debug('cannot 404 after headers sent')\n return\n }\n\n // unhandled error\n if (err) {\n // respect status code from error\n status = getErrorStatusCode(err)\n\n if (status === undefined) {\n // fallback to status code on response\n status = getResponseStatusCode(res)\n } else {\n // respect headers from error\n headers = getErrorHeaders(err)\n }\n\n // get error message\n msg = getErrorMessage(err, status, env)\n } else {\n // not found\n status = 404\n msg = 'Cannot ' + req.method + ' ' + encodeUrl(getResourceName(req))\n }\n\n debug('default %s', status)\n\n // schedule onerror callback\n if (err && onerror) {\n defer(onerror, err, req, res)\n }\n\n // cannot actually respond\n if (headersSent(res)) {\n debug('cannot %d after headers sent', status)\n req.socket.destroy()\n return\n }\n\n // send response\n send(req, res, status, headers, msg)\n }\n}\n\n/**\n * Get headers from Error object.\n *\n * @param {Error} err\n * @return {object}\n * @private\n */\n\nfunction getErrorHeaders (err) {\n if (!err.headers || typeof err.headers !== 'object') {\n return undefined\n }\n\n var headers = Object.create(null)\n var keys = Object.keys(err.headers)\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i]\n headers[key] = err.headers[key]\n }\n\n return headers\n}\n\n/**\n * Get message from Error object, fallback to status message.\n *\n * @param {Error} err\n * @param {number} status\n * @param {string} env\n * @return {string}\n * @private\n */\n\nfunction getErrorMessage (err, status, env) {\n var msg\n\n if (env !== 'production') {\n // use err.stack, which typically includes err.message\n msg = err.stack\n\n // fallback to err.toString() when possible\n if (!msg && typeof err.toString === 'function') {\n msg = err.toString()\n }\n }\n\n return msg || statuses.message[status]\n}\n\n/**\n * Get status code from Error object.\n *\n * @param {Error} err\n * @return {number}\n * @private\n */\n\nfunction getErrorStatusCode (err) {\n // check err.status\n if (typeof err.status === 'number' && err.status >= 400 && err.status < 600) {\n return err.status\n }\n\n // check err.statusCode\n if (typeof err.statusCode === 'number' && err.statusCode >= 400 && err.statusCode < 600) {\n return err.statusCode\n }\n\n return undefined\n}\n\n/**\n * Get resource name for the request.\n *\n * This is typically just the original pathname of the request\n * but will fallback to \"resource\" is that cannot be determined.\n *\n * @param {IncomingMessage} req\n * @return {string}\n * @private\n */\n\nfunction getResourceName (req) {\n try {\n return parseUrl.original(req).pathname\n } catch (e) {\n return 'resource'\n }\n}\n\n/**\n * Get status code from response.\n *\n * @param {OutgoingMessage} res\n * @return {number}\n * @private\n */\n\nfunction getResponseStatusCode (res) {\n var status = res.statusCode\n\n // default status code to 500 if outside valid range\n if (typeof status !== 'number' || status < 400 || status > 599) {\n status = 500\n }\n\n return status\n}\n\n/**\n * Determine if the response headers have been sent.\n *\n * @param {object} res\n * @returns {boolean}\n * @private\n */\n\nfunction headersSent (res) {\n return typeof res.headersSent !== 'boolean'\n ? Boolean(res._header)\n : res.headersSent\n}\n\n/**\n * Send response.\n *\n * @param {IncomingMessage} req\n * @param {OutgoingMessage} res\n * @param {number} status\n * @param {object} headers\n * @param {string} message\n * @private\n */\n\nfunction send (req, res, status, headers, message) {\n function write () {\n // response body\n var body = createHtmlDocument(message)\n\n // response status\n res.statusCode = status\n res.statusMessage = statuses.message[status]\n\n // remove any content headers\n res.removeHeader('Content-Encoding')\n res.removeHeader('Content-Language')\n res.removeHeader('Content-Range')\n\n // response headers\n setHeaders(res, headers)\n\n // security headers\n res.setHeader('Content-Security-Policy', \"default-src 'none'\")\n res.setHeader('X-Content-Type-Options', 'nosniff')\n\n // standard headers\n res.setHeader('Content-Type', 'text/html; charset=utf-8')\n res.setHeader('Content-Length', Buffer.byteLength(body, 'utf8'))\n\n if (req.method === 'HEAD') {\n res.end()\n return\n }\n\n res.end(body, 'utf8')\n }\n\n if (isFinished(req)) {\n write()\n return\n }\n\n // unpipe everything from the request\n unpipe(req)\n\n // flush the request\n onFinished(req, write)\n req.resume()\n}\n\n/**\n * Set response headers from an object.\n *\n * @param {OutgoingMessage} res\n * @param {object} headers\n * @private\n */\n\nfunction setHeaders (res, headers) {\n if (!headers) {\n return\n }\n\n var keys = Object.keys(headers)\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i]\n res.setHeader(key, headers[key])\n }\n}\n", "/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isNaN(val) === false) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^((?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n if (ms >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (ms >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (ms >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (ms >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n return plural(ms, d, 'day') ||\n plural(ms, h, 'hour') ||\n plural(ms, m, 'minute') ||\n plural(ms, s, 'second') ||\n ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, n, name) {\n if (ms < n) {\n return;\n }\n if (ms < n * 1.5) {\n return Math.floor(ms / n) + ' ' + name;\n }\n return Math.ceil(ms / n) + ' ' + name + 's';\n}\n", "\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = createDebug.debug = createDebug['default'] = createDebug;\nexports.coerce = coerce;\nexports.disable = disable;\nexports.enable = enable;\nexports.enabled = enabled;\nexports.humanize = require('ms');\n\n/**\n * The currently active debug mode names, and names to skip.\n */\n\nexports.names = [];\nexports.skips = [];\n\n/**\n * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n *\n * Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n */\n\nexports.formatters = {};\n\n/**\n * Previous log timestamp.\n */\n\nvar prevTime;\n\n/**\n * Select a color.\n * @param {String} namespace\n * @return {Number}\n * @api private\n */\n\nfunction selectColor(namespace) {\n var hash = 0, i;\n\n for (i in namespace) {\n hash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n hash |= 0; // Convert to 32bit integer\n }\n\n return exports.colors[Math.abs(hash) % exports.colors.length];\n}\n\n/**\n * Create a debugger with the given `namespace`.\n *\n * @param {String} namespace\n * @return {Function}\n * @api public\n */\n\nfunction createDebug(namespace) {\n\n function debug() {\n // disabled?\n if (!debug.enabled) return;\n\n var self = debug;\n\n // set `diff` timestamp\n var curr = +new Date();\n var ms = curr - (prevTime || curr);\n self.diff = ms;\n self.prev = prevTime;\n self.curr = curr;\n prevTime = curr;\n\n // turn the `arguments` into a proper Array\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n\n args[0] = exports.coerce(args[0]);\n\n if ('string' !== typeof args[0]) {\n // anything else let's inspect with %O\n args.unshift('%O');\n }\n\n // apply any `formatters` transformations\n var index = 0;\n args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) {\n // if we encounter an escaped % then don't increase the array index\n if (match === '%%') return match;\n index++;\n var formatter = exports.formatters[format];\n if ('function' === typeof formatter) {\n var val = args[index];\n match = formatter.call(self, val);\n\n // now we need to remove `args[index]` since it's inlined in the `format`\n args.splice(index, 1);\n index--;\n }\n return match;\n });\n\n // apply env-specific formatting (colors, etc.)\n exports.formatArgs.call(self, args);\n\n var logFn = debug.log || exports.log || console.log.bind(console);\n logFn.apply(self, args);\n }\n\n debug.namespace = namespace;\n debug.enabled = exports.enabled(namespace);\n debug.useColors = exports.useColors();\n debug.color = selectColor(namespace);\n\n // env-specific initialization logic for debug instances\n if ('function' === typeof exports.init) {\n exports.init(debug);\n }\n\n return debug;\n}\n\n/**\n * Enables a debug mode by namespaces. This can include modes\n * separated by a colon and wildcards.\n *\n * @param {String} namespaces\n * @api public\n */\n\nfunction enable(namespaces) {\n exports.save(namespaces);\n\n exports.names = [];\n exports.skips = [];\n\n var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n var len = split.length;\n\n for (var i = 0; i < len; i++) {\n if (!split[i]) continue; // ignore empty strings\n namespaces = split[i].replace(/\\*/g, '.*?');\n if (namespaces[0] === '-') {\n exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n } else {\n exports.names.push(new RegExp('^' + namespaces + '$'));\n }\n }\n}\n\n/**\n * Disable debug output.\n *\n * @api public\n */\n\nfunction disable() {\n exports.enable('');\n}\n\n/**\n * Returns true if the given mode name is enabled, false otherwise.\n *\n * @param {String} name\n * @return {Boolean}\n * @api public\n */\n\nfunction enabled(name) {\n var i, len;\n for (i = 0, len = exports.skips.length; i < len; i++) {\n if (exports.skips[i].test(name)) {\n return false;\n }\n }\n for (i = 0, len = exports.names.length; i < len; i++) {\n if (exports.names[i].test(name)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Coerce `val`.\n *\n * @param {Mixed} val\n * @return {Mixed}\n * @api private\n */\n\nfunction coerce(val) {\n if (val instanceof Error) return val.stack || val.message;\n return val;\n}\n", "/**\n * This is the web browser implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = 'undefined' != typeof chrome\n && 'undefined' != typeof chrome.storage\n ? chrome.storage.local\n : localstorage();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n 'lightseagreen',\n 'forestgreen',\n 'goldenrod',\n 'dodgerblue',\n 'darkorchid',\n 'crimson'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\nfunction useColors() {\n // NB: In an Electron preload script, document will be defined but not fully\n // initialized. Since we know we're in Chrome, we'll just detect this case\n // explicitly\n if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {\n return true;\n }\n\n // is webkit? http://stackoverflow.com/a/16459606/376773\n // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n // is firebug? http://stackoverflow.com/a/398120/376773\n (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n // is firefox >= v31?\n // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n // double check webkit in userAgent just in case we are in a worker\n (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nexports.formatters.j = function(v) {\n try {\n return JSON.stringify(v);\n } catch (err) {\n return '[UnexpectedJSONParseError]: ' + err.message;\n }\n};\n\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n var useColors = this.useColors;\n\n args[0] = (useColors ? '%c' : '')\n + this.namespace\n + (useColors ? ' %c' : ' ')\n + args[0]\n + (useColors ? '%c ' : ' ')\n + '+' + exports.humanize(this.diff);\n\n if (!useColors) return;\n\n var c = 'color: ' + this.color;\n args.splice(1, 0, c, 'color: inherit')\n\n // the final \"%c\" is somewhat tricky, because there could be other\n // arguments passed either before or after the %c, so we need to\n // figure out the correct index to insert the CSS into\n var index = 0;\n var lastC = 0;\n args[0].replace(/%[a-zA-Z%]/g, function(match) {\n if ('%%' === match) return;\n index++;\n if ('%c' === match) {\n // we only are interested in the *last* %c\n // (the user may have provided their own)\n lastC = index;\n }\n });\n\n args.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\n\nfunction log() {\n // this hackery is required for IE8/9, where\n // the `console.log` function doesn't have 'apply'\n return 'object' === typeof console\n && console.log\n && Function.prototype.apply.call(console.log, console, arguments);\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n try {\n if (null == namespaces) {\n exports.storage.removeItem('debug');\n } else {\n exports.storage.debug = namespaces;\n }\n } catch(e) {}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n var r;\n try {\n r = exports.storage.debug;\n } catch(e) {}\n\n // If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n if (!r && typeof process !== 'undefined' && 'env' in process) {\n r = process.env.DEBUG;\n }\n\n return r;\n}\n\n/**\n * Enable namespaces listed in `localStorage.debug` initially.\n */\n\nexports.enable(load());\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n try {\n return window.localStorage;\n } catch (e) {}\n}\n", "/**\n * Module dependencies.\n */\n\nvar tty = require('tty');\nvar util = require('util');\n\n/**\n * This is the Node.js implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.init = init;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\n\n/**\n * Colors.\n */\n\nexports.colors = [6, 2, 3, 4, 5, 1];\n\n/**\n * Build up the default `inspectOpts` object from the environment variables.\n *\n * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js\n */\n\nexports.inspectOpts = Object.keys(process.env).filter(function (key) {\n return /^debug_/i.test(key);\n}).reduce(function (obj, key) {\n // camel-case\n var prop = key\n .substring(6)\n .toLowerCase()\n .replace(/_([a-z])/g, function (_, k) { return k.toUpperCase() });\n\n // coerce string value into JS value\n var val = process.env[key];\n if (/^(yes|on|true|enabled)$/i.test(val)) val = true;\n else if (/^(no|off|false|disabled)$/i.test(val)) val = false;\n else if (val === 'null') val = null;\n else val = Number(val);\n\n obj[prop] = val;\n return obj;\n}, {});\n\n/**\n * The file descriptor to write the `debug()` calls to.\n * Set the `DEBUG_FD` env variable to override with another value. i.e.:\n *\n * $ DEBUG_FD=3 node script.js 3>debug.log\n */\n\nvar fd = parseInt(process.env.DEBUG_FD, 10) || 2;\n\nif (1 !== fd && 2 !== fd) {\n util.deprecate(function(){}, 'except for stderr(2) and stdout(1), any other usage of DEBUG_FD is deprecated. Override debug.log if you want to use a different log function (https://git.io/debug_fd)')()\n}\n\nvar stream = 1 === fd ? process.stdout :\n 2 === fd ? process.stderr :\n createWritableStdioStream(fd);\n\n/**\n * Is stdout a TTY? Colored output is enabled when `true`.\n */\n\nfunction useColors() {\n return 'colors' in exports.inspectOpts\n ? Boolean(exports.inspectOpts.colors)\n : tty.isatty(fd);\n}\n\n/**\n * Map %o to `util.inspect()`, all on a single line.\n */\n\nexports.formatters.o = function(v) {\n this.inspectOpts.colors = this.useColors;\n return util.inspect(v, this.inspectOpts)\n .split('\\n').map(function(str) {\n return str.trim()\n }).join(' ');\n};\n\n/**\n * Map %o to `util.inspect()`, allowing multiple lines if needed.\n */\n\nexports.formatters.O = function(v) {\n this.inspectOpts.colors = this.useColors;\n return util.inspect(v, this.inspectOpts);\n};\n\n/**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n var name = this.namespace;\n var useColors = this.useColors;\n\n if (useColors) {\n var c = this.color;\n var prefix = ' \\u001b[3' + c + ';1m' + name + ' ' + '\\u001b[0m';\n\n args[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n args.push('\\u001b[3' + c + 'm+' + exports.humanize(this.diff) + '\\u001b[0m');\n } else {\n args[0] = new Date().toUTCString()\n + ' ' + name + ' ' + args[0];\n }\n}\n\n/**\n * Invokes `util.format()` with the specified arguments and writes to `stream`.\n */\n\nfunction log() {\n return stream.write(util.format.apply(util, arguments) + '\\n');\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n if (null == namespaces) {\n // If you set a process.env field to null or undefined, it gets cast to the\n // string 'null' or 'undefined'. Just delete instead.\n delete process.env.DEBUG;\n } else {\n process.env.DEBUG = namespaces;\n }\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n return process.env.DEBUG;\n}\n\n/**\n * Copied from `node/src/node.js`.\n *\n * XXX: It's lame that node doesn't expose this API out-of-the-box. It also\n * relies on the undocumented `tty_wrap.guessHandleType()` which is also lame.\n */\n\nfunction createWritableStdioStream (fd) {\n var stream;\n var tty_wrap = process.binding('tty_wrap');\n\n // Note stream._type is used for test-module-load-list.js\n\n switch (tty_wrap.guessHandleType(fd)) {\n case 'TTY':\n stream = new tty.WriteStream(fd);\n stream._type = 'tty';\n\n // Hack to have stream not keep the event loop alive.\n // See https://github.com/joyent/node/issues/1726\n if (stream._handle && stream._handle.unref) {\n stream._handle.unref();\n }\n break;\n\n case 'FILE':\n var fs = require('fs');\n stream = new fs.SyncWriteStream(fd, { autoClose: false });\n stream._type = 'fs';\n break;\n\n case 'PIPE':\n case 'TCP':\n var net = require('net');\n stream = new net.Socket({\n fd: fd,\n readable: false,\n writable: true\n });\n\n // FIXME Should probably have an option in net.Socket to create a\n // stream from an existing fd which is writable only. But for now\n // we'll just add this hack and set the `readable` member to false.\n // Test: ./node test/fixtures/echo.js < /etc/passwd\n stream.readable = false;\n stream.read = null;\n stream._type = 'pipe';\n\n // FIXME Hack to have stream not keep the event loop alive.\n // See https://github.com/joyent/node/issues/1726\n if (stream._handle && stream._handle.unref) {\n stream._handle.unref();\n }\n break;\n\n default:\n // Probably an error on in uv_guess_handle()\n throw new Error('Implement me. Unknown stream file type!');\n }\n\n // For supporting legacy API we put the FD here.\n stream.fd = fd;\n\n stream._isStdio = true;\n\n return stream;\n}\n\n/**\n * Init logic for `debug` instances.\n *\n * Create a new `inspectOpts` object in case `useColors` is set\n * differently for a particular `debug` instance.\n */\n\nfunction init (debug) {\n debug.inspectOpts = {};\n\n var keys = Object.keys(exports.inspectOpts);\n for (var i = 0; i < keys.length; i++) {\n debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];\n }\n}\n\n/**\n * Enable namespaces listed in `process.env.DEBUG` initially.\n */\n\nexports.enable(load());\n", "/**\n * Detect Electron renderer process, which is node, but we should\n * treat as a browser.\n */\n\nif (typeof process !== 'undefined' && process.type === 'renderer') {\n module.exports = require('./browser.js');\n} else {\n module.exports = require('./node.js');\n}\n", "'use strict'\n\n/**\n * Expose `arrayFlatten`.\n */\nmodule.exports = arrayFlatten\n\n/**\n * Recursive flatten function with depth.\n *\n * @param {Array} array\n * @param {Array} result\n * @param {Number} depth\n * @return {Array}\n */\nfunction flattenWithDepth (array, result, depth) {\n for (var i = 0; i < array.length; i++) {\n var value = array[i]\n\n if (depth > 0 && Array.isArray(value)) {\n flattenWithDepth(value, result, depth - 1)\n } else {\n result.push(value)\n }\n }\n\n return result\n}\n\n/**\n * Recursive flatten function. Omitting depth is slightly faster.\n *\n * @param {Array} array\n * @param {Array} result\n * @return {Array}\n */\nfunction flattenForever (array, result) {\n for (var i = 0; i < array.length; i++) {\n var value = array[i]\n\n if (Array.isArray(value)) {\n flattenForever(value, result)\n } else {\n result.push(value)\n }\n }\n\n return result\n}\n\n/**\n * Flatten an array, with the ability to define a depth.\n *\n * @param {Array} array\n * @param {Number} depth\n * @return {Array}\n */\nfunction arrayFlatten (array, depth) {\n if (depth == null) {\n return flattenForever(array, [])\n }\n\n return flattenWithDepth(array, [], depth)\n}\n", "/**\n * Expose `pathtoRegexp`.\n */\n\nmodule.exports = pathtoRegexp;\n\n/**\n * Match matching groups in a regular expression.\n */\nvar MATCHING_GROUP_REGEXP = /\\((?!\\?)/g;\n\n/**\n * Normalize the given path string,\n * returning a regular expression.\n *\n * An empty array should be passed,\n * which will contain the placeholder\n * key names. For example \"/user/:id\" will\n * then contain [\"id\"].\n *\n * @param {String|RegExp|Array} path\n * @param {Array} keys\n * @param {Object} options\n * @return {RegExp}\n * @api private\n */\n\nfunction pathtoRegexp(path, keys, options) {\n options = options || {};\n keys = keys || [];\n var strict = options.strict;\n var end = options.end !== false;\n var flags = options.sensitive ? '' : 'i';\n var extraOffset = 0;\n var keysOffset = keys.length;\n var i = 0;\n var name = 0;\n var m;\n\n if (path instanceof RegExp) {\n while (m = MATCHING_GROUP_REGEXP.exec(path.source)) {\n keys.push({\n name: name++,\n optional: false,\n offset: m.index\n });\n }\n\n return path;\n }\n\n if (Array.isArray(path)) {\n // Map array parts into regexps and return their source. We also pass\n // the same keys and options instance into every generation to get\n // consistent matching groups before we join the sources together.\n path = path.map(function (value) {\n return pathtoRegexp(value, keys, options).source;\n });\n\n return new RegExp('(?:' + path.join('|') + ')', flags);\n }\n\n path = ('^' + path + (strict ? '' : path[path.length - 1] === '/' ? '?' : '/?'))\n .replace(/\\/\\(/g, '/(?:')\n .replace(/([\\/\\.])/g, '\\\\$1')\n .replace(/(\\\\\\/)?(\\\\\\.)?:(\\w+)(\\(.*?\\))?(\\*)?(\\?)?/g, function (match, slash, format, key, capture, star, optional, offset) {\n slash = slash || '';\n format = format || '';\n capture = capture || '([^\\\\/' + format + ']+?)';\n optional = optional || '';\n\n keys.push({\n name: key,\n optional: !!optional,\n offset: offset + extraOffset\n });\n\n var result = ''\n + (optional ? '' : slash)\n + '(?:'\n + format + (optional ? slash : '') + capture\n + (star ? '((?:[\\\\/' + format + '].+?)?)' : '')\n + ')'\n + optional;\n\n extraOffset += result.length - match.length;\n\n return result;\n })\n .replace(/\\*/g, function (star, index) {\n var len = keys.length\n\n while (len-- > keysOffset && keys[len].offset > index) {\n keys[len].offset += 3; // Replacement length minus asterisk length.\n }\n\n return '(.*)';\n });\n\n // This is a workaround for handling unnamed matching groups.\n while (m = MATCHING_GROUP_REGEXP.exec(path)) {\n var escapeCount = 0;\n var index = m.index;\n\n while (path.charAt(--index) === '\\\\') {\n escapeCount++;\n }\n\n // It's possible to escape the bracket.\n if (escapeCount % 2 === 1) {\n continue;\n }\n\n if (keysOffset + i === keys.length || keys[keysOffset + i].offset > m.index) {\n keys.splice(keysOffset + i, 0, {\n name: name++, // Unnamed matching groups must be consistently linear.\n optional: false,\n offset: m.index\n });\n }\n\n i++;\n }\n\n // If the path is non-ending, match until the end or a slash.\n path += (end ? '$' : (path[path.length - 1] === '/' ? '' : '(?=\\\\/|$)'));\n\n return new RegExp(path, flags);\n};\n", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2013 Roman Shtylman\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar pathRegexp = require('path-to-regexp');\nvar debug = require('debug')('express:router:layer');\n\n/**\n * Module variables.\n * @private\n */\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = Layer;\n\nfunction Layer(path, options, fn) {\n if (!(this instanceof Layer)) {\n return new Layer(path, options, fn);\n }\n\n debug('new %o', path)\n var opts = options || {};\n\n this.handle = fn;\n this.name = fn.name || '<anonymous>';\n this.params = undefined;\n this.path = undefined;\n this.regexp = pathRegexp(path, this.keys = [], opts);\n\n // set fast path flags\n this.regexp.fast_star = path === '*'\n this.regexp.fast_slash = path === '/' && opts.end === false\n}\n\n/**\n * Handle the error for the layer.\n *\n * @param {Error} error\n * @param {Request} req\n * @param {Response} res\n * @param {function} next\n * @api private\n */\n\nLayer.prototype.handle_error = function handle_error(error, req, res, next) {\n var fn = this.handle;\n\n if (fn.length !== 4) {\n // not a standard error handler\n return next(error);\n }\n\n try {\n fn(error, req, res, next);\n } catch (err) {\n next(err);\n }\n};\n\n/**\n * Handle the request for the layer.\n *\n * @param {Request} req\n * @param {Response} res\n * @param {function} next\n * @api private\n */\n\nLayer.prototype.handle_request = function handle(req, res, next) {\n var fn = this.handle;\n\n if (fn.length > 3) {\n // not a standard request handler\n return next();\n }\n\n try {\n fn(req, res, next);\n } catch (err) {\n next(err);\n }\n};\n\n/**\n * Check if this route matches `path`, if so\n * populate `.params`.\n *\n * @param {String} path\n * @return {Boolean}\n * @api private\n */\n\nLayer.prototype.match = function match(path) {\n var match\n\n if (path != null) {\n // fast path non-ending match for / (any path matches)\n if (this.regexp.fast_slash) {\n this.params = {}\n this.path = ''\n return true\n }\n\n // fast path for * (everything matched in a param)\n if (this.regexp.fast_star) {\n this.params = {'0': decode_param(path)}\n this.path = path\n return true\n }\n\n // match the path\n match = this.regexp.exec(path)\n }\n\n if (!match) {\n this.params = undefined;\n this.path = undefined;\n return false;\n }\n\n // store values\n this.params = {};\n this.path = match[0]\n\n var keys = this.keys;\n var params = this.params;\n\n for (var i = 1; i < match.length; i++) {\n var key = keys[i - 1];\n var prop = key.name;\n var val = decode_param(match[i])\n\n if (val !== undefined || !(hasOwnProperty.call(params, prop))) {\n params[prop] = val;\n }\n }\n\n return true;\n};\n\n/**\n * Decode param value.\n *\n * @param {string} val\n * @return {string}\n * @private\n */\n\nfunction decode_param(val) {\n if (typeof val !== 'string' || val.length === 0) {\n return val;\n }\n\n try {\n return decodeURIComponent(val);\n } catch (err) {\n if (err instanceof URIError) {\n err.message = 'Failed to decode param \\'' + val + '\\'';\n err.status = err.statusCode = 400;\n }\n\n throw err;\n }\n}\n", "/*!\n * methods\n * Copyright(c) 2013-2014 TJ Holowaychuk\n * Copyright(c) 2015-2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar http = require('http');\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = getCurrentNodeMethods() || getBasicNodeMethods();\n\n/**\n * Get the current Node.js methods.\n * @private\n */\n\nfunction getCurrentNodeMethods() {\n return http.METHODS && http.METHODS.map(function lowerCaseMethod(method) {\n return method.toLowerCase();\n });\n}\n\n/**\n * Get the \"basic\" Node.js methods, a snapshot from Node.js 0.10.\n * @private\n */\n\nfunction getBasicNodeMethods() {\n return [\n 'get',\n 'post',\n 'put',\n 'head',\n 'delete',\n 'options',\n 'trace',\n 'copy',\n 'lock',\n 'mkcol',\n 'move',\n 'purge',\n 'propfind',\n 'proppatch',\n 'unlock',\n 'report',\n 'mkactivity',\n 'checkout',\n 'merge',\n 'm-search',\n 'notify',\n 'subscribe',\n 'unsubscribe',\n 'patch',\n 'search',\n 'connect'\n ];\n}\n", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2013 Roman Shtylman\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar debug = require('debug')('express:router:route');\nvar flatten = require('array-flatten');\nvar Layer = require('./layer');\nvar methods = require('methods');\n\n/**\n * Module variables.\n * @private\n */\n\nvar slice = Array.prototype.slice;\nvar toString = Object.prototype.toString;\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = Route;\n\n/**\n * Initialize `Route` with the given `path`,\n *\n * @param {String} path\n * @public\n */\n\nfunction Route(path) {\n this.path = path;\n this.stack = [];\n\n debug('new %o', path)\n\n // route handlers for various http methods\n this.methods = {};\n}\n\n/**\n * Determine if the route handles a given method.\n * @private\n */\n\nRoute.prototype._handles_method = function _handles_method(method) {\n if (this.methods._all) {\n return true;\n }\n\n var name = method.toLowerCase();\n\n if (name === 'head' && !this.methods['head']) {\n name = 'get';\n }\n\n return Boolean(this.methods[name]);\n};\n\n/**\n * @return {Array} supported HTTP methods\n * @private\n */\n\nRoute.prototype._options = function _options() {\n var methods = Object.keys(this.methods);\n\n // append automatic head\n if (this.methods.get && !this.methods.head) {\n methods.push('head');\n }\n\n for (var i = 0; i < methods.length; i++) {\n // make upper case\n methods[i] = methods[i].toUpperCase();\n }\n\n return methods;\n};\n\n/**\n * dispatch req, res into this route\n * @private\n */\n\nRoute.prototype.dispatch = function dispatch(req, res, done) {\n var idx = 0;\n var stack = this.stack;\n var sync = 0\n\n if (stack.length === 0) {\n return done();\n }\n\n var method = req.method.toLowerCase();\n if (method === 'head' && !this.methods['head']) {\n method = 'get';\n }\n\n req.route = this;\n\n next();\n\n function next(err) {\n // signal to exit route\n if (err && err === 'route') {\n return done();\n }\n\n // signal to exit router\n if (err && err === 'router') {\n return done(err)\n }\n\n // max sync stack\n if (++sync > 100) {\n return setImmediate(next, err)\n }\n\n var layer = stack[idx++]\n\n // end of layers\n if (!layer) {\n return done(err)\n }\n\n if (layer.method && layer.method !== method) {\n next(err)\n } else if (err) {\n layer.handle_error(err, req, res, next);\n } else {\n layer.handle_request(req, res, next);\n }\n\n sync = 0\n }\n};\n\n/**\n * Add a handler for all HTTP verbs to this route.\n *\n * Behaves just like middleware and can respond or call `next`\n * to continue processing.\n *\n * You can use multiple `.all` call to add multiple handlers.\n *\n * function check_something(req, res, next){\n * next();\n * };\n *\n * function validate_user(req, res, next){\n * next();\n * };\n *\n * route\n * .all(validate_user)\n * .all(check_something)\n * .get(function(req, res, next){\n * res.send('hello world');\n * });\n *\n * @param {function} handler\n * @return {Route} for chaining\n * @api public\n */\n\nRoute.prototype.all = function all() {\n var handles = flatten(slice.call(arguments));\n\n for (var i = 0; i < handles.length; i++) {\n var handle = handles[i];\n\n if (typeof handle !== 'function') {\n var type = toString.call(handle);\n var msg = 'Route.all() requires a callback function but got a ' + type\n throw new TypeError(msg);\n }\n\n var layer = Layer('/', {}, handle);\n layer.method = undefined;\n\n this.methods._all = true;\n this.stack.push(layer);\n }\n\n return this;\n};\n\nmethods.forEach(function(method){\n Route.prototype[method] = function(){\n var handles = flatten(slice.call(arguments));\n\n for (var i = 0; i < handles.length; i++) {\n var handle = handles[i];\n\n if (typeof handle !== 'function') {\n var type = toString.call(handle);\n var msg = 'Route.' + method + '() requires a callback function but got a ' + type\n throw new Error(msg);\n }\n\n debug('%s %o', method, this.path)\n\n var layer = Layer('/', {}, handle);\n layer.method = method;\n\n this.methods[method] = true;\n this.stack.push(layer);\n }\n\n return this;\n };\n});\n", "/**\n * Merge object b with object a.\n *\n * var a = { foo: 'bar' }\n * , b = { bar: 'baz' };\n *\n * merge(a, b);\n * // => { foo: 'bar', bar: 'baz' }\n *\n * @param {Object} a\n * @param {Object} b\n * @return {Object}\n * @api public\n */\n\nexports = module.exports = function(a, b){\n if (a && b) {\n for (var key in b) {\n a[key] = b[key];\n }\n }\n return a;\n};\n", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2013 Roman Shtylman\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar Route = require('./route');\nvar Layer = require('./layer');\nvar methods = require('methods');\nvar mixin = require('utils-merge');\nvar debug = require('debug')('express:router');\nvar deprecate = require('depd')('express');\nvar flatten = require('array-flatten');\nvar parseUrl = require('parseurl');\nvar setPrototypeOf = require('setprototypeof')\n\n/**\n * Module variables.\n * @private\n */\n\nvar objectRegExp = /^\\[object (\\S+)\\]$/;\nvar slice = Array.prototype.slice;\nvar toString = Object.prototype.toString;\n\n/**\n * Initialize a new `Router` with the given `options`.\n *\n * @param {Object} [options]\n * @return {Router} which is an callable function\n * @public\n */\n\nvar proto = module.exports = function(options) {\n var opts = options || {};\n\n function router(req, res, next) {\n router.handle(req, res, next);\n }\n\n // mixin Router class functions\n setPrototypeOf(router, proto)\n\n router.params = {};\n router._params = [];\n router.caseSensitive = opts.caseSensitive;\n router.mergeParams = opts.mergeParams;\n router.strict = opts.strict;\n router.stack = [];\n\n return router;\n};\n\n/**\n * Map the given param placeholder `name`(s) to the given callback.\n *\n * Parameter mapping is used to provide pre-conditions to routes\n * which use normalized placeholders. For example a _:user_id_ parameter\n * could automatically load a user's information from the database without\n * any additional code,\n *\n * The callback uses the same signature as middleware, the only difference\n * being that the value of the placeholder is passed, in this case the _id_\n * of the user. Once the `next()` function is invoked, just like middleware\n * it will continue on to execute the route, or subsequent parameter functions.\n *\n * Just like in middleware, you must either respond to the request or call next\n * to avoid stalling the request.\n *\n * app.param('user_id', function(req, res, next, id){\n * User.find(id, function(err, user){\n * if (err) {\n * return next(err);\n * } else if (!user) {\n * return next(new Error('failed to load user'));\n * }\n * req.user = user;\n * next();\n * });\n * });\n *\n * @param {String} name\n * @param {Function} fn\n * @return {app} for chaining\n * @public\n */\n\nproto.param = function param(name, fn) {\n // param logic\n if (typeof name === 'function') {\n deprecate('router.param(fn): Refactor to use path params');\n this._params.push(name);\n return;\n }\n\n // apply param functions\n var params = this._params;\n var len = params.length;\n var ret;\n\n if (name[0] === ':') {\n deprecate('router.param(' + JSON.stringify(name) + ', fn): Use router.param(' + JSON.stringify(name.slice(1)) + ', fn) instead')\n name = name.slice(1)\n }\n\n for (var i = 0; i < len; ++i) {\n if (ret = params[i](name, fn)) {\n fn = ret;\n }\n }\n\n // ensure we end up with a\n // middleware function\n if ('function' !== typeof fn) {\n throw new Error('invalid param() call for ' + name + ', got ' + fn);\n }\n\n (this.params[name] = this.params[name] || []).push(fn);\n return this;\n};\n\n/**\n * Dispatch a req, res into the router.\n * @private\n */\n\nproto.handle = function handle(req, res, out) {\n var self = this;\n\n debug('dispatching %s %s', req.method, req.url);\n\n var idx = 0;\n var protohost = getProtohost(req.url) || ''\n var removed = '';\n var slashAdded = false;\n var sync = 0\n var paramcalled = {};\n\n // store options for OPTIONS request\n // only used if OPTIONS request\n var options = [];\n\n // middleware and routes\n var stack = self.stack;\n\n // manage inter-router variables\n var parentParams = req.params;\n var parentUrl = req.baseUrl || '';\n var done = restore(out, req, 'baseUrl', 'next', 'params');\n\n // setup next layer\n req.next = next;\n\n // for options requests, respond with a default if nothing else responds\n if (req.method === 'OPTIONS') {\n done = wrap(done, function(old, err) {\n if (err || options.length === 0) return old(err);\n sendOptionsResponse(res, options, old);\n });\n }\n\n // setup basic req values\n req.baseUrl = parentUrl;\n req.originalUrl = req.originalUrl || req.url;\n\n next();\n\n function next(err) {\n var layerError = err === 'route'\n ? null\n : err;\n\n // remove added slash\n if (slashAdded) {\n req.url = req.url.slice(1)\n slashAdded = false;\n }\n\n // restore altered req.url\n if (removed.length !== 0) {\n req.baseUrl = parentUrl;\n req.url = protohost + removed + req.url.slice(protohost.length)\n removed = '';\n }\n\n // signal to exit router\n if (layerError === 'router') {\n setImmediate(done, null)\n return\n }\n\n // no more matching layers\n if (idx >= stack.length) {\n setImmediate(done, layerError);\n return;\n }\n\n // max sync stack\n if (++sync > 100) {\n return setImmediate(next, err)\n }\n\n // get pathname of request\n var path = getPathname(req);\n\n if (path == null) {\n return done(layerError);\n }\n\n // find next matching layer\n var layer;\n var match;\n var route;\n\n while (match !== true && idx < stack.length) {\n layer = stack[idx++];\n match = matchLayer(layer, path);\n route = layer.route;\n\n if (typeof match !== 'boolean') {\n // hold on to layerError\n layerError = layerError || match;\n }\n\n if (match !== true) {\n continue;\n }\n\n if (!route) {\n // process non-route handlers normally\n continue;\n }\n\n if (layerError) {\n // routes do not match with a pending error\n match = false;\n continue;\n }\n\n var method = req.method;\n var has_method = route._handles_method(method);\n\n // build up automatic options response\n if (!has_method && method === 'OPTIONS') {\n appendMethods(options, route._options());\n }\n\n // don't even bother matching route\n if (!has_method && method !== 'HEAD') {\n match = false;\n }\n }\n\n // no match\n if (match !== true) {\n return done(layerError);\n }\n\n // store route for dispatch on change\n if (route) {\n req.route = route;\n }\n\n // Capture one-time layer values\n req.params = self.mergeParams\n ? mergeParams(layer.params, parentParams)\n : layer.params;\n var layerPath = layer.path;\n\n // this should be done for the layer\n self.process_params(layer, paramcalled, req, res, function (err) {\n if (err) {\n next(layerError || err)\n } else if (route) {\n layer.handle_request(req, res, next)\n } else {\n trim_prefix(layer, layerError, layerPath, path)\n }\n\n sync = 0\n });\n }\n\n function trim_prefix(layer, layerError, layerPath, path) {\n if (layerPath.length !== 0) {\n // Validate path is a prefix match\n if (layerPath !== path.slice(0, layerPath.length)) {\n next(layerError)\n return\n }\n\n // Validate path breaks on a path separator\n var c = path[layerPath.length]\n if (c && c !== '/' && c !== '.') return next(layerError)\n\n // Trim off the part of the url that matches the route\n // middleware (.use stuff) needs to have the path stripped\n debug('trim prefix (%s) from url %s', layerPath, req.url);\n removed = layerPath;\n req.url = protohost + req.url.slice(protohost.length + removed.length)\n\n // Ensure leading slash\n if (!protohost && req.url[0] !== '/') {\n req.url = '/' + req.url;\n slashAdded = true;\n }\n\n // Setup base URL (no trailing slash)\n req.baseUrl = parentUrl + (removed[removed.length - 1] === '/'\n ? removed.substring(0, removed.length - 1)\n : removed);\n }\n\n debug('%s %s : %s', layer.name, layerPath, req.originalUrl);\n\n if (layerError) {\n layer.handle_error(layerError, req, res, next);\n } else {\n layer.handle_request(req, res, next);\n }\n }\n};\n\n/**\n * Process any parameters for the layer.\n * @private\n */\n\nproto.process_params = function process_params(layer, called, req, res, done) {\n var params = this.params;\n\n // captured parameters from the layer, keys and values\n var keys = layer.keys;\n\n // fast track\n if (!keys || keys.length === 0) {\n return done();\n }\n\n var i = 0;\n var name;\n var paramIndex = 0;\n var key;\n var paramVal;\n var paramCallbacks;\n var paramCalled;\n\n // process params in order\n // param callbacks can be async\n function param(err) {\n if (err) {\n return done(err);\n }\n\n if (i >= keys.length ) {\n return done();\n }\n\n paramIndex = 0;\n key = keys[i++];\n name = key.name;\n paramVal = req.params[name];\n paramCallbacks = params[name];\n paramCalled = called[name];\n\n if (paramVal === undefined || !paramCallbacks) {\n return param();\n }\n\n // param previously called with same value or error occurred\n if (paramCalled && (paramCalled.match === paramVal\n || (paramCalled.error && paramCalled.error !== 'route'))) {\n // restore value\n req.params[name] = paramCalled.value;\n\n // next param\n return param(paramCalled.error);\n }\n\n called[name] = paramCalled = {\n error: null,\n match: paramVal,\n value: paramVal\n };\n\n paramCallback();\n }\n\n // single param callbacks\n function paramCallback(err) {\n var fn = paramCallbacks[paramIndex++];\n\n // store updated value\n paramCalled.value = req.params[key.name];\n\n if (err) {\n // store error\n paramCalled.error = err;\n param(err);\n return;\n }\n\n if (!fn) return param();\n\n try {\n fn(req, res, paramCallback, paramVal, key.name);\n } catch (e) {\n paramCallback(e);\n }\n }\n\n param();\n};\n\n/**\n * Use the given middleware function, with optional path, defaulting to \"/\".\n *\n * Use (like `.all`) will run for any http METHOD, but it will not add\n * handlers for those methods so OPTIONS requests will not consider `.use`\n * functions even if they could respond.\n *\n * The other difference is that _route_ path is stripped and not visible\n * to the handler function. The main effect of this feature is that mounted\n * handlers can operate without any code changes regardless of the \"prefix\"\n * pathname.\n *\n * @public\n */\n\nproto.use = function use(fn) {\n var offset = 0;\n var path = '/';\n\n // default path to '/'\n // disambiguate router.use([fn])\n if (typeof fn !== 'function') {\n var arg = fn;\n\n while (Array.isArray(arg) && arg.length !== 0) {\n arg = arg[0];\n }\n\n // first arg is the path\n if (typeof arg !== 'function') {\n offset = 1;\n path = fn;\n }\n }\n\n var callbacks = flatten(slice.call(arguments, offset));\n\n if (callbacks.length === 0) {\n throw new TypeError('Router.use() requires a middleware function')\n }\n\n for (var i = 0; i < callbacks.length; i++) {\n var fn = callbacks[i];\n\n if (typeof fn !== 'function') {\n throw new TypeError('Router.use() requires a middleware function but got a ' + gettype(fn))\n }\n\n // add the middleware\n debug('use %o %s', path, fn.name || '<anonymous>')\n\n var layer = new Layer(path, {\n sensitive: this.caseSensitive,\n strict: false,\n end: false\n }, fn);\n\n layer.route = undefined;\n\n this.stack.push(layer);\n }\n\n return this;\n};\n\n/**\n * Create a new Route for the given path.\n *\n * Each route contains a separate middleware stack and VERB handlers.\n *\n * See the Route api documentation for details on adding handlers\n * and middleware to routes.\n *\n * @param {String} path\n * @return {Route}\n * @public\n */\n\nproto.route = function route(path) {\n var route = new Route(path);\n\n var layer = new Layer(path, {\n sensitive: this.caseSensitive,\n strict: this.strict,\n end: true\n }, route.dispatch.bind(route));\n\n layer.route = route;\n\n this.stack.push(layer);\n return route;\n};\n\n// create Router#VERB functions\nmethods.concat('all').forEach(function(method){\n proto[method] = function(path){\n var route = this.route(path)\n route[method].apply(route, slice.call(arguments, 1));\n return this;\n };\n});\n\n// append methods to a list of methods\nfunction appendMethods(list, addition) {\n for (var i = 0; i < addition.length; i++) {\n var method = addition[i];\n if (list.indexOf(method) === -1) {\n list.push(method);\n }\n }\n}\n\n// get pathname of request\nfunction getPathname(req) {\n try {\n return parseUrl(req).pathname;\n } catch (err) {\n return undefined;\n }\n}\n\n// Get get protocol + host for a URL\nfunction getProtohost(url) {\n if (typeof url !== 'string' || url.length === 0 || url[0] === '/') {\n return undefined\n }\n\n var searchIndex = url.indexOf('?')\n var pathLength = searchIndex !== -1\n ? searchIndex\n : url.length\n var fqdnIndex = url.slice(0, pathLength).indexOf('://')\n\n return fqdnIndex !== -1\n ? url.substring(0, url.indexOf('/', 3 + fqdnIndex))\n : undefined\n}\n\n// get type for error message\nfunction gettype(obj) {\n var type = typeof obj;\n\n if (type !== 'object') {\n return type;\n }\n\n // inspect [[Class]] for objects\n return toString.call(obj)\n .replace(objectRegExp, '$1');\n}\n\n/**\n * Match path to a layer.\n *\n * @param {Layer} layer\n * @param {string} path\n * @private\n */\n\nfunction matchLayer(layer, path) {\n try {\n return layer.match(path);\n } catch (err) {\n return err;\n }\n}\n\n// merge params with parent params\nfunction mergeParams(params, parent) {\n if (typeof parent !== 'object' || !parent) {\n return params;\n }\n\n // make copy of parent for base\n var obj = mixin({}, parent);\n\n // simple non-numeric merging\n if (!(0 in params) || !(0 in parent)) {\n return mixin(obj, params);\n }\n\n var i = 0;\n var o = 0;\n\n // determine numeric gaps\n while (i in params) {\n i++;\n }\n\n while (o in parent) {\n o++;\n }\n\n // offset numeric indices in params before merge\n for (i--; i >= 0; i--) {\n params[i + o] = params[i];\n\n // create holes for the merge when necessary\n if (i < o) {\n delete params[i];\n }\n }\n\n return mixin(obj, params);\n}\n\n// restore obj props after function\nfunction restore(fn, obj) {\n var props = new Array(arguments.length - 2);\n var vals = new Array(arguments.length - 2);\n\n for (var i = 0; i < props.length; i++) {\n props[i] = arguments[i + 2];\n vals[i] = obj[props[i]];\n }\n\n return function () {\n // restore vals\n for (var i = 0; i < props.length; i++) {\n obj[props[i]] = vals[i];\n }\n\n return fn.apply(this, arguments);\n };\n}\n\n// send an OPTIONS response\nfunction sendOptionsResponse(res, options, next) {\n try {\n var body = options.join(',');\n res.set('Allow', body);\n res.send(body);\n } catch (err) {\n next(err);\n }\n}\n\n// wrap a function\nfunction wrap(old, fn) {\n return function proxy() {\n var args = new Array(arguments.length + 1);\n\n args[0] = old;\n for (var i = 0, len = arguments.length; i < len; i++) {\n args[i + 1] = arguments[i];\n }\n\n fn.apply(this, args);\n };\n}\n", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2013 Roman Shtylman\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar setPrototypeOf = require('setprototypeof')\n\n/**\n * Initialization middleware, exposing the\n * request and response to each other, as well\n * as defaulting the X-Powered-By header field.\n *\n * @param {Function} app\n * @return {Function}\n * @api private\n */\n\nexports.init = function(app){\n return function expressInit(req, res, next){\n if (app.enabled('x-powered-by')) res.setHeader('X-Powered-By', 'Express');\n req.res = res;\n res.req = req;\n req.next = next;\n\n setPrototypeOf(req, app.request)\n setPrototypeOf(res, app.response)\n\n res.locals = res.locals || Object.create(null);\n\n next();\n };\n};\n\n", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2013 Roman Shtylman\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n */\n\nvar merge = require('utils-merge')\nvar parseUrl = require('parseurl');\nvar qs = require('qs');\n\n/**\n * @param {Object} options\n * @return {Function}\n * @api public\n */\n\nmodule.exports = function query(options) {\n var opts = merge({}, options)\n var queryparse = qs.parse;\n\n if (typeof options === 'function') {\n queryparse = options;\n opts = undefined;\n }\n\n if (opts !== undefined && opts.allowPrototypes === undefined) {\n // back-compat for qs module\n opts.allowPrototypes = true;\n }\n\n return function query(req, res, next){\n if (!req.query) {\n var val = parseUrl(req).query;\n req.query = queryparse(val, opts);\n }\n\n next();\n };\n};\n", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2013 Roman Shtylman\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar debug = require('debug')('express:view');\nvar path = require('path');\nvar fs = require('fs');\n\n/**\n * Module variables.\n * @private\n */\n\nvar dirname = path.dirname;\nvar basename = path.basename;\nvar extname = path.extname;\nvar join = path.join;\nvar resolve = path.resolve;\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = View;\n\n/**\n * Initialize a new `View` with the given `name`.\n *\n * Options:\n *\n * - `defaultEngine` the default template engine name\n * - `engines` template engine require() cache\n * - `root` root path for view lookup\n *\n * @param {string} name\n * @param {object} options\n * @public\n */\n\nfunction View(name, options) {\n var opts = options || {};\n\n this.defaultEngine = opts.defaultEngine;\n this.ext = extname(name);\n this.name = name;\n this.root = opts.root;\n\n if (!this.ext && !this.defaultEngine) {\n throw new Error('No default engine was specified and no extension was provided.');\n }\n\n var fileName = name;\n\n if (!this.ext) {\n // get extension from default engine name\n this.ext = this.defaultEngine[0] !== '.'\n ? '.' + this.defaultEngine\n : this.defaultEngine;\n\n fileName += this.ext;\n }\n\n if (!opts.engines[this.ext]) {\n // load engine\n var mod = this.ext.slice(1)\n debug('require \"%s\"', mod)\n\n // default engine export\n var fn = require(mod).__express\n\n if (typeof fn !== 'function') {\n throw new Error('Module \"' + mod + '\" does not provide a view engine.')\n }\n\n opts.engines[this.ext] = fn\n }\n\n // store loaded engine\n this.engine = opts.engines[this.ext];\n\n // lookup path\n this.path = this.lookup(fileName);\n}\n\n/**\n * Lookup view by the given `name`\n *\n * @param {string} name\n * @private\n */\n\nView.prototype.lookup = function lookup(name) {\n var path;\n var roots = [].concat(this.root);\n\n debug('lookup \"%s\"', name);\n\n for (var i = 0; i < roots.length && !path; i++) {\n var root = roots[i];\n\n // resolve the path\n var loc = resolve(root, name);\n var dir = dirname(loc);\n var file = basename(loc);\n\n // resolve the file\n path = this.resolve(dir, file);\n }\n\n return path;\n};\n\n/**\n * Render with the given options.\n *\n * @param {object} options\n * @param {function} callback\n * @private\n */\n\nView.prototype.render = function render(options, callback) {\n debug('render \"%s\"', this.path);\n this.engine(this.path, options, callback);\n};\n\n/**\n * Resolve the file within the given directory.\n *\n * @param {string} dir\n * @param {string} file\n * @private\n */\n\nView.prototype.resolve = function resolve(dir, file) {\n var ext = this.ext;\n\n // <path>.<ext>\n var path = join(dir, file);\n var stat = tryStat(path);\n\n if (stat && stat.isFile()) {\n return path;\n }\n\n // <path>/index.<ext>\n path = join(dir, basename(file, ext), 'index' + ext);\n stat = tryStat(path);\n\n if (stat && stat.isFile()) {\n return path;\n }\n};\n\n/**\n * Return a stat, maybe.\n *\n * @param {string} path\n * @return {fs.Stats}\n * @private\n */\n\nfunction tryStat(path) {\n debug('stat \"%s\"', path);\n\n try {\n return fs.statSync(path);\n } catch (e) {\n return undefined;\n }\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", "/*!\n * content-disposition\n * Copyright(c) 2014-2017 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = contentDisposition\nmodule.exports.parse = parse\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar basename = require('path').basename\nvar Buffer = require('safe-buffer').Buffer\n\n/**\n * RegExp to match non attr-char, *after* encodeURIComponent (i.e. not including \"%\")\n * @private\n */\n\nvar ENCODE_URL_ATTR_CHAR_REGEXP = /[\\x00-\\x20\"'()*,/:;<=>?@[\\\\\\]{}\\x7f]/g // eslint-disable-line no-control-regex\n\n/**\n * RegExp to match percent encoding escape.\n * @private\n */\n\nvar HEX_ESCAPE_REGEXP = /%[0-9A-Fa-f]{2}/\nvar HEX_ESCAPE_REPLACE_REGEXP = /%([0-9A-Fa-f]{2})/g\n\n/**\n * RegExp to match non-latin1 characters.\n * @private\n */\n\nvar NON_LATIN1_REGEXP = /[^\\x20-\\x7e\\xa0-\\xff]/g\n\n/**\n * RegExp to match quoted-pair in RFC 2616\n *\n * quoted-pair = \"\\\" CHAR\n * CHAR = <any US-ASCII character (octets 0 - 127)>\n * @private\n */\n\nvar QESC_REGEXP = /\\\\([\\u0000-\\u007f])/g // eslint-disable-line no-control-regex\n\n/**\n * RegExp to match chars that must be quoted-pair in RFC 2616\n * @private\n */\n\nvar QUOTE_REGEXP = /([\\\\\"])/g\n\n/**\n * RegExp for various RFC 2616 grammar\n *\n * parameter = token \"=\" ( token | quoted-string )\n * token = 1*<any CHAR except CTLs or separators>\n * separators = \"(\" | \")\" | \"<\" | \">\" | \"@\"\n * | \",\" | \";\" | \":\" | \"\\\" | <\">\n * | \"/\" | \"[\" | \"]\" | \"?\" | \"=\"\n * | \"{\" | \"}\" | SP | HT\n * quoted-string = ( <\"> *(qdtext | quoted-pair ) <\"> )\n * qdtext = <any TEXT except <\">>\n * quoted-pair = \"\\\" CHAR\n * CHAR = <any US-ASCII character (octets 0 - 127)>\n * TEXT = <any OCTET except CTLs, but including LWS>\n * LWS = [CRLF] 1*( SP | HT )\n * CRLF = CR LF\n * CR = <US-ASCII CR, carriage return (13)>\n * LF = <US-ASCII LF, linefeed (10)>\n * SP = <US-ASCII SP, space (32)>\n * HT = <US-ASCII HT, horizontal-tab (9)>\n * CTL = <any US-ASCII control character (octets 0 - 31) and DEL (127)>\n * OCTET = <any 8-bit sequence of data>\n * @private\n */\n\nvar PARAM_REGEXP = /;[\\x09\\x20]*([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\\x09\\x20]*=[\\x09\\x20]*(\"(?:[\\x20!\\x23-\\x5b\\x5d-\\x7e\\x80-\\xff]|\\\\[\\x20-\\x7e])*\"|[!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\\x09\\x20]*/g // eslint-disable-line no-control-regex\nvar TEXT_REGEXP = /^[\\x20-\\x7e\\x80-\\xff]+$/\nvar TOKEN_REGEXP = /^[!#$%&'*+.0-9A-Z^_`a-z|~-]+$/\n\n/**\n * RegExp for various RFC 5987 grammar\n *\n * ext-value = charset \"'\" [ language ] \"'\" value-chars\n * charset = \"UTF-8\" / \"ISO-8859-1\" / mime-charset\n * mime-charset = 1*mime-charsetc\n * mime-charsetc = ALPHA / DIGIT\n * / \"!\" / \"#\" / \"$\" / \"%\" / \"&\"\n * / \"+\" / \"-\" / \"^\" / \"_\" / \"`\"\n * / \"{\" / \"}\" / \"~\"\n * language = ( 2*3ALPHA [ extlang ] )\n * / 4ALPHA\n * / 5*8ALPHA\n * extlang = *3( \"-\" 3ALPHA )\n * value-chars = *( pct-encoded / attr-char )\n * pct-encoded = \"%\" HEXDIG HEXDIG\n * attr-char = ALPHA / DIGIT\n * / \"!\" / \"#\" / \"$\" / \"&\" / \"+\" / \"-\" / \".\"\n * / \"^\" / \"_\" / \"`\" / \"|\" / \"~\"\n * @private\n */\n\nvar EXT_VALUE_REGEXP = /^([A-Za-z0-9!#$%&+\\-^_`{}~]+)'(?:[A-Za-z]{2,3}(?:-[A-Za-z]{3}){0,3}|[A-Za-z]{4,8}|)'((?:%[0-9A-Fa-f]{2}|[A-Za-z0-9!#$&+.^_`|~-])+)$/\n\n/**\n * RegExp for various RFC 6266 grammar\n *\n * disposition-type = \"inline\" | \"attachment\" | disp-ext-type\n * disp-ext-type = token\n * disposition-parm = filename-parm | disp-ext-parm\n * filename-parm = \"filename\" \"=\" value\n * | \"filename*\" \"=\" ext-value\n * disp-ext-parm = token \"=\" value\n * | ext-token \"=\" ext-value\n * ext-token = <the characters in token, followed by \"*\">\n * @private\n */\n\nvar DISPOSITION_TYPE_REGEXP = /^([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\\x09\\x20]*(?:$|;)/ // eslint-disable-line no-control-regex\n\n/**\n * Create an attachment Content-Disposition header.\n *\n * @param {string} [filename]\n * @param {object} [options]\n * @param {string} [options.type=attachment]\n * @param {string|boolean} [options.fallback=true]\n * @return {string}\n * @public\n */\n\nfunction contentDisposition (filename, options) {\n var opts = options || {}\n\n // get type\n var type = opts.type || 'attachment'\n\n // get parameters\n var params = createparams(filename, opts.fallback)\n\n // format into string\n return format(new ContentDisposition(type, params))\n}\n\n/**\n * Create parameters object from filename and fallback.\n *\n * @param {string} [filename]\n * @param {string|boolean} [fallback=true]\n * @return {object}\n * @private\n */\n\nfunction createparams (filename, fallback) {\n if (filename === undefined) {\n return\n }\n\n var params = {}\n\n if (typeof filename !== 'string') {\n throw new TypeError('filename must be a string')\n }\n\n // fallback defaults to true\n if (fallback === undefined) {\n fallback = true\n }\n\n if (typeof fallback !== 'string' && typeof fallback !== 'boolean') {\n throw new TypeError('fallback must be a string or boolean')\n }\n\n if (typeof fallback === 'string' && NON_LATIN1_REGEXP.test(fallback)) {\n throw new TypeError('fallback must be ISO-8859-1 string')\n }\n\n // restrict to file base name\n var name = basename(filename)\n\n // determine if name is suitable for quoted string\n var isQuotedString = TEXT_REGEXP.test(name)\n\n // generate fallback name\n var fallbackName = typeof fallback !== 'string'\n ? fallback && getlatin1(name)\n : basename(fallback)\n var hasFallback = typeof fallbackName === 'string' && fallbackName !== name\n\n // set extended filename parameter\n if (hasFallback || !isQuotedString || HEX_ESCAPE_REGEXP.test(name)) {\n params['filename*'] = name\n }\n\n // set filename parameter\n if (isQuotedString || hasFallback) {\n params.filename = hasFallback\n ? fallbackName\n : name\n }\n\n return params\n}\n\n/**\n * Format object to Content-Disposition header.\n *\n * @param {object} obj\n * @param {string} obj.type\n * @param {object} [obj.parameters]\n * @return {string}\n * @private\n */\n\nfunction format (obj) {\n var parameters = obj.parameters\n var type = obj.type\n\n if (!type || typeof type !== 'string' || !TOKEN_REGEXP.test(type)) {\n throw new TypeError('invalid type')\n }\n\n // start with normalized type\n var string = String(type).toLowerCase()\n\n // append parameters\n if (parameters && typeof parameters === 'object') {\n var param\n var params = Object.keys(parameters).sort()\n\n for (var i = 0; i < params.length; i++) {\n param = params[i]\n\n var val = param.substr(-1) === '*'\n ? ustring(parameters[param])\n : qstring(parameters[param])\n\n string += '; ' + param + '=' + val\n }\n }\n\n return string\n}\n\n/**\n * Decode a RFC 5987 field value (gracefully).\n *\n * @param {string} str\n * @return {string}\n * @private\n */\n\nfunction decodefield (str) {\n var match = EXT_VALUE_REGEXP.exec(str)\n\n if (!match) {\n throw new TypeError('invalid extended field value')\n }\n\n var charset = match[1].toLowerCase()\n var encoded = match[2]\n var value\n\n // to binary string\n var binary = encoded.replace(HEX_ESCAPE_REPLACE_REGEXP, pdecode)\n\n switch (charset) {\n case 'iso-8859-1':\n value = getlatin1(binary)\n break\n case 'utf-8':\n value = Buffer.from(binary, 'binary').toString('utf8')\n break\n default:\n throw new TypeError('unsupported charset in extended field')\n }\n\n return value\n}\n\n/**\n * Get ISO-8859-1 version of string.\n *\n * @param {string} val\n * @return {string}\n * @private\n */\n\nfunction getlatin1 (val) {\n // simple Unicode -> ISO-8859-1 transformation\n return String(val).replace(NON_LATIN1_REGEXP, '?')\n}\n\n/**\n * Parse Content-Disposition header string.\n *\n * @param {string} string\n * @return {object}\n * @public\n */\n\nfunction parse (string) {\n if (!string || typeof string !== 'string') {\n throw new TypeError('argument string is required')\n }\n\n var match = DISPOSITION_TYPE_REGEXP.exec(string)\n\n if (!match) {\n throw new TypeError('invalid type format')\n }\n\n // normalize type\n var index = match[0].length\n var type = match[1].toLowerCase()\n\n var key\n var names = []\n var params = {}\n var value\n\n // calculate index to start at\n index = PARAM_REGEXP.lastIndex = match[0].substr(-1) === ';'\n ? index - 1\n : index\n\n // match parameters\n while ((match = PARAM_REGEXP.exec(string))) {\n if (match.index !== index) {\n throw new TypeError('invalid parameter format')\n }\n\n index += match[0].length\n key = match[1].toLowerCase()\n value = match[2]\n\n if (names.indexOf(key) !== -1) {\n throw new TypeError('invalid duplicate parameter')\n }\n\n names.push(key)\n\n if (key.indexOf('*') + 1 === key.length) {\n // decode extended value\n key = key.slice(0, -1)\n value = decodefield(value)\n\n // overwrite existing value\n params[key] = value\n continue\n }\n\n if (typeof params[key] === 'string') {\n continue\n }\n\n if (value[0] === '\"') {\n // remove quotes and escapes\n value = value\n .substr(1, value.length - 2)\n .replace(QESC_REGEXP, '$1')\n }\n\n params[key] = value\n }\n\n if (index !== -1 && index !== string.length) {\n throw new TypeError('invalid parameter format')\n }\n\n return new ContentDisposition(type, params)\n}\n\n/**\n * Percent decode a single character.\n *\n * @param {string} str\n * @param {string} hex\n * @return {string}\n * @private\n */\n\nfunction pdecode (str, hex) {\n return String.fromCharCode(parseInt(hex, 16))\n}\n\n/**\n * Percent encode a single character.\n *\n * @param {string} char\n * @return {string}\n * @private\n */\n\nfunction pencode (char) {\n return '%' + String(char)\n .charCodeAt(0)\n .toString(16)\n .toUpperCase()\n}\n\n/**\n * Quote a string for HTTP.\n *\n * @param {string} val\n * @return {string}\n * @private\n */\n\nfunction qstring (val) {\n var str = String(val)\n\n return '\"' + str.replace(QUOTE_REGEXP, '\\\\$1') + '\"'\n}\n\n/**\n * Encode a Unicode string for HTTP (RFC 5987).\n *\n * @param {string} val\n * @return {string}\n * @private\n */\n\nfunction ustring (val) {\n var str = String(val)\n\n // percent encode as UTF-8\n var encoded = encodeURIComponent(str)\n .replace(ENCODE_URL_ATTR_CHAR_REGEXP, pencode)\n\n return 'UTF-8\\'\\'' + encoded\n}\n\n/**\n * Class for parsed Content-Disposition header for v8 optimization\n *\n * @public\n * @param {string} type\n * @param {object} parameters\n * @constructor\n */\n\nfunction ContentDisposition (type, parameters) {\n this.type = type\n this.parameters = parameters\n}\n", "/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isNaN(val) === false) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^((?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n if (ms >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (ms >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (ms >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (ms >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n return plural(ms, d, 'day') ||\n plural(ms, h, 'hour') ||\n plural(ms, m, 'minute') ||\n plural(ms, s, 'second') ||\n ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, n, name) {\n if (ms < n) {\n return;\n }\n if (ms < n * 1.5) {\n return Math.floor(ms / n) + ' ' + name;\n }\n return Math.ceil(ms / n) + ' ' + name + 's';\n}\n", "\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = createDebug.debug = createDebug['default'] = createDebug;\nexports.coerce = coerce;\nexports.disable = disable;\nexports.enable = enable;\nexports.enabled = enabled;\nexports.humanize = require('ms');\n\n/**\n * The currently active debug mode names, and names to skip.\n */\n\nexports.names = [];\nexports.skips = [];\n\n/**\n * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n *\n * Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n */\n\nexports.formatters = {};\n\n/**\n * Previous log timestamp.\n */\n\nvar prevTime;\n\n/**\n * Select a color.\n * @param {String} namespace\n * @return {Number}\n * @api private\n */\n\nfunction selectColor(namespace) {\n var hash = 0, i;\n\n for (i in namespace) {\n hash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n hash |= 0; // Convert to 32bit integer\n }\n\n return exports.colors[Math.abs(hash) % exports.colors.length];\n}\n\n/**\n * Create a debugger with the given `namespace`.\n *\n * @param {String} namespace\n * @return {Function}\n * @api public\n */\n\nfunction createDebug(namespace) {\n\n function debug() {\n // disabled?\n if (!debug.enabled) return;\n\n var self = debug;\n\n // set `diff` timestamp\n var curr = +new Date();\n var ms = curr - (prevTime || curr);\n self.diff = ms;\n self.prev = prevTime;\n self.curr = curr;\n prevTime = curr;\n\n // turn the `arguments` into a proper Array\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n\n args[0] = exports.coerce(args[0]);\n\n if ('string' !== typeof args[0]) {\n // anything else let's inspect with %O\n args.unshift('%O');\n }\n\n // apply any `formatters` transformations\n var index = 0;\n args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) {\n // if we encounter an escaped % then don't increase the array index\n if (match === '%%') return match;\n index++;\n var formatter = exports.formatters[format];\n if ('function' === typeof formatter) {\n var val = args[index];\n match = formatter.call(self, val);\n\n // now we need to remove `args[index]` since it's inlined in the `format`\n args.splice(index, 1);\n index--;\n }\n return match;\n });\n\n // apply env-specific formatting (colors, etc.)\n exports.formatArgs.call(self, args);\n\n var logFn = debug.log || exports.log || console.log.bind(console);\n logFn.apply(self, args);\n }\n\n debug.namespace = namespace;\n debug.enabled = exports.enabled(namespace);\n debug.useColors = exports.useColors();\n debug.color = selectColor(namespace);\n\n // env-specific initialization logic for debug instances\n if ('function' === typeof exports.init) {\n exports.init(debug);\n }\n\n return debug;\n}\n\n/**\n * Enables a debug mode by namespaces. This can include modes\n * separated by a colon and wildcards.\n *\n * @param {String} namespaces\n * @api public\n */\n\nfunction enable(namespaces) {\n exports.save(namespaces);\n\n exports.names = [];\n exports.skips = [];\n\n var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n var len = split.length;\n\n for (var i = 0; i < len; i++) {\n if (!split[i]) continue; // ignore empty strings\n namespaces = split[i].replace(/\\*/g, '.*?');\n if (namespaces[0] === '-') {\n exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n } else {\n exports.names.push(new RegExp('^' + namespaces + '$'));\n }\n }\n}\n\n/**\n * Disable debug output.\n *\n * @api public\n */\n\nfunction disable() {\n exports.enable('');\n}\n\n/**\n * Returns true if the given mode name is enabled, false otherwise.\n *\n * @param {String} name\n * @return {Boolean}\n * @api public\n */\n\nfunction enabled(name) {\n var i, len;\n for (i = 0, len = exports.skips.length; i < len; i++) {\n if (exports.skips[i].test(name)) {\n return false;\n }\n }\n for (i = 0, len = exports.names.length; i < len; i++) {\n if (exports.names[i].test(name)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Coerce `val`.\n *\n * @param {Mixed} val\n * @return {Mixed}\n * @api private\n */\n\nfunction coerce(val) {\n if (val instanceof Error) return val.stack || val.message;\n return val;\n}\n", "/**\n * This is the web browser implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = 'undefined' != typeof chrome\n && 'undefined' != typeof chrome.storage\n ? chrome.storage.local\n : localstorage();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n 'lightseagreen',\n 'forestgreen',\n 'goldenrod',\n 'dodgerblue',\n 'darkorchid',\n 'crimson'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\nfunction useColors() {\n // NB: In an Electron preload script, document will be defined but not fully\n // initialized. Since we know we're in Chrome, we'll just detect this case\n // explicitly\n if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {\n return true;\n }\n\n // is webkit? http://stackoverflow.com/a/16459606/376773\n // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n // is firebug? http://stackoverflow.com/a/398120/376773\n (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n // is firefox >= v31?\n // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n // double check webkit in userAgent just in case we are in a worker\n (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nexports.formatters.j = function(v) {\n try {\n return JSON.stringify(v);\n } catch (err) {\n return '[UnexpectedJSONParseError]: ' + err.message;\n }\n};\n\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n var useColors = this.useColors;\n\n args[0] = (useColors ? '%c' : '')\n + this.namespace\n + (useColors ? ' %c' : ' ')\n + args[0]\n + (useColors ? '%c ' : ' ')\n + '+' + exports.humanize(this.diff);\n\n if (!useColors) return;\n\n var c = 'color: ' + this.color;\n args.splice(1, 0, c, 'color: inherit')\n\n // the final \"%c\" is somewhat tricky, because there could be other\n // arguments passed either before or after the %c, so we need to\n // figure out the correct index to insert the CSS into\n var index = 0;\n var lastC = 0;\n args[0].replace(/%[a-zA-Z%]/g, function(match) {\n if ('%%' === match) return;\n index++;\n if ('%c' === match) {\n // we only are interested in the *last* %c\n // (the user may have provided their own)\n lastC = index;\n }\n });\n\n args.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\n\nfunction log() {\n // this hackery is required for IE8/9, where\n // the `console.log` function doesn't have 'apply'\n return 'object' === typeof console\n && console.log\n && Function.prototype.apply.call(console.log, console, arguments);\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n try {\n if (null == namespaces) {\n exports.storage.removeItem('debug');\n } else {\n exports.storage.debug = namespaces;\n }\n } catch(e) {}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n var r;\n try {\n r = exports.storage.debug;\n } catch(e) {}\n\n // If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n if (!r && typeof process !== 'undefined' && 'env' in process) {\n r = process.env.DEBUG;\n }\n\n return r;\n}\n\n/**\n * Enable namespaces listed in `localStorage.debug` initially.\n */\n\nexports.enable(load());\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n try {\n return window.localStorage;\n } catch (e) {}\n}\n", "/**\n * Module dependencies.\n */\n\nvar tty = require('tty');\nvar util = require('util');\n\n/**\n * This is the Node.js implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.init = init;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\n\n/**\n * Colors.\n */\n\nexports.colors = [6, 2, 3, 4, 5, 1];\n\n/**\n * Build up the default `inspectOpts` object from the environment variables.\n *\n * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js\n */\n\nexports.inspectOpts = Object.keys(process.env).filter(function (key) {\n return /^debug_/i.test(key);\n}).reduce(function (obj, key) {\n // camel-case\n var prop = key\n .substring(6)\n .toLowerCase()\n .replace(/_([a-z])/g, function (_, k) { return k.toUpperCase() });\n\n // coerce string value into JS value\n var val = process.env[key];\n if (/^(yes|on|true|enabled)$/i.test(val)) val = true;\n else if (/^(no|off|false|disabled)$/i.test(val)) val = false;\n else if (val === 'null') val = null;\n else val = Number(val);\n\n obj[prop] = val;\n return obj;\n}, {});\n\n/**\n * The file descriptor to write the `debug()` calls to.\n * Set the `DEBUG_FD` env variable to override with another value. i.e.:\n *\n * $ DEBUG_FD=3 node script.js 3>debug.log\n */\n\nvar fd = parseInt(process.env.DEBUG_FD, 10) || 2;\n\nif (1 !== fd && 2 !== fd) {\n util.deprecate(function(){}, 'except for stderr(2) and stdout(1), any other usage of DEBUG_FD is deprecated. Override debug.log if you want to use a different log function (https://git.io/debug_fd)')()\n}\n\nvar stream = 1 === fd ? process.stdout :\n 2 === fd ? process.stderr :\n createWritableStdioStream(fd);\n\n/**\n * Is stdout a TTY? Colored output is enabled when `true`.\n */\n\nfunction useColors() {\n return 'colors' in exports.inspectOpts\n ? Boolean(exports.inspectOpts.colors)\n : tty.isatty(fd);\n}\n\n/**\n * Map %o to `util.inspect()`, all on a single line.\n */\n\nexports.formatters.o = function(v) {\n this.inspectOpts.colors = this.useColors;\n return util.inspect(v, this.inspectOpts)\n .split('\\n').map(function(str) {\n return str.trim()\n }).join(' ');\n};\n\n/**\n * Map %o to `util.inspect()`, allowing multiple lines if needed.\n */\n\nexports.formatters.O = function(v) {\n this.inspectOpts.colors = this.useColors;\n return util.inspect(v, this.inspectOpts);\n};\n\n/**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n var name = this.namespace;\n var useColors = this.useColors;\n\n if (useColors) {\n var c = this.color;\n var prefix = ' \\u001b[3' + c + ';1m' + name + ' ' + '\\u001b[0m';\n\n args[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n args.push('\\u001b[3' + c + 'm+' + exports.humanize(this.diff) + '\\u001b[0m');\n } else {\n args[0] = new Date().toUTCString()\n + ' ' + name + ' ' + args[0];\n }\n}\n\n/**\n * Invokes `util.format()` with the specified arguments and writes to `stream`.\n */\n\nfunction log() {\n return stream.write(util.format.apply(util, arguments) + '\\n');\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n if (null == namespaces) {\n // If you set a process.env field to null or undefined, it gets cast to the\n // string 'null' or 'undefined'. Just delete instead.\n delete process.env.DEBUG;\n } else {\n process.env.DEBUG = namespaces;\n }\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n return process.env.DEBUG;\n}\n\n/**\n * Copied from `node/src/node.js`.\n *\n * XXX: It's lame that node doesn't expose this API out-of-the-box. It also\n * relies on the undocumented `tty_wrap.guessHandleType()` which is also lame.\n */\n\nfunction createWritableStdioStream (fd) {\n var stream;\n var tty_wrap = process.binding('tty_wrap');\n\n // Note stream._type is used for test-module-load-list.js\n\n switch (tty_wrap.guessHandleType(fd)) {\n case 'TTY':\n stream = new tty.WriteStream(fd);\n stream._type = 'tty';\n\n // Hack to have stream not keep the event loop alive.\n // See https://github.com/joyent/node/issues/1726\n if (stream._handle && stream._handle.unref) {\n stream._handle.unref();\n }\n break;\n\n case 'FILE':\n var fs = require('fs');\n stream = new fs.SyncWriteStream(fd, { autoClose: false });\n stream._type = 'fs';\n break;\n\n case 'PIPE':\n case 'TCP':\n var net = require('net');\n stream = new net.Socket({\n fd: fd,\n readable: false,\n writable: true\n });\n\n // FIXME Should probably have an option in net.Socket to create a\n // stream from an existing fd which is writable only. But for now\n // we'll just add this hack and set the `readable` member to false.\n // Test: ./node test/fixtures/echo.js < /etc/passwd\n stream.readable = false;\n stream.read = null;\n stream._type = 'pipe';\n\n // FIXME Hack to have stream not keep the event loop alive.\n // See https://github.com/joyent/node/issues/1726\n if (stream._handle && stream._handle.unref) {\n stream._handle.unref();\n }\n break;\n\n default:\n // Probably an error on in uv_guess_handle()\n throw new Error('Implement me. Unknown stream file type!');\n }\n\n // For supporting legacy API we put the FD here.\n stream.fd = fd;\n\n stream._isStdio = true;\n\n return stream;\n}\n\n/**\n * Init logic for `debug` instances.\n *\n * Create a new `inspectOpts` object in case `useColors` is set\n * differently for a particular `debug` instance.\n */\n\nfunction init (debug) {\n debug.inspectOpts = {};\n\n var keys = Object.keys(exports.inspectOpts);\n for (var i = 0; i < keys.length; i++) {\n debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];\n }\n}\n\n/**\n * Enable namespaces listed in `process.env.DEBUG` initially.\n */\n\nexports.enable(load());\n", "/**\n * Detect Electron renderer process, which is node, but we should\n * treat as a browser.\n */\n\nif (typeof process !== 'undefined' && process.type === 'renderer') {\n module.exports = require('./browser.js');\n} else {\n module.exports = require('./node.js');\n}\n", "/*!\n * etag\n * Copyright(c) 2014-2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = etag\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar crypto = require('crypto')\nvar Stats = require('fs').Stats\n\n/**\n * Module variables.\n * @private\n */\n\nvar toString = Object.prototype.toString\n\n/**\n * Generate an entity tag.\n *\n * @param {Buffer|string} entity\n * @return {string}\n * @private\n */\n\nfunction entitytag (entity) {\n if (entity.length === 0) {\n // fast-path empty\n return '\"0-2jmj7l5rSw0yVb/vlWAYkK/YBwk\"'\n }\n\n // compute hash of entity\n var hash = crypto\n .createHash('sha1')\n .update(entity, 'utf8')\n .digest('base64')\n .substring(0, 27)\n\n // compute length of entity\n var len = typeof entity === 'string'\n ? Buffer.byteLength(entity, 'utf8')\n : entity.length\n\n return '\"' + len.toString(16) + '-' + hash + '\"'\n}\n\n/**\n * Create a simple ETag.\n *\n * @param {string|Buffer|Stats} entity\n * @param {object} [options]\n * @param {boolean} [options.weak]\n * @return {String}\n * @public\n */\n\nfunction etag (entity, options) {\n if (entity == null) {\n throw new TypeError('argument entity is required')\n }\n\n // support fs.Stats object\n var isStats = isstats(entity)\n var weak = options && typeof options.weak === 'boolean'\n ? options.weak\n : isStats\n\n // validate argument\n if (!isStats && typeof entity !== 'string' && !Buffer.isBuffer(entity)) {\n throw new TypeError('argument entity must be string, Buffer, or fs.Stats')\n }\n\n // generate entity tag\n var tag = isStats\n ? stattag(entity)\n : entitytag(entity)\n\n return weak\n ? 'W/' + tag\n : tag\n}\n\n/**\n * Determine if object is a Stats object.\n *\n * @param {object} obj\n * @return {boolean}\n * @api private\n */\n\nfunction isstats (obj) {\n // genuine fs.Stats\n if (typeof Stats === 'function' && obj instanceof Stats) {\n return true\n }\n\n // quack quack\n return obj && typeof obj === 'object' &&\n 'ctime' in obj && toString.call(obj.ctime) === '[object Date]' &&\n 'mtime' in obj && toString.call(obj.mtime) === '[object Date]' &&\n 'ino' in obj && typeof obj.ino === 'number' &&\n 'size' in obj && typeof obj.size === 'number'\n}\n\n/**\n * Generate a tag for a stat.\n *\n * @param {object} stat\n * @return {string}\n * @private\n */\n\nfunction stattag (stat) {\n var mtime = stat.mtime.getTime().toString(16)\n var size = stat.size.toString(16)\n\n return '\"' + size + '-' + mtime + '\"'\n}\n", "/*!\n * fresh\n * Copyright(c) 2012 TJ Holowaychuk\n * Copyright(c) 2016-2017 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * RegExp to check for no-cache token in Cache-Control.\n * @private\n */\n\nvar CACHE_CONTROL_NO_CACHE_REGEXP = /(?:^|,)\\s*?no-cache\\s*?(?:,|$)/\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = fresh\n\n/**\n * Check freshness of the response using request and response headers.\n *\n * @param {Object} reqHeaders\n * @param {Object} resHeaders\n * @return {Boolean}\n * @public\n */\n\nfunction fresh (reqHeaders, resHeaders) {\n // fields\n var modifiedSince = reqHeaders['if-modified-since']\n var noneMatch = reqHeaders['if-none-match']\n\n // unconditional request\n if (!modifiedSince && !noneMatch) {\n return false\n }\n\n // Always return stale when Cache-Control: no-cache\n // to support end-to-end reload requests\n // https://tools.ietf.org/html/rfc2616#section-14.9.4\n var cacheControl = reqHeaders['cache-control']\n if (cacheControl && CACHE_CONTROL_NO_CACHE_REGEXP.test(cacheControl)) {\n return false\n }\n\n // if-none-match\n if (noneMatch && noneMatch !== '*') {\n var etag = resHeaders['etag']\n\n if (!etag) {\n return false\n }\n\n var etagStale = true\n var matches = parseTokenList(noneMatch)\n for (var i = 0; i < matches.length; i++) {\n var match = matches[i]\n if (match === etag || match === 'W/' + etag || 'W/' + match === etag) {\n etagStale = false\n break\n }\n }\n\n if (etagStale) {\n return false\n }\n }\n\n // if-modified-since\n if (modifiedSince) {\n var lastModified = resHeaders['last-modified']\n var modifiedStale = !lastModified || !(parseHttpDate(lastModified) <= parseHttpDate(modifiedSince))\n\n if (modifiedStale) {\n return false\n }\n }\n\n return true\n}\n\n/**\n * Parse an HTTP Date into a number.\n *\n * @param {string} date\n * @private\n */\n\nfunction parseHttpDate (date) {\n var timestamp = date && Date.parse(date)\n\n // istanbul ignore next: guard against date.js Date.parse patching\n return typeof timestamp === 'number'\n ? timestamp\n : NaN\n}\n\n/**\n * Parse a HTTP token list.\n *\n * @param {string} str\n * @private\n */\n\nfunction parseTokenList (str) {\n var end = 0\n var list = []\n var start = 0\n\n // gather tokens\n for (var i = 0, len = str.length; i < len; i++) {\n switch (str.charCodeAt(i)) {\n case 0x20: /* */\n if (start === end) {\n start = end = i + 1\n }\n break\n case 0x2c: /* , */\n list.push(str.substring(start, end))\n start = end = i + 1\n break\n default:\n end = i + 1\n break\n }\n }\n\n // final token\n list.push(str.substring(start, end))\n\n return list\n}\n", "var path = require('path');\nvar fs = require('fs');\n\nfunction Mime() {\n // Map of extension -> mime type\n this.types = Object.create(null);\n\n // Map of mime type -> extension\n this.extensions = Object.create(null);\n}\n\n/**\n * Define mimetype -> extension mappings. Each key is a mime-type that maps\n * to an array of extensions associated with the type. The first extension is\n * used as the default extension for the type.\n *\n * e.g. mime.define({'audio/ogg', ['oga', 'ogg', 'spx']});\n *\n * @param map (Object) type definitions\n */\nMime.prototype.define = function (map) {\n for (var type in map) {\n var exts = map[type];\n for (var i = 0; i < exts.length; i++) {\n if (process.env.DEBUG_MIME && this.types[exts[i]]) {\n console.warn((this._loading || \"define()\").replace(/.*\\//, ''), 'changes \"' + exts[i] + '\" extension type from ' +\n this.types[exts[i]] + ' to ' + type);\n }\n\n this.types[exts[i]] = type;\n }\n\n // Default extension is the first one we encounter\n if (!this.extensions[type]) {\n this.extensions[type] = exts[0];\n }\n }\n};\n\n/**\n * Load an Apache2-style \".types\" file\n *\n * This may be called multiple times (it's expected). Where files declare\n * overlapping types/extensions, the last file wins.\n *\n * @param file (String) path of file to load.\n */\nMime.prototype.load = function(file) {\n this._loading = file;\n // Read file and split into lines\n var map = {},\n content = fs.readFileSync(file, 'ascii'),\n lines = content.split(/[\\r\\n]+/);\n\n lines.forEach(function(line) {\n // Clean up whitespace/comments, and split into fields\n var fields = line.replace(/\\s*#.*|^\\s*|\\s*$/g, '').split(/\\s+/);\n map[fields.shift()] = fields;\n });\n\n this.define(map);\n\n this._loading = null;\n};\n\n/**\n * Lookup a mime type based on extension\n */\nMime.prototype.lookup = function(path, fallback) {\n var ext = path.replace(/^.*[\\.\\/\\\\]/, '').toLowerCase();\n\n return this.types[ext] || fallback || this.default_type;\n};\n\n/**\n * Return file extension associated with a mime type\n */\nMime.prototype.extension = function(mimeType) {\n var type = mimeType.match(/^\\s*([^;\\s]*)(?:;|\\s|$)/)[1].toLowerCase();\n return this.extensions[type];\n};\n\n// Default instance\nvar mime = new Mime();\n\n// Define built-in types\nmime.define(require('./types.json'));\n\n// Default type\nmime.default_type = mime.lookup('bin');\n\n//\n// Additional API specific to the default instance\n//\n\nmime.Mime = Mime;\n\n/**\n * Lookup a charset based on mime type.\n */\nmime.charsets = {\n lookup: function(mimeType, fallback) {\n // Assume text types are utf8\n return (/^text\\/|^application\\/(javascript|json)/).test(mimeType) ? 'UTF-8' : fallback;\n }\n};\n\nmodule.exports = mime;\n", "/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n", "/*!\n * range-parser\n * Copyright(c) 2012-2014 TJ Holowaychuk\n * Copyright(c) 2015-2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = rangeParser\n\n/**\n * Parse \"Range\" header `str` relative to the given file `size`.\n *\n * @param {Number} size\n * @param {String} str\n * @param {Object} [options]\n * @return {Array}\n * @public\n */\n\nfunction rangeParser (size, str, options) {\n if (typeof str !== 'string') {\n throw new TypeError('argument str must be a string')\n }\n\n var index = str.indexOf('=')\n\n if (index === -1) {\n return -2\n }\n\n // split the range string\n var arr = str.slice(index + 1).split(',')\n var ranges = []\n\n // add ranges type\n ranges.type = str.slice(0, index)\n\n // parse all ranges\n for (var i = 0; i < arr.length; i++) {\n var range = arr[i].split('-')\n var start = parseInt(range[0], 10)\n var end = parseInt(range[1], 10)\n\n // -nnn\n if (isNaN(start)) {\n start = size - end\n end = size - 1\n // nnn-\n } else if (isNaN(end)) {\n end = size - 1\n }\n\n // limit last-byte-pos to current length\n if (end > size - 1) {\n end = size - 1\n }\n\n // invalid or unsatisifiable\n if (isNaN(start) || isNaN(end) || start > end || start < 0) {\n continue\n }\n\n // add range\n ranges.push({\n start: start,\n end: end\n })\n }\n\n if (ranges.length < 1) {\n // unsatisifiable\n return -1\n }\n\n return options && options.combine\n ? combineRanges(ranges)\n : ranges\n}\n\n/**\n * Combine overlapping & adjacent ranges.\n * @private\n */\n\nfunction combineRanges (ranges) {\n var ordered = ranges.map(mapWithIndex).sort(sortByRangeStart)\n\n for (var j = 0, i = 1; i < ordered.length; i++) {\n var range = ordered[i]\n var current = ordered[j]\n\n if (range.start > current.end + 1) {\n // next range\n ordered[++j] = range\n } else if (range.end > current.end) {\n // extend range\n current.end = range.end\n current.index = Math.min(current.index, range.index)\n }\n }\n\n // trim ordered array\n ordered.length = j + 1\n\n // generate combined range\n var combined = ordered.sort(sortByRangeIndex).map(mapWithoutIndex)\n\n // copy ranges type\n combined.type = ranges.type\n\n return combined\n}\n\n/**\n * Map function to add index value to ranges.\n * @private\n */\n\nfunction mapWithIndex (range, index) {\n return {\n start: range.start,\n end: range.end,\n index: index\n }\n}\n\n/**\n * Map function to remove index value from ranges.\n * @private\n */\n\nfunction mapWithoutIndex (range) {\n return {\n start: range.start,\n end: range.end\n }\n}\n\n/**\n * Sort function to sort ranges by index.\n * @private\n */\n\nfunction sortByRangeIndex (a, b) {\n return a.index - b.index\n}\n\n/**\n * Sort function to sort ranges by start position.\n * @private\n */\n\nfunction sortByRangeStart (a, b) {\n return a.start - b.start\n}\n", "/*!\n * send\n * Copyright(c) 2012 TJ Holowaychuk\n * Copyright(c) 2014-2022 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar createError = require('http-errors')\nvar debug = require('debug')('send')\nvar deprecate = require('depd')('send')\nvar destroy = require('destroy')\nvar encodeUrl = require('encodeurl')\nvar escapeHtml = require('escape-html')\nvar etag = require('etag')\nvar fresh = require('fresh')\nvar fs = require('fs')\nvar mime = require('mime')\nvar ms = require('ms')\nvar onFinished = require('on-finished')\nvar parseRange = require('range-parser')\nvar path = require('path')\nvar statuses = require('statuses')\nvar Stream = require('stream')\nvar util = require('util')\n\n/**\n * Path function references.\n * @private\n */\n\nvar extname = path.extname\nvar join = path.join\nvar normalize = path.normalize\nvar resolve = path.resolve\nvar sep = path.sep\n\n/**\n * Regular expression for identifying a bytes Range header.\n * @private\n */\n\nvar BYTES_RANGE_REGEXP = /^ *bytes=/\n\n/**\n * Maximum value allowed for the max age.\n * @private\n */\n\nvar MAX_MAXAGE = 60 * 60 * 24 * 365 * 1000 // 1 year\n\n/**\n * Regular expression to match a path with a directory up component.\n * @private\n */\n\nvar UP_PATH_REGEXP = /(?:^|[\\\\/])\\.\\.(?:[\\\\/]|$)/\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = send\nmodule.exports.mime = mime\n\n/**\n * Return a `SendStream` for `req` and `path`.\n *\n * @param {object} req\n * @param {string} path\n * @param {object} [options]\n * @return {SendStream}\n * @public\n */\n\nfunction send (req, path, options) {\n return new SendStream(req, path, options)\n}\n\n/**\n * Initialize a `SendStream` with the given `path`.\n *\n * @param {Request} req\n * @param {String} path\n * @param {object} [options]\n * @private\n */\n\nfunction SendStream (req, path, options) {\n Stream.call(this)\n\n var opts = options || {}\n\n this.options = opts\n this.path = path\n this.req = req\n\n this._acceptRanges = opts.acceptRanges !== undefined\n ? Boolean(opts.acceptRanges)\n : true\n\n this._cacheControl = opts.cacheControl !== undefined\n ? Boolean(opts.cacheControl)\n : true\n\n this._etag = opts.etag !== undefined\n ? Boolean(opts.etag)\n : true\n\n this._dotfiles = opts.dotfiles !== undefined\n ? opts.dotfiles\n : 'ignore'\n\n if (this._dotfiles !== 'ignore' && this._dotfiles !== 'allow' && this._dotfiles !== 'deny') {\n throw new TypeError('dotfiles option must be \"allow\", \"deny\", or \"ignore\"')\n }\n\n this._hidden = Boolean(opts.hidden)\n\n if (opts.hidden !== undefined) {\n deprecate('hidden: use dotfiles: \\'' + (this._hidden ? 'allow' : 'ignore') + '\\' instead')\n }\n\n // legacy support\n if (opts.dotfiles === undefined) {\n this._dotfiles = undefined\n }\n\n this._extensions = opts.extensions !== undefined\n ? normalizeList(opts.extensions, 'extensions option')\n : []\n\n this._immutable = opts.immutable !== undefined\n ? Boolean(opts.immutable)\n : false\n\n this._index = opts.index !== undefined\n ? normalizeList(opts.index, 'index option')\n : ['index.html']\n\n this._lastModified = opts.lastModified !== undefined\n ? Boolean(opts.lastModified)\n : true\n\n this._maxage = opts.maxAge || opts.maxage\n this._maxage = typeof this._maxage === 'string'\n ? ms(this._maxage)\n : Number(this._maxage)\n this._maxage = !isNaN(this._maxage)\n ? Math.min(Math.max(0, this._maxage), MAX_MAXAGE)\n : 0\n\n this._root = opts.root\n ? resolve(opts.root)\n : null\n\n if (!this._root && opts.from) {\n this.from(opts.from)\n }\n}\n\n/**\n * Inherits from `Stream`.\n */\n\nutil.inherits(SendStream, Stream)\n\n/**\n * Enable or disable etag generation.\n *\n * @param {Boolean} val\n * @return {SendStream}\n * @api public\n */\n\nSendStream.prototype.etag = deprecate.function(function etag (val) {\n this._etag = Boolean(val)\n debug('etag %s', this._etag)\n return this\n}, 'send.etag: pass etag as option')\n\n/**\n * Enable or disable \"hidden\" (dot) files.\n *\n * @param {Boolean} path\n * @return {SendStream}\n * @api public\n */\n\nSendStream.prototype.hidden = deprecate.function(function hidden (val) {\n this._hidden = Boolean(val)\n this._dotfiles = undefined\n debug('hidden %s', this._hidden)\n return this\n}, 'send.hidden: use dotfiles option')\n\n/**\n * Set index `paths`, set to a falsy\n * value to disable index support.\n *\n * @param {String|Boolean|Array} paths\n * @return {SendStream}\n * @api public\n */\n\nSendStream.prototype.index = deprecate.function(function index (paths) {\n var index = !paths ? [] : normalizeList(paths, 'paths argument')\n debug('index %o', paths)\n this._index = index\n return this\n}, 'send.index: pass index as option')\n\n/**\n * Set root `path`.\n *\n * @param {String} path\n * @return {SendStream}\n * @api public\n */\n\nSendStream.prototype.root = function root (path) {\n this._root = resolve(String(path))\n debug('root %s', this._root)\n return this\n}\n\nSendStream.prototype.from = deprecate.function(SendStream.prototype.root,\n 'send.from: pass root as option')\n\nSendStream.prototype.root = deprecate.function(SendStream.prototype.root,\n 'send.root: pass root as option')\n\n/**\n * Set max-age to `maxAge`.\n *\n * @param {Number} maxAge\n * @return {SendStream}\n * @api public\n */\n\nSendStream.prototype.maxage = deprecate.function(function maxage (maxAge) {\n this._maxage = typeof maxAge === 'string'\n ? ms(maxAge)\n : Number(maxAge)\n this._maxage = !isNaN(this._maxage)\n ? Math.min(Math.max(0, this._maxage), MAX_MAXAGE)\n : 0\n debug('max-age %d', this._maxage)\n return this\n}, 'send.maxage: pass maxAge as option')\n\n/**\n * Emit error with `status`.\n *\n * @param {number} status\n * @param {Error} [err]\n * @private\n */\n\nSendStream.prototype.error = function error (status, err) {\n // emit if listeners instead of responding\n if (hasListeners(this, 'error')) {\n return this.emit('error', createHttpError(status, err))\n }\n\n var res = this.res\n var msg = statuses.message[status] || String(status)\n var doc = createHtmlDocument('Error', escapeHtml(msg))\n\n // clear existing headers\n clearHeaders(res)\n\n // add error headers\n if (err && err.headers) {\n setHeaders(res, err.headers)\n }\n\n // send basic response\n res.statusCode = status\n res.setHeader('Content-Type', 'text/html; charset=UTF-8')\n res.setHeader('Content-Length', Buffer.byteLength(doc))\n res.setHeader('Content-Security-Policy', \"default-src 'none'\")\n res.setHeader('X-Content-Type-Options', 'nosniff')\n res.end(doc)\n}\n\n/**\n * Check if the pathname ends with \"/\".\n *\n * @return {boolean}\n * @private\n */\n\nSendStream.prototype.hasTrailingSlash = function hasTrailingSlash () {\n return this.path[this.path.length - 1] === '/'\n}\n\n/**\n * Check if this is a conditional GET request.\n *\n * @return {Boolean}\n * @api private\n */\n\nSendStream.prototype.isConditionalGET = function isConditionalGET () {\n return this.req.headers['if-match'] ||\n this.req.headers['if-unmodified-since'] ||\n this.req.headers['if-none-match'] ||\n this.req.headers['if-modified-since']\n}\n\n/**\n * Check if the request preconditions failed.\n *\n * @return {boolean}\n * @private\n */\n\nSendStream.prototype.isPreconditionFailure = function isPreconditionFailure () {\n var req = this.req\n var res = this.res\n\n // if-match\n var match = req.headers['if-match']\n if (match) {\n var etag = res.getHeader('ETag')\n return !etag || (match !== '*' && parseTokenList(match).every(function (match) {\n return match !== etag && match !== 'W/' + etag && 'W/' + match !== etag\n }))\n }\n\n // if-unmodified-since\n var unmodifiedSince = parseHttpDate(req.headers['if-unmodified-since'])\n if (!isNaN(unmodifiedSince)) {\n var lastModified = parseHttpDate(res.getHeader('Last-Modified'))\n return isNaN(lastModified) || lastModified > unmodifiedSince\n }\n\n return false\n}\n\n/**\n * Strip various content header fields for a change in entity.\n *\n * @private\n */\n\nSendStream.prototype.removeContentHeaderFields = function removeContentHeaderFields () {\n var res = this.res\n\n res.removeHeader('Content-Encoding')\n res.removeHeader('Content-Language')\n res.removeHeader('Content-Length')\n res.removeHeader('Content-Range')\n res.removeHeader('Content-Type')\n}\n\n/**\n * Respond with 304 not modified.\n *\n * @api private\n */\n\nSendStream.prototype.notModified = function notModified () {\n var res = this.res\n debug('not modified')\n this.removeContentHeaderFields()\n res.statusCode = 304\n res.end()\n}\n\n/**\n * Raise error that headers already sent.\n *\n * @api private\n */\n\nSendStream.prototype.headersAlreadySent = function headersAlreadySent () {\n var err = new Error('Can\\'t set headers after they are sent.')\n debug('headers already sent')\n this.error(500, err)\n}\n\n/**\n * Check if the request is cacheable, aka\n * responded with 2xx or 304 (see RFC 2616 section 14.2{5,6}).\n *\n * @return {Boolean}\n * @api private\n */\n\nSendStream.prototype.isCachable = function isCachable () {\n var statusCode = this.res.statusCode\n return (statusCode >= 200 && statusCode < 300) ||\n statusCode === 304\n}\n\n/**\n * Handle stat() error.\n *\n * @param {Error} error\n * @private\n */\n\nSendStream.prototype.onStatError = function onStatError (error) {\n switch (error.code) {\n case 'ENAMETOOLONG':\n case 'ENOENT':\n case 'ENOTDIR':\n this.error(404, error)\n break\n default:\n this.error(500, error)\n break\n }\n}\n\n/**\n * Check if the cache is fresh.\n *\n * @return {Boolean}\n * @api private\n */\n\nSendStream.prototype.isFresh = function isFresh () {\n return fresh(this.req.headers, {\n etag: this.res.getHeader('ETag'),\n 'last-modified': this.res.getHeader('Last-Modified')\n })\n}\n\n/**\n * Check if the range is fresh.\n *\n * @return {Boolean}\n * @api private\n */\n\nSendStream.prototype.isRangeFresh = function isRangeFresh () {\n var ifRange = this.req.headers['if-range']\n\n if (!ifRange) {\n return true\n }\n\n // if-range as etag\n if (ifRange.indexOf('\"') !== -1) {\n var etag = this.res.getHeader('ETag')\n return Boolean(etag && ifRange.indexOf(etag) !== -1)\n }\n\n // if-range as modified date\n var lastModified = this.res.getHeader('Last-Modified')\n return parseHttpDate(lastModified) <= parseHttpDate(ifRange)\n}\n\n/**\n * Redirect to path.\n *\n * @param {string} path\n * @private\n */\n\nSendStream.prototype.redirect = function redirect (path) {\n var res = this.res\n\n if (hasListeners(this, 'directory')) {\n this.emit('directory', res, path)\n return\n }\n\n if (this.hasTrailingSlash()) {\n this.error(403)\n return\n }\n\n var loc = encodeUrl(collapseLeadingSlashes(this.path + '/'))\n var doc = createHtmlDocument('Redirecting', 'Redirecting to <a href=\"' + escapeHtml(loc) + '\">' +\n escapeHtml(loc) + '</a>')\n\n // redirect\n res.statusCode = 301\n res.setHeader('Content-Type', 'text/html; charset=UTF-8')\n res.setHeader('Content-Length', Buffer.byteLength(doc))\n res.setHeader('Content-Security-Policy', \"default-src 'none'\")\n res.setHeader('X-Content-Type-Options', 'nosniff')\n res.setHeader('Location', loc)\n res.end(doc)\n}\n\n/**\n * Pipe to `res.\n *\n * @param {Stream} res\n * @return {Stream} res\n * @api public\n */\n\nSendStream.prototype.pipe = function pipe (res) {\n // root path\n var root = this._root\n\n // references\n this.res = res\n\n // decode the path\n var path = decode(this.path)\n if (path === -1) {\n this.error(400)\n return res\n }\n\n // null byte(s)\n if (~path.indexOf('\\0')) {\n this.error(400)\n return res\n }\n\n var parts\n if (root !== null) {\n // normalize\n if (path) {\n path = normalize('.' + sep + path)\n }\n\n // malicious path\n if (UP_PATH_REGEXP.test(path)) {\n debug('malicious path \"%s\"', path)\n this.error(403)\n return res\n }\n\n // explode path parts\n parts = path.split(sep)\n\n // join / normalize from optional root dir\n path = normalize(join(root, path))\n } else {\n // \"..\" is malicious without \"root\"\n if (UP_PATH_REGEXP.test(path)) {\n debug('malicious path \"%s\"', path)\n this.error(403)\n return res\n }\n\n // explode path parts\n parts = normalize(path).split(sep)\n\n // resolve the path\n path = resolve(path)\n }\n\n // dotfile handling\n if (containsDotFile(parts)) {\n var access = this._dotfiles\n\n // legacy support\n if (access === undefined) {\n access = parts[parts.length - 1][0] === '.'\n ? (this._hidden ? 'allow' : 'ignore')\n : 'allow'\n }\n\n debug('%s dotfile \"%s\"', access, path)\n switch (access) {\n case 'allow':\n break\n case 'deny':\n this.error(403)\n return res\n case 'ignore':\n default:\n this.error(404)\n return res\n }\n }\n\n // index file support\n if (this._index.length && this.hasTrailingSlash()) {\n this.sendIndex(path)\n return res\n }\n\n this.sendFile(path)\n return res\n}\n\n/**\n * Transfer `path`.\n *\n * @param {String} path\n * @api public\n */\n\nSendStream.prototype.send = function send (path, stat) {\n var len = stat.size\n var options = this.options\n var opts = {}\n var res = this.res\n var req = this.req\n var ranges = req.headers.range\n var offset = options.start || 0\n\n if (headersSent(res)) {\n // impossible to send now\n this.headersAlreadySent()\n return\n }\n\n debug('pipe \"%s\"', path)\n\n // set header fields\n this.setHeader(path, stat)\n\n // set content-type\n this.type(path)\n\n // conditional GET support\n if (this.isConditionalGET()) {\n if (this.isPreconditionFailure()) {\n this.error(412)\n return\n }\n\n if (this.isCachable() && this.isFresh()) {\n this.notModified()\n return\n }\n }\n\n // adjust len to start/end options\n len = Math.max(0, len - offset)\n if (options.end !== undefined) {\n var bytes = options.end - offset + 1\n if (len > bytes) len = bytes\n }\n\n // Range support\n if (this._acceptRanges && BYTES_RANGE_REGEXP.test(ranges)) {\n // parse\n ranges = parseRange(len, ranges, {\n combine: true\n })\n\n // If-Range support\n if (!this.isRangeFresh()) {\n debug('range stale')\n ranges = -2\n }\n\n // unsatisfiable\n if (ranges === -1) {\n debug('range unsatisfiable')\n\n // Content-Range\n res.setHeader('Content-Range', contentRange('bytes', len))\n\n // 416 Requested Range Not Satisfiable\n return this.error(416, {\n headers: { 'Content-Range': res.getHeader('Content-Range') }\n })\n }\n\n // valid (syntactically invalid/multiple ranges are treated as a regular response)\n if (ranges !== -2 && ranges.length === 1) {\n debug('range %j', ranges)\n\n // Content-Range\n res.statusCode = 206\n res.setHeader('Content-Range', contentRange('bytes', len, ranges[0]))\n\n // adjust for requested range\n offset += ranges[0].start\n len = ranges[0].end - ranges[0].start + 1\n }\n }\n\n // clone options\n for (var prop in options) {\n opts[prop] = options[prop]\n }\n\n // set read options\n opts.start = offset\n opts.end = Math.max(offset, offset + len - 1)\n\n // content-length\n res.setHeader('Content-Length', len)\n\n // HEAD support\n if (req.method === 'HEAD') {\n res.end()\n return\n }\n\n this.stream(path, opts)\n}\n\n/**\n * Transfer file for `path`.\n *\n * @param {String} path\n * @api private\n */\nSendStream.prototype.sendFile = function sendFile (path) {\n var i = 0\n var self = this\n\n debug('stat \"%s\"', path)\n fs.stat(path, function onstat (err, stat) {\n if (err && err.code === 'ENOENT' && !extname(path) && path[path.length - 1] !== sep) {\n // not found, check extensions\n return next(err)\n }\n if (err) return self.onStatError(err)\n if (stat.isDirectory()) return self.redirect(path)\n self.emit('file', path, stat)\n self.send(path, stat)\n })\n\n function next (err) {\n if (self._extensions.length <= i) {\n return err\n ? self.onStatError(err)\n : self.error(404)\n }\n\n var p = path + '.' + self._extensions[i++]\n\n debug('stat \"%s\"', p)\n fs.stat(p, function (err, stat) {\n if (err) return next(err)\n if (stat.isDirectory()) return next()\n self.emit('file', p, stat)\n self.send(p, stat)\n })\n }\n}\n\n/**\n * Transfer index for `path`.\n *\n * @param {String} path\n * @api private\n */\nSendStream.prototype.sendIndex = function sendIndex (path) {\n var i = -1\n var self = this\n\n function next (err) {\n if (++i >= self._index.length) {\n if (err) return self.onStatError(err)\n return self.error(404)\n }\n\n var p = join(path, self._index[i])\n\n debug('stat \"%s\"', p)\n fs.stat(p, function (err, stat) {\n if (err) return next(err)\n if (stat.isDirectory()) return next()\n self.emit('file', p, stat)\n self.send(p, stat)\n })\n }\n\n next()\n}\n\n/**\n * Stream `path` to the response.\n *\n * @param {String} path\n * @param {Object} options\n * @api private\n */\n\nSendStream.prototype.stream = function stream (path, options) {\n var self = this\n var res = this.res\n\n // pipe\n var stream = fs.createReadStream(path, options)\n this.emit('stream', stream)\n stream.pipe(res)\n\n // cleanup\n function cleanup () {\n destroy(stream, true)\n }\n\n // response finished, cleanup\n onFinished(res, cleanup)\n\n // error handling\n stream.on('error', function onerror (err) {\n // clean up stream early\n cleanup()\n\n // error\n self.onStatError(err)\n })\n\n // end\n stream.on('end', function onend () {\n self.emit('end')\n })\n}\n\n/**\n * Set content-type based on `path`\n * if it hasn't been explicitly set.\n *\n * @param {String} path\n * @api private\n */\n\nSendStream.prototype.type = function type (path) {\n var res = this.res\n\n if (res.getHeader('Content-Type')) return\n\n var type = mime.lookup(path)\n\n if (!type) {\n debug('no content-type')\n return\n }\n\n var charset = mime.charsets.lookup(type)\n\n debug('content-type %s', type)\n res.setHeader('Content-Type', type + (charset ? '; charset=' + charset : ''))\n}\n\n/**\n * Set response header fields, most\n * fields may be pre-defined.\n *\n * @param {String} path\n * @param {Object} stat\n * @api private\n */\n\nSendStream.prototype.setHeader = function setHeader (path, stat) {\n var res = this.res\n\n this.emit('headers', res, path, stat)\n\n if (this._acceptRanges && !res.getHeader('Accept-Ranges')) {\n debug('accept ranges')\n res.setHeader('Accept-Ranges', 'bytes')\n }\n\n if (this._cacheControl && !res.getHeader('Cache-Control')) {\n var cacheControl = 'public, max-age=' + Math.floor(this._maxage / 1000)\n\n if (this._immutable) {\n cacheControl += ', immutable'\n }\n\n debug('cache-control %s', cacheControl)\n res.setHeader('Cache-Control', cacheControl)\n }\n\n if (this._lastModified && !res.getHeader('Last-Modified')) {\n var modified = stat.mtime.toUTCString()\n debug('modified %s', modified)\n res.setHeader('Last-Modified', modified)\n }\n\n if (this._etag && !res.getHeader('ETag')) {\n var val = etag(stat)\n debug('etag %s', val)\n res.setHeader('ETag', val)\n }\n}\n\n/**\n * Clear all headers from a response.\n *\n * @param {object} res\n * @private\n */\n\nfunction clearHeaders (res) {\n var headers = getHeaderNames(res)\n\n for (var i = 0; i < headers.length; i++) {\n res.removeHeader(headers[i])\n }\n}\n\n/**\n * Collapse all leading slashes into a single slash\n *\n * @param {string} str\n * @private\n */\nfunction collapseLeadingSlashes (str) {\n for (var i = 0; i < str.length; i++) {\n if (str[i] !== '/') {\n break\n }\n }\n\n return i > 1\n ? '/' + str.substr(i)\n : str\n}\n\n/**\n * Determine if path parts contain a dotfile.\n *\n * @api private\n */\n\nfunction containsDotFile (parts) {\n for (var i = 0; i < parts.length; i++) {\n var part = parts[i]\n if (part.length > 1 && part[0] === '.') {\n return true\n }\n }\n\n return false\n}\n\n/**\n * Create a Content-Range header.\n *\n * @param {string} type\n * @param {number} size\n * @param {array} [range]\n */\n\nfunction contentRange (type, size, range) {\n return type + ' ' + (range ? range.start + '-' + range.end : '*') + '/' + size\n}\n\n/**\n * Create a minimal HTML document.\n *\n * @param {string} title\n * @param {string} body\n * @private\n */\n\nfunction createHtmlDocument (title, body) {\n return '<!DOCTYPE html>\\n' +\n '<html lang=\"en\">\\n' +\n '<head>\\n' +\n '<meta charset=\"utf-8\">\\n' +\n '<title>' + title + '</title>\\n' +\n '</head>\\n' +\n '<body>\\n' +\n '<pre>' + body + '</pre>\\n' +\n '</body>\\n' +\n '</html>\\n'\n}\n\n/**\n * Create a HttpError object from simple arguments.\n *\n * @param {number} status\n * @param {Error|object} err\n * @private\n */\n\nfunction createHttpError (status, err) {\n if (!err) {\n return createError(status)\n }\n\n return err instanceof Error\n ? createError(status, err, { expose: false })\n : createError(status, err)\n}\n\n/**\n * decodeURIComponent.\n *\n * Allows V8 to only deoptimize this fn instead of all\n * of send().\n *\n * @param {String} path\n * @api private\n */\n\nfunction decode (path) {\n try {\n return decodeURIComponent(path)\n } catch (err) {\n return -1\n }\n}\n\n/**\n * Get the header names on a respnse.\n *\n * @param {object} res\n * @returns {array[string]}\n * @private\n */\n\nfunction getHeaderNames (res) {\n return typeof res.getHeaderNames !== 'function'\n ? Object.keys(res._headers || {})\n : res.getHeaderNames()\n}\n\n/**\n * Determine if emitter has listeners of a given type.\n *\n * The way to do this check is done three different ways in Node.js >= 0.8\n * so this consolidates them into a minimal set using instance methods.\n *\n * @param {EventEmitter} emitter\n * @param {string} type\n * @returns {boolean}\n * @private\n */\n\nfunction hasListeners (emitter, type) {\n var count = typeof emitter.listenerCount !== 'function'\n ? emitter.listeners(type).length\n : emitter.listenerCount(type)\n\n return count > 0\n}\n\n/**\n * Determine if the response headers have been sent.\n *\n * @param {object} res\n * @returns {boolean}\n * @private\n */\n\nfunction headersSent (res) {\n return typeof res.headersSent !== 'boolean'\n ? Boolean(res._header)\n : res.headersSent\n}\n\n/**\n * Normalize the index option into an array.\n *\n * @param {boolean|string|array} val\n * @param {string} name\n * @private\n */\n\nfunction normalizeList (val, name) {\n var list = [].concat(val || [])\n\n for (var i = 0; i < list.length; i++) {\n if (typeof list[i] !== 'string') {\n throw new TypeError(name + ' must be array of strings or false')\n }\n }\n\n return list\n}\n\n/**\n * Parse an HTTP Date into a number.\n *\n * @param {string} date\n * @private\n */\n\nfunction parseHttpDate (date) {\n var timestamp = date && Date.parse(date)\n\n return typeof timestamp === 'number'\n ? timestamp\n : NaN\n}\n\n/**\n * Parse a HTTP token list.\n *\n * @param {string} str\n * @private\n */\n\nfunction parseTokenList (str) {\n var end = 0\n var list = []\n var start = 0\n\n // gather tokens\n for (var i = 0, len = str.length; i < len; i++) {\n switch (str.charCodeAt(i)) {\n case 0x20: /* */\n if (start === end) {\n start = end = i + 1\n }\n break\n case 0x2c: /* , */\n if (start !== end) {\n list.push(str.substring(start, end))\n }\n start = end = i + 1\n break\n default:\n end = i + 1\n break\n }\n }\n\n // final token\n if (start !== end) {\n list.push(str.substring(start, end))\n }\n\n return list\n}\n\n/**\n * Set an object of headers on a response.\n *\n * @param {object} res\n * @param {object} headers\n * @private\n */\n\nfunction setHeaders (res, headers) {\n var keys = Object.keys(headers)\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i]\n res.setHeader(key, headers[key])\n }\n}\n", "/*!\n * forwarded\n * Copyright(c) 2014-2017 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = forwarded\n\n/**\n * Get all addresses in the request, using the `X-Forwarded-For` header.\n *\n * @param {object} req\n * @return {array}\n * @public\n */\n\nfunction forwarded (req) {\n if (!req) {\n throw new TypeError('argument req is required')\n }\n\n // simple header parsing\n var proxyAddrs = parse(req.headers['x-forwarded-for'] || '')\n var socketAddr = getSocketAddr(req)\n var addrs = [socketAddr].concat(proxyAddrs)\n\n // return all addresses\n return addrs\n}\n\n/**\n * Get the socket address for a request.\n *\n * @param {object} req\n * @return {string}\n * @private\n */\n\nfunction getSocketAddr (req) {\n return req.socket\n ? req.socket.remoteAddress\n : req.connection.remoteAddress\n}\n\n/**\n * Parse the X-Forwarded-For header.\n *\n * @param {string} header\n * @private\n */\n\nfunction parse (header) {\n var end = header.length\n var list = []\n var start = header.length\n\n // gather addresses, backwards\n for (var i = header.length - 1; i >= 0; i--) {\n switch (header.charCodeAt(i)) {\n case 0x20: /* */\n if (start === end) {\n start = end = i\n }\n break\n case 0x2c: /* , */\n if (start !== end) {\n list.push(header.substring(start, end))\n }\n start = end = i\n break\n default:\n start = i\n break\n }\n }\n\n // final address\n if (start !== end) {\n list.push(header.substring(start, end))\n }\n\n return list\n}\n", "(function() {\n var expandIPv6, ipaddr, ipv4Part, ipv4Regexes, ipv6Part, ipv6Regexes, matchCIDR, root, zoneIndex;\n\n ipaddr = {};\n\n root = this;\n\n if ((typeof module !== \"undefined\" && module !== null) && module.exports) {\n module.exports = ipaddr;\n } else {\n root['ipaddr'] = ipaddr;\n }\n\n matchCIDR = function(first, second, partSize, cidrBits) {\n var part, shift;\n if (first.length !== second.length) {\n throw new Error(\"ipaddr: cannot match CIDR for objects with different lengths\");\n }\n part = 0;\n while (cidrBits > 0) {\n shift = partSize - cidrBits;\n if (shift < 0) {\n shift = 0;\n }\n if (first[part] >> shift !== second[part] >> shift) {\n return false;\n }\n cidrBits -= partSize;\n part += 1;\n }\n return true;\n };\n\n ipaddr.subnetMatch = function(address, rangeList, defaultName) {\n var k, len, rangeName, rangeSubnets, subnet;\n if (defaultName == null) {\n defaultName = 'unicast';\n }\n for (rangeName in rangeList) {\n rangeSubnets = rangeList[rangeName];\n if (rangeSubnets[0] && !(rangeSubnets[0] instanceof Array)) {\n rangeSubnets = [rangeSubnets];\n }\n for (k = 0, len = rangeSubnets.length; k < len; k++) {\n subnet = rangeSubnets[k];\n if (address.kind() === subnet[0].kind()) {\n if (address.match.apply(address, subnet)) {\n return rangeName;\n }\n }\n }\n }\n return defaultName;\n };\n\n ipaddr.IPv4 = (function() {\n function IPv4(octets) {\n var k, len, octet;\n if (octets.length !== 4) {\n throw new Error(\"ipaddr: ipv4 octet count should be 4\");\n }\n for (k = 0, len = octets.length; k < len; k++) {\n octet = octets[k];\n if (!((0 <= octet && octet <= 255))) {\n throw new Error(\"ipaddr: ipv4 octet should fit in 8 bits\");\n }\n }\n this.octets = octets;\n }\n\n IPv4.prototype.kind = function() {\n return 'ipv4';\n };\n\n IPv4.prototype.toString = function() {\n return this.octets.join(\".\");\n };\n\n IPv4.prototype.toNormalizedString = function() {\n return this.toString();\n };\n\n IPv4.prototype.toByteArray = function() {\n return this.octets.slice(0);\n };\n\n IPv4.prototype.match = function(other, cidrRange) {\n var ref;\n if (cidrRange === void 0) {\n ref = other, other = ref[0], cidrRange = ref[1];\n }\n if (other.kind() !== 'ipv4') {\n throw new Error(\"ipaddr: cannot match ipv4 address with non-ipv4 one\");\n }\n return matchCIDR(this.octets, other.octets, 8, cidrRange);\n };\n\n IPv4.prototype.SpecialRanges = {\n unspecified: [[new IPv4([0, 0, 0, 0]), 8]],\n broadcast: [[new IPv4([255, 255, 255, 255]), 32]],\n multicast: [[new IPv4([224, 0, 0, 0]), 4]],\n linkLocal: [[new IPv4([169, 254, 0, 0]), 16]],\n loopback: [[new IPv4([127, 0, 0, 0]), 8]],\n carrierGradeNat: [[new IPv4([100, 64, 0, 0]), 10]],\n \"private\": [[new IPv4([10, 0, 0, 0]), 8], [new IPv4([172, 16, 0, 0]), 12], [new IPv4([192, 168, 0, 0]), 16]],\n reserved: [[new IPv4([192, 0, 0, 0]), 24], [new IPv4([192, 0, 2, 0]), 24], [new IPv4([192, 88, 99, 0]), 24], [new IPv4([198, 51, 100, 0]), 24], [new IPv4([203, 0, 113, 0]), 24], [new IPv4([240, 0, 0, 0]), 4]]\n };\n\n IPv4.prototype.range = function() {\n return ipaddr.subnetMatch(this, this.SpecialRanges);\n };\n\n IPv4.prototype.toIPv4MappedAddress = function() {\n return ipaddr.IPv6.parse(\"::ffff:\" + (this.toString()));\n };\n\n IPv4.prototype.prefixLengthFromSubnetMask = function() {\n var cidr, i, k, octet, stop, zeros, zerotable;\n zerotable = {\n 0: 8,\n 128: 7,\n 192: 6,\n 224: 5,\n 240: 4,\n 248: 3,\n 252: 2,\n 254: 1,\n 255: 0\n };\n cidr = 0;\n stop = false;\n for (i = k = 3; k >= 0; i = k += -1) {\n octet = this.octets[i];\n if (octet in zerotable) {\n zeros = zerotable[octet];\n if (stop && zeros !== 0) {\n return null;\n }\n if (zeros !== 8) {\n stop = true;\n }\n cidr += zeros;\n } else {\n return null;\n }\n }\n return 32 - cidr;\n };\n\n return IPv4;\n\n })();\n\n ipv4Part = \"(0?\\\\d+|0x[a-f0-9]+)\";\n\n ipv4Regexes = {\n fourOctet: new RegExp(\"^\" + ipv4Part + \"\\\\.\" + ipv4Part + \"\\\\.\" + ipv4Part + \"\\\\.\" + ipv4Part + \"$\", 'i'),\n longValue: new RegExp(\"^\" + ipv4Part + \"$\", 'i')\n };\n\n ipaddr.IPv4.parser = function(string) {\n var match, parseIntAuto, part, shift, value;\n parseIntAuto = function(string) {\n if (string[0] === \"0\" && string[1] !== \"x\") {\n return parseInt(string, 8);\n } else {\n return parseInt(string);\n }\n };\n if (match = string.match(ipv4Regexes.fourOctet)) {\n return (function() {\n var k, len, ref, results;\n ref = match.slice(1, 6);\n results = [];\n for (k = 0, len = ref.length; k < len; k++) {\n part = ref[k];\n results.push(parseIntAuto(part));\n }\n return results;\n })();\n } else if (match = string.match(ipv4Regexes.longValue)) {\n value = parseIntAuto(match[1]);\n if (value > 0xffffffff || value < 0) {\n throw new Error(\"ipaddr: address outside defined range\");\n }\n return ((function() {\n var k, results;\n results = [];\n for (shift = k = 0; k <= 24; shift = k += 8) {\n results.push((value >> shift) & 0xff);\n }\n return results;\n })()).reverse();\n } else {\n return null;\n }\n };\n\n ipaddr.IPv6 = (function() {\n function IPv6(parts, zoneId) {\n var i, k, l, len, part, ref;\n if (parts.length === 16) {\n this.parts = [];\n for (i = k = 0; k <= 14; i = k += 2) {\n this.parts.push((parts[i] << 8) | parts[i + 1]);\n }\n } else if (parts.length === 8) {\n this.parts = parts;\n } else {\n throw new Error(\"ipaddr: ipv6 part count should be 8 or 16\");\n }\n ref = this.parts;\n for (l = 0, len = ref.length; l < len; l++) {\n part = ref[l];\n if (!((0 <= part && part <= 0xffff))) {\n throw new Error(\"ipaddr: ipv6 part should fit in 16 bits\");\n }\n }\n if (zoneId) {\n this.zoneId = zoneId;\n }\n }\n\n IPv6.prototype.kind = function() {\n return 'ipv6';\n };\n\n IPv6.prototype.toString = function() {\n return this.toNormalizedString().replace(/((^|:)(0(:|$))+)/, '::');\n };\n\n IPv6.prototype.toRFC5952String = function() {\n var bestMatchIndex, bestMatchLength, match, regex, string;\n regex = /((^|:)(0(:|$)){2,})/g;\n string = this.toNormalizedString();\n bestMatchIndex = 0;\n bestMatchLength = -1;\n while ((match = regex.exec(string))) {\n if (match[0].length > bestMatchLength) {\n bestMatchIndex = match.index;\n bestMatchLength = match[0].length;\n }\n }\n if (bestMatchLength < 0) {\n return string;\n }\n return string.substring(0, bestMatchIndex) + '::' + string.substring(bestMatchIndex + bestMatchLength);\n };\n\n IPv6.prototype.toByteArray = function() {\n var bytes, k, len, part, ref;\n bytes = [];\n ref = this.parts;\n for (k = 0, len = ref.length; k < len; k++) {\n part = ref[k];\n bytes.push(part >> 8);\n bytes.push(part & 0xff);\n }\n return bytes;\n };\n\n IPv6.prototype.toNormalizedString = function() {\n var addr, part, suffix;\n addr = ((function() {\n var k, len, ref, results;\n ref = this.parts;\n results = [];\n for (k = 0, len = ref.length; k < len; k++) {\n part = ref[k];\n results.push(part.toString(16));\n }\n return results;\n }).call(this)).join(\":\");\n suffix = '';\n if (this.zoneId) {\n suffix = '%' + this.zoneId;\n }\n return addr + suffix;\n };\n\n IPv6.prototype.toFixedLengthString = function() {\n var addr, part, suffix;\n addr = ((function() {\n var k, len, ref, results;\n ref = this.parts;\n results = [];\n for (k = 0, len = ref.length; k < len; k++) {\n part = ref[k];\n results.push(part.toString(16).padStart(4, '0'));\n }\n return results;\n }).call(this)).join(\":\");\n suffix = '';\n if (this.zoneId) {\n suffix = '%' + this.zoneId;\n }\n return addr + suffix;\n };\n\n IPv6.prototype.match = function(other, cidrRange) {\n var ref;\n if (cidrRange === void 0) {\n ref = other, other = ref[0], cidrRange = ref[1];\n }\n if (other.kind() !== 'ipv6') {\n throw new Error(\"ipaddr: cannot match ipv6 address with non-ipv6 one\");\n }\n return matchCIDR(this.parts, other.parts, 16, cidrRange);\n };\n\n IPv6.prototype.SpecialRanges = {\n unspecified: [new IPv6([0, 0, 0, 0, 0, 0, 0, 0]), 128],\n linkLocal: [new IPv6([0xfe80, 0, 0, 0, 0, 0, 0, 0]), 10],\n multicast: [new IPv6([0xff00, 0, 0, 0, 0, 0, 0, 0]), 8],\n loopback: [new IPv6([0, 0, 0, 0, 0, 0, 0, 1]), 128],\n uniqueLocal: [new IPv6([0xfc00, 0, 0, 0, 0, 0, 0, 0]), 7],\n ipv4Mapped: [new IPv6([0, 0, 0, 0, 0, 0xffff, 0, 0]), 96],\n rfc6145: [new IPv6([0, 0, 0, 0, 0xffff, 0, 0, 0]), 96],\n rfc6052: [new IPv6([0x64, 0xff9b, 0, 0, 0, 0, 0, 0]), 96],\n '6to4': [new IPv6([0x2002, 0, 0, 0, 0, 0, 0, 0]), 16],\n teredo: [new IPv6([0x2001, 0, 0, 0, 0, 0, 0, 0]), 32],\n reserved: [[new IPv6([0x2001, 0xdb8, 0, 0, 0, 0, 0, 0]), 32]]\n };\n\n IPv6.prototype.range = function() {\n return ipaddr.subnetMatch(this, this.SpecialRanges);\n };\n\n IPv6.prototype.isIPv4MappedAddress = function() {\n return this.range() === 'ipv4Mapped';\n };\n\n IPv6.prototype.toIPv4Address = function() {\n var high, low, ref;\n if (!this.isIPv4MappedAddress()) {\n throw new Error(\"ipaddr: trying to convert a generic ipv6 address to ipv4\");\n }\n ref = this.parts.slice(-2), high = ref[0], low = ref[1];\n return new ipaddr.IPv4([high >> 8, high & 0xff, low >> 8, low & 0xff]);\n };\n\n IPv6.prototype.prefixLengthFromSubnetMask = function() {\n var cidr, i, k, part, stop, zeros, zerotable;\n zerotable = {\n 0: 16,\n 32768: 15,\n 49152: 14,\n 57344: 13,\n 61440: 12,\n 63488: 11,\n 64512: 10,\n 65024: 9,\n 65280: 8,\n 65408: 7,\n 65472: 6,\n 65504: 5,\n 65520: 4,\n 65528: 3,\n 65532: 2,\n 65534: 1,\n 65535: 0\n };\n cidr = 0;\n stop = false;\n for (i = k = 7; k >= 0; i = k += -1) {\n part = this.parts[i];\n if (part in zerotable) {\n zeros = zerotable[part];\n if (stop && zeros !== 0) {\n return null;\n }\n if (zeros !== 16) {\n stop = true;\n }\n cidr += zeros;\n } else {\n return null;\n }\n }\n return 128 - cidr;\n };\n\n return IPv6;\n\n })();\n\n ipv6Part = \"(?:[0-9a-f]+::?)+\";\n\n zoneIndex = \"%[0-9a-z]{1,}\";\n\n ipv6Regexes = {\n zoneIndex: new RegExp(zoneIndex, 'i'),\n \"native\": new RegExp(\"^(::)?(\" + ipv6Part + \")?([0-9a-f]+)?(::)?(\" + zoneIndex + \")?$\", 'i'),\n transitional: new RegExp((\"^((?:\" + ipv6Part + \")|(?:::)(?:\" + ipv6Part + \")?)\") + (ipv4Part + \"\\\\.\" + ipv4Part + \"\\\\.\" + ipv4Part + \"\\\\.\" + ipv4Part) + (\"(\" + zoneIndex + \")?$\"), 'i')\n };\n\n expandIPv6 = function(string, parts) {\n var colonCount, lastColon, part, replacement, replacementCount, zoneId;\n if (string.indexOf('::') !== string.lastIndexOf('::')) {\n return null;\n }\n zoneId = (string.match(ipv6Regexes['zoneIndex']) || [])[0];\n if (zoneId) {\n zoneId = zoneId.substring(1);\n string = string.replace(/%.+$/, '');\n }\n colonCount = 0;\n lastColon = -1;\n while ((lastColon = string.indexOf(':', lastColon + 1)) >= 0) {\n colonCount++;\n }\n if (string.substr(0, 2) === '::') {\n colonCount--;\n }\n if (string.substr(-2, 2) === '::') {\n colonCount--;\n }\n if (colonCount > parts) {\n return null;\n }\n replacementCount = parts - colonCount;\n replacement = ':';\n while (replacementCount--) {\n replacement += '0:';\n }\n string = string.replace('::', replacement);\n if (string[0] === ':') {\n string = string.slice(1);\n }\n if (string[string.length - 1] === ':') {\n string = string.slice(0, -1);\n }\n parts = (function() {\n var k, len, ref, results;\n ref = string.split(\":\");\n results = [];\n for (k = 0, len = ref.length; k < len; k++) {\n part = ref[k];\n results.push(parseInt(part, 16));\n }\n return results;\n })();\n return {\n parts: parts,\n zoneId: zoneId\n };\n };\n\n ipaddr.IPv6.parser = function(string) {\n var addr, k, len, match, octet, octets, zoneId;\n if (ipv6Regexes['native'].test(string)) {\n return expandIPv6(string, 8);\n } else if (match = string.match(ipv6Regexes['transitional'])) {\n zoneId = match[6] || '';\n addr = expandIPv6(match[1].slice(0, -1) + zoneId, 6);\n if (addr.parts) {\n octets = [parseInt(match[2]), parseInt(match[3]), parseInt(match[4]), parseInt(match[5])];\n for (k = 0, len = octets.length; k < len; k++) {\n octet = octets[k];\n if (!((0 <= octet && octet <= 255))) {\n return null;\n }\n }\n addr.parts.push(octets[0] << 8 | octets[1]);\n addr.parts.push(octets[2] << 8 | octets[3]);\n return {\n parts: addr.parts,\n zoneId: addr.zoneId\n };\n }\n }\n return null;\n };\n\n ipaddr.IPv4.isIPv4 = ipaddr.IPv6.isIPv6 = function(string) {\n return this.parser(string) !== null;\n };\n\n ipaddr.IPv4.isValid = function(string) {\n var e;\n try {\n new this(this.parser(string));\n return true;\n } catch (error1) {\n e = error1;\n return false;\n }\n };\n\n ipaddr.IPv4.isValidFourPartDecimal = function(string) {\n if (ipaddr.IPv4.isValid(string) && string.match(/^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){3}$/)) {\n return true;\n } else {\n return false;\n }\n };\n\n ipaddr.IPv6.isValid = function(string) {\n var addr, e;\n if (typeof string === \"string\" && string.indexOf(\":\") === -1) {\n return false;\n }\n try {\n addr = this.parser(string);\n new this(addr.parts, addr.zoneId);\n return true;\n } catch (error1) {\n e = error1;\n return false;\n }\n };\n\n ipaddr.IPv4.parse = function(string) {\n var parts;\n parts = this.parser(string);\n if (parts === null) {\n throw new Error(\"ipaddr: string is not formatted like ip address\");\n }\n return new this(parts);\n };\n\n ipaddr.IPv6.parse = function(string) {\n var addr;\n addr = this.parser(string);\n if (addr.parts === null) {\n throw new Error(\"ipaddr: string is not formatted like ip address\");\n }\n return new this(addr.parts, addr.zoneId);\n };\n\n ipaddr.IPv4.parseCIDR = function(string) {\n var maskLength, match, parsed;\n if (match = string.match(/^(.+)\\/(\\d+)$/)) {\n maskLength = parseInt(match[2]);\n if (maskLength >= 0 && maskLength <= 32) {\n parsed = [this.parse(match[1]), maskLength];\n Object.defineProperty(parsed, 'toString', {\n value: function() {\n return this.join('/');\n }\n });\n return parsed;\n }\n }\n throw new Error(\"ipaddr: string is not formatted like an IPv4 CIDR range\");\n };\n\n ipaddr.IPv4.subnetMaskFromPrefixLength = function(prefix) {\n var filledOctetCount, j, octets;\n prefix = parseInt(prefix);\n if (prefix < 0 || prefix > 32) {\n throw new Error('ipaddr: invalid IPv4 prefix length');\n }\n octets = [0, 0, 0, 0];\n j = 0;\n filledOctetCount = Math.floor(prefix / 8);\n while (j < filledOctetCount) {\n octets[j] = 255;\n j++;\n }\n if (filledOctetCount < 4) {\n octets[filledOctetCount] = Math.pow(2, prefix % 8) - 1 << 8 - (prefix % 8);\n }\n return new this(octets);\n };\n\n ipaddr.IPv4.broadcastAddressFromCIDR = function(string) {\n var cidr, error, i, ipInterfaceOctets, octets, subnetMaskOctets;\n try {\n cidr = this.parseCIDR(string);\n ipInterfaceOctets = cidr[0].toByteArray();\n subnetMaskOctets = this.subnetMaskFromPrefixLength(cidr[1]).toByteArray();\n octets = [];\n i = 0;\n while (i < 4) {\n octets.push(parseInt(ipInterfaceOctets[i], 10) | parseInt(subnetMaskOctets[i], 10) ^ 255);\n i++;\n }\n return new this(octets);\n } catch (error1) {\n error = error1;\n throw new Error('ipaddr: the address does not have IPv4 CIDR format');\n }\n };\n\n ipaddr.IPv4.networkAddressFromCIDR = function(string) {\n var cidr, error, i, ipInterfaceOctets, octets, subnetMaskOctets;\n try {\n cidr = this.parseCIDR(string);\n ipInterfaceOctets = cidr[0].toByteArray();\n subnetMaskOctets = this.subnetMaskFromPrefixLength(cidr[1]).toByteArray();\n octets = [];\n i = 0;\n while (i < 4) {\n octets.push(parseInt(ipInterfaceOctets[i], 10) & parseInt(subnetMaskOctets[i], 10));\n i++;\n }\n return new this(octets);\n } catch (error1) {\n error = error1;\n throw new Error('ipaddr: the address does not have IPv4 CIDR format');\n }\n };\n\n ipaddr.IPv6.parseCIDR = function(string) {\n var maskLength, match, parsed;\n if (match = string.match(/^(.+)\\/(\\d+)$/)) {\n maskLength = parseInt(match[2]);\n if (maskLength >= 0 && maskLength <= 128) {\n parsed = [this.parse(match[1]), maskLength];\n Object.defineProperty(parsed, 'toString', {\n value: function() {\n return this.join('/');\n }\n });\n return parsed;\n }\n }\n throw new Error(\"ipaddr: string is not formatted like an IPv6 CIDR range\");\n };\n\n ipaddr.isValid = function(string) {\n return ipaddr.IPv6.isValid(string) || ipaddr.IPv4.isValid(string);\n };\n\n ipaddr.parse = function(string) {\n if (ipaddr.IPv6.isValid(string)) {\n return ipaddr.IPv6.parse(string);\n } else if (ipaddr.IPv4.isValid(string)) {\n return ipaddr.IPv4.parse(string);\n } else {\n throw new Error(\"ipaddr: the address has neither IPv6 nor IPv4 format\");\n }\n };\n\n ipaddr.parseCIDR = function(string) {\n var e;\n try {\n return ipaddr.IPv6.parseCIDR(string);\n } catch (error1) {\n e = error1;\n try {\n return ipaddr.IPv4.parseCIDR(string);\n } catch (error1) {\n e = error1;\n throw new Error(\"ipaddr: the address has neither IPv6 nor IPv4 CIDR format\");\n }\n }\n };\n\n ipaddr.fromByteArray = function(bytes) {\n var length;\n length = bytes.length;\n if (length === 4) {\n return new ipaddr.IPv4(bytes);\n } else if (length === 16) {\n return new ipaddr.IPv6(bytes);\n } else {\n throw new Error(\"ipaddr: the binary input is neither an IPv6 nor IPv4 address\");\n }\n };\n\n ipaddr.process = function(string) {\n var addr;\n addr = this.parse(string);\n if (addr.kind() === 'ipv6' && addr.isIPv4MappedAddress()) {\n return addr.toIPv4Address();\n } else {\n return addr;\n }\n };\n\n}).call(this);\n", "/*!\n * proxy-addr\n * Copyright(c) 2014-2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = proxyaddr\nmodule.exports.all = alladdrs\nmodule.exports.compile = compile\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar forwarded = require('forwarded')\nvar ipaddr = require('ipaddr.js')\n\n/**\n * Variables.\n * @private\n */\n\nvar DIGIT_REGEXP = /^[0-9]+$/\nvar isip = ipaddr.isValid\nvar parseip = ipaddr.parse\n\n/**\n * Pre-defined IP ranges.\n * @private\n */\n\nvar IP_RANGES = {\n linklocal: ['169.254.0.0/16', 'fe80::/10'],\n loopback: ['127.0.0.1/8', '::1/128'],\n uniquelocal: ['10.0.0.0/8', '172.16.0.0/12', '192.168.0.0/16', 'fc00::/7']\n}\n\n/**\n * Get all addresses in the request, optionally stopping\n * at the first untrusted.\n *\n * @param {Object} request\n * @param {Function|Array|String} [trust]\n * @public\n */\n\nfunction alladdrs (req, trust) {\n // get addresses\n var addrs = forwarded(req)\n\n if (!trust) {\n // Return all addresses\n return addrs\n }\n\n if (typeof trust !== 'function') {\n trust = compile(trust)\n }\n\n for (var i = 0; i < addrs.length - 1; i++) {\n if (trust(addrs[i], i)) continue\n\n addrs.length = i + 1\n }\n\n return addrs\n}\n\n/**\n * Compile argument into trust function.\n *\n * @param {Array|String} val\n * @private\n */\n\nfunction compile (val) {\n if (!val) {\n throw new TypeError('argument is required')\n }\n\n var trust\n\n if (typeof val === 'string') {\n trust = [val]\n } else if (Array.isArray(val)) {\n trust = val.slice()\n } else {\n throw new TypeError('unsupported trust argument')\n }\n\n for (var i = 0; i < trust.length; i++) {\n val = trust[i]\n\n if (!Object.prototype.hasOwnProperty.call(IP_RANGES, val)) {\n continue\n }\n\n // Splice in pre-defined range\n val = IP_RANGES[val]\n trust.splice.apply(trust, [i, 1].concat(val))\n i += val.length - 1\n }\n\n return compileTrust(compileRangeSubnets(trust))\n}\n\n/**\n * Compile `arr` elements into range subnets.\n *\n * @param {Array} arr\n * @private\n */\n\nfunction compileRangeSubnets (arr) {\n var rangeSubnets = new Array(arr.length)\n\n for (var i = 0; i < arr.length; i++) {\n rangeSubnets[i] = parseipNotation(arr[i])\n }\n\n return rangeSubnets\n}\n\n/**\n * Compile range subnet array into trust function.\n *\n * @param {Array} rangeSubnets\n * @private\n */\n\nfunction compileTrust (rangeSubnets) {\n // Return optimized function based on length\n var len = rangeSubnets.length\n return len === 0\n ? trustNone\n : len === 1\n ? trustSingle(rangeSubnets[0])\n : trustMulti(rangeSubnets)\n}\n\n/**\n * Parse IP notation string into range subnet.\n *\n * @param {String} note\n * @private\n */\n\nfunction parseipNotation (note) {\n var pos = note.lastIndexOf('/')\n var str = pos !== -1\n ? note.substring(0, pos)\n : note\n\n if (!isip(str)) {\n throw new TypeError('invalid IP address: ' + str)\n }\n\n var ip = parseip(str)\n\n if (pos === -1 && ip.kind() === 'ipv6' && ip.isIPv4MappedAddress()) {\n // Store as IPv4\n ip = ip.toIPv4Address()\n }\n\n var max = ip.kind() === 'ipv6'\n ? 128\n : 32\n\n var range = pos !== -1\n ? note.substring(pos + 1, note.length)\n : null\n\n if (range === null) {\n range = max\n } else if (DIGIT_REGEXP.test(range)) {\n range = parseInt(range, 10)\n } else if (ip.kind() === 'ipv4' && isip(range)) {\n range = parseNetmask(range)\n } else {\n range = null\n }\n\n if (range <= 0 || range > max) {\n throw new TypeError('invalid range on address: ' + note)\n }\n\n return [ip, range]\n}\n\n/**\n * Parse netmask string into CIDR range.\n *\n * @param {String} netmask\n * @private\n */\n\nfunction parseNetmask (netmask) {\n var ip = parseip(netmask)\n var kind = ip.kind()\n\n return kind === 'ipv4'\n ? ip.prefixLengthFromSubnetMask()\n : null\n}\n\n/**\n * Determine address of proxied request.\n *\n * @param {Object} request\n * @param {Function|Array|String} trust\n * @public\n */\n\nfunction proxyaddr (req, trust) {\n if (!req) {\n throw new TypeError('req argument is required')\n }\n\n if (!trust) {\n throw new TypeError('trust argument is required')\n }\n\n var addrs = alladdrs(req, trust)\n var addr = addrs[addrs.length - 1]\n\n return addr\n}\n\n/**\n * Static trust function to trust nothing.\n *\n * @private\n */\n\nfunction trustNone () {\n return false\n}\n\n/**\n * Compile trust function for multiple subnets.\n *\n * @param {Array} subnets\n * @private\n */\n\nfunction trustMulti (subnets) {\n return function trust (addr) {\n if (!isip(addr)) return false\n\n var ip = parseip(addr)\n var ipconv\n var kind = ip.kind()\n\n for (var i = 0; i < subnets.length; i++) {\n var subnet = subnets[i]\n var subnetip = subnet[0]\n var subnetkind = subnetip.kind()\n var subnetrange = subnet[1]\n var trusted = ip\n\n if (kind !== subnetkind) {\n if (subnetkind === 'ipv4' && !ip.isIPv4MappedAddress()) {\n // Incompatible IP addresses\n continue\n }\n\n if (!ipconv) {\n // Convert IP to match subnet IP kind\n ipconv = subnetkind === 'ipv4'\n ? ip.toIPv4Address()\n : ip.toIPv4MappedAddress()\n }\n\n trusted = ipconv\n }\n\n if (trusted.match(subnetip, subnetrange)) {\n return true\n }\n }\n\n return false\n }\n}\n\n/**\n * Compile trust function for single subnet.\n *\n * @param {Object} subnet\n * @private\n */\n\nfunction trustSingle (subnet) {\n var subnetip = subnet[0]\n var subnetkind = subnetip.kind()\n var subnetisipv4 = subnetkind === 'ipv4'\n var subnetrange = subnet[1]\n\n return function trust (addr) {\n if (!isip(addr)) return false\n\n var ip = parseip(addr)\n var kind = ip.kind()\n\n if (kind !== subnetkind) {\n if (subnetisipv4 && !ip.isIPv4MappedAddress()) {\n // Incompatible IP addresses\n return false\n }\n\n // Convert IP to match subnet IP kind\n ip = subnetisipv4\n ? ip.toIPv4Address()\n : ip.toIPv4MappedAddress()\n }\n\n return ip.match(subnetip, subnetrange)\n }\n}\n", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @api private\n */\n\nvar Buffer = require('safe-buffer').Buffer\nvar contentDisposition = require('content-disposition');\nvar contentType = require('content-type');\nvar deprecate = require('depd')('express');\nvar flatten = require('array-flatten');\nvar mime = require('send').mime;\nvar etag = require('etag');\nvar proxyaddr = require('proxy-addr');\nvar qs = require('qs');\nvar querystring = require('querystring');\n\n/**\n * Return strong ETag for `body`.\n *\n * @param {String|Buffer} body\n * @param {String} [encoding]\n * @return {String}\n * @api private\n */\n\nexports.etag = createETagGenerator({ weak: false })\n\n/**\n * Return weak ETag for `body`.\n *\n * @param {String|Buffer} body\n * @param {String} [encoding]\n * @return {String}\n * @api private\n */\n\nexports.wetag = createETagGenerator({ weak: true })\n\n/**\n * Check if `path` looks absolute.\n *\n * @param {String} path\n * @return {Boolean}\n * @api private\n */\n\nexports.isAbsolute = function(path){\n if ('/' === path[0]) return true;\n if (':' === path[1] && ('\\\\' === path[2] || '/' === path[2])) return true; // Windows device path\n if ('\\\\\\\\' === path.substring(0, 2)) return true; // Microsoft Azure absolute path\n};\n\n/**\n * Flatten the given `arr`.\n *\n * @param {Array} arr\n * @return {Array}\n * @api private\n */\n\nexports.flatten = deprecate.function(flatten,\n 'utils.flatten: use array-flatten npm module instead');\n\n/**\n * Normalize the given `type`, for example \"html\" becomes \"text/html\".\n *\n * @param {String} type\n * @return {Object}\n * @api private\n */\n\nexports.normalizeType = function(type){\n return ~type.indexOf('/')\n ? acceptParams(type)\n : { value: mime.lookup(type), params: {} };\n};\n\n/**\n * Normalize `types`, for example \"html\" becomes \"text/html\".\n *\n * @param {Array} types\n * @return {Array}\n * @api private\n */\n\nexports.normalizeTypes = function(types){\n var ret = [];\n\n for (var i = 0; i < types.length; ++i) {\n ret.push(exports.normalizeType(types[i]));\n }\n\n return ret;\n};\n\n/**\n * Generate Content-Disposition header appropriate for the filename.\n * non-ascii filenames are urlencoded and a filename* parameter is added\n *\n * @param {String} filename\n * @return {String}\n * @api private\n */\n\nexports.contentDisposition = deprecate.function(contentDisposition,\n 'utils.contentDisposition: use content-disposition npm module instead');\n\n/**\n * Parse accept params `str` returning an\n * object with `.value`, `.quality` and `.params`.\n * also includes `.originalIndex` for stable sorting\n *\n * @param {String} str\n * @param {Number} index\n * @return {Object}\n * @api private\n */\n\nfunction acceptParams(str, index) {\n var parts = str.split(/ *; */);\n var ret = { value: parts[0], quality: 1, params: {}, originalIndex: index };\n\n for (var i = 1; i < parts.length; ++i) {\n var pms = parts[i].split(/ *= */);\n if ('q' === pms[0]) {\n ret.quality = parseFloat(pms[1]);\n } else {\n ret.params[pms[0]] = pms[1];\n }\n }\n\n return ret;\n}\n\n/**\n * Compile \"etag\" value to function.\n *\n * @param {Boolean|String|Function} val\n * @return {Function}\n * @api private\n */\n\nexports.compileETag = function(val) {\n var fn;\n\n if (typeof val === 'function') {\n return val;\n }\n\n switch (val) {\n case true:\n case 'weak':\n fn = exports.wetag;\n break;\n case false:\n break;\n case 'strong':\n fn = exports.etag;\n break;\n default:\n throw new TypeError('unknown value for etag function: ' + val);\n }\n\n return fn;\n}\n\n/**\n * Compile \"query parser\" value to function.\n *\n * @param {String|Function} val\n * @return {Function}\n * @api private\n */\n\nexports.compileQueryParser = function compileQueryParser(val) {\n var fn;\n\n if (typeof val === 'function') {\n return val;\n }\n\n switch (val) {\n case true:\n case 'simple':\n fn = querystring.parse;\n break;\n case false:\n fn = newObject;\n break;\n case 'extended':\n fn = parseExtendedQueryString;\n break;\n default:\n throw new TypeError('unknown value for query parser function: ' + val);\n }\n\n return fn;\n}\n\n/**\n * Compile \"proxy trust\" value to function.\n *\n * @param {Boolean|String|Number|Array|Function} val\n * @return {Function}\n * @api private\n */\n\nexports.compileTrust = function(val) {\n if (typeof val === 'function') return val;\n\n if (val === true) {\n // Support plain true/false\n return function(){ return true };\n }\n\n if (typeof val === 'number') {\n // Support trusting hop count\n return function(a, i){ return i < val };\n }\n\n if (typeof val === 'string') {\n // Support comma-separated values\n val = val.split(',')\n .map(function (v) { return v.trim() })\n }\n\n return proxyaddr.compile(val || []);\n}\n\n/**\n * Set the charset in a given Content-Type string.\n *\n * @param {String} type\n * @param {String} charset\n * @return {String}\n * @api private\n */\n\nexports.setCharset = function setCharset(type, charset) {\n if (!type || !charset) {\n return type;\n }\n\n // parse type\n var parsed = contentType.parse(type);\n\n // set charset\n parsed.parameters.charset = charset;\n\n // format type\n return contentType.format(parsed);\n};\n\n/**\n * Create an ETag generator function, generating ETags with\n * the given options.\n *\n * @param {object} options\n * @return {function}\n * @private\n */\n\nfunction createETagGenerator (options) {\n return function generateETag (body, encoding) {\n var buf = !Buffer.isBuffer(body)\n ? Buffer.from(body, encoding)\n : body\n\n return etag(buf, options)\n }\n}\n\n/**\n * Parse an extended query string with qs.\n *\n * @return {Object}\n * @private\n */\n\nfunction parseExtendedQueryString(str) {\n return qs.parse(str, {\n allowPrototypes: true\n });\n}\n\n/**\n * Return new empty object.\n *\n * @return {Object}\n * @api private\n */\n\nfunction newObject() {\n return {};\n}\n", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2013 Roman Shtylman\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar finalhandler = require('finalhandler');\nvar Router = require('./router');\nvar methods = require('methods');\nvar middleware = require('./middleware/init');\nvar query = require('./middleware/query');\nvar debug = require('debug')('express:application');\nvar View = require('./view');\nvar http = require('http');\nvar compileETag = require('./utils').compileETag;\nvar compileQueryParser = require('./utils').compileQueryParser;\nvar compileTrust = require('./utils').compileTrust;\nvar deprecate = require('depd')('express');\nvar flatten = require('array-flatten');\nvar merge = require('utils-merge');\nvar resolve = require('path').resolve;\nvar setPrototypeOf = require('setprototypeof')\n\n/**\n * Module variables.\n * @private\n */\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty\nvar slice = Array.prototype.slice;\n\n/**\n * Application prototype.\n */\n\nvar app = exports = module.exports = {};\n\n/**\n * Variable for trust proxy inheritance back-compat\n * @private\n */\n\nvar trustProxyDefaultSymbol = '@@symbol:trust_proxy_default';\n\n/**\n * Initialize the server.\n *\n * - setup default configuration\n * - setup default middleware\n * - setup route reflection methods\n *\n * @private\n */\n\napp.init = function init() {\n this.cache = {};\n this.engines = {};\n this.settings = {};\n\n this.defaultConfiguration();\n};\n\n/**\n * Initialize application configuration.\n * @private\n */\n\napp.defaultConfiguration = function defaultConfiguration() {\n var env = process.env.NODE_ENV || 'development';\n\n // default settings\n this.enable('x-powered-by');\n this.set('etag', 'weak');\n this.set('env', env);\n this.set('query parser', 'extended');\n this.set('subdomain offset', 2);\n this.set('trust proxy', false);\n\n // trust proxy inherit back-compat\n Object.defineProperty(this.settings, trustProxyDefaultSymbol, {\n configurable: true,\n value: true\n });\n\n debug('booting in %s mode', env);\n\n this.on('mount', function onmount(parent) {\n // inherit trust proxy\n if (this.settings[trustProxyDefaultSymbol] === true\n && typeof parent.settings['trust proxy fn'] === 'function') {\n delete this.settings['trust proxy'];\n delete this.settings['trust proxy fn'];\n }\n\n // inherit protos\n setPrototypeOf(this.request, parent.request)\n setPrototypeOf(this.response, parent.response)\n setPrototypeOf(this.engines, parent.engines)\n setPrototypeOf(this.settings, parent.settings)\n });\n\n // setup locals\n this.locals = Object.create(null);\n\n // top-most app is mounted at /\n this.mountpath = '/';\n\n // default locals\n this.locals.settings = this.settings;\n\n // default configuration\n this.set('view', View);\n this.set('views', resolve('views'));\n this.set('jsonp callback name', 'callback');\n\n if (env === 'production') {\n this.enable('view cache');\n }\n\n Object.defineProperty(this, 'router', {\n get: function() {\n throw new Error('\\'app.router\\' is deprecated!\\nPlease see the 3.x to 4.x migration guide for details on how to update your app.');\n }\n });\n};\n\n/**\n * lazily adds the base router if it has not yet been added.\n *\n * We cannot add the base router in the defaultConfiguration because\n * it reads app settings which might be set after that has run.\n *\n * @private\n */\napp.lazyrouter = function lazyrouter() {\n if (!this._router) {\n this._router = new Router({\n caseSensitive: this.enabled('case sensitive routing'),\n strict: this.enabled('strict routing')\n });\n\n this._router.use(query(this.get('query parser fn')));\n this._router.use(middleware.init(this));\n }\n};\n\n/**\n * Dispatch a req, res pair into the application. Starts pipeline processing.\n *\n * If no callback is provided, then default error handlers will respond\n * in the event of an error bubbling through the stack.\n *\n * @private\n */\n\napp.handle = function handle(req, res, callback) {\n var router = this._router;\n\n // final handler\n var done = callback || finalhandler(req, res, {\n env: this.get('env'),\n onerror: logerror.bind(this)\n });\n\n // no routes\n if (!router) {\n debug('no routes defined on app');\n done();\n return;\n }\n\n router.handle(req, res, done);\n};\n\n/**\n * Proxy `Router#use()` to add middleware to the app router.\n * See Router#use() documentation for details.\n *\n * If the _fn_ parameter is an express app, then it will be\n * mounted at the _route_ specified.\n *\n * @public\n */\n\napp.use = function use(fn) {\n var offset = 0;\n var path = '/';\n\n // default path to '/'\n // disambiguate app.use([fn])\n if (typeof fn !== 'function') {\n var arg = fn;\n\n while (Array.isArray(arg) && arg.length !== 0) {\n arg = arg[0];\n }\n\n // first arg is the path\n if (typeof arg !== 'function') {\n offset = 1;\n path = fn;\n }\n }\n\n var fns = flatten(slice.call(arguments, offset));\n\n if (fns.length === 0) {\n throw new TypeError('app.use() requires a middleware function')\n }\n\n // setup router\n this.lazyrouter();\n var router = this._router;\n\n fns.forEach(function (fn) {\n // non-express app\n if (!fn || !fn.handle || !fn.set) {\n return router.use(path, fn);\n }\n\n debug('.use app under %s', path);\n fn.mountpath = path;\n fn.parent = this;\n\n // restore .app property on req and res\n router.use(path, function mounted_app(req, res, next) {\n var orig = req.app;\n fn.handle(req, res, function (err) {\n setPrototypeOf(req, orig.request)\n setPrototypeOf(res, orig.response)\n next(err);\n });\n });\n\n // mounted an app\n fn.emit('mount', this);\n }, this);\n\n return this;\n};\n\n/**\n * Proxy to the app `Router#route()`\n * Returns a new `Route` instance for the _path_.\n *\n * Routes are isolated middleware stacks for specific paths.\n * See the Route api docs for details.\n *\n * @public\n */\n\napp.route = function route(path) {\n this.lazyrouter();\n return this._router.route(path);\n};\n\n/**\n * Register the given template engine callback `fn`\n * as `ext`.\n *\n * By default will `require()` the engine based on the\n * file extension. For example if you try to render\n * a \"foo.ejs\" file Express will invoke the following internally:\n *\n * app.engine('ejs', require('ejs').__express);\n *\n * For engines that do not provide `.__express` out of the box,\n * or if you wish to \"map\" a different extension to the template engine\n * you may use this method. For example mapping the EJS template engine to\n * \".html\" files:\n *\n * app.engine('html', require('ejs').renderFile);\n *\n * In this case EJS provides a `.renderFile()` method with\n * the same signature that Express expects: `(path, options, callback)`,\n * though note that it aliases this method as `ejs.__express` internally\n * so if you're using \".ejs\" extensions you don't need to do anything.\n *\n * Some template engines do not follow this convention, the\n * [Consolidate.js](https://github.com/tj/consolidate.js)\n * library was created to map all of node's popular template\n * engines to follow this convention, thus allowing them to\n * work seamlessly within Express.\n *\n * @param {String} ext\n * @param {Function} fn\n * @return {app} for chaining\n * @public\n */\n\napp.engine = function engine(ext, fn) {\n if (typeof fn !== 'function') {\n throw new Error('callback function required');\n }\n\n // get file extension\n var extension = ext[0] !== '.'\n ? '.' + ext\n : ext;\n\n // store engine\n this.engines[extension] = fn;\n\n return this;\n};\n\n/**\n * Proxy to `Router#param()` with one added api feature. The _name_ parameter\n * can be an array of names.\n *\n * See the Router#param() docs for more details.\n *\n * @param {String|Array} name\n * @param {Function} fn\n * @return {app} for chaining\n * @public\n */\n\napp.param = function param(name, fn) {\n this.lazyrouter();\n\n if (Array.isArray(name)) {\n for (var i = 0; i < name.length; i++) {\n this.param(name[i], fn);\n }\n\n return this;\n }\n\n this._router.param(name, fn);\n\n return this;\n};\n\n/**\n * Assign `setting` to `val`, or return `setting`'s value.\n *\n * app.set('foo', 'bar');\n * app.set('foo');\n * // => \"bar\"\n *\n * Mounted servers inherit their parent server's settings.\n *\n * @param {String} setting\n * @param {*} [val]\n * @return {Server} for chaining\n * @public\n */\n\napp.set = function set(setting, val) {\n if (arguments.length === 1) {\n // app.get(setting)\n var settings = this.settings\n\n while (settings && settings !== Object.prototype) {\n if (hasOwnProperty.call(settings, setting)) {\n return settings[setting]\n }\n\n settings = Object.getPrototypeOf(settings)\n }\n\n return undefined\n }\n\n debug('set \"%s\" to %o', setting, val);\n\n // set value\n this.settings[setting] = val;\n\n // trigger matched settings\n switch (setting) {\n case 'etag':\n this.set('etag fn', compileETag(val));\n break;\n case 'query parser':\n this.set('query parser fn', compileQueryParser(val));\n break;\n case 'trust proxy':\n this.set('trust proxy fn', compileTrust(val));\n\n // trust proxy inherit back-compat\n Object.defineProperty(this.settings, trustProxyDefaultSymbol, {\n configurable: true,\n value: false\n });\n\n break;\n }\n\n return this;\n};\n\n/**\n * Return the app's absolute pathname\n * based on the parent(s) that have\n * mounted it.\n *\n * For example if the application was\n * mounted as \"/admin\", which itself\n * was mounted as \"/blog\" then the\n * return value would be \"/blog/admin\".\n *\n * @return {String}\n * @private\n */\n\napp.path = function path() {\n return this.parent\n ? this.parent.path() + this.mountpath\n : '';\n};\n\n/**\n * Check if `setting` is enabled (truthy).\n *\n * app.enabled('foo')\n * // => false\n *\n * app.enable('foo')\n * app.enabled('foo')\n * // => true\n *\n * @param {String} setting\n * @return {Boolean}\n * @public\n */\n\napp.enabled = function enabled(setting) {\n return Boolean(this.set(setting));\n};\n\n/**\n * Check if `setting` is disabled.\n *\n * app.disabled('foo')\n * // => true\n *\n * app.enable('foo')\n * app.disabled('foo')\n * // => false\n *\n * @param {String} setting\n * @return {Boolean}\n * @public\n */\n\napp.disabled = function disabled(setting) {\n return !this.set(setting);\n};\n\n/**\n * Enable `setting`.\n *\n * @param {String} setting\n * @return {app} for chaining\n * @public\n */\n\napp.enable = function enable(setting) {\n return this.set(setting, true);\n};\n\n/**\n * Disable `setting`.\n *\n * @param {String} setting\n * @return {app} for chaining\n * @public\n */\n\napp.disable = function disable(setting) {\n return this.set(setting, false);\n};\n\n/**\n * Delegate `.VERB(...)` calls to `router.VERB(...)`.\n */\n\nmethods.forEach(function(method){\n app[method] = function(path){\n if (method === 'get' && arguments.length === 1) {\n // app.get(setting)\n return this.set(path);\n }\n\n this.lazyrouter();\n\n var route = this._router.route(path);\n route[method].apply(route, slice.call(arguments, 1));\n return this;\n };\n});\n\n/**\n * Special-cased \"all\" method, applying the given route `path`,\n * middleware, and callback to _every_ HTTP method.\n *\n * @param {String} path\n * @param {Function} ...\n * @return {app} for chaining\n * @public\n */\n\napp.all = function all(path) {\n this.lazyrouter();\n\n var route = this._router.route(path);\n var args = slice.call(arguments, 1);\n\n for (var i = 0; i < methods.length; i++) {\n route[methods[i]].apply(route, args);\n }\n\n return this;\n};\n\n// del -> delete alias\n\napp.del = deprecate.function(app.delete, 'app.del: Use app.delete instead');\n\n/**\n * Render the given view `name` name with `options`\n * and a callback accepting an error and the\n * rendered template string.\n *\n * Example:\n *\n * app.render('email', { name: 'Tobi' }, function(err, html){\n * // ...\n * })\n *\n * @param {String} name\n * @param {Object|Function} options or fn\n * @param {Function} callback\n * @public\n */\n\napp.render = function render(name, options, callback) {\n var cache = this.cache;\n var done = callback;\n var engines = this.engines;\n var opts = options;\n var renderOptions = {};\n var view;\n\n // support callback function as second arg\n if (typeof options === 'function') {\n done = options;\n opts = {};\n }\n\n // merge app.locals\n merge(renderOptions, this.locals);\n\n // merge options._locals\n if (opts._locals) {\n merge(renderOptions, opts._locals);\n }\n\n // merge options\n merge(renderOptions, opts);\n\n // set .cache unless explicitly provided\n if (renderOptions.cache == null) {\n renderOptions.cache = this.enabled('view cache');\n }\n\n // primed cache\n if (renderOptions.cache) {\n view = cache[name];\n }\n\n // view\n if (!view) {\n var View = this.get('view');\n\n view = new View(name, {\n defaultEngine: this.get('view engine'),\n root: this.get('views'),\n engines: engines\n });\n\n if (!view.path) {\n var dirs = Array.isArray(view.root) && view.root.length > 1\n ? 'directories \"' + view.root.slice(0, -1).join('\", \"') + '\" or \"' + view.root[view.root.length - 1] + '\"'\n : 'directory \"' + view.root + '\"'\n var err = new Error('Failed to lookup view \"' + name + '\" in views ' + dirs);\n err.view = view;\n return done(err);\n }\n\n // prime the cache\n if (renderOptions.cache) {\n cache[name] = view;\n }\n }\n\n // render\n tryRender(view, renderOptions, done);\n};\n\n/**\n * Listen for connections.\n *\n * A node `http.Server` is returned, with this\n * application (which is a `Function`) as its\n * callback. If you wish to create both an HTTP\n * and HTTPS server you may do so with the \"http\"\n * and \"https\" modules as shown here:\n *\n * var http = require('http')\n * , https = require('https')\n * , express = require('express')\n * , app = express();\n *\n * http.createServer(app).listen(80);\n * https.createServer({ ... }, app).listen(443);\n *\n * @return {http.Server}\n * @public\n */\n\napp.listen = function listen() {\n var server = http.createServer(this);\n return server.listen.apply(server, arguments);\n};\n\n/**\n * Log error using console.error.\n *\n * @param {Error} err\n * @private\n */\n\nfunction logerror(err) {\n /* istanbul ignore next */\n if (this.get('env') !== 'test') console.error(err.stack || err.toString());\n}\n\n/**\n * Try rendering a view.\n * @private\n */\n\nfunction tryRender(view, options, callback) {\n try {\n view.render(options, callback);\n } catch (err) {\n callback(err);\n }\n}\n", "/**\n * negotiator\n * Copyright(c) 2012 Isaac Z. Schlueter\n * Copyright(c) 2014 Federico Romero\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = preferredCharsets;\nmodule.exports.preferredCharsets = preferredCharsets;\n\n/**\n * Module variables.\n * @private\n */\n\nvar simpleCharsetRegExp = /^\\s*([^\\s;]+)\\s*(?:;(.*))?$/;\n\n/**\n * Parse the Accept-Charset header.\n * @private\n */\n\nfunction parseAcceptCharset(accept) {\n var accepts = accept.split(',');\n\n for (var i = 0, j = 0; i < accepts.length; i++) {\n var charset = parseCharset(accepts[i].trim(), i);\n\n if (charset) {\n accepts[j++] = charset;\n }\n }\n\n // trim accepts\n accepts.length = j;\n\n return accepts;\n}\n\n/**\n * Parse a charset from the Accept-Charset header.\n * @private\n */\n\nfunction parseCharset(str, i) {\n var match = simpleCharsetRegExp.exec(str);\n if (!match) return null;\n\n var charset = match[1];\n var q = 1;\n if (match[2]) {\n var params = match[2].split(';')\n for (var j = 0; j < params.length; j++) {\n var p = params[j].trim().split('=');\n if (p[0] === 'q') {\n q = parseFloat(p[1]);\n break;\n }\n }\n }\n\n return {\n charset: charset,\n q: q,\n i: i\n };\n}\n\n/**\n * Get the priority of a charset.\n * @private\n */\n\nfunction getCharsetPriority(charset, accepted, index) {\n var priority = {o: -1, q: 0, s: 0};\n\n for (var i = 0; i < accepted.length; i++) {\n var spec = specify(charset, accepted[i], index);\n\n if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) {\n priority = spec;\n }\n }\n\n return priority;\n}\n\n/**\n * Get the specificity of the charset.\n * @private\n */\n\nfunction specify(charset, spec, index) {\n var s = 0;\n if(spec.charset.toLowerCase() === charset.toLowerCase()){\n s |= 1;\n } else if (spec.charset !== '*' ) {\n return null\n }\n\n return {\n i: index,\n o: spec.i,\n q: spec.q,\n s: s\n }\n}\n\n/**\n * Get the preferred charsets from an Accept-Charset header.\n * @public\n */\n\nfunction preferredCharsets(accept, provided) {\n // RFC 2616 sec 14.2: no header = *\n var accepts = parseAcceptCharset(accept === undefined ? '*' : accept || '');\n\n if (!provided) {\n // sorted list of all charsets\n return accepts\n .filter(isQuality)\n .sort(compareSpecs)\n .map(getFullCharset);\n }\n\n var priorities = provided.map(function getPriority(type, index) {\n return getCharsetPriority(type, accepts, index);\n });\n\n // sorted list of accepted charsets\n return priorities.filter(isQuality).sort(compareSpecs).map(function getCharset(priority) {\n return provided[priorities.indexOf(priority)];\n });\n}\n\n/**\n * Compare two specs.\n * @private\n */\n\nfunction compareSpecs(a, b) {\n return (b.q - a.q) || (b.s - a.s) || (a.o - b.o) || (a.i - b.i) || 0;\n}\n\n/**\n * Get full charset string.\n * @private\n */\n\nfunction getFullCharset(spec) {\n return spec.charset;\n}\n\n/**\n * Check if a spec has any quality.\n * @private\n */\n\nfunction isQuality(spec) {\n return spec.q > 0;\n}\n", "/**\n * negotiator\n * Copyright(c) 2012 Isaac Z. Schlueter\n * Copyright(c) 2014 Federico Romero\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = preferredEncodings;\nmodule.exports.preferredEncodings = preferredEncodings;\n\n/**\n * Module variables.\n * @private\n */\n\nvar simpleEncodingRegExp = /^\\s*([^\\s;]+)\\s*(?:;(.*))?$/;\n\n/**\n * Parse the Accept-Encoding header.\n * @private\n */\n\nfunction parseAcceptEncoding(accept) {\n var accepts = accept.split(',');\n var hasIdentity = false;\n var minQuality = 1;\n\n for (var i = 0, j = 0; i < accepts.length; i++) {\n var encoding = parseEncoding(accepts[i].trim(), i);\n\n if (encoding) {\n accepts[j++] = encoding;\n hasIdentity = hasIdentity || specify('identity', encoding);\n minQuality = Math.min(minQuality, encoding.q || 1);\n }\n }\n\n if (!hasIdentity) {\n /*\n * If identity doesn't explicitly appear in the accept-encoding header,\n * it's added to the list of acceptable encoding with the lowest q\n */\n accepts[j++] = {\n encoding: 'identity',\n q: minQuality,\n i: i\n };\n }\n\n // trim accepts\n accepts.length = j;\n\n return accepts;\n}\n\n/**\n * Parse an encoding from the Accept-Encoding header.\n * @private\n */\n\nfunction parseEncoding(str, i) {\n var match = simpleEncodingRegExp.exec(str);\n if (!match) return null;\n\n var encoding = match[1];\n var q = 1;\n if (match[2]) {\n var params = match[2].split(';');\n for (var j = 0; j < params.length; j++) {\n var p = params[j].trim().split('=');\n if (p[0] === 'q') {\n q = parseFloat(p[1]);\n break;\n }\n }\n }\n\n return {\n encoding: encoding,\n q: q,\n i: i\n };\n}\n\n/**\n * Get the priority of an encoding.\n * @private\n */\n\nfunction getEncodingPriority(encoding, accepted, index) {\n var priority = {o: -1, q: 0, s: 0};\n\n for (var i = 0; i < accepted.length; i++) {\n var spec = specify(encoding, accepted[i], index);\n\n if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) {\n priority = spec;\n }\n }\n\n return priority;\n}\n\n/**\n * Get the specificity of the encoding.\n * @private\n */\n\nfunction specify(encoding, spec, index) {\n var s = 0;\n if(spec.encoding.toLowerCase() === encoding.toLowerCase()){\n s |= 1;\n } else if (spec.encoding !== '*' ) {\n return null\n }\n\n return {\n i: index,\n o: spec.i,\n q: spec.q,\n s: s\n }\n};\n\n/**\n * Get the preferred encodings from an Accept-Encoding header.\n * @public\n */\n\nfunction preferredEncodings(accept, provided) {\n var accepts = parseAcceptEncoding(accept || '');\n\n if (!provided) {\n // sorted list of all encodings\n return accepts\n .filter(isQuality)\n .sort(compareSpecs)\n .map(getFullEncoding);\n }\n\n var priorities = provided.map(function getPriority(type, index) {\n return getEncodingPriority(type, accepts, index);\n });\n\n // sorted list of accepted encodings\n return priorities.filter(isQuality).sort(compareSpecs).map(function getEncoding(priority) {\n return provided[priorities.indexOf(priority)];\n });\n}\n\n/**\n * Compare two specs.\n * @private\n */\n\nfunction compareSpecs(a, b) {\n return (b.q - a.q) || (b.s - a.s) || (a.o - b.o) || (a.i - b.i) || 0;\n}\n\n/**\n * Get full encoding string.\n * @private\n */\n\nfunction getFullEncoding(spec) {\n return spec.encoding;\n}\n\n/**\n * Check if a spec has any quality.\n * @private\n */\n\nfunction isQuality(spec) {\n return spec.q > 0;\n}\n", "/**\n * negotiator\n * Copyright(c) 2012 Isaac Z. Schlueter\n * Copyright(c) 2014 Federico Romero\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = preferredLanguages;\nmodule.exports.preferredLanguages = preferredLanguages;\n\n/**\n * Module variables.\n * @private\n */\n\nvar simpleLanguageRegExp = /^\\s*([^\\s\\-;]+)(?:-([^\\s;]+))?\\s*(?:;(.*))?$/;\n\n/**\n * Parse the Accept-Language header.\n * @private\n */\n\nfunction parseAcceptLanguage(accept) {\n var accepts = accept.split(',');\n\n for (var i = 0, j = 0; i < accepts.length; i++) {\n var language = parseLanguage(accepts[i].trim(), i);\n\n if (language) {\n accepts[j++] = language;\n }\n }\n\n // trim accepts\n accepts.length = j;\n\n return accepts;\n}\n\n/**\n * Parse a language from the Accept-Language header.\n * @private\n */\n\nfunction parseLanguage(str, i) {\n var match = simpleLanguageRegExp.exec(str);\n if (!match) return null;\n\n var prefix = match[1]\n var suffix = match[2]\n var full = prefix\n\n if (suffix) full += \"-\" + suffix;\n\n var q = 1;\n if (match[3]) {\n var params = match[3].split(';')\n for (var j = 0; j < params.length; j++) {\n var p = params[j].split('=');\n if (p[0] === 'q') q = parseFloat(p[1]);\n }\n }\n\n return {\n prefix: prefix,\n suffix: suffix,\n q: q,\n i: i,\n full: full\n };\n}\n\n/**\n * Get the priority of a language.\n * @private\n */\n\nfunction getLanguagePriority(language, accepted, index) {\n var priority = {o: -1, q: 0, s: 0};\n\n for (var i = 0; i < accepted.length; i++) {\n var spec = specify(language, accepted[i], index);\n\n if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) {\n priority = spec;\n }\n }\n\n return priority;\n}\n\n/**\n * Get the specificity of the language.\n * @private\n */\n\nfunction specify(language, spec, index) {\n var p = parseLanguage(language)\n if (!p) return null;\n var s = 0;\n if(spec.full.toLowerCase() === p.full.toLowerCase()){\n s |= 4;\n } else if (spec.prefix.toLowerCase() === p.full.toLowerCase()) {\n s |= 2;\n } else if (spec.full.toLowerCase() === p.prefix.toLowerCase()) {\n s |= 1;\n } else if (spec.full !== '*' ) {\n return null\n }\n\n return {\n i: index,\n o: spec.i,\n q: spec.q,\n s: s\n }\n};\n\n/**\n * Get the preferred languages from an Accept-Language header.\n * @public\n */\n\nfunction preferredLanguages(accept, provided) {\n // RFC 2616 sec 14.4: no header = *\n var accepts = parseAcceptLanguage(accept === undefined ? '*' : accept || '');\n\n if (!provided) {\n // sorted list of all languages\n return accepts\n .filter(isQuality)\n .sort(compareSpecs)\n .map(getFullLanguage);\n }\n\n var priorities = provided.map(function getPriority(type, index) {\n return getLanguagePriority(type, accepts, index);\n });\n\n // sorted list of accepted languages\n return priorities.filter(isQuality).sort(compareSpecs).map(function getLanguage(priority) {\n return provided[priorities.indexOf(priority)];\n });\n}\n\n/**\n * Compare two specs.\n * @private\n */\n\nfunction compareSpecs(a, b) {\n return (b.q - a.q) || (b.s - a.s) || (a.o - b.o) || (a.i - b.i) || 0;\n}\n\n/**\n * Get full language string.\n * @private\n */\n\nfunction getFullLanguage(spec) {\n return spec.full;\n}\n\n/**\n * Check if a spec has any quality.\n * @private\n */\n\nfunction isQuality(spec) {\n return spec.q > 0;\n}\n", "/**\n * negotiator\n * Copyright(c) 2012 Isaac Z. Schlueter\n * Copyright(c) 2014 Federico Romero\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = preferredMediaTypes;\nmodule.exports.preferredMediaTypes = preferredMediaTypes;\n\n/**\n * Module variables.\n * @private\n */\n\nvar simpleMediaTypeRegExp = /^\\s*([^\\s\\/;]+)\\/([^;\\s]+)\\s*(?:;(.*))?$/;\n\n/**\n * Parse the Accept header.\n * @private\n */\n\nfunction parseAccept(accept) {\n var accepts = splitMediaTypes(accept);\n\n for (var i = 0, j = 0; i < accepts.length; i++) {\n var mediaType = parseMediaType(accepts[i].trim(), i);\n\n if (mediaType) {\n accepts[j++] = mediaType;\n }\n }\n\n // trim accepts\n accepts.length = j;\n\n return accepts;\n}\n\n/**\n * Parse a media type from the Accept header.\n * @private\n */\n\nfunction parseMediaType(str, i) {\n var match = simpleMediaTypeRegExp.exec(str);\n if (!match) return null;\n\n var params = Object.create(null);\n var q = 1;\n var subtype = match[2];\n var type = match[1];\n\n if (match[3]) {\n var kvps = splitParameters(match[3]).map(splitKeyValuePair);\n\n for (var j = 0; j < kvps.length; j++) {\n var pair = kvps[j];\n var key = pair[0].toLowerCase();\n var val = pair[1];\n\n // get the value, unwrapping quotes\n var value = val && val[0] === '\"' && val[val.length - 1] === '\"'\n ? val.substr(1, val.length - 2)\n : val;\n\n if (key === 'q') {\n q = parseFloat(value);\n break;\n }\n\n // store parameter\n params[key] = value;\n }\n }\n\n return {\n type: type,\n subtype: subtype,\n params: params,\n q: q,\n i: i\n };\n}\n\n/**\n * Get the priority of a media type.\n * @private\n */\n\nfunction getMediaTypePriority(type, accepted, index) {\n var priority = {o: -1, q: 0, s: 0};\n\n for (var i = 0; i < accepted.length; i++) {\n var spec = specify(type, accepted[i], index);\n\n if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) {\n priority = spec;\n }\n }\n\n return priority;\n}\n\n/**\n * Get the specificity of the media type.\n * @private\n */\n\nfunction specify(type, spec, index) {\n var p = parseMediaType(type);\n var s = 0;\n\n if (!p) {\n return null;\n }\n\n if(spec.type.toLowerCase() == p.type.toLowerCase()) {\n s |= 4\n } else if(spec.type != '*') {\n return null;\n }\n\n if(spec.subtype.toLowerCase() == p.subtype.toLowerCase()) {\n s |= 2\n } else if(spec.subtype != '*') {\n return null;\n }\n\n var keys = Object.keys(spec.params);\n if (keys.length > 0) {\n if (keys.every(function (k) {\n return spec.params[k] == '*' || (spec.params[k] || '').toLowerCase() == (p.params[k] || '').toLowerCase();\n })) {\n s |= 1\n } else {\n return null\n }\n }\n\n return {\n i: index,\n o: spec.i,\n q: spec.q,\n s: s,\n }\n}\n\n/**\n * Get the preferred media types from an Accept header.\n * @public\n */\n\nfunction preferredMediaTypes(accept, provided) {\n // RFC 2616 sec 14.2: no header = */*\n var accepts = parseAccept(accept === undefined ? '*/*' : accept || '');\n\n if (!provided) {\n // sorted list of all types\n return accepts\n .filter(isQuality)\n .sort(compareSpecs)\n .map(getFullType);\n }\n\n var priorities = provided.map(function getPriority(type, index) {\n return getMediaTypePriority(type, accepts, index);\n });\n\n // sorted list of accepted types\n return priorities.filter(isQuality).sort(compareSpecs).map(function getType(priority) {\n return provided[priorities.indexOf(priority)];\n });\n}\n\n/**\n * Compare two specs.\n * @private\n */\n\nfunction compareSpecs(a, b) {\n return (b.q - a.q) || (b.s - a.s) || (a.o - b.o) || (a.i - b.i) || 0;\n}\n\n/**\n * Get full type string.\n * @private\n */\n\nfunction getFullType(spec) {\n return spec.type + '/' + spec.subtype;\n}\n\n/**\n * Check if a spec has any quality.\n * @private\n */\n\nfunction isQuality(spec) {\n return spec.q > 0;\n}\n\n/**\n * Count the number of quotes in a string.\n * @private\n */\n\nfunction quoteCount(string) {\n var count = 0;\n var index = 0;\n\n while ((index = string.indexOf('\"', index)) !== -1) {\n count++;\n index++;\n }\n\n return count;\n}\n\n/**\n * Split a key value pair.\n * @private\n */\n\nfunction splitKeyValuePair(str) {\n var index = str.indexOf('=');\n var key;\n var val;\n\n if (index === -1) {\n key = str;\n } else {\n key = str.substr(0, index);\n val = str.substr(index + 1);\n }\n\n return [key, val];\n}\n\n/**\n * Split an Accept header into media types.\n * @private\n */\n\nfunction splitMediaTypes(accept) {\n var accepts = accept.split(',');\n\n for (var i = 1, j = 0; i < accepts.length; i++) {\n if (quoteCount(accepts[j]) % 2 == 0) {\n accepts[++j] = accepts[i];\n } else {\n accepts[j] += ',' + accepts[i];\n }\n }\n\n // trim accepts\n accepts.length = j + 1;\n\n return accepts;\n}\n\n/**\n * Split a string of parameters.\n * @private\n */\n\nfunction splitParameters(str) {\n var parameters = str.split(';');\n\n for (var i = 1, j = 0; i < parameters.length; i++) {\n if (quoteCount(parameters[j]) % 2 == 0) {\n parameters[++j] = parameters[i];\n } else {\n parameters[j] += ';' + parameters[i];\n }\n }\n\n // trim parameters\n parameters.length = j + 1;\n\n for (var i = 0; i < parameters.length; i++) {\n parameters[i] = parameters[i].trim();\n }\n\n return parameters;\n}\n", "/*!\n * negotiator\n * Copyright(c) 2012 Federico Romero\n * Copyright(c) 2012-2014 Isaac Z. Schlueter\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\nvar preferredCharsets = require('./lib/charset')\nvar preferredEncodings = require('./lib/encoding')\nvar preferredLanguages = require('./lib/language')\nvar preferredMediaTypes = require('./lib/mediaType')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = Negotiator;\nmodule.exports.Negotiator = Negotiator;\n\n/**\n * Create a Negotiator instance from a request.\n * @param {object} request\n * @public\n */\n\nfunction Negotiator(request) {\n if (!(this instanceof Negotiator)) {\n return new Negotiator(request);\n }\n\n this.request = request;\n}\n\nNegotiator.prototype.charset = function charset(available) {\n var set = this.charsets(available);\n return set && set[0];\n};\n\nNegotiator.prototype.charsets = function charsets(available) {\n return preferredCharsets(this.request.headers['accept-charset'], available);\n};\n\nNegotiator.prototype.encoding = function encoding(available) {\n var set = this.encodings(available);\n return set && set[0];\n};\n\nNegotiator.prototype.encodings = function encodings(available) {\n return preferredEncodings(this.request.headers['accept-encoding'], available);\n};\n\nNegotiator.prototype.language = function language(available) {\n var set = this.languages(available);\n return set && set[0];\n};\n\nNegotiator.prototype.languages = function languages(available) {\n return preferredLanguages(this.request.headers['accept-language'], available);\n};\n\nNegotiator.prototype.mediaType = function mediaType(available) {\n var set = this.mediaTypes(available);\n return set && set[0];\n};\n\nNegotiator.prototype.mediaTypes = function mediaTypes(available) {\n return preferredMediaTypes(this.request.headers.accept, available);\n};\n\n// Backwards compatibility\nNegotiator.prototype.preferredCharset = Negotiator.prototype.charset;\nNegotiator.prototype.preferredCharsets = Negotiator.prototype.charsets;\nNegotiator.prototype.preferredEncoding = Negotiator.prototype.encoding;\nNegotiator.prototype.preferredEncodings = Negotiator.prototype.encodings;\nNegotiator.prototype.preferredLanguage = Negotiator.prototype.language;\nNegotiator.prototype.preferredLanguages = Negotiator.prototype.languages;\nNegotiator.prototype.preferredMediaType = Negotiator.prototype.mediaType;\nNegotiator.prototype.preferredMediaTypes = Negotiator.prototype.mediaTypes;\n", "/*!\n * accepts\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar Negotiator = require('negotiator')\nvar mime = require('mime-types')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = Accepts\n\n/**\n * Create a new Accepts object for the given req.\n *\n * @param {object} req\n * @public\n */\n\nfunction Accepts (req) {\n if (!(this instanceof Accepts)) {\n return new Accepts(req)\n }\n\n this.headers = req.headers\n this.negotiator = new Negotiator(req)\n}\n\n/**\n * Check if the given `type(s)` is acceptable, returning\n * the best match when true, otherwise `undefined`, in which\n * case you should respond with 406 \"Not Acceptable\".\n *\n * The `type` value may be a single mime type string\n * such as \"application/json\", the extension name\n * such as \"json\" or an array `[\"json\", \"html\", \"text/plain\"]`. When a list\n * or array is given the _best_ match, if any is returned.\n *\n * Examples:\n *\n * // Accept: text/html\n * this.types('html');\n * // => \"html\"\n *\n * // Accept: text/*, application/json\n * this.types('html');\n * // => \"html\"\n * this.types('text/html');\n * // => \"text/html\"\n * this.types('json', 'text');\n * // => \"json\"\n * this.types('application/json');\n * // => \"application/json\"\n *\n * // Accept: text/*, application/json\n * this.types('image/png');\n * this.types('png');\n * // => undefined\n *\n * // Accept: text/*;q=.5, application/json\n * this.types(['html', 'json']);\n * this.types('html', 'json');\n * // => \"json\"\n *\n * @param {String|Array} types...\n * @return {String|Array|Boolean}\n * @public\n */\n\nAccepts.prototype.type =\nAccepts.prototype.types = function (types_) {\n var types = types_\n\n // support flattened arguments\n if (types && !Array.isArray(types)) {\n types = new Array(arguments.length)\n for (var i = 0; i < types.length; i++) {\n types[i] = arguments[i]\n }\n }\n\n // no types, return all requested types\n if (!types || types.length === 0) {\n return this.negotiator.mediaTypes()\n }\n\n // no accept header, return first given type\n if (!this.headers.accept) {\n return types[0]\n }\n\n var mimes = types.map(extToMime)\n var accepts = this.negotiator.mediaTypes(mimes.filter(validMime))\n var first = accepts[0]\n\n return first\n ? types[mimes.indexOf(first)]\n : false\n}\n\n/**\n * Return accepted encodings or best fit based on `encodings`.\n *\n * Given `Accept-Encoding: gzip, deflate`\n * an array sorted by quality is returned:\n *\n * ['gzip', 'deflate']\n *\n * @param {String|Array} encodings...\n * @return {String|Array}\n * @public\n */\n\nAccepts.prototype.encoding =\nAccepts.prototype.encodings = function (encodings_) {\n var encodings = encodings_\n\n // support flattened arguments\n if (encodings && !Array.isArray(encodings)) {\n encodings = new Array(arguments.length)\n for (var i = 0; i < encodings.length; i++) {\n encodings[i] = arguments[i]\n }\n }\n\n // no encodings, return all requested encodings\n if (!encodings || encodings.length === 0) {\n return this.negotiator.encodings()\n }\n\n return this.negotiator.encodings(encodings)[0] || false\n}\n\n/**\n * Return accepted charsets or best fit based on `charsets`.\n *\n * Given `Accept-Charset: utf-8, iso-8859-1;q=0.2, utf-7;q=0.5`\n * an array sorted by quality is returned:\n *\n * ['utf-8', 'utf-7', 'iso-8859-1']\n *\n * @param {String|Array} charsets...\n * @return {String|Array}\n * @public\n */\n\nAccepts.prototype.charset =\nAccepts.prototype.charsets = function (charsets_) {\n var charsets = charsets_\n\n // support flattened arguments\n if (charsets && !Array.isArray(charsets)) {\n charsets = new Array(arguments.length)\n for (var i = 0; i < charsets.length; i++) {\n charsets[i] = arguments[i]\n }\n }\n\n // no charsets, return all requested charsets\n if (!charsets || charsets.length === 0) {\n return this.negotiator.charsets()\n }\n\n return this.negotiator.charsets(charsets)[0] || false\n}\n\n/**\n * Return accepted languages or best fit based on `langs`.\n *\n * Given `Accept-Language: en;q=0.8, es, pt`\n * an array sorted by quality is returned:\n *\n * ['es', 'pt', 'en']\n *\n * @param {String|Array} langs...\n * @return {Array|String}\n * @public\n */\n\nAccepts.prototype.lang =\nAccepts.prototype.langs =\nAccepts.prototype.language =\nAccepts.prototype.languages = function (languages_) {\n var languages = languages_\n\n // support flattened arguments\n if (languages && !Array.isArray(languages)) {\n languages = new Array(arguments.length)\n for (var i = 0; i < languages.length; i++) {\n languages[i] = arguments[i]\n }\n }\n\n // no languages, return all requested languages\n if (!languages || languages.length === 0) {\n return this.negotiator.languages()\n }\n\n return this.negotiator.languages(languages)[0] || false\n}\n\n/**\n * Convert extnames to mime.\n *\n * @param {String} type\n * @return {String}\n * @private\n */\n\nfunction extToMime (type) {\n return type.indexOf('/') === -1\n ? mime.lookup(type)\n : type\n}\n\n/**\n * Check if mime is valid.\n *\n * @param {String} type\n * @return {String}\n * @private\n */\n\nfunction validMime (type) {\n return typeof type === 'string'\n}\n", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2013 Roman Shtylman\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar accepts = require('accepts');\nvar deprecate = require('depd')('express');\nvar isIP = require('net').isIP;\nvar typeis = require('type-is');\nvar http = require('http');\nvar fresh = require('fresh');\nvar parseRange = require('range-parser');\nvar parse = require('parseurl');\nvar proxyaddr = require('proxy-addr');\n\n/**\n * Request prototype.\n * @public\n */\n\nvar req = Object.create(http.IncomingMessage.prototype)\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = req\n\n/**\n * Return request header.\n *\n * The `Referrer` header field is special-cased,\n * both `Referrer` and `Referer` are interchangeable.\n *\n * Examples:\n *\n * req.get('Content-Type');\n * // => \"text/plain\"\n *\n * req.get('content-type');\n * // => \"text/plain\"\n *\n * req.get('Something');\n * // => undefined\n *\n * Aliased as `req.header()`.\n *\n * @param {String} name\n * @return {String}\n * @public\n */\n\nreq.get =\nreq.header = function header(name) {\n if (!name) {\n throw new TypeError('name argument is required to req.get');\n }\n\n if (typeof name !== 'string') {\n throw new TypeError('name must be a string to req.get');\n }\n\n var lc = name.toLowerCase();\n\n switch (lc) {\n case 'referer':\n case 'referrer':\n return this.headers.referrer\n || this.headers.referer;\n default:\n return this.headers[lc];\n }\n};\n\n/**\n * To do: update docs.\n *\n * Check if the given `type(s)` is acceptable, returning\n * the best match when true, otherwise `undefined`, in which\n * case you should respond with 406 \"Not Acceptable\".\n *\n * The `type` value may be a single MIME type string\n * such as \"application/json\", an extension name\n * such as \"json\", a comma-delimited list such as \"json, html, text/plain\",\n * an argument list such as `\"json\", \"html\", \"text/plain\"`,\n * or an array `[\"json\", \"html\", \"text/plain\"]`. When a list\n * or array is given, the _best_ match, if any is returned.\n *\n * Examples:\n *\n * // Accept: text/html\n * req.accepts('html');\n * // => \"html\"\n *\n * // Accept: text/*, application/json\n * req.accepts('html');\n * // => \"html\"\n * req.accepts('text/html');\n * // => \"text/html\"\n * req.accepts('json, text');\n * // => \"json\"\n * req.accepts('application/json');\n * // => \"application/json\"\n *\n * // Accept: text/*, application/json\n * req.accepts('image/png');\n * req.accepts('png');\n * // => undefined\n *\n * // Accept: text/*;q=.5, application/json\n * req.accepts(['html', 'json']);\n * req.accepts('html', 'json');\n * req.accepts('html, json');\n * // => \"json\"\n *\n * @param {String|Array} type(s)\n * @return {String|Array|Boolean}\n * @public\n */\n\nreq.accepts = function(){\n var accept = accepts(this);\n return accept.types.apply(accept, arguments);\n};\n\n/**\n * Check if the given `encoding`s are accepted.\n *\n * @param {String} ...encoding\n * @return {String|Array}\n * @public\n */\n\nreq.acceptsEncodings = function(){\n var accept = accepts(this);\n return accept.encodings.apply(accept, arguments);\n};\n\nreq.acceptsEncoding = deprecate.function(req.acceptsEncodings,\n 'req.acceptsEncoding: Use acceptsEncodings instead');\n\n/**\n * Check if the given `charset`s are acceptable,\n * otherwise you should respond with 406 \"Not Acceptable\".\n *\n * @param {String} ...charset\n * @return {String|Array}\n * @public\n */\n\nreq.acceptsCharsets = function(){\n var accept = accepts(this);\n return accept.charsets.apply(accept, arguments);\n};\n\nreq.acceptsCharset = deprecate.function(req.acceptsCharsets,\n 'req.acceptsCharset: Use acceptsCharsets instead');\n\n/**\n * Check if the given `lang`s are acceptable,\n * otherwise you should respond with 406 \"Not Acceptable\".\n *\n * @param {String} ...lang\n * @return {String|Array}\n * @public\n */\n\nreq.acceptsLanguages = function(){\n var accept = accepts(this);\n return accept.languages.apply(accept, arguments);\n};\n\nreq.acceptsLanguage = deprecate.function(req.acceptsLanguages,\n 'req.acceptsLanguage: Use acceptsLanguages instead');\n\n/**\n * Parse Range header field, capping to the given `size`.\n *\n * Unspecified ranges such as \"0-\" require knowledge of your resource length. In\n * the case of a byte range this is of course the total number of bytes. If the\n * Range header field is not given `undefined` is returned, `-1` when unsatisfiable,\n * and `-2` when syntactically invalid.\n *\n * When ranges are returned, the array has a \"type\" property which is the type of\n * range that is required (most commonly, \"bytes\"). Each array element is an object\n * with a \"start\" and \"end\" property for the portion of the range.\n *\n * The \"combine\" option can be set to `true` and overlapping & adjacent ranges\n * will be combined into a single range.\n *\n * NOTE: remember that ranges are inclusive, so for example \"Range: users=0-3\"\n * should respond with 4 users when available, not 3.\n *\n * @param {number} size\n * @param {object} [options]\n * @param {boolean} [options.combine=false]\n * @return {number|array}\n * @public\n */\n\nreq.range = function range(size, options) {\n var range = this.get('Range');\n if (!range) return;\n return parseRange(size, range, options);\n};\n\n/**\n * Return the value of param `name` when present or `defaultValue`.\n *\n * - Checks route placeholders, ex: _/user/:id_\n * - Checks body params, ex: id=12, {\"id\":12}\n * - Checks query string params, ex: ?id=12\n *\n * To utilize request bodies, `req.body`\n * should be an object. This can be done by using\n * the `bodyParser()` middleware.\n *\n * @param {String} name\n * @param {Mixed} [defaultValue]\n * @return {String}\n * @public\n */\n\nreq.param = function param(name, defaultValue) {\n var params = this.params || {};\n var body = this.body || {};\n var query = this.query || {};\n\n var args = arguments.length === 1\n ? 'name'\n : 'name, default';\n deprecate('req.param(' + args + '): Use req.params, req.body, or req.query instead');\n\n if (null != params[name] && params.hasOwnProperty(name)) return params[name];\n if (null != body[name]) return body[name];\n if (null != query[name]) return query[name];\n\n return defaultValue;\n};\n\n/**\n * Check if the incoming request contains the \"Content-Type\"\n * header field, and it contains the given mime `type`.\n *\n * Examples:\n *\n * // With Content-Type: text/html; charset=utf-8\n * req.is('html');\n * req.is('text/html');\n * req.is('text/*');\n * // => true\n *\n * // When Content-Type is application/json\n * req.is('json');\n * req.is('application/json');\n * req.is('application/*');\n * // => true\n *\n * req.is('html');\n * // => false\n *\n * @param {String|Array} types...\n * @return {String|false|null}\n * @public\n */\n\nreq.is = function is(types) {\n var arr = types;\n\n // support flattened arguments\n if (!Array.isArray(types)) {\n arr = new Array(arguments.length);\n for (var i = 0; i < arr.length; i++) {\n arr[i] = arguments[i];\n }\n }\n\n return typeis(this, arr);\n};\n\n/**\n * Return the protocol string \"http\" or \"https\"\n * when requested with TLS. When the \"trust proxy\"\n * setting trusts the socket address, the\n * \"X-Forwarded-Proto\" header field will be trusted\n * and used if present.\n *\n * If you're running behind a reverse proxy that\n * supplies https for you this may be enabled.\n *\n * @return {String}\n * @public\n */\n\ndefineGetter(req, 'protocol', function protocol(){\n var proto = this.connection.encrypted\n ? 'https'\n : 'http';\n var trust = this.app.get('trust proxy fn');\n\n if (!trust(this.connection.remoteAddress, 0)) {\n return proto;\n }\n\n // Note: X-Forwarded-Proto is normally only ever a\n // single value, but this is to be safe.\n var header = this.get('X-Forwarded-Proto') || proto\n var index = header.indexOf(',')\n\n return index !== -1\n ? header.substring(0, index).trim()\n : header.trim()\n});\n\n/**\n * Short-hand for:\n *\n * req.protocol === 'https'\n *\n * @return {Boolean}\n * @public\n */\n\ndefineGetter(req, 'secure', function secure(){\n return this.protocol === 'https';\n});\n\n/**\n * Return the remote address from the trusted proxy.\n *\n * The is the remote address on the socket unless\n * \"trust proxy\" is set.\n *\n * @return {String}\n * @public\n */\n\ndefineGetter(req, 'ip', function ip(){\n var trust = this.app.get('trust proxy fn');\n return proxyaddr(this, trust);\n});\n\n/**\n * When \"trust proxy\" is set, trusted proxy addresses + client.\n *\n * For example if the value were \"client, proxy1, proxy2\"\n * you would receive the array `[\"client\", \"proxy1\", \"proxy2\"]`\n * where \"proxy2\" is the furthest down-stream and \"proxy1\" and\n * \"proxy2\" were trusted.\n *\n * @return {Array}\n * @public\n */\n\ndefineGetter(req, 'ips', function ips() {\n var trust = this.app.get('trust proxy fn');\n var addrs = proxyaddr.all(this, trust);\n\n // reverse the order (to farthest -> closest)\n // and remove socket address\n addrs.reverse().pop()\n\n return addrs\n});\n\n/**\n * Return subdomains as an array.\n *\n * Subdomains are the dot-separated parts of the host before the main domain of\n * the app. By default, the domain of the app is assumed to be the last two\n * parts of the host. This can be changed by setting \"subdomain offset\".\n *\n * For example, if the domain is \"tobi.ferrets.example.com\":\n * If \"subdomain offset\" is not set, req.subdomains is `[\"ferrets\", \"tobi\"]`.\n * If \"subdomain offset\" is 3, req.subdomains is `[\"tobi\"]`.\n *\n * @return {Array}\n * @public\n */\n\ndefineGetter(req, 'subdomains', function subdomains() {\n var hostname = this.hostname;\n\n if (!hostname) return [];\n\n var offset = this.app.get('subdomain offset');\n var subdomains = !isIP(hostname)\n ? hostname.split('.').reverse()\n : [hostname];\n\n return subdomains.slice(offset);\n});\n\n/**\n * Short-hand for `url.parse(req.url).pathname`.\n *\n * @return {String}\n * @public\n */\n\ndefineGetter(req, 'path', function path() {\n return parse(this).pathname;\n});\n\n/**\n * Parse the \"Host\" header field to a hostname.\n *\n * When the \"trust proxy\" setting trusts the socket\n * address, the \"X-Forwarded-Host\" header field will\n * be trusted.\n *\n * @return {String}\n * @public\n */\n\ndefineGetter(req, 'hostname', function hostname(){\n var trust = this.app.get('trust proxy fn');\n var host = this.get('X-Forwarded-Host');\n\n if (!host || !trust(this.connection.remoteAddress, 0)) {\n host = this.get('Host');\n } else if (host.indexOf(',') !== -1) {\n // Note: X-Forwarded-Host is normally only ever a\n // single value, but this is to be safe.\n host = host.substring(0, host.indexOf(',')).trimRight()\n }\n\n if (!host) return;\n\n // IPv6 literal support\n var offset = host[0] === '['\n ? host.indexOf(']') + 1\n : 0;\n var index = host.indexOf(':', offset);\n\n return index !== -1\n ? host.substring(0, index)\n : host;\n});\n\n// TODO: change req.host to return host in next major\n\ndefineGetter(req, 'host', deprecate.function(function host(){\n return this.hostname;\n}, 'req.host: Use req.hostname instead'));\n\n/**\n * Check if the request is fresh, aka\n * Last-Modified and/or the ETag\n * still match.\n *\n * @return {Boolean}\n * @public\n */\n\ndefineGetter(req, 'fresh', function(){\n var method = this.method;\n var res = this.res\n var status = res.statusCode\n\n // GET or HEAD for weak freshness validation only\n if ('GET' !== method && 'HEAD' !== method) return false;\n\n // 2xx or 304 as per rfc2616 14.26\n if ((status >= 200 && status < 300) || 304 === status) {\n return fresh(this.headers, {\n 'etag': res.get('ETag'),\n 'last-modified': res.get('Last-Modified')\n })\n }\n\n return false;\n});\n\n/**\n * Check if the request is stale, aka\n * \"Last-Modified\" and / or the \"ETag\" for the\n * resource has changed.\n *\n * @return {Boolean}\n * @public\n */\n\ndefineGetter(req, 'stale', function stale(){\n return !this.fresh;\n});\n\n/**\n * Check if the request was an _XMLHttpRequest_.\n *\n * @return {Boolean}\n * @public\n */\n\ndefineGetter(req, 'xhr', function xhr(){\n var val = this.get('X-Requested-With') || '';\n return val.toLowerCase() === 'xmlhttprequest';\n});\n\n/**\n * Helper function for creating a getter on an object.\n *\n * @param {Object} obj\n * @param {String} name\n * @param {Function} getter\n * @private\n */\nfunction defineGetter(obj, name, getter) {\n Object.defineProperty(obj, name, {\n configurable: true,\n enumerable: true,\n get: getter\n });\n}\n", "/**\n * Module dependencies.\n */\n\nvar crypto = require('crypto');\n\n/**\n * Sign the given `val` with `secret`.\n *\n * @param {String} val\n * @param {String} secret\n * @return {String}\n * @api private\n */\n\nexports.sign = function(val, secret){\n if ('string' != typeof val) throw new TypeError(\"Cookie value must be provided as a string.\");\n if ('string' != typeof secret) throw new TypeError(\"Secret string must be provided.\");\n return val + '.' + crypto\n .createHmac('sha256', secret)\n .update(val)\n .digest('base64')\n .replace(/\\=+$/, '');\n};\n\n/**\n * Unsign and decode the given `val` with `secret`,\n * returning `false` if the signature is invalid.\n *\n * @param {String} val\n * @param {String} secret\n * @return {String|Boolean}\n * @api private\n */\n\nexports.unsign = function(val, secret){\n if ('string' != typeof val) throw new TypeError(\"Signed cookie string must be provided.\");\n if ('string' != typeof secret) throw new TypeError(\"Secret string must be provided.\");\n var str = val.slice(0, val.lastIndexOf('.'))\n , mac = exports.sign(str, secret);\n \n return sha1(mac) == sha1(val) ? str : false;\n};\n\n/**\n * Private\n */\n\nfunction sha1(str){\n return crypto.createHash('sha1').update(str).digest('hex');\n}\n", "/*!\n * cookie\n * Copyright(c) 2012-2014 Roman Shtylman\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nexports.parse = parse;\nexports.serialize = serialize;\n\n/**\n * Module variables.\n * @private\n */\n\nvar __toString = Object.prototype.toString\n\n/**\n * RegExp to match field-content in RFC 7230 sec 3.2\n *\n * field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ]\n * field-vchar = VCHAR / obs-text\n * obs-text = %x80-FF\n */\n\nvar fieldContentRegExp = /^[\\u0009\\u0020-\\u007e\\u0080-\\u00ff]+$/;\n\n/**\n * Parse a cookie header.\n *\n * Parse the given cookie header string into an object\n * The object has the various cookies as keys(names) => values\n *\n * @param {string} str\n * @param {object} [options]\n * @return {object}\n * @public\n */\n\nfunction parse(str, options) {\n if (typeof str !== 'string') {\n throw new TypeError('argument str must be a string');\n }\n\n var obj = {}\n var opt = options || {};\n var dec = opt.decode || decode;\n\n var index = 0\n while (index < str.length) {\n var eqIdx = str.indexOf('=', index)\n\n // no more cookie pairs\n if (eqIdx === -1) {\n break\n }\n\n var endIdx = str.indexOf(';', index)\n\n if (endIdx === -1) {\n endIdx = str.length\n } else if (endIdx < eqIdx) {\n // backtrack on prior semicolon\n index = str.lastIndexOf(';', eqIdx - 1) + 1\n continue\n }\n\n var key = str.slice(index, eqIdx).trim()\n\n // only assign once\n if (undefined === obj[key]) {\n var val = str.slice(eqIdx + 1, endIdx).trim()\n\n // quoted values\n if (val.charCodeAt(0) === 0x22) {\n val = val.slice(1, -1)\n }\n\n obj[key] = tryDecode(val, dec);\n }\n\n index = endIdx + 1\n }\n\n return obj;\n}\n\n/**\n * Serialize data into a cookie header.\n *\n * Serialize the a name value pair into a cookie string suitable for\n * http headers. An optional options object specified cookie parameters.\n *\n * serialize('foo', 'bar', { httpOnly: true })\n * => \"foo=bar; httpOnly\"\n *\n * @param {string} name\n * @param {string} val\n * @param {object} [options]\n * @return {string}\n * @public\n */\n\nfunction serialize(name, val, options) {\n var opt = options || {};\n var enc = opt.encode || encode;\n\n if (typeof enc !== 'function') {\n throw new TypeError('option encode is invalid');\n }\n\n if (!fieldContentRegExp.test(name)) {\n throw new TypeError('argument name is invalid');\n }\n\n var value = enc(val);\n\n if (value && !fieldContentRegExp.test(value)) {\n throw new TypeError('argument val is invalid');\n }\n\n var str = name + '=' + value;\n\n if (null != opt.maxAge) {\n var maxAge = opt.maxAge - 0;\n\n if (isNaN(maxAge) || !isFinite(maxAge)) {\n throw new TypeError('option maxAge is invalid')\n }\n\n str += '; Max-Age=' + Math.floor(maxAge);\n }\n\n if (opt.domain) {\n if (!fieldContentRegExp.test(opt.domain)) {\n throw new TypeError('option domain is invalid');\n }\n\n str += '; Domain=' + opt.domain;\n }\n\n if (opt.path) {\n if (!fieldContentRegExp.test(opt.path)) {\n throw new TypeError('option path is invalid');\n }\n\n str += '; Path=' + opt.path;\n }\n\n if (opt.expires) {\n var expires = opt.expires\n\n if (!isDate(expires) || isNaN(expires.valueOf())) {\n throw new TypeError('option expires is invalid');\n }\n\n str += '; Expires=' + expires.toUTCString()\n }\n\n if (opt.httpOnly) {\n str += '; HttpOnly';\n }\n\n if (opt.secure) {\n str += '; Secure';\n }\n\n if (opt.priority) {\n var priority = typeof opt.priority === 'string'\n ? opt.priority.toLowerCase()\n : opt.priority\n\n switch (priority) {\n case 'low':\n str += '; Priority=Low'\n break\n case 'medium':\n str += '; Priority=Medium'\n break\n case 'high':\n str += '; Priority=High'\n break\n default:\n throw new TypeError('option priority is invalid')\n }\n }\n\n if (opt.sameSite) {\n var sameSite = typeof opt.sameSite === 'string'\n ? opt.sameSite.toLowerCase() : opt.sameSite;\n\n switch (sameSite) {\n case true:\n str += '; SameSite=Strict';\n break;\n case 'lax':\n str += '; SameSite=Lax';\n break;\n case 'strict':\n str += '; SameSite=Strict';\n break;\n case 'none':\n str += '; SameSite=None';\n break;\n default:\n throw new TypeError('option sameSite is invalid');\n }\n }\n\n return str;\n}\n\n/**\n * URL-decode string value. Optimized to skip native call when no %.\n *\n * @param {string} str\n * @returns {string}\n */\n\nfunction decode (str) {\n return str.indexOf('%') !== -1\n ? decodeURIComponent(str)\n : str\n}\n\n/**\n * URL-encode value.\n *\n * @param {string} str\n * @returns {string}\n */\n\nfunction encode (val) {\n return encodeURIComponent(val)\n}\n\n/**\n * Determine if value is a Date.\n *\n * @param {*} val\n * @private\n */\n\nfunction isDate (val) {\n return __toString.call(val) === '[object Date]' ||\n val instanceof Date\n}\n\n/**\n * Try decoding a string using a decoding function.\n *\n * @param {string} str\n * @param {function} decode\n * @private\n */\n\nfunction tryDecode(str, decode) {\n try {\n return decode(str);\n } catch (e) {\n return str;\n }\n}\n", "/*!\n * vary\n * Copyright(c) 2014-2017 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n */\n\nmodule.exports = vary\nmodule.exports.append = append\n\n/**\n * RegExp to match field-name in RFC 7230 sec 3.2\n *\n * field-name = token\n * token = 1*tchar\n * tchar = \"!\" / \"#\" / \"$\" / \"%\" / \"&\" / \"'\" / \"*\"\n * / \"+\" / \"-\" / \".\" / \"^\" / \"_\" / \"`\" / \"|\" / \"~\"\n * / DIGIT / ALPHA\n * ; any VCHAR, except delimiters\n */\n\nvar FIELD_NAME_REGEXP = /^[!#$%&'*+\\-.^_`|~0-9A-Za-z]+$/\n\n/**\n * Append a field to a vary header.\n *\n * @param {String} header\n * @param {String|Array} field\n * @return {String}\n * @public\n */\n\nfunction append (header, field) {\n if (typeof header !== 'string') {\n throw new TypeError('header argument is required')\n }\n\n if (!field) {\n throw new TypeError('field argument is required')\n }\n\n // get fields array\n var fields = !Array.isArray(field)\n ? parse(String(field))\n : field\n\n // assert on invalid field names\n for (var j = 0; j < fields.length; j++) {\n if (!FIELD_NAME_REGEXP.test(fields[j])) {\n throw new TypeError('field argument contains an invalid header name')\n }\n }\n\n // existing, unspecified vary\n if (header === '*') {\n return header\n }\n\n // enumerate current values\n var val = header\n var vals = parse(header.toLowerCase())\n\n // unspecified vary\n if (fields.indexOf('*') !== -1 || vals.indexOf('*') !== -1) {\n return '*'\n }\n\n for (var i = 0; i < fields.length; i++) {\n var fld = fields[i].toLowerCase()\n\n // append value (case-preserving)\n if (vals.indexOf(fld) === -1) {\n vals.push(fld)\n val = val\n ? val + ', ' + fields[i]\n : fields[i]\n }\n }\n\n return val\n}\n\n/**\n * Parse a vary header into an array.\n *\n * @param {String} header\n * @return {Array}\n * @private\n */\n\nfunction parse (header) {\n var end = 0\n var list = []\n var start = 0\n\n // gather tokens\n for (var i = 0, len = header.length; i < len; i++) {\n switch (header.charCodeAt(i)) {\n case 0x20: /* */\n if (start === end) {\n start = end = i + 1\n }\n break\n case 0x2c: /* , */\n list.push(header.substring(start, end))\n start = end = i + 1\n break\n default:\n end = i + 1\n break\n }\n }\n\n // final token\n list.push(header.substring(start, end))\n\n return list\n}\n\n/**\n * Mark that a request is varied on a header field.\n *\n * @param {Object} res\n * @param {String|Array} field\n * @public\n */\n\nfunction vary (res, field) {\n if (!res || !res.getHeader || !res.setHeader) {\n // quack quack\n throw new TypeError('res argument is required')\n }\n\n // get existing header\n var val = res.getHeader('Vary') || ''\n var header = Array.isArray(val)\n ? val.join(', ')\n : String(val)\n\n // set new header\n if ((val = append(header, field))) {\n res.setHeader('Vary', val)\n }\n}\n", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar Buffer = require('safe-buffer').Buffer\nvar contentDisposition = require('content-disposition');\nvar createError = require('http-errors')\nvar deprecate = require('depd')('express');\nvar encodeUrl = require('encodeurl');\nvar escapeHtml = require('escape-html');\nvar http = require('http');\nvar isAbsolute = require('./utils').isAbsolute;\nvar onFinished = require('on-finished');\nvar path = require('path');\nvar statuses = require('statuses')\nvar merge = require('utils-merge');\nvar sign = require('cookie-signature').sign;\nvar normalizeType = require('./utils').normalizeType;\nvar normalizeTypes = require('./utils').normalizeTypes;\nvar setCharset = require('./utils').setCharset;\nvar cookie = require('cookie');\nvar send = require('send');\nvar extname = path.extname;\nvar mime = send.mime;\nvar resolve = path.resolve;\nvar vary = require('vary');\n\n/**\n * Response prototype.\n * @public\n */\n\nvar res = Object.create(http.ServerResponse.prototype)\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = res\n\n/**\n * Module variables.\n * @private\n */\n\nvar charsetRegExp = /;\\s*charset\\s*=/;\n\n/**\n * Set status `code`.\n *\n * @param {Number} code\n * @return {ServerResponse}\n * @public\n */\n\nres.status = function status(code) {\n if ((typeof code === 'string' || Math.floor(code) !== code) && code > 99 && code < 1000) {\n deprecate('res.status(' + JSON.stringify(code) + '): use res.status(' + Math.floor(code) + ') instead')\n }\n this.statusCode = code;\n return this;\n};\n\n/**\n * Set Link header field with the given `links`.\n *\n * Examples:\n *\n * res.links({\n * next: 'http://api.example.com/users?page=2',\n * last: 'http://api.example.com/users?page=5'\n * });\n *\n * @param {Object} links\n * @return {ServerResponse}\n * @public\n */\n\nres.links = function(links){\n var link = this.get('Link') || '';\n if (link) link += ', ';\n return this.set('Link', link + Object.keys(links).map(function(rel){\n return '<' + links[rel] + '>; rel=\"' + rel + '\"';\n }).join(', '));\n};\n\n/**\n * Send a response.\n *\n * Examples:\n *\n * res.send(Buffer.from('wahoo'));\n * res.send({ some: 'json' });\n * res.send('<p>some html</p>');\n *\n * @param {string|number|boolean|object|Buffer} body\n * @public\n */\n\nres.send = function send(body) {\n var chunk = body;\n var encoding;\n var req = this.req;\n var type;\n\n // settings\n var app = this.app;\n\n // allow status / body\n if (arguments.length === 2) {\n // res.send(body, status) backwards compat\n if (typeof arguments[0] !== 'number' && typeof arguments[1] === 'number') {\n deprecate('res.send(body, status): Use res.status(status).send(body) instead');\n this.statusCode = arguments[1];\n } else {\n deprecate('res.send(status, body): Use res.status(status).send(body) instead');\n this.statusCode = arguments[0];\n chunk = arguments[1];\n }\n }\n\n // disambiguate res.send(status) and res.send(status, num)\n if (typeof chunk === 'number' && arguments.length === 1) {\n // res.send(status) will set status message as text string\n if (!this.get('Content-Type')) {\n this.type('txt');\n }\n\n deprecate('res.send(status): Use res.sendStatus(status) instead');\n this.statusCode = chunk;\n chunk = statuses.message[chunk]\n }\n\n switch (typeof chunk) {\n // string defaulting to html\n case 'string':\n if (!this.get('Content-Type')) {\n this.type('html');\n }\n break;\n case 'boolean':\n case 'number':\n case 'object':\n if (chunk === null) {\n chunk = '';\n } else if (Buffer.isBuffer(chunk)) {\n if (!this.get('Content-Type')) {\n this.type('bin');\n }\n } else {\n return this.json(chunk);\n }\n break;\n }\n\n // write strings in utf-8\n if (typeof chunk === 'string') {\n encoding = 'utf8';\n type = this.get('Content-Type');\n\n // reflect this in content-type\n if (typeof type === 'string') {\n this.set('Content-Type', setCharset(type, 'utf-8'));\n }\n }\n\n // determine if ETag should be generated\n var etagFn = app.get('etag fn')\n var generateETag = !this.get('ETag') && typeof etagFn === 'function'\n\n // populate Content-Length\n var len\n if (chunk !== undefined) {\n if (Buffer.isBuffer(chunk)) {\n // get length of Buffer\n len = chunk.length\n } else if (!generateETag && chunk.length < 1000) {\n // just calculate length when no ETag + small chunk\n len = Buffer.byteLength(chunk, encoding)\n } else {\n // convert chunk to Buffer and calculate\n chunk = Buffer.from(chunk, encoding)\n encoding = undefined;\n len = chunk.length\n }\n\n this.set('Content-Length', len);\n }\n\n // populate ETag\n var etag;\n if (generateETag && len !== undefined) {\n if ((etag = etagFn(chunk, encoding))) {\n this.set('ETag', etag);\n }\n }\n\n // freshness\n if (req.fresh) this.statusCode = 304;\n\n // strip irrelevant headers\n if (204 === this.statusCode || 304 === this.statusCode) {\n this.removeHeader('Content-Type');\n this.removeHeader('Content-Length');\n this.removeHeader('Transfer-Encoding');\n chunk = '';\n }\n\n // alter headers for 205\n if (this.statusCode === 205) {\n this.set('Content-Length', '0')\n this.removeHeader('Transfer-Encoding')\n chunk = ''\n }\n\n if (req.method === 'HEAD') {\n // skip body for HEAD\n this.end();\n } else {\n // respond\n this.end(chunk, encoding);\n }\n\n return this;\n};\n\n/**\n * Send JSON response.\n *\n * Examples:\n *\n * res.json(null);\n * res.json({ user: 'tj' });\n *\n * @param {string|number|boolean|object} obj\n * @public\n */\n\nres.json = function json(obj) {\n var val = obj;\n\n // allow status / body\n if (arguments.length === 2) {\n // res.json(body, status) backwards compat\n if (typeof arguments[1] === 'number') {\n deprecate('res.json(obj, status): Use res.status(status).json(obj) instead');\n this.statusCode = arguments[1];\n } else {\n deprecate('res.json(status, obj): Use res.status(status).json(obj) instead');\n this.statusCode = arguments[0];\n val = arguments[1];\n }\n }\n\n // settings\n var app = this.app;\n var escape = app.get('json escape')\n var replacer = app.get('json replacer');\n var spaces = app.get('json spaces');\n var body = stringify(val, replacer, spaces, escape)\n\n // content-type\n if (!this.get('Content-Type')) {\n this.set('Content-Type', 'application/json');\n }\n\n return this.send(body);\n};\n\n/**\n * Send JSON response with JSONP callback support.\n *\n * Examples:\n *\n * res.jsonp(null);\n * res.jsonp({ user: 'tj' });\n *\n * @param {string|number|boolean|object} obj\n * @public\n */\n\nres.jsonp = function jsonp(obj) {\n var val = obj;\n\n // allow status / body\n if (arguments.length === 2) {\n // res.jsonp(body, status) backwards compat\n if (typeof arguments[1] === 'number') {\n deprecate('res.jsonp(obj, status): Use res.status(status).jsonp(obj) instead');\n this.statusCode = arguments[1];\n } else {\n deprecate('res.jsonp(status, obj): Use res.status(status).jsonp(obj) instead');\n this.statusCode = arguments[0];\n val = arguments[1];\n }\n }\n\n // settings\n var app = this.app;\n var escape = app.get('json escape')\n var replacer = app.get('json replacer');\n var spaces = app.get('json spaces');\n var body = stringify(val, replacer, spaces, escape)\n var callback = this.req.query[app.get('jsonp callback name')];\n\n // content-type\n if (!this.get('Content-Type')) {\n this.set('X-Content-Type-Options', 'nosniff');\n this.set('Content-Type', 'application/json');\n }\n\n // fixup callback\n if (Array.isArray(callback)) {\n callback = callback[0];\n }\n\n // jsonp\n if (typeof callback === 'string' && callback.length !== 0) {\n this.set('X-Content-Type-Options', 'nosniff');\n this.set('Content-Type', 'text/javascript');\n\n // restrict callback charset\n callback = callback.replace(/[^\\[\\]\\w$.]/g, '');\n\n if (body === undefined) {\n // empty argument\n body = ''\n } else if (typeof body === 'string') {\n // replace chars not allowed in JavaScript that are in JSON\n body = body\n .replace(/\\u2028/g, '\\\\u2028')\n .replace(/\\u2029/g, '\\\\u2029')\n }\n\n // the /**/ is a specific security mitigation for \"Rosetta Flash JSONP abuse\"\n // the typeof check is just to reduce client error noise\n body = '/**/ typeof ' + callback + ' === \\'function\\' && ' + callback + '(' + body + ');';\n }\n\n return this.send(body);\n};\n\n/**\n * Send given HTTP status code.\n *\n * Sets the response status to `statusCode` and the body of the\n * response to the standard description from node's http.STATUS_CODES\n * or the statusCode number if no description.\n *\n * Examples:\n *\n * res.sendStatus(200);\n *\n * @param {number} statusCode\n * @public\n */\n\nres.sendStatus = function sendStatus(statusCode) {\n var body = statuses.message[statusCode] || String(statusCode)\n\n this.statusCode = statusCode;\n this.type('txt');\n\n return this.send(body);\n};\n\n/**\n * Transfer the file at the given `path`.\n *\n * Automatically sets the _Content-Type_ response header field.\n * The callback `callback(err)` is invoked when the transfer is complete\n * or when an error occurs. Be sure to check `res.headersSent`\n * if you wish to attempt responding, as the header and some data\n * may have already been transferred.\n *\n * Options:\n *\n * - `maxAge` defaulting to 0 (can be string converted by `ms`)\n * - `root` root directory for relative filenames\n * - `headers` object of headers to serve with file\n * - `dotfiles` serve dotfiles, defaulting to false; can be `\"allow\"` to send them\n *\n * Other options are passed along to `send`.\n *\n * Examples:\n *\n * The following example illustrates how `res.sendFile()` may\n * be used as an alternative for the `static()` middleware for\n * dynamic situations. The code backing `res.sendFile()` is actually\n * the same code, so HTTP cache support etc is identical.\n *\n * app.get('/user/:uid/photos/:file', function(req, res){\n * var uid = req.params.uid\n * , file = req.params.file;\n *\n * req.user.mayViewFilesFrom(uid, function(yes){\n * if (yes) {\n * res.sendFile('/uploads/' + uid + '/' + file);\n * } else {\n * res.send(403, 'Sorry! you cant see that.');\n * }\n * });\n * });\n *\n * @public\n */\n\nres.sendFile = function sendFile(path, options, callback) {\n var done = callback;\n var req = this.req;\n var res = this;\n var next = req.next;\n var opts = options || {};\n\n if (!path) {\n throw new TypeError('path argument is required to res.sendFile');\n }\n\n if (typeof path !== 'string') {\n throw new TypeError('path must be a string to res.sendFile')\n }\n\n // support function as second arg\n if (typeof options === 'function') {\n done = options;\n opts = {};\n }\n\n if (!opts.root && !isAbsolute(path)) {\n throw new TypeError('path must be absolute or specify root to res.sendFile');\n }\n\n // create file stream\n var pathname = encodeURI(path);\n var file = send(req, pathname, opts);\n\n // transfer\n sendfile(res, file, opts, function (err) {\n if (done) return done(err);\n if (err && err.code === 'EISDIR') return next();\n\n // next() all but write errors\n if (err && err.code !== 'ECONNABORTED' && err.syscall !== 'write') {\n next(err);\n }\n });\n};\n\n/**\n * Transfer the file at the given `path`.\n *\n * Automatically sets the _Content-Type_ response header field.\n * The callback `callback(err)` is invoked when the transfer is complete\n * or when an error occurs. Be sure to check `res.headersSent`\n * if you wish to attempt responding, as the header and some data\n * may have already been transferred.\n *\n * Options:\n *\n * - `maxAge` defaulting to 0 (can be string converted by `ms`)\n * - `root` root directory for relative filenames\n * - `headers` object of headers to serve with file\n * - `dotfiles` serve dotfiles, defaulting to false; can be `\"allow\"` to send them\n *\n * Other options are passed along to `send`.\n *\n * Examples:\n *\n * The following example illustrates how `res.sendfile()` may\n * be used as an alternative for the `static()` middleware for\n * dynamic situations. The code backing `res.sendfile()` is actually\n * the same code, so HTTP cache support etc is identical.\n *\n * app.get('/user/:uid/photos/:file', function(req, res){\n * var uid = req.params.uid\n * , file = req.params.file;\n *\n * req.user.mayViewFilesFrom(uid, function(yes){\n * if (yes) {\n * res.sendfile('/uploads/' + uid + '/' + file);\n * } else {\n * res.send(403, 'Sorry! you cant see that.');\n * }\n * });\n * });\n *\n * @public\n */\n\nres.sendfile = function (path, options, callback) {\n var done = callback;\n var req = this.req;\n var res = this;\n var next = req.next;\n var opts = options || {};\n\n // support function as second arg\n if (typeof options === 'function') {\n done = options;\n opts = {};\n }\n\n // create file stream\n var file = send(req, path, opts);\n\n // transfer\n sendfile(res, file, opts, function (err) {\n if (done) return done(err);\n if (err && err.code === 'EISDIR') return next();\n\n // next() all but write errors\n if (err && err.code !== 'ECONNABORTED' && err.syscall !== 'write') {\n next(err);\n }\n });\n};\n\nres.sendfile = deprecate.function(res.sendfile,\n 'res.sendfile: Use res.sendFile instead');\n\n/**\n * Transfer the file at the given `path` as an attachment.\n *\n * Optionally providing an alternate attachment `filename`,\n * and optional callback `callback(err)`. The callback is invoked\n * when the data transfer is complete, or when an error has\n * occurred. Be sure to check `res.headersSent` if you plan to respond.\n *\n * Optionally providing an `options` object to use with `res.sendFile()`.\n * This function will set the `Content-Disposition` header, overriding\n * any `Content-Disposition` header passed as header options in order\n * to set the attachment and filename.\n *\n * This method uses `res.sendFile()`.\n *\n * @public\n */\n\nres.download = function download (path, filename, options, callback) {\n var done = callback;\n var name = filename;\n var opts = options || null\n\n // support function as second or third arg\n if (typeof filename === 'function') {\n done = filename;\n name = null;\n opts = null\n } else if (typeof options === 'function') {\n done = options\n opts = null\n }\n\n // support optional filename, where options may be in it's place\n if (typeof filename === 'object' &&\n (typeof options === 'function' || options === undefined)) {\n name = null\n opts = filename\n }\n\n // set Content-Disposition when file is sent\n var headers = {\n 'Content-Disposition': contentDisposition(name || path)\n };\n\n // merge user-provided headers\n if (opts && opts.headers) {\n var keys = Object.keys(opts.headers)\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i]\n if (key.toLowerCase() !== 'content-disposition') {\n headers[key] = opts.headers[key]\n }\n }\n }\n\n // merge user-provided options\n opts = Object.create(opts)\n opts.headers = headers\n\n // Resolve the full path for sendFile\n var fullPath = !opts.root\n ? resolve(path)\n : path\n\n // send file\n return this.sendFile(fullPath, opts, done)\n};\n\n/**\n * Set _Content-Type_ response header with `type` through `mime.lookup()`\n * when it does not contain \"/\", or set the Content-Type to `type` otherwise.\n *\n * Examples:\n *\n * res.type('.html');\n * res.type('html');\n * res.type('json');\n * res.type('application/json');\n * res.type('png');\n *\n * @param {String} type\n * @return {ServerResponse} for chaining\n * @public\n */\n\nres.contentType =\nres.type = function contentType(type) {\n var ct = type.indexOf('/') === -1\n ? mime.lookup(type)\n : type;\n\n return this.set('Content-Type', ct);\n};\n\n/**\n * Respond to the Acceptable formats using an `obj`\n * of mime-type callbacks.\n *\n * This method uses `req.accepted`, an array of\n * acceptable types ordered by their quality values.\n * When \"Accept\" is not present the _first_ callback\n * is invoked, otherwise the first match is used. When\n * no match is performed the server responds with\n * 406 \"Not Acceptable\".\n *\n * Content-Type is set for you, however if you choose\n * you may alter this within the callback using `res.type()`\n * or `res.set('Content-Type', ...)`.\n *\n * res.format({\n * 'text/plain': function(){\n * res.send('hey');\n * },\n *\n * 'text/html': function(){\n * res.send('<p>hey</p>');\n * },\n *\n * 'application/json': function () {\n * res.send({ message: 'hey' });\n * }\n * });\n *\n * In addition to canonicalized MIME types you may\n * also use extnames mapped to these types:\n *\n * res.format({\n * text: function(){\n * res.send('hey');\n * },\n *\n * html: function(){\n * res.send('<p>hey</p>');\n * },\n *\n * json: function(){\n * res.send({ message: 'hey' });\n * }\n * });\n *\n * By default Express passes an `Error`\n * with a `.status` of 406 to `next(err)`\n * if a match is not made. If you provide\n * a `.default` callback it will be invoked\n * instead.\n *\n * @param {Object} obj\n * @return {ServerResponse} for chaining\n * @public\n */\n\nres.format = function(obj){\n var req = this.req;\n var next = req.next;\n\n var keys = Object.keys(obj)\n .filter(function (v) { return v !== 'default' })\n\n var key = keys.length > 0\n ? req.accepts(keys)\n : false;\n\n this.vary(\"Accept\");\n\n if (key) {\n this.set('Content-Type', normalizeType(key).value);\n obj[key](req, this, next);\n } else if (obj.default) {\n obj.default(req, this, next)\n } else {\n next(createError(406, {\n types: normalizeTypes(keys).map(function (o) { return o.value })\n }))\n }\n\n return this;\n};\n\n/**\n * Set _Content-Disposition_ header to _attachment_ with optional `filename`.\n *\n * @param {String} filename\n * @return {ServerResponse}\n * @public\n */\n\nres.attachment = function attachment(filename) {\n if (filename) {\n this.type(extname(filename));\n }\n\n this.set('Content-Disposition', contentDisposition(filename));\n\n return this;\n};\n\n/**\n * Append additional header `field` with value `val`.\n *\n * Example:\n *\n * res.append('Link', ['<http://localhost/>', '<http://localhost:3000/>']);\n * res.append('Set-Cookie', 'foo=bar; Path=/; HttpOnly');\n * res.append('Warning', '199 Miscellaneous warning');\n *\n * @param {String} field\n * @param {String|Array} val\n * @return {ServerResponse} for chaining\n * @public\n */\n\nres.append = function append(field, val) {\n var prev = this.get(field);\n var value = val;\n\n if (prev) {\n // concat the new and prev vals\n value = Array.isArray(prev) ? prev.concat(val)\n : Array.isArray(val) ? [prev].concat(val)\n : [prev, val]\n }\n\n return this.set(field, value);\n};\n\n/**\n * Set header `field` to `val`, or pass\n * an object of header fields.\n *\n * Examples:\n *\n * res.set('Foo', ['bar', 'baz']);\n * res.set('Accept', 'application/json');\n * res.set({ Accept: 'text/plain', 'X-API-Key': 'tobi' });\n *\n * Aliased as `res.header()`.\n *\n * @param {String|Object} field\n * @param {String|Array} val\n * @return {ServerResponse} for chaining\n * @public\n */\n\nres.set =\nres.header = function header(field, val) {\n if (arguments.length === 2) {\n var value = Array.isArray(val)\n ? val.map(String)\n : String(val);\n\n // add charset to content-type\n if (field.toLowerCase() === 'content-type') {\n if (Array.isArray(value)) {\n throw new TypeError('Content-Type cannot be set to an Array');\n }\n if (!charsetRegExp.test(value)) {\n var charset = mime.charsets.lookup(value.split(';')[0]);\n if (charset) value += '; charset=' + charset.toLowerCase();\n }\n }\n\n this.setHeader(field, value);\n } else {\n for (var key in field) {\n this.set(key, field[key]);\n }\n }\n return this;\n};\n\n/**\n * Get value for header `field`.\n *\n * @param {String} field\n * @return {String}\n * @public\n */\n\nres.get = function(field){\n return this.getHeader(field);\n};\n\n/**\n * Clear cookie `name`.\n *\n * @param {String} name\n * @param {Object} [options]\n * @return {ServerResponse} for chaining\n * @public\n */\n\nres.clearCookie = function clearCookie(name, options) {\n var opts = merge({ expires: new Date(1), path: '/' }, options);\n\n return this.cookie(name, '', opts);\n};\n\n/**\n * Set cookie `name` to `value`, with the given `options`.\n *\n * Options:\n *\n * - `maxAge` max-age in milliseconds, converted to `expires`\n * - `signed` sign the cookie\n * - `path` defaults to \"/\"\n *\n * Examples:\n *\n * // \"Remember Me\" for 15 minutes\n * res.cookie('rememberme', '1', { expires: new Date(Date.now() + 900000), httpOnly: true });\n *\n * // same as above\n * res.cookie('rememberme', '1', { maxAge: 900000, httpOnly: true })\n *\n * @param {String} name\n * @param {String|Object} value\n * @param {Object} [options]\n * @return {ServerResponse} for chaining\n * @public\n */\n\nres.cookie = function (name, value, options) {\n var opts = merge({}, options);\n var secret = this.req.secret;\n var signed = opts.signed;\n\n if (signed && !secret) {\n throw new Error('cookieParser(\"secret\") required for signed cookies');\n }\n\n var val = typeof value === 'object'\n ? 'j:' + JSON.stringify(value)\n : String(value);\n\n if (signed) {\n val = 's:' + sign(val, secret);\n }\n\n if (opts.maxAge != null) {\n var maxAge = opts.maxAge - 0\n\n if (!isNaN(maxAge)) {\n opts.expires = new Date(Date.now() + maxAge)\n opts.maxAge = Math.floor(maxAge / 1000)\n }\n }\n\n if (opts.path == null) {\n opts.path = '/';\n }\n\n this.append('Set-Cookie', cookie.serialize(name, String(val), opts));\n\n return this;\n};\n\n/**\n * Set the location header to `url`.\n *\n * The given `url` can also be \"back\", which redirects\n * to the _Referrer_ or _Referer_ headers or \"/\".\n *\n * Examples:\n *\n * res.location('/foo/bar').;\n * res.location('http://example.com');\n * res.location('../login');\n *\n * @param {String} url\n * @return {ServerResponse} for chaining\n * @public\n */\n\nres.location = function location(url) {\n var loc = url;\n\n // \"back\" is an alias for the referrer\n if (url === 'back') {\n loc = this.req.get('Referrer') || '/';\n }\n\n // set location\n return this.set('Location', encodeUrl(loc));\n};\n\n/**\n * Redirect to the given `url` with optional response `status`\n * defaulting to 302.\n *\n * The resulting `url` is determined by `res.location()`, so\n * it will play nicely with mounted apps, relative paths,\n * `\"back\"` etc.\n *\n * Examples:\n *\n * res.redirect('/foo/bar');\n * res.redirect('http://example.com');\n * res.redirect(301, 'http://example.com');\n * res.redirect('../login'); // /blog/post/1 -> /blog/login\n *\n * @public\n */\n\nres.redirect = function redirect(url) {\n var address = url;\n var body;\n var status = 302;\n\n // allow status / url\n if (arguments.length === 2) {\n if (typeof arguments[0] === 'number') {\n status = arguments[0];\n address = arguments[1];\n } else {\n deprecate('res.redirect(url, status): Use res.redirect(status, url) instead');\n status = arguments[1];\n }\n }\n\n // Set location header\n address = this.location(address).get('Location');\n\n // Support text/{plain,html} by default\n this.format({\n text: function(){\n body = statuses.message[status] + '. Redirecting to ' + address\n },\n\n html: function(){\n var u = escapeHtml(address);\n body = '<p>' + statuses.message[status] + '. Redirecting to <a href=\"' + u + '\">' + u + '</a></p>'\n },\n\n default: function(){\n body = '';\n }\n });\n\n // Respond\n this.statusCode = status;\n this.set('Content-Length', Buffer.byteLength(body));\n\n if (this.req.method === 'HEAD') {\n this.end();\n } else {\n this.end(body);\n }\n};\n\n/**\n * Add `field` to Vary. If already present in the Vary set, then\n * this call is simply ignored.\n *\n * @param {Array|String} field\n * @return {ServerResponse} for chaining\n * @public\n */\n\nres.vary = function(field){\n // checks for back-compat\n if (!field || (Array.isArray(field) && !field.length)) {\n deprecate('res.vary(): Provide a field name');\n return this;\n }\n\n vary(this, field);\n\n return this;\n};\n\n/**\n * Render `view` with the given `options` and optional callback `fn`.\n * When a callback function is given a response will _not_ be made\n * automatically, otherwise a response of _200_ and _text/html_ is given.\n *\n * Options:\n *\n * - `cache` boolean hinting to the engine it should cache\n * - `filename` filename of the view being rendered\n *\n * @public\n */\n\nres.render = function render(view, options, callback) {\n var app = this.req.app;\n var done = callback;\n var opts = options || {};\n var req = this.req;\n var self = this;\n\n // support callback function as second arg\n if (typeof options === 'function') {\n done = options;\n opts = {};\n }\n\n // merge res.locals\n opts._locals = self.locals;\n\n // default callback to respond\n done = done || function (err, str) {\n if (err) return req.next(err);\n self.send(str);\n };\n\n // render\n app.render(view, opts, done);\n};\n\n// pipe the send file stream\nfunction sendfile(res, file, options, callback) {\n var done = false;\n var streaming;\n\n // request aborted\n function onaborted() {\n if (done) return;\n done = true;\n\n var err = new Error('Request aborted');\n err.code = 'ECONNABORTED';\n callback(err);\n }\n\n // directory\n function ondirectory() {\n if (done) return;\n done = true;\n\n var err = new Error('EISDIR, read');\n err.code = 'EISDIR';\n callback(err);\n }\n\n // errors\n function onerror(err) {\n if (done) return;\n done = true;\n callback(err);\n }\n\n // ended\n function onend() {\n if (done) return;\n done = true;\n callback();\n }\n\n // file\n function onfile() {\n streaming = false;\n }\n\n // finished\n function onfinish(err) {\n if (err && err.code === 'ECONNRESET') return onaborted();\n if (err) return onerror(err);\n if (done) return;\n\n setImmediate(function () {\n if (streaming !== false && !done) {\n onaborted();\n return;\n }\n\n if (done) return;\n done = true;\n callback();\n });\n }\n\n // streaming\n function onstream() {\n streaming = true;\n }\n\n file.on('directory', ondirectory);\n file.on('end', onend);\n file.on('error', onerror);\n file.on('file', onfile);\n file.on('stream', onstream);\n onFinished(res, onfinish);\n\n if (options.headers) {\n // set headers on successful transfer\n file.on('headers', function headers(res) {\n var obj = options.headers;\n var keys = Object.keys(obj);\n\n for (var i = 0; i < keys.length; i++) {\n var k = keys[i];\n res.setHeader(k, obj[k]);\n }\n });\n }\n\n // pipe\n file.pipe(res);\n}\n\n/**\n * Stringify JSON, like JSON.stringify, but v8 optimized, with the\n * ability to escape characters that can trigger HTML sniffing.\n *\n * @param {*} value\n * @param {function} replacer\n * @param {number} spaces\n * @param {boolean} escape\n * @returns {string}\n * @private\n */\n\nfunction stringify (value, replacer, spaces, escape) {\n // v8 checks arguments.length for optimizing simple call\n // https://bugs.chromium.org/p/v8/issues/detail?id=4730\n var json = replacer || spaces\n ? JSON.stringify(value, replacer, spaces)\n : JSON.stringify(value);\n\n if (escape && typeof json === 'string') {\n json = json.replace(/[<>&]/g, function (c) {\n switch (c.charCodeAt(0)) {\n case 0x3c:\n return '\\\\u003c'\n case 0x3e:\n return '\\\\u003e'\n case 0x26:\n return '\\\\u0026'\n /* istanbul ignore next: unreachable default */\n default:\n return c\n }\n })\n }\n\n return json\n}\n", "/*!\n * serve-static\n * Copyright(c) 2010 Sencha Inc.\n * Copyright(c) 2011 TJ Holowaychuk\n * Copyright(c) 2014-2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar encodeUrl = require('encodeurl')\nvar escapeHtml = require('escape-html')\nvar parseUrl = require('parseurl')\nvar resolve = require('path').resolve\nvar send = require('send')\nvar url = require('url')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = serveStatic\nmodule.exports.mime = send.mime\n\n/**\n * @param {string} root\n * @param {object} [options]\n * @return {function}\n * @public\n */\n\nfunction serveStatic (root, options) {\n if (!root) {\n throw new TypeError('root path required')\n }\n\n if (typeof root !== 'string') {\n throw new TypeError('root path must be a string')\n }\n\n // copy options object\n var opts = Object.create(options || null)\n\n // fall-though\n var fallthrough = opts.fallthrough !== false\n\n // default redirect\n var redirect = opts.redirect !== false\n\n // headers listener\n var setHeaders = opts.setHeaders\n\n if (setHeaders && typeof setHeaders !== 'function') {\n throw new TypeError('option setHeaders must be function')\n }\n\n // setup options for send\n opts.maxage = opts.maxage || opts.maxAge || 0\n opts.root = resolve(root)\n\n // construct directory listener\n var onDirectory = redirect\n ? createRedirectDirectoryListener()\n : createNotFoundDirectoryListener()\n\n return function serveStatic (req, res, next) {\n if (req.method !== 'GET' && req.method !== 'HEAD') {\n if (fallthrough) {\n return next()\n }\n\n // method not allowed\n res.statusCode = 405\n res.setHeader('Allow', 'GET, HEAD')\n res.setHeader('Content-Length', '0')\n res.end()\n return\n }\n\n var forwardError = !fallthrough\n var originalUrl = parseUrl.original(req)\n var path = parseUrl(req).pathname\n\n // make sure redirect occurs at mount\n if (path === '/' && originalUrl.pathname.substr(-1) !== '/') {\n path = ''\n }\n\n // create send stream\n var stream = send(req, path, opts)\n\n // add directory handler\n stream.on('directory', onDirectory)\n\n // add headers listener\n if (setHeaders) {\n stream.on('headers', setHeaders)\n }\n\n // add file listener for fallthrough\n if (fallthrough) {\n stream.on('file', function onFile () {\n // once file is determined, always forward error\n forwardError = true\n })\n }\n\n // forward errors\n stream.on('error', function error (err) {\n if (forwardError || !(err.statusCode < 500)) {\n next(err)\n return\n }\n\n next()\n })\n\n // pipe\n stream.pipe(res)\n }\n}\n\n/**\n * Collapse all leading slashes into a single slash\n * @private\n */\nfunction collapseLeadingSlashes (str) {\n for (var i = 0; i < str.length; i++) {\n if (str.charCodeAt(i) !== 0x2f /* / */) {\n break\n }\n }\n\n return i > 1\n ? '/' + str.substr(i)\n : str\n}\n\n/**\n * Create a minimal HTML document.\n *\n * @param {string} title\n * @param {string} body\n * @private\n */\n\nfunction createHtmlDocument (title, body) {\n return '<!DOCTYPE html>\\n' +\n '<html lang=\"en\">\\n' +\n '<head>\\n' +\n '<meta charset=\"utf-8\">\\n' +\n '<title>' + title + '</title>\\n' +\n '</head>\\n' +\n '<body>\\n' +\n '<pre>' + body + '</pre>\\n' +\n '</body>\\n' +\n '</html>\\n'\n}\n\n/**\n * Create a directory listener that just 404s.\n * @private\n */\n\nfunction createNotFoundDirectoryListener () {\n return function notFound () {\n this.error(404)\n }\n}\n\n/**\n * Create a directory listener that performs a redirect.\n * @private\n */\n\nfunction createRedirectDirectoryListener () {\n return function redirect (res) {\n if (this.hasTrailingSlash()) {\n this.error(404)\n return\n }\n\n // get original URL\n var originalUrl = parseUrl.original(this.req)\n\n // append trailing slash\n originalUrl.path = null\n originalUrl.pathname = collapseLeadingSlashes(originalUrl.pathname + '/')\n\n // reformat the URL\n var loc = encodeUrl(url.format(originalUrl))\n var doc = createHtmlDocument('Redirecting', 'Redirecting to <a href=\"' + escapeHtml(loc) + '\">' +\n escapeHtml(loc) + '</a>')\n\n // send redirect response\n res.statusCode = 301\n res.setHeader('Content-Type', 'text/html; charset=UTF-8')\n res.setHeader('Content-Length', Buffer.byteLength(doc))\n res.setHeader('Content-Security-Policy', \"default-src 'none'\")\n res.setHeader('X-Content-Type-Options', 'nosniff')\n res.setHeader('Location', loc)\n res.end(doc)\n }\n}\n", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2013 Roman Shtylman\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n */\n\nvar bodyParser = require('body-parser')\nvar EventEmitter = require('events').EventEmitter;\nvar mixin = require('merge-descriptors');\nvar proto = require('./application');\nvar Route = require('./router/route');\nvar Router = require('./router');\nvar req = require('./request');\nvar res = require('./response');\n\n/**\n * Expose `createApplication()`.\n */\n\nexports = module.exports = createApplication;\n\n/**\n * Create an express application.\n *\n * @return {Function}\n * @api public\n */\n\nfunction createApplication() {\n var app = function(req, res, next) {\n app.handle(req, res, next);\n };\n\n mixin(app, EventEmitter.prototype, false);\n mixin(app, proto, false);\n\n // expose the prototype that will get set on requests\n app.request = Object.create(req, {\n app: { configurable: true, enumerable: true, writable: true, value: app }\n })\n\n // expose the prototype that will get set on responses\n app.response = Object.create(res, {\n app: { configurable: true, enumerable: true, writable: true, value: app }\n })\n\n app.init();\n return app;\n}\n\n/**\n * Expose the prototypes.\n */\n\nexports.application = proto;\nexports.request = req;\nexports.response = res;\n\n/**\n * Expose constructors.\n */\n\nexports.Route = Route;\nexports.Router = Router;\n\n/**\n * Expose middleware\n */\n\nexports.json = bodyParser.json\nexports.query = require('./middleware/query');\nexports.raw = bodyParser.raw\nexports.static = require('serve-static');\nexports.text = bodyParser.text\nexports.urlencoded = bodyParser.urlencoded\n\n/**\n * Replace removed middleware with an appropriate error message.\n */\n\nvar removedMiddlewares = [\n 'bodyParser',\n 'compress',\n 'cookieSession',\n 'session',\n 'logger',\n 'cookieParser',\n 'favicon',\n 'responseTime',\n 'errorHandler',\n 'timeout',\n 'methodOverride',\n 'vhost',\n 'csrf',\n 'directory',\n 'limit',\n 'multipart',\n 'staticCache'\n]\n\nremovedMiddlewares.forEach(function (name) {\n Object.defineProperty(exports, name, {\n get: function () {\n throw new Error('Most middleware (like ' + name + ') is no longer bundled with Express and must be installed separately. Please see https://github.com/senchalabs/connect#middleware.');\n },\n configurable: true\n });\n});\n", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2013 Roman Shtylman\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\nmodule.exports = require('./lib/express');\n", "/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n", "(function () {\n\n 'use strict';\n\n var assign = require('object-assign');\n var vary = require('vary');\n\n var defaults = {\n origin: '*',\n methods: 'GET,HEAD,PUT,PATCH,POST,DELETE',\n preflightContinue: false,\n optionsSuccessStatus: 204\n };\n\n function isString(s) {\n return typeof s === 'string' || s instanceof String;\n }\n\n function isOriginAllowed(origin, allowedOrigin) {\n if (Array.isArray(allowedOrigin)) {\n for (var i = 0; i < allowedOrigin.length; ++i) {\n if (isOriginAllowed(origin, allowedOrigin[i])) {\n return true;\n }\n }\n return false;\n } else if (isString(allowedOrigin)) {\n return origin === allowedOrigin;\n } else if (allowedOrigin instanceof RegExp) {\n return allowedOrigin.test(origin);\n } else {\n return !!allowedOrigin;\n }\n }\n\n function configureOrigin(options, req) {\n var requestOrigin = req.headers.origin,\n headers = [],\n isAllowed;\n\n if (!options.origin || options.origin === '*') {\n // allow any origin\n headers.push([{\n key: 'Access-Control-Allow-Origin',\n value: '*'\n }]);\n } else if (isString(options.origin)) {\n // fixed origin\n headers.push([{\n key: 'Access-Control-Allow-Origin',\n value: options.origin\n }]);\n headers.push([{\n key: 'Vary',\n value: 'Origin'\n }]);\n } else {\n isAllowed = isOriginAllowed(requestOrigin, options.origin);\n // reflect origin\n headers.push([{\n key: 'Access-Control-Allow-Origin',\n value: isAllowed ? requestOrigin : false\n }]);\n headers.push([{\n key: 'Vary',\n value: 'Origin'\n }]);\n }\n\n return headers;\n }\n\n function configureMethods(options) {\n var methods = options.methods;\n if (methods.join) {\n methods = options.methods.join(','); // .methods is an array, so turn it into a string\n }\n return {\n key: 'Access-Control-Allow-Methods',\n value: methods\n };\n }\n\n function configureCredentials(options) {\n if (options.credentials === true) {\n return {\n key: 'Access-Control-Allow-Credentials',\n value: 'true'\n };\n }\n return null;\n }\n\n function configureAllowedHeaders(options, req) {\n var allowedHeaders = options.allowedHeaders || options.headers;\n var headers = [];\n\n if (!allowedHeaders) {\n allowedHeaders = req.headers['access-control-request-headers']; // .headers wasn't specified, so reflect the request headers\n headers.push([{\n key: 'Vary',\n value: 'Access-Control-Request-Headers'\n }]);\n } else if (allowedHeaders.join) {\n allowedHeaders = allowedHeaders.join(','); // .headers is an array, so turn it into a string\n }\n if (allowedHeaders && allowedHeaders.length) {\n headers.push([{\n key: 'Access-Control-Allow-Headers',\n value: allowedHeaders\n }]);\n }\n\n return headers;\n }\n\n function configureExposedHeaders(options) {\n var headers = options.exposedHeaders;\n if (!headers) {\n return null;\n } else if (headers.join) {\n headers = headers.join(','); // .headers is an array, so turn it into a string\n }\n if (headers && headers.length) {\n return {\n key: 'Access-Control-Expose-Headers',\n value: headers\n };\n }\n return null;\n }\n\n function configureMaxAge(options) {\n var maxAge = (typeof options.maxAge === 'number' || options.maxAge) && options.maxAge.toString()\n if (maxAge && maxAge.length) {\n return {\n key: 'Access-Control-Max-Age',\n value: maxAge\n };\n }\n return null;\n }\n\n function applyHeaders(headers, res) {\n for (var i = 0, n = headers.length; i < n; i++) {\n var header = headers[i];\n if (header) {\n if (Array.isArray(header)) {\n applyHeaders(header, res);\n } else if (header.key === 'Vary' && header.value) {\n vary(res, header.value);\n } else if (header.value) {\n res.setHeader(header.key, header.value);\n }\n }\n }\n }\n\n function cors(options, req, res, next) {\n var headers = [],\n method = req.method && req.method.toUpperCase && req.method.toUpperCase();\n\n if (method === 'OPTIONS') {\n // preflight\n headers.push(configureOrigin(options, req));\n headers.push(configureCredentials(options, req));\n headers.push(configureMethods(options, req));\n headers.push(configureAllowedHeaders(options, req));\n headers.push(configureMaxAge(options, req));\n headers.push(configureExposedHeaders(options, req));\n applyHeaders(headers, res);\n\n if (options.preflightContinue) {\n next();\n } else {\n // Safari (and potentially other browsers) need content-length 0,\n // for 204 or they just hang waiting for a body\n res.statusCode = options.optionsSuccessStatus;\n res.setHeader('Content-Length', '0');\n res.end();\n }\n } else {\n // actual response\n headers.push(configureOrigin(options, req));\n headers.push(configureCredentials(options, req));\n headers.push(configureExposedHeaders(options, req));\n applyHeaders(headers, res);\n next();\n }\n }\n\n function middlewareWrapper(o) {\n // if options are static (either via defaults or custom options passed in), wrap in a function\n var optionsCallback = null;\n if (typeof o === 'function') {\n optionsCallback = o;\n } else {\n optionsCallback = function (req, cb) {\n cb(null, o);\n };\n }\n\n return function corsMiddleware(req, res, next) {\n optionsCallback(req, function (err, options) {\n if (err) {\n next(err);\n } else {\n var corsOptions = assign({}, defaults, options);\n var originCallback = null;\n if (corsOptions.origin && typeof corsOptions.origin === 'function') {\n originCallback = corsOptions.origin;\n } else if (corsOptions.origin) {\n originCallback = function (origin, cb) {\n cb(null, corsOptions.origin);\n };\n }\n\n if (originCallback) {\n originCallback(req.headers.origin, function (err2, origin) {\n if (err2 || !origin) {\n next(err2);\n } else {\n corsOptions.origin = origin;\n cors(corsOptions, req, res, next);\n }\n });\n } else {\n next();\n }\n }\n });\n };\n }\n\n // can pass either an options hash, an options delegate, or nothing\n module.exports = middlewareWrapper;\n\n}());\n", "\nimport fs from 'fs';\nimport path from 'path';\nimport express, { Request, Response } from 'express';\nimport cors from 'cors';\nimport { WorkerBuildStep, WorkerFileUpdate } from '../../common/workertypes';\nimport { ServerBuildEnv, TOOLS, findBestTool } from './buildenv';\n\n/*\n## Tool Server (not yet used)\n\n```sh\nnpm run server\nxattr -dr com.apple.quarantine llvm-mos/bin/* # macOS only\ncurl http://localhost:3009/test\ngo to: http://localhost:8000/?platform=c64&file=hello.c&tool=llvm-mos\n```\n*/\n\n////////////////////\n\nconst app = express();\n\napp.use(cors());\n\napp.use(express.json({ limit: 1024*1024 })); // limit 1 MB\n\napp.get('/info', (req: Request, res: Response) => {\n // send a list of supported tools\n res.json({ tools: TOOLS });\n});\n\napp.get('/test', async (req: Request, res: Response, next) => {\n // quick test of the build\n try {\n const updates: WorkerFileUpdate[] = [{ path: 'test.c', data: 'int main() { return 0; }' }];\n const buildStep: WorkerBuildStep = { tool: 'llvm-mos', platform: 'c64', files: ['test.c'] };\n const env = new ServerBuildEnv(SERVER_ROOT, 'test', TOOLS[0]);\n const result = await env.compileAndLink(buildStep, updates);\n res.json(result);\n } catch (err) {\n return next(err);\n }\n});\n\napp.post('/build', async (req: Request, res: Response, next) => {\n try {\n const updates: WorkerFileUpdate[] = req.body.updates;\n const buildStep: WorkerBuildStep = req.body.buildStep;\n const sessionID = req.body.sessionID;\n const bestTool = findBestTool(buildStep);\n const env = new ServerBuildEnv(SERVER_ROOT, sessionID, bestTool);\n const result = await env.compileAndLink(buildStep, updates);\n res.json(result);\n } catch (err) {\n return next(err);\n }\n});\n\n// Catch errors\napp.use((err: Error, req: Request, res: Response, next: Function) => {\n console.error(err.stack);\n res.status(500).send('Something broke!');\n});\n\n// Start the server\nconst port = 3009;\n\n/*{\n origin: [`http://localhost:${port}`, 'http://localhost:8000']\n}));*/\n\nconst SERVER_ROOT = process.env['8BITWS_SERVER_ROOT'] || path.resolve('./server-root');\nconst SESSION_ROOT = path.join(SERVER_ROOT, 'sessions');\nif (!fs.existsSync(SESSION_ROOT)) {\n fs.mkdirSync(SESSION_ROOT);\n}\nprocess.chdir(SESSION_ROOT);\n\napp.listen(port, () => {\n console.log(`Server is listening on port ${port}`);\n});\n", "\nimport fs from 'fs';\nimport path from 'path';\nimport { spawn } from 'child_process';\nimport { CodeListingMap, WorkerBuildStep, WorkerError, WorkerErrorResult, WorkerFileUpdate, WorkerResult, isOutputResult } from '../../common/workertypes';\nimport { getBasePlatform, getRootBasePlatform } from '../../common/util';\nimport { BuildStep, makeErrorMatcher } from '../workermain';\nimport { parseObjDumpListing, parseObjDumpSymbolTable } from './clang';\n\n\nconst LLVM_MOS_TOOL: ServerBuildTool = {\n name: 'llvm-mos',\n version: '',\n extensions: ['.c', '.cpp', '.s'],\n archs: ['6502'],\n platforms: ['atari8', 'c64', 'nes', 'pce', 'vcs'],\n platform_configs: {\n default: {\n binpath: 'llvm-mos/bin',\n command: 'mos-clang',\n args: ['-Os', '-g', '-o', '$OUTFILE', '$INFILES'],\n },\n debug: { // TODO\n binpath: 'llvm-mos/bin',\n command: 'llvm-objdump',\n args: ['-l', '-t', '$WORKDIR/a.out.elf', '>$WORKDIR/debug.out']\n },\n c64: {\n command: 'mos-c64-clang',\n libargs: ['-D', '__C64__']\n },\n atari8: {\n command: 'mos-atari8-clang',\n libargs: ['-D', '__ATARI__']\n },\n nes: {\n command: 'mos-nes-nrom-clang', // TODO\n libargs: ['-lneslib', '-lfamitone2']\n },\n pce: {\n command: 'mos-pce-clang', // TODO\n libargs: ['-D', '__PCE__']\n },\n }\n}\n\nexport function findBestTool(step: BuildStep) {\n if (!step?.tool) throw new Error('No tool specified');\n const [name, version] = step.tool.split('@');\n for (let tool of TOOLS) {\n if (tool.name === name && (!version || version === 'latest' || tool.version === version)) {\n return tool;\n }\n }\n throw new Error(`Tool not found: ${step.tool}`);\n}\n\nexport const TOOLS: ServerBuildTool[] = [\n Object.assign({}, LLVM_MOS_TOOL, { version: '0.13.2' }),\n];\n\ninterface ServerBuildTool {\n name: string;\n version: string;\n extensions: string[];\n archs: string[];\n platforms: string[];\n platform_configs: { [platform: string]: ServerBuildToolPlatformConfig };\n}\n\ninterface ServerBuildToolPlatformConfig {\n binpath?: string;\n command?: string;\n args?: string[];\n libargs?: string[];\n}\n\n\n\nexport class ServerBuildEnv {\n\n rootdir: string;\n sessionID: string;\n tool: ServerBuildTool;\n sessionDir: string;\n\n constructor(rootdir: string, sessionID: string, tool: ServerBuildTool) {\n this.rootdir = path.resolve(rootdir);\n this.sessionID = sessionID;\n this.tool = tool;\n // make sure sessionID is well-formed\n if (!sessionID.match(/^[a-zA-Z0-9_-]+$/)) {\n throw new Error(`Invalid sessionID: ${sessionID}`);\n }\n // create sessionID directory if it doesn't exist\n this.sessionDir = path.join(this.rootdir, 'sessions', sessionID);\n if (!fs.existsSync(this.sessionDir)) {\n fs.mkdirSync(this.sessionDir);\n }\n }\n\n async addFileUpdate(file: WorkerFileUpdate) {\n // make sure file.path contains no path components\n if (file.path.match(/[\\\\\\/]/)) {\n throw new Error(`Invalid file path: ${file.path}`);\n }\n await fs.promises.writeFile(path.join(this.sessionDir, file.path), file.data);\n }\n\n async build(step: WorkerBuildStep, platform?: string): Promise<WorkerResult> {\n // build config\n let platformID = platform || getRootBasePlatform(step.platform);\n let config = this.tool.platform_configs[platformID];\n if (!config) {\n throw new Error(`No config for platform ${platformID}`);\n }\n let defaultConfig = this.tool.platform_configs.default;\n if (!defaultConfig) {\n throw new Error(`No default config for tool ${this.tool.name}`);\n }\n config = Object.assign({}, defaultConfig, config); // combine configs\n // copy args\n let args = config.args.slice(0); //copy array\n let command = config.command;\n // replace $OUTFILE\n let outfile = path.join(this.sessionDir, 'a.out'); // TODO? a.out\n for (let i = 0; i < args.length; i++) {\n args[i] = args[i].replace(/\\$OUTFILE/g, outfile);\n args[i] = args[i].replace(/\\$WORKDIR/g, this.sessionDir);\n }\n // replace $INFILES with the list of input files\n // TODO\n let infiles = [];\n for (let i = 0; i < step.files.length; i++) {\n let f = step.files[i];\n for (let ext of this.tool.extensions) {\n if (f.endsWith(ext)) {\n infiles.push(path.join(this.sessionDir, f));\n break;\n }\n }\n }\n for (let i = 0; i < args.length; i++) {\n if (args[i] === '$INFILES') {\n args = args.slice(0, i).concat(infiles).concat(args.slice(i + 1));\n break;\n }\n }\n if (config.libargs) {\n args = args.concat(config.libargs);\n }\n console.log(`Running: ${command} ${args.join(' ')}`);\n // spawn after setting PATH env var\n // TODO\n let childProcess = spawn(command, args, {\n shell: true,\n cwd: this.rootdir,\n env: { PATH: path.join(this.rootdir, config.binpath)\n } });\n let outputData = '';\n let errorData = '';\n // TODO?\n childProcess.stdout.on('data', (data) => {\n outputData += data.toString();\n });\n childProcess.stderr.on('data', (data) => {\n errorData += data.toString();\n });\n return new Promise((resolve, reject) => {\n childProcess.on('close', async (code) => {\n if (code === 0) {\n if (platform === 'debug') {\n resolve(this.processDebugInfo(step));\n } else {\n resolve(this.processOutput(step));\n }\n } else {\n let errorResult = await this.processErrors(step, errorData);\n if (errorResult.errors.length === 0) {\n errorResult.errors.push({ line: 0, msg: `Build failed.\\n\\n${errorData}` });\n }\n resolve(errorResult);\n }\n });\n });\n }\n\n async processErrors(step: WorkerBuildStep, errorData: string): Promise<WorkerErrorResult> {\n let errors = [];\n // split errorData into lines\n let errorMatcher = makeErrorMatcher(errors, /([^:/]+):(\\d+):(\\d+):\\s*(.+)/, 2, 4, step.path, 1);\n for (let line of errorData.split('\\n')) {\n errorMatcher(line);\n }\n return { errors };\n }\n\n async processOutput(step: WorkerBuildStep): Promise<WorkerResult> {\n let outfile = path.join(this.sessionDir, 'a.out');\n let output = await fs.promises.readFile(outfile, { encoding: 'base64' });\n return { output };\n }\n\n async processDebugInfo(step: WorkerBuildStep): Promise<WorkerResult> {\n let dbgfile = path.join(this.sessionDir, 'debug.out');\n let dbglist = await fs.promises.readFile(dbgfile);\n let listings = parseObjDumpListing(dbglist.toString());\n let symbolmap = parseObjDumpSymbolTable(dbglist.toString());\n return { output: [], listings, symbolmap };\n }\n\n async compileAndLink(step: WorkerBuildStep, updates: WorkerFileUpdate[]): Promise<WorkerResult> {\n for (let file of updates) {\n await this.addFileUpdate(file);\n }\n try {\n let result = await this.build(step);\n // did we succeed?\n if (isOutputResult(result)) {\n // do the debug info\n const debugInfo = await this.build(step, 'debug');\n if (isOutputResult(debugInfo)) {\n result.listings = debugInfo.listings;\n result.symbolmap = debugInfo.symbolmap;\n }\n }\n return result;\n } catch (err) {\n return { errors: [{line:0, msg: err.toString()}] };\n }\n }\n}\n\n", "\nexport type FileData = string | Uint8Array;\n\nexport interface SourceLocation {\n line: number;\n label?: string;\n path?: string; // TODO: make mandatory?\n start?: number;\n end?: number;\n segment?:string;\n func?:string;\n}\n\n// actually it's a kind of SourceSnippet .. can have multiple per line\nexport interface SourceLine extends SourceLocation {\n offset:number;\n insns?:string;\n iscode?:boolean;\n cycles?:number;\n}\n\n// objects that have source code position info\nexport interface SourceLocated {\n $loc?: SourceLocation;\n}\n// statements also have the 'offset' (pc) field from SourceLine\nexport interface SourceLineLocated {\n $loc?: SourceLine;\n}\n\nexport class SourceFile {\n lines: SourceLine[];\n text: string;\n offset2loc: Map<number,SourceLine>; //{[offset:number]:number};\n line2offset: Map<number,number>; //{[line:number]:number};\n \n constructor(lines:SourceLine[], text:string) {\n lines = lines || [];\n this.lines = lines;\n this.text = text;\n this.offset2loc = new Map();\n this.line2offset = new Map();\n for (var info of lines) {\n if (info.offset >= 0) {\n // first line wins (is assigned to offset)\n // TODO: handle macros/includes w/ multiple offsets per line\n if (!this.offset2loc[info.offset])\n this.offset2loc[info.offset] = info;\n if (!this.line2offset[info.line])\n this.line2offset[info.line] = info.offset;\n }\n }\n }\n // TODO: smarter about looking for source lines between two addresses\n findLineForOffset(PC:number, lookbehind:number) : SourceLine {\n if (this.offset2loc) {\n for (var i=0; i<=lookbehind; i++) {\n var loc = this.offset2loc[PC];\n if (loc) {\n return loc;\n }\n PC--;\n }\n }\n return null;\n }\n lineCount():number { return this.lines.length; }\n}\n\nexport interface Dependency {\n path:string\n filename:string\n link:boolean\n data:FileData // TODO: or binary?\n}\n\nexport interface WorkerFileUpdate {\n path:string\n data:FileData\n};\nexport interface WorkerBuildStep {\n path?:string\n files?:string[]\n platform:string\n tool:string\n mainfile?:boolean\n};\nexport interface WorkerItemUpdate {\n key:string\n value:object\n};\n\n// TODO: split into different msg types\nexport interface WorkerMessage {\n preload?:string\n platform?:string\n tool?:string\n updates:WorkerFileUpdate[]\n buildsteps:WorkerBuildStep[]\n reset?:boolean\n code?:string\n setitems?:WorkerItemUpdate[]\n}\n\nexport interface WorkerError extends SourceLocation {\n msg:string,\n}\n\nexport interface CodeListing {\n lines:SourceLine[]\n asmlines?:SourceLine[]\n text?:string\n sourcefile?:SourceFile // not returned by worker\n assemblyfile?:SourceFile // not returned by worker\n}\n\nexport type CodeListingMap = {[path:string]:CodeListing};\n\n// TODO\nexport type VerilogOutput =\n {program_rom_variable:string, program_rom:Uint8Array, code:string, name:string, ports:any[], signals:any[]};\n\nexport type Segment = {name:string, start:number, size:number, last?:number, type?:string};\n\nexport type WorkerResult = WorkerErrorResult | WorkerOutputResult<any> | WorkerUnchangedResult;\n\nexport interface WorkerUnchangedResult {\n unchanged: true;\n}\n\nexport interface WorkerErrorResult {\n errors: WorkerError[]\n listings?: CodeListingMap\n}\n\nexport interface WorkerOutputResult<T> {\n output: T\n listings?: CodeListingMap\n symbolmap?: {[sym:string]:number}\n params?: {}\n segments?: Segment[]\n debuginfo?: {} // optional info\n}\n\nexport function isUnchanged(result: WorkerResult) : result is WorkerUnchangedResult {\n return ('unchanged' in result);\n}\n\nexport function isErrorResult(result: WorkerResult) : result is WorkerErrorResult {\n return ('errors' in result);\n}\n\nexport function isOutputResult(result: WorkerResult) : result is WorkerOutputResult<any> {\n return ('output' in result);\n}\n\nexport interface WorkingStore {\n getFileData(path:string) : FileData;\n}\n", "\nexport function lpad(s:string, n:number):string {\n s += ''; // convert to string\n while (s.length<n) s=\" \"+s;\n return s;\n}\n\nexport function rpad(s:string, n:number):string {\n s += ''; // convert to string\n while (s.length<n) s+=\" \";\n return s;\n}\n\nexport function byte2signed(b:number):number {\n b &= 0xff;\n return (b < 0x80) ? b : -(256-b);\n}\n\nexport function getFilenameForPath(s:string):string {\n var toks = s.split('/');\n return toks[toks.length-1];\n}\n\nexport function getFolderForPath(s:string):string {\n return s.substring(0, s.lastIndexOf('/'));\n}\n\nexport function getFilenamePrefix(s:string):string {\n var pos = s.lastIndexOf('.');\n return (pos > 0) ? s.substr(0, pos) : s;\n}\n\nexport function hex(v:number, nd?:number) {\n if (!nd) nd = 2;\n if (nd == 8) {\n return hex((v>>16)&0xffff,4) + hex(v&0xffff,4);\n } else {\n return toradix(v,nd,16);\n }\n}\n\nexport function tobin(v:number, nd?:number) {\n if (!nd) nd = 8;\n return toradix(v,nd,2);\n}\n\nexport function toradix(v:number, nd:number, radix:number) {\n try {\n var s = v.toString(radix).toUpperCase();\n while (s.length < nd)\n s = \"0\" + s;\n return s;\n } catch (e) {\n return v+\"\";\n }\n}\n\nexport function arrayCompare(a:ArrayLike<any>, b:ArrayLike<any>):boolean {\n if (a == null && b == null) return true;\n if (a == null) return false;\n if (b == null) return false;\n if (a.length != b.length) return false;\n for (var i=0; i<a.length; i++)\n if (a[i] != b[i])\n return false;\n return true;\n}\n\nexport function invertMap(m:{}):{} {\n var r = {};\n if (m) {\n for (var k in m) r[m[k]] = k;\n }\n return r;\n}\n\nexport function highlightDifferences(s1:string, s2:string):string {\n var split1 = s1.split(/(\\S+\\s+)/).filter(function(n) {return n});\n var split2 = s2.split(/(\\S+\\s+)/).filter(function(n) {return n});\n var i = 0;\n var j = 0;\n var result = \"\";\n while (i < split1.length && j < split2.length) {\n var w1 = split1[i];\n var w2 = split2[j];\n if (w2 && w2.indexOf(\"\\n\") >= 0) {\n while (i < s1.length && split1[i].indexOf(\"\\n\") < 0)\n i++;\n }\n if (w1 != w2) {\n w2 = '<span class=\"hilite\">' + w2 + '</span>';\n }\n result += w2;\n i++;\n j++;\n }\n while (j < split2.length) {\n result += split2[j++];\n }\n return result;\n}\n\nexport function lzgmini() {\n\n // Constants\n var LZG_HEADER_SIZE = 16;\n var LZG_METHOD_COPY = 0;\n var LZG_METHOD_LZG1 = 1;\n\n // LUT for decoding the copy length parameter\n var LZG_LENGTH_DECODE_LUT = [2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,\n 20,21,22,23,24,25,26,27,28,29,35,48,72,128];\n\n // Decoded data (produced by the decode() method)\n var outdata = null;\n\n // Calculate the checksum\n var calcChecksum = function(data) {\n var a = 1;\n var b = 0;\n var i = LZG_HEADER_SIZE;\n while (i < data.length)\n {\n a = (a + (data[i] & 0xff)) & 0xffff;\n b = (b + a) & 0xffff;\n i++;\n }\n return (b << 16) | a;\n }\n\n // Decode LZG coded data. The function returns the size of the decoded data.\n // Use any of the get* methods to retrieve the decoded data.\n this.decode = function(data:number[]):number[] {\n // Start by clearing the decompressed array in this object\n outdata = null;\n\n // Check magic ID\n if ((data.length < LZG_HEADER_SIZE) || (data[0] != 76) ||\n (data[1] != 90) || (data[2] != 71))\n {\n return null;\n }\n \n // what's the length?\n var uncomplen = data[6] | (data[5]<<8) | (data[4]<<16) | (data[3]<<24);\n\n // Calculate & check the checksum\n var checksum = ((data[11] & 0xff) << 24) |\n ((data[12] & 0xff) << 16) |\n ((data[13] & 0xff) << 8) |\n (data[14] & 0xff);\n if (calcChecksum(data) != checksum)\n {\n return null;\n }\n\n var dst = new Array();\n // Check which method to use\n var method = data[15] & 0xff;\n if (method == LZG_METHOD_LZG1)\n {\n // Get marker symbols\n var m1 = data[16] & 0xff;\n var m2 = data[17] & 0xff;\n var m3 = data[18] & 0xff;\n var m4 = data[19] & 0xff;\n\n // Main decompression loop\n var symbol, b, b2, b3, len, offset;\n var dstlen = 0;\n var k = LZG_HEADER_SIZE + 4;\n var datalen = data.length;\n while (k <= datalen)\n {\n symbol = data[k++] & 0xff;\n if ((symbol != m1) && (symbol != m2) && (symbol != m3) && (symbol != m4))\n {\n // Literal copy\n dst[dstlen++] = symbol;\n }\n else\n {\n b = data[k++] & 0xff;\n if (b != 0)\n {\n // Decode offset / length parameters\n if (symbol == m1)\n {\n // marker1 - \"Distant copy\"\n len = LZG_LENGTH_DECODE_LUT[b & 0x1f];\n b2 = data[k++] & 0xff;\n b3 = data[k++] & 0xff;\n offset = (((b & 0xe0) << 11) | (b2 << 8) | b3) + 2056;\n }\n else if (symbol == m2)\n {\n // marker2 - \"Medium copy\"\n len = LZG_LENGTH_DECODE_LUT[b & 0x1f];\n b2 = data[k++] & 0xff;\n offset = (((b & 0xe0) << 3) | b2) + 8;\n }\n else if (symbol == m3)\n {\n // marker3 - \"Short copy\"\n len = (b >> 6) + 3;\n offset = (b & 63) + 8;\n }\n else\n {\n // marker4 - \"Near copy (incl. RLE)\"\n len = LZG_LENGTH_DECODE_LUT[b & 0x1f];\n offset = (b >> 5) + 1;\n }\n\n // Copy the corresponding data from the history window\n for (i = 0; i < len; i++)\n {\n dst[dstlen] = dst[dstlen-offset];\n dstlen++;\n }\n }\n else\n {\n // Literal copy (single occurance of a marker symbol)\n dst[dstlen++] = symbol;\n }\n }\n }\n\n }\n else if (method == LZG_METHOD_COPY)\n {\n // Plain copy\n var dstlen = 0;\n var datalen = data.length;\n for (var i = LZG_HEADER_SIZE; i < datalen; i++)\n {\n dst[dstlen++] = data[i] & 0xff;\n }\n }\n else\n {\n // Unknown method\n return null;\n }\n // Store the decompressed data in the lzgmini object for later retrieval\n if (dst.length < uncomplen) return null; // data too short\n outdata = dst.slice(0, uncomplen);\n return outdata;\n }\n\n // Get the decoded byte array\n this.getByteArray = function():number[]\n {\n return outdata;\n }\n\n // Get the decoded string from a Latin 1 (or ASCII) encoded array\n this.getStringLatin1 = function():string {\n return byteArrayToString(outdata);\n }\n\n // Get the decoded string from an UTF-8 encoded array\n this.getStringUTF8 = function():string {\n return byteArrayToUTF8(outdata);\n }\n}\n\nexport function stringToByteArray(s:string) : Uint8Array {\n var a = new Uint8Array(s.length);\n for (var i=0; i<s.length; i++)\n a[i] = s.charCodeAt(i);\n return a;\n}\n\nexport function byteArrayToString(data : number[] | Uint8Array) : string {\n var str = \"\";\n if (data != null) {\n var charLUT = new Array();\n for (var i = 0; i < 256; ++i)\n charLUT[i] = String.fromCharCode(i);\n var len = data.length;\n for (var i = 0; i < len; i++)\n str += charLUT[data[i]];\n }\n return str;\n}\n\nexport function byteArrayToUTF8(data : number[] | Uint8Array) : string {\n var str = \"\";\n var charLUT = new Array();\n for (var i = 0; i < 128; ++i)\n charLUT[i] = String.fromCharCode(i);\n var c;\n var len = data.length;\n for (var i = 0; i < len;) {\n c = data[i++];\n if (c < 128) {\n str += charLUT[c];\n } else {\n if ((c >= 192) && (c < 224)) {\n c = ((c & 31) << 6) | (data[i++] & 63);\n } else {\n c = ((c & 15) << 12) | ((data[i] & 63) << 6) | (data[i+1] & 63);\n i += 2;\n if (c == 0xfeff) continue; // ignore BOM\n }\n str += String.fromCharCode(c);\n }\n }\n return str;\n}\n\nexport function removeBOM(s:string) {\n if (s.charCodeAt(0) === 0xFEFF) {\n s = s.substr(1);\n }\n return s;\n}\n\nexport function isProbablyBinary(path:string, data?:number[] | Uint8Array) : boolean {\n var score = 0;\n // check extensions\n if (path) {\n path = path.toUpperCase();\n const BINEXTS = ['.CHR','.BIN','.DAT','.PAL','.NAM','.RLE','.LZ4','.NSF'];\n for (var ext of BINEXTS) {\n if (path.endsWith(ext)) score++;\n }\n }\n // decode as UTF-8\n for (var i = 0; i < (data?data.length:0);) {\n let c = data[i++];\n if ((c & 0x80) == 0) {\n // more likely binary if we see a NUL or obscure control character\n if (c < 9 || (c >= 14 && c < 26) || c == 0x7f) {\n score++;\n break;\n }\n } else {\n // look for invalid unicode sequences\n var nextra = 0;\n if ((c & 0xe0) == 0xc0) nextra = 1;\n else if ((c & 0xf0) == 0xe0) nextra = 2;\n else if ((c & 0xf8) == 0xf0) nextra = 3;\n else if (c < 0xa0) score++;\n else if (c == 0xff) score++;\n while (nextra--) {\n if (i >= data.length || (data[i++] & 0xc0) != 0x80) {\n score++;\n break;\n }\n }\n }\n }\n return score > 0;\n}\n\n// need to load liblzg.js first\nexport function compressLZG(em_module, inBuffer:number[], levelArg?:boolean) : Uint8Array {\n var level = levelArg || 9;\n var inLen = inBuffer.length;\n var inPtr = em_module._malloc(inLen + 1);\n for (var i = 0; i < inLen; i++) {\n em_module.setValue(inPtr + i, inBuffer[i], 'i8');\n }\n var maxEncSize = em_module._LZG_MaxEncodedSize(inLen);\n var outPtr = em_module._malloc(maxEncSize + 1);\n var compLen = em_module.ccall('compress_lzg', 'number', ['number', 'number', 'number', 'number', 'number'], [level, inPtr, inLen, maxEncSize, outPtr]);\n em_module._free(inPtr);\n var outBuffer = new Uint8Array(compLen);\n for (var i = 0; i < compLen; i++) {\n outBuffer[i] = em_module.getValue(outPtr + i, 'i8');\n }\n em_module._free(outPtr);\n return outBuffer;\n}\n\n// only does primitives, 1D arrays and no recursion\nexport function safe_extend(deep, dest, src) {\n // TODO: deep ignored\n for (var key in src) {\n var val = src[key];\n var type = typeof(val);\n if (val === null || type == 'undefined') {\n dest[key] = val;\n } else if (type == 'function') {\n // ignore function\n } else if (type == 'object') {\n if (val['slice']) { // array?\n dest[key] = val.slice();\n } else {\n // ignore object\n }\n } else {\n dest[key] = val;\n }\n }\n return dest;\n}\n\nexport function printFlags(val:number, names:string[], r2l:boolean) {\n var s = '';\n for (var i=0; i<names.length; i++) {\n if (names[i]) {\n var bit = 1 << (r2l ? (names.length-1-i) : i);\n if (i > 0) s += \" \";\n s += (val & bit) ? names[i] : \"-\";\n }\n }\n return s;\n}\n\nexport function rgb2bgr(x) {\n return ((x&0xff)<<16) | ((x>>16)&0xff) | (x&0x00ff00);\n}\n\nexport function RGBA(r:number,g:number,b:number) {\n return (r&0xff) | ((g&0xff)<<8) | ((b&0xff)<<16) | 0xff000000;\n}\n\nexport function clamp(minv:number, maxv:number, v:number) {\n return (v < minv) ? minv : (v > maxv) ? maxv : v;\n}\n\nexport function safeident(s : string) : string {\n // if starts with non-alpha character, prefix with '_'\n if (s.length == 0) return '';\n if (!s.match(/^[a-zA-Z_]/)) s = '_' + s;\n return s.replace(/\\W+/g, \"_\");\n}\n\nexport function rle_unpack(src : Uint8Array) : Uint8Array {\n var i = 0;\n var tag = src[i++];\n var dest = [];\n var data = tag;\n while (i < src.length) {\n var ch = src[i++];\n if (ch == tag) {\n var count = src[i++];\n for (var j=0; j<count; j++)\n dest.push(data);\n if (count == 0)\n break;\n } else {\n data = ch;\n dest.push(data);\n }\n }\n return new Uint8Array(dest);\n}\n\n// firefox doesn't do GET with binary files\n// TODO: replace with fetch()?\nexport function getWithBinary(url:string, success:(text:string|Uint8Array)=>void, datatype:'text'|'arraybuffer') {\n var oReq = new XMLHttpRequest();\n oReq.open(\"GET\", url, true);\n oReq.responseType = datatype;\n oReq.onload = function (oEvent) {\n if (oReq.status == 200) {\n var data = oReq.response;\n if (data instanceof ArrayBuffer) {\n data = new Uint8Array(data);\n }\n success(data);\n } else if (oReq.status == 404) {\n success(null);\n } else {\n throw Error(\"Error \" + oReq.status + \" loading \" + url);\n }\n }\n oReq.onerror = function (oEvent) {\n success(null);\n }\n oReq.ontimeout = function (oEvent) {\n throw Error(\"Timeout loading \" + url);\n }\n oReq.send(null);\n}\n\n// get platform ID without . emulator\nexport function getBasePlatform(platform : string) : string {\n return platform.split('.')[0];\n}\n\n// get platform ID without - specialization\nfunction getRootPlatform(platform : string) : string {\n return platform.split('-')[0];\n}\n\n// get platform ID without emulator or specialization\nexport function getRootBasePlatform(platform : string) : string {\n return getRootPlatform(getBasePlatform(platform));\n}\n\nexport function isArray(obj: any) : obj is ArrayLike<any> {\n return obj != null && (Array.isArray(obj) || isTypedArray(obj));\n}\n\nexport function isTypedArray(obj: any) : obj is ArrayLike<number> {\n return obj != null && obj['BYTES_PER_ELEMENT'];\n}\n\nexport function convertDataToUint8Array(data: string|Uint8Array) : Uint8Array {\n return (typeof data === 'string') ? stringToByteArray(data) : data;\n}\n\nexport function convertDataToString(data: string|Uint8Array) : string {\n return (data instanceof Uint8Array) ? byteArrayToUTF8(data) : data;\n}\n\nexport function byteToASCII(b: number) : string {\n if (b < 32)\n return String.fromCharCode(b + 0x2400);\n else\n return String.fromCharCode(b);\n}\n\nexport function loadScript(scriptfn:string) : Promise<Event> {\n return new Promise( (resolve, reject) => {\n var script = document.createElement('script');\n script.onload = resolve;\n script.onerror = reject;\n script.src = scriptfn;\n document.getElementsByTagName('head')[0].appendChild(script);\n });\n}\n\nexport function decodeQueryString(qs : string) : {} {\n if (qs.startsWith('?')) qs = qs.substr(1);\n var a = qs.split('&');\n if (!a || a.length == 0)\n return {};\n var b = {};\n for (var i = 0; i < a.length; ++i) {\n var p = a[i].split('=', 2);\n if (p.length == 1)\n b[p[0]] = \"\";\n else\n b[p[0]] = decodeURIComponent(p[1].replace(/\\+/g, \" \"));\n }\n return b;\n}\n\nexport function parseBool(s : string) : boolean {\n if (!s) return false;\n if (s == 'false' || s == '0') return false;\n if (s == 'true' || s == '1') return true;\n return s ? true : false;\n}\n\n///\n\nexport class XMLParseError extends Error {\n}\n\nexport interface XMLNode {\n type: string;\n text: string | null;\n children: XMLNode[];\n attrs: { [id: string]: string };\n obj: any;\n}\n\nexport type XMLVisitFunction = (node: XMLNode) => any;\n\nfunction escapeXML(s: string): string {\n if (s.indexOf('&') >= 0) {\n return s.replace(/&apos;/g, \"'\")\n .replace(/&quot;/g, '\"')\n .replace(/&gt;/g, '>')\n .replace(/&lt;/g, '<')\n .replace(/&amp;/g, '&');\n } else {\n return s;\n }\n}\n\nexport function parseXMLPoorly(s: string, openfn?: XMLVisitFunction, closefn?: XMLVisitFunction): XMLNode {\n const tag_re = /[<]([/]?)([?a-z_-]+)([^>]*)[>]+|(\\s*[^<]+)/gi;\n const attr_re = /\\s*(\\w+)=\"(.*?)\"\\s*/gi;\n var fm: RegExpMatchArray;\n var stack: XMLNode[] = [];\n var top: XMLNode;\n\n function closetop() {\n top = stack.pop();\n if (top == null || top.type != ident) throw new XMLParseError(\"mismatch close tag: \" + ident);\n if (closefn) {\n top.obj = closefn(top);\n }\n if (stack.length == 0) throw new XMLParseError(\"close tag without open: \" + ident);\n stack[stack.length - 1].children.push(top);\n }\n function parseattrs(as: string): { [id: string]: string } {\n var am;\n var attrs = {};\n if (as != null) {\n while (am = attr_re.exec(as)) {\n attrs[am[1]] = escapeXML(am[2]);\n }\n }\n return attrs;\n }\n while (fm = tag_re.exec(s)) {\n var [_m0, close, ident, attrs, content] = fm;\n //console.log(stack.length, close, ident, attrs, content);\n if (close) {\n closetop();\n } else if (ident) {\n var node = { type: ident, text: null, children: [], attrs: parseattrs(attrs), obj: null };\n stack.push(node);\n if (attrs) {\n parseattrs(attrs);\n }\n if (openfn) {\n node.obj = openfn(node);\n }\n if (attrs && attrs.endsWith('/')) closetop();\n } else if (content != null) {\n if (stack.length == 0) throw new XMLParseError(\"content without element\");\n var txt = escapeXML(content as string).trim();\n if (txt.length) stack[stack.length - 1].text = txt;\n }\n }\n if (stack.length != 1) throw new XMLParseError(\"tag not closed\");\n if (stack[0].type != '?xml') throw new XMLParseError(\"?xml needs to be first element\");\n return top;\n}\n\nexport function escapeHTML(s: string): string {\n return s.replace(/[&]/g, '&amp;').replace(/[<]/g, '&lt;').replace(/[>]/g, '&gt;');\n}\n\n// lame factorization for displaying bitmaps\n// returns a > b such that a * b == x (or higher), a >= mina, b >= minb\nexport function findIntegerFactors(x: number, mina: number, minb: number, aspect: number) : {a: number, b: number} {\n let a = x;\n let b = 1;\n if (minb > 1 && minb < a) {\n a = Math.ceil(x / minb);\n b = minb;\n }\n while (a > b) {\n let a2 = a;\n let b2 = b;\n if ((a & 1) == 0) {\n b2 = b * 2;\n a2 = a / 2;\n }\n if ((a % 3) == 0) {\n b2 = b * 3;\n a2 = a / 3;\n }\n if ((a % 5) == 0) {\n b2 = b * 5;\n a2 = a / 5;\n }\n if (a2 < mina) break;\n if (a2 < b2 * aspect) break;\n a = a2;\n b = b2;\n }\n return {a, b};\n}\n\nexport class FileDataCache {\n maxSize : number = 8000000;\n size : number;\n cache : Map<string, string|Uint8Array>;\n constructor() {\n this.reset();\n }\n get(key : string) : string|Uint8Array {\n return this.cache.get(key);\n }\n put(key : string, value : string|Uint8Array) {\n this.cache.set(key, value);\n this.size += value.length;\n if (this.size > this.maxSize) {\n console.log('cache reset', this);\n this.reset();\n }\n }\n reset() {\n this.cache = new Map();\n this.size = 0;\n }\n}\n\nexport function coerceToArray<T>(arrobj: any) : T[] {\n if (Array.isArray(arrobj)) return arrobj;\n else if (arrobj != null && typeof arrobj[Symbol.iterator] === 'function') return Array.from(arrobj);\n else if (typeof arrobj === 'object') return Array.from(Object.values(arrobj))\n else throw new Error(`Expected array or object, got \"${arrobj}\"`);\n}\n", "import { WorkerError, CodeListingMap, SourceLocation, SourceLine, SourceLocated, SourceLineLocated } from \"../workertypes\";\n\nexport interface BASICOptions {\n dialectName : string; // use this to select the dialect \n // SYNTAX AND PARSING\n asciiOnly : boolean; // reject non-ASCII chars?\n uppercaseOnly : boolean; // convert everything to uppercase?\n optionalLabels : boolean;\t\t\t// can omit line numbers and use labels?\n optionalWhitespace : boolean; // can \"crunch\" keywords? also, eat extra \":\" delims\n multipleStmtsPerLine : boolean; // multiple statements separated by \":\"\n varNaming : 'A'|'A1'|'A1$'|'AA'|'*'; // only allow A0-9 for numerics, single letter for arrays/strings\n squareBrackets : boolean; // \"[\" and \"]\" interchangable with \"(\" and \")\"?\n tickComments : boolean; // support 'comments?\n hexOctalConsts : boolean; // support &H and &O integer constants?\n optionalLet : boolean; // LET is optional\n chainAssignments : boolean; // support A = B = value (HP2000)\n validKeywords : string[]; // valid keywords (or null for accept all)\n validFunctions : string[]; // valid functions (or null for accept all)\n validOperators : string[]; // valid operators (or null for accept all)\n // VALUES AND OPERATORS\n defaultValues : boolean; // initialize unset variables to default value? (0 or \"\")\n stringConcat : boolean; // can concat strings with \"+\" operator?\n checkOverflow : boolean; // check for overflow of numerics?\n bitwiseLogic : boolean; // -1 = TRUE, 0 = FALSE, AND/OR/NOT done with bitwise ops\n maxStringLength : number; // maximum string length in chars\n maxDefArgs : number; // maximum # of arguments for user-defined functions\n // ARRAYS\n staticArrays : boolean; // can only DIM with constant value? (and never redim)\n sharedArrayNamespace : boolean; // arrays and variables have same namespace? (TODO)\n defaultArrayBase : number; // arrays start at this number (0 or 1)\n defaultArraySize : number; // arrays are allocated w/ this size (starting @ 0)\n maxDimensions : number; // max number of dimensions for arrays\n arraysContainChars : boolean; // HP BASIC array-slicing syntax\n // PRINTING\n printZoneLength : number; // print zone length\n numericPadding : boolean; // \" \" or \"-\" before and \" \" after numbers?\n // CONTROL FLOW\n compiledBlocks : boolean; // assume blocks are statically compiled, not interpreted\n testInitialFor : boolean; // can we skip a NEXT statement? (can't interleave tho)\n optionalNextVar : boolean; // can do NEXT without variable\n multipleNextVars : boolean; // NEXT J,I\n checkOnGotoIndex : boolean; // fatal error when ON..GOTO index out of bounds\n computedGoto : boolean; // non-const expr GOTO label (and GOTO..OF expression)\n restoreWithLabel : boolean; // RESTORE <label>\n endStmtRequired : boolean; // need END at end?\n // MISC\n multilineIfThen? : boolean; // multi-line IF .. ELSE .. END IF?\n commandsPerSec? : number; // how many commands per second?\n maxLinesPerFile? : number; // limit on # of lines\n maxArrayElements? : number; // max array elements (all dimensions)\n}\n\nexport class CompileError extends Error {\n $loc : SourceLocation;\n constructor(msg: string, loc: SourceLocation) {\n super(msg);\n Object.setPrototypeOf(this, CompileError.prototype);\n this.$loc = loc;\n }\n}\n\n// Lexer regular expression -- each (capture group) handles a different token type\n// FLOAT INT HEXOCTAL REMARK IDENT STRING RELOP EXP OPERATORS OTHER WS\nconst re_toks = /([0-9.]+[E][+-]?\\d+|\\d+[.][E0-9]*|[.][E0-9]+)|[0]*(\\d+)|&([OH][0-9A-F]+)|(['].*)|([A-Z_]\\w*[$]?)|(\".*?\")|([<>]?[=<>#])|(\\*\\*)|([-+*/^,;:()\\[\\]\\?\\\\])|(\\S+)|(\\s+)/gi;\n\nexport enum TokenType {\n EOL = 0,\n Float,\n Int,\n HexOctalInt,\n Remark,\n Ident,\n String,\n Relational,\n DoubleStar,\n Operator,\n CatchAll,\n Whitespace,\n _LAST,\n}\n\nexport type ExprTypes = BinOp | UnOp | IndOp | Literal;\nexport type Expr = ExprTypes; // & SourceLocated;\nexport type Opcode = string;\nexport type Value = number | string;\nexport type ValueType = 'number' | 'string' | 'label';\n\nexport interface ExprBase extends SourceLocated {\n valtype: ValueType;\n}\n\nexport interface Literal extends ExprBase {\n value: Value;\n}\n\nexport interface BinOp extends ExprBase {\n op: Opcode;\n left: Expr;\n right: Expr;\n}\n\nexport interface UnOp extends ExprBase {\n op: 'neg' | 'lnot' | 'bnot';\n expr: Expr;\n}\n\nexport interface IndOp extends ExprBase {\n name: string;\n args: Expr[];\n}\n\nexport interface Statement extends SourceLineLocated {\n command: string;\n}\n\nexport interface ScopeStartStatement extends Statement {\n endpc?: number;\n}\n\nexport interface ScopeEndStatement extends Statement {\n startpc?: number;\n}\n\nexport interface PRINT_Statement extends Statement {\n command: \"PRINT\";\n args: Expr[];\n}\n\nexport interface LET_Statement extends Statement {\n command: \"LET\";\n lexprs: IndOp[];\n right: Expr;\n}\n\nexport interface DIM_Statement extends Statement {\n command: \"DIM\";\n args: IndOp[];\n}\n\nexport interface GOTO_Statement extends Statement {\n command: \"GOTO\";\n label: Expr;\n}\n\nexport interface GOSUB_Statement extends Statement {\n command: \"GOSUB\";\n label: Expr;\n}\n\nexport interface RETURN_Statement extends Statement {\n command: \"RETURN\";\n}\n\nexport interface ONGO_Statement extends Statement {\n command: \"ONGOTO\" | \"ONGOSUB\";\n expr: Expr;\n labels: Expr[];\n}\n\nexport interface IF_Statement extends ScopeStartStatement {\n command: \"IF\";\n cond: Expr;\n}\n\nexport interface ELSE_Statement extends ScopeStartStatement {\n command: \"ELSE\";\n}\n\nexport interface FOR_Statement extends ScopeStartStatement {\n command: \"FOR\";\n lexpr: IndOp;\n initial: Expr;\n target: Expr;\n step?: Expr;\n}\n\nexport interface NEXT_Statement extends ScopeEndStatement {\n command: \"NEXT\";\n lexpr?: IndOp;\n}\n\nexport interface WHILE_Statement extends ScopeStartStatement {\n command: \"WHILE\";\n cond: Expr;\n}\n\nexport interface WEND_Statement extends ScopeEndStatement {\n command: \"WEND\";\n}\n\nexport interface END_Statement extends ScopeEndStatement {\n command: \"END\";\n}\n\nexport interface INPUT_Statement extends Statement {\n command: \"INPUT\";\n prompt: Expr;\n args: IndOp[];\n timeout?: Expr;\n elapsed?: IndOp;\n}\n\nexport interface ENTER_Statement extends INPUT_Statement {\n timeout: Expr;\n elapsed: IndOp;\n}\n\nexport interface DATA_Statement extends Statement {\n command: \"DATA\";\n datums: Literal[];\n}\n\nexport interface READ_Statement extends Statement {\n command: \"READ\";\n args: IndOp[];\n}\n\nexport interface RESTORE_Statement extends Statement {\n command: \"RESTORE\";\n label: Expr;\n}\n\nexport interface DEF_Statement extends Statement {\n command: \"DEF\";\n lexpr: IndOp;\n def: Expr;\n}\n\nexport interface SUB_Statement extends ScopeStartStatement {\n command: \"SUB\";\n lexpr: IndOp;\n}\n\nexport interface CALL_Statement {\n command: \"CALL\";\n call: IndOp;\n}\n\nexport interface OPTION_Statement extends Statement {\n command: \"OPTION\";\n optname: string;\n optargs: string[];\n}\n\nexport interface GET_Statement extends Statement { // applesoft only?\n command: \"GET\";\n lexpr: IndOp;\n}\n\nexport interface CHANGE_Statement extends Statement {\n command: \"CHANGE\";\n src: Expr;\n dest: IndOp;\n}\n\nexport interface CONVERT_Statement extends Statement {\n command: \"CONVERT\";\n src: Expr;\n dest: IndOp;\n}\n\nexport interface NoArgStatement extends Statement {\n command: string;\n}\n\nexport interface BASICProgram {\n opts: BASICOptions;\n stmts: Statement[];\n labels: { [label: string]: number }; // label -> PC\n}\n\nclass Token implements SourceLocated {\n str: string;\n type: TokenType;\n $loc: SourceLocation;\n}\n\nconst OPERATORS = {\n 'IMP': {f:'bimp',p:4},\n 'EQV': {f:'beqv',p:5},\n 'XOR': {f:'bxor',p:6},\n 'OR': {f:'bor',p:7}, // or \"lor\" for logical\n 'AND': {f:'band',p:8}, // or \"land\" for logical\n '||': {f:'lor',p:17}, // not used\n '&&': {f:'land',p:18}, // not used\n '=': {f:'eq',p:50},\n '==': {f:'eq',p:50},\n '<>': {f:'ne',p:50},\n '><': {f:'ne',p:50},\n '!=': {f:'ne',p:50},\n '#': {f:'ne',p:50},\n '<': {f:'lt',p:50},\n '>': {f:'gt',p:50},\n '<=': {f:'le',p:50},\n '>=': {f:'ge',p:50},\n 'MIN': {f:'min',p:75},\n 'MAX': {f:'max',p:75},\n '+': {f:'add',p:100},\n '-': {f:'sub',p:100},\n '%': {f:'mod',p:140},\n 'MOD': {f:'mod',p:140},\n '\\\\': {f:'idiv',p:150},\n '*': {f:'mul',p:200},\n '/': {f:'div',p:200},\n '^': {f:'pow',p:300},\n '**': {f:'pow',p:300},\n};\n\nfunction getOperator(op: string) {\n return OPERATORS[op];\n}\n\nfunction getPrecedence(tok: Token): number {\n switch (tok.type) {\n case TokenType.Operator:\n case TokenType.DoubleStar:\n case TokenType.Relational:\n case TokenType.Ident:\n let op = getOperator(tok.str);\n if (op) return op.p;\n }\n return -1;\n}\n\n// is token an end of statement marker? (\":\" or end of line)\nfunction isEOS(tok: Token) {\n return tok.type == TokenType.EOL || tok.type == TokenType.Remark\n || tok.str == ':' || tok.str == 'ELSE'; // TODO: only ELSE if ifElse==true\n}\n\nfunction stripQuotes(s: string) {\n // TODO: assert\n return s.substr(1, s.length-2);\n}\n\nfunction isLiteral(arg: Expr): arg is Literal {\n return (arg as any).value != null;\n}\nfunction isLookup(arg: Expr): arg is IndOp {\n return (arg as any).name != null;\n}\nfunction isBinOp(arg: Expr): arg is BinOp {\n return (arg as any).op != null && (arg as any).left != null && (arg as any).right != null;\n}\nfunction isUnOp(arg: Expr): arg is UnOp {\n return (arg as any).op != null && (arg as any).expr != null;\n}\n\nfunction mergeLocs(a: SourceLocation, b: SourceLocation) : SourceLocation {\n return {\n line:Math.min(a.line, b.line),\n start:Math.min(a.start, b.start),\n end:Math.max(a.end, b.end),\n label:a.label || b.label,\n path:a.path || b.path,\n }\n}\n\n///// BASIC PARSER\n\nexport class BASICParser {\n opts : BASICOptions = DIALECTS['DEFAULT'];\n optionCount : number; // how many OPTION stmts so far?\n maxlinelen : number = 255; // maximum line length (some like HP use 72 chars)\n stmts : Statement[];\n errors: WorkerError[];\n listings: CodeListingMap;\n labels: { [label: string]: number }; // label -> PC\n targets: { [targetlabel: string]: SourceLocation }; // targets of GOTOs etc\n vardefs: { [name: string]: IndOp }; // LET or DIM\n varrefs: { [name: string]: SourceLocation }; // variable references\n fnrefs: { [name: string]: string[] }; // DEF FN call graph\n scopestack: number[];\n elseifcount: number;\n\n path : string;\n lineno : number;\n tokens: Token[];\n eol: Token;\n curlabel: string;\n lasttoken: Token;\n\n constructor() {\n this.optionCount = 0;\n this.lineno = 0;\n this.curlabel = null;\n this.stmts = [];\n this.labels = {};\n this.targets = {};\n this.errors = [];\n this.listings = {};\n this.vardefs = {};\n this.varrefs = {};\n this.fnrefs = {};\n this.scopestack = [];\n this.elseifcount = 0;\n }\n addError(msg: string, loc?: SourceLocation) {\n var tok = this.lasttoken || this.peekToken();\n if (!loc) loc = tok.$loc;\n this.errors.push({path:loc.path, line:loc.line, label:this.curlabel, start:loc.start, end:loc.end, msg:msg});\n }\n compileError(msg: string, loc?: SourceLocation, loc2?: SourceLocation) {\n this.addError(msg, loc);\n //if (loc2 != null) this.addError(`...`, loc2);\n throw new CompileError(msg, loc);\n }\n dialectError(what: string, loc?: SourceLocation) {\n this.compileError(`${what} in this dialect of BASIC (${this.opts.dialectName}).`, loc);\n }\n dialectErrorNoSupport(what: string, loc?: SourceLocation) {\n this.compileError(`You can't use ${what} in this dialect of BASIC (${this.opts.dialectName}).`, loc); // TODO\n }\n consumeToken(): Token {\n var tok = this.lasttoken = (this.tokens.shift() || this.eol);\n return tok;\n }\n expectToken(str: string, msg?: string) : Token {\n var tok = this.consumeToken();\n var tokstr = tok.str;\n if (str != tokstr) {\n this.compileError(msg || `There should be a \"${str}\" here.`);\n }\n return tok;\n }\n expectTokens(strlist: string[], msg?: string) : Token {\n var tok = this.consumeToken();\n var tokstr = tok.str;\n if (strlist.indexOf(tokstr) < 0) {\n this.compileError(msg || `There should be a ${strlist.map((s) => `\"${s}\"`).join(' or ')} here.`);\n }\n return tok;\n }\n peekToken(lookahead?: number): Token {\n var tok = this.tokens[lookahead || 0];\n return tok ? tok : this.eol;\n }\n pushbackToken(tok: Token) {\n this.tokens.unshift(tok);\n }\n // this parses either a line number or \"label:\" -- or adds a default label to a line\n parseOptLabel() {\n let tok = this.consumeToken();\n switch (tok.type) {\n case TokenType.Ident:\n if (this.opts.optionalLabels || tok.str == 'OPTION') {\n // is it a \"label :\" and not a keyword like \"PRINT : \"\n if (this.peekToken().str == ':' && !this.supportsCommand(tok.str)) { \n this.consumeToken(); // eat the \":\"\n // fall through to the next case\n } else {\n this.pushbackToken(tok); // nope\n break;\n }\n } else\n this.dialectError(`Each line must begin with a line number`);\n case TokenType.Int:\n this.addLabel(tok.str);\n return;\n // label added, return from function... other cases add default label\n case TokenType.HexOctalInt:\n case TokenType.Float:\n this.compileError(`Line numbers must be positive integers.`);\n break;\n case TokenType.Operator:\n if (this.supportsCommand(tok.str) && this.validKeyword(tok.str)) {\n this.pushbackToken(tok);\n break; // \"?\" is allowed\n }\n default:\n if (this.opts.optionalLabels)\n this.compileError(`A line must start with a line number, command, or label.`);\n else\n this.compileError(`A line must start with a line number.`);\n case TokenType.Remark:\n break;\n }\n // add default label\n this.addLabel('#'+this.lineno);\n }\n getPC() : number {\n return this.stmts.length;\n }\n addStatement(stmt: Statement, cmdtok: Token, endtok?: Token) {\n // set location for statement, adding offset (PC) field\n if (endtok == null) endtok = this.peekToken();\n stmt.$loc = { path: cmdtok.$loc.path, line: cmdtok.$loc.line, start: cmdtok.$loc.start, end: endtok.$loc.start,\n label: this.curlabel,\n offset: this.stmts.length };\n // check IF/THEN WHILE/WEND FOR/NEXT etc\n this.modifyScope(stmt);\n // add to list\n this.stmts.push(stmt);\n }\n addLabel(str: string, offset?: number) {\n if (this.labels[str] != null) this.compileError(`There's a duplicated label named \"${str}\".`);\n this.labels[str] = this.getPC() + (offset || 0);\n this.curlabel = str;\n this.tokens.forEach((tok) => tok.$loc.label = str);\n }\n parseFile(file: string, path: string) : BASICProgram {\n this.path = path;\n var txtlines = file.split(/\\n|\\r\\n?/);\n txtlines.forEach((line) => this.parseLine(line));\n var program = { opts: this.opts, stmts: this.stmts, labels: this.labels };\n this.checkAll(program);\n this.listings[path] = this.generateListing(file, program);\n return program;\n }\n parseLine(line: string) : void {\n try {\n this.tokenize(line);\n this.parse();\n } catch (e) {\n if (!(e instanceof CompileError)) throw e; // ignore compile errors since errors[] list captures them\n }\n }\n _tokenize(line: string) : void {\n // split identifier regex (if token-crunching enabled)\n let splitre = this.opts.optionalWhitespace && new RegExp('('+this.opts.validKeywords.map(s => `${s}`).join('|')+')');\n // iterate over each token via re_toks regex\n var lastTokType = TokenType.CatchAll;\n var m : RegExpMatchArray;\n while (m = re_toks.exec(line)) {\n for (var i = 1; i <= lastTokType; i++) {\n let s : string = m[i];\n if (s != null) {\n let loc = { path: this.path, line: this.lineno, start: m.index, end: m.index+s.length };\n // maybe we don't support unicode in 1975?\n if (this.opts.asciiOnly && !/^[\\x00-\\x7F]*$/.test(s))\n this.dialectErrorNoSupport(`non-ASCII characters`);\n // uppercase all identifiers, and maybe more\n if (i == TokenType.Ident || i == TokenType.HexOctalInt || this.opts.uppercaseOnly) {\n s = s.toUpperCase();\n // DATA statement captures whitespace too\n if (s == 'DATA') lastTokType = TokenType.Whitespace;\n // certain keywords shouldn't split for rest of line\n if (s == 'DATA') splitre = null;\n if (s == 'OPTION') splitre = null;\n // REM means ignore rest of statement\n if (lastTokType == TokenType.CatchAll && s.startsWith('REM')) {\n s = 'REM';\n lastTokType = TokenType.EOL;\n }\n }\n // convert brackets\n if (s == '[' || s == ']') {\n if (!this.opts.squareBrackets) this.dialectErrorNoSupport(`square brackets`);\n if (s == '[') s = '(';\n if (s == ']') s = ')';\n }\n // un-crunch tokens?\n if (splitre && i == TokenType.Ident) {\n var splittoks = s.split(splitre).filter((s) => s != ''); // only non-empties\n if (splittoks.length > 1) {\n splittoks.forEach((ss) => {\n // check to see if leftover might be integer, or identifier\n if (/^[0-9]+$/.test(ss)) i = TokenType.Int;\n else if (/^[A-Z_]\\w*[$]?$/.test(ss)) i = TokenType.Ident;\n else this.compileError(`Try adding whitespace before \"${ss}\".`);\n this.tokens.push({str: ss, type: i, $loc:loc});\n });\n s = null;\n }\n }\n // add token to list\n if (s) this.tokens.push({str: s, type: i, $loc:loc});\n break;\n }\n }\n }\n }\n tokenize(line: string) : void {\n this.lineno++;\n this.tokens = []; // can't have errors until this is set\n this.eol = { type: TokenType.EOL, str: \"\", $loc: { path: this.path, line: this.lineno, start: line.length } };\n if (line.length > this.maxlinelen) this.compileError(`A line should be no more than ${this.maxlinelen} characters long.`);\n this._tokenize(line);\n }\n parse() : void {\n // not empty line?\n if (this.tokens.length) {\n this.parseOptLabel();\n if (this.tokens.length) {\n this.parseCompoundStatement();\n }\n var next = this.peekToken();\n if (!isEOS(next)) this.compileError(`Expected end of line or ':'`, next.$loc);\n this.curlabel = null;\n }\n }\n parseCompoundStatement() : void {\n if (this.opts.multipleStmtsPerLine) {\n this.parseList(this.parseStatement, ':');\n } else {\n this.parseList(this.parseStatement, '\\0');\n if (this.peekToken().str == ':') this.dialectErrorNoSupport(`multiple statements on a line`);\n }\n }\n validKeyword(keyword: string) : string {\n return (this.opts.validKeywords && this.opts.validKeywords.indexOf(keyword) < 0) ? null : keyword;\n }\n validFunction(funcname: string) : string {\n return (this.opts.validFunctions && this.opts.validFunctions.indexOf(funcname) < 0) ? null : funcname;\n }\n supportsCommand(cmd: string) : () => Statement {\n if (cmd == '?') return this.stmt__PRINT;\n else return this['stmt__' + cmd];\n }\n parseStatement(): Statement | null {\n // eat extra \":\" (should have separate property for this)\n if (this.opts.optionalWhitespace && this.peekToken().str == ':') return null;\n // get the command word\n var cmdtok = this.consumeToken();\n var cmd = cmdtok.str;\n var stmt : Statement;\n switch (cmdtok.type) {\n case TokenType.Remark:\n if (cmdtok.str.startsWith(\"'\") && !this.opts.tickComments)\n this.dialectErrorNoSupport(`tick comments`);\n return null;\n case TokenType.Operator:\n // \"?\" is alias for \"PRINT\" on some platforms\n if (cmd == this.validKeyword('?')) cmd = 'PRINT';\n case TokenType.Ident:\n // ignore remarks\n if (cmd == 'REM') return null;\n // look for \"GO TO\" and \"GO SUB\"\n if (cmd == 'GO' && this.peekToken().str == 'TO') {\n this.consumeToken();\n cmd = 'GOTO';\n } else if (cmd == 'GO' && this.peekToken().str == 'SUB') {\n this.consumeToken();\n cmd = 'GOSUB';\n }\n // lookup JS function for command\n var fn = this.supportsCommand(cmd);\n if (fn) {\n if (this.validKeyword(cmd) == null)\n this.dialectErrorNoSupport(`the ${cmd} statement`);\n stmt = fn.bind(this)();\n break;\n } else if (this.peekToken().str == '=' || this.peekToken().str == '(') {\n if (!this.opts.optionalLet)\n this.dialectError(`Assignments must have a preceding LET`);\n // 'A = expr' or 'A(X) = expr'\n this.pushbackToken(cmdtok);\n stmt = this.stmt__LET();\n break;\n } else {\n this.compileError(`I don't understand the command \"${cmd}\".`);\n }\n case TokenType.EOL:\n if (this.opts.optionalWhitespace) return null;\n default:\n this.compileError(`There should be a command here.`);\n return null;\n }\n // add statement to list\n if (stmt != null) this.addStatement(stmt, cmdtok);\n return stmt;\n }\n // check scope stuff (if compiledBlocks is true)\n modifyScope(stmt: Statement) {\n if (this.opts.compiledBlocks) {\n var cmd = stmt.command;\n if (cmd == 'FOR' || cmd == 'WHILE' || cmd == 'SUB') {\n this.scopestack.push(this.getPC()); // has to be before adding statment to list\n } else if (cmd == 'NEXT') {\n this.popScope(stmt as NEXT_Statement, 'FOR');\n } else if (cmd == 'WEND') {\n this.popScope(stmt as WEND_Statement, 'WHILE');\n }\n }\n }\n popScope(close: WEND_Statement|NEXT_Statement|END_Statement, open: string) {\n var popidx = this.scopestack.pop();\n var popstmt : ScopeStartStatement = popidx != null ? this.stmts[popidx] : null;\n if (popstmt == null)\n this.compileError(`There's a ${close.command} without a matching ${open}.`, close.$loc);\n else if (popstmt.command != open)\n this.compileError(`There's a ${close.command} paired with ${popstmt.command}, but it should be paired with ${open}.`, close.$loc, popstmt.$loc);\n else if (close.command == 'NEXT' && !this.opts.optionalNextVar \n && close.lexpr.name != (popstmt as FOR_Statement).lexpr.name)\n this.compileError(`This NEXT statement is matched with the wrong FOR variable (${close.lexpr.name}).`, close.$loc, popstmt.$loc);\n // set start + end locations\n close.startpc = popidx;\n popstmt.endpc = this.getPC(); // has to be before adding statment to list\n }\n popIfThenScope(nextpc?: number) {\n var popidx = this.scopestack.pop();\n var popstmt : ScopeStartStatement = popidx != null ? this.stmts[popidx] : null;\n if (popstmt == null)\n this.compileError(`There's an END IF without a matching IF or ELSE.`);\n if (popstmt.command == 'ELSE') {\n popstmt.endpc = this.getPC();\n this.popIfThenScope(popidx + 1); // IF goes to ELSE+1\n } else if (popstmt.command == 'IF') {\n popstmt.endpc = nextpc != null ? nextpc : this.getPC();\n } else {\n this.compileError(`There's an END IF paired with a ${popstmt.command}, not IF or ELSE.`, this.lasttoken.$loc, popstmt.$loc);\n }\n }\n parseVarSubscriptOrFunc(): IndOp {\n var tok = this.consumeToken();\n switch (tok.type) {\n case TokenType.Ident:\n let args = null;\n if (this.peekToken().str == '(') {\n this.expectToken('(');\n args = this.parseExprList();\n this.expectToken(')', `There should be another expression or a \")\" here.`);\n }\n var loc = mergeLocs(tok.$loc, this.lasttoken.$loc);\n var valtype = this.exprTypeForSubscript(tok.str, args, loc);\n return { valtype: valtype, name: tok.str, args: args, $loc:loc };\n default:\n this.compileError(`There should be a variable name here.`);\n break;\n }\n }\n parseLexpr(): IndOp {\n var lexpr = this.parseVarSubscriptOrFunc();\n this.vardefs[lexpr.name] = lexpr;\n this.validateVarName(lexpr);\n return lexpr;\n }\n parseForNextLexpr() : IndOp {\n var lexpr = this.parseLexpr();\n if (lexpr.args || lexpr.name.endsWith('$'))\n this.compileError(`A FOR ... NEXT loop can only use numeric variables.`, lexpr.$loc);\n return lexpr;\n }\n parseList<T>(parseFunc:()=>T, delim:string): T[] {\n var sep;\n var list = [];\n do {\n var el = parseFunc.bind(this)(); // call parse function\n if (el != null) list.push(el); // add parsed element to list\n sep = this.consumeToken(); // consume seperator token\n } while (sep.str == delim);\n this.pushbackToken(sep);\n return list;\n }\n parseLexprList(): IndOp[] {\n return this.parseList(this.parseLexpr, ',');\n }\n parseExprList(): Expr[] {\n return this.parseList(this.parseExpr, ',');\n }\n parseLabelList(): Expr[] {\n return this.parseList(this.parseLabel, ',');\n }\n parseLabel() : Expr {\n // parse full expr?\n if (this.opts.computedGoto) {\n // parse expression, but still add to list of label targets if constant\n var expr = this.parseExpr();\n if (isLiteral(expr)) this.targets[expr.value] = this.lasttoken.$loc;\n return expr;\n } else {\n // parse a single number or ident label\n var tok = this.consumeToken();\n switch (tok.type) {\n case TokenType.Ident:\n if (!this.opts.optionalLabels)\n this.dialectError(`All labels must be line numbers`)\n case TokenType.Int:\n var label = tok.str;\n this.targets[label] = tok.$loc;\n return {valtype:'label', value:label};\n default:\n var what = this.opts.optionalLabels ? \"label or line number\" : \"line number\";\n this.compileError(`There should be a ${what} here.`);\n }\n }\n }\n parseDatumList(): Literal[] {\n return this.parseList(this.parseDatum, ',');\n }\n parseDatum(): Literal {\n var tok = this.consumeToken();\n // get rid of leading whitespace\n while (tok.type == TokenType.Whitespace)\n tok = this.consumeToken();\n if (isEOS(tok)) this.compileError(`There should be a datum here.`);\n // parse constants\n if (tok.type <= TokenType.HexOctalInt) {\n return this.parseValue(tok);\n }\n if (tok.str == '-' && this.peekToken().type <= TokenType.HexOctalInt) {\n tok = this.consumeToken();\n return { valtype:'number', value: -this.parseValue(tok).value };\n }\n if (tok.str == '+' && this.peekToken().type <= TokenType.HexOctalInt) {\n tok = this.consumeToken();\n return this.parseValue(tok);\n }\n // concat all stuff including whitespace\n // TODO: should trim whitespace only if not quoted string\n var s = '';\n while (!isEOS(tok) && tok.str != ',') {\n s += this.parseValue(tok).value;\n tok = this.consumeToken();\n }\n this.pushbackToken(tok);\n return { valtype:'string', value: s }; // trim leading and trailing whitespace\n }\n parseValue(tok: Token): Literal {\n switch (tok.type) {\n case TokenType.HexOctalInt:\n if (!this.opts.hexOctalConsts)\n this.dialectErrorNoSupport(`hex/octal constants`);\n let base = tok.str.startsWith('H') ? 16 : 8;\n return { valtype:'number', value: parseInt(tok.str.substr(1), base) };\n case TokenType.Int:\n case TokenType.Float:\n return { valtype:'number', value: this.parseNumber(tok.str) };\n case TokenType.String:\n return { valtype:'string', value: stripQuotes(tok.str) };\n default:\n return { valtype:'string', value: tok.str }; // only used in DATA statement\n }\n }\n parsePrimary(): Expr {\n let tok = this.consumeToken();\n switch (tok.type) {\n case TokenType.HexOctalInt:\n case TokenType.Int:\n case TokenType.Float:\n case TokenType.String:\n return this.parseValue(tok);\n case TokenType.Ident:\n if (tok.str == 'NOT') {\n let expr = this.parsePrimary();\n return { valtype:'number', op: this.opts.bitwiseLogic ? 'bnot' : 'lnot', expr: expr };\n } else {\n this.pushbackToken(tok);\n return this.parseVarSubscriptOrFunc();\n }\n case TokenType.Operator:\n if (tok.str == '(') {\n let expr = this.parseExpr();\n this.expectToken(')', `There should be another expression or a \")\" here.`);\n return expr;\n } else if (tok.str == '-') {\n let expr = this.parsePrimary(); // TODO: -2^2=-4 and -2-2=-4\n return { valtype:'number', op: 'neg', expr: expr };\n } else if (tok.str == '+') {\n return this.parsePrimary(); // ignore unary +\n }\n default:\n this.compileError(`The expression is incomplete.`);\n return;\n }\n }\n parseNumber(str: string) : number {\n var n = parseFloat(str);\n if (isNaN(n))\n this.compileError(`The number ${str} is not a valid floating-point number.`);\n if (this.opts.checkOverflow && !isFinite(n))\n this.compileError(`The number ${str} is too big to fit into a floating-point value.`);\n return n;\n }\n parseExpr1(left: Expr, minPred: number): Expr {\n let look = this.peekToken();\n while (getPrecedence(look) >= minPred) {\n let op = this.consumeToken();\n if (this.opts.validOperators && this.opts.validOperators.indexOf(op.str) < 0)\n this.dialectErrorNoSupport(`the \"${op.str}\" operator`);\n let right: Expr = this.parsePrimary();\n look = this.peekToken();\n while (getPrecedence(look) > getPrecedence(op)) {\n right = this.parseExpr1(right, getPrecedence(look));\n look = this.peekToken();\n }\n var opfn = getOperator(op.str).f;\n // use logical operators instead of bitwise?\n if (!this.opts.bitwiseLogic && op.str == 'AND') opfn = 'land';\n if (!this.opts.bitwiseLogic && op.str == 'OR') opfn = 'lor';\n var valtype = this.exprTypeForOp(opfn, left, right, op);\n left = { valtype:valtype, op:opfn, left: left, right: right };\n }\n return left;\n }\n parseExpr(): Expr {\n var startloc = this.peekToken().$loc;\n var expr = this.parseExpr1(this.parsePrimary(), 0);\n var endloc = this.lasttoken.$loc;\n expr.$loc = mergeLocs(startloc, endloc);\n return expr;\n }\n parseExprWithType(expecttype: ValueType): Expr {\n var expr = this.parseExpr();\n if (expr.valtype != expecttype)\n this.compileError(`There should be a ${expecttype} here, but this expression evaluates to a ${expr.valtype}.`, expr.$loc);\n return expr;\n }\n validateVarName(lexpr: IndOp) {\n switch (this.opts.varNaming) {\n case 'A': // TINY BASIC, no strings\n if (!/^[A-Z]$/i.test(lexpr.name))\n this.dialectErrorNoSupport(`variable names other than a single letter`);\n break;\n case 'A1':\n if (lexpr.args == null && !/^[A-Z][0-9]?[$]?$/i.test(lexpr.name))\n this.dialectErrorNoSupport(`variable names other than a letter followed by an optional digit`);\n if (lexpr.args != null && !/^[A-Z]?[$]?$/i.test(lexpr.name))\n this.dialectErrorNoSupport(`array names other than a single letter`);\n break;\n case 'A1$':\n if (!/^[A-Z][0-9]?[$]?$/i.test(lexpr.name))\n this.dialectErrorNoSupport(`variable names other than a letter followed by an optional digit`);\n break;\n case 'AA':\n if (lexpr.args == null && !/^[A-Z][A-Z0-9]?[$]?$/i.test(lexpr.name))\n this.dialectErrorNoSupport(`variable names other than a letter followed by an optional letter or digit`);\n break;\n case '*':\n break;\n }\n }\n visitExpr(expr: Expr, callback: (expr:Expr) => void) {\n if (isBinOp(expr)) {\n this.visitExpr(expr.left, callback);\n this.visitExpr(expr.right, callback);\n }\n if (isUnOp(expr)) {\n this.visitExpr(expr.expr, callback);\n }\n if (isLookup(expr) && expr.args != null) {\n for (var arg of expr.args)\n this.visitExpr(arg, callback);\n }\n callback(expr);\n }\n // type-checking\n exprTypeForOp(fnname: string, left: Expr, right: Expr, optok: Token) : ValueType {\n if (left.valtype == 'string' || right.valtype == 'string') {\n if (fnname == 'add') {\n if (this.opts.stringConcat) return 'string' // concat strings\n else this.dialectErrorNoSupport(`the \"+\" operator to concatenate strings`, optok.$loc);\n } else if (fnname.length != 2) // only relops are 2 chars long!\n this.compileError(`You can't do math on strings until they're converted to numbers.`, optok.$loc);\n }\n return 'number';\n }\n exprTypeForSubscript(fnname: string, args: Expr[], loc: SourceLocation) : ValueType {\n args = args || [];\n // first check the built-in functions\n var defs = BUILTIN_MAP[fnname];\n if (defs != null) {\n if (!this.validFunction(fnname)) this.dialectErrorNoSupport(`the ${fnname} function`, loc);\n for (var def of defs) {\n if (args.length == def.args.length)\n return def.result; // TODO: check arg types\n }\n // TODO: check func arg types\n this.compileError(`The ${fnname} function takes ${def.args.length} arguments, but ${args.length} are given.`, loc);\n }\n // no function found, assume it's an array ref\n // TODO: validateVarName() later?\n this.varrefs[fnname] = loc;\n return fnname.endsWith('$') ? 'string' : 'number';\n }\n\n //// STATEMENTS\n\n stmt__LET(): LET_Statement {\n var lexprs = [ this.parseLexpr() ];\n this.expectToken(\"=\");\n // look for A=B=expr (TODO: doesn't work on arrays)\n while (this.opts.chainAssignments && this.peekToken().type == TokenType.Ident && this.peekToken(1).str == '=') {\n lexprs.push(this.parseLexpr());\n this.expectToken(\"=\");\n }\n var right = this.parseExprWithType(lexprs[0].valtype);\n return { command: \"LET\", lexprs: lexprs, right: right };\n }\n stmt__PRINT(): PRINT_Statement {\n var sep, lastsep;\n var list = [];\n do {\n sep = this.peekToken();\n if (isEOS(sep)) {\n break;\n } else if (sep.str == ';') {\n this.consumeToken();\n lastsep = sep;\n } else if (sep.str == ',') {\n this.consumeToken();\n list.push({value:'\\t'});\n lastsep = sep;\n } else {\n list.push(this.parseExpr());\n lastsep = null;\n }\n } while (true);\n if (!(lastsep && (lastsep.str == ';' || sep.str != ','))) {\n list.push({value:'\\n'});\n }\n return { command: \"PRINT\", args: list };\n }\n stmt__GOTO(): GOTO_Statement | GOSUB_Statement | ONGO_Statement {\n return this.__GO(\"GOTO\");\n }\n stmt__GOSUB(): GOTO_Statement | GOSUB_Statement | ONGO_Statement {\n return this.__GO(\"GOSUB\");\n }\n __GO(cmd: \"GOTO\"|\"GOSUB\"): GOTO_Statement | GOSUB_Statement | ONGO_Statement {\n var expr = this.parseLabel();\n // GOTO (expr) OF (labels...)\n if (this.peekToken().str == this.validKeyword('OF')) {\n this.expectToken('OF');\n let newcmd : 'ONGOTO'|'ONGOSUB' = (cmd == 'GOTO') ? 'ONGOTO' : 'ONGOSUB';\n return { command: newcmd, expr: expr, labels: this.parseLabelList() };\n } else {\n // regular GOTO or GOSUB\n return { command: cmd, label: expr };\n }\n }\n stmt__IF(): void {\n var cmdtok = this.lasttoken;\n var cond = this.parseExprWithType(\"number\");\n var ifstmt : IF_Statement = { command: \"IF\", cond: cond };\n this.addStatement(ifstmt, cmdtok);\n // we accept GOTO or THEN if line number provided (DEC accepts GO TO)\n var thengoto = this.expectTokens(['THEN','GOTO','GO']);\n if (thengoto.str == 'GO') this.expectToken('TO');\n // multiline IF .. THEN? push it to scope stack\n if (this.opts.multilineIfThen && isEOS(this.peekToken())) {\n this.scopestack.push(this.getPC() - 1); // we already added stmt to list, so - 1\n } else {\n // parse line number or statement clause\n this.parseGotoOrStatements();\n // is the next statement an ELSE?\n // gotta parse it now because it's an end-of-statement token\n if (this.peekToken().str == 'ELSE') {\n this.expectToken('ELSE');\n ifstmt.endpc = this.getPC() + 1;\n this.stmt__ELSE();\n } else {\n ifstmt.endpc = this.getPC();\n }\n }\n }\n stmt__ELSE(): void {\n var elsestmt : ELSE_Statement = { command: \"ELSE\" };\n this.addStatement(elsestmt, this.lasttoken);\n // multiline ELSE? or ELSE IF?\n var nexttok = this.peekToken();\n if (this.opts.multilineIfThen && isEOS(nexttok)) {\n this.scopestack.push(this.getPC() - 1); // we already added stmt to list, so - 1\n } else if (this.opts.multilineIfThen && nexttok.str == 'IF') {\n this.scopestack.push(this.getPC() - 1); // we already added stmt to list, so - 1\n this.parseGotoOrStatements();\n this.elseifcount++;\n } else {\n // parse line number or statement clause\n this.parseGotoOrStatements();\n elsestmt.endpc = this.getPC();\n }\n }\n parseGotoOrStatements() {\n var lineno = this.peekToken();\n // assume GOTO if number given after THEN\n if (lineno.type == TokenType.Int) {\n this.parseLabel();\n var gotostmt : GOTO_Statement = { command:'GOTO', label: {valtype:'label', value:lineno.str} }\n this.addStatement(gotostmt, lineno);\n } else {\n // parse rest of IF clause\n this.parseCompoundStatement();\n }\n }\n stmt__FOR() : FOR_Statement {\n var lexpr = this.parseForNextLexpr();\n this.expectToken('=');\n var init = this.parseExprWithType(\"number\");\n this.expectToken('TO');\n var targ = this.parseExprWithType(\"number\");\n if (this.peekToken().str == 'STEP') {\n this.consumeToken();\n var step = this.parseExprWithType(\"number\");\n }\n return { command:'FOR', lexpr:lexpr, initial:init, target:targ, step:step };\n }\n stmt__NEXT() : NEXT_Statement {\n var lexpr = null;\n // NEXT var might be optional\n if (!this.opts.optionalNextVar || !isEOS(this.peekToken())) {\n lexpr = this.parseForNextLexpr();\n // convert ',' to ':' 'NEXT'\n if (this.opts.multipleNextVars && this.peekToken().str == ',') {\n this.consumeToken(); // consume ','\n this.tokens.unshift({type:TokenType.Ident, str:'NEXT', $loc:this.peekToken().$loc});\n this.tokens.unshift({type:TokenType.Operator, str:':', $loc:this.peekToken().$loc});\n }\n }\n return { command:'NEXT', lexpr:lexpr };\n }\n stmt__WHILE(): WHILE_Statement {\n var cond = this.parseExprWithType(\"number\");\n return { command:'WHILE', cond:cond };\n }\n stmt__WEND(): WEND_Statement {\n return { command:'WEND' };\n }\n stmt__DIM() : DIM_Statement {\n var lexprs = this.parseLexprList();\n lexprs.forEach((arr) => {\n if (arr.args == null || arr.args.length == 0) \n this.compileError(`An array defined by DIM must have at least one dimension.`)\n else if (arr.args.length > this.opts.maxDimensions) \n this.dialectErrorNoSupport(`arrays with more than ${this.opts.maxDimensions} dimensionals`);\n for (var arrdim of arr.args) {\n if (arrdim.valtype != 'number')\n this.compileError(`Array dimensions must be numeric.`, arrdim.$loc);\n if (isLiteral(arrdim) && typeof arrdim.value === 'number' && arrdim.value < this.opts.defaultArrayBase)\n this.compileError(`An array dimension cannot be less than ${this.opts.defaultArrayBase}.`, arrdim.$loc);\n }\n });\n return { command:'DIM', args:lexprs };\n }\n stmt__INPUT() : INPUT_Statement {\n var prompt = this.consumeToken();\n var promptstr;\n if (prompt.type == TokenType.String) {\n this.expectTokens([';', ',']);\n promptstr = stripQuotes(prompt.str);\n } else {\n this.pushbackToken(prompt);\n promptstr = \"\";\n }\n return { command:'INPUT', prompt:{ valtype:'string', value: promptstr }, args:this.parseLexprList() };\n }\n /* for HP BASIC only */\n stmt__ENTER() : INPUT_Statement {\n var timeout = this.parseExpr();\n this.expectToken(',');\n var elapsed = this.parseLexpr(); // TODO: this has to go somewheres\n this.expectToken(',');\n return { command:'INPUT', prompt:null, args:this.parseLexprList(), timeout:timeout, elapsed:elapsed };\n }\n // TODO: DATA statement doesn't read unquoted strings\n stmt__DATA() : DATA_Statement {\n return { command:'DATA', datums:this.parseDatumList() };\n }\n stmt__READ() : READ_Statement {\n return { command:'READ', args:this.parseLexprList() };\n }\n stmt__RESTORE() : RESTORE_Statement {\n var label = null;\n if (this.opts.restoreWithLabel && !isEOS(this.peekToken()))\n label = this.parseLabel();\n return { command:'RESTORE', label:label };\n }\n stmt__RETURN() {\n return { command:'RETURN' };\n }\n stmt__STOP() {\n return { command:'STOP' };\n }\n stmt__END() {\n if (this.opts.multilineIfThen && this.scopestack.length) {\n let endtok = this.expectTokens(['IF','SUB']);\n if (endtok.str == 'IF') {\n this.popIfThenScope();\n while (this.elseifcount--) this.popIfThenScope(); // pop additional ELSE IF blocks?\n this.elseifcount = 0;\n } else if (endtok.str == 'SUB') {\n this.addStatement( { command: 'RETURN' }, endtok );\n this.popScope( { command: 'END' }, 'SUB'); // fake command to avoid null\n }\n } else {\n return { command:'END' };\n }\n }\n stmt__ON() : ONGO_Statement {\n var expr = this.parseExprWithType(\"number\");\n var gotok = this.consumeToken();\n var cmd = {GOTO:'ONGOTO', THEN:'ONGOTO', GOSUB:'ONGOSUB'}[gotok.str]; // THEN only for DEC basic?\n if (!cmd) this.compileError(`There should be a GOTO or GOSUB here.`);\n var labels = this.parseLabelList();\n return { command:cmd as any, expr:expr, labels:labels };\n }\n stmt__DEF() : DEF_Statement {\n var lexpr = this.parseVarSubscriptOrFunc(); // TODO: only allow parameter names, not exprs\n if (lexpr.args && lexpr.args.length > this.opts.maxDefArgs)\n this.compileError(`There can be no more than ${this.opts.maxDefArgs} arguments to a function or subscript.`, lexpr.$loc);\n if (!lexpr.name.startsWith('FN')) this.compileError(`Functions defined with DEF must begin with the letters \"FN\".`, lexpr.$loc)\n this.markVarDefs(lexpr); // local variables need to be marked as referenced (TODO: only for this scope)\n this.expectToken(\"=\");\n var func = this.parseExpr();\n // build call graph to detect cycles\n this.visitExpr(func, (expr:Expr) => {\n if (isLookup(expr) && expr.name.startsWith('FN')) {\n if (!this.fnrefs[lexpr.name])\n this.fnrefs[lexpr.name] = [];\n this.fnrefs[lexpr.name].push(expr.name);\n }\n });\n this.checkCallGraph(lexpr.name, new Set());\n return { command:'DEF', lexpr:lexpr, def:func };\n }\n stmt__SUB() : SUB_Statement {\n var lexpr = this.parseVarSubscriptOrFunc(); // TODO: only allow parameter names, not exprs\n this.markVarDefs(lexpr); // local variables need to be marked as referenced (TODO: only for this scope)\n this.addLabel(lexpr.name, 1); // offset +1 to skip SUB command\n return { command:'SUB', lexpr:lexpr };\n }\n stmt__CALL() : CALL_Statement {\n return { command:'CALL', call:this.parseVarSubscriptOrFunc() };\n }\n markVarDefs(lexpr: IndOp) {\n this.vardefs[lexpr.name] = lexpr;\n if (lexpr.args != null)\n for (let arg of lexpr.args) {\n if (isLookup(arg) && arg.args == null)\n this.vardefs[arg.name] = arg;\n else\n this.compileError(`A definition can only define symbols, not expressions.`);\n }\n }\n // detect cycles in call graph starting at function 'name'\n checkCallGraph(name: string, visited: Set<string>) {\n if (visited.has(name)) this.compileError(`There was a cycle in the function definition graph for ${name}.`);\n visited.add(name);\n var refs = this.fnrefs[name] || [];\n for (var ref of refs)\n this.checkCallGraph(ref, visited); // recurse\n visited.delete(name);\n }\n stmt__POP() : NoArgStatement {\n return { command:'POP' };\n }\n stmt__GET() : GET_Statement {\n var lexpr = this.parseLexpr();\n return { command:'GET', lexpr:lexpr };\n }\n stmt__CLEAR() : NoArgStatement {\n return { command:'CLEAR' };\n }\n stmt__RANDOMIZE() : NoArgStatement {\n return { command:'RANDOMIZE' };\n }\n stmt__CHANGE() : CHANGE_Statement {\n var src = this.parseExpr();\n this.expectToken('TO');\n var dest = this.parseLexpr();\n if (dest.valtype == src.valtype)\n this.compileError(`CHANGE can only convert strings to numeric arrays, or vice-versa.`, mergeLocs(src.$loc, dest.$loc));\n return { command:'CHANGE', src:src, dest:dest };\n }\n stmt__CONVERT() : CONVERT_Statement {\n var src = this.parseExpr();\n this.expectToken('TO');\n var dest = this.parseLexpr();\n if (dest.valtype == src.valtype)\n this.compileError(`CONVERT can only convert strings to numbers, or vice-versa.`, mergeLocs(src.$loc, dest.$loc));\n return { command:'CONVERT', src:src, dest:dest };\n }\n // TODO: CHANGE A TO A$ (4th edition, A(0) is len and A(1..) are chars)\n stmt__OPTION() : OPTION_Statement {\n this.optionCount++;\n var tokname = this.consumeToken();\n var optname = tokname.str.toUpperCase();\n if (tokname.type != TokenType.Ident) this.compileError(`There must be a name after the OPTION statement.`)\n var tokarg = this.consumeToken();\n var arg = tokarg.str.toUpperCase();\n switch (optname) {\n case 'DIALECT':\n if (this.optionCount > 1) this.compileError(`OPTION DIALECT must be the first OPTION statement in the file.`, tokname.$loc);\n let dname = arg || \"\";\n if (dname == \"\") this.compileError(`OPTION DIALECT requires a dialect name.`, tokname.$loc);\n let dialect = DIALECTS[dname.toUpperCase()];\n if (dialect) this.opts = dialect;\n else this.compileError(`${dname} is not a valid dialect.`);\n break;\n case 'BASE':\n let base = parseInt(arg);\n if (base == 0 || base == 1) this.opts.defaultArrayBase = base;\n else this.compileError(\"OPTION BASE can only be 0 or 1.\");\n break;\n case 'CPUSPEED':\n if (!(this.opts.commandsPerSec = Math.min(1e7, arg=='MAX' ? Infinity : parseFloat(arg))))\n this.compileError(`OPTION CPUSPEED takes a positive number or MAX.`);\n break;\n default:\n // maybe it's one of the options?\n let propname = Object.getOwnPropertyNames(this.opts).find((n) => n.toUpperCase() == optname);\n if (propname == null) this.compileError(`${optname} is not a valid option.`, tokname.$loc);\n if (arg == null) this.compileError(`OPTION ${optname} requires a parameter.`);\n switch (typeof this.opts[propname]) {\n case 'boolean' : this.opts[propname] = arg.toUpperCase().startsWith(\"T\") || (arg as any)>0; return;\n case 'number' : this.opts[propname] = parseFloat(arg); return;\n case 'string' : this.opts[propname] = arg; return;\n case 'object' :\n if (Array.isArray(this.opts[propname]) && arg == 'ALL') {\n this.opts[propname] = null;\n return;\n }\n this.compileError(`OPTION ${optname} ALL is the only option supported.`);\n }\n break;\n }\n return { command:'OPTION', optname:optname, optargs:[arg]}\n }\n \n // for workermain\n generateListing(file: string, program: BASICProgram) {\n var srclines = [];\n var laststmt : Statement;\n program.stmts.forEach((stmt, idx) => {\n laststmt = stmt;\n srclines.push(stmt.$loc);\n });\n if (this.opts.endStmtRequired && (laststmt == null || laststmt.command != 'END'))\n this.dialectError(`All programs must have a final END statement`);\n return { lines: srclines };\n }\n getListings() : CodeListingMap {\n return this.listings;\n }\n\n // LINT STUFF\n checkAll(program : BASICProgram) {\n this.checkLabels();\n this.checkScopes();\n this.checkVarRefs();\n }\n checkLabels() {\n for (let targ in this.targets) {\n if (this.labels[targ] == null) {\n var what = this.opts.optionalLabels && isNaN(parseInt(targ)) ? \"label named\" : \"line number\";\n this.addError(`There isn't a ${what} ${targ}.`, this.targets[targ]);\n }\n }\n }\n checkScopes() {\n if (this.opts.compiledBlocks && this.scopestack.length) {\n var open = this.stmts[this.scopestack.pop()];\n var close = {FOR:\"NEXT\", WHILE:\"WEND\", IF:\"END IF\", SUB:\"END SUB\"};\n this.compileError(`Don't forget to add a matching ${close[open.command]} statement.`, open.$loc);\n }\n }\n checkVarRefs() {\n if (!this.opts.defaultValues) {\n for (var varname in this.varrefs) {\n if (this.vardefs[varname] == null)\n this.compileError(`The variable ${varname} isn't defined anywhere in the program.`, this.varrefs[varname]);\n }\n }\n }\n}\n\n///// BASIC DIALECTS\n\nexport const ECMA55_MINIMAL : BASICOptions = {\n dialectName: \"ECMA55\",\n asciiOnly : true,\n uppercaseOnly : true,\n optionalLabels : false,\n optionalWhitespace : false,\n multipleStmtsPerLine : false,\n varNaming : \"A1\",\n staticArrays : true,\n sharedArrayNamespace : true,\n defaultArrayBase : 0,\n defaultArraySize : 11,\n defaultValues : false,\n stringConcat : false,\n maxDimensions : 2,\n maxDefArgs : 255,\n maxStringLength : 255,\n tickComments : false,\n hexOctalConsts : false,\n validKeywords : [\n 'BASE','DATA','DEF','DIM','END',\n 'FOR','GO','GOSUB','GOTO','IF','INPUT','LET','NEXT','ON','OPTION','PRINT',\n 'RANDOMIZE','READ','REM','RESTORE','RETURN','STEP','STOP','THEN','TO' // 'SUB'\n ],\n validFunctions : [\n 'ABS','ATN','COS','EXP','INT','LOG','RND','SGN','SIN','SQR','TAB','TAN'\n ],\n validOperators : [\n '=', '<>', '<', '>', '<=', '>=', '+', '-', '*', '/', '^'\n ],\n printZoneLength : 15,\n numericPadding : true,\n checkOverflow : true,\n testInitialFor : true,\n optionalNextVar : false,\n multipleNextVars : false,\n bitwiseLogic : false,\n checkOnGotoIndex : true,\n computedGoto : false,\n restoreWithLabel : false,\n squareBrackets : false,\n arraysContainChars : false,\n endStmtRequired : true,\n chainAssignments : false,\n optionalLet : false,\n compiledBlocks : true,\n}\n\nexport const DARTMOUTH_4TH_EDITION : BASICOptions = {\n dialectName: \"DARTMOUTH4\",\n asciiOnly : true,\n uppercaseOnly : true,\n optionalLabels : false,\n optionalWhitespace : false,\n multipleStmtsPerLine : false,\n varNaming : \"A1\",\n staticArrays : true,\n sharedArrayNamespace : false,\n defaultArrayBase : 0,\n defaultArraySize : 11,\n defaultValues : false,\n stringConcat : false,\n maxDimensions : 2,\n maxDefArgs : 255,\n maxStringLength : 255,\n tickComments : true,\n hexOctalConsts : false,\n validKeywords : [\n 'BASE','DATA','DEF','DIM','END',\n 'FOR','GO','GOSUB','GOTO','IF','INPUT','LET','NEXT','ON','OPTION','PRINT',\n 'RANDOMIZE','READ','REM','RESTORE','RETURN','STEP','STOP','THEN','TO', //'SUB',\n 'CHANGE','MAT','RANDOM','RESTORE$','RESTORE*',\n ],\n validFunctions : [\n 'ABS','ATN','COS','EXP','INT','LOG','RND','SGN','SIN','SQR','TAB','TAN',\n 'TRN','INV','DET','NUM','ZER', // NUM = # of strings input for MAT INPUT\n ],\n validOperators : [\n '=', '<>', '<', '>', '<=', '>=', '+', '-', '*', '/', '^'\n ],\n printZoneLength : 15,\n numericPadding : true,\n checkOverflow : true,\n testInitialFor : true,\n optionalNextVar : false,\n multipleNextVars : false,\n bitwiseLogic : false,\n checkOnGotoIndex : true,\n computedGoto : false,\n restoreWithLabel : false,\n squareBrackets : false,\n arraysContainChars : false,\n endStmtRequired : true,\n chainAssignments : true,\n optionalLet : false,\n compiledBlocks : true,\n}\n\n// TODO: only integers supported\nexport const TINY_BASIC : BASICOptions = {\n dialectName: \"TINY\",\n asciiOnly : true,\n uppercaseOnly : true,\n optionalLabels : false,\n optionalWhitespace : false,\n multipleStmtsPerLine : false,\n varNaming : \"A\",\n staticArrays : false,\n sharedArrayNamespace : true,\n defaultArrayBase : 0,\n defaultArraySize : 0,\n defaultValues : true,\n stringConcat : false,\n maxDimensions : 0,\n maxDefArgs : 255,\n maxStringLength : 255,\n tickComments : false,\n hexOctalConsts : false,\n validKeywords : [\n 'OPTION',\n 'PRINT','IF','THEN','GOTO','INPUT','LET','GOSUB','RETURN','CLEAR','END'\n ],\n validFunctions : [\n ],\n validOperators : [\n '=', '<>', '><', '<', '>', '<=', '>=', '+', '-', '*', '/',\n ],\n printZoneLength : 1,\n numericPadding : false,\n checkOverflow : false,\n testInitialFor : false,\n optionalNextVar : false,\n multipleNextVars : false,\n bitwiseLogic : false,\n checkOnGotoIndex : false,\n computedGoto : true,\n restoreWithLabel : false,\n squareBrackets : false,\n arraysContainChars : false,\n endStmtRequired : false,\n chainAssignments : false,\n optionalLet : false,\n compiledBlocks : false,\n}\n\nexport const HP_TIMESHARED_BASIC : BASICOptions = {\n dialectName: \"HP2000\",\n asciiOnly : true,\n uppercaseOnly : true, // the terminal is usually uppercase\n optionalLabels : false,\n optionalWhitespace : false,\n multipleStmtsPerLine : true,\n varNaming : \"A1$\",\n staticArrays : true,\n sharedArrayNamespace : false,\n defaultArrayBase : 1,\n defaultArraySize : 11,\n defaultValues : false,\n stringConcat : false,\n maxDimensions : 2,\n maxDefArgs : 255,\n maxStringLength : 255, // 72 for literals\n tickComments : false, // TODO: HP BASIC has 'hh char constants\n hexOctalConsts : false,\n validKeywords : [\n 'BASE','DATA','DEF','DIM','END',\n 'FOR','GO','GOSUB','GOTO','IF','INPUT','LET','NEXT','OPTION','PRINT',\n 'RANDOMIZE','READ','REM','RESTORE','RETURN','STEP','STOP','THEN','TO', //'SUB',\n 'ENTER','MAT','CONVERT','OF','IMAGE','USING'\n ],\n validFunctions : [\n 'ABS','ATN','BRK','COS','CTL','EXP','INT','LEN','LIN','LOG','NUM',\n 'POS','RND','SGN','SIN','SPA','SQR','TAB','TAN','TIM','TYP','UPS$', // TODO: POS,\n 'NFORMAT$', // non-standard, substitute for PRINT USING\n ],\n validOperators : [\n '=', '<>', '<', '>', '<=', '>=', '+', '-', '*', '/', '^',\n '**', '#', 'NOT', 'AND', 'OR', 'MIN', 'MAX',\n ],\n printZoneLength : 15,\n numericPadding : true,\n checkOverflow : false,\n testInitialFor : true,\n optionalNextVar : false,\n multipleNextVars : false,\n bitwiseLogic : false,\n checkOnGotoIndex : false,\n computedGoto : true, // not really, but we do parse expressions for GOTO ... OF \n restoreWithLabel : true,\n squareBrackets : true,\n arraysContainChars : true,\n endStmtRequired : true,\n chainAssignments : true,\n optionalLet : true,\n compiledBlocks : true,\n maxArrayElements : 5000,\n // TODO: max line number\n}\n\nexport const DEC_BASIC_11 : BASICOptions = {\n dialectName: \"DEC11\",\n asciiOnly : true,\n uppercaseOnly : true, // translates all lower to upper\n optionalLabels : false,\n optionalWhitespace : false,\n multipleStmtsPerLine : false, // actually \"\\\"\n varNaming : \"A1\",\n staticArrays : true,\n sharedArrayNamespace : false,\n defaultArrayBase : 0,\n defaultArraySize : 11,\n defaultValues : true,\n stringConcat : true, // can also use &\n maxDimensions : 2,\n maxDefArgs : 255, // ?\n maxStringLength : 255,\n tickComments : false,\n hexOctalConsts : false,\n validKeywords : [\n 'OPTION',\n 'DATA','DEF','DIM','END','FOR','STEP','GOSUB','GOTO','GO','TO',\n 'IF','THEN','INPUT','LET','NEXT','ON','PRINT','RANDOMIZE',\n 'READ','REM','RESET','RESTORE','RETURN','STOP',\n ],\n validFunctions : [\n 'ABS','ATN','COS','EXP','INT','LOG','LOG10','PI','RND','SGN','SIN','SQR','TAB',\n 'ASC','BIN','CHR$','CLK$','DAT$','LEN','OCT','POS','SEG$','STR$','TRM$','VAL',\n 'NFORMAT$', // non-standard, substitute for PRINT USING\n ],\n validOperators : [\n '=', '<>', '><', '<', '>', '<=', '>=', '+', '-', '*', '/', '^',\n ],\n printZoneLength : 14,\n numericPadding : true,\n checkOverflow : true, // non-fatal; subst 0 and continue\n testInitialFor : true,\n optionalNextVar : false,\n multipleNextVars : false,\n bitwiseLogic : false,\n checkOnGotoIndex : true, // might continue\n computedGoto : false,\n restoreWithLabel : false,\n squareBrackets : false,\n arraysContainChars : false,\n endStmtRequired : false,\n chainAssignments : false,\n optionalLet : true,\n compiledBlocks : true,\n // TODO: max line number 32767\n // TODO: \\ separator, % int vars and constants, 'single' quoted\n // TODO: can't compare strings and numbers\n}\n\nexport const DEC_BASIC_PLUS : BASICOptions = {\n dialectName: \"DECPLUS\",\n asciiOnly : true,\n uppercaseOnly : false,\n optionalLabels : false,\n optionalWhitespace : false,\n multipleStmtsPerLine : true,\n varNaming : \"A1\",\n staticArrays : true,\n sharedArrayNamespace : false,\n defaultArrayBase : 0,\n defaultArraySize : 11,\n defaultValues : true,\n stringConcat : true, // can also use \"&\"\n maxDimensions : 2,\n maxDefArgs : 255, // ?\n maxStringLength : 255,\n tickComments : true, // actually use \"!\"\n hexOctalConsts : false,\n validKeywords : [\n 'OPTION',\n 'REM','LET','DIM','RANDOM','RANDOMIZE','IF','THEN','ELSE',\n 'FOR','TO','STEP','WHILE','UNTIL','NEXT','DEF','ON','GOTO','GOSUB',\n 'RETURN','CHANGE','READ','DATA','RESTORE','PRINT','USING',\n 'INPUT','LINE','NAME','AS','ERROR','RESUME','CHAIN','STOP','END',\n 'MAT','UNLESS','SLEEP','WAIT',\n ],\n validFunctions : [\n 'ABS','ATN','COS','EXP','INT','LOG','LOG10','PI','RND','SGN','SIN','SQR','TAB','TAN',\n 'POS','TAB','ASCII','CHR$','CVT%$','CVTF$','CVT$%','CVT$F',\n 'LEFT$','RIGHT$','MID$','LEN','INSTR','SPACE$','NUM$','VAL','XLATE',\n 'DATE$','TIME$','TIME','ERR','ERL','SWAP%','RAD$',\n 'NFORMAT$', // non-standard, substitute for PRINT USING\n ],\n validOperators : [\n '=', '<>', '<', '>', '<=', '>=', '+', '-', '*', '/', '^',\n '**', '==',\n 'NOT', 'AND', 'OR', 'XOR', 'IMP', 'EQV',\n ],\n printZoneLength : 14,\n numericPadding : true,\n checkOverflow : true, // non-fatal; subst 0 and continue\n testInitialFor : true,\n optionalNextVar : false,\n multipleNextVars : false,\n bitwiseLogic : false,\n checkOnGotoIndex : true, // might continue\n computedGoto : false,\n restoreWithLabel : false,\n squareBrackets : false,\n arraysContainChars : false,\n endStmtRequired : false,\n chainAssignments : false, // TODO: can chain with \",\" not \"=\"\n optionalLet : true,\n compiledBlocks : true,\n // TODO: max line number 32767\n // TODO: \\ separator, % int vars and constants, 'single' quoted\n // TODO: can't compare strings and numbers\n // TODO: WHILE/UNTIL/FOR extra statements, etc\n}\n\nexport const BASICODE : BASICOptions = {\n dialectName: \"BASICODE\",\n asciiOnly : true,\n uppercaseOnly : false,\n optionalLabels : false,\n optionalWhitespace : true,\n multipleStmtsPerLine : true,\n varNaming : \"AA\",\n staticArrays : true,\n sharedArrayNamespace : false,\n defaultArrayBase : 0,\n defaultArraySize : 11,\n defaultValues : false,\n stringConcat : true,\n maxDimensions : 2,\n maxDefArgs : 255,\n maxStringLength : 255,\n tickComments : false,\n hexOctalConsts : false,\n validKeywords : [\n 'BASE','DATA','DEF','DIM','END',\n 'FOR','GO','GOSUB','GOTO','IF','INPUT','LET','NEXT','ON','OPTION','PRINT',\n 'READ','REM','RESTORE','RETURN','STEP','STOP','THEN','TO', // 'SUB',\n 'AND', 'NOT', 'OR'\n ],\n validFunctions : [\n 'ABS','ASC','ATN','CHR$','COS','EXP','INT','LEFT$','LEN','LOG', \n 'MID$','RIGHT$','SGN','SIN','SQR','TAB','TAN','VAL'\n ],\n validOperators : [\n '=', '<>', '<', '>', '<=', '>=', '+', '-', '*', '/', '^', 'AND', 'NOT', 'OR'\n ],\n printZoneLength : 15,\n numericPadding : true,\n checkOverflow : true,\n testInitialFor : true,\n optionalNextVar : false,\n multipleNextVars : false,\n bitwiseLogic : false,\n checkOnGotoIndex : true,\n computedGoto : false,\n restoreWithLabel : false,\n squareBrackets : false,\n arraysContainChars : false,\n endStmtRequired : false,\n chainAssignments : false,\n optionalLet : true,\n compiledBlocks : false,\n}\n\nexport const ALTAIR_BASIC41 : BASICOptions = {\n dialectName: \"ALTAIR41\",\n asciiOnly : true,\n uppercaseOnly : true,\n optionalLabels : false,\n optionalWhitespace : true,\n multipleStmtsPerLine : true,\n varNaming : \"*\", // or AA\n staticArrays : false,\n sharedArrayNamespace : true,\n defaultArrayBase : 0,\n defaultArraySize : 11,\n defaultValues : true,\n stringConcat : true,\n maxDimensions : 128, // \"as many as will fit on a single line\" ... ?\n maxDefArgs : 255,\n maxStringLength : 255,\n tickComments : false,\n hexOctalConsts : false,\n validKeywords : [\n 'OPTION',\n 'CONSOLE','DATA','DEF','DEFUSR','DIM','END','ERASE','ERROR',\n 'FOR','GOTO','GOSUB','IF','THEN','ELSE','INPUT','LET','LINE',\n 'PRINT','LPRINT','USING','NEXT','ON','OUT','POKE',\n 'READ','REM','RESTORE','RESUME','RETURN','STOP','SWAP',\n 'TROFF','TRON','WAIT',\n 'TO','STEP',\n 'AND', 'NOT', 'OR', 'XOR', 'IMP', 'EQV', 'MOD',\n 'RANDOMIZE' // not in Altair BASIC, but we add it anyway\n ],\n validFunctions : [\n 'ABS','ASC','ATN','CDBL','CHR$','CINT','COS','ERL','ERR',\n 'EXP','FIX','FRE','HEX$','INP','INSTR','INT',\n 'LEFT$','LEN','LOG','LPOS','MID$',\n 'OCT$','POS','RIGHT$','RND','SGN','SIN','SPACE$','SPC',\n 'SQR','STR$','STRING$','TAB','TAN','USR','VAL','VARPTR'\n ],\n validOperators : [\n '=', '<>', '<', '>', '<=', '>=', '+', '-', '*', '/', '^', '\\\\',\n 'AND', 'NOT', 'OR', 'XOR', 'IMP', 'EQV', 'MOD'\n ],\n printZoneLength : 15,\n numericPadding : true,\n checkOverflow : true,\n testInitialFor : false,\n optionalNextVar : true,\n multipleNextVars : true,\n bitwiseLogic : true,\n checkOnGotoIndex : false,\n computedGoto : false,\n restoreWithLabel : false,\n squareBrackets : false,\n arraysContainChars : false,\n endStmtRequired : false,\n chainAssignments : false,\n optionalLet : true,\n compiledBlocks : false,\n}\n\nexport const APPLESOFT_BASIC : BASICOptions = {\n dialectName: \"APPLESOFT\",\n asciiOnly : true,\n uppercaseOnly : false,\n optionalLabels : false,\n optionalWhitespace : true,\n multipleStmtsPerLine : true,\n varNaming : \"*\", // or AA\n staticArrays : false,\n sharedArrayNamespace : false,\n defaultArrayBase : 0,\n defaultArraySize : 11,\n defaultValues : true,\n stringConcat : true,\n maxDimensions : 88,\n maxDefArgs : 1, // TODO: no string FNs\n maxStringLength : 255,\n tickComments : false,\n hexOctalConsts : false,\n validKeywords : [\n 'OPTION',\n 'CLEAR','LET','DIM','DEF','GOTO','GOSUB','RETURN','ON','POP',\n 'FOR','NEXT','IF','THEN','END','STOP','ONERR','RESUME',\n 'PRINT','INPUT','GET','HOME','HTAB','VTAB',\n 'INVERSE','FLASH','NORMAL','TEXT',\n 'GR','COLOR','PLOT','HLIN','VLIN',\n 'HGR','HGR2','HPLOT','HCOLOR','AT',\n 'DATA','READ','RESTORE',\n 'REM','TRACE','NOTRACE',\n 'TO','STEP',\n 'AND', 'NOT', 'OR'\n ],\n validFunctions : [\n 'ABS','ATN','COS','EXP','INT','LOG','RND','SGN','SIN','SQR','TAN',\n 'LEN','LEFT$','MID$','RIGHT$','STR$','VAL','CHR$','ASC',\n 'FRE','SCRN','PDL','PEEK','POS'\n ],\n validOperators : [\n '=', '<>', '<', '>', '<=', '>=', '+', '-', '*', '/', '^',\n 'AND', 'NOT', 'OR'\n ],\n printZoneLength : 16,\n numericPadding : false,\n checkOverflow : true,\n testInitialFor : false,\n optionalNextVar : true,\n multipleNextVars : true,\n bitwiseLogic : false,\n checkOnGotoIndex : false,\n computedGoto : false,\n restoreWithLabel : false,\n squareBrackets : false,\n arraysContainChars : false,\n endStmtRequired : false,\n chainAssignments : false,\n optionalLet : true,\n compiledBlocks : false,\n}\n\nexport const BASIC80 : BASICOptions = {\n dialectName: \"BASIC80\",\n asciiOnly : true,\n uppercaseOnly : false,\n optionalLabels : false,\n optionalWhitespace : true,\n multipleStmtsPerLine : true,\n varNaming : \"*\",\n staticArrays : false,\n sharedArrayNamespace : true,\n defaultArrayBase : 0,\n defaultArraySize : 11,\n defaultValues : true,\n stringConcat : true,\n maxDimensions : 255,\n maxDefArgs : 255,\n maxStringLength : 255,\n //maxElements : 32767, // TODO\n tickComments : true,\n hexOctalConsts : true,\n validKeywords : [\n 'OPTION',\n 'CONSOLE','DATA','DEF','DEFUSR','DIM','END','ERASE','ERROR',\n 'FOR','GOTO','GOSUB','IF','THEN','ELSE','INPUT','LET','LINE',\n 'PRINT','LPRINT','USING','NEXT','ON','OUT','POKE',\n 'READ','REM','RESTORE','RESUME','RETURN','STOP','SWAP',\n 'TROFF','TRON','WAIT',\n 'CALL','CHAIN','COMMON','WHILE','WEND','WRITE','RANDOMIZE',\n 'TO','STEP',\n 'AND', 'NOT', 'OR', 'XOR', 'IMP', 'EQV', 'MOD'\n ],\n validFunctions : [\n 'ABS','ASC','ATN','CDBL','CHR$','CINT','COS','CSNG','CVI','CVS','CVD',\n 'EOF','EXP','FIX','FRE','HEX$','INP','INPUT$','INSTR','INT',\n 'LEFT$','LEN','LOC','LOG','LPOS','MID$','MKI$','MKS$','MKD$',\n 'OCT$','PEEK','POS','RIGHT$','RND','SGN','SIN','SPACE$','SPC',\n 'SQR','STR$','STRING$','TAB','TAN','USR','VAL','VARPTR'\n ],\n validOperators : [\n '=', '<>', '<', '>', '<=', '>=', '+', '-', '*', '/', '^', '\\\\',\n 'AND', 'NOT', 'OR', 'XOR', 'IMP', 'EQV', 'MOD'\n ],\n printZoneLength : 14,\n numericPadding : true,\n checkOverflow : false, // TODO: message displayed when overflow, division by zero = ok\n testInitialFor : true,\n optionalNextVar : true,\n multipleNextVars : true,\n bitwiseLogic : true,\n checkOnGotoIndex : false,\n computedGoto : false,\n restoreWithLabel : true,\n squareBrackets : false,\n arraysContainChars : false,\n endStmtRequired : false,\n chainAssignments : false,\n optionalLet : true,\n compiledBlocks : false,\n}\n\nexport const MODERN_BASIC : BASICOptions = {\n dialectName: \"MODERN\",\n asciiOnly : false,\n uppercaseOnly : false,\n optionalLabels : true,\n optionalWhitespace : false,\n multipleStmtsPerLine : true,\n varNaming : \"*\",\n staticArrays : false,\n sharedArrayNamespace : false,\n defaultArrayBase : 0,\n defaultArraySize : 0, // DIM required\n defaultValues : false,\n stringConcat : true,\n maxDimensions : 255,\n maxDefArgs : 255,\n maxStringLength : 2048, // TODO?\n tickComments : true,\n hexOctalConsts : true,\n validKeywords : null, // all\n validFunctions : null, // all\n validOperators : null, // all\n printZoneLength : 16,\n numericPadding : false,\n checkOverflow : true,\n testInitialFor : true,\n optionalNextVar : true,\n multipleNextVars : true,\n bitwiseLogic : true,\n checkOnGotoIndex : true,\n computedGoto : false,\n restoreWithLabel : true,\n squareBrackets : true,\n arraysContainChars : false,\n endStmtRequired : false,\n chainAssignments : true,\n optionalLet : true,\n compiledBlocks : true,\n multilineIfThen : true,\n}\n\n// TODO: integer vars\n// TODO: DEFINT/DEFSTR\n// TODO: excess INPUT ignored, error msg\n// TODO: out of order line numbers\n\ntype BuiltinFunctionDef = [string, ValueType[], ValueType];\n\nconst BUILTIN_DEFS : BuiltinFunctionDef[] = [\n ['ABS', ['number'], 'number' ],\n ['ASC', ['string'], 'number' ],\n ['ATN', ['number'], 'number' ],\n ['CHR$', ['number'], 'string' ],\n ['CINT', ['number'], 'number' ],\n ['COS', ['number'], 'number' ],\n ['COT', ['number'], 'number' ],\n ['CTL', ['number'], 'string' ],\n ['EXP', ['number'], 'number' ],\n ['FIX', ['number'], 'number' ],\n ['HEX$', ['number'], 'string' ],\n ['INSTR', ['number', 'string', 'string'], 'number' ],\n ['INSTR', ['string', 'string'], 'number' ],\n ['INT', ['number'], 'number' ],\n ['LEFT$', ['string', 'number'], 'string' ],\n ['LEN', ['string'], 'number' ],\n ['LIN', ['number'], 'string' ],\n ['LOG', ['number'], 'number' ],\n ['LOG10', ['number'], 'number' ],\n ['MID$', ['string', 'number'], 'string'],\n ['MID$', ['string', 'number', 'number'], 'string'],\n ['OCT$', ['number'], 'string' ],\n ['PI', [], 'number'],\n ['POS', ['number'], 'number' ], // arg ignored\n ['POS', ['string','string'], 'number' ], // HP POS\n ['RIGHT$', ['string', 'number'], 'string' ],\n ['RND', [], 'number' ],\n ['RND', ['number'], 'number' ],\n ['ROUND', ['number'], 'number' ],\n ['SGN', ['number'], 'number' ],\n ['SIN', ['number'], 'number' ],\n ['SPACE$', ['number'], 'string' ],\n ['SPC', ['number'], 'string' ],\n ['SQR', ['number'], 'number' ],\n ['STR$', ['number'], 'string' ],\n ['STRING$', ['number', 'number'], 'string'],\n ['STRING$', ['number', 'string'], 'string'],\n ['TAB', ['number'], 'string' ],\n ['TAN', ['number'], 'number' ],\n ['TIM', ['number'], 'number' ], // only HP BASIC?\n ['TIMER', [], 'number' ],\n ['UPS$', ['string'], 'string' ],\n ['VAL', ['string'], 'number' ],\n ['LPAD$', ['string', 'number'], 'string' ],\n ['RPAD$', ['string', 'number'], 'string' ],\n ['NFORMAT$', ['number', 'number'], 'string' ],\n];\n\nvar BUILTIN_MAP : { [name:string] : {args:ValueType[], result:ValueType}[] } = {};\nBUILTIN_DEFS.forEach( (def, idx) => {\n let [name, args, result] = def;\n if (!BUILTIN_MAP[name]) BUILTIN_MAP[name] = [];\n BUILTIN_MAP[name].push({args: args, result: result});\n});\n\nexport const DIALECTS = {\n \"DEFAULT\": MODERN_BASIC,\n \"DARTMOUTH\": DARTMOUTH_4TH_EDITION,\n \"DARTMOUTH4\": DARTMOUTH_4TH_EDITION,\n \"ALTAIR\": ALTAIR_BASIC41,\n \"ALTAIR4\": ALTAIR_BASIC41,\n \"ALTAIR41\": ALTAIR_BASIC41,\n \"TINY\": TINY_BASIC,\n \"ECMA55\": ECMA55_MINIMAL,\n \"MINIMAL\": ECMA55_MINIMAL,\n \"HP\": HP_TIMESHARED_BASIC,\n \"HPB\": HP_TIMESHARED_BASIC,\n \"HPTSB\": HP_TIMESHARED_BASIC,\n \"HP2000\": HP_TIMESHARED_BASIC,\n \"HPBASIC\": HP_TIMESHARED_BASIC,\n \"HPACCESS\": HP_TIMESHARED_BASIC,\n \"DEC11\": DEC_BASIC_11,\n \"DEC\": DEC_BASIC_PLUS,\n \"DECPLUS\": DEC_BASIC_PLUS,\n \"BASICPLUS\": DEC_BASIC_PLUS,\n \"BASICODE\": BASICODE,\n \"APPLESOFT\": APPLESOFT_BASIC,\n \"BASIC80\": BASIC80,\n \"MODERN\": MODERN_BASIC,\n};\n", "import { Segment, CodeListingMap, WorkerResult, WorkerError } from \"../../common/workertypes\";\nimport { BuildStep, BuildStepResult, setupRequireFunction, load, emglobal, getWorkFileAsString, loadNative, gatherFiles, staleFiles, msvcErrorMatcher, moduleInstFn, setupFS, populateFiles, execMain, putWorkFile, anyTargetChanged, parseListing, print_fn, makeErrorMatcher, populateExtraFiles } from \"../workermain\";\nimport { EmscriptenModule } from \"../workermain\"\nimport * as basic_compiler from '../../common/basic/compiler';\nimport { getRootBasePlatform, parseXMLPoorly } from \"../../common/util\";\n\nexport function translateShowdown(step: BuildStep): BuildStepResult {\n setupRequireFunction();\n load(\"showdown.min\");\n var showdown = emglobal['showdown'];\n var converter = new showdown.Converter({\n tables: 'true',\n smoothLivePreview: 'true',\n requireSpaceBeforeHeadingText: 'true',\n emoji: 'true',\n });\n var code = getWorkFileAsString(step.path);\n var html = converter.makeHtml(code);\n delete emglobal['require'];\n return {\n output: html\n };\n}\n\nexport function compileInform6(step: BuildStep): BuildStepResult {\n loadNative(\"inform\");\n var errors = [];\n gatherFiles(step, { mainFilePath: \"main.inf\" });\n var objpath = step.prefix + \".z5\";\n if (staleFiles(step, [objpath])) {\n var errorMatcher = msvcErrorMatcher(errors);\n var lstout = \"\";\n var match_fn = (s: string) => {\n if (s.indexOf(\"Error:\") >= 0) {\n errorMatcher(s);\n } else {\n lstout += s;\n lstout += \"\\n\";\n }\n }\n // TODO: step.path must end in '.inf' or error\n var args = ['-afjnops', '-v5', '-Cu', '-E1', '-k', '+/share/lib', step.path];\n var inform: EmscriptenModule = emglobal.inform({\n instantiateWasm: moduleInstFn('inform'),\n noInitialRun: true,\n //logReadFiles:true,\n print: match_fn,\n printErr: match_fn,\n });\n var FS = inform.FS;\n setupFS(FS, 'inform');\n populateFiles(step, FS);\n //fixParamsWithDefines(step.path, step.params);\n execMain(step, inform, args);\n if (errors.length)\n return { errors: errors };\n var objout = FS.readFile(objpath, { encoding: 'binary' });\n putWorkFile(objpath, objout);\n if (!anyTargetChanged(step, [objpath]))\n return;\n\n // parse debug XML\n var symbolmap = {};\n var segments: Segment[] = [];\n var entitymap = {\n // number -> string\n 'object': {}, 'property': {}, 'attribute': {}, 'constant': {}, 'global-variable': {}, 'routine': {},\n };\n var dbgout = FS.readFile(\"gameinfo.dbg\", { encoding: 'utf8' });\n var xmlroot = parseXMLPoorly(dbgout);\n //console.log(xmlroot);\n var segtype = \"ram\";\n xmlroot.children.forEach((node) => {\n switch (node.type) {\n case 'global-variable':\n case 'routine':\n var ident = node.children.find((c, v) => c.type == 'identifier').text;\n var address = parseInt(node.children.find((c, v) => c.type == 'address').text);\n symbolmap[ident] = address;\n entitymap[node.type][address] = ident;\n break;\n case 'object':\n case 'property':\n case 'attribute':\n var ident = node.children.find((c, v) => c.type == 'identifier').text;\n var value = parseInt(node.children.find((c, v) => c.type == 'value').text);\n //entitymap[node.type][ident] = value;\n entitymap[node.type][value] = ident;\n //symbolmap[ident] = address | 0x1000000;\n break;\n case 'story-file-section':\n var name = node.children.find((c, v) => c.type == 'type').text;\n var address = parseInt(node.children.find((c, v) => c.type == 'address').text);\n var endAddress = parseInt(node.children.find((c, v) => c.type == 'end-address').text);\n if (name == \"grammar table\") segtype = \"rom\";\n segments.push({ name: name, start: address, size: endAddress - address, type: segtype });\n }\n });\n // parse listing\n var listings: CodeListingMap = {};\n // 35 +00015 <*> call_vs long_19 location long_424 -> sp \n var lines = parseListing(lstout, /\\s*(\\d+)\\s+[+]([0-9a-f]+)\\s+([<*>]*)\\s*(\\w+)\\s+(.+)/i, -1, 2, 4);\n var lstpath = step.prefix + '.lst';\n listings[lstpath] = { lines: [], asmlines: lines, text: lstout };\n return {\n output: objout, //.slice(0),\n listings: listings,\n errors: errors,\n symbolmap: symbolmap,\n segments: segments,\n debuginfo: entitymap,\n };\n }\n}\n\nexport function compileBASIC(step: BuildStep): WorkerResult {\n var jsonpath = step.path + \".json\";\n gatherFiles(step);\n if (staleFiles(step, [jsonpath])) {\n var parser = new basic_compiler.BASICParser();\n var code = getWorkFileAsString(step.path);\n try {\n var ast = parser.parseFile(code, step.path);\n } catch (e) {\n console.log(e);\n if (parser.errors.length == 0) throw e;\n }\n if (parser.errors.length) {\n return { errors: parser.errors };\n }\n // put AST into JSON (sans source locations) to see if it has changed\n var json = JSON.stringify(ast, (key, value) => { return (key == '$loc' ? undefined : value) });\n putWorkFile(jsonpath, json);\n if (anyTargetChanged(step, [jsonpath])) return {\n output: ast,\n listings: parser.getListings(),\n };\n }\n}\n\nexport function compileWiz(step: BuildStep): WorkerResult {\n loadNative(\"wiz\");\n var params = step.params;\n gatherFiles(step, { mainFilePath: \"main.wiz\" });\n var destpath = step.prefix + (params.wiz_rom_ext || \".bin\");\n var errors: WorkerError[] = [];\n if (staleFiles(step, [destpath])) {\n var wiz: EmscriptenModule = emglobal.wiz({\n instantiateWasm: moduleInstFn('wiz'),\n noInitialRun: true,\n print: print_fn,\n //test.wiz:2: error: expected statement, but got identifier `test`\n printErr: makeErrorMatcher(errors, /(.+?):(\\d+):\\s*(.+)/, 2, 3, step.path, 1),\n });\n var FS = wiz.FS;\n setupFS(FS, 'wiz');\n populateFiles(step, FS);\n populateExtraFiles(step, FS, params.extra_compile_files);\n const FWDIR = '/share/common';\n var args = [\n '-o', destpath,\n '-I', FWDIR + '/' + (params.wiz_inc_dir || getRootBasePlatform(step.platform)),\n '-s', 'wla',\n '--color=none',\n step.path];\n args.push('--system', params.wiz_sys_type || params.arch);\n execMain(step, wiz, args);\n if (errors.length)\n return { errors: errors };\n var binout = FS.readFile(destpath, { encoding: 'binary' });\n putWorkFile(destpath, binout);\n var dbgout = FS.readFile(step.prefix + '.sym', { encoding: 'utf8' });\n var symbolmap = {};\n for (var s of dbgout.split(\"\\n\")) {\n var toks = s.split(/ /);\n // 00:4008 header.basic_start\n if (toks && toks.length >= 2) {\n var tokrange = toks[0].split(':');\n var start = parseInt(tokrange[1], 16);\n var sym = toks[1];\n symbolmap[sym] = start;\n }\n }\n return {\n output: binout, //.slice(0),\n errors: errors,\n symbolmap: symbolmap,\n };\n }\n}\n\n", "\nimport { convertDataToUint8Array, getFilenamePrefix, getRootBasePlatform, safeident } from \"../../common/util\";\nimport { CodeListingMap, WorkerError } from \"../../common/workertypes\";\nimport { re_crlf, BuildStepResult, anyTargetChanged, execMain, gatherFiles, msvcErrorMatcher, populateEntry, populateExtraFiles, populateFiles, print_fn, putWorkFile, setupFS, staleFiles, BuildStep, emglobal, loadNative, moduleInstFn, fixParamsWithDefines, store, makeErrorMatcher, getWorkFileAsString } from \"../workermain\";\nimport { EmscriptenModule } from \"../workermain\"\n\n\n/*\n000000r 1 .segment \"CODE\"\n000000r 1 .proc\t_rasterWait: near\n000000r 1 ; int main() { return mul2(2); }\n000000r 1 .dbg line, \"main.c\", 3\n000014r 1 \t.dbg\t func, \"main\", \"00\", extern, \"_main\"\n000000r 1 A2 00 ldx #$00\n00B700 1 BOOT2:\n00B700 1 A2 01 ldx #1 ;track\n00B725 1 00 IBLASTDRVN: .byte 0\n00B726 1 xx xx IBSECSZ: .res 2\n00BA2F 1 2A 2B E8 2C HEX \"2A2BE82C2D2E2F303132F0F133343536\"\n*/\nfunction parseCA65Listing(asmfn: string, code: string, symbols, segments, params, dbg: boolean, listings?: CodeListingMap) {\n var segofs = 0;\n var offset = 0;\n var dbgLineMatch = /^([0-9A-F]+)([r]?)\\s+(\\d+)\\s+[.]dbg\\s+(\\w+), \"([^\"]+)\", (.+)/;\n var funcLineMatch = /\"(\\w+)\", (\\w+), \"(\\w+)\"/;\n var insnLineMatch = /^([0-9A-F]+)([r]?)\\s{1,2}(\\d+)\\s{1,2}([0-9A-Frx ]{11})\\s+(.*)/;\n var segMatch = /[.]segment\\s+\"(\\w+)\"/i;\n var origlines = [];\n var lines = origlines;\n var linenum = 0;\n let curpath = asmfn || '';\n // TODO: only does .c functions, not all .s files\n for (var line of code.split(re_crlf)) {\n var dbgm = dbgLineMatch.exec(line);\n if (dbgm && dbgm[1]) {\n var dbgtype = dbgm[4];\n offset = parseInt(dbgm[1], 16);\n curpath = dbgm[5];\n // new file?\n if (curpath && listings) {\n let l = listings[curpath];\n if (!l) l = listings[curpath] = {lines:[]};\n lines = l.lines;\n }\n if (dbgtype == 'func') {\n var funcm = funcLineMatch.exec(dbgm[6]);\n if (funcm) {\n var funcofs = symbols[funcm[3]];\n if (typeof funcofs === 'number') {\n segofs = funcofs - offset;\n //console.log(funcm[3], funcofs, '-', offset);\n }\n }\n }\n }\n if (dbg && dbgm && dbgtype == 'line') {\n //console.log(dbgm[5], dbgm[6], offset, segofs);\n lines.push({\n path: dbgm[5],\n line: parseInt(dbgm[6]),\n offset: offset + segofs,\n insns: null\n });\n }\n let linem = insnLineMatch.exec(line);\n let topfile = linem && linem[3] == '1';\n if (topfile) {\n let insns = linem[4]?.trim() || '';\n // skip extra insns for macro expansions\n if (!(insns != '' && linem[5] == '')) {\n linenum++;\n }\n if (linem[1]) {\n var offset = parseInt(linem[1], 16);\n if (insns.length) {\n //console.log(dbg, curpath, linenum, offset, segofs, insns);\n if (!dbg) {\n lines.push({\n path: curpath,\n line: linenum,\n offset: offset + segofs,\n insns: insns,\n iscode: true // TODO: can't really tell unless we parse it\n });\n }\n } else {\n var sym = null;\n var label = linem[5];\n if (label?.endsWith(':')) {\n sym = label.substring(0, label.length-1);\n } else if (label?.toLowerCase().startsWith('.proc')) {\n sym = label.split(' ')[1];\n }\n if (sym && !sym.startsWith('@')) {\n var symofs = symbols[sym];\n if (typeof symofs === 'number') {\n segofs = symofs - offset;\n //console.log(sym, segofs, symofs, '-', offset);\n }\n }\n }\n }\n }\n }\n return origlines;\n}\n\nexport function assembleCA65(step: BuildStep): BuildStepResult {\n loadNative(\"ca65\");\n var errors = [];\n gatherFiles(step, { mainFilePath: \"main.s\" });\n var objpath = step.prefix + \".o\";\n var lstpath = step.prefix + \".lst\";\n if (staleFiles(step, [objpath, lstpath])) {\n var objout, lstout;\n var CA65: EmscriptenModule = emglobal.ca65({\n instantiateWasm: moduleInstFn('ca65'),\n noInitialRun: true,\n //logReadFiles:true,\n print: print_fn,\n printErr: makeErrorMatcher(errors, /(.+?):(\\d+): (.+)/, 2, 3, step.path, 1),\n });\n var FS = CA65.FS;\n setupFS(FS, '65-' + getRootBasePlatform(step.platform));\n populateFiles(step, FS);\n fixParamsWithDefines(step.path, step.params);\n var args = ['-v', '-g', '-I', '/share/asminc', '-o', objpath, '-l', lstpath, step.path];\n args.unshift.apply(args, [\"-D\", \"__8BITWORKSHOP__=1\"]);\n if (step.mainfile) {\n args.unshift.apply(args, [\"-D\", \"__MAIN__=1\"]);\n }\n execMain(step, CA65, args);\n if (errors.length) {\n let listings : CodeListingMap = {};\n // TODO? change extension to .lst\n //listings[step.path] = { lines:[], text:getWorkFileAsString(step.path) };\n return { errors, listings };\n }\n objout = FS.readFile(objpath, { encoding: 'binary' });\n lstout = FS.readFile(lstpath, { encoding: 'utf8' });\n putWorkFile(objpath, objout);\n putWorkFile(lstpath, lstout);\n }\n return {\n linktool: \"ld65\",\n files: [objpath, lstpath],\n args: [objpath]\n };\n}\n\nexport function linkLD65(step: BuildStep): BuildStepResult {\n loadNative(\"ld65\");\n var params = step.params;\n gatherFiles(step);\n var binpath = \"main\";\n if (staleFiles(step, [binpath])) {\n var errors = [];\n var LD65: EmscriptenModule = emglobal.ld65({\n instantiateWasm: moduleInstFn('ld65'),\n noInitialRun: true,\n //logReadFiles:true,\n print: print_fn,\n printErr: function (s) { errors.push({ msg: s, line: 0 }); }\n });\n var FS = LD65.FS;\n setupFS(FS, '65-' + getRootBasePlatform(step.platform));\n populateFiles(step, FS);\n populateExtraFiles(step, FS, params.extra_link_files);\n // populate .cfg file, if it is a custom one\n if (store.hasFile(params.cfgfile)) {\n populateEntry(FS, params.cfgfile, store.getFileEntry(params.cfgfile), null);\n }\n var libargs = params.libargs || [];\n var cfgfile = params.cfgfile;\n var args = ['--cfg-path', '/share/cfg',\n '--lib-path', '/share/lib',\n '-C', cfgfile,\n '-Ln', 'main.vice',\n //'--dbgfile', 'main.dbg', // TODO: get proper line numbers\n '-o', 'main',\n '-m', 'main.map'].concat(step.args, libargs);\n //console.log(args);\n execMain(step, LD65, args);\n if (errors.length)\n return { errors: errors };\n var aout = FS.readFile(\"main\", { encoding: 'binary' });\n var mapout = FS.readFile(\"main.map\", { encoding: 'utf8' });\n var viceout = FS.readFile(\"main.vice\", { encoding: 'utf8' });\n // correct binary for PCEngine\n if (step.platform == 'pce' && aout.length > 0x2000) {\n // move 8 KB from end to front\n let newrom = new Uint8Array(aout.length);\n newrom.set(aout.slice(aout.length - 0x2000), 0);\n newrom.set(aout.slice(0, aout.length - 0x2000), 0x2000);\n aout = newrom;\n }\n //var dbgout = FS.readFile(\"main.dbg\", {encoding:'utf8'});\n putWorkFile(\"main\", aout);\n putWorkFile(\"main.map\", mapout);\n putWorkFile(\"main.vice\", viceout);\n // return unchanged if no files changed\n if (!anyTargetChanged(step, [\"main\", \"main.map\", \"main.vice\"]))\n return;\n // parse symbol map (TODO: omit segments, constants)\n var symbolmap = {};\n for (var s of viceout.split(\"\\n\")) {\n var toks = s.split(\" \");\n if (toks[0] == 'al') {\n let ident = toks[2].substr(1);\n if (ident.length != 5 || !ident.startsWith('L')) { // no line numbers\n let ofs = parseInt(toks[1], 16);\n symbolmap[ident] = ofs;\n }\n }\n }\n // TODO: move to Platform class\n var segments = [];\n segments.push({ name: 'CPU Stack', start: 0x100, size: 0x100, type: 'ram' });\n segments.push({ name: 'CPU Vectors', start: 0xfffa, size: 0x6, type: 'rom' });\n // TODO: CHR, banks, etc\n let re_seglist = /(\\w+)\\s+([0-9A-F]+)\\s+([0-9A-F]+)\\s+([0-9A-F]+)\\s+([0-9A-F]+)/;\n let parseseglist = false;\n let m;\n for (let s of mapout.split('\\n')) {\n if (parseseglist && (m = re_seglist.exec(s))) {\n let seg = m[1];\n let start = parseInt(m[2], 16);\n let size = parseInt(m[4], 16);\n let type = '';\n // TODO: better id of ram/rom\n if (seg.startsWith('CODE') || seg == 'STARTUP' || seg == 'RODATA' || seg.endsWith('ROM')) type = 'rom';\n else if (seg == 'ZP' || seg == 'DATA' || seg == 'BSS' || seg.endsWith('RAM')) type = 'ram';\n segments.push({ name: seg, start, size, type });\n }\n if (s == 'Segment list:') parseseglist = true;\n if (s == '') parseseglist = false;\n }\n // build listings\n var listings: CodeListingMap = {};\n for (var fn of step.files) {\n if (fn.endsWith('.lst')) {\n var lstout = FS.readFile(fn, { encoding: 'utf8' });\n lstout = lstout.split('\\n\\n')[1] || lstout; // remove header\n putWorkFile(fn, lstout);\n //const asmpath = fn.replace(/\\.lst$/, '.ca65'); // TODO! could be .s\n let isECS = step.debuginfo?.systems?.Init != null; // TODO\n if (isECS) {\n var asmlines = [];\n var srclines = parseCA65Listing(fn, lstout, symbolmap, segments, params, true, listings);\n listings[fn] = {\n lines: [],\n text: lstout\n }\n } else {\n var asmlines = parseCA65Listing(fn, lstout, symbolmap, segments, params, false);\n var srclines = parseCA65Listing('', lstout, symbolmap, segments, params, true);\n listings[fn] = {\n asmlines: srclines.length ? asmlines : null,\n lines: srclines.length ? srclines : asmlines,\n text: lstout\n }\n }\n }\n }\n return {\n output: aout, //.slice(0),\n listings: listings,\n errors: errors,\n symbolmap: symbolmap,\n segments: segments\n };\n }\n}\n\nfunction processIncbin(code: string) {\n let re3 = /^\\s*([;']|[/][/])#incbin\\s+\"(.+?)\"/gm;\n // find #incbin \"filename.bin\" and replace with C array declaration\n return code.replace(re3, (m, m1, m2) => {\n let filename = m2;\n let filedata = store.getFileData(filename);\n let bytes = convertDataToUint8Array(filedata);\n if (!bytes) throw new Error('#incbin: file not found: \"' + filename + '\"');\n let out = '';\n let ident = safeident(filename);\n console.log('#incbin', filename, ident, bytes.length);\n out += 'const unsigned char ' + ident + '[' + bytes.length + '] = {';\n for (let i = 0; i < bytes.length; i++) {\n out += bytes[i].toString() + ',';\n }\n out += '};';\n console.log('incbin', out);\n return out;\n });\n}\n\nexport function compileCC65(step: BuildStep): BuildStepResult {\n loadNative(\"cc65\");\n var params = step.params;\n // stderr\n var re_err1 = /(.*?):(\\d+): (.+)/;\n var errors: WorkerError[] = [];\n var errline = 0;\n function match_fn(s) {\n console.log(s);\n var matches = re_err1.exec(s);\n if (matches) {\n errline = parseInt(matches[2]);\n errors.push({\n line: errline,\n msg: matches[3],\n path: matches[1]\n });\n }\n }\n gatherFiles(step, { mainFilePath: \"main.c\" });\n var destpath = step.prefix + '.s';\n if (staleFiles(step, [destpath])) {\n var CC65: EmscriptenModule = emglobal.cc65({\n instantiateWasm: moduleInstFn('cc65'),\n noInitialRun: true,\n //logReadFiles:true,\n print: print_fn,\n printErr: match_fn,\n });\n var FS = CC65.FS;\n setupFS(FS, '65-' + getRootBasePlatform(step.platform));\n populateFiles(step, FS, {\n mainFilePath: step.path,\n processFn: (path, code) => {\n if (typeof code === 'string') {\n code = processIncbin(code);\n }\n return code;\n }\n });\n fixParamsWithDefines(step.path, params);\n var args = [\n '-I', '/share/include',\n '-I', '.',\n \"-D\", \"__8BITWORKSHOP__\",\n ];\n if (params.define) {\n params.define.forEach((x) => args.push('-D' + x));\n }\n if (step.mainfile) {\n args.unshift.apply(args, [\"-D\", \"__MAIN__\"]);\n }\n var customArgs = params.extra_compiler_args || ['-T', '-g', '-Oirs', '-Cl', '-W', '-pointer-sign,-no-effect'];\n args = args.concat(customArgs, args);\n args.push(step.path);\n //console.log(args);\n execMain(step, CC65, args);\n if (errors.length)\n return { errors: errors };\n var asmout = FS.readFile(destpath, { encoding: 'utf8' });\n putWorkFile(destpath, asmout);\n }\n return {\n nexttool: \"ca65\",\n path: destpath,\n args: [destpath],\n files: [destpath],\n };\n}\n\n", "import { CodeListingMap, WorkerError } from \"../../common/workertypes\";\nimport { re_crlf, BuildStep, BuildStepResult, load, msvcErrorMatcher, emglobal, populateFiles, execMain, putWorkFile, anyTargetChanged, re_msvc, gatherFiles, getWorkFileAsString, print_fn, setupFS, setupStdin, staleFiles } from \"../workermain\";\nimport { EmscriptenModule } from \"../workermain\"\n\nfunction parseDASMListing(lstpath: string, lsttext: string, listings: CodeListingMap, errors: WorkerError[], unresolved: {}) {\n // TODO: this gets very slow\n // TODO: macros that are on adjacent lines don't get offset addresses\n // 4 08ee\t\t a9 00\t start lda\t#01workermain.js:23:5\n let lineMatch = /\\s*(\\d+)\\s+(\\S+)\\s+([0-9a-f]+)\\s+([?0-9a-f][?0-9a-f ]+)?\\s+(.+)?/i;\n let equMatch = /\\bequ\\b/i;\n let macroMatch = /\\bMAC\\s+(\\S+)?/i;\n let lastline = 0;\n let macros = {};\n let lstline = 0;\n let lstlist = listings[lstpath];\n for (let line of lsttext.split(re_crlf)) {\n lstline++;\n let linem = lineMatch.exec(line + \" \");\n if (linem && linem[1] != null) {\n let linenum = parseInt(linem[1]);\n let filename = linem[2];\n let offset = parseInt(linem[3], 16);\n let insns = linem[4];\n let restline = linem[5];\n if (insns && insns.startsWith('?')) insns = null;\n // don't use listing yet\n if (lstlist && lstlist.lines) {\n lstlist.lines.push({\n line: lstline,\n offset: offset,\n insns: insns,\n iscode: true,\n });\n }\n // inside of a file?\n let lst = listings[filename];\n if (lst) {\n var lines = lst.lines;\n // look for MAC statement\n let macmatch = macroMatch.exec(restline);\n if (macmatch) {\n macros[macmatch[1]] = { line: parseInt(linem[1]), file: linem[2].toLowerCase() };\n }\n else if (insns && restline && !restline.match(equMatch)) {\n lines.push({\n line: linenum,\n offset: offset,\n insns: insns,\n iscode: restline[0] != '.'\n });\n }\n lastline = linenum;\n } else {\n // inside of macro?\n let mac = macros[filename.toLowerCase()];\n // macro invocation in main file\n if (mac && linenum == 0) {\n lines.push({\n line: lastline + 1,\n offset: offset,\n insns: insns,\n iscode: true\n });\n }\n if (insns && mac) {\n let maclst = listings[mac.file];\n if (maclst && maclst.lines) {\n maclst.lines.push({\n path: mac.file,\n line: mac.line + linenum,\n offset: offset,\n insns: insns,\n iscode: true\n });\n }\n // TODO: a listing file can't include other files\n } else {\n // inside of macro or include file\n if (insns && linem[3] && lastline > 0) {\n lines.push({\n line: lastline + 1,\n offset: offset,\n insns: null\n });\n }\n }\n }\n // TODO: better symbol test (word boundaries)\n // TODO: ignore IFCONST and IFNCONST usage\n for (let key in unresolved) {\n let l = restline || line;\n // find the identifier substring\n let pos = l.indexOf(key);\n if (pos >= 0) {\n // strip the comment, if any\n let cmt = l.indexOf(';');\n if (cmt < 0 || cmt > pos) {\n // make sure identifier is flanked by non-word chars\n if (new RegExp(\"\\\\b\" + key + \"\\\\b\").exec(l)) {\n errors.push({\n path: filename,\n line: linenum,\n msg: \"Unresolved symbol '\" + key + \"'\"\n });\n }\n }\n }\n }\n }\n let errm = re_msvc.exec(line);\n if (errm) {\n errors.push({\n path: errm[1],\n line: parseInt(errm[2]),\n msg: errm[4]\n })\n }\n }\n}\n\nexport function assembleDASM(step: BuildStep): BuildStepResult {\n load(\"dasm\");\n var re_usl = /(\\w+)\\s+0000\\s+[?][?][?][?]/;\n var unresolved = {};\n var errors = [];\n var errorMatcher = msvcErrorMatcher(errors);\n function match_fn(s: string) {\n // TODO: what if s is not string? (startsWith is not a function)\n var matches = re_usl.exec(s);\n if (matches) {\n var key = matches[1];\n if (key != 'NO_ILLEGAL_OPCODES') { // TODO\n unresolved[matches[1]] = 0;\n }\n } else if (s.startsWith(\"Warning:\")) {\n errors.push({ line: 0, msg: s.substr(9) });\n } else if (s.startsWith(\"unable \")) {\n errors.push({ line: 0, msg: s });\n } else if (s.startsWith(\"segment: \")) {\n errors.push({ line: 0, msg: \"Segment overflow: \" + s.substring(9) });\n } else if (s.toLowerCase().indexOf('error:') >= 0) {\n errors.push({ line: 0, msg: s.trim() });\n } else {\n errorMatcher(s);\n }\n }\n var Module: EmscriptenModule = emglobal.DASM({\n noInitialRun: true,\n print: match_fn\n });\n var FS = Module.FS;\n populateFiles(step, FS, {\n mainFilePath: 'main.a'\n });\n var binpath = step.prefix + '.bin';\n var lstpath = step.prefix + '.lst';\n var sympath = step.prefix + '.sym';\n execMain(step, Module, [step.path, '-f3',\n \"-l\" + lstpath,\n \"-o\" + binpath,\n \"-s\" + sympath]);\n var alst = FS.readFile(lstpath, { 'encoding': 'utf8' });\n // parse main listing, get errors and listings for each file\n var listings: CodeListingMap = {};\n //listings[lstpath] = {lines:[], text:alst};\n for (let path of step.files) {\n listings[path] = { lines: [] };\n }\n parseDASMListing(lstpath, alst, listings, errors, unresolved);\n if (errors.length) {\n return { errors: errors };\n }\n // read binary rom output and symbols\n var aout, asym;\n aout = FS.readFile(binpath);\n try {\n asym = FS.readFile(sympath, { 'encoding': 'utf8' });\n } catch (e) {\n console.log(e);\n errors.push({ line: 0, msg: \"No symbol table generated, maybe segment overflow?\" });\n return { errors: errors }\n }\n putWorkFile(binpath, aout);\n putWorkFile(lstpath, alst);\n putWorkFile(sympath, asym);\n // return unchanged if no files changed\n // TODO: what if listing or symbols change?\n if (!anyTargetChanged(step, [binpath/*, lstpath, sympath*/]))\n return;\n var symbolmap = {};\n for (var s of asym.split(\"\\n\")) {\n var toks = s.split(/\\s+/);\n if (toks && toks.length >= 2 && !toks[0].startsWith('-')) {\n symbolmap[toks[0]] = parseInt(toks[1], 16);\n }\n }\n // for bataribasic (TODO)\n if (step['bblines']) {\n let lst = listings[step.path];\n if (lst) {\n lst.asmlines = lst.lines;\n lst.text = alst;\n lst.lines = [];\n }\n }\n return {\n output: aout,\n listings: listings,\n errors: errors,\n symbolmap: symbolmap,\n };\n}\n\n\nfunction preprocessBatariBasic(code: string): string {\n load(\"bbpreprocess\");\n var bbout = \"\";\n function addbbout_fn(s) {\n bbout += s;\n bbout += \"\\n\";\n }\n var BBPRE: EmscriptenModule = emglobal.preprocess({\n noInitialRun: true,\n //logReadFiles:true,\n print: addbbout_fn,\n printErr: print_fn,\n noFSInit: true,\n });\n var FS = BBPRE.FS;\n setupStdin(FS, code);\n BBPRE.callMain([]);\n console.log(\"preprocess \" + code.length + \" -> \" + bbout.length + \" bytes\");\n return bbout;\n}\n\nexport function compileBatariBasic(step: BuildStep): BuildStepResult {\n load(\"bb2600basic\");\n var params = step.params;\n // stdout\n var asmout = \"\";\n function addasmout_fn(s) {\n asmout += s;\n asmout += \"\\n\";\n }\n // stderr\n var re_err1 = /[(](\\d+)[)]:?\\s*(.+)/;\n var errors = [];\n var errline = 0;\n function match_fn(s) {\n console.log(s);\n var matches = re_err1.exec(s);\n if (matches) {\n errline = parseInt(matches[1]);\n errors.push({\n line: errline,\n msg: matches[2]\n });\n }\n }\n gatherFiles(step, { mainFilePath: \"main.bas\" });\n var destpath = step.prefix + '.asm';\n if (staleFiles(step, [destpath])) {\n var BB: EmscriptenModule = emglobal.bb2600basic({\n noInitialRun: true,\n //logReadFiles:true,\n print: addasmout_fn,\n printErr: match_fn,\n noFSInit: true,\n TOTAL_MEMORY: 64 * 1024 * 1024,\n });\n var FS = BB.FS;\n populateFiles(step, FS);\n // preprocess, pipe file to stdin\n var code = getWorkFileAsString(step.path);\n code = preprocessBatariBasic(code);\n setupStdin(FS, code);\n setupFS(FS, '2600basic');\n execMain(step, BB, [\"-i\", \"/share\", step.path]);\n if (errors.length)\n return { errors: errors };\n // build final assembly output from include file list\n var includesout = FS.readFile(\"includes.bB\", { encoding: 'utf8' });\n var redefsout = FS.readFile(\"2600basic_variable_redefs.h\", { encoding: 'utf8' });\n var includes = includesout.trim().split(\"\\n\");\n var combinedasm = \"\";\n var splitasm = asmout.split(\"bB.asm file is split here\");\n for (var incfile of includes) {\n var inctext;\n if (incfile == \"bB.asm\")\n inctext = splitasm[0];\n else if (incfile == \"bB2.asm\")\n inctext = splitasm[1];\n else\n inctext = FS.readFile(\"/share/includes/\" + incfile, { encoding: 'utf8' });\n console.log(incfile, inctext.length);\n combinedasm += \"\\n\\n;;;\" + incfile + \"\\n\\n\";\n combinedasm += inctext;\n }\n // TODO: ; bB.asm file is split here\n putWorkFile(destpath, combinedasm);\n putWorkFile(\"2600basic.h\", FS.readFile(\"/share/includes/2600basic.h\"));\n putWorkFile(\"2600basic_variable_redefs.h\", redefsout);\n }\n return {\n nexttool: \"dasm\",\n path: destpath,\n args: [destpath],\n files: [destpath, \"2600basic.h\", \"2600basic_variable_redefs.h\"],\n bblines: true,\n };\n}", "import { CodeListingMap } from \"../../common/workertypes\";\nimport { BuildStep, BuildStepResult, loadNative, gatherFiles, staleFiles, emglobal, moduleInstFn, populateFiles, execMain, putWorkFile, setupFS, populateExtraFiles, anyTargetChanged, parseListing, print_fn, msvcErrorMatcher, getWorkFileAsString, setupStdin, preprocessMCPP, parseSourceLines } from \"../workermain\";\nimport { EmscriptenModule } from \"../workermain\"\n\nfunction hexToArray(s, ofs) {\n var buf = new ArrayBuffer(s.length / 2);\n var arr = new Uint8Array(buf);\n for (var i = 0; i < arr.length; i++) {\n arr[i] = parseInt(s.slice(i * 2 + ofs, i * 2 + ofs + 2), 16);\n }\n return arr;\n}\n\nfunction parseIHX(ihx, rom_start, rom_size, errors) {\n var output = new Uint8Array(new ArrayBuffer(rom_size));\n var high_size = 0;\n for (var s of ihx.split(\"\\n\")) {\n if (s[0] == ':') {\n var arr = hexToArray(s, 1);\n var count = arr[0];\n var address = (arr[1] << 8) + arr[2] - rom_start;\n var rectype = arr[3];\n //console.log(rectype,address.toString(16),count,arr);\n if (rectype == 0) {\n for (var i = 0; i < count; i++) {\n var b = arr[4 + i];\n output[i + address] = b;\n }\n if (i + address > high_size) high_size = i + address;\n } else if (rectype == 1) {\n break;\n } else {\n console.log(s); // unknown record type\n }\n }\n }\n // TODO: return ROM anyway?\n if (high_size > rom_size) {\n //errors.push({line:0, msg:\"ROM size too large: 0x\" + high_size.toString(16) + \" > 0x\" + rom_size.toString(16)});\n }\n return output;\n}\n\nexport function assembleSDASZ80(step: BuildStep): BuildStepResult {\n loadNative(\"sdasz80\");\n var objout, lstout, symout;\n var errors = [];\n gatherFiles(step, { mainFilePath: \"main.asm\" });\n var objpath = step.prefix + \".rel\";\n var lstpath = step.prefix + \".lst\";\n if (staleFiles(step, [objpath, lstpath])) {\n //?ASxxxx-Error-<o> in line 1 of main.asm null\n // <o> .org in REL area or directive / mnemonic error\n // ?ASxxxx-Error-<q> in line 1627 of cosmic.asm\n // <q> missing or improper operators, terminators, or delimiters\n var match_asm_re1 = / in line (\\d+) of (\\S+)/; // TODO\n var match_asm_re2 = / <\\w> (.+)/; // TODO\n var errline = 0;\n var errpath = step.path;\n var match_asm_fn = (s: string) => {\n var m = match_asm_re1.exec(s);\n if (m) {\n errline = parseInt(m[1]);\n errpath = m[2];\n } else {\n m = match_asm_re2.exec(s);\n if (m) {\n errors.push({\n line: errline,\n path: errpath,\n msg: m[1]\n });\n }\n }\n }\n var ASZ80: EmscriptenModule = emglobal.sdasz80({\n instantiateWasm: moduleInstFn('sdasz80'),\n noInitialRun: true,\n //logReadFiles:true,\n print: match_asm_fn,\n printErr: match_asm_fn,\n });\n var FS = ASZ80.FS;\n populateFiles(step, FS);\n execMain(step, ASZ80, ['-plosgffwy', step.path]);\n if (errors.length) {\n return { errors: errors };\n }\n objout = FS.readFile(objpath, { encoding: 'utf8' });\n lstout = FS.readFile(lstpath, { encoding: 'utf8' });\n putWorkFile(objpath, objout);\n putWorkFile(lstpath, lstout);\n }\n return {\n linktool: \"sdldz80\",\n files: [objpath, lstpath],\n args: [objpath]\n };\n //symout = FS.readFile(\"main.sym\", {encoding:'utf8'});\n}\n\nexport function linkSDLDZ80(step: BuildStep) {\n loadNative(\"sdldz80\");\n var errors = [];\n gatherFiles(step);\n var binpath = \"main.ihx\";\n if (staleFiles(step, [binpath])) {\n //?ASlink-Warning-Undefined Global '__divsint' referenced by module 'main'\n var match_aslink_re = /\\?ASlink-(\\w+)-(.+)/;\n var match_aslink_fn = (s: string) => {\n var matches = match_aslink_re.exec(s);\n if (matches) {\n errors.push({\n line: 0,\n msg: matches[2]\n });\n }\n }\n var params = step.params;\n var LDZ80: EmscriptenModule = emglobal.sdldz80({\n instantiateWasm: moduleInstFn('sdldz80'),\n noInitialRun: true,\n //logReadFiles:true,\n print: match_aslink_fn,\n printErr: match_aslink_fn,\n });\n var FS = LDZ80.FS;\n setupFS(FS, 'sdcc');\n populateFiles(step, FS);\n populateExtraFiles(step, FS, params.extra_link_files);\n // TODO: coleco hack so that -u flag works\n if (step.platform.startsWith(\"coleco\")) {\n FS.writeFile('crt0.rel', FS.readFile('/share/lib/coleco/crt0.rel', { encoding: 'utf8' }));\n FS.writeFile('crt0.lst', '\\n'); // TODO: needed so -u flag works\n }\n var args = ['-mjwxyu',\n '-i', 'main.ihx', // TODO: main?\n '-b', '_CODE=0x' + params.code_start.toString(16),\n '-b', '_DATA=0x' + params.data_start.toString(16),\n '-k', '/share/lib/z80',\n '-l', 'z80'];\n if (params.extra_link_args)\n args.push.apply(args, params.extra_link_args);\n args.push.apply(args, step.args);\n //console.log(args);\n execMain(step, LDZ80, args);\n var hexout = FS.readFile(\"main.ihx\", { encoding: 'utf8' });\n var noiout = FS.readFile(\"main.noi\", { encoding: 'utf8' });\n putWorkFile(\"main.ihx\", hexout);\n putWorkFile(\"main.noi\", noiout);\n // return unchanged if no files changed\n if (!anyTargetChanged(step, [\"main.ihx\", \"main.noi\"]))\n return;\n // parse binary file\n var binout = parseIHX(hexout, params.rom_start !== undefined ? params.rom_start : params.code_start, params.rom_size, errors);\n if (errors.length) {\n return { errors: errors };\n }\n // parse listings\n var listings: CodeListingMap = {};\n for (var fn of step.files) {\n if (fn.endsWith('.lst')) {\n var rstout = FS.readFile(fn.replace('.lst', '.rst'), { encoding: 'utf8' });\n // 0000 21 02 00 [10] 52 \tld\thl, #2\n var asmlines = parseListing(rstout, /^\\s*([0-9A-F]{4})\\s+([0-9A-F][0-9A-F r]*[0-9A-F])\\s+\\[([0-9 ]+)\\]?\\s+(\\d+) (.*)/i, 4, 1, 2, 3);\n var srclines = parseSourceLines(rstout, /^\\s+\\d+ ;<stdin>:(\\d+):/i, /^\\s*([0-9A-F]{4})/i);\n putWorkFile(fn, rstout);\n // TODO: you have to get rid of all source lines to get asm listing\n listings[fn] = {\n asmlines: srclines.length ? asmlines : null,\n lines: srclines.length ? srclines : asmlines,\n text: rstout\n };\n }\n }\n // parse symbol map\n var symbolmap = {};\n for (var s of noiout.split(\"\\n\")) {\n var toks = s.split(\" \");\n if (toks[0] == 'DEF' && !toks[1].startsWith(\"A$\")) {\n symbolmap[toks[1]] = parseInt(toks[2], 16);\n }\n }\n // build segment map\n var seg_re = /^s__(\\w+)$/;\n var segments = [];\n // TODO: use stack params for stack segment\n for (let ident in symbolmap) {\n let m = seg_re.exec(ident);\n if (m) {\n let seg = m[1];\n let segstart = symbolmap[ident]; // s__SEG\n let segsize = symbolmap['l__' + seg]; // l__SEG\n if (segstart >= 0 && segsize > 0) {\n var type = null;\n if (['INITIALIZER', 'GSINIT', 'GSFINAL'].includes(seg)) type = 'rom';\n else if (seg.startsWith('CODE')) type = 'rom';\n else if (['DATA', 'INITIALIZED'].includes(seg)) type = 'ram';\n if (type == 'rom' || segstart > 0) // ignore HEADER0, CABS0, etc (TODO?)\n segments.push({ name: seg, start: segstart, size: segsize, type: type });\n }\n }\n }\n return {\n output: binout,\n listings: listings,\n errors: errors,\n symbolmap: symbolmap,\n segments: segments\n };\n }\n}\n\nexport function compileSDCC(step: BuildStep): BuildStepResult {\n\n gatherFiles(step, {\n mainFilePath: \"main.c\" // not used\n });\n var outpath = step.prefix + \".asm\";\n if (staleFiles(step, [outpath])) {\n var errors = [];\n var params = step.params;\n loadNative('sdcc');\n var SDCC: EmscriptenModule = emglobal.sdcc({\n instantiateWasm: moduleInstFn('sdcc'),\n noInitialRun: true,\n noFSInit: true,\n print: print_fn,\n printErr: msvcErrorMatcher(errors),\n //TOTAL_MEMORY:256*1024*1024,\n });\n var FS = SDCC.FS;\n populateFiles(step, FS);\n // load source file and preprocess\n var code = getWorkFileAsString(step.path);\n var preproc = preprocessMCPP(step, 'sdcc');\n if (preproc.errors) {\n return { errors: preproc.errors };\n }\n else code = preproc.code;\n // pipe file to stdin\n setupStdin(FS, code);\n setupFS(FS, 'sdcc');\n var args = ['--vc', '--std-sdcc99', '-mz80', //'-Wall',\n '--c1mode',\n //'--debug',\n //'-S', 'main.c',\n //'--asm=sdasz80',\n //'--reserve-regs-iy',\n '--less-pedantic',\n ///'--fomit-frame-pointer',\n //'--opt-code-speed',\n //'--max-allocs-per-node', '1000',\n //'--cyclomatic',\n //'--nooverlay',\n //'--nogcse',\n //'--nolabelopt',\n //'--noinvariant',\n //'--noinduction',\n //'--nojtbound',\n //'--noloopreverse',\n '-o', outpath];\n // if \"#pragma opt_code\" found do not disable optimziations\n if (!/^\\s*#pragma\\s+opt_code/m.exec(code)) {\n args.push.apply(args, [\n '--oldralloc',\n '--no-peep',\n '--nolospre'\n ]);\n }\n if (params.extra_compile_args) {\n args.push.apply(args, params.extra_compile_args);\n }\n execMain(step, SDCC, args);\n // TODO: preprocessor errors w/ correct file\n if (errors.length /* && nwarnings < msvc_errors.length*/) {\n return { errors: errors };\n }\n // massage the asm output\n var asmout = FS.readFile(outpath, { encoding: 'utf8' });\n asmout = \" .area _HOME\\n .area _CODE\\n .area _INITIALIZER\\n .area _DATA\\n .area _INITIALIZED\\n .area _BSEG\\n .area _BSS\\n .area _HEAP\\n\" + asmout;\n putWorkFile(outpath, asmout);\n }\n return {\n nexttool: \"sdasz80\",\n path: outpath,\n args: [outpath],\n files: [outpath],\n };\n}\n", "\ntype Endian = 'big' | 'little';\n\ntype Symbol = {\n value: number\n}\n\ntype AssemblerVar = {\n bits : number,\n toks : string[],\n endian? : Endian,\n iprel? : boolean,\n ipofs? : number,\n ipmul? : number,\n}\n\ntype AssemblerRuleSlice = {\n a : number; // argument index\n b : number; // bit index\n n : number; // # of bits\n}\n\ntype AssemblerRule = {\n fmt : string,\n bits : (string | number | AssemblerRuleSlice)[],\n // added at runtime\n re? : RegExp,\n prefix? : string,\n varlist? : string[]\n}\n\ntype AssemblerVarList = {[name:string] : AssemblerVar};\n\ntype AssemblerLine = {line:number, offset:number, nbits:number, insns?:string};\n\ntype AssemblerFixup = {\n sym:string,\n ofs:number,\n size:number;\n srcofs:number,\n dstofs:number,\n dstlen:number,\n line:number,\n iprel:boolean,\n ipofs:number,\n ipmul:number,\n endian:Endian\n};\n\ntype AssemblerSpec = {\n name : string,\n width : number,\n vars : AssemblerVarList,\n rules : AssemblerRule[]\n}\n\ntype AssemblerInstruction = {opcode:number, nbits : number};\ntype AssemblerErrorResult = {error:string};\ntype AssemblerLineResult = AssemblerErrorResult | AssemblerInstruction;\n\ntype AssemblerError = {msg:string, line:number};\n\ntype AssemblerState = {\n ip: number,\n line: number,\n origin: number,\n codelen: number,\n intermediate: any,\n output: number[],\n lines: AssemblerLine[],\n errors: AssemblerError[],\n fixups: AssemblerFixup[]\n}\n\nconst isError = (o: AssemblerLineResult): o is AssemblerErrorResult => (<AssemblerErrorResult>o).error !== undefined\n\nfunction hex(v:number, nd:number) {\n try {\n if (!nd) nd = 2;\n if (nd == 8) {\n return hex((v>>16)&0xffff,4) + hex(v&0xffff,4);\n }\n var s = v.toString(16).toUpperCase();\n while (s.length < nd)\n s = \"0\" + s;\n return s;\n } catch (e) {\n return v+\"\";\n }\n}\n\nfunction stringToData(s:string) : number[] {\n var data = [];\n for (var i=0; i<s.length; i++) {\n data[i] = s.charCodeAt(i);\n }\n return data;\n}\n\n\nexport class Assembler {\n spec : AssemblerSpec;\n ip = 0;\n origin = 0;\n linenum = 0;\n symbols : {[name:string] : Symbol} = {};\n errors : AssemblerError[] = [];\n outwords : number[] = [];\n asmlines : AssemblerLine[] = [];\n fixups : AssemblerFixup[] = [];\n width = 8;\n codelen = 0;\n aborted = false;\n \n constructor(spec? : AssemblerSpec) {\n this.spec = spec;\n if (spec) {\n this.preprocessRules();\n }\n }\n\n rule2regex(rule : AssemblerRule, vars : AssemblerVarList) {\n var s = rule.fmt;\n if (!s || !(typeof s === 'string'))\n throw Error('Each rule must have a \"fmt\" string field');\n if (!rule.bits || !(rule.bits instanceof Array))\n throw Error('Each rule must have a \"bits\" array field');\n var varlist = [];\n rule.prefix = s.split(/\\s+/)[0];\n s = s.replace(/\\+/g, '\\\\+');\n s = s.replace(/\\*/g, '\\\\*');\n s = s.replace(/\\s+/g, '\\\\s+');\n s = s.replace(/\\[/g, '\\\\[');\n s = s.replace(/\\]/g, '\\\\]');\n s = s.replace(/\\(/g, '\\\\(');\n s = s.replace(/\\)/g, '\\\\)');\n s = s.replace(/\\./g, '\\\\.');\n // TODO: more escapes?\n s = s.replace(/~\\w+/g, (varname:string) => {\n varname = varname.substr(1);\n var v = vars[varname];\n varlist.push(varname);\n if (!v)\n throw Error('Could not find variable definition for \"~' + varname + '\"');\n else if (v.toks)\n return '(\\\\w+)';\n else\n return '([0-9]+|[$][0-9a-f]+|\\\\w+)';\n });\n try {\n rule.re = new RegExp('^'+s+'$', 'i');\n } catch (e) {\n throw Error(\"Bad regex for rule \\\"\" + rule.fmt + \"\\\": /\" + s + \"/ -- \" + e);\n }\n rule.varlist = varlist;\n // TODO: check rule constraints\n return rule;\n }\n\n preprocessRules() {\n if (this.spec.width) {\n this.width = this.spec.width || 8;\n }\n for (var rule of this.spec.rules) {\n this.rule2regex(rule, this.spec.vars);\n }\n }\n warning(msg:string, line?:number) {\n this.errors.push({msg:msg, line:line?line:this.linenum});\n }\n fatal(msg:string, line?:number) {\n this.warning(msg, line);\n this.aborted = true;\n }\n fatalIf(msg?:string, line?:number) {\n if (msg) this.fatal(msg, line);\n }\n addBytes(result:AssemblerInstruction) {\n this.asmlines.push({\n line:this.linenum,\n offset:this.ip,\n nbits:result.nbits\n });\n var op = result.opcode;\n var nb = result.nbits/this.width;\n for (var i=0; i<nb; i++) {\n if (this.width < 32)\n this.outwords[this.ip++ - this.origin] = (op >> (nb-1-i)*this.width) & ((1<<this.width)-1);\n else\n this.outwords[this.ip++ - this.origin] = op;\n }\n }\n addWords(data:number[]) {\n this.asmlines.push({\n line:this.linenum,\n offset:this.ip,\n nbits:this.width*data.length\n });\n for (var i=0; i<data.length; i++) {\n if (this.width < 32)\n this.outwords[this.ip++ - this.origin] = data[i] & ((1<<this.width)-1);\n else\n this.outwords[this.ip++ - this.origin] = data[i];\n }\n }\n\n parseData(toks:string[]) : number[] {\n var data = [];\n for (var i=0; i<toks.length; i++) {\n data[i] = this.parseConst(toks[i]);\n }\n return data;\n }\n\n alignIP(align) {\n if (align < 1 || align > this.codelen)\n this.fatal(\"Invalid alignment value\");\n else\n this.ip = Math.floor((this.ip+align-1)/align)*align;\n }\n\n parseConst(s:string, nbits?:number) : number {\n // TODO: check bit length\n if (s && s[0] == '$')\n return parseInt(s.substr(1), 16);\n else\n return parseInt(s);\n }\n\n swapEndian(x: number, nbits: number) {\n var y = 0;\n while (nbits > 0) {\n var n = Math.min(nbits, this.width);\n var mask = (1 << n) - 1;\n y <<= n;\n y |= (x & mask);\n x >>>= n;\n nbits -= n;\n }\n return y;\n }\n\n buildInstruction(rule:AssemblerRule, m:string[]) : AssemblerLineResult {\n var opcode = 0;\n var oplen = 0;\n // iterate over each component of the rule output (\"bits\")\n for (let b of rule.bits) {\n let n,x;\n // is a string? then it's a bit constant\n // TODO\n if (typeof b === \"string\") {\n n = b.length;\n x = parseInt(b,2);\n } else {\n // is it a slice {a,b,n} or just a number?\n var index = typeof b === \"number\" ? b : b.a;\n // it's an indexed variable, look up its variable\n var id = m[index+1];\n var v = this.spec.vars[rule.varlist[index]];\n if (!v) {\n return {error:`Could not find matching identifier for '${m[0]}' index ${index}`};\n }\n n = v.bits;\n var shift = 0;\n if (typeof b !== \"number\") {\n n = b.n;\n shift = b.b;\n }\n // is it an enumerated type? look up the index of its keyword\n if (v.toks) {\n x = v.toks.indexOf(id);\n if (x < 0)\n return {error:\"Can't use '\" + id + \"' here, only one of: \" + v.toks.join(', ')};\n } else {\n // otherwise, parse it as a constant\n x = this.parseConst(id, n);\n // is it a label? add fixup\n if (isNaN(x)) {\n this.fixups.push({\n sym:id, ofs:this.ip, size:v.bits, line:this.linenum,\n dstlen:n, dstofs:oplen, srcofs:shift,\n endian:v.endian,\n iprel:!!v.iprel, ipofs:(v.ipofs+0), ipmul:v.ipmul||1\n });\n x = 0;\n } else {\n var mask = (1<<v.bits)-1;\n if ((x&mask) != x)\n return {error:\"Value \" + x + \" does not fit in \" + v.bits + \" bits\"};\n }\n }\n // if little endian, we need to swap ordering\n if (v.endian == 'little') x = this.swapEndian(x, v.bits);\n // is it an array slice? slice the bits\n if (typeof b !== \"number\") {\n x = (x >>> shift) & ((1 << b.n)-1);\n }\n }\n opcode = (opcode << n) | x;\n oplen += n;\n }\n if (oplen == 0)\n this.warning(\"Opcode had zero length\");\n else if (oplen > 32)\n this.warning(\"Opcodes > 32 bits not supported\");\n else if ((oplen % this.width) != 0)\n this.warning(\"Opcode was not word-aligned (\" + oplen + \" bits)\");\n return {opcode:opcode, nbits:oplen};\n }\n\n loadArch(arch:string) : string {\n if (this.loadJSON) {\n var json = this.loadJSON(arch + \".json\");\n if (json && json.vars && json.rules) {\n this.spec = json;\n this.preprocessRules();\n } else {\n return (\"Could not load arch file '\" + arch + \".json'\");\n }\n }\n }\n\n parseDirective(tokens) {\n var cmd = tokens[0].toLowerCase();\n if (cmd == '.define')\n this.symbols[tokens[1].toLowerCase()] = {value:tokens[2]};\n else if (cmd == '.org')\n this.ip = this.origin = parseInt(tokens[1]);\n else if (cmd == '.len')\n this.codelen = parseInt(tokens[1]);\n else if (cmd == '.width')\n this.width = parseInt(tokens[1]);\n else if (cmd == '.arch')\n this.fatalIf(this.loadArch(tokens[1]));\n else if (cmd == '.include')\n this.fatalIf(this.loadInclude(tokens[1]));\n else if (cmd == '.module')\n this.fatalIf(this.loadModule(tokens[1]));\n else if (cmd == '.data')\n this.addWords(this.parseData(tokens.slice(1)));\n else if (cmd == '.string')\n this.addWords(stringToData(tokens.slice(1).join(' ')));\n else if (cmd == '.align')\n this.alignIP(this.parseConst(tokens[1]));\n else\n this.warning(\"Unrecognized directive: \" + tokens);\n }\n\n assemble(line:string) : AssemblerInstruction {\n this.linenum++;\n // remove comments\n line = line.replace(/[;].*/g, '').trim();\n // is it a directive?\n if (line[0] == '.') {\n var tokens = line.split(/\\s+/);\n this.parseDirective(tokens);\n return;\n }\n // make it lowercase\n line = line.toLowerCase();\n // find labels\n line = line.replace(/(\\w+):/, (_label, label) => {\n this.symbols[label] = {value:this.ip};\n return ''; // replace label with blank\n });\n line = line.trim();\n if (line == '')\n return; // empty line\n // look at each rule in order\n if (!this.spec) { this.fatal(\"Need to load .arch first\"); return; }\n var lastError;\n for (var rule of this.spec.rules) {\n var m = rule.re.exec(line);\n if (m) {\n var result = this.buildInstruction(rule, m);\n if (!isError(result)) {\n this.addBytes(result);\n return result;\n } else {\n lastError = result.error;\n }\n }\n }\n this.warning(lastError ? lastError : (\"Could not decode instruction: \" + line));\n }\n\n applyFixup(fix: AssemblerFixup, sym: Symbol) {\n var ofs = fix.ofs + Math.floor(fix.dstofs/this.width);\n var mask = ((1<<fix.size)-1);\n var value = this.parseConst(sym.value+\"\", fix.dstlen);\n if (fix.iprel)\n value = (value - fix.ofs) * fix.ipmul - fix.ipofs;\n if (fix.srcofs == 0 && (value > mask || value < -mask))\n this.warning(\"Symbol \" + fix.sym + \" (\" + value + \") does not fit in \" + fix.dstlen + \" bits\", fix.line);\n //console.log(hex(value,8), fix.srcofs, fix.dstofs, fix.dstlen);\n if (fix.srcofs > 0)\n value >>>= fix.srcofs;\n value &= (1 << fix.dstlen) - 1;\n // TODO: make it work for all widths\n if (this.width == 32) {\n var shift = 32 - fix.dstofs - fix.dstlen;\n value <<= shift;\n }\n // TODO: check range\n if (fix.size <= this.width) {\n this.outwords[ofs - this.origin] ^= value;\n } else {\n // swap if we want big endian (we'll apply in LSB first order)\n if (fix.endian == 'big') value = this.swapEndian(value, fix.size);\n // apply multi-byte fixup\n while (value) {\n if (value & this.outwords[ofs - this.origin]) {\n this.warning(\"Instruction bits overlapped: \" + hex(this.outwords[ofs - this.origin],8), hex(value,8));\n } else {\n this.outwords[ofs - this.origin] ^= value & ((1<<this.width)-1);\n }\n value >>>= this.width;\n ofs++;\n }\n }\n }\n\n finish() : AssemblerState {\n // apply fixups\n for (var i=0; i<this.fixups.length; i++) {\n var fix = this.fixups[i];\n var sym = this.symbols[fix.sym];\n if (sym) {\n this.applyFixup(fix, sym);\n } else {\n this.warning(\"Symbol '\" + fix.sym + \"' not found\");\n }\n }\n // update asmlines\n for (var i=0; i<this.asmlines.length; i++) {\n var al = this.asmlines[i];\n al.insns = '';\n for (var j=0; j<al.nbits/this.width; j++) {\n var word = this.outwords[al.offset + j - this.origin];\n if (j>0) al.insns += ' ';\n al.insns += hex(word,this.width/4);\n }\n }\n while (this.outwords.length < this.codelen) {\n this.outwords.push(0);\n }\n this.fixups = [];\n return this.state();\n }\n\n assembleFile(text) : AssemblerState {\n var lines = text.split(/\\n/g);\n for (var i=0; i<lines.length && !this.aborted; i++) {\n try {\n this.assemble(lines[i]);\n } catch (e) {\n console.log(e);\n this.fatal(\"Exception during assembly: \" + e);\n }\n }\n return this.finish();\n }\n\n state() : AssemblerState {\n return {ip:this.ip, line:this.linenum, origin:this.origin, codelen:this.codelen,\n intermediate:{}, // TODO: listing, symbols?\n output:this.outwords,\n lines:this.asmlines,\n errors:this.errors,\n fixups:this.fixups};\n }\n \n // methods to implement in subclass\n \n loadJSON : (path : string) => any;\n loadInclude : (path : string) => string;\n loadModule : (path : string) => string;\n}\n\n", "import { SourceLocation } from \"../workertypes\";\n\nexport interface HDLModuleRunner {\n state: any; // live state or proxy object\n eval() : void;\n tick() : void;\n tick2(iters: number) : void;\n powercycle() : void;\n isFinished() : boolean;\n isStopped() : boolean;\n getGlobals() : {};\n saveState() : {};\n loadState(state: {}) : void;\n dispose() : void;\n getFileData : (filename : string) => string|Uint8Array;\n}\n\nexport interface HDLModuleTrace extends HDLModuleRunner {\n trace: any;\n resetTrace() : void;\n nextTrace() : void;\n}\n\n///\n\nexport interface HDLLogicType extends HDLSourceObject {\n left: number;\n right: number;\n signed: boolean;\n}\n\nexport interface HDLUnpackArray extends HDLSourceObject {\n subtype: HDLDataType;\n low: HDLConstant;\n high: HDLConstant;\n}\n\nexport interface HDLNativeType extends HDLSourceObject {\n jstype: string;\n}\n\nexport type HDLDataType = HDLLogicType | HDLUnpackArray | HDLNativeType;\n\nexport function isLogicType(arg:any): arg is HDLLogicType {\n return typeof arg.left === 'number' && typeof arg.right === 'number';\n}\n\nexport function isArrayType(arg:any): arg is HDLUnpackArray {\n return arg.subtype != null && arg.low != null && arg.high != null\n && typeof arg.low.cvalue === 'number' && typeof arg.high.cvalue === 'number';\n}\n\nexport class HDLFile {\n id: string;\n filename: string;\n isModule: boolean;\n}\n\nexport interface HDLSourceLocation extends SourceLocation {\n hdlfile: HDLFile;\n end_line?: number;\n}\n\nexport interface HDLSourceObject {\n $loc?: HDLSourceLocation;\n}\n\nexport interface HDLDataTypeObject extends HDLSourceObject {\n dtype: HDLDataType;\n}\n\nexport function hasDataType(arg: any) : arg is HDLDataTypeObject {\n return typeof arg.dtype === 'object';\n}\n\nexport interface HDLModuleDef extends HDLSourceObject {\n name: string;\n origName: string;\n blocks: HDLBlock[];\n instances: HDLInstanceDef[];\n vardefs: { [id:string] : HDLVariableDef };\n}\n\nexport interface HDLVariableDef extends HDLDataTypeObject {\n name: string;\n origName: string;\n isInput: boolean;\n isOutput: boolean;\n isParam: boolean;\n constValue?: HDLConstant;\n initValue?: HDLBlock;\n}\n\nexport function isVarDecl(arg:any): arg is HDLVariableDef {\n return typeof arg.isParam !== 'undefined';\n}\n\nexport interface HDLConstant extends HDLDataTypeObject {\n cvalue: number;\n bigvalue: bigint;\n}\n\nexport function isConstExpr(arg:any): arg is HDLConstant {\n return typeof arg.cvalue === 'number';\n}\n\nexport function isBigConstExpr(arg:any): arg is HDLConstant {\n return typeof arg.bigvalue === 'bigint';\n}\n\nexport interface HDLHierarchyDef extends HDLSourceObject {\n name: string;\n module: HDLModuleDef;\n parent: HDLHierarchyDef;\n children: HDLHierarchyDef[];\n}\n\nexport interface HDLInstanceDef extends HDLSourceObject {\n name: string;\n origName: string;\n module: HDLModuleDef;\n ports: HDLPort[];\n}\n\nexport interface HDLVarRef extends HDLDataTypeObject {\n refname: string;\n //TODO? vardef: HDLVariableDef;\n}\n\nexport function isVarRef(arg:any): arg is HDLVarRef {\n return arg.refname != null;\n}\n\nexport interface HDLUnop extends HDLDataTypeObject {\n op: string;\n left: HDLExpr;\n}\n\nexport interface HDLExtendop extends HDLUnop {\n width: number;\n widthminv: number;\n}\n\nexport function isUnop(arg:any): arg is HDLUnop {\n return arg.op != null && arg.left != null && arg.right == null;\n}\n\nexport interface HDLBinop extends HDLUnop {\n right: HDLExpr;\n}\n\nexport function isBinop(arg:any): arg is HDLBinop {\n return arg.op != null && arg.left != null && arg.right != null && arg.cond == null;\n}\n\nexport interface HDLTriop extends HDLBinop {\n cond: HDLExpr;\n}\n\nexport function isTriop(arg:any): arg is HDLTriop {\n return arg.op != null && arg.cond != null;\n}\n\nexport interface HDLWhileOp extends HDLDataTypeObject {\n op: 'while';\n precond: HDLExpr;\n loopcond: HDLExpr;\n body: HDLExpr;\n inc: HDLExpr;\n}\n\nexport function isWhileop(arg:any): arg is HDLWhileOp {\n return arg.op === 'while' && arg.loopcond != null;\n}\n\nexport interface HDLBlock extends HDLSourceObject {\n blocktype: string;\n name: string;\n exprs: HDLExpr[];\n}\n\nexport function isBlock(arg:any): arg is HDLBlock {\n return arg.blocktype != null;\n}\n\nexport interface HDLAlwaysBlock extends HDLBlock {\n senlist: HDLSensItem[];\n}\n\nexport interface HDLSensItem extends HDLSourceObject {\n edgeType : \"POS\" | \"NEG\";\n expr: HDLExpr;\n}\n\nexport interface HDLPort extends HDLSourceObject {\n name: string;\n expr: HDLExpr;\n}\n\nexport interface HDLFuncCall extends HDLDataTypeObject {\n funcname: string;\n args: HDLExpr[];\n}\n\nexport function isFuncCall(arg:any): arg is HDLFuncCall {\n return typeof arg.funcname === 'string';\n}\n\nexport interface HDLArrayItem {\n index: number;\n expr: HDLExpr;\n}\n\nexport function isArrayItem(arg:any): arg is HDLArrayItem {\n return typeof arg.index === 'number' && arg.expr != null;\n}\n\nexport type HDLExpr = HDLVarRef | HDLUnop | HDLBinop | HDLTriop | HDLBlock | HDLVariableDef | HDLFuncCall | HDLConstant;\n\nexport interface HDLUnit {\n files: { [id: string]: HDLFile };\n dtypes: { [id: string]: HDLDataType };\n modules: { [id: string]: HDLModuleDef };\n hierarchies: { [id: string]: HDLHierarchyDef };\n}\n\nexport type HDLValue = number | bigint | Uint8Array | Uint16Array | Uint32Array | HDLValue[];\n\n", "\nimport { parseXMLPoorly, XMLNode } from \"../util\";\nimport { HDLAlwaysBlock, HDLArrayItem, HDLBinop, HDLBlock, HDLConstant, HDLDataType, HDLDataTypeObject, HDLExpr, HDLExtendop, HDLFile, HDLFuncCall, HDLHierarchyDef, HDLInstanceDef, HDLLogicType, HDLModuleDef, HDLNativeType, HDLPort, HDLSensItem, HDLSourceLocation, HDLSourceObject, HDLTriop, HDLUnit, HDLUnop, HDLUnpackArray, HDLValue, HDLVariableDef, HDLVarRef, HDLWhileOp, isArrayType, isBinop, isBlock, isConstExpr, isFuncCall, isLogicType, isTriop, isUnop, isVarDecl, isVarRef } from \"./hdltypes\";\n\n/**\n * Whaa?\n * \n * Each hierarchy takes (uint32[] -> uint32[])\n * - convert to/from js object\n * - JS or WASM\n * - Fixed-size packets\n * - state is another uint32[]\n * Find optimal packing of bits\n * Find clocks\n * Find pivots (reset, state) concat them together\n * Dependency cycles\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer\n */\n\n export class CompileError extends Error implements HDLSourceObject {\n $loc: HDLSourceLocation;\n constructor($loc: HDLSourceLocation, msg: string) {\n super(msg);\n this.$loc = $loc;\n Object.setPrototypeOf(this, CompileError.prototype);\n }\n}\n\nexport class VerilogXMLParser implements HDLUnit {\n\n files: { [id: string]: HDLFile } = {};\n dtypes: { [id: string]: HDLDataType } = {};\n modules: { [id: string]: HDLModuleDef } = {};\n hierarchies: { [id: string]: HDLHierarchyDef } = {};\n\n cur_node : XMLNode;\n cur_module : HDLModuleDef;\n cur_loc : HDLSourceLocation;\n cur_loc_str : string;\n cur_deferred = [];\n\n constructor() {\n // TODO: other types?\n this.dtypes['QData'] = {left:63, right:0, signed:false};\n this.dtypes['IData'] = {left:31, right:0, signed:false};\n this.dtypes['SData'] = {left:15, right:0, signed:false};\n this.dtypes['CData'] = {left:7, right:0, signed:false};\n this.dtypes['byte'] = {left:7, right:0, signed:true};\n this.dtypes['shortint'] = {left:15, right:0, signed:true};\n this.dtypes['int'] = {left:31, right:0, signed:true};\n this.dtypes['integer'] = {left:31, right:0, signed:true};\n this.dtypes['longint'] = {left:63, right:0, signed:true};\n this.dtypes['time'] = {left:63, right:0, signed:false};\n }\n\n defer(fn: () => void) {\n this.cur_deferred.unshift(fn);\n }\n\n defer2(fn: () => void) {\n this.cur_deferred.push(fn);\n }\n\n run_deferred() {\n this.cur_deferred.forEach((fn) => fn());\n this.cur_deferred = [];\n }\n\n name2js(s: string) {\n if (s == null) throw new CompileError(this.cur_loc, `no name`);\n return s.replace(/[^a-z0-9_]/gi, '$');\n }\n\n findChildren(node: XMLNode, type: string, required: boolean) : XMLNode[] {\n var arr = node.children.filter((n) => n.type == type);\n if (arr.length == 0 && required) throw new CompileError(this.cur_loc, `no child of type ${type}`);\n return arr;\n }\n\n parseSourceLocation(node: XMLNode): HDLSourceLocation {\n var loc = node.attrs['loc'];\n if (loc) {\n if (loc == this.cur_loc_str) {\n return this.cur_loc; // cache last parsed $loc object\n } else {\n var [fileid, line, col, end_line, end_col] = loc.split(',');\n var $loc = {\n hdlfile: this.files[fileid],\n path: this.files[fileid].filename,\n line: parseInt(line),\n start: parseInt(col)-1,\n end_line: parseInt(end_line),\n end: parseInt(end_col)-1,\n }\n this.cur_loc = $loc;\n this.cur_loc_str = loc;\n return $loc;\n }\n } else {\n return null;\n }\n }\n\n open_module(node: XMLNode) {\n var module: HDLModuleDef = {\n $loc: this.parseSourceLocation(node),\n name: node.attrs['name'],\n origName: node.attrs['origName'],\n blocks: [],\n instances: [],\n vardefs: {},\n }\n if (this.cur_module) throw new CompileError(this.cur_loc, `nested modules not supported`);\n this.cur_module = module;\n return module;\n }\n\n deferDataType(node: XMLNode, def: HDLDataTypeObject) {\n var dtype_id = node.attrs['dtype_id'];\n if (dtype_id != null) {\n this.defer(() => {\n def.dtype = this.dtypes[dtype_id];\n if (!def.dtype) {\n throw new CompileError(this.cur_loc, `Unknown data type ${dtype_id} for ${node.type}`);\n }\n })\n }\n }\n\n parseConstValue(s: string) : number | bigint {\n const re_const = /(\\d+)'([s]?)h([0-9a-f]+)/i;\n var m = re_const.exec(s);\n if (m) {\n var numstr = m[3];\n if (numstr.length <= 8)\n return parseInt(numstr, 16);\n else\n return BigInt('0x' + numstr);\n } else {\n throw new CompileError(this.cur_loc, `could not parse constant \"${s}\"`);\n }\n }\n \n resolveVar(s: string, mod: HDLModuleDef) : HDLVariableDef {\n var def = mod.vardefs[s];\n if (def == null) throw new CompileError(this.cur_loc, `could not resolve variable \"${s}\"`);\n return def;\n }\n\n resolveModule(s: string) : HDLModuleDef {\n var mod = this.modules[s];\n if (mod == null) throw new CompileError(this.cur_loc, `could not resolve module \"${s}\"`);\n return mod;\n }\n\n //\n\n visit_verilator_xml(node: XMLNode) {\n }\n\n visit_package(node: XMLNode) { // TODO?\n }\n\n visit_module(node: XMLNode) {\n this.findChildren(node, 'var', false).forEach((n) => {\n if (isVarDecl(n.obj)) {\n this.cur_module.vardefs[n.obj.name] = n.obj;\n }\n })\n this.modules[this.cur_module.name] = this.cur_module;\n this.cur_module = null;\n }\n\n visit_var(node: XMLNode) : HDLVariableDef {\n var name = node.attrs['name'];\n name = this.name2js(name);\n var vardef: HDLVariableDef = {\n $loc: this.parseSourceLocation(node),\n name: name,\n origName: node.attrs['origName'],\n isInput: node.attrs['dir'] == 'input',\n isOutput: node.attrs['dir'] == 'output',\n isParam: node.attrs['param'] == 'true',\n dtype: null,\n }\n this.deferDataType(node, vardef);\n var const_nodes = this.findChildren(node, 'const', false);\n if (const_nodes.length) {\n vardef.constValue = const_nodes[0].obj;\n }\n var init_nodes = this.findChildren(node, 'initarray', false);\n if (init_nodes.length) {\n vardef.initValue = init_nodes[0].obj;\n }\n return vardef;\n }\n\n visit_const(node: XMLNode) : HDLConstant {\n var name = node.attrs['name'];\n var cvalue = this.parseConstValue(name); \n var constdef: HDLConstant = {\n $loc: this.parseSourceLocation(node),\n dtype: null,\n cvalue: typeof cvalue === 'number' ? cvalue : null,\n bigvalue: typeof cvalue === 'bigint' ? cvalue : null,\n }\n this.deferDataType(node, constdef);\n return constdef;\n }\n\n visit_varref(node: XMLNode) : HDLVarRef {\n var name = node.attrs['name'];\n name = this.name2js(name);\n var varref: HDLVarRef = {\n $loc: this.parseSourceLocation(node),\n dtype: null,\n refname: name\n }\n this.deferDataType(node, varref);\n var mod = this.cur_module;\n /*\n this.defer2(() => {\n varref.vardef = this.resolveVar(name, mod);\n });\n */\n return varref;\n }\n\n visit_sentree(node: XMLNode) {\n // TODO\n }\n\n visit_always(node: XMLNode) : HDLAlwaysBlock {\n // TODO\n var sentree : HDLSensItem[];\n var expr : HDLExpr;\n if (node.children.length == 2) {\n sentree = node.children[0].obj as HDLSensItem[];\n expr = node.children[1].obj as HDLExpr;\n // TODO: check sentree\n } else {\n sentree = null;\n expr = node.children[0].obj as HDLExpr;\n }\n var always: HDLAlwaysBlock = {\n $loc: this.parseSourceLocation(node),\n blocktype: node.type,\n name: null,\n senlist: sentree,\n exprs: [expr],\n };\n this.cur_module.blocks.push(always);\n return always;\n }\n\n visit_begin(node: XMLNode) : HDLBlock {\n var exprs = [];\n node.children.forEach((n) => exprs.push(n.obj));\n return {\n $loc: this.parseSourceLocation(node),\n blocktype: node.type,\n name: node.attrs['name'],\n exprs: exprs,\n }\n }\n\n visit_initarray(node: XMLNode) : HDLBlock {\n return this.visit_begin(node);\n }\n\n visit_inititem(node: XMLNode) : HDLArrayItem {\n this.expectChildren(node, 1, 1);\n return {\n index: parseInt(node.attrs['index']),\n expr: node.children[0].obj\n }\n }\n\n visit_cfunc(node: XMLNode) : HDLBlock {\n if (this.cur_module == null) { // TODO?\n //console.log('no module open, skipping', node);\n return;\n }\n var block = this.visit_begin(node);\n block.exprs = [];\n node.children.forEach((n) => block.exprs.push(n.obj));\n this.cur_module.blocks.push(block);\n return block;\n }\n\n visit_cuse(node: XMLNode) { // TODO?\n }\n\n visit_instance(node: XMLNode) : HDLInstanceDef {\n var instance : HDLInstanceDef = {\n $loc: this.parseSourceLocation(node),\n name: node.attrs['name'],\n origName: node.attrs['origName'],\n ports: [],\n module: null,\n }\n node.children.forEach((child) => {\n instance.ports.push(child.obj);\n })\n this.cur_module.instances.push(instance);\n this.defer(() => {\n instance.module = this.resolveModule(node.attrs['defName']);\n })\n return instance;\n }\n\n visit_iface(node: XMLNode) {\n throw new CompileError(this.cur_loc, `interfaces not supported`);\n }\n\n visit_intfref(node: XMLNode) {\n throw new CompileError(this.cur_loc, `interfaces not supported`);\n }\n\n visit_port(node: XMLNode) : HDLPort {\n this.expectChildren(node, 1, 1);\n var varref: HDLPort = {\n $loc: this.parseSourceLocation(node),\n name: node.attrs['name'],\n expr: node.children[0].obj\n }\n return varref;\n }\n\n visit_netlist(node: XMLNode) {\n }\n\n visit_files(node: XMLNode) {\n }\n\n visit_module_files(node: XMLNode) {\n node.children.forEach((n) => {\n if (n.obj) {\n var file = this.files[(n.obj as HDLFile).id];\n if (file) file.isModule = true;\n }\n });\n }\n\n visit_file(node: XMLNode) {\n return this.visit_file_or_module(node, false);\n }\n\n // TODO\n visit_scope(node: XMLNode) {\n }\n\n visit_topscope(node: XMLNode) {\n }\n\n visit_file_or_module(node: XMLNode, isModule: boolean) : HDLFile {\n var file : HDLFile = {\n id: node.attrs['id'],\n filename: node.attrs['filename'],\n isModule: isModule,\n }\n this.files[file.id] = file;\n return file;\n }\n\n visit_cells(node: XMLNode) {\n this.expectChildren(node, 1, 9999);\n var hier = node.children[0].obj as HDLHierarchyDef;\n if (hier != null) {\n var hiername = hier.name;\n this.hierarchies[hiername] = hier;\n }\n }\n\n visit_cell(node: XMLNode) : HDLHierarchyDef {\n var hier = {\n $loc: this.parseSourceLocation(node),\n name: node.attrs['name'],\n module: null,\n parent: null,\n children: node.children.map((n) => n.obj),\n }\n if (node.children.length > 0)\n throw new CompileError(this.cur_loc, `multiple non-flattened modules not yet supported`);\n node.children.forEach((n) => (n.obj as HDLHierarchyDef).parent = hier);\n this.defer(() => {\n hier.module = this.resolveModule(node.attrs['submodname']);\n })\n return hier;\n }\n\n visit_basicdtype(node: XMLNode): HDLDataType {\n let id = node.attrs['id'];\n var dtype: HDLDataType;\n var dtypename = node.attrs['name'];\n switch (dtypename) {\n case 'logic':\n case 'integer': // TODO?\n case 'bit':\n let dlogic: HDLLogicType = {\n $loc: this.parseSourceLocation(node),\n left: parseInt(node.attrs['left'] || \"0\"),\n right: parseInt(node.attrs['right'] || \"0\"),\n signed: node.attrs['signed'] == 'true'\n }\n dtype = dlogic;\n break;\n case 'string':\n let dstring: HDLNativeType = {\n $loc: this.parseSourceLocation(node),\n jstype: 'string'\n }\n dtype = dstring;\n break;\n default:\n dtype = this.dtypes[dtypename];\n if (dtype == null) {\n throw new CompileError(this.cur_loc, `unknown data type ${dtypename}`);\n }\n }\n this.dtypes[id] = dtype;\n return dtype;\n }\n\n visit_refdtype(node: XMLNode) {\n }\n\n visit_enumdtype(node: XMLNode) {\n }\n\n visit_enumitem(node: XMLNode) {\n }\n\n visit_packarraydtype(node: XMLNode): HDLDataType {\n // TODO: packed?\n return this.visit_unpackarraydtype(node);\n }\n\n visit_memberdtype(node: XMLNode) {\n throw new CompileError(null, `structs not supported`);\n }\n\n visit_constdtype(node: XMLNode) {\n // TODO? throw new CompileError(null, `constant data types not supported`);\n }\n\n visit_paramtypedtype(node: XMLNode) {\n // TODO? throw new CompileError(null, `constant data types not supported`);\n }\n\n visit_unpackarraydtype(node: XMLNode): HDLDataType {\n let id = node.attrs['id'];\n let sub_dtype_id = node.attrs['sub_dtype_id'];\n let range = node.children[0].obj as HDLBinop;\n if (isConstExpr(range.left) && isConstExpr(range.right)) {\n var dtype: HDLUnpackArray = {\n $loc: this.parseSourceLocation(node),\n subtype: null,\n low: range.left,\n high: range.right,\n }\n this.dtypes[id] = dtype;\n this.defer(() => {\n dtype.subtype = this.dtypes[sub_dtype_id];\n if (!dtype.subtype) throw new CompileError(this.cur_loc, `Unknown data type ${sub_dtype_id} for array`);\n })\n return dtype;\n } else {\n throw new CompileError(this.cur_loc, `could not parse constant exprs in array`)\n }\n }\n\n visit_senitem(node: XMLNode) : HDLSensItem {\n var edgeType = node.attrs['edgeType'];\n if (edgeType != \"POS\" && edgeType != \"NEG\")\n throw new CompileError(this.cur_loc, \"POS/NEG required\")\n return {\n $loc: this.parseSourceLocation(node),\n edgeType: edgeType,\n expr: node.obj\n }\n }\n\n visit_text(node: XMLNode) {\n }\n\n visit_cstmt(node: XMLNode) {\n }\n\n visit_cfile(node: XMLNode) {\n }\n\n visit_typetable(node: XMLNode) {\n }\n\n visit_constpool(node: XMLNode) {\n }\n\n visit_comment(node: XMLNode) {\n }\n\n expectChildren(node: XMLNode, low: number, high: number) {\n if (node.children.length < low || node.children.length > high)\n throw new CompileError(this.cur_loc, `expected between ${low} and ${high} children`);\n }\n\n __visit_unop(node: XMLNode) : HDLUnop {\n this.expectChildren(node, 1, 1);\n var expr: HDLUnop = {\n $loc: this.parseSourceLocation(node),\n op: node.type,\n dtype: null,\n left: node.children[0].obj as HDLExpr,\n }\n this.deferDataType(node, expr);\n return expr;\n }\n\n visit_extend(node: XMLNode) : HDLUnop {\n var unop = this.__visit_unop(node) as HDLExtendop;\n unop.width = parseInt(node.attrs['width']);\n unop.widthminv = parseInt(node.attrs['widthminv']);\n if (unop.width != 32) throw new CompileError(this.cur_loc, `extends width ${unop.width} != 32`)\n return unop;\n }\n\n visit_extends(node: XMLNode) : HDLUnop {\n return this.visit_extend(node);\n }\n\n __visit_binop(node: XMLNode) : HDLBinop {\n this.expectChildren(node, 2, 2);\n var expr: HDLBinop = {\n $loc: this.parseSourceLocation(node),\n op: node.type,\n dtype: null,\n left: node.children[0].obj as HDLExpr,\n right: node.children[1].obj as HDLExpr,\n }\n this.deferDataType(node, expr);\n return expr;\n }\n\n visit_if(node: XMLNode) : HDLTriop {\n this.expectChildren(node, 2, 3);\n var expr: HDLTriop = {\n $loc: this.parseSourceLocation(node),\n op: 'if',\n dtype: null,\n cond: node.children[0].obj as HDLExpr,\n left: node.children[1].obj as HDLExpr,\n right: node.children[2] && node.children[2].obj as HDLExpr,\n }\n return expr;\n }\n\n // while and for loops\n visit_while(node: XMLNode) : HDLWhileOp {\n this.expectChildren(node, 2, 4);\n var expr: HDLWhileOp = {\n $loc: this.parseSourceLocation(node),\n op: 'while',\n dtype: null,\n precond: node.children[0].obj as HDLExpr,\n loopcond: node.children[1].obj as HDLExpr,\n body: node.children[2] && node.children[2].obj as HDLExpr,\n inc: node.children[3] && node.children[3].obj as HDLExpr,\n }\n return expr;\n }\n\n __visit_triop(node: XMLNode) : HDLBinop {\n this.expectChildren(node, 3, 3);\n var expr: HDLTriop = {\n $loc: this.parseSourceLocation(node),\n op: node.type,\n dtype: null,\n cond: node.children[0].obj as HDLExpr,\n left: node.children[1].obj as HDLExpr,\n right: node.children[2].obj as HDLExpr,\n }\n this.deferDataType(node, expr);\n return expr;\n }\n\n __visit_func(node: XMLNode) : HDLFuncCall {\n var expr = {\n $loc: this.parseSourceLocation(node),\n dtype: null,\n funcname: node.attrs['func'] || ('$' + node.type),\n args: node.children.map(n => n.obj as HDLExpr)\n }\n this.deferDataType(node, expr);\n return expr;\n }\n\n visit_not(node: XMLNode) { return this.__visit_unop(node); }\n visit_negate(node: XMLNode) { return this.__visit_unop(node); }\n visit_redand(node: XMLNode) { return this.__visit_unop(node); }\n visit_redor(node: XMLNode) { return this.__visit_unop(node); }\n visit_redxor(node: XMLNode) { return this.__visit_unop(node); }\n visit_initial(node: XMLNode) { return this.__visit_unop(node); }\n visit_ccast(node: XMLNode) { return this.__visit_unop(node); }\n visit_creset(node: XMLNode) { return this.__visit_unop(node); }\n visit_creturn(node: XMLNode) { return this.__visit_unop(node); }\n\n visit_contassign(node: XMLNode) { return this.__visit_binop(node); }\n visit_assigndly(node: XMLNode) { return this.__visit_binop(node); }\n visit_assignpre(node: XMLNode) { return this.__visit_binop(node); }\n visit_assignpost(node: XMLNode) { return this.__visit_binop(node); }\n visit_assign(node: XMLNode) { return this.__visit_binop(node); }\n visit_arraysel(node: XMLNode) { return this.__visit_binop(node); }\n visit_wordsel(node: XMLNode) { return this.__visit_binop(node); }\n\n visit_eq(node: XMLNode) { return this.__visit_binop(node); }\n visit_neq(node: XMLNode) { return this.__visit_binop(node); }\n visit_lte(node: XMLNode) { return this.__visit_binop(node); }\n visit_gte(node: XMLNode) { return this.__visit_binop(node); }\n visit_lt(node: XMLNode) { return this.__visit_binop(node); }\n visit_gt(node: XMLNode) { return this.__visit_binop(node); }\n visit_and(node: XMLNode) { return this.__visit_binop(node); }\n visit_or(node: XMLNode) { return this.__visit_binop(node); }\n visit_xor(node: XMLNode) { return this.__visit_binop(node); }\n visit_add(node: XMLNode) { return this.__visit_binop(node); }\n visit_sub(node: XMLNode) { return this.__visit_binop(node); }\n visit_concat(node: XMLNode) { return this.__visit_binop(node); } // TODO?\n visit_shiftl(node: XMLNode) { return this.__visit_binop(node); }\n visit_shiftr(node: XMLNode) { return this.__visit_binop(node); }\n visit_shiftrs(node: XMLNode) { return this.__visit_binop(node); }\n\n visit_mul(node: XMLNode) { return this.__visit_binop(node); }\n visit_div(node: XMLNode) { return this.__visit_binop(node); }\n visit_moddiv(node: XMLNode) { return this.__visit_binop(node); }\n visit_muls(node: XMLNode) { return this.__visit_binop(node); }\n visit_divs(node: XMLNode) { return this.__visit_binop(node); }\n visit_moddivs(node: XMLNode) { return this.__visit_binop(node); }\n visit_gts(node: XMLNode) { return this.__visit_binop(node); }\n visit_lts(node: XMLNode) { return this.__visit_binop(node); }\n visit_gtes(node: XMLNode) { return this.__visit_binop(node); }\n visit_ltes(node: XMLNode) { return this.__visit_binop(node); }\n // TODO: more?\n\n visit_range(node: XMLNode) { return this.__visit_binop(node); }\n\n visit_cond(node: XMLNode) { return this.__visit_triop(node); }\n visit_condbound(node: XMLNode) { return this.__visit_triop(node); }\n visit_sel(node: XMLNode) { return this.__visit_triop(node); }\n\n visit_changedet(node: XMLNode) : HDLBinop {\n if (node.children.length == 0)\n return null; //{ op: \"changedet\", dtype:null, left:null, right:null }\n else\n return this.__visit_binop(node);\n }\n\n visit_ccall(node: XMLNode) { return this.__visit_func(node); }\n visit_finish(node: XMLNode) { return this.__visit_func(node); }\n visit_stop(node: XMLNode) { return this.__visit_func(node); }\n visit_rand(node: XMLNode) { return this.__visit_func(node); }\n visit_time(node: XMLNode) { return this.__visit_func(node); }\n\n visit_display(node: XMLNode) { return null; }\n visit_sformatf(node: XMLNode) { return null; }\n visit_scopename(node: XMLNode) { return null; }\n\n visit_readmem(node: XMLNode) { return this.__visit_func(node); }\n\n //\n\n xml_open(node: XMLNode) {\n this.cur_node = node;\n var method = this[`open_${node.type}`];\n if (method) {\n return method.bind(this)(node);\n }\n }\n \n xml_close(node: XMLNode) {\n this.cur_node = node;\n var method = this[`visit_${node.type}`];\n if (method) {\n return method.bind(this)(node);\n } else {\n throw new CompileError(this.cur_loc, `no visitor for ${node.type}`)\n }\n }\n\n parse(xmls: string) {\n parseXMLPoorly(xmls, this.xml_open.bind(this), this.xml_close.bind(this));\n this.cur_node = null;\n this.run_deferred();\n }\n}\n\n", "\n// TODO: must be a better way to do all this\n\nimport { WorkerError, CodeListingMap, SourceLocation } from \"../../common/workertypes\";\nimport { Assembler } from \"../assembler\";\nimport * as vxmlparser from '../../common/hdl/vxmlparser';\nimport { getWorkFileAsString, BuildStep, BuildStepResult, gatherFiles, loadNative, staleFiles, makeErrorMatcher, emglobal, moduleInstFn, print_fn, populateFiles, execMain, putWorkFile, anyTargetChanged, endtime, getWASMMemory, starttime, populateExtraFiles, setupFS } from \"../workermain\";\nimport { EmscriptenModule } from \"../workermain\"\n\nfunction detectModuleName(code: string) {\n var m = /^\\s*module\\s+(\\w+_top)\\b/m.exec(code)\n || /^\\s*module\\s+(top|t)\\b/m.exec(code)\n || /^\\s*module\\s+(\\w+)\\b/m.exec(code);\n return m ? m[1] : null;\n}\n\nfunction detectTopModuleName(code: string) {\n var topmod = detectModuleName(code) || \"top\";\n var m = /^\\s*module\\s+(\\w+?_top)/m.exec(code);\n if (m && m[1]) topmod = m[1];\n return topmod;\n}\n\n// cached stuff (TODO)\nvar jsasm_module_top;\nvar jsasm_module_output;\nvar jsasm_module_key;\n\nfunction compileJSASM(asmcode: string, platform, options, is_inline) {\n var asm = new Assembler(null);\n var includes = [];\n asm.loadJSON = (filename: string) => {\n var jsontext = getWorkFileAsString(filename);\n if (!jsontext) throw Error(\"could not load \" + filename);\n return JSON.parse(jsontext);\n };\n asm.loadInclude = (filename) => {\n if (!filename.startsWith('\"') || !filename.endsWith('\"'))\n return 'Expected filename in \"double quotes\"';\n filename = filename.substr(1, filename.length - 2);\n includes.push(filename);\n };\n var loaded_module = false;\n asm.loadModule = (top_module: string) => {\n // compile last file in list\n loaded_module = true;\n var key = top_module + '/' + includes;\n if (jsasm_module_key != key) {\n jsasm_module_key = key;\n jsasm_module_output = null;\n }\n jsasm_module_top = top_module;\n var main_filename = includes[includes.length - 1];\n // TODO: take out .asm dependency\n var voutput = compileVerilator({ platform: platform, files: includes, path: main_filename, tool: 'verilator' });\n if (voutput)\n jsasm_module_output = voutput;\n return null; // no error\n }\n var result = asm.assembleFile(asmcode);\n if (loaded_module && jsasm_module_output) {\n // errors? return them\n if (jsasm_module_output.errors && jsasm_module_output.errors.length)\n return jsasm_module_output;\n // return program ROM array\n var asmout = result.output;\n // TODO: unify\n result.output = jsasm_module_output.output;\n // TODO: typecheck this garbage\n (result as any).output.program_rom = asmout;\n // TODO: not cpu_platform__DOT__program_rom anymore, make const\n (result as any).output.program_rom_variable = jsasm_module_top + \"$program_rom\";\n (result as any).listings = {};\n (result as any).listings[options.path] = { lines: result.lines };\n return result;\n } else {\n return result;\n }\n}\n\nexport function compileJSASMStep(step: BuildStep): BuildStepResult {\n gatherFiles(step);\n var code = getWorkFileAsString(step.path);\n var platform = step.platform || 'verilog';\n return compileJSASM(code, platform, step, false);\n}\n\nfunction compileInlineASM(code: string, platform, options, errors, asmlines) {\n code = code.replace(/__asm\\b([\\s\\S]+?)\\b__endasm\\b/g, function (s, asmcode, index) {\n var firstline = code.substr(0, index).match(/\\n/g).length;\n var asmout = compileJSASM(asmcode, platform, options, true);\n if (asmout.errors && asmout.errors.length) {\n for (var i = 0; i < asmout.errors.length; i++) {\n asmout.errors[i].line += firstline;\n errors.push(asmout.errors[i]);\n }\n return \"\";\n } else if (asmout.output) {\n let s = \"\";\n var out = asmout.output;\n for (var i = 0; i < out.length; i++) {\n if (i > 0) {\n s += \",\";\n if ((i & 0xff) == 0) s += \"\\n\";\n }\n s += 0 | out[i];\n }\n if (asmlines) {\n var al = asmout.lines;\n for (var i = 0; i < al.length; i++) {\n al[i].line += firstline;\n asmlines.push(al[i]);\n }\n }\n return s;\n }\n });\n return code;\n}\n\nexport function compileVerilator(step: BuildStep): BuildStepResult {\n loadNative(\"verilator_bin\");\n var platform = step.platform || 'verilog';\n var errors: WorkerError[] = [];\n gatherFiles(step);\n // compile verilog if files are stale\n if (staleFiles(step, [xmlPath])) {\n // TODO: %Error: Specified --top-module 'ALU' isn't at the top level, it's under another cell 'cpu'\n // TODO: ... Use \"/* verilator lint_off BLKSEQ */\" and lint_on around source to disable this message.\n var match_fn = makeErrorMatcher(errors, /%(.+?): (.+?):(\\d+)?[:]?\\s*(.+)/i, 3, 4, step.path, 2);\n var verilator_mod: EmscriptenModule = emglobal.verilator_bin({\n instantiateWasm: moduleInstFn('verilator_bin'),\n noInitialRun: true,\n noExitRuntime: true,\n print: print_fn,\n printErr: match_fn,\n wasmMemory: getWASMMemory(), // reuse memory\n //INITIAL_MEMORY:256*1024*1024,\n });\n var code = getWorkFileAsString(step.path);\n var topmod = detectTopModuleName(code);\n var FS = verilator_mod.FS;\n var listings: CodeListingMap = {};\n // process inline assembly, add listings where found\n populateFiles(step, FS, {\n mainFilePath: step.path,\n processFn: (path, code) => {\n if (typeof code === 'string') {\n let asmlines = [];\n code = compileInlineASM(code, platform, step, errors, asmlines);\n if (asmlines.length) {\n listings[path] = { lines: asmlines };\n }\n }\n return code;\n }\n });\n starttime();\n var xmlPath = `obj_dir/V${topmod}.xml`;\n try {\n var args = [\"--cc\", \"-O3\",\n \"-DEXT_INLINE_ASM\", \"-DTOPMOD__\" + topmod, \"-D__8BITWORKSHOP__\",\n \"-Wall\",\n \"-Wno-DECLFILENAME\", \"-Wno-UNUSED\", \"-Wno-EOFNEWLINE\", \"-Wno-PROCASSWIRE\",\n \"--x-assign\", \"fast\", \"--noassert\", \"--pins-sc-biguint\",\n \"--debug-check\", // for XML output\n \"--top-module\", topmod, step.path]\n execMain(step, verilator_mod, args);\n } catch (e) {\n console.log(e);\n errors.push({ line: 0, msg: \"Compiler internal error: \" + e });\n }\n endtime(\"compile\");\n // remove boring errors\n errors = errors.filter(function (e) { return !/Exiting due to \\d+/.exec(e.msg); }, errors);\n errors = errors.filter(function (e) { return !/Use [\"][/][*]/.exec(e.msg); }, errors);\n if (errors.length) {\n return { errors: errors };\n }\n starttime();\n var xmlParser = new vxmlparser.VerilogXMLParser();\n try {\n var xmlContent = FS.readFile(xmlPath, { encoding: 'utf8' });\n var xmlScrubbed = xmlContent.replace(/ fl=\".+?\" loc=\".+?\"/g, '');\n // TODO: this squelches the .asm listing\n //listings[step.prefix + '.xml'] = {lines:[],text:xmlContent};\n putWorkFile(xmlPath, xmlScrubbed); // don't detect changes in source position\n if (!anyTargetChanged(step, [xmlPath]))\n return;\n xmlParser.parse(xmlContent);\n } catch (e) {\n console.log(e, e.stack);\n if (e.$loc != null) {\n let $loc = e.$loc as SourceLocation;\n errors.push({ msg: \"\" + e, path: $loc.path, line: $loc.line });\n } else {\n errors.push({ line: 0, msg: \"\" + e });\n }\n return { errors: errors, listings: listings };\n } finally {\n endtime(\"parse\");\n }\n return {\n output: xmlParser,\n errors: errors,\n listings: listings,\n };\n }\n}\n\n// TODO: test\nexport function compileYosys(step: BuildStep): BuildStepResult {\n loadNative(\"yosys\");\n var code = step.code;\n var errors = [];\n var match_fn = makeErrorMatcher(errors, /ERROR: (.+?) in line (.+?[.]v):(\\d+)[: ]+(.+)/i, 3, 4, step.path);\n starttime();\n var yosys_mod: EmscriptenModule = emglobal.yosys({\n instantiateWasm: moduleInstFn('yosys'),\n noInitialRun: true,\n print: print_fn,\n printErr: match_fn,\n });\n endtime(\"create module\");\n var topmod = detectTopModuleName(code);\n var FS = yosys_mod.FS;\n FS.writeFile(topmod + \".v\", code);\n starttime();\n try {\n execMain(step, yosys_mod, [\"-q\", \"-o\", topmod + \".json\", \"-S\", topmod + \".v\"]);\n } catch (e) {\n console.log(e);\n endtime(\"compile\");\n return { errors: errors };\n }\n endtime(\"compile\");\n //TODO: filename in errors\n if (errors.length) return { errors: errors };\n try {\n var json_file = FS.readFile(topmod + \".json\", { encoding: 'utf8' });\n var json = JSON.parse(json_file);\n console.log(json);\n return { output: json, errors: errors }; // TODO\n } catch (e) {\n console.log(e);\n return { errors: errors };\n }\n}\n\nexport function compileSilice(step: BuildStep): BuildStepResult {\n loadNative(\"silice\");\n var params = step.params;\n gatherFiles(step, { mainFilePath: \"main.ice\" });\n var destpath = step.prefix + '.v';\n var errors: WorkerError[] = [];\n var errfile: string;\n var errline: number;\n if (staleFiles(step, [destpath])) {\n //[preprocessor] 97] attempt to concatenate a nil value (global 'addrW')\n var match_fn = (s: string) => {\n s = (s as any).replaceAll(/\\033\\[\\d+\\w/g, '');\n var mf = /file:\\s*(\\w+)/.exec(s);\n var ml = /line:\\s+(\\d+)/.exec(s);\n var preproc = /\\[preprocessor\\] (\\d+)\\] (.+)/.exec(s);\n if (mf) errfile = mf[1];\n else if (ml) errline = parseInt(ml[1]);\n else if (preproc) {\n errors.push({ path: step.path, line: parseInt(preproc[1]), msg: preproc[2] });\n }\n else if (errfile && errline && s.length > 1) {\n if (s.length > 2) {\n errors.push({ path: errfile + \".ice\", line: errline, msg: s });\n } else {\n errfile = null;\n errline = null;\n }\n }\n else console.log(s);\n }\n var silice: EmscriptenModule = emglobal.silice({\n instantiateWasm: moduleInstFn('silice'),\n noInitialRun: true,\n print: match_fn,\n printErr: match_fn,\n });\n var FS = silice.FS;\n setupFS(FS, 'Silice');\n populateFiles(step, FS);\n populateExtraFiles(step, FS, params.extra_compile_files);\n const FWDIR = '/share/frameworks';\n var args = [\n '-D', 'NTSC=1',\n '--frameworks_dir', FWDIR,\n '-f', `/8bitworkshop.v`,\n '-o', destpath,\n step.path];\n execMain(step, silice, args);\n if (errors.length)\n return { errors: errors };\n var vout = FS.readFile(destpath, { encoding: 'utf8' });\n putWorkFile(destpath, vout);\n }\n return {\n nexttool: \"verilator\",\n path: destpath,\n args: [destpath],\n files: [destpath],\n };\n}\n\n", "import { CodeListingMap, WorkerError } from \"../../common/workertypes\";\nimport { BuildStep, BuildStepResult, load, emglobal, print_fn, populateFiles, execMain, putWorkFile, parseListing, loadNative, gatherFiles, staleFiles, moduleInstFn, getWorkFileAsString, preprocessMCPP, fixParamsWithDefines, msvcErrorMatcher, populateExtraFiles, anyTargetChanged, parseSourceLines } from \"../workermain\";\nimport { EmscriptenModule } from \"../workermain\";\n\n// http://datapipe-blackbeltsystems.com/windows/flex/asm09.html\nexport function assembleXASM6809(step: BuildStep): BuildStepResult {\n load(\"xasm6809\");\n var alst = \"\";\n var lasterror = null;\n var errors = [];\n function match_fn(s) {\n alst += s;\n alst += \"\\n\";\n if (lasterror) {\n var line = parseInt(s.slice(0, 5)) || 0;\n errors.push({\n line: line,\n msg: lasterror\n });\n lasterror = null;\n }\n else if (s.startsWith(\"***** \")) {\n lasterror = s.slice(6);\n }\n }\n var Module: EmscriptenModule = emglobal.xasm6809({\n noInitialRun: true,\n //logReadFiles:true,\n print: match_fn,\n printErr: print_fn\n });\n var FS = Module.FS;\n //setupFS(FS);\n populateFiles(step, FS, {\n mainFilePath: 'main.asm'\n });\n var binpath = step.prefix + '.bin';\n var lstpath = step.prefix + '.lst'; // in stdout\n execMain(step, Module, [\"-c\", \"-l\", \"-s\", \"-y\", \"-o=\" + binpath, step.path]);\n if (errors.length)\n return { errors: errors };\n var aout = FS.readFile(binpath, { encoding: 'binary' });\n if (aout.length == 0) {\n errors.push({ line: 0, msg: \"Empty output file\" });\n return { errors: errors };\n }\n putWorkFile(binpath, aout);\n putWorkFile(lstpath, alst);\n // TODO: symbol map\n //mond09 0000 \n var symbolmap = {};\n //00005 W 0003 [ 8] A6890011 lda >PALETTE,x\n //00012 0011 0C0203 fcb 12,2,3\n var asmlines = parseListing(alst, /^\\s*([0-9]+) .+ ([0-9A-F]+)\\s+\\[([0-9 ]+)\\]\\s+([0-9A-F]+) (.*)/i, 1, 2, 4, 3);\n var listings: CodeListingMap = {};\n listings[step.prefix + '.lst'] = { lines: asmlines, text: alst };\n return {\n output: aout,\n listings: listings,\n errors: errors,\n symbolmap: symbolmap,\n };\n}\n\nexport function compileCMOC(step: BuildStep): BuildStepResult {\n loadNative(\"cmoc\");\n var params = step.params;\n // stderr\n var re_err1 = /^[/]*([^:]*):(\\d+): (.+)$/;\n var errors: WorkerError[] = [];\n var errline = 0;\n function match_fn(s) {\n var matches = re_err1.exec(s);\n if (matches) {\n errors.push({\n line: parseInt(matches[2]),\n msg: matches[3],\n path: matches[1] || step.path\n });\n } else {\n console.log(s);\n }\n }\n gatherFiles(step, { mainFilePath: \"main.c\" });\n var destpath = step.prefix + '.s';\n if (staleFiles(step, [destpath])) {\n var args = ['-S', '-Werror', '-V',\n '-I/share/include',\n '-I.',\n step.path];\n var CMOC: EmscriptenModule = emglobal.cmoc({\n instantiateWasm: moduleInstFn('cmoc'),\n noInitialRun: true,\n //logReadFiles:true,\n print: match_fn,\n printErr: match_fn,\n });\n // load source file and preprocess\n var code = getWorkFileAsString(step.path);\n var preproc = preprocessMCPP(step, null);\n if (preproc.errors) {\n return { errors: preproc.errors }\n }\n else code = preproc.code;\n // set up filesystem\n var FS = CMOC.FS;\n //setupFS(FS, '65-'+getRootBasePlatform(step.platform));\n populateFiles(step, FS);\n FS.writeFile(step.path, code);\n fixParamsWithDefines(step.path, params);\n if (params.extra_compile_args) {\n args.unshift.apply(args, params.extra_compile_args);\n }\n execMain(step, CMOC, args);\n if (errors.length)\n return { errors: errors };\n var asmout = FS.readFile(destpath, { encoding: 'utf8' });\n if (step.params.set_stack_end)\n asmout = asmout.replace('stack space in bytes', `\\n lds #${step.params.set_stack_end}\\n`)\n putWorkFile(destpath, asmout);\n }\n return {\n nexttool: \"lwasm\",\n path: destpath,\n args: [destpath],\n files: [destpath],\n };\n}\n\nexport function assembleLWASM(step: BuildStep): BuildStepResult {\n loadNative(\"lwasm\");\n var errors = [];\n gatherFiles(step, { mainFilePath: \"main.s\" });\n var objpath = step.prefix + \".o\";\n var lstpath = step.prefix + \".lst\";\n const isRaw = step.path.endsWith('.asm');\n if (staleFiles(step, [objpath, lstpath])) {\n var objout, lstout;\n var args = ['-9', '-I/share/asminc', '-o' + objpath, '-l' + lstpath, step.path];\n args.push(isRaw ? '-r' : '--obj');\n var LWASM: EmscriptenModule = emglobal.lwasm({\n instantiateWasm: moduleInstFn('lwasm'),\n noInitialRun: true,\n //logReadFiles:true,\n print: print_fn,\n printErr: msvcErrorMatcher(errors),\n });\n var FS = LWASM.FS;\n //setupFS(FS, '65-'+getRootBasePlatform(step.platform));\n populateFiles(step, FS);\n fixParamsWithDefines(step.path, step.params);\n execMain(step, LWASM, args);\n if (errors.length)\n return { errors: errors };\n objout = FS.readFile(objpath, { encoding: 'binary' });\n lstout = FS.readFile(lstpath, { encoding: 'utf8' });\n putWorkFile(objpath, objout);\n putWorkFile(lstpath, lstout);\n if (isRaw) {\n return {\n output: objout\n };\n }\n }\n return {\n linktool: \"lwlink\",\n files: [objpath, lstpath],\n args: [objpath]\n };\n}\n\nexport function linkLWLINK(step: BuildStep): BuildStepResult {\n loadNative(\"lwlink\");\n var params = step.params;\n gatherFiles(step);\n var binpath = \"main\";\n if (staleFiles(step, [binpath])) {\n var errors = [];\n var LWLINK: EmscriptenModule = emglobal.lwlink({\n instantiateWasm: moduleInstFn('lwlink'),\n noInitialRun: true,\n //logReadFiles:true,\n print: print_fn,\n printErr: function (s) {\n if (s.startsWith(\"Warning:\"))\n console.log(s);\n else\n errors.push({ msg: s, line: 0 });\n }\n });\n var FS = LWLINK.FS;\n //setupFS(FS, '65-'+getRootBasePlatform(step.platform));\n populateFiles(step, FS);\n populateExtraFiles(step, FS, params.extra_link_files);\n var libargs = params.extra_link_args || [];\n var args = [\n '-L.',\n '--entry=program_start',\n '--raw',\n '--output=main',\n '--map=main.map'].concat(libargs, step.args);\n console.log(args);\n execMain(step, LWLINK, args);\n if (errors.length)\n return { errors: errors };\n var aout = FS.readFile(\"main\", { encoding: 'binary' });\n var mapout = FS.readFile(\"main.map\", { encoding: 'utf8' });\n putWorkFile(\"main\", aout);\n putWorkFile(\"main.map\", mapout);\n // return unchanged if no files changed\n if (!anyTargetChanged(step, [\"main\", \"main.map\"]))\n return;\n // parse symbol map\n //console.log(mapout);\n var symbolmap = {};\n var segments = [];\n for (var s of mapout.split(\"\\n\")) {\n var toks = s.split(\" \");\n // TODO: use regex\n if (toks[0] == 'Symbol:') {\n let ident = toks[1];\n let ofs = parseInt(toks[4], 16);\n if (ident && ofs >= 0 \n && !ident.startsWith(\"l_\") \n //&& !/^L\\d+$/.test(ident)\n && !ident.startsWith('funcsize_')\n && !ident.startsWith('funcend_')) {\n symbolmap[ident] = ofs;\n }\n }\n else if (toks[0] == 'Section:') {\n let seg = toks[1];\n let segstart = parseInt(toks[5], 16);\n let segsize = parseInt(toks[7], 16);\n segments.push({ name: seg, start: segstart, size: segsize });\n }\n }\n // build listings\n const re_segment = /\\s*SECTION\\s+(\\w+)/i;\n const re_function = /\\s*([0-9a-f]+).+?(\\w+)\\s+EQU\\s+[*]/i;\n var listings: CodeListingMap = {};\n for (var fn of step.files) {\n if (fn.endsWith('.lst')) {\n // TODO\n var lstout = FS.readFile(fn, { encoding: 'utf8' });\n var asmlines = parseListing(lstout, /^([0-9A-F]+)\\s+([0-9A-F]+)\\s+[(]\\s*(.+?)[)]:(\\d+) (.*)/i, 4, 1, 2, 3, re_function, re_segment);\n for (let l of asmlines) {\n l.offset += symbolmap[l.func] || 0;\n }\n // * Line //threed.c:117: init of variable e\n var srclines = parseSourceLines(lstout, /Line .+?:(\\d+)/i, /^([0-9A-F]{4})/i, re_function, re_segment);\n for (let l of srclines) {\n l.offset += symbolmap[l.func] || 0;\n }\n putWorkFile(fn, lstout);\n // strip out left margin\n lstout = lstout.split('\\n').map(l => l.substring(0,15) + l.substring(56)).join('\\n')\n // TODO: you have to get rid of all source lines to get asm listing\n listings[fn] = {\n asmlines: srclines.length ? asmlines : null,\n lines: srclines.length ? srclines : asmlines,\n text: lstout\n };\n }\n }\n return {\n output: aout, //.slice(0),\n listings: listings,\n errors: errors,\n symbolmap: symbolmap,\n segments: segments\n };\n }\n}\n\n", "\nimport { WorkerError, CodeListingMap } from \"../../common/workertypes\";\nimport { anyTargetChanged, BuildStep, BuildStepResult, emglobal, EmscriptenModule, execMain, gatherFiles, loadNative, makeErrorMatcher, moduleInstFn, parseListing, populateFiles, print_fn, putWorkFile, staleFiles } from \"../workermain\"\n\n\n// http://www.nespowerpak.com/nesasm/\nexport function assembleNESASM(step: BuildStep): BuildStepResult {\n loadNative(\"nesasm\");\n var re_filename = /\\#\\[(\\d+)\\]\\s+(\\S+)/;\n var re_insn = /\\s+(\\d+)\\s+([0-9A-F]+):([0-9A-F]+)/;\n var re_error = /\\s+(.+)/;\n var errors: WorkerError[] = [];\n var state = 0;\n var lineno = 0;\n var filename;\n function match_fn(s) {\n var m;\n switch (state) {\n case 0:\n m = re_filename.exec(s);\n if (m) {\n filename = m[2];\n }\n m = re_insn.exec(s);\n if (m) {\n lineno = parseInt(m[1]);\n state = 1;\n }\n break;\n case 1:\n m = re_error.exec(s);\n if (m) {\n errors.push({ path: filename, line: lineno, msg: m[1] });\n state = 0;\n }\n break;\n }\n }\n var Module: EmscriptenModule = emglobal.nesasm({\n instantiateWasm: moduleInstFn('nesasm'),\n noInitialRun: true,\n print: match_fn\n });\n var FS = Module.FS;\n populateFiles(step, FS, {\n mainFilePath: 'main.a'\n });\n var binpath = step.prefix + '.nes';\n var lstpath = step.prefix + '.lst';\n var sympath = step.prefix + '.fns';\n execMain(step, Module, [step.path, '-s', \"-l\", \"2\"]);\n // parse main listing, get errors and listings for each file\n var listings: CodeListingMap = {};\n try {\n var alst = FS.readFile(lstpath, { 'encoding': 'utf8' });\n // 16 00:C004 8E 17 40 STX $4017 ; disable APU frame IRQ\n var asmlines = parseListing(alst, /^\\s*(\\d+)\\s+([0-9A-F]+):([0-9A-F]+)\\s+([0-9A-F ]+?) (.*)/i, 1, 3, 4);\n putWorkFile(lstpath, alst);\n listings[lstpath] = {\n lines: asmlines,\n text: alst\n };\n } catch (e) {\n //\n }\n if (errors.length) {\n return { errors: errors };\n }\n // read binary rom output and symbols\n var aout, asym;\n aout = FS.readFile(binpath);\n try {\n asym = FS.readFile(sympath, { 'encoding': 'utf8' });\n } catch (e) {\n console.log(e);\n errors.push({ line: 0, msg: \"No symbol table generated, maybe missing ENDM or segment overflow?\" });\n return { errors: errors }\n }\n putWorkFile(binpath, aout);\n putWorkFile(sympath, asym);\n if (alst) putWorkFile(lstpath, alst); // listing optional (use LIST)\n // return unchanged if no files changed\n if (!anyTargetChanged(step, [binpath, sympath]))\n return;\n // parse symbols\n var symbolmap = {};\n for (var s of asym.split(\"\\n\")) {\n if (!s.startsWith(';')) {\n var m = /(\\w+)\\s+=\\s+[$]([0-9A-F]+)/.exec(s);\n if (m) {\n symbolmap[m[1]] = parseInt(m[2], 16);\n }\n }\n }\n return {\n output: aout,\n listings: listings,\n errors: errors,\n symbolmap: symbolmap,\n };\n}\n\n\n/*\n------+-------------------+-------------+----+---------+------+-----------------------+-------------------------------------------------------------------\nLine | # File Line | Line Type | MX | Reloc | Size | Address Object Code | Source Code \n------+-------------------+-------------+----+---------+------+-----------------------+-------------------------------------------------------------------\n 1 | 1 zap.asm 1 | Unknown | ?? | | -1 | 00/FFFF | broak \n 2 | 1 zap.asm 2 | Comment | ?? | | -1 | 00/FFFF | * SPACEGAME\n \n => [Error] Impossible to decode address mode for instruction 'BNE KABOOM!' (line 315, file 'zap.asm') : The number of element in 'KABOOM!' is even (should be value [operator value [operator value]...]).\n => [Error] Unknown line 'foo' in source file 'zap.asm' (line 315)\n => Creating Object file 'pcs.bin'\n => Creating Output file 'pcs.bin_S01__Output.txt'\n\n*/\nexport function assembleMerlin32(step: BuildStep): BuildStepResult {\n loadNative(\"merlin32\");\n var errors = [];\n var lstfiles = [];\n gatherFiles(step, { mainFilePath: \"main.lnk\" });\n var objpath = step.prefix + \".bin\";\n if (staleFiles(step, [objpath])) {\n var args = ['-v', step.path];\n var merlin32: EmscriptenModule = emglobal.merlin32({\n instantiateWasm: moduleInstFn('merlin32'),\n noInitialRun: true,\n print: (s: string) => {\n var m = /\\s*=>\\s*Creating Output file '(.+?)'/.exec(s);\n if (m) {\n lstfiles.push(m[1]);\n }\n var errpos = s.indexOf('Error');\n if (errpos >= 0) {\n s = s.slice(errpos + 6).trim();\n var mline = /\\bline (\\d+)\\b/.exec(s);\n var mpath = /\\bfile '(.+?)'/.exec(s);\n errors.push({\n line: parseInt(mline[1]) || 0,\n msg: s,\n path: mpath[1] || step.path,\n });\n }\n },\n printErr: print_fn,\n });\n var FS = merlin32.FS;\n populateFiles(step, FS);\n execMain(step, merlin32, args);\n if (errors.length)\n return { errors: errors };\n\n var errout = null;\n try {\n errout = FS.readFile(\"error_output.txt\", { encoding: 'utf8' });\n } catch (e) {\n //\n }\n\n var objout = FS.readFile(objpath, { encoding: 'binary' });\n putWorkFile(objpath, objout);\n if (!anyTargetChanged(step, [objpath]))\n return;\n\n var symbolmap = {};\n var segments = [];\n var listings: CodeListingMap = {};\n lstfiles.forEach((lstfn) => {\n var lst = FS.readFile(lstfn, { encoding: 'utf8' }) as string;\n lst.split('\\n').forEach((line) => {\n var toks = line.split(/\\s*\\|\\s*/);\n if (toks && toks[6]) {\n var toks2 = toks[1].split(/\\s+/);\n var toks3 = toks[6].split(/[:/]/, 4);\n var path = toks2[1];\n if (path && toks2[2] && toks3[1]) {\n var lstline = {\n line: parseInt(toks2[2]),\n offset: parseInt(toks3[1].trim(), 16),\n insns: toks3[2],\n cycles: null,\n iscode: false // TODO\n };\n var lst = listings[path];\n if (!lst) listings[path] = lst = { lines: [] };\n lst.lines.push(lstline);\n //console.log(path,toks2,toks3);\n }\n }\n });\n });\n return {\n output: objout, //.slice(0),\n listings: listings,\n errors: errors,\n symbolmap: symbolmap,\n segments: segments\n };\n }\n}\n\n// README.md:2:5: parse error, expected: statement or variable assignment, integer variable, variable assignment\nexport function compileFastBasic(step: BuildStep): BuildStepResult {\n // TODO: fastbasic-fp?\n loadNative(\"fastbasic-int\");\n var params = step.params;\n gatherFiles(step, { mainFilePath: \"main.fb\" });\n var destpath = step.prefix + '.s';\n var errors = [];\n if (staleFiles(step, [destpath])) {\n var fastbasic: EmscriptenModule = emglobal.fastbasic({\n instantiateWasm: moduleInstFn('fastbasic-int'),\n noInitialRun: true,\n print: print_fn,\n printErr: makeErrorMatcher(errors, /(.+?):(\\d+):(\\d+):\\s*(.+)/, 2, 4, step.path, 1),\n });\n var FS = fastbasic.FS;\n populateFiles(step, FS);\n var libfile = 'fastbasic-int.lib'\n params.libargs = [libfile];\n params.cfgfile = params.fastbasic_cfgfile;\n //params.extra_compile_args = [\"--asm-define\", \"NO_SMCODE\"];\n params.extra_link_files = [libfile, params.cfgfile];\n //fixParamsWithDefines(step.path, params);\n var args = [step.path, destpath];\n execMain(step, fastbasic, args);\n if (errors.length)\n return { errors: errors };\n var asmout = FS.readFile(destpath, { encoding: 'utf8' });\n putWorkFile(destpath, asmout);\n }\n return {\n nexttool: \"ca65\",\n path: destpath,\n args: [destpath],\n files: [destpath],\n };\n}\n\n", "\nimport { CodeListingMap } from \"../../common/workertypes\";\nimport { anyTargetChanged, BuildStep, BuildStepResult, emglobal, EmscriptenModule, execMain, gatherFiles, loadNative, makeErrorMatcher, moduleInstFn, parseListing, populateFiles, print_fn, putWorkFile, staleFiles } from \"../workermain\"\n\n\nexport function assembleZMAC(step: BuildStep): BuildStepResult {\n loadNative(\"zmac\");\n var hexout, lstout, binout;\n var errors = [];\n var params = step.params;\n gatherFiles(step, { mainFilePath: \"main.asm\" });\n var lstpath = step.prefix + \".lst\";\n var binpath = step.prefix + \".cim\";\n if (staleFiles(step, [binpath, lstpath])) {\n /*\n error1.asm(4) : 'l18d4' Undeclared\n JP L18D4\n \n error1.asm(11): warning: 'foobar' treated as label (instruction typo?)\n Add a colon or move to first column to stop this warning.\n 1 errors (see listing if no diagnostics appeared here)\n */\n var ZMAC: EmscriptenModule = emglobal.zmac({\n instantiateWasm: moduleInstFn('zmac'),\n noInitialRun: true,\n //logReadFiles:true,\n print: print_fn,\n printErr: makeErrorMatcher(errors, /([^( ]+)\\s*[(](\\d+)[)]\\s*:\\s*(.+)/, 2, 3, step.path),\n });\n var FS = ZMAC.FS;\n populateFiles(step, FS);\n // TODO: don't know why CIM (hexary) doesn't work\n execMain(step, ZMAC, ['-z', '-c', '--oo', 'lst,cim', step.path]);\n if (errors.length) {\n return { errors: errors };\n }\n lstout = FS.readFile(\"zout/\" + lstpath, { encoding: 'utf8' });\n binout = FS.readFile(\"zout/\" + binpath, { encoding: 'binary' });\n putWorkFile(binpath, binout);\n putWorkFile(lstpath, lstout);\n if (!anyTargetChanged(step, [binpath, lstpath]))\n return;\n // 230: 1739+7+x 017A 1600 L017A: LD D,00h\n var lines = parseListing(lstout, /\\s*(\\d+):\\s*([0-9a-f]+)\\s+([0-9a-f]+)\\s+(.+)/i, 1, 2, 3);\n var listings: CodeListingMap = {};\n listings[lstpath] = { lines: lines };\n // parse symbol table\n var symbolmap = {};\n var sympos = lstout.indexOf('Symbol Table:');\n if (sympos > 0) {\n var symout = lstout.slice(sympos + 14);\n symout.split('\\n').forEach(function (l) {\n var m = l.match(/(\\S+)\\s+([= ]*)([0-9a-f]+)/i);\n if (m) {\n symbolmap[m[1]] = parseInt(m[3], 16);\n }\n });\n }\n return {\n output: binout,\n listings: listings,\n errors: errors,\n symbolmap: symbolmap\n };\n }\n}\n\n", "import { WorkerError, CodeListingMap } from \"../../common/workertypes\";\nimport { BuildStep, BuildStepResult, loadNative, gatherFiles, staleFiles, emglobal, moduleInstFn, getWorkFileAsString, preprocessMCPP, populateFiles, fixParamsWithDefines, execMain, putWorkFile, print_fn, msvcErrorMatcher, anyTargetChanged, parseListing } from \"../workermain\";\nimport { EmscriptenModule } from \"../workermain\"\n\n// http://www.techhelpmanual.com/829-program_startup___exit.html\nexport function compileSmallerC(step: BuildStep): BuildStepResult {\n loadNative(\"smlrc\");\n var params = step.params;\n // stderr\n var re_err1 = /^Error in \"[/]*(.+)\" [(](\\d+):(\\d+)[)]/;\n var errors: WorkerError[] = [];\n var errline = 0;\n var errpath = step.path;\n function match_fn(s) {\n var matches = re_err1.exec(s);\n if (matches) {\n errline = parseInt(matches[2]);\n errpath = matches[1];\n } else {\n errors.push({\n line: errline,\n msg: s,\n path: errpath,\n });\n }\n }\n gatherFiles(step, { mainFilePath: \"main.c\" });\n var destpath = step.prefix + '.asm';\n if (staleFiles(step, [destpath])) {\n var args = ['-seg16',\n //'-nobss',\n '-no-externs',\n step.path, destpath];\n var smlrc: EmscriptenModule = emglobal.smlrc({\n instantiateWasm: moduleInstFn('smlrc'),\n noInitialRun: true,\n //logReadFiles:true,\n print: match_fn,\n printErr: match_fn,\n });\n // load source file and preprocess\n var code = getWorkFileAsString(step.path);\n var preproc = preprocessMCPP(step, null);\n if (preproc.errors) {\n return { errors: preproc.errors };\n }\n else code = preproc.code;\n // set up filesystem\n var FS = smlrc.FS;\n //setupFS(FS, '65-'+getRootBasePlatform(step.platform));\n populateFiles(step, FS);\n FS.writeFile(step.path, code);\n fixParamsWithDefines(step.path, params);\n if (params.extra_compile_args) {\n args.unshift.apply(args, params.extra_compile_args);\n }\n execMain(step, smlrc, args);\n if (errors.length)\n return { errors: errors };\n var asmout = FS.readFile(destpath, { encoding: 'utf8' });\n putWorkFile(destpath, asmout);\n }\n return {\n nexttool: \"yasm\",\n path: destpath,\n args: [destpath],\n files: [destpath],\n };\n}\n\nexport function assembleYASM(step: BuildStep): BuildStepResult {\n loadNative(\"yasm\");\n var errors = [];\n gatherFiles(step, { mainFilePath: \"main.asm\" });\n var objpath = step.prefix + \".exe\";\n var lstpath = step.prefix + \".lst\";\n var mappath = step.prefix + \".map\";\n if (staleFiles(step, [objpath])) {\n var args = ['-X', 'vc',\n '-a', 'x86', '-f', 'dosexe', '-p', 'nasm',\n '-D', 'freedos',\n //'-g', 'dwarf2',\n //'-I/share/asminc',\n '-o', objpath, '-l', lstpath, '--mapfile=' + mappath,\n step.path];\n // return yasm/*.ready*/\n var YASM: EmscriptenModule = emglobal.yasm({\n instantiateWasm: moduleInstFn('yasm'),\n noInitialRun: true,\n //logReadFiles:true,\n print: print_fn,\n printErr: msvcErrorMatcher(errors),\n });\n var FS = YASM.FS;\n //setupFS(FS, '65-'+getRootBasePlatform(step.platform));\n populateFiles(step, FS);\n //fixParamsWithDefines(step.path, step.params);\n execMain(step, YASM, args);\n if (errors.length)\n return { errors: errors };\n var objout, lstout, mapout;\n objout = FS.readFile(objpath, { encoding: 'binary' });\n lstout = FS.readFile(lstpath, { encoding: 'utf8' });\n mapout = FS.readFile(mappath, { encoding: 'utf8' });\n putWorkFile(objpath, objout);\n putWorkFile(lstpath, lstout);\n //putWorkFile(mappath, mapout);\n if (!anyTargetChanged(step, [objpath]))\n return;\n var symbolmap = {};\n var segments = [];\n var lines = parseListing(lstout, /\\s*(\\d+)\\s+([0-9a-f]+)\\s+([0-9a-f]+)\\s+(.+)/i, 1, 2, 3);\n var listings: CodeListingMap = {};\n listings[lstpath] = { lines: lines, text: lstout };\n return {\n output: objout, //.slice(0),\n listings: listings,\n errors: errors,\n symbolmap: symbolmap,\n segments: segments\n };\n }\n}\n\n", "\nimport { hex } from \"../../common/util\";\nimport { WorkerResult, CodeListingMap, WorkerError, SourceLine } from \"../../common/workertypes\";\nimport { anyTargetChanged, BuildStep, BuildStepResult, emglobal, EmscriptenModule, execMain, gatherFiles, getPrefix, getWorkFileAsString, loadNative, makeErrorMatcher, moduleInstFn, populateFiles, putWorkFile, re_crlf, staleFiles } from \"../workermain\"\n\nexport function assembleARMIPS(step: BuildStep): WorkerResult {\n loadNative(\"armips\");\n var errors = [];\n gatherFiles(step, { mainFilePath: \"main.asm\" });\n var objpath = \"main.bin\";\n var lstpath = step.prefix + \".lst\";\n var sympath = step.prefix + \".sym\";\n //test.armips(3) error: Parse error '.arm'\n var error_fn = makeErrorMatcher(errors, /^(.+?)\\((\\d+)\\)\\s+(fatal error|error|warning):\\s+(.+)/, 2, 4, step.path, 1);\n\n if (staleFiles(step, [objpath])) {\n var args = [step.path, '-temp', lstpath, '-sym', sympath, '-erroronwarning'];\n var armips: EmscriptenModule = emglobal.armips({\n instantiateWasm: moduleInstFn('armips'),\n noInitialRun: true,\n print: error_fn,\n printErr: error_fn,\n });\n\n var FS = armips.FS;\n var code = getWorkFileAsString(step.path);\n code = `.arm.little :: .create \"${objpath}\",0 :: ${code}\n .close`;\n putWorkFile(step.path, code);\n populateFiles(step, FS);\n execMain(step, armips, args);\n if (errors.length)\n return { errors: errors };\n\n var objout = FS.readFile(objpath, { encoding: 'binary' }) as Uint8Array;\n putWorkFile(objpath, objout);\n if (!anyTargetChanged(step, [objpath]))\n return;\n\n var symbolmap = {};\n var segments = [];\n var listings: CodeListingMap = {};\n var lstout = FS.readFile(lstpath, { encoding: 'utf8' }) as string;\n var lines = lstout.split(re_crlf);\n //00000034 .word 0x11223344 ; /vidfill.armips line 25\n var re_asmline = /^([0-9A-F]+) (.+?); [/](.+?) line (\\d+)/;\n var lastofs = -1;\n for (var line of lines) {\n var m;\n if (m = re_asmline.exec(line)) {\n var path = m[3];\n var path2 = getPrefix(path) + '.lst'; // TODO: don't rename listing\n var lst = listings[path2];\n if (lst == null) { lst = listings[path2] = { lines: [] }; }\n var ofs = parseInt(m[1], 16);\n if (lastofs == ofs) {\n lst.lines.pop(); // get rid of duplicate offset\n } else if (ofs > lastofs) {\n var lastline = lst.lines[lst.lines.length - 1];\n if (lastline && !lastline.insns) {\n var insns = objout.slice(lastofs, ofs).reverse();\n lastline.insns = Array.from(insns).map((b) => hex(b, 2)).join('');\n }\n }\n lst.lines.push({\n path: path,\n line: parseInt(m[4]),\n offset: ofs\n });\n lastofs = ofs;\n }\n }\n //listings[lstpath] = {lines:lstlines, text:lstout};\n\n var symout = FS.readFile(sympath, { encoding: 'utf8' }) as string;\n //0000000C loop2\n //00000034 .dbl:0004\n var re_symline = /^([0-9A-F]+)\\s+(.+)/;\n for (var line of symout.split(re_crlf)) {\n var m;\n if (m = re_symline.exec(line)) {\n symbolmap[m[2]] = parseInt(m[1], 16);\n }\n }\n\n return {\n output: objout, //.slice(0),\n listings: listings,\n errors: errors,\n symbolmap: symbolmap,\n segments: segments\n };\n }\n}\n\nexport function assembleVASMARM(step: BuildStep): BuildStepResult {\n loadNative(\"vasmarm_std\");\n /// error 2 in line 8 of \"gfxtest.c\": unknown mnemonic <ew>\n /// error 3007: undefined symbol <XXLOOP>\n /// TODO: match undefined symbols\n var re_err1 = /^(fatal error|error|warning)? (\\d+) in line (\\d+) of \"(.+)\": (.+)/;\n var re_err2 = /^(fatal error|error|warning)? (\\d+): (.+)/;\n var re_undefsym = /symbol <(.+?)>/;\n var errors: WorkerError[] = [];\n var undefsyms = [];\n function findUndefinedSymbols(line: string) {\n // find undefined symbols in line\n undefsyms.forEach((sym) => {\n if (line.indexOf(sym) >= 0) {\n errors.push({\n path: curpath,\n line: curline,\n msg: \"Undefined symbol: \" + sym,\n })\n }\n });\n }\n function match_fn(s) {\n let matches = re_err1.exec(s);\n if (matches) {\n errors.push({\n line: parseInt(matches[3]),\n path: matches[4],\n msg: matches[5],\n });\n } else {\n matches = re_err2.exec(s);\n if (matches) {\n let m = re_undefsym.exec(matches[3]);\n if (m) {\n undefsyms.push(m[1]);\n } else {\n errors.push({\n line: 0,\n msg: s,\n });\n }\n } else {\n console.log(s);\n }\n }\n }\n\n gatherFiles(step, { mainFilePath: \"main.asm\" });\n var objpath = step.prefix + \".bin\";\n var lstpath = step.prefix + \".lst\";\n\n if (staleFiles(step, [objpath])) {\n var args = ['-Fbin', '-m7tdmi', '-x', '-wfail', step.path, '-o', objpath, '-L', lstpath];\n var vasm: EmscriptenModule = emglobal.vasm({\n instantiateWasm: moduleInstFn('vasmarm_std'),\n noInitialRun: true,\n print: match_fn,\n printErr: match_fn,\n });\n\n var FS = vasm.FS;\n populateFiles(step, FS);\n execMain(step, vasm, args);\n if (errors.length) {\n return { errors: errors };\n }\n\n if (undefsyms.length == 0) {\n var objout = FS.readFile(objpath, { encoding: 'binary' });\n putWorkFile(objpath, objout);\n if (!anyTargetChanged(step, [objpath]))\n return;\n }\n\n var lstout = FS.readFile(lstpath, { encoding: 'utf8' });\n // 00:00000018 023020E0 \t 14: eor r3, r0, r2\n // Source: \"vidfill.vasm\"\n // 00: \".text\" (0-40)\n // LOOP 00:00000018\n // STACK S:20010000\n var symbolmap = {};\n var segments = []; // TODO\n var listings: CodeListingMap = {};\n // TODO: parse listings\n var re_asmline = /^(\\d+):([0-9A-F]+)\\s+([0-9A-F ]+)\\s+(\\d+)([:M])/;\n var re_secline = /^(\\d+):\\s+\"(.+)\"/;\n var re_nameline = /^Source:\\s+\"(.+)\"/;\n var re_symline = /^(\\w+)\\s+(\\d+):([0-9A-F]+)/;\n var re_emptyline = /^\\s+(\\d+)([:M])/;\n var curpath = step.path;\n var curline = 0;\n var sections = {};\n // map file and section indices -> names\n var lines: string[] = lstout.split(re_crlf);\n // parse lines\n var lstlines: SourceLine[] = [];\n for (var line of lines) {\n var m;\n if (m = re_secline.exec(line)) {\n sections[m[1]] = m[2];\n } else if (m = re_nameline.exec(line)) {\n curpath = m[1];\n } else if (m = re_symline.exec(line)) {\n symbolmap[m[1]] = parseInt(m[3], 16);\n } else if (m = re_asmline.exec(line)) {\n if (m[5] == ':') {\n curline = parseInt(m[4]);\n } else {\n // TODO: macro line\n }\n lstlines.push({\n path: curpath,\n line: curline,\n offset: parseInt(m[2], 16),\n insns: m[3].replaceAll(' ', '')\n });\n findUndefinedSymbols(line);\n } else if (m = re_emptyline.exec(line)) {\n curline = parseInt(m[1]);\n findUndefinedSymbols(line);\n } else {\n //console.log(line);\n }\n }\n listings[lstpath] = { lines: lstlines, text: lstout };\n // catch-all if no error generated\n if (undefsyms.length && errors.length == 0) {\n errors.push({\n line: 0,\n msg: 'Undefined symbols: ' + undefsyms.join(', ')\n })\n }\n\n return {\n output: objout, //.slice(0x34),\n listings: listings,\n errors: errors,\n symbolmap: symbolmap,\n segments: segments\n };\n }\n}\n\n", "\nimport type { SourceLocation, SourceLine, WorkerError, SourceLocated } from \"./workertypes\";\n\nexport class CompileError extends Error {\n $loc: SourceLocation;\n constructor(msg: string, loc: SourceLocation) {\n super(msg);\n Object.setPrototypeOf(this, CompileError.prototype);\n this.$loc = loc;\n }\n}\n\nexport function mergeLocs(a: SourceLocation, b: SourceLocation): SourceLocation {\n return {\n line: Math.min(a.line, b.line),\n start: Math.min(a.start, b.start),\n end: Math.max(a.end, b.end),\n label: a.label || b.label,\n path: a.path || b.path,\n }\n}\n\nexport enum TokenType {\n EOF = 'eof',\n EOL = 'eol',\n Ident = 'ident',\n Comment = 'comment',\n Ignore = 'ignore',\n CatchAll = 'catch-all',\n}\n\nexport class Token implements SourceLocated {\n str: string;\n type: string;\n eol: boolean; // end of line?\n $loc: SourceLocation;\n}\n\nexport class TokenRule {\n type: string;\n regex: RegExp;\n}\n\nconst CATCH_ALL_RULES: TokenRule[] = [\n { type: TokenType.CatchAll, regex: /.+?/ }\n]\n\nfunction re_escape(rule: TokenRule): string {\n return `(${rule.regex.source})`;\n}\n\nexport class TokenizerRuleSet {\n rules: TokenRule[];\n regex: RegExp;\n constructor(rules: TokenRule[]) {\n this.rules = rules.concat(CATCH_ALL_RULES);\n var pattern = this.rules.map(re_escape).join('|');\n this.regex = new RegExp(pattern, \"gs\"); // global, dotall\n }\n}\n\nexport class Tokenizer {\n ruleset: TokenizerRuleSet;\n lineindex: number[];\n path: string;\n lineno: number;\n tokens: Token[];\n lasttoken: Token;\n errors: WorkerError[];\n curlabel: string;\n eof: Token;\n errorOnCatchAll = false;\n deferred: (() => void)[] = [];\n\n constructor() {\n this.errors = [];\n this.lineno = 0;\n this.lineindex = [];\n this.tokens = [];\n }\n setTokenRuleSet(ruleset: TokenizerRuleSet) {\n this.ruleset = ruleset;\n }\n setTokenRules(rules: TokenRule[]) {\n this.setTokenRuleSet(new TokenizerRuleSet(rules));\n }\n tokenizeFile(contents: string, path: string) {\n this.path = path;\n let m;\n let re = /\\n|\\r\\n?/g;\n this.lineindex.push(0);\n while (m = re.exec(contents)) {\n this.lineindex.push(m.index);\n }\n this._tokenize(contents);\n this.eof = { type: TokenType.EOF, str: \"\", eol: true, $loc: { path: this.path, line: this.lineno } };\n this.pushToken(this.eof);\n }\n _tokenize(text: string): void {\n // iterate over each token via re_toks regex\n let m: RegExpMatchArray;\n this.lineno = 0;\n while (m = this.ruleset.regex.exec(text)) {\n let found = false;\n // find line #\n while (m.index >= this.lineindex[this.lineno]) {\n this.lineno++;\n }\n // find out which capture group was matched, and thus token type\n let rules = this.ruleset.rules;\n for (let i = 0; i < rules.length; i++) {\n let s: string = m[i + 1];\n if (s != null) {\n found = true;\n let col = m.index - (this.lineindex[this.lineno-1] || -1) - 1;\n let loc = { path: this.path, line: this.lineno, start: col, end: col + s.length };\n let rule = rules[i];\n // add token to list\n switch (rule.type) {\n case TokenType.CatchAll:\n if (this.errorOnCatchAll) {\n this.compileError(`I didn't expect the character \"${m[0]}\" here.`, loc);\n }\n default:\n this.pushToken({ str: s, type: rule.type, $loc: loc, eol: false });\n break;\n case TokenType.EOL:\n // set EOL for last token\n if (this.tokens.length)\n this.tokens[this.tokens.length-1].eol = true;\n case TokenType.Comment:\n case TokenType.Ignore:\n break;\n }\n break;\n }\n }\n if (!found) {\n this.compileError(`Could not parse token: <<${m[0]}>>`)\n }\n }\n }\n pushToken(token: Token) {\n this.tokens.push(token);\n }\n addError(msg: string, loc?: SourceLocation) {\n let tok = this.lasttoken || this.peekToken();\n if (!loc) loc = tok.$loc;\n this.errors.push({ path: loc.path, line: loc.line, label: this.curlabel, start: loc.start, end: loc.end, msg: msg });\n }\n internalError() {\n return this.compileError(\"Internal error.\");\n }\n notImplementedError() {\n return this.compileError(\"Not yet implemented.\");\n }\n compileError(msg: string, loc?: SourceLocation, loc2?: SourceLocation) : CompileError {\n this.addError(msg, loc);\n //if (loc2 != null) this.addError(`...`, loc2);\n let e = new CompileError(msg, loc);\n throw e;\n return e;\n }\n peekToken(lookahead?: number): Token {\n let tok = this.tokens[lookahead || 0];\n return tok ? tok : this.eof;\n }\n consumeToken(): Token {\n let tok = this.lasttoken = (this.tokens.shift() || this.eof);\n return tok;\n }\n ifToken(match: string): Token | undefined {\n if (this.peekToken().str == match) return this.consumeToken();\n }\n expectToken(str: string, msg?: string): Token {\n let tok = this.consumeToken();\n let tokstr = tok.str;\n if (str != tokstr) {\n this.compileError(msg || `There should be a \"${str}\" here.`);\n }\n return tok;\n }\n expectTokens(strlist: readonly string[], msg?: string): Token {\n let tok = this.consumeToken();\n let tokstr = tok.str;\n if (!strlist.includes(tokstr)) {\n this.compileError(msg || `These keywords are valid here: ${strlist.join(', ')}`);\n }\n return tok;\n }\n parseModifiers(modifiers: string[]): { [modifier: string]: boolean } {\n let result = {};\n do {\n var tok = this.peekToken();\n if (modifiers.indexOf(tok.str) < 0)\n return result;\n this.consumeToken();\n result[tok.str] = true;\n } while (tok != null);\n }\n expectIdent(msg?: string): Token {\n let tok = this.consumeToken();\n if (tok.type != TokenType.Ident)\n this.compileError(msg || `There should be an identifier here.`);\n return tok;\n }\n pushbackToken(tok: Token) {\n this.tokens.unshift(tok);\n }\n isEOF() {\n return this.tokens.length == 0 || this.peekToken().type == 'eof'; // TODO?\n }\n expectEOL(msg?: string) {\n let tok = this.consumeToken();\n if (tok.type != TokenType.EOL)\n this.compileError(msg || `There's too much stuff on this line.`);\n }\n skipBlankLines() {\n this.skipTokenTypes(['eol']);\n }\n skipTokenTypes(types: string[]) {\n while (types.includes(this.peekToken().type))\n this.consumeToken();\n }\n expectTokenTypes(types: string[], msg?: string) {\n let tok = this.consumeToken();\n if (!types.includes(tok.type))\n this.compileError(msg || `There should be a ${types.map((s) => `\"${s}\"`).join(' or ')} here. not a \"${tok.type}\".`);\n return tok;\n }\n parseList<T>(parseFunc:()=>T, delim:string): T[] {\n var sep;\n var list = [];\n do {\n var el = parseFunc.bind(this)(); // call parse function\n if (el != null) list.push(el); // add parsed element to list\n sep = this.consumeToken(); // consume seperator token\n } while (sep.str == delim);\n this.pushbackToken(sep);\n return list;\n }\n runDeferred() {\n while (this.deferred.length) {\n this.deferred.shift()();\n }\n }\n}\n", "\nvar debug = false;\n\nexport interface BoxConstraints {\n left?: number;\n top?: number;\n width: number;\n height: number;\n box?: PlacedBox;\n label?: string;\n}\n\nenum BoxPlacement {\n TopLeft=0, TopRight=1, BottomLeft=2, BottomRight=3\n}\n\nexport interface Box {\n left: number;\n top: number;\n right: number;\n bottom: number;\n}\n\nexport interface PlacedBox extends Box {\n bin: Bin;\n parents: Box[];\n place: BoxPlacement;\n}\n\nfunction boxesIntersect(a: Box, b: Box) : boolean {\n return !(b.left >= a.right || b.right <= a.left || b.top >= a.bottom || b.bottom <= a.top);\n}\n\nfunction boxesContain(a: Box, b: Box) : boolean {\n return b.left >= a.left && b.top >= a.top && b.right <= a.right && b.bottom <= a.bottom;\n}\n\nexport class Bin {\n boxes: Box[] = [];\n free: Box[] = [];\n extents: Box = {left:0,top:0,right:0,bottom:0};\n\n constructor(public readonly binbounds: Box) {\n this.free.push(binbounds);\n }\n getBoxes(bounds: Box, limit: number, boxes?: Box[]) : Box[] {\n let result = [];\n if (!boxes) boxes = this.boxes;\n for (let box of boxes) {\n //console.log(bounds, box, boxesIntersect(bounds, box))\n if (boxesIntersect(bounds, box)) {\n result.push(box);\n if (result.length >= limit) break;\n }\n }\n return result;\n }\n fits(b: Box) {\n if (!boxesContain(this.binbounds, b)) {\n if (debug) console.log('out of bounds!', b.left,b.top,b.right,b.bottom);\n return false;\n }\n if (this.getBoxes(b, 1).length > 0) {\n if (debug) console.log('intersect!', b.left,b.top,b.right,b.bottom);\n return false;\n }\n return true;\n }\n bestFit(b: BoxConstraints) : Box | null {\n let bestscore = 0;\n let best = null;\n for (let f of this.free) {\n if (b.left != null && b.left < f.left) continue;\n if (b.left != null && b.left + b.width > f.right) continue;\n if (b.top != null && b.top < f.top) continue;\n if (b.top != null && b.top + b.height > f.bottom) continue;\n let dx = (f.right - f.left) - b.width;\n let dy = (f.bottom - f.top) - b.height;\n if (dx >= 0 && dy >= 0) {\n let score = 1 / (1 + dx + dy + f.left * 0.001);\n if (score > bestscore) {\n best = f;\n bestscore = score;\n if (score == 1) break;\n }\n }\n }\n return best;\n }\n anyFit(b: BoxConstraints) : Box | null {\n let bestscore = 0;\n let best = null;\n for (let f of this.free) {\n let box : Box = { \n left: b.left != null ? b.left : f.left, \n right: f.left + b.width,\n top: b.top != null ? b.top : f.top,\n bottom: f.top + b.height };\n if (this.fits(box)) {\n let score = 1 / (1 + box.left + box.top);\n if (score > bestscore) {\n best = f;\n if (score == 1) break;\n }\n }\n }\n return best;\n }\n add(b: PlacedBox) {\n if (debug) console.log('add', b.left,b.top,b.right,b.bottom);\n if (!this.fits(b)) {\n //console.log('collided with', this.getBoxes(b, 1));\n throw new Error(`bad fit ${b.left} ${b.top} ${b.right} ${b.bottom}`)\n }\n // add box to list\n this.boxes.push(b);\n this.extents.right = Math.max(this.extents.right, b.right);\n this.extents.bottom = Math.max(this.extents.bottom, b.bottom);\n // delete bin\n for (let p of b.parents) {\n let i = this.free.indexOf(p);\n if (i < 0) throw new Error('cannot find parent');\n if (debug) console.log('removed',p.left,p.top,p.right,p.bottom);\n this.free.splice(i, 1);\n // split into new bins\n // make long columns\n this.addFree(p.left, p.top, b.left, p.bottom);\n this.addFree(b.right, p.top, p.right, p.bottom);\n // make top caps\n this.addFree(b.left, p.top, b.right, b.top);\n this.addFree(b.left, b.bottom, b.right, p.bottom);\n }\n }\n addFree(left: number, top: number, right: number, bottom: number) {\n if (bottom > top && right > left) {\n let b = { left, top, right, bottom };\n if (debug) console.log('free',b.left,b.top,b.right,b.bottom);\n this.free.push(b);\n }\n // TODO: merge free boxes?\n }\n}\n\nexport class Packer {\n bins : Bin[] = [];\n boxes : BoxConstraints[] = [];\n defaultPlacement : BoxPlacement = BoxPlacement.TopLeft; //TODO\n\n pack() : boolean {\n for (let bc of this.boxes) {\n let box = this.bestPlacement(bc);\n if (!box) return false;\n box.bin.add(box);\n bc.box = box;\n }\n return true;\n }\n bestPlacement(b: BoxConstraints) : PlacedBox | null {\n for (let bin of this.bins) {\n let parent = bin.bestFit(b);\n let approx = false;\n if (!parent) {\n parent = bin.anyFit(b);\n approx = true;\n if (debug) console.log('anyfit',parent?.left,parent?.top);\n }\n if (parent) {\n let place = this.defaultPlacement;\n let box = {\n left: parent.left,\n top: parent.top,\n right: parent.left + b.width,\n bottom: parent.top + b.height\n };\n if (b.left != null) {\n box.left = b.left;\n box.right = b.left + b.width;\n }\n if (b.top != null) {\n box.top = b.top;\n box.bottom = b.top + b.height;\n }\n if (place == BoxPlacement.BottomLeft || place == BoxPlacement.BottomRight) {\n let h = box.bottom - box.top;\n box.top = parent.bottom - h;\n box.bottom = parent.bottom;\n }\n if (place == BoxPlacement.TopRight || place == BoxPlacement.BottomRight) {\n let w = box.right - box.left;\n box.left = parent.right - w;\n box.right = parent.right;\n }\n if (debug) console.log('place',b.label,box.left,box.top,box.right,box.bottom,parent?.left,parent?.top);\n let parents = [parent];\n // if approx match, might overlap multiple free boxes\n if (approx) parents = bin.getBoxes(box, 100, bin.free);\n return { parents, place, bin, ...box };\n }\n }\n if (debug) console.log('cannot place!', b.left,b.top,b.width,b.height);\n return null;\n }\n toSVG() {\n let s = '';\n let r = {width:100,height:70}\n for (let bin of this.bins) {\n r.width = Math.max(r.width, bin.binbounds.right);\n r.height = Math.max(r.height, bin.binbounds.bottom);\n }\n s += `<svg viewBox=\"0 0 ${r.width} ${r.height}\" xmlns=\"http://www.w3.org/2000/svg\"><style><![CDATA[text {font: 1px sans-serif;}]]></style>`;\n for (let bin of this.bins) {\n let be = bin.extents;\n s += '<g>'\n s += `<rect width=\"${be.right-be.left}\" height=\"${be.bottom-be.top}\" stroke=\"black\" stroke-width=\"0.5\" fill=\"none\"/>`;\n let textx = be.right+1;\n let texty = 0;\n for (let box of this.boxes) {\n let b = box.box;\n if (b) {\n if (b.bin == bin) s += `<rect width=\"${b.right-b.left}\" height=\"${b.bottom-b.top}\" x=\"${b.left}\" y=\"${b.top}\" stroke=\"black\" stroke-width=\"0.25\" fill=\"#ccc\"/>`;\n if (b.top == texty) textx += 10; else textx = be.right+1;\n texty = b.top;\n if (box.label) s += `<text x=\"${textx}\" y=\"${texty}\" height=\"1\">${box.label}</text>`;\n }\n }\n /*\n for (let b of bin.free) {\n s += `<rect width=\"${b.right-b.left}\" height=\"${b.bottom-b.top}\" x=\"${b.left}\" y=\"${b.top}\" stroke=\"red\" stroke-width=\"0.1\" fill=\"none\"/>`;\n }\n */\n s += '</g>'\n }\n s += `</svg>`;\n return s;\n }\n toSVGUrl() {\n return `data:image/svg+xml;base64,${btoa(this.toSVG())}`;\n }\n}\n", "\nimport { Token } from \"../tokenizer\";\nimport { SourceLocated, SourceLocation } from \"../workertypes\";\nimport { Bin, Packer } from \"./binpack\";\n\nexport class ECSError extends Error implements SourceLocated {\n $loc: SourceLocation;\n $sources: SourceLocated[] = [];\n\n constructor(msg: string, obj?: SourceLocation | SourceLocated) {\n super(msg);\n Object.setPrototypeOf(this, ECSError.prototype);\n if (obj) this.$loc = (obj as SourceLocated).$loc || (obj as SourceLocation);\n }\n}\n\nfunction mksymbol(c: ComponentType, fieldName: string) {\n return c.name + '_' + fieldName;\n}\nfunction mkscopesymbol(s: EntityScope, c: ComponentType, fieldName: string) {\n return s.name + '_' + c.name + '_' + fieldName;\n}\n\nexport interface Entity extends SourceLocated {\n id: number;\n name?: string;\n etype: EntityArchetype;\n consts: { [component_field: string]: DataValue };\n // TODO: need scope scoping?\n inits: { [scope_component_field: string]: DataValue };\n}\n\nexport interface EntityConst {\n component: ComponentType;\n name: string;\n value: DataValue;\n}\n\nexport interface EntityArchetype {\n components: ComponentType[];\n}\n\nexport interface ComponentType extends SourceLocated {\n name: string;\n fields: DataField[];\n optional?: boolean;\n}\n\nexport interface Query extends SourceLocated {\n include: ComponentType[];\n exclude?: ComponentType[];\n entities?: Entity[];\n limit?: number;\n}\n\nexport class SystemStats {\n tempstartseq: number | undefined;\n tempendseq: number | undefined;\n}\n\nexport interface System extends SourceLocated {\n name: string;\n actions: Action[];\n tempbytes?: number;\n}\n\nexport interface SystemInstanceParameters {\n query?: Query;\n refEntity?: Entity;\n refField?: ComponentFieldPair;\n}\n\nexport interface SystemInstance extends SourceLocated {\n system: System;\n params: SystemInstanceParameters;\n id: number;\n}\n\nexport const SELECT_TYPE = ['once', 'foreach', 'join', 'with', 'if', 'select', 'unroll'] as const;\n\nexport type SelectType = typeof SELECT_TYPE[number];\n\n// TODO?\nexport interface ActionContext {\n system: System\n scope: EntityScope | null\n}\n\nexport class ActionNode implements SourceLocated {\n constructor(\n public readonly owner: ActionContext,\n public readonly $loc: SourceLocation\n ) { }\n\n children?: ActionNode[];\n}\n\nexport class CodeLiteralNode extends ActionNode {\n constructor(\n owner: ActionContext,\n $loc: SourceLocation,\n public readonly text: string\n ) {\n super(owner, $loc);\n }\n}\n\nexport class CodePlaceholderNode extends ActionNode {\n constructor(\n owner: ActionContext,\n $loc: SourceLocation,\n public readonly args: string[]\n ) {\n super(owner, $loc);\n }\n}\n\nexport interface Action extends SourceLocated {\n event: string;\n expr: Statement;\n critical?: boolean;\n fitbytes?: number;\n}\n\nexport type DataValue = number | boolean | Uint8Array | Uint16Array | Uint32Array;\n\nexport type DataField = { name: string; $loc: SourceLocation } & DataType;\n\nexport type DataType = IntType | ArrayType | RefType;\n\nexport interface IntType {\n dtype: 'int'\n lo: number\n hi: number\n defvalue?: number\n enums?: { [name: string] : number }\n}\n\nexport interface ArrayType {\n dtype: 'array'\n elem: DataType\n index?: DataType\n baseoffset?: number\n}\n\nexport interface RefType {\n dtype: 'ref'\n query: Query\n}\n\ninterface FieldArray {\n component: ComponentType;\n field: DataField;\n elo: number;\n ehi: number;\n access?: FieldAccess[];\n}\n\ninterface FieldAccess {\n symbol: string;\n bit: number;\n width: number;\n}\n\ninterface ConstByte {\n symbol: string;\n bitofs: number;\n}\n\nexport interface ComponentFieldPair {\n c: ComponentType;\n f: DataField;\n}\n\n// Expressions\n\nexport interface ForwardRef extends SourceLocated {\n reftype: RefType | undefined\n token: Token\n}\n\nexport type LExpr = IndOp | EntityFieldOp;\nexport type Statement = InlineCode | BlockExpr | QueryExpr;\nexport type Expr = BinOp | UnOp | Literal | ForwardRef | LExpr | Statement;\nexport type Opcode = string;\n\nexport interface ExprBase extends SourceLocated {\n valtype: DataType;\n}\n\nexport interface Literal extends ExprBase {\n value: DataValue;\n}\n\nexport interface LiteralInt extends Literal {\n value: number;\n valtype: IntType;\n}\n\nexport interface BinOp extends ExprBase {\n op: Opcode;\n left: Expr;\n right: Expr;\n}\n\nexport interface UnOp extends ExprBase {\n op: 'neg' | 'lnot' | 'bnot';\n expr: Expr;\n}\n\nexport interface IndOp extends ExprBase {\n name: string;\n args: Expr[];\n}\n\nexport interface CondOp extends ExprBase {\n cond: Expr;\n iftrue?: Expr;\n iffalse?: Expr;\n}\n\nexport interface BranchOp extends ExprBase {\n branch: BlockExpr;\n}\n\nexport interface EntityFieldOp extends ExprBase {\n entities: Entity[];\n field: DataField;\n}\n\nexport interface EntityContextOp extends ExprBase {\n entities: Entity[];\n}\n\nexport interface InlineCode extends ExprBase {\n code: string;\n}\n\nexport interface BlockExpr extends ExprBase {\n loop?: boolean;\n stmts: Expr[];\n}\n\nexport interface QueryExpr extends BlockExpr {\n select: SelectType\n query: Query\n direction?: 'asc' | 'desc'\n join?: Query\n all?: boolean\n}\n\n\nexport function isLiteral(arg: Expr): arg is Literal {\n return (arg as any).value != null;\n}\nexport function isLiteralInt(arg: Expr): arg is LiteralInt {\n return isLiteral(arg) && arg.valtype.dtype == 'int';\n}\nexport function isLookup(arg: Expr): arg is IndOp {\n return (arg as any).name != null;\n}\nexport function isBinOp(arg: Expr): arg is BinOp {\n return (arg as any).op != null && (arg as any).left != null && (arg as any).right != null;\n}\nexport function isUnOp(arg: Expr): arg is UnOp {\n return (arg as any).op != null && (arg as any).expr != null;\n}\nexport function isBlockStmt(arg: Expr): arg is BlockExpr {\n return (arg as any).stmts != null;\n}\nexport function isInlineCode(arg: Expr): arg is InlineCode {\n return (arg as any).code != null;\n}\nexport function isQueryExpr(arg: Expr): arg is QueryExpr {\n return (arg as any).query != null;\n}\n\n\n/// DIALECT\n\nexport class Dialect_CA65 {\n\n ASM_ITERATE_EACH_ASC = `\n ldx #0\n@__each:\n {{%code}}\n inx\n cpx #{{%ecount}}\n jne @__each\n@__exit:\n`;\n\n ASM_ITERATE_EACH_DESC = `\n ldx #{{%ecount}}-1\n@__each:\n {{%code}}\n dex\n jpl @__each\n@__exit:\n`;\n\n ASM_ITERATE_JOIN_ASC = `\n ldy #0\n@__each:\n ldx {{%joinfield}},y\n {{%code}}\n iny\n cpy #{{%ecount}}\n jne @__each\n@__exit:\n`;\n\n ASM_ITERATE_JOIN_DESC = `\n ldy #{{%ecount}}-1\n@__each:\n ldx {{%joinfield}},y\n {{%code}}\n dey\n jpl @__each\n@__exit:\n`;\n\n ASM_FILTER_RANGE_LO_X = `\n cpx #{{%xofs}}\n jcc @__skipxlo\n {{%code}}\n@__skipxlo:\n`\n\n ASM_FILTER_RANGE_HI_X = `\n cpx #{{%xofs}}+{{%ecount}}\n jcs @__skipxhi\n {{%code}}\n@__skipxhi:\n`\n\n ASM_LOOKUP_REF_X = `\n ldx {{%reffield}}\n {{%code}}\n`\n\n INIT_FROM_ARRAY = `\n ldy #{{%nbytes}}\n: lda {{%src}}-1,y\n sta {{%dest}}-1,y\n dey\n bne :-\n`\n\n comment(s: string) {\n return `\\n;;; ${s}\\n`;\n }\n absolute(ident: string, offset?: number) {\n return this.addOffset(ident, offset || 0);\n }\n addOffset(ident: string, offset: number) {\n if (offset > 0) return `${ident}+${offset}`;\n if (offset < 0) return `${ident}-${-offset}`;\n return ident;\n }\n indexed_x(ident: string, offset: number) {\n return this.addOffset(ident, offset) + ',x';\n }\n indexed_y(ident: string, offset: number) {\n return this.addOffset(ident, offset) + ',y';\n }\n fieldsymbol(component: ComponentType, field: DataField, bitofs: number) {\n return `${component.name}_${field.name}_b${bitofs}`;\n }\n datasymbol(component: ComponentType, field: DataField, eid: number, bitofs: number) {\n return `${component.name}_${field.name}_e${eid}_b${bitofs}`;\n }\n debug_file(path: string) {\n return `.dbg file, \"${path}\", 0, 0`\n }\n debug_line(path: string, line: number) {\n return `.dbg line, \"${path}\", ${line}`\n }\n startScope(name: string) {\n return `.scope ${name}`\n }\n endScope(name: string) {\n return `.endscope\\n${this.scopeSymbol(name)} = ${name}::__Start`\n }\n scopeSymbol(name: string) {\n return `${name}__Start`;\n }\n align(value: number) {\n return `.align ${value}`;\n }\n alignSegmentStart() {\n return this.label('__ALIGNORIGIN');\n }\n warningIfPageCrossed(startlabel: string) {\n return `\n.assert >(${startlabel}) = >(*), error, \"${startlabel} crosses a page boundary!\"`\n }\n warningIfMoreThan(bytes: number, startlabel: string) {\n return `\n.assert (* - ${startlabel}) <= ${bytes}, error, .sprintf(\"${startlabel} does not fit in ${bytes} bytes, it took %d!\", (* - ${startlabel}))`\n }\n alignIfLessThan(bytes: number) {\n return `\n.if <(* - __ALIGNORIGIN) > 256-${bytes}\n.align $100\n.endif`\n }\n segment(segtype: 'rodata' | 'bss' | 'code') {\n if (segtype == 'bss') {\n return `.zeropage`;\n } else if (segtype == 'rodata') {\n return '.rodata';\n } else {\n return `.code`;\n }\n }\n label(sym: string) {\n return `${sym}:`;\n }\n export(sym: string) {\n return `.export _${sym} = ${sym}`;\n }\n byte(b: number | ConstByte | undefined) {\n if (b === undefined) {\n return `.res 1`\n } else if (typeof b === 'number') {\n if (b < 0 || b > 255) throw new ECSError(`out of range byte ${b}`);\n return `.byte ${b}`\n } else {\n if (b.bitofs == 0) return `.byte <${b.symbol}`\n else if (b.bitofs == 8) return `.byte >${b.symbol}`\n else return `.byte ((${b.symbol} >> ${b.bitofs})&255)`\n }\n }\n tempLabel(inst: SystemInstance) {\n return `${inst.system.name}__${inst.id}__tmp`;\n }\n equate(symbol: string, value: string): string {\n return `${symbol} = ${value}`;\n }\n define(symbol: string, value?: string): string {\n if (value) return `.define ${symbol} ${value}`;\n else return `.define ${symbol}`;\n }\n call(symbol: string) {\n return ` jsr ${symbol}`;\n }\n jump(symbol: string) {\n return ` jmp ${symbol}`;\n }\n return() {\n return ' rts';\n }\n}\n\n// TODO: merge with Dialect?\nexport class SourceFileExport {\n lines: string[] = [];\n\n line(s: string) {\n this.text(s);\n }\n text(s: string) {\n for (let l of s.split('\\n'))\n this.lines.push(l);\n }\n toString() {\n return this.lines.join('\\n');\n }\n}\n\nclass CodeSegment {\n codefrags: string[] = [];\n\n addCodeFragment(code: string) {\n this.codefrags.push(code);\n }\n dump(file: SourceFileExport) {\n for (let code of this.codefrags) {\n file.text(code);\n }\n }\n}\n\nclass DataSegment {\n symbols: { [sym: string]: number } = {};\n equates: { [sym: string]: string } = {};\n ofs2sym = new Map<number, string[]>();\n fieldranges: { [cfname: string]: FieldArray } = {};\n size: number = 0;\n initdata: (number | ConstByte | undefined)[] = [];\n\n allocateBytes(name: string, bytes: number) {\n let ofs = this.symbols[name];\n if (ofs == null) {\n ofs = this.size;\n this.declareSymbol(name, ofs);\n this.size += bytes;\n }\n return ofs;\n }\n declareSymbol(name: string, ofs: number) {\n this.symbols[name] = ofs;\n if (!this.ofs2sym.has(ofs))\n this.ofs2sym.set(ofs, []);\n this.ofs2sym.get(ofs)?.push(name);\n }\n // TODO: ordering should not matter, but it does\n findExistingInitData(bytes: Uint8Array) {\n for (let i=0; i<this.size - bytes.length; i++) {\n for (var j=0; j<bytes.length; j++) {\n if (this.initdata[i+j] !== bytes[j]) break;\n }\n if (j == bytes.length) return i;\n }\n return -1;\n }\n allocateInitData(name: string, bytes: Uint8Array) {\n let ofs = this.findExistingInitData(bytes);\n if (ofs >= 0) {\n this.declareSymbol(name, ofs);\n } else {\n ofs = this.allocateBytes(name, bytes.length);\n for (let i = 0; i < bytes.length; i++) {\n this.initdata[ofs + i] = bytes[i];\n }\n }\n }\n dump(file: SourceFileExport, dialect: Dialect_CA65, doExport: boolean) {\n // TODO: fewer lines\n for (let i = 0; i < this.size; i++) {\n let syms = this.ofs2sym.get(i);\n if (syms) {\n for (let sym of syms) {\n if (doExport) file.line(dialect.export(sym)); // TODO: this is a hack for C export\n file.line(dialect.label(sym));\n }\n }\n file.line(dialect.byte(this.initdata[i]));\n }\n for (let [symbol,value] of Object.entries(this.equates)) {\n file.line(dialect.equate(symbol, value));\n }\n }\n // TODO: move cfname functions in here too\n getFieldRange(component: ComponentType, fieldName: string) {\n return this.fieldranges[mksymbol(component, fieldName)];\n }\n getByteOffset(range: FieldArray, access: FieldAccess, entityID: number) {\n if (entityID < range.elo) throw new ECSError(`entity ID ${entityID} too low for ${access.symbol}`);\n if (entityID > range.ehi) throw new ECSError(`entity ID ${entityID} too high for ${access.symbol}`);\n let ofs = this.symbols[access.symbol];\n if (ofs !== undefined) {\n return ofs + entityID - range.elo;\n }\n throw new ECSError(`cannot find field access for ${access.symbol}`);\n }\n getOriginSymbol() {\n let a = this.ofs2sym.get(0);\n if (!a) throw new ECSError('getOriginSymbol(): no symbol at offset 0'); // TODO\n return a[0];\n }\n}\n\nclass UninitDataSegment extends DataSegment {\n}\n\nclass ConstDataSegment extends DataSegment {\n}\n\n// TODO: none of this makes sense\nfunction getFieldBits(f: IntType) {\n //let n = Math.abs(f.lo) + f.hi + 1;\n let n = f.hi - f.lo + 1;\n return Math.ceil(Math.log2(n));\n}\n\nfunction getFieldLength(f: DataType) {\n if (f.dtype == 'int') {\n return f.hi - f.lo + 1;\n } else {\n return 1; //TODO?\n }\n}\n\nfunction getPackedFieldSize(f: DataType, constValue?: DataValue): number {\n if (f.dtype == 'int') {\n return getFieldBits(f);\n } if (f.dtype == 'array' && f.index) {\n return 0; // TODO? getFieldLength(f.index) * getPackedFieldSize(f.elem);\n } if (f.dtype == 'array' && constValue != null && Array.isArray(constValue)) {\n return constValue.length * getPackedFieldSize(f.elem);\n } if (f.dtype == 'ref') {\n return 8; // TODO: > 256 entities?\n }\n return 0;\n}\n\nclass EntitySet {\n atypes: EntityArchetype[];\n entities: Entity[];\n scope;\n\n constructor(scope: EntityScope, query?: Query, e?: Entity[]) {\n this.scope = scope;\n if (query) {\n if (query.entities) {\n this.entities = query.entities.slice(0);\n } else {\n this.atypes = scope.em.archetypesMatching(query);\n this.entities = scope.entitiesMatching(this.atypes);\n }\n // TODO: desc?\n if (query.limit) {\n this.entities = this.entities.slice(0, query.limit);\n }\n } else if (e) {\n this.entities = e;\n } else {\n throw new ECSError('invalid EntitySet constructor')\n }\n if (!this.atypes) {\n let at = new Set<EntityArchetype>();\n for (let e of this.entities) at.add(e.etype);\n this.atypes = Array.from(at.values());\n }\n }\n contains(c: ComponentType, f: DataField, where: SourceLocated) {\n // TODO: action for error msg\n return this.scope.em.singleComponentWithFieldName(this.atypes, f.name, where);\n }\n intersection(qr: EntitySet) {\n let ents = this.entities.filter(e => qr.entities.includes(e));\n return new EntitySet(this.scope, undefined, ents);\n }\n union(qr: EntitySet) {\n // TODO: remove dups\n let ents = this.entities.concat(qr.entities);\n let atypes = this.atypes.concat(qr.atypes);\n return new EntitySet(this.scope, undefined, ents);\n }\n isContiguous() {\n if (this.entities.length == 0) return true;\n let id = this.entities[0].id;\n for (let i = 1; i < this.entities.length; i++) {\n if (this.entities[i].id != ++id) return false;\n }\n return true;\n }\n}\n\nclass IndexRegister {\n lo: number | null;\n hi: number | null;\n elo: number;\n ehi: number;\n eset: EntitySet | undefined;\n\n constructor(\n public readonly scope: EntityScope,\n eset?: EntitySet\n ) {\n this.elo = 0;\n this.ehi = scope.entities.length - 1;\n this.lo = null;\n this.hi = null;\n if (eset) { this.narrowInPlace(eset); }\n }\n entityCount() {\n return this.ehi - this.elo + 1;\n }\n clone() {\n return Object.assign(new IndexRegister(this.scope), this);\n }\n narrow(eset: EntitySet, action?: SourceLocated) {\n let i = this.clone();\n return i.narrowInPlace(eset, action) ? i : null;\n }\n narrowInPlace(eset: EntitySet, action?: SourceLocated): boolean {\n if (this.scope != eset.scope) throw new ECSError(`scope mismatch`, action);\n if (!eset.isContiguous()) throw new ECSError(`entities are not contiguous`, action);\n if (this.eset) {\n this.eset = this.eset.intersection(eset);\n } else {\n this.eset = eset;\n }\n if (this.eset.entities.length == 0) {\n return false;\n }\n let newelo = this.eset.entities[0].id;\n let newehi = this.eset.entities[this.eset.entities.length - 1].id;\n if (this.lo === null || this.hi === null) {\n this.lo = 0;\n this.hi = newehi - newelo;\n this.elo = newelo;\n this.ehi = newehi;\n } else {\n //if (action) console.log((action as any).event, this.elo, '-', this.ehi, '->', newelo, '..', newehi);\n this.lo += newelo - this.elo;\n this.hi += newehi - this.ehi;\n }\n return true;\n }\n // TODO: removegi\n offset() {\n return this.lo || 0;\n }\n}\n\n// todo: generalize\nclass ActionCPUState {\n working: EntitySet;\n props: {[key: string] : string};\n xreg: IndexRegister | null = null;\n yreg: IndexRegister | null = null;\n}\n\nclass ActionEval {\n em : EntityManager;\n dialect : Dialect_CA65;\n tmplabel = '';\n label : string;\n seq : number;\n //used = new Set<string>(); // TODO\n\n constructor(\n readonly scope: EntityScope,\n readonly instance: SystemInstance,\n readonly action: Action,\n readonly eventargs: string[])\n {\n this.em = scope.em;\n this.dialect = scope.em.dialect;\n this.tmplabel = this.dialect.tempLabel(this.instance);\n //let query = (this.action as ActionWithQuery).query;\n //TODO? if (query && this.entities.length == 0)\n //throw new ECSError(`query doesn't match any entities`, query); // TODO \n this.seq = this.em.seq++;\n this.label = `${this.instance.system.name}__${action.event}__${this.seq}`;\n }\n begin() {\n }\n end() {\n }\n codeToString(): string {\n let code = this.exprToCode(this.action.expr);\n return code;\n }\n private replaceTags(code: string, action: Action, props: { [name: string]: string; }) {\n const tag_re = /\\{\\{(.+?)\\}\\}/g;\n code = code.replace(tag_re, (entire, group: string) => {\n let toks = group.split(/\\s+/);\n if (toks.length == 0)\n throw new ECSError(`empty command`, action);\n let cmd = group.charAt(0);\n let arg0 = toks[0].substring(1).trim();\n let args = [arg0].concat(toks.slice(1));\n switch (cmd) {\n case '!': return this.__emit(args);\n case '$': return this.__local(args);\n case '^': return this.__use(args);\n case '#': return this.__arg(args);\n case '&': return this.__eid(args);\n case '<': return this.__get([arg0, '0']);\n case '>': return this.__get([arg0, '8']);\n default:\n let value = props[toks[0]];\n if (value)\n return value;\n let fn = (this as any)['__' + toks[0]];\n if (fn)\n return fn.bind(this)(toks.slice(1));\n throw new ECSError(`unrecognized command {{${toks[0]}}}`, action);\n }\n });\n return code;\n }\n private replaceLabels(code: string) {\n const label_re = /@(\\w+)\\b/g;\n let seq = this.em.seq++;\n let label = `${this.instance.system.name}__${this.action.event}__${seq}`;\n code = code.replace(label_re, (s: string, a: string) => `${label}__${a}`);\n return code;\n }\n\n __get(args: string[]) {\n return this.getset(args, false);\n }\n __set(args: string[]) {\n return this.getset(args, true);\n }\n getset(args: string[], canwrite: boolean) {\n let fieldName = args[0];\n let bitofs = parseInt(args[1] || '0');\n return this.generateCodeForField(fieldName, bitofs, canwrite);\n }\n parseFieldArgs(args: string[]) {\n let fieldName = args[0];\n let bitofs = parseInt(args[1] || '0');\n let component = this.em.singleComponentWithFieldName(this.scope.state.working.atypes, fieldName, this.action);\n let field = component.fields.find(f => f.name == fieldName);\n if (field == null) throw new ECSError(`no field named \"${fieldName}\" in component`, this.action);\n return { component, field, bitofs };\n }\n __base(args: string[]) {\n let { component, field, bitofs } = this.parseFieldArgs(args);\n return this.dialect.fieldsymbol(component, field, bitofs);\n }\n __data(args: string[]) {\n let { component, field, bitofs } = this.parseFieldArgs(args);\n let entities = this.scope.state.working.entities;\n if (entities.length != 1) throw new ECSError(`data operates on exactly one entity`, this.action); // TODO?\n let eid = entities[0].id; // TODO?\n return this.dialect.datasymbol(component, field, eid, bitofs);\n }\n __const(args: string[]) {\n let { component, field, bitofs } = this.parseFieldArgs(args);\n let entities = this.scope.state.working.entities;\n if (entities.length != 1) throw new ECSError(`const operates on exactly one entity`, this.action); // TODO?\n let constVal = entities[0].consts[mksymbol(component, field.name)];\n if (constVal === undefined) throw new ECSError(`field is not constant`, this.action); // TODO?\n if (typeof constVal !== 'number') throw new ECSError(`field is not numeric`, this.action); // TODO?\n return constVal << bitofs;\n }\n __index(args: string[]) {\n // TODO: check select type and if we actually have an index...\n let ident = args[0];\n let index = parseInt(args[1] || '0');\n let entities = this.scope.state.working.entities;\n if (entities.length == 1) {\n return this.dialect.absolute(ident);\n } else {\n return this.dialect.indexed_x(ident, index); //TODO?\n }\n }\n __eid(args: string[]) {\n let e = this.scope.getEntityByName(args[0] || '?');\n if (!e) throw new ECSError(`can't find entity named \"${args[0]}\"`, this.action);\n return e.id.toString();\n }\n __use(args: string[]) {\n return this.scope.includeResource(args[0]);\n }\n __emit(args: string[]) {\n let event = args[0];\n let eventargs = args.slice(1);\n try {\n return this.scope.generateCodeForEvent(event, eventargs);\n } catch (e) {\n if (e.$sources) e.$sources.push(this.action);\n throw e;\n }\n }\n __local(args: string[]) {\n let tempinc = parseInt(args[0]);\n let tempbytes = this.instance.system.tempbytes;\n if (isNaN(tempinc)) throw new ECSError(`bad temporary offset`, this.action);\n if (!tempbytes) throw new ECSError(`this system has no locals`, this.action);\n if (tempinc < 0 || tempinc >= tempbytes) throw new ECSError(`this system only has ${tempbytes} locals`, this.action);\n this.scope.updateTempLiveness(this.instance);\n return `${this.tmplabel}+${tempinc}`;\n }\n __arg(args: string[]) {\n let argindex = parseInt(args[0] || '0');\n let argvalue = this.eventargs[argindex] || '';\n //this.used.add(`arg_${argindex}_${argvalue}`);\n return argvalue;\n }\n __start(args: string[]) {\n let startSymbol = this.dialect.scopeSymbol(args[0]);\n return this.dialect.jump(startSymbol);\n }\n generateCodeForField(fieldName: string, bitofs: number, canWrite: boolean): string {\n const action = this.action;\n const qr = this.scope.state.working;\n\n var component: ComponentType;\n var baseLookup = false;\n var entityLookup = false;\n let entities: Entity[];\n // is qualified field?\n if (fieldName.indexOf('.') > 0) {\n let [entname, fname] = fieldName.split('.');\n let ent = this.scope.getEntityByName(entname);\n if (ent == null) throw new ECSError(`no entity named \"${entname}\" in this scope`, action);\n component = this.em.singleComponentWithFieldName([ent.etype], fname, action);\n fieldName = fname;\n entities = [ent];\n entityLookup = true;\n } else if (fieldName.indexOf(':') > 0) {\n let [cname, fname] = fieldName.split(':');\n component = this.em.getComponentByName(cname);\n if (component == null) throw new ECSError(`no component named \"${cname}\"`, action)\n entities = this.scope.state.working.entities;\n fieldName = fname;\n baseLookup = true;\n } else {\n component = this.em.singleComponentWithFieldName(qr.atypes, fieldName, action);\n entities = this.scope.state.working.entities;\n }\n // find archetypes\n let field = component.fields.find(f => f.name == fieldName);\n if (field == null) throw new ECSError(`no field named \"${fieldName}\" in component`, action);\n let ident = this.dialect.fieldsymbol(component, field, bitofs);\n // see if all entities have the same constant value\n // TODO: should be done somewhere else?\n let constValues = new Set<DataValue>();\n let isConst = false;\n for (let e of entities) {\n let constVal = e.consts[mksymbol(component, fieldName)];\n if (constVal !== undefined) isConst = true;\n constValues.add(constVal); // constVal === undefined is allowed\n }\n // can't write to constant\n if (isConst && canWrite)\n throw new ECSError(`can't write to constant field ${fieldName}`, action);\n // is it a constant?\n if (constValues.size == 1) {\n let value = constValues.values().next().value as DataValue;\n // TODO: what about symbols?\n // TODO: use dialect\n if (typeof value === 'number') {\n return `#${(value >> bitofs) & 0xff}`;\n }\n }\n // TODO: offset > 0?\n // TODO: don't mix const and init data\n let range = this.scope.getFieldRange(component, field.name);\n if (!range) throw new ECSError(`couldn't find field for ${component.name}:${fieldName}, maybe no entities?`); // TODO\n // TODO: dialect\n // TODO: doesnt work for entity.field\n // TODO: array field baseoffset?\n if (baseLookup) {\n return this.dialect.absolute(ident);\n } else if (entities.length == 1) {\n // TODO: qr or this.entites?\n let eidofs = entities[0].id - range.elo; // TODO: negative?\n return this.dialect.absolute(ident, eidofs);\n } else {\n let ir;\n let int;\n let eidofs;\n let xreg = this.scope.state.xreg;\n let yreg = this.scope.state.yreg;\n if (xreg && (int = xreg.eset?.intersection(qr))) {\n //console.log(eidofs,'x',qr.entities[0].id,xreg.elo,int.entities[0].id,xreg.offset(),range.elo);\n ir = xreg.eset;\n //eidofs -= xreg.offset();\n //eidofs -= int.entities[0].id - xreg.elo;\n eidofs = xreg.elo - range.elo;\n // TODO? if (xreg.ehi > range.ehi) throw new ECSError(`field \"${field.name}\" could overflow`, action);\n } else if (yreg && (int = yreg.eset?.intersection(qr))) {\n ir = yreg.eset;\n //eidofs -= yreg.offset();\n eidofs = yreg.elo - range.elo;\n } else {\n ir = null;\n eidofs = 0;\n }\n if (!ir) {\n throw new ECSError(`no intersection for index register`, action);\n }\n if (ir.entities.length == 0) throw new ECSError(`no common entities for index register`, action);\n if (!ir.isContiguous()) throw new ECSError(`entities in query are not contiguous`, action);\n if (ir == this.scope.state.xreg?.eset)\n return this.dialect.indexed_x(ident, eidofs);\n if (ir == this.scope.state.yreg?.eset)\n return this.dialect.indexed_y(ident, eidofs);\n throw new ECSError(`cannot find \"${component.name}:${field.name}\" in state`, action);\n }\n }\n getJoinField(action: Action, atypes: EntityArchetype[], jtypes: EntityArchetype[]): ComponentFieldPair {\n let refs = Array.from(this.scope.iterateArchetypeFields(atypes, (c, f) => f.dtype == 'ref'));\n // TODO: better error message\n if (refs.length == 0) throw new ECSError(`cannot find join fields`, action);\n if (refs.length > 1) throw new ECSError(`cannot join multiple fields (${refs.map(r => r.f.name).join(' ')})`, action);\n // TODO: check to make sure join works\n return refs[0]; // TODO\n /* TODO\n let match = refs.map(ref => this.em.archetypesMatching((ref.f as RefType).query));\n for (let ref of refs) {\n let m = this.em.archetypesMatching((ref.f as RefType).query);\n for (let a of m) {\n if (jtypes.includes(a.etype)) {\n console.log(a,m);\n }\n }\n }\n */\n }\n isSubroutineSized(code: string) {\n // TODO?\n if (code.length > 20000) return false;\n if (code.split('\\n ').length >= 4) return true; // TODO: :^/\n return false;\n }\n exprToCode(expr: Expr) : string {\n if (isQueryExpr(expr)) {\n return this.queryExprToCode(expr);\n }\n if (isBlockStmt(expr)) {\n return this.blockStmtToCode(expr);\n }\n if (isInlineCode(expr)) {\n return this.evalInlineCode(expr.code);\n }\n throw new ECSError(`cannot convert expression to code`, expr);\n }\n evalInlineCode(code: string) {\n let props = this.scope.state.props || {};\n // replace @labels\n code = this.replaceLabels(code);\n // replace {{...}} tags\n // TODO: use nodes instead\n code = this.replaceTags(code, this.action, props);\n return code;\n }\n blockStmtToCode(expr: BlockExpr) {\n return expr.stmts.map(node => this.exprToCode(node)).join('\\n');\n }\n queryExprToCode(qexpr: QueryExpr) : string {\n //console.log('query', this.action.event, qexpr.select, qexpr.query.include);\n let q = this.startQuery(qexpr);\n // TODO: move elsewhere? is \"foreach\" and \"join\" part of the empty set?\n const allowEmpty = ['if','foreach','join'];\n if (q.working.entities.length == 0 && allowEmpty.includes(qexpr.select)) {\n //console.log('empty', this.action.event);\n this.endQuery(q);\n return '';\n } else {\n this.scope.state.working = q.working;\n this.scope.state.props = q.props;\n //console.log('begin', this.action.event, this.scope.state);\n q.code = this.evalInlineCode(q.code);\n let body = this.blockStmtToCode(qexpr);\n this.endQuery(q);\n //console.log('end', this.action.event, this.scope.state);\n body = q.code.replace('%%CODE%%', body);\n return body;\n }\n }\n queryWorkingSet(qexpr: QueryExpr) {\n const scope = this.scope;\n const instance = this.instance;\n let select = qexpr.select;\n let q = qexpr.query;\n let qr = new EntitySet(scope, q);\n // narrow query w/ working set?\n if (!(qexpr.all || q.entities)) {\n let ir = qr.intersection(scope.state.working);\n // if intersection is empty, take the global set\n // if doing otherwise would generate an error (execpt for \"if\")\n // TODO: ambiguous?\n if (ir.entities.length || select == 'if') {\n qr = ir;\n }\n }\n // TODO? error if none?\n if (instance.params.refEntity && instance.params.refField) {\n let rf = instance.params.refField;\n if (rf.f.dtype == 'ref') {\n let rq = rf.f.query;\n qr = qr.intersection(new EntitySet(scope, rq));\n //console.log('with', instance.params, rq, this.qr);\n }\n } else if (instance.params.query) {\n qr = qr.intersection(new EntitySet(scope, instance.params.query));\n }\n return qr;\n }\n updateIndexRegisters(qr: EntitySet, jr: EntitySet | null, select: SelectType) {\n const action = this.action;\n const scope = this.scope;\n const instance = this.instance;\n const state = this.scope.state;\n // TODO: generalize to other cpus/langs\n if (qr.entities.length > 1) {\n switch (select) {\n case 'once':\n break;\n case 'foreach':\n case 'unroll':\n if (state.xreg && state.yreg) throw new ECSError('no more index registers', action);\n if (state.xreg) state.yreg = new IndexRegister(scope, qr);\n else state.xreg = new IndexRegister(scope, qr);\n break;\n case 'join':\n // TODO: Joins don't work in superman (arrays offset?)\n // ignore the join query, use the ref\n if (state.xreg || state.yreg) throw new ECSError('no free index registers for join', action);\n if (jr) state.xreg = new IndexRegister(scope, jr);\n state.yreg = new IndexRegister(scope, qr);\n break;\n case 'if':\n case 'with':\n // TODO: what if not in X because 1 element?\n if (state.xreg && state.xreg.eset) {\n state.xreg = state.xreg.narrow(qr, action);\n } else if (select == 'with') {\n if (instance.params.refEntity && instance.params.refField) {\n if (state.xreg)\n state.xreg.eset = qr;\n else\n state.xreg = new IndexRegister(scope, qr);\n // ???\n }\n }\n break;\n }\n }\n }\n getCodeAndProps(qexpr: QueryExpr, qr: EntitySet, jr: EntitySet|null, \n oldState: ActionCPUState)\n {\n // get properties and code\n const entities = qr.entities;\n const select = qexpr.select;\n let code = '%%CODE%%';\n let props: { [name: string]: string } = {};\n // TODO: detect cycles\n // TODO: \"source\"?\n // TODO: what if only 1 item?\n // TODO: what if join is subset of items?\n if (select == 'join' && jr) {\n //let jentities = this.jr.entities;\n // TODO? \n // TODO? throw new ECSError(`join query doesn't match any entities`, (action as ActionWithJoin).join); // TODO \n //console.log('join', qr, jr);\n if (qr.entities.length) {\n let joinfield = this.getJoinField(this.action, qr.atypes, jr.atypes);\n // TODO: what if only 1 item?\n // TODO: should be able to access fields via Y reg\n code = this.wrapCodeInLoop(code, qexpr, qr.entities, joinfield);\n props['%joinfield'] = this.dialect.fieldsymbol(joinfield.c, joinfield.f, 0); //TODO?\n }\n }\n // select subset of entities\n let fullEntityCount = qr.entities.length; //entities.length.toString();\n // TODO: let loopreduce = !loopents || entities.length < loopents.length;\n //console.log(action.event, entities.length, loopents.length);\n // filter entities from loop?\n // TODO: when to ignore if entities.length == 1 and not in for loop?\n if (select == 'with') {\n // TODO? when to load x?\n if (this.instance.params.refEntity && this.instance.params.refField) {\n let re = this.instance.params.refEntity;\n let rf = this.instance.params.refField;\n code = this.wrapCodeInRefLookup(code);\n // TODO: only fetches 1st entity in list, need offset\n let range = this.scope.getFieldRange(rf.c, rf.f.name);\n let eidofs = re.id - range.elo;\n props['%reffield'] = `${this.dialect.fieldsymbol(rf.c, rf.f, 0)}+${eidofs}`;\n } else {\n code = this.wrapCodeInFilter(code, qr, oldState, props);\n }\n }\n if (select == 'if') {\n code = this.wrapCodeInFilter(code, qr, oldState, props);\n }\n if (select == 'foreach' && entities.length > 1) {\n code = this.wrapCodeInLoop(code, qexpr, qr.entities);\n }\n if (select == 'unroll' && entities.length > 1) {\n throw new ECSError('unroll is not yet implemented');\n }\n // define properties\n if (entities.length) {\n props['%elo'] = entities[0].id.toString();\n props['%ehi'] = entities[entities.length - 1].id.toString();\n }\n props['%ecount'] = entities.length.toString();\n props['%efullcount'] = fullEntityCount.toString();\n //console.log('working', action.event, working.entities.length, entities.length);\n return { code, props };\n }\n startQuery(qexpr: QueryExpr) {\n const scope = this.scope;\n const action = this.action;\n const select = qexpr.select;\n\n // save old state and make clone\n const oldState = this.scope.state;\n this.scope.state = Object.assign(new ActionCPUState(), oldState);\n\n // get working set for this query\n const qr = this.queryWorkingSet(qexpr);\n \n // is it a join? query that too\n const jr = qexpr.join && qr.entities.length ? new EntitySet(scope, qexpr.join) : null;\n\n // update x, y state\n this.updateIndexRegisters(qr, jr, select);\n\n const { code, props } = this.getCodeAndProps(qexpr, qr, jr, oldState);\n\n // if join, working set is union of both parts\n let working = jr ? qr.union(jr) : qr;\n \n return { working, oldState, props, code };\n }\n endQuery(q : { oldState: ActionCPUState }) {\n this.scope.state = q.oldState;\n }\n wrapCodeInLoop(code: string, qexpr: QueryExpr, ents: Entity[], joinfield?: ComponentFieldPair): string {\n // TODO: check ents\n // TODO: check segment bounds\n // TODO: what if 0 or 1 entitites?\n // TODO: check > 127 or > 255\n let dir = qexpr.direction;\n let s = dir == 'desc' ? this.dialect.ASM_ITERATE_EACH_DESC : this.dialect.ASM_ITERATE_EACH_ASC;\n if (joinfield) s = dir == 'desc' ? this.dialect.ASM_ITERATE_JOIN_DESC : this.dialect.ASM_ITERATE_JOIN_ASC;\n s = s.replace('{{%code}}', code);\n return s;\n }\n wrapCodeInFilter(code: string, qr: EntitySet, oldState: ActionCPUState, props: any) {\n // TODO: :-p filters too often?\n const ents = qr.entities;\n const ents2 = oldState.xreg?.eset?.entities;\n if (ents && ents.length && ents2) {\n let lo = ents[0].id;\n let hi = ents[ents.length - 1].id;\n let lo2 = ents2[0].id;\n let hi2 = ents2[ents2.length - 1].id;\n if (lo != lo2) {\n code = this.dialect.ASM_FILTER_RANGE_LO_X.replace('{{%code}}', code);\n props['%xofs'] = lo - lo2;\n }\n if (hi != hi2) {\n code = this.dialect.ASM_FILTER_RANGE_HI_X.replace('{{%code}}', code);\n }\n }\n return code;\n }\n wrapCodeInRefLookup(code: string) {\n code = this.dialect.ASM_LOOKUP_REF_X.replace('{{%code}}', code);\n return code;\n }\n}\n\nclass EventCodeStats {\n constructor(\n public readonly inst: SystemInstance,\n public readonly action: Action,\n public readonly eventcode: string\n ) { }\n labels : string[] = [];\n count : number = 0;\n}\n\nexport class EntityScope implements SourceLocated {\n $loc: SourceLocation;\n childScopes: EntityScope[] = [];\n instances: SystemInstance[] = [];\n entities: Entity[] = [];\n fieldtypes: { [name: string]: 'init' | 'const' } = {};\n sysstats = new Map<SystemInstance, SystemStats>();\n bss = new UninitDataSegment();\n rodata = new ConstDataSegment();\n code = new CodeSegment();\n componentsInScope = new Set();\n resources = new Set<string>();\n state;\n isDemo = false;\n filePath = '';\n\n eventSeq : number;\n eventCodeStats : { [code:string] : EventCodeStats };\n inCritical = 0;\n\n constructor(\n public readonly em: EntityManager,\n public readonly dialect: Dialect_CA65,\n public readonly name: string,\n public readonly parent: EntityScope | undefined\n ) {\n parent?.childScopes.push(this);\n this.state = new ActionCPUState();\n // TODO: parent scope entities too?\n this.state.working = new EntitySet(this, undefined, this.entities); // working set = all entities\n }\n newEntity(etype: EntityArchetype, name: string): Entity {\n // TODO: add parent ID? lock parent scope?\n // TODO: name identical check?\n if (name && this.getEntityByName(name))\n throw new ECSError(`already an entity named \"${name}\"`);\n let id = this.entities.length;\n etype = this.em.addArchetype(etype);\n let entity: Entity = { id, etype, consts: {}, inits: {} };\n for (let c of etype.components) {\n this.componentsInScope.add(c.name);\n }\n entity.name = name;\n this.entities.push(entity);\n return entity;\n }\n newSystemInstance(inst: SystemInstance) {\n if (!inst) throw new Error();\n inst.id = this.instances.length+1;\n this.instances.push(inst);\n this.em.registerSystemEvents(inst.system);\n return inst;\n }\n newSystemInstanceWithDefaults(system: System) {\n return this.newSystemInstance({ system, params: {}, id:0 });\n }\n getSystemInstanceNamed(name: string) {\n return this.instances.find(sys => sys.system.name == name);\n }\n getEntityByName(name: string) {\n return this.entities.find(e => e.name == name);\n }\n *iterateEntityFields(entities: Entity[]) {\n for (let i = 0; i < entities.length; i++) {\n let e = entities[i];\n for (let c of e.etype.components) {\n for (let f of c.fields) {\n yield { i, e, c, f, v: e.consts[mksymbol(c, f.name)] };\n }\n }\n }\n }\n *iterateArchetypeFields(arch: EntityArchetype[], filter?: (c: ComponentType, f: DataField) => boolean) {\n for (let i = 0; i < arch.length; i++) {\n let a = arch[i];\n for (let c of a.components) {\n for (let f of c.fields) {\n if (!filter || filter(c, f))\n yield { i, c, f };\n }\n }\n }\n }\n *iterateChildScopes() {\n for (let scope of this.childScopes) {\n yield scope;\n }\n }\n entitiesMatching(atypes: EntityArchetype[]) {\n let result: Entity[] = [];\n for (let e of this.entities) {\n for (let a of atypes) {\n // TODO: what about subclasses?\n // TODO: very scary identity ocmpare\n if (e.etype === a) {\n result.push(e);\n break;\n }\n }\n }\n return result;\n }\n hasComponent(ctype: ComponentType) {\n return this.componentsInScope.has(ctype.name);\n }\n buildSegments() {\n // build FieldArray for each component/field pair\n // they will be different for bss/rodata segments\n let iter = this.iterateEntityFields(this.entities);\n for (var o = iter.next(); o.value; o = iter.next()) {\n let { i, e, c, f, v } = o.value;\n // constants and array pointers go into rodata\n let cfname = mksymbol(c, f.name);\n let ftype = this.fieldtypes[cfname];\n let isConst = ftype == 'const';\n let segment = isConst ? this.rodata : this.bss;\n if (v === undefined && isConst)\n throw new ECSError(`no value for const field ${cfname}`, e);\n // determine range of indices for entities\n let array = segment.fieldranges[cfname];\n if (!array) {\n array = segment.fieldranges[cfname] = { component: c, field: f, elo: i, ehi: i };\n } else {\n array.ehi = i;\n if (array.ehi - array.elo + 1 >= 256)\n throw new ECSError(`too many entities have field ${cfname}, limit is 256`);\n }\n // set default values for entity/field\n if (!isConst) {\n if (f.dtype == 'int' && f.defvalue !== undefined) {\n let ecfname = mkscopesymbol(this, c, f.name);\n if (e.inits[ecfname] == null) {\n this.setInitValue(e, c, f, f.defvalue);\n }\n }\n }\n }\n }\n // TODO: cull unused entity fields\n allocateSegment(segment: DataSegment, alloc: boolean, type: 'init' | 'const' | undefined) {\n let fields: FieldArray[] = Object.values(segment.fieldranges);\n // TODO: fields.sort((a, b) => (a.ehi - a.elo + 1) * getPackedFieldSize(a.field));\n for (let f of fields) {\n if (this.fieldtypes[mksymbol(f.component, f.field.name)] == type) {\n //console.log(f.component.name, f.field.name, type);\n let rangelen = (f.ehi - f.elo + 1);\n // TODO: doesn't work for packed arrays too well\n let bits = getPackedFieldSize(f.field);\n // variable size? make it a pointer\n if (bits == 0) bits = 16; // TODO?\n let bytesperelem = Math.ceil(bits / 8);\n // TODO: packing bits\n // TODO: split arrays\n let access = [];\n for (let i = 0; i < bits; i += 8) {\n let symbol = this.dialect.fieldsymbol(f.component, f.field, i);\n access.push({ symbol, bit: i, width: 8 }); // TODO\n if (alloc) {\n segment.allocateBytes(symbol, rangelen); // TODO\n }\n }\n f.access = access;\n }\n }\n }\n allocateROData(segment: DataSegment) {\n let iter = this.iterateEntityFields(this.entities);\n for (var o = iter.next(); o.value; o = iter.next()) {\n let { i, e, c, f, v } = o.value;\n let cfname = mksymbol(c, f.name);\n // TODO: what if mix of var, const, and init values?\n if (this.fieldtypes[cfname] == 'const') {\n let range = segment.fieldranges[cfname];\n let entcount = range ? range.ehi - range.elo + 1 : 0;\n if (v == null && f.dtype == 'int') v = 0;\n if (v == null && f.dtype == 'ref') v = 0;\n if (v == null && f.dtype == 'array')\n throw new ECSError(`no default value for array ${cfname}`, e);\n //console.log(c.name, f.name, '#'+e.id, '=', v);\n // this is a constant\n // is it a byte array?\n //TODO? if (ArrayBuffer.isView(v) && f.dtype == 'array') {\n if (v instanceof Uint8Array && f.dtype == 'array') {\n let ptrlosym = this.dialect.fieldsymbol(c, f, 0);\n let ptrhisym = this.dialect.fieldsymbol(c, f, 8);\n let loofs = segment.allocateBytes(ptrlosym, entcount);\n let hiofs = segment.allocateBytes(ptrhisym, entcount);\n let datasym = this.dialect.datasymbol(c, f, e.id, 0);\n segment.allocateInitData(datasym, v);\n if (f.baseoffset) datasym = `(${datasym}+${f.baseoffset})`;\n segment.initdata[loofs + e.id - range.elo] = { symbol: datasym, bitofs: 0 };\n segment.initdata[hiofs + e.id - range.elo] = { symbol: datasym, bitofs: 8 };\n } else if (typeof v === 'number') {\n // more than 1 entity, add an array\n // TODO: infer need for array by usage\n /*if (entcount > 1)*/ {\n if (!range.access) throw new ECSError(`no access for field ${cfname}`)\n for (let a of range.access) {\n segment.allocateBytes(a.symbol, entcount);\n let ofs = segment.getByteOffset(range, a, e.id);\n // TODO: this happens if you forget a const field on an object?\n if (e.id < range.elo) throw new ECSError('entity out of range ' + c.name + ' ' + f.name, e);\n if (segment.initdata[ofs] !== undefined) throw new ECSError('initdata already set ' + ofs), e;\n segment.initdata[ofs] = (v >> a.bit) & 0xff;\n }\n }\n } else if (v == null && f.dtype == 'array' && f.index) {\n // TODO\n let datasym = this.dialect.datasymbol(c, f, e.id, 0);\n let databytes = getFieldLength(f.index);\n let offset = this.bss.allocateBytes(datasym, databytes);\n // TODO? this.allocatePointerArray(c, f, datasym, entcount);\n let ptrlosym = this.dialect.fieldsymbol(c, f, 0);\n let ptrhisym = this.dialect.fieldsymbol(c, f, 8);\n // TODO: what if we don't need a pointer array?\n let loofs = segment.allocateBytes(ptrlosym, entcount);\n let hiofs = segment.allocateBytes(ptrhisym, entcount);\n if (f.baseoffset) datasym = `(${datasym}+${f.baseoffset})`;\n segment.initdata[loofs + e.id - range.elo] = { symbol: datasym, bitofs: 0 };\n segment.initdata[hiofs + e.id - range.elo] = { symbol: datasym, bitofs: 8 };\n } else {\n // TODO: bad error message - should say \"wrong type, should be array\"\n throw new ECSError(`unhandled constant ${e.id}:${cfname} -- ${typeof v}`);\n }\n }\n }\n //console.log(segment.initdata)\n }\n allocateInitData(segment: DataSegment) {\n if (segment.size == 0) return '';\n let initbytes = new Uint8Array(segment.size);\n let iter = this.iterateEntityFields(this.entities);\n for (var o = iter.next(); o.value; o = iter.next()) {\n let { i, e, c, f, v } = o.value;\n let scfname = mkscopesymbol(this, c, f.name);\n let initvalue = e.inits[scfname];\n if (initvalue !== undefined) {\n let range = segment.getFieldRange(c, f.name);\n if (!range) throw new ECSError(`no init range for ${scfname}`, e); \n if (!range.access) throw new ECSError(`no init range access for ${scfname}`, e);\n if (typeof initvalue === 'number') {\n for (let a of range.access) {\n let offset = segment.getByteOffset(range, a, e.id);\n initbytes[offset] = (initvalue >> a.bit) & ((1 << a.width) - 1);\n }\n } else if (initvalue instanceof Uint8Array) {\n // TODO: 16/32...\n let datasym = this.dialect.datasymbol(c, f, e.id, 0);\n let ofs = this.bss.symbols[datasym];\n initbytes.set(initvalue, ofs);\n } else {\n // TODO: init arrays?\n throw new ECSError(`cannot initialize ${scfname} = ${initvalue}`); // TODO??\n }\n }\n }\n // build the final init buffer\n // TODO: compress 0s?\n let bufsym = this.name + '__INITDATA';\n let bufofs = this.rodata.allocateInitData(bufsym, initbytes);\n let code = this.dialect.INIT_FROM_ARRAY;\n //TODO: function to repalce from dict?\n code = code.replace('{{%nbytes}}', initbytes.length.toString())\n code = code.replace('{{%src}}', bufsym);\n code = code.replace('{{%dest}}', segment.getOriginSymbol());\n return code;\n }\n getFieldRange(c: ComponentType, fn: string) {\n return this.bss.getFieldRange(c, fn) || this.rodata.getFieldRange(c, fn);\n }\n setConstValue(e: Entity, component: ComponentType, field: DataField, value: DataValue) {\n this.setConstInitValue(e, component, field, value, 'const');\n }\n setInitValue(e: Entity, component: ComponentType, field: DataField, value: DataValue) {\n this.setConstInitValue(e, component, field, value, 'init');\n }\n setConstInitValue(e: Entity, component: ComponentType, field: DataField, value: DataValue,\n type: 'const'|'init')\n {\n this.checkFieldValue(field, value);\n let fieldName = field.name;\n let cfname = mksymbol(component, fieldName);\n let ecfname = mkscopesymbol(this, component, fieldName);\n if (e.consts[cfname] !== undefined) throw new ECSError(`\"${fieldName}\" is already defined as a constant`, e);\n if (e.inits[ecfname] !== undefined) throw new ECSError(`\"${fieldName}\" is already defined as a variable`, e);\n if (type == 'const') e.consts[cfname] = value;\n if (type == 'init') e.inits[ecfname] = value;\n this.fieldtypes[cfname] = type;\n }\n isConstOrInit(component: ComponentType, fieldName: string) : 'const' | 'init' {\n return this.fieldtypes[mksymbol(component, fieldName)];\n }\n getConstValue(entity: Entity, fieldName: string) {\n let component = this.em.singleComponentWithFieldName([entity.etype], fieldName, entity);\n let cfname = mksymbol(component, fieldName);\n return entity.consts[cfname];\n }\n checkFieldValue(field: DataField, value: DataValue) {\n if (field.dtype == 'array') {\n if (!(value instanceof Uint8Array))\n throw new ECSError(`This \"${field.name}\" value should be an array.`);\n } else if (typeof value !== 'number') {\n throw new ECSError(`This \"${field.name}\" ${field.dtype} value should be an number.`);\n } else {\n if (field.dtype == 'int') {\n if (value < field.lo || value > field.hi)\n throw new ECSError(`This \"${field.name}\" value is out of range, should be between ${field.lo} and ${field.hi}.`);\n } else if (field.dtype == 'ref') {\n // TODO: allow override if number\n let eset = new EntitySet(this, field.query);\n if (value < 0 || value >= eset.entities.length)\n throw new ECSError(`This \"${field.name}\" value is out of range for this ref type.`);\n }\n }\n }\n generateCodeForEvent(event: string, args?: string[], codelabel?: string): string {\n // find systems that respond to event\n // and have entities in this scope\n let systems = this.em.event2systems[event];\n if (!systems || systems.length == 0) {\n // TODO: error or warning?\n //throw new ECSError(`warning: no system responds to \"${event}\"`);\n console.log(`warning: no system responds to \"${event}\"`);\n return '';\n }\n this.eventSeq++;\n // generate code\n let code = '';\n // is there a label? generate it first\n if (codelabel) { code += this.dialect.label(codelabel) + '\\n'; }\n // if \"start\" event, initialize data segment\n if (event == 'start') {\n code += this.allocateInitData(this.bss);\n }\n // iterate all instances and generate matching events\n let eventCount = 0;\n let instances = this.instances.filter(inst => systems.includes(inst.system));\n for (let inst of instances) {\n let sys = inst.system;\n for (let action of sys.actions) {\n if (action.event == event) {\n eventCount++;\n // TODO: use Tokenizer so error msgs are better\n // TODO: keep event tree\n let codeeval = new ActionEval(this, inst, action, args || []);\n codeeval.begin();\n if (action.critical) this.inCritical++;\n let eventcode = codeeval.codeToString();\n if (action.critical) this.inCritical--;\n if (!this.inCritical && codeeval.isSubroutineSized(eventcode)) {\n let normcode = this.normalizeCode(eventcode, action);\n let estats = this.eventCodeStats[normcode];\n if (!estats) {\n estats = this.eventCodeStats[normcode] = new EventCodeStats(\n inst, action, eventcode);\n }\n estats.labels.push(codeeval.label);\n estats.count++;\n if (action.critical) estats.count++; // always make critical event subroutines\n }\n let s = '';\n s += this.dialect.comment(`start action ${codeeval.label}`);\n s += eventcode;\n s += this.dialect.comment(`end action ${codeeval.label}`);\n code += s;\n // TODO: check that this happens once?\n codeeval.end();\n }\n }\n }\n if (eventCount == 0) {\n console.log(`warning: event ${event} not handled`);\n }\n return code;\n }\n normalizeCode(code: string, action: Action) {\n // TODO: use dialect to help with this\n code = code.replace(/\\b(\\w+__\\w+__)(\\d+)__(\\w+)\\b/g, (z,a,b,c) => a+c);\n return code;\n }\n getSystemStats(inst: SystemInstance) : SystemStats {\n let stats = this.sysstats.get(inst);\n if (!stats) {\n stats = new SystemStats();\n this.sysstats.set(inst, stats);\n }\n return stats;\n }\n updateTempLiveness(inst: SystemInstance) {\n let stats = this.getSystemStats(inst);\n let n = this.eventSeq;\n if (stats.tempstartseq && stats.tempendseq) {\n stats.tempstartseq = Math.min(stats.tempstartseq, n);\n stats.tempendseq = Math.max(stats.tempendseq, n);\n } else {\n stats.tempstartseq = stats.tempendseq = n;\n }\n }\n includeResource(symbol: string): string {\n this.resources.add(symbol);\n return symbol;\n }\n private allocateTempVars() {\n let pack = new Packer();\n let maxTempBytes = 128 - this.bss.size; // TODO: multiple data segs\n let bssbin = new Bin({ left:0, top:0, bottom: this.eventSeq+1, right: maxTempBytes });\n pack.bins.push(bssbin);\n for (let instance of this.instances) {\n let stats = this.getSystemStats(instance);\n if (instance.system.tempbytes && stats.tempstartseq && stats.tempendseq) {\n let v = {\n inst: instance,\n top: stats.tempstartseq,\n bottom: stats.tempendseq+1,\n width: instance.system.tempbytes,\n height: stats.tempendseq - stats.tempstartseq + 1,\n label: instance.system.name\n };\n pack.boxes.push(v);\n }\n }\n if (!pack.pack()) console.log('cannot pack temporary local vars'); // TODO\n //console.log('tempvars', pack);\n if (bssbin.extents.right > 0) {\n let tempofs = this.bss.allocateBytes('TEMP', bssbin.extents.right);\n for (let b of pack.boxes) {\n let inst : SystemInstance = (b as any).inst;\n //console.log(inst.system.name, b.box?.left);\n if (b.box) this.bss.declareSymbol(this.dialect.tempLabel(inst), tempofs + b.box.left);\n //this.bss.equates[this.dialect.tempLabel(inst)] = `TEMP+${b.box?.left}`;\n }\n }\n console.log(pack.toSVGUrl());\n }\n private analyzeEntities() {\n this.buildSegments();\n this.allocateSegment(this.bss, true, 'init'); // initialized vars\n this.allocateSegment(this.bss, true, undefined); // uninitialized vars\n this.allocateSegment(this.rodata, false, 'const'); // constants\n this.allocateROData(this.rodata);\n }\n private isMainScope() {\n return this.parent == null;\n }\n private generateCode() {\n this.eventSeq = 0;\n this.eventCodeStats = {};\n let start;\n let initsys = this.em.getSystemByName('Init');\n if (this.isMainScope() && initsys) {\n this.newSystemInstanceWithDefaults(initsys); //TODO: what if none?\n start = this.generateCodeForEvent('main_init');\n } else {\n start = this.generateCodeForEvent('start');\n }\n start = this.replaceSubroutines(start);\n this.code.addCodeFragment(start);\n for (let sub of Array.from(this.resources.values())) {\n if (!this.getSystemInstanceNamed(sub)) {\n let sys = this.em.getSystemByName(sub);\n if (!sys) throw new ECSError(`cannot find resource named \"${sub}\"`);\n this.newSystemInstanceWithDefaults(sys);\n }\n let code = this.generateCodeForEvent(sub, [], sub);\n this.code.addCodeFragment(code); // TODO: should be rodata?\n }\n //this.showStats();\n }\n replaceSubroutines(code: string) {\n // TODO: bin-packing for critical code\n // TODO: doesn't work with nested subroutines?\n // TODO: doesn't work between scopes\n let allsubs : string[] = [];\n for (let stats of Object.values(this.eventCodeStats)) {\n if (stats.count > 1) {\n if (allsubs.length == 0) {\n allsubs = [\n this.dialect.segment('rodata'),\n this.dialect.alignSegmentStart()\n ]\n } else if (stats.action.fitbytes) {\n allsubs.push(this.dialect.alignIfLessThan(stats.action.fitbytes));\n }\n let subcall = this.dialect.call(stats.labels[0]);\n for (let label of stats.labels) {\n let startdelim = this.dialect.comment(`start action ${label}`).trim();\n let enddelim = this.dialect.comment(`end action ${label}`).trim();\n let istart = code.indexOf(startdelim);\n let iend = code.indexOf(enddelim, istart);\n if (istart >= 0 && iend > istart) {\n code = code.substring(0, istart) + subcall + code.substring(iend + enddelim.length);\n }\n }\n let substart = stats.labels[0];\n let sublines = [\n this.dialect.segment('rodata'),\n this.dialect.label(substart),\n stats.eventcode,\n this.dialect.return(),\n ];\n if (stats.action.critical) {\n sublines.push(this.dialect.warningIfPageCrossed(substart));\n }\n if (stats.action.fitbytes) {\n sublines.push(this.dialect.warningIfMoreThan(stats.action.fitbytes, substart));\n }\n allsubs = allsubs.concat(sublines);\n }\n }\n code += allsubs.join('\\n');\n return code;\n }\n showStats() {\n for (let inst of this.instances) {\n // TODO?\n console.log(inst.system.name, this.getSystemStats(inst));\n }\n }\n private dumpCodeTo(file: SourceFileExport) {\n let shouldExport = this.instances.length == 0;\n let dialect = this.dialect;\n file.line(dialect.startScope(this.name));\n file.line(dialect.segment('bss'));\n this.bss.dump(file, dialect, shouldExport);\n file.line(dialect.segment('code')); // TODO: rodata for aligned?\n this.rodata.dump(file, dialect, shouldExport);\n //file.segment(`${this.name}_CODE`, 'code');\n file.line(dialect.label('__Start'));\n this.code.dump(file);\n for (let subscope of this.childScopes) {\n // TODO: overlay child BSS segments\n subscope.dump(file);\n }\n file.line(dialect.endScope(this.name));\n }\n dump(file: SourceFileExport) {\n this.analyzeEntities();\n this.generateCode();\n this.allocateTempVars();\n this.dumpCodeTo(file);\n }\n}\n\nexport class EntityManager {\n archetypes: { [key: string]: EntityArchetype } = {};\n components: { [name: string]: ComponentType } = {};\n systems: { [name: string]: System } = {};\n topScopes: { [name: string]: EntityScope } = {};\n event2systems: { [event: string]: System[] } = {};\n name2cfpairs: { [cfname: string]: ComponentFieldPair[] } = {};\n mainPath: string = '';\n imported: { [path: string]: boolean } = {};\n seq = 1;\n\n constructor(public readonly dialect: Dialect_CA65) {\n }\n newScope(name: string, parent?: EntityScope) {\n let existing = this.topScopes[name];\n if (existing && !existing.isDemo)\n throw new ECSError(`scope ${name} already defined`, existing);\n let scope = new EntityScope(this, this.dialect, name, parent);\n if (!parent) this.topScopes[name] = scope;\n return scope;\n }\n deferComponent(name: string) {\n this.components[name] = { name, fields: [] };\n }\n defineComponent(ctype: ComponentType) {\n let existing = this.components[ctype.name];\n // we can defer component definitions, just declare a component with 0 fields?\n if (existing && existing.fields.length > 0)\n throw new ECSError(`component ${ctype.name} already defined`, existing);\n if (existing) {\n existing.fields = ctype.fields;\n ctype = existing;\n }\n for (let field of ctype.fields) {\n let list = this.name2cfpairs[field.name];\n if (!list) list = this.name2cfpairs[field.name] = [];\n list.push({ c: ctype, f: field });\n }\n this.components[ctype.name] = ctype;\n return ctype;\n }\n defineSystem(system: System) {\n let existing = this.systems[system.name];\n if (existing) throw new ECSError(`system ${system.name} already defined`, existing);\n return this.systems[system.name] = system;\n }\n registerSystemEvents(system: System) {\n for (let a of system.actions) {\n let event = a.event;\n let list = this.event2systems[event];\n if (list == null) list = this.event2systems[event] = [];\n if (!list.includes(system)) list.push(system);\n }\n }\n addArchetype(atype: EntityArchetype): EntityArchetype {\n let key = atype.components.map(c => c.name).join(',');\n if (this.archetypes[key])\n return this.archetypes[key];\n else\n return this.archetypes[key] = atype;\n }\n componentsMatching(q: Query, etype: EntityArchetype) {\n let list = [];\n for (let c of etype.components) {\n if (q.exclude?.includes(c)) {\n return [];\n }\n // TODO: 0 includes == all entities?\n if (q.include.length == 0 || q.include.includes(c)) {\n list.push(c);\n }\n }\n return list.length == q.include.length ? list : [];\n }\n archetypesMatching(q: Query) {\n let result = new Set<EntityArchetype>();\n for (let etype of Object.values(this.archetypes)) {\n let cmatch = this.componentsMatching(q, etype);\n if (cmatch.length > 0) {\n result.add(etype);\n }\n }\n return Array.from(result.values());\n }\n componentsWithFieldName(atypes: EntityArchetype[], fieldName: string) {\n // TODO???\n let comps = new Set<ComponentType>();\n for (let at of atypes) {\n for (let c of at.components) {\n for (let f of c.fields) {\n if (f.name == fieldName)\n comps.add(c);\n }\n }\n }\n return Array.from(comps);\n }\n getComponentByName(name: string): ComponentType {\n return this.components[name];\n }\n getSystemByName(name: string): System {\n return this.systems[name];\n }\n singleComponentWithFieldName(atypes: EntityArchetype[], fieldName: string, where: SourceLocated) {\n let cfpairs = this.name2cfpairs[fieldName];\n if (!cfpairs) throw new ECSError(`cannot find field named \"${fieldName}\"`, where);\n let filtered = cfpairs.filter(cf => atypes.find(a => a.components.includes(cf.c)));\n if (filtered.length == 0) {\n throw new ECSError(`cannot find component with field \"${fieldName}\" in this context`, where);\n }\n if (filtered.length > 1) {\n throw new ECSError(`ambiguous field name \"${fieldName}\"`, where);\n }\n return filtered[0].c;\n }\n toJSON() {\n return JSON.stringify({\n components: this.components,\n systems: this.systems\n })\n }\n exportToFile(file: SourceFileExport) {\n for (let event of Object.keys(this.event2systems)) {\n file.line(this.dialect.equate(`EVENT__${event}`, '1'))\n }\n for (let scope of Object.values(this.topScopes)) {\n if (!scope.isDemo || scope.filePath == this.mainPath) {\n scope.dump(file);\n }\n }\n }\n *iterateScopes() {\n for (let scope of Object.values(this.topScopes)) {\n yield scope;\n scope.iterateChildScopes();\n }\n }\n getDebugTree() : {} {\n let scopes = this.topScopes;\n let components = this.components;\n let fields = this.name2cfpairs;\n let systems = this.systems;\n let events = this.event2systems;\n let entities : {[key:string]:Entity} = {};\n for (let scope of Array.from(this.iterateScopes())) {\n for (let e of scope.entities)\n entities[e.name || '#'+e.id.toString()] = e;\n }\n return { scopes, components, fields, systems, events, entities };\n }\n\n // expression stuff\n\n evalExpr(expr: Expr, scope: EntityScope | null) : Expr {\n if (isLiteral(expr)) return expr;\n if (isBinOp(expr) || isUnOp(expr)) {\n var fn = (this as any)['evalop__' + expr.op];\n if (!fn) throw new ECSError(`no eval function for \"${expr.op}\"`);\n }\n if (isBinOp(expr)) {\n expr.left = this.evalExpr(expr.left, scope);\n expr.right = this.evalExpr(expr.right, scope);\n let e = fn(expr.left, expr.right);\n return e || expr;\n }\n if (isUnOp(expr)) {\n expr.expr = this.evalExpr(expr.expr, scope);\n let e = fn(expr.expr);\n return e || expr;\n }\n return expr;\n }\n evalop__neg(arg: Expr) : Expr | undefined {\n if (isLiteralInt(arg)) {\n let valtype : IntType = { dtype:'int',\n lo: -arg.valtype.hi,\n hi: arg.valtype.hi };\n return { valtype, value: -arg.value };\n }\n }\n evalop__add(left: Expr, right: Expr) : Expr | undefined {\n if (isLiteralInt(left) && isLiteralInt(right)) {\n let valtype : IntType = { dtype:'int', \n lo: left.valtype.lo + right.valtype.lo, \n hi: left.valtype.hi + right.valtype.hi };\n return { valtype, value: left.value + right.value };\n }\n }\n evalop__sub(left: Expr, right: Expr) : Expr | undefined {\n if (isLiteralInt(left) && isLiteralInt(right)) {\n let valtype : IntType = { dtype:'int', \n lo: left.valtype.lo - right.valtype.hi, \n hi: left.valtype.hi - right.valtype.lo };\n return { valtype, value: left.value - right.value };\n }\n }\n}\n", "\nimport { SourceLocation } from \"../workertypes\";\nimport { DataValue, ECSError } from \"./ecs\";\n\nexport interface DecoderResult {\n properties: {[name: string] : DataValue}\n}\n\nabstract class LineDecoder {\n curline: number = 0; // for debugging, zero-indexed\n lines : string[][]; // array of token arrays\n\n constructor(\n text: string\n ) {\n // split the text into lines and into tokens\n this.lines = text.split('\\n').map(s => s.trim()).filter(s => !!s).map(s => s.split(/\\s+/));\n }\n\n decodeBits(s: string, n: number, msbfirst: boolean) {\n if (s.length != n) throw new ECSError(`Expected ${n} characters`);\n let b = 0;\n for (let i=0; i<n; i++) {\n let bit;\n let ch = s.charAt(i);\n if (ch == 'x' || ch == 'X' || ch == '1') bit = 1;\n else if (ch == '.' || ch == '0') bit = 0;\n else throw new ECSError('need x or . (or 0 or 1)');\n if (bit) {\n if (msbfirst) b |= 1 << (n-1-i);\n else b |= 1 << i;\n }\n }\n return b;\n }\n\n assertTokens(toks: string[], count: number) {\n if (toks.length != count) throw new ECSError(`Expected ${count} tokens on line.`);\n }\n\n hex(s: string) {\n let v = parseInt(s, 16);\n if (isNaN(v)) throw new ECSError(`Invalid hex value: ${s}`)\n return v;\n }\n\n getErrorLocation($loc: SourceLocation): SourceLocation {\n // TODO: blank lines mess this up\n $loc.line += this.curline + 1;\n return $loc;\n }\n\n abstract parse() : DecoderResult;\n}\n\nexport class VCSSpriteDecoder extends LineDecoder {\n parse() {\n let height = this.lines.length;\n let bitmapdata = new Uint8Array(height);\n let colormapdata = new Uint8Array(height);\n for (let i=0; i<height; i++) {\n this.curline = height - 1 - i;\n let toks = this.lines[this.curline];\n this.assertTokens(toks, 2);\n bitmapdata[i] = this.decodeBits(toks[0], 8, true);\n colormapdata[i] = this.hex(toks[1]);\n }\n return {\n properties: {\n bitmapdata, colormapdata, height: height-1\n }\n }\n }\n}\n\nexport class VCSBitmapDecoder extends LineDecoder {\n parse() {\n let height = this.lines.length;\n let bitmapdata = new Uint8Array(height);\n for (let i=0; i<height; i++) {\n this.curline = height - 1 - i;\n let toks = this.lines[this.curline];\n this.assertTokens(toks, 1);\n bitmapdata[i] = this.decodeBits(toks[0], 8, true);\n }\n return {\n properties: {\n bitmapdata, height: height-1\n }\n }\n }\n}\n\nexport class VCSPlayfieldDecoder extends LineDecoder {\n parse() {\n let height = this.lines.length;\n let pf = new Uint32Array(height);\n for (let i=0; i<height; i++) {\n this.curline = height - 1 - i;\n let toks = this.lines[this.curline];\n this.assertTokens(toks, 1);\n let pf0 = this.decodeBits(toks[0].substring(0,4), 4, false) << 4;\n let pf1 = this.decodeBits(toks[0].substring(4,12), 8, true);\n let pf2 = this.decodeBits(toks[0].substring(12,20), 8, false);\n pf[i] = (pf0 << 0) | (pf1 << 8) | (pf2 << 16);\n }\n return {\n properties: {\n pf\n }\n }\n }\n}\n\n\nexport class VCSVersatilePlayfieldDecoder extends LineDecoder {\n parse() {\n let height = this.lines.length;\n let data = new Uint8Array(height * 2);\n data.fill(0x3f);\n // pf0 pf1 pf2 colupf colubk ctrlpf trash\n const regs = [0x0d, 0x0e, 0x0f, 0x08, 0x09, 0x0a, 0x3f];\n let prev = [0,0,0,0,0,0,0];\n let cur = [0,0,0,0,0,0,0];\n for (let i=0; i<height; i++) {\n let dataofs = height*2 - i*2;\n this.curline = i;\n let toks = this.lines[this.curline];\n if (toks.length == 2) {\n data[dataofs - 1] = this.hex(toks[0]);\n data[dataofs - 2] = this.hex(toks[1]);\n continue;\n }\n this.assertTokens(toks, 4);\n cur[0] = this.decodeBits(toks[0].substring(0,4), 4, false) << 4;\n cur[1] = this.decodeBits(toks[0].substring(4,12), 8, true);\n cur[2] = this.decodeBits(toks[0].substring(12,20), 8, false);\n if (toks[1] != '..') cur[3] = this.hex(toks[1]);\n if (toks[2] != '..') cur[4] = this.hex(toks[2]);\n if (toks[3] != '..') cur[5] = this.hex(toks[3]);\n let changed = [];\n for (let j=0; j<cur.length; j++) {\n if (cur[j] != prev[j])\n changed.push(j);\n }\n if (changed.length > 1) {\n console.log(changed, cur, prev);\n throw new ECSError(`More than one register change in line ${i+1}: [${changed}]`);\n }\n let chgidx = changed.length ? changed[0] : regs.length-1;\n data[dataofs - 1] = regs[chgidx];\n data[dataofs - 2] = cur[chgidx];\n prev[chgidx] = cur[chgidx];\n }\n return {\n properties: {\n data\n }\n }\n }\n}\n\nexport class VCSBitmap48Decoder extends LineDecoder {\n parse() {\n let height = this.lines.length;\n let bitmap0 = new Uint8Array(height);\n let bitmap1 = new Uint8Array(height);\n let bitmap2 = new Uint8Array(height);\n let bitmap3 = new Uint8Array(height);\n let bitmap4 = new Uint8Array(height);\n let bitmap5 = new Uint8Array(height);\n for (let i=0; i<height; i++) {\n this.curline = height - 1 - i;\n let toks = this.lines[this.curline];\n this.assertTokens(toks, 1);\n bitmap0[i] = this.decodeBits(toks[0].slice(0,8), 8, true);\n bitmap1[i] = this.decodeBits(toks[0].slice(8,16), 8, true);\n bitmap2[i] = this.decodeBits(toks[0].slice(16,24), 8, true);\n bitmap3[i] = this.decodeBits(toks[0].slice(24,32), 8, true);\n bitmap4[i] = this.decodeBits(toks[0].slice(32,40), 8, true);\n bitmap5[i] = this.decodeBits(toks[0].slice(40,48), 8, true);\n }\n return {\n properties: {\n bitmap0, bitmap1, bitmap2, bitmap3, bitmap4, bitmap5,\n height: height-1\n }\n }\n }\n}\n\nexport function newDecoder(name: string, text: string) : LineDecoder | undefined {\n let cons = (DECODERS as any)[name];\n if (cons) return new cons(text);\n}\n\nconst DECODERS = {\n 'vcs_sprite': VCSSpriteDecoder,\n 'vcs_bitmap': VCSBitmapDecoder,\n 'vcs_playfield': VCSPlayfieldDecoder,\n 'vcs_versatile': VCSVersatilePlayfieldDecoder,\n 'vcs_bitmap48': VCSBitmap48Decoder,\n}\n", "\nimport { mergeLocs, Token, Tokenizer, TokenType } from \"../tokenizer\";\nimport { SourceLocated, SourceLocation } from \"../workertypes\";\nimport { newDecoder } from \"./decoder\";\nimport { Action, ActionContext, ArrayType, CodeLiteralNode, CodePlaceholderNode, ComponentType, DataField, DataType, DataValue, ECSError, Entity, EntityArchetype, EntityManager, EntityScope, IntType, Query, RefType, SelectType, SELECT_TYPE, SourceFileExport, System, SystemInstance, SystemInstanceParameters, ComponentFieldPair, Expr, ExprBase, ForwardRef, isLiteral, EntityFieldOp, LExpr, Statement, QueryExpr } from \"./ecs\";\n\nexport enum ECSTokenType {\n Ellipsis = 'ellipsis',\n Operator = 'operator',\n Relational = 'relational',\n QuotedString = 'quoted-string',\n Integer = 'integer',\n CodeFragment = 'code-fragment',\n Placeholder = 'placeholder',\n}\n\nconst OPERATORS = {\n 'IMP': {f:'bimp',p:4},\n 'EQV': {f:'beqv',p:5},\n 'XOR': {f:'bxor',p:6},\n 'OR': {f:'bor',p:7}, // or \"lor\" for logical\n 'AND': {f:'band',p:8}, // or \"land\" for logical\n '||': {f:'lor',p:17}, // not used\n '&&': {f:'land',p:18}, // not used\n '=': {f:'eq',p:50},\n '==': {f:'eq',p:50},\n '<>': {f:'ne',p:50},\n '><': {f:'ne',p:50},\n '!=': {f:'ne',p:50},\n '#': {f:'ne',p:50},\n '<': {f:'lt',p:50},\n '>': {f:'gt',p:50},\n '<=': {f:'le',p:50},\n '>=': {f:'ge',p:50},\n 'MIN': {f:'min',p:75},\n 'MAX': {f:'max',p:75},\n '+': {f:'add',p:100},\n '-': {f:'sub',p:100},\n};\n\nfunction getOperator(op: string) {\n return (OPERATORS as any)[op];\n}\n\nfunction getPrecedence(tok: Token): number {\n switch (tok.type) {\n case ECSTokenType.Operator:\n case ECSTokenType.Relational:\n case TokenType.Ident:\n let op = getOperator(tok.str);\n if (op) return op.p;\n }\n return -1;\n}\n\n// is token an end of statement marker? (\":\" or end of line)\nfunction isEOS(tok: Token) {\n return tok.type == TokenType.EOL || tok.type == TokenType.Comment\n || tok.str == ':' || tok.str == 'ELSE'; // TODO: only ELSE if ifElse==true\n}\n\n///\n\nexport class ECSCompiler extends Tokenizer {\n\n currentScope: EntityScope | null = null;\n currentContext: ActionContext | null = null;\n includeDebugInfo = false;\n\n constructor(\n public readonly em: EntityManager,\n public readonly isMainFile: boolean) {\n super();\n //this.includeEOL = true;\n this.setTokenRules([\n { type: ECSTokenType.Ellipsis, regex: /\\.\\./ },\n { type: ECSTokenType.QuotedString, regex: /\".*?\"/ },\n { type: ECSTokenType.CodeFragment, regex: /---.*?---/ },\n { type: ECSTokenType.Integer, regex: /0[xX][A-Fa-f0-9]+/ },\n { type: ECSTokenType.Integer, regex: /\\$[A-Fa-f0-9]+/ },\n { type: ECSTokenType.Integer, regex: /[%][01]+/ },\n { type: ECSTokenType.Integer, regex: /\\d+/ },\n { type: ECSTokenType.Relational, regex: /[=<>][=<>]?/ },\n { type: ECSTokenType.Operator, regex: /[.#,:(){}\\[\\]\\-\\+]/ },\n { type: TokenType.Ident, regex: /[A-Za-z_][A-Za-z0-9_]*/ },\n { type: TokenType.Ignore, regex: /\\/\\/.*?[\\n\\r]/ },\n { type: TokenType.Ignore, regex: /\\/\\*.*?\\*\\// },\n { type: TokenType.EOL, regex: /[\\n\\r]+/ },\n { type: TokenType.Ignore, regex: /\\s+/ },\n ]);\n this.errorOnCatchAll = true;\n }\n\n annotate<T extends SourceLocated>(fn: () => T) {\n let start = this.peekToken();\n let obj = fn();\n let end = this.lasttoken;\n let $loc = end ? mergeLocs(start.$loc, end.$loc) : start.$loc;\n if (obj) (obj as SourceLocated).$loc = $loc;\n return obj;\n }\n\n parseFile(text: string, path: string) {\n this.tokenizeFile(text, path);\n while (!this.isEOF()) {\n let top = this.parseTopLevel();\n if (top) {\n let t = top;\n this.annotate(() => t); // TODO? typescript bug?\n }\n }\n this.runDeferred();\n }\n\n getImportFile: (path: string) => string;\n\n importFile(path: string) {\n if (!this.em.imported[path]) { // already imported?\n let text = this.getImportFile && this.getImportFile(path);\n if (!text) this.compileError(`I can't find the import file \"${path}\".`);\n this.em.imported[path] = true;\n let comp = new ECSCompiler(this.em, false);\n comp.includeDebugInfo = this.includeDebugInfo; // TODO: clone compiler\n try {\n comp.parseFile(text, path);\n } catch (e) {\n for (var err of comp.errors) this.errors.push(err);\n throw e;\n }\n }\n }\n\n parseTopLevel() {\n //this.skipBlankLines();\n let tok = this.expectTokens(['component', 'system', 'scope', 'resource', 'import', 'demo', 'comment']);\n if (tok.str == 'component') {\n return this.em.defineComponent(this.parseComponentDefinition());\n }\n if (tok.str == 'system') {\n return this.em.defineSystem(this.parseSystem());\n }\n if (tok.str == 'scope') {\n return this.parseScope();\n }\n if (tok.str == 'resource') {\n return this.em.defineSystem(this.parseResource());\n }\n if (tok.str == 'import') {\n let tok = this.expectTokenTypes([ECSTokenType.QuotedString]);\n let path = tok.str.substring(1, tok.str.length - 1);\n return this.importFile(path);\n }\n if (tok.str == 'demo') {\n if (this.isMainFile) {\n let scope = this.parseScope();\n scope.isDemo = true;\n this.expectToken('demo');\n return scope;\n } else {\n this.skipDemo(); // don't even parse it, just skip it\n return;\n }\n }\n if (tok.str == 'comment') {\n this.expectTokenTypes([ECSTokenType.CodeFragment]);\n return;\n }\n this.compileError(`Unexpected top-level keyword: ${tok.str}`);\n }\n\n skipDemo() {\n var tok;\n while ((tok = this.consumeToken()) && !this.isEOF()) {\n if (tok.str == 'end' && this.peekToken().str == 'demo') {\n this.consumeToken();\n return;\n }\n }\n throw new ECSError(`Expected \"end demo\" after a \"demo\" declaration.`);\n }\n\n parseComponentDefinition(): ComponentType {\n let name = this.expectIdent().str;\n let fields = [];\n this.em.deferComponent(name);\n while (this.peekToken().str != 'end') {\n fields.push(this.parseComponentField());\n }\n this.expectToken('end');\n return { name, fields };\n }\n\n parseComponentField(): DataField {\n let name = this.expectIdent();\n this.expectToken(':', 'I expected either a \":\" or \"end\" here.'); // TODO\n let type = this.parseDataType();\n return { name: name.str, $loc: name.$loc, ...type };\n }\n\n parseDataType(): DataType {\n if (this.peekToken().type == 'integer') {\n let lo = this.parseIntegerConstant();\n this.expectToken('..');\n let hi = this.parseIntegerConstant();\n this.checkLowerLimit(lo, -0x80000000, \"lower int range\");\n this.checkUpperLimit(hi, 0x7fffffff, \"upper int range\");\n this.checkUpperLimit(hi-lo, 0xffffffff, \"int range\");\n this.checkLowerLimit(hi, lo, \"int range\");\n // TODO: use default value?\n let defvalue;\n if (this.ifToken('default')) {\n defvalue = this.parseIntegerConstant();\n }\n // TODO: check types\n return { dtype: 'int', lo, hi, defvalue } as IntType;\n }\n if (this.peekToken().str == '[') {\n return { dtype: 'ref', query: this.parseQuery() } as RefType;\n }\n if (this.ifToken('array')) {\n let index: IntType | undefined = undefined;\n if (this.peekToken().type == ECSTokenType.Integer) {\n index = this.parseDataType() as IntType;\n }\n this.expectToken('of');\n let elem = this.parseDataType();\n let baseoffset;\n if (this.ifToken('baseoffset')) {\n baseoffset = this.parseIntegerConstant();\n this.checkLowerLimit(baseoffset, -32768, \"base offset\");\n this.checkUpperLimit(baseoffset, 32767, \"base offset\");\n }\n return { dtype: 'array', index, elem, baseoffset } as ArrayType;\n }\n if (this.ifToken('enum')) {\n this.expectToken('[');\n let enumtoks = this.parseList(this.parseEnumIdent, ',');\n this.expectToken(']');\n if (enumtoks.length == 0) this.compileError(`must define at least one enum`);\n let lo = 0;\n let hi = enumtoks.length-1;\n this.checkLowerLimit(hi, 0, \"enum count\");\n this.checkUpperLimit(hi, 255, \"enum count\");\n let enums : {[name:string]:number} = {};\n for (let i=0; i<=hi; i++)\n enums[enumtoks[i].str] = i;\n // TODO: use default value?\n let defvalue;\n if (this.ifToken('default')) {\n defvalue = this.parseIntegerConstant();\n }\n return { dtype: 'int', lo, hi, defvalue, enums } as IntType;\n }\n throw this.compileError(`I expected a data type here.`);\n }\n\n parseEnumIdent() {\n let tok = this.expectTokenTypes([TokenType.Ident]);\n return tok;\n }\n parseEnumValue(tok: Token, field: IntType) {\n if (!field.enums) throw new ECSError(`field is not an enum`);\n let value = field.enums[tok.str];\n if (value == null) throw new ECSError(`unknown enum \"${tok.str}\"`);\n return value;\n }\n\n parseDataValue(field: DataField): DataValue | ForwardRef {\n let tok = this.peekToken();\n // TODO: move to expr\n if (tok.type == TokenType.Ident && field.dtype == 'int') {\n return this.parseEnumValue(this.consumeToken(), field);\n }\n if (tok.type == TokenType.Ident) {\n let entity = this.currentScope?.getEntityByName(tok.str);\n if (!entity)\n this.compileError('no entity named \"${tok.str}\"');\n else {\n this.consumeToken();\n this.expectToken('.');\n let fieldName = this.expectIdent().str;\n let constValue = this.currentScope?.getConstValue(entity, fieldName);\n if (constValue == null)\n throw new ECSError(`\"${fieldName}\" is not defined as a constant`, entity);\n else\n return constValue;\n }\n }\n if (tok.str == '[') {\n // TODO: 16-bit?\n return new Uint8Array(this.parseDataArray());\n }\n if (tok.str == '#') {\n this.consumeToken();\n let reftype = field.dtype == 'ref' ? field as RefType : undefined;\n return this.parseEntityForwardRef(reftype);\n }\n // TODO?\n return this.parseIntegerConstant();\n // TODO: throw this.compileError(`I expected a ${field.dtype} here.`);\n }\n\n parseEntityForwardRef(reftype?: RefType): ForwardRef {\n let token = this.expectIdent();\n return { reftype, token };\n }\n\n parseDataArray() {\n this.expectToken('[');\n let arr = this.parseList(this.parseIntegerConstant, ',');\n this.expectToken(']');\n return arr;\n }\n\n expectInteger(): number {\n let s = this.consumeToken().str;\n let i: number;\n if (s.startsWith('$'))\n i = parseInt(s.substring(1), 16); // hex $...\n else if (s.startsWith('%'))\n i = parseInt(s.substring(1), 2); // binary %...\n else\n i = parseInt(s); // default base 10 or 16 (0x...)\n if (isNaN(i)) this.compileError('There should be an integer here.');\n return i;\n }\n\n parseSystem(): System {\n let name = this.expectIdent().str;\n let actions: Action[] = [];\n let system: System = { name, actions };\n let cmd;\n while ((cmd = this.expectTokens(['on', 'locals', 'end']).str) != 'end') {\n if (cmd == 'on') {\n let action = this.annotate(() => this.parseAction(system));\n actions.push(action);\n } else if (cmd == 'locals') {\n system.tempbytes = this.parseIntegerConstant();\n } else {\n this.compileError(`Unexpected system keyword: ${cmd}`);\n }\n }\n return system;\n }\n\n parseResource(): System {\n let name = this.expectIdent().str;\n let tempbytes;\n if (this.peekToken().str == 'locals') {\n this.consumeToken();\n tempbytes = this.parseIntegerConstant();\n }\n let system: System = { name, tempbytes, actions: [] };\n let expr = this.annotate(() => this.parseBlockStatement());\n let action: Action = { expr, event: name };\n system.actions.push(action);\n return system;\n }\n\n parseAction(system: System): Action {\n // TODO: unused events?\n const event = this.expectIdent().str;\n this.expectToken('do');\n let fitbytes = undefined;\n let critical = undefined;\n if (this.ifToken('critical')) critical = true;\n if (this.ifToken('fit')) fitbytes = this.parseIntegerConstant();\n let expr = this.annotate(() => this.parseBlockStatement());\n //query, join, select, direction, \n let action : Action = { expr, event, fitbytes, critical };\n return action as Action;\n }\n\n parseQuery() {\n let q: Query = { include: [] };\n let start = this.expectToken('[');\n this.parseList(() => this.parseQueryItem(q), ',');\n this.expectToken(']');\n // TODO: other params\n q.$loc = mergeLocs(start.$loc, this.lasttoken.$loc);\n return q;\n }\n\n parseQueryItem(q: Query) {\n let prefix = this.peekToken();\n if (prefix.type != TokenType.Ident) {\n this.consumeToken();\n }\n if (prefix.type == TokenType.Ident) {\n let cref = this.parseComponentRef();\n q.include.push(cref);\n } else if (prefix.str == '-') {\n let cref = this.parseComponentRef();\n if (!q.exclude) q.exclude = [];\n q.exclude.push(cref);\n } else if (prefix.str == '#') {\n const scope = this.currentScope;\n if (scope == null) {\n throw this.compileError('You can only reference specific entities inside of a scope.');\n }\n let eref = this.parseEntityForwardRef();\n this.deferred.push(() => {\n let refvalue = this.resolveEntityRef(scope, eref);\n if (!q.entities) q.entities = [];\n q.entities.push(scope.entities[refvalue]);\n });\n } else {\n this.compileError(`Query components may be preceded only by a '-'.`);\n }\n }\n\n parseEventName() {\n return this.expectIdent().str;\n }\n\n parseEventList() {\n return this.parseList(this.parseEventName, \",\");\n }\n\n parseCode(): string { // TODOActionNode[] {\n // TODO: add $loc\n let tok = this.expectTokenTypes([ECSTokenType.CodeFragment]);\n let code = tok.str.substring(3, tok.str.length - 3);\n // TODO: add after parsing maybe?\n let lines = code.split('\\n');\n if (this.includeDebugInfo) this.addDebugInfo(lines, tok.$loc.line);\n code = lines.join('\\n');\n\n //let acomp = new ECSActionCompiler(context);\n //let nodes = acomp.parseFile(code, this.path);\n // TODO: return nodes\n return code;\n }\n\n addDebugInfo(lines: string[], startline: number) {\n const re = /^\\s*(;|\\/\\/|$)/; // ignore comments and blank lines\n for (let i = 0; i < lines.length; i++) {\n if (!lines[i].match(re))\n lines[i] = this.em.dialect.debug_line(this.path, startline + i) + '\\n' + lines[i];\n }\n }\n\n parseScope(): EntityScope {\n let name = this.expectIdent().str;\n let scope = this.em.newScope(name, this.currentScope || undefined);\n scope.filePath = this.path;\n this.currentScope = scope;\n let cmd;\n while ((cmd = this.expectTokens(['end', 'using', 'entity', 'scope', 'comment', 'system']).str) != 'end') {\n if (cmd == 'using') {\n this.parseScopeUsing();\n }\n if (cmd == 'entity') {\n this.annotate(() => this.parseEntity());\n }\n if (cmd == 'scope') {\n this.annotate(() => this.parseScope());\n }\n if (cmd == 'comment') {\n this.expectTokenTypes([ECSTokenType.CodeFragment]);\n }\n // TODO: need to make these local names, otherwise we get \"duplicate name\"\n if (cmd == 'system') {\n let sys = this.annotate(() => this.parseSystem());\n this.em.defineSystem(sys);\n this.currentScope.newSystemInstanceWithDefaults(sys);\n }\n }\n this.currentScope = scope.parent || null;\n return scope;\n }\n\n parseScopeUsing() {\n let instlist = this.parseList(this.parseSystemInstanceRef, ',');\n let params = {};\n if (this.peekToken().str == 'with') {\n this.consumeToken();\n params = this.parseSystemInstanceParameters();\n }\n for (let inst of instlist) {\n inst.params = params;\n this.currentScope?.newSystemInstance(inst);\n }\n }\n\n parseEntity(): Entity {\n if (!this.currentScope) { throw this.internalError(); }\n const scope = this.currentScope;\n let entname = '';\n if (this.peekToken().type == TokenType.Ident) {\n entname = this.expectIdent().str;\n }\n let etype = this.parseEntityArchetype();\n let entity = this.currentScope.newEntity(etype, entname);\n let cmd2: string;\n // TODO: remove init?\n while ((cmd2 = this.expectTokens(['const', 'init', 'var', 'decode', 'end']).str) != 'end') {\n let cmd = cmd2; // put in scope\n if (cmd == 'var') cmd = 'init'; // TODO: remove?\n if (cmd == 'init' || cmd == 'const') {\n this.parseInitConst(cmd, scope, entity);\n } else if (cmd == 'decode') {\n this.parseDecode(scope, entity);\n }\n }\n return entity;\n }\n\n parseInitConst(cmd: string, scope: EntityScope, entity: Entity) {\n // TODO: check data types\n let name = this.expectIdent().str;\n let { c, f } = this.getEntityField(entity, name);\n let symtype = scope.isConstOrInit(c, name);\n if (symtype && symtype != cmd)\n this.compileError(`I can't mix const and init values for a given field in a scope.`);\n this.expectToken('=');\n let valueOrRef = this.parseDataValue(f);\n if ((valueOrRef as ForwardRef).token != null) {\n this.deferred.push(() => {\n this.lasttoken = (valueOrRef as ForwardRef).token; // for errors\n let refvalue = this.resolveEntityRef(scope, valueOrRef as ForwardRef);\n if (cmd == 'const') scope.setConstValue(entity, c, f, refvalue);\n if (cmd == 'init') scope.setInitValue(entity, c, f, refvalue);\n });\n } else {\n if (cmd == 'const') scope.setConstValue(entity, c, f, valueOrRef as DataValue);\n if (cmd == 'init') scope.setInitValue(entity, c, f, valueOrRef as DataValue);\n }\n }\n\n parseDecode(scope: EntityScope, entity: Entity) {\n let decoderid = this.expectIdent().str;\n let codetok = this.expectTokenTypes([ECSTokenType.CodeFragment]);\n let code = codetok.str;\n code = code.substring(3, code.length - 3);\n let decoder = newDecoder(decoderid, code);\n if (!decoder) { throw this.compileError(`I can't find a \"${decoderid}\" decoder.`); }\n let result;\n try {\n result = decoder.parse();\n } catch (e) {\n throw new ECSError(e.message, decoder.getErrorLocation(codetok.$loc));\n }\n for (let entry of Object.entries(result.properties)) {\n let { c, f } = this.getEntityField(entity, entry[0]);\n scope.setConstValue(entity, c, f, entry[1] as DataValue);\n }\n }\n\n getEntityField(e: Entity, name: string): ComponentFieldPair {\n if (!this.currentScope) { throw this.internalError(); }\n let comps = this.em.componentsWithFieldName([e.etype], name);\n if (comps.length == 0) this.compileError(`I couldn't find a field named \"${name}\" for this entity.`)\n if (comps.length > 1) this.compileError(`I found more than one field named \"${name}\" for this entity.`)\n let component = comps[0];\n let field = component.fields.find(f => f.name == name);\n if (!field) { throw this.internalError(); }\n return { c: component, f: field };\n }\n\n parseEntityArchetype(): EntityArchetype {\n this.expectToken('[');\n let components = this.parseList(this.parseComponentRef, ',');\n this.expectToken(']');\n return { components };\n }\n\n parseComponentRef(): ComponentType {\n let name = this.expectIdent().str;\n let cref = this.em.getComponentByName(name);\n if (!cref) this.compileError(`I couldn't find a component named \"${name}\".`)\n return cref;\n }\n\n findEntityByName(scope: EntityScope, token: Token) {\n let name = token.str;\n let eref = scope.entities.find(e => e.name == name);\n if (!eref) {\n throw this.compileError(`I couldn't find an entity named \"${name}\" in this scope.`, token.$loc)\n }\n return eref;\n }\n\n resolveEntityRef(scope: EntityScope, ref: ForwardRef): number {\n let id = this.findEntityByName(scope, ref.token).id;\n if (ref.reftype) {\n // TODO: make this a function? elo ehi etc?\n let atypes = this.em.archetypesMatching(ref.reftype.query);\n let entities = scope.entitiesMatching(atypes);\n if (entities.length == 0)\n throw this.compileError(`This entity doesn't seem to fit the reference type.`, ref.token.$loc);\n id -= entities[0].id;\n }\n return id;\n }\n\n parseSystemInstanceRef(): SystemInstance {\n let name = this.expectIdent().str;\n let system = this.em.getSystemByName(name);\n if (!system) throw this.compileError(`I couldn't find a system named \"${name}\".`, this.lasttoken.$loc);\n let params = {};\n let inst = { system, params, id: 0 };\n return inst;\n }\n\n parseSystemInstanceParameters(): SystemInstanceParameters {\n let scope = this.currentScope;\n if (scope == null) throw this.internalError();\n if (this.peekToken().str == '[') {\n return { query: this.parseQuery() };\n }\n this.expectToken('#');\n let entname = this.expectIdent();\n this.expectToken('.');\n let fieldname = this.expectIdent();\n let entity = this.findEntityByName(scope, entname);\n let cf = this.getEntityField(entity, fieldname.str);\n return { refEntity: entity, refField: cf };\n }\n\n exportToFile(src: SourceFileExport) {\n this.em.exportToFile(src);\n }\n\n export() {\n let src = new SourceFileExport();\n src.line(this.em.dialect.debug_file(this.path));\n for (let path of Object.keys(this.em.imported))\n src.line(this.em.dialect.debug_file(path));\n this.exportToFile(src);\n return src.toString();\n }\n\n checkUpperLimit(value: number, upper: number, what: string) {\n if (value > upper) this.compileError(`This ${what} is too high; must be ${upper} or less`);\n }\n checkLowerLimit(value: number, lower: number, what: string) {\n if (value < lower) this.compileError(`This ${what} is too low; must be ${lower} or more`);\n }\n\n // expression stuff\n\n parseConstant(): DataValue {\n let expr = this.parseExpr();\n expr = this.em.evalExpr(expr, this.currentScope);\n if (isLiteral(expr)) return expr.value;\n throw this.compileError('This expression is not a constant.');\n }\n parseIntegerConstant(): number {\n let value = this.parseConstant();\n if (typeof value === 'number') return value;\n throw this.compileError('This expression is not an integer.');\n }\n parseExpr(): Expr {\n var startloc = this.peekToken().$loc;\n var expr = this.parseExpr1(this.parsePrimary(), 0);\n var endloc = this.lasttoken.$loc;\n expr.$loc = mergeLocs(startloc, endloc);\n return expr;\n }\n parseExpr1(left: Expr, minPred: number): Expr {\n let look = this.peekToken();\n while (getPrecedence(look) >= minPred) {\n let op = this.consumeToken();\n let right: Expr = this.parsePrimary();\n look = this.peekToken();\n while (getPrecedence(look) > getPrecedence(op)) {\n right = this.parseExpr1(right, getPrecedence(look));\n look = this.peekToken();\n }\n var opfn = getOperator(op.str).f;\n // use logical operators instead of bitwise?\n if (op.str == 'and') opfn = 'land';\n if (op.str == 'or') opfn = 'lor';\n var valtype = this.exprTypeForOp(opfn, left, right, op);\n left = { valtype:valtype, op:opfn, left: left, right: right };\n }\n return left;\n }\n parsePrimary(): Expr {\n let tok = this.consumeToken();\n switch (tok.type) {\n case ECSTokenType.Integer:\n this.pushbackToken(tok);\n let value = this.expectInteger();\n let valtype : IntType = { dtype: 'int', lo: value, hi: value };\n return { valtype, value };\n case TokenType.Ident:\n if (tok.str == 'not') {\n let expr = this.parsePrimary();\n let valtype : IntType = { dtype: 'int', lo: 0, hi: 1 };\n return { valtype, op: 'lnot', expr: expr };\n } else {\n this.pushbackToken(tok);\n return this.parseVarSubscriptOrFunc();\n }\n case ECSTokenType.Operator:\n if (tok.str == '(') {\n let expr = this.parseExpr();\n this.expectToken(')', `There should be another expression or a \")\" here.`);\n return expr;\n } else if (tok.str == '-') {\n let expr = this.parsePrimary(); // TODO: -2^2=-4 and -2-2=-4\n let valtype = (expr as ExprBase).valtype;\n if (valtype?.dtype == 'int') {\n let hi = Math.abs(valtype.hi);\n let negtype : IntType = { dtype: 'int', lo: -hi, hi: hi };\n return { valtype: negtype, op: 'neg', expr: expr };\n }\n } else if (tok.str == '+') {\n return this.parsePrimary(); // ignore unary +\n }\n default:\n throw this.compileError(`The expression is incomplete.`);\n }\n }\n parseVarSubscriptOrFunc(): LExpr {\n var tok = this.consumeToken();\n switch (tok.type) {\n case TokenType.Ident:\n // component:field\n if (this.ifToken(':')) {\n let ftok = this.consumeToken();\n let component = this.em.getComponentByName(tok.str);\n if (!component) throw this.compileError(`A component named \"${tok.str}\" has not been defined.`);\n let field = component.fields.find(f => f.name == ftok.str);\n if (!field) throw this.compileError(`There is no \"${ftok.str}\" field in the ${tok.str} component.`);\n if (!this.currentScope) throw this.compileError(`This operation only works inside of a scope.`);\n let atypes = this.em.archetypesMatching({ include: [component] })\n let entities = this.currentScope.entitiesMatching(atypes);\n return { entities, field } as EntityFieldOp;\n }\n // entity.field\n if (this.ifToken('.')) {\n let ftok = this.consumeToken();\n if (!this.currentScope) throw this.compileError(`This operation only works inside of a scope.`);\n let entity = this.currentScope.getEntityByName(tok.str);\n if (!entity) throw this.compileError(`An entity named \"${tok.str}\" has not been defined.`);\n let component = this.em.singleComponentWithFieldName([entity.etype], ftok.str, ftok);\n let field = component.fields.find(f => f.name == ftok.str);\n if (!field) throw this.compileError(`There is no \"${ftok.str}\" field in this entity.`);\n let entities = [entity];\n return { entities, field } as EntityFieldOp;\n }\n let args : Expr[] = [];\n if (this.ifToken('(')) {\n args = this.parseExprList();\n this.expectToken(')', `There should be another expression or a \")\" here.`);\n }\n var loc = mergeLocs(tok.$loc, this.lasttoken.$loc);\n var valtype = this.exprTypeForSubscript(tok.str, args, loc);\n return { valtype: valtype, name: tok.str, args: args, $loc:loc };\n default:\n throw this.compileError(`There should be a variable name here.`);\n }\n }\n parseLexpr(): LExpr {\n var lexpr = this.parseVarSubscriptOrFunc();\n //this.vardefs[lexpr.name] = lexpr;\n //this.validateVarName(lexpr);\n return lexpr;\n }\n exprTypeForOp(fnname: string, left: Expr, right: Expr, optok: Token) : DataType {\n return { dtype: 'int', lo:0, hi:255 }; // TODO?\n }\n exprTypeForSubscript(fnname: string, args: Expr[], loc: SourceLocation) : DataType {\n return { dtype: 'int', lo:0, hi:255 }; // TODO?\n }\n parseLexprList(): LExpr[] {\n return this.parseList(this.parseLexpr, ',');\n }\n parseExprList(): Expr[] {\n return this.parseList(this.parseExpr, ',');\n }\n // TODO: annotate with location\n parseBlockStatement(): Statement {\n let valtype : IntType = { dtype:'int', lo:0, hi: 0 } // TODO?\n if (this.peekToken().type == ECSTokenType.CodeFragment) {\n return { valtype, code: this.parseCode() };\n }\n if (this.ifToken('begin')) {\n let stmts = [];\n while (this.peekToken().str != 'end') {\n stmts.push(this.annotate(() => this.parseBlockStatement()));\n }\n this.expectToken('end');\n return { valtype, stmts };\n }\n let cmd = this.peekToken();\n if (SELECT_TYPE.includes(cmd.str as any)) {\n return this.parseQueryStatement();\n }\n throw this.compileError(`There should be a statement or \"end\" here.`, cmd.$loc);\n }\n parseQueryStatement() : QueryExpr {\n // TODO: include modifiers in error msg\n const select = this.expectTokens(SELECT_TYPE).str as SelectType; // TODO: type check?\n let all = this.ifToken('all') != null;\n let query = undefined;\n let join = undefined;\n if (select == 'once') {\n if (this.peekToken().str == '[') this.compileError(`A \"${select}\" action can't include a query.`)\n } else {\n query = this.parseQuery();\n }\n if (select == 'join') {\n this.expectToken('with');\n join = this.parseQuery();\n }\n if (this.ifToken('limit')) {\n if (!query) { this.compileError(`A \"${select}\" query can't include a limit.`); }\n else query.limit = this.parseIntegerConstant();\n }\n const all_modifiers = ['asc', 'desc']; // TODO\n const modifiers = this.parseModifiers(all_modifiers);\n let direction = undefined;\n if (modifiers['asc']) direction = 'asc';\n else if (modifiers['desc']) direction = 'desc';\n let body = this.annotate(() => this.parseBlockStatement());\n return { select, query, join, direction, all, stmts: [body], loop: select == 'foreach' } as QueryExpr;\n }\n}\n\n///\n\nexport class ECSActionCompiler extends Tokenizer {\n constructor(\n public readonly context: ActionContext) {\n super();\n this.setTokenRules([\n { type: ECSTokenType.Placeholder, regex: /\\{\\{.*?\\}\\}/ },\n { type: TokenType.CatchAll, regex: /[^{\\n]+\\n*/ },\n ]);\n this.errorOnCatchAll = false;\n }\n\n parseFile(text: string, path: string) {\n this.tokenizeFile(text, path);\n let nodes = [];\n while (!this.isEOF()) {\n let tok = this.consumeToken();\n if (tok.type == ECSTokenType.Placeholder) {\n let args = tok.str.substring(2, tok.str.length - 2).split(/\\s+/);\n nodes.push(new CodePlaceholderNode(this.context, tok.$loc, args));\n } else if (tok.type == TokenType.CatchAll) {\n nodes.push(new CodeLiteralNode(this.context, tok.$loc, tok.str));\n }\n }\n return nodes;\n }\n}\n", "import { ECSCompiler } from \"../../common/ecs/compiler\";\nimport { Dialect_CA65, ECSError, EntityManager } from \"../../common/ecs/ecs\";\nimport { CompileError } from \"../../common/tokenizer\";\nimport { CodeListingMap } from \"../../common/workertypes\";\nimport { BuildStep, BuildStepResult, fixParamsWithDefines, gatherFiles, getWorkFileAsString, putWorkFile, staleFiles } from \"../workermain\";\n\nexport function assembleECS(step: BuildStep): BuildStepResult {\n let em = new EntityManager(new Dialect_CA65()); // TODO\n let compiler = new ECSCompiler(em, true);\n compiler.getImportFile = (path: string) => {\n return getWorkFileAsString(path);\n }\n gatherFiles(step, { mainFilePath: \"main.ecs\" });\n if (step.mainfile) em.mainPath = step.path;\n var destpath = step.prefix + '.ca65';\n if (staleFiles(step, [destpath])) {\n let code = getWorkFileAsString(step.path);\n fixParamsWithDefines(step.path, step.params);\n try {\n compiler.includeDebugInfo = true;\n compiler.parseFile(code, step.path);\n let outtext = compiler.export().toString();\n putWorkFile(destpath, outtext);\n var listings: CodeListingMap = {};\n listings[destpath] = {lines:[], text:outtext} // TODO\n var debuginfo = compiler.em.getDebugTree();\n } catch (e) {\n if (e instanceof ECSError) {\n compiler.addError(e.message, e.$loc);\n for (let obj of e.$sources) {\n let name = (obj as any).event;\n if (name == 'start') break;\n compiler.addError(`... ${name}`, obj.$loc); // TODO?\n }\n return { errors: compiler.errors };\n } else if (e instanceof CompileError) {\n return { errors: compiler.errors };\n } else {\n throw e;\n }\n }\n return {\n nexttool: \"ca65\",\n path: destpath,\n args: [destpath],\n files: [destpath].concat(step.files),\n listings,\n debuginfo\n };\n }\n}\n", "import { byteArrayToString, stringToByteArray } from \"../../common/util\";\nimport { WorkerFileUpdate, isErrorResult, isOutputResult, isUnchanged } from \"../../common/workertypes\";\nimport { BuildStep, BuildStepResult, gatherFiles, staleFiles, store } from \"../workermain\";\n\n// create random UID\nconst sessionID = Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);\n\n// TODO: #include links but #link doesnt link\nexport async function buildRemote(step: BuildStep): Promise<BuildStepResult> {\n // grab the remote URL from a remote.json file\n const { REMOTE_URL } = await (await fetch('../../remote.json')).json();\n if (typeof REMOTE_URL !== 'string') throw new Error(\"No REMOTE_URL in remote.json\");\n\n gatherFiles(step); // TODO?\n var binpath = \"a.out\"; // TODO?\n if (staleFiles(step, [binpath])) {\n // grab files from store\n let updates : WorkerFileUpdate[] = [];\n for (var i = 0; i < step.files.length; i++) {\n let path = step.files[i];\n let entry = store.workfs[path];\n // convert to base64\n let data = typeof entry.data === 'string' ? entry.data : btoa(byteArrayToString(entry.data));\n updates.push({ path, data });\n }\n // build the command\n let cmd = { buildStep: step, updates, sessionID };\n // do a POST to the remote server, sending step as JSON\n console.log('POST', cmd);\n let result = await fetch(REMOTE_URL, {\n method: \"POST\",\n mode: \"cors\",\n body: JSON.stringify(cmd),\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n // return the result as JSON\n let json = await result.json();\n // parse the result as JSON\n if (isUnchanged(json)) return json;\n if (isErrorResult(json)) return json;\n if (isOutputResult(json)) {\n json.output = stringToByteArray(atob(json.output));\n return json;\n }\n throw new Error(`Unexpected result from remote build: ${JSON.stringify(json)}`);\n }\n}\n", "\nimport type { WorkerResult, WorkerBuildStep, WorkerMessage, WorkerError, SourceLine, WorkerErrorResult, WorkingStore } from \"../common/workertypes\";\nimport { getBasePlatform, getRootBasePlatform } from \"../common/util\";\n\n/// <reference types=\"emscripten\" />\nexport interface EmscriptenModule {\n callMain: (args: string[]) => void;\n FS : any; // TODO\n}\n\ndeclare function importScripts(path:string);\ndeclare function postMessage(msg);\n\nconst ENVIRONMENT_IS_WEB = typeof window === 'object';\nconst ENVIRONMENT_IS_WORKER = typeof importScripts === 'function';\nexport const emglobal : any = ENVIRONMENT_IS_WORKER ? self : ENVIRONMENT_IS_WEB ? window : global;\n\n// simple CommonJS module loader\n// TODO: relative paths for dependencies\nif (!emglobal['require']) {\n emglobal['require'] = (modpath: string) => {\n if (modpath.endsWith('.js')) modpath = modpath.slice(-3);\n var modname = modpath.split('/').slice(-1)[0];\n var hasNamespace = emglobal[modname] != null;\n console.log('@@@ require', modname, modpath, hasNamespace);\n if (!hasNamespace) {\n exports = {};\n importScripts(`${modpath}.js`);\n }\n if (emglobal[modname] == null) {\n emglobal[modname] = exports; // TODO: always put in global scope?\n }\n return emglobal[modname]; // TODO\n }\n}\n\n// WebAssembly module cache\n// TODO: leaks memory even when disabled...\nvar _WASM_module_cache = {};\nvar CACHE_WASM_MODULES = true; // if false, use asm.js only\n\n// TODO: which modules need this?\nvar wasmMemory;\nexport function getWASMMemory() {\n if (wasmMemory == null) {\n wasmMemory = new WebAssembly.Memory({\n 'initial': 1024, // 64MB\n 'maximum': 16384, // 1024MB\n });\n }\n return wasmMemory;\n}\n\nfunction getWASMModule(module_id:string) {\n var module = _WASM_module_cache[module_id];\n if (!module) {\n starttime();\n module = new WebAssembly.Module(wasmBlob[module_id]);\n if (CACHE_WASM_MODULES) {\n _WASM_module_cache[module_id] = module;\n delete wasmBlob[module_id];\n }\n endtime(\"module creation \" + module_id);\n }\n return module;\n}\n// function for use with instantiateWasm\nexport function moduleInstFn(module_id:string) {\n return function(imports,ri) {\n var mod = getWASMModule(module_id);\n var inst = new WebAssembly.Instance(mod, imports);\n ri(inst);\n return inst.exports;\n }\n}\n\n//\n\nvar PLATFORM_PARAMS = {\n 'vcs': {\n arch: '6502',\n code_start: 0x1000,\n code_size: 0xf000,\n data_start: 0x80,\n data_size: 0x80,\n wiz_rom_ext: '.a26',\n wiz_inc_dir: '2600',\n cfgfile: 'atari2600.cfg',\n libargs: ['crt0.o', 'atari2600.lib'],\n extra_link_files: ['crt0.o', 'atari2600.cfg'],\n define: ['__ATARI2600__'],\n },\n 'mw8080bw': {\n arch: 'z80',\n code_start: 0x0,\n rom_size: 0x2000,\n data_start: 0x2000,\n data_size: 0x400,\n stack_end: 0x2400,\n },\n 'vicdual': {\n arch: 'z80',\n code_start: 0x0,\n rom_size: 0x4020,\n data_start: 0xe400,\n data_size: 0x400,\n stack_end: 0xe800,\n },\n 'galaxian': {\n arch: 'z80',\n code_start: 0x0,\n rom_size: 0x4000,\n data_start: 0x4000,\n data_size: 0x400,\n stack_end: 0x4800,\n },\n 'galaxian-scramble': {\n arch: 'z80',\n code_start: 0x0,\n rom_size: 0x5020,\n data_start: 0x4000,\n data_size: 0x400,\n stack_end: 0x4800,\n },\n 'williams': {\n arch: '6809',\n code_start: 0x0,\n rom_size: 0xc000,\n data_start: 0x9800,\n data_size: 0x2800,\n stack_end: 0xc000,\n set_stack_end: 0xc000,\n extra_link_files: ['williams.scr', 'libcmoc-crt-vec.a', 'libcmoc-std-vec.a'],\n extra_link_args: ['-swilliams.scr', '-lcmoc-crt-vec', '-lcmoc-std-vec'],\n extra_compile_files: ['assert.h','cmoc.h','stdarg.h','stdlib.h'],\n //extra_compile_args: ['--vectrex'],\n },\n 'williams-defender': {\n arch: '6809',\n code_start: 0x0,\n rom_size: 0xc000,\n data_start: 0x9800,\n data_size: 0x2800,\n stack_end: 0xc000,\n },\n 'williams-z80': {\n arch: 'z80',\n code_start: 0x0,\n rom_size: 0x9800,\n data_start: 0x9800,\n data_size: 0x2800,\n stack_end: 0xc000,\n },\n 'vector-z80color': {\n arch: 'z80',\n code_start: 0x0,\n rom_size: 0x8000,\n data_start: 0xe000,\n data_size: 0x2000,\n stack_end: 0x0,\n },\n 'vector-ataricolor': { //TODO\n arch: '6502',\n define: ['__VECTOR__'],\n cfgfile: 'vector-color.cfg',\n libargs: ['crt0.o', 'none.lib'],\n extra_link_files: ['crt0.o', 'vector-color.cfg'],\n },\n 'sound_williams-z80': {\n arch: 'z80',\n code_start: 0x0,\n rom_size: 0x4000,\n data_start: 0x4000,\n data_size: 0x400,\n stack_end: 0x8000,\n },\n 'base_z80': {\n arch: 'z80',\n code_start: 0x0,\n rom_size: 0x8000,\n data_start: 0x8000,\n data_size: 0x8000,\n stack_end: 0x0,\n },\n 'coleco': {\n arch: 'z80',\n rom_start: 0x8000,\n code_start: 0x8100,\n rom_size: 0x8000,\n data_start: 0x7000,\n data_size: 0x400,\n stack_end: 0x8000,\n extra_preproc_args: ['-I', '/share/include/coleco', '-D', 'CV_CV'],\n extra_link_args: ['-k', '/share/lib/coleco', '-l', 'libcv', '-l', 'libcvu', 'crt0.rel'],\n },\n 'msx': {\n arch: 'z80',\n rom_start: 0x4000,\n code_start: 0x4000,\n rom_size: 0x8000,\n data_start: 0xc000,\n data_size: 0x3000,\n stack_end: 0xffff,\n extra_link_args: ['crt0-msx.rel'],\n extra_link_files: ['crt0-msx.rel', 'crt0-msx.lst'],\n wiz_sys_type: 'z80',\n wiz_inc_dir: 'msx',\n },\n 'msx-libcv': {\n arch: 'z80',\n rom_start: 0x4000,\n code_start: 0x4000,\n rom_size: 0x8000,\n data_start: 0xc000,\n data_size: 0x3000,\n stack_end: 0xffff,\n extra_preproc_args: ['-I', '.', '-D', 'CV_MSX'],\n extra_link_args: ['-k', '.', '-l', 'libcv-msx', '-l', 'libcvu-msx', 'crt0-msx.rel'],\n extra_link_files: ['libcv-msx.lib', 'libcvu-msx.lib', 'crt0-msx.rel', 'crt0-msx.lst'],\n extra_compile_files: ['cv.h','cv_graphics.h','cv_input.h','cv_sound.h','cv_support.h','cvu.h','cvu_c.h','cvu_compression.h','cvu_f.h','cvu_graphics.h','cvu_input.h','cvu_sound.h'],\n },\n 'sms-sg1000-libcv': {\n arch: 'z80',\n rom_start: 0x0000,\n code_start: 0x0100,\n rom_size: 0xc000,\n data_start: 0xc000,\n data_size: 0x400,\n stack_end: 0xe000,\n extra_preproc_args: ['-I', '.', '-D', 'CV_SMS'],\n extra_link_args: ['-k', '.', '-l', 'libcv-sms', '-l', 'libcvu-sms', 'crt0-sms.rel'],\n extra_link_files: ['libcv-sms.lib', 'libcvu-sms.lib', 'crt0-sms.rel', 'crt0-sms.lst'],\n extra_compile_files: ['cv.h','cv_graphics.h','cv_input.h','cv_sound.h','cv_support.h','cvu.h','cvu_c.h','cvu_compression.h','cvu_f.h','cvu_graphics.h','cvu_input.h','cvu_sound.h'],\n },\n 'nes': { //TODO\n arch: '6502',\n define: ['__NES__'],\n cfgfile: 'neslib2.cfg',\n libargs: ['crt0.o', 'nes.lib', 'neslib2.lib',\n '-D', 'NES_MAPPER=0', // NROM\n '-D', 'NES_PRG_BANKS=2', // 2 16K PRG banks\n '-D', 'NES_CHR_BANKS=1', // 1 CHR bank\n '-D', 'NES_MIRRORING=0', // horizontal mirroring\n ],\n extra_link_files: ['crt0.o', 'neslib2.lib', 'neslib2.cfg', 'nesbanked.cfg'],\n wiz_rom_ext: '.nes',\n },\n 'apple2': {\n arch: '6502',\n define: ['__APPLE2__'],\n cfgfile: 'apple2.cfg',\n libargs: [ '--lib-path', '/share/target/apple2/drv', '-D', '__EXEHDR__=0', 'apple2.lib'],\n __CODE_RUN__: 16384,\n code_start: 0x803,\n },\n 'apple2-e': {\n arch: '6502',\n define: ['__APPLE2__'],\n cfgfile: 'apple2.cfg',\n libargs: ['apple2.lib'],\n },\n 'atari8-800xl.disk': {\n arch: '6502',\n define: ['__ATARI__'],\n cfgfile: 'atari.cfg',\n libargs: ['atari.lib'],\n fastbasic_cfgfile: 'fastbasic-cart.cfg',\n },\n 'atari8-800xl': {\n arch: '6502',\n define: ['__ATARI__'],\n cfgfile: 'atari-cart.cfg',\n libargs: ['atari.lib', '-D', '__CARTFLAGS__=4'],\n fastbasic_cfgfile: 'fastbasic-cart.cfg',\n },\n 'atari8-800': {\n arch: '6502',\n define: ['__ATARI__'],\n cfgfile: 'atari-cart.cfg',\n libargs: ['atari.lib', '-D', '__CARTFLAGS__=4'],\n fastbasic_cfgfile: 'fastbasic-cart.cfg',\n },\n 'atari8-5200': {\n arch: '6502',\n define: ['__ATARI5200__'],\n cfgfile: 'atari5200.cfg',\n libargs: ['atari5200.lib', '-D', '__CARTFLAGS__=255'],\n fastbasic_cfgfile: 'fastbasic-cart.cfg',\n },\n 'verilog': {\n arch: 'verilog',\n extra_compile_files: ['8bitworkshop.v'],\n },\n 'astrocade': {\n arch: 'z80',\n code_start: 0x2000,\n rom_size: 0x2000,\n data_start: 0x4e10,\n data_size: 0x1f0,\n stack_end: 0x5000,\n },\n 'astrocade-arcade': {\n arch: 'z80',\n code_start: 0x0000,\n rom_size: 0x4000,\n data_start: 0x7de0,\n data_size: 0x220,\n stack_end: 0x8000,\n },\n 'astrocade-bios': {\n arch: 'z80',\n code_start: 0x0000,\n rom_size: 0x2000,\n data_start: 0x4fce,\n data_size: 50,\n stack_end: 0x4fce,\n },\n 'atari7800': {\n arch: '6502',\n define: ['__ATARI7800__'],\n cfgfile: 'atari7800.cfg',\n libargs: ['crt0.o', 'none.lib'],\n extra_link_files: ['crt0.o', 'atari7800.cfg'],\n },\n 'c64': {\n arch: '6502',\n define: ['__CBM__', '__C64__'],\n cfgfile: 'c64.cfg', // SYS 2061\n libargs: ['c64.lib'],\n //extra_link_files: ['c64-cart.cfg'],\n },\n 'vic20': {\n arch: '6502',\n define: ['__CBM__', '__VIC20__'],\n cfgfile: 'vic20.cfg',\n libargs: ['vic20.lib'],\n //extra_link_files: ['c64-cart.cfg'],\n },\n 'kim1': {\n arch: '6502',\n },\n 'vectrex': {\n arch: '6809',\n code_start: 0x0,\n rom_size: 0x8000,\n data_start: 0xc880,\n data_size: 0x380,\n stack_end: 0xcc00,\n extra_compile_files: ['assert.h','cmoc.h','stdarg.h','vectrex.h','stdlib.h','bios.h'],\n extra_link_files: ['vectrex.scr', 'libcmoc-crt-vec.a', 'libcmoc-std-vec.a'],\n extra_compile_args: ['--vectrex'],\n extra_link_args: ['-svectrex.scr', '-lcmoc-crt-vec', '-lcmoc-std-vec'],\n },\n 'x86': { \n arch: 'x86',\n },\n 'zx': {\n arch: 'z80',\n code_start: 0x5ccb,\n rom_size: 0xff58-0x5ccb,\n data_start: 0xf000,\n data_size: 0xfe00-0xf000,\n stack_end: 0xff58,\n extra_link_args: ['crt0-zx.rel'],\n extra_link_files: ['crt0-zx.rel', 'crt0-zx.lst'],\n },\n 'devel-6502': {\n arch: '6502',\n cfgfile: 'devel-6502.cfg',\n libargs: ['crt0.o', 'none.lib'],\n extra_link_files: ['crt0.o', 'devel-6502.cfg'],\n },\n // https://github.com/cpcitor/cpc-dev-tool-chain\n 'cpc.rslib': {\n arch: 'z80',\n code_start: 0x4000,\n rom_size: 0xb100-0x4000,\n data_start: 0xb100,\n data_size: 0xb100-0xc000,\n stack_end: 0xc000,\n extra_compile_files: ['cpcrslib.h'],\n extra_link_args: ['crt0-cpc.rel', 'cpcrslib.lib'],\n extra_link_files: ['crt0-cpc.rel', 'crt0-cpc.lst', 'cpcrslib.lib', 'cpcrslib.lst'],\n },\n // https://lronaldo.github.io/cpctelera/ (TODO)\n 'cpc': {\n arch: 'z80',\n code_start: 0x4000,\n rom_size: 0xb100-0x4000,\n data_start: 0xb100,\n data_size: 0xb100-0xc000,\n stack_end: 0xc000,\n extra_compile_files: ['cpctelera.h'],\n extra_link_args: ['crt0-cpc.rel', 'cpctelera.lib'],\n extra_link_files: ['crt0-cpc.rel', 'crt0-cpc.lst', 'cpctelera.lib', 'cpctelera.lst'],\n },\n 'pce': {\n arch: 'huc6280',\n define: ['__PCE__'],\n cfgfile: 'pce.cfg',\n libargs: ['pce.lib', '-D', '__CARTSIZE__=0x8000'],\n },\n};\n\nPLATFORM_PARAMS['sms-sms-libcv'] = PLATFORM_PARAMS['sms-sg1000-libcv'];\nPLATFORM_PARAMS['sms-gg-libcv'] = PLATFORM_PARAMS['sms-sms-libcv'];\n\nvar _t1;\nexport function starttime() { _t1 = new Date(); }\nexport function endtime(msg) { var _t2 = new Date(); console.log(msg, _t2.getTime() - _t1.getTime(), \"ms\"); }\n\n/// working file store and build steps\n\ntype FileData = string | Uint8Array;\n\ntype FileEntry = {\n path: string\n encoding: string\n data: FileData\n ts: number\n};\n\ntype BuildOptions = {\n mainFilePath : string,\n processFn?: (s:string, d:FileData) => FileData\n};\n\n// TODO\nexport type BuildStepResult = WorkerResult | WorkerNextToolResult;\n\nexport interface WorkerNextToolResult {\n nexttool?: string\n linktool?: string\n path?: string\n args: string[]\n files: string[]\n bblines?: boolean\n}\n\nexport interface BuildStep extends WorkerBuildStep {\n files? : string[]\n args? : string[]\n nextstep? : BuildStep\n linkstep? : BuildStep\n params?\n result? : BuildStepResult\n code?\n prefix?\n maxts?\n debuginfo?\n};\n\n///\n\nexport class FileWorkingStore implements WorkingStore {\n workfs : {[path:string]:FileEntry} = {};\n workerseq : number = 0;\n items : {};\n\n constructor() {\n this.reset();\n }\n reset() {\n this.workfs = {};\n this.newVersion();\n }\n currentVersion() {\n return this.workerseq;\n }\n newVersion() {\n let ts = new Date().getTime();\n if (ts <= this.workerseq)\n ts = ++this.workerseq;\n return ts;\n }\n putFile(path:string, data:FileData) : FileEntry {\n var encoding = (typeof data === 'string') ? 'utf8' : 'binary';\n var entry = this.workfs[path];\n if (!entry || !compareData(entry.data, data) || entry.encoding != encoding) {\n this.workfs[path] = entry = {path:path, data:data, encoding:encoding, ts:this.newVersion()};\n console.log('+++', entry.path, entry.encoding, entry.data.length, entry.ts);\n }\n return entry;\n }\n hasFile(path: string) {\n return this.workfs[path] != null;\n }\n getFileData(path:string) : FileData {\n return this.workfs[path] && this.workfs[path].data;\n } \n getFileAsString(path:string) : string {\n let data = this.getFileData(path);\n if (data != null && typeof data !== 'string')\n throw new Error(`${path}: expected string`)\n return data as string; // TODO\n }\n getFileEntry(path:string) : FileEntry {\n return this.workfs[path];\n }\n setItem(key: string, value: object) {\n this.items[key] = value;\n }\n}\n\nexport var store = new FileWorkingStore();\n\n///\n\nfunction errorResult(msg: string) : WorkerErrorResult {\n return { errors:[{ line:0, msg:msg }]};\n}\n\nclass Builder {\n steps : BuildStep[] = [];\n startseq : number = 0;\n\n // returns true if file changed during this build step\n wasChanged(entry:FileEntry) : boolean {\n return entry.ts > this.startseq;\n }\n async executeBuildSteps() : Promise<WorkerResult> {\n this.startseq = store.currentVersion();\n var linkstep : BuildStep = null;\n while (this.steps.length) {\n var step = this.steps.shift(); // get top of array\n var platform = step.platform;\n var [tool, remoteTool] = step.tool.split(':', 2);\n var toolfn = TOOLS[tool];\n if (!toolfn) {\n throw Error(`no tool named \"${tool}\"`);\n }\n if (remoteTool) {\n step.tool = remoteTool;\n }\n step.params = PLATFORM_PARAMS[getBasePlatform(platform)];\n try {\n step.result = await toolfn(step);\n } catch (e) {\n console.log(\"EXCEPTION\", e, e.stack);\n return errorResult(e+\"\"); // TODO: catch errors already generated?\n }\n if (step.result) {\n (step.result as any).params = step.params; // TODO: type check\n if (step.debuginfo) {\n let r = step.result as any; // TODO\n if (!r.debuginfo) r.debuginfo = {};\n Object.assign(r.debuginfo, step.debuginfo);\n }\n // errors? return them\n if ('errors' in step.result && step.result.errors.length) {\n applyDefaultErrorPath(step.result.errors, step.path);\n return step.result;\n }\n // if we got some output, return it immediately\n if ('output' in step.result && step.result.output) {\n return step.result;\n }\n // combine files with a link tool?\n if ('linktool' in step.result) {\n // add to existing link step\n if (linkstep) {\n linkstep.files = linkstep.files.concat(step.result.files);\n linkstep.args = linkstep.args.concat(step.result.args);\n } else {\n linkstep = {\n tool:step.result.linktool,\n platform:platform,\n files:step.result.files,\n args:step.result.args\n };\n }\n linkstep.debuginfo = step.debuginfo; // TODO: multiple debuginfos\n }\n // process with another tool?\n if ('nexttool' in step.result) {\n var asmstep : BuildStep = {\n tool: step.result.nexttool,\n platform: platform,\n ...step.result\n }\n this.steps.push(asmstep);\n }\n // process final step?\n if (this.steps.length == 0 && linkstep) {\n this.steps.push(linkstep);\n linkstep = null;\n }\n }\n }\n }\n async handleMessage(data: WorkerMessage) : Promise<WorkerResult> {\n this.steps = [];\n // file updates\n if (data.updates) {\n data.updates.forEach((u) => store.putFile(u.path, u.data));\n }\n // object update\n if (data.setitems) {\n data.setitems.forEach((i) => store.setItem(i.key, i.value));\n }\n // build steps\n if (data.buildsteps) {\n this.steps.push.apply(this.steps, data.buildsteps);\n }\n // single-file\n if (data.code) {\n this.steps.push(data as BuildStep); // TODO: remove cast\n }\n // execute build steps\n if (this.steps.length) {\n var result = await this.executeBuildSteps();\n return result ? result : {unchanged:true};\n }\n // TODO: cache results\n // message not recognized\n console.log(\"Unknown message\",data);\n }\n}\n\nvar builder = new Builder();\n\n///\n\nfunction applyDefaultErrorPath(errors:WorkerError[], path:string) {\n if (!path) return;\n for (var i=0; i<errors.length; i++) {\n var err = errors[i];\n if (!err.path && err.line) err.path = path;\n }\n}\n\nfunction compareData(a:FileData, b:FileData) : boolean {\n if (a.length != b.length) return false;\n if (typeof a === 'string' && typeof b === 'string') {\n return a == b;\n } else {\n for (var i=0; i<a.length; i++) {\n //if (a[i] != b[i]) console.log('differ at byte',i,a[i],b[i]);\n if (a[i] != b[i]) return false;\n }\n return true;\n }\n}\n\nexport function putWorkFile(path:string, data:FileData) {\n return store.putFile(path, data);\n}\n\nexport function getWorkFileAsString(path:string) : string {\n return store.getFileAsString(path);\n}\n\nexport function populateEntry(fs, path:string, entry:FileEntry, options:BuildOptions) {\n var data = entry.data;\n if (options && options.processFn) {\n data = options.processFn(path, data);\n }\n // create subfolders\n var toks = path.split('/');\n if (toks.length > 1) {\n for (var i=0; i<toks.length-1; i++)\n try {\n fs.mkdir(toks[i]);\n } catch (e) { }\n }\n // write file\n fs.writeFile(path, data, {encoding:entry.encoding});\n var time = new Date(entry.ts);\n fs.utime(path, time, time);\n console.log(\"<<<\", path, entry.data.length);\n}\n\n// can call multiple times (from populateFiles)\nexport function gatherFiles(step:BuildStep, options?:BuildOptions) : number {\n var maxts = 0;\n if (step.files) {\n for (var i=0; i<step.files.length; i++) {\n var path = step.files[i];\n var entry = store.workfs[path];\n if (!entry) {\n throw new Error(\"No entry for path '\" + path + \"'\");\n } else {\n maxts = Math.max(maxts, entry.ts);\n }\n }\n }\n else if (step.code) {\n var path = step.path ? step.path : options.mainFilePath; // TODO: what if options null\n if (!path) throw Error(\"need path or mainFilePath\");\n var code = step.code;\n var entry = putWorkFile(path, code);\n step.path = path;\n step.files = [path];\n maxts = entry.ts;\n }\n else if (step.path) {\n var path = step.path;\n var entry = store.workfs[path];\n maxts = entry.ts;\n step.files = [path];\n }\n if (step.path && !step.prefix) {\n step.prefix = getPrefix(step.path);\n }\n step.maxts = maxts;\n return maxts;\n}\n\nexport function getPrefix(s : string) : string {\n var pos = s.lastIndexOf('.');\n return (pos > 0) ? s.substring(0, pos) : s;\n}\n\nexport function populateFiles(step:BuildStep, fs, options?:BuildOptions) {\n gatherFiles(step, options);\n if (!step.files) throw Error(\"call gatherFiles() first\");\n for (var i=0; i<step.files.length; i++) {\n var path = step.files[i];\n populateEntry(fs, path, store.workfs[path], options);\n }\n}\n\nexport function populateExtraFiles(step:BuildStep, fs, extrafiles) {\n if (extrafiles) {\n for (var i=0; i<extrafiles.length; i++) {\n var xfn = extrafiles[i];\n // is this file cached?\n if (store.workfs[xfn]) {\n fs.writeFile(xfn, store.workfs[xfn].data, {encoding:'binary'});\n continue;\n }\n // fetch from network\n var xpath = \"lib/\" + getBasePlatform(step.platform) + \"/\" + xfn;\n var xhr = new XMLHttpRequest();\n xhr.responseType = 'arraybuffer';\n xhr.open(\"GET\", PWORKER+xpath, false); // synchronous request\n xhr.send(null);\n if (xhr.response && xhr.status == 200) {\n var data = new Uint8Array(xhr.response);\n fs.writeFile(xfn, data, {encoding:'binary'});\n putWorkFile(xfn, data);\n console.log(\":::\",xfn,data.length);\n } else {\n throw Error(\"Could not load extra file \" + xpath);\n }\n }\n }\n}\n\nexport function staleFiles(step:BuildStep, targets:string[]) {\n if (!step.maxts) throw Error(\"call populateFiles() first\");\n // see if any target files are more recent than inputs\n for (var i=0; i<targets.length; i++) {\n var entry = store.workfs[targets[i]];\n if (!entry || step.maxts > entry.ts)\n return true;\n }\n console.log(\"unchanged\", step.maxts, targets);\n return false;\n}\n\nexport function anyTargetChanged(step:BuildStep, targets:string[]) {\n if (!step.maxts) throw Error(\"call populateFiles() first\");\n // see if any target files are more recent than inputs\n for (var i=0; i<targets.length; i++) {\n var entry = store.workfs[targets[i]];\n if (!entry || entry.ts > step.maxts)\n return true;\n }\n console.log(\"unchanged\", step.maxts, targets);\n return false;\n}\n\nexport function execMain(step:BuildStep, mod, args:string[]) {\n starttime();\n var run = mod.callMain || mod.run; // TODO: run?\n run(args);\n endtime(step.tool);\n}\n\n/// asm.js / WASM / filesystem loading\n\nvar fsMeta = {};\nvar fsBlob = {};\nvar wasmBlob = {};\n\nconst PSRC = \"../../src/\";\nconst PWORKER = PSRC+\"worker/\";\n\n// load filesystems for CC65 and others asynchronously\nfunction loadFilesystem(name:string) {\n var xhr = new XMLHttpRequest();\n xhr.responseType = 'blob';\n xhr.open(\"GET\", PWORKER+\"fs/fs\"+name+\".data\", false); // synchronous request\n xhr.send(null);\n fsBlob[name] = xhr.response;\n xhr = new XMLHttpRequest();\n xhr.responseType = 'json';\n xhr.open(\"GET\", PWORKER+\"fs/fs\"+name+\".js.metadata\", false); // synchronous request\n xhr.send(null);\n fsMeta[name] = xhr.response;\n console.log(\"Loaded \"+name+\" filesystem\", fsMeta[name].files.length, 'files', fsBlob[name].size, 'bytes');\n}\n\nvar loaded = {};\nexport function load(modulename:string, debug?:boolean) {\n if (!loaded[modulename]) {\n importScripts(PWORKER+'asmjs/'+modulename+(debug?\".\"+debug+\".js\":\".js\"));\n loaded[modulename] = 1;\n }\n}\nexport function loadWASM(modulename:string, debug?:boolean) {\n if (!loaded[modulename]) {\n importScripts(PWORKER+\"wasm/\" + modulename+(debug?\".\"+debug+\".js\":\".js\"));\n var xhr = new XMLHttpRequest();\n xhr.responseType = 'arraybuffer';\n xhr.open(\"GET\", PWORKER+\"wasm/\"+modulename+\".wasm\", false); // synchronous request\n xhr.send(null);\n if (xhr.response) {\n wasmBlob[modulename] = new Uint8Array(xhr.response);\n console.log(\"Loaded \" + modulename + \".wasm (\" + wasmBlob[modulename].length + \" bytes)\");\n loaded[modulename] = 1;\n } else {\n throw Error(\"Could not load WASM file \" + modulename + \".wasm\");\n }\n }\n}\nexport function loadNative(modulename:string) {\n // detect WASM\n if (CACHE_WASM_MODULES && typeof WebAssembly === 'object') {\n loadWASM(modulename);\n } else {\n load(modulename);\n }\n}\n\n// mount the filesystem at /share\nexport function setupFS(FS, name:string) {\n var WORKERFS = FS.filesystems['WORKERFS'];\n if (name === '65-vector') name = '65-none'; // TODO\n if (name === '65-atari7800') name = '65-none'; // TODO\n if (name === '65-devel') name = '65-none'; // TODO\n if (name === '65-vcs') name = '65-atari2600'; // TODO\n if (!fsMeta[name]) throw Error(\"No filesystem for '\" + name + \"'\");\n FS.mkdir('/share');\n FS.mount(WORKERFS, {\n packages: [{ metadata: fsMeta[name], blob: fsBlob[name] }]\n }, '/share');\n // fix for slow Blob operations by caching typed arrays\n // https://github.com/kripken/emscripten/blob/incoming/src/library_workerfs.js\n // https://bugs.chromium.org/p/chromium/issues/detail?id=349304#c30\n var reader = WORKERFS.reader;\n var blobcache = {};\n WORKERFS.stream_ops.read = function (stream, buffer, offset, length, position) {\n if (position >= stream.node.size) return 0;\n var contents = blobcache[stream.path];\n if (!contents) {\n var ab = reader.readAsArrayBuffer(stream.node.contents);\n contents = blobcache[stream.path] = new Uint8Array(ab);\n }\n if (position + length > contents.length)\n length = contents.length - position;\n for (var i=0; i<length; i++) {\n buffer[offset+i] = contents[position+i];\n }\n return length;\n };\n}\n\nexport var print_fn = function(s:string) {\n console.log(s);\n //console.log(new Error().stack);\n}\n\n// test.c(6) : warning 85: in function main unreferenced local variable : 'x'\n// main.a (4): error: Unknown Mnemonic 'xxx'.\n// at 2: warning 190: ISO C forbids an empty source file\nexport const re_msvc = /[/]*([^( ]+)\\s*[(](\\d+)[)]\\s*:\\s*(.+?):\\s*(.*)/;\nexport const re_msvc2 = /\\s*(at)\\s+(\\d+)\\s*(:)\\s*(.*)/;\n\nexport function msvcErrorMatcher(errors:WorkerError[]) {\n return function(s:string) {\n var matches = re_msvc.exec(s) || re_msvc2.exec(s);\n if (matches) {\n var errline = parseInt(matches[2]);\n errors.push({\n line:errline,\n path:matches[1],\n //type:matches[3],\n msg:matches[4]\n });\n } else {\n console.log(s);\n }\n }\n}\n\nexport function makeErrorMatcher(errors:WorkerError[], regex, iline:number, imsg:number, mainpath:string, ifilename?:number) {\n return function(s) {\n var matches = regex.exec(s);\n if (matches) {\n errors.push({\n line:parseInt(matches[iline]) || 1,\n msg:matches[imsg],\n path:ifilename ? matches[ifilename] : mainpath\n });\n } else {\n console.log(\"??? \"+s);\n }\n }\n}\n\nexport function extractErrors(regex, strings:string[], path:string, iline, imsg, ifilename) {\n var errors = [];\n var matcher = makeErrorMatcher(errors, regex, iline, imsg, path, ifilename);\n for (var i=0; i<strings.length; i++) {\n matcher(strings[i]);\n }\n return errors;\n}\n\nexport const re_crlf = /\\r?\\n/;\n// 1 %line 16+1 hello.asm\nexport const re_lineoffset = /\\s*(\\d+)\\s+[%]line\\s+(\\d+)\\+(\\d+)\\s+(.+)/;\n\nexport function parseListing(code:string,\n lineMatch, iline:number, ioffset:number, iinsns:number, icycles?:number,\n funcMatch?, segMatch?) : SourceLine[] {\n var lines : SourceLine[] = [];\n var lineofs = 0;\n var segment = '';\n var func = '';\n var funcbase = 0;\n code.split(re_crlf).forEach((line, lineindex) => {\n let segm = segMatch && segMatch.exec(line);\n if (segm) { segment = segm[1]; }\n let funcm = funcMatch && funcMatch.exec(line);\n if (funcm) { funcbase = parseInt(funcm[1],16); func = funcm[2]; }\n\n var linem = lineMatch.exec(line);\n if (linem && linem[1]) {\n var linenum = iline < 0 ? lineindex : parseInt(linem[iline]);\n var offset = parseInt(linem[ioffset], 16);\n var insns = linem[iinsns];\n var cycles : number = icycles ? parseInt(linem[icycles]) : null;\n var iscode = cycles > 0;\n if (insns) {\n lines.push({\n line: linenum + lineofs,\n offset: offset - funcbase,\n insns,\n cycles,\n iscode,\n segment,\n func\n });\n }\n } else {\n let m = re_lineoffset.exec(line);\n // TODO: check filename too\n if (m) {\n lineofs = parseInt(m[2]) - parseInt(m[1]) - parseInt(m[3]);\n }\n }\n });\n return lines;\n}\n\nexport function parseSourceLines(code:string, lineMatch, offsetMatch, funcMatch?, segMatch?) {\n var lines = [];\n var lastlinenum = 0;\n var segment = '';\n var func = '';\n var funcbase = 0;\n for (var line of code.split(re_crlf)) {\n let segm = segMatch && segMatch.exec(line);\n if (segm) { segment = segm[1]; }\n let funcm = funcMatch && funcMatch.exec(line);\n if (funcm) { funcbase = parseInt(funcm[1],16); func = funcm[2]; }\n \n var linem = lineMatch.exec(line);\n if (linem && linem[1]) {\n lastlinenum = parseInt(linem[1]);\n } else if (lastlinenum) {\n var linem = offsetMatch.exec(line);\n if (linem && linem[1]) {\n var offset = parseInt(linem[1], 16);\n lines.push({\n line: lastlinenum,\n offset: offset - funcbase,\n segment,\n func\n });\n lastlinenum = 0;\n }\n }\n }\n return lines;\n}\n\nexport function setupStdin(fs, code:string) {\n var i = 0;\n fs.init(\n function() { return i<code.length ? code.charCodeAt(i++) : null; }\n );\n}\n\nexport function fixParamsWithDefines(path:string, params){\n var libargs = params.libargs;\n if (path && libargs) {\n var code = getWorkFileAsString(path);\n if (code) {\n var oldcfgfile = params.cfgfile;\n var ident2index = {};\n // find all lib args \"IDENT=VALUE\"\n for (var i=0; i<libargs.length; i++) {\n var toks = libargs[i].split('=');\n if (toks.length == 2) {\n ident2index[toks[0]] = i;\n }\n }\n // find #defines and replace them\n var re = /^[;]?#define\\s+(\\w+)\\s+(\\S+)/gmi; // TODO: empty string?\n var m;\n while (m = re.exec(code)) {\n var ident = m[1];\n var value = m[2];\n var index = ident2index[ident];\n if (index >= 0) {\n libargs[index] = ident + \"=\" + value;\n console.log('Using libargs', index, libargs[index]);\n // TODO: MMC3 mapper switch\n if (ident == 'NES_MAPPER' && value == '4') {\n params.cfgfile = 'nesbanked.cfg';\n console.log(\"using config file\", params.cfgfile);\n }\n } else if (ident == 'CFGFILE' && value) {\n params.cfgfile = value;\n } else if (ident == 'LIBARGS' && value) {\n params.libargs = value.split(',').filter((s) => { return s!=''; });\n console.log('Using libargs', params.libargs);\n } else if (ident == 'CC65_FLAGS' && value) {\n params.extra_compiler_args = value.split(',').filter((s) => { return s!=''; });\n console.log('Using compiler flags', params.extra_compiler_args);\n }\n }\n }\n }\n}\n\n\nfunction makeCPPSafe(s:string) : string {\n return s.replace(/[^A-Za-z0-9_]/g,'_');\n}\n\nexport function preprocessMCPP(step:BuildStep, filesys:string) {\n load(\"mcpp\");\n var platform = step.platform;\n var params = PLATFORM_PARAMS[getBasePlatform(platform)];\n if (!params) throw Error(\"Platform not supported: \" + platform);\n // <stdin>:2: error: Can't open include file \"foo.h\"\n var errors = [];\n var match_fn = makeErrorMatcher(errors, /<stdin>:(\\d+): (.+)/, 1, 2, step.path);\n var MCPP : EmscriptenModule = emglobal.mcpp({\n noInitialRun:true,\n noFSInit:true,\n print:print_fn,\n printErr:match_fn,\n });\n var FS = MCPP.FS;\n if (filesys) setupFS(FS, filesys);\n populateFiles(step, FS);\n populateExtraFiles(step, FS, params.extra_compile_files);\n // TODO: make configurable by other compilers\n var args = [\n \"-D\", \"__8BITWORKSHOP__\",\n \"-D\", \"__SDCC_z80\",\n \"-D\", makeCPPSafe(platform.toUpperCase()),\n \"-I\", \"/share/include\",\n \"-Q\",\n step.path, \"main.i\"];\n if (step.mainfile) {\n args.unshift.apply(args, [\"-D\", \"__MAIN__\"]);\n }\n let platform_def = (platform.toUpperCase() as any).replaceAll(/[^a-zA-Z0-9]/g,'_');\n args.unshift.apply(args, [\"-D\", `__PLATFORM_${platform_def}__`]);\n if (params.extra_preproc_args) {\n args.push.apply(args, params.extra_preproc_args);\n }\n execMain(step, MCPP, args);\n if (errors.length)\n return {errors:errors};\n var iout = FS.readFile(\"main.i\", {encoding:'utf8'});\n iout = iout.replace(/^#line /gm,'\\n# ');\n try {\n var errout = FS.readFile(\"mcpp.err\", {encoding:'utf8'});\n if (errout.length) {\n // //main.c:2: error: Can't open include file \"stdiosd.h\"\n var errors = extractErrors(/([^:]+):(\\d+): (.+)/, errout.split(\"\\n\"), step.path, 2, 3, 1);\n if (errors.length == 0) {\n errors = errorResult(errout).errors;\n }\n return {errors: errors};\n }\n } catch (e) {\n //\n }\n return {code:iout};\n}\n\nexport function setupRequireFunction() {\n var exports = {};\n exports['jsdom'] = {\n JSDOM: function(a,b) {\n this.window = {};\n }\n };\n emglobal['require'] = (modname:string) => {\n console.log('require',modname,exports[modname]!=null);\n return exports[modname];\n }\n}\n\n////////////////////////////\n\nimport * as misc from './tools/misc'\nimport * as cc65 from './tools/cc65'\nimport * as dasm from './tools/dasm'\nimport * as sdcc from './tools/sdcc'\nimport * as verilog from './tools/verilog'\nimport * as m6809 from './tools/m6809'\nimport * as m6502 from './tools/m6502'\nimport * as z80 from './tools/z80'\nimport * as x86 from './tools/x86'\nimport * as arm from './tools/arm'\nimport * as ecs from './tools/ecs'\nimport * as remote from './tools/remote'\n\nvar TOOLS = {\n 'dasm': dasm.assembleDASM,\n //'acme': assembleACME,\n 'cc65': cc65.compileCC65,\n 'ca65': cc65.assembleCA65,\n 'ld65': cc65.linkLD65,\n //'z80asm': assembleZ80ASM,\n //'sccz80': compileSCCZ80,\n 'sdasz80': sdcc.assembleSDASZ80,\n 'sdldz80': sdcc.linkSDLDZ80,\n 'sdcc': sdcc.compileSDCC,\n 'xasm6809': m6809.assembleXASM6809,\n 'cmoc': m6809.compileCMOC,\n 'lwasm': m6809.assembleLWASM,\n 'lwlink': m6809.linkLWLINK,\n //'naken': assembleNAKEN,\n 'verilator': verilog.compileVerilator,\n 'yosys': verilog.compileYosys,\n 'jsasm': verilog.compileJSASMStep,\n 'zmac': z80.assembleZMAC,\n 'nesasm': m6502.assembleNESASM,\n 'smlrc': x86.compileSmallerC,\n 'yasm': x86.assembleYASM,\n 'bataribasic': dasm.compileBatariBasic,\n 'markdown': misc.translateShowdown,\n 'inform6': misc.compileInform6,\n 'merlin32': m6502.assembleMerlin32,\n 'fastbasic': m6502.compileFastBasic,\n 'basic': misc.compileBASIC,\n 'silice': verilog.compileSilice,\n 'wiz': misc.compileWiz,\n 'armips': arm.assembleARMIPS,\n 'vasmarm': arm.assembleVASMARM,\n 'ecs': ecs.assembleECS,\n 'remote': remote.buildRemote\n}\n\nvar TOOL_PRELOADFS = {\n 'cc65-apple2': '65-apple2',\n 'ca65-apple2': '65-apple2',\n 'cc65-c64': '65-c64',\n 'ca65-c64': '65-c64',\n 'cc65-vic20': '65-vic20',\n 'ca65-vic20': '65-vic20',\n 'cc65-nes': '65-nes',\n 'ca65-nes': '65-nes',\n 'cc65-atari8': '65-atari8',\n 'ca65-atari8': '65-atari8',\n 'cc65-vector': '65-none',\n 'ca65-vector': '65-none',\n 'cc65-atari7800': '65-none',\n 'ca65-atari7800': '65-none',\n 'cc65-devel': '65-none',\n 'ca65-devel': '65-none',\n 'cc65-vcs': '65-atari2600',\n 'ca65-vcs': '65-atari2600',\n 'cc65-pce': '65-pce',\n 'ca65-pce': '65-pce',\n 'sdasz80': 'sdcc',\n 'sdcc': 'sdcc',\n 'sccz80': 'sccz80',\n 'bataribasic': '2600basic',\n 'inform6': 'inform',\n 'fastbasic': '65-atari8',\n 'silice': 'Silice',\n 'wiz': 'wiz',\n 'ecs-vcs': '65-atari2600', // TODO: support multiple platforms\n 'ecs-nes': '65-nes', // TODO: support multiple platforms\n 'ecs-c64': '65-c64', // TODO: support multiple platforms\n}\n\n//const waitFor = delay => new Promise(resolve => setTimeout(resolve, delay)); // for testing\n\nasync function handleMessage(data : WorkerMessage) : Promise<WorkerResult> {\n // preload file system\n if (data.preload) {\n var fs = TOOL_PRELOADFS[data.preload];\n if (!fs && data.platform)\n fs = TOOL_PRELOADFS[data.preload+'-'+getBasePlatform(data.platform)];\n if (!fs && data.platform)\n fs = TOOL_PRELOADFS[data.preload+'-'+getRootBasePlatform(data.platform)];\n if (fs && !fsMeta[fs])\n loadFilesystem(fs);\n return;\n }\n // clear filesystem? (TODO: buildkey)\n if (data.reset) {\n store.reset();\n return;\n }\n return builder.handleMessage(data);\n}\n\nif (ENVIRONMENT_IS_WORKER) {\n var lastpromise = null;\n onmessage = async function(e) {\n await lastpromise; // wait for previous message to complete\n lastpromise = handleMessage(e.data);\n var result = await lastpromise;\n lastpromise = null;\n if (result) {\n try {\n postMessage(result);\n } catch (e) {\n console.log(e);\n postMessage(errorResult(`${e}`));\n }\n }\n }\n}\n", "import path from 'path';\nimport { CodeListing, CodeListingMap } from \"../../common/workertypes\";\n\nexport function parseObjDumpSymbolTable(symbolTable) {\n const lines = symbolTable.split('\\n');\n const result = {};\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i].trim();\n if (line.startsWith('00')) {\n const parts = line.split(/\\s+/);\n if (parts.length < 5) continue;\n const symbol = parts[parts.length-1];\n const address = parseInt(parts[0], 16);\n result[symbol] = address;\n }\n }\n return result;\n}\n\nexport function parseObjDumpListing(lst: string): CodeListingMap {\n const lines = lst.split('\\n');\n const result: CodeListingMap = {};\n var lastListing : CodeListing = null;\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i].trim();\n if (line.startsWith(';')) {\n const fileInfoIndex = line.indexOf(':');\n if (fileInfoIndex !== -1) {\n const fileInfo = line.substring(1).trim();\n const fileParts = fileInfo.split(':');\n const file = path.basename(fileParts[0].trim()).split('.')[0] + '.lst';\n const lineNumber = parseInt(fileParts[1], 10);\n if (lineNumber > 0) {\n if (!result[file]) result[file] = { lines: [], text: lst };\n lastListing = result[file];\n lastListing.lines.push({ line: lineNumber, offset: null });\n }\n }\n } else if (lastListing && line.match(/^\\s*[A-F0-9]+:.+/i)) {\n const offsetIndex = line.indexOf(':');\n if (offsetIndex !== -1) {\n const offset = parseInt(line.substring(0, offsetIndex).trim(), 16);\n lastListing.lines[lastListing.lines.length - 1].offset = offset;\n }\n }\n }\n return result;\n}"],
"mappings": "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AM,QAAQ;AACd,cAAI;AAAA;AAEJ,cAAI;AAAA;AAEZ,aAAO;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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",
"names": []
}