@po-ui/ng-components 18.21.0 → 18.23.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 (76) hide show
  1. package/esm2022/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-field.interface.mjs +1 -1
  2. package/esm2022/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-fields/po-dynamic-form-fields.component.mjs +19 -19
  3. package/esm2022/lib/components/po-field/po-checkbox-group/po-checkbox-group-base.component.mjs +18 -2
  4. package/esm2022/lib/components/po-field/po-checkbox-group/po-checkbox-group.component.mjs +4 -4
  5. package/esm2022/lib/components/po-field/po-combo/po-combo-base.component.mjs +22 -2
  6. package/esm2022/lib/components/po-field/po-combo/po-combo.component.mjs +4 -4
  7. package/esm2022/lib/components/po-field/po-datepicker/po-datepicker-base.component.mjs +22 -2
  8. package/esm2022/lib/components/po-field/po-datepicker/po-datepicker.component.mjs +4 -4
  9. package/esm2022/lib/components/po-field/po-datepicker-range/po-datepicker-range-base.component.mjs +18 -2
  10. package/esm2022/lib/components/po-field/po-datepicker-range/po-datepicker-range.component.mjs +4 -4
  11. package/esm2022/lib/components/po-field/po-decimal/po-decimal.component.mjs +4 -4
  12. package/esm2022/lib/components/po-field/po-email/po-email.component.mjs +4 -4
  13. package/esm2022/lib/components/po-field/po-field-container/po-field-container-bottom/po-field-container-bottom.component.mjs +27 -10
  14. package/esm2022/lib/components/po-field/po-field-container/po-field-container.module.mjs +5 -4
  15. package/esm2022/lib/components/po-field/po-field-validate.model.mjs +22 -2
  16. package/esm2022/lib/components/po-field/po-input/po-input-base.component.mjs +22 -2
  17. package/esm2022/lib/components/po-field/po-input/po-input.component.mjs +4 -4
  18. package/esm2022/lib/components/po-field/po-login/po-login.component.mjs +4 -4
  19. package/esm2022/lib/components/po-field/po-lookup/po-lookup-base.component.mjs +22 -2
  20. package/esm2022/lib/components/po-field/po-lookup/po-lookup.component.mjs +4 -4
  21. package/esm2022/lib/components/po-field/po-multiselect/po-multiselect-base.component.mjs +22 -2
  22. package/esm2022/lib/components/po-field/po-multiselect/po-multiselect.component.mjs +4 -4
  23. package/esm2022/lib/components/po-field/po-number/po-number.component.mjs +4 -4
  24. package/esm2022/lib/components/po-field/po-password/po-password.component.mjs +4 -4
  25. package/esm2022/lib/components/po-field/po-radio-group/po-radio-group-base.component.mjs +18 -2
  26. package/esm2022/lib/components/po-field/po-radio-group/po-radio-group.component.mjs +4 -4
  27. package/esm2022/lib/components/po-field/po-rich-text/po-rich-text-base.component.mjs +18 -2
  28. package/esm2022/lib/components/po-field/po-rich-text/po-rich-text.component.mjs +4 -4
  29. package/esm2022/lib/components/po-field/po-select/po-select.component.mjs +4 -4
  30. package/esm2022/lib/components/po-field/po-textarea/po-textarea-base.component.mjs +18 -2
  31. package/esm2022/lib/components/po-field/po-textarea/po-textarea.component.mjs +4 -4
  32. package/esm2022/lib/components/po-field/po-upload/po-upload-base.component.mjs +86 -2
  33. package/esm2022/lib/components/po-field/po-upload/po-upload.component.mjs +17 -7
  34. package/esm2022/lib/components/po-field/po-url/po-url.component.mjs +4 -4
  35. package/esm2022/lib/components/po-progress/index.mjs +2 -1
  36. package/esm2022/lib/components/po-progress/interfaces/index.mjs +2 -0
  37. package/esm2022/lib/components/po-progress/interfaces/po-progress-actions.interface.mjs +2 -0
  38. package/esm2022/lib/components/po-progress/po-progress-base.component.mjs +87 -2
  39. package/esm2022/lib/components/po-progress/po-progress.component.mjs +44 -15
  40. package/fesm2022/po-ui-ng-components.mjs +553 -132
  41. package/fesm2022/po-ui-ng-components.mjs.map +1 -1
  42. package/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-field.interface.d.ts +57 -1
  43. package/lib/components/po-field/po-checkbox-group/po-checkbox-group-base.component.d.ts +14 -1
  44. package/lib/components/po-field/po-combo/po-combo-base.component.d.ts +16 -1
  45. package/lib/components/po-field/po-datepicker/po-datepicker-base.component.d.ts +16 -1
  46. package/lib/components/po-field/po-datepicker-range/po-datepicker-range-base.component.d.ts +14 -1
  47. package/lib/components/po-field/po-field-container/po-field-container-bottom/po-field-container-bottom.component.d.ts +7 -1
  48. package/lib/components/po-field/po-field-container/po-field-container.module.d.ts +2 -1
  49. package/lib/components/po-field/po-field-validate.model.d.ts +16 -1
  50. package/lib/components/po-field/po-input/po-input-base.component.d.ts +16 -1
  51. package/lib/components/po-field/po-lookup/po-lookup-base.component.d.ts +16 -1
  52. package/lib/components/po-field/po-multiselect/po-multiselect-base.component.d.ts +16 -1
  53. package/lib/components/po-field/po-radio-group/po-radio-group-base.component.d.ts +14 -1
  54. package/lib/components/po-field/po-rich-text/po-rich-text-base.component.d.ts +14 -1
  55. package/lib/components/po-field/po-textarea/po-textarea-base.component.d.ts +14 -1
  56. package/lib/components/po-field/po-upload/po-upload-base.component.d.ts +80 -1
  57. package/lib/components/po-field/po-upload/po-upload.component.d.ts +6 -0
  58. package/lib/components/po-progress/index.d.ts +1 -0
  59. package/lib/components/po-progress/interfaces/index.d.ts +1 -0
  60. package/lib/components/po-progress/interfaces/po-progress-actions.interface.d.ts +83 -0
  61. package/lib/components/po-progress/po-progress-base.component.d.ts +81 -1
  62. package/lib/components/po-progress/po-progress.component.d.ts +4 -0
  63. package/package.json +4 -4
  64. package/po-ui-ng-components-18.23.0.tgz +0 -0
  65. package/schematics/ng-add/index.js +1 -1
  66. package/schematics/ng-update/v14/index.js +1 -1
  67. package/schematics/ng-update/v15/index.js +1 -1
  68. package/schematics/ng-update/v16/index.js +1 -1
  69. package/schematics/ng-update/v17/index.js +1 -1
  70. package/schematics/ng-update/v18/index.js +2 -2
  71. package/schematics/ng-update/v2/index.js +1 -1
  72. package/schematics/ng-update/v3/index.js +1 -1
  73. package/schematics/ng-update/v4/index.js +1 -1
  74. package/schematics/ng-update/v5/index.js +1 -1
  75. package/schematics/ng-update/v6/index.js +1 -1
  76. package/po-ui-ng-components-18.21.0.tgz +0 -0
@@ -107,6 +107,19 @@ export class PoDatepickerRangeBaseComponent {
107
107
  *
108
108
  */
109
109
  fieldErrorMessage;
110
+ /**
111
+ * @optional
112
+ *
113
+ * @description
114
+ *
115
+ * Limita a exibição da mensagem de erro a duas linhas e exibe um tooltip com o texto completo.
116
+ *
117
+ * > Caso essa propriedade seja definida como `true`, a mensagem de erro será limitada a duas linhas
118
+ * e um tooltip será exibido ao passar o mouse sobre a mensagem para mostrar o conteúdo completo.
119
+ *
120
+ * @default `false`
121
+ */
122
+ errorLimit = false;
110
123
  /**
111
124
  * @optional
112
125
  *
@@ -565,7 +578,7 @@ export class PoDatepickerRangeBaseComponent {
565
578
  }
566
579
  }
567
580
  static ɵfac = function PoDatepickerRangeBaseComponent_Factory(t) { return new (t || PoDatepickerRangeBaseComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i1.PoDateService), i0.ɵɵdirectiveInject(i2.PoLanguageService)); };
568
- static ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: PoDatepickerRangeBaseComponent, inputs: { autoFocus: [2, "p-auto-focus", "autoFocus", convertToBoolean], help: [0, "p-help", "help"], label: [0, "p-label", "label"], optional: [0, "p-optional", "optional"], fieldErrorMessage: [0, "p-field-error-message", "fieldErrorMessage"], clean: [0, "p-clean", "clean"], disabled: [0, "p-disabled", "disabled"], endDate: [0, "p-end-date", "endDate"], literals: [0, "p-literals", "literals"], minDate: [0, "p-min-date", "minDate"], maxDate: [0, "p-max-date", "maxDate"], noAutocomplete: [0, "p-no-autocomplete", "noAutocomplete"], readonly: [0, "p-readonly", "readonly"], required: [0, "p-required", "required"], showRequired: [0, "p-show-required", "showRequired"], startDate: [0, "p-start-date", "startDate"], locale: [0, "p-locale", "locale"] }, outputs: { onChange: "p-change" }, features: [i0.ɵɵInputTransformsFeature] });
581
+ static ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: PoDatepickerRangeBaseComponent, inputs: { autoFocus: [2, "p-auto-focus", "autoFocus", convertToBoolean], help: [0, "p-help", "help"], label: [0, "p-label", "label"], optional: [0, "p-optional", "optional"], fieldErrorMessage: [0, "p-field-error-message", "fieldErrorMessage"], errorLimit: [0, "p-error-limit", "errorLimit"], clean: [0, "p-clean", "clean"], disabled: [0, "p-disabled", "disabled"], endDate: [0, "p-end-date", "endDate"], literals: [0, "p-literals", "literals"], minDate: [0, "p-min-date", "minDate"], maxDate: [0, "p-max-date", "maxDate"], noAutocomplete: [0, "p-no-autocomplete", "noAutocomplete"], readonly: [0, "p-readonly", "readonly"], required: [0, "p-required", "required"], showRequired: [0, "p-show-required", "showRequired"], startDate: [0, "p-start-date", "startDate"], locale: [0, "p-locale", "locale"] }, outputs: { onChange: "p-change" }, features: [i0.ɵɵInputTransformsFeature] });
569
582
  }
570
583
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PoDatepickerRangeBaseComponent, [{
571
584
  type: Directive
@@ -584,6 +597,9 @@ export class PoDatepickerRangeBaseComponent {
584
597
  }], fieldErrorMessage: [{
585
598
  type: Input,
586
599
  args: ['p-field-error-message']
600
+ }], errorLimit: [{
601
+ type: Input,
602
+ args: ['p-error-limit']
587
603
  }], onChange: [{
588
604
  type: Output,
589
605
  args: ['p-change']
@@ -624,4 +640,4 @@ export class PoDatepickerRangeBaseComponent {
624
640
  type: Input,
625
641
  args: ['p-locale']
626
642
  }] }); })();
627
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tZGF0ZXBpY2tlci1yYW5nZS1iYXNlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby1maWVsZC9wby1kYXRlcGlja2VyLXJhbmdlL3BvLWRhdGVwaWNrZXItcmFuZ2UtYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBYSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckcsT0FBTyxFQUFzRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoSCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFFckYsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFL0MsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsc0JBQXNCLEVBQ3RCLGlCQUFpQixFQUNqQixpQkFBaUIsRUFDbEIsTUFBTSx1QkFBdUIsQ0FBQztBQUcvQixPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRixPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7OztBQUUvQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdDRztBQUVILE1BQU0sT0FBZ0IsOEJBQThCO0lBMld0QztJQUNBO0lBQ0Y7SUE1V1Y7Ozs7Ozs7Ozs7T0FVRztJQUM0RCxTQUFTLEdBQVksS0FBSyxDQUFDO0lBRTFGOzs7Ozs7T0FNRztJQUNjLElBQUksQ0FBVTtJQUUvQjs7Ozs7O09BTUc7SUFDZSxLQUFLLENBQVU7SUFFakM7Ozs7Ozs7Ozs7OztPQVlHO0lBQ2tCLFFB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LEtBQUs7bUJBQUMsWUFBWTtZQWdCTyxZQUFZO2tCQUFyQyxLQUFLO21CQUFDLGlCQUFpQjtZQVNHLFNBQVM7a0JBQW5DLEtBQUs7bUJBQUMsY0FBYztZQXFCRSxNQUFNO2tCQUE1QixLQUFLO21CQUFDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgRGlyZWN0aXZlLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBDb250cm9sVmFsdWVBY2Nlc3NvciwgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9yLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgcG9Mb2NhbGVEZWZhdWx0IH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcG8tbGFuZ3VhZ2UvcG8tbGFuZ3VhZ2UuY29uc3RhbnQnO1xuaW1wb3J0IHsgUG9MYW5ndWFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9wby1sYW5ndWFnZS9wby1sYW5ndWFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IFBvTWFzayB9IGZyb20gJy4uL3BvLWlucHV0L3BvLW1hc2snO1xuaW1wb3J0IHsgcmVxdWlyZWRGYWlsZWQgfSBmcm9tICcuLi92YWxpZGF0b3JzJztcbmltcG9ydCB7IFBvRGF0ZVNlcnZpY2UgfSBmcm9tICcuLy4uLy4uLy4uL3NlcnZpY2VzL3BvLWRhdGUvcG8tZGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIGNvbnZlcnRJc29Ub0RhdGUsXG4gIGNvbnZlcnRUb0Jvb2xlYW4sXG4gIHJlcGxhY2VGb3JtYXRTZXBhcmF0b3IsXG4gIHNldFllYXJGcm9tMFRvMTAwLFxuICB2YWxpZGF0ZURhdGVSYW5nZVxufSBmcm9tICcuLy4uLy4uLy4uL3V0aWxzL3V0aWwnO1xuaW1wb3J0IHsgUG9EYXRlcGlja2VyUmFuZ2VMaXRlcmFscyB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1kYXRlcGlja2VyLXJhbmdlLWxpdGVyYWxzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb0RhdGVwaWNrZXJSYW5nZSB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1kYXRlcGlja2VyLXJhbmdlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBwb0RhdGVwaWNrZXJSYW5nZUxpdGVyYWxzRGVmYXVsdCB9IGZyb20gJy4vcG8tZGF0ZXBpY2tlci1yYW5nZS5saXRlcmFscyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvblxuICpcbiAqIE8gYHBvLWRhdGVwaWNrZXItcmFuZ2VgIMOpIHVtIGNvbXBvbmVudGUgcGFyYSBzZWxlw6fDo28gZGUgdW0gcGVyw61vZG8gZW50cmUgZHVhcyBkYXRhcywgb25kZSDDqSBwb3Nzw612ZWwgaW5mb3JtYXIgYXBlbmFzXG4gKiBhIGRhdGEgaW5pY2lhbCBvdSBhIGRhdGEgZmluYWwuXG4gKlxuICogTyBjb21wb25lbnRlIGBbKG5nTW9kZWwpXWAgZG8gYHBvLWRhdGVwaWNrZXItcmFuZ2VgIHRyYWJhbGhhIGNvbSB1bSBvYmpldG8gcXVlIGltcGxlbWVudGEgYSBpbnRlcmZhY2VcbiAqIGBQb0RhdGVwaWNrZXJSYW5nZWAsIGNvbnRlbmRvIGFzIHNlZ3VpbnRlcyBwcm9wcmllZGFkZXM6XG4gKiBgYGBcbiAqIHsgXCJzdGFydFwiOiAnMjAxNy0xMS0yOCcsIFwiZW5kXCI6ICcyMDE3LTExLTMwJyB9XG4gKiBgYGBcbiAqXG4gKiA8YSBpZD1cImFjY2VwdGVkLWZvcm1hdHNcIj48L2E+XG4gKiBFc3RlIGNvbXBvbmVudGUgcG9kZSByZWNlYmVyIG9zIHNlZ3VpbnRlcyBmb3JtYXRvcyBkZSBkYXRhOlxuICpcbiAqIC0gKipEYXRhIGUgaG9yYSBjb21iaW5hZG9zIChFODYwMURadyk6IHl5eXktbW0tZGRUaGg6bW06c3MrfC1oaDptbSoqXG4gKiBgYGBcbiAqICcyMDE3LTExLTI4VDAwOjAwOjAwLTAyOjAwJztcbiAqIGBgYFxuICpcbiAqIC0gKipEYXRhIChFODYwMURBdy4pOiB5eXl5LW1tLWRkKipcbiAqIGBgYFxuICogJzIwMTctMTEtMjgnO1xuICogYGBgXG4gKlxuICogLSAqKkphdmFTY3JpcHQgRGF0ZSBPYmplY3Q6KipcbiAqIGBgYFxuICogbmV3IERhdGUoMjAxNywgMTAsIDI4KTtcbiAqIGBgYFxuICpcbiAqID4gTyBjb21wb25lbnRlIHJlc3BlaXRhcsOhIG8gZm9ybWF0byBwYXNzYWRvIHBhcmEgbyAqbW9kZWwqIHZpYSBjb2RpZmljYcOnw6NvLiBQb3LDqW0sIGNhc28gc2VqYSBmZWl0YSBhbHRlcmHDp8OjbyBlbSBhbGd1bVxuICogZG9zIHZhbG9yZXMgZGUgZGF0YSBlbSB0ZWxhLCBvIGNvbXBvbmVudGUgYXRyaWJ1aXLDoSBvIGZvcm1hdG8gKipEYXRhIChFODYwMURBdy4pOiB5eXl5LW1tLWRkKiogYW8gbW9kZWwuXG4gKlxuICogSW1wb3J0YW50ZTpcbiAqXG4gKiAtIFF1YW5kbyBwcmVlbmNoaWRhcyBhIGRhdGEgaW5pY2lhbCBlIGZpbmFsLCBhIGRhdGEgaW5pY2lhbCBkZXZlIHNlciBzZW1wcmUgbWVub3Igb3UgaWd1YWwgYSBkYXRhIGZpbmFsO1xuICogLSBBbyBwYXNzYXIgdW1hIGRhdGEgaW52w6FsaWRhIHZpYSBjb2RpZmljYcOnw6NvLCBvIHZhbG9yIHNlcsOhIG1hbnRpZG8gbm8gKm1vZGVsKiBlIG8gYGlucHV0YCBkYSB0ZWxhIGFwYXJlY2Vyw6EgdmF6aW87XG4gKiAtIFBlcm1pdGUgdHJhYmFsaGFyIGNvbSBhcyBkdWFzIGRhdGFzIHNlcGFyYWRhbWVudGUgYXRyYXbDqXMgZGFzIHByb3ByaWVkYWRlcyBgcC1zdGFydC1kYXRlYCBlIGBwLWVuZC1kYXRlYCBubyBsdWdhciBkb1xuICogYFsobmdNb2RlbCldYCwgbm8gZW50YW50byBzZW0gYSB2YWxpZGHDp8OjbyBkbyBmb3JtdWzDoXJpbztcbiAqIC0gUGFyYSBhIHZhbGlkYcOnw6NvIGRvIGZvcm11bMOhcmlvLCB1dGlsaXplIG8gYFsobmdNb2RlbCldYC5cbiAqL1xuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUG9EYXRlcGlja2VyUmFuZ2VCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFZhbGlkYXRvciwgT25EZXN0cm95IHtcbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogQXBsaWNhIGZvY28gbm8gZWxlbWVudG8gYW8gc2VyIGluaWNpYWRvLlxuICAgKlxuICAgKiA+IENhc28gbWFpcyBkZSB1bSBlbGVtZW50byBzZWphIGNvbmZpZ3VyYWRvIGNvbSBlc3NhIHByb3ByaWVkYWRlLCBhcGVuYXMgbyDDumx0aW1vIGVsZW1lbnRvIGRlY2xhcmFkbyBjb20gZWxhIHRlcsOhIG8gZm9jby5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KHsgYWxpYXM6ICdwLWF1dG8tZm9jdXMnLCB0cmFuc2Zvcm06IGNvbnZlcnRUb0Jvb2xlYW4gfSkgYXV0b0ZvY3VzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogVGV4dG8gZGUgYXBvaW8gZG8gY2FtcG8uXG4gICAqL1xuICBASW5wdXQoJ3AtaGVscCcpIGhlbHA/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogUsOzdHVsbyBkbyBjYW1wby5cbiAgICovXG4gIEBJbnB1dCgncC1sYWJlbCcpIGxhYmVsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIERlZmluZSBzZSBhIGluZGljYcOnw6NvIGRlIGNhbXBvIG9wY2lvbmFsIHNlcsOhIGV4aWJpZGEuXG4gICAqXG4gICAqID4gTsOjbyBzZXLDoSBleGliaWRhIGEgaW5kaWNhw6fDo28gc2U6XG4gICAqIC0gTyBjYW1wbyBjb250ZXIgYHAtcmVxdWlyZWRgO1xuICAgKiAtIE7Do28gcG9zc3VpciBgcC1oZWxwYCBlL291IGBwLWxhYmVsYC5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KCdwLW9wdGlvbmFsJykgb3B0aW9uYWw6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRXhpYmUgYSBtZW5zYWdlbSBzZXRhZGEgc2UgbyBjYW1wbyBlc3RpdmVyIHZhemlvIGUgZm9yIHJlcXVlcmlkby5cbiAgICpcbiAgICogPiBOZWNlc3PDoXJpbyBxdWUgYSBwcm9wcmllZGFkZSBgcC1yZXF1aXJlZGAgZXN0ZWphIGhhYmlsaXRhZGEuXG4gICAqXG4gICAqL1xuICBASW5wdXQoJ3AtZmllbGQtZXJyb3ItbWVzc2FnZScpIGZpZWxkRXJyb3JNZXNzYWdlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRXZlbnRvIGRpc3BhcmFkbyBhbyBhbHRlcmFyIHZhbG9yIGRvIGNhbXBvLlxuICAgKi9cbiAgQE91dHB1dCgncC1jaGFuZ2UnKSBvbkNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBlcnJvck1lc3NhZ2U6IHN0cmluZyA9ICcnO1xuICBkYXRlUmFuZ2U6IFBvRGF0ZXBpY2tlclJhbmdlID0geyBzdGFydDogJycsIGVuZDogJycgfTtcblxuICBwcm90ZWN0ZWQgZm9ybWF0OiBhbnkgPSAnZGQvbW0veXl5eSc7XG4gIHByb3RlY3RlZCBpc0RhdGVSYW5nZUlucHV0Rm9ybWF0VmFsaWQ6IGJvb2xlYW4gPSB0cnVlO1xuICBwcm90ZWN0ZWQgaXNTdGFydERhdGVSYW5nZUlucHV0VmFsaWQ6IGJvb2xlYW4gPSB0cnVlO1xuICBwcm90ZWN0ZWQgb25Ub3VjaGVkTW9kZWw6IGFueTtcbiAgcHJvdGVjdGVkIHBvTWFza09iamVjdDogUG9NYXNrO1xuICBwcm90ZWN0ZWQgaGFzVmFsaWRhdG9yUmVxdWlyZWQgPSBmYWxzZTtcblxuICBwcml2YXRlIF9jbGVhbj86IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfZGlzYWJsZWQ/O1xuICBwcml2YXRlIF9lbmREYXRlPztcbiAgcHJpdmF0ZSBfbGl0ZXJhbHM/OiBhbnk7XG4gIHByaXZhdGUgX21heERhdGU6IERhdGU7XG4gIHByaXZhdGUgX21pbkRhdGU6IERhdGU7XG4gIHByaXZhdGUgX25vQXV0b2NvbXBsZXRlPzogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9yZWFkb25seTogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9yZXF1aXJlZD86IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfc3RhcnREYXRlPztcbiAgcHJpdmF0ZSBfbG9jYWxlPzogc3RyaW5nO1xuXG4gIHByaXZhdGUgbGFuZ3VhZ2U7XG4gIHByaXZhdGUgb25DaGFuZ2VNb2RlbDogYW55O1xuICBwcml2YXRlIHZhbGlkYXRvckNoYW5nZTogYW55O1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICBnZXQgaXNEYXRlUmFuZ2VJbnB1dFZhbGlkKCkge1xuICAgIHJldHVybiB0aGlzLmlzRGF0ZVJhbmdlSW5wdXRGb3JtYXRWYWxpZCAmJiB0aGlzLmlzU3RhcnREYXRlUmFuZ2VJbnB1dFZhbGlkO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogSGFiaWxpdGEgYcOnw6NvIHBhcmEgbGltcGFyIG8gY2FtcG8uXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCgncC1jbGVhbicpIHNldCBjbGVhbihjbGVhbjogYm9vbGVhbikge1xuICAgIHRoaXMuX2NsZWFuID0gY29udmVydFRvQm9vbGVhbihjbGVhbik7XG4gIH1cblxuICBnZXQgY2xlYW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NsZWFuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGVzYWJpbGl0YSBvIGNhbXBvLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3AtZGlzYWJsZWQnKSBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9kaXNhYmxlZCA9IGNvbnZlcnRUb0Jvb2xlYW4odmFsdWUpO1xuXG4gICAgdGhpcy52YWxpZGF0ZU1vZGVsKHRoaXMuZGF0ZVJhbmdlKTtcbiAgfVxuXG4gIGdldCBkaXNhYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBEYXRhIGZpbmFsLlxuICAgKi9cbiAgQElucHV0KCdwLWVuZC1kYXRlJykgc2V0IGVuZERhdGUoZGF0ZTogc3RyaW5nIHwgRGF0ZSkge1xuICAgIHRoaXMuX2VuZERhdGUgPSB0aGlzLmNvbnZlcnRQYXR0ZXJuRGF0ZUZvcm1hdChkYXRlKTtcbiAgICB0aGlzLmRhdGVSYW5nZS5lbmQgPSB0aGlzLmVuZERhdGU7XG5cbiAgICB0aGlzLnVwZGF0ZVNjcmVlbkJ5TW9kZWwodGhpcy5kYXRlUmFuZ2UpO1xuICAgIHRoaXMudXBkYXRlTW9kZWwodGhpcy5kYXRlUmFuZ2UpO1xuICB9XG5cbiAgZ2V0IGVuZERhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VuZERhdGU7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBPYmpldG8gY29tIGFzIGxpdGVyYWlzIHVzYWRhcyBubyBgcG8tZGF0ZXBpY2tlci1yYW5nZWAuXG4gICAqXG4gICAqIEV4aXN0ZW0gZHVhcyBtYW5laXJhcyBkZSBjdXN0b21pemFyIG8gY29tcG9uZW50ZSwgcGFzc2FuZG8gdW0gb2JqZXRvIGNvbSB0b2RhcyBhcyBsaXRlcmFpcyBkaXNwb27DrXZlaXM6XG4gICAqXG4gICAqIGBgYFxuICAgKiAgY29uc3QgY3VzdG9tTGl0ZXJhbHM6IFBvRGF0ZXBpY2tlclJhbmdlTGl0ZXJhbHMgPSB7XG4gICAqICAgIGludmFsaWRGb3JtYXQ6ICdEYXRlIGluIGluY29uc2lzdGVudCBmb3JtYXQnLFxuICAgKiAgICBzdGFydERhdGVHcmVhdGVyVGhhbkVuZERhdGU6ICdFbmQgZGF0ZSBsZXNzIHRoYW4gc3RhcnQgZGF0ZSdcbiAgICogIH07XG4gICAqIGBgYFxuICAgKlxuICAgKiBPdSBwYXNzYW5kbyBhcGVuYXMgYXMgbGl0ZXJhaXMgcXVlIGRlc2VqYSBjdXN0b21pemFyOlxuICAgKlxuICAgKiBgYGBcbiAgICogIGNvbnN0IGN1c3RvbUxpdGVyYWxzOiBQb0RhdGVwaWNrZXJSYW5nZUxpdGVyYWxzID0ge1xuICAgKiAgICBpbnZhbGlkRm9ybWF0OiAnRGF0ZSBpbiBpbmNvbnNpc3RlbnQgZm9ybWF0J1xuICAgKiAgfTtcbiAgICogYGBgXG4gICAqXG4gICAqIEUgcGFyYSBjYXJyZWdhciBhcyBsaXRlcmFpcyBjdXN0b21pemFkYXMsIGJhc3RhIGFwZW5hcyBwYXNzYXIgbyBvYmpldG8gcGFyYSBvIGNvbXBvbmVudGUuXG4gICAqXG4gICAqIGBgYFxuICAgKiA8cG8tZGF0ZXBpY2tlci1yYW5nZVxuICAgKiAgIFtwLWxpdGVyYWxzXT1cImN1c3RvbUxpdGVyYWxzXCI+XG4gICAqIDwvcG8tZGF0ZXBpY2tlci1yYW5nZT5cbiAgICogYGBgXG4gICAqXG4gICAqID4gTyBvYmpldG8gcGFkcsOjbyBkZSBsaXRlcmFpcyBzZXLDoSB0cmFkdXppZG8gZGUgYWNvcmRvIGNvbSBvIGlkaW9tYSBkb1xuICAgKiBbYFBvSTE4blNlcnZpY2VgXSgvZG9jdW1lbnRhdGlvbi9wby1pMThuKSBvdSBkbyBicm93c2VyLlxuICAgKi9cbiAgQElucHV0KCdwLWxpdGVyYWxzJykgc2V0IGxpdGVyYWxzKHZhbHVlOiBQb0RhdGVwaWNrZXJSYW5nZUxpdGVyYWxzKSB7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0ICYmICEodmFsdWUgaW5zdGFuY2VvZiBBcnJheSkpIHtcbiAgICAgIHRoaXMuX2xpdGVyYWxzID0ge1xuICAgICAgICAuLi5wb0RhdGVwaWNrZXJSYW5nZUxpdGVyYWxzRGVmYXVsdFtwb0xvY2FsZURlZmF1bHRdLFxuICAgICAgICAuLi5wb0RhdGVwaWNrZXJSYW5nZUxpdGVyYWxzRGVmYXVsdFt0aGlzLmxhbmd1YWdlXSxcbiAgICAgICAgLi4udmFsdWVcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2xpdGVyYWxzID0gcG9EYXRlcGlja2VyUmFuZ2VMaXRlcmFsc0RlZmF1bHRbdGhpcy5sYW5ndWFnZV07XG4gICAgfVxuICB9XG5cbiAgZ2V0IGxpdGVyYWxzKCkge1xuICAgIHJldHVybiB0aGlzLl9saXRlcmFscyB8fCBwb0RhdGVwaWNrZXJSYW5nZUxpdGVyYWxzRGVmYXVsdFt0aGlzLmxhbmd1YWdlXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIERlZmluZSB1bWEgZGF0YSBtw61uaW1hIHBhcmEgbyBgcG8tZGF0ZXBpY2tlci1yYW5nZWAuXG4gICAqL1xuICBASW5wdXQoJ3AtbWluLWRhdGUnKSBzZXQgbWluRGF0ZSh2YWx1ZTogc3RyaW5nIHwgRGF0ZSkge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgIGNvbnN0IHllYXIgPSB2YWx1ZS5nZXRGdWxsWWVhcigpO1xuXG4gICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoeWVhciwgdmFsdWUuZ2V0TW9udGgoKSwgdmFsdWUuZ2V0RGF0ZSgpLCAwLCAwLCAwKTtcbiAgICAgIHNldFllYXJGcm9tMFRvMTAwKGRhdGUsIHllYXIpO1xuXG4gICAgICB0aGlzLl9taW5EYXRlID0gZGF0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbWluRGF0ZSA9IGNvbnZlcnRJc29Ub0RhdGUodmFsdWUsIHRydWUsIGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBnZXQgbWluRGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fbWluRGF0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIERlZmluZSB1bWEgZGF0YSBtw6F4aW1hIHBhcmEgbyBgcG8tZGF0ZXBpY2tlci1yYW5nZWAuXG4gICAqL1xuICBASW5wdXQoJ3AtbWF4LWRhdGUnKSBzZXQgbWF4RGF0ZSh2YWx1ZTogc3RyaW5nIHwgRGF0ZSkge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgIGNvbnN0IHllYXIgPSB2YWx1ZS5nZXRGdWxsWWVhcigpO1xuXG4gICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoeWVhciwgdmFsdWUuZ2V0TW9udGgoKSwgdmFsdWUuZ2V0RGF0ZSgpLCAyMywgNTksIDU5KTtcbiAgICAgIHNldFllYXJGcm9tMFRvMTAwKGRhdGUsIHllYXIpO1xuXG4gICAgICB0aGlzLl9tYXhEYXRlID0gZGF0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbWF4RGF0ZSA9IGNvbnZlcnRJc29Ub0RhdGUodmFsdWUsIGZhbHNlLCB0cnVlKTtcbiAgICB9XG4gIH1cblxuICBnZXQgbWF4RGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4RGF0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIERlZmluZSBhIHByb3ByaWVkYWRlIG5hdGl2YSBgYXV0b2NvbXBsZXRlYCBkbyBjYW1wbyBjb21vIGBvZmZgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3Atbm8tYXV0b2NvbXBsZXRlJykgc2V0IG5vQXV0b2NvbXBsZXRlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fbm9BdXRvY29tcGxldGUgPSBjb252ZXJ0VG9Cb29sZWFuKHZhbHVlKTtcbiAgfVxuXG4gIGdldCBub0F1dG9jb21wbGV0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fbm9BdXRvY29tcGxldGU7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBJbmRpY2EgcXVlIG8gY2FtcG8gc2Vyw6Egc29tZW50ZSBsZWl0dXJhLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3AtcmVhZG9ubHknKSBzZXQgcmVhZG9ubHkodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9yZWFkb25seSA9IGNvbnZlcnRUb0Jvb2xlYW4odmFsdWUpO1xuXG4gICAgdGhpcy52YWxpZGF0ZU1vZGVsKHRoaXMuZGF0ZVJhbmdlKTtcbiAgfVxuXG4gIGdldCByZWFkb25seSgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZG9ubHk7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBEZWZpbmUgcXVlIG8gY2FtcG8gc2Vyw6Egb2JyaWdhdMOzcmlvLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3AtcmVxdWlyZWQnKSBzZXQgcmVxdWlyZWQocmVxdWlyZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9yZXF1aXJlZCA9IGNvbnZlcnRUb0Jvb2xlYW4ocmVxdWlyZWQpO1xuXG4gICAgdGhpcy52YWxpZGF0ZU1vZGVsKHRoaXMuZGF0ZVJhbmdlKTtcbiAgfVxuXG4gIGdldCByZXF1aXJlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVxdWlyZWQ7XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lIHNlIGEgaW5kaWNhw6fDo28gZGUgY2FtcG8gb2JyaWdhdMOzcmlvIHNlcsOhIGV4aWJpZGEuXG4gICAqXG4gICAqID4gTsOjbyBzZXLDoSBleGliaWRhIGEgaW5kaWNhw6fDo28gc2U6XG4gICAqIC0gTsOjbyBwb3NzdWlyIGBwLWhlbHBgIGUvb3UgYHAtbGFiZWxgLlxuICAgKi9cbiAgQElucHV0KCdwLXNob3ctcmVxdWlyZWQnKSBzaG93UmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBEYXRhIGluaWNpYWwuXG4gICAqL1xuICBASW5wdXQoJ3Atc3RhcnQtZGF0ZScpIHNldCBzdGFydERhdGUoZGF0ZTogc3RyaW5nIHwgRGF0ZSkge1xuICAgIHRoaXMuX3N0YXJ0RGF0ZSA9IHRoaXMuY29udmVydFBhdHRlcm5EYXRlRm9ybWF0KGRhdGUpO1xuICAgIHRoaXMuZGF0ZVJhbmdlLnN0YXJ0ID0gdGhpcy5zdGFydERhdGU7XG5cbiAgICB0aGlzLnVwZGF0ZVNjcmVlbkJ5TW9kZWwodGhpcy5kYXRlUmFuZ2UpO1xuICAgIHRoaXMudXBkYXRlTW9kZWwodGhpcy5kYXRlUmFuZ2UpO1xuICB9XG5cbiAgZ2V0IHN0YXJ0RGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhcnREYXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogSWRpb21hIHF1ZSBvIGNhbGVuZMOhcmlvIHV0aWxpemFyw6EgcGFyYSBleGliaXIgYXMgZGF0YXMuXG4gICAqXG4gICAqID4gTyBsb2NhbGUgcGFkcsOjbyBzZXLDoSByZWN1cGVyYWRvIGNvbSBiYXNlIG5vIFtgUG9JMThuU2VydmljZWBdKC9kb2N1bWVudGF0aW9uL3BvLWkxOG4pIG91ICpicm93c2VyKi5cbiAgICovXG4gIEBJbnB1dCgncC1sb2NhbGUnKSBzZXQgbG9jYWxlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuX2xvY2FsZSA9IHZhbHVlLmxlbmd0aCA+PSAyID8gdmFsdWUgOiBwb0xvY2FsZURlZmF1bHQ7XG4gICAgICB0aGlzLnBvTWFza09iamVjdCA9IHRoaXMuYnVpbGRNYXNrKFxuICAgICAgICByZXBsYWNlRm9ybWF0U2VwYXJhdG9yKHRoaXMuZm9ybWF0LCB0aGlzLmxhbmd1YWdlU2VydmljZS5nZXREYXRlU2VwYXJhdG9yKHRoaXMubG9jYWxlKSlcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2xvY2FsZSA9IHRoaXMubGFuZ3VhZ2U7XG4gICAgICB0aGlzLnBvTWFza09iamVjdCA9IHRoaXMuYnVpbGRNYXNrKFxuICAgICAgICByZXBsYWNlRm9ybWF0U2VwYXJhdG9yKHRoaXMuZm9ybWF0LCB0aGlzLmxhbmd1YWdlU2VydmljZS5nZXREYXRlU2VwYXJhdG9yKHRoaXMubG9jYWxlKSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGxvY2FsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9sb2NhbGUgfHwgdGhpcy5sYW5ndWFnZTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJvdGVjdGVkIHBvRGF0ZVNlcnZpY2U6IFBvRGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBsYW5ndWFnZVNlcnZpY2U6IFBvTGFuZ3VhZ2VTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMubGFuZ3VhZ2UgPSBsYW5ndWFnZVNlcnZpY2UuZ2V0U2hvcnRMYW5ndWFnZSgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICAvLyBGdW7Dp8OjbyBpbXBsZW1lbnRhZGEgZG8gQ29udHJvbFZhbHVlQWNjZXNzb3JcbiAgLy8gVXNhZGEgcGFyYSBpbnRlcmNlcHRhciBvcyBlc3RhZG9zIGRlIGhhYmlsaXRhZG8gdmlhIGZvcm1zIGFwaVxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxuXG4gIC8vIEZ1bsOnw6NvIGltcGxlbWVudGFkYSBkbyBDb250cm9sVmFsdWVBY2Nlc3NvclxuICAvLyBVc2FkYSBwYXJhIGludGVyY2VwdGFyIGFzIG11ZGFuw6dhcyBlIG7Do28gYXR1YWxpemFyIGF1dG9tYXRpY2FtZW50ZSBvIE1vZGVsXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZnVuYzogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZU1vZGVsID0gZnVuYztcbiAgfVxuXG4gIC8vIEZ1bsOnw6NvIGltcGxlbWVudGFkYSBkbyBDb250cm9sVmFsdWVBY2Nlc3NvclxuICAvLyBVc2FkYSBwYXJhIGludGVyY2VwdGFyIGFzIG11ZGFuw6dhcyBlIG7Do28gYXR1YWxpemFyIGF1dG9tYXRpY2FtZW50ZSBvIE1vZGVsXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZ1bmM6IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkTW9kZWwgPSBmdW5jO1xuICB9XG5cbiAgcmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZT8oZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLnZhbGlkYXRvckNoYW5nZSA9IGZuO1xuICB9XG5cbiAgdmFsaWRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB7XG4gICAgY29uc3QgdmFsdWU6IFBvRGF0ZXBpY2tlclJhbmdlID0gY29udHJvbC52YWx1ZSB8fCB7fTtcbiAgICBjb25zdCBzdGFydERhdGUgPSB2YWx1ZS5zdGFydCA/IHRoaXMuY29udmVydFBhdHRlcm5EYXRlRm9ybWF0KHZhbHVlLnN0YXJ0KSA6ICcnO1xuICAgIGNvbnN0IGVuZERhdGUgPSB2YWx1ZS5lbmQgPyB0aGlzLmNvbnZlcnRQYXR0ZXJuRGF0ZUZvcm1hdCh2YWx1ZS5lbmQpIDogJyc7XG5cbiAgICBpZiAoIXRoaXMuaGFzVmFsaWRhdG9yUmVxdWlyZWQgJiYgdGhpcy5maWVsZEVycm9yTWVzc2FnZSAmJiBjb250cm9sLmhhc1ZhbGlkYXRvcihWYWxpZGF0b3JzLnJlcXVpcmVkKSkge1xuICAgICAgdGhpcy5oYXNWYWxpZGF0b3JSZXF1aXJlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVxdWlyZWREYXRlUmFuZ2VGYWlsZWQoc3RhcnREYXRlLCBlbmREYXRlKSkge1xuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnJztcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVxdWlyZWQ6IHtcbiAgICAgICAgICB2YWxpZDogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMudmVyaWZ5VmFsaWREYXRlKHN0YXJ0RGF0ZSwgZW5kRGF0ZSkpIHtcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gdGhpcy5saXRlcmFscy5pbnZhbGlkRGF0ZTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGU6IHtcbiAgICAgICAgICB2YWxpZDogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRlUmFuZ2VPYmplY3RGYWlsZWQoY29udHJvbC52YWx1ZSkgfHwgdGhpcy5kYXRlUmFuZ2VGb3JtYXRGYWlsZWQoc3RhcnREYXRlLCBlbmREYXRlKSkge1xuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmxpdGVyYWxzLmludmFsaWRGb3JtYXQ7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGU6IHtcbiAgICAgICAgICB2YWxpZDogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRlUmFuZ2VGYWlsZWQoc3RhcnREYXRlLCBlbmREYXRlKSkge1xuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmxpdGVyYWxzLnN0YXJ0RGF0ZUdyZWF0ZXJUaGFuRW5kRGF0ZTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0ZToge1xuICAgICAgICAgIHZhbGlkOiBmYWxzZVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICgoc3RhcnREYXRlICYmICF0aGlzLnZhbGlkYXRlRGF0ZUluUmFuZ2Uoc3RhcnREYXRlKSkgfHwgKGVuZERhdGUgJiYgIXRoaXMudmFsaWRhdGVEYXRlSW5SYW5nZShlbmREYXRlKSkpIHtcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gdGhpcy5saXRlcmFscy5kYXRlT3V0T2ZQZXJpb2Q7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGU6IHtcbiAgICAgICAgICB2YWxpZDogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5maWVsZEVycm9yTWVzc2FnZSkge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IGNvbnRyb2wuc3RhdHVzQ2hhbmdlc1xuICAgICAgICAucGlwZShcbiAgICAgICAgICBzd2l0Y2hNYXAoc3RhdHVzID0+IHtcbiAgICAgICAgICAgIGlmIChzdGF0dXMgPT09ICdJTlZBTElEJykge1xuICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFsaWRhdGVEYXRlSW5SYW5nZShzdGFydERhdGU6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB2YWxpZGF0ZURhdGVSYW5nZShjb252ZXJ0SXNvVG9EYXRlKHN0YXJ0RGF0ZSwgZmFsc2UsIGZhbHNlKSwgdGhpcy5fbWluRGF0ZSwgdGhpcy5fbWF4RGF0ZSk7XG4gIH1cblxuICB3cml0ZVZhbHVlKGRhdGVSYW5nZTogUG9EYXRlcGlja2VyUmFuZ2UpOiB2b2lkIHtcbiAgICB0aGlzLnJlc2V0RGF0ZVJhbmdlSW5wdXRWYWxpZGF0aW9uKCk7XG5cbiAgICBpZiAoIWRhdGVSYW5nZSB8fCB0aGlzLmRhdGVSYW5nZU9iamVjdEZhaWxlZChkYXRlUmFuZ2UpKSB7XG4gICAgICB0aGlzLmRhdGVSYW5nZSA9IHsgc3RhcnQ6ICcnLCBlbmQ6ICcnIH07XG4gICAgfVxuXG4gICAgaWYgKCFkYXRlUmFuZ2UpIHtcbiAgICAgIHRoaXMudmFsaWRhdGVNb2RlbCh0aGlzLmRhdGVSYW5nZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0ZVJhbmdlT2JqZWN0RmFpbGVkKGRhdGVSYW5nZSkpIHtcbiAgICAgIHRoaXMudXBkYXRlTW9kZWwoZGF0ZVJhbmdlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0RhdGVSYW5nZU9iamVjdChkYXRlUmFuZ2UpKSB7XG4gICAgICB0aGlzLmRhdGVSYW5nZSA9IHtcbiAgICAgICAgc3RhcnQ6IHRoaXMuY29udmVydFBhdHRlcm5EYXRlRm9ybWF0KGRhdGVSYW5nZS5zdGFydCksXG4gICAgICAgIGVuZDogdGhpcy5jb252ZXJ0UGF0dGVybkRhdGVGb3JtYXQoZGF0ZVJhbmdlLmVuZClcbiAgICAgIH07XG5cbiAgICAgIHRoaXMudXBkYXRlTW9kZWwodGhpcy5kYXRlUmFuZ2UpO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlU2NyZWVuQnlNb2RlbCh0aGlzLmRhdGVSYW5nZSk7XG4gIH1cblxuICAvLyBSZXRvcm5hIHVtIG9iamV0byBkbyB0aXBvIFBvTWFzayBjb20gYSBtYXNjYXJhIGNvbmZpZ3VyYWRhLlxuICBwcm90ZWN0ZWQgYnVpbGRNYXNrKGZvcm1hdDogc3RyaW5nID0gdGhpcy5mb3JtYXQpOiBQb01hc2sge1xuICAgIGxldCBtYXNrID0gZm9ybWF0LnRvVXBwZXJDYXNlKCk7XG5cbiAgICBtYXNrID0gbWFzay5yZXBsYWNlKC9ERC9nLCAnOTknKTtcbiAgICBtYXNrID0gbWFzay5yZXBsYWNlKC9NTS9nLCAnOTknKTtcbiAgICBtYXNrID0gbWFzay5yZXBsYWNlKC9ZWVlZL2csICc5OTk5Jyk7XG5cbiAgICByZXR1cm4gbmV3IFBvTWFzayhtYXNrLCB0cnVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBkYXRlRm9ybWF0RmFpbGVkKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdmFsdWUgJiYgIXRoaXMucG9EYXRlU2VydmljZS5pc1ZhbGlkSXNvKHZhbHVlKTtcbiAgfVxuXG4gIC8vIEV4ZWN1dGEgYSBmdW7Dp8OjbyBvbkNoYW5nZVxuICBwcm90ZWN0ZWQgdXBkYXRlTW9kZWwodmFsdWU6IGFueSkge1xuICAgIGNvbnN0IG1vZGVsID0gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyA/IHsgLi4udmFsdWUgfSA6IHZhbHVlO1xuICAgIC8vIFF1YW5kbyBvIGlucHV0IG7Do28gcG9zc3VpIHVtIGZvcm11bMOhcmlvLCBlbnTDo28gZXN0YSBmdW7Dp8OjbyBuw6NvIMOpIHJlZ2lzdHJhZGFcbiAgICBpZiAodGhpcy5vbkNoYW5nZU1vZGVsKSB7XG4gICAgICB0aGlzLm9uQ2hhbmdlTW9kZWwobW9kZWwpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCB2YWxpZGF0ZU1vZGVsKHZhbHVlOiBhbnkpIHtcbiAgICBjb25zdCBtb2RlbCA9IHsgLi4udmFsdWUgfTtcbiAgICBpZiAodGhpcy52YWxpZGF0b3JDaGFuZ2UpIHtcbiAgICAgIHRoaXMudmFsaWRhdG9yQ2hhbmdlKG1vZGVsKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgdmVyaWZ5VmFsaWREYXRlKHN0YXJ0RGF0ZTogc3RyaW5nLCBlbmREYXRlOiBzdHJpbmcpIHtcbiAgICBpZiAoc3RhcnREYXRlICE9PSAnJyAmJiBlbmREYXRlICE9PSAnJykge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0ZUlzVmFsaWQoc3RhcnREYXRlKSAmJiB0aGlzLmRhdGVJc1ZhbGlkKGVuZERhdGUpO1xuICAgIH0gZWxzZSBpZiAoc3RhcnREYXRlICE9PSAnJykge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0ZUlzVmFsaWQoc3RhcnREYXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0ZUlzVmFsaWQoZW5kRGF0ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0UGF0dGVybkRhdGVGb3JtYXQodmFsdWU6IGFueSkge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgIHJldHVybiB0aGlzLnBvRGF0ZVNlcnZpY2UuY29udmVydERhdGVUb0lTTyh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBkYXRlUmFuZ2VGYWlsZWQoc3RhcnREYXRlOiBzdHJpbmcsIGVuZERhdGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5wb0RhdGVTZXJ2aWNlLmlzRGF0ZVJhbmdlVmFsaWQoZW5kRGF0ZSwgc3RhcnREYXRlKSB8fCAhdGhpcy5pc1N0YXJ0RGF0ZVJhbmdlSW5wdXRWYWxpZDtcbiAgfVxuXG4gIHByaXZhdGUgZGF0ZVJhbmdlRm9ybWF0RmFpbGVkKHN0YXJ0RGF0ZTogc3RyaW5nLCBlbmREYXRlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kYXRlRm9ybWF0RmFpbGVkKGVuZERhdGUpIHx8IHRoaXMuZGF0ZUZvcm1hdEZhaWxlZChzdGFydERhdGUpIHx8ICF0aGlzLmlzRGF0ZVJhbmdlSW5wdXRGb3JtYXRWYWxpZDtcbiAgfVxuXG4gIHByaXZhdGUgZGF0ZVJhbmdlT2JqZWN0RmFpbGVkKHZhbHVlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHZhbHVlICYmICF0aGlzLmlzRGF0ZVJhbmdlT2JqZWN0KHZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNEYXRlUmFuZ2VPYmplY3QodmFsdWUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdmFsdWUgJiYgdmFsdWUuaGFzT3duUHJvcGVydHkoJ3N0YXJ0JykgJiYgdmFsdWUuaGFzT3duUHJvcGVydHkoJ2VuZCcpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXF1aXJlZERhdGVSYW5nZUZhaWxlZChzdGFydERhdGU6IHN0cmluZywgZW5kRGF0ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuaXNEYXRlUmFuZ2VJbnB1dFZhbGlkICYmXG4gICAgICByZXF1aXJlZEZhaWxlZCh0aGlzLnJlcXVpcmVkIHx8IHRoaXMuaGFzVmFsaWRhdG9yUmVxdWlyZWQsIHRoaXMuZGlzYWJsZWQsIHN0YXJ0RGF0ZSkgJiZcbiAgICAgIHJlcXVpcmVkRmFpbGVkKHRoaXMucmVxdWlyZWQgfHwgdGhpcy5oYXNWYWxpZGF0b3JSZXF1aXJlZCwgdGhpcy5kaXNhYmxlZCwgZW5kRGF0ZSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBkYXRlSXNWYWxpZChkYXRlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBbc3RyWWVhciwgc3RyTW9udGgsIHN0ckRheV0gPSBkYXRlLnNwbGl0KCctJyk7XG4gICAgY29uc3QgeWVhciA9IE51bWJlcihzdHJZZWFyKTtcbiAgICBjb25zdCBtb250aCA9IE51bWJlcihzdHJNb250aCk7XG4gICAgY29uc3QgZGF5ID0gTnVtYmVyKHN0ckRheSk7XG5cbiAgICAvL3ZlcmlmaWNhw6fDo28gZG9zIG1lc2VzIGNvbSAzMSBkaWFzXG4gICAgaWYgKG1vbnRoID09PSAxIHx8IG1vbnRoID09PSAzIHx8IG1vbnRoID09PSA1IHx8IG1vbnRoID09PSA3IHx8IG1vbnRoID09PSA4IHx8IG1vbnRoID09PSAxMCB8fCBtb250aCA9PT0gMTIpIHtcbiAgICAgIHJldHVybiBkYXkgPCAxIHx8IGRheSA+IDMxID8gZmFsc2UgOiB0cnVlO1xuICAgIH0gZWxzZSBpZiAobW9udGggPT09IDQgfHwgbW9udGggPT09IDYgfHwgbW9udGggPT09IDkgfHwgbW9udGggPT09IDExKSB7XG4gICAgICAvL3ZlcmlmaWNhw6fDo28gZG9zIG1lc2VzIGNvbSAzMCBkaWFzXG4gICAgICByZXR1cm4gZGF5IDwgMSB8fCBkYXkgPiAzMCA/IGZhbHNlIDogdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy92ZXJpZmljYWNhbyBkZSBhbm8gYmlzc2V4dG8gcGFyYSB2ZXJpZmljYXIgYXTDqSBxdWFsIGRpYSBpcsOhIG8gbcOqcyBkZSBmZXZlcmVpcm9cbiAgICAgIGlmICgoeWVhciAlIDQgPT09IDAgJiYgeWVhciAlIDEwMCAhPT0gMCkgfHwgeWVhciAlIDQwMCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gZGF5IDwgMSB8fCBkYXkgPiAyOSA/IGZhbHNlIDogdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBkYXkgPCAxIHx8IGRheSA+IDI4ID8gZmFsc2UgOiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCByZXNldERhdGVSYW5nZUlucHV0VmFsaWRhdGlvbigpOiB2b2lkO1xuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCB1cGRhdGVTY3JlZW5CeU1vZGVsKGRhdGVSYW5nZTogUG9EYXRlcGlja2VyUmFuZ2UpO1xufVxuIl19
643
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tZGF0ZXBpY2tlci1yYW5nZS1iYXNlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby1maWVsZC9wby1kYXRlcGlja2VyLXJhbmdlL3BvLWRhdGVwaWNrZXItcmFuZ2UtYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBYSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckcsT0FBTyxFQUFzRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoSCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFFckYsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFL0MsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsc0JBQXNCLEVBQ3RCLGlCQUFpQixFQUNqQixpQkFBaUIsRUFDbEIsTUFBTSx1QkFBdUIsQ0FBQztBQUcvQixPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRixPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7OztBQUUvQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdDRztBQUVILE1BQU0sT0FBZ0IsOEJBQThCO0lBeVh0QztJQUNBO0lBQ0Y7SUExWFY7Ozs7Ozs7Ozs7T0FVRztJQUM0RCxTQUFTLEdBQVksS0FBSyxDQUFDO0lBRTFGOzs7Ozs7T0FNRztJQUNjLElBQUksQ0FBVTtJQUUvQjs7Ozs7O09BTUc7SUFDZSxLQUFLLENBQVU7SUFFakM7Ozs7Ozs7Ozs7OztPQVlHO0lBQ2tCLFFB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QUFjO2tCQUE3QyxLQUFLO21CQUFDLG1CQUFtQjtZQWlCRCxRQUFRO2tCQUFoQyxLQUFLO21CQUFDLFlBQVk7WUFtQk0sUUFBUTtrQkFBaEMsS0FBSzttQkFBQyxZQUFZO1lBZ0JPLFlBQVk7a0JBQXJDLEtBQUs7bUJBQUMsaUJBQWlCO1lBU0csU0FBUztrQkFBbkMsS0FBSzttQkFBQyxjQUFjO1lBcUJFLE1BQU07a0JBQTVCLEtBQUs7bUJBQUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBEaXJlY3RpdmUsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBWYWxpZGF0aW9uRXJyb3JzLCBWYWxpZGF0b3IsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBwb0xvY2FsZURlZmF1bHQgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9wby1sYW5ndWFnZS9wby1sYW5ndWFnZS5jb25zdGFudCc7XG5pbXBvcnQgeyBQb0xhbmd1YWdlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3BvLWxhbmd1YWdlL3BvLWxhbmd1YWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgUG9NYXNrIH0gZnJvbSAnLi4vcG8taW5wdXQvcG8tbWFzayc7XG5pbXBvcnQgeyByZXF1aXJlZEZhaWxlZCB9IGZyb20gJy4uL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHsgUG9EYXRlU2VydmljZSB9IGZyb20gJy4vLi4vLi4vLi4vc2VydmljZXMvcG8tZGF0ZS9wby1kYXRlLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgY29udmVydElzb1RvRGF0ZSxcbiAgY29udmVydFRvQm9vbGVhbixcbiAgcmVwbGFjZUZvcm1hdFNlcGFyYXRvcixcbiAgc2V0WWVhckZyb20wVG8xMDAsXG4gIHZhbGlkYXRlRGF0ZVJhbmdlXG59IGZyb20gJy4vLi4vLi4vLi4vdXRpbHMvdXRpbCc7XG5pbXBvcnQgeyBQb0RhdGVwaWNrZXJSYW5nZUxpdGVyYWxzIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLWRhdGVwaWNrZXItcmFuZ2UtbGl0ZXJhbHMuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvRGF0ZXBpY2tlclJhbmdlIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLWRhdGVwaWNrZXItcmFuZ2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IHBvRGF0ZXBpY2tlclJhbmdlTGl0ZXJhbHNEZWZhdWx0IH0gZnJvbSAnLi9wby1kYXRlcGlja2VyLXJhbmdlLmxpdGVyYWxzJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uXG4gKlxuICogTyBgcG8tZGF0ZXBpY2tlci1yYW5nZWAgw6kgdW0gY29tcG9uZW50ZSBwYXJhIHNlbGXDp8OjbyBkZSB1bSBwZXLDrW9kbyBlbnRyZSBkdWFzIGRhdGFzLCBvbmRlIMOpIHBvc3PDrXZlbCBpbmZvcm1hciBhcGVuYXNcbiAqIGEgZGF0YSBpbmljaWFsIG91IGEgZGF0YSBmaW5hbC5cbiAqXG4gKiBPIGNvbXBvbmVudGUgYFsobmdNb2RlbCldYCBkbyBgcG8tZGF0ZXBpY2tlci1yYW5nZWAgdHJhYmFsaGEgY29tIHVtIG9iamV0byBxdWUgaW1wbGVtZW50YSBhIGludGVyZmFjZVxuICogYFBvRGF0ZXBpY2tlclJhbmdlYCwgY29udGVuZG8gYXMgc2VndWludGVzIHByb3ByaWVkYWRlczpcbiAqIGBgYFxuICogeyBcInN0YXJ0XCI6ICcyMDE3LTExLTI4JywgXCJlbmRcIjogJzIwMTctMTEtMzAnIH1cbiAqIGBgYFxuICpcbiAqIDxhIGlkPVwiYWNjZXB0ZWQtZm9ybWF0c1wiPjwvYT5cbiAqIEVzdGUgY29tcG9uZW50ZSBwb2RlIHJlY2ViZXIgb3Mgc2VndWludGVzIGZvcm1hdG9zIGRlIGRhdGE6XG4gKlxuICogLSAqKkRhdGEgZSBob3JhIGNvbWJpbmFkb3MgKEU4NjAxRFp3KTogeXl5eS1tbS1kZFRoaDptbTpzcyt8LWhoOm1tKipcbiAqIGBgYFxuICogJzIwMTctMTEtMjhUMDA6MDA6MDAtMDI6MDAnO1xuICogYGBgXG4gKlxuICogLSAqKkRhdGEgKEU4NjAxREF3Lik6IHl5eXktbW0tZGQqKlxuICogYGBgXG4gKiAnMjAxNy0xMS0yOCc7XG4gKiBgYGBcbiAqXG4gKiAtICoqSmF2YVNjcmlwdCBEYXRlIE9iamVjdDoqKlxuICogYGBgXG4gKiBuZXcgRGF0ZSgyMDE3LCAxMCwgMjgpO1xuICogYGBgXG4gKlxuICogPiBPIGNvbXBvbmVudGUgcmVzcGVpdGFyw6EgbyBmb3JtYXRvIHBhc3NhZG8gcGFyYSBvICptb2RlbCogdmlhIGNvZGlmaWNhw6fDo28uIFBvcsOpbSwgY2FzbyBzZWphIGZlaXRhIGFsdGVyYcOnw6NvIGVtIGFsZ3VtXG4gKiBkb3MgdmFsb3JlcyBkZSBkYXRhIGVtIHRlbGEsIG8gY29tcG9uZW50ZSBhdHJpYnVpcsOhIG8gZm9ybWF0byAqKkRhdGEgKEU4NjAxREF3Lik6IHl5eXktbW0tZGQqKiBhbyBtb2RlbC5cbiAqXG4gKiBJbXBvcnRhbnRlOlxuICpcbiAqIC0gUXVhbmRvIHByZWVuY2hpZGFzIGEgZGF0YSBpbmljaWFsIGUgZmluYWwsIGEgZGF0YSBpbmljaWFsIGRldmUgc2VyIHNlbXByZSBtZW5vciBvdSBpZ3VhbCBhIGRhdGEgZmluYWw7XG4gKiAtIEFvIHBhc3NhciB1bWEgZGF0YSBpbnbDoWxpZGEgdmlhIGNvZGlmaWNhw6fDo28sIG8gdmFsb3Igc2Vyw6EgbWFudGlkbyBubyAqbW9kZWwqIGUgbyBgaW5wdXRgIGRhIHRlbGEgYXBhcmVjZXLDoSB2YXppbztcbiAqIC0gUGVybWl0ZSB0cmFiYWxoYXIgY29tIGFzIGR1YXMgZGF0YXMgc2VwYXJhZGFtZW50ZSBhdHJhdsOpcyBkYXMgcHJvcHJpZWRhZGVzIGBwLXN0YXJ0LWRhdGVgIGUgYHAtZW5kLWRhdGVgIG5vIGx1Z2FyIGRvXG4gKiBgWyhuZ01vZGVsKV1gLCBubyBlbnRhbnRvIHNlbSBhIHZhbGlkYcOnw6NvIGRvIGZvcm11bMOhcmlvO1xuICogLSBQYXJhIGEgdmFsaWRhw6fDo28gZG8gZm9ybXVsw6FyaW8sIHV0aWxpemUgbyBgWyhuZ01vZGVsKV1gLlxuICovXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBQb0RhdGVwaWNrZXJSYW5nZUJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgVmFsaWRhdG9yLCBPbkRlc3Ryb3kge1xuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBBcGxpY2EgZm9jbyBubyBlbGVtZW50byBhbyBzZXIgaW5pY2lhZG8uXG4gICAqXG4gICAqID4gQ2FzbyBtYWlzIGRlIHVtIGVsZW1lbnRvIHNlamEgY29uZmlndXJhZG8gY29tIGVzc2EgcHJvcHJpZWRhZGUsIGFwZW5hcyBvIMO6bHRpbW8gZWxlbWVudG8gZGVjbGFyYWRvIGNvbSBlbGEgdGVyw6EgbyBmb2NvLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoeyBhbGlhczogJ3AtYXV0by1mb2N1cycsIHRyYW5zZm9ybTogY29udmVydFRvQm9vbGVhbiB9KSBhdXRvRm9jdXM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBUZXh0byBkZSBhcG9pbyBkbyBjYW1wby5cbiAgICovXG4gIEBJbnB1dCgncC1oZWxwJykgaGVscD86IHN0cmluZztcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBSw7N0dWxvIGRvIGNhbXBvLlxuICAgKi9cbiAgQElucHV0KCdwLWxhYmVsJykgbGFiZWw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGVmaW5lIHNlIGEgaW5kaWNhw6fDo28gZGUgY2FtcG8gb3BjaW9uYWwgc2Vyw6EgZXhpYmlkYS5cbiAgICpcbiAgICogPiBOw6NvIHNlcsOhIGV4aWJpZGEgYSBpbmRpY2HDp8OjbyBzZTpcbiAgICogLSBPIGNhbXBvIGNvbnRlciBgcC1yZXF1aXJlZGA7XG4gICAqIC0gTsOjbyBwb3NzdWlyIGBwLWhlbHBgIGUvb3UgYHAtbGFiZWxgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3Atb3B0aW9uYWwnKSBvcHRpb25hbDogYm9vbGVhbjtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBFeGliZSBhIG1lbnNhZ2VtIHNldGFkYSBzZSBvIGNhbXBvIGVzdGl2ZXIgdmF6aW8gZSBmb3IgcmVxdWVyaWRvLlxuICAgKlxuICAgKiA+IE5lY2Vzc8OhcmlvIHF1ZSBhIHByb3ByaWVkYWRlIGBwLXJlcXVpcmVkYCBlc3RlamEgaGFiaWxpdGFkYS5cbiAgICpcbiAgICovXG4gIEBJbnB1dCgncC1maWVsZC1lcnJvci1tZXNzYWdlJykgZmllbGRFcnJvck1lc3NhZ2U6IHN0cmluZztcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBMaW1pdGEgYSBleGliacOnw6NvIGRhIG1lbnNhZ2VtIGRlIGVycm8gYSBkdWFzIGxpbmhhcyBlIGV4aWJlIHVtIHRvb2x0aXAgY29tIG8gdGV4dG8gY29tcGxldG8uXG4gICAqXG4gICAqID4gQ2FzbyBlc3NhIHByb3ByaWVkYWRlIHNlamEgZGVmaW5pZGEgY29tbyBgdHJ1ZWAsIGEgbWVuc2FnZW0gZGUgZXJybyBzZXLDoSBsaW1pdGFkYSBhIGR1YXMgbGluaGFzXG4gICAqIGUgdW0gdG9vbHRpcCBzZXLDoSBleGliaWRvIGFvIHBhc3NhciBvIG1vdXNlIHNvYnJlIGEgbWVuc2FnZW0gcGFyYSBtb3N0cmFyIG8gY29udGXDumRvIGNvbXBsZXRvLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3AtZXJyb3ItbGltaXQnKSBlcnJvckxpbWl0OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRXZlbnRvIGRpc3BhcmFkbyBhbyBhbHRlcmFyIHZhbG9yIGRvIGNhbXBvLlxuICAgKi9cbiAgQE91dHB1dCgncC1jaGFuZ2UnKSBvbkNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBlcnJvck1lc3NhZ2U6IHN0cmluZyA9ICcnO1xuICBkYXRlUmFuZ2U6IFBvRGF0ZXBpY2tlclJhbmdlID0geyBzdGFydDogJycsIGVuZDogJycgfTtcblxuICBwcm90ZWN0ZWQgZm9ybWF0OiBhbnkgPSAnZGQvbW0veXl5eSc7XG4gIHByb3RlY3RlZCBpc0RhdGVSYW5nZUlucHV0Rm9ybWF0VmFsaWQ6IGJvb2xlYW4gPSB0cnVlO1xuICBwcm90ZWN0ZWQgaXNTdGFydERhdGVSYW5nZUlucHV0VmFsaWQ6IGJvb2xlYW4gPSB0cnVlO1xuICBwcm90ZWN0ZWQgb25Ub3VjaGVkTW9kZWw6IGFueTtcbiAgcHJvdGVjdGVkIHBvTWFza09iamVjdDogUG9NYXNrO1xuICBwcm90ZWN0ZWQgaGFzVmFsaWRhdG9yUmVxdWlyZWQgPSBmYWxzZTtcblxuICBwcml2YXRlIF9jbGVhbj86IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfZGlzYWJsZWQ/O1xuICBwcml2YXRlIF9lbmREYXRlPztcbiAgcHJpdmF0ZSBfbGl0ZXJhbHM/OiBhbnk7XG4gIHByaXZhdGUgX21heERhdGU6IERhdGU7XG4gIHByaXZhdGUgX21pbkRhdGU6IERhdGU7XG4gIHByaXZhdGUgX25vQXV0b2NvbXBsZXRlPzogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9yZWFkb25seTogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9yZXF1aXJlZD86IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfc3RhcnREYXRlPztcbiAgcHJpdmF0ZSBfbG9jYWxlPzogc3RyaW5nO1xuXG4gIHByaXZhdGUgbGFuZ3VhZ2U7XG4gIHByaXZhdGUgb25DaGFuZ2VNb2RlbDogYW55O1xuICBwcml2YXRlIHZhbGlkYXRvckNoYW5nZTogYW55O1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICBnZXQgaXNEYXRlUmFuZ2VJbnB1dFZhbGlkKCkge1xuICAgIHJldHVybiB0aGlzLmlzRGF0ZVJhbmdlSW5wdXRGb3JtYXRWYWxpZCAmJiB0aGlzLmlzU3RhcnREYXRlUmFuZ2VJbnB1dFZhbGlkO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogSGFiaWxpdGEgYcOnw6NvIHBhcmEgbGltcGFyIG8gY2FtcG8uXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCgncC1jbGVhbicpIHNldCBjbGVhbihjbGVhbjogYm9vbGVhbikge1xuICAgIHRoaXMuX2NsZWFuID0gY29udmVydFRvQm9vbGVhbihjbGVhbik7XG4gIH1cblxuICBnZXQgY2xlYW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NsZWFuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGVzYWJpbGl0YSBvIGNhbXBvLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3AtZGlzYWJsZWQnKSBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9kaXNhYmxlZCA9IGNvbnZlcnRUb0Jvb2xlYW4odmFsdWUpO1xuXG4gICAgdGhpcy52YWxpZGF0ZU1vZGVsKHRoaXMuZGF0ZVJhbmdlKTtcbiAgfVxuXG4gIGdldCBkaXNhYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBEYXRhIGZpbmFsLlxuICAgKi9cbiAgQElucHV0KCdwLWVuZC1kYXRlJykgc2V0IGVuZERhdGUoZGF0ZTogc3RyaW5nIHwgRGF0ZSkge1xuICAgIHRoaXMuX2VuZERhdGUgPSB0aGlzLmNvbnZlcnRQYXR0ZXJuRGF0ZUZvcm1hdChkYXRlKTtcbiAgICB0aGlzLmRhdGVSYW5nZS5lbmQgPSB0aGlzLmVuZERhdGU7XG5cbiAgICB0aGlzLnVwZGF0ZVNjcmVlbkJ5TW9kZWwodGhpcy5kYXRlUmFuZ2UpO1xuICAgIHRoaXMudXBkYXRlTW9kZWwodGhpcy5kYXRlUmFuZ2UpO1xuICB9XG5cbiAgZ2V0IGVuZERhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VuZERhdGU7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBPYmpldG8gY29tIGFzIGxpdGVyYWlzIHVzYWRhcyBubyBgcG8tZGF0ZXBpY2tlci1yYW5nZWAuXG4gICAqXG4gICAqIEV4aXN0ZW0gZHVhcyBtYW5laXJhcyBkZSBjdXN0b21pemFyIG8gY29tcG9uZW50ZSwgcGFzc2FuZG8gdW0gb2JqZXRvIGNvbSB0b2RhcyBhcyBsaXRlcmFpcyBkaXNwb27DrXZlaXM6XG4gICAqXG4gICAqIGBgYFxuICAgKiAgY29uc3QgY3VzdG9tTGl0ZXJhbHM6IFBvRGF0ZXBpY2tlclJhbmdlTGl0ZXJhbHMgPSB7XG4gICAqICAgIGludmFsaWRGb3JtYXQ6ICdEYXRlIGluIGluY29uc2lzdGVudCBmb3JtYXQnLFxuICAgKiAgICBzdGFydERhdGVHcmVhdGVyVGhhbkVuZERhdGU6ICdFbmQgZGF0ZSBsZXNzIHRoYW4gc3RhcnQgZGF0ZSdcbiAgICogIH07XG4gICAqIGBgYFxuICAgKlxuICAgKiBPdSBwYXNzYW5kbyBhcGVuYXMgYXMgbGl0ZXJhaXMgcXVlIGRlc2VqYSBjdXN0b21pemFyOlxuICAgKlxuICAgKiBgYGBcbiAgICogIGNvbnN0IGN1c3RvbUxpdGVyYWxzOiBQb0RhdGVwaWNrZXJSYW5nZUxpdGVyYWxzID0ge1xuICAgKiAgICBpbnZhbGlkRm9ybWF0OiAnRGF0ZSBpbiBpbmNvbnNpc3RlbnQgZm9ybWF0J1xuICAgKiAgfTtcbiAgICogYGBgXG4gICAqXG4gICAqIEUgcGFyYSBjYXJyZWdhciBhcyBsaXRlcmFpcyBjdXN0b21pemFkYXMsIGJhc3RhIGFwZW5hcyBwYXNzYXIgbyBvYmpldG8gcGFyYSBvIGNvbXBvbmVudGUuXG4gICAqXG4gICAqIGBgYFxuICAgKiA8cG8tZGF0ZXBpY2tlci1yYW5nZVxuICAgKiAgIFtwLWxpdGVyYWxzXT1cImN1c3RvbUxpdGVyYWxzXCI+XG4gICAqIDwvcG8tZGF0ZXBpY2tlci1yYW5nZT5cbiAgICogYGBgXG4gICAqXG4gICAqID4gTyBvYmpldG8gcGFkcsOjbyBkZSBsaXRlcmFpcyBzZXLDoSB0cmFkdXppZG8gZGUgYWNvcmRvIGNvbSBvIGlkaW9tYSBkb1xuICAgKiBbYFBvSTE4blNlcnZpY2VgXSgvZG9jdW1lbnRhdGlvbi9wby1pMThuKSBvdSBkbyBicm93c2VyLlxuICAgKi9cbiAgQElucHV0KCdwLWxpdGVyYWxzJykgc2V0IGxpdGVyYWxzKHZhbHVlOiBQb0RhdGVwaWNrZXJSYW5nZUxpdGVyYWxzKSB7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0ICYmICEodmFsdWUgaW5zdGFuY2VvZiBBcnJheSkpIHtcbiAgICAgIHRoaXMuX2xpdGVyYWxzID0ge1xuICAgICAgICAuLi5wb0RhdGVwaWNrZXJSYW5nZUxpdGVyYWxzRGVmYXVsdFtwb0xvY2FsZURlZmF1bHRdLFxuICAgICAgICAuLi5wb0RhdGVwaWNrZXJSYW5nZUxpdGVyYWxzRGVmYXVsdFt0aGlzLmxhbmd1YWdlXSxcbiAgICAgICAgLi4udmFsdWVcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2xpdGVyYWxzID0gcG9EYXRlcGlja2VyUmFuZ2VMaXRlcmFsc0RlZmF1bHRbdGhpcy5sYW5ndWFnZV07XG4gICAgfVxuICB9XG5cbiAgZ2V0IGxpdGVyYWxzKCkge1xuICAgIHJldHVybiB0aGlzLl9saXRlcmFscyB8fCBwb0RhdGVwaWNrZXJSYW5nZUxpdGVyYWxzRGVmYXVsdFt0aGlzLmxhbmd1YWdlXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIERlZmluZSB1bWEgZGF0YSBtw61uaW1hIHBhcmEgbyBgcG8tZGF0ZXBpY2tlci1yYW5nZWAuXG4gICAqL1xuICBASW5wdXQoJ3AtbWluLWRhdGUnKSBzZXQgbWluRGF0ZSh2YWx1ZTogc3RyaW5nIHwgRGF0ZSkge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgIGNvbnN0IHllYXIgPSB2YWx1ZS5nZXRGdWxsWWVhcigpO1xuXG4gICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoeWVhciwgdmFsdWUuZ2V0TW9udGgoKSwgdmFsdWUuZ2V0RGF0ZSgpLCAwLCAwLCAwKTtcbiAgICAgIHNldFllYXJGcm9tMFRvMTAwKGRhdGUsIHllYXIpO1xuXG4gICAgICB0aGlzLl9taW5EYXRlID0gZGF0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbWluRGF0ZSA9IGNvbnZlcnRJc29Ub0RhdGUodmFsdWUsIHRydWUsIGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBnZXQgbWluRGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fbWluRGF0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIERlZmluZSB1bWEgZGF0YSBtw6F4aW1hIHBhcmEgbyBgcG8tZGF0ZXBpY2tlci1yYW5nZWAuXG4gICAqL1xuICBASW5wdXQoJ3AtbWF4LWRhdGUnKSBzZXQgbWF4RGF0ZSh2YWx1ZTogc3RyaW5nIHwgRGF0ZSkge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgIGNvbnN0IHllYXIgPSB2YWx1ZS5nZXRGdWxsWWVhcigpO1xuXG4gICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoeWVhciwgdmFsdWUuZ2V0TW9udGgoKSwgdmFsdWUuZ2V0RGF0ZSgpLCAyMywgNTksIDU5KTtcbiAgICAgIHNldFllYXJGcm9tMFRvMTAwKGRhdGUsIHllYXIpO1xuXG4gICAgICB0aGlzLl9tYXhEYXRlID0gZGF0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbWF4RGF0ZSA9IGNvbnZlcnRJc29Ub0RhdGUodmFsdWUsIGZhbHNlLCB0cnVlKTtcbiAgICB9XG4gIH1cblxuICBnZXQgbWF4RGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4RGF0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIERlZmluZSBhIHByb3ByaWVkYWRlIG5hdGl2YSBgYXV0b2NvbXBsZXRlYCBkbyBjYW1wbyBjb21vIGBvZmZgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3Atbm8tYXV0b2NvbXBsZXRlJykgc2V0IG5vQXV0b2NvbXBsZXRlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fbm9BdXRvY29tcGxldGUgPSBjb252ZXJ0VG9Cb29sZWFuKHZhbHVlKTtcbiAgfVxuXG4gIGdldCBub0F1dG9jb21wbGV0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fbm9BdXRvY29tcGxldGU7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBJbmRpY2EgcXVlIG8gY2FtcG8gc2Vyw6Egc29tZW50ZSBsZWl0dXJhLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3AtcmVhZG9ubHknKSBzZXQgcmVhZG9ubHkodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9yZWFkb25seSA9IGNvbnZlcnRUb0Jvb2xlYW4odmFsdWUpO1xuXG4gICAgdGhpcy52YWxpZGF0ZU1vZGVsKHRoaXMuZGF0ZVJhbmdlKTtcbiAgfVxuXG4gIGdldCByZWFkb25seSgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZG9ubHk7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBEZWZpbmUgcXVlIG8gY2FtcG8gc2Vyw6Egb2JyaWdhdMOzcmlvLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3AtcmVxdWlyZWQnKSBzZXQgcmVxdWlyZWQocmVxdWlyZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9yZXF1aXJlZCA9IGNvbnZlcnRUb0Jvb2xlYW4ocmVxdWlyZWQpO1xuXG4gICAgdGhpcy52YWxpZGF0ZU1vZGVsKHRoaXMuZGF0ZVJhbmdlKTtcbiAgfVxuXG4gIGdldCByZXF1aXJlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVxdWlyZWQ7XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lIHNlIGEgaW5kaWNhw6fDo28gZGUgY2FtcG8gb2JyaWdhdMOzcmlvIHNlcsOhIGV4aWJpZGEuXG4gICAqXG4gICAqID4gTsOjbyBzZXLDoSBleGliaWRhIGEgaW5kaWNhw6fDo28gc2U6XG4gICAqIC0gTsOjbyBwb3NzdWlyIGBwLWhlbHBgIGUvb3UgYHAtbGFiZWxgLlxuICAgKi9cbiAgQElucHV0KCdwLXNob3ctcmVxdWlyZWQnKSBzaG93UmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBEYXRhIGluaWNpYWwuXG4gICAqL1xuICBASW5wdXQoJ3Atc3RhcnQtZGF0ZScpIHNldCBzdGFydERhdGUoZGF0ZTogc3RyaW5nIHwgRGF0ZSkge1xuICAgIHRoaXMuX3N0YXJ0RGF0ZSA9IHRoaXMuY29udmVydFBhdHRlcm5EYXRlRm9ybWF0KGRhdGUpO1xuICAgIHRoaXMuZGF0ZVJhbmdlLnN0YXJ0ID0gdGhpcy5zdGFydERhdGU7XG5cbiAgICB0aGlzLnVwZGF0ZVNjcmVlbkJ5TW9kZWwodGhpcy5kYXRlUmFuZ2UpO1xuICAgIHRoaXMudXBkYXRlTW9kZWwodGhpcy5kYXRlUmFuZ2UpO1xuICB9XG5cbiAgZ2V0IHN0YXJ0RGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhcnREYXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogSWRpb21hIHF1ZSBvIGNhbGVuZMOhcmlvIHV0aWxpemFyw6EgcGFyYSBleGliaXIgYXMgZGF0YXMuXG4gICAqXG4gICAqID4gTyBsb2NhbGUgcGFkcsOjbyBzZXLDoSByZWN1cGVyYWRvIGNvbSBiYXNlIG5vIFtgUG9JMThuU2VydmljZWBdKC9kb2N1bWVudGF0aW9uL3BvLWkxOG4pIG91ICpicm93c2VyKi5cbiAgICovXG4gIEBJbnB1dCgncC1sb2NhbGUnKSBzZXQgbG9jYWxlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuX2xvY2FsZSA9IHZhbHVlLmxlbmd0aCA+PSAyID8gdmFsdWUgOiBwb0xvY2FsZURlZmF1bHQ7XG4gICAgICB0aGlzLnBvTWFza09iamVjdCA9IHRoaXMuYnVpbGRNYXNrKFxuICAgICAgICByZXBsYWNlRm9ybWF0U2VwYXJhdG9yKHRoaXMuZm9ybWF0LCB0aGlzLmxhbmd1YWdlU2VydmljZS5nZXREYXRlU2VwYXJhdG9yKHRoaXMubG9jYWxlKSlcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2xvY2FsZSA9IHRoaXMubGFuZ3VhZ2U7XG4gICAgICB0aGlzLnBvTWFza09iamVjdCA9IHRoaXMuYnVpbGRNYXNrKFxuICAgICAgICByZXBsYWNlRm9ybWF0U2VwYXJhdG9yKHRoaXMuZm9ybWF0LCB0aGlzLmxhbmd1YWdlU2VydmljZS5nZXREYXRlU2VwYXJhdG9yKHRoaXMubG9jYWxlKSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGxvY2FsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9sb2NhbGUgfHwgdGhpcy5sYW5ndWFnZTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJvdGVjdGVkIHBvRGF0ZVNlcnZpY2U6IFBvRGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBsYW5ndWFnZVNlcnZpY2U6IFBvTGFuZ3VhZ2VTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMubGFuZ3VhZ2UgPSBsYW5ndWFnZVNlcnZpY2UuZ2V0U2hvcnRMYW5ndWFnZSgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICAvLyBGdW7Dp8OjbyBpbXBsZW1lbnRhZGEgZG8gQ29udHJvbFZhbHVlQWNjZXNzb3JcbiAgLy8gVXNhZGEgcGFyYSBpbnRlcmNlcHRhciBvcyBlc3RhZG9zIGRlIGhhYmlsaXRhZG8gdmlhIGZvcm1zIGFwaVxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxuXG4gIC8vIEZ1bsOnw6NvIGltcGxlbWVudGFkYSBkbyBDb250cm9sVmFsdWVBY2Nlc3NvclxuICAvLyBVc2FkYSBwYXJhIGludGVyY2VwdGFyIGFzIG11ZGFuw6dhcyBlIG7Do28gYXR1YWxpemFyIGF1dG9tYXRpY2FtZW50ZSBvIE1vZGVsXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZnVuYzogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZU1vZGVsID0gZnVuYztcbiAgfVxuXG4gIC8vIEZ1bsOnw6NvIGltcGxlbWVudGFkYSBkbyBDb250cm9sVmFsdWVBY2Nlc3NvclxuICAvLyBVc2FkYSBwYXJhIGludGVyY2VwdGFyIGFzIG11ZGFuw6dhcyBlIG7Do28gYXR1YWxpemFyIGF1dG9tYXRpY2FtZW50ZSBvIE1vZGVsXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZ1bmM6IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkTW9kZWwgPSBmdW5jO1xuICB9XG5cbiAgcmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZT8oZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLnZhbGlkYXRvckNoYW5nZSA9IGZuO1xuICB9XG5cbiAgdmFsaWRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB7XG4gICAgY29uc3QgdmFsdWU6IFBvRGF0ZXBpY2tlclJhbmdlID0gY29udHJvbC52YWx1ZSB8fCB7fTtcbiAgICBjb25zdCBzdGFydERhdGUgPSB2YWx1ZS5zdGFydCA/IHRoaXMuY29udmVydFBhdHRlcm5EYXRlRm9ybWF0KHZhbHVlLnN0YXJ0KSA6ICcnO1xuICAgIGNvbnN0IGVuZERhdGUgPSB2YWx1ZS5lbmQgPyB0aGlzLmNvbnZlcnRQYXR0ZXJuRGF0ZUZvcm1hdCh2YWx1ZS5lbmQpIDogJyc7XG5cbiAgICBpZiAoIXRoaXMuaGFzVmFsaWRhdG9yUmVxdWlyZWQgJiYgdGhpcy5maWVsZEVycm9yTWVzc2FnZSAmJiBjb250cm9sLmhhc1ZhbGlkYXRvcihWYWxpZGF0b3JzLnJlcXVpcmVkKSkge1xuICAgICAgdGhpcy5oYXNWYWxpZGF0b3JSZXF1aXJlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVxdWlyZWREYXRlUmFuZ2VGYWlsZWQoc3RhcnREYXRlLCBlbmREYXRlKSkge1xuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnJztcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVxdWlyZWQ6IHtcbiAgICAgICAgICB2YWxpZDogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMudmVyaWZ5VmFsaWREYXRlKHN0YXJ0RGF0ZSwgZW5kRGF0ZSkpIHtcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gdGhpcy5saXRlcmFscy5pbnZhbGlkRGF0ZTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGU6IHtcbiAgICAgICAgICB2YWxpZDogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRlUmFuZ2VPYmplY3RGYWlsZWQoY29udHJvbC52YWx1ZSkgfHwgdGhpcy5kYXRlUmFuZ2VGb3JtYXRGYWlsZWQoc3RhcnREYXRlLCBlbmREYXRlKSkge1xuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmxpdGVyYWxzLmludmFsaWRGb3JtYXQ7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGU6IHtcbiAgICAgICAgICB2YWxpZDogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRlUmFuZ2VGYWlsZWQoc3RhcnREYXRlLCBlbmREYXRlKSkge1xuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmxpdGVyYWxzLnN0YXJ0RGF0ZUdyZWF0ZXJUaGFuRW5kRGF0ZTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0ZToge1xuICAgICAgICAgIHZhbGlkOiBmYWxzZVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICgoc3RhcnREYXRlICYmICF0aGlzLnZhbGlkYXRlRGF0ZUluUmFuZ2Uoc3RhcnREYXRlKSkgfHwgKGVuZERhdGUgJiYgIXRoaXMudmFsaWRhdGVEYXRlSW5SYW5nZShlbmREYXRlKSkpIHtcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gdGhpcy5saXRlcmFscy5kYXRlT3V0T2ZQZXJpb2Q7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGU6IHtcbiAgICAgICAgICB2YWxpZDogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5maWVsZEVycm9yTWVzc2FnZSkge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IGNvbnRyb2wuc3RhdHVzQ2hhbmdlc1xuICAgICAgICAucGlwZShcbiAgICAgICAgICBzd2l0Y2hNYXAoc3RhdHVzID0+IHtcbiAgICAgICAgICAgIGlmIChzdGF0dXMgPT09ICdJTlZBTElEJykge1xuICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFsaWRhdGVEYXRlSW5SYW5nZShzdGFydERhdGU6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB2YWxpZGF0ZURhdGVSYW5nZShjb252ZXJ0SXNvVG9EYXRlKHN0YXJ0RGF0ZSwgZmFsc2UsIGZhbHNlKSwgdGhpcy5fbWluRGF0ZSwgdGhpcy5fbWF4RGF0ZSk7XG4gIH1cblxuICB3cml0ZVZhbHVlKGRhdGVSYW5nZTogUG9EYXRlcGlja2VyUmFuZ2UpOiB2b2lkIHtcbiAgICB0aGlzLnJlc2V0RGF0ZVJhbmdlSW5wdXRWYWxpZGF0aW9uKCk7XG5cbiAgICBpZiAoIWRhdGVSYW5nZSB8fCB0aGlzLmRhdGVSYW5nZU9iamVjdEZhaWxlZChkYXRlUmFuZ2UpKSB7XG4gICAgICB0aGlzLmRhdGVSYW5nZSA9IHsgc3RhcnQ6ICcnLCBlbmQ6ICcnIH07XG4gICAgfVxuXG4gICAgaWYgKCFkYXRlUmFuZ2UpIHtcbiAgICAgIHRoaXMudmFsaWRhdGVNb2RlbCh0aGlzLmRhdGVSYW5nZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0ZVJhbmdlT2JqZWN0RmFpbGVkKGRhdGVSYW5nZSkpIHtcbiAgICAgIHRoaXMudXBkYXRlTW9kZWwoZGF0ZVJhbmdlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0RhdGVSYW5nZU9iamVjdChkYXRlUmFuZ2UpKSB7XG4gICAgICB0aGlzLmRhdGVSYW5nZSA9IHtcbiAgICAgICAgc3RhcnQ6IHRoaXMuY29udmVydFBhdHRlcm5EYXRlRm9ybWF0KGRhdGVSYW5nZS5zdGFydCksXG4gICAgICAgIGVuZDogdGhpcy5jb252ZXJ0UGF0dGVybkRhdGVGb3JtYXQoZGF0ZVJhbmdlLmVuZClcbiAgICAgIH07XG5cbiAgICAgIHRoaXMudXBkYXRlTW9kZWwodGhpcy5kYXRlUmFuZ2UpO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlU2NyZWVuQnlNb2RlbCh0aGlzLmRhdGVSYW5nZSk7XG4gIH1cblxuICAvLyBSZXRvcm5hIHVtIG9iamV0byBkbyB0aXBvIFBvTWFzayBjb20gYSBtYXNjYXJhIGNvbmZpZ3VyYWRhLlxuICBwcm90ZWN0ZWQgYnVpbGRNYXNrKGZvcm1hdDogc3RyaW5nID0gdGhpcy5mb3JtYXQpOiBQb01hc2sge1xuICAgIGxldCBtYXNrID0gZm9ybWF0LnRvVXBwZXJDYXNlKCk7XG5cbiAgICBtYXNrID0gbWFzay5yZXBsYWNlKC9ERC9nLCAnOTknKTtcbiAgICBtYXNrID0gbWFzay5yZXBsYWNlKC9NTS9nLCAnOTknKTtcbiAgICBtYXNrID0gbWFzay5yZXBsYWNlKC9ZWVlZL2csICc5OTk5Jyk7XG5cbiAgICByZXR1cm4gbmV3IFBvTWFzayhtYXNrLCB0cnVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBkYXRlRm9ybWF0RmFpbGVkKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdmFsdWUgJiYgIXRoaXMucG9EYXRlU2VydmljZS5pc1ZhbGlkSXNvKHZhbHVlKTtcbiAgfVxuXG4gIC8vIEV4ZWN1dGEgYSBmdW7Dp8OjbyBvbkNoYW5nZVxuICBwcm90ZWN0ZWQgdXBkYXRlTW9kZWwodmFsdWU6IGFueSkge1xuICAgIGNvbnN0IG1vZGVsID0gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyA/IHsgLi4udmFsdWUgfSA6IHZhbHVlO1xuICAgIC8vIFF1YW5kbyBvIGlucHV0IG7Do28gcG9zc3VpIHVtIGZvcm11bMOhcmlvLCBlbnTDo28gZXN0YSBmdW7Dp8OjbyBuw6NvIMOpIHJlZ2lzdHJhZGFcbiAgICBpZiAodGhpcy5vbkNoYW5nZU1vZGVsKSB7XG4gICAgICB0aGlzLm9uQ2hhbmdlTW9kZWwobW9kZWwpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCB2YWxpZGF0ZU1vZGVsKHZhbHVlOiBhbnkpIHtcbiAgICBjb25zdCBtb2RlbCA9IHsgLi4udmFsdWUgfTtcbiAgICBpZiAodGhpcy52YWxpZGF0b3JDaGFuZ2UpIHtcbiAgICAgIHRoaXMudmFsaWRhdG9yQ2hhbmdlKG1vZGVsKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgdmVyaWZ5VmFsaWREYXRlKHN0YXJ0RGF0ZTogc3RyaW5nLCBlbmREYXRlOiBzdHJpbmcpIHtcbiAgICBpZiAoc3RhcnREYXRlICE9PSAnJyAmJiBlbmREYXRlICE9PSAnJykge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0ZUlzVmFsaWQoc3RhcnREYXRlKSAmJiB0aGlzLmRhdGVJc1ZhbGlkKGVuZERhdGUpO1xuICAgIH0gZWxzZSBpZiAoc3RhcnREYXRlICE9PSAnJykge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0ZUlzVmFsaWQoc3RhcnREYXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0ZUlzVmFsaWQoZW5kRGF0ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0UGF0dGVybkRhdGVGb3JtYXQodmFsdWU6IGFueSkge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgIHJldHVybiB0aGlzLnBvRGF0ZVNlcnZpY2UuY29udmVydERhdGVUb0lTTyh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBkYXRlUmFuZ2VGYWlsZWQoc3RhcnREYXRlOiBzdHJpbmcsIGVuZERhdGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5wb0RhdGVTZXJ2aWNlLmlzRGF0ZVJhbmdlVmFsaWQoZW5kRGF0ZSwgc3RhcnREYXRlKSB8fCAhdGhpcy5pc1N0YXJ0RGF0ZVJhbmdlSW5wdXRWYWxpZDtcbiAgfVxuXG4gIHByaXZhdGUgZGF0ZVJhbmdlRm9ybWF0RmFpbGVkKHN0YXJ0RGF0ZTogc3RyaW5nLCBlbmREYXRlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kYXRlRm9ybWF0RmFpbGVkKGVuZERhdGUpIHx8IHRoaXMuZGF0ZUZvcm1hdEZhaWxlZChzdGFydERhdGUpIHx8ICF0aGlzLmlzRGF0ZVJhbmdlSW5wdXRGb3JtYXRWYWxpZDtcbiAgfVxuXG4gIHByaXZhdGUgZGF0ZVJhbmdlT2JqZWN0RmFpbGVkKHZhbHVlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHZhbHVlICYmICF0aGlzLmlzRGF0ZVJhbmdlT2JqZWN0KHZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNEYXRlUmFuZ2VPYmplY3QodmFsdWUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdmFsdWUgJiYgdmFsdWUuaGFzT3duUHJvcGVydHkoJ3N0YXJ0JykgJiYgdmFsdWUuaGFzT3duUHJvcGVydHkoJ2VuZCcpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXF1aXJlZERhdGVSYW5nZUZhaWxlZChzdGFydERhdGU6IHN0cmluZywgZW5kRGF0ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuaXNEYXRlUmFuZ2VJbnB1dFZhbGlkICYmXG4gICAgICByZXF1aXJlZEZhaWxlZCh0aGlzLnJlcXVpcmVkIHx8IHRoaXMuaGFzVmFsaWRhdG9yUmVxdWlyZWQsIHRoaXMuZGlzYWJsZWQsIHN0YXJ0RGF0ZSkgJiZcbiAgICAgIHJlcXVpcmVkRmFpbGVkKHRoaXMucmVxdWlyZWQgfHwgdGhpcy5oYXNWYWxpZGF0b3JSZXF1aXJlZCwgdGhpcy5kaXNhYmxlZCwgZW5kRGF0ZSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBkYXRlSXNWYWxpZChkYXRlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBbc3RyWWVhciwgc3RyTW9udGgsIHN0ckRheV0gPSBkYXRlLnNwbGl0KCctJyk7XG4gICAgY29uc3QgeWVhciA9IE51bWJlcihzdHJZZWFyKTtcbiAgICBjb25zdCBtb250aCA9IE51bWJlcihzdHJNb250aCk7XG4gICAgY29uc3QgZGF5ID0gTnVtYmVyKHN0ckRheSk7XG5cbiAgICAvL3ZlcmlmaWNhw6fDo28gZG9zIG1lc2VzIGNvbSAzMSBkaWFzXG4gICAgaWYgKG1vbnRoID09PSAxIHx8IG1vbnRoID09PSAzIHx8IG1vbnRoID09PSA1IHx8IG1vbnRoID09PSA3IHx8IG1vbnRoID09PSA4IHx8IG1vbnRoID09PSAxMCB8fCBtb250aCA9PT0gMTIpIHtcbiAgICAgIHJldHVybiBkYXkgPCAxIHx8IGRheSA+IDMxID8gZmFsc2UgOiB0cnVlO1xuICAgIH0gZWxzZSBpZiAobW9udGggPT09IDQgfHwgbW9udGggPT09IDYgfHwgbW9udGggPT09IDkgfHwgbW9udGggPT09IDExKSB7XG4gICAgICAvL3ZlcmlmaWNhw6fDo28gZG9zIG1lc2VzIGNvbSAzMCBkaWFzXG4gICAgICByZXR1cm4gZGF5IDwgMSB8fCBkYXkgPiAzMCA/IGZhbHNlIDogdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy92ZXJpZmljYWNhbyBkZSBhbm8gYmlzc2V4dG8gcGFyYSB2ZXJpZmljYXIgYXTDqSBxdWFsIGRpYSBpcsOhIG8gbcOqcyBkZSBmZXZlcmVpcm9cbiAgICAgIGlmICgoeWVhciAlIDQgPT09IDAgJiYgeWVhciAlIDEwMCAhPT0gMCkgfHwgeWVhciAlIDQwMCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gZGF5IDwgMSB8fCBkYXkgPiAyOSA/IGZhbHNlIDogdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBkYXkgPCAxIHx8IGRheSA+IDI4ID8gZmFsc2UgOiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCByZXNldERhdGVSYW5nZUlucHV0VmFsaWRhdGlvbigpOiB2b2lkO1xuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCB1cGRhdGVTY3JlZW5CeU1vZGVsKGRhdGVSYW5nZTogUG9EYXRlcGlja2VyUmFuZ2UpO1xufVxuIl19
@@ -474,7 +474,7 @@ export class PoDatepickerRangeComponent extends PoDatepickerRangeBaseComponent {
474
474
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.startDateInput = _t.first);
475
475
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.iconCalendar = _t.first);
476
476
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.calendarPicker = _t.first);
477
- } }, features: [i0.ɵɵProvidersFeature(providers), i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature], decls: 20, vars: 30, consts: [["dateRangeField", ""], ["startDateInput", ""], ["endDateInput", ""], ["iconCalendar", ""], ["calendarPicker", ""], [3, "p-disabled", "p-label", "p-optional", "p-required", "p-show-required"], [1, "po-field-container-content"], [1, "po-field-container-input"], [1, "po-datepicker-range-field", "po-input"], [1, "po-datepicker-range-start-date"], ["maxlength", "10", "type", "text", 1, "po-datepicker-range-input", 3, "blur", "focus", "keydown", "keyup", "click", "autocomplete", "disabled", "name", "readonly"], [1, "po-datepicker-range-separator"], [1, "po-datepicker-range-end-date"], [1, "po-datepicker-range-icon"], ["class", "po-icon-input", 3, "p-change-event", 4, "ngIf"], [3, "click", "p-icon"], [3, "p-help", "p-disabled", "p-error-pattern"], [4, "ngIf"], [1, "po-icon-input", 3, "p-change-event"], [1, "po-calendar-range-picker"], ["p-mode", "range", 3, "ngModelChange", "ngModel", "p-max-date", "p-min-date", "p-locale"]], template: function PoDatepickerRangeComponent_Template(rf, ctx) { if (rf & 1) {
477
+ } }, features: [i0.ɵɵProvidersFeature(providers), i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature], decls: 20, vars: 31, consts: [["dateRangeField", ""], ["startDateInput", ""], ["endDateInput", ""], ["iconCalendar", ""], ["calendarPicker", ""], [3, "p-disabled", "p-label", "p-optional", "p-required", "p-show-required"], [1, "po-field-container-content"], [1, "po-field-container-input"], [1, "po-datepicker-range-field", "po-input"], [1, "po-datepicker-range-start-date"], ["maxlength", "10", "type", "text", 1, "po-datepicker-range-input", 3, "blur", "focus", "keydown", "keyup", "click", "autocomplete", "disabled", "name", "readonly"], [1, "po-datepicker-range-separator"], [1, "po-datepicker-range-end-date"], [1, "po-datepicker-range-icon"], ["class", "po-icon-input", 3, "p-change-event", 4, "ngIf"], [3, "click", "p-icon"], [3, "p-help", "p-disabled", "p-error-pattern", "p-error-limit"], [4, "ngIf"], [1, "po-icon-input", 3, "p-change-event"], [1, "po-calendar-range-picker"], ["p-mode", "range", 3, "ngModelChange", "ngModel", "p-max-date", "p-min-date", "p-locale"]], template: function PoDatepickerRangeComponent_Template(rf, ctx) { if (rf & 1) {
478
478
  const _r1 = i0.ɵɵgetCurrentView();
479
479
  i0.ɵɵelementStart(0, "po-field-container", 5)(1, "div", 6)(2, "div", 7)(3, "div", 8, 0)(5, "div", 9)(6, "input", 10, 1);
480
480
  i0.ɵɵlistener("blur", function PoDatepickerRangeComponent_Template_input_blur_6_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onBlur($event)); })("focus", function PoDatepickerRangeComponent_Template_input_focus_6_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onFocus($event)); })("keydown", function PoDatepickerRangeComponent_Template_input_keydown_6_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onKeydown($event)); })("keyup", function PoDatepickerRangeComponent_Template_input_keyup_6_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onKeyup($event)); })("click", function PoDatepickerRangeComponent_Template_input_click_6_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.eventOnClick($event)); });
@@ -512,14 +512,14 @@ export class PoDatepickerRangeComponent extends PoDatepickerRangeBaseComponent {
512
512
  i0.ɵɵclassProp("po-field-icon-disabled", ctx.disabled || ctx.readonly);
513
513
  i0.ɵɵproperty("p-icon", !ctx.disabled || !ctx.readonly ? "ICON_CALENDAR po-clickable" : "ICON_CALENDAR");
514
514
  i0.ɵɵadvance(2);
515
- i0.ɵɵproperty("p-help", ctx.help)("p-disabled", ctx.disabled)("p-error-pattern", ctx.getErrorMessage);
515
+ i0.ɵɵproperty("p-help", ctx.help)("p-disabled", ctx.disabled)("p-error-pattern", ctx.getErrorMessage)("p-error-limit", ctx.errorLimit);
516
516
  i0.ɵɵadvance();
517
517
  i0.ɵɵproperty("ngIf", ctx.isCalendarVisible);
518
518
  } }, dependencies: [i4.NgIf, i5.NgControlStatus, i5.NgModel, i6.PoCleanComponent, i7.PoCalendarComponent, i8.PoFieldContainerBottomComponent, i9.PoFieldContainerComponent, i10.PoIconComponent], encapsulation: 2, changeDetection: 0 });
519
519
  }
520
520
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PoDatepickerRangeComponent, [{
521
521
  type: Component,
522
- 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-label]=\"label\"\n [p-optional]=\"optional\"\n [p-required]=\"required\"\n [p-show-required]=\"showRequired\"\n>\n <div class=\"po-field-container-content\">\n <div class=\"po-field-container-input\">\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 <po-icon\n #iconCalendar\n [p-icon]=\"!disabled || !readonly ? 'ICON_CALENDAR po-clickable' : 'ICON_CALENDAR'\"\n class=\"po-field-icon {{ disabled ? 'po-icon-input-disabled' : 'po-icon-input' }}\"\n [class.po-field-icon-disabled]=\"disabled || readonly\"\n (click)=\"toggleCalendar()\"\n >\n </po-icon>\n </div>\n </div>\n </div>\n </div>\n\n <po-field-container-bottom\n [p-help]=\"help\"\n [p-disabled]=\"disabled\"\n [p-error-pattern]=\"getErrorMessage\"\n ></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" }]
522
+ 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-label]=\"label\"\n [p-optional]=\"optional\"\n [p-required]=\"required\"\n [p-show-required]=\"showRequired\"\n>\n <div class=\"po-field-container-content\">\n <div class=\"po-field-container-input\">\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 <po-icon\n #iconCalendar\n [p-icon]=\"!disabled || !readonly ? 'ICON_CALENDAR po-clickable' : 'ICON_CALENDAR'\"\n class=\"po-field-icon {{ disabled ? 'po-icon-input-disabled' : 'po-icon-input' }}\"\n [class.po-field-icon-disabled]=\"disabled || readonly\"\n (click)=\"toggleCalendar()\"\n >\n </po-icon>\n </div>\n </div>\n </div>\n </div>\n\n <po-field-container-bottom\n [p-help]=\"help\"\n [p-disabled]=\"disabled\"\n [p-error-pattern]=\"getErrorMessage\"\n [p-error-limit]=\"errorLimit\"\n ></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" }]
523
523
  }], () => [{ type: i0.ChangeDetectorRef }, { type: i1.PoControlPositionService }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: i2.PoLanguageService }, { type: i3.PoDateService }, { type: i0.ElementRef }], { dateRangeField: [{
524
524
  type: ViewChild,
525
525
  args: ['dateRangeField', { read: ElementRef, static: true }]
@@ -537,4 +537,4 @@ export class PoDatepickerRangeComponent extends PoDatepickerRangeBaseComponent {
537
537
  args: ['calendarPicker', { read: ElementRef }]
538
538
  }] }); })();
539
539
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PoDatepickerRangeComponent, { className: "PoDatepickerRangeComponent", filePath: "lib/components/po-field/po-datepicker-range/po-datepicker-range.component.ts", lineNumber: 82 }); })();
540
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tZGF0ZXBpY2tlci1yYW5nZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2NvbXBvbmVudHMvcG8tZmllbGQvcG8tZGF0ZXBpY2tlci1yYW5nZS9wby1kYXRlcGlja2VyLXJhbmdlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby1maWVsZC9wby1kYXRlcGlja2VyLXJhbmdlL3BvLWRhdGVwaWNrZXItcmFuZ2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxFQUVWLFNBQVMsRUFNVCx1QkFBdUIsRUFDeEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWxFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHFFQUFxRSxDQUFDO0FBRy9HLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBR3RGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lDa0NyRCxvQ0FBaUY7SUFBM0IsZ05BQWtCLGNBQU8sS0FBQztJQUFDLGlCQUFXOzs7O0lBd0J0Ryw2QkFBd0M7SUFFcEMsQUFERixrQ0FBc0Qsc0JBUW5EO0lBREMsMk5BQWlCLCtCQUF3QixLQUFDO0lBRTlDLEFBREcsaUJBQWMsRUFDWDs7OztJQU5GLGVBQXFCO0lBR3JCLEFBREEsQUFEQSxBQURBLDBDQUFxQiw4QkFDQyw4QkFDQSwyQkFDSDs7QUQvRHpCLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQztBQUN4QixNQUFNLGFBQWEsR0FBRyxFQUFFLENBQUM7QUFDekIsTUFB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QTFFLFNBQVM7bUJBQUMsY0FBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO1lBQ1YsY0FBYztrQkFBaEUsU0FBUzttQkFBQyxnQkFBZ0IsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7O2tGQVJ0QywwQkFBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBmb3J3YXJkUmVmLFxuICBPbkluaXQsXG4gIFZpZXdDaGlsZCxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgUmVuZGVyZXIyLFxuICBPbkRlc3Ryb3ksXG4gIFNpbXBsZUNoYW5nZXMsXG4gIE9uQ2hhbmdlcyxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3lcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOR19WQUxJREFUT1JTLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgUG9Db250cm9sUG9zaXRpb25TZXJ2aWNlIH0gZnJvbSAnLi8uLi8uLi8uLi9zZXJ2aWNlcy9wby1jb250cm9sLXBvc2l0aW9uL3BvLWNvbnRyb2wtcG9zaXRpb24uc2VydmljZSc7XG5cbmltcG9ydCB7IFBvRGF0ZXBpY2tlclJhbmdlIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLWRhdGVwaWNrZXItcmFuZ2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvRGF0ZXBpY2tlclJhbmdlQmFzZUNvbXBvbmVudCB9IGZyb20gJy4vcG8tZGF0ZXBpY2tlci1yYW5nZS1iYXNlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQb0RhdGVTZXJ2aWNlIH0gZnJvbSAnLi8uLi8uLi8uLi9zZXJ2aWNlcy9wby1kYXRlL3BvLWRhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBQb0xhbmd1YWdlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3BvLWxhbmd1YWdlL3BvLWxhbmd1YWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgcmVwbGFjZUZvcm1hdFNlcGFyYXRvciB9IGZyb20gJy4vLi4vLi4vLi4vdXRpbHMvdXRpbCc7XG5cbmNvbnN0IGFycm93TGVmdEtleSA9IDM3O1xuY29uc3QgYXJyb3dSaWdodEtleSA9IDM5O1xuY29uc3QgYmFja3NwYWNlS2V5ID0gODtcbmNvbnN0IHBvRGF0ZXBpY2tlclJhbmdlRGF0ZUxlbmd0aERlZmF1bHQgPSAxMDtcblxuY29uc3QgcG9DYWxlbmRhckNvbnRlbnRPZmZzZXQgPSA4O1xuY29uc3QgcG9DYWxlbmRhclBvc2l0aW9uRGVmYXVsdCA9ICdib3R0b20tbGVmdCc7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5jb25zdCBwcm92aWRlcnMgPSBbXG4gIHtcbiAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBQb0RhdGVwaWNrZXJSYW5nZUNvbXBvbmVudCksXG4gICAgbXVsdGk6IHRydWVcbiAgfSxcbiAge1xuICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUG9EYXRlcGlja2VyUmFuZ2VDb21wb25lbnQpLFxuICAgIG11bHRpOiB0cnVlXG4gIH0sXG4gIFBvQ29udHJvbFBvc2l0aW9uU2VydmljZVxuXTtcbi8qKlxuICogQGRvY3NFeHRlbmRzIFBvRGF0ZXBpY2tlclJhbmdlQmFzZUNvbXBvbmVudFxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLWRhdGVwaWNrZXItcmFuZ2UtYmFzaWNcIiB0aXRsZT1cIlBPIERhdGVwaWNrZXIgUmFuZ2UgQmFzaWNcIj5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWRhdGVwaWNrZXItcmFuZ2UtYmFzaWMvc2FtcGxlLXBvLWRhdGVwaWNrZXItcmFuZ2UtYmFzaWMuY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tZGF0ZXBpY2tlci1yYW5nZS1iYXNpYy9zYW1wbGUtcG8tZGF0ZXBpY2tlci1yYW5nZS1iYXNpYy5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1kYXRlcGlja2VyLXJhbmdlLWxhYnNcIiB0aXRsZT1cIlBPIERhdGVwaWNrZXIgUmFuZ2UgTGFic1wiPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tZGF0ZXBpY2tlci1yYW5nZS1sYWJzL3NhbXBsZS1wby1kYXRlcGlja2VyLXJhbmdlLWxhYnMuY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tZGF0ZXBpY2tlci1yYW5nZS1sYWJzL3NhbXBsZS1wby1kYXRlcGlja2VyLXJhbmdlLWxhYnMuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tZGF0ZXBpY2tlci1yYW5nZS12YWNhdGlvbnNcIiB0aXRsZT1cIlBPIERhdGVwaWNrZXIgUmFuZ2UgLSBWYWNhdGlvbnMgU3VnZ2VzdGlvblwiPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tZGF0ZXBpY2tlci1yYW5nZS12YWNhdGlvbnMvc2FtcGxlLXBvLWRhdGVwaWNrZXItcmFuZ2UtdmFjYXRpb25zLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWRhdGVwaWNrZXItcmFuZ2UtdmFjYXRpb25zL3NhbXBsZS1wby1kYXRlcGlja2VyLXJhbmdlLXZhY2F0aW9ucy5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1kYXRlcGlja2VyLXJhbmdlLXZhY2F0aW9ucy1yZWFjdGl2ZS1mb3JtXCIgdGl0bGU9XCJQTyBEYXRlcGlja2VyIFJhbmdlIC0gVmFjYXRpb25zIFJlYWN0aXZlIEZvcm1cIj5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWRhdGVwaWNrZXItcmFuZ2UtdmFjYXRpb25zLXJlYWN0aXZlLWZvcm0vc2FtcGxlLXBvLWRhdGVwaWNrZXItcmFuZ2UtdmFjYXRpb25zLXJlYWN0aXZlLWZvcm0uY29tcG9uZW50Lmh0bWxcIj5cbiAqICA8L2ZpbGU+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1kYXRlcGlja2VyLXJhbmdlLXZhY2F0aW9ucy1yZWFjdGl2ZS1mb3JtL3NhbXBsZS1wby1kYXRlcGlja2VyLXJhbmdlLXZhY2F0aW9ucy1yZWFjdGl2ZS1mb3JtLmNvbXBvbmVudC50c1wiPlxuICogIDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncG8tZGF0ZXBpY2tlci1yYW5nZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9wby1kYXRlcGlja2VyLXJhbmdlLmNvbXBvbmVudC5odG1sJyxcbiAgcHJvdmlkZXJzLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBQb0RhdGVwaWNrZXJSYW5nZUNvbXBvbmVudFxuICBleHRlbmRzIFBvRGF0ZXBpY2tlclJhbmdlQmFzZUNvbXBvbmVudFxuICBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXNcbntcbiAgQFZpZXdDaGlsZCgnZGF0ZVJhbmdlRmllbGQnLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogdHJ1ZSB9KSBkYXRlUmFuZ2VGaWVsZDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnZW5kRGF0ZUlucHV0JywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSkgZW5kRGF0ZUlucHV0OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdzdGFydERhdGVJbnB1dCcsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiB0cnVlIH0pIHN0YXJ0RGF0ZUlucHV0OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdpY29uQ2FsZW5kYXInLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogdHJ1ZSB9KSBpY29uQ2FsZW5kYXI6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2NhbGVuZGFyUGlja2VyJywgeyByZWFkOiBFbGVtZW50UmVmIH0pIGNhbGVuZGFyUGlja2VyOiBFbGVtZW50UmVmO1xuXG4gIGlzQ2FsZW5kYXJWaXNpYmxlID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBjbGlja0xpc3RlbmVyO1xuICBwcml2YXRlIGV2ZW50UmVzaXplTGlzdGVuZXI7XG4gIHByaXZhdGUgcG9EYXRlcGlja2VyUmFuZ2VFbGVtZW50OiBFbGVtZW50UmVmPGFueT47XG5cbiAgZ2V0IGF1dG9jb21wbGV0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5ub0F1dG9jb21wbGV0ZSA/ICdvZmYnIDogJ29uJztcbiAgfVxuXG4gIGdldCBlbmFibGVDbGVhbmVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNsZWFuICYmICh0aGlzLnN0YXJ0RGF0ZUlucHV0VmFsdWUgfHwgdGhpcy5lbmREYXRlSW5wdXRWYWx1ZSkgJiYgIXRoaXMuZGlzYWJsZWQgJiYgIXRoaXMucmVhZG9ubHk7XG4gIH1cblxuICBnZXQgZW5kRGF0ZUlucHV0TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnZW5kLWRhdGUnO1xuICB9XG5cbiAgZ2V0IGVuZERhdGVJbnB1dFZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZW5kRGF0ZUlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWU7XG4gIH1cblxuICBnZXQgZ2V0RXJyb3JNZXNzYWdlKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuZmllbGRFcnJvck1lc3NhZ2UgJiYgIXRoaXMuZXJyb3JNZXNzYWdlICYmIHRoaXMuaGFzSW52YWxpZENsYXNzKCkpIHtcbiAgICAgIHJldHVybiB0aGlzLmZpZWxkRXJyb3JNZXNzYWdlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5lcnJvck1lc3NhZ2UgIT09ICcnICYmIHRoaXMuaGFzSW52YWxpZENsYXNzKCkgPyB0aGlzLmVycm9yTWVzc2FnZSA6ICcnO1xuICB9XG5cbiAgZ2V0IGlzRGF0ZVJhbmdlSW5wdXRVbmNvbXBsZXRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5lbmREYXRlSW5wdXRWYWx1ZS5sZW5ndGggPCBwb0RhdGVwaWNrZXJSYW5nZURhdGVMZW5ndGhEZWZhdWx0ICYmXG4gICAgICB0aGlzLnN0YXJ0RGF0ZUlucHV0VmFsdWUubGVuZ3RoIDwgcG9EYXRlcGlja2VyUmFuZ2VEYXRlTGVuZ3RoRGVmYXVsdFxuICAgICk7XG4gIH1cblxuICBnZXQgaXNEaXJ0eURhdGVSYW5nZUlucHV0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVuZERhdGVJbnB1dFZhbHVlLmxlbmd0aCA+IDAgfHwgdGhpcy5zdGFydERhdGVJbnB1dFZhbHVlLmxlbmd0aCA+IDA7XG4gIH1cblxuICBnZXQgc3RhcnREYXRlSW5wdXROYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdzdGFydC1kYXRlJztcbiAgfVxuXG4gIGdldCBzdGFydERhdGVJbnB1dFZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnREYXRlSW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBjb250cm9sUG9zaXRpb246IFBvQ29udHJvbFBvc2l0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBwb0xhbmd1YWdlU2VydmljZTogUG9MYW5ndWFnZVNlcnZpY2UsXG4gICAgcG9EYXRlU2VydmljZTogUG9EYXRlU2VydmljZSxcbiAgICBwb0RhdGVwaWNrZXJSYW5nZUVsZW1lbnQ6IEVsZW1lbnRSZWZcbiAgKSB7XG4gICAgc3VwZXIoY2hhbmdlRGV0ZWN0b3IsIHBvRGF0ZVNlcnZpY2UsIHBvTGFuZ3VhZ2VTZXJ2aWNlKTtcbiAgICB0aGlzLnBvRGF0ZXBpY2tlclJhbmdlRWxlbWVudCA9IHBvRGF0ZXBpY2tlclJhbmdlRWxlbWVudDtcbiAgfVxuXG4gIHN0YXRpYyBnZXRLZXlDb2RlKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgcmV0dXJuIGV2ZW50LmtleUNvZGUgfHwgZXZlbnQud2hpY2g7XG4gIH1cblxuICBzdGF0aWMgZ2V0VGFyZ2V0RWxlbWVudChldmVudDogYW55KSB7XG4gICAgcmV0dXJuIGV2ZW50LnRhcmdldCB8fCBldmVudC5zcmNFbGVtZW50O1xuICB9XG5cbiAgc3RhdGljIGlzVmFsaWRLZXkoa2V5Q29kZTogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaXNOdW1lcmljS2V5ID0ga2V5Q29kZSA+PSA0OCAmJiBrZXlDb2RlIDw9IDU3O1xuICAgIGNvbnN0IGlzTnVtZXJpY051bXBhZEtleSA9IGtleUNvZGUgPj0gOTYgJiYga2V5Q29kZSA8PSAxMDU7XG5cbiAgICByZXR1cm4gaXNOdW1lcmljS2V5IHx8IGlzTnVtZXJpY051bXBhZEtleTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBpZiAodGhpcy5hdXRvRm9jdXMpIHtcbiAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICAvLyBDbGFzc2UgZGUgbcOhc2NhcmFcbiAgICB0aGlzLnBvTWFza09iamVjdCA9IHRoaXMuYnVpbGRNYXNrKFxuICAgICAgcmVwbGFjZUZvcm1hdFNlcGFyYXRvcih0aGlzLmZvcm1hdCwgdGhpcy5wb0xhbmd1YWdlU2VydmljZS5nZXREYXRlU2VwYXJhdG9yKHRoaXMubG9jYWxlKSlcbiAgICApO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLm1pbkRhdGUgfHwgY2hhbmdlcy5tYXhEYXRlKSB7XG4gICAgICB0aGlzLnZhbGlkYXRlTW9kZWwodGhpcy5kYXRlUmFuZ2UpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlcy5sb2NhbGUpIHtcbiAgICAgIGlmICh0aGlzLmRhdGVSYW5nZSkge1xuICAgICAgICB0aGlzLnVwZGF0ZVNjcmVlbkJ5TW9kZWwodGhpcy5kYXRlUmFuZ2UpO1xuICAgICAgfVxuICAgICAgdGhpcy5wb01hc2tPYmplY3QgPSB0aGlzLmJ1aWxkTWFzayhcbiAgICAgICAgcmVwbGFjZUZvcm1hdFNlcGFyYXRvcih0aGlzLmZvcm1hdCwgdGhpcy5wb0xhbmd1YWdlU2VydmljZS5nZXREYXRlU2VwYXJhdG9yKHRoaXMubG9jYWxlKSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5yZW1vdmVMaXN0ZW5lcnMoKTtcbiAgfVxuXG4gIGNsZWFyKCkge1xuICAgIHRoaXMucmVzZXREYXRlUmFuZ2VJbnB1dFZhbGlkYXRpb24oKTtcbiAgICB0aGlzLmRhdGVSYW5nZSA9IHsgc3RhcnQ6ICcnLCBlbmQ6ICcnIH07XG5cbiAgICB0aGlzLnVwZGF0ZVNjcmVlbkJ5TW9kZWwodGhpcy5kYXRlUmFuZ2UpO1xuICAgIHRoaXMudXBkYXRlTW9kZWwodGhpcy5kYXRlUmFuZ2UpO1xuICB9XG5cbiAgZXZlbnRPbkNsaWNrKCRldmVudDogYW55KSB7XG4gICAgdGhpcy5wb01hc2tPYmplY3QuY2xpY2soJGV2ZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGdW7Dp8OjbyBxdWUgYXRyaWJ1aSBmb2NvIGFvIGNvbXBvbmVudGUuXG4gICAqXG4gICAqIFBhcmEgdXRpbGl6w6EtbGEgw6kgbmVjZXNzw6FyaW8gdGVyIGEgaW5zdMOibmNpYSBkbyBjb21wb25lbnRlIG5vIERPTSwgcG9kZW5kbyBzZXIgdXRpbGl6YWRvIG8gVmlld0NoaWxkIGRhIHNlZ3VpbnRlIGZvcm1hOlxuICAgKlxuICAgKiBgYGBcbiAgICogaW1wb3J0IHsgUG9EYXRlcGlja2VyUmFuZ2VDb21wb25lbnQgfSBmcm9tICdAcG8tdWkvbmctY29tcG9uZW50cyc7XG4gICAqXG4gICAqIC4uLlxuICAgKlxuICAgKiBAVmlld0NoaWxkKFBvRGF0ZXBpY2tlclJhbmdlQ29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KSBkYXRlcGlja2VyUmFuZ2U6IFBvRGF0ZXBpY2tlclJhbmdlQ29tcG9uZW50O1xuICAgKlxuICAgKiBmb2N1c0RhdGVwaWNrZXJSYW5nZSgpIHtcbiAgICogICB0aGlzLmRhdGVwaWNrZXJSYW5nZS5mb2N1cygpO1xuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgZm9jdXMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLnN0YXJ0RGF0ZUlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBvbkJsdXIoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMub25Ub3VjaGVkTW9kZWw/LigpO1xuICAgIGNvbnN0IGlzU3RhcnREYXRlVGFyZ2V0RXZlbnQgPSBldmVudC50YXJnZXQubmFtZSA9PT0gdGhpcy5zdGFydERhdGVJbnB1dE5hbWU7XG5cbiAgICB0aGlzLnVwZGF0ZU1vZGVsQnlTY3JlZW4oaXNTdGFydERhdGVUYXJnZXRFdmVudCk7XG5cbiAgICB0aGlzLnJlbW92ZUZvY3VzRnJvbURhdGVQaWNrZXJSYW5nZUZpZWxkKCk7XG4gIH1cblxuICBvbkNhbGVuZGFyQ2hhbmdlKHsgc3RhcnQsIGVuZCB9KSB7XG4gICAgY29uc3QgaXNTdGFydERhdGVUYXJnZXRFdmVudCA9IHN0YXJ0ICYmICFlbmQ7XG5cbiAgICB0aGlzLnVwZGF0ZVNjcmVlbkJ5TW9kZWwoeyBzdGFydDogc3RhcnQgfHwgJycsIGVuZDogZW5kIHx8ICcnIH0pO1xuICAgIHRoaXMudXBkYXRlTW9kZWxCeVNjcmVlbihpc1N0YXJ0RGF0ZVRhcmdldEV2ZW50LCBzdGFydCB8fCAnJywgZW5kIHx8ICcnKTtcblxuICAgIGlmIChzdGFydCAmJiBlbmQpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmlzQ2FsZW5kYXJWaXNpYmxlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgICB9LCAzMDApO1xuICAgIH1cbiAgfVxuXG4gIG9uRm9jdXMoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuYXBwbHlGb2N1c09uRGF0ZVBpY2tlclJhbmdlRmllbGQoKTtcbiAgICB0aGlzLnBvTWFza09iamVjdC5yZXNldFBvc2l0aW9ucyhldmVudCk7XG4gIH1cblxuICBvbktleWRvd24oZXZlbnQ/OiBhbnkpIHtcbiAgICBpZiAodGhpcy5yZWFkb25seSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzU2V0Rm9jdXNPbkJhY2tzcGFjZShldmVudCkpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLnNldEZvY3VzT25CYWNrc3BhY2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wb01hc2tPYmplY3Qua2V5ZG93bihldmVudCk7XG4gICAgfVxuICB9XG5cbiAgb25LZXl1cChldmVudDogYW55KSB7XG4gICAgaWYgKHRoaXMucmVhZG9ubHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpc1N0YXJ0RGF0ZVRhcmdldEV2ZW50ID0gZXZlbnQudGFyZ2V0Lm5hbWUgPT09IHRoaXMuc3RhcnREYXRlSW5wdXROYW1lO1xuXG4gICAgdGhpcy5zZXRGb2N1cyhldmVudCk7XG4gICAgdGhpcy5wb01hc2tPYmplY3Qua2V5dXAoZXZlbnQpO1xuICAgIHRoaXMudXBkYXRlTW9kZWxXaGVuQ29tcGxldGUoaXNTdGFydERhdGVUYXJnZXRFdmVudCwgdGhpcy5zdGFydERhdGVJbnB1dFZhbHVlLCB0aGlzLmVuZERhdGVJbnB1dFZhbHVlKTtcbiAgfVxuXG4gIHJlc2V0RGF0ZVJhbmdlSW5wdXRWYWxpZGF0aW9uKCkge1xuICAgIHRoaXMuaXNTdGFydERhdGVSYW5nZUlucHV0VmFsaWQgPSB0cnVlO1xuICAgIHRoaXMuaXNEYXRlUmFuZ2VJbnB1dEZvcm1hdFZhbGlkID0gdHJ1ZTtcbiAgfVxuXG4gIHRvZ2dsZUNhbGVuZGFyKCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmlzQ2FsZW5kYXJWaXNpYmxlID0gIXRoaXMuaXNDYWxlbmRhclZpc2libGU7XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICBpZiAodGhpcy5pc0NhbGVuZGFyVmlzaWJsZSkge1xuICAgICAgdGhpcy5zZXRDYWxlbmRhclBvc2l0aW9uKCk7XG4gICAgICB0aGlzLmluaXRpYWxpemVMaXN0ZW5lcnMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcnMoKTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVTY3JlZW5CeU1vZGVsKG1vZGVsOiBQb0RhdGVwaWNrZXJSYW5nZSkge1xuICAgIGNvbnN0IGRhdGVSYW5nZSA9IHsgc3RhcnQ6IG1vZGVsLnN0YXJ0IGFzIHN0cmluZywgZW5kOiBtb2RlbC5lbmQgYXMgc3RyaW5nIH07XG4gICAgY29uc3QgaXNTdGFydERhdGVWYWxpZCA9IHRoaXMucG9EYXRlU2VydmljZS5pc0RhdGVSYW5nZVZhbGlkKGRhdGVSYW5nZS5lbmQsIGRhdGVSYW5nZS5zdGFydCk7XG4gICAgY29uc3QgaXNEYXRlVmFsaWQgPSBkYXRlID0+ICF0aGlzLmRhdGVGb3JtYXRGYWlsZWQoZGF0ZSkgJiYgaXNTdGFydERhdGVWYWxpZDtcblxuICAgIGNvbnN0IGVuZERhdGVGb3JtYXRlZCA9IGlzRGF0ZVZhbGlkKGRhdGVSYW5nZS5lbmQpID8gdGhpcy5mb3JtYXRNb2RlbFRvU2NyZWVuKGRhdGVSYW5nZS5lbmQpIDogJyc7XG4gICAgY29uc3Qgc3RhcnREYXRlRm9ybWF0ZWQgPSBpc0RhdGVWYWxpZChkYXRlUmFuZ2Uuc3RhcnQpID8gdGhpcy5mb3JtYXRNb2RlbFRvU2NyZWVuKGRhdGVSYW5nZS5zdGFydCkgOiAnJztcblxuICAgIHRoaXMuZW5kRGF0ZUlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBlbmREYXRlRm9ybWF0ZWQ7XG4gICAgdGhpcy5zdGFydERhdGVJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gc3RhcnREYXRlRm9ybWF0ZWQ7XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5Rm9jdXNPbkRhdGVQaWNrZXJSYW5nZUZpZWxkKCkge1xuICAgIHRoaXMuZGF0ZVJhbmdlRmllbGQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdwby1kYXRlcGlja2VyLXJhbmdlLWZpZWxkLWZvY3VzZWQnKTtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0RGF0ZShmb3JtYXQ6IHN0cmluZywgZGF5OiBzdHJpbmcgPSAnJywgbW9udGg6IHN0cmluZyA9ICcnLCB5ZWFyOiBzdHJpbmcgPSAnJyk6IHN0cmluZyB7XG4gICAgbGV0IGRhdGVGb3JtYXR0ZWQgPSByZXBsYWNlRm9ybWF0U2VwYXJhdG9yKFxuICAgICAgZm9ybWF0IHx8IHRoaXMuZm9ybWF0LFxuICAgICAgdGhpcy5wb0xhbmd1YWdlU2VydmljZS5nZXREYXRlU2VwYXJhdG9yKHRoaXMubG9jYWxlKVxuICAgICk7XG5cbiAgICBkYXkgPSBkYXkgJiYgZGF5LmluY2x1ZGVzKCdUJykgPyBkYXkuc2xpY2UoMCwgMikgOiBkYXk7XG5cbiAgICBkYXRlRm9ybWF0dGVkID0gZGF0ZUZvcm1hdHRlZC5yZXBsYWNlKCdkZCcsICgnMCcgKyBkYXkpLnNsaWNlKC0yKSk7XG4gICAgZGF0ZUZvcm1hdHRlZCA9IGRhdGVGb3JtYXR0ZWQucmVwbGFjZSgnbW0nLCAoJzAnICsgbW9udGgpLnNsaWNlKC0yKSk7XG4gICAgZGF0ZUZvcm1hdHRlZCA9IGRhdGVGb3JtYXR0ZWQucmVwbGFjZSgneXl5eScsIFN0cmluZyh5ZWFyKSk7XG5cbiAgICByZXR1cm4gZGF0ZUZvcm1hdHRlZDtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0U2NyZWVuVG9Nb2RlbCh2YWx1ZTogc3RyaW5nID0gJycpOiBzdHJpbmcge1xuICAgIGNvbnN0IFtkYXksIG1vbnRoLCB5ZWFyXSA9IHZhbHVlLnNwbGl0KHRoaXMucG9MYW5ndWFnZVNlcnZpY2UuZ2V0RGF0ZVNlcGFyYXRvcih0aGlzLmxvY2FsZSkpO1xuXG4gICAgcmV0dXJuIHZhbHVlID8gdGhpcy5mb3JtYXREYXRlKCd5eXl5LW1tLWRkJywgZGF5LCBtb250aCwgeWVhcikgOiAnJztcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0TW9kZWxUb1NjcmVlbih2YWx1ZTogc3RyaW5nID0gJycpOiBzdHJpbmcge1xuICAgIGNvbnN0IFt5ZWFyLCBtb250aCwgZGF5XSA9IHZhbHVlLnNwbGl0KCctJyk7XG5cbiAgICByZXR1cm4gdmFsdWUgPyB0aGlzLmZvcm1hdERhdGUodGhpcy5mb3JtYXQsIGRheSwgbW9udGgsIHllYXIpIDogJyc7XG4gIH1cblxuICBwcml2YXRlIGdldERhdGVSYW5nZUZvcm1hdFZhbGlkYXRpb24oXG4gICAgc3RhcnREYXRlOiBzdHJpbmcsXG4gICAgZW5kRGF0ZTogc3RyaW5nLFxuICAgIGlzU3RhcnREYXRlVGFyZ2V0RXZlbnQ6IGJvb2xlYW5cbiAgKTogeyBpc1ZhbGlkOiBib29sZWFuOyBkYXRlUmFuZ2VNb2RlbDogUG9EYXRlcGlja2VyUmFuZ2UgfSB7XG4gICAgdGhpcy5zZXREYXRlUmFuZ2VJbnB1dFZhbGlkYXRpb24oc3RhcnREYXRlLCBlbmREYXRlKTtcbiAgICByZXR1cm4ge1xuICAgICAgaXNWYWxpZDpcbiAgICAgICAgdGhpcy5pc0RhdGVSYW5nZUlucHV0Rm9ybWF0VmFsaWQgJiYgdGhpcy5pc1N0YXJ0RGF0ZVJhbmdlSW5wdXRWYWxpZCAmJiB0aGlzLnZlcmlmeVZhbGlkRGF0ZShzdGFydERhdGUsIGVuZERhdGUpLFxuICAgICAgZGF0ZVJhbmdlTW9kZWw6IHRoaXMuZ2V0VmFsaWRhdGVkTW9kZWwoc3RhcnREYXRlLCBlbmREYXRlLCBpc1N0YXJ0RGF0ZVRhcmdldEV2ZW50KVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldFZhbGlkYXRlZE1vZGVsKHN0YXJ0RGF0ZTogc3RyaW5nLCBlbmREYXRlOiBzdHJpbmcsIGlzU3RhcnREYXRlVGFyZ2V0RXZlbnQ6IGJvb2xlYW4pOiBQb0RhdGVwaWNrZXJSYW5nZSB7XG4gICAgY29uc3QgZGF0ZVJhbmdlTW9kZWwgPSB7IHN0YXJ0OiAnJywgZW5kOiAnJyB9O1xuXG4gICAgZGF0ZVJhbmdlTW9kZWwuZW5kID1cbiAgICAgIChpc1N0YXJ0RGF0ZVRhcmdldEV2ZW50IHx8IHRoaXMuaXNTdGFydERhdGVSYW5nZUlucHV0VmFsaWQpICYmICF0aGlzLmRhdGVGb3JtYXRGYWlsZWQoZW5kRGF0ZSkgPyBlbmREYXRlIDogJyc7XG5cbiAgICBkYXRlUmFuZ2VNb2RlbC5zdGFydCA9XG4gICAgICAoIWlzU3RhcnREYXRlVGFyZ2V0RXZlbnQgfHwgdGhpcy5pc1N0YXJ0RGF0ZVJhbmdlSW5wdXRWYWxpZCkgJiYgIXRoaXMuZGF0ZUZvcm1hdEZhaWxlZChzdGFydERhdGUpXG4gICAgICAgID8gc3RhcnREYXRlXG4gICAgICAgIDogJyc7XG5cbiAgICByZXR1cm4gZGF0ZVJhbmdlTW9kZWw7XG4gIH1cblxuICBwcml2YXRlIGhhc0F0dHJDYWxlbmRhcihlbGVtZW50KSB7XG4gICAgY29uc3QgYXR0ckNhbGVuZGFyID0gJ2F0dHItY2FsZW5kYXInO1xuXG4gICAgcmV0dXJuIGVsZW1lbnQ/Lmhhc0F0dHJpYnV0ZShhdHRyQ2FsZW5kYXIpIHx8IGVsZW1lbnQ/LnBhcmVudEVsZW1lbnQ/Lmhhc0F0dHJpYnV0ZShhdHRyQ2FsZW5kYXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYXNJbnZhbGlkQ2xhc3MoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMucG9EYXRlcGlja2VyUmFuZ2VFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCduZy1pbnZhbGlkJykgJiZcbiAgICAgIHRoaXMucG9EYXRlcGlja2VyUmFuZ2VFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCduZy1kaXJ0eScpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUxpc3RlbmVycygpIHtcbiAgICB0aGlzLmNsaWNrTGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3RlbignZG9jdW1lbnQnLCAnY2xpY2snLCAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIHRoaXMud2FzQ2xpY2tlZE9uUGlja2VyKGV2ZW50KTtcbiAgICB9KTtcblxuICAgIHRoaXMuZXZlbnRSZXNpemVMaXN0ZW5lciA9IHRoaXMucmVuZGVyZXIubGlzdGVuKCd3aW5kb3cnLCAncmVzaXplJywgKCkgPT4ge1xuICAgICAgdGhpcy5pc0NhbGVuZGFyVmlzaWJsZSA9IGZhbHNlO1xuICAgIH0pO1xuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMub25TY3JvbGwsIHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0VxdWFsQmVmb3JlVmFsdWUoc3RhcnREYXRlOiBzdHJpbmcsIGVuZERhdGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzRGF0ZVJhbmdlSW5wdXRGb3JtYXRWYWxpZCAmJiBlbmREYXRlID09PSB0aGlzLmRhdGVSYW5nZS5lbmQgJiYgc3RhcnREYXRlID09PSB0aGlzLmRhdGVSYW5nZS5zdGFydDtcbiAgfVxuXG4gIHByaXZhdGUgaXNTZXRGb2N1c09uQmFja3NwYWNlKGV2ZW50OiBhbnkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgZXZlbnQudGFyZ2V0Lm5hbWUgPT09IHRoaXMuZW5kRGF0ZUlucHV0TmFtZSAmJlxuICAgICAgdGhpcy5lbmREYXRlSW5wdXQubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25TdGFydCA9PT0gMCAmJlxuICAgICAgdGhpcy5lbmREYXRlSW5wdXQubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25FbmQgPT09IDAgJiZcbiAgICAgIGV2ZW50LmtleUNvZGUgPT09IGJhY2tzcGFjZUtleVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG9uU2Nyb2xsID0gKCk6IHZvaWQgPT4ge1xuICAgIGlmICh0aGlzLmlzQ2FsZW5kYXJWaXNpYmxlKSB7XG4gICAgICB0aGlzLmNvbnRyb2xQb3NpdGlvbi5hZGp1c3RQb3NpdGlvbihwb0NhbGVuZGFyUG9zaXRpb25EZWZhdWx0KTtcbiAgICB9XG4gIH07XG5cbiAgcHJpdmF0ZSByZW1vdmVGb2N1c0Zyb21EYXRlUGlja2VyUmFuZ2VGaWVsZCgpIHtcbiAgICB0aGlzLmRhdGVSYW5nZUZpZWxkLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgncG8tZGF0ZXBpY2tlci1yYW5nZS1maWVsZC1mb2N1c2VkJyk7XG4gIH1cblxuICBwcml2YXRlIHNldERhdGVSYW5nZUlucHV0VmFsaWRhdGlvbihzdGFydERhdGU6IHN0cmluZywgZW5kRGF0ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5pc1N0YXJ0RGF0ZVJhbmdlSW5wdXRWYWxpZCA9IHRoaXMucG9EYXRlU2VydmljZS5pc0RhdGVSYW5nZVZhbGlkKGVuZERhdGUsIHN0YXJ0RGF0ZSk7XG5cbiAgICB0aGlzLmlzRGF0ZVJhbmdlSW5wdXRGb3JtYXRWYWxpZCA9ICF0aGlzLmRhdGVGb3JtYXRGYWlsZWQoc3RhcnREYXRlKSAmJiAhdGhpcy5kYXRlRm9ybWF0RmFpbGVkKGVuZERhdGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRGb2N1cyhldmVudDogYW55KSB7XG4gICAgY29uc3QgaW5wdXRFbGVtZW50ID0gUG9EYXRlcGlja2VyUmFuZ2VDb21wb25lbnQuZ2V0VGFyZ2V0RWxlbWVudChldmVudCk7XG4gICAgY29uc3Qga2V5Q29kZSA9IFBvRGF0ZXBpY2tlclJhbmdlQ29tcG9uZW50LmdldEtleUNvZGUoZXZlbnQpO1xuICAgIGNvbnN0IGlucHV0TmFtZSA9IGlucHV0RWxlbWVudFsnbmFtZSddO1xuXG4gICAgdGhpcy5zZXRGb2N1c09uQXJyb3dMZWZ0KGtleUNvZGUsIGlucHV0TmFtZSk7XG4gICAgdGhpcy5zZXRGb2N1c09uQXJyb3dSaWdodChrZXlDb2RlLCBpbnB1dE5hbWUsIGlucHV0RWxlbWVudCk7XG4gICAgdGhpcy5zZXRGb2N1c09uU3RhcnREYXRlQ29tcGxldGVkKGtleUNvZGUsIGlucHV0TmFtZSk7XG4gIH1cblxuICBwcml2YXRlIHNldEZvY3VzQW5kUG9zaXRpb24ocG9zaXRpb246IG51bWJlciwgaW5wdXRFbGVtZW50OiBFbGVtZW50UmVmLCBzZWxlY3Rpb25SYW5nZTogbnVtYmVyKSB7XG4gICAgdGhpcy5mb2N1c09uRWxlbWVudChpbnB1dEVsZW1lbnQpO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5zZXRTZWxlY3Rpb25SYW5nZShzZWxlY3Rpb25SYW5nZSwgc2VsZWN0aW9uUmFuZ2UpO1xuICAgICAgdGhpcy5wb01hc2tPYmplY3QuaW5pdGlhbFBvc2l0aW9uID0gcG9zaXRpb247XG4gICAgICB0aGlzLnBvTWFza09iamVjdC5maW5hbFBvc2l0aW9uID0gcG9zaXRpb247XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGZvY3VzT25FbGVtZW50KGlucHV0RWxlbWVudDogRWxlbWVudFJlZikge1xuICAgIGlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZUxpc3RlbmVycygpIHtcbiAgICBpZiAodGhpcy5jbGlja0xpc3RlbmVyKSB7XG4gICAgICB0aGlzLmNsaWNrTGlzdGVuZXIoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5ldmVudFJlc2l6ZUxpc3RlbmVyKSB7XG4gICAgICB0aGlzLmV2ZW50UmVzaXplTGlzdGVuZXIoKTtcbiAgICB9XG5cbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5vblNjcm9sbCwgdHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIHNldENhbGVuZGFyUG9zaXRpb24oKSB7XG4gICAgdGhpcy5jb250cm9sUG9zaXRpb24uc2V0RWxlbWVudHMoXG4gICAgICB0aGlzLmNhbGVuZGFyUGlja2VyLm5hdGl2ZUVsZW1lbnQsXG4gICAgICBwb0NhbGVuZGFyQ29udGVudE9mZnNldCxcbiAgICAgIHRoaXMuZGF0ZVJhbmdlRmllbGQsXG4gICAgICBbJ2JvdHRvbS1sZWZ0JywgJ2JvdHRvbS1yaWdodCcsICd0b3AtbGVmdCcsICd0b3AtcmlnaHQnXSxcbiAgICAgIGZhbHNlLFxuICAgICAgdHJ1ZVxuICAgICk7XG5cbiAgICB0aGlzLmNvbnRyb2xQb3NpdGlvbi5hZGp1c3RQb3NpdGlvbihwb0NhbGVuZGFyUG9zaXRpb25EZWZhdWx0KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Rm9jdXNPbkFycm93TGVmdChrZXlDb2RlOiBudW1iZXIsIGlucHV0TmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgaXNDdXJzb3JBdFN0YXJ0T2ZJbnB1dCA9IHRoaXMuZW5kRGF0ZUlucHV0Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQgPT09IDA7XG5cbiAgICBpZiAoaW5wdXROYW1lID09PSB0aGlzLmVuZERhdGVJbnB1dE5hbWUgJiYgaXNDdXJzb3JBdFN0YXJ0T2ZJbnB1dCAmJiBrZXlDb2RlID09PSBhcnJvd0xlZnRLZXkpIHtcbiAgICAgIGNvbnN0IGlucHV0TGVuZ3RoID0gdGhpcy5zdGFydERhdGVJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlLmxlbmd0aDtcbiAgICAgIHRoaXMuc2V0Rm9jdXNBbmRQb3NpdGlvbihpbnB1dExlbmd0aCwgdGhpcy5zdGFydERhdGVJbnB1dCwgaW5wdXRMZW5ndGgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0Rm9jdXNPbkFycm93UmlnaHQoa2V5Q29kZTogbnVtYmVyLCBpbnB1dE5hbWU6IHN0cmluZywgaW5wdXRFbGVtZW50OiBhbnkpIHtcbiAgICBjb25zdCBpc0N1cnNvckF0RW5kT2ZJbnB1dCA9IHRoaXMuc3RhcnREYXRlSW5wdXQubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25TdGFydCA9PT0gaW5wdXRFbGVtZW50LnZhbHVlLmxlbmd0aDtcblxuICAgIGlmIChpbnB1dE5hbWUgPT09IHRoaXMuc3RhcnREYXRlSW5wdXROYW1lICYmIGlzQ3Vyc29yQXRFbmRPZklucHV0ICYmIGtleUNvZGUgPT09IGFycm93UmlnaHRLZXkpIHtcbiAgICAgIHRoaXMuc2V0Rm9jdXNBbmRQb3NpdGlvbigwLCB0aGlzLmVuZERhdGVJbnB1dCwgMCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRGb2N1c09uQmFja3NwYWNlKCkge1xuICAgIGNvbnN0IGlucHV0TGVuZ3RoID0gdGhpcy5zdGFydERhdGVJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlLmxlbmd0aDtcblxuICAgIHRoaXMuc3RhcnREYXRlSW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9IHRoaXMuc3RhcnREYXRlSW5wdXRWYWx1ZS5zbGljZSgwLCAtMSk7XG4gICAgdGhpcy5zZXRGb2N1c0FuZFBvc2l0aW9uKGlucHV0TGVuZ3RoLCB0aGlzLnN0YXJ0RGF0ZUlucHV0LCBpbnB1dExlbmd0aCk7XG4gIH1cblxuICBwcml2YXRlIHNldEZvY3VzT25TdGFydERhdGVDb21wbGV0ZWQoa2V5Q29kZTogbnVtYmVyLCBpbnB1dE5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGlzTGFzdEtleVByZXNzZWQgPSB0aGlzLnN0YXJ0RGF0ZUlucHV0Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQgPT09IHBvRGF0ZXBpY2tlclJhbmdlRGF0ZUxlbmd0aERlZmF1bHQ7XG4gICAgY29uc3QgaXNOZXdEYXRlQ29tcGxldGVkID1cbiAgICAgIHRoaXMuc3RhcnREYXRlSW5wdXRWYWx1ZS5sZW5ndGggPT09IHBvRGF0ZXBpY2tlclJhbmdlRGF0ZUxlbmd0aERlZmF1bHQgJiYgaXNMYXN0S2V5UHJlc3NlZDtcbiAgICBjb25zdCBpc1ZhbGlkS2V5ID0gUG9EYXRlcGlja2VyUmFuZ2VDb21wb25lbnQuaXNWYWxpZEtleShrZXlDb2RlKTtcblxuICAgIGlmIChpbnB1dE5hbWUgPT09IHRoaXMuc3RhcnREYXRlSW5wdXROYW1lICYmIGlzTmV3RGF0ZUNvbXBsZXRlZCAmJiBpc1ZhbGlkS2V5KSB7XG4gICAgICB0aGlzLnNldEZvY3VzQW5kUG9zaXRpb24oMCwgdGhpcy5lbmREYXRlSW5wdXQsIDApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTW9kZWxXaGVuQ29tcGxldGUoaXNTdGFydERhdGVUYXJnZXRFdmVudDogYm9vbGVhbiwgc3RhcnREYXRlLCBlbmREYXRlKSB7XG4gICAgY29uc3QgZW5kRGF0ZUZvcm1hdHRlZCA9IHRoaXMuZm9ybWF0U2NyZWVuVG9Nb2RlbChlbmREYXRlKTtcbiAgICBjb25zdCBzdGFydERhdGVGb3JtYXR0ZWQgPSB0aGlzLmZvcm1hdFNjcmVlblRvTW9kZWwoc3RhcnREYXRlKTtcbiAgICBjb25zdCBkYXRlRm9ybWF0VmFsaWRhdGlvbiA9IHRoaXMuZ2V0RGF0ZVJhbmdlRm9ybWF0VmFsaWRhdGlvbihcbiAgICAgIHN0YXJ0RGF0ZUZvcm1hdHRlZCxcbiAgICAgIGVuZERhdGVGb3JtYXR0ZWQsXG4gICAgICBpc1N0YXJ0RGF0ZVRhcmdldEV2ZW50XG4gICAgKTtcblxuICAgIGlmICh0aGlzLmlzRXF1YWxCZWZvcmVWYWx1ZShzdGFydERhdGVGb3JtYXR0ZWQsIGVuZERhdGVGb3JtYXR0ZWQpKSB7XG4gICAgICB0aGlzLnJlc2V0RGF0ZVJhbmdlSW5wdXRWYWxpZGF0aW9uKCk7XG4gICAgICB0aGlzLnZhbGlkYXRlTW9kZWwodGhpcy5kYXRlUmFuZ2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChkYXRlRm9ybWF0VmFsaWRhdGlvbi5pc1ZhbGlkKSB7XG4gICAgICB0aGlzLmRhdGVSYW5nZSA9IHsgc3RhcnQ6IHN0YXJ0RGF0ZUZvcm1hdHRlZCwgZW5kOiBlbmREYXRlRm9ybWF0dGVkIH07XG4gICAgICB0aGlzLnVwZGF0ZU1vZGVsKHRoaXMuZGF0ZVJhbmdlKTtcbiAgICAgIHRoaXMub25DaGFuZ2UuZW1pdCh7IC4uLnRoaXMuZGF0ZVJhbmdlIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTW9kZWxCeVNjcmVlbihpc1N0YXJ0RGF0ZVRhcmdldEV2ZW50OiBib29sZWFuLCBzdGFydERhdGU/LCBlbmREYXRlPykge1xuICAgIGNvbnN0IGVuZERhdGVGb3JtYXR0ZWQgPSBlbmREYXRlIHx8IHRoaXMuZm9ybWF0U2NyZWVuVG9Nb2RlbCh0aGlzLmVuZERhdGVJbnB1dFZhbHVlKTtcbiAgICBjb25zdCBzdGFydERhdGVGb3JtYXR0ZWQgPSBzdGFydERhdGUgfHwgdGhpcy5mb3JtYXRTY3JlZW5Ub01vZGVsKHRoaXMuc3RhcnREYXRlSW5wdXRWYWx1ZSk7XG4gICAgaWYgKHRoaXMuaXNEYXRlUmFuZ2VJbnB1dFVuY29tcGxldGVkICYmIHRoaXMuaXNEaXJ0eURhdGVSYW5nZUlucHV0KSB7XG4gICAgICB0aGlzLnVwZGF0ZU1vZGVsKHRoaXMuZGF0ZVJhbmdlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0VxdWFsQmVmb3JlVmFsdWUoc3RhcnREYXRlRm9ybWF0dGVkLCBlbmREYXRlRm9ybWF0dGVkKSkge1xuICAgICAgdGhpcy5yZXNldERhdGVSYW5nZUlucHV0VmFsaWRhdGlvbigpO1xuICAgICAgdGhpcy52YWxpZGF0ZU1vZGVsKHRoaXMuZGF0ZVJhbmdlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRlRm9ybWF0VmFsaWRhdGlvbiA9IHRoaXMuZ2V0RGF0ZVJhbmdlRm9ybWF0VmFsaWRhdGlvbihcbiAgICAgIHN0YXJ0RGF0ZUZvcm1hdHRlZCxcbiAgICAgIGVuZERhdGVGb3JtYXR0ZWQsXG4gICAgICBpc1N0YXJ0RGF0ZVRhcmdldEV2ZW50XG4gICAgKTtcblxuICAgIGlmIChkYXRlRm9ybWF0VmFsaWRhdGlvbi5pc1ZhbGlkKSB7XG4gICAgICB0aGlzLmRhdGVSYW5nZSA9IHsgc3RhcnQ6IHN0YXJ0RGF0ZUZvcm1hdHRlZCwgZW5kOiBlbmREYXRlRm9ybWF0dGVkIH07XG4gICAgICB0aGlzLnVwZGF0ZU1vZGVsKHRoaXMuZGF0ZVJhbmdlKTtcbiAgICAgIHRoaXMub25DaGFuZ2UuZW1pdCh7IC4uLnRoaXMuZGF0ZVJhbmdlIH0pO1xuICAgIH1cblxuICAgIGlmICghZGF0ZUZvcm1hdFZhbGlkYXRpb24uaXNWYWxpZCAmJiB0aGlzLnZlcmlmeUZvcm1hdHRlZERhdGVzKHN0YXJ0RGF0ZUZvcm1hdHRlZCwgZW5kRGF0ZUZvcm1hdHRlZCkpIHtcbiAgICAgIHRoaXMuZGF0ZVJhbmdlID0geyAuLi5kYXRlRm9ybWF0VmFsaWRhdGlvbi5kYXRlUmFuZ2VNb2RlbCB9O1xuICAgICAgdGhpcy51cGRhdGVNb2RlbChkYXRlRm9ybWF0VmFsaWRhdGlvbi5kYXRlUmFuZ2VNb2RlbCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB2ZXJpZnlGb3JtYXR0ZWREYXRlcyhzdGFydDogc3RyaW5nLCBlbmQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXN0YXJ0IHx8ICEhZW5kO1xuICB9XG5cbiAgcHJpdmF0ZSB3YXNDbGlja2VkT25QaWNrZXIoZXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNDYWxlbmRhclZpc2libGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAhdGhpcy5jYWxlbmRhclBpY2tlci5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkgJiZcbiAgICAgICF0aGlzLmljb25DYWxlbmRhci5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkgJiZcbiAgICAgICF0aGlzLmhhc0F0dHJDYWxlbmRhcihldmVudC50YXJnZXQpXG4gICAgKSB7XG4gICAgICB0aGlzLmlzQ2FsZW5kYXJWaXNpYmxlID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cbn1cbiIsIjxwby1maWVsZC1jb250YWluZXJcbiAgW2NsYXNzLnBvLWRhdGUtcGlja2VyLWNvbnRhaW5lci1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gIFtwLWRpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgW3AtbGFiZWxdPVwibGFiZWxcIlxuICBbcC1vcHRpb25hbF09XCJvcHRpb25hbFwiXG4gIFtwLXJlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgW3Atc2hvdy1yZXF1aXJlZF09XCJzaG93UmVxdWlyZWRcIlxuPlxuICA8ZGl2IGNsYXNzPVwicG8tZmllbGQtY29udGFpbmVyLWNvbnRlbnRcIj5cbiAgICA8ZGl2IGNsYXNzPVwicG8tZmllbGQtY29udGFpbmVyLWlucHV0XCI+XG4gICAgICA8ZGl2XG4gICAgICAgICNkYXRlUmFuZ2VGaWVsZFxuICAgICAgICBjbGFzcz1cInBvLWRhdGVwaWNrZXItcmFuZ2UtZmllbGQgcG8taW5wdXRcIlxuICAgICAgICBbY2xhc3MucG8tZGF0ZXBpY2tlci1yYW5nZS1maWVsZC1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgIFthdHRyLmRpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBvLWRhdGVwaWNrZXItcmFuZ2Utc3RhcnQtZGF0ZVwiPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgI3N0YXJ0RGF0ZUlucHV0XG4gICAgICAgICAgICBjbGFzcz1cInBvLWRhdGVwaWNrZXItcmFuZ2UtaW5wdXRcIlxuICAgICAgICAgICAgbWF4bGVuZ3RoPVwiMTBcIlxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJsYWJlbFwiXG4gICAgICAgICAgICBbYXV0b2NvbXBsZXRlXT1cImF1dG9jb21wbGV0ZVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgW25hbWVdPVwic3RhcnREYXRlSW5wdXROYW1lXCJcbiAgICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgICAgICAoYmx1cik9XCJvbkJsdXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAoZm9jdXMpPVwib25Gb2N1cygkZXZlbnQpXCJcbiAgICAgICAgICAgIChrZXlkb3duKT1cIm9uS2V5ZG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgIChrZXl1cCk9XCJvbktleXVwKCRldmVudClcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImV2ZW50T25DbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwicG8tZGF0ZXBpY2tlci1yYW5nZS1zZXBhcmF0b3JcIj4tPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBvLWRhdGVwaWNrZXItcmFuZ2UtZW5kLWRhdGVcIj5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICNlbmREYXRlSW5wdXRcbiAgICAgICAgICAgIGNsYXNzPVwicG8tZGF0ZXBpY2tlci1yYW5nZS1pbnB1dFwiXG4gICAgICAgICAgICBtYXhsZW5ndGg9XCIxMFwiXG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBbYXV0b2NvbXBsZXRlXT1cImF1dG9jb21wbGV0ZVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgW25hbWVdPVwiZW5kRGF0ZUlucHV0TmFtZVwiXG4gICAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAgICAgICAgICAgKGJsdXIpPVwib25CbHVyKCRldmVudClcIlxuICAgICAgICAgICAgKGZvY3VzKT1cIm9uRm9jdXMoJGV2ZW50KVwiXG4gICAgICAgICAgICAoa2V5ZG93bik9XCJvbktleWRvd24oJGV2ZW50KVwiXG4gICAgICAgICAgICAoa2V5dXApPVwib25LZXl1cCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJldmVudE9uQ2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBvLWRhdGVwaWNrZXItcmFuZ2UtaWNvblwiPlxuICAgICAgICAgIDxwby1jbGVhbiBjbGFzcz1cInBvLWljb24taW5wdXRcIiAqbmdJZj1cImVuYWJsZUNsZWFuZXJcIiAocC1jaGFuZ2UtZXZlbnQpPVwiY2xlYXIoKVwiPjwvcG8tY2xlYW4+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwby1kYXRlcGlja2VyLXJhbmdlLWljb25cIj5cbiAgICAgICAgICA8cG8taWNvblxuICAgICAgICAgICAgI2ljb25DYWxlbmRhclxuICAgICAgICAgICAgW3AtaWNvbl09XCIhZGlzYWJsZWQgfHwgIXJlYWRvbmx5ID8gJ0lDT05fQ0FMRU5EQVIgcG8tY2xpY2thYmxlJyA6ICdJQ09OX0NBTEVOREFSJ1wiXG4gICAgICAgICAgICBjbGFzcz1cInBvLWZpZWxkLWljb24ge3sgZGlzYWJsZWQgPyAncG8taWNvbi1pbnB1dC1kaXNhYmxlZCcgOiAncG8taWNvbi1pbnB1dCcgfX1cIlxuICAgICAgICAgICAgW2NsYXNzLnBvLWZpZWxkLWljb24tZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgcmVhZG9ubHlcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUNhbGVuZGFyKClcIlxuICAgICAgICAgID5cbiAgICAgICAgICA8L3BvLWljb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxwby1maWVsZC1jb250YWluZXItYm90dG9tXG4gICAgW3AtaGVscF09XCJoZWxwXCJcbiAgICBbcC1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgW3AtZXJyb3ItcGF0dGVybl09XCJnZXRFcnJvck1lc3NhZ2VcIlxuICA+PC9wby1maWVsZC1jb250YWluZXItYm90dG9tPlxuPC9wby1maWVsZC1jb250YWluZXI+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJpc0NhbGVuZGFyVmlzaWJsZVwiPlxuICA8ZGl2ICNjYWxlbmRhclBpY2tlciBjbGFzcz1cInBvLWNhbGVuZGFyLXJhbmdlLXBpY2tlclwiPlxuICAgIDxwby1jYWxlbmRhclxuICAgICAgcC1tb2RlPVwicmFuZ2VcIlxuICAgICAgW25nTW9kZWxdPVwiZGF0ZVJhbmdlXCJcbiAgICAgIFtwLW1heC1kYXRlXT1cIm1heERhdGVcIlxuICAgICAgW3AtbWluLWRhdGVdPVwibWluRGF0ZVwiXG4gICAgICBbcC1sb2NhbGVdPVwibG9jYWxlXCJcbiAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2FsZW5kYXJDaGFuZ2UoJGV2ZW50KVwiXG4gICAgPjwvcG8tY2FsZW5kYXI+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG4iXX0=
540
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tZGF0ZXBpY2tlci1yYW5nZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2NvbXBvbmVudHMvcG8tZmllbGQvcG8tZGF0ZXBpY2tlci1yYW5nZS9wby1kYXRlcGlja2VyLXJhbmdlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby1maWVsZC9wby1kYXRlcGlja2VyLXJhbmdlL3BvLWRhdGVwaWNrZXItcmFuZ2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxFQUVWLFNBQVMsRUFNVCx1QkFBdUIsRUFDeEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWxFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHFFQUFxRSxDQUFDO0FBRy9HLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBR3RGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lDa0NyRCxvQ0FBaUY7SUFBM0IsZ05BQWtCLGNBQU8sS0FBQztJQUFDLGlCQUFXOzs7O0lBeUJ0Ryw2QkFBd0M7SUFFcEMsQUFERixrQ0FBc0Qsc0JBUW5EO0lBREMsMk5BQWlCLCtCQUF3QixLQUFDO0lBRTlDLEFBREcsaUJBQWMsRUFDWDs7OztJQU5GLGVBQXFCO0lBR3JCLEFBREEsQUFEQSxBQURBLDBDQUFxQiw4QkFDQyw4QkFDQSwyQkFDSDs7QURoRXpCLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQztBQUN4QixNQUFNLGFBQWEsR0FBRyxFQUFFLENBQUM7QUFDekIsTUFB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Q0EsWUFBWTtrQkFBMUUsU0FBUzttQkFBQyxjQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7WUFDVixjQUFjO2tCQUFoRSxTQUFTO21CQUFDLGdCQUFnQixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTs7a0ZBUnRDLDBCQUEwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIGZvcndhcmRSZWYsXG4gIE9uSW5pdCxcbiAgVmlld0NoaWxkLFxuICBBZnRlclZpZXdJbml0LFxuICBSZW5kZXJlcjIsXG4gIE9uRGVzdHJveSxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgT25DaGFuZ2VzLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneVxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5HX1ZBTElEQVRPUlMsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBQb0NvbnRyb2xQb3NpdGlvblNlcnZpY2UgfSBmcm9tICcuLy4uLy4uLy4uL3NlcnZpY2VzL3BvLWNvbnRyb2wtcG9zaXRpb24vcG8tY29udHJvbC1wb3NpdGlvbi5zZXJ2aWNlJztcblxuaW1wb3J0IHsgUG9EYXRlcGlja2VyUmFuZ2UgfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tZGF0ZXBpY2tlci1yYW5nZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9EYXRlcGlja2VyUmFuZ2VCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi9wby1kYXRlcGlja2VyLXJhbmdlLWJhc2UuY29tcG9uZW50JztcbmltcG9ydCB7IFBvRGF0ZVNlcnZpY2UgfSBmcm9tICcuLy4uLy4uLy4uL3NlcnZpY2VzL3BvLWRhdGUvcG8tZGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IFBvTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcG8tbGFuZ3VhZ2UvcG8tbGFuZ3VhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyByZXBsYWNlRm9ybWF0U2VwYXJhdG9yIH0gZnJvbSAnLi8uLi8uLi8uLi91dGlscy91dGlsJztcblxuY29uc3QgYXJyb3dMZWZ0S2V5ID0gMzc7XG5jb25zdCBhcnJvd1JpZ2h0S2V5ID0gMzk7XG5jb25zdCBiYWNrc3BhY2VLZXkgPSA4O1xuY29uc3QgcG9EYXRlcGlja2VyUmFuZ2VEYXRlTGVuZ3RoRGVmYXVsdCA9IDEwO1xuXG5jb25zdCBwb0NhbGVuZGFyQ29udGVudE9mZnNldCA9IDg7XG5jb25zdCBwb0NhbGVuZGFyUG9zaXRpb25EZWZhdWx0ID0gJ2JvdHRvbS1sZWZ0JztcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmNvbnN0IHByb3ZpZGVycyA9IFtcbiAge1xuICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFBvRGF0ZXBpY2tlclJhbmdlQ29tcG9uZW50KSxcbiAgICBtdWx0aTogdHJ1ZVxuICB9LFxuICB7XG4gICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBQb0RhdGVwaWNrZXJSYW5nZUNvbXBvbmVudCksXG4gICAgbXVsdGk6IHRydWVcbiAgfSxcbiAgUG9Db250cm9sUG9zaXRpb25TZXJ2aWNlXG5dO1xuLyoqXG4gKiBAZG9jc0V4dGVuZHMgUG9EYXRlcGlja2VyUmFuZ2VCYXNlQ29tcG9uZW50XG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tZGF0ZXBpY2tlci1yYW5nZS1iYXNpY1wiIHRpdGxlPVwiUE8gRGF0ZXBpY2tlciBSYW5nZSBCYXNpY1wiPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tZGF0ZXBpY2tlci1yYW5nZS1iYXNpYy9zYW1wbGUtcG8tZGF0ZXBpY2tlci1yYW5nZS1iYXNpYy5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1kYXRlcGlja2VyLXJhbmdlLWJhc2ljL3NhbXBsZS1wby1kYXRlcGlja2VyLXJhbmdlLWJhc2ljLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLWRhdGVwaWNrZXItcmFuZ2UtbGFic1wiIHRpdGxlPVwiUE8gRGF0ZXBpY2tlciBSYW5nZSBMYWJzXCI+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1kYXRlcGlja2VyLXJhbmdlLWxhYnMvc2FtcGxlLXBvLWRhdGVwaWNrZXItcmFuZ2UtbGFicy5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1kYXRlcGlja2VyLXJhbmdlLWxhYnMvc2FtcGxlLXBvLWRhdGVwaWNrZXItcmFuZ2UtbGFicy5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1kYXRlcGlja2VyLXJhbmdlLXZhY2F0aW9uc1wiIHRpdGxlPVwiUE8gRGF0ZXBpY2tlciBSYW5nZSAtIFZhY2F0aW9ucyBTdWdnZXN0aW9uXCI+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1kYXRlcGlja2VyLXJhbmdlLXZhY2F0aW9ucy9zYW1wbGUtcG8tZGF0ZXBpY2tlci1yYW5nZS12YWNhdGlvbnMuY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tZGF0ZXBpY2tlci1yYW5nZS12YWNhdGlvbnMvc2FtcGxlLXBvLWRhdGVwaWNrZXItcmFuZ2UtdmFjYXRpb25zLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLWRhdGVwaWNrZXItcmFuZ2UtdmFjYXRpb25zLXJlYWN0aXZlLWZvcm1cIiB0aXRsZT1cIlBPIERhdGVwaWNrZXIgUmFuZ2UgLSBWYWNhdGlvbnMgUmVhY3RpdmUgRm9ybVwiPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tZGF0ZXBpY2tlci1yYW5nZS12YWNhdGlvbnMtcmVhY3RpdmUtZm9ybS9zYW1wbGUtcG8tZGF0ZXBpY2tlci1yYW5nZS12YWNhdGlvbnMtcmVhY3RpdmUtZm9ybS5jb21wb25lbnQuaHRtbFwiPlxuICogIDwvZmlsZT5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWRhdGVwaWNrZXItcmFuZ2UtdmFjYXRpb25zLXJlYWN0aXZlLWZvcm0vc2FtcGxlLXBvLWRhdGVwaWNrZXItcmFuZ2UtdmFjYXRpb25zLXJlYWN0aXZlLWZvcm0uY29tcG9uZW50LnRzXCI+XG4gKiAgPC9maWxlPlxuICogPC9leGFtcGxlPlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwby1kYXRlcGlja2VyLXJhbmdlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BvLWRhdGVwaWNrZXItcmFuZ2UuY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnMsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFBvRGF0ZXBpY2tlclJhbmdlQ29tcG9uZW50XG4gIGV4dGVuZHMgUG9EYXRlcGlja2VyUmFuZ2VCYXNlQ29tcG9uZW50XG4gIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlc1xue1xuICBAVmlld0NoaWxkKCdkYXRlUmFuZ2VGaWVsZCcsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiB0cnVlIH0pIGRhdGVSYW5nZUZpZWxkOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdlbmREYXRlSW5wdXQnLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogdHJ1ZSB9KSBlbmREYXRlSW5wdXQ6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3N0YXJ0RGF0ZUlucHV0JywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSkgc3RhcnREYXRlSW5wdXQ6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2ljb25DYWxlbmRhcicsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiB0cnVlIH0pIGljb25DYWxlbmRhcjogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnY2FsZW5kYXJQaWNrZXInLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgY2FsZW5kYXJQaWNrZXI6IEVsZW1lbnRSZWY7XG5cbiAgaXNDYWxlbmRhclZpc2libGUgPSBmYWxzZTtcblxuICBwcml2YXRlIGNsaWNrTGlzdGVuZXI7XG4gIHByaXZhdGUgZXZlbnRSZXNpemVMaXN0ZW5lcjtcbiAgcHJpdmF0ZSBwb0RhdGVwaWNrZXJSYW5nZUVsZW1lbnQ6IEVsZW1lbnRSZWY8YW55PjtcblxuICBnZXQgYXV0b2NvbXBsZXRlKCkge1xuICAgIHJldHVybiB0aGlzLm5vQXV0b2NvbXBsZXRlID8gJ29mZicgOiAnb24nO1xuICB9XG5cbiAgZ2V0IGVuYWJsZUNsZWFuZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY2xlYW4gJiYgKHRoaXMuc3RhcnREYXRlSW5wdXRWYWx1ZSB8fCB0aGlzLmVuZERhdGVJbnB1dFZhbHVlKSAmJiAhdGhpcy5kaXNhYmxlZCAmJiAhdGhpcy5yZWFkb25seTtcbiAgfVxuXG4gIGdldCBlbmREYXRlSW5wdXROYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdlbmQtZGF0ZSc7XG4gIH1cblxuICBnZXQgZW5kRGF0ZUlucHV0VmFsdWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5lbmREYXRlSW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZTtcbiAgfVxuXG4gIGdldCBnZXRFcnJvck1lc3NhZ2UoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5maWVsZEVycm9yTWVzc2FnZSAmJiAhdGhpcy5lcnJvck1lc3NhZ2UgJiYgdGhpcy5oYXNJbnZhbGlkQ2xhc3MoKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZmllbGRFcnJvck1lc3NhZ2U7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmVycm9yTWVzc2FnZSAhPT0gJycgJiYgdGhpcy5oYXNJbnZhbGlkQ2xhc3MoKSA/IHRoaXMuZXJyb3JNZXNzYWdlIDogJyc7XG4gIH1cblxuICBnZXQgaXNEYXRlUmFuZ2VJbnB1dFVuY29tcGxldGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmVuZERhdGVJbnB1dFZhbHVlLmxlbmd0aCA8IHBvRGF0ZXBpY2tlclJhbmdlRGF0ZUxlbmd0aERlZmF1bHQgJiZcbiAgICAgIHRoaXMuc3RhcnREYXRlSW5wdXRWYWx1ZS5sZW5ndGggPCBwb0RhdGVwaWNrZXJSYW5nZURhdGVMZW5ndGhEZWZhdWx0XG4gICAgKTtcbiAgfVxuXG4gIGdldCBpc0RpcnR5RGF0ZVJhbmdlSW5wdXQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZW5kRGF0ZUlucHV0VmFsdWUubGVuZ3RoID4gMCB8fCB0aGlzLnN0YXJ0RGF0ZUlucHV0VmFsdWUubGVuZ3RoID4gMDtcbiAgfVxuXG4gIGdldCBzdGFydERhdGVJbnB1dE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ3N0YXJ0LWRhdGUnO1xuICB9XG5cbiAgZ2V0IHN0YXJ0RGF0ZUlucHV0VmFsdWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zdGFydERhdGVJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGNvbnRyb2xQb3NpdGlvbjogUG9Db250cm9sUG9zaXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHBvTGFuZ3VhZ2VTZXJ2aWNlOiBQb0xhbmd1YWdlU2VydmljZSxcbiAgICBwb0RhdGVTZXJ2aWNlOiBQb0RhdGVTZXJ2aWNlLFxuICAgIHBvRGF0ZXBpY2tlclJhbmdlRWxlbWVudDogRWxlbWVudFJlZlxuICApIHtcbiAgICBzdXBlcihjaGFuZ2VEZXRlY3RvciwgcG9EYXRlU2VydmljZSwgcG9MYW5ndWFnZVNlcnZpY2UpO1xuICAgIHRoaXMucG9EYXRlcGlja2VyUmFuZ2VFbGVtZW50ID0gcG9EYXRlcGlja2VyUmFuZ2VFbGVtZW50O1xuICB9XG5cbiAgc3RhdGljIGdldEtleUNvZGUoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICByZXR1cm4gZXZlbnQua2V5Q29kZSB8fCBldmVudC53aGljaDtcbiAgfVxuXG4gIHN0YXRpYyBnZXRUYXJnZXRFbGVtZW50KGV2ZW50OiBhbnkpIHtcbiAgICByZXR1cm4gZXZlbnQudGFyZ2V0IHx8IGV2ZW50LnNyY0VsZW1lbnQ7XG4gIH1cblxuICBzdGF0aWMgaXNWYWxpZEtleShrZXlDb2RlOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCBpc051bWVyaWNLZXkgPSBrZXlDb2RlID49IDQ4ICYmIGtleUNvZGUgPD0gNTc7XG4gICAgY29uc3QgaXNOdW1lcmljTnVtcGFkS2V5ID0ga2V5Q29kZSA+PSA5NiAmJiBrZXlDb2RlIDw9IDEwNTtcblxuICAgIHJldHVybiBpc051bWVyaWNLZXkgfHwgaXNOdW1lcmljTnVtcGFkS2V5O1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGlmICh0aGlzLmF1dG9Gb2N1cykge1xuICAgICAgdGhpcy5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIC8vIENsYXNzZSBkZSBtw6FzY2FyYVxuICAgIHRoaXMucG9NYXNrT2JqZWN0ID0gdGhpcy5idWlsZE1hc2soXG4gICAgICByZXBsYWNlRm9ybWF0U2VwYXJhdG9yKHRoaXMuZm9ybWF0LCB0aGlzLnBvTGFuZ3VhZ2VTZXJ2aWNlLmdldERhdGVTZXBhcmF0b3IodGhpcy5sb2NhbGUpKVxuICAgICk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXMubWluRGF0ZSB8fCBjaGFuZ2VzLm1heERhdGUpIHtcbiAgICAgIHRoaXMudmFsaWRhdGVNb2RlbCh0aGlzLmRhdGVSYW5nZSk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzLmxvY2FsZSkge1xuICAgICAgaWYgKHRoaXMuZGF0ZVJhbmdlKSB7XG4gICAgICAgIHRoaXMudXBkYXRlU2NyZWVuQnlNb2RlbCh0aGlzLmRhdGVSYW5nZSk7XG4gICAgICB9XG4gICAgICB0aGlzLnBvTWFza09iamVjdCA9IHRoaXMuYnVpbGRNYXNrKFxuICAgICAgICByZXBsYWNlRm9ybWF0U2VwYXJhdG9yKHRoaXMuZm9ybWF0LCB0aGlzLnBvTGFuZ3VhZ2VTZXJ2aWNlLmdldERhdGVTZXBhcmF0b3IodGhpcy5sb2NhbGUpKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnJlbW92ZUxpc3RlbmVycygpO1xuICB9XG5cbiAgY2xlYXIoKSB7XG4gICAgdGhpcy5yZXNldERhdGVSYW5nZUlucHV0VmFsaWRhdGlvbigpO1xuICAgIHRoaXMuZGF0ZVJhbmdlID0geyBzdGFydDogJycsIGVuZDogJycgfTtcblxuICAgIHRoaXMudXBkYXRlU2NyZWVuQnlNb2RlbCh0aGlzLmRhdGVSYW5nZSk7XG4gICAgdGhpcy51cGRhdGVNb2RlbCh0aGlzLmRhdGVSYW5nZSk7XG4gIH1cblxuICBldmVudE9uQ2xpY2soJGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnBvTWFza09iamVjdC5jbGljaygkZXZlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZ1bsOnw6NvIHF1ZSBhdHJpYnVpIGZvY28gYW8gY29tcG9uZW50ZS5cbiAgICpcbiAgICogUGFyYSB1dGlsaXrDoS1sYSDDqSBuZWNlc3PDoXJpbyB0ZXIgYSBpbnN0w6JuY2lhIGRvIGNvbXBvbmVudGUgbm8gRE9NLCBwb2RlbmRvIHNlciB1dGlsaXphZG8gbyBWaWV3Q2hpbGQgZGEgc2VndWludGUgZm9ybWE6XG4gICAqXG4gICAqIGBgYFxuICAgKiBpbXBvcnQgeyBQb0RhdGVwaWNrZXJSYW5nZUNvbXBvbmVudCB9IGZyb20gJ0Bwby11aS9uZy1jb21wb25lbnRzJztcbiAgICpcbiAgICogLi4uXG4gICAqXG4gICAqIEBWaWV3Q2hpbGQoUG9EYXRlcGlja2VyUmFuZ2VDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pIGRhdGVwaWNrZXJSYW5nZTogUG9EYXRlcGlja2VyUmFuZ2VDb21wb25lbnQ7XG4gICAqXG4gICAqIGZvY3VzRGF0ZXBpY2tlclJhbmdlKCkge1xuICAgKiAgIHRoaXMuZGF0ZXBpY2tlclJhbmdlLmZvY3VzKCk7XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBmb2N1cygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuc3RhcnREYXRlSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIG9uQmx1cihldmVudDogYW55KSB7XG4gICAgdGhpcy5vblRvdWNoZWRNb2RlbD8uKCk7XG4gICAgY29uc3QgaXNTdGFydERhdGVUYXJnZXRFdmVudCA9IGV2ZW50LnRhcmdldC5uYW1lID09PSB0aGlzLnN0YXJ0RGF0ZUlucHV0TmFtZTtcblxuICAgIHRoaXMudXBkYXRlTW9kZWxCeVNjcmVlbihpc1N0YXJ0RGF0ZVRhcmdldEV2ZW50KTtcblxuICAgIHRoaXMucmVtb3ZlRm9jdXNGcm9tRGF0ZVBpY2tlclJhbmdlRmllbGQoKTtcbiAgfVxuXG4gIG9uQ2FsZW5kYXJDaGFuZ2UoeyBzdGFydCwgZW5kIH0pIHtcbiAgICBjb25zdCBpc1N0YXJ0RGF0ZVRhcmdldEV2ZW50ID0gc3RhcnQgJiYgIWVuZDtcblxuICAgIHRoaXMudXBkYXRlU2NyZWVuQnlNb2RlbCh7IHN0YXJ0OiBzdGFydCB8fCAnJywgZW5kOiBlbmQgfHwgJycgfSk7XG4gICAgdGhpcy51cGRhdGVNb2RlbEJ5U2NyZWVuKGlzU3RhcnREYXRlVGFyZ2V0RXZlbnQsIHN0YXJ0IHx8ICcnLCBlbmQgfHwgJycpO1xuXG4gICAgaWYgKHN0YXJ0ICYmIGVuZCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuaXNDYWxlbmRhclZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0sIDMwMCk7XG4gICAgfVxuICB9XG5cbiAgb25Gb2N1cyhldmVudDogYW55KSB7XG4gICAgdGhpcy5hcHBseUZvY3VzT25EYXRlUGlja2VyUmFuZ2VGaWVsZCgpO1xuICAgIHRoaXMucG9NYXNrT2JqZWN0LnJlc2V0UG9zaXRpb25zKGV2ZW50KTtcbiAgfVxuXG4gIG9uS2V5ZG93bihldmVudD86IGFueSkge1xuICAgIGlmICh0aGlzLnJlYWRvbmx5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNTZXRGb2N1c09uQmFja3NwYWNlKGV2ZW50KSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMuc2V0Rm9jdXNPbkJhY2tzcGFjZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBvTWFza09iamVjdC5rZXlkb3duKGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBvbktleXVwKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5yZWFkb25seSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGlzU3RhcnREYXRlVGFyZ2V0RXZlbnQgPSBldmVudC50YXJnZXQubmFtZSA9PT0gdGhpcy5zdGFydERhdGVJbnB1dE5hbWU7XG5cbiAgICB0aGlzLnNldEZvY3VzKGV2ZW50KTtcbiAgICB0aGlzLnBvTWFza09iamVjdC5rZXl1cChldmVudCk7XG4gICAgdGhpcy51cGRhdGVNb2RlbFdoZW5Db21wbGV0ZShpc1N0YXJ0RGF0ZVRhcmdldEV2ZW50LCB0aGlzLnN0YXJ0RGF0ZUlucHV0VmFsdWUsIHRoaXMuZW5kRGF0ZUlucHV0VmFsdWUpO1xuICB9XG5cbiAgcmVzZXREYXRlUmFuZ2VJbnB1dFZhbGlkYXRpb24oKSB7XG4gICAgdGhpcy5pc1N0YXJ0RGF0ZVJhbmdlSW5wdXRWYWxpZCA9IHRydWU7XG4gICAgdGhpcy5pc0RhdGVSYW5nZUlucHV0Rm9ybWF0VmFsaWQgPSB0cnVlO1xuICB9XG5cbiAgdG9nZ2xlQ2FsZW5kYXIoKSB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaXNDYWxlbmRhclZpc2libGUgPSAhdGhpcy5pc0NhbGVuZGFyVmlzaWJsZTtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcblxuICAgIGlmICh0aGlzLmlzQ2FsZW5kYXJWaXNpYmxlKSB7XG4gICAgICB0aGlzLnNldENhbGVuZGFyUG9zaXRpb24oKTtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUxpc3RlbmVycygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlbW92ZUxpc3RlbmVycygpO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZVNjcmVlbkJ5TW9kZWwobW9kZWw6IFBvRGF0ZXBpY2tlclJhbmdlKSB7XG4gICAgY29uc3QgZGF0ZVJhbmdlID0geyBzdGFydDogbW9kZWwuc3RhcnQgYXMgc3RyaW5nLCBlbmQ6IG1vZGVsLmVuZCBhcyBzdHJpbmcgfTtcbiAgICBjb25zdCBpc1N0YXJ0RGF0ZVZhbGlkID0gdGhpcy5wb0RhdGVTZXJ2aWNlLmlzRGF0ZVJhbmdlVmFsaWQoZGF0ZVJhbmdlLmVuZCwgZGF0ZVJhbmdlLnN0YXJ0KTtcbiAgICBjb25zdCBpc0RhdGVWYWxpZCA9IGRhdGUgPT4gIXRoaXMuZGF0ZUZvcm1hdEZhaWxlZChkYXRlKSAmJiBpc1N0YXJ0RGF0ZVZhbGlkO1xuXG4gICAgY29uc3QgZW5kRGF0ZUZvcm1hdGVkID0gaXNEYXRlVmFsaWQoZGF0ZVJhbmdlLmVuZCkgPyB0aGlzLmZvcm1hdE1vZGVsVG9TY3JlZW4oZGF0ZVJhbmdlLmVuZCkgOiAnJztcbiAgICBjb25zdCBzdGFydERhdGVGb3JtYXRlZCA9IGlzRGF0ZVZhbGlkKGRhdGVSYW5nZS5zdGFydCkgPyB0aGlzLmZvcm1hdE1vZGVsVG9TY3JlZW4oZGF0ZVJhbmdlLnN0YXJ0KSA6ICcnO1xuXG4gICAgdGhpcy5lbmREYXRlSW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9IGVuZERhdGVGb3JtYXRlZDtcbiAgICB0aGlzLnN0YXJ0RGF0ZUlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBzdGFydERhdGVGb3JtYXRlZDtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlGb2N1c09uRGF0ZVBpY2tlclJhbmdlRmllbGQoKSB7XG4gICAgdGhpcy5kYXRlUmFuZ2VGaWVsZC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ3BvLWRhdGVwaWNrZXItcmFuZ2UtZmllbGQtZm9jdXNlZCcpO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXREYXRlKGZvcm1hdDogc3RyaW5nLCBkYXk6IHN0cmluZyA9ICcnLCBtb250aDogc3RyaW5nID0gJycsIHllYXI6IHN0cmluZyA9ICcnKTogc3RyaW5nIHtcbiAgICBsZXQgZGF0ZUZvcm1hdHRlZCA9IHJlcGxhY2VGb3JtYXRTZXBhcmF0b3IoXG4gICAgICBmb3JtYXQgfHwgdGhpcy5mb3JtYXQsXG4gICAgICB0aGlzLnBvTGFuZ3VhZ2VTZXJ2aWNlLmdldERhdGVTZXBhcmF0b3IodGhpcy5sb2NhbGUpXG4gICAgKTtcblxuICAgIGRheSA9IGRheSAmJiBkYXkuaW5jbHVkZXMoJ1QnKSA/IGRheS5zbGljZSgwLCAyKSA6IGRheTtcblxuICAgIGRhdGVGb3JtYXR0ZWQgPSBkYXRlRm9ybWF0dGVkLnJlcGxhY2UoJ2RkJywgKCcwJyArIGRheSkuc2xpY2UoLTIpKTtcbiAgICBkYXRlRm9ybWF0dGVkID0gZGF0ZUZvcm1hdHRlZC5yZXBsYWNlKCdtbScsICgnMCcgKyBtb250aCkuc2xpY2UoLTIpKTtcbiAgICBkYXRlRm9ybWF0dGVkID0gZGF0ZUZvcm1hdHRlZC5yZXBsYWNlKCd5eXl5JywgU3RyaW5nKHllYXIpKTtcblxuICAgIHJldHVybiBkYXRlRm9ybWF0dGVkO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRTY3JlZW5Ub01vZGVsKHZhbHVlOiBzdHJpbmcgPSAnJyk6IHN0cmluZyB7XG4gICAgY29uc3QgW2RheSwgbW9udGgsIHllYXJdID0gdmFsdWUuc3BsaXQodGhpcy5wb0xhbmd1YWdlU2VydmljZS5nZXREYXRlU2VwYXJhdG9yKHRoaXMubG9jYWxlKSk7XG5cbiAgICByZXR1cm4gdmFsdWUgPyB0aGlzLmZvcm1hdERhdGUoJ3l5eXktbW0tZGQnLCBkYXksIG1vbnRoLCB5ZWFyKSA6ICcnO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRNb2RlbFRvU2NyZWVuKHZhbHVlOiBzdHJpbmcgPSAnJyk6IHN0cmluZyB7XG4gICAgY29uc3QgW3llYXIsIG1vbnRoLCBkYXldID0gdmFsdWUuc3BsaXQoJy0nKTtcblxuICAgIHJldHVybiB2YWx1ZSA/IHRoaXMuZm9ybWF0RGF0ZSh0aGlzLmZvcm1hdCwgZGF5LCBtb250aCwgeWVhcikgOiAnJztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGF0ZVJhbmdlRm9ybWF0VmFsaWRhdGlvbihcbiAgICBzdGFydERhdGU6IHN0cmluZyxcbiAgICBlbmREYXRlOiBzdHJpbmcsXG4gICAgaXNTdGFydERhdGVUYXJnZXRFdmVudDogYm9vbGVhblxuICApOiB7IGlzVmFsaWQ6IGJvb2xlYW47IGRhdGVSYW5nZU1vZGVsOiBQb0RhdGVwaWNrZXJSYW5nZSB9IHtcbiAgICB0aGlzLnNldERhdGVSYW5nZUlucHV0VmFsaWRhdGlvbihzdGFydERhdGUsIGVuZERhdGUpO1xuICAgIHJldHVybiB7XG4gICAgICBpc1ZhbGlkOlxuICAgICAgICB0aGlzLmlzRGF0ZVJhbmdlSW5wdXRGb3JtYXRWYWxpZCAmJiB0aGlzLmlzU3RhcnREYXRlUmFuZ2VJbnB1dFZhbGlkICYmIHRoaXMudmVyaWZ5VmFsaWREYXRlKHN0YXJ0RGF0ZSwgZW5kRGF0ZSksXG4gICAgICBkYXRlUmFuZ2VNb2RlbDogdGhpcy5nZXRWYWxpZGF0ZWRNb2RlbChzdGFydERhdGUsIGVuZERhdGUsIGlzU3RhcnREYXRlVGFyZ2V0RXZlbnQpXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VmFsaWRhdGVkTW9kZWwoc3RhcnREYXRlOiBzdHJpbmcsIGVuZERhdGU6IHN0cmluZywgaXNTdGFydERhdGVUYXJnZXRFdmVudDogYm9vbGVhbik6IFBvRGF0ZXBpY2tlclJhbmdlIHtcbiAgICBjb25zdCBkYXRlUmFuZ2VNb2RlbCA9IHsgc3RhcnQ6ICcnLCBlbmQ6ICcnIH07XG5cbiAgICBkYXRlUmFuZ2VNb2RlbC5lbmQgPVxuICAgICAgKGlzU3RhcnREYXRlVGFyZ2V0RXZlbnQgfHwgdGhpcy5pc1N0YXJ0RGF0ZVJhbmdlSW5wdXRWYWxpZCkgJiYgIXRoaXMuZGF0ZUZvcm1hdEZhaWxlZChlbmREYXRlKSA/IGVuZERhdGUgOiAnJztcblxuICAgIGRhdGVSYW5nZU1vZGVsLnN0YXJ0ID1cbiAgICAgICghaXNTdGFydERhdGVUYXJnZXRFdmVudCB8fCB0aGlzLmlzU3RhcnREYXRlUmFuZ2VJbnB1dFZhbGlkKSAmJiAhdGhpcy5kYXRlRm9ybWF0RmFpbGVkKHN0YXJ0RGF0ZSlcbiAgICAgICAgPyBzdGFydERhdGVcbiAgICAgICAgOiAnJztcblxuICAgIHJldHVybiBkYXRlUmFuZ2VNb2RlbDtcbiAgfVxuXG4gIHByaXZhdGUgaGFzQXR0ckNhbGVuZGFyKGVsZW1lbnQpIHtcbiAgICBjb25zdCBhdHRyQ2FsZW5kYXIgPSAnYXR0ci1jYWxlbmRhcic7XG5cbiAgICByZXR1cm4gZWxlbWVudD8uaGFzQXR0cmlidXRlKGF0dHJDYWxlbmRhcikgfHwgZWxlbWVudD8ucGFyZW50RWxlbWVudD8uaGFzQXR0cmlidXRlKGF0dHJDYWxlbmRhcik7XG4gIH1cblxuICBwcml2YXRlIGhhc0ludmFsaWRDbGFzcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5wb0RhdGVwaWNrZXJSYW5nZUVsZW1lbnQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ25nLWludmFsaWQnKSAmJlxuICAgICAgdGhpcy5wb0RhdGVwaWNrZXJSYW5nZUVsZW1lbnQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ25nLWRpcnR5JylcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplTGlzdGVuZXJzKCkge1xuICAgIHRoaXMuY2xpY2tMaXN0ZW5lciA9IHRoaXMucmVuZGVyZXIubGlzdGVuKCdkb2N1bWVudCcsICdjbGljaycsIChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgdGhpcy53YXNDbGlja2VkT25QaWNrZXIoZXZlbnQpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5ldmVudFJlc2l6ZUxpc3RlbmVyID0gdGhpcy5yZW5kZXJlci5saXN0ZW4oJ3dpbmRvdycsICdyZXNpemUnLCAoKSA9PiB7XG4gICAgICB0aGlzLmlzQ2FsZW5kYXJWaXNpYmxlID0gZmFsc2U7XG4gICAgfSk7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5vblNjcm9sbCwgdHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIGlzRXF1YWxCZWZvcmVWYWx1ZShzdGFydERhdGU6IHN0cmluZywgZW5kRGF0ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNEYXRlUmFuZ2VJbnB1dEZvcm1hdFZhbGlkICYmIGVuZERhdGUgPT09IHRoaXMuZGF0ZVJhbmdlLmVuZCAmJiBzdGFydERhdGUgPT09IHRoaXMuZGF0ZVJhbmdlLnN0YXJ0O1xuICB9XG5cbiAgcHJpdmF0ZSBpc1NldEZvY3VzT25CYWNrc3BhY2UoZXZlbnQ6IGFueSkge1xuICAgIHJldHVybiAoXG4gICAgICBldmVudC50YXJnZXQubmFtZSA9PT0gdGhpcy5lbmREYXRlSW5wdXROYW1lICYmXG4gICAgICB0aGlzLmVuZERhdGVJbnB1dC5uYXRpdmVFbGVtZW50LnNlbGVjdGlvblN0YXJ0ID09PSAwICYmXG4gICAgICB0aGlzLmVuZERhdGVJbnB1dC5uYXRpdmVFbGVtZW50LnNlbGVjdGlvbkVuZCA9PT0gMCAmJlxuICAgICAgZXZlbnQua2V5Q29kZSA9PT0gYmFja3NwYWNlS2V5XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgb25TY3JvbGwgPSAoKTogdm9pZCA9PiB7XG4gICAgaWYgKHRoaXMuaXNDYWxlbmRhclZpc2libGUpIHtcbiAgICAgIHRoaXMuY29udHJvbFBvc2l0aW9uLmFkanVzdFBvc2l0aW9uKHBvQ2FsZW5kYXJQb3NpdGlvbkRlZmF1bHQpO1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIHJlbW92ZUZvY3VzRnJvbURhdGVQaWNrZXJSYW5nZUZpZWxkKCkge1xuICAgIHRoaXMuZGF0ZVJhbmdlRmllbGQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdwby1kYXRlcGlja2VyLXJhbmdlLWZpZWxkLWZvY3VzZWQnKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0RGF0ZVJhbmdlSW5wdXRWYWxpZGF0aW9uKHN0YXJ0RGF0ZTogc3RyaW5nLCBlbmREYXRlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmlzU3RhcnREYXRlUmFuZ2VJbnB1dFZhbGlkID0gdGhpcy5wb0RhdGVTZXJ2aWNlLmlzRGF0ZVJhbmdlVmFsaWQoZW5kRGF0ZSwgc3RhcnREYXRlKTtcblxuICAgIHRoaXMuaXNEYXRlUmFuZ2VJbnB1dEZvcm1hdFZhbGlkID0gIXRoaXMuZGF0ZUZvcm1hdEZhaWxlZChzdGFydERhdGUpICYmICF0aGlzLmRhdGVGb3JtYXRGYWlsZWQoZW5kRGF0ZSk7XG4gIH1cblxuICBwcml2YXRlIHNldEZvY3VzKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBpbnB1dEVsZW1lbnQgPSBQb0RhdGVwaWNrZXJSYW5nZUNvbXBvbmVudC5nZXRUYXJnZXRFbGVtZW50KGV2ZW50KTtcbiAgICBjb25zdCBrZXlDb2RlID0gUG9EYXRlcGlja2VyUmFuZ2VDb21wb25lbnQuZ2V0S2V5Q29kZShldmVudCk7XG4gICAgY29uc3QgaW5wdXROYW1lID0gaW5wdXRFbGVtZW50WyduYW1lJ107XG5cbiAgICB0aGlzLnNldEZvY3VzT25BcnJvd0xlZnQoa2V5Q29kZSwgaW5wdXROYW1lKTtcbiAgICB0aGlzLnNldEZvY3VzT25BcnJvd1JpZ2h0KGtleUNvZGUsIGlucHV0TmFtZSwgaW5wdXRFbGVtZW50KTtcbiAgICB0aGlzLnNldEZvY3VzT25TdGFydERhdGVDb21wbGV0ZWQoa2V5Q29kZSwgaW5wdXROYW1lKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Rm9jdXNBbmRQb3NpdGlvbihwb3NpdGlvbjogbnVtYmVyLCBpbnB1dEVsZW1lbnQ6IEVsZW1lbnRSZWYsIHNlbGVjdGlvblJhbmdlOiBudW1iZXIpIHtcbiAgICB0aGlzLmZvY3VzT25FbGVtZW50KGlucHV0RWxlbWVudCk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LnNldFNlbGVjdGlvblJhbmdlKHNlbGVjdGlvblJhbmdlLCBzZWxlY3Rpb25SYW5nZSk7XG4gICAgICB0aGlzLnBvTWFza09iamVjdC5pbml0aWFsUG9zaXRpb24gPSBwb3NpdGlvbjtcbiAgICAgIHRoaXMucG9NYXNrT2JqZWN0LmZpbmFsUG9zaXRpb24gPSBwb3NpdGlvbjtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZm9jdXNPbkVsZW1lbnQoaW5wdXRFbGVtZW50OiBFbGVtZW50UmVmKSB7XG4gICAgaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlTGlzdGVuZXJzKCkge1xuICAgIGlmICh0aGlzLmNsaWNrTGlzdGVuZXIpIHtcbiAgICAgIHRoaXMuY2xpY2tMaXN0ZW5lcigpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmV2ZW50UmVzaXplTGlzdGVuZXIpIHtcbiAgICAgIHRoaXMuZXZlbnRSZXNpemVMaXN0ZW5lcigpO1xuICAgIH1cblxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLm9uU2Nyb2xsLCB0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Q2FsZW5kYXJQb3NpdGlvbigpIHtcbiAgICB0aGlzLmNvbnRyb2xQb3NpdGlvbi5zZXRFbGVtZW50cyhcbiAgICAgIHRoaXMuY2FsZW5kYXJQaWNrZXIubmF0aXZlRWxlbWVudCxcbiAgICAgIHBvQ2FsZW5kYXJDb250ZW50T2Zmc2V0LFxuICAgICAgdGhpcy5kYXRlUmFuZ2VGaWVsZCxcbiAgICAgIFsnYm90dG9tLWxlZnQnLCAnYm90dG9tLXJpZ2h0JywgJ3RvcC1sZWZ0JywgJ3RvcC1yaWdodCddLFxuICAgICAgZmFsc2UsXG4gICAgICB0cnVlXG4gICAgKTtcblxuICAgIHRoaXMuY29udHJvbFBvc2l0aW9uLmFkanVzdFBvc2l0aW9uKHBvQ2FsZW5kYXJQb3NpdGlvbkRlZmF1bHQpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRGb2N1c09uQXJyb3dMZWZ0KGtleUNvZGU6IG51bWJlciwgaW5wdXROYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBpc0N1cnNvckF0U3RhcnRPZklucHV0ID0gdGhpcy5lbmREYXRlSW5wdXQubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25TdGFydCA9PT0gMDtcblxuICAgIGlmIChpbnB1dE5hbWUgPT09IHRoaXMuZW5kRGF0ZUlucHV0TmFtZSAmJiBpc0N1cnNvckF0U3RhcnRPZklucHV0ICYmIGtleUNvZGUgPT09IGFycm93TGVmdEtleSkge1xuICAgICAgY29uc3QgaW5wdXRMZW5ndGggPSB0aGlzLnN0YXJ0RGF0ZUlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUubGVuZ3RoO1xuICAgICAgdGhpcy5zZXRGb2N1c0FuZFBvc2l0aW9uKGlucHV0TGVuZ3RoLCB0aGlzLnN0YXJ0RGF0ZUlucHV0LCBpbnB1dExlbmd0aCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRGb2N1c09uQXJyb3dSaWdodChrZXlDb2RlOiBudW1iZXIsIGlucHV0TmFtZTogc3RyaW5nLCBpbnB1dEVsZW1lbnQ6IGFueSkge1xuICAgIGNvbnN0IGlzQ3Vyc29yQXRFbmRPZklucHV0ID0gdGhpcy5zdGFydERhdGVJbnB1dC5uYXRpdmVFbGVtZW50LnNlbGVjdGlvblN0YXJ0ID09PSBpbnB1dEVsZW1lbnQudmFsdWUubGVuZ3RoO1xuXG4gICAgaWYgKGlucHV0TmFtZSA9PT0gdGhpcy5zdGFydERhdGVJbnB1dE5hbWUgJiYgaXNDdXJzb3JBdEVuZE9mSW5wdXQgJiYga2V5Q29kZSA9PT0gYXJyb3dSaWdodEtleSkge1xuICAgICAgdGhpcy5zZXRGb2N1c0FuZFBvc2l0aW9uKDAsIHRoaXMuZW5kRGF0ZUlucHV0LCAwKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldEZvY3VzT25CYWNrc3BhY2UoKSB7XG4gICAgY29uc3QgaW5wdXRMZW5ndGggPSB0aGlzLnN0YXJ0RGF0ZUlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUubGVuZ3RoO1xuXG4gICAgdGhpcy5zdGFydERhdGVJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGhpcy5zdGFydERhdGVJbnB1dFZhbHVlLnNsaWNlKDAsIC0xKTtcbiAgICB0aGlzLnNldEZvY3VzQW5kUG9zaXRpb24oaW5wdXRMZW5ndGgsIHRoaXMuc3RhcnREYXRlSW5wdXQsIGlucHV0TGVuZ3RoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Rm9jdXNPblN0YXJ0RGF0ZUNvbXBsZXRlZChrZXlDb2RlOiBudW1iZXIsIGlucHV0TmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgaXNMYXN0S2V5UHJlc3NlZCA9IHRoaXMuc3RhcnREYXRlSW5wdXQubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25TdGFydCA9PT0gcG9EYXRlcGlja2VyUmFuZ2VEYXRlTGVuZ3RoRGVmYXVsdDtcbiAgICBjb25zdCBpc05ld0RhdGVDb21wbGV0ZWQgPVxuICAgICAgdGhpcy5zdGFydERhdGVJbnB1dFZhbHVlLmxlbmd0aCA9PT0gcG9EYXRlcGlja2VyUmFuZ2VEYXRlTGVuZ3RoRGVmYXVsdCAmJiBpc0xhc3RLZXlQcmVzc2VkO1xuICAgIGNvbnN0IGlzVmFsaWRLZXkgPSBQb0RhdGVwaWNrZXJSYW5nZUNvbXBvbmVudC5pc1ZhbGlkS2V5KGtleUNvZGUpO1xuXG4gICAgaWYgKGlucHV0TmFtZSA9PT0gdGhpcy5zdGFydERhdGVJbnB1dE5hbWUgJiYgaXNOZXdEYXRlQ29tcGxldGVkICYmIGlzVmFsaWRLZXkpIHtcbiAgICAgIHRoaXMuc2V0Rm9jdXNBbmRQb3NpdGlvbigwLCB0aGlzLmVuZERhdGVJbnB1dCwgMCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVNb2RlbFdoZW5Db21wbGV0ZShpc1N0YXJ0RGF0ZVRhcmdldEV2ZW50OiBib29sZWFuLCBzdGFydERhdGUsIGVuZERhdGUpIHtcbiAgICBjb25zdCBlbmREYXRlRm9ybWF0dGVkID0gdGhpcy5mb3JtYXRTY3JlZW5Ub01vZGVsKGVuZERhdGUpO1xuICAgIGNvbnN0IHN0YXJ0RGF0ZUZvcm1hdHRlZCA9IHRoaXMuZm9ybWF0U2NyZWVuVG9Nb2RlbChzdGFydERhdGUpO1xuICAgIGNvbnN0IGRhdGVGb3JtYXRWYWxpZGF0aW9uID0gdGhpcy5nZXREYXRlUmFuZ2VGb3JtYXRWYWxpZGF0aW9uKFxuICAgICAgc3RhcnREYXRlRm9ybWF0dGVkLFxuICAgICAgZW5kRGF0ZUZvcm1hdHRlZCxcbiAgICAgIGlzU3RhcnREYXRlVGFyZ2V0RXZlbnRcbiAgICApO1xuXG4gICAgaWYgKHRoaXMuaXNFcXVhbEJlZm9yZVZhbHVlKHN0YXJ0RGF0ZUZvcm1hdHRlZCwgZW5kRGF0ZUZvcm1hdHRlZCkpIHtcbiAgICAgIHRoaXMucmVzZXREYXRlUmFuZ2VJbnB1dFZhbGlkYXRpb24oKTtcbiAgICAgIHRoaXMudmFsaWRhdGVNb2RlbCh0aGlzLmRhdGVSYW5nZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGRhdGVGb3JtYXRWYWxpZGF0aW9uLmlzVmFsaWQpIHtcbiAgICAgIHRoaXMuZGF0ZVJhbmdlID0geyBzdGFydDogc3RhcnREYXRlRm9ybWF0dGVkLCBlbmQ6IGVuZERhdGVGb3JtYXR0ZWQgfTtcbiAgICAgIHRoaXMudXBkYXRlTW9kZWwodGhpcy5kYXRlUmFuZ2UpO1xuICAgICAgdGhpcy5vbkNoYW5nZS5lbWl0KHsgLi4udGhpcy5kYXRlUmFuZ2UgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVNb2RlbEJ5U2NyZWVuKGlzU3RhcnREYXRlVGFyZ2V0RXZlbnQ6IGJvb2xlYW4sIHN0YXJ0RGF0ZT8sIGVuZERhdGU/KSB7XG4gICAgY29uc3QgZW5kRGF0ZUZvcm1hdHRlZCA9IGVuZERhdGUgfHwgdGhpcy5mb3JtYXRTY3JlZW5Ub01vZGVsKHRoaXMuZW5kRGF0ZUlucHV0VmFsdWUpO1xuICAgIGNvbnN0IHN0YXJ0RGF0ZUZvcm1hdHRlZCA9IHN0YXJ0RGF0ZSB8fCB0aGlzLmZvcm1hdFNjcmVlblRvTW9kZWwodGhpcy5zdGFydERhdGVJbnB1dFZhbHVlKTtcbiAgICBpZiAodGhpcy5pc0RhdGVSYW5nZUlucHV0VW5jb21wbGV0ZWQgJiYgdGhpcy5pc0RpcnR5RGF0ZVJhbmdlSW5wdXQpIHtcbiAgICAgIHRoaXMudXBkYXRlTW9kZWwodGhpcy5kYXRlUmFuZ2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzRXF1YWxCZWZvcmVWYWx1ZShzdGFydERhdGVGb3JtYXR0ZWQsIGVuZERhdGVGb3JtYXR0ZWQpKSB7XG4gICAgICB0aGlzLnJlc2V0RGF0ZVJhbmdlSW5wdXRWYWxpZGF0aW9uKCk7XG4gICAgICB0aGlzLnZhbGlkYXRlTW9kZWwodGhpcy5kYXRlUmFuZ2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGVGb3JtYXRWYWxpZGF0aW9uID0gdGhpcy5nZXREYXRlUmFuZ2VGb3JtYXRWYWxpZGF0aW9uKFxuICAgICAgc3RhcnREYXRlRm9ybWF0dGVkLFxuICAgICAgZW5kRGF0ZUZvcm1hdHRlZCxcbiAgICAgIGlzU3RhcnREYXRlVGFyZ2V0RXZlbnRcbiAgICApO1xuXG4gICAgaWYgKGRhdGVGb3JtYXRWYWxpZGF0aW9uLmlzVmFsaWQpIHtcbiAgICAgIHRoaXMuZGF0ZVJhbmdlID0geyBzdGFydDogc3RhcnREYXRlRm9ybWF0dGVkLCBlbmQ6IGVuZERhdGVGb3JtYXR0ZWQgfTtcbiAgICAgIHRoaXMudXBkYXRlTW9kZWwodGhpcy5kYXRlUmFuZ2UpO1xuICAgICAgdGhpcy5vbkNoYW5nZS5lbWl0KHsgLi4udGhpcy5kYXRlUmFuZ2UgfSk7XG4gICAgfVxuXG4gICAgaWYgKCFkYXRlRm9ybWF0VmFsaWRhdGlvbi5pc1ZhbGlkICYmIHRoaXMudmVyaWZ5Rm9ybWF0dGVkRGF0ZXMoc3RhcnREYXRlRm9ybWF0dGVkLCBlbmREYXRlRm9ybWF0dGVkKSkge1xuICAgICAgdGhpcy5kYXRlUmFuZ2UgPSB7IC4uLmRhdGVGb3JtYXRWYWxpZGF0aW9uLmRhdGVSYW5nZU1vZGVsIH07XG4gICAgICB0aGlzLnVwZGF0ZU1vZGVsKGRhdGVGb3JtYXRWYWxpZGF0aW9uLmRhdGVSYW5nZU1vZGVsKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHZlcmlmeUZvcm1hdHRlZERhdGVzKHN0YXJ0OiBzdHJpbmcsIGVuZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhc3RhcnQgfHwgISFlbmQ7XG4gIH1cblxuICBwcml2YXRlIHdhc0NsaWNrZWRPblBpY2tlcihldmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc0NhbGVuZGFyVmlzaWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgICF0aGlzLmNhbGVuZGFyUGlja2VyLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJlxuICAgICAgIXRoaXMuaWNvbkNhbGVuZGFyLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJlxuICAgICAgIXRoaXMuaGFzQXR0ckNhbGVuZGFyKGV2ZW50LnRhcmdldClcbiAgICApIHtcbiAgICAgIHRoaXMuaXNDYWxlbmRhclZpc2libGUgPSBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxufVxuIiwiPHBvLWZpZWxkLWNvbnRhaW5lclxuICBbY2xhc3MucG8tZGF0ZS1waWNrZXItY29udGFpbmVyLWRpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgW3AtZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICBbcC1sYWJlbF09XCJsYWJlbFwiXG4gIFtwLW9wdGlvbmFsXT1cIm9wdGlvbmFsXCJcbiAgW3AtcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICBbcC1zaG93LXJlcXVpcmVkXT1cInNob3dSZXF1aXJlZFwiXG4+XG4gIDxkaXYgY2xhc3M9XCJwby1maWVsZC1jb250YWluZXItY29udGVudFwiPlxuICAgIDxkaXYgY2xhc3M9XCJwby1maWVsZC1jb250YWluZXItaW5wdXRcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgI2RhdGVSYW5nZUZpZWxkXG4gICAgICAgIGNsYXNzPVwicG8tZGF0ZXBpY2tlci1yYW5nZS1maWVsZCBwby1pbnB1dFwiXG4gICAgICAgIFtjbGFzcy5wby1kYXRlcGlja2VyLXJhbmdlLWZpZWxkLWRpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicG8tZGF0ZXBpY2tlci1yYW5nZS1zdGFydC1kYXRlXCI+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAjc3RhcnREYXRlSW5wdXRcbiAgICAgICAgICAgIGNsYXNzPVwicG8tZGF0ZXBpY2tlci1yYW5nZS1pbnB1dFwiXG4gICAgICAgICAgICBtYXhsZW5ndGg9XCIxMFwiXG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImxhYmVsXCJcbiAgICAgICAgICAgIFthdXRvY29tcGxldGVdPVwiYXV0b2NvbXBsZXRlXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICBbbmFtZV09XCJzdGFydERhdGVJbnB1dE5hbWVcIlxuICAgICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgICAgICAgIChibHVyKT1cIm9uQmx1cigkZXZlbnQpXCJcbiAgICAgICAgICAgIChmb2N1cyk9XCJvbkZvY3VzKCRldmVudClcIlxuICAgICAgICAgICAgKGtleWRvd24pPVwib25LZXlkb3duKCRldmVudClcIlxuICAgICAgICAgICAgKGtleXVwKT1cIm9uS2V5dXAoJGV2ZW50KVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiZXZlbnRPbkNsaWNrKCRldmVudClcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwby1kYXRlcGlja2VyLXJhbmdlLXNlcGFyYXRvclwiPi08L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwicG8tZGF0ZXBpY2tlci1yYW5nZS1lbmQtZGF0ZVwiPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgI2VuZERhdGVJbnB1dFxuICAgICAgICAgICAgY2xhc3M9XCJwby1kYXRlcGlja2VyLXJhbmdlLWlucHV0XCJcbiAgICAgICAgICAgIG1heGxlbmd0aD1cIjEwXCJcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIFthdXRvY29tcGxldGVdPVwiYXV0b2NvbXBsZXRlXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICBbbmFtZV09XCJlbmREYXRlSW5wdXROYW1lXCJcbiAgICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgICAgICAoYmx1cik9XCJvbkJsdXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAoZm9jdXMpPVwib25Gb2N1cygkZXZlbnQpXCJcbiAgICAgICAgICAgIChrZXlkb3duKT1cIm9uS2V5ZG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgIChrZXl1cCk9XCJvbktleXVwKCRldmVudClcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImV2ZW50T25DbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwicG8tZGF0ZXBpY2tlci1yYW5nZS1pY29uXCI+XG4gICAgICAgICAgPHBvLWNsZWFuIGNsYXNzPVwicG8taWNvbi1pbnB1dFwiICpuZ0lmPVwiZW5hYmxlQ2xlYW5lclwiIChwLWNoYW5nZS1ldmVudCk9XCJjbGVhcigpXCI+PC9wby1jbGVhbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBvLWRhdGVwaWNrZXItcmFuZ2UtaWNvblwiPlxuICAgICAgICAgIDxwby1pY29uXG4gICAgICAgICAgICAjaWNvbkNhbGVuZGFyXG4gICAgICAgICAgICBbcC1pY29uXT1cIiFkaXNhYmxlZCB8fCAhcmVhZG9ubHkgPyAnSUNPTl9DQUxFTkRBUiBwby1jbGlja2FibGUnIDogJ0lDT05fQ0FMRU5EQVInXCJcbiAgICAgICAgICAgIGNsYXNzPVwicG8tZmllbGQtaWNvbiB7eyBkaXNhYmxlZCA/ICdwby1pY29uLWlucHV0LWRpc2FibGVkJyA6ICdwby1pY29uLWlucHV0JyB9fVwiXG4gICAgICAgICAgICBbY2xhc3MucG8tZmllbGQtaWNvbi1kaXNhYmxlZF09XCJkaXNhYmxlZCB8fCByZWFkb25seVwiXG4gICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQ2FsZW5kYXIoKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvcG8taWNvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPHBvLWZpZWxkLWNvbnRhaW5lci1ib3R0b21cbiAgICBbcC1oZWxwXT1cImhlbHBcIlxuICAgIFtwLWRpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICBbcC1lcnJvci1wYXR0ZXJuXT1cImdldEVycm9yTWVzc2FnZVwiXG4gICAgW3AtZXJyb3ItbGltaXRdPVwiZXJyb3JMaW1pdFwiXG4gID48L3BvLWZpZWxkLWNvbnRhaW5lci1ib3R0b20+XG48L3BvLWZpZWxkLWNvbnRhaW5lcj5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzQ2FsZW5kYXJWaXNpYmxlXCI+XG4gIDxkaXYgI2NhbGVuZGFyUGlja2VyIGNsYXNzPVwicG8tY2FsZW5kYXItcmFuZ2UtcGlja2VyXCI+XG4gICAgPHBvLWNhbGVuZGFyXG4gICAgICBwLW1vZGU9XCJyYW5nZVwiXG4gICAgICBbbmdNb2RlbF09XCJkYXRlUmFuZ2VcIlxuICAgICAgW3AtbWF4LWRhdGVdPVwibWF4RGF0ZVwiXG4gICAgICBbcC1taW4tZGF0ZV09XCJtaW5EYXRlXCJcbiAgICAgIFtwLWxvY2FsZV09XCJsb2NhbGVcIlxuICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25DYWxlbmRhckNoYW5nZSgkZXZlbnQpXCJcbiAgICA+PC9wby1jYWxlbmRhcj5cbiAgPC9kaXY+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==