@1money/component-ui 0.0.71 → 0.0.73

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 (75) hide show
  1. package/es/components/ProForm/ProForm.d.ts +10 -2
  2. package/es/components/ProForm/ProForm.js +55 -22
  3. package/es/components/ProForm/ProFormDependency.js +4 -1
  4. package/es/components/ProForm/ProFormItem.js +73 -36
  5. package/es/components/ProForm/SchemaForm.d.ts +7 -0
  6. package/es/components/ProForm/SchemaForm.js +103 -0
  7. package/es/components/ProForm/Submitter.js +12 -2
  8. package/es/components/ProForm/context.d.ts +22 -3
  9. package/es/components/ProForm/context.js +49 -10
  10. package/es/components/ProForm/core/constants.d.ts +2 -1
  11. package/es/components/ProForm/core/constants.js +3 -6
  12. package/es/components/ProForm/core/hooks/useForm.js +155 -131
  13. package/es/components/ProForm/core/hooks/useFormCore.js +73 -39
  14. package/es/components/ProForm/core/interface.d.ts +33 -12
  15. package/es/components/ProForm/core/runRules.d.ts +16 -6
  16. package/es/components/ProForm/core/runRules.js +94 -47
  17. package/es/components/ProForm/core/useFormItem.d.ts +10 -1
  18. package/es/components/ProForm/core/useFormItem.js +101 -39
  19. package/es/components/ProForm/fields/ProFormDatePicker.js +4 -1
  20. package/es/components/ProForm/fields/createProFormField.js +50 -31
  21. package/es/components/ProForm/index.d.ts +11 -4
  22. package/es/components/ProForm/index.js +7 -2
  23. package/es/components/ProForm/interface.d.ts +89 -14
  24. package/es/components/ProForm/layouts/DialogForm.d.ts +5 -1
  25. package/es/components/ProForm/layouts/DialogForm.js +2 -1
  26. package/es/components/ProForm/layouts/DrawerForm.d.ts +5 -1
  27. package/es/components/ProForm/layouts/DrawerForm.js +2 -1
  28. package/es/components/ProForm/layouts/QueryFilter.d.ts +5 -2
  29. package/es/components/ProForm/layouts/QueryFilter.js +77 -12
  30. package/es/components/ProForm/style/ProForm.css +6 -0
  31. package/es/components/ProForm/utils.d.ts +12 -1
  32. package/es/components/ProForm/utils.js +70 -21
  33. package/es/components/Tooltip/style/Tooltip.css +1 -0
  34. package/es/index.css +1 -1
  35. package/es/index.d.ts +2 -2
  36. package/es/index.js +2 -2
  37. package/lib/components/ProForm/ProForm.d.ts +10 -2
  38. package/lib/components/ProForm/ProForm.js +53 -20
  39. package/lib/components/ProForm/ProFormDependency.js +4 -1
  40. package/lib/components/ProForm/ProFormItem.js +72 -34
  41. package/lib/components/ProForm/SchemaForm.d.ts +7 -0
  42. package/lib/components/ProForm/SchemaForm.js +110 -0
  43. package/lib/components/ProForm/Submitter.js +12 -2
  44. package/lib/components/ProForm/context.d.ts +22 -3
  45. package/lib/components/ProForm/context.js +49 -10
  46. package/lib/components/ProForm/core/constants.d.ts +2 -1
  47. package/lib/components/ProForm/core/constants.js +4 -7
  48. package/lib/components/ProForm/core/hooks/useForm.js +154 -130
  49. package/lib/components/ProForm/core/hooks/useFormCore.js +72 -38
  50. package/lib/components/ProForm/core/interface.d.ts +33 -12
  51. package/lib/components/ProForm/core/runRules.d.ts +16 -6
  52. package/lib/components/ProForm/core/runRules.js +95 -47
  53. package/lib/components/ProForm/core/useFormItem.d.ts +10 -1
  54. package/lib/components/ProForm/core/useFormItem.js +100 -38
  55. package/lib/components/ProForm/fields/ProFormDatePicker.js +4 -1
  56. package/lib/components/ProForm/fields/createProFormField.js +50 -31
  57. package/lib/components/ProForm/index.d.ts +11 -4
  58. package/lib/components/ProForm/index.js +16 -1
  59. package/lib/components/ProForm/interface.d.ts +89 -14
  60. package/lib/components/ProForm/layouts/DialogForm.d.ts +5 -1
  61. package/lib/components/ProForm/layouts/DialogForm.js +2 -1
  62. package/lib/components/ProForm/layouts/DrawerForm.d.ts +5 -1
  63. package/lib/components/ProForm/layouts/DrawerForm.js +2 -1
  64. package/lib/components/ProForm/layouts/QueryFilter.d.ts +5 -2
  65. package/lib/components/ProForm/layouts/QueryFilter.js +77 -12
  66. package/lib/components/ProForm/style/ProForm.css +6 -0
  67. package/lib/components/ProForm/utils.d.ts +12 -1
  68. package/lib/components/ProForm/utils.js +73 -21
  69. package/lib/components/Tooltip/style/Tooltip.css +1 -0
  70. package/lib/index.css +1 -1
  71. package/lib/index.d.ts +2 -2
  72. package/lib/index.js +13 -1
  73. package/package.json +1 -1
  74. package/scripts/mcp-server/examples.generated.json +54 -0
  75. package/scripts/mcp-server/index.generated.json +1212 -80
@@ -38,7 +38,7 @@ var __rest = this && this.__rest || function (s, e) {
38
38
  }
39
39
  return t;
40
40
  };
41
- import { useState, useMemo, useCallback, useEffect, memo, Fragment } from 'react';
41
+ import { useState, useMemo, useEffect, memo, Fragment } from 'react';
42
42
  import React from 'react';
43
43
  import useEventCallback from '@1money/hooks/useEventCallback';
44
44
  import useMemoizedFn from '@1money/hooks/useMemoizedFn';
@@ -73,7 +73,7 @@ export var useForm = function useForm() {
73
73
  // ---------------------------------------------------------------------------
74
74
  var validateFieldAsync = useMemoizedFn(function (name, value, rules) {
75
75
  return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
76
- var error;
76
+ var _yield$runRulesAsync, error, warning;
77
77
  return _regeneratorRuntime.wrap(function (_context) {
78
78
  while (1) switch (_context.prev = _context.next) {
79
79
  case 0:
@@ -91,9 +91,12 @@ export var useForm = function useForm() {
91
91
  });
92
92
  _context.prev = 2;
93
93
  _context.next = 3;
94
- return runRulesAsync(name, value, formCore.values, rules);
94
+ return runRulesAsync(name, value, formCore.getFieldsValue(), rules);
95
95
  case 3:
96
- error = _context.sent;
96
+ _yield$runRulesAsync = _context.sent;
97
+ error = _yield$runRulesAsync.error;
98
+ warning = _yield$runRulesAsync.warning;
99
+ formCore.setFieldWarning(name, warning);
97
100
  if (!(error !== null)) {
98
101
  _context.next = 4;
99
102
  break;
@@ -138,13 +141,13 @@ export var useForm = function useForm() {
138
141
  setExtraTouched(function (prev) {
139
142
  return Object.assign(Object.assign({}, prev), _defineProperty({}, name, true));
140
143
  });
141
- rules = formCore.fieldRules[name];
144
+ rules = formCore.getFieldRules(name);
142
145
  if (!(rules && validateTrigger === 'onBlur')) {
143
146
  _context2.next = 1;
144
147
  break;
145
148
  }
146
149
  _context2.next = 1;
147
- return validateFieldAsync(name, resolveValue(formCore.values, name), rules);
150
+ return validateFieldAsync(name, resolveValue(formCore.getFieldsValue(), name), rules);
148
151
  case 1:
149
152
  case "end":
150
153
  return _context2.stop();
@@ -176,7 +179,7 @@ export var useForm = function useForm() {
176
179
  break;
177
180
  }
178
181
  _context3.next = 1;
179
- return validateFieldAsync(name, resolveValue(formCore.values, name), rules);
182
+ return validateFieldAsync(name, resolveValue(formCore.getFieldsValue(), name), rules);
180
183
  case 1:
181
184
  _yield$validateFieldA = _context3.sent;
182
185
  isValid = _yield$validateFieldA.isValid;
@@ -200,7 +203,7 @@ export var useForm = function useForm() {
200
203
  break;
201
204
  }
202
205
  error = new Error('Validation failed');
203
- error.values = formCore.values;
206
+ error.values = formCore.getFieldsValue();
204
207
  error.errors = fieldErrors;
205
208
  throw error;
206
209
  case 2:
@@ -209,11 +212,11 @@ export var useForm = function useForm() {
209
212
  break;
210
213
  }
211
214
  return _context4.abrupt("return", nameList.reduce(function (acc, name) {
212
- acc[name] = resolveValue(formCore.values, name);
215
+ acc[name] = resolveValue(formCore.getFieldsValue(), name);
213
216
  return acc;
214
217
  }, {}));
215
218
  case 3:
216
- return _context4.abrupt("return", formCore.values);
219
+ return _context4.abrupt("return", formCore.getFieldsValue());
217
220
  case 4:
218
221
  case "end":
219
222
  return _context4.stop();
@@ -224,7 +227,7 @@ export var useForm = function useForm() {
224
227
  // ---------------------------------------------------------------------------
225
228
  // defineField – used by standalone (non-ProForm) consumers
226
229
  // ---------------------------------------------------------------------------
227
- var defineField = useCallback(function (name) {
230
+ var defineField = useMemoizedFn(function (name) {
228
231
  var fieldOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
229
232
  var _fieldOptions$rules = fieldOptions.rules,
230
233
  rules = _fieldOptions$rules === void 0 ? [] : _fieldOptions$rules;
@@ -309,7 +312,7 @@ export var useForm = function useForm() {
309
312
  });
310
313
  FieldComponent.displayName = "Field(".concat(name, ")");
311
314
  return FieldComponent;
312
- }, [formCore, allTouched, validating, validateTrigger, handleFieldBlur]);
315
+ });
313
316
  // ---------------------------------------------------------------------------
314
317
  // handleSubmit / handleReset – for <form> event handlers
315
318
  // ---------------------------------------------------------------------------
@@ -351,133 +354,152 @@ export var useForm = function useForm() {
351
354
  onReset === null || onReset === void 0 ? void 0 : onReset();
352
355
  });
353
356
  // ---------------------------------------------------------------------------
354
- // FormInstance – enhanced API for consumers
357
+ // FormInstance – enhanced API for consumers.
358
+ //
359
+ // Every method is wrapped in useMemoizedFn (stable identity, always reads the
360
+ // latest render's state) so the instance object itself is IDENTITY-STABLE for
361
+ // the lifetime of the form — this is what lets ProForm publish it through the
362
+ // stable context without re-rendering subscribers on each keystroke.
355
363
  // ---------------------------------------------------------------------------
364
+ var getFieldError = useMemoizedFn(function (name) {
365
+ return formCore.errors[name];
366
+ });
367
+ var getFieldWarning = useMemoizedFn(function (name) {
368
+ return formCore.warnings[name];
369
+ });
370
+ var getFieldsError = useMemoizedFn(function (nameList) {
371
+ if (!nameList) return formCore.errors;
372
+ var result = {};
373
+ nameList.forEach(function (name) {
374
+ if (formCore.errors[name]) {
375
+ result[name] = formCore.errors[name];
376
+ }
377
+ });
378
+ return result;
379
+ });
380
+ var isFieldTouched = useMemoizedFn(function (name) {
381
+ return allTouched[name] || false;
382
+ });
383
+ var isFieldsTouched = useMemoizedFn(function (nameList) {
384
+ var allFieldsTouched = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
385
+ if (!nameList) {
386
+ return Object.keys(allTouched).some(function (key) {
387
+ return allTouched[key];
388
+ });
389
+ }
390
+ if (allFieldsTouched) {
391
+ return nameList.every(function (name) {
392
+ return allTouched[name];
393
+ });
394
+ }
395
+ return nameList.some(function (name) {
396
+ return allTouched[name];
397
+ });
398
+ });
399
+ var isFieldValidating = useMemoizedFn(function (name) {
400
+ return validating[name] || false;
401
+ });
402
+ var setFieldsError = useMemoizedFn(function (fieldsError) {
403
+ Object.entries(fieldsError).forEach(function (_ref) {
404
+ var _ref2 = _slicedToArray(_ref, 2),
405
+ name = _ref2[0],
406
+ error = _ref2[1];
407
+ formCore.setFieldError(name, error);
408
+ });
409
+ });
410
+ var setFieldTouched = useMemoizedFn(function (name) {
411
+ var isTouched = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
412
+ setExtraTouched(function (prev) {
413
+ return Object.assign(Object.assign({}, prev), _defineProperty({}, name, isTouched));
414
+ });
415
+ });
416
+ var setFieldsTouched = useMemoizedFn(function (fieldsTouch) {
417
+ setExtraTouched(function (prev) {
418
+ return Object.assign(Object.assign({}, prev), fieldsTouch);
419
+ });
420
+ });
421
+ var resetFormFields = useMemoizedFn(function (fields) {
422
+ if (!fields) {
423
+ formCore.resetFields();
424
+ setExtraTouched({});
425
+ setValidating({});
426
+ } else {
427
+ var resetValues = {};
428
+ fields.forEach(function (field) {
429
+ var _a;
430
+ resetValues[field] = ((_a = config.initialValues) !== null && _a !== void 0 ? _a : {})[field];
431
+ });
432
+ formCore.setFieldsValue(resetValues);
433
+ setExtraTouched(function (prev) {
434
+ var newTouched = Object.assign({}, prev);
435
+ fields.forEach(function (field) {
436
+ delete newTouched[field];
437
+ });
438
+ return newTouched;
439
+ });
440
+ setValidating(function (prev) {
441
+ var newValidating = Object.assign({}, prev);
442
+ fields.forEach(function (field) {
443
+ delete newValidating[field];
444
+ });
445
+ return newValidating;
446
+ });
447
+ fields.forEach(function (field) {
448
+ formCore.setFieldError(field, null);
449
+ });
450
+ }
451
+ });
452
+ var submitWithValidation = useMemoizedFn(function (callback) {
453
+ return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regeneratorRuntime.mark(function _callee6() {
454
+ var validatedValues, _t2;
455
+ return _regeneratorRuntime.wrap(function (_context6) {
456
+ while (1) switch (_context6.prev = _context6.next) {
457
+ case 0:
458
+ _context6.prev = 0;
459
+ _context6.next = 1;
460
+ return validateFieldsAsync();
461
+ case 1:
462
+ validatedValues = _context6.sent;
463
+ if (!callback) {
464
+ _context6.next = 2;
465
+ break;
466
+ }
467
+ _context6.next = 2;
468
+ return callback(validatedValues);
469
+ case 2:
470
+ return _context6.abrupt("return", validatedValues);
471
+ case 3:
472
+ _context6.prev = 3;
473
+ _t2 = _context6["catch"](0);
474
+ return _context6.abrupt("return", undefined);
475
+ case 4:
476
+ case "end":
477
+ return _context6.stop();
478
+ }
479
+ }, _callee6, null, [[0, 3]]);
480
+ }));
481
+ });
356
482
  var formInstance = useMemo(function () {
357
483
  return Object.assign(Object.assign({}, formCore.formInstance), {
358
484
  validateFields: validateFieldsAsync,
359
485
  setFieldValue: formCore.setFieldValue,
360
- getFieldError: function getFieldError(name) {
361
- return formCore.errors[name];
362
- },
363
- getFieldsError: function getFieldsError(nameList) {
364
- if (!nameList) return formCore.errors;
365
- var result = {};
366
- nameList.forEach(function (name) {
367
- if (formCore.errors[name]) {
368
- result[name] = formCore.errors[name];
369
- }
370
- });
371
- return result;
372
- },
373
- isFieldTouched: function isFieldTouched(name) {
374
- return allTouched[name] || false;
375
- },
376
- isFieldsTouched: function isFieldsTouched(nameList) {
377
- var allFieldsTouched = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
378
- if (!nameList) {
379
- return Object.keys(allTouched).some(function (key) {
380
- return allTouched[key];
381
- });
382
- }
383
- if (allFieldsTouched) {
384
- return nameList.every(function (name) {
385
- return allTouched[name];
386
- });
387
- }
388
- return nameList.some(function (name) {
389
- return allTouched[name];
390
- });
391
- },
392
- isFieldValidating: function isFieldValidating(name) {
393
- return validating[name] || false;
394
- },
486
+ getFieldError: getFieldError,
487
+ getFieldWarning: getFieldWarning,
488
+ getFieldsError: getFieldsError,
489
+ isFieldTouched: isFieldTouched,
490
+ isFieldsTouched: isFieldsTouched,
491
+ isFieldValidating: isFieldValidating,
395
492
  setFieldError: formCore.setFieldError,
396
- setFieldsError: function setFieldsError(fieldsError) {
397
- Object.entries(fieldsError).forEach(function (_ref) {
398
- var _ref2 = _slicedToArray(_ref, 2),
399
- name = _ref2[0],
400
- error = _ref2[1];
401
- formCore.setFieldError(name, error);
402
- });
403
- },
404
- setFieldTouched: function setFieldTouched(name) {
405
- var isTouched = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
406
- setExtraTouched(function (prev) {
407
- return Object.assign(Object.assign({}, prev), _defineProperty({}, name, isTouched));
408
- });
409
- },
410
- setFieldsTouched: function setFieldsTouched(fieldsTouch) {
411
- setExtraTouched(function (prev) {
412
- return Object.assign(Object.assign({}, prev), fieldsTouch);
413
- });
414
- },
415
- resetFields: function resetFields(fields) {
416
- if (!fields) {
417
- formCore.resetFields();
418
- setExtraTouched({});
419
- setValidating({});
420
- } else {
421
- var resetValues = {};
422
- fields.forEach(function (field) {
423
- var _a;
424
- resetValues[field] = ((_a = config.initialValues) !== null && _a !== void 0 ? _a : {})[field];
425
- });
426
- formCore.setFieldsValue(resetValues);
427
- setExtraTouched(function (prev) {
428
- var newTouched = Object.assign({}, prev);
429
- fields.forEach(function (field) {
430
- delete newTouched[field];
431
- });
432
- return newTouched;
433
- });
434
- setValidating(function (prev) {
435
- var newValidating = Object.assign({}, prev);
436
- fields.forEach(function (field) {
437
- delete newValidating[field];
438
- });
439
- return newValidating;
440
- });
441
- fields.forEach(function (field) {
442
- formCore.setFieldError(field, null);
443
- });
444
- }
445
- },
446
- submit: function submit(callback) {
447
- return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regeneratorRuntime.mark(function _callee6() {
448
- var validatedValues, _t2;
449
- return _regeneratorRuntime.wrap(function (_context6) {
450
- while (1) switch (_context6.prev = _context6.next) {
451
- case 0:
452
- _context6.prev = 0;
453
- _context6.next = 1;
454
- return validateFieldsAsync();
455
- case 1:
456
- validatedValues = _context6.sent;
457
- if (!callback) {
458
- _context6.next = 2;
459
- break;
460
- }
461
- _context6.next = 2;
462
- return callback(validatedValues);
463
- case 2:
464
- return _context6.abrupt("return", validatedValues);
465
- case 3:
466
- _context6.prev = 3;
467
- _t2 = _context6["catch"](0);
468
- return _context6.abrupt("return", undefined);
469
- case 4:
470
- case "end":
471
- return _context6.stop();
472
- }
473
- }, _callee6, null, [[0, 3]]);
474
- }));
475
- },
493
+ setFieldsError: setFieldsError,
494
+ setFieldTouched: setFieldTouched,
495
+ setFieldsTouched: setFieldsTouched,
496
+ resetFields: resetFormFields,
497
+ submit: submitWithValidation,
476
498
  defineField: defineField,
477
499
  registerField: formCore.registerField,
478
500
  unregisterField: formCore.unregisterField
479
501
  });
480
- }, [formCore, allTouched, validating, validateFieldsAsync, defineField, config.initialValues, setValidating]);
502
+ }, [formCore.formInstance, formCore.setFieldValue, formCore.setFieldError, formCore.registerField, formCore.unregisterField, validateFieldsAsync, getFieldError, getFieldWarning, getFieldsError, isFieldTouched, isFieldsTouched, isFieldValidating, setFieldsError, setFieldTouched, setFieldsTouched, resetFormFields, submitWithValidation, defineField]);
481
503
  // ---------------------------------------------------------------------------
482
504
  // Internals – exposed for ProForm integration
483
505
  // ---------------------------------------------------------------------------
@@ -485,11 +507,13 @@ export var useForm = function useForm() {
485
507
  return {
486
508
  values: formCore.values,
487
509
  errors: formCore.errors,
510
+ warnings: formCore.warnings,
488
511
  touched: allTouched,
489
512
  validating: validating,
490
513
  fieldRules: formCore.fieldRules,
491
514
  setFieldValue: formCore.setFieldValue,
492
515
  setFieldError: formCore.setFieldError,
516
+ setFieldWarning: formCore.setFieldWarning,
493
517
  validateField: formCore.validateField,
494
518
  validateFieldAsync: validateFieldAsync,
495
519
  registerField: formCore.registerField,
@@ -497,11 +521,11 @@ export var useForm = function useForm() {
497
521
  handleSubmit: handleSubmit,
498
522
  handleReset: handleReset
499
523
  };
500
- }, [formCore.values, formCore.errors, allTouched, validating, formCore.fieldRules, formCore.setFieldValue, formCore.setFieldError, formCore.validateField, validateFieldAsync, formCore.registerField, formCore.unregisterField, handleSubmit, handleReset]);
524
+ }, [formCore.values, formCore.errors, formCore.warnings, allTouched, validating, formCore.fieldRules, formCore.setFieldValue, formCore.setFieldError, formCore.setFieldWarning, formCore.validateField, validateFieldAsync, formCore.registerField, formCore.unregisterField, handleSubmit, handleReset]);
501
525
  return {
502
526
  formInstance: formInstance,
503
527
  internals: internals
504
528
  };
505
529
  };
506
530
  export default useForm;
507
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL2hvb2tzL3VzZUZvcm0uanMiLCJjb21wb25lbnRzL1Byb0Zvcm0vY29yZS9zcmMvY29tcG9uZW50cy9Qcm9Gb3JtL2NvcmUvaG9va3MvdXNlRm9ybS50cyJdLCJuYW1lcyI6WyJfX2F3YWl0ZXIiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsIlAiLCJnZW5lcmF0b3IiLCJhZG9wdCIsInZhbHVlIiwicmVzb2x2ZSIsIlByb21pc2UiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJzdGVwIiwibmV4dCIsImUiLCJyZWplY3RlZCIsInJlc3VsdCIsImRvbmUiLCJ0aGVuIiwiYXBwbHkiLCJfX3Jlc3QiLCJzIiwidCIsInAiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpbmRleE9mIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiaSIsImxlbmd0aCIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwidXNlU3RhdGUiLCJ1c2VNZW1vIiwidXNlQ2FsbGJhY2siLCJ1c2VFZmZlY3QiLCJtZW1vIiwiRnJhZ21lbnQiLCJSZWFjdCIsInVzZUV2ZW50Q2FsbGJhY2siLCJ1c2VNZW1vaXplZEZuIiwidXNlU2FmZVN0YXRlIiwidXNlRm9ybUNvcmUiLCJyZXNvbHZlVmFsdWUiLCJydW5SdWxlc0FzeW5jIiwidXNlRm9ybSIsImNvbmZpZyIsImFyZ3VtZW50cyIsInVuZGVmaW5lZCIsIm9uRmluaXNoIiwib25GaW5pc2hGYWlsZWQiLCJvblJlc2V0IiwiX2NvbmZpZyR2YWxpZGF0ZVRyaWdnIiwidmFsaWRhdGVUcmlnZ2VyIiwiZm9ybUNvcmUiLCJfdXNlU2FmZVN0YXRlIiwiX3VzZVNhZmVTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsInZhbGlkYXRpbmciLCJzZXRWYWxpZGF0aW5nIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsImV4dHJhVG91Y2hlZCIsInNldEV4dHJhVG91Y2hlZCIsImFsbFRvdWNoZWQiLCJhc3NpZ24iLCJ0b3VjaGVkIiwidmFsaWRhdGVGaWVsZEFzeW5jIiwibmFtZSIsInJ1bGVzIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwiZXJyb3IiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwiYWJydXB0IiwiaXNWYWxpZCIsIl9kZWZpbmVQcm9wZXJ0eSIsInZhbHVlcyIsInNlbnQiLCJzZXRGaWVsZEVycm9yIiwiZXJyb3JzIiwibmV3VmFsaWRhdGluZyIsImZpbmlzaCIsInN0b3AiLCJoYW5kbGVGaWVsZEJsdXIiLCJfY2FsbGVlMiIsIl9jb250ZXh0MiIsImZpZWxkUnVsZXMiLCJ2YWxpZGF0ZUZpZWxkc0FzeW5jIiwibmFtZUxpc3QiLCJfY2FsbGVlNCIsImZpZWxkc1RvVmFsaWRhdGUiLCJoYXNFcnJvciIsImZpZWxkRXJyb3JzIiwidmFsaWRhdGlvblByb21pc2VzIiwiX2NvbnRleHQ0Iiwia2V5cyIsIm1hcCIsIl9jYWxsZWUzIiwiX3lpZWxkJHZhbGlkYXRlRmllbGRBIiwiX2NvbnRleHQzIiwiYWxsIiwiRXJyb3IiLCJyZWR1Y2UiLCJhY2MiLCJkZWZpbmVGaWVsZCIsImZpZWxkT3B0aW9ucyIsIl9maWVsZE9wdGlvbnMkcnVsZXMiLCJGaWVsZENvbXBvbmVudCIsIl9hIiwiX2IiLCJjaGlsZHJlbiIsInJlbmRlciIsInByb3BzIiwiZmllbGRWYWx1ZSIsImZpZWxkRXJyb3IiLCJmaWVsZFRvdWNoZWQiLCJmaWVsZFZhbGlkYXRpbmciLCJleGlzdGluZ1J1bGVzIiwiZ2V0RmllbGRSdWxlcyIsInJlZ2lzdGVyRmllbGQiLCJ1bnJlZ2lzdGVyRmllbGQiLCJoYW5kbGVGaWVsZENoYW5nZSIsInNldEZpZWxkVmFsdWUiLCJ2YWxpZGF0ZUZpZWxkIiwiaGFuZGxlQmx1ciIsImZpZWxkUHJvcHMiLCJvbkNoYW5nZSIsIm9uQmx1ciIsImhhbmRsZU1lcmdlQ2hhbmdlIiwiX3R5cGVvZiIsInRhcmdldCIsImlzVmFsaWRFbGVtZW50IiwiaGFuZGxlTWVyZ2VCbHVyIiwibWVyZ2VkUHJvcHMiLCJjbG9uZUVsZW1lbnQiLCJBcnJheSIsImlzQXJyYXkiLCJjcmVhdGVFbGVtZW50IiwiY29uY2F0IiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiY2hpbGQiLCJpbmRleCIsImtleSIsImRpc3BsYXlOYW1lIiwiaGFuZGxlU3VibWl0IiwiX2NhbGxlZTUiLCJ2YWxpZGF0ZWRWYWx1ZXMiLCJ0eXBlZCIsIl90IiwiX2NvbnRleHQ1IiwicHJldmVudERlZmF1bHQiLCJoYW5kbGVSZXNldCIsInJlc2V0RmllbGRzIiwiZm9ybUluc3RhbmNlIiwidmFsaWRhdGVGaWVsZHMiLCJnZXRGaWVsZEVycm9yIiwiZ2V0RmllbGRzRXJyb3IiLCJmb3JFYWNoIiwiaXNGaWVsZFRvdWNoZWQiLCJpc0ZpZWxkc1RvdWNoZWQiLCJhbGxGaWVsZHNUb3VjaGVkIiwic29tZSIsImV2ZXJ5IiwiaXNGaWVsZFZhbGlkYXRpbmciLCJzZXRGaWVsZHNFcnJvciIsImZpZWxkc0Vycm9yIiwiZW50cmllcyIsIl9yZWYiLCJfcmVmMiIsInNldEZpZWxkVG91Y2hlZCIsImlzVG91Y2hlZCIsInNldEZpZWxkc1RvdWNoZWQiLCJmaWVsZHNUb3VjaCIsImZpZWxkcyIsInJlc2V0VmFsdWVzIiwiZmllbGQiLCJpbml0aWFsVmFsdWVzIiwic2V0RmllbGRzVmFsdWUiLCJuZXdUb3VjaGVkIiwic3VibWl0IiwiY2FsbGJhY2siLCJfY2FsbGVlNiIsIl90MiIsIl9jb250ZXh0NiIsImludGVybmFscyJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxJQUFJQSxTQUFTLEdBQUksSUFBSSxJQUFJLElBQUksQ0FBQ0EsU0FBUyxJQUFLLFVBQVVDLE9BQU8sRUFBRUMsVUFBVSxFQUFFQyxDQUFDLEVBQUVDLFNBQVMsRUFBRTtFQUNyRixTQUFTQyxLQUFLQSxDQUFDQyxLQUFLLEVBQUU7SUFBRSxPQUFPQSxLQUFLLFlBQVlILENBQUMsR0FBR0csS0FBSyxHQUFHLElBQUlILENBQUMsQ0FBQyxVQUFVSSxPQUFPLEVBQUU7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SixPQUFPLENBQ3pDO0lBQUEsT0FBTztNQUNMK0MsTUFBTSxFQUFFMUIsUUFBUSxDQUFDMEIsTUFBTTtNQUN2QkcsTUFBTSxFQUFFN0IsUUFBUSxDQUFDNkIsTUFBTTtNQUN2QmpCLE9BQU8sRUFBRUYsVUFBVTtNQUNuQk4sVUFBVSxFQUFWQSxVQUFVO01BQ1ZnQyxVQUFVLEVBQUVwQyxRQUFRLENBQUNvQyxVQUFVO01BQy9Cb0MsYUFBYSxFQUFFeEUsUUFBUSxDQUFDd0UsYUFBYTtNQUNyQzVDLGFBQWEsRUFBRTVCLFFBQVEsQ0FBQzRCLGFBQWE7TUFDckM2QyxhQUFhLEVBQUV6RSxRQUFRLENBQUN5RSxhQUFhO01BQ3JDNUQsa0JBQWtCLEVBQWxCQSxrQkFBa0I7TUFDbEJ3RCxhQUFhLEVBQUVyRSxRQUFRLENBQUNxRSxhQUFhO01BQ3JDQyxlQUFlLEVBQUV0RSxRQUFRLENBQUNzRSxlQUFlO01BQ3pDd0IsWUFBWSxFQUFaQSxZQUFZO01BQ1pPLFdBQVcsRUFBWEE7SURyR0YsQ0NzR0M7RUFBQSxDQUFDLEVBQ0YsQ0FDRXJHLFFBQVEsQ0FBQzBCLE1BQU0sRUFDZjFCLFFBQVEsQ0FBQzZCLE1BQU0sRUFDZm5CLFVBQVUsRUFDVk4sVUFBVSxFQUNWSixRQUFRLENBQUNvQyxVQUFVLEVBQ25CcEMsUUFBUSxDQUFDd0UsYUFBYSxFQUN0QnhFLFFBQVEsQ0FBQzRCLGFBQWEsRUFDdEI1QixRQUFRLENBQUN5RSxhQUFhLEVBQ3RCNUQsa0JBQWtCLEVBQ2xCYixRQUFRLENBQUNxRSxhQUFhLEVBQ3RCckUsUUFBUSxDQUFDc0UsZUFBZSxFQUN4QndCLFlBQVksRUFDWk8sV0FBVyxDQUNaLENBQ0Y7RUFFRCxPQUFPO0lBQUVFLFlBQVksRUFBWkEsWUFBWTtJQUFFK0IsU0FBUyxFQUFUQTtFQUFTLENBQUU7QUFDcEMsQ0FBQztBQUVELGVBQWUvSSxPQUFPIiwiZmlsZSI6ImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL2hvb2tzL3VzZUZvcm0uanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbnZhciBfX3Jlc3QgPSAodGhpcyAmJiB0aGlzLl9fcmVzdCkgfHwgZnVuY3Rpb24gKHMsIGUpIHtcbiAgICB2YXIgdCA9IHt9O1xuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgICB0W3BdID0gc1twXTtcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgICAgfVxuICAgIHJldHVybiB0O1xufTtcbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VNZW1vLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCBtZW1vLCBGcmFnbWVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdXNlRXZlbnRDYWxsYmFjayBmcm9tICdAMW1vbmV5L2hvb2tzL3VzZUV2ZW50Q2FsbGJhY2snO1xuaW1wb3J0IHVzZU1lbW9pemVkRm4gZnJvbSAnQDFtb25leS9ob29rcy91c2VNZW1vaXplZEZuJztcbmltcG9ydCB1c2VTYWZlU3RhdGUgZnJvbSAnQDFtb25leS9ob29rcy91c2VTYWZlU3RhdGUnO1xuaW1wb3J0IHsgdXNlRm9ybUNvcmUgfSBmcm9tICcuL3VzZUZvcm1Db3JlJztcbmltcG9ydCB7IHJlc29sdmVWYWx1ZSB9IGZyb20gJy4uL3BhdGhVdGlscyc7XG5pbXBvcnQgeyBydW5SdWxlc0FzeW5jIH0gZnJvbSAnLi4vcnVuUnVsZXMnO1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyB1c2VGb3JtXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmV4cG9ydCBjb25zdCB1c2VGb3JtID0gKGNvbmZpZyA9IHt9KSA9PiB7XG4gICAgY29uc3QgeyBvbkZpbmlzaCwgb25GaW5pc2hGYWlsZWQsIG9uUmVzZXQsIHZhbGlkYXRlVHJpZ2dlciA9ICdvbkNoYW5nZScsIH0gPSBjb25maWc7XG4gICAgY29uc3QgZm9ybUNvcmUgPSB1c2VGb3JtQ29yZShjb25maWcpO1xuICAgIGNvbnN0IFt2YWxpZGF0aW5nLCBzZXRWYWxpZGF0aW5nXSA9IHVzZVNhZmVTdGF0ZSh7fSk7XG4gICAgY29uc3QgW2V4dHJhVG91Y2hlZCwgc2V0RXh0cmFUb3VjaGVkXSA9IHVzZVN0YXRlKHt9KTtcbiAgICBjb25zdCBhbGxUb3VjaGVkID0gdXNlTWVtbygoKSA9PiAoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBmb3JtQ29yZS50b3VjaGVkKSwgZXh0cmFUb3VjaGVkKSksIFtmb3JtQ29yZS50b3VjaGVkLCBleHRyYVRvdWNoZWRdKTtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBBc3luYyBmaWVsZCB2YWxpZGF0aW9uIOKAkyBlYWNoIHJ1bGUgaXMgcHJvY2Vzc2VkIGV4YWN0bHkgb25jZVxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IHZhbGlkYXRlRmllbGRBc3luYyA9IHVzZU1lbW9pemVkRm4oKG5hbWUsIHZhbHVlLCBydWxlcykgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGlmICghcnVsZXMgfHwgcnVsZXMubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuIHsgaXNWYWxpZDogdHJ1ZSwgZXJyb3I6IG51bGwgfTtcbiAgICAgICAgc2V0VmFsaWRhdGluZygocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW25hbWVdOiB0cnVlIH0pKSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvciA9IHlpZWxkIHJ1blJ1bGVzQXN5bmMobmFtZSwgdmFsdWUsIGZvcm1Db3JlLnZhbHVlcywgcnVsZXMpO1xuICAgICAgICAgICAgaWYgKGVycm9yICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihuYW1lLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgaXNWYWxpZDogZmFsc2UsIGVycm9yIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZm9ybUNvcmUuZXJyb3JzW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihuYW1lLCBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IHRydWUsIGVycm9yOiBudWxsIH07XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBzZXRWYWxpZGF0aW5nKChwcmV2KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3VmFsaWRhdGluZyA9IE9iamVjdC5hc3NpZ24oe30sIHByZXYpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdWYWxpZGF0aW5nW25hbWVdO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXdWYWxpZGF0aW5nO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KSk7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gQXN5bmMgZmllbGQgYmx1ciBoYW5kbGVyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgY29uc3QgaGFuZGxlRmllbGRCbHVyID0gdXNlRXZlbnRDYWxsYmFjaygobmFtZSkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHNldEV4dHJhVG91Y2hlZCgocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW25hbWVdOiB0cnVlIH0pKSk7XG4gICAgICAgIGNvbnN0IHJ1bGVzID0gZm9ybUNvcmUuZmllbGRSdWxlc1tuYW1lXTtcbiAgICAgICAgaWYgKHJ1bGVzICYmIHZhbGlkYXRlVHJpZ2dlciA9PT0gJ29uQmx1cicpIHtcbiAgICAgICAgICAgIHlpZWxkIHZhbGlkYXRlRmllbGRBc3luYyhuYW1lLCByZXNvbHZlVmFsdWUoZm9ybUNvcmUudmFsdWVzLCBuYW1lKSwgcnVsZXMpO1xuICAgICAgICB9XG4gICAgfSkpO1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIFZhbGlkYXRlIGFsbCBmaWVsZHMgYXN5bmNcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCB2YWxpZGF0ZUZpZWxkc0FzeW5jID0gdXNlTWVtb2l6ZWRGbigobmFtZUxpc3QpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBmaWVsZHNUb1ZhbGlkYXRlID0gbmFtZUxpc3QgfHwgT2JqZWN0LmtleXMoZm9ybUNvcmUuZmllbGRSdWxlcyk7XG4gICAgICAgIGxldCBoYXNFcnJvciA9IGZhbHNlO1xuICAgICAgICBjb25zdCBmaWVsZEVycm9ycyA9IHt9O1xuICAgICAgICBjb25zdCB2YWxpZGF0aW9uUHJvbWlzZXMgPSBmaWVsZHNUb1ZhbGlkYXRlLm1hcCgobmFtZSkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCBydWxlcyA9IGZvcm1Db3JlLmZpZWxkUnVsZXNbbmFtZV07XG4gICAgICAgICAgICBpZiAocnVsZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGlzVmFsaWQsIGVycm9yIH0gPSB5aWVsZCB2YWxpZGF0ZUZpZWxkQXN5bmMobmFtZSwgcmVzb2x2ZVZhbHVlKGZvcm1Db3JlLnZhbHVlcywgbmFtZSksIHJ1bGVzKTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWQgJiYgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBmaWVsZEVycm9yc1tuYW1lXSA9IGVycm9yO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuICAgICAgICB5aWVsZCBQcm9taXNlLmFsbCh2YWxpZGF0aW9uUHJvbWlzZXMpO1xuICAgICAgICBpZiAoaGFzRXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKCdWYWxpZGF0aW9uIGZhaWxlZCcpO1xuICAgICAgICAgICAgZXJyb3IudmFsdWVzID0gZm9ybUNvcmUudmFsdWVzO1xuICAgICAgICAgICAgZXJyb3IuZXJyb3JzID0gZmllbGRFcnJvcnM7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmFtZUxpc3QpIHtcbiAgICAgICAgICAgIHJldHVybiBuYW1lTGlzdC5yZWR1Y2UoKGFjYywgbmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgIGFjY1tuYW1lXSA9IHJlc29sdmVWYWx1ZShmb3JtQ29yZS52YWx1ZXMsIG5hbWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICB9LCB7fSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZvcm1Db3JlLnZhbHVlcztcbiAgICB9KSk7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gZGVmaW5lRmllbGQg4oCTIHVzZWQgYnkgc3RhbmRhbG9uZSAobm9uLVByb0Zvcm0pIGNvbnN1bWVyc1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IGRlZmluZUZpZWxkID0gdXNlQ2FsbGJhY2soKG5hbWUsIGZpZWxkT3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcnVsZXMgPSBbXSB9ID0gZmllbGRPcHRpb25zO1xuICAgICAgICBjb25zdCBGaWVsZENvbXBvbmVudCA9IG1lbW8oKF9hKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2I7XG4gICAgICAgICAgICB2YXIgeyBjaGlsZHJlbiwgcmVuZGVyIH0gPSBfYSwgcHJvcHMgPSBfX3Jlc3QoX2EsIFtcImNoaWxkcmVuXCIsIFwicmVuZGVyXCJdKTtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkVmFsdWUgPSAoX2IgPSBmb3JtQ29yZS52YWx1ZXNbbmFtZV0pICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xuICAgICAgICAgICAgY29uc3QgZmllbGRFcnJvciA9IGZvcm1Db3JlLmVycm9yc1tuYW1lXTtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkVG91Y2hlZCA9IGFsbFRvdWNoZWRbbmFtZV07XG4gICAgICAgICAgICBjb25zdCBmaWVsZFZhbGlkYXRpbmcgPSB2YWxpZGF0aW5nW25hbWVdO1xuICAgICAgICAgICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ1J1bGVzID0gZm9ybUNvcmUuZ2V0RmllbGRSdWxlcyhuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoIWV4aXN0aW5nUnVsZXMgJiYgcnVsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBmb3JtQ29yZS5yZWdpc3RlckZpZWxkKG5hbWUsIHJ1bGVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvcmUudW5yZWdpc3RlckZpZWxkKG5hbWUpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9LCBbXSk7IC8vIE9ubHkgcmVnaXN0ZXIgb24gbW91bnRcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZUZpZWxkQ2hhbmdlID0gdXNlRXZlbnRDYWxsYmFjaygodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZFZhbHVlKG5hbWUsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVUcmlnZ2VyID09PSAnb25DaGFuZ2UnKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db3JlLnZhbGlkYXRlRmllbGQobmFtZSwgcnVsZXMsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZUJsdXIgPSB1c2VFdmVudENhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgICAgICAgICBoYW5kbGVGaWVsZEJsdXIobmFtZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkUHJvcHMgPSBPYmplY3QuYXNzaWduKHsgbmFtZSwgdmFsdWU6IGZpZWxkVmFsdWUsIGVycm9yOiBmaWVsZEVycm9yLCB0b3VjaGVkOiBmaWVsZFRvdWNoZWQsIHZhbGlkYXRpbmc6IGZpZWxkVmFsaWRhdGluZywgb25DaGFuZ2U6IGhhbmRsZUZpZWxkQ2hhbmdlLCBvbkJsdXI6IGhhbmRsZUJsdXIgfSwgcHJvcHMpO1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlTWVyZ2VDaGFuZ2UgPSAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGUgJiYgdHlwZW9mIGUgPT09ICdvYmplY3QnICYmICd0YXJnZXQnIGluIGVcbiAgICAgICAgICAgICAgICAgICAgPyBlLnRhcmdldC52YWx1ZVxuICAgICAgICAgICAgICAgICAgICA6IGU7XG4gICAgICAgICAgICAgICAgaGFuZGxlRmllbGRDaGFuZ2UodmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmIChSZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZHJlbikgJiZcbiAgICAgICAgICAgICAgICAgICAgKChfYSA9IGNoaWxkcmVuLnByb3BzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub25DaGFuZ2UpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnByb3BzLm9uQ2hhbmdlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlTWVyZ2VCbHVyID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICBoYW5kbGVCbHVyKCk7XG4gICAgICAgICAgICAgICAgaWYgKFJlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSAmJlxuICAgICAgICAgICAgICAgICAgICAoKF9hID0gY2hpbGRyZW4ucHJvcHMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5vbkJsdXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnByb3BzLm9uQmx1cigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAocmVuZGVyICYmIHR5cGVvZiByZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyKGZpZWxkUHJvcHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBjaGlsZHJlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZHJlbihmaWVsZFByb3BzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChSZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZHJlbikpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtZXJnZWRQcm9wcyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZmllbGRQcm9wcyksIHsgb25DaGFuZ2U6IGhhbmRsZU1lcmdlQ2hhbmdlLCBvbkJsdXI6IGhhbmRsZU1lcmdlQmx1ciB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCBtZXJnZWRQcm9wcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChGcmFnbWVudCwgbnVsbCwgLi4uY2hpbGRyZW4ubWFwKChjaGlsZCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFJlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWVyZ2VkUHJvcHMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGZpZWxkUHJvcHMpLCB7IGtleTogY2hpbGQua2V5IHx8IGluZGV4LCBvbkNoYW5nZTogaGFuZGxlTWVyZ2VDaGFuZ2UsIG9uQmx1cjogaGFuZGxlTWVyZ2VCbHVyIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNsb25lRWxlbWVudChjaGlsZCwgbWVyZ2VkUHJvcHMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSk7XG4gICAgICAgIEZpZWxkQ29tcG9uZW50LmRpc3BsYXlOYW1lID0gYEZpZWxkKCR7bmFtZX0pYDtcbiAgICAgICAgcmV0dXJuIEZpZWxkQ29tcG9uZW50O1xuICAgIH0sIFtcbiAgICAgICAgZm9ybUNvcmUsXG4gICAgICAgIGFsbFRvdWNoZWQsXG4gICAgICAgIHZhbGlkYXRpbmcsXG4gICAgICAgIHZhbGlkYXRlVHJpZ2dlcixcbiAgICAgICAgaGFuZGxlRmllbGRCbHVyLFxuICAgIF0pO1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIGhhbmRsZVN1Ym1pdCAvIGhhbmRsZVJlc2V0IOKAkyBmb3IgPGZvcm0+IGV2ZW50IGhhbmRsZXJzXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgY29uc3QgaGFuZGxlU3VibWl0ID0gdXNlRXZlbnRDYWxsYmFjaygoZSkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGUgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgdmFsaWRhdGVkVmFsdWVzID0geWllbGQgdmFsaWRhdGVGaWVsZHNBc3luYygpO1xuICAgICAgICAgICAgb25GaW5pc2ggPT09IG51bGwgfHwgb25GaW5pc2ggPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRmluaXNoKHZhbGlkYXRlZFZhbHVlcyk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgY29uc3QgdHlwZWQgPSBlcnI7XG4gICAgICAgICAgICBvbkZpbmlzaEZhaWxlZCA9PT0gbnVsbCB8fCBvbkZpbmlzaEZhaWxlZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25GaW5pc2hGYWlsZWQoeyB2YWx1ZXM6IHR5cGVkLnZhbHVlcywgZXJyb3JzOiB0eXBlZC5lcnJvcnMgfSk7XG4gICAgICAgIH1cbiAgICB9KSk7XG4gICAgY29uc3QgaGFuZGxlUmVzZXQgPSB1c2VFdmVudENhbGxiYWNrKChlKSA9PiB7XG4gICAgICAgIGUgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBmb3JtQ29yZS5yZXNldEZpZWxkcygpO1xuICAgICAgICBzZXRFeHRyYVRvdWNoZWQoe30pO1xuICAgICAgICBzZXRWYWxpZGF0aW5nKHt9KTtcbiAgICAgICAgb25SZXNldCA9PT0gbnVsbCB8fCBvblJlc2V0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvblJlc2V0KCk7XG4gICAgfSk7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gRm9ybUluc3RhbmNlIOKAkyBlbmhhbmNlZCBBUEkgZm9yIGNvbnN1bWVyc1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IGZvcm1JbnN0YW5jZSA9IHVzZU1lbW8oKCkgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZm9ybUNvcmUuZm9ybUluc3RhbmNlKSwgeyB2YWxpZGF0ZUZpZWxkczogdmFsaWRhdGVGaWVsZHNBc3luYywgc2V0RmllbGRWYWx1ZTogZm9ybUNvcmUuc2V0RmllbGRWYWx1ZSwgZ2V0RmllbGRFcnJvcjogKG5hbWUpID0+IGZvcm1Db3JlLmVycm9yc1tuYW1lXSwgZ2V0RmllbGRzRXJyb3I6IChuYW1lTGlzdCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFuYW1lTGlzdClcbiAgICAgICAgICAgICAgICByZXR1cm4gZm9ybUNvcmUuZXJyb3JzO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgICAgICAgICBuYW1lTGlzdC5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGZvcm1Db3JlLmVycm9yc1tuYW1lXSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRbbmFtZV0gPSBmb3JtQ29yZS5lcnJvcnNbbmFtZV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9LCBpc0ZpZWxkVG91Y2hlZDogKG5hbWUpID0+IGFsbFRvdWNoZWRbbmFtZV0gfHwgZmFsc2UsIGlzRmllbGRzVG91Y2hlZDogKG5hbWVMaXN0LCBhbGxGaWVsZHNUb3VjaGVkID0gZmFsc2UpID0+IHtcbiAgICAgICAgICAgIGlmICghbmFtZUxpc3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoYWxsVG91Y2hlZCkuc29tZSgoa2V5KSA9PiBhbGxUb3VjaGVkW2tleV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFsbEZpZWxkc1RvdWNoZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmFtZUxpc3QuZXZlcnkoKG5hbWUpID0+IGFsbFRvdWNoZWRbbmFtZV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5hbWVMaXN0LnNvbWUoKG5hbWUpID0+IGFsbFRvdWNoZWRbbmFtZV0pO1xuICAgICAgICB9LCBpc0ZpZWxkVmFsaWRhdGluZzogKG5hbWUpID0+IHZhbGlkYXRpbmdbbmFtZV0gfHwgZmFsc2UsIHNldEZpZWxkRXJyb3I6IGZvcm1Db3JlLnNldEZpZWxkRXJyb3IsIHNldEZpZWxkc0Vycm9yOiAoZmllbGRzRXJyb3IpID0+IHtcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGZpZWxkc0Vycm9yKS5mb3JFYWNoKChbbmFtZSwgZXJyb3JdKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihuYW1lLCBlcnJvcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgc2V0RmllbGRUb3VjaGVkOiAobmFtZSwgaXNUb3VjaGVkID0gdHJ1ZSkgPT4ge1xuICAgICAgICAgICAgc2V0RXh0cmFUb3VjaGVkKChwcmV2KSA9PiAoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwcmV2KSwgeyBbbmFtZV06IGlzVG91Y2hlZCB9KSkpO1xuICAgICAgICB9LCBzZXRGaWVsZHNUb3VjaGVkOiAoZmllbGRzVG91Y2gpID0+IHtcbiAgICAgICAgICAgIHNldEV4dHJhVG91Y2hlZCgocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIGZpZWxkc1RvdWNoKSkpO1xuICAgICAgICB9LCByZXNldEZpZWxkczogKGZpZWxkcykgPT4ge1xuICAgICAgICAgICAgaWYgKCFmaWVsZHMpIHtcbiAgICAgICAgICAgICAgICBmb3JtQ29yZS5yZXNldEZpZWxkcygpO1xuICAgICAgICAgICAgICAgIHNldEV4dHJhVG91Y2hlZCh7fSk7XG4gICAgICAgICAgICAgICAgc2V0VmFsaWRhdGluZyh7fSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXNldFZhbHVlcyA9IHt9O1xuICAgICAgICAgICAgICAgIGZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgICAgIHJlc2V0VmFsdWVzW2ZpZWxkXSA9ICgoX2EgPSBjb25maWcuaW5pdGlhbFZhbHVlcykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoge30pW2ZpZWxkXTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZHNWYWx1ZShyZXNldFZhbHVlcyk7XG4gICAgICAgICAgICAgICAgc2V0RXh0cmFUb3VjaGVkKChwcmV2KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1RvdWNoZWQgPSBPYmplY3QuYXNzaWduKHt9LCBwcmV2KTtcbiAgICAgICAgICAgICAgICAgICAgZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgbmV3VG91Y2hlZFtmaWVsZF07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3VG91Y2hlZDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBzZXRWYWxpZGF0aW5nKChwcmV2KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZhbGlkYXRpbmcgPSBPYmplY3QuYXNzaWduKHt9LCBwcmV2KTtcbiAgICAgICAgICAgICAgICAgICAgZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgbmV3VmFsaWRhdGluZ1tmaWVsZF07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3VmFsaWRhdGluZztcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBmaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihmaWVsZCwgbnVsbCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHN1Ym1pdDogKGNhbGxiYWNrKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsaWRhdGVkVmFsdWVzID0geWllbGQgdmFsaWRhdGVGaWVsZHNBc3luYygpO1xuICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCBjYWxsYmFjayh2YWxpZGF0ZWRWYWx1ZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsaWRhdGVkVmFsdWVzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSksIGRlZmluZUZpZWxkLCByZWdpc3RlckZpZWxkOiBmb3JtQ29yZS5yZWdpc3RlckZpZWxkLCB1bnJlZ2lzdGVyRmllbGQ6IGZvcm1Db3JlLnVucmVnaXN0ZXJGaWVsZCB9KSksIFtcbiAgICAgICAgZm9ybUNvcmUsXG4gICAgICAgIGFsbFRvdWNoZWQsXG4gICAgICAgIHZhbGlkYXRpbmcsXG4gICAgICAgIHZhbGlkYXRlRmllbGRzQXN5bmMsXG4gICAgICAgIGRlZmluZUZpZWxkLFxuICAgICAgICBjb25maWcuaW5pdGlhbFZhbHVlcyxcbiAgICAgICAgc2V0VmFsaWRhdGluZyxcbiAgICBdKTtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBJbnRlcm5hbHMg4oCTIGV4cG9zZWQgZm9yIFByb0Zvcm0gaW50ZWdyYXRpb25cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCBpbnRlcm5hbHMgPSB1c2VNZW1vKCgpID0+ICh7XG4gICAgICAgIHZhbHVlczogZm9ybUNvcmUudmFsdWVzLFxuICAgICAgICBlcnJvcnM6IGZvcm1Db3JlLmVycm9ycyxcbiAgICAgICAgdG91Y2hlZDogYWxsVG91Y2hlZCxcbiAgICAgICAgdmFsaWRhdGluZyxcbiAgICAgICAgZmllbGRSdWxlczogZm9ybUNvcmUuZmllbGRSdWxlcyxcbiAgICAgICAgc2V0RmllbGRWYWx1ZTogZm9ybUNvcmUuc2V0RmllbGRWYWx1ZSxcbiAgICAgICAgc2V0RmllbGRFcnJvcjogZm9ybUNvcmUuc2V0RmllbGRFcnJvcixcbiAgICAgICAgdmFsaWRhdGVGaWVsZDogZm9ybUNvcmUudmFsaWRhdGVGaWVsZCxcbiAgICAgICAgdmFsaWRhdGVGaWVsZEFzeW5jLFxuICAgICAgICByZWdpc3RlckZpZWxkOiBmb3JtQ29yZS5yZWdpc3RlckZpZWxkLFxuICAgICAgICB1bnJlZ2lzdGVyRmllbGQ6IGZvcm1Db3JlLnVucmVnaXN0ZXJGaWVsZCxcbiAgICAgICAgaGFuZGxlU3VibWl0LFxuICAgICAgICBoYW5kbGVSZXNldCxcbiAgICB9KSwgW1xuICAgICAgICBmb3JtQ29yZS52YWx1ZXMsXG4gICAgICAgIGZvcm1Db3JlLmVycm9ycyxcbiAgICAgICAgYWxsVG91Y2hlZCxcbiAgICAgICAgdmFsaWRhdGluZyxcbiAgICAgICAgZm9ybUNvcmUuZmllbGRSdWxlcyxcbiAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRWYWx1ZSxcbiAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcixcbiAgICAgICAgZm9ybUNvcmUudmFsaWRhdGVGaWVsZCxcbiAgICAgICAgdmFsaWRhdGVGaWVsZEFzeW5jLFxuICAgICAgICBmb3JtQ29yZS5yZWdpc3RlckZpZWxkLFxuICAgICAgICBmb3JtQ29yZS51bnJlZ2lzdGVyRmllbGQsXG4gICAgICAgIGhhbmRsZVN1Ym1pdCxcbiAgICAgICAgaGFuZGxlUmVzZXQsXG4gICAgXSk7XG4gICAgcmV0dXJuIHsgZm9ybUluc3RhbmNlLCBpbnRlcm5hbHMgfTtcbn07XG5leHBvcnQgZGVmYXVsdCB1c2VGb3JtOyIsbnVsbF0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==
531
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL2hvb2tzL3VzZUZvcm0uanMiLCJjb21wb25lbnRzL1Byb0Zvcm0vY29yZS9zcmMvY29tcG9uZW50cy9Qcm9Gb3JtL2NvcmUvaG9va3MvdXNlRm9ybS50cyJdLCJuYW1lcyI6WyJfX2F3YWl0ZXIiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsIlAiLCJnZW5lcmF0b3IiLCJhZG9wdCIsInZhbHVlIiwicmVzb2x2ZSIsIlByb21pc2UiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJzdGVwIiwibmV4dCIsImUiLCJyZWplY3RlZCIsInJlc3VsdCIsImRvbmUiLCJ0aGVuIiwiYXBwbHkiLCJfX3Jlc3QiLCJzIiwidCIsInAiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpbmRleE9mIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiaSIsImxlbmd0aCIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwidXNlU3RhdGUiLCJ1c2VNZW1vIiwidXNlRWZmZWN0IiwibWVtbyIsIkZyYWdtZW50IiwiUmVhY3QiLCJ1c2VFdmVudENhbGxiYWNrIiwidXNlTWVtb2l6ZWRGbiIsInVzZVNhZmVTdGF0ZSIsInVzZUZvcm1Db3JlIiwicmVzb2x2ZVZhbHVlIiwicnVuUnVsZXNBc3luYyIsInVzZUZvcm0iLCJjb25maWciLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJvbkZpbmlzaCIsIm9uRmluaXNoRmFpbGVkIiwib25SZXNldCIsIl9jb25maWckdmFsaWRhdGVUcmlnZyIsInZhbGlkYXRlVHJpZ2dlciIsImZvcm1Db3JlIiwiX3VzZVNhZmVTdGF0ZSIsIl91c2VTYWZlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJ2YWxpZGF0aW5nIiwic2V0VmFsaWRhdGluZyIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJleHRyYVRvdWNoZWQiLCJzZXRFeHRyYVRvdWNoZWQiLCJhbGxUb3VjaGVkIiwiYXNzaWduIiwidG91Y2hlZCIsInZhbGlkYXRlRmllbGRBc3luYyIsIm5hbWUiLCJydWxlcyIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsIl95aWVsZCRydW5SdWxlc0FzeW5jIiwiZXJyb3IiLCJ3YXJuaW5nIiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsImFicnVwdCIsImlzVmFsaWQiLCJfZGVmaW5lUHJvcGVydHkiLCJnZXRGaWVsZHNWYWx1ZSIsInNlbnQiLCJzZXRGaWVsZFdhcm5pbmciLCJzZXRGaWVsZEVycm9yIiwiZXJyb3JzIiwibmV3VmFsaWRhdGluZyIsImZpbmlzaCIsInN0b3AiLCJoYW5kbGVGaWVsZEJsdXIiLCJfY2FsbGVlMiIsIl9jb250ZXh0MiIsImdldEZpZWxkUnVsZXMiLCJ2YWxpZGF0ZUZpZWxkc0FzeW5jIiwibmFtZUxpc3QiLCJfY2FsbGVlNCIsImZpZWxkc1RvVmFsaWRhdGUiLCJoYXNFcnJvciIsImZpZWxkRXJyb3JzIiwidmFsaWRhdGlvblByb21pc2VzIiwiX2NvbnRleHQ0Iiwia2V5cyIsImZpZWxkUnVsZXMiLCJtYXAiLCJfY2FsbGVlMyIsIl95aWVsZCR2YWxpZGF0ZUZpZWxkQSIsIl9jb250ZXh0MyIsImFsbCIsIkVycm9yIiwidmFsdWVzIiwicmVkdWNlIiwiYWNjIiwiZGVmaW5lRmllbGQiLCJmaWVsZE9wdGlvbnMiLCJfZmllbGRPcHRpb25zJHJ1bGVzIiwiRmllbGRDb21wb25lbnQiLCJfYSIsIl9iIiwiY2hpbGRyZW4iLCJyZW5kZXIiLCJwcm9wcyIsImZpZWxkVmFsdWUiLCJmaWVsZEVycm9yIiwiZmllbGRUb3VjaGVkIiwiZmllbGRWYWxpZGF0aW5nIiwiZXhpc3RpbmdSdWxlcyIsInJlZ2lzdGVyRmllbGQiLCJ1bnJlZ2lzdGVyRmllbGQiLCJoYW5kbGVGaWVsZENoYW5nZSIsInNldEZpZWxkVmFsdWUiLCJ2YWxpZGF0ZUZpZWxkIiwiaGFuZGxlQmx1ciIsImZpZWxkUHJvcHMiLCJvbkNoYW5nZSIsIm9uQmx1ciIsImhhbmRsZU1lcmdlQ2hhbmdlIiwiX3R5cGVvZiIsInRhcmdldCIsImlzVmFsaWRFbGVtZW50IiwiaGFuZGxlTWVyZ2VCbHVyIiwibWVyZ2VkUHJvcHMiLCJjbG9uZUVsZW1lbnQiLCJBcnJheSIsImlzQXJyYXkiLCJjcmVhdGVFbGVtZW50IiwiY29uY2F0IiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiY2hpbGQiLCJpbmRleCIsImtleSIsImRpc3BsYXlOYW1lIiwiaGFuZGxlU3VibWl0IiwiX2NhbGxlZTUiLCJ2YWxpZGF0ZWRWYWx1ZXMiLCJ0eXBlZCIsIl90IiwiX2NvbnRleHQ1IiwicHJldmVudERlZmF1bHQiLCJoYW5kbGVSZXNldCIsInJlc2V0RmllbGRzIiwiZ2V0RmllbGRFcnJvciIsImdldEZpZWxkV2FybmluZyIsIndhcm5pbmdzIiwiZ2V0RmllbGRzRXJyb3IiLCJmb3JFYWNoIiwiaXNGaWVsZFRvdWNoZWQiLCJpc0ZpZWxkc1RvdWNoZWQiLCJhbGxGaWVsZHNUb3VjaGVkIiwic29tZSIsImV2ZXJ5IiwiaXNGaWVsZFZhbGlkYXRpbmciLCJzZXRGaWVsZHNFcnJvciIsImZpZWxkc0Vycm9yIiwiZW50cmllcyIsIl9yZWYiLCJfcmVmMiIsInNldEZpZWxkVG91Y2hlZCIsImlzVG91Y2hlZCIsInNldEZpZWxkc1RvdWNoZWQiLCJmaWVsZHNUb3VjaCIsInJlc2V0Rm9ybUZpZWxkcyIsImZpZWxkcyIsInJlc2V0VmFsdWVzIiwiZmllbGQiLCJpbml0aWFsVmFsdWVzIiwic2V0RmllbGRzVmFsdWUiLCJuZXdUb3VjaGVkIiwic3VibWl0V2l0aFZhbGlkYXRpb24iLCJjYWxsYmFjayIsIl9jYWxsZWU2IiwiX3QyIiwiX2NvbnRleHQ2IiwiZm9ybUluc3RhbmNlIiwidmFsaWRhdGVGaWVsZHMiLCJzdWJtaXQiLCJpbnRlcm5hbHMiXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsSUFBSUEsU0FBUyxHQUFJLElBQUksSUFBSSxJQUFJLENBQUNBLFNBQVMsSUFBSyxVQUFVQyxPQUFPLEVBQUVDLFVBQVUsRUFBRUMsQ0FBQyxF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WTtJQUFFRyxTQUFTLEVBQVRBO0VBQVMsQ0FBRTtBQUNwQyxDQUFDO0FBRUQsZUFBZXZKLE9BQU8iLCJmaWxlIjoiY29tcG9uZW50cy9Qcm9Gb3JtL2NvcmUvaG9va3MvdXNlRm9ybS5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9fcmVzdCA9ICh0aGlzICYmIHRoaXMuX19yZXN0KSB8fCBmdW5jdGlvbiAocywgZSkge1xuICAgIHZhciB0ID0ge307XG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXG4gICAgICAgIHRbcF0gPSBzW3BdO1xuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xuICAgICAgICB9XG4gICAgcmV0dXJuIHQ7XG59O1xuaW1wb3J0IHsgdXNlU3RhdGUsIHVzZU1lbW8sIHVzZUVmZmVjdCwgbWVtbywgRnJhZ21lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHVzZUV2ZW50Q2FsbGJhY2sgZnJvbSAnQDFtb25leS9ob29rcy91c2VFdmVudENhbGxiYWNrJztcbmltcG9ydCB1c2VNZW1vaXplZEZuIGZyb20gJ0AxbW9uZXkvaG9va3MvdXNlTWVtb2l6ZWRGbic7XG5pbXBvcnQgdXNlU2FmZVN0YXRlIGZyb20gJ0AxbW9uZXkvaG9va3MvdXNlU2FmZVN0YXRlJztcbmltcG9ydCB7IHVzZUZvcm1Db3JlIH0gZnJvbSAnLi91c2VGb3JtQ29yZSc7XG5pbXBvcnQgeyByZXNvbHZlVmFsdWUgfSBmcm9tICcuLi9wYXRoVXRpbHMnO1xuaW1wb3J0IHsgcnVuUnVsZXNBc3luYyB9IGZyb20gJy4uL3J1blJ1bGVzJztcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gdXNlRm9ybVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5leHBvcnQgY29uc3QgdXNlRm9ybSA9IChjb25maWcgPSB7fSkgPT4ge1xuICAgIGNvbnN0IHsgb25GaW5pc2gsIG9uRmluaXNoRmFpbGVkLCBvblJlc2V0LCB2YWxpZGF0ZVRyaWdnZXIgPSAnb25DaGFuZ2UnLCB9ID0gY29uZmlnO1xuICAgIGNvbnN0IGZvcm1Db3JlID0gdXNlRm9ybUNvcmUoY29uZmlnKTtcbiAgICBjb25zdCBbdmFsaWRhdGluZywgc2V0VmFsaWRhdGluZ10gPSB1c2VTYWZlU3RhdGUoe30pO1xuICAgIGNvbnN0IFtleHRyYVRvdWNoZWQsIHNldEV4dHJhVG91Y2hlZF0gPSB1c2VTdGF0ZSh7fSk7XG4gICAgY29uc3QgYWxsVG91Y2hlZCA9IHVzZU1lbW8oKCkgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZm9ybUNvcmUudG91Y2hlZCksIGV4dHJhVG91Y2hlZCkpLCBbZm9ybUNvcmUudG91Y2hlZCwgZXh0cmFUb3VjaGVkXSk7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gQXN5bmMgZmllbGQgdmFsaWRhdGlvbiDigJMgZWFjaCBydWxlIGlzIHByb2Nlc3NlZCBleGFjdGx5IG9uY2VcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCB2YWxpZGF0ZUZpZWxkQXN5bmMgPSB1c2VNZW1vaXplZEZuKChuYW1lLCB2YWx1ZSwgcnVsZXMpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBpZiAoIXJ1bGVzIHx8IHJ1bGVzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IHRydWUsIGVycm9yOiBudWxsIH07XG4gICAgICAgIHNldFZhbGlkYXRpbmcoKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFtuYW1lXTogdHJ1ZSB9KSkpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgeyBlcnJvciwgd2FybmluZyB9ID0geWllbGQgcnVuUnVsZXNBc3luYyhuYW1lLCB2YWx1ZSwgZm9ybUNvcmUuZ2V0RmllbGRzVmFsdWUoKSwgcnVsZXMpO1xuICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRXYXJuaW5nKG5hbWUsIHdhcm5pbmcpO1xuICAgICAgICAgICAgaWYgKGVycm9yICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihuYW1lLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgaXNWYWxpZDogZmFsc2UsIGVycm9yIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZm9ybUNvcmUuZXJyb3JzW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihuYW1lLCBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IHRydWUsIGVycm9yOiBudWxsIH07XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBzZXRWYWxpZGF0aW5nKChwcmV2KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3VmFsaWRhdGluZyA9IE9iamVjdC5hc3NpZ24oe30sIHByZXYpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdWYWxpZGF0aW5nW25hbWVdO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXdWYWxpZGF0aW5nO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KSk7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gQXN5bmMgZmllbGQgYmx1ciBoYW5kbGVyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgY29uc3QgaGFuZGxlRmllbGRCbHVyID0gdXNlRXZlbnRDYWxsYmFjaygobmFtZSkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHNldEV4dHJhVG91Y2hlZCgocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW25hbWVdOiB0cnVlIH0pKSk7XG4gICAgICAgIGNvbnN0IHJ1bGVzID0gZm9ybUNvcmUuZ2V0RmllbGRSdWxlcyhuYW1lKTtcbiAgICAgICAgaWYgKHJ1bGVzICYmIHZhbGlkYXRlVHJpZ2dlciA9PT0gJ29uQmx1cicpIHtcbiAgICAgICAgICAgIHlpZWxkIHZhbGlkYXRlRmllbGRBc3luYyhuYW1lLCByZXNvbHZlVmFsdWUoZm9ybUNvcmUuZ2V0RmllbGRzVmFsdWUoKSwgbmFtZSksIHJ1bGVzKTtcbiAgICAgICAgfVxuICAgIH0pKTtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBWYWxpZGF0ZSBhbGwgZmllbGRzIGFzeW5jXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgY29uc3QgdmFsaWRhdGVGaWVsZHNBc3luYyA9IHVzZU1lbW9pemVkRm4oKG5hbWVMaXN0KSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZmllbGRzVG9WYWxpZGF0ZSA9IG5hbWVMaXN0IHx8IE9iamVjdC5rZXlzKGZvcm1Db3JlLmZpZWxkUnVsZXMpO1xuICAgICAgICBsZXQgaGFzRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgZmllbGRFcnJvcnMgPSB7fTtcbiAgICAgICAgY29uc3QgdmFsaWRhdGlvblByb21pc2VzID0gZmllbGRzVG9WYWxpZGF0ZS5tYXAoKG5hbWUpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgY29uc3QgcnVsZXMgPSBmb3JtQ29yZS5maWVsZFJ1bGVzW25hbWVdO1xuICAgICAgICAgICAgaWYgKHJ1bGVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBpc1ZhbGlkLCBlcnJvciB9ID0geWllbGQgdmFsaWRhdGVGaWVsZEFzeW5jKG5hbWUsIHJlc29sdmVWYWx1ZShmb3JtQ29yZS5nZXRGaWVsZHNWYWx1ZSgpLCBuYW1lKSwgcnVsZXMpO1xuICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZCAmJiBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBoYXNFcnJvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkRXJyb3JzW25hbWVdID0gZXJyb3I7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KSk7XG4gICAgICAgIHlpZWxkIFByb21pc2UuYWxsKHZhbGlkYXRpb25Qcm9taXNlcyk7XG4gICAgICAgIGlmIChoYXNFcnJvcikge1xuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoJ1ZhbGlkYXRpb24gZmFpbGVkJyk7XG4gICAgICAgICAgICBlcnJvci52YWx1ZXMgPSBmb3JtQ29yZS5nZXRGaWVsZHNWYWx1ZSgpO1xuICAgICAgICAgICAgZXJyb3IuZXJyb3JzID0gZmllbGRFcnJvcnM7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmFtZUxpc3QpIHtcbiAgICAgICAgICAgIHJldHVybiBuYW1lTGlzdC5yZWR1Y2UoKGFjYywgbmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgIGFjY1tuYW1lXSA9IHJlc29sdmVWYWx1ZShmb3JtQ29yZS5nZXRGaWVsZHNWYWx1ZSgpLCBuYW1lKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgfSwge30pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmb3JtQ29yZS5nZXRGaWVsZHNWYWx1ZSgpO1xuICAgIH0pKTtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBkZWZpbmVGaWVsZCDigJMgdXNlZCBieSBzdGFuZGFsb25lIChub24tUHJvRm9ybSkgY29uc3VtZXJzXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgY29uc3QgZGVmaW5lRmllbGQgPSB1c2VNZW1vaXplZEZuKChuYW1lLCBmaWVsZE9wdGlvbnMgPSB7fSkgPT4ge1xuICAgICAgICBjb25zdCB7IHJ1bGVzID0gW10gfSA9IGZpZWxkT3B0aW9ucztcbiAgICAgICAgY29uc3QgRmllbGRDb21wb25lbnQgPSBtZW1vKChfYSkgPT4ge1xuICAgICAgICAgICAgdmFyIF9iO1xuICAgICAgICAgICAgdmFyIHsgY2hpbGRyZW4sIHJlbmRlciB9ID0gX2EsIHByb3BzID0gX19yZXN0KF9hLCBbXCJjaGlsZHJlblwiLCBcInJlbmRlclwiXSk7XG4gICAgICAgICAgICBjb25zdCBmaWVsZFZhbHVlID0gKF9iID0gZm9ybUNvcmUudmFsdWVzW25hbWVdKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkRXJyb3IgPSBmb3JtQ29yZS5lcnJvcnNbbmFtZV07XG4gICAgICAgICAgICBjb25zdCBmaWVsZFRvdWNoZWQgPSBhbGxUb3VjaGVkW25hbWVdO1xuICAgICAgICAgICAgY29uc3QgZmllbGRWYWxpZGF0aW5nID0gdmFsaWRhdGluZ1tuYW1lXTtcbiAgICAgICAgICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdSdWxlcyA9IGZvcm1Db3JlLmdldEZpZWxkUnVsZXMobmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFleGlzdGluZ1J1bGVzICYmIHJ1bGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvcmUucmVnaXN0ZXJGaWVsZChuYW1lLCBydWxlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db3JlLnVucmVnaXN0ZXJGaWVsZChuYW1lKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSwgW10pOyAvLyBPbmx5IHJlZ2lzdGVyIG9uIG1vdW50XG4gICAgICAgICAgICBjb25zdCBoYW5kbGVGaWVsZENoYW5nZSA9IHVzZUV2ZW50Q2FsbGJhY2soKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRWYWx1ZShuYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlVHJpZ2dlciA9PT0gJ29uQ2hhbmdlJykge1xuICAgICAgICAgICAgICAgICAgICBmb3JtQ29yZS52YWxpZGF0ZUZpZWxkKG5hbWUsIHJ1bGVzLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBoYW5kbGVCbHVyID0gdXNlRXZlbnRDYWxsYmFjaygoKSA9PiB7XG4gICAgICAgICAgICAgICAgaGFuZGxlRmllbGRCbHVyKG5hbWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBmaWVsZFByb3BzID0gT2JqZWN0LmFzc2lnbih7IG5hbWUsIHZhbHVlOiBmaWVsZFZhbHVlLCBlcnJvcjogZmllbGRFcnJvciwgdG91Y2hlZDogZmllbGRUb3VjaGVkLCB2YWxpZGF0aW5nOiBmaWVsZFZhbGlkYXRpbmcsIG9uQ2hhbmdlOiBoYW5kbGVGaWVsZENoYW5nZSwgb25CbHVyOiBoYW5kbGVCbHVyIH0sIHByb3BzKTtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZU1lcmdlQ2hhbmdlID0gKGUpID0+IHtcbiAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBlICYmIHR5cGVvZiBlID09PSAnb2JqZWN0JyAmJiAndGFyZ2V0JyBpbiBlXG4gICAgICAgICAgICAgICAgICAgID8gZS50YXJnZXQudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgOiBlO1xuICAgICAgICAgICAgICAgIGhhbmRsZUZpZWxkQ2hhbmdlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAoUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pICYmXG4gICAgICAgICAgICAgICAgICAgICgoX2EgPSBjaGlsZHJlbi5wcm9wcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm9uQ2hhbmdlKSkge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbi5wcm9wcy5vbkNoYW5nZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZU1lcmdlQmx1ciA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgaGFuZGxlQmx1cigpO1xuICAgICAgICAgICAgICAgIGlmIChSZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZHJlbikgJiZcbiAgICAgICAgICAgICAgICAgICAgKChfYSA9IGNoaWxkcmVuLnByb3BzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub25CbHVyKSkge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbi5wcm9wcy5vbkJsdXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHJlbmRlciAmJiB0eXBlb2YgcmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlcihmaWVsZFByb3BzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgY2hpbGRyZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGRyZW4oZmllbGRQcm9wcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWVyZ2VkUHJvcHMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGZpZWxkUHJvcHMpLCB7IG9uQ2hhbmdlOiBoYW5kbGVNZXJnZUNoYW5nZSwgb25CbHVyOiBoYW5kbGVNZXJnZUJsdXIgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNsb25lRWxlbWVudChjaGlsZHJlbiwgbWVyZ2VkUHJvcHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoRnJhZ21lbnQsIG51bGwsIC4uLmNoaWxkcmVuLm1hcCgoY2hpbGQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChSZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1lcmdlZFByb3BzID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBmaWVsZFByb3BzKSwgeyBrZXk6IGNoaWxkLmtleSB8fCBpbmRleCwgb25DaGFuZ2U6IGhhbmRsZU1lcmdlQ2hhbmdlLCBvbkJsdXI6IGhhbmRsZU1lcmdlQmx1ciB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGQsIG1lcmdlZFByb3BzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0pO1xuICAgICAgICBGaWVsZENvbXBvbmVudC5kaXNwbGF5TmFtZSA9IGBGaWVsZCgke25hbWV9KWA7XG4gICAgICAgIHJldHVybiBGaWVsZENvbXBvbmVudDtcbiAgICB9KTtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBoYW5kbGVTdWJtaXQgLyBoYW5kbGVSZXNldCDigJMgZm9yIDxmb3JtPiBldmVudCBoYW5kbGVyc1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IGhhbmRsZVN1Ym1pdCA9IHVzZUV2ZW50Q2FsbGJhY2soKGUpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBlID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRlZFZhbHVlcyA9IHlpZWxkIHZhbGlkYXRlRmllbGRzQXN5bmMoKTtcbiAgICAgICAgICAgIG9uRmluaXNoID09PSBudWxsIHx8IG9uRmluaXNoID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkZpbmlzaCh2YWxpZGF0ZWRWYWx1ZXMpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGNvbnN0IHR5cGVkID0gZXJyO1xuICAgICAgICAgICAgb25GaW5pc2hGYWlsZWQgPT09IG51bGwgfHwgb25GaW5pc2hGYWlsZWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRmluaXNoRmFpbGVkKHsgdmFsdWVzOiB0eXBlZC52YWx1ZXMsIGVycm9yczogdHlwZWQuZXJyb3JzIH0pO1xuICAgICAgICB9XG4gICAgfSkpO1xuICAgIGNvbnN0IGhhbmRsZVJlc2V0ID0gdXNlRXZlbnRDYWxsYmFjaygoZSkgPT4ge1xuICAgICAgICBlID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZm9ybUNvcmUucmVzZXRGaWVsZHMoKTtcbiAgICAgICAgc2V0RXh0cmFUb3VjaGVkKHt9KTtcbiAgICAgICAgc2V0VmFsaWRhdGluZyh7fSk7XG4gICAgICAgIG9uUmVzZXQgPT09IG51bGwgfHwgb25SZXNldCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25SZXNldCgpO1xuICAgIH0pO1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIEZvcm1JbnN0YW5jZSDigJMgZW5oYW5jZWQgQVBJIGZvciBjb25zdW1lcnMuXG4gICAgLy9cbiAgICAvLyBFdmVyeSBtZXRob2QgaXMgd3JhcHBlZCBpbiB1c2VNZW1vaXplZEZuIChzdGFibGUgaWRlbnRpdHksIGFsd2F5cyByZWFkcyB0aGVcbiAgICAvLyBsYXRlc3QgcmVuZGVyJ3Mgc3RhdGUpIHNvIHRoZSBpbnN0YW5jZSBvYmplY3QgaXRzZWxmIGlzIElERU5USVRZLVNUQUJMRSBmb3JcbiAgICAvLyB0aGUgbGlmZXRpbWUgb2YgdGhlIGZvcm0g4oCUIHRoaXMgaXMgd2hhdCBsZXRzIFByb0Zvcm0gcHVibGlzaCBpdCB0aHJvdWdoIHRoZVxuICAgIC8vIHN0YWJsZSBjb250ZXh0IHdpdGhvdXQgcmUtcmVuZGVyaW5nIHN1YnNjcmliZXJzIG9uIGVhY2gga2V5c3Ryb2tlLlxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IGdldEZpZWxkRXJyb3IgPSB1c2VNZW1vaXplZEZuKChuYW1lKSA9PiBmb3JtQ29yZS5lcnJvcnNbbmFtZV0pO1xuICAgIGNvbnN0IGdldEZpZWxkV2FybmluZyA9IHVzZU1lbW9pemVkRm4oKG5hbWUpID0+IGZvcm1Db3JlLndhcm5pbmdzW25hbWVdKTtcbiAgICBjb25zdCBnZXRGaWVsZHNFcnJvciA9IHVzZU1lbW9pemVkRm4oKG5hbWVMaXN0KSA9PiB7XG4gICAgICAgIGlmICghbmFtZUxpc3QpXG4gICAgICAgICAgICByZXR1cm4gZm9ybUNvcmUuZXJyb3JzO1xuICAgICAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICAgICAgbmFtZUxpc3QuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgICAgICAgICAgaWYgKGZvcm1Db3JlLmVycm9yc1tuYW1lXSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdFtuYW1lXSA9IGZvcm1Db3JlLmVycm9yc1tuYW1lXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSk7XG4gICAgY29uc3QgaXNGaWVsZFRvdWNoZWQgPSB1c2VNZW1vaXplZEZuKChuYW1lKSA9PiBhbGxUb3VjaGVkW25hbWVdIHx8IGZhbHNlKTtcbiAgICBjb25zdCBpc0ZpZWxkc1RvdWNoZWQgPSB1c2VNZW1vaXplZEZuKChuYW1lTGlzdCwgYWxsRmllbGRzVG91Y2hlZCA9IGZhbHNlKSA9PiB7XG4gICAgICAgIGlmICghbmFtZUxpc3QpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhhbGxUb3VjaGVkKS5zb21lKChrZXkpID0+IGFsbFRvdWNoZWRba2V5XSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFsbEZpZWxkc1RvdWNoZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBuYW1lTGlzdC5ldmVyeSgobmFtZSkgPT4gYWxsVG91Y2hlZFtuYW1lXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5hbWVMaXN0LnNvbWUoKG5hbWUpID0+IGFsbFRvdWNoZWRbbmFtZV0pO1xuICAgIH0pO1xuICAgIGNvbnN0IGlzRmllbGRWYWxpZGF0aW5nID0gdXNlTWVtb2l6ZWRGbigobmFtZSkgPT4gdmFsaWRhdGluZ1tuYW1lXSB8fCBmYWxzZSk7XG4gICAgY29uc3Qgc2V0RmllbGRzRXJyb3IgPSB1c2VNZW1vaXplZEZuKChmaWVsZHNFcnJvcikgPT4ge1xuICAgICAgICBPYmplY3QuZW50cmllcyhmaWVsZHNFcnJvcikuZm9yRWFjaCgoW25hbWUsIGVycm9yXSkgPT4ge1xuICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihuYW1lLCBlcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIGNvbnN0IHNldEZpZWxkVG91Y2hlZCA9IHVzZU1lbW9pemVkRm4oKG5hbWUsIGlzVG91Y2hlZCA9IHRydWUpID0+IHtcbiAgICAgICAgc2V0RXh0cmFUb3VjaGVkKChwcmV2KSA9PiAoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwcmV2KSwgeyBbbmFtZV06IGlzVG91Y2hlZCB9KSkpO1xuICAgIH0pO1xuICAgIGNvbnN0IHNldEZpZWxkc1RvdWNoZWQgPSB1c2VNZW1vaXplZEZuKChmaWVsZHNUb3VjaCkgPT4ge1xuICAgICAgICBzZXRFeHRyYVRvdWNoZWQoKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCBmaWVsZHNUb3VjaCkpKTtcbiAgICB9KTtcbiAgICBjb25zdCByZXNldEZvcm1GaWVsZHMgPSB1c2VNZW1vaXplZEZuKChmaWVsZHMpID0+IHtcbiAgICAgICAgaWYgKCFmaWVsZHMpIHtcbiAgICAgICAgICAgIGZvcm1Db3JlLnJlc2V0RmllbGRzKCk7XG4gICAgICAgICAgICBzZXRFeHRyYVRvdWNoZWQoe30pO1xuICAgICAgICAgICAgc2V0VmFsaWRhdGluZyh7fSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCByZXNldFZhbHVlcyA9IHt9O1xuICAgICAgICAgICAgZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgIHJlc2V0VmFsdWVzW2ZpZWxkXSA9ICgoX2EgPSBjb25maWcuaW5pdGlhbFZhbHVlcykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoge30pW2ZpZWxkXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRzVmFsdWUocmVzZXRWYWx1ZXMpO1xuICAgICAgICAgICAgc2V0RXh0cmFUb3VjaGVkKChwcmV2KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3VG91Y2hlZCA9IE9iamVjdC5hc3NpZ24oe30sIHByZXYpO1xuICAgICAgICAgICAgICAgIGZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgbmV3VG91Y2hlZFtmaWVsZF07XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ld1RvdWNoZWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHNldFZhbGlkYXRpbmcoKHByZXYpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdWYWxpZGF0aW5nID0gT2JqZWN0LmFzc2lnbih7fSwgcHJldik7XG4gICAgICAgICAgICAgICAgZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdWYWxpZGF0aW5nW2ZpZWxkXTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3VmFsaWRhdGluZztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihmaWVsZCwgbnVsbCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHN1Ym1pdFdpdGhWYWxpZGF0aW9uID0gdXNlTWVtb2l6ZWRGbigoY2FsbGJhY2spID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgdmFsaWRhdGVkVmFsdWVzID0geWllbGQgdmFsaWRhdGVGaWVsZHNBc3luYygpO1xuICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgeWllbGQgY2FsbGJhY2sodmFsaWRhdGVkVmFsdWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2YWxpZGF0ZWRWYWx1ZXM7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfSkpO1xuICAgIGNvbnN0IGZvcm1JbnN0YW5jZSA9IHVzZU1lbW8oKCkgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZm9ybUNvcmUuZm9ybUluc3RhbmNlKSwgeyB2YWxpZGF0ZUZpZWxkczogdmFsaWRhdGVGaWVsZHNBc3luYywgc2V0RmllbGRWYWx1ZTogZm9ybUNvcmUuc2V0RmllbGRWYWx1ZSwgZ2V0RmllbGRFcnJvcixcbiAgICAgICAgZ2V0RmllbGRXYXJuaW5nLFxuICAgICAgICBnZXRGaWVsZHNFcnJvcixcbiAgICAgICAgaXNGaWVsZFRvdWNoZWQsXG4gICAgICAgIGlzRmllbGRzVG91Y2hlZCxcbiAgICAgICAgaXNGaWVsZFZhbGlkYXRpbmcsIHNldEZpZWxkRXJyb3I6IGZvcm1Db3JlLnNldEZpZWxkRXJyb3IsIHNldEZpZWxkc0Vycm9yLFxuICAgICAgICBzZXRGaWVsZFRvdWNoZWQsXG4gICAgICAgIHNldEZpZWxkc1RvdWNoZWQsIHJlc2V0RmllbGRzOiByZXNldEZvcm1GaWVsZHMsIHN1Ym1pdDogc3VibWl0V2l0aFZhbGlkYXRpb24sIGRlZmluZUZpZWxkLCByZWdpc3RlckZpZWxkOiBmb3JtQ29yZS5yZWdpc3RlckZpZWxkLCB1bnJlZ2lzdGVyRmllbGQ6IGZvcm1Db3JlLnVucmVnaXN0ZXJGaWVsZCB9KSksIFtcbiAgICAgICAgZm9ybUNvcmUuZm9ybUluc3RhbmNlLFxuICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZFZhbHVlLFxuICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZEVycm9yLFxuICAgICAgICBmb3JtQ29yZS5yZWdpc3RlckZpZWxkLFxuICAgICAgICBmb3JtQ29yZS51bnJlZ2lzdGVyRmllbGQsXG4gICAgICAgIHZhbGlkYXRlRmllbGRzQXN5bmMsXG4gICAgICAgIGdldEZpZWxkRXJyb3IsXG4gICAgICAgIGdldEZpZWxkV2FybmluZyxcbiAgICAgICAgZ2V0RmllbGRzRXJyb3IsXG4gICAgICAgIGlzRmllbGRUb3VjaGVkLFxuICAgICAgICBpc0ZpZWxkc1RvdWNoZWQsXG4gICAgICAgIGlzRmllbGRWYWxpZGF0aW5nLFxuICAgICAgICBzZXRGaWVsZHNFcnJvcixcbiAgICAgICAgc2V0RmllbGRUb3VjaGVkLFxuICAgICAgICBzZXRGaWVsZHNUb3VjaGVkLFxuICAgICAgICByZXNldEZvcm1GaWVsZHMsXG4gICAgICAgIHN1Ym1pdFdpdGhWYWxpZGF0aW9uLFxuICAgICAgICBkZWZpbmVGaWVsZCxcbiAgICBdKTtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBJbnRlcm5hbHMg4oCTIGV4cG9zZWQgZm9yIFByb0Zvcm0gaW50ZWdyYXRpb25cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCBpbnRlcm5hbHMgPSB1c2VNZW1vKCgpID0+ICh7XG4gICAgICAgIHZhbHVlczogZm9ybUNvcmUudmFsdWVzLFxuICAgICAgICBlcnJvcnM6IGZvcm1Db3JlLmVycm9ycyxcbiAgICAgICAgd2FybmluZ3M6IGZvcm1Db3JlLndhcm5pbmdzLFxuICAgICAgICB0b3VjaGVkOiBhbGxUb3VjaGVkLFxuICAgICAgICB2YWxpZGF0aW5nLFxuICAgICAgICBmaWVsZFJ1bGVzOiBmb3JtQ29yZS5maWVsZFJ1bGVzLFxuICAgICAgICBzZXRGaWVsZFZhbHVlOiBmb3JtQ29yZS5zZXRGaWVsZFZhbHVlLFxuICAgICAgICBzZXRGaWVsZEVycm9yOiBmb3JtQ29yZS5zZXRGaWVsZEVycm9yLFxuICAgICAgICBzZXRGaWVsZFdhcm5pbmc6IGZvcm1Db3JlLnNldEZpZWxkV2FybmluZyxcbiAgICAgICAgdmFsaWRhdGVGaWVsZDogZm9ybUNvcmUudmFsaWRhdGVGaWVsZCxcbiAgICAgICAgdmFsaWRhdGVGaWVsZEFzeW5jLFxuICAgICAgICByZWdpc3RlckZpZWxkOiBmb3JtQ29yZS5yZWdpc3RlckZpZWxkLFxuICAgICAgICB1bnJlZ2lzdGVyRmllbGQ6IGZvcm1Db3JlLnVucmVnaXN0ZXJGaWVsZCxcbiAgICAgICAgaGFuZGxlU3VibWl0LFxuICAgICAgICBoYW5kbGVSZXNldCxcbiAgICB9KSwgW1xuICAgICAgICBmb3JtQ29yZS52YWx1ZXMsXG4gICAgICAgIGZvcm1Db3JlLmVycm9ycyxcbiAgICAgICAgZm9ybUNvcmUud2FybmluZ3MsXG4gICAgICAgIGFsbFRvdWNoZWQsXG4gICAgICAgIHZhbGlkYXRpbmcsXG4gICAgICAgIGZvcm1Db3JlLmZpZWxkUnVsZXMsXG4gICAgICAgIGZvcm1Db3JlLnNldEZpZWxkVmFsdWUsXG4gICAgICAgIGZvcm1Db3JlLnNldEZpZWxkRXJyb3IsXG4gICAgICAgIGZvcm1Db3JlLnNldEZpZWxkV2FybmluZyxcbiAgICAgICAgZm9ybUNvcmUudmFsaWRhdGVGaWVsZCxcbiAgICAgICAgdmFsaWRhdGVGaWVsZEFzeW5jLFxuICAgICAgICBmb3JtQ29yZS5yZWdpc3RlckZpZWxkLFxuICAgICAgICBmb3JtQ29yZS51bnJlZ2lzdGVyRmllbGQsXG4gICAgICAgIGhhbmRsZVN1Ym1pdCxcbiAgICAgICAgaGFuZGxlUmVzZXQsXG4gICAgXSk7XG4gICAgcmV0dXJuIHsgZm9ybUluc3RhbmNlLCBpbnRlcm5hbHMgfTtcbn07XG5leHBvcnQgZGVmYXVsdCB1c2VGb3JtOyIsbnVsbF0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==