@ieeesa-npm/presentation 0.25.6 → 0.25.8

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 (34) hide show
  1. package/esm2022/lib/assets/constants.json +1 -10
  2. package/esm2022/lib/components/color-picker/color-picker.component.mjs +2 -2
  3. package/esm2022/lib/components/dynamic-form/dynamic-form.component.mjs +4 -24
  4. package/esm2022/lib/components/file-upload/file-upload.component.mjs +9 -124
  5. package/esm2022/lib/components/form-error/form-error.component.mjs +3 -3
  6. package/esm2022/lib/components/tabs/tabs.component.mjs +3 -3
  7. package/esm2022/lib/directives/dynamic-form-field/dynamic-form-field.directive.mjs +2 -29
  8. package/esm2022/lib/models/field-config.model.mjs +1 -1
  9. package/esm2022/lib/models/tab.model.mjs +1 -1
  10. package/esm2022/lib/services/file-upload.service.mjs +29 -93
  11. package/esm2022/public-api.mjs +1 -7
  12. package/fesm2022/ieeesa-npm-presentation.mjs +54 -294
  13. package/fesm2022/ieeesa-npm-presentation.mjs.map +1 -1
  14. package/lib/components/chips/chips.component.d.ts +0 -9
  15. package/lib/components/dynamic-form/dynamic-form.component.d.ts +2 -9
  16. package/lib/components/file-upload/file-upload.component.d.ts +5 -56
  17. package/lib/directives/dynamic-form-field/dynamic-form-field.directive.d.ts +2 -8
  18. package/lib/directives/file-upload/file-upload.directive.d.ts +1 -1
  19. package/lib/models/field-config.model.d.ts +0 -9
  20. package/lib/models/tab.model.d.ts +0 -1
  21. package/lib/services/file-upload.service.d.ts +11 -45
  22. package/package.json +1 -1
  23. package/public-api.d.ts +0 -6
  24. package/src/lib/assets/constants.json +1 -10
  25. package/esm2022/lib/models/delete-file.model.mjs +0 -2
  26. package/esm2022/lib/models/file-attachment.model.mjs +0 -2
  27. package/esm2022/lib/models/file-upload-payload-model.mjs +0 -2
  28. package/esm2022/lib/models/file-upload-response.model.mjs +0 -2
  29. package/esm2022/lib/models/view-files-format.model.mjs +0 -7
  30. package/lib/models/delete-file.model.d.ts +0 -10
  31. package/lib/models/file-attachment.model.d.ts +0 -9
  32. package/lib/models/file-upload-payload-model.d.ts +0 -3
  33. package/lib/models/file-upload-response.model.d.ts +0 -10
  34. package/lib/models/view-files-format.model.d.ts +0 -4
@@ -69,24 +69,6 @@ export class DynamicFormFieldDirective {
69
69
  get group() {
70
70
  return this._group;
71
71
  }
72
- get filesUploadedSuccessfullyCount() {
73
- return this._filesUploadedSuccessfullyCount;
74
- }
75
- set filesUploadedSuccessfullyCount(value) {
76
- if (this.component?.instance) {
77
- this.component.instance.filesUploadedSuccessfullyCount = value;
78
- }
79
- this._filesUploadedSuccessfullyCount = value;
80
- }
81
- get filesNamesUploadFailed() {
82
- return this._filesNamesUploadFailed;
83
- }
84
- set filesNamesUploadFailed(value) {
85
- if (this.component?.instance) {
86
- this.component.instance.filesNamesUploadFailed = value;
87
- }
88
- this._filesNamesUploadFailed = value;
89
- }
90
72
  /**
91
73
  * Sets the submit response of form submit event
92
74
  * @memberof DynamicFormFieldDirective
@@ -119,7 +101,6 @@ export class DynamicFormFieldDirective {
119
101
  constructor(container) {
120
102
  this.container = container;
121
103
  this.destroy$ = new Subject();
122
- this._filesUploadedSuccessfullyCount = 0;
123
104
  this.formSearchApply = new EventEmitter();
124
105
  this.formDropdownSelected = new EventEmitter();
125
106
  this.formDateSelected = new EventEmitter();
@@ -167,10 +148,6 @@ export class DynamicFormFieldDirective {
167
148
  this.component.instance.group = this.group;
168
149
  this.component.instance.submitResponse = this.submitResponse;
169
150
  this.component.instance.searchResponse = this.searchResponse;
170
- this.component.instance.filesUploadedSuccessfullyCount =
171
- this.filesUploadedSuccessfullyCount;
172
- this.component.instance.filesNamesUploadFailed =
173
- this.filesNamesUploadFailed;
174
151
  if (this.config.type === FormControlType.SEARCH) {
175
152
  this.component.instance.searchValue
176
153
  ?.pipe(takeUntil(this.destroy$))
@@ -336,7 +313,7 @@ export class DynamicFormFieldDirective {
336
313
  this.destroy$.unsubscribe();
337
314
  }
338
315
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DynamicFormFieldDirective, deps: [{ token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive }); }
339
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: DynamicFormFieldDirective, isStandalone: true, selector: "[ieeesaDynamicFormField]", inputs: { config: "config", group: "group", filesUploadedSuccessfullyCount: "filesUploadedSuccessfullyCount", filesNamesUploadFailed: "filesNamesUploadFailed", submitResponse: "submitResponse", searchResponse: "searchResponse" }, outputs: { formSearchApply: "formSearchApply", formDropdownSelected: "formDropdownSelected", formDateSelected: "formDateSelected", formTimeSelected: "formTimeSelected", formSelectedDateRange: "formSelectedDateRange", formSelectSearch: "formSelectSearch", formAutoCompleteSearch: "formAutoCompleteSearch", autoCompleteClearSearchValue: "autoCompleteClearSearchValue", autoCompleteOptionSelected: "autoCompleteOptionSelected", formCheckboxSelection: "formCheckboxSelection", formInputValue: "formInputValue", addFormGroup: "addFormGroup", supportTextLinkClick: "supportTextLinkClick", formSlideToggleChange: "formSlideToggleChange", dropdownOpenedChange: "dropdownOpenedChange", formColorPickerChange: "formColorPickerChange", formFileUpload: "formFileUpload", formRadioOptionSelected: "formRadioOptionSelected", ctaButtonClick: "ctaButtonClick", formMultiSelectAutoCompleteSearch: "formMultiSelectAutoCompleteSearch", multiSelectAutoCompleteClearSearchValue: "multiSelectAutoCompleteClearSearchValue", multiSelectAutoCompleteOptionsSelected: "multiSelectAutoCompleteOptionsSelected", formRichTextEditorContentChange: "formRichTextEditorContentChange" }, ngImport: i0 }); }
316
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: DynamicFormFieldDirective, isStandalone: true, selector: "[ieeesaDynamicFormField]", inputs: { config: "config", group: "group", submitResponse: "submitResponse", searchResponse: "searchResponse" }, outputs: { formSearchApply: "formSearchApply", formDropdownSelected: "formDropdownSelected", formDateSelected: "formDateSelected", formTimeSelected: "formTimeSelected", formSelectedDateRange: "formSelectedDateRange", formSelectSearch: "formSelectSearch", formAutoCompleteSearch: "formAutoCompleteSearch", autoCompleteClearSearchValue: "autoCompleteClearSearchValue", autoCompleteOptionSelected: "autoCompleteOptionSelected", formCheckboxSelection: "formCheckboxSelection", formInputValue: "formInputValue", addFormGroup: "addFormGroup", supportTextLinkClick: "supportTextLinkClick", formSlideToggleChange: "formSlideToggleChange", dropdownOpenedChange: "dropdownOpenedChange", formColorPickerChange: "formColorPickerChange", formFileUpload: "formFileUpload", formRadioOptionSelected: "formRadioOptionSelected", ctaButtonClick: "ctaButtonClick", formMultiSelectAutoCompleteSearch: "formMultiSelectAutoCompleteSearch", multiSelectAutoCompleteClearSearchValue: "multiSelectAutoCompleteClearSearchValue", multiSelectAutoCompleteOptionsSelected: "multiSelectAutoCompleteOptionsSelected", formRichTextEditorContentChange: "formRichTextEditorContentChange" }, ngImport: i0 }); }
340
317
  }
341
318
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DynamicFormFieldDirective, decorators: [{
342
319
  type: Directive,
@@ -348,10 +325,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
348
325
  type: Input
349
326
  }], group: [{
350
327
  type: Input
351
- }], filesUploadedSuccessfullyCount: [{
352
- type: Input
353
- }], filesNamesUploadFailed: [{
354
- type: Input
355
328
  }], submitResponse: [{
356
329
  type: Input
357
330
  }], searchResponse: [{
@@ -403,4 +376,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
403
376
  }], formRichTextEditorContentChange: [{
404
377
  type: Output
405
378
  }] } });
406
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1mb3JtLWZpZWxkLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ByZXNlbnRhdGlvbi9zcmMvbGliL2RpcmVjdGl2ZXMvZHluYW1pYy1mb3JtLWZpZWxkL2R5bmFtaWMtZm9ybS1maWVsZC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sR0FHUCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUcxQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDeEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDN0YsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDakYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDekYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDbkYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBRXhFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBSXpGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBRTVGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBRXpGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBRzVGLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLGdGQUFnRixDQUFDO0FBRWxJLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDhEQUE4RCxDQUFDOztBQUV2RyxNQUFNLFVBQVUsR0FBd0M7SUFDdEQsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLEVBQUUsY0FBYztJQUN2QyxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsRUFBRSxpQkFBaUI7SUFDOUMsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLEVBQUUsZUFBZTtJQUN6QyxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsRUFBRSxlQUFlO0lBQ3pDLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLG1CQUFtQjtJQUMzQyxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsRUFBRSxpQkFBaUI7SUFDN0MsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLEVBQUUsY0FBYztJQUN2QyxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsRUFBRSxxQkFBcUI7SUFDdEQsQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLEVBQUUscUJBQXFCO0lBQ3ZELENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxFQUFFLG1CQUFtQjtJQUNsRCxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsRUFBRSxvQkFBb0I7SUFDcEQsQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLEVBQUUsb0JBQW9CO0lBQ3BELENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxFQUFFLG1CQUFtQjtJQUNsRCxDQUFDLGVBQWUsQ0FBQywwQkFBMEIsQ0FBQyxFQUMxQyxnQ0FBZ0M7SUFDbEMsQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsRUFBRSx1QkFBdUI7Q0FDNUQsQ0FBQztBQUVGOzs7Ozs7O0dBT0c7QUFLSCxNQUFNLE9BQU8seUJBQXlCO0lBSXBDOzs7T0FHRztJQUNILElBQ0ksTUFBTSxDQUFDLEtBQWtCO1FBQzNCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNsQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDdEI7SUFDSCxDQUFDO0lBQ0QsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUNJLEtBQUssQ0FBQyxLQUFnQjtRQUN4QixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFO1lBQzVCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7U0FDdkM7UUFDRCxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUN0QixDQUFDO0lBQ0QsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFHRCxJQUFhLDhCQUE4QjtRQUN6QyxPQUFPLElBQUksQ0FBQywrQkFBK0IsQ0FBQztJQUM5QyxDQUFDO0lBQ0QsSUFBSSw4QkFBOEIsQ0FBQyxLQUFhO1FBQzlDLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUU7WUFDNUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsOEJBQThCLEdBQUcsS0FBSyxDQUFDO1NBQ2hFO1FBQ0QsSUFBSSxDQUFDLCtCQUErQixHQUFHLEtBQUssQ0FBQztJQUMvQyxDQUFDO0lBR0QsSUFBYSxzQkFBc0I7UUFDakMsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUM7SUFDdEMsQ0FBQztJQUNELElBQUksc0JBQXNCLENBQUMsS0FBZTtRQUN4QyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFO1lBQzVCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLHNCQUFzQixHQUFHLEtBQUssQ0FBQztTQUN4RDtRQUNELElBQUksQ0FBQyx1QkFBdUIsR0FBRyxLQUFLLENBQUM7SUFDdkMsQ0FBQztJQUlEOzs7T0FHRztJQUNILElBRUksY0FBYyxDQUFDLEtBQVU7UUFDM0IsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRTtZQUM1QixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1NBQ2hEO1FBQ0QsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7SUFDL0IsQ0FBQztJQUNELDhEQUE4RDtJQUM5RCxJQUFJLGNBQWM7UUFDaEIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQzlCLENBQUM7SUFJRDs7O09BR0c7SUFDSCxJQUVJLGNBQWMsQ0FBQyxLQUFVO1FBQzNCLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUU7WUFDNUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztTQUNoRDtRQUNELElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO0lBQy9CLENBQUM7SUFDRCw4REFBOEQ7SUFDOUQsSUFBSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUM5QixDQUFDO0lBb0NELDZEQUE2RDtJQUM3RCxZQUFtQixTQUEyQjtRQUEzQixjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQWhJOUMsYUFBUSxHQUFxQixJQUFJLE9BQU8sRUFBVyxDQUFDO1FBZ0M1QyxvQ0FBK0IsR0FBRyxDQUFDLENBQUM7UUE2RGxDLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQVMsQ0FBQztRQUM1Qyx5QkFBb0IsR0FBRyxJQUFJLFlBQVksRUFBUyxDQUFDO1FBQ2pELHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUFnQixDQUFDO1FBQ3BELHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUFnQixDQUFDO1FBQ3BELDBCQUFxQixHQUFHLElBQUksWUFBWSxFQUc5QyxDQUFDO1FBQ0sscUJBQWdCLEdBQUcsSUFBSSxZQUFZLEVBR3pDLENBQUM7UUFDSywyQkFBc0IsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQ3BELGlDQUE0QixHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDMUQsK0JBQTBCLEdBQUcsSUFBSSxZQUFZLEVBQVMsQ0FBQztRQUN2RCwwQkFBcUIsR0FBRyxJQUFJLFlBQVksRUFBa0IsQ0FBQztRQUMzRCxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFtQixDQUFDO1FBQ3JELGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQVMsQ0FBQztRQUN6Qyx5QkFBb0IsR0FBRyxJQUFJLFlBQVksRUFBcUIsQ0FBQztRQUM3RCwwQkFBcUIsR0FBRyxJQUFJLFlBQVksRUFBcUIsQ0FBQztRQUM5RCx5QkFBb0IsR0FBRyxJQUFJLFlBQVksRUFBcUIsQ0FBQztRQUM3RCwwQkFBcUIsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQ25ELG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQW1CLENBQUM7UUFDckQsNEJBQXVCLEdBQUcsSUFBSSxZQUFZLEVBQWUsQ0FBQztRQUMxRCxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFjLENBQUM7UUFDaEQsc0NBQWlDLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUMvRCw0Q0FBdUMsR0FDL0MsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUNuQiwyQ0FBc0MsR0FBRyxJQUFJLFlBQVksRUFFaEUsQ0FBQztRQUNNLG9DQUErQixHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7SUFJdEIsQ0FBQztJQUVsRDs7O09BR0c7SUFDSCxRQUFRO1FBQ04sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxhQUFhO1FBQ1gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ2xDLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzFELE1BQU0sSUFBSSxLQUFLLENBQ2Isc0NBQXNDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSTsrQkFDL0IsY0FBYyxFQUFFLENBQ3hDLENBQUM7U0FDSDtRQUNELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQzdDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUM5QixDQUFDO1FBQ0YsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRTtZQUM1QixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUM3QyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztZQUMzQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztZQUM3RCxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztZQUM3RCxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyw4QkFBOEI7Z0JBQ3BELElBQUksQ0FBQyw4QkFBOEIsQ0FBQztZQUN0QyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxzQkFBc0I7Z0JBQzVDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQztZQUU5QixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxNQUFNLEVBQUU7Z0JBQy9DLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFdBQVc7b0JBQ2pDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ2hDLEVBQUUsU0FBUyxDQUFDLENBQUMsS0FBWSxFQUFFLEVBQUU7b0JBQzNCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNuQyxDQUFDLENBQUMsQ0FBQzthQUNOO2lCQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLFFBQVEsRUFBRTtnQkFDeEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsaUJBQWlCO29CQUN2QyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUNoQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEtBQXFCLEVBQUUsRUFBRTtvQkFDcEMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDekMsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsY0FBYztvQkFDcEMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDaEMsRUFBRSxTQUFTLENBQUMsQ0FBQyxLQUFpQixFQUFFLEVBQUU7b0JBQ2hDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNsQyxDQUFDLENBQUMsQ0FBQzthQUNOO2lCQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLE1BQU0sRUFBRTtnQkFDdEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsY0FBYztvQkFDcEMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDaEMsRUFBRSxTQUFTLENBQUMsQ0FBQyxLQUFZLEVBQUUsRUFBRTtvQkFDM0IsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDeEMsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsY0FBYztvQkFDcEMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDaEMsRUFBRSxTQUFTLENBQUMsQ0FBQyxLQUFZLEVBQUUsRUFBRTtvQkFDM0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQzt3QkFDekIsV0FBVyxFQUFFLEtBQUs7d0JBQ2xCLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVc7cUJBQ3JDLENBQUMsQ0FBQztnQkFDTCxDQUFDLENBQUMsQ0FBQztnQkFDTCxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxvQkFBb0I7b0JBQzFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ2hDLEVBQUUsU0FBUyxDQUFDLENBQUMsS0FBd0IsRUFBRSxFQUFFO29CQUN2QyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN4QyxDQUFDLENBQUMsQ0FBQzthQUNOO2lCQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLElBQUksRUFBRTtnQkFDcEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsWUFBWTtvQkFDbEMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDaEMsRUFBRSxTQUFTLENBQUMsQ0FBQyxLQUFhLEVBQUUsRUFBRTtvQkFDNUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQzt3QkFDekIsSUFBSSxFQUFFLEtBQUs7d0JBQ1gsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVztxQkFDckMsQ0FBQyxDQUFDO2dCQUNMLENBQUMsQ0FBQyxDQUFDO2dCQUNMLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLGlCQUFpQjtvQkFDdkMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDaEMsRUFBRSxTQUFTLENBQUMsQ0FBQyxLQUE2QyxFQUFFLEVBQUU7b0JBQzVELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3pDLENBQUMsQ0FBQyxDQUFDO2FBQ047aUJBQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxlQUFlLENBQUMsYUFBYSxFQUFFO2dCQUM3RCxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyx1QkFBdUI7b0JBQzdDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ2hDLEVBQUUsU0FBUyxDQUFDLENBQUMsS0FBYSxFQUFFLEVBQUU7b0JBQzVCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzFDLENBQUMsQ0FBQyxDQUFDO2dCQUNMLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLDRCQUE0QjtvQkFDbEQsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDaEMsRUFBRSxTQUFTLENBQUMsQ0FBQyxLQUFhLEVBQUUsRUFBRTtvQkFDNUIsSUFBSSxDQUFDLDRCQUE0QixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDaEQsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsMEJBQTBCO29CQUNoRCxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUNoQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEtBQVksRUFBRSxFQUFFO29CQUMzQixJQUFJLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM5QyxDQUFDLENBQUMsQ0FBQzthQUNOO2lCQUFNLElBQ0wsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLDBCQUEwQixFQUMvRDtnQkFDQSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxrQ0FBa0M7b0JBQ3hELEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ2hDLEVBQUUsU0FBUyxDQUFDLENBQUMsS0FBYSxFQUFFLEVBQUU7b0JBQzVCLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3JELENBQUMsQ0FBQyxDQUFDO2dCQUNMLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLHVDQUF1QztvQkFDN0QsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDaEMsRUFBRSxTQUFTLENBQUMsQ0FBQyxLQUFhLEVBQUUsRUFBRTtvQkFDNUIsSUFBSSxDQUFDLHVDQUF1QyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDM0QsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsc0NBQXNDO29CQUM1RCxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUNoQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEtBQTJCLEVBQUUsRUFBRTtvQkFDMUMsSUFBSSxDQUFDLHNDQUFzQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDMUQsQ0FBQyxDQUFDLENBQUM7YUFDTjtpQkFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxXQUFXLEVBQUU7Z0JBQzNELElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLGdCQUFnQjtvQkFDdEMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDaEMsRUFBRSxTQUFTLENBQUMsQ0FBQyxLQUFhLEVBQUUsRUFBRTtvQkFDNUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQzt3QkFDekIsSUFBSSxFQUFFLEtBQUs7d0JBQ1gsV0FBVyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxXQUFXO3FCQUN4RCxDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7YUFDTjtpQkFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxLQUFLLEVBQUU7Z0JBQ3JELElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLGdCQUFnQjtvQkFDdEMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDaEMsRUFBRSxTQUFTLENBQUMsQ0FBQyxLQUFzQixFQUFFLEVBQUU7b0JBQ3JDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNsQyxDQUFDLENBQUMsQ0FBQzthQUNOO2lCQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLGNBQWMsRUFBRTtnQkFDOUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsWUFBWTtxQkFDakMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7cUJBQzlCLFNBQVMsQ0FBQyxDQUFDLEtBQVksRUFBRSxFQUFFO29CQUMxQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDaEMsQ0FBQyxDQUFDLENBQUM7YUFDTjtpQkFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxTQUFTLEVBQUU7Z0JBQ3pELElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLG9CQUFvQjtvQkFDNUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDaEMsRUFBRSxTQUFTLENBQUMsQ0FBQyxLQUF3QixFQUFFLEVBQUU7b0JBQ3ZDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3hDLENBQUMsQ0FBQyxDQUFDO2FBQ047aUJBQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxlQUFlLENBQUMsWUFBWSxFQUFFO2dCQUM1RCxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUI7b0JBQ3ZDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ2hDLEVBQUUsU0FBUyxDQUFDLENBQUMsS0FBd0IsRUFBRSxFQUFFO29CQUN2QyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN6QyxDQUFDLENBQUMsQ0FBQzthQUNOO2lCQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLFlBQVksRUFBRTtnQkFDNUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsaUJBQWlCO29CQUN2QyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUNoQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEtBQWEsRUFBRSxFQUFFO29CQUM1QixJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN6QyxDQUFDLENBQUMsQ0FBQzthQUNOO2lCQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLFdBQVcsRUFBRTtnQkFDM0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsbUJBQW1CO29CQUN6QyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUNoQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEtBQXNCLEVBQUUsRUFBRTtvQkFDckMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2xDLENBQUMsQ0FBQyxDQUFDO2FBQ047aUJBQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxlQUFlLENBQUMsS0FBSyxFQUFFO2dCQUNyRCxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxtQkFBbUI7b0JBQ3pDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ2hDLEVBQUUsU0FBUyxDQUFDLENBQUMsS0FBa0IsRUFBRSxFQUFFO29CQUNqQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMzQyxDQUFDLENBQUMsQ0FBQzthQUNOO2lCQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLGdCQUFnQixFQUFFO2dCQUNoRSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQywyQkFBMkI7b0JBQ2pELEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ2hDLEVBQUUsU0FBUyxDQUFDLENBQUMsS0FBYSxFQUFFLEVBQUU7b0JBQzVCLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ25ELENBQUMsQ0FBQyxDQUFDO2FBQ047U0FDRjtJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUM5QixDQUFDOytHQTVUVSx5QkFBeUI7bUdBQXpCLHlCQUF5Qjs7NEZBQXpCLHlCQUF5QjtrQkFKckMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsMEJBQTBCO29CQUNwQyxVQUFVLEVBQUUsSUFBSTtpQkFDakI7dUdBVUssTUFBTTtzQkFEVCxLQUFLO2dCQWdCRixLQUFLO3NCQURSLEtBQUs7Z0JBWU8sOEJBQThCO3NCQUExQyxLQUFLO2dCQVdPLHNCQUFzQjtzQkFBbEMsS0FBSztnQkFrQkYsY0FBYztzQkFGakIsS0FBSztnQkFxQkYsY0FBYztzQkFGakIsS0FBSztnQkFhSSxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLG9CQUFvQjtzQkFBN0IsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLHFCQUFxQjtzQkFBOUIsTUFBTTtnQkFJRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBSUcsc0JBQXNCO3NCQUEvQixNQUFNO2dCQUNHLDRCQUE0QjtzQkFBckMsTUFBTTtnQkFDRywwQkFBMEI7c0JBQW5DLE1BQU07Z0JBQ0cscUJBQXFCO3NCQUE5QixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBQ0cscUJBQXFCO3NCQUE5QixNQUFNO2dCQUNHLG9CQUFvQjtzQkFBN0IsTUFBTTtnQkFDRyxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyx1QkFBdUI7c0JBQWhDLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxpQ0FBaUM7c0JBQTFDLE1BQU07Z0JBQ0csdUNBQXVDO3NCQUFoRCxNQUFNO2dCQUVHLHNDQUFzQztzQkFBL0MsTUFBTTtnQkFHRywrQkFBK0I7c0JBQXhDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudFJlZixcclxuICBEaXJlY3RpdmUsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFR5cGUsXHJcbiAgVmlld0NvbnRhaW5lclJlZixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgRmllbGRDb25maWcgfSBmcm9tICcuLi8uLi9tb2RlbHMvZmllbGQtY29uZmlnLm1vZGVsJztcclxuaW1wb3J0IHsgRm9ybUZpZWxkIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2Zvcm0tZmllbGQubW9kZWwnO1xyXG5pbXBvcnQgeyBJbnB1dENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvaW5wdXQvaW5wdXQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQXV0b2NvbXBsZXRlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9hdXRvY29tcGxldGUvYXV0b2NvbXBsZXRlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENoZWNrYm94Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9jaGVja2JveC9jaGVja2JveC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBEYXRlUGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBSYWRpb0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvcmFkaW8vcmFkaW8uY29tcG9uZW50JztcclxuaW1wb3J0IHsgU2VhcmNoQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9zZWFyY2gvc2VhcmNoLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFNlbGVjdENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvc2VsZWN0L3NlbGVjdC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUZXh0QXJlYUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvdGV4dC1hcmVhL3RleHQtYXJlYS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbFR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvZm9ybS1jb250cm9sLXR5cGVzLm1vZGVsJztcclxuaW1wb3J0IHsgQ2hlY2tib3hPcHRpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvY2hlY2tib3gtb3B0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgQWRkRm9ybUdyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9hZGQtZm9ybS1ncm91cC9hZGQtZm9ybS1ncm91cC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUaW1lUGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy90aW1lLXBpY2tlci90aW1lLXBpY2tlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTZWxlY3RlZERhdGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvc2VsZWN0ZWQtZGF0ZS5tb2RlbCc7XHJcbmltcG9ydCB7IFNlbGVjdGVkVGltZSB9IGZyb20gJy4uLy4uL21vZGVscy9zZWxlY3RlZC10aW1lLm1vZGVsJztcclxuaW1wb3J0IHsgTGlua0V2ZW50RW1pdFR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvZXZlbnQtZW1pdC10eXBlLm1vZGVsJztcclxuaW1wb3J0IHsgU2xpZGVUb2dnbGVDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3NsaWRlLXRvZ2dsZS9zbGlkZS10b2dnbGUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU2xpZGVUb2dnbGVPcHRpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvc2xpZGUtdG9nZ2xlLW9wdGlvbnMubW9kZWwnO1xyXG5pbXBvcnQgeyBGaWxlVXBsb2FkQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9maWxlLXVwbG9hZC9maWxlLXVwbG9hZC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTZWxlY3RPcGVuZWRTdGF0ZSB9IGZyb20gJy4uLy4uL21vZGVscy9zZWxlY3Qtb3BlbmVkLXN0YXRlLm1vZGVsJztcclxuaW1wb3J0IHsgQ29sb3JQaWNrZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2NvbG9yLXBpY2tlci9jb2xvci1waWNrZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUmFkaW9PcHRpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvcmFkaW8tb3B0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgSWNvbkJ1dHRvbiB9IGZyb20gJy4uLy4uL21vZGVscy9pY29uLWJ1dHRvbi5tb2RlbCc7XHJcbmltcG9ydCB7IE11bHRpU2VsZWN0QXV0b2NvbXBsZXRlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9tdWx0aS1zZWxlY3QtYXV0b2NvbXBsZXRlL211bHRpLXNlbGVjdC1hdXRvY29tcGxldGUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQXV0b0NvbXBsZXRlT3B0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2F1dG9jb21wbGV0ZS1vcHRpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBSaWNoVGV4dEVkaXRvckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvcmljaC10ZXh0LWVkaXRvci9yaWNoLXRleHQtZWRpdG9yLmNvbXBvbmVudCc7XHJcblxyXG5jb25zdCBjb21wb25lbnRzOiB7IFt0eXBlOiBzdHJpbmddOiBUeXBlPEZvcm1GaWVsZD4gfSA9IHtcclxuICBbRm9ybUNvbnRyb2xUeXBlLklOUFVUXTogSW5wdXRDb21wb25lbnQsXHJcbiAgW0Zvcm1Db250cm9sVHlwZS5URVhUX0FSRUFdOiBUZXh0QXJlYUNvbXBvbmVudCxcclxuICBbRm9ybUNvbnRyb2xUeXBlLlNFTEVDVF06IFNlbGVjdENvbXBvbmVudCxcclxuICBbRm9ybUNvbnRyb2xUeXBlLlNFQVJDSF06IFNlYXJjaENvbXBvbmVudCxcclxuICBbRm9ybUNvbnRyb2xUeXBlLkRBVEVdOiBEYXRlUGlja2VyQ29tcG9uZW50LFxyXG4gIFtGb3JtQ29udHJvbFR5cGUuQ0hFQ0tCT1hdOiBDaGVja2JveENvbXBvbmVudCxcclxuICBbRm9ybUNvbnRyb2xUeXBlLlJBRElPXTogUmFkaW9Db21wb25lbnQsXHJcbiAgW0Zvcm1Db250cm9sVHlwZS5BVVRPX0NPTVBMRVRFXTogQXV0b2NvbXBsZXRlQ29tcG9uZW50LFxyXG4gIFtGb3JtQ29udHJvbFR5cGUuQUREX0ZPUk1fR1JPVVBdOiBBZGRGb3JtR3JvdXBDb21wb25lbnQsXHJcbiAgW0Zvcm1Db250cm9sVHlwZS5USU1FX1BJQ0tFUl06IFRpbWVQaWNrZXJDb21wb25lbnQsXHJcbiAgW0Zvcm1Db250cm9sVHlwZS5TTElERV9UT0dHTEVdOiBTbGlkZVRvZ2dsZUNvbXBvbmVudCxcclxuICBbRm9ybUNvbnRyb2xUeXBlLkNPTE9SX1BJQ0tFUl06IENvbG9yUGlja2VyQ29tcG9uZW50LFxyXG4gIFtGb3JtQ29udHJvbFR5cGUuRklMRV9VUExPQURdOiBGaWxlVXBsb2FkQ29tcG9uZW50LFxyXG4gIFtGb3JtQ29udHJvbFR5cGUuTVVMVElfU0VMRUNUX0FVVE9fQ09NUExFVEVdOlxyXG4gICAgTXVsdGlTZWxlY3RBdXRvY29tcGxldGVDb21wb25lbnQsXHJcbiAgW0Zvcm1Db250cm9sVHlwZS5SSUNIX1RFWFRfRURJVE9SXTogUmljaFRleHRFZGl0b3JDb21wb25lbnQsXHJcbn07XHJcblxyXG4vKipcclxuICogUHJvdmlkZXMgdGhlIGltcGxlbWVudGF0aW9uIG9mIER5bmFtaWNGb3JtRmllbGREaXJlY3RpdmUgd2hpY2ggaG9zdHMgYW5kIGNyZWF0ZXMgdGhlIGZvcm0gZmllbGRzIGNvbXBvbmVudHMgZHluYW1pY2FsbHkuXHJcbiAqIEBleHBvcnRcclxuICogQGNsYXNzIER5bmFtaWNGb3JtRmllbGREaXJlY3RpdmVcclxuICogQGltcGxlbWVudHMge0Zvcm1GaWVsZH1cclxuICogQGltcGxlbWVudHMge09uSW5pdH1cclxuICogQGltcGxlbWVudHMge09uRGVzdHJveX1cclxuICovXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnW2llZWVzYUR5bmFtaWNGb3JtRmllbGRdJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRHluYW1pY0Zvcm1GaWVsZERpcmVjdGl2ZSBpbXBsZW1lbnRzIEZvcm1GaWVsZCwgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIGRlc3Ryb3kkOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuICBwcml2YXRlIF9jb25maWchOiBGaWVsZENvbmZpZztcclxuICBwcml2YXRlIF9ncm91cCE6IEZvcm1Hcm91cDtcclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBmb3JtIGZpZWxkIGNvbmZpZ3VyYXRpb25cclxuICAgKiBAbWVtYmVyb2YgRHluYW1pY0Zvcm1GaWVsZERpcmVjdGl2ZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGNvbmZpZyh2YWx1ZTogRmllbGRDb25maWcpIHtcclxuICAgIHRoaXMuX2NvbmZpZyA9IHZhbHVlO1xyXG4gICAgaWYgKHRoaXMuY29tcG9uZW50KSB7XHJcbiAgICAgIHRoaXMubG9hZENvbXBvbmVudCgpO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXQgY29uZmlnKCk6IEZpZWxkQ29uZmlnIHtcclxuICAgIHJldHVybiB0aGlzLl9jb25maWc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBmb3JtIGdyb3VwXHJcbiAgICogQG1lbWJlcm9mIER5bmFtaWNGb3JtRmllbGREaXJlY3RpdmVcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBncm91cCh2YWx1ZTogRm9ybUdyb3VwKSB7XHJcbiAgICBpZiAodGhpcy5jb21wb25lbnQ/Lmluc3RhbmNlKSB7XHJcbiAgICAgIHRoaXMuY29tcG9uZW50Lmluc3RhbmNlLmdyb3VwID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9ncm91cCA9IHZhbHVlO1xyXG4gIH1cclxuICBnZXQgZ3JvdXAoKTogRm9ybUdyb3VwIHtcclxuICAgIHJldHVybiB0aGlzLl9ncm91cDtcclxuICB9XHJcbiAgcHJpdmF0ZSBfZmlsZXNVcGxvYWRlZFN1Y2Nlc3NmdWxseUNvdW50ID0gMDtcclxuXHJcbiAgQElucHV0KCkgZ2V0IGZpbGVzVXBsb2FkZWRTdWNjZXNzZnVsbHlDb3VudCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2ZpbGVzVXBsb2FkZWRTdWNjZXNzZnVsbHlDb3VudDtcclxuICB9XHJcbiAgc2V0IGZpbGVzVXBsb2FkZWRTdWNjZXNzZnVsbHlDb3VudCh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICBpZiAodGhpcy5jb21wb25lbnQ/Lmluc3RhbmNlKSB7XHJcbiAgICAgIHRoaXMuY29tcG9uZW50Lmluc3RhbmNlLmZpbGVzVXBsb2FkZWRTdWNjZXNzZnVsbHlDb3VudCA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fZmlsZXNVcGxvYWRlZFN1Y2Nlc3NmdWxseUNvdW50ID0gdmFsdWU7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2ZpbGVzTmFtZXNVcGxvYWRGYWlsZWQhOiBzdHJpbmdbXTtcclxuXHJcbiAgQElucHV0KCkgZ2V0IGZpbGVzTmFtZXNVcGxvYWRGYWlsZWQoKTogc3RyaW5nW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2ZpbGVzTmFtZXNVcGxvYWRGYWlsZWQ7XHJcbiAgfVxyXG4gIHNldCBmaWxlc05hbWVzVXBsb2FkRmFpbGVkKHZhbHVlOiBzdHJpbmdbXSkge1xyXG4gICAgaWYgKHRoaXMuY29tcG9uZW50Py5pbnN0YW5jZSkge1xyXG4gICAgICB0aGlzLmNvbXBvbmVudC5pbnN0YW5jZS5maWxlc05hbWVzVXBsb2FkRmFpbGVkID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9maWxlc05hbWVzVXBsb2FkRmFpbGVkID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIHByaXZhdGUgX3N1Ym1pdFJlc3BvbnNlITogYW55O1xyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIHN1Ym1pdCByZXNwb25zZSBvZiBmb3JtIHN1Ym1pdCBldmVudFxyXG4gICAqIEBtZW1iZXJvZiBEeW5hbWljRm9ybUZpZWxkRGlyZWN0aXZlXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIHNldCBzdWJtaXRSZXNwb25zZSh2YWx1ZTogYW55KSB7XHJcbiAgICBpZiAodGhpcy5jb21wb25lbnQ/Lmluc3RhbmNlKSB7XHJcbiAgICAgIHRoaXMuY29tcG9uZW50Lmluc3RhbmNlLnN1Ym1pdFJlc3BvbnNlID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9zdWJtaXRSZXNwb25zZSA9IHZhbHVlO1xyXG4gIH1cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIGdldCBzdWJtaXRSZXNwb25zZSgpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3N1Ym1pdFJlc3BvbnNlO1xyXG4gIH1cclxuXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBwcml2YXRlIF9zZWFyY2hSZXNwb25zZSE6IGFueTtcclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBmb3JtIHNlYXJjaCByZXNwb25zZSBvZiBmb3JtIHNlYXJjaCBhcHBseS5cclxuICAgKiBAbWVtYmVyb2YgRHluYW1pY0Zvcm1GaWVsZERpcmVjdGl2ZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBzZXQgc2VhcmNoUmVzcG9uc2UodmFsdWU6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuY29tcG9uZW50Py5pbnN0YW5jZSkge1xyXG4gICAgICB0aGlzLmNvbXBvbmVudC5pbnN0YW5jZS5zZWFyY2hSZXNwb25zZSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fc2VhcmNoUmVzcG9uc2UgPSB2YWx1ZTtcclxuICB9XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBnZXQgc2VhcmNoUmVzcG9uc2UoKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLl9zZWFyY2hSZXNwb25zZTtcclxuICB9XHJcblxyXG4gIEBPdXRwdXQoKSBmb3JtU2VhcmNoQXBwbHkgPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpO1xyXG4gIEBPdXRwdXQoKSBmb3JtRHJvcGRvd25TZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RXZlbnQ+KCk7XHJcbiAgQE91dHB1dCgpIGZvcm1EYXRlU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFNlbGVjdGVkRGF0ZT4oKTtcclxuICBAT3V0cHV0KCkgZm9ybVRpbWVTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8U2VsZWN0ZWRUaW1lPigpO1xyXG4gIEBPdXRwdXQoKSBmb3JtU2VsZWN0ZWREYXRlUmFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHtcclxuICAgIHN0YXJ0RGF0ZTogc3RyaW5nO1xyXG4gICAgZW5kRGF0ZTogc3RyaW5nO1xyXG4gIH0+KCk7XHJcbiAgQE91dHB1dCgpIGZvcm1TZWxlY3RTZWFyY2ggPSBuZXcgRXZlbnRFbWl0dGVyPHtcclxuICAgIHNlYXJjaEV2ZW50OiBFdmVudDtcclxuICAgIGNvbnRyb2xOYW1lOiBzdHJpbmc7XHJcbiAgfT4oKTtcclxuICBAT3V0cHV0KCkgZm9ybUF1dG9Db21wbGV0ZVNlYXJjaCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gIEBPdXRwdXQoKSBhdXRvQ29tcGxldGVDbGVhclNlYXJjaFZhbHVlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcbiAgQE91dHB1dCgpIGF1dG9Db21wbGV0ZU9wdGlvblNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4oKTtcclxuICBAT3V0cHV0KCkgZm9ybUNoZWNrYm94U2VsZWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjxDaGVja2JveE9wdGlvbj4oKTtcclxuICBAT3V0cHV0KCkgZm9ybUlucHV0VmFsdWUgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZyB8IG51bWJlcj4oKTtcclxuICBAT3V0cHV0KCkgYWRkRm9ybUdyb3VwID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4oKTtcclxuICBAT3V0cHV0KCkgc3VwcG9ydFRleHRMaW5rQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPExpbmtFdmVudEVtaXRUeXBlPigpO1xyXG4gIEBPdXRwdXQoKSBmb3JtU2xpZGVUb2dnbGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFNsaWRlVG9nZ2xlT3B0aW9uPigpO1xyXG4gIEBPdXRwdXQoKSBkcm9wZG93bk9wZW5lZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8U2VsZWN0T3BlbmVkU3RhdGU+KCk7XHJcbiAgQE91dHB1dCgpIGZvcm1Db2xvclBpY2tlckNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gIEBPdXRwdXQoKSBmb3JtRmlsZVVwbG9hZCA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsZSB8IEZpbGVMaXN0PigpO1xyXG4gIEBPdXRwdXQoKSBmb3JtUmFkaW9PcHRpb25TZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8UmFkaW9PcHRpb24+KCk7XHJcbiAgQE91dHB1dCgpIGN0YUJ1dHRvbkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxJY29uQnV0dG9uPigpO1xyXG4gIEBPdXRwdXQoKSBmb3JtTXVsdGlTZWxlY3RBdXRvQ29tcGxldGVTZWFyY2ggPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBAT3V0cHV0KCkgbXVsdGlTZWxlY3RBdXRvQ29tcGxldGVDbGVhclNlYXJjaFZhbHVlID1cclxuICAgIG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gIEBPdXRwdXQoKSBtdWx0aVNlbGVjdEF1dG9Db21wbGV0ZU9wdGlvbnNTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8XHJcbiAgICBBdXRvQ29tcGxldGVPcHRpb25bXVxyXG4gID4oKTtcclxuICBAT3V0cHV0KCkgZm9ybVJpY2hUZXh0RWRpdG9yQ29udGVudENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgY29tcG9uZW50ITogQ29tcG9uZW50UmVmPGFueT47XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzLCBuby1lbXB0eS1mdW5jdGlvblxyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBjb250YWluZXI6IFZpZXdDb250YWluZXJSZWYpIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIEltcGxlbWVudGF0aW9uIG9mIG5nT25Jbml0IGxpZmVjeWNsZSBob29rIG1ldGhvZCB0byBjYWxsIGxvYWRDb21wb25lbnRzIG1ldGhvZC5cclxuICAgKiBAbWVtYmVyb2YgRHluYW1pY0Zvcm1GaWVsZERpcmVjdGl2ZVxyXG4gICAqL1xyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5sb2FkQ29tcG9uZW50KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGVzIHRoZSBjb21wb25lbnQgZHluYW1pY2FsbHkgYW5kIGluaXRpYWxpemVzIHRoZSBpbnN0YW5jZSBwcm9wZXJ0aWVzIG9mIGNyZWF0ZWQgY29tcG9uZW50LCBhbHNvIGhhbmRsZXMgdGhlIGNyZWF0ZWQgY29tcG9uZW50IGV2ZW50cy5cclxuICAgKiBAbWVtYmVyb2YgRHluYW1pY0Zvcm1GaWVsZERpcmVjdGl2ZVxyXG4gICAqL1xyXG4gIGxvYWRDb21wb25lbnQoKTogdm9pZCB7XHJcbiAgICBpZiAoIWNvbXBvbmVudHNbdGhpcy5jb25maWc/LnR5cGVdKSB7XHJcbiAgICAgIGNvbnN0IHN1cHBvcnRlZFR5cGVzID0gT2JqZWN0LmtleXMoY29tcG9uZW50cykuam9pbignLCAnKTtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBUcnlpbmcgdG8gdXNlIGFuIHVuc3VwcG9ydGVkIHR5cGUgKCR7dGhpcy5jb25maWcudHlwZX0pLlxyXG4gICAgICAgICAgICBTdXBwb3J0ZWQgdHlwZXM6ICR7c3VwcG9ydGVkVHlwZXN9YFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jb21wb25lbnQgPSB0aGlzLmNvbnRhaW5lci5jcmVhdGVDb21wb25lbnQoXHJcbiAgICAgIGNvbXBvbmVudHNbdGhpcy5jb25maWc/LnR5cGVdXHJcbiAgICApO1xyXG4gICAgaWYgKHRoaXMuY29tcG9uZW50Py5pbnN0YW5jZSkge1xyXG4gICAgICB0aGlzLmNvbXBvbmVudC5pbnN0YW5jZS5jb25maWcgPSB0aGlzLmNvbmZpZztcclxuICAgICAgdGhpcy5jb21wb25lbnQuaW5zdGFuY2UuZ3JvdXAgPSB0aGlzLmdyb3VwO1xyXG4gICAgICB0aGlzLmNvbXBvbmVudC5pbnN0YW5jZS5zdWJtaXRSZXNwb25zZSA9IHRoaXMuc3VibWl0UmVzcG9uc2U7XHJcbiAgICAgIHRoaXMuY29tcG9uZW50Lmluc3RhbmNlLnNlYXJjaFJlc3BvbnNlID0gdGhpcy5zZWFyY2hSZXNwb25zZTtcclxuICAgICAgdGhpcy5jb21wb25lbnQuaW5zdGFuY2UuZmlsZXNVcGxvYWRlZFN1Y2Nlc3NmdWxseUNvdW50ID1cclxuICAgICAgICB0aGlzLmZpbGVzVXBsb2FkZWRTdWNjZXNzZnVsbHlDb3VudDtcclxuICAgICAgdGhpcy5jb21wb25lbnQuaW5zdGFuY2UuZmlsZXNOYW1lc1VwbG9hZEZhaWxlZCA9XHJcbiAgICAgICAgdGhpcy5maWxlc05hbWVzVXBsb2FkRmFpbGVkO1xyXG5cclxuICAgICAgaWYgKHRoaXMuY29uZmlnLnR5cGUgPT09IEZvcm1Db250cm9sVHlwZS5TRUFSQ0gpIHtcclxuICAgICAgICB0aGlzLmNvbXBvbmVudC5pbnN0YW5jZS5zZWFyY2hWYWx1ZVxyXG4gICAgICAgICAgPy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAgID8uc3Vic2NyaWJlKChldmVudDogRXZlbnQpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtU2VhcmNoQXBwbHkuZW1pdChldmVudCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZy50eXBlID09PSBGb3JtQ29udHJvbFR5cGUuQ0hFQ0tCT1gpIHtcclxuICAgICAgICB0aGlzLmNvbXBvbmVudC5pbnN0YW5jZS5jaGVja2JveFNlbGVjdGlvblxyXG4gICAgICAgICAgPy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAgID8uc3Vic2NyaWJlKChldmVudDogQ2hlY2tib3hPcHRpb24pID0+IHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtQ2hlY2tib3hTZWxlY3Rpb24uZW1pdChldmVudCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmNvbXBvbmVudC5pbnN0YW5jZS5jdGFCdXR0b25DbGlja1xyXG4gICAgICAgICAgPy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAgID8uc3Vic2NyaWJlKChldmVudDogSWNvbkJ1dHRvbikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmN0YUJ1dHRvbkNsaWNrLmVtaXQoZXZlbnQpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWcudHlwZSA9PT0gRm9ybUNvbnRyb2xUeXBlLlNFTEVDVCkge1xyXG4gICAgICAgIHRoaXMuY29tcG9uZW50Lmluc3RhbmNlLm9wdGlvblNlbGVjdGVkXHJcbiAgICAgICAgICA/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgICAgPy5zdWJzY3JpYmUoKGV2ZW50OiBFdmVudCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1Ecm9wZG93blNlbGVjdGVkLmVtaXQoZXZlbnQpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5jb21wb25lbnQuaW5zdGFuY2Uub3B0aW9uU2VhcmNoZWRcclxuICAgICAgICAgID8ucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgICA/LnN1YnNjcmliZSgoZXZlbnQ6IEV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybVNlbGVjdFNlYXJjaC5lbWl0KHtcclxuICAgICAgICAgICAgICBzZWFyY2hFdmVudDogZXZlbnQsXHJcbiAgICAgICAgICAgICAgY29udHJvbE5hbWU6IHRoaXMuY29uZmlnLmNvbnRyb2xOYW1lLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuY29tcG9uZW50Lmluc3RhbmNlLmRyb3Bkb3duT3BlbmVkQ2hhbmdlXHJcbiAgICAgICAgICA/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgICAgPy5zdWJzY3JpYmUoKGV2ZW50OiBTZWxlY3RPcGVuZWRTdGF0ZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmRyb3Bkb3duT3BlbmVkQ2hhbmdlLmVtaXQoZXZlbnQpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWcudHlwZSA9PT0gRm9ybUNvbnRyb2xUeXBlLkRBVEUpIHtcclxuICAgICAgICB0aGlzLmNvbXBvbmVudC5pbnN0YW5jZS5zZWxlY3RlZERhdGVcclxuICAgICAgICAgID8ucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgICA/LnN1YnNjcmliZSgoZXZlbnQ6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1EYXRlU2VsZWN0ZWQuZW1pdCh7XHJcbiAgICAgICAgICAgICAgZGF0ZTogZXZlbnQsXHJcbiAgICAgICAgICAgICAgY29udHJvbE5hbWU6IHRoaXMuY29uZmlnLmNvbnRyb2xOYW1lLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuY29tcG9uZW50Lmluc3RhbmNlLnNlbGVjdGVkRGF0ZVJhbmdlXHJcbiAgICAgICAgICA/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgICAgPy5zdWJzY3JpYmUoKGV2ZW50OiB7IHN0YXJ0RGF0ZTogc3RyaW5nOyBlbmREYXRlOiBzdHJpbmcgfSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1TZWxlY3RlZERhdGVSYW5nZS5lbWl0KGV2ZW50KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlnLnR5cGUgPT09IEZvcm1Db250cm9sVHlwZS5BVVRPX0NPTVBMRVRFKSB7XHJcbiAgICAgICAgdGhpcy5jb21wb25lbnQuaW5zdGFuY2UuYXV0b0NvbXBsZXRlU2VhcmNoVmFsdWVcclxuICAgICAgICAgID8ucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgICA/LnN1YnNjcmliZSgoZXZlbnQ6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1BdXRvQ29tcGxldGVTZWFyY2guZW1pdChldmVudCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmNvbXBvbmVudC5pbnN0YW5jZS5hdXRvQ29tcGxldGVDbGVhclNlYXJjaFZhbHVlXHJcbiAgICAgICAgICA/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgICAgPy5zdWJzY3JpYmUoKGV2ZW50OiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5hdXRvQ29tcGxldGVDbGVhclNlYXJjaFZhbHVlLmVtaXQoZXZlbnQpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5jb21wb25lbnQuaW5zdGFuY2UuYXV0b0NvbXBsZXRlT3B0aW9uU2VsZWN0ZWRcclxuICAgICAgICAgID8ucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgICA/LnN1YnNjcmliZSgoZXZlbnQ6IEV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYXV0b0NvbXBsZXRlT3B0aW9uU2VsZWN0ZWQuZW1pdChldmVudCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICB0aGlzLmNvbmZpZy50eXBlID09PSBGb3JtQ29udHJvbFR5cGUuTVVMVElfU0VMRUNUX0FVVE9fQ09NUExFVEVcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5jb21wb25lbnQuaW5zdGFuY2UubXVsdGlTZWxlY3RBdXRvQ29tcGxldGVTZWFyY2hWYWx1ZVxyXG4gICAgICAgICAgPy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAgID8uc3Vic2NyaWJlKChldmVudDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybU11bHRpU2VsZWN0QXV0b0NvbXBsZXRlU2VhcmNoLmVtaXQoZXZlbnQpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5jb21wb25lbnQuaW5zdGFuY2UubXVsdGlTZWxlY3RBdXRvQ29tcGxldGVDbGVhclNlYXJjaFZhbHVlXHJcbiAgICAgICAgICA/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgICAgPy5zdWJzY3JpYmUoKGV2ZW50OiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5tdWx0aVNlbGVjdEF1dG9Db21wbGV0ZUNsZWFyU2VhcmNoVmFsdWUuZW1pdChldmVudCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmNvbXBvbmVudC5pbnN0YW5jZS5tdWx0aVNlbGVjdEF1dG9Db21wbGV0ZU9wdGlvbnNTZWxlY3RlZFxyXG4gICAgICAgICAgPy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAgID8uc3Vic2NyaWJlKChldmVudDogQXV0b0NvbXBsZXRlT3B0aW9uW10pID0+IHtcclxuICAgICAgICAgICAgdGhpcy5tdWx0aVNlbGVjdEF1dG9Db21wbGV0ZU9wdGlvbnNTZWxlY3RlZC5lbWl0KGV2ZW50KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlnLnR5cGUgPT09IEZvcm1Db250cm9sVHlwZS5USU1FX1BJQ0tFUikge1xyXG4gICAgICAgIHRoaXMuY29tcG9uZW50Lmluc3RhbmNlLmZvcm1UaW1lU2VsZWN0ZWRcclxuICAgICAgICAgID8ucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgICA/LnN1YnNjcmliZSgoZXZlbnQ6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1UaW1lU2VsZWN0ZWQuZW1pdCh7XHJcbiAgICAgICAgICAgICAgdGltZTogZXZlbnQsXHJcbiAgICAgICAgICAgICAgY29udHJvbE5hbWU6IHRoaXMuY29tcG9uZW50Lmluc3RhbmNlLmNvbmZpZy5jb250cm9sTmFtZSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZy50eXBlID09PSBGb3JtQ29udHJvbFR5cGUuSU5QVVQpIHtcclxuICAgICAgICB0aGlzLmNvbXBvbmVudC5pbnN0YW5jZS5pbnB1dFZhbHVlQ2hhbmdlXHJcbiAgICAgICAgICA/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgICAgPy5zdWJzY3JpYmUoKGV2ZW50OiBzdHJpbmcgfCBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtSW5wdXRWYWx1ZS5lbWl0KGV2ZW50KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlnLnR5cGUgPT09IEZvcm1Db250cm9sVHlwZS5BRERfRk9STV9HUk9VUCkge1xyXG4gICAgICAgIHRoaXMuY29tcG9uZW50Lmluc3RhbmNlLmFkZEZvcm1Hcm91cFxyXG4gICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IEV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkRm9ybUdyb3VwLmVtaXQoZXZlbnQpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWcudHlwZSA9PT0gRm9ybUNvbnRyb2xUeXBlLlRFWFRfQVJFQSkge1xyXG4gICAgICAgIHRoaXMuY29tcG9uZW50Py5pbnN0YW5jZT8uc3VwcG9ydFRleHRMaW5rQ2xpY2tcclxuICAgICAgICAgID8ucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgICA/LnN1YnNjcmliZSgoZXZlbnQ6IExpbmtFdmVudEVtaXRUeXBlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc3VwcG9ydFRleHRMaW5rQ2xpY2suZW1pdChldmVudCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZy50eXBlID09PSBGb3JtQ29udHJvbFR5cGUuU0xJREVfVE9HR0xFKSB7XHJcbiAgICAgICAgdGhpcy5jb21wb25lbnQuaW5zdGFuY2Uuc2xpZGVUb2dnbGVDaGFuZ2VcclxuICAgICAgICAgID8ucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgICA/LnN1YnNjcmliZSgoZXZlbnQ6IFNsaWRlVG9nZ2xlT3B0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybVNsaWRlVG9nZ2xlQ2hhbmdlLmVtaXQoZXZlbnQpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWcudHlwZSA9PT0gRm9ybUNvbnRyb2xUeXBlLkNPTE9SX1BJQ0tFUikge1xyXG4gICAgICAgIHRoaXMuY29tcG9uZW50Lmluc3RhbmNlLmNvbG9yUGlja2VyQ2hhbmdlXHJcbiAgICAgICAgICA/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgICAgPy5zdWJzY3JpYmUoKGV2ZW50OiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtQ29sb3JQaWNrZXJDaGFuZ2UuZW1pdChldmVudCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZy50eXBlID09PSBGb3JtQ29udHJvbFR5cGUuRklMRV9VUExPQUQpIHtcclxuICAgICAgICB0aGlzLmNvbXBvbmVudC5pbnN0YW5jZS51cGxvYWRTZWxlY3RlZEZpbGVzXHJcbiAgICAgICAgICA/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgICAgPy5zdWJzY3JpYmUoKGV2ZW50OiBGaWxlIHwgRmlsZUxpc3QpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtRmlsZVVwbG9hZC5lbWl0KGV2ZW50KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlnLnR5cGUgPT09IEZvcm1Db250cm9sVHlwZS5SQURJTykge1xyXG4gICAgICAgIHRoaXMuY29tcG9uZW50Lmluc3RhbmNlLnNlbGVjdGVkUmFkaW9PcHRpb25cclxuICAgICAgICAgID8ucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgICA/LnN1YnNjcmliZSgoZXZlbnQ6IFJhZGlvT3B0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybVJhZGlvT3B0aW9uU2VsZWN0ZWQuZW1pdChldmVudCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZy50eXBlID09PSBGb3JtQ29udHJvbFR5cGUuUklDSF9URVhUX0VESVRPUikge1xyXG4gICAgICAgIHRoaXMuY29tcG9uZW50Lmluc3RhbmNlLnJpY2hUZXh0RWRpdG9yQ29udGVudENoYW5nZVxyXG4gICAgICAgICAgPy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAgID8uc3Vic2NyaWJlKChldmVudDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybVJpY2hUZXh0RWRpdG9yQ29udGVudENoYW5nZS5lbWl0KGV2ZW50KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbXBsZW1lbnRhdGlvbiBvZiBuZ09uRGVzdHJveSBsaWZlY3ljbGUgaG9vayBtZXRob2QgdG8gdW5zdWJzY3JpYmUgdGhlIG9wZW4gb2JzZXJ2YWJsZSBzdWJzY3JpcHRpb25zLlxyXG4gICAqIEBtZW1iZXJvZiBEeW5hbWljRm9ybUZpZWxkRGlyZWN0aXZlXHJcbiAgICovXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
379
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1mb3JtLWZpZWxkLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ByZXNlbnRhdGlvbi9zcmMvbGliL2RpcmVjdGl2ZXMvZHluYW1pYy1mb3JtLWZpZWxkL2R5bmFtaWMtZm9ybS1maWVsZC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sR0FHUCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUcxQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDeEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDN0YsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDakYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDekYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDbkYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBRXhFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBSXpGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBRTVGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFN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LHlCQUF5QjttR0FBekIseUJBQXlCOzs0RkFBekIseUJBQXlCO2tCQUpyQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSwwQkFBMEI7b0JBQ3BDLFVBQVUsRUFBRSxJQUFJO2lCQUNqQjt1R0FVSyxNQUFNO3NCQURULEtBQUs7Z0JBZ0JGLEtBQUs7c0JBRFIsS0FBSztnQkFtQkYsY0FBYztzQkFGakIsS0FBSztnQkFxQkYsY0FBYztzQkFGakIsS0FBSztnQkFhSSxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLG9CQUFvQjtzQkFBN0IsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLHFCQUFxQjtzQkFBOUIsTUFBTTtnQkFJRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBSUcsc0JBQXNCO3NCQUEvQixNQUFNO2dCQUNHLDRCQUE0QjtzQkFBckMsTUFBTTtnQkFDRywwQkFBMEI7c0JBQW5DLE1BQU07Z0JBQ0cscUJBQXFCO3NCQUE5QixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBQ0cscUJBQXFCO3NCQUE5QixNQUFNO2dCQUNHLG9CQUFvQjtzQkFBN0IsTUFBTTtnQkFDRyxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyx1QkFBdUI7c0JBQWhDLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxpQ0FBaUM7c0JBQTFDLE1BQU07Z0JBQ0csdUNBQXVDO3NCQUFoRCxNQUFNO2dCQUVHLHNDQUFzQztzQkFBL0MsTUFBTTtnQkFHRywrQkFBK0I7c0JBQXhDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudFJlZixcclxuICBEaXJlY3RpdmUsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFR5cGUsXHJcbiAgVmlld0NvbnRhaW5lclJlZixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgRmllbGRDb25maWcgfSBmcm9tICcuLi8uLi9tb2RlbHMvZmllbGQtY29uZmlnLm1vZGVsJztcclxuaW1wb3J0IHsgRm9ybUZpZWxkIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2Zvcm0tZmllbGQubW9kZWwnO1xyXG5pbXBvcnQgeyBJbnB1dENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvaW5wdXQvaW5wdXQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQXV0b2NvbXBsZXRlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9hdXRvY29tcGxldGUvYXV0b2NvbXBsZXRlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENoZWNrYm94Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9jaGVja2JveC9jaGVja2JveC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBEYXRlUGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBSYWRpb0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvcmFkaW8vcmFkaW8uY29tcG9uZW50JztcclxuaW1wb3J0IHsgU2VhcmNoQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9zZWFyY2gvc2VhcmNoLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFNlbGVjdENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvc2VsZWN0L3NlbGVjdC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUZXh0QXJlYUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvdGV4dC1hcmVhL3RleHQtYXJlYS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbFR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvZm9ybS1jb250cm9sLXR5cGVzLm1vZGVsJztcclxuaW1wb3J0IHsgQ2hlY2tib3hPcHRpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvY2hlY2tib3gtb3B0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgQWRkRm9ybUdyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9hZGQtZm9ybS1ncm91cC9hZGQtZm9ybS1ncm91cC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUaW1lUGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy90aW1lLXBpY2tlci90aW1lLXBpY2tlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTZWxlY3RlZERhdGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvc2VsZWN0ZWQtZGF0ZS5tb2RlbCc7XHJcbmltcG9ydCB7IFNlbGVjdGVkVGltZSB9IGZyb20gJy4uLy4uL21vZGVscy9zZWxlY3RlZC10aW1lLm1vZGVsJztcclxuaW1wb3J0IHsgTGlua0V2ZW50RW1pdFR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvZXZlbnQtZW1pdC10eXBlLm1vZGVsJztcclxuaW1wb3J0IHsgU2xpZGVUb2dnbGVDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3NsaWRlLXRvZ2dsZS9zbGlkZS10b2dnbGUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU2xpZGVUb2dnbGVPcHRpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvc2xpZGUtdG9nZ2xlLW9wdGlvbnMubW9kZWwnO1xyXG5pbXBvcnQgeyBGaWxlVXBsb2FkQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9maWxlLXVwbG9hZC9maWxlLXVwbG9hZC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTZWxlY3RPcGVuZWRTdGF0ZSB9IGZyb20gJy4uLy4uL21vZGVscy9zZWxlY3Qtb3BlbmVkLXN0YXRlLm1vZGVsJztcclxuaW1wb3J0IHsgQ29sb3JQaWNrZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2NvbG9yLXBpY2tlci9jb2xvci1waWNrZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUmFkaW9PcHRpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvcmFkaW8tb3B0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgSWNvbkJ1dHRvbiB9IGZyb20gJy4uLy4uL21vZGVscy9pY29uLWJ1dHRvbi5tb2RlbCc7XHJcbmltcG9ydCB7IE11bHRpU2VsZWN0QXV0b2NvbXBsZXRlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9tdWx0aS1zZWxlY3QtYXV0b2NvbXBsZXRlL211bHRpLXNlbGVjdC1hdXRvY29tcGxldGUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQXV0b0NvbXBsZXRlT3B0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2F1dG9jb21wbGV0ZS1vcHRpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBSaWNoVGV4dEVkaXRvckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvcmljaC10ZXh0LWVkaXRvci9yaWNoLXRleHQtZWRpdG9yLmNvbXBvbmVudCc7XHJcblxyXG5jb25zdCBjb21wb25lbnRzOiB7IFt0eXBlOiBzdHJpbmddOiBUeXBlPEZvcm1GaWVsZD4gfSA9IHtcclxuICBbRm9ybUNvbnRyb2xUeXBlLklOUFVUXTogSW5wdXRDb21wb25lbnQsXHJcbiAgW0Zvcm1Db250cm9sVHlwZS5URVhUX0FSRUFdOiBUZXh0QXJlYUNvbXBvbmVudCxcclxuICBbRm9ybUNvbnRyb2xUeXBlLlNFTEVDVF06IFNlbGVjdENvbXBvbmVudCxcclxuICBbRm9ybUNvbnRyb2xUeXBlLlNFQVJDSF06IFNlYXJjaENvbXBvbmVudCxcclxuICBbRm9ybUNvbnRyb2xUeXBlLkRBVEVdOiBEYXRlUGlja2VyQ29tcG9uZW50LFxyXG4gIFtGb3JtQ29udHJvbFR5cGUuQ0hFQ0tCT1hdOiBDaGVja2JveENvbXBvbmVudCxcclxuICBbRm9ybUNvbnRyb2xUeXBlLlJBRElPXTogUmFkaW9Db21wb25lbnQsXHJcbiAgW0Zvcm1Db250cm9sVHlwZS5BVVRPX0NPTVBMRVRFXTogQXV0b2NvbXBsZXRlQ29tcG9uZW50LFxyXG4gIFtGb3JtQ29udHJvbFR5cGUuQUREX0ZPUk1fR1JPVVBdOiBBZGRGb3JtR3JvdXBDb21wb25lbnQsXHJcbiAgW0Zvcm1Db250cm9sVHlwZS5USU1FX1BJQ0tFUl06IFRpbWVQaWNrZXJDb21wb25lbnQsXHJcbiAgW0Zvcm1Db250cm9sVHlwZS5TTElERV9UT0dHTEVdOiBTbGlkZVRvZ2dsZUNvbXBvbmVudCxcclxuICBbRm9ybUNvbnRyb2xUeXBlLkNPTE9SX1BJQ0tFUl06IENvbG9yUGlja2VyQ29tcG9uZW50LFxyXG4gIFtGb3JtQ29udHJvbFR5cGUuRklMRV9VUExPQURdOiBGaWxlVXBsb2FkQ29tcG9uZW50LFxyXG4gIFtGb3JtQ29udHJvbFR5cGUuTVVMVElfU0VMRUNUX0FVVE9fQ09NUExFVEVdOlxyXG4gICAgTXVsdGlTZWxlY3RBdXRvY29tcGxldGVDb21wb25lbnQsXHJcbiAgW0Zvcm1Db250cm9sVHlwZS5SSUNIX1RFWFRfRURJVE9SXTogUmljaFRleHRFZGl0b3JDb21wb25lbnQsXHJcbn07XHJcblxyXG4vKipcclxuICogUHJvdmlkZXMgdGhlIGltcGxlbWVudGF0aW9uIG9mIER5bmFtaWNGb3JtRmllbGREaXJlY3RpdmUgd2hpY2ggaG9zdHMgYW5kIGNyZWF0ZXMgdGhlIGZvcm0gZmllbGRzIGNvbXBvbmVudHMgZHluYW1pY2FsbHkuXHJcbiAqIEBleHBvcnRcclxuICogQGNsYXNzIER5bmFtaWNGb3JtRmllbGREaXJlY3RpdmVcclxuICogQGltcGxlbWVudHMge0Zvcm1GaWVsZH1cclxuICogQGltcGxlbWVudHMge09uSW5pdH1cclxuICogQGltcGxlbWVudHMge09uRGVzdHJveX1cclxuICovXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnW2llZWVzYUR5bmFtaWNGb3JtRmllbGRdJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRHluYW1pY0Zvcm1GaWVsZERpcmVjdGl2ZSBpbXBsZW1lbnRzIEZvcm1GaWVsZCwgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIGRlc3Ryb3kkOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuICBwcml2YXRlIF9jb25maWchOiBGaWVsZENvbmZpZztcclxuICBwcml2YXRlIF9ncm91cCE6IEZvcm1Hcm91cDtcclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBmb3JtIGZpZWxkIGNvbmZpZ3VyYXRpb25cclxuICAgKiBAbWVtYmVyb2YgRHluYW1pY0Zvcm1GaWVsZERpcmVjdGl2ZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGNvbmZpZyh2YWx1ZTogRmllbGRDb25maWcpIHtcclxuICAgIHRoaXMuX2NvbmZpZyA9IHZhbHVlO1xyXG4gICAgaWYgKHRoaXMuY29tcG9uZW50KSB7XHJcbiAgICAgIHRoaXMubG9hZENvbXBvbmVudCgpO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXQgY29uZmlnKCk6IEZpZWxkQ29uZmlnIHtcclxuICAgIHJldHVybiB0aGlzLl9jb25maWc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBmb3JtIGdyb3VwXHJcbiAgICogQG1lbWJlcm9mIER5bmFtaWNGb3JtRmllbGREaXJlY3RpdmVcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBncm91cCh2YWx1ZTogRm9ybUdyb3VwKSB7XHJcbiAgICBpZiAodGhpcy5jb21wb25lbnQ/Lmluc3RhbmNlKSB7XHJcbiAgICAgIHRoaXMuY29tcG9uZW50Lmluc3RhbmNlLmdyb3VwID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9ncm91cCA9IHZhbHVlO1xyXG4gIH1cclxuICBnZXQgZ3JvdXAoKTogRm9ybUdyb3VwIHtcclxuICAgIHJldHVybiB0aGlzLl9ncm91cDtcclxuICB9XHJcblxyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgcHJpdmF0ZSBfc3VibWl0UmVzcG9uc2UhOiBhbnk7XHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgc3VibWl0IHJlc3BvbnNlIG9mIGZvcm0gc3VibWl0IGV2ZW50XHJcbiAgICogQG1lbWJlcm9mIER5bmFtaWNGb3JtRmllbGREaXJlY3RpdmVcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgc2V0IHN1Ym1pdFJlc3BvbnNlKHZhbHVlOiBhbnkpIHtcclxuICAgIGlmICh0aGlzLmNvbXBvbmVudD8uaW5zdGFuY2UpIHtcclxuICAgICAgdGhpcy5jb21wb25lbnQuaW5zdGFuY2Uuc3VibWl0UmVzcG9uc2UgPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHRoaXMuX3N1Ym1pdFJlc3BvbnNlID0gdmFsdWU7XHJcbiAgfVxyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgZ2V0IHN1Ym1pdFJlc3BvbnNlKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3VibWl0UmVzcG9uc2U7XHJcbiAgfVxyXG5cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIHByaXZhdGUgX3NlYXJjaFJlc3BvbnNlITogYW55O1xyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIGZvcm0gc2VhcmNoIHJlc3BvbnNlIG9mIGZvcm0gc2VhcmNoIGFwcGx5LlxyXG4gICAqIEBtZW1iZXJvZiBEeW5hbWljRm9ybUZpZWxkRGlyZWN0aXZlXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIHNldCBzZWFyY2hSZXNwb25zZSh2YWx1ZTogYW55KSB7XHJcbiAgICBpZiAodGhpcy5jb21wb25lbnQ/Lmluc3RhbmNlKSB7XHJcbiAgICAgIHRoaXMuY29tcG9uZW50Lmluc3RhbmNlLnNlYXJjaFJlc3BvbnNlID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9zZWFyY2hSZXNwb25zZSA9IHZhbHVlO1xyXG4gIH1cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIGdldCBzZWFyY2hSZXNwb25zZSgpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlYXJjaFJlc3BvbnNlO1xyXG4gIH1cclxuXHJcbiAgQE91dHB1dCgpIGZvcm1TZWFyY2hBcHBseSA9IG5ldyBFdmVudEVtaXR0ZXI8RXZlbnQ+KCk7XHJcbiAgQE91dHB1dCgpIGZvcm1Ecm9wZG93blNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4oKTtcclxuICBAT3V0cHV0KCkgZm9ybURhdGVTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8U2VsZWN0ZWREYXRlPigpO1xyXG4gIEBPdXRwdXQoKSBmb3JtVGltZVNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxTZWxlY3RlZFRpbWU+KCk7XHJcbiAgQE91dHB1dCgpIGZvcm1TZWxlY3RlZERhdGVSYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8e1xyXG4gICAgc3RhcnREYXRlOiBzdHJpbmc7XHJcbiAgICBlbmREYXRlOiBzdHJpbmc7XHJcbiAgfT4oKTtcclxuICBAT3V0cHV0KCkgZm9ybVNlbGVjdFNlYXJjaCA9IG5ldyBFdmVudEVtaXR0ZXI8e1xyXG4gICAgc2VhcmNoRXZlbnQ6IEV2ZW50O1xyXG4gICAgY29udHJvbE5hbWU6IHN0cmluZztcclxuICB9PigpO1xyXG4gIEBPdXRwdXQoKSBmb3JtQXV0b0NvbXBsZXRlU2VhcmNoID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcbiAgQE91dHB1dCgpIGF1dG9Db21wbGV0ZUNsZWFyU2VhcmNoVmFsdWUgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBAT3V0cHV0KCkgYXV0b0NvbXBsZXRlT3B0aW9uU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpO1xyXG4gIEBPdXRwdXQoKSBmb3JtQ2hlY2tib3hTZWxlY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPENoZWNrYm94T3B0aW9uPigpO1xyXG4gIEBPdXRwdXQoKSBmb3JtSW5wdXRWYWx1ZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nIHwgbnVtYmVyPigpO1xyXG4gIEBPdXRwdXQoKSBhZGRGb3JtR3JvdXAgPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpO1xyXG4gIEBPdXRwdXQoKSBzdXBwb3J0VGV4dExpbmtDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8TGlua0V2ZW50RW1pdFR5cGU+KCk7XHJcbiAgQE91dHB1dCgpIGZvcm1TbGlkZVRvZ2dsZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8U2xpZGVUb2dnbGVPcHRpb24+KCk7XHJcbiAgQE91dHB1dCgpIGRyb3Bkb3duT3BlbmVkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxTZWxlY3RPcGVuZWRTdGF0ZT4oKTtcclxuICBAT3V0cHV0KCkgZm9ybUNvbG9yUGlja2VyQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcbiAgQE91dHB1dCgpIGZvcm1GaWxlVXBsb2FkID0gbmV3IEV2ZW50RW1pdHRlcjxGaWxlIHwgRmlsZUxpc3Q+KCk7XHJcbiAgQE91dHB1dCgpIGZvcm1SYWRpb09wdGlvblNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxSYWRpb09wdGlvbj4oKTtcclxuICBAT3V0cHV0KCkgY3RhQnV0dG9uQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPEljb25CdXR0b24+KCk7XHJcbiAgQE91dHB1dCgpIGZvcm1NdWx0aVNlbGVjdEF1dG9Db21wbGV0ZVNlYXJjaCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gIEBPdXRwdXQoKSBtdWx0aVNlbGVjdEF1dG9Db21wbGV0ZUNsZWFyU2VhcmNoVmFsdWUgPVxyXG4gICAgbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcbiAgQE91dHB1dCgpIG11bHRpU2VsZWN0QXV0b0NvbXBsZXRlT3B0aW9uc1NlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxcclxuICAgIEF1dG9Db21wbGV0ZU9wdGlvbltdXHJcbiAgPigpO1xyXG4gIEBPdXRwdXQoKSBmb3JtUmljaFRleHRFZGl0b3JDb250ZW50Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBjb21wb25lbnQhOiBDb21wb25lbnRSZWY8YW55PjtcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMsIG5vLWVtcHR5LWZ1bmN0aW9uXHJcbiAgY29uc3RydWN0b3IocHVibGljIGNvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZikge31cclxuXHJcbiAgLyoqXHJcbiAgICogSW1wbGVtZW50YXRpb24gb2YgbmdPbkluaXQgbGlmZWN5Y2xlIGhvb2sgbWV0aG9kIHRvIGNhbGwgbG9hZENvbXBvbmVudHMgbWV0aG9kLlxyXG4gICAqIEBtZW1iZXJvZiBEeW5hbWljRm9ybUZpZWxkRGlyZWN0aXZlXHJcbiAgICovXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmxvYWRDb21wb25lbnQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgdGhlIGNvbXBvbmVudCBkeW5hbWljYWxseSBhbmQgaW5pdGlhbGl6ZXMgdGhlIGluc3RhbmNlIHByb3BlcnRpZXMgb2YgY3JlYXRlZCBjb21wb25lbnQsIGFsc28gaGFuZGxlcyB0aGUgY3JlYXRlZCBjb21wb25lbnQgZXZlbnRzLlxyXG4gICAqIEBtZW1iZXJvZiBEeW5hbWljRm9ybUZpZWxkRGlyZWN0aXZlXHJcbiAgICovXHJcbiAgbG9hZENvbXBvbmVudCgpOiB2b2lkIHtcclxuICAgIGlmICghY29tcG9uZW50c1t0aGlzLmNvbmZpZz8udHlwZV0pIHtcclxuICAgICAgY29uc3Qgc3VwcG9ydGVkVHlwZXMgPSBPYmplY3Qua2V5cyhjb21wb25lbnRzKS5qb2luKCcsICcpO1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYFRyeWluZyB0byB1c2UgYW4gdW5zdXBwb3J0ZWQgdHlwZSAoJHt0aGlzLmNvbmZpZy50eXBlfSkuXHJcbiAgICAgICAgICAgIFN1cHBvcnRlZCB0eXBlczogJHtzdXBwb3J0ZWRUeXBlc31gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNvbXBvbmVudCA9IHRoaXMuY29udGFpbmVyLmNyZWF0ZUNvbXBvbmVudChcclxuICAgICAgY29tcG9uZW50c1t0aGlzLmNvbmZpZz8udHlwZV1cclxuICAgICk7XHJcbiAgICBpZiAodGhpcy5jb21wb25lbnQ/Lmluc3RhbmNlKSB7XHJcbiAgICAgIHRoaXMuY29tcG9uZW50Lmluc3RhbmNlLmNvbmZpZyA9IHRoaXMuY29uZmlnO1xyXG4gICAgICB0aGlzLmNvbXBvbmVudC5pbnN0YW5jZS5ncm91cCA9IHRoaXMuZ3JvdXA7XHJcbiAgICAgIHRoaXMuY29tcG9uZW50Lmluc3RhbmNlLnN1Ym1pdFJlc3BvbnNlID0gdGhpcy5zdWJtaXRSZXNwb25zZTtcclxuICAgICAgdGhpcy5jb21wb25lbnQuaW5zdGFuY2Uuc2VhcmNoUmVzcG9uc2UgPSB0aGlzLnNlYXJjaFJlc3BvbnNlO1xyXG5cclxuICAgICAgaWYgKHRoaXMuY29uZmlnLnR5cGUgPT09IEZvcm1Db250cm9sVHlwZS5TRUFSQ0gpIHtcclxuICAgICAgICB0aGlzLmNvbXBvbmVudC5pbnN0YW5jZS5zZWFyY2hWYWx1ZVxyXG4gICAgICAgICAgPy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAgID8uc3Vic2NyaWJlKChldmVudDogRXZlbnQpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtU2VhcmNoQXBwbHkuZW1pdChldmVudCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZy50eXBlID09PSBGb3JtQ29udHJvbFR5cGUuQ0hFQ0tCT1gpIHtcclxuICAgICAgICB0aGlzLmNvbXBvbmVudC5pbnN0YW5jZS5jaGVja2JveFNlbGVjdGlvblxyXG4gICAgICAgICAgPy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAgID8uc3Vic2NyaWJlKChldmVudDogQ2hlY2tib3hPcHRpb24pID0+IHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtQ2hlY2tib3hTZWxlY3Rpb24uZW1pdChldmVudCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmNvbXBvbmVudC5pbnN0YW5jZS5jdGFCdXR0b25DbGlja1xyXG4gICAgICAgICAgPy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAgID8uc3Vic2NyaWJlKChldmVudDogSWNvbkJ1dHRvbikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmN0YUJ1dHRvbkNsaWNrLmVtaXQoZXZlbnQpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWcudHlwZSA9PT0gRm9ybUNvbnRyb2xUeXBlLlNFTEVDVCkge1xyXG4gICAgICAgIHRoaXMuY29tcG9uZW50Lmluc3RhbmNlLm9wdGlvblNlbGVjdGVkXHJcbiAgICAgICAgICA/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgICAgPy5zdWJzY3JpYmUoKGV2ZW50OiBFdmVudCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1Ecm9wZG93blNlbGVjdGVkLmVtaXQoZXZlbnQpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5jb21wb25lbnQuaW5zdGFuY2Uub3B0aW9uU2VhcmNoZWRcclxuICAgICAgICAgID8ucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgICA/LnN1YnNjcmliZSgoZXZlbnQ6IEV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybVNlbGVjdFNlYXJjaC5lbWl0KHtcclxuICAgICAgICAgICAgICBzZWFyY2hFdmVudDogZXZlbnQsXHJcbiAgICAgICAgICAgICAgY29udHJvbE5hbWU6IHRoaXMuY29uZmlnLmNvbnRyb2xOYW1lLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuY29tcG9uZW50Lmluc3RhbmNlLmRyb3Bkb3duT3BlbmVkQ2hhbmdlXHJcbiAgICAgICAgICA/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgICAgPy5zdWJzY3JpYmUoKGV2ZW50OiBTZWxlY3RPcGVuZWRTdGF0ZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmRyb3Bkb3duT3BlbmVkQ2hhbmdlLmVtaXQoZXZlbnQpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWcudHlwZSA9PT0gRm9ybUNvbnRyb2xUeXBlLkRBVEUpIHtcclxuICAgICAgICB0aGlzLmNvbXBvbmVudC5pbnN0YW5jZS5zZWxlY3RlZERhdGVcclxuICAgICAgICAgID8ucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgICA/LnN1YnNjcmliZSgoZXZlbnQ6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1EYXRlU2VsZWN0ZWQuZW1pdCh7XHJcbiAgICAgICAgICAgICAgZGF0ZTogZXZlbnQsXHJcbiAgICAgICAgICAgICAgY29udHJvbE5hbWU6IHRoaXMuY29uZmlnLmNvbnRyb2xOYW1lLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuY29tcG9uZW50Lmluc3RhbmNlLnNlbGVjdGVkRGF0ZVJhbmdlXHJcbiAgICAgICAgICA/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgICAgPy5zdWJzY3JpYmUoKGV2ZW50OiB7IHN0YXJ0RGF0ZTogc3RyaW5nOyBlbmREYXRlOiBzdHJpbmcgfSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1TZWxlY3RlZERhdGVSYW5nZS5lbWl0KGV2ZW50KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlnLnR5cGUgPT09IEZvcm1Db250cm9sVHlwZS5BVVRPX0NPTVBMRVRFKSB7XHJcbiAgICAgICAgdGhpcy5jb21wb25lbnQuaW5zdGFuY2UuYXV0b0NvbXBsZXRlU2VhcmNoVmFsdWVcclxuICAgICAgICAgID8ucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgICA/LnN1YnNjcmliZSgoZXZlbnQ6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1BdXRvQ29tcGxldGVTZWFyY2guZW1pdChldmVudCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmNvbXBvbmVudC5pbnN0YW5jZS5hdXRvQ29tcGxldGVDbGVhclNlYXJjaFZhbHVlXHJcbiAgICAgICAgICA/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgICAgPy5zdWJzY3JpYmUoKGV2ZW50OiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5hdXRvQ29tcGxldGVDbGVhclNlYXJjaFZhbHVlLmVtaXQoZXZlbnQpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5jb21wb25lbnQuaW5zdGFuY2UuYXV0b0NvbXBsZXRlT3B0aW9uU2VsZWN0ZWRcclxuICAgICAgICAgID8ucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgICA/LnN1YnNjcmliZSgoZXZlbnQ6IEV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYXV0b0NvbXBsZXRlT3B0aW9uU2VsZWN0ZWQuZW1pdChldmVudCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICB0aGlzLmNvbmZpZy50eXBlID09PSBGb3JtQ29udHJvbFR5cGUuTVVMVElfU0VMRUNUX0FVVE9fQ09NUExFVEVcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5jb21wb25lbnQuaW5zdGFuY2UubXVsdGlTZWxlY3RBdXRvQ29tcGxldGVTZWFyY2hWYWx1ZVxyXG4gICAgICAgICAgPy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAgID8uc3Vic2NyaWJlKChldmVudDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybU11bHRpU2VsZWN0QXV0b0NvbXBsZXRlU2VhcmNoLmVtaXQoZXZlbnQpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5jb21wb25lbnQuaW5zdGFuY2UubXVsdGlTZWxlY3RBdXRvQ29tcGxldGVDbGVhclNlYXJjaFZhbHVlXHJcbiAgICAgICAgICA/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgICAgPy5zdWJzY3JpYmUoKGV2ZW50OiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5tdWx0aVNlbGVjdEF1dG9Db21wbGV0ZUNsZWFyU2VhcmNoVmFsdWUuZW1pdChldmVudCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmNvbXBvbmVudC5pbnN0YW5jZS5tdWx0aVNlbGVjdEF1dG9Db21wbGV0ZU9wdGlvbnNTZWxlY3RlZFxyXG4gICAgICAgICAgPy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAgID8uc3Vic2NyaWJlKChldmVudDogQXV0b0NvbXBsZXRlT3B0aW9uW10pID0+IHtcclxuICAgICAgICAgICAgdGhpcy5tdWx0aVNlbGVjdEF1dG9Db21wbGV0ZU9wdGlvbnNTZWxlY3RlZC5lbWl0KGV2ZW50KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlnLnR5cGUgPT09IEZvcm1Db250cm9sVHlwZS5USU1FX1BJQ0tFUikge1xyXG4gICAgICAgIHRoaXMuY29tcG9uZW50Lmluc3RhbmNlLmZvcm1UaW1lU2VsZWN0ZWRcclxuICAgICAgICAgID8ucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgICA/LnN1YnNjcmliZSgoZXZlbnQ6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1UaW1lU2VsZWN0ZWQuZW1pdCh7XHJcbiAgICAgICAgICAgICAgdGltZTogZXZlbnQsXHJcbiAgICAgICAgICAgICAgY29udHJvbE5hbWU6IHRoaXMuY29tcG9uZW50Lmluc3RhbmNlLmNvbmZpZy5jb250cm9sTmFtZSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZy50eXBlID09PSBGb3JtQ29udHJvbFR5cGUuSU5QVVQpIHtcclxuICAgICAgICB0aGlzLmNvbXBvbmVudC5pbnN0YW5jZS5pbnB1dFZhbHVlQ2hhbmdlXHJcbiAgICAgICAgICA/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgICAgPy5zdWJzY3JpYmUoKGV2ZW50OiBzdHJpbmcgfCBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtSW5wdXRWYWx1ZS5lbWl0KGV2ZW50KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlnLnR5cGUgPT09IEZvcm1Db250cm9sVHlwZS5BRERfRk9STV9HUk9VUCkge1xyXG4gICAgICAgIHRoaXMuY29tcG9uZW50Lmluc3RhbmNlLmFkZEZvcm1Hcm91cFxyXG4gICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IEV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkRm9ybUdyb3VwLmVtaXQoZXZlbnQpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWcudHlwZSA9PT0gRm9ybUNvbnRyb2xUeXBlLlRFWFRfQVJFQSkge1xyXG4gICAgICAgIHRoaXMuY29tcG9uZW50Py5pbnN0YW5jZT8uc3VwcG9ydFRleHRMaW5rQ2xpY2tcclxuICAgICAgICAgID8ucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgICA/LnN1YnNjcmliZSgoZXZlbnQ6IExpbmtFdmVudEVtaXRUeXBlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc3VwcG9ydFRleHRMaW5rQ2xpY2suZW1pdChldmVudCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZy50eXBlID09PSBGb3JtQ29udHJvbFR5cGUuU0xJREVfVE9HR0xFKSB7XHJcbiAgICAgICAgdGhpcy5jb21wb25lbnQuaW5zdGFuY2Uuc2xpZGVUb2dnbGVDaGFuZ2VcclxuICAgICAgICAgID8ucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgICA/LnN1YnNjcmliZSgoZXZlbnQ6IFNsaWRlVG9nZ2xlT3B0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybVNsaWRlVG9nZ2xlQ2hhbmdlLmVtaXQoZXZlbnQpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWcudHlwZSA9PT0gRm9ybUNvbnRyb2xUeXBlLkNPTE9SX1BJQ0tFUikge1xyXG4gICAgICAgIHRoaXMuY29tcG9uZW50Lmluc3RhbmNlLmNvbG9yUGlja2VyQ2hhbmdlXHJcbiAgICAgICAgICA/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgICAgPy5zdWJzY3JpYmUoKGV2ZW50OiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtQ29sb3JQaWNrZXJDaGFuZ2UuZW1pdChldmVudCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZy50eXBlID09PSBGb3JtQ29udHJvbFR5cGUuRklMRV9VUExPQUQpIHtcclxuICAgICAgICB0aGlzLmNvbXBvbmVudC5pbnN0YW5jZS51cGxvYWRTZWxlY3RlZEZpbGVzXHJcbiAgICAgICAgICA/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgICAgPy5zdWJzY3JpYmUoKGV2ZW50OiBGaWxlIHwgRmlsZUxpc3QpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtRmlsZVVwbG9hZC5lbWl0KGV2ZW50KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlnLnR5cGUgPT09IEZvcm1Db250cm9sVHlwZS5SQURJTykge1xyXG4gICAgICAgIHRoaXMuY29tcG9uZW50Lmluc3RhbmNlLnNlbGVjdGVkUmFkaW9PcHRpb25cclxuICAgICAgICAgID8ucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgICA/LnN1YnNjcmliZSgoZXZlbnQ6IFJhZGlvT3B0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybVJhZGlvT3B0aW9uU2VsZWN0ZWQuZW1pdChldmVudCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZy50eXBlID09PSBGb3JtQ29udHJvbFR5cGUuUklDSF9URVhUX0VESVRPUikge1xyXG4gICAgICAgIHRoaXMuY29tcG9uZW50Lmluc3RhbmNlLnJpY2hUZXh0RWRpdG9yQ29udGVudENoYW5nZVxyXG4gICAgICAgICAgPy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAgID8uc3Vic2NyaWJlKChldmVudDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybVJpY2hUZXh0RWRpdG9yQ29udGVudENoYW5nZS5lbWl0KGV2ZW50KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbXBsZW1lbnRhdGlvbiBvZiBuZ09uRGVzdHJveSBsaWZlY3ljbGUgaG9vayBtZXRob2QgdG8gdW5zdWJzY3JpYmUgdGhlIG9wZW4gb2JzZXJ2YWJsZSBzdWJzY3JpcHRpb25zLlxyXG4gICAqIEBtZW1iZXJvZiBEeW5hbWljRm9ybUZpZWxkRGlyZWN0aXZlXHJcbiAgICovXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQtY29uZmlnLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJlc2VudGF0aW9uL3NyYy9saWIvbW9kZWxzL2ZpZWxkLWNvbmZpZy5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVmFsaWRhdG9yRm4gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IENoZWNrYm94T3B0aW9uIH0gZnJvbSAnLi4vbW9kZWxzL2NoZWNrYm94LW9wdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IERhdGVQaWNrZXIgfSBmcm9tICcuLi9tb2RlbHMvZGF0ZS1waWNrZXIubW9kZWwnO1xyXG5pbXBvcnQgeyBSYWRpb09wdGlvbiB9IGZyb20gJy4uL21vZGVscy9yYWRpby1vcHRpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBTZWFyY2hUeXBlIH0gZnJvbSAnLi4vbW9kZWxzL3NlYXJjaC5tb2RlbCc7XHJcbmltcG9ydCB7IFNlbGVjdE9wdGlvbiB9IGZyb20gJy4uL21vZGVscy9zZWxlY3Qtb3B0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgQXV0b0NvbXBsZXRlT3B0aW9uIH0gZnJvbSAnLi4vbW9kZWxzL2F1dG9jb21wbGV0ZS1vcHRpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBMaW5rVHlwZSB9IGZyb20gJy4vbGluay10eXBlLm1vZGVsJztcclxuaW1wb3J0IHsgU2xpZGVUb2dnbGVPcHRpb24gfSBmcm9tICcuL3NsaWRlLXRvZ2dsZS1vcHRpb25zLm1vZGVsJztcclxuaW1wb3J0IHsgQ29sb3JGb3JtYXQsIENvbG9yc0FuaW1hdGlvbiB9IGZyb20gJy4vY29sb3ItZm9ybWF0Lm1vZGVsJztcclxuaW1wb3J0IHsgQWxsb3dlZEZpbGVUeXBlcyB9IGZyb20gJy4vYWxsb3dlZC1maWxlLXR5cGVzLm1vZGVsJztcclxuaW1wb3J0IHsgRWRpdG9yQ29uZmlnIH0gZnJvbSAnbmd4LXNpbXBsZS10ZXh0LWVkaXRvcic7XHJcbmltcG9ydCB7IFZpZXdGaWxlc0Zvcm1hdCB9IGZyb20gJy4vdmlldy1maWxlcy1mb3JtYXQubW9kZWwnO1xyXG5pbXBvcnQgeyBBbGlnblR5cGUgfSBmcm9tICcuL2FsaWduLXR5cGUubW9kZWwnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBGaWVsZENvbmZpZyB7XHJcbiAgaXNTb3J0TmVlZGVkPzogYm9vbGVhbjtcclxuICBkaXNhYmxlZD86IGJvb2xlYW47XHJcbiAgbGFiZWw/OiBzdHJpbmc7XHJcbiAgY29udHJvbE5hbWU6IHN0cmluZztcclxuICBkcm9wZG93bk9wdGlvbnM/OiBTZWxlY3RPcHRpb25bXTtcclxuICBjaGVja2JveE9wdGlvbnM/OiBDaGVja2JveE9wdGlvbltdO1xyXG4gIGF1dG9Db21wbGV0ZU9wdGlvbnM/OiBBdXRvQ29tcGxldGVPcHRpb25bXTtcclxuICByYWRpb09wdGlvbnM/OiBSYWRpb09wdGlvbltdO1xyXG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xyXG4gIHR5cGU6IHN0cmluZztcclxuICByZXF1aXJlZEVycm9yTWVzc2FnZT86IHN0cmluZztcclxuICBwYXR0ZXJuRXJyb3JNZXNzYWdlPzogc3RyaW5nO1xyXG4gIGludmFsaWRFbWFpbEVycm9yTWVzc2FnZT86IHN0cmluZztcclxuICBtaW5FcnJvck1lc3NhZ2U/OiBzdHJpbmc7XHJcbiAgbWF4RXJyb3JNZXNzYWdlPzogc3RyaW5nO1xyXG4gIHN1cHBvcnRNZXNzYWdlPzogc3RyaW5nO1xyXG4gIHZhbGlkYXRpb24/OiBWYWxpZGF0b3JGbltdO1xyXG4gIGlzTXVsdGlTZWxlY3Q/OiBib29sZWFuO1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgdmFsdWU/OiBhbnk7XHJcbiAgaXNOdW1iZXI/OiBib29sZWFuO1xyXG4gIGlzRW1haWw/OiBib29sZWFuO1xyXG4gIG1pbj86IG51bWJlcjtcclxuICBtYXg/OiBudW1iZXI7XHJcbiAgbWF4TGVuZ3RoPzogbnVtYmVyO1xyXG4gIG1pbkxlbmd0aD86IG51bWJlcjtcclxuICBpc0ludGVnZXI/OiBib29sZWFuO1xyXG4gIGlzUmVzaXplPzogYm9vbGVhbjtcclxuICBpc1JlYWRvbmx5PzogYm9vbGVhbjtcclxuICBpc0xhYmVsQWxpZ25lZExlZnQ/OiBib29sZWFuO1xyXG4gIGRhdGVQaWNrZXI/OiBEYXRlUGlja2VyO1xyXG4gIHNlYXJjaFR5cGU/OiBTZWFyY2hUeXBlO1xyXG4gIGRhdGVSYW5nZUNvbnRyb2xzPzogeyBzdGFydERhdGU6IHN0cmluZzsgZW5kRGF0ZTogc3RyaW5nIH07XHJcbiAgY2xlYXI/OiBib29sZWFuO1xyXG4gIGFyaWFMYWJlbD86IHN0cmluZztcclxuICBhcmlhRGVzY3JpYmVkQnlJZD86IHN0cmluZztcclxuICBhcmlhTXVsdGlsaW5lPzogYm9vbGVhbjtcclxuICBtaW5TZWxlY3Rpb25SZXF1aXJlZD86IG51bWJlcjtcclxuICBtYXhDaGFyQ291bnQ/OiBudW1iZXI7XHJcbiAgcmVtYWluaW5nQ2hhcnNMZWZ0TWVzc2FnZT86IHN0cmluZztcclxuICBuYW1lPzogc3RyaW5nO1xyXG4gIG1heFJhbmdlTGltaXQ/OiBudW1iZXI7XHJcbiAgaG91cjI0PzogbnVtYmVyO1xyXG4gIGhvdXIxMj86IG51bWJlcjtcclxuICBpc1NlYXJjaD86IGJvb2xlYW47XHJcbiAgaW52YWxpZERhdGVUaW1lRXJyb3JNZXNzYWdlPzogc3RyaW5nO1xyXG4gIGlzMjRIb3Vyc1RpbWVGb3JtYXQ/OiBib29sZWFuO1xyXG4gIGxpbmtUeXBlPzogTGlua1R5cGU7XHJcbiAgc2xpZGVUb2dnbGVPcHRpb24/OiBTbGlkZVRvZ2dsZU9wdGlvbjtcclxuICBpc011bHRpRmlsZVVwbG9hZD86IGJvb2xlYW47XHJcbiAgbWF4VXBsb2FkRmlsZVNpemU/OiBudW1iZXI7XHJcbiAgYWxsb3dlZEZpbGVUeXBlcz86IEFsbG93ZWRGaWxlVHlwZXNbXTtcclxuICBtYXhGaWxlU2l6ZUVycm9yTWVzc2FnZT86IHN0cmluZztcclxuICBpc0ZpbGVTZWxlY3RlZD86IGJvb2xlYW47XHJcbiAgYWxsb3dlZEZpbGVUeXBlRXJyb3JNZXNzYWdlPzogc3RyaW5nO1xyXG4gIGludmFsaWREYXRlUmFuZ2VFcnJvck1lc3NhZ2U/OiBzdHJpbmc7XHJcbiAgaW52YWxpZENvbG9yRXJyb3JNZXNzYWdlPzogc3RyaW5nO1xyXG4gIHBhbGV0dGU/OiBzdHJpbmdbXTtcclxuICBmaWxlVXBsb2FkSGVhZGluZz86IHN0cmluZztcclxuICBkZWZhdWx0Q29sb3I/OiBzdHJpbmc7XHJcbiAgY29sb3JGb3JtYXQ/OiBDb2xvckZvcm1hdDtcclxuICBvdmVybGF5Q2xhc3NOYW1lPzogc3RyaW5nO1xyXG4gIGNvbG9yQW5pbWF0aW9uPzogQ29sb3JzQW5pbWF0aW9uO1xyXG4gIHBhbGV0dGVTZWxlY3RMYWJlbD86IHN0cmluZztcclxuICBwYWxldHRlQ2FuY2VsTGFiZWw/OiBzdHJpbmc7XHJcbiAgaXNDb2xvckNvZGVMYWJlbE5lZWRlZD86IGJvb2xlYW47XHJcbiAgaXNBcnJvd0ljb25OZWVkZWQ/OiBib29sZWFuO1xyXG4gIGNhbkhpZGVDb2xvclBpY2tlcj86IGJvb2xlYW47XHJcbiAgY2FuSGlkZVRleHRJbnB1dD86IGJvb2xlYW47XHJcbiAgbXVsdGlTZWxlY3RBdXRvQ29tcGxldGVPcHRpb25zPzogQXV0b0NvbXBsZXRlT3B0aW9uW107XHJcbiAgZWRpdG9yQ29uZmlnPzogRWRpdG9yQ29uZmlnO1xyXG4gIGlzQWxsb3dBbnlGaWxlVHlwZT86IGJvb2xlYW47XHJcbiAgdmlld0ZpbGVzRm9ybWF0PzogVmlld0ZpbGVzRm9ybWF0O1xyXG4gIGlzVXBsb2FkQnV0dG9uTmVlZGVkPzogYm9vbGVhbjtcclxuICBhY3Rpb25CdXR0b25BbGlnbj86IEFsaWduVHlwZTtcclxuICBmaWxlVXBsb2FkRXJyb3JQb3NpdGlvbj86IHN0cmluZztcclxuICBtYXhGaWxlc1VwbG9hZExpbWl0PzogbnVtYmVyO1xyXG4gIG1heEZpbGVzVXBsb2FkTGltaXRFcnJvck1lc3NhZ2U/OiBzdHJpbmc7XHJcbn1cclxuIl19
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQtY29uZmlnLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJlc2VudGF0aW9uL3NyYy9saWIvbW9kZWxzL2ZpZWxkLWNvbmZpZy5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVmFsaWRhdG9yRm4gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IENoZWNrYm94T3B0aW9uIH0gZnJvbSAnLi4vbW9kZWxzL2NoZWNrYm94LW9wdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IERhdGVQaWNrZXIgfSBmcm9tICcuLi9tb2RlbHMvZGF0ZS1waWNrZXIubW9kZWwnO1xyXG5pbXBvcnQgeyBSYWRpb09wdGlvbiB9IGZyb20gJy4uL21vZGVscy9yYWRpby1vcHRpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBTZWFyY2hUeXBlIH0gZnJvbSAnLi4vbW9kZWxzL3NlYXJjaC5tb2RlbCc7XHJcbmltcG9ydCB7IFNlbGVjdE9wdGlvbiB9IGZyb20gJy4uL21vZGVscy9zZWxlY3Qtb3B0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgQXV0b0NvbXBsZXRlT3B0aW9uIH0gZnJvbSAnLi4vbW9kZWxzL2F1dG9jb21wbGV0ZS1vcHRpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBMaW5rVHlwZSB9IGZyb20gJy4vbGluay10eXBlLm1vZGVsJztcclxuaW1wb3J0IHsgU2xpZGVUb2dnbGVPcHRpb24gfSBmcm9tICcuL3NsaWRlLXRvZ2dsZS1vcHRpb25zLm1vZGVsJztcclxuaW1wb3J0IHsgQ29sb3JGb3JtYXQsIENvbG9yc0FuaW1hdGlvbiB9IGZyb20gJy4vY29sb3ItZm9ybWF0Lm1vZGVsJztcclxuaW1wb3J0IHsgQWxsb3dlZEZpbGVUeXBlcyB9IGZyb20gJy4vYWxsb3dlZC1maWxlLXR5cGVzLm1vZGVsJztcclxuaW1wb3J0IHsgRWRpdG9yQ29uZmlnIH0gZnJvbSAnbmd4LXNpbXBsZS10ZXh0LWVkaXRvcic7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEZpZWxkQ29uZmlnIHtcclxuICBpc1NvcnROZWVkZWQ/OiBib29sZWFuO1xyXG4gIGRpc2FibGVkPzogYm9vbGVhbjtcclxuICBsYWJlbD86IHN0cmluZztcclxuICBjb250cm9sTmFtZTogc3RyaW5nO1xyXG4gIGRyb3Bkb3duT3B0aW9ucz86IFNlbGVjdE9wdGlvbltdO1xyXG4gIGNoZWNrYm94T3B0aW9ucz86IENoZWNrYm94T3B0aW9uW107XHJcbiAgYXV0b0NvbXBsZXRlT3B0aW9ucz86IEF1dG9Db21wbGV0ZU9wdGlvbltdO1xyXG4gIHJhZGlvT3B0aW9ucz86IFJhZGlvT3B0aW9uW107XHJcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XHJcbiAgdHlwZTogc3RyaW5nO1xyXG4gIHJlcXVpcmVkRXJyb3JNZXNzYWdlPzogc3RyaW5nO1xyXG4gIHBhdHRlcm5FcnJvck1lc3NhZ2U/OiBzdHJpbmc7XHJcbiAgaW52YWxpZEVtYWlsRXJyb3JNZXNzYWdlPzogc3RyaW5nO1xyXG4gIG1pbkVycm9yTWVzc2FnZT86IHN0cmluZztcclxuICBtYXhFcnJvck1lc3NhZ2U/OiBzdHJpbmc7XHJcbiAgc3VwcG9ydE1lc3NhZ2U/OiBzdHJpbmc7XHJcbiAgdmFsaWRhdGlvbj86IFZhbGlkYXRvckZuW107XHJcbiAgaXNNdWx0aVNlbGVjdD86IGJvb2xlYW47XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICB2YWx1ZT86IGFueTtcclxuICBpc051bWJlcj86IGJvb2xlYW47XHJcbiAgaXNFbWFpbD86IGJvb2xlYW47XHJcbiAgbWluPzogbnVtYmVyO1xyXG4gIG1heD86IG51bWJlcjtcclxuICBtYXhMZW5ndGg/OiBudW1iZXI7XHJcbiAgbWluTGVuZ3RoPzogbnVtYmVyO1xyXG4gIGlzSW50ZWdlcj86IGJvb2xlYW47XHJcbiAgaXNSZXNpemU/OiBib29sZWFuO1xyXG4gIGlzUmVhZG9ubHk/OiBib29sZWFuO1xyXG4gIGlzTGFiZWxBbGlnbmVkTGVmdD86IGJvb2xlYW47XHJcbiAgZGF0ZVBpY2tlcj86IERhdGVQaWNrZXI7XHJcbiAgc2VhcmNoVHlwZT86IFNlYXJjaFR5cGU7XHJcbiAgZGF0ZVJhbmdlQ29udHJvbHM/OiB7IHN0YXJ0RGF0ZTogc3RyaW5nOyBlbmREYXRlOiBzdHJpbmcgfTtcclxuICBjbGVhcj86IGJvb2xlYW47XHJcbiAgYXJpYUxhYmVsPzogc3RyaW5nO1xyXG4gIGFyaWFEZXNjcmliZWRCeUlkPzogc3RyaW5nO1xyXG4gIGFyaWFNdWx0aWxpbmU/OiBib29sZWFuO1xyXG4gIG1pblNlbGVjdGlvblJlcXVpcmVkPzogbnVtYmVyO1xyXG4gIG1heENoYXJDb3VudD86IG51bWJlcjtcclxuICByZW1haW5pbmdDaGFyc0xlZnRNZXNzYWdlPzogc3RyaW5nO1xyXG4gIG5hbWU/OiBzdHJpbmc7XHJcbiAgbWF4UmFuZ2VMaW1pdD86IG51bWJlcjtcclxuICBob3VyMjQ/OiBudW1iZXI7XHJcbiAgaG91cjEyPzogbnVtYmVyO1xyXG4gIGlzU2VhcmNoPzogYm9vbGVhbjtcclxuICBpbnZhbGlkRGF0ZVRpbWVFcnJvck1lc3NhZ2U/OiBzdHJpbmc7XHJcbiAgaXMyNEhvdXJzVGltZUZvcm1hdD86IGJvb2xlYW47XHJcbiAgbGlua1R5cGU/OiBMaW5rVHlwZTtcclxuICBzbGlkZVRvZ2dsZU9wdGlvbj86IFNsaWRlVG9nZ2xlT3B0aW9uO1xyXG4gIGlzTXVsdGlGaWxlVXBsb2FkPzogYm9vbGVhbjtcclxuICBtYXhVcGxvYWRGaWxlU2l6ZT86IG51bWJlcjtcclxuICBhbGxvd2VkRmlsZVR5cGVzPzogQWxsb3dlZEZpbGVUeXBlc1tdO1xyXG4gIG1heEZpbGVTaXplRXJyb3JNZXNzYWdlPzogc3RyaW5nO1xyXG4gIGlzRmlsZVNlbGVjdGVkPzogYm9vbGVhbjtcclxuICBhbGxvd2VkRmlsZVR5cGVFcnJvck1lc3NhZ2U/OiBzdHJpbmc7XHJcbiAgaW52YWxpZERhdGVSYW5nZUVycm9yTWVzc2FnZT86IHN0cmluZztcclxuICBpbnZhbGlkQ29sb3JFcnJvck1lc3NhZ2U/OiBzdHJpbmc7XHJcbiAgcGFsZXR0ZT86IHN0cmluZ1tdO1xyXG4gIGZpbGVVcGxvYWRIZWFkaW5nPzogc3RyaW5nO1xyXG4gIGRlZmF1bHRDb2xvcj86IHN0cmluZztcclxuICBjb2xvckZvcm1hdD86IENvbG9yRm9ybWF0O1xyXG4gIG92ZXJsYXlDbGFzc05hbWU/OiBzdHJpbmc7XHJcbiAgY29sb3JBbmltYXRpb24/OiBDb2xvcnNBbmltYXRpb247XHJcbiAgcGFsZXR0ZVNlbGVjdExhYmVsPzogc3RyaW5nO1xyXG4gIHBhbGV0dGVDYW5jZWxMYWJlbD86IHN0cmluZztcclxuICBpc0NvbG9yQ29kZUxhYmVsTmVlZGVkPzogYm9vbGVhbjtcclxuICBpc0Fycm93SWNvbk5lZWRlZD86IGJvb2xlYW47XHJcbiAgY2FuSGlkZUNvbG9yUGlja2VyPzogYm9vbGVhbjtcclxuICBjYW5IaWRlVGV4dElucHV0PzogYm9vbGVhbjtcclxuICBtdWx0aVNlbGVjdEF1dG9Db21wbGV0ZU9wdGlvbnM/OiBBdXRvQ29tcGxldGVPcHRpb25bXTtcclxuICBlZGl0b3JDb25maWc/OiBFZGl0b3JDb25maWc7XHJcbn1cclxuIl19
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJlc2VudGF0aW9uL3NyYy9saWIvbW9kZWxzL3RhYi5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBUYWIge1xyXG4gIGlkOiBudW1iZXIgfCBzdHJpbmc7XHJcbiAgbGFiZWw6IHN0cmluZztcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIGNvbXBvbmVudFJlZjogYW55O1xyXG4gIGRpc2FibGVkPzogYm9vbGVhbjtcclxufVxyXG4iXX0=
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJlc2VudGF0aW9uL3NyYy9saWIvbW9kZWxzL3RhYi5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBUYWIge1xyXG4gIGlkOiBudW1iZXIgfCBzdHJpbmc7XHJcbiAgbGFiZWw6IHN0cmluZztcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIGNvbXBvbmVudFJlZjogYW55O1xyXG59XHJcbiJdfQ==
@@ -1,7 +1,7 @@
1
1
  import { HttpClient, HttpEventType, HttpHeaders, } from '@angular/common/http';
2
2
  import { Injectable } from '@angular/core';
3
3
  import { AlertType, } from '@ieeesa-npm/utility';
4
- import { catchError, concatMap, from, last, map, Subject, take, takeUntil, tap, } from 'rxjs';
4
+ import { catchError, last, map, Subject, takeUntil, tap, } from 'rxjs';
5
5
  import * as constants from '../assets/constants.json';
6
6
  import * as i0 from "@angular/core";
7
7
  import * as i1 from "@ieeesa-npm/utility";
@@ -24,8 +24,6 @@ export class FileUploadService {
24
24
  this.destroy$ = new Subject();
25
25
  this.constants = constants;
26
26
  this.isFileUploading = false;
27
- this.filesUploadedSuccessfullyCount = 0;
28
- this.uploadedFileName = '';
29
27
  this.httpClient = new HttpClient(handler);
30
28
  }
31
29
  /**
@@ -63,73 +61,34 @@ export class FileUploadService {
63
61
  }));
64
62
  }
65
63
  /**
66
- * Gets pre-signed URL for the files to be uploaded in S3 bucket
67
- * @param fileUploadPayload
68
- * @param fileUploadAPIPath
69
- */
70
- getPreSignedURL(fileUploadPayload, fileUploadAPIPath = '') {
71
- return this.httpService
72
- .postData(`${this.apiBaseUrl}/${fileUploadAPIPath}`, fileUploadPayload)
73
- .pipe(map((response) => {
74
- return response;
75
- }), catchError((errorRes) => {
76
- throw errorRes;
77
- }));
78
- }
79
- /**
80
- * Uploads file to AWS S3 using a pre-signed URL.
81
- * @param {string} preSignedUrl
82
- * @param files
83
- * @param isMultipleFileUpload
64
+ * Uploads file to AWS S3 using a presigned URL.
65
+ * @param {string} presignedUrl
66
+ * @param {(File | FileList)} file
84
67
  * @return {Observable<any>} -Returns an observable that emits the response after uploading the file to S3.
85
68
  * @memberof FileUploadService
86
69
  */
87
- uploadFileToS3(preSignedUrl, files, isMultipleFileUpload = false
88
70
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
89
- ) {
71
+ uploadFileToS3(presignedUrl, file) {
90
72
  this.loaderNotificationService.show();
91
- const filesArray = [];
92
- this.filesNamesUploadFailed = [];
93
- this.uploadedFileName = '';
94
- if (isMultipleFileUpload) {
95
- Object.values(files).forEach((file) => {
96
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
97
- const indexForPreSignedUrl = preSignedUrl.findIndex((x) => x.fileName === file.name);
98
- filesArray.push({
99
- preSignedUrl: preSignedUrl[indexForPreSignedUrl]?.preSignedUrl,
100
- fileObj: file,
101
- fileType: file.type,
102
- fileSize: file.size,
103
- });
104
- });
73
+ let fileType = '';
74
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
75
+ let fileSize;
76
+ let fileObj;
77
+ if (Object.values(file).length) {
78
+ fileType = Object.values(file)[0].type;
79
+ fileSize = Object.values(file)[0].size;
80
+ fileObj = Object.values(file)[0];
105
81
  }
106
82
  else {
107
- filesArray.push({
108
- preSignedUrl: preSignedUrl,
109
- fileObj: files,
110
- fileType: files.type,
111
- fileSize: files.size,
112
- });
83
+ fileType = file.type;
84
+ fileSize = file.size;
85
+ fileObj = file;
113
86
  }
114
- return from(filesArray).pipe(concatMap((file) => this.httpCallToAWS(file.preSignedUrl, file.fileObj, file.fileType, file.fileSize)), take(filesArray.length));
115
- }
116
- /**
117
- * Makes http call to AWS to upload file in S3 bucket
118
- * @param {string} preSignedUrl
119
- * @param {File} file
120
- * @param {string} fileType
121
- * @param {number} fileSize
122
- * @return {*} {Observable<any>}
123
- * @memberof FileUploadService
124
- */
125
- httpCallToAWS(preSignedUrl, file, fileType, fileSize
126
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
127
- ) {
128
87
  const headers = new HttpHeaders();
129
- headers.append('Content-Type', fileType.toString());
130
- headers.append('Content-Length', fileSize.toString());
88
+ headers.append('Content-Type', fileType);
89
+ headers.append('Content-Length', fileSize);
131
90
  return this.httpClient
132
- .put(preSignedUrl, file, {
91
+ .put(presignedUrl, fileObj, {
133
92
  reportProgress: true,
134
93
  observe: 'events',
135
94
  headers: headers,
@@ -155,11 +114,16 @@ export class FileUploadService {
155
114
  */
156
115
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
157
116
  getEventMessage(event, file) {
158
- console.log('Event from file upload to AWS', event);
159
117
  let fileName = '';
160
118
  let fileSize = 0;
161
- fileName = file.name;
162
- fileSize = file.size;
119
+ if (Object.values(file).length) {
120
+ fileName = Object.values(file)[0].name;
121
+ fileSize = Object.values(file)[0].size;
122
+ }
123
+ else {
124
+ fileName = file.name;
125
+ fileSize = file.size;
126
+ }
163
127
  switch (event.type) {
164
128
  case HttpEventType.Sent:
165
129
  return `Uploading file "${fileName}" of size ${fileSize}.`;
@@ -171,15 +135,7 @@ export class FileUploadService {
171
135
  return `File "${fileName}" is ${percentDone}% uploaded.`;
172
136
  case HttpEventType.Response:
173
137
  this.loaderNotificationService.hide();
174
- if (event.status === 200) {
175
- this.filesUploadedSuccessfullyCount++;
176
- this.uploadedFileName = fileName;
177
- return true;
178
- }
179
- else {
180
- this.filesNamesUploadFailed.push(fileName);
181
- return false;
182
- }
138
+ return true;
183
139
  default:
184
140
  return `File "${fileName}" surprising upload event: ${event.type}.`;
185
141
  }
@@ -328,26 +284,6 @@ export class FileUploadService {
328
284
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
329
285
  return fileName?.split('.').pop().toLowerCase();
330
286
  }
331
- /**
332
- * Deletes file by given fileId
333
- * @param {string} fileId
334
- * @return {*} {Observable<DeleteFileResponse>}
335
- * @memberof FileUploadService
336
- */
337
- deleteFile(deleteFileApiPath) {
338
- const deleteFilePayload = {
339
- // Assign data here if needed to send any payload in body
340
- // example below
341
- // fileId: arguments[0],
342
- };
343
- return this.httpService
344
- .putData(`${this.apiBaseUrl}/${deleteFileApiPath}`, Object.keys(deleteFilePayload).length ? deleteFilePayload : {})
345
- .pipe(map((response) => {
346
- return response;
347
- }), catchError((error) => {
348
- throw error;
349
- }));
350
- }
351
287
  /**
352
288
  * Implementation of ngOnDestroy lifecycle hook method to unsubscribe the open observable subscriptions.
353
289
  * @memberof FileUploadService
@@ -365,4 +301,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
365
301
  providedIn: 'root',
366
302
  }]
367
303
  }], ctorParameters: function () { return [{ type: i1.HttpService }, { type: i2.HttpBackend }, { type: i1.AlertsService }, { type: i1.LoaderNotificationService }]; } });
368
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS11cGxvYWQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ByZXNlbnRhdGlvbi9zcmMvbGliL3NlcnZpY2VzL2ZpbGUtdXBsb2FkLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFVBQVUsRUFFVixhQUFhLEVBQ2IsV0FBVyxHQUNaLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLFVBQVUsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUN0RCxPQUFPLEVBRUwsU0FBUyxHQUdWLE1BQU0scUJBQXFCLENBQUM7QUFNN0IsT0FBTyxFQUNMLFVBQVUsRUFDVixTQUFTLEVBQ1QsSUFBSSxFQUNKLElBQUksRUFDSixHQUFHLEVBRUgsT0FBTyxFQUNQLElBQUksRUFDSixTQUFTLEVBQ1QsR0FBRyxHQUNKLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxLQUFLLFNBQVMsTUFBTSwwQkFBMEIsQ0FBQzs7OztBQVd0RDs7O0dBR0c7QUFJSCxNQUFNLE9BQU8saUJBQWlCO0lBVzVCO0lBQ0UsMENBQTBDO0lBQ25DLFdBQXdCLEVBQy9CLE9BQW9CO0lBQ3BCLDBDQUEwQztJQUNuQyxZQUEyQjtJQUNsQywwQ0FBMEM7SUFDbkMseUJBQW9EO1FBTHBELGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBR3hCLGlCQUFZLEdBQVosWUFBWSxDQUFlO1FBRTNCLDhCQUF5QixHQUF6Qix5QkFBeUIsQ0FBMkI7UUFqQjdELGFBQVEsR0FBcUIsSUFBSSxPQUFPLEVBQVcsQ0FBQztRQUNwRCxjQUFTLEdBQUcsU0FBUyxDQUFDO1FBSXRCLG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBRXhCLG1DQUE4QixHQUFHLENBQUMsQ0FBQztRQUNuQyxxQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFXcEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJ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LENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDbkIsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ04sQ0FBQztJQUVEOzs7T0FHRztJQUNILFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzlCLENBQUM7K0dBOWFVLGlCQUFpQjttSEFBakIsaUJBQWlCLGNBRmhCLE1BQU07OzRGQUVQLGlCQUFpQjtrQkFIN0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEh0dHBCYWNrZW5kLFxyXG4gIEh0dHBDbGllbnQsXHJcbiAgSHR0cEV2ZW50LFxyXG4gIEh0dHBFdmVudFR5cGUsXHJcbiAgSHR0cEhlYWRlcnMsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBBbGVydHNTZXJ2aWNlLFxyXG4gIEFsZXJ0VHlwZSxcclxuICBIdHRwU2VydmljZSxcclxuICBMb2FkZXJOb3RpZmljYXRpb25TZXJ2aWNlLFxyXG59IGZyb20gJ0BpZWVlc2EtbnBtL3V0aWxpdHknO1xyXG5pbXBvcnQge1xyXG4gIEZpbGVVcGxvYWRQcmVzaWduZWRVcmwsXHJcbiAgR2V0RmlsZURvd25sb2FkUHJlc2lnbmVkVXJsUGF5bG9hZCxcclxuICBHZXRGaWxlVXBsb2FkUHJlc2lnbmVkVXJsUGF5bG9hZCxcclxufSBmcm9tICcuLi9tb2RlbHMvZmlsZS11cGxvYWQtcHJlc2lnbmVkLXVybC1yZXMubW9kZWwnO1xyXG5pbXBvcnQge1xyXG4gIGNhdGNoRXJyb3IsXHJcbiAgY29uY2F0TWFwLFxyXG4gIGZyb20sXHJcbiAgbGFzdCxcclxuICBtYXAsXHJcbiAgT2JzZXJ2YWJsZSxcclxuICBTdWJqZWN0LFxyXG4gIHRha2UsXHJcbiAgdGFrZVVudGlsLFxyXG4gIHRhcCxcclxufSBmcm9tICdyeGpzJztcclxuaW1wb3J0ICogYXMgY29uc3RhbnRzIGZyb20gJy4uL2Fzc2V0cy9jb25zdGFudHMuanNvbic7XHJcbmltcG9ydCB7IEZpbGVVcGxvYWRQYXlsb2FkIH0gZnJvbSAnLi4vbW9kZWxzL2ZpbGUtdXBsb2FkLXBheWxvYWQtbW9kZWwnO1xyXG5pbXBvcnQge1xyXG4gIEZpbGVVcGxvYWRCb2R5UmVzcG9uc2UsXHJcbiAgRmlsZVVwbG9hZFJlc3BvbnNlLFxyXG59IGZyb20gJy4uL21vZGVscy9maWxlLXVwbG9hZC1yZXNwb25zZS5tb2RlbCc7XHJcbmltcG9ydCB7XHJcbiAgRGVsZXRlRmlsZVBheWxvYWQsXHJcbiAgRGVsZXRlRmlsZVJlc3BvbnNlLFxyXG59IGZyb20gJy4uL21vZGVscy9kZWxldGUtZmlsZS5tb2RlbCc7XHJcblxyXG4vKipcclxuICogVGhpcyBzZXJ2aWNlIGludGVyYWN0cyB3aXRoIHRoZSBzZXJ2ZXIgdG8gb2J0YWluIHByZS1zaWduZWQgVVJMcyBmb3IgZmlsZSB1cGxvYWQgYW5kIHVwbG9hZHMgZmlsZXMgdG8gQW1hem9uIFMzLlxyXG4gKiBAY2xhc3MgRmlsZVVwbG9hZFNlcnZpY2VcclxuICovXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGaWxlVXBsb2FkU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcbiAgZGVzdHJveSQ6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xyXG4gIGNvbnN0YW50cyA9IGNvbnN0YW50cztcclxuICBhcGlCYXNlVXJsITogc3RyaW5nO1xyXG4gIGZpbGVCeXRlQXJyYXk6IFVpbnQ4QXJyYXkgfCB1bmRlZmluZWQ7XHJcbiAgaHR0cENsaWVudDogSHR0cENsaWVudDtcclxuICBpc0ZpbGVVcGxvYWRpbmcgPSBmYWxzZTtcclxuICBmaWxlc05hbWVzVXBsb2FkRmFpbGVkITogc3RyaW5nW107XHJcbiAgZmlsZXNVcGxvYWRlZFN1Y2Nlc3NmdWxseUNvdW50ID0gMDtcclxuICB1cGxvYWRlZEZpbGVOYW1lID0gJyc7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwdWJsaWMgaHR0cFNlcnZpY2U6IEh0dHBTZXJ2aWNlLFxyXG4gICAgaGFuZGxlcjogSHR0cEJhY2tlbmQsXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHB1YmxpYyBhbGVydFNlcnZpY2U6IEFsZXJ0c1NlcnZpY2UsXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHB1YmxpYyBsb2FkZXJOb3RpZmljYXRpb25TZXJ2aWNlOiBMb2FkZXJOb3RpZmljYXRpb25TZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICB0aGlzLmh0dHBDbGllbnQgPSBuZXcgSHR0cENsaWVudChoYW5kbGVyKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIGJhc2UgVVJMIGZvciBBUEkgcmVxdWVzdHMuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFwaUJhc2VVcmwgLUFQSSBiYXNlIFVSTC5cclxuICAgKiBAbWVtYmVyb2YgRmlsZVVwbG9hZFNlcnZpY2VcclxuICAgKi9cclxuICBzZXRBcGlCYXNlVXJsKGFwaUJhc2VVcmw6IHN0cmluZykge1xyXG4gICAgdGhpcy5hcGlCYXNlVXJsID0gYXBpQmFzZVVybDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlcyBwcmVzaWduZWQgVVJMIGZvciB1cGxvYWRpbmcgZmlsZXMgdG8gQW1hem9uIFMzIGJ1Y2tldC5cclxuICAgKiBAcGFyYW0geyhGaWxlIHwgRmlsZUxpc3QpfSBmaWxlXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxGaWxlVXBsb2FkUHJlc2lnbmVkVXJsPn1cclxuICAgKiBAbWVtYmVyb2YgRmlsZVVwbG9hZFNlcnZpY2VcclxuICAgKi9cclxuICBnZXRGaWxlVXBsb2FkUHJlc2lnbmVkVXJsKFxyXG4gICAgZmlsZTogRmlsZSB8IEZpbGVMaXN0LFxyXG4gICAgYXBwSWQ6IHN0cmluZ1xyXG4gICk6IE9ic2VydmFibGU8RmlsZVVwbG9hZFByZXNpZ25lZFVybD4ge1xyXG4gICAgbGV0IGZpbGVOYW1lID0gJyc7XHJcbiAgICBpZiAoT2JqZWN0LnZhbHVlcyhmaWxlKS5sZW5ndGgpIGZpbGVOYW1lID0gT2JqZWN0LnZhbHVlcyhmaWxlKVswXS5uYW1lO1xyXG4gICAgZWxzZSBmaWxlTmFtZSA9IChmaWxlIGFzIEZpbGUpLm5hbWU7XHJcbiAgICBjb25zdCBmaWxlVXBsb2FkUHJlc2lnbmVkVXJsUGF5bG9hZDogR2V0RmlsZVVwbG9hZFByZXNpZ25lZFVybFBheWxvYWQgPSB7XHJcbiAgICAgIHBheWxvYWQ6IHtcclxuICAgICAgICBmaWxlTmFtZTogZmlsZU5hbWUsXHJcbiAgICAgICAgdGVuYW50QXBwSWQ6IGFwcElkIGFzIHN0cmluZyxcclxuICAgICAgfSxcclxuICAgIH07XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAucG9zdERhdGEoXHJcbiAgICAgICAgYCR7dGhpcy5hcGlCYXNlVXJsfS9jb25maWd1cmF0aW9ucy9zMy91cGxvYWRGaWxlVXJsYCxcclxuICAgICAgICBmaWxlVXBsb2FkUHJlc2lnbmVkVXJsUGF5bG9hZFxyXG4gICAgICApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvclJlcykgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3JSZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgcHJlLXNpZ25lZCBVUkwgZm9yIHRoZSBmaWxlcyB0byBiZSB1cGxvYWRlZCBpbiBTMyBidWNrZXRcclxuICAgKiBAcGFyYW0gZmlsZVVwbG9hZFBheWxvYWRcclxuICAgKiBAcGFyYW0gZmlsZVVwbG9hZEFQSVBhdGhcclxuICAgKi9cclxuICBnZXRQcmVTaWduZWRVUkwoXHJcbiAgICBmaWxlVXBsb2FkUGF5bG9hZDogRmlsZVVwbG9hZFBheWxvYWQsXHJcbiAgICBmaWxlVXBsb2FkQVBJUGF0aCA9ICcnXHJcbiAgKTogT2JzZXJ2YWJsZTxGaWxlVXBsb2FkUmVzcG9uc2U+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5wb3N0RGF0YShgJHt0aGlzLmFwaUJhc2VVcmx9LyR7ZmlsZVVwbG9hZEFQSVBhdGh9YCwgZmlsZVVwbG9hZFBheWxvYWQpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvclJlcykgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3JSZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwbG9hZHMgZmlsZSB0byBBV1MgUzMgdXNpbmcgYSBwcmUtc2lnbmVkIFVSTC5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJlU2lnbmVkVXJsXHJcbiAgICogQHBhcmFtIGZpbGVzXHJcbiAgICogQHBhcmFtIGlzTXVsdGlwbGVGaWxlVXBsb2FkXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxhbnk+fSAtUmV0dXJucyBhbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHJlc3BvbnNlIGFmdGVyIHVwbG9hZGluZyB0aGUgZmlsZSB0byBTMy5cclxuICAgKiBAbWVtYmVyb2YgRmlsZVVwbG9hZFNlcnZpY2VcclxuICAgKi9cclxuICB1cGxvYWRGaWxlVG9TMyhcclxuICAgIHByZVNpZ25lZFVybDogRmlsZVVwbG9hZEJvZHlSZXNwb25zZVtdIHwgc3RyaW5nLFxyXG4gICAgZmlsZXM6IEZpbGUgfCBGaWxlTGlzdCxcclxuICAgIGlzTXVsdGlwbGVGaWxlVXBsb2FkID0gZmFsc2VcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHRoaXMubG9hZGVyTm90aWZpY2F0aW9uU2VydmljZS5zaG93KCk7XHJcbiAgICBjb25zdCBmaWxlc0FycmF5ID0gW107XHJcbiAgICB0aGlzLmZpbGVzTmFtZXNVcGxvYWRGYWlsZWQgPSBbXTtcclxuICAgIHRoaXMudXBsb2FkZWRGaWxlTmFtZSA9ICcnO1xyXG4gICAgaWYgKGlzTXVsdGlwbGVGaWxlVXBsb2FkKSB7XHJcbiAgICAgIE9iamVjdC52YWx1ZXMoZmlsZXMpLmZvckVhY2goKGZpbGUpID0+IHtcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgIGNvbnN0IGluZGV4Rm9yUHJlU2lnbmVkVXJsID0gKHByZVNpZ25lZFVybCBhcyBbXSkuZmluZEluZGV4KFxyXG4gICAgICAgICAgKHg6IEZpbGVVcGxvYWRCb2R5UmVzcG9uc2UpID0+IHguZmlsZU5hbWUgPT09IChmaWxlIGFzIEZpbGUpLm5hbWVcclxuICAgICAgICApO1xyXG4gICAgICAgIGZpbGVzQXJyYXkucHVzaCh7XHJcbiAgICAgICAgICBwcmVTaWduZWRVcmw6IChcclxuICAgICAgICAgICAgcHJlU2lnbmVkVXJsW2luZGV4Rm9yUHJlU2lnbmVkVXJsXSBhcyBGaWxlVXBsb2FkQm9keVJlc3BvbnNlXHJcbiAgICAgICAgICApPy5wcmVTaWduZWRVcmwsXHJcbiAgICAgICAgICBmaWxlT2JqOiBmaWxlIGFzIEZpbGUsXHJcbiAgICAgICAgICBmaWxlVHlwZTogKGZpbGUgYXMgRmlsZSkudHlwZSxcclxuICAgICAgICAgIGZpbGVTaXplOiAoZmlsZSBhcyBGaWxlKS5zaXplLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGZpbGVzQXJyYXkucHVzaCh7XHJcbiAgICAgICAgcHJlU2lnbmVkVXJsOiBwcmVTaWduZWRVcmwgYXMgc3RyaW5nLFxyXG4gICAgICAgIGZpbGVPYmo6IGZpbGVzIGFzIEZpbGUsXHJcbiAgICAgICAgZmlsZVR5cGU6IChmaWxlcyBhcyBGaWxlKS50eXBlLFxyXG4gICAgICAgIGZpbGVTaXplOiAoZmlsZXMgYXMgRmlsZSkuc2l6ZSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZnJvbShmaWxlc0FycmF5KS5waXBlKFxyXG4gICAgICBjb25jYXRNYXAoKGZpbGUpID0+XHJcbiAgICAgICAgdGhpcy5odHRwQ2FsbFRvQVdTKFxyXG4gICAgICAgICAgZmlsZS5wcmVTaWduZWRVcmwsXHJcbiAgICAgICAgICBmaWxlLmZpbGVPYmosXHJcbiAgICAgICAgICBmaWxlLmZpbGVUeXBlLFxyXG4gICAgICAgICAgZmlsZS5maWxlU2l6ZVxyXG4gICAgICAgIClcclxuICAgICAgKSxcclxuICAgICAgdGFrZShmaWxlc0FycmF5Lmxlbmd0aClcclxuICAgICk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIE1ha2VzIGh0dHAgY2FsbCB0byBBV1MgdG8gdXBsb2FkIGZpbGUgaW4gUzMgYnVja2V0XHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHByZVNpZ25lZFVybFxyXG4gICAqIEBwYXJhbSB7RmlsZX0gZmlsZVxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlVHlwZVxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBmaWxlU2l6ZVxyXG4gICAqIEByZXR1cm4geyp9ICB7T2JzZXJ2YWJsZTxhbnk+fVxyXG4gICAqIEBtZW1iZXJvZiBGaWxlVXBsb2FkU2VydmljZVxyXG4gICAqL1xyXG4gIGh0dHBDYWxsVG9BV1MoXHJcbiAgICBwcmVTaWduZWRVcmw6IHN0cmluZyxcclxuICAgIGZpbGU6IEZpbGUsXHJcbiAgICBmaWxlVHlwZTogc3RyaW5nLFxyXG4gICAgZmlsZVNpemU6IG51bWJlclxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICApOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpO1xyXG4gICAgaGVhZGVycy5hcHBlbmQoJ0NvbnRlbnQtVHlwZScsIGZpbGVUeXBlLnRvU3RyaW5nKCkpO1xyXG4gICAgaGVhZGVycy5hcHBlbmQoJ0NvbnRlbnQtTGVuZ3RoJywgZmlsZVNpemUudG9TdHJpbmcoKSk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxyXG4gICAgICAucHV0KHByZVNpZ25lZFVybCwgZmlsZSwge1xyXG4gICAgICAgIHJlcG9ydFByb2dyZXNzOiB0cnVlLFxyXG4gICAgICAgIG9ic2VydmU6ICdldmVudHMnLFxyXG4gICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXHJcbiAgICAgIH0pXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcclxuICAgICAgICBtYXAoKGV2ZW50KSA9PiB0aGlzLmdldEV2ZW50TWVzc2FnZShldmVudCwgZmlsZSkpLFxyXG4gICAgICAgIHRhcCgobWVzc2FnZSkgPT4gdGhpcy5zaG93UHJvZ3Jlc3MobWVzc2FnZSkpLFxyXG4gICAgICAgIGxhc3QoKSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvclJlcykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sb2FkZXJOb3RpZmljYXRpb25TZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICAgIHRocm93IGVycm9yUmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIGZpbGUgdXBsb2FkIHByb2dyZXNzLlxyXG4gICAqIEBwYXJhbSB7Kn0gbWVzc2FnZVxyXG4gICAqIEBtZW1iZXJvZiBGaWxlVXBsb2FkU2VydmljZVxyXG4gICAqL1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55LCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMsIG5vLXVudXNlZC12YXJzLCBuby1lbXB0eS1mdW5jdGlvbiwgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXHJcbiAgc2hvd1Byb2dyZXNzKG1lc3NhZ2U6IGFueSkge31cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIGRpc3RpbmN0IG1lc3NhZ2UgZm9yIHNlbnQsIHVwbG9hZCBwcm9ncmVzcywgJiByZXNwb25zZSBldmVudHMuXHJcbiAgICogQHBhcmFtIHtIdHRwRXZlbnQ8YW55Pn0gZXZlbnRcclxuICAgKiBAcGFyYW0geyhGaWxlIHwgRmlsZUxpc3QpfSBmaWxlXHJcbiAgICogQHJldHVybiB7Kn1cclxuICAgKiBAbWVtYmVyb2YgRmlsZVVwbG9hZFNlcnZpY2VcclxuICAgKi9cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIGdldEV2ZW50TWVzc2FnZShldmVudDogSHR0cEV2ZW50PGFueT4sIGZpbGU6IEZpbGUpIHtcclxuICAgIGNvbnNvbGUubG9nKCdFdmVudCBmcm9tIGZpbGUgdXBsb2FkIHRvIEFXUycsIGV2ZW50KTtcclxuICAgIGxldCBmaWxlTmFtZSA9ICcnO1xyXG4gICAgbGV0IGZpbGVTaXplOiBudW1iZXIgfCBzdHJpbmcgPSAwO1xyXG4gICAgZmlsZU5hbWUgPSAoZmlsZSBhcyBGaWxlKS5uYW1lO1xyXG4gICAgZmlsZVNpemUgPSAoZmlsZSBhcyBGaWxlKS5zaXplO1xyXG4gICAgc3dpdGNoIChldmVudC50eXBlKSB7XHJcbiAgICAgIGNhc2UgSHR0cEV2ZW50VHlwZS5TZW50OlxyXG4gICAgICAgIHJldHVybiBgVXBsb2FkaW5nIGZpbGUgXCIke2ZpbGVOYW1lfVwiIG9mIHNpemUgJHtmaWxlU2l6ZX0uYDtcclxuICAgICAgY2FzZSBIdHRwRXZlbnRUeXBlLlVwbG9hZFByb2dyZXNzOlxyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jYXNlLWRlY2xhcmF0aW9uc1xyXG4gICAgICAgIGNvbnN0IHBlcmNlbnREb25lID0gZXZlbnQ/LnRvdGFsXHJcbiAgICAgICAgICA/IE1hdGgucm91bmQoKDEwMCAqIGV2ZW50LmxvYWRlZCkgLyBldmVudC50b3RhbClcclxuICAgICAgICAgIDogMDtcclxuICAgICAgICByZXR1cm4gYEZpbGUgXCIke2ZpbGVOYW1lfVwiIGlzICR7cGVyY2VudERvbmV9JSB1cGxvYWRlZC5gO1xyXG4gICAgICBjYXNlIEh0dHBFdmVudFR5cGUuUmVzcG9uc2U6XHJcbiAgICAgICAgdGhpcy5sb2FkZXJOb3RpZmljYXRpb25TZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICBpZiAoZXZlbnQuc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICAgIHRoaXMuZmlsZXNVcGxvYWRlZFN1Y2Nlc3NmdWxseUNvdW50Kys7XHJcbiAgICAgICAgICB0aGlzLnVwbG9hZGVkRmlsZU5hbWUgPSBmaWxlTmFtZTtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmZpbGVzTmFtZXNVcGxvYWRGYWlsZWQucHVzaChmaWxlTmFtZSk7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiBgRmlsZSBcIiR7ZmlsZU5hbWV9XCIgc3VycHJpc2luZyB1cGxvYWQgZXZlbnQ6ICR7ZXZlbnQudHlwZX0uYDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbnZlcnRzIGZpbGUgdG8gYnl0ZSBhcnJheS5cclxuICAgKiBAcGFyYW0ge0ZpbGV9IGZpbGVcclxuICAgKiBAbWVtYmVyb2YgRmlsZVVwbG9hZFNlcnZpY2VcclxuICAgKi9cclxuICBjb252ZXJ0RmlsZVRvQnl0ZUFycmF5KGZpbGU6IEZpbGUpOiB2b2lkIHtcclxuICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICByZWFkZXIub25sb2FkZW5kID0gKCkgPT4ge1xyXG4gICAgICBjb25zdCBhcnJheUJ1ZmZlciA9IHJlYWRlcj8ucmVzdWx0IGFzIEFycmF5QnVmZmVyO1xyXG4gICAgICB0aGlzLmZpbGVCeXRlQXJyYXkgPSBuZXcgVWludDhBcnJheShhcnJheUJ1ZmZlcik7XHJcbiAgICB9O1xyXG4gICAgcmVhZGVyLm9uZXJyb3IgPSAoKSA9PiB7XHJcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlPy5zaG93TWVzc2FnZSh7XHJcbiAgICAgICAgc3RhdHVzOiAnY3VzdG9tJyxcclxuICAgICAgICBtZXNzYWdlOiB0aGlzLmNvbnN0YW50cz8uZmlsZVVwbG9hZD8ubWVzc2FnZT8uZXJyb3I/LmVycm9yUmVhZGluZ0ZpbGUsXHJcbiAgICAgICAgYWxlcnRUeXBlOiBBbGVydFR5cGU/LkVSUk9SLFxyXG4gICAgICAgIGlzQ2xvc2VOZWVkZWQ6IHRydWUsXHJcbiAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihmaWxlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlc2V0cyBmaWxlIGJ5dGUgYXJyYXkgZm9ybWF0IHRvIHVuZGVmaW5lZC5cclxuICAgKiBAbWVtYmVyb2YgRmlsZVVwbG9hZFNlcnZpY2VcclxuICAgKi9cclxuICBjbGVhckZpbGVCeXRlQXJyYXkoKTogdm9pZCB7XHJcbiAgICB0aGlzLmZpbGVCeXRlQXJyYXkgPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIGZpbGUgdXBsb2FkIHN0YXR1cy5cclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHN0YXR1c1xyXG4gICAqIEBtZW1iZXJvZiBGaWxlVXBsb2FkU2VydmljZVxyXG4gICAqL1xyXG4gIHNldEZpbGVVcGxvYWRTdGF0dXMoc3RhdHVzOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzRmlsZVVwbG9hZGluZyA9IHN0YXR1cztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgZmlsZSB1cGxvYWQgc3RhdHVzLlxyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICogQG1lbWJlcm9mIEZpbGVVcGxvYWRTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0RmlsZVVwbG9hZFN0YXR1cygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmlzRmlsZVVwbG9hZGluZztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlcyBwcmVzaWduZWQgVVJMIGZvciBkb3dubG9hZGluZyBmaWxlcyB0byBBbWF6b24gUzMgYnVja2V0LlxyXG4gICAqIEBwYXJhbSB7KEZpbGUgfCBGaWxlTGlzdCl9IGZpbGVcclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPHN0cmluZz59XHJcbiAgICogQG1lbWJlcm9mIEZpbGVVcGxvYWRTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0RmlsZURvd25sb2FkUHJlc2lnbmVkVXJscyhcclxuICAgIGZpbGU6IEZpbGUgfCBGaWxlTGlzdCB8IHN0cmluZyxcclxuICAgIGlzUHVibGljQVBJPzogYm9vbGVhbixcclxuICAgIGRvbWFpblVybD86IHN0cmluZ1xyXG4gICk6IE9ic2VydmFibGU8c3RyaW5nPiB7XHJcbiAgICBsZXQgZmlsZU5hbWUgPSAnJztcclxuICAgIGlmICh0eXBlb2YgZmlsZSA9PT0gJ3N0cmluZycpIGZpbGVOYW1lID0gZmlsZTtcclxuICAgIGVsc2UgaWYgKE9iamVjdC52YWx1ZXMoZmlsZSkubGVuZ3RoKSBmaWxlTmFtZSA9IE9iamVjdC52YWx1ZXMoZmlsZSlbMF0ubmFtZTtcclxuICAgIGVsc2UgZmlsZU5hbWUgPSAoZmlsZSBhcyBGaWxlKS5uYW1lO1xyXG4gICAgbGV0IGh0dHBSZXF1ZXN0ITogT2JzZXJ2YWJsZTxzdHJpbmc+O1xyXG4gICAgaWYgKGlzUHVibGljQVBJKSB7XHJcbiAgICAgIGNvbnN0IGZpbGVEb3dubG9hZFByZXNpZ25lZFVybFBheWxvYWQ6IEdldEZpbGVEb3dubG9hZFByZXNpZ25lZFVybFBheWxvYWQgPVxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHBheWxvYWQ6IHtcclxuICAgICAgICAgICAgZmlsZU5hbWU6IGZpbGVOYW1lLFxyXG4gICAgICAgICAgICBkb21haW46IGRvbWFpblVybCBhcyBzdHJpbmcsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH07XHJcbiAgICAgIGh0dHBSZXF1ZXN0ID0gdGhpcy5odHRwU2VydmljZS5wb3N0RGF0YShcclxuICAgICAgICBgJHt0aGlzLmFwaUJhc2VVcmx9L2NvbmZpZ3VyYXRpb25zL3B1YmxpYy9kb3dubG9hZEZpbGVVcmxgLFxyXG4gICAgICAgIGZpbGVEb3dubG9hZFByZXNpZ25lZFVybFBheWxvYWRcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGh0dHBSZXF1ZXN0ID0gdGhpcy5odHRwU2VydmljZS5nZXREYXRhKFxyXG4gICAgICAgIGAke3RoaXMuYXBpQmFzZVVybH0vY29uZmlndXJhdGlvbnMvczMvZG93bmxvYWRGaWxlVXJsLyR7ZmlsZU5hbWV9YFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGh0dHBSZXF1ZXN0LnBpcGUoXHJcbiAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgIH0pLFxyXG4gICAgICBjYXRjaEVycm9yKChlcnJvclJlcykgPT4ge1xyXG4gICAgICAgIHRocm93IGVycm9yUmVzO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERvd25sb2FkcyBmaWxlIHRvIEFXUyBTMyB1c2luZyBhIHByZXNpZ25lZCBVUkwuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxhbnk+fVxyXG4gICAqIEBtZW1iZXJvZiBGaWxlVXBsb2FkU2VydmljZVxyXG4gICAqL1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgZG93bmxvYWRGaWxlKGZpbGVEb3dubG9hZFByZXNpZ25lZFVybDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0KGZpbGVEb3dubG9hZFByZXNpZ25lZFVybCkucGlwZShcclxuICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgfSksXHJcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yUmVzKSA9PiB7XHJcbiAgICAgICAgdGhyb3cgZXJyb3JSZXM7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVmFsaWRhdGVzIHRoZSB0b3RhbCBzaXplIG9mIHRoZSBmaWxlcyB1cGxvYWRlZC5cclxuICAgKiBAcGFyYW0geyhGaWxlIHwgRmlsZUxpc3QpfSBmaWxlcyAtVGhlIGZpbGVzIHRvIGJlIHZhbGlkYXRlZC5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gbWF4RmlsZVNpemVcclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzTXVsdGlGaWxlVXBsb2FkXHJcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gLVJldHVybnMgdHJ1ZSBpZiB0aGUgdG90YWwgc2l6ZSBvZiBmaWxlcyBpcyB3aXRoaW4gdGhlIHNwZWNpZmllZCBsaW1pdCwgb3RoZXJ3aXNlIGZhbHNlLlxyXG4gICAqIEBtZW1iZXJvZiBGaWxlVXBsb2FkU2VydmljZVxyXG4gICAqL1xyXG4gIHZhbGlkYXRlRmlsZVNpemUoXHJcbiAgICBmaWxlczogRmlsZSB8IEZpbGVMaXN0LFxyXG4gICAgbWF4RmlsZVNpemU6IG51bWJlcixcclxuICAgIGlzTXVsdGlGaWxlVXBsb2FkOiBib29sZWFuXHJcbiAgKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoaXNNdWx0aUZpbGVVcGxvYWQpIHtcclxuICAgICAgbGV0IHRvdGFsU2l6ZSA9IDA7XHJcbiAgICAgIE9iamVjdC52YWx1ZXMoZmlsZXMpLmZvckVhY2goKGZpbGU6IEZpbGUpID0+IHtcclxuICAgICAgICB0b3RhbFNpemUgKz0gZmlsZS5zaXplO1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIHRvdGFsU2l6ZSAvICgxMDI0ICogMTAyNCkgPD0gbWF4RmlsZVNpemU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gKGZpbGVzIGFzIEZpbGUpLnNpemUgLyAoMTAyNCAqIDEwMjQpIDw9IG1heEZpbGVTaXplO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVmFsaWRhdGVzIHRoZSBmaWxlIHR5cGVzIG9mIHRoZSB1cGxvYWRlZCBmaWxlcy5cclxuICAgKiBAcGFyYW0geyhGaWxlIHwgRmlsZUxpc3QpfSBmaWxlc1xyXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IGFsbG93ZWRGaWxlVHlwZXNcclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzTXVsdGlGaWxlVXBsb2FkXHJcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gLVJldHVybnMgdHJ1ZSBpZiBhbGwgZmlsZXMgaGF2ZSB2YWxpZCBleHRlbnNpb25zLCBvdGhlcndpc2UgZmFsc2UuXHJcbiAgICogQG1lbWJlcm9mIEZpbGVVcGxvYWRTZXJ2aWNlXHJcbiAgICovXHJcbiAgdmFsaWRhdGVGaWxlVHlwZXMoXHJcbiAgICBmaWxlczogRmlsZSB8IEZpbGVMaXN0LFxyXG4gICAgYWxsb3dlZEZpbGVUeXBlczogc3RyaW5nW10sXHJcbiAgICBpc011bHRpRmlsZVVwbG9hZDogYm9vbGVhblxyXG4gICk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgdmFsaWRhdGVTaW5nbGVGaWxlID0gKGZpbGU6IEZpbGUpOiBib29sZWFuID0+IHtcclxuICAgICAgY29uc3QgZmlsZUV4dGVuc2lvbiA9IHRoaXMuZ2V0RmlsZUV4dGVuc2lvbihmaWxlLm5hbWUpO1xyXG4gICAgICByZXR1cm4gYWxsb3dlZEZpbGVUeXBlcz8uaW5jbHVkZXMoZmlsZUV4dGVuc2lvbik7XHJcbiAgICB9O1xyXG4gICAgaWYgKGlzTXVsdGlGaWxlVXBsb2FkKSB7XHJcbiAgICAgIGxldCBhbGxGaWxlc1ZhbGlkID0gdHJ1ZTtcclxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgT2JqZWN0LnZhbHVlcyhmaWxlcyk/LmZvckVhY2goKGZpbGVJdGVtOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoIXZhbGlkYXRlU2luZ2xlRmlsZShmaWxlSXRlbSkpIHtcclxuICAgICAgICAgIGFsbEZpbGVzVmFsaWQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gYWxsRmlsZXNWYWxpZDtcclxuICAgIH1cclxuICAgIHJldHVybiB2YWxpZGF0ZVNpbmdsZUZpbGUoZmlsZXMgYXMgRmlsZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFeHRyYWN0cyBhbmQgcmV0dXJucyB0aGUgZXh0ZW5zaW9uIG9mIGEgZmlsZSBmcm9tIGl0cyBuYW1lLlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZpbGVOYW1lXHJcbiAgICogQHJldHVybiB7c3RyaW5nfSAtVGhlIGZpbGUgZXh0ZW5zaW9uIGluIGxvd2VyY2FzZS5cclxuICAgKiBAbWVtYmVyb2YgRmlsZVVwbG9hZFNlcnZpY2VcclxuICAgKi9cclxuICBwcml2YXRlIGdldEZpbGVFeHRlbnNpb24oZmlsZU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxyXG4gICAgcmV0dXJuIGZpbGVOYW1lPy5zcGxpdCgnLicpLnBvcCgpIS50b0xvd2VyQ2FzZSgpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBEZWxldGVzIGZpbGUgYnkgZ2l2ZW4gZmlsZUlkXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZpbGVJZFxyXG4gICAqIEByZXR1cm4geyp9ICB7T2JzZXJ2YWJsZTxEZWxldGVGaWxlUmVzcG9uc2U+fVxyXG4gICAqIEBtZW1iZXJvZiBGaWxlVXBsb2FkU2VydmljZVxyXG4gICAqL1xyXG4gIGRlbGV0ZUZpbGUoZGVsZXRlRmlsZUFwaVBhdGg6IHN0cmluZyk6IE9ic2VydmFibGU8RGVsZXRlRmlsZVJlc3BvbnNlPiB7XHJcbiAgICBjb25zdCBkZWxldGVGaWxlUGF5bG9hZDogRGVsZXRlRmlsZVBheWxvYWQgPSB7XHJcbiAgICAgIC8vIEFzc2lnbiBkYXRhIGhlcmUgaWYgbmVlZGVkIHRvIHNlbmQgYW55IHBheWxvYWQgaW4gYm9keVxyXG4gICAgICAvLyBleGFtcGxlIGJlbG93XHJcbiAgICAgIC8vIGZpbGVJZDogYXJndW1lbnRzWzBdLFxyXG4gICAgfTtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5wdXREYXRhKFxyXG4gICAgICAgIGAke3RoaXMuYXBpQmFzZVVybH0vJHtkZWxldGVGaWxlQXBpUGF0aH1gLFxyXG4gICAgICAgIE9iamVjdC5rZXlzKGRlbGV0ZUZpbGVQYXlsb2FkKS5sZW5ndGggPyBkZWxldGVGaWxlUGF5bG9hZCA6IHt9XHJcbiAgICAgIClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW1wbGVtZW50YXRpb24gb2YgbmdPbkRlc3Ryb3kgbGlmZWN5Y2xlIGhvb2sgbWV0aG9kIHRvIHVuc3Vic2NyaWJlIHRoZSBvcGVuIG9ic2VydmFibGUgc3Vic2NyaXB0aW9ucy5cclxuICAgKiBAbWVtYmVyb2YgRmlsZVVwbG9hZFNlcnZpY2VcclxuICAgKi9cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuZGVzdHJveSQudW5zdWJzY3JpYmUoKTtcclxuICB9XHJcbn1cclxuIl19
304
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS11cGxvYWQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ByZXNlbnRhdGlvbi9zcmMvbGliL3NlcnZpY2VzL2ZpbGUtdXBsb2FkLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFVBQVUsRUFFVixhQUFhLEVBQ2IsV0FBVyxHQUNaLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLFVBQVUsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUN0RCxPQUFPLEVBRUwsU0FBUyxHQUdWLE1BQU0scUJBQXFCLENBQUM7QUFNN0IsT0FBTyxFQUNMLFVBQVUsRUFDVixJQUFJLEVBQ0osR0FBRyxFQUVILE9BQU8sRUFDUCxTQUFTLEVBQ1QsR0FBRyxHQUNKLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxLQUFLLFNBQVMsTUFBTSwwQkFBMEIsQ0FBQzs7OztBQUV0RDs7O0dBR0c7QUFJSCxNQUFNLE9BQU8saUJBQWlCO0lBTzVCO0lBQ0UsMENBQTBDO0lBQ25DLFdBQXdCLEVBQy9CLE9BQW9CO0lBQ3BCLDBDQUEwQztJQUNuQyxZQUEyQjtJQUNsQywwQ0FBMEM7SUFDbkMseUJBQW9EO1FBTHBELGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBR3hCLGlCQUFZLEdBQVosWUFBWSxDQUFlO1FBRTNCLDhCQUF5QixHQUF6Qix5QkFBeUIsQ0FBMkI7UUFiN0QsYUFBUSxHQUFxQixJQUFJLE9BQU8sRUFBVyxDQUFDO1FBQ3BELGNBQVMsR0FBRyxTQUFTLENBQUM7UUFJdEIsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFVdEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGFBQWEsQ0FBQyxVQUFrQjtRQUM5QixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztJQUMvQixD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LENBQUMsS0FBSyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7Z0JBQzlDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsRUFBRTtvQkFDakMsYUFBYSxHQUFHLEtBQUssQ0FBQztpQkFDdkI7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUNILE9BQU8sYUFBYSxDQUFDO1NBQ3RCO1FBQ0QsT0FBTyxrQkFBa0IsQ0FBQyxLQUFhLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ssZ0JBQWdCLENBQUMsUUFBZ0I7UUFDdkMsb0VBQW9FO1FBQ3BFLE9BQU8sUUFBUSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNuRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDOUIsQ0FBQzsrR0F4VVUsaUJBQWlCO21IQUFqQixpQkFBaUIsY0FGaEIsTUFBTTs7NEZBRVAsaUJBQWlCO2tCQUg3QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgSHR0cEJhY2tlbmQsXHJcbiAgSHR0cENsaWVudCxcclxuICBIdHRwRXZlbnQsXHJcbiAgSHR0cEV2ZW50VHlwZSxcclxuICBIdHRwSGVhZGVycyxcclxufSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEluamVjdGFibGUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIEFsZXJ0c1NlcnZpY2UsXHJcbiAgQWxlcnRUeXBlLFxyXG4gIEh0dHBTZXJ2aWNlLFxyXG4gIExvYWRlck5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbn0gZnJvbSAnQGllZWVzYS1ucG0vdXRpbGl0eSc7XHJcbmltcG9ydCB7XHJcbiAgRmlsZVVwbG9hZFByZXNpZ25lZFVybCxcclxuICBHZXRGaWxlRG93bmxvYWRQcmVzaWduZWRVcmxQYXlsb2FkLFxyXG4gIEdldEZpbGVVcGxvYWRQcmVzaWduZWRVcmxQYXlsb2FkLFxyXG59IGZyb20gJy4uL21vZGVscy9maWxlLXVwbG9hZC1wcmVzaWduZWQtdXJsLXJlcy5tb2RlbCc7XHJcbmltcG9ydCB7XHJcbiAgY2F0Y2hFcnJvcixcclxuICBsYXN0LFxyXG4gIG1hcCxcclxuICBPYnNlcnZhYmxlLFxyXG4gIFN1YmplY3QsXHJcbiAgdGFrZVVudGlsLFxyXG4gIHRhcCxcclxufSBmcm9tICdyeGpzJztcclxuaW1wb3J0ICogYXMgY29uc3RhbnRzIGZyb20gJy4uL2Fzc2V0cy9jb25zdGFudHMuanNvbic7XHJcblxyXG4vKipcclxuICogVGhpcyBzZXJ2aWNlIGludGVyYWN0cyB3aXRoIHRoZSBzZXJ2ZXIgdG8gb2J0YWluIHByZS1zaWduZWQgVVJMcyBmb3IgZmlsZSB1cGxvYWQgYW5kIHVwbG9hZHMgZmlsZXMgdG8gQW1hem9uIFMzLlxyXG4gKiBAY2xhc3MgRmlsZVVwbG9hZFNlcnZpY2VcclxuICovXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGaWxlVXBsb2FkU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcbiAgZGVzdHJveSQ6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xyXG4gIGNvbnN0YW50cyA9IGNvbnN0YW50cztcclxuICBhcGlCYXNlVXJsITogc3RyaW5nO1xyXG4gIGZpbGVCeXRlQXJyYXk6IFVpbnQ4QXJyYXkgfCB1bmRlZmluZWQ7XHJcbiAgaHR0cENsaWVudDogSHR0cENsaWVudDtcclxuICBpc0ZpbGVVcGxvYWRpbmcgPSBmYWxzZTtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHVibGljIGh0dHBTZXJ2aWNlOiBIdHRwU2VydmljZSxcclxuICAgIGhhbmRsZXI6IEh0dHBCYWNrZW5kLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwdWJsaWMgYWxlcnRTZXJ2aWNlOiBBbGVydHNTZXJ2aWNlLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwdWJsaWMgbG9hZGVyTm90aWZpY2F0aW9uU2VydmljZTogTG9hZGVyTm90aWZpY2F0aW9uU2VydmljZVxyXG4gICkge1xyXG4gICAgdGhpcy5odHRwQ2xpZW50ID0gbmV3IEh0dHBDbGllbnQoaGFuZGxlcik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBiYXNlIFVSTCBmb3IgQVBJIHJlcXVlc3RzLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcGlCYXNlVXJsIC1BUEkgYmFzZSBVUkwuXHJcbiAgICogQG1lbWJlcm9mIEZpbGVVcGxvYWRTZXJ2aWNlXHJcbiAgICovXHJcbiAgc2V0QXBpQmFzZVVybChhcGlCYXNlVXJsOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuYXBpQmFzZVVybCA9IGFwaUJhc2VVcmw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgcHJlc2lnbmVkIFVSTCBmb3IgdXBsb2FkaW5nIGZpbGVzIHRvIEFtYXpvbiBTMyBidWNrZXQuXHJcbiAgICogQHBhcmFtIHsoRmlsZSB8IEZpbGVMaXN0KX0gZmlsZVxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8RmlsZVVwbG9hZFByZXNpZ25lZFVybD59XHJcbiAgICogQG1lbWJlcm9mIEZpbGVVcGxvYWRTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0RmlsZVVwbG9hZFByZXNpZ25lZFVybChcclxuICAgIGZpbGU6IEZpbGUgfCBGaWxlTGlzdCxcclxuICAgIGFwcElkOiBzdHJpbmdcclxuICApOiBPYnNlcnZhYmxlPEZpbGVVcGxvYWRQcmVzaWduZWRVcmw+IHtcclxuICAgIGxldCBmaWxlTmFtZSA9ICcnO1xyXG4gICAgaWYgKE9iamVjdC52YWx1ZXMoZmlsZSkubGVuZ3RoKSBmaWxlTmFtZSA9IE9iamVjdC52YWx1ZXMoZmlsZSlbMF0ubmFtZTtcclxuICAgIGVsc2UgZmlsZU5hbWUgPSAoZmlsZSBhcyBGaWxlKS5uYW1lO1xyXG4gICAgY29uc3QgZmlsZVVwbG9hZFByZXNpZ25lZFVybFBheWxvYWQ6IEdldEZpbGVVcGxvYWRQcmVzaWduZWRVcmxQYXlsb2FkID0ge1xyXG4gICAgICBwYXlsb2FkOiB7XHJcbiAgICAgICAgZmlsZU5hbWU6IGZpbGVOYW1lLFxyXG4gICAgICAgIHRlbmFudEFwcElkOiBhcHBJZCBhcyBzdHJpbmcsXHJcbiAgICAgIH0sXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLnBvc3REYXRhKFxyXG4gICAgICAgIGAke3RoaXMuYXBpQmFzZVVybH0vY29uZmlndXJhdGlvbnMvczMvdXBsb2FkRmlsZVVybGAsXHJcbiAgICAgICAgZmlsZVVwbG9hZFByZXNpZ25lZFVybFBheWxvYWRcclxuICAgICAgKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3JSZXMpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yUmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFVwbG9hZHMgZmlsZSB0byBBV1MgUzMgdXNpbmcgYSBwcmVzaWduZWQgVVJMLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwcmVzaWduZWRVcmxcclxuICAgKiBAcGFyYW0geyhGaWxlIHwgRmlsZUxpc3QpfSBmaWxlXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxhbnk+fSAtUmV0dXJucyBhbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHJlc3BvbnNlIGFmdGVyIHVwbG9hZGluZyB0aGUgZmlsZSB0byBTMy5cclxuICAgKiBAbWVtYmVyb2YgRmlsZVVwbG9hZFNlcnZpY2VcclxuICAgKi9cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIHVwbG9hZEZpbGVUb1MzKHByZXNpZ25lZFVybDogc3RyaW5nLCBmaWxlOiBGaWxlIHwgRmlsZUxpc3QpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgdGhpcy5sb2FkZXJOb3RpZmljYXRpb25TZXJ2aWNlLnNob3coKTtcclxuICAgIGxldCBmaWxlVHlwZSA9ICcnO1xyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgIGxldCBmaWxlU2l6ZTogYW55O1xyXG4gICAgbGV0IGZpbGVPYmo6IEZpbGU7XHJcbiAgICBpZiAoT2JqZWN0LnZhbHVlcyhmaWxlKS5sZW5ndGgpIHtcclxuICAgICAgZmlsZVR5cGUgPSBPYmplY3QudmFsdWVzKGZpbGUpWzBdLnR5cGU7XHJcbiAgICAgIGZpbGVTaXplID0gT2JqZWN0LnZhbHVlcyhmaWxlKVswXS5zaXplO1xyXG4gICAgICBmaWxlT2JqID0gT2JqZWN0LnZhbHVlcyhmaWxlKVswXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGZpbGVUeXBlID0gKGZpbGUgYXMgRmlsZSkudHlwZTtcclxuICAgICAgZmlsZVNpemUgPSAoZmlsZSBhcyBGaWxlKS5zaXplO1xyXG4gICAgICBmaWxlT2JqID0gZmlsZSBhcyBGaWxlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpO1xyXG4gICAgaGVhZGVycy5hcHBlbmQoJ0NvbnRlbnQtVHlwZScsIGZpbGVUeXBlKTtcclxuICAgIGhlYWRlcnMuYXBwZW5kKCdDb250ZW50LUxlbmd0aCcsIGZpbGVTaXplKTtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcclxuICAgICAgLnB1dChwcmVzaWduZWRVcmwsIGZpbGVPYmosIHtcclxuICAgICAgICByZXBvcnRQcm9ncmVzczogdHJ1ZSxcclxuICAgICAgICBvYnNlcnZlOiAnZXZlbnRzJyxcclxuICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxyXG4gICAgICB9KVxyXG4gICAgICAucGlwZShcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXHJcbiAgICAgICAgbWFwKChldmVudCkgPT4gdGhpcy5nZXRFdmVudE1lc3NhZ2UoZXZlbnQsIGZpbGUpKSxcclxuICAgICAgICB0YXAoKG1lc3NhZ2UpID0+IHRoaXMuc2hvd1Byb2dyZXNzKG1lc3NhZ2UpKSxcclxuICAgICAgICBsYXN0KCksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3JSZXMpID0+IHtcclxuICAgICAgICAgIHRoaXMubG9hZGVyTm90aWZpY2F0aW9uU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvclJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyBmaWxlIHVwbG9hZCBwcm9ncmVzcy5cclxuICAgKiBAcGFyYW0geyp9IG1lc3NhZ2VcclxuICAgKiBAbWVtYmVyb2YgRmlsZVVwbG9hZFNlcnZpY2VcclxuICAgKi9cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzLCBuby11bnVzZWQtdmFycywgbm8tZW1wdHktZnVuY3Rpb24sIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxyXG4gIHNob3dQcm9ncmVzcyhtZXNzYWdlOiBhbnkpIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBkaXN0aW5jdCBtZXNzYWdlIGZvciBzZW50LCB1cGxvYWQgcHJvZ3Jlc3MsICYgcmVzcG9uc2UgZXZlbnRzLlxyXG4gICAqIEBwYXJhbSB7SHR0cEV2ZW50PGFueT59IGV2ZW50XHJcbiAgICogQHBhcmFtIHsoRmlsZSB8IEZpbGVMaXN0KX0gZmlsZVxyXG4gICAqIEByZXR1cm4geyp9XHJcbiAgICogQG1lbWJlcm9mIEZpbGVVcGxvYWRTZXJ2aWNlXHJcbiAgICovXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBnZXRFdmVudE1lc3NhZ2UoZXZlbnQ6IEh0dHBFdmVudDxhbnk+LCBmaWxlOiBGaWxlIHwgRmlsZUxpc3QpIHtcclxuICAgIGxldCBmaWxlTmFtZSA9ICcnO1xyXG4gICAgbGV0IGZpbGVTaXplOiBudW1iZXIgfCBzdHJpbmcgPSAwO1xyXG4gICAgaWYgKE9iamVjdC52YWx1ZXMoZmlsZSkubGVuZ3RoKSB7XHJcbiAgICAgIGZpbGVOYW1lID0gT2JqZWN0LnZhbHVlcyhmaWxlKVswXS5uYW1lO1xyXG4gICAgICBmaWxlU2l6ZSA9IE9iamVjdC52YWx1ZXMoZmlsZSlbMF0uc2l6ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGZpbGVOYW1lID0gKGZpbGUgYXMgRmlsZSkubmFtZTtcclxuICAgICAgZmlsZVNpemUgPSAoZmlsZSBhcyBGaWxlKS5zaXplO1xyXG4gICAgfVxyXG4gICAgc3dpdGNoIChldmVudC50eXBlKSB7XHJcbiAgICAgIGNhc2UgSHR0cEV2ZW50VHlwZS5TZW50OlxyXG4gICAgICAgIHJldHVybiBgVXBsb2FkaW5nIGZpbGUgXCIke2ZpbGVOYW1lfVwiIG9mIHNpemUgJHtmaWxlU2l6ZX0uYDtcclxuICAgICAgY2FzZSBIdHRwRXZlbnRUeXBlLlVwbG9hZFByb2dyZXNzOlxyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jYXNlLWRlY2xhcmF0aW9uc1xyXG4gICAgICAgIGNvbnN0IHBlcmNlbnREb25lID0gZXZlbnQ/LnRvdGFsXHJcbiAgICAgICAgICA/IE1hdGgucm91bmQoKDEwMCAqIGV2ZW50LmxvYWRlZCkgLyBldmVudC50b3RhbClcclxuICAgICAgICAgIDogMDtcclxuICAgICAgICByZXR1cm4gYEZpbGUgXCIke2ZpbGVOYW1lfVwiIGlzICR7cGVyY2VudERvbmV9JSB1cGxvYWRlZC5gO1xyXG4gICAgICBjYXNlIEh0dHBFdmVudFR5cGUuUmVzcG9uc2U6XHJcbiAgICAgICAgdGhpcy5sb2FkZXJOb3RpZmljYXRpb25TZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gYEZpbGUgXCIke2ZpbGVOYW1lfVwiIHN1cnByaXNpbmcgdXBsb2FkIGV2ZW50OiAke2V2ZW50LnR5cGV9LmA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb252ZXJ0cyBmaWxlIHRvIGJ5dGUgYXJyYXkuXHJcbiAgICogQHBhcmFtIHtGaWxlfSBmaWxlXHJcbiAgICogQG1lbWJlcm9mIEZpbGVVcGxvYWRTZXJ2aWNlXHJcbiAgICovXHJcbiAgY29udmVydEZpbGVUb0J5dGVBcnJheShmaWxlOiBGaWxlKTogdm9pZCB7XHJcbiAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgcmVhZGVyLm9ubG9hZGVuZCA9ICgpID0+IHtcclxuICAgICAgY29uc3QgYXJyYXlCdWZmZXIgPSByZWFkZXI/LnJlc3VsdCBhcyBBcnJheUJ1ZmZlcjtcclxuICAgICAgdGhpcy5maWxlQnl0ZUFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXlCdWZmZXIpO1xyXG4gICAgfTtcclxuICAgIHJlYWRlci5vbmVycm9yID0gKCkgPT4ge1xyXG4gICAgICB0aGlzLmFsZXJ0U2VydmljZT8uc2hvd01lc3NhZ2Uoe1xyXG4gICAgICAgIHN0YXR1czogJ2N1c3RvbScsXHJcbiAgICAgICAgbWVzc2FnZTogdGhpcy5jb25zdGFudHM/LmZpbGVVcGxvYWQ/Lm1lc3NhZ2U/LmVycm9yPy5lcnJvclJlYWRpbmdGaWxlLFxyXG4gICAgICAgIGFsZXJ0VHlwZTogQWxlcnRUeXBlPy5FUlJPUixcclxuICAgICAgICBpc0Nsb3NlTmVlZGVkOiB0cnVlLFxyXG4gICAgICB9KTtcclxuICAgIH07XHJcbiAgICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoZmlsZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXNldHMgZmlsZSBieXRlIGFycmF5IGZvcm1hdCB0byB1bmRlZmluZWQuXHJcbiAgICogQG1lbWJlcm9mIEZpbGVVcGxvYWRTZXJ2aWNlXHJcbiAgICovXHJcbiAgY2xlYXJGaWxlQnl0ZUFycmF5KCk6IHZvaWQge1xyXG4gICAgdGhpcy5maWxlQnl0ZUFycmF5ID0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyBmaWxlIHVwbG9hZCBzdGF0dXMuXHJcbiAgICogQHBhcmFtIHtib29sZWFufSBzdGF0dXNcclxuICAgKiBAbWVtYmVyb2YgRmlsZVVwbG9hZFNlcnZpY2VcclxuICAgKi9cclxuICBzZXRGaWxlVXBsb2FkU3RhdHVzKHN0YXR1czogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5pc0ZpbGVVcGxvYWRpbmcgPSBzdGF0dXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIGZpbGUgdXBsb2FkIHN0YXR1cy5cclxuICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAqIEBtZW1iZXJvZiBGaWxlVXBsb2FkU2VydmljZVxyXG4gICAqL1xyXG4gIGdldEZpbGVVcGxvYWRTdGF0dXMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5pc0ZpbGVVcGxvYWRpbmc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgcHJlc2lnbmVkIFVSTCBmb3IgZG93bmxvYWRpbmcgZmlsZXMgdG8gQW1hem9uIFMzIGJ1Y2tldC5cclxuICAgKiBAcGFyYW0geyhGaWxlIHwgRmlsZUxpc3QpfSBmaWxlXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxzdHJpbmc+fVxyXG4gICAqIEBtZW1iZXJvZiBGaWxlVXBsb2FkU2VydmljZVxyXG4gICAqL1xyXG4gIGdldEZpbGVEb3dubG9hZFByZXNpZ25lZFVybHMoXHJcbiAgICBmaWxlOiBGaWxlIHwgRmlsZUxpc3QgfCBzdHJpbmcsXHJcbiAgICBpc1B1YmxpY0FQST86IGJvb2xlYW4sXHJcbiAgICBkb21haW5Vcmw/OiBzdHJpbmdcclxuICApOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xyXG4gICAgbGV0IGZpbGVOYW1lID0gJyc7XHJcbiAgICBpZiAodHlwZW9mIGZpbGUgPT09ICdzdHJpbmcnKSBmaWxlTmFtZSA9IGZpbGU7XHJcbiAgICBlbHNlIGlmIChPYmplY3QudmFsdWVzKGZpbGUpLmxlbmd0aCkgZmlsZU5hbWUgPSBPYmplY3QudmFsdWVzKGZpbGUpWzBdLm5hbWU7XHJcbiAgICBlbHNlIGZpbGVOYW1lID0gKGZpbGUgYXMgRmlsZSkubmFtZTtcclxuICAgIGxldCBodHRwUmVxdWVzdCE6IE9ic2VydmFibGU8c3RyaW5nPjtcclxuICAgIGlmIChpc1B1YmxpY0FQSSkge1xyXG4gICAgICBjb25zdCBmaWxlRG93bmxvYWRQcmVzaWduZWRVcmxQYXlsb2FkOiBHZXRGaWxlRG93bmxvYWRQcmVzaWduZWRVcmxQYXlsb2FkID1cclxuICAgICAgICB7XHJcbiAgICAgICAgICBwYXlsb2FkOiB7XHJcbiAgICAgICAgICAgIGZpbGVOYW1lOiBmaWxlTmFtZSxcclxuICAgICAgICAgICAgZG9tYWluOiBkb21haW5VcmwgYXMgc3RyaW5nLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9O1xyXG4gICAgICBodHRwUmVxdWVzdCA9IHRoaXMuaHR0cFNlcnZpY2UucG9zdERhdGEoXHJcbiAgICAgICAgYCR7dGhpcy5hcGlCYXNlVXJsfS9jb25maWd1cmF0aW9ucy9wdWJsaWMvZG93bmxvYWRGaWxlVXJsYCxcclxuICAgICAgICBmaWxlRG93bmxvYWRQcmVzaWduZWRVcmxQYXlsb2FkXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBodHRwUmVxdWVzdCA9IHRoaXMuaHR0cFNlcnZpY2UuZ2V0RGF0YShcclxuICAgICAgICBgJHt0aGlzLmFwaUJhc2VVcmx9L2NvbmZpZ3VyYXRpb25zL3MzL2Rvd25sb2FkRmlsZVVybC8ke2ZpbGVOYW1lfWBcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHJldHVybiBodHRwUmVxdWVzdC5waXBlKFxyXG4gICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICB9KSxcclxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3JSZXMpID0+IHtcclxuICAgICAgICB0aHJvdyBlcnJvclJlcztcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEb3dubG9hZHMgZmlsZSB0byBBV1MgUzMgdXNpbmcgYSBwcmVzaWduZWQgVVJMLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8YW55Pn1cclxuICAgKiBAbWVtYmVyb2YgRmlsZVVwbG9hZFNlcnZpY2VcclxuICAgKi9cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIGRvd25sb2FkRmlsZShmaWxlRG93bmxvYWRQcmVzaWduZWRVcmw6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldChmaWxlRG93bmxvYWRQcmVzaWduZWRVcmwpLnBpcGUoXHJcbiAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgIH0pLFxyXG4gICAgICBjYXRjaEVycm9yKChlcnJvclJlcykgPT4ge1xyXG4gICAgICAgIHRocm93IGVycm9yUmVzO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFZhbGlkYXRlcyB0aGUgdG90YWwgc2l6ZSBvZiB0aGUgZmlsZXMgdXBsb2FkZWQuXHJcbiAgICogQHBhcmFtIHsoRmlsZSB8IEZpbGVMaXN0KX0gZmlsZXMgLVRoZSBmaWxlcyB0byBiZSB2YWxpZGF0ZWQuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IG1heEZpbGVTaXplXHJcbiAgICogQHBhcmFtIHtib29sZWFufSBpc011bHRpRmlsZVVwbG9hZFxyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IC1SZXR1cm5zIHRydWUgaWYgdGhlIHRvdGFsIHNpemUgb2YgZmlsZXMgaXMgd2l0aGluIHRoZSBzcGVjaWZpZWQgbGltaXQsIG90aGVyd2lzZSBmYWxzZS5cclxuICAgKiBAbWVtYmVyb2YgRmlsZVVwbG9hZFNlcnZpY2VcclxuICAgKi9cclxuICB2YWxpZGF0ZUZpbGVTaXplKFxyXG4gICAgZmlsZXM6IEZpbGUgfCBGaWxlTGlzdCxcclxuICAgIG1heEZpbGVTaXplOiBudW1iZXIsXHJcbiAgICBpc011bHRpRmlsZVVwbG9hZDogYm9vbGVhblxyXG4gICk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKGlzTXVsdGlGaWxlVXBsb2FkKSB7XHJcbiAgICAgIGxldCB0b3RhbFNpemUgPSAwO1xyXG4gICAgICBPYmplY3QudmFsdWVzKGZpbGVzKS5mb3JFYWNoKChmaWxlOiBGaWxlKSA9PiB7XHJcbiAgICAgICAgdG90YWxTaXplICs9IGZpbGUuc2l6ZTtcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiB0b3RhbFNpemUgLyAoMTAyNCAqIDEwMjQpIDw9IG1heEZpbGVTaXplO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIChmaWxlcyBhcyBGaWxlKS5zaXplIC8gKDEwMjQgKiAxMDI0KSA8PSBtYXhGaWxlU2l6ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFZhbGlkYXRlcyB0aGUgZmlsZSB0eXBlcyBvZiB0aGUgdXBsb2FkZWQgZmlsZXMuXHJcbiAgICogQHBhcmFtIHsoRmlsZSB8IEZpbGVMaXN0KX0gZmlsZXNcclxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBhbGxvd2VkRmlsZVR5cGVzXHJcbiAgICogQHBhcmFtIHtib29sZWFufSBpc011bHRpRmlsZVVwbG9hZFxyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IC1SZXR1cm5zIHRydWUgaWYgYWxsIGZpbGVzIGhhdmUgdmFsaWQgZXh0ZW5zaW9ucywgb3RoZXJ3aXNlIGZhbHNlLlxyXG4gICAqIEBtZW1iZXJvZiBGaWxlVXBsb2FkU2VydmljZVxyXG4gICAqL1xyXG4gIHZhbGlkYXRlRmlsZVR5cGVzKFxyXG4gICAgZmlsZXM6IEZpbGUgfCBGaWxlTGlzdCxcclxuICAgIGFsbG93ZWRGaWxlVHlwZXM6IHN0cmluZ1tdLFxyXG4gICAgaXNNdWx0aUZpbGVVcGxvYWQ6IGJvb2xlYW5cclxuICApOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHZhbGlkYXRlU2luZ2xlRmlsZSA9IChmaWxlOiBGaWxlKTogYm9vbGVhbiA9PiB7XHJcbiAgICAgIGNvbnN0IGZpbGVFeHRlbnNpb24gPSB0aGlzLmdldEZpbGVFeHRlbnNpb24oZmlsZS5uYW1lKTtcclxuICAgICAgcmV0dXJuIGFsbG93ZWRGaWxlVHlwZXM/LmluY2x1ZGVzKGZpbGVFeHRlbnNpb24pO1xyXG4gICAgfTtcclxuICAgIGlmIChpc011bHRpRmlsZVVwbG9hZCkge1xyXG4gICAgICBsZXQgYWxsRmlsZXNWYWxpZCA9IHRydWU7XHJcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgIE9iamVjdC52YWx1ZXMoZmlsZXMpPy5mb3JFYWNoKChmaWxlSXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKCF2YWxpZGF0ZVNpbmdsZUZpbGUoZmlsZUl0ZW0pKSB7XHJcbiAgICAgICAgICBhbGxGaWxlc1ZhbGlkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIGFsbEZpbGVzVmFsaWQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsaWRhdGVTaW5nbGVGaWxlKGZpbGVzIGFzIEZpbGUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXh0cmFjdHMgYW5kIHJldHVybnMgdGhlIGV4dGVuc2lvbiBvZiBhIGZpbGUgZnJvbSBpdHMgbmFtZS5cclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlTmFtZVxyXG4gICAqIEByZXR1cm4ge3N0cmluZ30gLVRoZSBmaWxlIGV4dGVuc2lvbiBpbiBsb3dlcmNhc2UuXHJcbiAgICogQG1lbWJlcm9mIEZpbGVVcGxvYWRTZXJ2aWNlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXRGaWxlRXh0ZW5zaW9uKGZpbGVOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cclxuICAgIHJldHVybiBmaWxlTmFtZT8uc3BsaXQoJy4nKS5wb3AoKSEudG9Mb3dlckNhc2UoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEltcGxlbWVudGF0aW9uIG9mIG5nT25EZXN0cm95IGxpZmVjeWNsZSBob29rIG1ldGhvZCB0byB1bnN1YnNjcmliZSB0aGUgb3BlbiBvYnNlcnZhYmxlIHN1YnNjcmlwdGlvbnMuXHJcbiAgICogQG1lbWJlcm9mIEZpbGVVcGxvYWRTZXJ2aWNlXHJcbiAgICovXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==