mysql2 2.3.3 → 3.0.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.
Files changed (42) hide show
  1. package/README.md +6 -2
  2. package/index.d.ts +23 -9
  3. package/index.js +2 -0
  4. package/lib/auth_plugins/index.js +8 -0
  5. package/lib/auth_plugins/mysql_clear_password.js +17 -0
  6. package/lib/auth_plugins/sha256_password.js +2 -2
  7. package/lib/commands/auth_switch.js +3 -1
  8. package/lib/commands/change_user.js +19 -0
  9. package/lib/commands/client_handshake.js +40 -1
  10. package/lib/commands/prepare.js +2 -1
  11. package/lib/commands/quit.js +3 -3
  12. package/lib/commands/server_handshake.js +36 -1
  13. package/lib/connection.js +56 -11
  14. package/lib/connection_config.js +20 -3
  15. package/lib/constants/charset_encodings.js +4 -1
  16. package/lib/constants/charsets.js +41 -13
  17. package/lib/constants/client.js +8 -0
  18. package/lib/constants/ssl_profiles.js +274 -0
  19. package/lib/constants/types.js +60 -28
  20. package/lib/helpers.js +3 -1
  21. package/lib/packets/auth_next_factor.js +35 -0
  22. package/lib/packets/binary_row.js +49 -2
  23. package/lib/packets/column_definition.js +2 -0
  24. package/lib/packets/execute.js +62 -0
  25. package/lib/packets/index.js +6 -0
  26. package/lib/parsers/parser_cache.js +1 -1
  27. package/lib/parsers/text_parser.js +11 -4
  28. package/lib/pool.js +1 -1
  29. package/package.json +21 -14
  30. package/promise.d.ts +22 -2
  31. package/promise.js +12 -2
  32. package/typings/mysql/index.d.ts +43 -4
  33. package/typings/mysql/lib/Connection.d.ts +52 -8
  34. package/typings/mysql/lib/Pool.d.ts +4 -2
  35. package/typings/mysql/lib/PoolCluster.d.ts +3 -3
  36. package/typings/mysql/lib/PoolConnection.d.ts +1 -0
  37. package/typings/mysql/lib/Server.d.ts +13 -0
  38. package/typings/mysql/lib/protocol/packets/index.d.ts +5 -1
  39. package/typings/mysql/lib/protocol/packets/params/ErrorPacketParams.d.ts +6 -0
  40. package/typings/mysql/lib/protocol/packets/params/OkPacketParams.d.ts +9 -0
  41. package/typings/mysql/lib/protocol/sequences/Prepare.d.ts +52 -0
  42. package/typings/mysql/lib/protocol/sequences/Query.d.ts +12 -2
@@ -223,28 +223,56 @@ exports.UTF8MB4_VIETNAMESE_CI = 247;
223
223
  exports.GB18030_CHINESE_CI = 248;
224
224
  exports.GB18030_BIN = 249;
225
225
  exports.GB18030_UNICODE_520_CI = 250;
226
- exports.UTF8_GENERAL50_CI = 253;
226
+ exports.UTF8_GENERAL50_CI = 253; // deprecated
227
227
  exports.UTF8MB4_0900_AI_CI = 255;
228
- exports.UTF8MB4_CS_0900_AI_CI = 266;
229
- exports.UTF8MB4_DA_0900_AI_CI = 267;
230
228
  exports.UTF8MB4_DE_PB_0900_AI_CI = 256;
231
- exports.UTF8MB4_EO_0900_AI_CI = 273;
232
- exports.UTF8MB4_ES_0900_AI_CI = 263;
233
- exports.UTF8MB4_ES_TRAD_0900_AI_CI = 270;
234
- exports.UTF8MB4_ET_0900_AI_CI = 262;
235
- exports.UTF8MB4_HR_0900_AI_CI = 275;
236
- exports.UTF8MB4_HU_0900_AI_CI = 274;
237
229
  exports.UTF8MB4_IS_0900_AI_CI = 257;
238
- exports.UTF8MB4_LA_0900_AI_CI = 271;
239
- exports.UTF8MB4_LT_0900_AI_CI = 268;
240
230
  exports.UTF8MB4_LV_0900_AI_CI = 258;
241
- exports.UTF8MB4_PL_0900_AI_CI = 261;
242
231
  exports.UTF8MB4_RO_0900_AI_CI = 259;
243
- exports.UTF8MB4_SK_0900_AI_CI = 269;
244
232
  exports.UTF8MB4_SL_0900_AI_CI = 260;
233
+ exports.UTF8MB4_PL_0900_AI_CI = 261;
234
+ exports.UTF8MB4_ET_0900_AI_CI = 262;
235
+ exports.UTF8MB4_ES_0900_AI_CI = 263;
245
236
  exports.UTF8MB4_SV_0900_AI_CI = 264;
246
237
  exports.UTF8MB4_TR_0900_AI_CI = 265;
238
+ exports.UTF8MB4_CS_0900_AI_CI = 266;
239
+ exports.UTF8MB4_DA_0900_AI_CI = 267;
240
+ exports.UTF8MB4_LT_0900_AI_CI = 268;
241
+ exports.UTF8MB4_SK_0900_AI_CI = 269;
242
+ exports.UTF8MB4_ES_TRAD_0900_AI_CI = 270;
243
+ exports.UTF8MB4_LA_0900_AI_CI = 271;
244
+ exports.UTF8MB4_EO_0900_AI_CI = 273;
245
+ exports.UTF8MB4_HU_0900_AI_CI = 274;
246
+ exports.UTF8MB4_HR_0900_AI_CI = 275;
247
247
  exports.UTF8MB4_VI_0900_AI_CI = 277;
248
+ exports.UTF8MB4_0900_AS_CS = 278;
249
+ exports.UTF8MB4_DE_PB_0900_AS_CS = 279;
250
+ exports.UTF8MB4_IS_0900_AS_CS = 280;
251
+ exports.UTF8MB4_LV_0900_AS_CS = 281;
252
+ exports.UTF8MB4_RO_0900_AS_CS = 282;
253
+ exports.UTF8MB4_SL_0900_AS_CS = 283;
254
+ exports.UTF8MB4_PL_0900_AS_CS = 284;
255
+ exports.UTF8MB4_ET_0900_AS_CS = 285;
256
+ exports.UTF8MB4_ES_0900_AS_CS = 286;
257
+ exports.UTF8MB4_SV_0900_AS_CS = 287;
258
+ exports.UTF8MB4_TR_0900_AS_CS = 288;
259
+ exports.UTF8MB4_CS_0900_AS_CS = 289;
260
+ exports.UTF8MB4_DA_0900_AS_CS = 290;
261
+ exports.UTF8MB4_LT_0900_AS_CS = 291;
262
+ exports.UTF8MB4_SK_0900_AS_CS = 292;
263
+ exports.UTF8MB4_ES_TRAD_0900_AS_CS = 293;
264
+ exports.UTF8MB4_LA_0900_AS_CS = 294;
265
+ exports.UTF8MB4_EO_0900_AS_CS = 296;
266
+ exports.UTF8MB4_HU_0900_AS_CS = 297;
267
+ exports.UTF8MB4_HR_0900_AS_CS = 298;
268
+ exports.UTF8MB4_VI_0900_AS_CS = 300;
269
+ exports.UTF8MB4_JA_0900_AS_CS = 303;
270
+ exports.UTF8MB4_JA_0900_AS_CS_KS = 304;
271
+ exports.UTF8MB4_0900_AS_CI = 305;
272
+ exports.UTF8MB4_RU_0900_AI_CI = 306;
273
+ exports.UTF8MB4_RU_0900_AS_CS = 307;
274
+ exports.UTF8MB4_ZH_0900_AS_CS = 308;
275
+ exports.UTF8MB4_0900_BIN = 309;
248
276
 
249
277
  // short aliases
250
278
  exports.BIG5 = exports.BIG5_CHINESE_CI;
@@ -1,3 +1,9 @@
1
+ // This file was modified by Oracle on September 21, 2021.
2
+ // New capability for multi-factor authentication based on mandatory session
3
+ // trackers, that are signaled with an extra single-byte prefix on new
4
+ // versions of the MySQL server.
5
+ // Modifications copyright (c) 2021, Oracle and/or its affiliates.
6
+
1
7
  'use strict';
2
8
 
3
9
  // Manually extracted from mysql-5.5.23/include/mysql_com.h
@@ -29,3 +35,5 @@ exports.DEPRECATE_EOF = 0x01000000; /* Can send OK after a Text Resultset. */
29
35
 
30
36
  exports.SSL_VERIFY_SERVER_CERT = 0x40000000;
31
37
  exports.REMEMBER_OPTIONS = 0x80000000;
38
+
39
+ exports.MULTI_FACTOR_AUTHENTICATION = 0x10000000; /* multi-factor authentication */
@@ -2,6 +2,7 @@
2
2
 
3
3
  // Certificate for Amazon RDS (Updated for 2019)
4
4
  // https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html
5
+ // https://docs.amazonaws.cn/en_us/AmazonRDS/latest/AuroraUserGuide/UsingWithRDS.SSL.html
5
6
  // https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-serverless.html#aurora-serverless.tls
6
7
  exports['Amazon RDS'] = {
7
8
  ca: [
@@ -1104,6 +1105,279 @@ exports['Amazon RDS'] = {
1104
1105
  'o/ufQJVtMVT8QtPHRh8jrdkPSHCa2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU\n' +
1105
1106
  '5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2xJNDd2ZhwLnoQdeXeGADbkpy\n' +
1106
1107
  'rqXRfboQnoZsG4q5WTP468SQvvG5\n' +
1108
+ '-----END CERTIFICATE-----\n',
1109
+ '-----BEGIN CERTIFICATE-----\n' +
1110
+ 'MIIEDDCCAvSgAwIBAgIJAMy5uCBvP5roMA0GCSqGSIb3DQEBCwUAMIGSMQswCQYD\n' +
1111
+ 'VQQGEwJVUzEQMA4GA1UEBwwHU2VhdHRsZTETMBEGA1UECAwKV2FzaGluZ3RvbjEi\n' +
1112
+ 'MCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1h\n' +
1113
+ 'em9uIFJEUzEjMCEGA1UEAwwaQW1hem9uIFJEUyBDTiBSb290IDIwMTkgQ0EwHhcN\n' +
1114
+ 'MTkwOTA5MTY1NzIyWhcNMjQwOTA5MTY1NzIyWjCBkjELMAkGA1UEBhMCVVMxEDAO\n' +
1115
+ 'BgNVBAcMB1NlYXR0bGUxEzARBgNVBAgMCldhc2hpbmd0b24xIjAgBgNVBAoMGUFt\n' +
1116
+ 'YXpvbiBXZWIgU2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxIzAh\n' +
1117
+ 'BgNVBAMMGkFtYXpvbiBSRFMgQ04gUm9vdCAyMDE5IENBMIIBIjANBgkqhkiG9w0B\n' +
1118
+ 'AQEFAAOCAQ8AMIIBCgKCAQEAzxl9K4p06ZTZ9eZmEXyTHe9Ut8OIZR86t6A8b8g0\n' +
1119
+ 'nhqMe+y4ee+UfqxumVAVyXwNXOiGQVbuJhScLaJ39/Ol4YzIGjdoD8MUvsf4BuET\n' +
1120
+ 'udQh2sJL8OnlXuqSICKpecN5ud4UQvoMVZ9FGJ+e8TvXczW14rGO62sPfYM/WrMD\n' +
1121
+ 'R7P4fhQfmWFzkc24/hZGRL1nkvwMdtiwuI2TYobhlwZQOdsNcZ9Ek+PcSI4oqgXN\n' +
1122
+ 'SqpYy85JzrRZiR5iFGw1CnJtGlC0oatXFzw/B8XOd9wvLTlJhyLo7zw9j3zedKbv\n' +
1123
+ '33fTdjfvpGvcfw9CYggwrbsVmUeUhVDfMntTc9z9MRccmwIDAQABo2MwYTAOBgNV\n' +
1124
+ 'HQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU/Z0g+hUMGQou\n' +
1125
+ 'hsbyFgSxc5jsbaowHwYDVR0jBBgwFoAU/Z0g+hUMGQouhsbyFgSxc5jsbaowDQYJ\n' +
1126
+ 'KoZIhvcNAQELBQADggEBAAlGPCq1D/PGkWoZZpAK3V94EOByklp2HkUPEZ0PPv3Z\n' +
1127
+ '/euD2wUPkXnf27FC1XJE0pJX96B97ZXIEHl4S4obBRSlybzuvmfH4gyu+b+7Tebv\n' +
1128
+ 'VmfsAodyfYCm90heAYADWkc/XKDj+oe3NkbR+LokrM+5aOB71f5mMLnFgYHQW/dI\n' +
1129
+ 'IRDziUSpP0LMr+YNKvM7qytrobPS2TOWtweWpXesNBBeiLTHZpTEu8DYcE+4e2tj\n' +
1130
+ 'O0spF3HuoF0Oc7ioVy2exE+HV1oJOquHGSanZSdMHCAEDMfKUmlT7/zcwC877UT/\n' +
1131
+ 'sysqYU/fl6vX48QDfalZuBYj+d1dUxIb1sx6q4Iw4+s=\n' +
1132
+ '-----END CERTIFICATE-----\n',
1133
+ '-----BEGIN CERTIFICATE-----\n' +
1134
+ 'MIIEDDCCAvSgAwIBAgIDAIMzMA0GCSqGSIb3DQEBCwUAMIGSMQswCQYDVQQGEwJV\n' +
1135
+ 'UzEQMA4GA1UEBwwHU2VhdHRsZTETMBEGA1UECAwKV2FzaGluZ3RvbjEiMCAGA1UE\n' +
1136
+ 'CgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJE\n' +
1137
+ 'UzEjMCEGA1UEAwwaQW1hem9uIFJEUyBDTiBSb290IDIwMTkgQ0EwHhcNMTkwOTA5\n' +
1138
+ 'MjAzMjM3WhcNMjQwOTA5MTY1NzIyWjCBlTELMAkGA1UEBhMCVVMxEzARBgNVBAgM\n' +
1139
+ 'Cldhc2hpbmd0b24xEDAOBgNVBAcMB1NlYXR0bGUxIjAgBgNVBAoMGUFtYXpvbiBX\n' +
1140
+ 'ZWIgU2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxJjAkBgNVBAMM\n' +
1141
+ 'HUFtYXpvbiBSRFMgY24tbm9ydGgtMSAyMDE5IENBMIIBIjANBgkqhkiG9w0BAQEF\n' +
1142
+ 'AAOCAQ8AMIIBCgKCAQEA1QX8vbiba8pa4b2CLVBNhqFFYwsuekptFPv/RTixRZ6K\n' +
1143
+ 'a1fZ/vp/d7xhfhwU9DKXyQ3ONhwOVKnFuvQuWXQiPc2cRkxM+TF7yF6hoPrIOOzr\n' +
1144
+ 's6ANmR2k/n9X0aOO7sqx4q7A73ueIDJst3IjfaFgt1jaqfC7tcSSROB/+vZZTNGP\n' +
1145
+ 'KgFvd02ut2mCtLgohzavVDicUc0V8H1sV5Ah4n0VafW7Fqru9ehiPO79JXJKIS7W\n' +
1146
+ 'gcgOOiK6YDqxaQRN+LTNYdZ+DZ1+Gx8NBN80fVOO2hpRFpb662k/hQH8onYkvXaY\n' +
1147
+ 'kr9ouDTjfr5t8E8CEvkO/Y/B3/lt7mVjEGqImCwJawIDAQABo2YwZDAOBgNVHQ8B\n' +
1148
+ 'Af8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUXJaoUok7ROtv\n' +
1149
+ '5/2xeuaRqelnejIwHwYDVR0jBBgwFoAU/Z0g+hUMGQouhsbyFgSxc5jsbaowDQYJ\n' +
1150
+ 'KoZIhvcNAQELBQADggEBAIiPRsCpaiMsWUq7liRV6NDgljzjVOMzUsDnfusGUQtO\n' +
1151
+ 'fa3tCI+sx5j92jFzlS0GwseB/3FjVQDRll/kFTqbVwpHw2kaLeAbVvquxZAoD/91\n' +
1152
+ '6gBGSF3qmLestFpf02kNHlv9skqnMrBLYkQ4kckgt4Y8E8pNLSeNtJykbp7XCf7H\n' +
1153
+ 'A+izbITBxNHxLUqMStEtk8RhIWUmiAbp5ENHwYCL5h9g4VV7X4TsW/1Q4KgEstWa\n' +
1154
+ '1t65VWr3p7NnKpMX5CL/v5FGCYq0TDdr3qmHKbXbofmUKltZ7VxSAh5LFrfLuGzt\n' +
1155
+ 'MtXQkd0NDvVqMNHAjEkj7/MtlYyridWrKsiUc3ALBR4=\n' +
1156
+ '-----END CERTIFICATE-----\n',
1157
+ '-----BEGIN CERTIFICATE-----\n' +
1158
+ 'MIIGADCCA+igAwIBAgIQfFbtOHNGJtTnXjvwddAHjTANBgkqhkiG9w0BAQwFADCB\n' +
1159
+ 'mDELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\n' +
1160
+ 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTEwLwYDVQQDDChB\n' +
1161
+ 'bWF6b24gUkRTIGNuLW5vcnRoLTEgUm9vdCBDQSBSU0E0MDk2IEcxMRAwDgYDVQQH\n' +
1162
+ 'DAdTZWF0dGxlMCAXDTIxMDUyNTIzMTg1MloYDzIxMjEwNTI2MDAxODUyWjCBmDEL\n' +
1163
+ 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' +
1164
+ 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTEwLwYDVQQDDChBbWF6\n' +
1165
+ 'b24gUkRTIGNuLW5vcnRoLTEgUm9vdCBDQSBSU0E0MDk2IEcxMRAwDgYDVQQHDAdT\n' +
1166
+ 'ZWF0dGxlMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0OO5+lCMwInN\n' +
1167
+ 'tMJ19bv+uyEE74uE5vHQHtla5sI1Hp+A8DhTURgJvIHRxv3Tgtk6ja4v/VcbLcVr\n' +
1168
+ 'R4OkZBY9b5RKHMGDK1ljwo/MxMFuK/TGkHcrjhiZcgYyNm2oxK33/YafLqq18a8p\n' +
1169
+ 'HREEZwz7wSi6DY8Mf9heH8a2T3ZDlUovj5JUVIDu7kSGYHw16eUi9twX7MtO0b43\n' +
1170
+ 'ociygADBSoZeyMKZHisYdyf4D/LLDYgh7ja+Ncu4k3ErMmxGN5cZN+USyquxmnr8\n' +
1171
+ 'uXkl2t9VH0BhB0kej/vO9DhLdpKJRVaML1A9Wg3pd0U37xOJhTU6wCm23zdga3kR\n' +
1172
+ 'bf9azdS68zDK9tYiDrGc7kRkj7SOUWLY7fagyKv3rESWXrGkV8lzsK7xseomAKvL\n' +
1173
+ 'fHEfL0QUD63kEk4W8VH8XY7NwXZD6Je5hiQtLu8/uxed96FWwZ1DJrzojW4mKFQF\n' +
1174
+ 'eECHU5b5jza4gjZ/pOeeqRmx3iojjYf2ZVm0+0SRFd+BWWPpqyeVUvC9gVZ+VMPr\n' +
1175
+ 'SUqgIrHZ2GMNJXIHt9TR3oq4XnXVcvsPuKQCWg8HIgczfDc//zaYhLdcVQbsTVEo\n' +
1176
+ 'I8nLqs6FygTnhyPSbJG9n9fF+RpTowXVb1UNovCTR/UBvR9l8JobnaqKUFMI1W2d\n' +
1177
+ 'Dy98l55+LFT1VYm+rbvxJlVJm9kw6usCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB\n' +
1178
+ '/zAdBgNVHQ4EFgQUfVNPfvq3BkZRL2qrVKEvMbPBSHAwDgYDVR0PAQH/BAQDAgGG\n' +
1179
+ 'MA0GCSqGSIb3DQEBDAUAA4ICAQBZ9hDaGcZFSxEyV4Yk7ynJrpKznaLWaq8T72lb\n' +
1180
+ 'sXcgnGGnTYQtUhdR2atA6KVtc2D8UCxDiP4kE8xC+voGKgRRt3WvIX/KRiYH4Rr/\n' +
1181
+ '8DS/wux6MYYEaXjoCil1xNTOyhMCmtEPIFo8LDStbaur/PmE5VGVr45XcqNdNt5A\n' +
1182
+ 'S8esMGK5aI7D2zQEfGN940+U2sUCVYnvuaR1nbcMkgMzzdL2yCCZ1mlyk2KvSsF7\n' +
1183
+ 'b0P772MnZ3x4mP3IcUh0/6XSSIxWMAB6r6s1nCZd2JGGIyVSc2YLsB2jib2gYyfT\n' +
1184
+ 'zq2SL040aatsOAecrfYDG6UbeL0OUXivhOzycvS92FhEDU0BNB44wEO0Qg/zAc2C\n' +
1185
+ 'JlkPCMKIZc9g70RhHQ9VV9kc/SCjVRu1PauryzTmXEfr+ItrbZVW33JQg7ZOmgfj\n' +
1186
+ 'jgpKF9q7sG2VJBDCRdp2nfeA1Bblc36yC0LodZ7voSzcJI7nnv1aO3U1CvQl0Mha\n' +
1187
+ 'fMjZqd0kPIX6d0G4C5SImvMCF59annWwt4V1sbWrgEvqdICe0kVsofUtEW35kX3C\n' +
1188
+ 'W344OxVkmhhFuniTFWYCyuQNlhIIdA0I5trZPtRaWsV2cTkNIzfe2vHGXuMnwd6V\n' +
1189
+ 'CwxPaPdyvKB7n6x6tF5RUOXq0EZQf9XOmdOiCTua1WT+vobRX18RtJLaOa/n5AKo\n' +
1190
+ 'LlYzqw==\n' +
1191
+ '-----END CERTIFICATE-----\n',
1192
+ '-----BEGIN CERTIFICATE-----\n' +
1193
+ 'MIIEATCCAumgAwIBAgIRAN9d6r2p5Wg5Gwl1bK3+WfkwDQYJKoZIhvcNAQELBQAw\n' +
1194
+ 'gZgxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\n' +
1195
+ 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTExMC8GA1UEAwwo\n' +
1196
+ 'QW1hem9uIFJEUyBjbi1ub3J0aC0xIFJvb3QgQ0EgUlNBMjA0OCBHMTEQMA4GA1UE\n' +
1197
+ 'BwwHU2VhdHRsZTAgFw0yMTA1MjUyMzE1MDdaGA8yMDYxMDUyNjAwMTUwN1owgZgx\n' +
1198
+ 'CzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMu\n' +
1199
+ 'MRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTExMC8GA1UEAwwoQW1h\n' +
1200
+ 'em9uIFJEUyBjbi1ub3J0aC0xIFJvb3QgQ0EgUlNBMjA0OCBHMTEQMA4GA1UEBwwH\n' +
1201
+ 'U2VhdHRsZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKvw4zHfM3cU\n' +
1202
+ 'yFI9KFITDF4feeon2P49qXx8YX8KUEYzNbkNQhPSt1J91kvy0ddHLrxxNd+LoQFi\n' +
1203
+ 'A5vu7a51VmX1MtKYs7SzEIUdrON3FKK/2cci2yCnwzoc3kam3jXvPUu56op+aH35\n' +
1204
+ '0JHEco0i+NUjh7n5UV/yWc1+8kPLBQr+VMV3ndp85ik209esvCRWgQ+iWuADqHbf\n' +
1205
+ 'vjrFm/zjFIiwuX5qapkDtSRVwM6FwIfjSEF6udhZjsermfD2AoTesptZEiNIPRzV\n' +
1206
+ 'et6s/U5gMjvAhc+MQgjjdCLBlhbXWR1CPtXOMp6o8Pjn2Et3eiM6G1T0jUO28BGP\n' +
1207
+ '3/iq3JOXFj8CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUEoBo\n' +
1208
+ 'nXIxui+T8RXYqgzikVat82EwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUA\n' +
1209
+ 'A4IBAQAk4XdDesWKYgE35KMqg2+tCY/gbBrKVMdvZzy2kAv9QH8bwCcojeMw4wGh\n' +
1210
+ 'u0mjfX0vawoot2bNY6Yu0+mVxBtkelhay7enN+mA5g5DfkyKkLb6Jg/9N7m95w4N\n' +
1211
+ 'ICQwM3Yb9OsuquxBPPE7JkrZv10AzVz2Xqu/OHDyDpfnkcCfNusHyIAycjxq/ZEF\n' +
1212
+ '7LOSBv3S20sJU72EKfrNGSfMDv9qvnusum/vTYKuSNCTR0vARxbB7LLVZZ/Pg2w8\n' +
1213
+ '22RQK9zr+u5WkfTGMqF4NnbuJGphU21QHUIZYY8QAnte0hbK+AbTUyeKGHxqRDun\n' +
1214
+ 'BQn6/GvgP2tPDKj/Huauo/CVSd+M\n' +
1215
+ '-----END CERTIFICATE-----\n',
1216
+ '-----BEGIN CERTIFICATE-----\n' +
1217
+ 'MIICrzCCAjWgAwIBAgIQTEq2iHmd2QzeVBzmBUbAUTAKBggqhkjOPQQDAzCBlzEL\n' +
1218
+ 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' +
1219
+ 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdBbWF6\n' +
1220
+ 'b24gUkRTIGNuLW5vcnRoLTEgUm9vdCBDQSBFQ0MzODQgRzExEDAOBgNVBAcMB1Nl\n' +
1221
+ 'YXR0bGUwIBcNMjEwNTI1MjMyMjQ4WhgPMjEyMTA1MjYwMDIyNDhaMIGXMQswCQYD\n' +
1222
+ 'VQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEG\n' +
1223
+ 'A1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExMDAuBgNVBAMMJ0FtYXpvbiBS\n' +
1224
+ 'RFMgY24tbm9ydGgtMSBSb290IENBIEVDQzM4NCBHMTEQMA4GA1UEBwwHU2VhdHRs\n' +
1225
+ 'ZTB2MBAGByqGSM49AgEGBSuBBAAiA2IABBV1FSsxoXGFDBIMj6b+EfJvLINkTtVv\n' +
1226
+ 'UucbGUqZMidNfuHoUWTlhwZuX5kMv9hlbQbDxrnHCePo1heHkdqovIi2D77lhvhn\n' +
1227
+ '7UgMupcFx9Tjki+5QhKLW3n7W8dmreJLw6NCMEAwDwYDVR0TAQH/BAUwAwEB/zAd\n' +
1228
+ 'BgNVHQ4EFgQUFwPUFTDrjPqdIMjuYGif1wkAtr8wDgYDVR0PAQH/BAQDAgGGMAoG\n' +
1229
+ 'CCqGSM49BAMDA2gAMGUCMQCrAtoyWILR++OEhFmuJhSR8cgEW/rGyf+lMDwq9dcA\n' +
1230
+ 'eJPK7l9S8iT30JOo++hWwYcCMFl9MWvoQU3iUDH+j33I26+whkvZ6LLw2dajww1X\n' +
1231
+ '0MPXbT3P9P0Jk/Vv+gand92fAw==\n' +
1232
+ '-----END CERTIFICATE-----\n',
1233
+ '-----BEGIN CERTIFICATE-----\n' +
1234
+ 'MIIEDDCCAvSgAwIBAgIJAMy5uCBvP5roMA0GCSqGSIb3DQEBCwUAMIGSMQswCQYD\n' +
1235
+ 'VQQGEwJVUzEQMA4GA1UEBwwHU2VhdHRsZTETMBEGA1UECAwKV2FzaGluZ3RvbjEi\n' +
1236
+ 'MCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1h\n' +
1237
+ 'em9uIFJEUzEjMCEGA1UEAwwaQW1hem9uIFJEUyBDTiBSb290IDIwMTkgQ0EwHhcN\n' +
1238
+ 'MTkwOTA5MTY1NzIyWhcNMjQwOTA5MTY1NzIyWjCBkjELMAkGA1UEBhMCVVMxEDAO\n' +
1239
+ 'BgNVBAcMB1NlYXR0bGUxEzARBgNVBAgMCldhc2hpbmd0b24xIjAgBgNVBAoMGUFt\n' +
1240
+ 'YXpvbiBXZWIgU2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxIzAh\n' +
1241
+ 'BgNVBAMMGkFtYXpvbiBSRFMgQ04gUm9vdCAyMDE5IENBMIIBIjANBgkqhkiG9w0B\n' +
1242
+ 'AQEFAAOCAQ8AMIIBCgKCAQEAzxl9K4p06ZTZ9eZmEXyTHe9Ut8OIZR86t6A8b8g0\n' +
1243
+ 'nhqMe+y4ee+UfqxumVAVyXwNXOiGQVbuJhScLaJ39/Ol4YzIGjdoD8MUvsf4BuET\n' +
1244
+ 'udQh2sJL8OnlXuqSICKpecN5ud4UQvoMVZ9FGJ+e8TvXczW14rGO62sPfYM/WrMD\n' +
1245
+ 'R7P4fhQfmWFzkc24/hZGRL1nkvwMdtiwuI2TYobhlwZQOdsNcZ9Ek+PcSI4oqgXN\n' +
1246
+ 'SqpYy85JzrRZiR5iFGw1CnJtGlC0oatXFzw/B8XOd9wvLTlJhyLo7zw9j3zedKbv\n' +
1247
+ '33fTdjfvpGvcfw9CYggwrbsVmUeUhVDfMntTc9z9MRccmwIDAQABo2MwYTAOBgNV\n' +
1248
+ 'HQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU/Z0g+hUMGQou\n' +
1249
+ 'hsbyFgSxc5jsbaowHwYDVR0jBBgwFoAU/Z0g+hUMGQouhsbyFgSxc5jsbaowDQYJ\n' +
1250
+ 'KoZIhvcNAQELBQADggEBAAlGPCq1D/PGkWoZZpAK3V94EOByklp2HkUPEZ0PPv3Z\n' +
1251
+ '/euD2wUPkXnf27FC1XJE0pJX96B97ZXIEHl4S4obBRSlybzuvmfH4gyu+b+7Tebv\n' +
1252
+ 'VmfsAodyfYCm90heAYADWkc/XKDj+oe3NkbR+LokrM+5aOB71f5mMLnFgYHQW/dI\n' +
1253
+ 'IRDziUSpP0LMr+YNKvM7qytrobPS2TOWtweWpXesNBBeiLTHZpTEu8DYcE+4e2tj\n' +
1254
+ 'O0spF3HuoF0Oc7ioVy2exE+HV1oJOquHGSanZSdMHCAEDMfKUmlT7/zcwC877UT/\n' +
1255
+ 'sysqYU/fl6vX48QDfalZuBYj+d1dUxIb1sx6q4Iw4+s=\n' +
1256
+ '-----END CERTIFICATE-----\n',
1257
+ '-----BEGIN CERTIFICATE-----\n' +
1258
+ 'MIIEEDCCAvigAwIBAgIDAJJhMA0GCSqGSIb3DQEBCwUAMIGSMQswCQYDVQQGEwJV\n' +
1259
+ 'UzEQMA4GA1UEBwwHU2VhdHRsZTETMBEGA1UECAwKV2FzaGluZ3RvbjEiMCAGA1UE\n' +
1260
+ 'CgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJE\n' +
1261
+ 'UzEjMCEGA1UEAwwaQW1hem9uIFJEUyBDTiBSb290IDIwMTkgQ0EwHhcNMTkwOTE3\n' +
1262
+ 'MTY0OTE3WhcNMjQwOTA5MTY1NzIyWjCBmTELMAkGA1UEBhMCVVMxEzARBgNVBAgM\n' +
1263
+ 'Cldhc2hpbmd0b24xEDAOBgNVBAcMB1NlYXR0bGUxIjAgBgNVBAoMGUFtYXpvbiBX\n' +
1264
+ 'ZWIgU2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxKjAoBgNVBAMM\n' +
1265
+ 'IUFtYXpvbiBSRFMgY24tbm9ydGh3ZXN0LTEgMjAxOSBDQTCCASIwDQYJKoZIhvcN\n' +
1266
+ 'AQEBBQADggEPADCCAQoCggEBAMr4bvXQVykL0RHtBALyP7FycubzLJM178wMw5vK\n' +
1267
+ 'QS/1IVlQlbdZ8bNYmSMqa2IlGoWdjvLonES0jD0T8LCOYJy0uPN0DfiH6I9v9th8\n' +
1268
+ 'TvG/hAD9pe01xLOUAOTzuikbzcxEf9XX6mG/xAh5rREHsLbQE9R7D4RkqdeJbQBc\n' +
1269
+ 'KVcWWrejW9XaleCr+iEuwSqzXYDXNyfJoYic8aNYA8bADG5YPWTPblxA8MCik+zD\n' +
1270
+ 'q9r5wMNafUKmdOAFP6qeYo0zA5o9ESM2xJdYqa2gF7lAYsMagtWZWfEW27ZUrYmf\n' +
1271
+ 'tlMXu5xF2zZ1z2n7GKBXa8kA+e/dzalUA5ONHZUDIpU51k8CAwEAAaNmMGQwDgYD\n' +
1272
+ 'VR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFCV3kNIC\n' +
1273
+ '8e01zUu6tXl0/ig8Va5OMB8GA1UdIwQYMBaAFP2dIPoVDBkKLobG8hYEsXOY7G2q\n' +
1274
+ 'MA0GCSqGSIb3DQEBCwUAA4IBAQDHKrXWXsv6KKb06XhuC6RrMsLW+fmQXbrU9x4V\n' +
1275
+ 'b46VEaHN8lvKx6QWmRKSdnCa7nYZkPUbGdcQtgThfEjkc+UEfJxx/Q2Hb1OslPcj\n' +
1276
+ 'Egx5M7NFCGoBbaSKOGnVexEKRfxA2zkPCMi7bDe2m8cgThyBHfsTJSVGJkXsf6VJ\n' +
1277
+ 'JKWJULYiHMjF31Npg++eB4iN42bqhPfP5nKloGjOs/TNYdT2rAcI8xZRsd+G+0Aw\n' +
1278
+ 'qlQ0VdPmxIK7M0Sv2StGD0244OXbq6A3Ojx4t7/Kl41+FuyaGlnALDvdiYF96Zu1\n' +
1279
+ 'VpA/pPn4AC3+/wrXOefZDFJ3dC1uKlIoh63Vv378oI2VQvw3\n' +
1280
+ '-----END CERTIFICATE-----\n',
1281
+ '-----BEGIN CERTIFICATE-----\n' +
1282
+ 'MIIECTCCAvGgAwIBAgIRAOf+QbXXDGRJ7MW8j6FZ5ncwDQYJKoZIhvcNAQELBQAw\n' +
1283
+ 'gZwxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\n' +
1284
+ 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTE1MDMGA1UEAwws\n' +
1285
+ 'QW1hem9uIFJEUyBjbi1ub3J0aHdlc3QtMSBSb290IENBIFJTQTIwNDggRzExEDAO\n' +
1286
+ 'BgNVBAcMB1NlYXR0bGUwIBcNMjEwNTI1MjI1NjEyWhgPMjA2MTA1MjUyMzU2MTJa\n' +
1287
+ 'MIGcMQswCQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywg\n' +
1288
+ 'SW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExNTAzBgNVBAMM\n' +
1289
+ 'LEFtYXpvbiBSRFMgY24tbm9ydGh3ZXN0LTEgUm9vdCBDQSBSU0EyMDQ4IEcxMRAw\n' +
1290
+ 'DgYDVQQHDAdTZWF0dGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA\n' +
1291
+ '0XBh/AY4j5RP9XUbYGMaCaBuG4FAbHU/Qfz/hHBNfy/QMi2hF4LQECGqp+j/8fML\n' +
1292
+ '45c6b0NyCLvZuIfB4F1s+dctJpqauDqzYacw3/fMmxNyzgkrYa8VhoRdPWH6ZX2e\n' +
1293
+ '0VNfTOJo64ShJaePdizBAoBnfX+xvDyZ6BLGtdUsvsfdDSCTt2fgTAk8DBTmHode\n' +
1294
+ 'hCC3EfVcAjk99+Fe0RWPnDBXQkA8VrbgSxXPN8Gfag1wIzS44BcxhxHDiwQoL4Ao\n' +
1295
+ 'FfOwvgRJANeUGcqnL5IpF8xxU3lk7nMcXuQu17597+UGwTiFLAT0bnVK/TgakefX\n' +
1296
+ 'M3ZH9gUi0Di3dJNIKtq/3wIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud\n' +
1297
+ 'DgQWBBTX4eJfUNknv33QnNNfkDsrYrO1uzAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZI\n' +
1298
+ 'hvcNAQELBQADggEBAKIlgCuSJYIgvHK2zoT9PugiyBE5vvo5HyrTOJIhPknB2aY7\n' +
1299
+ 'x2Gwbv7YlXzncpQM+aPA88PlIvwPmGj0Nb8ph6vZ55DOxWrBE8LuXMR/+71vMYaF\n' +
1300
+ 'M9iTud2OyRLa2EIpS7nq3jWKjiDFkfrkUg8JmLCWHv0qEANX8XJ5NVhrRSAJzvDA\n' +
1301
+ 'MArXq2k5oJZoRJxyGlz6dSoU/rxsQF/oTihpcH/cEbL6ZD8sZ5xLJpCHTJcnBAEZ\n' +
1302
+ 'L18sYc8F/91akqXn1re/7/K3NwT9usyh89e5pegx/U2ySI3KJuc464HmCV7YZ0iJ\n' +
1303
+ 'EQYsQRGFZr/Miu5V4hrpuggsrnmi/RagWYJGPfQ=\n' +
1304
+ '-----END CERTIFICATE-----\n',
1305
+ '-----BEGIN CERTIFICATE-----\n' +
1306
+ 'MIIGCTCCA/GgAwIBAgIRAJ3YjujPNbJWN/domX9EvW8wDQYJKoZIhvcNAQEMBQAw\n' +
1307
+ 'gZwxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\n' +
1308
+ 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTE1MDMGA1UEAwws\n' +
1309
+ 'QW1hem9uIFJEUyBjbi1ub3J0aHdlc3QtMSBSb290IENBIFJTQTQwOTYgRzExEDAO\n' +
1310
+ 'BgNVBAcMB1NlYXR0bGUwIBcNMjEwNTI1MjMwMDE1WhgPMjEyMTA1MjYwMDAwMTVa\n' +
1311
+ 'MIGcMQswCQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywg\n' +
1312
+ 'SW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExNTAzBgNVBAMM\n' +
1313
+ 'LEFtYXpvbiBSRFMgY24tbm9ydGh3ZXN0LTEgUm9vdCBDQSBSU0E0MDk2IEcxMRAw\n' +
1314
+ 'DgYDVQQHDAdTZWF0dGxlMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA\n' +
1315
+ 'y8Wy3CndOV9n8V3yZ3aOTm6sKlxmtS7GYlAiguNjyqS2ERP6x3l6JlkuKyAtYut/\n' +
1316
+ 'UOJL6TBWQNLUsNpFJnLkomaqWRYNjSSogSLt2F6BIr/fM8pOmXvBHg9OB/I24DUE\n' +
1317
+ '6bKuVbe+qrGN6ypTAsrfZJ94ED0wmMb8RMOlXOBgB3GxbuQjUFN0XLXurJygj9k7\n' +
1318
+ 'SM3RQggoaO94T1qoi4LD/NS/4/Z3eUksLZgkC19fSSVnuUfu845x+MXlVhLeHcLo\n' +
1319
+ '9IIONonUJvkKPS90TQtB2spSqFd+MkiX3izPDii1kHfFHsl2CzwcdbxvcAZ742np\n' +
1320
+ 'MjDFpE4Zl6Nf28jGm6ODg6F/yZIiqWpvDemfnHfgkv1SFJnMpIAnLEIRnD5iZPRY\n' +
1321
+ 'vP9tJVxGo/kB7ogYLKboOtQyzQC5G6KIbkblJ+MjVcf5iQIUn5Ir7s91/7s6uVRT\n' +
1322
+ 'OY76S3SppFQltNwh1yW5s7Ppc9XR5cp0F37NfEm90g+r2JMH6da+Zd0zd+oG4JUJ\n' +
1323
+ 'GQWAIhvoOo2jjfX33GqxJI5QrhyVFQpIGs6WU3Z7uZou6/orDaEzAkedMC4w53aZ\n' +
1324
+ 'KmJevk2btsWRcGTYyJxf5GZ9HnUcDApcZ9QZ/9f7iIrGPTO4W6BJ9wzzc5PoenlD\n' +
1325
+ 'oubhx9fofSIepk822gD/93fakRUJlYXKNvxJC8qXRn8CAwEAAaNCMEAwDwYDVR0T\n' +
1326
+ 'AQH/BAUwAwEB/zAdBgNVHQ4EFgQUbApE7vMSJDpJph7Lrq6rAMCwQF4wDgYDVR0P\n' +
1327
+ 'AQH/BAQDAgGGMA0GCSqGSIb3DQEBDAUAA4ICAQBSTbw8jIpZyAwQiJv5D6B9g4fX\n' +
1328
+ '9PsTFTmb2eszZZZO/i0T8hbqAA3DmjjM5QqUdbjXiq4aLec04aH/ltc/12b6lypX\n' +
1329
+ 'sfhtUJd5rgVyEyi9VpZwL+3LrV8CC9rel1v1euOvQ+6ojsoU9PKVLSw5G1Owzy8x\n' +
1330
+ 'pQwJU9ZTIMgz0TdlFUugaccLH54uy/c7FclO8HpOwHbwMtuMrsEt3p9vea7UoSn3\n' +
1331
+ '54usb0p8ex2brMrOxKmLXXQOGoDFF8U5JCivdQaYuG7LO9NocaeyLNkc22MrxvhV\n' +
1332
+ '1x3I1CE5Y1vMEqf0B8mMl2tAZ6l68r8qv1SoIrvm3ioZpdDBNkyyYVfRLpvmQBw4\n' +
1333
+ 'F0NQIW5wAumqbyHLRKMf/wmeuBwYjWrAeJdwDTsNVDPnhXpTOobKH432+i7v5U8n\n' +
1334
+ '1dcrLdYwzRMXxY2+Wrmgte2JdsvfNkcDou9ZnjqTt8u5L7eFd5kWOLnZAWtsIef5\n' +
1335
+ '2QzfKFjpbg9q/zt9RcNULAUaMB0twG1G6eO9stPElE2B0k3wM0FCTXfrh8v0FWEx\n' +
1336
+ 'Zbnef3OwiiHHQ6EBHYvbZm0qwuYdBz8KtwurYwEUpgldls5hcj9eI3pDCjTzJncP\n' +
1337
+ 'GpVjJTtIE0CGOcAgIt5G6idQ1oQudW8DMb/M0QXibI5fjqEXYoYQEnjko9AqLdzI\n' +
1338
+ 'pn++DGngGu3NLeSVfA==\n' +
1339
+ '-----END CERTIFICATE-----\n',
1340
+ '-----BEGIN CERTIFICATE-----\n' +
1341
+ 'MIICtjCCAj2gAwIBAgIQHBx4LmhvEVmG1P6tMGhI8DAKBggqhkjOPQQDAzCBmzEL\n' +
1342
+ 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' +
1343
+ 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTQwMgYDVQQDDCtBbWF6\n' +
1344
+ 'b24gUkRTIGNuLW5vcnRod2VzdC0xIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQH\n' +
1345
+ 'DAdTZWF0dGxlMCAXDTIxMDUyNTIzMDM1NVoYDzIxMjEwNTI2MDAwMzU1WjCBmzEL\n' +
1346
+ 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' +
1347
+ 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTQwMgYDVQQDDCtBbWF6\n' +
1348
+ 'b24gUkRTIGNuLW5vcnRod2VzdC0xIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQH\n' +
1349
+ 'DAdTZWF0dGxlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEJxUculiPchcuEWMgFK+T\n' +
1350
+ 'jmYSVKrpF0NbDteKKJ45BbTzhwwCSKyEY3vVCqwMQ+wYiJZ87OyxLU1cqq/WCg3s\n' +
1351
+ '7aD8Ro9DezvR+Fu+/AV61BLCgeSLr9S1ZCC6cpn5l0a4o0IwQDAPBgNVHRMBAf8E\n' +
1352
+ 'BTADAQH/MB0GA1UdDgQWBBSK4CT2IBuyX0nXmkC15OHfxtqh8zAOBgNVHQ8BAf8E\n' +
1353
+ 'BAMCAYYwCgYIKoZIzj0EAwMDZwAwZAIwQB38Wg42v48d5O1i53hg2qF/H0QW/8eO\n' +
1354
+ '/xVtA8PK2ztDgQm+O0vKb34nj6X4Kcn8AjBSJmft8t7LMN/UwnhptyYINerpDMzZ\n' +
1355
+ 'g0OtBwn1QMWWlkFNf8ajLURXKGg9e2mfkpw=\n' +
1356
+ '-----END CERTIFICATE-----\n',
1357
+ '-----BEGIN CERTIFICATE-----\n' +
1358
+ 'MIIEIjCCAwqgAwIBAgIQI2AINKjtLFqXO+5mqmHJOzANBgkqhkiG9w0BAQsFADCB\n' +
1359
+ 'nDELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\n' +
1360
+ 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTUwMwYDVQQDDCxB\n' +
1361
+ 'bWF6b24gUkRTIGNuLW5vcnRod2VzdC0xIFJvb3QgQ0EgUlNBMjA0OCBHMTEQMA4G\n' +
1362
+ 'A1UEBwwHU2VhdHRsZTAeFw0yMTEwMjAyMjE5NTBaFw0yNjEwMjAyMzE5NTBaMIGU\n' +
1363
+ 'MQswCQYDVQQGEwJVUzEQMA4GA1UEBwwHU2VhdHRsZTETMBEGA1UECAwKV2FzaGlu\n' +
1364
+ 'Z3RvbjEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEGA1UE\n' +
1365
+ 'CwwKQW1hem9uIFJEUzElMCMGA1UEAwwcQW1hem9uIFJEUyBjbi1ub3J0aHdlc3Qt\n' +
1366
+ 'MSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMk+1qHD+w3Wns8f\n' +
1367
+ 'WNs6ZKtd6r8eJSilT8SKdhuvZ77C2a5CRaWhihwTznGW1vCaR9+O4OIJZCJj3iV+\n' +
1368
+ '75arKXK5XJTPNJo8aW5pW9ljh/KsudkT7gzURQ3n3xFiv9vQwPRSE9gPn20Cad8U\n' +
1369
+ '64KPl20DvA1XD3CoaACafRz5BlZwGJAi6xI9DqdiQRGEcNlwBzMSv9E0MqkW9pDN\n' +
1370
+ '+goGEkVyfLA83hUM58zXr7AwUEw7RH64rNZcoWYT89AVKvUQnyyEs6hZvIIVwTQm\n' +
1371
+ 'v/YpYEH3BsN/SshaQpmh1scN/aHurVfBn0ZaY2EaTBv/u1YsalhbnZglFX6581X7\n' +
1372
+ '9UkEocECAwEAAaNmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAfBgNVHSMEGDAWgBTX\n' +
1373
+ '4eJfUNknv33QnNNfkDsrYrO1uzAdBgNVHQ4EFgQUfGOsnDYUtkLIlP6gKPd/lkbh\n' +
1374
+ 'sn4wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4IBAQCxYKgzCB6gcrYi\n' +
1375
+ '1op0n615lk/hLD5LEmpNYYgqtOOAPf7mGF1VLu+GtDmyAqRnQjr80hFO2Tvdv614\n' +
1376
+ 'u0D5joapjD+aAQIb+OeVVmXYPm3UfUotnUkHGalkofEWkS/7h/dUzKARBdpsKBP9\n' +
1377
+ 'ezSf8GBVRd0EDP8PLK5iplX4B+aQxmIBgYNIXSlgjaNX8SfjzKsRiLPmumWrb7gi\n' +
1378
+ 'lbqkdRuafQ3hj6K+I2JbgEEz2ggNBgUiwJRr+2B511RWHu3wEW86aEbl0+f5crJA\n' +
1379
+ 'XNn0nVq3tl8XMkorbAD+/8dbxMxV5wtMHY7nWsG8TlJ+8Vb9FwC5vIWSYun8u3Rh\n' +
1380
+ 'tOoQ3GAy\n' +
1107
1381
  '-----END CERTIFICATE-----\n'
1108
1382
  ]
1109
1383
  };
@@ -1,32 +1,64 @@
1
1
  'use strict';
2
2
 
3
+ module.exports = {
4
+ 0x00: 'DECIMAL', // aka DECIMAL
5
+ 0x01: 'TINY', // aka TINYINT, 1 byte
6
+ 0x02: 'SHORT', // aka SMALLINT, 2 bytes
7
+ 0x03: 'LONG', // aka INT, 4 bytes
8
+ 0x04: 'FLOAT', // aka FLOAT, 4-8 bytes
9
+ 0x05: 'DOUBLE', // aka DOUBLE, 8 bytes
10
+ 0x06: 'NULL', // NULL (used for prepared statements, I think)
11
+ 0x07: 'TIMESTAMP', // aka TIMESTAMP
12
+ 0x08: 'LONGLONG', // aka BIGINT, 8 bytes
13
+ 0x09: 'INT24', // aka MEDIUMINT, 3 bytes
14
+ 0x0a: 'DATE', // aka DATE
15
+ 0x0b: 'TIME', // aka TIME
16
+ 0x0c: 'DATETIME', // aka DATETIME
17
+ 0x0d: 'YEAR', // aka YEAR, 1 byte (don't ask)
18
+ 0x0e: 'NEWDATE', // aka ?
19
+ 0x0f: 'VARCHAR', // aka VARCHAR (?)
20
+ 0x10: 'BIT', // aka BIT, 1-8 byte
21
+ 0xf5: 'JSON',
22
+ 0xf6: 'NEWDECIMAL', // aka DECIMAL
23
+ 0xf7: 'ENUM', // aka ENUM
24
+ 0xf8: 'SET', // aka SET
25
+ 0xf9: 'TINY_BLOB', // aka TINYBLOB, TINYTEXT
26
+ 0xfa: 'MEDIUM_BLOB', // aka MEDIUMBLOB, MEDIUMTEXT
27
+ 0xfb: 'LONG_BLOB', // aka LONGBLOG, LONGTEXT
28
+ 0xfc: 'BLOB', // aka BLOB, TEXT
29
+ 0xfd: 'VAR_STRING', // aka VARCHAR, VARBINARY
30
+ 0xfe: 'STRING', // aka CHAR, BINARY
31
+ 0xff: 'GEOMETRY' // aka GEOMETRY
32
+ };
33
+
34
+
3
35
  // Manually extracted from mysql-5.5.23/include/mysql_com.h
4
36
  // some more info here: http://dev.mysql.com/doc/refman/5.5/en/c-api-prepared-statement-type-codes.html
5
- exports.DECIMAL = 0x00; // aka DECIMAL (http://dev.mysql.com/doc/refman/5.0/en/precision-math-decimal-changes.html)
6
- exports.TINY = 0x01; // aka TINYINT, 1 byte
7
- exports.SHORT = 0x02; // aka SMALLINT, 2 bytes
8
- exports.LONG = 0x03; // aka INT, 4 bytes
9
- exports.FLOAT = 0x04; // aka FLOAT, 4-8 bytes
10
- exports.DOUBLE = 0x05; // aka DOUBLE, 8 bytes
11
- exports.NULL = 0x06; // NULL (used for prepared statements, I think)
12
- exports.TIMESTAMP = 0x07; // aka TIMESTAMP
13
- exports.LONGLONG = 0x08; // aka BIGINT, 8 bytes
14
- exports.INT24 = 0x09; // aka MEDIUMINT, 3 bytes
15
- exports.DATE = 0x0a; // aka DATE
16
- exports.TIME = 0x0b; // aka TIME
17
- exports.DATETIME = 0x0c; // aka DATETIME
18
- exports.YEAR = 0x0d; // aka YEAR, 1 byte (don't ask)
19
- exports.NEWDATE = 0x0e; // aka ?
20
- exports.VARCHAR = 0x0f; // aka VARCHAR (?)
21
- exports.BIT = 0x10; // aka BIT, 1-8 byte
22
- exports.JSON = 0xf5;
23
- exports.NEWDECIMAL = 0xf6; // aka DECIMAL
24
- exports.ENUM = 0xf7; // aka ENUM
25
- exports.SET = 0xf8; // aka SET
26
- exports.TINY_BLOB = 0xf9; // aka TINYBLOB, TINYTEXT
27
- exports.MEDIUM_BLOB = 0xfa; // aka MEDIUMBLOB, MEDIUMTEXT
28
- exports.LONG_BLOB = 0xfb; // aka LONGBLOG, LONGTEXT
29
- exports.BLOB = 0xfc; // aka BLOB, TEXT
30
- exports.VAR_STRING = 0xfd; // aka VARCHAR, VARBINARY
31
- exports.STRING = 0xfe; // aka CHAR, BINARY
32
- exports.GEOMETRY = 0xff; // aka GEOMETRY
37
+ module.exports.DECIMAL = 0x00; // aka DECIMAL (http://dev.mysql.com/doc/refman/5.0/en/precision-math-decimal-changes.html)
38
+ module.exports.TINY = 0x01; // aka TINYINT, 1 byte
39
+ module.exports.SHORT = 0x02; // aka SMALLINT, 2 bytes
40
+ module.exports.LONG = 0x03; // aka INT, 4 bytes
41
+ module.exports.FLOAT = 0x04; // aka FLOAT, 4-8 bytes
42
+ module.exports.DOUBLE = 0x05; // aka DOUBLE, 8 bytes
43
+ module.exports.NULL = 0x06; // NULL (used for prepared statements, I think)
44
+ module.exports.TIMESTAMP = 0x07; // aka TIMESTAMP
45
+ module.exports.LONGLONG = 0x08; // aka BIGINT, 8 bytes
46
+ module.exports.INT24 = 0x09; // aka MEDIUMINT, 3 bytes
47
+ module.exports.DATE = 0x0a; // aka DATE
48
+ module.exports.TIME = 0x0b; // aka TIME
49
+ module.exports.DATETIME = 0x0c; // aka DATETIME
50
+ module.exports.YEAR = 0x0d; // aka YEAR, 1 byte (don't ask)
51
+ module.exports.NEWDATE = 0x0e; // aka ?
52
+ module.exports.VARCHAR = 0x0f; // aka VARCHAR (?)
53
+ module.exports.BIT = 0x10; // aka BIT, 1-8 byte
54
+ module.exports.JSON = 0xf5;
55
+ module.exports.NEWDECIMAL = 0xf6; // aka DECIMAL
56
+ module.exports.ENUM = 0xf7; // aka ENUM
57
+ module.exports.SET = 0xf8; // aka SET
58
+ module.exports.TINY_BLOB = 0xf9; // aka TINYBLOB, TINYTEXT
59
+ module.exports.MEDIUM_BLOB = 0xfa; // aka MEDIUMBLOB, MEDIUMTEXT
60
+ module.exports.LONG_BLOB = 0xfb; // aka LONGBLOG, LONGTEXT
61
+ module.exports.BLOB = 0xfc; // aka BLOB, TEXT
62
+ module.exports.VAR_STRING = 0xfd; // aka VARCHAR, VARBINARY
63
+ module.exports.STRING = 0xfe; // aka CHAR, BINARY
64
+ module.exports.GEOMETRY = 0xff; // aka GEOMETRY
package/lib/helpers.js CHANGED
@@ -25,7 +25,9 @@ exports.srcEscape = srcEscape;
25
25
  let highlightFn;
26
26
  let cardinalRecommended = false;
27
27
  try {
28
- highlightFn = require('cardinal').highlight;
28
+ // the purpose of this is to prevent projects using Webpack from displaying a warning during runtime if cardinal is not a dependency
29
+ const REQUIRE_TERMINATOR = '';
30
+ highlightFn = require(`cardinal${REQUIRE_TERMINATOR}`).highlight;
29
31
  } catch (err) {
30
32
  highlightFn = text => {
31
33
  if (!cardinalRecommended) {
@@ -0,0 +1,35 @@
1
+ // Copyright (c) 2021, Oracle and/or its affiliates.
2
+
3
+ 'use strict';
4
+
5
+ const Packet = require('../packets/packet');
6
+
7
+ class AuthNextFactor {
8
+ constructor(opts) {
9
+ this.pluginName = opts.pluginName;
10
+ this.pluginData = opts.pluginData;
11
+ }
12
+
13
+ toPacket(encoding) {
14
+ const length = 6 + this.pluginName.length + this.pluginData.length;
15
+ const buffer = Buffer.allocUnsafe(length);
16
+ const packet = new Packet(0, buffer, 0, length);
17
+ packet.offset = 4;
18
+ packet.writeInt8(0x02);
19
+ packet.writeNullTerminatedString(this.pluginName, encoding);
20
+ packet.writeBuffer(this.pluginData);
21
+ return packet;
22
+ }
23
+
24
+ static fromPacket(packet, encoding) {
25
+ packet.readInt8(); // marker
26
+ const name = packet.readNullTerminatedString(encoding);
27
+ const data = packet.readBuffer();
28
+ return new AuthNextFactor({
29
+ pluginName: name,
30
+ pluginData: data
31
+ });
32
+ }
33
+ }
34
+
35
+ module.exports = AuthNextFactor;
@@ -10,8 +10,55 @@ class BinaryRow {
10
10
  this.columns = columns || [];
11
11
  }
12
12
 
13
- toPacket() {
14
- throw new Error('Not implemented');
13
+ static toPacket(columns, encoding) {
14
+ // throw new Error('Not implemented');
15
+ const sequenceId = 0; // TODO remove, this is calculated now in connecton
16
+ let length = 0;
17
+ columns.forEach(val => {
18
+ if (val === null || typeof val === 'undefined') {
19
+ ++length;
20
+ return;
21
+ }
22
+ length += Packet.lengthCodedStringLength(val.toString(10), encoding);
23
+ });
24
+
25
+ length = length + 2;
26
+
27
+ const buffer = Buffer.allocUnsafe(length + 4);
28
+ const packet = new Packet(sequenceId, buffer, 0, length + 4);
29
+ packet.offset = 4;
30
+
31
+ packet.writeInt8(0);
32
+
33
+ let bitmap = 0;
34
+ let bitValue = 1;
35
+ columns.forEach(parameter => {
36
+ if (parameter.type === Types.NULL) {
37
+ bitmap += bitValue;
38
+ }
39
+ bitValue *= 2;
40
+ if (bitValue === 256) {
41
+ packet.writeInt8(bitmap);
42
+ bitmap = 0;
43
+ bitValue = 1;
44
+ }
45
+ });
46
+ if (bitValue !== 1) {
47
+ packet.writeInt8(bitmap);
48
+ }
49
+
50
+ columns.forEach(val => {
51
+ if (val === null) {
52
+ packet.writeNull();
53
+ return;
54
+ }
55
+ if (typeof val === 'undefined') {
56
+ packet.writeInt8(0);
57
+ return;
58
+ }
59
+ packet.writeLengthCodedString(val.toString(10), encoding);
60
+ });
61
+ return packet;
15
62
  }
16
63
 
17
64
  // TODO: complete list of types...
@@ -52,6 +52,7 @@ class ColumnDefinition {
52
52
  );
53
53
  this.columnLength = packet.readInt32();
54
54
  this.columnType = packet.readInt8();
55
+ this.type = this.columnType;
55
56
  this.flags = packet.readInt16();
56
57
  this.decimals = packet.readInt8();
57
58
  }
@@ -67,6 +68,7 @@ class ColumnDefinition {
67
68
  characterSet: this.characterSet,
68
69
  columnLength: this.columnLength,
69
70
  columnType: this.columnType,
71
+ type: this.columnType,
70
72
  flags: this.flags,
71
73
  decimals: this.decimals
72
74
  };