tedious 16.1.0 → 16.3.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 (205) hide show
  1. package/lib/all-headers.js +1 -2
  2. package/lib/all-headers.js.map +1 -0
  3. package/lib/always-encrypted/aead-aes-256-cbc-hmac-algorithm.js +9 -31
  4. package/lib/always-encrypted/aead-aes-256-cbc-hmac-algorithm.js.map +1 -0
  5. package/lib/always-encrypted/aead-aes-256-cbc-hmac-encryption-key.js +9 -24
  6. package/lib/always-encrypted/aead-aes-256-cbc-hmac-encryption-key.js.map +1 -0
  7. package/lib/always-encrypted/cek-entry.js +8 -12
  8. package/lib/always-encrypted/cek-entry.js.map +1 -0
  9. package/lib/always-encrypted/get-parameter-encryption-metadata.js +2 -24
  10. package/lib/always-encrypted/get-parameter-encryption-metadata.js.map +1 -0
  11. package/lib/always-encrypted/key-crypto.js +5 -30
  12. package/lib/always-encrypted/key-crypto.js.map +1 -0
  13. package/lib/always-encrypted/keystore-provider-azure-key-vault.js +11 -72
  14. package/lib/always-encrypted/keystore-provider-azure-key-vault.js.map +1 -0
  15. package/lib/always-encrypted/symmetric-key-cache.js +2 -13
  16. package/lib/always-encrypted/symmetric-key-cache.js.map +1 -0
  17. package/lib/always-encrypted/symmetric-key.js +3 -8
  18. package/lib/always-encrypted/symmetric-key.js.map +1 -0
  19. package/lib/always-encrypted/types.js +19 -27
  20. package/lib/always-encrypted/types.js.map +1 -0
  21. package/lib/always-encrypted/utils.js +2 -6
  22. package/lib/always-encrypted/utils.js.map +1 -0
  23. package/lib/bulk-load-payload.js +7 -15
  24. package/lib/bulk-load-payload.js.map +1 -0
  25. package/lib/bulk-load.js +58 -131
  26. package/lib/bulk-load.js.map +1 -0
  27. package/lib/collation.js +7 -15
  28. package/lib/collation.js.map +1 -0
  29. package/lib/connection.js +297 -536
  30. package/lib/connection.js.map +1 -0
  31. package/lib/connector.js +6 -37
  32. package/lib/connector.js.map +1 -0
  33. package/lib/data-type.js +2 -43
  34. package/lib/data-type.js.map +1 -0
  35. package/lib/data-types/bigint.js +1 -15
  36. package/lib/data-types/bigint.js.map +1 -0
  37. package/lib/data-types/binary.js +1 -12
  38. package/lib/data-types/binary.js.map +1 -0
  39. package/lib/data-types/bit.js +1 -11
  40. package/lib/data-types/bit.js.map +1 -0
  41. package/lib/data-types/bitn.js +1 -7
  42. package/lib/data-types/bitn.js.map +1 -0
  43. package/lib/data-types/char.js +1 -20
  44. package/lib/data-types/char.js.map +1 -0
  45. package/lib/data-types/date.js +1 -15
  46. package/lib/data-types/date.js.map +1 -0
  47. package/lib/data-types/datetime.js +3 -20
  48. package/lib/data-types/datetime.js.map +1 -0
  49. package/lib/data-types/datetime2.js +1 -26
  50. package/lib/data-types/datetime2.js.map +1 -0
  51. package/lib/data-types/datetimen.js +1 -7
  52. package/lib/data-types/datetimen.js.map +1 -0
  53. package/lib/data-types/datetimeoffset.js +1 -23
  54. package/lib/data-types/datetimeoffset.js.map +1 -0
  55. package/lib/data-types/decimal.js +1 -18
  56. package/lib/data-types/decimal.js.map +1 -0
  57. package/lib/data-types/decimaln.js +1 -7
  58. package/lib/data-types/decimaln.js.map +1 -0
  59. package/lib/data-types/float.js +1 -13
  60. package/lib/data-types/float.js.map +1 -0
  61. package/lib/data-types/floatn.js +1 -7
  62. package/lib/data-types/floatn.js.map +1 -0
  63. package/lib/data-types/image.js +1 -10
  64. package/lib/data-types/image.js.map +1 -0
  65. package/lib/data-types/int.js +1 -14
  66. package/lib/data-types/int.js.map +1 -0
  67. package/lib/data-types/intn.js +1 -7
  68. package/lib/data-types/intn.js.map +1 -0
  69. package/lib/data-types/money.js +1 -12
  70. package/lib/data-types/money.js.map +1 -0
  71. package/lib/data-types/moneyn.js +1 -7
  72. package/lib/data-types/moneyn.js.map +1 -0
  73. package/lib/data-types/nchar.js +1 -14
  74. package/lib/data-types/nchar.js.map +1 -0
  75. package/lib/data-types/ntext.js +1 -10
  76. package/lib/data-types/ntext.js.map +1 -0
  77. package/lib/data-types/null.js +1 -7
  78. package/lib/data-types/null.js.map +1 -0
  79. package/lib/data-types/numeric.js +1 -18
  80. package/lib/data-types/numeric.js.map +1 -0
  81. package/lib/data-types/numericn.js +1 -7
  82. package/lib/data-types/numericn.js.map +1 -0
  83. package/lib/data-types/nvarchar.js +1 -22
  84. package/lib/data-types/nvarchar.js.map +1 -0
  85. package/lib/data-types/real.js +1 -13
  86. package/lib/data-types/real.js.map +1 -0
  87. package/lib/data-types/smalldatetime.js +1 -14
  88. package/lib/data-types/smalldatetime.js.map +1 -0
  89. package/lib/data-types/smallint.js +1 -14
  90. package/lib/data-types/smallint.js.map +1 -0
  91. package/lib/data-types/smallmoney.js +1 -13
  92. package/lib/data-types/smallmoney.js.map +1 -0
  93. package/lib/data-types/sql-variant.js +1 -6
  94. package/lib/data-types/sql-variant.js.map +1 -0
  95. package/lib/data-types/text.js +1 -18
  96. package/lib/data-types/text.js.map +1 -0
  97. package/lib/data-types/time.js +1 -22
  98. package/lib/data-types/time.js.map +1 -0
  99. package/lib/data-types/tinyint.js +1 -14
  100. package/lib/data-types/tinyint.js.map +1 -0
  101. package/lib/data-types/tvp.js +11 -27
  102. package/lib/data-types/tvp.js.map +1 -0
  103. package/lib/data-types/udt.js +1 -7
  104. package/lib/data-types/udt.js.map +1 -0
  105. package/lib/data-types/uniqueidentifier.js +1 -11
  106. package/lib/data-types/uniqueidentifier.js.map +1 -0
  107. package/lib/data-types/varbinary.js +1 -22
  108. package/lib/data-types/varbinary.js.map +1 -0
  109. package/lib/data-types/varchar.js +1 -23
  110. package/lib/data-types/varchar.js.map +1 -0
  111. package/lib/data-types/xml.js +1 -7
  112. package/lib/data-types/xml.js.map +1 -0
  113. package/lib/debug.js +4 -16
  114. package/lib/debug.js.map +1 -0
  115. package/lib/errors/abort-error.js +2 -5
  116. package/lib/errors/abort-error.js.map +1 -0
  117. package/lib/errors/timeout-error.js +2 -5
  118. package/lib/errors/timeout-error.js.map +1 -0
  119. package/lib/errors.js +10 -16
  120. package/lib/errors.js.map +1 -0
  121. package/lib/guid-parser.js +1 -7
  122. package/lib/guid-parser.js.map +1 -0
  123. package/lib/incoming-message-stream.js +9 -29
  124. package/lib/incoming-message-stream.js.map +1 -0
  125. package/lib/instance-lookup.js +3 -34
  126. package/lib/instance-lookup.js.map +1 -0
  127. package/lib/library.js +1 -1
  128. package/lib/library.js.map +1 -0
  129. package/lib/login7-payload.js +99 -100
  130. package/lib/login7-payload.js.map +1 -0
  131. package/lib/message-io.js +17 -45
  132. package/lib/message-io.js.map +1 -0
  133. package/lib/message.js +4 -8
  134. package/lib/message.js.map +1 -0
  135. package/lib/metadata-parser.js +1 -22
  136. package/lib/metadata-parser.js.map +1 -0
  137. package/lib/ntlm-payload.js +2 -22
  138. package/lib/ntlm-payload.js.map +1 -0
  139. package/lib/ntlm.js +1 -4
  140. package/lib/ntlm.js.map +1 -0
  141. package/lib/outgoing-message-stream.js +12 -21
  142. package/lib/outgoing-message-stream.js.map +1 -0
  143. package/lib/packet.js +2 -47
  144. package/lib/packet.js.map +1 -0
  145. package/lib/prelogin-payload.js +11 -54
  146. package/lib/prelogin-payload.js.map +1 -0
  147. package/lib/request.js +88 -66
  148. package/lib/request.js.map +1 -0
  149. package/lib/rpcrequest-payload.js +13 -34
  150. package/lib/rpcrequest-payload.js.map +1 -0
  151. package/lib/sender.js +1 -24
  152. package/lib/sender.js.map +1 -0
  153. package/lib/special-stored-procedure.js +1 -1
  154. package/lib/special-stored-procedure.js.map +1 -0
  155. package/lib/sqlbatch-payload.js +5 -18
  156. package/lib/sqlbatch-payload.js.map +1 -0
  157. package/lib/tds-versions.js +3 -3
  158. package/lib/tds-versions.js.map +1 -0
  159. package/lib/tedious.js +1 -12
  160. package/lib/tedious.js.map +1 -0
  161. package/lib/token/colmetadata-token-parser.js +1 -17
  162. package/lib/token/colmetadata-token-parser.js.map +1 -0
  163. package/lib/token/done-token-parser.js +2 -8
  164. package/lib/token/done-token-parser.js.map +1 -0
  165. package/lib/token/env-change-token-parser.js +7 -28
  166. package/lib/token/env-change-token-parser.js.map +1 -0
  167. package/lib/token/feature-ext-ack-parser.js +1 -10
  168. package/lib/token/feature-ext-ack-parser.js.map +1 -0
  169. package/lib/token/fedauth-info-parser.js +2 -10
  170. package/lib/token/fedauth-info-parser.js.map +1 -0
  171. package/lib/token/handler.js +39 -149
  172. package/lib/token/handler.js.map +1 -0
  173. package/lib/token/infoerror-token-parser.js +1 -5
  174. package/lib/token/infoerror-token-parser.js.map +1 -0
  175. package/lib/token/loginack-token-parser.js +1 -6
  176. package/lib/token/loginack-token-parser.js.map +1 -0
  177. package/lib/token/nbcrow-token-parser.js +2 -15
  178. package/lib/token/nbcrow-token-parser.js.map +1 -0
  179. package/lib/token/order-token-parser.js +2 -7
  180. package/lib/token/order-token-parser.js.map +1 -0
  181. package/lib/token/returnstatus-token-parser.js +2 -4
  182. package/lib/token/returnstatus-token-parser.js.map +1 -0
  183. package/lib/token/returnvalue-token-parser.js +4 -9
  184. package/lib/token/returnvalue-token-parser.js.map +1 -0
  185. package/lib/token/row-token-parser.js +2 -11
  186. package/lib/token/row-token-parser.js.map +1 -0
  187. package/lib/token/sspi-token-parser.js +1 -5
  188. package/lib/token/sspi-token-parser.js.map +1 -0
  189. package/lib/token/stream-parser.js +24 -86
  190. package/lib/token/stream-parser.js.map +1 -0
  191. package/lib/token/token-stream-parser.js +4 -13
  192. package/lib/token/token-stream-parser.js.map +1 -0
  193. package/lib/token/token.js +88 -168
  194. package/lib/token/token.js.map +1 -0
  195. package/lib/tracking-buffer/writable-tracking-buffer.js +20 -60
  196. package/lib/tracking-buffer/writable-tracking-buffer.js.map +1 -0
  197. package/lib/transaction.js +9 -33
  198. package/lib/transaction.js.map +1 -0
  199. package/lib/transient-error-lookup.js +1 -4
  200. package/lib/transient-error-lookup.js.map +1 -0
  201. package/lib/utils/with-timeout.js +1 -9
  202. package/lib/utils/with-timeout.js.map +1 -0
  203. package/lib/value-parser.js +1 -143
  204. package/lib/value-parser.js.map +1 -0
  205. package/package.json +27 -71
@@ -4,37 +4,21 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
-
8
7
  var _token = require("./token");
9
-
10
8
  var _colmetadataTokenParser = _interopRequireDefault(require("./colmetadata-token-parser"));
11
-
12
9
  var _doneTokenParser = require("./done-token-parser");
13
-
14
10
  var _envChangeTokenParser = _interopRequireDefault(require("./env-change-token-parser"));
15
-
16
11
  var _infoerrorTokenParser = require("./infoerror-token-parser");
17
-
18
12
  var _fedauthInfoParser = _interopRequireDefault(require("./fedauth-info-parser"));
19
-
20
13
  var _featureExtAckParser = _interopRequireDefault(require("./feature-ext-ack-parser"));
21
-
22
14
  var _loginackTokenParser = _interopRequireDefault(require("./loginack-token-parser"));
23
-
24
15
  var _orderTokenParser = _interopRequireDefault(require("./order-token-parser"));
25
-
26
16
  var _returnstatusTokenParser = _interopRequireDefault(require("./returnstatus-token-parser"));
27
-
28
17
  var _returnvalueTokenParser = _interopRequireDefault(require("./returnvalue-token-parser"));
29
-
30
18
  var _rowTokenParser = _interopRequireDefault(require("./row-token-parser"));
31
-
32
19
  var _nbcrowTokenParser = _interopRequireDefault(require("./nbcrow-token-parser"));
33
-
34
20
  var _sspiTokenParser = _interopRequireDefault(require("./sspi-token-parser"));
35
-
36
21
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
37
-
38
22
  const tokenParsers = {
39
23
  [_token.TYPE.DONE]: _doneTokenParser.doneParser,
40
24
  [_token.TYPE.DONEINPROC]: _doneTokenParser.doneInProcParser,
@@ -50,47 +34,43 @@ const tokenParsers = {
50
34
  [_token.TYPE.RETURNVALUE]: _returnvalueTokenParser.default,
51
35
  [_token.TYPE.SSPI]: _sspiTokenParser.default
52
36
  };
53
-
54
37
  class StreamBuffer {
38
+ iterator;
39
+ buffer;
40
+ position;
55
41
  constructor(iterable) {
56
- this.iterator = void 0;
57
- this.buffer = void 0;
58
- this.position = void 0;
59
42
  this.iterator = (iterable[Symbol.asyncIterator] || iterable[Symbol.iterator]).call(iterable);
60
43
  this.buffer = Buffer.alloc(0);
61
44
  this.position = 0;
62
45
  }
63
-
64
46
  async waitForChunk() {
65
47
  const result = await this.iterator.next();
66
-
67
48
  if (result.done) {
68
49
  throw new Error('unexpected end of data');
69
50
  }
70
-
71
51
  if (this.position === this.buffer.length) {
72
52
  this.buffer = result.value;
73
53
  } else {
74
54
  this.buffer = Buffer.concat([this.buffer.slice(this.position), result.value]);
75
55
  }
76
-
77
56
  this.position = 0;
78
57
  }
79
-
80
58
  }
81
-
82
59
  class Parser {
60
+ debug;
61
+ colMetadata;
62
+ options;
63
+ suspended;
64
+ next;
65
+ streamBuffer;
83
66
  static async *parseTokens(iterable, debug, options, colMetadata = []) {
84
67
  let token;
85
-
86
68
  const onDoneParsing = t => {
87
69
  token = t;
88
70
  };
89
-
90
71
  const streamBuffer = new StreamBuffer(iterable);
91
72
  const parser = new Parser(streamBuffer, debug, options);
92
73
  parser.colMetadata = colMetadata;
93
-
94
74
  while (true) {
95
75
  try {
96
76
  await streamBuffer.waitForChunk();
@@ -98,29 +78,25 @@ class Parser {
98
78
  if (streamBuffer.position === streamBuffer.buffer.length) {
99
79
  return;
100
80
  }
101
-
102
81
  throw err;
103
82
  }
104
-
105
83
  if (parser.suspended) {
106
84
  // Unsuspend and continue from where ever we left off.
107
85
  parser.suspended = false;
108
86
  const next = parser.next;
109
- next(); // Check if a new token was parsed after unsuspension.
87
+ next();
110
88
 
89
+ // Check if a new token was parsed after unsuspension.
111
90
  if (!parser.suspended && token) {
112
91
  if (token instanceof _token.ColMetadataToken) {
113
92
  parser.colMetadata = token.columns;
114
93
  }
115
-
116
94
  yield token;
117
95
  }
118
96
  }
119
-
120
97
  while (!parser.suspended && parser.position + 1 <= parser.buffer.length) {
121
98
  const type = parser.buffer.readUInt8(parser.position);
122
99
  parser.position += 1;
123
-
124
100
  if (type === _token.TYPE.COLMETADATA) {
125
101
  const token = await (0, _colmetadataTokenParser.default)(parser);
126
102
  parser.colMetadata = token.columns;
@@ -130,13 +106,13 @@ class Parser {
130
106
  } else if (type === _token.TYPE.NBCROW) {
131
107
  yield (0, _nbcrowTokenParser.default)(parser);
132
108
  } else if (tokenParsers[type]) {
133
- tokenParsers[type](parser, parser.options, onDoneParsing); // Check if a new token was parsed after unsuspension.
109
+ tokenParsers[type](parser, parser.options, onDoneParsing);
134
110
 
111
+ // Check if a new token was parsed after unsuspension.
135
112
  if (!parser.suspended && token) {
136
113
  if (token instanceof _token.ColMetadataToken) {
137
114
  parser.colMetadata = token.columns;
138
115
  }
139
-
140
116
  yield token;
141
117
  }
142
118
  } else {
@@ -145,14 +121,7 @@ class Parser {
145
121
  }
146
122
  }
147
123
  }
148
-
149
124
  constructor(streamBuffer, debug, options) {
150
- this.debug = void 0;
151
- this.colMetadata = void 0;
152
- this.options = void 0;
153
- this.suspended = void 0;
154
- this.next = void 0;
155
- this.streamBuffer = void 0;
156
125
  this.debug = debug;
157
126
  this.colMetadata = [];
158
127
  this.options = options;
@@ -160,24 +129,19 @@ class Parser {
160
129
  this.suspended = false;
161
130
  this.next = undefined;
162
131
  }
163
-
164
132
  get buffer() {
165
133
  return this.streamBuffer.buffer;
166
134
  }
167
-
168
135
  get position() {
169
136
  return this.streamBuffer.position;
170
137
  }
171
-
172
138
  set position(value) {
173
139
  this.streamBuffer.position = value;
174
140
  }
175
-
176
141
  suspend(next) {
177
142
  this.suspended = true;
178
143
  this.next = next;
179
144
  }
180
-
181
145
  awaitData(length, callback) {
182
146
  if (this.position + length <= this.buffer.length) {
183
147
  callback();
@@ -187,7 +151,6 @@ class Parser {
187
151
  });
188
152
  }
189
153
  }
190
-
191
154
  readInt8(callback) {
192
155
  this.awaitData(1, () => {
193
156
  const data = this.buffer.readInt8(this.position);
@@ -195,7 +158,6 @@ class Parser {
195
158
  callback(data);
196
159
  });
197
160
  }
198
-
199
161
  readUInt8(callback) {
200
162
  this.awaitData(1, () => {
201
163
  const data = this.buffer.readUInt8(this.position);
@@ -203,7 +165,6 @@ class Parser {
203
165
  callback(data);
204
166
  });
205
167
  }
206
-
207
168
  readInt16LE(callback) {
208
169
  this.awaitData(2, () => {
209
170
  const data = this.buffer.readInt16LE(this.position);
@@ -211,7 +172,6 @@ class Parser {
211
172
  callback(data);
212
173
  });
213
174
  }
214
-
215
175
  readInt16BE(callback) {
216
176
  this.awaitData(2, () => {
217
177
  const data = this.buffer.readInt16BE(this.position);
@@ -219,7 +179,6 @@ class Parser {
219
179
  callback(data);
220
180
  });
221
181
  }
222
-
223
182
  readUInt16LE(callback) {
224
183
  this.awaitData(2, () => {
225
184
  const data = this.buffer.readUInt16LE(this.position);
@@ -227,7 +186,6 @@ class Parser {
227
186
  callback(data);
228
187
  });
229
188
  }
230
-
231
189
  readUInt16BE(callback) {
232
190
  this.awaitData(2, () => {
233
191
  const data = this.buffer.readUInt16BE(this.position);
@@ -235,7 +193,6 @@ class Parser {
235
193
  callback(data);
236
194
  });
237
195
  }
238
-
239
196
  readInt32LE(callback) {
240
197
  this.awaitData(4, () => {
241
198
  const data = this.buffer.readInt32LE(this.position);
@@ -243,7 +200,6 @@ class Parser {
243
200
  callback(data);
244
201
  });
245
202
  }
246
-
247
203
  readInt32BE(callback) {
248
204
  this.awaitData(4, () => {
249
205
  const data = this.buffer.readInt32BE(this.position);
@@ -251,7 +207,6 @@ class Parser {
251
207
  callback(data);
252
208
  });
253
209
  }
254
-
255
210
  readUInt32LE(callback) {
256
211
  this.awaitData(4, () => {
257
212
  const data = this.buffer.readUInt32LE(this.position);
@@ -259,7 +214,6 @@ class Parser {
259
214
  callback(data);
260
215
  });
261
216
  }
262
-
263
217
  readUInt32BE(callback) {
264
218
  this.awaitData(4, () => {
265
219
  const data = this.buffer.readUInt32BE(this.position);
@@ -267,7 +221,6 @@ class Parser {
267
221
  callback(data);
268
222
  });
269
223
  }
270
-
271
224
  readBigInt64LE(callback) {
272
225
  this.awaitData(8, () => {
273
226
  const data = this.buffer.readBigInt64LE(this.position);
@@ -275,7 +228,6 @@ class Parser {
275
228
  callback(data);
276
229
  });
277
230
  }
278
-
279
231
  readInt64LE(callback) {
280
232
  this.awaitData(8, () => {
281
233
  const data = Math.pow(2, 32) * this.buffer.readInt32LE(this.position + 4) + ((this.buffer[this.position + 4] & 0x80) === 0x80 ? 1 : -1) * this.buffer.readUInt32LE(this.position);
@@ -283,7 +235,6 @@ class Parser {
283
235
  callback(data);
284
236
  });
285
237
  }
286
-
287
238
  readInt64BE(callback) {
288
239
  this.awaitData(8, () => {
289
240
  const data = Math.pow(2, 32) * this.buffer.readInt32BE(this.position) + ((this.buffer[this.position] & 0x80) === 0x80 ? 1 : -1) * this.buffer.readUInt32BE(this.position + 4);
@@ -291,7 +242,6 @@ class Parser {
291
242
  callback(data);
292
243
  });
293
244
  }
294
-
295
245
  readBigUInt64LE(callback) {
296
246
  this.awaitData(8, () => {
297
247
  const data = this.buffer.readBigUInt64LE(this.position);
@@ -299,7 +249,6 @@ class Parser {
299
249
  callback(data);
300
250
  });
301
251
  }
302
-
303
252
  readUInt64LE(callback) {
304
253
  this.awaitData(8, () => {
305
254
  const data = Math.pow(2, 32) * this.buffer.readUInt32LE(this.position + 4) + this.buffer.readUInt32LE(this.position);
@@ -307,7 +256,6 @@ class Parser {
307
256
  callback(data);
308
257
  });
309
258
  }
310
-
311
259
  readUInt64BE(callback) {
312
260
  this.awaitData(8, () => {
313
261
  const data = Math.pow(2, 32) * this.buffer.readUInt32BE(this.position) + this.buffer.readUInt32BE(this.position + 4);
@@ -315,7 +263,6 @@ class Parser {
315
263
  callback(data);
316
264
  });
317
265
  }
318
-
319
266
  readFloatLE(callback) {
320
267
  this.awaitData(4, () => {
321
268
  const data = this.buffer.readFloatLE(this.position);
@@ -323,7 +270,6 @@ class Parser {
323
270
  callback(data);
324
271
  });
325
272
  }
326
-
327
273
  readFloatBE(callback) {
328
274
  this.awaitData(4, () => {
329
275
  const data = this.buffer.readFloatBE(this.position);
@@ -331,7 +277,6 @@ class Parser {
331
277
  callback(data);
332
278
  });
333
279
  }
334
-
335
280
  readDoubleLE(callback) {
336
281
  this.awaitData(8, () => {
337
282
  const data = this.buffer.readDoubleLE(this.position);
@@ -339,7 +284,6 @@ class Parser {
339
284
  callback(data);
340
285
  });
341
286
  }
342
-
343
287
  readDoubleBE(callback) {
344
288
  this.awaitData(8, () => {
345
289
  const data = this.buffer.readDoubleBE(this.position);
@@ -347,7 +291,6 @@ class Parser {
347
291
  callback(data);
348
292
  });
349
293
  }
350
-
351
294
  readUInt24LE(callback) {
352
295
  this.awaitData(3, () => {
353
296
  const low = this.buffer.readUInt16LE(this.position);
@@ -356,7 +299,6 @@ class Parser {
356
299
  callback(low | high << 16);
357
300
  });
358
301
  }
359
-
360
302
  readUInt40LE(callback) {
361
303
  this.awaitData(5, () => {
362
304
  const low = this.buffer.readUInt32LE(this.position);
@@ -365,7 +307,6 @@ class Parser {
365
307
  callback(0x100000000 * high + low);
366
308
  });
367
309
  }
368
-
369
310
  readUNumeric64LE(callback) {
370
311
  this.awaitData(8, () => {
371
312
  const low = this.buffer.readUInt32LE(this.position);
@@ -374,7 +315,6 @@ class Parser {
374
315
  callback(0x100000000 * high + low);
375
316
  });
376
317
  }
377
-
378
318
  readUNumeric96LE(callback) {
379
319
  this.awaitData(12, () => {
380
320
  const dword1 = this.buffer.readUInt32LE(this.position);
@@ -384,7 +324,6 @@ class Parser {
384
324
  callback(dword1 + 0x100000000 * dword2 + 0x100000000 * 0x100000000 * dword3);
385
325
  });
386
326
  }
387
-
388
327
  readUNumeric128LE(callback) {
389
328
  this.awaitData(16, () => {
390
329
  const dword1 = this.buffer.readUInt32LE(this.position);
@@ -394,8 +333,9 @@ class Parser {
394
333
  this.position += 16;
395
334
  callback(dword1 + 0x100000000 * dword2 + 0x100000000 * 0x100000000 * dword3 + 0x100000000 * 0x100000000 * 0x100000000 * dword4);
396
335
  });
397
- } // Variable length data
336
+ }
398
337
 
338
+ // Variable length data
399
339
 
400
340
  readBuffer(length, callback) {
401
341
  this.awaitData(length, () => {
@@ -403,43 +343,41 @@ class Parser {
403
343
  this.position += length;
404
344
  callback(data);
405
345
  });
406
- } // Read a Unicode String (BVARCHAR)
407
-
346
+ }
408
347
 
348
+ // Read a Unicode String (BVARCHAR)
409
349
  readBVarChar(callback) {
410
350
  this.readUInt8(length => {
411
351
  this.readBuffer(length * 2, data => {
412
352
  callback(data.toString('ucs2'));
413
353
  });
414
354
  });
415
- } // Read a Unicode String (USVARCHAR)
416
-
355
+ }
417
356
 
357
+ // Read a Unicode String (USVARCHAR)
418
358
  readUsVarChar(callback) {
419
359
  this.readUInt16LE(length => {
420
360
  this.readBuffer(length * 2, data => {
421
361
  callback(data.toString('ucs2'));
422
362
  });
423
363
  });
424
- } // Read binary data (BVARBYTE)
425
-
364
+ }
426
365
 
366
+ // Read binary data (BVARBYTE)
427
367
  readBVarByte(callback) {
428
368
  this.readUInt8(length => {
429
369
  this.readBuffer(length, callback);
430
370
  });
431
- } // Read binary data (USVARBYTE)
432
-
371
+ }
433
372
 
373
+ // Read binary data (USVARBYTE)
434
374
  readUsVarByte(callback) {
435
375
  this.readUInt16LE(length => {
436
376
  this.readBuffer(length, callback);
437
377
  });
438
378
  }
439
-
440
379
  }
441
-
442
380
  var _default = Parser;
443
381
  exports.default = _default;
444
382
  module.exports = Parser;
445
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ0b2tlblBhcnNlcnMiLCJUWVBFIiwiRE9ORSIsImRvbmVQYXJzZXIiLCJET05FSU5QUk9DIiwiZG9uZUluUHJvY1BhcnNlciIsIkRPTkVQUk9DIiwiZG9uZVByb2NQYXJzZXIiLCJFTlZDSEFOR0UiLCJlbnZDaGFuZ2VQYXJzZXIiLCJFUlJPUiIsImVycm9yUGFyc2VyIiwiRkVEQVVUSElORk8iLCJmZWRBdXRoSW5mb1BhcnNlciIsIkZFQVRVUkVFWFRBQ0siLCJmZWF0dXJlRXh0QWNrUGFyc2VyIiwiSU5GTyIsImluZm9QYXJzZXIiLCJMT0dJTkFDSyIsImxvZ2luQWNrUGFyc2VyIiwiT1JERVIiLCJvcmRlclBhcnNlciIsIlJFVFVSTlNUQVRVUyIsInJldHVyblN0YXR1c1BhcnNlciIsIlJFVFVSTlZBTFVFIiwicmV0dXJuVmFsdWVQYXJzZXIiLCJTU1BJIiwic3NwaVBhcnNlciIsIlN0cmVhbUJ1ZmZlciIsImNvbnN0cnVjdG9yIiwiaXRlcmFibGUiLCJpdGVyYXRvciIsImJ1ZmZlciIsInBvc2l0aW9uIiwiU3ltYm9sIiwiYXN5bmNJdGVyYXRvciIsImNhbGwiLCJCdWZmZXIiLCJhbGxvYyIsIndhaXRGb3JDaHVuayIsInJlc3VsdCIsIm5leHQiLCJkb25lIiwiRXJyb3IiLCJsZW5ndGgiLCJ2YWx1ZSIsImNvbmNhdCIsInNsaWNlIiwiUGFyc2VyIiwicGFyc2VUb2tlbnMiLCJkZWJ1ZyIsIm9wdGlvbnMiLCJjb2xNZXRhZGF0YSIsInRva2VuIiwib25Eb25lUGFyc2luZyIsInQiLCJzdHJlYW1CdWZmZXIiLCJwYXJzZXIiLCJlcnIiLCJzdXNwZW5kZWQiLCJDb2xNZXRhZGF0YVRva2VuIiwiY29sdW1ucyIsInR5cGUiLCJyZWFkVUludDgiLCJDT0xNRVRBREFUQSIsIlJPVyIsIk5CQ1JPVyIsInVuZGVmaW5lZCIsInN1c3BlbmQiLCJhd2FpdERhdGEiLCJjYWxsYmFjayIsInJlYWRJbnQ4IiwiZGF0YSIsInJlYWRJbnQxNkxFIiwicmVhZEludDE2QkUiLCJyZWFkVUludDE2TEUiLCJyZWFkVUludDE2QkUiLCJyZWFkSW50MzJMRSIsInJlYWRJbnQzMkJFIiwicmVhZFVJbnQzMkxFIiwicmVhZFVJbnQzMkJFIiwicmVhZEJpZ0ludDY0TEUiLCJyZWFkSW50NjRMRSIsIk1hdGgiLCJwb3ciLCJyZWFkSW50NjRCRSIsInJlYWRCaWdVSW50NjRMRSIsInJlYWRVSW50NjRMRSIsInJlYWRVSW50NjRCRSIsInJlYWRGbG9hdExFIiwicmVhZEZsb2F0QkUiLCJyZWFkRG91YmxlTEUiLCJyZWFkRG91YmxlQkUiLCJyZWFkVUludDI0TEUiLCJsb3ciLCJoaWdoIiwicmVhZFVJbnQ0MExFIiwicmVhZFVOdW1lcmljNjRMRSIsInJlYWRVTnVtZXJpYzk2TEUiLCJkd29yZDEiLCJkd29yZDIiLCJkd29yZDMiLCJyZWFkVU51bWVyaWMxMjhMRSIsImR3b3JkNCIsInJlYWRCdWZmZXIiLCJyZWFkQlZhckNoYXIiLCJ0b1N0cmluZyIsInJlYWRVc1ZhckNoYXIiLCJyZWFkQlZhckJ5dGUiLCJyZWFkVXNWYXJCeXRlIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90b2tlbi9zdHJlYW0tcGFyc2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBEZWJ1ZyBmcm9tICcuLi9kZWJ1Zyc7XG5pbXBvcnQgeyBJbnRlcm5hbENvbm5lY3Rpb25PcHRpb25zIH0gZnJvbSAnLi4vY29ubmVjdGlvbic7XG5cbmltcG9ydCB7IFRZUEUsIFRva2VuLCBDb2xNZXRhZGF0YVRva2VuIH0gZnJvbSAnLi90b2tlbic7XG5cbmltcG9ydCBjb2xNZXRhZGF0YVBhcnNlciwgeyBDb2x1bW5NZXRhZGF0YSB9IGZyb20gJy4vY29sbWV0YWRhdGEtdG9rZW4tcGFyc2VyJztcbmltcG9ydCB7IGRvbmVQYXJzZXIsIGRvbmVJblByb2NQYXJzZXIsIGRvbmVQcm9jUGFyc2VyIH0gZnJvbSAnLi9kb25lLXRva2VuLXBhcnNlcic7XG5pbXBvcnQgZW52Q2hhbmdlUGFyc2VyIGZyb20gJy4vZW52LWNoYW5nZS10b2tlbi1wYXJzZXInO1xuaW1wb3J0IHsgZXJyb3JQYXJzZXIsIGluZm9QYXJzZXIgfSBmcm9tICcuL2luZm9lcnJvci10b2tlbi1wYXJzZXInO1xuaW1wb3J0IGZlZEF1dGhJbmZvUGFyc2VyIGZyb20gJy4vZmVkYXV0aC1pbmZvLXBhcnNlcic7XG5pbXBvcnQgZmVhdHVyZUV4dEFja1BhcnNlciBmcm9tICcuL2ZlYXR1cmUtZXh0LWFjay1wYXJzZXInO1xuaW1wb3J0IGxvZ2luQWNrUGFyc2VyIGZyb20gJy4vbG9naW5hY2stdG9rZW4tcGFyc2VyJztcbmltcG9ydCBvcmRlclBhcnNlciBmcm9tICcuL29yZGVyLXRva2VuLXBhcnNlcic7XG5pbXBvcnQgcmV0dXJuU3RhdHVzUGFyc2VyIGZyb20gJy4vcmV0dXJuc3RhdHVzLXRva2VuLXBhcnNlcic7XG5pbXBvcnQgcmV0dXJuVmFsdWVQYXJzZXIgZnJvbSAnLi9yZXR1cm52YWx1ZS10b2tlbi1wYXJzZXInO1xuaW1wb3J0IHJvd1BhcnNlciBmcm9tICcuL3Jvdy10b2tlbi1wYXJzZXInO1xuaW1wb3J0IG5iY1Jvd1BhcnNlciBmcm9tICcuL25iY3Jvdy10b2tlbi1wYXJzZXInO1xuaW1wb3J0IHNzcGlQYXJzZXIgZnJvbSAnLi9zc3BpLXRva2VuLXBhcnNlcic7XG5cbmNvbnN0IHRva2VuUGFyc2VycyA9IHtcbiAgW1RZUEUuRE9ORV06IGRvbmVQYXJzZXIsXG4gIFtUWVBFLkRPTkVJTlBST0NdOiBkb25lSW5Qcm9jUGFyc2VyLFxuICBbVFlQRS5ET05FUFJPQ106IGRvbmVQcm9jUGFyc2VyLFxuICBbVFlQRS5FTlZDSEFOR0VdOiBlbnZDaGFuZ2VQYXJzZXIsXG4gIFtUWVBFLkVSUk9SXTogZXJyb3JQYXJzZXIsXG4gIFtUWVBFLkZFREFVVEhJTkZPXTogZmVkQXV0aEluZm9QYXJzZXIsXG4gIFtUWVBFLkZFQVRVUkVFWFRBQ0tdOiBmZWF0dXJlRXh0QWNrUGFyc2VyLFxuICBbVFlQRS5JTkZPXTogaW5mb1BhcnNlcixcbiAgW1RZUEUuTE9HSU5BQ0tdOiBsb2dpbkFja1BhcnNlcixcbiAgW1RZUEUuT1JERVJdOiBvcmRlclBhcnNlcixcbiAgW1RZUEUuUkVUVVJOU1RBVFVTXTogcmV0dXJuU3RhdHVzUGFyc2VyLFxuICBbVFlQRS5SRVRVUk5WQUxVRV06IHJldHVyblZhbHVlUGFyc2VyLFxuICBbVFlQRS5TU1BJXTogc3NwaVBhcnNlclxufTtcblxuZXhwb3J0IHR5cGUgUGFyc2VyT3B0aW9ucyA9IFBpY2s8SW50ZXJuYWxDb25uZWN0aW9uT3B0aW9ucywgJ3VzZVVUQycgfCAnbG93ZXJDYXNlR3VpZHMnIHwgJ3Rkc1ZlcnNpb24nIHwgJ3VzZUNvbHVtbk5hbWVzJyB8ICdjb2x1bW5OYW1lUmVwbGFjZXInIHwgJ2NhbWVsQ2FzZUNvbHVtbnMnPjtcblxuY2xhc3MgU3RyZWFtQnVmZmVyIHtcbiAgaXRlcmF0b3I6IEFzeW5jSXRlcmF0b3I8QnVmZmVyLCBhbnksIHVuZGVmaW5lZD4gfCBJdGVyYXRvcjxCdWZmZXIsIGFueSwgdW5kZWZpbmVkPjtcbiAgYnVmZmVyOiBCdWZmZXI7XG4gIHBvc2l0aW9uOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoaXRlcmFibGU6IEFzeW5jSXRlcmFibGU8QnVmZmVyPiB8IEl0ZXJhYmxlPEJ1ZmZlcj4pIHtcbiAgICB0aGlzLml0ZXJhdG9yID0gKChpdGVyYWJsZSBhcyBBc3luY0l0ZXJhYmxlPEJ1ZmZlcj4pW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSB8fCAoaXRlcmFibGUgYXMgSXRlcmFibGU8QnVmZmVyPilbU3ltYm9sLml0ZXJhdG9yXSkuY2FsbChpdGVyYWJsZSk7XG5cbiAgICB0aGlzLmJ1ZmZlciA9IEJ1ZmZlci5hbGxvYygwKTtcbiAgICB0aGlzLnBvc2l0aW9uID0gMDtcbiAgfVxuXG4gIGFzeW5jIHdhaXRGb3JDaHVuaygpIHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLml0ZXJhdG9yLm5leHQoKTtcbiAgICBpZiAocmVzdWx0LmRvbmUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCBlbmQgb2YgZGF0YScpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBvc2l0aW9uID09PSB0aGlzLmJ1ZmZlci5sZW5ndGgpIHtcbiAgICAgIHRoaXMuYnVmZmVyID0gcmVzdWx0LnZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoW3RoaXMuYnVmZmVyLnNsaWNlKHRoaXMucG9zaXRpb24pLCByZXN1bHQudmFsdWVdKTtcbiAgICB9XG4gICAgdGhpcy5wb3NpdGlvbiA9IDA7XG4gIH1cbn1cblxuY2xhc3MgUGFyc2VyIHtcbiAgZGVidWc6IERlYnVnO1xuICBjb2xNZXRhZGF0YTogQ29sdW1uTWV0YWRhdGFbXTtcbiAgb3B0aW9uczogUGFyc2VyT3B0aW9ucztcblxuICBzdXNwZW5kZWQ6IGJvb2xlYW47XG4gIG5leHQ6ICgoKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgc3RyZWFtQnVmZmVyOiBTdHJlYW1CdWZmZXI7XG5cbiAgc3RhdGljIGFzeW5jICpwYXJzZVRva2VucyhpdGVyYWJsZTogQXN5bmNJdGVyYWJsZTxCdWZmZXI+IHwgSXRlcmFibGU8QnVmZmVyPiwgZGVidWc6IERlYnVnLCBvcHRpb25zOiBQYXJzZXJPcHRpb25zLCBjb2xNZXRhZGF0YTogQ29sdW1uTWV0YWRhdGFbXSA9IFtdKSB7XG4gICAgbGV0IHRva2VuOiBUb2tlbiB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCBvbkRvbmVQYXJzaW5nID0gKHQ6IFRva2VuIHwgdW5kZWZpbmVkKSA9PiB7IHRva2VuID0gdDsgfTtcblxuICAgIGNvbnN0IHN0cmVhbUJ1ZmZlciA9IG5ldyBTdHJlYW1CdWZmZXIoaXRlcmFibGUpO1xuXG4gICAgY29uc3QgcGFyc2VyID0gbmV3IFBhcnNlcihzdHJlYW1CdWZmZXIsIGRlYnVnLCBvcHRpb25zKTtcbiAgICBwYXJzZXIuY29sTWV0YWRhdGEgPSBjb2xNZXRhZGF0YTtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBzdHJlYW1CdWZmZXIud2FpdEZvckNodW5rKCk7XG4gICAgICB9IGNhdGNoIChlcnI6IHVua25vd24pIHtcbiAgICAgICAgaWYgKHN0cmVhbUJ1ZmZlci5wb3NpdGlvbiA9PT0gc3RyZWFtQnVmZmVyLmJ1ZmZlci5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJzZXIuc3VzcGVuZGVkKSB7XG4gICAgICAgIC8vIFVuc3VzcGVuZCBhbmQgY29udGludWUgZnJvbSB3aGVyZSBldmVyIHdlIGxlZnQgb2ZmLlxuICAgICAgICBwYXJzZXIuc3VzcGVuZGVkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IG5leHQgPSBwYXJzZXIubmV4dCE7XG5cbiAgICAgICAgbmV4dCgpO1xuXG4gICAgICAgIC8vIENoZWNrIGlmIGEgbmV3IHRva2VuIHdhcyBwYXJzZWQgYWZ0ZXIgdW5zdXNwZW5zaW9uLlxuICAgICAgICBpZiAoIXBhcnNlci5zdXNwZW5kZWQgJiYgdG9rZW4pIHtcbiAgICAgICAgICBpZiAodG9rZW4gaW5zdGFuY2VvZiBDb2xNZXRhZGF0YVRva2VuKSB7XG4gICAgICAgICAgICBwYXJzZXIuY29sTWV0YWRhdGEgPSB0b2tlbi5jb2x1bW5zO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHlpZWxkIHRva2VuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHdoaWxlICghcGFyc2VyLnN1c3BlbmRlZCAmJiBwYXJzZXIucG9zaXRpb24gKyAxIDw9IHBhcnNlci5idWZmZXIubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSBwYXJzZXIuYnVmZmVyLnJlYWRVSW50OChwYXJzZXIucG9zaXRpb24pO1xuXG4gICAgICAgIHBhcnNlci5wb3NpdGlvbiArPSAxO1xuXG4gICAgICAgIGlmICh0eXBlID09PSBUWVBFLkNPTE1FVEFEQVRBKSB7XG4gICAgICAgICAgY29uc3QgdG9rZW4gPSBhd2FpdCBjb2xNZXRhZGF0YVBhcnNlcihwYXJzZXIpO1xuICAgICAgICAgIHBhcnNlci5jb2xNZXRhZGF0YSA9IHRva2VuLmNvbHVtbnM7XG4gICAgICAgICAgeWllbGQgdG9rZW47XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVFlQRS5ST1cpIHtcbiAgICAgICAgICB5aWVsZCByb3dQYXJzZXIocGFyc2VyKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBUWVBFLk5CQ1JPVykge1xuICAgICAgICAgIHlpZWxkIG5iY1Jvd1BhcnNlcihwYXJzZXIpO1xuICAgICAgICB9IGVsc2UgaWYgKHRva2VuUGFyc2Vyc1t0eXBlXSkge1xuICAgICAgICAgIHRva2VuUGFyc2Vyc1t0eXBlXShwYXJzZXIsIHBhcnNlci5vcHRpb25zLCBvbkRvbmVQYXJzaW5nKTtcblxuICAgICAgICAgIC8vIENoZWNrIGlmIGEgbmV3IHRva2VuIHdhcyBwYXJzZWQgYWZ0ZXIgdW5zdXNwZW5zaW9uLlxuICAgICAgICAgIGlmICghcGFyc2VyLnN1c3BlbmRlZCAmJiB0b2tlbikge1xuICAgICAgICAgICAgaWYgKHRva2VuIGluc3RhbmNlb2YgQ29sTWV0YWRhdGFUb2tlbikge1xuICAgICAgICAgICAgICBwYXJzZXIuY29sTWV0YWRhdGEgPSB0b2tlbi5jb2x1bW5zO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgeWllbGQgdG9rZW47XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biB0eXBlOiAnICsgdHlwZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3RvcihzdHJlYW1CdWZmZXI6IFN0cmVhbUJ1ZmZlciwgZGVidWc6IERlYnVnLCBvcHRpb25zOiBQYXJzZXJPcHRpb25zKSB7XG4gICAgdGhpcy5kZWJ1ZyA9IGRlYnVnO1xuICAgIHRoaXMuY29sTWV0YWRhdGEgPSBbXTtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuXG4gICAgdGhpcy5zdHJlYW1CdWZmZXIgPSBzdHJlYW1CdWZmZXI7XG4gICAgdGhpcy5zdXNwZW5kZWQgPSBmYWxzZTtcbiAgICB0aGlzLm5leHQgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXQgYnVmZmVyKCkge1xuICAgIHJldHVybiB0aGlzLnN0cmVhbUJ1ZmZlci5idWZmZXI7XG4gIH1cblxuICBnZXQgcG9zaXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RyZWFtQnVmZmVyLnBvc2l0aW9uO1xuICB9XG5cbiAgc2V0IHBvc2l0aW9uKHZhbHVlKSB7XG4gICAgdGhpcy5zdHJlYW1CdWZmZXIucG9zaXRpb24gPSB2YWx1ZTtcbiAgfVxuXG4gIHN1c3BlbmQobmV4dDogKCkgPT4gdm9pZCkge1xuICAgIHRoaXMuc3VzcGVuZGVkID0gdHJ1ZTtcbiAgICB0aGlzLm5leHQgPSBuZXh0O1xuICB9XG5cbiAgYXdhaXREYXRhKGxlbmd0aDogbnVtYmVyLCBjYWxsYmFjazogKCkgPT4gdm9pZCkge1xuICAgIGlmICh0aGlzLnBvc2l0aW9uICsgbGVuZ3RoIDw9IHRoaXMuYnVmZmVyLmxlbmd0aCkge1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdXNwZW5kKCgpID0+IHtcbiAgICAgICAgdGhpcy5hd2FpdERhdGEobGVuZ3RoLCBjYWxsYmFjayk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZWFkSW50OChjYWxsYmFjazogKGRhdGE6IG51bWJlcikgPT4gdm9pZCkge1xuICAgIHRoaXMuYXdhaXREYXRhKDEsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmJ1ZmZlci5yZWFkSW50OCh0aGlzLnBvc2l0aW9uKTtcbiAgICAgIHRoaXMucG9zaXRpb24gKz0gMTtcbiAgICAgIGNhbGxiYWNrKGRhdGEpO1xuICAgIH0pO1xuICB9XG5cbiAgcmVhZFVJbnQ4KGNhbGxiYWNrOiAoZGF0YTogbnVtYmVyKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5hd2FpdERhdGEoMSwgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuYnVmZmVyLnJlYWRVSW50OCh0aGlzLnBvc2l0aW9uKTtcbiAgICAgIHRoaXMucG9zaXRpb24gKz0gMTtcbiAgICAgIGNhbGxiYWNrKGRhdGEpO1xuICAgIH0pO1xuICB9XG5cbiAgcmVhZEludDE2TEUoY2FsbGJhY2s6IChkYXRhOiBudW1iZXIpID0+IHZvaWQpIHtcbiAgICB0aGlzLmF3YWl0RGF0YSgyLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5idWZmZXIucmVhZEludDE2TEUodGhpcy5wb3NpdGlvbik7XG4gICAgICB0aGlzLnBvc2l0aW9uICs9IDI7XG4gICAgICBjYWxsYmFjayhkYXRhKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlYWRJbnQxNkJFKGNhbGxiYWNrOiAoZGF0YTogbnVtYmVyKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5hd2FpdERhdGEoMiwgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuYnVmZmVyLnJlYWRJbnQxNkJFKHRoaXMucG9zaXRpb24pO1xuICAgICAgdGhpcy5wb3NpdGlvbiArPSAyO1xuICAgICAgY2FsbGJhY2soZGF0YSk7XG4gICAgfSk7XG4gIH1cblxuICByZWFkVUludDE2TEUoY2FsbGJhY2s6IChkYXRhOiBudW1iZXIpID0+IHZvaWQpIHtcbiAgICB0aGlzLmF3YWl0RGF0YSgyLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5idWZmZXIucmVhZFVJbnQxNkxFKHRoaXMucG9zaXRpb24pO1xuICAgICAgdGhpcy5wb3NpdGlvbiArPSAyO1xuICAgICAgY2FsbGJhY2soZGF0YSk7XG4gICAgfSk7XG4gIH1cblxuICByZWFkVUludDE2QkUoY2FsbGJhY2s6IChkYXRhOiBudW1iZXIpID0+IHZvaWQpIHtcbiAgICB0aGlzLmF3YWl0RGF0YSgyLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5idWZmZXIucmVhZFVJbnQxNkJFKHRoaXMucG9zaXRpb24pO1xuICAgICAgdGhpcy5wb3NpdGlvbiArPSAyO1xuICAgICAgY2FsbGJhY2soZGF0YSk7XG4gICAgfSk7XG4gIH1cblxuICByZWFkSW50MzJMRShjYWxsYmFjazogKGRhdGE6IG51bWJlcikgPT4gdm9pZCkge1xuICAgIHRoaXMuYXdhaXREYXRhKDQsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmJ1ZmZlci5yZWFkSW50MzJMRSh0aGlzLnBvc2l0aW9uKTtcbiAgICAgIHRoaXMucG9zaXRpb24gKz0gNDtcbiAgICAgIGNhbGxiYWNrKGRhdGEpO1xuICAgIH0pO1xuICB9XG5cbiAgcmVhZEludDMyQkUoY2FsbGJhY2s6IChkYXRhOiBudW1iZXIpID0+IHZvaWQpIHtcbiAgICB0aGlzLmF3YWl0RGF0YSg0LCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5idWZmZXIucmVhZEludDMyQkUodGhpcy5wb3NpdGlvbik7XG4gICAgICB0aGlzLnBvc2l0aW9uICs9IDQ7XG4gICAgICBjYWxsYmFjayhkYXRhKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlYWRVSW50MzJMRShjYWxsYmFjazogKGRhdGE6IG51bWJlcikgPT4gdm9pZCkge1xuICAgIHRoaXMuYXdhaXREYXRhKDQsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmJ1ZmZlci5yZWFkVUludDMyTEUodGhpcy5wb3NpdGlvbik7XG4gICAgICB0aGlzLnBvc2l0aW9uICs9IDQ7XG4gICAgICBjYWxsYmFjayhkYXRhKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlYWRVSW50MzJCRShjYWxsYmFjazogKGRhdGE6IG51bWJlcikgPT4gdm9pZCkge1xuICAgIHRoaXMuYXdhaXREYXRhKDQsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmJ1ZmZlci5yZWFkVUludDMyQkUodGhpcy5wb3NpdGlvbik7XG4gICAgICB0aGlzLnBvc2l0aW9uICs9IDQ7XG4gICAgICBjYWxsYmFjayhkYXRhKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlYWRCaWdJbnQ2NExFKGNhbGxiYWNrOiAoZGF0YTogYmlnaW50KSA9PiB2b2lkKSB7XG4gICAgdGhpcy5hd2FpdERhdGEoOCwgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuYnVmZmVyLnJlYWRCaWdJbnQ2NExFKHRoaXMucG9zaXRpb24pO1xuICAgICAgdGhpcy5wb3NpdGlvbiArPSA4O1xuICAgICAgY2FsbGJhY2soZGF0YSk7XG4gICAgfSk7XG4gIH1cblxuICByZWFkSW50NjRMRShjYWxsYmFjazogKGRhdGE6IG51bWJlcikgPT4gdm9pZCkge1xuICAgIHRoaXMuYXdhaXREYXRhKDgsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBNYXRoLnBvdygyLCAzMikgKiB0aGlzLmJ1ZmZlci5yZWFkSW50MzJMRSh0aGlzLnBvc2l0aW9uICsgNCkgKyAoKHRoaXMuYnVmZmVyW3RoaXMucG9zaXRpb24gKyA0XSAmIDB4ODApID09PSAweDgwID8gMSA6IC0xKSAqIHRoaXMuYnVmZmVyLnJlYWRVSW50MzJMRSh0aGlzLnBvc2l0aW9uKTtcbiAgICAgIHRoaXMucG9zaXRpb24gKz0gODtcbiAgICAgIGNhbGxiYWNrKGRhdGEpO1xuICAgIH0pO1xuICB9XG5cbiAgcmVhZEludDY0QkUoY2FsbGJhY2s6IChkYXRhOiBudW1iZXIpID0+IHZvaWQpIHtcbiAgICB0aGlzLmF3YWl0RGF0YSg4LCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gTWF0aC5wb3coMiwgMzIpICogdGhpcy5idWZmZXIucmVhZEludDMyQkUodGhpcy5wb3NpdGlvbikgKyAoKHRoaXMuYnVmZmVyW3RoaXMucG9zaXRpb25dICYgMHg4MCkgPT09IDB4ODAgPyAxIDogLTEpICogdGhpcy5idWZmZXIucmVhZFVJbnQzMkJFKHRoaXMucG9zaXRpb24gKyA0KTtcbiAgICAgIHRoaXMucG9zaXRpb24gKz0gODtcbiAgICAgIGNhbGxiYWNrKGRhdGEpO1xuICAgIH0pO1xuICB9XG5cbiAgcmVhZEJpZ1VJbnQ2NExFKGNhbGxiYWNrOiAoZGF0YTogYmlnaW50KSA9PiB2b2lkKSB7XG4gICAgdGhpcy5hd2FpdERhdGEoOCwgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuYnVmZmVyLnJlYWRCaWdVSW50NjRMRSh0aGlzLnBvc2l0aW9uKTtcbiAgICAgIHRoaXMucG9zaXRpb24gKz0gODtcbiAgICAgIGNhbGxiYWNrKGRhdGEpO1xuICAgIH0pO1xuICB9XG5cbiAgcmVhZFVJbnQ2NExFKGNhbGxiYWNrOiAoZGF0YTogbnVtYmVyKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5hd2FpdERhdGEoOCwgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IE1hdGgucG93KDIsIDMyKSAqIHRoaXMuYnVmZmVyLnJlYWRVSW50MzJMRSh0aGlzLnBvc2l0aW9uICsgNCkgKyB0aGlzLmJ1ZmZlci5yZWFkVUludDMyTEUodGhpcy5wb3NpdGlvbik7XG4gICAgICB0aGlzLnBvc2l0aW9uICs9IDg7XG4gICAgICBjYWxsYmFjayhkYXRhKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlYWRVSW50NjRCRShjYWxsYmFjazogKGRhdGE6IG51bWJlcikgPT4gdm9pZCkge1xuICAgIHRoaXMuYXdhaXREYXRhKDgsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBNYXRoLnBvdygyLCAzMikgKiB0aGlzLmJ1ZmZlci5yZWFkVUludDMyQkUodGhpcy5wb3NpdGlvbikgKyB0aGlzLmJ1ZmZlci5yZWFkVUludDMyQkUodGhpcy5wb3NpdGlvbiArIDQpO1xuICAgICAgdGhpcy5wb3NpdGlvbiArPSA4O1xuICAgICAgY2FsbGJhY2soZGF0YSk7XG4gICAgfSk7XG4gIH1cblxuICByZWFkRmxvYXRMRShjYWxsYmFjazogKGRhdGE6IG51bWJlcikgPT4gdm9pZCkge1xuICAgIHRoaXMuYXdhaXREYXRhKDQsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmJ1ZmZlci5yZWFkRmxvYXRMRSh0aGlzLnBvc2l0aW9uKTtcbiAgICAgIHRoaXMucG9zaXRpb24gKz0gNDtcbiAgICAgIGNhbGxiYWNrKGRhdGEpO1xuICAgIH0pO1xuICB9XG5cbiAgcmVhZEZsb2F0QkUoY2FsbGJhY2s6IChkYXRhOiBudW1iZXIpID0+IHZvaWQpIHtcbiAgICB0aGlzLmF3YWl0RGF0YSg0LCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5idWZmZXIucmVhZEZsb2F0QkUodGhpcy5wb3NpdGlvbik7XG4gICAgICB0aGlzLnBvc2l0aW9uICs9IDQ7XG4gICAgICBjYWxsYmFjayhkYXRhKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlYWREb3VibGVMRShjYWxsYmFjazogKGRhdGE6IG51bWJlcikgPT4gdm9pZCkge1xuICAgIHRoaXMuYXdhaXREYXRhKDgsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmJ1ZmZlci5yZWFkRG91YmxlTEUodGhpcy5wb3NpdGlvbik7XG4gICAgICB0aGlzLnBvc2l0aW9uICs9IDg7XG4gICAgICBjYWxsYmFjayhkYXRhKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlYWREb3VibGVCRShjYWxsYmFjazogKGRhdGE6IG51bWJlcikgPT4gdm9pZCkge1xuICAgIHRoaXMuYXdhaXREYXRhKDgsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmJ1ZmZlci5yZWFkRG91YmxlQkUodGhpcy5wb3NpdGlvbik7XG4gICAgICB0aGlzLnBvc2l0aW9uICs9IDg7XG4gICAgICBjYWxsYmFjayhkYXRhKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlYWRVSW50MjRMRShjYWxsYmFjazogKGRhdGE6IG51bWJlcikgPT4gdm9pZCkge1xuICAgIHRoaXMuYXdhaXREYXRhKDMsICgpID0+IHtcbiAgICAgIGNvbnN0IGxvdyA9IHRoaXMuYnVmZmVyLnJlYWRVSW50MTZMRSh0aGlzLnBvc2l0aW9uKTtcbiAgICAgIGNvbnN0IGhpZ2ggPSB0aGlzLmJ1ZmZlci5yZWFkVUludDgodGhpcy5wb3NpdGlvbiArIDIpO1xuXG4gICAgICB0aGlzLnBvc2l0aW9uICs9IDM7XG5cbiAgICAgIGNhbGxiYWNrKGxvdyB8IChoaWdoIDw8IDE2KSk7XG4gICAgfSk7XG4gIH1cblxuICByZWFkVUludDQwTEUoY2FsbGJhY2s6IChkYXRhOiBudW1iZXIpID0+IHZvaWQpIHtcbiAgICB0aGlzLmF3YWl0RGF0YSg1LCAoKSA9PiB7XG4gICAgICBjb25zdCBsb3cgPSB0aGlzLmJ1ZmZlci5yZWFkVUludDMyTEUodGhpcy5wb3NpdGlvbik7XG4gICAgICBjb25zdCBoaWdoID0gdGhpcy5idWZmZXIucmVhZFVJbnQ4KHRoaXMucG9zaXRpb24gKyA0KTtcblxuICAgICAgdGhpcy5wb3NpdGlvbiArPSA1O1xuXG4gICAgICBjYWxsYmFjaygoMHgxMDAwMDAwMDAgKiBoaWdoKSArIGxvdyk7XG4gICAgfSk7XG4gIH1cblxuICByZWFkVU51bWVyaWM2NExFKGNhbGxiYWNrOiAoZGF0YTogbnVtYmVyKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5hd2FpdERhdGEoOCwgKCkgPT4ge1xuICAgICAgY29uc3QgbG93ID0gdGhpcy5idWZmZXIucmVhZFVJbnQzMkxFKHRoaXMucG9zaXRpb24pO1xuICAgICAgY29uc3QgaGlnaCA9IHRoaXMuYnVmZmVyLnJlYWRVSW50MzJMRSh0aGlzLnBvc2l0aW9uICsgNCk7XG5cbiAgICAgIHRoaXMucG9zaXRpb24gKz0gODtcblxuICAgICAgY2FsbGJhY2soKDB4MTAwMDAwMDAwICogaGlnaCkgKyBsb3cpO1xuICAgIH0pO1xuICB9XG5cbiAgcmVhZFVOdW1lcmljOTZMRShjYWxsYmFjazogKGRhdGE6IG51bWJlcikgPT4gdm9pZCkge1xuICAgIHRoaXMuYXdhaXREYXRhKDEyLCAoKSA9PiB7XG4gICAgICBjb25zdCBkd29yZDEgPSB0aGlzLmJ1ZmZlci5yZWFkVUludDMyTEUodGhpcy5wb3NpdGlvbik7XG4gICAgICBjb25zdCBkd29yZDIgPSB0aGlzLmJ1ZmZlci5yZWFkVUludDMyTEUodGhpcy5wb3NpdGlvbiArIDQpO1xuICAgICAgY29uc3QgZHdvcmQzID0gdGhpcy5idWZmZXIucmVhZFVJbnQzMkxFKHRoaXMucG9zaXRpb24gKyA4KTtcblxuICAgICAgdGhpcy5wb3NpdGlvbiArPSAxMjtcblxuICAgICAgY2FsbGJhY2soZHdvcmQxICsgKDB4MTAwMDAwMDAwICogZHdvcmQyKSArICgweDEwMDAwMDAwMCAqIDB4MTAwMDAwMDAwICogZHdvcmQzKSk7XG4gICAgfSk7XG4gIH1cblxuICByZWFkVU51bWVyaWMxMjhMRShjYWxsYmFjazogKGRhdGE6IG51bWJlcikgPT4gdm9pZCkge1xuICAgIHRoaXMuYXdhaXREYXRhKDE2LCAoKSA9PiB7XG4gICAgICBjb25zdCBkd29yZDEgPSB0aGlzLmJ1ZmZlci5yZWFkVUludDMyTEUodGhpcy5wb3NpdGlvbik7XG4gICAgICBjb25zdCBkd29yZDIgPSB0aGlzLmJ1ZmZlci5yZWFkVUludDMyTEUodGhpcy5wb3NpdGlvbiArIDQpO1xuICAgICAgY29uc3QgZHdvcmQzID0gdGhpcy5idWZmZXIucmVhZFVJbnQzMkxFKHRoaXMucG9zaXRpb24gKyA4KTtcbiAgICAgIGNvbnN0IGR3b3JkNCA9IHRoaXMuYnVmZmVyLnJlYWRVSW50MzJMRSh0aGlzLnBvc2l0aW9uICsgMTIpO1xuXG4gICAgICB0aGlzLnBvc2l0aW9uICs9IDE2O1xuXG4gICAgICBjYWxsYmFjayhkd29yZDEgKyAoMHgxMDAwMDAwMDAgKiBkd29yZDIpICsgKDB4MTAwMDAwMDAwICogMHgxMDAwMDAwMDAgKiBkd29yZDMpICsgKDB4MTAwMDAwMDAwICogMHgxMDAwMDAwMDAgKiAweDEwMDAwMDAwMCAqIGR3b3JkNCkpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gVmFyaWFibGUgbGVuZ3RoIGRhdGFcblxuICByZWFkQnVmZmVyKGxlbmd0aDogbnVtYmVyLCBjYWxsYmFjazogKGRhdGE6IEJ1ZmZlcikgPT4gdm9pZCkge1xuICAgIHRoaXMuYXdhaXREYXRhKGxlbmd0aCwgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuYnVmZmVyLnNsaWNlKHRoaXMucG9zaXRpb24sIHRoaXMucG9zaXRpb24gKyBsZW5ndGgpO1xuICAgICAgdGhpcy5wb3NpdGlvbiArPSBsZW5ndGg7XG4gICAgICBjYWxsYmFjayhkYXRhKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFJlYWQgYSBVbmljb2RlIFN0cmluZyAoQlZBUkNIQVIpXG4gIHJlYWRCVmFyQ2hhcihjYWxsYmFjazogKGRhdGE6IHN0cmluZykgPT4gdm9pZCkge1xuICAgIHRoaXMucmVhZFVJbnQ4KChsZW5ndGgpID0+IHtcbiAgICAgIHRoaXMucmVhZEJ1ZmZlcihsZW5ndGggKiAyLCAoZGF0YSkgPT4ge1xuICAgICAgICBjYWxsYmFjayhkYXRhLnRvU3RyaW5nKCd1Y3MyJykpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBSZWFkIGEgVW5pY29kZSBTdHJpbmcgKFVTVkFSQ0hBUilcbiAgcmVhZFVzVmFyQ2hhcihjYWxsYmFjazogKGRhdGE6IHN0cmluZykgPT4gdm9pZCkge1xuICAgIHRoaXMucmVhZFVJbnQxNkxFKChsZW5ndGgpID0+IHtcbiAgICAgIHRoaXMucmVhZEJ1ZmZlcihsZW5ndGggKiAyLCAoZGF0YSkgPT4ge1xuICAgICAgICBjYWxsYmFjayhkYXRhLnRvU3RyaW5nKCd1Y3MyJykpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBSZWFkIGJpbmFyeSBkYXRhIChCVkFSQllURSlcbiAgcmVhZEJWYXJCeXRlKGNhbGxiYWNrOiAoZGF0YTogQnVmZmVyKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5yZWFkVUludDgoKGxlbmd0aCkgPT4ge1xuICAgICAgdGhpcy5yZWFkQnVmZmVyKGxlbmd0aCwgY2FsbGJhY2spO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gUmVhZCBiaW5hcnkgZGF0YSAoVVNWQVJCWVRFKVxuICByZWFkVXNWYXJCeXRlKGNhbGxiYWNrOiAoZGF0YTogQnVmZmVyKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5yZWFkVUludDE2TEUoKGxlbmd0aCkgPT4ge1xuICAgICAgdGhpcy5yZWFkQnVmZmVyKGxlbmd0aCwgY2FsbGJhY2spO1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFBhcnNlcjtcbm1vZHVsZS5leHBvcnRzID0gUGFyc2VyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBR0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7QUFFQSxNQUFNQSxZQUFZLEdBQUc7RUFDbkIsQ0FBQ0MsWUFBS0MsSUFBTixHQUFhQywyQkFETTtFQUVuQixDQUFDRixZQUFLRyxVQUFOLEdBQW1CQyxpQ0FGQTtFQUduQixDQUFDSixZQUFLSyxRQUFOLEdBQWlCQywrQkFIRTtFQUluQixDQUFDTixZQUFLTyxTQUFOLEdBQWtCQyw2QkFKQztFQUtuQixDQUFDUixZQUFLUyxLQUFOLEdBQWNDLGlDQUxLO0VBTW5CLENBQUNWLFlBQUtXLFdBQU4sR0FBb0JDLDBCQU5EO0VBT25CLENBQUNaLFlBQUthLGFBQU4sR0FBc0JDLDRCQVBIO0VBUW5CLENBQUNkLFlBQUtlLElBQU4sR0FBYUMsZ0NBUk07RUFTbkIsQ0FBQ2hCLFlBQUtpQixRQUFOLEdBQWlCQyw0QkFURTtFQVVuQixDQUFDbEIsWUFBS21CLEtBQU4sR0FBY0MseUJBVks7RUFXbkIsQ0FBQ3BCLFlBQUtxQixZQUFOLEdBQXFCQyxnQ0FYRjtFQVluQixDQUFDdEIsWUFBS3VCLFdBQU4sR0FBb0JDLCtCQVpEO0VBYW5CLENBQUN4QixZQUFLeUIsSUFBTixHQUFhQztBQWJNLENBQXJCOztBQWtCQSxNQUFNQyxZQUFOLENBQW1CO0VBS2pCQyxXQUFXLENBQUNDLFFBQUQsRUFBcUQ7SUFBQSxLQUpoRUMsUUFJZ0U7SUFBQSxLQUhoRUMsTUFHZ0U7SUFBQSxLQUZoRUMsUUFFZ0U7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
383
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdG9rZW4iLCJyZXF1aXJlIiwiX2NvbG1ldGFkYXRhVG9rZW5QYXJzZXIiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX2RvbmVUb2tlblBhcnNlciIsIl9lbnZDaGFuZ2VUb2tlblBhcnNlciIsIl9pbmZvZXJyb3JUb2tlblBhcnNlciIsIl9mZWRhdXRoSW5mb1BhcnNlciIsIl9mZWF0dXJlRXh0QWNrUGFyc2VyIiwiX2xvZ2luYWNrVG9rZW5QYXJzZXIiLCJfb3JkZXJUb2tlblBhcnNlciIsIl9yZXR1cm5zdGF0dXNUb2tlblBhcnNlciIsIl9yZXR1cm52YWx1ZVRva2VuUGFyc2VyIiwiX3Jvd1Rva2VuUGFyc2VyIiwiX25iY3Jvd1Rva2VuUGFyc2VyIiwiX3NzcGlUb2tlblBhcnNlciIsIm9iaiIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwidG9rZW5QYXJzZXJzIiwiVFlQRSIsIkRPTkUiLCJkb25lUGFyc2VyIiwiRE9ORUlOUFJPQyIsImRvbmVJblByb2NQYXJzZXIiLCJET05FUFJPQyIsImRvbmVQcm9jUGFyc2VyIiwiRU5WQ0hBTkdFIiwiZW52Q2hhbmdlUGFyc2VyIiwiRVJST1IiLCJlcnJvclBhcnNlciIsIkZFREFVVEhJTkZPIiwiZmVkQXV0aEluZm9QYXJzZXIiLCJGRUFUVVJFRVhUQUNLIiwiZmVhdHVyZUV4dEFja1BhcnNlciIsIklORk8iLCJpbmZvUGFyc2VyIiwiTE9HSU5BQ0siLCJsb2dpbkFja1BhcnNlciIsIk9SREVSIiwib3JkZXJQYXJzZXIiLCJSRVRVUk5TVEFUVVMiLCJyZXR1cm5TdGF0dXNQYXJzZXIiLCJSRVRVUk5WQUxVRSIsInJldHVyblZhbHVlUGFyc2VyIiwiU1NQSSIsInNzcGlQYXJzZXIiLCJTdHJlYW1CdWZmZXIiLCJpdGVyYXRvciIsImJ1ZmZlciIsInBvc2l0aW9uIiwiY29uc3RydWN0b3IiLCJpdGVyYWJsZSIsIlN5bWJvbCIsImFzeW5jSXRlcmF0b3IiLCJjYWxsIiwiQnVmZmVyIiwiYWxsb2MiLCJ3YWl0Rm9yQ2h1bmsiLCJyZXN1bHQiLCJuZXh0IiwiZG9uZSIsIkVycm9yIiwibGVuZ3RoIiwidmFsdWUiLCJjb25jYXQiLCJzbGljZSIsIlBhcnNlciIsImRlYnVnIiwiY29sTWV0YWRhdGEiLCJvcHRpb25zIiwic3VzcGVuZGVkIiwic3RyZWFtQnVmZmVyIiwicGFyc2VUb2tlbnMiLCJ0b2tlbiIsIm9uRG9uZVBhcnNpbmciLCJ0IiwicGFyc2VyIiwiZXJyIiwiQ29sTWV0YWRhdGFUb2tlbiIsImNvbHVtbnMiLCJ0eXBlIiwicmVhZFVJbnQ4IiwiQ09MTUVUQURBVEEiLCJjb2xNZXRhZGF0YVBhcnNlciIsIlJPVyIsInJvd1BhcnNlciIsIk5CQ1JPVyIsIm5iY1Jvd1BhcnNlciIsInVuZGVmaW5lZCIsInN1c3BlbmQiLCJhd2FpdERhdGEiLCJjYWxsYmFjayIsInJlYWRJbnQ4IiwiZGF0YSIsInJlYWRJbnQxNkxFIiwicmVhZEludDE2QkUiLCJyZWFkVUludDE2TEUiLCJyZWFkVUludDE2QkUiLCJyZWFkSW50MzJMRSIsInJlYWRJbnQzMkJFIiwicmVhZFVJbnQzMkxFIiwicmVhZFVJbnQzMkJFIiwicmVhZEJpZ0ludDY0TEUiLCJyZWFkSW50NjRMRSIsIk1hdGgiLCJwb3ciLCJyZWFkSW50NjRCRSIsInJlYWRCaWdVSW50NjRMRSIsInJlYWRVSW50NjRMRSIsInJlYWRVSW50NjRCRSIsInJlYWRGbG9hdExFIiwicmVhZEZsb2F0QkUiLCJyZWFkRG91YmxlTEUiLCJyZWFkRG91YmxlQkUiLCJyZWFkVUludDI0TEUiLCJsb3ciLCJoaWdoIiwicmVhZFVJbnQ0MExFIiwicmVhZFVOdW1lcmljNjRMRSIsInJlYWRVTnVtZXJpYzk2TEUiLCJkd29yZDEiLCJkd29yZDIiLCJkd29yZDMiLCJyZWFkVU51bWVyaWMxMjhMRSIsImR3b3JkNCIsInJlYWRCdWZmZXIiLCJyZWFkQlZhckNoYXIiLCJ0b1N0cmluZyIsInJlYWRVc1ZhckNoYXIiLCJyZWFkQlZhckJ5dGUiLCJyZWFkVXNWYXJCeXRlIiwiX2RlZmF1bHQiLCJleHBvcnRzIiwibW9kdWxlIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rva2VuL3N0cmVhbS1wYXJzZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IERlYnVnIGZyb20gJy4uL2RlYnVnJztcbmltcG9ydCB7IEludGVybmFsQ29ubmVjdGlvbk9wdGlvbnMgfSBmcm9tICcuLi9jb25uZWN0aW9uJztcblxuaW1wb3J0IHsgVFlQRSwgVG9rZW4sIENvbE1ldGFkYXRhVG9rZW4gfSBmcm9tICcuL3Rva2VuJztcblxuaW1wb3J0IGNvbE1ldGFkYXRhUGFyc2VyLCB7IENvbHVtbk1ldGFkYXRhIH0gZnJvbSAnLi9jb2xtZXRhZGF0YS10b2tlbi1wYXJzZXInO1xuaW1wb3J0IHsgZG9uZVBhcnNlciwgZG9uZUluUHJvY1BhcnNlciwgZG9uZVByb2NQYXJzZXIgfSBmcm9tICcuL2RvbmUtdG9rZW4tcGFyc2VyJztcbmltcG9ydCBlbnZDaGFuZ2VQYXJzZXIgZnJvbSAnLi9lbnYtY2hhbmdlLXRva2VuLXBhcnNlcic7XG5pbXBvcnQgeyBlcnJvclBhcnNlciwgaW5mb1BhcnNlciB9IGZyb20gJy4vaW5mb2Vycm9yLXRva2VuLXBhcnNlcic7XG5pbXBvcnQgZmVkQXV0aEluZm9QYXJzZXIgZnJvbSAnLi9mZWRhdXRoLWluZm8tcGFyc2VyJztcbmltcG9ydCBmZWF0dXJlRXh0QWNrUGFyc2VyIGZyb20gJy4vZmVhdHVyZS1leHQtYWNrLXBhcnNlcic7XG5pbXBvcnQgbG9naW5BY2tQYXJzZXIgZnJvbSAnLi9sb2dpbmFjay10b2tlbi1wYXJzZXInO1xuaW1wb3J0IG9yZGVyUGFyc2VyIGZyb20gJy4vb3JkZXItdG9rZW4tcGFyc2VyJztcbmltcG9ydCByZXR1cm5TdGF0dXNQYXJzZXIgZnJvbSAnLi9yZXR1cm5zdGF0dXMtdG9rZW4tcGFyc2VyJztcbmltcG9ydCByZXR1cm5WYWx1ZVBhcnNlciBmcm9tICcuL3JldHVybnZhbHVlLXRva2VuLXBhcnNlcic7XG5pbXBvcnQgcm93UGFyc2VyIGZyb20gJy4vcm93LXRva2VuLXBhcnNlcic7XG5pbXBvcnQgbmJjUm93UGFyc2VyIGZyb20gJy4vbmJjcm93LXRva2VuLXBhcnNlcic7XG5pbXBvcnQgc3NwaVBhcnNlciBmcm9tICcuL3NzcGktdG9rZW4tcGFyc2VyJztcblxuY29uc3QgdG9rZW5QYXJzZXJzID0ge1xuICBbVFlQRS5ET05FXTogZG9uZVBhcnNlcixcbiAgW1RZUEUuRE9ORUlOUFJPQ106IGRvbmVJblByb2NQYXJzZXIsXG4gIFtUWVBFLkRPTkVQUk9DXTogZG9uZVByb2NQYXJzZXIsXG4gIFtUWVBFLkVOVkNIQU5HRV06IGVudkNoYW5nZVBhcnNlcixcbiAgW1RZUEUuRVJST1JdOiBlcnJvclBhcnNlcixcbiAgW1RZUEUuRkVEQVVUSElORk9dOiBmZWRBdXRoSW5mb1BhcnNlcixcbiAgW1RZUEUuRkVBVFVSRUVYVEFDS106IGZlYXR1cmVFeHRBY2tQYXJzZXIsXG4gIFtUWVBFLklORk9dOiBpbmZvUGFyc2VyLFxuICBbVFlQRS5MT0dJTkFDS106IGxvZ2luQWNrUGFyc2VyLFxuICBbVFlQRS5PUkRFUl06IG9yZGVyUGFyc2VyLFxuICBbVFlQRS5SRVRVUk5TVEFUVVNdOiByZXR1cm5TdGF0dXNQYXJzZXIsXG4gIFtUWVBFLlJFVFVSTlZBTFVFXTogcmV0dXJuVmFsdWVQYXJzZXIsXG4gIFtUWVBFLlNTUEldOiBzc3BpUGFyc2VyXG59O1xuXG5leHBvcnQgdHlwZSBQYXJzZXJPcHRpb25zID0gUGljazxJbnRlcm5hbENvbm5lY3Rpb25PcHRpb25zLCAndXNlVVRDJyB8ICdsb3dlckNhc2VHdWlkcycgfCAndGRzVmVyc2lvbicgfCAndXNlQ29sdW1uTmFtZXMnIHwgJ2NvbHVtbk5hbWVSZXBsYWNlcicgfCAnY2FtZWxDYXNlQ29sdW1ucyc+O1xuXG5jbGFzcyBTdHJlYW1CdWZmZXIge1xuICBpdGVyYXRvcjogQXN5bmNJdGVyYXRvcjxCdWZmZXIsIGFueSwgdW5kZWZpbmVkPiB8IEl0ZXJhdG9yPEJ1ZmZlciwgYW55LCB1bmRlZmluZWQ+O1xuICBidWZmZXI6IEJ1ZmZlcjtcbiAgcG9zaXRpb246IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihpdGVyYWJsZTogQXN5bmNJdGVyYWJsZTxCdWZmZXI+IHwgSXRlcmFibGU8QnVmZmVyPikge1xuICAgIHRoaXMuaXRlcmF0b3IgPSAoKGl0ZXJhYmxlIGFzIEFzeW5jSXRlcmFibGU8QnVmZmVyPilbU3ltYm9sLmFzeW5jSXRlcmF0b3JdIHx8IChpdGVyYWJsZSBhcyBJdGVyYWJsZTxCdWZmZXI+KVtTeW1ib2wuaXRlcmF0b3JdKS5jYWxsKGl0ZXJhYmxlKTtcblxuICAgIHRoaXMuYnVmZmVyID0gQnVmZmVyLmFsbG9jKDApO1xuICAgIHRoaXMucG9zaXRpb24gPSAwO1xuICB9XG5cbiAgYXN5bmMgd2FpdEZvckNodW5rKCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuaXRlcmF0b3IubmV4dCgpO1xuICAgIGlmIChyZXN1bHQuZG9uZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIGVuZCBvZiBkYXRhJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucG9zaXRpb24gPT09IHRoaXMuYnVmZmVyLmxlbmd0aCkge1xuICAgICAgdGhpcy5idWZmZXIgPSByZXN1bHQudmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYnVmZmVyID0gQnVmZmVyLmNvbmNhdChbdGhpcy5idWZmZXIuc2xpY2UodGhpcy5wb3NpdGlvbiksIHJlc3VsdC52YWx1ZV0pO1xuICAgIH1cbiAgICB0aGlzLnBvc2l0aW9uID0gMDtcbiAgfVxufVxuXG5jbGFzcyBQYXJzZXIge1xuICBkZWJ1ZzogRGVidWc7XG4gIGNvbE1ldGFkYXRhOiBDb2x1bW5NZXRhZGF0YVtdO1xuICBvcHRpb25zOiBQYXJzZXJPcHRpb25zO1xuXG4gIHN1c3BlbmRlZDogYm9vbGVhbjtcbiAgbmV4dDogKCgpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICBzdHJlYW1CdWZmZXI6IFN0cmVhbUJ1ZmZlcjtcblxuICBzdGF0aWMgYXN5bmMgKnBhcnNlVG9rZW5zKGl0ZXJhYmxlOiBBc3luY0l0ZXJhYmxlPEJ1ZmZlcj4gfCBJdGVyYWJsZTxCdWZmZXI+LCBkZWJ1ZzogRGVidWcsIG9wdGlvbnM6IFBhcnNlck9wdGlvbnMsIGNvbE1ldGFkYXRhOiBDb2x1bW5NZXRhZGF0YVtdID0gW10pIHtcbiAgICBsZXQgdG9rZW46IFRva2VuIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IG9uRG9uZVBhcnNpbmcgPSAodDogVG9rZW4gfCB1bmRlZmluZWQpID0+IHsgdG9rZW4gPSB0OyB9O1xuXG4gICAgY29uc3Qgc3RyZWFtQnVmZmVyID0gbmV3IFN0cmVhbUJ1ZmZlcihpdGVyYWJsZSk7XG5cbiAgICBjb25zdCBwYXJzZXIgPSBuZXcgUGFyc2VyKHN0cmVhbUJ1ZmZlciwgZGVidWcsIG9wdGlvbnMpO1xuICAgIHBhcnNlci5jb2xNZXRhZGF0YSA9IGNvbE1ldGFkYXRhO1xuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHN0cmVhbUJ1ZmZlci53YWl0Rm9yQ2h1bmsoKTtcbiAgICAgIH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuICAgICAgICBpZiAoc3RyZWFtQnVmZmVyLnBvc2l0aW9uID09PSBzdHJlYW1CdWZmZXIuYnVmZmVyLmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cblxuICAgICAgaWYgKHBhcnNlci5zdXNwZW5kZWQpIHtcbiAgICAgICAgLy8gVW5zdXNwZW5kIGFuZCBjb250aW51ZSBmcm9tIHdoZXJlIGV2ZXIgd2UgbGVmdCBvZmYuXG4gICAgICAgIHBhcnNlci5zdXNwZW5kZWQgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgbmV4dCA9IHBhcnNlci5uZXh0ITtcblxuICAgICAgICBuZXh0KCk7XG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgYSBuZXcgdG9rZW4gd2FzIHBhcnNlZCBhZnRlciB1bnN1c3BlbnNpb24uXG4gICAgICAgIGlmICghcGFyc2VyLnN1c3BlbmRlZCAmJiB0b2tlbikge1xuICAgICAgICAgIGlmICh0b2tlbiBpbnN0YW5jZW9mIENvbE1ldGFkYXRhVG9rZW4pIHtcbiAgICAgICAgICAgIHBhcnNlci5jb2xNZXRhZGF0YSA9IHRva2VuLmNvbHVtbnM7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgeWllbGQgdG9rZW47XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgd2hpbGUgKCFwYXJzZXIuc3VzcGVuZGVkICYmIHBhcnNlci5wb3NpdGlvbiArIDEgPD0gcGFyc2VyLmJ1ZmZlci5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgdHlwZSA9IHBhcnNlci5idWZmZXIucmVhZFVJbnQ4KHBhcnNlci5wb3NpdGlvbik7XG5cbiAgICAgICAgcGFyc2VyLnBvc2l0aW9uICs9IDE7XG5cbiAgICAgICAgaWYgKHR5cGUgPT09IFRZUEUuQ09MTUVUQURBVEEpIHtcbiAgICAgICAgICBjb25zdCB0b2tlbiA9IGF3YWl0IGNvbE1ldGFkYXRhUGFyc2VyKHBhcnNlcik7XG4gICAgICAgICAgcGFyc2VyLmNvbE1ldGFkYXRhID0gdG9rZW4uY29sdW1ucztcbiAgICAgICAgICB5aWVsZCB0b2tlbjtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBUWVBFLlJPVykge1xuICAgICAgICAgIHlpZWxkIHJvd1BhcnNlcihwYXJzZXIpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRZUEUuTkJDUk9XKSB7XG4gICAgICAgICAgeWllbGQgbmJjUm93UGFyc2VyKHBhcnNlcik7XG4gICAgICAgIH0gZWxzZSBpZiAodG9rZW5QYXJzZXJzW3R5cGVdKSB7XG4gICAgICAgICAgdG9rZW5QYXJzZXJzW3R5cGVdKHBhcnNlciwgcGFyc2VyLm9wdGlvbnMsIG9uRG9uZVBhcnNpbmcpO1xuXG4gICAgICAgICAgLy8gQ2hlY2sgaWYgYSBuZXcgdG9rZW4gd2FzIHBhcnNlZCBhZnRlciB1bnN1c3BlbnNpb24uXG4gICAgICAgICAgaWYgKCFwYXJzZXIuc3VzcGVuZGVkICYmIHRva2VuKSB7XG4gICAgICAgICAgICBpZiAodG9rZW4gaW5zdGFuY2VvZiBDb2xNZXRhZGF0YVRva2VuKSB7XG4gICAgICAgICAgICAgIHBhcnNlci5jb2xNZXRhZGF0YSA9IHRva2VuLmNvbHVtbnM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB5aWVsZCB0b2tlbjtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIHR5cGU6ICcgKyB0eXBlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHN0cmVhbUJ1ZmZlcjogU3RyZWFtQnVmZmVyLCBkZWJ1ZzogRGVidWcsIG9wdGlvbnM6IFBhcnNlck9wdGlvbnMpIHtcbiAgICB0aGlzLmRlYnVnID0gZGVidWc7XG4gICAgdGhpcy5jb2xNZXRhZGF0YSA9IFtdO1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cbiAgICB0aGlzLnN0cmVhbUJ1ZmZlciA9IHN0cmVhbUJ1ZmZlcjtcbiAgICB0aGlzLnN1c3BlbmRlZCA9IGZhbHNlO1xuICAgIHRoaXMubmV4dCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldCBidWZmZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RyZWFtQnVmZmVyLmJ1ZmZlcjtcbiAgfVxuXG4gIGdldCBwb3NpdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5zdHJlYW1CdWZmZXIucG9zaXRpb247XG4gIH1cblxuICBzZXQgcG9zaXRpb24odmFsdWUpIHtcbiAgICB0aGlzLnN0cmVhbUJ1ZmZlci5wb3NpdGlvbiA9IHZhbHVlO1xuICB9XG5cbiAgc3VzcGVuZChuZXh0OiAoKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5zdXNwZW5kZWQgPSB0cnVlO1xuICAgIHRoaXMubmV4dCA9IG5leHQ7XG4gIH1cblxuICBhd2FpdERhdGEobGVuZ3RoOiBudW1iZXIsIGNhbGxiYWNrOiAoKSA9PiB2b2lkKSB7XG4gICAgaWYgKHRoaXMucG9zaXRpb24gKyBsZW5ndGggPD0gdGhpcy5idWZmZXIubGVuZ3RoKSB7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN1c3BlbmQoKCkgPT4ge1xuICAgICAgICB0aGlzLmF3YWl0RGF0YShsZW5ndGgsIGNhbGxiYWNrKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJlYWRJbnQ4KGNhbGxiYWNrOiAoZGF0YTogbnVtYmVyKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5hd2FpdERhdGEoMSwgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuYnVmZmVyLnJlYWRJbnQ4KHRoaXMucG9zaXRpb24pO1xuICAgICAgdGhpcy5wb3NpdGlvbiArPSAxO1xuICAgICAgY2FsbGJhY2soZGF0YSk7XG4gICAgfSk7XG4gIH1cblxuICByZWFkVUludDgoY2FsbGJhY2s6IChkYXRhOiBudW1iZXIpID0+IHZvaWQpIHtcbiAgICB0aGlzLmF3YWl0RGF0YSgxLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5idWZmZXIucmVhZFVJbnQ4KHRoaXMucG9zaXRpb24pO1xuICAgICAgdGhpcy5wb3NpdGlvbiArPSAxO1xuICAgICAgY2FsbGJhY2soZGF0YSk7XG4gICAgfSk7XG4gIH1cblxuICByZWFkSW50MTZMRShjYWxsYmFjazogKGRhdGE6IG51bWJlcikgPT4gdm9pZCkge1xuICAgIHRoaXMuYXdhaXREYXRhKDIsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmJ1ZmZlci5yZWFkSW50MTZMRSh0aGlzLnBvc2l0aW9uKTtcbiAgICAgIHRoaXMucG9zaXRpb24gKz0gMjtcbiAgICAgIGNhbGxiYWNrKGRhdGEpO1xuICAgIH0pO1xuICB9XG5cbiAgcmVhZEludDE2QkUoY2FsbGJhY2s6IChkYXRhOiBudW1iZXIpID0+IHZvaWQpIHtcbiAgICB0aGlzLmF3YWl0RGF0YSgyLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5idWZmZXIucmVhZEludDE2QkUodGhpcy5wb3NpdGlvbik7XG4gICAgICB0aGlzLnBvc2l0aW9uICs9IDI7XG4gICAgICBjYWxsYmFjayhkYXRhKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlYWRVSW50MTZMRShjYWxsYmFjazogKGRhdGE6IG51bWJlcikgPT4gdm9pZCkge1xuICAgIHRoaXMuYXdhaXREYXRhKDIsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmJ1ZmZlci5yZWFkVUludDE2TEUodGhpcy5wb3NpdGlvbik7XG4gICAgICB0aGlzLnBvc2l0aW9uICs9IDI7XG4gICAgICBjYWxsYmFjayhkYXRhKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlYWRVSW50MTZCRShjYWxsYmFjazogKGRhdGE6IG51bWJlcikgPT4gdm9pZCkge1xuICAgIHRoaXMuYXdhaXREYXRhKDIsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmJ1ZmZlci5yZWFkVUludDE2QkUodGhpcy5wb3NpdGlvbik7XG4gICAgICB0aGlzLnBvc2l0aW9uICs9IDI7XG4gICAgICBjYWxsYmFjayhkYXRhKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlYWRJbnQzMkxFKGNhbGxiYWNrOiAoZGF0YTogbnVtYmVyKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5hd2FpdERhdGEoNCwgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuYnVmZmVyLnJlYWRJbnQzMkxFKHRoaXMucG9zaXRpb24pO1xuICAgICAgdGhpcy5wb3NpdGlvbiArPSA0O1xuICAgICAgY2FsbGJhY2soZGF0YSk7XG4gICAgfSk7XG4gIH1cblxuICByZWFkSW50MzJCRShjYWxsYmFjazogKGRhdGE6IG51bWJlcikgPT4gdm9pZCkge1xuICAgIHRoaXMuYXdhaXREYXRhKDQsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmJ1ZmZlci5yZWFkSW50MzJCRSh0aGlzLnBvc2l0aW9uKTtcbiAgICAgIHRoaXMucG9zaXRpb24gKz0gNDtcbiAgICAgIGNhbGxiYWNrKGRhdGEpO1xuICAgIH0pO1xuICB9XG5cbiAgcmVhZFVJbnQzMkxFKGNhbGxiYWNrOiAoZGF0YTogbnVtYmVyKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5hd2FpdERhdGEoNCwgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuYnVmZmVyLnJlYWRVSW50MzJMRSh0aGlzLnBvc2l0aW9uKTtcbiAgICAgIHRoaXMucG9zaXRpb24gKz0gNDtcbiAgICAgIGNhbGxiYWNrKGRhdGEpO1xuICAgIH0pO1xuICB9XG5cbiAgcmVhZFVJbnQzMkJFKGNhbGxiYWNrOiAoZGF0YTogbnVtYmVyKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5hd2FpdERhdGEoNCwgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuYnVmZmVyLnJlYWRVSW50MzJCRSh0aGlzLnBvc2l0aW9uKTtcbiAgICAgIHRoaXMucG9zaXRpb24gKz0gNDtcbiAgICAgIGNhbGxiYWNrKGRhdGEpO1xuICAgIH0pO1xuICB9XG5cbiAgcmVhZEJpZ0ludDY0TEUoY2FsbGJhY2s6IChkYXRhOiBiaWdpbnQpID0+IHZvaWQpIHtcbiAgICB0aGlzLmF3YWl0RGF0YSg4LCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5idWZmZXIucmVhZEJpZ0ludDY0TEUodGhpcy5wb3NpdGlvbik7XG4gICAgICB0aGlzLnBvc2l0aW9uICs9IDg7XG4gICAgICBjYWxsYmFjayhkYXRhKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlYWRJbnQ2NExFKGNhbGxiYWNrOiAoZGF0YTogbnVtYmVyKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5hd2FpdERhdGEoOCwgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IE1hdGgucG93KDIsIDMyKSAqIHRoaXMuYnVmZmVyLnJlYWRJbnQzMkxFKHRoaXMucG9zaXRpb24gKyA0KSArICgodGhpcy5idWZmZXJbdGhpcy5wb3NpdGlvbiArIDRdICYgMHg4MCkgPT09IDB4ODAgPyAxIDogLTEpICogdGhpcy5idWZmZXIucmVhZFVJbnQzMkxFKHRoaXMucG9zaXRpb24pO1xuICAgICAgdGhpcy5wb3NpdGlvbiArPSA4O1xuICAgICAgY2FsbGJhY2soZGF0YSk7XG4gICAgfSk7XG4gIH1cblxuICByZWFkSW50NjRCRShjYWxsYmFjazogKGRhdGE6IG51bWJlcikgPT4gdm9pZCkge1xuICAgIHRoaXMuYXdhaXREYXRhKDgsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBNYXRoLnBvdygyLCAzMikgKiB0aGlzLmJ1ZmZlci5yZWFkSW50MzJCRSh0aGlzLnBvc2l0aW9uKSArICgodGhpcy5idWZmZXJbdGhpcy5wb3NpdGlvbl0gJiAweDgwKSA9PT0gMHg4MCA/IDEgOiAtMSkgKiB0aGlzLmJ1ZmZlci5yZWFkVUludDMyQkUodGhpcy5wb3NpdGlvbiArIDQpO1xuICAgICAgdGhpcy5wb3NpdGlvbiArPSA4O1xuICAgICAgY2FsbGJhY2soZGF0YSk7XG4gICAgfSk7XG4gIH1cblxuICByZWFkQmlnVUludDY0TEUoY2FsbGJhY2s6IChkYXRhOiBiaWdpbnQpID0+IHZvaWQpIHtcbiAgICB0aGlzLmF3YWl0RGF0YSg4LCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5idWZmZXIucmVhZEJpZ1VJbnQ2NExFKHRoaXMucG9zaXRpb24pO1xuICAgICAgdGhpcy5wb3NpdGlvbiArPSA4O1xuICAgICAgY2FsbGJhY2soZGF0YSk7XG4gICAgfSk7XG4gIH1cblxuICByZWFkVUludDY0TEUoY2FsbGJhY2s6IChkYXRhOiBudW1iZXIpID0+IHZvaWQpIHtcbiAgICB0aGlzLmF3YWl0RGF0YSg4LCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gTWF0aC5wb3coMiwgMzIpICogdGhpcy5idWZmZXIucmVhZFVJbnQzMkxFKHRoaXMucG9zaXRpb24gKyA0KSArIHRoaXMuYnVmZmVyLnJlYWRVSW50MzJMRSh0aGlzLnBvc2l0aW9uKTtcbiAgICAgIHRoaXMucG9zaXRpb24gKz0gODtcbiAgICAgIGNhbGxiYWNrKGRhdGEpO1xuICAgIH0pO1xuICB9XG5cbiAgcmVhZFVJbnQ2NEJFKGNhbGxiYWNrOiAoZGF0YTogbnVtYmVyKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5hd2FpdERhdGEoOCwgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IE1hdGgucG93KDIsIDMyKSAqIHRoaXMuYnVmZmVyLnJlYWRVSW50MzJCRSh0aGlzLnBvc2l0aW9uKSArIHRoaXMuYnVmZmVyLnJlYWRVSW50MzJCRSh0aGlzLnBvc2l0aW9uICsgNCk7XG4gICAgICB0aGlzLnBvc2l0aW9uICs9IDg7XG4gICAgICBjYWxsYmFjayhkYXRhKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlYWRGbG9hdExFKGNhbGxiYWNrOiAoZGF0YTogbnVtYmVyKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5hd2FpdERhdGEoNCwgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuYnVmZmVyLnJlYWRGbG9hdExFKHRoaXMucG9zaXRpb24pO1xuICAgICAgdGhpcy5wb3NpdGlvbiArPSA0O1xuICAgICAgY2FsbGJhY2soZGF0YSk7XG4gICAgfSk7XG4gIH1cblxuICByZWFkRmxvYXRCRShjYWxsYmFjazogKGRhdGE6IG51bWJlcikgPT4gdm9pZCkge1xuICAgIHRoaXMuYXdhaXREYXRhKDQsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmJ1ZmZlci5yZWFkRmxvYXRCRSh0aGlzLnBvc2l0aW9uKTtcbiAgICAgIHRoaXMucG9zaXRpb24gKz0gNDtcbiAgICAgIGNhbGxiYWNrKGRhdGEpO1xuICAgIH0pO1xuICB9XG5cbiAgcmVhZERvdWJsZUxFKGNhbGxiYWNrOiAoZGF0YTogbnVtYmVyKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5hd2FpdERhdGEoOCwgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuYnVmZmVyLnJlYWREb3VibGVMRSh0aGlzLnBvc2l0aW9uKTtcbiAgICAgIHRoaXMucG9zaXRpb24gKz0gODtcbiAgICAgIGNhbGxiYWNrKGRhdGEpO1xuICAgIH0pO1xuICB9XG5cbiAgcmVhZERvdWJsZUJFKGNhbGxiYWNrOiAoZGF0YTogbnVtYmVyKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5hd2FpdERhdGEoOCwgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuYnVmZmVyLnJlYWREb3VibGVCRSh0aGlzLnBvc2l0aW9uKTtcbiAgICAgIHRoaXMucG9zaXRpb24gKz0gODtcbiAgICAgIGNhbGxiYWNrKGRhdGEpO1xuICAgIH0pO1xuICB9XG5cbiAgcmVhZFVJbnQyNExFKGNhbGxiYWNrOiAoZGF0YTogbnVtYmVyKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5hd2FpdERhdGEoMywgKCkgPT4ge1xuICAgICAgY29uc3QgbG93ID0gdGhpcy5idWZmZXIucmVhZFVJbnQxNkxFKHRoaXMucG9zaXRpb24pO1xuICAgICAgY29uc3QgaGlnaCA9IHRoaXMuYnVmZmVyLnJlYWRVSW50OCh0aGlzLnBvc2l0aW9uICsgMik7XG5cbiAgICAgIHRoaXMucG9zaXRpb24gKz0gMztcblxuICAgICAgY2FsbGJhY2sobG93IHwgKGhpZ2ggPDwgMTYpKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlYWRVSW50NDBMRShjYWxsYmFjazogKGRhdGE6IG51bWJlcikgPT4gdm9pZCkge1xuICAgIHRoaXMuYXdhaXREYXRhKDUsICgpID0+IHtcbiAgICAgIGNvbnN0IGxvdyA9IHRoaXMuYnVmZmVyLnJlYWRVSW50MzJMRSh0aGlzLnBvc2l0aW9uKTtcbiAgICAgIGNvbnN0IGhpZ2ggPSB0aGlzLmJ1ZmZlci5yZWFkVUludDgodGhpcy5wb3NpdGlvbiArIDQpO1xuXG4gICAgICB0aGlzLnBvc2l0aW9uICs9IDU7XG5cbiAgICAgIGNhbGxiYWNrKCgweDEwMDAwMDAwMCAqIGhpZ2gpICsgbG93KTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlYWRVTnVtZXJpYzY0TEUoY2FsbGJhY2s6IChkYXRhOiBudW1iZXIpID0+IHZvaWQpIHtcbiAgICB0aGlzLmF3YWl0RGF0YSg4LCAoKSA9PiB7XG4gICAgICBjb25zdCBsb3cgPSB0aGlzLmJ1ZmZlci5yZWFkVUludDMyTEUodGhpcy5wb3NpdGlvbik7XG4gICAgICBjb25zdCBoaWdoID0gdGhpcy5idWZmZXIucmVhZFVJbnQzMkxFKHRoaXMucG9zaXRpb24gKyA0KTtcblxuICAgICAgdGhpcy5wb3NpdGlvbiArPSA4O1xuXG4gICAgICBjYWxsYmFjaygoMHgxMDAwMDAwMDAgKiBoaWdoKSArIGxvdyk7XG4gICAgfSk7XG4gIH1cblxuICByZWFkVU51bWVyaWM5NkxFKGNhbGxiYWNrOiAoZGF0YTogbnVtYmVyKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5hd2FpdERhdGEoMTIsICgpID0+IHtcbiAgICAgIGNvbnN0IGR3b3JkMSA9IHRoaXMuYnVmZmVyLnJlYWRVSW50MzJMRSh0aGlzLnBvc2l0aW9uKTtcbiAgICAgIGNvbnN0IGR3b3JkMiA9IHRoaXMuYnVmZmVyLnJlYWRVSW50MzJMRSh0aGlzLnBvc2l0aW9uICsgNCk7XG4gICAgICBjb25zdCBkd29yZDMgPSB0aGlzLmJ1ZmZlci5yZWFkVUludDMyTEUodGhpcy5wb3NpdGlvbiArIDgpO1xuXG4gICAgICB0aGlzLnBvc2l0aW9uICs9IDEyO1xuXG4gICAgICBjYWxsYmFjayhkd29yZDEgKyAoMHgxMDAwMDAwMDAgKiBkd29yZDIpICsgKDB4MTAwMDAwMDAwICogMHgxMDAwMDAwMDAgKiBkd29yZDMpKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlYWRVTnVtZXJpYzEyOExFKGNhbGxiYWNrOiAoZGF0YTogbnVtYmVyKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5hd2FpdERhdGEoMTYsICgpID0+IHtcbiAgICAgIGNvbnN0IGR3b3JkMSA9IHRoaXMuYnVmZmVyLnJlYWRVSW50MzJMRSh0aGlzLnBvc2l0aW9uKTtcbiAgICAgIGNvbnN0IGR3b3JkMiA9IHRoaXMuYnVmZmVyLnJlYWRVSW50MzJMRSh0aGlzLnBvc2l0aW9uICsgNCk7XG4gICAgICBjb25zdCBkd29yZDMgPSB0aGlzLmJ1ZmZlci5yZWFkVUludDMyTEUodGhpcy5wb3NpdGlvbiArIDgpO1xuICAgICAgY29uc3QgZHdvcmQ0ID0gdGhpcy5idWZmZXIucmVhZFVJbnQzMkxFKHRoaXMucG9zaXRpb24gKyAxMik7XG5cbiAgICAgIHRoaXMucG9zaXRpb24gKz0gMTY7XG5cbiAgICAgIGNhbGxiYWNrKGR3b3JkMSArICgweDEwMDAwMDAwMCAqIGR3b3JkMikgKyAoMHgxMDAwMDAwMDAgKiAweDEwMDAwMDAwMCAqIGR3b3JkMykgKyAoMHgxMDAwMDAwMDAgKiAweDEwMDAwMDAwMCAqIDB4MTAwMDAwMDAwICogZHdvcmQ0KSk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBWYXJpYWJsZSBsZW5ndGggZGF0YVxuXG4gIHJlYWRCdWZmZXIobGVuZ3RoOiBudW1iZXIsIGNhbGxiYWNrOiAoZGF0YTogQnVmZmVyKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5hd2FpdERhdGEobGVuZ3RoLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5idWZmZXIuc2xpY2UodGhpcy5wb3NpdGlvbiwgdGhpcy5wb3NpdGlvbiArIGxlbmd0aCk7XG4gICAgICB0aGlzLnBvc2l0aW9uICs9IGxlbmd0aDtcbiAgICAgIGNhbGxiYWNrKGRhdGEpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gUmVhZCBhIFVuaWNvZGUgU3RyaW5nIChCVkFSQ0hBUilcbiAgcmVhZEJWYXJDaGFyKGNhbGxiYWNrOiAoZGF0YTogc3RyaW5nKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5yZWFkVUludDgoKGxlbmd0aCkgPT4ge1xuICAgICAgdGhpcy5yZWFkQnVmZmVyKGxlbmd0aCAqIDIsIChkYXRhKSA9PiB7XG4gICAgICAgIGNhbGxiYWNrKGRhdGEudG9TdHJpbmcoJ3VjczInKSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFJlYWQgYSBVbmljb2RlIFN0cmluZyAoVVNWQVJDSEFSKVxuICByZWFkVXNWYXJDaGFyKGNhbGxiYWNrOiAoZGF0YTogc3RyaW5nKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5yZWFkVUludDE2TEUoKGxlbmd0aCkgPT4ge1xuICAgICAgdGhpcy5yZWFkQnVmZmVyKGxlbmd0aCAqIDIsIChkYXRhKSA9PiB7XG4gICAgICAgIGNhbGxiYWNrKGRhdGEudG9TdHJpbmcoJ3VjczInKSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFJlYWQgYmluYXJ5IGRhdGEgKEJWQVJCWVRFKVxuICByZWFkQlZhckJ5dGUoY2FsbGJhY2s6IChkYXRhOiBCdWZmZXIpID0+IHZvaWQpIHtcbiAgICB0aGlzLnJlYWRVSW50OCgobGVuZ3RoKSA9PiB7XG4gICAgICB0aGlzLnJlYWRCdWZmZXIobGVuZ3RoLCBjYWxsYmFjayk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBSZWFkIGJpbmFyeSBkYXRhIChVU1ZBUkJZVEUpXG4gIHJlYWRVc1ZhckJ5dGUoY2FsbGJhY2s6IChkYXRhOiBCdWZmZXIpID0+IHZvaWQpIHtcbiAgICB0aGlzLnJlYWRVSW50MTZMRSgobGVuZ3RoKSA9PiB7XG4gICAgICB0aGlzLnJlYWRCdWZmZXIobGVuZ3RoLCBjYWxsYmFjayk7XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUGFyc2VyO1xubW9kdWxlLmV4cG9ydHMgPSBQYXJzZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUdBLElBQUFBLE1BQUEsR0FBQUMsT0FBQTtBQUVBLElBQUFDLHVCQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxnQkFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUkscUJBQUEsR0FBQUYsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFLLHFCQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxrQkFBQSxHQUFBSixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQU8sb0JBQUEsR0FBQUwsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFRLG9CQUFBLEdBQUFOLHNCQUFB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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream-parser.js","names":["_token","require","_colmetadataTokenParser","_interopRequireDefault","_doneTokenParser","_envChangeTokenParser","_infoerrorTokenParser","_fedauthInfoParser","_featureExtAckParser","_loginackTokenParser","_orderTokenParser","_returnstatusTokenParser","_returnvalueTokenParser","_rowTokenParser","_nbcrowTokenParser","_sspiTokenParser","obj","__esModule","default","tokenParsers","TYPE","DONE","doneParser","DONEINPROC","doneInProcParser","DONEPROC","doneProcParser","ENVCHANGE","envChangeParser","ERROR","errorParser","FEDAUTHINFO","fedAuthInfoParser","FEATUREEXTACK","featureExtAckParser","INFO","infoParser","LOGINACK","loginAckParser","ORDER","orderParser","RETURNSTATUS","returnStatusParser","RETURNVALUE","returnValueParser","SSPI","sspiParser","StreamBuffer","iterator","buffer","position","constructor","iterable","Symbol","asyncIterator","call","Buffer","alloc","waitForChunk","result","next","done","Error","length","value","concat","slice","Parser","debug","colMetadata","options","suspended","streamBuffer","parseTokens","token","onDoneParsing","t","parser","err","ColMetadataToken","columns","type","readUInt8","COLMETADATA","colMetadataParser","ROW","rowParser","NBCROW","nbcRowParser","undefined","suspend","awaitData","callback","readInt8","data","readInt16LE","readInt16BE","readUInt16LE","readUInt16BE","readInt32LE","readInt32BE","readUInt32LE","readUInt32BE","readBigInt64LE","readInt64LE","Math","pow","readInt64BE","readBigUInt64LE","readUInt64LE","readUInt64BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","readUInt24LE","low","high","readUInt40LE","readUNumeric64LE","readUNumeric96LE","dword1","dword2","dword3","readUNumeric128LE","dword4","readBuffer","readBVarChar","toString","readUsVarChar","readBVarByte","readUsVarByte","_default","exports","module"],"sources":["../../src/token/stream-parser.ts"],"sourcesContent":["import Debug from '../debug';\nimport { InternalConnectionOptions } from '../connection';\n\nimport { TYPE, Token, ColMetadataToken } from './token';\n\nimport colMetadataParser, { ColumnMetadata } from './colmetadata-token-parser';\nimport { doneParser, doneInProcParser, doneProcParser } from './done-token-parser';\nimport envChangeParser from './env-change-token-parser';\nimport { errorParser, infoParser } from './infoerror-token-parser';\nimport fedAuthInfoParser from './fedauth-info-parser';\nimport featureExtAckParser from './feature-ext-ack-parser';\nimport loginAckParser from './loginack-token-parser';\nimport orderParser from './order-token-parser';\nimport returnStatusParser from './returnstatus-token-parser';\nimport returnValueParser from './returnvalue-token-parser';\nimport rowParser from './row-token-parser';\nimport nbcRowParser from './nbcrow-token-parser';\nimport sspiParser from './sspi-token-parser';\n\nconst tokenParsers = {\n [TYPE.DONE]: doneParser,\n [TYPE.DONEINPROC]: doneInProcParser,\n [TYPE.DONEPROC]: doneProcParser,\n [TYPE.ENVCHANGE]: envChangeParser,\n [TYPE.ERROR]: errorParser,\n [TYPE.FEDAUTHINFO]: fedAuthInfoParser,\n [TYPE.FEATUREEXTACK]: featureExtAckParser,\n [TYPE.INFO]: infoParser,\n [TYPE.LOGINACK]: loginAckParser,\n [TYPE.ORDER]: orderParser,\n [TYPE.RETURNSTATUS]: returnStatusParser,\n [TYPE.RETURNVALUE]: returnValueParser,\n [TYPE.SSPI]: sspiParser\n};\n\nexport type ParserOptions = Pick<InternalConnectionOptions, 'useUTC' | 'lowerCaseGuids' | 'tdsVersion' | 'useColumnNames' | 'columnNameReplacer' | 'camelCaseColumns'>;\n\nclass StreamBuffer {\n iterator: AsyncIterator<Buffer, any, undefined> | Iterator<Buffer, any, undefined>;\n buffer: Buffer;\n position: number;\n\n constructor(iterable: AsyncIterable<Buffer> | Iterable<Buffer>) {\n this.iterator = ((iterable as AsyncIterable<Buffer>)[Symbol.asyncIterator] || (iterable as Iterable<Buffer>)[Symbol.iterator]).call(iterable);\n\n this.buffer = Buffer.alloc(0);\n this.position = 0;\n }\n\n async waitForChunk() {\n const result = await this.iterator.next();\n if (result.done) {\n throw new Error('unexpected end of data');\n }\n\n if (this.position === this.buffer.length) {\n this.buffer = result.value;\n } else {\n this.buffer = Buffer.concat([this.buffer.slice(this.position), result.value]);\n }\n this.position = 0;\n }\n}\n\nclass Parser {\n debug: Debug;\n colMetadata: ColumnMetadata[];\n options: ParserOptions;\n\n suspended: boolean;\n next: (() => void) | undefined;\n streamBuffer: StreamBuffer;\n\n static async *parseTokens(iterable: AsyncIterable<Buffer> | Iterable<Buffer>, debug: Debug, options: ParserOptions, colMetadata: ColumnMetadata[] = []) {\n let token: Token | undefined;\n const onDoneParsing = (t: Token | undefined) => { token = t; };\n\n const streamBuffer = new StreamBuffer(iterable);\n\n const parser = new Parser(streamBuffer, debug, options);\n parser.colMetadata = colMetadata;\n\n while (true) {\n try {\n await streamBuffer.waitForChunk();\n } catch (err: unknown) {\n if (streamBuffer.position === streamBuffer.buffer.length) {\n return;\n }\n\n throw err;\n }\n\n if (parser.suspended) {\n // Unsuspend and continue from where ever we left off.\n parser.suspended = false;\n const next = parser.next!;\n\n next();\n\n // Check if a new token was parsed after unsuspension.\n if (!parser.suspended && token) {\n if (token instanceof ColMetadataToken) {\n parser.colMetadata = token.columns;\n }\n\n yield token;\n }\n }\n\n while (!parser.suspended && parser.position + 1 <= parser.buffer.length) {\n const type = parser.buffer.readUInt8(parser.position);\n\n parser.position += 1;\n\n if (type === TYPE.COLMETADATA) {\n const token = await colMetadataParser(parser);\n parser.colMetadata = token.columns;\n yield token;\n } else if (type === TYPE.ROW) {\n yield rowParser(parser);\n } else if (type === TYPE.NBCROW) {\n yield nbcRowParser(parser);\n } else if (tokenParsers[type]) {\n tokenParsers[type](parser, parser.options, onDoneParsing);\n\n // Check if a new token was parsed after unsuspension.\n if (!parser.suspended && token) {\n if (token instanceof ColMetadataToken) {\n parser.colMetadata = token.columns;\n }\n yield token;\n }\n } else {\n throw new Error('Unknown type: ' + type);\n }\n }\n }\n }\n\n constructor(streamBuffer: StreamBuffer, debug: Debug, options: ParserOptions) {\n this.debug = debug;\n this.colMetadata = [];\n this.options = options;\n\n this.streamBuffer = streamBuffer;\n this.suspended = false;\n this.next = undefined;\n }\n\n get buffer() {\n return this.streamBuffer.buffer;\n }\n\n get position() {\n return this.streamBuffer.position;\n }\n\n set position(value) {\n this.streamBuffer.position = value;\n }\n\n suspend(next: () => void) {\n this.suspended = true;\n this.next = next;\n }\n\n awaitData(length: number, callback: () => void) {\n if (this.position + length <= this.buffer.length) {\n callback();\n } else {\n this.suspend(() => {\n this.awaitData(length, callback);\n });\n }\n }\n\n readInt8(callback: (data: number) => void) {\n this.awaitData(1, () => {\n const data = this.buffer.readInt8(this.position);\n this.position += 1;\n callback(data);\n });\n }\n\n readUInt8(callback: (data: number) => void) {\n this.awaitData(1, () => {\n const data = this.buffer.readUInt8(this.position);\n this.position += 1;\n callback(data);\n });\n }\n\n readInt16LE(callback: (data: number) => void) {\n this.awaitData(2, () => {\n const data = this.buffer.readInt16LE(this.position);\n this.position += 2;\n callback(data);\n });\n }\n\n readInt16BE(callback: (data: number) => void) {\n this.awaitData(2, () => {\n const data = this.buffer.readInt16BE(this.position);\n this.position += 2;\n callback(data);\n });\n }\n\n readUInt16LE(callback: (data: number) => void) {\n this.awaitData(2, () => {\n const data = this.buffer.readUInt16LE(this.position);\n this.position += 2;\n callback(data);\n });\n }\n\n readUInt16BE(callback: (data: number) => void) {\n this.awaitData(2, () => {\n const data = this.buffer.readUInt16BE(this.position);\n this.position += 2;\n callback(data);\n });\n }\n\n readInt32LE(callback: (data: number) => void) {\n this.awaitData(4, () => {\n const data = this.buffer.readInt32LE(this.position);\n this.position += 4;\n callback(data);\n });\n }\n\n readInt32BE(callback: (data: number) => void) {\n this.awaitData(4, () => {\n const data = this.buffer.readInt32BE(this.position);\n this.position += 4;\n callback(data);\n });\n }\n\n readUInt32LE(callback: (data: number) => void) {\n this.awaitData(4, () => {\n const data = this.buffer.readUInt32LE(this.position);\n this.position += 4;\n callback(data);\n });\n }\n\n readUInt32BE(callback: (data: number) => void) {\n this.awaitData(4, () => {\n const data = this.buffer.readUInt32BE(this.position);\n this.position += 4;\n callback(data);\n });\n }\n\n readBigInt64LE(callback: (data: bigint) => void) {\n this.awaitData(8, () => {\n const data = this.buffer.readBigInt64LE(this.position);\n this.position += 8;\n callback(data);\n });\n }\n\n readInt64LE(callback: (data: number) => void) {\n this.awaitData(8, () => {\n const data = Math.pow(2, 32) * this.buffer.readInt32LE(this.position + 4) + ((this.buffer[this.position + 4] & 0x80) === 0x80 ? 1 : -1) * this.buffer.readUInt32LE(this.position);\n this.position += 8;\n callback(data);\n });\n }\n\n readInt64BE(callback: (data: number) => void) {\n this.awaitData(8, () => {\n const data = Math.pow(2, 32) * this.buffer.readInt32BE(this.position) + ((this.buffer[this.position] & 0x80) === 0x80 ? 1 : -1) * this.buffer.readUInt32BE(this.position + 4);\n this.position += 8;\n callback(data);\n });\n }\n\n readBigUInt64LE(callback: (data: bigint) => void) {\n this.awaitData(8, () => {\n const data = this.buffer.readBigUInt64LE(this.position);\n this.position += 8;\n callback(data);\n });\n }\n\n readUInt64LE(callback: (data: number) => void) {\n this.awaitData(8, () => {\n const data = Math.pow(2, 32) * this.buffer.readUInt32LE(this.position + 4) + this.buffer.readUInt32LE(this.position);\n this.position += 8;\n callback(data);\n });\n }\n\n readUInt64BE(callback: (data: number) => void) {\n this.awaitData(8, () => {\n const data = Math.pow(2, 32) * this.buffer.readUInt32BE(this.position) + this.buffer.readUInt32BE(this.position + 4);\n this.position += 8;\n callback(data);\n });\n }\n\n readFloatLE(callback: (data: number) => void) {\n this.awaitData(4, () => {\n const data = this.buffer.readFloatLE(this.position);\n this.position += 4;\n callback(data);\n });\n }\n\n readFloatBE(callback: (data: number) => void) {\n this.awaitData(4, () => {\n const data = this.buffer.readFloatBE(this.position);\n this.position += 4;\n callback(data);\n });\n }\n\n readDoubleLE(callback: (data: number) => void) {\n this.awaitData(8, () => {\n const data = this.buffer.readDoubleLE(this.position);\n this.position += 8;\n callback(data);\n });\n }\n\n readDoubleBE(callback: (data: number) => void) {\n this.awaitData(8, () => {\n const data = this.buffer.readDoubleBE(this.position);\n this.position += 8;\n callback(data);\n });\n }\n\n readUInt24LE(callback: (data: number) => void) {\n this.awaitData(3, () => {\n const low = this.buffer.readUInt16LE(this.position);\n const high = this.buffer.readUInt8(this.position + 2);\n\n this.position += 3;\n\n callback(low | (high << 16));\n });\n }\n\n readUInt40LE(callback: (data: number) => void) {\n this.awaitData(5, () => {\n const low = this.buffer.readUInt32LE(this.position);\n const high = this.buffer.readUInt8(this.position + 4);\n\n this.position += 5;\n\n callback((0x100000000 * high) + low);\n });\n }\n\n readUNumeric64LE(callback: (data: number) => void) {\n this.awaitData(8, () => {\n const low = this.buffer.readUInt32LE(this.position);\n const high = this.buffer.readUInt32LE(this.position + 4);\n\n this.position += 8;\n\n callback((0x100000000 * high) + low);\n });\n }\n\n readUNumeric96LE(callback: (data: number) => void) {\n this.awaitData(12, () => {\n const dword1 = this.buffer.readUInt32LE(this.position);\n const dword2 = this.buffer.readUInt32LE(this.position + 4);\n const dword3 = this.buffer.readUInt32LE(this.position + 8);\n\n this.position += 12;\n\n callback(dword1 + (0x100000000 * dword2) + (0x100000000 * 0x100000000 * dword3));\n });\n }\n\n readUNumeric128LE(callback: (data: number) => void) {\n this.awaitData(16, () => {\n const dword1 = this.buffer.readUInt32LE(this.position);\n const dword2 = this.buffer.readUInt32LE(this.position + 4);\n const dword3 = this.buffer.readUInt32LE(this.position + 8);\n const dword4 = this.buffer.readUInt32LE(this.position + 12);\n\n this.position += 16;\n\n callback(dword1 + (0x100000000 * dword2) + (0x100000000 * 0x100000000 * dword3) + (0x100000000 * 0x100000000 * 0x100000000 * dword4));\n });\n }\n\n // Variable length data\n\n readBuffer(length: number, callback: (data: Buffer) => void) {\n this.awaitData(length, () => {\n const data = this.buffer.slice(this.position, this.position + length);\n this.position += length;\n callback(data);\n });\n }\n\n // Read a Unicode String (BVARCHAR)\n readBVarChar(callback: (data: string) => void) {\n this.readUInt8((length) => {\n this.readBuffer(length * 2, (data) => {\n callback(data.toString('ucs2'));\n });\n });\n }\n\n // Read a Unicode String (USVARCHAR)\n readUsVarChar(callback: (data: string) => void) {\n this.readUInt16LE((length) => {\n this.readBuffer(length * 2, (data) => {\n callback(data.toString('ucs2'));\n });\n });\n }\n\n // Read binary data (BVARBYTE)\n readBVarByte(callback: (data: Buffer) => void) {\n this.readUInt8((length) => {\n this.readBuffer(length, callback);\n });\n }\n\n // Read binary data (USVARBYTE)\n readUsVarByte(callback: (data: Buffer) => void) {\n this.readUInt16LE((length) => {\n this.readBuffer(length, callback);\n });\n }\n}\n\nexport default Parser;\nmodule.exports = Parser;\n"],"mappings":"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"}