@1money/component-ui 0.0.52-alpha.1 → 0.0.52-alpha.4

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/es/components/Input/Input/Input.css +1 -1
  2. package/es/components/Input/TextArea/TextArea.css +1 -1
  3. package/es/components/Notification/NotificationStatic.js +22 -22
  4. package/es/components/ProForm/ProForm.js +38 -38
  5. package/es/components/ProForm/ProFormDependency.js +5 -5
  6. package/es/components/ProForm/Submitter.js +4 -4
  7. package/es/components/ProForm/core/hooks/useForm.js +101 -101
  8. package/es/components/ProForm/core/useFormItem.js +5 -5
  9. package/es/components/ProForm/hooks/useFieldRequest.js +12 -12
  10. package/es/components/ProForm/layouts/useOverlayForm.js +5 -5
  11. package/es/components/Select/Select.js +3 -1
  12. package/es/components/Select/SelectCustom.js +3 -1
  13. package/es/components/Select/SelectFieldShell.d.ts +1 -0
  14. package/es/components/Select/SelectFieldShell.js +3 -2
  15. package/es/components/Select/interface.d.ts +4 -2
  16. package/es/components/Select/style/Select.css +2 -2
  17. package/es/components/Select/useSelectShell.js +2 -2
  18. package/es/components/Spinner/Spinner.js +7 -7
  19. package/es/components/Typography/style/Typography.css +4 -8
  20. package/es/index.css +1 -1
  21. package/lib/components/Input/Input/Input.css +1 -1
  22. package/lib/components/Input/TextArea/TextArea.css +1 -1
  23. package/lib/components/Notification/NotificationStatic.js +22 -22
  24. package/lib/components/ProForm/ProForm.js +38 -38
  25. package/lib/components/ProForm/ProFormDependency.js +5 -5
  26. package/lib/components/ProForm/Submitter.js +4 -4
  27. package/lib/components/ProForm/core/hooks/useForm.js +101 -101
  28. package/lib/components/ProForm/core/useFormItem.js +5 -5
  29. package/lib/components/ProForm/hooks/useFieldRequest.js +12 -12
  30. package/lib/components/ProForm/layouts/useOverlayForm.js +5 -5
  31. package/lib/components/Select/Select.js +3 -1
  32. package/lib/components/Select/SelectCustom.js +3 -1
  33. package/lib/components/Select/SelectFieldShell.d.ts +1 -0
  34. package/lib/components/Select/SelectFieldShell.js +3 -2
  35. package/lib/components/Select/interface.d.ts +4 -2
  36. package/lib/components/Select/style/Select.css +2 -2
  37. package/lib/components/Select/useSelectShell.js +2 -2
  38. package/lib/components/Spinner/Spinner.js +7 -7
  39. package/lib/components/Typography/style/Typography.css +4 -8
  40. package/lib/index.css +1 -1
  41. package/package.json +1 -1
  42. package/scripts/mcp-server/index.generated.json +9 -1
@@ -94,34 +94,34 @@ export var useForm = function useForm() {
94
94
  // ---------------------------------------------------------------------------
95
95
  var validateFieldAsync = useMemoizedFn(function (name, value, rules) {
96
96
  return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
97
- var _iterator2, _step2, rule, error, _error, _error2, _error3, _error4, _error5, emailPattern, _error6, _error7, result, _error8, errorMessage;
98
- return _regeneratorRuntime.wrap(function _callee$(_context) {
97
+ var _iterator2, _step2, rule, error, _error, _error2, _error3, _error4, _error5, emailPattern, _error6, _error7, result, _error8, errorMessage, _t, _t2, _t3;
98
+ return _regeneratorRuntime.wrap(function (_context) {
99
99
  while (1) switch (_context.prev = _context.next) {
100
100
  case 0:
101
101
  if (!(!rules || rules.length === 0)) {
102
- _context.next = 2;
102
+ _context.next = 1;
103
103
  break;
104
104
  }
105
105
  return _context.abrupt("return", {
106
106
  isValid: true,
107
107
  error: null
108
108
  });
109
- case 2:
109
+ case 1:
110
110
  setValidating(function (prev) {
111
111
  return Object.assign(Object.assign({}, prev), _defineProperty({}, name, true));
112
112
  });
113
- _context.prev = 3;
113
+ _context.prev = 2;
114
114
  _iterator2 = _createForOfIteratorHelper(rules);
115
- _context.prev = 5;
115
+ _context.prev = 3;
116
116
  _iterator2.s();
117
- case 7:
117
+ case 4:
118
118
  if ((_step2 = _iterator2.n()).done) {
119
- _context.next = 69;
119
+ _context.next = 20;
120
120
  break;
121
121
  }
122
122
  rule = _step2.value;
123
123
  if (!(rule.required && (value === undefined || value === null || value === ''))) {
124
- _context.next = 13;
124
+ _context.next = 5;
125
125
  break;
126
126
  }
127
127
  error = rule.message || "".concat(name, " is required");
@@ -130,9 +130,9 @@ export var useForm = function useForm() {
130
130
  isValid: false,
131
131
  error: error
132
132
  });
133
- case 13:
133
+ case 5:
134
134
  if (!(rule.min && typeof value === 'string' && value.length < rule.min)) {
135
- _context.next = 17;
135
+ _context.next = 6;
136
136
  break;
137
137
  }
138
138
  _error = rule.message || "".concat(name, " must be at least ").concat(rule.min, " characters");
@@ -141,9 +141,9 @@ export var useForm = function useForm() {
141
141
  isValid: false,
142
142
  error: _error
143
143
  });
144
- case 17:
144
+ case 6:
145
145
  if (!(rule.max && typeof value === 'string' && value.length > rule.max)) {
146
- _context.next = 21;
146
+ _context.next = 7;
147
147
  break;
148
148
  }
149
149
  _error2 = rule.message || "".concat(name, " must be no more than ").concat(rule.max, " characters");
@@ -152,9 +152,9 @@ export var useForm = function useForm() {
152
152
  isValid: false,
153
153
  error: _error2
154
154
  });
155
- case 21:
155
+ case 7:
156
156
  if (!(rule.pattern && typeof value === 'string' && !rule.pattern.test(value))) {
157
- _context.next = 25;
157
+ _context.next = 8;
158
158
  break;
159
159
  }
160
160
  _error3 = rule.message || "".concat(name, " format is invalid");
@@ -163,13 +163,13 @@ export var useForm = function useForm() {
163
163
  isValid: false,
164
164
  error: _error3
165
165
  });
166
- case 25:
166
+ case 8:
167
167
  if (!(rule["enum"] && Array.isArray(rule["enum"]) && value)) {
168
- _context.next = 30;
168
+ _context.next = 9;
169
169
  break;
170
170
  }
171
171
  if (rule["enum"].includes(value)) {
172
- _context.next = 30;
172
+ _context.next = 9;
173
173
  break;
174
174
  }
175
175
  _error4 = rule.message || "".concat(name, " must be one of ").concat(rule["enum"].join(', '));
@@ -178,13 +178,13 @@ export var useForm = function useForm() {
178
178
  isValid: false,
179
179
  error: _error4
180
180
  });
181
- case 30:
181
+ case 9:
182
182
  if (!(rule.type === 'number' && value !== undefined && value !== null && value !== '')) {
183
- _context.next = 35;
183
+ _context.next = 10;
184
184
  break;
185
185
  }
186
186
  if (!(typeof value !== 'number' || isNaN(value))) {
187
- _context.next = 35;
187
+ _context.next = 10;
188
188
  break;
189
189
  }
190
190
  _error5 = rule.message || "".concat(name, " must be a number");
@@ -193,14 +193,14 @@ export var useForm = function useForm() {
193
193
  isValid: false,
194
194
  error: _error5
195
195
  });
196
- case 35:
196
+ case 10:
197
197
  if (!(rule.type === 'email' && value)) {
198
- _context.next = 41;
198
+ _context.next = 11;
199
199
  break;
200
200
  }
201
201
  emailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
202
202
  if (emailPattern.test(String(value))) {
203
- _context.next = 41;
203
+ _context.next = 11;
204
204
  break;
205
205
  }
206
206
  _error6 = rule.message || "".concat(name, " must be a valid email");
@@ -209,36 +209,36 @@ export var useForm = function useForm() {
209
209
  isValid: false,
210
210
  error: _error6
211
211
  });
212
- case 41:
212
+ case 11:
213
213
  if (!(rule.type === 'url' && value)) {
214
- _context.next = 51;
214
+ _context.next = 14;
215
215
  break;
216
216
  }
217
- _context.prev = 42;
217
+ _context.prev = 12;
218
218
  new URL(String(value));
219
- _context.next = 51;
219
+ _context.next = 14;
220
220
  break;
221
- case 46:
222
- _context.prev = 46;
223
- _context.t0 = _context["catch"](42);
221
+ case 13:
222
+ _context.prev = 13;
223
+ _t = _context["catch"](12);
224
224
  _error7 = rule.message || "".concat(name, " must be a valid URL");
225
225
  formCore.setFieldError(name, _error7);
226
226
  return _context.abrupt("return", {
227
227
  isValid: false,
228
228
  error: _error7
229
229
  });
230
- case 51:
230
+ case 14:
231
231
  if (!(rule.validator && typeof rule.validator === 'function')) {
232
- _context.next = 67;
232
+ _context.next = 19;
233
233
  break;
234
234
  }
235
- _context.prev = 52;
236
- _context.next = 55;
235
+ _context.prev = 15;
236
+ _context.next = 16;
237
237
  return Promise.resolve(rule.validator(value, formCore.values));
238
- case 55:
238
+ case 16:
239
239
  result = _context.sent;
240
240
  if (!(result !== true && result !== undefined)) {
241
- _context.next = 60;
241
+ _context.next = 17;
242
242
  break;
243
243
  }
244
244
  _error8 = typeof result === 'string' ? result : 'Validation failed';
@@ -247,33 +247,33 @@ export var useForm = function useForm() {
247
247
  isValid: false,
248
248
  error: _error8
249
249
  });
250
- case 60:
251
- _context.next = 67;
250
+ case 17:
251
+ _context.next = 19;
252
252
  break;
253
- case 62:
254
- _context.prev = 62;
255
- _context.t1 = _context["catch"](52);
256
- errorMessage = _context.t1 instanceof Error ? _context.t1.message : 'Validation error';
253
+ case 18:
254
+ _context.prev = 18;
255
+ _t2 = _context["catch"](15);
256
+ errorMessage = _t2 instanceof Error ? _t2.message : 'Validation error';
257
257
  formCore.setFieldError(name, errorMessage);
258
258
  return _context.abrupt("return", {
259
259
  isValid: false,
260
260
  error: errorMessage
261
261
  });
262
- case 67:
263
- _context.next = 7;
262
+ case 19:
263
+ _context.next = 4;
264
264
  break;
265
- case 69:
266
- _context.next = 74;
265
+ case 20:
266
+ _context.next = 22;
267
267
  break;
268
- case 71:
269
- _context.prev = 71;
270
- _context.t2 = _context["catch"](5);
271
- _iterator2.e(_context.t2);
272
- case 74:
273
- _context.prev = 74;
268
+ case 21:
269
+ _context.prev = 21;
270
+ _t3 = _context["catch"](3);
271
+ _iterator2.e(_t3);
272
+ case 22:
273
+ _context.prev = 22;
274
274
  _iterator2.f();
275
- return _context.finish(74);
276
- case 77:
275
+ return _context.finish(22);
276
+ case 23:
277
277
  if (formCore.errors[name]) {
278
278
  formCore.setFieldError(name, null);
279
279
  }
@@ -281,19 +281,19 @@ export var useForm = function useForm() {
281
281
  isValid: true,
282
282
  error: null
283
283
  });
284
- case 79:
285
- _context.prev = 79;
284
+ case 24:
285
+ _context.prev = 24;
286
286
  setValidating(function (prev) {
287
287
  var newValidating = Object.assign({}, prev);
288
288
  delete newValidating[name];
289
289
  return newValidating;
290
290
  });
291
- return _context.finish(79);
292
- case 82:
291
+ return _context.finish(24);
292
+ case 25:
293
293
  case "end":
294
294
  return _context.stop();
295
295
  }
296
- }, _callee, null, [[3,, 79, 82], [5, 71, 74, 77], [42, 46], [52, 62]]);
296
+ }, _callee, null, [[2,, 24, 25], [3, 21, 22, 23], [12, 13], [15, 18]]);
297
297
  }));
298
298
  });
299
299
  // ---------------------------------------------------------------------------
@@ -302,7 +302,7 @@ export var useForm = function useForm() {
302
302
  var handleFieldBlur = useEventCallback(function (name) {
303
303
  return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
304
304
  var rules;
305
- return _regeneratorRuntime.wrap(function _callee2$(_context2) {
305
+ return _regeneratorRuntime.wrap(function (_context2) {
306
306
  while (1) switch (_context2.prev = _context2.next) {
307
307
  case 0:
308
308
  setExtraTouched(function (prev) {
@@ -310,12 +310,12 @@ export var useForm = function useForm() {
310
310
  });
311
311
  rules = formCore.fieldRules[name];
312
312
  if (!(rules && validateTrigger === 'onBlur')) {
313
- _context2.next = 5;
313
+ _context2.next = 1;
314
314
  break;
315
315
  }
316
- _context2.next = 5;
316
+ _context2.next = 1;
317
317
  return validateFieldAsync(name, resolveValue(formCore.values, name), rules);
318
- case 5:
318
+ case 1:
319
319
  case "end":
320
320
  return _context2.stop();
321
321
  }
@@ -328,7 +328,7 @@ export var useForm = function useForm() {
328
328
  var validateFieldsAsync = useMemoizedFn(function (nameList) {
329
329
  return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regeneratorRuntime.mark(function _callee4() {
330
330
  var fieldsToValidate, hasError, fieldErrors, validationPromises, error;
331
- return _regeneratorRuntime.wrap(function _callee4$(_context4) {
331
+ return _regeneratorRuntime.wrap(function (_context4) {
332
332
  while (1) switch (_context4.prev = _context4.next) {
333
333
  case 0:
334
334
  fieldsToValidate = nameList || Object.keys(formCore.fieldRules);
@@ -337,17 +337,17 @@ export var useForm = function useForm() {
337
337
  validationPromises = fieldsToValidate.map(function (name) {
338
338
  return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
339
339
  var rules, _yield$validateFieldA, isValid, error;
340
- return _regeneratorRuntime.wrap(function _callee3$(_context3) {
340
+ return _regeneratorRuntime.wrap(function (_context3) {
341
341
  while (1) switch (_context3.prev = _context3.next) {
342
342
  case 0:
343
343
  rules = formCore.fieldRules[name];
344
344
  if (!rules) {
345
- _context3.next = 8;
345
+ _context3.next = 2;
346
346
  break;
347
347
  }
348
- _context3.next = 4;
348
+ _context3.next = 1;
349
349
  return validateFieldAsync(name, resolveValue(formCore.values, name), rules);
350
- case 4:
350
+ case 1:
351
351
  _yield$validateFieldA = _context3.sent;
352
352
  isValid = _yield$validateFieldA.isValid;
353
353
  error = _yield$validateFieldA.error;
@@ -355,36 +355,36 @@ export var useForm = function useForm() {
355
355
  hasError = true;
356
356
  fieldErrors[name] = error;
357
357
  }
358
- case 8:
358
+ case 2:
359
359
  case "end":
360
360
  return _context3.stop();
361
361
  }
362
362
  }, _callee3);
363
363
  }));
364
364
  });
365
- _context4.next = 6;
365
+ _context4.next = 1;
366
366
  return Promise.all(validationPromises);
367
- case 6:
367
+ case 1:
368
368
  if (!hasError) {
369
- _context4.next = 11;
369
+ _context4.next = 2;
370
370
  break;
371
371
  }
372
372
  error = new Error('Validation failed');
373
373
  error.values = formCore.values;
374
374
  error.errors = fieldErrors;
375
375
  throw error;
376
- case 11:
376
+ case 2:
377
377
  if (!nameList) {
378
- _context4.next = 13;
378
+ _context4.next = 3;
379
379
  break;
380
380
  }
381
381
  return _context4.abrupt("return", nameList.reduce(function (acc, name) {
382
382
  acc[name] = resolveValue(formCore.values, name);
383
383
  return acc;
384
384
  }, {}));
385
- case 13:
385
+ case 3:
386
386
  return _context4.abrupt("return", formCore.values);
387
- case 14:
387
+ case 4:
388
388
  case "end":
389
389
  return _context4.stop();
390
390
  }
@@ -485,32 +485,32 @@ export var useForm = function useForm() {
485
485
  // ---------------------------------------------------------------------------
486
486
  var handleSubmit = useEventCallback(function (e) {
487
487
  return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regeneratorRuntime.mark(function _callee5() {
488
- var validatedValues, typed;
489
- return _regeneratorRuntime.wrap(function _callee5$(_context5) {
488
+ var validatedValues, typed, _t4;
489
+ return _regeneratorRuntime.wrap(function (_context5) {
490
490
  while (1) switch (_context5.prev = _context5.next) {
491
491
  case 0:
492
492
  e === null || e === void 0 ? void 0 : e.preventDefault();
493
493
  _context5.prev = 1;
494
- _context5.next = 4;
494
+ _context5.next = 2;
495
495
  return validateFieldsAsync();
496
- case 4:
496
+ case 2:
497
497
  validatedValues = _context5.sent;
498
498
  onFinish === null || onFinish === void 0 ? void 0 : onFinish(validatedValues);
499
- _context5.next = 12;
499
+ _context5.next = 4;
500
500
  break;
501
- case 8:
502
- _context5.prev = 8;
503
- _context5.t0 = _context5["catch"](1);
504
- typed = _context5.t0;
501
+ case 3:
502
+ _context5.prev = 3;
503
+ _t4 = _context5["catch"](1);
504
+ typed = _t4;
505
505
  onFinishFailed === null || onFinishFailed === void 0 ? void 0 : onFinishFailed({
506
506
  values: typed.values,
507
507
  errors: typed.errors
508
508
  });
509
- case 12:
509
+ case 4:
510
510
  case "end":
511
511
  return _context5.stop();
512
512
  }
513
- }, _callee5, null, [[1, 8]]);
513
+ }, _callee5, null, [[1, 3]]);
514
514
  }));
515
515
  });
516
516
  var handleReset = useEventCallback(function (e) {
@@ -615,32 +615,32 @@ export var useForm = function useForm() {
615
615
  },
616
616
  submit: function submit(callback) {
617
617
  return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regeneratorRuntime.mark(function _callee6() {
618
- var validatedValues;
619
- return _regeneratorRuntime.wrap(function _callee6$(_context6) {
618
+ var validatedValues, _t5;
619
+ return _regeneratorRuntime.wrap(function (_context6) {
620
620
  while (1) switch (_context6.prev = _context6.next) {
621
621
  case 0:
622
622
  _context6.prev = 0;
623
- _context6.next = 3;
623
+ _context6.next = 1;
624
624
  return validateFieldsAsync();
625
- case 3:
625
+ case 1:
626
626
  validatedValues = _context6.sent;
627
627
  if (!callback) {
628
- _context6.next = 7;
628
+ _context6.next = 2;
629
629
  break;
630
630
  }
631
- _context6.next = 7;
631
+ _context6.next = 2;
632
632
  return callback(validatedValues);
633
- case 7:
633
+ case 2:
634
634
  return _context6.abrupt("return", validatedValues);
635
- case 10:
636
- _context6.prev = 10;
637
- _context6.t0 = _context6["catch"](0);
635
+ case 3:
636
+ _context6.prev = 3;
637
+ _t5 = _context6["catch"](0);
638
638
  return _context6.abrupt("return", undefined);
639
- case 13:
639
+ case 4:
640
640
  case "end":
641
641
  return _context6.stop();
642
642
  }
643
- }, _callee6, null, [[0, 10]]);
643
+ }, _callee6, null, [[0, 3]]);
644
644
  }));
645
645
  },
646
646
  defineField: defineField,
@@ -674,4 +674,4 @@ export var useForm = function useForm() {
674
674
  };
675
675
  };
676
676
  export default useForm;
677
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL2hvb2tzL3VzZUZvcm0uanMiLCJjb21wb25lbnRzL1Byb0Zvcm0vY29yZS9zcmMvY29tcG9uZW50cy9Qcm9Gb3JtL2NvcmUvaG9va3MvdXNlRm9ybS50cyJdLCJuYW1lcyI6WyJfX2F3YWl0ZXIiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsIlAiLCJnZW5lcmF0b3IiLCJhZG9wdCIsInZhbHVlIiwicmVzb2x2ZSIsIlByb21pc2UiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJzdGVwIiwibmV4dCIsImUiLCJyZWplY3RlZCIsInJlc3VsdCIsImRvbmUiLCJ0aGVuIiwiYXBwbHkiLCJfX3Jlc3QiLCJzIiwidCIsInAiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpbmRleE9mIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiaSIsImxlbmd0aCIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwidXNlU3RhdGUiLCJ1c2VNZW1vIiwidXNlQ2FsbGJhY2siLCJ1c2VFZmZlY3QiLCJtZW1vIiwiRnJhZ21lbnQiLCJSZWFjdCIsInVzZUV2ZW50Q2FsbGJhY2siLCJ1c2VNZW1vaXplZEZuIiwidXNlU2FmZVN0YXRlIiwidXNlRm9ybUNvcmUiLCJyZXNvbHZlVmFsdWUiLCJ2YWx1ZXMiLCJuYW1lIiwiaW5jbHVkZXMiLCJrZXlzIiwic3BsaXQiLCJjdXJyZW50IiwiX2l0ZXJhdG9yIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJfc3RlcCIsIm4iLCJrZXkiLCJ1bmRlZmluZWQiLCJfdHlwZW9mIiwiZXJyIiwiZiIsInVzZUZvcm0iLCJjb25maWciLCJhcmd1bWVudHMiLCJvbkZpbmlzaCIsIm9uRmluaXNoRmFpbGVkIiwib25SZXNldCIsIl9jb25maWckdmFsaWRhdGVUcmlnZyIsInZhbGlkYXRlVHJpZ2dlciIsImZvcm1Db3JlIiwiX3VzZVNhZmVTdGF0ZSIsIl91c2VTYWZlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJ2YWxpZGF0aW5nIiwic2V0VmFsaWRhdGluZyIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJleHRyYVRvdWNoZWQiLCJzZXRFeHRyYVRvdWNoZWQiLCJhbGxUb3VjaGVkIiwiYXNzaWduIiwidG91Y2hlZCIsInZhbGlkYXRlRmllbGRBc3luYyIsInJ1bGVzIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsInJ1bGUiLCJlcnJvciIsIl9lcnJvciIsIl9lcnJvcjIiLCJfZXJyb3IzIiwiX2Vycm9yNCIsIl9lcnJvcjUiLCJlbWFpbFBhdHRlcm4iLCJfZXJyb3I2IiwiX2Vycm9yNyIsIl9lcnJvcjgiLCJlcnJvck1lc3NhZ2UiLCJ3cmFwIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsInByZXYiLCJhYnJ1cHQiLCJpc1ZhbGlkIiwiX2RlZmluZVByb3BlcnR5IiwicmVxdWlyZWQiLCJtZXNzYWdlIiwiY29uY2F0Iiwic2V0RmllbGRFcnJvciIsIm1pbiIsIm1heCIsInBhdHRlcm4iLCJ0ZXN0IiwiQXJyYXkiLCJpc0FycmF5Iiwiam9pbiIsInR5cGUiLCJpc05hTiIsIlN0cmluZyIsIlVSTCIsInQwIiwidmFsaWRhdG9yIiwic2VudCIsInQxIiwiRXJyb3IiLCJ0MiIsImZpbmlzaCIsImVycm9ycyIsIm5ld1ZhbGlkYXRpbmciLCJzdG9wIiwiaGFuZGxlRmllbGRCbHVyIiwiX2NhbGxlZTIiLCJfY2FsbGVlMiQiLCJfY29udGV4dDIiLCJmaWVsZFJ1bGVzIiwidmFsaWRhdGVGaWVsZHNBc3luYyIsIm5hbWVMaXN0IiwiX2NhbGxlZTQiLCJmaWVsZHNUb1ZhbGlkYXRlIiwiaGFzRXJyb3IiLCJmaWVsZEVycm9ycyIsInZhbGlkYXRpb25Qcm9taXNlcyIsIl9jYWxsZWU0JCIsIl9jb250ZXh0NCIsIm1hcCIsIl9jYWxsZWUzIiwiX3lpZWxkJHZhbGlkYXRlRmllbGRBIiwiX2NhbGxlZTMkIiwiX2NvbnRleHQzIiwiYWxsIiwicmVkdWNlIiwiYWNjIiwiZGVmaW5lRmllbGQiLCJmaWVsZE9wdGlvbnMiLCJfZmllbGRPcHRpb25zJHJ1bGVzIiwiRmllbGRDb21wb25lbnQiLCJfYSIsIl9iIiwiY2hpbGRyZW4iLCJyZW5kZXIiLCJwcm9wcyIsImZpZWxkVmFsdWUiLCJmaWVsZEVycm9yIiwiZmllbGRUb3VjaGVkIiwiZmllbGRWYWxpZGF0aW5nIiwiZXhpc3RpbmdSdWxlcyIsImdldEZpZWxkUnVsZXMiLCJyZWdpc3RlckZpZWxkIiwidW5yZWdpc3RlckZpZWxkIiwiaGFuZGxlRmllbGRDaGFuZ2UiLCJzZXRGaWVsZFZhbHVlIiwidmFsaWRhdGVGaWVsZCIsImhhbmRsZUJsdXIiLCJmaWVsZFByb3BzIiwib25DaGFuZ2UiLCJvbkJsdXIiLCJoYW5kbGVNZXJnZUNoYW5nZSIsInRhcmdldCIsImlzVmFsaWRFbGVtZW50IiwiaGFuZGxlTWVyZ2VCbHVyIiwibWVyZ2VkUHJvcHMiLCJjbG9uZUVsZW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiY2hpbGQiLCJpbmRleCIsImRpc3BsYXlOYW1lIiwiaGFuZGxlU3VibWl0IiwiX2NhbGxlZTUiLCJ2YWxpZGF0ZWRWYWx1ZXMiLCJ0eXBlZCIsIl9jYWxsZWU1JCIsIl9jb250ZXh0NSIsInByZXZlbnREZWZhdWx0IiwiaGFuZGxlUmVzZXQiLCJyZXNldEZpZWxkcyIsImZvcm1JbnN0YW5jZSIsInZhbGlkYXRlRmllbGRzIiwiZ2V0RmllbGRFcnJvciIsImdldEZpZWxkc0Vycm9yIiwiZm9yRWFjaCIsImlzRmllbGRUb3VjaGVkIiwiaXNGaWVsZHNUb3VjaGVkIiwiYWxsRmllbGRzVG91Y2hlZCIsInNvbWUiLCJldmVyeSIsImlzRmllbGRWYWxpZGF0aW5nIiwic2V0RmllbGRzRXJyb3IiLCJmaWVsZHNFcnJvciIsImVudHJpZXMiLCJfcmVmIiwiX3JlZjIiLCJzZXRGaWVsZFRvdWNoZWQiLCJpc1RvdWNoZWQiLCJzZXRGaWVsZHNUb3VjaGVkIiwiZmllbGRzVG91Y2giLCJmaWVsZHMiLCJyZXNldFZhbHVlcyIsImZpZWxkIiwiaW5pdGlhbFZhbHVlcyIsInNldEZpZWxkc1ZhbHVlIiwibmV3VG91Y2hlZCIsInN1Ym1pdCIsImNhbGxiYWNrIiwiX2NhbGxlZTYiLCJfY2FsbGVlNiQiLCJfY29udGV4dDYiLCJpbnRlcm5hbHMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsSUFBSUEsU0FBUyxHQUFJLElBQUksSUFBSSxJQUFJLENBQUNBLFNBQVMsSUFBSyxVQUFVQyxPQUFPLEVBQUVDLFVBQVUsRUFBRUMsQ0FBQyxFQUFFQyxTQUFTLEVBQUU7RUFDckYsU0FBU0MsS0FBS0EsQ0FBQ0MsS0FBSyxFQUFFO0lBQUUsT0FBT0EsS0FBSyxZQUFZSCxDQUFDLEdBQUdHLEtBQUssR0FBRyxJQUFJSCxDQUFDLENBQUMsVUFBVUksT0FBTyxFQUFFO01BQUVBLE9BQU8sQ0FBQ0QsS0FBSyxDQUFDO0lBQUUsQ0FBQyxDQUFDO0VBQUU7RUFDM0csT0FBTyxLQUFLSCxDQUFDLEtBQUtBLENBQUMsR0FBR0ssT0FBTyxDQUFDLEVBQUUsVUFBVUQsT0FBTyxFQUFFRSxNQUFNLEVBQUU7SUFDdkQsU0FBU0MsU0FBU0EsQ0FBQ0osS0FBSyxFQUFFO01BQUUsSUFBSTtRQUFFSyxJQUFJLENBQUNQLFNBQVMsQ0FBQ1EsSUFBSSxDQUFDTixLQUFLLENBQUMsQ0FBQztNQUFFLENBQUMsQ0FBQyxPQUFPTyxDQUFDLEVBQUU7UUFBRUosTUFBTSxDQUFDSSxDQUFDLENBQUM7TUFBRTtJQUFFO0lBQzFGLFNBQVNDLFFBQVFBLENBQUNSLEtBQUssRUFBRTtNQUFFLElBQUk7UUFBRUssSUFBSSxDQUFDUCxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUNFLEtBQUssQ0FBQyxDQUFDO01BQUUsQ0FBQyxDQUFDLE9BQU9PLENBQUMsRUFBRTtRQUFFSixNQUFNLENBQUNJLENBQUMsQ0FBQztNQUFFO0lBQUU7SUFDN0YsU0FBU0YsSUFBSUEsQ0FBQ0ksTUFBTSxFQUFFO01BQUVBLE1BQU0s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QUVELGVBQWV6SyxPQUFPIiwiZmlsZSI6ImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL2hvb2tzL3VzZUZvcm0uanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbnZhciBfX3Jlc3QgPSAodGhpcyAmJiB0aGlzLl9fcmVzdCkgfHwgZnVuY3Rpb24gKHMsIGUpIHtcbiAgICB2YXIgdCA9IHt9O1xuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgICB0W3BdID0gc1twXTtcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgICAgfVxuICAgIHJldHVybiB0O1xufTtcbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VNZW1vLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCBtZW1vLCBGcmFnbWVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VFdmVudENhbGxiYWNrLCB1c2VNZW1vaXplZEZuLCB1c2VTYWZlU3RhdGUgfSBmcm9tICdAMW1vbmV5L2hvb2tzJztcbmltcG9ydCB7IHVzZUZvcm1Db3JlIH0gZnJvbSAnLi91c2VGb3JtQ29yZSc7XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEhlbHBlcnMg4oCTIHJlc29sdmUgbmVzdGVkIHBhdGhzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHJlc29sdmVWYWx1ZSh2YWx1ZXMsIG5hbWUpIHtcbiAgICBpZiAoIW5hbWUuaW5jbHVkZXMoJy4nKSlcbiAgICAgICAgcmV0dXJuIHZhbHVlc1tuYW1lXTtcbiAgICBjb25zdCBrZXlzID0gbmFtZS5zcGxpdCgnLicpO1xuICAgIGxldCBjdXJyZW50ID0gdmFsdWVzO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgaWYgKGN1cnJlbnQgPT09IG51bGwgfHwgY3VycmVudCA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBjdXJyZW50ICE9PSAnb2JqZWN0JylcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIGN1cnJlbnQgPSBjdXJyZW50W2tleV07XG4gICAgfVxuICAgIHJldHVybiBjdXJyZW50O1xufVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyB1c2VGb3JtXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmV4cG9ydCBjb25zdCB1c2VGb3JtID0gKGNvbmZpZyA9IHt9KSA9PiB7XG4gICAgY29uc3QgeyBvbkZpbmlzaCwgb25GaW5pc2hGYWlsZWQsIG9uUmVzZXQsIHZhbGlkYXRlVHJpZ2dlciA9ICdvbkNoYW5nZScsIH0gPSBjb25maWc7XG4gICAgY29uc3QgZm9ybUNvcmUgPSB1c2VGb3JtQ29yZShjb25maWcpO1xuICAgIGNvbnN0IFt2YWxpZGF0aW5nLCBzZXRWYWxpZGF0aW5nXSA9IHVzZVNhZmVTdGF0ZSh7fSk7XG4gICAgY29uc3QgW2V4dHJhVG91Y2hlZCwgc2V0RXh0cmFUb3VjaGVkXSA9IHVzZVN0YXRlKHt9KTtcbiAgICBjb25zdCBhbGxUb3VjaGVkID0gdXNlTWVtbygoKSA9PiAoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBmb3JtQ29yZS50b3VjaGVkKSwgZXh0cmFUb3VjaGVkKSksIFtmb3JtQ29yZS50b3VjaGVkLCBleHRyYVRvdWNoZWRdKTtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBBc3luYyBmaWVsZCB2YWxpZGF0aW9uIOKAkyBlYWNoIHJ1bGUgaXMgcHJvY2Vzc2VkIGV4YWN0bHkgb25jZVxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IHZhbGlkYXRlRmllbGRBc3luYyA9IHVzZU1lbW9pemVkRm4oKG5hbWUsIHZhbHVlLCBydWxlcykgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGlmICghcnVsZXMgfHwgcnVsZXMubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuIHsgaXNWYWxpZDogdHJ1ZSwgZXJyb3I6IG51bGwgfTtcbiAgICAgICAgc2V0VmFsaWRhdGluZygocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW25hbWVdOiB0cnVlIH0pKSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJ1bGUgb2YgcnVsZXMpIHtcbiAgICAgICAgICAgICAgICAvLyByZXF1aXJlZFxuICAgICAgICAgICAgICAgIGlmIChydWxlLnJlcXVpcmVkICYmXG4gICAgICAgICAgICAgICAgICAgICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSAnJykpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBydWxlLm1lc3NhZ2UgfHwgYCR7bmFtZX0gaXMgcmVxdWlyZWRgO1xuICAgICAgICAgICAgICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZEVycm9yKG5hbWUsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgaXNWYWxpZDogZmFsc2UsIGVycm9yIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIG1pblxuICAgICAgICAgICAgICAgIGlmIChydWxlLm1pbiAmJiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLmxlbmd0aCA8IHJ1bGUubWluKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gcnVsZS5tZXNzYWdlIHx8IGAke25hbWV9IG11c3QgYmUgYXQgbGVhc3QgJHtydWxlLm1pbn0gY2hhcmFjdGVyc2A7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db3JlLnNldEZpZWxkRXJyb3IobmFtZSwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBpc1ZhbGlkOiBmYWxzZSwgZXJyb3IgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gbWF4XG4gICAgICAgICAgICAgICAgaWYgKHJ1bGUubWF4ICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUubGVuZ3RoID4gcnVsZS5tYXgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBydWxlLm1lc3NhZ2UgfHwgYCR7bmFtZX0gbXVzdCBiZSBubyBtb3JlIHRoYW4gJHtydWxlLm1heH0gY2hhcmFjdGVyc2A7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db3JlLnNldEZpZWxkRXJyb3IobmFtZSwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBpc1ZhbGlkOiBmYWxzZSwgZXJyb3IgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gcGF0dGVyblxuICAgICAgICAgICAgICAgIGlmIChydWxlLnBhdHRlcm4gJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiAhcnVsZS5wYXR0ZXJuLnRlc3QodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gcnVsZS5tZXNzYWdlIHx8IGAke25hbWV9IGZvcm1hdCBpcyBpbnZhbGlkYDtcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihuYW1lLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IGZhbHNlLCBlcnJvciB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBlbnVtXG4gICAgICAgICAgICAgICAgaWYgKHJ1bGUuZW51bSAmJiBBcnJheS5pc0FycmF5KHJ1bGUuZW51bSkgJiYgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFydWxlLmVudW0uaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IHJ1bGUubWVzc2FnZSB8fCBgJHtuYW1lfSBtdXN0IGJlIG9uZSBvZiAke3J1bGUuZW51bS5qb2luKCcsICcpfWA7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZEVycm9yKG5hbWUsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IGZhbHNlLCBlcnJvciB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIHR5cGUgY2hlY2tzXG4gICAgICAgICAgICAgICAgaWYgKHJ1bGUudHlwZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicgfHwgaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IHJ1bGUubWVzc2FnZSB8fCBgJHtuYW1lfSBtdXN0IGJlIGEgbnVtYmVyYDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db3JlLnNldEZpZWxkRXJyb3IobmFtZSwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgaXNWYWxpZDogZmFsc2UsIGVycm9yIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJ1bGUudHlwZSA9PT0gJ2VtYWlsJyAmJiB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbWFpbFBhdHRlcm4gPSAvXlteXFxzQF0rQFteXFxzQF0rXFwuW15cXHNAXSskLztcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFlbWFpbFBhdHRlcm4udGVzdChTdHJpbmcodmFsdWUpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBydWxlLm1lc3NhZ2UgfHwgYCR7bmFtZX0gbXVzdCBiZSBhIHZhbGlkIGVtYWlsYDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db3JlLnNldEZpZWxkRXJyb3IobmFtZSwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgaXNWYWxpZDogZmFsc2UsIGVycm9yIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJ1bGUudHlwZSA9PT0gJ3VybCcgJiYgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBVUkwoU3RyaW5nKHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IHJ1bGUubWVzc2FnZSB8fCBgJHtuYW1lfSBtdXN0IGJlIGEgdmFsaWQgVVJMYDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db3JlLnNldEZpZWxkRXJyb3IobmFtZSwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgaXNWYWxpZDogZmFsc2UsIGVycm9yIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gY3VzdG9tIHZhbGlkYXRvciAoc3luYyBvciBhc3luYykg4oCUIGV4ZWN1dGVkIGV4YWN0bHkgb25jZVxuICAgICAgICAgICAgICAgIGlmIChydWxlLnZhbGlkYXRvciAmJiB0eXBlb2YgcnVsZS52YWxpZGF0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHlpZWxkIFByb21pc2UucmVzb2x2ZShydWxlLnZhbGlkYXRvcih2YWx1ZSwgZm9ybUNvcmUudmFsdWVzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICE9PSB0cnVlICYmIHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSB0eXBlb2YgcmVzdWx0ID09PSAnc3RyaW5nJyA/IHJlc3VsdCA6ICdWYWxpZGF0aW9uIGZhaWxlZCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihuYW1lLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgaXNWYWxpZDogZmFsc2UsIGVycm9yIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6ICdWYWxpZGF0aW9uIGVycm9yJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db3JlLnNldEZpZWxkRXJyb3IobmFtZSwgZXJyb3JNZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IGZhbHNlLCBlcnJvcjogZXJyb3JNZXNzYWdlIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZm9ybUNvcmUuZXJyb3JzW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihuYW1lLCBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IHRydWUsIGVycm9yOiBudWxsIH07XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBzZXRWYWxpZGF0aW5nKChwcmV2KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3VmFsaWRhdGluZyA9IE9iamVjdC5hc3NpZ24oe30sIHByZXYpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdWYWxpZGF0aW5nW25hbWVdO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXdWYWxpZGF0aW5nO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KSk7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gQXN5bmMgZmllbGQgYmx1ciBoYW5kbGVyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgY29uc3QgaGFuZGxlRmllbGRCbHVyID0gdXNlRXZlbnRDYWxsYmFjaygobmFtZSkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHNldEV4dHJhVG91Y2hlZCgocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW25hbWVdOiB0cnVlIH0pKSk7XG4gICAgICAgIGNvbnN0IHJ1bGVzID0gZm9ybUNvcmUuZmllbGRSdWxlc1tuYW1lXTtcbiAgICAgICAgaWYgKHJ1bGVzICYmIHZhbGlkYXRlVHJpZ2dlciA9PT0gJ29uQmx1cicpIHtcbiAgICAgICAgICAgIHlpZWxkIHZhbGlkYXRlRmllbGRBc3luYyhuYW1lLCByZXNvbHZlVmFsdWUoZm9ybUNvcmUudmFsdWVzLCBuYW1lKSwgcnVsZXMpO1xuICAgICAgICB9XG4gICAgfSkpO1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIFZhbGlkYXRlIGFsbCBmaWVsZHMgYXN5bmNcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCB2YWxpZGF0ZUZpZWxkc0FzeW5jID0gdXNlTWVtb2l6ZWRGbigobmFtZUxpc3QpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBmaWVsZHNUb1ZhbGlkYXRlID0gbmFtZUxpc3QgfHwgT2JqZWN0LmtleXMoZm9ybUNvcmUuZmllbGRSdWxlcyk7XG4gICAgICAgIGxldCBoYXNFcnJvciA9IGZhbHNlO1xuICAgICAgICBjb25zdCBmaWVsZEVycm9ycyA9IHt9O1xuICAgICAgICBjb25zdCB2YWxpZGF0aW9uUHJvbWlzZXMgPSBmaWVsZHNUb1ZhbGlkYXRlLm1hcCgobmFtZSkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCBydWxlcyA9IGZvcm1Db3JlLmZpZWxkUnVsZXNbbmFtZV07XG4gICAgICAgICAgICBpZiAocnVsZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGlzVmFsaWQsIGVycm9yIH0gPSB5aWVsZCB2YWxpZGF0ZUZpZWxkQXN5bmMobmFtZSwgcmVzb2x2ZVZhbHVlKGZvcm1Db3JlLnZhbHVlcywgbmFtZSksIHJ1bGVzKTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWQgJiYgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBmaWVsZEVycm9yc1tuYW1lXSA9IGVycm9yO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuICAgICAgICB5aWVsZCBQcm9taXNlLmFsbCh2YWxpZGF0aW9uUHJvbWlzZXMpO1xuICAgICAgICBpZiAoaGFzRXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKCdWYWxpZGF0aW9uIGZhaWxlZCcpO1xuICAgICAgICAgICAgZXJyb3IudmFsdWVzID0gZm9ybUNvcmUudmFsdWVzO1xuICAgICAgICAgICAgZXJyb3IuZXJyb3JzID0gZmllbGRFcnJvcnM7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmFtZUxpc3QpIHtcbiAgICAgICAgICAgIHJldHVybiBuYW1lTGlzdC5yZWR1Y2UoKGFjYywgbmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgIGFjY1tuYW1lXSA9IHJlc29sdmVWYWx1ZShmb3JtQ29yZS52YWx1ZXMsIG5hbWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICB9LCB7fSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZvcm1Db3JlLnZhbHVlcztcbiAgICB9KSk7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gZGVmaW5lRmllbGQg4oCTIHVzZWQgYnkgc3RhbmRhbG9uZSAobm9uLVByb0Zvcm0pIGNvbnN1bWVyc1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IGRlZmluZUZpZWxkID0gdXNlQ2FsbGJhY2soKG5hbWUsIGZpZWxkT3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcnVsZXMgPSBbXSB9ID0gZmllbGRPcHRpb25zO1xuICAgICAgICBjb25zdCBGaWVsZENvbXBvbmVudCA9IG1lbW8oKF9hKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2I7XG4gICAgICAgICAgICB2YXIgeyBjaGlsZHJlbiwgcmVuZGVyIH0gPSBfYSwgcHJvcHMgPSBfX3Jlc3QoX2EsIFtcImNoaWxkcmVuXCIsIFwicmVuZGVyXCJdKTtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkVmFsdWUgPSAoX2IgPSBmb3JtQ29yZS52YWx1ZXNbbmFtZV0pICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xuICAgICAgICAgICAgY29uc3QgZmllbGRFcnJvciA9IGZvcm1Db3JlLmVycm9yc1tuYW1lXTtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkVG91Y2hlZCA9IGFsbFRvdWNoZWRbbmFtZV07XG4gICAgICAgICAgICBjb25zdCBmaWVsZFZhbGlkYXRpbmcgPSB2YWxpZGF0aW5nW25hbWVdO1xuICAgICAgICAgICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ1J1bGVzID0gZm9ybUNvcmUuZ2V0RmllbGRSdWxlcyhuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoIWV4aXN0aW5nUnVsZXMgJiYgcnVsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBmb3JtQ29yZS5yZWdpc3RlckZpZWxkKG5hbWUsIHJ1bGVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvcmUudW5yZWdpc3RlckZpZWxkKG5hbWUpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9LCBbXSk7IC8vIE9ubHkgcmVnaXN0ZXIgb24gbW91bnRcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZUZpZWxkQ2hhbmdlID0gdXNlRXZlbnRDYWxsYmFjaygodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZFZhbHVlKG5hbWUsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVUcmlnZ2VyID09PSAnb25DaGFuZ2UnKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db3JlLnZhbGlkYXRlRmllbGQobmFtZSwgcnVsZXMsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZUJsdXIgPSB1c2VFdmVudENhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgICAgICAgICBoYW5kbGVGaWVsZEJsdXIobmFtZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkUHJvcHMgPSBPYmplY3QuYXNzaWduKHsgbmFtZSwgdmFsdWU6IGZpZWxkVmFsdWUsIGVycm9yOiBmaWVsZEVycm9yLCB0b3VjaGVkOiBmaWVsZFRvdWNoZWQsIHZhbGlkYXRpbmc6IGZpZWxkVmFsaWRhdGluZywgb25DaGFuZ2U6IGhhbmRsZUZpZWxkQ2hhbmdlLCBvbkJsdXI6IGhhbmRsZUJsdXIgfSwgcHJvcHMpO1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlTWVyZ2VDaGFuZ2UgPSAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGUgJiYgdHlwZW9mIGUgPT09ICdvYmplY3QnICYmICd0YXJnZXQnIGluIGVcbiAgICAgICAgICAgICAgICAgICAgPyBlLnRhcmdldC52YWx1ZVxuICAgICAgICAgICAgICAgICAgICA6IGU7XG4gICAgICAgICAgICAgICAgaGFuZGxlRmllbGRDaGFuZ2UodmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmIChSZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZHJlbikgJiZcbiAgICAgICAgICAgICAgICAgICAgKChfYSA9IGNoaWxkcmVuLnByb3BzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub25DaGFuZ2UpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnByb3BzLm9uQ2hhbmdlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlTWVyZ2VCbHVyID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICBoYW5kbGVCbHVyKCk7XG4gICAgICAgICAgICAgICAgaWYgKFJlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSAmJlxuICAgICAgICAgICAgICAgICAgICAoKF9hID0gY2hpbGRyZW4ucHJvcHMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5vbkJsdXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnByb3BzLm9uQmx1cigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAocmVuZGVyICYmIHR5cGVvZiByZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyKGZpZWxkUHJvcHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBjaGlsZHJlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZHJlbihmaWVsZFByb3BzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChSZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZHJlbikpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtZXJnZWRQcm9wcyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZmllbGRQcm9wcyksIHsgb25DaGFuZ2U6IGhhbmRsZU1lcmdlQ2hhbmdlLCBvbkJsdXI6IGhhbmRsZU1lcmdlQmx1ciB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCBtZXJnZWRQcm9wcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChGcmFnbWVudCwgbnVsbCwgLi4uY2hpbGRyZW4ubWFwKChjaGlsZCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFJlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWVyZ2VkUHJvcHMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGZpZWxkUHJvcHMpLCB7IGtleTogY2hpbGQua2V5IHx8IGluZGV4LCBvbkNoYW5nZTogaGFuZGxlTWVyZ2VDaGFuZ2UsIG9uQmx1cjogaGFuZGxlTWVyZ2VCbHVyIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNsb25lRWxlbWVudChjaGlsZCwgbWVyZ2VkUHJvcHMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSk7XG4gICAgICAgIEZpZWxkQ29tcG9uZW50LmRpc3BsYXlOYW1lID0gYEZpZWxkKCR7bmFtZX0pYDtcbiAgICAgICAgcmV0dXJuIEZpZWxkQ29tcG9uZW50O1xuICAgIH0sIFtcbiAgICAgICAgZm9ybUNvcmUsXG4gICAgICAgIGFsbFRvdWNoZWQsXG4gICAgICAgIHZhbGlkYXRpbmcsXG4gICAgICAgIHZhbGlkYXRlVHJpZ2dlcixcbiAgICAgICAgaGFuZGxlRmllbGRCbHVyLFxuICAgIF0pO1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIGhhbmRsZVN1Ym1pdCAvIGhhbmRsZVJlc2V0IOKAkyBmb3IgPGZvcm0+IGV2ZW50IGhhbmRsZXJzXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgY29uc3QgaGFuZGxlU3VibWl0ID0gdXNlRXZlbnRDYWxsYmFjaygoZSkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGUgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgdmFsaWRhdGVkVmFsdWVzID0geWllbGQgdmFsaWRhdGVGaWVsZHNBc3luYygpO1xuICAgICAgICAgICAgb25GaW5pc2ggPT09IG51bGwgfHwgb25GaW5pc2ggPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRmluaXNoKHZhbGlkYXRlZFZhbHVlcyk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgY29uc3QgdHlwZWQgPSBlcnI7XG4gICAgICAgICAgICBvbkZpbmlzaEZhaWxlZCA9PT0gbnVsbCB8fCBvbkZpbmlzaEZhaWxlZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25GaW5pc2hGYWlsZWQoeyB2YWx1ZXM6IHR5cGVkLnZhbHVlcywgZXJyb3JzOiB0eXBlZC5lcnJvcnMgfSk7XG4gICAgICAgIH1cbiAgICB9KSk7XG4gICAgY29uc3QgaGFuZGxlUmVzZXQgPSB1c2VFdmVudENhbGxiYWNrKChlKSA9PiB7XG4gICAgICAgIGUgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBmb3JtQ29yZS5yZXNldEZpZWxkcygpO1xuICAgICAgICBzZXRFeHRyYVRvdWNoZWQoe30pO1xuICAgICAgICBzZXRWYWxpZGF0aW5nKHt9KTtcbiAgICAgICAgb25SZXNldCA9PT0gbnVsbCB8fCBvblJlc2V0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvblJlc2V0KCk7XG4gICAgfSk7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gRm9ybUluc3RhbmNlIOKAkyBlbmhhbmNlZCBBUEkgZm9yIGNvbnN1bWVyc1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IGZvcm1JbnN0YW5jZSA9IHVzZU1lbW8oKCkgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZm9ybUNvcmUuZm9ybUluc3RhbmNlKSwgeyB2YWxpZGF0ZUZpZWxkczogdmFsaWRhdGVGaWVsZHNBc3luYywgc2V0RmllbGRWYWx1ZTogZm9ybUNvcmUuc2V0RmllbGRWYWx1ZSwgZ2V0RmllbGRFcnJvcjogKG5hbWUpID0+IGZvcm1Db3JlLmVycm9yc1tuYW1lXSwgZ2V0RmllbGRzRXJyb3I6IChuYW1lTGlzdCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFuYW1lTGlzdClcbiAgICAgICAgICAgICAgICByZXR1cm4gZm9ybUNvcmUuZXJyb3JzO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgICAgICAgICBuYW1lTGlzdC5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGZvcm1Db3JlLmVycm9yc1tuYW1lXSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRbbmFtZV0gPSBmb3JtQ29yZS5lcnJvcnNbbmFtZV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9LCBpc0ZpZWxkVG91Y2hlZDogKG5hbWUpID0+IGFsbFRvdWNoZWRbbmFtZV0gfHwgZmFsc2UsIGlzRmllbGRzVG91Y2hlZDogKG5hbWVMaXN0LCBhbGxGaWVsZHNUb3VjaGVkID0gZmFsc2UpID0+IHtcbiAgICAgICAgICAgIGlmICghbmFtZUxpc3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoYWxsVG91Y2hlZCkuc29tZSgoa2V5KSA9PiBhbGxUb3VjaGVkW2tleV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFsbEZpZWxkc1RvdWNoZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmFtZUxpc3QuZXZlcnkoKG5hbWUpID0+IGFsbFRvdWNoZWRbbmFtZV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5hbWVMaXN0LnNvbWUoKG5hbWUpID0+IGFsbFRvdWNoZWRbbmFtZV0pO1xuICAgICAgICB9LCBpc0ZpZWxkVmFsaWRhdGluZzogKG5hbWUpID0+IHZhbGlkYXRpbmdbbmFtZV0gfHwgZmFsc2UsIHNldEZpZWxkRXJyb3I6IGZvcm1Db3JlLnNldEZpZWxkRXJyb3IsIHNldEZpZWxkc0Vycm9yOiAoZmllbGRzRXJyb3IpID0+IHtcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGZpZWxkc0Vycm9yKS5mb3JFYWNoKChbbmFtZSwgZXJyb3JdKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihuYW1lLCBlcnJvcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgc2V0RmllbGRUb3VjaGVkOiAobmFtZSwgaXNUb3VjaGVkID0gdHJ1ZSkgPT4ge1xuICAgICAgICAgICAgc2V0RXh0cmFUb3VjaGVkKChwcmV2KSA9PiAoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwcmV2KSwgeyBbbmFtZV06IGlzVG91Y2hlZCB9KSkpO1xuICAgICAgICB9LCBzZXRGaWVsZHNUb3VjaGVkOiAoZmllbGRzVG91Y2gpID0+IHtcbiAgICAgICAgICAgIHNldEV4dHJhVG91Y2hlZCgocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIGZpZWxkc1RvdWNoKSkpO1xuICAgICAgICB9LCByZXNldEZpZWxkczogKGZpZWxkcykgPT4ge1xuICAgICAgICAgICAgaWYgKCFmaWVsZHMpIHtcbiAgICAgICAgICAgICAgICBmb3JtQ29yZS5yZXNldEZpZWxkcygpO1xuICAgICAgICAgICAgICAgIHNldEV4dHJhVG91Y2hlZCh7fSk7XG4gICAgICAgICAgICAgICAgc2V0VmFsaWRhdGluZyh7fSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXNldFZhbHVlcyA9IHt9O1xuICAgICAgICAgICAgICAgIGZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgICAgIHJlc2V0VmFsdWVzW2ZpZWxkXSA9ICgoX2EgPSBjb25maWcuaW5pdGlhbFZhbHVlcykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoge30pW2ZpZWxkXTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZHNWYWx1ZShyZXNldFZhbHVlcyk7XG4gICAgICAgICAgICAgICAgc2V0RXh0cmFUb3VjaGVkKChwcmV2KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1RvdWNoZWQgPSBPYmplY3QuYXNzaWduKHt9LCBwcmV2KTtcbiAgICAgICAgICAgICAgICAgICAgZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgbmV3VG91Y2hlZFtmaWVsZF07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3VG91Y2hlZDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBzZXRWYWxpZGF0aW5nKChwcmV2KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZhbGlkYXRpbmcgPSBPYmplY3QuYXNzaWduKHt9LCBwcmV2KTtcbiAgICAgICAgICAgICAgICAgICAgZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgbmV3VmFsaWRhdGluZ1tmaWVsZF07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3VmFsaWRhdGluZztcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBmaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihmaWVsZCwgbnVsbCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHN1Ym1pdDogKGNhbGxiYWNrKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsaWRhdGVkVmFsdWVzID0geWllbGQgdmFsaWRhdGVGaWVsZHNBc3luYygpO1xuICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCBjYWxsYmFjayh2YWxpZGF0ZWRWYWx1ZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsaWRhdGVkVmFsdWVzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSksIGRlZmluZUZpZWxkLCByZWdpc3RlckZpZWxkOiBmb3JtQ29yZS5yZWdpc3RlckZpZWxkLCB1bnJlZ2lzdGVyRmllbGQ6IGZvcm1Db3JlLnVucmVnaXN0ZXJGaWVsZCB9KSksIFtcbiAgICAgICAgZm9ybUNvcmUsXG4gICAgICAgIGFsbFRvdWNoZWQsXG4gICAgICAgIHZhbGlkYXRpbmcsXG4gICAgICAgIHZhbGlkYXRlRmllbGRzQXN5bmMsXG4gICAgICAgIGRlZmluZUZpZWxkLFxuICAgICAgICBjb25maWcuaW5pdGlhbFZhbHVlcyxcbiAgICAgICAgc2V0VmFsaWRhdGluZyxcbiAgICBdKTtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBJbnRlcm5hbHMg4oCTIGV4cG9zZWQgZm9yIFByb0Zvcm0gaW50ZWdyYXRpb25cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCBpbnRlcm5hbHMgPSB1c2VNZW1vKCgpID0+ICh7XG4gICAgICAgIHZhbHVlczogZm9ybUNvcmUudmFsdWVzLFxuICAgICAgICBlcnJvcnM6IGZvcm1Db3JlLmVycm9ycyxcbiAgICAgICAgdG91Y2hlZDogYWxsVG91Y2hlZCxcbiAgICAgICAgdmFsaWRhdGluZyxcbiAgICAgICAgZmllbGRSdWxlczogZm9ybUNvcmUuZmllbGRSdWxlcyxcbiAgICAgICAgc2V0RmllbGRWYWx1ZTogZm9ybUNvcmUuc2V0RmllbGRWYWx1ZSxcbiAgICAgICAgc2V0RmllbGRFcnJvcjogZm9ybUNvcmUuc2V0RmllbGRFcnJvcixcbiAgICAgICAgdmFsaWRhdGVGaWVsZDogZm9ybUNvcmUudmFsaWRhdGVGaWVsZCxcbiAgICAgICAgdmFsaWRhdGVGaWVsZEFzeW5jLFxuICAgICAgICByZWdpc3RlckZpZWxkOiBmb3JtQ29yZS5yZWdpc3RlckZpZWxkLFxuICAgICAgICB1bnJlZ2lzdGVyRmllbGQ6IGZvcm1Db3JlLnVucmVnaXN0ZXJGaWVsZCxcbiAgICAgICAgaGFuZGxlU3VibWl0LFxuICAgICAgICBoYW5kbGVSZXNldCxcbiAgICB9KSwgW1xuICAgICAgICBmb3JtQ29yZS52YWx1ZXMsXG4gICAgICAgIGZvcm1Db3JlLmVycm9ycyxcbiAgICAgICAgYWxsVG91Y2hlZCxcbiAgICAgICAgdmFsaWRhdGluZyxcbiAgICAgICAgZm9ybUNvcmUuZmllbGRSdWxlcyxcbiAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRWYWx1ZSxcbiAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcixcbiAgICAgICAgZm9ybUNvcmUudmFsaWRhdGVGaWVsZCxcbiAgICAgICAgdmFsaWRhdGVGaWVsZEFzeW5jLFxuICAgICAgICBmb3JtQ29yZS5yZWdpc3RlckZpZWxkLFxuICAgICAgICBmb3JtQ29yZS51bnJlZ2lzdGVyRmllbGQsXG4gICAgICAgIGhhbmRsZVN1Ym1pdCxcbiAgICAgICAgaGFuZGxlUmVzZXQsXG4gICAgXSk7XG4gICAgcmV0dXJuIHsgZm9ybUluc3RhbmNlLCBpbnRlcm5hbHMgfTtcbn07XG5leHBvcnQgZGVmYXVsdCB1c2VGb3JtOyIsbnVsbF0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==
677
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL2hvb2tzL3VzZUZvcm0uanMiLCJjb21wb25lbnRzL1Byb0Zvcm0vY29yZS9zcmMvY29tcG9uZW50cy9Qcm9Gb3JtL2NvcmUvaG9va3MvdXNlRm9ybS50cyJdLCJuYW1lcyI6WyJfX2F3YWl0ZXIiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsIlAiLCJnZW5lcmF0b3IiLCJhZG9wdCIsInZhbHVlIiwicmVzb2x2ZSIsIlByb21pc2UiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJzdGVwIiwibmV4dCIsImUiLCJyZWplY3RlZCIsInJlc3VsdCIsImRvbmUiLCJ0aGVuIiwiYXBwbHkiLCJfX3Jlc3QiLCJzIiwidCIsInAiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpbmRleE9mIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiaSIsImxlbmd0aCIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwidXNlU3RhdGUiLCJ1c2VNZW1vIiwidXNlQ2FsbGJhY2siLCJ1c2VFZmZlY3QiLCJtZW1vIiwiRnJhZ21lbnQiLCJSZWFjdCIsInVzZUV2ZW50Q2FsbGJhY2siLCJ1c2VNZW1vaXplZEZuIiwidXNlU2FmZVN0YXRlIiwidXNlRm9ybUNvcmUiLCJyZXNvbHZlVmFsdWUiLCJ2YWx1ZXMiLCJuYW1lIiwiaW5jbHVkZXMiLCJrZXlzIiwic3BsaXQiLCJjdXJyZW50IiwiX2l0ZXJhdG9yIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJfc3RlcCIsIm4iLCJrZXkiLCJ1bmRlZmluZWQiLCJfdHlwZW9mIiwiZXJyIiwiZiIsInVzZUZvcm0iLCJjb25maWciLCJhcmd1bWVudHMiLCJvbkZpbmlzaCIsIm9uRmluaXNoRmFpbGVkIiwib25SZXNldCIsIl9jb25maWckdmFsaWRhdGVUcmlnZyIsInZhbGlkYXRlVHJpZ2dlciIsImZvcm1Db3JlIiwiX3VzZVNhZmVTdGF0ZSIsIl91c2VTYWZlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJ2YWxpZGF0aW5nIiwic2V0VmFsaWRhdGluZyIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJleHRyYVRvdWNoZWQiLCJzZXRFeHRyYVRvdWNoZWQiLCJhbGxUb3VjaGVkIiwiYXNzaWduIiwidG91Y2hlZCIsInZhbGlkYXRlRmllbGRBc3luYyIsInJ1bGVzIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsInJ1bGUiLCJlcnJvciIsIl9lcnJvciIsIl9lcnJvcjIiLCJfZXJyb3IzIiwiX2Vycm9yNCIsIl9lcnJvcjUiLCJlbWFpbFBhdHRlcm4iLCJfZXJyb3I2IiwiX2Vycm9yNyIsIl9lcnJvcjgiLCJlcnJvck1lc3NhZ2UiLCJfdCIsIl90MiIsIl90MyIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJhYnJ1cHQiLCJpc1ZhbGlkIiwiX2RlZmluZVByb3BlcnR5IiwicmVxdWlyZWQiLCJtZXNzYWdlIiwiY29uY2F0Iiwic2V0RmllbGRFcnJvciIsIm1pbiIsIm1heCIsInBhdHRlcm4iLCJ0ZXN0IiwiQXJyYXkiLCJpc0FycmF5Iiwiam9pbiIsInR5cGUiLCJpc05hTiIsIlN0cmluZyIsIlVSTCIsInZhbGlkYXRvciIsInNlbnQiLCJFcnJvciIsImZpbmlzaCIsImVycm9ycyIsIm5ld1ZhbGlkYXRpbmciLCJzdG9wIiwiaGFuZGxlRmllbGRCbHVyIiwiX2NhbGxlZTIiLCJfY29udGV4dDIiLCJmaWVsZFJ1bGVzIiwidmFsaWRhdGVGaWVsZHNBc3luYyIsIm5hbWVMaXN0IiwiX2NhbGxlZTQiLCJmaWVsZHNUb1ZhbGlkYXRlIiwiaGFzRXJyb3IiLCJmaWVsZEVycm9ycyIsInZhbGlkYXRpb25Qcm9taXNlcyIsIl9jb250ZXh0NCIsIm1hcCIsIl9jYWxsZWUzIiwiX3lpZWxkJHZhbGlkYXRlRmllbGRBIiwiX2NvbnRleHQzIiwiYWxsIiwicmVkdWNlIiwiYWNjIiwiZGVmaW5lRmllbGQiLCJmaWVsZE9wdGlvbnMiLCJfZmllbGRPcHRpb25zJHJ1bGVzIiwiRmllbGRDb21wb25lbnQiLCJfYSIsIl9iIiwiY2hpbGRyZW4iLCJyZW5kZXIiLCJwcm9wcyIsImZpZWxkVmFsdWUiLCJmaWVsZEVycm9yIiwiZmllbGRUb3VjaGVkIiwiZmllbGRWYWxpZGF0aW5nIiwiZXhpc3RpbmdSdWxlcyIsImdldEZpZWxkUnVsZXMiLCJyZWdpc3RlckZpZWxkIiwidW5yZWdpc3RlckZpZWxkIiwiaGFuZGxlRmllbGRDaGFuZ2UiLCJzZXRGaWVsZFZhbHVlIiwidmFsaWRhdGVGaWVsZCIsImhhbmRsZUJsdXIiLCJmaWVsZFByb3BzIiwib25DaGFuZ2UiLCJvbkJsdXIiLCJoYW5kbGVNZXJnZUNoYW5nZSIsInRhcmdldCIsImlzVmFsaWRFbGVtZW50IiwiaGFuZGxlTWVyZ2VCbHVyIiwibWVyZ2VkUHJvcHMiLCJjbG9uZUVsZW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiY2hpbGQiLCJpbmRleCIsImRpc3BsYXlOYW1lIiwiaGFuZGxlU3VibWl0IiwiX2NhbGxlZTUiLCJ2YWxpZGF0ZWRWYWx1ZXMiLCJ0eXBlZCIsIl90NCIsIl9jb250ZXh0NSIsInByZXZlbnREZWZhdWx0IiwiaGFuZGxlUmVzZXQiLCJyZXNldEZpZWxkcyIsImZvcm1JbnN0YW5jZSIsInZhbGlkYXRlRmllbGRzIiwiZ2V0RmllbGRFcnJvciIsImdldEZpZWxkc0Vycm9yIiwiZm9yRWFjaCIsImlzRmllbGRUb3VjaGVkIiwiaXNGaWVsZHNUb3VjaGVkIiwiYWxsRmllbGRzVG91Y2hlZCIsInNvbWUiLCJldmVyeSIsImlzRmllbGRWYWxpZGF0aW5nIiwic2V0RmllbGRzRXJyb3IiLCJmaWVsZHNFcnJvciIsImVudHJpZXMiLCJfcmVmIiwiX3JlZjIiLCJzZXRGaWVsZFRvdWNoZWQiLCJpc1RvdWNoZWQiLCJzZXRGaWVsZHNUb3VjaGVkIiwiZmllbGRzVG91Y2giLCJmaWVsZHMiLCJyZXNldFZhbHVlcyIsImZpZWxkIiwiaW5pdGlhbFZhbHVlcyIsInNldEZpZWxkc1ZhbHVlIiwibmV3VG91Y2hlZCIsInN1Ym1pdCIsImNhbGxiYWNrIiwiX2NhbGxlZTYiLCJfdDUiLCJfY29udGV4dDYiLCJpbnRlcm5hbHMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsSUFBSUEsU0FBUyxHQUFJLElBQUksSUFBSSxJQUFJLENBQUNBLFNBQVMsSUFBSyxVQUFVQyxPQUFPLEVBQUVDLFVBQVUsRUFBRUMsQ0FBQyxFQUFFQyxTQUFTLEVBQUU7RUFDckYsU0FBU0MsS0FBS0EsQ0FBQ0MsS0FBSyxFQUFFO0lBQUUsT0FBT0EsS0FBSyxZQUFZSCxDQUFDLEdBQUdHLEtBQUssR0FBRyxJQUFJSCxDQUFDLENBQUMsVUFBVUksT0FBTyxFQUFFO01BQUVBLE9BQU8sQ0FBQ0QsS0FBSyxDQUFDO0lBQUUsQ0FBQyxDQUFDO0VBQUU7RUFDM0csT0FBTyxLQUFLSCxDQUFDLEtBQUtBLENBQUMsR0FBR0ssT0FBTyxDQUFDLEVBQUUsVUFBVUQsT0FBTyxFQUFFRSxNQUFNLEVBQUU7SUFDdkQsU0FBU0MsU0FBU0EsQ0FBQ0osS0FBSyxFQUFFO01BQUUsSUFBSTtRQUFFSyxJQUFJLENBQUNQLFNBQVMsQ0FBQ1EsSUFBSSxDQUFDTixLQUFLLENBQUMsQ0FBQztNQUFFLENBQUMsQ0FBQyxPQUFPTyxDQUFDLEVBQUU7UUFBRUosTUFBTSxDQUFDSSxDQUFDLENBQUM7TUFBRTtJQUFFO0lBQzFGLFNBQVNDLFFBQVFBLENBQUNSLEtBQUssRUFBRTtNQUFFLElBQUk7UUFBRUssSUFBSSxDQUFDUCxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUNFLEtBQUssQ0FBQyxDQUFDO01BQUUsQ0FBQyxDQUFDLE9BQU9PLENBQUMsRUFBRTtRQUFFSixNQUFNLENBQUNJLENBQUMsQ0FBQztNQUFFO0lBQUU7SUFDN0YsU0FBU0YsSUFBSUEsQ0FBQ0ksTUFBTSxFQUFFO01BQUVBLE1BQU0sQ0FBQ0MsSUFBSSxHQUFHVCxPQUFPLENBQUNRLE1BQU0sQ0FBQ1QsS0FBSyxDQUFDLEdBQUdELEtB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QixNQUFNO01BQ3ZCbUYsTUFBTSxFQUFFNUQsUUFBUSxDQUFDNEQsTUFBTTtNQUN2QmhELE9BQU8sRUFBRUYsVUFBVTtNQUNuQk4sVUFBVSxFQUFWQSxVQUFVO01BQ1Y4RCxVQUFVLEVBQUVsRSxRQUFRLENBQUNrRSxVQUFVO01BQy9Ca0MsYUFBYSxFQUFFcEcsUUFBUSxDQUFDb0csYUFBYTtNQUNyQ3hELGFBQWEsRUFBRTVDLFFBQVEsQ0FBQzRDLGFBQWE7TUFDckN5RCxhQUFhLEVBQUVyRyxRQUFRLENBQUNxRyxhQUFhO01BQ3JDeEYsa0JBQWtCLEVBQWxCQSxrQkFBa0I7TUFDbEJvRixhQUFhLEVBQUVqRyxRQUFRLENBQUNpRyxhQUFhO01BQ3JDQyxlQUFlLEVBQUVsRyxRQUFRLENBQUNrRyxlQUFlO01BQ3pDbUIsWUFBWSxFQUFaQSxZQUFZO01BQ1pPLFdBQVcsRUFBWEE7SURuSEYsQ0NvSEM7RUFBQSxDQUFDLEVBQ0YsQ0FDRTVILFFBQVEsQ0FBQ3ZCLE1BQU0sRUFDZnVCLFFBQVEsQ0FBQzRELE1BQU0sRUFDZmxELFVBQVUsRUFDVk4sVUFBVSxFQUNWSixRQUFRLENBQUNrRSxVQUFVLEVBQ25CbEUsUUFBUSxDQUFDb0csYUFBYSxFQUN0QnBHLFFBQVEsQ0FBQzRDLGFBQWEsRUFDdEI1QyxRQUFRLENBQUNxRyxhQUFhLEVBQ3RCeEYsa0JBQWtCLEVBQ2xCYixRQUFRLENBQUNpRyxhQUFhLEVBQ3RCakcsUUFBUSxDQUFDa0csZUFBZSxFQUN4Qm1CLFlBQVksRUFDWk8sV0FBVyxDQUNaLENBQ0Y7RUFFRCxPQUFPO0lBQUVFLFlBQVksRUFBWkEsWUFBWTtJQUFFK0IsU0FBUyxFQUFUQTtFQUFTLENBQUU7QUFDcEMsQ0FBQztBQUVELGVBQWVySyxPQUFPIiwiZmlsZSI6ImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL2hvb2tzL3VzZUZvcm0uanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbnZhciBfX3Jlc3QgPSAodGhpcyAmJiB0aGlzLl9fcmVzdCkgfHwgZnVuY3Rpb24gKHMsIGUpIHtcbiAgICB2YXIgdCA9IHt9O1xuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgICB0W3BdID0gc1twXTtcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgICAgfVxuICAgIHJldHVybiB0O1xufTtcbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VNZW1vLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCBtZW1vLCBGcmFnbWVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VFdmVudENhbGxiYWNrLCB1c2VNZW1vaXplZEZuLCB1c2VTYWZlU3RhdGUgfSBmcm9tICdAMW1vbmV5L2hvb2tzJztcbmltcG9ydCB7IHVzZUZvcm1Db3JlIH0gZnJvbSAnLi91c2VGb3JtQ29yZSc7XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEhlbHBlcnMg4oCTIHJlc29sdmUgbmVzdGVkIHBhdGhzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHJlc29sdmVWYWx1ZSh2YWx1ZXMsIG5hbWUpIHtcbiAgICBpZiAoIW5hbWUuaW5jbHVkZXMoJy4nKSlcbiAgICAgICAgcmV0dXJuIHZhbHVlc1tuYW1lXTtcbiAgICBjb25zdCBrZXlzID0gbmFtZS5zcGxpdCgnLicpO1xuICAgIGxldCBjdXJyZW50ID0gdmFsdWVzO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgaWYgKGN1cnJlbnQgPT09IG51bGwgfHwgY3VycmVudCA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBjdXJyZW50ICE9PSAnb2JqZWN0JylcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIGN1cnJlbnQgPSBjdXJyZW50W2tleV07XG4gICAgfVxuICAgIHJldHVybiBjdXJyZW50O1xufVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyB1c2VGb3JtXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmV4cG9ydCBjb25zdCB1c2VGb3JtID0gKGNvbmZpZyA9IHt9KSA9PiB7XG4gICAgY29uc3QgeyBvbkZpbmlzaCwgb25GaW5pc2hGYWlsZWQsIG9uUmVzZXQsIHZhbGlkYXRlVHJpZ2dlciA9ICdvbkNoYW5nZScsIH0gPSBjb25maWc7XG4gICAgY29uc3QgZm9ybUNvcmUgPSB1c2VGb3JtQ29yZShjb25maWcpO1xuICAgIGNvbnN0IFt2YWxpZGF0aW5nLCBzZXRWYWxpZGF0aW5nXSA9IHVzZVNhZmVTdGF0ZSh7fSk7XG4gICAgY29uc3QgW2V4dHJhVG91Y2hlZCwgc2V0RXh0cmFUb3VjaGVkXSA9IHVzZVN0YXRlKHt9KTtcbiAgICBjb25zdCBhbGxUb3VjaGVkID0gdXNlTWVtbygoKSA9PiAoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBmb3JtQ29yZS50b3VjaGVkKSwgZXh0cmFUb3VjaGVkKSksIFtmb3JtQ29yZS50b3VjaGVkLCBleHRyYVRvdWNoZWRdKTtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBBc3luYyBmaWVsZCB2YWxpZGF0aW9uIOKAkyBlYWNoIHJ1bGUgaXMgcHJvY2Vzc2VkIGV4YWN0bHkgb25jZVxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IHZhbGlkYXRlRmllbGRBc3luYyA9IHVzZU1lbW9pemVkRm4oKG5hbWUsIHZhbHVlLCBydWxlcykgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGlmICghcnVsZXMgfHwgcnVsZXMubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuIHsgaXNWYWxpZDogdHJ1ZSwgZXJyb3I6IG51bGwgfTtcbiAgICAgICAgc2V0VmFsaWRhdGluZygocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW25hbWVdOiB0cnVlIH0pKSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJ1bGUgb2YgcnVsZXMpIHtcbiAgICAgICAgICAgICAgICAvLyByZXF1aXJlZFxuICAgICAgICAgICAgICAgIGlmIChydWxlLnJlcXVpcmVkICYmXG4gICAgICAgICAgICAgICAgICAgICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSAnJykpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBydWxlLm1lc3NhZ2UgfHwgYCR7bmFtZX0gaXMgcmVxdWlyZWRgO1xuICAgICAgICAgICAgICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZEVycm9yKG5hbWUsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgaXNWYWxpZDogZmFsc2UsIGVycm9yIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIG1pblxuICAgICAgICAgICAgICAgIGlmIChydWxlLm1pbiAmJiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLmxlbmd0aCA8IHJ1bGUubWluKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gcnVsZS5tZXNzYWdlIHx8IGAke25hbWV9IG11c3QgYmUgYXQgbGVhc3QgJHtydWxlLm1pbn0gY2hhcmFjdGVyc2A7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db3JlLnNldEZpZWxkRXJyb3IobmFtZSwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBpc1ZhbGlkOiBmYWxzZSwgZXJyb3IgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gbWF4XG4gICAgICAgICAgICAgICAgaWYgKHJ1bGUubWF4ICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUubGVuZ3RoID4gcnVsZS5tYXgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBydWxlLm1lc3NhZ2UgfHwgYCR7bmFtZX0gbXVzdCBiZSBubyBtb3JlIHRoYW4gJHtydWxlLm1heH0gY2hhcmFjdGVyc2A7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db3JlLnNldEZpZWxkRXJyb3IobmFtZSwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBpc1ZhbGlkOiBmYWxzZSwgZXJyb3IgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gcGF0dGVyblxuICAgICAgICAgICAgICAgIGlmIChydWxlLnBhdHRlcm4gJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiAhcnVsZS5wYXR0ZXJuLnRlc3QodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gcnVsZS5tZXNzYWdlIHx8IGAke25hbWV9IGZvcm1hdCBpcyBpbnZhbGlkYDtcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihuYW1lLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IGZhbHNlLCBlcnJvciB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBlbnVtXG4gICAgICAgICAgICAgICAgaWYgKHJ1bGUuZW51bSAmJiBBcnJheS5pc0FycmF5KHJ1bGUuZW51bSkgJiYgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFydWxlLmVudW0uaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IHJ1bGUubWVzc2FnZSB8fCBgJHtuYW1lfSBtdXN0IGJlIG9uZSBvZiAke3J1bGUuZW51bS5qb2luKCcsICcpfWA7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZEVycm9yKG5hbWUsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IGZhbHNlLCBlcnJvciB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIHR5cGUgY2hlY2tzXG4gICAgICAgICAgICAgICAgaWYgKHJ1bGUudHlwZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicgfHwgaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IHJ1bGUubWVzc2FnZSB8fCBgJHtuYW1lfSBtdXN0IGJlIGEgbnVtYmVyYDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db3JlLnNldEZpZWxkRXJyb3IobmFtZSwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgaXNWYWxpZDogZmFsc2UsIGVycm9yIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJ1bGUudHlwZSA9PT0gJ2VtYWlsJyAmJiB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbWFpbFBhdHRlcm4gPSAvXlteXFxzQF0rQFteXFxzQF0rXFwuW15cXHNAXSskLztcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFlbWFpbFBhdHRlcm4udGVzdChTdHJpbmcodmFsdWUpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBydWxlLm1lc3NhZ2UgfHwgYCR7bmFtZX0gbXVzdCBiZSBhIHZhbGlkIGVtYWlsYDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db3JlLnNldEZpZWxkRXJyb3IobmFtZSwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgaXNWYWxpZDogZmFsc2UsIGVycm9yIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJ1bGUudHlwZSA9PT0gJ3VybCcgJiYgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBVUkwoU3RyaW5nKHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IHJ1bGUubWVzc2FnZSB8fCBgJHtuYW1lfSBtdXN0IGJlIGEgdmFsaWQgVVJMYDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db3JlLnNldEZpZWxkRXJyb3IobmFtZSwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgaXNWYWxpZDogZmFsc2UsIGVycm9yIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gY3VzdG9tIHZhbGlkYXRvciAoc3luYyBvciBhc3luYykg4oCUIGV4ZWN1dGVkIGV4YWN0bHkgb25jZVxuICAgICAgICAgICAgICAgIGlmIChydWxlLnZhbGlkYXRvciAmJiB0eXBlb2YgcnVsZS52YWxpZGF0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHlpZWxkIFByb21pc2UucmVzb2x2ZShydWxlLnZhbGlkYXRvcih2YWx1ZSwgZm9ybUNvcmUudmFsdWVzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICE9PSB0cnVlICYmIHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSB0eXBlb2YgcmVzdWx0ID09PSAnc3RyaW5nJyA/IHJlc3VsdCA6ICdWYWxpZGF0aW9uIGZhaWxlZCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihuYW1lLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgaXNWYWxpZDogZmFsc2UsIGVycm9yIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6ICdWYWxpZGF0aW9uIGVycm9yJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db3JlLnNldEZpZWxkRXJyb3IobmFtZSwgZXJyb3JNZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IGZhbHNlLCBlcnJvcjogZXJyb3JNZXNzYWdlIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZm9ybUNvcmUuZXJyb3JzW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihuYW1lLCBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IHRydWUsIGVycm9yOiBudWxsIH07XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBzZXRWYWxpZGF0aW5nKChwcmV2KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3VmFsaWRhdGluZyA9IE9iamVjdC5hc3NpZ24oe30sIHByZXYpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdWYWxpZGF0aW5nW25hbWVdO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXdWYWxpZGF0aW5nO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KSk7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gQXN5bmMgZmllbGQgYmx1ciBoYW5kbGVyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgY29uc3QgaGFuZGxlRmllbGRCbHVyID0gdXNlRXZlbnRDYWxsYmFjaygobmFtZSkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHNldEV4dHJhVG91Y2hlZCgocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW25hbWVdOiB0cnVlIH0pKSk7XG4gICAgICAgIGNvbnN0IHJ1bGVzID0gZm9ybUNvcmUuZmllbGRSdWxlc1tuYW1lXTtcbiAgICAgICAgaWYgKHJ1bGVzICYmIHZhbGlkYXRlVHJpZ2dlciA9PT0gJ29uQmx1cicpIHtcbiAgICAgICAgICAgIHlpZWxkIHZhbGlkYXRlRmllbGRBc3luYyhuYW1lLCByZXNvbHZlVmFsdWUoZm9ybUNvcmUudmFsdWVzLCBuYW1lKSwgcnVsZXMpO1xuICAgICAgICB9XG4gICAgfSkpO1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIFZhbGlkYXRlIGFsbCBmaWVsZHMgYXN5bmNcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCB2YWxpZGF0ZUZpZWxkc0FzeW5jID0gdXNlTWVtb2l6ZWRGbigobmFtZUxpc3QpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBmaWVsZHNUb1ZhbGlkYXRlID0gbmFtZUxpc3QgfHwgT2JqZWN0LmtleXMoZm9ybUNvcmUuZmllbGRSdWxlcyk7XG4gICAgICAgIGxldCBoYXNFcnJvciA9IGZhbHNlO1xuICAgICAgICBjb25zdCBmaWVsZEVycm9ycyA9IHt9O1xuICAgICAgICBjb25zdCB2YWxpZGF0aW9uUHJvbWlzZXMgPSBmaWVsZHNUb1ZhbGlkYXRlLm1hcCgobmFtZSkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCBydWxlcyA9IGZvcm1Db3JlLmZpZWxkUnVsZXNbbmFtZV07XG4gICAgICAgICAgICBpZiAocnVsZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGlzVmFsaWQsIGVycm9yIH0gPSB5aWVsZCB2YWxpZGF0ZUZpZWxkQXN5bmMobmFtZSwgcmVzb2x2ZVZhbHVlKGZvcm1Db3JlLnZhbHVlcywgbmFtZSksIHJ1bGVzKTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWQgJiYgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBmaWVsZEVycm9yc1tuYW1lXSA9IGVycm9yO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuICAgICAgICB5aWVsZCBQcm9taXNlLmFsbCh2YWxpZGF0aW9uUHJvbWlzZXMpO1xuICAgICAgICBpZiAoaGFzRXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKCdWYWxpZGF0aW9uIGZhaWxlZCcpO1xuICAgICAgICAgICAgZXJyb3IudmFsdWVzID0gZm9ybUNvcmUudmFsdWVzO1xuICAgICAgICAgICAgZXJyb3IuZXJyb3JzID0gZmllbGRFcnJvcnM7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmFtZUxpc3QpIHtcbiAgICAgICAgICAgIHJldHVybiBuYW1lTGlzdC5yZWR1Y2UoKGFjYywgbmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgIGFjY1tuYW1lXSA9IHJlc29sdmVWYWx1ZShmb3JtQ29yZS52YWx1ZXMsIG5hbWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICB9LCB7fSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZvcm1Db3JlLnZhbHVlcztcbiAgICB9KSk7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gZGVmaW5lRmllbGQg4oCTIHVzZWQgYnkgc3RhbmRhbG9uZSAobm9uLVByb0Zvcm0pIGNvbnN1bWVyc1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IGRlZmluZUZpZWxkID0gdXNlQ2FsbGJhY2soKG5hbWUsIGZpZWxkT3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcnVsZXMgPSBbXSB9ID0gZmllbGRPcHRpb25zO1xuICAgICAgICBjb25zdCBGaWVsZENvbXBvbmVudCA9IG1lbW8oKF9hKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2I7XG4gICAgICAgICAgICB2YXIgeyBjaGlsZHJlbiwgcmVuZGVyIH0gPSBfYSwgcHJvcHMgPSBfX3Jlc3QoX2EsIFtcImNoaWxkcmVuXCIsIFwicmVuZGVyXCJdKTtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkVmFsdWUgPSAoX2IgPSBmb3JtQ29yZS52YWx1ZXNbbmFtZV0pICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xuICAgICAgICAgICAgY29uc3QgZmllbGRFcnJvciA9IGZvcm1Db3JlLmVycm9yc1tuYW1lXTtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkVG91Y2hlZCA9IGFsbFRvdWNoZWRbbmFtZV07XG4gICAgICAgICAgICBjb25zdCBmaWVsZFZhbGlkYXRpbmcgPSB2YWxpZGF0aW5nW25hbWVdO1xuICAgICAgICAgICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ1J1bGVzID0gZm9ybUNvcmUuZ2V0RmllbGRSdWxlcyhuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoIWV4aXN0aW5nUnVsZXMgJiYgcnVsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBmb3JtQ29yZS5yZWdpc3RlckZpZWxkKG5hbWUsIHJ1bGVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvcmUudW5yZWdpc3RlckZpZWxkKG5hbWUpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9LCBbXSk7IC8vIE9ubHkgcmVnaXN0ZXIgb24gbW91bnRcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZUZpZWxkQ2hhbmdlID0gdXNlRXZlbnRDYWxsYmFjaygodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZFZhbHVlKG5hbWUsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVUcmlnZ2VyID09PSAnb25DaGFuZ2UnKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db3JlLnZhbGlkYXRlRmllbGQobmFtZSwgcnVsZXMsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZUJsdXIgPSB1c2VFdmVudENhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgICAgICAgICBoYW5kbGVGaWVsZEJsdXIobmFtZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkUHJvcHMgPSBPYmplY3QuYXNzaWduKHsgbmFtZSwgdmFsdWU6IGZpZWxkVmFsdWUsIGVycm9yOiBmaWVsZEVycm9yLCB0b3VjaGVkOiBmaWVsZFRvdWNoZWQsIHZhbGlkYXRpbmc6IGZpZWxkVmFsaWRhdGluZywgb25DaGFuZ2U6IGhhbmRsZUZpZWxkQ2hhbmdlLCBvbkJsdXI6IGhhbmRsZUJsdXIgfSwgcHJvcHMpO1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlTWVyZ2VDaGFuZ2UgPSAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGUgJiYgdHlwZW9mIGUgPT09ICdvYmplY3QnICYmICd0YXJnZXQnIGluIGVcbiAgICAgICAgICAgICAgICAgICAgPyBlLnRhcmdldC52YWx1ZVxuICAgICAgICAgICAgICAgICAgICA6IGU7XG4gICAgICAgICAgICAgICAgaGFuZGxlRmllbGRDaGFuZ2UodmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmIChSZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZHJlbikgJiZcbiAgICAgICAgICAgICAgICAgICAgKChfYSA9IGNoaWxkcmVuLnByb3BzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub25DaGFuZ2UpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnByb3BzLm9uQ2hhbmdlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlTWVyZ2VCbHVyID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICBoYW5kbGVCbHVyKCk7XG4gICAgICAgICAgICAgICAgaWYgKFJlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSAmJlxuICAgICAgICAgICAgICAgICAgICAoKF9hID0gY2hpbGRyZW4ucHJvcHMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5vbkJsdXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnByb3BzLm9uQmx1cigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAocmVuZGVyICYmIHR5cGVvZiByZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyKGZpZWxkUHJvcHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBjaGlsZHJlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZHJlbihmaWVsZFByb3BzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChSZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZHJlbikpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtZXJnZWRQcm9wcyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZmllbGRQcm9wcyksIHsgb25DaGFuZ2U6IGhhbmRsZU1lcmdlQ2hhbmdlLCBvbkJsdXI6IGhhbmRsZU1lcmdlQmx1ciB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCBtZXJnZWRQcm9wcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChGcmFnbWVudCwgbnVsbCwgLi4uY2hpbGRyZW4ubWFwKChjaGlsZCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFJlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWVyZ2VkUHJvcHMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGZpZWxkUHJvcHMpLCB7IGtleTogY2hpbGQua2V5IHx8IGluZGV4LCBvbkNoYW5nZTogaGFuZGxlTWVyZ2VDaGFuZ2UsIG9uQmx1cjogaGFuZGxlTWVyZ2VCbHVyIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNsb25lRWxlbWVudChjaGlsZCwgbWVyZ2VkUHJvcHMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSk7XG4gICAgICAgIEZpZWxkQ29tcG9uZW50LmRpc3BsYXlOYW1lID0gYEZpZWxkKCR7bmFtZX0pYDtcbiAgICAgICAgcmV0dXJuIEZpZWxkQ29tcG9uZW50O1xuICAgIH0sIFtcbiAgICAgICAgZm9ybUNvcmUsXG4gICAgICAgIGFsbFRvdWNoZWQsXG4gICAgICAgIHZhbGlkYXRpbmcsXG4gICAgICAgIHZhbGlkYXRlVHJpZ2dlcixcbiAgICAgICAgaGFuZGxlRmllbGRCbHVyLFxuICAgIF0pO1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIGhhbmRsZVN1Ym1pdCAvIGhhbmRsZVJlc2V0IOKAkyBmb3IgPGZvcm0+IGV2ZW50IGhhbmRsZXJzXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgY29uc3QgaGFuZGxlU3VibWl0ID0gdXNlRXZlbnRDYWxsYmFjaygoZSkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGUgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgdmFsaWRhdGVkVmFsdWVzID0geWllbGQgdmFsaWRhdGVGaWVsZHNBc3luYygpO1xuICAgICAgICAgICAgb25GaW5pc2ggPT09IG51bGwgfHwgb25GaW5pc2ggPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRmluaXNoKHZhbGlkYXRlZFZhbHVlcyk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgY29uc3QgdHlwZWQgPSBlcnI7XG4gICAgICAgICAgICBvbkZpbmlzaEZhaWxlZCA9PT0gbnVsbCB8fCBvbkZpbmlzaEZhaWxlZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25GaW5pc2hGYWlsZWQoeyB2YWx1ZXM6IHR5cGVkLnZhbHVlcywgZXJyb3JzOiB0eXBlZC5lcnJvcnMgfSk7XG4gICAgICAgIH1cbiAgICB9KSk7XG4gICAgY29uc3QgaGFuZGxlUmVzZXQgPSB1c2VFdmVudENhbGxiYWNrKChlKSA9PiB7XG4gICAgICAgIGUgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBmb3JtQ29yZS5yZXNldEZpZWxkcygpO1xuICAgICAgICBzZXRFeHRyYVRvdWNoZWQoe30pO1xuICAgICAgICBzZXRWYWxpZGF0aW5nKHt9KTtcbiAgICAgICAgb25SZXNldCA9PT0gbnVsbCB8fCBvblJlc2V0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvblJlc2V0KCk7XG4gICAgfSk7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gRm9ybUluc3RhbmNlIOKAkyBlbmhhbmNlZCBBUEkgZm9yIGNvbnN1bWVyc1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IGZvcm1JbnN0YW5jZSA9IHVzZU1lbW8oKCkgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZm9ybUNvcmUuZm9ybUluc3RhbmNlKSwgeyB2YWxpZGF0ZUZpZWxkczogdmFsaWRhdGVGaWVsZHNBc3luYywgc2V0RmllbGRWYWx1ZTogZm9ybUNvcmUuc2V0RmllbGRWYWx1ZSwgZ2V0RmllbGRFcnJvcjogKG5hbWUpID0+IGZvcm1Db3JlLmVycm9yc1tuYW1lXSwgZ2V0RmllbGRzRXJyb3I6IChuYW1lTGlzdCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFuYW1lTGlzdClcbiAgICAgICAgICAgICAgICByZXR1cm4gZm9ybUNvcmUuZXJyb3JzO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgICAgICAgICBuYW1lTGlzdC5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGZvcm1Db3JlLmVycm9yc1tuYW1lXSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRbbmFtZV0gPSBmb3JtQ29yZS5lcnJvcnNbbmFtZV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9LCBpc0ZpZWxkVG91Y2hlZDogKG5hbWUpID0+IGFsbFRvdWNoZWRbbmFtZV0gfHwgZmFsc2UsIGlzRmllbGRzVG91Y2hlZDogKG5hbWVMaXN0LCBhbGxGaWVsZHNUb3VjaGVkID0gZmFsc2UpID0+IHtcbiAgICAgICAgICAgIGlmICghbmFtZUxpc3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoYWxsVG91Y2hlZCkuc29tZSgoa2V5KSA9PiBhbGxUb3VjaGVkW2tleV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFsbEZpZWxkc1RvdWNoZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmFtZUxpc3QuZXZlcnkoKG5hbWUpID0+IGFsbFRvdWNoZWRbbmFtZV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5hbWVMaXN0LnNvbWUoKG5hbWUpID0+IGFsbFRvdWNoZWRbbmFtZV0pO1xuICAgICAgICB9LCBpc0ZpZWxkVmFsaWRhdGluZzogKG5hbWUpID0+IHZhbGlkYXRpbmdbbmFtZV0gfHwgZmFsc2UsIHNldEZpZWxkRXJyb3I6IGZvcm1Db3JlLnNldEZpZWxkRXJyb3IsIHNldEZpZWxkc0Vycm9yOiAoZmllbGRzRXJyb3IpID0+IHtcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGZpZWxkc0Vycm9yKS5mb3JFYWNoKChbbmFtZSwgZXJyb3JdKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihuYW1lLCBlcnJvcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgc2V0RmllbGRUb3VjaGVkOiAobmFtZSwgaXNUb3VjaGVkID0gdHJ1ZSkgPT4ge1xuICAgICAgICAgICAgc2V0RXh0cmFUb3VjaGVkKChwcmV2KSA9PiAoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwcmV2KSwgeyBbbmFtZV06IGlzVG91Y2hlZCB9KSkpO1xuICAgICAgICB9LCBzZXRGaWVsZHNUb3VjaGVkOiAoZmllbGRzVG91Y2gpID0+IHtcbiAgICAgICAgICAgIHNldEV4dHJhVG91Y2hlZCgocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIGZpZWxkc1RvdWNoKSkpO1xuICAgICAgICB9LCByZXNldEZpZWxkczogKGZpZWxkcykgPT4ge1xuICAgICAgICAgICAgaWYgKCFmaWVsZHMpIHtcbiAgICAgICAgICAgICAgICBmb3JtQ29yZS5yZXNldEZpZWxkcygpO1xuICAgICAgICAgICAgICAgIHNldEV4dHJhVG91Y2hlZCh7fSk7XG4gICAgICAgICAgICAgICAgc2V0VmFsaWRhdGluZyh7fSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXNldFZhbHVlcyA9IHt9O1xuICAgICAgICAgICAgICAgIGZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgICAgIHJlc2V0VmFsdWVzW2ZpZWxkXSA9ICgoX2EgPSBjb25maWcuaW5pdGlhbFZhbHVlcykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoge30pW2ZpZWxkXTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZHNWYWx1ZShyZXNldFZhbHVlcyk7XG4gICAgICAgICAgICAgICAgc2V0RXh0cmFUb3VjaGVkKChwcmV2KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1RvdWNoZWQgPSBPYmplY3QuYXNzaWduKHt9LCBwcmV2KTtcbiAgICAgICAgICAgICAgICAgICAgZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgbmV3VG91Y2hlZFtmaWVsZF07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3VG91Y2hlZDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBzZXRWYWxpZGF0aW5nKChwcmV2KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZhbGlkYXRpbmcgPSBPYmplY3QuYXNzaWduKHt9LCBwcmV2KTtcbiAgICAgICAgICAgICAgICAgICAgZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgbmV3VmFsaWRhdGluZ1tmaWVsZF07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3VmFsaWRhdGluZztcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBmaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihmaWVsZCwgbnVsbCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHN1Ym1pdDogKGNhbGxiYWNrKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsaWRhdGVkVmFsdWVzID0geWllbGQgdmFsaWRhdGVGaWVsZHNBc3luYygpO1xuICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCBjYWxsYmFjayh2YWxpZGF0ZWRWYWx1ZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsaWRhdGVkVmFsdWVzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSksIGRlZmluZUZpZWxkLCByZWdpc3RlckZpZWxkOiBmb3JtQ29yZS5yZWdpc3RlckZpZWxkLCB1bnJlZ2lzdGVyRmllbGQ6IGZvcm1Db3JlLnVucmVnaXN0ZXJGaWVsZCB9KSksIFtcbiAgICAgICAgZm9ybUNvcmUsXG4gICAgICAgIGFsbFRvdWNoZWQsXG4gICAgICAgIHZhbGlkYXRpbmcsXG4gICAgICAgIHZhbGlkYXRlRmllbGRzQXN5bmMsXG4gICAgICAgIGRlZmluZUZpZWxkLFxuICAgICAgICBjb25maWcuaW5pdGlhbFZhbHVlcyxcbiAgICAgICAgc2V0VmFsaWRhdGluZyxcbiAgICBdKTtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBJbnRlcm5hbHMg4oCTIGV4cG9zZWQgZm9yIFByb0Zvcm0gaW50ZWdyYXRpb25cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCBpbnRlcm5hbHMgPSB1c2VNZW1vKCgpID0+ICh7XG4gICAgICAgIHZhbHVlczogZm9ybUNvcmUudmFsdWVzLFxuICAgICAgICBlcnJvcnM6IGZvcm1Db3JlLmVycm9ycyxcbiAgICAgICAgdG91Y2hlZDogYWxsVG91Y2hlZCxcbiAgICAgICAgdmFsaWRhdGluZyxcbiAgICAgICAgZmllbGRSdWxlczogZm9ybUNvcmUuZmllbGRSdWxlcyxcbiAgICAgICAgc2V0RmllbGRWYWx1ZTogZm9ybUNvcmUuc2V0RmllbGRWYWx1ZSxcbiAgICAgICAgc2V0RmllbGRFcnJvcjogZm9ybUNvcmUuc2V0RmllbGRFcnJvcixcbiAgICAgICAgdmFsaWRhdGVGaWVsZDogZm9ybUNvcmUudmFsaWRhdGVGaWVsZCxcbiAgICAgICAgdmFsaWRhdGVGaWVsZEFzeW5jLFxuICAgICAgICByZWdpc3RlckZpZWxkOiBmb3JtQ29yZS5yZWdpc3RlckZpZWxkLFxuICAgICAgICB1bnJlZ2lzdGVyRmllbGQ6IGZvcm1Db3JlLnVucmVnaXN0ZXJGaWVsZCxcbiAgICAgICAgaGFuZGxlU3VibWl0LFxuICAgICAgICBoYW5kbGVSZXNldCxcbiAgICB9KSwgW1xuICAgICAgICBmb3JtQ29yZS52YWx1ZXMsXG4gICAgICAgIGZvcm1Db3JlLmVycm9ycyxcbiAgICAgICAgYWxsVG91Y2hlZCxcbiAgICAgICAgdmFsaWRhdGluZyxcbiAgICAgICAgZm9ybUNvcmUuZmllbGRSdWxlcyxcbiAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRWYWx1ZSxcbiAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcixcbiAgICAgICAgZm9ybUNvcmUudmFsaWRhdGVGaWVsZCxcbiAgICAgICAgdmFsaWRhdGVGaWVsZEFzeW5jLFxuICAgICAgICBmb3JtQ29yZS5yZWdpc3RlckZpZWxkLFxuICAgICAgICBmb3JtQ29yZS51bnJlZ2lzdGVyRmllbGQsXG4gICAgICAgIGhhbmRsZVN1Ym1pdCxcbiAgICAgICAgaGFuZGxlUmVzZXQsXG4gICAgXSk7XG4gICAgcmV0dXJuIHsgZm9ybUluc3RhbmNlLCBpbnRlcm5hbHMgfTtcbn07XG5leHBvcnQgZGVmYXVsdCB1c2VGb3JtOyIsbnVsbF0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==