8bitworkshop/gen/server/server.js.map

8 lines
1.1 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/has-proto/index.js", "../../node_modules/function-bind/implementation.js", "../../node_modules/function-bind/index.js", "../../node_modules/hasown/index.js", "../../node_modules/get-intrinsic/index.js", "../../node_modules/has-property-descriptors/index.js", "../../node_modules/gopd/index.js", "../../node_modules/define-data-property/index.js", "../../node_modules/set-function-length/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/worker/server/clang.ts", "../../src/worker/listingutils.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\nvar test = {\n\tfoo: {}\n};\n\nvar $Object = Object;\n\nmodule.exports = function hasProto() {\n\treturn { __proto__: test }.foo === test.foo && !({ __proto__: null } instanceof $Object);\n};\n", "'use strict';\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar toStr = Object.prototype.toString;\nvar max = Math.max;\nvar funcType = '[object Function]';\n\nvar concatty = function concatty(a, b) {\n var arr = [];\n\n for (var i = 0; i < a.length; i += 1) {\n arr[i] = a[i];\n }\n for (var j = 0; j < b.length; j += 1) {\n arr[j + a.length] = b[j];\n }\n\n return arr;\n};\n\nvar slicy = function slicy(arrLike, offset) {\n var arr = [];\n for (var i = offset || 0, j = 0; i < arrLike.length; i += 1, j += 1) {\n arr[j] = arrLike[i];\n }\n return arr;\n};\n\nvar joiny = function (arr, joiner) {\n var str = '';\n for (var i = 0; i < arr.length; i += 1) {\n str += arr[i];\n if (i + 1 < arr.length) {\n str += joiner;\n }\n }\n return str;\n};\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.apply(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slicy(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n concatty(args, arguments)\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n }\n return target.apply(\n that,\n concatty(args, arguments)\n );\n\n };\n\n var boundLength = max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs[i] = '$' + i;\n }\n\n bound = Function('binder', 'return function (' + joiny(boundArgs, ',') + '){ 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 call = Function.prototype.call;\nvar $hasOwn = Object.prototype.hasOwnProperty;\nvar bind = require('function-bind');\n\n/** @type {(o: {}, p: PropertyKey) => p is keyof o} */\nmodule.exports = bind.call(call, $hasOwn);\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')();\nvar hasProto = require('has-proto')();\n\nvar getProto = Object.getPrototypeOf || (\n\thasProto\n\t\t? function (x) { return x.__proto__; } // eslint-disable-line no-proto\n\t\t: null\n);\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' || !getProto ? 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 ? 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(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 || !getProto ? 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 || !getProto ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols && getProto ? 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\nif (getProto) {\n\ttry {\n\t\tnull.error; // eslint-disable-line no-unused-expressions\n\t} catch (e) {\n\t\t// https://github.com/tc39/proposal-shadowrealm/pull/384#issuecomment-1364264229\n\t\tvar errorProto = getProto(getProto(e));\n\t\tINTRINSICS['%Error.prototype%'] = errorProto;\n\t}\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 && getProto) {\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('hasown');\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 GetIntrinsic = require('get-intrinsic');\n\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nvar hasPropertyDescriptors = function hasPropertyDescriptors() {\n\tif ($defineProperty) {\n\t\ttry {\n\t\t\t$defineProperty({}, 'a', { value: 1 });\n\t\t\treturn true;\n\t\t} catch (e) {\n\t\t\t// IE 8 has a broken defineProperty\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn false;\n};\n\nhasPropertyDescriptors.hasArrayLengthDefineBug = function hasArrayLengthDefineBug() {\n\t// node v0.6 has a bug where array lengths can be Set but not Defined\n\tif (!hasPropertyDescriptors()) {\n\t\treturn null;\n\t}\n\ttry {\n\t\treturn $defineProperty([], 'length', { value: 1 }).length !== 1;\n\t} catch (e) {\n\t\t// In Firefox 4-22, defining length on an array throws an exception.\n\t\treturn true;\n\t}\n};\n\nmodule.exports = hasPropertyDescriptors;\n", "'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\n\nif ($gOPD) {\n\ttry {\n\t\t$gOPD([], 'length');\n\t} catch (e) {\n\t\t// IE 8 has a broken gOPD\n\t\t$gOPD = null;\n\t}\n}\n\nmodule.exports = $gOPD;\n", "'use strict';\n\nvar hasPropertyDescriptors = require('has-property-descriptors')();\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $defineProperty = hasPropertyDescriptors && GetIntrinsic('%Object.defineProperty%', true);\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 = false;\n\t}\n}\n\nvar $SyntaxError = GetIntrinsic('%SyntaxError%');\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar gopd = require('gopd');\n\n/** @type {(obj: Record<PropertyKey, unknown>, property: PropertyKey, value: unknown, nonEnumerable?: boolean | null, nonWritable?: boolean | null, nonConfigurable?: boolean | null, loose?: boolean) => void} */\nmodule.exports = function defineDataProperty(\n\tobj,\n\tproperty,\n\tvalue\n) {\n\tif (!obj || (typeof obj !== 'object' && typeof obj !== 'function')) {\n\t\tthrow new $TypeError('`obj` must be an object or a function`');\n\t}\n\tif (typeof property !== 'string' && typeof property !== 'symbol') {\n\t\tthrow new $TypeError('`property` must be a string or a symbol`');\n\t}\n\tif (arguments.length > 3 && typeof arguments[3] !== 'boolean' && arguments[3] !== null) {\n\t\tthrow new $TypeError('`nonEnumerable`, if provided, must be a boolean or null');\n\t}\n\tif (arguments.length > 4 && typeof arguments[4] !== 'boolean' && arguments[4] !== null) {\n\t\tthrow new $TypeError('`nonWritable`, if provided, must be a boolean or null');\n\t}\n\tif (arguments.length > 5 && typeof arguments[5] !== 'boolean' && arguments[5] !== null) {\n\t\tthrow new $TypeError('`nonConfigurable`, if provided, must be a boolean or null');\n\t}\n\tif (arguments.length > 6 && typeof arguments[6] !== 'boolean') {\n\t\tthrow new $TypeError('`loose`, if provided, must be a boolean');\n\t}\n\n\tvar nonEnumerable = arguments.length > 3 ? arguments[3] : null;\n\tvar nonWritable = arguments.length > 4 ? arguments[4] : null;\n\tvar nonConfigurable = arguments.length > 5 ? arguments[5] : null;\n\tvar loose = arguments.length > 6 ? arguments[6] : false;\n\n\t/* @type {false | TypedPropertyDescriptor<unknown>} */\n\tvar desc = !!gopd && gopd(obj, property);\n\n\tif ($defineProperty) {\n\t\t$defineProperty(obj, property, {\n\t\t\tconfigurable: nonConfigurable === null && desc ? desc.configurable : !nonConfigurable,\n\t\t\tenumerable: nonEnumerable === null && desc ? desc.enumerable : !nonEnumerable,\n\t\t\tvalue: value,\n\t\t\twritable: nonWritable === null && desc ? desc.writable : !nonWritable\n\t\t});\n\t} else if (loose || (!nonEnumerable && !nonWritable && !nonConfigurable)) {\n\t\t// must fall back to [[Set]], and was not explicitly asked to make non-enumerable, non-writable, or non-configurable\n\t\tobj[property] = value; // eslint-disable-line no-param-reassign\n\t} else {\n\t\tthrow new $SyntaxError('This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.');\n\t}\n};\n", "'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\nvar define = require('define-data-property');\nvar hasDescriptors = require('has-property-descriptors')();\nvar gOPD = require('gopd');\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $floor = GetIntrinsic('%Math.floor%');\n\nmodule.exports = function setFunctionLength(fn, length) {\n\tif (typeof fn !== 'function') {\n\t\tthrow new $TypeError('`fn` is not a function');\n\t}\n\tif (typeof length !== 'number' || length < 0 || length > 0xFFFFFFFF || $floor(length) !== length) {\n\t\tthrow new $TypeError('`length` must be a positive 32-bit integer');\n\t}\n\n\tvar loose = arguments.length > 2 && !!arguments[2];\n\n\tvar functionLengthIsConfigurable = true;\n\tvar functionLengthIsWritable = true;\n\tif ('length' in fn && gOPD) {\n\t\tvar desc = gOPD(fn, 'length');\n\t\tif (desc && !desc.configurable) {\n\t\t\tfunctionLengthIsConfigurable = false;\n\t\t}\n\t\tif (desc && !desc.writable) {\n\t\t\tfunctionLengthIsWritable = false;\n\t\t}\n\t}\n\n\tif (functionLengthIsConfigurable || functionLengthIsWritable || !loose) {\n\t\tif (hasDescriptors) {\n\t\t\tdefine(fn, 'length', length, true, true);\n\t\t} else {\n\t\t\tdefine(fn, 'length', length);\n\t\t}\n\t}\n\treturn fn;\n};\n", "'use strict';\n\nvar bind = require('function-bind');\nvar GetIntrinsic = require('get-intrinsic');\nvar setFunctionLength = require('set-function-length');\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\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\tif (typeof originalFunction !== 'function') {\n\t\tthrow new $TypeError('a function is required');\n\t}\n\tvar func = $reflectApply(bind, $call, arguments);\n\treturn setFunctionLength(\n\t\tfunc,\n\t\t1 + $max(0, originalFunction.length - (arguments.length - 1)),\n\t\ttrue\n\t);\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 { WorkerBuildStep, WorkerErrorResult, WorkerFileUpdate, WorkerResult, isOutputResult } from '../../common/workertypes';\nimport { getRootBasePlatform, replaceAll } from '../../common/util';\nimport { parseObjDump } from './clang';\nimport { BuildStep } from '../builder';\nimport { makeErrorMatcher } from '../listingutils';\n\n\nconst LLVM_MOS_TOOL: ServerBuildTool = {\n name: 'llvm-mos',\n version: '',\n extensions: ['.c', '.cpp', '.s', '.S', '.C'],\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', '-D', '__8BITWORKSHOP__', '-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 },\n atari8: {\n command: 'mos-atari8-clang',\n },\n nes: {\n command: 'mos-nes-nrom-clang', // TODO\n libargs: ['-lneslib', '-lfamitone2']\n },\n pce: {\n command: 'mos-pce-clang', // TODO\n },\n vcs: {\n command: 'mos-atari2600-3e-clang', // TODO\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: 'latest' }),\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 errorData = replaceAll(errorData, this.sessionDir, '');\n errorData = replaceAll(errorData, this.rootdir, '');\n // remove folder paths\n errorData = errorData.replace(/(\\/var\\/folders\\/.+?\\/).+?:/g, '');\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)).toString();\n let { listings, symbolmap, segments } = parseObjDump(dbglist);\n return { output: [], listings, symbolmap, segments };\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 = {\n name:string,\n start:number,\n size:number,\n last?:number,\n type?:string,\n source?:'native'|'linker'\n};\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\nexport function replaceAll(s:string, search:string, replace:string) : string {\n if (s == '') return '';\n if (search == '') return s;\n return s.split(search).join(replace);\n}\n\nexport function getCookie(name: string) : string {\n var nameEQ = name + \"=\";\n var ca = document.cookie.split(';');\n for(var i=0;i < ca.length;i++) {\n var c = ca[i];\n while (c.charAt(0)==' ') c = c.substring(1,c.length);\n if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);\n }\n return null;\n}\n\n", "import path from 'path';\nimport { CodeListing, CodeListingMap, Segment } from \"../../common/workertypes\";\n\nexport function parseObjDump(lst: string) {\n // parse symbol map\n const lines = lst.split('\\n');\n const symbolmap = {};\n const segments : Segment[] = [];\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i].trim();\n if (line.startsWith(\"Disassembly\")) break;\n if (line.startsWith('0')) {\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) & 0xffff; // TODO: 32-bit addresses\n symbolmap[symbol] = address;\n // is it a segment?\n if (symbol.startsWith('__')) {\n if (symbol.endsWith('_start')) {\n let name = symbol.substring(2, symbol.length - 6);\n let type = parts[2] == '.text' ? 'rom' : 'ram';\n segments.push({ name, start: address, size: 0, type })\n } else if (symbol.endsWith('_size')) {\n let name = symbol.substring(2, symbol.length - 5);\n let seg = segments.find(s => s.name === name);\n if (seg) seg.size = address;\n }\n }\n }\n }\n // parse listings\n const listings: CodeListingMap = {};\n var lastListing : CodeListing = null;\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 (!listings[file]) listings[file] = { lines: [], text: lst };\n lastListing = listings[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) & 0xffff; // TODO: 32-bit addresses;\n lastListing.lines[lastListing.lines.length - 1].offset = offset;\n }\n }\n }\n return { listings, symbolmap, segments };\n}\n", "\n// test.c(6) : warning 85: in function main unreferenced local variable : 'x'\n// main.a (4): error: Unknown Mnemonic 'xxx'.\n\nimport { SourceLine, WorkerError } from \"../common/workertypes\";\n\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"],
"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": []
}