stabilize-orm 1.3.9 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1097 -561
- package/dist/auto-migrate.d.ts +34 -0
- package/dist/auto-migrate.d.ts.map +1 -0
- package/dist/auto-migrate.js +3003 -0
- package/dist/auto-migrate.js.map +163 -0
- package/dist/cache.d.ts +90 -0
- package/dist/cache.d.ts.map +1 -0
- package/dist/cache.js +166 -0
- package/dist/cache.js.map +64 -0
- package/dist/client.d.ts +73 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +2997 -0
- package/dist/client.js.map +162 -0
- package/dist/hooks.d.ts +31 -0
- package/dist/hooks.d.ts.map +1 -0
- package/dist/hooks.js +4 -0
- package/dist/hooks.js.map +11 -0
- package/dist/index.d.ts +101 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3183 -0
- package/dist/index.js.map +222 -0
- package/dist/logger.d.ts +40 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +8 -0
- package/dist/logger.js.map +11 -0
- package/dist/migrations.d.ts +31 -0
- package/dist/migrations.d.ts.map +1 -0
- package/dist/migrations.js +3009 -0
- package/dist/migrations.js.map +164 -0
- package/{model.ts → dist/model.d.ts} +124 -189
- package/dist/model.d.ts.map +1 -0
- package/dist/model.js +4 -0
- package/dist/model.js.map +10 -0
- package/dist/query-builder.d.ts +91 -0
- package/dist/query-builder.d.ts.map +1 -0
- package/dist/query-builder.js +14 -0
- package/dist/query-builder.js.map +12 -0
- package/dist/repository.d.ts +165 -0
- package/dist/repository.d.ts.map +1 -0
- package/dist/repository.js +176 -0
- package/dist/repository.js.map +69 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/types.d.ts +110 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +4 -0
- package/dist/types.js.map +10 -0
- package/dist/utils/encryption.d.ts +13 -0
- package/dist/utils/encryption.d.ts.map +1 -0
- package/dist/utils/encryption.js +4 -0
- package/dist/utils/encryption.js.map +10 -0
- package/package.json +96 -17
- package/.eslintrc.json +0 -10
- package/.github/ISSUE_TEMPLATE/PULL_REQUEST_TEMPLATE.md +0 -23
- package/.github/ISSUE_TEMPLATE/bug_report.md +0 -25
- package/.github/ISSUE_TEMPLATE/feature_request.md +0 -17
- package/.github/workflows/ci-cd.yml +0 -22
- package/CHANGELOG.md +0 -75
- package/CODE_OF_CONDUCT.md +0 -87
- package/CONTRIBUTING.md +0 -48
- package/FUNDING.md +0 -14
- package/SECURITY.md +0 -35
- package/SUPPORT.md +0 -18
- package/bun.lock +0 -667
- package/cache.ts +0 -181
- package/client.ts +0 -249
- package/docker-compose.yml +0 -22
- package/hooks.ts +0 -76
- package/index.ts +0 -158
- package/logger.ts +0 -127
- package/migrations.ts +0 -318
- package/public/logo_both-transparent.png +0 -0
- package/public/logo_iamge-transparent.png +0 -0
- package/public/logo_text-transparent.png +0 -0
- package/query-builder.ts +0 -209
- package/repository.ts +0 -1096
- package/tests/migrations.test.ts +0 -141
- package/tsconfig.json +0 -32
- package/types.ts +0 -106
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["..\\node_modules\\postgres-array\\index.js", "..\\node_modules\\pg-types\\lib\\arrayParser.js", "..\\node_modules\\postgres-date\\index.js", "..\\node_modules\\xtend\\mutable.js", "..\\node_modules\\postgres-interval\\index.js", "..\\node_modules\\postgres-bytea\\index.js", "..\\node_modules\\pg-types\\lib\\textParsers.js", "..\\node_modules\\pg-int8\\index.js", "..\\node_modules\\pg-types\\lib\\binaryParsers.js", "..\\node_modules\\pg-types\\lib\\builtins.js", "..\\node_modules\\pg-types\\index.js", "..\\node_modules\\pg\\lib\\defaults.js", "..\\node_modules\\pg\\lib\\utils.js", "..\\node_modules\\pg\\lib\\crypto\\utils-legacy.js", "..\\node_modules\\pg\\lib\\crypto\\utils-webcrypto.js", "..\\node_modules\\pg\\lib\\crypto\\utils.js", "..\\node_modules\\pg\\lib\\crypto\\cert-signatures.js", "..\\node_modules\\pg\\lib\\crypto\\sasl.js", "..\\node_modules\\pg\\lib\\type-overrides.js", "..\\node_modules\\pg-connection-string\\index.js", "..\\node_modules\\pg\\lib\\connection-parameters.js", "..\\node_modules\\pg\\lib\\result.js", "..\\node_modules\\pg\\lib\\query.js", "..\\node_modules\\pg-protocol\\dist\\messages.js", "..\\node_modules\\pg-protocol\\dist\\buffer-writer.js", "..\\node_modules\\pg-protocol\\dist\\serializer.js", "..\\node_modules\\pg-protocol\\dist\\buffer-reader.js", "..\\node_modules\\pg-protocol\\dist\\parser.js", "..\\node_modules\\pg-protocol\\dist\\index.js", "..\\node_modules\\pg-cloudflare\\dist\\empty.js", "..\\node_modules\\pg\\lib\\stream.js", "..\\node_modules\\pg\\lib\\connection.js", "..\\node_modules\\split2\\index.js", "..\\node_modules\\pgpass\\lib\\helper.js", "..\\node_modules\\pgpass\\lib\\index.js", "..\\node_modules\\pg\\lib\\client.js", "..\\node_modules\\pg-pool\\index.js", "..\\node_modules\\pg\\lib\\native\\query.js", "..\\node_modules\\pg\\lib\\native\\client.js", "..\\node_modules\\pg\\lib\\index.js", "..\\node_modules\\sqlstring\\lib\\SqlString.js", "..\\node_modules\\lru.min\\lib\\index.js", "..\\node_modules\\mysql2\\lib\\parsers\\parser_cache.js", "..\\node_modules\\denque\\index.js", "..\\node_modules\\mysql2\\lib\\constants\\errors.js", "..\\node_modules\\long\\umd\\index.js", "..\\node_modules\\safer-buffer\\safer.js", "..\\node_modules\\iconv-lite\\lib\\bom-handling.js", "..\\node_modules\\iconv-lite\\lib\\helpers\\merge-exports.js", "..\\node_modules\\iconv-lite\\encodings\\internal.js", "..\\node_modules\\iconv-lite\\encodings\\utf32.js", "..\\node_modules\\iconv-lite\\encodings\\utf16.js", "..\\node_modules\\iconv-lite\\encodings\\utf7.js", "..\\node_modules\\iconv-lite\\encodings\\sbcs-codec.js", "..\\node_modules\\iconv-lite\\encodings\\sbcs-data.js", "..\\node_modules\\iconv-lite\\encodings\\sbcs-data-generated.js", "..\\node_modules\\iconv-lite\\encodings\\dbcs-codec.js", "..\\node_modules\\iconv-lite\\encodings\\dbcs-data.js", "..\\node_modules\\iconv-lite\\encodings\\index.js", "..\\node_modules\\iconv-lite\\lib\\streams.js", "..\\node_modules\\iconv-lite\\lib\\index.js", "..\\node_modules\\mysql2\\lib\\parsers\\string.js", "..\\node_modules\\mysql2\\lib\\constants\\types.js", "..\\node_modules\\mysql2\\lib\\packets\\packet.js", "..\\node_modules\\mysql2\\lib\\packet_parser.js", "..\\node_modules\\mysql2\\lib\\packets\\auth_next_factor.js", "..\\node_modules\\mysql2\\lib\\packets\\auth_switch_request.js", "..\\node_modules\\mysql2\\lib\\packets\\auth_switch_request_more_data.js", "..\\node_modules\\mysql2\\lib\\packets\\auth_switch_response.js", "..\\node_modules\\mysql2\\lib\\packets\\binary_row.js", "..\\node_modules\\mysql2\\lib\\constants\\commands.js", "..\\node_modules\\mysql2\\lib\\packets\\binlog_dump.js", "..\\node_modules\\mysql2\\lib\\constants\\client.js", "..\\node_modules\\mysql2\\lib\\auth_41.js", "..\\node_modules\\mysql2\\lib\\constants\\charset_encodings.js", "..\\node_modules\\mysql2\\lib\\packets\\change_user.js", "..\\node_modules\\mysql2\\lib\\packets\\close_statement.js", "..\\node_modules\\mysql2\\lib\\constants\\field_flags.js", "..\\node_modules\\mysql2\\lib\\packets\\column_definition.js", "..\\node_modules\\mysql2\\lib\\constants\\cursor.js", "..\\node_modules\\mysql2\\lib\\packets\\execute.js", "..\\node_modules\\mysql2\\lib\\packets\\handshake.js", "..\\node_modules\\mysql2\\lib\\packets\\handshake_response.js", "..\\node_modules\\mysql2\\lib\\packets\\prepare_statement.js", "..\\node_modules\\mysql2\\lib\\packets\\prepared_statement_header.js", "..\\node_modules\\mysql2\\lib\\packets\\query.js", "..\\node_modules\\mysql2\\lib\\packets\\register_slave.js", "..\\node_modules\\mysql2\\lib\\constants\\server_status.js", "..\\node_modules\\mysql2\\lib\\constants\\encoding_charset.js", "..\\node_modules\\mysql2\\lib\\constants\\session_track.js", "..\\node_modules\\mysql2\\lib\\packets\\resultset_header.js", "..\\node_modules\\mysql2\\lib\\packets\\ssl_request.js", "..\\node_modules\\mysql2\\lib\\packets\\text_row.js", "..\\node_modules\\mysql2\\lib\\packets\\index.js", "..\\node_modules\\mysql2\\lib\\commands\\command.js", "..\\node_modules\\mysql2\\lib\\auth_plugins\\sha256_password.js", "..\\node_modules\\mysql2\\lib\\auth_plugins\\caching_sha2_password.js", "..\\node_modules\\mysql2\\lib\\auth_plugins\\mysql_native_password.js", "..\\node_modules\\mysql2\\lib\\auth_plugins\\mysql_clear_password.js", "..\\node_modules\\mysql2\\lib\\commands\\auth_switch.js", "..\\node_modules\\seq-queue\\lib\\seq-queue.js", "..\\node_modules\\mysql2\\lib\\compressed_protocol.js", "..\\node_modules\\mysql2\\lib\\commands\\client_handshake.js", "..\\node_modules\\mysql2\\lib\\commands\\server_handshake.js", "..\\node_modules\\mysql2\\lib\\constants\\charsets.js", "..\\node_modules\\mysql2\\lib\\helpers.js", "..\\node_modules\\is-property\\is-property.js", "..\\node_modules\\generate-function\\index.js", "..\\node_modules\\mysql2\\lib\\parsers\\text_parser.js", "..\\node_modules\\mysql2\\lib\\parsers\\static_text_parser.js", "..\\node_modules\\mysql2\\lib\\commands\\query.js", "..\\node_modules\\mysql2\\lib\\commands\\close_statement.js", "..\\node_modules\\mysql2\\lib\\parsers\\binary_parser.js", "..\\node_modules\\mysql2\\lib\\parsers\\static_binary_parser.js", "..\\node_modules\\mysql2\\lib\\commands\\execute.js", "..\\node_modules\\mysql2\\lib\\commands\\prepare.js", "..\\node_modules\\mysql2\\lib\\commands\\ping.js", "..\\node_modules\\mysql2\\lib\\commands\\register_slave.js", "..\\node_modules\\mysql2\\lib\\packets\\binlog_query_statusvars.js", "..\\node_modules\\mysql2\\lib\\commands\\binlog_dump.js", "..\\node_modules\\mysql2\\lib\\commands\\change_user.js", "..\\node_modules\\mysql2\\lib\\commands\\quit.js", "..\\node_modules\\mysql2\\lib\\commands\\index.js", "..\\node_modules\\aws-ssl-profiles\\lib\\profiles\\ca\\defaults.js", "..\\node_modules\\aws-ssl-profiles\\lib\\profiles\\ca\\proxies.js", "..\\node_modules\\aws-ssl-profiles\\lib\\index.js", "..\\node_modules\\mysql2\\lib\\constants\\ssl_profiles.js", "..\\node_modules\\mysql2\\lib\\connection_config.js", "..\\node_modules\\named-placeholders\\node_modules\\lru-cache\\index.js", "..\\node_modules\\named-placeholders\\index.js", "..\\node_modules\\mysql2\\lib\\base\\connection.js", "..\\node_modules\\mysql2\\lib\\base\\pool_connection.js", "..\\node_modules\\mysql2\\lib\\promise\\make_done_cb.js", "..\\node_modules\\mysql2\\lib\\promise\\prepared_statement_info.js", "..\\node_modules\\mysql2\\lib\\promise\\inherit_events.js", "..\\node_modules\\mysql2\\lib\\promise\\connection.js", "..\\node_modules\\mysql2\\lib\\promise\\pool_connection.js", "..\\node_modules\\mysql2\\lib\\pool_connection.js", "..\\node_modules\\mysql2\\lib\\base\\pool.js", "..\\node_modules\\mysql2\\lib\\promise\\pool.js", "..\\node_modules\\mysql2\\lib\\pool.js", "..\\node_modules\\mysql2\\lib\\pool_config.js", "..\\node_modules\\mysql2\\lib\\connection.js", "..\\node_modules\\mysql2\\lib\\pool_cluster.js", "..\\node_modules\\mysql2\\lib\\create_connection.js", "..\\node_modules\\mysql2\\lib\\create_pool.js", "..\\node_modules\\mysql2\\lib\\create_pool_cluster.js", "..\\node_modules\\mysql2\\lib\\promise\\pool_cluster.js", "..\\node_modules\\mysql2\\promise.js", "..\\types.ts", "..\\logger.ts", "..\\client.ts", "..\\node_modules\\pg\\esm\\index.mjs"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"'use strict'\n\nexports.parse = function (source, transform) {\n return new ArrayParser(source, transform).parse()\n}\n\nclass ArrayParser {\n constructor (source, transform) {\n this.source = source\n this.transform = transform || identity\n this.position = 0\n this.entries = []\n this.recorded = []\n this.dimension = 0\n }\n\n isEof () {\n return this.position >= this.source.length\n }\n\n nextCharacter () {\n var character = this.source[this.position++]\n if (character === '\\\\') {\n return {\n value: this.source[this.position++],\n escaped: true\n }\n }\n return {\n value: character,\n escaped: false\n }\n }\n\n record (character) {\n this.recorded.push(character)\n }\n\n newEntry (includeEmpty) {\n var entry\n if (this.recorded.length > 0 || includeEmpty) {\n entry = this.recorded.join('')\n if (entry === 'NULL' && !includeEmpty) {\n entry = null\n }\n if (entry !== null) entry = this.transform(entry)\n this.entries.push(entry)\n this.recorded = []\n }\n }\n\n consumeDimensions () {\n if (this.source[0] === '[') {\n while (!this.isEof()) {\n var char = this.nextCharacter()\n if (char.value === '=') break\n }\n }\n }\n\n parse (nested) {\n var character, parser, quote\n this.consumeDimensions()\n while (!this.isEof()) {\n character = this.nextCharacter()\n if (character.value === '{' && !quote) {\n this.dimension++\n if (this.dimension > 1) {\n parser = new ArrayParser(this.source.substr(this.position - 1), this.transform)\n this.entries.push(parser.parse(true))\n this.position += parser.position - 2\n }\n } else if (character.value === '}' && !quote) {\n this.dimension--\n if (!this.dimension) {\n this.newEntry()\n if (nested) return this.entries\n }\n } else if (character.value === '\"' && !character.escaped) {\n if (quote) this.newEntry(true)\n quote = !quote\n } else if (character.value === ',' && !quote) {\n this.newEntry()\n } else {\n this.record(character.value)\n }\n }\n if (this.dimension !== 0) {\n throw new Error('array dimension not balanced')\n }\n return this.entries\n }\n}\n\nfunction identity (value) {\n return value\n}\n",
|
|
6
|
+
"var array = require('postgres-array');\n\nmodule.exports = {\n create: function (source, transform) {\n return {\n parse: function() {\n return array.parse(source, transform);\n }\n };\n }\n};\n",
|
|
7
|
+
"'use strict'\n\nvar DATE_TIME = /(\\d{1,})-(\\d{2})-(\\d{2}) (\\d{2}):(\\d{2}):(\\d{2})(\\.\\d{1,})?.*?( BC)?$/\nvar DATE = /^(\\d{1,})-(\\d{2})-(\\d{2})( BC)?$/\nvar TIME_ZONE = /([Z+-])(\\d{2})?:?(\\d{2})?:?(\\d{2})?/\nvar INFINITY = /^-?infinity$/\n\nmodule.exports = function parseDate (isoDate) {\n if (INFINITY.test(isoDate)) {\n // Capitalize to Infinity before passing to Number\n return Number(isoDate.replace('i', 'I'))\n }\n var matches = DATE_TIME.exec(isoDate)\n\n if (!matches) {\n // Force YYYY-MM-DD dates to be parsed as local time\n return getDate(isoDate) || null\n }\n\n var isBC = !!matches[8]\n var year = parseInt(matches[1], 10)\n if (isBC) {\n year = bcYearToNegativeYear(year)\n }\n\n var month = parseInt(matches[2], 10) - 1\n var day = matches[3]\n var hour = parseInt(matches[4], 10)\n var minute = parseInt(matches[5], 10)\n var second = parseInt(matches[6], 10)\n\n var ms = matches[7]\n ms = ms ? 1000 * parseFloat(ms) : 0\n\n var date\n var offset = timeZoneOffset(isoDate)\n if (offset != null) {\n date = new Date(Date.UTC(year, month, day, hour, minute, second, ms))\n\n // Account for years from 0 to 99 being interpreted as 1900-1999\n // by Date.UTC / the multi-argument form of the Date constructor\n if (is0To99(year)) {\n date.setUTCFullYear(year)\n }\n\n if (offset !== 0) {\n date.setTime(date.getTime() - offset)\n }\n } else {\n date = new Date(year, month, day, hour, minute, second, ms)\n\n if (is0To99(year)) {\n date.setFullYear(year)\n }\n }\n\n return date\n}\n\nfunction getDate (isoDate) {\n var matches = DATE.exec(isoDate)\n if (!matches) {\n return\n }\n\n var year = parseInt(matches[1], 10)\n var isBC = !!matches[4]\n if (isBC) {\n year = bcYearToNegativeYear(year)\n }\n\n var month = parseInt(matches[2], 10) - 1\n var day = matches[3]\n // YYYY-MM-DD will be parsed as local time\n var date = new Date(year, month, day)\n\n if (is0To99(year)) {\n date.setFullYear(year)\n }\n\n return date\n}\n\n// match timezones:\n// Z (UTC)\n// -05\n// +06:30\nfunction timeZoneOffset (isoDate) {\n if (isoDate.endsWith('+00')) {\n return 0\n }\n\n var zone = TIME_ZONE.exec(isoDate.split(' ')[1])\n if (!zone) return\n var type = zone[1]\n\n if (type === 'Z') {\n return 0\n }\n var sign = type === '-' ? -1 : 1\n var offset = parseInt(zone[2], 10) * 3600 +\n parseInt(zone[3] || 0, 10) * 60 +\n parseInt(zone[4] || 0, 10)\n\n return offset * sign * 1000\n}\n\nfunction bcYearToNegativeYear (year) {\n // Account for numerical difference between representations of BC years\n // See: https://github.com/bendrucker/postgres-date/issues/5\n return -(year - 1)\n}\n\nfunction is0To99 (num) {\n return num >= 0 && num < 100\n}\n",
|
|
8
|
+
"module.exports = extend\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction extend(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i]\n\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n target[key] = source[key]\n }\n }\n }\n\n return target\n}\n",
|
|
9
|
+
"'use strict'\n\nvar extend = require('xtend/mutable')\n\nmodule.exports = PostgresInterval\n\nfunction PostgresInterval (raw) {\n if (!(this instanceof PostgresInterval)) {\n return new PostgresInterval(raw)\n }\n extend(this, parse(raw))\n}\nvar properties = ['seconds', 'minutes', 'hours', 'days', 'months', 'years']\nPostgresInterval.prototype.toPostgres = function () {\n var filtered = properties.filter(this.hasOwnProperty, this)\n\n // In addition to `properties`, we need to account for fractions of seconds.\n if (this.milliseconds && filtered.indexOf('seconds') < 0) {\n filtered.push('seconds')\n }\n\n if (filtered.length === 0) return '0'\n return filtered\n .map(function (property) {\n var value = this[property] || 0\n\n // Account for fractional part of seconds,\n // remove trailing zeroes.\n if (property === 'seconds' && this.milliseconds) {\n value = (value + this.milliseconds / 1000).toFixed(6).replace(/\\.?0+$/, '')\n }\n\n return value + ' ' + property\n }, this)\n .join(' ')\n}\n\nvar propertiesISOEquivalent = {\n years: 'Y',\n months: 'M',\n days: 'D',\n hours: 'H',\n minutes: 'M',\n seconds: 'S'\n}\nvar dateProperties = ['years', 'months', 'days']\nvar timeProperties = ['hours', 'minutes', 'seconds']\n// according to ISO 8601\nPostgresInterval.prototype.toISOString = PostgresInterval.prototype.toISO = function () {\n var datePart = dateProperties\n .map(buildProperty, this)\n .join('')\n\n var timePart = timeProperties\n .map(buildProperty, this)\n .join('')\n\n return 'P' + datePart + 'T' + timePart\n\n function buildProperty (property) {\n var value = this[property] || 0\n\n // Account for fractional part of seconds,\n // remove trailing zeroes.\n if (property === 'seconds' && this.milliseconds) {\n value = (value + this.milliseconds / 1000).toFixed(6).replace(/0+$/, '')\n }\n\n return value + propertiesISOEquivalent[property]\n }\n}\n\nvar NUMBER = '([+-]?\\\\d+)'\nvar YEAR = NUMBER + '\\\\s+years?'\nvar MONTH = NUMBER + '\\\\s+mons?'\nvar DAY = NUMBER + '\\\\s+days?'\nvar TIME = '([+-])?([\\\\d]*):(\\\\d\\\\d):(\\\\d\\\\d)\\\\.?(\\\\d{1,6})?'\nvar INTERVAL = new RegExp([YEAR, MONTH, DAY, TIME].map(function (regexString) {\n return '(' + regexString + ')?'\n})\n .join('\\\\s*'))\n\n// Positions of values in regex match\nvar positions = {\n years: 2,\n months: 4,\n days: 6,\n hours: 9,\n minutes: 10,\n seconds: 11,\n milliseconds: 12\n}\n// We can use negative time\nvar negatives = ['hours', 'minutes', 'seconds', 'milliseconds']\n\nfunction parseMilliseconds (fraction) {\n // add omitted zeroes\n var microseconds = fraction + '000000'.slice(fraction.length)\n return parseInt(microseconds, 10) / 1000\n}\n\nfunction parse (interval) {\n if (!interval) return {}\n var matches = INTERVAL.exec(interval)\n var isNegative = matches[8] === '-'\n return Object.keys(positions)\n .reduce(function (parsed, property) {\n var position = positions[property]\n var value = matches[position]\n // no empty string\n if (!value) return parsed\n // milliseconds are actually microseconds (up to 6 digits)\n // with omitted trailing zeroes.\n value = property === 'milliseconds'\n ? parseMilliseconds(value)\n : parseInt(value, 10)\n // no zeros\n if (!value) return parsed\n if (isNegative && ~negatives.indexOf(property)) {\n value *= -1\n }\n parsed[property] = value\n return parsed\n }, {})\n}\n",
|
|
10
|
+
"'use strict'\n\nmodule.exports = function parseBytea (input) {\n if (/^\\\\x/.test(input)) {\n // new 'hex' style response (pg >9.0)\n return new Buffer(input.substr(2), 'hex')\n }\n var output = ''\n var i = 0\n while (i < input.length) {\n if (input[i] !== '\\\\') {\n output += input[i]\n ++i\n } else {\n if (/[0-7]{3}/.test(input.substr(i + 1, 3))) {\n output += String.fromCharCode(parseInt(input.substr(i + 1, 3), 8))\n i += 4\n } else {\n var backslashes = 1\n while (i + backslashes < input.length && input[i + backslashes] === '\\\\') {\n backslashes++\n }\n for (var k = 0; k < Math.floor(backslashes / 2); ++k) {\n output += '\\\\'\n }\n i += Math.floor(backslashes / 2) * 2\n }\n }\n }\n return new Buffer(output, 'binary')\n}\n",
|
|
11
|
+
"var array = require('postgres-array')\nvar arrayParser = require('./arrayParser');\nvar parseDate = require('postgres-date');\nvar parseInterval = require('postgres-interval');\nvar parseByteA = require('postgres-bytea');\n\nfunction allowNull (fn) {\n return function nullAllowed (value) {\n if (value === null) return value\n return fn(value)\n }\n}\n\nfunction parseBool (value) {\n if (value === null) return value\n return value === 'TRUE' ||\n value === 't' ||\n value === 'true' ||\n value === 'y' ||\n value === 'yes' ||\n value === 'on' ||\n value === '1';\n}\n\nfunction parseBoolArray (value) {\n if (!value) return null\n return array.parse(value, parseBool)\n}\n\nfunction parseBaseTenInt (string) {\n return parseInt(string, 10)\n}\n\nfunction parseIntegerArray (value) {\n if (!value) return null\n return array.parse(value, allowNull(parseBaseTenInt))\n}\n\nfunction parseBigIntegerArray (value) {\n if (!value) return null\n return array.parse(value, allowNull(function (entry) {\n return parseBigInteger(entry).trim()\n }))\n}\n\nvar parsePointArray = function(value) {\n if(!value) { return null; }\n var p = arrayParser.create(value, function(entry) {\n if(entry !== null) {\n entry = parsePoint(entry);\n }\n return entry;\n });\n\n return p.parse();\n};\n\nvar parseFloatArray = function(value) {\n if(!value) { return null; }\n var p = arrayParser.create(value, function(entry) {\n if(entry !== null) {\n entry = parseFloat(entry);\n }\n return entry;\n });\n\n return p.parse();\n};\n\nvar parseStringArray = function(value) {\n if(!value) { return null; }\n\n var p = arrayParser.create(value);\n return p.parse();\n};\n\nvar parseDateArray = function(value) {\n if (!value) { return null; }\n\n var p = arrayParser.create(value, function(entry) {\n if (entry !== null) {\n entry = parseDate(entry);\n }\n return entry;\n });\n\n return p.parse();\n};\n\nvar parseIntervalArray = function(value) {\n if (!value) { return null; }\n\n var p = arrayParser.create(value, function(entry) {\n if (entry !== null) {\n entry = parseInterval(entry);\n }\n return entry;\n });\n\n return p.parse();\n};\n\nvar parseByteAArray = function(value) {\n if (!value) { return null; }\n\n return array.parse(value, allowNull(parseByteA));\n};\n\nvar parseInteger = function(value) {\n return parseInt(value, 10);\n};\n\nvar parseBigInteger = function(value) {\n var valStr = String(value);\n if (/^\\d+$/.test(valStr)) { return valStr; }\n return value;\n};\n\nvar parseJsonArray = function(value) {\n if (!value) { return null; }\n\n return array.parse(value, allowNull(JSON.parse));\n};\n\nvar parsePoint = function(value) {\n if (value[0] !== '(') { return null; }\n\n value = value.substring( 1, value.length - 1 ).split(',');\n\n return {\n x: parseFloat(value[0])\n , y: parseFloat(value[1])\n };\n};\n\nvar parseCircle = function(value) {\n if (value[0] !== '<' && value[1] !== '(') { return null; }\n\n var point = '(';\n var radius = '';\n var pointParsed = false;\n for (var i = 2; i < value.length - 1; i++){\n if (!pointParsed) {\n point += value[i];\n }\n\n if (value[i] === ')') {\n pointParsed = true;\n continue;\n } else if (!pointParsed) {\n continue;\n }\n\n if (value[i] === ','){\n continue;\n }\n\n radius += value[i];\n }\n var result = parsePoint(point);\n result.radius = parseFloat(radius);\n\n return result;\n};\n\nvar init = function(register) {\n register(20, parseBigInteger); // int8\n register(21, parseInteger); // int2\n register(23, parseInteger); // int4\n register(26, parseInteger); // oid\n register(700, parseFloat); // float4/real\n register(701, parseFloat); // float8/double\n register(16, parseBool);\n register(1082, parseDate); // date\n register(1114, parseDate); // timestamp without timezone\n register(1184, parseDate); // timestamp\n register(600, parsePoint); // point\n register(651, parseStringArray); // cidr[]\n register(718, parseCircle); // circle\n register(1000, parseBoolArray);\n register(1001, parseByteAArray);\n register(1005, parseIntegerArray); // _int2\n register(1007, parseIntegerArray); // _int4\n register(1028, parseIntegerArray); // oid[]\n register(1016, parseBigIntegerArray); // _int8\n register(1017, parsePointArray); // point[]\n register(1021, parseFloatArray); // _float4\n register(1022, parseFloatArray); // _float8\n register(1231, parseFloatArray); // _numeric\n register(1014, parseStringArray); //char\n register(1015, parseStringArray); //varchar\n register(1008, parseStringArray);\n register(1009, parseStringArray);\n register(1040, parseStringArray); // macaddr[]\n register(1041, parseStringArray); // inet[]\n register(1115, parseDateArray); // timestamp without time zone[]\n register(1182, parseDateArray); // _date\n register(1185, parseDateArray); // timestamp with time zone[]\n register(1186, parseInterval);\n register(1187, parseIntervalArray);\n register(17, parseByteA);\n register(114, JSON.parse.bind(JSON)); // json\n register(3802, JSON.parse.bind(JSON)); // jsonb\n register(199, parseJsonArray); // json[]\n register(3807, parseJsonArray); // jsonb[]\n register(3907, parseStringArray); // numrange[]\n register(2951, parseStringArray); // uuid[]\n register(791, parseStringArray); // money[]\n register(1183, parseStringArray); // time[]\n register(1270, parseStringArray); // timetz[]\n};\n\nmodule.exports = {\n init: init\n};\n",
|
|
12
|
+
"'use strict';\n\n// selected so (BASE - 1) * 0x100000000 + 0xffffffff is a safe integer\nvar BASE = 1000000;\n\nfunction readInt8(buffer) {\n\tvar high = buffer.readInt32BE(0);\n\tvar low = buffer.readUInt32BE(4);\n\tvar sign = '';\n\n\tif (high < 0) {\n\t\thigh = ~high + (low === 0);\n\t\tlow = (~low + 1) >>> 0;\n\t\tsign = '-';\n\t}\n\n\tvar result = '';\n\tvar carry;\n\tvar t;\n\tvar digits;\n\tvar pad;\n\tvar l;\n\tvar i;\n\n\t{\n\t\tcarry = high % BASE;\n\t\thigh = high / BASE >>> 0;\n\n\t\tt = 0x100000000 * carry + low;\n\t\tlow = t / BASE >>> 0;\n\t\tdigits = '' + (t - BASE * low);\n\n\t\tif (low === 0 && high === 0) {\n\t\t\treturn sign + digits + result;\n\t\t}\n\n\t\tpad = '';\n\t\tl = 6 - digits.length;\n\n\t\tfor (i = 0; i < l; i++) {\n\t\t\tpad += '0';\n\t\t}\n\n\t\tresult = pad + digits + result;\n\t}\n\n\t{\n\t\tcarry = high % BASE;\n\t\thigh = high / BASE >>> 0;\n\n\t\tt = 0x100000000 * carry + low;\n\t\tlow = t / BASE >>> 0;\n\t\tdigits = '' + (t - BASE * low);\n\n\t\tif (low === 0 && high === 0) {\n\t\t\treturn sign + digits + result;\n\t\t}\n\n\t\tpad = '';\n\t\tl = 6 - digits.length;\n\n\t\tfor (i = 0; i < l; i++) {\n\t\t\tpad += '0';\n\t\t}\n\n\t\tresult = pad + digits + result;\n\t}\n\n\t{\n\t\tcarry = high % BASE;\n\t\thigh = high / BASE >>> 0;\n\n\t\tt = 0x100000000 * carry + low;\n\t\tlow = t / BASE >>> 0;\n\t\tdigits = '' + (t - BASE * low);\n\n\t\tif (low === 0 && high === 0) {\n\t\t\treturn sign + digits + result;\n\t\t}\n\n\t\tpad = '';\n\t\tl = 6 - digits.length;\n\n\t\tfor (i = 0; i < l; i++) {\n\t\t\tpad += '0';\n\t\t}\n\n\t\tresult = pad + digits + result;\n\t}\n\n\t{\n\t\tcarry = high % BASE;\n\t\tt = 0x100000000 * carry + low;\n\t\tdigits = '' + t % BASE;\n\n\t\treturn sign + digits + result;\n\t}\n}\n\nmodule.exports = readInt8;\n",
|
|
13
|
+
"var parseInt64 = require('pg-int8');\n\nvar parseBits = function(data, bits, offset, invert, callback) {\n offset = offset || 0;\n invert = invert || false;\n callback = callback || function(lastValue, newValue, bits) { return (lastValue * Math.pow(2, bits)) + newValue; };\n var offsetBytes = offset >> 3;\n\n var inv = function(value) {\n if (invert) {\n return ~value & 0xff;\n }\n\n return value;\n };\n\n // read first (maybe partial) byte\n var mask = 0xff;\n var firstBits = 8 - (offset % 8);\n if (bits < firstBits) {\n mask = (0xff << (8 - bits)) & 0xff;\n firstBits = bits;\n }\n\n if (offset) {\n mask = mask >> (offset % 8);\n }\n\n var result = 0;\n if ((offset % 8) + bits >= 8) {\n result = callback(0, inv(data[offsetBytes]) & mask, firstBits);\n }\n\n // read bytes\n var bytes = (bits + offset) >> 3;\n for (var i = offsetBytes + 1; i < bytes; i++) {\n result = callback(result, inv(data[i]), 8);\n }\n\n // bits to read, that are not a complete byte\n var lastBits = (bits + offset) % 8;\n if (lastBits > 0) {\n result = callback(result, inv(data[bytes]) >> (8 - lastBits), lastBits);\n }\n\n return result;\n};\n\nvar parseFloatFromBits = function(data, precisionBits, exponentBits) {\n var bias = Math.pow(2, exponentBits - 1) - 1;\n var sign = parseBits(data, 1);\n var exponent = parseBits(data, exponentBits, 1);\n\n if (exponent === 0) {\n return 0;\n }\n\n // parse mantissa\n var precisionBitsCounter = 1;\n var parsePrecisionBits = function(lastValue, newValue, bits) {\n if (lastValue === 0) {\n lastValue = 1;\n }\n\n for (var i = 1; i <= bits; i++) {\n precisionBitsCounter /= 2;\n if ((newValue & (0x1 << (bits - i))) > 0) {\n lastValue += precisionBitsCounter;\n }\n }\n\n return lastValue;\n };\n\n var mantissa = parseBits(data, precisionBits, exponentBits + 1, false, parsePrecisionBits);\n\n // special cases\n if (exponent == (Math.pow(2, exponentBits + 1) - 1)) {\n if (mantissa === 0) {\n return (sign === 0) ? Infinity : -Infinity;\n }\n\n return NaN;\n }\n\n // normale number\n return ((sign === 0) ? 1 : -1) * Math.pow(2, exponent - bias) * mantissa;\n};\n\nvar parseInt16 = function(value) {\n if (parseBits(value, 1) == 1) {\n return -1 * (parseBits(value, 15, 1, true) + 1);\n }\n\n return parseBits(value, 15, 1);\n};\n\nvar parseInt32 = function(value) {\n if (parseBits(value, 1) == 1) {\n return -1 * (parseBits(value, 31, 1, true) + 1);\n }\n\n return parseBits(value, 31, 1);\n};\n\nvar parseFloat32 = function(value) {\n return parseFloatFromBits(value, 23, 8);\n};\n\nvar parseFloat64 = function(value) {\n return parseFloatFromBits(value, 52, 11);\n};\n\nvar parseNumeric = function(value) {\n var sign = parseBits(value, 16, 32);\n if (sign == 0xc000) {\n return NaN;\n }\n\n var weight = Math.pow(10000, parseBits(value, 16, 16));\n var result = 0;\n\n var digits = [];\n var ndigits = parseBits(value, 16);\n for (var i = 0; i < ndigits; i++) {\n result += parseBits(value, 16, 64 + (16 * i)) * weight;\n weight /= 10000;\n }\n\n var scale = Math.pow(10, parseBits(value, 16, 48));\n return ((sign === 0) ? 1 : -1) * Math.round(result * scale) / scale;\n};\n\nvar parseDate = function(isUTC, value) {\n var sign = parseBits(value, 1);\n var rawValue = parseBits(value, 63, 1);\n\n // discard usecs and shift from 2000 to 1970\n var result = new Date((((sign === 0) ? 1 : -1) * rawValue / 1000) + 946684800000);\n\n if (!isUTC) {\n result.setTime(result.getTime() + result.getTimezoneOffset() * 60000);\n }\n\n // add microseconds to the date\n result.usec = rawValue % 1000;\n result.getMicroSeconds = function() {\n return this.usec;\n };\n result.setMicroSeconds = function(value) {\n this.usec = value;\n };\n result.getUTCMicroSeconds = function() {\n return this.usec;\n };\n\n return result;\n};\n\nvar parseArray = function(value) {\n var dim = parseBits(value, 32);\n\n var flags = parseBits(value, 32, 32);\n var elementType = parseBits(value, 32, 64);\n\n var offset = 96;\n var dims = [];\n for (var i = 0; i < dim; i++) {\n // parse dimension\n dims[i] = parseBits(value, 32, offset);\n offset += 32;\n\n // ignore lower bounds\n offset += 32;\n }\n\n var parseElement = function(elementType) {\n // parse content length\n var length = parseBits(value, 32, offset);\n offset += 32;\n\n // parse null values\n if (length == 0xffffffff) {\n return null;\n }\n\n var result;\n if ((elementType == 0x17) || (elementType == 0x14)) {\n // int/bigint\n result = parseBits(value, length * 8, offset);\n offset += length * 8;\n return result;\n }\n else if (elementType == 0x19) {\n // string\n result = value.toString(this.encoding, offset >> 3, (offset += (length << 3)) >> 3);\n return result;\n }\n else {\n console.log(\"ERROR: ElementType not implemented: \" + elementType);\n }\n };\n\n var parse = function(dimension, elementType) {\n var array = [];\n var i;\n\n if (dimension.length > 1) {\n var count = dimension.shift();\n for (i = 0; i < count; i++) {\n array[i] = parse(dimension, elementType);\n }\n dimension.unshift(count);\n }\n else {\n for (i = 0; i < dimension[0]; i++) {\n array[i] = parseElement(elementType);\n }\n }\n\n return array;\n };\n\n return parse(dims, elementType);\n};\n\nvar parseText = function(value) {\n return value.toString('utf8');\n};\n\nvar parseBool = function(value) {\n if(value === null) return null;\n return (parseBits(value, 8) > 0);\n};\n\nvar init = function(register) {\n register(20, parseInt64);\n register(21, parseInt16);\n register(23, parseInt32);\n register(26, parseInt32);\n register(1700, parseNumeric);\n register(700, parseFloat32);\n register(701, parseFloat64);\n register(16, parseBool);\n register(1114, parseDate.bind(null, false));\n register(1184, parseDate.bind(null, true));\n register(1000, parseArray);\n register(1007, parseArray);\n register(1016, parseArray);\n register(1008, parseArray);\n register(1009, parseArray);\n register(25, parseText);\n};\n\nmodule.exports = {\n init: init\n};\n",
|
|
14
|
+
"/**\n * Following query was used to generate this file:\n\n SELECT json_object_agg(UPPER(PT.typname), PT.oid::int4 ORDER BY pt.oid)\n FROM pg_type PT\n WHERE typnamespace = (SELECT pgn.oid FROM pg_namespace pgn WHERE nspname = 'pg_catalog') -- Take only builting Postgres types with stable OID (extension types are not guaranted to be stable)\n AND typtype = 'b' -- Only basic types\n AND typelem = 0 -- Ignore aliases\n AND typisdefined -- Ignore undefined types\n */\n\nmodule.exports = {\n BOOL: 16,\n BYTEA: 17,\n CHAR: 18,\n INT8: 20,\n INT2: 21,\n INT4: 23,\n REGPROC: 24,\n TEXT: 25,\n OID: 26,\n TID: 27,\n XID: 28,\n CID: 29,\n JSON: 114,\n XML: 142,\n PG_NODE_TREE: 194,\n SMGR: 210,\n PATH: 602,\n POLYGON: 604,\n CIDR: 650,\n FLOAT4: 700,\n FLOAT8: 701,\n ABSTIME: 702,\n RELTIME: 703,\n TINTERVAL: 704,\n CIRCLE: 718,\n MACADDR8: 774,\n MONEY: 790,\n MACADDR: 829,\n INET: 869,\n ACLITEM: 1033,\n BPCHAR: 1042,\n VARCHAR: 1043,\n DATE: 1082,\n TIME: 1083,\n TIMESTAMP: 1114,\n TIMESTAMPTZ: 1184,\n INTERVAL: 1186,\n TIMETZ: 1266,\n BIT: 1560,\n VARBIT: 1562,\n NUMERIC: 1700,\n REFCURSOR: 1790,\n REGPROCEDURE: 2202,\n REGOPER: 2203,\n REGOPERATOR: 2204,\n REGCLASS: 2205,\n REGTYPE: 2206,\n UUID: 2950,\n TXID_SNAPSHOT: 2970,\n PG_LSN: 3220,\n PG_NDISTINCT: 3361,\n PG_DEPENDENCIES: 3402,\n TSVECTOR: 3614,\n TSQUERY: 3615,\n GTSVECTOR: 3642,\n REGCONFIG: 3734,\n REGDICTIONARY: 3769,\n JSONB: 3802,\n REGNAMESPACE: 4089,\n REGROLE: 4096\n};\n",
|
|
15
|
+
"var textParsers = require('./lib/textParsers');\nvar binaryParsers = require('./lib/binaryParsers');\nvar arrayParser = require('./lib/arrayParser');\nvar builtinTypes = require('./lib/builtins');\n\nexports.getTypeParser = getTypeParser;\nexports.setTypeParser = setTypeParser;\nexports.arrayParser = arrayParser;\nexports.builtins = builtinTypes;\n\nvar typeParsers = {\n text: {},\n binary: {}\n};\n\n//the empty parse function\nfunction noParse (val) {\n return String(val);\n};\n\n//returns a function used to convert a specific type (specified by\n//oid) into a result javascript type\n//note: the oid can be obtained via the following sql query:\n//SELECT oid FROM pg_type WHERE typname = 'TYPE_NAME_HERE';\nfunction getTypeParser (oid, format) {\n format = format || 'text';\n if (!typeParsers[format]) {\n return noParse;\n }\n return typeParsers[format][oid] || noParse;\n};\n\nfunction setTypeParser (oid, format, parseFn) {\n if(typeof format == 'function') {\n parseFn = format;\n format = 'text';\n }\n typeParsers[format][oid] = parseFn;\n};\n\ntextParsers.init(function(oid, converter) {\n typeParsers.text[oid] = converter;\n});\n\nbinaryParsers.init(function(oid, converter) {\n typeParsers.binary[oid] = converter;\n});\n",
|
|
16
|
+
"'use strict'\n\nmodule.exports = {\n // database host. defaults to localhost\n host: 'localhost',\n\n // database user's name\n user: process.platform === 'win32' ? process.env.USERNAME : process.env.USER,\n\n // name of database to connect\n database: undefined,\n\n // database user's password\n password: null,\n\n // a Postgres connection string to be used instead of setting individual connection items\n // NOTE: Setting this value will cause it to override any other value (such as database or user) defined\n // in the defaults object.\n connectionString: undefined,\n\n // database port\n port: 5432,\n\n // number of rows to return at a time from a prepared statement's\n // portal. 0 will return all rows at once\n rows: 0,\n\n // binary result mode\n binary: false,\n\n // Connection pool options - see https://github.com/brianc/node-pg-pool\n\n // number of connections to use in connection pool\n // 0 will disable connection pooling\n max: 10,\n\n // max milliseconds a client can go unused before it is removed\n // from the pool and destroyed\n idleTimeoutMillis: 30000,\n\n client_encoding: '',\n\n ssl: false,\n\n application_name: undefined,\n\n fallback_application_name: undefined,\n\n options: undefined,\n\n parseInputDatesAsUTC: false,\n\n // max milliseconds any query using this connection will execute for before timing out in error.\n // false=unlimited\n statement_timeout: false,\n\n // Abort any statement that waits longer than the specified duration in milliseconds while attempting to acquire a lock.\n // false=unlimited\n lock_timeout: false,\n\n // Terminate any session with an open transaction that has been idle for longer than the specified duration in milliseconds\n // false=unlimited\n idle_in_transaction_session_timeout: false,\n\n // max milliseconds to wait for query to complete (client side)\n query_timeout: false,\n\n connect_timeout: 0,\n\n keepalives: 1,\n\n keepalives_idle: 0,\n}\n\nconst pgTypes = require('pg-types')\n// save default parsers\nconst parseBigInteger = pgTypes.getTypeParser(20, 'text')\nconst parseBigIntegerArray = pgTypes.getTypeParser(1016, 'text')\n\n// parse int8 so you can get your count values as actual numbers\nmodule.exports.__defineSetter__('parseInt8', function (val) {\n pgTypes.setTypeParser(20, 'text', val ? pgTypes.getTypeParser(23, 'text') : parseBigInteger)\n pgTypes.setTypeParser(1016, 'text', val ? pgTypes.getTypeParser(1007, 'text') : parseBigIntegerArray)\n})\n",
|
|
17
|
+
"'use strict'\n\nconst defaults = require('./defaults')\n\nconst util = require('util')\nconst { isDate } = util.types || util // Node 8 doesn't have `util.types`\n\nfunction escapeElement(elementRepresentation) {\n const escaped = elementRepresentation.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"')\n\n return '\"' + escaped + '\"'\n}\n\n// convert a JS array to a postgres array literal\n// uses comma separator so won't work for types like box that use\n// a different array separator.\nfunction arrayString(val) {\n let result = '{'\n for (let i = 0; i < val.length; i++) {\n if (i > 0) {\n result = result + ','\n }\n if (val[i] === null || typeof val[i] === 'undefined') {\n result = result + 'NULL'\n } else if (Array.isArray(val[i])) {\n result = result + arrayString(val[i])\n } else if (ArrayBuffer.isView(val[i])) {\n let item = val[i]\n if (!(item instanceof Buffer)) {\n const buf = Buffer.from(item.buffer, item.byteOffset, item.byteLength)\n if (buf.length === item.byteLength) {\n item = buf\n } else {\n item = buf.slice(item.byteOffset, item.byteOffset + item.byteLength)\n }\n }\n result += '\\\\\\\\x' + item.toString('hex')\n } else {\n result += escapeElement(prepareValue(val[i]))\n }\n }\n result = result + '}'\n return result\n}\n\n// converts values from javascript types\n// to their 'raw' counterparts for use as a postgres parameter\n// note: you can override this function to provide your own conversion mechanism\n// for complex types, etc...\nconst prepareValue = function (val, seen) {\n // null and undefined are both null for postgres\n if (val == null) {\n return null\n }\n if (typeof val === 'object') {\n if (val instanceof Buffer) {\n return val\n }\n if (ArrayBuffer.isView(val)) {\n const buf = Buffer.from(val.buffer, val.byteOffset, val.byteLength)\n if (buf.length === val.byteLength) {\n return buf\n }\n return buf.slice(val.byteOffset, val.byteOffset + val.byteLength) // Node.js v4 does not support those Buffer.from params\n }\n if (isDate(val)) {\n if (defaults.parseInputDatesAsUTC) {\n return dateToStringUTC(val)\n } else {\n return dateToString(val)\n }\n }\n if (Array.isArray(val)) {\n return arrayString(val)\n }\n\n return prepareObject(val, seen)\n }\n return val.toString()\n}\n\nfunction prepareObject(val, seen) {\n if (val && typeof val.toPostgres === 'function') {\n seen = seen || []\n if (seen.indexOf(val) !== -1) {\n throw new Error('circular reference detected while preparing \"' + val + '\" for query')\n }\n seen.push(val)\n\n return prepareValue(val.toPostgres(prepareValue), seen)\n }\n return JSON.stringify(val)\n}\n\nfunction dateToString(date) {\n let offset = -date.getTimezoneOffset()\n\n let year = date.getFullYear()\n const isBCYear = year < 1\n if (isBCYear) year = Math.abs(year) + 1 // negative years are 1 off their BC representation\n\n let ret =\n String(year).padStart(4, '0') +\n '-' +\n String(date.getMonth() + 1).padStart(2, '0') +\n '-' +\n String(date.getDate()).padStart(2, '0') +\n 'T' +\n String(date.getHours()).padStart(2, '0') +\n ':' +\n String(date.getMinutes()).padStart(2, '0') +\n ':' +\n String(date.getSeconds()).padStart(2, '0') +\n '.' +\n String(date.getMilliseconds()).padStart(3, '0')\n\n if (offset < 0) {\n ret += '-'\n offset *= -1\n } else {\n ret += '+'\n }\n\n ret += String(Math.floor(offset / 60)).padStart(2, '0') + ':' + String(offset % 60).padStart(2, '0')\n if (isBCYear) ret += ' BC'\n return ret\n}\n\nfunction dateToStringUTC(date) {\n let year = date.getUTCFullYear()\n const isBCYear = year < 1\n if (isBCYear) year = Math.abs(year) + 1 // negative years are 1 off their BC representation\n\n let ret =\n String(year).padStart(4, '0') +\n '-' +\n String(date.getUTCMonth() + 1).padStart(2, '0') +\n '-' +\n String(date.getUTCDate()).padStart(2, '0') +\n 'T' +\n String(date.getUTCHours()).padStart(2, '0') +\n ':' +\n String(date.getUTCMinutes()).padStart(2, '0') +\n ':' +\n String(date.getUTCSeconds()).padStart(2, '0') +\n '.' +\n String(date.getUTCMilliseconds()).padStart(3, '0')\n\n ret += '+00:00'\n if (isBCYear) ret += ' BC'\n return ret\n}\n\nfunction normalizeQueryConfig(config, values, callback) {\n // can take in strings or config objects\n config = typeof config === 'string' ? { text: config } : config\n if (values) {\n if (typeof values === 'function') {\n config.callback = values\n } else {\n config.values = values\n }\n }\n if (callback) {\n config.callback = callback\n }\n return config\n}\n\n// Ported from PostgreSQL 9.2.4 source code in src/interfaces/libpq/fe-exec.c\nconst escapeIdentifier = function (str) {\n return '\"' + str.replace(/\"/g, '\"\"') + '\"'\n}\n\nconst escapeLiteral = function (str) {\n let hasBackslash = false\n let escaped = \"'\"\n\n if (str == null) {\n return \"''\"\n }\n\n if (typeof str !== 'string') {\n return \"''\"\n }\n\n for (let i = 0; i < str.length; i++) {\n const c = str[i]\n if (c === \"'\") {\n escaped += c + c\n } else if (c === '\\\\') {\n escaped += c + c\n hasBackslash = true\n } else {\n escaped += c\n }\n }\n\n escaped += \"'\"\n\n if (hasBackslash === true) {\n escaped = ' E' + escaped\n }\n\n return escaped\n}\n\nmodule.exports = {\n prepareValue: function prepareValueWrapper(value) {\n // this ensures that extra arguments do not get passed into prepareValue\n // by accident, eg: from calling values.map(utils.prepareValue)\n return prepareValue(value)\n },\n normalizeQueryConfig,\n escapeIdentifier,\n escapeLiteral,\n}\n",
|
|
18
|
+
"'use strict'\n// This file contains crypto utility functions for versions of Node.js < 15.0.0,\n// which does not support the WebCrypto.subtle API.\n\nconst nodeCrypto = require('crypto')\n\nfunction md5(string) {\n return nodeCrypto.createHash('md5').update(string, 'utf-8').digest('hex')\n}\n\n// See AuthenticationMD5Password at https://www.postgresql.org/docs/current/static/protocol-flow.html\nfunction postgresMd5PasswordHash(user, password, salt) {\n const inner = md5(password + user)\n const outer = md5(Buffer.concat([Buffer.from(inner), salt]))\n return 'md5' + outer\n}\n\nfunction sha256(text) {\n return nodeCrypto.createHash('sha256').update(text).digest()\n}\n\nfunction hashByName(hashName, text) {\n hashName = hashName.replace(/(\\D)-/, '$1') // e.g. SHA-256 -> SHA256\n return nodeCrypto.createHash(hashName).update(text).digest()\n}\n\nfunction hmacSha256(key, msg) {\n return nodeCrypto.createHmac('sha256', key).update(msg).digest()\n}\n\nasync function deriveKey(password, salt, iterations) {\n return nodeCrypto.pbkdf2Sync(password, salt, iterations, 32, 'sha256')\n}\n\nmodule.exports = {\n postgresMd5PasswordHash,\n randomBytes: nodeCrypto.randomBytes,\n deriveKey,\n sha256,\n hashByName,\n hmacSha256,\n md5,\n}\n",
|
|
19
|
+
"const nodeCrypto = require('crypto')\n\nmodule.exports = {\n postgresMd5PasswordHash,\n randomBytes,\n deriveKey,\n sha256,\n hashByName,\n hmacSha256,\n md5,\n}\n\n/**\n * The Web Crypto API - grabbed from the Node.js library or the global\n * @type Crypto\n */\n// eslint-disable-next-line no-undef\nconst webCrypto = nodeCrypto.webcrypto || globalThis.crypto\n/**\n * The SubtleCrypto API for low level crypto operations.\n * @type SubtleCrypto\n */\nconst subtleCrypto = webCrypto.subtle\nconst textEncoder = new TextEncoder()\n\n/**\n *\n * @param {*} length\n * @returns\n */\nfunction randomBytes(length) {\n return webCrypto.getRandomValues(Buffer.alloc(length))\n}\n\nasync function md5(string) {\n try {\n return nodeCrypto.createHash('md5').update(string, 'utf-8').digest('hex')\n } catch (e) {\n // `createHash()` failed so we are probably not in Node.js, use the WebCrypto API instead.\n // Note that the MD5 algorithm on WebCrypto is not available in Node.js.\n // This is why we cannot just use WebCrypto in all environments.\n const data = typeof string === 'string' ? textEncoder.encode(string) : string\n const hash = await subtleCrypto.digest('MD5', data)\n return Array.from(new Uint8Array(hash))\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('')\n }\n}\n\n// See AuthenticationMD5Password at https://www.postgresql.org/docs/current/static/protocol-flow.html\nasync function postgresMd5PasswordHash(user, password, salt) {\n const inner = await md5(password + user)\n const outer = await md5(Buffer.concat([Buffer.from(inner), salt]))\n return 'md5' + outer\n}\n\n/**\n * Create a SHA-256 digest of the given data\n * @param {Buffer} data\n */\nasync function sha256(text) {\n return await subtleCrypto.digest('SHA-256', text)\n}\n\nasync function hashByName(hashName, text) {\n return await subtleCrypto.digest(hashName, text)\n}\n\n/**\n * Sign the message with the given key\n * @param {ArrayBuffer} keyBuffer\n * @param {string} msg\n */\nasync function hmacSha256(keyBuffer, msg) {\n const key = await subtleCrypto.importKey('raw', keyBuffer, { name: 'HMAC', hash: 'SHA-256' }, false, ['sign'])\n return await subtleCrypto.sign('HMAC', key, textEncoder.encode(msg))\n}\n\n/**\n * Derive a key from the password and salt\n * @param {string} password\n * @param {Uint8Array} salt\n * @param {number} iterations\n */\nasync function deriveKey(password, salt, iterations) {\n const key = await subtleCrypto.importKey('raw', textEncoder.encode(password), 'PBKDF2', false, ['deriveBits'])\n const params = { name: 'PBKDF2', hash: 'SHA-256', salt: salt, iterations: iterations }\n return await subtleCrypto.deriveBits(params, key, 32 * 8, ['deriveBits'])\n}\n",
|
|
20
|
+
"'use strict'\n\nconst useLegacyCrypto = parseInt(process.versions && process.versions.node && process.versions.node.split('.')[0]) < 15\nif (useLegacyCrypto) {\n // We are on an old version of Node.js that requires legacy crypto utilities.\n module.exports = require('./utils-legacy')\n} else {\n module.exports = require('./utils-webcrypto')\n}\n",
|
|
21
|
+
"function x509Error(msg, cert) {\n return new Error('SASL channel binding: ' + msg + ' when parsing public certificate ' + cert.toString('base64'))\n}\n\nfunction readASN1Length(data, index) {\n let length = data[index++]\n if (length < 0x80) return { length, index }\n\n const lengthBytes = length & 0x7f\n if (lengthBytes > 4) throw x509Error('bad length', data)\n\n length = 0\n for (let i = 0; i < lengthBytes; i++) {\n length = (length << 8) | data[index++]\n }\n\n return { length, index }\n}\n\nfunction readASN1OID(data, index) {\n if (data[index++] !== 0x6) throw x509Error('non-OID data', data) // 6 = OID\n\n const { length: OIDLength, index: indexAfterOIDLength } = readASN1Length(data, index)\n index = indexAfterOIDLength\n const lastIndex = index + OIDLength\n\n const byte1 = data[index++]\n let oid = ((byte1 / 40) >> 0) + '.' + (byte1 % 40)\n\n while (index < lastIndex) {\n // loop over numbers in OID\n let value = 0\n while (index < lastIndex) {\n // loop over bytes in number\n const nextByte = data[index++]\n value = (value << 7) | (nextByte & 0x7f)\n if (nextByte < 0x80) break\n }\n oid += '.' + value\n }\n\n return { oid, index }\n}\n\nfunction expectASN1Seq(data, index) {\n if (data[index++] !== 0x30) throw x509Error('non-sequence data', data) // 30 = Sequence\n return readASN1Length(data, index)\n}\n\nfunction signatureAlgorithmHashFromCertificate(data, index) {\n // read this thread: https://www.postgresql.org/message-id/17760-b6c61e752ec07060%40postgresql.org\n if (index === undefined) index = 0\n index = expectASN1Seq(data, index).index\n const { length: certInfoLength, index: indexAfterCertInfoLength } = expectASN1Seq(data, index)\n index = indexAfterCertInfoLength + certInfoLength // skip over certificate info\n index = expectASN1Seq(data, index).index // skip over signature length field\n const { oid, index: indexAfterOID } = readASN1OID(data, index)\n switch (oid) {\n // RSA\n case '1.2.840.113549.1.1.4':\n return 'MD5'\n case '1.2.840.113549.1.1.5':\n return 'SHA-1'\n case '1.2.840.113549.1.1.11':\n return 'SHA-256'\n case '1.2.840.113549.1.1.12':\n return 'SHA-384'\n case '1.2.840.113549.1.1.13':\n return 'SHA-512'\n case '1.2.840.113549.1.1.14':\n return 'SHA-224'\n case '1.2.840.113549.1.1.15':\n return 'SHA512-224'\n case '1.2.840.113549.1.1.16':\n return 'SHA512-256'\n // ECDSA\n case '1.2.840.10045.4.1':\n return 'SHA-1'\n case '1.2.840.10045.4.3.1':\n return 'SHA-224'\n case '1.2.840.10045.4.3.2':\n return 'SHA-256'\n case '1.2.840.10045.4.3.3':\n return 'SHA-384'\n case '1.2.840.10045.4.3.4':\n return 'SHA-512'\n // RSASSA-PSS: hash is indicated separately\n case '1.2.840.113549.1.1.10': {\n index = indexAfterOID\n index = expectASN1Seq(data, index).index\n if (data[index++] !== 0xa0) throw x509Error('non-tag data', data) // a0 = constructed tag 0\n index = readASN1Length(data, index).index // skip over tag length field\n index = expectASN1Seq(data, index).index // skip over sequence length field\n const { oid: hashOID } = readASN1OID(data, index)\n switch (hashOID) {\n // standalone hash OIDs\n case '1.2.840.113549.2.5':\n return 'MD5'\n case '1.3.14.3.2.26':\n return 'SHA-1'\n case '2.16.840.1.101.3.4.2.1':\n return 'SHA-256'\n case '2.16.840.1.101.3.4.2.2':\n return 'SHA-384'\n case '2.16.840.1.101.3.4.2.3':\n return 'SHA-512'\n }\n throw x509Error('unknown hash OID ' + hashOID, data)\n }\n // Ed25519 -- see https: return//github.com/openssl/openssl/issues/15477\n case '1.3.101.110':\n case '1.3.101.112': // ph\n return 'SHA-512'\n // Ed448 -- still not in pg 17.2 (if supported, digest would be SHAKE256 x 64 bytes)\n case '1.3.101.111':\n case '1.3.101.113': // ph\n throw x509Error('Ed448 certificate channel binding is not currently supported by Postgres')\n }\n throw x509Error('unknown OID ' + oid, data)\n}\n\nmodule.exports = { signatureAlgorithmHashFromCertificate }\n",
|
|
22
|
+
"'use strict'\nconst crypto = require('./utils')\nconst { signatureAlgorithmHashFromCertificate } = require('./cert-signatures')\n\nfunction startSession(mechanisms, stream) {\n const candidates = ['SCRAM-SHA-256']\n if (stream) candidates.unshift('SCRAM-SHA-256-PLUS') // higher-priority, so placed first\n\n const mechanism = candidates.find((candidate) => mechanisms.includes(candidate))\n\n if (!mechanism) {\n throw new Error('SASL: Only mechanism(s) ' + candidates.join(' and ') + ' are supported')\n }\n\n if (mechanism === 'SCRAM-SHA-256-PLUS' && typeof stream.getPeerCertificate !== 'function') {\n // this should never happen if we are really talking to a Postgres server\n throw new Error('SASL: Mechanism SCRAM-SHA-256-PLUS requires a certificate')\n }\n\n const clientNonce = crypto.randomBytes(18).toString('base64')\n const gs2Header = mechanism === 'SCRAM-SHA-256-PLUS' ? 'p=tls-server-end-point' : stream ? 'y' : 'n'\n\n return {\n mechanism,\n clientNonce,\n response: gs2Header + ',,n=*,r=' + clientNonce,\n message: 'SASLInitialResponse',\n }\n}\n\nasync function continueSession(session, password, serverData, stream) {\n if (session.message !== 'SASLInitialResponse') {\n throw new Error('SASL: Last message was not SASLInitialResponse')\n }\n if (typeof password !== 'string') {\n throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: client password must be a string')\n }\n if (password === '') {\n throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: client password must be a non-empty string')\n }\n if (typeof serverData !== 'string') {\n throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: serverData must be a string')\n }\n\n const sv = parseServerFirstMessage(serverData)\n\n if (!sv.nonce.startsWith(session.clientNonce)) {\n throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: server nonce does not start with client nonce')\n } else if (sv.nonce.length === session.clientNonce.length) {\n throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: server nonce is too short')\n }\n\n const clientFirstMessageBare = 'n=*,r=' + session.clientNonce\n const serverFirstMessage = 'r=' + sv.nonce + ',s=' + sv.salt + ',i=' + sv.iteration\n\n // without channel binding:\n let channelBinding = stream ? 'eSws' : 'biws' // 'y,,' or 'n,,', base64-encoded\n\n // override if channel binding is in use:\n if (session.mechanism === 'SCRAM-SHA-256-PLUS') {\n const peerCert = stream.getPeerCertificate().raw\n let hashName = signatureAlgorithmHashFromCertificate(peerCert)\n if (hashName === 'MD5' || hashName === 'SHA-1') hashName = 'SHA-256'\n const certHash = await crypto.hashByName(hashName, peerCert)\n const bindingData = Buffer.concat([Buffer.from('p=tls-server-end-point,,'), Buffer.from(certHash)])\n channelBinding = bindingData.toString('base64')\n }\n\n const clientFinalMessageWithoutProof = 'c=' + channelBinding + ',r=' + sv.nonce\n const authMessage = clientFirstMessageBare + ',' + serverFirstMessage + ',' + clientFinalMessageWithoutProof\n\n const saltBytes = Buffer.from(sv.salt, 'base64')\n const saltedPassword = await crypto.deriveKey(password, saltBytes, sv.iteration)\n const clientKey = await crypto.hmacSha256(saltedPassword, 'Client Key')\n const storedKey = await crypto.sha256(clientKey)\n const clientSignature = await crypto.hmacSha256(storedKey, authMessage)\n const clientProof = xorBuffers(Buffer.from(clientKey), Buffer.from(clientSignature)).toString('base64')\n const serverKey = await crypto.hmacSha256(saltedPassword, 'Server Key')\n const serverSignatureBytes = await crypto.hmacSha256(serverKey, authMessage)\n\n session.message = 'SASLResponse'\n session.serverSignature = Buffer.from(serverSignatureBytes).toString('base64')\n session.response = clientFinalMessageWithoutProof + ',p=' + clientProof\n}\n\nfunction finalizeSession(session, serverData) {\n if (session.message !== 'SASLResponse') {\n throw new Error('SASL: Last message was not SASLResponse')\n }\n if (typeof serverData !== 'string') {\n throw new Error('SASL: SCRAM-SERVER-FINAL-MESSAGE: serverData must be a string')\n }\n\n const { serverSignature } = parseServerFinalMessage(serverData)\n\n if (serverSignature !== session.serverSignature) {\n throw new Error('SASL: SCRAM-SERVER-FINAL-MESSAGE: server signature does not match')\n }\n}\n\n/**\n * printable = %x21-2B / %x2D-7E\n * ;; Printable ASCII except \",\".\n * ;; Note that any \"printable\" is also\n * ;; a valid \"value\".\n */\nfunction isPrintableChars(text) {\n if (typeof text !== 'string') {\n throw new TypeError('SASL: text must be a string')\n }\n return text\n .split('')\n .map((_, i) => text.charCodeAt(i))\n .every((c) => (c >= 0x21 && c <= 0x2b) || (c >= 0x2d && c <= 0x7e))\n}\n\n/**\n * base64-char = ALPHA / DIGIT / \"/\" / \"+\"\n *\n * base64-4 = 4base64-char\n *\n * base64-3 = 3base64-char \"=\"\n *\n * base64-2 = 2base64-char \"==\"\n *\n * base64 = *base64-4 [base64-3 / base64-2]\n */\nfunction isBase64(text) {\n return /^(?:[a-zA-Z0-9+/]{4})*(?:[a-zA-Z0-9+/]{2}==|[a-zA-Z0-9+/]{3}=)?$/.test(text)\n}\n\nfunction parseAttributePairs(text) {\n if (typeof text !== 'string') {\n throw new TypeError('SASL: attribute pairs text must be a string')\n }\n\n return new Map(\n text.split(',').map((attrValue) => {\n if (!/^.=/.test(attrValue)) {\n throw new Error('SASL: Invalid attribute pair entry')\n }\n const name = attrValue[0]\n const value = attrValue.substring(2)\n return [name, value]\n })\n )\n}\n\nfunction parseServerFirstMessage(data) {\n const attrPairs = parseAttributePairs(data)\n\n const nonce = attrPairs.get('r')\n if (!nonce) {\n throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: nonce missing')\n } else if (!isPrintableChars(nonce)) {\n throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: nonce must only contain printable characters')\n }\n const salt = attrPairs.get('s')\n if (!salt) {\n throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: salt missing')\n } else if (!isBase64(salt)) {\n throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: salt must be base64')\n }\n const iterationText = attrPairs.get('i')\n if (!iterationText) {\n throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: iteration missing')\n } else if (!/^[1-9][0-9]*$/.test(iterationText)) {\n throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: invalid iteration count')\n }\n const iteration = parseInt(iterationText, 10)\n\n return {\n nonce,\n salt,\n iteration,\n }\n}\n\nfunction parseServerFinalMessage(serverData) {\n const attrPairs = parseAttributePairs(serverData)\n const serverSignature = attrPairs.get('v')\n if (!serverSignature) {\n throw new Error('SASL: SCRAM-SERVER-FINAL-MESSAGE: server signature is missing')\n } else if (!isBase64(serverSignature)) {\n throw new Error('SASL: SCRAM-SERVER-FINAL-MESSAGE: server signature must be base64')\n }\n return {\n serverSignature,\n }\n}\n\nfunction xorBuffers(a, b) {\n if (!Buffer.isBuffer(a)) {\n throw new TypeError('first argument must be a Buffer')\n }\n if (!Buffer.isBuffer(b)) {\n throw new TypeError('second argument must be a Buffer')\n }\n if (a.length !== b.length) {\n throw new Error('Buffer lengths must match')\n }\n if (a.length === 0) {\n throw new Error('Buffers cannot be empty')\n }\n return Buffer.from(a.map((_, i) => a[i] ^ b[i]))\n}\n\nmodule.exports = {\n startSession,\n continueSession,\n finalizeSession,\n}\n",
|
|
23
|
+
"'use strict'\n\nconst types = require('pg-types')\n\nfunction TypeOverrides(userTypes) {\n this._types = userTypes || types\n this.text = {}\n this.binary = {}\n}\n\nTypeOverrides.prototype.getOverrides = function (format) {\n switch (format) {\n case 'text':\n return this.text\n case 'binary':\n return this.binary\n default:\n return {}\n }\n}\n\nTypeOverrides.prototype.setTypeParser = function (oid, format, parseFn) {\n if (typeof format === 'function') {\n parseFn = format\n format = 'text'\n }\n this.getOverrides(format)[oid] = parseFn\n}\n\nTypeOverrides.prototype.getTypeParser = function (oid, format) {\n format = format || 'text'\n return this.getOverrides(format)[oid] || this._types.getTypeParser(oid, format)\n}\n\nmodule.exports = TypeOverrides\n",
|
|
24
|
+
"'use strict'\n\n//Parse method copied from https://github.com/brianc/node-postgres\n//Copyright (c) 2010-2014 Brian Carlson (brian.m.carlson@gmail.com)\n//MIT License\n\n//parses a connection string\nfunction parse(str, options = {}) {\n //unix socket\n if (str.charAt(0) === '/') {\n const config = str.split(' ')\n return { host: config[0], database: config[1] }\n }\n\n // Check for empty host in URL\n\n const config = {}\n let result\n let dummyHost = false\n if (/ |%[^a-f0-9]|%[a-f0-9][^a-f0-9]/i.test(str)) {\n // Ensure spaces are encoded as %20\n str = encodeURI(str).replace(/%25(\\d\\d)/g, '%$1')\n }\n\n try {\n try {\n result = new URL(str, 'postgres://base')\n } catch (e) {\n // The URL is invalid so try again with a dummy host\n result = new URL(str.replace('@/', '@___DUMMY___/'), 'postgres://base')\n dummyHost = true\n }\n } catch (err) {\n // Remove the input from the error message to avoid leaking sensitive information\n err.input && (err.input = '*****REDACTED*****')\n }\n\n // We'd like to use Object.fromEntries() here but Node.js 10 does not support it\n for (const entry of result.searchParams.entries()) {\n config[entry[0]] = entry[1]\n }\n\n config.user = config.user || decodeURIComponent(result.username)\n config.password = config.password || decodeURIComponent(result.password)\n\n if (result.protocol == 'socket:') {\n config.host = decodeURI(result.pathname)\n config.database = result.searchParams.get('db')\n config.client_encoding = result.searchParams.get('encoding')\n return config\n }\n const hostname = dummyHost ? '' : result.hostname\n if (!config.host) {\n // Only set the host if there is no equivalent query param.\n config.host = decodeURIComponent(hostname)\n } else if (hostname && /^%2f/i.test(hostname)) {\n // Only prepend the hostname to the pathname if it is not a URL encoded Unix socket host.\n result.pathname = hostname + result.pathname\n }\n if (!config.port) {\n // Only set the port if there is no equivalent query param.\n config.port = result.port\n }\n\n const pathname = result.pathname.slice(1) || null\n config.database = pathname ? decodeURI(pathname) : null\n\n if (config.ssl === 'true' || config.ssl === '1') {\n config.ssl = true\n }\n\n if (config.ssl === '0') {\n config.ssl = false\n }\n\n if (config.sslcert || config.sslkey || config.sslrootcert || config.sslmode) {\n config.ssl = {}\n }\n\n // Only try to load fs if we expect to read from the disk\n const fs = config.sslcert || config.sslkey || config.sslrootcert ? require('fs') : null\n\n if (config.sslcert) {\n config.ssl.cert = fs.readFileSync(config.sslcert).toString()\n }\n\n if (config.sslkey) {\n config.ssl.key = fs.readFileSync(config.sslkey).toString()\n }\n\n if (config.sslrootcert) {\n config.ssl.ca = fs.readFileSync(config.sslrootcert).toString()\n }\n\n if (options.useLibpqCompat && config.uselibpqcompat) {\n throw new Error('Both useLibpqCompat and uselibpqcompat are set. Please use only one of them.')\n }\n\n if (config.uselibpqcompat === 'true' || options.useLibpqCompat) {\n switch (config.sslmode) {\n case 'disable': {\n config.ssl = false\n break\n }\n case 'prefer': {\n config.ssl.rejectUnauthorized = false\n break\n }\n case 'require': {\n if (config.sslrootcert) {\n // If a root CA is specified, behavior of `sslmode=require` will be the same as that of `verify-ca`\n config.ssl.checkServerIdentity = function () {}\n } else {\n config.ssl.rejectUnauthorized = false\n }\n break\n }\n case 'verify-ca': {\n if (!config.ssl.ca) {\n throw new Error(\n 'SECURITY WARNING: Using sslmode=verify-ca requires specifying a CA with sslrootcert. If a public CA is used, verify-ca allows connections to a server that somebody else may have registered with the CA, making you vulnerable to Man-in-the-Middle attacks. Either specify a custom CA certificate with sslrootcert parameter or use sslmode=verify-full for proper security.'\n )\n }\n config.ssl.checkServerIdentity = function () {}\n break\n }\n case 'verify-full': {\n break\n }\n }\n } else {\n switch (config.sslmode) {\n case 'disable': {\n config.ssl = false\n break\n }\n case 'prefer':\n case 'require':\n case 'verify-ca':\n case 'verify-full': {\n break\n }\n case 'no-verify': {\n config.ssl.rejectUnauthorized = false\n break\n }\n }\n }\n\n return config\n}\n\n// convert pg-connection-string ssl config to a ClientConfig.ConnectionOptions\nfunction toConnectionOptions(sslConfig) {\n const connectionOptions = Object.entries(sslConfig).reduce((c, [key, value]) => {\n // we explicitly check for undefined and null instead of `if (value)` because some\n // options accept falsy values. Example: `ssl.rejectUnauthorized = false`\n if (value !== undefined && value !== null) {\n c[key] = value\n }\n\n return c\n }, {})\n\n return connectionOptions\n}\n\n// convert pg-connection-string config to a ClientConfig\nfunction toClientConfig(config) {\n const poolConfig = Object.entries(config).reduce((c, [key, value]) => {\n if (key === 'ssl') {\n const sslConfig = value\n\n if (typeof sslConfig === 'boolean') {\n c[key] = sslConfig\n }\n\n if (typeof sslConfig === 'object') {\n c[key] = toConnectionOptions(sslConfig)\n }\n } else if (value !== undefined && value !== null) {\n if (key === 'port') {\n // when port is not specified, it is converted into an empty string\n // we want to avoid NaN or empty string as a values in ClientConfig\n if (value !== '') {\n const v = parseInt(value, 10)\n if (isNaN(v)) {\n throw new Error(`Invalid ${key}: ${value}`)\n }\n\n c[key] = v\n }\n } else {\n c[key] = value\n }\n }\n\n return c\n }, {})\n\n return poolConfig\n}\n\n// parses a connection string into ClientConfig\nfunction parseIntoClientConfig(str) {\n return toClientConfig(parse(str))\n}\n\nmodule.exports = parse\n\nparse.parse = parse\nparse.toClientConfig = toClientConfig\nparse.parseIntoClientConfig = parseIntoClientConfig\n",
|
|
25
|
+
"'use strict'\n\nconst dns = require('dns')\n\nconst defaults = require('./defaults')\n\nconst parse = require('pg-connection-string').parse // parses a connection string\n\nconst val = function (key, config, envVar) {\n if (envVar === undefined) {\n envVar = process.env['PG' + key.toUpperCase()]\n } else if (envVar === false) {\n // do nothing ... use false\n } else {\n envVar = process.env[envVar]\n }\n\n return config[key] || envVar || defaults[key]\n}\n\nconst readSSLConfigFromEnvironment = function () {\n switch (process.env.PGSSLMODE) {\n case 'disable':\n return false\n case 'prefer':\n case 'require':\n case 'verify-ca':\n case 'verify-full':\n return true\n case 'no-verify':\n return { rejectUnauthorized: false }\n }\n return defaults.ssl\n}\n\n// Convert arg to a string, surround in single quotes, and escape single quotes and backslashes\nconst quoteParamValue = function (value) {\n return \"'\" + ('' + value).replace(/\\\\/g, '\\\\\\\\').replace(/'/g, \"\\\\'\") + \"'\"\n}\n\nconst add = function (params, config, paramName) {\n const value = config[paramName]\n if (value !== undefined && value !== null) {\n params.push(paramName + '=' + quoteParamValue(value))\n }\n}\n\nclass ConnectionParameters {\n constructor(config) {\n // if a string is passed, it is a raw connection string so we parse it into a config\n config = typeof config === 'string' ? parse(config) : config || {}\n\n // if the config has a connectionString defined, parse IT into the config we use\n // this will override other default values with what is stored in connectionString\n if (config.connectionString) {\n config = Object.assign({}, config, parse(config.connectionString))\n }\n\n this.user = val('user', config)\n this.database = val('database', config)\n\n if (this.database === undefined) {\n this.database = this.user\n }\n\n this.port = parseInt(val('port', config), 10)\n this.host = val('host', config)\n\n // \"hiding\" the password so it doesn't show up in stack traces\n // or if the client is console.logged\n Object.defineProperty(this, 'password', {\n configurable: true,\n enumerable: false,\n writable: true,\n value: val('password', config),\n })\n\n this.binary = val('binary', config)\n this.options = val('options', config)\n\n this.ssl = typeof config.ssl === 'undefined' ? readSSLConfigFromEnvironment() : config.ssl\n\n if (typeof this.ssl === 'string') {\n if (this.ssl === 'true') {\n this.ssl = true\n }\n }\n // support passing in ssl=no-verify via connection string\n if (this.ssl === 'no-verify') {\n this.ssl = { rejectUnauthorized: false }\n }\n if (this.ssl && this.ssl.key) {\n Object.defineProperty(this.ssl, 'key', {\n enumerable: false,\n })\n }\n\n this.client_encoding = val('client_encoding', config)\n this.replication = val('replication', config)\n // a domain socket begins with '/'\n this.isDomainSocket = !(this.host || '').indexOf('/')\n\n this.application_name = val('application_name', config, 'PGAPPNAME')\n this.fallback_application_name = val('fallback_application_name', config, false)\n this.statement_timeout = val('statement_timeout', config, false)\n this.lock_timeout = val('lock_timeout', config, false)\n this.idle_in_transaction_session_timeout = val('idle_in_transaction_session_timeout', config, false)\n this.query_timeout = val('query_timeout', config, false)\n\n if (config.connectionTimeoutMillis === undefined) {\n this.connect_timeout = process.env.PGCONNECT_TIMEOUT || 0\n } else {\n this.connect_timeout = Math.floor(config.connectionTimeoutMillis / 1000)\n }\n\n if (config.keepAlive === false) {\n this.keepalives = 0\n } else if (config.keepAlive === true) {\n this.keepalives = 1\n }\n\n if (typeof config.keepAliveInitialDelayMillis === 'number') {\n this.keepalives_idle = Math.floor(config.keepAliveInitialDelayMillis / 1000)\n }\n }\n\n getLibpqConnectionString(cb) {\n const params = []\n add(params, this, 'user')\n add(params, this, 'password')\n add(params, this, 'port')\n add(params, this, 'application_name')\n add(params, this, 'fallback_application_name')\n add(params, this, 'connect_timeout')\n add(params, this, 'options')\n\n const ssl = typeof this.ssl === 'object' ? this.ssl : this.ssl ? { sslmode: this.ssl } : {}\n add(params, ssl, 'sslmode')\n add(params, ssl, 'sslca')\n add(params, ssl, 'sslkey')\n add(params, ssl, 'sslcert')\n add(params, ssl, 'sslrootcert')\n\n if (this.database) {\n params.push('dbname=' + quoteParamValue(this.database))\n }\n if (this.replication) {\n params.push('replication=' + quoteParamValue(this.replication))\n }\n if (this.host) {\n params.push('host=' + quoteParamValue(this.host))\n }\n if (this.isDomainSocket) {\n return cb(null, params.join(' '))\n }\n if (this.client_encoding) {\n params.push('client_encoding=' + quoteParamValue(this.client_encoding))\n }\n dns.lookup(this.host, function (err, address) {\n if (err) return cb(err, null)\n params.push('hostaddr=' + quoteParamValue(address))\n return cb(null, params.join(' '))\n })\n }\n}\n\nmodule.exports = ConnectionParameters\n",
|
|
26
|
+
"'use strict'\n\nconst types = require('pg-types')\n\nconst matchRegexp = /^([A-Za-z]+)(?: (\\d+))?(?: (\\d+))?/\n\n// result object returned from query\n// in the 'end' event and also\n// passed as second argument to provided callback\nclass Result {\n constructor(rowMode, types) {\n this.command = null\n this.rowCount = null\n this.oid = null\n this.rows = []\n this.fields = []\n this._parsers = undefined\n this._types = types\n this.RowCtor = null\n this.rowAsArray = rowMode === 'array'\n if (this.rowAsArray) {\n this.parseRow = this._parseRowAsArray\n }\n this._prebuiltEmptyResultObject = null\n }\n\n // adds a command complete message\n addCommandComplete(msg) {\n let match\n if (msg.text) {\n // pure javascript\n match = matchRegexp.exec(msg.text)\n } else {\n // native bindings\n match = matchRegexp.exec(msg.command)\n }\n if (match) {\n this.command = match[1]\n if (match[3]) {\n // COMMAND OID ROWS\n this.oid = parseInt(match[2], 10)\n this.rowCount = parseInt(match[3], 10)\n } else if (match[2]) {\n // COMMAND ROWS\n this.rowCount = parseInt(match[2], 10)\n }\n }\n }\n\n _parseRowAsArray(rowData) {\n const row = new Array(rowData.length)\n for (let i = 0, len = rowData.length; i < len; i++) {\n const rawValue = rowData[i]\n if (rawValue !== null) {\n row[i] = this._parsers[i](rawValue)\n } else {\n row[i] = null\n }\n }\n return row\n }\n\n parseRow(rowData) {\n const row = { ...this._prebuiltEmptyResultObject }\n for (let i = 0, len = rowData.length; i < len; i++) {\n const rawValue = rowData[i]\n const field = this.fields[i].name\n if (rawValue !== null) {\n const v = this.fields[i].format === 'binary' ? Buffer.from(rawValue) : rawValue\n row[field] = this._parsers[i](v)\n } else {\n row[field] = null\n }\n }\n return row\n }\n\n addRow(row) {\n this.rows.push(row)\n }\n\n addFields(fieldDescriptions) {\n // clears field definitions\n // multiple query statements in 1 action can result in multiple sets\n // of rowDescriptions...eg: 'select NOW(); select 1::int;'\n // you need to reset the fields\n this.fields = fieldDescriptions\n if (this.fields.length) {\n this._parsers = new Array(fieldDescriptions.length)\n }\n\n const row = {}\n\n for (let i = 0; i < fieldDescriptions.length; i++) {\n const desc = fieldDescriptions[i]\n row[desc.name] = null\n\n if (this._types) {\n this._parsers[i] = this._types.getTypeParser(desc.dataTypeID, desc.format || 'text')\n } else {\n this._parsers[i] = types.getTypeParser(desc.dataTypeID, desc.format || 'text')\n }\n }\n\n this._prebuiltEmptyResultObject = { ...row }\n }\n}\n\nmodule.exports = Result\n",
|
|
27
|
+
"'use strict'\n\nconst { EventEmitter } = require('events')\n\nconst Result = require('./result')\nconst utils = require('./utils')\n\nclass Query extends EventEmitter {\n constructor(config, values, callback) {\n super()\n\n config = utils.normalizeQueryConfig(config, values, callback)\n\n this.text = config.text\n this.values = config.values\n this.rows = config.rows\n this.types = config.types\n this.name = config.name\n this.queryMode = config.queryMode\n this.binary = config.binary\n // use unique portal name each time\n this.portal = config.portal || ''\n this.callback = config.callback\n this._rowMode = config.rowMode\n if (process.domain && config.callback) {\n this.callback = process.domain.bind(config.callback)\n }\n this._result = new Result(this._rowMode, this.types)\n\n // potential for multiple results\n this._results = this._result\n this._canceledDueToError = false\n }\n\n requiresPreparation() {\n if (this.queryMode === 'extended') {\n return true\n }\n\n // named queries must always be prepared\n if (this.name) {\n return true\n }\n // always prepare if there are max number of rows expected per\n // portal execution\n if (this.rows) {\n return true\n }\n // don't prepare empty text queries\n if (!this.text) {\n return false\n }\n // prepare if there are values\n if (!this.values) {\n return false\n }\n return this.values.length > 0\n }\n\n _checkForMultirow() {\n // if we already have a result with a command property\n // then we've already executed one query in a multi-statement simple query\n // turn our results into an array of results\n if (this._result.command) {\n if (!Array.isArray(this._results)) {\n this._results = [this._result]\n }\n this._result = new Result(this._rowMode, this._result._types)\n this._results.push(this._result)\n }\n }\n\n // associates row metadata from the supplied\n // message with this query object\n // metadata used when parsing row results\n handleRowDescription(msg) {\n this._checkForMultirow()\n this._result.addFields(msg.fields)\n this._accumulateRows = this.callback || !this.listeners('row').length\n }\n\n handleDataRow(msg) {\n let row\n\n if (this._canceledDueToError) {\n return\n }\n\n try {\n row = this._result.parseRow(msg.fields)\n } catch (err) {\n this._canceledDueToError = err\n return\n }\n\n this.emit('row', row, this._result)\n if (this._accumulateRows) {\n this._result.addRow(row)\n }\n }\n\n handleCommandComplete(msg, connection) {\n this._checkForMultirow()\n this._result.addCommandComplete(msg)\n // need to sync after each command complete of a prepared statement\n // if we were using a row count which results in multiple calls to _getRows\n if (this.rows) {\n connection.sync()\n }\n }\n\n // if a named prepared statement is created with empty query text\n // the backend will send an emptyQuery message but *not* a command complete message\n // since we pipeline sync immediately after execute we don't need to do anything here\n // unless we have rows specified, in which case we did not pipeline the initial sync call\n handleEmptyQuery(connection) {\n if (this.rows) {\n connection.sync()\n }\n }\n\n handleError(err, connection) {\n // need to sync after error during a prepared statement\n if (this._canceledDueToError) {\n err = this._canceledDueToError\n this._canceledDueToError = false\n }\n // if callback supplied do not emit error event as uncaught error\n // events will bubble up to node process\n if (this.callback) {\n return this.callback(err)\n }\n this.emit('error', err)\n }\n\n handleReadyForQuery(con) {\n if (this._canceledDueToError) {\n return this.handleError(this._canceledDueToError, con)\n }\n if (this.callback) {\n try {\n this.callback(null, this._results)\n } catch (err) {\n process.nextTick(() => {\n throw err\n })\n }\n }\n this.emit('end', this._results)\n }\n\n submit(connection) {\n if (typeof this.text !== 'string' && typeof this.name !== 'string') {\n return new Error('A query must have either text or a name. Supplying neither is unsupported.')\n }\n const previous = connection.parsedStatements[this.name]\n if (this.text && previous && this.text !== previous) {\n return new Error(`Prepared statements must be unique - '${this.name}' was used for a different statement`)\n }\n if (this.values && !Array.isArray(this.values)) {\n return new Error('Query values must be an array')\n }\n if (this.requiresPreparation()) {\n // If we're using the extended query protocol we fire off several separate commands\n // to the backend. On some versions of node & some operating system versions\n // the network stack writes each message separately instead of buffering them together\n // causing the client & network to send more slowly. Corking & uncorking the stream\n // allows node to buffer up the messages internally before sending them all off at once.\n // note: we're checking for existence of cork/uncork because some versions of streams\n // might not have this (cloudflare?)\n connection.stream.cork && connection.stream.cork()\n try {\n this.prepare(connection)\n } finally {\n // while unlikely for this.prepare to throw, if it does & we don't uncork this stream\n // this client becomes unresponsive, so put in finally block \"just in case\"\n connection.stream.uncork && connection.stream.uncork()\n }\n } else {\n connection.query(this.text)\n }\n return null\n }\n\n hasBeenParsed(connection) {\n return this.name && connection.parsedStatements[this.name]\n }\n\n handlePortalSuspended(connection) {\n this._getRows(connection, this.rows)\n }\n\n _getRows(connection, rows) {\n connection.execute({\n portal: this.portal,\n rows: rows,\n })\n // if we're not reading pages of rows send the sync command\n // to indicate the pipeline is finished\n if (!rows) {\n connection.sync()\n } else {\n // otherwise flush the call out to read more rows\n connection.flush()\n }\n }\n\n // http://developer.postgresql.org/pgdocs/postgres/protocol-flow.html#PROTOCOL-FLOW-EXT-QUERY\n prepare(connection) {\n // TODO refactor this poor encapsulation\n if (!this.hasBeenParsed(connection)) {\n connection.parse({\n text: this.text,\n name: this.name,\n types: this.types,\n })\n }\n\n // because we're mapping user supplied values to\n // postgres wire protocol compatible values it could\n // throw an exception, so try/catch this section\n try {\n connection.bind({\n portal: this.portal,\n statement: this.name,\n values: this.values,\n binary: this.binary,\n valueMapper: utils.prepareValue,\n })\n } catch (err) {\n this.handleError(err, connection)\n return\n }\n\n connection.describe({\n type: 'P',\n name: this.portal || '',\n })\n\n this._getRows(connection, this.rows)\n }\n\n handleCopyInResponse(connection) {\n connection.sendCopyFail('No source stream defined')\n }\n\n handleCopyData(msg, connection) {\n // noop\n }\n}\n\nmodule.exports = Query\n",
|
|
28
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.NoticeMessage = exports.DataRowMessage = exports.CommandCompleteMessage = exports.ReadyForQueryMessage = exports.NotificationResponseMessage = exports.BackendKeyDataMessage = exports.AuthenticationMD5Password = exports.ParameterStatusMessage = exports.ParameterDescriptionMessage = exports.RowDescriptionMessage = exports.Field = exports.CopyResponse = exports.CopyDataMessage = exports.DatabaseError = exports.copyDone = exports.emptyQuery = exports.replicationStart = exports.portalSuspended = exports.noData = exports.closeComplete = exports.bindComplete = exports.parseComplete = void 0;\nexports.parseComplete = {\n name: 'parseComplete',\n length: 5,\n};\nexports.bindComplete = {\n name: 'bindComplete',\n length: 5,\n};\nexports.closeComplete = {\n name: 'closeComplete',\n length: 5,\n};\nexports.noData = {\n name: 'noData',\n length: 5,\n};\nexports.portalSuspended = {\n name: 'portalSuspended',\n length: 5,\n};\nexports.replicationStart = {\n name: 'replicationStart',\n length: 4,\n};\nexports.emptyQuery = {\n name: 'emptyQuery',\n length: 4,\n};\nexports.copyDone = {\n name: 'copyDone',\n length: 4,\n};\nclass DatabaseError extends Error {\n constructor(message, length, name) {\n super(message);\n this.length = length;\n this.name = name;\n }\n}\nexports.DatabaseError = DatabaseError;\nclass CopyDataMessage {\n constructor(length, chunk) {\n this.length = length;\n this.chunk = chunk;\n this.name = 'copyData';\n }\n}\nexports.CopyDataMessage = CopyDataMessage;\nclass CopyResponse {\n constructor(length, name, binary, columnCount) {\n this.length = length;\n this.name = name;\n this.binary = binary;\n this.columnTypes = new Array(columnCount);\n }\n}\nexports.CopyResponse = CopyResponse;\nclass Field {\n constructor(name, tableID, columnID, dataTypeID, dataTypeSize, dataTypeModifier, format) {\n this.name = name;\n this.tableID = tableID;\n this.columnID = columnID;\n this.dataTypeID = dataTypeID;\n this.dataTypeSize = dataTypeSize;\n this.dataTypeModifier = dataTypeModifier;\n this.format = format;\n }\n}\nexports.Field = Field;\nclass RowDescriptionMessage {\n constructor(length, fieldCount) {\n this.length = length;\n this.fieldCount = fieldCount;\n this.name = 'rowDescription';\n this.fields = new Array(this.fieldCount);\n }\n}\nexports.RowDescriptionMessage = RowDescriptionMessage;\nclass ParameterDescriptionMessage {\n constructor(length, parameterCount) {\n this.length = length;\n this.parameterCount = parameterCount;\n this.name = 'parameterDescription';\n this.dataTypeIDs = new Array(this.parameterCount);\n }\n}\nexports.ParameterDescriptionMessage = ParameterDescriptionMessage;\nclass ParameterStatusMessage {\n constructor(length, parameterName, parameterValue) {\n this.length = length;\n this.parameterName = parameterName;\n this.parameterValue = parameterValue;\n this.name = 'parameterStatus';\n }\n}\nexports.ParameterStatusMessage = ParameterStatusMessage;\nclass AuthenticationMD5Password {\n constructor(length, salt) {\n this.length = length;\n this.salt = salt;\n this.name = 'authenticationMD5Password';\n }\n}\nexports.AuthenticationMD5Password = AuthenticationMD5Password;\nclass BackendKeyDataMessage {\n constructor(length, processID, secretKey) {\n this.length = length;\n this.processID = processID;\n this.secretKey = secretKey;\n this.name = 'backendKeyData';\n }\n}\nexports.BackendKeyDataMessage = BackendKeyDataMessage;\nclass NotificationResponseMessage {\n constructor(length, processId, channel, payload) {\n this.length = length;\n this.processId = processId;\n this.channel = channel;\n this.payload = payload;\n this.name = 'notification';\n }\n}\nexports.NotificationResponseMessage = NotificationResponseMessage;\nclass ReadyForQueryMessage {\n constructor(length, status) {\n this.length = length;\n this.status = status;\n this.name = 'readyForQuery';\n }\n}\nexports.ReadyForQueryMessage = ReadyForQueryMessage;\nclass CommandCompleteMessage {\n constructor(length, text) {\n this.length = length;\n this.text = text;\n this.name = 'commandComplete';\n }\n}\nexports.CommandCompleteMessage = CommandCompleteMessage;\nclass DataRowMessage {\n constructor(length, fields) {\n this.length = length;\n this.fields = fields;\n this.name = 'dataRow';\n this.fieldCount = fields.length;\n }\n}\nexports.DataRowMessage = DataRowMessage;\nclass NoticeMessage {\n constructor(length, message) {\n this.length = length;\n this.message = message;\n this.name = 'notice';\n }\n}\nexports.NoticeMessage = NoticeMessage;\n//# sourceMappingURL=messages.js.map",
|
|
29
|
+
"\"use strict\";\n//binary data writer tuned for encoding binary specific to the postgres binary protocol\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Writer = void 0;\nclass Writer {\n constructor(size = 256) {\n this.size = size;\n this.offset = 5;\n this.headerPosition = 0;\n this.buffer = Buffer.allocUnsafe(size);\n }\n ensure(size) {\n const remaining = this.buffer.length - this.offset;\n if (remaining < size) {\n const oldBuffer = this.buffer;\n // exponential growth factor of around ~ 1.5\n // https://stackoverflow.com/questions/2269063/buffer-growth-strategy\n const newSize = oldBuffer.length + (oldBuffer.length >> 1) + size;\n this.buffer = Buffer.allocUnsafe(newSize);\n oldBuffer.copy(this.buffer);\n }\n }\n addInt32(num) {\n this.ensure(4);\n this.buffer[this.offset++] = (num >>> 24) & 0xff;\n this.buffer[this.offset++] = (num >>> 16) & 0xff;\n this.buffer[this.offset++] = (num >>> 8) & 0xff;\n this.buffer[this.offset++] = (num >>> 0) & 0xff;\n return this;\n }\n addInt16(num) {\n this.ensure(2);\n this.buffer[this.offset++] = (num >>> 8) & 0xff;\n this.buffer[this.offset++] = (num >>> 0) & 0xff;\n return this;\n }\n addCString(string) {\n if (!string) {\n this.ensure(1);\n }\n else {\n const len = Buffer.byteLength(string);\n this.ensure(len + 1); // +1 for null terminator\n this.buffer.write(string, this.offset, 'utf-8');\n this.offset += len;\n }\n this.buffer[this.offset++] = 0; // null terminator\n return this;\n }\n addString(string = '') {\n const len = Buffer.byteLength(string);\n this.ensure(len);\n this.buffer.write(string, this.offset);\n this.offset += len;\n return this;\n }\n add(otherBuffer) {\n this.ensure(otherBuffer.length);\n otherBuffer.copy(this.buffer, this.offset);\n this.offset += otherBuffer.length;\n return this;\n }\n join(code) {\n if (code) {\n this.buffer[this.headerPosition] = code;\n //length is everything in this packet minus the code\n const length = this.offset - (this.headerPosition + 1);\n this.buffer.writeInt32BE(length, this.headerPosition + 1);\n }\n return this.buffer.slice(code ? 0 : 5, this.offset);\n }\n flush(code) {\n const result = this.join(code);\n this.offset = 5;\n this.headerPosition = 0;\n this.buffer = Buffer.allocUnsafe(this.size);\n return result;\n }\n}\nexports.Writer = Writer;\n//# sourceMappingURL=buffer-writer.js.map",
|
|
30
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.serialize = void 0;\nconst buffer_writer_1 = require(\"./buffer-writer\");\nconst writer = new buffer_writer_1.Writer();\nconst startup = (opts) => {\n // protocol version\n writer.addInt16(3).addInt16(0);\n for (const key of Object.keys(opts)) {\n writer.addCString(key).addCString(opts[key]);\n }\n writer.addCString('client_encoding').addCString('UTF8');\n const bodyBuffer = writer.addCString('').flush();\n // this message is sent without a code\n const length = bodyBuffer.length + 4;\n return new buffer_writer_1.Writer().addInt32(length).add(bodyBuffer).flush();\n};\nconst requestSsl = () => {\n const response = Buffer.allocUnsafe(8);\n response.writeInt32BE(8, 0);\n response.writeInt32BE(80877103, 4);\n return response;\n};\nconst password = (password) => {\n return writer.addCString(password).flush(112 /* code.startup */);\n};\nconst sendSASLInitialResponseMessage = function (mechanism, initialResponse) {\n // 0x70 = 'p'\n writer.addCString(mechanism).addInt32(Buffer.byteLength(initialResponse)).addString(initialResponse);\n return writer.flush(112 /* code.startup */);\n};\nconst sendSCRAMClientFinalMessage = function (additionalData) {\n return writer.addString(additionalData).flush(112 /* code.startup */);\n};\nconst query = (text) => {\n return writer.addCString(text).flush(81 /* code.query */);\n};\nconst emptyArray = [];\nconst parse = (query) => {\n // expect something like this:\n // { name: 'queryName',\n // text: 'select * from blah',\n // types: ['int8', 'bool'] }\n // normalize missing query names to allow for null\n const name = query.name || '';\n if (name.length > 63) {\n console.error('Warning! Postgres only supports 63 characters for query names.');\n console.error('You supplied %s (%s)', name, name.length);\n console.error('This can cause conflicts and silent errors executing queries');\n }\n const types = query.types || emptyArray;\n const len = types.length;\n const buffer = writer\n .addCString(name) // name of query\n .addCString(query.text) // actual query text\n .addInt16(len);\n for (let i = 0; i < len; i++) {\n buffer.addInt32(types[i]);\n }\n return writer.flush(80 /* code.parse */);\n};\nconst paramWriter = new buffer_writer_1.Writer();\nconst writeValues = function (values, valueMapper) {\n for (let i = 0; i < values.length; i++) {\n const mappedVal = valueMapper ? valueMapper(values[i], i) : values[i];\n if (mappedVal == null) {\n // add the param type (string) to the writer\n writer.addInt16(0 /* ParamType.STRING */);\n // write -1 to the param writer to indicate null\n paramWriter.addInt32(-1);\n }\n else if (mappedVal instanceof Buffer) {\n // add the param type (binary) to the writer\n writer.addInt16(1 /* ParamType.BINARY */);\n // add the buffer to the param writer\n paramWriter.addInt32(mappedVal.length);\n paramWriter.add(mappedVal);\n }\n else {\n // add the param type (string) to the writer\n writer.addInt16(0 /* ParamType.STRING */);\n paramWriter.addInt32(Buffer.byteLength(mappedVal));\n paramWriter.addString(mappedVal);\n }\n }\n};\nconst bind = (config = {}) => {\n // normalize config\n const portal = config.portal || '';\n const statement = config.statement || '';\n const binary = config.binary || false;\n const values = config.values || emptyArray;\n const len = values.length;\n writer.addCString(portal).addCString(statement);\n writer.addInt16(len);\n writeValues(values, config.valueMapper);\n writer.addInt16(len);\n writer.add(paramWriter.flush());\n // all results use the same format code\n writer.addInt16(1);\n // format code\n writer.addInt16(binary ? 1 /* ParamType.BINARY */ : 0 /* ParamType.STRING */);\n return writer.flush(66 /* code.bind */);\n};\nconst emptyExecute = Buffer.from([69 /* code.execute */, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00]);\nconst execute = (config) => {\n // this is the happy path for most queries\n if (!config || (!config.portal && !config.rows)) {\n return emptyExecute;\n }\n const portal = config.portal || '';\n const rows = config.rows || 0;\n const portalLength = Buffer.byteLength(portal);\n const len = 4 + portalLength + 1 + 4;\n // one extra bit for code\n const buff = Buffer.allocUnsafe(1 + len);\n buff[0] = 69 /* code.execute */;\n buff.writeInt32BE(len, 1);\n buff.write(portal, 5, 'utf-8');\n buff[portalLength + 5] = 0; // null terminate portal cString\n buff.writeUInt32BE(rows, buff.length - 4);\n return buff;\n};\nconst cancel = (processID, secretKey) => {\n const buffer = Buffer.allocUnsafe(16);\n buffer.writeInt32BE(16, 0);\n buffer.writeInt16BE(1234, 4);\n buffer.writeInt16BE(5678, 6);\n buffer.writeInt32BE(processID, 8);\n buffer.writeInt32BE(secretKey, 12);\n return buffer;\n};\nconst cstringMessage = (code, string) => {\n const stringLen = Buffer.byteLength(string);\n const len = 4 + stringLen + 1;\n // one extra bit for code\n const buffer = Buffer.allocUnsafe(1 + len);\n buffer[0] = code;\n buffer.writeInt32BE(len, 1);\n buffer.write(string, 5, 'utf-8');\n buffer[len] = 0; // null terminate cString\n return buffer;\n};\nconst emptyDescribePortal = writer.addCString('P').flush(68 /* code.describe */);\nconst emptyDescribeStatement = writer.addCString('S').flush(68 /* code.describe */);\nconst describe = (msg) => {\n return msg.name\n ? cstringMessage(68 /* code.describe */, `${msg.type}${msg.name || ''}`)\n : msg.type === 'P'\n ? emptyDescribePortal\n : emptyDescribeStatement;\n};\nconst close = (msg) => {\n const text = `${msg.type}${msg.name || ''}`;\n return cstringMessage(67 /* code.close */, text);\n};\nconst copyData = (chunk) => {\n return writer.add(chunk).flush(100 /* code.copyFromChunk */);\n};\nconst copyFail = (message) => {\n return cstringMessage(102 /* code.copyFail */, message);\n};\nconst codeOnlyBuffer = (code) => Buffer.from([code, 0x00, 0x00, 0x00, 0x04]);\nconst flushBuffer = codeOnlyBuffer(72 /* code.flush */);\nconst syncBuffer = codeOnlyBuffer(83 /* code.sync */);\nconst endBuffer = codeOnlyBuffer(88 /* code.end */);\nconst copyDoneBuffer = codeOnlyBuffer(99 /* code.copyDone */);\nconst serialize = {\n startup,\n password,\n requestSsl,\n sendSASLInitialResponseMessage,\n sendSCRAMClientFinalMessage,\n query,\n parse,\n bind,\n execute,\n describe,\n close,\n flush: () => flushBuffer,\n sync: () => syncBuffer,\n end: () => endBuffer,\n copyData,\n copyDone: () => copyDoneBuffer,\n copyFail,\n cancel,\n};\nexports.serialize = serialize;\n//# sourceMappingURL=serializer.js.map",
|
|
31
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.BufferReader = void 0;\nconst emptyBuffer = Buffer.allocUnsafe(0);\nclass BufferReader {\n constructor(offset = 0) {\n this.offset = offset;\n this.buffer = emptyBuffer;\n // TODO(bmc): support non-utf8 encoding?\n this.encoding = 'utf-8';\n }\n setBuffer(offset, buffer) {\n this.offset = offset;\n this.buffer = buffer;\n }\n int16() {\n const result = this.buffer.readInt16BE(this.offset);\n this.offset += 2;\n return result;\n }\n byte() {\n const result = this.buffer[this.offset];\n this.offset++;\n return result;\n }\n int32() {\n const result = this.buffer.readInt32BE(this.offset);\n this.offset += 4;\n return result;\n }\n uint32() {\n const result = this.buffer.readUInt32BE(this.offset);\n this.offset += 4;\n return result;\n }\n string(length) {\n const result = this.buffer.toString(this.encoding, this.offset, this.offset + length);\n this.offset += length;\n return result;\n }\n cstring() {\n const start = this.offset;\n let end = start;\n // eslint-disable-next-line no-empty\n while (this.buffer[end++] !== 0) { }\n this.offset = end;\n return this.buffer.toString(this.encoding, start, end - 1);\n }\n bytes(length) {\n const result = this.buffer.slice(this.offset, this.offset + length);\n this.offset += length;\n return result;\n }\n}\nexports.BufferReader = BufferReader;\n//# sourceMappingURL=buffer-reader.js.map",
|
|
32
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Parser = void 0;\nconst messages_1 = require(\"./messages\");\nconst buffer_reader_1 = require(\"./buffer-reader\");\n// every message is prefixed with a single bye\nconst CODE_LENGTH = 1;\n// every message has an int32 length which includes itself but does\n// NOT include the code in the length\nconst LEN_LENGTH = 4;\nconst HEADER_LENGTH = CODE_LENGTH + LEN_LENGTH;\nconst emptyBuffer = Buffer.allocUnsafe(0);\nclass Parser {\n constructor(opts) {\n this.buffer = emptyBuffer;\n this.bufferLength = 0;\n this.bufferOffset = 0;\n this.reader = new buffer_reader_1.BufferReader();\n if ((opts === null || opts === void 0 ? void 0 : opts.mode) === 'binary') {\n throw new Error('Binary mode not supported yet');\n }\n this.mode = (opts === null || opts === void 0 ? void 0 : opts.mode) || 'text';\n }\n parse(buffer, callback) {\n this.mergeBuffer(buffer);\n const bufferFullLength = this.bufferOffset + this.bufferLength;\n let offset = this.bufferOffset;\n while (offset + HEADER_LENGTH <= bufferFullLength) {\n // code is 1 byte long - it identifies the message type\n const code = this.buffer[offset];\n // length is 1 Uint32BE - it is the length of the message EXCLUDING the code\n const length = this.buffer.readUInt32BE(offset + CODE_LENGTH);\n const fullMessageLength = CODE_LENGTH + length;\n if (fullMessageLength + offset <= bufferFullLength) {\n const message = this.handlePacket(offset + HEADER_LENGTH, code, length, this.buffer);\n callback(message);\n offset += fullMessageLength;\n }\n else {\n break;\n }\n }\n if (offset === bufferFullLength) {\n // No more use for the buffer\n this.buffer = emptyBuffer;\n this.bufferLength = 0;\n this.bufferOffset = 0;\n }\n else {\n // Adjust the cursors of remainingBuffer\n this.bufferLength = bufferFullLength - offset;\n this.bufferOffset = offset;\n }\n }\n mergeBuffer(buffer) {\n if (this.bufferLength > 0) {\n const newLength = this.bufferLength + buffer.byteLength;\n const newFullLength = newLength + this.bufferOffset;\n if (newFullLength > this.buffer.byteLength) {\n // We can't concat the new buffer with the remaining one\n let newBuffer;\n if (newLength <= this.buffer.byteLength && this.bufferOffset >= this.bufferLength) {\n // We can move the relevant part to the beginning of the buffer instead of allocating a new buffer\n newBuffer = this.buffer;\n }\n else {\n // Allocate a new larger buffer\n let newBufferLength = this.buffer.byteLength * 2;\n while (newLength >= newBufferLength) {\n newBufferLength *= 2;\n }\n newBuffer = Buffer.allocUnsafe(newBufferLength);\n }\n // Move the remaining buffer to the new one\n this.buffer.copy(newBuffer, 0, this.bufferOffset, this.bufferOffset + this.bufferLength);\n this.buffer = newBuffer;\n this.bufferOffset = 0;\n }\n // Concat the new buffer with the remaining one\n buffer.copy(this.buffer, this.bufferOffset + this.bufferLength);\n this.bufferLength = newLength;\n }\n else {\n this.buffer = buffer;\n this.bufferOffset = 0;\n this.bufferLength = buffer.byteLength;\n }\n }\n handlePacket(offset, code, length, bytes) {\n switch (code) {\n case 50 /* MessageCodes.BindComplete */:\n return messages_1.bindComplete;\n case 49 /* MessageCodes.ParseComplete */:\n return messages_1.parseComplete;\n case 51 /* MessageCodes.CloseComplete */:\n return messages_1.closeComplete;\n case 110 /* MessageCodes.NoData */:\n return messages_1.noData;\n case 115 /* MessageCodes.PortalSuspended */:\n return messages_1.portalSuspended;\n case 99 /* MessageCodes.CopyDone */:\n return messages_1.copyDone;\n case 87 /* MessageCodes.ReplicationStart */:\n return messages_1.replicationStart;\n case 73 /* MessageCodes.EmptyQuery */:\n return messages_1.emptyQuery;\n case 68 /* MessageCodes.DataRow */:\n return this.parseDataRowMessage(offset, length, bytes);\n case 67 /* MessageCodes.CommandComplete */:\n return this.parseCommandCompleteMessage(offset, length, bytes);\n case 90 /* MessageCodes.ReadyForQuery */:\n return this.parseReadyForQueryMessage(offset, length, bytes);\n case 65 /* MessageCodes.NotificationResponse */:\n return this.parseNotificationMessage(offset, length, bytes);\n case 82 /* MessageCodes.AuthenticationResponse */:\n return this.parseAuthenticationResponse(offset, length, bytes);\n case 83 /* MessageCodes.ParameterStatus */:\n return this.parseParameterStatusMessage(offset, length, bytes);\n case 75 /* MessageCodes.BackendKeyData */:\n return this.parseBackendKeyData(offset, length, bytes);\n case 69 /* MessageCodes.ErrorMessage */:\n return this.parseErrorMessage(offset, length, bytes, 'error');\n case 78 /* MessageCodes.NoticeMessage */:\n return this.parseErrorMessage(offset, length, bytes, 'notice');\n case 84 /* MessageCodes.RowDescriptionMessage */:\n return this.parseRowDescriptionMessage(offset, length, bytes);\n case 116 /* MessageCodes.ParameterDescriptionMessage */:\n return this.parseParameterDescriptionMessage(offset, length, bytes);\n case 71 /* MessageCodes.CopyIn */:\n return this.parseCopyInMessage(offset, length, bytes);\n case 72 /* MessageCodes.CopyOut */:\n return this.parseCopyOutMessage(offset, length, bytes);\n case 100 /* MessageCodes.CopyData */:\n return this.parseCopyData(offset, length, bytes);\n default:\n return new messages_1.DatabaseError('received invalid response: ' + code.toString(16), length, 'error');\n }\n }\n parseReadyForQueryMessage(offset, length, bytes) {\n this.reader.setBuffer(offset, bytes);\n const status = this.reader.string(1);\n return new messages_1.ReadyForQueryMessage(length, status);\n }\n parseCommandCompleteMessage(offset, length, bytes) {\n this.reader.setBuffer(offset, bytes);\n const text = this.reader.cstring();\n return new messages_1.CommandCompleteMessage(length, text);\n }\n parseCopyData(offset, length, bytes) {\n const chunk = bytes.slice(offset, offset + (length - 4));\n return new messages_1.CopyDataMessage(length, chunk);\n }\n parseCopyInMessage(offset, length, bytes) {\n return this.parseCopyMessage(offset, length, bytes, 'copyInResponse');\n }\n parseCopyOutMessage(offset, length, bytes) {\n return this.parseCopyMessage(offset, length, bytes, 'copyOutResponse');\n }\n parseCopyMessage(offset, length, bytes, messageName) {\n this.reader.setBuffer(offset, bytes);\n const isBinary = this.reader.byte() !== 0;\n const columnCount = this.reader.int16();\n const message = new messages_1.CopyResponse(length, messageName, isBinary, columnCount);\n for (let i = 0; i < columnCount; i++) {\n message.columnTypes[i] = this.reader.int16();\n }\n return message;\n }\n parseNotificationMessage(offset, length, bytes) {\n this.reader.setBuffer(offset, bytes);\n const processId = this.reader.int32();\n const channel = this.reader.cstring();\n const payload = this.reader.cstring();\n return new messages_1.NotificationResponseMessage(length, processId, channel, payload);\n }\n parseRowDescriptionMessage(offset, length, bytes) {\n this.reader.setBuffer(offset, bytes);\n const fieldCount = this.reader.int16();\n const message = new messages_1.RowDescriptionMessage(length, fieldCount);\n for (let i = 0; i < fieldCount; i++) {\n message.fields[i] = this.parseField();\n }\n return message;\n }\n parseField() {\n const name = this.reader.cstring();\n const tableID = this.reader.uint32();\n const columnID = this.reader.int16();\n const dataTypeID = this.reader.uint32();\n const dataTypeSize = this.reader.int16();\n const dataTypeModifier = this.reader.int32();\n const mode = this.reader.int16() === 0 ? 'text' : 'binary';\n return new messages_1.Field(name, tableID, columnID, dataTypeID, dataTypeSize, dataTypeModifier, mode);\n }\n parseParameterDescriptionMessage(offset, length, bytes) {\n this.reader.setBuffer(offset, bytes);\n const parameterCount = this.reader.int16();\n const message = new messages_1.ParameterDescriptionMessage(length, parameterCount);\n for (let i = 0; i < parameterCount; i++) {\n message.dataTypeIDs[i] = this.reader.int32();\n }\n return message;\n }\n parseDataRowMessage(offset, length, bytes) {\n this.reader.setBuffer(offset, bytes);\n const fieldCount = this.reader.int16();\n const fields = new Array(fieldCount);\n for (let i = 0; i < fieldCount; i++) {\n const len = this.reader.int32();\n // a -1 for length means the value of the field is null\n fields[i] = len === -1 ? null : this.reader.string(len);\n }\n return new messages_1.DataRowMessage(length, fields);\n }\n parseParameterStatusMessage(offset, length, bytes) {\n this.reader.setBuffer(offset, bytes);\n const name = this.reader.cstring();\n const value = this.reader.cstring();\n return new messages_1.ParameterStatusMessage(length, name, value);\n }\n parseBackendKeyData(offset, length, bytes) {\n this.reader.setBuffer(offset, bytes);\n const processID = this.reader.int32();\n const secretKey = this.reader.int32();\n return new messages_1.BackendKeyDataMessage(length, processID, secretKey);\n }\n parseAuthenticationResponse(offset, length, bytes) {\n this.reader.setBuffer(offset, bytes);\n const code = this.reader.int32();\n // TODO(bmc): maybe better types here\n const message = {\n name: 'authenticationOk',\n length,\n };\n switch (code) {\n case 0: // AuthenticationOk\n break;\n case 3: // AuthenticationCleartextPassword\n if (message.length === 8) {\n message.name = 'authenticationCleartextPassword';\n }\n break;\n case 5: // AuthenticationMD5Password\n if (message.length === 12) {\n message.name = 'authenticationMD5Password';\n const salt = this.reader.bytes(4);\n return new messages_1.AuthenticationMD5Password(length, salt);\n }\n break;\n case 10: // AuthenticationSASL\n {\n message.name = 'authenticationSASL';\n message.mechanisms = [];\n let mechanism;\n do {\n mechanism = this.reader.cstring();\n if (mechanism) {\n message.mechanisms.push(mechanism);\n }\n } while (mechanism);\n }\n break;\n case 11: // AuthenticationSASLContinue\n message.name = 'authenticationSASLContinue';\n message.data = this.reader.string(length - 8);\n break;\n case 12: // AuthenticationSASLFinal\n message.name = 'authenticationSASLFinal';\n message.data = this.reader.string(length - 8);\n break;\n default:\n throw new Error('Unknown authenticationOk message type ' + code);\n }\n return message;\n }\n parseErrorMessage(offset, length, bytes, name) {\n this.reader.setBuffer(offset, bytes);\n const fields = {};\n let fieldType = this.reader.string(1);\n while (fieldType !== '\\0') {\n fields[fieldType] = this.reader.cstring();\n fieldType = this.reader.string(1);\n }\n const messageValue = fields.M;\n const message = name === 'notice' ? new messages_1.NoticeMessage(length, messageValue) : new messages_1.DatabaseError(messageValue, length, name);\n message.severity = fields.S;\n message.code = fields.C;\n message.detail = fields.D;\n message.hint = fields.H;\n message.position = fields.P;\n message.internalPosition = fields.p;\n message.internalQuery = fields.q;\n message.where = fields.W;\n message.schema = fields.s;\n message.table = fields.t;\n message.column = fields.c;\n message.dataType = fields.d;\n message.constraint = fields.n;\n message.file = fields.F;\n message.line = fields.L;\n message.routine = fields.R;\n return message;\n }\n}\nexports.Parser = Parser;\n//# sourceMappingURL=parser.js.map",
|
|
33
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DatabaseError = exports.serialize = exports.parse = void 0;\nconst messages_1 = require(\"./messages\");\nObject.defineProperty(exports, \"DatabaseError\", { enumerable: true, get: function () { return messages_1.DatabaseError; } });\nconst serializer_1 = require(\"./serializer\");\nObject.defineProperty(exports, \"serialize\", { enumerable: true, get: function () { return serializer_1.serialize; } });\nconst parser_1 = require(\"./parser\");\nfunction parse(stream, callback) {\n const parser = new parser_1.Parser();\n stream.on('data', (buffer) => parser.parse(buffer, callback));\n return new Promise((resolve) => stream.on('end', () => resolve()));\n}\nexports.parse = parse;\n//# sourceMappingURL=index.js.map",
|
|
34
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// This is an empty module that is served up when outside of a workerd environment\n// See the `exports` field in package.json\nexports.default = {};\n//# sourceMappingURL=empty.js.map",
|
|
35
|
+
"const { getStream, getSecureStream } = getStreamFuncs()\n\nmodule.exports = {\n /**\n * Get a socket stream compatible with the current runtime environment.\n * @returns {Duplex}\n */\n getStream,\n /**\n * Get a TLS secured socket, compatible with the current environment,\n * using the socket and other settings given in `options`.\n * @returns {Duplex}\n */\n getSecureStream,\n}\n\n/**\n * The stream functions that work in Node.js\n */\nfunction getNodejsStreamFuncs() {\n function getStream(ssl) {\n const net = require('net')\n return new net.Socket()\n }\n\n function getSecureStream(options) {\n const tls = require('tls')\n return tls.connect(options)\n }\n return {\n getStream,\n getSecureStream,\n }\n}\n\n/**\n * The stream functions that work in Cloudflare Workers\n */\nfunction getCloudflareStreamFuncs() {\n function getStream(ssl) {\n const { CloudflareSocket } = require('pg-cloudflare')\n return new CloudflareSocket(ssl)\n }\n\n function getSecureStream(options) {\n options.socket.startTls(options)\n return options.socket\n }\n return {\n getStream,\n getSecureStream,\n }\n}\n\n/**\n * Are we running in a Cloudflare Worker?\n *\n * @returns true if the code is currently running inside a Cloudflare Worker.\n */\nfunction isCloudflareRuntime() {\n // Since 2022-03-21 the `global_navigator` compatibility flag is on for Cloudflare Workers\n // which means that `navigator.userAgent` will be defined.\n // eslint-disable-next-line no-undef\n if (typeof navigator === 'object' && navigator !== null && typeof navigator.userAgent === 'string') {\n // eslint-disable-next-line no-undef\n return navigator.userAgent === 'Cloudflare-Workers'\n }\n // In case `navigator` or `navigator.userAgent` is not defined then try a more sneaky approach\n if (typeof Response === 'function') {\n const resp = new Response(null, { cf: { thing: true } })\n if (typeof resp.cf === 'object' && resp.cf !== null && resp.cf.thing) {\n return true\n }\n }\n return false\n}\n\nfunction getStreamFuncs() {\n if (isCloudflareRuntime()) {\n return getCloudflareStreamFuncs()\n }\n return getNodejsStreamFuncs()\n}\n",
|
|
36
|
+
"'use strict'\n\nconst EventEmitter = require('events').EventEmitter\n\nconst { parse, serialize } = require('pg-protocol')\nconst { getStream, getSecureStream } = require('./stream')\n\nconst flushBuffer = serialize.flush()\nconst syncBuffer = serialize.sync()\nconst endBuffer = serialize.end()\n\n// TODO(bmc) support binary mode at some point\nclass Connection extends EventEmitter {\n constructor(config) {\n super()\n config = config || {}\n\n this.stream = config.stream || getStream(config.ssl)\n if (typeof this.stream === 'function') {\n this.stream = this.stream(config)\n }\n\n this._keepAlive = config.keepAlive\n this._keepAliveInitialDelayMillis = config.keepAliveInitialDelayMillis\n this.lastBuffer = false\n this.parsedStatements = {}\n this.ssl = config.ssl || false\n this._ending = false\n this._emitMessage = false\n const self = this\n this.on('newListener', function (eventName) {\n if (eventName === 'message') {\n self._emitMessage = true\n }\n })\n }\n\n connect(port, host) {\n const self = this\n\n this._connecting = true\n this.stream.setNoDelay(true)\n this.stream.connect(port, host)\n\n this.stream.once('connect', function () {\n if (self._keepAlive) {\n self.stream.setKeepAlive(true, self._keepAliveInitialDelayMillis)\n }\n self.emit('connect')\n })\n\n const reportStreamError = function (error) {\n // errors about disconnections should be ignored during disconnect\n if (self._ending && (error.code === 'ECONNRESET' || error.code === 'EPIPE')) {\n return\n }\n self.emit('error', error)\n }\n this.stream.on('error', reportStreamError)\n\n this.stream.on('close', function () {\n self.emit('end')\n })\n\n if (!this.ssl) {\n return this.attachListeners(this.stream)\n }\n\n this.stream.once('data', function (buffer) {\n const responseCode = buffer.toString('utf8')\n switch (responseCode) {\n case 'S': // Server supports SSL connections, continue with a secure connection\n break\n case 'N': // Server does not support SSL connections\n self.stream.end()\n return self.emit('error', new Error('The server does not support SSL connections'))\n default:\n // Any other response byte, including 'E' (ErrorResponse) indicating a server error\n self.stream.end()\n return self.emit('error', new Error('There was an error establishing an SSL connection'))\n }\n const options = {\n socket: self.stream,\n }\n\n if (self.ssl !== true) {\n Object.assign(options, self.ssl)\n\n if ('key' in self.ssl) {\n options.key = self.ssl.key\n }\n }\n\n const net = require('net')\n if (net.isIP && net.isIP(host) === 0) {\n options.servername = host\n }\n try {\n self.stream = getSecureStream(options)\n } catch (err) {\n return self.emit('error', err)\n }\n self.attachListeners(self.stream)\n self.stream.on('error', reportStreamError)\n\n self.emit('sslconnect')\n })\n }\n\n attachListeners(stream) {\n parse(stream, (msg) => {\n const eventName = msg.name === 'error' ? 'errorMessage' : msg.name\n if (this._emitMessage) {\n this.emit('message', msg)\n }\n this.emit(eventName, msg)\n })\n }\n\n requestSsl() {\n this.stream.write(serialize.requestSsl())\n }\n\n startup(config) {\n this.stream.write(serialize.startup(config))\n }\n\n cancel(processID, secretKey) {\n this._send(serialize.cancel(processID, secretKey))\n }\n\n password(password) {\n this._send(serialize.password(password))\n }\n\n sendSASLInitialResponseMessage(mechanism, initialResponse) {\n this._send(serialize.sendSASLInitialResponseMessage(mechanism, initialResponse))\n }\n\n sendSCRAMClientFinalMessage(additionalData) {\n this._send(serialize.sendSCRAMClientFinalMessage(additionalData))\n }\n\n _send(buffer) {\n if (!this.stream.writable) {\n return false\n }\n return this.stream.write(buffer)\n }\n\n query(text) {\n this._send(serialize.query(text))\n }\n\n // send parse message\n parse(query) {\n this._send(serialize.parse(query))\n }\n\n // send bind message\n bind(config) {\n this._send(serialize.bind(config))\n }\n\n // send execute message\n execute(config) {\n this._send(serialize.execute(config))\n }\n\n flush() {\n if (this.stream.writable) {\n this.stream.write(flushBuffer)\n }\n }\n\n sync() {\n this._ending = true\n this._send(syncBuffer)\n }\n\n ref() {\n this.stream.ref()\n }\n\n unref() {\n this.stream.unref()\n }\n\n end() {\n // 0x58 = 'X'\n this._ending = true\n if (!this._connecting || !this.stream.writable) {\n this.stream.end()\n return\n }\n return this.stream.write(endBuffer, () => {\n this.stream.end()\n })\n }\n\n close(msg) {\n this._send(serialize.close(msg))\n }\n\n describe(msg) {\n this._send(serialize.describe(msg))\n }\n\n sendCopyFromChunk(chunk) {\n this._send(serialize.copyData(chunk))\n }\n\n endCopyFrom() {\n this._send(serialize.copyDone())\n }\n\n sendCopyFail(msg) {\n this._send(serialize.copyFail(msg))\n }\n}\n\nmodule.exports = Connection\n",
|
|
37
|
+
"/*\nCopyright (c) 2014-2021, Matteo Collina <hello@matteocollina.com>\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\nANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\nACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR\nIN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n*/\n\n'use strict'\n\nconst { Transform } = require('stream')\nconst { StringDecoder } = require('string_decoder')\nconst kLast = Symbol('last')\nconst kDecoder = Symbol('decoder')\n\nfunction transform (chunk, enc, cb) {\n let list\n if (this.overflow) { // Line buffer is full. Skip to start of next line.\n const buf = this[kDecoder].write(chunk)\n list = buf.split(this.matcher)\n\n if (list.length === 1) return cb() // Line ending not found. Discard entire chunk.\n\n // Line ending found. Discard trailing fragment of previous line and reset overflow state.\n list.shift()\n this.overflow = false\n } else {\n this[kLast] += this[kDecoder].write(chunk)\n list = this[kLast].split(this.matcher)\n }\n\n this[kLast] = list.pop()\n\n for (let i = 0; i < list.length; i++) {\n try {\n push(this, this.mapper(list[i]))\n } catch (error) {\n return cb(error)\n }\n }\n\n this.overflow = this[kLast].length > this.maxLength\n if (this.overflow && !this.skipOverflow) {\n cb(new Error('maximum buffer reached'))\n return\n }\n\n cb()\n}\n\nfunction flush (cb) {\n // forward any gibberish left in there\n this[kLast] += this[kDecoder].end()\n\n if (this[kLast]) {\n try {\n push(this, this.mapper(this[kLast]))\n } catch (error) {\n return cb(error)\n }\n }\n\n cb()\n}\n\nfunction push (self, val) {\n if (val !== undefined) {\n self.push(val)\n }\n}\n\nfunction noop (incoming) {\n return incoming\n}\n\nfunction split (matcher, mapper, options) {\n // Set defaults for any arguments not supplied.\n matcher = matcher || /\\r?\\n/\n mapper = mapper || noop\n options = options || {}\n\n // Test arguments explicitly.\n switch (arguments.length) {\n case 1:\n // If mapper is only argument.\n if (typeof matcher === 'function') {\n mapper = matcher\n matcher = /\\r?\\n/\n // If options is only argument.\n } else if (typeof matcher === 'object' && !(matcher instanceof RegExp) && !matcher[Symbol.split]) {\n options = matcher\n matcher = /\\r?\\n/\n }\n break\n\n case 2:\n // If mapper and options are arguments.\n if (typeof matcher === 'function') {\n options = mapper\n mapper = matcher\n matcher = /\\r?\\n/\n // If matcher and options are arguments.\n } else if (typeof mapper === 'object') {\n options = mapper\n mapper = noop\n }\n }\n\n options = Object.assign({}, options)\n options.autoDestroy = true\n options.transform = transform\n options.flush = flush\n options.readableObjectMode = true\n\n const stream = new Transform(options)\n\n stream[kLast] = ''\n stream[kDecoder] = new StringDecoder('utf8')\n stream.matcher = matcher\n stream.mapper = mapper\n stream.maxLength = options.maxLength\n stream.skipOverflow = options.skipOverflow || false\n stream.overflow = false\n stream._destroy = function (err, cb) {\n // Weird Node v12 bug that we need to work around\n this._writableState.errorEmitted = false\n cb(err)\n }\n\n return stream\n}\n\nmodule.exports = split\n",
|
|
38
|
+
"'use strict';\n\nvar path = require('path')\n , Stream = require('stream').Stream\n , split = require('split2')\n , util = require('util')\n , defaultPort = 5432\n , isWin = (process.platform === 'win32')\n , warnStream = process.stderr\n;\n\n\nvar S_IRWXG = 56 // 00070(8)\n , S_IRWXO = 7 // 00007(8)\n , S_IFMT = 61440 // 00170000(8)\n , S_IFREG = 32768 // 0100000(8)\n;\nfunction isRegFile(mode) {\n return ((mode & S_IFMT) == S_IFREG);\n}\n\nvar fieldNames = [ 'host', 'port', 'database', 'user', 'password' ];\nvar nrOfFields = fieldNames.length;\nvar passKey = fieldNames[ nrOfFields -1 ];\n\n\nfunction warn() {\n var isWritable = (\n warnStream instanceof Stream &&\n true === warnStream.writable\n );\n\n if (isWritable) {\n var args = Array.prototype.slice.call(arguments).concat(\"\\n\");\n warnStream.write( util.format.apply(util, args) );\n }\n}\n\n\nObject.defineProperty(module.exports, 'isWin', {\n get : function() {\n return isWin;\n } ,\n set : function(val) {\n isWin = val;\n }\n});\n\n\nmodule.exports.warnTo = function(stream) {\n var old = warnStream;\n warnStream = stream;\n return old;\n};\n\nmodule.exports.getFileName = function(rawEnv){\n var env = rawEnv || process.env;\n var file = env.PGPASSFILE || (\n isWin ?\n path.join( env.APPDATA || './' , 'postgresql', 'pgpass.conf' ) :\n path.join( env.HOME || './', '.pgpass' )\n );\n return file;\n};\n\nmodule.exports.usePgPass = function(stats, fname) {\n if (Object.prototype.hasOwnProperty.call(process.env, 'PGPASSWORD')) {\n return false;\n }\n\n if (isWin) {\n return true;\n }\n\n fname = fname || '<unkn>';\n\n if (! isRegFile(stats.mode)) {\n warn('WARNING: password file \"%s\" is not a plain file', fname);\n return false;\n }\n\n if (stats.mode & (S_IRWXG | S_IRWXO)) {\n /* If password file is insecure, alert the user and ignore it. */\n warn('WARNING: password file \"%s\" has group or world access; permissions should be u=rw (0600) or less', fname);\n return false;\n }\n\n return true;\n};\n\n\nvar matcher = module.exports.match = function(connInfo, entry) {\n return fieldNames.slice(0, -1).reduce(function(prev, field, idx){\n if (idx == 1) {\n // the port\n if ( Number( connInfo[field] || defaultPort ) === Number( entry[field] ) ) {\n return prev && true;\n }\n }\n return prev && (\n entry[field] === '*' ||\n entry[field] === connInfo[field]\n );\n }, true);\n};\n\n\nmodule.exports.getPassword = function(connInfo, stream, cb) {\n var pass;\n var lineStream = stream.pipe(split());\n\n function onLine(line) {\n var entry = parseLine(line);\n if (entry && isValidEntry(entry) && matcher(connInfo, entry)) {\n pass = entry[passKey];\n lineStream.end(); // -> calls onEnd(), but pass is set now\n }\n }\n\n var onEnd = function() {\n stream.destroy();\n cb(pass);\n };\n\n var onErr = function(err) {\n stream.destroy();\n warn('WARNING: error on reading file: %s', err);\n cb(undefined);\n };\n\n stream.on('error', onErr);\n lineStream\n .on('data', onLine)\n .on('end', onEnd)\n .on('error', onErr)\n ;\n\n};\n\n\nvar parseLine = module.exports.parseLine = function(line) {\n if (line.length < 11 || line.match(/^\\s+#/)) {\n return null;\n }\n\n var curChar = '';\n var prevChar = '';\n var fieldIdx = 0;\n var startIdx = 0;\n var endIdx = 0;\n var obj = {};\n var isLastField = false;\n var addToObj = function(idx, i0, i1) {\n var field = line.substring(i0, i1);\n\n if (! Object.hasOwnProperty.call(process.env, 'PGPASS_NO_DEESCAPE')) {\n field = field.replace(/\\\\([:\\\\])/g, '$1');\n }\n\n obj[ fieldNames[idx] ] = field;\n };\n\n for (var i = 0 ; i < line.length-1 ; i += 1) {\n curChar = line.charAt(i+1);\n prevChar = line.charAt(i);\n\n isLastField = (fieldIdx == nrOfFields-1);\n\n if (isLastField) {\n addToObj(fieldIdx, startIdx);\n break;\n }\n\n if (i >= 0 && curChar == ':' && prevChar !== '\\\\') {\n addToObj(fieldIdx, startIdx, i+1);\n\n startIdx = i+2;\n fieldIdx += 1;\n }\n }\n\n obj = ( Object.keys(obj).length === nrOfFields ) ? obj : null;\n\n return obj;\n};\n\n\nvar isValidEntry = module.exports.isValidEntry = function(entry){\n var rules = {\n // host\n 0 : function(x){\n return x.length > 0;\n } ,\n // port\n 1 : function(x){\n if (x === '*') {\n return true;\n }\n x = Number(x);\n return (\n isFinite(x) &&\n x > 0 &&\n x < 9007199254740992 &&\n Math.floor(x) === x\n );\n } ,\n // database\n 2 : function(x){\n return x.length > 0;\n } ,\n // username\n 3 : function(x){\n return x.length > 0;\n } ,\n // password\n 4 : function(x){\n return x.length > 0;\n }\n };\n\n for (var idx = 0 ; idx < fieldNames.length ; idx += 1) {\n var rule = rules[idx];\n var value = entry[ fieldNames[idx] ] || '';\n\n var res = rule(value);\n if (!res) {\n return false;\n }\n }\n\n return true;\n};\n\n",
|
|
39
|
+
"'use strict';\n\nvar path = require('path')\n , fs = require('fs')\n , helper = require('./helper.js')\n;\n\n\nmodule.exports = function(connInfo, cb) {\n var file = helper.getFileName();\n \n fs.stat(file, function(err, stat){\n if (err || !helper.usePgPass(stat, file)) {\n return cb(undefined);\n }\n\n var st = fs.createReadStream(file);\n\n helper.getPassword(connInfo, st, cb);\n });\n};\n\nmodule.exports.warnTo = helper.warnTo;\n",
|
|
40
|
+
"'use strict'\n\nconst EventEmitter = require('events').EventEmitter\nconst utils = require('./utils')\nconst sasl = require('./crypto/sasl')\nconst TypeOverrides = require('./type-overrides')\n\nconst ConnectionParameters = require('./connection-parameters')\nconst Query = require('./query')\nconst defaults = require('./defaults')\nconst Connection = require('./connection')\nconst crypto = require('./crypto/utils')\n\nclass Client extends EventEmitter {\n constructor(config) {\n super()\n\n this.connectionParameters = new ConnectionParameters(config)\n this.user = this.connectionParameters.user\n this.database = this.connectionParameters.database\n this.port = this.connectionParameters.port\n this.host = this.connectionParameters.host\n\n // \"hiding\" the password so it doesn't show up in stack traces\n // or if the client is console.logged\n Object.defineProperty(this, 'password', {\n configurable: true,\n enumerable: false,\n writable: true,\n value: this.connectionParameters.password,\n })\n\n this.replication = this.connectionParameters.replication\n\n const c = config || {}\n\n this._Promise = c.Promise || global.Promise\n this._types = new TypeOverrides(c.types)\n this._ending = false\n this._ended = false\n this._connecting = false\n this._connected = false\n this._connectionError = false\n this._queryable = true\n\n this.enableChannelBinding = Boolean(c.enableChannelBinding) // set true to use SCRAM-SHA-256-PLUS when offered\n this.connection =\n c.connection ||\n new Connection({\n stream: c.stream,\n ssl: this.connectionParameters.ssl,\n keepAlive: c.keepAlive || false,\n keepAliveInitialDelayMillis: c.keepAliveInitialDelayMillis || 0,\n encoding: this.connectionParameters.client_encoding || 'utf8',\n })\n this.queryQueue = []\n this.binary = c.binary || defaults.binary\n this.processID = null\n this.secretKey = null\n this.ssl = this.connectionParameters.ssl || false\n // As with Password, make SSL->Key (the private key) non-enumerable.\n // It won't show up in stack traces\n // or if the client is console.logged\n if (this.ssl && this.ssl.key) {\n Object.defineProperty(this.ssl, 'key', {\n enumerable: false,\n })\n }\n\n this._connectionTimeoutMillis = c.connectionTimeoutMillis || 0\n }\n\n _errorAllQueries(err) {\n const enqueueError = (query) => {\n process.nextTick(() => {\n query.handleError(err, this.connection)\n })\n }\n\n if (this.activeQuery) {\n enqueueError(this.activeQuery)\n this.activeQuery = null\n }\n\n this.queryQueue.forEach(enqueueError)\n this.queryQueue.length = 0\n }\n\n _connect(callback) {\n const self = this\n const con = this.connection\n this._connectionCallback = callback\n\n if (this._connecting || this._connected) {\n const err = new Error('Client has already been connected. You cannot reuse a client.')\n process.nextTick(() => {\n callback(err)\n })\n return\n }\n this._connecting = true\n\n if (this._connectionTimeoutMillis > 0) {\n this.connectionTimeoutHandle = setTimeout(() => {\n con._ending = true\n con.stream.destroy(new Error('timeout expired'))\n }, this._connectionTimeoutMillis)\n\n if (this.connectionTimeoutHandle.unref) {\n this.connectionTimeoutHandle.unref()\n }\n }\n\n if (this.host && this.host.indexOf('/') === 0) {\n con.connect(this.host + '/.s.PGSQL.' + this.port)\n } else {\n con.connect(this.port, this.host)\n }\n\n // once connection is established send startup message\n con.on('connect', function () {\n if (self.ssl) {\n con.requestSsl()\n } else {\n con.startup(self.getStartupConf())\n }\n })\n\n con.on('sslconnect', function () {\n con.startup(self.getStartupConf())\n })\n\n this._attachListeners(con)\n\n con.once('end', () => {\n const error = this._ending ? new Error('Connection terminated') : new Error('Connection terminated unexpectedly')\n\n clearTimeout(this.connectionTimeoutHandle)\n this._errorAllQueries(error)\n this._ended = true\n\n if (!this._ending) {\n // if the connection is ended without us calling .end()\n // on this client then we have an unexpected disconnection\n // treat this as an error unless we've already emitted an error\n // during connection.\n if (this._connecting && !this._connectionError) {\n if (this._connectionCallback) {\n this._connectionCallback(error)\n } else {\n this._handleErrorEvent(error)\n }\n } else if (!this._connectionError) {\n this._handleErrorEvent(error)\n }\n }\n\n process.nextTick(() => {\n this.emit('end')\n })\n })\n }\n\n connect(callback) {\n if (callback) {\n this._connect(callback)\n return\n }\n\n return new this._Promise((resolve, reject) => {\n this._connect((error) => {\n if (error) {\n reject(error)\n } else {\n resolve()\n }\n })\n })\n }\n\n _attachListeners(con) {\n // password request handling\n con.on('authenticationCleartextPassword', this._handleAuthCleartextPassword.bind(this))\n // password request handling\n con.on('authenticationMD5Password', this._handleAuthMD5Password.bind(this))\n // password request handling (SASL)\n con.on('authenticationSASL', this._handleAuthSASL.bind(this))\n con.on('authenticationSASLContinue', this._handleAuthSASLContinue.bind(this))\n con.on('authenticationSASLFinal', this._handleAuthSASLFinal.bind(this))\n con.on('backendKeyData', this._handleBackendKeyData.bind(this))\n con.on('error', this._handleErrorEvent.bind(this))\n con.on('errorMessage', this._handleErrorMessage.bind(this))\n con.on('readyForQuery', this._handleReadyForQuery.bind(this))\n con.on('notice', this._handleNotice.bind(this))\n con.on('rowDescription', this._handleRowDescription.bind(this))\n con.on('dataRow', this._handleDataRow.bind(this))\n con.on('portalSuspended', this._handlePortalSuspended.bind(this))\n con.on('emptyQuery', this._handleEmptyQuery.bind(this))\n con.on('commandComplete', this._handleCommandComplete.bind(this))\n con.on('parseComplete', this._handleParseComplete.bind(this))\n con.on('copyInResponse', this._handleCopyInResponse.bind(this))\n con.on('copyData', this._handleCopyData.bind(this))\n con.on('notification', this._handleNotification.bind(this))\n }\n\n // TODO(bmc): deprecate pgpass \"built in\" integration since this.password can be a function\n // it can be supplied by the user if required - this is a breaking change!\n _checkPgPass(cb) {\n const con = this.connection\n if (typeof this.password === 'function') {\n this._Promise\n .resolve()\n .then(() => this.password())\n .then((pass) => {\n if (pass !== undefined) {\n if (typeof pass !== 'string') {\n con.emit('error', new TypeError('Password must be a string'))\n return\n }\n this.connectionParameters.password = this.password = pass\n } else {\n this.connectionParameters.password = this.password = null\n }\n cb()\n })\n .catch((err) => {\n con.emit('error', err)\n })\n } else if (this.password !== null) {\n cb()\n } else {\n try {\n const pgPass = require('pgpass')\n pgPass(this.connectionParameters, (pass) => {\n if (undefined !== pass) {\n this.connectionParameters.password = this.password = pass\n }\n cb()\n })\n } catch (e) {\n this.emit('error', e)\n }\n }\n }\n\n _handleAuthCleartextPassword(msg) {\n this._checkPgPass(() => {\n this.connection.password(this.password)\n })\n }\n\n _handleAuthMD5Password(msg) {\n this._checkPgPass(async () => {\n try {\n const hashedPassword = await crypto.postgresMd5PasswordHash(this.user, this.password, msg.salt)\n this.connection.password(hashedPassword)\n } catch (e) {\n this.emit('error', e)\n }\n })\n }\n\n _handleAuthSASL(msg) {\n this._checkPgPass(() => {\n try {\n this.saslSession = sasl.startSession(msg.mechanisms, this.enableChannelBinding && this.connection.stream)\n this.connection.sendSASLInitialResponseMessage(this.saslSession.mechanism, this.saslSession.response)\n } catch (err) {\n this.connection.emit('error', err)\n }\n })\n }\n\n async _handleAuthSASLContinue(msg) {\n try {\n await sasl.continueSession(\n this.saslSession,\n this.password,\n msg.data,\n this.enableChannelBinding && this.connection.stream\n )\n this.connection.sendSCRAMClientFinalMessage(this.saslSession.response)\n } catch (err) {\n this.connection.emit('error', err)\n }\n }\n\n _handleAuthSASLFinal(msg) {\n try {\n sasl.finalizeSession(this.saslSession, msg.data)\n this.saslSession = null\n } catch (err) {\n this.connection.emit('error', err)\n }\n }\n\n _handleBackendKeyData(msg) {\n this.processID = msg.processID\n this.secretKey = msg.secretKey\n }\n\n _handleReadyForQuery(msg) {\n if (this._connecting) {\n this._connecting = false\n this._connected = true\n clearTimeout(this.connectionTimeoutHandle)\n\n // process possible callback argument to Client#connect\n if (this._connectionCallback) {\n this._connectionCallback(null, this)\n // remove callback for proper error handling\n // after the connect event\n this._connectionCallback = null\n }\n this.emit('connect')\n }\n const { activeQuery } = this\n this.activeQuery = null\n this.readyForQuery = true\n if (activeQuery) {\n activeQuery.handleReadyForQuery(this.connection)\n }\n this._pulseQueryQueue()\n }\n\n // if we receive an error event or error message\n // during the connection process we handle it here\n _handleErrorWhileConnecting(err) {\n if (this._connectionError) {\n // TODO(bmc): this is swallowing errors - we shouldn't do this\n return\n }\n this._connectionError = true\n clearTimeout(this.connectionTimeoutHandle)\n if (this._connectionCallback) {\n return this._connectionCallback(err)\n }\n this.emit('error', err)\n }\n\n // if we're connected and we receive an error event from the connection\n // this means the socket is dead - do a hard abort of all queries and emit\n // the socket error on the client as well\n _handleErrorEvent(err) {\n if (this._connecting) {\n return this._handleErrorWhileConnecting(err)\n }\n this._queryable = false\n this._errorAllQueries(err)\n this.emit('error', err)\n }\n\n // handle error messages from the postgres backend\n _handleErrorMessage(msg) {\n if (this._connecting) {\n return this._handleErrorWhileConnecting(msg)\n }\n const activeQuery = this.activeQuery\n\n if (!activeQuery) {\n this._handleErrorEvent(msg)\n return\n }\n\n this.activeQuery = null\n activeQuery.handleError(msg, this.connection)\n }\n\n _handleRowDescription(msg) {\n // delegate rowDescription to active query\n this.activeQuery.handleRowDescription(msg)\n }\n\n _handleDataRow(msg) {\n // delegate dataRow to active query\n this.activeQuery.handleDataRow(msg)\n }\n\n _handlePortalSuspended(msg) {\n // delegate portalSuspended to active query\n this.activeQuery.handlePortalSuspended(this.connection)\n }\n\n _handleEmptyQuery(msg) {\n // delegate emptyQuery to active query\n this.activeQuery.handleEmptyQuery(this.connection)\n }\n\n _handleCommandComplete(msg) {\n if (this.activeQuery == null) {\n const error = new Error('Received unexpected commandComplete message from backend.')\n this._handleErrorEvent(error)\n return\n }\n // delegate commandComplete to active query\n this.activeQuery.handleCommandComplete(msg, this.connection)\n }\n\n _handleParseComplete() {\n if (this.activeQuery == null) {\n const error = new Error('Received unexpected parseComplete message from backend.')\n this._handleErrorEvent(error)\n return\n }\n // if a prepared statement has a name and properly parses\n // we track that its already been executed so we don't parse\n // it again on the same client\n if (this.activeQuery.name) {\n this.connection.parsedStatements[this.activeQuery.name] = this.activeQuery.text\n }\n }\n\n _handleCopyInResponse(msg) {\n this.activeQuery.handleCopyInResponse(this.connection)\n }\n\n _handleCopyData(msg) {\n this.activeQuery.handleCopyData(msg, this.connection)\n }\n\n _handleNotification(msg) {\n this.emit('notification', msg)\n }\n\n _handleNotice(msg) {\n this.emit('notice', msg)\n }\n\n getStartupConf() {\n const params = this.connectionParameters\n\n const data = {\n user: params.user,\n database: params.database,\n }\n\n const appName = params.application_name || params.fallback_application_name\n if (appName) {\n data.application_name = appName\n }\n if (params.replication) {\n data.replication = '' + params.replication\n }\n if (params.statement_timeout) {\n data.statement_timeout = String(parseInt(params.statement_timeout, 10))\n }\n if (params.lock_timeout) {\n data.lock_timeout = String(parseInt(params.lock_timeout, 10))\n }\n if (params.idle_in_transaction_session_timeout) {\n data.idle_in_transaction_session_timeout = String(parseInt(params.idle_in_transaction_session_timeout, 10))\n }\n if (params.options) {\n data.options = params.options\n }\n\n return data\n }\n\n cancel(client, query) {\n if (client.activeQuery === query) {\n const con = this.connection\n\n if (this.host && this.host.indexOf('/') === 0) {\n con.connect(this.host + '/.s.PGSQL.' + this.port)\n } else {\n con.connect(this.port, this.host)\n }\n\n // once connection is established send cancel message\n con.on('connect', function () {\n con.cancel(client.processID, client.secretKey)\n })\n } else if (client.queryQueue.indexOf(query) !== -1) {\n client.queryQueue.splice(client.queryQueue.indexOf(query), 1)\n }\n }\n\n setTypeParser(oid, format, parseFn) {\n return this._types.setTypeParser(oid, format, parseFn)\n }\n\n getTypeParser(oid, format) {\n return this._types.getTypeParser(oid, format)\n }\n\n // escapeIdentifier and escapeLiteral moved to utility functions & exported\n // on PG\n // re-exported here for backwards compatibility\n escapeIdentifier(str) {\n return utils.escapeIdentifier(str)\n }\n\n escapeLiteral(str) {\n return utils.escapeLiteral(str)\n }\n\n _pulseQueryQueue() {\n if (this.readyForQuery === true) {\n this.activeQuery = this.queryQueue.shift()\n if (this.activeQuery) {\n this.readyForQuery = false\n this.hasExecuted = true\n\n const queryError = this.activeQuery.submit(this.connection)\n if (queryError) {\n process.nextTick(() => {\n this.activeQuery.handleError(queryError, this.connection)\n this.readyForQuery = true\n this._pulseQueryQueue()\n })\n }\n } else if (this.hasExecuted) {\n this.activeQuery = null\n this.emit('drain')\n }\n }\n }\n\n query(config, values, callback) {\n // can take in strings, config object or query object\n let query\n let result\n let readTimeout\n let readTimeoutTimer\n let queryCallback\n\n if (config === null || config === undefined) {\n throw new TypeError('Client was passed a null or undefined query')\n } else if (typeof config.submit === 'function') {\n readTimeout = config.query_timeout || this.connectionParameters.query_timeout\n result = query = config\n if (typeof values === 'function') {\n query.callback = query.callback || values\n }\n } else {\n readTimeout = config.query_timeout || this.connectionParameters.query_timeout\n query = new Query(config, values, callback)\n if (!query.callback) {\n result = new this._Promise((resolve, reject) => {\n query.callback = (err, res) => (err ? reject(err) : resolve(res))\n }).catch((err) => {\n // replace the stack trace that leads to `TCP.onStreamRead` with one that leads back to the\n // application that created the query\n Error.captureStackTrace(err)\n throw err\n })\n }\n }\n\n if (readTimeout) {\n queryCallback = query.callback\n\n readTimeoutTimer = setTimeout(() => {\n const error = new Error('Query read timeout')\n\n process.nextTick(() => {\n query.handleError(error, this.connection)\n })\n\n queryCallback(error)\n\n // we already returned an error,\n // just do nothing if query completes\n query.callback = () => {}\n\n // Remove from queue\n const index = this.queryQueue.indexOf(query)\n if (index > -1) {\n this.queryQueue.splice(index, 1)\n }\n\n this._pulseQueryQueue()\n }, readTimeout)\n\n query.callback = (err, res) => {\n clearTimeout(readTimeoutTimer)\n queryCallback(err, res)\n }\n }\n\n if (this.binary && !query.binary) {\n query.binary = true\n }\n\n if (query._result && !query._result._types) {\n query._result._types = this._types\n }\n\n if (!this._queryable) {\n process.nextTick(() => {\n query.handleError(new Error('Client has encountered a connection error and is not queryable'), this.connection)\n })\n return result\n }\n\n if (this._ending) {\n process.nextTick(() => {\n query.handleError(new Error('Client was closed and is not queryable'), this.connection)\n })\n return result\n }\n\n this.queryQueue.push(query)\n this._pulseQueryQueue()\n return result\n }\n\n ref() {\n this.connection.ref()\n }\n\n unref() {\n this.connection.unref()\n }\n\n end(cb) {\n this._ending = true\n\n // if we have never connected, then end is a noop, callback immediately\n if (!this.connection._connecting || this._ended) {\n if (cb) {\n cb()\n } else {\n return this._Promise.resolve()\n }\n }\n\n if (this.activeQuery || !this._queryable) {\n // if we have an active query we need to force a disconnect\n // on the socket - otherwise a hung query could block end forever\n this.connection.stream.destroy()\n } else {\n this.connection.end()\n }\n\n if (cb) {\n this.connection.once('end', cb)\n } else {\n return new this._Promise((resolve) => {\n this.connection.once('end', resolve)\n })\n }\n }\n}\n\n// expose a Query constructor\nClient.Query = Query\n\nmodule.exports = Client\n",
|
|
41
|
+
"'use strict'\nconst EventEmitter = require('events').EventEmitter\n\nconst NOOP = function () {}\n\nconst removeWhere = (list, predicate) => {\n const i = list.findIndex(predicate)\n\n return i === -1 ? undefined : list.splice(i, 1)[0]\n}\n\nclass IdleItem {\n constructor(client, idleListener, timeoutId) {\n this.client = client\n this.idleListener = idleListener\n this.timeoutId = timeoutId\n }\n}\n\nclass PendingItem {\n constructor(callback) {\n this.callback = callback\n }\n}\n\nfunction throwOnDoubleRelease() {\n throw new Error('Release called on client which has already been released to the pool.')\n}\n\nfunction promisify(Promise, callback) {\n if (callback) {\n return { callback: callback, result: undefined }\n }\n let rej\n let res\n const cb = function (err, client) {\n err ? rej(err) : res(client)\n }\n const result = new Promise(function (resolve, reject) {\n res = resolve\n rej = reject\n }).catch((err) => {\n // replace the stack trace that leads to `TCP.onStreamRead` with one that leads back to the\n // application that created the query\n Error.captureStackTrace(err)\n throw err\n })\n return { callback: cb, result: result }\n}\n\nfunction makeIdleListener(pool, client) {\n return function idleListener(err) {\n err.client = client\n\n client.removeListener('error', idleListener)\n client.on('error', () => {\n pool.log('additional client error after disconnection due to error', err)\n })\n pool._remove(client)\n // TODO - document that once the pool emits an error\n // the client has already been closed & purged and is unusable\n pool.emit('error', err, client)\n }\n}\n\nclass Pool extends EventEmitter {\n constructor(options, Client) {\n super()\n this.options = Object.assign({}, options)\n\n if (options != null && 'password' in options) {\n // \"hiding\" the password so it doesn't show up in stack traces\n // or if the client is console.logged\n Object.defineProperty(this.options, 'password', {\n configurable: true,\n enumerable: false,\n writable: true,\n value: options.password,\n })\n }\n if (options != null && options.ssl && options.ssl.key) {\n // \"hiding\" the ssl->key so it doesn't show up in stack traces\n // or if the client is console.logged\n Object.defineProperty(this.options.ssl, 'key', {\n enumerable: false,\n })\n }\n\n this.options.max = this.options.max || this.options.poolSize || 10\n this.options.min = this.options.min || 0\n this.options.maxUses = this.options.maxUses || Infinity\n this.options.allowExitOnIdle = this.options.allowExitOnIdle || false\n this.options.maxLifetimeSeconds = this.options.maxLifetimeSeconds || 0\n this.log = this.options.log || function () {}\n this.Client = this.options.Client || Client || require('pg').Client\n this.Promise = this.options.Promise || global.Promise\n\n if (typeof this.options.idleTimeoutMillis === 'undefined') {\n this.options.idleTimeoutMillis = 10000\n }\n\n this._clients = []\n this._idle = []\n this._expired = new WeakSet()\n this._pendingQueue = []\n this._endCallback = undefined\n this.ending = false\n this.ended = false\n }\n\n _isFull() {\n return this._clients.length >= this.options.max\n }\n\n _isAboveMin() {\n return this._clients.length > this.options.min\n }\n\n _pulseQueue() {\n this.log('pulse queue')\n if (this.ended) {\n this.log('pulse queue ended')\n return\n }\n if (this.ending) {\n this.log('pulse queue on ending')\n if (this._idle.length) {\n this._idle.slice().map((item) => {\n this._remove(item.client)\n })\n }\n if (!this._clients.length) {\n this.ended = true\n this._endCallback()\n }\n return\n }\n\n // if we don't have any waiting, do nothing\n if (!this._pendingQueue.length) {\n this.log('no queued requests')\n return\n }\n // if we don't have any idle clients and we have no more room do nothing\n if (!this._idle.length && this._isFull()) {\n return\n }\n const pendingItem = this._pendingQueue.shift()\n if (this._idle.length) {\n const idleItem = this._idle.pop()\n clearTimeout(idleItem.timeoutId)\n const client = idleItem.client\n client.ref && client.ref()\n const idleListener = idleItem.idleListener\n\n return this._acquireClient(client, pendingItem, idleListener, false)\n }\n if (!this._isFull()) {\n return this.newClient(pendingItem)\n }\n throw new Error('unexpected condition')\n }\n\n _remove(client, callback) {\n const removed = removeWhere(this._idle, (item) => item.client === client)\n\n if (removed !== undefined) {\n clearTimeout(removed.timeoutId)\n }\n\n this._clients = this._clients.filter((c) => c !== client)\n const context = this\n client.end(() => {\n context.emit('remove', client)\n\n if (typeof callback === 'function') {\n callback()\n }\n })\n }\n\n connect(cb) {\n if (this.ending) {\n const err = new Error('Cannot use a pool after calling end on the pool')\n return cb ? cb(err) : this.Promise.reject(err)\n }\n\n const response = promisify(this.Promise, cb)\n const result = response.result\n\n // if we don't have to connect a new client, don't do so\n if (this._isFull() || this._idle.length) {\n // if we have idle clients schedule a pulse immediately\n if (this._idle.length) {\n process.nextTick(() => this._pulseQueue())\n }\n\n if (!this.options.connectionTimeoutMillis) {\n this._pendingQueue.push(new PendingItem(response.callback))\n return result\n }\n\n const queueCallback = (err, res, done) => {\n clearTimeout(tid)\n response.callback(err, res, done)\n }\n\n const pendingItem = new PendingItem(queueCallback)\n\n // set connection timeout on checking out an existing client\n const tid = setTimeout(() => {\n // remove the callback from pending waiters because\n // we're going to call it with a timeout error\n removeWhere(this._pendingQueue, (i) => i.callback === queueCallback)\n pendingItem.timedOut = true\n response.callback(new Error('timeout exceeded when trying to connect'))\n }, this.options.connectionTimeoutMillis)\n\n if (tid.unref) {\n tid.unref()\n }\n\n this._pendingQueue.push(pendingItem)\n return result\n }\n\n this.newClient(new PendingItem(response.callback))\n\n return result\n }\n\n newClient(pendingItem) {\n const client = new this.Client(this.options)\n this._clients.push(client)\n const idleListener = makeIdleListener(this, client)\n\n this.log('checking client timeout')\n\n // connection timeout logic\n let tid\n let timeoutHit = false\n if (this.options.connectionTimeoutMillis) {\n tid = setTimeout(() => {\n this.log('ending client due to timeout')\n timeoutHit = true\n // force kill the node driver, and let libpq do its teardown\n client.connection ? client.connection.stream.destroy() : client.end()\n }, this.options.connectionTimeoutMillis)\n }\n\n this.log('connecting new client')\n client.connect((err) => {\n if (tid) {\n clearTimeout(tid)\n }\n client.on('error', idleListener)\n if (err) {\n this.log('client failed to connect', err)\n // remove the dead client from our list of clients\n this._clients = this._clients.filter((c) => c !== client)\n if (timeoutHit) {\n err = new Error('Connection terminated due to connection timeout', { cause: err })\n }\n\n // this client won’t be released, so move on immediately\n this._pulseQueue()\n\n if (!pendingItem.timedOut) {\n pendingItem.callback(err, undefined, NOOP)\n }\n } else {\n this.log('new client connected')\n\n if (this.options.maxLifetimeSeconds !== 0) {\n const maxLifetimeTimeout = setTimeout(() => {\n this.log('ending client due to expired lifetime')\n this._expired.add(client)\n const idleIndex = this._idle.findIndex((idleItem) => idleItem.client === client)\n if (idleIndex !== -1) {\n this._acquireClient(\n client,\n new PendingItem((err, client, clientRelease) => clientRelease()),\n idleListener,\n false\n )\n }\n }, this.options.maxLifetimeSeconds * 1000)\n\n maxLifetimeTimeout.unref()\n client.once('end', () => clearTimeout(maxLifetimeTimeout))\n }\n\n return this._acquireClient(client, pendingItem, idleListener, true)\n }\n })\n }\n\n // acquire a client for a pending work item\n _acquireClient(client, pendingItem, idleListener, isNew) {\n if (isNew) {\n this.emit('connect', client)\n }\n\n this.emit('acquire', client)\n\n client.release = this._releaseOnce(client, idleListener)\n\n client.removeListener('error', idleListener)\n\n if (!pendingItem.timedOut) {\n if (isNew && this.options.verify) {\n this.options.verify(client, (err) => {\n if (err) {\n client.release(err)\n return pendingItem.callback(err, undefined, NOOP)\n }\n\n pendingItem.callback(undefined, client, client.release)\n })\n } else {\n pendingItem.callback(undefined, client, client.release)\n }\n } else {\n if (isNew && this.options.verify) {\n this.options.verify(client, client.release)\n } else {\n client.release()\n }\n }\n }\n\n // returns a function that wraps _release and throws if called more than once\n _releaseOnce(client, idleListener) {\n let released = false\n\n return (err) => {\n if (released) {\n throwOnDoubleRelease()\n }\n\n released = true\n this._release(client, idleListener, err)\n }\n }\n\n // release a client back to the poll, include an error\n // to remove it from the pool\n _release(client, idleListener, err) {\n client.on('error', idleListener)\n\n client._poolUseCount = (client._poolUseCount || 0) + 1\n\n this.emit('release', err, client)\n\n // TODO(bmc): expose a proper, public interface _queryable and _ending\n if (err || this.ending || !client._queryable || client._ending || client._poolUseCount >= this.options.maxUses) {\n if (client._poolUseCount >= this.options.maxUses) {\n this.log('remove expended client')\n }\n\n return this._remove(client, this._pulseQueue.bind(this))\n }\n\n const isExpired = this._expired.has(client)\n if (isExpired) {\n this.log('remove expired client')\n this._expired.delete(client)\n return this._remove(client, this._pulseQueue.bind(this))\n }\n\n // idle timeout\n let tid\n if (this.options.idleTimeoutMillis && this._isAboveMin()) {\n tid = setTimeout(() => {\n this.log('remove idle client')\n this._remove(client, this._pulseQueue.bind(this))\n }, this.options.idleTimeoutMillis)\n\n if (this.options.allowExitOnIdle) {\n // allow Node to exit if this is all that's left\n tid.unref()\n }\n }\n\n if (this.options.allowExitOnIdle) {\n client.unref()\n }\n\n this._idle.push(new IdleItem(client, idleListener, tid))\n this._pulseQueue()\n }\n\n query(text, values, cb) {\n // guard clause against passing a function as the first parameter\n if (typeof text === 'function') {\n const response = promisify(this.Promise, text)\n setImmediate(function () {\n return response.callback(new Error('Passing a function as the first parameter to pool.query is not supported'))\n })\n return response.result\n }\n\n // allow plain text query without values\n if (typeof values === 'function') {\n cb = values\n values = undefined\n }\n const response = promisify(this.Promise, cb)\n cb = response.callback\n\n this.connect((err, client) => {\n if (err) {\n return cb(err)\n }\n\n let clientReleased = false\n const onError = (err) => {\n if (clientReleased) {\n return\n }\n clientReleased = true\n client.release(err)\n cb(err)\n }\n\n client.once('error', onError)\n this.log('dispatching query')\n try {\n client.query(text, values, (err, res) => {\n this.log('query dispatched')\n client.removeListener('error', onError)\n if (clientReleased) {\n return\n }\n clientReleased = true\n client.release(err)\n if (err) {\n return cb(err)\n }\n return cb(undefined, res)\n })\n } catch (err) {\n client.release(err)\n return cb(err)\n }\n })\n return response.result\n }\n\n end(cb) {\n this.log('ending')\n if (this.ending) {\n const err = new Error('Called end on pool more than once')\n return cb ? cb(err) : this.Promise.reject(err)\n }\n this.ending = true\n const promised = promisify(this.Promise, cb)\n this._endCallback = promised.callback\n this._pulseQueue()\n return promised.result\n }\n\n get waitingCount() {\n return this._pendingQueue.length\n }\n\n get idleCount() {\n return this._idle.length\n }\n\n get expiredCount() {\n return this._clients.reduce((acc, client) => acc + (this._expired.has(client) ? 1 : 0), 0)\n }\n\n get totalCount() {\n return this._clients.length\n }\n}\nmodule.exports = Pool\n",
|
|
42
|
+
"'use strict'\n\nconst EventEmitter = require('events').EventEmitter\nconst util = require('util')\nconst utils = require('../utils')\n\nconst NativeQuery = (module.exports = function (config, values, callback) {\n EventEmitter.call(this)\n config = utils.normalizeQueryConfig(config, values, callback)\n this.text = config.text\n this.values = config.values\n this.name = config.name\n this.queryMode = config.queryMode\n this.callback = config.callback\n this.state = 'new'\n this._arrayMode = config.rowMode === 'array'\n\n // if the 'row' event is listened for\n // then emit them as they come in\n // without setting singleRowMode to true\n // this has almost no meaning because libpq\n // reads all rows into memory before returning any\n this._emitRowEvents = false\n this.on(\n 'newListener',\n function (event) {\n if (event === 'row') this._emitRowEvents = true\n }.bind(this)\n )\n})\n\nutil.inherits(NativeQuery, EventEmitter)\n\nconst errorFieldMap = {\n sqlState: 'code',\n statementPosition: 'position',\n messagePrimary: 'message',\n context: 'where',\n schemaName: 'schema',\n tableName: 'table',\n columnName: 'column',\n dataTypeName: 'dataType',\n constraintName: 'constraint',\n sourceFile: 'file',\n sourceLine: 'line',\n sourceFunction: 'routine',\n}\n\nNativeQuery.prototype.handleError = function (err) {\n // copy pq error fields into the error object\n const fields = this.native.pq.resultErrorFields()\n if (fields) {\n for (const key in fields) {\n const normalizedFieldName = errorFieldMap[key] || key\n err[normalizedFieldName] = fields[key]\n }\n }\n if (this.callback) {\n this.callback(err)\n } else {\n this.emit('error', err)\n }\n this.state = 'error'\n}\n\nNativeQuery.prototype.then = function (onSuccess, onFailure) {\n return this._getPromise().then(onSuccess, onFailure)\n}\n\nNativeQuery.prototype.catch = function (callback) {\n return this._getPromise().catch(callback)\n}\n\nNativeQuery.prototype._getPromise = function () {\n if (this._promise) return this._promise\n this._promise = new Promise(\n function (resolve, reject) {\n this._once('end', resolve)\n this._once('error', reject)\n }.bind(this)\n )\n return this._promise\n}\n\nNativeQuery.prototype.submit = function (client) {\n this.state = 'running'\n const self = this\n this.native = client.native\n client.native.arrayMode = this._arrayMode\n\n let after = function (err, rows, results) {\n client.native.arrayMode = false\n setImmediate(function () {\n self.emit('_done')\n })\n\n // handle possible query error\n if (err) {\n return self.handleError(err)\n }\n\n // emit row events for each row in the result\n if (self._emitRowEvents) {\n if (results.length > 1) {\n rows.forEach((rowOfRows, i) => {\n rowOfRows.forEach((row) => {\n self.emit('row', row, results[i])\n })\n })\n } else {\n rows.forEach(function (row) {\n self.emit('row', row, results)\n })\n }\n }\n\n // handle successful result\n self.state = 'end'\n self.emit('end', results)\n if (self.callback) {\n self.callback(null, results)\n }\n }\n\n if (process.domain) {\n after = process.domain.bind(after)\n }\n\n // named query\n if (this.name) {\n if (this.name.length > 63) {\n console.error('Warning! Postgres only supports 63 characters for query names.')\n console.error('You supplied %s (%s)', this.name, this.name.length)\n console.error('This can cause conflicts and silent errors executing queries')\n }\n const values = (this.values || []).map(utils.prepareValue)\n\n // check if the client has already executed this named query\n // if so...just execute it again - skip the planning phase\n if (client.namedQueries[this.name]) {\n if (this.text && client.namedQueries[this.name] !== this.text) {\n const err = new Error(`Prepared statements must be unique - '${this.name}' was used for a different statement`)\n return after(err)\n }\n return client.native.execute(this.name, values, after)\n }\n // plan the named query the first time, then execute it\n return client.native.prepare(this.name, this.text, values.length, function (err) {\n if (err) return after(err)\n client.namedQueries[self.name] = self.text\n return self.native.execute(self.name, values, after)\n })\n } else if (this.values) {\n if (!Array.isArray(this.values)) {\n const err = new Error('Query values must be an array')\n return after(err)\n }\n const vals = this.values.map(utils.prepareValue)\n client.native.query(this.text, vals, after)\n } else if (this.queryMode === 'extended') {\n client.native.query(this.text, [], after)\n } else {\n client.native.query(this.text, after)\n }\n}\n",
|
|
43
|
+
"'use strict'\n\n// eslint-disable-next-line\nvar Native\n// eslint-disable-next-line no-useless-catch\ntry {\n // Wrap this `require()` in a try-catch to avoid upstream bundlers from complaining that this might not be available since it is an optional import\n Native = require('pg-native')\n} catch (e) {\n throw e\n}\nconst TypeOverrides = require('../type-overrides')\nconst EventEmitter = require('events').EventEmitter\nconst util = require('util')\nconst ConnectionParameters = require('../connection-parameters')\n\nconst NativeQuery = require('./query')\n\nconst Client = (module.exports = function (config) {\n EventEmitter.call(this)\n config = config || {}\n\n this._Promise = config.Promise || global.Promise\n this._types = new TypeOverrides(config.types)\n\n this.native = new Native({\n types: this._types,\n })\n\n this._queryQueue = []\n this._ending = false\n this._connecting = false\n this._connected = false\n this._queryable = true\n\n // keep these on the object for legacy reasons\n // for the time being. TODO: deprecate all this jazz\n const cp = (this.connectionParameters = new ConnectionParameters(config))\n if (config.nativeConnectionString) cp.nativeConnectionString = config.nativeConnectionString\n this.user = cp.user\n\n // \"hiding\" the password so it doesn't show up in stack traces\n // or if the client is console.logged\n Object.defineProperty(this, 'password', {\n configurable: true,\n enumerable: false,\n writable: true,\n value: cp.password,\n })\n this.database = cp.database\n this.host = cp.host\n this.port = cp.port\n\n // a hash to hold named queries\n this.namedQueries = {}\n})\n\nClient.Query = NativeQuery\n\nutil.inherits(Client, EventEmitter)\n\nClient.prototype._errorAllQueries = function (err) {\n const enqueueError = (query) => {\n process.nextTick(() => {\n query.native = this.native\n query.handleError(err)\n })\n }\n\n if (this._hasActiveQuery()) {\n enqueueError(this._activeQuery)\n this._activeQuery = null\n }\n\n this._queryQueue.forEach(enqueueError)\n this._queryQueue.length = 0\n}\n\n// connect to the backend\n// pass an optional callback to be called once connected\n// or with an error if there was a connection error\nClient.prototype._connect = function (cb) {\n const self = this\n\n if (this._connecting) {\n process.nextTick(() => cb(new Error('Client has already been connected. You cannot reuse a client.')))\n return\n }\n\n this._connecting = true\n\n this.connectionParameters.getLibpqConnectionString(function (err, conString) {\n if (self.connectionParameters.nativeConnectionString) conString = self.connectionParameters.nativeConnectionString\n if (err) return cb(err)\n self.native.connect(conString, function (err) {\n if (err) {\n self.native.end()\n return cb(err)\n }\n\n // set internal states to connected\n self._connected = true\n\n // handle connection errors from the native layer\n self.native.on('error', function (err) {\n self._queryable = false\n self._errorAllQueries(err)\n self.emit('error', err)\n })\n\n self.native.on('notification', function (msg) {\n self.emit('notification', {\n channel: msg.relname,\n payload: msg.extra,\n })\n })\n\n // signal we are connected now\n self.emit('connect')\n self._pulseQueryQueue(true)\n\n cb()\n })\n })\n}\n\nClient.prototype.connect = function (callback) {\n if (callback) {\n this._connect(callback)\n return\n }\n\n return new this._Promise((resolve, reject) => {\n this._connect((error) => {\n if (error) {\n reject(error)\n } else {\n resolve()\n }\n })\n })\n}\n\n// send a query to the server\n// this method is highly overloaded to take\n// 1) string query, optional array of parameters, optional function callback\n// 2) object query with {\n// string query\n// optional array values,\n// optional function callback instead of as a separate parameter\n// optional string name to name & cache the query plan\n// optional string rowMode = 'array' for an array of results\n// }\nClient.prototype.query = function (config, values, callback) {\n let query\n let result\n let readTimeout\n let readTimeoutTimer\n let queryCallback\n\n if (config === null || config === undefined) {\n throw new TypeError('Client was passed a null or undefined query')\n } else if (typeof config.submit === 'function') {\n readTimeout = config.query_timeout || this.connectionParameters.query_timeout\n result = query = config\n // accept query(new Query(...), (err, res) => { }) style\n if (typeof values === 'function') {\n config.callback = values\n }\n } else {\n readTimeout = config.query_timeout || this.connectionParameters.query_timeout\n query = new NativeQuery(config, values, callback)\n if (!query.callback) {\n let resolveOut, rejectOut\n result = new this._Promise((resolve, reject) => {\n resolveOut = resolve\n rejectOut = reject\n }).catch((err) => {\n Error.captureStackTrace(err)\n throw err\n })\n query.callback = (err, res) => (err ? rejectOut(err) : resolveOut(res))\n }\n }\n\n if (readTimeout) {\n queryCallback = query.callback\n\n readTimeoutTimer = setTimeout(() => {\n const error = new Error('Query read timeout')\n\n process.nextTick(() => {\n query.handleError(error, this.connection)\n })\n\n queryCallback(error)\n\n // we already returned an error,\n // just do nothing if query completes\n query.callback = () => {}\n\n // Remove from queue\n const index = this._queryQueue.indexOf(query)\n if (index > -1) {\n this._queryQueue.splice(index, 1)\n }\n\n this._pulseQueryQueue()\n }, readTimeout)\n\n query.callback = (err, res) => {\n clearTimeout(readTimeoutTimer)\n queryCallback(err, res)\n }\n }\n\n if (!this._queryable) {\n query.native = this.native\n process.nextTick(() => {\n query.handleError(new Error('Client has encountered a connection error and is not queryable'))\n })\n return result\n }\n\n if (this._ending) {\n query.native = this.native\n process.nextTick(() => {\n query.handleError(new Error('Client was closed and is not queryable'))\n })\n return result\n }\n\n this._queryQueue.push(query)\n this._pulseQueryQueue()\n return result\n}\n\n// disconnect from the backend server\nClient.prototype.end = function (cb) {\n const self = this\n\n this._ending = true\n\n if (!this._connected) {\n this.once('connect', this.end.bind(this, cb))\n }\n let result\n if (!cb) {\n result = new this._Promise(function (resolve, reject) {\n cb = (err) => (err ? reject(err) : resolve())\n })\n }\n this.native.end(function () {\n self._errorAllQueries(new Error('Connection terminated'))\n\n process.nextTick(() => {\n self.emit('end')\n if (cb) cb()\n })\n })\n return result\n}\n\nClient.prototype._hasActiveQuery = function () {\n return this._activeQuery && this._activeQuery.state !== 'error' && this._activeQuery.state !== 'end'\n}\n\nClient.prototype._pulseQueryQueue = function (initialConnection) {\n if (!this._connected) {\n return\n }\n if (this._hasActiveQuery()) {\n return\n }\n const query = this._queryQueue.shift()\n if (!query) {\n if (!initialConnection) {\n this.emit('drain')\n }\n return\n }\n this._activeQuery = query\n query.submit(this)\n const self = this\n query.once('_done', function () {\n self._pulseQueryQueue()\n })\n}\n\n// attempt to cancel an in-progress query\nClient.prototype.cancel = function (query) {\n if (this._activeQuery === query) {\n this.native.cancel(function () {})\n } else if (this._queryQueue.indexOf(query) !== -1) {\n this._queryQueue.splice(this._queryQueue.indexOf(query), 1)\n }\n}\n\nClient.prototype.ref = function () {}\nClient.prototype.unref = function () {}\n\nClient.prototype.setTypeParser = function (oid, format, parseFn) {\n return this._types.setTypeParser(oid, format, parseFn)\n}\n\nClient.prototype.getTypeParser = function (oid, format) {\n return this._types.getTypeParser(oid, format)\n}\n",
|
|
44
|
+
"'use strict'\n\nconst Client = require('./client')\nconst defaults = require('./defaults')\nconst Connection = require('./connection')\nconst Result = require('./result')\nconst utils = require('./utils')\nconst Pool = require('pg-pool')\nconst TypeOverrides = require('./type-overrides')\nconst { DatabaseError } = require('pg-protocol')\nconst { escapeIdentifier, escapeLiteral } = require('./utils')\n\nconst poolFactory = (Client) => {\n return class BoundPool extends Pool {\n constructor(options) {\n super(options, Client)\n }\n }\n}\n\nconst PG = function (clientConstructor) {\n this.defaults = defaults\n this.Client = clientConstructor\n this.Query = this.Client.Query\n this.Pool = poolFactory(this.Client)\n this._pools = []\n this.Connection = Connection\n this.types = require('pg-types')\n this.DatabaseError = DatabaseError\n this.TypeOverrides = TypeOverrides\n this.escapeIdentifier = escapeIdentifier\n this.escapeLiteral = escapeLiteral\n this.Result = Result\n this.utils = utils\n}\n\nif (typeof process.env.NODE_PG_FORCE_NATIVE !== 'undefined') {\n module.exports = new PG(require('./native'))\n} else {\n module.exports = new PG(Client)\n\n // lazy require native module...the native module may not have installed\n Object.defineProperty(module.exports, 'native', {\n configurable: true,\n enumerable: false,\n get() {\n let native = null\n try {\n native = new PG(require('./native'))\n } catch (err) {\n if (err.code !== 'MODULE_NOT_FOUND') {\n throw err\n }\n }\n\n // overwrite module.exports.native so that getter is never called again\n Object.defineProperty(module.exports, 'native', {\n value: native,\n })\n\n return native\n },\n })\n}\n",
|
|
45
|
+
"var SqlString = exports;\n\nvar ID_GLOBAL_REGEXP = /`/g;\nvar QUAL_GLOBAL_REGEXP = /\\./g;\nvar CHARS_GLOBAL_REGEXP = /[\\0\\b\\t\\n\\r\\x1a\\\"\\'\\\\]/g; // eslint-disable-line no-control-regex\nvar CHARS_ESCAPE_MAP = {\n '\\0' : '\\\\0',\n '\\b' : '\\\\b',\n '\\t' : '\\\\t',\n '\\n' : '\\\\n',\n '\\r' : '\\\\r',\n '\\x1a' : '\\\\Z',\n '\"' : '\\\\\"',\n '\\'' : '\\\\\\'',\n '\\\\' : '\\\\\\\\'\n};\n\nSqlString.escapeId = function escapeId(val, forbidQualified) {\n if (Array.isArray(val)) {\n var sql = '';\n\n for (var i = 0; i < val.length; i++) {\n sql += (i === 0 ? '' : ', ') + SqlString.escapeId(val[i], forbidQualified);\n }\n\n return sql;\n } else if (forbidQualified) {\n return '`' + String(val).replace(ID_GLOBAL_REGEXP, '``') + '`';\n } else {\n return '`' + String(val).replace(ID_GLOBAL_REGEXP, '``').replace(QUAL_GLOBAL_REGEXP, '`.`') + '`';\n }\n};\n\nSqlString.escape = function escape(val, stringifyObjects, timeZone) {\n if (val === undefined || val === null) {\n return 'NULL';\n }\n\n switch (typeof val) {\n case 'boolean': return (val) ? 'true' : 'false';\n case 'number': return val + '';\n case 'object':\n if (Object.prototype.toString.call(val) === '[object Date]') {\n return SqlString.dateToString(val, timeZone || 'local');\n } else if (Array.isArray(val)) {\n return SqlString.arrayToList(val, timeZone);\n } else if (Buffer.isBuffer(val)) {\n return SqlString.bufferToString(val);\n } else if (typeof val.toSqlString === 'function') {\n return String(val.toSqlString());\n } else if (stringifyObjects) {\n return escapeString(val.toString());\n } else {\n return SqlString.objectToValues(val, timeZone);\n }\n default: return escapeString(val);\n }\n};\n\nSqlString.arrayToList = function arrayToList(array, timeZone) {\n var sql = '';\n\n for (var i = 0; i < array.length; i++) {\n var val = array[i];\n\n if (Array.isArray(val)) {\n sql += (i === 0 ? '' : ', ') + '(' + SqlString.arrayToList(val, timeZone) + ')';\n } else {\n sql += (i === 0 ? '' : ', ') + SqlString.escape(val, true, timeZone);\n }\n }\n\n return sql;\n};\n\nSqlString.format = function format(sql, values, stringifyObjects, timeZone) {\n if (values == null) {\n return sql;\n }\n\n if (!Array.isArray(values)) {\n values = [values];\n }\n\n var chunkIndex = 0;\n var placeholdersRegex = /\\?+/g;\n var result = '';\n var valuesIndex = 0;\n var match;\n\n while (valuesIndex < values.length && (match = placeholdersRegex.exec(sql))) {\n var len = match[0].length;\n\n if (len > 2) {\n continue;\n }\n\n var value = len === 2\n ? SqlString.escapeId(values[valuesIndex])\n : SqlString.escape(values[valuesIndex], stringifyObjects, timeZone);\n\n result += sql.slice(chunkIndex, match.index) + value;\n chunkIndex = placeholdersRegex.lastIndex;\n valuesIndex++;\n }\n\n if (chunkIndex === 0) {\n // Nothing was replaced\n return sql;\n }\n\n if (chunkIndex < sql.length) {\n return result + sql.slice(chunkIndex);\n }\n\n return result;\n};\n\nSqlString.dateToString = function dateToString(date, timeZone) {\n var dt = new Date(date);\n\n if (isNaN(dt.getTime())) {\n return 'NULL';\n }\n\n var year;\n var month;\n var day;\n var hour;\n var minute;\n var second;\n var millisecond;\n\n if (timeZone === 'local') {\n year = dt.getFullYear();\n month = dt.getMonth() + 1;\n day = dt.getDate();\n hour = dt.getHours();\n minute = dt.getMinutes();\n second = dt.getSeconds();\n millisecond = dt.getMilliseconds();\n } else {\n var tz = convertTimezone(timeZone);\n\n if (tz !== false && tz !== 0) {\n dt.setTime(dt.getTime() + (tz * 60000));\n }\n\n year = dt.getUTCFullYear();\n month = dt.getUTCMonth() + 1;\n day = dt.getUTCDate();\n hour = dt.getUTCHours();\n minute = dt.getUTCMinutes();\n second = dt.getUTCSeconds();\n millisecond = dt.getUTCMilliseconds();\n }\n\n // YYYY-MM-DD HH:mm:ss.mmm\n var str = zeroPad(year, 4) + '-' + zeroPad(month, 2) + '-' + zeroPad(day, 2) + ' ' +\n zeroPad(hour, 2) + ':' + zeroPad(minute, 2) + ':' + zeroPad(second, 2) + '.' +\n zeroPad(millisecond, 3);\n\n return escapeString(str);\n};\n\nSqlString.bufferToString = function bufferToString(buffer) {\n return 'X' + escapeString(buffer.toString('hex'));\n};\n\nSqlString.objectToValues = function objectToValues(object, timeZone) {\n var sql = '';\n\n for (var key in object) {\n var val = object[key];\n\n if (typeof val === 'function') {\n continue;\n }\n\n sql += (sql.length === 0 ? '' : ', ') + SqlString.escapeId(key) + ' = ' + SqlString.escape(val, true, timeZone);\n }\n\n return sql;\n};\n\nSqlString.raw = function raw(sql) {\n if (typeof sql !== 'string') {\n throw new TypeError('argument sql must be a string');\n }\n\n return {\n toSqlString: function toSqlString() { return sql; }\n };\n};\n\nfunction escapeString(val) {\n var chunkIndex = CHARS_GLOBAL_REGEXP.lastIndex = 0;\n var escapedVal = '';\n var match;\n\n while ((match = CHARS_GLOBAL_REGEXP.exec(val))) {\n escapedVal += val.slice(chunkIndex, match.index) + CHARS_ESCAPE_MAP[match[0]];\n chunkIndex = CHARS_GLOBAL_REGEXP.lastIndex;\n }\n\n if (chunkIndex === 0) {\n // Nothing was escaped\n return \"'\" + val + \"'\";\n }\n\n if (chunkIndex < val.length) {\n return \"'\" + escapedVal + val.slice(chunkIndex) + \"'\";\n }\n\n return \"'\" + escapedVal + \"'\";\n}\n\nfunction zeroPad(number, length) {\n number = number.toString();\n while (number.length < length) {\n number = '0' + number;\n }\n\n return number;\n}\n\nfunction convertTimezone(tz) {\n if (tz === 'Z') {\n return 0;\n }\n\n var m = tz.match(/([\\+\\-\\s])(\\d\\d):?(\\d\\d)?/);\n if (m) {\n return (m[1] === '-' ? -1 : 1) * (parseInt(m[2], 10) + ((m[3] ? parseInt(m[3], 10) : 0) / 60)) * 60;\n }\n return false;\n}\n",
|
|
46
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createLRU = void 0;\nconst createLRU = (options) => {\n let { max } = options;\n if (!(Number.isInteger(max) && max > 0))\n throw new TypeError('`max` must be a positive integer');\n let size = 0;\n let head = 0;\n let tail = 0;\n let free = [];\n const { onEviction } = options;\n const keyMap = new Map();\n const keyList = new Array(max).fill(undefined);\n const valList = new Array(max).fill(undefined);\n const next = new Array(max).fill(0);\n const prev = new Array(max).fill(0);\n const setTail = (index, type) => {\n if (index === tail)\n return;\n const nextIndex = next[index];\n const prevIndex = prev[index];\n if (index === head)\n head = nextIndex;\n else if (type === 'get' || prevIndex !== 0)\n next[prevIndex] = nextIndex;\n if (nextIndex !== 0)\n prev[nextIndex] = prevIndex;\n next[tail] = index;\n prev[index] = tail;\n next[index] = 0;\n tail = index;\n };\n const _evict = () => {\n const evictHead = head;\n const key = keyList[evictHead];\n onEviction === null || onEviction === void 0 ? void 0 : onEviction(key, valList[evictHead]);\n keyMap.delete(key);\n keyList[evictHead] = undefined;\n valList[evictHead] = undefined;\n head = next[evictHead];\n if (head !== 0)\n prev[head] = 0;\n size--;\n if (size === 0)\n head = tail = 0;\n free.push(evictHead);\n return evictHead;\n };\n return {\n /** Adds a key-value pair to the cache. Updates the value if the key already exists. */\n set(key, value) {\n if (key === undefined)\n return;\n let index = keyMap.get(key);\n if (index === undefined) {\n index = size === max ? _evict() : free.length > 0 ? free.pop() : size;\n keyMap.set(key, index);\n keyList[index] = key;\n size++;\n }\n else\n onEviction === null || onEviction === void 0 ? void 0 : onEviction(key, valList[index]);\n valList[index] = value;\n if (size === 1)\n head = tail = index;\n else\n setTail(index, 'set');\n },\n /** Retrieves the value for a given key and moves the key to the most recent position. */\n get(key) {\n const index = keyMap.get(key);\n if (index === undefined)\n return;\n if (index !== tail)\n setTail(index, 'get');\n return valList[index];\n },\n /** Retrieves the value for a given key without changing its position. */\n peek: (key) => {\n const index = keyMap.get(key);\n return index !== undefined ? valList[index] : undefined;\n },\n /** Checks if a key exists in the cache. */\n has: (key) => keyMap.has(key),\n /** Iterates over all keys in the cache, from most recent to least recent. */\n *keys() {\n let current = tail;\n for (let i = 0; i < size; i++) {\n yield keyList[current];\n current = prev[current];\n }\n },\n /** Iterates over all values in the cache, from most recent to least recent. */\n *values() {\n let current = tail;\n for (let i = 0; i < size; i++) {\n yield valList[current];\n current = prev[current];\n }\n },\n /** Iterates over `[key, value]` pairs in the cache, from most recent to least recent. */\n *entries() {\n let current = tail;\n for (let i = 0; i < size; i++) {\n yield [keyList[current], valList[current]];\n current = prev[current];\n }\n },\n /** Iterates over each value-key pair in the cache, from most recent to least recent. */\n forEach: (callback) => {\n let current = tail;\n for (let i = 0; i < size; i++) {\n const key = keyList[current];\n const value = valList[current];\n callback(value, key);\n current = prev[current];\n }\n },\n /** Deletes a key-value pair from the cache. */\n delete(key) {\n const index = keyMap.get(key);\n if (index === undefined)\n return false;\n onEviction === null || onEviction === void 0 ? void 0 : onEviction(key, valList[index]);\n keyMap.delete(key);\n free.push(index);\n keyList[index] = undefined;\n valList[index] = undefined;\n const prevIndex = prev[index];\n const nextIndex = next[index];\n if (prevIndex !== 0)\n next[prevIndex] = nextIndex;\n if (nextIndex !== 0)\n prev[nextIndex] = prevIndex;\n if (index === head)\n head = nextIndex;\n if (index === tail)\n tail = prevIndex;\n size--;\n return true;\n },\n /** Evicts the oldest item or the specified number of the oldest items from the cache. */\n evict: (number) => {\n let toPrune = Math.min(number, size);\n while (toPrune > 0) {\n _evict();\n toPrune--;\n }\n },\n /** Clears all key-value pairs from the cache. */\n clear() {\n if (typeof onEviction === 'function') {\n const iterator = keyMap.values();\n for (let result = iterator.next(); !result.done; result = iterator.next())\n onEviction(keyList[result.value], valList[result.value]);\n }\n keyMap.clear();\n keyList.fill(undefined);\n valList.fill(undefined);\n free = [];\n size = 0;\n head = tail = 0;\n },\n /** Resizes the cache to a new maximum size, evicting items if necessary. */\n resize: (newMax) => {\n if (!(Number.isInteger(newMax) && newMax > 0))\n throw new TypeError('`max` must be a positive integer');\n if (newMax === max)\n return;\n if (newMax < max) {\n let current = tail;\n const preserve = Math.min(size, newMax);\n const remove = size - preserve;\n const newKeyList = new Array(newMax);\n const newValList = new Array(newMax);\n const newNext = new Array(newMax);\n const newPrev = new Array(newMax);\n for (let i = 1; i <= remove; i++)\n onEviction === null || onEviction === void 0 ? void 0 : onEviction(keyList[i], valList[i]);\n for (let i = preserve - 1; i >= 0; i--) {\n newKeyList[i] = keyList[current];\n newValList[i] = valList[current];\n newNext[i] = i + 1;\n newPrev[i] = i - 1;\n keyMap.set(newKeyList[i], i);\n current = prev[current];\n }\n head = 0;\n tail = preserve - 1;\n size = preserve;\n keyList.length = newMax;\n valList.length = newMax;\n next.length = newMax;\n prev.length = newMax;\n for (let i = 0; i < preserve; i++) {\n keyList[i] = newKeyList[i];\n valList[i] = newValList[i];\n next[i] = newNext[i];\n prev[i] = newPrev[i];\n }\n free = [];\n for (let i = preserve; i < newMax; i++)\n free.push(i);\n }\n else {\n const fill = newMax - max;\n keyList.push(...new Array(fill).fill(undefined));\n valList.push(...new Array(fill).fill(undefined));\n next.push(...new Array(fill).fill(0));\n prev.push(...new Array(fill).fill(0));\n }\n max = newMax;\n },\n /** Returns the maximum number of items that can be stored in the cache. */\n get max() {\n return max;\n },\n /** Returns the number of items currently stored in the cache. */\n get size() {\n return size;\n },\n /** Returns the number of currently available slots in the cache before reaching the maximum size. */\n get available() {\n return max - size;\n },\n };\n};\nexports.createLRU = createLRU;\n",
|
|
47
|
+
"'use strict';\n\nconst { createLRU } = require('lru.min');\n\nconst parserCache = createLRU({\n max: 15000,\n});\n\nfunction keyFromFields(type, fields, options, config) {\n const res = [\n type,\n typeof options.nestTables,\n options.nestTables,\n Boolean(options.rowsAsArray),\n Boolean(options.supportBigNumbers || config.supportBigNumbers),\n Boolean(options.bigNumberStrings || config.bigNumberStrings),\n typeof options.typeCast === 'boolean'\n ? options.typeCast\n : typeof options.typeCast,\n options.timezone || config.timezone,\n Boolean(options.decimalNumbers),\n options.dateStrings,\n ];\n\n for (let i = 0; i < fields.length; ++i) {\n const field = fields[i];\n\n res.push([\n field.name,\n field.columnType,\n field.length,\n field.schema,\n field.table,\n field.flags,\n field.characterSet,\n ]);\n }\n\n return JSON.stringify(res, null, 0);\n}\n\nfunction getParser(type, fields, options, config, compiler) {\n const key = keyFromFields(type, fields, options, config);\n let parser = parserCache.get(key);\n\n if (parser) {\n return parser;\n }\n\n parser = compiler(fields, options, config);\n parserCache.set(key, parser);\n return parser;\n}\n\nfunction setMaxCache(max) {\n parserCache.resize(max);\n}\n\nfunction clearCache() {\n parserCache.clear();\n}\n\nmodule.exports = {\n getParser: getParser,\n setMaxCache: setMaxCache,\n clearCache: clearCache,\n _keyFromFields: keyFromFields,\n};\n",
|
|
48
|
+
"'use strict';\n\n/**\n * Custom implementation of a double ended queue.\n */\nfunction Denque(array, options) {\n var options = options || {};\n this._capacity = options.capacity;\n\n this._head = 0;\n this._tail = 0;\n\n if (Array.isArray(array)) {\n this._fromArray(array);\n } else {\n this._capacityMask = 0x3;\n this._list = new Array(4);\n }\n}\n\n/**\n * --------------\n * PUBLIC API\n * -------------\n */\n\n/**\n * Returns the item at the specified index from the list.\n * 0 is the first element, 1 is the second, and so on...\n * Elements at negative values are that many from the end: -1 is one before the end\n * (the last element), -2 is two before the end (one before last), etc.\n * @param index\n * @returns {*}\n */\nDenque.prototype.peekAt = function peekAt(index) {\n var i = index;\n // expect a number or return undefined\n if ((i !== (i | 0))) {\n return void 0;\n }\n var len = this.size();\n if (i >= len || i < -len) return undefined;\n if (i < 0) i += len;\n i = (this._head + i) & this._capacityMask;\n return this._list[i];\n};\n\n/**\n * Alias for peekAt()\n * @param i\n * @returns {*}\n */\nDenque.prototype.get = function get(i) {\n return this.peekAt(i);\n};\n\n/**\n * Returns the first item in the list without removing it.\n * @returns {*}\n */\nDenque.prototype.peek = function peek() {\n if (this._head === this._tail) return undefined;\n return this._list[this._head];\n};\n\n/**\n * Alias for peek()\n * @returns {*}\n */\nDenque.prototype.peekFront = function peekFront() {\n return this.peek();\n};\n\n/**\n * Returns the item that is at the back of the queue without removing it.\n * Uses peekAt(-1)\n */\nDenque.prototype.peekBack = function peekBack() {\n return this.peekAt(-1);\n};\n\n/**\n * Returns the current length of the queue\n * @return {Number}\n */\nObject.defineProperty(Denque.prototype, 'length', {\n get: function length() {\n return this.size();\n }\n});\n\n/**\n * Return the number of items on the list, or 0 if empty.\n * @returns {number}\n */\nDenque.prototype.size = function size() {\n if (this._head === this._tail) return 0;\n if (this._head < this._tail) return this._tail - this._head;\n else return this._capacityMask + 1 - (this._head - this._tail);\n};\n\n/**\n * Add an item at the beginning of the list.\n * @param item\n */\nDenque.prototype.unshift = function unshift(item) {\n if (arguments.length === 0) return this.size();\n var len = this._list.length;\n this._head = (this._head - 1 + len) & this._capacityMask;\n this._list[this._head] = item;\n if (this._tail === this._head) this._growArray();\n if (this._capacity && this.size() > this._capacity) this.pop();\n if (this._head < this._tail) return this._tail - this._head;\n else return this._capacityMask + 1 - (this._head - this._tail);\n};\n\n/**\n * Remove and return the first item on the list,\n * Returns undefined if the list is empty.\n * @returns {*}\n */\nDenque.prototype.shift = function shift() {\n var head = this._head;\n if (head === this._tail) return undefined;\n var item = this._list[head];\n this._list[head] = undefined;\n this._head = (head + 1) & this._capacityMask;\n if (head < 2 && this._tail > 10000 && this._tail <= this._list.length >>> 2) this._shrinkArray();\n return item;\n};\n\n/**\n * Add an item to the bottom of the list.\n * @param item\n */\nDenque.prototype.push = function push(item) {\n if (arguments.length === 0) return this.size();\n var tail = this._tail;\n this._list[tail] = item;\n this._tail = (tail + 1) & this._capacityMask;\n if (this._tail === this._head) {\n this._growArray();\n }\n if (this._capacity && this.size() > this._capacity) {\n this.shift();\n }\n if (this._head < this._tail) return this._tail - this._head;\n else return this._capacityMask + 1 - (this._head - this._tail);\n};\n\n/**\n * Remove and return the last item on the list.\n * Returns undefined if the list is empty.\n * @returns {*}\n */\nDenque.prototype.pop = function pop() {\n var tail = this._tail;\n if (tail === this._head) return undefined;\n var len = this._list.length;\n this._tail = (tail - 1 + len) & this._capacityMask;\n var item = this._list[this._tail];\n this._list[this._tail] = undefined;\n if (this._head < 2 && tail > 10000 && tail <= len >>> 2) this._shrinkArray();\n return item;\n};\n\n/**\n * Remove and return the item at the specified index from the list.\n * Returns undefined if the list is empty.\n * @param index\n * @returns {*}\n */\nDenque.prototype.removeOne = function removeOne(index) {\n var i = index;\n // expect a number or return undefined\n if ((i !== (i | 0))) {\n return void 0;\n }\n if (this._head === this._tail) return void 0;\n var size = this.size();\n var len = this._list.length;\n if (i >= size || i < -size) return void 0;\n if (i < 0) i += size;\n i = (this._head + i) & this._capacityMask;\n var item = this._list[i];\n var k;\n if (index < size / 2) {\n for (k = index; k > 0; k--) {\n this._list[i] = this._list[i = (i - 1 + len) & this._capacityMask];\n }\n this._list[i] = void 0;\n this._head = (this._head + 1 + len) & this._capacityMask;\n } else {\n for (k = size - 1 - index; k > 0; k--) {\n this._list[i] = this._list[i = (i + 1 + len) & this._capacityMask];\n }\n this._list[i] = void 0;\n this._tail = (this._tail - 1 + len) & this._capacityMask;\n }\n return item;\n};\n\n/**\n * Remove number of items from the specified index from the list.\n * Returns array of removed items.\n * Returns undefined if the list is empty.\n * @param index\n * @param count\n * @returns {array}\n */\nDenque.prototype.remove = function remove(index, count) {\n var i = index;\n var removed;\n var del_count = count;\n // expect a number or return undefined\n if ((i !== (i | 0))) {\n return void 0;\n }\n if (this._head === this._tail) return void 0;\n var size = this.size();\n var len = this._list.length;\n if (i >= size || i < -size || count < 1) return void 0;\n if (i < 0) i += size;\n if (count === 1 || !count) {\n removed = new Array(1);\n removed[0] = this.removeOne(i);\n return removed;\n }\n if (i === 0 && i + count >= size) {\n removed = this.toArray();\n this.clear();\n return removed;\n }\n if (i + count > size) count = size - i;\n var k;\n removed = new Array(count);\n for (k = 0; k < count; k++) {\n removed[k] = this._list[(this._head + i + k) & this._capacityMask];\n }\n i = (this._head + i) & this._capacityMask;\n if (index + count === size) {\n this._tail = (this._tail - count + len) & this._capacityMask;\n for (k = count; k > 0; k--) {\n this._list[i = (i + 1 + len) & this._capacityMask] = void 0;\n }\n return removed;\n }\n if (index === 0) {\n this._head = (this._head + count + len) & this._capacityMask;\n for (k = count - 1; k > 0; k--) {\n this._list[i = (i + 1 + len) & this._capacityMask] = void 0;\n }\n return removed;\n }\n if (i < size / 2) {\n this._head = (this._head + index + count + len) & this._capacityMask;\n for (k = index; k > 0; k--) {\n this.unshift(this._list[i = (i - 1 + len) & this._capacityMask]);\n }\n i = (this._head - 1 + len) & this._capacityMask;\n while (del_count > 0) {\n this._list[i = (i - 1 + len) & this._capacityMask] = void 0;\n del_count--;\n }\n if (index < 0) this._tail = i;\n } else {\n this._tail = i;\n i = (i + count + len) & this._capacityMask;\n for (k = size - (count + index); k > 0; k--) {\n this.push(this._list[i++]);\n }\n i = this._tail;\n while (del_count > 0) {\n this._list[i = (i + 1 + len) & this._capacityMask] = void 0;\n del_count--;\n }\n }\n if (this._head < 2 && this._tail > 10000 && this._tail <= len >>> 2) this._shrinkArray();\n return removed;\n};\n\n/**\n * Native splice implementation.\n * Remove number of items from the specified index from the list and/or add new elements.\n * Returns array of removed items or empty array if count == 0.\n * Returns undefined if the list is empty.\n *\n * @param index\n * @param count\n * @param {...*} [elements]\n * @returns {array}\n */\nDenque.prototype.splice = function splice(index, count) {\n var i = index;\n // expect a number or return undefined\n if ((i !== (i | 0))) {\n return void 0;\n }\n var size = this.size();\n if (i < 0) i += size;\n if (i > size) return void 0;\n if (arguments.length > 2) {\n var k;\n var temp;\n var removed;\n var arg_len = arguments.length;\n var len = this._list.length;\n var arguments_index = 2;\n if (!size || i < size / 2) {\n temp = new Array(i);\n for (k = 0; k < i; k++) {\n temp[k] = this._list[(this._head + k) & this._capacityMask];\n }\n if (count === 0) {\n removed = [];\n if (i > 0) {\n this._head = (this._head + i + len) & this._capacityMask;\n }\n } else {\n removed = this.remove(i, count);\n this._head = (this._head + i + len) & this._capacityMask;\n }\n while (arg_len > arguments_index) {\n this.unshift(arguments[--arg_len]);\n }\n for (k = i; k > 0; k--) {\n this.unshift(temp[k - 1]);\n }\n } else {\n temp = new Array(size - (i + count));\n var leng = temp.length;\n for (k = 0; k < leng; k++) {\n temp[k] = this._list[(this._head + i + count + k) & this._capacityMask];\n }\n if (count === 0) {\n removed = [];\n if (i != size) {\n this._tail = (this._head + i + len) & this._capacityMask;\n }\n } else {\n removed = this.remove(i, count);\n this._tail = (this._tail - leng + len) & this._capacityMask;\n }\n while (arguments_index < arg_len) {\n this.push(arguments[arguments_index++]);\n }\n for (k = 0; k < leng; k++) {\n this.push(temp[k]);\n }\n }\n return removed;\n } else {\n return this.remove(i, count);\n }\n};\n\n/**\n * Soft clear - does not reset capacity.\n */\nDenque.prototype.clear = function clear() {\n this._list = new Array(this._list.length);\n this._head = 0;\n this._tail = 0;\n};\n\n/**\n * Returns true or false whether the list is empty.\n * @returns {boolean}\n */\nDenque.prototype.isEmpty = function isEmpty() {\n return this._head === this._tail;\n};\n\n/**\n * Returns an array of all queue items.\n * @returns {Array}\n */\nDenque.prototype.toArray = function toArray() {\n return this._copyArray(false);\n};\n\n/**\n * -------------\n * INTERNALS\n * -------------\n */\n\n/**\n * Fills the queue with items from an array\n * For use in the constructor\n * @param array\n * @private\n */\nDenque.prototype._fromArray = function _fromArray(array) {\n var length = array.length;\n var capacity = this._nextPowerOf2(length);\n\n this._list = new Array(capacity);\n this._capacityMask = capacity - 1;\n this._tail = length;\n\n for (var i = 0; i < length; i++) this._list[i] = array[i];\n};\n\n/**\n *\n * @param fullCopy\n * @param size Initialize the array with a specific size. Will default to the current list size\n * @returns {Array}\n * @private\n */\nDenque.prototype._copyArray = function _copyArray(fullCopy, size) {\n var src = this._list;\n var capacity = src.length;\n var length = this.length;\n size = size | length;\n\n // No prealloc requested and the buffer is contiguous\n if (size == length && this._head < this._tail) {\n // Simply do a fast slice copy\n return this._list.slice(this._head, this._tail);\n }\n\n var dest = new Array(size);\n\n var k = 0;\n var i;\n if (fullCopy || this._head > this._tail) {\n for (i = this._head; i < capacity; i++) dest[k++] = src[i];\n for (i = 0; i < this._tail; i++) dest[k++] = src[i];\n } else {\n for (i = this._head; i < this._tail; i++) dest[k++] = src[i];\n }\n\n return dest;\n}\n\n/**\n * Grows the internal list array.\n * @private\n */\nDenque.prototype._growArray = function _growArray() {\n if (this._head != 0) {\n // double array size and copy existing data, head to end, then beginning to tail.\n var newList = this._copyArray(true, this._list.length << 1);\n\n this._tail = this._list.length;\n this._head = 0;\n\n this._list = newList;\n } else {\n this._tail = this._list.length;\n this._list.length <<= 1;\n }\n\n this._capacityMask = (this._capacityMask << 1) | 1;\n};\n\n/**\n * Shrinks the internal list array.\n * @private\n */\nDenque.prototype._shrinkArray = function _shrinkArray() {\n this._list.length >>>= 1;\n this._capacityMask >>>= 1;\n};\n\n/**\n * Find the next power of 2, at least 4\n * @private\n * @param {number} num \n * @returns {number}\n */\nDenque.prototype._nextPowerOf2 = function _nextPowerOf2(num) {\n var log2 = Math.log(num) / Math.log(2);\n var nextPow2 = 1 << (log2 + 1);\n\n return Math.max(nextPow2, 4);\n}\n\nmodule.exports = Denque;\n",
|
|
49
|
+
"// This file was modified by Oracle on June 1, 2021.\n// An entry was created for a new error reported by the MySQL server due to\n// client inactivity.\n// Modifications copyright (c) 2021, Oracle and/or its affiliates.\n\n'use strict';\n\n// originally copied from https://raw.githubusercontent.com/mysqljs/mysql/7770ee5bb13260c56a160b91fe480d9165dbeeba/lib/protocol/constants/errors.js\n// (c) node-mysql authors\n\n// updated to contain error codes as is contained in MySQL 8.0\n// by adapting node-mysql: /.../generate-error-constants.js\n\n/**\n * MySQL error constants\n *\n * Extracted from version 8.0.33\n *\n * !! Generated by generate-error-constants.js, do not modify by hand !!\n */\n\nexports.EE_CANTCREATEFILE = 1;\nexports.EE_READ = 2;\nexports.EE_WRITE = 3;\nexports.EE_BADCLOSE = 4;\nexports.EE_OUTOFMEMORY = 5;\nexports.EE_DELETE = 6;\nexports.EE_LINK = 7;\nexports.EE_EOFERR = 9;\nexports.EE_CANTLOCK = 10;\nexports.EE_CANTUNLOCK = 11;\nexports.EE_DIR = 12;\nexports.EE_STAT = 13;\nexports.EE_CANT_CHSIZE = 14;\nexports.EE_CANT_OPEN_STREAM = 15;\nexports.EE_GETWD = 16;\nexports.EE_SETWD = 17;\nexports.EE_LINK_WARNING = 18;\nexports.EE_OPEN_WARNING = 19;\nexports.EE_DISK_FULL = 20;\nexports.EE_CANT_MKDIR = 21;\nexports.EE_UNKNOWN_CHARSET = 22;\nexports.EE_OUT_OF_FILERESOURCES = 23;\nexports.EE_CANT_READLINK = 24;\nexports.EE_CANT_SYMLINK = 25;\nexports.EE_REALPATH = 26;\nexports.EE_SYNC = 27;\nexports.EE_UNKNOWN_COLLATION = 28;\nexports.EE_FILENOTFOUND = 29;\nexports.EE_FILE_NOT_CLOSED = 30;\nexports.EE_CHANGE_OWNERSHIP = 31;\nexports.EE_CHANGE_PERMISSIONS = 32;\nexports.EE_CANT_SEEK = 33;\nexports.EE_CAPACITY_EXCEEDED = 34;\nexports.EE_DISK_FULL_WITH_RETRY_MSG = 35;\nexports.EE_FAILED_TO_CREATE_TIMER = 36;\nexports.EE_FAILED_TO_DELETE_TIMER = 37;\nexports.EE_FAILED_TO_CREATE_TIMER_QUEUE = 38;\nexports.EE_FAILED_TO_START_TIMER_NOTIFY_THREAD = 39;\nexports.EE_FAILED_TO_CREATE_TIMER_NOTIFY_THREAD_INTERRUPT_EVENT = 40;\nexports.EE_EXITING_TIMER_NOTIFY_THREAD = 41;\nexports.EE_WIN_LIBRARY_LOAD_FAILED = 42;\nexports.EE_WIN_RUN_TIME_ERROR_CHECK = 43;\nexports.EE_FAILED_TO_DETERMINE_LARGE_PAGE_SIZE = 44;\nexports.EE_FAILED_TO_KILL_ALL_THREADS = 45;\nexports.EE_FAILED_TO_CREATE_IO_COMPLETION_PORT = 46;\nexports.EE_FAILED_TO_OPEN_DEFAULTS_FILE = 47;\nexports.EE_FAILED_TO_HANDLE_DEFAULTS_FILE = 48;\nexports.EE_WRONG_DIRECTIVE_IN_CONFIG_FILE = 49;\nexports.EE_SKIPPING_DIRECTIVE_DUE_TO_MAX_INCLUDE_RECURSION = 50;\nexports.EE_INCORRECT_GRP_DEFINITION_IN_CONFIG_FILE = 51;\nexports.EE_OPTION_WITHOUT_GRP_IN_CONFIG_FILE = 52;\nexports.EE_CONFIG_FILE_PERMISSION_ERROR = 53;\nexports.EE_IGNORE_WORLD_WRITABLE_CONFIG_FILE = 54;\nexports.EE_USING_DISABLED_OPTION = 55;\nexports.EE_USING_DISABLED_SHORT_OPTION = 56;\nexports.EE_USING_PASSWORD_ON_CLI_IS_INSECURE = 57;\nexports.EE_UNKNOWN_SUFFIX_FOR_VARIABLE = 58;\nexports.EE_SSL_ERROR_FROM_FILE = 59;\nexports.EE_SSL_ERROR = 60;\nexports.EE_NET_SEND_ERROR_IN_BOOTSTRAP = 61;\nexports.EE_PACKETS_OUT_OF_ORDER = 62;\nexports.EE_UNKNOWN_PROTOCOL_OPTION = 63;\nexports.EE_FAILED_TO_LOCATE_SERVER_PUBLIC_KEY = 64;\nexports.EE_PUBLIC_KEY_NOT_IN_PEM_FORMAT = 65;\nexports.EE_DEBUG_INFO = 66;\nexports.EE_UNKNOWN_VARIABLE = 67;\nexports.EE_UNKNOWN_OPTION = 68;\nexports.EE_UNKNOWN_SHORT_OPTION = 69;\nexports.EE_OPTION_WITHOUT_ARGUMENT = 70;\nexports.EE_OPTION_REQUIRES_ARGUMENT = 71;\nexports.EE_SHORT_OPTION_REQUIRES_ARGUMENT = 72;\nexports.EE_OPTION_IGNORED_DUE_TO_INVALID_VALUE = 73;\nexports.EE_OPTION_WITH_EMPTY_VALUE = 74;\nexports.EE_FAILED_TO_ASSIGN_MAX_VALUE_TO_OPTION = 75;\nexports.EE_INCORRECT_BOOLEAN_VALUE_FOR_OPTION = 76;\nexports.EE_FAILED_TO_SET_OPTION_VALUE = 77;\nexports.EE_INCORRECT_INT_VALUE_FOR_OPTION = 78;\nexports.EE_INCORRECT_UINT_VALUE_FOR_OPTION = 79;\nexports.EE_ADJUSTED_SIGNED_VALUE_FOR_OPTION = 80;\nexports.EE_ADJUSTED_UNSIGNED_VALUE_FOR_OPTION = 81;\nexports.EE_ADJUSTED_ULONGLONG_VALUE_FOR_OPTION = 82;\nexports.EE_ADJUSTED_DOUBLE_VALUE_FOR_OPTION = 83;\nexports.EE_INVALID_DECIMAL_VALUE_FOR_OPTION = 84;\nexports.EE_COLLATION_PARSER_ERROR = 85;\nexports.EE_FAILED_TO_RESET_BEFORE_PRIMARY_IGNORABLE_CHAR = 86;\nexports.EE_FAILED_TO_RESET_BEFORE_TERTIARY_IGNORABLE_CHAR = 87;\nexports.EE_SHIFT_CHAR_OUT_OF_RANGE = 88;\nexports.EE_RESET_CHAR_OUT_OF_RANGE = 89;\nexports.EE_UNKNOWN_LDML_TAG = 90;\nexports.EE_FAILED_TO_RESET_BEFORE_SECONDARY_IGNORABLE_CHAR = 91;\nexports.EE_FAILED_PROCESSING_DIRECTIVE = 92;\nexports.EE_PTHREAD_KILL_FAILED = 93;\nexports.HA_ERR_KEY_NOT_FOUND = 120;\nexports.HA_ERR_FOUND_DUPP_KEY = 121;\nexports.HA_ERR_INTERNAL_ERROR = 122;\nexports.HA_ERR_RECORD_CHANGED = 123;\nexports.HA_ERR_WRONG_INDEX = 124;\nexports.HA_ERR_ROLLED_BACK = 125;\nexports.HA_ERR_CRASHED = 126;\nexports.HA_ERR_WRONG_IN_RECORD = 127;\nexports.HA_ERR_OUT_OF_MEM = 128;\nexports.HA_ERR_NOT_A_TABLE = 130;\nexports.HA_ERR_WRONG_COMMAND = 131;\nexports.HA_ERR_OLD_FILE = 132;\nexports.HA_ERR_NO_ACTIVE_RECORD = 133;\nexports.HA_ERR_RECORD_DELETED = 134;\nexports.HA_ERR_RECORD_FILE_FULL = 135;\nexports.HA_ERR_INDEX_FILE_FULL = 136;\nexports.HA_ERR_END_OF_FILE = 137;\nexports.HA_ERR_UNSUPPORTED = 138;\nexports.HA_ERR_TOO_BIG_ROW = 139;\nexports.HA_WRONG_CREATE_OPTION = 140;\nexports.HA_ERR_FOUND_DUPP_UNIQUE = 141;\nexports.HA_ERR_UNKNOWN_CHARSET = 142;\nexports.HA_ERR_WRONG_MRG_TABLE_DEF = 143;\nexports.HA_ERR_CRASHED_ON_REPAIR = 144;\nexports.HA_ERR_CRASHED_ON_USAGE = 145;\nexports.HA_ERR_LOCK_WAIT_TIMEOUT = 146;\nexports.HA_ERR_LOCK_TABLE_FULL = 147;\nexports.HA_ERR_READ_ONLY_TRANSACTION = 148;\nexports.HA_ERR_LOCK_DEADLOCK = 149;\nexports.HA_ERR_CANNOT_ADD_FOREIGN = 150;\nexports.HA_ERR_NO_REFERENCED_ROW = 151;\nexports.HA_ERR_ROW_IS_REFERENCED = 152;\nexports.HA_ERR_NO_SAVEPOINT = 153;\nexports.HA_ERR_NON_UNIQUE_BLOCK_SIZE = 154;\nexports.HA_ERR_NO_SUCH_TABLE = 155;\nexports.HA_ERR_TABLE_EXIST = 156;\nexports.HA_ERR_NO_CONNECTION = 157;\nexports.HA_ERR_NULL_IN_SPATIAL = 158;\nexports.HA_ERR_TABLE_DEF_CHANGED = 159;\nexports.HA_ERR_NO_PARTITION_FOUND = 160;\nexports.HA_ERR_RBR_LOGGING_FAILED = 161;\nexports.HA_ERR_DROP_INDEX_FK = 162;\nexports.HA_ERR_FOREIGN_DUPLICATE_KEY = 163;\nexports.HA_ERR_TABLE_NEEDS_UPGRADE = 164;\nexports.HA_ERR_TABLE_READONLY = 165;\nexports.HA_ERR_AUTOINC_READ_FAILED = 166;\nexports.HA_ERR_AUTOINC_ERANGE = 167;\nexports.HA_ERR_GENERIC = 168;\nexports.HA_ERR_RECORD_IS_THE_SAME = 169;\nexports.HA_ERR_LOGGING_IMPOSSIBLE = 170;\nexports.HA_ERR_CORRUPT_EVENT = 171;\nexports.HA_ERR_NEW_FILE = 172;\nexports.HA_ERR_ROWS_EVENT_APPLY = 173;\nexports.HA_ERR_INITIALIZATION = 174;\nexports.HA_ERR_FILE_TOO_SHORT = 175;\nexports.HA_ERR_WRONG_CRC = 176;\nexports.HA_ERR_TOO_MANY_CONCURRENT_TRXS = 177;\nexports.HA_ERR_NOT_IN_LOCK_PARTITIONS = 178;\nexports.HA_ERR_INDEX_COL_TOO_LONG = 179;\nexports.HA_ERR_INDEX_CORRUPT = 180;\nexports.HA_ERR_UNDO_REC_TOO_BIG = 181;\nexports.HA_FTS_INVALID_DOCID = 182;\nexports.HA_ERR_TABLE_IN_FK_CHECK = 183;\nexports.HA_ERR_TABLESPACE_EXISTS = 184;\nexports.HA_ERR_TOO_MANY_FIELDS = 185;\nexports.HA_ERR_ROW_IN_WRONG_PARTITION = 186;\nexports.HA_ERR_INNODB_READ_ONLY = 187;\nexports.HA_ERR_FTS_EXCEED_RESULT_CACHE_LIMIT = 188;\nexports.HA_ERR_TEMP_FILE_WRITE_FAILURE = 189;\nexports.HA_ERR_INNODB_FORCED_RECOVERY = 190;\nexports.HA_ERR_FTS_TOO_MANY_WORDS_IN_PHRASE = 191;\nexports.HA_ERR_FK_DEPTH_EXCEEDED = 192;\nexports.HA_MISSING_CREATE_OPTION = 193;\nexports.HA_ERR_SE_OUT_OF_MEMORY = 194;\nexports.HA_ERR_TABLE_CORRUPT = 195;\nexports.HA_ERR_QUERY_INTERRUPTED = 196;\nexports.HA_ERR_TABLESPACE_MISSING = 197;\nexports.HA_ERR_TABLESPACE_IS_NOT_EMPTY = 198;\nexports.HA_ERR_WRONG_FILE_NAME = 199;\nexports.HA_ERR_NOT_ALLOWED_COMMAND = 200;\nexports.HA_ERR_COMPUTE_FAILED = 201;\nexports.HA_ERR_ROW_FORMAT_CHANGED = 202;\nexports.HA_ERR_NO_WAIT_LOCK = 203;\nexports.HA_ERR_DISK_FULL_NOWAIT = 204;\nexports.HA_ERR_NO_SESSION_TEMP = 205;\nexports.HA_ERR_WRONG_TABLE_NAME = 206;\nexports.HA_ERR_TOO_LONG_PATH = 207;\nexports.HA_ERR_SAMPLING_INIT_FAILED = 208;\nexports.HA_ERR_FTS_TOO_MANY_NESTED_EXP = 209;\nexports.ER_HASHCHK = 1000;\nexports.ER_NISAMCHK = 1001;\nexports.ER_NO = 1002;\nexports.ER_YES = 1003;\nexports.ER_CANT_CREATE_FILE = 1004;\nexports.ER_CANT_CREATE_TABLE = 1005;\nexports.ER_CANT_CREATE_DB = 1006;\nexports.ER_DB_CREATE_EXISTS = 1007;\nexports.ER_DB_DROP_EXISTS = 1008;\nexports.ER_DB_DROP_DELETE = 1009;\nexports.ER_DB_DROP_RMDIR = 1010;\nexports.ER_CANT_DELETE_FILE = 1011;\nexports.ER_CANT_FIND_SYSTEM_REC = 1012;\nexports.ER_CANT_GET_STAT = 1013;\nexports.ER_CANT_GET_WD = 1014;\nexports.ER_CANT_LOCK = 1015;\nexports.ER_CANT_OPEN_FILE = 1016;\nexports.ER_FILE_NOT_FOUND = 1017;\nexports.ER_CANT_READ_DIR = 1018;\nexports.ER_CANT_SET_WD = 1019;\nexports.ER_CHECKREAD = 1020;\nexports.ER_DISK_FULL = 1021;\nexports.ER_DUP_KEY = 1022;\nexports.ER_ERROR_ON_CLOSE = 1023;\nexports.ER_ERROR_ON_READ = 1024;\nexports.ER_ERROR_ON_RENAME = 1025;\nexports.ER_ERROR_ON_WRITE = 1026;\nexports.ER_FILE_USED = 1027;\nexports.ER_FILSORT_ABORT = 1028;\nexports.ER_FORM_NOT_FOUND = 1029;\nexports.ER_GET_ERRNO = 1030;\nexports.ER_ILLEGAL_HA = 1031;\nexports.ER_KEY_NOT_FOUND = 1032;\nexports.ER_NOT_FORM_FILE = 1033;\nexports.ER_NOT_KEYFILE = 1034;\nexports.ER_OLD_KEYFILE = 1035;\nexports.ER_OPEN_AS_READONLY = 1036;\nexports.ER_OUTOFMEMORY = 1037;\nexports.ER_OUT_OF_SORTMEMORY = 1038;\nexports.ER_UNEXPECTED_EOF = 1039;\nexports.ER_CON_COUNT_ERROR = 1040;\nexports.ER_OUT_OF_RESOURCES = 1041;\nexports.ER_BAD_HOST_ERROR = 1042;\nexports.ER_HANDSHAKE_ERROR = 1043;\nexports.ER_DBACCESS_DENIED_ERROR = 1044;\nexports.ER_ACCESS_DENIED_ERROR = 1045;\nexports.ER_NO_DB_ERROR = 1046;\nexports.ER_UNKNOWN_COM_ERROR = 1047;\nexports.ER_BAD_NULL_ERROR = 1048;\nexports.ER_BAD_DB_ERROR = 1049;\nexports.ER_TABLE_EXISTS_ERROR = 1050;\nexports.ER_BAD_TABLE_ERROR = 1051;\nexports.ER_NON_UNIQ_ERROR = 1052;\nexports.ER_SERVER_SHUTDOWN = 1053;\nexports.ER_BAD_FIELD_ERROR = 1054;\nexports.ER_WRONG_FIELD_WITH_GROUP = 1055;\nexports.ER_WRONG_GROUP_FIELD = 1056;\nexports.ER_WRONG_SUM_SELECT = 1057;\nexports.ER_WRONG_VALUE_COUNT = 1058;\nexports.ER_TOO_LONG_IDENT = 1059;\nexports.ER_DUP_FIELDNAME = 1060;\nexports.ER_DUP_KEYNAME = 1061;\nexports.ER_DUP_ENTRY = 1062;\nexports.ER_WRONG_FIELD_SPEC = 1063;\nexports.ER_PARSE_ERROR = 1064;\nexports.ER_EMPTY_QUERY = 1065;\nexports.ER_NONUNIQ_TABLE = 1066;\nexports.ER_INVALID_DEFAULT = 1067;\nexports.ER_MULTIPLE_PRI_KEY = 1068;\nexports.ER_TOO_MANY_KEYS = 1069;\nexports.ER_TOO_MANY_KEY_PARTS = 1070;\nexports.ER_TOO_LONG_KEY = 1071;\nexports.ER_KEY_COLUMN_DOES_NOT_EXITS = 1072;\nexports.ER_BLOB_USED_AS_KEY = 1073;\nexports.ER_TOO_BIG_FIELDLENGTH = 1074;\nexports.ER_WRONG_AUTO_KEY = 1075;\nexports.ER_READY = 1076;\nexports.ER_NORMAL_SHUTDOWN = 1077;\nexports.ER_GOT_SIGNAL = 1078;\nexports.ER_SHUTDOWN_COMPLETE = 1079;\nexports.ER_FORCING_CLOSE = 1080;\nexports.ER_IPSOCK_ERROR = 1081;\nexports.ER_NO_SUCH_INDEX = 1082;\nexports.ER_WRONG_FIELD_TERMINATORS = 1083;\nexports.ER_BLOBS_AND_NO_TERMINATED = 1084;\nexports.ER_TEXTFILE_NOT_READABLE = 1085;\nexports.ER_FILE_EXISTS_ERROR = 1086;\nexports.ER_LOAD_INFO = 1087;\nexports.ER_ALTER_INFO = 1088;\nexports.ER_WRONG_SUB_KEY = 1089;\nexports.ER_CANT_REMOVE_ALL_FIELDS = 1090;\nexports.ER_CANT_DROP_FIELD_OR_KEY = 1091;\nexports.ER_INSERT_INFO = 1092;\nexports.ER_UPDATE_TABLE_USED = 1093;\nexports.ER_NO_SUCH_THREAD = 1094;\nexports.ER_KILL_DENIED_ERROR = 1095;\nexports.ER_NO_TABLES_USED = 1096;\nexports.ER_TOO_BIG_SET = 1097;\nexports.ER_NO_UNIQUE_LOGFILE = 1098;\nexports.ER_TABLE_NOT_LOCKED_FOR_WRITE = 1099;\nexports.ER_TABLE_NOT_LOCKED = 1100;\nexports.ER_BLOB_CANT_HAVE_DEFAULT = 1101;\nexports.ER_WRONG_DB_NAME = 1102;\nexports.ER_WRONG_TABLE_NAME = 1103;\nexports.ER_TOO_BIG_SELECT = 1104;\nexports.ER_UNKNOWN_ERROR = 1105;\nexports.ER_UNKNOWN_PROCEDURE = 1106;\nexports.ER_WRONG_PARAMCOUNT_TO_PROCEDURE = 1107;\nexports.ER_WRONG_PARAMETERS_TO_PROCEDURE = 1108;\nexports.ER_UNKNOWN_TABLE = 1109;\nexports.ER_FIELD_SPECIFIED_TWICE = 1110;\nexports.ER_INVALID_GROUP_FUNC_USE = 1111;\nexports.ER_UNSUPPORTED_EXTENSION = 1112;\nexports.ER_TABLE_MUST_HAVE_COLUMNS = 1113;\nexports.ER_RECORD_FILE_FULL = 1114;\nexports.ER_UNKNOWN_CHARACTER_SET = 1115;\nexports.ER_TOO_MANY_TABLES = 1116;\nexports.ER_TOO_MANY_FIELDS = 1117;\nexports.ER_TOO_BIG_ROWSIZE = 1118;\nexports.ER_STACK_OVERRUN = 1119;\nexports.ER_WRONG_OUTER_JOIN = 1120;\nexports.ER_NULL_COLUMN_IN_INDEX = 1121;\nexports.ER_CANT_FIND_UDF = 1122;\nexports.ER_CANT_INITIALIZE_UDF = 1123;\nexports.ER_UDF_NO_PATHS = 1124;\nexports.ER_UDF_EXISTS = 1125;\nexports.ER_CANT_OPEN_LIBRARY = 1126;\nexports.ER_CANT_FIND_DL_ENTRY = 1127;\nexports.ER_FUNCTION_NOT_DEFINED = 1128;\nexports.ER_HOST_IS_BLOCKED = 1129;\nexports.ER_HOST_NOT_PRIVILEGED = 1130;\nexports.ER_PASSWORD_ANONYMOUS_USER = 1131;\nexports.ER_PASSWORD_NOT_ALLOWED = 1132;\nexports.ER_PASSWORD_NO_MATCH = 1133;\nexports.ER_UPDATE_INFO = 1134;\nexports.ER_CANT_CREATE_THREAD = 1135;\nexports.ER_WRONG_VALUE_COUNT_ON_ROW = 1136;\nexports.ER_CANT_REOPEN_TABLE = 1137;\nexports.ER_INVALID_USE_OF_NULL = 1138;\nexports.ER_REGEXP_ERROR = 1139;\nexports.ER_MIX_OF_GROUP_FUNC_AND_FIELDS = 1140;\nexports.ER_NONEXISTING_GRANT = 1141;\nexports.ER_TABLEACCESS_DENIED_ERROR = 1142;\nexports.ER_COLUMNACCESS_DENIED_ERROR = 1143;\nexports.ER_ILLEGAL_GRANT_FOR_TABLE = 1144;\nexports.ER_GRANT_WRONG_HOST_OR_USER = 1145;\nexports.ER_NO_SUCH_TABLE = 1146;\nexports.ER_NONEXISTING_TABLE_GRANT = 1147;\nexports.ER_NOT_ALLOWED_COMMAND = 1148;\nexports.ER_SYNTAX_ERROR = 1149;\nexports.ER_UNUSED1 = 1150;\nexports.ER_UNUSED2 = 1151;\nexports.ER_ABORTING_CONNECTION = 1152;\nexports.ER_NET_PACKET_TOO_LARGE = 1153;\nexports.ER_NET_READ_ERROR_FROM_PIPE = 1154;\nexports.ER_NET_FCNTL_ERROR = 1155;\nexports.ER_NET_PACKETS_OUT_OF_ORDER = 1156;\nexports.ER_NET_UNCOMPRESS_ERROR = 1157;\nexports.ER_NET_READ_ERROR = 1158;\nexports.ER_NET_READ_INTERRUPTED = 1159;\nexports.ER_NET_ERROR_ON_WRITE = 1160;\nexports.ER_NET_WRITE_INTERRUPTED = 1161;\nexports.ER_TOO_LONG_STRING = 1162;\nexports.ER_TABLE_CANT_HANDLE_BLOB = 1163;\nexports.ER_TABLE_CANT_HANDLE_AUTO_INCREMENT = 1164;\nexports.ER_UNUSED3 = 1165;\nexports.ER_WRONG_COLUMN_NAME = 1166;\nexports.ER_WRONG_KEY_COLUMN = 1167;\nexports.ER_WRONG_MRG_TABLE = 1168;\nexports.ER_DUP_UNIQUE = 1169;\nexports.ER_BLOB_KEY_WITHOUT_LENGTH = 1170;\nexports.ER_PRIMARY_CANT_HAVE_NULL = 1171;\nexports.ER_TOO_MANY_ROWS = 1172;\nexports.ER_REQUIRES_PRIMARY_KEY = 1173;\nexports.ER_NO_RAID_COMPILED = 1174;\nexports.ER_UPDATE_WITHOUT_KEY_IN_SAFE_MODE = 1175;\nexports.ER_KEY_DOES_NOT_EXITS = 1176;\nexports.ER_CHECK_NO_SUCH_TABLE = 1177;\nexports.ER_CHECK_NOT_IMPLEMENTED = 1178;\nexports.ER_CANT_DO_THIS_DURING_AN_TRANSACTION = 1179;\nexports.ER_ERROR_DURING_COMMIT = 1180;\nexports.ER_ERROR_DURING_ROLLBACK = 1181;\nexports.ER_ERROR_DURING_FLUSH_LOGS = 1182;\nexports.ER_ERROR_DURING_CHECKPOINT = 1183;\nexports.ER_NEW_ABORTING_CONNECTION = 1184;\nexports.ER_DUMP_NOT_IMPLEMENTED = 1185;\nexports.ER_FLUSH_MASTER_BINLOG_CLOSED = 1186;\nexports.ER_INDEX_REBUILD = 1187;\nexports.ER_SOURCE = 1188;\nexports.ER_SOURCE_NET_READ = 1189;\nexports.ER_SOURCE_NET_WRITE = 1190;\nexports.ER_FT_MATCHING_KEY_NOT_FOUND = 1191;\nexports.ER_LOCK_OR_ACTIVE_TRANSACTION = 1192;\nexports.ER_UNKNOWN_SYSTEM_VARIABLE = 1193;\nexports.ER_CRASHED_ON_USAGE = 1194;\nexports.ER_CRASHED_ON_REPAIR = 1195;\nexports.ER_WARNING_NOT_COMPLETE_ROLLBACK = 1196;\nexports.ER_TRANS_CACHE_FULL = 1197;\nexports.ER_SLAVE_MUST_STOP = 1198;\nexports.ER_REPLICA_NOT_RUNNING = 1199;\nexports.ER_BAD_REPLICA = 1200;\nexports.ER_CONNECTION_METADATA = 1201;\nexports.ER_REPLICA_THREAD = 1202;\nexports.ER_TOO_MANY_USER_CONNECTIONS = 1203;\nexports.ER_SET_CONSTANTS_ONLY = 1204;\nexports.ER_LOCK_WAIT_TIMEOUT = 1205;\nexports.ER_LOCK_TABLE_FULL = 1206;\nexports.ER_READ_ONLY_TRANSACTION = 1207;\nexports.ER_DROP_DB_WITH_READ_LOCK = 1208;\nexports.ER_CREATE_DB_WITH_READ_LOCK = 1209;\nexports.ER_WRONG_ARGUMENTS = 1210;\nexports.ER_NO_PERMISSION_TO_CREATE_USER = 1211;\nexports.ER_UNION_TABLES_IN_DIFFERENT_DIR = 1212;\nexports.ER_LOCK_DEADLOCK = 1213;\nexports.ER_TABLE_CANT_HANDLE_FT = 1214;\nexports.ER_CANNOT_ADD_FOREIGN = 1215;\nexports.ER_NO_REFERENCED_ROW = 1216;\nexports.ER_ROW_IS_REFERENCED = 1217;\nexports.ER_CONNECT_TO_SOURCE = 1218;\nexports.ER_QUERY_ON_MASTER = 1219;\nexports.ER_ERROR_WHEN_EXECUTING_COMMAND = 1220;\nexports.ER_WRONG_USAGE = 1221;\nexports.ER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT = 1222;\nexports.ER_CANT_UPDATE_WITH_READLOCK = 1223;\nexports.ER_MIXING_NOT_ALLOWED = 1224;\nexports.ER_DUP_ARGUMENT = 1225;\nexports.ER_USER_LIMIT_REACHED = 1226;\nexports.ER_SPECIFIC_ACCESS_DENIED_ERROR = 1227;\nexports.ER_LOCAL_VARIABLE = 1228;\nexports.ER_GLOBAL_VARIABLE = 1229;\nexports.ER_NO_DEFAULT = 1230;\nexports.ER_WRONG_VALUE_FOR_VAR = 1231;\nexports.ER_WRONG_TYPE_FOR_VAR = 1232;\nexports.ER_VAR_CANT_BE_READ = 1233;\nexports.ER_CANT_USE_OPTION_HERE = 1234;\nexports.ER_NOT_SUPPORTED_YET = 1235;\nexports.ER_SOURCE_FATAL_ERROR_READING_BINLOG = 1236;\nexports.ER_REPLICA_IGNORED_TABLE = 1237;\nexports.ER_INCORRECT_GLOBAL_LOCAL_VAR = 1238;\nexports.ER_WRONG_FK_DEF = 1239;\nexports.ER_KEY_REF_DO_NOT_MATCH_TABLE_REF = 1240;\nexports.ER_OPERAND_COLUMNS = 1241;\nexports.ER_SUBQUERY_NO_1_ROW = 1242;\nexports.ER_UNKNOWN_STMT_HANDLER = 1243;\nexports.ER_CORRUPT_HELP_DB = 1244;\nexports.ER_CYCLIC_REFERENCE = 1245;\nexports.ER_AUTO_CONVERT = 1246;\nexports.ER_ILLEGAL_REFERENCE = 1247;\nexports.ER_DERIVED_MUST_HAVE_ALIAS = 1248;\nexports.ER_SELECT_REDUCED = 1249;\nexports.ER_TABLENAME_NOT_ALLOWED_HERE = 1250;\nexports.ER_NOT_SUPPORTED_AUTH_MODE = 1251;\nexports.ER_SPATIAL_CANT_HAVE_NULL = 1252;\nexports.ER_COLLATION_CHARSET_MISMATCH = 1253;\nexports.ER_SLAVE_WAS_RUNNING = 1254;\nexports.ER_SLAVE_WAS_NOT_RUNNING = 1255;\nexports.ER_TOO_BIG_FOR_UNCOMPRESS = 1256;\nexports.ER_ZLIB_Z_MEM_ERROR = 1257;\nexports.ER_ZLIB_Z_BUF_ERROR = 1258;\nexports.ER_ZLIB_Z_DATA_ERROR = 1259;\nexports.ER_CUT_VALUE_GROUP_CONCAT = 1260;\nexports.ER_WARN_TOO_FEW_RECORDS = 1261;\nexports.ER_WARN_TOO_MANY_RECORDS = 1262;\nexports.ER_WARN_NULL_TO_NOTNULL = 1263;\nexports.ER_WARN_DATA_OUT_OF_RANGE = 1264;\nexports.WARN_DATA_TRUNCATED = 1265;\nexports.ER_WARN_USING_OTHER_HANDLER = 1266;\nexports.ER_CANT_AGGREGATE_2COLLATIONS = 1267;\nexports.ER_DROP_USER = 1268;\nexports.ER_REVOKE_GRANTS = 1269;\nexports.ER_CANT_AGGREGATE_3COLLATIONS = 1270;\nexports.ER_CANT_AGGREGATE_NCOLLATIONS = 1271;\nexports.ER_VARIABLE_IS_NOT_STRUCT = 1272;\nexports.ER_UNKNOWN_COLLATION = 1273;\nexports.ER_REPLICA_IGNORED_SSL_PARAMS = 1274;\nexports.ER_SERVER_IS_IN_SECURE_AUTH_MODE = 1275;\nexports.ER_WARN_FIELD_RESOLVED = 1276;\nexports.ER_BAD_REPLICA_UNTIL_COND = 1277;\nexports.ER_MISSING_SKIP_REPLICA = 1278;\nexports.ER_UNTIL_COND_IGNORED = 1279;\nexports.ER_WRONG_NAME_FOR_INDEX = 1280;\nexports.ER_WRONG_NAME_FOR_CATALOG = 1281;\nexports.ER_WARN_QC_RESIZE = 1282;\nexports.ER_BAD_FT_COLUMN = 1283;\nexports.ER_UNKNOWN_KEY_CACHE = 1284;\nexports.ER_WARN_HOSTNAME_WONT_WORK = 1285;\nexports.ER_UNKNOWN_STORAGE_ENGINE = 1286;\nexports.ER_WARN_DEPRECATED_SYNTAX = 1287;\nexports.ER_NON_UPDATABLE_TABLE = 1288;\nexports.ER_FEATURE_DISABLED = 1289;\nexports.ER_OPTION_PREVENTS_STATEMENT = 1290;\nexports.ER_DUPLICATED_VALUE_IN_TYPE = 1291;\nexports.ER_TRUNCATED_WRONG_VALUE = 1292;\nexports.ER_TOO_MUCH_AUTO_TIMESTAMP_COLS = 1293;\nexports.ER_INVALID_ON_UPDATE = 1294;\nexports.ER_UNSUPPORTED_PS = 1295;\nexports.ER_GET_ERRMSG = 1296;\nexports.ER_GET_TEMPORARY_ERRMSG = 1297;\nexports.ER_UNKNOWN_TIME_ZONE = 1298;\nexports.ER_WARN_INVALID_TIMESTAMP = 1299;\nexports.ER_INVALID_CHARACTER_STRING = 1300;\nexports.ER_WARN_ALLOWED_PACKET_OVERFLOWED = 1301;\nexports.ER_CONFLICTING_DECLARATIONS = 1302;\nexports.ER_SP_NO_RECURSIVE_CREATE = 1303;\nexports.ER_SP_ALREADY_EXISTS = 1304;\nexports.ER_SP_DOES_NOT_EXIST = 1305;\nexports.ER_SP_DROP_FAILED = 1306;\nexports.ER_SP_STORE_FAILED = 1307;\nexports.ER_SP_LILABEL_MISMATCH = 1308;\nexports.ER_SP_LABEL_REDEFINE = 1309;\nexports.ER_SP_LABEL_MISMATCH = 1310;\nexports.ER_SP_UNINIT_VAR = 1311;\nexports.ER_SP_BADSELECT = 1312;\nexports.ER_SP_BADRETURN = 1313;\nexports.ER_SP_BADSTATEMENT = 1314;\nexports.ER_UPDATE_LOG_DEPRECATED_IGNORED = 1315;\nexports.ER_UPDATE_LOG_DEPRECATED_TRANSLATED = 1316;\nexports.ER_QUERY_INTERRUPTED = 1317;\nexports.ER_SP_WRONG_NO_OF_ARGS = 1318;\nexports.ER_SP_COND_MISMATCH = 1319;\nexports.ER_SP_NORETURN = 1320;\nexports.ER_SP_NORETURNEND = 1321;\nexports.ER_SP_BAD_CURSOR_QUERY = 1322;\nexports.ER_SP_BAD_CURSOR_SELECT = 1323;\nexports.ER_SP_CURSOR_MISMATCH = 1324;\nexports.ER_SP_CURSOR_ALREADY_OPEN = 1325;\nexports.ER_SP_CURSOR_NOT_OPEN = 1326;\nexports.ER_SP_UNDECLARED_VAR = 1327;\nexports.ER_SP_WRONG_NO_OF_FETCH_ARGS = 1328;\nexports.ER_SP_FETCH_NO_DATA = 1329;\nexports.ER_SP_DUP_PARAM = 1330;\nexports.ER_SP_DUP_VAR = 1331;\nexports.ER_SP_DUP_COND = 1332;\nexports.ER_SP_DUP_CURS = 1333;\nexports.ER_SP_CANT_ALTER = 1334;\nexports.ER_SP_SUBSELECT_NYI = 1335;\nexports.ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG = 1336;\nexports.ER_SP_VARCOND_AFTER_CURSHNDLR = 1337;\nexports.ER_SP_CURSOR_AFTER_HANDLER = 1338;\nexports.ER_SP_CASE_NOT_FOUND = 1339;\nexports.ER_FPARSER_TOO_BIG_FILE = 1340;\nexports.ER_FPARSER_BAD_HEADER = 1341;\nexports.ER_FPARSER_EOF_IN_COMMENT = 1342;\nexports.ER_FPARSER_ERROR_IN_PARAMETER = 1343;\nexports.ER_FPARSER_EOF_IN_UNKNOWN_PARAMETER = 1344;\nexports.ER_VIEW_NO_EXPLAIN = 1345;\nexports.ER_FRM_UNKNOWN_TYPE = 1346;\nexports.ER_WRONG_OBJECT = 1347;\nexports.ER_NONUPDATEABLE_COLUMN = 1348;\nexports.ER_VIEW_SELECT_DERIVED = 1349;\nexports.ER_VIEW_SELECT_CLAUSE = 1350;\nexports.ER_VIEW_SELECT_VARIABLE = 1351;\nexports.ER_VIEW_SELECT_TMPTABLE = 1352;\nexports.ER_VIEW_WRONG_LIST = 1353;\nexports.ER_WARN_VIEW_MERGE = 1354;\nexports.ER_WARN_VIEW_WITHOUT_KEY = 1355;\nexports.ER_VIEW_INVALID = 1356;\nexports.ER_SP_NO_DROP_SP = 1357;\nexports.ER_SP_GOTO_IN_HNDLR = 1358;\nexports.ER_TRG_ALREADY_EXISTS = 1359;\nexports.ER_TRG_DOES_NOT_EXIST = 1360;\nexports.ER_TRG_ON_VIEW_OR_TEMP_TABLE = 1361;\nexports.ER_TRG_CANT_CHANGE_ROW = 1362;\nexports.ER_TRG_NO_SUCH_ROW_IN_TRG = 1363;\nexports.ER_NO_DEFAULT_FOR_FIELD = 1364;\nexports.ER_DIVISION_BY_ZERO = 1365;\nexports.ER_TRUNCATED_WRONG_VALUE_FOR_FIELD = 1366;\nexports.ER_ILLEGAL_VALUE_FOR_TYPE = 1367;\nexports.ER_VIEW_NONUPD_CHECK = 1368;\nexports.ER_VIEW_CHECK_FAILED = 1369;\nexports.ER_PROCACCESS_DENIED_ERROR = 1370;\nexports.ER_RELAY_LOG_FAIL = 1371;\nexports.ER_PASSWD_LENGTH = 1372;\nexports.ER_UNKNOWN_TARGET_BINLOG = 1373;\nexports.ER_IO_ERR_LOG_INDEX_READ = 1374;\nexports.ER_BINLOG_PURGE_PROHIBITED = 1375;\nexports.ER_FSEEK_FAIL = 1376;\nexports.ER_BINLOG_PURGE_FATAL_ERR = 1377;\nexports.ER_LOG_IN_USE = 1378;\nexports.ER_LOG_PURGE_UNKNOWN_ERR = 1379;\nexports.ER_RELAY_LOG_INIT = 1380;\nexports.ER_NO_BINARY_LOGGING = 1381;\nexports.ER_RESERVED_SYNTAX = 1382;\nexports.ER_WSAS_FAILED = 1383;\nexports.ER_DIFF_GROUPS_PROC = 1384;\nexports.ER_NO_GROUP_FOR_PROC = 1385;\nexports.ER_ORDER_WITH_PROC = 1386;\nexports.ER_LOGGING_PROHIBIT_CHANGING_OF = 1387;\nexports.ER_NO_FILE_MAPPING = 1388;\nexports.ER_WRONG_MAGIC = 1389;\nexports.ER_PS_MANY_PARAM = 1390;\nexports.ER_KEY_PART_0 = 1391;\nexports.ER_VIEW_CHECKSUM = 1392;\nexports.ER_VIEW_MULTIUPDATE = 1393;\nexports.ER_VIEW_NO_INSERT_FIELD_LIST = 1394;\nexports.ER_VIEW_DELETE_MERGE_VIEW = 1395;\nexports.ER_CANNOT_USER = 1396;\nexports.ER_XAER_NOTA = 1397;\nexports.ER_XAER_INVAL = 1398;\nexports.ER_XAER_RMFAIL = 1399;\nexports.ER_XAER_OUTSIDE = 1400;\nexports.ER_XAER_RMERR = 1401;\nexports.ER_XA_RBROLLBACK = 1402;\nexports.ER_NONEXISTING_PROC_GRANT = 1403;\nexports.ER_PROC_AUTO_GRANT_FAIL = 1404;\nexports.ER_PROC_AUTO_REVOKE_FAIL = 1405;\nexports.ER_DATA_TOO_LONG = 1406;\nexports.ER_SP_BAD_SQLSTATE = 1407;\nexports.ER_STARTUP = 1408;\nexports.ER_LOAD_FROM_FIXED_SIZE_ROWS_TO_VAR = 1409;\nexports.ER_CANT_CREATE_USER_WITH_GRANT = 1410;\nexports.ER_WRONG_VALUE_FOR_TYPE = 1411;\nexports.ER_TABLE_DEF_CHANGED = 1412;\nexports.ER_SP_DUP_HANDLER = 1413;\nexports.ER_SP_NOT_VAR_ARG = 1414;\nexports.ER_SP_NO_RETSET = 1415;\nexports.ER_CANT_CREATE_GEOMETRY_OBJECT = 1416;\nexports.ER_FAILED_ROUTINE_BREAK_BINLOG = 1417;\nexports.ER_BINLOG_UNSAFE_ROUTINE = 1418;\nexports.ER_BINLOG_CREATE_ROUTINE_NEED_SUPER = 1419;\nexports.ER_EXEC_STMT_WITH_OPEN_CURSOR = 1420;\nexports.ER_STMT_HAS_NO_OPEN_CURSOR = 1421;\nexports.ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG = 1422;\nexports.ER_NO_DEFAULT_FOR_VIEW_FIELD = 1423;\nexports.ER_SP_NO_RECURSION = 1424;\nexports.ER_TOO_BIG_SCALE = 1425;\nexports.ER_TOO_BIG_PRECISION = 1426;\nexports.ER_M_BIGGER_THAN_D = 1427;\nexports.ER_WRONG_LOCK_OF_SYSTEM_TABLE = 1428;\nexports.ER_CONNECT_TO_FOREIGN_DATA_SOURCE = 1429;\nexports.ER_QUERY_ON_FOREIGN_DATA_SOURCE = 1430;\nexports.ER_FOREIGN_DATA_SOURCE_DOESNT_EXIST = 1431;\nexports.ER_FOREIGN_DATA_STRING_INVALID_CANT_CREATE = 1432;\nexports.ER_FOREIGN_DATA_STRING_INVALID = 1433;\nexports.ER_CANT_CREATE_FEDERATED_TABLE = 1434;\nexports.ER_TRG_IN_WRONG_SCHEMA = 1435;\nexports.ER_STACK_OVERRUN_NEED_MORE = 1436;\nexports.ER_TOO_LONG_BODY = 1437;\nexports.ER_WARN_CANT_DROP_DEFAULT_KEYCACHE = 1438;\nexports.ER_TOO_BIG_DISPLAYWIDTH = 1439;\nexports.ER_XAER_DUPID = 1440;\nexports.ER_DATETIME_FUNCTION_OVERFLOW = 1441;\nexports.ER_CANT_UPDATE_USED_TABLE_IN_SF_OR_TRG = 1442;\nexports.ER_VIEW_PREVENT_UPDATE = 1443;\nexports.ER_PS_NO_RECURSION = 1444;\nexports.ER_SP_CANT_SET_AUTOCOMMIT = 1445;\nexports.ER_MALFORMED_DEFINER = 1446;\nexports.ER_VIEW_FRM_NO_USER = 1447;\nexports.ER_VIEW_OTHER_USER = 1448;\nexports.ER_NO_SUCH_USER = 1449;\nexports.ER_FORBID_SCHEMA_CHANGE = 1450;\nexports.ER_ROW_IS_REFERENCED_2 = 1451;\nexports.ER_NO_REFERENCED_ROW_2 = 1452;\nexports.ER_SP_BAD_VAR_SHADOW = 1453;\nexports.ER_TRG_NO_DEFINER = 1454;\nexports.ER_OLD_FILE_FORMAT = 1455;\nexports.ER_SP_RECURSION_LIMIT = 1456;\nexports.ER_SP_PROC_TABLE_CORRUPT = 1457;\nexports.ER_SP_WRONG_NAME = 1458;\nexports.ER_TABLE_NEEDS_UPGRADE = 1459;\nexports.ER_SP_NO_AGGREGATE = 1460;\nexports.ER_MAX_PREPARED_STMT_COUNT_REACHED = 1461;\nexports.ER_VIEW_RECURSIVE = 1462;\nexports.ER_NON_GROUPING_FIELD_USED = 1463;\nexports.ER_TABLE_CANT_HANDLE_SPKEYS = 1464;\nexports.ER_NO_TRIGGERS_ON_SYSTEM_SCHEMA = 1465;\nexports.ER_REMOVED_SPACES = 1466;\nexports.ER_AUTOINC_READ_FAILED = 1467;\nexports.ER_USERNAME = 1468;\nexports.ER_HOSTNAME = 1469;\nexports.ER_WRONG_STRING_LENGTH = 1470;\nexports.ER_NON_INSERTABLE_TABLE = 1471;\nexports.ER_ADMIN_WRONG_MRG_TABLE = 1472;\nexports.ER_TOO_HIGH_LEVEL_OF_NESTING_FOR_SELECT = 1473;\nexports.ER_NAME_BECOMES_EMPTY = 1474;\nexports.ER_AMBIGUOUS_FIELD_TERM = 1475;\nexports.ER_FOREIGN_SERVER_EXISTS = 1476;\nexports.ER_FOREIGN_SERVER_DOESNT_EXIST = 1477;\nexports.ER_ILLEGAL_HA_CREATE_OPTION = 1478;\nexports.ER_PARTITION_REQUIRES_VALUES_ERROR = 1479;\nexports.ER_PARTITION_WRONG_VALUES_ERROR = 1480;\nexports.ER_PARTITION_MAXVALUE_ERROR = 1481;\nexports.ER_PARTITION_SUBPARTITION_ERROR = 1482;\nexports.ER_PARTITION_SUBPART_MIX_ERROR = 1483;\nexports.ER_PARTITION_WRONG_NO_PART_ERROR = 1484;\nexports.ER_PARTITION_WRONG_NO_SUBPART_ERROR = 1485;\nexports.ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR = 1486;\nexports.ER_NO_CONST_EXPR_IN_RANGE_OR_LIST_ERROR = 1487;\nexports.ER_FIELD_NOT_FOUND_PART_ERROR = 1488;\nexports.ER_LIST_OF_FIELDS_ONLY_IN_HASH_ERROR = 1489;\nexports.ER_INCONSISTENT_PARTITION_INFO_ERROR = 1490;\nexports.ER_PARTITION_FUNC_NOT_ALLOWED_ERROR = 1491;\nexports.ER_PARTITIONS_MUST_BE_DEFINED_ERROR = 1492;\nexports.ER_RANGE_NOT_INCREASING_ERROR = 1493;\nexports.ER_INCONSISTENT_TYPE_OF_FUNCTIONS_ERROR = 1494;\nexports.ER_MULTIPLE_DEF_CONST_IN_LIST_PART_ERROR = 1495;\nexports.ER_PARTITION_ENTRY_ERROR = 1496;\nexports.ER_MIX_HANDLER_ERROR = 1497;\nexports.ER_PARTITION_NOT_DEFINED_ERROR = 1498;\nexports.ER_TOO_MANY_PARTITIONS_ERROR = 1499;\nexports.ER_SUBPARTITION_ERROR = 1500;\nexports.ER_CANT_CREATE_HANDLER_FILE = 1501;\nexports.ER_BLOB_FIELD_IN_PART_FUNC_ERROR = 1502;\nexports.ER_UNIQUE_KEY_NEED_ALL_FIELDS_IN_PF = 1503;\nexports.ER_NO_PARTS_ERROR = 1504;\nexports.ER_PARTITION_MGMT_ON_NONPARTITIONED = 1505;\nexports.ER_FOREIGN_KEY_ON_PARTITIONED = 1506;\nexports.ER_DROP_PARTITION_NON_EXISTENT = 1507;\nexports.ER_DROP_LAST_PARTITION = 1508;\nexports.ER_COALESCE_ONLY_ON_HASH_PARTITION = 1509;\nexports.ER_REORG_HASH_ONLY_ON_SAME_NO = 1510;\nexports.ER_REORG_NO_PARAM_ERROR = 1511;\nexports.ER_ONLY_ON_RANGE_LIST_PARTITION = 1512;\nexports.ER_ADD_PARTITION_SUBPART_ERROR = 1513;\nexports.ER_ADD_PARTITION_NO_NEW_PARTITION = 1514;\nexports.ER_COALESCE_PARTITION_NO_PARTITION = 1515;\nexports.ER_REORG_PARTITION_NOT_EXIST = 1516;\nexports.ER_SAME_NAME_PARTITION = 1517;\nexports.ER_NO_BINLOG_ERROR = 1518;\nexports.ER_CONSECUTIVE_REORG_PARTITIONS = 1519;\nexports.ER_REORG_OUTSIDE_RANGE = 1520;\nexports.ER_PARTITION_FUNCTION_FAILURE = 1521;\nexports.ER_PART_STATE_ERROR = 1522;\nexports.ER_LIMITED_PART_RANGE = 1523;\nexports.ER_PLUGIN_IS_NOT_LOADED = 1524;\nexports.ER_WRONG_VALUE = 1525;\nexports.ER_NO_PARTITION_FOR_GIVEN_VALUE = 1526;\nexports.ER_FILEGROUP_OPTION_ONLY_ONCE = 1527;\nexports.ER_CREATE_FILEGROUP_FAILED = 1528;\nexports.ER_DROP_FILEGROUP_FAILED = 1529;\nexports.ER_TABLESPACE_AUTO_EXTEND_ERROR = 1530;\nexports.ER_WRONG_SIZE_NUMBER = 1531;\nexports.ER_SIZE_OVERFLOW_ERROR = 1532;\nexports.ER_ALTER_FILEGROUP_FAILED = 1533;\nexports.ER_BINLOG_ROW_LOGGING_FAILED = 1534;\nexports.ER_BINLOG_ROW_WRONG_TABLE_DEF = 1535;\nexports.ER_BINLOG_ROW_RBR_TO_SBR = 1536;\nexports.ER_EVENT_ALREADY_EXISTS = 1537;\nexports.ER_EVENT_STORE_FAILED = 1538;\nexports.ER_EVENT_DOES_NOT_EXIST = 1539;\nexports.ER_EVENT_CANT_ALTER = 1540;\nexports.ER_EVENT_DROP_FAILED = 1541;\nexports.ER_EVENT_INTERVAL_NOT_POSITIVE_OR_TOO_BIG = 1542;\nexports.ER_EVENT_ENDS_BEFORE_STARTS = 1543;\nexports.ER_EVENT_EXEC_TIME_IN_THE_PAST = 1544;\nexports.ER_EVENT_OPEN_TABLE_FAILED = 1545;\nexports.ER_EVENT_NEITHER_M_EXPR_NOR_M_AT = 1546;\nexports.ER_COL_COUNT_DOESNT_MATCH_CORRUPTED = 1547;\nexports.ER_CANNOT_LOAD_FROM_TABLE = 1548;\nexports.ER_EVENT_CANNOT_DELETE = 1549;\nexports.ER_EVENT_COMPILE_ERROR = 1550;\nexports.ER_EVENT_SAME_NAME = 1551;\nexports.ER_EVENT_DATA_TOO_LONG = 1552;\nexports.ER_DROP_INDEX_FK = 1553;\nexports.ER_WARN_DEPRECATED_SYNTAX_WITH_VER = 1554;\nexports.ER_CANT_WRITE_LOCK_LOG_TABLE = 1555;\nexports.ER_CANT_LOCK_LOG_TABLE = 1556;\nexports.ER_FOREIGN_DUPLICATE_KEY = 1557;\nexports.ER_COL_COUNT_DOESNT_MATCH_PLEASE_UPDATE = 1558;\nexports.ER_TEMP_TABLE_PREVENTS_SWITCH_OUT_OF_RBR = 1559;\nexports.ER_STORED_FUNCTION_PREVENTS_SWITCH_BINLOG_FORMAT = 1560;\nexports.ER_NDB_CANT_SWITCH_BINLOG_FORMAT = 1561;\nexports.ER_PARTITION_NO_TEMPORARY = 1562;\nexports.ER_PARTITION_CONST_DOMAIN_ERROR = 1563;\nexports.ER_PARTITION_FUNCTION_IS_NOT_ALLOWED = 1564;\nexports.ER_DDL_LOG_ERROR = 1565;\nexports.ER_NULL_IN_VALUES_LESS_THAN = 1566;\nexports.ER_WRONG_PARTITION_NAME = 1567;\nexports.ER_CANT_CHANGE_TX_CHARACTERISTICS = 1568;\nexports.ER_DUP_ENTRY_AUTOINCREMENT_CASE = 1569;\nexports.ER_EVENT_MODIFY_QUEUE_ERROR = 1570;\nexports.ER_EVENT_SET_VAR_ERROR = 1571;\nexports.ER_PARTITION_MERGE_ERROR = 1572;\nexports.ER_CANT_ACTIVATE_LOG = 1573;\nexports.ER_RBR_NOT_AVAILABLE = 1574;\nexports.ER_BASE64_DECODE_ERROR = 1575;\nexports.ER_EVENT_RECURSION_FORBIDDEN = 1576;\nexports.ER_EVENTS_DB_ERROR = 1577;\nexports.ER_ONLY_INTEGERS_ALLOWED = 1578;\nexports.ER_UNSUPORTED_LOG_ENGINE = 1579;\nexports.ER_BAD_LOG_STATEMENT = 1580;\nexports.ER_CANT_RENAME_LOG_TABLE = 1581;\nexports.ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT = 1582;\nexports.ER_WRONG_PARAMETERS_TO_NATIVE_FCT = 1583;\nexports.ER_WRONG_PARAMETERS_TO_STORED_FCT = 1584;\nexports.ER_NATIVE_FCT_NAME_COLLISION = 1585;\nexports.ER_DUP_ENTRY_WITH_KEY_NAME = 1586;\nexports.ER_BINLOG_PURGE_EMFILE = 1587;\nexports.ER_EVENT_CANNOT_CREATE_IN_THE_PAST = 1588;\nexports.ER_EVENT_CANNOT_ALTER_IN_THE_PAST = 1589;\nexports.ER_SLAVE_INCIDENT = 1590;\nexports.ER_NO_PARTITION_FOR_GIVEN_VALUE_SILENT = 1591;\nexports.ER_BINLOG_UNSAFE_STATEMENT = 1592;\nexports.ER_BINLOG_FATAL_ERROR = 1593;\nexports.ER_SLAVE_RELAY_LOG_READ_FAILURE = 1594;\nexports.ER_SLAVE_RELAY_LOG_WRITE_FAILURE = 1595;\nexports.ER_SLAVE_CREATE_EVENT_FAILURE = 1596;\nexports.ER_SLAVE_MASTER_COM_FAILURE = 1597;\nexports.ER_BINLOG_LOGGING_IMPOSSIBLE = 1598;\nexports.ER_VIEW_NO_CREATION_CTX = 1599;\nexports.ER_VIEW_INVALID_CREATION_CTX = 1600;\nexports.ER_SR_INVALID_CREATION_CTX = 1601;\nexports.ER_TRG_CORRUPTED_FILE = 1602;\nexports.ER_TRG_NO_CREATION_CTX = 1603;\nexports.ER_TRG_INVALID_CREATION_CTX = 1604;\nexports.ER_EVENT_INVALID_CREATION_CTX = 1605;\nexports.ER_TRG_CANT_OPEN_TABLE = 1606;\nexports.ER_CANT_CREATE_SROUTINE = 1607;\nexports.ER_NEVER_USED = 1608;\nexports.ER_NO_FORMAT_DESCRIPTION_EVENT_BEFORE_BINLOG_STATEMENT = 1609;\nexports.ER_REPLICA_CORRUPT_EVENT = 1610;\nexports.ER_LOAD_DATA_INVALID_COLUMN = 1611;\nexports.ER_LOG_PURGE_NO_FILE = 1612;\nexports.ER_XA_RBTIMEOUT = 1613;\nexports.ER_XA_RBDEADLOCK = 1614;\nexports.ER_NEED_REPREPARE = 1615;\nexports.ER_DELAYED_NOT_SUPPORTED = 1616;\nexports.WARN_NO_CONNECTION_METADATA = 1617;\nexports.WARN_OPTION_IGNORED = 1618;\nexports.ER_PLUGIN_DELETE_BUILTIN = 1619;\nexports.WARN_PLUGIN_BUSY = 1620;\nexports.ER_VARIABLE_IS_READONLY = 1621;\nexports.ER_WARN_ENGINE_TRANSACTION_ROLLBACK = 1622;\nexports.ER_SLAVE_HEARTBEAT_FAILURE = 1623;\nexports.ER_REPLICA_HEARTBEAT_VALUE_OUT_OF_RANGE = 1624;\nexports.ER_NDB_REPLICATION_SCHEMA_ERROR = 1625;\nexports.ER_CONFLICT_FN_PARSE_ERROR = 1626;\nexports.ER_EXCEPTIONS_WRITE_ERROR = 1627;\nexports.ER_TOO_LONG_TABLE_COMMENT = 1628;\nexports.ER_TOO_LONG_FIELD_COMMENT = 1629;\nexports.ER_FUNC_INEXISTENT_NAME_COLLISION = 1630;\nexports.ER_DATABASE_NAME = 1631;\nexports.ER_TABLE_NAME = 1632;\nexports.ER_PARTITION_NAME = 1633;\nexports.ER_SUBPARTITION_NAME = 1634;\nexports.ER_TEMPORARY_NAME = 1635;\nexports.ER_RENAMED_NAME = 1636;\nexports.ER_TOO_MANY_CONCURRENT_TRXS = 1637;\nexports.WARN_NON_ASCII_SEPARATOR_NOT_IMPLEMENTED = 1638;\nexports.ER_DEBUG_SYNC_TIMEOUT = 1639;\nexports.ER_DEBUG_SYNC_HIT_LIMIT = 1640;\nexports.ER_DUP_SIGNAL_SET = 1641;\nexports.ER_SIGNAL_WARN = 1642;\nexports.ER_SIGNAL_NOT_FOUND = 1643;\nexports.ER_SIGNAL_EXCEPTION = 1644;\nexports.ER_RESIGNAL_WITHOUT_ACTIVE_HANDLER = 1645;\nexports.ER_SIGNAL_BAD_CONDITION_TYPE = 1646;\nexports.WARN_COND_ITEM_TRUNCATED = 1647;\nexports.ER_COND_ITEM_TOO_LONG = 1648;\nexports.ER_UNKNOWN_LOCALE = 1649;\nexports.ER_REPLICA_IGNORE_SERVER_IDS = 1650;\nexports.ER_QUERY_CACHE_DISABLED = 1651;\nexports.ER_SAME_NAME_PARTITION_FIELD = 1652;\nexports.ER_PARTITION_COLUMN_LIST_ERROR = 1653;\nexports.ER_WRONG_TYPE_COLUMN_VALUE_ERROR = 1654;\nexports.ER_TOO_MANY_PARTITION_FUNC_FIELDS_ERROR = 1655;\nexports.ER_MAXVALUE_IN_VALUES_IN = 1656;\nexports.ER_TOO_MANY_VALUES_ERROR = 1657;\nexports.ER_ROW_SINGLE_PARTITION_FIELD_ERROR = 1658;\nexports.ER_FIELD_TYPE_NOT_ALLOWED_AS_PARTITION_FIELD = 1659;\nexports.ER_PARTITION_FIELDS_TOO_LONG = 1660;\nexports.ER_BINLOG_ROW_ENGINE_AND_STMT_ENGINE = 1661;\nexports.ER_BINLOG_ROW_MODE_AND_STMT_ENGINE = 1662;\nexports.ER_BINLOG_UNSAFE_AND_STMT_ENGINE = 1663;\nexports.ER_BINLOG_ROW_INJECTION_AND_STMT_ENGINE = 1664;\nexports.ER_BINLOG_STMT_MODE_AND_ROW_ENGINE = 1665;\nexports.ER_BINLOG_ROW_INJECTION_AND_STMT_MODE = 1666;\nexports.ER_BINLOG_MULTIPLE_ENGINES_AND_SELF_LOGGING_ENGINE = 1667;\nexports.ER_BINLOG_UNSAFE_LIMIT = 1668;\nexports.ER_UNUSED4 = 1669;\nexports.ER_BINLOG_UNSAFE_SYSTEM_TABLE = 1670;\nexports.ER_BINLOG_UNSAFE_AUTOINC_COLUMNS = 1671;\nexports.ER_BINLOG_UNSAFE_UDF = 1672;\nexports.ER_BINLOG_UNSAFE_SYSTEM_VARIABLE = 1673;\nexports.ER_BINLOG_UNSAFE_SYSTEM_FUNCTION = 1674;\nexports.ER_BINLOG_UNSAFE_NONTRANS_AFTER_TRANS = 1675;\nexports.ER_MESSAGE_AND_STATEMENT = 1676;\nexports.ER_SLAVE_CONVERSION_FAILED = 1677;\nexports.ER_REPLICA_CANT_CREATE_CONVERSION = 1678;\nexports.ER_INSIDE_TRANSACTION_PREVENTS_SWITCH_BINLOG_FORMAT = 1679;\nexports.ER_PATH_LENGTH = 1680;\nexports.ER_WARN_DEPRECATED_SYNTAX_NO_REPLACEMENT = 1681;\nexports.ER_WRONG_NATIVE_TABLE_STRUCTURE = 1682;\nexports.ER_WRONG_PERFSCHEMA_USAGE = 1683;\nexports.ER_WARN_I_S_SKIPPED_TABLE = 1684;\nexports.ER_INSIDE_TRANSACTION_PREVENTS_SWITCH_BINLOG_DIRECT = 1685;\nexports.ER_STORED_FUNCTION_PREVENTS_SWITCH_BINLOG_DIRECT = 1686;\nexports.ER_SPATIAL_MUST_HAVE_GEOM_COL = 1687;\nexports.ER_TOO_LONG_INDEX_COMMENT = 1688;\nexports.ER_LOCK_ABORTED = 1689;\nexports.ER_DATA_OUT_OF_RANGE = 1690;\nexports.ER_WRONG_SPVAR_TYPE_IN_LIMIT = 1691;\nexports.ER_BINLOG_UNSAFE_MULTIPLE_ENGINES_AND_SELF_LOGGING_ENGINE = 1692;\nexports.ER_BINLOG_UNSAFE_MIXED_STATEMENT = 1693;\nexports.ER_INSIDE_TRANSACTION_PREVENTS_SWITCH_SQL_LOG_BIN = 1694;\nexports.ER_STORED_FUNCTION_PREVENTS_SWITCH_SQL_LOG_BIN = 1695;\nexports.ER_FAILED_READ_FROM_PAR_FILE = 1696;\nexports.ER_VALUES_IS_NOT_INT_TYPE_ERROR = 1697;\nexports.ER_ACCESS_DENIED_NO_PASSWORD_ERROR = 1698;\nexports.ER_SET_PASSWORD_AUTH_PLUGIN = 1699;\nexports.ER_GRANT_PLUGIN_USER_EXISTS = 1700;\nexports.ER_TRUNCATE_ILLEGAL_FK = 1701;\nexports.ER_PLUGIN_IS_PERMANENT = 1702;\nexports.ER_REPLICA_HEARTBEAT_VALUE_OUT_OF_RANGE_MIN = 1703;\nexports.ER_REPLICA_HEARTBEAT_VALUE_OUT_OF_RANGE_MAX = 1704;\nexports.ER_STMT_CACHE_FULL = 1705;\nexports.ER_MULTI_UPDATE_KEY_CONFLICT = 1706;\nexports.ER_TABLE_NEEDS_REBUILD = 1707;\nexports.WARN_OPTION_BELOW_LIMIT = 1708;\nexports.ER_INDEX_COLUMN_TOO_LONG = 1709;\nexports.ER_ERROR_IN_TRIGGER_BODY = 1710;\nexports.ER_ERROR_IN_UNKNOWN_TRIGGER_BODY = 1711;\nexports.ER_INDEX_CORRUPT = 1712;\nexports.ER_UNDO_RECORD_TOO_BIG = 1713;\nexports.ER_BINLOG_UNSAFE_INSERT_IGNORE_SELECT = 1714;\nexports.ER_BINLOG_UNSAFE_INSERT_SELECT_UPDATE = 1715;\nexports.ER_BINLOG_UNSAFE_REPLACE_SELECT = 1716;\nexports.ER_BINLOG_UNSAFE_CREATE_IGNORE_SELECT = 1717;\nexports.ER_BINLOG_UNSAFE_CREATE_REPLACE_SELECT = 1718;\nexports.ER_BINLOG_UNSAFE_UPDATE_IGNORE = 1719;\nexports.ER_PLUGIN_NO_UNINSTALL = 1720;\nexports.ER_PLUGIN_NO_INSTALL = 1721;\nexports.ER_BINLOG_UNSAFE_WRITE_AUTOINC_SELECT = 1722;\nexports.ER_BINLOG_UNSAFE_CREATE_SELECT_AUTOINC = 1723;\nexports.ER_BINLOG_UNSAFE_INSERT_TWO_KEYS = 1724;\nexports.ER_TABLE_IN_FK_CHECK = 1725;\nexports.ER_UNSUPPORTED_ENGINE = 1726;\nexports.ER_BINLOG_UNSAFE_AUTOINC_NOT_FIRST = 1727;\nexports.ER_CANNOT_LOAD_FROM_TABLE_V2 = 1728;\nexports.ER_SOURCE_DELAY_VALUE_OUT_OF_RANGE = 1729;\nexports.ER_ONLY_FD_AND_RBR_EVENTS_ALLOWED_IN_BINLOG_STATEMENT = 1730;\nexports.ER_PARTITION_EXCHANGE_DIFFERENT_OPTION = 1731;\nexports.ER_PARTITION_EXCHANGE_PART_TABLE = 1732;\nexports.ER_PARTITION_EXCHANGE_TEMP_TABLE = 1733;\nexports.ER_PARTITION_INSTEAD_OF_SUBPARTITION = 1734;\nexports.ER_UNKNOWN_PARTITION = 1735;\nexports.ER_TABLES_DIFFERENT_METADATA = 1736;\nexports.ER_ROW_DOES_NOT_MATCH_PARTITION = 1737;\nexports.ER_BINLOG_CACHE_SIZE_GREATER_THAN_MAX = 1738;\nexports.ER_WARN_INDEX_NOT_APPLICABLE = 1739;\nexports.ER_PARTITION_EXCHANGE_FOREIGN_KEY = 1740;\nexports.ER_NO_SUCH_KEY_VALUE = 1741;\nexports.ER_RPL_INFO_DATA_TOO_LONG = 1742;\nexports.ER_NETWORK_READ_EVENT_CHECKSUM_FAILURE = 1743;\nexports.ER_BINLOG_READ_EVENT_CHECKSUM_FAILURE = 1744;\nexports.ER_BINLOG_STMT_CACHE_SIZE_GREATER_THAN_MAX = 1745;\nexports.ER_CANT_UPDATE_TABLE_IN_CREATE_TABLE_SELECT = 1746;\nexports.ER_PARTITION_CLAUSE_ON_NONPARTITIONED = 1747;\nexports.ER_ROW_DOES_NOT_MATCH_GIVEN_PARTITION_SET = 1748;\nexports.ER_NO_SUCH_PARTITION = 1749;\nexports.ER_CHANGE_RPL_INFO_REPOSITORY_FAILURE = 1750;\nexports.ER_WARNING_NOT_COMPLETE_ROLLBACK_WITH_CREATED_TEMP_TABLE = 1751;\nexports.ER_WARNING_NOT_COMPLETE_ROLLBACK_WITH_DROPPED_TEMP_TABLE = 1752;\nexports.ER_MTA_FEATURE_IS_NOT_SUPPORTED = 1753;\nexports.ER_MTA_UPDATED_DBS_GREATER_MAX = 1754;\nexports.ER_MTA_CANT_PARALLEL = 1755;\nexports.ER_MTA_INCONSISTENT_DATA = 1756;\nexports.ER_FULLTEXT_NOT_SUPPORTED_WITH_PARTITIONING = 1757;\nexports.ER_DA_INVALID_CONDITION_NUMBER = 1758;\nexports.ER_INSECURE_PLAIN_TEXT = 1759;\nexports.ER_INSECURE_CHANGE_SOURCE = 1760;\nexports.ER_FOREIGN_DUPLICATE_KEY_WITH_CHILD_INFO = 1761;\nexports.ER_FOREIGN_DUPLICATE_KEY_WITHOUT_CHILD_INFO = 1762;\nexports.ER_SQLTHREAD_WITH_SECURE_REPLICA = 1763;\nexports.ER_TABLE_HAS_NO_FT = 1764;\nexports.ER_VARIABLE_NOT_SETTABLE_IN_SF_OR_TRIGGER = 1765;\nexports.ER_VARIABLE_NOT_SETTABLE_IN_TRANSACTION = 1766;\nexports.ER_GTID_NEXT_IS_NOT_IN_GTID_NEXT_LIST = 1767;\nexports.ER_CANT_CHANGE_GTID_NEXT_IN_TRANSACTION = 1768;\nexports.ER_SET_STATEMENT_CANNOT_INVOKE_FUNCTION = 1769;\nexports.ER_GTID_NEXT_CANT_BE_AUTOMATIC_IF_GTID_NEXT_LIST_IS_NON_NULL = 1770;\nexports.ER_SKIPPING_LOGGED_TRANSACTION = 1771;\nexports.ER_MALFORMED_GTID_SET_SPECIFICATION = 1772;\nexports.ER_MALFORMED_GTID_SET_ENCODING = 1773;\nexports.ER_MALFORMED_GTID_SPECIFICATION = 1774;\nexports.ER_GNO_EXHAUSTED = 1775;\nexports.ER_BAD_REPLICA_AUTO_POSITION = 1776;\nexports.ER_AUTO_POSITION_REQUIRES_GTID_MODE_NOT_OFF = 1777;\nexports.ER_CANT_DO_IMPLICIT_COMMIT_IN_TRX_WHEN_GTID_NEXT_IS_SET = 1778;\nexports.ER_GTID_MODE_ON_REQUIRES_ENFORCE_GTID_CONSISTENCY_ON = 1779;\nexports.ER_GTID_MODE_REQUIRES_BINLOG = 1780;\nexports.ER_CANT_SET_GTID_NEXT_TO_GTID_WHEN_GTID_MODE_IS_OFF = 1781;\nexports.ER_CANT_SET_GTID_NEXT_TO_ANONYMOUS_WHEN_GTID_MODE_IS_ON = 1782;\nexports.ER_CANT_SET_GTID_NEXT_LIST_TO_NON_NULL_WHEN_GTID_MODE_IS_OFF = 1783;\nexports.ER_FOUND_GTID_EVENT_WHEN_GTID_MODE_IS_OFF = 1784;\nexports.ER_GTID_UNSAFE_NON_TRANSACTIONAL_TABLE = 1785;\nexports.ER_GTID_UNSAFE_CREATE_SELECT = 1786;\nexports.ER_GTID_UNSAFE_CREATE_DROP_TEMP_TABLE_IN_TRANSACTION = 1787;\nexports.ER_GTID_MODE_CAN_ONLY_CHANGE_ONE_STEP_AT_A_TIME = 1788;\nexports.ER_SOURCE_HAS_PURGED_REQUIRED_GTIDS = 1789;\nexports.ER_CANT_SET_GTID_NEXT_WHEN_OWNING_GTID = 1790;\nexports.ER_UNKNOWN_EXPLAIN_FORMAT = 1791;\nexports.ER_CANT_EXECUTE_IN_READ_ONLY_TRANSACTION = 1792;\nexports.ER_TOO_LONG_TABLE_PARTITION_COMMENT = 1793;\nexports.ER_REPLICA_CONFIGURATION = 1794;\nexports.ER_INNODB_FT_LIMIT = 1795;\nexports.ER_INNODB_NO_FT_TEMP_TABLE = 1796;\nexports.ER_INNODB_FT_WRONG_DOCID_COLUMN = 1797;\nexports.ER_INNODB_FT_WRONG_DOCID_INDEX = 1798;\nexports.ER_INNODB_ONLINE_LOG_TOO_BIG = 1799;\nexports.ER_UNKNOWN_ALTER_ALGORITHM = 1800;\nexports.ER_UNKNOWN_ALTER_LOCK = 1801;\nexports.ER_MTA_CHANGE_SOURCE_CANT_RUN_WITH_GAPS = 1802;\nexports.ER_MTA_RECOVERY_FAILURE = 1803;\nexports.ER_MTA_RESET_WORKERS = 1804;\nexports.ER_COL_COUNT_DOESNT_MATCH_CORRUPTED_V2 = 1805;\nexports.ER_REPLICA_SILENT_RETRY_TRANSACTION = 1806;\nexports.ER_DISCARD_FK_CHECKS_RUNNING = 1807;\nexports.ER_TABLE_SCHEMA_MISMATCH = 1808;\nexports.ER_TABLE_IN_SYSTEM_TABLESPACE = 1809;\nexports.ER_IO_READ_ERROR = 1810;\nexports.ER_IO_WRITE_ERROR = 1811;\nexports.ER_TABLESPACE_MISSING = 1812;\nexports.ER_TABLESPACE_EXISTS = 1813;\nexports.ER_TABLESPACE_DISCARDED = 1814;\nexports.ER_INTERNAL_ERROR = 1815;\nexports.ER_INNODB_IMPORT_ERROR = 1816;\nexports.ER_INNODB_INDEX_CORRUPT = 1817;\nexports.ER_INVALID_YEAR_COLUMN_LENGTH = 1818;\nexports.ER_NOT_VALID_PASSWORD = 1819;\nexports.ER_MUST_CHANGE_PASSWORD = 1820;\nexports.ER_FK_NO_INDEX_CHILD = 1821;\nexports.ER_FK_NO_INDEX_PARENT = 1822;\nexports.ER_FK_FAIL_ADD_SYSTEM = 1823;\nexports.ER_FK_CANNOT_OPEN_PARENT = 1824;\nexports.ER_FK_INCORRECT_OPTION = 1825;\nexports.ER_FK_DUP_NAME = 1826;\nexports.ER_PASSWORD_FORMAT = 1827;\nexports.ER_FK_COLUMN_CANNOT_DROP = 1828;\nexports.ER_FK_COLUMN_CANNOT_DROP_CHILD = 1829;\nexports.ER_FK_COLUMN_NOT_NULL = 1830;\nexports.ER_DUP_INDEX = 1831;\nexports.ER_FK_COLUMN_CANNOT_CHANGE = 1832;\nexports.ER_FK_COLUMN_CANNOT_CHANGE_CHILD = 1833;\nexports.ER_UNUSED5 = 1834;\nexports.ER_MALFORMED_PACKET = 1835;\nexports.ER_READ_ONLY_MODE = 1836;\nexports.ER_GTID_NEXT_TYPE_UNDEFINED_GTID = 1837;\nexports.ER_VARIABLE_NOT_SETTABLE_IN_SP = 1838;\nexports.ER_CANT_SET_GTID_PURGED_WHEN_GTID_MODE_IS_OFF = 1839;\nexports.ER_CANT_SET_GTID_PURGED_WHEN_GTID_EXECUTED_IS_NOT_EMPTY = 1840;\nexports.ER_CANT_SET_GTID_PURGED_WHEN_OWNED_GTIDS_IS_NOT_EMPTY = 1841;\nexports.ER_GTID_PURGED_WAS_CHANGED = 1842;\nexports.ER_GTID_EXECUTED_WAS_CHANGED = 1843;\nexports.ER_BINLOG_STMT_MODE_AND_NO_REPL_TABLES = 1844;\nexports.ER_ALTER_OPERATION_NOT_SUPPORTED = 1845;\nexports.ER_ALTER_OPERATION_NOT_SUPPORTED_REASON = 1846;\nexports.ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_COPY = 1847;\nexports.ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_PARTITION = 1848;\nexports.ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_FK_RENAME = 1849;\nexports.ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_COLUMN_TYPE = 1850;\nexports.ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_FK_CHECK = 1851;\nexports.ER_UNUSED6 = 1852;\nexports.ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_NOPK = 1853;\nexports.ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_AUTOINC = 1854;\nexports.ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_HIDDEN_FTS = 1855;\nexports.ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_CHANGE_FTS = 1856;\nexports.ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_FTS = 1857;\nexports.ER_SQL_REPLICA_SKIP_COUNTER_NOT_SETTABLE_IN_GTID_MODE = 1858;\nexports.ER_DUP_UNKNOWN_IN_INDEX = 1859;\nexports.ER_IDENT_CAUSES_TOO_LONG_PATH = 1860;\nexports.ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_NOT_NULL = 1861;\nexports.ER_MUST_CHANGE_PASSWORD_LOGIN = 1862;\nexports.ER_ROW_IN_WRONG_PARTITION = 1863;\nexports.ER_MTA_EVENT_BIGGER_PENDING_JOBS_SIZE_MAX = 1864;\nexports.ER_INNODB_NO_FT_USES_PARSER = 1865;\nexports.ER_BINLOG_LOGICAL_CORRUPTION = 1866;\nexports.ER_WARN_PURGE_LOG_IN_USE = 1867;\nexports.ER_WARN_PURGE_LOG_IS_ACTIVE = 1868;\nexports.ER_AUTO_INCREMENT_CONFLICT = 1869;\nexports.WARN_ON_BLOCKHOLE_IN_RBR = 1870;\nexports.ER_REPLICA_CM_INIT_REPOSITORY = 1871;\nexports.ER_REPLICA_AM_INIT_REPOSITORY = 1872;\nexports.ER_ACCESS_DENIED_CHANGE_USER_ERROR = 1873;\nexports.ER_INNODB_READ_ONLY = 1874;\nexports.ER_STOP_REPLICA_SQL_THREAD_TIMEOUT = 1875;\nexports.ER_STOP_REPLICA_IO_THREAD_TIMEOUT = 1876;\nexports.ER_TABLE_CORRUPT = 1877;\nexports.ER_TEMP_FILE_WRITE_FAILURE = 1878;\nexports.ER_INNODB_FT_AUX_NOT_HEX_ID = 1879;\nexports.ER_OLD_TEMPORALS_UPGRADED = 1880;\nexports.ER_INNODB_FORCED_RECOVERY = 1881;\nexports.ER_AES_INVALID_IV = 1882;\nexports.ER_PLUGIN_CANNOT_BE_UNINSTALLED = 1883;\nexports.ER_GTID_UNSAFE_BINLOG_SPLITTABLE_STATEMENT_AND_ASSIGNED_GTID = 1884;\nexports.ER_REPLICA_HAS_MORE_GTIDS_THAN_SOURCE = 1885;\nexports.ER_MISSING_KEY = 1886;\nexports.WARN_NAMED_PIPE_ACCESS_EVERYONE = 1887;\nexports.ER_FILE_CORRUPT = 3000;\nexports.ER_ERROR_ON_SOURCE = 3001;\nexports.ER_INCONSISTENT_ERROR = 3002;\nexports.ER_STORAGE_ENGINE_NOT_LOADED = 3003;\nexports.ER_GET_STACKED_DA_WITHOUT_ACTIVE_HANDLER = 3004;\nexports.ER_WARN_LEGACY_SYNTAX_CONVERTED = 3005;\nexports.ER_BINLOG_UNSAFE_FULLTEXT_PLUGIN = 3006;\nexports.ER_CANNOT_DISCARD_TEMPORARY_TABLE = 3007;\nexports.ER_FK_DEPTH_EXCEEDED = 3008;\nexports.ER_COL_COUNT_DOESNT_MATCH_PLEASE_UPDATE_V2 = 3009;\nexports.ER_WARN_TRIGGER_DOESNT_HAVE_CREATED = 3010;\nexports.ER_REFERENCED_TRG_DOES_NOT_EXIST = 3011;\nexports.ER_EXPLAIN_NOT_SUPPORTED = 3012;\nexports.ER_INVALID_FIELD_SIZE = 3013;\nexports.ER_MISSING_HA_CREATE_OPTION = 3014;\nexports.ER_ENGINE_OUT_OF_MEMORY = 3015;\nexports.ER_PASSWORD_EXPIRE_ANONYMOUS_USER = 3016;\nexports.ER_REPLICA_SQL_THREAD_MUST_STOP = 3017;\nexports.ER_NO_FT_MATERIALIZED_SUBQUERY = 3018;\nexports.ER_INNODB_UNDO_LOG_FULL = 3019;\nexports.ER_INVALID_ARGUMENT_FOR_LOGARITHM = 3020;\nexports.ER_REPLICA_CHANNEL_IO_THREAD_MUST_STOP = 3021;\nexports.ER_WARN_OPEN_TEMP_TABLES_MUST_BE_ZERO = 3022;\nexports.ER_WARN_ONLY_SOURCE_LOG_FILE_NO_POS = 3023;\nexports.ER_QUERY_TIMEOUT = 3024;\nexports.ER_NON_RO_SELECT_DISABLE_TIMER = 3025;\nexports.ER_DUP_LIST_ENTRY = 3026;\nexports.ER_SQL_MODE_NO_EFFECT = 3027;\nexports.ER_AGGREGATE_ORDER_FOR_UNION = 3028;\nexports.ER_AGGREGATE_ORDER_NON_AGG_QUERY = 3029;\nexports.ER_REPLICA_WORKER_STOPPED_PREVIOUS_THD_ERROR = 3030;\nexports.ER_DONT_SUPPORT_REPLICA_PRESERVE_COMMIT_ORDER = 3031;\nexports.ER_SERVER_OFFLINE_MODE = 3032;\nexports.ER_GIS_DIFFERENT_SRIDS = 3033;\nexports.ER_GIS_UNSUPPORTED_ARGUMENT = 3034;\nexports.ER_GIS_UNKNOWN_ERROR = 3035;\nexports.ER_GIS_UNKNOWN_EXCEPTION = 3036;\nexports.ER_GIS_INVALID_DATA = 3037;\nexports.ER_BOOST_GEOMETRY_EMPTY_INPUT_EXCEPTION = 3038;\nexports.ER_BOOST_GEOMETRY_CENTROID_EXCEPTION = 3039;\nexports.ER_BOOST_GEOMETRY_OVERLAY_INVALID_INPUT_EXCEPTION = 3040;\nexports.ER_BOOST_GEOMETRY_TURN_INFO_EXCEPTION = 3041;\nexports.ER_BOOST_GEOMETRY_SELF_INTERSECTION_POINT_EXCEPTION = 3042;\nexports.ER_BOOST_GEOMETRY_UNKNOWN_EXCEPTION = 3043;\nexports.ER_STD_BAD_ALLOC_ERROR = 3044;\nexports.ER_STD_DOMAIN_ERROR = 3045;\nexports.ER_STD_LENGTH_ERROR = 3046;\nexports.ER_STD_INVALID_ARGUMENT = 3047;\nexports.ER_STD_OUT_OF_RANGE_ERROR = 3048;\nexports.ER_STD_OVERFLOW_ERROR = 3049;\nexports.ER_STD_RANGE_ERROR = 3050;\nexports.ER_STD_UNDERFLOW_ERROR = 3051;\nexports.ER_STD_LOGIC_ERROR = 3052;\nexports.ER_STD_RUNTIME_ERROR = 3053;\nexports.ER_STD_UNKNOWN_EXCEPTION = 3054;\nexports.ER_GIS_DATA_WRONG_ENDIANESS = 3055;\nexports.ER_CHANGE_SOURCE_PASSWORD_LENGTH = 3056;\nexports.ER_USER_LOCK_WRONG_NAME = 3057;\nexports.ER_USER_LOCK_DEADLOCK = 3058;\nexports.ER_REPLACE_INACCESSIBLE_ROWS = 3059;\nexports.ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_GIS = 3060;\nexports.ER_ILLEGAL_USER_VAR = 3061;\nexports.ER_GTID_MODE_OFF = 3062;\nexports.ER_UNSUPPORTED_BY_REPLICATION_THREAD = 3063;\nexports.ER_INCORRECT_TYPE = 3064;\nexports.ER_FIELD_IN_ORDER_NOT_SELECT = 3065;\nexports.ER_AGGREGATE_IN_ORDER_NOT_SELECT = 3066;\nexports.ER_INVALID_RPL_WILD_TABLE_FILTER_PATTERN = 3067;\nexports.ER_NET_OK_PACKET_TOO_LARGE = 3068;\nexports.ER_INVALID_JSON_DATA = 3069;\nexports.ER_INVALID_GEOJSON_MISSING_MEMBER = 3070;\nexports.ER_INVALID_GEOJSON_WRONG_TYPE = 3071;\nexports.ER_INVALID_GEOJSON_UNSPECIFIED = 3072;\nexports.ER_DIMENSION_UNSUPPORTED = 3073;\nexports.ER_REPLICA_CHANNEL_DOES_NOT_EXIST = 3074;\nexports.ER_SLAVE_MULTIPLE_CHANNELS_HOST_PORT = 3075;\nexports.ER_REPLICA_CHANNEL_NAME_INVALID_OR_TOO_LONG = 3076;\nexports.ER_REPLICA_NEW_CHANNEL_WRONG_REPOSITORY = 3077;\nexports.ER_SLAVE_CHANNEL_DELETE = 3078;\nexports.ER_REPLICA_MULTIPLE_CHANNELS_CMD = 3079;\nexports.ER_REPLICA_MAX_CHANNELS_EXCEEDED = 3080;\nexports.ER_REPLICA_CHANNEL_MUST_STOP = 3081;\nexports.ER_REPLICA_CHANNEL_NOT_RUNNING = 3082;\nexports.ER_REPLICA_CHANNEL_WAS_RUNNING = 3083;\nexports.ER_REPLICA_CHANNEL_WAS_NOT_RUNNING = 3084;\nexports.ER_REPLICA_CHANNEL_SQL_THREAD_MUST_STOP = 3085;\nexports.ER_REPLICA_CHANNEL_SQL_SKIP_COUNTER = 3086;\nexports.ER_WRONG_FIELD_WITH_GROUP_V2 = 3087;\nexports.ER_MIX_OF_GROUP_FUNC_AND_FIELDS_V2 = 3088;\nexports.ER_WARN_DEPRECATED_SYSVAR_UPDATE = 3089;\nexports.ER_WARN_DEPRECATED_SQLMODE = 3090;\nexports.ER_CANNOT_LOG_PARTIAL_DROP_DATABASE_WITH_GTID = 3091;\nexports.ER_GROUP_REPLICATION_CONFIGURATION = 3092;\nexports.ER_GROUP_REPLICATION_RUNNING = 3093;\nexports.ER_GROUP_REPLICATION_APPLIER_INIT_ERROR = 3094;\nexports.ER_GROUP_REPLICATION_STOP_APPLIER_THREAD_TIMEOUT = 3095;\nexports.ER_GROUP_REPLICATION_COMMUNICATION_LAYER_SESSION_ERROR = 3096;\nexports.ER_GROUP_REPLICATION_COMMUNICATION_LAYER_JOIN_ERROR = 3097;\nexports.ER_BEFORE_DML_VALIDATION_ERROR = 3098;\nexports.ER_PREVENTS_VARIABLE_WITHOUT_RBR = 3099;\nexports.ER_RUN_HOOK_ERROR = 3100;\nexports.ER_TRANSACTION_ROLLBACK_DURING_COMMIT = 3101;\nexports.ER_GENERATED_COLUMN_FUNCTION_IS_NOT_ALLOWED = 3102;\nexports.ER_UNSUPPORTED_ALTER_INPLACE_ON_VIRTUAL_COLUMN = 3103;\nexports.ER_WRONG_FK_OPTION_FOR_GENERATED_COLUMN = 3104;\nexports.ER_NON_DEFAULT_VALUE_FOR_GENERATED_COLUMN = 3105;\nexports.ER_UNSUPPORTED_ACTION_ON_GENERATED_COLUMN = 3106;\nexports.ER_GENERATED_COLUMN_NON_PRIOR = 3107;\nexports.ER_DEPENDENT_BY_GENERATED_COLUMN = 3108;\nexports.ER_GENERATED_COLUMN_REF_AUTO_INC = 3109;\nexports.ER_FEATURE_NOT_AVAILABLE = 3110;\nexports.ER_CANT_SET_GTID_MODE = 3111;\nexports.ER_CANT_USE_AUTO_POSITION_WITH_GTID_MODE_OFF = 3112;\nexports.ER_CANT_REPLICATE_ANONYMOUS_WITH_AUTO_POSITION = 3113;\nexports.ER_CANT_REPLICATE_ANONYMOUS_WITH_GTID_MODE_ON = 3114;\nexports.ER_CANT_REPLICATE_GTID_WITH_GTID_MODE_OFF = 3115;\nexports.ER_CANT_ENFORCE_GTID_CONSISTENCY_WITH_ONGOING_GTID_VIOLATING_TX = 3116;\nexports.ER_ENFORCE_GTID_CONSISTENCY_WARN_WITH_ONGOING_GTID_VIOLATING_TX = 3117;\nexports.ER_ACCOUNT_HAS_BEEN_LOCKED = 3118;\nexports.ER_WRONG_TABLESPACE_NAME = 3119;\nexports.ER_TABLESPACE_IS_NOT_EMPTY = 3120;\nexports.ER_WRONG_FILE_NAME = 3121;\nexports.ER_BOOST_GEOMETRY_INCONSISTENT_TURNS_EXCEPTION = 3122;\nexports.ER_WARN_OPTIMIZER_HINT_SYNTAX_ERROR = 3123;\nexports.ER_WARN_BAD_MAX_EXECUTION_TIME = 3124;\nexports.ER_WARN_UNSUPPORTED_MAX_EXECUTION_TIME = 3125;\nexports.ER_WARN_CONFLICTING_HINT = 3126;\nexports.ER_WARN_UNKNOWN_QB_NAME = 3127;\nexports.ER_UNRESOLVED_HINT_NAME = 3128;\nexports.ER_WARN_ON_MODIFYING_GTID_EXECUTED_TABLE = 3129;\nexports.ER_PLUGGABLE_PROTOCOL_COMMAND_NOT_SUPPORTED = 3130;\nexports.ER_LOCKING_SERVICE_WRONG_NAME = 3131;\nexports.ER_LOCKING_SERVICE_DEADLOCK = 3132;\nexports.ER_LOCKING_SERVICE_TIMEOUT = 3133;\nexports.ER_GIS_MAX_POINTS_IN_GEOMETRY_OVERFLOWED = 3134;\nexports.ER_SQL_MODE_MERGED = 3135;\nexports.ER_VTOKEN_PLUGIN_TOKEN_MISMATCH = 3136;\nexports.ER_VTOKEN_PLUGIN_TOKEN_NOT_FOUND = 3137;\nexports.ER_CANT_SET_VARIABLE_WHEN_OWNING_GTID = 3138;\nexports.ER_REPLICA_CHANNEL_OPERATION_NOT_ALLOWED = 3139;\nexports.ER_INVALID_JSON_TEXT = 3140;\nexports.ER_INVALID_JSON_TEXT_IN_PARAM = 3141;\nexports.ER_INVALID_JSON_BINARY_DATA = 3142;\nexports.ER_INVALID_JSON_PATH = 3143;\nexports.ER_INVALID_JSON_CHARSET = 3144;\nexports.ER_INVALID_JSON_CHARSET_IN_FUNCTION = 3145;\nexports.ER_INVALID_TYPE_FOR_JSON = 3146;\nexports.ER_INVALID_CAST_TO_JSON = 3147;\nexports.ER_INVALID_JSON_PATH_CHARSET = 3148;\nexports.ER_INVALID_JSON_PATH_WILDCARD = 3149;\nexports.ER_JSON_VALUE_TOO_BIG = 3150;\nexports.ER_JSON_KEY_TOO_BIG = 3151;\nexports.ER_JSON_USED_AS_KEY = 3152;\nexports.ER_JSON_VACUOUS_PATH = 3153;\nexports.ER_JSON_BAD_ONE_OR_ALL_ARG = 3154;\nexports.ER_NUMERIC_JSON_VALUE_OUT_OF_RANGE = 3155;\nexports.ER_INVALID_JSON_VALUE_FOR_CAST = 3156;\nexports.ER_JSON_DOCUMENT_TOO_DEEP = 3157;\nexports.ER_JSON_DOCUMENT_NULL_KEY = 3158;\nexports.ER_SECURE_TRANSPORT_REQUIRED = 3159;\nexports.ER_NO_SECURE_TRANSPORTS_CONFIGURED = 3160;\nexports.ER_DISABLED_STORAGE_ENGINE = 3161;\nexports.ER_USER_DOES_NOT_EXIST = 3162;\nexports.ER_USER_ALREADY_EXISTS = 3163;\nexports.ER_AUDIT_API_ABORT = 3164;\nexports.ER_INVALID_JSON_PATH_ARRAY_CELL = 3165;\nexports.ER_BUFPOOL_RESIZE_INPROGRESS = 3166;\nexports.ER_FEATURE_DISABLED_SEE_DOC = 3167;\nexports.ER_SERVER_ISNT_AVAILABLE = 3168;\nexports.ER_SESSION_WAS_KILLED = 3169;\nexports.ER_CAPACITY_EXCEEDED = 3170;\nexports.ER_CAPACITY_EXCEEDED_IN_RANGE_OPTIMIZER = 3171;\nexports.ER_TABLE_NEEDS_UPG_PART = 3172;\nexports.ER_CANT_WAIT_FOR_EXECUTED_GTID_SET_WHILE_OWNING_A_GTID = 3173;\nexports.ER_CANNOT_ADD_FOREIGN_BASE_COL_VIRTUAL = 3174;\nexports.ER_CANNOT_CREATE_VIRTUAL_INDEX_CONSTRAINT = 3175;\nexports.ER_ERROR_ON_MODIFYING_GTID_EXECUTED_TABLE = 3176;\nexports.ER_LOCK_REFUSED_BY_ENGINE = 3177;\nexports.ER_UNSUPPORTED_ALTER_ONLINE_ON_VIRTUAL_COLUMN = 3178;\nexports.ER_MASTER_KEY_ROTATION_NOT_SUPPORTED_BY_SE = 3179;\nexports.ER_MASTER_KEY_ROTATION_ERROR_BY_SE = 3180;\nexports.ER_MASTER_KEY_ROTATION_BINLOG_FAILED = 3181;\nexports.ER_MASTER_KEY_ROTATION_SE_UNAVAILABLE = 3182;\nexports.ER_TABLESPACE_CANNOT_ENCRYPT = 3183;\nexports.ER_INVALID_ENCRYPTION_OPTION = 3184;\nexports.ER_CANNOT_FIND_KEY_IN_KEYRING = 3185;\nexports.ER_CAPACITY_EXCEEDED_IN_PARSER = 3186;\nexports.ER_UNSUPPORTED_ALTER_ENCRYPTION_INPLACE = 3187;\nexports.ER_KEYRING_UDF_KEYRING_SERVICE_ERROR = 3188;\nexports.ER_USER_COLUMN_OLD_LENGTH = 3189;\nexports.ER_CANT_RESET_SOURCE = 3190;\nexports.ER_GROUP_REPLICATION_MAX_GROUP_SIZE = 3191;\nexports.ER_CANNOT_ADD_FOREIGN_BASE_COL_STORED = 3192;\nexports.ER_TABLE_REFERENCED = 3193;\nexports.ER_PARTITION_ENGINE_DEPRECATED_FOR_TABLE = 3194;\nexports.ER_WARN_USING_GEOMFROMWKB_TO_SET_SRID_ZERO = 3195;\nexports.ER_WARN_USING_GEOMFROMWKB_TO_SET_SRID = 3196;\nexports.ER_XA_RETRY = 3197;\nexports.ER_KEYRING_AWS_UDF_AWS_KMS_ERROR = 3198;\nexports.ER_BINLOG_UNSAFE_XA = 3199;\nexports.ER_UDF_ERROR = 3200;\nexports.ER_KEYRING_MIGRATION_FAILURE = 3201;\nexports.ER_KEYRING_ACCESS_DENIED_ERROR = 3202;\nexports.ER_KEYRING_MIGRATION_STATUS = 3203;\nexports.ER_PLUGIN_FAILED_TO_OPEN_TABLES = 3204;\nexports.ER_PLUGIN_FAILED_TO_OPEN_TABLE = 3205;\nexports.ER_AUDIT_LOG_NO_KEYRING_PLUGIN_INSTALLED = 3206;\nexports.ER_AUDIT_LOG_ENCRYPTION_PASSWORD_HAS_NOT_BEEN_SET = 3207;\nexports.ER_AUDIT_LOG_COULD_NOT_CREATE_AES_KEY = 3208;\nexports.ER_AUDIT_LOG_ENCRYPTION_PASSWORD_CANNOT_BE_FETCHED = 3209;\nexports.ER_AUDIT_LOG_JSON_FILTERING_NOT_ENABLED = 3210;\nexports.ER_AUDIT_LOG_UDF_INSUFFICIENT_PRIVILEGE = 3211;\nexports.ER_AUDIT_LOG_SUPER_PRIVILEGE_REQUIRED = 3212;\nexports.ER_COULD_NOT_REINITIALIZE_AUDIT_LOG_FILTERS = 3213;\nexports.ER_AUDIT_LOG_UDF_INVALID_ARGUMENT_TYPE = 3214;\nexports.ER_AUDIT_LOG_UDF_INVALID_ARGUMENT_COUNT = 3215;\nexports.ER_AUDIT_LOG_HAS_NOT_BEEN_INSTALLED = 3216;\nexports.ER_AUDIT_LOG_UDF_READ_INVALID_MAX_ARRAY_LENGTH_ARG_TYPE = 3217;\nexports.ER_AUDIT_LOG_UDF_READ_INVALID_MAX_ARRAY_LENGTH_ARG_VALUE = 3218;\nexports.ER_AUDIT_LOG_JSON_FILTER_PARSING_ERROR = 3219;\nexports.ER_AUDIT_LOG_JSON_FILTER_NAME_CANNOT_BE_EMPTY = 3220;\nexports.ER_AUDIT_LOG_JSON_USER_NAME_CANNOT_BE_EMPTY = 3221;\nexports.ER_AUDIT_LOG_JSON_FILTER_DOES_NOT_EXISTS = 3222;\nexports.ER_AUDIT_LOG_USER_FIRST_CHARACTER_MUST_BE_ALPHANUMERIC = 3223;\nexports.ER_AUDIT_LOG_USER_NAME_INVALID_CHARACTER = 3224;\nexports.ER_AUDIT_LOG_HOST_NAME_INVALID_CHARACTER = 3225;\nexports.WARN_DEPRECATED_MAXDB_SQL_MODE_FOR_TIMESTAMP = 3226;\nexports.ER_XA_REPLICATION_FILTERS = 3227;\nexports.ER_CANT_OPEN_ERROR_LOG = 3228;\nexports.ER_GROUPING_ON_TIMESTAMP_IN_DST = 3229;\nexports.ER_CANT_START_SERVER_NAMED_PIPE = 3230;\nexports.ER_WRITE_SET_EXCEEDS_LIMIT = 3231;\nexports.ER_DEPRECATED_TLS_VERSION_SESSION_57 = 3232;\nexports.ER_WARN_DEPRECATED_TLS_VERSION_57 = 3233;\nexports.ER_WARN_WRONG_NATIVE_TABLE_STRUCTURE = 3234;\nexports.ER_AES_INVALID_KDF_NAME = 3235;\nexports.ER_AES_INVALID_KDF_ITERATIONS = 3236;\nexports.WARN_AES_KEY_SIZE = 3237;\nexports.ER_AES_INVALID_KDF_OPTION_SIZE = 3238;\nexports.ER_UNSUPPORT_COMPRESSED_TEMPORARY_TABLE = 3500;\nexports.ER_ACL_OPERATION_FAILED = 3501;\nexports.ER_UNSUPPORTED_INDEX_ALGORITHM = 3502;\nexports.ER_NO_SUCH_DB = 3503;\nexports.ER_TOO_BIG_ENUM = 3504;\nexports.ER_TOO_LONG_SET_ENUM_VALUE = 3505;\nexports.ER_INVALID_DD_OBJECT = 3506;\nexports.ER_UPDATING_DD_TABLE = 3507;\nexports.ER_INVALID_DD_OBJECT_ID = 3508;\nexports.ER_INVALID_DD_OBJECT_NAME = 3509;\nexports.ER_TABLESPACE_MISSING_WITH_NAME = 3510;\nexports.ER_TOO_LONG_ROUTINE_COMMENT = 3511;\nexports.ER_SP_LOAD_FAILED = 3512;\nexports.ER_INVALID_BITWISE_OPERANDS_SIZE = 3513;\nexports.ER_INVALID_BITWISE_AGGREGATE_OPERANDS_SIZE = 3514;\nexports.ER_WARN_UNSUPPORTED_HINT = 3515;\nexports.ER_UNEXPECTED_GEOMETRY_TYPE = 3516;\nexports.ER_SRS_PARSE_ERROR = 3517;\nexports.ER_SRS_PROJ_PARAMETER_MISSING = 3518;\nexports.ER_WARN_SRS_NOT_FOUND = 3519;\nexports.ER_SRS_NOT_CARTESIAN = 3520;\nexports.ER_SRS_NOT_CARTESIAN_UNDEFINED = 3521;\nexports.ER_PK_INDEX_CANT_BE_INVISIBLE = 3522;\nexports.ER_UNKNOWN_AUTHID = 3523;\nexports.ER_FAILED_ROLE_GRANT = 3524;\nexports.ER_OPEN_ROLE_TABLES = 3525;\nexports.ER_FAILED_DEFAULT_ROLES = 3526;\nexports.ER_COMPONENTS_NO_SCHEME = 3527;\nexports.ER_COMPONENTS_NO_SCHEME_SERVICE = 3528;\nexports.ER_COMPONENTS_CANT_LOAD = 3529;\nexports.ER_ROLE_NOT_GRANTED = 3530;\nexports.ER_FAILED_REVOKE_ROLE = 3531;\nexports.ER_RENAME_ROLE = 3532;\nexports.ER_COMPONENTS_CANT_ACQUIRE_SERVICE_IMPLEMENTATION = 3533;\nexports.ER_COMPONENTS_CANT_SATISFY_DEPENDENCY = 3534;\nexports.ER_COMPONENTS_LOAD_CANT_REGISTER_SERVICE_IMPLEMENTATION = 3535;\nexports.ER_COMPONENTS_LOAD_CANT_INITIALIZE = 3536;\nexports.ER_COMPONENTS_UNLOAD_NOT_LOADED = 3537;\nexports.ER_COMPONENTS_UNLOAD_CANT_DEINITIALIZE = 3538;\nexports.ER_COMPONENTS_CANT_RELEASE_SERVICE = 3539;\nexports.ER_COMPONENTS_UNLOAD_CANT_UNREGISTER_SERVICE = 3540;\nexports.ER_COMPONENTS_CANT_UNLOAD = 3541;\nexports.ER_WARN_UNLOAD_THE_NOT_PERSISTED = 3542;\nexports.ER_COMPONENT_TABLE_INCORRECT = 3543;\nexports.ER_COMPONENT_MANIPULATE_ROW_FAILED = 3544;\nexports.ER_COMPONENTS_UNLOAD_DUPLICATE_IN_GROUP = 3545;\nexports.ER_CANT_SET_GTID_PURGED_DUE_SETS_CONSTRAINTS = 3546;\nexports.ER_CANNOT_LOCK_USER_MANAGEMENT_CACHES = 3547;\nexports.ER_SRS_NOT_FOUND = 3548;\nexports.ER_VARIABLE_NOT_PERSISTED = 3549;\nexports.ER_IS_QUERY_INVALID_CLAUSE = 3550;\nexports.ER_UNABLE_TO_STORE_STATISTICS = 3551;\nexports.ER_NO_SYSTEM_SCHEMA_ACCESS = 3552;\nexports.ER_NO_SYSTEM_TABLESPACE_ACCESS = 3553;\nexports.ER_NO_SYSTEM_TABLE_ACCESS = 3554;\nexports.ER_NO_SYSTEM_TABLE_ACCESS_FOR_DICTIONARY_TABLE = 3555;\nexports.ER_NO_SYSTEM_TABLE_ACCESS_FOR_SYSTEM_TABLE = 3556;\nexports.ER_NO_SYSTEM_TABLE_ACCESS_FOR_TABLE = 3557;\nexports.ER_INVALID_OPTION_KEY = 3558;\nexports.ER_INVALID_OPTION_VALUE = 3559;\nexports.ER_INVALID_OPTION_KEY_VALUE_PAIR = 3560;\nexports.ER_INVALID_OPTION_START_CHARACTER = 3561;\nexports.ER_INVALID_OPTION_END_CHARACTER = 3562;\nexports.ER_INVALID_OPTION_CHARACTERS = 3563;\nexports.ER_DUPLICATE_OPTION_KEY = 3564;\nexports.ER_WARN_SRS_NOT_FOUND_AXIS_ORDER = 3565;\nexports.ER_NO_ACCESS_TO_NATIVE_FCT = 3566;\nexports.ER_RESET_SOURCE_TO_VALUE_OUT_OF_RANGE = 3567;\nexports.ER_UNRESOLVED_TABLE_LOCK = 3568;\nexports.ER_DUPLICATE_TABLE_LOCK = 3569;\nexports.ER_BINLOG_UNSAFE_SKIP_LOCKED = 3570;\nexports.ER_BINLOG_UNSAFE_NOWAIT = 3571;\nexports.ER_LOCK_NOWAIT = 3572;\nexports.ER_CTE_RECURSIVE_REQUIRES_UNION = 3573;\nexports.ER_CTE_RECURSIVE_REQUIRES_NONRECURSIVE_FIRST = 3574;\nexports.ER_CTE_RECURSIVE_FORBIDS_AGGREGATION = 3575;\nexports.ER_CTE_RECURSIVE_FORBIDDEN_JOIN_ORDER = 3576;\nexports.ER_CTE_RECURSIVE_REQUIRES_SINGLE_REFERENCE = 3577;\nexports.ER_SWITCH_TMP_ENGINE = 3578;\nexports.ER_WINDOW_NO_SUCH_WINDOW = 3579;\nexports.ER_WINDOW_CIRCULARITY_IN_WINDOW_GRAPH = 3580;\nexports.ER_WINDOW_NO_CHILD_PARTITIONING = 3581;\nexports.ER_WINDOW_NO_INHERIT_FRAME = 3582;\nexports.ER_WINDOW_NO_REDEFINE_ORDER_BY = 3583;\nexports.ER_WINDOW_FRAME_START_ILLEGAL = 3584;\nexports.ER_WINDOW_FRAME_END_ILLEGAL = 3585;\nexports.ER_WINDOW_FRAME_ILLEGAL = 3586;\nexports.ER_WINDOW_RANGE_FRAME_ORDER_TYPE = 3587;\nexports.ER_WINDOW_RANGE_FRAME_TEMPORAL_TYPE = 3588;\nexports.ER_WINDOW_RANGE_FRAME_NUMERIC_TYPE = 3589;\nexports.ER_WINDOW_RANGE_BOUND_NOT_CONSTANT = 3590;\nexports.ER_WINDOW_DUPLICATE_NAME = 3591;\nexports.ER_WINDOW_ILLEGAL_ORDER_BY = 3592;\nexports.ER_WINDOW_INVALID_WINDOW_FUNC_USE = 3593;\nexports.ER_WINDOW_INVALID_WINDOW_FUNC_ALIAS_USE = 3594;\nexports.ER_WINDOW_NESTED_WINDOW_FUNC_USE_IN_WINDOW_SPEC = 3595;\nexports.ER_WINDOW_ROWS_INTERVAL_USE = 3596;\nexports.ER_WINDOW_NO_GROUP_ORDER = 3597;\nexports.ER_WINDOW_EXPLAIN_JSON = 3598;\nexports.ER_WINDOW_FUNCTION_IGNORES_FRAME = 3599;\nexports.ER_WL9236_NOW = 3600;\nexports.ER_INVALID_NO_OF_ARGS = 3601;\nexports.ER_FIELD_IN_GROUPING_NOT_GROUP_BY = 3602;\nexports.ER_TOO_LONG_TABLESPACE_COMMENT = 3603;\nexports.ER_ENGINE_CANT_DROP_TABLE = 3604;\nexports.ER_ENGINE_CANT_DROP_MISSING_TABLE = 3605;\nexports.ER_TABLESPACE_DUP_FILENAME = 3606;\nexports.ER_DB_DROP_RMDIR2 = 3607;\nexports.ER_IMP_NO_FILES_MATCHED = 3608;\nexports.ER_IMP_SCHEMA_DOES_NOT_EXIST = 3609;\nexports.ER_IMP_TABLE_ALREADY_EXISTS = 3610;\nexports.ER_IMP_INCOMPATIBLE_MYSQLD_VERSION = 3611;\nexports.ER_IMP_INCOMPATIBLE_DD_VERSION = 3612;\nexports.ER_IMP_INCOMPATIBLE_SDI_VERSION = 3613;\nexports.ER_WARN_INVALID_HINT = 3614;\nexports.ER_VAR_DOES_NOT_EXIST = 3615;\nexports.ER_LONGITUDE_OUT_OF_RANGE = 3616;\nexports.ER_LATITUDE_OUT_OF_RANGE = 3617;\nexports.ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS = 3618;\nexports.ER_ILLEGAL_PRIVILEGE_LEVEL = 3619;\nexports.ER_NO_SYSTEM_VIEW_ACCESS = 3620;\nexports.ER_COMPONENT_FILTER_FLABBERGASTED = 3621;\nexports.ER_PART_EXPR_TOO_LONG = 3622;\nexports.ER_UDF_DROP_DYNAMICALLY_REGISTERED = 3623;\nexports.ER_UNABLE_TO_STORE_COLUMN_STATISTICS = 3624;\nexports.ER_UNABLE_TO_UPDATE_COLUMN_STATISTICS = 3625;\nexports.ER_UNABLE_TO_DROP_COLUMN_STATISTICS = 3626;\nexports.ER_UNABLE_TO_BUILD_HISTOGRAM = 3627;\nexports.ER_MANDATORY_ROLE = 3628;\nexports.ER_MISSING_TABLESPACE_FILE = 3629;\nexports.ER_PERSIST_ONLY_ACCESS_DENIED_ERROR = 3630;\nexports.ER_CMD_NEED_SUPER = 3631;\nexports.ER_PATH_IN_DATADIR = 3632;\nexports.ER_CLONE_DDL_IN_PROGRESS = 3633;\nexports.ER_CLONE_TOO_MANY_CONCURRENT_CLONES = 3634;\nexports.ER_APPLIER_LOG_EVENT_VALIDATION_ERROR = 3635;\nexports.ER_CTE_MAX_RECURSION_DEPTH = 3636;\nexports.ER_NOT_HINT_UPDATABLE_VARIABLE = 3637;\nexports.ER_CREDENTIALS_CONTRADICT_TO_HISTORY = 3638;\nexports.ER_WARNING_PASSWORD_HISTORY_CLAUSES_VOID = 3639;\nexports.ER_CLIENT_DOES_NOT_SUPPORT = 3640;\nexports.ER_I_S_SKIPPED_TABLESPACE = 3641;\nexports.ER_TABLESPACE_ENGINE_MISMATCH = 3642;\nexports.ER_WRONG_SRID_FOR_COLUMN = 3643;\nexports.ER_CANNOT_ALTER_SRID_DUE_TO_INDEX = 3644;\nexports.ER_WARN_BINLOG_PARTIAL_UPDATES_DISABLED = 3645;\nexports.ER_WARN_BINLOG_V1_ROW_EVENTS_DISABLED = 3646;\nexports.ER_WARN_BINLOG_PARTIAL_UPDATES_SUGGESTS_PARTIAL_IMAGES = 3647;\nexports.ER_COULD_NOT_APPLY_JSON_DIFF = 3648;\nexports.ER_CORRUPTED_JSON_DIFF = 3649;\nexports.ER_RESOURCE_GROUP_EXISTS = 3650;\nexports.ER_RESOURCE_GROUP_NOT_EXISTS = 3651;\nexports.ER_INVALID_VCPU_ID = 3652;\nexports.ER_INVALID_VCPU_RANGE = 3653;\nexports.ER_INVALID_THREAD_PRIORITY = 3654;\nexports.ER_DISALLOWED_OPERATION = 3655;\nexports.ER_RESOURCE_GROUP_BUSY = 3656;\nexports.ER_RESOURCE_GROUP_DISABLED = 3657;\nexports.ER_FEATURE_UNSUPPORTED = 3658;\nexports.ER_ATTRIBUTE_IGNORED = 3659;\nexports.ER_INVALID_THREAD_ID = 3660;\nexports.ER_RESOURCE_GROUP_BIND_FAILED = 3661;\nexports.ER_INVALID_USE_OF_FORCE_OPTION = 3662;\nexports.ER_GROUP_REPLICATION_COMMAND_FAILURE = 3663;\nexports.ER_SDI_OPERATION_FAILED = 3664;\nexports.ER_MISSING_JSON_TABLE_VALUE = 3665;\nexports.ER_WRONG_JSON_TABLE_VALUE = 3666;\nexports.ER_TF_MUST_HAVE_ALIAS = 3667;\nexports.ER_TF_FORBIDDEN_JOIN_TYPE = 3668;\nexports.ER_JT_VALUE_OUT_OF_RANGE = 3669;\nexports.ER_JT_MAX_NESTED_PATH = 3670;\nexports.ER_PASSWORD_EXPIRATION_NOT_SUPPORTED_BY_AUTH_METHOD = 3671;\nexports.ER_INVALID_GEOJSON_CRS_NOT_TOP_LEVEL = 3672;\nexports.ER_BAD_NULL_ERROR_NOT_IGNORED = 3673;\nexports.WARN_USELESS_SPATIAL_INDEX = 3674;\nexports.ER_DISK_FULL_NOWAIT = 3675;\nexports.ER_PARSE_ERROR_IN_DIGEST_FN = 3676;\nexports.ER_UNDISCLOSED_PARSE_ERROR_IN_DIGEST_FN = 3677;\nexports.ER_SCHEMA_DIR_EXISTS = 3678;\nexports.ER_SCHEMA_DIR_MISSING = 3679;\nexports.ER_SCHEMA_DIR_CREATE_FAILED = 3680;\nexports.ER_SCHEMA_DIR_UNKNOWN = 3681;\nexports.ER_ONLY_IMPLEMENTED_FOR_SRID_0_AND_4326 = 3682;\nexports.ER_BINLOG_EXPIRE_LOG_DAYS_AND_SECS_USED_TOGETHER = 3683;\nexports.ER_REGEXP_BUFFER_OVERFLOW = 3684;\nexports.ER_REGEXP_ILLEGAL_ARGUMENT = 3685;\nexports.ER_REGEXP_INDEX_OUTOFBOUNDS_ERROR = 3686;\nexports.ER_REGEXP_INTERNAL_ERROR = 3687;\nexports.ER_REGEXP_RULE_SYNTAX = 3688;\nexports.ER_REGEXP_BAD_ESCAPE_SEQUENCE = 3689;\nexports.ER_REGEXP_UNIMPLEMENTED = 3690;\nexports.ER_REGEXP_MISMATCHED_PAREN = 3691;\nexports.ER_REGEXP_BAD_INTERVAL = 3692;\nexports.ER_REGEXP_MAX_LT_MIN = 3693;\nexports.ER_REGEXP_INVALID_BACK_REF = 3694;\nexports.ER_REGEXP_LOOK_BEHIND_LIMIT = 3695;\nexports.ER_REGEXP_MISSING_CLOSE_BRACKET = 3696;\nexports.ER_REGEXP_INVALID_RANGE = 3697;\nexports.ER_REGEXP_STACK_OVERFLOW = 3698;\nexports.ER_REGEXP_TIME_OUT = 3699;\nexports.ER_REGEXP_PATTERN_TOO_BIG = 3700;\nexports.ER_CANT_SET_ERROR_LOG_SERVICE = 3701;\nexports.ER_EMPTY_PIPELINE_FOR_ERROR_LOG_SERVICE = 3702;\nexports.ER_COMPONENT_FILTER_DIAGNOSTICS = 3703;\nexports.ER_NOT_IMPLEMENTED_FOR_CARTESIAN_SRS = 3704;\nexports.ER_NOT_IMPLEMENTED_FOR_PROJECTED_SRS = 3705;\nexports.ER_NONPOSITIVE_RADIUS = 3706;\nexports.ER_RESTART_SERVER_FAILED = 3707;\nexports.ER_SRS_MISSING_MANDATORY_ATTRIBUTE = 3708;\nexports.ER_SRS_MULTIPLE_ATTRIBUTE_DEFINITIONS = 3709;\nexports.ER_SRS_NAME_CANT_BE_EMPTY_OR_WHITESPACE = 3710;\nexports.ER_SRS_ORGANIZATION_CANT_BE_EMPTY_OR_WHITESPACE = 3711;\nexports.ER_SRS_ID_ALREADY_EXISTS = 3712;\nexports.ER_WARN_SRS_ID_ALREADY_EXISTS = 3713;\nexports.ER_CANT_MODIFY_SRID_0 = 3714;\nexports.ER_WARN_RESERVED_SRID_RANGE = 3715;\nexports.ER_CANT_MODIFY_SRS_USED_BY_COLUMN = 3716;\nexports.ER_SRS_INVALID_CHARACTER_IN_ATTRIBUTE = 3717;\nexports.ER_SRS_ATTRIBUTE_STRING_TOO_LONG = 3718;\nexports.ER_DEPRECATED_UTF8_ALIAS = 3719;\nexports.ER_DEPRECATED_NATIONAL = 3720;\nexports.ER_INVALID_DEFAULT_UTF8MB4_COLLATION = 3721;\nexports.ER_UNABLE_TO_COLLECT_LOG_STATUS = 3722;\nexports.ER_RESERVED_TABLESPACE_NAME = 3723;\nexports.ER_UNABLE_TO_SET_OPTION = 3724;\nexports.ER_REPLICA_POSSIBLY_DIVERGED_AFTER_DDL = 3725;\nexports.ER_SRS_NOT_GEOGRAPHIC = 3726;\nexports.ER_POLYGON_TOO_LARGE = 3727;\nexports.ER_SPATIAL_UNIQUE_INDEX = 3728;\nexports.ER_INDEX_TYPE_NOT_SUPPORTED_FOR_SPATIAL_INDEX = 3729;\nexports.ER_FK_CANNOT_DROP_PARENT = 3730;\nexports.ER_GEOMETRY_PARAM_LONGITUDE_OUT_OF_RANGE = 3731;\nexports.ER_GEOMETRY_PARAM_LATITUDE_OUT_OF_RANGE = 3732;\nexports.ER_FK_CANNOT_USE_VIRTUAL_COLUMN = 3733;\nexports.ER_FK_NO_COLUMN_PARENT = 3734;\nexports.ER_CANT_SET_ERROR_SUPPRESSION_LIST = 3735;\nexports.ER_SRS_GEOGCS_INVALID_AXES = 3736;\nexports.ER_SRS_INVALID_SEMI_MAJOR_AXIS = 3737;\nexports.ER_SRS_INVALID_INVERSE_FLATTENING = 3738;\nexports.ER_SRS_INVALID_ANGULAR_UNIT = 3739;\nexports.ER_SRS_INVALID_PRIME_MERIDIAN = 3740;\nexports.ER_TRANSFORM_SOURCE_SRS_NOT_SUPPORTED = 3741;\nexports.ER_TRANSFORM_TARGET_SRS_NOT_SUPPORTED = 3742;\nexports.ER_TRANSFORM_SOURCE_SRS_MISSING_TOWGS84 = 3743;\nexports.ER_TRANSFORM_TARGET_SRS_MISSING_TOWGS84 = 3744;\nexports.ER_TEMP_TABLE_PREVENTS_SWITCH_SESSION_BINLOG_FORMAT = 3745;\nexports.ER_TEMP_TABLE_PREVENTS_SWITCH_GLOBAL_BINLOG_FORMAT = 3746;\nexports.ER_RUNNING_APPLIER_PREVENTS_SWITCH_GLOBAL_BINLOG_FORMAT = 3747;\nexports.ER_CLIENT_GTID_UNSAFE_CREATE_DROP_TEMP_TABLE_IN_TRX_IN_SBR = 3748;\nexports.ER_XA_CANT_CREATE_MDL_BACKUP = 3749;\nexports.ER_TABLE_WITHOUT_PK = 3750;\nexports.ER_WARN_DATA_TRUNCATED_FUNCTIONAL_INDEX = 3751;\nexports.ER_WARN_DATA_OUT_OF_RANGE_FUNCTIONAL_INDEX = 3752;\nexports.ER_FUNCTIONAL_INDEX_ON_JSON_OR_GEOMETRY_FUNCTION = 3753;\nexports.ER_FUNCTIONAL_INDEX_REF_AUTO_INCREMENT = 3754;\nexports.ER_CANNOT_DROP_COLUMN_FUNCTIONAL_INDEX = 3755;\nexports.ER_FUNCTIONAL_INDEX_PRIMARY_KEY = 3756;\nexports.ER_FUNCTIONAL_INDEX_ON_LOB = 3757;\nexports.ER_FUNCTIONAL_INDEX_FUNCTION_IS_NOT_ALLOWED = 3758;\nexports.ER_FULLTEXT_FUNCTIONAL_INDEX = 3759;\nexports.ER_SPATIAL_FUNCTIONAL_INDEX = 3760;\nexports.ER_WRONG_KEY_COLUMN_FUNCTIONAL_INDEX = 3761;\nexports.ER_FUNCTIONAL_INDEX_ON_FIELD = 3762;\nexports.ER_GENERATED_COLUMN_NAMED_FUNCTION_IS_NOT_ALLOWED = 3763;\nexports.ER_GENERATED_COLUMN_ROW_VALUE = 3764;\nexports.ER_GENERATED_COLUMN_VARIABLES = 3765;\nexports.ER_DEPENDENT_BY_DEFAULT_GENERATED_VALUE = 3766;\nexports.ER_DEFAULT_VAL_GENERATED_NON_PRIOR = 3767;\nexports.ER_DEFAULT_VAL_GENERATED_REF_AUTO_INC = 3768;\nexports.ER_DEFAULT_VAL_GENERATED_FUNCTION_IS_NOT_ALLOWED = 3769;\nexports.ER_DEFAULT_VAL_GENERATED_NAMED_FUNCTION_IS_NOT_ALLOWED = 3770;\nexports.ER_DEFAULT_VAL_GENERATED_ROW_VALUE = 3771;\nexports.ER_DEFAULT_VAL_GENERATED_VARIABLES = 3772;\nexports.ER_DEFAULT_AS_VAL_GENERATED = 3773;\nexports.ER_UNSUPPORTED_ACTION_ON_DEFAULT_VAL_GENERATED = 3774;\nexports.ER_GTID_UNSAFE_ALTER_ADD_COL_WITH_DEFAULT_EXPRESSION = 3775;\nexports.ER_FK_CANNOT_CHANGE_ENGINE = 3776;\nexports.ER_WARN_DEPRECATED_USER_SET_EXPR = 3777;\nexports.ER_WARN_DEPRECATED_UTF8MB3_COLLATION = 3778;\nexports.ER_WARN_DEPRECATED_NESTED_COMMENT_SYNTAX = 3779;\nexports.ER_FK_INCOMPATIBLE_COLUMNS = 3780;\nexports.ER_GR_HOLD_WAIT_TIMEOUT = 3781;\nexports.ER_GR_HOLD_KILLED = 3782;\nexports.ER_GR_HOLD_MEMBER_STATUS_ERROR = 3783;\nexports.ER_RPL_ENCRYPTION_FAILED_TO_FETCH_KEY = 3784;\nexports.ER_RPL_ENCRYPTION_KEY_NOT_FOUND = 3785;\nexports.ER_RPL_ENCRYPTION_KEYRING_INVALID_KEY = 3786;\nexports.ER_RPL_ENCRYPTION_HEADER_ERROR = 3787;\nexports.ER_RPL_ENCRYPTION_FAILED_TO_ROTATE_LOGS = 3788;\nexports.ER_RPL_ENCRYPTION_KEY_EXISTS_UNEXPECTED = 3789;\nexports.ER_RPL_ENCRYPTION_FAILED_TO_GENERATE_KEY = 3790;\nexports.ER_RPL_ENCRYPTION_FAILED_TO_STORE_KEY = 3791;\nexports.ER_RPL_ENCRYPTION_FAILED_TO_REMOVE_KEY = 3792;\nexports.ER_RPL_ENCRYPTION_UNABLE_TO_CHANGE_OPTION = 3793;\nexports.ER_RPL_ENCRYPTION_MASTER_KEY_RECOVERY_FAILED = 3794;\nexports.ER_SLOW_LOG_MODE_IGNORED_WHEN_NOT_LOGGING_TO_FILE = 3795;\nexports.ER_GRP_TRX_CONSISTENCY_NOT_ALLOWED = 3796;\nexports.ER_GRP_TRX_CONSISTENCY_BEFORE = 3797;\nexports.ER_GRP_TRX_CONSISTENCY_AFTER_ON_TRX_BEGIN = 3798;\nexports.ER_GRP_TRX_CONSISTENCY_BEGIN_NOT_ALLOWED = 3799;\nexports.ER_FUNCTIONAL_INDEX_ROW_VALUE_IS_NOT_ALLOWED = 3800;\nexports.ER_RPL_ENCRYPTION_FAILED_TO_ENCRYPT = 3801;\nexports.ER_PAGE_TRACKING_NOT_STARTED = 3802;\nexports.ER_PAGE_TRACKING_RANGE_NOT_TRACKED = 3803;\nexports.ER_PAGE_TRACKING_CANNOT_PURGE = 3804;\nexports.ER_RPL_ENCRYPTION_CANNOT_ROTATE_BINLOG_MASTER_KEY = 3805;\nexports.ER_BINLOG_MASTER_KEY_RECOVERY_OUT_OF_COMBINATION = 3806;\nexports.ER_BINLOG_MASTER_KEY_ROTATION_FAIL_TO_OPERATE_KEY = 3807;\nexports.ER_BINLOG_MASTER_KEY_ROTATION_FAIL_TO_ROTATE_LOGS = 3808;\nexports.ER_BINLOG_MASTER_KEY_ROTATION_FAIL_TO_REENCRYPT_LOG = 3809;\nexports.ER_BINLOG_MASTER_KEY_ROTATION_FAIL_TO_CLEANUP_UNUSED_KEYS = 3810;\nexports.ER_BINLOG_MASTER_KEY_ROTATION_FAIL_TO_CLEANUP_AUX_KEY = 3811;\nexports.ER_NON_BOOLEAN_EXPR_FOR_CHECK_CONSTRAINT = 3812;\nexports.ER_COLUMN_CHECK_CONSTRAINT_REFERENCES_OTHER_COLUMN = 3813;\nexports.ER_CHECK_CONSTRAINT_NAMED_FUNCTION_IS_NOT_ALLOWED = 3814;\nexports.ER_CHECK_CONSTRAINT_FUNCTION_IS_NOT_ALLOWED = 3815;\nexports.ER_CHECK_CONSTRAINT_VARIABLES = 3816;\nexports.ER_CHECK_CONSTRAINT_ROW_VALUE = 3817;\nexports.ER_CHECK_CONSTRAINT_REFERS_AUTO_INCREMENT_COLUMN = 3818;\nexports.ER_CHECK_CONSTRAINT_VIOLATED = 3819;\nexports.ER_CHECK_CONSTRAINT_REFERS_UNKNOWN_COLUMN = 3820;\nexports.ER_CHECK_CONSTRAINT_NOT_FOUND = 3821;\nexports.ER_CHECK_CONSTRAINT_DUP_NAME = 3822;\nexports.ER_CHECK_CONSTRAINT_CLAUSE_USING_FK_REFER_ACTION_COLUMN = 3823;\nexports.WARN_UNENCRYPTED_TABLE_IN_ENCRYPTED_DB = 3824;\nexports.ER_INVALID_ENCRYPTION_REQUEST = 3825;\nexports.ER_CANNOT_SET_TABLE_ENCRYPTION = 3826;\nexports.ER_CANNOT_SET_DATABASE_ENCRYPTION = 3827;\nexports.ER_CANNOT_SET_TABLESPACE_ENCRYPTION = 3828;\nexports.ER_TABLESPACE_CANNOT_BE_ENCRYPTED = 3829;\nexports.ER_TABLESPACE_CANNOT_BE_DECRYPTED = 3830;\nexports.ER_TABLESPACE_TYPE_UNKNOWN = 3831;\nexports.ER_TARGET_TABLESPACE_UNENCRYPTED = 3832;\nexports.ER_CANNOT_USE_ENCRYPTION_CLAUSE = 3833;\nexports.ER_INVALID_MULTIPLE_CLAUSES = 3834;\nexports.ER_UNSUPPORTED_USE_OF_GRANT_AS = 3835;\nexports.ER_UKNOWN_AUTH_ID_OR_ACCESS_DENIED_FOR_GRANT_AS = 3836;\nexports.ER_DEPENDENT_BY_FUNCTIONAL_INDEX = 3837;\nexports.ER_PLUGIN_NOT_EARLY = 3838;\nexports.ER_INNODB_REDO_LOG_ARCHIVE_START_SUBDIR_PATH = 3839;\nexports.ER_INNODB_REDO_LOG_ARCHIVE_START_TIMEOUT = 3840;\nexports.ER_INNODB_REDO_LOG_ARCHIVE_DIRS_INVALID = 3841;\nexports.ER_INNODB_REDO_LOG_ARCHIVE_LABEL_NOT_FOUND = 3842;\nexports.ER_INNODB_REDO_LOG_ARCHIVE_DIR_EMPTY = 3843;\nexports.ER_INNODB_REDO_LOG_ARCHIVE_NO_SUCH_DIR = 3844;\nexports.ER_INNODB_REDO_LOG_ARCHIVE_DIR_CLASH = 3845;\nexports.ER_INNODB_REDO_LOG_ARCHIVE_DIR_PERMISSIONS = 3846;\nexports.ER_INNODB_REDO_LOG_ARCHIVE_FILE_CREATE = 3847;\nexports.ER_INNODB_REDO_LOG_ARCHIVE_ACTIVE = 3848;\nexports.ER_INNODB_REDO_LOG_ARCHIVE_INACTIVE = 3849;\nexports.ER_INNODB_REDO_LOG_ARCHIVE_FAILED = 3850;\nexports.ER_INNODB_REDO_LOG_ARCHIVE_SESSION = 3851;\nexports.ER_STD_REGEX_ERROR = 3852;\nexports.ER_INVALID_JSON_TYPE = 3853;\nexports.ER_CANNOT_CONVERT_STRING = 3854;\nexports.ER_DEPENDENT_BY_PARTITION_FUNC = 3855;\nexports.ER_WARN_DEPRECATED_FLOAT_AUTO_INCREMENT = 3856;\nexports.ER_RPL_CANT_STOP_REPLICA_WHILE_LOCKED_BACKUP = 3857;\nexports.ER_WARN_DEPRECATED_FLOAT_DIGITS = 3858;\nexports.ER_WARN_DEPRECATED_FLOAT_UNSIGNED = 3859;\nexports.ER_WARN_DEPRECATED_INTEGER_DISPLAY_WIDTH = 3860;\nexports.ER_WARN_DEPRECATED_ZEROFILL = 3861;\nexports.ER_CLONE_DONOR = 3862;\nexports.ER_CLONE_PROTOCOL = 3863;\nexports.ER_CLONE_DONOR_VERSION = 3864;\nexports.ER_CLONE_OS = 3865;\nexports.ER_CLONE_PLATFORM = 3866;\nexports.ER_CLONE_CHARSET = 3867;\nexports.ER_CLONE_CONFIG = 3868;\nexports.ER_CLONE_SYS_CONFIG = 3869;\nexports.ER_CLONE_PLUGIN_MATCH = 3870;\nexports.ER_CLONE_LOOPBACK = 3871;\nexports.ER_CLONE_ENCRYPTION = 3872;\nexports.ER_CLONE_DISK_SPACE = 3873;\nexports.ER_CLONE_IN_PROGRESS = 3874;\nexports.ER_CLONE_DISALLOWED = 3875;\nexports.ER_CANNOT_GRANT_ROLES_TO_ANONYMOUS_USER = 3876;\nexports.ER_SECONDARY_ENGINE_PLUGIN = 3877;\nexports.ER_SECOND_PASSWORD_CANNOT_BE_EMPTY = 3878;\nexports.ER_DB_ACCESS_DENIED = 3879;\nexports.ER_DA_AUTH_ID_WITH_SYSTEM_USER_PRIV_IN_MANDATORY_ROLES = 3880;\nexports.ER_DA_RPL_GTID_TABLE_CANNOT_OPEN = 3881;\nexports.ER_GEOMETRY_IN_UNKNOWN_LENGTH_UNIT = 3882;\nexports.ER_DA_PLUGIN_INSTALL_ERROR = 3883;\nexports.ER_NO_SESSION_TEMP = 3884;\nexports.ER_DA_UNKNOWN_ERROR_NUMBER = 3885;\nexports.ER_COLUMN_CHANGE_SIZE = 3886;\nexports.ER_REGEXP_INVALID_CAPTURE_GROUP_NAME = 3887;\nexports.ER_DA_SSL_LIBRARY_ERROR = 3888;\nexports.ER_SECONDARY_ENGINE = 3889;\nexports.ER_SECONDARY_ENGINE_DDL = 3890;\nexports.ER_INCORRECT_CURRENT_PASSWORD = 3891;\nexports.ER_MISSING_CURRENT_PASSWORD = 3892;\nexports.ER_CURRENT_PASSWORD_NOT_REQUIRED = 3893;\nexports.ER_PASSWORD_CANNOT_BE_RETAINED_ON_PLUGIN_CHANGE = 3894;\nexports.ER_CURRENT_PASSWORD_CANNOT_BE_RETAINED = 3895;\nexports.ER_PARTIAL_REVOKES_EXIST = 3896;\nexports.ER_CANNOT_GRANT_SYSTEM_PRIV_TO_MANDATORY_ROLE = 3897;\nexports.ER_XA_REPLICATION_FILTERS = 3898;\nexports.ER_UNSUPPORTED_SQL_MODE = 3899;\nexports.ER_REGEXP_INVALID_FLAG = 3900;\nexports.ER_PARTIAL_REVOKE_AND_DB_GRANT_BOTH_EXISTS = 3901;\nexports.ER_UNIT_NOT_FOUND = 3902;\nexports.ER_INVALID_JSON_VALUE_FOR_FUNC_INDEX = 3903;\nexports.ER_JSON_VALUE_OUT_OF_RANGE_FOR_FUNC_INDEX = 3904;\nexports.ER_EXCEEDED_MV_KEYS_NUM = 3905;\nexports.ER_EXCEEDED_MV_KEYS_SPACE = 3906;\nexports.ER_FUNCTIONAL_INDEX_DATA_IS_TOO_LONG = 3907;\nexports.ER_WRONG_MVI_VALUE = 3908;\nexports.ER_WARN_FUNC_INDEX_NOT_APPLICABLE = 3909;\nexports.ER_GRP_RPL_UDF_ERROR = 3910;\nexports.ER_UPDATE_GTID_PURGED_WITH_GR = 3911;\nexports.ER_GROUPING_ON_TIMESTAMP_IN_DST = 3912;\nexports.ER_TABLE_NAME_CAUSES_TOO_LONG_PATH = 3913;\nexports.ER_AUDIT_LOG_INSUFFICIENT_PRIVILEGE = 3914;\nexports.ER_AUDIT_LOG_PASSWORD_HAS_BEEN_COPIED = 3915;\nexports.ER_DA_GRP_RPL_STARTED_AUTO_REJOIN = 3916;\nexports.ER_SYSVAR_CHANGE_DURING_QUERY = 3917;\nexports.ER_GLOBSTAT_CHANGE_DURING_QUERY = 3918;\nexports.ER_GRP_RPL_MESSAGE_SERVICE_INIT_FAILURE = 3919;\nexports.ER_CHANGE_SOURCE_WRONG_COMPRESSION_ALGORITHM_CLIENT = 3920;\nexports.ER_CHANGE_SOURCE_WRONG_COMPRESSION_LEVEL_CLIENT = 3921;\nexports.ER_WRONG_COMPRESSION_ALGORITHM_CLIENT = 3922;\nexports.ER_WRONG_COMPRESSION_LEVEL_CLIENT = 3923;\nexports.ER_CHANGE_SOURCE_WRONG_COMPRESSION_ALGORITHM_LIST_CLIENT = 3924;\nexports.ER_CLIENT_PRIVILEGE_CHECKS_USER_CANNOT_BE_ANONYMOUS = 3925;\nexports.ER_CLIENT_PRIVILEGE_CHECKS_USER_DOES_NOT_EXIST = 3926;\nexports.ER_CLIENT_PRIVILEGE_CHECKS_USER_CORRUPT = 3927;\nexports.ER_CLIENT_PRIVILEGE_CHECKS_USER_NEEDS_RPL_APPLIER_PRIV = 3928;\nexports.ER_WARN_DA_PRIVILEGE_NOT_REGISTERED = 3929;\nexports.ER_CLIENT_KEYRING_UDF_KEY_INVALID = 3930;\nexports.ER_CLIENT_KEYRING_UDF_KEY_TYPE_INVALID = 3931;\nexports.ER_CLIENT_KEYRING_UDF_KEY_TOO_LONG = 3932;\nexports.ER_CLIENT_KEYRING_UDF_KEY_TYPE_TOO_LONG = 3933;\nexports.ER_JSON_SCHEMA_VALIDATION_ERROR_WITH_DETAILED_REPORT = 3934;\nexports.ER_DA_UDF_INVALID_CHARSET_SPECIFIED = 3935;\nexports.ER_DA_UDF_INVALID_CHARSET = 3936;\nexports.ER_DA_UDF_INVALID_COLLATION = 3937;\nexports.ER_DA_UDF_INVALID_EXTENSION_ARGUMENT_TYPE = 3938;\nexports.ER_MULTIPLE_CONSTRAINTS_WITH_SAME_NAME = 3939;\nexports.ER_CONSTRAINT_NOT_FOUND = 3940;\nexports.ER_ALTER_CONSTRAINT_ENFORCEMENT_NOT_SUPPORTED = 3941;\nexports.ER_TABLE_VALUE_CONSTRUCTOR_MUST_HAVE_COLUMNS = 3942;\nexports.ER_TABLE_VALUE_CONSTRUCTOR_CANNOT_HAVE_DEFAULT = 3943;\nexports.ER_CLIENT_QUERY_FAILURE_INVALID_NON_ROW_FORMAT = 3944;\nexports.ER_REQUIRE_ROW_FORMAT_INVALID_VALUE = 3945;\nexports.ER_FAILED_TO_DETERMINE_IF_ROLE_IS_MANDATORY = 3946;\nexports.ER_FAILED_TO_FETCH_MANDATORY_ROLE_LIST = 3947;\nexports.ER_CLIENT_LOCAL_FILES_DISABLED = 3948;\nexports.ER_IMP_INCOMPATIBLE_CFG_VERSION = 3949;\nexports.ER_DA_OOM = 3950;\nexports.ER_DA_UDF_INVALID_ARGUMENT_TO_SET_CHARSET = 3951;\nexports.ER_DA_UDF_INVALID_RETURN_TYPE_TO_SET_CHARSET = 3952;\nexports.ER_MULTIPLE_INTO_CLAUSES = 3953;\nexports.ER_MISPLACED_INTO = 3954;\nexports.ER_USER_ACCESS_DENIED_FOR_USER_ACCOUNT_BLOCKED_BY_PASSWORD_LOCK = 3955;\nexports.ER_WARN_DEPRECATED_YEAR_UNSIGNED = 3956;\nexports.ER_CLONE_NETWORK_PACKET = 3957;\nexports.ER_SDI_OPERATION_FAILED_MISSING_RECORD = 3958;\nexports.ER_DEPENDENT_BY_CHECK_CONSTRAINT = 3959;\nexports.ER_GRP_OPERATION_NOT_ALLOWED_GR_MUST_STOP = 3960;\nexports.ER_WARN_DEPRECATED_JSON_TABLE_ON_ERROR_ON_EMPTY = 3961;\nexports.ER_WARN_DEPRECATED_INNER_INTO = 3962;\nexports.ER_WARN_DEPRECATED_VALUES_FUNCTION_ALWAYS_NULL = 3963;\nexports.ER_WARN_DEPRECATED_SQL_CALC_FOUND_ROWS = 3964;\nexports.ER_WARN_DEPRECATED_FOUND_ROWS = 3965;\nexports.ER_MISSING_JSON_VALUE = 3966;\nexports.ER_MULTIPLE_JSON_VALUES = 3967;\nexports.ER_HOSTNAME_TOO_LONG = 3968;\nexports.ER_WARN_CLIENT_DEPRECATED_PARTITION_PREFIX_KEY = 3969;\nexports.ER_GROUP_REPLICATION_USER_EMPTY_MSG = 3970;\nexports.ER_GROUP_REPLICATION_USER_MANDATORY_MSG = 3971;\nexports.ER_GROUP_REPLICATION_PASSWORD_LENGTH = 3972;\nexports.ER_SUBQUERY_TRANSFORM_REJECTED = 3973;\nexports.ER_DA_GRP_RPL_RECOVERY_ENDPOINT_FORMAT = 3974;\nexports.ER_DA_GRP_RPL_RECOVERY_ENDPOINT_INVALID = 3975;\nexports.ER_WRONG_VALUE_FOR_VAR_PLUS_ACTIONABLE_PART = 3976;\nexports.ER_STATEMENT_NOT_ALLOWED_AFTER_START_TRANSACTION = 3977;\nexports.ER_FOREIGN_KEY_WITH_ATOMIC_CREATE_SELECT = 3978;\nexports.ER_NOT_ALLOWED_WITH_START_TRANSACTION = 3979;\nexports.ER_INVALID_JSON_ATTRIBUTE = 3980;\nexports.ER_ENGINE_ATTRIBUTE_NOT_SUPPORTED = 3981;\nexports.ER_INVALID_USER_ATTRIBUTE_JSON = 3982;\nexports.ER_INNODB_REDO_DISABLED = 3983;\nexports.ER_INNODB_REDO_ARCHIVING_ENABLED = 3984;\nexports.ER_MDL_OUT_OF_RESOURCES = 3985;\nexports.ER_IMPLICIT_COMPARISON_FOR_JSON = 3986;\nexports.ER_FUNCTION_DOES_NOT_SUPPORT_CHARACTER_SET = 3987;\nexports.ER_IMPOSSIBLE_STRING_CONVERSION = 3988;\nexports.ER_SCHEMA_READ_ONLY = 3989;\nexports.ER_RPL_ASYNC_RECONNECT_GTID_MODE_OFF = 3990;\nexports.ER_RPL_ASYNC_RECONNECT_AUTO_POSITION_OFF = 3991;\nexports.ER_DISABLE_GTID_MODE_REQUIRES_ASYNC_RECONNECT_OFF = 3992;\nexports.ER_DISABLE_AUTO_POSITION_REQUIRES_ASYNC_RECONNECT_OFF = 3993;\nexports.ER_INVALID_PARAMETER_USE = 3994;\nexports.ER_CHARACTER_SET_MISMATCH = 3995;\nexports.ER_WARN_VAR_VALUE_CHANGE_NOT_SUPPORTED = 3996;\nexports.ER_INVALID_TIME_ZONE_INTERVAL = 3997;\nexports.ER_INVALID_CAST = 3998;\nexports.ER_HYPERGRAPH_NOT_SUPPORTED_YET = 3999;\nexports.ER_WARN_HYPERGRAPH_EXPERIMENTAL = 4000;\nexports.ER_DA_NO_ERROR_LOG_PARSER_CONFIGURED = 4001;\nexports.ER_DA_ERROR_LOG_TABLE_DISABLED = 4002;\nexports.ER_DA_ERROR_LOG_MULTIPLE_FILTERS = 4003;\nexports.ER_DA_CANT_OPEN_ERROR_LOG = 4004;\nexports.ER_USER_REFERENCED_AS_DEFINER = 4005;\nexports.ER_CANNOT_USER_REFERENCED_AS_DEFINER = 4006;\nexports.ER_REGEX_NUMBER_TOO_BIG = 4007;\nexports.ER_SPVAR_NONINTEGER_TYPE = 4008;\nexports.WARN_UNSUPPORTED_ACL_TABLES_READ = 4009;\nexports.ER_BINLOG_UNSAFE_ACL_TABLE_READ_IN_DML_DDL = 4010;\nexports.ER_STOP_REPLICA_MONITOR_IO_THREAD_TIMEOUT = 4011;\nexports.ER_STARTING_REPLICA_MONITOR_IO_THREAD = 4012;\nexports.ER_CANT_USE_ANONYMOUS_TO_GTID_WITH_GTID_MODE_NOT_ON = 4013;\nexports.ER_CANT_COMBINE_ANONYMOUS_TO_GTID_AND_AUTOPOSITION = 4014;\nexports.ER_ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS_REQUIRES_GTID_MODE_ON = 4015;\nexports.ER_SQL_REPLICA_SKIP_COUNTER_USED_WITH_GTID_MODE_ON = 4016;\nexports.ER_USING_ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS_AS_LOCAL_OR_UUID = 4017;\nexports.ER_CANT_SET_ANONYMOUS_TO_GTID_AND_WAIT_UNTIL_SQL_THD_AFTER_GTIDS = 4018;\nexports.ER_CANT_SET_SQL_AFTER_OR_BEFORE_GTIDS_WITH_ANONYMOUS_TO_GTID = 4019;\nexports.ER_ANONYMOUS_TO_GTID_UUID_SAME_AS_GROUP_NAME = 4020;\nexports.ER_CANT_USE_SAME_UUID_AS_GROUP_NAME = 4021;\nexports.ER_GRP_RPL_RECOVERY_CHANNEL_STILL_RUNNING = 4022;\nexports.ER_INNODB_INVALID_AUTOEXTEND_SIZE_VALUE = 4023;\nexports.ER_INNODB_INCOMPATIBLE_WITH_TABLESPACE = 4024;\nexports.ER_INNODB_AUTOEXTEND_SIZE_OUT_OF_RANGE = 4025;\nexports.ER_CANNOT_USE_AUTOEXTEND_SIZE_CLAUSE = 4026;\nexports.ER_ROLE_GRANTED_TO_ITSELF = 4027;\nexports.ER_TABLE_MUST_HAVE_A_VISIBLE_COLUMN = 4028;\nexports.ER_INNODB_COMPRESSION_FAILURE = 4029;\nexports.ER_WARN_ASYNC_CONN_FAILOVER_NETWORK_NAMESPACE = 4030;\nexports.ER_CLIENT_INTERACTION_TIMEOUT = 4031;\nexports.ER_INVALID_CAST_TO_GEOMETRY = 4032;\nexports.ER_INVALID_CAST_POLYGON_RING_DIRECTION = 4033;\nexports.ER_GIS_DIFFERENT_SRIDS_AGGREGATION = 4034;\nexports.ER_RELOAD_KEYRING_FAILURE = 4035;\nexports.ER_SDI_GET_KEYS_INVALID_TABLESPACE = 4036;\nexports.ER_CHANGE_RPL_SRC_WRONG_COMPRESSION_ALGORITHM_SIZE = 4037;\nexports.ER_WARN_DEPRECATED_TLS_VERSION_FOR_CHANNEL_CLI = 4038;\nexports.ER_CANT_USE_SAME_UUID_AS_VIEW_CHANGE_UUID = 4039;\nexports.ER_ANONYMOUS_TO_GTID_UUID_SAME_AS_VIEW_CHANGE_UUID = 4040;\nexports.ER_GRP_RPL_VIEW_CHANGE_UUID_FAIL_GET_VARIABLE = 4041;\nexports.ER_WARN_ADUIT_LOG_MAX_SIZE_AND_PRUNE_SECONDS = 4042;\nexports.ER_WARN_ADUIT_LOG_MAX_SIZE_CLOSE_TO_ROTATE_ON_SIZE = 4043;\nexports.ER_KERBEROS_CREATE_USER = 4044;\nexports.ER_INSTALL_PLUGIN_CONFLICT_CLIENT = 4045;\nexports.ER_DA_ERROR_LOG_COMPONENT_FLUSH_FAILED = 4046;\nexports.ER_WARN_SQL_AFTER_MTS_GAPS_GAP_NOT_CALCULATED = 4047;\nexports.ER_INVALID_ASSIGNMENT_TARGET = 4048;\nexports.ER_OPERATION_NOT_ALLOWED_ON_GR_SECONDARY = 4049;\nexports.ER_GRP_RPL_FAILOVER_CHANNEL_STATUS_PROPAGATION = 4050;\nexports.ER_WARN_AUDIT_LOG_FORMAT_UNIX_TIMESTAMP_ONLY_WHEN_JSON = 4051;\nexports.ER_INVALID_MFA_PLUGIN_SPECIFIED = 4052;\nexports.ER_IDENTIFIED_BY_UNSUPPORTED = 4053;\nexports.ER_INVALID_PLUGIN_FOR_REGISTRATION = 4054;\nexports.ER_PLUGIN_REQUIRES_REGISTRATION = 4055;\nexports.ER_MFA_METHOD_EXISTS = 4056;\nexports.ER_MFA_METHOD_NOT_EXISTS = 4057;\nexports.ER_AUTHENTICATION_POLICY_MISMATCH = 4058;\nexports.ER_PLUGIN_REGISTRATION_DONE = 4059;\nexports.ER_INVALID_USER_FOR_REGISTRATION = 4060;\nexports.ER_USER_REGISTRATION_FAILED = 4061;\nexports.ER_MFA_METHODS_INVALID_ORDER = 4062;\nexports.ER_MFA_METHODS_IDENTICAL = 4063;\nexports.ER_INVALID_MFA_OPERATIONS_FOR_PASSWORDLESS_USER = 4064;\nexports.ER_CHANGE_REPLICATION_SOURCE_NO_OPTIONS_FOR_GTID_ONLY = 4065;\nexports.ER_CHANGE_REP_SOURCE_CANT_DISABLE_REQ_ROW_FORMAT_WITH_GTID_ONLY = 4066;\nexports.ER_CHANGE_REP_SOURCE_CANT_DISABLE_AUTO_POSITION_WITH_GTID_ONLY = 4067;\nexports.ER_CHANGE_REP_SOURCE_CANT_DISABLE_GTID_ONLY_WITHOUT_POSITIONS = 4068;\nexports.ER_CHANGE_REP_SOURCE_CANT_DISABLE_AUTO_POS_WITHOUT_POSITIONS = 4069;\nexports.ER_CHANGE_REP_SOURCE_GR_CHANNEL_WITH_GTID_MODE_NOT_ON = 4070;\nexports.ER_CANT_USE_GTID_ONLY_WITH_GTID_MODE_NOT_ON = 4071;\nexports.ER_WARN_C_DISABLE_GTID_ONLY_WITH_SOURCE_AUTO_POS_INVALID_POS = 4072;\nexports.ER_DA_SSL_FIPS_MODE_ERROR = 4073;\nexports.ER_VALUE_OUT_OF_RANGE = 4074;\nexports.ER_FULLTEXT_WITH_ROLLUP = 4075;\nexports.ER_REGEXP_MISSING_RESOURCE = 4076;\nexports.ER_WARN_REGEXP_USING_DEFAULT = 4077;\nexports.ER_REGEXP_MISSING_FILE = 4078;\nexports.ER_WARN_DEPRECATED_COLLATION = 4079;\nexports.ER_CONCURRENT_PROCEDURE_USAGE = 4080;\nexports.ER_DA_GLOBAL_CONN_LIMIT = 4081;\nexports.ER_DA_CONN_LIMIT = 4082;\nexports.ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_COLUMN_TYPE_INSTANT = 4083;\nexports.ER_WARN_SF_UDF_NAME_COLLISION = 4084;\nexports.ER_CANNOT_PURGE_BINLOG_WITH_BACKUP_LOCK = 4085;\nexports.ER_TOO_MANY_WINDOWS = 4086;\nexports.ER_MYSQLBACKUP_CLIENT_MSG = 4087;\nexports.ER_COMMENT_CONTAINS_INVALID_STRING = 4088;\nexports.ER_DEFINITION_CONTAINS_INVALID_STRING = 4089;\nexports.ER_CANT_EXECUTE_COMMAND_WITH_ASSIGNED_GTID_NEXT = 4090;\nexports.ER_XA_TEMP_TABLE = 4091;\nexports.ER_INNODB_MAX_ROW_VERSION = 4092;\nexports.ER_INNODB_INSTANT_ADD_NOT_SUPPORTED_MAX_SIZE = 4093;\nexports.ER_OPERATION_NOT_ALLOWED_WHILE_PRIMARY_CHANGE_IS_RUNNING = 4094;\nexports.ER_WARN_DEPRECATED_DATETIME_DELIMITER = 4095;\nexports.ER_WARN_DEPRECATED_SUPERFLUOUS_DELIMITER = 4096;\nexports.ER_CANNOT_PERSIST_SENSITIVE_VARIABLES = 4097;\nexports.ER_WARN_CANNOT_SECURELY_PERSIST_SENSITIVE_VARIABLES = 4098;\nexports.ER_WARN_TRG_ALREADY_EXISTS = 4099;\nexports.ER_IF_NOT_EXISTS_UNSUPPORTED_TRG_EXISTS_ON_DIFFERENT_TABLE = 4100;\nexports.ER_IF_NOT_EXISTS_UNSUPPORTED_UDF_NATIVE_FCT_NAME_COLLISION = 4101;\nexports.ER_SET_PASSWORD_AUTH_PLUGIN_ERROR = 4102;\nexports.ER_REDUCED_DBLWR_FILE_CORRUPTED = 4103;\nexports.ER_REDUCED_DBLWR_PAGE_FOUND = 4104;\nexports.ER_SRS_INVALID_LATITUDE_OF_ORIGIN = 4105;\nexports.ER_SRS_INVALID_LONGITUDE_OF_ORIGIN = 4106;\nexports.ER_SRS_UNUSED_PROJ_PARAMETER_PRESENT = 4107;\nexports.ER_GIPK_COLUMN_EXISTS = 4108;\nexports.ER_GIPK_FAILED_AUTOINC_COLUMN_EXISTS = 4109;\nexports.ER_GIPK_COLUMN_ALTER_NOT_ALLOWED = 4110;\nexports.ER_DROP_PK_COLUMN_TO_DROP_GIPK = 4111;\nexports.ER_CREATE_SELECT_WITH_GIPK_DISALLOWED_IN_SBR = 4112;\nexports.ER_DA_EXPIRE_LOGS_DAYS_IGNORED = 4113;\nexports.ER_CTE_RECURSIVE_NOT_UNION = 4114;\nexports.ER_COMMAND_BACKEND_FAILED_TO_FETCH_SECURITY_CTX = 4115;\nexports.ER_COMMAND_SERVICE_BACKEND_FAILED = 4116;\nexports.ER_CLIENT_FILE_PRIVILEGE_FOR_REPLICATION_CHECKS = 4117;\nexports.ER_GROUP_REPLICATION_FORCE_MEMBERS_COMMAND_FAILURE = 4118;\nexports.ER_WARN_DEPRECATED_IDENT = 4119;\nexports.ER_INTERSECT_ALL_MAX_DUPLICATES_EXCEEDED = 4120;\nexports.ER_TP_QUERY_THRS_PER_GRP_EXCEEDS_TXN_THR_LIMIT = 4121;\nexports.ER_BAD_TIMESTAMP_FORMAT = 4122;\nexports.ER_SHAPE_PRIDICTION_UDF = 4123;\nexports.ER_SRS_INVALID_HEIGHT = 4124;\nexports.ER_SRS_INVALID_SCALING = 4125;\nexports.ER_SRS_INVALID_ZONE_WIDTH = 4126;\nexports.ER_SRS_INVALID_LATITUDE_POLAR_STERE_VAR_A = 4127;\nexports.ER_WARN_DEPRECATED_CLIENT_NO_SCHEMA_OPTION = 4128;\nexports.ER_TABLE_NOT_EMPTY = 4129;\nexports.ER_TABLE_NO_PRIMARY_KEY = 4130;\nexports.ER_TABLE_IN_SHARED_TABLESPACE = 4131;\nexports.ER_INDEX_OTHER_THAN_PK = 4132;\nexports.ER_LOAD_BULK_DATA_UNSORTED = 4133;\nexports.ER_BULK_EXECUTOR_ERROR = 4134;\nexports.ER_BULK_READER_LIBCURL_INIT_FAILED = 4135;\nexports.ER_BULK_READER_LIBCURL_ERROR = 4136;\nexports.ER_BULK_READER_SERVER_ERROR = 4137;\nexports.ER_BULK_READER_COMMUNICATION_ERROR = 4138;\nexports.ER_BULK_LOAD_DATA_FAILED = 4139;\nexports.ER_BULK_LOADER_COLUMN_TOO_BIG_FOR_LEFTOVER_BUFFER = 4140;\nexports.ER_BULK_LOADER_COMPONENT_ERROR = 4141;\nexports.ER_BULK_LOADER_FILE_CONTAINS_LESS_LINES_THAN_IGNORE_CLAUSE = 4142;\nexports.ER_BULK_PARSER_MISSING_ENCLOSED_BY = 4143;\nexports.ER_BULK_PARSER_ROW_BUFFER_MAX_TOTAL_COLS_EXCEEDED = 4144;\nexports.ER_BULK_PARSER_COPY_BUFFER_SIZE_EXCEEDED = 4145;\nexports.ER_BULK_PARSER_UNEXPECTED_END_OF_INPUT = 4146;\nexports.ER_BULK_PARSER_UNEXPECTED_ROW_TERMINATOR = 4147;\nexports.ER_BULK_PARSER_UNEXPECTED_CHAR_AFTER_ENDING_ENCLOSED_BY = 4148;\nexports.ER_BULK_PARSER_UNEXPECTED_CHAR_AFTER_NULL_ESCAPE = 4149;\nexports.ER_BULK_PARSER_UNEXPECTED_CHAR_AFTER_COLUMN_TERMINATOR = 4150;\nexports.ER_BULK_PARSER_INCOMPLETE_ESCAPE_SEQUENCE = 4151;\nexports.ER_LOAD_BULK_DATA_FAILED = 4152;\nexports.ER_LOAD_BULK_DATA_WRONG_VALUE_FOR_FIELD = 4153;\nexports.ER_LOAD_BULK_DATA_WARN_NULL_TO_NOTNULL = 4154;\nexports.ER_REQUIRE_TABLE_PRIMARY_KEY_CHECK_GENERATE_WITH_GR = 4155;\nexports.ER_CANT_CHANGE_SYS_VAR_IN_READ_ONLY_MODE = 4156;\nexports.ER_INNODB_INSTANT_ADD_DROP_NOT_SUPPORTED_MAX_SIZE = 4157;\nexports.ER_INNODB_INSTANT_ADD_NOT_SUPPORTED_MAX_FIELDS = 4158;\nexports.ER_CANT_SET_PERSISTED = 4159;\nexports.ER_INSTALL_COMPONENT_SET_NULL_VALUE = 4160;\nexports.ER_INSTALL_COMPONENT_SET_UNUSED_VALUE = 4161;\nexports.ER_WARN_DEPRECATED_USER_DEFINED_COLLATIONS = 4162;\n\n// Lookup-by-number table\nexports[1] = 'EE_CANTCREATEFILE';\nexports[2] = 'EE_READ';\nexports[3] = 'EE_WRITE';\nexports[4] = 'EE_BADCLOSE';\nexports[5] = 'EE_OUTOFMEMORY';\nexports[6] = 'EE_DELETE';\nexports[7] = 'EE_LINK';\nexports[9] = 'EE_EOFERR';\nexports[10] = 'EE_CANTLOCK';\nexports[11] = 'EE_CANTUNLOCK';\nexports[12] = 'EE_DIR';\nexports[13] = 'EE_STAT';\nexports[14] = 'EE_CANT_CHSIZE';\nexports[15] = 'EE_CANT_OPEN_STREAM';\nexports[16] = 'EE_GETWD';\nexports[17] = 'EE_SETWD';\nexports[18] = 'EE_LINK_WARNING';\nexports[19] = 'EE_OPEN_WARNING';\nexports[20] = 'EE_DISK_FULL';\nexports[21] = 'EE_CANT_MKDIR';\nexports[22] = 'EE_UNKNOWN_CHARSET';\nexports[23] = 'EE_OUT_OF_FILERESOURCES';\nexports[24] = 'EE_CANT_READLINK';\nexports[25] = 'EE_CANT_SYMLINK';\nexports[26] = 'EE_REALPATH';\nexports[27] = 'EE_SYNC';\nexports[28] = 'EE_UNKNOWN_COLLATION';\nexports[29] = 'EE_FILENOTFOUND';\nexports[30] = 'EE_FILE_NOT_CLOSED';\nexports[31] = 'EE_CHANGE_OWNERSHIP';\nexports[32] = 'EE_CHANGE_PERMISSIONS';\nexports[33] = 'EE_CANT_SEEK';\nexports[34] = 'EE_CAPACITY_EXCEEDED';\nexports[35] = 'EE_DISK_FULL_WITH_RETRY_MSG';\nexports[36] = 'EE_FAILED_TO_CREATE_TIMER';\nexports[37] = 'EE_FAILED_TO_DELETE_TIMER';\nexports[38] = 'EE_FAILED_TO_CREATE_TIMER_QUEUE';\nexports[39] = 'EE_FAILED_TO_START_TIMER_NOTIFY_THREAD';\nexports[40] = 'EE_FAILED_TO_CREATE_TIMER_NOTIFY_THREAD_INTERRUPT_EVENT';\nexports[41] = 'EE_EXITING_TIMER_NOTIFY_THREAD';\nexports[42] = 'EE_WIN_LIBRARY_LOAD_FAILED';\nexports[43] = 'EE_WIN_RUN_TIME_ERROR_CHECK';\nexports[44] = 'EE_FAILED_TO_DETERMINE_LARGE_PAGE_SIZE';\nexports[45] = 'EE_FAILED_TO_KILL_ALL_THREADS';\nexports[46] = 'EE_FAILED_TO_CREATE_IO_COMPLETION_PORT';\nexports[47] = 'EE_FAILED_TO_OPEN_DEFAULTS_FILE';\nexports[48] = 'EE_FAILED_TO_HANDLE_DEFAULTS_FILE';\nexports[49] = 'EE_WRONG_DIRECTIVE_IN_CONFIG_FILE';\nexports[50] = 'EE_SKIPPING_DIRECTIVE_DUE_TO_MAX_INCLUDE_RECURSION';\nexports[51] = 'EE_INCORRECT_GRP_DEFINITION_IN_CONFIG_FILE';\nexports[52] = 'EE_OPTION_WITHOUT_GRP_IN_CONFIG_FILE';\nexports[53] = 'EE_CONFIG_FILE_PERMISSION_ERROR';\nexports[54] = 'EE_IGNORE_WORLD_WRITABLE_CONFIG_FILE';\nexports[55] = 'EE_USING_DISABLED_OPTION';\nexports[56] = 'EE_USING_DISABLED_SHORT_OPTION';\nexports[57] = 'EE_USING_PASSWORD_ON_CLI_IS_INSECURE';\nexports[58] = 'EE_UNKNOWN_SUFFIX_FOR_VARIABLE';\nexports[59] = 'EE_SSL_ERROR_FROM_FILE';\nexports[60] = 'EE_SSL_ERROR';\nexports[61] = 'EE_NET_SEND_ERROR_IN_BOOTSTRAP';\nexports[62] = 'EE_PACKETS_OUT_OF_ORDER';\nexports[63] = 'EE_UNKNOWN_PROTOCOL_OPTION';\nexports[64] = 'EE_FAILED_TO_LOCATE_SERVER_PUBLIC_KEY';\nexports[65] = 'EE_PUBLIC_KEY_NOT_IN_PEM_FORMAT';\nexports[66] = 'EE_DEBUG_INFO';\nexports[67] = 'EE_UNKNOWN_VARIABLE';\nexports[68] = 'EE_UNKNOWN_OPTION';\nexports[69] = 'EE_UNKNOWN_SHORT_OPTION';\nexports[70] = 'EE_OPTION_WITHOUT_ARGUMENT';\nexports[71] = 'EE_OPTION_REQUIRES_ARGUMENT';\nexports[72] = 'EE_SHORT_OPTION_REQUIRES_ARGUMENT';\nexports[73] = 'EE_OPTION_IGNORED_DUE_TO_INVALID_VALUE';\nexports[74] = 'EE_OPTION_WITH_EMPTY_VALUE';\nexports[75] = 'EE_FAILED_TO_ASSIGN_MAX_VALUE_TO_OPTION';\nexports[76] = 'EE_INCORRECT_BOOLEAN_VALUE_FOR_OPTION';\nexports[77] = 'EE_FAILED_TO_SET_OPTION_VALUE';\nexports[78] = 'EE_INCORRECT_INT_VALUE_FOR_OPTION';\nexports[79] = 'EE_INCORRECT_UINT_VALUE_FOR_OPTION';\nexports[80] = 'EE_ADJUSTED_SIGNED_VALUE_FOR_OPTION';\nexports[81] = 'EE_ADJUSTED_UNSIGNED_VALUE_FOR_OPTION';\nexports[82] = 'EE_ADJUSTED_ULONGLONG_VALUE_FOR_OPTION';\nexports[83] = 'EE_ADJUSTED_DOUBLE_VALUE_FOR_OPTION';\nexports[84] = 'EE_INVALID_DECIMAL_VALUE_FOR_OPTION';\nexports[85] = 'EE_COLLATION_PARSER_ERROR';\nexports[86] = 'EE_FAILED_TO_RESET_BEFORE_PRIMARY_IGNORABLE_CHAR';\nexports[87] = 'EE_FAILED_TO_RESET_BEFORE_TERTIARY_IGNORABLE_CHAR';\nexports[88] = 'EE_SHIFT_CHAR_OUT_OF_RANGE';\nexports[89] = 'EE_RESET_CHAR_OUT_OF_RANGE';\nexports[90] = 'EE_UNKNOWN_LDML_TAG';\nexports[91] = 'EE_FAILED_TO_RESET_BEFORE_SECONDARY_IGNORABLE_CHAR';\nexports[92] = 'EE_FAILED_PROCESSING_DIRECTIVE';\nexports[93] = 'EE_PTHREAD_KILL_FAILED';\nexports[120] = 'HA_ERR_KEY_NOT_FOUND';\nexports[121] = 'HA_ERR_FOUND_DUPP_KEY';\nexports[122] = 'HA_ERR_INTERNAL_ERROR';\nexports[123] = 'HA_ERR_RECORD_CHANGED';\nexports[124] = 'HA_ERR_WRONG_INDEX';\nexports[125] = 'HA_ERR_ROLLED_BACK';\nexports[126] = 'HA_ERR_CRASHED';\nexports[127] = 'HA_ERR_WRONG_IN_RECORD';\nexports[128] = 'HA_ERR_OUT_OF_MEM';\nexports[130] = 'HA_ERR_NOT_A_TABLE';\nexports[131] = 'HA_ERR_WRONG_COMMAND';\nexports[132] = 'HA_ERR_OLD_FILE';\nexports[133] = 'HA_ERR_NO_ACTIVE_RECORD';\nexports[134] = 'HA_ERR_RECORD_DELETED';\nexports[135] = 'HA_ERR_RECORD_FILE_FULL';\nexports[136] = 'HA_ERR_INDEX_FILE_FULL';\nexports[137] = 'HA_ERR_END_OF_FILE';\nexports[138] = 'HA_ERR_UNSUPPORTED';\nexports[139] = 'HA_ERR_TOO_BIG_ROW';\nexports[140] = 'HA_WRONG_CREATE_OPTION';\nexports[141] = 'HA_ERR_FOUND_DUPP_UNIQUE';\nexports[142] = 'HA_ERR_UNKNOWN_CHARSET';\nexports[143] = 'HA_ERR_WRONG_MRG_TABLE_DEF';\nexports[144] = 'HA_ERR_CRASHED_ON_REPAIR';\nexports[145] = 'HA_ERR_CRASHED_ON_USAGE';\nexports[146] = 'HA_ERR_LOCK_WAIT_TIMEOUT';\nexports[147] = 'HA_ERR_LOCK_TABLE_FULL';\nexports[148] = 'HA_ERR_READ_ONLY_TRANSACTION';\nexports[149] = 'HA_ERR_LOCK_DEADLOCK';\nexports[150] = 'HA_ERR_CANNOT_ADD_FOREIGN';\nexports[151] = 'HA_ERR_NO_REFERENCED_ROW';\nexports[152] = 'HA_ERR_ROW_IS_REFERENCED';\nexports[153] = 'HA_ERR_NO_SAVEPOINT';\nexports[154] = 'HA_ERR_NON_UNIQUE_BLOCK_SIZE';\nexports[155] = 'HA_ERR_NO_SUCH_TABLE';\nexports[156] = 'HA_ERR_TABLE_EXIST';\nexports[157] = 'HA_ERR_NO_CONNECTION';\nexports[158] = 'HA_ERR_NULL_IN_SPATIAL';\nexports[159] = 'HA_ERR_TABLE_DEF_CHANGED';\nexports[160] = 'HA_ERR_NO_PARTITION_FOUND';\nexports[161] = 'HA_ERR_RBR_LOGGING_FAILED';\nexports[162] = 'HA_ERR_DROP_INDEX_FK';\nexports[163] = 'HA_ERR_FOREIGN_DUPLICATE_KEY';\nexports[164] = 'HA_ERR_TABLE_NEEDS_UPGRADE';\nexports[165] = 'HA_ERR_TABLE_READONLY';\nexports[166] = 'HA_ERR_AUTOINC_READ_FAILED';\nexports[167] = 'HA_ERR_AUTOINC_ERANGE';\nexports[168] = 'HA_ERR_GENERIC';\nexports[169] = 'HA_ERR_RECORD_IS_THE_SAME';\nexports[170] = 'HA_ERR_LOGGING_IMPOSSIBLE';\nexports[171] = 'HA_ERR_CORRUPT_EVENT';\nexports[172] = 'HA_ERR_NEW_FILE';\nexports[173] = 'HA_ERR_ROWS_EVENT_APPLY';\nexports[174] = 'HA_ERR_INITIALIZATION';\nexports[175] = 'HA_ERR_FILE_TOO_SHORT';\nexports[176] = 'HA_ERR_WRONG_CRC';\nexports[177] = 'HA_ERR_TOO_MANY_CONCURRENT_TRXS';\nexports[178] = 'HA_ERR_NOT_IN_LOCK_PARTITIONS';\nexports[179] = 'HA_ERR_INDEX_COL_TOO_LONG';\nexports[180] = 'HA_ERR_INDEX_CORRUPT';\nexports[181] = 'HA_ERR_UNDO_REC_TOO_BIG';\nexports[182] = 'HA_FTS_INVALID_DOCID';\nexports[183] = 'HA_ERR_TABLE_IN_FK_CHECK';\nexports[184] = 'HA_ERR_TABLESPACE_EXISTS';\nexports[185] = 'HA_ERR_TOO_MANY_FIELDS';\nexports[186] = 'HA_ERR_ROW_IN_WRONG_PARTITION';\nexports[187] = 'HA_ERR_INNODB_READ_ONLY';\nexports[188] = 'HA_ERR_FTS_EXCEED_RESULT_CACHE_LIMIT';\nexports[189] = 'HA_ERR_TEMP_FILE_WRITE_FAILURE';\nexports[190] = 'HA_ERR_INNODB_FORCED_RECOVERY';\nexports[191] = 'HA_ERR_FTS_TOO_MANY_WORDS_IN_PHRASE';\nexports[192] = 'HA_ERR_FK_DEPTH_EXCEEDED';\nexports[193] = 'HA_MISSING_CREATE_OPTION';\nexports[194] = 'HA_ERR_SE_OUT_OF_MEMORY';\nexports[195] = 'HA_ERR_TABLE_CORRUPT';\nexports[196] = 'HA_ERR_QUERY_INTERRUPTED';\nexports[197] = 'HA_ERR_TABLESPACE_MISSING';\nexports[198] = 'HA_ERR_TABLESPACE_IS_NOT_EMPTY';\nexports[199] = 'HA_ERR_WRONG_FILE_NAME';\nexports[200] = 'HA_ERR_NOT_ALLOWED_COMMAND';\nexports[201] = 'HA_ERR_COMPUTE_FAILED';\nexports[202] = 'HA_ERR_ROW_FORMAT_CHANGED';\nexports[203] = 'HA_ERR_NO_WAIT_LOCK';\nexports[204] = 'HA_ERR_DISK_FULL_NOWAIT';\nexports[205] = 'HA_ERR_NO_SESSION_TEMP';\nexports[206] = 'HA_ERR_WRONG_TABLE_NAME';\nexports[207] = 'HA_ERR_TOO_LONG_PATH';\nexports[208] = 'HA_ERR_SAMPLING_INIT_FAILED';\nexports[209] = 'HA_ERR_FTS_TOO_MANY_NESTED_EXP';\nexports[1000] = 'ER_HASHCHK';\nexports[1001] = 'ER_NISAMCHK';\nexports[1002] = 'ER_NO';\nexports[1003] = 'ER_YES';\nexports[1004] = 'ER_CANT_CREATE_FILE';\nexports[1005] = 'ER_CANT_CREATE_TABLE';\nexports[1006] = 'ER_CANT_CREATE_DB';\nexports[1007] = 'ER_DB_CREATE_EXISTS';\nexports[1008] = 'ER_DB_DROP_EXISTS';\nexports[1009] = 'ER_DB_DROP_DELETE';\nexports[1010] = 'ER_DB_DROP_RMDIR';\nexports[1011] = 'ER_CANT_DELETE_FILE';\nexports[1012] = 'ER_CANT_FIND_SYSTEM_REC';\nexports[1013] = 'ER_CANT_GET_STAT';\nexports[1014] = 'ER_CANT_GET_WD';\nexports[1015] = 'ER_CANT_LOCK';\nexports[1016] = 'ER_CANT_OPEN_FILE';\nexports[1017] = 'ER_FILE_NOT_FOUND';\nexports[1018] = 'ER_CANT_READ_DIR';\nexports[1019] = 'ER_CANT_SET_WD';\nexports[1020] = 'ER_CHECKREAD';\nexports[1021] = 'ER_DISK_FULL';\nexports[1022] = 'ER_DUP_KEY';\nexports[1023] = 'ER_ERROR_ON_CLOSE';\nexports[1024] = 'ER_ERROR_ON_READ';\nexports[1025] = 'ER_ERROR_ON_RENAME';\nexports[1026] = 'ER_ERROR_ON_WRITE';\nexports[1027] = 'ER_FILE_USED';\nexports[1028] = 'ER_FILSORT_ABORT';\nexports[1029] = 'ER_FORM_NOT_FOUND';\nexports[1030] = 'ER_GET_ERRNO';\nexports[1031] = 'ER_ILLEGAL_HA';\nexports[1032] = 'ER_KEY_NOT_FOUND';\nexports[1033] = 'ER_NOT_FORM_FILE';\nexports[1034] = 'ER_NOT_KEYFILE';\nexports[1035] = 'ER_OLD_KEYFILE';\nexports[1036] = 'ER_OPEN_AS_READONLY';\nexports[1037] = 'ER_OUTOFMEMORY';\nexports[1038] = 'ER_OUT_OF_SORTMEMORY';\nexports[1039] = 'ER_UNEXPECTED_EOF';\nexports[1040] = 'ER_CON_COUNT_ERROR';\nexports[1041] = 'ER_OUT_OF_RESOURCES';\nexports[1042] = 'ER_BAD_HOST_ERROR';\nexports[1043] = 'ER_HANDSHAKE_ERROR';\nexports[1044] = 'ER_DBACCESS_DENIED_ERROR';\nexports[1045] = 'ER_ACCESS_DENIED_ERROR';\nexports[1046] = 'ER_NO_DB_ERROR';\nexports[1047] = 'ER_UNKNOWN_COM_ERROR';\nexports[1048] = 'ER_BAD_NULL_ERROR';\nexports[1049] = 'ER_BAD_DB_ERROR';\nexports[1050] = 'ER_TABLE_EXISTS_ERROR';\nexports[1051] = 'ER_BAD_TABLE_ERROR';\nexports[1052] = 'ER_NON_UNIQ_ERROR';\nexports[1053] = 'ER_SERVER_SHUTDOWN';\nexports[1054] = 'ER_BAD_FIELD_ERROR';\nexports[1055] = 'ER_WRONG_FIELD_WITH_GROUP';\nexports[1056] = 'ER_WRONG_GROUP_FIELD';\nexports[1057] = 'ER_WRONG_SUM_SELECT';\nexports[1058] = 'ER_WRONG_VALUE_COUNT';\nexports[1059] = 'ER_TOO_LONG_IDENT';\nexports[1060] = 'ER_DUP_FIELDNAME';\nexports[1061] = 'ER_DUP_KEYNAME';\nexports[1062] = 'ER_DUP_ENTRY';\nexports[1063] = 'ER_WRONG_FIELD_SPEC';\nexports[1064] = 'ER_PARSE_ERROR';\nexports[1065] = 'ER_EMPTY_QUERY';\nexports[1066] = 'ER_NONUNIQ_TABLE';\nexports[1067] = 'ER_INVALID_DEFAULT';\nexports[1068] = 'ER_MULTIPLE_PRI_KEY';\nexports[1069] = 'ER_TOO_MANY_KEYS';\nexports[1070] = 'ER_TOO_MANY_KEY_PARTS';\nexports[1071] = 'ER_TOO_LONG_KEY';\nexports[1072] = 'ER_KEY_COLUMN_DOES_NOT_EXITS';\nexports[1073] = 'ER_BLOB_USED_AS_KEY';\nexports[1074] = 'ER_TOO_BIG_FIELDLENGTH';\nexports[1075] = 'ER_WRONG_AUTO_KEY';\nexports[1076] = 'ER_READY';\nexports[1077] = 'ER_NORMAL_SHUTDOWN';\nexports[1078] = 'ER_GOT_SIGNAL';\nexports[1079] = 'ER_SHUTDOWN_COMPLETE';\nexports[1080] = 'ER_FORCING_CLOSE';\nexports[1081] = 'ER_IPSOCK_ERROR';\nexports[1082] = 'ER_NO_SUCH_INDEX';\nexports[1083] = 'ER_WRONG_FIELD_TERMINATORS';\nexports[1084] = 'ER_BLOBS_AND_NO_TERMINATED';\nexports[1085] = 'ER_TEXTFILE_NOT_READABLE';\nexports[1086] = 'ER_FILE_EXISTS_ERROR';\nexports[1087] = 'ER_LOAD_INFO';\nexports[1088] = 'ER_ALTER_INFO';\nexports[1089] = 'ER_WRONG_SUB_KEY';\nexports[1090] = 'ER_CANT_REMOVE_ALL_FIELDS';\nexports[1091] = 'ER_CANT_DROP_FIELD_OR_KEY';\nexports[1092] = 'ER_INSERT_INFO';\nexports[1093] = 'ER_UPDATE_TABLE_USED';\nexports[1094] = 'ER_NO_SUCH_THREAD';\nexports[1095] = 'ER_KILL_DENIED_ERROR';\nexports[1096] = 'ER_NO_TABLES_USED';\nexports[1097] = 'ER_TOO_BIG_SET';\nexports[1098] = 'ER_NO_UNIQUE_LOGFILE';\nexports[1099] = 'ER_TABLE_NOT_LOCKED_FOR_WRITE';\nexports[1100] = 'ER_TABLE_NOT_LOCKED';\nexports[1101] = 'ER_BLOB_CANT_HAVE_DEFAULT';\nexports[1102] = 'ER_WRONG_DB_NAME';\nexports[1103] = 'ER_WRONG_TABLE_NAME';\nexports[1104] = 'ER_TOO_BIG_SELECT';\nexports[1105] = 'ER_UNKNOWN_ERROR';\nexports[1106] = 'ER_UNKNOWN_PROCEDURE';\nexports[1107] = 'ER_WRONG_PARAMCOUNT_TO_PROCEDURE';\nexports[1108] = 'ER_WRONG_PARAMETERS_TO_PROCEDURE';\nexports[1109] = 'ER_UNKNOWN_TABLE';\nexports[1110] = 'ER_FIELD_SPECIFIED_TWICE';\nexports[1111] = 'ER_INVALID_GROUP_FUNC_USE';\nexports[1112] = 'ER_UNSUPPORTED_EXTENSION';\nexports[1113] = 'ER_TABLE_MUST_HAVE_COLUMNS';\nexports[1114] = 'ER_RECORD_FILE_FULL';\nexports[1115] = 'ER_UNKNOWN_CHARACTER_SET';\nexports[1116] = 'ER_TOO_MANY_TABLES';\nexports[1117] = 'ER_TOO_MANY_FIELDS';\nexports[1118] = 'ER_TOO_BIG_ROWSIZE';\nexports[1119] = 'ER_STACK_OVERRUN';\nexports[1120] = 'ER_WRONG_OUTER_JOIN';\nexports[1121] = 'ER_NULL_COLUMN_IN_INDEX';\nexports[1122] = 'ER_CANT_FIND_UDF';\nexports[1123] = 'ER_CANT_INITIALIZE_UDF';\nexports[1124] = 'ER_UDF_NO_PATHS';\nexports[1125] = 'ER_UDF_EXISTS';\nexports[1126] = 'ER_CANT_OPEN_LIBRARY';\nexports[1127] = 'ER_CANT_FIND_DL_ENTRY';\nexports[1128] = 'ER_FUNCTION_NOT_DEFINED';\nexports[1129] = 'ER_HOST_IS_BLOCKED';\nexports[1130] = 'ER_HOST_NOT_PRIVILEGED';\nexports[1131] = 'ER_PASSWORD_ANONYMOUS_USER';\nexports[1132] = 'ER_PASSWORD_NOT_ALLOWED';\nexports[1133] = 'ER_PASSWORD_NO_MATCH';\nexports[1134] = 'ER_UPDATE_INFO';\nexports[1135] = 'ER_CANT_CREATE_THREAD';\nexports[1136] = 'ER_WRONG_VALUE_COUNT_ON_ROW';\nexports[1137] = 'ER_CANT_REOPEN_TABLE';\nexports[1138] = 'ER_INVALID_USE_OF_NULL';\nexports[1139] = 'ER_REGEXP_ERROR';\nexports[1140] = 'ER_MIX_OF_GROUP_FUNC_AND_FIELDS';\nexports[1141] = 'ER_NONEXISTING_GRANT';\nexports[1142] = 'ER_TABLEACCESS_DENIED_ERROR';\nexports[1143] = 'ER_COLUMNACCESS_DENIED_ERROR';\nexports[1144] = 'ER_ILLEGAL_GRANT_FOR_TABLE';\nexports[1145] = 'ER_GRANT_WRONG_HOST_OR_USER';\nexports[1146] = 'ER_NO_SUCH_TABLE';\nexports[1147] = 'ER_NONEXISTING_TABLE_GRANT';\nexports[1148] = 'ER_NOT_ALLOWED_COMMAND';\nexports[1149] = 'ER_SYNTAX_ERROR';\nexports[1150] = 'ER_UNUSED1';\nexports[1151] = 'ER_UNUSED2';\nexports[1152] = 'ER_ABORTING_CONNECTION';\nexports[1153] = 'ER_NET_PACKET_TOO_LARGE';\nexports[1154] = 'ER_NET_READ_ERROR_FROM_PIPE';\nexports[1155] = 'ER_NET_FCNTL_ERROR';\nexports[1156] = 'ER_NET_PACKETS_OUT_OF_ORDER';\nexports[1157] = 'ER_NET_UNCOMPRESS_ERROR';\nexports[1158] = 'ER_NET_READ_ERROR';\nexports[1159] = 'ER_NET_READ_INTERRUPTED';\nexports[1160] = 'ER_NET_ERROR_ON_WRITE';\nexports[1161] = 'ER_NET_WRITE_INTERRUPTED';\nexports[1162] = 'ER_TOO_LONG_STRING';\nexports[1163] = 'ER_TABLE_CANT_HANDLE_BLOB';\nexports[1164] = 'ER_TABLE_CANT_HANDLE_AUTO_INCREMENT';\nexports[1165] = 'ER_UNUSED3';\nexports[1166] = 'ER_WRONG_COLUMN_NAME';\nexports[1167] = 'ER_WRONG_KEY_COLUMN';\nexports[1168] = 'ER_WRONG_MRG_TABLE';\nexports[1169] = 'ER_DUP_UNIQUE';\nexports[1170] = 'ER_BLOB_KEY_WITHOUT_LENGTH';\nexports[1171] = 'ER_PRIMARY_CANT_HAVE_NULL';\nexports[1172] = 'ER_TOO_MANY_ROWS';\nexports[1173] = 'ER_REQUIRES_PRIMARY_KEY';\nexports[1174] = 'ER_NO_RAID_COMPILED';\nexports[1175] = 'ER_UPDATE_WITHOUT_KEY_IN_SAFE_MODE';\nexports[1176] = 'ER_KEY_DOES_NOT_EXITS';\nexports[1177] = 'ER_CHECK_NO_SUCH_TABLE';\nexports[1178] = 'ER_CHECK_NOT_IMPLEMENTED';\nexports[1179] = 'ER_CANT_DO_THIS_DURING_AN_TRANSACTION';\nexports[1180] = 'ER_ERROR_DURING_COMMIT';\nexports[1181] = 'ER_ERROR_DURING_ROLLBACK';\nexports[1182] = 'ER_ERROR_DURING_FLUSH_LOGS';\nexports[1183] = 'ER_ERROR_DURING_CHECKPOINT';\nexports[1184] = 'ER_NEW_ABORTING_CONNECTION';\nexports[1185] = 'ER_DUMP_NOT_IMPLEMENTED';\nexports[1186] = 'ER_FLUSH_MASTER_BINLOG_CLOSED';\nexports[1187] = 'ER_INDEX_REBUILD';\nexports[1188] = 'ER_SOURCE';\nexports[1189] = 'ER_SOURCE_NET_READ';\nexports[1190] = 'ER_SOURCE_NET_WRITE';\nexports[1191] = 'ER_FT_MATCHING_KEY_NOT_FOUND';\nexports[1192] = 'ER_LOCK_OR_ACTIVE_TRANSACTION';\nexports[1193] = 'ER_UNKNOWN_SYSTEM_VARIABLE';\nexports[1194] = 'ER_CRASHED_ON_USAGE';\nexports[1195] = 'ER_CRASHED_ON_REPAIR';\nexports[1196] = 'ER_WARNING_NOT_COMPLETE_ROLLBACK';\nexports[1197] = 'ER_TRANS_CACHE_FULL';\nexports[1198] = 'ER_SLAVE_MUST_STOP';\nexports[1199] = 'ER_REPLICA_NOT_RUNNING';\nexports[1200] = 'ER_BAD_REPLICA';\nexports[1201] = 'ER_CONNECTION_METADATA';\nexports[1202] = 'ER_REPLICA_THREAD';\nexports[1203] = 'ER_TOO_MANY_USER_CONNECTIONS';\nexports[1204] = 'ER_SET_CONSTANTS_ONLY';\nexports[1205] = 'ER_LOCK_WAIT_TIMEOUT';\nexports[1206] = 'ER_LOCK_TABLE_FULL';\nexports[1207] = 'ER_READ_ONLY_TRANSACTION';\nexports[1208] = 'ER_DROP_DB_WITH_READ_LOCK';\nexports[1209] = 'ER_CREATE_DB_WITH_READ_LOCK';\nexports[1210] = 'ER_WRONG_ARGUMENTS';\nexports[1211] = 'ER_NO_PERMISSION_TO_CREATE_USER';\nexports[1212] = 'ER_UNION_TABLES_IN_DIFFERENT_DIR';\nexports[1213] = 'ER_LOCK_DEADLOCK';\nexports[1214] = 'ER_TABLE_CANT_HANDLE_FT';\nexports[1215] = 'ER_CANNOT_ADD_FOREIGN';\nexports[1216] = 'ER_NO_REFERENCED_ROW';\nexports[1217] = 'ER_ROW_IS_REFERENCED';\nexports[1218] = 'ER_CONNECT_TO_SOURCE';\nexports[1219] = 'ER_QUERY_ON_MASTER';\nexports[1220] = 'ER_ERROR_WHEN_EXECUTING_COMMAND';\nexports[1221] = 'ER_WRONG_USAGE';\nexports[1222] = 'ER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT';\nexports[1223] = 'ER_CANT_UPDATE_WITH_READLOCK';\nexports[1224] = 'ER_MIXING_NOT_ALLOWED';\nexports[1225] = 'ER_DUP_ARGUMENT';\nexports[1226] = 'ER_USER_LIMIT_REACHED';\nexports[1227] = 'ER_SPECIFIC_ACCESS_DENIED_ERROR';\nexports[1228] = 'ER_LOCAL_VARIABLE';\nexports[1229] = 'ER_GLOBAL_VARIABLE';\nexports[1230] = 'ER_NO_DEFAULT';\nexports[1231] = 'ER_WRONG_VALUE_FOR_VAR';\nexports[1232] = 'ER_WRONG_TYPE_FOR_VAR';\nexports[1233] = 'ER_VAR_CANT_BE_READ';\nexports[1234] = 'ER_CANT_USE_OPTION_HERE';\nexports[1235] = 'ER_NOT_SUPPORTED_YET';\nexports[1236] = 'ER_SOURCE_FATAL_ERROR_READING_BINLOG';\nexports[1237] = 'ER_REPLICA_IGNORED_TABLE';\nexports[1238] = 'ER_INCORRECT_GLOBAL_LOCAL_VAR';\nexports[1239] = 'ER_WRONG_FK_DEF';\nexports[1240] = 'ER_KEY_REF_DO_NOT_MATCH_TABLE_REF';\nexports[1241] = 'ER_OPERAND_COLUMNS';\nexports[1242] = 'ER_SUBQUERY_NO_1_ROW';\nexports[1243] = 'ER_UNKNOWN_STMT_HANDLER';\nexports[1244] = 'ER_CORRUPT_HELP_DB';\nexports[1245] = 'ER_CYCLIC_REFERENCE';\nexports[1246] = 'ER_AUTO_CONVERT';\nexports[1247] = 'ER_ILLEGAL_REFERENCE';\nexports[1248] = 'ER_DERIVED_MUST_HAVE_ALIAS';\nexports[1249] = 'ER_SELECT_REDUCED';\nexports[1250] = 'ER_TABLENAME_NOT_ALLOWED_HERE';\nexports[1251] = 'ER_NOT_SUPPORTED_AUTH_MODE';\nexports[1252] = 'ER_SPATIAL_CANT_HAVE_NULL';\nexports[1253] = 'ER_COLLATION_CHARSET_MISMATCH';\nexports[1254] = 'ER_SLAVE_WAS_RUNNING';\nexports[1255] = 'ER_SLAVE_WAS_NOT_RUNNING';\nexports[1256] = 'ER_TOO_BIG_FOR_UNCOMPRESS';\nexports[1257] = 'ER_ZLIB_Z_MEM_ERROR';\nexports[1258] = 'ER_ZLIB_Z_BUF_ERROR';\nexports[1259] = 'ER_ZLIB_Z_DATA_ERROR';\nexports[1260] = 'ER_CUT_VALUE_GROUP_CONCAT';\nexports[1261] = 'ER_WARN_TOO_FEW_RECORDS';\nexports[1262] = 'ER_WARN_TOO_MANY_RECORDS';\nexports[1263] = 'ER_WARN_NULL_TO_NOTNULL';\nexports[1264] = 'ER_WARN_DATA_OUT_OF_RANGE';\nexports[1265] = 'WARN_DATA_TRUNCATED';\nexports[1266] = 'ER_WARN_USING_OTHER_HANDLER';\nexports[1267] = 'ER_CANT_AGGREGATE_2COLLATIONS';\nexports[1268] = 'ER_DROP_USER';\nexports[1269] = 'ER_REVOKE_GRANTS';\nexports[1270] = 'ER_CANT_AGGREGATE_3COLLATIONS';\nexports[1271] = 'ER_CANT_AGGREGATE_NCOLLATIONS';\nexports[1272] = 'ER_VARIABLE_IS_NOT_STRUCT';\nexports[1273] = 'ER_UNKNOWN_COLLATION';\nexports[1274] = 'ER_REPLICA_IGNORED_SSL_PARAMS';\nexports[1275] = 'ER_SERVER_IS_IN_SECURE_AUTH_MODE';\nexports[1276] = 'ER_WARN_FIELD_RESOLVED';\nexports[1277] = 'ER_BAD_REPLICA_UNTIL_COND';\nexports[1278] = 'ER_MISSING_SKIP_REPLICA';\nexports[1279] = 'ER_UNTIL_COND_IGNORED';\nexports[1280] = 'ER_WRONG_NAME_FOR_INDEX';\nexports[1281] = 'ER_WRONG_NAME_FOR_CATALOG';\nexports[1282] = 'ER_WARN_QC_RESIZE';\nexports[1283] = 'ER_BAD_FT_COLUMN';\nexports[1284] = 'ER_UNKNOWN_KEY_CACHE';\nexports[1285] = 'ER_WARN_HOSTNAME_WONT_WORK';\nexports[1286] = 'ER_UNKNOWN_STORAGE_ENGINE';\nexports[1287] = 'ER_WARN_DEPRECATED_SYNTAX';\nexports[1288] = 'ER_NON_UPDATABLE_TABLE';\nexports[1289] = 'ER_FEATURE_DISABLED';\nexports[1290] = 'ER_OPTION_PREVENTS_STATEMENT';\nexports[1291] = 'ER_DUPLICATED_VALUE_IN_TYPE';\nexports[1292] = 'ER_TRUNCATED_WRONG_VALUE';\nexports[1293] = 'ER_TOO_MUCH_AUTO_TIMESTAMP_COLS';\nexports[1294] = 'ER_INVALID_ON_UPDATE';\nexports[1295] = 'ER_UNSUPPORTED_PS';\nexports[1296] = 'ER_GET_ERRMSG';\nexports[1297] = 'ER_GET_TEMPORARY_ERRMSG';\nexports[1298] = 'ER_UNKNOWN_TIME_ZONE';\nexports[1299] = 'ER_WARN_INVALID_TIMESTAMP';\nexports[1300] = 'ER_INVALID_CHARACTER_STRING';\nexports[1301] = 'ER_WARN_ALLOWED_PACKET_OVERFLOWED';\nexports[1302] = 'ER_CONFLICTING_DECLARATIONS';\nexports[1303] = 'ER_SP_NO_RECURSIVE_CREATE';\nexports[1304] = 'ER_SP_ALREADY_EXISTS';\nexports[1305] = 'ER_SP_DOES_NOT_EXIST';\nexports[1306] = 'ER_SP_DROP_FAILED';\nexports[1307] = 'ER_SP_STORE_FAILED';\nexports[1308] = 'ER_SP_LILABEL_MISMATCH';\nexports[1309] = 'ER_SP_LABEL_REDEFINE';\nexports[1310] = 'ER_SP_LABEL_MISMATCH';\nexports[1311] = 'ER_SP_UNINIT_VAR';\nexports[1312] = 'ER_SP_BADSELECT';\nexports[1313] = 'ER_SP_BADRETURN';\nexports[1314] = 'ER_SP_BADSTATEMENT';\nexports[1315] = 'ER_UPDATE_LOG_DEPRECATED_IGNORED';\nexports[1316] = 'ER_UPDATE_LOG_DEPRECATED_TRANSLATED';\nexports[1317] = 'ER_QUERY_INTERRUPTED';\nexports[1318] = 'ER_SP_WRONG_NO_OF_ARGS';\nexports[1319] = 'ER_SP_COND_MISMATCH';\nexports[1320] = 'ER_SP_NORETURN';\nexports[1321] = 'ER_SP_NORETURNEND';\nexports[1322] = 'ER_SP_BAD_CURSOR_QUERY';\nexports[1323] = 'ER_SP_BAD_CURSOR_SELECT';\nexports[1324] = 'ER_SP_CURSOR_MISMATCH';\nexports[1325] = 'ER_SP_CURSOR_ALREADY_OPEN';\nexports[1326] = 'ER_SP_CURSOR_NOT_OPEN';\nexports[1327] = 'ER_SP_UNDECLARED_VAR';\nexports[1328] = 'ER_SP_WRONG_NO_OF_FETCH_ARGS';\nexports[1329] = 'ER_SP_FETCH_NO_DATA';\nexports[1330] = 'ER_SP_DUP_PARAM';\nexports[1331] = 'ER_SP_DUP_VAR';\nexports[1332] = 'ER_SP_DUP_COND';\nexports[1333] = 'ER_SP_DUP_CURS';\nexports[1334] = 'ER_SP_CANT_ALTER';\nexports[1335] = 'ER_SP_SUBSELECT_NYI';\nexports[1336] = 'ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG';\nexports[1337] = 'ER_SP_VARCOND_AFTER_CURSHNDLR';\nexports[1338] = 'ER_SP_CURSOR_AFTER_HANDLER';\nexports[1339] = 'ER_SP_CASE_NOT_FOUND';\nexports[1340] = 'ER_FPARSER_TOO_BIG_FILE';\nexports[1341] = 'ER_FPARSER_BAD_HEADER';\nexports[1342] = 'ER_FPARSER_EOF_IN_COMMENT';\nexports[1343] = 'ER_FPARSER_ERROR_IN_PARAMETER';\nexports[1344] = 'ER_FPARSER_EOF_IN_UNKNOWN_PARAMETER';\nexports[1345] = 'ER_VIEW_NO_EXPLAIN';\nexports[1346] = 'ER_FRM_UNKNOWN_TYPE';\nexports[1347] = 'ER_WRONG_OBJECT';\nexports[1348] = 'ER_NONUPDATEABLE_COLUMN';\nexports[1349] = 'ER_VIEW_SELECT_DERIVED';\nexports[1350] = 'ER_VIEW_SELECT_CLAUSE';\nexports[1351] = 'ER_VIEW_SELECT_VARIABLE';\nexports[1352] = 'ER_VIEW_SELECT_TMPTABLE';\nexports[1353] = 'ER_VIEW_WRONG_LIST';\nexports[1354] = 'ER_WARN_VIEW_MERGE';\nexports[1355] = 'ER_WARN_VIEW_WITHOUT_KEY';\nexports[1356] = 'ER_VIEW_INVALID';\nexports[1357] = 'ER_SP_NO_DROP_SP';\nexports[1358] = 'ER_SP_GOTO_IN_HNDLR';\nexports[1359] = 'ER_TRG_ALREADY_EXISTS';\nexports[1360] = 'ER_TRG_DOES_NOT_EXIST';\nexports[1361] = 'ER_TRG_ON_VIEW_OR_TEMP_TABLE';\nexports[1362] = 'ER_TRG_CANT_CHANGE_ROW';\nexports[1363] = 'ER_TRG_NO_SUCH_ROW_IN_TRG';\nexports[1364] = 'ER_NO_DEFAULT_FOR_FIELD';\nexports[1365] = 'ER_DIVISION_BY_ZERO';\nexports[1366] = 'ER_TRUNCATED_WRONG_VALUE_FOR_FIELD';\nexports[1367] = 'ER_ILLEGAL_VALUE_FOR_TYPE';\nexports[1368] = 'ER_VIEW_NONUPD_CHECK';\nexports[1369] = 'ER_VIEW_CHECK_FAILED';\nexports[1370] = 'ER_PROCACCESS_DENIED_ERROR';\nexports[1371] = 'ER_RELAY_LOG_FAIL';\nexports[1372] = 'ER_PASSWD_LENGTH';\nexports[1373] = 'ER_UNKNOWN_TARGET_BINLOG';\nexports[1374] = 'ER_IO_ERR_LOG_INDEX_READ';\nexports[1375] = 'ER_BINLOG_PURGE_PROHIBITED';\nexports[1376] = 'ER_FSEEK_FAIL';\nexports[1377] = 'ER_BINLOG_PURGE_FATAL_ERR';\nexports[1378] = 'ER_LOG_IN_USE';\nexports[1379] = 'ER_LOG_PURGE_UNKNOWN_ERR';\nexports[1380] = 'ER_RELAY_LOG_INIT';\nexports[1381] = 'ER_NO_BINARY_LOGGING';\nexports[1382] = 'ER_RESERVED_SYNTAX';\nexports[1383] = 'ER_WSAS_FAILED';\nexports[1384] = 'ER_DIFF_GROUPS_PROC';\nexports[1385] = 'ER_NO_GROUP_FOR_PROC';\nexports[1386] = 'ER_ORDER_WITH_PROC';\nexports[1387] = 'ER_LOGGING_PROHIBIT_CHANGING_OF';\nexports[1388] = 'ER_NO_FILE_MAPPING';\nexports[1389] = 'ER_WRONG_MAGIC';\nexports[1390] = 'ER_PS_MANY_PARAM';\nexports[1391] = 'ER_KEY_PART_0';\nexports[1392] = 'ER_VIEW_CHECKSUM';\nexports[1393] = 'ER_VIEW_MULTIUPDATE';\nexports[1394] = 'ER_VIEW_NO_INSERT_FIELD_LIST';\nexports[1395] = 'ER_VIEW_DELETE_MERGE_VIEW';\nexports[1396] = 'ER_CANNOT_USER';\nexports[1397] = 'ER_XAER_NOTA';\nexports[1398] = 'ER_XAER_INVAL';\nexports[1399] = 'ER_XAER_RMFAIL';\nexports[1400] = 'ER_XAER_OUTSIDE';\nexports[1401] = 'ER_XAER_RMERR';\nexports[1402] = 'ER_XA_RBROLLBACK';\nexports[1403] = 'ER_NONEXISTING_PROC_GRANT';\nexports[1404] = 'ER_PROC_AUTO_GRANT_FAIL';\nexports[1405] = 'ER_PROC_AUTO_REVOKE_FAIL';\nexports[1406] = 'ER_DATA_TOO_LONG';\nexports[1407] = 'ER_SP_BAD_SQLSTATE';\nexports[1408] = 'ER_STARTUP';\nexports[1409] = 'ER_LOAD_FROM_FIXED_SIZE_ROWS_TO_VAR';\nexports[1410] = 'ER_CANT_CREATE_USER_WITH_GRANT';\nexports[1411] = 'ER_WRONG_VALUE_FOR_TYPE';\nexports[1412] = 'ER_TABLE_DEF_CHANGED';\nexports[1413] = 'ER_SP_DUP_HANDLER';\nexports[1414] = 'ER_SP_NOT_VAR_ARG';\nexports[1415] = 'ER_SP_NO_RETSET';\nexports[1416] = 'ER_CANT_CREATE_GEOMETRY_OBJECT';\nexports[1417] = 'ER_FAILED_ROUTINE_BREAK_BINLOG';\nexports[1418] = 'ER_BINLOG_UNSAFE_ROUTINE';\nexports[1419] = 'ER_BINLOG_CREATE_ROUTINE_NEED_SUPER';\nexports[1420] = 'ER_EXEC_STMT_WITH_OPEN_CURSOR';\nexports[1421] = 'ER_STMT_HAS_NO_OPEN_CURSOR';\nexports[1422] = 'ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG';\nexports[1423] = 'ER_NO_DEFAULT_FOR_VIEW_FIELD';\nexports[1424] = 'ER_SP_NO_RECURSION';\nexports[1425] = 'ER_TOO_BIG_SCALE';\nexports[1426] = 'ER_TOO_BIG_PRECISION';\nexports[1427] = 'ER_M_BIGGER_THAN_D';\nexports[1428] = 'ER_WRONG_LOCK_OF_SYSTEM_TABLE';\nexports[1429] = 'ER_CONNECT_TO_FOREIGN_DATA_SOURCE';\nexports[1430] = 'ER_QUERY_ON_FOREIGN_DATA_SOURCE';\nexports[1431] = 'ER_FOREIGN_DATA_SOURCE_DOESNT_EXIST';\nexports[1432] = 'ER_FOREIGN_DATA_STRING_INVALID_CANT_CREATE';\nexports[1433] = 'ER_FOREIGN_DATA_STRING_INVALID';\nexports[1434] = 'ER_CANT_CREATE_FEDERATED_TABLE';\nexports[1435] = 'ER_TRG_IN_WRONG_SCHEMA';\nexports[1436] = 'ER_STACK_OVERRUN_NEED_MORE';\nexports[1437] = 'ER_TOO_LONG_BODY';\nexports[1438] = 'ER_WARN_CANT_DROP_DEFAULT_KEYCACHE';\nexports[1439] = 'ER_TOO_BIG_DISPLAYWIDTH';\nexports[1440] = 'ER_XAER_DUPID';\nexports[1441] = 'ER_DATETIME_FUNCTION_OVERFLOW';\nexports[1442] = 'ER_CANT_UPDATE_USED_TABLE_IN_SF_OR_TRG';\nexports[1443] = 'ER_VIEW_PREVENT_UPDATE';\nexports[1444] = 'ER_PS_NO_RECURSION';\nexports[1445] = 'ER_SP_CANT_SET_AUTOCOMMIT';\nexports[1446] = 'ER_MALFORMED_DEFINER';\nexports[1447] = 'ER_VIEW_FRM_NO_USER';\nexports[1448] = 'ER_VIEW_OTHER_USER';\nexports[1449] = 'ER_NO_SUCH_USER';\nexports[1450] = 'ER_FORBID_SCHEMA_CHANGE';\nexports[1451] = 'ER_ROW_IS_REFERENCED_2';\nexports[1452] = 'ER_NO_REFERENCED_ROW_2';\nexports[1453] = 'ER_SP_BAD_VAR_SHADOW';\nexports[1454] = 'ER_TRG_NO_DEFINER';\nexports[1455] = 'ER_OLD_FILE_FORMAT';\nexports[1456] = 'ER_SP_RECURSION_LIMIT';\nexports[1457] = 'ER_SP_PROC_TABLE_CORRUPT';\nexports[1458] = 'ER_SP_WRONG_NAME';\nexports[1459] = 'ER_TABLE_NEEDS_UPGRADE';\nexports[1460] = 'ER_SP_NO_AGGREGATE';\nexports[1461] = 'ER_MAX_PREPARED_STMT_COUNT_REACHED';\nexports[1462] = 'ER_VIEW_RECURSIVE';\nexports[1463] = 'ER_NON_GROUPING_FIELD_USED';\nexports[1464] = 'ER_TABLE_CANT_HANDLE_SPKEYS';\nexports[1465] = 'ER_NO_TRIGGERS_ON_SYSTEM_SCHEMA';\nexports[1466] = 'ER_REMOVED_SPACES';\nexports[1467] = 'ER_AUTOINC_READ_FAILED';\nexports[1468] = 'ER_USERNAME';\nexports[1469] = 'ER_HOSTNAME';\nexports[1470] = 'ER_WRONG_STRING_LENGTH';\nexports[1471] = 'ER_NON_INSERTABLE_TABLE';\nexports[1472] = 'ER_ADMIN_WRONG_MRG_TABLE';\nexports[1473] = 'ER_TOO_HIGH_LEVEL_OF_NESTING_FOR_SELECT';\nexports[1474] = 'ER_NAME_BECOMES_EMPTY';\nexports[1475] = 'ER_AMBIGUOUS_FIELD_TERM';\nexports[1476] = 'ER_FOREIGN_SERVER_EXISTS';\nexports[1477] = 'ER_FOREIGN_SERVER_DOESNT_EXIST';\nexports[1478] = 'ER_ILLEGAL_HA_CREATE_OPTION';\nexports[1479] = 'ER_PARTITION_REQUIRES_VALUES_ERROR';\nexports[1480] = 'ER_PARTITION_WRONG_VALUES_ERROR';\nexports[1481] = 'ER_PARTITION_MAXVALUE_ERROR';\nexports[1482] = 'ER_PARTITION_SUBPARTITION_ERROR';\nexports[1483] = 'ER_PARTITION_SUBPART_MIX_ERROR';\nexports[1484] = 'ER_PARTITION_WRONG_NO_PART_ERROR';\nexports[1485] = 'ER_PARTITION_WRONG_NO_SUBPART_ERROR';\nexports[1486] = 'ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR';\nexports[1487] = 'ER_NO_CONST_EXPR_IN_RANGE_OR_LIST_ERROR';\nexports[1488] = 'ER_FIELD_NOT_FOUND_PART_ERROR';\nexports[1489] = 'ER_LIST_OF_FIELDS_ONLY_IN_HASH_ERROR';\nexports[1490] = 'ER_INCONSISTENT_PARTITION_INFO_ERROR';\nexports[1491] = 'ER_PARTITION_FUNC_NOT_ALLOWED_ERROR';\nexports[1492] = 'ER_PARTITIONS_MUST_BE_DEFINED_ERROR';\nexports[1493] = 'ER_RANGE_NOT_INCREASING_ERROR';\nexports[1494] = 'ER_INCONSISTENT_TYPE_OF_FUNCTIONS_ERROR';\nexports[1495] = 'ER_MULTIPLE_DEF_CONST_IN_LIST_PART_ERROR';\nexports[1496] = 'ER_PARTITION_ENTRY_ERROR';\nexports[1497] = 'ER_MIX_HANDLER_ERROR';\nexports[1498] = 'ER_PARTITION_NOT_DEFINED_ERROR';\nexports[1499] = 'ER_TOO_MANY_PARTITIONS_ERROR';\nexports[1500] = 'ER_SUBPARTITION_ERROR';\nexports[1501] = 'ER_CANT_CREATE_HANDLER_FILE';\nexports[1502] = 'ER_BLOB_FIELD_IN_PART_FUNC_ERROR';\nexports[1503] = 'ER_UNIQUE_KEY_NEED_ALL_FIELDS_IN_PF';\nexports[1504] = 'ER_NO_PARTS_ERROR';\nexports[1505] = 'ER_PARTITION_MGMT_ON_NONPARTITIONED';\nexports[1506] = 'ER_FOREIGN_KEY_ON_PARTITIONED';\nexports[1507] = 'ER_DROP_PARTITION_NON_EXISTENT';\nexports[1508] = 'ER_DROP_LAST_PARTITION';\nexports[1509] = 'ER_COALESCE_ONLY_ON_HASH_PARTITION';\nexports[1510] = 'ER_REORG_HASH_ONLY_ON_SAME_NO';\nexports[1511] = 'ER_REORG_NO_PARAM_ERROR';\nexports[1512] = 'ER_ONLY_ON_RANGE_LIST_PARTITION';\nexports[1513] = 'ER_ADD_PARTITION_SUBPART_ERROR';\nexports[1514] = 'ER_ADD_PARTITION_NO_NEW_PARTITION';\nexports[1515] = 'ER_COALESCE_PARTITION_NO_PARTITION';\nexports[1516] = 'ER_REORG_PARTITION_NOT_EXIST';\nexports[1517] = 'ER_SAME_NAME_PARTITION';\nexports[1518] = 'ER_NO_BINLOG_ERROR';\nexports[1519] = 'ER_CONSECUTIVE_REORG_PARTITIONS';\nexports[1520] = 'ER_REORG_OUTSIDE_RANGE';\nexports[1521] = 'ER_PARTITION_FUNCTION_FAILURE';\nexports[1522] = 'ER_PART_STATE_ERROR';\nexports[1523] = 'ER_LIMITED_PART_RANGE';\nexports[1524] = 'ER_PLUGIN_IS_NOT_LOADED';\nexports[1525] = 'ER_WRONG_VALUE';\nexports[1526] = 'ER_NO_PARTITION_FOR_GIVEN_VALUE';\nexports[1527] = 'ER_FILEGROUP_OPTION_ONLY_ONCE';\nexports[1528] = 'ER_CREATE_FILEGROUP_FAILED';\nexports[1529] = 'ER_DROP_FILEGROUP_FAILED';\nexports[1530] = 'ER_TABLESPACE_AUTO_EXTEND_ERROR';\nexports[1531] = 'ER_WRONG_SIZE_NUMBER';\nexports[1532] = 'ER_SIZE_OVERFLOW_ERROR';\nexports[1533] = 'ER_ALTER_FILEGROUP_FAILED';\nexports[1534] = 'ER_BINLOG_ROW_LOGGING_FAILED';\nexports[1535] = 'ER_BINLOG_ROW_WRONG_TABLE_DEF';\nexports[1536] = 'ER_BINLOG_ROW_RBR_TO_SBR';\nexports[1537] = 'ER_EVENT_ALREADY_EXISTS';\nexports[1538] = 'ER_EVENT_STORE_FAILED';\nexports[1539] = 'ER_EVENT_DOES_NOT_EXIST';\nexports[1540] = 'ER_EVENT_CANT_ALTER';\nexports[1541] = 'ER_EVENT_DROP_FAILED';\nexports[1542] = 'ER_EVENT_INTERVAL_NOT_POSITIVE_OR_TOO_BIG';\nexports[1543] = 'ER_EVENT_ENDS_BEFORE_STARTS';\nexports[1544] = 'ER_EVENT_EXEC_TIME_IN_THE_PAST';\nexports[1545] = 'ER_EVENT_OPEN_TABLE_FAILED';\nexports[1546] = 'ER_EVENT_NEITHER_M_EXPR_NOR_M_AT';\nexports[1547] = 'ER_COL_COUNT_DOESNT_MATCH_CORRUPTED';\nexports[1548] = 'ER_CANNOT_LOAD_FROM_TABLE';\nexports[1549] = 'ER_EVENT_CANNOT_DELETE';\nexports[1550] = 'ER_EVENT_COMPILE_ERROR';\nexports[1551] = 'ER_EVENT_SAME_NAME';\nexports[1552] = 'ER_EVENT_DATA_TOO_LONG';\nexports[1553] = 'ER_DROP_INDEX_FK';\nexports[1554] = 'ER_WARN_DEPRECATED_SYNTAX_WITH_VER';\nexports[1555] = 'ER_CANT_WRITE_LOCK_LOG_TABLE';\nexports[1556] = 'ER_CANT_LOCK_LOG_TABLE';\nexports[1557] = 'ER_FOREIGN_DUPLICATE_KEY';\nexports[1558] = 'ER_COL_COUNT_DOESNT_MATCH_PLEASE_UPDATE';\nexports[1559] = 'ER_TEMP_TABLE_PREVENTS_SWITCH_OUT_OF_RBR';\nexports[1560] = 'ER_STORED_FUNCTION_PREVENTS_SWITCH_BINLOG_FORMAT';\nexports[1561] = 'ER_NDB_CANT_SWITCH_BINLOG_FORMAT';\nexports[1562] = 'ER_PARTITION_NO_TEMPORARY';\nexports[1563] = 'ER_PARTITION_CONST_DOMAIN_ERROR';\nexports[1564] = 'ER_PARTITION_FUNCTION_IS_NOT_ALLOWED';\nexports[1565] = 'ER_DDL_LOG_ERROR';\nexports[1566] = 'ER_NULL_IN_VALUES_LESS_THAN';\nexports[1567] = 'ER_WRONG_PARTITION_NAME';\nexports[1568] = 'ER_CANT_CHANGE_TX_CHARACTERISTICS';\nexports[1569] = 'ER_DUP_ENTRY_AUTOINCREMENT_CASE';\nexports[1570] = 'ER_EVENT_MODIFY_QUEUE_ERROR';\nexports[1571] = 'ER_EVENT_SET_VAR_ERROR';\nexports[1572] = 'ER_PARTITION_MERGE_ERROR';\nexports[1573] = 'ER_CANT_ACTIVATE_LOG';\nexports[1574] = 'ER_RBR_NOT_AVAILABLE';\nexports[1575] = 'ER_BASE64_DECODE_ERROR';\nexports[1576] = 'ER_EVENT_RECURSION_FORBIDDEN';\nexports[1577] = 'ER_EVENTS_DB_ERROR';\nexports[1578] = 'ER_ONLY_INTEGERS_ALLOWED';\nexports[1579] = 'ER_UNSUPORTED_LOG_ENGINE';\nexports[1580] = 'ER_BAD_LOG_STATEMENT';\nexports[1581] = 'ER_CANT_RENAME_LOG_TABLE';\nexports[1582] = 'ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT';\nexports[1583] = 'ER_WRONG_PARAMETERS_TO_NATIVE_FCT';\nexports[1584] = 'ER_WRONG_PARAMETERS_TO_STORED_FCT';\nexports[1585] = 'ER_NATIVE_FCT_NAME_COLLISION';\nexports[1586] = 'ER_DUP_ENTRY_WITH_KEY_NAME';\nexports[1587] = 'ER_BINLOG_PURGE_EMFILE';\nexports[1588] = 'ER_EVENT_CANNOT_CREATE_IN_THE_PAST';\nexports[1589] = 'ER_EVENT_CANNOT_ALTER_IN_THE_PAST';\nexports[1590] = 'ER_SLAVE_INCIDENT';\nexports[1591] = 'ER_NO_PARTITION_FOR_GIVEN_VALUE_SILENT';\nexports[1592] = 'ER_BINLOG_UNSAFE_STATEMENT';\nexports[1593] = 'ER_BINLOG_FATAL_ERROR';\nexports[1594] = 'ER_SLAVE_RELAY_LOG_READ_FAILURE';\nexports[1595] = 'ER_SLAVE_RELAY_LOG_WRITE_FAILURE';\nexports[1596] = 'ER_SLAVE_CREATE_EVENT_FAILURE';\nexports[1597] = 'ER_SLAVE_MASTER_COM_FAILURE';\nexports[1598] = 'ER_BINLOG_LOGGING_IMPOSSIBLE';\nexports[1599] = 'ER_VIEW_NO_CREATION_CTX';\nexports[1600] = 'ER_VIEW_INVALID_CREATION_CTX';\nexports[1601] = 'ER_SR_INVALID_CREATION_CTX';\nexports[1602] = 'ER_TRG_CORRUPTED_FILE';\nexports[1603] = 'ER_TRG_NO_CREATION_CTX';\nexports[1604] = 'ER_TRG_INVALID_CREATION_CTX';\nexports[1605] = 'ER_EVENT_INVALID_CREATION_CTX';\nexports[1606] = 'ER_TRG_CANT_OPEN_TABLE';\nexports[1607] = 'ER_CANT_CREATE_SROUTINE';\nexports[1608] = 'ER_NEVER_USED';\nexports[1609] = 'ER_NO_FORMAT_DESCRIPTION_EVENT_BEFORE_BINLOG_STATEMENT';\nexports[1610] = 'ER_REPLICA_CORRUPT_EVENT';\nexports[1611] = 'ER_LOAD_DATA_INVALID_COLUMN';\nexports[1612] = 'ER_LOG_PURGE_NO_FILE';\nexports[1613] = 'ER_XA_RBTIMEOUT';\nexports[1614] = 'ER_XA_RBDEADLOCK';\nexports[1615] = 'ER_NEED_REPREPARE';\nexports[1616] = 'ER_DELAYED_NOT_SUPPORTED';\nexports[1617] = 'WARN_NO_CONNECTION_METADATA';\nexports[1618] = 'WARN_OPTION_IGNORED';\nexports[1619] = 'ER_PLUGIN_DELETE_BUILTIN';\nexports[1620] = 'WARN_PLUGIN_BUSY';\nexports[1621] = 'ER_VARIABLE_IS_READONLY';\nexports[1622] = 'ER_WARN_ENGINE_TRANSACTION_ROLLBACK';\nexports[1623] = 'ER_SLAVE_HEARTBEAT_FAILURE';\nexports[1624] = 'ER_REPLICA_HEARTBEAT_VALUE_OUT_OF_RANGE';\nexports[1625] = 'ER_NDB_REPLICATION_SCHEMA_ERROR';\nexports[1626] = 'ER_CONFLICT_FN_PARSE_ERROR';\nexports[1627] = 'ER_EXCEPTIONS_WRITE_ERROR';\nexports[1628] = 'ER_TOO_LONG_TABLE_COMMENT';\nexports[1629] = 'ER_TOO_LONG_FIELD_COMMENT';\nexports[1630] = 'ER_FUNC_INEXISTENT_NAME_COLLISION';\nexports[1631] = 'ER_DATABASE_NAME';\nexports[1632] = 'ER_TABLE_NAME';\nexports[1633] = 'ER_PARTITION_NAME';\nexports[1634] = 'ER_SUBPARTITION_NAME';\nexports[1635] = 'ER_TEMPORARY_NAME';\nexports[1636] = 'ER_RENAMED_NAME';\nexports[1637] = 'ER_TOO_MANY_CONCURRENT_TRXS';\nexports[1638] = 'WARN_NON_ASCII_SEPARATOR_NOT_IMPLEMENTED';\nexports[1639] = 'ER_DEBUG_SYNC_TIMEOUT';\nexports[1640] = 'ER_DEBUG_SYNC_HIT_LIMIT';\nexports[1641] = 'ER_DUP_SIGNAL_SET';\nexports[1642] = 'ER_SIGNAL_WARN';\nexports[1643] = 'ER_SIGNAL_NOT_FOUND';\nexports[1644] = 'ER_SIGNAL_EXCEPTION';\nexports[1645] = 'ER_RESIGNAL_WITHOUT_ACTIVE_HANDLER';\nexports[1646] = 'ER_SIGNAL_BAD_CONDITION_TYPE';\nexports[1647] = 'WARN_COND_ITEM_TRUNCATED';\nexports[1648] = 'ER_COND_ITEM_TOO_LONG';\nexports[1649] = 'ER_UNKNOWN_LOCALE';\nexports[1650] = 'ER_REPLICA_IGNORE_SERVER_IDS';\nexports[1651] = 'ER_QUERY_CACHE_DISABLED';\nexports[1652] = 'ER_SAME_NAME_PARTITION_FIELD';\nexports[1653] = 'ER_PARTITION_COLUMN_LIST_ERROR';\nexports[1654] = 'ER_WRONG_TYPE_COLUMN_VALUE_ERROR';\nexports[1655] = 'ER_TOO_MANY_PARTITION_FUNC_FIELDS_ERROR';\nexports[1656] = 'ER_MAXVALUE_IN_VALUES_IN';\nexports[1657] = 'ER_TOO_MANY_VALUES_ERROR';\nexports[1658] = 'ER_ROW_SINGLE_PARTITION_FIELD_ERROR';\nexports[1659] = 'ER_FIELD_TYPE_NOT_ALLOWED_AS_PARTITION_FIELD';\nexports[1660] = 'ER_PARTITION_FIELDS_TOO_LONG';\nexports[1661] = 'ER_BINLOG_ROW_ENGINE_AND_STMT_ENGINE';\nexports[1662] = 'ER_BINLOG_ROW_MODE_AND_STMT_ENGINE';\nexports[1663] = 'ER_BINLOG_UNSAFE_AND_STMT_ENGINE';\nexports[1664] = 'ER_BINLOG_ROW_INJECTION_AND_STMT_ENGINE';\nexports[1665] = 'ER_BINLOG_STMT_MODE_AND_ROW_ENGINE';\nexports[1666] = 'ER_BINLOG_ROW_INJECTION_AND_STMT_MODE';\nexports[1667] = 'ER_BINLOG_MULTIPLE_ENGINES_AND_SELF_LOGGING_ENGINE';\nexports[1668] = 'ER_BINLOG_UNSAFE_LIMIT';\nexports[1669] = 'ER_UNUSED4';\nexports[1670] = 'ER_BINLOG_UNSAFE_SYSTEM_TABLE';\nexports[1671] = 'ER_BINLOG_UNSAFE_AUTOINC_COLUMNS';\nexports[1672] = 'ER_BINLOG_UNSAFE_UDF';\nexports[1673] = 'ER_BINLOG_UNSAFE_SYSTEM_VARIABLE';\nexports[1674] = 'ER_BINLOG_UNSAFE_SYSTEM_FUNCTION';\nexports[1675] = 'ER_BINLOG_UNSAFE_NONTRANS_AFTER_TRANS';\nexports[1676] = 'ER_MESSAGE_AND_STATEMENT';\nexports[1677] = 'ER_SLAVE_CONVERSION_FAILED';\nexports[1678] = 'ER_REPLICA_CANT_CREATE_CONVERSION';\nexports[1679] = 'ER_INSIDE_TRANSACTION_PREVENTS_SWITCH_BINLOG_FORMAT';\nexports[1680] = 'ER_PATH_LENGTH';\nexports[1681] = 'ER_WARN_DEPRECATED_SYNTAX_NO_REPLACEMENT';\nexports[1682] = 'ER_WRONG_NATIVE_TABLE_STRUCTURE';\nexports[1683] = 'ER_WRONG_PERFSCHEMA_USAGE';\nexports[1684] = 'ER_WARN_I_S_SKIPPED_TABLE';\nexports[1685] = 'ER_INSIDE_TRANSACTION_PREVENTS_SWITCH_BINLOG_DIRECT';\nexports[1686] = 'ER_STORED_FUNCTION_PREVENTS_SWITCH_BINLOG_DIRECT';\nexports[1687] = 'ER_SPATIAL_MUST_HAVE_GEOM_COL';\nexports[1688] = 'ER_TOO_LONG_INDEX_COMMENT';\nexports[1689] = 'ER_LOCK_ABORTED';\nexports[1690] = 'ER_DATA_OUT_OF_RANGE';\nexports[1691] = 'ER_WRONG_SPVAR_TYPE_IN_LIMIT';\nexports[1692] = 'ER_BINLOG_UNSAFE_MULTIPLE_ENGINES_AND_SELF_LOGGING_ENGINE';\nexports[1693] = 'ER_BINLOG_UNSAFE_MIXED_STATEMENT';\nexports[1694] = 'ER_INSIDE_TRANSACTION_PREVENTS_SWITCH_SQL_LOG_BIN';\nexports[1695] = 'ER_STORED_FUNCTION_PREVENTS_SWITCH_SQL_LOG_BIN';\nexports[1696] = 'ER_FAILED_READ_FROM_PAR_FILE';\nexports[1697] = 'ER_VALUES_IS_NOT_INT_TYPE_ERROR';\nexports[1698] = 'ER_ACCESS_DENIED_NO_PASSWORD_ERROR';\nexports[1699] = 'ER_SET_PASSWORD_AUTH_PLUGIN';\nexports[1700] = 'ER_GRANT_PLUGIN_USER_EXISTS';\nexports[1701] = 'ER_TRUNCATE_ILLEGAL_FK';\nexports[1702] = 'ER_PLUGIN_IS_PERMANENT';\nexports[1703] = 'ER_REPLICA_HEARTBEAT_VALUE_OUT_OF_RANGE_MIN';\nexports[1704] = 'ER_REPLICA_HEARTBEAT_VALUE_OUT_OF_RANGE_MAX';\nexports[1705] = 'ER_STMT_CACHE_FULL';\nexports[1706] = 'ER_MULTI_UPDATE_KEY_CONFLICT';\nexports[1707] = 'ER_TABLE_NEEDS_REBUILD';\nexports[1708] = 'WARN_OPTION_BELOW_LIMIT';\nexports[1709] = 'ER_INDEX_COLUMN_TOO_LONG';\nexports[1710] = 'ER_ERROR_IN_TRIGGER_BODY';\nexports[1711] = 'ER_ERROR_IN_UNKNOWN_TRIGGER_BODY';\nexports[1712] = 'ER_INDEX_CORRUPT';\nexports[1713] = 'ER_UNDO_RECORD_TOO_BIG';\nexports[1714] = 'ER_BINLOG_UNSAFE_INSERT_IGNORE_SELECT';\nexports[1715] = 'ER_BINLOG_UNSAFE_INSERT_SELECT_UPDATE';\nexports[1716] = 'ER_BINLOG_UNSAFE_REPLACE_SELECT';\nexports[1717] = 'ER_BINLOG_UNSAFE_CREATE_IGNORE_SELECT';\nexports[1718] = 'ER_BINLOG_UNSAFE_CREATE_REPLACE_SELECT';\nexports[1719] = 'ER_BINLOG_UNSAFE_UPDATE_IGNORE';\nexports[1720] = 'ER_PLUGIN_NO_UNINSTALL';\nexports[1721] = 'ER_PLUGIN_NO_INSTALL';\nexports[1722] = 'ER_BINLOG_UNSAFE_WRITE_AUTOINC_SELECT';\nexports[1723] = 'ER_BINLOG_UNSAFE_CREATE_SELECT_AUTOINC';\nexports[1724] = 'ER_BINLOG_UNSAFE_INSERT_TWO_KEYS';\nexports[1725] = 'ER_TABLE_IN_FK_CHECK';\nexports[1726] = 'ER_UNSUPPORTED_ENGINE';\nexports[1727] = 'ER_BINLOG_UNSAFE_AUTOINC_NOT_FIRST';\nexports[1728] = 'ER_CANNOT_LOAD_FROM_TABLE_V2';\nexports[1729] = 'ER_SOURCE_DELAY_VALUE_OUT_OF_RANGE';\nexports[1730] = 'ER_ONLY_FD_AND_RBR_EVENTS_ALLOWED_IN_BINLOG_STATEMENT';\nexports[1731] = 'ER_PARTITION_EXCHANGE_DIFFERENT_OPTION';\nexports[1732] = 'ER_PARTITION_EXCHANGE_PART_TABLE';\nexports[1733] = 'ER_PARTITION_EXCHANGE_TEMP_TABLE';\nexports[1734] = 'ER_PARTITION_INSTEAD_OF_SUBPARTITION';\nexports[1735] = 'ER_UNKNOWN_PARTITION';\nexports[1736] = 'ER_TABLES_DIFFERENT_METADATA';\nexports[1737] = 'ER_ROW_DOES_NOT_MATCH_PARTITION';\nexports[1738] = 'ER_BINLOG_CACHE_SIZE_GREATER_THAN_MAX';\nexports[1739] = 'ER_WARN_INDEX_NOT_APPLICABLE';\nexports[1740] = 'ER_PARTITION_EXCHANGE_FOREIGN_KEY';\nexports[1741] = 'ER_NO_SUCH_KEY_VALUE';\nexports[1742] = 'ER_RPL_INFO_DATA_TOO_LONG';\nexports[1743] = 'ER_NETWORK_READ_EVENT_CHECKSUM_FAILURE';\nexports[1744] = 'ER_BINLOG_READ_EVENT_CHECKSUM_FAILURE';\nexports[1745] = 'ER_BINLOG_STMT_CACHE_SIZE_GREATER_THAN_MAX';\nexports[1746] = 'ER_CANT_UPDATE_TABLE_IN_CREATE_TABLE_SELECT';\nexports[1747] = 'ER_PARTITION_CLAUSE_ON_NONPARTITIONED';\nexports[1748] = 'ER_ROW_DOES_NOT_MATCH_GIVEN_PARTITION_SET';\nexports[1749] = 'ER_NO_SUCH_PARTITION';\nexports[1750] = 'ER_CHANGE_RPL_INFO_REPOSITORY_FAILURE';\nexports[1751] = 'ER_WARNING_NOT_COMPLETE_ROLLBACK_WITH_CREATED_TEMP_TABLE';\nexports[1752] = 'ER_WARNING_NOT_COMPLETE_ROLLBACK_WITH_DROPPED_TEMP_TABLE';\nexports[1753] = 'ER_MTA_FEATURE_IS_NOT_SUPPORTED';\nexports[1754] = 'ER_MTA_UPDATED_DBS_GREATER_MAX';\nexports[1755] = 'ER_MTA_CANT_PARALLEL';\nexports[1756] = 'ER_MTA_INCONSISTENT_DATA';\nexports[1757] = 'ER_FULLTEXT_NOT_SUPPORTED_WITH_PARTITIONING';\nexports[1758] = 'ER_DA_INVALID_CONDITION_NUMBER';\nexports[1759] = 'ER_INSECURE_PLAIN_TEXT';\nexports[1760] = 'ER_INSECURE_CHANGE_SOURCE';\nexports[1761] = 'ER_FOREIGN_DUPLICATE_KEY_WITH_CHILD_INFO';\nexports[1762] = 'ER_FOREIGN_DUPLICATE_KEY_WITHOUT_CHILD_INFO';\nexports[1763] = 'ER_SQLTHREAD_WITH_SECURE_REPLICA';\nexports[1764] = 'ER_TABLE_HAS_NO_FT';\nexports[1765] = 'ER_VARIABLE_NOT_SETTABLE_IN_SF_OR_TRIGGER';\nexports[1766] = 'ER_VARIABLE_NOT_SETTABLE_IN_TRANSACTION';\nexports[1767] = 'ER_GTID_NEXT_IS_NOT_IN_GTID_NEXT_LIST';\nexports[1768] = 'ER_CANT_CHANGE_GTID_NEXT_IN_TRANSACTION';\nexports[1769] = 'ER_SET_STATEMENT_CANNOT_INVOKE_FUNCTION';\nexports[1770] = 'ER_GTID_NEXT_CANT_BE_AUTOMATIC_IF_GTID_NEXT_LIST_IS_NON_NULL';\nexports[1771] = 'ER_SKIPPING_LOGGED_TRANSACTION';\nexports[1772] = 'ER_MALFORMED_GTID_SET_SPECIFICATION';\nexports[1773] = 'ER_MALFORMED_GTID_SET_ENCODING';\nexports[1774] = 'ER_MALFORMED_GTID_SPECIFICATION';\nexports[1775] = 'ER_GNO_EXHAUSTED';\nexports[1776] = 'ER_BAD_REPLICA_AUTO_POSITION';\nexports[1777] = 'ER_AUTO_POSITION_REQUIRES_GTID_MODE_NOT_OFF';\nexports[1778] = 'ER_CANT_DO_IMPLICIT_COMMIT_IN_TRX_WHEN_GTID_NEXT_IS_SET';\nexports[1779] = 'ER_GTID_MODE_ON_REQUIRES_ENFORCE_GTID_CONSISTENCY_ON';\nexports[1780] = 'ER_GTID_MODE_REQUIRES_BINLOG';\nexports[1781] = 'ER_CANT_SET_GTID_NEXT_TO_GTID_WHEN_GTID_MODE_IS_OFF';\nexports[1782] = 'ER_CANT_SET_GTID_NEXT_TO_ANONYMOUS_WHEN_GTID_MODE_IS_ON';\nexports[1783] = 'ER_CANT_SET_GTID_NEXT_LIST_TO_NON_NULL_WHEN_GTID_MODE_IS_OFF';\nexports[1784] = 'ER_FOUND_GTID_EVENT_WHEN_GTID_MODE_IS_OFF';\nexports[1785] = 'ER_GTID_UNSAFE_NON_TRANSACTIONAL_TABLE';\nexports[1786] = 'ER_GTID_UNSAFE_CREATE_SELECT';\nexports[1787] = 'ER_GTID_UNSAFE_CREATE_DROP_TEMP_TABLE_IN_TRANSACTION';\nexports[1788] = 'ER_GTID_MODE_CAN_ONLY_CHANGE_ONE_STEP_AT_A_TIME';\nexports[1789] = 'ER_SOURCE_HAS_PURGED_REQUIRED_GTIDS';\nexports[1790] = 'ER_CANT_SET_GTID_NEXT_WHEN_OWNING_GTID';\nexports[1791] = 'ER_UNKNOWN_EXPLAIN_FORMAT';\nexports[1792] = 'ER_CANT_EXECUTE_IN_READ_ONLY_TRANSACTION';\nexports[1793] = 'ER_TOO_LONG_TABLE_PARTITION_COMMENT';\nexports[1794] = 'ER_REPLICA_CONFIGURATION';\nexports[1795] = 'ER_INNODB_FT_LIMIT';\nexports[1796] = 'ER_INNODB_NO_FT_TEMP_TABLE';\nexports[1797] = 'ER_INNODB_FT_WRONG_DOCID_COLUMN';\nexports[1798] = 'ER_INNODB_FT_WRONG_DOCID_INDEX';\nexports[1799] = 'ER_INNODB_ONLINE_LOG_TOO_BIG';\nexports[1800] = 'ER_UNKNOWN_ALTER_ALGORITHM';\nexports[1801] = 'ER_UNKNOWN_ALTER_LOCK';\nexports[1802] = 'ER_MTA_CHANGE_SOURCE_CANT_RUN_WITH_GAPS';\nexports[1803] = 'ER_MTA_RECOVERY_FAILURE';\nexports[1804] = 'ER_MTA_RESET_WORKERS';\nexports[1805] = 'ER_COL_COUNT_DOESNT_MATCH_CORRUPTED_V2';\nexports[1806] = 'ER_REPLICA_SILENT_RETRY_TRANSACTION';\nexports[1807] = 'ER_DISCARD_FK_CHECKS_RUNNING';\nexports[1808] = 'ER_TABLE_SCHEMA_MISMATCH';\nexports[1809] = 'ER_TABLE_IN_SYSTEM_TABLESPACE';\nexports[1810] = 'ER_IO_READ_ERROR';\nexports[1811] = 'ER_IO_WRITE_ERROR';\nexports[1812] = 'ER_TABLESPACE_MISSING';\nexports[1813] = 'ER_TABLESPACE_EXISTS';\nexports[1814] = 'ER_TABLESPACE_DISCARDED';\nexports[1815] = 'ER_INTERNAL_ERROR';\nexports[1816] = 'ER_INNODB_IMPORT_ERROR';\nexports[1817] = 'ER_INNODB_INDEX_CORRUPT';\nexports[1818] = 'ER_INVALID_YEAR_COLUMN_LENGTH';\nexports[1819] = 'ER_NOT_VALID_PASSWORD';\nexports[1820] = 'ER_MUST_CHANGE_PASSWORD';\nexports[1821] = 'ER_FK_NO_INDEX_CHILD';\nexports[1822] = 'ER_FK_NO_INDEX_PARENT';\nexports[1823] = 'ER_FK_FAIL_ADD_SYSTEM';\nexports[1824] = 'ER_FK_CANNOT_OPEN_PARENT';\nexports[1825] = 'ER_FK_INCORRECT_OPTION';\nexports[1826] = 'ER_FK_DUP_NAME';\nexports[1827] = 'ER_PASSWORD_FORMAT';\nexports[1828] = 'ER_FK_COLUMN_CANNOT_DROP';\nexports[1829] = 'ER_FK_COLUMN_CANNOT_DROP_CHILD';\nexports[1830] = 'ER_FK_COLUMN_NOT_NULL';\nexports[1831] = 'ER_DUP_INDEX';\nexports[1832] = 'ER_FK_COLUMN_CANNOT_CHANGE';\nexports[1833] = 'ER_FK_COLUMN_CANNOT_CHANGE_CHILD';\nexports[1834] = 'ER_UNUSED5';\nexports[1835] = 'ER_MALFORMED_PACKET';\nexports[1836] = 'ER_READ_ONLY_MODE';\nexports[1837] = 'ER_GTID_NEXT_TYPE_UNDEFINED_GTID';\nexports[1838] = 'ER_VARIABLE_NOT_SETTABLE_IN_SP';\nexports[1839] = 'ER_CANT_SET_GTID_PURGED_WHEN_GTID_MODE_IS_OFF';\nexports[1840] = 'ER_CANT_SET_GTID_PURGED_WHEN_GTID_EXECUTED_IS_NOT_EMPTY';\nexports[1841] = 'ER_CANT_SET_GTID_PURGED_WHEN_OWNED_GTIDS_IS_NOT_EMPTY';\nexports[1842] = 'ER_GTID_PURGED_WAS_CHANGED';\nexports[1843] = 'ER_GTID_EXECUTED_WAS_CHANGED';\nexports[1844] = 'ER_BINLOG_STMT_MODE_AND_NO_REPL_TABLES';\nexports[1845] = 'ER_ALTER_OPERATION_NOT_SUPPORTED';\nexports[1846] = 'ER_ALTER_OPERATION_NOT_SUPPORTED_REASON';\nexports[1847] = 'ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_COPY';\nexports[1848] = 'ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_PARTITION';\nexports[1849] = 'ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_FK_RENAME';\nexports[1850] = 'ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_COLUMN_TYPE';\nexports[1851] = 'ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_FK_CHECK';\nexports[1852] = 'ER_UNUSED6';\nexports[1853] = 'ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_NOPK';\nexports[1854] = 'ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_AUTOINC';\nexports[1855] = 'ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_HIDDEN_FTS';\nexports[1856] = 'ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_CHANGE_FTS';\nexports[1857] = 'ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_FTS';\nexports[1858] = 'ER_SQL_REPLICA_SKIP_COUNTER_NOT_SETTABLE_IN_GTID_MODE';\nexports[1859] = 'ER_DUP_UNKNOWN_IN_INDEX';\nexports[1860] = 'ER_IDENT_CAUSES_TOO_LONG_PATH';\nexports[1861] = 'ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_NOT_NULL';\nexports[1862] = 'ER_MUST_CHANGE_PASSWORD_LOGIN';\nexports[1863] = 'ER_ROW_IN_WRONG_PARTITION';\nexports[1864] = 'ER_MTA_EVENT_BIGGER_PENDING_JOBS_SIZE_MAX';\nexports[1865] = 'ER_INNODB_NO_FT_USES_PARSER';\nexports[1866] = 'ER_BINLOG_LOGICAL_CORRUPTION';\nexports[1867] = 'ER_WARN_PURGE_LOG_IN_USE';\nexports[1868] = 'ER_WARN_PURGE_LOG_IS_ACTIVE';\nexports[1869] = 'ER_AUTO_INCREMENT_CONFLICT';\nexports[1870] = 'WARN_ON_BLOCKHOLE_IN_RBR';\nexports[1871] = 'ER_REPLICA_CM_INIT_REPOSITORY';\nexports[1872] = 'ER_REPLICA_AM_INIT_REPOSITORY';\nexports[1873] = 'ER_ACCESS_DENIED_CHANGE_USER_ERROR';\nexports[1874] = 'ER_INNODB_READ_ONLY';\nexports[1875] = 'ER_STOP_REPLICA_SQL_THREAD_TIMEOUT';\nexports[1876] = 'ER_STOP_REPLICA_IO_THREAD_TIMEOUT';\nexports[1877] = 'ER_TABLE_CORRUPT';\nexports[1878] = 'ER_TEMP_FILE_WRITE_FAILURE';\nexports[1879] = 'ER_INNODB_FT_AUX_NOT_HEX_ID';\nexports[1880] = 'ER_OLD_TEMPORALS_UPGRADED';\nexports[1881] = 'ER_INNODB_FORCED_RECOVERY';\nexports[1882] = 'ER_AES_INVALID_IV';\nexports[1883] = 'ER_PLUGIN_CANNOT_BE_UNINSTALLED';\nexports[1884] = 'ER_GTID_UNSAFE_BINLOG_SPLITTABLE_STATEMENT_AND_ASSIGNED_GTID';\nexports[1885] = 'ER_REPLICA_HAS_MORE_GTIDS_THAN_SOURCE';\nexports[1886] = 'ER_MISSING_KEY';\nexports[1887] = 'WARN_NAMED_PIPE_ACCESS_EVERYONE';\nexports[3000] = 'ER_FILE_CORRUPT';\nexports[3001] = 'ER_ERROR_ON_SOURCE';\nexports[3002] = 'ER_INCONSISTENT_ERROR';\nexports[3003] = 'ER_STORAGE_ENGINE_NOT_LOADED';\nexports[3004] = 'ER_GET_STACKED_DA_WITHOUT_ACTIVE_HANDLER';\nexports[3005] = 'ER_WARN_LEGACY_SYNTAX_CONVERTED';\nexports[3006] = 'ER_BINLOG_UNSAFE_FULLTEXT_PLUGIN';\nexports[3007] = 'ER_CANNOT_DISCARD_TEMPORARY_TABLE';\nexports[3008] = 'ER_FK_DEPTH_EXCEEDED';\nexports[3009] = 'ER_COL_COUNT_DOESNT_MATCH_PLEASE_UPDATE_V2';\nexports[3010] = 'ER_WARN_TRIGGER_DOESNT_HAVE_CREATED';\nexports[3011] = 'ER_REFERENCED_TRG_DOES_NOT_EXIST';\nexports[3012] = 'ER_EXPLAIN_NOT_SUPPORTED';\nexports[3013] = 'ER_INVALID_FIELD_SIZE';\nexports[3014] = 'ER_MISSING_HA_CREATE_OPTION';\nexports[3015] = 'ER_ENGINE_OUT_OF_MEMORY';\nexports[3016] = 'ER_PASSWORD_EXPIRE_ANONYMOUS_USER';\nexports[3017] = 'ER_REPLICA_SQL_THREAD_MUST_STOP';\nexports[3018] = 'ER_NO_FT_MATERIALIZED_SUBQUERY';\nexports[3019] = 'ER_INNODB_UNDO_LOG_FULL';\nexports[3020] = 'ER_INVALID_ARGUMENT_FOR_LOGARITHM';\nexports[3021] = 'ER_REPLICA_CHANNEL_IO_THREAD_MUST_STOP';\nexports[3022] = 'ER_WARN_OPEN_TEMP_TABLES_MUST_BE_ZERO';\nexports[3023] = 'ER_WARN_ONLY_SOURCE_LOG_FILE_NO_POS';\nexports[3024] = 'ER_QUERY_TIMEOUT';\nexports[3025] = 'ER_NON_RO_SELECT_DISABLE_TIMER';\nexports[3026] = 'ER_DUP_LIST_ENTRY';\nexports[3027] = 'ER_SQL_MODE_NO_EFFECT';\nexports[3028] = 'ER_AGGREGATE_ORDER_FOR_UNION';\nexports[3029] = 'ER_AGGREGATE_ORDER_NON_AGG_QUERY';\nexports[3030] = 'ER_REPLICA_WORKER_STOPPED_PREVIOUS_THD_ERROR';\nexports[3031] = 'ER_DONT_SUPPORT_REPLICA_PRESERVE_COMMIT_ORDER';\nexports[3032] = 'ER_SERVER_OFFLINE_MODE';\nexports[3033] = 'ER_GIS_DIFFERENT_SRIDS';\nexports[3034] = 'ER_GIS_UNSUPPORTED_ARGUMENT';\nexports[3035] = 'ER_GIS_UNKNOWN_ERROR';\nexports[3036] = 'ER_GIS_UNKNOWN_EXCEPTION';\nexports[3037] = 'ER_GIS_INVALID_DATA';\nexports[3038] = 'ER_BOOST_GEOMETRY_EMPTY_INPUT_EXCEPTION';\nexports[3039] = 'ER_BOOST_GEOMETRY_CENTROID_EXCEPTION';\nexports[3040] = 'ER_BOOST_GEOMETRY_OVERLAY_INVALID_INPUT_EXCEPTION';\nexports[3041] = 'ER_BOOST_GEOMETRY_TURN_INFO_EXCEPTION';\nexports[3042] = 'ER_BOOST_GEOMETRY_SELF_INTERSECTION_POINT_EXCEPTION';\nexports[3043] = 'ER_BOOST_GEOMETRY_UNKNOWN_EXCEPTION';\nexports[3044] = 'ER_STD_BAD_ALLOC_ERROR';\nexports[3045] = 'ER_STD_DOMAIN_ERROR';\nexports[3046] = 'ER_STD_LENGTH_ERROR';\nexports[3047] = 'ER_STD_INVALID_ARGUMENT';\nexports[3048] = 'ER_STD_OUT_OF_RANGE_ERROR';\nexports[3049] = 'ER_STD_OVERFLOW_ERROR';\nexports[3050] = 'ER_STD_RANGE_ERROR';\nexports[3051] = 'ER_STD_UNDERFLOW_ERROR';\nexports[3052] = 'ER_STD_LOGIC_ERROR';\nexports[3053] = 'ER_STD_RUNTIME_ERROR';\nexports[3054] = 'ER_STD_UNKNOWN_EXCEPTION';\nexports[3055] = 'ER_GIS_DATA_WRONG_ENDIANESS';\nexports[3056] = 'ER_CHANGE_SOURCE_PASSWORD_LENGTH';\nexports[3057] = 'ER_USER_LOCK_WRONG_NAME';\nexports[3058] = 'ER_USER_LOCK_DEADLOCK';\nexports[3059] = 'ER_REPLACE_INACCESSIBLE_ROWS';\nexports[3060] = 'ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_GIS';\nexports[3061] = 'ER_ILLEGAL_USER_VAR';\nexports[3062] = 'ER_GTID_MODE_OFF';\nexports[3063] = 'ER_UNSUPPORTED_BY_REPLICATION_THREAD';\nexports[3064] = 'ER_INCORRECT_TYPE';\nexports[3065] = 'ER_FIELD_IN_ORDER_NOT_SELECT';\nexports[3066] = 'ER_AGGREGATE_IN_ORDER_NOT_SELECT';\nexports[3067] = 'ER_INVALID_RPL_WILD_TABLE_FILTER_PATTERN';\nexports[3068] = 'ER_NET_OK_PACKET_TOO_LARGE';\nexports[3069] = 'ER_INVALID_JSON_DATA';\nexports[3070] = 'ER_INVALID_GEOJSON_MISSING_MEMBER';\nexports[3071] = 'ER_INVALID_GEOJSON_WRONG_TYPE';\nexports[3072] = 'ER_INVALID_GEOJSON_UNSPECIFIED';\nexports[3073] = 'ER_DIMENSION_UNSUPPORTED';\nexports[3074] = 'ER_REPLICA_CHANNEL_DOES_NOT_EXIST';\nexports[3075] = 'ER_SLAVE_MULTIPLE_CHANNELS_HOST_PORT';\nexports[3076] = 'ER_REPLICA_CHANNEL_NAME_INVALID_OR_TOO_LONG';\nexports[3077] = 'ER_REPLICA_NEW_CHANNEL_WRONG_REPOSITORY';\nexports[3078] = 'ER_SLAVE_CHANNEL_DELETE';\nexports[3079] = 'ER_REPLICA_MULTIPLE_CHANNELS_CMD';\nexports[3080] = 'ER_REPLICA_MAX_CHANNELS_EXCEEDED';\nexports[3081] = 'ER_REPLICA_CHANNEL_MUST_STOP';\nexports[3082] = 'ER_REPLICA_CHANNEL_NOT_RUNNING';\nexports[3083] = 'ER_REPLICA_CHANNEL_WAS_RUNNING';\nexports[3084] = 'ER_REPLICA_CHANNEL_WAS_NOT_RUNNING';\nexports[3085] = 'ER_REPLICA_CHANNEL_SQL_THREAD_MUST_STOP';\nexports[3086] = 'ER_REPLICA_CHANNEL_SQL_SKIP_COUNTER';\nexports[3087] = 'ER_WRONG_FIELD_WITH_GROUP_V2';\nexports[3088] = 'ER_MIX_OF_GROUP_FUNC_AND_FIELDS_V2';\nexports[3089] = 'ER_WARN_DEPRECATED_SYSVAR_UPDATE';\nexports[3090] = 'ER_WARN_DEPRECATED_SQLMODE';\nexports[3091] = 'ER_CANNOT_LOG_PARTIAL_DROP_DATABASE_WITH_GTID';\nexports[3092] = 'ER_GROUP_REPLICATION_CONFIGURATION';\nexports[3093] = 'ER_GROUP_REPLICATION_RUNNING';\nexports[3094] = 'ER_GROUP_REPLICATION_APPLIER_INIT_ERROR';\nexports[3095] = 'ER_GROUP_REPLICATION_STOP_APPLIER_THREAD_TIMEOUT';\nexports[3096] = 'ER_GROUP_REPLICATION_COMMUNICATION_LAYER_SESSION_ERROR';\nexports[3097] = 'ER_GROUP_REPLICATION_COMMUNICATION_LAYER_JOIN_ERROR';\nexports[3098] = 'ER_BEFORE_DML_VALIDATION_ERROR';\nexports[3099] = 'ER_PREVENTS_VARIABLE_WITHOUT_RBR';\nexports[3100] = 'ER_RUN_HOOK_ERROR';\nexports[3101] = 'ER_TRANSACTION_ROLLBACK_DURING_COMMIT';\nexports[3102] = 'ER_GENERATED_COLUMN_FUNCTION_IS_NOT_ALLOWED';\nexports[3103] = 'ER_UNSUPPORTED_ALTER_INPLACE_ON_VIRTUAL_COLUMN';\nexports[3104] = 'ER_WRONG_FK_OPTION_FOR_GENERATED_COLUMN';\nexports[3105] = 'ER_NON_DEFAULT_VALUE_FOR_GENERATED_COLUMN';\nexports[3106] = 'ER_UNSUPPORTED_ACTION_ON_GENERATED_COLUMN';\nexports[3107] = 'ER_GENERATED_COLUMN_NON_PRIOR';\nexports[3108] = 'ER_DEPENDENT_BY_GENERATED_COLUMN';\nexports[3109] = 'ER_GENERATED_COLUMN_REF_AUTO_INC';\nexports[3110] = 'ER_FEATURE_NOT_AVAILABLE';\nexports[3111] = 'ER_CANT_SET_GTID_MODE';\nexports[3112] = 'ER_CANT_USE_AUTO_POSITION_WITH_GTID_MODE_OFF';\nexports[3113] = 'ER_CANT_REPLICATE_ANONYMOUS_WITH_AUTO_POSITION';\nexports[3114] = 'ER_CANT_REPLICATE_ANONYMOUS_WITH_GTID_MODE_ON';\nexports[3115] = 'ER_CANT_REPLICATE_GTID_WITH_GTID_MODE_OFF';\nexports[3116] =\n 'ER_CANT_ENFORCE_GTID_CONSISTENCY_WITH_ONGOING_GTID_VIOLATING_TX';\nexports[3117] =\n 'ER_ENFORCE_GTID_CONSISTENCY_WARN_WITH_ONGOING_GTID_VIOLATING_TX';\nexports[3118] = 'ER_ACCOUNT_HAS_BEEN_LOCKED';\nexports[3119] = 'ER_WRONG_TABLESPACE_NAME';\nexports[3120] = 'ER_TABLESPACE_IS_NOT_EMPTY';\nexports[3121] = 'ER_WRONG_FILE_NAME';\nexports[3122] = 'ER_BOOST_GEOMETRY_INCONSISTENT_TURNS_EXCEPTION';\nexports[3123] = 'ER_WARN_OPTIMIZER_HINT_SYNTAX_ERROR';\nexports[3124] = 'ER_WARN_BAD_MAX_EXECUTION_TIME';\nexports[3125] = 'ER_WARN_UNSUPPORTED_MAX_EXECUTION_TIME';\nexports[3126] = 'ER_WARN_CONFLICTING_HINT';\nexports[3127] = 'ER_WARN_UNKNOWN_QB_NAME';\nexports[3128] = 'ER_UNRESOLVED_HINT_NAME';\nexports[3129] = 'ER_WARN_ON_MODIFYING_GTID_EXECUTED_TABLE';\nexports[3130] = 'ER_PLUGGABLE_PROTOCOL_COMMAND_NOT_SUPPORTED';\nexports[3131] = 'ER_LOCKING_SERVICE_WRONG_NAME';\nexports[3132] = 'ER_LOCKING_SERVICE_DEADLOCK';\nexports[3133] = 'ER_LOCKING_SERVICE_TIMEOUT';\nexports[3134] = 'ER_GIS_MAX_POINTS_IN_GEOMETRY_OVERFLOWED';\nexports[3135] = 'ER_SQL_MODE_MERGED';\nexports[3136] = 'ER_VTOKEN_PLUGIN_TOKEN_MISMATCH';\nexports[3137] = 'ER_VTOKEN_PLUGIN_TOKEN_NOT_FOUND';\nexports[3138] = 'ER_CANT_SET_VARIABLE_WHEN_OWNING_GTID';\nexports[3139] = 'ER_REPLICA_CHANNEL_OPERATION_NOT_ALLOWED';\nexports[3140] = 'ER_INVALID_JSON_TEXT';\nexports[3141] = 'ER_INVALID_JSON_TEXT_IN_PARAM';\nexports[3142] = 'ER_INVALID_JSON_BINARY_DATA';\nexports[3143] = 'ER_INVALID_JSON_PATH';\nexports[3144] = 'ER_INVALID_JSON_CHARSET';\nexports[3145] = 'ER_INVALID_JSON_CHARSET_IN_FUNCTION';\nexports[3146] = 'ER_INVALID_TYPE_FOR_JSON';\nexports[3147] = 'ER_INVALID_CAST_TO_JSON';\nexports[3148] = 'ER_INVALID_JSON_PATH_CHARSET';\nexports[3149] = 'ER_INVALID_JSON_PATH_WILDCARD';\nexports[3150] = 'ER_JSON_VALUE_TOO_BIG';\nexports[3151] = 'ER_JSON_KEY_TOO_BIG';\nexports[3152] = 'ER_JSON_USED_AS_KEY';\nexports[3153] = 'ER_JSON_VACUOUS_PATH';\nexports[3154] = 'ER_JSON_BAD_ONE_OR_ALL_ARG';\nexports[3155] = 'ER_NUMERIC_JSON_VALUE_OUT_OF_RANGE';\nexports[3156] = 'ER_INVALID_JSON_VALUE_FOR_CAST';\nexports[3157] = 'ER_JSON_DOCUMENT_TOO_DEEP';\nexports[3158] = 'ER_JSON_DOCUMENT_NULL_KEY';\nexports[3159] = 'ER_SECURE_TRANSPORT_REQUIRED';\nexports[3160] = 'ER_NO_SECURE_TRANSPORTS_CONFIGURED';\nexports[3161] = 'ER_DISABLED_STORAGE_ENGINE';\nexports[3162] = 'ER_USER_DOES_NOT_EXIST';\nexports[3163] = 'ER_USER_ALREADY_EXISTS';\nexports[3164] = 'ER_AUDIT_API_ABORT';\nexports[3165] = 'ER_INVALID_JSON_PATH_ARRAY_CELL';\nexports[3166] = 'ER_BUFPOOL_RESIZE_INPROGRESS';\nexports[3167] = 'ER_FEATURE_DISABLED_SEE_DOC';\nexports[3168] = 'ER_SERVER_ISNT_AVAILABLE';\nexports[3169] = 'ER_SESSION_WAS_KILLED';\nexports[3170] = 'ER_CAPACITY_EXCEEDED';\nexports[3171] = 'ER_CAPACITY_EXCEEDED_IN_RANGE_OPTIMIZER';\nexports[3172] = 'ER_TABLE_NEEDS_UPG_PART';\nexports[3173] = 'ER_CANT_WAIT_FOR_EXECUTED_GTID_SET_WHILE_OWNING_A_GTID';\nexports[3174] = 'ER_CANNOT_ADD_FOREIGN_BASE_COL_VIRTUAL';\nexports[3175] = 'ER_CANNOT_CREATE_VIRTUAL_INDEX_CONSTRAINT';\nexports[3176] = 'ER_ERROR_ON_MODIFYING_GTID_EXECUTED_TABLE';\nexports[3177] = 'ER_LOCK_REFUSED_BY_ENGINE';\nexports[3178] = 'ER_UNSUPPORTED_ALTER_ONLINE_ON_VIRTUAL_COLUMN';\nexports[3179] = 'ER_MASTER_KEY_ROTATION_NOT_SUPPORTED_BY_SE';\nexports[3180] = 'ER_MASTER_KEY_ROTATION_ERROR_BY_SE';\nexports[3181] = 'ER_MASTER_KEY_ROTATION_BINLOG_FAILED';\nexports[3182] = 'ER_MASTER_KEY_ROTATION_SE_UNAVAILABLE';\nexports[3183] = 'ER_TABLESPACE_CANNOT_ENCRYPT';\nexports[3184] = 'ER_INVALID_ENCRYPTION_OPTION';\nexports[3185] = 'ER_CANNOT_FIND_KEY_IN_KEYRING';\nexports[3186] = 'ER_CAPACITY_EXCEEDED_IN_PARSER';\nexports[3187] = 'ER_UNSUPPORTED_ALTER_ENCRYPTION_INPLACE';\nexports[3188] = 'ER_KEYRING_UDF_KEYRING_SERVICE_ERROR';\nexports[3189] = 'ER_USER_COLUMN_OLD_LENGTH';\nexports[3190] = 'ER_CANT_RESET_SOURCE';\nexports[3191] = 'ER_GROUP_REPLICATION_MAX_GROUP_SIZE';\nexports[3192] = 'ER_CANNOT_ADD_FOREIGN_BASE_COL_STORED';\nexports[3193] = 'ER_TABLE_REFERENCED';\nexports[3194] = 'ER_PARTITION_ENGINE_DEPRECATED_FOR_TABLE';\nexports[3195] = 'ER_WARN_USING_GEOMFROMWKB_TO_SET_SRID_ZERO';\nexports[3196] = 'ER_WARN_USING_GEOMFROMWKB_TO_SET_SRID';\nexports[3197] = 'ER_XA_RETRY';\nexports[3198] = 'ER_KEYRING_AWS_UDF_AWS_KMS_ERROR';\nexports[3199] = 'ER_BINLOG_UNSAFE_XA';\nexports[3200] = 'ER_UDF_ERROR';\nexports[3201] = 'ER_KEYRING_MIGRATION_FAILURE';\nexports[3202] = 'ER_KEYRING_ACCESS_DENIED_ERROR';\nexports[3203] = 'ER_KEYRING_MIGRATION_STATUS';\nexports[3204] = 'ER_PLUGIN_FAILED_TO_OPEN_TABLES';\nexports[3205] = 'ER_PLUGIN_FAILED_TO_OPEN_TABLE';\nexports[3206] = 'ER_AUDIT_LOG_NO_KEYRING_PLUGIN_INSTALLED';\nexports[3207] = 'ER_AUDIT_LOG_ENCRYPTION_PASSWORD_HAS_NOT_BEEN_SET';\nexports[3208] = 'ER_AUDIT_LOG_COULD_NOT_CREATE_AES_KEY';\nexports[3209] = 'ER_AUDIT_LOG_ENCRYPTION_PASSWORD_CANNOT_BE_FETCHED';\nexports[3210] = 'ER_AUDIT_LOG_JSON_FILTERING_NOT_ENABLED';\nexports[3211] = 'ER_AUDIT_LOG_UDF_INSUFFICIENT_PRIVILEGE';\nexports[3212] = 'ER_AUDIT_LOG_SUPER_PRIVILEGE_REQUIRED';\nexports[3213] = 'ER_COULD_NOT_REINITIALIZE_AUDIT_LOG_FILTERS';\nexports[3214] = 'ER_AUDIT_LOG_UDF_INVALID_ARGUMENT_TYPE';\nexports[3215] = 'ER_AUDIT_LOG_UDF_INVALID_ARGUMENT_COUNT';\nexports[3216] = 'ER_AUDIT_LOG_HAS_NOT_BEEN_INSTALLED';\nexports[3217] = 'ER_AUDIT_LOG_UDF_READ_INVALID_MAX_ARRAY_LENGTH_ARG_TYPE';\nexports[3218] = 'ER_AUDIT_LOG_UDF_READ_INVALID_MAX_ARRAY_LENGTH_ARG_VALUE';\nexports[3219] = 'ER_AUDIT_LOG_JSON_FILTER_PARSING_ERROR';\nexports[3220] = 'ER_AUDIT_LOG_JSON_FILTER_NAME_CANNOT_BE_EMPTY';\nexports[3221] = 'ER_AUDIT_LOG_JSON_USER_NAME_CANNOT_BE_EMPTY';\nexports[3222] = 'ER_AUDIT_LOG_JSON_FILTER_DOES_NOT_EXISTS';\nexports[3223] = 'ER_AUDIT_LOG_USER_FIRST_CHARACTER_MUST_BE_ALPHANUMERIC';\nexports[3224] = 'ER_AUDIT_LOG_USER_NAME_INVALID_CHARACTER';\nexports[3225] = 'ER_AUDIT_LOG_HOST_NAME_INVALID_CHARACTER';\nexports[3226] = 'WARN_DEPRECATED_MAXDB_SQL_MODE_FOR_TIMESTAMP';\nexports[3227] = 'ER_XA_REPLICATION_FILTERS';\nexports[3228] = 'ER_CANT_OPEN_ERROR_LOG';\nexports[3229] = 'ER_GROUPING_ON_TIMESTAMP_IN_DST';\nexports[3230] = 'ER_CANT_START_SERVER_NAMED_PIPE';\nexports[3231] = 'ER_WRITE_SET_EXCEEDS_LIMIT';\nexports[3232] = 'ER_DEPRECATED_TLS_VERSION_SESSION_57';\nexports[3233] = 'ER_WARN_DEPRECATED_TLS_VERSION_57';\nexports[3234] = 'ER_WARN_WRONG_NATIVE_TABLE_STRUCTURE';\nexports[3235] = 'ER_AES_INVALID_KDF_NAME';\nexports[3236] = 'ER_AES_INVALID_KDF_ITERATIONS';\nexports[3237] = 'WARN_AES_KEY_SIZE';\nexports[3238] = 'ER_AES_INVALID_KDF_OPTION_SIZE';\nexports[3500] = 'ER_UNSUPPORT_COMPRESSED_TEMPORARY_TABLE';\nexports[3501] = 'ER_ACL_OPERATION_FAILED';\nexports[3502] = 'ER_UNSUPPORTED_INDEX_ALGORITHM';\nexports[3503] = 'ER_NO_SUCH_DB';\nexports[3504] = 'ER_TOO_BIG_ENUM';\nexports[3505] = 'ER_TOO_LONG_SET_ENUM_VALUE';\nexports[3506] = 'ER_INVALID_DD_OBJECT';\nexports[3507] = 'ER_UPDATING_DD_TABLE';\nexports[3508] = 'ER_INVALID_DD_OBJECT_ID';\nexports[3509] = 'ER_INVALID_DD_OBJECT_NAME';\nexports[3510] = 'ER_TABLESPACE_MISSING_WITH_NAME';\nexports[3511] = 'ER_TOO_LONG_ROUTINE_COMMENT';\nexports[3512] = 'ER_SP_LOAD_FAILED';\nexports[3513] = 'ER_INVALID_BITWISE_OPERANDS_SIZE';\nexports[3514] = 'ER_INVALID_BITWISE_AGGREGATE_OPERANDS_SIZE';\nexports[3515] = 'ER_WARN_UNSUPPORTED_HINT';\nexports[3516] = 'ER_UNEXPECTED_GEOMETRY_TYPE';\nexports[3517] = 'ER_SRS_PARSE_ERROR';\nexports[3518] = 'ER_SRS_PROJ_PARAMETER_MISSING';\nexports[3519] = 'ER_WARN_SRS_NOT_FOUND';\nexports[3520] = 'ER_SRS_NOT_CARTESIAN';\nexports[3521] = 'ER_SRS_NOT_CARTESIAN_UNDEFINED';\nexports[3522] = 'ER_PK_INDEX_CANT_BE_INVISIBLE';\nexports[3523] = 'ER_UNKNOWN_AUTHID';\nexports[3524] = 'ER_FAILED_ROLE_GRANT';\nexports[3525] = 'ER_OPEN_ROLE_TABLES';\nexports[3526] = 'ER_FAILED_DEFAULT_ROLES';\nexports[3527] = 'ER_COMPONENTS_NO_SCHEME';\nexports[3528] = 'ER_COMPONENTS_NO_SCHEME_SERVICE';\nexports[3529] = 'ER_COMPONENTS_CANT_LOAD';\nexports[3530] = 'ER_ROLE_NOT_GRANTED';\nexports[3531] = 'ER_FAILED_REVOKE_ROLE';\nexports[3532] = 'ER_RENAME_ROLE';\nexports[3533] = 'ER_COMPONENTS_CANT_ACQUIRE_SERVICE_IMPLEMENTATION';\nexports[3534] = 'ER_COMPONENTS_CANT_SATISFY_DEPENDENCY';\nexports[3535] = 'ER_COMPONENTS_LOAD_CANT_REGISTER_SERVICE_IMPLEMENTATION';\nexports[3536] = 'ER_COMPONENTS_LOAD_CANT_INITIALIZE';\nexports[3537] = 'ER_COMPONENTS_UNLOAD_NOT_LOADED';\nexports[3538] = 'ER_COMPONENTS_UNLOAD_CANT_DEINITIALIZE';\nexports[3539] = 'ER_COMPONENTS_CANT_RELEASE_SERVICE';\nexports[3540] = 'ER_COMPONENTS_UNLOAD_CANT_UNREGISTER_SERVICE';\nexports[3541] = 'ER_COMPONENTS_CANT_UNLOAD';\nexports[3542] = 'ER_WARN_UNLOAD_THE_NOT_PERSISTED';\nexports[3543] = 'ER_COMPONENT_TABLE_INCORRECT';\nexports[3544] = 'ER_COMPONENT_MANIPULATE_ROW_FAILED';\nexports[3545] = 'ER_COMPONENTS_UNLOAD_DUPLICATE_IN_GROUP';\nexports[3546] = 'ER_CANT_SET_GTID_PURGED_DUE_SETS_CONSTRAINTS';\nexports[3547] = 'ER_CANNOT_LOCK_USER_MANAGEMENT_CACHES';\nexports[3548] = 'ER_SRS_NOT_FOUND';\nexports[3549] = 'ER_VARIABLE_NOT_PERSISTED';\nexports[3550] = 'ER_IS_QUERY_INVALID_CLAUSE';\nexports[3551] = 'ER_UNABLE_TO_STORE_STATISTICS';\nexports[3552] = 'ER_NO_SYSTEM_SCHEMA_ACCESS';\nexports[3553] = 'ER_NO_SYSTEM_TABLESPACE_ACCESS';\nexports[3554] = 'ER_NO_SYSTEM_TABLE_ACCESS';\nexports[3555] = 'ER_NO_SYSTEM_TABLE_ACCESS_FOR_DICTIONARY_TABLE';\nexports[3556] = 'ER_NO_SYSTEM_TABLE_ACCESS_FOR_SYSTEM_TABLE';\nexports[3557] = 'ER_NO_SYSTEM_TABLE_ACCESS_FOR_TABLE';\nexports[3558] = 'ER_INVALID_OPTION_KEY';\nexports[3559] = 'ER_INVALID_OPTION_VALUE';\nexports[3560] = 'ER_INVALID_OPTION_KEY_VALUE_PAIR';\nexports[3561] = 'ER_INVALID_OPTION_START_CHARACTER';\nexports[3562] = 'ER_INVALID_OPTION_END_CHARACTER';\nexports[3563] = 'ER_INVALID_OPTION_CHARACTERS';\nexports[3564] = 'ER_DUPLICATE_OPTION_KEY';\nexports[3565] = 'ER_WARN_SRS_NOT_FOUND_AXIS_ORDER';\nexports[3566] = 'ER_NO_ACCESS_TO_NATIVE_FCT';\nexports[3567] = 'ER_RESET_SOURCE_TO_VALUE_OUT_OF_RANGE';\nexports[3568] = 'ER_UNRESOLVED_TABLE_LOCK';\nexports[3569] = 'ER_DUPLICATE_TABLE_LOCK';\nexports[3570] = 'ER_BINLOG_UNSAFE_SKIP_LOCKED';\nexports[3571] = 'ER_BINLOG_UNSAFE_NOWAIT';\nexports[3572] = 'ER_LOCK_NOWAIT';\nexports[3573] = 'ER_CTE_RECURSIVE_REQUIRES_UNION';\nexports[3574] = 'ER_CTE_RECURSIVE_REQUIRES_NONRECURSIVE_FIRST';\nexports[3575] = 'ER_CTE_RECURSIVE_FORBIDS_AGGREGATION';\nexports[3576] = 'ER_CTE_RECURSIVE_FORBIDDEN_JOIN_ORDER';\nexports[3577] = 'ER_CTE_RECURSIVE_REQUIRES_SINGLE_REFERENCE';\nexports[3578] = 'ER_SWITCH_TMP_ENGINE';\nexports[3579] = 'ER_WINDOW_NO_SUCH_WINDOW';\nexports[3580] = 'ER_WINDOW_CIRCULARITY_IN_WINDOW_GRAPH';\nexports[3581] = 'ER_WINDOW_NO_CHILD_PARTITIONING';\nexports[3582] = 'ER_WINDOW_NO_INHERIT_FRAME';\nexports[3583] = 'ER_WINDOW_NO_REDEFINE_ORDER_BY';\nexports[3584] = 'ER_WINDOW_FRAME_START_ILLEGAL';\nexports[3585] = 'ER_WINDOW_FRAME_END_ILLEGAL';\nexports[3586] = 'ER_WINDOW_FRAME_ILLEGAL';\nexports[3587] = 'ER_WINDOW_RANGE_FRAME_ORDER_TYPE';\nexports[3588] = 'ER_WINDOW_RANGE_FRAME_TEMPORAL_TYPE';\nexports[3589] = 'ER_WINDOW_RANGE_FRAME_NUMERIC_TYPE';\nexports[3590] = 'ER_WINDOW_RANGE_BOUND_NOT_CONSTANT';\nexports[3591] = 'ER_WINDOW_DUPLICATE_NAME';\nexports[3592] = 'ER_WINDOW_ILLEGAL_ORDER_BY';\nexports[3593] = 'ER_WINDOW_INVALID_WINDOW_FUNC_USE';\nexports[3594] = 'ER_WINDOW_INVALID_WINDOW_FUNC_ALIAS_USE';\nexports[3595] = 'ER_WINDOW_NESTED_WINDOW_FUNC_USE_IN_WINDOW_SPEC';\nexports[3596] = 'ER_WINDOW_ROWS_INTERVAL_USE';\nexports[3597] = 'ER_WINDOW_NO_GROUP_ORDER';\nexports[3598] = 'ER_WINDOW_EXPLAIN_JSON';\nexports[3599] = 'ER_WINDOW_FUNCTION_IGNORES_FRAME';\nexports[3600] = 'ER_WL9236_NOW';\nexports[3601] = 'ER_INVALID_NO_OF_ARGS';\nexports[3602] = 'ER_FIELD_IN_GROUPING_NOT_GROUP_BY';\nexports[3603] = 'ER_TOO_LONG_TABLESPACE_COMMENT';\nexports[3604] = 'ER_ENGINE_CANT_DROP_TABLE';\nexports[3605] = 'ER_ENGINE_CANT_DROP_MISSING_TABLE';\nexports[3606] = 'ER_TABLESPACE_DUP_FILENAME';\nexports[3607] = 'ER_DB_DROP_RMDIR2';\nexports[3608] = 'ER_IMP_NO_FILES_MATCHED';\nexports[3609] = 'ER_IMP_SCHEMA_DOES_NOT_EXIST';\nexports[3610] = 'ER_IMP_TABLE_ALREADY_EXISTS';\nexports[3611] = 'ER_IMP_INCOMPATIBLE_MYSQLD_VERSION';\nexports[3612] = 'ER_IMP_INCOMPATIBLE_DD_VERSION';\nexports[3613] = 'ER_IMP_INCOMPATIBLE_SDI_VERSION';\nexports[3614] = 'ER_WARN_INVALID_HINT';\nexports[3615] = 'ER_VAR_DOES_NOT_EXIST';\nexports[3616] = 'ER_LONGITUDE_OUT_OF_RANGE';\nexports[3617] = 'ER_LATITUDE_OUT_OF_RANGE';\nexports[3618] = 'ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS';\nexports[3619] = 'ER_ILLEGAL_PRIVILEGE_LEVEL';\nexports[3620] = 'ER_NO_SYSTEM_VIEW_ACCESS';\nexports[3621] = 'ER_COMPONENT_FILTER_FLABBERGASTED';\nexports[3622] = 'ER_PART_EXPR_TOO_LONG';\nexports[3623] = 'ER_UDF_DROP_DYNAMICALLY_REGISTERED';\nexports[3624] = 'ER_UNABLE_TO_STORE_COLUMN_STATISTICS';\nexports[3625] = 'ER_UNABLE_TO_UPDATE_COLUMN_STATISTICS';\nexports[3626] = 'ER_UNABLE_TO_DROP_COLUMN_STATISTICS';\nexports[3627] = 'ER_UNABLE_TO_BUILD_HISTOGRAM';\nexports[3628] = 'ER_MANDATORY_ROLE';\nexports[3629] = 'ER_MISSING_TABLESPACE_FILE';\nexports[3630] = 'ER_PERSIST_ONLY_ACCESS_DENIED_ERROR';\nexports[3631] = 'ER_CMD_NEED_SUPER';\nexports[3632] = 'ER_PATH_IN_DATADIR';\nexports[3633] = 'ER_CLONE_DDL_IN_PROGRESS';\nexports[3634] = 'ER_CLONE_TOO_MANY_CONCURRENT_CLONES';\nexports[3635] = 'ER_APPLIER_LOG_EVENT_VALIDATION_ERROR';\nexports[3636] = 'ER_CTE_MAX_RECURSION_DEPTH';\nexports[3637] = 'ER_NOT_HINT_UPDATABLE_VARIABLE';\nexports[3638] = 'ER_CREDENTIALS_CONTRADICT_TO_HISTORY';\nexports[3639] = 'ER_WARNING_PASSWORD_HISTORY_CLAUSES_VOID';\nexports[3640] = 'ER_CLIENT_DOES_NOT_SUPPORT';\nexports[3641] = 'ER_I_S_SKIPPED_TABLESPACE';\nexports[3642] = 'ER_TABLESPACE_ENGINE_MISMATCH';\nexports[3643] = 'ER_WRONG_SRID_FOR_COLUMN';\nexports[3644] = 'ER_CANNOT_ALTER_SRID_DUE_TO_INDEX';\nexports[3645] = 'ER_WARN_BINLOG_PARTIAL_UPDATES_DISABLED';\nexports[3646] = 'ER_WARN_BINLOG_V1_ROW_EVENTS_DISABLED';\nexports[3647] = 'ER_WARN_BINLOG_PARTIAL_UPDATES_SUGGESTS_PARTIAL_IMAGES';\nexports[3648] = 'ER_COULD_NOT_APPLY_JSON_DIFF';\nexports[3649] = 'ER_CORRUPTED_JSON_DIFF';\nexports[3650] = 'ER_RESOURCE_GROUP_EXISTS';\nexports[3651] = 'ER_RESOURCE_GROUP_NOT_EXISTS';\nexports[3652] = 'ER_INVALID_VCPU_ID';\nexports[3653] = 'ER_INVALID_VCPU_RANGE';\nexports[3654] = 'ER_INVALID_THREAD_PRIORITY';\nexports[3655] = 'ER_DISALLOWED_OPERATION';\nexports[3656] = 'ER_RESOURCE_GROUP_BUSY';\nexports[3657] = 'ER_RESOURCE_GROUP_DISABLED';\nexports[3658] = 'ER_FEATURE_UNSUPPORTED';\nexports[3659] = 'ER_ATTRIBUTE_IGNORED';\nexports[3660] = 'ER_INVALID_THREAD_ID';\nexports[3661] = 'ER_RESOURCE_GROUP_BIND_FAILED';\nexports[3662] = 'ER_INVALID_USE_OF_FORCE_OPTION';\nexports[3663] = 'ER_GROUP_REPLICATION_COMMAND_FAILURE';\nexports[3664] = 'ER_SDI_OPERATION_FAILED';\nexports[3665] = 'ER_MISSING_JSON_TABLE_VALUE';\nexports[3666] = 'ER_WRONG_JSON_TABLE_VALUE';\nexports[3667] = 'ER_TF_MUST_HAVE_ALIAS';\nexports[3668] = 'ER_TF_FORBIDDEN_JOIN_TYPE';\nexports[3669] = 'ER_JT_VALUE_OUT_OF_RANGE';\nexports[3670] = 'ER_JT_MAX_NESTED_PATH';\nexports[3671] = 'ER_PASSWORD_EXPIRATION_NOT_SUPPORTED_BY_AUTH_METHOD';\nexports[3672] = 'ER_INVALID_GEOJSON_CRS_NOT_TOP_LEVEL';\nexports[3673] = 'ER_BAD_NULL_ERROR_NOT_IGNORED';\nexports[3674] = 'WARN_USELESS_SPATIAL_INDEX';\nexports[3675] = 'ER_DISK_FULL_NOWAIT';\nexports[3676] = 'ER_PARSE_ERROR_IN_DIGEST_FN';\nexports[3677] = 'ER_UNDISCLOSED_PARSE_ERROR_IN_DIGEST_FN';\nexports[3678] = 'ER_SCHEMA_DIR_EXISTS';\nexports[3679] = 'ER_SCHEMA_DIR_MISSING';\nexports[3680] = 'ER_SCHEMA_DIR_CREATE_FAILED';\nexports[3681] = 'ER_SCHEMA_DIR_UNKNOWN';\nexports[3682] = 'ER_ONLY_IMPLEMENTED_FOR_SRID_0_AND_4326';\nexports[3683] = 'ER_BINLOG_EXPIRE_LOG_DAYS_AND_SECS_USED_TOGETHER';\nexports[3684] = 'ER_REGEXP_BUFFER_OVERFLOW';\nexports[3685] = 'ER_REGEXP_ILLEGAL_ARGUMENT';\nexports[3686] = 'ER_REGEXP_INDEX_OUTOFBOUNDS_ERROR';\nexports[3687] = 'ER_REGEXP_INTERNAL_ERROR';\nexports[3688] = 'ER_REGEXP_RULE_SYNTAX';\nexports[3689] = 'ER_REGEXP_BAD_ESCAPE_SEQUENCE';\nexports[3690] = 'ER_REGEXP_UNIMPLEMENTED';\nexports[3691] = 'ER_REGEXP_MISMATCHED_PAREN';\nexports[3692] = 'ER_REGEXP_BAD_INTERVAL';\nexports[3693] = 'ER_REGEXP_MAX_LT_MIN';\nexports[3694] = 'ER_REGEXP_INVALID_BACK_REF';\nexports[3695] = 'ER_REGEXP_LOOK_BEHIND_LIMIT';\nexports[3696] = 'ER_REGEXP_MISSING_CLOSE_BRACKET';\nexports[3697] = 'ER_REGEXP_INVALID_RANGE';\nexports[3698] = 'ER_REGEXP_STACK_OVERFLOW';\nexports[3699] = 'ER_REGEXP_TIME_OUT';\nexports[3700] = 'ER_REGEXP_PATTERN_TOO_BIG';\nexports[3701] = 'ER_CANT_SET_ERROR_LOG_SERVICE';\nexports[3702] = 'ER_EMPTY_PIPELINE_FOR_ERROR_LOG_SERVICE';\nexports[3703] = 'ER_COMPONENT_FILTER_DIAGNOSTICS';\nexports[3704] = 'ER_NOT_IMPLEMENTED_FOR_CARTESIAN_SRS';\nexports[3705] = 'ER_NOT_IMPLEMENTED_FOR_PROJECTED_SRS';\nexports[3706] = 'ER_NONPOSITIVE_RADIUS';\nexports[3707] = 'ER_RESTART_SERVER_FAILED';\nexports[3708] = 'ER_SRS_MISSING_MANDATORY_ATTRIBUTE';\nexports[3709] = 'ER_SRS_MULTIPLE_ATTRIBUTE_DEFINITIONS';\nexports[3710] = 'ER_SRS_NAME_CANT_BE_EMPTY_OR_WHITESPACE';\nexports[3711] = 'ER_SRS_ORGANIZATION_CANT_BE_EMPTY_OR_WHITESPACE';\nexports[3712] = 'ER_SRS_ID_ALREADY_EXISTS';\nexports[3713] = 'ER_WARN_SRS_ID_ALREADY_EXISTS';\nexports[3714] = 'ER_CANT_MODIFY_SRID_0';\nexports[3715] = 'ER_WARN_RESERVED_SRID_RANGE';\nexports[3716] = 'ER_CANT_MODIFY_SRS_USED_BY_COLUMN';\nexports[3717] = 'ER_SRS_INVALID_CHARACTER_IN_ATTRIBUTE';\nexports[3718] = 'ER_SRS_ATTRIBUTE_STRING_TOO_LONG';\nexports[3719] = 'ER_DEPRECATED_UTF8_ALIAS';\nexports[3720] = 'ER_DEPRECATED_NATIONAL';\nexports[3721] = 'ER_INVALID_DEFAULT_UTF8MB4_COLLATION';\nexports[3722] = 'ER_UNABLE_TO_COLLECT_LOG_STATUS';\nexports[3723] = 'ER_RESERVED_TABLESPACE_NAME';\nexports[3724] = 'ER_UNABLE_TO_SET_OPTION';\nexports[3725] = 'ER_REPLICA_POSSIBLY_DIVERGED_AFTER_DDL';\nexports[3726] = 'ER_SRS_NOT_GEOGRAPHIC';\nexports[3727] = 'ER_POLYGON_TOO_LARGE';\nexports[3728] = 'ER_SPATIAL_UNIQUE_INDEX';\nexports[3729] = 'ER_INDEX_TYPE_NOT_SUPPORTED_FOR_SPATIAL_INDEX';\nexports[3730] = 'ER_FK_CANNOT_DROP_PARENT';\nexports[3731] = 'ER_GEOMETRY_PARAM_LONGITUDE_OUT_OF_RANGE';\nexports[3732] = 'ER_GEOMETRY_PARAM_LATITUDE_OUT_OF_RANGE';\nexports[3733] = 'ER_FK_CANNOT_USE_VIRTUAL_COLUMN';\nexports[3734] = 'ER_FK_NO_COLUMN_PARENT';\nexports[3735] = 'ER_CANT_SET_ERROR_SUPPRESSION_LIST';\nexports[3736] = 'ER_SRS_GEOGCS_INVALID_AXES';\nexports[3737] = 'ER_SRS_INVALID_SEMI_MAJOR_AXIS';\nexports[3738] = 'ER_SRS_INVALID_INVERSE_FLATTENING';\nexports[3739] = 'ER_SRS_INVALID_ANGULAR_UNIT';\nexports[3740] = 'ER_SRS_INVALID_PRIME_MERIDIAN';\nexports[3741] = 'ER_TRANSFORM_SOURCE_SRS_NOT_SUPPORTED';\nexports[3742] = 'ER_TRANSFORM_TARGET_SRS_NOT_SUPPORTED';\nexports[3743] = 'ER_TRANSFORM_SOURCE_SRS_MISSING_TOWGS84';\nexports[3744] = 'ER_TRANSFORM_TARGET_SRS_MISSING_TOWGS84';\nexports[3745] = 'ER_TEMP_TABLE_PREVENTS_SWITCH_SESSION_BINLOG_FORMAT';\nexports[3746] = 'ER_TEMP_TABLE_PREVENTS_SWITCH_GLOBAL_BINLOG_FORMAT';\nexports[3747] = 'ER_RUNNING_APPLIER_PREVENTS_SWITCH_GLOBAL_BINLOG_FORMAT';\nexports[3748] = 'ER_CLIENT_GTID_UNSAFE_CREATE_DROP_TEMP_TABLE_IN_TRX_IN_SBR';\nexports[3749] = 'ER_XA_CANT_CREATE_MDL_BACKUP';\nexports[3750] = 'ER_TABLE_WITHOUT_PK';\nexports[3751] = 'ER_WARN_DATA_TRUNCATED_FUNCTIONAL_INDEX';\nexports[3752] = 'ER_WARN_DATA_OUT_OF_RANGE_FUNCTIONAL_INDEX';\nexports[3753] = 'ER_FUNCTIONAL_INDEX_ON_JSON_OR_GEOMETRY_FUNCTION';\nexports[3754] = 'ER_FUNCTIONAL_INDEX_REF_AUTO_INCREMENT';\nexports[3755] = 'ER_CANNOT_DROP_COLUMN_FUNCTIONAL_INDEX';\nexports[3756] = 'ER_FUNCTIONAL_INDEX_PRIMARY_KEY';\nexports[3757] = 'ER_FUNCTIONAL_INDEX_ON_LOB';\nexports[3758] = 'ER_FUNCTIONAL_INDEX_FUNCTION_IS_NOT_ALLOWED';\nexports[3759] = 'ER_FULLTEXT_FUNCTIONAL_INDEX';\nexports[3760] = 'ER_SPATIAL_FUNCTIONAL_INDEX';\nexports[3761] = 'ER_WRONG_KEY_COLUMN_FUNCTIONAL_INDEX';\nexports[3762] = 'ER_FUNCTIONAL_INDEX_ON_FIELD';\nexports[3763] = 'ER_GENERATED_COLUMN_NAMED_FUNCTION_IS_NOT_ALLOWED';\nexports[3764] = 'ER_GENERATED_COLUMN_ROW_VALUE';\nexports[3765] = 'ER_GENERATED_COLUMN_VARIABLES';\nexports[3766] = 'ER_DEPENDENT_BY_DEFAULT_GENERATED_VALUE';\nexports[3767] = 'ER_DEFAULT_VAL_GENERATED_NON_PRIOR';\nexports[3768] = 'ER_DEFAULT_VAL_GENERATED_REF_AUTO_INC';\nexports[3769] = 'ER_DEFAULT_VAL_GENERATED_FUNCTION_IS_NOT_ALLOWED';\nexports[3770] = 'ER_DEFAULT_VAL_GENERATED_NAMED_FUNCTION_IS_NOT_ALLOWED';\nexports[3771] = 'ER_DEFAULT_VAL_GENERATED_ROW_VALUE';\nexports[3772] = 'ER_DEFAULT_VAL_GENERATED_VARIABLES';\nexports[3773] = 'ER_DEFAULT_AS_VAL_GENERATED';\nexports[3774] = 'ER_UNSUPPORTED_ACTION_ON_DEFAULT_VAL_GENERATED';\nexports[3775] = 'ER_GTID_UNSAFE_ALTER_ADD_COL_WITH_DEFAULT_EXPRESSION';\nexports[3776] = 'ER_FK_CANNOT_CHANGE_ENGINE';\nexports[3777] = 'ER_WARN_DEPRECATED_USER_SET_EXPR';\nexports[3778] = 'ER_WARN_DEPRECATED_UTF8MB3_COLLATION';\nexports[3779] = 'ER_WARN_DEPRECATED_NESTED_COMMENT_SYNTAX';\nexports[3780] = 'ER_FK_INCOMPATIBLE_COLUMNS';\nexports[3781] = 'ER_GR_HOLD_WAIT_TIMEOUT';\nexports[3782] = 'ER_GR_HOLD_KILLED';\nexports[3783] = 'ER_GR_HOLD_MEMBER_STATUS_ERROR';\nexports[3784] = 'ER_RPL_ENCRYPTION_FAILED_TO_FETCH_KEY';\nexports[3785] = 'ER_RPL_ENCRYPTION_KEY_NOT_FOUND';\nexports[3786] = 'ER_RPL_ENCRYPTION_KEYRING_INVALID_KEY';\nexports[3787] = 'ER_RPL_ENCRYPTION_HEADER_ERROR';\nexports[3788] = 'ER_RPL_ENCRYPTION_FAILED_TO_ROTATE_LOGS';\nexports[3789] = 'ER_RPL_ENCRYPTION_KEY_EXISTS_UNEXPECTED';\nexports[3790] = 'ER_RPL_ENCRYPTION_FAILED_TO_GENERATE_KEY';\nexports[3791] = 'ER_RPL_ENCRYPTION_FAILED_TO_STORE_KEY';\nexports[3792] = 'ER_RPL_ENCRYPTION_FAILED_TO_REMOVE_KEY';\nexports[3793] = 'ER_RPL_ENCRYPTION_UNABLE_TO_CHANGE_OPTION';\nexports[3794] = 'ER_RPL_ENCRYPTION_MASTER_KEY_RECOVERY_FAILED';\nexports[3795] = 'ER_SLOW_LOG_MODE_IGNORED_WHEN_NOT_LOGGING_TO_FILE';\nexports[3796] = 'ER_GRP_TRX_CONSISTENCY_NOT_ALLOWED';\nexports[3797] = 'ER_GRP_TRX_CONSISTENCY_BEFORE';\nexports[3798] = 'ER_GRP_TRX_CONSISTENCY_AFTER_ON_TRX_BEGIN';\nexports[3799] = 'ER_GRP_TRX_CONSISTENCY_BEGIN_NOT_ALLOWED';\nexports[3800] = 'ER_FUNCTIONAL_INDEX_ROW_VALUE_IS_NOT_ALLOWED';\nexports[3801] = 'ER_RPL_ENCRYPTION_FAILED_TO_ENCRYPT';\nexports[3802] = 'ER_PAGE_TRACKING_NOT_STARTED';\nexports[3803] = 'ER_PAGE_TRACKING_RANGE_NOT_TRACKED';\nexports[3804] = 'ER_PAGE_TRACKING_CANNOT_PURGE';\nexports[3805] = 'ER_RPL_ENCRYPTION_CANNOT_ROTATE_BINLOG_MASTER_KEY';\nexports[3806] = 'ER_BINLOG_MASTER_KEY_RECOVERY_OUT_OF_COMBINATION';\nexports[3807] = 'ER_BINLOG_MASTER_KEY_ROTATION_FAIL_TO_OPERATE_KEY';\nexports[3808] = 'ER_BINLOG_MASTER_KEY_ROTATION_FAIL_TO_ROTATE_LOGS';\nexports[3809] = 'ER_BINLOG_MASTER_KEY_ROTATION_FAIL_TO_REENCRYPT_LOG';\nexports[3810] = 'ER_BINLOG_MASTER_KEY_ROTATION_FAIL_TO_CLEANUP_UNUSED_KEYS';\nexports[3811] = 'ER_BINLOG_MASTER_KEY_ROTATION_FAIL_TO_CLEANUP_AUX_KEY';\nexports[3812] = 'ER_NON_BOOLEAN_EXPR_FOR_CHECK_CONSTRAINT';\nexports[3813] = 'ER_COLUMN_CHECK_CONSTRAINT_REFERENCES_OTHER_COLUMN';\nexports[3814] = 'ER_CHECK_CONSTRAINT_NAMED_FUNCTION_IS_NOT_ALLOWED';\nexports[3815] = 'ER_CHECK_CONSTRAINT_FUNCTION_IS_NOT_ALLOWED';\nexports[3816] = 'ER_CHECK_CONSTRAINT_VARIABLES';\nexports[3817] = 'ER_CHECK_CONSTRAINT_ROW_VALUE';\nexports[3818] = 'ER_CHECK_CONSTRAINT_REFERS_AUTO_INCREMENT_COLUMN';\nexports[3819] = 'ER_CHECK_CONSTRAINT_VIOLATED';\nexports[3820] = 'ER_CHECK_CONSTRAINT_REFERS_UNKNOWN_COLUMN';\nexports[3821] = 'ER_CHECK_CONSTRAINT_NOT_FOUND';\nexports[3822] = 'ER_CHECK_CONSTRAINT_DUP_NAME';\nexports[3823] = 'ER_CHECK_CONSTRAINT_CLAUSE_USING_FK_REFER_ACTION_COLUMN';\nexports[3824] = 'WARN_UNENCRYPTED_TABLE_IN_ENCRYPTED_DB';\nexports[3825] = 'ER_INVALID_ENCRYPTION_REQUEST';\nexports[3826] = 'ER_CANNOT_SET_TABLE_ENCRYPTION';\nexports[3827] = 'ER_CANNOT_SET_DATABASE_ENCRYPTION';\nexports[3828] = 'ER_CANNOT_SET_TABLESPACE_ENCRYPTION';\nexports[3829] = 'ER_TABLESPACE_CANNOT_BE_ENCRYPTED';\nexports[3830] = 'ER_TABLESPACE_CANNOT_BE_DECRYPTED';\nexports[3831] = 'ER_TABLESPACE_TYPE_UNKNOWN';\nexports[3832] = 'ER_TARGET_TABLESPACE_UNENCRYPTED';\nexports[3833] = 'ER_CANNOT_USE_ENCRYPTION_CLAUSE';\nexports[3834] = 'ER_INVALID_MULTIPLE_CLAUSES';\nexports[3835] = 'ER_UNSUPPORTED_USE_OF_GRANT_AS';\nexports[3836] = 'ER_UKNOWN_AUTH_ID_OR_ACCESS_DENIED_FOR_GRANT_AS';\nexports[3837] = 'ER_DEPENDENT_BY_FUNCTIONAL_INDEX';\nexports[3838] = 'ER_PLUGIN_NOT_EARLY';\nexports[3839] = 'ER_INNODB_REDO_LOG_ARCHIVE_START_SUBDIR_PATH';\nexports[3840] = 'ER_INNODB_REDO_LOG_ARCHIVE_START_TIMEOUT';\nexports[3841] = 'ER_INNODB_REDO_LOG_ARCHIVE_DIRS_INVALID';\nexports[3842] = 'ER_INNODB_REDO_LOG_ARCHIVE_LABEL_NOT_FOUND';\nexports[3843] = 'ER_INNODB_REDO_LOG_ARCHIVE_DIR_EMPTY';\nexports[3844] = 'ER_INNODB_REDO_LOG_ARCHIVE_NO_SUCH_DIR';\nexports[3845] = 'ER_INNODB_REDO_LOG_ARCHIVE_DIR_CLASH';\nexports[3846] = 'ER_INNODB_REDO_LOG_ARCHIVE_DIR_PERMISSIONS';\nexports[3847] = 'ER_INNODB_REDO_LOG_ARCHIVE_FILE_CREATE';\nexports[3848] = 'ER_INNODB_REDO_LOG_ARCHIVE_ACTIVE';\nexports[3849] = 'ER_INNODB_REDO_LOG_ARCHIVE_INACTIVE';\nexports[3850] = 'ER_INNODB_REDO_LOG_ARCHIVE_FAILED';\nexports[3851] = 'ER_INNODB_REDO_LOG_ARCHIVE_SESSION';\nexports[3852] = 'ER_STD_REGEX_ERROR';\nexports[3853] = 'ER_INVALID_JSON_TYPE';\nexports[3854] = 'ER_CANNOT_CONVERT_STRING';\nexports[3855] = 'ER_DEPENDENT_BY_PARTITION_FUNC';\nexports[3856] = 'ER_WARN_DEPRECATED_FLOAT_AUTO_INCREMENT';\nexports[3857] = 'ER_RPL_CANT_STOP_REPLICA_WHILE_LOCKED_BACKUP';\nexports[3858] = 'ER_WARN_DEPRECATED_FLOAT_DIGITS';\nexports[3859] = 'ER_WARN_DEPRECATED_FLOAT_UNSIGNED';\nexports[3860] = 'ER_WARN_DEPRECATED_INTEGER_DISPLAY_WIDTH';\nexports[3861] = 'ER_WARN_DEPRECATED_ZEROFILL';\nexports[3862] = 'ER_CLONE_DONOR';\nexports[3863] = 'ER_CLONE_PROTOCOL';\nexports[3864] = 'ER_CLONE_DONOR_VERSION';\nexports[3865] = 'ER_CLONE_OS';\nexports[3866] = 'ER_CLONE_PLATFORM';\nexports[3867] = 'ER_CLONE_CHARSET';\nexports[3868] = 'ER_CLONE_CONFIG';\nexports[3869] = 'ER_CLONE_SYS_CONFIG';\nexports[3870] = 'ER_CLONE_PLUGIN_MATCH';\nexports[3871] = 'ER_CLONE_LOOPBACK';\nexports[3872] = 'ER_CLONE_ENCRYPTION';\nexports[3873] = 'ER_CLONE_DISK_SPACE';\nexports[3874] = 'ER_CLONE_IN_PROGRESS';\nexports[3875] = 'ER_CLONE_DISALLOWED';\nexports[3876] = 'ER_CANNOT_GRANT_ROLES_TO_ANONYMOUS_USER';\nexports[3877] = 'ER_SECONDARY_ENGINE_PLUGIN';\nexports[3878] = 'ER_SECOND_PASSWORD_CANNOT_BE_EMPTY';\nexports[3879] = 'ER_DB_ACCESS_DENIED';\nexports[3880] = 'ER_DA_AUTH_ID_WITH_SYSTEM_USER_PRIV_IN_MANDATORY_ROLES';\nexports[3881] = 'ER_DA_RPL_GTID_TABLE_CANNOT_OPEN';\nexports[3882] = 'ER_GEOMETRY_IN_UNKNOWN_LENGTH_UNIT';\nexports[3883] = 'ER_DA_PLUGIN_INSTALL_ERROR';\nexports[3884] = 'ER_NO_SESSION_TEMP';\nexports[3885] = 'ER_DA_UNKNOWN_ERROR_NUMBER';\nexports[3886] = 'ER_COLUMN_CHANGE_SIZE';\nexports[3887] = 'ER_REGEXP_INVALID_CAPTURE_GROUP_NAME';\nexports[3888] = 'ER_DA_SSL_LIBRARY_ERROR';\nexports[3889] = 'ER_SECONDARY_ENGINE';\nexports[3890] = 'ER_SECONDARY_ENGINE_DDL';\nexports[3891] = 'ER_INCORRECT_CURRENT_PASSWORD';\nexports[3892] = 'ER_MISSING_CURRENT_PASSWORD';\nexports[3893] = 'ER_CURRENT_PASSWORD_NOT_REQUIRED';\nexports[3894] = 'ER_PASSWORD_CANNOT_BE_RETAINED_ON_PLUGIN_CHANGE';\nexports[3895] = 'ER_CURRENT_PASSWORD_CANNOT_BE_RETAINED';\nexports[3896] = 'ER_PARTIAL_REVOKES_EXIST';\nexports[3897] = 'ER_CANNOT_GRANT_SYSTEM_PRIV_TO_MANDATORY_ROLE';\nexports[3898] = 'ER_XA_REPLICATION_FILTERS';\nexports[3899] = 'ER_UNSUPPORTED_SQL_MODE';\nexports[3900] = 'ER_REGEXP_INVALID_FLAG';\nexports[3901] = 'ER_PARTIAL_REVOKE_AND_DB_GRANT_BOTH_EXISTS';\nexports[3902] = 'ER_UNIT_NOT_FOUND';\nexports[3903] = 'ER_INVALID_JSON_VALUE_FOR_FUNC_INDEX';\nexports[3904] = 'ER_JSON_VALUE_OUT_OF_RANGE_FOR_FUNC_INDEX';\nexports[3905] = 'ER_EXCEEDED_MV_KEYS_NUM';\nexports[3906] = 'ER_EXCEEDED_MV_KEYS_SPACE';\nexports[3907] = 'ER_FUNCTIONAL_INDEX_DATA_IS_TOO_LONG';\nexports[3908] = 'ER_WRONG_MVI_VALUE';\nexports[3909] = 'ER_WARN_FUNC_INDEX_NOT_APPLICABLE';\nexports[3910] = 'ER_GRP_RPL_UDF_ERROR';\nexports[3911] = 'ER_UPDATE_GTID_PURGED_WITH_GR';\nexports[3912] = 'ER_GROUPING_ON_TIMESTAMP_IN_DST';\nexports[3913] = 'ER_TABLE_NAME_CAUSES_TOO_LONG_PATH';\nexports[3914] = 'ER_AUDIT_LOG_INSUFFICIENT_PRIVILEGE';\nexports[3915] = 'ER_AUDIT_LOG_PASSWORD_HAS_BEEN_COPIED';\nexports[3916] = 'ER_DA_GRP_RPL_STARTED_AUTO_REJOIN';\nexports[3917] = 'ER_SYSVAR_CHANGE_DURING_QUERY';\nexports[3918] = 'ER_GLOBSTAT_CHANGE_DURING_QUERY';\nexports[3919] = 'ER_GRP_RPL_MESSAGE_SERVICE_INIT_FAILURE';\nexports[3920] = 'ER_CHANGE_SOURCE_WRONG_COMPRESSION_ALGORITHM_CLIENT';\nexports[3921] = 'ER_CHANGE_SOURCE_WRONG_COMPRESSION_LEVEL_CLIENT';\nexports[3922] = 'ER_WRONG_COMPRESSION_ALGORITHM_CLIENT';\nexports[3923] = 'ER_WRONG_COMPRESSION_LEVEL_CLIENT';\nexports[3924] = 'ER_CHANGE_SOURCE_WRONG_COMPRESSION_ALGORITHM_LIST_CLIENT';\nexports[3925] = 'ER_CLIENT_PRIVILEGE_CHECKS_USER_CANNOT_BE_ANONYMOUS';\nexports[3926] = 'ER_CLIENT_PRIVILEGE_CHECKS_USER_DOES_NOT_EXIST';\nexports[3927] = 'ER_CLIENT_PRIVILEGE_CHECKS_USER_CORRUPT';\nexports[3928] = 'ER_CLIENT_PRIVILEGE_CHECKS_USER_NEEDS_RPL_APPLIER_PRIV';\nexports[3929] = 'ER_WARN_DA_PRIVILEGE_NOT_REGISTERED';\nexports[3930] = 'ER_CLIENT_KEYRING_UDF_KEY_INVALID';\nexports[3931] = 'ER_CLIENT_KEYRING_UDF_KEY_TYPE_INVALID';\nexports[3932] = 'ER_CLIENT_KEYRING_UDF_KEY_TOO_LONG';\nexports[3933] = 'ER_CLIENT_KEYRING_UDF_KEY_TYPE_TOO_LONG';\nexports[3934] = 'ER_JSON_SCHEMA_VALIDATION_ERROR_WITH_DETAILED_REPORT';\nexports[3935] = 'ER_DA_UDF_INVALID_CHARSET_SPECIFIED';\nexports[3936] = 'ER_DA_UDF_INVALID_CHARSET';\nexports[3937] = 'ER_DA_UDF_INVALID_COLLATION';\nexports[3938] = 'ER_DA_UDF_INVALID_EXTENSION_ARGUMENT_TYPE';\nexports[3939] = 'ER_MULTIPLE_CONSTRAINTS_WITH_SAME_NAME';\nexports[3940] = 'ER_CONSTRAINT_NOT_FOUND';\nexports[3941] = 'ER_ALTER_CONSTRAINT_ENFORCEMENT_NOT_SUPPORTED';\nexports[3942] = 'ER_TABLE_VALUE_CONSTRUCTOR_MUST_HAVE_COLUMNS';\nexports[3943] = 'ER_TABLE_VALUE_CONSTRUCTOR_CANNOT_HAVE_DEFAULT';\nexports[3944] = 'ER_CLIENT_QUERY_FAILURE_INVALID_NON_ROW_FORMAT';\nexports[3945] = 'ER_REQUIRE_ROW_FORMAT_INVALID_VALUE';\nexports[3946] = 'ER_FAILED_TO_DETERMINE_IF_ROLE_IS_MANDATORY';\nexports[3947] = 'ER_FAILED_TO_FETCH_MANDATORY_ROLE_LIST';\nexports[3948] = 'ER_CLIENT_LOCAL_FILES_DISABLED';\nexports[3949] = 'ER_IMP_INCOMPATIBLE_CFG_VERSION';\nexports[3950] = 'ER_DA_OOM';\nexports[3951] = 'ER_DA_UDF_INVALID_ARGUMENT_TO_SET_CHARSET';\nexports[3952] = 'ER_DA_UDF_INVALID_RETURN_TYPE_TO_SET_CHARSET';\nexports[3953] = 'ER_MULTIPLE_INTO_CLAUSES';\nexports[3954] = 'ER_MISPLACED_INTO';\nexports[3955] =\n 'ER_USER_ACCESS_DENIED_FOR_USER_ACCOUNT_BLOCKED_BY_PASSWORD_LOCK';\nexports[3956] = 'ER_WARN_DEPRECATED_YEAR_UNSIGNED';\nexports[3957] = 'ER_CLONE_NETWORK_PACKET';\nexports[3958] = 'ER_SDI_OPERATION_FAILED_MISSING_RECORD';\nexports[3959] = 'ER_DEPENDENT_BY_CHECK_CONSTRAINT';\nexports[3960] = 'ER_GRP_OPERATION_NOT_ALLOWED_GR_MUST_STOP';\nexports[3961] = 'ER_WARN_DEPRECATED_JSON_TABLE_ON_ERROR_ON_EMPTY';\nexports[3962] = 'ER_WARN_DEPRECATED_INNER_INTO';\nexports[3963] = 'ER_WARN_DEPRECATED_VALUES_FUNCTION_ALWAYS_NULL';\nexports[3964] = 'ER_WARN_DEPRECATED_SQL_CALC_FOUND_ROWS';\nexports[3965] = 'ER_WARN_DEPRECATED_FOUND_ROWS';\nexports[3966] = 'ER_MISSING_JSON_VALUE';\nexports[3967] = 'ER_MULTIPLE_JSON_VALUES';\nexports[3968] = 'ER_HOSTNAME_TOO_LONG';\nexports[3969] = 'ER_WARN_CLIENT_DEPRECATED_PARTITION_PREFIX_KEY';\nexports[3970] = 'ER_GROUP_REPLICATION_USER_EMPTY_MSG';\nexports[3971] = 'ER_GROUP_REPLICATION_USER_MANDATORY_MSG';\nexports[3972] = 'ER_GROUP_REPLICATION_PASSWORD_LENGTH';\nexports[3973] = 'ER_SUBQUERY_TRANSFORM_REJECTED';\nexports[3974] = 'ER_DA_GRP_RPL_RECOVERY_ENDPOINT_FORMAT';\nexports[3975] = 'ER_DA_GRP_RPL_RECOVERY_ENDPOINT_INVALID';\nexports[3976] = 'ER_WRONG_VALUE_FOR_VAR_PLUS_ACTIONABLE_PART';\nexports[3977] = 'ER_STATEMENT_NOT_ALLOWED_AFTER_START_TRANSACTION';\nexports[3978] = 'ER_FOREIGN_KEY_WITH_ATOMIC_CREATE_SELECT';\nexports[3979] = 'ER_NOT_ALLOWED_WITH_START_TRANSACTION';\nexports[3980] = 'ER_INVALID_JSON_ATTRIBUTE';\nexports[3981] = 'ER_ENGINE_ATTRIBUTE_NOT_SUPPORTED';\nexports[3982] = 'ER_INVALID_USER_ATTRIBUTE_JSON';\nexports[3983] = 'ER_INNODB_REDO_DISABLED';\nexports[3984] = 'ER_INNODB_REDO_ARCHIVING_ENABLED';\nexports[3985] = 'ER_MDL_OUT_OF_RESOURCES';\nexports[3986] = 'ER_IMPLICIT_COMPARISON_FOR_JSON';\nexports[3987] = 'ER_FUNCTION_DOES_NOT_SUPPORT_CHARACTER_SET';\nexports[3988] = 'ER_IMPOSSIBLE_STRING_CONVERSION';\nexports[3989] = 'ER_SCHEMA_READ_ONLY';\nexports[3990] = 'ER_RPL_ASYNC_RECONNECT_GTID_MODE_OFF';\nexports[3991] = 'ER_RPL_ASYNC_RECONNECT_AUTO_POSITION_OFF';\nexports[3992] = 'ER_DISABLE_GTID_MODE_REQUIRES_ASYNC_RECONNECT_OFF';\nexports[3993] = 'ER_DISABLE_AUTO_POSITION_REQUIRES_ASYNC_RECONNECT_OFF';\nexports[3994] = 'ER_INVALID_PARAMETER_USE';\nexports[3995] = 'ER_CHARACTER_SET_MISMATCH';\nexports[3996] = 'ER_WARN_VAR_VALUE_CHANGE_NOT_SUPPORTED';\nexports[3997] = 'ER_INVALID_TIME_ZONE_INTERVAL';\nexports[3998] = 'ER_INVALID_CAST';\nexports[3999] = 'ER_HYPERGRAPH_NOT_SUPPORTED_YET';\nexports[4000] = 'ER_WARN_HYPERGRAPH_EXPERIMENTAL';\nexports[4001] = 'ER_DA_NO_ERROR_LOG_PARSER_CONFIGURED';\nexports[4002] = 'ER_DA_ERROR_LOG_TABLE_DISABLED';\nexports[4003] = 'ER_DA_ERROR_LOG_MULTIPLE_FILTERS';\nexports[4004] = 'ER_DA_CANT_OPEN_ERROR_LOG';\nexports[4005] = 'ER_USER_REFERENCED_AS_DEFINER';\nexports[4006] = 'ER_CANNOT_USER_REFERENCED_AS_DEFINER';\nexports[4007] = 'ER_REGEX_NUMBER_TOO_BIG';\nexports[4008] = 'ER_SPVAR_NONINTEGER_TYPE';\nexports[4009] = 'WARN_UNSUPPORTED_ACL_TABLES_READ';\nexports[4010] = 'ER_BINLOG_UNSAFE_ACL_TABLE_READ_IN_DML_DDL';\nexports[4011] = 'ER_STOP_REPLICA_MONITOR_IO_THREAD_TIMEOUT';\nexports[4012] = 'ER_STARTING_REPLICA_MONITOR_IO_THREAD';\nexports[4013] = 'ER_CANT_USE_ANONYMOUS_TO_GTID_WITH_GTID_MODE_NOT_ON';\nexports[4014] = 'ER_CANT_COMBINE_ANONYMOUS_TO_GTID_AND_AUTOPOSITION';\nexports[4015] =\n 'ER_ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS_REQUIRES_GTID_MODE_ON';\nexports[4016] = 'ER_SQL_REPLICA_SKIP_COUNTER_USED_WITH_GTID_MODE_ON';\nexports[4017] =\n 'ER_USING_ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS_AS_LOCAL_OR_UUID';\nexports[4018] =\n 'ER_CANT_SET_ANONYMOUS_TO_GTID_AND_WAIT_UNTIL_SQL_THD_AFTER_GTIDS';\nexports[4019] = 'ER_CANT_SET_SQL_AFTER_OR_BEFORE_GTIDS_WITH_ANONYMOUS_TO_GTID';\nexports[4020] = 'ER_ANONYMOUS_TO_GTID_UUID_SAME_AS_GROUP_NAME';\nexports[4021] = 'ER_CANT_USE_SAME_UUID_AS_GROUP_NAME';\nexports[4022] = 'ER_GRP_RPL_RECOVERY_CHANNEL_STILL_RUNNING';\nexports[4023] = 'ER_INNODB_INVALID_AUTOEXTEND_SIZE_VALUE';\nexports[4024] = 'ER_INNODB_INCOMPATIBLE_WITH_TABLESPACE';\nexports[4025] = 'ER_INNODB_AUTOEXTEND_SIZE_OUT_OF_RANGE';\nexports[4026] = 'ER_CANNOT_USE_AUTOEXTEND_SIZE_CLAUSE';\nexports[4027] = 'ER_ROLE_GRANTED_TO_ITSELF';\nexports[4028] = 'ER_TABLE_MUST_HAVE_A_VISIBLE_COLUMN';\nexports[4029] = 'ER_INNODB_COMPRESSION_FAILURE';\nexports[4030] = 'ER_WARN_ASYNC_CONN_FAILOVER_NETWORK_NAMESPACE';\nexports[4031] = 'ER_CLIENT_INTERACTION_TIMEOUT';\nexports[4032] = 'ER_INVALID_CAST_TO_GEOMETRY';\nexports[4033] = 'ER_INVALID_CAST_POLYGON_RING_DIRECTION';\nexports[4034] = 'ER_GIS_DIFFERENT_SRIDS_AGGREGATION';\nexports[4035] = 'ER_RELOAD_KEYRING_FAILURE';\nexports[4036] = 'ER_SDI_GET_KEYS_INVALID_TABLESPACE';\nexports[4037] = 'ER_CHANGE_RPL_SRC_WRONG_COMPRESSION_ALGORITHM_SIZE';\nexports[4038] = 'ER_WARN_DEPRECATED_TLS_VERSION_FOR_CHANNEL_CLI';\nexports[4039] = 'ER_CANT_USE_SAME_UUID_AS_VIEW_CHANGE_UUID';\nexports[4040] = 'ER_ANONYMOUS_TO_GTID_UUID_SAME_AS_VIEW_CHANGE_UUID';\nexports[4041] = 'ER_GRP_RPL_VIEW_CHANGE_UUID_FAIL_GET_VARIABLE';\nexports[4042] = 'ER_WARN_ADUIT_LOG_MAX_SIZE_AND_PRUNE_SECONDS';\nexports[4043] = 'ER_WARN_ADUIT_LOG_MAX_SIZE_CLOSE_TO_ROTATE_ON_SIZE';\nexports[4044] = 'ER_KERBEROS_CREATE_USER';\nexports[4045] = 'ER_INSTALL_PLUGIN_CONFLICT_CLIENT';\nexports[4046] = 'ER_DA_ERROR_LOG_COMPONENT_FLUSH_FAILED';\nexports[4047] = 'ER_WARN_SQL_AFTER_MTS_GAPS_GAP_NOT_CALCULATED';\nexports[4048] = 'ER_INVALID_ASSIGNMENT_TARGET';\nexports[4049] = 'ER_OPERATION_NOT_ALLOWED_ON_GR_SECONDARY';\nexports[4050] = 'ER_GRP_RPL_FAILOVER_CHANNEL_STATUS_PROPAGATION';\nexports[4051] = 'ER_WARN_AUDIT_LOG_FORMAT_UNIX_TIMESTAMP_ONLY_WHEN_JSON';\nexports[4052] = 'ER_INVALID_MFA_PLUGIN_SPECIFIED';\nexports[4053] = 'ER_IDENTIFIED_BY_UNSUPPORTED';\nexports[4054] = 'ER_INVALID_PLUGIN_FOR_REGISTRATION';\nexports[4055] = 'ER_PLUGIN_REQUIRES_REGISTRATION';\nexports[4056] = 'ER_MFA_METHOD_EXISTS';\nexports[4057] = 'ER_MFA_METHOD_NOT_EXISTS';\nexports[4058] = 'ER_AUTHENTICATION_POLICY_MISMATCH';\nexports[4059] = 'ER_PLUGIN_REGISTRATION_DONE';\nexports[4060] = 'ER_INVALID_USER_FOR_REGISTRATION';\nexports[4061] = 'ER_USER_REGISTRATION_FAILED';\nexports[4062] = 'ER_MFA_METHODS_INVALID_ORDER';\nexports[4063] = 'ER_MFA_METHODS_IDENTICAL';\nexports[4064] = 'ER_INVALID_MFA_OPERATIONS_FOR_PASSWORDLESS_USER';\nexports[4065] = 'ER_CHANGE_REPLICATION_SOURCE_NO_OPTIONS_FOR_GTID_ONLY';\nexports[4066] =\n 'ER_CHANGE_REP_SOURCE_CANT_DISABLE_REQ_ROW_FORMAT_WITH_GTID_ONLY';\nexports[4067] =\n 'ER_CHANGE_REP_SOURCE_CANT_DISABLE_AUTO_POSITION_WITH_GTID_ONLY';\nexports[4068] = 'ER_CHANGE_REP_SOURCE_CANT_DISABLE_GTID_ONLY_WITHOUT_POSITIONS';\nexports[4069] = 'ER_CHANGE_REP_SOURCE_CANT_DISABLE_AUTO_POS_WITHOUT_POSITIONS';\nexports[4070] = 'ER_CHANGE_REP_SOURCE_GR_CHANNEL_WITH_GTID_MODE_NOT_ON';\nexports[4071] = 'ER_CANT_USE_GTID_ONLY_WITH_GTID_MODE_NOT_ON';\nexports[4072] = 'ER_WARN_C_DISABLE_GTID_ONLY_WITH_SOURCE_AUTO_POS_INVALID_POS';\nexports[4073] = 'ER_DA_SSL_FIPS_MODE_ERROR';\nexports[4074] = 'ER_VALUE_OUT_OF_RANGE';\nexports[4075] = 'ER_FULLTEXT_WITH_ROLLUP';\nexports[4076] = 'ER_REGEXP_MISSING_RESOURCE';\nexports[4077] = 'ER_WARN_REGEXP_USING_DEFAULT';\nexports[4078] = 'ER_REGEXP_MISSING_FILE';\nexports[4079] = 'ER_WARN_DEPRECATED_COLLATION';\nexports[4080] = 'ER_CONCURRENT_PROCEDURE_USAGE';\nexports[4081] = 'ER_DA_GLOBAL_CONN_LIMIT';\nexports[4082] = 'ER_DA_CONN_LIMIT';\nexports[4083] = 'ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_COLUMN_TYPE_INSTANT';\nexports[4084] = 'ER_WARN_SF_UDF_NAME_COLLISION';\nexports[4085] = 'ER_CANNOT_PURGE_BINLOG_WITH_BACKUP_LOCK';\nexports[4086] = 'ER_TOO_MANY_WINDOWS';\nexports[4087] = 'ER_MYSQLBACKUP_CLIENT_MSG';\nexports[4088] = 'ER_COMMENT_CONTAINS_INVALID_STRING';\nexports[4089] = 'ER_DEFINITION_CONTAINS_INVALID_STRING';\nexports[4090] = 'ER_CANT_EXECUTE_COMMAND_WITH_ASSIGNED_GTID_NEXT';\nexports[4091] = 'ER_XA_TEMP_TABLE';\nexports[4092] = 'ER_INNODB_MAX_ROW_VERSION';\nexports[4093] = 'ER_INNODB_INSTANT_ADD_NOT_SUPPORTED_MAX_SIZE';\nexports[4094] = 'ER_OPERATION_NOT_ALLOWED_WHILE_PRIMARY_CHANGE_IS_RUNNING';\nexports[4095] = 'ER_WARN_DEPRECATED_DATETIME_DELIMITER';\nexports[4096] = 'ER_WARN_DEPRECATED_SUPERFLUOUS_DELIMITER';\nexports[4097] = 'ER_CANNOT_PERSIST_SENSITIVE_VARIABLES';\nexports[4098] = 'ER_WARN_CANNOT_SECURELY_PERSIST_SENSITIVE_VARIABLES';\nexports[4099] = 'ER_WARN_TRG_ALREADY_EXISTS';\nexports[4100] = 'ER_IF_NOT_EXISTS_UNSUPPORTED_TRG_EXISTS_ON_DIFFERENT_TABLE';\nexports[4101] = 'ER_IF_NOT_EXISTS_UNSUPPORTED_UDF_NATIVE_FCT_NAME_COLLISION';\nexports[4102] = 'ER_SET_PASSWORD_AUTH_PLUGIN_ERROR';\nexports[4103] = 'ER_REDUCED_DBLWR_FILE_CORRUPTED';\nexports[4104] = 'ER_REDUCED_DBLWR_PAGE_FOUND';\nexports[4105] = 'ER_SRS_INVALID_LATITUDE_OF_ORIGIN';\nexports[4106] = 'ER_SRS_INVALID_LONGITUDE_OF_ORIGIN';\nexports[4107] = 'ER_SRS_UNUSED_PROJ_PARAMETER_PRESENT';\nexports[4108] = 'ER_GIPK_COLUMN_EXISTS';\nexports[4109] = 'ER_GIPK_FAILED_AUTOINC_COLUMN_EXISTS';\nexports[4110] = 'ER_GIPK_COLUMN_ALTER_NOT_ALLOWED';\nexports[4111] = 'ER_DROP_PK_COLUMN_TO_DROP_GIPK';\nexports[4112] = 'ER_CREATE_SELECT_WITH_GIPK_DISALLOWED_IN_SBR';\nexports[4113] = 'ER_DA_EXPIRE_LOGS_DAYS_IGNORED';\nexports[4114] = 'ER_CTE_RECURSIVE_NOT_UNION';\nexports[4115] = 'ER_COMMAND_BACKEND_FAILED_TO_FETCH_SECURITY_CTX';\nexports[4116] = 'ER_COMMAND_SERVICE_BACKEND_FAILED';\nexports[4117] = 'ER_CLIENT_FILE_PRIVILEGE_FOR_REPLICATION_CHECKS';\nexports[4118] = 'ER_GROUP_REPLICATION_FORCE_MEMBERS_COMMAND_FAILURE';\nexports[4119] = 'ER_WARN_DEPRECATED_IDENT';\nexports[4120] = 'ER_INTERSECT_ALL_MAX_DUPLICATES_EXCEEDED';\nexports[4121] = 'ER_TP_QUERY_THRS_PER_GRP_EXCEEDS_TXN_THR_LIMIT';\nexports[4122] = 'ER_BAD_TIMESTAMP_FORMAT';\nexports[4123] = 'ER_SHAPE_PRIDICTION_UDF';\nexports[4124] = 'ER_SRS_INVALID_HEIGHT';\nexports[4125] = 'ER_SRS_INVALID_SCALING';\nexports[4126] = 'ER_SRS_INVALID_ZONE_WIDTH';\nexports[4127] = 'ER_SRS_INVALID_LATITUDE_POLAR_STERE_VAR_A';\nexports[4128] = 'ER_WARN_DEPRECATED_CLIENT_NO_SCHEMA_OPTION';\nexports[4129] = 'ER_TABLE_NOT_EMPTY';\nexports[4130] = 'ER_TABLE_NO_PRIMARY_KEY';\nexports[4131] = 'ER_TABLE_IN_SHARED_TABLESPACE';\nexports[4132] = 'ER_INDEX_OTHER_THAN_PK';\nexports[4133] = 'ER_LOAD_BULK_DATA_UNSORTED';\nexports[4134] = 'ER_BULK_EXECUTOR_ERROR';\nexports[4135] = 'ER_BULK_READER_LIBCURL_INIT_FAILED';\nexports[4136] = 'ER_BULK_READER_LIBCURL_ERROR';\nexports[4137] = 'ER_BULK_READER_SERVER_ERROR';\nexports[4138] = 'ER_BULK_READER_COMMUNICATION_ERROR';\nexports[4139] = 'ER_BULK_LOAD_DATA_FAILED';\nexports[4140] = 'ER_BULK_LOADER_COLUMN_TOO_BIG_FOR_LEFTOVER_BUFFER';\nexports[4141] = 'ER_BULK_LOADER_COMPONENT_ERROR';\nexports[4142] = 'ER_BULK_LOADER_FILE_CONTAINS_LESS_LINES_THAN_IGNORE_CLAUSE';\nexports[4143] = 'ER_BULK_PARSER_MISSING_ENCLOSED_BY';\nexports[4144] = 'ER_BULK_PARSER_ROW_BUFFER_MAX_TOTAL_COLS_EXCEEDED';\nexports[4145] = 'ER_BULK_PARSER_COPY_BUFFER_SIZE_EXCEEDED';\nexports[4146] = 'ER_BULK_PARSER_UNEXPECTED_END_OF_INPUT';\nexports[4147] = 'ER_BULK_PARSER_UNEXPECTED_ROW_TERMINATOR';\nexports[4148] = 'ER_BULK_PARSER_UNEXPECTED_CHAR_AFTER_ENDING_ENCLOSED_BY';\nexports[4149] = 'ER_BULK_PARSER_UNEXPECTED_CHAR_AFTER_NULL_ESCAPE';\nexports[4150] = 'ER_BULK_PARSER_UNEXPECTED_CHAR_AFTER_COLUMN_TERMINATOR';\nexports[4151] = 'ER_BULK_PARSER_INCOMPLETE_ESCAPE_SEQUENCE';\nexports[4152] = 'ER_LOAD_BULK_DATA_FAILED';\nexports[4153] = 'ER_LOAD_BULK_DATA_WRONG_VALUE_FOR_FIELD';\nexports[4154] = 'ER_LOAD_BULK_DATA_WARN_NULL_TO_NOTNULL';\nexports[4155] = 'ER_REQUIRE_TABLE_PRIMARY_KEY_CHECK_GENERATE_WITH_GR';\nexports[4156] = 'ER_CANT_CHANGE_SYS_VAR_IN_READ_ONLY_MODE';\nexports[4157] = 'ER_INNODB_INSTANT_ADD_DROP_NOT_SUPPORTED_MAX_SIZE';\nexports[4158] = 'ER_INNODB_INSTANT_ADD_NOT_SUPPORTED_MAX_FIELDS';\nexports[4159] = 'ER_CANT_SET_PERSISTED';\nexports[4160] = 'ER_INSTALL_COMPONENT_SET_NULL_VALUE';\nexports[4161] = 'ER_INSTALL_COMPONENT_SET_UNUSED_VALUE';\nexports[4162] = 'ER_WARN_DEPRECATED_USER_DEFINED_COLLATIONS';\n",
|
|
50
|
+
"// GENERATED FILE. DO NOT EDIT.\n(function (global, factory) {\n function preferDefault(exports) {\n return exports.default || exports;\n }\n if (typeof define === \"function\" && define.amd) {\n define([], function () {\n var exports = {};\n factory(exports);\n return preferDefault(exports);\n });\n } else if (typeof exports === \"object\") {\n factory(exports);\n if (typeof module === \"object\") module.exports = preferDefault(exports);\n } else {\n (function () {\n var exports = {};\n factory(exports);\n global.Long = preferDefault(exports);\n })();\n }\n})(\n typeof globalThis !== \"undefined\"\n ? globalThis\n : typeof self !== \"undefined\"\n ? self\n : this,\n function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true,\n });\n _exports.default = void 0;\n /**\n * @license\n * Copyright 2009 The Closure Library Authors\n * Copyright 2020 Daniel Wirtz / The long.js Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n // WebAssembly optimizations to do native i64 multiplication and divide\n var wasm = null;\n try {\n wasm = new WebAssembly.Instance(\n new WebAssembly.Module(\n new Uint8Array([\n // \\0asm\n 0, 97, 115, 109,\n // version 1\n 1, 0, 0, 0,\n // section \"type\"\n 1, 13, 2,\n // 0, () => i32\n 96, 0, 1, 127,\n // 1, (i32, i32, i32, i32) => i32\n 96, 4, 127, 127, 127, 127, 1, 127,\n // section \"function\"\n 3, 7, 6,\n // 0, type 0\n 0,\n // 1, type 1\n 1,\n // 2, type 1\n 1,\n // 3, type 1\n 1,\n // 4, type 1\n 1,\n // 5, type 1\n 1,\n // section \"global\"\n 6, 6, 1,\n // 0, \"high\", mutable i32\n 127, 1, 65, 0, 11,\n // section \"export\"\n 7, 50, 6,\n // 0, \"mul\"\n 3, 109, 117, 108, 0, 1,\n // 1, \"div_s\"\n 5, 100, 105, 118, 95, 115, 0, 2,\n // 2, \"div_u\"\n 5, 100, 105, 118, 95, 117, 0, 3,\n // 3, \"rem_s\"\n 5, 114, 101, 109, 95, 115, 0, 4,\n // 4, \"rem_u\"\n 5, 114, 101, 109, 95, 117, 0, 5,\n // 5, \"get_high\"\n 8, 103, 101, 116, 95, 104, 105, 103, 104, 0, 0,\n // section \"code\"\n 10, 191, 1, 6,\n // 0, \"get_high\"\n 4, 0, 35, 0, 11,\n // 1, \"mul\"\n 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173,\n 32, 3, 173, 66, 32, 134, 132, 126, 34, 4, 66, 32, 135, 167, 36, 0,\n 32, 4, 167, 11,\n // 2, \"div_s\"\n 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173,\n 32, 3, 173, 66, 32, 134, 132, 127, 34, 4, 66, 32, 135, 167, 36, 0,\n 32, 4, 167, 11,\n // 3, \"div_u\"\n 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173,\n 32, 3, 173, 66, 32, 134, 132, 128, 34, 4, 66, 32, 135, 167, 36, 0,\n 32, 4, 167, 11,\n // 4, \"rem_s\"\n 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173,\n 32, 3, 173, 66, 32, 134, 132, 129, 34, 4, 66, 32, 135, 167, 36, 0,\n 32, 4, 167, 11,\n // 5, \"rem_u\"\n 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173,\n 32, 3, 173, 66, 32, 134, 132, 130, 34, 4, 66, 32, 135, 167, 36, 0,\n 32, 4, 167, 11,\n ]),\n ),\n {},\n ).exports;\n } catch {\n // no wasm support :(\n }\n\n /**\n * Constructs a 64 bit two's-complement integer, given its low and high 32 bit values as *signed* integers.\n * See the from* functions below for more convenient ways of constructing Longs.\n * @exports Long\n * @class A Long class for representing a 64 bit two's-complement integer value.\n * @param {number} low The low (signed) 32 bits of the long\n * @param {number} high The high (signed) 32 bits of the long\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n * @constructor\n */\n function Long(low, high, unsigned) {\n /**\n * The low 32 bits as a signed value.\n * @type {number}\n */\n this.low = low | 0;\n\n /**\n * The high 32 bits as a signed value.\n * @type {number}\n */\n this.high = high | 0;\n\n /**\n * Whether unsigned or not.\n * @type {boolean}\n */\n this.unsigned = !!unsigned;\n }\n\n // The internal representation of a long is the two given signed, 32-bit values.\n // We use 32-bit pieces because these are the size of integers on which\n // Javascript performs bit-operations. For operations like addition and\n // multiplication, we split each number into 16 bit pieces, which can easily be\n // multiplied within Javascript's floating-point representation without overflow\n // or change in sign.\n //\n // In the algorithms below, we frequently reduce the negative case to the\n // positive case by negating the input(s) and then post-processing the result.\n // Note that we must ALWAYS check specially whether those values are MIN_VALUE\n // (-2^63) because -MIN_VALUE == MIN_VALUE (since 2^63 cannot be represented as\n // a positive number, it overflows back into a negative). Not handling this\n // case would often result in infinite recursion.\n //\n // Common constant values ZERO, ONE, NEG_ONE, etc. are defined below the from*\n // methods on which they depend.\n\n /**\n * An indicator used to reliably determine if an object is a Long or not.\n * @type {boolean}\n * @const\n * @private\n */\n Long.prototype.__isLong__;\n Object.defineProperty(Long.prototype, \"__isLong__\", {\n value: true,\n });\n\n /**\n * @function\n * @param {*} obj Object\n * @returns {boolean}\n * @inner\n */\n function isLong(obj) {\n return (obj && obj[\"__isLong__\"]) === true;\n }\n\n /**\n * @function\n * @param {*} value number\n * @returns {number}\n * @inner\n */\n function ctz32(value) {\n var c = Math.clz32(value & -value);\n return value ? 31 - c : c;\n }\n\n /**\n * Tests if the specified object is a Long.\n * @function\n * @param {*} obj Object\n * @returns {boolean}\n */\n Long.isLong = isLong;\n\n /**\n * A cache of the Long representations of small integer values.\n * @type {!Object}\n * @inner\n */\n var INT_CACHE = {};\n\n /**\n * A cache of the Long representations of small unsigned integer values.\n * @type {!Object}\n * @inner\n */\n var UINT_CACHE = {};\n\n /**\n * @param {number} value\n * @param {boolean=} unsigned\n * @returns {!Long}\n * @inner\n */\n function fromInt(value, unsigned) {\n var obj, cachedObj, cache;\n if (unsigned) {\n value >>>= 0;\n if ((cache = 0 <= value && value < 256)) {\n cachedObj = UINT_CACHE[value];\n if (cachedObj) return cachedObj;\n }\n obj = fromBits(value, 0, true);\n if (cache) UINT_CACHE[value] = obj;\n return obj;\n } else {\n value |= 0;\n if ((cache = -128 <= value && value < 128)) {\n cachedObj = INT_CACHE[value];\n if (cachedObj) return cachedObj;\n }\n obj = fromBits(value, value < 0 ? -1 : 0, false);\n if (cache) INT_CACHE[value] = obj;\n return obj;\n }\n }\n\n /**\n * Returns a Long representing the given 32 bit integer value.\n * @function\n * @param {number} value The 32 bit integer in question\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n * @returns {!Long} The corresponding Long value\n */\n Long.fromInt = fromInt;\n\n /**\n * @param {number} value\n * @param {boolean=} unsigned\n * @returns {!Long}\n * @inner\n */\n function fromNumber(value, unsigned) {\n if (isNaN(value)) return unsigned ? UZERO : ZERO;\n if (unsigned) {\n if (value < 0) return UZERO;\n if (value >= TWO_PWR_64_DBL) return MAX_UNSIGNED_VALUE;\n } else {\n if (value <= -TWO_PWR_63_DBL) return MIN_VALUE;\n if (value + 1 >= TWO_PWR_63_DBL) return MAX_VALUE;\n }\n if (value < 0) return fromNumber(-value, unsigned).neg();\n return fromBits(\n value % TWO_PWR_32_DBL | 0,\n (value / TWO_PWR_32_DBL) | 0,\n unsigned,\n );\n }\n\n /**\n * Returns a Long representing the given value, provided that it is a finite number. Otherwise, zero is returned.\n * @function\n * @param {number} value The number in question\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n * @returns {!Long} The corresponding Long value\n */\n Long.fromNumber = fromNumber;\n\n /**\n * @param {number} lowBits\n * @param {number} highBits\n * @param {boolean=} unsigned\n * @returns {!Long}\n * @inner\n */\n function fromBits(lowBits, highBits, unsigned) {\n return new Long(lowBits, highBits, unsigned);\n }\n\n /**\n * Returns a Long representing the 64 bit integer that comes by concatenating the given low and high bits. Each is\n * assumed to use 32 bits.\n * @function\n * @param {number} lowBits The low 32 bits\n * @param {number} highBits The high 32 bits\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n * @returns {!Long} The corresponding Long value\n */\n Long.fromBits = fromBits;\n\n /**\n * @function\n * @param {number} base\n * @param {number} exponent\n * @returns {number}\n * @inner\n */\n var pow_dbl = Math.pow; // Used 4 times (4*8 to 15+4)\n\n /**\n * @param {string} str\n * @param {(boolean|number)=} unsigned\n * @param {number=} radix\n * @returns {!Long}\n * @inner\n */\n function fromString(str, unsigned, radix) {\n if (str.length === 0) throw Error(\"empty string\");\n if (typeof unsigned === \"number\") {\n // For goog.math.long compatibility\n radix = unsigned;\n unsigned = false;\n } else {\n unsigned = !!unsigned;\n }\n if (\n str === \"NaN\" ||\n str === \"Infinity\" ||\n str === \"+Infinity\" ||\n str === \"-Infinity\"\n )\n return unsigned ? UZERO : ZERO;\n radix = radix || 10;\n if (radix < 2 || 36 < radix) throw RangeError(\"radix\");\n var p;\n if ((p = str.indexOf(\"-\")) > 0) throw Error(\"interior hyphen\");\n else if (p === 0) {\n return fromString(str.substring(1), unsigned, radix).neg();\n }\n\n // Do several (8) digits each time through the loop, so as to\n // minimize the calls to the very expensive emulated div.\n var radixToPower = fromNumber(pow_dbl(radix, 8));\n var result = ZERO;\n for (var i = 0; i < str.length; i += 8) {\n var size = Math.min(8, str.length - i),\n value = parseInt(str.substring(i, i + size), radix);\n if (size < 8) {\n var power = fromNumber(pow_dbl(radix, size));\n result = result.mul(power).add(fromNumber(value));\n } else {\n result = result.mul(radixToPower);\n result = result.add(fromNumber(value));\n }\n }\n result.unsigned = unsigned;\n return result;\n }\n\n /**\n * Returns a Long representation of the given string, written using the specified radix.\n * @function\n * @param {string} str The textual representation of the Long\n * @param {(boolean|number)=} unsigned Whether unsigned or not, defaults to signed\n * @param {number=} radix The radix in which the text is written (2-36), defaults to 10\n * @returns {!Long} The corresponding Long value\n */\n Long.fromString = fromString;\n\n /**\n * @function\n * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val\n * @param {boolean=} unsigned\n * @returns {!Long}\n * @inner\n */\n function fromValue(val, unsigned) {\n if (typeof val === \"number\") return fromNumber(val, unsigned);\n if (typeof val === \"string\") return fromString(val, unsigned);\n // Throws for non-objects, converts non-instanceof Long:\n return fromBits(\n val.low,\n val.high,\n typeof unsigned === \"boolean\" ? unsigned : val.unsigned,\n );\n }\n\n /**\n * Converts the specified value to a Long using the appropriate from* function for its type.\n * @function\n * @param {!Long|number|bigint|string|!{low: number, high: number, unsigned: boolean}} val Value\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n * @returns {!Long}\n */\n Long.fromValue = fromValue;\n\n // NOTE: the compiler should inline these constant values below and then remove these variables, so there should be\n // no runtime penalty for these.\n\n /**\n * @type {number}\n * @const\n * @inner\n */\n var TWO_PWR_16_DBL = 1 << 16;\n\n /**\n * @type {number}\n * @const\n * @inner\n */\n var TWO_PWR_24_DBL = 1 << 24;\n\n /**\n * @type {number}\n * @const\n * @inner\n */\n var TWO_PWR_32_DBL = TWO_PWR_16_DBL * TWO_PWR_16_DBL;\n\n /**\n * @type {number}\n * @const\n * @inner\n */\n var TWO_PWR_64_DBL = TWO_PWR_32_DBL * TWO_PWR_32_DBL;\n\n /**\n * @type {number}\n * @const\n * @inner\n */\n var TWO_PWR_63_DBL = TWO_PWR_64_DBL / 2;\n\n /**\n * @type {!Long}\n * @const\n * @inner\n */\n var TWO_PWR_24 = fromInt(TWO_PWR_24_DBL);\n\n /**\n * @type {!Long}\n * @inner\n */\n var ZERO = fromInt(0);\n\n /**\n * Signed zero.\n * @type {!Long}\n */\n Long.ZERO = ZERO;\n\n /**\n * @type {!Long}\n * @inner\n */\n var UZERO = fromInt(0, true);\n\n /**\n * Unsigned zero.\n * @type {!Long}\n */\n Long.UZERO = UZERO;\n\n /**\n * @type {!Long}\n * @inner\n */\n var ONE = fromInt(1);\n\n /**\n * Signed one.\n * @type {!Long}\n */\n Long.ONE = ONE;\n\n /**\n * @type {!Long}\n * @inner\n */\n var UONE = fromInt(1, true);\n\n /**\n * Unsigned one.\n * @type {!Long}\n */\n Long.UONE = UONE;\n\n /**\n * @type {!Long}\n * @inner\n */\n var NEG_ONE = fromInt(-1);\n\n /**\n * Signed negative one.\n * @type {!Long}\n */\n Long.NEG_ONE = NEG_ONE;\n\n /**\n * @type {!Long}\n * @inner\n */\n var MAX_VALUE = fromBits(0xffffffff | 0, 0x7fffffff | 0, false);\n\n /**\n * Maximum signed value.\n * @type {!Long}\n */\n Long.MAX_VALUE = MAX_VALUE;\n\n /**\n * @type {!Long}\n * @inner\n */\n var MAX_UNSIGNED_VALUE = fromBits(0xffffffff | 0, 0xffffffff | 0, true);\n\n /**\n * Maximum unsigned value.\n * @type {!Long}\n */\n Long.MAX_UNSIGNED_VALUE = MAX_UNSIGNED_VALUE;\n\n /**\n * @type {!Long}\n * @inner\n */\n var MIN_VALUE = fromBits(0, 0x80000000 | 0, false);\n\n /**\n * Minimum signed value.\n * @type {!Long}\n */\n Long.MIN_VALUE = MIN_VALUE;\n\n /**\n * @alias Long.prototype\n * @inner\n */\n var LongPrototype = Long.prototype;\n\n /**\n * Converts the Long to a 32 bit integer, assuming it is a 32 bit integer.\n * @this {!Long}\n * @returns {number}\n */\n LongPrototype.toInt = function toInt() {\n return this.unsigned ? this.low >>> 0 : this.low;\n };\n\n /**\n * Converts the Long to a the nearest floating-point representation of this value (double, 53 bit mantissa).\n * @this {!Long}\n * @returns {number}\n */\n LongPrototype.toNumber = function toNumber() {\n if (this.unsigned)\n return (this.high >>> 0) * TWO_PWR_32_DBL + (this.low >>> 0);\n return this.high * TWO_PWR_32_DBL + (this.low >>> 0);\n };\n\n /**\n * Converts the Long to a string written in the specified radix.\n * @this {!Long}\n * @param {number=} radix Radix (2-36), defaults to 10\n * @returns {string}\n * @override\n * @throws {RangeError} If `radix` is out of range\n */\n LongPrototype.toString = function toString(radix) {\n radix = radix || 10;\n if (radix < 2 || 36 < radix) throw RangeError(\"radix\");\n if (this.isZero()) return \"0\";\n if (this.isNegative()) {\n // Unsigned Longs are never negative\n if (this.eq(MIN_VALUE)) {\n // We need to change the Long value before it can be negated, so we remove\n // the bottom-most digit in this base and then recurse to do the rest.\n var radixLong = fromNumber(radix),\n div = this.div(radixLong),\n rem1 = div.mul(radixLong).sub(this);\n return div.toString(radix) + rem1.toInt().toString(radix);\n } else return \"-\" + this.neg().toString(radix);\n }\n\n // Do several (6) digits each time through the loop, so as to\n // minimize the calls to the very expensive emulated div.\n var radixToPower = fromNumber(pow_dbl(radix, 6), this.unsigned),\n rem = this;\n var result = \"\";\n while (true) {\n var remDiv = rem.div(radixToPower),\n intval = rem.sub(remDiv.mul(radixToPower)).toInt() >>> 0,\n digits = intval.toString(radix);\n rem = remDiv;\n if (rem.isZero()) return digits + result;\n else {\n while (digits.length < 6) digits = \"0\" + digits;\n result = \"\" + digits + result;\n }\n }\n };\n\n /**\n * Gets the high 32 bits as a signed integer.\n * @this {!Long}\n * @returns {number} Signed high bits\n */\n LongPrototype.getHighBits = function getHighBits() {\n return this.high;\n };\n\n /**\n * Gets the high 32 bits as an unsigned integer.\n * @this {!Long}\n * @returns {number} Unsigned high bits\n */\n LongPrototype.getHighBitsUnsigned = function getHighBitsUnsigned() {\n return this.high >>> 0;\n };\n\n /**\n * Gets the low 32 bits as a signed integer.\n * @this {!Long}\n * @returns {number} Signed low bits\n */\n LongPrototype.getLowBits = function getLowBits() {\n return this.low;\n };\n\n /**\n * Gets the low 32 bits as an unsigned integer.\n * @this {!Long}\n * @returns {number} Unsigned low bits\n */\n LongPrototype.getLowBitsUnsigned = function getLowBitsUnsigned() {\n return this.low >>> 0;\n };\n\n /**\n * Gets the number of bits needed to represent the absolute value of this Long.\n * @this {!Long}\n * @returns {number}\n */\n LongPrototype.getNumBitsAbs = function getNumBitsAbs() {\n if (this.isNegative())\n // Unsigned Longs are never negative\n return this.eq(MIN_VALUE) ? 64 : this.neg().getNumBitsAbs();\n var val = this.high != 0 ? this.high : this.low;\n for (var bit = 31; bit > 0; bit--) if ((val & (1 << bit)) != 0) break;\n return this.high != 0 ? bit + 33 : bit + 1;\n };\n\n /**\n * Tests if this Long can be safely represented as a JavaScript number.\n * @this {!Long}\n * @returns {boolean}\n */\n LongPrototype.isSafeInteger = function isSafeInteger() {\n // 2^53-1 is the maximum safe value\n var top11Bits = this.high >> 21;\n // [0, 2^53-1]\n if (!top11Bits) return true;\n // > 2^53-1\n if (this.unsigned) return false;\n // [-2^53, -1] except -2^53\n return top11Bits === -1 && !(this.low === 0 && this.high === -0x200000);\n };\n\n /**\n * Tests if this Long's value equals zero.\n * @this {!Long}\n * @returns {boolean}\n */\n LongPrototype.isZero = function isZero() {\n return this.high === 0 && this.low === 0;\n };\n\n /**\n * Tests if this Long's value equals zero. This is an alias of {@link Long#isZero}.\n * @returns {boolean}\n */\n LongPrototype.eqz = LongPrototype.isZero;\n\n /**\n * Tests if this Long's value is negative.\n * @this {!Long}\n * @returns {boolean}\n */\n LongPrototype.isNegative = function isNegative() {\n return !this.unsigned && this.high < 0;\n };\n\n /**\n * Tests if this Long's value is positive or zero.\n * @this {!Long}\n * @returns {boolean}\n */\n LongPrototype.isPositive = function isPositive() {\n return this.unsigned || this.high >= 0;\n };\n\n /**\n * Tests if this Long's value is odd.\n * @this {!Long}\n * @returns {boolean}\n */\n LongPrototype.isOdd = function isOdd() {\n return (this.low & 1) === 1;\n };\n\n /**\n * Tests if this Long's value is even.\n * @this {!Long}\n * @returns {boolean}\n */\n LongPrototype.isEven = function isEven() {\n return (this.low & 1) === 0;\n };\n\n /**\n * Tests if this Long's value equals the specified's.\n * @this {!Long}\n * @param {!Long|number|bigint|string} other Other value\n * @returns {boolean}\n */\n LongPrototype.equals = function equals(other) {\n if (!isLong(other)) other = fromValue(other);\n if (\n this.unsigned !== other.unsigned &&\n this.high >>> 31 === 1 &&\n other.high >>> 31 === 1\n )\n return false;\n return this.high === other.high && this.low === other.low;\n };\n\n /**\n * Tests if this Long's value equals the specified's. This is an alias of {@link Long#equals}.\n * @function\n * @param {!Long|number|bigint|string} other Other value\n * @returns {boolean}\n */\n LongPrototype.eq = LongPrototype.equals;\n\n /**\n * Tests if this Long's value differs from the specified's.\n * @this {!Long}\n * @param {!Long|number|bigint|string} other Other value\n * @returns {boolean}\n */\n LongPrototype.notEquals = function notEquals(other) {\n return !this.eq(/* validates */ other);\n };\n\n /**\n * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\n * @function\n * @param {!Long|number|bigint|string} other Other value\n * @returns {boolean}\n */\n LongPrototype.neq = LongPrototype.notEquals;\n\n /**\n * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\n * @function\n * @param {!Long|number|bigint|string} other Other value\n * @returns {boolean}\n */\n LongPrototype.ne = LongPrototype.notEquals;\n\n /**\n * Tests if this Long's value is less than the specified's.\n * @this {!Long}\n * @param {!Long|number|bigint|string} other Other value\n * @returns {boolean}\n */\n LongPrototype.lessThan = function lessThan(other) {\n return this.comp(/* validates */ other) < 0;\n };\n\n /**\n * Tests if this Long's value is less than the specified's. This is an alias of {@link Long#lessThan}.\n * @function\n * @param {!Long|number|bigint|string} other Other value\n * @returns {boolean}\n */\n LongPrototype.lt = LongPrototype.lessThan;\n\n /**\n * Tests if this Long's value is less than or equal the specified's.\n * @this {!Long}\n * @param {!Long|number|bigint|string} other Other value\n * @returns {boolean}\n */\n LongPrototype.lessThanOrEqual = function lessThanOrEqual(other) {\n return this.comp(/* validates */ other) <= 0;\n };\n\n /**\n * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\n * @function\n * @param {!Long|number|bigint|string} other Other value\n * @returns {boolean}\n */\n LongPrototype.lte = LongPrototype.lessThanOrEqual;\n\n /**\n * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\n * @function\n * @param {!Long|number|bigint|string} other Other value\n * @returns {boolean}\n */\n LongPrototype.le = LongPrototype.lessThanOrEqual;\n\n /**\n * Tests if this Long's value is greater than the specified's.\n * @this {!Long}\n * @param {!Long|number|bigint|string} other Other value\n * @returns {boolean}\n */\n LongPrototype.greaterThan = function greaterThan(other) {\n return this.comp(/* validates */ other) > 0;\n };\n\n /**\n * Tests if this Long's value is greater than the specified's. This is an alias of {@link Long#greaterThan}.\n * @function\n * @param {!Long|number|bigint|string} other Other value\n * @returns {boolean}\n */\n LongPrototype.gt = LongPrototype.greaterThan;\n\n /**\n * Tests if this Long's value is greater than or equal the specified's.\n * @this {!Long}\n * @param {!Long|number|bigint|string} other Other value\n * @returns {boolean}\n */\n LongPrototype.greaterThanOrEqual = function greaterThanOrEqual(other) {\n return this.comp(/* validates */ other) >= 0;\n };\n\n /**\n * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\n * @function\n * @param {!Long|number|bigint|string} other Other value\n * @returns {boolean}\n */\n LongPrototype.gte = LongPrototype.greaterThanOrEqual;\n\n /**\n * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\n * @function\n * @param {!Long|number|bigint|string} other Other value\n * @returns {boolean}\n */\n LongPrototype.ge = LongPrototype.greaterThanOrEqual;\n\n /**\n * Compares this Long's value with the specified's.\n * @this {!Long}\n * @param {!Long|number|bigint|string} other Other value\n * @returns {number} 0 if they are the same, 1 if the this is greater and -1\n * if the given one is greater\n */\n LongPrototype.compare = function compare(other) {\n if (!isLong(other)) other = fromValue(other);\n if (this.eq(other)) return 0;\n var thisNeg = this.isNegative(),\n otherNeg = other.isNegative();\n if (thisNeg && !otherNeg) return -1;\n if (!thisNeg && otherNeg) return 1;\n // At this point the sign bits are the same\n if (!this.unsigned) return this.sub(other).isNegative() ? -1 : 1;\n // Both are positive if at least one is unsigned\n return other.high >>> 0 > this.high >>> 0 ||\n (other.high === this.high && other.low >>> 0 > this.low >>> 0)\n ? -1\n : 1;\n };\n\n /**\n * Compares this Long's value with the specified's. This is an alias of {@link Long#compare}.\n * @function\n * @param {!Long|number|bigint|string} other Other value\n * @returns {number} 0 if they are the same, 1 if the this is greater and -1\n * if the given one is greater\n */\n LongPrototype.comp = LongPrototype.compare;\n\n /**\n * Negates this Long's value.\n * @this {!Long}\n * @returns {!Long} Negated Long\n */\n LongPrototype.negate = function negate() {\n if (!this.unsigned && this.eq(MIN_VALUE)) return MIN_VALUE;\n return this.not().add(ONE);\n };\n\n /**\n * Negates this Long's value. This is an alias of {@link Long#negate}.\n * @function\n * @returns {!Long} Negated Long\n */\n LongPrototype.neg = LongPrototype.negate;\n\n /**\n * Returns the sum of this and the specified Long.\n * @this {!Long}\n * @param {!Long|number|bigint|string} addend Addend\n * @returns {!Long} Sum\n */\n LongPrototype.add = function add(addend) {\n if (!isLong(addend)) addend = fromValue(addend);\n\n // Divide each number into 4 chunks of 16 bits, and then sum the chunks.\n\n var a48 = this.high >>> 16;\n var a32 = this.high & 0xffff;\n var a16 = this.low >>> 16;\n var a00 = this.low & 0xffff;\n var b48 = addend.high >>> 16;\n var b32 = addend.high & 0xffff;\n var b16 = addend.low >>> 16;\n var b00 = addend.low & 0xffff;\n var c48 = 0,\n c32 = 0,\n c16 = 0,\n c00 = 0;\n c00 += a00 + b00;\n c16 += c00 >>> 16;\n c00 &= 0xffff;\n c16 += a16 + b16;\n c32 += c16 >>> 16;\n c16 &= 0xffff;\n c32 += a32 + b32;\n c48 += c32 >>> 16;\n c32 &= 0xffff;\n c48 += a48 + b48;\n c48 &= 0xffff;\n return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\n };\n\n /**\n * Returns the difference of this and the specified Long.\n * @this {!Long}\n * @param {!Long|number|bigint|string} subtrahend Subtrahend\n * @returns {!Long} Difference\n */\n LongPrototype.subtract = function subtract(subtrahend) {\n if (!isLong(subtrahend)) subtrahend = fromValue(subtrahend);\n return this.add(subtrahend.neg());\n };\n\n /**\n * Returns the difference of this and the specified Long. This is an alias of {@link Long#subtract}.\n * @function\n * @param {!Long|number|bigint|string} subtrahend Subtrahend\n * @returns {!Long} Difference\n */\n LongPrototype.sub = LongPrototype.subtract;\n\n /**\n * Returns the product of this and the specified Long.\n * @this {!Long}\n * @param {!Long|number|bigint|string} multiplier Multiplier\n * @returns {!Long} Product\n */\n LongPrototype.multiply = function multiply(multiplier) {\n if (this.isZero()) return this;\n if (!isLong(multiplier)) multiplier = fromValue(multiplier);\n\n // use wasm support if present\n if (wasm) {\n var low = wasm[\"mul\"](\n this.low,\n this.high,\n multiplier.low,\n multiplier.high,\n );\n return fromBits(low, wasm[\"get_high\"](), this.unsigned);\n }\n if (multiplier.isZero()) return this.unsigned ? UZERO : ZERO;\n if (this.eq(MIN_VALUE)) return multiplier.isOdd() ? MIN_VALUE : ZERO;\n if (multiplier.eq(MIN_VALUE)) return this.isOdd() ? MIN_VALUE : ZERO;\n if (this.isNegative()) {\n if (multiplier.isNegative()) return this.neg().mul(multiplier.neg());\n else return this.neg().mul(multiplier).neg();\n } else if (multiplier.isNegative())\n return this.mul(multiplier.neg()).neg();\n\n // If both longs are small, use float multiplication\n if (this.lt(TWO_PWR_24) && multiplier.lt(TWO_PWR_24))\n return fromNumber(\n this.toNumber() * multiplier.toNumber(),\n this.unsigned,\n );\n\n // Divide each long into 4 chunks of 16 bits, and then add up 4x4 products.\n // We can skip products that would overflow.\n\n var a48 = this.high >>> 16;\n var a32 = this.high & 0xffff;\n var a16 = this.low >>> 16;\n var a00 = this.low & 0xffff;\n var b48 = multiplier.high >>> 16;\n var b32 = multiplier.high & 0xffff;\n var b16 = multiplier.low >>> 16;\n var b00 = multiplier.low & 0xffff;\n var c48 = 0,\n c32 = 0,\n c16 = 0,\n c00 = 0;\n c00 += a00 * b00;\n c16 += c00 >>> 16;\n c00 &= 0xffff;\n c16 += a16 * b00;\n c32 += c16 >>> 16;\n c16 &= 0xffff;\n c16 += a00 * b16;\n c32 += c16 >>> 16;\n c16 &= 0xffff;\n c32 += a32 * b00;\n c48 += c32 >>> 16;\n c32 &= 0xffff;\n c32 += a16 * b16;\n c48 += c32 >>> 16;\n c32 &= 0xffff;\n c32 += a00 * b32;\n c48 += c32 >>> 16;\n c32 &= 0xffff;\n c48 += a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48;\n c48 &= 0xffff;\n return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\n };\n\n /**\n * Returns the product of this and the specified Long. This is an alias of {@link Long#multiply}.\n * @function\n * @param {!Long|number|bigint|string} multiplier Multiplier\n * @returns {!Long} Product\n */\n LongPrototype.mul = LongPrototype.multiply;\n\n /**\n * Returns this Long divided by the specified. The result is signed if this Long is signed or\n * unsigned if this Long is unsigned.\n * @this {!Long}\n * @param {!Long|number|bigint|string} divisor Divisor\n * @returns {!Long} Quotient\n */\n LongPrototype.divide = function divide(divisor) {\n if (!isLong(divisor)) divisor = fromValue(divisor);\n if (divisor.isZero()) throw Error(\"division by zero\");\n\n // use wasm support if present\n if (wasm) {\n // guard against signed division overflow: the largest\n // negative number / -1 would be 1 larger than the largest\n // positive number, due to two's complement.\n if (\n !this.unsigned &&\n this.high === -0x80000000 &&\n divisor.low === -1 &&\n divisor.high === -1\n ) {\n // be consistent with non-wasm code path\n return this;\n }\n var low = (this.unsigned ? wasm[\"div_u\"] : wasm[\"div_s\"])(\n this.low,\n this.high,\n divisor.low,\n divisor.high,\n );\n return fromBits(low, wasm[\"get_high\"](), this.unsigned);\n }\n if (this.isZero()) return this.unsigned ? UZERO : ZERO;\n var approx, rem, res;\n if (!this.unsigned) {\n // This section is only relevant for signed longs and is derived from the\n // closure library as a whole.\n if (this.eq(MIN_VALUE)) {\n if (divisor.eq(ONE) || divisor.eq(NEG_ONE))\n return MIN_VALUE; // recall that -MIN_VALUE == MIN_VALUE\n else if (divisor.eq(MIN_VALUE)) return ONE;\n else {\n // At this point, we have |other| >= 2, so |this/other| < |MIN_VALUE|.\n var halfThis = this.shr(1);\n approx = halfThis.div(divisor).shl(1);\n if (approx.eq(ZERO)) {\n return divisor.isNegative() ? ONE : NEG_ONE;\n } else {\n rem = this.sub(divisor.mul(approx));\n res = approx.add(rem.div(divisor));\n return res;\n }\n }\n } else if (divisor.eq(MIN_VALUE)) return this.unsigned ? UZERO : ZERO;\n if (this.isNegative()) {\n if (divisor.isNegative()) return this.neg().div(divisor.neg());\n return this.neg().div(divisor).neg();\n } else if (divisor.isNegative()) return this.div(divisor.neg()).neg();\n res = ZERO;\n } else {\n // The algorithm below has not been made for unsigned longs. It's therefore\n // required to take special care of the MSB prior to running it.\n if (!divisor.unsigned) divisor = divisor.toUnsigned();\n if (divisor.gt(this)) return UZERO;\n if (divisor.gt(this.shru(1)))\n // 15 >>> 1 = 7 ; with divisor = 8 ; true\n return UONE;\n res = UZERO;\n }\n\n // Repeat the following until the remainder is less than other: find a\n // floating-point that approximates remainder / other *from below*, add this\n // into the result, and subtract it from the remainder. It is critical that\n // the approximate value is less than or equal to the real value so that the\n // remainder never becomes negative.\n rem = this;\n while (rem.gte(divisor)) {\n // Approximate the result of division. This may be a little greater or\n // smaller than the actual value.\n approx = Math.max(1, Math.floor(rem.toNumber() / divisor.toNumber()));\n\n // We will tweak the approximate result by changing it in the 48-th digit or\n // the smallest non-fractional digit, whichever is larger.\n var log2 = Math.ceil(Math.log(approx) / Math.LN2),\n delta = log2 <= 48 ? 1 : pow_dbl(2, log2 - 48),\n // Decrease the approximation until it is smaller than the remainder. Note\n // that if it is too large, the product overflows and is negative.\n approxRes = fromNumber(approx),\n approxRem = approxRes.mul(divisor);\n while (approxRem.isNegative() || approxRem.gt(rem)) {\n approx -= delta;\n approxRes = fromNumber(approx, this.unsigned);\n approxRem = approxRes.mul(divisor);\n }\n\n // We know the answer can't be zero... and actually, zero would cause\n // infinite recursion since we would make no progress.\n if (approxRes.isZero()) approxRes = ONE;\n res = res.add(approxRes);\n rem = rem.sub(approxRem);\n }\n return res;\n };\n\n /**\n * Returns this Long divided by the specified. This is an alias of {@link Long#divide}.\n * @function\n * @param {!Long|number|bigint|string} divisor Divisor\n * @returns {!Long} Quotient\n */\n LongPrototype.div = LongPrototype.divide;\n\n /**\n * Returns this Long modulo the specified.\n * @this {!Long}\n * @param {!Long|number|bigint|string} divisor Divisor\n * @returns {!Long} Remainder\n */\n LongPrototype.modulo = function modulo(divisor) {\n if (!isLong(divisor)) divisor = fromValue(divisor);\n\n // use wasm support if present\n if (wasm) {\n var low = (this.unsigned ? wasm[\"rem_u\"] : wasm[\"rem_s\"])(\n this.low,\n this.high,\n divisor.low,\n divisor.high,\n );\n return fromBits(low, wasm[\"get_high\"](), this.unsigned);\n }\n return this.sub(this.div(divisor).mul(divisor));\n };\n\n /**\n * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\n * @function\n * @param {!Long|number|bigint|string} divisor Divisor\n * @returns {!Long} Remainder\n */\n LongPrototype.mod = LongPrototype.modulo;\n\n /**\n * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\n * @function\n * @param {!Long|number|bigint|string} divisor Divisor\n * @returns {!Long} Remainder\n */\n LongPrototype.rem = LongPrototype.modulo;\n\n /**\n * Returns the bitwise NOT of this Long.\n * @this {!Long}\n * @returns {!Long}\n */\n LongPrototype.not = function not() {\n return fromBits(~this.low, ~this.high, this.unsigned);\n };\n\n /**\n * Returns count leading zeros of this Long.\n * @this {!Long}\n * @returns {!number}\n */\n LongPrototype.countLeadingZeros = function countLeadingZeros() {\n return this.high ? Math.clz32(this.high) : Math.clz32(this.low) + 32;\n };\n\n /**\n * Returns count leading zeros. This is an alias of {@link Long#countLeadingZeros}.\n * @function\n * @param {!Long}\n * @returns {!number}\n */\n LongPrototype.clz = LongPrototype.countLeadingZeros;\n\n /**\n * Returns count trailing zeros of this Long.\n * @this {!Long}\n * @returns {!number}\n */\n LongPrototype.countTrailingZeros = function countTrailingZeros() {\n return this.low ? ctz32(this.low) : ctz32(this.high) + 32;\n };\n\n /**\n * Returns count trailing zeros. This is an alias of {@link Long#countTrailingZeros}.\n * @function\n * @param {!Long}\n * @returns {!number}\n */\n LongPrototype.ctz = LongPrototype.countTrailingZeros;\n\n /**\n * Returns the bitwise AND of this Long and the specified.\n * @this {!Long}\n * @param {!Long|number|bigint|string} other Other Long\n * @returns {!Long}\n */\n LongPrototype.and = function and(other) {\n if (!isLong(other)) other = fromValue(other);\n return fromBits(\n this.low & other.low,\n this.high & other.high,\n this.unsigned,\n );\n };\n\n /**\n * Returns the bitwise OR of this Long and the specified.\n * @this {!Long}\n * @param {!Long|number|bigint|string} other Other Long\n * @returns {!Long}\n */\n LongPrototype.or = function or(other) {\n if (!isLong(other)) other = fromValue(other);\n return fromBits(\n this.low | other.low,\n this.high | other.high,\n this.unsigned,\n );\n };\n\n /**\n * Returns the bitwise XOR of this Long and the given one.\n * @this {!Long}\n * @param {!Long|number|bigint|string} other Other Long\n * @returns {!Long}\n */\n LongPrototype.xor = function xor(other) {\n if (!isLong(other)) other = fromValue(other);\n return fromBits(\n this.low ^ other.low,\n this.high ^ other.high,\n this.unsigned,\n );\n };\n\n /**\n * Returns this Long with bits shifted to the left by the given amount.\n * @this {!Long}\n * @param {number|!Long} numBits Number of bits\n * @returns {!Long} Shifted Long\n */\n LongPrototype.shiftLeft = function shiftLeft(numBits) {\n if (isLong(numBits)) numBits = numBits.toInt();\n if ((numBits &= 63) === 0) return this;\n else if (numBits < 32)\n return fromBits(\n this.low << numBits,\n (this.high << numBits) | (this.low >>> (32 - numBits)),\n this.unsigned,\n );\n else return fromBits(0, this.low << (numBits - 32), this.unsigned);\n };\n\n /**\n * Returns this Long with bits shifted to the left by the given amount. This is an alias of {@link Long#shiftLeft}.\n * @function\n * @param {number|!Long} numBits Number of bits\n * @returns {!Long} Shifted Long\n */\n LongPrototype.shl = LongPrototype.shiftLeft;\n\n /**\n * Returns this Long with bits arithmetically shifted to the right by the given amount.\n * @this {!Long}\n * @param {number|!Long} numBits Number of bits\n * @returns {!Long} Shifted Long\n */\n LongPrototype.shiftRight = function shiftRight(numBits) {\n if (isLong(numBits)) numBits = numBits.toInt();\n if ((numBits &= 63) === 0) return this;\n else if (numBits < 32)\n return fromBits(\n (this.low >>> numBits) | (this.high << (32 - numBits)),\n this.high >> numBits,\n this.unsigned,\n );\n else\n return fromBits(\n this.high >> (numBits - 32),\n this.high >= 0 ? 0 : -1,\n this.unsigned,\n );\n };\n\n /**\n * Returns this Long with bits arithmetically shifted to the right by the given amount. This is an alias of {@link Long#shiftRight}.\n * @function\n * @param {number|!Long} numBits Number of bits\n * @returns {!Long} Shifted Long\n */\n LongPrototype.shr = LongPrototype.shiftRight;\n\n /**\n * Returns this Long with bits logically shifted to the right by the given amount.\n * @this {!Long}\n * @param {number|!Long} numBits Number of bits\n * @returns {!Long} Shifted Long\n */\n LongPrototype.shiftRightUnsigned = function shiftRightUnsigned(numBits) {\n if (isLong(numBits)) numBits = numBits.toInt();\n if ((numBits &= 63) === 0) return this;\n if (numBits < 32)\n return fromBits(\n (this.low >>> numBits) | (this.high << (32 - numBits)),\n this.high >>> numBits,\n this.unsigned,\n );\n if (numBits === 32) return fromBits(this.high, 0, this.unsigned);\n return fromBits(this.high >>> (numBits - 32), 0, this.unsigned);\n };\n\n /**\n * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\n * @function\n * @param {number|!Long} numBits Number of bits\n * @returns {!Long} Shifted Long\n */\n LongPrototype.shru = LongPrototype.shiftRightUnsigned;\n\n /**\n * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\n * @function\n * @param {number|!Long} numBits Number of bits\n * @returns {!Long} Shifted Long\n */\n LongPrototype.shr_u = LongPrototype.shiftRightUnsigned;\n\n /**\n * Returns this Long with bits rotated to the left by the given amount.\n * @this {!Long}\n * @param {number|!Long} numBits Number of bits\n * @returns {!Long} Rotated Long\n */\n LongPrototype.rotateLeft = function rotateLeft(numBits) {\n var b;\n if (isLong(numBits)) numBits = numBits.toInt();\n if ((numBits &= 63) === 0) return this;\n if (numBits === 32) return fromBits(this.high, this.low, this.unsigned);\n if (numBits < 32) {\n b = 32 - numBits;\n return fromBits(\n (this.low << numBits) | (this.high >>> b),\n (this.high << numBits) | (this.low >>> b),\n this.unsigned,\n );\n }\n numBits -= 32;\n b = 32 - numBits;\n return fromBits(\n (this.high << numBits) | (this.low >>> b),\n (this.low << numBits) | (this.high >>> b),\n this.unsigned,\n );\n };\n /**\n * Returns this Long with bits rotated to the left by the given amount. This is an alias of {@link Long#rotateLeft}.\n * @function\n * @param {number|!Long} numBits Number of bits\n * @returns {!Long} Rotated Long\n */\n LongPrototype.rotl = LongPrototype.rotateLeft;\n\n /**\n * Returns this Long with bits rotated to the right by the given amount.\n * @this {!Long}\n * @param {number|!Long} numBits Number of bits\n * @returns {!Long} Rotated Long\n */\n LongPrototype.rotateRight = function rotateRight(numBits) {\n var b;\n if (isLong(numBits)) numBits = numBits.toInt();\n if ((numBits &= 63) === 0) return this;\n if (numBits === 32) return fromBits(this.high, this.low, this.unsigned);\n if (numBits < 32) {\n b = 32 - numBits;\n return fromBits(\n (this.high << b) | (this.low >>> numBits),\n (this.low << b) | (this.high >>> numBits),\n this.unsigned,\n );\n }\n numBits -= 32;\n b = 32 - numBits;\n return fromBits(\n (this.low << b) | (this.high >>> numBits),\n (this.high << b) | (this.low >>> numBits),\n this.unsigned,\n );\n };\n /**\n * Returns this Long with bits rotated to the right by the given amount. This is an alias of {@link Long#rotateRight}.\n * @function\n * @param {number|!Long} numBits Number of bits\n * @returns {!Long} Rotated Long\n */\n LongPrototype.rotr = LongPrototype.rotateRight;\n\n /**\n * Converts this Long to signed.\n * @this {!Long}\n * @returns {!Long} Signed long\n */\n LongPrototype.toSigned = function toSigned() {\n if (!this.unsigned) return this;\n return fromBits(this.low, this.high, false);\n };\n\n /**\n * Converts this Long to unsigned.\n * @this {!Long}\n * @returns {!Long} Unsigned long\n */\n LongPrototype.toUnsigned = function toUnsigned() {\n if (this.unsigned) return this;\n return fromBits(this.low, this.high, true);\n };\n\n /**\n * Converts this Long to its byte representation.\n * @param {boolean=} le Whether little or big endian, defaults to big endian\n * @this {!Long}\n * @returns {!Array.<number>} Byte representation\n */\n LongPrototype.toBytes = function toBytes(le) {\n return le ? this.toBytesLE() : this.toBytesBE();\n };\n\n /**\n * Converts this Long to its little endian byte representation.\n * @this {!Long}\n * @returns {!Array.<number>} Little endian byte representation\n */\n LongPrototype.toBytesLE = function toBytesLE() {\n var hi = this.high,\n lo = this.low;\n return [\n lo & 0xff,\n (lo >>> 8) & 0xff,\n (lo >>> 16) & 0xff,\n lo >>> 24,\n hi & 0xff,\n (hi >>> 8) & 0xff,\n (hi >>> 16) & 0xff,\n hi >>> 24,\n ];\n };\n\n /**\n * Converts this Long to its big endian byte representation.\n * @this {!Long}\n * @returns {!Array.<number>} Big endian byte representation\n */\n LongPrototype.toBytesBE = function toBytesBE() {\n var hi = this.high,\n lo = this.low;\n return [\n hi >>> 24,\n (hi >>> 16) & 0xff,\n (hi >>> 8) & 0xff,\n hi & 0xff,\n lo >>> 24,\n (lo >>> 16) & 0xff,\n (lo >>> 8) & 0xff,\n lo & 0xff,\n ];\n };\n\n /**\n * Creates a Long from its byte representation.\n * @param {!Array.<number>} bytes Byte representation\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n * @param {boolean=} le Whether little or big endian, defaults to big endian\n * @returns {Long} The corresponding Long value\n */\n Long.fromBytes = function fromBytes(bytes, unsigned, le) {\n return le\n ? Long.fromBytesLE(bytes, unsigned)\n : Long.fromBytesBE(bytes, unsigned);\n };\n\n /**\n * Creates a Long from its little endian byte representation.\n * @param {!Array.<number>} bytes Little endian byte representation\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n * @returns {Long} The corresponding Long value\n */\n Long.fromBytesLE = function fromBytesLE(bytes, unsigned) {\n return new Long(\n bytes[0] | (bytes[1] << 8) | (bytes[2] << 16) | (bytes[3] << 24),\n bytes[4] | (bytes[5] << 8) | (bytes[6] << 16) | (bytes[7] << 24),\n unsigned,\n );\n };\n\n /**\n * Creates a Long from its big endian byte representation.\n * @param {!Array.<number>} bytes Big endian byte representation\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n * @returns {Long} The corresponding Long value\n */\n Long.fromBytesBE = function fromBytesBE(bytes, unsigned) {\n return new Long(\n (bytes[4] << 24) | (bytes[5] << 16) | (bytes[6] << 8) | bytes[7],\n (bytes[0] << 24) | (bytes[1] << 16) | (bytes[2] << 8) | bytes[3],\n unsigned,\n );\n };\n\n // Support conversion to/from BigInt where available\n if (typeof BigInt === \"function\") {\n /**\n * Returns a Long representing the given big integer.\n * @function\n * @param {number} value The big integer value\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n * @returns {!Long} The corresponding Long value\n */\n Long.fromBigInt = function fromBigInt(value, unsigned) {\n var lowBits = Number(BigInt.asIntN(32, value));\n var highBits = Number(BigInt.asIntN(32, value >> BigInt(32)));\n return fromBits(lowBits, highBits, unsigned);\n };\n\n // Override\n Long.fromValue = function fromValueWithBigInt(value, unsigned) {\n if (typeof value === \"bigint\") return Long.fromBigInt(value, unsigned);\n return fromValue(value, unsigned);\n };\n\n /**\n * Converts the Long to its big integer representation.\n * @this {!Long}\n * @returns {bigint}\n */\n LongPrototype.toBigInt = function toBigInt() {\n var lowBigInt = BigInt(this.low >>> 0);\n var highBigInt = BigInt(this.unsigned ? this.high >>> 0 : this.high);\n return (highBigInt << BigInt(32)) | lowBigInt;\n };\n }\n var _default = (_exports.default = Long);\n },\n);\n",
|
|
51
|
+
"/* 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",
|
|
52
|
+
"\"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\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) { return res }\n\n if (res[0] === BOMChar) {\n res = res.slice(1)\n if (typeof this.options.stripBOM === \"function\") { 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",
|
|
53
|
+
"\"use strict\"\n\nvar hasOwn = typeof Object.hasOwn === \"undefined\" ? Function.call.bind(Object.prototype.hasOwnProperty) : Object.hasOwn\n\nfunction mergeModules (target, module) {\n for (var key in module) {\n if (hasOwn(module, key)) {\n target[key] = module[key]\n }\n }\n}\n\nmodule.exports = mergeModules\n",
|
|
54
|
+
"\"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\") { this.encoder = InternalEncoderBase64 } else if (this.enc === \"utf8\") { this.encoder = InternalEncoderUtf8 } 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() !== \"💩\") {\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\nfunction InternalDecoder (options, codec) {\n this.decoder = new StringDecoder(codec.enc)\n}\n\nInternalDecoder.prototype.write = function (buf) {\n if (!Buffer.isBuffer(buf)) {\n buf = Buffer.from(buf)\n }\n\n return this.decoder.write(buf)\n}\n\nInternalDecoder.prototype.end = function () {\n return this.decoder.end()\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// 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// 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); var 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) { buf[bufIdx++] = charCode } else if (charCode < 0x800) {\n buf[bufIdx++] = 0xC0 + (charCode >>> 6)\n buf[bufIdx++] = 0x80 + (charCode & 0x3f)\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; var contBytes = this.contBytes; var accBytes = this.accBytes\n var 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 }\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) { res += this.defaultCharUnicode }\n return res\n}\n\n// ------------------------------------------------------------------------------\n// check the chunk boundaries for surrogate pair\n\nfunction InternalEncoderUtf8 (options, codec) {\n this.highSurrogate = \"\"\n}\n\nInternalEncoderUtf8.prototype.write = function (str) {\n if (this.highSurrogate) {\n str = this.highSurrogate + str\n this.highSurrogate = \"\"\n }\n\n if (str.length > 0) {\n var charCode = str.charCodeAt(str.length - 1)\n if (charCode >= 0xd800 && charCode < 0xdc00) {\n this.highSurrogate = str[str.length - 1]\n str = str.slice(0, str.length - 1)\n }\n }\n\n return Buffer.from(str, this.enc)\n}\n\nInternalEncoderUtf8.prototype.end = function () {\n if (this.highSurrogate) {\n var str = this.highSurrogate\n this.highSurrogate = \"\"\n return Buffer.from(str, this.enc)\n }\n}\n",
|
|
55
|
+
"\"use strict\"\n\nvar Buffer = require(\"safer-buffer\").Buffer\n\n// == UTF32-LE/BE codec. ==========================================================\n\nexports._utf32 = Utf32Codec\n\nfunction Utf32Codec (codecOptions, iconv) {\n this.iconv = iconv\n this.bomAware = true\n this.isLE = codecOptions.isLE\n}\n\nexports.utf32le = { type: \"_utf32\", isLE: true }\nexports.utf32be = { type: \"_utf32\", isLE: false }\n\n// Aliases\nexports.ucs4le = \"utf32le\"\nexports.ucs4be = \"utf32be\"\n\nUtf32Codec.prototype.encoder = Utf32Encoder\nUtf32Codec.prototype.decoder = Utf32Decoder\n\n// -- Encoding\n\nfunction Utf32Encoder (options, codec) {\n this.isLE = codec.isLE\n this.highSurrogate = 0\n}\n\nUtf32Encoder.prototype.write = function (str) {\n var src = Buffer.from(str, \"ucs2\")\n var dst = Buffer.alloc(src.length * 2)\n var write32 = this.isLE ? dst.writeUInt32LE : dst.writeUInt32BE\n var offset = 0\n\n for (var i = 0; i < src.length; i += 2) {\n var code = src.readUInt16LE(i)\n var isHighSurrogate = (code >= 0xD800 && code < 0xDC00)\n var isLowSurrogate = (code >= 0xDC00 && code < 0xE000)\n\n if (this.highSurrogate) {\n if (isHighSurrogate || !isLowSurrogate) {\n // There shouldn't be two high surrogates in a row, nor a high surrogate which isn't followed by a low\n // surrogate. If this happens, keep the pending high surrogate as a stand-alone semi-invalid character\n // (technically wrong, but expected by some applications, like Windows file names).\n write32.call(dst, this.highSurrogate, offset)\n offset += 4\n } else {\n // Create 32-bit value from high and low surrogates;\n var codepoint = (((this.highSurrogate - 0xD800) << 10) | (code - 0xDC00)) + 0x10000\n\n write32.call(dst, codepoint, offset)\n offset += 4\n this.highSurrogate = 0\n\n continue\n }\n }\n\n if (isHighSurrogate) { this.highSurrogate = code } else {\n // Even if the current character is a low surrogate, with no previous high surrogate, we'll\n // encode it as a semi-invalid stand-alone character for the same reasons expressed above for\n // unpaired high surrogates.\n write32.call(dst, code, offset)\n offset += 4\n this.highSurrogate = 0\n }\n }\n\n if (offset < dst.length) { dst = dst.slice(0, offset) }\n\n return dst\n}\n\nUtf32Encoder.prototype.end = function () {\n // Treat any leftover high surrogate as a semi-valid independent character.\n if (!this.highSurrogate) { return }\n\n var buf = Buffer.alloc(4)\n\n if (this.isLE) { buf.writeUInt32LE(this.highSurrogate, 0) } else { buf.writeUInt32BE(this.highSurrogate, 0) }\n\n this.highSurrogate = 0\n\n return buf\n}\n\n// -- Decoding\n\nfunction Utf32Decoder (options, codec) {\n this.isLE = codec.isLE\n this.badChar = codec.iconv.defaultCharUnicode.charCodeAt(0)\n this.overflow = []\n}\n\nUtf32Decoder.prototype.write = function (src) {\n if (src.length === 0) { return \"\" }\n\n var i = 0\n var codepoint = 0\n var dst = Buffer.alloc(src.length + 4)\n var offset = 0\n var isLE = this.isLE\n var overflow = this.overflow\n var badChar = this.badChar\n\n if (overflow.length > 0) {\n for (; i < src.length && overflow.length < 4; i++) { overflow.push(src[i]) }\n\n if (overflow.length === 4) {\n // NOTE: codepoint is a signed int32 and can be negative.\n // NOTE: We copied this block from below to help V8 optimize it (it works with array, not buffer).\n if (isLE) {\n codepoint = overflow[i] | (overflow[i + 1] << 8) | (overflow[i + 2] << 16) | (overflow[i + 3] << 24)\n } else {\n codepoint = overflow[i + 3] | (overflow[i + 2] << 8) | (overflow[i + 1] << 16) | (overflow[i] << 24)\n }\n overflow.length = 0\n\n offset = _writeCodepoint(dst, offset, codepoint, badChar)\n }\n }\n\n // Main loop. Should be as optimized as possible.\n for (; i < src.length - 3; i += 4) {\n // NOTE: codepoint is a signed int32 and can be negative.\n if (isLE) {\n codepoint = src[i] | (src[i + 1] << 8) | (src[i + 2] << 16) | (src[i + 3] << 24)\n } else {\n codepoint = src[i + 3] | (src[i + 2] << 8) | (src[i + 1] << 16) | (src[i] << 24)\n }\n offset = _writeCodepoint(dst, offset, codepoint, badChar)\n }\n\n // Keep overflowing bytes.\n for (; i < src.length; i++) {\n overflow.push(src[i])\n }\n\n return dst.slice(0, offset).toString(\"ucs2\")\n}\n\nfunction _writeCodepoint (dst, offset, codepoint, badChar) {\n // NOTE: codepoint is signed int32 and can be negative. We keep it that way to help V8 with optimizations.\n if (codepoint < 0 || codepoint > 0x10FFFF) {\n // Not a valid Unicode codepoint\n codepoint = badChar\n }\n\n // Ephemeral Planes: Write high surrogate.\n if (codepoint >= 0x10000) {\n codepoint -= 0x10000\n\n var high = 0xD800 | (codepoint >> 10)\n dst[offset++] = high & 0xff\n dst[offset++] = high >> 8\n\n // Low surrogate is written below.\n var codepoint = 0xDC00 | (codepoint & 0x3FF)\n }\n\n // Write BMP char or low surrogate.\n dst[offset++] = codepoint & 0xff\n dst[offset++] = codepoint >> 8\n\n return offset\n};\n\nUtf32Decoder.prototype.end = function () {\n this.overflow.length = 0\n}\n\n// == UTF-32 Auto codec =============================================================\n// Decoder chooses automatically from UTF-32LE and UTF-32BE using BOM and space-based heuristic.\n// Defaults to UTF-32LE. http://en.wikipedia.org/wiki/UTF-32\n// Encoder/decoder default can be changed: iconv.decode(buf, 'utf32', {defaultEncoding: 'utf-32be'});\n\n// Encoder prepends BOM (which can be overridden with (addBOM: false}).\n\nexports.utf32 = Utf32AutoCodec\nexports.ucs4 = \"utf32\"\n\nfunction Utf32AutoCodec (options, iconv) {\n this.iconv = iconv\n}\n\nUtf32AutoCodec.prototype.encoder = Utf32AutoEncoder\nUtf32AutoCodec.prototype.decoder = Utf32AutoDecoder\n\n// -- Encoding\n\nfunction Utf32AutoEncoder (options, codec) {\n options = options || {}\n\n if (options.addBOM === undefined) {\n options.addBOM = true\n }\n\n this.encoder = codec.iconv.getEncoder(options.defaultEncoding || \"utf-32le\", options)\n}\n\nUtf32AutoEncoder.prototype.write = function (str) {\n return this.encoder.write(str)\n}\n\nUtf32AutoEncoder.prototype.end = function () {\n return this.encoder.end()\n}\n\n// -- Decoding\n\nfunction Utf32AutoDecoder (options, codec) {\n this.decoder = null\n this.initialBufs = []\n this.initialBufsLen = 0\n this.options = options || {}\n this.iconv = codec.iconv\n}\n\nUtf32AutoDecoder.prototype.write = function (buf) {\n if (!this.decoder) {\n // Codec is not chosen yet. Accumulate initial bytes.\n this.initialBufs.push(buf)\n this.initialBufsLen += buf.length\n\n if (this.initialBufsLen < 32) // We need more bytes to use space heuristic (see below)\n { return \"\" }\n\n // We have enough bytes -> detect endianness.\n var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding)\n this.decoder = this.iconv.getDecoder(encoding, this.options)\n\n var resStr = \"\"\n for (var i = 0; i < this.initialBufs.length; i++) { resStr += this.decoder.write(this.initialBufs[i]) }\n\n this.initialBufs.length = this.initialBufsLen = 0\n return resStr\n }\n\n return this.decoder.write(buf)\n}\n\nUtf32AutoDecoder.prototype.end = function () {\n if (!this.decoder) {\n var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding)\n this.decoder = this.iconv.getDecoder(encoding, this.options)\n\n var resStr = \"\"\n for (var i = 0; i < this.initialBufs.length; i++) { resStr += this.decoder.write(this.initialBufs[i]) }\n\n var trail = this.decoder.end()\n if (trail) { resStr += trail }\n\n this.initialBufs.length = this.initialBufsLen = 0\n return resStr\n }\n\n return this.decoder.end()\n}\n\nfunction detectEncoding (bufs, defaultEncoding) {\n var b = []\n var charsProcessed = 0\n var invalidLE = 0; var invalidBE = 0 // Number of invalid chars when decoded as LE or BE.\n var bmpCharsLE = 0; var bmpCharsBE = 0 // Number of BMP chars when decoded as LE or BE.\n\n outerLoop:\n for (var i = 0; i < bufs.length; i++) {\n var buf = bufs[i]\n for (var j = 0; j < buf.length; j++) {\n b.push(buf[j])\n if (b.length === 4) {\n if (charsProcessed === 0) {\n // Check BOM first.\n if (b[0] === 0xFF && b[1] === 0xFE && b[2] === 0 && b[3] === 0) {\n return \"utf-32le\"\n }\n if (b[0] === 0 && b[1] === 0 && b[2] === 0xFE && b[3] === 0xFF) {\n return \"utf-32be\"\n }\n }\n\n if (b[0] !== 0 || b[1] > 0x10) invalidBE++\n if (b[3] !== 0 || b[2] > 0x10) invalidLE++\n\n if (b[0] === 0 && b[1] === 0 && (b[2] !== 0 || b[3] !== 0)) bmpCharsBE++\n if ((b[0] !== 0 || b[1] !== 0) && b[2] === 0 && b[3] === 0) bmpCharsLE++\n\n b.length = 0\n charsProcessed++\n\n if (charsProcessed >= 100) {\n break outerLoop\n }\n }\n }\n }\n\n // Make decisions.\n if (bmpCharsBE - invalidBE > bmpCharsLE - invalidLE) return \"utf-32be\"\n if (bmpCharsBE - invalidBE < bmpCharsLE - invalidLE) return \"utf-32le\"\n\n // Couldn't decide (likely all zeros or not enough data).\n return defaultEncoding || \"utf-32le\"\n}\n",
|
|
56
|
+
"\"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// -- 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// -- Decoding\n\nfunction Utf16BEDecoder () {\n this.overflowByte = -1\n}\n\nUtf16BEDecoder.prototype.write = function (buf) {\n if (buf.length == 0) { return \"\" }\n\n var buf2 = Buffer.alloc(buf.length + 1)\n var i = 0; var 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 this.overflowByte = -1\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// -- Encoding (pass-through)\n\nfunction Utf16Encoder (options, codec) {\n options = options || {}\n if (options.addBOM === undefined) { 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// -- Decoding\n\nfunction Utf16Decoder (options, codec) {\n this.decoder = null\n this.initialBufs = []\n this.initialBufsLen = 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.initialBufs.push(buf)\n this.initialBufsLen += buf.length\n\n if (this.initialBufsLen < 16) // We need more bytes to use space heuristic (see below)\n { return \"\" }\n\n // We have enough bytes -> detect endianness.\n var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding)\n this.decoder = this.iconv.getDecoder(encoding, this.options)\n\n var resStr = \"\"\n for (var i = 0; i < this.initialBufs.length; i++) { resStr += this.decoder.write(this.initialBufs[i]) }\n\n this.initialBufs.length = this.initialBufsLen = 0\n return resStr\n }\n\n return this.decoder.write(buf)\n}\n\nUtf16Decoder.prototype.end = function () {\n if (!this.decoder) {\n var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding)\n this.decoder = this.iconv.getDecoder(encoding, this.options)\n\n var resStr = \"\"\n for (var i = 0; i < this.initialBufs.length; i++) { resStr += this.decoder.write(this.initialBufs[i]) }\n\n var trail = this.decoder.end()\n if (trail) { resStr += trail }\n\n this.initialBufs.length = this.initialBufsLen = 0\n return resStr\n }\n return this.decoder.end()\n}\n\nfunction detectEncoding (bufs, defaultEncoding) {\n var b = []\n var charsProcessed = 0\n // Number of ASCII chars when decoded as LE or BE.\n var asciiCharsLE = 0\n var asciiCharsBE = 0\n\n outerLoop:\n for (var i = 0; i < bufs.length; i++) {\n var buf = bufs[i]\n for (var j = 0; j < buf.length; j++) {\n b.push(buf[j])\n if (b.length === 2) {\n if (charsProcessed === 0) {\n // Check BOM first.\n if (b[0] === 0xFF && b[1] === 0xFE) return \"utf-16le\"\n if (b[0] === 0xFE && b[1] === 0xFF) return \"utf-16be\"\n }\n\n if (b[0] === 0 && b[1] !== 0) asciiCharsBE++\n if (b[0] !== 0 && b[1] === 0) asciiCharsLE++\n\n b.length = 0\n charsProcessed++\n\n if (charsProcessed >= 100) {\n break outerLoop\n }\n }\n }\n }\n\n // Make decisions.\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 if (asciiCharsBE > asciiCharsLE) return \"utf-16be\"\n if (asciiCharsBE < asciiCharsLE) return \"utf-16le\"\n\n // Couldn't decide (likely all zeros or not enough data).\n return defaultEncoding || \"utf-16le\"\n}\n",
|
|
57
|
+
"\"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// -- Encoding\n\n// Why scape ()?./?\n// eslint-disable-next-line no-useless-escape\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 ? \"\"\n : this.iconv.encode(chunk, \"utf16-be\").toString(\"base64\").replace(/=+$/, \"\")) +\n \"-\"\n }.bind(this)))\n}\n\nUtf7Encoder.prototype.end = function () {\n}\n\n// -- Decoding\n\nfunction Utf7Decoder (options, codec) {\n this.iconv = codec.iconv\n this.inBase64 = false\n this.base64Accum = \"\"\n}\n\n// Why scape /?\n// eslint-disable-next-line no-useless-escape\nvar base64Regex = /[A-Za-z0-9\\/+]/\nvar base64Chars = []\nfor (var i = 0; i < 256; i++) { base64Chars[i] = base64Regex.test(String.fromCharCode(i)) }\n\nvar plusChar = \"+\".charCodeAt(0)\nvar minusChar = \"-\".charCodeAt(0)\nvar andChar = \"&\".charCodeAt(0)\n\nUtf7Decoder.prototype.write = function (buf) {\n var res = \"\"; var lastI = 0\n var inBase64 = this.inBase64\n var 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 + this.iconv.decode(buf.slice(lastI, i), \"ascii\")\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 + this.iconv.decode(buf.slice(lastI), \"ascii\")\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) { 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// 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\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// -- 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 var base64Accum = this.base64Accum\n var base64AccumIdx = this.base64AccumIdx\n var buf = Buffer.alloc(str.length * 5 + 10); var bufIdx = 0\n\n for (var i = 0; i < str.length; i++) {\n var uChar = str.charCodeAt(i)\n if (uChar >= 0x20 && 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 } 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); var 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// -- 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 = \"\"; var lastI = 0\n var inBase64 = this.inBase64\n var 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 + this.iconv.decode(buf.slice(lastI, i), \"ascii\").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 + this.iconv.decode(buf.slice(lastI), \"ascii\").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) { res = this.iconv.decode(Buffer.from(this.base64Accum, \"base64\"), \"utf16-be\") }\n\n this.inBase64 = false\n this.base64Accum = \"\"\n return res\n}\n",
|
|
58
|
+
"\"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\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\n if (codecOptions.chars.length === 128) {\n var asciiString = \"\"\n for (var i = 0; i < 128; i++) {\n asciiString += String.fromCharCode(i)\n }\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\n this.encodeBuf = encodeBuf\n}\n\nSBCSCodec.prototype.encoder = SBCSEncoder\nSBCSCodec.prototype.decoder = SBCSDecoder\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\n return buf\n}\n\nSBCSEncoder.prototype.end = function () {\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; var 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",
|
|
59
|
+
"\"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: \"ÄĀāÉĄÖÜáąČäčĆć鏟ĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅņѬ√ńŇ∆«»… ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ\"\n },\n\n 808: \"cp808\",\n ibm808: \"cp808\",\n cp808: {\n type: \"_sbcs\",\n chars: \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёЄєЇїЎў°∙·√№€■ \"\n },\n\n mik: {\n type: \"_sbcs\",\n chars: \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя└┴┬├─┼╣║╚╔╩╦╠═╬┐░▒▓│┤№§╗╝┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n },\n\n cp720: {\n type: \"_sbcs\",\n chars: \"\\x80\\x81éâ\\x84à\\x86çêëèïî\\x8d\\x8e\\x8f\\x90\\u0651\\u0652ô¤ـûùءآأؤ£إئابةتثجحخدذرزسشص«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀ضطظعغفµقكلمنهوىي≡\\u064b\\u064c\\u064d\\u064e\\u064f\\u0650≈°∙·√ⁿ²■\\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",
|
|
60
|
+
"\"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\": \"€����…�����������‘’“”•–—�������� กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����\"\n },\n \"win874\": \"windows874\",\n \"cp874\": \"windows874\",\n \"windows1250\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€�‚�„…†‡�‰Š‹ŚŤŽŹ�‘’“”•–—�™š›śťžź ˇ˘Ł¤Ą¦§¨©Ş«¬®Ż°±˛ł´µ¶·¸ąş»Ľ˝ľżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙\"\n },\n \"win1250\": \"windows1250\",\n \"cp1250\": \"windows1250\",\n \"windows1251\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ЂЃ‚ѓ„…†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—�™љ›њќћџ ЎўЈ¤Ґ¦§Ё©Є«¬®Ї°±Ііґµ¶·ё№є»јЅѕїАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя\"\n },\n \"win1251\": \"windows1251\",\n \"cp1251\": \"windows1251\",\n \"windows1252\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ\"\n },\n \"win1252\": \"windows1252\",\n \"cp1252\": \"windows1252\",\n \"windows1253\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€�‚ƒ„…†‡�‰�‹�����‘’“”•–—�™�›���� ΅Ά£¤¥¦§¨©�«¬®―°±²³΄µ¶·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ�ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ�\"\n },\n \"win1253\": \"windows1253\",\n \"cp1253\": \"windows1253\",\n \"windows1254\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€�‚ƒ„…†‡ˆ‰Š‹Œ����‘’“”•–—˜™š›œ��Ÿ ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖרÙÚÛÜİŞßàáâãäåæçèéêëìíîïğñòóôõö÷øùúûüışÿ\"\n },\n \"win1254\": \"windows1254\",\n \"cp1254\": \"windows1254\",\n \"windows1255\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€�‚ƒ„…†‡ˆ‰�‹�����‘’“”•–—˜™�›���� ¡¢£₪¥¦§¨©×«¬®¯°±²³´µ¶·¸¹÷»¼½¾¿ְֱֲֳִֵֶַָֹֺֻּֽ־ֿ׀ׁׂ׃װױײ׳״�������אבגדהוזחטיךכלםמןנסעףפץצקרשת���\"\n },\n \"win1255\": \"windows1255\",\n \"cp1255\": \"windows1255\",\n \"windows1256\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€پ‚ƒ„…†‡ˆ‰ٹ‹Œچژڈگ‘’“”•–—ک™ڑ›œں ،¢£¤¥¦§¨©ھ«¬®¯°±²³´µ¶·¸¹؛»¼½¾؟ہءآأؤإئابةتثجحخدذرزسشصض×طظعغـفقكàلâمنهوçèéêëىيîïًٌٍَôُِ÷ّùْûüے\"\n },\n \"win1256\": \"windows1256\",\n \"cp1256\": \"windows1256\",\n \"windows1257\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€�‚�„…†‡�‰�‹�¨ˇ¸�‘’“”•–—�™�›�¯˛� �¢£¤�¦§Ø©Ŗ«¬®Æ°±²³´µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽßąįāćäåęēčéźėģķīļšńņóōõö÷ųłśūüżž˙\"\n },\n \"win1257\": \"windows1257\",\n \"cp1257\": \"windows1257\",\n \"windows1258\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€�‚ƒ„…†‡ˆ‰�‹Œ����‘’“”•–—˜™�›œ��Ÿ ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖרÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ\"\n },\n \"win1258\": \"windows1258\",\n \"cp1258\": \"windows1258\",\n \"iso88591\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ\"\n },\n \"cp28591\": \"iso88591\",\n \"iso88592\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
Ą˘Ł¤ĽŚ§¨ŠŞŤŹŽŻ°ą˛ł´ľśˇ¸šşťź˝žżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙\"\n },\n \"cp28592\": \"iso88592\",\n \"iso88593\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
Ħ˘£¤�Ĥ§¨İŞĞĴ�ݰħ²³´µĥ·¸ışğĵ½�żÀÁÂ�ÄĊĈÇÈÉÊËÌÍÎÏ�ÑÒÓÔĠÖ×ĜÙÚÛÜŬŜßàáâ�äċĉçèéêëìíîï�ñòóôġö÷ĝùúûüŭŝ˙\"\n },\n \"cp28593\": \"iso88593\",\n \"iso88594\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
ĄĸŖ¤Ĩϧ¨ŠĒĢŦޝ°ą˛ŗ´ĩšēģŧŊžŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎĪĐŅŌĶÔÕÖרŲÚÛÜŨŪßāáâãäåæįčéęëėíîīđņōķôõö÷øųúûüũū˙\"\n },\n \"cp28594\": \"iso88594\",\n \"iso88595\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
ЁЂЃЄЅІЇЈЉЊЋЌЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђѓєѕіїјљњћќ§ўџ\"\n },\n \"cp28595\": \"iso88595\",\n \"iso88596\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
���¤�������،�������������؛���؟�ءآأؤإئابةتثجحخدذرزسشصضطظعغ�����ـفقكلمنهوىيًٌٍَُِّْ�������������\"\n },\n \"cp28596\": \"iso88596\",\n \"iso88597\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
‘’£€₯¦§¨©ͺ«¬�―°±²³΄΅Ά·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ�ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ�\"\n },\n \"cp28597\": \"iso88597\",\n \"iso88598\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
�¢£¤¥¦§¨©×«¬®¯°±²³´µ¶·¸¹÷»¼½¾��������������������������������‗אבגדהוזחטיךכלםמןנסעףפץצקרשת���\"\n },\n \"cp28598\": \"iso88598\",\n \"iso88599\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖרÙÚÛÜİŞßàáâãäåæçèéêëìíîïğñòóôõö÷øùúûüışÿ\"\n },\n \"cp28599\": \"iso88599\",\n \"iso885910\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
ĄĒĢĪĨͧĻĐŠŦŽŪŊ°ąēģīĩķ·ļđšŧž―ūŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎÏÐŅŌÓÔÕÖŨØŲÚÛÜÝÞßāáâãäåæįčéęëėíîïðņōóôõöũøųúûüýþĸ\"\n },\n \"cp28600\": \"iso885910\",\n \"iso885911\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����\"\n },\n \"cp28601\": \"iso885911\",\n \"iso885913\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
”¢£¤„¦§Ø©Ŗ«¬®Æ°±²³“µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽßąįāćäåęēčéźėģķīļšńņóōõö÷ųłśūüżž’\"\n },\n \"cp28603\": \"iso885913\",\n \"iso885914\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
Ḃḃ£ĊċḊ§Ẁ©ẂḋỲ®ŸḞḟĠġṀṁ¶ṖẁṗẃṠỳẄẅṡÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏŴÑÒÓÔÕÖṪØÙÚÛÜÝŶßàáâãäåæçèéêëìíîïŵñòóôõöṫøùúûüýŷÿ\"\n },\n \"cp28604\": \"iso885914\",\n \"iso885915\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
¡¢£€¥Š§š©ª«¬®¯°±²³Žµ¶·ž¹º»ŒœŸ¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ\"\n },\n \"cp28605\": \"iso885915\",\n \"iso885916\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
ĄąŁ€„Чš©Ș«ŹźŻ°±ČłŽ”¶·žčș»ŒœŸżÀÁÂĂÄĆÆÇÈÉÊËÌÍÎÏĐŃÒÓÔŐÖŚŰÙÚÛÜĘȚßàáâăäćæçèéêëìíîïđńòóôőöśűùúûüęțÿ\"\n },\n \"cp28606\": \"iso885916\",\n \"cp437\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n },\n \"ibm437\": \"cp437\",\n \"csibm437\": \"cp437\",\n \"cp737\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρσςτυφχψ░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀ωάέήϊίόύϋώΆΈΉΊΌΎΏ±≥≤ΪΫ÷≈°∙·√ⁿ²■ \"\n },\n \"ibm737\": \"cp737\",\n \"csibm737\": \"cp737\",\n \"cp775\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ĆüéāäģåćłēŖŗīŹÄÅÉæÆōöĢ¢ŚśÖÜø£Ø×¤ĀĪóŻżź”¦©®¬½¼Ł«»░▒▓│┤ĄČĘĖ╣║╗╝ĮŠ┐└┴┬├─┼ŲŪ╚╔╩╦╠═╬Žąčęėįšųūž┘┌█▄▌▐▀ÓßŌŃõÕµńĶķĻļņĒŅ’±“¾¶§÷„°∙·¹³²■ \"\n },\n \"ibm775\": \"cp775\",\n \"csibm775\": \"cp775\",\n \"cp850\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø×ƒáíóúñѪº¿®¬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ðÐÊËÈıÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµþÞÚÛÙýݯ´±‗¾¶§÷¸°¨·¹³²■ \"\n },\n \"ibm850\": \"cp850\",\n \"csibm850\": \"cp850\",\n \"cp852\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÇüéâäůćçłëŐőîŹÄĆÉĹĺôöĽľŚśÖÜŤťŁ×čáíóúĄąŽžĘ꬟Ⱥ«»░▒▓│┤ÁÂĚŞ╣║╗╝Żż┐└┴┬├─┼Ăă╚╔╩╦╠═╬¤đĐĎËďŇÍÎě┘┌█▄ŢŮ▀ÓßÔŃńňŠšŔÚŕŰýÝţ´˝˛ˇ˘§÷¸°¨˙űŘř■ \"\n },\n \"ibm852\": \"cp852\",\n \"csibm852\": \"cp852\",\n \"cp855\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ђЂѓЃёЁєЄѕЅіІїЇјЈљЉњЊћЋќЌўЎџЏюЮъЪаАбБцЦдДеЕфФгГ«»░▒▓│┤хХиИ╣║╗╝йЙ┐└┴┬├─┼кК╚╔╩╦╠═╬¤лЛмМнНоОп┘┌█▄Пя▀ЯрРсСтТуУжЖвВьЬ№ыЫзЗшШэЭщЩчЧ§■ \"\n },\n \"ibm855\": \"cp855\",\n \"csibm855\": \"cp855\",\n \"cp856\": {\n \"type\": \"_sbcs\",\n \"chars\": \"אבגדהוזחטיךכלםמןנסעףפץצקרשת�£�×����������®¬½¼�«»░▒▓│┤���©╣║╗╝¢¥┐└┴┬├─┼��╚╔╩╦╠═╬¤���������┘┌█▄¦�▀������µ�������¯´±‗¾¶§÷¸°¨·¹³²■ \"\n },\n \"ibm856\": \"cp856\",\n \"csibm856\": \"cp856\",\n \"cp857\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÇüéâäàåçêëèïîıÄÅÉæÆôöòûùİÖÜø£ØŞşáíóúñÑĞ𿮬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ºªÊËÈ�ÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµ�×ÚÛÙìÿ¯´±�¾¶§÷¸°¨·¹³²■ \"\n },\n \"ibm857\": \"cp857\",\n \"csibm857\": \"cp857\",\n \"cp858\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø×ƒáíóúñѪº¿®¬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ðÐÊËÈ€ÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµþÞÚÛÙýݯ´±‗¾¶§÷¸°¨·¹³²■ \"\n },\n \"ibm858\": \"cp858\",\n \"csibm858\": \"cp858\",\n \"cp860\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÇüéâãàÁçêÊèÍÔìÃÂÉÀÈôõòÚùÌÕÜ¢£Ù₧ÓáíóúñѪº¿Ò¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n },\n \"ibm860\": \"cp860\",\n \"csibm860\": \"cp860\",\n \"cp861\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÇüéâäàåçêëèÐðÞÄÅÉæÆôöþûÝýÖÜø£Ø₧ƒáíóúÁÍÓÚ¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n },\n \"ibm861\": \"cp861\",\n \"csibm861\": \"cp861\",\n \"cp862\": {\n \"type\": \"_sbcs\",\n \"chars\": \"אבגדהוזחטיךכלםמןנסעףפץצקרשת¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n },\n \"ibm862\": \"cp862\",\n \"csibm862\": \"cp862\",\n \"cp863\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÇüéâÂà¶çêëèïî‗À§ÉÈÊôËÏûù¤ÔÜ¢£ÙÛƒ¦´óú¨¸³¯Î⌐¬½¼¾«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\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 !\\\"#$٪&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~°·∙√▒─│┼┤┬├┴┐┌└┘β∞φ±½¼≈«»ﻷﻸ��ﻻﻼ� ﺂ£¤ﺄ��ﺎﺏﺕﺙ،ﺝﺡﺥ٠١٢٣٤٥٦٧٨٩ﻑ؛ﺱﺵﺹ؟¢ﺀﺁﺃﺅﻊﺋﺍﺑﺓﺗﺛﺟﺣﺧﺩﺫﺭﺯﺳﺷﺻﺿﻁﻅﻋﻏ¦¬÷×ﻉـﻓﻗﻛﻟﻣﻧﻫﻭﻯﻳﺽﻌﻎﻍﻡﹽّﻥﻩﻬﻰﻲﻐﻕﻵﻶﻝﻙﻱ■�\"\n },\n \"ibm864\": \"cp864\",\n \"csibm864\": \"cp864\",\n \"cp865\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø₧ƒáíóúñѪº¿⌐¬½¼¡«¤░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n },\n \"ibm865\": \"cp865\",\n \"csibm865\": \"cp865\",\n \"cp866\": {\n \"type\": \"_sbcs\",\n \"chars\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёЄєЇїЎў°∙·√№¤■ \"\n },\n \"ibm866\": \"cp866\",\n \"csibm866\": \"cp866\",\n \"cp869\": {\n \"type\": \"_sbcs\",\n \"chars\": \"������Ά�·¬¦‘’Έ―ΉΊΪΌ��ΎΫ©Ώ²³ά£έήίϊΐόύΑΒΓΔΕΖΗ½ΘΙ«»░▒▓│┤ΚΛΜΝ╣║╗╝ΞΟ┐└┴┬├─┼ΠΡ╚╔╩╦╠═╬ΣΤΥΦΧΨΩαβγ┘┌█▄δε▀ζηθικλμνξοπρσςτ΄±υφχ§ψ΅°¨ωϋΰώ■ \"\n },\n \"ibm869\": \"cp869\",\n \"csibm869\": \"cp869\",\n \"cp922\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
¡¢£¤¥¦§¨©ª«¬®‾°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏŠÑÒÓÔÕÖרÙÚÛÜÝŽßàáâãäåæçèéêëìíîïšñòóôõö÷øùúûüýžÿ\"\n },\n \"ibm922\": \"cp922\",\n \"csibm922\": \"cp922\",\n \"cp1046\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ﺈ×÷ﹱ■│─┐┌└┘ﹹﹻﹽﹿﹷﺊﻰﻳﻲﻎﻏﻐﻶﻸﻺﻼ ¤ﺋﺑﺗﺛﺟﺣ،ﺧﺳ٠١٢٣٤٥٦٧٨٩ﺷ؛ﺻﺿﻊ؟ﻋءآأؤإئابةتثجحخدذرزسشصضطﻇعغﻌﺂﺄﺎﻓـفقكلمنهوىيًٌٍَُِّْﻗﻛﻟﻵﻷﻹﻻﻣﻧﻬﻩ�\"\n },\n \"ibm1046\": \"cp1046\",\n \"csibm1046\": \"cp1046\",\n \"cp1124\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
ЁЂҐЄЅІЇЈЉЊЋЌЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђґєѕіїјљњћќ§ўџ\"\n },\n \"ibm1124\": \"cp1124\",\n \"csibm1124\": \"cp1124\",\n \"cp1125\": {\n \"type\": \"_sbcs\",\n \"chars\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёҐґЄєІіЇї·√№¤■ \"\n },\n \"ibm1125\": \"cp1125\",\n \"csibm1125\": \"cp1125\",\n \"cp1129\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
¡¢£¤¥¦§œ©ª«¬®¯°±²³Ÿµ¶·Œ¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖרÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ\"\n },\n \"ibm1129\": \"cp1129\",\n \"csibm1129\": \"cp1129\",\n \"cp1133\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
ກຂຄງຈສຊຍດຕຖທນບປຜຝພຟມຢຣລວຫອຮ���ຯະາຳິີຶືຸູຼັົຽ���ເແໂໃໄ່້໊໋໌ໍໆ�ໜໝ₭����������������໐໑໒໓໔໕໖໗໘໙��¢¬¦�\"\n },\n \"ibm1133\": \"cp1133\",\n \"csibm1133\": \"cp1133\",\n \"cp1161\": {\n \"type\": \"_sbcs\",\n \"chars\": \"��������������������������������่กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู้๊๋€฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛¢¬¦ \"\n },\n \"ibm1161\": \"cp1161\",\n \"csibm1161\": \"cp1161\",\n \"cp1162\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€…‘’“”•–— กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����\"\n },\n \"ibm1162\": \"cp1162\",\n \"csibm1162\": \"cp1162\",\n \"cp1163\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
¡¢£€¥¦§œ©ª«¬®¯°±²³Ÿµ¶·Œ¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖרÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ\"\n },\n \"ibm1163\": \"cp1163\",\n \"csibm1163\": \"cp1163\",\n \"maccroatian\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®Š™´¨≠ŽØ∞±≤≥∆µ∂∑∏š∫ªºΩžø¿¡¬√ƒ≈ƫȅ ÀÃÕŒœĐ—“”‘’÷◊�©⁄¤‹›Æ»–·‚„‰ÂćÁčÈÍÎÏÌÓÔđÒÚÛÙıˆ˜¯πË˚¸Êæˇ\"\n },\n \"maccyrillic\": {\n \"type\": \"_sbcs\",\n \"chars\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°¢£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµ∂ЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю¤\"\n },\n \"macgreek\": {\n \"type\": \"_sbcs\",\n \"chars\": \"Ĺ²É³ÖÜ΅àâä΄¨çéèê룙î‰ôö¦ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩάΝ¬ΟΡ≈Τ«»… ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ�\"\n },\n \"maciceland\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüݰ¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ\"\n },\n \"macroman\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ\"\n },\n \"macromania\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ĂŞ∞±≤≥¥µ∂∑∏π∫ªºΩăş¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›Ţţ‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ\"\n },\n \"macthai\": {\n \"type\": \"_sbcs\",\n \"chars\": \"«»…“”�•‘’� กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู\uFEFF–—฿เแโใไๅๆ็่้๊๋์ํ™๏๐๑๒๓๔๕๖๗๘๙®©����\"\n },\n \"macturkish\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙ�ˆ˜¯˘˙˚¸˝˛ˇ\"\n },\n \"macukraine\": {\n \"type\": \"_sbcs\",\n \"chars\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°Ґ£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµґЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю¤\"\n },\n \"koi8r\": {\n \"type\": \"_sbcs\",\n \"chars\": \"─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ё╓╔╕╖╗╘╙╚╛╜╝╞╟╠╡Ё╢╣╤╥╦╧╨╩╪╫╬©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ\"\n },\n \"koi8u\": {\n \"type\": \"_sbcs\",\n \"chars\": \"─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ёє╔ії╗╘╙╚╛ґ╝╞╟╠╡ЁЄ╣ІЇ╦╧╨╩╪Ґ╬©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ\"\n },\n \"koi8ru\": {\n \"type\": \"_sbcs\",\n \"chars\": \"─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ёє╔ії╗╘╙╚╛ґў╞╟╠╡ЁЄ╣ІЇ╦╧╨╩╪ҐЎ©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ\"\n },\n \"koi8t\": {\n \"type\": \"_sbcs\",\n \"chars\": \"қғ‚Ғ„…†‡�‰ҳ‹ҲҷҶ�Қ‘’“”•–—�™�›�����ӯӮё¤ӣ¦§���«¬®�°±²Ё�Ӣ¶·�№�»���©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ\"\n },\n \"armscii8\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
�և։)(»«—.՝,-֊…՜՛՞ԱաԲբԳգԴդԵեԶզԷէԸըԹթԺժԻիԼլԽխԾծԿկՀհՁձՂղՃճՄմՅյՆնՇշՈոՉչՊպՋջՌռՍսՎվՏտՐրՑցՒւՓփՔքՕօՖֆ՚�\"\n },\n \"rk1048\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ЂЃ‚ѓ„…†‡€‰Љ‹ЊҚҺЏђ‘’“”•–—�™љ›њқһџ ҰұӘ¤Ө¦§Ё©Ғ«¬®Ү°±Ііөµ¶·ё№ғ»әҢңүАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя\"\n },\n \"tcvn\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\\u0000ÚỤ\\u0003ỪỬỮ\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010ỨỰỲỶỸÝỴ\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÀẢÃÁẠẶẬÈẺẼÉẸỆÌỈĨÍỊÒỎÕÓỌỘỜỞỠỚỢÙỦŨ ĂÂÊÔƠƯĐăâêôơưđẶ̀̀̉̃́àảãáạẲằẳẵắẴẮẦẨẪẤỀặầẩẫấậèỂẻẽéẹềểễếệìỉỄẾỒĩíịòỔỏõóọồổỗốộờởỡớợùỖủũúụừửữứựỳỷỹýỵỐ\"\n },\n \"georgianacademy\": {\n \"type\": \"_sbcs\",\n \"chars\": \"‚ƒ„…†‡ˆ‰Š‹Œ‘’“”•–—˜™š›œŸ ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿აბგდევზთიკლმნოპჟრსტუფქღყშჩცძწჭხჯჰჱჲჳჴჵჶçèéêëìíîïðñòóôõö÷øùúûüýþÿ\"\n },\n \"georgianps\": {\n \"type\": \"_sbcs\",\n \"chars\": \"‚ƒ„…†‡ˆ‰Š‹Œ‘’“”•–—˜™š›œŸ ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿აბგდევზჱთიკლმნჲოპჟრსტჳუფქღყშჩცძწჭხჴჯჰჵæçèéêëìíîïðñòóôõö÷øùúûüýþÿ\"\n },\n \"pt154\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ҖҒӮғ„…ҶҮҲүҠӢҢҚҺҸҗ‘’“”•–—ҳҷҡӣңқһҹ ЎўЈӨҘҰ§Ё©Ә«¬ӯ®Ҝ°ұІіҙө¶·ё№ә»јҪҫҝАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя\"\n },\n \"viscii\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\\u0000\\u0001Ẳ\\u0003\\u0004ẴẪ\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013Ỷ\\u0015\\u0016\\u0017\\u0018Ỹ\\u001a\\u001b\\u001c\\u001dỴ\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ẠẮẰẶẤẦẨẬẼẸẾỀỂỄỆỐỒỔỖỘỢỚỜỞỊỎỌỈỦŨỤỲÕắằặấầẩậẽẹếềểễệốồổỗỠƠộờởịỰỨỪỬơớƯÀÁÂÃẢĂẳẵÈÉÊẺÌÍĨỳĐứÒÓÔạỷừửÙÚỹỵÝỡưàáâãảăữẫèéêẻìíĩỉđựòóôõỏọụùúũủýợỮ\"\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 !\\\"#¥%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}‾��������������������������������������������������������������������������������������������������������������������������������\"\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[¥]^_`abcdefghijklmnopqrstuvwxyz{|}‾��������������������������������������������������������������������������������������������������������������������������������\"\n },\n \"hproman8\": {\n \"type\": \"_sbcs\",\n \"chars\": \"
ÀÂÈÊËÎÏ´ˋˆ¨˜ÙÛ₤¯Ýý°ÇçÑñ¡¿¤£¥§ƒ¢âêôûáéóúàèòùäëöüÅîØÆåíøæÄìÖÜÉïßÔÁÃãÐðÍÌÓÒÕõŠšÚŸÿÞþ·µ¶¾—¼½ªº«■»±�\"\n },\n \"macintosh\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ\"\n },\n \"ascii\": {\n \"type\": \"_sbcs\",\n \"chars\": \"��������������������������������������������������������������������������������������������������������������������������������\"\n },\n \"tis620\": {\n \"type\": \"_sbcs\",\n \"chars\": \"���������������������������������กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����\"\n }\n}",
|
|
61
|
+
"\"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\nvar GB18030_CODE = -2\nvar SEQ_START = -10\nvar NODE_START = -1000\nvar UNASSIGNED_NODE = new Array(0x100)\nvar DEF_CHAR = -1\n\nfor (var i = 0; i < 0x100; i++) { UNASSIGNED_NODE[i] = UNASSIGNED }\n\n// Class DBCSCodec reads and initializes mapping tables.\nfunction DBCSCodec (codecOptions, iconv) {\n this.encodingName = codecOptions.encodingName\n if (!codecOptions) { throw new Error(\"DBCS codec is called without the data.\") }\n if (!codecOptions.table) { throw new Error(\"Encoding '\" + this.encodingName + \"' has no data.\") }\n\n // Load tables.\n var mappingTable = codecOptions.table()\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++) { this._addDecodeChunk(mappingTable[i]) }\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 common decode nodes.\n var commonThirdByteNodeIdx = this.decodeTables.length\n this.decodeTables.push(UNASSIGNED_NODE.slice(0))\n\n var commonFourthByteNodeIdx = this.decodeTables.length\n this.decodeTables.push(UNASSIGNED_NODE.slice(0))\n\n // Fill out the tree\n var firstByteNode = this.decodeTables[0]\n for (var i = 0x81; i <= 0xFE; i++) {\n var secondByteNode = this.decodeTables[NODE_START - firstByteNode[i]]\n for (var j = 0x30; j <= 0x39; j++) {\n if (secondByteNode[j] === UNASSIGNED) {\n secondByteNode[j] = NODE_START - commonThirdByteNodeIdx\n } else if (secondByteNode[j] > NODE_START) {\n throw new Error(\"gb18030 decode tables conflict at byte 2\")\n }\n\n var thirdByteNode = this.decodeTables[NODE_START - secondByteNode[j]]\n for (var k = 0x81; k <= 0xFE; k++) {\n if (thirdByteNode[k] === UNASSIGNED) {\n thirdByteNode[k] = NODE_START - commonFourthByteNodeIdx\n } else if (thirdByteNode[k] === NODE_START - commonFourthByteNodeIdx) {\n continue\n } else if (thirdByteNode[k] > NODE_START) {\n throw new Error(\"gb18030 decode tables conflict at byte 3\")\n }\n\n var fourthByteNode = this.decodeTables[NODE_START - thirdByteNode[k]]\n for (var l = 0x30; l <= 0x39; l++) {\n if (fourthByteNode[l] === UNASSIGNED) { fourthByteNode[l] = GB18030_CODE }\n }\n }\n }\n }\n }\n\n this.defaultCharUnicode = iconv.defaultCharUnicode\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\") { skipEncodeChars[val] = true } else {\n for (var j = val.from; j <= val.to; j++) { skipEncodeChars[j] = true }\n }\n }\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)) { this._setEncodeChar(uChar.charCodeAt(0), codecOptions.encodeAdd[uChar]) }\n }\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\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) { bytes.push(addr & 0xFF) }\n if (bytes.length == 0) { 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 } else if (val <= NODE_START) { // Existing node.\n node = this.decodeTables[NODE_START - val]\n } else { throw new Error(\"Overwrite byte in \" + this.encodingName + \", addr: \" + addr.toString(16)) }\n }\n return node\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 (code >= 0xD800 && code < 0xDC00) { // Decode surrogate\n var codeTrail = part.charCodeAt(l++)\n if (codeTrail >= 0xDC00 && codeTrail < 0xE000) { writeTable[curAddr++] = 0x10000 + (code - 0xD800) * 0x400 + (codeTrail - 0xDC00) } else { throw new Error(\"Incorrect surrogate pair in \" + this.encodingName + \" at chunk \" + chunk[0]) }\n } else if (code > 0x0FF0 && 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++) { 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 } else { writeTable[curAddr++] = code } // Basic char\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++) { writeTable[curAddr++] = charCode++ }\n } else { throw new Error(\"Incorrect type '\" + typeof part + \"' given in \" + this.encodingName + \" at chunk \" + chunk[0]) }\n }\n if (curAddr > 0xFF) { 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)\n } // 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) { 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) { bucket[low] = dbcsCode }\n}\n\nDBCSCodec.prototype._setEncodeSequence = function (seq, dbcsCode) {\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 } 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\") { node = oldVal } else {\n node = node[uCode] = {}\n if (oldVal !== undefined) { 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 var hasValues = false\n var subNodeEmpty = {}\n for (var i = 0; i < 0x100; i++) {\n var uCode = node[i]\n var mbCode = prefix + i\n if (skipEncodeChars[mbCode]) { continue }\n\n if (uCode >= 0) {\n this._setEncodeChar(uCode, mbCode)\n hasValues = true\n } else if (uCode <= NODE_START) {\n var subNodeIdx = NODE_START - uCode\n if (!subNodeEmpty[subNodeIdx]) { // Skip empty subtrees (they are too large in gb18030).\n var newPrefix = (mbCode << 8) >>> 0 // NOTE: '>>> 0' keeps 32-bit num positive.\n if (this._fillEncodeTable(subNodeIdx, newPrefix, skipEncodeChars)) { hasValues = true } else { subNodeEmpty[subNodeIdx] = true }\n }\n } else if (uCode <= SEQ_START) {\n this._setEncodeSequence(this.decodeTableSeq[SEQ_START - uCode], mbCode)\n hasValues = true\n }\n }\n return hasValues\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 var leadSurrogate = this.leadSurrogate\n var seqObj = this.seqObj\n var nextChar = -1\n var i = 0; var 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 } else {\n var uCode = nextChar\n nextChar = -1\n }\n\n // 1. Handle surrogates.\n if (uCode >= 0xD800 && 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 } 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 } else if (typeof resCode === \"number\") { // Sequence finished. Write it.\n dbcsCode = resCode\n } else if (resCode == undefined) { // Current character is not part of the sequence.\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 } 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 } else if (uCode >= 0) { // Regular character\n var subtable = this.encodeTable[uCode >> 8]\n if (subtable !== undefined) { 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) { dbcsCode = this.defaultCharSingleByte }\n\n if (dbcsCode < 0x100) {\n newBuf[j++] = dbcsCode\n } else if (dbcsCode < 0x10000) {\n newBuf[j++] = dbcsCode >> 8 // high byte\n newBuf[j++] = dbcsCode & 0xFF // low byte\n } else if (dbcsCode < 0x1000000) {\n newBuf[j++] = dbcsCode >> 16\n newBuf[j++] = (dbcsCode >> 8) & 0xFF\n newBuf[j++] = dbcsCode & 0xFF\n } else {\n newBuf[j++] = dbcsCode >>> 24\n newBuf[j++] = (dbcsCode >>> 16) & 0xFF\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) { return } // All clean. Most often case.\n\n var newBuf = Buffer.alloc(10); var 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 } 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// == Decoder ==================================================================\n\nfunction DBCSDecoder (options, codec) {\n // Decoder state\n this.nodeIdx = 0\n this.prevBytes = []\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 var nodeIdx = this.nodeIdx\n var prevBytes = this.prevBytes; var prevOffset = this.prevBytes.length\n var seqStart = -this.prevBytes.length // idx of the start of current parsed sequence.\n var uCode\n\n for (var i = 0, j = 0; i < buf.length; i++) {\n var curByte = (i >= 0) ? buf[i] : prevBytes[i + prevOffset]\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 } else if (uCode === UNASSIGNED) { // Unknown char.\n // TODO: Callback with seq.\n uCode = this.defaultCharUnicode.charCodeAt(0)\n i = seqStart // Skip one byte ('i' will be incremented by the for loop) and try to parse again.\n } else if (uCode === GB18030_CODE) {\n if (i >= 3) {\n var ptr = (buf[i - 3] - 0x81) * 12600 + (buf[i - 2] - 0x30) * 1260 + (buf[i - 1] - 0x81) * 10 + (curByte - 0x30)\n } else {\n var ptr = (prevBytes[i - 3 + prevOffset] - 0x81) * 12600 +\n (((i - 2 >= 0) ? buf[i - 2] : prevBytes[i - 2 + prevOffset]) - 0x30) * 1260 +\n (((i - 1 >= 0) ? buf[i - 1] : prevBytes[i - 1 + prevOffset]) - 0x81) * 10 +\n (curByte - 0x30)\n }\n var idx = findIdx(this.gb18030.gbChars, ptr)\n uCode = this.gb18030.uChars[idx] + ptr - this.gb18030.gbChars[idx]\n } else if (uCode <= NODE_START) { // Go to next trie node.\n nodeIdx = NODE_START - uCode\n continue\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 } else { 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 >= 0x10000) {\n uCode -= 0x10000\n var uCodeLead = 0xD800 | (uCode >> 10)\n newBuf[j++] = uCodeLead & 0xFF\n newBuf[j++] = uCodeLead >> 8\n\n uCode = 0xDC00 | (uCode & 0x3FF)\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.prevBytes = (seqStart >= 0)\n ? Array.prototype.slice.call(buf, seqStart)\n : prevBytes.slice(seqStart + prevOffset).concat(Array.prototype.slice.call(buf))\n\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.prevBytes.length > 0) {\n // Skip 1 character in the buffer.\n ret += this.defaultCharUnicode\n var bytesArr = this.prevBytes.slice(1)\n\n // Parse remaining as usual.\n this.prevBytes = []\n this.nodeIdx = 0\n if (bytesArr.length > 0) { ret += this.write(bytesArr) }\n }\n\n this.prevBytes = []\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) { return -1 }\n\n var l = 0; var r = table.length\n while (l < r - 1) { // always table[l] <= val < table[r]\n var mid = l + ((r - l + 1) >> 1)\n if (table[mid] <= val) { l = mid } else { r = mid }\n }\n return l\n}\n",
|
|
62
|
+
"\"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 + ¥ + 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 // == 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: { \"€\": 0xA2E3 }\n },\n\n chinese: \"gb18030\",\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 // == 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: [\n // Although Encoding Standard says we should avoid encoding to HKSCS area (See Step 1 of\n // https://encoding.spec.whatwg.org/#index-big5-pointer), we still do it to increase compatibility with ICU.\n // But if a single unicode point can be encoded both as HKSCS and regular Big5, we prefer the latter.\n 0x8e69, 0x8e6f, 0x8e7e, 0x8eab, 0x8eb4, 0x8ecd, 0x8ed0, 0x8f57, 0x8f69, 0x8f6e, 0x8fcb, 0x8ffe,\n 0x906d, 0x907a, 0x90c4, 0x90dc, 0x90f1, 0x91bf, 0x92af, 0x92b0, 0x92b1, 0x92b2, 0x92d1, 0x9447, 0x94ca,\n 0x95d9, 0x96fc, 0x9975, 0x9b76, 0x9b78, 0x9b7b, 0x9bc6, 0x9bde, 0x9bec, 0x9bf6, 0x9c42, 0x9c53, 0x9c62,\n 0x9c68, 0x9c6b, 0x9c77, 0x9cbc, 0x9cbd, 0x9cd0, 0x9d57, 0x9d5a, 0x9dc4, 0x9def, 0x9dfb, 0x9ea9, 0x9eef,\n 0x9efd, 0x9f60, 0x9fcb, 0xa077, 0xa0dc, 0xa0df, 0x8fcc, 0x92c8, 0x9644, 0x96ed,\n\n // Step 2 of https://encoding.spec.whatwg.org/#index-big5-pointer: Use last pointer for U+2550, U+255E, U+2561, U+256A, U+5341, or U+5345\n 0xa2a4, 0xa2a5, 0xa2a7, 0xa2a6, 0xa2cc, 0xa2ce\n ]\n },\n\n cnbig5: \"big5hkscs\",\n csbig5: \"big5hkscs\",\n xxbig5: \"big5hkscs\"\n}\n",
|
|
63
|
+
"\"use strict\"\n\nvar mergeModules = require(\"../lib/helpers/merge-exports\")\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(\"./utf32\"),\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 mergeModules(exports, module)\n}\n",
|
|
64
|
+
"\"use strict\"\n\nvar Buffer = require(\"safer-buffer\").Buffer\n\n// NOTE: Due to 'stream' module being pretty large (~100Kb, significant in browser environments),\n// we opt to dependency-inject it instead of creating a hard dependency.\nmodule.exports = function (streamModule) {\n var Transform = streamModule.Transform\n\n // == Encoder stream =======================================================\n\n function 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\n IconvLiteEncoderStream.prototype = Object.create(Transform.prototype, {\n constructor: { value: IconvLiteEncoderStream }\n })\n\n IconvLiteEncoderStream.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 }\n\n try {\n var res = this.conv.write(chunk)\n if (res && res.length) this.push(res)\n done()\n } catch (e) {\n done(e)\n }\n }\n\n IconvLiteEncoderStream.prototype._flush = function (done) {\n try {\n var res = this.conv.end()\n if (res && res.length) this.push(res)\n done()\n } catch (e) {\n done(e)\n }\n }\n\n IconvLiteEncoderStream.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 // == Decoder stream =======================================================\n\n function 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\n IconvLiteDecoderStream.prototype = Object.create(Transform.prototype, {\n constructor: { value: IconvLiteDecoderStream }\n })\n\n IconvLiteDecoderStream.prototype._transform = function (chunk, encoding, done) {\n if (!Buffer.isBuffer(chunk) && !(chunk instanceof Uint8Array)) { 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 } catch (e) {\n done(e)\n }\n }\n\n IconvLiteDecoderStream.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 } catch (e) {\n done(e)\n }\n }\n\n IconvLiteDecoderStream.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 return {\n IconvLiteEncoderStream: IconvLiteEncoderStream,\n IconvLiteDecoderStream: IconvLiteDecoderStream\n }\n}\n",
|
|
65
|
+
"\"use strict\"\n\nvar Buffer = require(\"safer-buffer\").Buffer\n\nvar bomHandling = require(\"./bom-handling\")\nvar mergeModules = require(\"./helpers/merge-exports\")\nvar 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`.\n// Cannot initialize with { __proto__: null } because Boolean({ __proto__: null }) === true\niconv.encodings = null\n\n// Characters emitted in case of error.\niconv.defaultCharUnicode = \"�\"\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 = { __proto__: null }\n\niconv.getCodec = function getCodec (encoding) {\n if (!iconv.encodings) {\n var raw = require(\"../encodings\")\n // TODO: In future versions when old nodejs support is removed can use object.assign\n iconv.encodings = { __proto__: null } // Initialize as empty object.\n mergeModules(iconv.encodings, raw)\n }\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\n if (codec) { 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) { codecOptions[key] = codecDef[key] }\n\n if (!codecOptions.encodingName) { codecOptions.encodingName = enc }\n\n enc = codecDef.type\n break\n\n case \"function\": // Codec itself.\n if (!codecOptions.encodingName) { 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 //\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 var encoder = new codec.encoder(options, codec)\n\n if (codec.bomAware && options && options.addBOM) { 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 var decoder = new codec.decoder(options, codec)\n\n if (codec.bomAware && !(options && options.stripBOM === false)) { decoder = new bomHandling.StripBOM(decoder, options) }\n\n return decoder\n}\n\n// Streaming API\n// NOTE: Streaming API naturally depends on 'stream' module from Node.js. Unfortunately in browser environments this module can add\n// up to 100Kb to the output bundle. To avoid unnecessary code bloat, we don't enable Streaming API in browser by default.\n// If you would like to enable it explicitly, please add the following code to your app:\n// > iconv.enableStreamingAPI(require('stream'));\niconv.enableStreamingAPI = function enableStreamingAPI (streamModule) {\n if (iconv.supportsStreams) { return }\n\n // Dependency-inject stream module to create IconvLite stream classes.\n var streams = require(\"./streams\")(streamModule)\n\n // Not public API yet, but expose the stream classes.\n iconv.IconvLiteEncoderStream = streams.IconvLiteEncoderStream\n iconv.IconvLiteDecoderStream = streams.IconvLiteDecoderStream\n\n // Streaming API.\n iconv.encodeStream = function encodeStream (encoding, options) {\n return new iconv.IconvLiteEncoderStream(iconv.getEncoder(encoding, options), options)\n }\n\n iconv.decodeStream = function decodeStream (encoding, options) {\n return new iconv.IconvLiteDecoderStream(iconv.getDecoder(encoding, options), options)\n }\n\n iconv.supportsStreams = true\n}\n\n// Enable Streaming API automatically if 'stream' module is available and non-empty (the majority of environments).\nvar streamModule\ntry {\n streamModule = require(\"stream\")\n} catch (e) {}\n\nif (streamModule && streamModule.Transform) {\n iconv.enableStreamingAPI(streamModule)\n} else {\n // In rare cases where 'stream' module is not available by default, throw a helpful exception.\n iconv.encodeStream = iconv.decodeStream = function () {\n throw new Error(\"iconv-lite Streaming API is not enabled. Use iconv.enableStreamingAPI(require('stream')); to enable it.\")\n }\n}\n\n// Some environments, such as browsers, may not load JavaScript files as UTF-8\n// eslint-disable-next-line no-constant-condition\nif (\"Ā\" !== \"\\u0100\") {\n console.error(\"iconv-lite warning: js files use non-utf8 encoding. See https://github.com/ashtuchkin/iconv-lite/wiki/Javascript-source-file-encodings for more info.\")\n}\n",
|
|
66
|
+
"'use strict';\n\nconst Iconv = require('iconv-lite');\nconst { createLRU } = require('lru.min');\n\nconst decoderCache = createLRU({\n max: 500,\n});\n\nexports.decode = function (buffer, encoding, start, end, options) {\n if (Buffer.isEncoding(encoding)) {\n return buffer.toString(encoding, start, end);\n }\n\n // Optimize for common case: encoding=\"short_string\", options=undefined.\n let decoder;\n if (!options) {\n decoder = decoderCache.get(encoding);\n if (!decoder) {\n decoder = Iconv.getDecoder(encoding);\n decoderCache.set(encoding, decoder);\n }\n } else {\n const decoderArgs = { encoding, options };\n const decoderKey = JSON.stringify(decoderArgs);\n decoder = decoderCache.get(decoderKey);\n if (!decoder) {\n decoder = Iconv.getDecoder(decoderArgs.encoding, decoderArgs.options);\n decoderCache.set(decoderKey, decoder);\n }\n }\n\n const res = decoder.write(buffer.slice(start, end));\n const trail = decoder.end();\n\n return trail ? res + trail : res;\n};\n\nexports.encode = function (string, encoding, options) {\n if (Buffer.isEncoding(encoding)) {\n return Buffer.from(string, encoding);\n }\n\n const encoder = Iconv.getEncoder(encoding, options || {});\n\n const res = encoder.write(string);\n const trail = encoder.end();\n\n return trail && trail.length > 0 ? Buffer.concat([res, trail]) : res;\n};\n",
|
|
67
|
+
"'use strict';\n\nmodule.exports = {\n 0x00: 'DECIMAL', // aka DECIMAL\n 0x01: 'TINY', // aka TINYINT, 1 byte\n 0x02: 'SHORT', // aka SMALLINT, 2 bytes\n 0x03: 'LONG', // aka INT, 4 bytes\n 0x04: 'FLOAT', // aka FLOAT, 4-8 bytes\n 0x05: 'DOUBLE', // aka DOUBLE, 8 bytes\n 0x06: 'NULL', // NULL (used for prepared statements, I think)\n 0x07: 'TIMESTAMP', // aka TIMESTAMP\n 0x08: 'LONGLONG', // aka BIGINT, 8 bytes\n 0x09: 'INT24', // aka MEDIUMINT, 3 bytes\n 0x0a: 'DATE', // aka DATE\n 0x0b: 'TIME', // aka TIME\n 0x0c: 'DATETIME', // aka DATETIME\n 0x0d: 'YEAR', // aka YEAR, 1 byte (don't ask)\n 0x0e: 'NEWDATE', // aka ?\n 0x0f: 'VARCHAR', // aka VARCHAR (?)\n 0x10: 'BIT', // aka BIT, 1-8 byte\n 0xf5: 'JSON',\n 0xf6: 'NEWDECIMAL', // aka DECIMAL\n 0xf7: 'ENUM', // aka ENUM\n 0xf8: 'SET', // aka SET\n 0xf9: 'TINY_BLOB', // aka TINYBLOB, TINYTEXT\n 0xfa: 'MEDIUM_BLOB', // aka MEDIUMBLOB, MEDIUMTEXT\n 0xfb: 'LONG_BLOB', // aka LONGBLOG, LONGTEXT\n 0xfc: 'BLOB', // aka BLOB, TEXT\n 0xfd: 'VAR_STRING', // aka VARCHAR, VARBINARY\n 0xfe: 'STRING', // aka CHAR, BINARY\n 0xff: 'GEOMETRY', // aka GEOMETRY\n};\n\n// Manually extracted from mysql-5.5.23/include/mysql_com.h\n// some more info here: http://dev.mysql.com/doc/refman/5.5/en/c-api-prepared-statement-type-codes.html\nmodule.exports.DECIMAL = 0x00; // aka DECIMAL (http://dev.mysql.com/doc/refman/5.0/en/precision-math-decimal-changes.html)\nmodule.exports.TINY = 0x01; // aka TINYINT, 1 byte\nmodule.exports.SHORT = 0x02; // aka SMALLINT, 2 bytes\nmodule.exports.LONG = 0x03; // aka INT, 4 bytes\nmodule.exports.FLOAT = 0x04; // aka FLOAT, 4-8 bytes\nmodule.exports.DOUBLE = 0x05; // aka DOUBLE, 8 bytes\nmodule.exports.NULL = 0x06; // NULL (used for prepared statements, I think)\nmodule.exports.TIMESTAMP = 0x07; // aka TIMESTAMP\nmodule.exports.LONGLONG = 0x08; // aka BIGINT, 8 bytes\nmodule.exports.INT24 = 0x09; // aka MEDIUMINT, 3 bytes\nmodule.exports.DATE = 0x0a; // aka DATE\nmodule.exports.TIME = 0x0b; // aka TIME\nmodule.exports.DATETIME = 0x0c; // aka DATETIME\nmodule.exports.YEAR = 0x0d; // aka YEAR, 1 byte (don't ask)\nmodule.exports.NEWDATE = 0x0e; // aka ?\nmodule.exports.VARCHAR = 0x0f; // aka VARCHAR (?)\nmodule.exports.BIT = 0x10; // aka BIT, 1-8 byte\nmodule.exports.VECTOR = 0xf2;\nmodule.exports.JSON = 0xf5;\nmodule.exports.NEWDECIMAL = 0xf6; // aka DECIMAL\nmodule.exports.ENUM = 0xf7; // aka ENUM\nmodule.exports.SET = 0xf8; // aka SET\nmodule.exports.TINY_BLOB = 0xf9; // aka TINYBLOB, TINYTEXT\nmodule.exports.MEDIUM_BLOB = 0xfa; // aka MEDIUMBLOB, MEDIUMTEXT\nmodule.exports.LONG_BLOB = 0xfb; // aka LONGBLOG, LONGTEXT\nmodule.exports.BLOB = 0xfc; // aka BLOB, TEXT\nmodule.exports.VAR_STRING = 0xfd; // aka VARCHAR, VARBINARY\nmodule.exports.STRING = 0xfe; // aka CHAR, BINARY\nmodule.exports.GEOMETRY = 0xff; // aka GEOMETRY\n",
|
|
68
|
+
"// This file was modified by Oracle on June 1, 2021.\n// A comment describing some changes in the strict default SQL mode regarding\n// non-standard dates was introduced.\n// Modifications copyright (c) 2021, Oracle and/or its affiliates.\n\n'use strict';\n\nconst ErrorCodeToName = require('../constants/errors.js');\nconst NativeBuffer = require('buffer').Buffer;\nconst Long = require('long');\nconst StringParser = require('../parsers/string.js');\nconst Types = require('../constants/types.js');\nconst INVALID_DATE = new Date(NaN);\n\n// this is nearly duplicate of previous function so generated code is not slower\n// due to \"if (dateStrings)\" branching\nconst pad = '000000000000';\nfunction leftPad(num, value) {\n const s = value.toString();\n // if we don't need to pad\n if (s.length >= num) {\n return s;\n }\n return (pad + s).slice(-num);\n}\n\n// The whole reason parse* function below exist\n// is because String creation is relatively expensive (at least with V8), and if we have\n// a buffer with \"12345\" content ideally we would like to bypass intermediate\n// \"12345\" string creation and directly build 12345 number out of\n// <Buffer 31 32 33 34 35> data.\n// In my benchmarks the difference is ~25M 8-digit numbers per second vs\n// 4.5 M using Number(packet.readLengthCodedString())\n// not used when size is close to max precision as series of *10 accumulate error\n// and approximate result mihgt be diffreent from (approximate as well) Number(bigNumStringValue))\n// In the futire node version if speed difference is smaller parse* functions might be removed\n// don't consider them as Packet public API\n\nconst minus = '-'.charCodeAt(0);\nconst plus = '+'.charCodeAt(0);\n\n// TODO: handle E notation\nconst dot = '.'.charCodeAt(0);\nconst exponent = 'e'.charCodeAt(0);\nconst exponentCapital = 'E'.charCodeAt(0);\n\nclass Packet {\n constructor(id, buffer, start, end) {\n // hot path, enable checks when testing only\n // if (!Buffer.isBuffer(buffer) || typeof start == 'undefined' || typeof end == 'undefined')\n // throw new Error('invalid packet');\n this.sequenceId = id;\n this.numPackets = 1;\n this.buffer = buffer;\n this.start = start;\n this.offset = start + 4;\n this.end = end;\n }\n\n // ==============================\n // readers\n // ==============================\n reset() {\n this.offset = this.start + 4;\n }\n\n length() {\n return this.end - this.start;\n }\n\n slice() {\n return this.buffer.slice(this.start, this.end);\n }\n\n dump() {\n // eslint-disable-next-line no-console\n console.log(\n [this.buffer.asciiSlice(this.start, this.end)],\n this.buffer.slice(this.start, this.end),\n this.length(),\n this.sequenceId\n );\n }\n\n haveMoreData() {\n return this.end > this.offset;\n }\n\n skip(num) {\n this.offset += num;\n }\n\n readInt8() {\n return this.buffer[this.offset++];\n }\n\n readInt16() {\n this.offset += 2;\n return this.buffer.readUInt16LE(this.offset - 2);\n }\n\n readInt24() {\n return this.readInt16() + (this.readInt8() << 16);\n }\n\n readInt32() {\n this.offset += 4;\n return this.buffer.readUInt32LE(this.offset - 4);\n }\n\n readSInt8() {\n return this.buffer.readInt8(this.offset++);\n }\n\n readSInt16() {\n this.offset += 2;\n return this.buffer.readInt16LE(this.offset - 2);\n }\n\n readSInt32() {\n this.offset += 4;\n return this.buffer.readInt32LE(this.offset - 4);\n }\n\n readInt64JSNumber() {\n const word0 = this.readInt32();\n const word1 = this.readInt32();\n const l = new Long(word0, word1, true);\n return l.toNumber();\n }\n\n readSInt64JSNumber() {\n const word0 = this.readInt32();\n const word1 = this.readInt32();\n if (!(word1 & 0x80000000)) {\n return word0 + 0x100000000 * word1;\n }\n const l = new Long(word0, word1, false);\n return l.toNumber();\n }\n\n readInt64String() {\n const word0 = this.readInt32();\n const word1 = this.readInt32();\n const res = new Long(word0, word1, true);\n return res.toString();\n }\n\n readSInt64String() {\n const word0 = this.readInt32();\n const word1 = this.readInt32();\n const res = new Long(word0, word1, false);\n return res.toString();\n }\n\n readInt64() {\n const word0 = this.readInt32();\n const word1 = this.readInt32();\n let res = new Long(word0, word1, true);\n const resNumber = res.toNumber();\n const resString = res.toString();\n res = resNumber.toString() === resString ? resNumber : resString;\n return res;\n }\n\n readSInt64() {\n const word0 = this.readInt32();\n const word1 = this.readInt32();\n let res = new Long(word0, word1, false);\n const resNumber = res.toNumber();\n const resString = res.toString();\n res = resNumber.toString() === resString ? resNumber : resString;\n return res;\n }\n\n isEOF() {\n return this.buffer[this.offset] === 0xfe && this.length() < 13;\n }\n\n eofStatusFlags() {\n return this.buffer.readInt16LE(this.offset + 3);\n }\n\n eofWarningCount() {\n return this.buffer.readInt16LE(this.offset + 1);\n }\n\n readLengthCodedNumber(bigNumberStrings, signed) {\n const byte1 = this.buffer[this.offset++];\n if (byte1 < 251) {\n return byte1;\n }\n return this.readLengthCodedNumberExt(byte1, bigNumberStrings, signed);\n }\n\n readLengthCodedNumberSigned(bigNumberStrings) {\n return this.readLengthCodedNumber(bigNumberStrings, true);\n }\n\n readLengthCodedNumberExt(tag, bigNumberStrings, signed) {\n let word0, word1;\n let res;\n if (tag === 0xfb) {\n return null;\n }\n if (tag === 0xfc) {\n return this.readInt8() + (this.readInt8() << 8);\n }\n if (tag === 0xfd) {\n return this.readInt8() + (this.readInt8() << 8) + (this.readInt8() << 16);\n }\n if (tag === 0xfe) {\n // TODO: check version\n // Up to MySQL 3.22, 0xfe was followed by a 4-byte integer.\n word0 = this.readInt32();\n word1 = this.readInt32();\n if (word1 === 0) {\n return word0; // don't convert to float if possible\n }\n if (word1 < 2097152) {\n // max exact float point int, 2^52 / 2^32\n return word1 * 0x100000000 + word0;\n }\n res = new Long(word0, word1, !signed); // Long need unsigned\n const resNumber = res.toNumber();\n const resString = res.toString();\n res = resNumber.toString() === resString ? resNumber : resString;\n return bigNumberStrings ? resString : res;\n }\n // eslint-disable-next-line no-console\n console.trace();\n throw new Error(`Should not reach here: ${tag}`);\n }\n\n readFloat() {\n const res = this.buffer.readFloatLE(this.offset);\n this.offset += 4;\n return res;\n }\n\n readDouble() {\n const res = this.buffer.readDoubleLE(this.offset);\n this.offset += 8;\n return res;\n }\n\n readBuffer(len) {\n if (typeof len === 'undefined') {\n len = this.end - this.offset;\n }\n this.offset += len;\n return this.buffer.slice(this.offset - len, this.offset);\n }\n\n // DATE, DATETIME and TIMESTAMP\n readDateTime(timezone) {\n if (!timezone || timezone === 'Z' || timezone === 'local') {\n const length = this.readInt8();\n if (length === 0xfb) {\n return null;\n }\n let y = 0;\n let m = 0;\n let d = 0;\n let H = 0;\n let M = 0;\n let S = 0;\n let ms = 0;\n if (length > 3) {\n y = this.readInt16();\n m = this.readInt8();\n d = this.readInt8();\n }\n if (length > 6) {\n H = this.readInt8();\n M = this.readInt8();\n S = this.readInt8();\n }\n if (length > 10) {\n ms = this.readInt32() / 1000;\n }\n // NO_ZERO_DATE mode and NO_ZERO_IN_DATE mode are part of the strict\n // default SQL mode used by MySQL 8.0. This means that non-standard\n // dates like '0000-00-00' become NULL. For older versions and other\n // possible MySQL flavours we still need to account for the\n // non-standard behaviour.\n if (y + m + d + H + M + S + ms === 0) {\n return INVALID_DATE;\n }\n if (timezone === 'Z') {\n return new Date(Date.UTC(y, m - 1, d, H, M, S, ms));\n }\n return new Date(y, m - 1, d, H, M, S, ms);\n }\n let str = this.readDateTimeString(6, 'T', null);\n if (str.length === 10) {\n str += 'T00:00:00';\n }\n return new Date(str + timezone);\n }\n\n readDateTimeString(decimals, timeSep, columnType) {\n const length = this.readInt8();\n let y = 0;\n let m = 0;\n let d = 0;\n let H = 0;\n let M = 0;\n let S = 0;\n let ms = 0;\n let str;\n if (length > 3) {\n y = this.readInt16();\n m = this.readInt8();\n d = this.readInt8();\n str = [leftPad(4, y), leftPad(2, m), leftPad(2, d)].join('-');\n }\n if (length > 6) {\n H = this.readInt8();\n M = this.readInt8();\n S = this.readInt8();\n str += `${timeSep || ' '}${[\n leftPad(2, H),\n leftPad(2, M),\n leftPad(2, S),\n ].join(':')}`;\n } else if (columnType === Types.DATETIME) {\n str += ' 00:00:00';\n }\n if (length > 10) {\n ms = this.readInt32();\n str += '.';\n if (decimals) {\n ms = leftPad(6, ms);\n if (ms.length > decimals) {\n ms = ms.substring(0, decimals); // rounding is done at the MySQL side, only 0 are here\n }\n }\n str += ms;\n }\n return str;\n }\n\n // TIME - value as a string, Can be negative\n readTimeString(convertTtoMs) {\n const length = this.readInt8();\n if (length === 0) {\n return '00:00:00';\n }\n const sign = this.readInt8() ? -1 : 1; // 'isNegative' flag byte\n let d = 0;\n let H = 0;\n let M = 0;\n let S = 0;\n let ms = 0;\n if (length > 6) {\n d = this.readInt32();\n H = this.readInt8();\n M = this.readInt8();\n S = this.readInt8();\n }\n if (length > 10) {\n ms = this.readInt32();\n }\n if (convertTtoMs) {\n H += d * 24;\n M += H * 60;\n S += M * 60;\n ms += S * 1000;\n ms *= sign;\n return ms;\n }\n // Format follows mySQL TIME format ([-][h]hh:mm:ss[.u[u[u[u[u[u]]]]]])\n // For positive times below 24 hours, this makes it equal to ISO 8601 times\n return (\n (sign === -1 ? '-' : '') +\n [leftPad(2, d * 24 + H), leftPad(2, M), leftPad(2, S)].join(':') +\n (ms ? `.${ms}`.replace(/0+$/, '') : '')\n );\n }\n\n readLengthCodedString(encoding) {\n const len = this.readLengthCodedNumber();\n // TODO: check manually first byte here to avoid polymorphic return type?\n if (len === null) {\n return null;\n }\n this.offset += len;\n // TODO: Use characterSetCode to get proper encoding\n // https://github.com/sidorares/node-mysql2/pull/374\n return StringParser.decode(\n this.buffer,\n encoding,\n this.offset - len,\n this.offset\n );\n }\n\n readLengthCodedBuffer() {\n const len = this.readLengthCodedNumber();\n if (len === null) {\n return null;\n }\n return this.readBuffer(len);\n }\n\n readNullTerminatedString(encoding) {\n const start = this.offset;\n let end = this.offset;\n while (this.buffer[end]) {\n end = end + 1; // TODO: handle OOB check\n }\n this.offset = end + 1;\n return StringParser.decode(this.buffer, encoding, start, end);\n }\n\n // TODO reuse?\n readString(len, encoding) {\n if (typeof len === 'string' && typeof encoding === 'undefined') {\n encoding = len;\n len = undefined;\n }\n if (typeof len === 'undefined') {\n len = this.end - this.offset;\n }\n this.offset += len;\n return StringParser.decode(\n this.buffer,\n encoding,\n this.offset - len,\n this.offset\n );\n }\n\n parseInt(len, supportBigNumbers) {\n if (len === null) {\n return null;\n }\n if (len >= 14 && !supportBigNumbers) {\n const s = this.buffer.toString('ascii', this.offset, this.offset + len);\n this.offset += len;\n return Number(s);\n }\n let result = 0;\n const start = this.offset;\n const end = this.offset + len;\n let sign = 1;\n if (len === 0) {\n return 0; // TODO: assert? exception?\n }\n if (this.buffer[this.offset] === minus) {\n this.offset++;\n sign = -1;\n }\n // max precise int is 9007199254740992\n let str;\n const numDigits = end - this.offset;\n if (supportBigNumbers) {\n if (numDigits >= 15) {\n str = this.readString(end - this.offset, 'binary');\n result = parseInt(str, 10);\n if (result.toString() === str) {\n return sign * result;\n }\n return sign === -1 ? `-${str}` : str;\n }\n if (numDigits > 16) {\n str = this.readString(end - this.offset);\n return sign === -1 ? `-${str}` : str;\n }\n }\n if (this.buffer[this.offset] === plus) {\n this.offset++; // just ignore\n }\n while (this.offset < end) {\n result *= 10;\n result += this.buffer[this.offset] - 48;\n this.offset++;\n }\n const num = result * sign;\n if (!supportBigNumbers) {\n return num;\n }\n str = this.buffer.toString('ascii', start, end);\n if (num.toString() === str) {\n return num;\n }\n return str;\n }\n\n // note that if value of inputNumberAsString is bigger than MAX_SAFE_INTEGER\n // ( or smaller than MIN_SAFE_INTEGER ) the parseIntNoBigCheck result might be\n // different from what you would get from Number(inputNumberAsString)\n // String(parseIntNoBigCheck) <> String(Number(inputNumberAsString)) <> inputNumberAsString\n parseIntNoBigCheck(len) {\n if (len === null) {\n return null;\n }\n let result = 0;\n const end = this.offset + len;\n let sign = 1;\n if (len === 0) {\n return 0; // TODO: assert? exception?\n }\n if (this.buffer[this.offset] === minus) {\n this.offset++;\n sign = -1;\n }\n if (this.buffer[this.offset] === plus) {\n this.offset++; // just ignore\n }\n while (this.offset < end) {\n result *= 10;\n result += this.buffer[this.offset] - 48;\n this.offset++;\n }\n return result * sign;\n }\n\n // copy-paste from https://github.com/mysqljs/mysql/blob/master/lib/protocol/Parser.js\n parseGeometryValue() {\n const buffer = this.readLengthCodedBuffer();\n let offset = 4;\n if (buffer === null || !buffer.length) {\n return null;\n }\n function parseGeometry() {\n let x, y, i, j, numPoints, line;\n let result = null;\n const byteOrder = buffer.readUInt8(offset);\n offset += 1;\n const wkbType = byteOrder\n ? buffer.readUInt32LE(offset)\n : buffer.readUInt32BE(offset);\n offset += 4;\n switch (wkbType) {\n case 1: // WKBPoint\n x = byteOrder\n ? buffer.readDoubleLE(offset)\n : buffer.readDoubleBE(offset);\n offset += 8;\n y = byteOrder\n ? buffer.readDoubleLE(offset)\n : buffer.readDoubleBE(offset);\n offset += 8;\n result = { x: x, y: y };\n break;\n case 2: // WKBLineString\n numPoints = byteOrder\n ? buffer.readUInt32LE(offset)\n : buffer.readUInt32BE(offset);\n offset += 4;\n result = [];\n for (i = numPoints; i > 0; i--) {\n x = byteOrder\n ? buffer.readDoubleLE(offset)\n : buffer.readDoubleBE(offset);\n offset += 8;\n y = byteOrder\n ? buffer.readDoubleLE(offset)\n : buffer.readDoubleBE(offset);\n offset += 8;\n result.push({ x: x, y: y });\n }\n break;\n case 3: // WKBPolygon\n // eslint-disable-next-line no-case-declarations\n const numRings = byteOrder\n ? buffer.readUInt32LE(offset)\n : buffer.readUInt32BE(offset);\n offset += 4;\n result = [];\n for (i = numRings; i > 0; i--) {\n numPoints = byteOrder\n ? buffer.readUInt32LE(offset)\n : buffer.readUInt32BE(offset);\n offset += 4;\n line = [];\n for (j = numPoints; j > 0; j--) {\n x = byteOrder\n ? buffer.readDoubleLE(offset)\n : buffer.readDoubleBE(offset);\n offset += 8;\n y = byteOrder\n ? buffer.readDoubleLE(offset)\n : buffer.readDoubleBE(offset);\n offset += 8;\n line.push({ x: x, y: y });\n }\n result.push(line);\n }\n break;\n case 4: // WKBMultiPoint\n case 5: // WKBMultiLineString\n case 6: // WKBMultiPolygon\n case 7: // WKBGeometryCollection\n // eslint-disable-next-line no-case-declarations\n const num = byteOrder\n ? buffer.readUInt32LE(offset)\n : buffer.readUInt32BE(offset);\n offset += 4;\n result = [];\n for (i = num; i > 0; i--) {\n result.push(parseGeometry());\n }\n break;\n }\n return result;\n }\n return parseGeometry();\n }\n\n parseVector() {\n const bufLen = this.readLengthCodedNumber();\n const vectorEnd = this.offset + bufLen;\n const result = [];\n while (this.offset < vectorEnd && this.offset < this.end) {\n result.push(this.readFloat());\n }\n return result;\n }\n\n parseDate(timezone) {\n const strLen = this.readLengthCodedNumber();\n if (strLen === null) {\n return null;\n }\n if (strLen !== 10) {\n // we expect only YYYY-MM-DD here.\n // if for some reason it's not the case return invalid date\n return new Date(NaN);\n }\n const y = this.parseInt(4);\n this.offset++; // -\n const m = this.parseInt(2);\n this.offset++; // -\n const d = this.parseInt(2);\n if (!timezone || timezone === 'local') {\n return new Date(y, m - 1, d);\n }\n if (timezone === 'Z') {\n return new Date(Date.UTC(y, m - 1, d));\n }\n return new Date(\n `${leftPad(4, y)}-${leftPad(2, m)}-${leftPad(2, d)}T00:00:00${timezone}`\n );\n }\n\n parseDateTime(timezone) {\n const str = this.readLengthCodedString('binary');\n if (str === null) {\n return null;\n }\n if (!timezone || timezone === 'local') {\n return new Date(str);\n }\n return new Date(`${str}${timezone}`);\n }\n\n parseFloat(len) {\n if (len === null) {\n return null;\n }\n let result = 0;\n const end = this.offset + len;\n let factor = 1;\n let pastDot = false;\n let charCode = 0;\n if (len === 0) {\n return 0; // TODO: assert? exception?\n }\n if (this.buffer[this.offset] === minus) {\n this.offset++;\n factor = -1;\n }\n if (this.buffer[this.offset] === plus) {\n this.offset++; // just ignore\n }\n while (this.offset < end) {\n charCode = this.buffer[this.offset];\n if (charCode === dot) {\n pastDot = true;\n this.offset++;\n } else if (charCode === exponent || charCode === exponentCapital) {\n this.offset++;\n const exponentValue = this.parseInt(end - this.offset);\n return (result / factor) * Math.pow(10, exponentValue);\n } else {\n result *= 10;\n result += this.buffer[this.offset] - 48;\n this.offset++;\n if (pastDot) {\n factor = factor * 10;\n }\n }\n }\n return result / factor;\n }\n\n parseLengthCodedIntNoBigCheck() {\n return this.parseIntNoBigCheck(this.readLengthCodedNumber());\n }\n\n parseLengthCodedInt(supportBigNumbers) {\n return this.parseInt(this.readLengthCodedNumber(), supportBigNumbers);\n }\n\n parseLengthCodedIntString() {\n return this.readLengthCodedString('binary');\n }\n\n parseLengthCodedFloat() {\n return this.parseFloat(this.readLengthCodedNumber());\n }\n\n peekByte() {\n return this.buffer[this.offset];\n }\n\n // OxFE is often used as \"Alt\" flag - not ok, not error.\n // For example, it's first byte of AuthSwitchRequest\n isAlt() {\n return this.peekByte() === 0xfe;\n }\n\n isError() {\n return this.peekByte() === 0xff;\n }\n\n asError(encoding) {\n this.reset();\n this.readInt8(); // fieldCount\n const errorCode = this.readInt16();\n let sqlState = '';\n if (this.buffer[this.offset] === 0x23) {\n this.skip(1);\n sqlState = this.readBuffer(5).toString();\n }\n const message = this.readString(undefined, encoding);\n const err = new Error(message);\n err.code = ErrorCodeToName[errorCode];\n err.errno = errorCode;\n err.sqlState = sqlState;\n err.sqlMessage = message;\n return err;\n }\n\n writeInt32(n) {\n this.buffer.writeUInt32LE(n, this.offset);\n this.offset += 4;\n }\n\n writeInt24(n) {\n this.writeInt8(n & 0xff);\n this.writeInt16(n >> 8);\n }\n\n writeInt16(n) {\n this.buffer.writeUInt16LE(n, this.offset);\n this.offset += 2;\n }\n\n writeInt8(n) {\n this.buffer.writeUInt8(n, this.offset);\n this.offset++;\n }\n\n writeDouble(n) {\n this.buffer.writeDoubleLE(n, this.offset);\n this.offset += 8;\n }\n\n writeBuffer(b) {\n b.copy(this.buffer, this.offset);\n this.offset += b.length;\n }\n\n writeNull() {\n this.buffer[this.offset] = 0xfb;\n this.offset++;\n }\n\n // TODO: refactor following three?\n writeNullTerminatedString(s, encoding) {\n const buf = StringParser.encode(s, encoding);\n this.buffer.length && buf.copy(this.buffer, this.offset);\n this.offset += buf.length;\n this.writeInt8(0);\n }\n\n writeString(s, encoding) {\n if (s === null) {\n this.writeInt8(0xfb);\n return;\n }\n if (s.length === 0) {\n return;\n }\n // const bytes = Buffer.byteLength(s, 'utf8');\n // this.buffer.write(s, this.offset, bytes, 'utf8');\n // this.offset += bytes;\n const buf = StringParser.encode(s, encoding);\n this.buffer.length && buf.copy(this.buffer, this.offset);\n this.offset += buf.length;\n }\n\n writeLengthCodedString(s, encoding) {\n const buf = StringParser.encode(s, encoding);\n this.writeLengthCodedNumber(buf.length);\n this.buffer.length && buf.copy(this.buffer, this.offset);\n this.offset += buf.length;\n }\n\n writeLengthCodedBuffer(b) {\n this.writeLengthCodedNumber(b.length);\n b.copy(this.buffer, this.offset);\n this.offset += b.length;\n }\n\n writeLengthCodedNumber(n) {\n if (n < 0xfb) {\n return this.writeInt8(n);\n }\n if (n < 0xffff) {\n this.writeInt8(0xfc);\n return this.writeInt16(n);\n }\n if (n < 0xffffff) {\n this.writeInt8(0xfd);\n return this.writeInt24(n);\n }\n if (n === null) {\n return this.writeInt8(0xfb);\n }\n // TODO: check that n is out of int precision\n this.writeInt8(0xfe);\n this.buffer.writeUInt32LE(n, this.offset);\n this.offset += 4;\n this.buffer.writeUInt32LE(n >> 32, this.offset);\n this.offset += 4;\n return this.offset;\n }\n\n writeDate(d, timezone) {\n this.buffer.writeUInt8(11, this.offset);\n if (!timezone || timezone === 'local') {\n this.buffer.writeUInt16LE(d.getFullYear(), this.offset + 1);\n this.buffer.writeUInt8(d.getMonth() + 1, this.offset + 3);\n this.buffer.writeUInt8(d.getDate(), this.offset + 4);\n this.buffer.writeUInt8(d.getHours(), this.offset + 5);\n this.buffer.writeUInt8(d.getMinutes(), this.offset + 6);\n this.buffer.writeUInt8(d.getSeconds(), this.offset + 7);\n this.buffer.writeUInt32LE(d.getMilliseconds() * 1000, this.offset + 8);\n } else {\n if (timezone !== 'Z') {\n const offset =\n (timezone[0] === '-' ? -1 : 1) *\n (parseInt(timezone.substring(1, 3), 10) * 60 +\n parseInt(timezone.substring(4), 10));\n if (offset !== 0) {\n d = new Date(d.getTime() + 60000 * offset);\n }\n }\n this.buffer.writeUInt16LE(d.getUTCFullYear(), this.offset + 1);\n this.buffer.writeUInt8(d.getUTCMonth() + 1, this.offset + 3);\n this.buffer.writeUInt8(d.getUTCDate(), this.offset + 4);\n this.buffer.writeUInt8(d.getUTCHours(), this.offset + 5);\n this.buffer.writeUInt8(d.getUTCMinutes(), this.offset + 6);\n this.buffer.writeUInt8(d.getUTCSeconds(), this.offset + 7);\n this.buffer.writeUInt32LE(d.getUTCMilliseconds() * 1000, this.offset + 8);\n }\n this.offset += 12;\n }\n\n writeHeader(sequenceId) {\n const offset = this.offset;\n this.offset = 0;\n this.writeInt24(this.buffer.length - 4);\n this.writeInt8(sequenceId);\n this.offset = offset;\n }\n\n clone() {\n return new Packet(this.sequenceId, this.buffer, this.start, this.end);\n }\n\n type() {\n if (this.isEOF()) {\n return 'EOF';\n }\n if (this.isError()) {\n return 'Error';\n }\n if (this.buffer[this.offset] === 0) {\n return 'maybeOK'; // could be other packet types as well\n }\n return '';\n }\n\n static lengthCodedNumberLength(n) {\n if (n < 0xfb) {\n return 1;\n }\n if (n < 0xffff) {\n return 3;\n }\n if (n < 0xffffff) {\n return 5;\n }\n return 9;\n }\n\n static lengthCodedStringLength(str, encoding) {\n const buf = StringParser.encode(str, encoding);\n const slen = buf.length;\n return Packet.lengthCodedNumberLength(slen) + slen;\n }\n\n static MockBuffer() {\n const noop = function () {};\n const res = Buffer.alloc(0);\n for (const op in NativeBuffer.prototype) {\n if (typeof res[op] === 'function') {\n res[op] = noop;\n }\n }\n return res;\n }\n}\n\nmodule.exports = Packet;\n",
|
|
69
|
+
"'use strict';\n\nconst Packet = require('./packets/packet.js');\n\nconst MAX_PACKET_LENGTH = 16777215;\n\nfunction readPacketLength(b, off) {\n const b0 = b[off];\n const b1 = b[off + 1];\n const b2 = b[off + 2];\n if (b1 + b2 === 0) {\n return b0;\n }\n return b0 + (b1 << 8) + (b2 << 16);\n}\n\nclass PacketParser {\n constructor(onPacket, packetHeaderLength) {\n // 4 for normal packets, 7 for comprssed protocol packets\n if (typeof packetHeaderLength === 'undefined') {\n packetHeaderLength = 4;\n }\n // array of last payload chunks\n // only used when current payload is not complete\n this.buffer = [];\n // total length of chunks on buffer\n this.bufferLength = 0;\n this.packetHeaderLength = packetHeaderLength;\n // incomplete header state: number of header bytes received\n this.headerLen = 0;\n // expected payload length\n this.length = 0;\n this.largePacketParts = [];\n this.firstPacketSequenceId = 0;\n this.onPacket = onPacket;\n this.execute = PacketParser.prototype.executeStart;\n this._flushLargePacket =\n packetHeaderLength === 7\n ? this._flushLargePacket7\n : this._flushLargePacket4;\n }\n\n _flushLargePacket4() {\n const numPackets = this.largePacketParts.length;\n this.largePacketParts.unshift(Buffer.from([0, 0, 0, 0])); // insert header\n const body = Buffer.concat(this.largePacketParts);\n const packet = new Packet(this.firstPacketSequenceId, body, 0, body.length);\n this.largePacketParts.length = 0;\n packet.numPackets = numPackets;\n this.onPacket(packet);\n }\n\n _flushLargePacket7() {\n const numPackets = this.largePacketParts.length;\n this.largePacketParts.unshift(Buffer.from([0, 0, 0, 0, 0, 0, 0])); // insert header\n const body = Buffer.concat(this.largePacketParts);\n this.largePacketParts.length = 0;\n const packet = new Packet(this.firstPacketSequenceId, body, 0, body.length);\n packet.numPackets = numPackets;\n this.onPacket(packet);\n }\n\n executeStart(chunk) {\n let start = 0;\n const end = chunk.length;\n while (end - start >= 3) {\n this.length = readPacketLength(chunk, start);\n if (end - start >= this.length + this.packetHeaderLength) {\n // at least one full packet\n const sequenceId = chunk[start + 3];\n if (\n this.length < MAX_PACKET_LENGTH &&\n this.largePacketParts.length === 0\n ) {\n this.onPacket(\n new Packet(\n sequenceId,\n chunk,\n start,\n start + this.packetHeaderLength + this.length\n )\n );\n } else {\n // first large packet - remember it's id\n if (this.largePacketParts.length === 0) {\n this.firstPacketSequenceId = sequenceId;\n }\n this.largePacketParts.push(\n chunk.slice(\n start + this.packetHeaderLength,\n start + this.packetHeaderLength + this.length\n )\n );\n if (this.length < MAX_PACKET_LENGTH) {\n this._flushLargePacket();\n }\n }\n start += this.packetHeaderLength + this.length;\n } else {\n // payload is incomplete\n this.buffer = [chunk.slice(start + 3, end)];\n this.bufferLength = end - start - 3;\n this.execute = PacketParser.prototype.executePayload;\n return;\n }\n }\n if (end - start > 0) {\n // there is start of length header, but it's not full 3 bytes\n this.headerLen = end - start; // 1 or 2 bytes\n this.length = chunk[start];\n if (this.headerLen === 2) {\n this.length = chunk[start] + (chunk[start + 1] << 8);\n this.execute = PacketParser.prototype.executeHeader3;\n } else {\n this.execute = PacketParser.prototype.executeHeader2;\n }\n }\n }\n\n executePayload(chunk) {\n let start = 0;\n const end = chunk.length;\n const remainingPayload =\n this.length - this.bufferLength + this.packetHeaderLength - 3;\n if (end - start >= remainingPayload) {\n // last chunk for payload\n const payload = Buffer.allocUnsafe(this.length + this.packetHeaderLength);\n let offset = 3;\n for (let i = 0; i < this.buffer.length; ++i) {\n this.buffer[i].copy(payload, offset);\n offset += this.buffer[i].length;\n }\n chunk.copy(payload, offset, start, start + remainingPayload);\n const sequenceId = payload[3];\n if (\n this.length < MAX_PACKET_LENGTH &&\n this.largePacketParts.length === 0\n ) {\n this.onPacket(\n new Packet(\n sequenceId,\n payload,\n 0,\n this.length + this.packetHeaderLength\n )\n );\n } else {\n // first large packet - remember it's id\n if (this.largePacketParts.length === 0) {\n this.firstPacketSequenceId = sequenceId;\n }\n this.largePacketParts.push(\n payload.slice(\n this.packetHeaderLength,\n this.packetHeaderLength + this.length\n )\n );\n if (this.length < MAX_PACKET_LENGTH) {\n this._flushLargePacket();\n }\n }\n this.buffer = [];\n this.bufferLength = 0;\n this.execute = PacketParser.prototype.executeStart;\n start += remainingPayload;\n if (end - start > 0) {\n return this.execute(chunk.slice(start, end));\n }\n } else {\n this.buffer.push(chunk);\n this.bufferLength += chunk.length;\n }\n return null;\n }\n\n executeHeader2(chunk) {\n this.length += chunk[0] << 8;\n if (chunk.length > 1) {\n this.length += chunk[1] << 16;\n this.execute = PacketParser.prototype.executePayload;\n return this.executePayload(chunk.slice(2));\n }\n this.execute = PacketParser.prototype.executeHeader3;\n\n return null;\n }\n\n executeHeader3(chunk) {\n this.length += chunk[0] << 16;\n this.execute = PacketParser.prototype.executePayload;\n return this.executePayload(chunk.slice(1));\n }\n}\n\nmodule.exports = PacketParser;\n",
|
|
70
|
+
"// Copyright (c) 2021, Oracle and/or its affiliates.\n\n'use strict';\n\nconst Packet = require('../packets/packet');\n\nclass AuthNextFactor {\n constructor(opts) {\n this.pluginName = opts.pluginName;\n this.pluginData = opts.pluginData;\n }\n\n toPacket(encoding) {\n const length = 6 + this.pluginName.length + this.pluginData.length;\n const buffer = Buffer.allocUnsafe(length);\n const packet = new Packet(0, buffer, 0, length);\n packet.offset = 4;\n packet.writeInt8(0x02);\n packet.writeNullTerminatedString(this.pluginName, encoding);\n packet.writeBuffer(this.pluginData);\n return packet;\n }\n\n static fromPacket(packet, encoding) {\n packet.readInt8(); // marker\n const name = packet.readNullTerminatedString(encoding);\n const data = packet.readBuffer();\n return new AuthNextFactor({\n pluginName: name,\n pluginData: data,\n });\n }\n}\n\nmodule.exports = AuthNextFactor;\n",
|
|
71
|
+
"'use strict';\n\n// http://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::AuthSwitchRequest\n\nconst Packet = require('../packets/packet');\n\nclass AuthSwitchRequest {\n constructor(opts) {\n this.pluginName = opts.pluginName;\n this.pluginData = opts.pluginData;\n }\n\n toPacket() {\n const length = 6 + this.pluginName.length + this.pluginData.length;\n const buffer = Buffer.allocUnsafe(length);\n const packet = new Packet(0, buffer, 0, length);\n packet.offset = 4;\n packet.writeInt8(0xfe);\n // TODO: use server encoding\n packet.writeNullTerminatedString(this.pluginName, 'cesu8');\n packet.writeBuffer(this.pluginData);\n return packet;\n }\n\n static fromPacket(packet) {\n packet.readInt8(); // marker\n // assert marker == 0xfe?\n // TODO: use server encoding\n const name = packet.readNullTerminatedString('cesu8');\n const data = packet.readBuffer();\n return new AuthSwitchRequest({\n pluginName: name,\n pluginData: data,\n });\n }\n}\n\nmodule.exports = AuthSwitchRequest;\n",
|
|
72
|
+
"'use strict';\n\n// http://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::AuthSwitchRequest\n\nconst Packet = require('../packets/packet');\n\nclass AuthSwitchRequestMoreData {\n constructor(data) {\n this.data = data;\n }\n\n toPacket() {\n const length = 5 + this.data.length;\n const buffer = Buffer.allocUnsafe(length);\n const packet = new Packet(0, buffer, 0, length);\n packet.offset = 4;\n packet.writeInt8(0x01);\n packet.writeBuffer(this.data);\n return packet;\n }\n\n static fromPacket(packet) {\n packet.readInt8(); // marker\n const data = packet.readBuffer();\n return new AuthSwitchRequestMoreData(data);\n }\n\n static verifyMarker(packet) {\n return packet.peekByte() === 0x01;\n }\n}\n\nmodule.exports = AuthSwitchRequestMoreData;\n",
|
|
73
|
+
"'use strict';\n\n// http://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::AuthSwitchRequest\n\nconst Packet = require('../packets/packet');\n\nclass AuthSwitchResponse {\n constructor(data) {\n if (!Buffer.isBuffer(data)) {\n data = Buffer.from(data);\n }\n this.data = data;\n }\n\n toPacket() {\n const length = 4 + this.data.length;\n const buffer = Buffer.allocUnsafe(length);\n const packet = new Packet(0, buffer, 0, length);\n packet.offset = 4;\n packet.writeBuffer(this.data);\n return packet;\n }\n\n static fromPacket(packet) {\n const data = packet.readBuffer();\n return new AuthSwitchResponse(data);\n }\n}\n\nmodule.exports = AuthSwitchResponse;\n",
|
|
74
|
+
"'use strict';\n\nconst Types = require('../constants/types');\nconst Packet = require('../packets/packet');\n\nconst binaryReader = new Array(256);\n\nclass BinaryRow {\n constructor(columns) {\n this.columns = columns || [];\n }\n\n static toPacket(columns, encoding) {\n // throw new Error('Not implemented');\n const sequenceId = 0; // TODO remove, this is calculated now in connecton\n let length = 0;\n columns.forEach((val) => {\n if (val === null || typeof val === 'undefined') {\n ++length;\n return;\n }\n length += Packet.lengthCodedStringLength(val.toString(10), encoding);\n });\n\n length = length + 2;\n\n const buffer = Buffer.allocUnsafe(length + 4);\n const packet = new Packet(sequenceId, buffer, 0, length + 4);\n packet.offset = 4;\n\n packet.writeInt8(0);\n\n let bitmap = 0;\n let bitValue = 1;\n columns.forEach((parameter) => {\n if (parameter.type === Types.NULL) {\n bitmap += bitValue;\n }\n bitValue *= 2;\n if (bitValue === 256) {\n packet.writeInt8(bitmap);\n bitmap = 0;\n bitValue = 1;\n }\n });\n if (bitValue !== 1) {\n packet.writeInt8(bitmap);\n }\n\n columns.forEach((val) => {\n if (val === null) {\n packet.writeNull();\n return;\n }\n if (typeof val === 'undefined') {\n packet.writeInt8(0);\n return;\n }\n packet.writeLengthCodedString(val.toString(10), encoding);\n });\n return packet;\n }\n\n // TODO: complete list of types...\n static fromPacket(fields, packet) {\n const columns = new Array(fields.length);\n packet.readInt8(); // TODO check it's 0\n const nullBitmapLength = Math.floor((fields.length + 7 + 2) / 8);\n // TODO: read and interpret null bitmap\n packet.skip(nullBitmapLength);\n for (let i = 0; i < columns.length; ++i) {\n columns[i] = binaryReader[fields[i].columnType].apply(packet);\n }\n return new BinaryRow(columns);\n }\n}\n\n// TODO: replace with constants.MYSQL_TYPE_*\nbinaryReader[Types.DECIMAL] = Packet.prototype.readLengthCodedString;\nbinaryReader[1] = Packet.prototype.readInt8; // tiny\nbinaryReader[2] = Packet.prototype.readInt16; // short\nbinaryReader[3] = Packet.prototype.readInt32; // long\nbinaryReader[4] = Packet.prototype.readFloat; // float\nbinaryReader[5] = Packet.prototype.readDouble; // double\nbinaryReader[6] = Packet.prototype.assertInvalid; // null, should be skipped vie null bitmap\nbinaryReader[7] = Packet.prototype.readTimestamp; // timestamp, http://dev.mysql.com/doc/internals/en/prepared-statements.html#packet-ProtocolBinary::MYSQL_TYPE_TIMESTAMP\nbinaryReader[8] = Packet.prototype.readInt64; // long long\nbinaryReader[9] = Packet.prototype.readInt32; // int24\nbinaryReader[10] = Packet.prototype.readTimestamp; // date\nbinaryReader[11] = Packet.prototype.readTime; // time, http://dev.mysql.com/doc/internals/en/prepared-statements.html#packet-ProtocolBinary::MYSQL_TYPE_TIME\nbinaryReader[12] = Packet.prototype.readDateTime; // datetime, http://dev.mysql.com/doc/internals/en/prepared-statements.html#packet-ProtocolBinary::MYSQL_TYPE_DATETIME\nbinaryReader[13] = Packet.prototype.readInt16; // year\nbinaryReader[Types.VAR_STRING] = Packet.prototype.readLengthCodedString; // var string\n\nmodule.exports = BinaryRow;\n",
|
|
75
|
+
"'use strict';\n\nmodule.exports = {\n SLEEP: 0x00, // deprecated\n QUIT: 0x01,\n INIT_DB: 0x02,\n QUERY: 0x03,\n FIELD_LIST: 0x04,\n CREATE_DB: 0x05,\n DROP_DB: 0x06,\n REFRESH: 0x07,\n SHUTDOWN: 0x08,\n STATISTICS: 0x09,\n PROCESS_INFO: 0x0a, // deprecated\n CONNECT: 0x0b, // deprecated\n PROCESS_KILL: 0x0c,\n DEBUG: 0x0d,\n PING: 0x0e,\n TIME: 0x0f, // deprecated\n DELAYED_INSERT: 0x10, // deprecated\n CHANGE_USER: 0x11,\n BINLOG_DUMP: 0x12,\n TABLE_DUMP: 0x13,\n CONNECT_OUT: 0x14,\n REGISTER_SLAVE: 0x15,\n STMT_PREPARE: 0x16,\n STMT_EXECUTE: 0x17,\n STMT_SEND_LONG_DATA: 0x18,\n STMT_CLOSE: 0x19,\n STMT_RESET: 0x1a,\n SET_OPTION: 0x1b,\n STMT_FETCH: 0x1c,\n DAEMON: 0x1d, // deprecated\n BINLOG_DUMP_GTID: 0x1e,\n UNKNOWN: 0xff, // bad!\n};\n",
|
|
76
|
+
"'use strict';\n\n// http://dev.mysql.com/doc/internals/en/com-binlog-dump.html#packet-COM_BINLOG_DUMP\n\nconst Packet = require('../packets/packet');\nconst CommandCodes = require('../constants/commands');\n\n// TODO: add flag to constants\n// 0x01 - BINLOG_DUMP_NON_BLOCK\n// send EOF instead of blocking\nclass BinlogDump {\n constructor(opts) {\n this.binlogPos = opts.binlogPos || 0;\n this.serverId = opts.serverId || 0;\n this.flags = opts.flags || 0;\n this.filename = opts.filename || '';\n }\n\n toPacket() {\n const length = 15 + Buffer.byteLength(this.filename, 'utf8'); // TODO: should be ascii?\n const buffer = Buffer.allocUnsafe(length);\n const packet = new Packet(0, buffer, 0, length);\n packet.offset = 4;\n packet.writeInt8(CommandCodes.BINLOG_DUMP);\n packet.writeInt32(this.binlogPos);\n packet.writeInt16(this.flags);\n packet.writeInt32(this.serverId);\n packet.writeString(this.filename);\n return packet;\n }\n}\n\nmodule.exports = BinlogDump;\n",
|
|
77
|
+
"// This file was modified by Oracle on September 21, 2021.\n// New capability for multi-factor authentication based on mandatory session\n// trackers, that are signaled with an extra single-byte prefix on new\n// versions of the MySQL server.\n// Modifications copyright (c) 2021, Oracle and/or its affiliates.\n\n'use strict';\n\n// Manually extracted from mysql-5.5.23/include/mysql_com.h\nexports.LONG_PASSWORD = 0x00000001; /* new more secure passwords */\nexports.FOUND_ROWS = 0x00000002; /* found instead of affected rows */\nexports.LONG_FLAG = 0x00000004; /* get all column flags */\nexports.CONNECT_WITH_DB = 0x00000008; /* one can specify db on connect */\nexports.NO_SCHEMA = 0x00000010; /* don't allow database.table.column */\nexports.COMPRESS = 0x00000020; /* can use compression protocol */\nexports.ODBC = 0x00000040; /* odbc client */\nexports.LOCAL_FILES = 0x00000080; /* can use LOAD DATA LOCAL */\nexports.IGNORE_SPACE = 0x00000100; /* ignore spaces before '' */\nexports.PROTOCOL_41 = 0x00000200; /* new 4.1 protocol */\nexports.INTERACTIVE = 0x00000400; /* this is an interactive client */\nexports.SSL = 0x00000800; /* switch to ssl after handshake */\nexports.IGNORE_SIGPIPE = 0x00001000; /* IGNORE sigpipes */\nexports.TRANSACTIONS = 0x00002000; /* client knows about transactions */\nexports.RESERVED = 0x00004000; /* old flag for 4.1 protocol */\nexports.SECURE_CONNECTION = 0x00008000; /* new 4.1 authentication */\nexports.MULTI_STATEMENTS = 0x00010000; /* enable/disable multi-stmt support */\nexports.MULTI_RESULTS = 0x00020000; /* enable/disable multi-results */\nexports.PS_MULTI_RESULTS = 0x00040000; /* multi-results in ps-protocol */\nexports.PLUGIN_AUTH = 0x00080000; /* client supports plugin authentication */\nexports.CONNECT_ATTRS = 0x00100000; /* permits connection attributes */\nexports.PLUGIN_AUTH_LENENC_CLIENT_DATA = 0x00200000; /* Understands length-encoded integer for auth response data in Protocol::HandshakeResponse41. */\nexports.CAN_HANDLE_EXPIRED_PASSWORDS = 0x00400000; /* Announces support for expired password extension. */\nexports.SESSION_TRACK = 0x00800000; /* Can set SERVER_SESSION_STATE_CHANGED in the Status Flags and send session-state change data after a OK packet. */\nexports.DEPRECATE_EOF = 0x01000000; /* Can send OK after a Text Resultset. */\n\nexports.SSL_VERIFY_SERVER_CERT = 0x40000000;\nexports.REMEMBER_OPTIONS = 0x80000000;\n\nexports.MULTI_FACTOR_AUTHENTICATION = 0x10000000; /* multi-factor authentication */\n",
|
|
78
|
+
"'use strict';\n\n/*\n4.1 authentication: (http://bazaar.launchpad.net/~mysql/mysql-server/5.5/view/head:/sql/password.c)\n\n SERVER: public_seed=create_random_string()\n send(public_seed)\n\n CLIENT: recv(public_seed)\n hash_stage1=sha1(\"password\")\n hash_stage2=sha1(hash_stage1)\n reply=xor(hash_stage1, sha1(public_seed,hash_stage2)\n\n // this three steps are done in scramble()\n\n send(reply)\n\n\n SERVER: recv(reply)\n hash_stage1=xor(reply, sha1(public_seed,hash_stage2))\n candidate_hash2=sha1(hash_stage1)\n check(candidate_hash2==hash_stage2)\n\nserver stores sha1(sha1(password)) ( hash_stag2)\n*/\n\nconst crypto = require('crypto');\n\nfunction sha1(msg, msg1, msg2) {\n const hash = crypto.createHash('sha1');\n hash.update(msg);\n if (msg1) {\n hash.update(msg1);\n }\n\n if (msg2) {\n hash.update(msg2);\n }\n\n return hash.digest();\n}\n\nfunction xor(a, b) {\n const result = Buffer.allocUnsafe(a.length);\n for (let i = 0; i < a.length; i++) {\n result[i] = a[i] ^ b[i];\n }\n return result;\n}\n\nexports.xor = xor;\n\nfunction token(password, scramble1, scramble2) {\n if (!password) {\n return Buffer.alloc(0);\n }\n const stage1 = sha1(password);\n return exports.calculateTokenFromPasswordSha(stage1, scramble1, scramble2);\n}\n\nexports.calculateTokenFromPasswordSha = function (\n passwordSha,\n scramble1,\n scramble2\n) {\n // we use AUTH 41 here, and we need only the bytes we just need.\n const authPluginData1 = scramble1.slice(0, 8);\n const authPluginData2 = scramble2.slice(0, 12);\n const stage2 = sha1(passwordSha);\n const stage3 = sha1(authPluginData1, authPluginData2, stage2);\n return xor(stage3, passwordSha);\n};\n\nexports.calculateToken = token;\n\nexports.verifyToken = function (publicSeed1, publicSeed2, token, doubleSha) {\n const hashStage1 = xor(token, sha1(publicSeed1, publicSeed2, doubleSha));\n const candidateHash2 = sha1(hashStage1);\n return candidateHash2.compare(doubleSha) === 0;\n};\n\nexports.doubleSha1 = function (password) {\n return sha1(sha1(password));\n};\n\nfunction xorRotating(a, seed) {\n const result = Buffer.allocUnsafe(a.length);\n const seedLen = seed.length;\n\n for (let i = 0; i < a.length; i++) {\n result[i] = a[i] ^ seed[i % seedLen];\n }\n return result;\n}\nexports.xorRotating = xorRotating;\n",
|
|
79
|
+
"'use strict';\n\n// see tools/generate-charset-mapping.js\n// basicalliy result of \"SHOW COLLATION\" query\n\nmodule.exports = [\n 'utf8',\n 'big5',\n 'latin2',\n 'dec8',\n 'cp850',\n 'latin1',\n 'hp8',\n 'koi8r',\n 'latin1',\n 'latin2',\n 'swe7',\n 'ascii',\n 'eucjp',\n 'sjis',\n 'cp1251',\n 'latin1',\n 'hebrew',\n 'utf8',\n 'tis620',\n 'euckr',\n 'latin7',\n 'latin2',\n 'koi8u',\n 'cp1251',\n 'gb2312',\n 'greek',\n 'cp1250',\n 'latin2',\n 'gbk',\n 'cp1257',\n 'latin5',\n 'latin1',\n 'armscii8',\n 'cesu8',\n 'cp1250',\n 'ucs2',\n 'cp866',\n 'keybcs2',\n 'macintosh',\n 'macroman',\n 'cp852',\n 'latin7',\n 'latin7',\n 'macintosh',\n 'cp1250',\n 'utf8',\n 'utf8',\n 'latin1',\n 'latin1',\n 'latin1',\n 'cp1251',\n 'cp1251',\n 'cp1251',\n 'macroman',\n 'utf16',\n 'utf16',\n 'utf16-le',\n 'cp1256',\n 'cp1257',\n 'cp1257',\n 'utf32',\n 'utf32',\n 'utf16-le',\n 'binary',\n 'armscii8',\n 'ascii',\n 'cp1250',\n 'cp1256',\n 'cp866',\n 'dec8',\n 'greek',\n 'hebrew',\n 'hp8',\n 'keybcs2',\n 'koi8r',\n 'koi8u',\n 'cesu8',\n 'latin2',\n 'latin5',\n 'latin7',\n 'cp850',\n 'cp852',\n 'swe7',\n 'cesu8',\n 'big5',\n 'euckr',\n 'gb2312',\n 'gbk',\n 'sjis',\n 'tis620',\n 'ucs2',\n 'eucjp',\n 'geostd8',\n 'geostd8',\n 'latin1',\n 'cp932',\n 'cp932',\n 'eucjpms',\n 'eucjpms',\n 'cp1250',\n 'utf16',\n 'utf16',\n 'utf16',\n 'utf16',\n 'utf16',\n 'utf16',\n 'utf16',\n 'utf16',\n 'utf16',\n 'utf16',\n 'utf16',\n 'utf16',\n 'utf16',\n 'utf16',\n 'utf16',\n 'utf16',\n 'utf16',\n 'utf16',\n 'utf16',\n 'utf16',\n 'utf16',\n 'utf16',\n 'utf16',\n 'utf16',\n 'utf16',\n 'utf8',\n 'utf8',\n 'utf8',\n 'ucs2',\n 'ucs2',\n 'ucs2',\n 'ucs2',\n 'ucs2',\n 'ucs2',\n 'ucs2',\n 'ucs2',\n 'ucs2',\n 'ucs2',\n 'ucs2',\n 'ucs2',\n 'ucs2',\n 'ucs2',\n 'ucs2',\n 'ucs2',\n 'ucs2',\n 'ucs2',\n 'ucs2',\n 'ucs2',\n 'ucs2',\n 'ucs2',\n 'ucs2',\n 'ucs2',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'ucs2',\n 'utf32',\n 'utf32',\n 'utf32',\n 'utf32',\n 'utf32',\n 'utf32',\n 'utf32',\n 'utf32',\n 'utf32',\n 'utf32',\n 'utf32',\n 'utf32',\n 'utf32',\n 'utf32',\n 'utf32',\n 'utf32',\n 'utf32',\n 'utf32',\n 'utf32',\n 'utf32',\n 'utf32',\n 'utf32',\n 'utf32',\n 'utf32',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'cesu8',\n 'cesu8',\n 'cesu8',\n 'cesu8',\n 'cesu8',\n 'cesu8',\n 'cesu8',\n 'cesu8',\n 'cesu8',\n 'cesu8',\n 'cesu8',\n 'cesu8',\n 'cesu8',\n 'cesu8',\n 'cesu8',\n 'cesu8',\n 'cesu8',\n 'cesu8',\n 'cesu8',\n 'cesu8',\n 'cesu8',\n 'cesu8',\n 'cesu8',\n 'cesu8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'cesu8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'gb18030',\n 'gb18030',\n 'gb18030',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n 'utf8',\n];\n",
|
|
80
|
+
"'use strict';\n\nconst CommandCode = require('../constants/commands.js');\nconst ClientConstants = require('../constants/client.js');\nconst Packet = require('../packets/packet.js');\nconst auth41 = require('../auth_41.js');\nconst CharsetToEncoding = require('../constants/charset_encodings.js');\n\n// https://dev.mysql.com/doc/internals/en/com-change-user.html#packet-COM_CHANGE_USER\nclass ChangeUser {\n constructor(opts) {\n this.flags = opts.flags;\n this.user = opts.user || '';\n this.database = opts.database || '';\n this.password = opts.password || '';\n this.passwordSha1 = opts.passwordSha1;\n this.authPluginData1 = opts.authPluginData1;\n this.authPluginData2 = opts.authPluginData2;\n this.connectAttributes = opts.connectAttrinutes || {};\n let authToken;\n if (this.passwordSha1) {\n authToken = auth41.calculateTokenFromPasswordSha(\n this.passwordSha1,\n this.authPluginData1,\n this.authPluginData2\n );\n } else {\n authToken = auth41.calculateToken(\n this.password,\n this.authPluginData1,\n this.authPluginData2\n );\n }\n this.authToken = authToken;\n this.charsetNumber = opts.charsetNumber;\n }\n\n // TODO\n // ChangeUser.fromPacket = function(packet)\n // };\n serializeToBuffer(buffer) {\n const isSet = (flag) => this.flags & ClientConstants[flag];\n const packet = new Packet(0, buffer, 0, buffer.length);\n packet.offset = 4;\n const encoding = CharsetToEncoding[this.charsetNumber];\n packet.writeInt8(CommandCode.CHANGE_USER);\n packet.writeNullTerminatedString(this.user, encoding);\n if (isSet('SECURE_CONNECTION')) {\n packet.writeInt8(this.authToken.length);\n packet.writeBuffer(this.authToken);\n } else {\n packet.writeBuffer(this.authToken);\n packet.writeInt8(0);\n }\n packet.writeNullTerminatedString(this.database, encoding);\n packet.writeInt16(this.charsetNumber);\n if (isSet('PLUGIN_AUTH')) {\n // TODO: read this from parameters\n packet.writeNullTerminatedString('mysql_native_password', 'latin1');\n }\n if (isSet('CONNECT_ATTRS')) {\n const connectAttributes = this.connectAttributes;\n const attrNames = Object.keys(connectAttributes);\n let keysLength = 0;\n for (let k = 0; k < attrNames.length; ++k) {\n keysLength += Packet.lengthCodedStringLength(attrNames[k], encoding);\n keysLength += Packet.lengthCodedStringLength(\n connectAttributes[attrNames[k]],\n encoding\n );\n }\n packet.writeLengthCodedNumber(keysLength);\n for (let k = 0; k < attrNames.length; ++k) {\n packet.writeLengthCodedString(attrNames[k], encoding);\n packet.writeLengthCodedString(\n connectAttributes[attrNames[k]],\n encoding\n );\n }\n }\n return packet;\n }\n\n toPacket() {\n if (typeof this.user !== 'string') {\n throw new Error('\"user\" connection config property must be a string');\n }\n if (typeof this.database !== 'string') {\n throw new Error('\"database\" connection config property must be a string');\n }\n // dry run: calculate resulting packet length\n const p = this.serializeToBuffer(Packet.MockBuffer());\n return this.serializeToBuffer(Buffer.allocUnsafe(p.offset));\n }\n}\n\nmodule.exports = ChangeUser;\n",
|
|
81
|
+
"'use strict';\n\nconst Packet = require('../packets/packet');\nconst CommandCodes = require('../constants/commands');\n\nclass CloseStatement {\n constructor(id) {\n this.id = id;\n }\n\n // note: no response sent back\n toPacket() {\n const packet = new Packet(0, Buffer.allocUnsafe(9), 0, 9);\n packet.offset = 4;\n packet.writeInt8(CommandCodes.STMT_CLOSE);\n packet.writeInt32(this.id);\n return packet;\n }\n}\n\nmodule.exports = CloseStatement;\n",
|
|
82
|
+
"'use strict';\n\n// Manually extracted from mysql-5.5.23/include/mysql_com.h\nexports.NOT_NULL = 1; /* Field can't be NULL */\nexports.PRI_KEY = 2; /* Field is part of a primary key */\nexports.UNIQUE_KEY = 4; /* Field is part of a unique key */\nexports.MULTIPLE_KEY = 8; /* Field is part of a key */\nexports.BLOB = 16; /* Field is a blob */\nexports.UNSIGNED = 32; /* Field is unsigned */\nexports.ZEROFILL = 64; /* Field is zerofill */\nexports.BINARY = 128; /* Field is binary */\n\n/* The following are only sent to new clients */\nexports.ENUM = 256; /* field is an enum */\nexports.AUTO_INCREMENT = 512; /* field is a autoincrement field */\nexports.TIMESTAMP = 1024; /* Field is a timestamp */\nexports.SET = 2048; /* field is a set */\nexports.NO_DEFAULT_VALUE = 4096; /* Field doesn't have default value */\nexports.ON_UPDATE_NOW = 8192; /* Field is set to NOW on UPDATE */\nexports.NUM = 32768; /* Field is num (for clients) */\n",
|
|
83
|
+
"'use strict';\n\nconst Packet = require('../packets/packet');\nconst StringParser = require('../parsers/string');\nconst CharsetToEncoding = require('../constants/charset_encodings.js');\n\nconst fields = ['catalog', 'schema', 'table', 'orgTable', 'name', 'orgName'];\n\n// creating JS string is relatively expensive (compared to\n// reading few bytes from buffer) because all string properties\n// except for name are unlikely to be used we postpone\n// string conversion until property access\n//\n// TODO: watch for integration benchmarks (one with real network buffer)\n// there could be bad side effect as keeping reference to a buffer makes it\n// sit in the memory longer (usually until final .query() callback)\n// Latest v8 perform much better in regard to bufferer -> string conversion,\n// at some point of time this optimisation might become unnecessary\n// see https://github.com/sidorares/node-mysql2/pull/137\n//\nclass ColumnDefinition {\n constructor(packet, clientEncoding) {\n this._buf = packet.buffer;\n this._clientEncoding = clientEncoding;\n this._catalogLength = packet.readLengthCodedNumber();\n this._catalogStart = packet.offset;\n packet.offset += this._catalogLength;\n this._schemaLength = packet.readLengthCodedNumber();\n this._schemaStart = packet.offset;\n packet.offset += this._schemaLength;\n this._tableLength = packet.readLengthCodedNumber();\n this._tableStart = packet.offset;\n packet.offset += this._tableLength;\n this._orgTableLength = packet.readLengthCodedNumber();\n this._orgTableStart = packet.offset;\n packet.offset += this._orgTableLength;\n // name is always used, don't make it lazy\n const _nameLength = packet.readLengthCodedNumber();\n const _nameStart = packet.offset;\n packet.offset += _nameLength;\n this._orgNameLength = packet.readLengthCodedNumber();\n this._orgNameStart = packet.offset;\n packet.offset += this._orgNameLength;\n packet.skip(1); // length of the following fields (always 0x0c)\n this.characterSet = packet.readInt16();\n this.encoding = CharsetToEncoding[this.characterSet];\n this.name = StringParser.decode(\n this._buf,\n this.encoding === 'binary' ? this._clientEncoding : this.encoding,\n _nameStart,\n _nameStart + _nameLength\n );\n this.columnLength = packet.readInt32();\n this.columnType = packet.readInt8();\n this.type = this.columnType;\n this.flags = packet.readInt16();\n this.decimals = packet.readInt8();\n }\n\n inspect() {\n return {\n catalog: this.catalog,\n schema: this.schema,\n name: this.name,\n orgName: this.orgName,\n table: this.table,\n orgTable: this.orgTable,\n characterSet: this.characterSet,\n encoding: this.encoding,\n columnLength: this.columnLength,\n type: this.columnType,\n flags: this.flags,\n decimals: this.decimals,\n };\n }\n\n [Symbol.for('nodejs.util.inspect.custom')](depth, inspectOptions, inspect) {\n const Types = require('../constants/types.js');\n const typeNames = [];\n for (const t in Types) {\n typeNames[Types[t]] = t;\n }\n const fiedFlags = require('../constants/field_flags.js');\n const flagNames = [];\n // TODO: respect inspectOptions.showHidden\n //const inspectFlags = inspectOptions.showHidden ? this.flags : this.flags & ~fiedFlags.PRI_KEY;\n const inspectFlags = this.flags;\n for (const f in fiedFlags) {\n if (inspectFlags & fiedFlags[f]) {\n if (f === 'PRI_KEY') {\n flagNames.push('PRIMARY KEY');\n } else if (f === 'NOT_NULL') {\n flagNames.push('NOT NULL');\n } else if (f === 'BINARY') {\n // ignore flag for now\n } else if (f === 'MULTIPLE_KEY') {\n // not sure if that should be part of inspection.\n // in the schema usually this is part of index definition\n // example: UNIQUE KEY `my_uniq_id` (`id_box_elements`,`id_router`)\n // note that only first column has MULTIPLE_KEY flag set in this case\n // so there is no good way of knowing that this is part of index just\n // by looking at indifidual field flags\n } else if (f === 'NO_DEFAULT_VALUE') {\n // almost the same as NOT_NULL?\n } else if (f === 'BLOB') {\n // included in the type\n } else if (f === 'UNSIGNED') {\n // this should be first after type\n } else if (f === 'TIMESTAMP') {\n // timestamp flag is redundant for inspection - already included in type\n } else if (f === 'ON_UPDATE_NOW') {\n flagNames.push('ON UPDATE CURRENT_TIMESTAMP');\n } else {\n flagNames.push(f);\n }\n }\n }\n\n if (depth > 1) {\n return inspect({\n ...this.inspect(),\n typeName: typeNames[this.columnType],\n flags: flagNames,\n });\n }\n\n const isUnsigned = this.flags & fiedFlags.UNSIGNED;\n\n let typeName = typeNames[this.columnType];\n if (typeName === 'BLOB') {\n // TODO: check for non-utf8mb4 encoding\n if (this.columnLength === 4294967295) {\n typeName = 'LONGTEXT';\n } else if (this.columnLength === 67108860) {\n typeName = 'MEDIUMTEXT';\n } else if (this.columnLength === 262140) {\n typeName = 'TEXT';\n } else if (this.columnLength === 1020) {\n // 255*4\n typeName = 'TINYTEXT';\n } else {\n typeName = `BLOB(${this.columnLength})`;\n }\n } else if (typeName === 'VAR_STRING') {\n // TODO: check for non-utf8mb4 encoding\n typeName = `VARCHAR(${Math.ceil(this.columnLength / 4)})`;\n } else if (typeName === 'TINY') {\n if (\n (this.columnLength === 3 && isUnsigned) ||\n (this.columnLength === 4 && !isUnsigned)\n ) {\n typeName = 'TINYINT';\n } else {\n typeName = `TINYINT(${this.columnLength})`;\n }\n } else if (typeName === 'LONGLONG') {\n if (this.columnLength === 20) {\n typeName = 'BIGINT';\n } else {\n typeName = `BIGINT(${this.columnLength})`;\n }\n } else if (typeName === 'SHORT') {\n if (isUnsigned && this.columnLength === 5) {\n typeName = 'SMALLINT';\n } else if (!isUnsigned && this.columnLength === 6) {\n typeName = 'SMALLINT';\n } else {\n typeName = `SMALLINT(${this.columnLength})`;\n }\n } else if (typeName === 'LONG') {\n if (isUnsigned && this.columnLength === 10) {\n typeName = 'INT';\n } else if (!isUnsigned && this.columnLength === 11) {\n typeName = 'INT';\n } else {\n typeName = `INT(${this.columnLength})`;\n }\n } else if (typeName === 'INT24') {\n if (isUnsigned && this.columnLength === 8) {\n typeName = 'MEDIUMINT';\n } else if (!isUnsigned && this.columnLength === 9) {\n typeName = 'MEDIUMINT';\n } else {\n typeName = `MEDIUMINT(${this.columnLength})`;\n }\n } else if (typeName === 'DOUBLE') {\n // DOUBLE without modifiers is reported as DOUBLE(22, 31)\n if (this.columnLength === 22 && this.decimals === 31) {\n typeName = 'DOUBLE';\n } else {\n typeName = `DOUBLE(${this.columnLength},${this.decimals})`;\n }\n } else if (typeName === 'FLOAT') {\n // FLOAT without modifiers is reported as FLOAT(12, 31)\n if (this.columnLength === 12 && this.decimals === 31) {\n typeName = 'FLOAT';\n } else {\n typeName = `FLOAT(${this.columnLength},${this.decimals})`;\n }\n } else if (typeName === 'NEWDECIMAL') {\n if (this.columnLength === 11 && this.decimals === 0) {\n typeName = 'DECIMAL';\n } else if (this.decimals === 0) {\n // not sure why, but DECIMAL(13) is reported as DECIMAL(14, 0)\n // and DECIMAL(13, 9) is reported as NEWDECIMAL(15, 9)\n if (isUnsigned) {\n typeName = `DECIMAL(${this.columnLength})`;\n } else {\n typeName = `DECIMAL(${this.columnLength - 1})`;\n }\n } else {\n typeName = `DECIMAL(${this.columnLength - 2},${this.decimals})`;\n }\n } else {\n typeName = `${typeNames[this.columnType]}(${this.columnLength})`;\n }\n\n if (isUnsigned) {\n typeName += ' UNSIGNED';\n }\n\n // TODO respect colors option\n return `\\`${this.name}\\` ${[typeName, ...flagNames].join(' ')}`;\n }\n\n static toPacket(column, sequenceId) {\n let length = 17; // = 4 padding + 1 + 12 for the rest\n fields.forEach((field) => {\n length += Packet.lengthCodedStringLength(\n column[field],\n CharsetToEncoding[column.characterSet]\n );\n });\n const buffer = Buffer.allocUnsafe(length);\n\n const packet = new Packet(sequenceId, buffer, 0, length);\n function writeField(name) {\n packet.writeLengthCodedString(\n column[name],\n CharsetToEncoding[column.characterSet]\n );\n }\n packet.offset = 4;\n fields.forEach(writeField);\n packet.writeInt8(0x0c);\n packet.writeInt16(column.characterSet);\n packet.writeInt32(column.columnLength);\n packet.writeInt8(column.columnType);\n packet.writeInt16(column.flags);\n packet.writeInt8(column.decimals);\n packet.writeInt16(0); // filler\n return packet;\n }\n\n // node-mysql compatibility: alias \"db\" to \"schema\"\n get db() {\n return this.schema;\n }\n}\n\nconst addString = function (name) {\n Object.defineProperty(ColumnDefinition.prototype, name, {\n get: function () {\n const start = this[`_${name}Start`];\n const end = start + this[`_${name}Length`];\n const val = StringParser.decode(\n this._buf,\n this.encoding === 'binary' ? this._clientEncoding : this.encoding,\n start,\n end\n );\n\n Object.defineProperty(this, name, {\n value: val,\n writable: false,\n configurable: false,\n enumerable: false,\n });\n\n return val;\n },\n });\n};\n\naddString('catalog');\naddString('schema');\naddString('table');\naddString('orgTable');\naddString('orgName');\n\nmodule.exports = ColumnDefinition;\n",
|
|
84
|
+
"'use strict';\n\nmodule.exports = {\n NO_CURSOR: 0,\n READ_ONLY: 1,\n FOR_UPDATE: 2,\n SCROLLABLE: 3,\n};\n",
|
|
85
|
+
"'use strict';\n\nconst CursorType = require('../constants/cursor');\nconst CommandCodes = require('../constants/commands');\nconst Types = require('../constants/types');\nconst Packet = require('../packets/packet');\nconst CharsetToEncoding = require('../constants/charset_encodings.js');\n\nfunction isJSON(value) {\n return (\n Array.isArray(value) ||\n value.constructor === Object ||\n (typeof value.toJSON === 'function' && !Buffer.isBuffer(value))\n );\n}\n\n/**\n * Converts a value to an object describing type, String/Buffer representation and length\n * @param {*} value\n */\nfunction toParameter(value, encoding, timezone) {\n let type = Types.VAR_STRING;\n let length;\n let writer = function (value) {\n // eslint-disable-next-line no-invalid-this\n return Packet.prototype.writeLengthCodedString.call(this, value, encoding);\n };\n if (value !== null) {\n switch (typeof value) {\n case 'undefined':\n throw new TypeError('Bind parameters must not contain undefined');\n\n case 'number':\n type = Types.DOUBLE;\n length = 8;\n writer = Packet.prototype.writeDouble;\n break;\n\n case 'boolean':\n value = value | 0;\n type = Types.TINY;\n length = 1;\n writer = Packet.prototype.writeInt8;\n break;\n\n case 'object':\n if (Object.prototype.toString.call(value) === '[object Date]') {\n type = Types.DATETIME;\n length = 12;\n writer = function (value) {\n // eslint-disable-next-line no-invalid-this\n return Packet.prototype.writeDate.call(this, value, timezone);\n };\n } else if (isJSON(value)) {\n value = JSON.stringify(value);\n type = Types.JSON;\n } else if (Buffer.isBuffer(value)) {\n length = Packet.lengthCodedNumberLength(value.length) + value.length;\n writer = Packet.prototype.writeLengthCodedBuffer;\n }\n break;\n\n default:\n value = value.toString();\n }\n } else {\n value = '';\n type = Types.NULL;\n }\n if (!length) {\n length = Packet.lengthCodedStringLength(value, encoding);\n }\n return { value, type, length, writer };\n}\n\nclass Execute {\n constructor(id, parameters, charsetNumber, timezone) {\n this.id = id;\n this.parameters = parameters;\n this.encoding = CharsetToEncoding[charsetNumber];\n this.timezone = timezone;\n }\n\n static fromPacket(packet, encoding) {\n const stmtId = packet.readInt32();\n const flags = packet.readInt8();\n const iterationCount = packet.readInt32();\n\n let i = packet.offset;\n while (i < packet.end - 1) {\n if (\n (packet.buffer[i + 1] === Types.VAR_STRING ||\n packet.buffer[i + 1] === Types.NULL ||\n packet.buffer[i + 1] === Types.DOUBLE ||\n packet.buffer[i + 1] === Types.TINY ||\n packet.buffer[i + 1] === Types.DATETIME ||\n packet.buffer[i + 1] === Types.JSON) &&\n packet.buffer[i] === 1 &&\n packet.buffer[i + 2] === 0\n ) {\n break;\n } else {\n packet.readInt8();\n }\n i++;\n }\n\n const types = [];\n\n for (let i = packet.offset + 1; i < packet.end - 1; i++) {\n if (\n (packet.buffer[i] === Types.VAR_STRING ||\n packet.buffer[i] === Types.NULL ||\n packet.buffer[i] === Types.DOUBLE ||\n packet.buffer[i] === Types.TINY ||\n packet.buffer[i] === Types.DATETIME ||\n packet.buffer[i] === Types.JSON) &&\n packet.buffer[i + 1] === 0\n ) {\n types.push(packet.buffer[i]);\n packet.skip(2);\n }\n }\n\n packet.skip(1);\n\n const values = [];\n for (let i = 0; i < types.length; i++) {\n if (types[i] === Types.VAR_STRING) {\n values.push(packet.readLengthCodedString(encoding));\n } else if (types[i] === Types.DOUBLE) {\n values.push(packet.readDouble());\n } else if (types[i] === Types.TINY) {\n values.push(packet.readInt8());\n } else if (types[i] === Types.DATETIME) {\n values.push(packet.readDateTime());\n } else if (types[i] === Types.JSON) {\n values.push(JSON.parse(packet.readLengthCodedString(encoding)));\n }\n if (types[i] === Types.NULL) {\n values.push(null);\n }\n }\n\n return { stmtId, flags, iterationCount, values };\n }\n\n toPacket() {\n // TODO: don't try to calculate packet length in advance, allocate some big buffer in advance (header + 256 bytes?)\n // and copy + reallocate if not enough\n // 0 + 4 - length, seqId\n // 4 + 1 - COM_EXECUTE\n // 5 + 4 - stmtId\n // 9 + 1 - flags\n // 10 + 4 - iteration-count (always 1)\n let length = 14;\n let parameters;\n if (this.parameters && this.parameters.length > 0) {\n length += Math.floor((this.parameters.length + 7) / 8);\n length += 1; // new-params-bound-flag\n length += 2 * this.parameters.length; // type byte for each parameter if new-params-bound-flag is set\n parameters = this.parameters.map((value) =>\n toParameter(value, this.encoding, this.timezone)\n );\n length += parameters.reduce(\n (accumulator, parameter) => accumulator + parameter.length,\n 0\n );\n }\n const buffer = Buffer.allocUnsafe(length);\n const packet = new Packet(0, buffer, 0, length);\n packet.offset = 4;\n packet.writeInt8(CommandCodes.STMT_EXECUTE);\n packet.writeInt32(this.id);\n packet.writeInt8(CursorType.NO_CURSOR); // flags\n packet.writeInt32(1); // iteration-count, always 1\n if (parameters) {\n let bitmap = 0;\n let bitValue = 1;\n parameters.forEach((parameter) => {\n if (parameter.type === Types.NULL) {\n bitmap += bitValue;\n }\n bitValue *= 2;\n if (bitValue === 256) {\n packet.writeInt8(bitmap);\n bitmap = 0;\n bitValue = 1;\n }\n });\n if (bitValue !== 1) {\n packet.writeInt8(bitmap);\n }\n // TODO: explain meaning of the flag\n // afaik, if set n*2 bytes with type of parameter are sent before parameters\n // if not, previous execution types are used (TODO prooflink)\n packet.writeInt8(1); // new-params-bound-flag\n // Write parameter types\n parameters.forEach((parameter) => {\n packet.writeInt8(parameter.type); // field type\n packet.writeInt8(0); // parameter flag\n });\n // Write parameter values\n parameters.forEach((parameter) => {\n if (parameter.type !== Types.NULL) {\n parameter.writer.call(packet, parameter.value);\n }\n });\n }\n return packet;\n }\n}\n\nmodule.exports = Execute;\n",
|
|
86
|
+
"'use strict';\n\nconst Packet = require('../packets/packet');\nconst ClientConstants = require('../constants/client.js');\n\n// https://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::Handshake\n\nclass Handshake {\n constructor(args) {\n this.protocolVersion = args.protocolVersion;\n this.serverVersion = args.serverVersion;\n this.capabilityFlags = args.capabilityFlags;\n this.connectionId = args.connectionId;\n this.authPluginData1 = args.authPluginData1;\n this.authPluginData2 = args.authPluginData2;\n this.characterSet = args.characterSet;\n this.statusFlags = args.statusFlags;\n this.authPluginName = args.authPluginName;\n }\n\n setScrambleData(cb) {\n require('crypto').randomBytes(20, (err, data) => {\n if (err) {\n cb(err);\n return;\n }\n this.authPluginData1 = data.slice(0, 8);\n this.authPluginData2 = data.slice(8, 20);\n cb();\n });\n }\n\n toPacket(sequenceId) {\n const length = 68 + Buffer.byteLength(this.serverVersion, 'utf8');\n const buffer = Buffer.alloc(length + 4, 0); // zero fill, 10 bytes filler later needs to contain zeros\n const packet = new Packet(sequenceId, buffer, 0, length + 4);\n packet.offset = 4;\n packet.writeInt8(this.protocolVersion);\n packet.writeString(this.serverVersion, 'cesu8');\n packet.writeInt8(0);\n packet.writeInt32(this.connectionId);\n packet.writeBuffer(this.authPluginData1);\n packet.writeInt8(0);\n const capabilityFlagsBuffer = Buffer.allocUnsafe(4);\n capabilityFlagsBuffer.writeUInt32LE(this.capabilityFlags, 0);\n packet.writeBuffer(capabilityFlagsBuffer.slice(0, 2));\n packet.writeInt8(this.characterSet);\n packet.writeInt16(this.statusFlags);\n packet.writeBuffer(capabilityFlagsBuffer.slice(2, 4));\n packet.writeInt8(21); // authPluginDataLength\n packet.skip(10);\n packet.writeBuffer(this.authPluginData2);\n packet.writeInt8(0);\n packet.writeString('mysql_native_password', 'latin1');\n packet.writeInt8(0);\n return packet;\n }\n\n static fromPacket(packet) {\n const args = {};\n args.protocolVersion = packet.readInt8();\n args.serverVersion = packet.readNullTerminatedString('cesu8');\n args.connectionId = packet.readInt32();\n args.authPluginData1 = packet.readBuffer(8);\n packet.skip(1);\n const capabilityFlagsBuffer = Buffer.allocUnsafe(4);\n capabilityFlagsBuffer[0] = packet.readInt8();\n capabilityFlagsBuffer[1] = packet.readInt8();\n if (packet.haveMoreData()) {\n args.characterSet = packet.readInt8();\n args.statusFlags = packet.readInt16();\n // upper 2 bytes\n capabilityFlagsBuffer[2] = packet.readInt8();\n capabilityFlagsBuffer[3] = packet.readInt8();\n args.capabilityFlags = capabilityFlagsBuffer.readUInt32LE(0);\n if (args.capabilityFlags & ClientConstants.PLUGIN_AUTH) {\n args.authPluginDataLength = packet.readInt8();\n } else {\n args.authPluginDataLength = 0;\n packet.skip(1);\n }\n packet.skip(10);\n } else {\n args.capabilityFlags = capabilityFlagsBuffer.readUInt16LE(0);\n }\n\n const isSecureConnection =\n args.capabilityFlags & ClientConstants.SECURE_CONNECTION;\n if (isSecureConnection) {\n const authPluginDataLength = args.authPluginDataLength;\n if (authPluginDataLength === 0) {\n // for Secure Password Authentication\n args.authPluginDataLength = 20;\n args.authPluginData2 = packet.readBuffer(12);\n packet.skip(1);\n } else {\n // length > 0\n // for Custom Auth Plugin (PLUGIN_AUTH)\n const len = Math.max(13, authPluginDataLength - 8);\n args.authPluginData2 = packet.readBuffer(len);\n }\n }\n\n if (args.capabilityFlags & ClientConstants.PLUGIN_AUTH) {\n args.authPluginName = packet.readNullTerminatedString('ascii');\n }\n\n return new Handshake(args);\n }\n}\n\nmodule.exports = Handshake;\n",
|
|
87
|
+
"'use strict';\n\nconst ClientConstants = require('../constants/client.js');\nconst CharsetToEncoding = require('../constants/charset_encodings.js');\nconst Packet = require('../packets/packet.js');\n\nconst auth41 = require('../auth_41.js');\n\nclass HandshakeResponse {\n constructor(handshake) {\n this.user = handshake.user || '';\n this.database = handshake.database || '';\n this.password = handshake.password || '';\n this.passwordSha1 = handshake.passwordSha1;\n this.authPluginData1 = handshake.authPluginData1;\n this.authPluginData2 = handshake.authPluginData2;\n this.compress = handshake.compress;\n this.clientFlags = handshake.flags;\n // TODO: pre-4.1 auth support\n let authToken;\n if (this.passwordSha1) {\n authToken = auth41.calculateTokenFromPasswordSha(\n this.passwordSha1,\n this.authPluginData1,\n this.authPluginData2\n );\n } else {\n authToken = auth41.calculateToken(\n this.password,\n this.authPluginData1,\n this.authPluginData2\n );\n }\n this.authToken = authToken;\n this.charsetNumber = handshake.charsetNumber;\n this.encoding = CharsetToEncoding[handshake.charsetNumber];\n this.connectAttributes = handshake.connectAttributes;\n }\n\n serializeResponse(buffer) {\n const isSet = (flag) => this.clientFlags & ClientConstants[flag];\n const packet = new Packet(0, buffer, 0, buffer.length);\n packet.offset = 4;\n packet.writeInt32(this.clientFlags);\n packet.writeInt32(0); // max packet size. todo: move to config\n packet.writeInt8(this.charsetNumber);\n packet.skip(23);\n const encoding = this.encoding;\n packet.writeNullTerminatedString(this.user, encoding);\n let k;\n if (isSet('PLUGIN_AUTH_LENENC_CLIENT_DATA')) {\n packet.writeLengthCodedNumber(this.authToken.length);\n packet.writeBuffer(this.authToken);\n } else if (isSet('SECURE_CONNECTION')) {\n packet.writeInt8(this.authToken.length);\n packet.writeBuffer(this.authToken);\n } else {\n packet.writeBuffer(this.authToken);\n packet.writeInt8(0);\n }\n if (isSet('CONNECT_WITH_DB')) {\n packet.writeNullTerminatedString(this.database, encoding);\n }\n if (isSet('PLUGIN_AUTH')) {\n // TODO: pass from config\n packet.writeNullTerminatedString('mysql_native_password', 'latin1');\n }\n if (isSet('CONNECT_ATTRS')) {\n const connectAttributes = this.connectAttributes || {};\n const attrNames = Object.keys(connectAttributes);\n let keysLength = 0;\n for (k = 0; k < attrNames.length; ++k) {\n keysLength += Packet.lengthCodedStringLength(attrNames[k], encoding);\n keysLength += Packet.lengthCodedStringLength(\n connectAttributes[attrNames[k]],\n encoding\n );\n }\n packet.writeLengthCodedNumber(keysLength);\n for (k = 0; k < attrNames.length; ++k) {\n packet.writeLengthCodedString(attrNames[k], encoding);\n packet.writeLengthCodedString(\n connectAttributes[attrNames[k]],\n encoding\n );\n }\n }\n return packet;\n }\n\n toPacket() {\n if (typeof this.user !== 'string') {\n throw new Error('\"user\" connection config property must be a string');\n }\n if (typeof this.database !== 'string') {\n throw new Error('\"database\" connection config property must be a string');\n }\n // dry run: calculate resulting packet length\n const p = this.serializeResponse(Packet.MockBuffer());\n return this.serializeResponse(Buffer.alloc(p.offset));\n }\n static fromPacket(packet) {\n const args = {};\n args.clientFlags = packet.readInt32();\n function isSet(flag) {\n return args.clientFlags & ClientConstants[flag];\n }\n args.maxPacketSize = packet.readInt32();\n args.charsetNumber = packet.readInt8();\n const encoding = CharsetToEncoding[args.charsetNumber];\n args.encoding = encoding;\n packet.skip(23);\n args.user = packet.readNullTerminatedString(encoding);\n let authTokenLength;\n if (isSet('PLUGIN_AUTH_LENENC_CLIENT_DATA')) {\n authTokenLength = packet.readLengthCodedNumber(encoding);\n args.authToken = packet.readBuffer(authTokenLength);\n } else if (isSet('SECURE_CONNECTION')) {\n authTokenLength = packet.readInt8();\n args.authToken = packet.readBuffer(authTokenLength);\n } else {\n args.authToken = packet.readNullTerminatedString(encoding);\n }\n if (isSet('CONNECT_WITH_DB')) {\n args.database = packet.readNullTerminatedString(encoding);\n }\n if (isSet('PLUGIN_AUTH')) {\n args.authPluginName = packet.readNullTerminatedString(encoding);\n }\n if (isSet('CONNECT_ATTRS')) {\n const keysLength = packet.readLengthCodedNumber(encoding);\n const keysEnd = packet.offset + keysLength;\n const attrs = {};\n while (packet.offset < keysEnd) {\n attrs[packet.readLengthCodedString(encoding)] =\n packet.readLengthCodedString(encoding);\n }\n args.connectAttributes = attrs;\n }\n return args;\n }\n}\n\nmodule.exports = HandshakeResponse;\n",
|
|
88
|
+
"'use strict';\n\nconst Packet = require('../packets/packet');\nconst CommandCodes = require('../constants/commands');\nconst StringParser = require('../parsers/string.js');\nconst CharsetToEncoding = require('../constants/charset_encodings.js');\n\nclass PrepareStatement {\n constructor(sql, charsetNumber) {\n this.query = sql;\n this.charsetNumber = charsetNumber;\n this.encoding = CharsetToEncoding[charsetNumber];\n }\n\n toPacket() {\n const buf = StringParser.encode(this.query, this.encoding);\n const length = 5 + buf.length;\n const buffer = Buffer.allocUnsafe(length);\n const packet = new Packet(0, buffer, 0, length);\n packet.offset = 4;\n packet.writeInt8(CommandCodes.STMT_PREPARE);\n packet.writeBuffer(buf);\n return packet;\n }\n}\n\nmodule.exports = PrepareStatement;\n",
|
|
89
|
+
"'use strict';\n\nclass PreparedStatementHeader {\n constructor(packet) {\n packet.skip(1); // should be 0\n this.id = packet.readInt32();\n this.fieldCount = packet.readInt16();\n this.parameterCount = packet.readInt16();\n packet.skip(1); // should be 0\n this.warningCount = packet.readInt16();\n }\n}\n\n// TODO: toPacket\n\nmodule.exports = PreparedStatementHeader;\n",
|
|
90
|
+
"'use strict';\n\nconst Packet = require('../packets/packet.js');\nconst CommandCode = require('../constants/commands.js');\nconst StringParser = require('../parsers/string.js');\nconst CharsetToEncoding = require('../constants/charset_encodings.js');\n\nclass Query {\n constructor(sql, charsetNumber) {\n this.query = sql;\n this.charsetNumber = charsetNumber;\n this.encoding = CharsetToEncoding[charsetNumber];\n }\n\n toPacket() {\n const buf = StringParser.encode(this.query, this.encoding);\n const length = 5 + buf.length;\n const buffer = Buffer.allocUnsafe(length);\n const packet = new Packet(0, buffer, 0, length);\n packet.offset = 4;\n packet.writeInt8(CommandCode.QUERY);\n packet.writeBuffer(buf);\n return packet;\n }\n}\n\nmodule.exports = Query;\n",
|
|
91
|
+
"'use strict';\n\n// http://dev.mysql.com/doc/internals/en/com-register-slave.html\n// note that documentation is incorrect, for example command code is actually 0x15 but documented as 0x14\n\nconst Packet = require('../packets/packet');\nconst CommandCodes = require('../constants/commands');\n\nclass RegisterSlave {\n constructor(opts) {\n this.serverId = opts.serverId || 0;\n this.slaveHostname = opts.slaveHostname || '';\n this.slaveUser = opts.slaveUser || '';\n this.slavePassword = opts.slavePassword || '';\n this.slavePort = opts.slavePort || 0;\n this.replicationRank = opts.replicationRank || 0;\n this.masterId = opts.masterId || 0;\n }\n\n toPacket() {\n const length =\n 15 + // TODO: should be ascii?\n Buffer.byteLength(this.slaveHostname, 'utf8') +\n Buffer.byteLength(this.slaveUser, 'utf8') +\n Buffer.byteLength(this.slavePassword, 'utf8') +\n 3 +\n 4;\n const buffer = Buffer.allocUnsafe(length);\n const packet = new Packet(0, buffer, 0, length);\n packet.offset = 4;\n packet.writeInt8(CommandCodes.REGISTER_SLAVE);\n packet.writeInt32(this.serverId);\n packet.writeInt8(Buffer.byteLength(this.slaveHostname, 'utf8'));\n packet.writeString(this.slaveHostname);\n packet.writeInt8(Buffer.byteLength(this.slaveUser, 'utf8'));\n packet.writeString(this.slaveUser);\n packet.writeInt8(Buffer.byteLength(this.slavePassword, 'utf8'));\n packet.writeString(this.slavePassword);\n packet.writeInt16(this.slavePort);\n packet.writeInt32(this.replicationRank);\n packet.writeInt32(this.masterId);\n return packet;\n }\n}\n\nmodule.exports = RegisterSlave;\n",
|
|
92
|
+
"'use strict';\n\n// Manually extracted from mysql-5.5.23/include/mysql_com.h\n\n/**\n Is raised when a multi-statement transaction\n has been started, either explicitly, by means\n of BEGIN or COMMIT AND CHAIN, or\n implicitly, by the first transactional\n statement, when autocommit=off.\n*/\nexports.SERVER_STATUS_IN_TRANS = 1;\nexports.SERVER_STATUS_AUTOCOMMIT = 2; /* Server in auto_commit mode */\nexports.SERVER_MORE_RESULTS_EXISTS = 8; /* Multi query - next query exists */\nexports.SERVER_QUERY_NO_GOOD_INDEX_USED = 16;\nexports.SERVER_QUERY_NO_INDEX_USED = 32;\n/**\n The server was able to fulfill the clients request and opened a\n read-only non-scrollable cursor for a query. This flag comes\n in reply to COM_STMT_EXECUTE and COM_STMT_FETCH commands.\n*/\nexports.SERVER_STATUS_CURSOR_EXISTS = 64;\n/**\n This flag is sent when a read-only cursor is exhausted, in reply to\n COM_STMT_FETCH command.\n*/\nexports.SERVER_STATUS_LAST_ROW_SENT = 128;\nexports.SERVER_STATUS_DB_DROPPED = 256; /* A database was dropped */\nexports.SERVER_STATUS_NO_BACKSLASH_ESCAPES = 512;\n/**\n Sent to the client if after a prepared statement reprepare\n we discovered that the new statement returns a different\n number of result set columns.\n*/\nexports.SERVER_STATUS_METADATA_CHANGED = 1024;\nexports.SERVER_QUERY_WAS_SLOW = 2048;\n\n/**\n To mark ResultSet containing output parameter values.\n*/\nexports.SERVER_PS_OUT_PARAMS = 4096;\n\nexports.SERVER_STATUS_IN_TRANS_READONLY = 0x2000; // in a read-only transaction\nexports.SERVER_SESSION_STATE_CHANGED = 0x4000;\n",
|
|
93
|
+
"'use strict';\n\n// inverse of charset_encodings\n// given encoding, get matching mysql charset number\n\nmodule.exports = {\n big5: 1,\n latin2: 2,\n dec8: 3,\n cp850: 4,\n latin1: 5,\n hp8: 6,\n koi8r: 7,\n swe7: 10,\n ascii: 11,\n eucjp: 12,\n sjis: 13,\n cp1251: 14,\n hebrew: 16,\n tis620: 18,\n euckr: 19,\n latin7: 20,\n koi8u: 22,\n gb2312: 24,\n greek: 25,\n cp1250: 26,\n gbk: 28,\n cp1257: 29,\n latin5: 30,\n armscii8: 32,\n cesu8: 33,\n ucs2: 35,\n cp866: 36,\n keybcs2: 37,\n macintosh: 38,\n macroman: 39,\n cp852: 40,\n utf8: 45,\n utf8mb4: 45,\n utf16: 54,\n utf16le: 56,\n cp1256: 57,\n utf32: 60,\n binary: 63,\n geostd8: 92,\n cp932: 95,\n eucjpms: 97,\n gb18030: 248,\n utf8mb3: 192,\n};\n",
|
|
94
|
+
"'use strict';\n\nexports.SYSTEM_VARIABLES = 0;\nexports.SCHEMA = 1;\nexports.STATE_CHANGE = 2;\nexports.STATE_GTIDS = 3;\nexports.TRANSACTION_CHARACTERISTICS = 4;\nexports.TRANSACTION_STATE = 5;\n\nexports.FIRST_KEY = exports.SYSTEM_VARIABLES;\nexports.LAST_KEY = exports.TRANSACTION_STATE;\n",
|
|
95
|
+
"'use strict';\n\n// TODO: rename to OK packet\n// https://dev.mysql.com/doc/internals/en/packet-OK_Packet.html\n\nconst Packet = require('./packet.js');\nconst ClientConstants = require('../constants/client.js');\nconst ServerSatusFlags = require('../constants/server_status.js');\n\nconst EncodingToCharset = require('../constants/encoding_charset.js');\nconst sessionInfoTypes = require('../constants/session_track.js');\n\nclass ResultSetHeader {\n constructor(packet, connection) {\n const bigNumberStrings = connection.config.bigNumberStrings;\n const encoding = connection.serverEncoding;\n const flags = connection._handshakePacket.capabilityFlags;\n const isSet = function (flag) {\n return flags & ClientConstants[flag];\n };\n if (packet.buffer[packet.offset] !== 0) {\n this.fieldCount = packet.readLengthCodedNumber();\n if (this.fieldCount === null) {\n this.infileName = packet.readString(undefined, encoding);\n }\n return;\n }\n this.fieldCount = packet.readInt8(); // skip OK byte\n this.affectedRows = packet.readLengthCodedNumber(bigNumberStrings);\n this.insertId = packet.readLengthCodedNumberSigned(bigNumberStrings);\n this.info = '';\n if (isSet('PROTOCOL_41')) {\n this.serverStatus = packet.readInt16();\n this.warningStatus = packet.readInt16();\n } else if (isSet('TRANSACTIONS')) {\n this.serverStatus = packet.readInt16();\n }\n let stateChanges = null;\n if (isSet('SESSION_TRACK') && packet.offset < packet.end) {\n this.info = packet.readLengthCodedString(encoding);\n\n if (this.serverStatus && ServerSatusFlags.SERVER_SESSION_STATE_CHANGED) {\n // session change info record - see\n // https://dev.mysql.com/doc/internals/en/packet-OK_Packet.html#cs-sect-packet-ok-sessioninfo\n let len =\n packet.offset < packet.end ? packet.readLengthCodedNumber() : 0;\n const end = packet.offset + len;\n let type, key, stateEnd;\n if (len > 0) {\n stateChanges = {\n systemVariables: {},\n schema: null,\n gtids: [],\n trackStateChange: null,\n };\n }\n while (packet.offset < end) {\n type = packet.readInt8();\n len = packet.readLengthCodedNumber();\n stateEnd = packet.offset + len;\n if (type === sessionInfoTypes.SYSTEM_VARIABLES) {\n key = packet.readLengthCodedString(encoding);\n const val = packet.readLengthCodedString(encoding);\n stateChanges.systemVariables[key] = val;\n if (key === 'character_set_client') {\n const charsetNumber = EncodingToCharset[val];\n // TODO - better api for driver users to handle unknown encodings?\n // maybe custom coverter in the config?\n // For now just ignore character_set_client command if there is\n // no known mapping from reported encoding to a charset code\n if (typeof charsetNumber !== 'undefined') {\n connection.config.charsetNumber = charsetNumber;\n }\n }\n } else if (type === sessionInfoTypes.SCHEMA) {\n key = packet.readLengthCodedString(encoding);\n stateChanges.schema = key;\n } else if (type === sessionInfoTypes.STATE_CHANGE) {\n stateChanges.trackStateChange =\n packet.readLengthCodedString(encoding);\n } else if (type === sessionInfoTypes.STATE_GTIDS) {\n // TODO: find if the first length coded string means anything. Usually comes as empty\n // eslint-disable-next-line no-unused-vars\n const _unknownString = packet.readLengthCodedString(encoding);\n const gtid = packet.readLengthCodedString(encoding);\n stateChanges.gtids = gtid.split(',');\n } else {\n // unsupported session track type. For now just ignore\n }\n packet.offset = stateEnd;\n }\n }\n } else {\n this.info = packet.readString(undefined, encoding);\n }\n if (stateChanges) {\n this.stateChanges = stateChanges;\n }\n const m = this.info.match(/\\schanged:\\s*(\\d+)/i);\n if (m !== null) {\n this.changedRows = parseInt(m[1], 10);\n } else {\n this.changedRows = 0;\n }\n }\n\n // TODO: should be consistent instance member, but it's just easier here to have just function\n static toPacket(fieldCount, insertId) {\n let length = 4 + Packet.lengthCodedNumberLength(fieldCount);\n if (typeof insertId !== 'undefined') {\n length += Packet.lengthCodedNumberLength(insertId);\n }\n const buffer = Buffer.allocUnsafe(length);\n const packet = new Packet(0, buffer, 0, length);\n packet.offset = 4;\n packet.writeLengthCodedNumber(fieldCount);\n if (typeof insertId !== 'undefined') {\n packet.writeLengthCodedNumber(insertId);\n }\n return packet;\n }\n}\n\nmodule.exports = ResultSetHeader;\n",
|
|
96
|
+
"'use strict';\n\nconst ClientConstants = require('../constants/client');\nconst Packet = require('../packets/packet');\n\nclass SSLRequest {\n constructor(flags, charset) {\n this.clientFlags = flags | ClientConstants.SSL;\n this.charset = charset;\n }\n\n toPacket() {\n const length = 36;\n const buffer = Buffer.allocUnsafe(length);\n const packet = new Packet(0, buffer, 0, length);\n buffer.fill(0);\n packet.offset = 4;\n packet.writeInt32(this.clientFlags);\n packet.writeInt32(0); // max packet size. todo: move to config\n packet.writeInt8(this.charset);\n return packet;\n }\n}\n\nmodule.exports = SSLRequest;\n",
|
|
97
|
+
"'use strict';\n\nconst Packet = require('../packets/packet');\n\nclass TextRow {\n constructor(columns) {\n this.columns = columns || [];\n }\n\n static fromPacket(packet) {\n // packet.reset(); // set offset to starting point?\n const columns = [];\n while (packet.haveMoreData()) {\n columns.push(packet.readLengthCodedString());\n }\n return new TextRow(columns);\n }\n\n static toPacket(columns, encoding) {\n const sequenceId = 0; // TODO remove, this is calculated now in connecton\n let length = 0;\n columns.forEach((val) => {\n if (val === null || typeof val === 'undefined') {\n ++length;\n return;\n }\n length += Packet.lengthCodedStringLength(val.toString(10), encoding);\n });\n const buffer = Buffer.allocUnsafe(length + 4);\n const packet = new Packet(sequenceId, buffer, 0, length + 4);\n packet.offset = 4;\n columns.forEach((val) => {\n if (val === null) {\n packet.writeNull();\n return;\n }\n if (typeof val === 'undefined') {\n packet.writeInt8(0);\n return;\n }\n packet.writeLengthCodedString(val.toString(10), encoding);\n });\n return packet;\n }\n}\n\nmodule.exports = TextRow;\n",
|
|
98
|
+
"// This file was modified by Oracle on June 1, 2021.\n// A utility method was introduced to generate an Error instance from a\n// binary server packet.\n// Modifications copyright (c) 2021, Oracle and/or its affiliates.\n\n// This file was modified by Oracle on September 21, 2021.\n// The new AuthNextFactor packet is now available.\n// Modifications copyright (c) 2021, Oracle and/or its affiliates.\n\n'use strict';\n\nconst process = require('process');\n\nconst AuthNextFactor = require('./auth_next_factor');\nconst AuthSwitchRequest = require('./auth_switch_request');\nconst AuthSwitchRequestMoreData = require('./auth_switch_request_more_data');\nconst AuthSwitchResponse = require('./auth_switch_response');\nconst BinaryRow = require('./binary_row');\nconst BinlogDump = require('./binlog_dump');\nconst ChangeUser = require('./change_user');\nconst CloseStatement = require('./close_statement');\nconst ColumnDefinition = require('./column_definition');\nconst Execute = require('./execute');\nconst Handshake = require('./handshake');\nconst HandshakeResponse = require('./handshake_response');\nconst PrepareStatement = require('./prepare_statement');\nconst PreparedStatementHeader = require('./prepared_statement_header');\nconst Query = require('./query');\nconst RegisterSlave = require('./register_slave');\nconst ResultSetHeader = require('./resultset_header');\nconst SSLRequest = require('./ssl_request');\nconst TextRow = require('./text_row');\n\nconst ctorMap = {\n AuthNextFactor,\n AuthSwitchRequest,\n AuthSwitchRequestMoreData,\n AuthSwitchResponse,\n BinaryRow,\n BinlogDump,\n ChangeUser,\n CloseStatement,\n ColumnDefinition,\n Execute,\n Handshake,\n HandshakeResponse,\n PrepareStatement,\n PreparedStatementHeader,\n Query,\n RegisterSlave,\n ResultSetHeader,\n SSLRequest,\n TextRow,\n};\nObject.entries(ctorMap).forEach(([name, ctor]) => {\n module.exports[name] = ctor;\n // monkey-patch it to include name if debug is on\n if (process.env.NODE_DEBUG) {\n if (ctor.prototype.toPacket) {\n const old = ctor.prototype.toPacket;\n ctor.prototype.toPacket = function () {\n const p = old.call(this);\n p._name = name;\n return p;\n };\n }\n }\n});\n\n// simple packets:\nconst Packet = require('./packet');\nexports.Packet = Packet;\n\nclass OK {\n static toPacket(args, encoding) {\n args = args || {};\n const affectedRows = args.affectedRows || 0;\n const insertId = args.insertId || 0;\n const serverStatus = args.serverStatus || 0;\n const warningCount = args.warningCount || 0;\n const message = args.message || '';\n\n let length = 9 + Packet.lengthCodedNumberLength(affectedRows);\n length += Packet.lengthCodedNumberLength(insertId);\n\n const buffer = Buffer.allocUnsafe(length);\n const packet = new Packet(0, buffer, 0, length);\n packet.offset = 4;\n packet.writeInt8(0);\n packet.writeLengthCodedNumber(affectedRows);\n packet.writeLengthCodedNumber(insertId);\n packet.writeInt16(serverStatus);\n packet.writeInt16(warningCount);\n packet.writeString(message, encoding);\n packet._name = 'OK';\n return packet;\n }\n}\n\nexports.OK = OK;\n\n// warnings, statusFlags\nclass EOF {\n static toPacket(warnings, statusFlags) {\n if (typeof warnings === 'undefined') {\n warnings = 0;\n }\n if (typeof statusFlags === 'undefined') {\n statusFlags = 0;\n }\n const packet = new Packet(0, Buffer.allocUnsafe(9), 0, 9);\n packet.offset = 4;\n packet.writeInt8(0xfe);\n packet.writeInt16(warnings);\n packet.writeInt16(statusFlags);\n packet._name = 'EOF';\n return packet;\n }\n}\n\nexports.EOF = EOF;\n\nclass Error {\n static toPacket(args, encoding) {\n const length = 13 + Buffer.byteLength(args.message, 'utf8');\n const packet = new Packet(0, Buffer.allocUnsafe(length), 0, length);\n packet.offset = 4;\n packet.writeInt8(0xff);\n packet.writeInt16(args.code);\n // TODO: sql state parameter\n packet.writeString('#_____', encoding);\n packet.writeString(args.message, encoding);\n packet._name = 'Error';\n return packet;\n }\n\n static fromPacket(packet) {\n packet.readInt8(); // marker\n const code = packet.readInt16();\n packet.readString(1, 'ascii'); // sql state marker\n // The SQL state of the ERR_Packet which is always 5 bytes long.\n // https://dev.mysql.com/doc/dev/mysql-server/8.0.11/page_protocol_basic_dt_strings.html#sect_protocol_basic_dt_string_fix\n packet.readString(5, 'ascii'); // sql state (ignore for now)\n const message = packet.readNullTerminatedString('utf8');\n const error = new Error();\n error.message = message;\n error.code = code;\n return error;\n }\n}\n\nexports.Error = Error;\n",
|
|
99
|
+
"'use strict';\n\nconst EventEmitter = require('events').EventEmitter;\nconst Timers = require('timers');\n\nclass Command extends EventEmitter {\n constructor() {\n super();\n this.next = null;\n }\n\n // slow. debug only\n stateName() {\n const state = this.next;\n for (const i in this) {\n if (this[i] === state && i !== 'next') {\n return i;\n }\n }\n return 'unknown name';\n }\n\n execute(packet, connection) {\n if (!this.next) {\n this.next = this.start;\n connection._resetSequenceId();\n }\n if (packet && packet.isError()) {\n const err = packet.asError(connection.clientEncoding);\n err.sql = this.sql || this.query;\n if (this.queryTimeout) {\n Timers.clearTimeout(this.queryTimeout);\n this.queryTimeout = null;\n }\n if (this.onResult) {\n this.onResult(err);\n this.emit('end');\n } else {\n this.emit('error', err);\n this.emit('end');\n }\n return true;\n }\n // TODO: don't return anything from execute, it's ugly and error-prone. Listen for 'end' event in connection\n this.next = this.next(packet, connection);\n if (this.next) {\n return false;\n }\n this.emit('end');\n return true;\n }\n}\n\nmodule.exports = Command;\n",
|
|
100
|
+
"'use strict';\n\nconst PLUGIN_NAME = 'sha256_password';\nconst crypto = require('crypto');\nconst { xorRotating } = require('../auth_41');\nconst Tls = require('tls');\n\nconst REQUEST_SERVER_KEY_PACKET = Buffer.from([1]);\n\nconst STATE_INITIAL = 0;\nconst STATE_WAIT_SERVER_KEY = 1;\nconst STATE_FINAL = -1;\n\nfunction encrypt(password, scramble, key) {\n const stage1 = xorRotating(Buffer.from(`${password}\\0`, 'utf8'), scramble);\n return crypto.publicEncrypt(key, stage1);\n}\n\nmodule.exports =\n (pluginOptions = {}) =>\n ({ connection }) => {\n let state = 0;\n let scramble = null;\n\n const password = connection.config.password;\n\n const authWithKey = (serverKey) => {\n const _password = encrypt(password, scramble, serverKey);\n state = STATE_FINAL;\n return _password;\n };\n\n return (data) => {\n switch (state) {\n case STATE_INITIAL:\n if (\n connection.stream instanceof Tls.TLSSocket &&\n connection.stream.encrypted === true\n ) {\n // We don't need to encrypt passwords over TLS connection\n return Buffer.from(`${password}\\0`, 'utf8');\n }\n\n scramble = data.slice(0, 20);\n // if client provides key we can save one extra roundrip on first connection\n if (pluginOptions.serverPublicKey) {\n return authWithKey(pluginOptions.serverPublicKey);\n }\n\n state = STATE_WAIT_SERVER_KEY;\n return REQUEST_SERVER_KEY_PACKET;\n\n case STATE_WAIT_SERVER_KEY:\n if (pluginOptions.onServerPublicKey) {\n pluginOptions.onServerPublicKey(data);\n }\n return authWithKey(data);\n case STATE_FINAL:\n throw new Error(\n `Unexpected data in AuthMoreData packet received by ${PLUGIN_NAME} plugin in STATE_FINAL state.`\n );\n }\n\n throw new Error(\n `Unexpected data in AuthMoreData packet received by ${PLUGIN_NAME} plugin in state ${state}`\n );\n };\n };\n",
|
|
101
|
+
"'use strict';\n\n// https://mysqlserverteam.com/mysql-8-0-4-new-default-authentication-plugin-caching_sha2_password/\n\nconst PLUGIN_NAME = 'caching_sha2_password';\nconst crypto = require('crypto');\nconst { xor, xorRotating } = require('../auth_41');\n\nconst REQUEST_SERVER_KEY_PACKET = Buffer.from([2]);\nconst FAST_AUTH_SUCCESS_PACKET = Buffer.from([3]);\nconst PERFORM_FULL_AUTHENTICATION_PACKET = Buffer.from([4]);\n\nconst STATE_INITIAL = 0;\nconst STATE_TOKEN_SENT = 1;\nconst STATE_WAIT_SERVER_KEY = 2;\nconst STATE_FINAL = -1;\n\nfunction sha256(msg) {\n const hash = crypto.createHash('sha256');\n hash.update(msg);\n return hash.digest();\n}\n\nfunction calculateToken(password, scramble) {\n if (!password) {\n return Buffer.alloc(0);\n }\n const stage1 = sha256(Buffer.from(password));\n const stage2 = sha256(stage1);\n const stage3 = sha256(Buffer.concat([stage2, scramble]));\n return xor(stage1, stage3);\n}\n\nfunction encrypt(password, scramble, key) {\n const stage1 = xorRotating(Buffer.from(`${password}\\0`, 'utf8'), scramble);\n return crypto.publicEncrypt(\n {\n key,\n padding: crypto.constants.RSA_PKCS1_OAEP_PADDING,\n },\n stage1\n );\n}\n\nmodule.exports =\n (pluginOptions = {}) =>\n ({ connection }) => {\n let state = 0;\n let scramble = null;\n\n const password = connection.config.password;\n\n const authWithKey = (serverKey) => {\n const _password = encrypt(password, scramble, serverKey);\n state = STATE_FINAL;\n return _password;\n };\n\n return (data) => {\n switch (state) {\n case STATE_INITIAL:\n scramble = data.slice(0, 20);\n state = STATE_TOKEN_SENT;\n return calculateToken(password, scramble);\n\n case STATE_TOKEN_SENT:\n if (FAST_AUTH_SUCCESS_PACKET.equals(data)) {\n state = STATE_FINAL;\n return null;\n }\n\n if (PERFORM_FULL_AUTHENTICATION_PACKET.equals(data)) {\n const isSecureConnection =\n typeof pluginOptions.overrideIsSecure === 'undefined'\n ? connection.config.ssl || connection.config.socketPath\n : pluginOptions.overrideIsSecure;\n if (isSecureConnection) {\n state = STATE_FINAL;\n return Buffer.from(`${password}\\0`, 'utf8');\n }\n\n // if client provides key we can save one extra roundrip on first connection\n if (pluginOptions.serverPublicKey) {\n return authWithKey(pluginOptions.serverPublicKey);\n }\n\n state = STATE_WAIT_SERVER_KEY;\n return REQUEST_SERVER_KEY_PACKET;\n }\n throw new Error(\n `Invalid AuthMoreData packet received by ${PLUGIN_NAME} plugin in STATE_TOKEN_SENT state.`\n );\n case STATE_WAIT_SERVER_KEY:\n if (pluginOptions.onServerPublicKey) {\n pluginOptions.onServerPublicKey(data);\n }\n return authWithKey(data);\n case STATE_FINAL:\n throw new Error(\n `Unexpected data in AuthMoreData packet received by ${PLUGIN_NAME} plugin in STATE_FINAL state.`\n );\n }\n\n throw new Error(\n `Unexpected data in AuthMoreData packet received by ${PLUGIN_NAME} plugin in state ${state}`\n );\n };\n };\n",
|
|
102
|
+
"'use strict';\n\n//const PLUGIN_NAME = 'mysql_native_password';\nconst auth41 = require('../auth_41.js');\n\nmodule.exports =\n (pluginOptions) =>\n ({ connection, command }) => {\n const password =\n command.password || pluginOptions.password || connection.config.password;\n const passwordSha1 =\n command.passwordSha1 ||\n pluginOptions.passwordSha1 ||\n connection.config.passwordSha1;\n return (data) => {\n const authPluginData1 = data.slice(0, 8);\n const authPluginData2 = data.slice(8, 20);\n let authToken;\n if (passwordSha1) {\n authToken = auth41.calculateTokenFromPasswordSha(\n passwordSha1,\n authPluginData1,\n authPluginData2\n );\n } else {\n authToken = auth41.calculateToken(\n password,\n authPluginData1,\n authPluginData2\n );\n }\n return authToken;\n };\n };\n",
|
|
103
|
+
"'use strict';\n\nfunction bufferFromStr(str) {\n return Buffer.from(`${str}\\0`);\n}\n\nconst create_mysql_clear_password_plugin = (pluginOptions) =>\n function mysql_clear_password_plugin({ connection, command }) {\n const password =\n command.password || pluginOptions.password || connection.config.password;\n\n return function (/* pluginData */) {\n return bufferFromStr(password);\n };\n };\n\nmodule.exports = create_mysql_clear_password_plugin;\n",
|
|
104
|
+
"// This file was modified by Oracle on July 5, 2021.\n// Errors generated by asynchronous authentication plugins are now being\n// handled and subsequently emitted at the command level.\n// Modifications copyright (c) 2021, Oracle and/or its affiliates.\n\n'use strict';\n\nconst Packets = require('../packets/index.js');\nconst sha256_password = require('../auth_plugins/sha256_password');\nconst caching_sha2_password = require('../auth_plugins/caching_sha2_password.js');\nconst mysql_native_password = require('../auth_plugins/mysql_native_password.js');\nconst mysql_clear_password = require('../auth_plugins/mysql_clear_password.js');\n\nconst standardAuthPlugins = {\n sha256_password: sha256_password({}),\n caching_sha2_password: caching_sha2_password({}),\n mysql_native_password: mysql_native_password({}),\n mysql_clear_password: mysql_clear_password({}),\n};\n\nfunction warnLegacyAuthSwitch() {\n console.warn(\n 'WARNING! authSwitchHandler api is deprecated, please use new authPlugins api'\n );\n}\n\nfunction authSwitchPluginError(error, command) {\n // Authentication errors are fatal\n error.code = 'AUTH_SWITCH_PLUGIN_ERROR';\n error.fatal = true;\n\n command.emit('error', error);\n}\n\nfunction authSwitchRequest(packet, connection, command) {\n const { pluginName, pluginData } =\n Packets.AuthSwitchRequest.fromPacket(packet);\n let authPlugin =\n connection.config.authPlugins && connection.config.authPlugins[pluginName];\n\n // legacy plugin api don't allow to override mysql_native_password\n // if pluginName is mysql_native_password it's using standard auth4.1 auth\n if (\n connection.config.authSwitchHandler &&\n pluginName !== 'mysql_native_password'\n ) {\n const legacySwitchHandler = connection.config.authSwitchHandler;\n warnLegacyAuthSwitch();\n legacySwitchHandler({ pluginName, pluginData }, (err, data) => {\n if (err) {\n return authSwitchPluginError(err, command);\n }\n connection.writePacket(new Packets.AuthSwitchResponse(data).toPacket());\n });\n return;\n }\n if (!authPlugin) {\n authPlugin = standardAuthPlugins[pluginName];\n }\n if (!authPlugin) {\n throw new Error(\n `Server requests authentication using unknown plugin ${pluginName}. See ${'TODO: add plugins doco here'} on how to configure or author authentication plugins.`\n );\n }\n connection._authPlugin = authPlugin({ connection, command });\n Promise.resolve(connection._authPlugin(pluginData))\n .then((data) => {\n if (data) {\n connection.writePacket(new Packets.AuthSwitchResponse(data).toPacket());\n }\n })\n .catch((err) => {\n authSwitchPluginError(err, command);\n });\n}\n\nfunction authSwitchRequestMoreData(packet, connection, command) {\n const { data } = Packets.AuthSwitchRequestMoreData.fromPacket(packet);\n\n if (connection.config.authSwitchHandler) {\n const legacySwitchHandler = connection.config.authSwitchHandler;\n warnLegacyAuthSwitch();\n legacySwitchHandler({ pluginData: data }, (err, data) => {\n if (err) {\n return authSwitchPluginError(err, command);\n }\n connection.writePacket(new Packets.AuthSwitchResponse(data).toPacket());\n });\n return;\n }\n\n if (!connection._authPlugin) {\n throw new Error(\n 'AuthPluginMoreData received but no auth plugin instance found'\n );\n }\n Promise.resolve(connection._authPlugin(data))\n .then((data) => {\n if (data) {\n connection.writePacket(new Packets.AuthSwitchResponse(data).toPacket());\n }\n })\n .catch((err) => {\n authSwitchPluginError(err, command);\n });\n}\n\nmodule.exports = {\n authSwitchRequest,\n authSwitchRequestMoreData,\n};\n",
|
|
105
|
+
"var EventEmitter = require('events').EventEmitter;\nvar util = require('util');\n\nvar DEFAULT_TIMEOUT = 3000;\nvar INIT_ID = 0;\nvar EVENT_CLOSED = 'closed';\nvar EVENT_DRAINED = 'drained';\n\n/**\n * Instance a new queue\n *\n * @param {Number} timeout a global timeout for new queue\n * @class\n * @constructor\n */\nvar SeqQueue = function(timeout) {\n\tEventEmitter.call(this);\n\t\n\tif(timeout && timeout > 0) {\n\t\tthis.timeout = timeout;\n\t} else {\n\t\tthis.timeout = DEFAULT_TIMEOUT;\n\t}\n\t\n\tthis.status = SeqQueueManager.STATUS_IDLE;\n\tthis.curId = INIT_ID;\n\tthis.queue = [];\n};\nutil.inherits(SeqQueue, EventEmitter);\n\n/**\n * Add a task into queue.\n * \n * @param fn new request\n * @param ontimeout callback when task timeout\n * @param timeout timeout for current request. take the global timeout if this is invalid\n * @returns true or false\n */\nSeqQueue.prototype.push = function(fn, ontimeout, timeout) {\n\tif(this.status !== SeqQueueManager.STATUS_IDLE && this.status !== SeqQueueManager.STATUS_BUSY) {\n\t\t//ignore invalid status\n\t\treturn false;\n\t}\n\t\n\tif(typeof fn !== 'function') {\n\t\tthrow new Error('fn should be a function.');\n\t}\n\tthis.queue.push({fn: fn, ontimeout: ontimeout, timeout: timeout});\n\n\tif(this.status === SeqQueueManager.STATUS_IDLE) {\n\t\tthis.status = SeqQueueManager.STATUS_BUSY;\n\t\tvar self = this;\n\t\tprocess.nextTick(function() {\n\t\t\tself._next(self.curId);\n\t\t});\n\t}\n\treturn true;\n};\n\n/**\n * Close queue\n * \n * @param {Boolean} force if true will close the queue immediately else will execute the rest task in queue\n */\nSeqQueue.prototype.close = function(force) {\n\tif(this.status !== SeqQueueManager.STATUS_IDLE && this.status !== SeqQueueManager.STATUS_BUSY) {\n\t\t//ignore invalid status\n\t\treturn;\n\t}\n\t\n\tif(force) {\n\t\tthis.status = SeqQueueManager.STATUS_DRAINED;\n\t\tif(this.timerId) {\n\t\t\tclearTimeout(this.timerId);\n\t\t\tthis.timerId = undefined;\n\t\t}\n\t\tthis.emit(EVENT_DRAINED);\n\t} else {\n\t\tthis.status = SeqQueueManager.STATUS_CLOSED;\n\t\tthis.emit(EVENT_CLOSED);\n\t}\n};\n\n/**\n * Invoke next task\n * \n * @param {String|Number} tid last executed task id\n * @api private\n */\nSeqQueue.prototype._next = function(tid) {\n\tif(tid !== this.curId || this.status !== SeqQueueManager.STATUS_BUSY && this.status !== SeqQueueManager.STATUS_CLOSED) {\n\t\t//ignore invalid next call\n\t\treturn;\n\t}\n\t\n\tif(this.timerId) {\n\t\tclearTimeout(this.timerId);\n\t\tthis.timerId = undefined;\n\t}\n\t\n\tvar task = this.queue.shift();\n\tif(!task) {\n\t\tif(this.status === SeqQueueManager.STATUS_BUSY) {\n\t\t\tthis.status = SeqQueueManager.STATUS_IDLE;\n\t\t\tthis.curId++;\t//modify curId to invalidate timeout task\n\t\t} else {\n\t\t\tthis.status = SeqQueueManager.STATUS_DRAINED;\n\t\t\tthis.emit(EVENT_DRAINED);\n\t\t}\n\t\treturn;\n\t}\n\t\n\tvar self = this;\n\ttask.id = ++this.curId;\n\n\tvar timeout = task.timeout > 0 ? task.timeout : this.timeout;\n\ttimeout = timeout > 0 ? timeout : DEFAULT_TIMEOUT;\n\tthis.timerId = setTimeout(function() {\n\t\tprocess.nextTick(function() {\n\t\t\tself._next(task.id);\n\t\t});\n\t\tself.emit('timeout', task);\n\t\tif(task.ontimeout) {\n\t\t\ttask.ontimeout();\n\t\t}\n\t}, timeout);\n\n\ttry {\n\t\ttask.fn({\n\t\t\tdone: function() {\n\t\t\t\tvar res = task.id === self.curId;\n\t\t\t\tprocess.nextTick(function() {\n\t\t\t\t\tself._next(task.id);\n\t\t\t\t});\n\t\t\t\treturn res;\n\t\t\t}\n\t\t});\n\t} catch(err) {\n\t\tself.emit('error', err, task);\n\t\tprocess.nextTick(function() {\n\t\t\tself._next(task.id);\n\t\t});\n\t}\n};\n\n/**\n * Queue manager.\n * \n * @module\n */\nvar SeqQueueManager = module.exports;\n\n/**\n * Queue status: idle, welcome new tasks\n *\n * @const\n * @type {Number}\n * @memberOf SeqQueueManager\n */\nSeqQueueManager.STATUS_IDLE = 0;\n\n/**\n * Queue status: busy, queue is working for some tasks now\n *\n * @const\n * @type {Number}\n * @memberOf SeqQueueManager\n */\nSeqQueueManager.STATUS_BUSY = 1;\n\n/**\n * Queue status: closed, queue has closed and would not receive task any more \n * \t\t\t\t\tand is processing the remaining tasks now.\n *\n * @const\n * @type {Number}\n * @memberOf SeqQueueManager\n */\nSeqQueueManager.STATUS_CLOSED = 2; \n\n/**\n * Queue status: drained, queue is ready to be destroy\n *\n * @const\n * @type {Number}\n * @memberOf SeqQueueManager\n */\nSeqQueueManager.STATUS_DRAINED = 3;\n\n/**\n * Create Sequence queue\n * \n * @param {Number} timeout a global timeout for the new queue instance\n * @return {Object} new queue instance\n * @memberOf SeqQueueManager\n */\nSeqQueueManager.createQueue = function(timeout) {\n\treturn new SeqQueue(timeout);\n};",
|
|
106
|
+
"'use strict';\n\n// connection mixins\n// implementation of http://dev.mysql.com/doc/internals/en/compression.html\n\nconst zlib = require('zlib');\nconst PacketParser = require('./packet_parser.js');\n\nfunction handleCompressedPacket(packet) {\n // eslint-disable-next-line consistent-this, no-invalid-this\n const connection = this;\n const deflatedLength = packet.readInt24();\n const body = packet.readBuffer();\n\n if (deflatedLength !== 0) {\n connection.inflateQueue.push((task) => {\n zlib.inflate(body, (err, data) => {\n if (err) {\n connection._handleNetworkError(err);\n return;\n }\n connection._bumpCompressedSequenceId(packet.numPackets);\n connection._inflatedPacketsParser.execute(data);\n task.done();\n });\n });\n } else {\n connection.inflateQueue.push((task) => {\n connection._bumpCompressedSequenceId(packet.numPackets);\n connection._inflatedPacketsParser.execute(body);\n task.done();\n });\n }\n}\n\nfunction writeCompressed(buffer) {\n // http://dev.mysql.com/doc/internals/en/example-several-mysql-packets.html\n // note: sending a MySQL Packet of the size 2^24−5 to 2^24−1 via compression\n // leads to at least one extra compressed packet.\n // (this is because \"length of the packet before compression\" need to fit\n // into 3 byte unsigned int. \"length of the packet before compression\" includes\n // 4 byte packet header, hence 2^24−5)\n const MAX_COMPRESSED_LENGTH = 16777210;\n let start;\n if (buffer.length > MAX_COMPRESSED_LENGTH) {\n for (start = 0; start < buffer.length; start += MAX_COMPRESSED_LENGTH) {\n writeCompressed.call(\n // eslint-disable-next-line no-invalid-this\n this,\n buffer.slice(start, start + MAX_COMPRESSED_LENGTH)\n );\n }\n return;\n }\n\n // eslint-disable-next-line no-invalid-this, consistent-this\n const connection = this;\n\n let packetLen = buffer.length;\n const compressHeader = Buffer.allocUnsafe(7);\n\n // seqqueue is used here because zlib async execution is routed via thread pool\n // internally and when we have multiple compressed packets arriving we need\n // to assemble uncompressed result sequentially\n (function (seqId) {\n connection.deflateQueue.push((task) => {\n zlib.deflate(buffer, (err, compressed) => {\n if (err) {\n connection._handleFatalError(err);\n return;\n }\n let compressedLength = compressed.length;\n\n if (compressedLength < packetLen) {\n compressHeader.writeUInt8(compressedLength & 0xff, 0);\n compressHeader.writeUInt16LE(compressedLength >> 8, 1);\n compressHeader.writeUInt8(seqId, 3);\n compressHeader.writeUInt8(packetLen & 0xff, 4);\n compressHeader.writeUInt16LE(packetLen >> 8, 5);\n connection.writeUncompressed(compressHeader);\n connection.writeUncompressed(compressed);\n } else {\n // http://dev.mysql.com/doc/internals/en/uncompressed-payload.html\n // To send an uncompressed payload:\n // - set length of payload before compression to 0\n // - the compressed payload contains the uncompressed payload instead.\n compressedLength = packetLen;\n packetLen = 0;\n compressHeader.writeUInt8(compressedLength & 0xff, 0);\n compressHeader.writeUInt16LE(compressedLength >> 8, 1);\n compressHeader.writeUInt8(seqId, 3);\n compressHeader.writeUInt8(packetLen & 0xff, 4);\n compressHeader.writeUInt16LE(packetLen >> 8, 5);\n connection.writeUncompressed(compressHeader);\n connection.writeUncompressed(buffer);\n }\n task.done();\n });\n });\n })(connection.compressedSequenceId);\n connection._bumpCompressedSequenceId(1);\n}\n\nfunction enableCompression(connection) {\n connection._lastWrittenPacketId = 0;\n connection._lastReceivedPacketId = 0;\n\n connection._handleCompressedPacket = handleCompressedPacket;\n connection._inflatedPacketsParser = new PacketParser((p) => {\n connection.handlePacket(p);\n }, 4);\n connection._inflatedPacketsParser._lastPacket = 0;\n connection.packetParser = new PacketParser((packet) => {\n connection._handleCompressedPacket(packet);\n }, 7);\n\n connection.writeUncompressed = connection.write;\n connection.write = writeCompressed;\n\n const seqqueue = require('seq-queue');\n connection.inflateQueue = seqqueue.createQueue();\n connection.deflateQueue = seqqueue.createQueue();\n}\n\nmodule.exports = {\n enableCompression: enableCompression,\n};\n",
|
|
107
|
+
"// This file was modified by Oracle on June 17, 2021.\n// Handshake errors are now maked as fatal and the corresponding events are\n// emitted in the command instance itself.\n// Modifications copyright (c) 2021, Oracle and/or its affiliates.\n\n// This file was modified by Oracle on September 21, 2021.\n// Handshake workflow now supports additional authentication factors requested\n// by the server.\n// Modifications copyright (c) 2021, Oracle and/or its affiliates.\n\n'use strict';\n\nconst Command = require('./command.js');\nconst Packets = require('../packets/index.js');\nconst ClientConstants = require('../constants/client.js');\nconst CharsetToEncoding = require('../constants/charset_encodings.js');\nconst auth41 = require('../auth_41.js');\n\nfunction flagNames(flags) {\n const res = [];\n for (const c in ClientConstants) {\n if (flags & ClientConstants[c]) {\n res.push(c.replace(/_/g, ' ').toLowerCase());\n }\n }\n return res;\n}\n\nclass ClientHandshake extends Command {\n constructor(clientFlags) {\n super();\n this.handshake = null;\n this.clientFlags = clientFlags;\n this.authenticationFactor = 0;\n }\n\n start() {\n return ClientHandshake.prototype.handshakeInit;\n }\n\n sendSSLRequest(connection) {\n const sslRequest = new Packets.SSLRequest(\n this.clientFlags,\n connection.config.charsetNumber\n );\n connection.writePacket(sslRequest.toPacket());\n }\n\n sendCredentials(connection) {\n if (connection.config.debug) {\n // eslint-disable-next-line\n console.log(\n 'Sending handshake packet: flags:%d=(%s)',\n this.clientFlags,\n flagNames(this.clientFlags).join(', ')\n );\n }\n this.user = connection.config.user;\n this.password = connection.config.password;\n // \"password1\" is an alias to the original \"password\" value\n // to make it easier to integrate multi-factor authentication\n this.password1 = connection.config.password;\n // \"password2\" and \"password3\" are the 2nd and 3rd factor authentication\n // passwords, which can be undefined depending on the authentication\n // plugin being used\n this.password2 = connection.config.password2;\n this.password3 = connection.config.password3;\n this.passwordSha1 = connection.config.passwordSha1;\n this.database = connection.config.database;\n this.authPluginName = this.handshake.authPluginName;\n const handshakeResponse = new Packets.HandshakeResponse({\n flags: this.clientFlags,\n user: this.user,\n database: this.database,\n password: this.password,\n passwordSha1: this.passwordSha1,\n charsetNumber: connection.config.charsetNumber,\n authPluginData1: this.handshake.authPluginData1,\n authPluginData2: this.handshake.authPluginData2,\n compress: connection.config.compress,\n connectAttributes: connection.config.connectAttributes,\n });\n connection.writePacket(handshakeResponse.toPacket());\n }\n\n calculateNativePasswordAuthToken(authPluginData) {\n // TODO: dont split into authPluginData1 and authPluginData2, instead join when 1 & 2 received\n const authPluginData1 = authPluginData.slice(0, 8);\n const authPluginData2 = authPluginData.slice(8, 20);\n let authToken;\n if (this.passwordSha1) {\n authToken = auth41.calculateTokenFromPasswordSha(\n this.passwordSha1,\n authPluginData1,\n authPluginData2\n );\n } else {\n authToken = auth41.calculateToken(\n this.password,\n authPluginData1,\n authPluginData2\n );\n }\n return authToken;\n }\n\n handshakeInit(helloPacket, connection) {\n this.on('error', (e) => {\n connection._fatalError = e;\n connection._protocolError = e;\n });\n this.handshake = Packets.Handshake.fromPacket(helloPacket);\n if (connection.config.debug) {\n // eslint-disable-next-line\n console.log(\n 'Server hello packet: capability flags:%d=(%s)',\n this.handshake.capabilityFlags,\n flagNames(this.handshake.capabilityFlags).join(', ')\n );\n }\n connection.serverCapabilityFlags = this.handshake.capabilityFlags;\n connection.serverEncoding = CharsetToEncoding[this.handshake.characterSet];\n connection.connectionId = this.handshake.connectionId;\n const serverSSLSupport =\n this.handshake.capabilityFlags & ClientConstants.SSL;\n // multi factor authentication is enabled with the\n // \"MULTI_FACTOR_AUTHENTICATION\" capability and should only be used if it\n // is supported by the server\n const multiFactorAuthentication =\n this.handshake.capabilityFlags &\n ClientConstants.MULTI_FACTOR_AUTHENTICATION;\n this.clientFlags = this.clientFlags | multiFactorAuthentication;\n // use compression only if requested by client and supported by server\n connection.config.compress =\n connection.config.compress &&\n this.handshake.capabilityFlags & ClientConstants.COMPRESS;\n this.clientFlags = this.clientFlags | connection.config.compress;\n if (connection.config.ssl) {\n // client requires SSL but server does not support it\n if (!serverSSLSupport) {\n const err = new Error('Server does not support secure connection');\n err.code = 'HANDSHAKE_NO_SSL_SUPPORT';\n err.fatal = true;\n this.emit('error', err);\n return false;\n }\n // send ssl upgrade request and immediately upgrade connection to secure\n this.clientFlags |= ClientConstants.SSL;\n this.sendSSLRequest(connection);\n connection.startTLS((err) => {\n // after connection is secure\n if (err) {\n // SSL negotiation error are fatal\n err.code = 'HANDSHAKE_SSL_ERROR';\n err.fatal = true;\n this.emit('error', err);\n return;\n }\n // rest of communication is encrypted\n this.sendCredentials(connection);\n });\n } else {\n this.sendCredentials(connection);\n }\n if (multiFactorAuthentication) {\n // if the server supports multi-factor authentication, we enable it in\n // the client\n this.authenticationFactor = 1;\n }\n return ClientHandshake.prototype.handshakeResult;\n }\n\n handshakeResult(packet, connection) {\n const marker = packet.peekByte();\n // packet can be OK_Packet, ERR_Packet, AuthSwitchRequest, AuthNextFactor\n // or AuthMoreData\n if (marker === 0xfe || marker === 1 || marker === 0x02) {\n const authSwitch = require('./auth_switch');\n try {\n if (marker === 1) {\n authSwitch.authSwitchRequestMoreData(packet, connection, this);\n } else {\n // if authenticationFactor === 0, it means the server does not support\n // the multi-factor authentication capability\n if (this.authenticationFactor !== 0) {\n // if we are past the first authentication factor, we should use the\n // corresponding password (if there is one)\n connection.config.password =\n this[`password${this.authenticationFactor}`];\n // update the current authentication factor\n this.authenticationFactor += 1;\n }\n // if marker === 0x02, it means it is an AuthNextFactor packet,\n // which is similar in structure to an AuthSwitchRequest packet,\n // so, we can use it directly\n authSwitch.authSwitchRequest(packet, connection, this);\n }\n return ClientHandshake.prototype.handshakeResult;\n } catch (err) {\n // Authentication errors are fatal\n err.code = 'AUTH_SWITCH_PLUGIN_ERROR';\n err.fatal = true;\n\n if (this.onResult) {\n this.onResult(err);\n } else {\n this.emit('error', err);\n }\n return null;\n }\n }\n if (marker !== 0) {\n const err = new Error('Unexpected packet during handshake phase');\n // Unknown handshake errors are fatal\n err.code = 'HANDSHAKE_UNKNOWN_ERROR';\n err.fatal = true;\n\n if (this.onResult) {\n this.onResult(err);\n } else {\n this.emit('error', err);\n }\n return null;\n }\n // this should be called from ClientHandshake command only\n // and skipped when called from ChangeUser command\n if (!connection.authorized) {\n connection.authorized = true;\n if (connection.config.compress) {\n const enableCompression =\n require('../compressed_protocol.js').enableCompression;\n enableCompression(connection);\n }\n }\n if (this.onResult) {\n this.onResult(null);\n }\n return null;\n }\n}\nmodule.exports = ClientHandshake;\n",
|
|
108
|
+
"'use strict';\n\nconst CommandCode = require('../constants/commands.js');\nconst Errors = require('../constants/errors.js');\n\nconst Command = require('./command.js');\nconst Packets = require('../packets/index.js');\n\nclass ServerHandshake extends Command {\n constructor(args) {\n super();\n this.args = args;\n /*\n this.protocolVersion = args.protocolVersion || 10;\n this.serverVersion = args.serverVersion;\n this.connectionId = args.connectionId,\n this.statusFlags = args.statusFlags,\n this.characterSet = args.characterSet,\n this.capabilityFlags = args.capabilityFlags || 512;\n */\n }\n\n start(packet, connection) {\n const serverHelloPacket = new Packets.Handshake(this.args);\n this.serverHello = serverHelloPacket;\n serverHelloPacket.setScrambleData((err) => {\n if (err) {\n connection.emit('error', new Error('Error generating random bytes'));\n return;\n }\n connection.writePacket(serverHelloPacket.toPacket(0));\n });\n return ServerHandshake.prototype.readClientReply;\n }\n\n readClientReply(packet, connection) {\n // check auth here\n const clientHelloReply = Packets.HandshakeResponse.fromPacket(packet);\n // TODO check we don't have something similar already\n connection.clientHelloReply = clientHelloReply;\n if (this.args.authCallback) {\n this.args.authCallback(\n {\n user: clientHelloReply.user,\n database: clientHelloReply.database,\n address: connection.stream.remoteAddress,\n authPluginData1: this.serverHello.authPluginData1,\n authPluginData2: this.serverHello.authPluginData2,\n authToken: clientHelloReply.authToken,\n },\n (err, mysqlError) => {\n // if (err)\n if (!mysqlError) {\n connection.writeOk();\n } else {\n // TODO create constants / errorToCode\n // 1045 = ER_ACCESS_DENIED_ERROR\n connection.writeError({\n message: mysqlError.message || '',\n code: mysqlError.code || 1045,\n });\n connection.close();\n }\n }\n );\n } else {\n connection.writeOk();\n }\n return ServerHandshake.prototype.dispatchCommands;\n }\n\n _isStatement(query, name) {\n const firstWord = query.split(' ')[0].toUpperCase();\n return firstWord === name;\n }\n\n dispatchCommands(packet, connection) {\n // command from client to server\n let knownCommand = true;\n const encoding = connection.clientHelloReply.encoding;\n const commandCode = packet.readInt8();\n switch (commandCode) {\n case CommandCode.STMT_PREPARE:\n if (connection.listeners('stmt_prepare').length) {\n const query = packet.readString(undefined, encoding);\n connection.emit('stmt_prepare', query);\n } else {\n connection.writeError({\n code: Errors.HA_ERR_INTERNAL_ERROR,\n message: 'No query handler for prepared statements.',\n });\n }\n break;\n case CommandCode.STMT_EXECUTE:\n if (connection.listeners('stmt_execute').length) {\n const { stmtId, flags, iterationCount, values } =\n Packets.Execute.fromPacket(packet, encoding);\n connection.emit(\n 'stmt_execute',\n stmtId,\n flags,\n iterationCount,\n values\n );\n } else {\n connection.writeError({\n code: Errors.HA_ERR_INTERNAL_ERROR,\n message: 'No query handler for execute statements.',\n });\n }\n break;\n case CommandCode.QUIT:\n if (connection.listeners('quit').length) {\n connection.emit('quit');\n } else {\n connection.stream.end();\n }\n break;\n case CommandCode.INIT_DB:\n if (connection.listeners('init_db').length) {\n const schemaName = packet.readString(undefined, encoding);\n connection.emit('init_db', schemaName);\n } else {\n connection.writeOk();\n }\n break;\n case CommandCode.QUERY:\n if (connection.listeners('query').length) {\n const query = packet.readString(undefined, encoding);\n if (\n this._isStatement(query, 'PREPARE') ||\n this._isStatement(query, 'SET')\n ) {\n connection.emit('stmt_prepare', query);\n } else if (this._isStatement(query, 'EXECUTE')) {\n connection.emit('stmt_execute', null, null, null, null, query);\n } else connection.emit('query', query);\n } else {\n connection.writeError({\n code: Errors.HA_ERR_INTERNAL_ERROR,\n message: 'No query handler',\n });\n }\n break;\n case CommandCode.FIELD_LIST:\n if (connection.listeners('field_list').length) {\n const table = packet.readNullTerminatedString(encoding);\n const fields = packet.readString(undefined, encoding);\n connection.emit('field_list', table, fields);\n } else {\n connection.writeError({\n code: Errors.ER_WARN_DEPRECATED_SYNTAX,\n message:\n 'As of MySQL 5.7.11, COM_FIELD_LIST is deprecated and will be removed in a future version of MySQL.',\n });\n }\n break;\n case CommandCode.PING:\n if (connection.listeners('ping').length) {\n connection.emit('ping');\n } else {\n connection.writeOk();\n }\n break;\n default:\n knownCommand = false;\n }\n if (connection.listeners('packet').length) {\n connection.emit('packet', packet.clone(), knownCommand, commandCode);\n } else if (!knownCommand) {\n // eslint-disable-next-line no-console\n console.log('Unknown command:', commandCode);\n }\n return ServerHandshake.prototype.dispatchCommands;\n }\n}\n\nmodule.exports = ServerHandshake;\n\n// TODO: implement server-side 4.1 authentication\n/*\n4.1 authentication: (http://bazaar.launchpad.net/~mysql/mysql-server/5.5/view/head:/sql/password.c)\n\n SERVER: public_seed=create_random_string()\n send(public_seed)\n\n CLIENT: recv(public_seed)\n hash_stage1=sha1(\"password\")\n hash_stage2=sha1(hash_stage1)\n reply=xor(hash_stage1, sha1(public_seed,hash_stage2)\n\n // this three steps are done in scramble()\n\n send(reply)\n\n\n SERVER: recv(reply)\n hash_stage1=xor(reply, sha1(public_seed,hash_stage2))\n candidate_hash2=sha1(hash_stage1)\n check(candidate_hash2==hash_stage2)\n\nserver stores sha1(sha1(password)) ( hash_stag2)\n*/\n",
|
|
109
|
+
"'use strict';\n\nexports.BIG5_CHINESE_CI = 1;\nexports.LATIN2_CZECH_CS = 2;\nexports.DEC8_SWEDISH_CI = 3;\nexports.CP850_GENERAL_CI = 4;\nexports.LATIN1_GERMAN1_CI = 5;\nexports.HP8_ENGLISH_CI = 6;\nexports.KOI8R_GENERAL_CI = 7;\nexports.LATIN1_SWEDISH_CI = 8;\nexports.LATIN2_GENERAL_CI = 9;\nexports.SWE7_SWEDISH_CI = 10;\nexports.ASCII_GENERAL_CI = 11;\nexports.UJIS_JAPANESE_CI = 12;\nexports.SJIS_JAPANESE_CI = 13;\nexports.CP1251_BULGARIAN_CI = 14;\nexports.LATIN1_DANISH_CI = 15;\nexports.HEBREW_GENERAL_CI = 16;\nexports.TIS620_THAI_CI = 18;\nexports.EUCKR_KOREAN_CI = 19;\nexports.LATIN7_ESTONIAN_CS = 20;\nexports.LATIN2_HUNGARIAN_CI = 21;\nexports.KOI8U_GENERAL_CI = 22;\nexports.CP1251_UKRAINIAN_CI = 23;\nexports.GB2312_CHINESE_CI = 24;\nexports.GREEK_GENERAL_CI = 25;\nexports.CP1250_GENERAL_CI = 26;\nexports.LATIN2_CROATIAN_CI = 27;\nexports.GBK_CHINESE_CI = 28;\nexports.CP1257_LITHUANIAN_CI = 29;\nexports.LATIN5_TURKISH_CI = 30;\nexports.LATIN1_GERMAN2_CI = 31;\nexports.ARMSCII8_GENERAL_CI = 32;\nexports.UTF8_GENERAL_CI = 33;\nexports.CP1250_CZECH_CS = 34;\nexports.UCS2_GENERAL_CI = 35;\nexports.CP866_GENERAL_CI = 36;\nexports.KEYBCS2_GENERAL_CI = 37;\nexports.MACCE_GENERAL_CI = 38;\nexports.MACROMAN_GENERAL_CI = 39;\nexports.CP852_GENERAL_CI = 40;\nexports.LATIN7_GENERAL_CI = 41;\nexports.LATIN7_GENERAL_CS = 42;\nexports.MACCE_BIN = 43;\nexports.CP1250_CROATIAN_CI = 44;\nexports.UTF8MB4_GENERAL_CI = 45;\nexports.UTF8MB4_BIN = 46;\nexports.LATIN1_BIN = 47;\nexports.LATIN1_GENERAL_CI = 48;\nexports.LATIN1_GENERAL_CS = 49;\nexports.CP1251_BIN = 50;\nexports.CP1251_GENERAL_CI = 51;\nexports.CP1251_GENERAL_CS = 52;\nexports.MACROMAN_BIN = 53;\nexports.UTF16_GENERAL_CI = 54;\nexports.UTF16_BIN = 55;\nexports.UTF16LE_GENERAL_CI = 56;\nexports.CP1256_GENERAL_CI = 57;\nexports.CP1257_BIN = 58;\nexports.CP1257_GENERAL_CI = 59;\nexports.UTF32_GENERAL_CI = 60;\nexports.UTF32_BIN = 61;\nexports.UTF16LE_BIN = 62;\nexports.BINARY = 63;\nexports.ARMSCII8_BIN = 64;\nexports.ASCII_BIN = 65;\nexports.CP1250_BIN = 66;\nexports.CP1256_BIN = 67;\nexports.CP866_BIN = 68;\nexports.DEC8_BIN = 69;\nexports.GREEK_BIN = 70;\nexports.HEBREW_BIN = 71;\nexports.HP8_BIN = 72;\nexports.KEYBCS2_BIN = 73;\nexports.KOI8R_BIN = 74;\nexports.KOI8U_BIN = 75;\nexports.UTF8_TOLOWER_CI = 76;\nexports.LATIN2_BIN = 77;\nexports.LATIN5_BIN = 78;\nexports.LATIN7_BIN = 79;\nexports.CP850_BIN = 80;\nexports.CP852_BIN = 81;\nexports.SWE7_BIN = 82;\nexports.UTF8_BIN = 83;\nexports.BIG5_BIN = 84;\nexports.EUCKR_BIN = 85;\nexports.GB2312_BIN = 86;\nexports.GBK_BIN = 87;\nexports.SJIS_BIN = 88;\nexports.TIS620_BIN = 89;\nexports.UCS2_BIN = 90;\nexports.UJIS_BIN = 91;\nexports.GEOSTD8_GENERAL_CI = 92;\nexports.GEOSTD8_BIN = 93;\nexports.LATIN1_SPANISH_CI = 94;\nexports.CP932_JAPANESE_CI = 95;\nexports.CP932_BIN = 96;\nexports.EUCJPMS_JAPANESE_CI = 97;\nexports.EUCJPMS_BIN = 98;\nexports.CP1250_POLISH_CI = 99;\nexports.UTF16_UNICODE_CI = 101;\nexports.UTF16_ICELANDIC_CI = 102;\nexports.UTF16_LATVIAN_CI = 103;\nexports.UTF16_ROMANIAN_CI = 104;\nexports.UTF16_SLOVENIAN_CI = 105;\nexports.UTF16_POLISH_CI = 106;\nexports.UTF16_ESTONIAN_CI = 107;\nexports.UTF16_SPANISH_CI = 108;\nexports.UTF16_SWEDISH_CI = 109;\nexports.UTF16_TURKISH_CI = 110;\nexports.UTF16_CZECH_CI = 111;\nexports.UTF16_DANISH_CI = 112;\nexports.UTF16_LITHUANIAN_CI = 113;\nexports.UTF16_SLOVAK_CI = 114;\nexports.UTF16_SPANISH2_CI = 115;\nexports.UTF16_ROMAN_CI = 116;\nexports.UTF16_PERSIAN_CI = 117;\nexports.UTF16_ESPERANTO_CI = 118;\nexports.UTF16_HUNGARIAN_CI = 119;\nexports.UTF16_SINHALA_CI = 120;\nexports.UTF16_GERMAN2_CI = 121;\nexports.UTF16_CROATIAN_CI = 122;\nexports.UTF16_UNICODE_520_CI = 123;\nexports.UTF16_VIETNAMESE_CI = 124;\nexports.UCS2_UNICODE_CI = 128;\nexports.UCS2_ICELANDIC_CI = 129;\nexports.UCS2_LATVIAN_CI = 130;\nexports.UCS2_ROMANIAN_CI = 131;\nexports.UCS2_SLOVENIAN_CI = 132;\nexports.UCS2_POLISH_CI = 133;\nexports.UCS2_ESTONIAN_CI = 134;\nexports.UCS2_SPANISH_CI = 135;\nexports.UCS2_SWEDISH_CI = 136;\nexports.UCS2_TURKISH_CI = 137;\nexports.UCS2_CZECH_CI = 138;\nexports.UCS2_DANISH_CI = 139;\nexports.UCS2_LITHUANIAN_CI = 140;\nexports.UCS2_SLOVAK_CI = 141;\nexports.UCS2_SPANISH2_CI = 142;\nexports.UCS2_ROMAN_CI = 143;\nexports.UCS2_PERSIAN_CI = 144;\nexports.UCS2_ESPERANTO_CI = 145;\nexports.UCS2_HUNGARIAN_CI = 146;\nexports.UCS2_SINHALA_CI = 147;\nexports.UCS2_GERMAN2_CI = 148;\nexports.UCS2_CROATIAN_CI = 149;\nexports.UCS2_UNICODE_520_CI = 150;\nexports.UCS2_VIETNAMESE_CI = 151;\nexports.UCS2_GENERAL_MYSQL500_CI = 159;\nexports.UTF32_UNICODE_CI = 160;\nexports.UTF32_ICELANDIC_CI = 161;\nexports.UTF32_LATVIAN_CI = 162;\nexports.UTF32_ROMANIAN_CI = 163;\nexports.UTF32_SLOVENIAN_CI = 164;\nexports.UTF32_POLISH_CI = 165;\nexports.UTF32_ESTONIAN_CI = 166;\nexports.UTF32_SPANISH_CI = 167;\nexports.UTF32_SWEDISH_CI = 168;\nexports.UTF32_TURKISH_CI = 169;\nexports.UTF32_CZECH_CI = 170;\nexports.UTF32_DANISH_CI = 171;\nexports.UTF32_LITHUANIAN_CI = 172;\nexports.UTF32_SLOVAK_CI = 173;\nexports.UTF32_SPANISH2_CI = 174;\nexports.UTF32_ROMAN_CI = 175;\nexports.UTF32_PERSIAN_CI = 176;\nexports.UTF32_ESPERANTO_CI = 177;\nexports.UTF32_HUNGARIAN_CI = 178;\nexports.UTF32_SINHALA_CI = 179;\nexports.UTF32_GERMAN2_CI = 180;\nexports.UTF32_CROATIAN_CI = 181;\nexports.UTF32_UNICODE_520_CI = 182;\nexports.UTF32_VIETNAMESE_CI = 183;\nexports.UTF8_UNICODE_CI = 192;\nexports.UTF8_ICELANDIC_CI = 193;\nexports.UTF8_LATVIAN_CI = 194;\nexports.UTF8_ROMANIAN_CI = 195;\nexports.UTF8_SLOVENIAN_CI = 196;\nexports.UTF8_POLISH_CI = 197;\nexports.UTF8_ESTONIAN_CI = 198;\nexports.UTF8_SPANISH_CI = 199;\nexports.UTF8_SWEDISH_CI = 200;\nexports.UTF8_TURKISH_CI = 201;\nexports.UTF8_CZECH_CI = 202;\nexports.UTF8_DANISH_CI = 203;\nexports.UTF8_LITHUANIAN_CI = 204;\nexports.UTF8_SLOVAK_CI = 205;\nexports.UTF8_SPANISH2_CI = 206;\nexports.UTF8_ROMAN_CI = 207;\nexports.UTF8_PERSIAN_CI = 208;\nexports.UTF8_ESPERANTO_CI = 209;\nexports.UTF8_HUNGARIAN_CI = 210;\nexports.UTF8_SINHALA_CI = 211;\nexports.UTF8_GERMAN2_CI = 212;\nexports.UTF8_CROATIAN_CI = 213;\nexports.UTF8_UNICODE_520_CI = 214;\nexports.UTF8_VIETNAMESE_CI = 215;\nexports.UTF8_GENERAL_MYSQL500_CI = 223;\nexports.UTF8MB4_UNICODE_CI = 224;\nexports.UTF8MB4_ICELANDIC_CI = 225;\nexports.UTF8MB4_LATVIAN_CI = 226;\nexports.UTF8MB4_ROMANIAN_CI = 227;\nexports.UTF8MB4_SLOVENIAN_CI = 228;\nexports.UTF8MB4_POLISH_CI = 229;\nexports.UTF8MB4_ESTONIAN_CI = 230;\nexports.UTF8MB4_SPANISH_CI = 231;\nexports.UTF8MB4_SWEDISH_CI = 232;\nexports.UTF8MB4_TURKISH_CI = 233;\nexports.UTF8MB4_CZECH_CI = 234;\nexports.UTF8MB4_DANISH_CI = 235;\nexports.UTF8MB4_LITHUANIAN_CI = 236;\nexports.UTF8MB4_SLOVAK_CI = 237;\nexports.UTF8MB4_SPANISH2_CI = 238;\nexports.UTF8MB4_ROMAN_CI = 239;\nexports.UTF8MB4_PERSIAN_CI = 240;\nexports.UTF8MB4_ESPERANTO_CI = 241;\nexports.UTF8MB4_HUNGARIAN_CI = 242;\nexports.UTF8MB4_SINHALA_CI = 243;\nexports.UTF8MB4_GERMAN2_CI = 244;\nexports.UTF8MB4_CROATIAN_CI = 245;\nexports.UTF8MB4_UNICODE_520_CI = 246;\nexports.UTF8MB4_VIETNAMESE_CI = 247;\nexports.GB18030_CHINESE_CI = 248;\nexports.GB18030_BIN = 249;\nexports.GB18030_UNICODE_520_CI = 250;\nexports.UTF8_GENERAL50_CI = 253; // deprecated\nexports.UTF8MB4_0900_AI_CI = 255;\nexports.UTF8MB4_DE_PB_0900_AI_CI = 256;\nexports.UTF8MB4_IS_0900_AI_CI = 257;\nexports.UTF8MB4_LV_0900_AI_CI = 258;\nexports.UTF8MB4_RO_0900_AI_CI = 259;\nexports.UTF8MB4_SL_0900_AI_CI = 260;\nexports.UTF8MB4_PL_0900_AI_CI = 261;\nexports.UTF8MB4_ET_0900_AI_CI = 262;\nexports.UTF8MB4_ES_0900_AI_CI = 263;\nexports.UTF8MB4_SV_0900_AI_CI = 264;\nexports.UTF8MB4_TR_0900_AI_CI = 265;\nexports.UTF8MB4_CS_0900_AI_CI = 266;\nexports.UTF8MB4_DA_0900_AI_CI = 267;\nexports.UTF8MB4_LT_0900_AI_CI = 268;\nexports.UTF8MB4_SK_0900_AI_CI = 269;\nexports.UTF8MB4_ES_TRAD_0900_AI_CI = 270;\nexports.UTF8MB4_LA_0900_AI_CI = 271;\nexports.UTF8MB4_EO_0900_AI_CI = 273;\nexports.UTF8MB4_HU_0900_AI_CI = 274;\nexports.UTF8MB4_HR_0900_AI_CI = 275;\nexports.UTF8MB4_VI_0900_AI_CI = 277;\nexports.UTF8MB4_0900_AS_CS = 278;\nexports.UTF8MB4_DE_PB_0900_AS_CS = 279;\nexports.UTF8MB4_IS_0900_AS_CS = 280;\nexports.UTF8MB4_LV_0900_AS_CS = 281;\nexports.UTF8MB4_RO_0900_AS_CS = 282;\nexports.UTF8MB4_SL_0900_AS_CS = 283;\nexports.UTF8MB4_PL_0900_AS_CS = 284;\nexports.UTF8MB4_ET_0900_AS_CS = 285;\nexports.UTF8MB4_ES_0900_AS_CS = 286;\nexports.UTF8MB4_SV_0900_AS_CS = 287;\nexports.UTF8MB4_TR_0900_AS_CS = 288;\nexports.UTF8MB4_CS_0900_AS_CS = 289;\nexports.UTF8MB4_DA_0900_AS_CS = 290;\nexports.UTF8MB4_LT_0900_AS_CS = 291;\nexports.UTF8MB4_SK_0900_AS_CS = 292;\nexports.UTF8MB4_ES_TRAD_0900_AS_CS = 293;\nexports.UTF8MB4_LA_0900_AS_CS = 294;\nexports.UTF8MB4_EO_0900_AS_CS = 296;\nexports.UTF8MB4_HU_0900_AS_CS = 297;\nexports.UTF8MB4_HR_0900_AS_CS = 298;\nexports.UTF8MB4_VI_0900_AS_CS = 300;\nexports.UTF8MB4_JA_0900_AS_CS = 303;\nexports.UTF8MB4_JA_0900_AS_CS_KS = 304;\nexports.UTF8MB4_0900_AS_CI = 305;\nexports.UTF8MB4_RU_0900_AI_CI = 306;\nexports.UTF8MB4_RU_0900_AS_CS = 307;\nexports.UTF8MB4_ZH_0900_AS_CS = 308;\nexports.UTF8MB4_0900_BIN = 309;\n\n// short aliases\nexports.BIG5 = exports.BIG5_CHINESE_CI;\nexports.DEC8 = exports.DEC8_SWEDISH_CI;\nexports.CP850 = exports.CP850_GENERAL_CI;\nexports.HP8 = exports.HP8_ENGLISH_CI;\nexports.KOI8R = exports.KOI8R_GENERAL_CI;\nexports.LATIN1 = exports.LATIN1_SWEDISH_CI;\nexports.LATIN2 = exports.LATIN2_GENERAL_CI;\nexports.SWE7 = exports.SWE7_SWEDISH_CI;\nexports.ASCII = exports.ASCII_GENERAL_CI;\nexports.UJIS = exports.UJIS_JAPANESE_CI;\nexports.SJIS = exports.SJIS_JAPANESE_CI;\nexports.HEBREW = exports.HEBREW_GENERAL_CI;\nexports.TIS620 = exports.TIS620_THAI_CI;\nexports.EUCKR = exports.EUCKR_KOREAN_CI;\nexports.KOI8U = exports.KOI8U_GENERAL_CI;\nexports.GB2312 = exports.GB2312_CHINESE_CI;\nexports.GREEK = exports.GREEK_GENERAL_CI;\nexports.CP1250 = exports.CP1250_GENERAL_CI;\nexports.GBK = exports.GBK_CHINESE_CI;\nexports.LATIN5 = exports.LATIN5_TURKISH_CI;\nexports.ARMSCII8 = exports.ARMSCII8_GENERAL_CI;\nexports.UTF8 = exports.UTF8_GENERAL_CI;\nexports.UCS2 = exports.UCS2_GENERAL_CI;\nexports.CP866 = exports.CP866_GENERAL_CI;\nexports.KEYBCS2 = exports.KEYBCS2_GENERAL_CI;\nexports.MACCE = exports.MACCE_GENERAL_CI;\nexports.MACROMAN = exports.MACROMAN_GENERAL_CI;\nexports.CP852 = exports.CP852_GENERAL_CI;\nexports.LATIN7 = exports.LATIN7_GENERAL_CI;\nexports.UTF8MB4 = exports.UTF8MB4_GENERAL_CI;\nexports.CP1251 = exports.CP1251_GENERAL_CI;\nexports.UTF16 = exports.UTF16_GENERAL_CI;\nexports.UTF16LE = exports.UTF16LE_GENERAL_CI;\nexports.CP1256 = exports.CP1256_GENERAL_CI;\nexports.CP1257 = exports.CP1257_GENERAL_CI;\nexports.UTF32 = exports.UTF32_GENERAL_CI;\nexports.CP932 = exports.CP932_JAPANESE_CI;\nexports.EUCJPMS = exports.EUCJPMS_JAPANESE_CI;\nexports.GB18030 = exports.GB18030_CHINESE_CI;\nexports.GEOSTD8 = exports.GEOSTD8_GENERAL_CI;\n",
|
|
110
|
+
"'use strict';\n\n/*\n\n this seems to be not only shorter, but faster than\n string.replace(/\\\\/g, '\\\\\\\\').\n replace(/\\u0008/g, '\\\\b').\n replace(/\\t/g, '\\\\t').\n replace(/\\n/g, '\\\\n').\n replace(/\\f/g, '\\\\f').\n replace(/\\r/g, '\\\\r').\n replace(/'/g, '\\\\\\'').\n replace(/\"/g, '\\\\\"');\n or string.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, \"\\\\$&\")\n see http://jsperf.com/string-escape-regexp-vs-json-stringify\n */\nfunction srcEscape(str) {\n return JSON.stringify({\n [str]: 1,\n }).slice(1, -3);\n}\n\nexports.srcEscape = srcEscape;\n\nlet highlightFn;\nlet cardinalRecommended = false;\ntry {\n // the purpose of this is to prevent projects using Webpack from displaying a warning during runtime if cardinal is not a dependency\n const REQUIRE_TERMINATOR = '';\n highlightFn = require(`cardinal${REQUIRE_TERMINATOR}`).highlight;\n} catch (err) {\n highlightFn = (text) => {\n if (!cardinalRecommended) {\n // eslint-disable-next-line no-console\n console.log('For nicer debug output consider install cardinal@^2.0.0');\n cardinalRecommended = true;\n }\n return text;\n };\n}\n\n/**\n * Prints debug message with code frame, will try to use `cardinal` if available.\n */\nfunction printDebugWithCode(msg, code) {\n // eslint-disable-next-line no-console\n console.log(`\\n\\n${msg}:\\n`);\n // eslint-disable-next-line no-console\n console.log(`${highlightFn(code)}\\n`);\n}\n\nexports.printDebugWithCode = printDebugWithCode;\n\n/**\n * checks whether the `type` is in the `list`\n */\nfunction typeMatch(type, list, Types) {\n if (Array.isArray(list)) {\n return list.some((t) => type === Types[t]);\n }\n\n return !!list;\n}\n\nexports.typeMatch = typeMatch;\n\nconst privateObjectProps = new Set([\n '__defineGetter__',\n '__defineSetter__',\n '__lookupGetter__',\n '__lookupSetter__',\n '__proto__',\n]);\n\nexports.privateObjectProps = privateObjectProps;\n\nconst fieldEscape = (field, isEval = true) => {\n if (privateObjectProps.has(field)) {\n throw new Error(\n `The field name (${field}) can't be the same as an object's private property.`\n );\n }\n\n return isEval ? srcEscape(field) : field;\n};\nexports.fieldEscape = fieldEscape;\n",
|
|
111
|
+
"\"use strict\"\nfunction isProperty(str) {\n return /^[$A-Z\\_a-z\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05d0-\\u05ea\\u05f0-\\u05f2\\u0620-\\u064a\\u066e\\u066f\\u0671-\\u06d3\\u06d5\\u06e5\\u06e6\\u06ee\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u08a0\\u08a2-\\u08ac\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097f\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc\\u09dd\\u09df-\\u09e1\\u09f0\\u09f1\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0\\u0ae1\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c33\\u0c35-\\u0c39\\u0c3d\\u0c58\\u0c59\\u0c60\\u0c61\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d05-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d60\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32\\u0e33\\u0e40-\\u0e46\\u0e81\\u0e82\\u0e84\\u0e87\\u0e88\\u0e8a\\u0e8d\\u0e94-\\u0e97\\u0e99-\\u0e9f\\u0ea1-\\u0ea3\\u0ea5\\u0ea7\\u0eaa\\u0eab\\u0ead-\\u0eb0\\u0eb2\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0edc-\\u0edf\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u1000-\\u102a\\u103f\\u1050-\\u1055\\u105a-\\u105d\\u1061\\u1065\\u1066\\u106e-\\u1070\\u1075-\\u1081\\u108e\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f4\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f0\\u1700-\\u170c\\u170e-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1877\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191c\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19c1-\\u19c7\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4b\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1ce9-\\u1cec\\u1cee-\\u1cf1\\u1cf5\\u1cf6\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2119-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u212d\\u212f-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\u2ce4\\u2ceb-\\u2cee\\u2cf2\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u2e2f\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309d-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312d\\u3131-\\u318e\\u31a0-\\u31ba\\u31f0-\\u31ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua697\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua78e\\ua790-\\ua793\\ua7a0-\\ua7aa\\ua7f8-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa60-\\uaa76\\uaa7a\\uaa80-\\uaaaf\\uaab1\\uaab5\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaea\\uaaf2-\\uaaf4\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uabc0-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc][$A-Z\\_a-z\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05d0-\\u05ea\\u05f0-\\u05f2\\u0620-\\u064a\\u066e\\u066f\\u0671-\\u06d3\\u06d5\\u06e5\\u06e6\\u06ee\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u08a0\\u08a2-\\u08ac\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097f\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc\\u09dd\\u09df-\\u09e1\\u09f0\\u09f1\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0\\u0ae1\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c33\\u0c35-\\u0c39\\u0c3d\\u0c58\\u0c59\\u0c60\\u0c61\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d05-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d60\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32\\u0e33\\u0e40-\\u0e46\\u0e81\\u0e82\\u0e84\\u0e87\\u0e88\\u0e8a\\u0e8d\\u0e94-\\u0e97\\u0e99-\\u0e9f\\u0ea1-\\u0ea3\\u0ea5\\u0ea7\\u0eaa\\u0eab\\u0ead-\\u0eb0\\u0eb2\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0edc-\\u0edf\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u1000-\\u102a\\u103f\\u1050-\\u1055\\u105a-\\u105d\\u1061\\u1065\\u1066\\u106e-\\u1070\\u1075-\\u1081\\u108e\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f4\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f0\\u1700-\\u170c\\u170e-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1877\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191c\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19c1-\\u19c7\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4b\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1ce9-\\u1cec\\u1cee-\\u1cf1\\u1cf5\\u1cf6\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2119-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u212d\\u212f-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\u2ce4\\u2ceb-\\u2cee\\u2cf2\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u2e2f\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309d-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312d\\u3131-\\u318e\\u31a0-\\u31ba\\u31f0-\\u31ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua697\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua78e\\ua790-\\ua793\\ua7a0-\\ua7aa\\ua7f8-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa60-\\uaa76\\uaa7a\\uaa80-\\uaaaf\\uaab1\\uaab5\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaea\\uaaf2-\\uaaf4\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uabc0-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc0-9\\u0300-\\u036f\\u0483-\\u0487\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u0669\\u0670\\u06d6-\\u06dc\\u06df-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u06f0-\\u06f9\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07c0-\\u07c9\\u07eb-\\u07f3\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0859-\\u085b\\u08e4-\\u08fe\\u0900-\\u0903\\u093a-\\u093c\\u093e-\\u094f\\u0951-\\u0957\\u0962\\u0963\\u0966-\\u096f\\u0981-\\u0983\\u09bc\\u09be-\\u09c4\\u09c7\\u09c8\\u09cb-\\u09cd\\u09d7\\u09e2\\u09e3\\u09e6-\\u09ef\\u0a01-\\u0a03\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a66-\\u0a71\\u0a75\\u0a81-\\u0a83\\u0abc\\u0abe-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ae2\\u0ae3\\u0ae6-\\u0aef\\u0b01-\\u0b03\\u0b3c\\u0b3e-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b56\\u0b57\\u0b62\\u0b63\\u0b66-\\u0b6f\\u0b82\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd7\\u0be6-\\u0bef\\u0c01-\\u0c03\\u0c3e-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0c66-\\u0c6f\\u0c82\\u0c83\\u0cbc\\u0cbe-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0ce6-\\u0cef\\u0d02\\u0d03\\u0d3e-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4d\\u0d57\\u0d62\\u0d63\\u0d66-\\u0d6f\\u0d82\\u0d83\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0df2\\u0df3\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0e50-\\u0e59\\u0eb1\\u0eb4-\\u0eb9\\u0ebb\\u0ebc\\u0ec8-\\u0ecd\\u0ed0-\\u0ed9\\u0f18\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f3e\\u0f3f\\u0f71-\\u0f84\\u0f86\\u0f87\\u0f8d-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102b-\\u103e\\u1040-\\u1049\\u1056-\\u1059\\u105e-\\u1060\\u1062-\\u1064\\u1067-\\u106d\\u1071-\\u1074\\u1082-\\u108d\\u108f-\\u109d\\u135d-\\u135f\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b4-\\u17d3\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u1810-\\u1819\\u18a9\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u194f\\u19b0-\\u19c0\\u19c8\\u19c9\\u19d0-\\u19d9\\u1a17-\\u1a1b\\u1a55-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1b00-\\u1b04\\u1b34-\\u1b44\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1b80-\\u1b82\\u1ba1-\\u1bad\\u1bb0-\\u1bb9\\u1be6-\\u1bf3\\u1c24-\\u1c37\\u1c40-\\u1c49\\u1c50-\\u1c59\\u1cd0-\\u1cd2\\u1cd4-\\u1ce8\\u1ced\\u1cf2-\\u1cf4\\u1dc0-\\u1de6\\u1dfc-\\u1dff\\u200c\\u200d\\u203f\\u2040\\u2054\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2cef-\\u2cf1\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua620-\\ua629\\ua66f\\ua674-\\ua67d\\ua69f\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua823-\\ua827\\ua880\\ua881\\ua8b4-\\ua8c4\\ua8d0-\\ua8d9\\ua8e0-\\ua8f1\\ua900-\\ua909\\ua926-\\ua92d\\ua947-\\ua953\\ua980-\\ua983\\ua9b3-\\ua9c0\\ua9d0-\\ua9d9\\uaa29-\\uaa36\\uaa43\\uaa4c\\uaa4d\\uaa50-\\uaa59\\uaa7b\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uaaeb-\\uaaef\\uaaf5\\uaaf6\\uabe3-\\uabea\\uabec\\uabed\\uabf0-\\uabf9\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe26\\ufe33\\ufe34\\ufe4d-\\ufe4f\\uff10-\\uff19\\uff3f]*$/.test(str)\n}\nmodule.exports = isProperty",
|
|
112
|
+
"var util = require('util')\nvar isProperty = require('is-property')\n\nvar INDENT_START = /[\\{\\[]/\nvar INDENT_END = /[\\}\\]]/\n\n// from https://mathiasbynens.be/notes/reserved-keywords\nvar RESERVED = [\n 'do',\n 'if',\n 'in',\n 'for',\n 'let',\n 'new',\n 'try',\n 'var',\n 'case',\n 'else',\n 'enum',\n 'eval',\n 'null',\n 'this',\n 'true',\n 'void',\n 'with',\n 'await',\n 'break',\n 'catch',\n 'class',\n 'const',\n 'false',\n 'super',\n 'throw',\n 'while',\n 'yield',\n 'delete',\n 'export',\n 'import',\n 'public',\n 'return',\n 'static',\n 'switch',\n 'typeof',\n 'default',\n 'extends',\n 'finally',\n 'package',\n 'private',\n 'continue',\n 'debugger',\n 'function',\n 'arguments',\n 'interface',\n 'protected',\n 'implements',\n 'instanceof',\n 'NaN',\n 'undefined'\n]\n\nvar RESERVED_MAP = {}\n\nfor (var i = 0; i < RESERVED.length; i++) {\n RESERVED_MAP[RESERVED[i]] = true\n}\n\nvar isVariable = function (name) {\n return isProperty(name) && !RESERVED_MAP.hasOwnProperty(name)\n}\n\nvar formats = {\n s: function(s) {\n return '' + s\n },\n d: function(d) {\n return '' + Number(d)\n },\n o: function(o) {\n return JSON.stringify(o)\n }\n}\n\nvar genfun = function() {\n var lines = []\n var indent = 0\n var vars = {}\n\n var push = function(str) {\n var spaces = ''\n while (spaces.length < indent*2) spaces += ' '\n lines.push(spaces+str)\n }\n\n var pushLine = function(line) {\n if (INDENT_END.test(line.trim()[0]) && INDENT_START.test(line[line.length-1])) {\n indent--\n push(line)\n indent++\n return\n }\n if (INDENT_START.test(line[line.length-1])) {\n push(line)\n indent++\n return\n }\n if (INDENT_END.test(line.trim()[0])) {\n indent--\n push(line)\n return\n }\n\n push(line)\n }\n\n var line = function(fmt) {\n if (!fmt) return line\n\n if (arguments.length === 1 && fmt.indexOf('\\n') > -1) {\n var lines = fmt.trim().split('\\n')\n for (var i = 0; i < lines.length; i++) {\n pushLine(lines[i].trim())\n }\n } else {\n pushLine(util.format.apply(util, arguments))\n }\n\n return line\n }\n\n line.scope = {}\n line.formats = formats\n\n line.sym = function(name) {\n if (!name || !isVariable(name)) name = 'tmp'\n if (!vars[name]) vars[name] = 0\n return name + (vars[name]++ || '')\n }\n\n line.property = function(obj, name) {\n if (arguments.length === 1) {\n name = obj\n obj = ''\n }\n\n name = name + ''\n\n if (isProperty(name)) return (obj ? obj + '.' + name : name)\n return obj ? obj + '[' + JSON.stringify(name) + ']' : JSON.stringify(name)\n }\n\n line.toString = function() {\n return lines.join('\\n')\n }\n\n line.toFunction = function(scope) {\n if (!scope) scope = {}\n\n var src = 'return ('+line.toString()+')'\n\n Object.keys(line.scope).forEach(function (key) {\n if (!scope[key]) scope[key] = line.scope[key]\n })\n\n var keys = Object.keys(scope).map(function(key) {\n return key\n })\n\n var vals = keys.map(function(key) {\n return scope[key]\n })\n\n return Function.apply(null, keys.concat(src)).apply(null, vals)\n }\n\n if (arguments.length) line.apply(null, arguments)\n\n return line\n}\n\ngenfun.formats = formats\nmodule.exports = genfun\n",
|
|
113
|
+
"'use strict';\n\nconst Types = require('../constants/types.js');\nconst Charsets = require('../constants/charsets.js');\nconst helpers = require('../helpers');\nconst genFunc = require('generate-function');\nconst parserCache = require('./parser_cache.js');\n\nconst typeNames = [];\nfor (const t in Types) {\n typeNames[Types[t]] = t;\n}\n\nfunction readCodeFor(type, charset, encodingExpr, config, options) {\n const supportBigNumbers = Boolean(\n options.supportBigNumbers || config.supportBigNumbers\n );\n const bigNumberStrings = Boolean(\n options.bigNumberStrings || config.bigNumberStrings\n );\n const timezone = options.timezone || config.timezone;\n const dateStrings = options.dateStrings || config.dateStrings;\n\n switch (type) {\n case Types.TINY:\n case Types.SHORT:\n case Types.LONG:\n case Types.INT24:\n case Types.YEAR:\n return 'packet.parseLengthCodedIntNoBigCheck()';\n case Types.LONGLONG:\n if (supportBigNumbers && bigNumberStrings) {\n return 'packet.parseLengthCodedIntString()';\n }\n return `packet.parseLengthCodedInt(${supportBigNumbers})`;\n case Types.FLOAT:\n case Types.DOUBLE:\n return 'packet.parseLengthCodedFloat()';\n case Types.NULL:\n return 'packet.readLengthCodedNumber()';\n case Types.DECIMAL:\n case Types.NEWDECIMAL:\n if (config.decimalNumbers) {\n return 'packet.parseLengthCodedFloat()';\n }\n return 'packet.readLengthCodedString(\"ascii\")';\n case Types.DATE:\n if (helpers.typeMatch(type, dateStrings, Types)) {\n return 'packet.readLengthCodedString(\"ascii\")';\n }\n return `packet.parseDate(${helpers.srcEscape(timezone)})`;\n case Types.DATETIME:\n case Types.TIMESTAMP:\n if (helpers.typeMatch(type, dateStrings, Types)) {\n return 'packet.readLengthCodedString(\"ascii\")';\n }\n return `packet.parseDateTime(${helpers.srcEscape(timezone)})`;\n case Types.TIME:\n return 'packet.readLengthCodedString(\"ascii\")';\n case Types.GEOMETRY:\n return 'packet.parseGeometryValue()';\n case Types.VECTOR:\n return 'packet.parseVector()';\n case Types.JSON:\n // Since for JSON columns mysql always returns charset 63 (BINARY),\n // we have to handle it according to JSON specs and use \"utf8\",\n // see https://github.com/sidorares/node-mysql2/issues/409\n return config.jsonStrings\n ? 'packet.readLengthCodedString(\"utf8\")'\n : 'JSON.parse(packet.readLengthCodedString(\"utf8\"))';\n default:\n if (charset === Charsets.BINARY) {\n return 'packet.readLengthCodedBuffer()';\n }\n return `packet.readLengthCodedString(${encodingExpr})`;\n }\n}\n\nfunction compile(fields, options, config) {\n // use global typeCast if current query doesn't specify one\n if (\n typeof config.typeCast === 'function' &&\n typeof options.typeCast !== 'function'\n ) {\n options.typeCast = config.typeCast;\n }\n\n function wrap(field, _this) {\n return {\n type: typeNames[field.columnType],\n length: field.columnLength,\n db: field.schema,\n table: field.table,\n name: field.name,\n string: function (encoding = field.encoding) {\n if (field.columnType === Types.JSON && encoding === field.encoding) {\n // Since for JSON columns mysql always returns charset 63 (BINARY),\n // we have to handle it according to JSON specs and use \"utf8\",\n // see https://github.com/sidorares/node-mysql2/issues/1661\n console.warn(\n `typeCast: JSON column \"${field.name}\" is interpreted as BINARY by default, recommended to manually set utf8 encoding: \\`field.string(\"utf8\")\\``\n );\n }\n\n return _this.packet.readLengthCodedString(encoding);\n },\n buffer: function () {\n return _this.packet.readLengthCodedBuffer();\n },\n geometry: function () {\n return _this.packet.parseGeometryValue();\n },\n };\n }\n\n const parserFn = genFunc();\n\n parserFn('(function () {')('return class TextRow {');\n\n // constructor method\n parserFn('constructor(fields) {');\n // node-mysql typeCast compatibility wrapper\n // see https://github.com/mysqljs/mysql/blob/96fdd0566b654436624e2375c7b6604b1f50f825/lib/protocol/packets/Field.js\n if (typeof options.typeCast === 'function') {\n parserFn('const _this = this;');\n parserFn('for(let i=0; i<fields.length; ++i) {');\n parserFn('this[`wrap${i}`] = wrap(fields[i], _this);');\n parserFn('}');\n }\n parserFn('}');\n\n // next method\n parserFn('next(packet, fields, options) {');\n parserFn('this.packet = packet;');\n if (options.rowsAsArray) {\n parserFn(`const result = new Array(${fields.length});`);\n } else {\n parserFn('const result = {};');\n }\n\n const resultTables = {};\n let resultTablesArray = [];\n\n if (options.nestTables === true) {\n for (let i = 0; i < fields.length; i++) {\n resultTables[fields[i].table] = 1;\n }\n resultTablesArray = Object.keys(resultTables);\n for (let i = 0; i < resultTablesArray.length; i++) {\n parserFn(`result[${helpers.fieldEscape(resultTablesArray[i])}] = {};`);\n }\n }\n\n let lvalue = '';\n let fieldName = '';\n let tableName = '';\n for (let i = 0; i < fields.length; i++) {\n fieldName = helpers.fieldEscape(fields[i].name);\n // parserFn(`// ${fieldName}: ${typeNames[fields[i].columnType]}`);\n\n if (typeof options.nestTables === 'string') {\n lvalue = `result[${helpers.fieldEscape(fields[i].table + options.nestTables + fields[i].name)}]`;\n } else if (options.nestTables === true) {\n tableName = helpers.fieldEscape(fields[i].table);\n\n parserFn(`if (!result[${tableName}]) result[${tableName}] = {};`);\n lvalue = `result[${tableName}][${fieldName}]`;\n } else if (options.rowsAsArray) {\n lvalue = `result[${i.toString(10)}]`;\n } else {\n lvalue = `result[${fieldName}]`;\n }\n if (options.typeCast === false) {\n parserFn(`${lvalue} = packet.readLengthCodedBuffer();`);\n } else {\n const encodingExpr = `fields[${i}].encoding`;\n const readCode = readCodeFor(\n fields[i].columnType,\n fields[i].characterSet,\n encodingExpr,\n config,\n options\n );\n if (typeof options.typeCast === 'function') {\n parserFn(\n `${lvalue} = options.typeCast(this.wrap${i}, function() { return ${readCode} });`\n );\n } else {\n parserFn(`${lvalue} = ${readCode};`);\n }\n }\n }\n\n parserFn('return result;');\n parserFn('}');\n parserFn('};')('})()');\n\n if (config.debug) {\n helpers.printDebugWithCode(\n 'Compiled text protocol row parser',\n parserFn.toString()\n );\n }\n if (typeof options.typeCast === 'function') {\n return parserFn.toFunction({ wrap });\n }\n return parserFn.toFunction();\n}\n\nfunction getTextParser(fields, options, config) {\n return parserCache.getParser('text', fields, options, config, compile);\n}\n\nmodule.exports = getTextParser;\n",
|
|
114
|
+
"'use strict';\n\nconst Types = require('../constants/types.js');\nconst Charsets = require('../constants/charsets.js');\nconst helpers = require('../helpers');\n\nconst typeNames = [];\nfor (const t in Types) {\n typeNames[Types[t]] = t;\n}\n\nfunction readField({ packet, type, charset, encoding, config, options }) {\n const supportBigNumbers = Boolean(\n options.supportBigNumbers || config.supportBigNumbers\n );\n const bigNumberStrings = Boolean(\n options.bigNumberStrings || config.bigNumberStrings\n );\n const timezone = options.timezone || config.timezone;\n const dateStrings = options.dateStrings || config.dateStrings;\n\n switch (type) {\n case Types.TINY:\n case Types.SHORT:\n case Types.LONG:\n case Types.INT24:\n case Types.YEAR:\n return packet.parseLengthCodedIntNoBigCheck();\n case Types.LONGLONG:\n if (supportBigNumbers && bigNumberStrings) {\n return packet.parseLengthCodedIntString();\n }\n return packet.parseLengthCodedInt(supportBigNumbers);\n case Types.FLOAT:\n case Types.DOUBLE:\n return packet.parseLengthCodedFloat();\n case Types.NULL:\n case Types.DECIMAL:\n case Types.NEWDECIMAL:\n if (config.decimalNumbers) {\n return packet.parseLengthCodedFloat();\n }\n return packet.readLengthCodedString('ascii');\n case Types.DATE:\n if (helpers.typeMatch(type, dateStrings, Types)) {\n return packet.readLengthCodedString('ascii');\n }\n return packet.parseDate(timezone);\n case Types.DATETIME:\n case Types.TIMESTAMP:\n if (helpers.typeMatch(type, dateStrings, Types)) {\n return packet.readLengthCodedString('ascii');\n }\n return packet.parseDateTime(timezone);\n case Types.TIME:\n return packet.readLengthCodedString('ascii');\n case Types.GEOMETRY:\n return packet.parseGeometryValue();\n case Types.VECTOR:\n return packet.parseVector();\n case Types.JSON:\n // Since for JSON columns mysql always returns charset 63 (BINARY),\n // we have to handle it according to JSON specs and use \"utf8\",\n // see https://github.com/sidorares/node-mysql2/issues/409\n return config.jsonStrings\n ? packet.readLengthCodedString('utf8')\n : JSON.parse(packet.readLengthCodedString('utf8'));\n default:\n if (charset === Charsets.BINARY) {\n return packet.readLengthCodedBuffer();\n }\n return packet.readLengthCodedString(encoding);\n }\n}\n\nfunction createTypecastField(field, packet) {\n return {\n type: typeNames[field.columnType],\n length: field.columnLength,\n db: field.schema,\n table: field.table,\n name: field.name,\n string: function (encoding = field.encoding) {\n if (field.columnType === Types.JSON && encoding === field.encoding) {\n // Since for JSON columns mysql always returns charset 63 (BINARY),\n // we have to handle it according to JSON specs and use \"utf8\",\n // see https://github.com/sidorares/node-mysql2/issues/1661\n console.warn(\n `typeCast: JSON column \"${field.name}\" is interpreted as BINARY by default, recommended to manually set utf8 encoding: \\`field.string(\"utf8\")\\``\n );\n }\n return packet.readLengthCodedString(encoding);\n },\n buffer: function () {\n return packet.readLengthCodedBuffer();\n },\n geometry: function () {\n return packet.parseGeometryValue();\n },\n };\n}\n\nfunction getTextParser(_fields, _options, config) {\n return {\n next(packet, fields, options) {\n const result = options.rowsAsArray ? [] : {};\n for (let i = 0; i < fields.length; i++) {\n const field = fields[i];\n const typeCast = options.typeCast ? options.typeCast : config.typeCast;\n const next = () =>\n readField({\n packet,\n type: field.columnType,\n encoding: field.encoding,\n charset: field.characterSet,\n config,\n options,\n });\n\n let value;\n\n if (options.typeCast === false) {\n value = packet.readLengthCodedBuffer();\n } else if (typeof typeCast === 'function') {\n value = typeCast(createTypecastField(field, packet), next);\n } else {\n value = next();\n }\n\n if (options.rowsAsArray) {\n result.push(value);\n } else if (typeof options.nestTables === 'string') {\n result[\n `${helpers.fieldEscape(field.table, false)}${options.nestTables}${helpers.fieldEscape(field.name, false)}`\n ] = value;\n } else if (options.nestTables) {\n const tableName = helpers.fieldEscape(field.table, false);\n if (!result[tableName]) {\n result[tableName] = {};\n }\n result[tableName][helpers.fieldEscape(field.name, false)] = value;\n } else {\n result[helpers.fieldEscape(field.name, false)] = value;\n }\n }\n\n return result;\n },\n };\n}\n\nmodule.exports = getTextParser;\n",
|
|
115
|
+
"'use strict';\n\nconst process = require('process');\nconst Timers = require('timers');\n\nconst Readable = require('stream').Readable;\n\nconst Command = require('./command.js');\nconst Packets = require('../packets/index.js');\nconst getTextParser = require('../parsers/text_parser.js');\nconst staticParser = require('../parsers/static_text_parser.js');\nconst ServerStatus = require('../constants/server_status.js');\n\nconst EmptyPacket = new Packets.Packet(0, Buffer.allocUnsafe(4), 0, 4);\n\n// http://dev.mysql.com/doc/internals/en/com-query.html\nclass Query extends Command {\n constructor(options, callback) {\n super();\n this.sql = options.sql;\n this.values = options.values;\n this._queryOptions = options;\n this.namedPlaceholders = options.namedPlaceholders || false;\n this.onResult = callback;\n this.timeout = options.timeout;\n this.queryTimeout = null;\n this._fieldCount = 0;\n this._rowParser = null;\n this._fields = [];\n this._rows = [];\n this._receivedFieldsCount = 0;\n this._resultIndex = 0;\n this._localStream = null;\n this._unpipeStream = function () {};\n this._streamFactory = options.infileStreamFactory;\n this._connection = null;\n }\n\n then() {\n const err =\n \"You have tried to call .then(), .catch(), or invoked await on the result of query that is not a promise, which is a programming error. Try calling con.promise().query(), or require('mysql2/promise') instead of 'mysql2' for a promise-compatible version of the query interface. To learn how to use async/await or Promises check out documentation at https://sidorares.github.io/node-mysql2/docs#using-promise-wrapper, or the mysql2 documentation at https://sidorares.github.io/node-mysql2/docs/documentation/promise-wrapper\";\n // eslint-disable-next-line\n console.log(err);\n throw new Error(err);\n }\n\n /* eslint no-unused-vars: [\"error\", { \"argsIgnorePattern\": \"^_\" }] */\n start(_packet, connection) {\n if (connection.config.debug) {\n // eslint-disable-next-line\n console.log(' Sending query command: %s', this.sql);\n }\n this._connection = connection;\n this.options = Object.assign({}, connection.config, this._queryOptions);\n this._setTimeout();\n\n const cmdPacket = new Packets.Query(\n this.sql,\n connection.config.charsetNumber\n );\n connection.writePacket(cmdPacket.toPacket(1));\n return Query.prototype.resultsetHeader;\n }\n\n done() {\n this._unpipeStream();\n // if all ready timeout, return null directly\n if (this.timeout && !this.queryTimeout) {\n return null;\n }\n // else clear timer\n if (this.queryTimeout) {\n Timers.clearTimeout(this.queryTimeout);\n this.queryTimeout = null;\n }\n if (this.onResult) {\n let rows, fields;\n if (this._resultIndex === 0) {\n rows = this._rows[0];\n fields = this._fields[0];\n } else {\n rows = this._rows;\n fields = this._fields;\n }\n if (fields) {\n process.nextTick(() => {\n this.onResult(null, rows, fields);\n });\n } else {\n process.nextTick(() => {\n this.onResult(null, rows);\n });\n }\n }\n return null;\n }\n\n doneInsert(rs) {\n if (this._localStreamError) {\n if (this.onResult) {\n this.onResult(this._localStreamError, rs);\n } else {\n this.emit('error', this._localStreamError);\n }\n return null;\n }\n this._rows.push(rs);\n this._fields.push(void 0);\n this.emit('fields', void 0);\n this.emit('result', rs);\n if (rs.serverStatus & ServerStatus.SERVER_MORE_RESULTS_EXISTS) {\n this._resultIndex++;\n return this.resultsetHeader;\n }\n return this.done();\n }\n\n resultsetHeader(packet, connection) {\n const rs = new Packets.ResultSetHeader(packet, connection);\n this._fieldCount = rs.fieldCount;\n if (connection.config.debug) {\n // eslint-disable-next-line\n console.log(\n ` Resultset header received, expecting ${rs.fieldCount} column definition packets`\n );\n }\n if (this._fieldCount === 0) {\n return this.doneInsert(rs);\n }\n if (this._fieldCount === null) {\n return this._streamLocalInfile(connection, rs.infileName);\n }\n this._receivedFieldsCount = 0;\n this._rows.push([]);\n this._fields.push([]);\n return this.readField;\n }\n\n _streamLocalInfile(connection, path) {\n if (this._streamFactory) {\n this._localStream = this._streamFactory(path);\n } else {\n this._localStreamError = new Error(\n `As a result of LOCAL INFILE command server wants to read ${path} file, but as of v2.0 you must provide streamFactory option returning ReadStream.`\n );\n connection.writePacket(EmptyPacket);\n return this.infileOk;\n }\n\n const onConnectionError = () => {\n this._unpipeStream();\n };\n const onDrain = () => {\n this._localStream.resume();\n };\n const onPause = () => {\n this._localStream.pause();\n };\n const onData = function (data) {\n const dataWithHeader = Buffer.allocUnsafe(data.length + 4);\n data.copy(dataWithHeader, 4);\n connection.writePacket(\n new Packets.Packet(0, dataWithHeader, 0, dataWithHeader.length)\n );\n };\n const onEnd = () => {\n connection.removeListener('error', onConnectionError);\n connection.writePacket(EmptyPacket);\n };\n const onError = (err) => {\n this._localStreamError = err;\n connection.removeListener('error', onConnectionError);\n connection.writePacket(EmptyPacket);\n };\n this._unpipeStream = () => {\n connection.stream.removeListener('pause', onPause);\n connection.stream.removeListener('drain', onDrain);\n this._localStream.removeListener('data', onData);\n this._localStream.removeListener('end', onEnd);\n this._localStream.removeListener('error', onError);\n };\n connection.stream.on('pause', onPause);\n connection.stream.on('drain', onDrain);\n this._localStream.on('data', onData);\n this._localStream.on('end', onEnd);\n this._localStream.on('error', onError);\n connection.once('error', onConnectionError);\n return this.infileOk;\n }\n\n readField(packet, connection) {\n this._receivedFieldsCount++;\n // Often there is much more data in the column definition than in the row itself\n // If you set manually _fields[0] to array of ColumnDefinition's (from previous call)\n // you can 'cache' result of parsing. Field packets still received, but ignored in that case\n // this is the reason _receivedFieldsCount exist (otherwise we could just use current length of fields array)\n if (this._fields[this._resultIndex].length !== this._fieldCount) {\n const field = new Packets.ColumnDefinition(\n packet,\n connection.clientEncoding\n );\n this._fields[this._resultIndex].push(field);\n if (connection.config.debug) {\n /* eslint-disable no-console */\n console.log(' Column definition:');\n console.log(` name: ${field.name}`);\n console.log(` type: ${field.columnType}`);\n console.log(` flags: ${field.flags}`);\n /* eslint-enable no-console */\n }\n }\n // last field received\n if (this._receivedFieldsCount === this._fieldCount) {\n const fields = this._fields[this._resultIndex];\n this.emit('fields', fields);\n if (this.options.disableEval) {\n this._rowParser = staticParser(fields, this.options, connection.config);\n } else {\n this._rowParser = new (getTextParser(\n fields,\n this.options,\n connection.config\n ))(fields);\n }\n return Query.prototype.fieldsEOF;\n }\n return Query.prototype.readField;\n }\n\n fieldsEOF(packet, connection) {\n // check EOF\n if (!packet.isEOF()) {\n return connection.protocolError('Expected EOF packet');\n }\n return this.row;\n }\n\n /* eslint no-unused-vars: [\"error\", { \"argsIgnorePattern\": \"^_\" }] */\n row(packet, _connection) {\n if (packet.isEOF()) {\n const status = packet.eofStatusFlags();\n const moreResults = status & ServerStatus.SERVER_MORE_RESULTS_EXISTS;\n if (moreResults) {\n this._resultIndex++;\n return Query.prototype.resultsetHeader;\n }\n return this.done();\n }\n let row;\n try {\n row = this._rowParser.next(\n packet,\n this._fields[this._resultIndex],\n this.options\n );\n } catch (err) {\n this._localStreamError = err;\n return this.doneInsert(null);\n }\n if (this.onResult) {\n this._rows[this._resultIndex].push(row);\n } else {\n this.emit('result', row, this._resultIndex);\n }\n return Query.prototype.row;\n }\n\n infileOk(packet, connection) {\n const rs = new Packets.ResultSetHeader(packet, connection);\n return this.doneInsert(rs);\n }\n\n stream(options) {\n options = options || Object.create(null);\n options.objectMode = true;\n\n const stream = new Readable({\n ...options,\n emitClose: true,\n autoDestroy: true,\n read: () => {\n this._connection && this._connection.resume();\n },\n });\n\n // Prevent a breaking change for users that rely on `end` event\n stream.once('close', () => {\n if (!stream.readableEnded) {\n stream.emit('end');\n }\n });\n\n const onResult = (row, index) => {\n if (stream.destroyed) return;\n\n if (!stream.push(row)) {\n this._connection && this._connection.pause();\n }\n\n stream.emit('result', row, index); // replicate old emitter\n };\n\n const onFields = (fields) => {\n if (stream.destroyed) return;\n\n stream.emit('fields', fields); // replicate old emitter\n };\n\n const onEnd = () => {\n if (stream.destroyed) return;\n\n stream.push(null); // pushing null, indicating EOF\n };\n\n const onError = (err) => {\n stream.destroy(err);\n };\n\n stream._destroy = (err, cb) => {\n this._connection && this._connection.resume();\n\n this.removeListener('result', onResult);\n this.removeListener('fields', onFields);\n this.removeListener('end', onEnd);\n this.removeListener('error', onError);\n\n cb(err); // Pass on any errors\n };\n\n this.on('result', onResult);\n this.on('fields', onFields);\n this.on('end', onEnd);\n this.on('error', onError);\n\n return stream;\n }\n\n _setTimeout() {\n if (this.timeout) {\n const timeoutHandler = this._handleTimeoutError.bind(this);\n this.queryTimeout = Timers.setTimeout(timeoutHandler, this.timeout);\n }\n }\n\n _handleTimeoutError() {\n if (this.queryTimeout) {\n Timers.clearTimeout(this.queryTimeout);\n this.queryTimeout = null;\n }\n\n const err = new Error('Query inactivity timeout');\n err.errorno = 'PROTOCOL_SEQUENCE_TIMEOUT';\n err.code = 'PROTOCOL_SEQUENCE_TIMEOUT';\n err.syscall = 'query';\n\n if (this.onResult) {\n this.onResult(err);\n } else {\n this.emit('error', err);\n }\n }\n}\n\nQuery.prototype.catch = Query.prototype.then;\n\nmodule.exports = Query;\n",
|
|
116
|
+
"'use strict';\n\nconst Command = require('./command');\nconst Packets = require('../packets/index.js');\n\nclass CloseStatement extends Command {\n constructor(id) {\n super();\n this.id = id;\n }\n\n start(packet, connection) {\n connection.writePacket(new Packets.CloseStatement(this.id).toPacket(1));\n return null;\n }\n}\n\nmodule.exports = CloseStatement;\n",
|
|
117
|
+
"'use strict';\n\nconst FieldFlags = require('../constants/field_flags.js');\nconst Charsets = require('../constants/charsets.js');\nconst Types = require('../constants/types.js');\nconst helpers = require('../helpers');\nconst genFunc = require('generate-function');\nconst parserCache = require('./parser_cache.js');\nconst typeNames = [];\nfor (const t in Types) {\n typeNames[Types[t]] = t;\n}\n\nfunction readCodeFor(field, config, options, fieldNum) {\n const supportBigNumbers = Boolean(\n options.supportBigNumbers || config.supportBigNumbers\n );\n const bigNumberStrings = Boolean(\n options.bigNumberStrings || config.bigNumberStrings\n );\n const timezone = options.timezone || config.timezone;\n const dateStrings = options.dateStrings || config.dateStrings;\n const unsigned = field.flags & FieldFlags.UNSIGNED;\n switch (field.columnType) {\n case Types.TINY:\n return unsigned ? 'packet.readInt8();' : 'packet.readSInt8();';\n case Types.SHORT:\n return unsigned ? 'packet.readInt16();' : 'packet.readSInt16();';\n case Types.LONG:\n case Types.INT24: // in binary protocol int24 is encoded in 4 bytes int32\n return unsigned ? 'packet.readInt32();' : 'packet.readSInt32();';\n case Types.YEAR:\n return 'packet.readInt16()';\n case Types.FLOAT:\n return 'packet.readFloat();';\n case Types.DOUBLE:\n return 'packet.readDouble();';\n case Types.NULL:\n return 'null;';\n case Types.DATE:\n case Types.DATETIME:\n case Types.TIMESTAMP:\n case Types.NEWDATE:\n if (helpers.typeMatch(field.columnType, dateStrings, Types)) {\n return `packet.readDateTimeString(${parseInt(field.decimals, 10)}, ${null}, ${field.columnType});`;\n }\n return `packet.readDateTime(${helpers.srcEscape(timezone)});`;\n case Types.TIME:\n return 'packet.readTimeString()';\n case Types.DECIMAL:\n case Types.NEWDECIMAL:\n if (config.decimalNumbers) {\n return 'packet.parseLengthCodedFloat();';\n }\n return 'packet.readLengthCodedString(\"ascii\");';\n case Types.GEOMETRY:\n return 'packet.parseGeometryValue();';\n case Types.VECTOR:\n return 'packet.parseVector()';\n case Types.JSON:\n // Since for JSON columns mysql always returns charset 63 (BINARY),\n // we have to handle it according to JSON specs and use \"utf8\",\n // see https://github.com/sidorares/node-mysql2/issues/409\n return config.jsonStrings\n ? 'packet.readLengthCodedString(\"utf8\")'\n : 'JSON.parse(packet.readLengthCodedString(\"utf8\"));';\n case Types.LONGLONG:\n if (!supportBigNumbers) {\n return unsigned\n ? 'packet.readInt64JSNumber();'\n : 'packet.readSInt64JSNumber();';\n }\n if (bigNumberStrings) {\n return unsigned\n ? 'packet.readInt64String();'\n : 'packet.readSInt64String();';\n }\n return unsigned ? 'packet.readInt64();' : 'packet.readSInt64();';\n\n default:\n if (field.characterSet === Charsets.BINARY) {\n return 'packet.readLengthCodedBuffer();';\n }\n return `packet.readLengthCodedString(fields[${fieldNum}].encoding)`;\n }\n}\n\nfunction compile(fields, options, config) {\n const parserFn = genFunc();\n const nullBitmapLength = Math.floor((fields.length + 7 + 2) / 8);\n\n function wrap(field, packet) {\n return {\n type: typeNames[field.columnType],\n length: field.columnLength,\n db: field.schema,\n table: field.table,\n name: field.name,\n string: function (encoding = field.encoding) {\n if (field.columnType === Types.JSON && encoding === field.encoding) {\n // Since for JSON columns mysql always returns charset 63 (BINARY),\n // we have to handle it according to JSON specs and use \"utf8\",\n // see https://github.com/sidorares/node-mysql2/issues/1661\n console.warn(\n `typeCast: JSON column \"${field.name}\" is interpreted as BINARY by default, recommended to manually set utf8 encoding: \\`field.string(\"utf8\")\\``\n );\n }\n\n if (\n [Types.DATETIME, Types.NEWDATE, Types.TIMESTAMP, Types.DATE].includes(\n field.columnType\n )\n ) {\n return packet.readDateTimeString(\n parseInt(field.decimals, 10),\n ' ',\n field.columnType\n );\n }\n\n if (field.columnType === Types.TINY) {\n const unsigned = field.flags & FieldFlags.UNSIGNED;\n\n return String(unsigned ? packet.readInt8() : packet.readSInt8());\n }\n\n if (field.columnType === Types.TIME) {\n return packet.readTimeString();\n }\n\n return packet.readLengthCodedString(encoding);\n },\n buffer: function () {\n return packet.readLengthCodedBuffer();\n },\n geometry: function () {\n return packet.parseGeometryValue();\n },\n };\n }\n\n parserFn('(function(){');\n parserFn('return class BinaryRow {');\n parserFn('constructor() {');\n parserFn('}');\n\n parserFn('next(packet, fields, options) {');\n if (options.rowsAsArray) {\n parserFn(`const result = new Array(${fields.length});`);\n } else {\n parserFn('const result = {};');\n }\n\n // Global typeCast\n if (\n typeof config.typeCast === 'function' &&\n typeof options.typeCast !== 'function'\n ) {\n options.typeCast = config.typeCast;\n }\n\n parserFn('packet.readInt8();'); // status byte\n for (let i = 0; i < nullBitmapLength; ++i) {\n parserFn(`const nullBitmaskByte${i} = packet.readInt8();`);\n }\n\n let lvalue = '';\n let currentFieldNullBit = 4;\n let nullByteIndex = 0;\n let fieldName = '';\n let tableName = '';\n\n for (let i = 0; i < fields.length; i++) {\n fieldName = helpers.fieldEscape(fields[i].name);\n // parserFn(`// ${fieldName}: ${typeNames[fields[i].columnType]}`);\n\n if (typeof options.nestTables === 'string') {\n lvalue = `result[${helpers.fieldEscape(fields[i].table + options.nestTables + fields[i].name)}]`;\n } else if (options.nestTables === true) {\n tableName = helpers.fieldEscape(fields[i].table);\n\n parserFn(`if (!result[${tableName}]) result[${tableName}] = {};`);\n lvalue = `result[${tableName}][${fieldName}]`;\n } else if (options.rowsAsArray) {\n lvalue = `result[${i.toString(10)}]`;\n } else {\n lvalue = `result[${fieldName}]`;\n }\n\n parserFn(`if (nullBitmaskByte${nullByteIndex} & ${currentFieldNullBit}) `);\n parserFn(`${lvalue} = null;`);\n parserFn('else {');\n\n if (options.typeCast === false) {\n parserFn(`${lvalue} = packet.readLengthCodedBuffer();`);\n } else {\n const fieldWrapperVar = `fieldWrapper${i}`;\n parserFn(`const ${fieldWrapperVar} = wrap(fields[${i}], packet);`);\n const readCode = readCodeFor(fields[i], config, options, i);\n\n if (typeof options.typeCast === 'function') {\n parserFn(\n `${lvalue} = options.typeCast(${fieldWrapperVar}, function() { return ${readCode} });`\n );\n } else {\n parserFn(`${lvalue} = ${readCode};`);\n }\n }\n parserFn('}');\n\n currentFieldNullBit *= 2;\n if (currentFieldNullBit === 0x100) {\n currentFieldNullBit = 1;\n nullByteIndex++;\n }\n }\n\n parserFn('return result;');\n parserFn('}');\n parserFn('};')('})()');\n\n if (config.debug) {\n helpers.printDebugWithCode(\n 'Compiled binary protocol row parser',\n parserFn.toString()\n );\n }\n return parserFn.toFunction({ wrap });\n}\n\nfunction getBinaryParser(fields, options, config) {\n return parserCache.getParser('binary', fields, options, config, compile);\n}\n\nmodule.exports = getBinaryParser;\n",
|
|
118
|
+
"'use strict';\n\nconst FieldFlags = require('../constants/field_flags.js');\nconst Charsets = require('../constants/charsets.js');\nconst Types = require('../constants/types.js');\nconst helpers = require('../helpers');\n\nconst typeNames = [];\nfor (const t in Types) {\n typeNames[Types[t]] = t;\n}\n\nfunction getBinaryParser(fields, _options, config) {\n function readCode(field, config, options, fieldNum, packet) {\n const supportBigNumbers = Boolean(\n options.supportBigNumbers || config.supportBigNumbers\n );\n const bigNumberStrings = Boolean(\n options.bigNumberStrings || config.bigNumberStrings\n );\n const timezone = options.timezone || config.timezone;\n const dateStrings = options.dateStrings || config.dateStrings;\n const unsigned = field.flags & FieldFlags.UNSIGNED;\n\n switch (field.columnType) {\n case Types.TINY:\n return unsigned ? packet.readInt8() : packet.readSInt8();\n case Types.SHORT:\n return unsigned ? packet.readInt16() : packet.readSInt16();\n case Types.LONG:\n case Types.INT24: // in binary protocol int24 is encoded in 4 bytes int32\n return unsigned ? packet.readInt32() : packet.readSInt32();\n case Types.YEAR:\n return packet.readInt16();\n case Types.FLOAT:\n return packet.readFloat();\n case Types.DOUBLE:\n return packet.readDouble();\n case Types.NULL:\n return null;\n case Types.DATE:\n case Types.DATETIME:\n case Types.TIMESTAMP:\n case Types.NEWDATE:\n return helpers.typeMatch(field.columnType, dateStrings, Types)\n ? packet.readDateTimeString(\n parseInt(field.decimals, 10),\n null,\n field.columnType\n )\n : packet.readDateTime(timezone);\n case Types.TIME:\n return packet.readTimeString();\n case Types.DECIMAL:\n case Types.NEWDECIMAL:\n return config.decimalNumbers\n ? packet.parseLengthCodedFloat()\n : packet.readLengthCodedString('ascii');\n case Types.GEOMETRY:\n return packet.parseGeometryValue();\n case Types.VECTOR:\n return packet.parseVector();\n case Types.JSON:\n // Since for JSON columns mysql always returns charset 63 (BINARY),\n // we have to handle it according to JSON specs and use \"utf8\",\n // see https://github.com/sidorares/node-mysql2/issues/409\n return config.jsonStrings\n ? packet.readLengthCodedString('utf8')\n : JSON.parse(packet.readLengthCodedString('utf8'));\n case Types.LONGLONG:\n if (!supportBigNumbers)\n return unsigned\n ? packet.readInt64JSNumber()\n : packet.readSInt64JSNumber();\n return bigNumberStrings\n ? unsigned\n ? packet.readInt64String()\n : packet.readSInt64String()\n : unsigned\n ? packet.readInt64()\n : packet.readSInt64();\n default:\n return field.characterSet === Charsets.BINARY\n ? packet.readLengthCodedBuffer()\n : packet.readLengthCodedString(fields[fieldNum].encoding);\n }\n }\n\n return class BinaryRow {\n constructor() {}\n\n next(packet, fields, options) {\n packet.readInt8(); // status byte\n\n const nullBitmapLength = Math.floor((fields.length + 7 + 2) / 8);\n const nullBitmaskBytes = new Array(nullBitmapLength);\n\n for (let i = 0; i < nullBitmapLength; i++) {\n nullBitmaskBytes[i] = packet.readInt8();\n }\n\n const result = options.rowsAsArray ? new Array(fields.length) : {};\n let currentFieldNullBit = 4;\n let nullByteIndex = 0;\n\n for (let i = 0; i < fields.length; i++) {\n const field = fields[i];\n const typeCast =\n options.typeCast !== undefined ? options.typeCast : config.typeCast;\n\n let value;\n if (nullBitmaskBytes[nullByteIndex] & currentFieldNullBit) {\n value = null;\n } else if (options.typeCast === false) {\n value = packet.readLengthCodedBuffer();\n } else {\n const next = () => readCode(field, config, options, i, packet);\n value =\n typeof typeCast === 'function'\n ? typeCast(\n {\n type: typeNames[field.columnType],\n length: field.columnLength,\n db: field.schema,\n table: field.table,\n name: field.name,\n string: function (encoding = field.encoding) {\n if (\n field.columnType === Types.JSON &&\n encoding === field.encoding\n ) {\n // Since for JSON columns mysql always returns charset 63 (BINARY),\n // we have to handle it according to JSON specs and use \"utf8\",\n // see https://github.com/sidorares/node-mysql2/issues/1661\n console.warn(\n `typeCast: JSON column \"${field.name}\" is interpreted as BINARY by default, recommended to manually set utf8 encoding: \\`field.string(\"utf8\")\\``\n );\n }\n\n if (\n [\n Types.DATETIME,\n Types.NEWDATE,\n Types.TIMESTAMP,\n Types.DATE,\n ].includes(field.columnType)\n ) {\n return packet.readDateTimeString(\n parseInt(field.decimals, 10),\n ' ',\n field.columnType\n );\n }\n\n if (field.columnType === Types.TINY) {\n const unsigned = field.flags & FieldFlags.UNSIGNED;\n\n return String(\n unsigned ? packet.readInt8() : packet.readSInt8()\n );\n }\n\n if (field.columnType === Types.TIME) {\n return packet.readTimeString();\n }\n\n return packet.readLengthCodedString(encoding);\n },\n buffer: function () {\n return packet.readLengthCodedBuffer();\n },\n geometry: function () {\n return packet.parseGeometryValue();\n },\n },\n next\n )\n : next();\n }\n\n if (options.rowsAsArray) {\n result[i] = value;\n } else if (typeof options.nestTables === 'string') {\n const key = helpers.fieldEscape(\n field.table + options.nestTables + field.name,\n false\n );\n result[key] = value;\n } else if (options.nestTables === true) {\n const tableName = helpers.fieldEscape(field.table, false);\n if (!result[tableName]) {\n result[tableName] = {};\n }\n const fieldName = helpers.fieldEscape(field.name, false);\n result[tableName][fieldName] = value;\n } else {\n const key = helpers.fieldEscape(field.name, false);\n result[key] = value;\n }\n\n currentFieldNullBit *= 2;\n if (currentFieldNullBit === 0x100) {\n currentFieldNullBit = 1;\n nullByteIndex++;\n }\n }\n\n return result;\n }\n };\n}\n\nmodule.exports = getBinaryParser;\n",
|
|
119
|
+
"'use strict';\n\nconst Command = require('./command.js');\nconst Query = require('./query.js');\nconst Packets = require('../packets/index.js');\n\nconst getBinaryParser = require('../parsers/binary_parser.js');\nconst getStaticBinaryParser = require('../parsers/static_binary_parser.js');\n\nclass Execute extends Command {\n constructor(options, callback) {\n super();\n this.statement = options.statement;\n this.sql = options.sql;\n this.values = options.values;\n this.onResult = callback;\n this.parameters = options.values;\n this.insertId = 0;\n this.timeout = options.timeout;\n this.queryTimeout = null;\n this._rows = [];\n this._fields = [];\n this._result = [];\n this._fieldCount = 0;\n this._rowParser = null;\n this._executeOptions = options;\n this._resultIndex = 0;\n this._localStream = null;\n this._unpipeStream = function () {};\n this._streamFactory = options.infileStreamFactory;\n this._connection = null;\n }\n\n buildParserFromFields(fields, connection) {\n if (this.options.disableEval) {\n return getStaticBinaryParser(fields, this.options, connection.config);\n }\n\n return getBinaryParser(fields, this.options, connection.config);\n }\n\n start(packet, connection) {\n this._connection = connection;\n this.options = Object.assign({}, connection.config, this._executeOptions);\n this._setTimeout();\n const executePacket = new Packets.Execute(\n this.statement.id,\n this.parameters,\n connection.config.charsetNumber,\n connection.config.timezone\n );\n //For reasons why this try-catch is here, please see\n // https://github.com/sidorares/node-mysql2/pull/689\n //For additional discussion, see\n // 1. https://github.com/sidorares/node-mysql2/issues/493\n // 2. https://github.com/sidorares/node-mysql2/issues/187\n // 3. https://github.com/sidorares/node-mysql2/issues/480\n try {\n connection.writePacket(executePacket.toPacket(1));\n } catch (error) {\n this.onResult(error);\n }\n return Execute.prototype.resultsetHeader;\n }\n\n readField(packet, connection) {\n let fields;\n // disabling for now, but would be great to find reliable way to parse fields only once\n // fields reported by prepare can be empty at all or just incorrect - see #169\n //\n // perfomance optimisation: if we already have this field parsed in statement header, use one from header\n // const field = this.statement.columns.length == this._fieldCount ?\n // this.statement.columns[this._receivedFieldsCount] : new Packets.ColumnDefinition(packet);\n const field = new Packets.ColumnDefinition(\n packet,\n connection.clientEncoding\n );\n this._receivedFieldsCount++;\n this._fields[this._resultIndex].push(field);\n if (this._receivedFieldsCount === this._fieldCount) {\n fields = this._fields[this._resultIndex];\n this.emit('fields', fields, this._resultIndex);\n return Execute.prototype.fieldsEOF;\n }\n return Execute.prototype.readField;\n }\n\n fieldsEOF(packet, connection) {\n // check EOF\n if (!packet.isEOF()) {\n return connection.protocolError('Expected EOF packet');\n }\n this._rowParser = new (this.buildParserFromFields(\n this._fields[this._resultIndex],\n connection\n ))();\n return Execute.prototype.row;\n }\n}\n\nExecute.prototype.done = Query.prototype.done;\nExecute.prototype.doneInsert = Query.prototype.doneInsert;\nExecute.prototype.resultsetHeader = Query.prototype.resultsetHeader;\nExecute.prototype._findOrCreateReadStream =\n Query.prototype._findOrCreateReadStream;\nExecute.prototype._streamLocalInfile = Query.prototype._streamLocalInfile;\nExecute.prototype._setTimeout = Query.prototype._setTimeout;\nExecute.prototype._handleTimeoutError = Query.prototype._handleTimeoutError;\nExecute.prototype.row = Query.prototype.row;\nExecute.prototype.stream = Query.prototype.stream;\n\nmodule.exports = Execute;\n",
|
|
120
|
+
"'use strict';\n\nconst Packets = require('../packets/index.js');\nconst Command = require('./command.js');\nconst CloseStatement = require('./close_statement.js');\nconst Execute = require('./execute.js');\n\nclass PreparedStatementInfo {\n constructor(query, id, columns, parameters, connection) {\n this.query = query;\n this.id = id;\n this.columns = columns;\n this.parameters = parameters;\n this.rowParser = null;\n this._connection = connection;\n }\n\n close() {\n return this._connection.addCommand(new CloseStatement(this.id));\n }\n\n execute(parameters, callback) {\n if (typeof parameters === 'function') {\n callback = parameters;\n parameters = [];\n }\n return this._connection.addCommand(\n new Execute({ statement: this, values: parameters }, callback)\n );\n }\n}\n\nclass Prepare extends Command {\n constructor(options, callback) {\n super();\n this.query = options.sql;\n this.onResult = callback;\n this.id = 0;\n this.fieldCount = 0;\n this.parameterCount = 0;\n this.fields = [];\n this.parameterDefinitions = [];\n this.options = options;\n }\n\n start(packet, connection) {\n const Connection = connection.constructor;\n this.key = Connection.statementKey(this.options);\n const statement = connection._statements.get(this.key);\n if (statement) {\n if (this.onResult) {\n this.onResult(null, statement);\n }\n return null;\n }\n const cmdPacket = new Packets.PrepareStatement(\n this.query,\n connection.config.charsetNumber,\n this.options.values\n );\n connection.writePacket(cmdPacket.toPacket(1));\n return Prepare.prototype.prepareHeader;\n }\n\n prepareHeader(packet, connection) {\n const header = new Packets.PreparedStatementHeader(packet);\n this.id = header.id;\n this.fieldCount = header.fieldCount;\n this.parameterCount = header.parameterCount;\n if (this.parameterCount > 0) {\n return Prepare.prototype.readParameter;\n }\n if (this.fieldCount > 0) {\n return Prepare.prototype.readField;\n }\n return this.prepareDone(connection);\n }\n\n readParameter(packet, connection) {\n // there might be scenarios when mysql server reports more parameters than\n // are actually present in the array of parameter definitions.\n // if EOF packet is received we switch to \"read fields\" state if there are\n // any fields reported by the server, otherwise we finish the command.\n if (packet.isEOF()) {\n if (this.fieldCount > 0) {\n return Prepare.prototype.readField;\n }\n return this.prepareDone(connection);\n }\n const def = new Packets.ColumnDefinition(packet, connection.clientEncoding);\n this.parameterDefinitions.push(def);\n if (this.parameterDefinitions.length === this.parameterCount) {\n return Prepare.prototype.parametersEOF;\n }\n return this.readParameter;\n }\n\n readField(packet, connection) {\n if (packet.isEOF()) {\n return this.prepareDone(connection);\n }\n const def = new Packets.ColumnDefinition(packet, connection.clientEncoding);\n this.fields.push(def);\n if (this.fields.length === this.fieldCount) {\n return Prepare.prototype.fieldsEOF;\n }\n return Prepare.prototype.readField;\n }\n\n parametersEOF(packet, connection) {\n if (!packet.isEOF()) {\n return connection.protocolError('Expected EOF packet after parameters');\n }\n if (this.fieldCount > 0) {\n return Prepare.prototype.readField;\n }\n return this.prepareDone(connection);\n }\n\n fieldsEOF(packet, connection) {\n if (!packet.isEOF()) {\n return connection.protocolError('Expected EOF packet after fields');\n }\n return this.prepareDone(connection);\n }\n\n prepareDone(connection) {\n const statement = new PreparedStatementInfo(\n this.query,\n this.id,\n this.fields,\n this.parameterDefinitions,\n connection\n );\n connection._statements.set(this.key, statement);\n if (this.onResult) {\n this.onResult(null, statement);\n }\n return null;\n }\n}\n\nmodule.exports = Prepare;\n",
|
|
121
|
+
"'use strict';\n\nconst Command = require('./command');\nconst CommandCode = require('../constants/commands');\nconst Packet = require('../packets/packet');\n\n// TODO: time statistics?\n// usefull for queue size and network latency monitoring\n// store created,sent,reply timestamps\nclass Ping extends Command {\n constructor(callback) {\n super();\n this.onResult = callback;\n }\n\n start(packet, connection) {\n const ping = new Packet(\n 0,\n Buffer.from([1, 0, 0, 0, CommandCode.PING]),\n 0,\n 5\n );\n connection.writePacket(ping);\n return Ping.prototype.pingResponse;\n }\n\n pingResponse() {\n // TODO: check it's OK packet. error check already done in caller\n if (this.onResult) {\n process.nextTick(this.onResult.bind(this));\n }\n return null;\n }\n}\n\nmodule.exports = Ping;\n",
|
|
122
|
+
"'use strict';\n\nconst Command = require('./command');\nconst Packets = require('../packets');\n\nclass RegisterSlave extends Command {\n constructor(opts, callback) {\n super();\n this.onResult = callback;\n this.opts = opts;\n }\n\n start(packet, connection) {\n const newPacket = new Packets.RegisterSlave(this.opts);\n connection.writePacket(newPacket.toPacket(1));\n return RegisterSlave.prototype.registerResponse;\n }\n\n registerResponse() {\n if (this.onResult) {\n process.nextTick(this.onResult.bind(this));\n }\n return null;\n }\n}\n\nmodule.exports = RegisterSlave;\n",
|
|
123
|
+
"'use strict';\n\n// http://dev.mysql.com/doc/internals/en/query-event.html\n\nconst keys = {\n FLAGS2: 0,\n SQL_MODE: 1,\n CATALOG: 2,\n AUTO_INCREMENT: 3,\n CHARSET: 4,\n TIME_ZONE: 5,\n CATALOG_NZ: 6,\n LC_TIME_NAMES: 7,\n CHARSET_DATABASE: 8,\n TABLE_MAP_FOR_UPDATE: 9,\n MASTER_DATA_WRITTEN: 10,\n INVOKERS: 11,\n UPDATED_DB_NAMES: 12,\n MICROSECONDS: 3,\n};\n\nmodule.exports = function parseStatusVars(buffer) {\n const result = {};\n let offset = 0;\n let key, length, prevOffset;\n while (offset < buffer.length) {\n key = buffer[offset++];\n switch (key) {\n case keys.FLAGS2:\n result.flags = buffer.readUInt32LE(offset);\n offset += 4;\n break;\n case keys.SQL_MODE:\n // value is 8 bytes, but all dcumented flags are in first 4 bytes\n result.sqlMode = buffer.readUInt32LE(offset);\n offset += 8;\n break;\n case keys.CATALOG:\n length = buffer[offset++];\n result.catalog = buffer.toString('utf8', offset, offset + length);\n offset += length + 1; // null byte after string\n break;\n case keys.CHARSET:\n result.clientCharset = buffer.readUInt16LE(offset);\n result.connectionCollation = buffer.readUInt16LE(offset + 2);\n result.serverCharset = buffer.readUInt16LE(offset + 4);\n offset += 6;\n break;\n case keys.TIME_ZONE:\n length = buffer[offset++];\n result.timeZone = buffer.toString('utf8', offset, offset + length);\n offset += length; // no null byte\n break;\n case keys.CATALOG_NZ:\n length = buffer[offset++];\n result.catalogNz = buffer.toString('utf8', offset, offset + length);\n offset += length; // no null byte\n break;\n case keys.LC_TIME_NAMES:\n result.lcTimeNames = buffer.readUInt16LE(offset);\n offset += 2;\n break;\n case keys.CHARSET_DATABASE:\n result.schemaCharset = buffer.readUInt16LE(offset);\n offset += 2;\n break;\n case keys.TABLE_MAP_FOR_UPDATE:\n result.mapForUpdate1 = buffer.readUInt32LE(offset);\n result.mapForUpdate2 = buffer.readUInt32LE(offset + 4);\n offset += 8;\n break;\n case keys.MASTER_DATA_WRITTEN:\n result.masterDataWritten = buffer.readUInt32LE(offset);\n offset += 4;\n break;\n case keys.INVOKERS:\n length = buffer[offset++];\n result.invokerUsername = buffer.toString(\n 'utf8',\n offset,\n offset + length\n );\n offset += length;\n length = buffer[offset++];\n result.invokerHostname = buffer.toString(\n 'utf8',\n offset,\n offset + length\n );\n offset += length;\n break;\n case keys.UPDATED_DB_NAMES:\n length = buffer[offset++];\n // length - number of null-terminated strings\n result.updatedDBs = []; // we'll store them as array here\n for (; length; --length) {\n prevOffset = offset;\n // fast forward to null terminating byte\n while (buffer[offset++] && offset < buffer.length) {\n // empty body, everything inside while condition\n }\n result.updatedDBs.push(\n buffer.toString('utf8', prevOffset, offset - 1)\n );\n }\n break;\n case keys.MICROSECONDS:\n result.microseconds =\n // REVIEW: INVALID UNKNOWN VARIABLE!\n buffer.readInt16LE(offset) + (buffer[offset + 2] << 16);\n offset += 3;\n }\n }\n return result;\n};\n",
|
|
124
|
+
"'use strict';\n\nconst Command = require('./command');\nconst Packets = require('../packets');\n\nconst eventParsers = [];\n\nclass BinlogEventHeader {\n constructor(packet) {\n this.timestamp = packet.readInt32();\n this.eventType = packet.readInt8();\n this.serverId = packet.readInt32();\n this.eventSize = packet.readInt32();\n this.logPos = packet.readInt32();\n this.flags = packet.readInt16();\n }\n}\n\nclass BinlogDump extends Command {\n constructor(opts) {\n super();\n // this.onResult = callback;\n this.opts = opts;\n }\n\n start(packet, connection) {\n const newPacket = new Packets.BinlogDump(this.opts);\n connection.writePacket(newPacket.toPacket(1));\n return BinlogDump.prototype.binlogData;\n }\n\n binlogData(packet) {\n // ok - continue consuming events\n // error - error\n // eof - end of binlog\n if (packet.isEOF()) {\n this.emit('eof');\n return null;\n }\n // binlog event header\n packet.readInt8();\n const header = new BinlogEventHeader(packet);\n const EventParser = eventParsers[header.eventType];\n let event;\n if (EventParser) {\n event = new EventParser(packet);\n } else {\n event = {\n name: 'UNKNOWN',\n };\n }\n event.header = header;\n this.emit('event', event);\n return BinlogDump.prototype.binlogData;\n }\n}\n\nclass RotateEvent {\n constructor(packet) {\n this.pposition = packet.readInt32();\n // TODO: read uint64 here\n packet.readInt32(); // positionDword2\n this.nextBinlog = packet.readString();\n this.name = 'RotateEvent';\n }\n}\n\nclass FormatDescriptionEvent {\n constructor(packet) {\n this.binlogVersion = packet.readInt16();\n this.serverVersion = packet.readString(50).replace(/\\u0000.*/, ''); // eslint-disable-line no-control-regex\n this.createTimestamp = packet.readInt32();\n this.eventHeaderLength = packet.readInt8(); // should be 19\n this.eventsLength = packet.readBuffer();\n this.name = 'FormatDescriptionEvent';\n }\n}\n\nclass QueryEvent {\n constructor(packet) {\n const parseStatusVars = require('../packets/binlog_query_statusvars.js');\n this.slaveProxyId = packet.readInt32();\n this.executionTime = packet.readInt32();\n const schemaLength = packet.readInt8();\n this.errorCode = packet.readInt16();\n const statusVarsLength = packet.readInt16();\n const statusVars = packet.readBuffer(statusVarsLength);\n this.schema = packet.readString(schemaLength);\n packet.readInt8(); // should be zero\n this.statusVars = parseStatusVars(statusVars);\n this.query = packet.readString();\n this.name = 'QueryEvent';\n }\n}\n\nclass XidEvent {\n constructor(packet) {\n this.binlogVersion = packet.readInt16();\n this.xid = packet.readInt64();\n this.name = 'XidEvent';\n }\n}\n\neventParsers[2] = QueryEvent;\neventParsers[4] = RotateEvent;\neventParsers[15] = FormatDescriptionEvent;\neventParsers[16] = XidEvent;\n\nmodule.exports = BinlogDump;\n",
|
|
125
|
+
"// This file was modified by Oracle on September 21, 2021.\n// The changes involve saving additional authentication factor passwords\n// in the command scope and enabling multi-factor authentication in the\n// client-side when the server supports it.\n// Modifications copyright (c) 2021, Oracle and/or its affiliates.\n\n'use strict';\n\nconst Command = require('./command.js');\nconst Packets = require('../packets/index.js');\nconst ClientConstants = require('../constants/client');\nconst ClientHandshake = require('./client_handshake.js');\nconst CharsetToEncoding = require('../constants/charset_encodings.js');\n\nclass ChangeUser extends Command {\n constructor(options, callback) {\n super();\n this.onResult = callback;\n this.user = options.user;\n this.password = options.password;\n // \"password1\" is an alias of \"password\"\n this.password1 = options.password;\n this.password2 = options.password2;\n this.password3 = options.password3;\n this.database = options.database;\n this.passwordSha1 = options.passwordSha1;\n this.charsetNumber = options.charsetNumber;\n this.currentConfig = options.currentConfig;\n this.authenticationFactor = 0;\n }\n start(packet, connection) {\n const newPacket = new Packets.ChangeUser({\n flags: connection.config.clientFlags,\n user: this.user,\n database: this.database,\n charsetNumber: this.charsetNumber,\n password: this.password,\n passwordSha1: this.passwordSha1,\n authPluginData1: connection._handshakePacket.authPluginData1,\n authPluginData2: connection._handshakePacket.authPluginData2,\n });\n this.currentConfig.user = this.user;\n this.currentConfig.password = this.password;\n this.currentConfig.database = this.database;\n this.currentConfig.charsetNumber = this.charsetNumber;\n connection.clientEncoding = CharsetToEncoding[this.charsetNumber];\n // clear prepared statements cache as all statements become invalid after changeUser\n connection._statements.clear();\n connection.writePacket(newPacket.toPacket());\n // check if the server supports multi-factor authentication\n const multiFactorAuthentication =\n connection.serverCapabilityFlags &\n ClientConstants.MULTI_FACTOR_AUTHENTICATION;\n if (multiFactorAuthentication) {\n // if the server supports multi-factor authentication, we enable it in\n // the client\n this.authenticationFactor = 1;\n }\n return ChangeUser.prototype.handshakeResult;\n }\n}\n\nChangeUser.prototype.handshakeResult =\n ClientHandshake.prototype.handshakeResult;\nChangeUser.prototype.calculateNativePasswordAuthToken =\n ClientHandshake.prototype.calculateNativePasswordAuthToken;\n\nmodule.exports = ChangeUser;\n",
|
|
126
|
+
"'use strict';\n\nconst Command = require('./command.js');\nconst CommandCode = require('../constants/commands.js');\nconst Packet = require('../packets/packet.js');\n\nclass Quit extends Command {\n constructor(callback) {\n super();\n this.onResult = callback;\n }\n\n start(packet, connection) {\n connection._closing = true;\n const quit = new Packet(\n 0,\n Buffer.from([1, 0, 0, 0, CommandCode.QUIT]),\n 0,\n 5\n );\n if (this.onResult) {\n this.onResult();\n }\n connection.writePacket(quit);\n return null;\n }\n}\n\nmodule.exports = Quit;\n",
|
|
127
|
+
"'use strict';\n\nconst ClientHandshake = require('./client_handshake.js');\nconst ServerHandshake = require('./server_handshake.js');\nconst Query = require('./query.js');\nconst Prepare = require('./prepare.js');\nconst CloseStatement = require('./close_statement.js');\nconst Execute = require('./execute.js');\nconst Ping = require('./ping.js');\nconst RegisterSlave = require('./register_slave.js');\nconst BinlogDump = require('./binlog_dump.js');\nconst ChangeUser = require('./change_user.js');\nconst Quit = require('./quit.js');\n\nmodule.exports = {\n ClientHandshake,\n ServerHandshake,\n Query,\n Prepare,\n CloseStatement,\n Execute,\n Ping,\n RegisterSlave,\n BinlogDump,\n ChangeUser,\n Quit,\n};\n",
|
|
128
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.defaults = void 0;\n/**\n * CA Certificates for **Amazon RDS** (2024)\n *\n * - https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html\n * - https://docs.amazonaws.cn/en_us/AmazonRDS/latest/AuroraUserGuide/UsingWithRDS.SSL.html\n * - https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-serverless.html#aurora-serverless.tls\n */\nexports.defaults = [\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIEEjCCAvqgAwIBAgIJAM2ZN/+nPi27MA0GCSqGSIb3DQEBCwUAMIGVMQswCQYD\\n' +\n 'VQQGEwJVUzEQMA4GA1UEBwwHU2VhdHRsZTETMBEGA1UECAwKV2FzaGluZ3RvbjEi\\n' +\n 'MCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1h\\n' +\n 'em9uIFJEUzEmMCQGA1UEAwwdQW1hem9uIFJEUyBhZi1zb3V0aC0xIFJvb3QgQ0Ew\\n' +\n 'HhcNMTkxMDI4MTgwNTU4WhcNMjQxMDI2MTgwNTU4WjCBlTELMAkGA1UEBhMCVVMx\\n' +\n 'EDAOBgNVBAcMB1NlYXR0bGUxEzARBgNVBAgMCldhc2hpbmd0b24xIjAgBgNVBAoM\\n' +\n 'GUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMx\\n' +\n 'JjAkBgNVBAMMHUFtYXpvbiBSRFMgYWYtc291dGgtMSBSb290IENBMIIBIjANBgkq\\n' +\n 'hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwR2351uPMZaJk2gMGT+1sk8HE9MQh2rc\\n' +\n '/sCnbxGn2p1c7Oi9aBbd/GiFijeJb2BXvHU+TOq3d3Jjqepq8tapXVt4ojbTJNyC\\n' +\n 'J5E7r7KjTktKdLxtBE1MK25aY+IRJjtdU6vG3KiPKUT1naO3xs3yt0F76WVuFivd\\n' +\n '9OHv2a+KHvPkRUWIxpmAHuMY9SIIMmEZtVE7YZGx5ah0iO4JzItHcbVR0y0PBH55\\n' +\n 'arpFBddpIVHCacp1FUPxSEWkOpI7q0AaU4xfX0fe1BV5HZYRKpBOIp1TtZWvJD+X\\n' +\n 'jGUtL1BEsT5vN5g9MkqdtYrC+3SNpAk4VtpvJrdjraI/hhvfeXNnAwIDAQABo2Mw\\n' +\n 'YTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUEEi/\\n' +\n 'WWMcBJsoGXg+EZwkQ0MscZQwHwYDVR0jBBgwFoAUEEi/WWMcBJsoGXg+EZwkQ0Ms\\n' +\n 'cZQwDQYJKoZIhvcNAQELBQADggEBAGDZ5js5Pc/gC58LJrwMPXFhJDBS8QuDm23C\\n' +\n 'FFUdlqucskwOS3907ErK1ZkmVJCIqFLArHqskFXMAkRZ2PNR7RjWLqBs+0znG5yH\\n' +\n 'hRKb4DXzhUFQ18UBRcvT6V6zN97HTRsEEaNhM/7k8YLe7P8vfNZ28VIoJIGGgv9D\\n' +\n 'wQBBvkxQ71oOmAG0AwaGD0ORGUfbYry9Dz4a4IcUsZyRWRMADixgrFv6VuETp26s\\n' +\n '/+z+iqNaGWlELBKh3iQCT6Y/1UnkPLO42bxrCSyOvshdkYN58Q2gMTE1SVTqyo8G\\n' +\n 'Lw8lLAz9bnvUSgHzB3jRrSx6ggF/WRMRYlR++y6LXP4SAsSAaC0=\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIEEjCCAvqgAwIBAgIJAJYM4LxvTZA6MA0GCSqGSIb3DQEBCwUAMIGVMQswCQYD\\n' +\n 'VQQGEwJVUzEQMA4GA1UEBwwHU2VhdHRsZTETMBEGA1UECAwKV2FzaGluZ3RvbjEi\\n' +\n 'MCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1h\\n' +\n 'em9uIFJEUzEmMCQGA1UEAwwdQW1hem9uIFJEUyBldS1zb3V0aC0xIFJvb3QgQ0Ew\\n' +\n 'HhcNMTkxMDMwMjAyMDM2WhcNMjQxMDI4MjAyMDM2WjCBlTELMAkGA1UEBhMCVVMx\\n' +\n 'EDAOBgNVBAcMB1NlYXR0bGUxEzARBgNVBAgMCldhc2hpbmd0b24xIjAgBgNVBAoM\\n' +\n 'GUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMx\\n' +\n 'JjAkBgNVBAMMHUFtYXpvbiBSRFMgZXUtc291dGgtMSBSb290IENBMIIBIjANBgkq\\n' +\n 'hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqM921jXCXeqpRNCS9CBPOe5N7gMaEt+D\\n' +\n 's5uR3riZbqzRlHGiF1jZihkXfHAIQewDwy+Yz+Oec1aEZCQMhUHxZJPusuX0cJfj\\n' +\n 'b+UluFqHIijL2TfXJ3D0PVLLoNTQJZ8+GAPECyojAaNuoHbdVqxhOcznMsXIXVFq\\n' +\n 'yVLKDGvyKkJjai/iSPDrQMXufg3kWt0ISjNLvsG5IFXgP4gttsM8i0yvRd4QcHoo\\n' +\n 'DjvH7V3cS+CQqW5SnDrGnHToB0RLskE1ET+oNOfeN9PWOxQprMOX/zmJhnJQlTqD\\n' +\n 'QP7jcf7SddxrKFjuziFiouskJJyNDsMjt1Lf60+oHZhed2ogTeifGwIDAQABo2Mw\\n' +\n 'YTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUFBAF\\n' +\n 'cgJe/BBuZiGeZ8STfpkgRYQwHwYDVR0jBBgwFoAUFBAFcgJe/BBuZiGeZ8STfpkg\\n' +\n 'RYQwDQYJKoZIhvcNAQELBQADggEBAKAYUtlvDuX2UpZW9i1QgsjFuy/ErbW0dLHU\\n' +\n 'e/IcFtju2z6RLZ+uF+5A8Kme7IKG1hgt8s+w9TRVQS/7ukQzoK3TaN6XKXRosjtc\\n' +\n 'o9Rm4gYWM8bmglzY1TPNaiI4HC7546hSwJhubjN0bXCuj/0sHD6w2DkiGuwKNAef\\n' +\n 'yTu5vZhPkeNyXLykxkzz7bNp2/PtMBnzIp+WpS7uUDmWyScGPohKMq5PqvL59z+L\\n' +\n 'ZI3CYeMZrJ5VpXUg3fNNIz/83N3G0sk7wr0ohs/kHTP7xPOYB0zD7Ku4HA0Q9Swf\\n' +\n 'WX0qr6UQgTPMjfYDLffI7aEId0gxKw1eGYc6Cq5JAZ3ipi/cBFc=\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIEEjCCAvqgAwIBAgIJANew34ehz5l8MA0GCSqGSIb3DQEBCwUAMIGVMQswCQYD\\n' +\n 'VQQGEwJVUzEQMA4GA1UEBwwHU2VhdHRsZTETMBEGA1UECAwKV2FzaGluZ3RvbjEi\\n' +\n 'MCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1h\\n' +\n 'em9uIFJEUzEmMCQGA1UEAwwdQW1hem9uIFJEUyBtZS1zb3V0aC0xIFJvb3QgQ0Ew\\n' +\n 'HhcNMTkwNTEwMjE0ODI3WhcNMjQwNTA4MjE0ODI3WjCBlTELMAkGA1UEBhMCVVMx\\n' +\n 'EDAOBgNVBAcMB1NlYXR0bGUxEzARBgNVBAgMCldhc2hpbmd0b24xIjAgBgNVBAoM\\n' +\n 'GUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMx\\n' +\n 'JjAkBgNVBAMMHUFtYXpvbiBSRFMgbWUtc291dGgtMSBSb290IENBMIIBIjANBgkq\\n' +\n 'hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAp7BYV88MukcY+rq0r79+C8UzkT30fEfT\\n' +\n 'aPXbx1d6M7uheGN4FMaoYmL+JE1NZPaMRIPTHhFtLSdPccInvenRDIatcXX+jgOk\\n' +\n 'UA6lnHQ98pwN0pfDUyz/Vph4jBR9LcVkBbe0zdoKKp+HGbMPRU0N2yNrog9gM5O8\\n' +\n 'gkU/3O2csJ/OFQNnj4c2NQloGMUpEmedwJMOyQQfcUyt9CvZDfIPNnheUS29jGSw\\n' +\n 'ERpJe/AENu8Pxyc72jaXQuD+FEi2Ck6lBkSlWYQFhTottAeGvVFNCzKszCntrtqd\\n' +\n 'rdYUwurYsLTXDHv9nW2hfDUQa0mhXf9gNDOBIVAZugR9NqNRNyYLHQIDAQABo2Mw\\n' +\n 'YTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU54cf\\n' +\n 'DjgwBx4ycBH8+/r8WXdaiqYwHwYDVR0jBBgwFoAU54cfDjgwBx4ycBH8+/r8WXda\\n' +\n 'iqYwDQYJKoZIhvcNAQELBQADggEBAIIMTSPx/dR7jlcxggr+O6OyY49Rlap2laKA\\n' +\n 'eC/XI4ySP3vQkIFlP822U9Kh8a9s46eR0uiwV4AGLabcu0iKYfXjPkIprVCqeXV7\\n' +\n 'ny9oDtrbflyj7NcGdZLvuzSwgl9SYTJp7PVCZtZutsPYlbJrBPHwFABvAkMvRtDB\\n' +\n 'hitIg4AESDGPoCl94sYHpfDfjpUDMSrAMDUyO6DyBdZH5ryRMAs3lGtsmkkNUrso\\n' +\n 'aTW6R05681Z0mvkRdb+cdXtKOSuDZPoe2wJJIaz3IlNQNSrB5TImMYgmt6iAsFhv\\n' +\n '3vfTSTKrZDNTJn4ybG6pq1zWExoXsktZPylJly6R3RBwV6nwqBM=\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIEBjCCAu6gAwIBAgIJAMc0ZzaSUK51MA0GCSqGSIb3DQEBCwUAMIGPMQswCQYD\\n' +\n 'VQQGEwJVUzEQMA4GA1UEBwwHU2VhdHRsZTETMBEGA1UECAwKV2FzaGluZ3RvbjEi\\n' +\n 'MCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1h\\n' +\n 'em9uIFJEUzEgMB4GA1UEAwwXQW1hem9uIFJEUyBSb290IDIwMTkgQ0EwHhcNMTkw\\n' +\n 'ODIyMTcwODUwWhcNMjQwODIyMTcwODUwWjCBjzELMAkGA1UEBhMCVVMxEDAOBgNV\\n' +\n 'BAcMB1NlYXR0bGUxEzARBgNVBAgMCldhc2hpbmd0b24xIjAgBgNVBAoMGUFtYXpv\\n' +\n 'biBXZWIgU2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxIDAeBgNV\\n' +\n 'BAMMF0FtYXpvbiBSRFMgUm9vdCAyMDE5IENBMIIBIjANBgkqhkiG9w0BAQEFAAOC\\n' +\n 'AQ8AMIIBCgKCAQEArXnF/E6/Qh+ku3hQTSKPMhQQlCpoWvnIthzX6MK3p5a0eXKZ\\n' +\n 'oWIjYcNNG6UwJjp4fUXl6glp53Jobn+tWNX88dNH2n8DVbppSwScVE2LpuL+94vY\\n' +\n '0EYE/XxN7svKea8YvlrqkUBKyxLxTjh+U/KrGOaHxz9v0l6ZNlDbuaZw3qIWdD/I\\n' +\n '6aNbGeRUVtpM6P+bWIoxVl/caQylQS6CEYUk+CpVyJSkopwJlzXT07tMoDL5WgX9\\n' +\n 'O08KVgDNz9qP/IGtAcRduRcNioH3E9v981QO1zt/Gpb2f8NqAjUUCUZzOnij6mx9\\n' +\n 'McZ+9cWX88CRzR0vQODWuZscgI08NvM69Fn2SQIDAQABo2MwYTAOBgNVHQ8BAf8E\\n' +\n 'BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUc19g2LzLA5j0Kxc0LjZa\\n' +\n 'pmD/vB8wHwYDVR0jBBgwFoAUc19g2LzLA5j0Kxc0LjZapmD/vB8wDQYJKoZIhvcN\\n' +\n 'AQELBQADggEBAHAG7WTmyjzPRIM85rVj+fWHsLIvqpw6DObIjMWokpliCeMINZFV\\n' +\n 'ynfgBKsf1ExwbvJNzYFXW6dihnguDG9VMPpi2up/ctQTN8tm9nDKOy08uNZoofMc\\n' +\n 'NUZxKCEkVKZv+IL4oHoeayt8egtv3ujJM6V14AstMQ6SwvwvA93EP/Ug2e4WAXHu\\n' +\n 'cbI1NAbUgVDqp+DRdfvZkgYKryjTWd/0+1fS8X1bBZVWzl7eirNVnHbSH2ZDpNuY\\n' +\n '0SBd8dj5F6ld3t58ydZbrTHze7JJOd8ijySAp4/kiu9UfZWuTPABzDa/DSdz9Dk/\\n' +\n 'zPW4CXXvhLmE02TA9/HeCw3KEHIwicNuEfw=\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIEEDCCAvigAwIBAgIJAKFMXyltvuRdMA0GCSqGSIb3DQEBCwUAMIGUMQswCQYD\\n' +\n 'VQQGEwJVUzEQMA4GA1UEBwwHU2VhdHRsZTETMBEGA1UECAwKV2FzaGluZ3RvbjEi\\n' +\n 'MCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1h\\n' +\n 'em9uIFJEUzElMCMGA1UEAwwcQW1hem9uIFJEUyBCZXRhIFJvb3QgMjAxOSBDQTAe\\n' +\n 'Fw0xOTA4MTkxNzM4MjZaFw0yNDA4MTkxNzM4MjZaMIGUMQswCQYDVQQGEwJVUzEQ\\n' +\n 'MA4GA1UEBwwHU2VhdHRsZTETMBEGA1UECAwKV2FzaGluZ3RvbjEiMCAGA1UECgwZ\\n' +\n 'QW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEl\\n' +\n 'MCMGA1UEAwwcQW1hem9uIFJEUyBCZXRhIFJvb3QgMjAxOSBDQTCCASIwDQYJKoZI\\n' +\n 'hvcNAQEBBQADggEPADCCAQoCggEBAMkZdnIH9ndatGAcFo+DppGJ1HUt4x+zeO+0\\n' +\n 'ZZ29m0sfGetVulmTlv2d5b66e+QXZFWpcPQMouSxxYTW08TbrQiZngKr40JNXftA\\n' +\n 'atvzBqIImD4II0ZX5UEVj2h98qe/ypW5xaDN7fEa5e8FkYB1TEemPaWIbNXqchcL\\n' +\n 'tV7IJPr3Cd7Z5gZJlmujIVDPpMuSiNaal9/6nT9oqN+JSM1fx5SzrU5ssg1Vp1vv\\n' +\n '5Xab64uOg7wCJRB9R2GC9XD04odX6VcxUAGrZo6LR64ZSifupo3l+R5sVOc5i8NH\\n' +\n 'skdboTzU9H7+oSdqoAyhIU717PcqeDum23DYlPE2nGBWckE+eT8CAwEAAaNjMGEw\\n' +\n 'DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFK2hDBWl\\n' +\n 'sbHzt/EHd0QYOooqcFPhMB8GA1UdIwQYMBaAFK2hDBWlsbHzt/EHd0QYOooqcFPh\\n' +\n 'MA0GCSqGSIb3DQEBCwUAA4IBAQAO/718k8EnOqJDx6wweUscGTGL/QdKXUzTVRAx\\n' +\n 'JUsjNUv49mH2HQVEW7oxszfH6cPCaupNAddMhQc4C/af6GHX8HnqfPDk27/yBQI+\\n' +\n 'yBBvIanGgxv9c9wBbmcIaCEWJcsLp3HzXSYHmjiqkViXwCpYfkoV3Ns2m8bp+KCO\\n' +\n 'y9XmcCKRaXkt237qmoxoh2sGmBHk2UlQtOsMC0aUQ4d7teAJG0q6pbyZEiPyKZY1\\n' +\n 'XR/UVxMJL0Q4iVpcRS1kaNCMfqS2smbLJeNdsan8pkw1dvPhcaVTb7CvjhJtjztF\\n' +\n 'YfDzAI5794qMlWxwilKMmUvDlPPOTen8NNHkLwWvyFCH7Doh\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIEFjCCAv6gAwIBAgIJAMzYZJ+R9NBVMA0GCSqGSIb3DQEBCwUAMIGXMQswCQYD\\n' +\n 'VQQGEwJVUzEQMA4GA1UEBwwHU2VhdHRsZTETMBEGA1UECAwKV2FzaGluZ3RvbjEi\\n' +\n 'MCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1h\\n' +\n 'em9uIFJEUzEoMCYGA1UEAwwfQW1hem9uIFJEUyBQcmV2aWV3IFJvb3QgMjAxOSBD\\n' +\n 'QTAeFw0xOTA4MjEyMjI5NDlaFw0yNDA4MjEyMjI5NDlaMIGXMQswCQYDVQQGEwJV\\n' +\n 'UzEQMA4GA1UEBwwHU2VhdHRsZTETMBEGA1UECAwKV2FzaGluZ3RvbjEiMCAGA1UE\\n' +\n 'CgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJE\\n' +\n 'UzEoMCYGA1UEAwwfQW1hem9uIFJEUyBQcmV2aWV3IFJvb3QgMjAxOSBDQTCCASIw\\n' +\n 'DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM7kkS6vjgKKQTPynC2NjdN5aPPV\\n' +\n 'O71G0JJS/2ARVBVJd93JLiGovVJilfWYfwZCs4gTRSSjrUD4D4HyqCd6A+eEEtJq\\n' +\n 'M0DEC7i0dC+9WNTsPszuB206Jy2IUmxZMIKJAA1NHSbIMjB+b6/JhbSUi7nKdbR/\\n' +\n 'brj83bF+RoSA+ogrgX7mQbxhmFcoZN9OGaJgYKsKWUt5Wqv627KkGodUK8mDepgD\\n' +\n 'S3ZfoRQRx3iceETpcmHJvaIge6+vyDX3d9Z22jmvQ4AKv3py2CmU2UwuhOltFDwB\\n' +\n '0ddtb39vgwrJxaGfiMRHpEP1DfNLWHAnA69/pgZPwIggidS+iBPUhgucMp8CAwEA\\n' +\n 'AaNjMGEwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE\\n' +\n 'FGnTGpQuQ2H/DZlXMQijZEhjs7TdMB8GA1UdIwQYMBaAFGnTGpQuQ2H/DZlXMQij\\n' +\n 'ZEhjs7TdMA0GCSqGSIb3DQEBCwUAA4IBAQC3xz1vQvcXAfpcZlngiRWeqU8zQAMQ\\n' +\n 'LZPCFNv7PVk4pmqX+ZiIRo4f9Zy7TrOVcboCnqmP/b/mNq0gVF4O+88jwXJZD+f8\\n' +\n '/RnABMZcnGU+vK0YmxsAtYU6TIb1uhRFmbF8K80HHbj9vSjBGIQdPCbvmR2zY6VJ\\n' +\n 'BYM+w9U9hp6H4DVMLKXPc1bFlKA5OBTgUtgkDibWJKFOEPW3UOYwp9uq6pFoN0AO\\n' +\n 'xMTldqWFsOF3bJIlvOY0c/1EFZXu3Ns6/oCP//Ap9vumldYMUZWmbK+gK33FPOXV\\n' +\n '8BQ6jNC29icv7lLDpRPwjibJBXX+peDR5UK4FdYcswWEB1Tix5X8dYu6\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIECTCCAvGgAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwgZUxCzAJBgNVBAYTAlVT\\n' +\n 'MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\\n' +\n 'DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\\n' +\n 'MSYwJAYDVQQDDB1BbWF6b24gUkRTIGFmLXNvdXRoLTEgUm9vdCBDQTAeFw0xOTEw\\n' +\n 'MjgxODA2NTNaFw0yNDEwMjgxODA2NTNaMIGQMQswCQYDVQQGEwJVUzETMBEGA1UE\\n' +\n 'CAwKV2FzaGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9u\\n' +\n 'IFdlYiBTZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEhMB8GA1UE\\n' +\n 'AwwYQW1hem9uIFJEUyBhZi1zb3V0aC0xIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC\\n' +\n 'AQ8AMIIBCgKCAQEAvtV1OqmFa8zCVQSKOvPUJERLVFtd4rZmDpImc5rIoeBk7w/P\\n' +\n '9lcKUJjO8R/w1a2lJXx3oQ81tiY0Piw6TpT62YWVRMWrOw8+Vxq1dNaDSFp9I8d0\\n' +\n 'UHillSSbOk6FOrPDp+R6AwbGFqUDebbN5LFFoDKbhNmH1BVS0a6YNKpGigLRqhka\\n' +\n 'cClPslWtPqtjbaP3Jbxl26zWzLo7OtZl98dR225pq8aApNBwmtgA7Gh60HK/cX0t\\n' +\n '32W94n8D+GKSg6R4MKredVFqRTi9hCCNUu0sxYPoELuM+mHiqB5NPjtm92EzCWs+\\n' +\n '+vgWhMc6GxG+82QSWx1Vj8sgLqtE/vLrWddf5QIDAQABo2YwZDAOBgNVHQ8BAf8E\\n' +\n 'BAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUuLB4gYVJrSKJj/Gz\\n' +\n 'pqc6yeA+RcAwHwYDVR0jBBgwFoAUEEi/WWMcBJsoGXg+EZwkQ0MscZQwDQYJKoZI\\n' +\n 'hvcNAQELBQADggEBABauYOZxUhe9/RhzGJ8MsWCz8eKcyDVd4FCnY6Qh+9wcmYNT\\n' +\n 'LtnD88LACtJKb/b81qYzcB0Em6+zVJ3Z9jznfr6buItE6es9wAoja22Xgv44BTHL\\n' +\n 'rimbgMwpTt3uEMXDffaS0Ww6YWb3pSE0XYI2ISMWz+xRERRf+QqktSaL39zuiaW5\\n' +\n 'tfZMre+YhohRa/F0ZQl3RCd6yFcLx4UoSPqQsUl97WhYzwAxZZfwvLJXOc4ATt3u\\n' +\n 'VlCUylNDkaZztDJc/yN5XQoK9W5nOt2cLu513MGYKbuarQr8f+gYU8S+qOyuSRSP\\n' +\n 'NRITzwCRVnsJE+2JmcRInn/NcanB7uOGqTvJ9+c=\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIECTCCAvGgAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwgZUxCzAJBgNVBAYTAlVT\\n' +\n 'MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\\n' +\n 'DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\\n' +\n 'MSYwJAYDVQQDDB1BbWF6b24gUkRTIGV1LXNvdXRoLTEgUm9vdCBDQTAeFw0xOTEw\\n' +\n 'MzAyMDIxMzBaFw0yNDEwMzAyMDIxMzBaMIGQMQswCQYDVQQGEwJVUzETMBEGA1UE\\n' +\n 'CAwKV2FzaGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9u\\n' +\n 'IFdlYiBTZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEhMB8GA1UE\\n' +\n 'AwwYQW1hem9uIFJEUyBldS1zb3V0aC0xIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC\\n' +\n 'AQ8AMIIBCgKCAQEAtEyjYcajx6xImJn8Vz1zjdmL4ANPgQXwF7+tF7xccmNAZETb\\n' +\n 'bzb3I9i5fZlmrRaVznX+9biXVaGxYzIUIR3huQ3Q283KsDYnVuGa3mk690vhvJbB\\n' +\n 'QIPgKa5mVwJppnuJm78KqaSpi0vxyCPe3h8h6LLFawVyWrYNZ4okli1/U582eef8\\n' +\n 'RzJp/Ear3KgHOLIiCdPDF0rjOdCG1MOlDLixVnPn9IYOciqO+VivXBg+jtfc5J+L\\n' +\n 'AaPm0/Yx4uELt1tkbWkm4BvTU/gBOODnYziITZM0l6Fgwvbwgq5duAtKW+h031lC\\n' +\n '37rEvrclqcp4wrsUYcLAWX79ZyKIlRxcAdvEhQIDAQABo2YwZDAOBgNVHQ8BAf8E\\n' +\n 'BAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQU7zPyc0azQxnBCe7D\\n' +\n 'b9KAadH1QSEwHwYDVR0jBBgwFoAUFBAFcgJe/BBuZiGeZ8STfpkgRYQwDQYJKoZI\\n' +\n 'hvcNAQELBQADggEBAFGaNiYxg7yC/xauXPlaqLCtwbm2dKyK9nIFbF/7be8mk7Q3\\n' +\n 'MOA0of1vGHPLVQLr6bJJpD9MAbUcm4cPAwWaxwcNpxOjYOFDaq10PCK4eRAxZWwF\\n' +\n 'NJRIRmGsl8NEsMNTMCy8X+Kyw5EzH4vWFl5Uf2bGKOeFg0zt43jWQVOX6C+aL3Cd\\n' +\n 'pRS5MhmYpxMG8irrNOxf4NVFE2zpJOCm3bn0STLhkDcV/ww4zMzObTJhiIb5wSWn\\n' +\n 'EXKKWhUXuRt7A2y1KJtXpTbSRHQxE++69Go1tWhXtRiULCJtf7wF2Ksm0RR/AdXT\\n' +\n '1uR1vKyH5KBJPX3ppYkQDukoHTFR0CpB+G84NLo=\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIECTCCAvGgAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwgZUxCzAJBgNVBAYTAlVT\\n' +\n 'MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\\n' +\n 'DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\\n' +\n 'MSYwJAYDVQQDDB1BbWF6b24gUkRTIG1lLXNvdXRoLTEgUm9vdCBDQTAeFw0xOTA1\\n' +\n 'MTAyMTU4NDNaFw0yNTA2MDExMjAwMDBaMIGQMQswCQYDVQQGEwJVUzETMBEGA1UE\\n' +\n 'CAwKV2FzaGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9u\\n' +\n 'IFdlYiBTZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEhMB8GA1UE\\n' +\n 'AwwYQW1hem9uIFJEUyBtZS1zb3V0aC0xIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC\\n' +\n 'AQ8AMIIBCgKCAQEAudOYPZH+ihJAo6hNYMB5izPVBe3TYhnZm8+X3IoaaYiKtsp1\\n' +\n 'JJhkTT0CEejYIQ58Fh4QrMUyWvU8qsdK3diNyQRoYLbctsBPgxBR1u07eUJDv38/\\n' +\n 'C1JlqgHmMnMi4y68Iy7ymv50QgAMuaBqgEBRI1R6Lfbyrb2YvH5txjJyTVMwuCfd\\n' +\n 'YPAtZVouRz0JxmnfsHyxjE+So56uOKTDuw++Ho4HhZ7Qveej7XB8b+PIPuroknd3\\n' +\n 'FQB5RVbXRvt5ZcVD4F2fbEdBniF7FAF4dEiofVCQGQ2nynT7dZdEIPfPdH3n7ZmE\\n' +\n 'lAOmwHQ6G83OsiHRBLnbp+QZRgOsjkHJxT20bQIDAQABo2YwZDAOBgNVHQ8BAf8E\\n' +\n 'BAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUOEVDM7VomRH4HVdA\\n' +\n 'QvIMNq2tXOcwHwYDVR0jBBgwFoAU54cfDjgwBx4ycBH8+/r8WXdaiqYwDQYJKoZI\\n' +\n 'hvcNAQELBQADggEBAHhvMssj+Th8IpNePU6RH0BiL6o9c437R3Q4IEJeFdYL+nZz\\n' +\n 'PW/rELDPvLRUNMfKM+KzduLZ+l29HahxefejYPXtvXBlq/E/9czFDD4fWXg+zVou\\n' +\n 'uDXhyrV4kNmP4S0eqsAP/jQHPOZAMFA4yVwO9hlqmePhyDnszCh9c1PfJSBh49+b\\n' +\n '4w7i/L3VBOMt8j3EKYvqz0gVfpeqhJwL4Hey8UbVfJRFJMJzfNHpePqtDRAY7yjV\\n' +\n 'PYquRaV2ab/E+/7VFkWMM4tazYz/qsYA2jSH+4xDHvYk8LnsbcrF9iuidQmEc5sb\\n' +\n 'FgcWaSKG4DJjcI5k7AJLWcXyTDt21Ci43LE+I9Q=\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIECDCCAvCgAwIBAgICVIYwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\\n' +\n 'MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\\n' +\n 'DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\\n' +\n 'MSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MDQxNzEz\\n' +\n 'MDRaFw0yNDA4MjIxNzA4NTBaMIGVMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\\n' +\n 'aGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\\n' +\n 'ZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEmMCQGA1UEAwwdQW1h\\n' +\n 'em9uIFJEUyBhcC1zb3V0aC0xIDIwMTkgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IB\\n' +\n 'DwAwggEKAoIBAQDUYOz1hGL42yUCrcsMSOoU8AeD/3KgZ4q7gP+vAz1WnY9K/kim\\n' +\n 'eWN/2Qqzlo3+mxSFQFyD4MyV3+CnCPnBl9Sh1G/F6kThNiJ7dEWSWBQGAB6HMDbC\\n' +\n 'BaAsmUc1UIz8sLTL3fO+S9wYhA63Wun0Fbm/Rn2yk/4WnJAaMZcEtYf6e0KNa0LM\\n' +\n 'p/kN/70/8cD3iz3dDR8zOZFpHoCtf0ek80QqTich0A9n3JLxR6g6tpwoYviVg89e\\n' +\n 'qCjQ4axxOkWWeusLeTJCcY6CkVyFvDAKvcUl1ytM5AiaUkXblE7zDFXRM4qMMRdt\\n' +\n 'lPm8d3pFxh0fRYk8bIKnpmtOpz3RIctDrZZxAgMBAAGjZjBkMA4GA1UdDwEB/wQE\\n' +\n 'AwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBT99wKJftD3jb4sHoHG\\n' +\n 'i3uGlH6W6TAfBgNVHSMEGDAWgBRzX2DYvMsDmPQrFzQuNlqmYP+8HzANBgkqhkiG\\n' +\n '9w0BAQsFAAOCAQEAZ17hhr3dII3hUfuHQ1hPWGrpJOX/G9dLzkprEIcCidkmRYl+\\n' +\n 'hu1Pe3caRMh/17+qsoEErmnVq5jNY9X1GZL04IZH8YbHc7iRHw3HcWAdhN8633+K\\n' +\n 'jYEB2LbJ3vluCGnCejq9djDb6alOugdLMJzxOkHDhMZ6/gYbECOot+ph1tQuZXzD\\n' +\n 'tZ7prRsrcuPBChHlPjmGy8M9z8u+kF196iNSUGC4lM8vLkHM7ycc1/ZOwRq9aaTe\\n' +\n 'iOghbQQyAEe03MWCyDGtSmDfr0qEk+CHN+6hPiaL8qKt4s+V9P7DeK4iW08ny8Ox\\n' +\n 'AVS7u0OK/5+jKMAMrKwpYrBydOjTUTHScocyNw==\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIEBzCCAu+gAwIBAgICQ2QwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\\n' +\n 'MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\\n' +\n 'DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\\n' +\n 'MSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MDUxODQ2\\n' +\n 'MjlaFw0yNDA4MjIxNzA4NTBaMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\\n' +\n 'aGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\\n' +\n 'ZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzElMCMGA1UEAwwcQW1h\\n' +\n 'em9uIFJEUyBzYS1lYXN0LTEgMjAxOSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP\\n' +\n 'ADCCAQoCggEBAMMvR+ReRnOzqJzoaPipNTt1Z2VA968jlN1+SYKUrYM3No+Vpz0H\\n' +\n 'M6Tn0oYB66ByVsXiGc28ulsqX1HbHsxqDPwvQTKvO7SrmDokoAkjJgLocOLUAeld\\n' +\n '5AwvUjxGRP6yY90NV7X786MpnYb2Il9DIIaV9HjCmPt+rjy2CZjS0UjPjCKNfB8J\\n' +\n 'bFjgW6GGscjeyGb/zFwcom5p4j0rLydbNaOr9wOyQrtt3ZQWLYGY9Zees/b8pmcc\\n' +\n 'Jt+7jstZ2UMV32OO/kIsJ4rMUn2r/uxccPwAc1IDeRSSxOrnFKhW3Cu69iB3bHp7\\n' +\n 'JbawY12g7zshE4I14sHjv3QoXASoXjx4xgMCAwEAAaNmMGQwDgYDVR0PAQH/BAQD\\n' +\n 'AgEGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFI1Fc/Ql2jx+oJPgBVYq\\n' +\n 'ccgP0pQ8MB8GA1UdIwQYMBaAFHNfYNi8ywOY9CsXNC42WqZg/7wfMA0GCSqGSIb3\\n' +\n 'DQEBCwUAA4IBAQB4VVVabVp70myuYuZ3vltQIWqSUMhkaTzehMgGcHjMf9iLoZ/I\\n' +\n '93KiFUSGnek5cRePyS9wcpp0fcBT3FvkjpUdCjVtdttJgZFhBxgTd8y26ImdDDMR\\n' +\n '4+BUuhI5msvjL08f+Vkkpu1GQcGmyFVPFOy/UY8iefu+QyUuiBUnUuEDd49Hw0Fn\\n' +\n '/kIPII6Vj82a2mWV/Q8e+rgN8dIRksRjKI03DEoP8lhPlsOkhdwU6Uz9Vu6NOB2Q\\n' +\n 'Ls1kbcxAc7cFSyRVJEhh12Sz9d0q/CQSTFsVJKOjSNQBQfVnLz1GwO/IieUEAr4C\\n' +\n 'jkTntH0r1LX5b/GwN4R887LvjAEdTbg1his7\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIECDCCAvCgAwIBAgIDAIkHMA0GCSqGSIb3DQEBCwUAMIGPMQswCQYDVQQGEwJV\\n' +\n 'UzEQMA4GA1UEBwwHU2VhdHRsZTETMBEGA1UECAwKV2FzaGluZ3RvbjEiMCAGA1UE\\n' +\n 'CgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJE\\n' +\n 'UzEgMB4GA1UEAwwXQW1hem9uIFJEUyBSb290IDIwMTkgQ0EwHhcNMTkwOTA2MTc0\\n' +\n 'MDIxWhcNMjQwODIyMTcwODUwWjCBlDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCldh\\n' +\n 'c2hpbmd0b24xEDAOBgNVBAcMB1NlYXR0bGUxIjAgBgNVBAoMGUFtYXpvbiBXZWIg\\n' +\n 'U2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxJTAjBgNVBAMMHEFt\\n' +\n 'YXpvbiBSRFMgdXMtd2VzdC0xIDIwMTkgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IB\\n' +\n 'DwAwggEKAoIBAQDD2yzbbAl77OofTghDMEf624OvU0eS9O+lsdO0QlbfUfWa1Kd6\\n' +\n '0WkgjkLZGfSRxEHMCnrv4UPBSK/Qwn6FTjkDLgemhqBtAnplN4VsoDL+BkRX4Wwq\\n' +\n '/dSQJE2b+0hm9w9UMVGFDEq1TMotGGTD2B71eh9HEKzKhGzqiNeGsiX4VV+LJzdH\\n' +\n 'uM23eGisNqmd4iJV0zcAZ+Gbh2zK6fqTOCvXtm7Idccv8vZZnyk1FiWl3NR4WAgK\\n' +\n 'AkvWTIoFU3Mt7dIXKKClVmvssG8WHCkd3Xcb4FHy/G756UZcq67gMMTX/9fOFM/v\\n' +\n 'l5C0+CHl33Yig1vIDZd+fXV1KZD84dEJfEvHAgMBAAGjZjBkMA4GA1UdDwEB/wQE\\n' +\n 'AwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBR+ap20kO/6A7pPxo3+\\n' +\n 'T3CfqZpQWjAfBgNVHSMEGDAWgBRzX2DYvMsDmPQrFzQuNlqmYP+8HzANBgkqhkiG\\n' +\n '9w0BAQsFAAOCAQEAHCJky2tPjPttlDM/RIqExupBkNrnSYnOK4kr9xJ3sl8UF2DA\\n' +\n 'PAnYsjXp3rfcjN/k/FVOhxwzi3cXJF/2Tjj39Bm/OEfYTOJDNYtBwB0VVH4ffa/6\\n' +\n 'tZl87jaIkrxJcreeeHqYMnIxeN0b/kliyA+a5L2Yb0VPjt9INq34QDc1v74FNZ17\\n' +\n '4z8nr1nzg4xsOWu0Dbjo966lm4nOYIGBRGOKEkHZRZ4mEiMgr3YLkv8gSmeitx57\\n' +\n 'Z6dVemNtUic/LVo5Iqw4n3TBS0iF2C1Q1xT/s3h+0SXZlfOWttzSluDvoMv5PvCd\\n' +\n 'pFjNn+aXLAALoihL1MJSsxydtsLjOBro5eK0Vw==\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIEDDCCAvSgAwIBAgICOFAwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\\n' +\n 'MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\\n' +\n 'DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\\n' +\n 'MSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTAxNzQ2\\n' +\n 'MjFaFw0yNDA4MjIxNzA4NTBaMIGZMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\\n' +\n 'aGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\\n' +\n 'ZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEqMCgGA1UEAwwhQW1h\\n' +\n 'em9uIFJEUyBhcC1ub3J0aGVhc3QtMiAyMDE5IENBMIIBIjANBgkqhkiG9w0BAQEF\\n' +\n 'AAOCAQ8AMIIBCgKCAQEAzU72e6XbaJbi4HjJoRNjKxzUEuChKQIt7k3CWzNnmjc5\\n' +\n '8I1MjCpa2W1iw1BYVysXSNSsLOtUsfvBZxi/1uyMn5ZCaf9aeoA9UsSkFSZBjOCN\\n' +\n 'DpKPCmfV1zcEOvJz26+1m8WDg+8Oa60QV0ou2AU1tYcw98fOQjcAES0JXXB80P2s\\n' +\n '3UfkNcnDz+l4k7j4SllhFPhH6BQ4lD2NiFAP4HwoG6FeJUn45EPjzrydxjq6v5Fc\\n' +\n 'cQ8rGuHADVXotDbEhaYhNjIrsPL+puhjWfhJjheEw8c4whRZNp6gJ/b6WEes/ZhZ\\n' +\n 'h32DwsDsZw0BfRDUMgUn8TdecNexHUw8vQWeC181hwIDAQABo2YwZDAOBgNVHQ8B\\n' +\n 'Af8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUwW9bWgkWkr0U\\n' +\n 'lrOsq2kvIdrECDgwHwYDVR0jBBgwFoAUc19g2LzLA5j0Kxc0LjZapmD/vB8wDQYJ\\n' +\n 'KoZIhvcNAQELBQADggEBAEugF0Gj7HVhX0ehPZoGRYRt3PBuI2YjfrrJRTZ9X5wc\\n' +\n '9T8oHmw07mHmNy1qqWvooNJg09bDGfB0k5goC2emDiIiGfc/kvMLI7u+eQOoMKj6\\n' +\n 'mkfCncyRN3ty08Po45vTLBFZGUvtQmjM6yKewc4sXiASSBmQUpsMbiHRCL72M5qV\\n' +\n 'obcJOjGcIdDTmV1BHdWT+XcjynsGjUqOvQWWhhLPrn4jWe6Xuxll75qlrpn3IrIx\\n' +\n 'CRBv/5r7qbcQJPOgwQsyK4kv9Ly8g7YT1/vYBlR3cRsYQjccw5ceWUj2DrMVWhJ4\\n' +\n 'prf+E3Aa4vYmLLOUUvKnDQ1k3RGNu56V0tonsQbfsaM=\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIECjCCAvKgAwIBAgICEzUwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\\n' +\n 'MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\\n' +\n 'DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\\n' +\n 'MSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTAyMDUy\\n' +\n 'MjVaFw0yNDA4MjIxNzA4NTBaMIGXMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\\n' +\n 'aGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\\n' +\n 'ZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEoMCYGA1UEAwwfQW1h\\n' +\n 'em9uIFJEUyBjYS1jZW50cmFsLTEgMjAxOSBDQTCCASIwDQYJKoZIhvcNAQEBBQAD\\n' +\n 'ggEPADCCAQoCggEBAOxHqdcPSA2uBjsCP4DLSlqSoPuQ/X1kkJLusVRKiQE2zayB\\n' +\n 'viuCBt4VB9Qsh2rW3iYGM+usDjltGnI1iUWA5KHcvHszSMkWAOYWLiMNKTlg6LCp\\n' +\n 'XnE89tvj5dIH6U8WlDvXLdjB/h30gW9JEX7S8supsBSci2GxEzb5mRdKaDuuF/0O\\n' +\n 'qvz4YE04pua3iZ9QwmMFuTAOYzD1M72aOpj+7Ac+YLMM61qOtU+AU6MndnQkKoQi\\n' +\n 'qmUN2A9IFaqHFzRlSdXwKCKUA4otzmz+/N3vFwjb5F4DSsbsrMfjeHMo6o/nb6Nh\\n' +\n 'YDb0VJxxPee6TxSuN7CQJ2FxMlFUezcoXqwqXD0CAwEAAaNmMGQwDgYDVR0PAQH/\\n' +\n 'BAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFDGGpon9WfIpsggE\\n' +\n 'CxHq8hZ7E2ESMB8GA1UdIwQYMBaAFHNfYNi8ywOY9CsXNC42WqZg/7wfMA0GCSqG\\n' +\n 'SIb3DQEBCwUAA4IBAQAvpeQYEGZvoTVLgV9rd2+StPYykMsmFjWQcyn3dBTZRXC2\\n' +\n 'lKq7QhQczMAOhEaaN29ZprjQzsA2X/UauKzLR2Uyqc2qOeO9/YOl0H3qauo8C/W9\\n' +\n 'r8xqPbOCDLEXlOQ19fidXyyEPHEq5WFp8j+fTh+s8WOx2M7IuC0ANEetIZURYhSp\\n' +\n 'xl9XOPRCJxOhj7JdelhpweX0BJDNHeUFi0ClnFOws8oKQ7sQEv66d5ddxqqZ3NVv\\n' +\n 'RbCvCtEutQMOUMIuaygDlMn1anSM8N7Wndx8G6+Uy67AnhjGx7jw/0YPPxopEj6x\\n' +\n 'JXP8j0sJbcT9K/9/fPVLNT25RvQ/93T2+IQL4Ca2\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIEBzCCAu+gAwIBAgICYpgwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\\n' +\n 'MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\\n' +\n 'DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\\n' +\n 'MSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTExNzMx\\n' +\n 'NDhaFw0yNDA4MjIxNzA4NTBaMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\\n' +\n 'aGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\\n' +\n 'ZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzElMCMGA1UEAwwcQW1h\\n' +\n 'em9uIFJEUyBldS13ZXN0LTEgMjAxOSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP\\n' +\n 'ADCCAQoCggEBAMk3YdSZ64iAYp6MyyKtYJtNzv7zFSnnNf6vv0FB4VnfITTMmOyZ\\n' +\n 'LXqKAT2ahZ00hXi34ewqJElgU6eUZT/QlzdIu359TEZyLVPwURflL6SWgdG01Q5X\\n' +\n 'O++7fSGcBRyIeuQWs9FJNIIqK8daF6qw0Rl5TXfu7P9dBc3zkgDXZm2DHmxGDD69\\n' +\n '7liQUiXzoE1q2Z9cA8+jirDioJxN9av8hQt12pskLQumhlArsMIhjhHRgF03HOh5\\n' +\n 'tvi+RCfihVOxELyIRTRpTNiIwAqfZxxTWFTgfn+gijTmd0/1DseAe82aYic8JbuS\\n' +\n 'EMbrDduAWsqrnJ4GPzxHKLXX0JasCUcWyMECAwEAAaNmMGQwDgYDVR0PAQH/BAQD\\n' +\n 'AgEGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFPLtsq1NrwJXO13C9eHt\\n' +\n 'sLY11AGwMB8GA1UdIwQYMBaAFHNfYNi8ywOY9CsXNC42WqZg/7wfMA0GCSqGSIb3\\n' +\n 'DQEBCwUAA4IBAQAnWBKj5xV1A1mYd0kIgDdkjCwQkiKF5bjIbGkT3YEFFbXoJlSP\\n' +\n '0lZZ/hDaOHI8wbLT44SzOvPEEmWF9EE7SJzkvSdQrUAWR9FwDLaU427ALI3ngNHy\\n' +\n 'lGJ2hse1fvSRNbmg8Sc9GBv8oqNIBPVuw+AJzHTacZ1OkyLZrz1c1QvwvwN2a+Jd\\n' +\n 'vH0V0YIhv66llKcYDMUQJAQi4+8nbRxXWv6Gq3pvrFoorzsnkr42V3JpbhnYiK+9\\n' +\n 'nRKd4uWl62KRZjGkfMbmsqZpj2fdSWMY1UGyN1k+kDmCSWYdrTRDP0xjtIocwg+A\\n' +\n 'J116n4hV/5mbA0BaPiS2krtv17YAeHABZcvz\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIECjCCAvKgAwIBAgICV2YwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\\n' +\n 'MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\\n' +\n 'DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\\n' +\n 'MSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTExOTM2\\n' +\n 'MjBaFw0yNDA4MjIxNzA4NTBaMIGXMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\\n' +\n 'aGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\\n' +\n 'ZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEoMCYGA1UEAwwfQW1h\\n' +\n 'em9uIFJEUyBldS1jZW50cmFsLTEgMjAxOSBDQTCCASIwDQYJKoZIhvcNAQEBBQAD\\n' +\n 'ggEPADCCAQoCggEBAMEx54X2pHVv86APA0RWqxxRNmdkhAyp2R1cFWumKQRofoFv\\n' +\n 'n+SPXdkpIINpMuEIGJANozdiEz7SPsrAf8WHyD93j/ZxrdQftRcIGH41xasetKGl\\n' +\n 'I67uans8d+pgJgBKGb/Z+B5m+UsIuEVekpvgpwKtmmaLFC/NCGuSsJoFsRqoa6Gh\\n' +\n 'm34W6yJoY87UatddCqLY4IIXaBFsgK9Q/wYzYLbnWM6ZZvhJ52VMtdhcdzeTHNW0\\n' +\n '5LGuXJOF7Ahb4JkEhoo6TS2c0NxB4l4MBfBPgti+O7WjR3FfZHpt18A6Zkq6A2u6\\n' +\n 'D/oTSL6c9/3sAaFTFgMyL3wHb2YlW0BPiljZIqECAwEAAaNmMGQwDgYDVR0PAQH/\\n' +\n 'BAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFOcAToAc6skWffJa\\n' +\n 'TnreaswAfrbcMB8GA1UdIwQYMBaAFHNfYNi8ywOY9CsXNC42WqZg/7wfMA0GCSqG\\n' +\n 'SIb3DQEBCwUAA4IBAQA1d0Whc1QtspK496mFWfFEQNegLh0a9GWYlJm+Htcj5Nxt\\n' +\n 'DAIGXb+8xrtOZFHmYP7VLCT5Zd2C+XytqseK/+s07iAr0/EPF+O2qcyQWMN5KhgE\\n' +\n 'cXw2SwuP9FPV3i+YAm11PBVeenrmzuk9NrdHQ7TxU4v7VGhcsd2C++0EisrmquWH\\n' +\n 'mgIfmVDGxphwoES52cY6t3fbnXmTkvENvR+h3rj+fUiSz0aSo+XZUGHPgvuEKM/W\\n' +\n 'CBD9Smc9CBoBgvy7BgHRgRUmwtABZHFUIEjHI5rIr7ZvYn+6A0O6sogRfvVYtWFc\\n' +\n 'qpyrW1YX8mD0VlJ8fGKM3G+aCOsiiPKDV/Uafrm+\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIECDCCAvCgAwIBAgICGAcwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\\n' +\n 'MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\\n' +\n 'DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\\n' +\n 'MSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTIxODE5\\n' +\n 'NDRaFw0yNDA4MjIxNzA4NTBaMIGVMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\\n' +\n 'aGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\\n' +\n 'ZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEmMCQGA1UEAwwdQW1h\\n' +\n 'em9uIFJEUyBldS1ub3J0aC0xIDIwMTkgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IB\\n' +\n 'DwAwggEKAoIBAQCiIYnhe4UNBbdBb/nQxl5giM0XoVHWNrYV5nB0YukA98+TPn9v\\n' +\n 'Aoj1RGYmtryjhrf01Kuv8SWO+Eom95L3zquoTFcE2gmxCfk7bp6qJJ3eHOJB+QUO\\n' +\n 'XsNRh76fwDzEF1yTeZWH49oeL2xO13EAx4PbZuZpZBttBM5zAxgZkqu4uWQczFEs\\n' +\n 'JXfla7z2fvWmGcTagX10O5C18XaFroV0ubvSyIi75ue9ykg/nlFAeB7O0Wxae88e\\n' +\n 'uhiBEFAuLYdqWnsg3459NfV8Yi1GnaitTym6VI3tHKIFiUvkSiy0DAlAGV2iiyJE\\n' +\n 'q+DsVEO4/hSINJEtII4TMtysOsYPpINqeEzRAgMBAAGjZjBkMA4GA1UdDwEB/wQE\\n' +\n 'AwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBRR0UpnbQyjnHChgmOc\\n' +\n 'hnlc0PogzTAfBgNVHSMEGDAWgBRzX2DYvMsDmPQrFzQuNlqmYP+8HzANBgkqhkiG\\n' +\n '9w0BAQsFAAOCAQEAKJD4xVzSf4zSGTBJrmamo86jl1NHQxXUApAZuBZEc8tqC6TI\\n' +\n 'T5CeoSr9CMuVC8grYyBjXblC4OsM5NMvmsrXl/u5C9dEwtBFjo8mm53rOOIm1fxl\\n' +\n 'I1oYB/9mtO9ANWjkykuLzWeBlqDT/i7ckaKwalhLODsRDO73vRhYNjsIUGloNsKe\\n' +\n 'pxw3dzHwAZx4upSdEVG4RGCZ1D0LJ4Gw40OfD69hfkDfRVVxKGrbEzqxXRvovmDc\\n' +\n 'tKLdYZO/6REoca36v4BlgIs1CbUXJGLSXUwtg7YXGLSVBJ/U0+22iGJmBSNcoyUN\\n' +\n 'cjPFD9JQEhDDIYYKSGzIYpvslvGc4T5ISXFiuQ==\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIEBzCCAu+gAwIBAgICZIEwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\\n' +\n 'MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\\n' +\n 'DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\\n' +\n 'MSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTIyMTMy\\n' +\n 'MzJaFw0yNDA4MjIxNzA4NTBaMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\\n' +\n 'aGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\\n' +\n 'ZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzElMCMGA1UEAwwcQW1h\\n' +\n 'em9uIFJEUyBldS13ZXN0LTIgMjAxOSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP\\n' +\n 'ADCCAQoCggEBALGiwqjiF7xIjT0Sx7zB3764K2T2a1DHnAxEOr+/EIftWKxWzT3u\\n' +\n 'PFwS2eEZcnKqSdRQ+vRzonLBeNLO4z8aLjQnNbkizZMBuXGm4BqRm1Kgq3nlLDQn\\n' +\n '7YqdijOq54SpShvR/8zsO4sgMDMmHIYAJJOJqBdaus2smRt0NobIKc0liy7759KB\\n' +\n '6kmQ47Gg+kfIwxrQA5zlvPLeQImxSoPi9LdbRoKvu7Iot7SOa+jGhVBh3VdqndJX\\n' +\n '7tm/saj4NE375csmMETFLAOXjat7zViMRwVorX4V6AzEg1vkzxXpA9N7qywWIT5Y\\n' +\n 'fYaq5M8i6vvLg0CzrH9fHORtnkdjdu1y+0MCAwEAAaNmMGQwDgYDVR0PAQH/BAQD\\n' +\n 'AgEGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFFOhOx1yt3Z7mvGB9jBv\\n' +\n '2ymdZwiOMB8GA1UdIwQYMBaAFHNfYNi8ywOY9CsXNC42WqZg/7wfMA0GCSqGSIb3\\n' +\n 'DQEBCwUAA4IBAQBehqY36UGDvPVU9+vtaYGr38dBbp+LzkjZzHwKT1XJSSUc2wqM\\n' +\n 'hnCIQKilonrTIvP1vmkQi8qHPvDRtBZKqvz/AErW/ZwQdZzqYNFd+BmOXaeZWV0Q\\n' +\n 'oHtDzXmcwtP8aUQpxN0e1xkWb1E80qoy+0uuRqb/50b/R4Q5qqSfJhkn6z8nwB10\\n' +\n '7RjLtJPrK8igxdpr3tGUzfAOyiPrIDncY7UJaL84GFp7WWAkH0WG3H8Y8DRcRXOU\\n' +\n 'mqDxDLUP3rNuow3jnGxiUY+gGX5OqaZg4f4P6QzOSmeQYs6nLpH0PiN00+oS1BbD\\n' +\n 'bpWdZEttILPI+vAYkU4QuBKKDjJL6HbSd+cn\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIECDCCAvCgAwIBAgIDAIVCMA0GCSqGSIb3DQEBCwUAMIGPMQswCQYDVQQGEwJV\\n' +\n 'UzEQMA4GA1UEBwwHU2VhdHRsZTETMBEGA1UECAwKV2FzaGluZ3RvbjEiMCAGA1UE\\n' +\n 'CgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJE\\n' +\n 'UzEgMB4GA1UEAwwXQW1hem9uIFJEUyBSb290IDIwMTkgQ0EwHhcNMTkwOTEzMTcw\\n' +\n 'NjQxWhcNMjQwODIyMTcwODUwWjCBlDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCldh\\n' +\n 'c2hpbmd0b24xEDAOBgNVBAcMB1NlYXR0bGUxIjAgBgNVBAoMGUFtYXpvbiBXZWIg\\n' +\n 'U2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxJTAjBgNVBAMMHEFt\\n' +\n 'YXpvbiBSRFMgdXMtZWFzdC0yIDIwMTkgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IB\\n' +\n 'DwAwggEKAoIBAQDE+T2xYjUbxOp+pv+gRA3FO24+1zCWgXTDF1DHrh1lsPg5k7ht\\n' +\n '2KPYzNc+Vg4E+jgPiW0BQnA6jStX5EqVh8BU60zELlxMNvpg4KumniMCZ3krtMUC\\n' +\n 'au1NF9rM7HBh+O+DYMBLK5eSIVt6lZosOb7bCi3V6wMLA8YqWSWqabkxwN4w0vXI\\n' +\n '8lu5uXXFRemHnlNf+yA/4YtN4uaAyd0ami9+klwdkZfkrDOaiy59haOeBGL8EB/c\\n' +\n 'dbJJlguHH5CpCscs3RKtOOjEonXnKXldxarFdkMzi+aIIjQ8GyUOSAXHtQHb3gZ4\\n' +\n 'nS6Ey0CMlwkB8vUObZU9fnjKJcL5QCQqOfwvAgMBAAGjZjBkMA4GA1UdDwEB/wQE\\n' +\n 'AwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBQUPuRHohPxx4VjykmH\\n' +\n '6usGrLL1ETAfBgNVHSMEGDAWgBRzX2DYvMsDmPQrFzQuNlqmYP+8HzANBgkqhkiG\\n' +\n '9w0BAQsFAAOCAQEAUdR9Vb3y33Yj6X6KGtuthZ08SwjImVQPtknzpajNE5jOJAh8\\n' +\n 'quvQnU9nlnMO85fVDU1Dz3lLHGJ/YG1pt1Cqq2QQ200JcWCvBRgdvH6MjHoDQpqZ\\n' +\n 'HvQ3vLgOGqCLNQKFuet9BdpsHzsctKvCVaeBqbGpeCtt3Hh/26tgx0rorPLw90A2\\n' +\n 'V8QSkZJjlcKkLa58N5CMM8Xz8KLWg3MZeT4DmlUXVCukqK2RGuP2L+aME8dOxqNv\\n' +\n 'OnOz1zrL5mR2iJoDpk8+VE/eBDmJX40IJk6jBjWoxAO/RXq+vBozuF5YHN1ujE92\\n' +\n 'tO8HItgTp37XT8bJBAiAnt5mxw+NLSqtxk2QdQ==\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIEDDCCAvSgAwIBAgICY4kwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\\n' +\n 'MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\\n' +\n 'DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\\n' +\n 'MSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTMyMDEx\\n' +\n 'NDJaFw0yNDA4MjIxNzA4NTBaMIGZMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\\n' +\n 'aGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\\n' +\n 'ZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEqMCgGA1UEAwwhQW1h\\n' +\n 'em9uIFJEUyBhcC1zb3V0aGVhc3QtMSAyMDE5IENBMIIBIjANBgkqhkiG9w0BAQEF\\n' +\n 'AAOCAQ8AMIIBCgKCAQEAr5u9OuLL/OF/fBNUX2kINJLzFl4DnmrhnLuSeSnBPgbb\\n' +\n 'qddjf5EFFJBfv7IYiIWEFPDbDG5hoBwgMup5bZDbas+ZTJTotnnxVJTQ6wlhTmns\\n' +\n 'eHECcg2pqGIKGrxZfbQhlj08/4nNAPvyYCTS0bEcmQ1emuDPyvJBYDDLDU6AbCB5\\n' +\n '6Z7YKFQPTiCBblvvNzchjLWF9IpkqiTsPHiEt21sAdABxj9ityStV3ja/W9BfgxH\\n' +\n 'wzABSTAQT6FbDwmQMo7dcFOPRX+hewQSic2Rn1XYjmNYzgEHisdUsH7eeXREAcTw\\n' +\n '61TRvaLH8AiOWBnTEJXPAe6wYfrcSd1pD0MXpoB62wIDAQABo2YwZDAOBgNVHQ8B\\n' +\n 'Af8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUytwMiomQOgX5\\n' +\n 'Ichd+2lDWRUhkikwHwYDVR0jBBgwFoAUc19g2LzLA5j0Kxc0LjZapmD/vB8wDQYJ\\n' +\n 'KoZIhvcNAQELBQADggEBACf6lRDpfCD7BFRqiWM45hqIzffIaysmVfr+Jr+fBTjP\\n' +\n 'uYe/ba1omSrNGG23bOcT9LJ8hkQJ9d+FxUwYyICQNWOy6ejicm4z0C3VhphbTPqj\\n' +\n 'yjpt9nG56IAcV8BcRJh4o/2IfLNzC/dVuYJV8wj7XzwlvjysenwdrJCoLadkTr1h\\n' +\n 'eIdG6Le07sB9IxrGJL9e04afk37h7c8ESGSE4E+oS4JQEi3ATq8ne1B9DQ9SasXi\\n' +\n 'IRmhNAaISDzOPdyLXi9N9V9Lwe/DHcja7hgLGYx3UqfjhLhOKwp8HtoZORixAmOI\\n' +\n 'HfILgNmwyugAbuZoCazSKKBhQ0wgO0WZ66ZKTMG8Oho=\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIEBzCCAu+gAwIBAgICUYkwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\\n' +\n 'MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\\n' +\n 'DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\\n' +\n 'MSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTYxODIx\\n' +\n 'MTVaFw0yNDA4MjIxNzA4NTBaMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\\n' +\n 'aGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\\n' +\n 'ZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzElMCMGA1UEAwwcQW1h\\n' +\n 'em9uIFJEUyB1cy13ZXN0LTIgMjAxOSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP\\n' +\n 'ADCCAQoCggEBANCEZBZyu6yJQFZBJmSUZfSZd3Ui2gitczMKC4FLr0QzkbxY+cLa\\n' +\n 'uVONIOrPt4Rwi+3h/UdnUg917xao3S53XDf1TDMFEYp4U8EFPXqCn/GXBIWlU86P\\n' +\n 'PvBN+gzw3nS+aco7WXb+woTouvFVkk8FGU7J532llW8o/9ydQyDIMtdIkKTuMfho\\n' +\n 'OiNHSaNc+QXQ32TgvM9A/6q7ksUoNXGCP8hDOkSZ/YOLiI5TcdLh/aWj00ziL5bj\\n' +\n 'pvytiMZkilnc9dLY9QhRNr0vGqL0xjmWdoEXz9/OwjmCihHqJq+20MJPsvFm7D6a\\n' +\n '2NKybR9U+ddrjb8/iyLOjURUZnj5O+2+OPcCAwEAAaNmMGQwDgYDVR0PAQH/BAQD\\n' +\n 'AgEGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFEBxMBdv81xuzqcK5TVu\\n' +\n 'pHj+Aor8MB8GA1UdIwQYMBaAFHNfYNi8ywOY9CsXNC42WqZg/7wfMA0GCSqGSIb3\\n' +\n 'DQEBCwUAA4IBAQBZkfiVqGoJjBI37aTlLOSjLcjI75L5wBrwO39q+B4cwcmpj58P\\n' +\n '3sivv+jhYfAGEbQnGRzjuFoyPzWnZ1DesRExX+wrmHsLLQbF2kVjLZhEJMHF9eB7\\n' +\n 'GZlTPdTzHErcnuXkwA/OqyXMpj9aghcQFuhCNguEfnROY9sAoK2PTfnTz9NJHL+Q\\n' +\n 'UpDLEJEUfc0GZMVWYhahc0x38ZnSY2SKacIPECQrTI0KpqZv/P+ijCEcMD9xmYEb\\n' +\n 'jL4en+XKS1uJpw5fIU5Sj0MxhdGstH6S84iAE5J3GM3XHklGSFwwqPYvuTXvANH6\\n' +\n 'uboynxRgSae59jIlAK6Jrr6GWMwQRbgcaAlW\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIEDDCCAvSgAwIBAgICEkYwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\\n' +\n 'MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\\n' +\n 'DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\\n' +\n 'MSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTYxOTUz\\n' +\n 'NDdaFw0yNDA4MjIxNzA4NTBaMIGZMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\\n' +\n 'aGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\\n' +\n 'ZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEqMCgGA1UEAwwhQW1h\\n' +\n 'em9uIFJEUyBhcC1zb3V0aGVhc3QtMiAyMDE5IENBMIIBIjANBgkqhkiG9w0BAQEF\\n' +\n 'AAOCAQ8AMIIBCgKCAQEAufodI2Flker8q7PXZG0P0vmFSlhQDw907A6eJuF/WeMo\\n' +\n 'GHnll3b4S6nC3oRS3nGeRMHbyU2KKXDwXNb3Mheu+ox+n5eb/BJ17eoj9HbQR1cd\\n' +\n 'gEkIciiAltf8gpMMQH4anP7TD+HNFlZnP7ii3geEJB2GGXSxgSWvUzH4etL67Zmn\\n' +\n 'TpGDWQMB0T8lK2ziLCMF4XAC/8xDELN/buHCNuhDpxpPebhct0T+f6Arzsiswt2j\\n' +\n '7OeNeLLZwIZvVwAKF7zUFjC6m7/VmTQC8nidVY559D6l0UhhU0Co/txgq3HVsMOH\\n' +\n 'PbxmQUwJEKAzQXoIi+4uZzHFZrvov/nDTNJUhC6DqwIDAQABo2YwZDAOBgNVHQ8B\\n' +\n 'Af8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUwaZpaCme+EiV\\n' +\n 'M5gcjeHZSTgOn4owHwYDVR0jBBgwFoAUc19g2LzLA5j0Kxc0LjZapmD/vB8wDQYJ\\n' +\n 'KoZIhvcNAQELBQADggEBAAR6a2meCZuXO2TF9bGqKGtZmaah4pH2ETcEVUjkvXVz\\n' +\n 'sl+ZKbYjrun+VkcMGGKLUjS812e7eDF726ptoku9/PZZIxlJB0isC/0OyixI8N4M\\n' +\n 'NsEyvp52XN9QundTjkl362bomPnHAApeU0mRbMDRR2JdT70u6yAzGLGsUwMkoNnw\\n' +\n '1VR4XKhXHYGWo7KMvFrZ1KcjWhubxLHxZWXRulPVtGmyWg/MvE6KF+2XMLhojhUL\\n' +\n '+9jB3Fpn53s6KMx5tVq1x8PukHmowcZuAF8k+W4gk8Y68wIwynrdZrKRyRv6CVtR\\n' +\n 'FZ8DeJgoNZT3y/GT254VqMxxfuy2Ccb/RInd16tEvVk=\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIEDDCCAvSgAwIBAgICOYIwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\\n' +\n 'MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\\n' +\n 'DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\\n' +\n 'MSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTcyMDA1\\n' +\n 'MjlaFw0yNDA4MjIxNzA4NTBaMIGZMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\\n' +\n 'aGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\\n' +\n 'ZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEqMCgGA1UEAwwhQW1h\\n' +\n 'em9uIFJEUyBhcC1ub3J0aGVhc3QtMyAyMDE5IENBMIIBIjANBgkqhkiG9w0BAQEF\\n' +\n 'AAOCAQ8AMIIBCgKCAQEA4dMak8W+XW8y/2F6nRiytFiA4XLwePadqWebGtlIgyCS\\n' +\n 'kbug8Jv5w7nlMkuxOxoUeD4WhI6A9EkAn3r0REM/2f0aYnd2KPxeqS2MrtdxxHw1\\n' +\n 'xoOxk2x0piNSlOz6yog1idsKR5Wurf94fvM9FdTrMYPPrDabbGqiBMsZZmoHLvA3\\n' +\n 'Z+57HEV2tU0Ei3vWeGIqnNjIekS+E06KhASxrkNU5vi611UsnYZlSi0VtJsH4UGV\\n' +\n 'LhnHl53aZL0YFO5mn/fzuNG/51qgk/6EFMMhaWInXX49Dia9FnnuWXwVwi6uX1Wn\\n' +\n '7kjoHi5VtmC8ZlGEHroxX2DxEr6bhJTEpcLMnoQMqwIDAQABo2YwZDAOBgNVHQ8B\\n' +\n 'Af8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUsUI5Cb3SWB8+\\n' +\n 'gv1YLN/ABPMdxSAwHwYDVR0jBBgwFoAUc19g2LzLA5j0Kxc0LjZapmD/vB8wDQYJ\\n' +\n 'KoZIhvcNAQELBQADggEBAJAF3E9PM1uzVL8YNdzb6fwJrxxqI2shvaMVmC1mXS+w\\n' +\n 'G0zh4v2hBZOf91l1EO0rwFD7+fxoI6hzQfMxIczh875T6vUXePKVOCOKI5wCrDad\\n' +\n 'zQbVqbFbdhsBjF4aUilOdtw2qjjs9JwPuB0VXN4/jY7m21oKEOcnpe36+7OiSPjN\\n' +\n 'xngYewCXKrSRqoj3mw+0w/+exYj3Wsush7uFssX18av78G+ehKPIVDXptOCP/N7W\\n' +\n '8iKVNeQ2QGTnu2fzWsGUSvMGyM7yqT+h1ILaT//yQS8er511aHMLc142bD4D9VSy\\n' +\n 'DgactwPDTShK/PXqhvNey9v/sKXm4XatZvwcc8KYlW4=\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIEDDCCAvSgAwIBAgICcEUwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\\n' +\n 'MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\\n' +\n 'DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\\n' +\n 'MSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTgxNjU2\\n' +\n 'MjBaFw0yNDA4MjIxNzA4NTBaMIGZMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\\n' +\n 'aGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\\n' +\n 'ZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEqMCgGA1UEAwwhQW1h\\n' +\n 'em9uIFJEUyBhcC1ub3J0aGVhc3QtMSAyMDE5IENBMIIBIjANBgkqhkiG9w0BAQEF\\n' +\n 'AAOCAQ8AMIIBCgKCAQEAndtkldmHtk4TVQAyqhAvtEHSMb6pLhyKrIFved1WO3S7\\n' +\n '+I+bWwv9b2W/ljJxLq9kdT43bhvzonNtI4a1LAohS6bqyirmk8sFfsWT3akb+4Sx\\n' +\n '1sjc8Ovc9eqIWJCrUiSvv7+cS7ZTA9AgM1PxvHcsqrcUXiK3Jd/Dax9jdZE1e15s\\n' +\n 'BEhb2OEPE+tClFZ+soj8h8Pl2Clo5OAppEzYI4LmFKtp1X/BOf62k4jviXuCSst3\\n' +\n 'UnRJzE/CXtjmN6oZySVWSe0rQYuyqRl6//9nK40cfGKyxVnimB8XrrcxUN743Vud\\n' +\n 'QQVU0Esm8OVTX013mXWQXJHP2c0aKkog8LOga0vobQIDAQABo2YwZDAOBgNVHQ8B\\n' +\n 'Af8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQULmoOS1mFSjj+\\n' +\n 'snUPx4DgS3SkLFYwHwYDVR0jBBgwFoAUc19g2LzLA5j0Kxc0LjZapmD/vB8wDQYJ\\n' +\n 'KoZIhvcNAQELBQADggEBAAkVL2P1M2/G9GM3DANVAqYOwmX0Xk58YBHQu6iiQg4j\\n' +\n 'b4Ky/qsZIsgT7YBsZA4AOcPKQFgGTWhe9pvhmXqoN3RYltN8Vn7TbUm/ZVDoMsrM\\n' +\n 'gwv0+TKxW1/u7s8cXYfHPiTzVSJuOogHx99kBW6b2f99GbP7O1Sv3sLq4j6lVvBX\\n' +\n 'Fiacf5LAWC925nvlTzLlBgIc3O9xDtFeAGtZcEtxZJ4fnGXiqEnN4539+nqzIyYq\\n' +\n 'nvlgCzyvcfRAxwltrJHuuRu6Maw5AGcd2Y0saMhqOVq9KYKFKuD/927BTrbd2JVf\\n' +\n '2sGWyuPZPCk3gq+5pCjbD0c6DkhcMGI6WwxvM5V/zSM=\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIEBzCCAu+gAwIBAgICJDQwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\\n' +\n 'MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\\n' +\n 'DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\\n' +\n 'MSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTgxNzAz\\n' +\n 'MTVaFw0yNDA4MjIxNzA4NTBaMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\\n' +\n 'aGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\\n' +\n 'ZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzElMCMGA1UEAwwcQW1h\\n' +\n 'em9uIFJEUyBldS13ZXN0LTMgMjAxOSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP\\n' +\n 'ADCCAQoCggEBAL9bL7KE0n02DLVtlZ2PL+g/BuHpMYFq2JnE2RgompGurDIZdjmh\\n' +\n '1pxfL3nT+QIVMubuAOy8InRfkRxfpxyjKYdfLJTPJG+jDVL+wDcPpACFVqoV7Prg\\n' +\n 'pVYEV0lc5aoYw4bSeYFhdzgim6F8iyjoPnObjll9mo4XsHzSoqJLCd0QC+VG9Fw2\\n' +\n 'q+GDRZrLRmVM2oNGDRbGpGIFg77aRxRapFZa8SnUgs2AqzuzKiprVH5i0S0M6dWr\\n' +\n 'i+kk5epmTtkiDHceX+dP/0R1NcnkCPoQ9TglyXyPdUdTPPRfKCq12dftqll+u4mV\\n' +\n 'ARdN6WFjovxax8EAP2OAUTi1afY+1JFMj+sCAwEAAaNmMGQwDgYDVR0PAQH/BAQD\\n' +\n 'AgEGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFLfhrbrO5exkCVgxW0x3\\n' +\n 'Y2mAi8lNMB8GA1UdIwQYMBaAFHNfYNi8ywOY9CsXNC42WqZg/7wfMA0GCSqGSIb3\\n' +\n 'DQEBCwUAA4IBAQAigQ5VBNGyw+OZFXwxeJEAUYaXVoP/qrhTOJ6mCE2DXUVEoJeV\\n' +\n 'SxScy/TlFA9tJXqmit8JH8VQ/xDL4ubBfeMFAIAo4WzNWDVoeVMqphVEcDWBHsI1\\n' +\n 'AETWzfsapRS9yQekOMmxg63d/nV8xewIl8aNVTHdHYXMqhhik47VrmaVEok1UQb3\\n' +\n 'O971RadLXIEbVd9tjY5bMEHm89JsZDnDEw1hQXBb67Elu64OOxoKaHBgUH8AZn/2\\n' +\n 'zFsL1ynNUjOhCSAA15pgd1vjwc0YsBbAEBPcHBWYBEyME6NLNarjOzBl4FMtATSF\\n' +\n 'wWCKRGkvqN8oxYhwR2jf2rR5Mu4DWkK5Q8Ep\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIEBzCCAu+gAwIBAgICJVUwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\\n' +\n 'MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\\n' +\n 'DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\\n' +\n 'MSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTkxODE2\\n' +\n 'NTNaFw0yNDA4MjIxNzA4NTBaMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\\n' +\n 'aGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\\n' +\n 'ZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzElMCMGA1UEAwwcQW1h\\n' +\n 'em9uIFJEUyB1cy1lYXN0LTEgMjAxOSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP\\n' +\n 'ADCCAQoCggEBAM3i/k2u6cqbMdcISGRvh+m+L0yaSIoOXjtpNEoIftAipTUYoMhL\\n' +\n 'InXGlQBVA4shkekxp1N7HXe1Y/iMaPEyb3n+16pf3vdjKl7kaSkIhjdUz3oVUEYt\\n' +\n 'i8Z/XeJJ9H2aEGuiZh3kHixQcZczn8cg3dA9aeeyLSEnTkl/npzLf//669Ammyhs\\n' +\n 'XcAo58yvT0D4E0D/EEHf2N7HRX7j/TlyWvw/39SW0usiCrHPKDLxByLojxLdHzso\\n' +\n 'QIp/S04m+eWn6rmD+uUiRteN1hI5ncQiA3wo4G37mHnUEKo6TtTUh+sd/ku6a8HK\\n' +\n 'glMBcgqudDI90s1OpuIAWmuWpY//8xEG2YECAwEAAaNmMGQwDgYDVR0PAQH/BAQD\\n' +\n 'AgEGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFPqhoWZcrVY9mU7tuemR\\n' +\n 'RBnQIj1jMB8GA1UdIwQYMBaAFHNfYNi8ywOY9CsXNC42WqZg/7wfMA0GCSqGSIb3\\n' +\n 'DQEBCwUAA4IBAQB6zOLZ+YINEs72heHIWlPZ8c6WY8MDU+Be5w1M+BK2kpcVhCUK\\n' +\n 'PJO4nMXpgamEX8DIiaO7emsunwJzMSvavSPRnxXXTKIc0i/g1EbiDjnYX9d85DkC\\n' +\n 'E1LaAUCmCZBVi9fIe0H2r9whIh4uLWZA41oMnJx/MOmo3XyMfQoWcqaSFlMqfZM4\\n' +\n '0rNoB/tdHLNuV4eIdaw2mlHxdWDtF4oH+HFm+2cVBUVC1jXKrFv/euRVtsTT+A6i\\n' +\n 'h2XBHKxQ1Y4HgAn0jACP2QSPEmuoQEIa57bEKEcZsBR8SDY6ZdTd2HLRIApcCOSF\\n' +\n 'MRM8CKLeF658I0XgF8D5EsYoKPsA+74Z+jDH\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIEETCCAvmgAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwgZQxCzAJBgNVBAYTAlVT\\n' +\n 'MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\\n' +\n 'DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\\n' +\n 'MSUwIwYDVQQDDBxBbWF6b24gUkRTIEJldGEgUm9vdCAyMDE5IENBMB4XDTE5MDgy\\n' +\n 'MDE3MTAwN1oXDTI0MDgxOTE3MzgyNlowgZkxCzAJBgNVBAYTAlVTMRMwEQYDVQQI\\n' +\n 'DApXYXNoaW5ndG9uMRAwDgYDVQQHDAdTZWF0dGxlMSIwIAYDVQQKDBlBbWF6b24g\\n' +\n 'V2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMSowKAYDVQQD\\n' +\n 'DCFBbWF6b24gUkRTIEJldGEgdXMtZWFzdC0xIDIwMTkgQ0EwggEiMA0GCSqGSIb3\\n' +\n 'DQEBAQUAA4IBDwAwggEKAoIBAQDTNCOlotQcLP8TP82U2+nk0bExVuuMVOgFeVMx\\n' +\n 'vbUHZQeIj9ikjk+jm6eTDnnkhoZcmJiJgRy+5Jt69QcRbb3y3SAU7VoHgtraVbxF\\n' +\n 'QDh7JEHI9tqEEVOA5OvRrDRcyeEYBoTDgh76ROco2lR+/9uCvGtHVrMCtG7BP7ZB\\n' +\n 'sSVNAr1IIRZZqKLv2skKT/7mzZR2ivcw9UeBBTUf8xsfiYVBvMGoEsXEycjYdf6w\\n' +\n 'WV+7XS7teNOc9UgsFNN+9AhIBc1jvee5E//72/4F8pAttAg/+mmPUyIKtekNJ4gj\\n' +\n 'OAR2VAzGx1ybzWPwIgOudZFHXFduxvq4f1hIRPH0KbQ/gkRrAgMBAAGjZjBkMA4G\\n' +\n 'A1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBTkvpCD\\n' +\n '6C43rar9TtJoXr7q8dkrrjAfBgNVHSMEGDAWgBStoQwVpbGx87fxB3dEGDqKKnBT\\n' +\n '4TANBgkqhkiG9w0BAQsFAAOCAQEAJd9fOSkwB3uVdsS+puj6gCER8jqmhd3g/J5V\\n' +\n 'Zjk9cKS8H0e8pq/tMxeJ8kpurPAzUk5RkCspGt2l0BSwmf3ahr8aJRviMX6AuW3/\\n' +\n 'g8aKplTvq/WMNGKLXONa3Sq8591J+ce8gtOX/1rDKmFI4wQ/gUzOSYiT991m7QKS\\n' +\n 'Fr6HMgFuz7RNJbb3Fy5cnurh8eYWA7mMv7laiLwTNsaro5qsqErD5uXuot6o9beT\\n' +\n 'a+GiKinEur35tNxAr47ax4IRubuIzyfCrezjfKc5raVV2NURJDyKP0m0CCaffAxE\\n' +\n 'qn2dNfYc3v1D8ypg3XjHlOzRo32RB04o8ALHMD9LSwsYDLpMag==\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIEFzCCAv+gAwIBAgICFSUwDQYJKoZIhvcNAQELBQAwgZcxCzAJBgNVBAYTAlVT\\n' +\n 'MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\\n' +\n 'DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\\n' +\n 'MSgwJgYDVQQDDB9BbWF6b24gUkRTIFByZXZpZXcgUm9vdCAyMDE5IENBMB4XDTE5\\n' +\n 'MDgyMTIyMzk0N1oXDTI0MDgyMTIyMjk0OVowgZwxCzAJBgNVBAYTAlVTMRMwEQYD\\n' +\n 'VQQIDApXYXNoaW5ndG9uMRAwDgYDVQQHDAdTZWF0dGxlMSIwIAYDVQQKDBlBbWF6\\n' +\n 'b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMS0wKwYD\\n' +\n 'VQQDDCRBbWF6b24gUkRTIFByZXZpZXcgdXMtZWFzdC0yIDIwMTkgQ0EwggEiMA0G\\n' +\n 'CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQD0dB/U7qRnSf05wOi7m10Pa2uPMTJv\\n' +\n 'r6U/3Y17a5prq5Zr4++CnSUYarG51YuIf355dKs+7Lpzs782PIwCmLpzAHKWzix6\\n' +\n 'pOaTQ+WZ0+vUMTxyqgqWbsBgSCyP7pVBiyqnmLC/L4az9XnscrbAX4pNaoJxsuQe\\n' +\n 'mzBo6yofjQaAzCX69DuqxFkVTRQnVy7LCFkVaZtjNAftnAHJjVgQw7lIhdGZp9q9\\n' +\n 'IafRt2gteihYfpn+EAQ/t/E4MnhrYs4CPLfS7BaYXBycEKC5Muj1l4GijNNQ0Efo\\n' +\n 'xG8LSZz7SNgUvfVwiNTaqfLP3AtEAWiqxyMyh3VO+1HpCjT7uNBFtmF3AgMBAAGj\\n' +\n 'ZjBkMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQW\\n' +\n 'BBQtinkdrj+0B2+qdXngV2tgHnPIujAfBgNVHSMEGDAWgBRp0xqULkNh/w2ZVzEI\\n' +\n 'o2RIY7O03TANBgkqhkiG9w0BAQsFAAOCAQEAtJdqbCxDeMc8VN1/RzCabw9BIL/z\\n' +\n '73Auh8eFTww/sup26yn8NWUkfbckeDYr1BrXa+rPyLfHpg06kwR8rBKyrs5mHwJx\\n' +\n 'bvOzXD/5WTdgreB+2Fb7mXNvWhenYuji1MF+q1R2DXV3I05zWHteKX6Dajmx+Uuq\\n' +\n 'Yq78oaCBSV48hMxWlp8fm40ANCL1+gzQ122xweMFN09FmNYFhwuW+Ao+Vv90ZfQG\\n' +\n 'PYwTvN4n/gegw2TYcifGZC2PNX74q3DH03DXe5fvNgRW5plgz/7f+9mS+YHd5qa9\\n' +\n 'tYTPUvoRbi169ou6jicsMKUKPORHWhiTpSCWR1FMMIbsAcsyrvtIsuaGCQ==\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIID/jCCAuagAwIBAgIQdOCSuA9psBpQd8EI368/0DANBgkqhkiG9w0BAQsFADCB\\n' +\n 'lzELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\\n' +\n 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdB\\n' +\n 'bWF6b24gUkRTIHNhLWVhc3QtMSBSb290IENBIFJTQTIwNDggRzExEDAOBgNVBAcM\\n' +\n 'B1NlYXR0bGUwIBcNMjEwNTE5MTgwNjI2WhgPMjA2MTA1MTkxOTA2MjZaMIGXMQsw\\n' +\n 'CQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjET\\n' +\n 'MBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExMDAuBgNVBAMMJ0FtYXpv\\n' +\n 'biBSRFMgc2EtZWFzdC0xIFJvb3QgQ0EgUlNBMjA0OCBHMTEQMA4GA1UEBwwHU2Vh\\n' +\n 'dHRsZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN6ftL6w8v3dB2yW\\n' +\n 'LjCxSP1D7ZsOTeLZOSCz1Zv0Gkd0XLhil5MdHOHBvwH/DrXqFU2oGzCRuAy+aZis\\n' +\n 'DardJU6ChyIQIciXCO37f0K23edhtpXuruTLLwUwzeEPdcnLPCX+sWEn9Y5FPnVm\\n' +\n 'pCd6J8edH2IfSGoa9LdErkpuESXdidLym/w0tWG/O2By4TabkNSmpdrCL00cqI+c\\n' +\n 'prA8Bx1jX8/9sY0gpAovtuFaRN+Ivg3PAnWuhqiSYyQ5nC2qDparOWuDiOhpY56E\\n' +\n 'EgmTvjwqMMjNtExfYx6Rv2Ndu50TriiNKEZBzEtkekwXInTupmYTvc7U83P/959V\\n' +\n 'UiQ+WSMCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU4uYHdH0+\\n' +\n 'bUeh81Eq2l5/RJbW+vswDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4IB\\n' +\n 'AQBhxcExJ+w74bvDknrPZDRgTeMLYgbVJjx2ExH7/Ac5FZZWcpUpFwWMIJJxtewI\\n' +\n 'AnhryzM3tQYYd4CG9O+Iu0+h/VVfW7e4O3joWVkxNMb820kQSEwvZfA78aItGwOY\\n' +\n 'WSaFNVRyloVicZRNJSyb1UL9EiJ9ldhxm4LTT0ax+4ontI7zTx6n6h8Sr6r/UOvX\\n' +\n 'd9T5aUUENWeo6M9jGupHNn3BobtL7BZm2oS8wX8IVYj4tl0q5T89zDi2x0MxbsIV\\n' +\n '5ZjwqBQ5JWKv7ASGPb+z286RjPA9R2knF4lJVZrYuNV90rHvI/ECyt/JrDqeljGL\\n' +\n 'BLl1W/UsvZo6ldLIpoMbbrb5\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIEBDCCAuygAwIBAgIQUfVbqapkLYpUqcLajpTJWzANBgkqhkiG9w0BAQsFADCB\\n' +\n 'mjELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\\n' +\n 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTMwMQYDVQQDDCpB\\n' +\n 'bWF6b24gUkRTIG1lLWNlbnRyYWwtMSBSb290IENBIFJTQTIwNDggRzExEDAOBgNV\\n' +\n 'BAcMB1NlYXR0bGUwIBcNMjIwNTA2MjMyMDA5WhgPMjA2MjA1MDcwMDIwMDlaMIGa\\n' +\n 'MQswCQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5j\\n' +\n 'LjETMBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExMzAxBgNVBAMMKkFt\\n' +\n 'YXpvbiBSRFMgbWUtY2VudHJhbC0xIFJvb3QgQ0EgUlNBMjA0OCBHMTEQMA4GA1UE\\n' +\n 'BwwHU2VhdHRsZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJIeovu3\\n' +\n 'ewI9FVitXMQzvkh34aQ6WyI4NO3YepfJaePiv3cnyFGYHN2S1cR3UQcLWgypP5va\\n' +\n 'j6bfroqwGbCbZZcb+6cyOB4ceKO9Ws1UkcaGHnNDcy5gXR7aCW2OGTUfinUuhd2d\\n' +\n '5bOGgV7JsPbpw0bwJ156+MwfOK40OLCWVbzy8B1kITs4RUPNa/ZJnvIbiMu9rdj4\\n' +\n '8y7GSFJLnKCjlOFUkNI5LcaYvI1+ybuNgphT3nuu5ZirvTswGakGUT/Q0J3dxP0J\\n' +\n 'pDfg5Sj/2G4gXiaM0LppVOoU5yEwVewhQ250l0eQAqSrwPqAkdTg9ng360zqCFPE\\n' +\n 'JPPcgI1tdGUgneECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU\\n' +\n '/2AJVxWdZxc8eJgdpbwpW7b0f7IwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB\\n' +\n 'CwUAA4IBAQBYm63jTu2qYKJ94gKnqc+oUgqmb1mTXmgmp/lXDbxonjszJDOXFbri\\n' +\n '3CCO7xB2sg9bd5YWY8sGKHaWmENj3FZpCmoefbUx++8D7Mny95Cz8R32rNcwsPTl\\n' +\n 'ebpd9A/Oaw5ug6M0x/cNr0qzF8Wk9Dx+nFEimp8RYQdKvLDfNFZHjPa1itnTiD8M\\n' +\n 'TorAqj+VwnUGHOYBsT/0NY12tnwXdD+ATWfpEHdOXV+kTMqFFwDyhfgRVNpTc+os\\n' +\n 'ygr8SwhnSCpJPB/EYl2S7r+tgAbJOkuwUvGT4pTqrzDQEhwE7swgepnHC87zhf6l\\n' +\n 'qN6mVpSnQKQLm6Ob5TeCEFgcyElsF5bH\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIICrjCCAjSgAwIBAgIRAOxu0I1QuMAhIeszB3fJIlkwCgYIKoZIzj0EAwMwgZYx\\n' +\n 'CzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMu\\n' +\n 'MRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEvMC0GA1UEAwwmQW1h\\n' +\n 'em9uIFJEUyB1cy13ZXN0LTIgUm9vdCBDQSBFQ0MzODQgRzExEDAOBgNVBAcMB1Nl\\n' +\n 'YXR0bGUwIBcNMjEwNTI0MjIwNjU5WhgPMjEyMTA1MjQyMzA2NTlaMIGWMQswCQYD\\n' +\n 'VQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEG\\n' +\n 'A1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExLzAtBgNVBAMMJkFtYXpvbiBS\\n' +\n 'RFMgdXMtd2VzdC0yIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQHDAdTZWF0dGxl\\n' +\n 'MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEz4bylRcGqqDWdP7gQIIoTHdBK6FNtKH1\\n' +\n '4SkEIXRXkYDmRvL9Bci1MuGrwuvrka5TDj4b7e+csY0llEzHpKfq6nJPFljoYYP9\\n' +\n 'uqHFkv77nOpJJ633KOr8IxmeHW5RXgrZo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0G\\n' +\n 'A1UdDgQWBBQQikVz8wmjd9eDFRXzBIU8OseiGzAOBgNVHQ8BAf8EBAMCAYYwCgYI\\n' +\n 'KoZIzj0EAwMDaAAwZQIwf06Mcrpw1O0EBLBBrp84m37NYtOkE/0Z0O+C7D41wnXi\\n' +\n 'EQdn6PXUVgdD23Gj82SrAjEAklhKs+liO1PtN15yeZR1Io98nFve+lLptaLakZcH\\n' +\n '+hfFuUtCqMbaI8CdvJlKnPqT\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIGCTCCA/GgAwIBAgIRALyWMTyCebLZOGcZZQmkmfcwDQYJKoZIhvcNAQEMBQAw\\n' +\n 'gZwxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\\n' +\n 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTE1MDMGA1UEAwws\\n' +\n 'QW1hem9uIFJEUyBhcC1ub3J0aGVhc3QtMyBSb290IENBIFJTQTQwOTYgRzExEDAO\\n' +\n 'BgNVBAcMB1NlYXR0bGUwIBcNMjEwNTI0MjAyODAzWhgPMjEyMTA1MjQyMTI4MDNa\\n' +\n 'MIGcMQswCQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywg\\n' +\n 'SW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExNTAzBgNVBAMM\\n' +\n 'LEFtYXpvbiBSRFMgYXAtbm9ydGhlYXN0LTMgUm9vdCBDQSBSU0E0MDk2IEcxMRAw\\n' +\n 'DgYDVQQHDAdTZWF0dGxlMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA\\n' +\n 'wGFiyDyCrGqgdn4fXG12cxKAAfVvhMea1mw5h9CVRoavkPqhzQpAitSOuMB9DeiP\\n' +\n 'wQyqcsiGl/cTEau4L+AUBG8b9v26RlY48exUYBXj8CieYntOT9iNw5WtdYJa3kF/\\n' +\n 'JxgI+HDMzE9cmHDs5DOO3S0uwZVyra/xE1ymfSlpOeUIOTpHRJv97CBUEpaZMUW5\\n' +\n 'Sr6GruuOwFVpO5FX3A/jQlcS+UN4GjSRgDUJuqg6RRQldEZGCVCCmodbByvI2fGm\\n' +\n 'reGpsPJD54KkmAX08nOR8e5hkGoHxq0m2DLD4SrOFmt65vG47qnuwplWJjtk9B3Z\\n' +\n '9wDoopwZLBOtlkPIkUllWm1P8EuHC1IKOA+wSP6XdT7cy8S77wgyHzR0ynxv7q/l\\n' +\n 'vlZtH30wnNqFI0y9FeogD0TGMCHcnGqfBSicJXPy9T4fU6f0r1HwqKwPp2GArwe7\\n' +\n 'dnqLTj2D7M9MyVtFjEs6gfGWXmu1y5uDrf+CszurE8Cycoma+OfjjuVQgWOCy7Nd\\n' +\n 'jJswPxAroTzVfpgoxXza4ShUY10woZu0/J+HmNmqK7lh4NS75q1tz75in8uTZDkV\\n' +\n 'be7GK+SEusTrRgcf3tlgPjSTWG3veNzFDF2Vn1GLJXmuZfhdlVQDBNXW4MNREExS\\n' +\n 'dG57kJjICpT+r8X+si+5j51gRzkSnMYs7VHulpxfcwECAwEAAaNCMEAwDwYDVR0T\\n' +\n 'AQH/BAUwAwEB/zAdBgNVHQ4EFgQU4JWOpDBmUBuWKvGPZelw87ezhL8wDgYDVR0P\\n' +\n 'AQH/BAQDAgGGMA0GCSqGSIb3DQEBDAUAA4ICAQBRNLMql7itvXSEFQRAnyOjivHz\\n' +\n 'l5IlWVQjAbOUr6ogZcwvK6YpxNAFW5zQr8F+fdkiypLz1kk5irx9TIpff0BWC9hQ\\n' +\n '/odMPO8Gxn8+COlSvc+dLsF2Dax3Hvz0zLeKMo+cYisJOzpdR/eKd0/AmFdkvQoM\\n' +\n 'AOK9n0yYvVJU2IrSgeJBiiCarpKSeAktEVQ4rvyacQGr+QAPkkjRwm+5LHZKK43W\\n' +\n 'nNnggRli9N/27qYtc5bgr3AaQEhEXMI4RxPRXCLsod0ehMGWyRRK728a+6PMMJAJ\\n' +\n 'WHOU0x7LCEMPP/bvpLj3BdvSGqNor4ZtyXEbwREry1uzsgODeRRns5acPwTM6ff+\\n' +\n 'CmxO2NZ0OktIUSYRmf6H/ZFlZrIhV8uWaIwEJDz71qvj7buhQ+RFDZ9CNL64C0X6\\n' +\n 'mf0zJGEpddjANHaaVky+F4gYMtEy2K2Lcm4JGTdyIzUoIe+atzCnRp0QeIcuWtF+\\n' +\n 's8AjDYCVFNypcMmqbRmNpITSnOoCHSRuVkY3gutVoYyMLbp8Jm9SJnCIlEWTA6Rm\\n' +\n 'wADOMGZJVn5/XRTRuetVOB3KlQDjs9OO01XN5NzGSZO2KT9ngAUfh9Eqhf1iRWSP\\n' +\n 'nZlRbQ2NRCuY/oJ5N59mLGxnNJSE7giEKEBRhTQ/XEPIUYAUPD5fca0arKRJwbol\\n' +\n 'l9Se1Hsq0ZU5f+OZKQ==\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n '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\\n' +\n '5zT5+Bs=\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n '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\\n' +\n 'Hing\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIECTCCAvGgAwIBAgIRANxgyBbnxgTEOpDul2ZnC0UwDQYJKoZIhvcNAQELBQAw\\n' +\n 'gZwxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\\n' +\n 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTE1MDMGA1UEAwws\\n' +\n 'QW1hem9uIFJEUyBhcC1zb3V0aGVhc3QtMyBSb290IENBIFJTQTIwNDggRzExEDAO\\n' +\n 'BgNVBAcMB1NlYXR0bGUwIBcNMjEwNjEwMTgxOTA3WhgPMjA2MTA2MTAxOTE5MDda\\n' +\n 'MIGcMQswCQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywg\\n' +\n 'SW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExNTAzBgNVBAMM\\n' +\n 'LEFtYXpvbiBSRFMgYXAtc291dGhlYXN0LTMgUm9vdCBDQSBSU0EyMDQ4IEcxMRAw\\n' +\n 'DgYDVQQHDAdTZWF0dGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA\\n' +\n 'xnwSDAChrMkfk5TA4Dk8hKzStDlSlONzmd3fTG0Wqr5+x3EmFT6Ksiu/WIwEl9J2\\n' +\n 'K98UI7vYyuZfCxUKb1iMPeBdVGqk0zb92GpURd+Iz/+K1ps9ZLeGBkzR8mBmAi1S\\n' +\n 'OfpwKiTBzIv6E8twhEn4IUpHsdcuX/2Y78uESpJyM8O5CpkG0JaV9FNEbDkJeBUQ\\n' +\n 'Ao2qqNcH4R0Qcr5pyeqA9Zto1RswgL06BQMI9dTpfwSP5VvkvcNUaLl7Zv5WzLQE\\n' +\n 'JzORWePvdPzzvWEkY/3FPjxBypuYwssKaERW0fkPDmPtykktP9W/oJolKUFI6pXp\\n' +\n 'y+Y6p6/AVdnQD2zZjW5FhQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud\\n' +\n 'DgQWBBT+jEKs96LC+/X4BZkUYUkzPfXdqTAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZI\\n' +\n 'hvcNAQELBQADggEBAIGQqgqcQ6XSGkmNebzR6DhadTbfDmbYeN5N0Vuzv+Tdmufb\\n' +\n 'tMGjdjnYMg4B+IVnTKQb+Ox3pL9gbX6KglGK8HupobmIRtwKVth+gYYz3m0SL/Nk\\n' +\n 'haWPYzOm0x3tJm8jSdufJcEob4/ATce9JwseLl76pSWdl5A4lLjnhPPKudUDfH+1\\n' +\n 'BLNUi3lxpp6GkC8aWUPtupnhZuXddolTLOuA3GwTZySI44NfaFRm+o83N1jp+EwD\\n' +\n '6e94M4cTRzjUv6J3MZmSbdtQP/Tk1uz2K4bQZGP0PZC3bVpqiesdE/xr+wbu8uHr\\n' +\n 'cM1JXH0AmXf1yIkTgyWzmvt0k1/vgcw5ixAqvvE=\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIEATCCAumgAwIBAgIRAMhw98EQU18mIji+unM2YH8wDQYJKoZIhvcNAQELBQAw\\n' +\n 'gZgxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\\n' +\n 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTExMC8GA1UEAwwo\\n' +\n 'QW1hem9uIFJEUyBhcC1zb3V0aC0yIFJvb3QgQ0EgUlNBMjA0OCBHMTEQMA4GA1UE\\n' +\n 'BwwHU2VhdHRsZTAgFw0yMjA2MDYyMTQyMjJaGA8yMDYyMDYwNjIyNDIyMlowgZgx\\n' +\n 'CzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMu\\n' +\n 'MRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTExMC8GA1UEAwwoQW1h\\n' +\n 'em9uIFJEUyBhcC1zb3V0aC0yIFJvb3QgQ0EgUlNBMjA0OCBHMTEQMA4GA1UEBwwH\\n' +\n 'U2VhdHRsZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAIeeRoLfTm+7\\n' +\n 'vqm7ZlFSx+1/CGYHyYrOOryM4/Z3dqYVHFMgWTR7V3ziO8RZ6yUanrRcWVX3PZbF\\n' +\n 'AfX0KFE8OgLsXEZIX8odSrq86+/Th5eZOchB2fDBsUB7GuN2rvFBbM8lTI9ivVOU\\n' +\n 'lbuTnYyb55nOXN7TpmH2bK+z5c1y9RVC5iQsNAl6IJNvSN8VCqXh31eK5MlKB4DT\\n' +\n '+Y3OivCrSGsjM+UR59uZmwuFB1h+icE+U0p9Ct3Mjq3MzSX5tQb6ElTNGlfmyGpW\\n' +\n 'Kh7GQ5XU1KaKNZXoJ37H53woNSlq56bpVrKI4uv7ATpdpFubOnSLtpsKlpLdR3sy\\n' +\n 'Ws245200pC8CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUp0ki\\n' +\n '6+eWvsnBjQhMxwMW5pwn7DgwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUA\\n' +\n 'A4IBAQB2V8lv0aqbYQpj/bmVv/83QfE4vOxKCJAHv7DQ35cJsTyBdF+8pBczzi3t\\n' +\n '3VNL5IUgW6WkyuUOWnE0eqAFOUVj0yTS1jSAtfl3vOOzGJZmWBbqm9BKEdu1D8O6\\n' +\n 'sB8bnomwiab2tNDHPmUslpdDqdabbkWwNWzLJ97oGFZ7KNODMEPXWKWNxg33iHfS\\n' +\n '/nlmnrTVI3XgaNK9qLZiUrxu9Yz5gxi/1K+sG9/Dajd32ZxjRwDipOLiZbiXQrsd\\n' +\n 'qzIMY4GcWf3g1gHL5mCTfk7dG22h/rhPyGV0svaDnsb+hOt6sv1McMN6Y3Ou0mtM\\n' +\n '/UaAXojREmJmTSCNvs2aBny3/2sy\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIICrjCCAjSgAwIBAgIRAMnRxsKLYscJV8Qv5pWbL7swCgYIKoZIzj0EAwMwgZYx\\n' +\n 'CzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMu\\n' +\n 'MRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEvMC0GA1UEAwwmQW1h\\n' +\n 'em9uIFJEUyBzYS1lYXN0LTEgUm9vdCBDQSBFQ0MzODQgRzExEDAOBgNVBAcMB1Nl\\n' +\n 'YXR0bGUwIBcNMjEwNTE5MTgxNjAxWhgPMjEyMTA1MTkxOTE2MDFaMIGWMQswCQYD\\n' +\n 'VQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEG\\n' +\n 'A1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExLzAtBgNVBAMMJkFtYXpvbiBS\\n' +\n 'RFMgc2EtZWFzdC0xIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQHDAdTZWF0dGxl\\n' +\n 'MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEjFOCZgTNVKxLKhUxffiDEvTLFhrmIqdO\\n' +\n 'dKqVdgDoELEzIHWDdC+19aDPitbCYtBVHl65ITu/9pn6mMUl5hhUNtfZuc6A+Iw1\\n' +\n 'sBe0v0qI3y9Q9HdQYrGgeHDh8M5P7E2ho0IwQDAPBgNVHRMBAf8EBTADAQH/MB0G\\n' +\n 'A1UdDgQWBBS5L7/8M0TzoBZk39Ps7BkfTB4yJTAOBgNVHQ8BAf8EBAMCAYYwCgYI\\n' +\n 'KoZIzj0EAwMDaAAwZQIwI43O0NtWKTgnVv9z0LO5UMZYgSve7GvGTwqktZYCMObE\\n' +\n 'rUI4QerXM9D6JwLy09mqAjEAypfkdLyVWtaElVDUyHFkihAS1I1oUxaaDrynLNQK\\n' +\n 'Ou/Ay+ns+J+GyvyDUjBpVVW1\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIF/jCCA+agAwIBAgIQR71Z8lTO5Sj+as2jB7IWXzANBgkqhkiG9w0BAQwFADCB\\n' +\n 'lzELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\\n' +\n 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdB\\n' +\n 'bWF6b24gUkRTIHVzLXdlc3QtMiBSb290IENBIFJTQTQwOTYgRzExEDAOBgNVBAcM\\n' +\n 'B1NlYXR0bGUwIBcNMjEwNTI0MjIwMzIwWhgPMjEyMTA1MjQyMzAzMjBaMIGXMQsw\\n' +\n 'CQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjET\\n' +\n 'MBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExMDAuBgNVBAMMJ0FtYXpv\\n' +\n 'biBSRFMgdXMtd2VzdC0yIFJvb3QgQ0EgUlNBNDA5NiBHMTEQMA4GA1UEBwwHU2Vh\\n' +\n 'dHRsZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAM977bHIs1WJijrS\\n' +\n 'XQMfUOhmlJjr2v0K0UjPl52sE1TJ76H8umo1yR4T7Whkd9IwBHNGKXCJtJmMr9zp\\n' +\n 'fB38eLTu+5ydUAXdFuZpRMKBWwPVe37AdJRKqn5beS8HQjd3JXAgGKUNNuE92iqF\\n' +\n 'qi2fIqFMpnJXWo0FIW6s2Dl2zkORd7tH0DygcRi7lgVxCsw1BJQhFJon3y+IV8/F\\n' +\n 'bnbUXSNSDUnDW2EhvWSD8L+t4eiXYsozhDAzhBvojpxhPH9OB7vqFYw5qxFx+G0t\\n' +\n 'lSLX5iWi1jzzc3XyGnB6WInZDVbvnvJ4BGZ+dTRpOCvsoMIn9bz4EQTvu243c7aU\\n' +\n 'HbS/kvnCASNt+zk7C6lbmaq0AGNztwNj85Opn2enFciWZVnnJ/4OeefUWQxD0EPp\\n' +\n 'SjEd9Cn2IHzkBZrHCg+lWZJQBKbUVS0lLIMSsLQQ6WvR38jY7D2nxM1A93xWxwpt\\n' +\n 'ZtQnYRCVXH6zt2OwDAFePInWwxUjR5t/wu3XxPgpSfrmTi3WYtr1wFypAJ811e/P\\n' +\n 'yBtswWUQ6BNJQvy+KnOEeGfOwmtdDFYR+GOCfvCihzrKJrxOtHIieehR5Iw3cbXG\\n' +\n 'sm4pDzfMUVvDDz6C2M6PRlJhhClbatHCjik9hxFYEsAlqtVVK9pxaz9i8hOqSFQq\\n' +\n 'kJSQsgWw+oM/B2CyjcSqkSQEu8RLAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8w\\n' +\n 'HQYDVR0OBBYEFPmrdxpRRgu3IcaB5BTqlprcKdTsMA4GA1UdDwEB/wQEAwIBhjAN\\n' +\n 'BgkqhkiG9w0BAQwFAAOCAgEAVdlxWjPvVKky3kn8ZizeM4D+EsLw9dWLau2UD/ls\\n' +\n 'zwDCFoT6euagVeCknrn+YEl7g20CRYT9iaonGoMUPuMR/cdtPL1W/Rf40PSrGf9q\\n' +\n 'QuxavWiHLEXOQTCtCaVZMokkvjuuLNDXyZnstgECuiZECTwhexUF4oiuhyGk9o01\\n' +\n 'QMaiz4HX4lgk0ozALUvEzaNd9gWEwD2qe+rq9cQMTVq3IArUkvTIftZUaVUMzr0O\\n' +\n 'ed1+zAsNa9nJhURJ/6anJPJjbQgb5qA1asFcp9UaMT1ku36U3gnR1T/BdgG2jX3X\\n' +\n 'Um0UcaGNVPrH1ukInWW743pxWQb7/2sumEEMVh+jWbB18SAyLI4WIh4lkurdifzS\\n' +\n 'IuTFp8TEx+MouISFhz/vJDWZ84tqoLVjkEcP6oDypq9lFoEzHDJv3V1CYcIgOusT\\n' +\n 'k1jm9P7BXdTG7TYzUaTb9USb6bkqkD9EwJAOSs7DI94aE6rsSws2yAHavjAMfuMZ\\n' +\n 'sDAZvkqS2Qg2Z2+CI6wUZn7mzkJXbZoqRjDvChDXEB1mIhzVXhiNW/CR5WKVDvlj\\n' +\n '9v1sdGByh2pbxcLQtVaq/5coM4ANgphoNz3pOYUPWHS+JUrIivBZ+JobjXcxr3SN\\n' +\n '9iDzcu5/FVVNbq7+KN/nvPMngT+gduEN5m+EBjm8GukJymFG0m6BENRA0QSDqZ7k\\n' +\n 'zDY=\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIECTCCAvGgAwIBAgIRAK5EYG3iHserxMqgg+0EFjgwDQYJKoZIhvcNAQELBQAw\\n' +\n 'gZwxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\\n' +\n 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTE1MDMGA1UEAwws\\n' +\n 'QW1hem9uIFJEUyBhcC1ub3J0aGVhc3QtMyBSb290IENBIFJTQTIwNDggRzExEDAO\\n' +\n 'BgNVBAcMB1NlYXR0bGUwIBcNMjEwNTI0MjAyMzE2WhgPMjA2MTA1MjQyMTIzMTZa\\n' +\n 'MIGcMQswCQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywg\\n' +\n 'SW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExNTAzBgNVBAMM\\n' +\n 'LEFtYXpvbiBSRFMgYXAtbm9ydGhlYXN0LTMgUm9vdCBDQSBSU0EyMDQ4IEcxMRAw\\n' +\n 'DgYDVQQHDAdTZWF0dGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA\\n' +\n 's1L6TtB84LGraLHVC+rGPhLBW2P0oN/91Rq3AnYwqDOuTom7agANwEjvLq7dSRG/\\n' +\n 'sIfZsSV/ABTgArZ5sCmLjHFZAo8Kd45yA9byx20RcYtAG8IZl+q1Cri+s0XefzyO\\n' +\n 'U6mlfXZkVe6lzjlfXBkrlE/+5ifVbJK4dqOS1t9cWIpgKqv5fbE6Qbq4LVT+5/WM\\n' +\n 'Vd2BOljuBMGMzdZubqFKFq4mzTuIYfnBm7SmHlZfTdfBYPP1ScNuhpjuzw4n3NCR\\n' +\n 'EdU6dQv04Q6th4r7eiOCwbWI9LkmVbvBe3ylhH63lApC7MiiPYLlB13xBubVHVhV\\n' +\n 'q1NHoNTi+zA3MN9HWicRxQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud\\n' +\n 'DgQWBBSuxoqm0/wjNiZLvqv+JlQwsDvTPDAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZI\\n' +\n 'hvcNAQELBQADggEBAFfTK/j5kv90uIbM8VaFdVbr/6weKTwehafT0pAk1bfLVX+7\\n' +\n 'uf8oHgYiyKTTl0DFQicXejghXTeyzwoEkWSR8c6XkhD5vYG3oESqmt/RGvvoxz11\\n' +\n 'rHHy7yHYu7RIUc3VQG60c4qxXv/1mWySGwVwJrnuyNT9KZXPevu3jVaWOVHEILaK\\n' +\n 'HvzQ2YEcWBPmde/zEseO2QeeGF8FL45Q1d66wqIP4nNUd2pCjeTS5SpB0MMx7yi9\\n' +\n 'ki1OH1pv8tOuIdimtZ7wkdB8+JSZoaJ81b8sRrydRwJyvB88rftuI3YB4WwGuONT\\n' +\n 'ZezUPsmaoK69B0RChB0ofDpAaviF9V3xOWvVZfo=\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n '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\\n' +\n '1axqeKpI0F5SBUPsaVNYY2uNFg==\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIECDCCAvCgAwIBAgIQCREfzzVyDTMcNME+gWnTCTANBgkqhkiG9w0BAQsFADCB\\n' +\n 'nDELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\\n' +\n 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTUwMwYDVQQDDCxB\\n' +\n 'bWF6b24gUkRTIGFwLXNvdXRoZWFzdC0yIFJvb3QgQ0EgUlNBMjA0OCBHMTEQMA4G\\n' +\n 'A1UEBwwHU2VhdHRsZTAgFw0yMTA1MjQyMDQyMzNaGA8yMDYxMDUyNDIxNDIzM1ow\\n' +\n 'gZwxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\\n' +\n 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTE1MDMGA1UEAwws\\n' +\n 'QW1hem9uIFJEUyBhcC1zb3V0aGVhc3QtMiBSb290IENBIFJTQTIwNDggRzExEDAO\\n' +\n 'BgNVBAcMB1NlYXR0bGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDL\\n' +\n '1MT6br3L/4Pq87DPXtcjlXN3cnbNk2YqRAZHJayStTz8VtsFcGPJOpk14geRVeVk\\n' +\n 'e9uKFHRbcyr/RM4owrJTj5X4qcEuATYZbo6ou/rW2kYzuWFZpFp7lqm0vasV4Z9F\\n' +\n 'fChlhwkNks0UbM3G+psCSMNSoF19ERunj7w2c4E62LwujkeYLvKGNepjnaH10TJL\\n' +\n '2krpERd+ZQ4jIpObtRcMH++bTrvklc+ei8W9lqrVOJL+89v2piN3Ecdd389uphst\\n' +\n 'qQdb1BBVXbhUrtuGHgVf7zKqN1SkCoktoWxVuOprVWhSvr7akaWeq0UmlvbEsujU\\n' +\n 'vADqxGMcJFyCzxx3CkJjAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O\\n' +\n 'BBYEFFk8UJmlhoxFT3PP12PvhvazHjT4MA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG\\n' +\n '9w0BAQsFAAOCAQEAfFtr2lGoWVXmWAsIo2NYre7kzL8Xb9Tx7desKxCCz5HOOvIr\\n' +\n '8JMB1YK6A7IOvQsLJQ/f1UnKRh3X3mJZjKIywfrMSh0FiDf+rjcEzXxw2dGtUem4\\n' +\n 'A+WMvIA3jwxnJ90OQj5rQ8bg3iPtE6eojzo9vWQGw/Vu48Dtw1DJo9210Lq/6hze\\n' +\n 'hPhNkFh8fMXNT7Q1Wz/TJqJElyAQGNOXhyGpHKeb0jHMMhsy5UNoW5hLeMS5ffao\\n' +\n 'TBFWEJ1gVfxIU9QRxSh+62m46JIg+dwDlWv8Aww14KgepspRbMqDuaM2cinoejv6\\n' +\n 't3dyOyHHrsOyv3ffZUKtQhQbQr+sUcL89lARsg==\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIID/zCCAuegAwIBAgIRAIJLTMpzGNxqHZ4t+c1MlCIwDQYJKoZIhvcNAQELBQAw\\n' +\n 'gZcxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\\n' +\n 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEwMC4GA1UEAwwn\\n' +\n 'QW1hem9uIFJEUyBhcC1lYXN0LTEgUm9vdCBDQSBSU0EyMDQ4IEcxMRAwDgYDVQQH\\n' +\n 'DAdTZWF0dGxlMCAXDTIxMDUyNTIxMzAzM1oYDzIwNjEwNTI1MjIzMDMzWjCBlzEL\\n' +\n 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\\n' +\n 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdBbWF6\\n' +\n 'b24gUkRTIGFwLWVhc3QtMSBSb290IENBIFJTQTIwNDggRzExEDAOBgNVBAcMB1Nl\\n' +\n 'YXR0bGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDtdHut0ZhJ9Nn2\\n' +\n 'MpVafFcwHdoEzx06okmmhjJsNy4l9QYVeh0UUoek0SufRNMRF4d5ibzpgZol0Y92\\n' +\n '/qKWNe0jNxhEj6sXyHsHPeYtNBPuDMzThfbvsLK8z7pBP7vVyGPGuppqW/6m4ZBB\\n' +\n 'lcc9fsf7xpZ689iSgoyjiT6J5wlVgmCx8hFYc/uvcRtfd8jAHvheug7QJ3zZmIye\\n' +\n 'V4htOW+fRVWnBjf40Q+7uTv790UAqs0Zboj4Yil+hER0ibG62y1g71XcCyvcVpto\\n' +\n '2/XW7Y9NCgMNqQ7fGN3wR1gjtSYPd7DO32LTzYhutyvfbpAZjsAHnoObmoljcgXI\\n' +\n 'QjfBcCFpAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFJI3aWLg\\n' +\n 'CS5xqU5WYVaeT5s8lpO0MA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOC\\n' +\n 'AQEAUwATpJOcGVOs3hZAgJwznWOoTzOVJKfrqBum7lvkVH1vBwxBl9CahaKj3ZOt\\n' +\n 'YYp2qJzhDUWludL164DL4ZjS6eRedLRviyy5cRy0581l1MxPWTThs27z+lCC14RL\\n' +\n 'PJZNVYYdl7Jy9Q5NsQ0RBINUKYlRY6OqGDySWyuMPgno2GPbE8aynMdKP+f6G/uE\\n' +\n 'YHOf08gFDqTsbyfa70ztgVEJaRooVf5JJq4UQtpDvVswW2reT96qi6tXPKHN5qp3\\n' +\n '3wI0I1Mp4ePmiBKku2dwYzPfrJK/pQlvu0Gu5lKOQ65QdotwLAAoaFqrf9za1yYs\\n' +\n 'INUkHLWIxDds+4OHNYcerGp5Dw==\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIGCTCCA/GgAwIBAgIRAIO6ldra1KZvNWJ0TA1ihXEwDQYJKoZIhvcNAQEMBQAw\\n' +\n 'gZwxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\\n' +\n 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTE1MDMGA1UEAwws\\n' +\n 'QW1hem9uIFJEUyBhcC1zb3V0aGVhc3QtMSBSb290IENBIFJTQTQwOTYgRzExEDAO\\n' +\n 'BgNVBAcMB1NlYXR0bGUwIBcNMjEwNTIxMjE0NTA1WhgPMjEyMTA1MjEyMjQ1MDVa\\n' +\n 'MIGcMQswCQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywg\\n' +\n 'SW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExNTAzBgNVBAMM\\n' +\n 'LEFtYXpvbiBSRFMgYXAtc291dGhlYXN0LTEgUm9vdCBDQSBSU0E0MDk2IEcxMRAw\\n' +\n 'DgYDVQQHDAdTZWF0dGxlMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA\\n' +\n 'sDN52Si9pFSyZ1ruh3xAN0nVqEs960o2IK5CPu/ZfshFmzAwnx/MM8EHt/jMeZtj\\n' +\n 'SM58LADAsNDL01ELpFZATjgZQ6xNAyXRXE7RiTRUvNkK7O3o2qAGbLnJq/UqF7Sw\\n' +\n 'LRnB8V6hYOv+2EjVnohtGCn9SUFGZtYDjWXsLd4ML4Zpxv0a5LK7oEC7AHzbUR7R\\n' +\n 'jsjkrXqSv7GE7bvhSOhMkmgxgj1F3J0b0jdQdtyyj109aO0ATUmIvf+Bzadg5AI2\\n' +\n 'A9UA+TUcGeebhpHu8AP1Hf56XIlzPpaQv3ZJ4vzoLaVNUC7XKzAl1dlvCl7Klg/C\\n' +\n '84qmbD/tjZ6GHtzpLKgg7kQEV7mRoXq8X4wDX2AFPPQl2fv+Kbe+JODqm5ZjGegm\\n' +\n 'uskABBi8IFv1hYx9jEulZPxC6uD/09W2+niFm3pirnlWS83BwVDTUBzF+CooUIMT\\n' +\n 'jhWkIIZGDDgMJTzouBHfoSJtS1KpUZi99m2WyVs21MNKHeWAbs+zmI6TO5iiMC+T\\n' +\n 'uB8spaOiHFO1573Fmeer4sy3YA6qVoqVl6jjTQqOdy3frAMbCkwH22/crV8YA+08\\n' +\n 'hLeHXrMK+6XUvU+EtHAM3VzcrLbuYJUI2XJbzTj5g0Eb8I8JWsHvWHR5K7Z7gceR\\n' +\n '78AzxQmoGEfV6KABNWKsgoCQnfb1BidDJIe3BsI0A6UCAwEAAaNCMEAwDwYDVR0T\\n' +\n 'AQH/BAUwAwEB/zAdBgNVHQ4EFgQUABp0MlB14MSHgAcuNSOhs3MOlUcwDgYDVR0P\\n' +\n 'AQH/BAQDAgGGMA0GCSqGSIb3DQEBDAUAA4ICAQCv4CIOBSQi/QR9NxdRgVAG/pAh\\n' +\n 'tFJhV7OWb/wqwsNKFDtg6tTxwaahdCfWpGWId15OUe7G9LoPiKiwM9C92n0ZeHRz\\n' +\n '4ewbrQVo7Eu1JI1wf0rnZJISL72hVYKmlvaWaacHhWxvsbKLrB7vt6Cknxa+S993\\n' +\n 'Kf8i2Psw8j5886gaxhiUtzMTBwoDWak8ZaK7m3Y6C6hXQk08+3pnIornVSFJ9dlS\\n' +\n 'PAqt5UPwWmrEfF+0uIDORlT+cvrAwgSp7nUF1q8iasledycZ/BxFgQqzNwnkBDwQ\\n' +\n 'Z/aM52ArGsTzfMhkZRz9HIEhz1/0mJw8gZtDVQroD8778h8zsx2SrIz7eWQ6uWsD\\n' +\n 'QEeSWXpcheiUtEfzkDImjr2DLbwbA23c9LoexUD10nwohhoiQQg77LmvBVxeu7WU\\n' +\n 'E63JqaYUlOLOzEmNJp85zekIgR8UTkO7Gc+5BD7P4noYscI7pPOL5rP7YLg15ZFi\\n' +\n 'ega+G53NTckRXz4metsd8XFWloDjZJJq4FfD60VuxgXzoMNT9wpFTNSH42PR2s9L\\n' +\n 'I1vcl3w8yNccs9se2utM2nLsItZ3J0m/+QSRiw9hbrTYTcM9sXki0DtH2kyIOwYf\\n' +\n 'lOrGJDiYOIrXSQK36H0gQ+8omlrUTvUj4msvkXuQjlfgx6sgp2duOAfnGxE7uHnc\\n' +\n 'UhnJzzoe6M+LfGHkVQ==\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIICuDCCAj2gAwIBAgIQSAG6j2WHtWUUuLGJTPb1nTAKBggqhkjOPQQDAzCBmzEL\\n' +\n 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\\n' +\n 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTQwMgYDVQQDDCtBbWF6\\n' +\n 'b24gUkRTIGFwLW5vcnRoZWFzdC0yIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQH\\n' +\n 'DAdTZWF0dGxlMCAXDTIxMDUyMDE2MzgyNloYDzIxMjEwNTIwMTczODI2WjCBmzEL\\n' +\n 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\\n' +\n 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTQwMgYDVQQDDCtBbWF6\\n' +\n 'b24gUkRTIGFwLW5vcnRoZWFzdC0yIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQH\\n' +\n 'DAdTZWF0dGxlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE2eqwU4FOzW8RV1W381Bd\\n' +\n 'olhDOrqoMqzWli21oDUt7y8OnXM/lmAuOS6sr8Nt61BLVbONdbr+jgCYw75KabrK\\n' +\n 'ZGg3siqvMOgabIKkKuXO14wtrGyGDt7dnKXg5ERGYOZlo0IwQDAPBgNVHRMBAf8E\\n' +\n 'BTADAQH/MB0GA1UdDgQWBBS1Acp2WYxOcblv5ikZ3ZIbRCCW+zAOBgNVHQ8BAf8E\\n' +\n 'BAMCAYYwCgYIKoZIzj0EAwMDaQAwZgIxAJL84J08PBprxmsAKPTotBuVI3MyW1r8\\n' +\n 'xQ0i8lgCQUf8GcmYjQ0jI4oZyv+TuYJAcwIxAP9Xpzq0Docxb+4N1qVhpiOfWt1O\\n' +\n 'FnemFiy9m1l+wv6p3riQMPV7mBVpklmijkIv3Q==\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIECTCCAvGgAwIBAgIRALZLcqCVIJ25maDPE3sbPCIwDQYJKoZIhvcNAQELBQAw\\n' +\n 'gZwxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\\n' +\n 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTE1MDMGA1UEAwws\\n' +\n 'QW1hem9uIFJEUyBhcC1zb3V0aGVhc3QtMSBSb290IENBIFJTQTIwNDggRzExEDAO\\n' +\n 'BgNVBAcMB1NlYXR0bGUwIBcNMjEwNTIxMjEzOTM5WhgPMjA2MTA1MjEyMjM5Mzla\\n' +\n 'MIGcMQswCQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywg\\n' +\n 'SW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExNTAzBgNVBAMM\\n' +\n 'LEFtYXpvbiBSRFMgYXAtc291dGhlYXN0LTEgUm9vdCBDQSBSU0EyMDQ4IEcxMRAw\\n' +\n 'DgYDVQQHDAdTZWF0dGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA\\n' +\n 'ypKc+6FfGx6Gl6fQ78WYS29QoKgQiur58oxR3zltWeg5fqh9Z85K5S3UbRSTqWWu\\n' +\n 'Xcfnkz0/FS07qHX+nWAGU27JiQb4YYqhjZNOAq8q0+ptFHJ6V7lyOqXBq5xOzO8f\\n' +\n '+0DlbJSsy7GEtJp7d7QCM3M5KVY9dENVZUKeJwa8PC5StvwPx4jcLeZRJC2rAVDG\\n' +\n 'SW7NAInbATvr9ssSh03JqjXb+HDyywiqoQ7EVLtmtXWimX+0b3/2vhqcH5jgcKC9\\n' +\n 'IGFydrjPbv4kwMrKnm6XlPZ9L0/3FMzanXPGd64LQVy51SI4d5Xymn0Mw2kMX8s6\\n' +\n 'Nf05OsWcDzJ1n6/Q1qHSxQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud\\n' +\n 'DgQWBBRmaIc8eNwGP7i6P7AJrNQuK6OpFzAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZI\\n' +\n 'hvcNAQELBQADggEBAIBeHfGwz3S2zwIUIpqEEI5/sMySDeS+3nJR+woWAHeO0C8i\\n' +\n 'BJdDh+kzzkP0JkWpr/4NWz84/IdYo1lqASd1Kopz9aT1+iROXaWr43CtbzjXb7/X\\n' +\n 'Zv7eZZFC8/lS5SROq42pPWl4ekbR0w8XGQElmHYcWS41LBfKeHCUwv83ATF0XQ6I\\n' +\n '4t+9YSqZHzj4vvedrvcRInzmwWJaal9s7Z6GuwTGmnMsN3LkhZ+/GD6oW3pU/Pyh\\n' +\n 'EtWqffjsLhfcdCs3gG8x9BbkcJPH5aPAVkPn4wc8wuXg6xxb9YGsQuY930GWTYRf\\n' +\n 'schbgjsuqznW4HHakq4WNhs1UdTSTKkRdZz7FUQ=\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIEDzCCAvegAwIBAgIRAM2zAbhyckaqRim63b+Tib8wDQYJKoZIhvcNAQELBQAw\\n' +\n 'gZ8xCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\\n' +\n 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTE4MDYGA1UEAwwv\\n' +\n 'QW1hem9uIFJEUyBQcmV2aWV3IHVzLWVhc3QtMiBSb290IENBIFJTQTIwNDggRzEx\\n' +\n 'EDAOBgNVBAcMB1NlYXR0bGUwIBcNMjEwNTE4MjA0OTQ1WhgPMjA2MTA1MTgyMTQ5\\n' +\n 'NDVaMIGfMQswCQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNl\\n' +\n 'cywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExODA2BgNV\\n' +\n 'BAMML0FtYXpvbiBSRFMgUHJldmlldyB1cy1lYXN0LTIgUm9vdCBDQSBSU0EyMDQ4\\n' +\n 'IEcxMRAwDgYDVQQHDAdTZWF0dGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB\\n' +\n 'CgKCAQEA1ybjQMH1MkbvfKsWJaCTXeCSN1SG5UYid+Twe+TjuSqaXWonyp4WRR5z\\n' +\n 'tlkqq+L2MWUeQQAX3S17ivo/t84mpZ3Rla0cx39SJtP3BiA2BwfUKRjhPwOjmk7j\\n' +\n '3zrcJjV5k1vSeLNOfFFSlwyDiVyLAE61lO6onBx+cRjelu0egMGq6WyFVidTdCmT\\n' +\n 'Q9Zw3W6LTrnPvPmEyjHy2yCHzH3E50KSd/5k4MliV4QTujnxYexI2eR8F8YQC4m3\\n' +\n 'DYjXt/MicbqA366SOoJA50JbgpuVv62+LSBu56FpzY12wubmDZsdn4lsfYKiWxUy\\n' +\n 'uc83a2fRXsJZ1d3whxrl20VFtLFHFQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/\\n' +\n 'MB0GA1UdDgQWBBRC0ytKmDYbfz0Bz0Psd4lRQV3aNTAOBgNVHQ8BAf8EBAMCAYYw\\n' +\n 'DQYJKoZIhvcNAQELBQADggEBAGv8qZu4uaeoF6zsbumauz6ea6tdcWt+hGFuwGrb\\n' +\n 'tRbI85ucAmVSX06x59DJClsb4MPhL1XmqO3RxVMIVVfRwRHWOsZQPnXm8OYQ2sny\\n' +\n 'rYuFln1COOz1U/KflZjgJmxbn8x4lYiTPZRLarG0V/OsCmnLkQLPtEl/spMu8Un7\\n' +\n 'r3K8SkbWN80gg17Q8EV5mnFwycUx9xsTAaFItuG0en9bGsMgMmy+ZsDmTRbL+lcX\\n' +\n 'Fq8r4LT4QjrFz0shrzCwuuM4GmcYtBSxlacl+HxYEtAs5k10tmzRf6OYlY33tGf6\\n' +\n '1tkYvKryxDPF/EDgGp/LiBwx6ixYMBfISoYASt4V/ylAlHA=\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIICtTCCAjqgAwIBAgIRAK9BSZU6nIe6jqfODmuVctYwCgYIKoZIzj0EAwMwgZkx\\n' +\n 'CzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMu\\n' +\n 'MRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEyMDAGA1UEAwwpQW1h\\n' +\n 'em9uIFJEUyBjYS1jZW50cmFsLTEgUm9vdCBDQSBFQ0MzODQgRzExEDAOBgNVBAcM\\n' +\n 'B1NlYXR0bGUwIBcNMjEwNTIxMjIxMzA5WhgPMjEyMTA1MjEyMzEzMDlaMIGZMQsw\\n' +\n 'CQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjET\\n' +\n 'MBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExMjAwBgNVBAMMKUFtYXpv\\n' +\n 'biBSRFMgY2EtY2VudHJhbC0xIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQHDAdT\\n' +\n 'ZWF0dGxlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEUkEERcgxneT5H+P+fERcbGmf\\n' +\n 'bVx+M7rNWtgWUr6w+OBENebQA9ozTkeSg4c4M+qdYSObFqjxITdYxT1z/nHz1gyx\\n' +\n 'OKAhLjWu+nkbRefqy3RwXaWT680uUaAP6ccnkZOMo0IwQDAPBgNVHRMBAf8EBTAD\\n' +\n 'AQH/MB0GA1UdDgQWBBSN6fxlg0s5Wny08uRBYZcQ3TUoyzAOBgNVHQ8BAf8EBAMC\\n' +\n 'AYYwCgYIKoZIzj0EAwMDaQAwZgIxAORaz+MBVoFBTmZ93j2G2vYTwA6T5hWzBWrx\\n' +\n 'CrI54pKn5g6At56DBrkjrwZF5T1enAIxAJe/LZ9xpDkAdxDgGJFN8gZYLRWc0NRy\\n' +\n 'Rb4hihy5vj9L+w9uKc9VfEBIFuhT7Z3ljg==\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIEADCCAuigAwIBAgIQB/57HSuaqUkLaasdjxUdPjANBgkqhkiG9w0BAQsFADCB\\n' +\n 'mDELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\\n' +\n 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTEwLwYDVQQDDChB\\n' +\n 'bWF6b24gUkRTIGFwLXNvdXRoLTEgUm9vdCBDQSBSU0EyMDQ4IEcxMRAwDgYDVQQH\\n' +\n 'DAdTZWF0dGxlMCAXDTIxMDUxOTE3NDAzNFoYDzIwNjEwNTE5MTg0MDM0WjCBmDEL\\n' +\n 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\\n' +\n 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTEwLwYDVQQDDChBbWF6\\n' +\n 'b24gUkRTIGFwLXNvdXRoLTEgUm9vdCBDQSBSU0EyMDQ4IEcxMRAwDgYDVQQHDAdT\\n' +\n 'ZWF0dGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtbkaoVsUS76o\\n' +\n 'TgLFmcnaB8cswBk1M3Bf4IVRcwWT3a1HeJSnaJUqWHCJ+u3ip/zGVOYl0gN1MgBb\\n' +\n 'MuQRIJiB95zGVcIa6HZtx00VezDTr3jgGWRHmRjNVCCHGmxOZWvJjsIE1xavT/1j\\n' +\n 'QYV/ph4EZEIZ/qPq7e3rHohJaHDe23Z7QM9kbyqp2hANG2JtU/iUhCxqgqUHNozV\\n' +\n 'Zd0l5K6KnltZQoBhhekKgyiHqdTrH8fWajYl5seD71bs0Axowb+Oh0rwmrws3Db2\\n' +\n 'Dh+oc2PwREnjHeca9/1C6J2vhY+V0LGaJmnnIuOANrslx2+bgMlyhf9j0Bv8AwSi\\n' +\n 'dSWsobOhNQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQb7vJT\\n' +\n 'VciLN72yJGhaRKLn6Krn2TAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQAD\\n' +\n 'ggEBAAxEj8N9GslReAQnNOBpGl8SLgCMTejQ6AW/bapQvzxrZrfVOZOYwp/5oV0f\\n' +\n '9S1jcGysDM+DrmfUJNzWxq2Y586R94WtpH4UpJDGqZp+FuOVJL313te4609kopzO\\n' +\n 'lDdmd+8z61+0Au93wB1rMiEfnIMkOEyt7D2eTFJfJRKNmnPrd8RjimRDlFgcLWJA\\n' +\n '3E8wca67Lz/G0eAeLhRHIXv429y8RRXDtKNNz0wA2RwURWIxyPjn1fHjA9SPDkeW\\n' +\n 'E1Bq7gZj+tBnrqz+ra3yjZ2blss6Ds3/uRY6NYqseFTZWmQWT7FolZEnT9vMUitW\\n' +\n 'I0VynUbShVpGf6946e0vgaaKw20=\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIID/jCCAuagAwIBAgIQGyUVTaVjYJvWhroVEiHPpDANBgkqhkiG9w0BAQsFADCB\\n' +\n 'lzELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\\n' +\n 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdB\\n' +\n 'bWF6b24gUkRTIHVzLXdlc3QtMSBSb290IENBIFJTQTIwNDggRzExEDAOBgNVBAcM\\n' +\n 'B1NlYXR0bGUwIBcNMjEwNTE5MTkwNDA2WhgPMjA2MTA1MTkyMDA0MDZaMIGXMQsw\\n' +\n 'CQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjET\\n' +\n 'MBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExMDAuBgNVBAMMJ0FtYXpv\\n' +\n 'biBSRFMgdXMtd2VzdC0xIFJvb3QgQ0EgUlNBMjA0OCBHMTEQMA4GA1UEBwwHU2Vh\\n' +\n 'dHRsZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANhyXpJ0t4nigRDZ\\n' +\n 'EwNtFOem1rM1k8k5XmziHKDvDk831p7QsX9ZOxl/BT59Pu/P+6W6SvasIyKls1sW\\n' +\n 'FJIjFF+6xRQcpoE5L5evMgN/JXahpKGeQJPOX9UEXVW5B8yi+/dyUitFT7YK5LZA\\n' +\n 'MqWBN/LtHVPa8UmE88RCDLiKkqiv229tmwZtWT7nlMTTCqiAHMFcryZHx0pf9VPh\\n' +\n 'x/iPV8p2gBJnuPwcz7z1kRKNmJ8/cWaY+9w4q7AYlAMaq/rzEqDaN2XXevdpsYAK\\n' +\n 'TMMj2kji4x1oZO50+VPNfBl5ZgJc92qz1ocF95SAwMfOUsP8AIRZkf0CILJYlgzk\\n' +\n '/6u6qZECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm5jfcS9o\\n' +\n '+LwL517HpB6hG+PmpBswDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4IB\\n' +\n 'AQAcQ6lsqxi63MtpGk9XK8mCxGRLCad51+MF6gcNz6i6PAqhPOoKCoFqdj4cEQTF\\n' +\n 'F8dCfa3pvfJhxV6RIh+t5FCk/y6bWT8Ls/fYKVo6FhHj57bcemWsw/Z0XnROdVfK\\n' +\n 'Yqbc7zvjCPmwPHEqYBhjU34NcY4UF9yPmlLOL8uO1JKXa3CAR0htIoW4Pbmo6sA4\\n' +\n '6P0co/clW+3zzsQ92yUCjYmRNeSbdXbPfz3K/RtFfZ8jMtriRGuO7KNxp8MqrUho\\n' +\n 'HK8O0mlSUxGXBZMNicfo7qY8FD21GIPH9w5fp5oiAl7lqFzt3E3sCLD3IiVJmxbf\\n' +\n 'fUwpGd1XZBBSdIxysRLM6j48\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIICrTCCAjOgAwIBAgIQU+PAILXGkpoTcpF200VD/jAKBggqhkjOPQQDAzCBljEL\\n' +\n 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\\n' +\n 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMS8wLQYDVQQDDCZBbWF6\\n' +\n 'b24gUkRTIGFwLWVhc3QtMSBSb290IENBIEVDQzM4NCBHMTEQMA4GA1UEBwwHU2Vh\\n' +\n 'dHRsZTAgFw0yMTA1MjUyMTQ1MTFaGA8yMTIxMDUyNTIyNDUxMVowgZYxCzAJBgNV\\n' +\n 'BAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYD\\n' +\n 'VQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEvMC0GA1UEAwwmQW1hem9uIFJE\\n' +\n 'UyBhcC1lYXN0LTEgUm9vdCBDQSBFQ0MzODQgRzExEDAOBgNVBAcMB1NlYXR0bGUw\\n' +\n 'djAQBgcqhkjOPQIBBgUrgQQAIgNiAAT3tFKE8Kw1sGQAvNLlLhd8OcGhlc7MiW/s\\n' +\n 'NXm3pOiCT4vZpawKvHBzD76Kcv+ZZzHRxQEmG1/muDzZGlKR32h8AAj+NNO2Wy3d\\n' +\n 'CKTtYMiVF6Z2zjtuSkZQdjuQbe4eQ7qjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD\\n' +\n 'VR0OBBYEFAiSQOp16Vv0Ohpvqcbd2j5RmhYNMA4GA1UdDwEB/wQEAwIBhjAKBggq\\n' +\n 'hkjOPQQDAwNoADBlAjBVsi+5Ape0kOhMt/WFkANkslD4qXA5uqhrfAtH29Xzz2NV\\n' +\n 'tR7akiA771OaIGB/6xsCMQCZt2egCtbX7J0WkuZ2KivTh66jecJr5DHvAP4X2xtS\\n' +\n 'F/5pS+AUhcKTEGjI9jDH3ew=\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIICuDCCAj2gAwIBAgIQT5mGlavQzFHsB7hV6Mmy6TAKBggqhkjOPQQDAzCBmzEL\\n' +\n 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\\n' +\n 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTQwMgYDVQQDDCtBbWF6\\n' +\n 'b24gUkRTIGFwLXNvdXRoZWFzdC0yIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQH\\n' +\n 'DAdTZWF0dGxlMCAXDTIxMDUyNDIwNTAxNVoYDzIxMjEwNTI0MjE1MDE1WjCBmzEL\\n' +\n 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\\n' +\n 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTQwMgYDVQQDDCtBbWF6\\n' +\n 'b24gUkRTIGFwLXNvdXRoZWFzdC0yIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQH\\n' +\n 'DAdTZWF0dGxlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEcm4BBBjYK7clwm0HJRWS\\n' +\n 'flt3iYwoJbIXiXn9c1y3E+Vb7bmuyKhS4eO8mwO4GefUcXObRfoHY2TZLhMJLVBQ\\n' +\n '7MN2xDc0RtZNj07BbGD3VAIFRTDX0mH9UNYd0JQM3t/Oo0IwQDAPBgNVHRMBAf8E\\n' +\n 'BTADAQH/MB0GA1UdDgQWBBRrd5ITedfAwrGo4FA9UaDaGFK3rjAOBgNVHQ8BAf8E\\n' +\n 'BAMCAYYwCgYIKoZIzj0EAwMDaQAwZgIxAPBNqmVv1IIA3EZyQ6XuVf4gj79/DMO8\\n' +\n 'bkicNS1EcBpUqbSuU4Zwt2BYc8c/t7KVOQIxAOHoWkoKZPiKyCxfMtJpCZySUG+n\\n' +\n 'sXgB/LOyWE5BJcXUfm+T1ckeNoWeUUMOLmnJjg==\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIECTCCAvGgAwIBAgIRAJcDeinvdNrDQBeJ8+t38WQwDQYJKoZIhvcNAQELBQAw\\n' +\n 'gZwxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\\n' +\n 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTE1MDMGA1UEAwws\\n' +\n 'QW1hem9uIFJEUyBhcC1zb3V0aGVhc3QtNCBSb290IENBIFJTQTIwNDggRzExEDAO\\n' +\n 'BgNVBAcMB1NlYXR0bGUwIBcNMjIwNTI1MTY0OTE2WhgPMjA2MjA1MjUxNzQ5MTZa\\n' +\n 'MIGcMQswCQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywg\\n' +\n 'SW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExNTAzBgNVBAMM\\n' +\n 'LEFtYXpvbiBSRFMgYXAtc291dGhlYXN0LTQgUm9vdCBDQSBSU0EyMDQ4IEcxMRAw\\n' +\n 'DgYDVQQHDAdTZWF0dGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA\\n' +\n 'k8DBNkr9tMoIM0NHoFiO7cQfSX0cOMhEuk/CHt0fFx95IBytx7GHCnNzpM27O5z6\\n' +\n 'x6iRhfNnx+B6CrGyCzOjxvPizneY+h+9zfvNz9jj7L1I2uYMuiNyOKR6FkHR46CT\\n' +\n '1CiArfVLLPaTqgD/rQjS0GL2sLHS/0dmYipzynnZcs613XT0rAWdYDYgxDq7r/Yi\\n' +\n 'Xge5AkWQFkMUq3nOYDLCyGGfQqWKkwv6lZUHLCDKf+Y0Uvsrj8YGCI1O8mF0qPCQ\\n' +\n 'lmlfaDvbuBu1AV+aabmkvyFj3b8KRIlNLEtQ4N8KGYR2Jdb82S4YUGIOAt4wuuFt\\n' +\n '1B7AUDLk3V/u+HTWiwfoLQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud\\n' +\n 'DgQWBBSNpcjz6ArWBtAA+Gz6kyyZxrrgdDAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZI\\n' +\n 'hvcNAQELBQADggEBAGJEd7UgOzHYIcQRSF7nSYyjLROyalaIV9AX4WXW/Cqlul1c\\n' +\n 'MblP5etDZm7A/thliZIWAuyqv2bNicmS3xKvNy6/QYi1YgxZyy/qwJ3NdFl067W0\\n' +\n 't8nGo29B+EVK94IPjzFHWShuoktIgp+dmpijB7wkTIk8SmIoe9yuY4+hzgqk+bo4\\n' +\n 'ms2SOXSN1DoQ75Xv+YmztbnZM8MuWhL1T7hA4AMorzTQLJ9Pof8SpSdMHeDsHp0R\\n' +\n '01jogNFkwy25nw7cL62nufSuH2fPYGWXyNDg+y42wKsKWYXLRgUQuDVEJ2OmTFMB\\n' +\n 'T0Vf7VuNijfIA9hkN2d3K53m/9z5WjGPSdOjGhg=\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIID/jCCAuagAwIBAgIQRiwspKyrO0xoxDgSkqLZczANBgkqhkiG9w0BAQsFADCB\\n' +\n 'lzELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\\n' +\n 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdB\\n' +\n 'bWF6b24gUkRTIHVzLXdlc3QtMiBSb290IENBIFJTQTIwNDggRzExEDAOBgNVBAcM\\n' +\n 'B1NlYXR0bGUwIBcNMjEwNTI0MjE1OTAwWhgPMjA2MTA1MjQyMjU5MDBaMIGXMQsw\\n' +\n 'CQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjET\\n' +\n 'MBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExMDAuBgNVBAMMJ0FtYXpv\\n' +\n 'biBSRFMgdXMtd2VzdC0yIFJvb3QgQ0EgUlNBMjA0OCBHMTEQMA4GA1UEBwwHU2Vh\\n' +\n 'dHRsZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL53Jk3GsKiu+4bx\\n' +\n 'jDfsevWbwPCNJ3H08Zp7GWhvI3Tgi39opfHYv2ku2BKFjK8N2L6RvNPSR8yplv5j\\n' +\n 'Y0tK0U+XVNl8o0ibhqRDhbTuh6KL8CFINWYzAajuxFS+CF0U6c1Q3tXLBdALxA7l\\n' +\n 'FlXJ71QrP06W31kRe7kvgrvO7qWU3/OzUf9qYw4LSiR1/VkvvRCTqcVNw09clw/M\\n' +\n 'Jbw6FSgweN65M9j7zPbjGAXSHkXyxH1Erin2fa+B9PE4ZDgX9cp2C1DHewYJQL/g\\n' +\n 'SepwwcudVNRN1ibKH7kpMrgPnaNIVNx5sXVsTjk6q2ZqYw3SVHegltJpLy/cZReP\\n' +\n 'mlivF2kCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUmTcQd6o1\\n' +\n 'CuS65MjBrMwQ9JJjmBwwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4IB\\n' +\n 'AQAKSDSIzl956wVddPThf2VAzI8syw9ngSwsEHZvxVGHBvu5gg618rDyguVCYX9L\\n' +\n '4Kw/xJrk6S3qxOS2ZDyBcOpsrBskgahDFIunzoRP3a18ARQVq55LVgfwSDQiunch\\n' +\n 'Bd05cnFGLoiLkR5rrkgYaP2ftn3gRBRaf0y0S3JXZ2XB3sMZxGxavYq9mfiEcwB0\\n' +\n 'LMTMQ1NYzahIeG6Jm3LqRqR8HkzP/Ztq4dT2AtSLvFebbNMiWqeqT7OcYp94HTYT\\n' +\n 'zqrtaVdUg9bwyAUCDgy0GV9RHDIdNAOInU/4LEETovrtuBU7Z1q4tcHXvN6Hd1H8\\n' +\n 'gMb0mCG5I393qW5hFsA/diFb\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIECTCCAvGgAwIBAgIRAPQAvihfjBg/JDbj6U64K98wDQYJKoZIhvcNAQELBQAw\\n' +\n 'gZwxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\\n' +\n 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTE1MDMGA1UEAwws\\n' +\n 'QW1hem9uIFJEUyBhcC1ub3J0aGVhc3QtMiBSb290IENBIFJTQTIwNDggRzExEDAO\\n' +\n 'BgNVBAcMB1NlYXR0bGUwIBcNMjEwNTIwMTYyODQxWhgPMjA2MTA1MjAxNzI4NDFa\\n' +\n 'MIGcMQswCQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywg\\n' +\n 'SW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExNTAzBgNVBAMM\\n' +\n 'LEFtYXpvbiBSRFMgYXAtbm9ydGhlYXN0LTIgUm9vdCBDQSBSU0EyMDQ4IEcxMRAw\\n' +\n 'DgYDVQQHDAdTZWF0dGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA\\n' +\n 'vJ9lgyksCxkBlY40qOzI1TCj/Q0FVGuPL/Z1Mw2YN0l+41BDv0FHApjTUkIKOeIP\\n' +\n 'nwDwpXTa3NjYbk3cOZ/fpH2rYJ++Fte6PNDGPgKppVCUh6x3jiVZ1L7wOgnTdK1Q\\n' +\n 'Trw8440IDS5eLykRHvz8OmwvYDl0iIrt832V0QyOlHTGt6ZJ/aTQKl12Fy3QBLv7\\n' +\n 'stClPzvHTrgWqVU6uidSYoDtzHbU7Vda7YH0wD9IUoMBf7Tu0rqcE4uH47s2XYkc\\n' +\n 'SdLEoOg/Ngs7Y9B1y1GCyj3Ux7hnyvCoRTw014QyNB7dTatFMDvYlrRDGG14KeiU\\n' +\n 'UL7Vo/+EejWI31eXNLw84wIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud\\n' +\n 'DgQWBBQkgTWFsNg6wA3HbbihDQ4vpt1E2zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZI\\n' +\n 'hvcNAQELBQADggEBAGz1Asiw7hn5WYUj8RpOCzpE0h/oBZcnxP8wulzZ5Xd0YxWO\\n' +\n '0jYUcUk3tTQy1QvoY+Q5aCjg6vFv+oFBAxkib/SmZzp4xLisZIGlzpJQuAgRkwWA\\n' +\n '6BVMgRS+AaOMQ6wKPgz1x4v6T0cIELZEPq3piGxvvqkcLZKdCaeC3wCS6sxuafzZ\\n' +\n '4qA3zMwWuLOzRftgX2hQto7d/2YkRXga7jSvQl3id/EI+xrYoH6zIWgjdU1AUaNq\\n' +\n 'NGT7DIo47vVMfnd9HFZNhREsd4GJE83I+JhTqIxiKPNxrKgESzyADmNPt0gXDnHo\\n' +\n 'tbV1pMZz5HpJtjnP/qVZhEK5oB0tqlKPv9yx074=\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIICuTCCAj6gAwIBAgIRAKp1Rn3aL/g/6oiHVIXtCq8wCgYIKoZIzj0EAwMwgZsx\\n' +\n 'CzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMu\\n' +\n 'MRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTE0MDIGA1UEAwwrQW1h\\n' +\n 'em9uIFJEUyBhcC1ub3J0aGVhc3QtMyBSb290IENBIEVDQzM4NCBHMTEQMA4GA1UE\\n' +\n 'BwwHU2VhdHRsZTAgFw0yMTA1MjQyMDMyMTdaGA8yMTIxMDUyNDIxMzIxN1owgZsx\\n' +\n 'CzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMu\\n' +\n 'MRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTE0MDIGA1UEAwwrQW1h\\n' +\n 'em9uIFJEUyBhcC1ub3J0aGVhc3QtMyBSb290IENBIEVDQzM4NCBHMTEQMA4GA1UE\\n' +\n 'BwwHU2VhdHRsZTB2MBAGByqGSM49AgEGBSuBBAAiA2IABGTYWPILeBJXfcL3Dz4z\\n' +\n 'EWMUq78xB1HpjBwHoTURYfcMd5r96BTVG6yaUBWnAVCMeeD6yTG9a1eVGNhG14Hk\\n' +\n 'ZAEjgLiNB7RRbEG5JZ/XV7W/vODh09WCst2y9SLKsdgeAaNCMEAwDwYDVR0TAQH/\\n' +\n 'BAUwAwEB/zAdBgNVHQ4EFgQUoE0qZHmDCDB+Bnm8GUa/evpfPwgwDgYDVR0PAQH/\\n' +\n 'BAQDAgGGMAoGCCqGSM49BAMDA2kAMGYCMQCnil5MMwhY3qoXv0xvcKZGxGPaBV15\\n' +\n '0CCssCKn0oVtdJQfJQ3Jrf3RSaEyijXIJsoCMQC35iJi4cWoNX3N/qfgnHohW52O\\n' +\n 'B5dg0DYMqy5cNZ40+UcAanRMyqNQ6P7fy3umGco=\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIICtzCCAj2gAwIBAgIQPXnDTPegvJrI98qz8WxrMjAKBggqhkjOPQQDAzCBmzEL\\n' +\n 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\\n' +\n 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTQwMgYDVQQDDCtBbWF6\\n' +\n 'b24gUkRTIEJldGEgdXMtZWFzdC0xIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQH\\n' +\n 'DAdTZWF0dGxlMCAXDTIxMDUxODIxNDAxMloYDzIxMjEwNTE4MjI0MDEyWjCBmzEL\\n' +\n 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\\n' +\n 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTQwMgYDVQQDDCtBbWF6\\n' +\n 'b24gUkRTIEJldGEgdXMtZWFzdC0xIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQH\\n' +\n 'DAdTZWF0dGxlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEI0sR7gwutK5AB46hM761\\n' +\n 'gcLTGBIYlURSEoM1jcBwy56CL+3CJKZwLLyJ7qoOKfWbu5GsVLUTWS8MV6Nw33cx\\n' +\n '2KQD2svb694wi+Px2f4n9+XHkEFQw8BbiodDD7RZA70fo0IwQDAPBgNVHRMBAf8E\\n' +\n 'BTADAQH/MB0GA1UdDgQWBBTQSioOvnVLEMXwNSDg+zgln/vAkjAOBgNVHQ8BAf8E\\n' +\n 'BAMCAYYwCgYIKoZIzj0EAwMDaAAwZQIxAMwu1hqm5Bc98uE/E0B5iMYbBQ4kpMxO\\n' +\n 'tP8FTfz5UR37HUn26nXE0puj6S/Ffj4oJgIwXI7s2c26tFQeqzq6u3lrNJHp5jC9\\n' +\n 'Uxlo/hEJOLoDj5jnpxo8dMAtCNoQPaHdfL0P\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIICrjCCAjWgAwIBAgIQGKVv+5VuzEZEBzJ+bVfx2zAKBggqhkjOPQQDAzCBlzEL\\n' +\n 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\\n' +\n 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdBbWF6\\n' +\n 'b24gUkRTIGFwLXNvdXRoLTEgUm9vdCBDQSBFQ0MzODQgRzExEDAOBgNVBAcMB1Nl\\n' +\n 'YXR0bGUwIBcNMjEwNTE5MTc1MDU5WhgPMjEyMTA1MTkxODUwNTlaMIGXMQswCQYD\\n' +\n 'VQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEG\\n' +\n 'A1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExMDAuBgNVBAMMJ0FtYXpvbiBS\\n' +\n 'RFMgYXAtc291dGgtMSBSb290IENBIEVDQzM4NCBHMTEQMA4GA1UEBwwHU2VhdHRs\\n' +\n 'ZTB2MBAGByqGSM49AgEGBSuBBAAiA2IABMqdLJ0tZF/DGFZTKZDrGRJZID8ivC2I\\n' +\n 'JRCYTWweZKCKSCAzoiuGGHzJhr5RlLHQf/QgmFcgXsdmO2n3CggzhA4tOD9Ip7Lk\\n' +\n 'P05eHd2UPInyPCHRgmGjGb0Z+RdQ6zkitKNCMEAwDwYDVR0TAQH/BAUwAwEB/zAd\\n' +\n 'BgNVHQ4EFgQUC1yhRgVqU5bR8cGzOUCIxRpl4EYwDgYDVR0PAQH/BAQDAgGGMAoG\\n' +\n 'CCqGSM49BAMDA2cAMGQCMG0c/zLGECRPzGKJvYCkpFTCUvdP4J74YP0v/dPvKojL\\n' +\n 't/BrR1Tg4xlfhaib7hPc7wIwFvgqHes20CubQnZmswbTKLUrgSUW4/lcKFpouFd2\\n' +\n 't2/ewfi/0VhkeUW+IiHhOMdU\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIGCTCCA/GgAwIBAgIRAOXxJuyXVkbfhZCkS/dOpfEwDQYJKoZIhvcNAQEMBQAw\\n' +\n 'gZwxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\\n' +\n 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTE1MDMGA1UEAwws\\n' +\n 'QW1hem9uIFJEUyBhcC1ub3J0aGVhc3QtMSBSb290IENBIFJTQTQwOTYgRzExEDAO\\n' +\n 'BgNVBAcMB1NlYXR0bGUwIBcNMjEwNTI1MjE1OTEwWhgPMjEyMTA1MjUyMjU5MTBa\\n' +\n 'MIGcMQswCQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywg\\n' +\n 'SW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExNTAzBgNVBAMM\\n' +\n 'LEFtYXpvbiBSRFMgYXAtbm9ydGhlYXN0LTEgUm9vdCBDQSBSU0E0MDk2IEcxMRAw\\n' +\n 'DgYDVQQHDAdTZWF0dGxlMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA\\n' +\n 'xiP4RDYm4tIS12hGgn1csfO8onQDmK5SZDswUpl0HIKXOUVVWkHNlINkVxbdqpqH\\n' +\n 'FhbyZmNN6F/EWopotMDKe1B+NLrjNQf4zefv2vyKvPHJXhxoKmfyuTd5Wk8k1F7I\\n' +\n 'lNwLQzznB+ElhrLIDJl9Ro8t31YBBNFRGAGEnxyACFGcdkjlsa52UwfYrwreEg2l\\n' +\n 'gW5AzqHgjFfj9QRLydeU/n4bHm0F1adMsV7P3rVwilcUlqsENDwXnWyPEyv3sw6F\\n' +\n 'wNemLEs1129mB77fwvySb+lLNGsnzr8w4wdioZ74co+T9z2ca+eUiP+EQccVw1Is\\n' +\n 'D4Fh57IjPa6Wuc4mwiUYKkKY63+38aCfEWb0Qoi+zW+mE9nek6MOQ914cN12u5LX\\n' +\n 'dBoYopphRO5YmubSN4xcBy405nIdSdbrAVWwxXnVVyjqjknmNeqQsPZaxAhdoKhV\\n' +\n 'AqxNr8AUAdOAO6Sz3MslmcLlDXFihrEEOeUbpg/m1mSUUHGbu966ajTG1FuEHHwS\\n' +\n '7WB52yxoJo/tHvt9nAWnh3uH5BHmS8zn6s6CGweWKbX5yICnZ1QFR1e4pogxX39v\\n' +\n 'XD6YcNOO+Vn+HY4nXmjgSYVC7l+eeP8eduMg1xJujzjrbmrXU+d+cBObgdTOAlpa\\n' +\n 'JFHaGwYw1osAwPCo9cZ2f04yitBfj9aPFia8ASKldakCAwEAAaNCMEAwDwYDVR0T\\n' +\n 'AQH/BAUwAwEB/zAdBgNVHQ4EFgQUqKS+ltlior0SyZKYAkJ/efv55towDgYDVR0P\\n' +\n 'AQH/BAQDAgGGMA0GCSqGSIb3DQEBDAUAA4ICAQAdElvp8bW4B+Cv+1WSN87dg6TN\\n' +\n 'wGyIjJ14/QYURgyrZiYpUmZpj+/pJmprSWXu4KNyqHftmaidu7cdjL5nCAvAfnY5\\n' +\n '/6eDDbX4j8Gt9fb/6H9y0O0dn3mUPSEKG0crR+JRFAtPhn/2FNvst2P82yguWLv0\\n' +\n 'pHjHVUVcq+HqDMtUIJsTPYjSh9Iy77Q6TOZKln9dyDOWJpCSkiUWQtMAKbCSlvzd\\n' +\n 'zTs/ahqpT+zLfGR1SR+T3snZHgQnbnemmz/XtlKl52NxccARwfcEEKaCRQyGq/pR\\n' +\n '0PVZasyJS9JY4JfQs4YOdeOt4UMZ8BmW1+BQWGSkkb0QIRl8CszoKofucAlqdPcO\\n' +\n 'IT/ZaMVhI580LFGWiQIizWFskX6lqbCyHqJB3LDl8gJISB5vNTHOHpvpMOMs5PYt\\n' +\n 'cRl5Mrksx5MKMqG7y5R734nMlZxQIHjL5FOoOxTBp9KeWIL/Ib89T2QDaLw1SQ+w\\n' +\n 'ihqWBJ4ZdrIMWYpP3WqM+MXWk7WAem+xsFJdR+MDgOOuobVQTy5dGBlPks/6gpjm\\n' +\n 'rO9TjfQ36ppJ3b7LdKUPeRfnYmlR5RU4oyYJ//uLbClI443RZAgxaCXX/nyc12lr\\n' +\n 'eVLUMNF2abLX4/VF63m2/Z9ACgMRfqGshPssn1NN33OonrotQoj4S3N9ZrjvzKt8\\n' +\n 'iHcaqd60QKpfiH2A3A==\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIICuDCCAj2gAwIBAgIQPaVGRuu86nh/ylZVCLB0MzAKBggqhkjOPQQDAzCBmzEL\\n' +\n 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\\n' +\n 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTQwMgYDVQQDDCtBbWF6\\n' +\n 'b24gUkRTIGFwLW5vcnRoZWFzdC0xIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQH\\n' +\n 'DAdTZWF0dGxlMCAXDTIxMDUyNTIyMDMxNloYDzIxMjEwNTI1MjMwMzE2WjCBmzEL\\n' +\n 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\\n' +\n 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTQwMgYDVQQDDCtBbWF6\\n' +\n 'b24gUkRTIGFwLW5vcnRoZWFzdC0xIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQH\\n' +\n 'DAdTZWF0dGxlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEexNURoB9KE93MEtEAlJG\\n' +\n 'obz4LS/pD2hc8Gczix1WhVvpJ8bN5zCDXaKdnDMCebetyRQsmQ2LYlfmCwpZwSDu\\n' +\n '0zowB11Pt3I5Avu2EEcuKTlKIDMBeZ1WWuOd3Tf7MEAMo0IwQDAPBgNVHRMBAf8E\\n' +\n 'BTADAQH/MB0GA1UdDgQWBBSaYbZPBvFLikSAjpa8mRJvyArMxzAOBgNVHQ8BAf8E\\n' +\n 'BAMCAYYwCgYIKoZIzj0EAwMDaQAwZgIxAOEJkuh3Zjb7Ih/zuNRd1RBqmIYcnyw0\\n' +\n 'nwUZczKXry+9XebYj3VQxSRNadrarPWVqgIxAMg1dyGoDAYjY/L/9YElyMnvHltO\\n' +\n 'PwpJShmqHvCLc/mXMgjjYb/akK7yGthvW6j/uQ==\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIGCDCCA/CgAwIBAgIQChu3v5W1Doil3v6pgRIcVzANBgkqhkiG9w0BAQwFADCB\\n' +\n 'nDELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\\n' +\n 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTUwMwYDVQQDDCxB\\n' +\n 'bWF6b24gUkRTIEJldGEgdXMtZWFzdC0xIFJvb3QgQ0EgUlNBNDA5NiBHMTEQMA4G\\n' +\n 'A1UEBwwHU2VhdHRsZTAgFw0yMTA1MTgyMTM0MTVaGA8yMTIxMDUxODIyMzQxNVow\\n' +\n 'gZwxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\\n' +\n 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTE1MDMGA1UEAwws\\n' +\n 'QW1hem9uIFJEUyBCZXRhIHVzLWVhc3QtMSBSb290IENBIFJTQTQwOTYgRzExEDAO\\n' +\n 'BgNVBAcMB1NlYXR0bGUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC1\\n' +\n 'FUGQ5tf3OwpDR6hGBxhUcrkwKZhaXP+1St1lSOQvjG8wXT3RkKzRGMvb7Ee0kzqI\\n' +\n 'mzKKe4ASIhtV3UUWdlNmP0EA3XKnif6N79MismTeGkDj75Yzp5A6tSvqByCgxIjK\\n' +\n 'JqpJrch3Dszoyn8+XhwDxMZtkUa5nQVdJgPzJ6ltsQ8E4SWLyLtTu0S63jJDkqYY\\n' +\n 'S7cQblk7y7fel+Vn+LS5dGTdRRhMvSzEnb6mkVBaVzRyVX90FNUED06e8q+gU8Ob\\n' +\n 'htvQlf9/kRzHwRAdls2YBhH40ZeyhpUC7vdtPwlmIyvW5CZ/QiG0yglixnL6xahL\\n' +\n 'pbmTuTSA/Oqz4UGQZv2WzHe1lD2gRHhtFX2poQZeNQX8wO9IcUhrH5XurW/G9Xwl\\n' +\n 'Sat9CMPERQn4KC3HSkat4ir2xaEUrjfg6c4XsGyh2Pk/LZ0gLKum0dyWYpWP4JmM\\n' +\n 'RQNjrInXPbMhzQObozCyFT7jYegS/3cppdyy+K1K7434wzQGLU1gYXDKFnXwkX8R\\n' +\n 'bRKgx2pHNbH5lUddjnNt75+e8m83ygSq/ZNBUz2Ur6W2s0pl6aBjwaDES4VfWYlI\\n' +\n 'jokcmrGvJNDfQWygb1k00eF2bzNeNCHwgWsuo3HSxVgc/WGsbcGrTlDKfz+g3ich\\n' +\n 'bXUeUidPhRiv5UQIVCLIHpHuin3bj9lQO/0t6p+tAQIDAQABo0IwQDAPBgNVHRMB\\n' +\n 'Af8EBTADAQH/MB0GA1UdDgQWBBSFmMBgm5IsRv3hLrvDPIhcPweXYTAOBgNVHQ8B\\n' +\n 'Af8EBAMCAYYwDQYJKoZIhvcNAQEMBQADggIBAAa2EuozymOsQDJlEi7TqnyA2OhT\\n' +\n 'GXPfYqCyMJVkfrqNgcnsNpCAiNEiZbb+8sIPXnT8Ay8hrwJYEObJ5b7MHXpLuyft\\n' +\n 'z0Pu1oFLKnQxKjNxrIsCvaB4CRRdYjm1q7EqGhMGv76se9stOxkOqO9it31w/LoU\\n' +\n 'ENDk7GLsSqsV1OzYLhaH8t+MaNP6rZTSNuPrHwbV3CtBFl2TAZ7iKgKOhdFz1Hh9\\n' +\n 'Pez0lG+oKi4mHZ7ajov6PD0W7njn5KqzCAkJR6OYmlNVPjir+c/vUtEs0j+owsMl\\n' +\n 'g7KE5g4ZpTRShyh5BjCFRK2tv0tkqafzNtxrKC5XNpEkqqVTCnLcKG+OplIEadtr\\n' +\n 'C7UWf4HyhCiR+xIyxFyR05p3uY/QQU/5uza7GlK0J+U1sBUytx7BZ+Fo8KQfPPqV\\n' +\n 'CqDCaYUksoJcnJE/KeoksyqNQys7sDGJhkd0NeUGDrFLKHSLhIwAMbEWnqGxvhli\\n' +\n 'E7sP2E5rI/I9Y9zTbLIiI8pfeZlFF8DBdoP/Hzg8pqsiE/yiXSFTKByDwKzGwNqz\\n' +\n 'F0VoFdIZcIbLdDbzlQitgGpJtvEL7HseB0WH7B2PMMD8KPJlYvPveO3/6OLzCsav\\n' +\n '+CAkvk47NQViKMsUTKOA0JDCW+u981YRozxa3K081snhSiSe83zIPBz1ikldXxO9\\n' +\n '6YYLNPRrj3mi9T/f\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIICrjCCAjSgAwIBAgIRAMkvdFnVDb0mWWFiXqnKH68wCgYIKoZIzj0EAwMwgZYx\\n' +\n 'CzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMu\\n' +\n 'MRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEvMC0GA1UEAwwmQW1h\\n' +\n 'em9uIFJEUyB1cy13ZXN0LTEgUm9vdCBDQSBFQ0MzODQgRzExEDAOBgNVBAcMB1Nl\\n' +\n 'YXR0bGUwIBcNMjEwNTE5MTkxMzI0WhgPMjEyMTA1MTkyMDEzMjRaMIGWMQswCQYD\\n' +\n 'VQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEG\\n' +\n 'A1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExLzAtBgNVBAMMJkFtYXpvbiBS\\n' +\n 'RFMgdXMtd2VzdC0xIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQHDAdTZWF0dGxl\\n' +\n 'MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEy86DB+9th/0A5VcWqMSWDxIUblWTt/R0\\n' +\n 'ao6Z2l3vf2YDF2wt1A2NIOGpfQ5+WAOJO/IQmnV9LhYo+kacB8sOnXdQa6biZZkR\\n' +\n 'IyouUfikVQAKWEJnh1Cuo5YMM4E2sUt5o0IwQDAPBgNVHRMBAf8EBTADAQH/MB0G\\n' +\n 'A1UdDgQWBBQ8u3OnecANmG8OoT7KLWDuFzZwBTAOBgNVHQ8BAf8EBAMCAYYwCgYI\\n' +\n 'KoZIzj0EAwMDaAAwZQIwQ817qkb7mWJFnieRAN+m9W3E0FLVKaV3zC5aYJUk2fcZ\\n' +\n 'TaUx3oLp3jPLGvY5+wgeAjEA6wAicAki4ZiDfxvAIuYiIe1OS/7H5RA++R8BH6qG\\n' +\n 'iRzUBM/FItFpnkus7u/eTkvo\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIICrzCCAjWgAwIBAgIQS/+Ryfgb/IOVEa1pWoe8oTAKBggqhkjOPQQDAzCBlzEL\\n' +\n 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\\n' +\n 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdBbWF6\\n' +\n 'b24gUkRTIGFwLXNvdXRoLTIgUm9vdCBDQSBFQ0MzODQgRzExEDAOBgNVBAcMB1Nl\\n' +\n 'YXR0bGUwIBcNMjIwNjA2MjE1NDQyWhgPMjEyMjA2MDYyMjU0NDJaMIGXMQswCQYD\\n' +\n 'VQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEG\\n' +\n 'A1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExMDAuBgNVBAMMJ0FtYXpvbiBS\\n' +\n 'RFMgYXAtc291dGgtMiBSb290IENBIEVDQzM4NCBHMTEQMA4GA1UEBwwHU2VhdHRs\\n' +\n 'ZTB2MBAGByqGSM49AgEGBSuBBAAiA2IABDsX6fhdUWBQpYTdseBD/P3s96Dtw2Iw\\n' +\n 'OrXKNToCnmX5nMkUGdRn9qKNiz1pw3EPzaPxShbYwQ7LYP09ENK/JN4QQjxMihxC\\n' +\n 'jLFxS85nhBQQQGRCWikDAe38mD8fSvREQKNCMEAwDwYDVR0TAQH/BAUwAwEB/zAd\\n' +\n 'BgNVHQ4EFgQUIh1xZiseQYFjPYKJmGbruAgRH+AwDgYDVR0PAQH/BAQDAgGGMAoG\\n' +\n 'CCqGSM49BAMDA2gAMGUCMFudS4zLy+UUGrtgNLtRMcu/DZ9BUzV4NdHxo0bkG44O\\n' +\n 'thnjl4+wTKI6VbyAbj2rkgIxAOHps8NMITU5DpyiMnKTxV8ubb/WGHrLl0BjB8Lw\\n' +\n 'ETVJk5DNuZvsIIcm7ykk6iL4Tw==\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIGBDCCA+ygAwIBAgIQDcEmNIAVrDpUw5cH5ynutDANBgkqhkiG9w0BAQwFADCB\\n' +\n 'mjELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\\n' +\n 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTMwMQYDVQQDDCpB\\n' +\n 'bWF6b24gUkRTIG1lLWNlbnRyYWwtMSBSb290IENBIFJTQTQwOTYgRzExEDAOBgNV\\n' +\n 'BAcMB1NlYXR0bGUwIBcNMjIwNTA3MDA0MDIzWhgPMjEyMjA1MDcwMTQwMjNaMIGa\\n' +\n 'MQswCQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5j\\n' +\n 'LjETMBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExMzAxBgNVBAMMKkFt\\n' +\n 'YXpvbiBSRFMgbWUtY2VudHJhbC0xIFJvb3QgQ0EgUlNBNDA5NiBHMTEQMA4GA1UE\\n' +\n 'BwwHU2VhdHRsZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKvADk8t\\n' +\n 'Fl9bFlU5sajLPPDSOUpPAkKs6iPlz+27o1GJC88THcOvf3x0nVAcu9WYe9Qaas+4\\n' +\n 'j4a0vv51agqyODRD/SNi2HnqW7DbtLPAm6KBHe4twl28ItB/JD5g7u1oPAHFoXMS\\n' +\n 'cH1CZEAs5RtlZGzJhcBXLFsHNv/7+SCLyZ7+2XFh9OrtgU4wMzkHoRNndhfwV5bu\\n' +\n '17bPTwuH+VxH37zXf1mQ/KjhuJos0C9dL0FpjYBAuyZTAWhZKs8dpSe4DI544z4w\\n' +\n 'gkwUB4bC2nA1TBzsywEAHyNuZ/xRjNpWvx0ToWAA2iFJqC3VO3iKcnBplMvaUuMt\\n' +\n 'jwzVSNBnKcoabXCZL2XDLt4YTZR8FSwz05IvsmwcPB7uNTBXq3T9sjejW8QQK3vT\\n' +\n 'tzyfLq4jKmQE7PoS6cqYm+hEPm2hDaC/WP9bp3FdEJxZlPH26fq1b7BWYWhQ9pBA\\n' +\n 'Nv9zTnzdR1xohTyOJBUFQ81ybEzabqXqVXUIANqIOaNcTB09/sLJ7+zuMhp3mwBu\\n' +\n 'LtjfJv8PLuT1r63bU3seROhKA98b5KfzjvbvPSg3vws78JQyoYGbqNyDfyjVjg3U\\n' +\n 'v//AdVuPie6PNtdrW3upZY4Qti5IjP9e3kimaJ+KAtTgMRG56W0WxD3SP7+YGGbG\\n' +\n 'KhntDOkKsN39hLpn9UOafTIqFu7kIaueEy/NAgMBAAGjQjBAMA8GA1UdEwEB/wQF\\n' +\n 'MAMBAf8wHQYDVR0OBBYEFHAems86dTwdZbLe8AaPy3kfIUVoMA4GA1UdDwEB/wQE\\n' +\n 'AwIBhjANBgkqhkiG9w0BAQwFAAOCAgEAOBHpp0ICx81kmeoBcZTrMdJs2gnhcd85\\n' +\n 'FoSCjXx9H5XE5rmN/lQcxxOgj8hr3uPuLdLHu+i6THAyzjrl2NA1FWiqpfeECGmy\\n' +\n '0jm7iZsYORgGQYp/VKnDrwnKNSqlZvOuRr0kfUexwFlr34Y4VmupvEOK/RdGsd3S\\n' +\n '+3hiemcHse9ST/sJLHx962AWMkN86UHPscJEe4+eT3f2Wyzg6La8ARwdWZSNS+WH\\n' +\n 'ZfybrncMmuiXuUdHv9XspPsqhKgtHhcYeXOGUtrwQPLe3+VJZ0LVxhlTWr9951GZ\\n' +\n 'GfmWwTV/9VsyKVaCFIXeQ6L+gjcKyEzYF8wpMtQlSc7FFqwgC4bKxvMBSaRy88Nr\\n' +\n 'lV2+tJD/fr8zGUeBK44Emon0HKDBWGX+/Hq1ZIv0Da0S+j6LbA4fusWxtGfuGha+\\n' +\n 'luhHgVInCpALIOamiBEdGhILkoTtx7JrYppt3/Raqg9gUNCOOYlCvGhqX7DXeEfL\\n' +\n 'DGabooiY2FNWot6h04JE9nqGj5QqT8D6t/TL1nzxhRPzbcSDIHUd/b5R+a0bAA+7\\n' +\n 'YTU6JqzEVCWKEIEynYmqikgLMGB/OzWsgyEL6822QW6hJAQ78XpbNeCzrICF4+GC\\n' +\n '7KShLnwuWoWpAb26268lvOEvCTFM47VC6jNQl97md+2SA9Ma81C9wflid2M83Wle\\n' +\n 'cuLMVcQZceE=\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIEADCCAuigAwIBAgIQAhAteLRCvizAElaWORFU2zANBgkqhkiG9w0BAQsFADCB\\n' +\n 'mDELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\\n' +\n 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTEwLwYDVQQDDChB\\n' +\n 'bWF6b24gUkRTIG1lLXNvdXRoLTEgUm9vdCBDQSBSU0EyMDQ4IEcxMRAwDgYDVQQH\\n' +\n 'DAdTZWF0dGxlMCAXDTIxMDUyMDE3MDkxNloYDzIwNjEwNTIwMTgwOTE2WjCBmDEL\\n' +\n 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\\n' +\n 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTEwLwYDVQQDDChBbWF6\\n' +\n 'b24gUkRTIG1lLXNvdXRoLTEgUm9vdCBDQSBSU0EyMDQ4IEcxMRAwDgYDVQQHDAdT\\n' +\n 'ZWF0dGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA+qg7JAcOVKjh\\n' +\n 'N83SACnBFZPyB63EusfDr/0V9ZdL8lKcmZX9sv/CqoBo3N0EvBqHQqUUX6JvFb7F\\n' +\n 'XrMUZ740kr28gSRALfXTFgNODjXeDsCtEkKRTkac/UM8xXHn+hR7UFRPHS3e0GzI\\n' +\n 'iLiwQWDkr0Op74W8aM0CfaVKvh2bp4BI1jJbdDnQ9OKXpOxNHGUf0ZGb7TkNPkgI\\n' +\n 'b2CBAc8J5o3H9lfw4uiyvl6Fz5JoP+A+zPELAioYBXDrbE7wJeqQDJrETWqR9VEK\\n' +\n 'BXURCkVnHeaJy123MpAX2ozf4pqk0V0LOEOZRS29I+USF5DcWr7QIXR/w2I8ws1Q\\n' +\n '7ys+qbE+kQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQFJ16n\\n' +\n '1EcCMOIhoZs/F9sR+Jy++zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQAD\\n' +\n 'ggEBAOc5nXbT3XTDEZsxX2iD15YrQvmL5m13B3ImZWpx/pqmObsgx3/dg75rF2nQ\\n' +\n 'qS+Vl+f/HLh516pj2BPP/yWCq12TRYigGav8UH0qdT3CAClYy2o+zAzUJHm84oiB\\n' +\n 'ud+6pFVGkbqpsY+QMpJUbZWu52KViBpJMYsUEy+9cnPSFRVuRAHjYynSiLk2ZEjb\\n' +\n 'Wkdc4x0nOZR5tP0FgrX0Ve2KcjFwVQJVZLgOUqmFYQ/G0TIIGTNh9tcmR7yp+xJR\\n' +\n 'A2tbPV2Z6m9Yxx4E8lLEPNuoeouJ/GR4CkMEmF8cLwM310t174o3lKKUXJ4Vs2HO\\n' +\n 'Wj2uN6R9oI+jGLMSswTzCNV1vgc=\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIICuDCCAj6gAwIBAgIRAOocLeZWjYkG/EbHmscuy8gwCgYIKoZIzj0EAwMwgZsx\\n' +\n 'CzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMu\\n' +\n 'MRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTE0MDIGA1UEAwwrQW1h\\n' +\n 'em9uIFJEUyBhcC1zb3V0aGVhc3QtMSBSb290IENBIEVDQzM4NCBHMTEQMA4GA1UE\\n' +\n 'BwwHU2VhdHRsZTAgFw0yMTA1MjEyMTUwMDFaGA8yMTIxMDUyMTIyNTAwMVowgZsx\\n' +\n 'CzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMu\\n' +\n 'MRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTE0MDIGA1UEAwwrQW1h\\n' +\n 'em9uIFJEUyBhcC1zb3V0aGVhc3QtMSBSb290IENBIEVDQzM4NCBHMTEQMA4GA1UE\\n' +\n 'BwwHU2VhdHRsZTB2MBAGByqGSM49AgEGBSuBBAAiA2IABCEr3jq1KtRncnZfK5cq\\n' +\n 'btY0nW6ZG3FMbh7XwBIR6Ca0f8llGZ4vJEC1pXgiM/4Dh045B9ZIzNrR54rYOIfa\\n' +\n '2NcYZ7mk06DjIQML64hbAxbQzOAuNzLPx268MrlL2uW2XaNCMEAwDwYDVR0TAQH/\\n' +\n 'BAUwAwEB/zAdBgNVHQ4EFgQUln75pChychwN4RfHl+tOinMrfVowDgYDVR0PAQH/\\n' +\n 'BAQDAgGGMAoGCCqGSM49BAMDA2gAMGUCMGiyPINRU1mwZ4Crw01vpuPvxZxb2IOr\\n' +\n 'yX3RNlOIu4We1H+5dQk5tIvH8KGYFbWEpAIxAO9NZ6/j9osMhLgZ0yj0WVjb+uZx\\n' +\n 'YlZR9fyFisY/jNfX7QhSk+nrc3SFLRUNtpXrng==\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIEBTCCAu2gAwIBAgIRAKiaRZatN8eiz9p0s0lu0rQwDQYJKoZIhvcNAQELBQAw\\n' +\n 'gZoxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\\n' +\n 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEzMDEGA1UEAwwq\\n' +\n 'QW1hem9uIFJEUyBjYS1jZW50cmFsLTEgUm9vdCBDQSBSU0EyMDQ4IEcxMRAwDgYD\\n' +\n 'VQQHDAdTZWF0dGxlMCAXDTIxMDUyMTIyMDIzNVoYDzIwNjEwNTIxMjMwMjM1WjCB\\n' +\n 'mjELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\\n' +\n 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTMwMQYDVQQDDCpB\\n' +\n 'bWF6b24gUkRTIGNhLWNlbnRyYWwtMSBSb290IENBIFJTQTIwNDggRzExEDAOBgNV\\n' +\n 'BAcMB1NlYXR0bGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCygVMf\\n' +\n 'qB865IR9qYRBRFHn4eAqGJOCFx+UbraQZmjr/mnRqSkY+nhbM7Pn/DWOrRnxoh+w\\n' +\n 'q5F9ZxdZ5D5T1v6kljVwxyfFgHItyyyIL0YS7e2h7cRRscCM+75kMedAP7icb4YN\\n' +\n 'LfWBqfKHbHIOqvvQK8T6+Emu/QlG2B5LvuErrop9K0KinhITekpVIO4HCN61cuOe\\n' +\n 'CADBKF/5uUJHwS9pWw3uUbpGUwsLBuhJzCY/OpJlDqC8Y9aToi2Ivl5u3/Q/sKjr\\n' +\n '6AZb9lx4q3J2z7tJDrm5MHYwV74elGSXoeoG8nODUqjgklIWAPrt6lQ3WJpO2kug\\n' +\n '8RhCdSbWkcXHfX95AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE\\n' +\n 'FOIxhqTPkKVqKBZvMWtKewKWDvDBMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0B\\n' +\n 'AQsFAAOCAQEAqoItII89lOl4TKvg0I1EinxafZLXIheLcdGCxpjRxlZ9QMQUN3yb\\n' +\n 'y/8uFKBL0otbQgJEoGhxm4h0tp54g28M6TN1U0332dwkjYxUNwvzrMaV5Na55I2Z\\n' +\n '1hq4GB3NMXW+PvdtsgVOZbEN+zOyOZ5MvJHEQVkT3YRnf6avsdntltcRzHJ16pJc\\n' +\n 'Y8rR7yWwPXh1lPaPkxddrCtwayyGxNbNmRybjR48uHRhwu7v2WuAMdChL8H8bp89\\n' +\n 'TQLMrMHgSbZfee9hKhO4Zebelf1/cslRSrhkG0ESq6G5MUINj6lMg2g6F0F7Xz2v\\n' +\n 'ncD/vuRN5P+vT8th/oZ0Q2Gc68Pun0cn/g==\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIID/zCCAuegAwIBAgIRAJYlnmkGRj4ju/2jBQsnXJYwDQYJKoZIhvcNAQELBQAw\\n' +\n 'gZcxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\\n' +\n 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEwMC4GA1UEAwwn\\n' +\n 'QW1hem9uIFJEUyB1cy1lYXN0LTIgUm9vdCBDQSBSU0EyMDQ4IEcxMRAwDgYDVQQH\\n' +\n 'DAdTZWF0dGxlMCAXDTIxMDUyMTIzMDQ0NFoYDzIwNjEwNTIyMDAwNDQ0WjCBlzEL\\n' +\n 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\\n' +\n 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdBbWF6\\n' +\n 'b24gUkRTIHVzLWVhc3QtMiBSb290IENBIFJTQTIwNDggRzExEDAOBgNVBAcMB1Nl\\n' +\n 'YXR0bGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC74V3eigv+pCj5\\n' +\n 'nqDBqplY0Jp16pTeNB06IKbzb4MOTvNde6QjsZxrE1xUmprT8LxQqN9tI3aDYEYk\\n' +\n 'b9v4F99WtQVgCv3Y34tYKX9NwWQgwS1vQwnIR8zOFBYqsAsHEkeJuSqAB12AYUSd\\n' +\n 'Zv2RVFjiFmYJho2X30IrSLQfS/IE3KV7fCyMMm154+/K1Z2IJlcissydEAwgsUHw\\n' +\n 'edrE6CxJVkkJ3EvIgG4ugK/suxd8eEMztaQYJwSdN8TdfT59LFuSPl7zmF3fIBdJ\\n' +\n '//WexcQmGabaJ7Xnx+6o2HTfkP8Zzzzaq8fvjAcvA7gyFH5EP26G2ZqMG+0y4pTx\\n' +\n 'SPVTrQEXAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFIWWuNEF\\n' +\n 'sUMOC82XlfJeqazzrkPDMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOC\\n' +\n 'AQEAgClmxcJaQTGpEZmjElL8G2Zc8lGc+ylGjiNlSIw8X25/bcLRptbDA90nuP+q\\n' +\n 'zXAMhEf0ccbdpwxG/P5a8JipmHgqQLHfpkvaXx+0CuP++3k+chAJ3Gk5XtY587jX\\n' +\n '+MJfrPgjFt7vmMaKmynndf+NaIJAYczjhJj6xjPWmGrjM3MlTa9XesmelMwP3jep\\n' +\n 'bApIWAvCYVjGndbK9byyMq1nyj0TUzB8oJZQooaR3MMjHTmADuVBylWzkRMxbKPl\\n' +\n '4Nlsk4Ef1JvIWBCzsMt+X17nuKfEatRfp3c9tbpGlAE/DSP0W2/Lnayxr4RpE9ds\\n' +\n 'ICF35uSis/7ZlsftODUe8wtpkQ==\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n '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\\n' +\n 'Pqj2\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n '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\\n' +\n 'KDPtFEk=\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIICtzCCAj2gAwIBAgIQVZ5Y/KqjR4XLou8MCD5pOjAKBggqhkjOPQQDAzCBmzEL\\n' +\n 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\\n' +\n 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTQwMgYDVQQDDCtBbWF6\\n' +\n 'b24gUkRTIGFwLXNvdXRoZWFzdC00IFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQH\\n' +\n 'DAdTZWF0dGxlMCAXDTIyMDUyNTE2NTgzM1oYDzIxMjIwNTI1MTc1ODMzWjCBmzEL\\n' +\n 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\\n' +\n 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTQwMgYDVQQDDCtBbWF6\\n' +\n 'b24gUkRTIGFwLXNvdXRoZWFzdC00IFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQH\\n' +\n 'DAdTZWF0dGxlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEbo473OmpD5vkckdJajXg\\n' +\n 'brhmNFyoSa0WCY1njuZC2zMFp3zP6rX4I1r3imrYnJd9pFH/aSiV/r6L5ACE5RPx\\n' +\n '4qdg5SQ7JJUaZc3DWsTOiOed7BCZSzM+KTYK/2QzDMApo0IwQDAPBgNVHRMBAf8E\\n' +\n 'BTADAQH/MB0GA1UdDgQWBBTmogc06+1knsej1ltKUOdWFvwgsjAOBgNVHQ8BAf8E\\n' +\n 'BAMCAYYwCgYIKoZIzj0EAwMDaAAwZQIxAIs7TlLMbGTWNXpGiKf9DxaM07d/iDHe\\n' +\n 'F/Vv/wyWSTGdobxBL6iArQNVXz0Gr4dvPAIwd0rsoa6R0x5mtvhdRPtM37FYrbHJ\\n' +\n 'pbV+OMusQqcSLseunLBoCHenvJW0QOCQ8EDY\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIICvTCCAkOgAwIBAgIQCIY7E/bFvFN2lK9Kckb0dTAKBggqhkjOPQQDAzCBnjEL\\n' +\n 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\\n' +\n 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTcwNQYDVQQDDC5BbWF6\\n' +\n 'b24gUkRTIFByZXZpZXcgdXMtZWFzdC0yIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYD\\n' +\n 'VQQHDAdTZWF0dGxlMCAXDTIxMDUxODIxMDUxMFoYDzIxMjEwNTE4MjIwNTEwWjCB\\n' +\n 'njELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\\n' +\n 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTcwNQYDVQQDDC5B\\n' +\n 'bWF6b24gUkRTIFByZXZpZXcgdXMtZWFzdC0yIFJvb3QgQ0EgRUNDMzg0IEcxMRAw\\n' +\n 'DgYDVQQHDAdTZWF0dGxlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEMI0hzf1JCEOI\\n' +\n 'Eue4+DmcNnSs2i2UaJxHMrNGGfU7b42a7vwP53F7045ffHPBGP4jb9q02/bStZzd\\n' +\n 'VHqfcgqkSRI7beBKjD2mfz82hF/wJSITTgCLs+NRpS6zKMFOFHUNo0IwQDAPBgNV\\n' +\n 'HRMBAf8EBTADAQH/MB0GA1UdDgQWBBS8uF/6hk5mPLH4qaWv9NVZaMmyTjAOBgNV\\n' +\n 'HQ8BAf8EBAMCAYYwCgYIKoZIzj0EAwMDaAAwZQIxAO7Pu9wzLyM0X7Q08uLIL+vL\\n' +\n 'qaxe3UFuzFTWjM16MLJHbzLf1i9IDFKz+Q4hXCSiJwIwClMBsqT49BPUxVsJnjGr\\n' +\n 'EbyEk6aOOVfY1p2yQL649zh3M4h8okLnwf+bYIb1YpeU\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIEADCCAuigAwIBAgIQY+JhwFEQTe36qyRlUlF8ozANBgkqhkiG9w0BAQsFADCB\\n' +\n 'mDELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\\n' +\n 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTEwLwYDVQQDDChB\\n' +\n 'bWF6b24gUkRTIGFmLXNvdXRoLTEgUm9vdCBDQSBSU0EyMDQ4IEcxMRAwDgYDVQQH\\n' +\n 'DAdTZWF0dGxlMCAXDTIxMDUxOTE5MjQxNloYDzIwNjEwNTE5MjAyNDE2WjCBmDEL\\n' +\n 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\\n' +\n 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTEwLwYDVQQDDChBbWF6\\n' +\n 'b24gUkRTIGFmLXNvdXRoLTEgUm9vdCBDQSBSU0EyMDQ4IEcxMRAwDgYDVQQHDAdT\\n' +\n 'ZWF0dGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnIye77j6ev40\\n' +\n '8wRPyN2OdKFSUfI9jB20Or2RLO+RDoL43+USXdrze0Wv4HMRLqaen9BcmCfaKMp0\\n' +\n 'E4SFo47bXK/O17r6G8eyq1sqnHE+v288mWtYH9lAlSamNFRF6YwA7zncmE/iKL8J\\n' +\n '0vePHMHP/B6svw8LULZCk+nZk3tgxQn2+r0B4FOz+RmpkoVddfqqUPMbKUxhM2wf\\n' +\n 'fO7F6bJaUXDNMBPhCn/3ayKCjYr49ErmnpYV2ZVs1i34S+LFq39J7kyv6zAgbHv9\\n' +\n '+/MtRMoRB1CjpqW0jIOZkHBdYcd1o9p1zFn591Do1wPkmMsWdjIYj+6e7UXcHvOB\\n' +\n '2+ScIRAcnwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQGtq2W\\n' +\n 'YSyMMxpdQ3IZvcGE+nyZqTAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQAD\\n' +\n 'ggEBAEgoP3ixJsKSD5FN8dQ01RNHERl/IFbA7TRXfwC+L1yFocKnQh4Mp/msPRSV\\n' +\n '+OeHIvemPW/wtZDJzLTOFJ6eTolGekHK1GRTQ6ZqsWiU2fmiOP8ks4oSpI+tQ9Lw\\n' +\n 'VrfZqTiEcS5wEIqyfUAZZfKDo7W1xp+dQWzfczSBuZJZwI5iaha7+ILM0r8Ckden\\n' +\n 'TVTapc5pLSoO15v0ziRuQ2bT3V3nwu/U0MRK44z+VWOJdSiKxdnOYDs8hFNnKhfe\\n' +\n 'klbTZF7kW7WbiNYB43OaAQBJ6BALZsIskEaqfeZT8FD71uN928TcEQyBDXdZpRN+\\n' +\n 'iGQZDGhht0r0URGMDSs9waJtTfA=\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIF/jCCA+agAwIBAgIQXY/dmS+72lZPranO2JM9jjANBgkqhkiG9w0BAQwFADCB\\n' +\n 'lzELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\\n' +\n 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdB\\n' +\n 'bWF6b24gUkRTIGFwLWVhc3QtMSBSb290IENBIFJTQTQwOTYgRzExEDAOBgNVBAcM\\n' +\n 'B1NlYXR0bGUwIBcNMjEwNTI1MjEzNDUxWhgPMjEyMTA1MjUyMjM0NTFaMIGXMQsw\\n' +\n 'CQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjET\\n' +\n 'MBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExMDAuBgNVBAMMJ0FtYXpv\\n' +\n 'biBSRFMgYXAtZWFzdC0xIFJvb3QgQ0EgUlNBNDA5NiBHMTEQMA4GA1UEBwwHU2Vh\\n' +\n 'dHRsZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMyW9kBJjD/hx8e8\\n' +\n 'b5E1sF42bp8TXsz1htSYE3Tl3T1Aq379DfEhB+xa/ASDZxt7/vwa81BkNo4M6HYq\\n' +\n 'okYIXeE7cu5SnSgjWXqcERhgPevtAwgmhdE3yREe8oz2DyOi2qKKZqah+1gpPaIQ\\n' +\n 'fK0uAqoeQlyHosye3KZZKkDHBatjBsQ5kf8lhuf7wVulEZVRHY2bP2X7N98PfbpL\\n' +\n 'QdH7mWXzDtJJ0LiwFwds47BrkgK1pkHx2p1mTo+HMkfX0P6Fq1atkVC2RHHtbB/X\\n' +\n 'iYyH7paaHBzviFrhr679zNqwXIOKlbf74w3mS11P76rFn9rS1BAH2Qm6eY5S/Fxe\\n' +\n 'HEKXm4kjPN63Zy0p3yE5EjPt54yPkvumOnT+RqDGJ2HCI9k8Ehcbve0ogfdRKNqQ\\n' +\n 'VHWYTy8V33ndQRHZlx/CuU1yN61TH4WSoMly1+q1ihTX9sApmlQ14B2pJi/9DnKW\\n' +\n 'cwECrPy1jAowC2UJ45RtC8UC05CbP9yrIy/7Noj8gQDiDOepm+6w1g6aNlWoiuQS\\n' +\n 'kyI6nzz1983GcnOHya73ga7otXo0Qfg9jPghlYiMomrgshlSLDHZG0Ib/3hb8cnR\\n' +\n '1OcN9FpzNmVK2Ll1SmTMLrIhuCkyNYX9O/bOknbcf706XeESxGduSkHEjIw/k1+2\\n' +\n 'Atteoq5dT6cwjnJ9hyhiueVlVkiDAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8w\\n' +\n 'HQYDVR0OBBYEFLUI+DD7RJs+0nRnjcwIVWzzYSsFMA4GA1UdDwEB/wQEAwIBhjAN\\n' +\n 'BgkqhkiG9w0BAQwFAAOCAgEAb1mcCHv4qMQetLGTBH9IxsB2YUUhr5dda0D2BcHr\\n' +\n 'UtDbfd0VQs4tux6h/6iKwHPx0Ew8fuuYj99WknG0ffgJfNc5/fMspxR/pc1jpdyU\\n' +\n '5zMQ+B9wi0lOZPO9uH7/pr+d2odcNEy8zAwqdv/ihsTwLmGP54is9fVbsgzNW1cm\\n' +\n 'HKAVL2t/Ope+3QnRiRilKCN1lzhav4HHdLlN401TcWRWKbEuxF/FgxSO2Hmx86pj\\n' +\n 'e726lweCTMmnq/cTsPOVY0WMjs0or3eHDVlyLgVeV5ldyN+ptg3Oit60T05SRa58\\n' +\n 'AJPTaVKIcGQ/gKkKZConpu7GDofT67P/ox0YNY57LRbhsx9r5UY4ROgz7WMQ1yoS\\n' +\n 'Y+19xizm+mBm2PyjMUbfwZUyCxsdKMwVdOq5/UmTmdms+TR8+m1uBHPOTQ2vKR0s\\n' +\n 'Pd/THSzPuu+d3dbzRyDSLQbHFFneG760CUlD/ZmzFlQjJ89/HmAmz8IyENq+Sjhx\\n' +\n 'Jgzy+FjVZb8aRUoYLlnffpUpej1n87Ynlr1GrvC4GsRpNpOHlwuf6WD4W0qUTsC/\\n' +\n 'C9JO+fBzUj/aWlJzNcLEW6pte1SB+EdkR2sZvWH+F88TxemeDrV0jKJw5R89CDf8\\n' +\n 'ZQNfkxJYjhns+YeV0moYjqQdc7tq4i04uggEQEtVzEhRLU5PE83nlh/K2NZZm8Kj\\n' +\n 'dIA=\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIID/zCCAuegAwIBAgIRAPVSMfFitmM5PhmbaOFoGfUwDQYJKoZIhvcNAQELBQAw\\n' +\n 'gZcxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\\n' +\n 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEwMC4GA1UEAwwn\\n' +\n 'QW1hem9uIFJEUyB1cy1lYXN0LTEgUm9vdCBDQSBSU0EyMDQ4IEcxMRAwDgYDVQQH\\n' +\n 'DAdTZWF0dGxlMCAXDTIxMDUyNTIyMzQ1N1oYDzIwNjEwNTI1MjMzNDU3WjCBlzEL\\n' +\n 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\\n' +\n 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdBbWF6\\n' +\n 'b24gUkRTIHVzLWVhc3QtMSBSb290IENBIFJTQTIwNDggRzExEDAOBgNVBAcMB1Nl\\n' +\n 'YXR0bGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDu9H7TBeGoDzMr\\n' +\n 'dxN6H8COntJX4IR6dbyhnj5qMD4xl/IWvp50lt0VpmMd+z2PNZzx8RazeGC5IniV\\n' +\n '5nrLg0AKWRQ2A/lGGXbUrGXCSe09brMQCxWBSIYe1WZZ1iU1IJ/6Bp4D2YEHpXrW\\n' +\n 'bPkOq5x3YPcsoitgm1Xh8ygz6vb7PsvJvPbvRMnkDg5IqEThapPjmKb8ZJWyEFEE\\n' +\n 'QRrkCIRueB1EqQtJw0fvP4PKDlCJAKBEs/y049FoOqYpT3pRy0WKqPhWve+hScMd\\n' +\n '6obq8kxTFy1IHACjHc51nrGII5Bt76/MpTWhnJIJrCnq1/Uc3Qs8IVeb+sLaFC8K\\n' +\n 'DI69Sw6bAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE7PCopt\\n' +\n 'lyOgtXX0Y1lObBUxuKaCMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOC\\n' +\n 'AQEAFj+bX8gLmMNefr5jRJfHjrL3iuZCjf7YEZgn89pS4z8408mjj9z6Q5D1H7yS\\n' +\n 'jNETVV8QaJip1qyhh5gRzRaArgGAYvi2/r0zPsy+Tgf7v1KGL5Lh8NT8iCEGGXwF\\n' +\n 'g3Ir+Nl3e+9XUp0eyyzBIjHtjLBm6yy8rGk9p6OtFDQnKF5OxwbAgip42CD75r/q\\n' +\n 'p421maEDDvvRFR4D+99JZxgAYDBGqRRceUoe16qDzbMvlz0A9paCZFclxeftAxv6\\n' +\n 'QlR5rItMz/XdzpBJUpYhdzM0gCzAzdQuVO5tjJxmXhkSMcDP+8Q+Uv6FA9k2VpUV\\n' +\n 'E/O5jgpqUJJ2Hc/5rs9VkAPXeA==\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIICrzCCAjWgAwIBAgIQW0yuFCle3uj4vWiGU0SaGzAKBggqhkjOPQQDAzCBlzEL\\n' +\n 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\\n' +\n 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdBbWF6\\n' +\n 'b24gUkRTIGFmLXNvdXRoLTEgUm9vdCBDQSBFQ0MzODQgRzExEDAOBgNVBAcMB1Nl\\n' +\n 'YXR0bGUwIBcNMjEwNTE5MTkzNTE2WhgPMjEyMTA1MTkyMDM1MTZaMIGXMQswCQYD\\n' +\n 'VQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEG\\n' +\n 'A1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExMDAuBgNVBAMMJ0FtYXpvbiBS\\n' +\n 'RFMgYWYtc291dGgtMSBSb290IENBIEVDQzM4NCBHMTEQMA4GA1UEBwwHU2VhdHRs\\n' +\n 'ZTB2MBAGByqGSM49AgEGBSuBBAAiA2IABDPiKNZSaXs3Un/J/v+LTsFDANHpi7en\\n' +\n 'oL2qh0u0DoqNzEBTbBjvO23bLN3k599zh6CY3HKW0r2k1yaIdbWqt4upMCRCcUFi\\n' +\n 'I4iedAmubgzh56wJdoMZztjXZRwDthTkJKNCMEAwDwYDVR0TAQH/BAUwAwEB/zAd\\n' +\n 'BgNVHQ4EFgQUWbYkcrvVSnAWPR5PJhIzppcAnZIwDgYDVR0PAQH/BAQDAgGGMAoG\\n' +\n 'CCqGSM49BAMDA2gAMGUCMCESGqpat93CjrSEjE7z+Hbvz0psZTHwqaxuiH64GKUm\\n' +\n 'mYynIiwpKHyBrzjKBmeDoQIxANGrjIo6/b8Jl6sdIZQI18V0pAyLfLiZjlHVOnhM\\n' +\n 'MOTVgr82ZuPoEHTX78MxeMnYlw==\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIECTCCAvGgAwIBAgIRAIbsx8XOl0sgTNiCN4O+18QwDQYJKoZIhvcNAQELBQAw\\n' +\n 'gZwxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\\n' +\n 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTE1MDMGA1UEAwws\\n' +\n 'QW1hem9uIFJEUyBhcC1ub3J0aGVhc3QtMSBSb290IENBIFJTQTIwNDggRzExEDAO\\n' +\n 'BgNVBAcMB1NlYXR0bGUwIBcNMjEwNTI1MjE1NDU4WhgPMjA2MTA1MjUyMjU0NTha\\n' +\n 'MIGcMQswCQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywg\\n' +\n 'SW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExNTAzBgNVBAMM\\n' +\n 'LEFtYXpvbiBSRFMgYXAtbm9ydGhlYXN0LTEgUm9vdCBDQSBSU0EyMDQ4IEcxMRAw\\n' +\n 'DgYDVQQHDAdTZWF0dGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA\\n' +\n 'tROxwXWCgn5R9gI/2Ivjzaxc0g95ysBjoJsnhPdJEHQb7w3y2kWrVWU3Y9fOitgb\\n' +\n 'CEsnEC3PrhRnzNVW0fPsK6kbvOeCmjvY30rdbxbc8h+bjXfGmIOgAkmoULEr6Hc7\\n' +\n 'G1Q/+tvv4lEwIs7bEaf+abSZxRJbZ0MBxhbHn7UHHDiMZYvzK+SV1MGCxx7JVhrm\\n' +\n 'xWu3GC1zZCsGDhB9YqY9eR6PmjbqA5wy8vqbC57dZZa1QVtWIQn3JaRXn+faIzHx\\n' +\n 'nLMN5CEWihsdmHBXhnRboXprE/OS4MFv1UrQF/XM/h5RBeCywpHePpC+Oe1T3LNC\\n' +\n 'iP8KzRFrjC1MX/WXJnmOVQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud\\n' +\n 'DgQWBBS33XbXAUMs1znyZo4B0+B3D68WFTAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZI\\n' +\n 'hvcNAQELBQADggEBADuadd2EmlpueY2VlrIIPC30QkoA1EOSoCmZgN6124apkoY1\\n' +\n 'HiV4r+QNPljN4WP8gmcARnNkS7ZeR4fvWi8xPh5AxQCpiaBMw4gcbTMCuKDV68Pw\\n' +\n 'P2dZCTMspvR3CDfM35oXCufdtFnxyU6PAyINUqF/wyTHguO3owRFPz64+sk3r2pT\\n' +\n 'WHmJjG9E7V+KOh0s6REgD17Gqn6C5ijLchSrPUHB0wOIkeLJZndHxN/76h7+zhMt\\n' +\n 'fFeNxPWHY2MfpcaLjz4UREzZPSB2U9k+y3pW1omCIcl6MQU9itGx/LpQE+H3ZeX2\\n' +\n 'M2bdYd5L+ow+bdbGtsVKOuN+R9Dm17YpswF+vyQ=\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n '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\\n' +\n 'Em4Hy3A=\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n '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\\n' +\n 'jGKc3k6UNxpg\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n '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\\n' +\n '0Ws=\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIICtDCCAjqgAwIBAgIRAMyaTlVLN0ndGp4ffwKAfoMwCgYIKoZIzj0EAwMwgZkx\\n' +\n 'CzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMu\\n' +\n 'MRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEyMDAGA1UEAwwpQW1h\\n' +\n 'em9uIFJEUyBtZS1jZW50cmFsLTEgUm9vdCBDQSBFQ0MzODQgRzExEDAOBgNVBAcM\\n' +\n 'B1NlYXR0bGUwIBcNMjIwNTA3MDA0NDM3WhgPMjEyMjA1MDcwMTQ0MzdaMIGZMQsw\\n' +\n 'CQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjET\\n' +\n 'MBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExMjAwBgNVBAMMKUFtYXpv\\n' +\n 'biBSRFMgbWUtY2VudHJhbC0xIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQHDAdT\\n' +\n 'ZWF0dGxlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE19nCV1nsI6CohSor13+B25cr\\n' +\n 'zg+IHdi9Y3L7ziQnHWI6yjBazvnKD+oC71aRRlR8b5YXsYGUQxWzPLHN7EGPcSGv\\n' +\n 'bzA9SLG1KQYCJaQ0m9Eg/iGrwKWOgylbhVw0bCxoo0IwQDAPBgNVHRMBAf8EBTAD\\n' +\n 'AQH/MB0GA1UdDgQWBBS4KsknsJXM9+QPEkBdZxUPaLr11zAOBgNVHQ8BAf8EBAMC\\n' +\n 'AYYwCgYIKoZIzj0EAwMDaAAwZQIxAJaRgrYIEfXQMZQQDxMTYS0azpyWSseQooXo\\n' +\n 'L3nYq4OHGBgYyQ9gVjvRYWU85PXbfgIwdi82DtANQFkCu+j+BU0JBY/uRKPEeYzo\\n' +\n 'JG92igKIcXPqCoxIJ7lJbbzmuf73gQu5\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIGATCCA+mgAwIBAgIRAJwCobx0Os8F7ihbJngxrR8wDQYJKoZIhvcNAQEMBQAw\\n' +\n 'gZgxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\\n' +\n 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTExMC8GA1UEAwwo\\n' +\n 'QW1hem9uIFJEUyBtZS1zb3V0aC0xIFJvb3QgQ0EgUlNBNDA5NiBHMTEQMA4GA1UE\\n' +\n 'BwwHU2VhdHRsZTAgFw0yMTA1MjAxNzE1MzNaGA8yMTIxMDUyMDE4MTUzM1owgZgx\\n' +\n 'CzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMu\\n' +\n 'MRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTExMC8GA1UEAwwoQW1h\\n' +\n 'em9uIFJEUyBtZS1zb3V0aC0xIFJvb3QgQ0EgUlNBNDA5NiBHMTEQMA4GA1UEBwwH\\n' +\n 'U2VhdHRsZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANukKwlm+ZaI\\n' +\n 'Y5MkWGbEVLApEyLmlrHLEg8PfiiEa9ts7jssQcin3bzEPdTqGr5jo91ONoZ3ccWq\\n' +\n 'xJgg1W3bLu5CAO2CqIOXTXHRyCO/u0Ch1FGgWB8xETPSi3UHt/Vn1ltdO6DYdbDU\\n' +\n 'mYgwzYrvLBdRCwxsb9o+BuYQHVFzUYonqk/y9ujz3gotzFq7r55UwDTA1ita3vb4\\n' +\n 'eDKjIb4b1M4Wr81M23WHonpje+9qkkrAkdQcHrkgvSCV046xsq/6NctzwCUUNsgF\\n' +\n '7Q1a8ut5qJEYpz5ta8vI1rqFqAMBqCbFjRYlmAoTTpFPOmzAVxV+YoqTrW5A16su\\n' +\n '/2SXlMYfJ/n/ad/QfBNPPAAQMpyOr2RCL/YiL/PFZPs7NxYjnZHNWxMLSPgFyI+/\\n' +\n 't2klnn5jR76KJK2qimmaXedB90EtFsMRUU1e4NxH9gDuyrihKPJ3aVnZ35mSipvR\\n' +\n '/1KB8t8gtFXp/VQaz2sg8+uxPMKB81O37fL4zz6Mg5K8+aq3ejBiyHucpFGnsnVB\\n' +\n '3kQWeD36ONkybngmgWoyPceuSWm1hQ0Z7VRAQX+KlxxSaHmSaIk1XxZu9h9riQHx\\n' +\n 'fMuev6KXjRn/CjCoUTn+7eFrt0dT5GryQEIZP+nA0oq0LKxogigHNZlwAT4flrqb\\n' +\n 'JUfZJrqgoce5HjZSXl10APbtPjJi0fW9AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMB\\n' +\n 'Af8wHQYDVR0OBBYEFEfV+LztI29OVDRm0tqClP3NrmEWMA4GA1UdDwEB/wQEAwIB\\n' +\n 'hjANBgkqhkiG9w0BAQwFAAOCAgEAvSNe+0wuk53KhWlRlRf2x/97H2Q76X3anzF0\\n' +\n '5fOSVm022ldALzXMzqOfdnoKIhAu2oVKiHHKs7mMas+T6TL+Mkphx0CYEVxFE3PG\\n' +\n '061q3CqJU+wMm9W9xsB79oB2XG47r1fIEywZZ3GaRsatAbjcNOT8uBaATPQAfJFN\\n' +\n 'zjFe4XyN+rA4cFrYNvfHTeu5ftrYmvks7JlRaJgEGWsz+qXux7uvaEEVPqEumd2H\\n' +\n 'uYeaRNOZ2V23R009X5lbgBFx9tq5VDTnKhQiTQ2SeT0rc1W3Dz5ik6SbQQNP3nSR\\n' +\n '0Ywy7r/sZ3fcDyfFiqnrVY4Ympfvb4YW2PZ6OsQJbzH6xjdnTG2HtzEU30ngxdp1\\n' +\n 'WUEF4zt6rjJCp7QBUqXgdlHvJqYu6949qtWjEPiFN9uSsRV2i1YDjJqN52dLjAPn\\n' +\n 'AipJKo8x1PHTwUzuITqnB9BdP+5TlTl8biJfkEf/+08eWDTLlDHr2VrZLOLompTh\\n' +\n 'bS5OrhDmqA2Q+O+EWrTIhMflwwlCpR9QYM/Xwvlbad9H0FUHbJsCVNaru3wGOgWo\\n' +\n 'tt3dNSK9Lqnv/Ej9K9v6CRr36in4ylJKivhJ5B9E7ABHg7EpBJ1xi7O5eNDkNoJG\\n' +\n '+pFyphJq3AkBR2U4ni2tUaTAtSW2tks7IaiDV+UMtqZyGabT5ISQfWLLtLHSWn2F\\n' +\n 'Tspdjbg=\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIECTCCAvGgAwIBAgIRAJZFh4s9aZGzKaTMLrSb4acwDQYJKoZIhvcNAQELBQAw\\n' +\n 'gZwxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\\n' +\n 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTE1MDMGA1UEAwws\\n' +\n 'QW1hem9uIFJEUyBCZXRhIHVzLWVhc3QtMSBSb290IENBIFJTQTIwNDggRzExEDAO\\n' +\n 'BgNVBAcMB1NlYXR0bGUwIBcNMjEwNTE4MjEyODQxWhgPMjA2MTA1MTgyMjI4NDFa\\n' +\n 'MIGcMQswCQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywg\\n' +\n 'SW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExNTAzBgNVBAMM\\n' +\n 'LEFtYXpvbiBSRFMgQmV0YSB1cy1lYXN0LTEgUm9vdCBDQSBSU0EyMDQ4IEcxMRAw\\n' +\n 'DgYDVQQHDAdTZWF0dGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA\\n' +\n '17i2yoU6diep+WrqxIn2CrDEO2NdJVwWTSckx4WMZlLpkQDoymSmkNHjq9ADIApD\\n' +\n 'A31Cx+843apL7wub8QkFZD0Tk7/ThdHWJOzcAM3ov98QBPQfOC1W5zYIIRP2F+vQ\\n' +\n 'TRETHQnLcW3rLv0NMk5oQvIKpJoC9ett6aeVrzu+4cU4DZVWYlJUoC/ljWzCluau\\n' +\n '8blfW0Vwin6OB7s0HCG5/wijQWJBU5SrP/KAIPeQi1GqG5efbqAXDr/ple0Ipwyo\\n' +\n 'Xjjl73LenGUgqpANlC9EAT4i7FkJcllLPeK3NcOHjuUG0AccLv1lGsHAxZLgjk/x\\n' +\n 'z9ZcnVV9UFWZiyJTKxeKPwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud\\n' +\n 'DgQWBBRWyMuZUo4gxCR3Luf9/bd2AqZ7CjAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZI\\n' +\n 'hvcNAQELBQADggEBAIqN2DlIKlvDFPO0QUZQVFbsi/tLdYM98/vvzBpttlTGVMyD\\n' +\n 'gJuQeHVz+MnhGIwoCGOlGU3OOUoIlLAut0+WG74qYczn43oA2gbMd7HoD7oL/IGg\\n' +\n 'njorBwJVcuuLv2G//SqM3nxGcLRtkRnQ+lvqPxMz9+0fKFUn6QcIDuF0QSfthLs2\\n' +\n 'WSiGEPKO9c9RSXdRQ4pXA7c3hXng8P4A2ZmdciPne5Nu4I4qLDGZYRrRLRkNTrOi\\n' +\n 'TyS6r2HNGUfgF7eOSeKt3NWL+mNChcYj71/Vycf5edeczpUgfnWy9WbPrK1svKyl\\n' +\n 'aAs2xg+X6O8qB+Mnj2dNBzm+lZIS3sIlm+nO9sg=\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIICrjCCAjSgAwIBAgIRAPAlEk8VJPmEzVRRaWvTh2AwCgYIKoZIzj0EAwMwgZYx\\n' +\n 'CzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMu\\n' +\n 'MRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEvMC0GA1UEAwwmQW1h\\n' +\n 'em9uIFJEUyB1cy1lYXN0LTEgUm9vdCBDQSBFQ0MzODQgRzExEDAOBgNVBAcMB1Nl\\n' +\n 'YXR0bGUwIBcNMjEwNTI1MjI0MTU1WhgPMjEyMTA1MjUyMzQxNTVaMIGWMQswCQYD\\n' +\n 'VQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEG\\n' +\n 'A1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExLzAtBgNVBAMMJkFtYXpvbiBS\\n' +\n 'RFMgdXMtZWFzdC0xIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQHDAdTZWF0dGxl\\n' +\n 'MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEx5xjrup8II4HOJw15NTnS3H5yMrQGlbj\\n' +\n 'EDA5MMGnE9DmHp5dACIxmPXPMe/99nO7wNdl7G71OYPCgEvWm0FhdvVUeTb3LVnV\\n' +\n 'BnaXt32Ek7/oxGk1T+Df03C+W0vmuJ+wo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0G\\n' +\n 'A1UdDgQWBBTGXmqBWN/1tkSea4pNw0oHrjk2UDAOBgNVHQ8BAf8EBAMCAYYwCgYI\\n' +\n 'KoZIzj0EAwMDaAAwZQIxAIqqZWCSrIkZ7zsv/FygtAusW6yvlL935YAWYPVXU30m\\n' +\n 'jkMFLM+/RJ9GMvnO8jHfCgIwB+whlkcItzE9CRQ6CsMo/d5cEHDUu/QW6jSIh9BR\\n' +\n 'OGh9pTYPVkUbBiKPA7lVVhre\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n '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\\n' +\n 'nWS0\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIGCTCCA/GgAwIBAgIRAOY7gfcBZgR2tqfBzMbFQCUwDQYJKoZIhvcNAQEMBQAw\\n' +\n 'gZwxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\\n' +\n 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTE1MDMGA1UEAwws\\n' +\n 'QW1hem9uIFJEUyBhcC1zb3V0aGVhc3QtNCBSb290IENBIFJTQTQwOTYgRzExEDAO\\n' +\n 'BgNVBAcMB1NlYXR0bGUwIBcNMjIwNTI1MTY1NDU5WhgPMjEyMjA1MjUxNzU0NTla\\n' +\n 'MIGcMQswCQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywg\\n' +\n 'SW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExNTAzBgNVBAMM\\n' +\n 'LEFtYXpvbiBSRFMgYXAtc291dGhlYXN0LTQgUm9vdCBDQSBSU0E0MDk2IEcxMRAw\\n' +\n 'DgYDVQQHDAdTZWF0dGxlMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA\\n' +\n 'lfxER43FuLRdL08bddF0YhbCP+XXKj1A/TFMXmd2My8XDei8rPXFYyyjMig9+xZw\\n' +\n 'uAsIxLwz8uiA26CKA8bCZKg5VG2kTeOJAfvBJaLv1CZefs3Z4Uf1Sjvm6MF2yqEj\\n' +\n 'GoORfyfL9HiZFTDuF/hcjWoKYCfMuG6M/wO8IbdICrX3n+BiYQJu/pFO660Mg3h/\\n' +\n '8YBBWYDbHoCiH/vkqqJugQ5BM3OI5nsElW51P1icEEqti4AZ7JmtSv9t7fIFBVyR\\n' +\n 'oaEyOgpp0sm193F/cDJQdssvjoOnaubsSYm1ep3awZAUyGN/X8MBrPY95d0hLhfH\\n' +\n 'Ehc5Icyg+hsosBljlAyksmt4hFQ9iBnWIz/ZTfGMck+6p3HVL9RDgvluez+rWv59\\n' +\n '8q7omUGsiPApy5PDdwI/Wt/KtC34/2sjslIJfvgifdAtkRPkhff1WEwER00ADrN9\\n' +\n 'eGGInaCpJfb1Rq8cV2n00jxg7DcEd65VR3dmIRb0bL+jWK62ni/WdEyomAOMfmGj\\n' +\n 'aWf78S/4rasHllWJ+QwnaUYY3u6N8Cgio0/ep4i34FxMXqMV3V0/qXdfhyabi/LM\\n' +\n 'wCxNo1Dwt+s6OtPJbwO92JL+829QAxydfmaMTeHBsgMPkG7RwAekeuatKGHNsc2Z\\n' +\n 'x2Q4C2wVvOGAhcHwxfM8JfZs3nDSZJndtVVnFlUY0UECAwEAAaNCMEAwDwYDVR0T\\n' +\n 'AQH/BAUwAwEB/zAdBgNVHQ4EFgQUpnG7mWazy6k97/tb5iduRB3RXgQwDgYDVR0P\\n' +\n 'AQH/BAQDAgGGMA0GCSqGSIb3DQEBDAUAA4ICAQCDLqq1Wwa9Tkuv7vxBnIeVvvFF\\n' +\n 'ecTn+P+wJxl9Qa2ortzqTHZsBDyJO62d04AgBwiDXkJ9a+bthgG0H1J7Xee8xqv1\\n' +\n 'xyX2yKj24ygHjspLotKP4eDMdDi5TYq+gdkbPmm9Q69B1+W6e049JVGXvWG8/7kU\\n' +\n 'igxeuCYwtCCdUPRLf6D8y+1XMGgVv3/DSOHWvTg3MJ1wJ3n3+eve3rjGdRYWZeJu\\n' +\n 'k21HLSZYzVrCtUsh2YAeLnUbSxVuT2Xr4JehYe9zW5HEQ8Je/OUfnCy9vzoN/ITw\\n' +\n 'osAH+EBJQey7RxEDqMwCaRefH0yeHFcnOll0OXg/urnQmwbEYzQ1uutJaBPsjU0J\\n' +\n 'Qf06sMxI7GiB5nPE+CnI2sM6A9AW9kvwexGXpNJiLxF8dvPQthpOKGcYu6BFvRmt\\n' +\n '6ctfXd9b7JJoVqMWuf5cCY6ihpk1e9JTlAqu4Eb/7JNyGiGCR40iSLvV28un9wiE\\n' +\n 'plrdYxwcNYq851BEu3r3AyYWw/UW1AKJ5tM+/Gtok+AphMC9ywT66o/Kfu44mOWm\\n' +\n 'L3nSLSWEcgfUVgrikpnyGbUnGtgCmHiMlUtNVexcE7OtCIZoVAlCGKNu7tyuJf10\\n' +\n 'Qlk8oIIzfSIlcbHpOYoN79FkLoDNc2er4Gd+7w1oPQmdAB0jBJnA6t0OUBPKdDdE\\n' +\n 'Ufff2jrbfbzECn1ELg==\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n '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\\n' +\n 'fejbXelUSJSzDIdY\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIGCTCCA/GgAwIBAgIRAN7Y9G9i4I+ZaslPobE7VL4wDQYJKoZIhvcNAQEMBQAw\\n' +\n 'gZwxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\\n' +\n 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTE1MDMGA1UEAwws\\n' +\n 'QW1hem9uIFJEUyBhcC1ub3J0aGVhc3QtMiBSb290IENBIFJTQTQwOTYgRzExEDAO\\n' +\n 'BgNVBAcMB1NlYXR0bGUwIBcNMjEwNTIwMTYzMzIzWhgPMjEyMTA1MjAxNzMzMjNa\\n' +\n 'MIGcMQswCQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywg\\n' +\n 'SW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExNTAzBgNVBAMM\\n' +\n 'LEFtYXpvbiBSRFMgYXAtbm9ydGhlYXN0LTIgUm9vdCBDQSBSU0E0MDk2IEcxMRAw\\n' +\n 'DgYDVQQHDAdTZWF0dGxlMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA\\n' +\n '4BEPCiIfiK66Q/qa8k+eqf1Q3qsa6Xuu/fPkpuStXVBShhtXd3eqrM0iT4Xxs420\\n' +\n 'Va0vSB3oZ7l86P9zYfa60n6PzRxdYFckYX330aI7L/oFIdaodB/C9szvROI0oLG+\\n' +\n '6RwmIF2zcprH0cTby8MiM7G3v9ykpq27g4WhDC1if2j8giOQL3oHpUaByekZNIHF\\n' +\n 'dIllsI3RkXmR3xmmxoOxJM1B9MZi7e1CvuVtTGOnSGpNCQiqofehTGwxCN2wFSK8\\n' +\n 'xysaWlw48G0VzZs7cbxoXMH9QbMpb4tpk0d+T8JfAPu6uWO9UwCLWWydf0CkmA/+\\n' +\n 'D50/xd1t33X9P4FEaPSg5lYbHXzSLWn7oLbrN2UqMLaQrkoEBg/VGvzmfN0mbflw\\n' +\n '+T87bJ/VEOVNlG+gepyCTf89qIQVWOjuYMox4sK0PjzZGsYEuYiq1+OUT3vk/e5K\\n' +\n 'ag1fCcq2Isy4/iwB2xcXrsQ6ljwdk1fc+EmOnjGKrhuOHJY3S+RFv4ToQBsVyYhC\\n' +\n 'XGaC3EkqIX0xaCpDimxYhFjWhpDXAjG/zJ+hRLDAMCMhl/LPGRk/D1kzSbPmdjpl\\n' +\n 'lEMK5695PeBvEBTQdBQdOiYgOU3vWU6tzwwHfiM2/wgvess/q0FDAHfJhppbgbb9\\n' +\n '3vgsIUcsvoC5o29JvMsUxsDRvsAfEmMSDGkJoA/X6GECAwEAAaNCMEAwDwYDVR0T\\n' +\n 'AQH/BAUwAwEB/zAdBgNVHQ4EFgQUgEWm1mZCbGD6ytbwk2UU1aLaOUUwDgYDVR0P\\n' +\n 'AQH/BAQDAgGGMA0GCSqGSIb3DQEBDAUAA4ICAQBb4+ABTGBGwxK1U/q4g8JDqTQM\\n' +\n '1Wh8Oz8yAk4XtPJMAmCctxbd81cRnSnePWw/hxViLVtkZ/GsemvXfqAQyOn1coN7\\n' +\n 'QeYSw+ZOlu0j2jEJVynmgsR7nIRqE7QkCyZAU+d2FTJUfmee+IiBiGyFGgxz9n7A\\n' +\n 'JhBZ/eahBbiuoOik/APW2JWLh0xp0W0GznfJ8lAlaQTyDa8iDXmVtbJg9P9qzkvl\\n' +\n 'FgPXQttzEOyooF8Pb2LCZO4kUz+1sbU7tHdr2YE+SXxt6D3SBv+Yf0FlvyWLiqVk\\n' +\n 'GDEOlPPTDSjAWgKnqST8UJ0RDcZK/v1ixs7ayqQJU0GUQm1I7LGTErWXHMnCuHKe\\n' +\n 'UKYuiSZwmTcJ06NgdhcCnGZgPq13ryMDqxPeltQc3n5eO7f1cL9ERYLDLOzm6A9P\\n' +\n 'oQ3MfcVOsbHgGHZWaPSeNrQRN9xefqBXH0ZPasgcH9WJdsLlEjVUXoultaHOKx3b\\n' +\n 'UCCb+d3EfqF6pRT488ippOL6bk7zNubwhRa/+y4wjZtwe3kAX78ACJVcjPobH9jZ\\n' +\n 'ErySads5zdQeaoee5wRKdp3TOfvuCe4bwLRdhOLCHWzEcXzY3g/6+ppLvNom8o+h\\n' +\n 'Bh5X26G6KSfr9tqhQ3O9IcbARjnuPbvtJnoPY0gz3EHHGPhy0RNW8i2gl3nUp0ah\\n' +\n 'PtjwbKW0hYAhIttT0Q==\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIICtzCCAj2gAwIBAgIQQRBQTs6Y3H1DDbpHGta3lzAKBggqhkjOPQQDAzCBmzEL\\n' +\n 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\\n' +\n 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTQwMgYDVQQDDCtBbWF6\\n' +\n 'b24gUkRTIGFwLXNvdXRoZWFzdC0zIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQH\\n' +\n 'DAdTZWF0dGxlMCAXDTIxMDYxMTAwMTI0M1oYDzIxMjEwNjExMDExMjQzWjCBmzEL\\n' +\n 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\\n' +\n 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTQwMgYDVQQDDCtBbWF6\\n' +\n 'b24gUkRTIGFwLXNvdXRoZWFzdC0zIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQH\\n' +\n 'DAdTZWF0dGxlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEs0942Xj4m/gKA+WA6F5h\\n' +\n 'AHYuek9eGpzTRoLJddM4rEV1T3eSueytMVKOSlS3Ub9IhyQrH2D8EHsLYk9ktnGR\\n' +\n 'pATk0kCYTqFbB7onNo070lmMJmGT/Q7NgwC8cySChFxbo0IwQDAPBgNVHRMBAf8E\\n' +\n 'BTADAQH/MB0GA1UdDgQWBBQ20iKBKiNkcbIZRu0y1uoF1yJTEzAOBgNVHQ8BAf8E\\n' +\n 'BAMCAYYwCgYIKoZIzj0EAwMDaAAwZQIwYv0wTSrpQTaPaarfLN8Xcqrqu3hzl07n\\n' +\n 'FrESIoRw6Cx77ZscFi2/MV6AFyjCV/TlAjEAhpwJ3tpzPXpThRML8DMJYZ3YgMh3\\n' +\n 'CMuLqhPpla3cL0PhybrD27hJWl29C4el6aMO\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIICrDCCAjOgAwIBAgIQGcztRyV40pyMKbNeSN+vXTAKBggqhkjOPQQDAzCBljEL\\n' +\n 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\\n' +\n 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMS8wLQYDVQQDDCZBbWF6\\n' +\n 'b24gUkRTIHVzLWVhc3QtMiBSb290IENBIEVDQzM4NCBHMTEQMA4GA1UEBwwHU2Vh\\n' +\n 'dHRsZTAgFw0yMTA1MjEyMzE1NTZaGA8yMTIxMDUyMjAwMTU1NlowgZYxCzAJBgNV\\n' +\n 'BAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYD\\n' +\n 'VQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEvMC0GA1UEAwwmQW1hem9uIFJE\\n' +\n 'UyB1cy1lYXN0LTIgUm9vdCBDQSBFQ0MzODQgRzExEDAOBgNVBAcMB1NlYXR0bGUw\\n' +\n 'djAQBgcqhkjOPQIBBgUrgQQAIgNiAAQfDcv+GGRESD9wT+I5YIPRsD3L+/jsiIis\\n' +\n 'Tr7t9RSbFl+gYpO7ZbDXvNbV5UGOC5lMJo/SnqFRTC6vL06NF7qOHfig3XO8QnQz\\n' +\n '6T5uhhrhnX2RSY3/10d2kTyHq3ZZg3+jQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD\\n' +\n 'VR0OBBYEFLDyD3PRyNXpvKHPYYxjHXWOgfPnMA4GA1UdDwEB/wQEAwIBhjAKBggq\\n' +\n 'hkjOPQQDAwNnADBkAjB20HQp6YL7CqYD82KaLGzgw305aUKw2aMrdkBR29J183jY\\n' +\n '6Ocj9+Wcif9xnRMS+7oCMAvrt03rbh4SU9BohpRUcQ2Pjkh7RoY0jDR4Xq4qzjNr\\n' +\n '5UFr3BXpFvACxXF51BksGQ==\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIICrjCCAjWgAwIBAgIQeKbS5zvtqDvRtwr5H48cAjAKBggqhkjOPQQDAzCBlzEL\\n' +\n 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\\n' +\n 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdBbWF6\\n' +\n 'b24gUkRTIG1lLXNvdXRoLTEgUm9vdCBDQSBFQ0MzODQgRzExEDAOBgNVBAcMB1Nl\\n' +\n 'YXR0bGUwIBcNMjEwNTIwMTcxOTU1WhgPMjEyMTA1MjAxODE5NTVaMIGXMQswCQYD\\n' +\n 'VQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEG\\n' +\n 'A1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExMDAuBgNVBAMMJ0FtYXpvbiBS\\n' +\n 'RFMgbWUtc291dGgtMSBSb290IENBIEVDQzM4NCBHMTEQMA4GA1UEBwwHU2VhdHRs\\n' +\n 'ZTB2MBAGByqGSM49AgEGBSuBBAAiA2IABEKjgUaAPmUlRMEQdBC7BScAGosJ1zRV\\n' +\n 'LDd38qTBjzgmwBfQJ5ZfGIvyEK5unB09MB4e/3qqK5I/L6Qn5Px/n5g4dq0c7MQZ\\n' +\n 'u7G9GBYm90U3WRJBf7lQrPStXaRnS4A/O6NCMEAwDwYDVR0TAQH/BAUwAwEB/zAd\\n' +\n 'BgNVHQ4EFgQUNKcAbGEIn03/vkwd8g6jNyiRdD4wDgYDVR0PAQH/BAQDAgGGMAoG\\n' +\n 'CCqGSM49BAMDA2cAMGQCMHIeTrjenCSYuGC6txuBt/0ZwnM/ciO9kHGWVCoK8QLs\\n' +\n 'jGghb5/YSFGZbmQ6qpGlSAIwVOQgdFfTpEfe5i+Vs9frLJ4QKAfc27cTNYzRIM0I\\n' +\n 'E+AJgK4C4+DiyyMzOpiCfmvq\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIGCDCCA/CgAwIBAgIQSFkEUzu9FYgC5dW+5lnTgjANBgkqhkiG9w0BAQwFADCB\\n' +\n 'nDELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\\n' +\n 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTUwMwYDVQQDDCxB\\n' +\n 'bWF6b24gUkRTIGFwLXNvdXRoZWFzdC0zIFJvb3QgQ0EgUlNBNDA5NiBHMTEQMA4G\\n' +\n 'A1UEBwwHU2VhdHRsZTAgFw0yMTA2MTEwMDA4MzZaGA8yMTIxMDYxMTAxMDgzNlow\\n' +\n 'gZwxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\\n' +\n 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTE1MDMGA1UEAwws\\n' +\n 'QW1hem9uIFJEUyBhcC1zb3V0aGVhc3QtMyBSb290IENBIFJTQTQwOTYgRzExEDAO\\n' +\n 'BgNVBAcMB1NlYXR0bGUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDx\\n' +\n 'my5Qmd8zdwaI/KOKV9Xar9oNbhJP5ED0JCiigkuvCkg5qM36klszE8JhsUj40xpp\\n' +\n 'vQw9wkYW4y+C8twBpzKGBvakqMnoaVUV7lOCKx0RofrnNwkZCboTBB4X/GCZ3fIl\\n' +\n 'YTybS7Ehi1UuiaZspIT5A2jidoA8HiBPk+mTg1UUkoWS9h+MEAPa8L4DY6fGf4pO\\n' +\n 'J1Gk2cdePuNzzIrpm2yPto+I8MRROwZ3ha7ooyymOXKtz2c7jEHHJ314boCXAv9G\\n' +\n 'cdo27WiebewZkHHH7Zx9iTIVuuk2abyVSzvLVeGv7Nuy4lmSqa5clWYqWsGXxvZ2\\n' +\n '0fZC5Gd+BDUMW1eSpW7QDTk3top6x/coNoWuLSfXiC5ZrJkIKimSp9iguULgpK7G\\n' +\n 'abMMN4PR+O+vhcB8E879hcwmS2yd3IwcPTl3QXxufqeSV58/h2ibkqb/W4Bvggf6\\n' +\n '5JMHQPlPHOqMCVFIHP1IffIo+Of7clb30g9FD2j3F4qgV3OLwEDNg/zuO1DiAvH1\\n' +\n 'L+OnmGHkfbtYz+AVApkAZrxMWwoYrwpauyBusvSzwRE24vLTd2i80ZDH422QBLXG\\n' +\n 'rN7Zas8rwIiBKacJLYtBYETw8mfsNt8gb72aIQX6cZOsphqp6hUtKaiMTVgGazl7\\n' +\n 'tBXqbB+sIv3S9X6bM4cZJKkMJOXbnyCCLZFYv8TurwIDAQABo0IwQDAPBgNVHRMB\\n' +\n 'Af8EBTADAQH/MB0GA1UdDgQWBBTOVtaS1b/lz6yJDvNk65vEastbQTAOBgNVHQ8B\\n' +\n 'Af8EBAMCAYYwDQYJKoZIhvcNAQEMBQADggIBABEONg+TmMZM/PrYGNAfB4S41zp1\\n' +\n '3CVjslZswh/pC4kgXSf8cPJiUOzMwUevuFQj7tCqxQtJEygJM2IFg4ViInIah2kh\\n' +\n 'xlRakEGGw2dEVlxZAmmLWxlL1s1lN1565t5kgVwM0GVfwYM2xEvUaby6KDVJIkD3\\n' +\n 'aM6sFDBshvVA70qOggM6kU6mwTbivOROzfoIQDnVaT+LQjHqY/T+ok6IN0YXXCWl\\n' +\n 'Favai8RDjzLDFwXSRvgIK+1c49vlFFY4W9Efp7Z9tPSZU1TvWUcKdAtV8P2fPHAS\\n' +\n 'vAZ+g9JuNfeawhEibjXkwg6Z/yFUueQCQOs9TRXYogzp5CMMkfdNJF8byKYqHscs\\n' +\n 'UosIcETnHwqwban99u35sWcoDZPr6aBIrz7LGKTJrL8Nis8qHqnqQBXu/fsQEN8u\\n' +\n 'zJ2LBi8sievnzd0qI0kaWmg8GzZmYH1JCt1GXSqOFkI8FMy2bahP7TUQR1LBUKQ3\\n' +\n 'hrOSqldkhN+cSAOnvbQcFzLr+iEYEk34+NhcMIFVE+51KJ1n6+zISOinr6mI3ckX\\n' +\n '6p2tmiCD4Shk2Xx/VTY/KGvQWKFcQApWezBSvDNlGe0yV71LtLf3dr1pr4ofo7cE\\n' +\n 'rYucCJ40bfxEU/fmzYdBF32xP7AOD9U0FbOR3Mcthc6Z6w20WFC+zru8FGY08gPf\\n' +\n 'WT1QcNdw7ntUJP/w\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIICrzCCAjWgAwIBAgIQARky6+5PNFRkFVOp3Ob1CTAKBggqhkjOPQQDAzCBlzEL\\n' +\n 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\\n' +\n 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdBbWF6\\n' +\n 'b24gUkRTIGV1LXNvdXRoLTIgUm9vdCBDQSBFQ0MzODQgRzExEDAOBgNVBAcMB1Nl\\n' +\n 'YXR0bGUwIBcNMjIwNTIzMTg0MTI4WhgPMjEyMjA1MjMxOTQxMjdaMIGXMQswCQYD\\n' +\n 'VQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEG\\n' +\n 'A1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExMDAuBgNVBAMMJ0FtYXpvbiBS\\n' +\n 'RFMgZXUtc291dGgtMiBSb290IENBIEVDQzM4NCBHMTEQMA4GA1UEBwwHU2VhdHRs\\n' +\n 'ZTB2MBAGByqGSM49AgEGBSuBBAAiA2IABNVGL5oF7cfIBxKyWd2PVK/S5yQfaJY3\\n' +\n 'QFHWvEdt6951n9JhiiPrHzfVHsxZp1CBjILRMzjgRbYWmc8qRoLkgGE7htGdwudJ\\n' +\n 'Fa/WuKzO574Prv4iZXUnVGTboC7JdvKbh6NCMEAwDwYDVR0TAQH/BAUwAwEB/zAd\\n' +\n 'BgNVHQ4EFgQUgDeIIEKynwUbNXApdIPnmRWieZwwDgYDVR0PAQH/BAQDAgGGMAoG\\n' +\n 'CCqGSM49BAMDA2gAMGUCMEOOJfucrST+FxuqJkMZyCM3gWGZaB+/w6+XUAJC6hFM\\n' +\n 'uSTY0F44/bERkA4XhH+YGAIxAIpJQBakCA1/mXjsTnQ+0El9ty+LODp8ibkn031c\\n' +\n '8DKDS7pR9UK7ZYdR6zFg3ZCjQw==\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIICrjCCAjOgAwIBAgIQJvkWUcYLbnxtuwnyjMmntDAKBggqhkjOPQQDAzCBljEL\\n' +\n 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\\n' +\n 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMS8wLQYDVQQDDCZBbWF6\\n' +\n 'b24gUkRTIGV1LXdlc3QtMyBSb290IENBIEVDQzM4NCBHMTEQMA4GA1UEBwwHU2Vh\\n' +\n 'dHRsZTAgFw0yMTA1MjUyMjI2MTJaGA8yMTIxMDUyNTIzMjYxMlowgZYxCzAJBgNV\\n' +\n 'BAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYD\\n' +\n 'VQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEvMC0GA1UEAwwmQW1hem9uIFJE\\n' +\n 'UyBldS13ZXN0LTMgUm9vdCBDQSBFQ0MzODQgRzExEDAOBgNVBAcMB1NlYXR0bGUw\\n' +\n 'djAQBgcqhkjOPQIBBgUrgQQAIgNiAARENn8uHCyjn1dFax4OeXxvbV861qsXFD9G\\n' +\n 'DshumTmFzWWHN/69WN/AOsxy9XN5S7Cgad4gQgeYYYgZ5taw+tFo/jQvCLY//uR5\\n' +\n 'uihcLuLJ78opvRPvD9kbWZ6oXfBtFkWjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD\\n' +\n 'VR0OBBYEFKiK3LpoF+gDnqPldGSwChBPCYciMA4GA1UdDwEB/wQEAwIBhjAKBggq\\n' +\n 'hkjOPQQDAwNpADBmAjEA+7qfvRlnvF1Aosyp9HzxxCbN7VKu+QXXPhLEBWa5oeWW\\n' +\n 'UOcifunf/IVLC4/FGCsLAjEAte1AYp+iJyOHDB8UYkhBE/1sxnFaTiEPbvQBU0wZ\\n' +\n 'SuwWVLhu2wWDuSW+K7tTuL8p\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIID/zCCAuegAwIBAgIRAKeDpqX5WFCGNo94M4v69sUwDQYJKoZIhvcNAQELBQAw\\n' +\n 'gZcxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\\n' +\n 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEwMC4GA1UEAwwn\\n' +\n 'QW1hem9uIFJEUyBldS13ZXN0LTMgUm9vdCBDQSBSU0EyMDQ4IEcxMRAwDgYDVQQH\\n' +\n 'DAdTZWF0dGxlMCAXDTIxMDUyNTIyMTgzM1oYDzIwNjEwNTI1MjMxODMzWjCBlzEL\\n' +\n 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\\n' +\n 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdBbWF6\\n' +\n 'b24gUkRTIGV1LXdlc3QtMyBSb290IENBIFJTQTIwNDggRzExEDAOBgNVBAcMB1Nl\\n' +\n 'YXR0bGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCcKOTEMTfzvs4H\\n' +\n 'WtJR8gI7GXN6xesulWtZPv21oT+fLGwJ+9Bv8ADCGDDrDxfeH/HxJmzG9hgVAzVn\\n' +\n '4g97Bn7q07tGZM5pVi96/aNp11velZT7spOJKfJDZTlGns6DPdHmx48whpdO+dOb\\n' +\n '6+eR0VwCIv+Vl1fWXgoACXYCoKjhxJs+R+fwY//0JJ1YG8yjZ+ghLCJmvlkOJmE1\\n' +\n 'TCPUyIENaEONd6T+FHGLVYRRxC2cPO65Jc4yQjsXvvQypoGgx7FwD5voNJnFMdyY\\n' +\n '754JGPOOe/SZdepN7Tz7UEq8kn7NQSbhmCsgA/Hkjkchz96qN/YJ+H/okiQUTNB0\\n' +\n 'eG9ogiVFAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFFjayw9Y\\n' +\n 'MjbxfF14XAhMM2VPl0PfMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOC\\n' +\n 'AQEAAtmx6d9+9CWlMoU0JCirtp4dSS41bBfb9Oor6GQ8WIr2LdfZLL6uES/ubJPE\\n' +\n '1Sh5Vu/Zon5/MbqLMVrfniv3UpQIof37jKXsjZJFE1JVD/qQfRzG8AlBkYgHNEiS\\n' +\n 'VtD4lFxERmaCkY1tjKB4Dbd5hfhdrDy29618ZjbSP7NwAfnwb96jobCmMKgxVGiH\\n' +\n 'UqsLSiEBZ33b2hI7PJ6iTJnYBWGuiDnsWzKRmheA4nxwbmcQSfjbrNwa93w3caL2\\n' +\n 'v/4u54Kcasvcu3yFsUwJygt8z43jsGAemNZsS7GWESxVVlW93MJRn6M+MMakkl9L\\n' +\n 'tWaXdHZ+KUV7LhfYLb0ajvb40w==\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIEBDCCAuygAwIBAgIQJ5oxPEjefCsaESSwrxk68DANBgkqhkiG9w0BAQsFADCB\\n' +\n 'mjELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\\n' +\n 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTMwMQYDVQQDDCpB\\n' +\n 'bWF6b24gUkRTIGV1LWNlbnRyYWwtMiBSb290IENBIFJTQTIwNDggRzExEDAOBgNV\\n' +\n 'BAcMB1NlYXR0bGUwIBcNMjIwNjA2MjExNzA1WhgPMjA2MjA2MDYyMjE3MDVaMIGa\\n' +\n 'MQswCQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5j\\n' +\n 'LjETMBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExMzAxBgNVBAMMKkFt\\n' +\n 'YXpvbiBSRFMgZXUtY2VudHJhbC0yIFJvb3QgQ0EgUlNBMjA0OCBHMTEQMA4GA1UE\\n' +\n 'BwwHU2VhdHRsZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALTQt5eX\\n' +\n 'g+VP3BjO9VBkWJhE0GfLrU/QIk32I6WvrnejayTrlup9H1z4QWlXF7GNJrqScRMY\\n' +\n 'KhJHlcP05aPsx1lYco6pdFOf42ybXyWHHJdShj4A5glU81GTT+VrXGzHSarLmtua\\n' +\n 'eozkQgPpDsSlPt0RefyTyel7r3Cq+5K/4vyjCTcIqbfgaGwTU36ffjM1LaPCuE4O\\n' +\n 'nINMeD6YuImt2hU/mFl20FZ+IZQUIFZZU7pxGLqTRz/PWcH8tDDxnkYg7tNuXOeN\\n' +\n 'JbTpXrw7St50/E9ZQ0llGS+MxJD8jGRAa/oL4G/cwnV8P2OEPVVkgN9xDDQeieo0\\n' +\n '3xkzolkDkmeKOnUCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU\\n' +\n 'bwu8635iQGQMRanekesORM8Hkm4wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB\\n' +\n 'CwUAA4IBAQAgN6LE9mUgjsj6xGCX1afYE69fnmCjjb0rC6eEe1mb/QZNcyw4XBIW\\n' +\n '6+zTXo4mjZ4ffoxb//R0/+vdTE7IvaLgfAZgFsLKJCtYDDstXZj8ujQnGR9Pig3R\\n' +\n 'W+LpNacvOOSJSawNQq0Xrlcu55AU4buyD5VjcICnfF1dqBMnGTnh27m/scd/ZMx/\\n' +\n 'kapHZ/fMoK2mAgSX/NvUKF3UkhT85vSSM2BTtET33DzCPDQTZQYxFBa4rFRmFi4c\\n' +\n 'BLlmIReiCGyh3eJhuUUuYAbK6wLaRyPsyEcIOLMQmZe1+gAFm1+1/q5Ke9ugBmjf\\n' +\n 'PbTWjsi/lfZ5CdVAhc5lmZj/l5aKqwaS\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIICrjCCAjSgAwIBAgIRAKKPTYKln9L4NTx9dpZGUjowCgYIKoZIzj0EAwMwgZYx\\n' +\n 'CzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMu\\n' +\n 'MRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEvMC0GA1UEAwwmQW1h\\n' +\n 'em9uIFJEUyBldS13ZXN0LTIgUm9vdCBDQSBFQ0MzODQgRzExEDAOBgNVBAcMB1Nl\\n' +\n 'YXR0bGUwIBcNMjEwNTIxMjI1NTIxWhgPMjEyMTA1MjEyMzU1MjFaMIGWMQswCQYD\\n' +\n 'VQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEG\\n' +\n 'A1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExLzAtBgNVBAMMJkFtYXpvbiBS\\n' +\n 'RFMgZXUtd2VzdC0yIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQHDAdTZWF0dGxl\\n' +\n 'MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE/owTReDvaRqdmbtTzXbyRmEpKCETNj6O\\n' +\n 'hZMKH0F8oU9Tmn8RU7kQQj6xUKEyjLPrFBN7c+26TvrVO1KmJAvbc8bVliiJZMbc\\n' +\n 'C0yV5PtJTalvlMZA1NnciZuhxaxrzlK1o0IwQDAPBgNVHRMBAf8EBTADAQH/MB0G\\n' +\n 'A1UdDgQWBBT4i5HaoHtrs7Mi8auLhMbKM1XevDAOBgNVHQ8BAf8EBAMCAYYwCgYI\\n' +\n 'KoZIzj0EAwMDaAAwZQIxAK9A+8/lFdX4XJKgfP+ZLy5ySXC2E0Spoy12Gv2GdUEZ\\n' +\n 'p1G7c1KbWVlyb1d6subzkQIwKyH0Naf/3usWfftkmq8SzagicKz5cGcEUaULq4tO\\n' +\n 'GzA/AMpr63IDBAqkZbMDTCmH\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIICrzCCAjWgAwIBAgIQTgIvwTDuNWQo0Oe1sOPQEzAKBggqhkjOPQQDAzCBlzEL\\n' +\n 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\\n' +\n 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdBbWF6\\n' +\n 'b24gUkRTIGV1LW5vcnRoLTEgUm9vdCBDQSBFQ0MzODQgRzExEDAOBgNVBAcMB1Nl\\n' +\n 'YXR0bGUwIBcNMjEwNTI0MjEwNjM4WhgPMjEyMTA1MjQyMjA2MzhaMIGXMQswCQYD\\n' +\n 'VQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEG\\n' +\n 'A1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExMDAuBgNVBAMMJ0FtYXpvbiBS\\n' +\n 'RFMgZXUtbm9ydGgtMSBSb290IENBIEVDQzM4NCBHMTEQMA4GA1UEBwwHU2VhdHRs\\n' +\n 'ZTB2MBAGByqGSM49AgEGBSuBBAAiA2IABJuzXLU8q6WwSKXBvx8BbdIi3mPhb7Xo\\n' +\n 'rNJBfuMW1XRj5BcKH1ZoGaDGw+BIIwyBJg8qNmCK8kqIb4cH8/Hbo3Y+xBJyoXq/\\n' +\n 'cuk8aPrxiNoRsKWwiDHCsVxaK9L7GhHHAqNCMEAwDwYDVR0TAQH/BAUwAwEB/zAd\\n' +\n 'BgNVHQ4EFgQUYgcsdU4fm5xtuqLNppkfTHM2QMYwDgYDVR0PAQH/BAQDAgGGMAoG\\n' +\n 'CCqGSM49BAMDA2gAMGUCMQDz/Rm89+QJOWJecYAmYcBWCcETASyoK1kbr4vw7Hsg\\n' +\n '7Ew3LpLeq4IRmTyuiTMl0gMCMAa0QSjfAnxBKGhAnYxcNJSntUyyMpaXzur43ec0\\n' +\n '3D8npJghwC4DuICtKEkQiI5cSg==\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n '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\\n' +\n 'u3UBpZI=\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIICtDCCAjmgAwIBAgIQenQbcP/Zbj9JxvZ+jXbRnTAKBggqhkjOPQQDAzCBmTEL\\n' +\n 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\\n' +\n 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTIwMAYDVQQDDClBbWF6\\n' +\n 'b24gUkRTIGV1LWNlbnRyYWwtMSBSb290IENBIEVDQzM4NCBHMTEQMA4GA1UEBwwH\\n' +\n 'U2VhdHRsZTAgFw0yMTA1MjEyMjMzMjRaGA8yMTIxMDUyMTIzMzMyNFowgZkxCzAJ\\n' +\n 'BgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMw\\n' +\n 'EQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEyMDAGA1UEAwwpQW1hem9u\\n' +\n 'IFJEUyBldS1jZW50cmFsLTEgUm9vdCBDQSBFQ0MzODQgRzExEDAOBgNVBAcMB1Nl\\n' +\n 'YXR0bGUwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATlBHiEM9LoEb1Hdnd5j2VpCDOU\\n' +\n '5nGuFoBD8ROUCkFLFh5mHrHfPXwBc63heW9WrP3qnDEm+UZEUvW7ROvtWCTPZdLz\\n' +\n 'Z4XaqgAlSqeE2VfUyZOZzBSgUUJk7OlznXfkCMOjQjBAMA8GA1UdEwEB/wQFMAMB\\n' +\n 'Af8wHQYDVR0OBBYEFDT/ThjQZl42Nv/4Z/7JYaPNMly2MA4GA1UdDwEB/wQEAwIB\\n' +\n 'hjAKBggqhkjOPQQDAwNpADBmAjEAnZWmSgpEbmq+oiCa13l5aGmxSlfp9h12Orvw\\n' +\n 'Dq/W5cENJz891QD0ufOsic5oGq1JAjEAp5kSJj0MxJBTHQze1Aa9gG4sjHBxXn98\\n' +\n '4MP1VGsQuhfndNHQb4V0Au7OWnOeiobq\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIID/zCCAuegAwIBAgIRAMgnyikWz46xY6yRgiYwZ3swDQYJKoZIhvcNAQELBQAw\\n' +\n 'gZcxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\\n' +\n 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEwMC4GA1UEAwwn\\n' +\n 'QW1hem9uIFJEUyBldS13ZXN0LTEgUm9vdCBDQSBSU0EyMDQ4IEcxMRAwDgYDVQQH\\n' +\n 'DAdTZWF0dGxlMCAXDTIxMDUyMDE2NDkxMloYDzIwNjEwNTIwMTc0OTEyWjCBlzEL\\n' +\n 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\\n' +\n 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdBbWF6\\n' +\n 'b24gUkRTIGV1LXdlc3QtMSBSb290IENBIFJTQTIwNDggRzExEDAOBgNVBAcMB1Nl\\n' +\n 'YXR0bGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCi8JYOc9cYSgZH\\n' +\n 'gYPxLk6Xcc7HqzamvsnjYU98Dcb98y6iDqS46Ra2Ne02MITtU5MDL+qjxb8WGDZV\\n' +\n 'RUA9ZS69tkTO3gldW8QdiSh3J6hVNJQW81F0M7ZWgV0gB3n76WCmfT4IWos0AXHM\\n' +\n '5v7M/M4tqVmCPViQnZb2kdVlM3/Xc9GInfSMCgNfwHPTXl+PXX+xCdNBePaP/A5C\\n' +\n '5S0oK3HiXaKGQAy3K7VnaQaYdiv32XUatlM4K2WS4AMKt+2cw3hTCjlmqKRHvYFQ\\n' +\n 'veWCXAuc+U5PQDJ9SuxB1buFJZhT4VP3JagOuZbh5NWpIbOTxlAJOb5pGEDuJTKi\\n' +\n '1gQQQVEFAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNXm+N87\\n' +\n 'OFxK9Af/bjSxDCiulGUzMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOC\\n' +\n 'AQEAkqIbkgZ45spvrgRQ6n9VKzDLvNg+WciLtmVrqyohwwJbj4pYvWwnKQCkVc7c\\n' +\n 'hUOSBmlSBa5REAPbH5o8bdt00FPRrD6BdXLXhaECKgjsHe1WW08nsequRKD8xVmc\\n' +\n '8bEX6sw/utBeBV3mB+3Zv7ejYAbDFM4vnRsWtO+XqgReOgrl+cwdA6SNQT9oW3e5\\n' +\n 'rSQ+VaXgJtl9NhkiIysq9BeYigxqS/A13pHQp0COMwS8nz+kBPHhJTsajHCDc8F4\\n' +\n 'HfLi6cgs9G0gaRhT8FCH66OdGSqn196sE7Y3bPFFFs/3U+vxvmQgoZC6jegQXAg5\\n' +\n 'Prxd+VNXtNI/azitTysQPumH7A==\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIEBTCCAu2gAwIBAgIRAO8bekN7rUReuNPG8pSTKtEwDQYJKoZIhvcNAQELBQAw\\n' +\n 'gZoxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\\n' +\n 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEzMDEGA1UEAwwq\\n' +\n 'QW1hem9uIFJEUyBldS1jZW50cmFsLTEgUm9vdCBDQSBSU0EyMDQ4IEcxMRAwDgYD\\n' +\n 'VQQHDAdTZWF0dGxlMCAXDTIxMDUyMTIyMjM0N1oYDzIwNjEwNTIxMjMyMzQ3WjCB\\n' +\n 'mjELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\\n' +\n 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTMwMQYDVQQDDCpB\\n' +\n 'bWF6b24gUkRTIGV1LWNlbnRyYWwtMSBSb290IENBIFJTQTIwNDggRzExEDAOBgNV\\n' +\n 'BAcMB1NlYXR0bGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCTTYds\\n' +\n 'Tray+Q9VA5j5jTh5TunHKFQzn68ZbOzdqaoi/Rq4ohfC0xdLrxCpfqn2TGDHN6Zi\\n' +\n '2qGK1tWJZEd1H0trhzd9d1CtGK+3cjabUmz/TjSW/qBar7e9MA67/iJ74Gc+Ww43\\n' +\n 'A0xPNIWcL4aLrHaLm7sHgAO2UCKsrBUpxErOAACERScVYwPAfu79xeFcX7DmcX+e\\n' +\n 'lIqY16pQAvK2RIzrekSYfLFxwFq2hnlgKHaVgZ3keKP+nmXcXmRSHQYUUr72oYNZ\\n' +\n 'HcNYl2+gxCc9ccPEHM7xncVEKmb5cWEWvVoaysgQ+osi5f5aQdzgC2X2g2daKbyA\\n' +\n 'XL/z5FM9GHpS5BJjAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE\\n' +\n 'FBDAiJ7Py9/A9etNa/ebOnx5l5MGMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0B\\n' +\n 'AQsFAAOCAQEALMh/+81fFPdJV/RrJUeoUvFCGMp8iaANu97NpeJyKitNOv7RoeVP\\n' +\n 'WjivS0KcCqZaDBs+p6IZ0sLI5ZH098LDzzytcfZg0PsGqUAb8a0MiU/LfgDCI9Ee\\n' +\n 'jsOiwaFB8k0tfUJK32NPcIoQYApTMT2e26lPzYORSkfuntme2PTHUnuC7ikiQrZk\\n' +\n 'P+SZjWgRuMcp09JfRXyAYWIuix4Gy0eZ4rpRuaTK6mjAb1/LYoNK/iZ/gTeIqrNt\\n' +\n 'l70OWRsWW8jEmSyNTIubGK/gGGyfuZGSyqoRX6OKHESkP6SSulbIZHyJ5VZkgtXo\\n' +\n '2XvyRyJ7w5pFyoofrL3Wv0UF8yt/GDszmg==\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIF/zCCA+egAwIBAgIRAMDk/F+rrhdn42SfE+ghPC8wDQYJKoZIhvcNAQEMBQAw\\n' +\n 'gZcxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\\n' +\n 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEwMC4GA1UEAwwn\\n' +\n 'QW1hem9uIFJEUyBldS13ZXN0LTIgUm9vdCBDQSBSU0E0MDk2IEcxMRAwDgYDVQQH\\n' +\n 'DAdTZWF0dGxlMCAXDTIxMDUyMTIyNTEyMloYDzIxMjEwNTIxMjM1MTIyWjCBlzEL\\n' +\n 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\\n' +\n 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdBbWF6\\n' +\n 'b24gUkRTIGV1LXdlc3QtMiBSb290IENBIFJTQTQwOTYgRzExEDAOBgNVBAcMB1Nl\\n' +\n 'YXR0bGUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2twMALVg9vRVu\\n' +\n 'VNqsr6N8thmp3Dy8jEGTsm3GCQ+C5P2YcGlD/T/5icfWW84uF7Sx3ezcGlvsqFMf\\n' +\n 'Ukj9sQyqtz7qfFFugyy7pa/eH9f48kWFHLbQYm9GEgbYBIrWMp1cy3vyxuMCwQN4\\n' +\n 'DCncqU+yNpy0CprQJEha3PzY+3yJOjDQtc3zr99lyECCFJTDUucxHzyQvX89eL74\\n' +\n 'uh8la0lKH3v9wPpnEoftbrwmm5jHNFdzj7uXUHUJ41N7af7z7QUfghIRhlBDiKtx\\n' +\n '5lYZemPCXajTc3ryDKUZC/b+B6ViXZmAeMdmQoPE0jwyEp/uaUcdp+FlUQwCfsBk\\n' +\n 'ayPFEApTWgPiku2isjdeTVmEgL8bJTDUZ6FYFR7ZHcYAsDzcwHgIu3GGEMVRS3Uf\\n' +\n 'ILmioiyly9vcK4Sa01ondARmsi/I0s7pWpKflaekyv5boJKD/xqwz9lGejmJHelf\\n' +\n '8Od2TyqJScMpB7Q8c2ROxBwqwB72jMCEvYigB+Wnbb8RipliqNflIGx938FRCzKL\\n' +\n 'UQUBmNAznR/yRRL0wHf9UAE/8v9a09uZABeiznzOFAl/frHpgdAbC00LkFlnwwgX\\n' +\n 'g8YfEFlkp4fLx5B7LtoO6uVNFVimLxtwirpyKoj3G4M/kvSTux8bTw0heBCmWmKR\\n' +\n '57MS6k7ODzbv+Kpeht2hqVZCNFMxoQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/\\n' +\n 'MB0GA1UdDgQWBBRuMnDhJjoj7DcKALj+HbxEqj3r6jAOBgNVHQ8BAf8EBAMCAYYw\\n' +\n 'DQYJKoZIhvcNAQEMBQADggIBALSnXfx72C3ldhBP5kY4Mo2DDaGQ8FGpTOOiD95d\\n' +\n '0rf7I9LrsBGVqu/Nir+kqqP80PB70+Jy9fHFFigXwcPBX3MpKGxK8Cel7kVf8t1B\\n' +\n '4YD6A6bqlzP+OUL0uGWfZpdpDxwMDI2Flt4NEldHgXWPjvN1VblEKs0+kPnKowyg\\n' +\n 'jhRMgBbD/y+8yg0fIcjXUDTAw/+INcp21gWaMukKQr/8HswqC1yoqW9in2ijQkpK\\n' +\n '2RB9vcQ0/gXR0oJUbZQx0jn0OH8Agt7yfMAnJAdnHO4M3gjvlJLzIC5/4aGrRXZl\\n' +\n 'JoZKfJ2fZRnrFMi0nhAYDeInoS+Rwx+QzaBk6fX5VPyCj8foZ0nmqvuYoydzD8W5\\n' +\n 'mMlycgxFqS+DUmO+liWllQC4/MnVBlHGB1Cu3wTj5kgOvNs/k+FW3GXGzD3+rpv0\\n' +\n 'QTLuwSbMr+MbEThxrSZRSXTCQzKfehyC+WZejgLb+8ylLJUA10e62o7H9PvCrwj+\\n' +\n 'ZDVmN7qj6amzvndCP98sZfX7CFZPLfcBd4wVIjHsFjSNEwWHOiFyLPPG7cdolGKA\\n' +\n 'lOFvonvo4A1uRc13/zFeP0Xi5n5OZ2go8aOOeGYdI2vB2sgH9R2IASH/jHmr0gvY\\n' +\n '0dfBCcfXNgrS0toq0LX/y+5KkKOxh52vEYsJLdhqrveuZhQnsFEm/mFwjRXkyO7c\\n' +\n '2jpC\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIGADCCA+igAwIBAgIQYe0HgSuFFP9ivYM2vONTrTANBgkqhkiG9w0BAQwFADCB\\n' +\n 'mDELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\\n' +\n 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTEwLwYDVQQDDChB\\n' +\n 'bWF6b24gUkRTIGV1LXNvdXRoLTEgUm9vdCBDQSBSU0E0MDk2IEcxMRAwDgYDVQQH\\n' +\n 'DAdTZWF0dGxlMCAXDTIxMDUxOTE4MzMyMVoYDzIxMjEwNTE5MTkzMzIxWjCBmDEL\\n' +\n 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\\n' +\n 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTEwLwYDVQQDDChBbWF6\\n' +\n 'b24gUkRTIGV1LXNvdXRoLTEgUm9vdCBDQSBSU0E0MDk2IEcxMRAwDgYDVQQHDAdT\\n' +\n 'ZWF0dGxlMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuO7QPKfPMTo2\\n' +\n 'POQWvzDLwi5f++X98hGjORI1zkN9kotCYH5pAzSBwBPoMNaIfedgmsIxGHj2fq5G\\n' +\n '4oXagNhNuGP79Zl6uKW5H7S74W7aWM8C0s8zuxMOI4GZy5h2IfQk3m/3AzZEX5w8\\n' +\n 'UtNPkzo2feDVOkerHT+j+vjXgAxZ4wHnuMDcRT+K4r9EXlAH6X9b/RO0JlfEwmNz\\n' +\n 'xlqqGxocq9qRC66N6W0HF2fNEAKP84n8H80xcZBOBthQORRi8HSmKcPdmrvwCuPz\\n' +\n 'M+L+j18q6RAVaA0ABbD0jMWcTf0UvjUfBStn5mvu/wGlLjmmRkZsppUTRukfwqXK\\n' +\n 'yltUsTq0tOIgCIpne5zA4v+MebbR5JBnsvd4gdh5BI01QH470yB7BkUefZ9bobOm\\n' +\n 'OseAAVXcYFJKe4DAA6uLDrqOfFSxV+CzVvEp3IhLRaik4G5MwI/h2c/jEYDqkg2J\\n' +\n 'HMflxc2gcSMdk7E5ByLz5f6QrFfSDFk02ZJTs4ssbbUEYohht9znPMQEaWVqATWE\\n' +\n '3n0VspqZyoBNkH/agE5GiGZ/k/QyeqzMNj+c9kr43Upu8DpLrz8v2uAp5xNj3YVg\\n' +\n 'ihaeD6GW8+PQoEjZ3mrCmH7uGLmHxh7Am59LfEyNrDn+8Rq95WvkmbyHSVxZnBmo\\n' +\n 'h/6O3Jk+0/QhIXZ2hryMflPcYWeRGH0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB\\n' +\n '/zAdBgNVHQ4EFgQU2eFK7+R3x/me8roIBNxBrplkM6EwDgYDVR0PAQH/BAQDAgGG\\n' +\n 'MA0GCSqGSIb3DQEBDAUAA4ICAQB5gWFe5s7ObQFj1fTO9L6gYgtFhnwdmxU0q8Ke\\n' +\n 'HWCrdFmyXdC39qdAFOwM5/7fa9zKmiMrZvy9HNvCXEp4Z7z9mHhBmuqPZQx0qPgU\\n' +\n 'uLdP8wGRuWryzp3g2oqkX9t31Z0JnkbIdp7kfRT6ME4I4VQsaY5Y3mh+hIHOUvcy\\n' +\n 'p+98i3UuEIcwJnVAV9wTTzrWusZl9iaQ1nSYbmkX9bBssJ2GmtW+T+VS/1hJ/Q4f\\n' +\n 'AlE3dOQkLFoPPb3YRWBHr2n1LPIqMVwDNAuWavRA2dSfaLl+kzbn/dua7HTQU5D4\\n' +\n 'b2Fu2vLhGirwRJe+V7zdef+tI7sngXqjgObyOeG5O2BY3s+um6D4fS0Th3QchMO7\\n' +\n '0+GwcIgSgcjIjlrt6/xJwJLE8cRkUUieYKq1C4McpZWTF30WnzOPUzRzLHkcNzNA\\n' +\n '0A7sKMK6QoYWo5Rmo8zewUxUqzc9oQSrYADP7PEwGncLtFe+dlRFx+PA1a+lcIgo\\n' +\n '1ZGfXigYtQ3VKkcknyYlJ+hN4eCMBHtD81xDy9iP2MLE41JhLnoB2rVEtewO5diF\\n' +\n '7o95Mwl84VMkLhhHPeGKSKzEbBtYYBifHNct+Bst8dru8UumTltgfX6urH3DN+/8\\n' +\n 'JF+5h3U8oR2LL5y76cyeb+GWDXXy9zoQe2QvTyTy88LwZq1JzujYi2k8QiLLhFIf\\n' +\n 'FEv9Bg==\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIICsDCCAjagAwIBAgIRAMgApnfGYPpK/fD0dbN2U4YwCgYIKoZIzj0EAwMwgZcx\\n' +\n 'CzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMu\\n' +\n 'MRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEwMC4GA1UEAwwnQW1h\\n' +\n 'em9uIFJEUyBldS1zb3V0aC0xIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQHDAdT\\n' +\n 'ZWF0dGxlMCAXDTIxMDUxOTE4MzgxMVoYDzIxMjEwNTE5MTkzODExWjCBlzELMAkG\\n' +\n 'A1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4xEzAR\\n' +\n 'BgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdBbWF6b24g\\n' +\n 'UkRTIGV1LXNvdXRoLTEgUm9vdCBDQSBFQ0MzODQgRzExEDAOBgNVBAcMB1NlYXR0\\n' +\n 'bGUwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQfEWl6d4qSuIoECdZPp+39LaKsfsX7\\n' +\n 'THs3/RrtT0+h/jl3bjZ7Qc68k16x+HGcHbaayHfqD0LPdzH/kKtNSfQKqemdxDQh\\n' +\n 'Z4pwkixJu8T1VpXZ5zzCvBXCl75UqgEFS92jQjBAMA8GA1UdEwEB/wQFMAMBAf8w\\n' +\n 'HQYDVR0OBBYEFFPrSNtWS5JU+Tvi6ABV231XbjbEMA4GA1UdDwEB/wQEAwIBhjAK\\n' +\n 'BggqhkjOPQQDAwNoADBlAjEA+a7hF1IrNkBd2N/l7IQYAQw8chnRZDzh4wiGsZsC\\n' +\n '6A83maaKFWUKIb3qZYXFSi02AjAbp3wxH3myAmF8WekDHhKcC2zDvyOiKLkg9Y6v\\n' +\n 'ZVmyMR043dscQbcsVoacOYv198c=\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIICtDCCAjqgAwIBAgIRAPhVkIsQ51JFhD2kjFK5uAkwCgYIKoZIzj0EAwMwgZkx\\n' +\n 'CzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMu\\n' +\n 'MRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEyMDAGA1UEAwwpQW1h\\n' +\n 'em9uIFJEUyBldS1jZW50cmFsLTIgUm9vdCBDQSBFQ0MzODQgRzExEDAOBgNVBAcM\\n' +\n 'B1NlYXR0bGUwIBcNMjIwNjA2MjEyOTE3WhgPMjEyMjA2MDYyMjI5MTdaMIGZMQsw\\n' +\n 'CQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjET\\n' +\n 'MBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExMjAwBgNVBAMMKUFtYXpv\\n' +\n 'biBSRFMgZXUtY2VudHJhbC0yIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQHDAdT\\n' +\n 'ZWF0dGxlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEA5xnIEBtG5b2nmbj49UEwQza\\n' +\n 'yX0844fXjccYzZ8xCDUe9dS2XOUi0aZlGblgSe/3lwjg8fMcKXLObGGQfgIx1+5h\\n' +\n 'AIBjORis/dlyN5q/yH4U5sjS8tcR0GDGVHrsRUZCo0IwQDAPBgNVHRMBAf8EBTAD\\n' +\n 'AQH/MB0GA1UdDgQWBBRK+lSGutXf4DkTjR3WNfv4+KeNFTAOBgNVHQ8BAf8EBAMC\\n' +\n 'AYYwCgYIKoZIzj0EAwMDaAAwZQIxAJ4NxQ1Gerqr70ZrnUqc62Vl8NNqTzInamCG\\n' +\n 'Kce3FTsMWbS9qkgrjZkO9QqOcGIw/gIwSLrwUT+PKr9+H9eHyGvpq9/3AIYSnFkb\\n' +\n 'Cf3dyWPiLKoAtLFwjzB/CkJlsAS1c8dS\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIF/jCCA+agAwIBAgIQGZH12Q7x41qIh9vDu9ikTjANBgkqhkiG9w0BAQwFADCB\\n' +\n 'lzELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\\n' +\n 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdB\\n' +\n 'bWF6b24gUkRTIGV1LXdlc3QtMyBSb290IENBIFJTQTQwOTYgRzExEDAOBgNVBAcM\\n' +\n 'B1NlYXR0bGUwIBcNMjEwNTI1MjIyMjMzWhgPMjEyMTA1MjUyMzIyMzNaMIGXMQsw\\n' +\n 'CQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjET\\n' +\n 'MBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExMDAuBgNVBAMMJ0FtYXpv\\n' +\n 'biBSRFMgZXUtd2VzdC0zIFJvb3QgQ0EgUlNBNDA5NiBHMTEQMA4GA1UEBwwHU2Vh\\n' +\n 'dHRsZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMqE47sHXWzdpuqj\\n' +\n 'JHb+6jM9tDbQLDFnYjDWpq4VpLPZhb7xPNh9gnYYTPKG4avG421EblAHqzy9D2pN\\n' +\n '1z90yKbIfUb/Sy2MhQbmZomsObhONEra06fJ0Dydyjswf1iYRp2kwpx5AgkVoNo7\\n' +\n '3dlws73zFjD7ImKvUx2C7B75bhnw2pJWkFnGcswl8fZt9B5Yt95sFOKEz2MSJE91\\n' +\n 'kZlHtya19OUxZ/cSGci4MlOySzqzbGwUqGxEIDlY8I39VMwXaYQ8uXUN4G780VcL\\n' +\n 'u46FeyRGxZGz2n3hMc805WAA1V5uir87vuirTvoSVREET97HVRGVVNJJ/FM6GXr1\\n' +\n 'VKtptybbo81nefYJg9KBysxAa2Ao2x2ry/2ZxwhS6VZ6v1+90bpZA1BIYFEDXXn/\\n' +\n 'dW07HSCFnYSlgPtSc+Muh15mdr94LspYeDqNIierK9i4tB6ep7llJAnq0BU91fM2\\n' +\n 'JPeqyoTtc3m06QhLf68ccSxO4l8Hmq9kLSHO7UXgtdjfRVaffngopTNk8qK7bIb7\\n' +\n 'LrgkqhiQw/PRCZjUdyXL153/fUcsj9nFNe25gM4vcFYwH6c5trd2tUl31NTi1MfG\\n' +\n 'Mgp3d2dqxQBIYANkEjtBDMy3SqQLIo9EymqmVP8xx2A/gCBgaxvMAsI6FSWRoC7+\\n' +\n 'hqJ8XH4mFnXSHKtYMe6WPY+/XZgtAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8w\\n' +\n 'HQYDVR0OBBYEFIkXqTnllT/VJnI2NqipA4XV8rh1MA4GA1UdDwEB/wQEAwIBhjAN\\n' +\n 'BgkqhkiG9w0BAQwFAAOCAgEAKjSle8eenGeHgT8pltWCw/HzWyQruVKhfYIBfKJd\\n' +\n 'MhV4EnH5BK7LxBIvpXGsFUrb0ThzSw0fn0zoA9jBs3i/Sj6KyeZ9qUF6b8ycDXd+\\n' +\n 'wHonmJiQ7nk7UuMefaYAfs06vosgl1rI7eBHC0itexIQmKh0aX+821l4GEgEoSMf\\n' +\n 'loMFTLXv2w36fPHHCsZ67ODldgcZbKNnpCTX0YrCwEYO3Pz/L398btiRcWGrewrK\\n' +\n 'jdxAAyietra8DRno1Zl87685tfqc6HsL9v8rVw58clAo9XAQvT+fmSOFw/PogRZ7\\n' +\n 'OMHUat3gu/uQ1M5S64nkLLFsKu7jzudBuoNmcJysPlzIbqJ7vYc82OUGe9ucF3wi\\n' +\n '3tbKQ983hdJiTExVRBLX/fYjPsGbG3JtPTv89eg2tjWHlPhCDMMxyRKl6isu2RTq\\n' +\n '6VT489Z2zQrC33MYF8ZqO1NKjtyMAMIZwxVu4cGLkVsqFmEV2ScDHa5RadDyD3Ok\\n' +\n 'm+mqybhvEVm5tPgY6p0ILPMN3yvJsMSPSvuBXhO/X5ppNnpw9gnxpwbjQKNhkFaG\\n' +\n 'M5pkADZ14uRguOLM4VthSwUSEAr5VQYCFZhEwK+UOyJAGiB/nJz6IxL5XBNUXmRM\\n' +\n 'Hl8Xvz4riq48LMQbjcVQj0XvH941yPh+P8xOi00SGaQRaWp55Vyr4YKGbV0mEDz1\\n' +\n 'r1o=\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIF/zCCA+egAwIBAgIRAKwYju1QWxUZpn6D1gOtwgQwDQYJKoZIhvcNAQEMBQAw\\n' +\n 'gZcxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\\n' +\n 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEwMC4GA1UEAwwn\\n' +\n 'QW1hem9uIFJEUyBldS13ZXN0LTEgUm9vdCBDQSBSU0E0MDk2IEcxMRAwDgYDVQQH\\n' +\n 'DAdTZWF0dGxlMCAXDTIxMDUyMDE2NTM1NFoYDzIxMjEwNTIwMTc1MzU0WjCBlzEL\\n' +\n 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\\n' +\n 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdBbWF6\\n' +\n 'b24gUkRTIGV1LXdlc3QtMSBSb290IENBIFJTQTQwOTYgRzExEDAOBgNVBAcMB1Nl\\n' +\n 'YXR0bGUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCKdBP1U4lqWWkc\\n' +\n 'Cb25/BKRTsvNVnISiKocva8GAzJyKfcGRa85gmgu41U+Hz6+39K+XkRfM0YS4BvQ\\n' +\n 'F1XxWT0bNyypuvwCvmYShSTjN1TY0ltncDddahTajE/4MdSOZb/c98u0yt03cH+G\\n' +\n 'hVwRyT50h0v/UEol50VfwcVAEZEgcQQYhf1IFUFlIvKpmDOqLuFakOnc7c9akK+i\\n' +\n 'ivST+JO1tgowbnNkn2iLlSSgUWgb1gjaOsNfysagv1RXdlyPw3EyfwkFifAQvF2P\\n' +\n 'Q0ayYZfYS640cccv7efM1MSVyFHR9PrrDsF/zr2S2sGPbeHr7R/HwLl+S5J/l9N9\\n' +\n 'y0rk6IHAWV4dEkOvgpnuJKURwA48iu1Hhi9e4moNS6eqoK2KmY3VFpuiyWcA73nH\\n' +\n 'GSmyaH+YuMrF7Fnuu7GEHZL/o6+F5cL3mj2SJJhL7sz0ryf5Cs5R4yN9BIEj/f49\\n' +\n 'wh84pM6nexoI0Q4wiSFCxWiBpjSmOK6h7z6+2utaB5p20XDZHhxAlmlx4vMuWtjh\\n' +\n 'XckgRFxc+ZpVMU3cAHUpVEoO49e/+qKEpPzp8Xg4cToKw2+AfTk3cmyyXQfGwXMQ\\n' +\n 'ZUHNZ3w9ILMWihGCM2aGUsLcGDRennvNmnmin/SENsOQ8Ku0/a3teEzwV9cmmdYz\\n' +\n '5iYs1YtgPvKFobY6+T2RXXh+A5kprwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/\\n' +\n 'MB0GA1UdDgQWBBSyUrsQVnKmA8z6/2Ech0rCvqpNmTAOBgNVHQ8BAf8EBAMCAYYw\\n' +\n 'DQYJKoZIhvcNAQEMBQADggIBAFlj3IFmgiFz5lvTzFTRizhVofhTJsGr14Yfkuc7\\n' +\n 'UrXPuXOwJomd4uot2d/VIeGJpfnuS84qGdmQyGewGTJ9inatHsGZgHl9NHNWRwKZ\\n' +\n 'lTKTbBiq7aqgtUSFa06v202wpzU+1kadxJJePrbABxiXVfOmIW/a1a4hPNcT3syH\\n' +\n 'FIEg1+CGsp71UNjBuwg3JTKWna0sLSKcxLOSOvX1fzxK5djzVpEsvQMB4PSAzXca\\n' +\n 'vENgg2ErTwgTA+4s6rRtiBF9pAusN1QVuBahYP3ftrY6f3ycS4K65GnqscyfvKt5\\n' +\n 'YgjtEKO3ZeeX8NpubMbzC+0Z6tVKfPFk/9TXuJtwvVeqow0YMrLLyRiYvK7EzJ97\\n' +\n 'rrkxoKnHYQSZ+rH2tZ5SE392/rfk1PJL0cdHnkpDkUDO+8cKsFjjYKAQSNC52sKX\\n' +\n '74AVh6wMwxYwVZZJf2/2XxkjMWWhKNejsZhUkTISSmiLs+qPe3L67IM7GyKm9/m6\\n' +\n 'R3r8x6NGjhTsKH64iYJg7AeKeax4b2e4hBb6GXFftyOs7unpEOIVkJJgM6gh3mwn\\n' +\n 'R7v4gwFbLKADKt1vHuerSZMiTuNTGhSfCeDM53XI/mjZl2HeuCKP1mCDLlaO+gZR\\n' +\n 'Q/G+E0sBKgEX4xTkAc3kgkuQGfExdGtnN2U2ehF80lBHB8+2y2E+xWWXih/ZyIcW\\n' +\n 'wOx+\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n '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\\n' +\n '89cEIGdbjsA=\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIEADCCAuigAwIBAgIQYjbPSg4+RNRD3zNxO1fuKDANBgkqhkiG9w0BAQsFADCB\\n' +\n 'mDELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\\n' +\n 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTEwLwYDVQQDDChB\\n' +\n 'bWF6b24gUkRTIGV1LW5vcnRoLTEgUm9vdCBDQSBSU0EyMDQ4IEcxMRAwDgYDVQQH\\n' +\n 'DAdTZWF0dGxlMCAXDTIxMDUyNDIwNTkyMVoYDzIwNjEwNTI0MjE1OTIxWjCBmDEL\\n' +\n 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\\n' +\n 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTEwLwYDVQQDDChBbWF6\\n' +\n 'b24gUkRTIGV1LW5vcnRoLTEgUm9vdCBDQSBSU0EyMDQ4IEcxMRAwDgYDVQQHDAdT\\n' +\n 'ZWF0dGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA179eQHxcV0YL\\n' +\n 'XMkqEmhSBazHhnRVd8yICbMq82PitE3BZcnv1Z5Zs/oOgNmMkOKae4tCXO/41JCX\\n' +\n 'wAgbs/eWWi+nnCfpQ/FqbLPg0h3dqzAgeszQyNl9IzTzX4Nd7JFRBVJXPIIKzlRf\\n' +\n '+GmFsAhi3rYgDgO27pz3ciahVSN+CuACIRYnA0K0s9lhYdddmrW/SYeWyoB7jPa2\\n' +\n 'LmWpAs7bDOgS4LlP2H3eFepBPgNufRytSQUVA8f58lsE5w25vNiUSnrdlvDrIU5n\\n' +\n 'Qwzc7NIZCx4qJpRbSKWrUtbyJriWfAkGU7i0IoainHLn0eHp9bWkwb9D+C/tMk1X\\n' +\n 'ERZw2PDGkwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSFmR7s\\n' +\n 'dAblusFN+xhf1ae0KUqhWTAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQAD\\n' +\n 'ggEBAHsXOpjPMyH9lDhPM61zYdja1ebcMVgfUvsDvt+w0xKMKPhBzYDMs/cFOi1N\\n' +\n 'Q8LV79VNNfI2NuvFmGygcvTIR+4h0pqqZ+wjWl3Kk5jVxCrbHg3RBX02QLumKd/i\\n' +\n 'kwGcEtTUvTssn3SM8bgM0/1BDXgImZPC567ciLvWDo0s/Fe9dJJC3E0G7d/4s09n\\n' +\n 'OMdextcxFuWBZrBm/KK3QF0ByA8MG3//VXaGO9OIeeOJCpWn1G1PjT1UklYhkg61\\n' +\n 'EbsTiZVA2DLd1BGzfU4o4M5mo68l0msse/ndR1nEY6IywwpgIFue7+rEleDh6b9d\\n' +\n 'PYkG1rHVw2I0XDG4o17aOn5E94I=\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIEADCCAuigAwIBAgIQC6W4HFghUkkgyQw14a6JljANBgkqhkiG9w0BAQsFADCB\\n' +\n 'mDELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\\n' +\n 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTEwLwYDVQQDDChB\\n' +\n 'bWF6b24gUkRTIGV1LXNvdXRoLTIgUm9vdCBDQSBSU0EyMDQ4IEcxMRAwDgYDVQQH\\n' +\n 'DAdTZWF0dGxlMCAXDTIyMDUyMzE4MTYzMloYDzIwNjIwNTIzMTkxNjMyWjCBmDEL\\n' +\n 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\\n' +\n 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTEwLwYDVQQDDChBbWF6\\n' +\n 'b24gUkRTIGV1LXNvdXRoLTIgUm9vdCBDQSBSU0EyMDQ4IEcxMRAwDgYDVQQHDAdT\\n' +\n 'ZWF0dGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAiM/t4FV2R9Nx\\n' +\n 'UQG203UY83jInTa/6TMq0SPyg617FqYZxvz2kkx09x3dmxepUg9ttGMlPgjsRZM5\\n' +\n 'LCFEi1FWk+hxHzt7vAdhHES5tdjwds3aIkgNEillmRDVrUsbrDwufLaa+MMDO2E1\\n' +\n 'wQ/JYFXw16WBCCi2g1EtyQ2Xp+tZDX5IWOTnvhZpW8vVDptZ2AcJ5rMhfOYO3OsK\\n' +\n '5EF0GGA5ldzuezP+BkrBYGJ4wVKGxeaq9+5AT8iVZrypjwRkD7Y5CurywK3+aBwm\\n' +\n 's9Q5Nd8t45JCOUzYp92rFKsCriD86n/JnEvgDfdP6Hvtm0/DkwXK40Wz2q0Zrd0k\\n' +\n 'mjP054NRPwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRR7yqd\\n' +\n 'SfKcX2Q8GzhcVucReIpewTAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQAD\\n' +\n 'ggEBAEszBRDwXcZyNm07VcFwI1Im94oKwKccuKYeJEsizTBsVon8VpEiMwDs+yGu\\n' +\n '3p8kBhvkLwWybkD/vv6McH7T5b9jDX2DoOudqYnnaYeypsPH/00Vh3LvKagqzQza\\n' +\n 'orWLx+0tLo8xW4BtU+Wrn3JId8LvAhxyYXTn9bm+EwPcStp8xGLwu53OPD1RXYuy\\n' +\n 'uu+3ps/2piP7GVfou7H6PRaqbFHNfiGg6Y+WA0HGHiJzn8uLmrRJ5YRdIOOG9/xi\\n' +\n 'qTmAZloUNM7VNuurcMM2hWF494tQpsQ6ysg2qPjbBqzlGoOt3GfBTOZmqmwmqtam\\n' +\n 'K7juWM/mdMQAJ3SMlE5wI8nVdx4=\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIICrjCCAjSgAwIBAgIRAL9SdzVPcpq7GOpvdGoM80IwCgYIKoZIzj0EAwMwgZYx\\n' +\n 'CzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMu\\n' +\n 'MRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEvMC0GA1UEAwwmQW1h\\n' +\n 'em9uIFJEUyBldS13ZXN0LTEgUm9vdCBDQSBFQ0MzODQgRzExEDAOBgNVBAcMB1Nl\\n' +\n 'YXR0bGUwIBcNMjEwNTIwMTY1ODA3WhgPMjEyMTA1MjAxNzU4MDdaMIGWMQswCQYD\\n' +\n 'VQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEG\\n' +\n 'A1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExLzAtBgNVBAMMJkFtYXpvbiBS\\n' +\n 'RFMgZXUtd2VzdC0xIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQHDAdTZWF0dGxl\\n' +\n 'MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEJWDgXebvwjR+Ce+hxKOLbnsfN5W5dOlP\\n' +\n 'Zn8kwWnD+SLkU81Eac/BDJsXGrMk6jFD1vg16PEkoSevsuYWlC8xR6FmT6F6pmeh\\n' +\n 'fsMGOyJpfK4fyoEPhKeQoT23lFIc5Orjo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0G\\n' +\n 'A1UdDgQWBBSVNAN1CHAz0eZ77qz2adeqjm31TzAOBgNVHQ8BAf8EBAMCAYYwCgYI\\n' +\n 'KoZIzj0EAwMDaAAwZQIxAMlQeHbcjor49jqmcJ9gRLWdEWpXG8thIf6zfYQ/OEAg\\n' +\n 'd7GDh4fR/OUk0VfjsBUN/gIwZB0bGdXvK38s6AAE/9IT051cz/wMe9GIrX1MnL1T\\n' +\n '1F5OqnXJdiwfZRRTHsRQ/L00\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n '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\\n' +\n '1YfpdH2jp30=\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIID/jCCAuagAwIBAgIQTDc+UgTRtYO7ZGTQ8UWKDDANBgkqhkiG9w0BAQsFADCB\\n' +\n 'lzELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\\n' +\n 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdB\\n' +\n 'bWF6b24gUkRTIGV1LXdlc3QtMiBSb290IENBIFJTQTIwNDggRzExEDAOBgNVBAcM\\n' +\n 'B1NlYXR0bGUwIBcNMjEwNTIxMjI0NjI0WhgPMjA2MTA1MjEyMzQ2MjRaMIGXMQsw\\n' +\n 'CQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjET\\n' +\n 'MBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExMDAuBgNVBAMMJ0FtYXpv\\n' +\n 'biBSRFMgZXUtd2VzdC0yIFJvb3QgQ0EgUlNBMjA0OCBHMTEQMA4GA1UEBwwHU2Vh\\n' +\n 'dHRsZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM1oGtthQ1YiVIC2\\n' +\n 'i4u4swMAGxAjc/BZp0yq0eP5ZQFaxnxs7zFAPabEWsrjeDzrRhdVO0h7zskrertP\\n' +\n 'gblGhfD20JfjvCHdP1RUhy/nzG+T+hn6Takan/GIgs8grlBMRHMgBYHW7tklhjaH\\n' +\n '3F7LujhceAHhhgp6IOrpb6YTaTTaJbF3GTmkqxSJ3l1LtEoWz8Al/nL/Ftzxrtez\\n' +\n 'Vs6ebpvd7sw37sxmXBWX2OlvUrPCTmladw9OrllGXtCFw4YyLe3zozBlZ3cHzQ0q\\n' +\n 'lINhpRcajTMfZrsiGCkQtoJT+AqVJPS2sHjqsEH8yiySW9Jbq4zyMbM1yqQ2vnnx\\n' +\n 'MJgoYMcCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUaQG88UnV\\n' +\n 'JPTI+Pcti1P+q3H7pGYwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4IB\\n' +\n 'AQBAkgr75V0sEJimC6QRiTVWEuj2Khy7unjSfudbM6zumhXEU2/sUaVLiYy6cA/x\\n' +\n '3v0laDle6T07x9g64j5YastE/4jbzrGgIINFlY0JnaYmR3KZEjgi1s1fkRRf3llL\\n' +\n 'PJm9u4Q1mbwAMQK/ZjLuuRcL3uRIHJek18nRqT5h43GB26qXyvJqeYYpYfIjL9+/\\n' +\n 'YiZAbSRRZG+Li23cmPWrbA1CJY121SB+WybCbysbOXzhD3Sl2KSZRwSw4p2HrFtV\\n' +\n '1Prk0dOBtZxCG9luf87ultuDZpfS0w6oNBAMXocgswk24ylcADkkFxBWW+7BETn1\\n' +\n 'EpK+t1Lm37mU4sxtuha00XAi\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIEADCCAuigAwIBAgIQcY44/8NUvBwr6LlHfRy7KjANBgkqhkiG9w0BAQsFADCB\\n' +\n 'mDELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\\n' +\n 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTEwLwYDVQQDDChB\\n' +\n 'bWF6b24gUkRTIGV1LXNvdXRoLTEgUm9vdCBDQSBSU0EyMDQ4IEcxMRAwDgYDVQQH\\n' +\n 'DAdTZWF0dGxlMCAXDTIxMDUxOTE4MjcxOFoYDzIwNjEwNTE5MTkyNzE4WjCBmDEL\\n' +\n 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\\n' +\n 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTEwLwYDVQQDDChBbWF6\\n' +\n 'b24gUkRTIGV1LXNvdXRoLTEgUm9vdCBDQSBSU0EyMDQ4IEcxMRAwDgYDVQQHDAdT\\n' +\n 'ZWF0dGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0UaBeC+Usalu\\n' +\n 'EtXnV7+PnH+gi7/71tI/jkKVGKuhD2JDVvqLVoqbMHRh3+wGMvqKCjbHPcC2XMWv\\n' +\n '566fpAj4UZ9CLB5fVzss+QVNTl+FH2XhEzigopp+872ajsNzcZxrMkifxGb4i0U+\\n' +\n 't0Zi+UrbL5tsfP2JonKR1crOrbS6/DlzHBjIiJazGOQcMsJjNuTOItLbMohLpraA\\n' +\n '/nApa3kOvI7Ufool1/34MG0+wL3UUA4YkZ6oBJVxjZvvs6tI7Lzz/SnhK2widGdc\\n' +\n 'snbLqBpHNIZQSorVoiwcFaRBGYX/uzYkiw44Yfa4cK2V/B5zgu1Fbr0gbI2am4eh\\n' +\n 'yVYyg4jPawIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS9gM1m\\n' +\n 'IIjyh9O5H/7Vj0R/akI7UzAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQAD\\n' +\n 'ggEBAF0Sm9HC2AUyedBVnwgkVXMibnYChOzz7T+0Y+fOLXYAEXex2s8oqGeZdGYX\\n' +\n 'JHkjBn7JXu7LM+TpTbPbFFDoc1sgMguD/ls+8XsqAl1CssW+amryIL+jfcfbgQ+P\\n' +\n 'ICwEUD9hGdjBgJ5WcuS+qqxHsEIlFNci3HxcxfBa9VsWs5TjI7Vsl4meL5lf7ZyL\\n' +\n 'wDV7dHRuU+cImqG1MIvPRIlvPnT7EghrCYi2VCPhP2pM/UvShuwVnkz4MJ29ebIk\\n' +\n 'WR9kpblFxFdE92D5UUvMCjC2kmtgzNiErvTcwIvOO9YCbBHzRB1fFiWrXUHhJWq9\\n' +\n 'IkaxR5icb/IpAV0A1lYZEWMVsfQ=\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n '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\\n' +\n 'rM2p0kk=\\n' +\n '-----END CERTIFICATE-----\\n',\n];\n",
|
|
129
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.proxies = void 0;\n/**\n * CA Certificates for **Amazon RDS Proxy** (2024)\n *\n * - https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-proxy.howitworks.html#rds-proxy-security.tls\n * - https://www.amazontrust.com/repository/\n */\nexports.proxies = [\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsF\\n' +\n 'ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6\\n' +\n 'b24gUm9vdCBDQSAxMB4XDTE1MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTEL\\n' +\n 'MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv\\n' +\n 'b3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXj\\n' +\n 'ca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM\\n' +\n '9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qw\\n' +\n 'IFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6\\n' +\n 'VOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L\\n' +\n '93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQm\\n' +\n 'jgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC\\n' +\n 'AYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3DQEBCwUA\\n' +\n 'A4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDI\\n' +\n 'U5PMCCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUs\\n' +\n 'N+gDS63pYaACbvXy8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vv\\n' +\n 'o/ufQJVtMVT8QtPHRh8jrdkPSHCa2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU\\n' +\n '5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2xJNDd2ZhwLnoQdeXeGADbkpy\\n' +\n 'rqXRfboQnoZsG4q5WTP468SQvvG5\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n '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\\n' +\n '4PsJYGw=\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIBtjCCAVugAwIBAgITBmyf1XSXNmY/Owua2eiedgPySjAKBggqhkjOPQQDAjA5\\n' +\n 'MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24g\\n' +\n 'Um9vdCBDQSAzMB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkG\\n' +\n 'A1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3Qg\\n' +\n 'Q0EgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCmXp8ZBf8ANm+gBG1bG8lKl\\n' +\n 'ui2yEujSLtf6ycXYqm0fc4E7O5hrOXwzpcVOho6AF2hiRVd9RFgdszflZwjrZt6j\\n' +\n 'QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSr\\n' +\n 'ttvXBp43rDCGB5Fwx5zEGbF4wDAKBggqhkjOPQQDAgNJADBGAiEA4IWSoxe3jfkr\\n' +\n 'BqWTrBqYaGFy+uGh0PsceGCmQ5nFuMQCIQCcAu/xlJyzlvnrxir4tiz+OpAUFteM\\n' +\n 'YyRIHN8wfdVoOw==\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIIB8jCCAXigAwIBAgITBmyf18G7EEwpQ+Vxe3ssyBrBDjAKBggqhkjOPQQDAzA5\\n' +\n 'MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24g\\n' +\n 'Um9vdCBDQSA0MB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkG\\n' +\n 'A1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3Qg\\n' +\n 'Q0EgNDB2MBAGByqGSM49AgEGBSuBBAAiA2IABNKrijdPo1MN/sGKe0uoe0ZLY7Bi\\n' +\n '9i0b2whxIdIA6GO9mif78DluXeo9pcmBqqNbIJhFXRbb/egQbeOc4OO9X4Ri83Bk\\n' +\n 'M6DLJC9wuoihKqB1+IGuYgbEgds5bimwHvouXKNCMEAwDwYDVR0TAQH/BAUwAwEB\\n' +\n '/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFNPsxzplbszh2naaVvuc84ZtV+WB\\n' +\n 'MAoGCCqGSM49BAMDA2gAMGUCMDqLIfG9fhGt0O9Yli/W651+kI0rz2ZVwyzjKKlw\\n' +\n 'CkcO8DdZEv8tmZQoTipPNU0zWgIxAOp1AE47xDqUEpHJWEadIRNyp4iciuRMStuW\\n' +\n '1KyLa2tJElMzrdfkviT8tQp21KW8EA==\\n' +\n '-----END CERTIFICATE-----\\n',\n '-----BEGIN CERTIFICATE-----\\n' +\n 'MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMx\\n' +\n 'EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT\\n' +\n 'HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVs\\n' +\n 'ZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5\\n' +\n 'MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNVBAYTAlVTMRAwDgYD\\n' +\n 'VQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFy\\n' +\n 'ZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2Vy\\n' +\n 'dmljZXMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI\\n' +\n 'hvcNAQEBBQADggEPADCCAQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20p\\n' +\n 'OsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm2\\n' +\n '8xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4PahHQUw2eeBGg6345AWh1K\\n' +\n 'Ts9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLPLJGmpufe\\n' +\n 'hRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk\\n' +\n '6mFBrMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAw\\n' +\n 'DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+q\\n' +\n 'AdcwKziIorhtSpzyEZGDMA0GCSqGSIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMI\\n' +\n 'bw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPPE95Dz+I0swSdHynVv/heyNXB\\n' +\n 've6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTyxQGjhdByPq1z\\n' +\n 'qwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd\\n' +\n 'iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn\\n' +\n '0q23KXB56jzaYyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCN\\n' +\n 'sSi6\\n' +\n '-----END CERTIFICATE-----\\n',\n];\n",
|
|
130
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst defaults_js_1 = require(\"./profiles/ca/defaults.js\");\nconst proxies_js_1 = require(\"./profiles/ca/proxies.js\");\nconst proxyBundle = {\n ca: proxies_js_1.proxies,\n};\nconst profiles = {\n ca: [...defaults_js_1.defaults, ...proxies_js_1.proxies],\n};\nmodule.exports = profiles;\nmodule.exports.proxyBundle = proxyBundle;\nmodule.exports.default = profiles;\n",
|
|
131
|
+
"'use strict';\n\nconst awsCaBundle = require('aws-ssl-profiles');\n\n/**\n * @deprecated\n * Please, use [**aws-ssl-profiles**](https://github.com/mysqljs/aws-ssl-profiles).\n */\nexports['Amazon RDS'] = {\n ca: awsCaBundle.ca,\n};\n",
|
|
132
|
+
"// This file was modified by Oracle on September 21, 2021.\n// New connection options for additional authentication factors were\n// introduced.\n// Multi-factor authentication capability is now enabled if one of these\n// options is used.\n// Modifications copyright (c) 2021, Oracle and/or its affiliates.\n\n'use strict';\n\nconst { URL } = require('url');\nconst ClientConstants = require('./constants/client');\nconst Charsets = require('./constants/charsets');\nconst { version } = require('../package.json');\nlet SSLProfiles = null;\n\nconst validOptions = {\n authPlugins: 1,\n authSwitchHandler: 1,\n bigNumberStrings: 1,\n charset: 1,\n charsetNumber: 1,\n compress: 1,\n connectAttributes: 1,\n connectTimeout: 1,\n database: 1,\n dateStrings: 1,\n debug: 1,\n decimalNumbers: 1,\n enableKeepAlive: 1,\n flags: 1,\n host: 1,\n insecureAuth: 1,\n infileStreamFactory: 1,\n isServer: 1,\n keepAliveInitialDelay: 1,\n localAddress: 1,\n maxPreparedStatements: 1,\n multipleStatements: 1,\n namedPlaceholders: 1,\n nestTables: 1,\n password: 1,\n // with multi-factor authentication, the main password (used for the first\n // authentication factor) can be provided via password1\n password1: 1,\n password2: 1,\n password3: 1,\n passwordSha1: 1,\n pool: 1,\n port: 1,\n queryFormat: 1,\n rowsAsArray: 1,\n socketPath: 1,\n ssl: 1,\n stream: 1,\n stringifyObjects: 1,\n supportBigNumbers: 1,\n timezone: 1,\n trace: 1,\n typeCast: 1,\n uri: 1,\n user: 1,\n disableEval: 1,\n // These options are used for Pool\n connectionLimit: 1,\n maxIdle: 1,\n idleTimeout: 1,\n Promise: 1,\n queueLimit: 1,\n waitForConnections: 1,\n jsonStrings: 1,\n gracefulEnd: 1,\n};\n\nclass ConnectionConfig {\n constructor(options) {\n if (typeof options === 'string') {\n options = ConnectionConfig.parseUrl(options);\n } else if (options && options.uri) {\n const uriOptions = ConnectionConfig.parseUrl(options.uri);\n for (const key in uriOptions) {\n if (!Object.prototype.hasOwnProperty.call(uriOptions, key)) continue;\n if (options[key]) continue;\n options[key] = uriOptions[key];\n }\n }\n for (const key in options) {\n if (!Object.prototype.hasOwnProperty.call(options, key)) continue;\n if (validOptions[key] !== 1) {\n // REVIEW: Should this be emitted somehow?\n // eslint-disable-next-line no-console\n console.error(\n `Ignoring invalid configuration option passed to Connection: ${key}. This is currently a warning, but in future versions of MySQL2, an error will be thrown if you pass an invalid configuration option to a Connection`\n );\n }\n }\n this.isServer = options.isServer;\n this.stream = options.stream;\n this.host = options.host || 'localhost';\n this.port =\n (typeof options.port === 'string'\n ? parseInt(options.port, 10)\n : options.port) || 3306;\n this.localAddress = options.localAddress;\n this.socketPath = options.socketPath;\n this.user = options.user || undefined;\n // for the purpose of multi-factor authentication, or not, the main\n // password (used for the 1st authentication factor) can also be\n // provided via the \"password1\" option\n this.password = options.password || options.password1 || undefined;\n this.password2 = options.password2 || undefined;\n this.password3 = options.password3 || undefined;\n this.passwordSha1 = options.passwordSha1 || undefined;\n this.database = options.database;\n this.connectTimeout = isNaN(options.connectTimeout)\n ? 10 * 1000\n : options.connectTimeout;\n this.insecureAuth = options.insecureAuth || false;\n this.infileStreamFactory = options.infileStreamFactory || undefined;\n this.supportBigNumbers = options.supportBigNumbers || false;\n this.bigNumberStrings = options.bigNumberStrings || false;\n this.decimalNumbers = options.decimalNumbers || false;\n this.dateStrings = options.dateStrings || false;\n this.debug = options.debug;\n this.trace = options.trace !== false;\n this.stringifyObjects = options.stringifyObjects || false;\n this.enableKeepAlive = options.enableKeepAlive !== false;\n this.keepAliveInitialDelay = options.keepAliveInitialDelay;\n if (\n options.timezone &&\n !/^(?:local|Z|[ +-]\\d\\d:\\d\\d)$/.test(options.timezone)\n ) {\n // strictly supports timezones specified by mysqljs/mysql:\n // https://github.com/mysqljs/mysql#user-content-connection-options\n // eslint-disable-next-line no-console\n console.error(\n `Ignoring invalid timezone passed to Connection: ${options.timezone}. This is currently a warning, but in future versions of MySQL2, an error will be thrown if you pass an invalid configuration option to a Connection`\n );\n // SqlStrings falls back to UTC on invalid timezone\n this.timezone = 'Z';\n } else {\n this.timezone = options.timezone || 'local';\n }\n this.queryFormat = options.queryFormat;\n this.pool = options.pool || undefined;\n this.ssl =\n typeof options.ssl === 'string'\n ? ConnectionConfig.getSSLProfile(options.ssl)\n : options.ssl || false;\n this.multipleStatements = options.multipleStatements || false;\n this.rowsAsArray = options.rowsAsArray || false;\n this.namedPlaceholders = options.namedPlaceholders || false;\n this.nestTables =\n options.nestTables === undefined ? undefined : options.nestTables;\n this.typeCast = options.typeCast === undefined ? true : options.typeCast;\n this.disableEval = Boolean(options.disableEval);\n if (this.timezone[0] === ' ') {\n // \"+\" is a url encoded char for space so it\n // gets translated to space when giving a\n // connection string..\n this.timezone = `+${this.timezone.slice(1)}`;\n }\n if (this.ssl) {\n if (typeof this.ssl !== 'object') {\n throw new TypeError(\n `SSL profile must be an object, instead it's a ${typeof this.ssl}`\n );\n }\n // Default rejectUnauthorized to true\n this.ssl.rejectUnauthorized = this.ssl.rejectUnauthorized !== false;\n }\n this.maxPacketSize = 0;\n this.charsetNumber = options.charset\n ? ConnectionConfig.getCharsetNumber(options.charset)\n : options.charsetNumber || Charsets.UTF8MB4_UNICODE_CI;\n this.compress = options.compress || false;\n this.authPlugins = options.authPlugins;\n this.authSwitchHandler = options.authSwitchHandler;\n this.clientFlags = ConnectionConfig.mergeFlags(\n ConnectionConfig.getDefaultFlags(options),\n options.flags || ''\n );\n // Default connection attributes\n // https://dev.mysql.com/doc/refman/8.0/en/performance-schema-connection-attribute-tables.html\n const defaultConnectAttributes = {\n _client_name: 'Node-MySQL-2',\n _client_version: version,\n };\n this.connectAttributes = {\n ...defaultConnectAttributes,\n ...(options.connectAttributes || {}),\n };\n this.maxPreparedStatements = options.maxPreparedStatements || 16000;\n this.jsonStrings = options.jsonStrings || false;\n this.gracefulEnd = options.gracefulEnd || false;\n }\n\n static mergeFlags(default_flags, user_flags) {\n let flags = 0x0,\n i;\n if (!Array.isArray(user_flags)) {\n user_flags = String(user_flags || '')\n .toUpperCase()\n .split(/\\s*,+\\s*/);\n }\n // add default flags unless \"blacklisted\"\n for (i in default_flags) {\n if (user_flags.indexOf(`-${default_flags[i]}`) >= 0) {\n continue;\n }\n flags |= ClientConstants[default_flags[i]] || 0x0;\n }\n // add user flags unless already already added\n for (i in user_flags) {\n if (user_flags[i][0] === '-') {\n continue;\n }\n if (default_flags.indexOf(user_flags[i]) >= 0) {\n continue;\n }\n flags |= ClientConstants[user_flags[i]] || 0x0;\n }\n return flags;\n }\n\n static getDefaultFlags(options) {\n const defaultFlags = [\n 'LONG_PASSWORD',\n 'FOUND_ROWS',\n 'LONG_FLAG',\n 'CONNECT_WITH_DB',\n 'ODBC',\n 'LOCAL_FILES',\n 'IGNORE_SPACE',\n 'PROTOCOL_41',\n 'IGNORE_SIGPIPE',\n 'TRANSACTIONS',\n 'RESERVED',\n 'SECURE_CONNECTION',\n 'MULTI_RESULTS',\n 'TRANSACTIONS',\n 'SESSION_TRACK',\n 'CONNECT_ATTRS',\n ];\n if (options && options.multipleStatements) {\n defaultFlags.push('MULTI_STATEMENTS');\n }\n defaultFlags.push('PLUGIN_AUTH');\n defaultFlags.push('PLUGIN_AUTH_LENENC_CLIENT_DATA');\n\n return defaultFlags;\n }\n\n static getCharsetNumber(charset) {\n const num = Charsets[charset.toUpperCase()];\n if (num === undefined) {\n throw new TypeError(`Unknown charset '${charset}'`);\n }\n return num;\n }\n\n static getSSLProfile(name) {\n if (!SSLProfiles) {\n SSLProfiles = require('./constants/ssl_profiles.js');\n }\n const ssl = SSLProfiles[name];\n if (ssl === undefined) {\n throw new TypeError(`Unknown SSL profile '${name}'`);\n }\n return ssl;\n }\n\n static parseUrl(url) {\n const parsedUrl = new URL(url);\n const options = {\n host: decodeURIComponent(parsedUrl.hostname),\n port: parseInt(parsedUrl.port, 10),\n database: decodeURIComponent(parsedUrl.pathname.slice(1)),\n user: decodeURIComponent(parsedUrl.username),\n password: decodeURIComponent(parsedUrl.password),\n };\n parsedUrl.searchParams.forEach((value, key) => {\n try {\n // Try to parse this as a JSON expression first\n options[key] = JSON.parse(value);\n } catch (err) {\n // Otherwise assume it is a plain string\n options[key] = value;\n }\n });\n return options;\n }\n}\n\nmodule.exports = ConnectionConfig;\n",
|
|
133
|
+
"const perf =\n typeof performance === 'object' &&\n performance &&\n typeof performance.now === 'function'\n ? performance\n : Date\n\nconst hasAbortController = typeof AbortController === 'function'\n\n// minimal backwards-compatibility polyfill\n// this doesn't have nearly all the checks and whatnot that\n// actual AbortController/Signal has, but it's enough for\n// our purposes, and if used properly, behaves the same.\nconst AC = hasAbortController\n ? AbortController\n : class AbortController {\n constructor() {\n this.signal = new AS()\n }\n abort(reason = new Error('This operation was aborted')) {\n this.signal.reason = this.signal.reason || reason\n this.signal.aborted = true\n this.signal.dispatchEvent({\n type: 'abort',\n target: this.signal,\n })\n }\n }\n\nconst hasAbortSignal = typeof AbortSignal === 'function'\n// Some polyfills put this on the AC class, not global\nconst hasACAbortSignal = typeof AC.AbortSignal === 'function'\nconst AS = hasAbortSignal\n ? AbortSignal\n : hasACAbortSignal\n ? AC.AbortController\n : class AbortSignal {\n constructor() {\n this.reason = undefined\n this.aborted = false\n this._listeners = []\n }\n dispatchEvent(e) {\n if (e.type === 'abort') {\n this.aborted = true\n this.onabort(e)\n this._listeners.forEach(f => f(e), this)\n }\n }\n onabort() {}\n addEventListener(ev, fn) {\n if (ev === 'abort') {\n this._listeners.push(fn)\n }\n }\n removeEventListener(ev, fn) {\n if (ev === 'abort') {\n this._listeners = this._listeners.filter(f => f !== fn)\n }\n }\n }\n\nconst warned = new Set()\nconst deprecatedOption = (opt, instead) => {\n const code = `LRU_CACHE_OPTION_${opt}`\n if (shouldWarn(code)) {\n warn(code, `${opt} option`, `options.${instead}`, LRUCache)\n }\n}\nconst deprecatedMethod = (method, instead) => {\n const code = `LRU_CACHE_METHOD_${method}`\n if (shouldWarn(code)) {\n const { prototype } = LRUCache\n const { get } = Object.getOwnPropertyDescriptor(prototype, method)\n warn(code, `${method} method`, `cache.${instead}()`, get)\n }\n}\nconst deprecatedProperty = (field, instead) => {\n const code = `LRU_CACHE_PROPERTY_${field}`\n if (shouldWarn(code)) {\n const { prototype } = LRUCache\n const { get } = Object.getOwnPropertyDescriptor(prototype, field)\n warn(code, `${field} property`, `cache.${instead}`, get)\n }\n}\n\nconst emitWarning = (...a) => {\n typeof process === 'object' &&\n process &&\n typeof process.emitWarning === 'function'\n ? process.emitWarning(...a)\n : console.error(...a)\n}\n\nconst shouldWarn = code => !warned.has(code)\n\nconst warn = (code, what, instead, fn) => {\n warned.add(code)\n const msg = `The ${what} is deprecated. Please use ${instead} instead.`\n emitWarning(msg, 'DeprecationWarning', code, fn)\n}\n\nconst isPosInt = n => n && n === Math.floor(n) && n > 0 && isFinite(n)\n\n/* istanbul ignore next - This is a little bit ridiculous, tbh.\n * The maximum array length is 2^32-1 or thereabouts on most JS impls.\n * And well before that point, you're caching the entire world, I mean,\n * that's ~32GB of just integers for the next/prev links, plus whatever\n * else to hold that many keys and values. Just filling the memory with\n * zeroes at init time is brutal when you get that big.\n * But why not be complete?\n * Maybe in the future, these limits will have expanded. */\nconst getUintArray = max =>\n !isPosInt(max)\n ? null\n : max <= Math.pow(2, 8)\n ? Uint8Array\n : max <= Math.pow(2, 16)\n ? Uint16Array\n : max <= Math.pow(2, 32)\n ? Uint32Array\n : max <= Number.MAX_SAFE_INTEGER\n ? ZeroArray\n : null\n\nclass ZeroArray extends Array {\n constructor(size) {\n super(size)\n this.fill(0)\n }\n}\n\nclass Stack {\n constructor(max) {\n if (max === 0) {\n return []\n }\n const UintArray = getUintArray(max)\n this.heap = new UintArray(max)\n this.length = 0\n }\n push(n) {\n this.heap[this.length++] = n\n }\n pop() {\n return this.heap[--this.length]\n }\n}\n\nclass LRUCache {\n constructor(options = {}) {\n const {\n max = 0,\n ttl,\n ttlResolution = 1,\n ttlAutopurge,\n updateAgeOnGet,\n updateAgeOnHas,\n allowStale,\n dispose,\n disposeAfter,\n noDisposeOnSet,\n noUpdateTTL,\n maxSize = 0,\n maxEntrySize = 0,\n sizeCalculation,\n fetchMethod,\n fetchContext,\n noDeleteOnFetchRejection,\n noDeleteOnStaleGet,\n allowStaleOnFetchRejection,\n allowStaleOnFetchAbort,\n ignoreFetchAbort,\n } = options\n\n // deprecated options, don't trigger a warning for getting them if\n // the thing being passed in is another LRUCache we're copying.\n const { length, maxAge, stale } =\n options instanceof LRUCache ? {} : options\n\n if (max !== 0 && !isPosInt(max)) {\n throw new TypeError('max option must be a nonnegative integer')\n }\n\n const UintArray = max ? getUintArray(max) : Array\n if (!UintArray) {\n throw new Error('invalid max value: ' + max)\n }\n\n this.max = max\n this.maxSize = maxSize\n this.maxEntrySize = maxEntrySize || this.maxSize\n this.sizeCalculation = sizeCalculation || length\n if (this.sizeCalculation) {\n if (!this.maxSize && !this.maxEntrySize) {\n throw new TypeError(\n 'cannot set sizeCalculation without setting maxSize or maxEntrySize'\n )\n }\n if (typeof this.sizeCalculation !== 'function') {\n throw new TypeError('sizeCalculation set to non-function')\n }\n }\n\n this.fetchMethod = fetchMethod || null\n if (this.fetchMethod && typeof this.fetchMethod !== 'function') {\n throw new TypeError(\n 'fetchMethod must be a function if specified'\n )\n }\n\n this.fetchContext = fetchContext\n if (!this.fetchMethod && fetchContext !== undefined) {\n throw new TypeError(\n 'cannot set fetchContext without fetchMethod'\n )\n }\n\n this.keyMap = new Map()\n this.keyList = new Array(max).fill(null)\n this.valList = new Array(max).fill(null)\n this.next = new UintArray(max)\n this.prev = new UintArray(max)\n this.head = 0\n this.tail = 0\n this.free = new Stack(max)\n this.initialFill = 1\n this.size = 0\n\n if (typeof dispose === 'function') {\n this.dispose = dispose\n }\n if (typeof disposeAfter === 'function') {\n this.disposeAfter = disposeAfter\n this.disposed = []\n } else {\n this.disposeAfter = null\n this.disposed = null\n }\n this.noDisposeOnSet = !!noDisposeOnSet\n this.noUpdateTTL = !!noUpdateTTL\n this.noDeleteOnFetchRejection = !!noDeleteOnFetchRejection\n this.allowStaleOnFetchRejection = !!allowStaleOnFetchRejection\n this.allowStaleOnFetchAbort = !!allowStaleOnFetchAbort\n this.ignoreFetchAbort = !!ignoreFetchAbort\n\n // NB: maxEntrySize is set to maxSize if it's set\n if (this.maxEntrySize !== 0) {\n if (this.maxSize !== 0) {\n if (!isPosInt(this.maxSize)) {\n throw new TypeError(\n 'maxSize must be a positive integer if specified'\n )\n }\n }\n if (!isPosInt(this.maxEntrySize)) {\n throw new TypeError(\n 'maxEntrySize must be a positive integer if specified'\n )\n }\n this.initializeSizeTracking()\n }\n\n this.allowStale = !!allowStale || !!stale\n this.noDeleteOnStaleGet = !!noDeleteOnStaleGet\n this.updateAgeOnGet = !!updateAgeOnGet\n this.updateAgeOnHas = !!updateAgeOnHas\n this.ttlResolution =\n isPosInt(ttlResolution) || ttlResolution === 0\n ? ttlResolution\n : 1\n this.ttlAutopurge = !!ttlAutopurge\n this.ttl = ttl || maxAge || 0\n if (this.ttl) {\n if (!isPosInt(this.ttl)) {\n throw new TypeError(\n 'ttl must be a positive integer if specified'\n )\n }\n this.initializeTTLTracking()\n }\n\n // do not allow completely unbounded caches\n if (this.max === 0 && this.ttl === 0 && this.maxSize === 0) {\n throw new TypeError(\n 'At least one of max, maxSize, or ttl is required'\n )\n }\n if (!this.ttlAutopurge && !this.max && !this.maxSize) {\n const code = 'LRU_CACHE_UNBOUNDED'\n if (shouldWarn(code)) {\n warned.add(code)\n const msg =\n 'TTL caching without ttlAutopurge, max, or maxSize can ' +\n 'result in unbounded memory consumption.'\n emitWarning(msg, 'UnboundedCacheWarning', code, LRUCache)\n }\n }\n\n if (stale) {\n deprecatedOption('stale', 'allowStale')\n }\n if (maxAge) {\n deprecatedOption('maxAge', 'ttl')\n }\n if (length) {\n deprecatedOption('length', 'sizeCalculation')\n }\n }\n\n getRemainingTTL(key) {\n return this.has(key, { updateAgeOnHas: false }) ? Infinity : 0\n }\n\n initializeTTLTracking() {\n this.ttls = new ZeroArray(this.max)\n this.starts = new ZeroArray(this.max)\n\n this.setItemTTL = (index, ttl, start = perf.now()) => {\n this.starts[index] = ttl !== 0 ? start : 0\n this.ttls[index] = ttl\n if (ttl !== 0 && this.ttlAutopurge) {\n const t = setTimeout(() => {\n if (this.isStale(index)) {\n this.delete(this.keyList[index])\n }\n }, ttl + 1)\n /* istanbul ignore else - unref() not supported on all platforms */\n if (t.unref) {\n t.unref()\n }\n }\n }\n\n this.updateItemAge = index => {\n this.starts[index] = this.ttls[index] !== 0 ? perf.now() : 0\n }\n\n this.statusTTL = (status, index) => {\n if (status) {\n status.ttl = this.ttls[index]\n status.start = this.starts[index]\n status.now = cachedNow || getNow()\n status.remainingTTL = status.now + status.ttl - status.start\n }\n }\n\n // debounce calls to perf.now() to 1s so we're not hitting\n // that costly call repeatedly.\n let cachedNow = 0\n const getNow = () => {\n const n = perf.now()\n if (this.ttlResolution > 0) {\n cachedNow = n\n const t = setTimeout(\n () => (cachedNow = 0),\n this.ttlResolution\n )\n /* istanbul ignore else - not available on all platforms */\n if (t.unref) {\n t.unref()\n }\n }\n return n\n }\n\n this.getRemainingTTL = key => {\n const index = this.keyMap.get(key)\n if (index === undefined) {\n return 0\n }\n return this.ttls[index] === 0 || this.starts[index] === 0\n ? Infinity\n : this.starts[index] +\n this.ttls[index] -\n (cachedNow || getNow())\n }\n\n this.isStale = index => {\n return (\n this.ttls[index] !== 0 &&\n this.starts[index] !== 0 &&\n (cachedNow || getNow()) - this.starts[index] >\n this.ttls[index]\n )\n }\n }\n updateItemAge(_index) {}\n statusTTL(_status, _index) {}\n setItemTTL(_index, _ttl, _start) {}\n isStale(_index) {\n return false\n }\n\n initializeSizeTracking() {\n this.calculatedSize = 0\n this.sizes = new ZeroArray(this.max)\n this.removeItemSize = index => {\n this.calculatedSize -= this.sizes[index]\n this.sizes[index] = 0\n }\n this.requireSize = (k, v, size, sizeCalculation) => {\n // provisionally accept background fetches.\n // actual value size will be checked when they return.\n if (this.isBackgroundFetch(v)) {\n return 0\n }\n if (!isPosInt(size)) {\n if (sizeCalculation) {\n if (typeof sizeCalculation !== 'function') {\n throw new TypeError('sizeCalculation must be a function')\n }\n size = sizeCalculation(v, k)\n if (!isPosInt(size)) {\n throw new TypeError(\n 'sizeCalculation return invalid (expect positive integer)'\n )\n }\n } else {\n throw new TypeError(\n 'invalid size value (must be positive integer). ' +\n 'When maxSize or maxEntrySize is used, sizeCalculation or size ' +\n 'must be set.'\n )\n }\n }\n return size\n }\n this.addItemSize = (index, size, status) => {\n this.sizes[index] = size\n if (this.maxSize) {\n const maxSize = this.maxSize - this.sizes[index]\n while (this.calculatedSize > maxSize) {\n this.evict(true)\n }\n }\n this.calculatedSize += this.sizes[index]\n if (status) {\n status.entrySize = size\n status.totalCalculatedSize = this.calculatedSize\n }\n }\n }\n removeItemSize(_index) {}\n addItemSize(_index, _size) {}\n requireSize(_k, _v, size, sizeCalculation) {\n if (size || sizeCalculation) {\n throw new TypeError(\n 'cannot set size without setting maxSize or maxEntrySize on cache'\n )\n }\n }\n\n *indexes({ allowStale = this.allowStale } = {}) {\n if (this.size) {\n for (let i = this.tail; true; ) {\n if (!this.isValidIndex(i)) {\n break\n }\n if (allowStale || !this.isStale(i)) {\n yield i\n }\n if (i === this.head) {\n break\n } else {\n i = this.prev[i]\n }\n }\n }\n }\n\n *rindexes({ allowStale = this.allowStale } = {}) {\n if (this.size) {\n for (let i = this.head; true; ) {\n if (!this.isValidIndex(i)) {\n break\n }\n if (allowStale || !this.isStale(i)) {\n yield i\n }\n if (i === this.tail) {\n break\n } else {\n i = this.next[i]\n }\n }\n }\n }\n\n isValidIndex(index) {\n return (\n index !== undefined &&\n this.keyMap.get(this.keyList[index]) === index\n )\n }\n\n *entries() {\n for (const i of this.indexes()) {\n if (\n this.valList[i] !== undefined &&\n this.keyList[i] !== undefined &&\n !this.isBackgroundFetch(this.valList[i])\n ) {\n yield [this.keyList[i], this.valList[i]]\n }\n }\n }\n *rentries() {\n for (const i of this.rindexes()) {\n if (\n this.valList[i] !== undefined &&\n this.keyList[i] !== undefined &&\n !this.isBackgroundFetch(this.valList[i])\n ) {\n yield [this.keyList[i], this.valList[i]]\n }\n }\n }\n\n *keys() {\n for (const i of this.indexes()) {\n if (\n this.keyList[i] !== undefined &&\n !this.isBackgroundFetch(this.valList[i])\n ) {\n yield this.keyList[i]\n }\n }\n }\n *rkeys() {\n for (const i of this.rindexes()) {\n if (\n this.keyList[i] !== undefined &&\n !this.isBackgroundFetch(this.valList[i])\n ) {\n yield this.keyList[i]\n }\n }\n }\n\n *values() {\n for (const i of this.indexes()) {\n if (\n this.valList[i] !== undefined &&\n !this.isBackgroundFetch(this.valList[i])\n ) {\n yield this.valList[i]\n }\n }\n }\n *rvalues() {\n for (const i of this.rindexes()) {\n if (\n this.valList[i] !== undefined &&\n !this.isBackgroundFetch(this.valList[i])\n ) {\n yield this.valList[i]\n }\n }\n }\n\n [Symbol.iterator]() {\n return this.entries()\n }\n\n find(fn, getOptions) {\n for (const i of this.indexes()) {\n const v = this.valList[i]\n const value = this.isBackgroundFetch(v)\n ? v.__staleWhileFetching\n : v\n if (value === undefined) continue\n if (fn(value, this.keyList[i], this)) {\n return this.get(this.keyList[i], getOptions)\n }\n }\n }\n\n forEach(fn, thisp = this) {\n for (const i of this.indexes()) {\n const v = this.valList[i]\n const value = this.isBackgroundFetch(v)\n ? v.__staleWhileFetching\n : v\n if (value === undefined) continue\n fn.call(thisp, value, this.keyList[i], this)\n }\n }\n\n rforEach(fn, thisp = this) {\n for (const i of this.rindexes()) {\n const v = this.valList[i]\n const value = this.isBackgroundFetch(v)\n ? v.__staleWhileFetching\n : v\n if (value === undefined) continue\n fn.call(thisp, value, this.keyList[i], this)\n }\n }\n\n get prune() {\n deprecatedMethod('prune', 'purgeStale')\n return this.purgeStale\n }\n\n purgeStale() {\n let deleted = false\n for (const i of this.rindexes({ allowStale: true })) {\n if (this.isStale(i)) {\n this.delete(this.keyList[i])\n deleted = true\n }\n }\n return deleted\n }\n\n dump() {\n const arr = []\n for (const i of this.indexes({ allowStale: true })) {\n const key = this.keyList[i]\n const v = this.valList[i]\n const value = this.isBackgroundFetch(v)\n ? v.__staleWhileFetching\n : v\n if (value === undefined) continue\n const entry = { value }\n if (this.ttls) {\n entry.ttl = this.ttls[i]\n // always dump the start relative to a portable timestamp\n // it's ok for this to be a bit slow, it's a rare operation.\n const age = perf.now() - this.starts[i]\n entry.start = Math.floor(Date.now() - age)\n }\n if (this.sizes) {\n entry.size = this.sizes[i]\n }\n arr.unshift([key, entry])\n }\n return arr\n }\n\n load(arr) {\n this.clear()\n for (const [key, entry] of arr) {\n if (entry.start) {\n // entry.start is a portable timestamp, but we may be using\n // node's performance.now(), so calculate the offset.\n // it's ok for this to be a bit slow, it's a rare operation.\n const age = Date.now() - entry.start\n entry.start = perf.now() - age\n }\n this.set(key, entry.value, entry)\n }\n }\n\n dispose(_v, _k, _reason) {}\n\n set(\n k,\n v,\n {\n ttl = this.ttl,\n start,\n noDisposeOnSet = this.noDisposeOnSet,\n size = 0,\n sizeCalculation = this.sizeCalculation,\n noUpdateTTL = this.noUpdateTTL,\n status,\n } = {}\n ) {\n size = this.requireSize(k, v, size, sizeCalculation)\n // if the item doesn't fit, don't do anything\n // NB: maxEntrySize set to maxSize by default\n if (this.maxEntrySize && size > this.maxEntrySize) {\n if (status) {\n status.set = 'miss'\n status.maxEntrySizeExceeded = true\n }\n // have to delete, in case a background fetch is there already.\n // in non-async cases, this is a no-op\n this.delete(k)\n return this\n }\n let index = this.size === 0 ? undefined : this.keyMap.get(k)\n if (index === undefined) {\n // addition\n index = this.newIndex()\n this.keyList[index] = k\n this.valList[index] = v\n this.keyMap.set(k, index)\n this.next[this.tail] = index\n this.prev[index] = this.tail\n this.tail = index\n this.size++\n this.addItemSize(index, size, status)\n if (status) {\n status.set = 'add'\n }\n noUpdateTTL = false\n } else {\n // update\n this.moveToTail(index)\n const oldVal = this.valList[index]\n if (v !== oldVal) {\n if (this.isBackgroundFetch(oldVal)) {\n oldVal.__abortController.abort(new Error('replaced'))\n } else {\n if (!noDisposeOnSet) {\n this.dispose(oldVal, k, 'set')\n if (this.disposeAfter) {\n this.disposed.push([oldVal, k, 'set'])\n }\n }\n }\n this.removeItemSize(index)\n this.valList[index] = v\n this.addItemSize(index, size, status)\n if (status) {\n status.set = 'replace'\n const oldValue =\n oldVal && this.isBackgroundFetch(oldVal)\n ? oldVal.__staleWhileFetching\n : oldVal\n if (oldValue !== undefined) status.oldValue = oldValue\n }\n } else if (status) {\n status.set = 'update'\n }\n }\n if (ttl !== 0 && this.ttl === 0 && !this.ttls) {\n this.initializeTTLTracking()\n }\n if (!noUpdateTTL) {\n this.setItemTTL(index, ttl, start)\n }\n this.statusTTL(status, index)\n if (this.disposeAfter) {\n while (this.disposed.length) {\n this.disposeAfter(...this.disposed.shift())\n }\n }\n return this\n }\n\n newIndex() {\n if (this.size === 0) {\n return this.tail\n }\n if (this.size === this.max && this.max !== 0) {\n return this.evict(false)\n }\n if (this.free.length !== 0) {\n return this.free.pop()\n }\n // initial fill, just keep writing down the list\n return this.initialFill++\n }\n\n pop() {\n if (this.size) {\n const val = this.valList[this.head]\n this.evict(true)\n return val\n }\n }\n\n evict(free) {\n const head = this.head\n const k = this.keyList[head]\n const v = this.valList[head]\n if (this.isBackgroundFetch(v)) {\n v.__abortController.abort(new Error('evicted'))\n } else {\n this.dispose(v, k, 'evict')\n if (this.disposeAfter) {\n this.disposed.push([v, k, 'evict'])\n }\n }\n this.removeItemSize(head)\n // if we aren't about to use the index, then null these out\n if (free) {\n this.keyList[head] = null\n this.valList[head] = null\n this.free.push(head)\n }\n this.head = this.next[head]\n this.keyMap.delete(k)\n this.size--\n return head\n }\n\n has(k, { updateAgeOnHas = this.updateAgeOnHas, status } = {}) {\n const index = this.keyMap.get(k)\n if (index !== undefined) {\n if (!this.isStale(index)) {\n if (updateAgeOnHas) {\n this.updateItemAge(index)\n }\n if (status) status.has = 'hit'\n this.statusTTL(status, index)\n return true\n } else if (status) {\n status.has = 'stale'\n this.statusTTL(status, index)\n }\n } else if (status) {\n status.has = 'miss'\n }\n return false\n }\n\n // like get(), but without any LRU updating or TTL expiration\n peek(k, { allowStale = this.allowStale } = {}) {\n const index = this.keyMap.get(k)\n if (index !== undefined && (allowStale || !this.isStale(index))) {\n const v = this.valList[index]\n // either stale and allowed, or forcing a refresh of non-stale value\n return this.isBackgroundFetch(v) ? v.__staleWhileFetching : v\n }\n }\n\n backgroundFetch(k, index, options, context) {\n const v = index === undefined ? undefined : this.valList[index]\n if (this.isBackgroundFetch(v)) {\n return v\n }\n const ac = new AC()\n if (options.signal) {\n options.signal.addEventListener('abort', () =>\n ac.abort(options.signal.reason)\n )\n }\n const fetchOpts = {\n signal: ac.signal,\n options,\n context,\n }\n const cb = (v, updateCache = false) => {\n const { aborted } = ac.signal\n const ignoreAbort = options.ignoreFetchAbort && v !== undefined\n if (options.status) {\n if (aborted && !updateCache) {\n options.status.fetchAborted = true\n options.status.fetchError = ac.signal.reason\n if (ignoreAbort) options.status.fetchAbortIgnored = true\n } else {\n options.status.fetchResolved = true\n }\n }\n if (aborted && !ignoreAbort && !updateCache) {\n return fetchFail(ac.signal.reason)\n }\n // either we didn't abort, and are still here, or we did, and ignored\n if (this.valList[index] === p) {\n if (v === undefined) {\n if (p.__staleWhileFetching) {\n this.valList[index] = p.__staleWhileFetching\n } else {\n this.delete(k)\n }\n } else {\n if (options.status) options.status.fetchUpdated = true\n this.set(k, v, fetchOpts.options)\n }\n }\n return v\n }\n const eb = er => {\n if (options.status) {\n options.status.fetchRejected = true\n options.status.fetchError = er\n }\n return fetchFail(er)\n }\n const fetchFail = er => {\n const { aborted } = ac.signal\n const allowStaleAborted =\n aborted && options.allowStaleOnFetchAbort\n const allowStale =\n allowStaleAborted || options.allowStaleOnFetchRejection\n const noDelete = allowStale || options.noDeleteOnFetchRejection\n if (this.valList[index] === p) {\n // if we allow stale on fetch rejections, then we need to ensure that\n // the stale value is not removed from the cache when the fetch fails.\n const del = !noDelete || p.__staleWhileFetching === undefined\n if (del) {\n this.delete(k)\n } else if (!allowStaleAborted) {\n // still replace the *promise* with the stale value,\n // since we are done with the promise at this point.\n // leave it untouched if we're still waiting for an\n // aborted background fetch that hasn't yet returned.\n this.valList[index] = p.__staleWhileFetching\n }\n }\n if (allowStale) {\n if (options.status && p.__staleWhileFetching !== undefined) {\n options.status.returnedStale = true\n }\n return p.__staleWhileFetching\n } else if (p.__returned === p) {\n throw er\n }\n }\n const pcall = (res, rej) => {\n this.fetchMethod(k, v, fetchOpts).then(v => res(v), rej)\n // ignored, we go until we finish, regardless.\n // defer check until we are actually aborting,\n // so fetchMethod can override.\n ac.signal.addEventListener('abort', () => {\n if (\n !options.ignoreFetchAbort ||\n options.allowStaleOnFetchAbort\n ) {\n res()\n // when it eventually resolves, update the cache.\n if (options.allowStaleOnFetchAbort) {\n res = v => cb(v, true)\n }\n }\n })\n }\n if (options.status) options.status.fetchDispatched = true\n const p = new Promise(pcall).then(cb, eb)\n p.__abortController = ac\n p.__staleWhileFetching = v\n p.__returned = null\n if (index === undefined) {\n // internal, don't expose status.\n this.set(k, p, { ...fetchOpts.options, status: undefined })\n index = this.keyMap.get(k)\n } else {\n this.valList[index] = p\n }\n return p\n }\n\n isBackgroundFetch(p) {\n return (\n p &&\n typeof p === 'object' &&\n typeof p.then === 'function' &&\n Object.prototype.hasOwnProperty.call(\n p,\n '__staleWhileFetching'\n ) &&\n Object.prototype.hasOwnProperty.call(p, '__returned') &&\n (p.__returned === p || p.__returned === null)\n )\n }\n\n // this takes the union of get() and set() opts, because it does both\n async fetch(\n k,\n {\n // get options\n allowStale = this.allowStale,\n updateAgeOnGet = this.updateAgeOnGet,\n noDeleteOnStaleGet = this.noDeleteOnStaleGet,\n // set options\n ttl = this.ttl,\n noDisposeOnSet = this.noDisposeOnSet,\n size = 0,\n sizeCalculation = this.sizeCalculation,\n noUpdateTTL = this.noUpdateTTL,\n // fetch exclusive options\n noDeleteOnFetchRejection = this.noDeleteOnFetchRejection,\n allowStaleOnFetchRejection = this.allowStaleOnFetchRejection,\n ignoreFetchAbort = this.ignoreFetchAbort,\n allowStaleOnFetchAbort = this.allowStaleOnFetchAbort,\n fetchContext = this.fetchContext,\n forceRefresh = false,\n status,\n signal,\n } = {}\n ) {\n if (!this.fetchMethod) {\n if (status) status.fetch = 'get'\n return this.get(k, {\n allowStale,\n updateAgeOnGet,\n noDeleteOnStaleGet,\n status,\n })\n }\n\n const options = {\n allowStale,\n updateAgeOnGet,\n noDeleteOnStaleGet,\n ttl,\n noDisposeOnSet,\n size,\n sizeCalculation,\n noUpdateTTL,\n noDeleteOnFetchRejection,\n allowStaleOnFetchRejection,\n allowStaleOnFetchAbort,\n ignoreFetchAbort,\n status,\n signal,\n }\n\n let index = this.keyMap.get(k)\n if (index === undefined) {\n if (status) status.fetch = 'miss'\n const p = this.backgroundFetch(k, index, options, fetchContext)\n return (p.__returned = p)\n } else {\n // in cache, maybe already fetching\n const v = this.valList[index]\n if (this.isBackgroundFetch(v)) {\n const stale =\n allowStale && v.__staleWhileFetching !== undefined\n if (status) {\n status.fetch = 'inflight'\n if (stale) status.returnedStale = true\n }\n return stale ? v.__staleWhileFetching : (v.__returned = v)\n }\n\n // if we force a refresh, that means do NOT serve the cached value,\n // unless we are already in the process of refreshing the cache.\n const isStale = this.isStale(index)\n if (!forceRefresh && !isStale) {\n if (status) status.fetch = 'hit'\n this.moveToTail(index)\n if (updateAgeOnGet) {\n this.updateItemAge(index)\n }\n this.statusTTL(status, index)\n return v\n }\n\n // ok, it is stale or a forced refresh, and not already fetching.\n // refresh the cache.\n const p = this.backgroundFetch(k, index, options, fetchContext)\n const hasStale = p.__staleWhileFetching !== undefined\n const staleVal = hasStale && allowStale\n if (status) {\n status.fetch = hasStale && isStale ? 'stale' : 'refresh'\n if (staleVal && isStale) status.returnedStale = true\n }\n return staleVal ? p.__staleWhileFetching : (p.__returned = p)\n }\n }\n\n get(\n k,\n {\n allowStale = this.allowStale,\n updateAgeOnGet = this.updateAgeOnGet,\n noDeleteOnStaleGet = this.noDeleteOnStaleGet,\n status,\n } = {}\n ) {\n const index = this.keyMap.get(k)\n if (index !== undefined) {\n const value = this.valList[index]\n const fetching = this.isBackgroundFetch(value)\n this.statusTTL(status, index)\n if (this.isStale(index)) {\n if (status) status.get = 'stale'\n // delete only if not an in-flight background fetch\n if (!fetching) {\n if (!noDeleteOnStaleGet) {\n this.delete(k)\n }\n if (status) status.returnedStale = allowStale\n return allowStale ? value : undefined\n } else {\n if (status) {\n status.returnedStale =\n allowStale && value.__staleWhileFetching !== undefined\n }\n return allowStale ? value.__staleWhileFetching : undefined\n }\n } else {\n if (status) status.get = 'hit'\n // if we're currently fetching it, we don't actually have it yet\n // it's not stale, which means this isn't a staleWhileRefetching.\n // If it's not stale, and fetching, AND has a __staleWhileFetching\n // value, then that means the user fetched with {forceRefresh:true},\n // so it's safe to return that value.\n if (fetching) {\n return value.__staleWhileFetching\n }\n this.moveToTail(index)\n if (updateAgeOnGet) {\n this.updateItemAge(index)\n }\n return value\n }\n } else if (status) {\n status.get = 'miss'\n }\n }\n\n connect(p, n) {\n this.prev[n] = p\n this.next[p] = n\n }\n\n moveToTail(index) {\n // if tail already, nothing to do\n // if head, move head to next[index]\n // else\n // move next[prev[index]] to next[index] (head has no prev)\n // move prev[next[index]] to prev[index]\n // prev[index] = tail\n // next[tail] = index\n // tail = index\n if (index !== this.tail) {\n if (index === this.head) {\n this.head = this.next[index]\n } else {\n this.connect(this.prev[index], this.next[index])\n }\n this.connect(this.tail, index)\n this.tail = index\n }\n }\n\n get del() {\n deprecatedMethod('del', 'delete')\n return this.delete\n }\n\n delete(k) {\n let deleted = false\n if (this.size !== 0) {\n const index = this.keyMap.get(k)\n if (index !== undefined) {\n deleted = true\n if (this.size === 1) {\n this.clear()\n } else {\n this.removeItemSize(index)\n const v = this.valList[index]\n if (this.isBackgroundFetch(v)) {\n v.__abortController.abort(new Error('deleted'))\n } else {\n this.dispose(v, k, 'delete')\n if (this.disposeAfter) {\n this.disposed.push([v, k, 'delete'])\n }\n }\n this.keyMap.delete(k)\n this.keyList[index] = null\n this.valList[index] = null\n if (index === this.tail) {\n this.tail = this.prev[index]\n } else if (index === this.head) {\n this.head = this.next[index]\n } else {\n this.next[this.prev[index]] = this.next[index]\n this.prev[this.next[index]] = this.prev[index]\n }\n this.size--\n this.free.push(index)\n }\n }\n }\n if (this.disposed) {\n while (this.disposed.length) {\n this.disposeAfter(...this.disposed.shift())\n }\n }\n return deleted\n }\n\n clear() {\n for (const index of this.rindexes({ allowStale: true })) {\n const v = this.valList[index]\n if (this.isBackgroundFetch(v)) {\n v.__abortController.abort(new Error('deleted'))\n } else {\n const k = this.keyList[index]\n this.dispose(v, k, 'delete')\n if (this.disposeAfter) {\n this.disposed.push([v, k, 'delete'])\n }\n }\n }\n\n this.keyMap.clear()\n this.valList.fill(null)\n this.keyList.fill(null)\n if (this.ttls) {\n this.ttls.fill(0)\n this.starts.fill(0)\n }\n if (this.sizes) {\n this.sizes.fill(0)\n }\n this.head = 0\n this.tail = 0\n this.initialFill = 1\n this.free.length = 0\n this.calculatedSize = 0\n this.size = 0\n if (this.disposed) {\n while (this.disposed.length) {\n this.disposeAfter(...this.disposed.shift())\n }\n }\n }\n\n get reset() {\n deprecatedMethod('reset', 'clear')\n return this.clear\n }\n\n get length() {\n deprecatedProperty('length', 'size')\n return this.size\n }\n\n static get AbortController() {\n return AC\n }\n static get AbortSignal() {\n return AS\n }\n}\n\nmodule.exports = LRUCache\n",
|
|
134
|
+
"'use strict';\n\n// based on code from Brian White @mscdex mariasql library - https://github.com/mscdex/node-mariasql/blob/master/lib/Client.js#L272-L332\n// License: https://github.com/mscdex/node-mariasql/blob/master/LICENSE\n\nconst RE_PARAM = /(?:\\?)|(?::(\\d+|(?:[a-zA-Z][a-zA-Z0-9_]*)))/g,\nDQUOTE = 34,\nSQUOTE = 39,\nBSLASH = 92;\n\nfunction parse(query) {\n let ppos = RE_PARAM.exec(query);\n let curpos = 0;\n let start = 0;\n let end;\n const parts = [];\n let inQuote = false;\n let escape = false;\n let qchr;\n const tokens = [];\n let qcnt = 0;\n let lastTokenEndPos = 0;\n let i;\n\n if (ppos) {\n do {\n for (i=curpos,end=ppos.index; i<end; ++i) {\n let chr = query.charCodeAt(i);\n if (chr === BSLASH)\n escape = !escape;\n else {\n if (escape) {\n escape = false;\n continue;\n }\n if (inQuote && chr === qchr) {\n if (query.charCodeAt(i + 1) === qchr) {\n // quote escaped via \"\" or ''\n ++i;\n continue;\n }\n inQuote = false;\n } else if (chr === DQUOTE || chr === SQUOTE) {\n inQuote = true;\n qchr = chr;\n }\n }\n }\n if (!inQuote) {\n parts.push(query.substring(start, end));\n tokens.push(ppos[0].length === 1 ? qcnt++ : ppos[1]);\n start = end + ppos[0].length;\n lastTokenEndPos = start;\n }\n curpos = end + ppos[0].length;\n } while (ppos = RE_PARAM.exec(query));\n\n if (tokens.length) {\n if (curpos < query.length) {\n parts.push(query.substring(lastTokenEndPos));\n }\n return [parts, tokens];\n }\n }\n return [query];\n};\n\nfunction createCompiler(config) {\n if (!config)\n config = {};\n if (!config.placeholder) {\n config.placeholder = '?';\n }\n let ncache = 100;\n let cache;\n if (typeof config.cache === 'number') {\n ncache = config.cache;\n }\n if (typeof config.cache === 'object') {\n cache = config.cache;\n }\n if (config.cache !== false && !cache) {\n cache = new (require('lru-cache'))({ max: ncache });\n }\n\n function toArrayParams(tree, params) {\n const arr = [];\n if (tree.length == 1) {\n return [tree[0], []];\n }\n\n if (typeof params == 'undefined')\n throw new Error('Named query contains placeholders, but parameters object is undefined');\n\n const tokens = tree[1];\n for (let i=0; i < tokens.length; ++i) {\n arr.push(params[tokens[i]]);\n }\n return [tree[0], arr];\n }\n\n function noTailingSemicolon(s) {\n if (s.slice(-1) == ':') {\n return s.slice(0, -1);\n }\n return s;\n }\n\n function join(tree) {\n if (tree.length == 1) {\n return tree;\n }\n\n let unnamed = noTailingSemicolon(tree[0][0]);\n for (let i=1; i < tree[0].length; ++i) {\n if (tree[0][i-1].slice(-1) == ':') {\n unnamed += config.placeholder;\n }\n unnamed += config.placeholder;\n unnamed += noTailingSemicolon(tree[0][i]);\n }\n\n const last = tree[0][tree[0].length -1];\n if (tree[0].length == tree[1].length) {\n if (last.slice(-1) == ':') {\n unnamed += config.placeholder;\n }\n unnamed += config.placeholder;\n }\n return [unnamed, tree[1]];\n }\n\n function compile(query, paramsObj) {\n let tree;\n if (cache && (tree = cache.get(query))) {\n return toArrayParams(tree, paramsObj)\n }\n tree = join(parse(query));\n if(cache) {\n cache.set(query, tree);\n }\n return toArrayParams(tree, paramsObj);\n }\n\n compile.parse = parse;\n return compile;\n}\n\n// named :one :two to postgres-style numbered $1 $2 $3\nfunction toNumbered(q, params) {\n const tree = parse(q);\n const paramsArr = [];\n if (tree.length == 1) {\n return [tree[0], paramsArr];\n }\n\n const pIndexes = {};\n let pLastIndex = 0;\n let qs = '';\n let varIndex;\n const varNames = [];\n for (let i=0; i < tree[0].length; ++i) {\n varIndex = pIndexes[tree[1][i]];\n if (!varIndex) {\n varIndex = ++pLastIndex;\n pIndexes[tree[1][i]] = varIndex;\n }\n if (tree[1][i]) {\n varNames[varIndex - 1] = tree[1][i];\n qs += tree[0][i] + '$' + varIndex;\n } else {\n qs += tree[0][i];\n }\n }\n return [qs, varNames.map(n => params[n])];\n}\n\nmodule.exports = createCompiler;\nmodule.exports.toNumbered = toNumbered;\n",
|
|
135
|
+
"// This file was modified by Oracle on June 1, 2021.\n// The changes involve new logic to handle an additional ERR Packet sent by\n// the MySQL server when the connection is closed unexpectedly.\n// Modifications copyright (c) 2021, Oracle and/or its affiliates.\n\n// This file was modified by Oracle on June 17, 2021.\n// The changes involve logic to ensure the socket connection is closed when\n// there is a fatal error.\n// Modifications copyright (c) 2021, Oracle and/or its affiliates.\n\n// This file was modified by Oracle on September 21, 2021.\n// The changes involve passing additional authentication factor passwords\n// to the ChangeUser Command instance.\n// Modifications copyright (c) 2021, Oracle and/or its affiliates.\n\n'use strict';\n\nconst Net = require('net');\nconst Tls = require('tls');\nconst Timers = require('timers');\nconst EventEmitter = require('events').EventEmitter;\nconst Readable = require('stream').Readable;\nconst Queue = require('denque');\nconst SqlString = require('sqlstring');\nconst { createLRU } = require('lru.min');\nconst PacketParser = require('../packet_parser.js');\nconst Packets = require('../packets/index.js');\nconst Commands = require('../commands/index.js');\nconst ConnectionConfig = require('../connection_config.js');\nconst CharsetToEncoding = require('../constants/charset_encodings.js');\n\nlet _connectionId = 0;\n\nlet convertNamedPlaceholders = null;\n\nclass BaseConnection extends EventEmitter {\n constructor(opts) {\n super();\n this.config = opts.config;\n // TODO: fill defaults\n // if no params, connect to /var/lib/mysql/mysql.sock ( /tmp/mysql.sock on OSX )\n // if host is given, connect to host:3306\n // TODO: use `/usr/local/mysql/bin/mysql_config --socket` output? as default socketPath\n // if there is no host/port and no socketPath parameters?\n if (!opts.config.stream) {\n if (opts.config.socketPath) {\n this.stream = Net.connect(opts.config.socketPath);\n } else {\n this.stream = Net.connect(opts.config.port, opts.config.host);\n\n // Optionally enable keep-alive on the socket.\n if (this.config.enableKeepAlive) {\n this.stream.on('connect', () => {\n this.stream.setKeepAlive(true, this.config.keepAliveInitialDelay);\n });\n }\n\n // Enable TCP_NODELAY flag. This is needed so that the network packets\n // are sent immediately to the server\n this.stream.setNoDelay(true);\n }\n // if stream is a function, treat it as \"stream agent / factory\"\n } else if (typeof opts.config.stream === 'function') {\n this.stream = opts.config.stream(opts);\n } else {\n this.stream = opts.config.stream;\n }\n\n this._internalId = _connectionId++;\n this._commands = new Queue();\n this._command = null;\n this._paused = false;\n this._paused_packets = new Queue();\n this._statements = createLRU({\n max: this.config.maxPreparedStatements,\n onEviction: function (_, statement) {\n statement.close();\n },\n });\n this.serverCapabilityFlags = 0;\n this.authorized = false;\n this.sequenceId = 0;\n this.compressedSequenceId = 0;\n this.threadId = null;\n this._handshakePacket = null;\n this._fatalError = null;\n this._protocolError = null;\n this._outOfOrderPackets = [];\n this.clientEncoding = CharsetToEncoding[this.config.charsetNumber];\n this.stream.on('error', this._handleNetworkError.bind(this));\n // see https://gist.github.com/khoomeister/4985691#use-that-instead-of-bind\n this.packetParser = new PacketParser((p) => {\n this.handlePacket(p);\n });\n this.stream.on('data', (data) => {\n if (this.connectTimeout) {\n Timers.clearTimeout(this.connectTimeout);\n this.connectTimeout = null;\n }\n this.packetParser.execute(data);\n });\n this.stream.on('end', () => {\n // emit the end event so that the pooled connection can close the connection\n this.emit('end');\n });\n this.stream.on('close', () => {\n // we need to set this flag everywhere where we want connection to close\n if (this._closing) {\n return;\n }\n if (!this._protocolError) {\n // no particular error message before disconnect\n this._protocolError = new Error(\n 'Connection lost: The server closed the connection.'\n );\n this._protocolError.fatal = true;\n this._protocolError.code = 'PROTOCOL_CONNECTION_LOST';\n }\n this._notifyError(this._protocolError);\n });\n let handshakeCommand;\n if (!this.config.isServer) {\n handshakeCommand = new Commands.ClientHandshake(this.config.clientFlags);\n handshakeCommand.on('end', () => {\n // this happens when handshake finishes early either because there was\n // some fatal error or the server sent an error packet instead of\n // an hello packet (for example, 'Too many connections' error)\n if (\n !handshakeCommand.handshake ||\n this._fatalError ||\n this._protocolError\n ) {\n return;\n }\n this._handshakePacket = handshakeCommand.handshake;\n this.threadId = handshakeCommand.handshake.connectionId;\n this.emit('connect', handshakeCommand.handshake);\n });\n handshakeCommand.on('error', (err) => {\n this._closing = true;\n this._notifyError(err);\n });\n this.addCommand(handshakeCommand);\n }\n // in case there was no initial handshake but we need to read sting, assume it utf-8\n // most common example: \"Too many connections\" error ( packet is sent immediately on connection attempt, we don't know server encoding yet)\n // will be overwritten with actual encoding value as soon as server handshake packet is received\n this.serverEncoding = 'utf8';\n if (this.config.connectTimeout) {\n const timeoutHandler = this._handleTimeoutError.bind(this);\n this.connectTimeout = Timers.setTimeout(\n timeoutHandler,\n this.config.connectTimeout\n );\n }\n }\n\n _addCommandClosedState(cmd) {\n const err = new Error(\n \"Can't add new command when connection is in closed state\"\n );\n err.fatal = true;\n if (cmd.onResult) {\n cmd.onResult(err);\n } else {\n this.emit('error', err);\n }\n }\n\n _handleFatalError(err) {\n err.fatal = true;\n // stop receiving packets\n this.stream.removeAllListeners('data');\n this.addCommand = this._addCommandClosedState;\n this.write = () => {\n this.emit('error', new Error(\"Can't write in closed state\"));\n };\n this._notifyError(err);\n this._fatalError = err;\n }\n\n _handleNetworkError(err) {\n if (this.connectTimeout) {\n Timers.clearTimeout(this.connectTimeout);\n this.connectTimeout = null;\n }\n // Do not throw an error when a connection ends with a RST,ACK packet\n if (err.code === 'ECONNRESET' && this._closing) {\n return;\n }\n this._handleFatalError(err);\n }\n\n _handleTimeoutError() {\n if (this.connectTimeout) {\n Timers.clearTimeout(this.connectTimeout);\n this.connectTimeout = null;\n }\n this.stream.destroy && this.stream.destroy();\n const err = new Error('connect ETIMEDOUT');\n err.errorno = 'ETIMEDOUT';\n err.code = 'ETIMEDOUT';\n err.syscall = 'connect';\n this._handleNetworkError(err);\n }\n\n // notify all commands in the queue and bubble error as connection \"error\"\n // called on stream error or unexpected termination\n _notifyError(err) {\n if (this.connectTimeout) {\n Timers.clearTimeout(this.connectTimeout);\n this.connectTimeout = null;\n }\n // prevent from emitting 'PROTOCOL_CONNECTION_LOST' after EPIPE or ECONNRESET\n if (this._fatalError) {\n return;\n }\n let command;\n // if there is no active command, notify connection\n // if there are commands and all of them have callbacks, pass error via callback\n let bubbleErrorToConnection = !this._command;\n if (this._command && this._command.onResult) {\n this._command.onResult(err);\n this._command = null;\n // connection handshake is special because we allow it to be implicit\n // if error happened during handshake, but there are others commands in queue\n // then bubble error to other commands and not to connection\n } else if (\n !(\n this._command &&\n this._command.constructor === Commands.ClientHandshake &&\n this._commands.length > 0\n )\n ) {\n bubbleErrorToConnection = true;\n }\n while ((command = this._commands.shift())) {\n if (command.onResult) {\n command.onResult(err);\n } else {\n bubbleErrorToConnection = true;\n }\n }\n // notify connection if some comands in the queue did not have callbacks\n // or if this is pool connection ( so it can be removed from pool )\n if (bubbleErrorToConnection || this._pool) {\n this.emit('error', err);\n }\n // close connection after emitting the event in case of a fatal error\n if (err.fatal) {\n this.close();\n }\n }\n\n write(buffer) {\n const result = this.stream.write(buffer, (err) => {\n if (err) {\n this._handleNetworkError(err);\n }\n });\n\n if (!result) {\n this.stream.emit('pause');\n }\n }\n\n // http://dev.mysql.com/doc/internals/en/sequence-id.html\n //\n // The sequence-id is incremented with each packet and may wrap around.\n // It starts at 0 and is reset to 0 when a new command\n // begins in the Command Phase.\n // http://dev.mysql.com/doc/internals/en/example-several-mysql-packets.html\n _resetSequenceId() {\n this.sequenceId = 0;\n this.compressedSequenceId = 0;\n }\n\n _bumpCompressedSequenceId(numPackets) {\n this.compressedSequenceId += numPackets;\n this.compressedSequenceId %= 256;\n }\n\n _bumpSequenceId(numPackets) {\n this.sequenceId += numPackets;\n this.sequenceId %= 256;\n }\n\n writePacket(packet) {\n const MAX_PACKET_LENGTH = 16777215;\n const length = packet.length();\n let chunk, offset, header;\n if (length < MAX_PACKET_LENGTH) {\n packet.writeHeader(this.sequenceId);\n if (this.config.debug) {\n console.log(\n `${this._internalId} ${this.connectionId} <== ${this._command._commandName}#${this._command.stateName()}(${[this.sequenceId, packet._name, packet.length()].join(',')})`\n );\n console.log(\n `${this._internalId} ${this.connectionId} <== ${packet.buffer.toString('hex')}`\n );\n }\n this._bumpSequenceId(1);\n this.write(packet.buffer);\n } else {\n if (this.config.debug) {\n console.log(\n `${this._internalId} ${this.connectionId} <== Writing large packet, raw content not written:`\n );\n console.log(\n `${this._internalId} ${this.connectionId} <== ${this._command._commandName}#${this._command.stateName()}(${[this.sequenceId, packet._name, packet.length()].join(',')})`\n );\n }\n for (offset = 4; offset < 4 + length; offset += MAX_PACKET_LENGTH) {\n chunk = packet.buffer.slice(offset, offset + MAX_PACKET_LENGTH);\n if (chunk.length === MAX_PACKET_LENGTH) {\n header = Buffer.from([0xff, 0xff, 0xff, this.sequenceId]);\n } else {\n header = Buffer.from([\n chunk.length & 0xff,\n (chunk.length >> 8) & 0xff,\n (chunk.length >> 16) & 0xff,\n this.sequenceId,\n ]);\n }\n this._bumpSequenceId(1);\n this.write(header);\n this.write(chunk);\n }\n }\n }\n\n // 0.11+ environment\n startTLS(onSecure) {\n if (this.config.debug) {\n console.log('Upgrading connection to TLS');\n }\n const secureContext = Tls.createSecureContext({\n ca: this.config.ssl.ca,\n cert: this.config.ssl.cert,\n ciphers: this.config.ssl.ciphers,\n key: this.config.ssl.key,\n passphrase: this.config.ssl.passphrase,\n minVersion: this.config.ssl.minVersion,\n maxVersion: this.config.ssl.maxVersion,\n });\n const rejectUnauthorized = this.config.ssl.rejectUnauthorized;\n const verifyIdentity = this.config.ssl.verifyIdentity;\n const servername = this.config.host;\n\n let secureEstablished = false;\n this.stream.removeAllListeners('data');\n const secureSocket = Tls.connect(\n {\n rejectUnauthorized,\n requestCert: rejectUnauthorized,\n checkServerIdentity: verifyIdentity\n ? Tls.checkServerIdentity\n : function () {\n return undefined;\n },\n secureContext,\n isServer: false,\n socket: this.stream,\n servername,\n },\n () => {\n secureEstablished = true;\n if (rejectUnauthorized) {\n if (typeof servername === 'string' && verifyIdentity) {\n const cert = secureSocket.getPeerCertificate(true);\n const serverIdentityCheckError = Tls.checkServerIdentity(\n servername,\n cert\n );\n if (serverIdentityCheckError) {\n onSecure(serverIdentityCheckError);\n return;\n }\n }\n }\n onSecure();\n }\n );\n // error handler for secure socket\n secureSocket.on('error', (err) => {\n if (secureEstablished) {\n this._handleNetworkError(err);\n } else {\n onSecure(err);\n }\n });\n secureSocket.on('data', (data) => {\n this.packetParser.execute(data);\n });\n this.stream = secureSocket;\n }\n\n protocolError(message, code) {\n // Starting with MySQL 8.0.24, if the client closes the connection\n // unexpectedly, the server will send a last ERR Packet, which we can\n // safely ignore.\n // https://dev.mysql.com/worklog/task/?id=12999\n if (this._closing) {\n return;\n }\n\n const err = new Error(message);\n err.fatal = true;\n err.code = code || 'PROTOCOL_ERROR';\n this.emit('error', err);\n }\n\n get fatalError() {\n return this._fatalError;\n }\n\n handlePacket(packet) {\n if (this._paused) {\n this._paused_packets.push(packet);\n return;\n }\n if (this.config.debug) {\n if (packet) {\n console.log(\n ` raw: ${packet.buffer\n .slice(packet.offset, packet.offset + packet.length())\n .toString('hex')}`\n );\n console.trace();\n const commandName = this._command\n ? this._command._commandName\n : '(no command)';\n const stateName = this._command\n ? this._command.stateName()\n : '(no command)';\n console.log(\n `${this._internalId} ${this.connectionId} ==> ${commandName}#${stateName}(${[packet.sequenceId, packet.type(), packet.length()].join(',')})`\n );\n }\n }\n if (!this._command) {\n const marker = packet.peekByte();\n // If it's an Err Packet, we should use it.\n if (marker === 0xff) {\n const error = Packets.Error.fromPacket(packet);\n this.protocolError(error.message, error.code);\n } else {\n // Otherwise, it means it's some other unexpected packet.\n this.protocolError(\n 'Unexpected packet while no commands in the queue',\n 'PROTOCOL_UNEXPECTED_PACKET'\n );\n }\n this.close();\n return;\n }\n if (packet) {\n // Note: when server closes connection due to inactivity, Err packet ER_CLIENT_INTERACTION_TIMEOUT from MySQL 8.0.24, sequenceId will be 0\n if (this.sequenceId !== packet.sequenceId) {\n const err = new Error(\n `Warning: got packets out of order. Expected ${this.sequenceId} but received ${packet.sequenceId}`\n );\n err.expected = this.sequenceId;\n err.received = packet.sequenceId;\n this.emit('warn', err); // REVIEW\n console.error(err.message);\n }\n this._bumpSequenceId(packet.numPackets);\n }\n try {\n if (this._fatalError) {\n // skip remaining packets after client is in the error state\n return;\n }\n const done = this._command.execute(packet, this);\n if (done) {\n this._command = this._commands.shift();\n if (this._command) {\n this.sequenceId = 0;\n this.compressedSequenceId = 0;\n this.handlePacket();\n }\n }\n } catch (err) {\n this._handleFatalError(err);\n this.stream.destroy();\n }\n }\n\n addCommand(cmd) {\n // this.compressedSequenceId = 0;\n // this.sequenceId = 0;\n if (this.config.debug) {\n const commandName = cmd.constructor.name;\n console.log(`Add command: ${commandName}`);\n cmd._commandName = commandName;\n }\n if (!this._command) {\n this._command = cmd;\n this.handlePacket();\n } else {\n this._commands.push(cmd);\n }\n return cmd;\n }\n\n format(sql, values) {\n if (typeof this.config.queryFormat === 'function') {\n return this.config.queryFormat.call(\n this,\n sql,\n values,\n this.config.timezone\n );\n }\n const opts = {\n sql: sql,\n values: values,\n };\n this._resolveNamedPlaceholders(opts);\n return SqlString.format(\n opts.sql,\n opts.values,\n this.config.stringifyObjects,\n this.config.timezone\n );\n }\n\n escape(value) {\n return SqlString.escape(value, false, this.config.timezone);\n }\n\n escapeId(value) {\n return SqlString.escapeId(value, false);\n }\n\n raw(sql) {\n return SqlString.raw(sql);\n }\n\n _resolveNamedPlaceholders(options) {\n let unnamed;\n if (this.config.namedPlaceholders || options.namedPlaceholders) {\n if (Array.isArray(options.values)) {\n // if an array is provided as the values, assume the conversion is not necessary.\n // this allows the usage of unnamed placeholders even if the namedPlaceholders flag is enabled.\n return;\n }\n if (convertNamedPlaceholders === null) {\n convertNamedPlaceholders = require('named-placeholders')();\n }\n unnamed = convertNamedPlaceholders(options.sql, options.values);\n options.sql = unnamed[0];\n options.values = unnamed[1];\n }\n }\n\n query(sql, values, cb) {\n let cmdQuery;\n if (sql.constructor === Commands.Query) {\n cmdQuery = sql;\n } else {\n cmdQuery = BaseConnection.createQuery(sql, values, cb, this.config);\n }\n this._resolveNamedPlaceholders(cmdQuery);\n const rawSql = this.format(\n cmdQuery.sql,\n cmdQuery.values !== undefined ? cmdQuery.values : []\n );\n cmdQuery.sql = rawSql;\n return this.addCommand(cmdQuery);\n }\n\n pause() {\n this._paused = true;\n this.stream.pause();\n }\n\n resume() {\n let packet;\n this._paused = false;\n while ((packet = this._paused_packets.shift())) {\n this.handlePacket(packet);\n // don't resume if packet handler paused connection\n if (this._paused) {\n return;\n }\n }\n this.stream.resume();\n }\n\n // TODO: named placeholders support\n prepare(options, cb) {\n if (typeof options === 'string') {\n options = { sql: options };\n }\n return this.addCommand(new Commands.Prepare(options, cb));\n }\n\n unprepare(sql) {\n let options = {};\n if (typeof sql === 'object') {\n options = sql;\n } else {\n options.sql = sql;\n }\n const key = BaseConnection.statementKey(options);\n const stmt = this._statements.get(key);\n if (stmt) {\n this._statements.delete(key);\n stmt.close();\n }\n return stmt;\n }\n\n execute(sql, values, cb) {\n let options = {\n infileStreamFactory: this.config.infileStreamFactory,\n };\n if (typeof sql === 'object') {\n // execute(options, cb)\n options = {\n ...options,\n ...sql,\n sql: sql.sql,\n values: sql.values,\n };\n if (typeof values === 'function') {\n cb = values;\n } else {\n options.values = options.values || values;\n }\n } else if (typeof values === 'function') {\n // execute(sql, cb)\n cb = values;\n options.sql = sql;\n options.values = undefined;\n } else {\n // execute(sql, values, cb)\n options.sql = sql;\n options.values = values;\n }\n this._resolveNamedPlaceholders(options);\n // check for values containing undefined\n if (options.values) {\n //If namedPlaceholder is not enabled and object is passed as bind parameters\n if (!Array.isArray(options.values)) {\n throw new TypeError(\n 'Bind parameters must be array if namedPlaceholders parameter is not enabled'\n );\n }\n options.values.forEach((val) => {\n //If namedPlaceholder is not enabled and object is passed as bind parameters\n if (!Array.isArray(options.values)) {\n throw new TypeError(\n 'Bind parameters must be array if namedPlaceholders parameter is not enabled'\n );\n }\n if (val === undefined) {\n throw new TypeError(\n 'Bind parameters must not contain undefined. To pass SQL NULL specify JS null'\n );\n }\n if (typeof val === 'function') {\n throw new TypeError(\n 'Bind parameters must not contain function(s). To pass the body of a function as a string call .toString() first'\n );\n }\n });\n }\n const executeCommand = new Commands.Execute(options, cb);\n const prepareCommand = new Commands.Prepare(options, (err, stmt) => {\n if (err) {\n // skip execute command if prepare failed, we have main\n // combined callback here\n executeCommand.start = function () {\n return null;\n };\n if (cb) {\n cb(err);\n } else {\n executeCommand.emit('error', err);\n }\n executeCommand.emit('end');\n return;\n }\n executeCommand.statement = stmt;\n });\n this.addCommand(prepareCommand);\n this.addCommand(executeCommand);\n return executeCommand;\n }\n\n changeUser(options, callback) {\n if (!callback && typeof options === 'function') {\n callback = options;\n options = {};\n }\n const charsetNumber = options.charset\n ? ConnectionConfig.getCharsetNumber(options.charset)\n : this.config.charsetNumber;\n return this.addCommand(\n new Commands.ChangeUser(\n {\n user: options.user || this.config.user,\n // for the purpose of multi-factor authentication, or not, the main\n // password (used for the 1st authentication factor) can also be\n // provided via the \"password1\" option\n password:\n options.password ||\n options.password1 ||\n this.config.password ||\n this.config.password1,\n password2: options.password2 || this.config.password2,\n password3: options.password3 || this.config.password3,\n passwordSha1: options.passwordSha1 || this.config.passwordSha1,\n database: options.database || this.config.database,\n timeout: options.timeout,\n charsetNumber: charsetNumber,\n currentConfig: this.config,\n },\n (err) => {\n if (err) {\n err.fatal = true;\n }\n if (callback) {\n callback(err);\n }\n }\n )\n );\n }\n\n // transaction helpers\n beginTransaction(cb) {\n return this.query('START TRANSACTION', cb);\n }\n\n commit(cb) {\n return this.query('COMMIT', cb);\n }\n\n rollback(cb) {\n return this.query('ROLLBACK', cb);\n }\n\n ping(cb) {\n return this.addCommand(new Commands.Ping(cb));\n }\n\n _registerSlave(opts, cb) {\n return this.addCommand(new Commands.RegisterSlave(opts, cb));\n }\n\n _binlogDump(opts, cb) {\n return this.addCommand(new Commands.BinlogDump(opts, cb));\n }\n\n // currently just alias to close\n destroy() {\n this.close();\n }\n\n close() {\n if (this.connectTimeout) {\n Timers.clearTimeout(this.connectTimeout);\n this.connectTimeout = null;\n }\n this._closing = true;\n this.stream.end();\n this.addCommand = this._addCommandClosedState;\n }\n\n createBinlogStream(opts) {\n // TODO: create proper stream class\n // TODO: use through2\n let test = 1;\n const stream = new Readable({ objectMode: true });\n stream._read = function () {\n return {\n data: test++,\n };\n };\n this._registerSlave(opts, () => {\n const dumpCmd = this._binlogDump(opts);\n dumpCmd.on('event', (ev) => {\n stream.push(ev);\n });\n dumpCmd.on('eof', () => {\n stream.push(null);\n // if non-blocking, then close stream to prevent errors\n if (opts.flags && opts.flags & 0x01) {\n this.close();\n }\n });\n // TODO: pipe errors as well\n });\n return stream;\n }\n\n connect(cb) {\n if (!cb) {\n return;\n }\n if (this._fatalError || this._protocolError) {\n return cb(this._fatalError || this._protocolError);\n }\n if (this._handshakePacket) {\n return cb(null, this);\n }\n let connectCalled = 0;\n function callbackOnce(isErrorHandler) {\n return function (param) {\n if (!connectCalled) {\n if (isErrorHandler) {\n cb(param);\n } else {\n cb(null, param);\n }\n }\n connectCalled = 1;\n };\n }\n this.once('error', callbackOnce(true));\n this.once('connect', callbackOnce(false));\n }\n\n // ===================================\n // outgoing server connection methods\n // ===================================\n writeColumns(columns) {\n this.writePacket(Packets.ResultSetHeader.toPacket(columns.length));\n columns.forEach((column) => {\n this.writePacket(\n Packets.ColumnDefinition.toPacket(column, this.serverConfig.encoding)\n );\n });\n this.writeEof();\n }\n\n // row is array of columns, not hash\n writeTextRow(column) {\n this.writePacket(\n Packets.TextRow.toPacket(column, this.serverConfig.encoding)\n );\n }\n\n writeBinaryRow(column) {\n this.writePacket(\n Packets.BinaryRow.toPacket(column, this.serverConfig.encoding)\n );\n }\n\n writeTextResult(rows, columns, binary = false) {\n this.writeColumns(columns);\n rows.forEach((row) => {\n const arrayRow = new Array(columns.length);\n columns.forEach((column) => {\n arrayRow.push(row[column.name]);\n });\n if (binary) {\n this.writeBinaryRow(arrayRow);\n } else this.writeTextRow(arrayRow);\n });\n this.writeEof();\n }\n\n writeEof(warnings, statusFlags) {\n this.writePacket(Packets.EOF.toPacket(warnings, statusFlags));\n }\n\n writeOk(args) {\n if (!args) {\n args = { affectedRows: 0 };\n }\n this.writePacket(Packets.OK.toPacket(args, this.serverConfig.encoding));\n }\n\n writeError(args) {\n // if we want to send error before initial hello was sent, use default encoding\n const encoding = this.serverConfig ? this.serverConfig.encoding : 'cesu8';\n this.writePacket(Packets.Error.toPacket(args, encoding));\n }\n\n serverHandshake(args) {\n this.serverConfig = args;\n this.serverConfig.encoding =\n CharsetToEncoding[this.serverConfig.characterSet];\n return this.addCommand(new Commands.ServerHandshake(args));\n }\n\n // ===============================================================\n end(callback) {\n if (this.config.isServer) {\n this._closing = true;\n const quitCmd = new EventEmitter();\n setImmediate(() => {\n this.stream.end();\n quitCmd.emit('end');\n });\n return quitCmd;\n }\n // trigger error if more commands enqueued after end command\n const quitCmd = this.addCommand(new Commands.Quit(callback));\n this.addCommand = this._addCommandClosedState;\n return quitCmd;\n }\n\n static createQuery(sql, values, cb, config) {\n let options = {\n rowsAsArray: config.rowsAsArray,\n infileStreamFactory: config.infileStreamFactory,\n };\n if (typeof sql === 'object') {\n // query(options, cb)\n options = {\n ...options,\n ...sql,\n sql: sql.sql,\n values: sql.values,\n };\n if (typeof values === 'function') {\n cb = values;\n } else if (values !== undefined) {\n options.values = values;\n }\n } else if (typeof values === 'function') {\n // query(sql, cb)\n cb = values;\n options.sql = sql;\n options.values = undefined;\n } else {\n // query(sql, values, cb)\n options.sql = sql;\n options.values = values;\n }\n return new Commands.Query(options, cb);\n }\n\n static statementKey(options) {\n return `${typeof options.nestTables}/${options.nestTables}/${options.rowsAsArray}${options.sql}`;\n }\n}\n\nmodule.exports = BaseConnection;\n",
|
|
136
|
+
"'use strict';\n\nconst BaseConnection = require('./connection.js');\n\nclass BasePoolConnection extends BaseConnection {\n constructor(pool, options) {\n super(options);\n this._pool = pool;\n // The last active time of this connection\n this.lastActiveTime = Date.now();\n // When a fatal error occurs the connection's protocol ends, which will cause\n // the connection to end as well, thus we only need to watch for the end event\n // and we will be notified of disconnects.\n // REVIEW: Moved to `once`\n this.once('end', () => {\n this._removeFromPool();\n });\n this.once('error', () => {\n this._removeFromPool();\n });\n }\n\n release() {\n if (!this._pool || this._pool._closed) {\n return;\n }\n // update last active time\n this.lastActiveTime = Date.now();\n this._pool.releaseConnection(this);\n }\n\n end() {\n if (this.config.gracefulEnd) {\n this._removeFromPool();\n super.end();\n\n return;\n }\n\n const err = new Error(\n 'Calling conn.end() to release a pooled connection is ' +\n 'deprecated. In next version calling conn.end() will be ' +\n 'restored to default conn.end() behavior. Use ' +\n 'conn.release() instead.'\n );\n this.emit('warn', err);\n console.warn(err.message);\n this.release();\n }\n\n destroy() {\n this._removeFromPool();\n super.destroy();\n }\n\n _removeFromPool() {\n if (!this._pool || this._pool._closed) {\n return;\n }\n const pool = this._pool;\n this._pool = null;\n pool._removeConnection(this);\n }\n}\n\nBasePoolConnection.statementKey = BaseConnection.statementKey;\nmodule.exports = BasePoolConnection;\n\n// TODO: Remove this when we are removing PoolConnection#end\nBasePoolConnection.prototype._realEnd = BaseConnection.prototype.end;\n",
|
|
137
|
+
"'use strict';\n\nfunction makeDoneCb(resolve, reject, localErr) {\n return function (err, rows, fields) {\n if (err) {\n localErr.message = err.message;\n localErr.code = err.code;\n localErr.errno = err.errno;\n localErr.sql = err.sql;\n localErr.sqlState = err.sqlState;\n localErr.sqlMessage = err.sqlMessage;\n reject(localErr);\n } else {\n resolve([rows, fields]);\n }\n };\n}\n\nmodule.exports = makeDoneCb;\n",
|
|
138
|
+
"'use strict';\n\nconst makeDoneCb = require('./make_done_cb.js');\n\nclass PromisePreparedStatementInfo {\n constructor(statement, promiseImpl) {\n this.statement = statement;\n this.Promise = promiseImpl;\n }\n\n execute(parameters) {\n const s = this.statement;\n const localErr = new Error();\n return new this.Promise((resolve, reject) => {\n const done = makeDoneCb(resolve, reject, localErr);\n if (parameters) {\n s.execute(parameters, done);\n } else {\n s.execute(done);\n }\n });\n }\n\n close() {\n return new this.Promise((resolve) => {\n this.statement.close();\n resolve();\n });\n }\n}\n\nmodule.exports = PromisePreparedStatementInfo;\n",
|
|
139
|
+
"'use strict';\n\nfunction inheritEvents(source, target, events) {\n const listeners = {};\n target\n .on('newListener', (eventName) => {\n if (events.indexOf(eventName) >= 0 && !target.listenerCount(eventName)) {\n source.on(\n eventName,\n (listeners[eventName] = function () {\n const args = [].slice.call(arguments);\n args.unshift(eventName);\n\n target.emit.apply(target, args);\n })\n );\n }\n })\n .on('removeListener', (eventName) => {\n if (events.indexOf(eventName) >= 0 && !target.listenerCount(eventName)) {\n source.removeListener(eventName, listeners[eventName]);\n delete listeners[eventName];\n }\n });\n}\n\nmodule.exports = inheritEvents;\n",
|
|
140
|
+
"'use strict';\n\nconst EventEmitter = require('events').EventEmitter;\nconst PromisePreparedStatementInfo = require('./prepared_statement_info.js');\nconst makeDoneCb = require('./make_done_cb.js');\nconst inheritEvents = require('./inherit_events.js');\nconst BaseConnection = require('../base/connection.js');\n\nclass PromiseConnection extends EventEmitter {\n constructor(connection, promiseImpl) {\n super();\n this.connection = connection;\n this.Promise = promiseImpl || Promise;\n inheritEvents(connection, this, [\n 'error',\n 'drain',\n 'connect',\n 'end',\n 'enqueue',\n ]);\n }\n\n release() {\n this.connection.release();\n }\n\n query(query, params) {\n const c = this.connection;\n const localErr = new Error();\n if (typeof params === 'function') {\n throw new Error(\n 'Callback function is not available with promise clients.'\n );\n }\n return new this.Promise((resolve, reject) => {\n const done = makeDoneCb(resolve, reject, localErr);\n if (params !== undefined) {\n c.query(query, params, done);\n } else {\n c.query(query, done);\n }\n });\n }\n\n execute(query, params) {\n const c = this.connection;\n const localErr = new Error();\n if (typeof params === 'function') {\n throw new Error(\n 'Callback function is not available with promise clients.'\n );\n }\n return new this.Promise((resolve, reject) => {\n const done = makeDoneCb(resolve, reject, localErr);\n if (params !== undefined) {\n c.execute(query, params, done);\n } else {\n c.execute(query, done);\n }\n });\n }\n\n end() {\n return new this.Promise((resolve) => {\n this.connection.end(resolve);\n });\n }\n\n beginTransaction() {\n const c = this.connection;\n const localErr = new Error();\n return new this.Promise((resolve, reject) => {\n const done = makeDoneCb(resolve, reject, localErr);\n c.beginTransaction(done);\n });\n }\n\n commit() {\n const c = this.connection;\n const localErr = new Error();\n return new this.Promise((resolve, reject) => {\n const done = makeDoneCb(resolve, reject, localErr);\n c.commit(done);\n });\n }\n\n rollback() {\n const c = this.connection;\n const localErr = new Error();\n return new this.Promise((resolve, reject) => {\n const done = makeDoneCb(resolve, reject, localErr);\n c.rollback(done);\n });\n }\n\n ping() {\n const c = this.connection;\n const localErr = new Error();\n return new this.Promise((resolve, reject) => {\n c.ping((err) => {\n if (err) {\n localErr.message = err.message;\n localErr.code = err.code;\n localErr.errno = err.errno;\n localErr.sqlState = err.sqlState;\n localErr.sqlMessage = err.sqlMessage;\n reject(localErr);\n } else {\n resolve(true);\n }\n });\n });\n }\n\n connect() {\n const c = this.connection;\n const localErr = new Error();\n return new this.Promise((resolve, reject) => {\n c.connect((err, param) => {\n if (err) {\n localErr.message = err.message;\n localErr.code = err.code;\n localErr.errno = err.errno;\n localErr.sqlState = err.sqlState;\n localErr.sqlMessage = err.sqlMessage;\n reject(localErr);\n } else {\n resolve(param);\n }\n });\n });\n }\n\n prepare(options) {\n const c = this.connection;\n const promiseImpl = this.Promise;\n const localErr = new Error();\n return new this.Promise((resolve, reject) => {\n c.prepare(options, (err, statement) => {\n if (err) {\n localErr.message = err.message;\n localErr.code = err.code;\n localErr.errno = err.errno;\n localErr.sqlState = err.sqlState;\n localErr.sqlMessage = err.sqlMessage;\n reject(localErr);\n } else {\n const wrappedStatement = new PromisePreparedStatementInfo(\n statement,\n promiseImpl\n );\n resolve(wrappedStatement);\n }\n });\n });\n }\n\n changeUser(options) {\n const c = this.connection;\n const localErr = new Error();\n return new this.Promise((resolve, reject) => {\n c.changeUser(options, (err) => {\n if (err) {\n localErr.message = err.message;\n localErr.code = err.code;\n localErr.errno = err.errno;\n localErr.sqlState = err.sqlState;\n localErr.sqlMessage = err.sqlMessage;\n reject(localErr);\n } else {\n resolve();\n }\n });\n });\n }\n\n get config() {\n return this.connection.config;\n }\n\n get threadId() {\n return this.connection.threadId;\n }\n}\n// patching PromiseConnection\n// create facade functions for prototype functions on \"Connection\" that are not yet\n// implemented with PromiseConnection\n\n// proxy synchronous functions only\n(function (functionsToWrap) {\n for (let i = 0; functionsToWrap && i < functionsToWrap.length; i++) {\n const func = functionsToWrap[i];\n\n if (\n typeof BaseConnection.prototype[func] === 'function' &&\n PromiseConnection.prototype[func] === undefined\n ) {\n PromiseConnection.prototype[func] = (function factory(funcName) {\n return function () {\n return BaseConnection.prototype[funcName].apply(\n this.connection,\n arguments\n );\n };\n })(func);\n }\n }\n})([\n // synchronous functions\n 'close',\n 'createBinlogStream',\n 'destroy',\n 'escape',\n 'escapeId',\n 'format',\n 'pause',\n 'pipe',\n 'resume',\n 'unprepare',\n]);\n\nmodule.exports = PromiseConnection;\n",
|
|
141
|
+
"'use strict';\n\nconst PromiseConnection = require('./connection.js');\nconst BasePoolConnection = require('../base/pool_connection.js');\n\nclass PromisePoolConnection extends PromiseConnection {\n constructor(connection, promiseImpl) {\n super(connection, promiseImpl);\n }\n\n destroy() {\n return BasePoolConnection.prototype.destroy.apply(\n this.connection,\n arguments\n );\n }\n}\n\nmodule.exports = PromisePoolConnection;\n",
|
|
142
|
+
"'use strict';\n\nconst BasePoolConnection = require('./base/pool_connection.js');\n\nclass PoolConnection extends BasePoolConnection {\n promise(promiseImpl) {\n const PromisePoolConnection = require('./promise/pool_connection.js');\n return new PromisePoolConnection(this, promiseImpl);\n }\n}\n\nmodule.exports = PoolConnection;\n",
|
|
143
|
+
"'use strict';\n\nconst process = require('process');\nconst SqlString = require('sqlstring');\nconst EventEmitter = require('events').EventEmitter;\nconst PoolConnection = require('../pool_connection.js');\nconst Queue = require('denque');\nconst BaseConnection = require('./connection.js');\n\nfunction spliceConnection(queue, connection) {\n const len = queue.length;\n for (let i = 0; i < len; i++) {\n if (queue.get(i) === connection) {\n queue.removeOne(i);\n break;\n }\n }\n}\n\nclass BasePool extends EventEmitter {\n constructor(options) {\n super();\n this.config = options.config;\n this.config.connectionConfig.pool = this;\n this._allConnections = new Queue();\n this._freeConnections = new Queue();\n this._connectionQueue = new Queue();\n this._closed = false;\n if (this.config.maxIdle < this.config.connectionLimit) {\n // create idle connection timeout automatically release job\n this._removeIdleTimeoutConnections();\n }\n }\n\n getConnection(cb) {\n if (this._closed) {\n return process.nextTick(() => cb(new Error('Pool is closed.')));\n }\n let connection;\n if (this._freeConnections.length > 0) {\n connection = this._freeConnections.pop();\n this.emit('acquire', connection);\n return process.nextTick(() => cb(null, connection));\n }\n if (\n this.config.connectionLimit === 0 ||\n this._allConnections.length < this.config.connectionLimit\n ) {\n connection = new PoolConnection(this, {\n config: this.config.connectionConfig,\n });\n this._allConnections.push(connection);\n return connection.connect((err) => {\n if (this._closed) {\n return cb(new Error('Pool is closed.'));\n }\n if (err) {\n return cb(err);\n }\n this.emit('connection', connection);\n this.emit('acquire', connection);\n return cb(null, connection);\n });\n }\n if (!this.config.waitForConnections) {\n return process.nextTick(() => cb(new Error('No connections available.')));\n }\n if (\n this.config.queueLimit &&\n this._connectionQueue.length >= this.config.queueLimit\n ) {\n return cb(new Error('Queue limit reached.'));\n }\n this.emit('enqueue');\n return this._connectionQueue.push(cb);\n }\n\n releaseConnection(connection) {\n let cb;\n if (!connection._pool) {\n // The connection has been removed from the pool and is no longer good.\n if (this._connectionQueue.length) {\n cb = this._connectionQueue.shift();\n process.nextTick(this.getConnection.bind(this, cb));\n }\n } else if (this._connectionQueue.length) {\n cb = this._connectionQueue.shift();\n process.nextTick(cb.bind(null, null, connection));\n } else {\n this._freeConnections.push(connection);\n this.emit('release', connection);\n }\n }\n\n end(cb) {\n this._closed = true;\n clearTimeout(this._removeIdleTimeoutConnectionsTimer);\n if (typeof cb !== 'function') {\n cb = function (err) {\n if (err) {\n throw err;\n }\n };\n }\n let calledBack = false;\n let closedConnections = 0;\n let connection;\n const endCB = function (err) {\n if (calledBack) {\n return;\n }\n if (err || ++closedConnections >= this._allConnections.length) {\n calledBack = true;\n cb(err);\n return;\n }\n }.bind(this);\n if (this._allConnections.length === 0) {\n endCB();\n return;\n }\n for (let i = 0; i < this._allConnections.length; i++) {\n connection = this._allConnections.get(i);\n connection._realEnd(endCB);\n }\n }\n\n query(sql, values, cb) {\n const cmdQuery = BaseConnection.createQuery(\n sql,\n values,\n cb,\n this.config.connectionConfig\n );\n if (typeof cmdQuery.namedPlaceholders === 'undefined') {\n cmdQuery.namedPlaceholders =\n this.config.connectionConfig.namedPlaceholders;\n }\n this.getConnection((err, conn) => {\n if (err) {\n if (typeof cmdQuery.onResult === 'function') {\n cmdQuery.onResult(err);\n } else {\n cmdQuery.emit('error', err);\n }\n return;\n }\n try {\n conn.query(cmdQuery).once('end', () => {\n conn.release();\n });\n } catch (e) {\n conn.release();\n throw e;\n }\n });\n return cmdQuery;\n }\n\n execute(sql, values, cb) {\n // TODO construct execute command first here and pass it to connection.execute\n // so that polymorphic arguments logic is there in one place\n if (typeof values === 'function') {\n cb = values;\n values = [];\n }\n this.getConnection((err, conn) => {\n if (err) {\n return cb(err);\n }\n try {\n conn.execute(sql, values, cb).once('end', () => {\n conn.release();\n });\n } catch (e) {\n conn.release();\n return cb(e);\n }\n });\n }\n\n _removeConnection(connection) {\n // Remove connection from all connections\n spliceConnection(this._allConnections, connection);\n // Remove connection from free connections\n spliceConnection(this._freeConnections, connection);\n this.releaseConnection(connection);\n }\n\n _removeIdleTimeoutConnections() {\n if (this._removeIdleTimeoutConnectionsTimer) {\n clearTimeout(this._removeIdleTimeoutConnectionsTimer);\n }\n\n this._removeIdleTimeoutConnectionsTimer = setTimeout(() => {\n try {\n while (\n this._freeConnections.length > this.config.maxIdle ||\n (this._freeConnections.length > 0 &&\n Date.now() - this._freeConnections.get(0).lastActiveTime >\n this.config.idleTimeout)\n ) {\n if (this.config.connectionConfig.gracefulEnd) {\n this._freeConnections.get(0).end();\n } else {\n this._freeConnections.get(0).destroy();\n }\n }\n } finally {\n this._removeIdleTimeoutConnections();\n }\n }, 1000);\n }\n\n format(sql, values) {\n return SqlString.format(\n sql,\n values,\n this.config.connectionConfig.stringifyObjects,\n this.config.connectionConfig.timezone\n );\n }\n\n escape(value) {\n return SqlString.escape(\n value,\n this.config.connectionConfig.stringifyObjects,\n this.config.connectionConfig.timezone\n );\n }\n\n escapeId(value) {\n return SqlString.escapeId(value, false);\n }\n}\n\nmodule.exports = BasePool;\n",
|
|
144
|
+
"'use strict';\n\nconst EventEmitter = require('events').EventEmitter;\nconst makeDoneCb = require('./make_done_cb.js');\nconst PromisePoolConnection = require('./pool_connection.js');\nconst inheritEvents = require('./inherit_events.js');\nconst BasePool = require('../base/pool.js');\n\nclass PromisePool extends EventEmitter {\n constructor(pool, thePromise) {\n super();\n this.pool = pool;\n this.Promise = thePromise || Promise;\n inheritEvents(pool, this, ['acquire', 'connection', 'enqueue', 'release']);\n }\n\n getConnection() {\n const corePool = this.pool;\n return new this.Promise((resolve, reject) => {\n corePool.getConnection((err, coreConnection) => {\n if (err) {\n reject(err);\n } else {\n resolve(new PromisePoolConnection(coreConnection, this.Promise));\n }\n });\n });\n }\n\n releaseConnection(connection) {\n if (connection instanceof PromisePoolConnection) connection.release();\n }\n\n query(sql, args) {\n const corePool = this.pool;\n const localErr = new Error();\n if (typeof args === 'function') {\n throw new Error(\n 'Callback function is not available with promise clients.'\n );\n }\n return new this.Promise((resolve, reject) => {\n const done = makeDoneCb(resolve, reject, localErr);\n if (args !== undefined) {\n corePool.query(sql, args, done);\n } else {\n corePool.query(sql, done);\n }\n });\n }\n\n execute(sql, args) {\n const corePool = this.pool;\n const localErr = new Error();\n if (typeof args === 'function') {\n throw new Error(\n 'Callback function is not available with promise clients.'\n );\n }\n return new this.Promise((resolve, reject) => {\n const done = makeDoneCb(resolve, reject, localErr);\n if (args) {\n corePool.execute(sql, args, done);\n } else {\n corePool.execute(sql, done);\n }\n });\n }\n\n end() {\n const corePool = this.pool;\n const localErr = new Error();\n return new this.Promise((resolve, reject) => {\n corePool.end((err) => {\n if (err) {\n localErr.message = err.message;\n localErr.code = err.code;\n localErr.errno = err.errno;\n localErr.sqlState = err.sqlState;\n localErr.sqlMessage = err.sqlMessage;\n reject(localErr);\n } else {\n resolve();\n }\n });\n });\n }\n}\n\n(function (functionsToWrap) {\n for (let i = 0; functionsToWrap && i < functionsToWrap.length; i++) {\n const func = functionsToWrap[i];\n\n if (\n typeof BasePool.prototype[func] === 'function' &&\n PromisePool.prototype[func] === undefined\n ) {\n PromisePool.prototype[func] = (function factory(funcName) {\n return function () {\n return BasePool.prototype[funcName].apply(this.pool, arguments);\n };\n })(func);\n }\n }\n})([\n // synchronous functions\n 'escape',\n 'escapeId',\n 'format',\n]);\n\nmodule.exports = PromisePool;\n",
|
|
145
|
+
"'use strict';\n\nconst BasePool = require('./base/pool.js');\n\nclass Pool extends BasePool {\n promise(promiseImpl) {\n const PromisePool = require('./promise/pool.js');\n return new PromisePool(this, promiseImpl);\n }\n}\n\nmodule.exports = Pool;\n",
|
|
146
|
+
"'use strict';\n\nconst ConnectionConfig = require('./connection_config.js');\n\nclass PoolConfig {\n constructor(options) {\n if (typeof options === 'string') {\n options = ConnectionConfig.parseUrl(options);\n }\n this.connectionConfig = new ConnectionConfig(options);\n this.waitForConnections =\n options.waitForConnections === undefined\n ? true\n : Boolean(options.waitForConnections);\n this.connectionLimit = isNaN(options.connectionLimit)\n ? 10\n : Number(options.connectionLimit);\n this.maxIdle = isNaN(options.maxIdle)\n ? this.connectionLimit\n : Number(options.maxIdle);\n this.idleTimeout = isNaN(options.idleTimeout)\n ? 60000\n : Number(options.idleTimeout);\n this.queueLimit = isNaN(options.queueLimit)\n ? 0\n : Number(options.queueLimit);\n }\n}\n\nmodule.exports = PoolConfig;\n",
|
|
147
|
+
"'use strict';\n\nconst BaseConnection = require('./base/connection.js');\n\nclass Connection extends BaseConnection {\n promise(promiseImpl) {\n const PromiseConnection = require('./promise/connection.js');\n return new PromiseConnection(this, promiseImpl);\n }\n}\n\nmodule.exports = Connection;\n",
|
|
148
|
+
"'use strict';\n\nconst process = require('process');\n\nconst Pool = require('./pool.js');\nconst PoolConfig = require('./pool_config.js');\nconst Connection = require('./connection.js');\nconst EventEmitter = require('events').EventEmitter;\n\n/**\n * Selector\n */\nconst makeSelector = {\n RR() {\n let index = 0;\n return (clusterIds) => clusterIds[index++ % clusterIds.length];\n },\n RANDOM() {\n return (clusterIds) =>\n clusterIds[Math.floor(Math.random() * clusterIds.length)];\n },\n ORDER() {\n return (clusterIds) => clusterIds[0];\n },\n};\n\nconst getMonotonicMilliseconds = function () {\n let ms;\n\n if (typeof process.hrtime === 'function') {\n ms = process.hrtime();\n ms = ms[0] * 1e3 + ms[1] * 1e-6;\n } else {\n ms = process.uptime() * 1000;\n }\n\n return Math.floor(ms);\n};\n\nconst patternRegExp = function (pattern) {\n if (pattern instanceof RegExp) {\n return pattern;\n }\n\n const source = pattern\n .replace(/([.+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1')\n .replace(/\\*/g, '.*');\n\n return new RegExp(`^${source}$`);\n};\n\nclass PoolNamespace {\n constructor(cluster, pattern, selector) {\n this._cluster = cluster;\n this._pattern = pattern;\n this._selector = makeSelector[selector]();\n }\n\n getConnection(cb) {\n const clusterNode = this._getClusterNode();\n if (clusterNode === null) {\n let err = new Error('Pool does Not exist.');\n err.code = 'POOL_NOEXIST';\n\n if (this._cluster._findNodeIds(this._pattern, true).length !== 0) {\n err = new Error('Pool does Not have online node.');\n err.code = 'POOL_NONEONLINE';\n }\n\n return cb(err);\n }\n return this._cluster._getConnection(clusterNode, (err, connection) => {\n if (err) {\n if (\n this._cluster._canRetry &&\n this._cluster._findNodeIds(this._pattern).length !== 0\n ) {\n this._cluster.emit('warn', err);\n return this.getConnection(cb);\n }\n\n return cb(err);\n }\n return cb(null, connection);\n });\n }\n\n /**\n * pool cluster query\n * @param {*} sql\n * @param {*} values\n * @param {*} cb\n * @returns query\n */\n query(sql, values, cb) {\n const query = Connection.createQuery(sql, values, cb, {});\n this.getConnection((err, conn) => {\n if (err) {\n if (typeof query.onResult === 'function') {\n query.onResult(err);\n } else {\n query.emit('error', err);\n }\n return;\n }\n try {\n conn.query(query).once('end', () => {\n conn.release();\n });\n } catch (e) {\n conn.release();\n throw e;\n }\n });\n return query;\n }\n\n /**\n * pool cluster execute\n * @param {*} sql\n * @param {*} values\n * @param {*} cb\n */\n execute(sql, values, cb) {\n if (typeof values === 'function') {\n cb = values;\n values = [];\n }\n this.getConnection((err, conn) => {\n if (err) {\n return cb(err);\n }\n try {\n conn.execute(sql, values, cb).once('end', () => {\n conn.release();\n });\n } catch (e) {\n conn.release();\n throw e;\n }\n });\n }\n\n _getClusterNode() {\n const foundNodeIds = this._cluster._findNodeIds(this._pattern);\n if (foundNodeIds.length === 0) {\n return null;\n }\n const nodeId =\n foundNodeIds.length === 1\n ? foundNodeIds[0]\n : this._selector(foundNodeIds);\n return this._cluster._getNode(nodeId);\n }\n}\n\nclass PoolCluster extends EventEmitter {\n constructor(config) {\n super();\n config = config || {};\n this._canRetry =\n typeof config.canRetry === 'undefined' ? true : config.canRetry;\n this._removeNodeErrorCount = config.removeNodeErrorCount || 5;\n this._restoreNodeTimeout = config.restoreNodeTimeout || 0;\n this._defaultSelector = config.defaultSelector || 'RR';\n this._closed = false;\n this._lastId = 0;\n this._nodes = {};\n this._serviceableNodeIds = [];\n this._namespaces = {};\n this._findCaches = {};\n }\n\n of(pattern, selector) {\n pattern = pattern || '*';\n selector = selector || this._defaultSelector;\n selector = selector.toUpperCase();\n if (!makeSelector[selector] === 'undefined') {\n selector = this._defaultSelector;\n }\n const key = pattern + selector;\n if (typeof this._namespaces[key] === 'undefined') {\n this._namespaces[key] = new PoolNamespace(this, pattern, selector);\n }\n return this._namespaces[key];\n }\n\n add(id, config) {\n if (typeof id === 'object') {\n config = id;\n id = `CLUSTER::${++this._lastId}`;\n }\n if (typeof this._nodes[id] === 'undefined') {\n this._nodes[id] = {\n id: id,\n errorCount: 0,\n pool: new Pool({ config: new PoolConfig(config) }),\n _offlineUntil: 0,\n };\n this._serviceableNodeIds.push(id);\n this._clearFindCaches();\n }\n }\n\n remove(pattern) {\n const foundNodeIds = this._findNodeIds(pattern, true);\n\n for (let i = 0; i < foundNodeIds.length; i++) {\n const node = this._getNode(foundNodeIds[i]);\n\n if (node) {\n this._removeNode(node);\n }\n }\n }\n\n getConnection(pattern, selector, cb) {\n let namespace;\n if (typeof pattern === 'function') {\n cb = pattern;\n namespace = this.of();\n } else {\n if (typeof selector === 'function') {\n cb = selector;\n selector = this._defaultSelector;\n }\n namespace = this.of(pattern, selector);\n }\n namespace.getConnection(cb);\n }\n\n end(callback) {\n const cb =\n callback !== undefined\n ? callback\n : (err) => {\n if (err) {\n throw err;\n }\n };\n if (this._closed) {\n process.nextTick(cb);\n return;\n }\n\n this._closed = true;\n\n let calledBack = false;\n let waitingClose = 0;\n const onEnd = (err) => {\n if (!calledBack && (err || --waitingClose <= 0)) {\n calledBack = true;\n return cb(err);\n }\n };\n\n for (const id in this._nodes) {\n waitingClose++;\n this._nodes[id].pool.end(onEnd);\n }\n\n if (waitingClose === 0) {\n process.nextTick(onEnd);\n }\n }\n\n _findNodeIds(pattern, includeOffline) {\n let currentTime = 0;\n let foundNodeIds = this._findCaches[pattern];\n\n if (foundNodeIds === undefined) {\n const expression = patternRegExp(pattern);\n\n foundNodeIds = this._serviceableNodeIds.filter((id) =>\n id.match(expression)\n );\n }\n\n this._findCaches[pattern] = foundNodeIds;\n\n if (includeOffline) {\n return foundNodeIds;\n }\n\n return foundNodeIds.filter((nodeId) => {\n const node = this._getNode(nodeId);\n\n if (!node._offlineUntil) {\n return true;\n }\n\n if (!currentTime) {\n currentTime = getMonotonicMilliseconds();\n }\n\n return node._offlineUntil <= currentTime;\n });\n }\n\n _getNode(id) {\n return this._nodes[id] || null;\n }\n\n _increaseErrorCount(node) {\n const errorCount = ++node.errorCount;\n\n if (this._removeNodeErrorCount > errorCount) {\n return;\n }\n\n if (this._restoreNodeTimeout > 0) {\n node._offlineUntil =\n getMonotonicMilliseconds() + this._restoreNodeTimeout;\n this.emit('offline', node.id);\n return;\n }\n\n this._removeNode(node);\n this.emit('remove', node.id);\n }\n\n _decreaseErrorCount(node) {\n let errorCount = node.errorCount;\n\n if (errorCount > this._removeNodeErrorCount) {\n errorCount = this._removeNodeErrorCount;\n }\n\n if (errorCount < 1) {\n errorCount = 1;\n }\n\n node.errorCount = errorCount - 1;\n\n if (node._offlineUntil) {\n node._offlineUntil = 0;\n this.emit('online', node.id);\n }\n }\n\n _getConnection(node, cb) {\n node.pool.getConnection((err, connection) => {\n if (err) {\n this._increaseErrorCount(node);\n return cb(err);\n }\n this._decreaseErrorCount(node);\n\n connection._clusterId = node.id;\n return cb(null, connection);\n });\n }\n\n _removeNode(node) {\n const index = this._serviceableNodeIds.indexOf(node.id);\n if (index !== -1) {\n this._serviceableNodeIds.splice(index, 1);\n delete this._nodes[node.id];\n this._clearFindCaches();\n node.pool.end();\n }\n }\n\n _clearFindCaches() {\n this._findCaches = {};\n }\n}\n\nmodule.exports = PoolCluster;\n",
|
|
149
|
+
"'use strict';\n\nconst Connection = require('./connection.js');\nconst ConnectionConfig = require('./connection_config.js');\n\nfunction createConnection(opts) {\n return new Connection({ config: new ConnectionConfig(opts) });\n}\n\nmodule.exports = createConnection;\n",
|
|
150
|
+
"'use strict';\n\nconst Pool = require('./pool.js');\nconst PoolConfig = require('./pool_config.js');\n\nfunction createPool(config) {\n return new Pool({ config: new PoolConfig(config) });\n}\n\nmodule.exports = createPool;\n",
|
|
151
|
+
"'use strict';\n\nconst PoolCluster = require('./pool_cluster.js');\n\nfunction createPoolCluster(config) {\n return new PoolCluster(config);\n}\n\nmodule.exports = createPoolCluster;\n",
|
|
152
|
+
"'use strict';\n\nconst PromisePoolConnection = require('./pool_connection');\nconst makeDoneCb = require('./make_done_cb');\n\nclass PromisePoolNamespace {\n constructor(poolNamespace, thePromise) {\n this.poolNamespace = poolNamespace;\n this.Promise = thePromise || Promise;\n }\n\n getConnection() {\n const corePoolNamespace = this.poolNamespace;\n return new this.Promise((resolve, reject) => {\n corePoolNamespace.getConnection((err, coreConnection) => {\n if (err) {\n reject(err);\n } else {\n resolve(new PromisePoolConnection(coreConnection, this.Promise));\n }\n });\n });\n }\n\n query(sql, values) {\n const corePoolNamespace = this.poolNamespace;\n const localErr = new Error();\n if (typeof values === 'function') {\n throw new Error(\n 'Callback function is not available with promise clients.'\n );\n }\n return new this.Promise((resolve, reject) => {\n const done = makeDoneCb(resolve, reject, localErr);\n corePoolNamespace.query(sql, values, done);\n });\n }\n\n execute(sql, values) {\n const corePoolNamespace = this.poolNamespace;\n const localErr = new Error();\n if (typeof values === 'function') {\n throw new Error(\n 'Callback function is not available with promise clients.'\n );\n }\n return new this.Promise((resolve, reject) => {\n const done = makeDoneCb(resolve, reject, localErr);\n corePoolNamespace.execute(sql, values, done);\n });\n }\n}\n\nmodule.exports = PromisePoolNamespace;\n",
|
|
153
|
+
"'use strict';\n\nconst SqlString = require('sqlstring');\nconst EventEmitter = require('events').EventEmitter;\nconst parserCache = require('./lib/parsers/parser_cache.js');\nconst PoolCluster = require('./lib/pool_cluster.js');\nconst createConnection = require('./lib/create_connection.js');\nconst createPool = require('./lib/create_pool.js');\nconst createPoolCluster = require('./lib/create_pool_cluster.js');\nconst PromiseConnection = require('./lib/promise/connection.js');\nconst PromisePool = require('./lib/promise/pool.js');\nconst makeDoneCb = require('./lib/promise/make_done_cb.js');\nconst PromisePoolConnection = require('./lib/promise/pool_connection.js');\nconst inheritEvents = require('./lib/promise/inherit_events.js');\nconst PromisePoolNamespace = require('./lib/promise/pool_cluster');\n\nfunction createConnectionPromise(opts) {\n const coreConnection = createConnection(opts);\n const createConnectionErr = new Error();\n const thePromise = opts.Promise || Promise;\n if (!thePromise) {\n throw new Error(\n 'no Promise implementation available.' +\n 'Use promise-enabled node version or pass userland Promise' +\n \" implementation as parameter, for example: { Promise: require('bluebird') }\"\n );\n }\n return new thePromise((resolve, reject) => {\n coreConnection.once('connect', () => {\n resolve(new PromiseConnection(coreConnection, thePromise));\n });\n coreConnection.once('error', (err) => {\n createConnectionErr.message = err.message;\n createConnectionErr.code = err.code;\n createConnectionErr.errno = err.errno;\n createConnectionErr.sqlState = err.sqlState;\n reject(createConnectionErr);\n });\n });\n}\n\n// note: the callback of \"changeUser\" is not called on success\n// hence there is no possibility to call \"resolve\"\n\nfunction createPromisePool(opts) {\n const corePool = createPool(opts);\n const thePromise = opts.Promise || Promise;\n if (!thePromise) {\n throw new Error(\n 'no Promise implementation available.' +\n 'Use promise-enabled node version or pass userland Promise' +\n \" implementation as parameter, for example: { Promise: require('bluebird') }\"\n );\n }\n\n return new PromisePool(corePool, thePromise);\n}\n\nclass PromisePoolCluster extends EventEmitter {\n constructor(poolCluster, thePromise) {\n super();\n this.poolCluster = poolCluster;\n this.Promise = thePromise || Promise;\n inheritEvents(poolCluster, this, ['warn', 'remove', 'online', 'offline']);\n }\n\n getConnection(pattern, selector) {\n const corePoolCluster = this.poolCluster;\n return new this.Promise((resolve, reject) => {\n corePoolCluster.getConnection(\n pattern,\n selector,\n (err, coreConnection) => {\n if (err) {\n reject(err);\n } else {\n resolve(new PromisePoolConnection(coreConnection, this.Promise));\n }\n }\n );\n });\n }\n\n query(sql, args) {\n const corePoolCluster = this.poolCluster;\n const localErr = new Error();\n if (typeof args === 'function') {\n throw new Error(\n 'Callback function is not available with promise clients.'\n );\n }\n return new this.Promise((resolve, reject) => {\n const done = makeDoneCb(resolve, reject, localErr);\n corePoolCluster.query(sql, args, done);\n });\n }\n\n execute(sql, args) {\n const corePoolCluster = this.poolCluster;\n const localErr = new Error();\n if (typeof args === 'function') {\n throw new Error(\n 'Callback function is not available with promise clients.'\n );\n }\n return new this.Promise((resolve, reject) => {\n const done = makeDoneCb(resolve, reject, localErr);\n corePoolCluster.execute(sql, args, done);\n });\n }\n\n of(pattern, selector) {\n return new PromisePoolNamespace(\n this.poolCluster.of(pattern, selector),\n this.Promise\n );\n }\n\n end() {\n const corePoolCluster = this.poolCluster;\n const localErr = new Error();\n return new this.Promise((resolve, reject) => {\n corePoolCluster.end((err) => {\n if (err) {\n localErr.message = err.message;\n localErr.code = err.code;\n localErr.errno = err.errno;\n localErr.sqlState = err.sqlState;\n localErr.sqlMessage = err.sqlMessage;\n reject(localErr);\n } else {\n resolve();\n }\n });\n });\n }\n}\n\n/**\n * proxy poolCluster synchronous functions\n */\n(function (functionsToWrap) {\n for (let i = 0; functionsToWrap && i < functionsToWrap.length; i++) {\n const func = functionsToWrap[i];\n\n if (\n typeof PoolCluster.prototype[func] === 'function' &&\n PromisePoolCluster.prototype[func] === undefined\n ) {\n PromisePoolCluster.prototype[func] = (function factory(funcName) {\n return function () {\n return PoolCluster.prototype[funcName].apply(\n this.poolCluster,\n arguments\n );\n };\n })(func);\n }\n }\n})(['add', 'remove']);\n\nfunction createPromisePoolCluster(opts) {\n const corePoolCluster = createPoolCluster(opts);\n const thePromise = (opts && opts.Promise) || Promise;\n if (!thePromise) {\n throw new Error(\n 'no Promise implementation available.' +\n 'Use promise-enabled node version or pass userland Promise' +\n \" implementation as parameter, for example: { Promise: require('bluebird') }\"\n );\n }\n return new PromisePoolCluster(corePoolCluster, thePromise);\n}\n\nexports.createConnection = createConnectionPromise;\nexports.createPool = createPromisePool;\nexports.createPoolCluster = createPromisePoolCluster;\nexports.escape = SqlString.escape;\nexports.escapeId = SqlString.escapeId;\nexports.format = SqlString.format;\nexports.raw = SqlString.raw;\nexports.PromisePool = PromisePool;\nexports.PromiseConnection = PromiseConnection;\nexports.PromisePoolConnection = PromisePoolConnection;\n\nexports.__defineGetter__('Types', () => require('./lib/constants/types.js'));\n\nexports.__defineGetter__('Charsets', () =>\n require('./lib/constants/charsets.js')\n);\n\nexports.__defineGetter__('CharsetToEncoding', () =>\n require('./lib/constants/charset_encodings.js')\n);\n\nexports.setMaxParserCache = function (max) {\n parserCache.setMaxCache(max);\n};\n\nexports.clearParserCache = function () {\n parserCache.clearCache();\n};\n",
|
|
154
|
+
"/**\n * @file types.ts\n * @description Contains all shared type definitions and enums for the Stabilize ORM.\n * @author ElectronSz\n */\n\nexport enum DBType {\n Postgres = \"postgres\",\n MySQL = \"mysql\",\n SQLite = \"sqlite\",\n}\n\nexport enum LogLevel {\n Debug,\n Info,\n Warn,\n Error,\n}\n\nexport enum RelationType {\n OneToOne,\n OneToMany,\n ManyToOne,\n ManyToMany,\n}\n\n/**\n * An enumeration of abstract data types that are mapped to database-specific types.\n * This allows models to be defined in a database-agnostic way.\n */\nexport enum DataTypes {\n STRING, // Maps to VARCHAR or TEXT\n TEXT, // Maps to TEXT\n INTEGER, // Maps to INTEGER or INT\n BIGINT, // Maps to BIGINT\n FLOAT, // Maps to REAL or FLOAT\n DOUBLE, // Maps to DOUBLE PRECISION\n DECIMAL, // Maps to DECIMAL or NUMERIC\n BOOLEAN, // Maps to BOOLEAN or TINYINT/INTEGER\n DATE, // Maps to DATE or TEXT\n DATETIME, // Maps to TIMESTAMP, DATETIME, or TEXT\n JSON, // Maps to JSON, JSONB, or TEXT\n UUID, // Maps to UUID or VARCHAR(36)\n BLOB, // Maps to BYTEA or BLOB\n}\n\nexport interface DBConfig {\n type: DBType;\n connectionString: string;\n retryAttempts?: number;\n retryDelay?: number;\n maxJitter?: number;\n}\n\nexport interface CacheConfig {\n enabled: boolean;\n ttl: number;\n redisUrl?: string;\n cachePrefix?: string;\n strategy?: \"cache-aside\" | \"write-through\";\n}\n\n/**\n * Configuration for the logger.\n */\nexport interface LoggerConfig {\n level?: LogLevel;\n filePath?: string;\n maxFileSize?: number;\n maxFiles?: number;\n}\n\nexport interface PoolMetrics {\n activeConnections: number;\n idleConnections: number;\n totalConnections: number;\n}\n\nexport interface QueryHint {\n type: string;\n value: string;\n}\n\nexport interface CacheStats {\n hits: number;\n misses: number;\n keys: number;\n}\n\nexport interface Migration {\n name: string;\n up: string[];\n down: string[];\n}\n\nexport class StabilizeError extends Error {\n constructor(\n message: string,\n public code: string,\n public originalError?: Error,\n ) {\n super(message);\n this.name = \"StabilizeError\";\n }\n}\n\nexport interface DefaultExpression {\n sql: string;\n}\n\nexport function sqlDefault(sql: string): DefaultExpression {\n return { sql };\n}\n\nexport type TransactionIsolationLevel =\n | \"READ UNCOMMITTED\"\n | \"READ COMMITTED\"\n | \"REPEATABLE READ\"\n | \"SERIALIZABLE\";\n\nexport interface QueryLogEntry {\n query: string;\n params: any[];\n durationMs: number;\n timestamp: Date;\n source: string;\n}\n\nexport type StabilizeEvent =\n | \"query\"\n | \"error\"\n | \"migration:start\"\n | \"migration:complete\"\n | \"transaction:start\"\n | \"transaction:complete\"\n | \"transaction:error\"\n | \"connection:open\"\n | \"connection:close\";\n\nexport type StabilizeEventHandler = (...args: any[]) => void;\n\nexport class StabilizeEmitter {\n private listeners: Map<StabilizeEvent, StabilizeEventHandler[]> = new Map();\n\n on(event: StabilizeEvent, handler: StabilizeEventHandler): void {\n if (!this.listeners.has(event)) {\n this.listeners.set(event, []);\n }\n this.listeners.get(event)!.push(handler);\n }\n\n off(event: StabilizeEvent, handler: StabilizeEventHandler): void {\n const handlers = this.listeners.get(event);\n if (handlers) {\n const idx = handlers.indexOf(handler);\n if (idx !== -1) handlers.splice(idx, 1);\n }\n }\n\n emit(event: StabilizeEvent, ...args: any[]): void {\n const handlers = this.listeners.get(event);\n if (handlers) {\n for (const handler of handlers) {\n try {\n handler(...args);\n } catch {}\n }\n }\n }\n}\n\nexport function generateUUID(): string {\n return crypto.randomUUID();\n}\n",
|
|
155
|
+
"/**\n * @file logger.ts\n * @description Provides a flexible logger that can write to the console and/or rotating log files.\n * @author ElectronSz\n */\n\nimport * as fs from \"fs/promises\";\nimport {\n LogLevel,\n type LoggerConfig,\n type PoolMetrics,\n StabilizeError,\n} from \"./types\";\n\n/**\n * Defines the interface for a logger that can be used within the ORM.\n */\nexport interface Logger {\n logQuery(query: string, params: any[], executionTime?: number): void;\n logError(error: Error): void;\n logMetrics(metrics: PoolMetrics): void;\n logInfo(message: string): void;\n logWarn(message: string): void;\n logDebug(message: string): void;\n}\n\n/**\n * A logger implementation that writes to the console and can optionally write to rotating files.\n */\nexport class StabilizeLogger implements Logger {\n private readonly level: LogLevel;\n private readonly filePath: string | null;\n private readonly maxFileSize: number;\n private readonly maxFiles: number;\n\n constructor(config: LoggerConfig = {}) {\n this.level = config.level ?? LogLevel.Info;\n this.filePath = config.filePath || null;\n this.maxFileSize = config.maxFileSize || 1 * 1024 * 1024; // 1MB\n this.maxFiles = config.maxFiles || 3;\n }\n\n /** @internal Checks if a message at a given level should be logged. */\n private shouldLog(messageLevel: LogLevel): boolean {\n return messageLevel <= this.level;\n }\n\n /** @internal Rotates log files if the current one exceeds the max size. */\n private async rotateLogFile(): Promise<void> {\n if (!this.filePath) return;\n\n try {\n const stats = await fs.stat(this.filePath).catch(() => null);\n if (!stats || stats.size < this.maxFileSize) {\n return; // No rotation needed\n }\n\n const oldestLog = `${this.filePath}.${this.maxFiles}`;\n await fs.unlink(oldestLog).catch(() => {});\n\n for (let i = this.maxFiles - 1; i >= 1; i--) {\n const source = `${this.filePath}.${i}`;\n const destination = `${this.filePath}.${i + 1}`;\n if (await fs.stat(source).catch(() => null)) {\n await fs.rename(source, destination);\n }\n }\n await fs.rename(this.filePath, `${this.filePath}.1`);\n } catch (error) {\n // Use StabilizeError for internal logger failures\n const logError = new StabilizeError(\"Log rotation failed\", \"LOG_ROTATION_ERROR\", error as Error);\n console.error(`[LOGGER_ERROR] ${logError.message}\\n${logError.stack}`);\n }\n }\n\n /** @internal Writes a formatted message to the console and/or a file. */\n private async log(level: LogLevel, message: string): Promise<void> {\n if (!this.shouldLog(level)) return;\n\n const levelStr = LogLevel[level].toUpperCase();\n const logEntry = `[${levelStr}] ${new Date().toISOString()} - ${message}`;\n\n switch (level) {\n case LogLevel.Error: console.error(logEntry); break;\n case LogLevel.Warn: console.warn(logEntry); break;\n default: console.log(logEntry); break;\n }\n\n if (this.filePath) {\n try {\n await this.rotateLogFile();\n await fs.appendFile(this.filePath, logEntry + \"\\n\");\n } catch (error) {\n // Use StabilizeError for internal logger failures\n const logError = new StabilizeError(\"Failed to write to log file\", \"LOG_WRITE_ERROR\", error as Error);\n console.error(`[LOGGER_ERROR] ${logError.message}\\n${logError.stack}`);\n }\n }\n }\n\n public logQuery(query: string, params: any[], executionTime?: number): void {\n const time = executionTime ? `${executionTime.toFixed(2)}ms` : \"N/A\";\n this.log(LogLevel.Debug, `Query: ${query} | Params: ${JSON.stringify(params)} | Time: ${time}`);\n }\n\n public logError(error: Error): void {\n const message = `${error.message}${error.stack ? `\\n${error.stack}` : \"\"}`;\n this.log(LogLevel.Error, message);\n }\n\n public logMetrics(metrics: PoolMetrics): void {\n const message = `Pool Metrics: Active=${metrics.activeConnections}, Idle=${metrics.idleConnections}, Total=${metrics.totalConnections}`;\n this.log(LogLevel.Info, message);\n }\n\n public logInfo(message: string): void {\n this.log(LogLevel.Info, message);\n }\n \n public logWarn(message: string): void {\n this.log(LogLevel.Warn, message);\n }\n\n public logDebug(message: string): void {\n this.log(LogLevel.Debug, message);\n }\n}",
|
|
156
|
+
"/**\n * @file client.ts\n * @description Provides a unified database client for interacting with PostgreSQL, MySQL, and SQLite.\n * @author ElectronSz\n */\n\nimport { Database, Statement } from \"bun:sqlite\";\nimport { Pool, type PoolClient } from \"pg\";\nimport mysql from \"mysql2/promise\";\nimport { type DBConfig, StabilizeError, DBType } from \"./types\";\nimport { type Logger, StabilizeLogger } from \"./logger\";\n\n/**\n * Checks if the DB configuration is for SQLite.\n * @param config The database configuration object.\n * @returns True if the configuration is for SQLite, false otherwise.\n */\nfunction isSQLiteConfig(config: DBConfig): boolean {\n return config.type === DBType.SQLite;\n}\n\n/**\n * Checks if the DB configuration is for MySQL.\n * @param config The database configuration object.\n * @returns True if the configuration is for MySQL, false otherwise.\n */\nfunction isMySQLConfig(config: DBConfig): boolean {\n return config.type === DBType.MySQL;\n}\n\n/**\n * Checks if the given client is a MySQL pool.\n * @param client The database client.\n * @returns True if the client is a MySQL pool, false otherwise.\n */\nfunction isMySQLPool(client: any): client is mysql.Pool {\n return typeof client.getConnection === \"function\";\n}\n\n/**\n * Provides a unified database client for interacting with PostgreSQL, MySQL, and SQLite.\n */\nexport class DBClient {\n private client!:\n | Database\n | Pool\n | mysql.Pool\n | PoolClient\n | mysql.PoolConnection;\n private logger: Logger;\n public readonly config: DBConfig;\n private retryAttempts: number;\n private retryDelay: number;\n private maxJitter: number;\n\n private preparedStatements: Map<string, Statement> = new Map();\n public isTransactionClient: boolean = false;\n\n /**\n * Constructs a new DBClient instance.\n * @param config The database configuration object.\n * @param logger Optional logger instance. Uses StabilizeLogger if not provided.\n * @param existingClient Optional existing transaction client.\n */\n constructor(\n config: DBConfig,\n logger: Logger = new StabilizeLogger(),\n existingClient: PoolClient | mysql.PoolConnection | null = null,\n ) {\n this.config = config;\n this.logger = logger;\n this.retryAttempts = config.retryAttempts || 3;\n this.retryDelay = config.retryDelay || 1000;\n this.maxJitter = config.maxJitter || 100;\n\n if (existingClient) {\n this.client = existingClient;\n this.isTransactionClient = true;\n } else {\n this.initializeClient(config);\n }\n }\n\n /**\n * Initializes the database client based on the configuration.\n * @param config The database configuration object.\n */\n private initializeClient(config: DBConfig) {\n if (isSQLiteConfig(config)) {\n this.client = new Database(config.connectionString, { create: true });\n this.logger.logDebug(`Initialized Bun SQLite client.`);\n } else if (isMySQLConfig(config)) {\n this.client = mysql.createPool(config.connectionString);\n this.logger.logDebug(`Initialized MySQL Pool client.`);\n } else if (config.type === DBType.Postgres) {\n this.client = new Pool({ connectionString: config.connectionString! });\n this.logger.logDebug(`Initialized Postgres Pool client.`);\n }\n }\n\n /**\n * Returns a random jitter value for retry logic.\n * @returns A random number up to maxJitter.\n */\n private getJitter = () => Math.random() * this.maxJitter;\n\n /**\n * Executes a SQL query with retries and returns the resulting rows.\n * @param query The SQL query string.\n * @param params Query parameters.\n * @returns Array of resulting rows.\n * @throws StabilizeError if all retry attempts fail.\n */\n async query<T>(query: string, params: any[] = []): Promise<T[]> {\n const start = Date.now();\n\n for (let attempt = 1; attempt <= this.retryAttempts; attempt++) {\n try {\n let result: any;\n\n if (this.client instanceof Database) {\n let stmt = this.preparedStatements.get(query);\n if (!stmt) {\n stmt = this.client.prepare(query);\n this.preparedStatements.set(query, stmt);\n }\n result = stmt.all(...params);\n } else if (this.config.type === DBType.MySQL) {\n const [rows] = await (this.client as mysql.Pool).query(query, params);\n result = rows;\n } else if (this.config.type === DBType.Postgres) {\n let paramIndex = 0;\n const pgQuery = query.replace(/\\?/g, () => `$${++paramIndex}`);\n const pgResult = await (this.client as Pool).query(pgQuery, params);\n result = Array.isArray(pgResult.rows) ? pgResult.rows : [];\n } else {\n throw new StabilizeError(\n \"Unknown database client type\",\n \"QUERY_ERROR\",\n );\n }\n\n const executionTime = Date.now() - start;\n this.logger.logQuery(query, params, executionTime);\n return Array.isArray(result) ? (result as T[]) : [];\n } catch (error) {\n this.logger.logError(error as Error);\n if (attempt === this.retryAttempts) {\n throw new StabilizeError(\n `Query failed after ${this.retryAttempts} attempts: ${(error as Error).message}`,\n \"QUERY_ERROR\",\n );\n }\n await new Promise((res) =>\n setTimeout(\n res,\n this.retryDelay * Math.pow(2, attempt - 1) + this.getJitter(),\n ),\n );\n }\n }\n throw new StabilizeError(\n \"Query failed: maximum retries reached without success\",\n \"QUERY_ERROR\",\n );\n }\n\n /**\n * Runs a callback within a database transaction.\n * Handles commit/rollback and connection release.\n * @param callback The callback to execute within the transaction context.\n * @returns The result of the callback.\n * @throws StabilizeError if transactions are not supported or rollback is triggered.\n */\n async transaction<T>(\n callback: (txClient: DBClient) => Promise<T>,\n ): Promise<T> {\n if (this.isTransactionClient) return callback(this);\n\n if (this.client instanceof Database) {\n const tx = this.client.transaction(async () => {\n return await callback(this);\n });\n return await tx();\n }\n\n if (isMySQLPool(this.client)) {\n const connection = await this.client.getConnection();\n const txClient = new DBClient(this.config, this.logger, connection);\n this.logger.logDebug(\"Starting MySQL transaction.\");\n try {\n await txClient.query(\"START TRANSACTION\");\n const result = await callback(txClient);\n await txClient.query(\"COMMIT\");\n return result;\n } catch (error) {\n await txClient.query(\"ROLLBACK\");\n throw error;\n } finally {\n connection.release();\n this.logger.logDebug(\"MySQL transaction connection released.\");\n }\n }\n\n if (this.client instanceof Pool) {\n const connection = await this.client.connect();\n const txClient = new DBClient(this.config, this.logger, connection);\n this.logger.logDebug(\"Starting Postgres transaction.\");\n try {\n await txClient.migrationQuery(\"BEGIN\");\n const result = await callback(txClient);\n await txClient.migrationQuery(\"COMMIT\");\n return result;\n } catch (error) {\n await txClient.migrationQuery(\"ROLLBACK\");\n throw error;\n } finally {\n connection.release();\n this.logger.logDebug(\"Postgres transaction connection released.\");\n }\n }\n\n throw new StabilizeError(\n \"Transaction not supported by this client configuration.\",\n \"TX_ERROR\",\n );\n }\n\n /**\n * Closes the database connection.\n * For pooled connections, ends the pool.\n * @returns Promise that resolves once the connection is closed.\n */\n async close() {\n if (this.client instanceof Database) {\n this.client.close();\n } else if (this.client && \"end\" in this.client) {\n await (this.client as any).end();\n }\n this.client = null!;\n this.logger.logInfo(\"Database connection closed\");\n }\n\n async queryExec(\n query: string,\n params: any[] = [],\n ): Promise<{ affectedRows: number }> {\n const start = Date.now();\n let affectedRows = 0;\n\n if (this.client instanceof Database) {\n const result = this.client.run(query, ...params);\n affectedRows = result.changes;\n } else if (this.config.type === DBType.MySQL) {\n const [mysqlResult] = await (this.client as mysql.Pool).query(\n query,\n params,\n );\n affectedRows = (mysqlResult as any).affectedRows ?? 0;\n } else if (this.config.type === DBType.Postgres) {\n let paramIndex = 0;\n const pgQuery = query.replace(/\\?/g, () => `$${++paramIndex}`);\n const pgResult = await (this.client as Pool).query(pgQuery, params);\n affectedRows = pgResult.rowCount ?? 0;\n }\n\n const executionTime = Date.now() - start;\n this.logger.logQuery(query, params, executionTime);\n return { affectedRows };\n }\n\n /**\n * Executes a migration query (DDL or DML statement) without returning results.\n * Handles parameterized queries and statement preparation.\n * @param query The SQL query string.\n * @param params Query parameters.\n * @returns Promise that resolves once the query is complete.\n */\n async migrationQuery(query: string, params: any[] = []): Promise<void> {\n const start = Date.now();\n if (this.client instanceof Database) {\n let stmt = this.preparedStatements.get(query);\n if (!stmt) {\n stmt = this.client.prepare(query);\n this.preparedStatements.set(query, stmt);\n }\n stmt.run(...params);\n } else if (this.config.type === DBType.MySQL) {\n await (this.client as mysql.Pool).query(query, params);\n } else if (this.config.type === DBType.Postgres) {\n let paramIndex = 0;\n const pgQuery = query.replace(/\\?/g, () => `$${++paramIndex}`);\n await (this.client as Pool).query(pgQuery, params);\n }\n\n const executionTime = Date.now() - start;\n this.logger.logQuery(query, params, executionTime);\n }\n}\n",
|
|
157
|
+
"// ESM wrapper for pg\nimport pg from '../lib/index.js'\n\n// Re-export all the properties\nexport const Client = pg.Client\nexport const Pool = pg.Pool\nexport const Connection = pg.Connection\nexport const types = pg.types\nexport const Query = pg.Query\nexport const DatabaseError = pg.DatabaseError\nexport const escapeIdentifier = pg.escapeIdentifier\nexport const escapeLiteral = pg.escapeLiteral\nexport const Result = pg.Result\nexport const TypeOverrides = pg.TypeOverrides\n\n// Also export the defaults\nexport const defaults = pg.defaults\n\n// Re-export the default\nexport default pg\n"
|
|
158
|
+
],
|
|
159
|
+
"mappings": "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A,SACA,SACA,SACA,OACA,SACA,QACA,SACA,SACA,QACA,SACA,SACA,QACA,SACA,SACA,MACA,SACA,SACA,SACA,WACA,QACA,SACA,OACA,QACA,UACA,YACA,WACA,QACA,SACA,SACA,YACA,SACA,OACA,OACA,SACA,SACA,SACA,SACA,SACA,SACA,WACA,QACA,QACA,WACA,SACA,SACA,SACA,QACA,QACA,WACA,SACA,WACA,QACA,SACA,SACA,QACA,OACA,QACA,SACA,MACA,UACA,QACA,QACA,QACA,SACA,SACA,SACA,QACA,QACA,OACA,QACA,OACA,QACA,SACA,MACA,OACA,SACA,OACA,QACA,UACA,UACA,SACA,QACA,QACA,UACA,UACA,SACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,QACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,UACA,UACA,UACA,OACA,OACA,OAC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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA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",
|
|
160
|
+
"debugId": "C74E6A611DE890AA64756E2164756E21",
|
|
161
|
+
"names": []
|
|
162
|
+
}
|