@po-ui/ng-components 14.7.0 → 14.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/esm2020/lib/components/components.module.mjs +14 -7
  2. package/esm2020/lib/components/index.mjs +2 -1
  3. package/esm2020/lib/components/po-field/po-checkbox-group/po-checkbox-group-base.component.mjs +12 -2
  4. package/esm2020/lib/components/po-field/po-checkbox-group/po-checkbox-group.component.mjs +4 -4
  5. package/esm2020/lib/components/po-field/po-combo/po-combo-base.component.mjs +13 -3
  6. package/esm2020/lib/components/po-field/po-combo/po-combo.component.mjs +8 -6
  7. package/esm2020/lib/components/po-field/po-datepicker/po-datepicker-base.component.mjs +21 -3
  8. package/esm2020/lib/components/po-field/po-datepicker/po-datepicker.component.mjs +8 -7
  9. package/esm2020/lib/components/po-field/po-datepicker-range/po-datepicker-range-base.component.mjs +13 -3
  10. package/esm2020/lib/components/po-field/po-datepicker-range/po-datepicker-range.component.mjs +4 -4
  11. package/esm2020/lib/components/po-field/po-decimal/po-decimal.component.mjs +8 -7
  12. package/esm2020/lib/components/po-field/po-email/po-email.component.mjs +8 -6
  13. package/esm2020/lib/components/po-field/po-field-container/po-field-container-literals.mjs +9 -5
  14. package/esm2020/lib/components/po-field/po-field-container/po-field-container.component.mjs +60 -23
  15. package/esm2020/lib/components/po-field/po-field-container/po-field-container.module.mjs +5 -4
  16. package/esm2020/lib/components/po-field/po-field-validate.model.mjs +13 -3
  17. package/esm2020/lib/components/po-field/po-input/po-input-base.component.mjs +15 -4
  18. package/esm2020/lib/components/po-field/po-input/po-input.component.mjs +8 -6
  19. package/esm2020/lib/components/po-field/po-login/po-login.component.mjs +8 -6
  20. package/esm2020/lib/components/po-field/po-lookup/po-lookup-base.component.mjs +24 -6
  21. package/esm2020/lib/components/po-field/po-lookup/po-lookup.component.mjs +8 -8
  22. package/esm2020/lib/components/po-field/po-lookup/services/po-lookup-modal.service.mjs +7 -1
  23. package/esm2020/lib/components/po-field/po-multiselect/po-multiselect-base.component.mjs +15 -3
  24. package/esm2020/lib/components/po-field/po-multiselect/po-multiselect.component.mjs +4 -4
  25. package/esm2020/lib/components/po-field/po-number/po-number.component.mjs +8 -6
  26. package/esm2020/lib/components/po-field/po-password/po-password.component.mjs +8 -7
  27. package/esm2020/lib/components/po-field/po-radio/po-radio.component.mjs +39 -26
  28. package/esm2020/lib/components/po-field/po-radio-group/po-radio-group-base.component.mjs +13 -3
  29. package/esm2020/lib/components/po-field/po-radio-group/po-radio-group.component.mjs +4 -4
  30. package/esm2020/lib/components/po-field/po-rich-text/po-rich-text-base.component.mjs +13 -3
  31. package/esm2020/lib/components/po-field/po-rich-text/po-rich-text-body/po-rich-text-body.component.mjs +7 -4
  32. package/esm2020/lib/components/po-field/po-rich-text/po-rich-text.component.mjs +5 -5
  33. package/esm2020/lib/components/po-field/po-select/po-select.component.mjs +8 -7
  34. package/esm2020/lib/components/po-field/po-switch/po-switch.component.mjs +11 -7
  35. package/esm2020/lib/components/po-field/po-textarea/po-textarea-base.component.mjs +14 -5
  36. package/esm2020/lib/components/po-field/po-textarea/po-textarea.component.mjs +8 -6
  37. package/esm2020/lib/components/po-field/po-upload/po-upload-base.component.mjs +13 -3
  38. package/esm2020/lib/components/po-field/po-upload/po-upload.component.mjs +33 -32
  39. package/esm2020/lib/components/po-field/po-url/po-url.component.mjs +8 -6
  40. package/esm2020/lib/components/po-label/index.mjs +3 -0
  41. package/esm2020/lib/components/po-label/po-label.component.mjs +94 -0
  42. package/esm2020/lib/components/po-label/po-label.module.mjs +19 -0
  43. package/esm2020/lib/components/po-table/po-table-icon/po-table-icon.component.mjs +4 -4
  44. package/esm2020/lib/components/po-table/po-table.component.mjs +7 -7
  45. package/esm2020/lib/components/po-widget/po-widget-base.component.mjs +11 -2
  46. package/esm2020/lib/components/po-widget/po-widget.component.mjs +12 -4
  47. package/fesm2015/po-ui-ng-components.mjs +1482 -1128
  48. package/fesm2015/po-ui-ng-components.mjs.map +1 -1
  49. package/fesm2020/po-ui-ng-components.mjs +1469 -1129
  50. package/fesm2020/po-ui-ng-components.mjs.map +1 -1
  51. package/lib/components/components.module.d.ts +2 -1
  52. package/lib/components/index.d.ts +1 -0
  53. package/lib/components/po-field/po-checkbox-group/po-checkbox-group-base.component.d.ts +8 -1
  54. package/lib/components/po-field/po-combo/po-combo-base.component.d.ts +9 -2
  55. package/lib/components/po-field/po-combo/po-combo.component.d.ts +1 -0
  56. package/lib/components/po-field/po-datepicker/po-datepicker-base.component.d.ts +17 -2
  57. package/lib/components/po-field/po-datepicker/po-datepicker.component.d.ts +1 -0
  58. package/lib/components/po-field/po-datepicker-range/po-datepicker-range-base.component.d.ts +9 -2
  59. package/lib/components/po-field/po-decimal/po-decimal.component.d.ts +1 -0
  60. package/lib/components/po-field/po-email/po-email.component.d.ts +1 -0
  61. package/lib/components/po-field/po-field-container/po-field-container-literals.d.ts +4 -0
  62. package/lib/components/po-field/po-field-container/po-field-container.component.d.ts +18 -3
  63. package/lib/components/po-field/po-field-container/po-field-container.module.d.ts +2 -1
  64. package/lib/components/po-field/po-field-validate.model.d.ts +9 -2
  65. package/lib/components/po-field/po-input/po-input-base.component.d.ts +11 -3
  66. package/lib/components/po-field/po-input/po-input.component.d.ts +1 -0
  67. package/lib/components/po-field/po-login/po-login.component.d.ts +1 -0
  68. package/lib/components/po-field/po-lookup/po-lookup-base.component.d.ts +14 -3
  69. package/lib/components/po-field/po-lookup/po-lookup.component.d.ts +1 -1
  70. package/lib/components/po-field/po-lookup/services/po-lookup-modal.service.d.ts +1 -0
  71. package/lib/components/po-field/po-multiselect/po-multiselect-base.component.d.ts +11 -2
  72. package/lib/components/po-field/po-number/po-number.component.d.ts +1 -0
  73. package/lib/components/po-field/po-password/po-password.component.d.ts +1 -0
  74. package/lib/components/po-field/po-radio/po-radio.component.d.ts +7 -4
  75. package/lib/components/po-field/po-radio-group/po-radio-group-base.component.d.ts +9 -2
  76. package/lib/components/po-field/po-rich-text/po-rich-text-base.component.d.ts +9 -2
  77. package/lib/components/po-field/po-rich-text/po-rich-text-body/po-rich-text-body.component.d.ts +2 -1
  78. package/lib/components/po-field/po-select/po-select.component.d.ts +1 -0
  79. package/lib/components/po-field/po-switch/po-switch.component.d.ts +1 -0
  80. package/lib/components/po-field/po-textarea/po-textarea-base.component.d.ts +10 -4
  81. package/lib/components/po-field/po-textarea/po-textarea.component.d.ts +1 -0
  82. package/lib/components/po-field/po-upload/po-upload-base.component.d.ts +9 -2
  83. package/lib/components/po-field/po-upload/po-upload.component.d.ts +1 -0
  84. package/lib/components/po-field/po-url/po-url.component.d.ts +1 -0
  85. package/lib/components/po-label/index.d.ts +2 -0
  86. package/lib/components/po-label/po-label.component.d.ts +40 -0
  87. package/lib/components/po-label/po-label.module.d.ts +8 -0
  88. package/lib/components/po-widget/po-widget-base.component.d.ts +11 -2
  89. package/lib/components/po-widget/po-widget.component.d.ts +1 -0
  90. package/package.json +4 -4
  91. package/po-ui-ng-components-14.8.0.tgz +0 -0
  92. package/schematics/ng-add/index.js +1 -1
  93. package/schematics/ng-update/v14/index.js +1 -1
  94. package/schematics/ng-update/v2/index.js +1 -1
  95. package/schematics/ng-update/v3/index.js +1 -1
  96. package/schematics/ng-update/v4/index.js +1 -1
  97. package/schematics/ng-update/v5/index.js +1 -1
  98. package/schematics/ng-update/v6/index.js +1 -1
  99. package/po-ui-ng-components-14.7.0.tgz +0 -0
@@ -81,6 +81,13 @@ export class PoDatepickerRangeBaseComponent {
81
81
  this._noAutocomplete = false;
82
82
  this._readonly = false;
83
83
  this._required = false;
84
+ /**
85
+ * Define se a indicação de campo obrigatório será exibida.
86
+ *
87
+ * > Não será exibida a indicação se:
88
+ * - Não possuir `p-help` e/ou `p-label`.
89
+ */
90
+ this.showRequired = false;
84
91
  this.language = languageService.getShortLanguage();
85
92
  }
86
93
  get isDateRangeInputValid() {
@@ -261,7 +268,7 @@ export class PoDatepickerRangeBaseComponent {
261
268
  *
262
269
  * @description
263
270
  *
264
- * Indica que o campo será obrigatório.
271
+ * Define que o campo será obrigatório.
265
272
  *
266
273
  * @default `false`
267
274
  */
@@ -471,7 +478,7 @@ export class PoDatepickerRangeBaseComponent {
471
478
  }
472
479
  }
473
480
  PoDatepickerRangeBaseComponent.ɵfac = function PoDatepickerRangeBaseComponent_Factory(t) { return new (t || PoDatepickerRangeBaseComponent)(i0.ɵɵdirectiveInject(i1.PoDateService), i0.ɵɵdirectiveInject(i2.PoLanguageService)); };
474
- PoDatepickerRangeBaseComponent.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: PoDatepickerRangeBaseComponent, inputs: { autoFocus: ["p-auto-focus", "autoFocus"], help: ["p-help", "help"], label: ["p-label", "label"], optional: ["p-optional", "optional"], clean: ["p-clean", "clean"], disabled: ["p-disabled", "disabled"], endDate: ["p-end-date", "endDate"], literals: ["p-literals", "literals"], minDate: ["p-min-date", "minDate"], maxDate: ["p-max-date", "maxDate"], noAutocomplete: ["p-no-autocomplete", "noAutocomplete"], readonly: ["p-readonly", "readonly"], required: ["p-required", "required"], startDate: ["p-start-date", "startDate"], locale: ["p-locale", "locale"] }, outputs: { onChange: "p-change" } });
481
+ PoDatepickerRangeBaseComponent.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: PoDatepickerRangeBaseComponent, inputs: { autoFocus: ["p-auto-focus", "autoFocus"], help: ["p-help", "help"], label: ["p-label", "label"], optional: ["p-optional", "optional"], clean: ["p-clean", "clean"], disabled: ["p-disabled", "disabled"], endDate: ["p-end-date", "endDate"], literals: ["p-literals", "literals"], minDate: ["p-min-date", "minDate"], maxDate: ["p-max-date", "maxDate"], noAutocomplete: ["p-no-autocomplete", "noAutocomplete"], readonly: ["p-readonly", "readonly"], required: ["p-required", "required"], showRequired: ["p-show-required", "showRequired"], startDate: ["p-start-date", "startDate"], locale: ["p-locale", "locale"] }, outputs: { onChange: "p-change" } });
475
482
  __decorate([
476
483
  InputBoolean()
477
484
  ], PoDatepickerRangeBaseComponent.prototype, "autoFocus", void 0);
@@ -519,6 +526,9 @@ __decorate([
519
526
  }], required: [{
520
527
  type: Input,
521
528
  args: ['p-required']
529
+ }], showRequired: [{
530
+ type: Input,
531
+ args: ['p-show-required']
522
532
  }], startDate: [{
523
533
  type: Input,
524
534
  args: ['p-start-date']
@@ -526,4 +536,4 @@ __decorate([
526
536
  type: Input,
527
537
  args: ['p-locale']
528
538
  }] }); })();
529
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tZGF0ZXBpY2tlci1yYW5nZS1iYXNlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby1maWVsZC9wby1kYXRlcGlja2VyLXJhbmdlL3BvLWRhdGVwaWNrZXItcmFuZ2UtYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBcUIsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTFGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFFckYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUvQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUdqSCxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7OztBQUVsRjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdDRztBQUVILE1BQU0sT0FBZ0IsOEJBQThCO0lBNlVsRCxZQUFzQixhQUE0QixFQUFFLGVBQWtDO1FBQWhFLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBNVVsRDs7Ozs7Ozs7OztXQVVHO1FBQ29DLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFtQ2xFOzs7Ozs7V0FNRztRQUNpQixhQUFRLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFFMUUsaUJBQVksR0FBVyxFQUFFLENBQUM7UUFDMUIsY0FBUyxHQUFzQixFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDO1FBRTVDLFdBQU0sR0FB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OEJBQThCO0FBWVg7SUFBZixZQUFZLEVBQUU7aUVBQTRCO3VGQVo5Qyw4QkFBOEI7Y0FEbkQsU0FBUztnR0FhK0IsU0FBUztrQkFBL0MsS0FBSzttQkFBQyxjQUFjO1lBU0osSUFBSTtrQkFBcEIsS0FBSzttQkFBQyxRQUFRO1lBU0csS0FBSztrQkFBdEIsS0FBSzttQkFBQyxTQUFTO1lBZUssUUFBUTtrQkFBNUIsS0FBSzttQkFBQyxZQUFZO1lBU0MsUUFBUTtrQkFBM0IsTUFBTTttQkFBQyxVQUFVO1lBdUNJLEtBQUs7a0JBQTFCLEtBQUs7bUJBQUMsU0FBUztZQWlCUyxRQUFRO2tCQUFoQyxLQUFLO21CQUFDLFlBQVk7WUFpQk0sT0FBTztrQkFBL0IsS0FBSzttQkFBQyxZQUFZO1lBK0NNLFFBQVE7a0JBQWhDLEtBQUs7bUJBQUMsWUFBWTtZQXVCTSxPQUFPO2tCQUEvQixLQUFLO21CQUFDLFlBQVk7WUF3Qk0sT0FBTztrQkFBL0IsS0FBSzttQkFBQyxZQUFZO1lBMEJhLGNBQWM7a0JBQTdDLEtBQUs7bUJBQUMsbUJBQW1CO1lBaUJELFFBQVE7a0JBQWhDLEtBQUs7bUJBQUMsWUFBWTtZQW1CTSxRQUFRO2tCQUFoQyxLQUFLO21CQUFDLFlBQVk7WUFpQlEsU0FBUztrQkFBbkMsS0FBSzttQkFBQyxjQUFjO1lBcUJFLE1BQU07a0JBQTVCLEtBQUs7bUJBQUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBEaXJlY3RpdmUsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBDb250cm9sVmFsdWVBY2Nlc3NvciwgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9yIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSW5wdXRCb29sZWFuIH0gZnJvbSAnLi4vLi4vLi4vZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBwb0xvY2FsZURlZmF1bHQgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9wby1sYW5ndWFnZS9wby1sYW5ndWFnZS5jb25zdGFudCc7XG5pbXBvcnQgeyBQb0xhbmd1YWdlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3BvLWxhbmd1YWdlL3BvLWxhbmd1YWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgcmVxdWlyZWRGYWlsZWQgfSBmcm9tICcuLi92YWxpZGF0b3JzJztcbmltcG9ydCB7IFBvRGF0ZVNlcnZpY2UgfSBmcm9tICcuLy4uLy4uLy4uL3NlcnZpY2VzL3BvLWRhdGUvcG8tZGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IGNvbnZlcnRJc29Ub0RhdGUsIGNvbnZlcnRUb0Jvb2xlYW4sIHNldFllYXJGcm9tMFRvMTAwLCB2YWxpZGF0ZURhdGVSYW5nZSB9IGZyb20gJy4vLi4vLi4vLi4vdXRpbHMvdXRpbCc7XG5pbXBvcnQgeyBQb0RhdGVwaWNrZXJSYW5nZUxpdGVyYWxzIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLWRhdGVwaWNrZXItcmFuZ2UtbGl0ZXJhbHMuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvRGF0ZXBpY2tlclJhbmdlIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLWRhdGVwaWNrZXItcmFuZ2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IHBvRGF0ZXBpY2tlclJhbmdlTGl0ZXJhbHNEZWZhdWx0IH0gZnJvbSAnLi9wby1kYXRlcGlja2VyLXJhbmdlLmxpdGVyYWxzJztcblxuLyoqXG4gKiBAZGVzY3JpcHRpb25cbiAqXG4gKiBPIGBwby1kYXRlcGlja2VyLXJhbmdlYCDDqSB1bSBjb21wb25lbnRlIHBhcmEgc2VsZcOnw6NvIGRlIHVtIHBlcsOtb2RvIGVudHJlIGR1YXMgZGF0YXMsIG9uZGUgw6kgcG9zc8OtdmVsIGluZm9ybWFyIGFwZW5hc1xuICogYSBkYXRhIGluaWNpYWwgb3UgYSBkYXRhIGZpbmFsLlxuICpcbiAqIE8gY29tcG9uZW50ZSBgWyhuZ01vZGVsKV1gIGRvIGBwby1kYXRlcGlja2VyLXJhbmdlYCB0cmFiYWxoYSBjb20gdW0gb2JqZXRvIHF1ZSBpbXBsZW1lbnRhIGEgaW50ZXJmYWNlXG4gKiBgUG9EYXRlcGlja2VyUmFuZ2VgLCBjb250ZW5kbyBhcyBzZWd1aW50ZXMgcHJvcHJpZWRhZGVzOlxuICogYGBgXG4gKiB7IFwic3RhcnRcIjogJzIwMTctMTEtMjgnLCBcImVuZFwiOiAnMjAxNy0xMS0zMCcgfVxuICogYGBgXG4gKlxuICogPGEgaWQ9XCJhY2NlcHRlZC1mb3JtYXRzXCI+PC9hPlxuICogRXN0ZSBjb21wb25lbnRlIHBvZGUgcmVjZWJlciBvcyBzZWd1aW50ZXMgZm9ybWF0b3MgZGUgZGF0YTpcbiAqXG4gKiAtICoqRGF0YSBlIGhvcmEgY29tYmluYWRvcyAoRTg2MDFEWncpOiB5eXl5LW1tLWRkVGhoOm1tOnNzK3wtaGg6bW0qKlxuICogYGBgXG4gKiAnMjAxNy0xMS0yOFQwMDowMDowMC0wMjowMCc7XG4gKiBgYGBcbiAqXG4gKiAtICoqRGF0YSAoRTg2MDFEQXcuKTogeXl5eS1tbS1kZCoqXG4gKiBgYGBcbiAqICcyMDE3LTExLTI4JztcbiAqIGBgYFxuICpcbiAqIC0gKipKYXZhU2NyaXB0IERhdGUgT2JqZWN0OioqXG4gKiBgYGBcbiAqIG5ldyBEYXRlKDIwMTcsIDEwLCAyOCk7XG4gKiBgYGBcbiAqXG4gKiA+IE8gY29tcG9uZW50ZSByZXNwZWl0YXLDoSBvIGZvcm1hdG8gcGFzc2FkbyBwYXJhIG8gKm1vZGVsKiB2aWEgY29kaWZpY2HDp8Ojby4gUG9yw6ltLCBjYXNvIHNlamEgZmVpdGEgYWx0ZXJhw6fDo28gZW0gYWxndW1cbiAqIGRvcyB2YWxvcmVzIGRlIGRhdGEgZW0gdGVsYSwgbyBjb21wb25lbnRlIGF0cmlidWlyw6EgbyBmb3JtYXRvICoqRGF0YSAoRTg2MDFEQXcuKTogeXl5eS1tbS1kZCoqIGFvIG1vZGVsLlxuICpcbiAqIEltcG9ydGFudGU6XG4gKlxuICogLSBRdWFuZG8gcHJlZW5jaGlkYXMgYSBkYXRhIGluaWNpYWwgZSBmaW5hbCwgYSBkYXRhIGluaWNpYWwgZGV2ZSBzZXIgc2VtcHJlIG1lbm9yIG91IGlndWFsIGEgZGF0YSBmaW5hbDtcbiAqIC0gQW8gcGFzc2FyIHVtYSBkYXRhIGludsOhbGlkYSB2aWEgY29kaWZpY2HDp8OjbywgbyB2YWxvciBzZXLDoSBtYW50aWRvIG5vICptb2RlbCogZSBvIGBpbnB1dGAgZGEgdGVsYSBhcGFyZWNlcsOhIHZhemlvO1xuICogLSBQZXJtaXRlIHRyYWJhbGhhciBjb20gYXMgZHVhcyBkYXRhcyBzZXBhcmFkYW1lbnRlIGF0cmF2w6lzIGRhcyBwcm9wcmllZGFkZXMgYHAtc3RhcnQtZGF0ZWAgZSBgcC1lbmQtZGF0ZWAgbm8gbHVnYXIgZG9cbiAqIGBbKG5nTW9kZWwpXWAsIG5vIGVudGFudG8gc2VtIGEgdmFsaWRhw6fDo28gZG8gZm9ybXVsw6FyaW87XG4gKiAtIFBhcmEgYSB2YWxpZGHDp8OjbyBkbyBmb3JtdWzDoXJpbywgdXRpbGl6ZSBvIGBbKG5nTW9kZWwpXWAuXG4gKi9cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFBvRGF0ZXBpY2tlclJhbmdlQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBWYWxpZGF0b3Ige1xuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBBcGxpY2EgZm9jbyBubyBlbGVtZW50byBhbyBzZXIgaW5pY2lhZG8uXG4gICAqXG4gICAqID4gQ2FzbyBtYWlzIGRlIHVtIGVsZW1lbnRvIHNlamEgY29uZmlndXJhZG8gY29tIGVzc2EgcHJvcHJpZWRhZGUsIGFwZW5hcyBvIMO6bHRpbW8gZWxlbWVudG8gZGVjbGFyYWRvIGNvbSBlbGEgdGVyw6EgbyBmb2NvLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3AtYXV0by1mb2N1cycpIEBJbnB1dEJvb2xlYW4oKSBhdXRvRm9jdXM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBUZXh0byBkZSBhcG9pbyBkbyBjYW1wby5cbiAgICovXG4gIEBJbnB1dCgncC1oZWxwJykgaGVscD86IHN0cmluZztcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBSw7N0dWxvIGRvIGNhbXBvLlxuICAgKi9cbiAgQElucHV0KCdwLWxhYmVsJykgbGFiZWw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGVmaW5lIHNlIGEgaW5kaWNhw6fDo28gZGUgY2FtcG8gb3BjaW9uYWwgc2Vyw6EgZXhpYmlkYS5cbiAgICpcbiAgICogPiBOw6NvIHNlcsOhIGV4aWJpZGEgYSBpbmRpY2HDp8OjbyBzZTpcbiAgICogLSBPIGNhbXBvIGNvbnRlciBgcC1yZXF1aXJlZGA7XG4gICAqIC0gTsOjbyBwb3NzdWlyIGBwLWhlbHBgIGUvb3UgYHAtbGFiZWxgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3Atb3B0aW9uYWwnKSBvcHRpb25hbDogYm9vbGVhbjtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBFdmVudG8gZGlzcGFyYWRvIGFvIGFsdGVyYXIgdmFsb3IgZG8gY2FtcG8uXG4gICAqL1xuICBAT3V0cHV0KCdwLWNoYW5nZScpIG9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIGVycm9yTWVzc2FnZTogc3RyaW5nID0gJyc7XG4gIGRhdGVSYW5nZTogUG9EYXRlcGlja2VyUmFuZ2UgPSB7IHN0YXJ0OiAnJywgZW5kOiAnJyB9O1xuXG4gIHByb3RlY3RlZCBmb3JtYXQ6IGFueSA9ICdkZC9tbS95eXl5JztcbiAgcHJvdGVjdGVkIGlzRGF0ZVJhbmdlSW5wdXRGb3JtYXRWYWxpZDogYm9vbGVhbiA9IHRydWU7XG4gIHByb3RlY3RlZCBpc1N0YXJ0RGF0ZVJhbmdlSW5wdXRWYWxpZDogYm9vbGVhbiA9IHRydWU7XG4gIHByb3RlY3RlZCBvblRvdWNoZWRNb2RlbDogYW55O1xuXG4gIHByaXZhdGUgX2NsZWFuPzogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9kaXNhYmxlZD87XG4gIHByaXZhdGUgX2VuZERhdGU/O1xuICBwcml2YXRlIF9saXRlcmFscz86IGFueTtcbiAgcHJpdmF0ZSBfbWF4RGF0ZTogRGF0ZTtcbiAgcHJpdmF0ZSBfbWluRGF0ZTogRGF0ZTtcbiAgcHJpdmF0ZSBfbm9BdXRvY29tcGxldGU/OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX3JlYWRvbmx5OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX3JlcXVpcmVkPzogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9zdGFydERhdGU/O1xuICBwcml2YXRlIF9sb2NhbGU/OiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBsYW5ndWFnZTtcbiAgcHJpdmF0ZSBvbkNoYW5nZU1vZGVsOiBhbnk7XG4gIHByaXZhdGUgdmFsaWRhdG9yQ2hhbmdlOiBhbnk7XG5cbiAgZ2V0IGlzRGF0ZVJhbmdlSW5wdXRWYWxpZCgpIHtcbiAgICByZXR1cm4gdGhpcy5pc0RhdGVSYW5nZUlucHV0Rm9ybWF0VmFsaWQgJiYgdGhpcy5pc1N0YXJ0RGF0ZVJhbmdlSW5wdXRWYWxpZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEhhYmlsaXRhIGHDp8OjbyBwYXJhIGxpbXBhciBvIGNhbXBvLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3AtY2xlYW4nKSBzZXQgY2xlYW4oY2xlYW46IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9jbGVhbiA9IGNvbnZlcnRUb0Jvb2xlYW4oY2xlYW4pO1xuICB9XG5cbiAgZ2V0IGNsZWFuKCkge1xuICAgIHJldHVybiB0aGlzLl9jbGVhbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIERlc2FiaWxpdGEgbyBjYW1wby5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KCdwLWRpc2FibGVkJykgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZGlzYWJsZWQgPSBjb252ZXJ0VG9Cb29sZWFuKHZhbHVlKTtcblxuICAgIHRoaXMudmFsaWRhdGVNb2RlbCh0aGlzLmRhdGVSYW5nZSk7XG4gIH1cblxuICBnZXQgZGlzYWJsZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGF0YSBmaW5hbC5cbiAgICovXG4gIEBJbnB1dCgncC1lbmQtZGF0ZScpIHNldCBlbmREYXRlKGRhdGU6IHN0cmluZyB8IERhdGUpIHtcbiAgICB0aGlzLl9lbmREYXRlID0gdGhpcy5jb252ZXJ0UGF0dGVybkRhdGVGb3JtYXQoZGF0ZSk7XG4gICAgdGhpcy5kYXRlUmFuZ2UuZW5kID0gdGhpcy5lbmREYXRlO1xuXG4gICAgdGhpcy51cGRhdGVTY3JlZW5CeU1vZGVsKHRoaXMuZGF0ZVJhbmdlKTtcbiAgICB0aGlzLnVwZGF0ZU1vZGVsKHRoaXMuZGF0ZVJhbmdlKTtcbiAgfVxuXG4gIGdldCBlbmREYXRlKCkge1xuICAgIHJldHVybiB0aGlzLl9lbmREYXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogT2JqZXRvIGNvbSBhcyBsaXRlcmFpcyB1c2FkYXMgbm8gYHBvLWRhdGVwaWNrZXItcmFuZ2VgLlxuICAgKlxuICAgKiBFeGlzdGVtIGR1YXMgbWFuZWlyYXMgZGUgY3VzdG9taXphciBvIGNvbXBvbmVudGUsIHBhc3NhbmRvIHVtIG9iamV0byBjb20gdG9kYXMgYXMgbGl0ZXJhaXMgZGlzcG9uw612ZWlzOlxuICAgKlxuICAgKiBgYGBcbiAgICogIGNvbnN0IGN1c3RvbUxpdGVyYWxzOiBQb0RhdGVwaWNrZXJSYW5nZUxpdGVyYWxzID0ge1xuICAgKiAgICBpbnZhbGlkRm9ybWF0OiAnRGF0ZSBpbiBpbmNvbnNpc3RlbnQgZm9ybWF0JyxcbiAgICogICAgc3RhcnREYXRlR3JlYXRlclRoYW5FbmREYXRlOiAnRW5kIGRhdGUgbGVzcyB0aGFuIHN0YXJ0IGRhdGUnXG4gICAqICB9O1xuICAgKiBgYGBcbiAgICpcbiAgICogT3UgcGFzc2FuZG8gYXBlbmFzIGFzIGxpdGVyYWlzIHF1ZSBkZXNlamEgY3VzdG9taXphcjpcbiAgICpcbiAgICogYGBgXG4gICAqICBjb25zdCBjdXN0b21MaXRlcmFsczogUG9EYXRlcGlja2VyUmFuZ2VMaXRlcmFscyA9IHtcbiAgICogICAgaW52YWxpZEZvcm1hdDogJ0RhdGUgaW4gaW5jb25zaXN0ZW50IGZvcm1hdCdcbiAgICogIH07XG4gICAqIGBgYFxuICAgKlxuICAgKiBFIHBhcmEgY2FycmVnYXIgYXMgbGl0ZXJhaXMgY3VzdG9taXphZGFzLCBiYXN0YSBhcGVuYXMgcGFzc2FyIG8gb2JqZXRvIHBhcmEgbyBjb21wb25lbnRlLlxuICAgKlxuICAgKiBgYGBcbiAgICogPHBvLWRhdGVwaWNrZXItcmFuZ2VcbiAgICogICBbcC1saXRlcmFsc109XCJjdXN0b21MaXRlcmFsc1wiPlxuICAgKiA8L3BvLWRhdGVwaWNrZXItcmFuZ2U+XG4gICAqIGBgYFxuICAgKlxuICAgKiA+IE8gb2JqZXRvIHBhZHLDo28gZGUgbGl0ZXJhaXMgc2Vyw6EgdHJhZHV6aWRvIGRlIGFjb3JkbyBjb20gbyBpZGlvbWEgZG9cbiAgICogW2BQb0kxOG5TZXJ2aWNlYF0oL2RvY3VtZW50YXRpb24vcG8taTE4bikgb3UgZG8gYnJvd3Nlci5cbiAgICovXG4gIEBJbnB1dCgncC1saXRlcmFscycpIHNldCBsaXRlcmFscyh2YWx1ZTogUG9EYXRlcGlja2VyUmFuZ2VMaXRlcmFscykge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCAmJiAhKHZhbHVlIGluc3RhbmNlb2YgQXJyYXkpKSB7XG4gICAgICB0aGlzLl9saXRlcmFscyA9IHtcbiAgICAgICAgLi4ucG9EYXRlcGlja2VyUmFuZ2VMaXRlcmFsc0RlZmF1bHRbcG9Mb2NhbGVEZWZhdWx0XSxcbiAgICAgICAgLi4ucG9EYXRlcGlja2VyUmFuZ2VMaXRlcmFsc0RlZmF1bHRbdGhpcy5sYW5ndWFnZV0sXG4gICAgICAgIC4uLnZhbHVlXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9saXRlcmFscyA9IHBvRGF0ZXBpY2tlclJhbmdlTGl0ZXJhbHNEZWZhdWx0W3RoaXMubGFuZ3VhZ2VdO1xuICAgIH1cbiAgfVxuXG4gIGdldCBsaXRlcmFscygpIHtcbiAgICByZXR1cm4gdGhpcy5fbGl0ZXJhbHMgfHwgcG9EYXRlcGlja2VyUmFuZ2VMaXRlcmFsc0RlZmF1bHRbdGhpcy5sYW5ndWFnZV07XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBEZWZpbmUgdW1hIGRhdGEgbcOtbmltYSBwYXJhIG8gYHBvLWRhdGVwaWNrZXItcmFuZ2VgLlxuICAgKi9cbiAgQElucHV0KCdwLW1pbi1kYXRlJykgc2V0IG1pbkRhdGUodmFsdWU6IHN0cmluZyB8IERhdGUpIHtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICBjb25zdCB5ZWFyID0gdmFsdWUuZ2V0RnVsbFllYXIoKTtcblxuICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHllYXIsIHZhbHVlLmdldE1vbnRoKCksIHZhbHVlLmdldERhdGUoKSwgMCwgMCwgMCk7XG4gICAgICBzZXRZZWFyRnJvbTBUbzEwMChkYXRlLCB5ZWFyKTtcblxuICAgICAgdGhpcy5fbWluRGF0ZSA9IGRhdGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX21pbkRhdGUgPSBjb252ZXJ0SXNvVG9EYXRlKHZhbHVlLCB0cnVlLCBmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IG1pbkRhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX21pbkRhdGU7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBEZWZpbmUgdW1hIGRhdGEgbcOheGltYSBwYXJhIG8gYHBvLWRhdGVwaWNrZXItcmFuZ2VgLlxuICAgKi9cbiAgQElucHV0KCdwLW1heC1kYXRlJykgc2V0IG1heERhdGUodmFsdWU6IHN0cmluZyB8IERhdGUpIHtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICBjb25zdCB5ZWFyID0gdmFsdWUuZ2V0RnVsbFllYXIoKTtcblxuICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHllYXIsIHZhbHVlLmdldE1vbnRoKCksIHZhbHVlLmdldERhdGUoKSwgMjMsIDU5LCA1OSk7XG4gICAgICBzZXRZZWFyRnJvbTBUbzEwMChkYXRlLCB5ZWFyKTtcblxuICAgICAgdGhpcy5fbWF4RGF0ZSA9IGRhdGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX21heERhdGUgPSBjb252ZXJ0SXNvVG9EYXRlKHZhbHVlLCBmYWxzZSwgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IG1heERhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX21heERhdGU7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBEZWZpbmUgYSBwcm9wcmllZGFkZSBuYXRpdmEgYGF1dG9jb21wbGV0ZWAgZG8gY2FtcG8gY29tbyBgb2ZmYC5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KCdwLW5vLWF1dG9jb21wbGV0ZScpIHNldCBub0F1dG9jb21wbGV0ZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX25vQXV0b2NvbXBsZXRlID0gY29udmVydFRvQm9vbGVhbih2YWx1ZSk7XG4gIH1cblxuICBnZXQgbm9BdXRvY29tcGxldGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX25vQXV0b2NvbXBsZXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogSW5kaWNhIHF1ZSBvIGNhbXBvIHNlcsOhIHNvbWVudGUgbGVpdHVyYS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KCdwLXJlYWRvbmx5Jykgc2V0IHJlYWRvbmx5KHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fcmVhZG9ubHkgPSBjb252ZXJ0VG9Cb29sZWFuKHZhbHVlKTtcblxuICAgIHRoaXMudmFsaWRhdGVNb2RlbCh0aGlzLmRhdGVSYW5nZSk7XG4gIH1cblxuICBnZXQgcmVhZG9ubHkoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRvbmx5O1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogSW5kaWNhIHF1ZSBvIGNhbXBvIHNlcsOhIG9icmlnYXTDs3Jpby5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KCdwLXJlcXVpcmVkJykgc2V0IHJlcXVpcmVkKHJlcXVpcmVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5fcmVxdWlyZWQgPSBjb252ZXJ0VG9Cb29sZWFuKHJlcXVpcmVkKTtcblxuICAgIHRoaXMudmFsaWRhdGVNb2RlbCh0aGlzLmRhdGVSYW5nZSk7XG4gIH1cblxuICBnZXQgcmVxdWlyZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlcXVpcmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGF0YSBpbmljaWFsLlxuICAgKi9cbiAgQElucHV0KCdwLXN0YXJ0LWRhdGUnKSBzZXQgc3RhcnREYXRlKGRhdGU6IHN0cmluZyB8IERhdGUpIHtcbiAgICB0aGlzLl9zdGFydERhdGUgPSB0aGlzLmNvbnZlcnRQYXR0ZXJuRGF0ZUZvcm1hdChkYXRlKTtcbiAgICB0aGlzLmRhdGVSYW5nZS5zdGFydCA9IHRoaXMuc3RhcnREYXRlO1xuXG4gICAgdGhpcy51cGRhdGVTY3JlZW5CeU1vZGVsKHRoaXMuZGF0ZVJhbmdlKTtcbiAgICB0aGlzLnVwZGF0ZU1vZGVsKHRoaXMuZGF0ZVJhbmdlKTtcbiAgfVxuXG4gIGdldCBzdGFydERhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXJ0RGF0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIElkaW9tYSBxdWUgbyBjYWxlbmTDoXJpbyB1dGlsaXphcsOhIHBhcmEgZXhpYmlyIGFzIGRhdGFzLlxuICAgKlxuICAgKiA+IE8gbG9jYWxlIHBhZHLDo28gc2Vyw6EgcmVjdXBlcmFkbyBjb20gYmFzZSBubyBbYFBvSTE4blNlcnZpY2VgXSgvZG9jdW1lbnRhdGlvbi9wby1pMThuKSBvdSAqYnJvd3NlciouXG4gICAqL1xuICBASW5wdXQoJ3AtbG9jYWxlJykgc2V0IGxvY2FsZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLl9sb2NhbGUgPSB2YWx1ZS5sZW5ndGggPj0gMiA/IHZhbHVlIDogcG9Mb2NhbGVEZWZhdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9sb2NhbGUgPSB0aGlzLmxhbmd1YWdlO1xuICAgIH1cbiAgfVxuXG4gIGdldCBsb2NhbGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fbG9jYWxlIHx8IHRoaXMubGFuZ3VhZ2U7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgcG9EYXRlU2VydmljZTogUG9EYXRlU2VydmljZSwgbGFuZ3VhZ2VTZXJ2aWNlOiBQb0xhbmd1YWdlU2VydmljZSkge1xuICAgIHRoaXMubGFuZ3VhZ2UgPSBsYW5ndWFnZVNlcnZpY2UuZ2V0U2hvcnRMYW5ndWFnZSgpO1xuICB9XG5cbiAgLy8gRnVuw6fDo28gaW1wbGVtZW50YWRhIGRvIENvbnRyb2xWYWx1ZUFjY2Vzc29yXG4gIC8vIFVzYWRhIHBhcmEgaW50ZXJjZXB0YXIgb3MgZXN0YWRvcyBkZSBoYWJpbGl0YWRvIHZpYSBmb3JtcyBhcGlcbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuICAvLyBGdW7Dp8OjbyBpbXBsZW1lbnRhZGEgZG8gQ29udHJvbFZhbHVlQWNjZXNzb3JcbiAgLy8gVXNhZGEgcGFyYSBpbnRlcmNlcHRhciBhcyBtdWRhbsOnYXMgZSBuw6NvIGF0dWFsaXphciBhdXRvbWF0aWNhbWVudGUgbyBNb2RlbFxuICByZWdpc3Rlck9uQ2hhbmdlKGZ1bmM6IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2VNb2RlbCA9IGZ1bmM7XG4gIH1cblxuICAvLyBGdW7Dp8OjbyBpbXBsZW1lbnRhZGEgZG8gQ29udHJvbFZhbHVlQWNjZXNzb3JcbiAgLy8gVXNhZGEgcGFyYSBpbnRlcmNlcHRhciBhcyBtdWRhbsOnYXMgZSBuw6NvIGF0dWFsaXphciBhdXRvbWF0aWNhbWVudGUgbyBNb2RlbFxuICByZWdpc3Rlck9uVG91Y2hlZChmdW5jOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZE1vZGVsID0gZnVuYztcbiAgfVxuXG4gIHJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2U/KGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy52YWxpZGF0b3JDaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHZhbGlkYXRlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMge1xuICAgIGNvbnN0IHZhbHVlOiBQb0RhdGVwaWNrZXJSYW5nZSA9IGNvbnRyb2wudmFsdWUgfHwge307XG4gICAgY29uc3Qgc3RhcnREYXRlID0gdmFsdWUuc3RhcnQgPyB0aGlzLmNvbnZlcnRQYXR0ZXJuRGF0ZUZvcm1hdCh2YWx1ZS5zdGFydCkgOiAnJztcbiAgICBjb25zdCBlbmREYXRlID0gdmFsdWUuZW5kID8gdGhpcy5jb252ZXJ0UGF0dGVybkRhdGVGb3JtYXQodmFsdWUuZW5kKSA6ICcnO1xuXG4gICAgaWYgKHRoaXMucmVxdWlyZWREYXRlUmFuZ2VGYWlsZWQoc3RhcnREYXRlLCBlbmREYXRlKSkge1xuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnJztcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVxdWlyZWQ6IHtcbiAgICAgICAgICB2YWxpZDogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMudmVyaWZ5VmFsaWREYXRlKHN0YXJ0RGF0ZSwgZW5kRGF0ZSkpIHtcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gdGhpcy5saXRlcmFscy5pbnZhbGlkRGF0ZTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGU6IHtcbiAgICAgICAgICB2YWxpZDogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRlUmFuZ2VPYmplY3RGYWlsZWQoY29udHJvbC52YWx1ZSkgfHwgdGhpcy5kYXRlUmFuZ2VGb3JtYXRGYWlsZWQoc3RhcnREYXRlLCBlbmREYXRlKSkge1xuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmxpdGVyYWxzLmludmFsaWRGb3JtYXQ7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGU6IHtcbiAgICAgICAgICB2YWxpZDogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRlUmFuZ2VGYWlsZWQoc3RhcnREYXRlLCBlbmREYXRlKSkge1xuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmxpdGVyYWxzLnN0YXJ0RGF0ZUdyZWF0ZXJUaGFuRW5kRGF0ZTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0ZToge1xuICAgICAgICAgIHZhbGlkOiBmYWxzZVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICgoc3RhcnREYXRlICYmICF0aGlzLnZhbGlkYXRlRGF0ZUluUmFuZ2Uoc3RhcnREYXRlKSkgfHwgKGVuZERhdGUgJiYgIXRoaXMudmFsaWRhdGVEYXRlSW5SYW5nZShlbmREYXRlKSkpIHtcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gdGhpcy5saXRlcmFscy5kYXRlT3V0T2ZQZXJpb2Q7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGU6IHtcbiAgICAgICAgICB2YWxpZDogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhbGlkYXRlRGF0ZUluUmFuZ2Uoc3RhcnREYXRlOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdmFsaWRhdGVEYXRlUmFuZ2UoY29udmVydElzb1RvRGF0ZShzdGFydERhdGUsIGZhbHNlLCBmYWxzZSksIHRoaXMuX21pbkRhdGUsIHRoaXMuX21heERhdGUpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZShkYXRlUmFuZ2U6IFBvRGF0ZXBpY2tlclJhbmdlKTogdm9pZCB7XG4gICAgdGhpcy5yZXNldERhdGVSYW5nZUlucHV0VmFsaWRhdGlvbigpO1xuXG4gICAgaWYgKCFkYXRlUmFuZ2UgfHwgdGhpcy5kYXRlUmFuZ2VPYmplY3RGYWlsZWQoZGF0ZVJhbmdlKSkge1xuICAgICAgdGhpcy5kYXRlUmFuZ2UgPSB7IHN0YXJ0OiAnJywgZW5kOiAnJyB9O1xuICAgIH1cblxuICAgIGlmICghZGF0ZVJhbmdlKSB7XG4gICAgICB0aGlzLnZhbGlkYXRlTW9kZWwodGhpcy5kYXRlUmFuZ2UpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRhdGVSYW5nZU9iamVjdEZhaWxlZChkYXRlUmFuZ2UpKSB7XG4gICAgICB0aGlzLnVwZGF0ZU1vZGVsKGRhdGVSYW5nZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNEYXRlUmFuZ2VPYmplY3QoZGF0ZVJhbmdlKSkge1xuICAgICAgdGhpcy5kYXRlUmFuZ2UgPSB7XG4gICAgICAgIHN0YXJ0OiB0aGlzLmNvbnZlcnRQYXR0ZXJuRGF0ZUZvcm1hdChkYXRlUmFuZ2Uuc3RhcnQpLFxuICAgICAgICBlbmQ6IHRoaXMuY29udmVydFBhdHRlcm5EYXRlRm9ybWF0KGRhdGVSYW5nZS5lbmQpXG4gICAgICB9O1xuXG4gICAgICB0aGlzLnVwZGF0ZU1vZGVsKHRoaXMuZGF0ZVJhbmdlKTtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVNjcmVlbkJ5TW9kZWwodGhpcy5kYXRlUmFuZ2UpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGRhdGVGb3JtYXRGYWlsZWQodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB2YWx1ZSAmJiAhdGhpcy5wb0RhdGVTZXJ2aWNlLmlzVmFsaWRJc28odmFsdWUpO1xuICB9XG5cbiAgLy8gRXhlY3V0YSBhIGZ1bsOnw6NvIG9uQ2hhbmdlXG4gIHByb3RlY3RlZCB1cGRhdGVNb2RlbCh2YWx1ZTogYW55KSB7XG4gICAgY29uc3QgbW9kZWwgPSB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnID8geyAuLi52YWx1ZSB9IDogdmFsdWU7XG4gICAgLy8gUXVhbmRvIG8gaW5wdXQgbsOjbyBwb3NzdWkgdW0gZm9ybXVsw6FyaW8sIGVudMOjbyBlc3RhIGZ1bsOnw6NvIG7Do28gw6kgcmVnaXN0cmFkYVxuICAgIGlmICh0aGlzLm9uQ2hhbmdlTW9kZWwpIHtcbiAgICAgIHRoaXMub25DaGFuZ2VNb2RlbChtb2RlbCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHZhbGlkYXRlTW9kZWwodmFsdWU6IGFueSkge1xuICAgIGNvbnN0IG1vZGVsID0geyAuLi52YWx1ZSB9O1xuICAgIGlmICh0aGlzLnZhbGlkYXRvckNoYW5nZSkge1xuICAgICAgdGhpcy52YWxpZGF0b3JDaGFuZ2UobW9kZWwpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCB2ZXJpZnlWYWxpZERhdGUoc3RhcnREYXRlOiBzdHJpbmcsIGVuZERhdGU6IHN0cmluZykge1xuICAgIGlmIChzdGFydERhdGUgIT09ICcnICYmIGVuZERhdGUgIT09ICcnKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRlSXNWYWxpZChzdGFydERhdGUpICYmIHRoaXMuZGF0ZUlzVmFsaWQoZW5kRGF0ZSk7XG4gICAgfSBlbHNlIGlmIChzdGFydERhdGUgIT09ICcnKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRlSXNWYWxpZChzdGFydERhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRlSXNWYWxpZChlbmREYXRlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRQYXR0ZXJuRGF0ZUZvcm1hdCh2YWx1ZTogYW55KSB7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgcmV0dXJuIHRoaXMucG9EYXRlU2VydmljZS5jb252ZXJ0RGF0ZVRvSVNPKHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGRhdGVSYW5nZUZhaWxlZChzdGFydERhdGU6IHN0cmluZywgZW5kRGF0ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLnBvRGF0ZVNlcnZpY2UuaXNEYXRlUmFuZ2VWYWxpZChlbmREYXRlLCBzdGFydERhdGUpIHx8ICF0aGlzLmlzU3RhcnREYXRlUmFuZ2VJbnB1dFZhbGlkO1xuICB9XG5cbiAgcHJpdmF0ZSBkYXRlUmFuZ2VGb3JtYXRGYWlsZWQoc3RhcnREYXRlOiBzdHJpbmcsIGVuZERhdGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRhdGVGb3JtYXRGYWlsZWQoZW5kRGF0ZSkgfHwgdGhpcy5kYXRlRm9ybWF0RmFpbGVkKHN0YXJ0RGF0ZSkgfHwgIXRoaXMuaXNEYXRlUmFuZ2VJbnB1dEZvcm1hdFZhbGlkO1xuICB9XG5cbiAgcHJpdmF0ZSBkYXRlUmFuZ2VPYmplY3RGYWlsZWQodmFsdWUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdmFsdWUgJiYgIXRoaXMuaXNEYXRlUmFuZ2VPYmplY3QodmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0RhdGVSYW5nZU9iamVjdCh2YWx1ZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB2YWx1ZSAmJiB2YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnc3RhcnQnKSAmJiB2YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnZW5kJyk7XG4gIH1cblxuICBwcml2YXRlIHJlcXVpcmVkRGF0ZVJhbmdlRmFpbGVkKHN0YXJ0RGF0ZTogc3RyaW5nLCBlbmREYXRlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5pc0RhdGVSYW5nZUlucHV0VmFsaWQgJiZcbiAgICAgIHJlcXVpcmVkRmFpbGVkKHRoaXMucmVxdWlyZWQsIHRoaXMuZGlzYWJsZWQsIHN0YXJ0RGF0ZSkgJiZcbiAgICAgIHJlcXVpcmVkRmFpbGVkKHRoaXMucmVxdWlyZWQsIHRoaXMuZGlzYWJsZWQsIGVuZERhdGUpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZGF0ZUlzVmFsaWQoZGF0ZTogc3RyaW5nKSB7XG4gICAgY29uc3QgW3N0clllYXIsIHN0ck1vbnRoLCBzdHJEYXldID0gZGF0ZS5zcGxpdCgnLScpO1xuICAgIGNvbnN0IHllYXIgPSBOdW1iZXIoc3RyWWVhcik7XG4gICAgY29uc3QgbW9udGggPSBOdW1iZXIoc3RyTW9udGgpO1xuICAgIGNvbnN0IGRheSA9IE51bWJlcihzdHJEYXkpO1xuXG4gICAgLy92ZXJpZmljYcOnw6NvIGRvcyBtZXNlcyBjb20gMzEgZGlhc1xuICAgIGlmIChtb250aCA9PT0gMSB8fCBtb250aCA9PT0gMyB8fCBtb250aCA9PT0gNSB8fCBtb250aCA9PT0gNyB8fCBtb250aCA9PT0gOCB8fCBtb250aCA9PT0gMTAgfHwgbW9udGggPT09IDEyKSB7XG4gICAgICByZXR1cm4gZGF5IDwgMSB8fCBkYXkgPiAzMSA/IGZhbHNlIDogdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKG1vbnRoID09PSA0IHx8IG1vbnRoID09PSA2IHx8IG1vbnRoID09PSA5IHx8IG1vbnRoID09PSAxMSkge1xuICAgICAgLy92ZXJpZmljYcOnw6NvIGRvcyBtZXNlcyBjb20gMzAgZGlhc1xuICAgICAgcmV0dXJuIGRheSA8IDEgfHwgZGF5ID4gMzAgPyBmYWxzZSA6IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vdmVyaWZpY2FjYW8gZGUgYW5vIGJpc3NleHRvIHBhcmEgdmVyaWZpY2FyIGF0w6kgcXVhbCBkaWEgaXLDoSBvIG3DqnMgZGUgZmV2ZXJlaXJvXG4gICAgICBpZiAoKHllYXIgJSA0ID09PSAwICYmIHllYXIgJSAxMDAgIT09IDApIHx8IHllYXIgJSA0MDAgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGRheSA8IDEgfHwgZGF5ID4gMjkgPyBmYWxzZSA6IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZGF5IDwgMSB8fCBkYXkgPiAyOCA/IGZhbHNlIDogdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgcmVzZXREYXRlUmFuZ2VJbnB1dFZhbGlkYXRpb24oKTogdm9pZDtcblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgdXBkYXRlU2NyZWVuQnlNb2RlbChkYXRlUmFuZ2U6IFBvRGF0ZXBpY2tlclJhbmdlKTtcbn1cbiJdfQ==
539
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tZGF0ZXBpY2tlci1yYW5nZS1iYXNlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby1maWVsZC9wby1kYXRlcGlja2VyLXJhbmdlL3BvLWRhdGVwaWNrZXItcmFuZ2UtYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBcUIsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTFGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFFckYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUvQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUdqSCxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7OztBQUVsRjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdDRztBQUVILE1BQU0sT0FBZ0IsOEJBQThCO0lBcVZsRCxZQUFzQixhQUE0QixFQUFFLGVBQWtDO1FBQWhFLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBcFZsRDs7Ozs7Ozs7OztXQVVHO1FBQ29DLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFtQ2xFOzs7Ozs7V0FNRztRQUNpQixhQUFRLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFFMUUsaUJBQVksR0FBVyxFQUFFLENBQUM7UUFDMUIsY0FBUyxHQUFzQixFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDO1FBRTVDLFdBQU0sR0FB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QzNDO1NBQ0Y7SUFDSCxDQUFDOzs0R0F6aEJtQiw4QkFBOEI7aUZBQTlCLDhCQUE4QjtBQVlYO0lBQWYsWUFBWSxFQUFFO2lFQUE0Qjt1RkFaOUMsOEJBQThCO2NBRG5ELFNBQVM7Z0dBYStCLFNBQVM7a0JBQS9DLEtBQUs7bUJBQUMsY0FBYztZQVNKLElBQUk7a0JBQXBCLEtBQUs7bUJBQUMsUUFBUTtZQVNHLEtBQUs7a0JBQXRCLEtBQUs7bUJBQUMsU0FBUztZQWVLLFFBQVE7a0JBQTVCLEtBQUs7bUJBQUMsWUFBWTtZQVNDLFFBQVE7a0JBQTNCLE1BQU07bUJBQUMsVUFBVTtZQXVDSSxLQUFLO2tCQUExQixLQUFLO21CQUFDLFNBQVM7WUFpQlMsUUFBUTtrQkFBaEMsS0FBSzttQkFBQyxZQUFZO1lBaUJNLE9BQU87a0JBQS9CLEtBQUs7bUJBQUMsWUFBWTtZQStDTSxRQUFRO2tCQUFoQyxLQUFLO21CQUFDLFlBQVk7WUF1Qk0sT0FBTztrQkFBL0IsS0FBSzttQkFBQyxZQUFZO1lBd0JNLE9BQU87a0JBQS9CLEtBQUs7bUJBQUMsWUFBWTtZQTBCYSxjQUFjO2tCQUE3QyxLQUFLO21CQUFDLG1CQUFtQjtZQWlCRCxRQUFRO2tCQUFoQyxLQUFLO21CQUFDLFlBQVk7WUFtQk0sUUFBUTtrQkFBaEMsS0FBSzttQkFBQyxZQUFZO1lBZ0JPLFlBQVk7a0JBQXJDLEtBQUs7bUJBQUMsaUJBQWlCO1lBU0csU0FBUztrQkFBbkMsS0FBSzttQkFBQyxjQUFjO1lBcUJFLE1BQU07a0JBQTVCLEtBQUs7bUJBQUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBEaXJlY3RpdmUsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBDb250cm9sVmFsdWVBY2Nlc3NvciwgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9yIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSW5wdXRCb29sZWFuIH0gZnJvbSAnLi4vLi4vLi4vZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBwb0xvY2FsZURlZmF1bHQgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9wby1sYW5ndWFnZS9wby1sYW5ndWFnZS5jb25zdGFudCc7XG5pbXBvcnQgeyBQb0xhbmd1YWdlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3BvLWxhbmd1YWdlL3BvLWxhbmd1YWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgcmVxdWlyZWRGYWlsZWQgfSBmcm9tICcuLi92YWxpZGF0b3JzJztcbmltcG9ydCB7IFBvRGF0ZVNlcnZpY2UgfSBmcm9tICcuLy4uLy4uLy4uL3NlcnZpY2VzL3BvLWRhdGUvcG8tZGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IGNvbnZlcnRJc29Ub0RhdGUsIGNvbnZlcnRUb0Jvb2xlYW4sIHNldFllYXJGcm9tMFRvMTAwLCB2YWxpZGF0ZURhdGVSYW5nZSB9IGZyb20gJy4vLi4vLi4vLi4vdXRpbHMvdXRpbCc7XG5pbXBvcnQgeyBQb0RhdGVwaWNrZXJSYW5nZUxpdGVyYWxzIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLWRhdGVwaWNrZXItcmFuZ2UtbGl0ZXJhbHMuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvRGF0ZXBpY2tlclJhbmdlIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLWRhdGVwaWNrZXItcmFuZ2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IHBvRGF0ZXBpY2tlclJhbmdlTGl0ZXJhbHNEZWZhdWx0IH0gZnJvbSAnLi9wby1kYXRlcGlja2VyLXJhbmdlLmxpdGVyYWxzJztcblxuLyoqXG4gKiBAZGVzY3JpcHRpb25cbiAqXG4gKiBPIGBwby1kYXRlcGlja2VyLXJhbmdlYCDDqSB1bSBjb21wb25lbnRlIHBhcmEgc2VsZcOnw6NvIGRlIHVtIHBlcsOtb2RvIGVudHJlIGR1YXMgZGF0YXMsIG9uZGUgw6kgcG9zc8OtdmVsIGluZm9ybWFyIGFwZW5hc1xuICogYSBkYXRhIGluaWNpYWwgb3UgYSBkYXRhIGZpbmFsLlxuICpcbiAqIE8gY29tcG9uZW50ZSBgWyhuZ01vZGVsKV1gIGRvIGBwby1kYXRlcGlja2VyLXJhbmdlYCB0cmFiYWxoYSBjb20gdW0gb2JqZXRvIHF1ZSBpbXBsZW1lbnRhIGEgaW50ZXJmYWNlXG4gKiBgUG9EYXRlcGlja2VyUmFuZ2VgLCBjb250ZW5kbyBhcyBzZWd1aW50ZXMgcHJvcHJpZWRhZGVzOlxuICogYGBgXG4gKiB7IFwic3RhcnRcIjogJzIwMTctMTEtMjgnLCBcImVuZFwiOiAnMjAxNy0xMS0zMCcgfVxuICogYGBgXG4gKlxuICogPGEgaWQ9XCJhY2NlcHRlZC1mb3JtYXRzXCI+PC9hPlxuICogRXN0ZSBjb21wb25lbnRlIHBvZGUgcmVjZWJlciBvcyBzZWd1aW50ZXMgZm9ybWF0b3MgZGUgZGF0YTpcbiAqXG4gKiAtICoqRGF0YSBlIGhvcmEgY29tYmluYWRvcyAoRTg2MDFEWncpOiB5eXl5LW1tLWRkVGhoOm1tOnNzK3wtaGg6bW0qKlxuICogYGBgXG4gKiAnMjAxNy0xMS0yOFQwMDowMDowMC0wMjowMCc7XG4gKiBgYGBcbiAqXG4gKiAtICoqRGF0YSAoRTg2MDFEQXcuKTogeXl5eS1tbS1kZCoqXG4gKiBgYGBcbiAqICcyMDE3LTExLTI4JztcbiAqIGBgYFxuICpcbiAqIC0gKipKYXZhU2NyaXB0IERhdGUgT2JqZWN0OioqXG4gKiBgYGBcbiAqIG5ldyBEYXRlKDIwMTcsIDEwLCAyOCk7XG4gKiBgYGBcbiAqXG4gKiA+IE8gY29tcG9uZW50ZSByZXNwZWl0YXLDoSBvIGZvcm1hdG8gcGFzc2FkbyBwYXJhIG8gKm1vZGVsKiB2aWEgY29kaWZpY2HDp8Ojby4gUG9yw6ltLCBjYXNvIHNlamEgZmVpdGEgYWx0ZXJhw6fDo28gZW0gYWxndW1cbiAqIGRvcyB2YWxvcmVzIGRlIGRhdGEgZW0gdGVsYSwgbyBjb21wb25lbnRlIGF0cmlidWlyw6EgbyBmb3JtYXRvICoqRGF0YSAoRTg2MDFEQXcuKTogeXl5eS1tbS1kZCoqIGFvIG1vZGVsLlxuICpcbiAqIEltcG9ydGFudGU6XG4gKlxuICogLSBRdWFuZG8gcHJlZW5jaGlkYXMgYSBkYXRhIGluaWNpYWwgZSBmaW5hbCwgYSBkYXRhIGluaWNpYWwgZGV2ZSBzZXIgc2VtcHJlIG1lbm9yIG91IGlndWFsIGEgZGF0YSBmaW5hbDtcbiAqIC0gQW8gcGFzc2FyIHVtYSBkYXRhIGludsOhbGlkYSB2aWEgY29kaWZpY2HDp8OjbywgbyB2YWxvciBzZXLDoSBtYW50aWRvIG5vICptb2RlbCogZSBvIGBpbnB1dGAgZGEgdGVsYSBhcGFyZWNlcsOhIHZhemlvO1xuICogLSBQZXJtaXRlIHRyYWJhbGhhciBjb20gYXMgZHVhcyBkYXRhcyBzZXBhcmFkYW1lbnRlIGF0cmF2w6lzIGRhcyBwcm9wcmllZGFkZXMgYHAtc3RhcnQtZGF0ZWAgZSBgcC1lbmQtZGF0ZWAgbm8gbHVnYXIgZG9cbiAqIGBbKG5nTW9kZWwpXWAsIG5vIGVudGFudG8gc2VtIGEgdmFsaWRhw6fDo28gZG8gZm9ybXVsw6FyaW87XG4gKiAtIFBhcmEgYSB2YWxpZGHDp8OjbyBkbyBmb3JtdWzDoXJpbywgdXRpbGl6ZSBvIGBbKG5nTW9kZWwpXWAuXG4gKi9cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFBvRGF0ZXBpY2tlclJhbmdlQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBWYWxpZGF0b3Ige1xuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBBcGxpY2EgZm9jbyBubyBlbGVtZW50byBhbyBzZXIgaW5pY2lhZG8uXG4gICAqXG4gICAqID4gQ2FzbyBtYWlzIGRlIHVtIGVsZW1lbnRvIHNlamEgY29uZmlndXJhZG8gY29tIGVzc2EgcHJvcHJpZWRhZGUsIGFwZW5hcyBvIMO6bHRpbW8gZWxlbWVudG8gZGVjbGFyYWRvIGNvbSBlbGEgdGVyw6EgbyBmb2NvLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3AtYXV0by1mb2N1cycpIEBJbnB1dEJvb2xlYW4oKSBhdXRvRm9jdXM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBUZXh0byBkZSBhcG9pbyBkbyBjYW1wby5cbiAgICovXG4gIEBJbnB1dCgncC1oZWxwJykgaGVscD86IHN0cmluZztcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBSw7N0dWxvIGRvIGNhbXBvLlxuICAgKi9cbiAgQElucHV0KCdwLWxhYmVsJykgbGFiZWw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGVmaW5lIHNlIGEgaW5kaWNhw6fDo28gZGUgY2FtcG8gb3BjaW9uYWwgc2Vyw6EgZXhpYmlkYS5cbiAgICpcbiAgICogPiBOw6NvIHNlcsOhIGV4aWJpZGEgYSBpbmRpY2HDp8OjbyBzZTpcbiAgICogLSBPIGNhbXBvIGNvbnRlciBgcC1yZXF1aXJlZGA7XG4gICAqIC0gTsOjbyBwb3NzdWlyIGBwLWhlbHBgIGUvb3UgYHAtbGFiZWxgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3Atb3B0aW9uYWwnKSBvcHRpb25hbDogYm9vbGVhbjtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBFdmVudG8gZGlzcGFyYWRvIGFvIGFsdGVyYXIgdmFsb3IgZG8gY2FtcG8uXG4gICAqL1xuICBAT3V0cHV0KCdwLWNoYW5nZScpIG9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIGVycm9yTWVzc2FnZTogc3RyaW5nID0gJyc7XG4gIGRhdGVSYW5nZTogUG9EYXRlcGlja2VyUmFuZ2UgPSB7IHN0YXJ0OiAnJywgZW5kOiAnJyB9O1xuXG4gIHByb3RlY3RlZCBmb3JtYXQ6IGFueSA9ICdkZC9tbS95eXl5JztcbiAgcHJvdGVjdGVkIGlzRGF0ZVJhbmdlSW5wdXRGb3JtYXRWYWxpZDogYm9vbGVhbiA9IHRydWU7XG4gIHByb3RlY3RlZCBpc1N0YXJ0RGF0ZVJhbmdlSW5wdXRWYWxpZDogYm9vbGVhbiA9IHRydWU7XG4gIHByb3RlY3RlZCBvblRvdWNoZWRNb2RlbDogYW55O1xuXG4gIHByaXZhdGUgX2NsZWFuPzogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9kaXNhYmxlZD87XG4gIHByaXZhdGUgX2VuZERhdGU/O1xuICBwcml2YXRlIF9saXRlcmFscz86IGFueTtcbiAgcHJpdmF0ZSBfbWF4RGF0ZTogRGF0ZTtcbiAgcHJpdmF0ZSBfbWluRGF0ZTogRGF0ZTtcbiAgcHJpdmF0ZSBfbm9BdXRvY29tcGxldGU/OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX3JlYWRvbmx5OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX3JlcXVpcmVkPzogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9zdGFydERhdGU/O1xuICBwcml2YXRlIF9sb2NhbGU/OiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBsYW5ndWFnZTtcbiAgcHJpdmF0ZSBvbkNoYW5nZU1vZGVsOiBhbnk7XG4gIHByaXZhdGUgdmFsaWRhdG9yQ2hhbmdlOiBhbnk7XG5cbiAgZ2V0IGlzRGF0ZVJhbmdlSW5wdXRWYWxpZCgpIHtcbiAgICByZXR1cm4gdGhpcy5pc0RhdGVSYW5nZUlucHV0Rm9ybWF0VmFsaWQgJiYgdGhpcy5pc1N0YXJ0RGF0ZVJhbmdlSW5wdXRWYWxpZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEhhYmlsaXRhIGHDp8OjbyBwYXJhIGxpbXBhciBvIGNhbXBvLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3AtY2xlYW4nKSBzZXQgY2xlYW4oY2xlYW46IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9jbGVhbiA9IGNvbnZlcnRUb0Jvb2xlYW4oY2xlYW4pO1xuICB9XG5cbiAgZ2V0IGNsZWFuKCkge1xuICAgIHJldHVybiB0aGlzLl9jbGVhbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIERlc2FiaWxpdGEgbyBjYW1wby5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KCdwLWRpc2FibGVkJykgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZGlzYWJsZWQgPSBjb252ZXJ0VG9Cb29sZWFuKHZhbHVlKTtcblxuICAgIHRoaXMudmFsaWRhdGVNb2RlbCh0aGlzLmRhdGVSYW5nZSk7XG4gIH1cblxuICBnZXQgZGlzYWJsZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGF0YSBmaW5hbC5cbiAgICovXG4gIEBJbnB1dCgncC1lbmQtZGF0ZScpIHNldCBlbmREYXRlKGRhdGU6IHN0cmluZyB8IERhdGUpIHtcbiAgICB0aGlzLl9lbmREYXRlID0gdGhpcy5jb252ZXJ0UGF0dGVybkRhdGVGb3JtYXQoZGF0ZSk7XG4gICAgdGhpcy5kYXRlUmFuZ2UuZW5kID0gdGhpcy5lbmREYXRlO1xuXG4gICAgdGhpcy51cGRhdGVTY3JlZW5CeU1vZGVsKHRoaXMuZGF0ZVJhbmdlKTtcbiAgICB0aGlzLnVwZGF0ZU1vZGVsKHRoaXMuZGF0ZVJhbmdlKTtcbiAgfVxuXG4gIGdldCBlbmREYXRlKCkge1xuICAgIHJldHVybiB0aGlzLl9lbmREYXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogT2JqZXRvIGNvbSBhcyBsaXRlcmFpcyB1c2FkYXMgbm8gYHBvLWRhdGVwaWNrZXItcmFuZ2VgLlxuICAgKlxuICAgKiBFeGlzdGVtIGR1YXMgbWFuZWlyYXMgZGUgY3VzdG9taXphciBvIGNvbXBvbmVudGUsIHBhc3NhbmRvIHVtIG9iamV0byBjb20gdG9kYXMgYXMgbGl0ZXJhaXMgZGlzcG9uw612ZWlzOlxuICAgKlxuICAgKiBgYGBcbiAgICogIGNvbnN0IGN1c3RvbUxpdGVyYWxzOiBQb0RhdGVwaWNrZXJSYW5nZUxpdGVyYWxzID0ge1xuICAgKiAgICBpbnZhbGlkRm9ybWF0OiAnRGF0ZSBpbiBpbmNvbnNpc3RlbnQgZm9ybWF0JyxcbiAgICogICAgc3RhcnREYXRlR3JlYXRlclRoYW5FbmREYXRlOiAnRW5kIGRhdGUgbGVzcyB0aGFuIHN0YXJ0IGRhdGUnXG4gICAqICB9O1xuICAgKiBgYGBcbiAgICpcbiAgICogT3UgcGFzc2FuZG8gYXBlbmFzIGFzIGxpdGVyYWlzIHF1ZSBkZXNlamEgY3VzdG9taXphcjpcbiAgICpcbiAgICogYGBgXG4gICAqICBjb25zdCBjdXN0b21MaXRlcmFsczogUG9EYXRlcGlja2VyUmFuZ2VMaXRlcmFscyA9IHtcbiAgICogICAgaW52YWxpZEZvcm1hdDogJ0RhdGUgaW4gaW5jb25zaXN0ZW50IGZvcm1hdCdcbiAgICogIH07XG4gICAqIGBgYFxuICAgKlxuICAgKiBFIHBhcmEgY2FycmVnYXIgYXMgbGl0ZXJhaXMgY3VzdG9taXphZGFzLCBiYXN0YSBhcGVuYXMgcGFzc2FyIG8gb2JqZXRvIHBhcmEgbyBjb21wb25lbnRlLlxuICAgKlxuICAgKiBgYGBcbiAgICogPHBvLWRhdGVwaWNrZXItcmFuZ2VcbiAgICogICBbcC1saXRlcmFsc109XCJjdXN0b21MaXRlcmFsc1wiPlxuICAgKiA8L3BvLWRhdGVwaWNrZXItcmFuZ2U+XG4gICAqIGBgYFxuICAgKlxuICAgKiA+IE8gb2JqZXRvIHBhZHLDo28gZGUgbGl0ZXJhaXMgc2Vyw6EgdHJhZHV6aWRvIGRlIGFjb3JkbyBjb20gbyBpZGlvbWEgZG9cbiAgICogW2BQb0kxOG5TZXJ2aWNlYF0oL2RvY3VtZW50YXRpb24vcG8taTE4bikgb3UgZG8gYnJvd3Nlci5cbiAgICovXG4gIEBJbnB1dCgncC1saXRlcmFscycpIHNldCBsaXRlcmFscyh2YWx1ZTogUG9EYXRlcGlja2VyUmFuZ2VMaXRlcmFscykge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCAmJiAhKHZhbHVlIGluc3RhbmNlb2YgQXJyYXkpKSB7XG4gICAgICB0aGlzLl9saXRlcmFscyA9IHtcbiAgICAgICAgLi4ucG9EYXRlcGlja2VyUmFuZ2VMaXRlcmFsc0RlZmF1bHRbcG9Mb2NhbGVEZWZhdWx0XSxcbiAgICAgICAgLi4ucG9EYXRlcGlja2VyUmFuZ2VMaXRlcmFsc0RlZmF1bHRbdGhpcy5sYW5ndWFnZV0sXG4gICAgICAgIC4uLnZhbHVlXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9saXRlcmFscyA9IHBvRGF0ZXBpY2tlclJhbmdlTGl0ZXJhbHNEZWZhdWx0W3RoaXMubGFuZ3VhZ2VdO1xuICAgIH1cbiAgfVxuXG4gIGdldCBsaXRlcmFscygpIHtcbiAgICByZXR1cm4gdGhpcy5fbGl0ZXJhbHMgfHwgcG9EYXRlcGlja2VyUmFuZ2VMaXRlcmFsc0RlZmF1bHRbdGhpcy5sYW5ndWFnZV07XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBEZWZpbmUgdW1hIGRhdGEgbcOtbmltYSBwYXJhIG8gYHBvLWRhdGVwaWNrZXItcmFuZ2VgLlxuICAgKi9cbiAgQElucHV0KCdwLW1pbi1kYXRlJykgc2V0IG1pbkRhdGUodmFsdWU6IHN0cmluZyB8IERhdGUpIHtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICBjb25zdCB5ZWFyID0gdmFsdWUuZ2V0RnVsbFllYXIoKTtcblxuICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHllYXIsIHZhbHVlLmdldE1vbnRoKCksIHZhbHVlLmdldERhdGUoKSwgMCwgMCwgMCk7XG4gICAgICBzZXRZZWFyRnJvbTBUbzEwMChkYXRlLCB5ZWFyKTtcblxuICAgICAgdGhpcy5fbWluRGF0ZSA9IGRhdGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX21pbkRhdGUgPSBjb252ZXJ0SXNvVG9EYXRlKHZhbHVlLCB0cnVlLCBmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IG1pbkRhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX21pbkRhdGU7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBEZWZpbmUgdW1hIGRhdGEgbcOheGltYSBwYXJhIG8gYHBvLWRhdGVwaWNrZXItcmFuZ2VgLlxuICAgKi9cbiAgQElucHV0KCdwLW1heC1kYXRlJykgc2V0IG1heERhdGUodmFsdWU6IHN0cmluZyB8IERhdGUpIHtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICBjb25zdCB5ZWFyID0gdmFsdWUuZ2V0RnVsbFllYXIoKTtcblxuICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHllYXIsIHZhbHVlLmdldE1vbnRoKCksIHZhbHVlLmdldERhdGUoKSwgMjMsIDU5LCA1OSk7XG4gICAgICBzZXRZZWFyRnJvbTBUbzEwMChkYXRlLCB5ZWFyKTtcblxuICAgICAgdGhpcy5fbWF4RGF0ZSA9IGRhdGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX21heERhdGUgPSBjb252ZXJ0SXNvVG9EYXRlKHZhbHVlLCBmYWxzZSwgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IG1heERhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX21heERhdGU7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBEZWZpbmUgYSBwcm9wcmllZGFkZSBuYXRpdmEgYGF1dG9jb21wbGV0ZWAgZG8gY2FtcG8gY29tbyBgb2ZmYC5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KCdwLW5vLWF1dG9jb21wbGV0ZScpIHNldCBub0F1dG9jb21wbGV0ZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX25vQXV0b2NvbXBsZXRlID0gY29udmVydFRvQm9vbGVhbih2YWx1ZSk7XG4gIH1cblxuICBnZXQgbm9BdXRvY29tcGxldGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX25vQXV0b2NvbXBsZXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogSW5kaWNhIHF1ZSBvIGNhbXBvIHNlcsOhIHNvbWVudGUgbGVpdHVyYS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KCdwLXJlYWRvbmx5Jykgc2V0IHJlYWRvbmx5KHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fcmVhZG9ubHkgPSBjb252ZXJ0VG9Cb29sZWFuKHZhbHVlKTtcblxuICAgIHRoaXMudmFsaWRhdGVNb2RlbCh0aGlzLmRhdGVSYW5nZSk7XG4gIH1cblxuICBnZXQgcmVhZG9ubHkoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRvbmx5O1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGVmaW5lIHF1ZSBvIGNhbXBvIHNlcsOhIG9icmlnYXTDs3Jpby5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KCdwLXJlcXVpcmVkJykgc2V0IHJlcXVpcmVkKHJlcXVpcmVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5fcmVxdWlyZWQgPSBjb252ZXJ0VG9Cb29sZWFuKHJlcXVpcmVkKTtcblxuICAgIHRoaXMudmFsaWRhdGVNb2RlbCh0aGlzLmRhdGVSYW5nZSk7XG4gIH1cblxuICBnZXQgcmVxdWlyZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlcXVpcmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZSBzZSBhIGluZGljYcOnw6NvIGRlIGNhbXBvIG9icmlnYXTDs3JpbyBzZXLDoSBleGliaWRhLlxuICAgKlxuICAgKiA+IE7Do28gc2Vyw6EgZXhpYmlkYSBhIGluZGljYcOnw6NvIHNlOlxuICAgKiAtIE7Do28gcG9zc3VpciBgcC1oZWxwYCBlL291IGBwLWxhYmVsYC5cbiAgICovXG4gIEBJbnB1dCgncC1zaG93LXJlcXVpcmVkJykgc2hvd1JlcXVpcmVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGF0YSBpbmljaWFsLlxuICAgKi9cbiAgQElucHV0KCdwLXN0YXJ0LWRhdGUnKSBzZXQgc3RhcnREYXRlKGRhdGU6IHN0cmluZyB8IERhdGUpIHtcbiAgICB0aGlzLl9zdGFydERhdGUgPSB0aGlzLmNvbnZlcnRQYXR0ZXJuRGF0ZUZvcm1hdChkYXRlKTtcbiAgICB0aGlzLmRhdGVSYW5nZS5zdGFydCA9IHRoaXMuc3RhcnREYXRlO1xuXG4gICAgdGhpcy51cGRhdGVTY3JlZW5CeU1vZGVsKHRoaXMuZGF0ZVJhbmdlKTtcbiAgICB0aGlzLnVwZGF0ZU1vZGVsKHRoaXMuZGF0ZVJhbmdlKTtcbiAgfVxuXG4gIGdldCBzdGFydERhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXJ0RGF0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIElkaW9tYSBxdWUgbyBjYWxlbmTDoXJpbyB1dGlsaXphcsOhIHBhcmEgZXhpYmlyIGFzIGRhdGFzLlxuICAgKlxuICAgKiA+IE8gbG9jYWxlIHBhZHLDo28gc2Vyw6EgcmVjdXBlcmFkbyBjb20gYmFzZSBubyBbYFBvSTE4blNlcnZpY2VgXSgvZG9jdW1lbnRhdGlvbi9wby1pMThuKSBvdSAqYnJvd3NlciouXG4gICAqL1xuICBASW5wdXQoJ3AtbG9jYWxlJykgc2V0IGxvY2FsZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLl9sb2NhbGUgPSB2YWx1ZS5sZW5ndGggPj0gMiA/IHZhbHVlIDogcG9Mb2NhbGVEZWZhdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9sb2NhbGUgPSB0aGlzLmxhbmd1YWdlO1xuICAgIH1cbiAgfVxuXG4gIGdldCBsb2NhbGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fbG9jYWxlIHx8IHRoaXMubGFuZ3VhZ2U7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgcG9EYXRlU2VydmljZTogUG9EYXRlU2VydmljZSwgbGFuZ3VhZ2VTZXJ2aWNlOiBQb0xhbmd1YWdlU2VydmljZSkge1xuICAgIHRoaXMubGFuZ3VhZ2UgPSBsYW5ndWFnZVNlcnZpY2UuZ2V0U2hvcnRMYW5ndWFnZSgpO1xuICB9XG5cbiAgLy8gRnVuw6fDo28gaW1wbGVtZW50YWRhIGRvIENvbnRyb2xWYWx1ZUFjY2Vzc29yXG4gIC8vIFVzYWRhIHBhcmEgaW50ZXJjZXB0YXIgb3MgZXN0YWRvcyBkZSBoYWJpbGl0YWRvIHZpYSBmb3JtcyBhcGlcbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuICAvLyBGdW7Dp8OjbyBpbXBsZW1lbnRhZGEgZG8gQ29udHJvbFZhbHVlQWNjZXNzb3JcbiAgLy8gVXNhZGEgcGFyYSBpbnRlcmNlcHRhciBhcyBtdWRhbsOnYXMgZSBuw6NvIGF0dWFsaXphciBhdXRvbWF0aWNhbWVudGUgbyBNb2RlbFxuICByZWdpc3Rlck9uQ2hhbmdlKGZ1bmM6IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2VNb2RlbCA9IGZ1bmM7XG4gIH1cblxuICAvLyBGdW7Dp8OjbyBpbXBsZW1lbnRhZGEgZG8gQ29udHJvbFZhbHVlQWNjZXNzb3JcbiAgLy8gVXNhZGEgcGFyYSBpbnRlcmNlcHRhciBhcyBtdWRhbsOnYXMgZSBuw6NvIGF0dWFsaXphciBhdXRvbWF0aWNhbWVudGUgbyBNb2RlbFxuICByZWdpc3Rlck9uVG91Y2hlZChmdW5jOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZE1vZGVsID0gZnVuYztcbiAgfVxuXG4gIHJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2U/KGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy52YWxpZGF0b3JDaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHZhbGlkYXRlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMge1xuICAgIGNvbnN0IHZhbHVlOiBQb0RhdGVwaWNrZXJSYW5nZSA9IGNvbnRyb2wudmFsdWUgfHwge307XG4gICAgY29uc3Qgc3RhcnREYXRlID0gdmFsdWUuc3RhcnQgPyB0aGlzLmNvbnZlcnRQYXR0ZXJuRGF0ZUZvcm1hdCh2YWx1ZS5zdGFydCkgOiAnJztcbiAgICBjb25zdCBlbmREYXRlID0gdmFsdWUuZW5kID8gdGhpcy5jb252ZXJ0UGF0dGVybkRhdGVGb3JtYXQodmFsdWUuZW5kKSA6ICcnO1xuXG4gICAgaWYgKHRoaXMucmVxdWlyZWREYXRlUmFuZ2VGYWlsZWQoc3RhcnREYXRlLCBlbmREYXRlKSkge1xuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnJztcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVxdWlyZWQ6IHtcbiAgICAgICAgICB2YWxpZDogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMudmVyaWZ5VmFsaWREYXRlKHN0YXJ0RGF0ZSwgZW5kRGF0ZSkpIHtcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gdGhpcy5saXRlcmFscy5pbnZhbGlkRGF0ZTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGU6IHtcbiAgICAgICAgICB2YWxpZDogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRlUmFuZ2VPYmplY3RGYWlsZWQoY29udHJvbC52YWx1ZSkgfHwgdGhpcy5kYXRlUmFuZ2VGb3JtYXRGYWlsZWQoc3RhcnREYXRlLCBlbmREYXRlKSkge1xuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmxpdGVyYWxzLmludmFsaWRGb3JtYXQ7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGU6IHtcbiAgICAgICAgICB2YWxpZDogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRlUmFuZ2VGYWlsZWQoc3RhcnREYXRlLCBlbmREYXRlKSkge1xuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmxpdGVyYWxzLnN0YXJ0RGF0ZUdyZWF0ZXJUaGFuRW5kRGF0ZTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0ZToge1xuICAgICAgICAgIHZhbGlkOiBmYWxzZVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICgoc3RhcnREYXRlICYmICF0aGlzLnZhbGlkYXRlRGF0ZUluUmFuZ2Uoc3RhcnREYXRlKSkgfHwgKGVuZERhdGUgJiYgIXRoaXMudmFsaWRhdGVEYXRlSW5SYW5nZShlbmREYXRlKSkpIHtcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gdGhpcy5saXRlcmFscy5kYXRlT3V0T2ZQZXJpb2Q7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGU6IHtcbiAgICAgICAgICB2YWxpZDogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhbGlkYXRlRGF0ZUluUmFuZ2Uoc3RhcnREYXRlOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdmFsaWRhdGVEYXRlUmFuZ2UoY29udmVydElzb1RvRGF0ZShzdGFydERhdGUsIGZhbHNlLCBmYWxzZSksIHRoaXMuX21pbkRhdGUsIHRoaXMuX21heERhdGUpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZShkYXRlUmFuZ2U6IFBvRGF0ZXBpY2tlclJhbmdlKTogdm9pZCB7XG4gICAgdGhpcy5yZXNldERhdGVSYW5nZUlucHV0VmFsaWRhdGlvbigpO1xuXG4gICAgaWYgKCFkYXRlUmFuZ2UgfHwgdGhpcy5kYXRlUmFuZ2VPYmplY3RGYWlsZWQoZGF0ZVJhbmdlKSkge1xuICAgICAgdGhpcy5kYXRlUmFuZ2UgPSB7IHN0YXJ0OiAnJywgZW5kOiAnJyB9O1xuICAgIH1cblxuICAgIGlmICghZGF0ZVJhbmdlKSB7XG4gICAgICB0aGlzLnZhbGlkYXRlTW9kZWwodGhpcy5kYXRlUmFuZ2UpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRhdGVSYW5nZU9iamVjdEZhaWxlZChkYXRlUmFuZ2UpKSB7XG4gICAgICB0aGlzLnVwZGF0ZU1vZGVsKGRhdGVSYW5nZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNEYXRlUmFuZ2VPYmplY3QoZGF0ZVJhbmdlKSkge1xuICAgICAgdGhpcy5kYXRlUmFuZ2UgPSB7XG4gICAgICAgIHN0YXJ0OiB0aGlzLmNvbnZlcnRQYXR0ZXJuRGF0ZUZvcm1hdChkYXRlUmFuZ2Uuc3RhcnQpLFxuICAgICAgICBlbmQ6IHRoaXMuY29udmVydFBhdHRlcm5EYXRlRm9ybWF0KGRhdGVSYW5nZS5lbmQpXG4gICAgICB9O1xuXG4gICAgICB0aGlzLnVwZGF0ZU1vZGVsKHRoaXMuZGF0ZVJhbmdlKTtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVNjcmVlbkJ5TW9kZWwodGhpcy5kYXRlUmFuZ2UpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGRhdGVGb3JtYXRGYWlsZWQodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB2YWx1ZSAmJiAhdGhpcy5wb0RhdGVTZXJ2aWNlLmlzVmFsaWRJc28odmFsdWUpO1xuICB9XG5cbiAgLy8gRXhlY3V0YSBhIGZ1bsOnw6NvIG9uQ2hhbmdlXG4gIHByb3RlY3RlZCB1cGRhdGVNb2RlbCh2YWx1ZTogYW55KSB7XG4gICAgY29uc3QgbW9kZWwgPSB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnID8geyAuLi52YWx1ZSB9IDogdmFsdWU7XG4gICAgLy8gUXVhbmRvIG8gaW5wdXQgbsOjbyBwb3NzdWkgdW0gZm9ybXVsw6FyaW8sIGVudMOjbyBlc3RhIGZ1bsOnw6NvIG7Do28gw6kgcmVnaXN0cmFkYVxuICAgIGlmICh0aGlzLm9uQ2hhbmdlTW9kZWwpIHtcbiAgICAgIHRoaXMub25DaGFuZ2VNb2RlbChtb2RlbCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHZhbGlkYXRlTW9kZWwodmFsdWU6IGFueSkge1xuICAgIGNvbnN0IG1vZGVsID0geyAuLi52YWx1ZSB9O1xuICAgIGlmICh0aGlzLnZhbGlkYXRvckNoYW5nZSkge1xuICAgICAgdGhpcy52YWxpZGF0b3JDaGFuZ2UobW9kZWwpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCB2ZXJpZnlWYWxpZERhdGUoc3RhcnREYXRlOiBzdHJpbmcsIGVuZERhdGU6IHN0cmluZykge1xuICAgIGlmIChzdGFydERhdGUgIT09ICcnICYmIGVuZERhdGUgIT09ICcnKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRlSXNWYWxpZChzdGFydERhdGUpICYmIHRoaXMuZGF0ZUlzVmFsaWQoZW5kRGF0ZSk7XG4gICAgfSBlbHNlIGlmIChzdGFydERhdGUgIT09ICcnKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRlSXNWYWxpZChzdGFydERhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRlSXNWYWxpZChlbmREYXRlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRQYXR0ZXJuRGF0ZUZvcm1hdCh2YWx1ZTogYW55KSB7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgcmV0dXJuIHRoaXMucG9EYXRlU2VydmljZS5jb252ZXJ0RGF0ZVRvSVNPKHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGRhdGVSYW5nZUZhaWxlZChzdGFydERhdGU6IHN0cmluZywgZW5kRGF0ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLnBvRGF0ZVNlcnZpY2UuaXNEYXRlUmFuZ2VWYWxpZChlbmREYXRlLCBzdGFydERhdGUpIHx8ICF0aGlzLmlzU3RhcnREYXRlUmFuZ2VJbnB1dFZhbGlkO1xuICB9XG5cbiAgcHJpdmF0ZSBkYXRlUmFuZ2VGb3JtYXRGYWlsZWQoc3RhcnREYXRlOiBzdHJpbmcsIGVuZERhdGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRhdGVGb3JtYXRGYWlsZWQoZW5kRGF0ZSkgfHwgdGhpcy5kYXRlRm9ybWF0RmFpbGVkKHN0YXJ0RGF0ZSkgfHwgIXRoaXMuaXNEYXRlUmFuZ2VJbnB1dEZvcm1hdFZhbGlkO1xuICB9XG5cbiAgcHJpdmF0ZSBkYXRlUmFuZ2VPYmplY3RGYWlsZWQodmFsdWUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdmFsdWUgJiYgIXRoaXMuaXNEYXRlUmFuZ2VPYmplY3QodmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0RhdGVSYW5nZU9iamVjdCh2YWx1ZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB2YWx1ZSAmJiB2YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnc3RhcnQnKSAmJiB2YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnZW5kJyk7XG4gIH1cblxuICBwcml2YXRlIHJlcXVpcmVkRGF0ZVJhbmdlRmFpbGVkKHN0YXJ0RGF0ZTogc3RyaW5nLCBlbmREYXRlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5pc0RhdGVSYW5nZUlucHV0VmFsaWQgJiZcbiAgICAgIHJlcXVpcmVkRmFpbGVkKHRoaXMucmVxdWlyZWQsIHRoaXMuZGlzYWJsZWQsIHN0YXJ0RGF0ZSkgJiZcbiAgICAgIHJlcXVpcmVkRmFpbGVkKHRoaXMucmVxdWlyZWQsIHRoaXMuZGlzYWJsZWQsIGVuZERhdGUpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZGF0ZUlzVmFsaWQoZGF0ZTogc3RyaW5nKSB7XG4gICAgY29uc3QgW3N0clllYXIsIHN0ck1vbnRoLCBzdHJEYXldID0gZGF0ZS5zcGxpdCgnLScpO1xuICAgIGNvbnN0IHllYXIgPSBOdW1iZXIoc3RyWWVhcik7XG4gICAgY29uc3QgbW9udGggPSBOdW1iZXIoc3RyTW9udGgpO1xuICAgIGNvbnN0IGRheSA9IE51bWJlcihzdHJEYXkpO1xuXG4gICAgLy92ZXJpZmljYcOnw6NvIGRvcyBtZXNlcyBjb20gMzEgZGlhc1xuICAgIGlmIChtb250aCA9PT0gMSB8fCBtb250aCA9PT0gMyB8fCBtb250aCA9PT0gNSB8fCBtb250aCA9PT0gNyB8fCBtb250aCA9PT0gOCB8fCBtb250aCA9PT0gMTAgfHwgbW9udGggPT09IDEyKSB7XG4gICAgICByZXR1cm4gZGF5IDwgMSB8fCBkYXkgPiAzMSA/IGZhbHNlIDogdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKG1vbnRoID09PSA0IHx8IG1vbnRoID09PSA2IHx8IG1vbnRoID09PSA5IHx8IG1vbnRoID09PSAxMSkge1xuICAgICAgLy92ZXJpZmljYcOnw6NvIGRvcyBtZXNlcyBjb20gMzAgZGlhc1xuICAgICAgcmV0dXJuIGRheSA8IDEgfHwgZGF5ID4gMzAgPyBmYWxzZSA6IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vdmVyaWZpY2FjYW8gZGUgYW5vIGJpc3NleHRvIHBhcmEgdmVyaWZpY2FyIGF0w6kgcXVhbCBkaWEgaXLDoSBvIG3DqnMgZGUgZmV2ZXJlaXJvXG4gICAgICBpZiAoKHllYXIgJSA0ID09PSAwICYmIHllYXIgJSAxMDAgIT09IDApIHx8IHllYXIgJSA0MDAgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGRheSA8IDEgfHwgZGF5ID4gMjkgPyBmYWxzZSA6IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZGF5IDwgMSB8fCBkYXkgPiAyOCA/IGZhbHNlIDogdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgcmVzZXREYXRlUmFuZ2VJbnB1dFZhbGlkYXRpb24oKTogdm9pZDtcblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgdXBkYXRlU2NyZWVuQnlNb2RlbChkYXRlUmFuZ2U6IFBvRGF0ZXBpY2tlclJhbmdlKTtcbn1cbiJdfQ==
@@ -459,7 +459,7 @@ PoDatepickerRangeComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type:
459
459
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.startDateInput = _t.first);
460
460
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.iconCalendar = _t.first);
461
461
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.calendarPicker = _t.first);
462
- } }, features: [i0.ɵɵProvidersFeature(providers), i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature], decls: 18, vars: 27, consts: [[3, "p-help", "p-label", "p-optional"], [1, "po-datepicker-range-field", "po-input"], ["dateRangeField", ""], [1, "po-datepicker-range-start-date"], ["maxlength", "10", "type", "text", 1, "po-datepicker-range-input", 3, "autocomplete", "disabled", "name", "readonly", "blur", "focus", "keydown", "keyup", "click"], ["startDateInput", ""], [1, "po-datepicker-range-separator"], [1, "po-datepicker-range-end-date"], ["endDateInput", ""], [1, "po-datepicker-range-icon"], ["class", "po-icon-input", 3, "p-change-event", 4, "ngIf"], [3, "click"], ["iconCalendar", ""], [3, "p-error-pattern"], [4, "ngIf"], [1, "po-icon-input", 3, "p-change-event"], [1, "po-calendar-range-picker"], ["calendarPicker", ""], ["p-mode", "range", 3, "ngModel", "p-max-date", "p-min-date", "p-locale", "ngModelChange"]], template: function PoDatepickerRangeComponent_Template(rf, ctx) { if (rf & 1) {
462
+ } }, features: [i0.ɵɵProvidersFeature(providers), i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature], decls: 18, vars: 30, consts: [[3, "p-disabled", "p-help", "p-label", "p-optional", "p-required", "p-show-required"], [1, "po-datepicker-range-field", "po-input"], ["dateRangeField", ""], [1, "po-datepicker-range-start-date"], ["maxlength", "10", "type", "text", 1, "po-datepicker-range-input", 3, "autocomplete", "disabled", "name", "readonly", "blur", "focus", "keydown", "keyup", "click"], ["startDateInput", ""], [1, "po-datepicker-range-separator"], [1, "po-datepicker-range-end-date"], ["endDateInput", ""], [1, "po-datepicker-range-icon"], ["class", "po-icon-input", 3, "p-change-event", 4, "ngIf"], [3, "click"], ["iconCalendar", ""], [3, "p-error-pattern"], [4, "ngIf"], [1, "po-icon-input", 3, "p-change-event"], [1, "po-calendar-range-picker"], ["calendarPicker", ""], ["p-mode", "range", 3, "ngModel", "p-max-date", "p-min-date", "p-locale", "ngModelChange"]], template: function PoDatepickerRangeComponent_Template(rf, ctx) { if (rf & 1) {
463
463
  i0.ɵɵelementStart(0, "po-field-container", 0)(1, "div", 1, 2)(3, "div", 3)(4, "input", 4, 5);
464
464
  i0.ɵɵlistener("blur", function PoDatepickerRangeComponent_Template_input_blur_4_listener($event) { return ctx.onBlur($event); })("focus", function PoDatepickerRangeComponent_Template_input_focus_4_listener($event) { return ctx.onFocus($event); })("keydown", function PoDatepickerRangeComponent_Template_input_keydown_4_listener($event) { return ctx.onKeydown($event); })("keyup", function PoDatepickerRangeComponent_Template_input_keyup_4_listener($event) { return ctx.onKeyup($event); })("click", function PoDatepickerRangeComponent_Template_input_click_4_listener($event) { return ctx.eventOnClick($event); });
465
465
  i0.ɵɵelementEnd()();
@@ -480,7 +480,7 @@ PoDatepickerRangeComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type:
480
480
  i0.ɵɵtemplate(17, PoDatepickerRangeComponent_ng_container_17_Template, 4, 4, "ng-container", 14);
481
481
  } if (rf & 2) {
482
482
  i0.ɵɵclassProp("po-date-picker-container-disabled", ctx.disabled);
483
- i0.ɵɵproperty("p-help", ctx.help)("p-label", ctx.label)("p-optional", !ctx.required && ctx.optional);
483
+ i0.ɵɵproperty("p-disabled", ctx.disabled)("p-help", ctx.help)("p-label", ctx.label)("p-optional", ctx.optional)("p-required", ctx.required)("p-show-required", ctx.showRequired);
484
484
  i0.ɵɵadvance(1);
485
485
  i0.ɵɵclassProp("po-datepicker-range-field-disabled", ctx.disabled);
486
486
  i0.ɵɵattribute("disabled", ctx.disabled);
@@ -501,7 +501,7 @@ PoDatepickerRangeComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type:
501
501
  } }, dependencies: [i4.NgIf, i5.NgControlStatus, i5.NgModel, i6.PoCleanComponent, i7.PoCalendarComponent, i8.PoFieldContainerBottomComponent, i9.PoFieldContainerComponent], encapsulation: 2, changeDetection: 0 });
502
502
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PoDatepickerRangeComponent, [{
503
503
  type: Component,
504
- args: [{ selector: 'po-datepicker-range', providers: providers, changeDetection: ChangeDetectionStrategy.OnPush, template: "<po-field-container\n [class.po-date-picker-container-disabled]=\"disabled\"\n [p-help]=\"help\"\n [p-label]=\"label\"\n [p-optional]=\"!required && optional\"\n>\n <div\n #dateRangeField\n class=\"po-datepicker-range-field po-input\"\n [class.po-datepicker-range-field-disabled]=\"disabled\"\n [attr.disabled]=\"disabled\"\n >\n <div class=\"po-datepicker-range-start-date\">\n <input\n #startDateInput\n class=\"po-datepicker-range-input\"\n maxlength=\"10\"\n type=\"text\"\n [attr.aria-label]=\"label\"\n [autocomplete]=\"autocomplete\"\n [disabled]=\"disabled\"\n [name]=\"startDateInputName\"\n [readonly]=\"readonly\"\n (blur)=\"onBlur($event)\"\n (focus)=\"onFocus($event)\"\n (keydown)=\"onKeydown($event)\"\n (keyup)=\"onKeyup($event)\"\n (click)=\"eventOnClick($event)\"\n />\n </div>\n\n <div class=\"po-datepicker-range-separator\">-</div>\n\n <div class=\"po-datepicker-range-end-date\">\n <input\n #endDateInput\n class=\"po-datepicker-range-input\"\n maxlength=\"10\"\n type=\"text\"\n [autocomplete]=\"autocomplete\"\n [disabled]=\"disabled\"\n [name]=\"endDateInputName\"\n [readonly]=\"readonly\"\n (blur)=\"onBlur($event)\"\n (focus)=\"onFocus($event)\"\n (keydown)=\"onKeydown($event)\"\n (keyup)=\"onKeyup($event)\"\n (click)=\"eventOnClick($event)\"\n />\n </div>\n\n <div class=\"po-datepicker-range-icon\">\n <po-clean class=\"po-icon-input\" *ngIf=\"enableCleaner\" (p-change-event)=\"clear()\"></po-clean>\n </div>\n\n <div class=\"po-datepicker-range-icon\">\n <span\n #iconCalendar\n class=\"po-icon po-field-icon po-icon-calendar {{ disabled ? 'po-icon-input-disabled' : 'po-icon-input' }}\"\n [class.po-clickable]=\"!disabled && !readonly\"\n [class.po-field-icon-disabled]=\"disabled || readonly\"\n (click)=\"toggleCalendar()\"\n >\n </span>\n </div>\n </div>\n\n <po-field-container-bottom [p-error-pattern]=\"getErrorMessage\"></po-field-container-bottom>\n</po-field-container>\n\n<ng-container *ngIf=\"isCalendarVisible\">\n <div #calendarPicker class=\"po-calendar-range-picker\">\n <po-calendar\n p-mode=\"range\"\n [ngModel]=\"dateRange\"\n [p-max-date]=\"maxDate\"\n [p-min-date]=\"minDate\"\n [p-locale]=\"locale\"\n (ngModelChange)=\"onCalendarChange($event)\"\n ></po-calendar>\n </div>\n</ng-container>\n" }]
504
+ args: [{ selector: 'po-datepicker-range', providers: providers, changeDetection: ChangeDetectionStrategy.OnPush, template: "<po-field-container\n [class.po-date-picker-container-disabled]=\"disabled\"\n [p-disabled]=\"disabled\"\n [p-help]=\"help\"\n [p-label]=\"label\"\n [p-optional]=\"optional\"\n [p-required]=\"required\"\n [p-show-required]=\"showRequired\"\n>\n <div\n #dateRangeField\n class=\"po-datepicker-range-field po-input\"\n [class.po-datepicker-range-field-disabled]=\"disabled\"\n [attr.disabled]=\"disabled\"\n >\n <div class=\"po-datepicker-range-start-date\">\n <input\n #startDateInput\n class=\"po-datepicker-range-input\"\n maxlength=\"10\"\n type=\"text\"\n [attr.aria-label]=\"label\"\n [autocomplete]=\"autocomplete\"\n [disabled]=\"disabled\"\n [name]=\"startDateInputName\"\n [readonly]=\"readonly\"\n (blur)=\"onBlur($event)\"\n (focus)=\"onFocus($event)\"\n (keydown)=\"onKeydown($event)\"\n (keyup)=\"onKeyup($event)\"\n (click)=\"eventOnClick($event)\"\n />\n </div>\n\n <div class=\"po-datepicker-range-separator\">-</div>\n\n <div class=\"po-datepicker-range-end-date\">\n <input\n #endDateInput\n class=\"po-datepicker-range-input\"\n maxlength=\"10\"\n type=\"text\"\n [autocomplete]=\"autocomplete\"\n [disabled]=\"disabled\"\n [name]=\"endDateInputName\"\n [readonly]=\"readonly\"\n (blur)=\"onBlur($event)\"\n (focus)=\"onFocus($event)\"\n (keydown)=\"onKeydown($event)\"\n (keyup)=\"onKeyup($event)\"\n (click)=\"eventOnClick($event)\"\n />\n </div>\n\n <div class=\"po-datepicker-range-icon\">\n <po-clean class=\"po-icon-input\" *ngIf=\"enableCleaner\" (p-change-event)=\"clear()\"></po-clean>\n </div>\n\n <div class=\"po-datepicker-range-icon\">\n <span\n #iconCalendar\n class=\"po-icon po-field-icon po-icon-calendar {{ disabled ? 'po-icon-input-disabled' : 'po-icon-input' }}\"\n [class.po-clickable]=\"!disabled && !readonly\"\n [class.po-field-icon-disabled]=\"disabled || readonly\"\n (click)=\"toggleCalendar()\"\n >\n </span>\n </div>\n </div>\n\n <po-field-container-bottom [p-error-pattern]=\"getErrorMessage\"></po-field-container-bottom>\n</po-field-container>\n\n<ng-container *ngIf=\"isCalendarVisible\">\n <div #calendarPicker class=\"po-calendar-range-picker\">\n <po-calendar\n p-mode=\"range\"\n [ngModel]=\"dateRange\"\n [p-max-date]=\"maxDate\"\n [p-min-date]=\"minDate\"\n [p-locale]=\"locale\"\n (ngModelChange)=\"onCalendarChange($event)\"\n ></po-calendar>\n </div>\n</ng-container>\n" }]
505
505
  }], function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.PoControlPositionService }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: i2.PoDateService }, { type: i0.ElementRef }, { type: i3.PoLanguageService }]; }, { dateRangeField: [{
506
506
  type: ViewChild,
507
507
  args: ['dateRangeField', { read: ElementRef, static: true }]
@@ -518,4 +518,4 @@ PoDatepickerRangeComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type:
518
518
  type: ViewChild,
519
519
  args: ['calendarPicker', { read: ElementRef }]
520
520
  }] }); })();
521
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tZGF0ZXBpY2tlci1yYW5nZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2NvbXBvbmVudHMvcG8tZmllbGQvcG8tZGF0ZXBpY2tlci1yYW5nZS9wby1kYXRlcGlja2VyLXJhbmdlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby1maWVsZC9wby1kYXRlcGlja2VyLXJhbmdlL3BvLWRhdGVwaWNrZXItcmFuZ2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxFQUVWLFNBQVMsRUFNVCx1QkFBdUIsRUFDeEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWxFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHFFQUFxRSxDQUFDO0FBRy9HLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRXRGLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lDK0J2QyxvQ0FBaUY7SUFBM0IsaU1BQWtCLGVBQUEsY0FBTyxDQUFBLElBQUM7SUFBQyxpQkFBVzs7OztJQWtCbEcsNkJBQXdDO0lBQ3RDLG1DQUFzRCxzQkFBQTtJQU9sRCw2TUFBaUIsZUFBQSwrQkFBd0IsQ0FBQSxJQUFDO0lBQzNDLGlCQUFjLEVBQUE7SUFFbkIsMEJBQWU7OztJQVBULGVBQXFCO0lBQXJCLDBDQUFxQiw4QkFBQSw4QkFBQSwyQkFBQTs7QURsRDNCLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQztBQUN4QixNQUFNLGFBQWEsR0FBRyxFQUFFLENBQUM7QUFDekIs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bUJBQUMsZ0JBQWdCLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgZm9yd2FyZFJlZixcbiAgT25Jbml0LFxuICBWaWV3Q2hpbGQsXG4gIEFmdGVyVmlld0luaXQsXG4gIFJlbmRlcmVyMixcbiAgT25EZXN0cm95LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBPbkNoYW5nZXMsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTkdfVkFMSURBVE9SUywgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IFBvQ29udHJvbFBvc2l0aW9uU2VydmljZSB9IGZyb20gJy4vLi4vLi4vLi4vc2VydmljZXMvcG8tY29udHJvbC1wb3NpdGlvbi9wby1jb250cm9sLXBvc2l0aW9uLnNlcnZpY2UnO1xuXG5pbXBvcnQgeyBQb0RhdGVwaWNrZXJSYW5nZSB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1kYXRlcGlja2VyLXJhbmdlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb0RhdGVwaWNrZXJSYW5nZUJhc2VDb21wb25lbnQgfSBmcm9tICcuL3BvLWRhdGVwaWNrZXItcmFuZ2UtYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUG9EYXRlU2VydmljZSB9IGZyb20gJy4vLi4vLi4vLi4vc2VydmljZXMvcG8tZGF0ZS9wby1kYXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgUG9NYXNrIH0gZnJvbSAnLi4vcG8taW5wdXQvcG8tbWFzayc7XG5pbXBvcnQgeyBQb0xhbmd1YWdlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3BvLWxhbmd1YWdlL3BvLWxhbmd1YWdlLnNlcnZpY2UnO1xuXG5jb25zdCBhcnJvd0xlZnRLZXkgPSAzNztcbmNvbnN0IGFycm93UmlnaHRLZXkgPSAzOTtcbmNvbnN0IGJhY2tzcGFjZUtleSA9IDg7XG5jb25zdCBwb0RhdGVwaWNrZXJSYW5nZURhdGVMZW5ndGhEZWZhdWx0ID0gMTA7XG5cbmNvbnN0IHBvQ2FsZW5kYXJDb250ZW50T2Zmc2V0ID0gODtcbmNvbnN0IHBvQ2FsZW5kYXJQb3NpdGlvbkRlZmF1bHQgPSAnYm90dG9tLWxlZnQnO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuY29uc3QgcHJvdmlkZXJzID0gW1xuICB7XG4gICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUG9EYXRlcGlja2VyUmFuZ2VDb21wb25lbnQpLFxuICAgIG11bHRpOiB0cnVlXG4gIH0sXG4gIHtcbiAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFBvRGF0ZXBpY2tlclJhbmdlQ29tcG9uZW50KSxcbiAgICBtdWx0aTogdHJ1ZVxuICB9LFxuICBQb0NvbnRyb2xQb3NpdGlvblNlcnZpY2Vcbl07XG4vKipcbiAqIEBkb2NzRXh0ZW5kcyBQb0RhdGVwaWNrZXJSYW5nZUJhc2VDb21wb25lbnRcbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1kYXRlcGlja2VyLXJhbmdlLWJhc2ljXCIgdGl0bGU9XCJQTyBEYXRlcGlja2VyIFJhbmdlIEJhc2ljXCI+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1kYXRlcGlja2VyLXJhbmdlLWJhc2ljL3NhbXBsZS1wby1kYXRlcGlja2VyLXJhbmdlLWJhc2ljLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWRhdGVwaWNrZXItcmFuZ2UtYmFzaWMvc2FtcGxlLXBvLWRhdGVwaWNrZXItcmFuZ2UtYmFzaWMuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tZGF0ZXBpY2tlci1yYW5nZS1sYWJzXCIgdGl0bGU9XCJQTyBEYXRlcGlja2VyIFJhbmdlIExhYnNcIj5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWRhdGVwaWNrZXItcmFuZ2UtbGFicy9zYW1wbGUtcG8tZGF0ZXBpY2tlci1yYW5nZS1sYWJzLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWRhdGVwaWNrZXItcmFuZ2UtbGFicy9zYW1wbGUtcG8tZGF0ZXBpY2tlci1yYW5nZS1sYWJzLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLWRhdGVwaWNrZXItcmFuZ2UtdmFjYXRpb25zXCIgdGl0bGU9XCJQTyBEYXRlcGlja2VyIFJhbmdlIC0gVmFjYXRpb25zIFN1Z2dlc3Rpb25cIj5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWRhdGVwaWNrZXItcmFuZ2UtdmFjYXRpb25zL3NhbXBsZS1wby1kYXRlcGlja2VyLXJhbmdlLXZhY2F0aW9ucy5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1kYXRlcGlja2VyLXJhbmdlLXZhY2F0aW9ucy9zYW1wbGUtcG8tZGF0ZXBpY2tlci1yYW5nZS12YWNhdGlvbnMuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tZGF0ZXBpY2tlci1yYW5nZS12YWNhdGlvbnMtcmVhY3RpdmUtZm9ybVwiIHRpdGxlPVwiUE8gRGF0ZXBpY2tlciBSYW5nZSAtIFZhY2F0aW9ucyBSZWFjdGl2ZSBGb3JtXCI+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1kYXRlcGlja2VyLXJhbmdlLXZhY2F0aW9ucy1yZWFjdGl2ZS1mb3JtL3NhbXBsZS1wby1kYXRlcGlja2VyLXJhbmdlLXZhY2F0aW9ucy1yZWFjdGl2ZS1mb3JtLmNvbXBvbmVudC5odG1sXCI+XG4gKiAgPC9maWxlPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tZGF0ZXBpY2tlci1yYW5nZS12YWNhdGlvbnMtcmVhY3RpdmUtZm9ybS9zYW1wbGUtcG8tZGF0ZXBpY2tlci1yYW5nZS12YWNhdGlvbnMtcmVhY3RpdmUtZm9ybS5jb21wb25lbnQudHNcIj5cbiAqICA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3BvLWRhdGVwaWNrZXItcmFuZ2UnLFxuICB0ZW1wbGF0ZVVybDogJy4vcG8tZGF0ZXBpY2tlci1yYW5nZS5jb21wb25lbnQuaHRtbCcsXG4gIHByb3ZpZGVycyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgUG9EYXRlcGlja2VyUmFuZ2VDb21wb25lbnRcbiAgZXh0ZW5kcyBQb0RhdGVwaWNrZXJSYW5nZUJhc2VDb21wb25lbnRcbiAgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcbiAgQFZpZXdDaGlsZCgnZGF0ZVJhbmdlRmllbGQnLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogdHJ1ZSB9KSBkYXRlUmFuZ2VGaWVsZDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnZW5kRGF0ZUlucHV0JywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSkgZW5kRGF0ZUlucHV0OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdzdGFydERhdGVJbnB1dCcsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiB0cnVlIH0pIHN0YXJ0RGF0ZUlucHV0OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdpY29uQ2FsZW5kYXInLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogdHJ1ZSB9KSBpY29uQ2FsZW5kYXI6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2NhbGVuZGFyUGlja2VyJywgeyByZWFkOiBFbGVtZW50UmVmIH0pIGNhbGVuZGFyUGlja2VyOiBFbGVtZW50UmVmO1xuXG4gIGlzQ2FsZW5kYXJWaXNpYmxlID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBjbGlja0xpc3RlbmVyO1xuICBwcml2YXRlIGV2ZW50UmVzaXplTGlzdGVuZXI7XG4gIHByaXZhdGUgcG9EYXRlcGlja2VyUmFuZ2VFbGVtZW50OiBFbGVtZW50UmVmPGFueT47XG4gIHByaXZhdGUgcG9NYXNrT2JqZWN0OiBQb01hc2s7XG5cbiAgZ2V0IGF1dG9jb21wbGV0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5ub0F1dG9jb21wbGV0ZSA/ICdvZmYnIDogJ29uJztcbiAgfVxuXG4gIGdldCBlbmFibGVDbGVhbmVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNsZWFuICYmICh0aGlzLnN0YXJ0RGF0ZUlucHV0VmFsdWUgfHwgdGhpcy5lbmREYXRlSW5wdXRWYWx1ZSkgJiYgIXRoaXMuZGlzYWJsZWQgJiYgIXRoaXMucmVhZG9ubHk7XG4gIH1cblxuICBnZXQgZW5kRGF0ZUlucHV0TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnZW5kLWRhdGUnO1xuICB9XG5cbiAgZ2V0IGVuZERhdGVJbnB1dFZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZW5kRGF0ZUlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWU7XG4gIH1cblxuICBnZXQgZ2V0RXJyb3JNZXNzYWdlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZXJyb3JNZXNzYWdlICE9PSAnJyAmJiB0aGlzLmhhc0ludmFsaWRDbGFzcygpID8gdGhpcy5lcnJvck1lc3NhZ2UgOiAnJztcbiAgfVxuXG4gIGdldCBpc0RhdGVSYW5nZUlucHV0VW5jb21wbGV0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuZW5kRGF0ZUlucHV0VmFsdWUubGVuZ3RoIDwgcG9EYXRlcGlja2VyUmFuZ2VEYXRlTGVuZ3RoRGVmYXVsdCAmJlxuICAgICAgdGhpcy5zdGFydERhdGVJbnB1dFZhbHVlLmxlbmd0aCA8IHBvRGF0ZXBpY2tlclJhbmdlRGF0ZUxlbmd0aERlZmF1bHRcbiAgICApO1xuICB9XG5cbiAgZ2V0IGlzRGlydHlEYXRlUmFuZ2VJbnB1dCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5lbmREYXRlSW5wdXRWYWx1ZS5sZW5ndGggPiAwIHx8IHRoaXMuc3RhcnREYXRlSW5wdXRWYWx1ZS5sZW5ndGggPiAwO1xuICB9XG5cbiAgZ2V0IHN0YXJ0RGF0ZUlucHV0TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnc3RhcnQtZGF0ZSc7XG4gIH1cblxuICBnZXQgc3RhcnREYXRlSW5wdXRWYWx1ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0RGF0ZUlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWU7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGNvbnRyb2xQb3NpdGlvbjogUG9Db250cm9sUG9zaXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwb0RhdGVTZXJ2aWNlOiBQb0RhdGVTZXJ2aWNlLFxuICAgIHBvRGF0ZXBpY2tlclJhbmdlRWxlbWVudDogRWxlbWVudFJlZixcbiAgICBwb0xhbmd1YWdlU2VydmljZTogUG9MYW5ndWFnZVNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIocG9EYXRlU2VydmljZSwgcG9MYW5ndWFnZVNlcnZpY2UpO1xuICAgIHRoaXMucG9EYXRlcGlja2VyUmFuZ2VFbGVtZW50ID0gcG9EYXRlcGlja2VyUmFuZ2VFbGVtZW50O1xuICB9XG5cbiAgc3RhdGljIGdldEtleUNvZGUoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICByZXR1cm4gZXZlbnQua2V5Q29kZSB8fCBldmVudC53aGljaDtcbiAgfVxuXG4gIHN0YXRpYyBnZXRUYXJnZXRFbGVtZW50KGV2ZW50OiBhbnkpIHtcbiAgICByZXR1cm4gZXZlbnQudGFyZ2V0IHx8IGV2ZW50LnNyY0VsZW1lbnQ7XG4gIH1cblxuICBzdGF0aWMgaXNWYWxpZEtleShrZXlDb2RlOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCBpc051bWVyaWNLZXkgPSBrZXlDb2RlID49IDQ4ICYmIGtleUNvZGUgPD0gNTc7XG4gICAgY29uc3QgaXNOdW1lcmljTnVtcGFkS2V5ID0ga2V5Q29kZSA+PSA5NiAmJiBrZXlDb2RlIDw9IDEwNTtcblxuICAgIHJldHVybiBpc051bWVyaWNLZXkgfHwgaXNOdW1lcmljTnVtcGFkS2V5O1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGlmICh0aGlzLmF1dG9Gb2N1cykge1xuICAgICAgdGhpcy5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIC8vIENsYXNzZSBkZSBtw6FzY2FyYVxuICAgIHRoaXMucG9NYXNrT2JqZWN0ID0gdGhpcy5idWlsZE1hc2soKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlcy5taW5EYXRlIHx8IGNoYW5nZXMubWF4RGF0ZSkge1xuICAgICAgdGhpcy52YWxpZGF0ZU1vZGVsKHRoaXMuZGF0ZVJhbmdlKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnJlbW92ZUxpc3RlbmVycygpO1xuICB9XG5cbiAgY2xlYXIoKSB7XG4gICAgdGhpcy5yZXNldERhdGVSYW5nZUlucHV0VmFsaWRhdGlvbigpO1xuICAgIHRoaXMuZGF0ZVJhbmdlID0geyBzdGFydDogJycsIGVuZDogJycgfTtcblxuICAgIHRoaXMudXBkYXRlU2NyZWVuQnlNb2RlbCh0aGlzLmRhdGVSYW5nZSk7XG4gICAgdGhpcy51cGRhdGVNb2RlbCh0aGlzLmRhdGVSYW5nZSk7XG4gIH1cblxuICBldmVudE9uQ2xpY2soJGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnBvTWFza09iamVjdC5jbGljaygkZXZlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZ1bsOnw6NvIHF1ZSBhdHJpYnVpIGZvY28gYW8gY29tcG9uZW50ZS5cbiAgICpcbiAgICogUGFyYSB1dGlsaXrDoS1sYSDDqSBuZWNlc3PDoXJpbyB0ZXIgYSBpbnN0w6JuY2lhIGRvIGNvbXBvbmVudGUgbm8gRE9NLCBwb2RlbmRvIHNlciB1dGlsaXphZG8gbyBWaWV3Q2hpbGQgZGEgc2VndWludGUgZm9ybWE6XG4gICAqXG4gICAqIGBgYFxuICAgKiBpbXBvcnQgeyBQb0RhdGVwaWNrZXJSYW5nZUNvbXBvbmVudCB9IGZyb20gJ0Bwby11aS9uZy1jb21wb25lbnRzJztcbiAgICpcbiAgICogLi4uXG4gICAqXG4gICAqIEBWaWV3Q2hpbGQoUG9EYXRlcGlja2VyUmFuZ2VDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pIGRhdGVwaWNrZXJSYW5nZTogUG9EYXRlcGlja2VyUmFuZ2VDb21wb25lbnQ7XG4gICAqXG4gICAqIGZvY3VzRGF0ZXBpY2tlclJhbmdlKCkge1xuICAgKiAgIHRoaXMuZGF0ZXBpY2tlclJhbmdlLmZvY3VzKCk7XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBmb2N1cygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuc3RhcnREYXRlSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIG9uQmx1cihldmVudDogYW55KSB7XG4gICAgdGhpcy5vblRvdWNoZWRNb2RlbD8uKCk7XG4gICAgY29uc3QgaXNTdGFydERhdGVUYXJnZXRFdmVudCA9IGV2ZW50LnRhcmdldC5uYW1lID09PSB0aGlzLnN0YXJ0RGF0ZUlucHV0TmFtZTtcblxuICAgIHRoaXMudXBkYXRlTW9kZWxCeVNjcmVlbihpc1N0YXJ0RGF0ZVRhcmdldEV2ZW50KTtcblxuICAgIHRoaXMucmVtb3ZlRm9jdXNGcm9tRGF0ZVBpY2tlclJhbmdlRmllbGQoKTtcbiAgfVxuXG4gIG9uQ2FsZW5kYXJDaGFuZ2UoeyBzdGFydCwgZW5kIH0pIHtcbiAgICBjb25zdCBpc1N0YXJ0RGF0ZVRhcmdldEV2ZW50ID0gc3RhcnQgJiYgIWVuZDtcblxuICAgIHRoaXMudXBkYXRlU2NyZWVuQnlNb2RlbCh7IHN0YXJ0OiBzdGFydCB8fCAnJywgZW5kOiBlbmQgfHwgJycgfSk7XG4gICAgdGhpcy51cGRhdGVNb2RlbEJ5U2NyZWVuKGlzU3RhcnREYXRlVGFyZ2V0RXZlbnQsIHN0YXJ0IHx8ICcnLCBlbmQgfHwgJycpO1xuXG4gICAgaWYgKHN0YXJ0ICYmIGVuZCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuaXNDYWxlbmRhclZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0sIDMwMCk7XG4gICAgfVxuICB9XG5cbiAgb25Gb2N1cyhldmVudDogYW55KSB7XG4gICAgdGhpcy5hcHBseUZvY3VzT25EYXRlUGlja2VyUmFuZ2VGaWVsZCgpO1xuICAgIHRoaXMucG9NYXNrT2JqZWN0LnJlc2V0UG9zaXRpb25zKGV2ZW50KTtcbiAgfVxuXG4gIG9uS2V5ZG93bihldmVudD86IGFueSkge1xuICAgIGlmICh0aGlzLnJlYWRvbmx5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNTZXRGb2N1c09uQmFja3NwYWNlKGV2ZW50KSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMuc2V0Rm9jdXNPbkJhY2tzcGFjZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBvTWFza09iamVjdC5rZXlkb3duKGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBvbktleXVwKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5yZWFkb25seSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGlzU3RhcnREYXRlVGFyZ2V0RXZlbnQgPSBldmVudC50YXJnZXQubmFtZSA9PT0gdGhpcy5zdGFydERhdGVJbnB1dE5hbWU7XG5cbiAgICB0aGlzLnNldEZvY3VzKGV2ZW50KTtcbiAgICB0aGlzLnBvTWFza09iamVjdC5rZXl1cChldmVudCk7XG4gICAgdGhpcy51cGRhdGVNb2RlbFdoZW5Db21wbGV0ZShpc1N0YXJ0RGF0ZVRhcmdldEV2ZW50LCB0aGlzLnN0YXJ0RGF0ZUlucHV0VmFsdWUsIHRoaXMuZW5kRGF0ZUlucHV0VmFsdWUpO1xuICB9XG5cbiAgcmVzZXREYXRlUmFuZ2VJbnB1dFZhbGlkYXRpb24oKSB7XG4gICAgdGhpcy5pc1N0YXJ0RGF0ZVJhbmdlSW5wdXRWYWxpZCA9IHRydWU7XG4gICAgdGhpcy5pc0RhdGVSYW5nZUlucHV0Rm9ybWF0VmFsaWQgPSB0cnVlO1xuICB9XG5cbiAgdG9nZ2xlQ2FsZW5kYXIoKSB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaXNDYWxlbmRhclZpc2libGUgPSAhdGhpcy5pc0NhbGVuZGFyVmlzaWJsZTtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcblxuICAgIGlmICh0aGlzLmlzQ2FsZW5kYXJWaXNpYmxlKSB7XG4gICAgICB0aGlzLnNldENhbGVuZGFyUG9zaXRpb24oKTtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUxpc3RlbmVycygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlbW92ZUxpc3RlbmVycygpO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZVNjcmVlbkJ5TW9kZWwobW9kZWw6IFBvRGF0ZXBpY2tlclJhbmdlKSB7XG4gICAgY29uc3QgZGF0ZVJhbmdlID0geyBzdGFydDogbW9kZWwuc3RhcnQgYXMgc3RyaW5nLCBlbmQ6IG1vZGVsLmVuZCBhcyBzdHJpbmcgfTtcbiAgICBjb25zdCBpc1N0YXJ0RGF0ZVZhbGlkID0gdGhpcy5wb0RhdGVTZXJ2aWNlLmlzRGF0ZVJhbmdlVmFsaWQoZGF0ZVJhbmdlLmVuZCwgZGF0ZVJhbmdlLnN0YXJ0KTtcbiAgICBjb25zdCBpc0RhdGVWYWxpZCA9IGRhdGUgPT4gIXRoaXMuZGF0ZUZvcm1hdEZhaWxlZChkYXRlKSAmJiBpc1N0YXJ0RGF0ZVZhbGlkO1xuXG4gICAgY29uc3QgZW5kRGF0ZUZvcm1hdGVkID0gaXNEYXRlVmFsaWQoZGF0ZVJhbmdlLmVuZCkgPyB0aGlzLmZvcm1hdE1vZGVsVG9TY3JlZW4oZGF0ZVJhbmdlLmVuZCkgOiAnJztcbiAgICBjb25zdCBzdGFydERhdGVGb3JtYXRlZCA9IGlzRGF0ZVZhbGlkKGRhdGVSYW5nZS5zdGFydCkgPyB0aGlzLmZvcm1hdE1vZGVsVG9TY3JlZW4oZGF0ZVJhbmdlLnN0YXJ0KSA6ICcnO1xuXG4gICAgdGhpcy5lbmREYXRlSW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9IGVuZERhdGVGb3JtYXRlZDtcbiAgICB0aGlzLnN0YXJ0RGF0ZUlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBzdGFydERhdGVGb3JtYXRlZDtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlGb2N1c09uRGF0ZVBpY2tlclJhbmdlRmllbGQoKSB7XG4gICAgdGhpcy5kYXRlUmFuZ2VGaWVsZC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ3BvLWRhdGVwaWNrZXItcmFuZ2UtZmllbGQtZm9jdXNlZCcpO1xuICB9XG5cbiAgLy8gUmV0b3JuYSB1bSBvYmpldG8gZG8gdGlwbyBQb01hc2sgY29tIGEgbWFzY2FyYSBjb25maWd1cmFkYS5cbiAgcHJpdmF0ZSBidWlsZE1hc2soKTogUG9NYXNrIHtcbiAgICBsZXQgbWFzayA9IHRoaXMuZm9ybWF0LnRvVXBwZXJDYXNlKCk7XG5cbiAgICBtYXNrID0gbWFzay5yZXBsYWNlKC9ERC9nLCAnOTknKTtcbiAgICBtYXNrID0gbWFzay5yZXBsYWNlKC9NTS9nLCAnOTknKTtcbiAgICBtYXNrID0gbWFzay5yZXBsYWNlKC9ZWVlZL2csICc5OTk5Jyk7XG5cbiAgICByZXR1cm4gbmV3IFBvTWFzayhtYXNrLCB0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0RGF0ZShmb3JtYXQ6IHN0cmluZywgZGF5OiBzdHJpbmcgPSAnJywgbW9udGg6IHN0cmluZyA9ICcnLCB5ZWFyOiBzdHJpbmcgPSAnJyk6IHN0cmluZyB7XG4gICAgbGV0IGRhdGVGb3JtYXR0ZWQgPSBmb3JtYXQ7XG5cbiAgICBkYXkgPSBkYXkgJiYgZGF5LmluY2x1ZGVzKCdUJykgPyBkYXkuc2xpY2UoMCwgMikgOiBkYXk7XG5cbiAgICBkYXRlRm9ybWF0dGVkID0gZGF0ZUZvcm1hdHRlZC5yZXBsYWNlKCdkZCcsICgnMCcgKyBkYXkpLnNsaWNlKC0yKSk7XG4gICAgZGF0ZUZvcm1hdHRlZCA9IGRhdGVGb3JtYXR0ZWQucmVwbGFjZSgnbW0nLCAoJzAnICsgbW9udGgpLnNsaWNlKC0yKSk7XG4gICAgZGF0ZUZvcm1hdHRlZCA9IGRhdGVGb3JtYXR0ZWQucmVwbGFjZSgneXl5eScsIFN0cmluZyh5ZWFyKSk7XG5cbiAgICByZXR1cm4gZGF0ZUZvcm1hdHRlZDtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0U2NyZWVuVG9Nb2RlbCh2YWx1ZTogc3RyaW5nID0gJycpOiBzdHJpbmcge1xuICAgIGNvbnN0IFtkYXksIG1vbnRoLCB5ZWFyXSA9IHZhbHVlLnNwbGl0KCcvJyk7XG5cbiAgICByZXR1cm4gdmFsdWUgPyB0aGlzLmZvcm1hdERhdGUoJ3l5eXktbW0tZGQnLCBkYXksIG1vbnRoLCB5ZWFyKSA6ICcnO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRNb2RlbFRvU2NyZWVuKHZhbHVlOiBzdHJpbmcgPSAnJyk6IHN0cmluZyB7XG4gICAgY29uc3QgW3llYXIsIG1vbnRoLCBkYXldID0gdmFsdWUuc3BsaXQoJy0nKTtcblxuICAgIHJldHVybiB2YWx1ZSA/IHRoaXMuZm9ybWF0RGF0ZSh0aGlzLmZvcm1hdCwgZGF5LCBtb250aCwgeWVhcikgOiAnJztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGF0ZVJhbmdlRm9ybWF0VmFsaWRhdGlvbihcbiAgICBzdGFydERhdGU6IHN0cmluZyxcbiAgICBlbmREYXRlOiBzdHJpbmcsXG4gICAgaXNTdGFydERhdGVUYXJnZXRFdmVudDogYm9vbGVhblxuICApOiB7IGlzVmFsaWQ6IGJvb2xlYW47IGRhdGVSYW5nZU1vZGVsOiBQb0RhdGVwaWNrZXJSYW5nZSB9IHtcbiAgICB0aGlzLnNldERhdGVSYW5nZUlucHV0VmFsaWRhdGlvbihzdGFydERhdGUsIGVuZERhdGUpO1xuICAgIHJldHVybiB7XG4gICAgICBpc1ZhbGlkOlxuICAgICAgICB0aGlzLmlzRGF0ZVJhbmdlSW5wdXRGb3JtYXRWYWxpZCAmJiB0aGlzLmlzU3RhcnREYXRlUmFuZ2VJbnB1dFZhbGlkICYmIHRoaXMudmVyaWZ5VmFsaWREYXRlKHN0YXJ0RGF0ZSwgZW5kRGF0ZSksXG4gICAgICBkYXRlUmFuZ2VNb2RlbDogdGhpcy5nZXRWYWxpZGF0ZWRNb2RlbChzdGFydERhdGUsIGVuZERhdGUsIGlzU3RhcnREYXRlVGFyZ2V0RXZlbnQpXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VmFsaWRhdGVkTW9kZWwoc3RhcnREYXRlOiBzdHJpbmcsIGVuZERhdGU6IHN0cmluZywgaXNTdGFydERhdGVUYXJnZXRFdmVudDogYm9vbGVhbik6IFBvRGF0ZXBpY2tlclJhbmdlIHtcbiAgICBjb25zdCBkYXRlUmFuZ2VNb2RlbCA9IHsgc3RhcnQ6ICcnLCBlbmQ6ICcnIH07XG5cbiAgICBkYXRlUmFuZ2VNb2RlbC5lbmQgPVxuICAgICAgKGlzU3RhcnREYXRlVGFyZ2V0RXZlbnQgfHwgdGhpcy5pc1N0YXJ0RGF0ZVJhbmdlSW5wdXRWYWxpZCkgJiYgIXRoaXMuZGF0ZUZvcm1hdEZhaWxlZChlbmREYXRlKSA/IGVuZERhdGUgOiAnJztcblxuICAgIGRhdGVSYW5nZU1vZGVsLnN0YXJ0ID1cbiAgICAgICghaXNTdGFydERhdGVUYXJnZXRFdmVudCB8fCB0aGlzLmlzU3RhcnREYXRlUmFuZ2VJbnB1dFZhbGlkKSAmJiAhdGhpcy5kYXRlRm9ybWF0RmFpbGVkKHN0YXJ0RGF0ZSlcbiAgICAgICAgPyBzdGFydERhdGVcbiAgICAgICAgOiAnJztcblxuICAgIHJldHVybiBkYXRlUmFuZ2VNb2RlbDtcbiAgfVxuXG4gIHByaXZhdGUgaGFzQXR0ckNhbGVuZGFyKGVsZW1lbnQpIHtcbiAgICBjb25zdCBhdHRyQ2FsZW5kYXIgPSAnYXR0ci1jYWxlbmRhcic7XG5cbiAgICByZXR1cm4gZWxlbWVudD8uaGFzQXR0cmlidXRlKGF0dHJDYWxlbmRhcikgfHwgZWxlbWVudD8ucGFyZW50RWxlbWVudD8uaGFzQXR0cmlidXRlKGF0dHJDYWxlbmRhcik7XG4gIH1cblxuICBwcml2YXRlIGhhc0ludmFsaWRDbGFzcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5wb0RhdGVwaWNrZXJSYW5nZUVsZW1lbnQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ25nLWludmFsaWQnKSAmJlxuICAgICAgdGhpcy5wb0RhdGVwaWNrZXJSYW5nZUVsZW1lbnQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ25nLWRpcnR5JylcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplTGlzdGVuZXJzKCkge1xuICAgIHRoaXMuY2xpY2tMaXN0ZW5lciA9IHRoaXMucmVuZGVyZXIubGlzdGVuKCdkb2N1bWVudCcsICdjbGljaycsIChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgdGhpcy53YXNDbGlja2VkT25QaWNrZXIoZXZlbnQpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5ldmVudFJlc2l6ZUxpc3RlbmVyID0gdGhpcy5yZW5kZXJlci5saXN0ZW4oJ3dpbmRvdycsICdyZXNpemUnLCAoKSA9PiB7XG4gICAgICB0aGlzLmlzQ2FsZW5kYXJWaXNpYmxlID0gZmFsc2U7XG4gICAgfSk7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5vblNjcm9sbCwgdHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIGlzRXF1YWxCZWZvcmVWYWx1ZShzdGFydERhdGU6IHN0cmluZywgZW5kRGF0ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNEYXRlUmFuZ2VJbnB1dEZvcm1hdFZhbGlkICYmIGVuZERhdGUgPT09IHRoaXMuZGF0ZVJhbmdlLmVuZCAmJiBzdGFydERhdGUgPT09IHRoaXMuZGF0ZVJhbmdlLnN0YXJ0O1xuICB9XG5cbiAgcHJpdmF0ZSBpc1NldEZvY3VzT25CYWNrc3BhY2UoZXZlbnQ6IGFueSkge1xuICAgIHJldHVybiAoXG4gICAgICBldmVudC50YXJnZXQubmFtZSA9PT0gdGhpcy5lbmREYXRlSW5wdXROYW1lICYmXG4gICAgICB0aGlzLmVuZERhdGVJbnB1dC5uYXRpdmVFbGVtZW50LnNlbGVjdGlvblN0YXJ0ID09PSAwICYmXG4gICAgICB0aGlzLmVuZERhdGVJbnB1dC5uYXRpdmVFbGVtZW50LnNlbGVjdGlvbkVuZCA9PT0gMCAmJlxuICAgICAgZXZlbnQua2V5Q29kZSA9PT0gYmFja3NwYWNlS2V5XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgb25TY3JvbGwgPSAoKTogdm9pZCA9PiB7XG4gICAgaWYgKHRoaXMuaXNDYWxlbmRhclZpc2libGUpIHtcbiAgICAgIHRoaXMuY29udHJvbFBvc2l0aW9uLmFkanVzdFBvc2l0aW9uKHBvQ2FsZW5kYXJQb3NpdGlvbkRlZmF1bHQpO1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIHJlbW92ZUZvY3VzRnJvbURhdGVQaWNrZXJSYW5nZUZpZWxkKCkge1xuICAgIHRoaXMuZGF0ZVJhbmdlRmllbGQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdwby1kYXRlcGlja2VyLXJhbmdlLWZpZWxkLWZvY3VzZWQnKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0RGF0ZVJhbmdlSW5wdXRWYWxpZGF0aW9uKHN0YXJ0RGF0ZTogc3RyaW5nLCBlbmREYXRlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmlzU3RhcnREYXRlUmFuZ2VJbnB1dFZhbGlkID0gdGhpcy5wb0RhdGVTZXJ2aWNlLmlzRGF0ZVJhbmdlVmFsaWQoZW5kRGF0ZSwgc3RhcnREYXRlKTtcblxuICAgIHRoaXMuaXNEYXRlUmFuZ2VJbnB1dEZvcm1hdFZhbGlkID0gIXRoaXMuZGF0ZUZvcm1hdEZhaWxlZChzdGFydERhdGUpICYmICF0aGlzLmRhdGVGb3JtYXRGYWlsZWQoZW5kRGF0ZSk7XG4gIH1cblxuICBwcml2YXRlIHNldEZvY3VzKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBpbnB1dEVsZW1lbnQgPSBQb0RhdGVwaWNrZXJSYW5nZUNvbXBvbmVudC5nZXRUYXJnZXRFbGVtZW50KGV2ZW50KTtcbiAgICBjb25zdCBrZXlDb2RlID0gUG9EYXRlcGlja2VyUmFuZ2VDb21wb25lbnQuZ2V0S2V5Q29kZShldmVudCk7XG4gICAgY29uc3QgaW5wdXROYW1lID0gaW5wdXRFbGVtZW50WyduYW1lJ107XG5cbiAgICB0aGlzLnNldEZvY3VzT25BcnJvd0xlZnQoa2V5Q29kZSwgaW5wdXROYW1lKTtcbiAgICB0aGlzLnNldEZvY3VzT25BcnJvd1JpZ2h0KGtleUNvZGUsIGlucHV0TmFtZSwgaW5wdXRFbGVtZW50KTtcbiAgICB0aGlzLnNldEZvY3VzT25TdGFydERhdGVDb21wbGV0ZWQoa2V5Q29kZSwgaW5wdXROYW1lKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Rm9jdXNBbmRQb3NpdGlvbihwb3NpdGlvbjogbnVtYmVyLCBpbnB1dEVsZW1lbnQ6IEVsZW1lbnRSZWYsIHNlbGVjdGlvblJhbmdlOiBudW1iZXIpIHtcbiAgICB0aGlzLmZvY3VzT25FbGVtZW50KGlucHV0RWxlbWVudCk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LnNldFNlbGVjdGlvblJhbmdlKHNlbGVjdGlvblJhbmdlLCBzZWxlY3Rpb25SYW5nZSk7XG4gICAgICB0aGlzLnBvTWFza09iamVjdC5pbml0aWFsUG9zaXRpb24gPSBwb3NpdGlvbjtcbiAgICAgIHRoaXMucG9NYXNrT2JqZWN0LmZpbmFsUG9zaXRpb24gPSBwb3NpdGlvbjtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZm9jdXNPbkVsZW1lbnQoaW5wdXRFbGVtZW50OiBFbGVtZW50UmVmKSB7XG4gICAgaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlTGlzdGVuZXJzKCkge1xuICAgIGlmICh0aGlzLmNsaWNrTGlzdGVuZXIpIHtcbiAgICAgIHRoaXMuY2xpY2tMaXN0ZW5lcigpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmV2ZW50UmVzaXplTGlzdGVuZXIpIHtcbiAgICAgIHRoaXMuZXZlbnRSZXNpemVMaXN0ZW5lcigpO1xuICAgIH1cblxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLm9uU2Nyb2xsLCB0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Q2FsZW5kYXJQb3NpdGlvbigpIHtcbiAgICB0aGlzLmNvbnRyb2xQb3NpdGlvbi5zZXRFbGVtZW50cyhcbiAgICAgIHRoaXMuY2FsZW5kYXJQaWNrZXIubmF0aXZlRWxlbWVudCxcbiAgICAgIHBvQ2FsZW5kYXJDb250ZW50T2Zmc2V0LFxuICAgICAgdGhpcy5kYXRlUmFuZ2VGaWVsZCxcbiAgICAgIFsnYm90dG9tLWxlZnQnLCAnYm90dG9tLXJpZ2h0JywgJ3RvcC1sZWZ0JywgJ3RvcC1yaWdodCddLFxuICAgICAgZmFsc2UsXG4gICAgICB0cnVlXG4gICAgKTtcblxuICAgIHRoaXMuY29udHJvbFBvc2l0aW9uLmFkanVzdFBvc2l0aW9uKHBvQ2FsZW5kYXJQb3NpdGlvbkRlZmF1bHQpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRGb2N1c09uQXJyb3dMZWZ0KGtleUNvZGU6IG51bWJlciwgaW5wdXROYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBpc0N1cnNvckF0U3RhcnRPZklucHV0ID0gdGhpcy5lbmREYXRlSW5wdXQubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25TdGFydCA9PT0gMDtcblxuICAgIGlmIChpbnB1dE5hbWUgPT09IHRoaXMuZW5kRGF0ZUlucHV0TmFtZSAmJiBpc0N1cnNvckF0U3RhcnRPZklucHV0ICYmIGtleUNvZGUgPT09IGFycm93TGVmdEtleSkge1xuICAgICAgY29uc3QgaW5wdXRMZW5ndGggPSB0aGlzLnN0YXJ0RGF0ZUlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUubGVuZ3RoO1xuICAgICAgdGhpcy5zZXRGb2N1c0FuZFBvc2l0aW9uKGlucHV0TGVuZ3RoLCB0aGlzLnN0YXJ0RGF0ZUlucHV0LCBpbnB1dExlbmd0aCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRGb2N1c09uQXJyb3dSaWdodChrZXlDb2RlOiBudW1iZXIsIGlucHV0TmFtZTogc3RyaW5nLCBpbnB1dEVsZW1lbnQ6IGFueSkge1xuICAgIGNvbnN0IGlzQ3Vyc29yQXRFbmRPZklucHV0ID0gdGhpcy5zdGFydERhdGVJbnB1dC5uYXRpdmVFbGVtZW50LnNlbGVjdGlvblN0YXJ0ID09PSBpbnB1dEVsZW1lbnQudmFsdWUubGVuZ3RoO1xuXG4gICAgaWYgKGlucHV0TmFtZSA9PT0gdGhpcy5zdGFydERhdGVJbnB1dE5hbWUgJiYgaXNDdXJzb3JBdEVuZE9mSW5wdXQgJiYga2V5Q29kZSA9PT0gYXJyb3dSaWdodEtleSkge1xuICAgICAgdGhpcy5zZXRGb2N1c0FuZFBvc2l0aW9uKDAsIHRoaXMuZW5kRGF0ZUlucHV0LCAwKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldEZvY3VzT25CYWNrc3BhY2UoKSB7XG4gICAgY29uc3QgaW5wdXRMZW5ndGggPSB0aGlzLnN0YXJ0RGF0ZUlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUubGVuZ3RoO1xuXG4gICAgdGhpcy5zdGFydERhdGVJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGhpcy5zdGFydERhdGVJbnB1dFZhbHVlLnNsaWNlKDAsIC0xKTtcbiAgICB0aGlzLnNldEZvY3VzQW5kUG9zaXRpb24oaW5wdXRMZW5ndGgsIHRoaXMuc3RhcnREYXRlSW5wdXQsIGlucHV0TGVuZ3RoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Rm9jdXNPblN0YXJ0RGF0ZUNvbXBsZXRlZChrZXlDb2RlOiBudW1iZXIsIGlucHV0TmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgaXNMYXN0S2V5UHJlc3NlZCA9IHRoaXMuc3RhcnREYXRlSW5wdXQubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25TdGFydCA9PT0gcG9EYXRlcGlja2VyUmFuZ2VEYXRlTGVuZ3RoRGVmYXVsdDtcbiAgICBjb25zdCBpc05ld0RhdGVDb21wbGV0ZWQgPVxuICAgICAgdGhpcy5zdGFydERhdGVJbnB1dFZhbHVlLmxlbmd0aCA9PT0gcG9EYXRlcGlja2VyUmFuZ2VEYXRlTGVuZ3RoRGVmYXVsdCAmJiBpc0xhc3RLZXlQcmVzc2VkO1xuICAgIGNvbnN0IGlzVmFsaWRLZXkgPSBQb0RhdGVwaWNrZXJSYW5nZUNvbXBvbmVudC5pc1ZhbGlkS2V5KGtleUNvZGUpO1xuXG4gICAgaWYgKGlucHV0TmFtZSA9PT0gdGhpcy5zdGFydERhdGVJbnB1dE5hbWUgJiYgaXNOZXdEYXRlQ29tcGxldGVkICYmIGlzVmFsaWRLZXkpIHtcbiAgICAgIHRoaXMuc2V0Rm9jdXNBbmRQb3NpdGlvbigwLCB0aGlzLmVuZERhdGVJbnB1dCwgMCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVNb2RlbFdoZW5Db21wbGV0ZShpc1N0YXJ0RGF0ZVRhcmdldEV2ZW50OiBib29sZWFuLCBzdGFydERhdGUsIGVuZERhdGUpIHtcbiAgICBjb25zdCBlbmREYXRlRm9ybWF0dGVkID0gdGhpcy5mb3JtYXRTY3JlZW5Ub01vZGVsKGVuZERhdGUpO1xuICAgIGNvbnN0IHN0YXJ0RGF0ZUZvcm1hdHRlZCA9IHRoaXMuZm9ybWF0U2NyZWVuVG9Nb2RlbChzdGFydERhdGUpO1xuICAgIGNvbnN0IGRhdGVGb3JtYXRWYWxpZGF0aW9uID0gdGhpcy5nZXREYXRlUmFuZ2VGb3JtYXRWYWxpZGF0aW9uKFxuICAgICAgc3RhcnREYXRlRm9ybWF0dGVkLFxuICAgICAgZW5kRGF0ZUZvcm1hdHRlZCxcbiAgICAgIGlzU3RhcnREYXRlVGFyZ2V0RXZlbnRcbiAgICApO1xuXG4gICAgaWYgKHRoaXMuaXNFcXVhbEJlZm9yZVZhbHVlKHN0YXJ0RGF0ZUZvcm1hdHRlZCwgZW5kRGF0ZUZvcm1hdHRlZCkpIHtcbiAgICAgIHRoaXMucmVzZXREYXRlUmFuZ2VJbnB1dFZhbGlkYXRpb24oKTtcbiAgICAgIHRoaXMudmFsaWRhdGVNb2RlbCh0aGlzLmRhdGVSYW5nZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGRhdGVGb3JtYXRWYWxpZGF0aW9uLmlzVmFsaWQpIHtcbiAgICAgIHRoaXMuZGF0ZVJhbmdlID0geyBzdGFydDogc3RhcnREYXRlRm9ybWF0dGVkLCBlbmQ6IGVuZERhdGVGb3JtYXR0ZWQgfTtcbiAgICAgIHRoaXMudXBkYXRlTW9kZWwodGhpcy5kYXRlUmFuZ2UpO1xuICAgICAgdGhpcy5vbkNoYW5nZS5lbWl0KHsgLi4udGhpcy5kYXRlUmFuZ2UgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVNb2RlbEJ5U2NyZWVuKGlzU3RhcnREYXRlVGFyZ2V0RXZlbnQ6IGJvb2xlYW4sIHN0YXJ0RGF0ZT8sIGVuZERhdGU/KSB7XG4gICAgY29uc3QgZW5kRGF0ZUZvcm1hdHRlZCA9IGVuZERhdGUgfHwgdGhpcy5mb3JtYXRTY3JlZW5Ub01vZGVsKHRoaXMuZW5kRGF0ZUlucHV0VmFsdWUpO1xuICAgIGNvbnN0IHN0YXJ0RGF0ZUZvcm1hdHRlZCA9IHN0YXJ0RGF0ZSB8fCB0aGlzLmZvcm1hdFNjcmVlblRvTW9kZWwodGhpcy5zdGFydERhdGVJbnB1dFZhbHVlKTtcbiAgICBpZiAodGhpcy5pc0RhdGVSYW5nZUlucHV0VW5jb21wbGV0ZWQgJiYgdGhpcy5pc0RpcnR5RGF0ZVJhbmdlSW5wdXQpIHtcbiAgICAgIHRoaXMudXBkYXRlTW9kZWwodGhpcy5kYXRlUmFuZ2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzRXF1YWxCZWZvcmVWYWx1ZShzdGFydERhdGVGb3JtYXR0ZWQsIGVuZERhdGVGb3JtYXR0ZWQpKSB7XG4gICAgICB0aGlzLnJlc2V0RGF0ZVJhbmdlSW5wdXRWYWxpZGF0aW9uKCk7XG4gICAgICB0aGlzLnZhbGlkYXRlTW9kZWwodGhpcy5kYXRlUmFuZ2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGVGb3JtYXRWYWxpZGF0aW9uID0gdGhpcy5nZXREYXRlUmFuZ2VGb3JtYXRWYWxpZGF0aW9uKFxuICAgICAgc3RhcnREYXRlRm9ybWF0dGVkLFxuICAgICAgZW5kRGF0ZUZvcm1hdHRlZCxcbiAgICAgIGlzU3RhcnREYXRlVGFyZ2V0RXZlbnRcbiAgICApO1xuXG4gICAgaWYgKGRhdGVGb3JtYXRWYWxpZGF0aW9uLmlzVmFsaWQpIHtcbiAgICAgIHRoaXMuZGF0ZVJhbmdlID0geyBzdGFydDogc3RhcnREYXRlRm9ybWF0dGVkLCBlbmQ6IGVuZERhdGVGb3JtYXR0ZWQgfTtcbiAgICAgIHRoaXMudXBkYXRlTW9kZWwodGhpcy5kYXRlUmFuZ2UpO1xuICAgICAgdGhpcy5vbkNoYW5nZS5lbWl0KHsgLi4udGhpcy5kYXRlUmFuZ2UgfSk7XG4gICAgfVxuXG4gICAgaWYgKCFkYXRlRm9ybWF0VmFsaWRhdGlvbi5pc1ZhbGlkICYmIHRoaXMudmVyaWZ5Rm9ybWF0dGVkRGF0ZXMoc3RhcnREYXRlRm9ybWF0dGVkLCBlbmREYXRlRm9ybWF0dGVkKSkge1xuICAgICAgdGhpcy5kYXRlUmFuZ2UgPSB7IC4uLmRhdGVGb3JtYXRWYWxpZGF0aW9uLmRhdGVSYW5nZU1vZGVsIH07XG4gICAgICB0aGlzLnVwZGF0ZU1vZGVsKGRhdGVGb3JtYXRWYWxpZGF0aW9uLmRhdGVSYW5nZU1vZGVsKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHZlcmlmeUZvcm1hdHRlZERhdGVzKHN0YXJ0OiBzdHJpbmcsIGVuZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhc3RhcnQgfHwgISFlbmQ7XG4gIH1cblxuICBwcml2YXRlIHdhc0NsaWNrZWRPblBpY2tlcihldmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc0NhbGVuZGFyVmlzaWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgICF0aGlzLmNhbGVuZGFyUGlja2VyLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJlxuICAgICAgIXRoaXMuaWNvbkNhbGVuZGFyLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJlxuICAgICAgIXRoaXMuaGFzQXR0ckNhbGVuZGFyKGV2ZW50LnRhcmdldClcbiAgICApIHtcbiAgICAgIHRoaXMuaXNDYWxlbmRhclZpc2libGUgPSBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxufVxuIiwiPHBvLWZpZWxkLWNvbnRhaW5lclxuICBbY2xhc3MucG8tZGF0ZS1waWNrZXItY29udGFpbmVyLWRpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgW3AtaGVscF09XCJoZWxwXCJcbiAgW3AtbGFiZWxdPVwibGFiZWxcIlxuICBbcC1vcHRpb25hbF09XCIhcmVxdWlyZWQgJiYgb3B0aW9uYWxcIlxuPlxuICA8ZGl2XG4gICAgI2RhdGVSYW5nZUZpZWxkXG4gICAgY2xhc3M9XCJwby1kYXRlcGlja2VyLXJhbmdlLWZpZWxkIHBvLWlucHV0XCJcbiAgICBbY2xhc3MucG8tZGF0ZXBpY2tlci1yYW5nZS1maWVsZC1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgW2F0dHIuZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cInBvLWRhdGVwaWNrZXItcmFuZ2Utc3RhcnQtZGF0ZVwiPlxuICAgICAgPGlucHV0XG4gICAgICAgICNzdGFydERhdGVJbnB1dFxuICAgICAgICBjbGFzcz1cInBvLWRhdGVwaWNrZXItcmFuZ2UtaW5wdXRcIlxuICAgICAgICBtYXhsZW5ndGg9XCIxMFwiXG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJsYWJlbFwiXG4gICAgICAgIFthdXRvY29tcGxldGVdPVwiYXV0b2NvbXBsZXRlXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW25hbWVdPVwic3RhcnREYXRlSW5wdXROYW1lXCJcbiAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgICAgKGJsdXIpPVwib25CbHVyKCRldmVudClcIlxuICAgICAgICAoZm9jdXMpPVwib25Gb2N1cygkZXZlbnQpXCJcbiAgICAgICAgKGtleWRvd24pPVwib25LZXlkb3duKCRldmVudClcIlxuICAgICAgICAoa2V5dXApPVwib25LZXl1cCgkZXZlbnQpXCJcbiAgICAgICAgKGNsaWNrKT1cImV2ZW50T25DbGljaygkZXZlbnQpXCJcbiAgICAgIC8+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwicG8tZGF0ZXBpY2tlci1yYW5nZS1zZXBhcmF0b3JcIj4tPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwicG8tZGF0ZXBpY2tlci1yYW5nZS1lbmQtZGF0ZVwiPlxuICAgICAgPGlucHV0XG4gICAgICAgICNlbmREYXRlSW5wdXRcbiAgICAgICAgY2xhc3M9XCJwby1kYXRlcGlja2VyLXJhbmdlLWlucHV0XCJcbiAgICAgICAgbWF4bGVuZ3RoPVwiMTBcIlxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIFthdXRvY29tcGxldGVdPVwiYXV0b2NvbXBsZXRlXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW25hbWVdPVwiZW5kRGF0ZUlucHV0TmFtZVwiXG4gICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgIChibHVyKT1cIm9uQmx1cigkZXZlbnQpXCJcbiAgICAgICAgKGZvY3VzKT1cIm9uRm9jdXMoJGV2ZW50KVwiXG4gICAgICAgIChrZXlkb3duKT1cIm9uS2V5ZG93bigkZXZlbnQpXCJcbiAgICAgICAgKGtleXVwKT1cIm9uS2V5dXAoJGV2ZW50KVwiXG4gICAgICAgIChjbGljayk9XCJldmVudE9uQ2xpY2soJGV2ZW50KVwiXG4gICAgICAvPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cInBvLWRhdGVwaWNrZXItcmFuZ2UtaWNvblwiPlxuICAgICAgPHBvLWNsZWFuIGNsYXNzPVwicG8taWNvbi1pbnB1dFwiICpuZ0lmPVwiZW5hYmxlQ2xlYW5lclwiIChwLWNoYW5nZS1ldmVudCk9XCJjbGVhcigpXCI+PC9wby1jbGVhbj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJwby1kYXRlcGlja2VyLXJhbmdlLWljb25cIj5cbiAgICAgIDxzcGFuXG4gICAgICAgICNpY29uQ2FsZW5kYXJcbiAgICAgICAgY2xhc3M9XCJwby1pY29uIHBvLWZpZWxkLWljb24gcG8taWNvbi1jYWxlbmRhciB7eyBkaXNhYmxlZCA/ICdwby1pY29uLWlucHV0LWRpc2FibGVkJyA6ICdwby1pY29uLWlucHV0JyB9fVwiXG4gICAgICAgIFtjbGFzcy5wby1jbGlja2FibGVdPVwiIWRpc2FibGVkICYmICFyZWFkb25seVwiXG4gICAgICAgIFtjbGFzcy5wby1maWVsZC1pY29uLWRpc2FibGVkXT1cImRpc2FibGVkIHx8IHJlYWRvbmx5XCJcbiAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUNhbGVuZGFyKClcIlxuICAgICAgPlxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8cG8tZmllbGQtY29udGFpbmVyLWJvdHRvbSBbcC1lcnJvci1wYXR0ZXJuXT1cImdldEVycm9yTWVzc2FnZVwiPjwvcG8tZmllbGQtY29udGFpbmVyLWJvdHRvbT5cbjwvcG8tZmllbGQtY29udGFpbmVyPlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwiaXNDYWxlbmRhclZpc2libGVcIj5cbiAgPGRpdiAjY2FsZW5kYXJQaWNrZXIgY2xhc3M9XCJwby1jYWxlbmRhci1yYW5nZS1waWNrZXJcIj5cbiAgICA8cG8tY2FsZW5kYXJcbiAgICAgIHAtbW9kZT1cInJhbmdlXCJcbiAgICAgIFtuZ01vZGVsXT1cImRhdGVSYW5nZVwiXG4gICAgICBbcC1tYXgtZGF0ZV09XCJtYXhEYXRlXCJcbiAgICAgIFtwLW1pbi1kYXRlXT1cIm1pbkRhdGVcIlxuICAgICAgW3AtbG9jYWxlXT1cImxvY2FsZVwiXG4gICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkNhbGVuZGFyQ2hhbmdlKCRldmVudClcIlxuICAgID48L3BvLWNhbGVuZGFyPlxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuIl19
521
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tZGF0ZXBpY2tlci1yYW5nZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2NvbXBvbmVudHMvcG8tZmllbGQvcG8tZGF0ZXBpY2tlci1yYW5nZS9wby1kYXRlcGlja2VyLXJhbmdlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby1maWVsZC9wby1kYXRlcGlja2VyLXJhbmdlL3BvLWRhdGVwaWNrZXItcmFuZ2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxFQUVWLFNBQVMsRUFNVCx1QkFBdUIsRUFDeEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWxFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHFFQUFxRSxDQUFDO0FBRy9HLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRXRGLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lDa0N2QyxvQ0FBaUY7SUFBM0IsaU1BQWtCLGVBQUEsY0FBTyxDQUFBLElBQUM7SUFBQyxpQkFBVzs7OztJQWtCbEcsNkJBQXdDO0lBQ3RDLG1DQUFzRCxzQkFBQTtJQU9sRCw2TUFBaUIsZUFBQSwrQkFBd0IsQ0FBQSxJQUFDO0lBQzNDLGlCQUFjLEVBQUE7SUFFbkIsMEJBQWU7OztJQVBULGVBQXFCO0lBQXJCLDBDQUFxQiw4QkFBQSw4QkFBQSwyQkFBQTs7QURyRDNCLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQztBQUN4QixNQUFNLGFBQWEsR0FBRyxFQUFFLENBQUM7QUFDekIs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Q1YsY0FBYztrQkFBaEUsU0FBUzttQkFBQyxnQkFBZ0IsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBmb3J3YXJkUmVmLFxuICBPbkluaXQsXG4gIFZpZXdDaGlsZCxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgUmVuZGVyZXIyLFxuICBPbkRlc3Ryb3ksXG4gIFNpbXBsZUNoYW5nZXMsXG4gIE9uQ2hhbmdlcyxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3lcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOR19WQUxJREFUT1JTLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgUG9Db250cm9sUG9zaXRpb25TZXJ2aWNlIH0gZnJvbSAnLi8uLi8uLi8uLi9zZXJ2aWNlcy9wby1jb250cm9sLXBvc2l0aW9uL3BvLWNvbnRyb2wtcG9zaXRpb24uc2VydmljZSc7XG5cbmltcG9ydCB7IFBvRGF0ZXBpY2tlclJhbmdlIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLWRhdGVwaWNrZXItcmFuZ2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvRGF0ZXBpY2tlclJhbmdlQmFzZUNvbXBvbmVudCB9IGZyb20gJy4vcG8tZGF0ZXBpY2tlci1yYW5nZS1iYXNlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQb0RhdGVTZXJ2aWNlIH0gZnJvbSAnLi8uLi8uLi8uLi9zZXJ2aWNlcy9wby1kYXRlL3BvLWRhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBQb01hc2sgfSBmcm9tICcuLi9wby1pbnB1dC9wby1tYXNrJztcbmltcG9ydCB7IFBvTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcG8tbGFuZ3VhZ2UvcG8tbGFuZ3VhZ2Uuc2VydmljZSc7XG5cbmNvbnN0IGFycm93TGVmdEtleSA9IDM3O1xuY29uc3QgYXJyb3dSaWdodEtleSA9IDM5O1xuY29uc3QgYmFja3NwYWNlS2V5ID0gODtcbmNvbnN0IHBvRGF0ZXBpY2tlclJhbmdlRGF0ZUxlbmd0aERlZmF1bHQgPSAxMDtcblxuY29uc3QgcG9DYWxlbmRhckNvbnRlbnRPZmZzZXQgPSA4O1xuY29uc3QgcG9DYWxlbmRhclBvc2l0aW9uRGVmYXVsdCA9ICdib3R0b20tbGVmdCc7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5jb25zdCBwcm92aWRlcnMgPSBbXG4gIHtcbiAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBQb0RhdGVwaWNrZXJSYW5nZUNvbXBvbmVudCksXG4gICAgbXVsdGk6IHRydWVcbiAgfSxcbiAge1xuICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUG9EYXRlcGlja2VyUmFuZ2VDb21wb25lbnQpLFxuICAgIG11bHRpOiB0cnVlXG4gIH0sXG4gIFBvQ29udHJvbFBvc2l0aW9uU2VydmljZVxuXTtcbi8qKlxuICogQGRvY3NFeHRlbmRzIFBvRGF0ZXBpY2tlclJhbmdlQmFzZUNvbXBvbmVudFxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLWRhdGVwaWNrZXItcmFuZ2UtYmFzaWNcIiB0aXRsZT1cIlBPIERhdGVwaWNrZXIgUmFuZ2UgQmFzaWNcIj5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWRhdGVwaWNrZXItcmFuZ2UtYmFzaWMvc2FtcGxlLXBvLWRhdGVwaWNrZXItcmFuZ2UtYmFzaWMuY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tZGF0ZXBpY2tlci1yYW5nZS1iYXNpYy9zYW1wbGUtcG8tZGF0ZXBpY2tlci1yYW5nZS1iYXNpYy5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1kYXRlcGlja2VyLXJhbmdlLWxhYnNcIiB0aXRsZT1cIlBPIERhdGVwaWNrZXIgUmFuZ2UgTGFic1wiPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tZGF0ZXBpY2tlci1yYW5nZS1sYWJzL3NhbXBsZS1wby1kYXRlcGlja2VyLXJhbmdlLWxhYnMuY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tZGF0ZXBpY2tlci1yYW5nZS1sYWJzL3NhbXBsZS1wby1kYXRlcGlja2VyLXJhbmdlLWxhYnMuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tZGF0ZXBpY2tlci1yYW5nZS12YWNhdGlvbnNcIiB0aXRsZT1cIlBPIERhdGVwaWNrZXIgUmFuZ2UgLSBWYWNhdGlvbnMgU3VnZ2VzdGlvblwiPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tZGF0ZXBpY2tlci1yYW5nZS12YWNhdGlvbnMvc2FtcGxlLXBvLWRhdGVwaWNrZXItcmFuZ2UtdmFjYXRpb25zLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWRhdGVwaWNrZXItcmFuZ2UtdmFjYXRpb25zL3NhbXBsZS1wby1kYXRlcGlja2VyLXJhbmdlLXZhY2F0aW9ucy5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1kYXRlcGlja2VyLXJhbmdlLXZhY2F0aW9ucy1yZWFjdGl2ZS1mb3JtXCIgdGl0bGU9XCJQTyBEYXRlcGlja2VyIFJhbmdlIC0gVmFjYXRpb25zIFJlYWN0aXZlIEZvcm1cIj5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWRhdGVwaWNrZXItcmFuZ2UtdmFjYXRpb25zLXJlYWN0aXZlLWZvcm0vc2FtcGxlLXBvLWRhdGVwaWNrZXItcmFuZ2UtdmFjYXRpb25zLXJlYWN0aXZlLWZvcm0uY29tcG9uZW50Lmh0bWxcIj5cbiAqICA8L2ZpbGU+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1kYXRlcGlja2VyLXJhbmdlLXZhY2F0aW9ucy1yZWFjdGl2ZS1mb3JtL3NhbXBsZS1wby1kYXRlcGlja2VyLXJhbmdlLXZhY2F0aW9ucy1yZWFjdGl2ZS1mb3JtLmNvbXBvbmVudC50c1wiPlxuICogIDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncG8tZGF0ZXBpY2tlci1yYW5nZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9wby1kYXRlcGlja2VyLXJhbmdlLmNvbXBvbmVudC5odG1sJyxcbiAgcHJvdmlkZXJzLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBQb0RhdGVwaWNrZXJSYW5nZUNvbXBvbmVudFxuICBleHRlbmRzIFBvRGF0ZXBpY2tlclJhbmdlQmFzZUNvbXBvbmVudFxuICBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuICBAVmlld0NoaWxkKCdkYXRlUmFuZ2VGaWVsZCcsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiB0cnVlIH0pIGRhdGVSYW5nZUZpZWxkOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdlbmREYXRlSW5wdXQnLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogdHJ1ZSB9KSBlbmREYXRlSW5wdXQ6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3N0YXJ0RGF0ZUlucHV0JywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSkgc3RhcnREYXRlSW5wdXQ6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2ljb25DYWxlbmRhcicsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiB0cnVlIH0pIGljb25DYWxlbmRhcjogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnY2FsZW5kYXJQaWNrZXInLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgY2FsZW5kYXJQaWNrZXI6IEVsZW1lbnRSZWY7XG5cbiAgaXNDYWxlbmRhclZpc2libGUgPSBmYWxzZTtcblxuICBwcml2YXRlIGNsaWNrTGlzdGVuZXI7XG4gIHByaXZhdGUgZXZlbnRSZXNpemVMaXN0ZW5lcjtcbiAgcHJpdmF0ZSBwb0RhdGVwaWNrZXJSYW5nZUVsZW1lbnQ6IEVsZW1lbnRSZWY8YW55PjtcbiAgcHJpdmF0ZSBwb01hc2tPYmplY3Q6IFBvTWFzaztcblxuICBnZXQgYXV0b2NvbXBsZXRlKCkge1xuICAgIHJldHVybiB0aGlzLm5vQXV0b2NvbXBsZXRlID8gJ29mZicgOiAnb24nO1xuICB9XG5cbiAgZ2V0IGVuYWJsZUNsZWFuZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY2xlYW4gJiYgKHRoaXMuc3RhcnREYXRlSW5wdXRWYWx1ZSB8fCB0aGlzLmVuZERhdGVJbnB1dFZhbHVlKSAmJiAhdGhpcy5kaXNhYmxlZCAmJiAhdGhpcy5yZWFkb25seTtcbiAgfVxuXG4gIGdldCBlbmREYXRlSW5wdXROYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdlbmQtZGF0ZSc7XG4gIH1cblxuICBnZXQgZW5kRGF0ZUlucHV0VmFsdWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5lbmREYXRlSW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZTtcbiAgfVxuXG4gIGdldCBnZXRFcnJvck1lc3NhZ2UoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5lcnJvck1lc3NhZ2UgIT09ICcnICYmIHRoaXMuaGFzSW52YWxpZENsYXNzKCkgPyB0aGlzLmVycm9yTWVzc2FnZSA6ICcnO1xuICB9XG5cbiAgZ2V0IGlzRGF0ZVJhbmdlSW5wdXRVbmNvbXBsZXRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5lbmREYXRlSW5wdXRWYWx1ZS5sZW5ndGggPCBwb0RhdGVwaWNrZXJSYW5nZURhdGVMZW5ndGhEZWZhdWx0ICYmXG4gICAgICB0aGlzLnN0YXJ0RGF0ZUlucHV0VmFsdWUubGVuZ3RoIDwgcG9EYXRlcGlja2VyUmFuZ2VEYXRlTGVuZ3RoRGVmYXVsdFxuICAgICk7XG4gIH1cblxuICBnZXQgaXNEaXJ0eURhdGVSYW5nZUlucHV0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVuZERhdGVJbnB1dFZhbHVlLmxlbmd0aCA+IDAgfHwgdGhpcy5zdGFydERhdGVJbnB1dFZhbHVlLmxlbmd0aCA+IDA7XG4gIH1cblxuICBnZXQgc3RhcnREYXRlSW5wdXROYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdzdGFydC1kYXRlJztcbiAgfVxuXG4gIGdldCBzdGFydERhdGVJbnB1dFZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnREYXRlSW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgY29udHJvbFBvc2l0aW9uOiBQb0NvbnRyb2xQb3NpdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHBvRGF0ZVNlcnZpY2U6IFBvRGF0ZVNlcnZpY2UsXG4gICAgcG9EYXRlcGlja2VyUmFuZ2VFbGVtZW50OiBFbGVtZW50UmVmLFxuICAgIHBvTGFuZ3VhZ2VTZXJ2aWNlOiBQb0xhbmd1YWdlU2VydmljZVxuICApIHtcbiAgICBzdXBlcihwb0RhdGVTZXJ2aWNlLCBwb0xhbmd1YWdlU2VydmljZSk7XG4gICAgdGhpcy5wb0RhdGVwaWNrZXJSYW5nZUVsZW1lbnQgPSBwb0RhdGVwaWNrZXJSYW5nZUVsZW1lbnQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0S2V5Q29kZShldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIHJldHVybiBldmVudC5rZXlDb2RlIHx8IGV2ZW50LndoaWNoO1xuICB9XG5cbiAgc3RhdGljIGdldFRhcmdldEVsZW1lbnQoZXZlbnQ6IGFueSkge1xuICAgIHJldHVybiBldmVudC50YXJnZXQgfHwgZXZlbnQuc3JjRWxlbWVudDtcbiAgfVxuXG4gIHN0YXRpYyBpc1ZhbGlkS2V5KGtleUNvZGU6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGlzTnVtZXJpY0tleSA9IGtleUNvZGUgPj0gNDggJiYga2V5Q29kZSA8PSA1NztcbiAgICBjb25zdCBpc051bWVyaWNOdW1wYWRLZXkgPSBrZXlDb2RlID49IDk2ICYmIGtleUNvZGUgPD0gMTA1O1xuXG4gICAgcmV0dXJuIGlzTnVtZXJpY0tleSB8fCBpc051bWVyaWNOdW1wYWRLZXk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgaWYgKHRoaXMuYXV0b0ZvY3VzKSB7XG4gICAgICB0aGlzLmZvY3VzKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgLy8gQ2xhc3NlIGRlIG3DoXNjYXJhXG4gICAgdGhpcy5wb01hc2tPYmplY3QgPSB0aGlzLmJ1aWxkTWFzaygpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLm1pbkRhdGUgfHwgY2hhbmdlcy5tYXhEYXRlKSB7XG4gICAgICB0aGlzLnZhbGlkYXRlTW9kZWwodGhpcy5kYXRlUmFuZ2UpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMucmVtb3ZlTGlzdGVuZXJzKCk7XG4gIH1cblxuICBjbGVhcigpIHtcbiAgICB0aGlzLnJlc2V0RGF0ZVJhbmdlSW5wdXRWYWxpZGF0aW9uKCk7XG4gICAgdGhpcy5kYXRlUmFuZ2UgPSB7IHN0YXJ0OiAnJywgZW5kOiAnJyB9O1xuXG4gICAgdGhpcy51cGRhdGVTY3JlZW5CeU1vZGVsKHRoaXMuZGF0ZVJhbmdlKTtcbiAgICB0aGlzLnVwZGF0ZU1vZGVsKHRoaXMuZGF0ZVJhbmdlKTtcbiAgfVxuXG4gIGV2ZW50T25DbGljaygkZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucG9NYXNrT2JqZWN0LmNsaWNrKCRldmVudCk7XG4gIH1cblxuICAvKipcbiAgICogRnVuw6fDo28gcXVlIGF0cmlidWkgZm9jbyBhbyBjb21wb25lbnRlLlxuICAgKlxuICAgKiBQYXJhIHV0aWxpesOhLWxhIMOpIG5lY2Vzc8OhcmlvIHRlciBhIGluc3TDom5jaWEgZG8gY29tcG9uZW50ZSBubyBET00sIHBvZGVuZG8gc2VyIHV0aWxpemFkbyBvIFZpZXdDaGlsZCBkYSBzZWd1aW50ZSBmb3JtYTpcbiAgICpcbiAgICogYGBgXG4gICAqIGltcG9ydCB7IFBvRGF0ZXBpY2tlclJhbmdlQ29tcG9uZW50IH0gZnJvbSAnQHBvLXVpL25nLWNvbXBvbmVudHMnO1xuICAgKlxuICAgKiAuLi5cbiAgICpcbiAgICogQFZpZXdDaGlsZChQb0RhdGVwaWNrZXJSYW5nZUNvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSkgZGF0ZXBpY2tlclJhbmdlOiBQb0RhdGVwaWNrZXJSYW5nZUNvbXBvbmVudDtcbiAgICpcbiAgICogZm9jdXNEYXRlcGlja2VyUmFuZ2UoKSB7XG4gICAqICAgdGhpcy5kYXRlcGlja2VyUmFuZ2UuZm9jdXMoKTtcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIGZvY3VzKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5zdGFydERhdGVJbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuICB9XG5cbiAgb25CbHVyKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLm9uVG91Y2hlZE1vZGVsPy4oKTtcbiAgICBjb25zdCBpc1N0YXJ0RGF0ZVRhcmdldEV2ZW50ID0gZXZlbnQudGFyZ2V0Lm5hbWUgPT09IHRoaXMuc3RhcnREYXRlSW5wdXROYW1lO1xuXG4gICAgdGhpcy51cGRhdGVNb2RlbEJ5U2NyZWVuKGlzU3RhcnREYXRlVGFyZ2V0RXZlbnQpO1xuXG4gICAgdGhpcy5yZW1vdmVGb2N1c0Zyb21EYXRlUGlja2VyUmFuZ2VGaWVsZCgpO1xuICB9XG5cbiAgb25DYWxlbmRhckNoYW5nZSh7IHN0YXJ0LCBlbmQgfSkge1xuICAgIGNvbnN0IGlzU3RhcnREYXRlVGFyZ2V0RXZlbnQgPSBzdGFydCAmJiAhZW5kO1xuXG4gICAgdGhpcy51cGRhdGVTY3JlZW5CeU1vZGVsKHsgc3RhcnQ6IHN0YXJ0IHx8ICcnLCBlbmQ6IGVuZCB8fCAnJyB9KTtcbiAgICB0aGlzLnVwZGF0ZU1vZGVsQnlTY3JlZW4oaXNTdGFydERhdGVUYXJnZXRFdmVudCwgc3RhcnQgfHwgJycsIGVuZCB8fCAnJyk7XG5cbiAgICBpZiAoc3RhcnQgJiYgZW5kKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5pc0NhbGVuZGFyVmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSwgMzAwKTtcbiAgICB9XG4gIH1cblxuICBvbkZvY3VzKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmFwcGx5Rm9jdXNPbkRhdGVQaWNrZXJSYW5nZUZpZWxkKCk7XG4gICAgdGhpcy5wb01hc2tPYmplY3QucmVzZXRQb3NpdGlvbnMoZXZlbnQpO1xuICB9XG5cbiAgb25LZXlkb3duKGV2ZW50PzogYW55KSB7XG4gICAgaWYgKHRoaXMucmVhZG9ubHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1NldEZvY3VzT25CYWNrc3BhY2UoZXZlbnQpKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5zZXRGb2N1c09uQmFja3NwYWNlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucG9NYXNrT2JqZWN0LmtleWRvd24oZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIG9uS2V5dXAoZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLnJlYWRvbmx5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaXNTdGFydERhdGVUYXJnZXRFdmVudCA9IGV2ZW50LnRhcmdldC5uYW1lID09PSB0aGlzLnN0YXJ0RGF0ZUlucHV0TmFtZTtcblxuICAgIHRoaXMuc2V0Rm9jdXMoZXZlbnQpO1xuICAgIHRoaXMucG9NYXNrT2JqZWN0LmtleXVwKGV2ZW50KTtcbiAgICB0aGlzLnVwZGF0ZU1vZGVsV2hlbkNvbXBsZXRlKGlzU3RhcnREYXRlVGFyZ2V0RXZlbnQsIHRoaXMuc3RhcnREYXRlSW5wdXRWYWx1ZSwgdGhpcy5lbmREYXRlSW5wdXRWYWx1ZSk7XG4gIH1cblxuICByZXNldERhdGVSYW5nZUlucHV0VmFsaWRhdGlvbigpIHtcbiAgICB0aGlzLmlzU3RhcnREYXRlUmFuZ2VJbnB1dFZhbGlkID0gdHJ1ZTtcbiAgICB0aGlzLmlzRGF0ZVJhbmdlSW5wdXRGb3JtYXRWYWxpZCA9IHRydWU7XG4gIH1cblxuICB0b2dnbGVDYWxlbmRhcigpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5pc0NhbGVuZGFyVmlzaWJsZSA9ICF0aGlzLmlzQ2FsZW5kYXJWaXNpYmxlO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgaWYgKHRoaXMuaXNDYWxlbmRhclZpc2libGUpIHtcbiAgICAgIHRoaXMuc2V0Q2FsZW5kYXJQb3NpdGlvbigpO1xuICAgICAgdGhpcy5pbml0aWFsaXplTGlzdGVuZXJzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVtb3ZlTGlzdGVuZXJzKCk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlU2NyZWVuQnlNb2RlbChtb2RlbDogUG9EYXRlcGlja2VyUmFuZ2UpIHtcbiAgICBjb25zdCBkYXRlUmFuZ2UgPSB7IHN0YXJ0OiBtb2RlbC5zdGFydCBhcyBzdHJpbmcsIGVuZDogbW9kZWwuZW5kIGFzIHN0cmluZyB9O1xuICAgIGNvbnN0IGlzU3RhcnREYXRlVmFsaWQgPSB0aGlzLnBvRGF0ZVNlcnZpY2UuaXNEYXRlUmFuZ2VWYWxpZChkYXRlUmFuZ2UuZW5kLCBkYXRlUmFuZ2Uuc3RhcnQpO1xuICAgIGNvbnN0IGlzRGF0ZVZhbGlkID0gZGF0ZSA9PiAhdGhpcy5kYXRlRm9ybWF0RmFpbGVkKGRhdGUpICYmIGlzU3RhcnREYXRlVmFsaWQ7XG5cbiAgICBjb25zdCBlbmREYXRlRm9ybWF0ZWQgPSBpc0RhdGVWYWxpZChkYXRlUmFuZ2UuZW5kKSA/IHRoaXMuZm9ybWF0TW9kZWxUb1NjcmVlbihkYXRlUmFuZ2UuZW5kKSA6ICcnO1xuICAgIGNvbnN0IHN0YXJ0RGF0ZUZvcm1hdGVkID0gaXNEYXRlVmFsaWQoZGF0ZVJhbmdlLnN0YXJ0KSA/IHRoaXMuZm9ybWF0TW9kZWxUb1NjcmVlbihkYXRlUmFuZ2Uuc3RhcnQpIDogJyc7XG5cbiAgICB0aGlzLmVuZERhdGVJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gZW5kRGF0ZUZvcm1hdGVkO1xuICAgIHRoaXMuc3RhcnREYXRlSW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9IHN0YXJ0RGF0ZUZvcm1hdGVkO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseUZvY3VzT25EYXRlUGlja2VyUmFuZ2VGaWVsZCgpIHtcbiAgICB0aGlzLmRhdGVSYW5nZUZpZWxkLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgncG8tZGF0ZXBpY2tlci1yYW5nZS1maWVsZC1mb2N1c2VkJyk7XG4gIH1cblxuICAvLyBSZXRvcm5hIHVtIG9iamV0byBkbyB0aXBvIFBvTWFzayBjb20gYSBtYXNjYXJhIGNvbmZpZ3VyYWRhLlxuICBwcml2YXRlIGJ1aWxkTWFzaygpOiBQb01hc2sge1xuICAgIGxldCBtYXNrID0gdGhpcy5mb3JtYXQudG9VcHBlckNhc2UoKTtcblxuICAgIG1hc2sgPSBtYXNrLnJlcGxhY2UoL0REL2csICc5OScpO1xuICAgIG1hc2sgPSBtYXNrLnJlcGxhY2UoL01NL2csICc5OScpO1xuICAgIG1hc2sgPSBtYXNrLnJlcGxhY2UoL1lZWVkvZywgJzk5OTknKTtcblxuICAgIHJldHVybiBuZXcgUG9NYXNrKG1hc2ssIHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXREYXRlKGZvcm1hdDogc3RyaW5nLCBkYXk6IHN0cmluZyA9ICcnLCBtb250aDogc3RyaW5nID0gJycsIHllYXI6IHN0cmluZyA9ICcnKTogc3RyaW5nIHtcbiAgICBsZXQgZGF0ZUZvcm1hdHRlZCA9IGZvcm1hdDtcblxuICAgIGRheSA9IGRheSAmJiBkYXkuaW5jbHVkZXMoJ1QnKSA/IGRheS5zbGljZSgwLCAyKSA6IGRheTtcblxuICAgIGRhdGVGb3JtYXR0ZWQgPSBkYXRlRm9ybWF0dGVkLnJlcGxhY2UoJ2RkJywgKCcwJyArIGRheSkuc2xpY2UoLTIpKTtcbiAgICBkYXRlRm9ybWF0dGVkID0gZGF0ZUZvcm1hdHRlZC5yZXBsYWNlKCdtbScsICgnMCcgKyBtb250aCkuc2xpY2UoLTIpKTtcbiAgICBkYXRlRm9ybWF0dGVkID0gZGF0ZUZvcm1hdHRlZC5yZXBsYWNlKCd5eXl5JywgU3RyaW5nKHllYXIpKTtcblxuICAgIHJldHVybiBkYXRlRm9ybWF0dGVkO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRTY3JlZW5Ub01vZGVsKHZhbHVlOiBzdHJpbmcgPSAnJyk6IHN0cmluZyB7XG4gICAgY29uc3QgW2RheSwgbW9udGgsIHllYXJdID0gdmFsdWUuc3BsaXQoJy8nKTtcblxuICAgIHJldHVybiB2YWx1ZSA/IHRoaXMuZm9ybWF0RGF0ZSgneXl5eS1tbS1kZCcsIGRheSwgbW9udGgsIHllYXIpIDogJyc7XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdE1vZGVsVG9TY3JlZW4odmFsdWU6IHN0cmluZyA9ICcnKTogc3RyaW5nIHtcbiAgICBjb25zdCBbeWVhciwgbW9udGgsIGRheV0gPSB2YWx1ZS5zcGxpdCgnLScpO1xuXG4gICAgcmV0dXJuIHZhbHVlID8gdGhpcy5mb3JtYXREYXRlKHRoaXMuZm9ybWF0LCBkYXksIG1vbnRoLCB5ZWFyKSA6ICcnO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREYXRlUmFuZ2VGb3JtYXRWYWxpZGF0aW9uKFxuICAgIHN0YXJ0RGF0ZTogc3RyaW5nLFxuICAgIGVuZERhdGU6IHN0cmluZyxcbiAgICBpc1N0YXJ0RGF0ZVRhcmdldEV2ZW50OiBib29sZWFuXG4gICk6IHsgaXNWYWxpZDogYm9vbGVhbjsgZGF0ZVJhbmdlTW9kZWw6IFBvRGF0ZXBpY2tlclJhbmdlIH0ge1xuICAgIHRoaXMuc2V0RGF0ZVJhbmdlSW5wdXRWYWxpZGF0aW9uKHN0YXJ0RGF0ZSwgZW5kRGF0ZSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzVmFsaWQ6XG4gICAgICAgIHRoaXMuaXNEYXRlUmFuZ2VJbnB1dEZvcm1hdFZhbGlkICYmIHRoaXMuaXNTdGFydERhdGVSYW5nZUlucHV0VmFsaWQgJiYgdGhpcy52ZXJpZnlWYWxpZERhdGUoc3RhcnREYXRlLCBlbmREYXRlKSxcbiAgICAgIGRhdGVSYW5nZU1vZGVsOiB0aGlzLmdldFZhbGlkYXRlZE1vZGVsKHN0YXJ0RGF0ZSwgZW5kRGF0ZSwgaXNTdGFydERhdGVUYXJnZXRFdmVudClcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRWYWxpZGF0ZWRNb2RlbChzdGFydERhdGU6IHN0cmluZywgZW5kRGF0ZTogc3RyaW5nLCBpc1N0YXJ0RGF0ZVRhcmdldEV2ZW50OiBib29sZWFuKTogUG9EYXRlcGlja2VyUmFuZ2Uge1xuICAgIGNvbnN0IGRhdGVSYW5nZU1vZGVsID0geyBzdGFydDogJycsIGVuZDogJycgfTtcblxuICAgIGRhdGVSYW5nZU1vZGVsLmVuZCA9XG4gICAgICAoaXNTdGFydERhdGVUYXJnZXRFdmVudCB8fCB0aGlzLmlzU3RhcnREYXRlUmFuZ2VJbnB1dFZhbGlkKSAmJiAhdGhpcy5kYXRlRm9ybWF0RmFpbGVkKGVuZERhdGUpID8gZW5kRGF0ZSA6ICcnO1xuXG4gICAgZGF0ZVJhbmdlTW9kZWwuc3RhcnQgPVxuICAgICAgKCFpc1N0YXJ0RGF0ZVRhcmdldEV2ZW50IHx8IHRoaXMuaXNTdGFydERhdGVSYW5nZUlucHV0VmFsaWQpICYmICF0aGlzLmRhdGVGb3JtYXRGYWlsZWQoc3RhcnREYXRlKVxuICAgICAgICA/IHN0YXJ0RGF0ZVxuICAgICAgICA6ICcnO1xuXG4gICAgcmV0dXJuIGRhdGVSYW5nZU1vZGVsO1xuICB9XG5cbiAgcHJpdmF0ZSBoYXNBdHRyQ2FsZW5kYXIoZWxlbWVudCkge1xuICAgIGNvbnN0IGF0dHJDYWxlbmRhciA9ICdhdHRyLWNhbGVuZGFyJztcblxuICAgIHJldHVybiBlbGVtZW50Py5oYXNBdHRyaWJ1dGUoYXR0ckNhbGVuZGFyKSB8fCBlbGVtZW50Py5wYXJlbnRFbGVtZW50Py5oYXNBdHRyaWJ1dGUoYXR0ckNhbGVuZGFyKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFzSW52YWxpZENsYXNzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnBvRGF0ZXBpY2tlclJhbmdlRWxlbWVudC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnbmctaW52YWxpZCcpICYmXG4gICAgICB0aGlzLnBvRGF0ZXBpY2tlclJhbmdlRWxlbWVudC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnbmctZGlydHknKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVMaXN0ZW5lcnMoKSB7XG4gICAgdGhpcy5jbGlja0xpc3RlbmVyID0gdGhpcy5yZW5kZXJlci5saXN0ZW4oJ2RvY3VtZW50JywgJ2NsaWNrJywgKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICB0aGlzLndhc0NsaWNrZWRPblBpY2tlcihldmVudCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmV2ZW50UmVzaXplTGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3Rlbignd2luZG93JywgJ3Jlc2l6ZScsICgpID0+IHtcbiAgICAgIHRoaXMuaXNDYWxlbmRhclZpc2libGUgPSBmYWxzZTtcbiAgICB9KTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLm9uU2Nyb2xsLCB0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNFcXVhbEJlZm9yZVZhbHVlKHN0YXJ0RGF0ZTogc3RyaW5nLCBlbmREYXRlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0RhdGVSYW5nZUlucHV0Rm9ybWF0VmFsaWQgJiYgZW5kRGF0ZSA9PT0gdGhpcy5kYXRlUmFuZ2UuZW5kICYmIHN0YXJ0RGF0ZSA9PT0gdGhpcy5kYXRlUmFuZ2Uuc3RhcnQ7XG4gIH1cblxuICBwcml2YXRlIGlzU2V0Rm9jdXNPbkJhY2tzcGFjZShldmVudDogYW55KSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGV2ZW50LnRhcmdldC5uYW1lID09PSB0aGlzLmVuZERhdGVJbnB1dE5hbWUgJiZcbiAgICAgIHRoaXMuZW5kRGF0ZUlucHV0Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQgPT09IDAgJiZcbiAgICAgIHRoaXMuZW5kRGF0ZUlucHV0Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uRW5kID09PSAwICYmXG4gICAgICBldmVudC5rZXlDb2RlID09PSBiYWNrc3BhY2VLZXlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBvblNjcm9sbCA9ICgpOiB2b2lkID0+IHtcbiAgICBpZiAodGhpcy5pc0NhbGVuZGFyVmlzaWJsZSkge1xuICAgICAgdGhpcy5jb250cm9sUG9zaXRpb24uYWRqdXN0UG9zaXRpb24ocG9DYWxlbmRhclBvc2l0aW9uRGVmYXVsdCk7XG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgcmVtb3ZlRm9jdXNGcm9tRGF0ZVBpY2tlclJhbmdlRmllbGQoKSB7XG4gICAgdGhpcy5kYXRlUmFuZ2VGaWVsZC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ3BvLWRhdGVwaWNrZXItcmFuZ2UtZmllbGQtZm9jdXNlZCcpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXREYXRlUmFuZ2VJbnB1dFZhbGlkYXRpb24oc3RhcnREYXRlOiBzdHJpbmcsIGVuZERhdGU6IHN0cmluZykge1xuICAgIHRoaXMuaXNTdGFydERhdGVSYW5nZUlucHV0VmFsaWQgPSB0aGlzLnBvRGF0ZVNlcnZpY2UuaXNEYXRlUmFuZ2VWYWxpZChlbmREYXRlLCBzdGFydERhdGUpO1xuXG4gICAgdGhpcy5pc0RhdGVSYW5nZUlucHV0Rm9ybWF0VmFsaWQgPSAhdGhpcy5kYXRlRm9ybWF0RmFpbGVkKHN0YXJ0RGF0ZSkgJiYgIXRoaXMuZGF0ZUZvcm1hdEZhaWxlZChlbmREYXRlKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Rm9jdXMoZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IGlucHV0RWxlbWVudCA9IFBvRGF0ZXBpY2tlclJhbmdlQ29tcG9uZW50LmdldFRhcmdldEVsZW1lbnQoZXZlbnQpO1xuICAgIGNvbnN0IGtleUNvZGUgPSBQb0RhdGVwaWNrZXJSYW5nZUNvbXBvbmVudC5nZXRLZXlDb2RlKGV2ZW50KTtcbiAgICBjb25zdCBpbnB1dE5hbWUgPSBpbnB1dEVsZW1lbnRbJ25hbWUnXTtcblxuICAgIHRoaXMuc2V0Rm9jdXNPbkFycm93TGVmdChrZXlDb2RlLCBpbnB1dE5hbWUpO1xuICAgIHRoaXMuc2V0Rm9jdXNPbkFycm93UmlnaHQoa2V5Q29kZSwgaW5wdXROYW1lLCBpbnB1dEVsZW1lbnQpO1xuICAgIHRoaXMuc2V0Rm9jdXNPblN0YXJ0RGF0ZUNvbXBsZXRlZChrZXlDb2RlLCBpbnB1dE5hbWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRGb2N1c0FuZFBvc2l0aW9uKHBvc2l0aW9uOiBudW1iZXIsIGlucHV0RWxlbWVudDogRWxlbWVudFJlZiwgc2VsZWN0aW9uUmFuZ2U6IG51bWJlcikge1xuICAgIHRoaXMuZm9jdXNPbkVsZW1lbnQoaW5wdXRFbGVtZW50KTtcblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2Uoc2VsZWN0aW9uUmFuZ2UsIHNlbGVjdGlvblJhbmdlKTtcbiAgICAgIHRoaXMucG9NYXNrT2JqZWN0LmluaXRpYWxQb3NpdGlvbiA9IHBvc2l0aW9uO1xuICAgICAgdGhpcy5wb01hc2tPYmplY3QuZmluYWxQb3NpdGlvbiA9IHBvc2l0aW9uO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBmb2N1c09uRWxlbWVudChpbnB1dEVsZW1lbnQ6IEVsZW1lbnRSZWYpIHtcbiAgICBpbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVMaXN0ZW5lcnMoKSB7XG4gICAgaWYgKHRoaXMuY2xpY2tMaXN0ZW5lcikge1xuICAgICAgdGhpcy5jbGlja0xpc3RlbmVyKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZXZlbnRSZXNpemVMaXN0ZW5lcikge1xuICAgICAgdGhpcy5ldmVudFJlc2l6ZUxpc3RlbmVyKCk7XG4gICAgfVxuXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMub25TY3JvbGwsIHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRDYWxlbmRhclBvc2l0aW9uKCkge1xuICAgIHRoaXMuY29udHJvbFBvc2l0aW9uLnNldEVsZW1lbnRzKFxuICAgICAgdGhpcy5jYWxlbmRhclBpY2tlci5uYXRpdmVFbGVtZW50LFxuICAgICAgcG9DYWxlbmRhckNvbnRlbnRPZmZzZXQsXG4gICAgICB0aGlzLmRhdGVSYW5nZUZpZWxkLFxuICAgICAgWydib3R0b20tbGVmdCcsICdib3R0b20tcmlnaHQnLCAndG9wLWxlZnQnLCAndG9wLXJpZ2h0J10sXG4gICAgICBmYWxzZSxcbiAgICAgIHRydWVcbiAgICApO1xuXG4gICAgdGhpcy5jb250cm9sUG9zaXRpb24uYWRqdXN0UG9zaXRpb24ocG9DYWxlbmRhclBvc2l0aW9uRGVmYXVsdCk7XG4gIH1cblxuICBwcml2YXRlIHNldEZvY3VzT25BcnJvd0xlZnQoa2V5Q29kZTogbnVtYmVyLCBpbnB1dE5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGlzQ3Vyc29yQXRTdGFydE9mSW5wdXQgPSB0aGlzLmVuZERhdGVJbnB1dC5uYXRpdmVFbGVtZW50LnNlbGVjdGlvblN0YXJ0ID09PSAwO1xuXG4gICAgaWYgKGlucHV0TmFtZSA9PT0gdGhpcy5lbmREYXRlSW5wdXROYW1lICYmIGlzQ3Vyc29yQXRTdGFydE9mSW5wdXQgJiYga2V5Q29kZSA9PT0gYXJyb3dMZWZ0S2V5KSB7XG4gICAgICBjb25zdCBpbnB1dExlbmd0aCA9IHRoaXMuc3RhcnREYXRlSW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZS5sZW5ndGg7XG4gICAgICB0aGlzLnNldEZvY3VzQW5kUG9zaXRpb24oaW5wdXRMZW5ndGgsIHRoaXMuc3RhcnREYXRlSW5wdXQsIGlucHV0TGVuZ3RoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldEZvY3VzT25BcnJvd1JpZ2h0KGtleUNvZGU6IG51bWJlciwgaW5wdXROYW1lOiBzdHJpbmcsIGlucHV0RWxlbWVudDogYW55KSB7XG4gICAgY29uc3QgaXNDdXJzb3JBdEVuZE9mSW5wdXQgPSB0aGlzLnN0YXJ0RGF0ZUlucHV0Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQgPT09IGlucHV0RWxlbWVudC52YWx1ZS5sZW5ndGg7XG5cbiAgICBpZiAoaW5wdXROYW1lID09PSB0aGlzLnN0YXJ0RGF0ZUlucHV0TmFtZSAmJiBpc0N1cnNvckF0RW5kT2ZJbnB1dCAmJiBrZXlDb2RlID09PSBhcnJvd1JpZ2h0S2V5KSB7XG4gICAgICB0aGlzLnNldEZvY3VzQW5kUG9zaXRpb24oMCwgdGhpcy5lbmREYXRlSW5wdXQsIDApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0Rm9jdXNPbkJhY2tzcGFjZSgpIHtcbiAgICBjb25zdCBpbnB1dExlbmd0aCA9IHRoaXMuc3RhcnREYXRlSW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZS5sZW5ndGg7XG5cbiAgICB0aGlzLnN0YXJ0RGF0ZUlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB0aGlzLnN0YXJ0RGF0ZUlucHV0VmFsdWUuc2xpY2UoMCwgLTEpO1xuICAgIHRoaXMuc2V0Rm9jdXNBbmRQb3NpdGlvbihpbnB1dExlbmd0aCwgdGhpcy5zdGFydERhdGVJbnB1dCwgaW5wdXRMZW5ndGgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRGb2N1c09uU3RhcnREYXRlQ29tcGxldGVkKGtleUNvZGU6IG51bWJlciwgaW5wdXROYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBpc0xhc3RLZXlQcmVzc2VkID0gdGhpcy5zdGFydERhdGVJbnB1dC5uYXRpdmVFbGVtZW50LnNlbGVjdGlvblN0YXJ0ID09PSBwb0RhdGVwaWNrZXJSYW5nZURhdGVMZW5ndGhEZWZhdWx0O1xuICAgIGNvbnN0IGlzTmV3RGF0ZUNvbXBsZXRlZCA9XG4gICAgICB0aGlzLnN0YXJ0RGF0ZUlucHV0VmFsdWUubGVuZ3RoID09PSBwb0RhdGVwaWNrZXJSYW5nZURhdGVMZW5ndGhEZWZhdWx0ICYmIGlzTGFzdEtleVByZXNzZWQ7XG4gICAgY29uc3QgaXNWYWxpZEtleSA9IFBvRGF0ZXBpY2tlclJhbmdlQ29tcG9uZW50LmlzVmFsaWRLZXkoa2V5Q29kZSk7XG5cbiAgICBpZiAoaW5wdXROYW1lID09PSB0aGlzLnN0YXJ0RGF0ZUlucHV0TmFtZSAmJiBpc05ld0RhdGVDb21wbGV0ZWQgJiYgaXNWYWxpZEtleSkge1xuICAgICAgdGhpcy5zZXRGb2N1c0FuZFBvc2l0aW9uKDAsIHRoaXMuZW5kRGF0ZUlucHV0LCAwKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU1vZGVsV2hlbkNvbXBsZXRlKGlzU3RhcnREYXRlVGFyZ2V0RXZlbnQ6IGJvb2xlYW4sIHN0YXJ0RGF0ZSwgZW5kRGF0ZSkge1xuICAgIGNvbnN0IGVuZERhdGVGb3JtYXR0ZWQgPSB0aGlzLmZvcm1hdFNjcmVlblRvTW9kZWwoZW5kRGF0ZSk7XG4gICAgY29uc3Qgc3RhcnREYXRlRm9ybWF0dGVkID0gdGhpcy5mb3JtYXRTY3JlZW5Ub01vZGVsKHN0YXJ0RGF0ZSk7XG4gICAgY29uc3QgZGF0ZUZvcm1hdFZhbGlkYXRpb24gPSB0aGlzLmdldERhdGVSYW5nZUZvcm1hdFZhbGlkYXRpb24oXG4gICAgICBzdGFydERhdGVGb3JtYXR0ZWQsXG4gICAgICBlbmREYXRlRm9ybWF0dGVkLFxuICAgICAgaXNTdGFydERhdGVUYXJnZXRFdmVudFxuICAgICk7XG5cbiAgICBpZiAodGhpcy5pc0VxdWFsQmVmb3JlVmFsdWUoc3RhcnREYXRlRm9ybWF0dGVkLCBlbmREYXRlRm9ybWF0dGVkKSkge1xuICAgICAgdGhpcy5yZXNldERhdGVSYW5nZUlucHV0VmFsaWRhdGlvbigpO1xuICAgICAgdGhpcy52YWxpZGF0ZU1vZGVsKHRoaXMuZGF0ZVJhbmdlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZGF0ZUZvcm1hdFZhbGlkYXRpb24uaXNWYWxpZCkge1xuICAgICAgdGhpcy5kYXRlUmFuZ2UgPSB7IHN0YXJ0OiBzdGFydERhdGVGb3JtYXR0ZWQsIGVuZDogZW5kRGF0ZUZvcm1hdHRlZCB9O1xuICAgICAgdGhpcy51cGRhdGVNb2RlbCh0aGlzLmRhdGVSYW5nZSk7XG4gICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQoeyAuLi50aGlzLmRhdGVSYW5nZSB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU1vZGVsQnlTY3JlZW4oaXNTdGFydERhdGVUYXJnZXRFdmVudDogYm9vbGVhbiwgc3RhcnREYXRlPywgZW5kRGF0ZT8pIHtcbiAgICBjb25zdCBlbmREYXRlRm9ybWF0dGVkID0gZW5kRGF0ZSB8fCB0aGlzLmZvcm1hdFNjcmVlblRvTW9kZWwodGhpcy5lbmREYXRlSW5wdXRWYWx1ZSk7XG4gICAgY29uc3Qgc3RhcnREYXRlRm9ybWF0dGVkID0gc3RhcnREYXRlIHx8IHRoaXMuZm9ybWF0U2NyZWVuVG9Nb2RlbCh0aGlzLnN0YXJ0RGF0ZUlucHV0VmFsdWUpO1xuICAgIGlmICh0aGlzLmlzRGF0ZVJhbmdlSW5wdXRVbmNvbXBsZXRlZCAmJiB0aGlzLmlzRGlydHlEYXRlUmFuZ2VJbnB1dCkge1xuICAgICAgdGhpcy51cGRhdGVNb2RlbCh0aGlzLmRhdGVSYW5nZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNFcXVhbEJlZm9yZVZhbHVlKHN0YXJ0RGF0ZUZvcm1hdHRlZCwgZW5kRGF0ZUZvcm1hdHRlZCkpIHtcbiAgICAgIHRoaXMucmVzZXREYXRlUmFuZ2VJbnB1dFZhbGlkYXRpb24oKTtcbiAgICAgIHRoaXMudmFsaWRhdGVNb2RlbCh0aGlzLmRhdGVSYW5nZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZGF0ZUZvcm1hdFZhbGlkYXRpb24gPSB0aGlzLmdldERhdGVSYW5nZUZvcm1hdFZhbGlkYXRpb24oXG4gICAgICBzdGFydERhdGVGb3JtYXR0ZWQsXG4gICAgICBlbmREYXRlRm9ybWF0dGVkLFxuICAgICAgaXNTdGFydERhdGVUYXJnZXRFdmVudFxuICAgICk7XG5cbiAgICBpZiAoZGF0ZUZvcm1hdFZhbGlkYXRpb24uaXNWYWxpZCkge1xuICAgICAgdGhpcy5kYXRlUmFuZ2UgPSB7IHN0YXJ0OiBzdGFydERhdGVGb3JtYXR0ZWQsIGVuZDogZW5kRGF0ZUZvcm1hdHRlZCB9O1xuICAgICAgdGhpcy51cGRhdGVNb2RlbCh0aGlzLmRhdGVSYW5nZSk7XG4gICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQoeyAuLi50aGlzLmRhdGVSYW5nZSB9KTtcbiAgICB9XG5cbiAgICBpZiAoIWRhdGVGb3JtYXRWYWxpZGF0aW9uLmlzVmFsaWQgJiYgdGhpcy52ZXJpZnlGb3JtYXR0ZWREYXRlcyhzdGFydERhdGVGb3JtYXR0ZWQsIGVuZERhdGVGb3JtYXR0ZWQpKSB7XG4gICAgICB0aGlzLmRhdGVSYW5nZSA9IHsgLi4uZGF0ZUZvcm1hdFZhbGlkYXRpb24uZGF0ZVJhbmdlTW9kZWwgfTtcbiAgICAgIHRoaXMudXBkYXRlTW9kZWwoZGF0ZUZvcm1hdFZhbGlkYXRpb24uZGF0ZVJhbmdlTW9kZWwpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdmVyaWZ5Rm9ybWF0dGVkRGF0ZXMoc3RhcnQ6IHN0cmluZywgZW5kOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISFzdGFydCB8fCAhIWVuZDtcbiAgfVxuXG4gIHByaXZhdGUgd2FzQ2xpY2tlZE9uUGlja2VyKGV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzQ2FsZW5kYXJWaXNpYmxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgIXRoaXMuY2FsZW5kYXJQaWNrZXIubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpICYmXG4gICAgICAhdGhpcy5pY29uQ2FsZW5kYXIubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpICYmXG4gICAgICAhdGhpcy5oYXNBdHRyQ2FsZW5kYXIoZXZlbnQudGFyZ2V0KVxuICAgICkge1xuICAgICAgdGhpcy5pc0NhbGVuZGFyVmlzaWJsZSA9IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG59XG4iLCI8cG8tZmllbGQtY29udGFpbmVyXG4gIFtjbGFzcy5wby1kYXRlLXBpY2tlci1jb250YWluZXItZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICBbcC1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gIFtwLWhlbHBdPVwiaGVscFwiXG4gIFtwLWxhYmVsXT1cImxhYmVsXCJcbiAgW3Atb3B0aW9uYWxdPVwib3B0aW9uYWxcIlxuICBbcC1yZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gIFtwLXNob3ctcmVxdWlyZWRdPVwic2hvd1JlcXVpcmVkXCJcbj5cbiAgPGRpdlxuICAgICNkYXRlUmFuZ2VGaWVsZFxuICAgIGNsYXNzPVwicG8tZGF0ZXBpY2tlci1yYW5nZS1maWVsZCBwby1pbnB1dFwiXG4gICAgW2NsYXNzLnBvLWRhdGVwaWNrZXItcmFuZ2UtZmllbGQtZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgIFthdHRyLmRpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJwby1kYXRlcGlja2VyLXJhbmdlLXN0YXJ0LWRhdGVcIj5cbiAgICAgIDxpbnB1dFxuICAgICAgICAjc3RhcnREYXRlSW5wdXRcbiAgICAgICAgY2xhc3M9XCJwby1kYXRlcGlja2VyLXJhbmdlLWlucHV0XCJcbiAgICAgICAgbWF4bGVuZ3RoPVwiMTBcIlxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwibGFiZWxcIlxuICAgICAgICBbYXV0b2NvbXBsZXRlXT1cImF1dG9jb21wbGV0ZVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgIFtuYW1lXT1cInN0YXJ0RGF0ZUlucHV0TmFtZVwiXG4gICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgIChibHVyKT1cIm9uQmx1cigkZXZlbnQpXCJcbiAgICAgICAgKGZvY3VzKT1cIm9uRm9jdXMoJGV2ZW50KVwiXG4gICAgICAgIChrZXlkb3duKT1cIm9uS2V5ZG93bigkZXZlbnQpXCJcbiAgICAgICAgKGtleXVwKT1cIm9uS2V5dXAoJGV2ZW50KVwiXG4gICAgICAgIChjbGljayk9XCJldmVudE9uQ2xpY2soJGV2ZW50KVwiXG4gICAgICAvPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cInBvLWRhdGVwaWNrZXItcmFuZ2Utc2VwYXJhdG9yXCI+LTwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cInBvLWRhdGVwaWNrZXItcmFuZ2UtZW5kLWRhdGVcIj5cbiAgICAgIDxpbnB1dFxuICAgICAgICAjZW5kRGF0ZUlucHV0XG4gICAgICAgIGNsYXNzPVwicG8tZGF0ZXBpY2tlci1yYW5nZS1pbnB1dFwiXG4gICAgICAgIG1heGxlbmd0aD1cIjEwXCJcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBbYXV0b2NvbXBsZXRlXT1cImF1dG9jb21wbGV0ZVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgIFtuYW1lXT1cImVuZERhdGVJbnB1dE5hbWVcIlxuICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAgICAgICAoYmx1cik9XCJvbkJsdXIoJGV2ZW50KVwiXG4gICAgICAgIChmb2N1cyk9XCJvbkZvY3VzKCRldmVudClcIlxuICAgICAgICAoa2V5ZG93bik9XCJvbktleWRvd24oJGV2ZW50KVwiXG4gICAgICAgIChrZXl1cCk9XCJvbktleXVwKCRldmVudClcIlxuICAgICAgICAoY2xpY2spPVwiZXZlbnRPbkNsaWNrKCRldmVudClcIlxuICAgICAgLz5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJwby1kYXRlcGlja2VyLXJhbmdlLWljb25cIj5cbiAgICAgIDxwby1jbGVhbiBjbGFzcz1cInBvLWljb24taW5wdXRcIiAqbmdJZj1cImVuYWJsZUNsZWFuZXJcIiAocC1jaGFuZ2UtZXZlbnQpPVwiY2xlYXIoKVwiPjwvcG8tY2xlYW4+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwicG8tZGF0ZXBpY2tlci1yYW5nZS1pY29uXCI+XG4gICAgICA8c3BhblxuICAgICAgICAjaWNvbkNhbGVuZGFyXG4gICAgICAgIGNsYXNzPVwicG8taWNvbiBwby1maWVsZC1pY29uIHBvLWljb24tY2FsZW5kYXIge3sgZGlzYWJsZWQgPyAncG8taWNvbi1pbnB1dC1kaXNhYmxlZCcgOiAncG8taWNvbi1pbnB1dCcgfX1cIlxuICAgICAgICBbY2xhc3MucG8tY2xpY2thYmxlXT1cIiFkaXNhYmxlZCAmJiAhcmVhZG9ubHlcIlxuICAgICAgICBbY2xhc3MucG8tZmllbGQtaWNvbi1kaXNhYmxlZF09XCJkaXNhYmxlZCB8fCByZWFkb25seVwiXG4gICAgICAgIChjbGljayk9XCJ0b2dnbGVDYWxlbmRhcigpXCJcbiAgICAgID5cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPHBvLWZpZWxkLWNvbnRhaW5lci1ib3R0b20gW3AtZXJyb3ItcGF0dGVybl09XCJnZXRFcnJvck1lc3NhZ2VcIj48L3BvLWZpZWxkLWNvbnRhaW5lci1ib3R0b20+XG48L3BvLWZpZWxkLWNvbnRhaW5lcj5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzQ2FsZW5kYXJWaXNpYmxlXCI+XG4gIDxkaXYgI2NhbGVuZGFyUGlja2VyIGNsYXNzPVwicG8tY2FsZW5kYXItcmFuZ2UtcGlja2VyXCI+XG4gICAgPHBvLWNhbGVuZGFyXG4gICAgICBwLW1vZGU9XCJyYW5nZVwiXG4gICAgICBbbmdNb2RlbF09XCJkYXRlUmFuZ2VcIlxuICAgICAgW3AtbWF4LWRhdGVdPVwibWF4RGF0ZVwiXG4gICAgICBbcC1taW4tZGF0ZV09XCJtaW5EYXRlXCJcbiAgICAgIFtwLWxvY2FsZV09XCJsb2NhbGVcIlxuICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25DYWxlbmRhckNoYW5nZSgkZXZlbnQpXCJcbiAgICA+PC9wby1jYWxlbmRhcj5cbiAgPC9kaXY+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==