@annalib/anna-core 28.7.0 → 28.7.1

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 (41) hide show
  1. package/esm2022/lib/anna-core-shared-lib/components/anna-circular-progress/anna-circular-progress.component.mjs +52 -0
  2. package/esm2022/lib/anna-core-shared-lib/components/anna-icon-column/anna-icon-column.component.mjs +5 -5
  3. package/esm2022/lib/anna-core-shared-lib/components/anna-spinner-loader/anna-spinner-loader.component.mjs +26 -0
  4. package/esm2022/lib/anna-core-shared-lib/constants/shared.constant.mjs +2 -2
  5. package/esm2022/lib/anna-core-shared-lib/models/anna-global-dropdown-config.model.mjs +1 -1
  6. package/esm2022/lib/anna-core-shared-lib/models/anna-non-editable-gt-models.mjs +2 -1
  7. package/esm2022/lib/anna-core-shared-lib/models/anna-tooltip.model.mjs +4 -2
  8. package/esm2022/lib/anna-core-shared-lib/services/anna-filter.service.mjs +130 -11
  9. package/esm2022/lib/anna-core-shared-lib/services/anna-global-config.service.mjs +16 -57
  10. package/esm2022/lib/anna-core-shared-lib/services/anna-persisting-filter.service.mjs +5 -1
  11. package/esm2022/lib/anna-core-shared-lib/services/anna-spinner-loader.service.mjs +24 -0
  12. package/esm2022/lib/anna-core.module.mjs +10 -4
  13. package/esm2022/lib/anna-dropdown-lib/components/anna-calendar-filter/anna-calendar-filter.component.mjs +2 -2
  14. package/esm2022/lib/anna-dropdown-lib/components/anna-week-calendar-filter/anna-week-calendar-filter.component.mjs +4 -4
  15. package/esm2022/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-checkbox-filter/anna-column-checkbox-filter.component.mjs +6 -3
  16. package/esm2022/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-time-filter/anna-column-time-filter.component.mjs +6 -2
  17. package/esm2022/lib/anna-generic-table-lib/components/anna-non-editable-generic-table/anna-non-editable-generic-table.component.mjs +41 -14
  18. package/esm2022/public-api.mjs +4 -1
  19. package/fesm2022/annalib-anna-core.mjs +316 -102
  20. package/fesm2022/annalib-anna-core.mjs.map +1 -1
  21. package/lib/anna-core-shared-lib/components/anna-circular-progress/anna-circular-progress.component.d.ts +20 -0
  22. package/lib/anna-core-shared-lib/components/anna-icon-column/anna-icon-column.component.d.ts +1 -1
  23. package/lib/anna-core-shared-lib/components/anna-spinner-loader/anna-spinner-loader.component.d.ts +12 -0
  24. package/lib/anna-core-shared-lib/constants/shared.constant.d.ts +1 -1
  25. package/lib/anna-core-shared-lib/models/anna-global-dropdown-config.model.d.ts +1 -0
  26. package/lib/anna-core-shared-lib/models/anna-non-editable-gt-models.d.ts +5 -2
  27. package/lib/anna-core-shared-lib/models/anna-tooltip.model.d.ts +3 -1
  28. package/lib/anna-core-shared-lib/services/anna-date-time-format.service.d.ts +2 -2
  29. package/lib/anna-core-shared-lib/services/anna-filter.service.d.ts +8 -2
  30. package/lib/anna-core-shared-lib/services/anna-global-config.service.d.ts +3 -7
  31. package/lib/anna-core-shared-lib/services/anna-spinner-loader.service.d.ts +9 -0
  32. package/lib/anna-core.module.d.ts +2 -1
  33. package/lib/anna-dropdown-lib/components/anna-week-calendar-filter/anna-week-calendar-filter.component.d.ts +2 -2
  34. package/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-checkbox-filter/anna-column-checkbox-filter.component.d.ts +3 -0
  35. package/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-time-filter/anna-column-time-filter.component.d.ts +2 -1
  36. package/lib/anna-generic-table-lib/components/anna-non-editable-generic-table/anna-non-editable-generic-table.component.d.ts +1 -1
  37. package/package.json +1 -1
  38. package/public-api.d.ts +3 -0
  39. package/src/lib/anna-common-scss/_customDropdown.scss +1 -0
  40. package/src/lib/anna-common-scss/_easy-filter.scss +2 -1
  41. package/src/lib/anna-common-scss/_email-button.scss +89 -0
@@ -16,7 +16,7 @@ import * as i4 from "@angular/forms";
16
16
  export class AnnaWeekCalendarComponent {
17
17
  ngOnChanges(changes) {
18
18
  // if some values are not sent, setting the default values
19
- this.defaultValues = this.globalConfigService.defaultWeekCalendarConfig;
19
+ this.defaultValues = this.annaGlobalConfig.defaultWeekCalendarConfig;
20
20
  this.config = { ...this.defaultValues, ...this.config };
21
21
  if (this.config.selectCurrentWeek) {
22
22
  this.initializeWeekData();
@@ -37,11 +37,11 @@ export class AnnaWeekCalendarComponent {
37
37
  this.disabledFunc = (date, current) => this.checkIfDateIsDisabled(date);
38
38
  }
39
39
  }
40
- constructor(calendar, datePickerConfig, annaDateTimeFormatService, globalConfigService) {
40
+ constructor(calendar, datePickerConfig, annaDateTimeFormatService, annaGlobalConfig) {
41
41
  this.calendar = calendar;
42
42
  this.datePickerConfig = datePickerConfig;
43
43
  this.annaDateTimeFormatService = annaDateTimeFormatService;
44
- this.globalConfigService = globalConfigService;
44
+ this.annaGlobalConfig = annaGlobalConfig;
45
45
  this.hoveredDate = null;
46
46
  this.toDate = null;
47
47
  this.weekNumbers = [];
@@ -356,4 +356,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
356
356
  }], calendarToggled: [{
357
357
  type: Output
358
358
  }] } });
359
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5uYS13ZWVrLWNhbGVuZGFyLWZpbHRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbm5hLWNvcmUvc3JjL2xpYi9hbm5hLWRyb3Bkb3duLWxpYi9jb21wb25lbnRzL2FubmEtd2Vlay1jYWxlbmRhci1maWx0ZXIvYW5uYS13ZWVrLWNhbGVuZGFyLWZpbHRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbm5hLWNvcmUvc3JjL2xpYi9hbm5hLWRyb3Bkb3duLWxpYi9jb21wb25lbnRzL2FubmEtd2Vlay1jYWxlbmRhci1maWx0ZXIvYW5uYS13ZWVrLWNhbGVuZGFyLWZpbHRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw0QkFBNEI7QUFDNUIsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUQsT0FBTyxFQUFpQixTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUN4SCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsZ0NBQWdDO0FBQ2hDLE9BQU8sRUFDSCxXQUFXLEVBQ1gsT0FBTyxFQUNQLGFBQWEsRUFDYixtQkFBbUIsRUFFbkIsa0JBQWtCLEdBQ3JCLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBSTFCLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHNFQUFzRSxDQUFDO0FBQ2pILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG1FQUFtRSxDQUFDOzs7Ozs7QUFFNUcsaUNBQWlDO0FBU2pDLE1BQU0sT0FBTyx5QkFBeUI7SUFvQ2xDLFdBQVcsQ0FBQyxPQUFzQjtRQUM5QiwwREFBMEQ7UUFDMUQs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Q0FBQyxhQUFhLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsZUFBZSxDQUFDLGFBQWtCO1FBQzlCLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMxQixDQUFDOytHQXRaUSx5QkFBeUI7bUdBQXpCLHlCQUF5QiwwWUM3QnRDLGs1S0F1SkEsa2hJRDVIYyxJQUFJLDRGQUFFLFdBQVcsd2RBQUUsa0JBQWtCLHllQUFFLE9BQU8sb0ZBQUUsYUFBYTs7NEZBRTlELHlCQUF5QjtrQkFQckMsU0FBUzsrQkFDSSxvQ0FBb0MsY0FHbEMsSUFBSSxXQUNQLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsYUFBYSxDQUFDO2tOQXNCL0QsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQVFHLE1BQU07c0JBQWQsS0FBSztnQkFDSSx3QkFBd0I7c0JBQWpDLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFuZ3VsYXIgaW1wb3J0IHN0YXRlbWVudHNcclxuaW1wb3J0IHsgRGF0ZVBpcGUsIE5nQ2xhc3MsIE5nSWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbi8vIFRoaXJkIHBhcnR5IGltcG9ydCBzdGF0ZW1lbnRzXHJcbmltcG9ydCB7XHJcbiAgICBOZ2JDYWxlbmRhcixcclxuICAgIE5nYkRhdGUsXHJcbiAgICBOZ2JEYXRlcGlja2VyLFxyXG4gICAgTmdiRGF0ZXBpY2tlckNvbmZpZyxcclxuICAgIE5nYkRhdGVTdHJ1Y3QsXHJcbiAgICBOZ2JJbnB1dERhdGVwaWNrZXIsXHJcbn0gZnJvbSBcIkBuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwXCI7XHJcbmltcG9ydCBkYXlqcyBmcm9tIFwiZGF5anNcIjtcclxuXHJcbmltcG9ydCB7IFdlZWtPYmplY3QgfSBmcm9tIFwiLi4vLi4vLi4vYW5uYS1jb3JlLXNoYXJlZC1saWIvbW9kZWxzL2FubmEtZ2VuZXJpYy1kYXRhLXR5cGUubW9kZWxcIjtcclxuaW1wb3J0IHsgSVdlZWtDYWxlbmRhciB9IGZyb20gXCIuLi8uLi8uLi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9tb2RlbHMvYW5uYS1nbG9iYWwtZHJvcGRvd24tY29uZmlnLm1vZGVsXCI7XHJcbmltcG9ydCB7IEFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vYW5uYS1jb3JlLXNoYXJlZC1saWIvc2VydmljZXMvYW5uYS1kYXRlLXRpbWUtZm9ybWF0LnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQW5uYUdsb2JhbENvbmZpZ1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vYW5uYS1jb3JlLXNoYXJlZC1saWIvc2VydmljZXMvYW5uYS1nbG9iYWwtY29uZmlnLnNlcnZpY2VcIjtcclxuXHJcbi8vIFVzZXIgZGVmaW5lZCBpbXBvcnQgc3RhdGVtZW50c1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogXCJhbm5hLWNvcmUtd2Vlay1jYWxlbmRhci1maWx0ZXItbGliXCIsXHJcbiAgICB0ZW1wbGF0ZVVybDogXCIuL2FubmEtd2Vlay1jYWxlbmRhci1maWx0ZXIuY29tcG9uZW50Lmh0bWxcIixcclxuICAgIHN0eWxlVXJsczogW1wiLi9hbm5hLXdlZWstY2FsZW5kYXItZmlsdGVyLmNvbXBvbmVudC5zY3NzXCJdLFxyXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICAgIGltcG9ydHM6IFtOZ0lmLCBGb3Jtc01vZHVsZSwgTmdiSW5wdXREYXRlcGlja2VyLCBOZ0NsYXNzLCBOZ2JEYXRlcGlja2VyXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEFubmFXZWVrQ2FsZW5kYXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgICBmcm9tRGF0ZTogTmdiRGF0ZSB8IG51bGw7XHJcbiAgICBob3ZlcmVkRGF0ZTogTmdiRGF0ZSB8IG51bGwgPSBudWxsO1xyXG4gICAgdG9EYXRlOiBOZ2JEYXRlIHwgbnVsbCA9IG51bGw7XHJcbiAgICB0b2RheTogTmdiRGF0ZTtcclxuXHJcbiAgICBtb2RlbDogTmdiRGF0ZVN0cnVjdDtcclxuXHJcbiAgICB3ZWVrTnVtYmVyczogc3RyaW5nW10gPSBbXTtcclxuICAgIHBpcGU6IERhdGVQaXBlO1xyXG4gICAgZGF0ZVRvRGlzcGxheTogc3RyaW5nID0gXCJcIjtcclxuICAgIHdlZWtPYmplY3RzOiBXZWVrT2JqZWN0W107XHJcbiAgICBtdWx0aVNlbGVjdERyb3Bkb3duT3BlbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgZGF0ZXBpY2tlcjogTmdiSW5wdXREYXRlcGlja2VyO1xyXG4gICAgcHJpdmF0ZSBmb3JtYXR0ZXI6IGFueTtcclxuICAgIHB1YmxpYyBmb3JtYXR0ZWRTdGFydERhdGU6IHN0cmluZztcclxuICAgIHB1YmxpYyBmb3JtYXR0ZWRFbmREYXRlOiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIGNhbGVuZGFyTWFwID0gbmV3IE1hcCgpO1xyXG4gICAgcHJpdmF0ZSBmbGFnMTogYm9vbGVhbjtcclxuICAgIHByaXZhdGUgZmxhZzI6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBzZWxlY3RlZEZyb21EYXRlOiBOZ2JEYXRlU3RydWN0O1xyXG4gICAgQElucHV0KCkgc2VsZWN0ZWRFbmREYXRlOiBOZ2JEYXRlU3RydWN0O1xyXG4gICAgQElucHV0KCkgZGlzYWJsZWREYXRlczogTmdiRGF0ZVtdID0gW107XHJcbiAgICBASW5wdXQoKSBtYXhEYXRlOiBhbnk7XHJcbiAgICBASW5wdXQoKSBtaW5EYXRlOiBhbnk7XHJcblxyXG4gICAgZGlzYWJsZWRGdW5jOiBhbnk7XHJcbiAgICBzdGF0ZTogYW55O1xyXG5cclxuICAgIC8vIFNldHRpbmcgdGhlIGRlZmF1bHQgdmFsdWVzO1xyXG4gICAgcHJpdmF0ZSBkZWZhdWx0VmFsdWVzOiBJV2Vla0NhbGVuZGFyO1xyXG5cclxuICAgIEBJbnB1dCgpIGNvbmZpZzogSVdlZWtDYWxlbmRhcjtcclxuICAgIEBPdXRwdXQoKSBhcHBseVdlZWtDYWxlbmRhckNoYW5nZXMgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICBAT3V0cHV0KCkgY2FsZW5kYXJUb2dnbGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgICAgICAvLyBpZiBzb21lIHZhbHVlcyBhcmUgbm90IHNlbnQsIHNldHRpbmcgdGhlIGRlZmF1bHQgdmFsdWVzXHJcbiAgICAgICAgdGhpcy5kZWZhdWx0VmFsdWVzID0gdGhpcy5nbG9iYWxDb25maWdTZXJ2aWNlLmRlZmF1bHRXZWVrQ2FsZW5kYXJDb25maWc7XHJcbiAgICAgICAgdGhpcy5jb25maWcgPSB7IC4uLnRoaXMuZGVmYXVsdFZhbHVlcywgLi4udGhpcy5jb25maWcgfTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLnNlbGVjdEN1cnJlbnRXZWVrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZVdlZWtEYXRhKCk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmZyb21EYXRlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFdlZWsodGhpcy5mcm9tRGF0ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZm9ybWF0dGVyID0gdGhpcy5mb3JtYXR0ZWREYXRlcygpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEZyb21EYXRlICYmIHRoaXMuc2VsZWN0ZWRFbmREYXRlICYmIHRoaXMuY29uZmlnKSB7XHJcbiAgICAgICAgICAgIC8vIHRoaXMuc2VsZWN0V2Vlayh0aGlzLmZyb21EYXRlKTtcclxuICAgICAgICAgICAgdGhpcy5mcm9tRGF0ZSA9IE5nYkRhdGUuZnJvbSh0aGlzLnNlbGVjdGVkRnJvbURhdGUpO1xyXG4gICAgICAgICAgICB0aGlzLnRvRGF0ZSA9IE5nYkRhdGUuZnJvbSh0aGlzLnNlbGVjdGVkRW5kRGF0ZSk7XHJcbiAgICAgICAgICAgIHRoaXMud2Vla051bWJlckdlbmVyYXRvcigpO1xyXG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlUb1VJKCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Q2FsZW5kYXJNYXAoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkRGF0ZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmRpc2FibGVkRnVuYyA9IChkYXRlOiBOZ2JEYXRlLCBjdXJyZW50OiB7IG1vbnRoOiBudW1iZXIgfSkgPT4gdGhpcy5jaGVja0lmRGF0ZUlzRGlzYWJsZWQoZGF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgY2FsZW5kYXI6IE5nYkNhbGVuZGFyLFxyXG4gICAgICAgIHByaXZhdGUgZGF0ZVBpY2tlckNvbmZpZzogTmdiRGF0ZXBpY2tlckNvbmZpZyxcclxuICAgICAgICBwcml2YXRlIGFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2U6IEFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBnbG9iYWxDb25maWdTZXJ2aWNlOiBBbm5hR2xvYmFsQ29uZmlnU2VydmljZSxcclxuICAgICkge31cclxuXHJcbiAgICBnZXRXZWVrTnVtYmVyKHdlZWs6IGFueSwgZmlyc3REYXlPZldlZWs6IGFueSkge1xyXG4gICAgICAgIGNvbnN0IHdlZWtTdGFydERhdGUgPSBkYXlqcyhjb252ZXJ0TmdiRGF0ZVRvTW9tZW50KHdlZWtbMF0pLCBcIk1NL0REL1lZWVlcIik7XHJcbiAgICAgICAgY29uc3Qgd2Vla1llYXIgPSB3ZWVrU3RhcnREYXRlLnllYXIoKTtcclxuICAgICAgICBjb25zdCB5ZWFyU3RhcnREYXRlID0gZGF5anMoYDAxLzAxLyR7d2Vla1llYXJ9YCwgXCJNTS9ERC9ZWVlZXCIpO1xyXG4gICAgICAgIGNvbnN0IHdlZWtEYXkgPSB5ZWFyU3RhcnREYXRlLmRheSgpO1xyXG5cclxuICAgICAgICBjb25zdCBub09mRGF5cyA9IHdlZWtTdGFydERhdGUuZGlmZih5ZWFyU3RhcnREYXRlLCBcImRcIikgKyAxO1xyXG5cclxuICAgICAgICBmdW5jdGlvbiBjb252ZXJ0TmdiRGF0ZVRvTW9tZW50KG5nYkRhdGU6IE5nYkRhdGUpOiBzdHJpbmcge1xyXG4gICAgICAgICAgICBsZXQgY29udmVydGVkID0gbnVsbDtcclxuICAgICAgICAgICAgaWYgKG5nYkRhdGUgJiYgbmdiRGF0ZS5tb250aCAmJiBuZ2JEYXRlLmRheSAmJiBuZ2JEYXRlLnllYXIpIHtcclxuICAgICAgICAgICAgICAgIGNvbnZlcnRlZCA9IGAke25nYkRhdGUubW9udGh9LyR7bmdiRGF0ZS5kYXl9LyR7bmdiRGF0ZS55ZWFyfWA7XHJcbiAgICAgICAgICAgICAgICBjb252ZXJ0ZWQgPSBkYXlqcyhjb252ZXJ0ZWQpLmZvcm1hdChcIk1NL0REL1lZWVlcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRlZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGNoZWNrSWZZZWFySXNCcm9hZGNhc3RMZWFwWWVhcigpIHtcclxuICAgICAgICAgICAgY29uc3QgaXNMZWFwWWVhciA9ICh3ZWVrWWVhciAlIDQgPT09IDAgJiYgd2Vla1llYXIgJSAxMDAgIT09IDApIHx8IHdlZWtZZWFyICUgNDAwID09PSAwO1xyXG4gICAgICAgICAgICByZXR1cm4gKGlzTGVhcFllYXIgJiYgKHdlZWtEYXkgPT09IDAgfHwgd2Vla0RheSA9PT0gNikpIHx8ICghaXNMZWFwWWVhciAmJiB3ZWVrRGF5ID09PSAwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGlzTGVhcFllYXIgPSBjaGVja0lmWWVhcklzQnJvYWRjYXN0TGVhcFllYXIoKTtcclxuICAgICAgICBjb25zdCBkaXZpZGVyID0gaXNMZWFwWWVhciA/IDUzIDogNTI7XHJcbiAgICAgICAgY29uc3QgYWRkZXIgPSBpc0xlYXBZZWFyID8gMiA6IDE7XHJcblxyXG4gICAgICAgIGNvbnN0IGJyb2FkY2FzdE51bWJlck9mRGF5cyA9IHdlZWtEYXkgKyBub09mRGF5cztcclxuICAgICAgICBjb25zdCBicm9hZGNhc3RXZWVrTnVtYmVyID1cclxuICAgICAgICAgICAgYnJvYWRjYXN0TnVtYmVyT2ZEYXlzICUgNyA+IDAgPyBicm9hZGNhc3ROdW1iZXJPZkRheXMgLyA3ICsgYWRkZXIgOiBicm9hZGNhc3ROdW1iZXJPZkRheXMgLyA3O1xyXG5cclxuICAgICAgICBpZiAoTWF0aC5mbG9vcihicm9hZGNhc3RXZWVrTnVtYmVyICUgZGl2aWRlcikgPT09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGRpdmlkZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKGJyb2FkY2FzdFdlZWtOdW1iZXIgJSBkaXZpZGVyKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICAgICAgLy8gQ0hBTkdFU0BBTk5BTElCIENoYW5nZWQgdGhpcy5cclxuICAgICAgICAvLyB0aGlzLmNhbGVuZGFyW1wiX19wcm90b19fXCJdLmdldFdlZWtOdW1iZXIgPSB0aGlzLmdldFdlZWtOdW1iZXI7XHJcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMuY2FsZW5kYXIsIHsgZ2V0V2Vla051bWJlcjogdGhpcy5nZXRXZWVrTnVtYmVyIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIC8vIHRoaXMuc2VsZWN0V2Vlayh0aGlzLmZyb21EYXRlKTtcclxuICAgICAgICB0aGlzLnNldENhbGVuZGFyTWFwKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdGlhbGl6ZVdlZWtEYXRhKCkge1xyXG4gICAgICAgIHRoaXMud2Vla09iamVjdHMgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5mcm9tRGF0ZSA9IHRoaXMuY2FsZW5kYXIuZ2V0VG9kYXkoKTtcclxuICAgICAgICB0aGlzLnRvZGF5ID0gdGhpcy5jYWxlbmRhci5nZXRUb2RheSgpO1xyXG5cclxuICAgICAgICBjb25zdCBiYWNrRGF0ZWRQZXJpb2QgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwidXNlckRldGFpbHNcIikgfHwgXCJ7fVwiKS5sb2NraW5nX3BlcmlvZF9kYXlzO1xyXG4gICAgICAgIGlmIChiYWNrRGF0ZWRQZXJpb2QgPCAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGU6IE5nYkRhdGUgPSB0aGlzLmNhbGVuZGFyLmdldFByZXYodGhpcy5jYWxlbmRhci5nZXRUb2RheSgpLCBcImRcIiwgTWF0aC5hYnMoYmFja0RhdGVkUGVyaW9kKSk7XHJcbiAgICAgICAgICAgIHRoaXMudG9kYXkgPSBOZ2JEYXRlLmZyb20oZGF0ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuZnJvbURhdGUgPSBOZ2JEYXRlLmZyb20oZGF0ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBEaXNhYmxlIG1vbnRocyBiZWZvcmUgbnVtYmVyT2ZNb250aHNUb0VuYWJsZVxyXG4gICAgICAgIHRoaXMuZGF0ZVBpY2tlckNvbmZpZy5tYXJrRGlzYWJsZWQgPSAoZGF0ZTogTmdiRGF0ZVN0cnVjdCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBwcmV2aW91c01vbnRoID0gdGhpcy5jYWxlbmRhci5nZXRQcmV2KHRoaXMudG9kYXksIFwibVwiLCB0aGlzLmNvbmZpZy5udW1iZXJPZk1vbnRoc1RvRW5hYmxlSW5QYXN0KTtcclxuICAgICAgICAgICAgY29uc3QgcHJldmlvdXNEYXkgPSB0aGlzLmNhbGVuZGFyLmdldFByZXYocHJldmlvdXNNb250aCwgXCJkXCIsIDEpO1xyXG4gICAgICAgICAgICByZXR1cm4gIU5nYkRhdGUuZnJvbShwcmV2aW91c0RheSkuYmVmb3JlKGRhdGUpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5mb3JtYXR0ZXIgPSB0aGlzLmZvcm1hdHRlZERhdGVzKCk7XHJcbiAgICAgICAgdGhpcy5mbGFnMSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZmxhZzIgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RXZWVrKGRhdGU6IE5nYkRhdGUpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBkYXRlT2JqZWN0ID0gbmV3IERhdGUoZGF0ZS55ZWFyLCBkYXRlLm1vbnRoIC0gMSwgZGF0ZS5kYXkpO1xyXG4gICAgICAgIGxldCBjb25zdHJ1Y3REYXRlID0gdGhpcy5idWlsZERhdGUoZGF0ZU9iamVjdCk7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5jb25maWcuc2VsZWN0TXVsdGlwbGVXZWVrcykge1xyXG4gICAgICAgICAgICAvLyBTaW5nbGUgd2VlayBzZWxlY3Rpb25cclxuICAgICAgICAgICAgdGhpcy5mcm9tRGF0ZSA9IHRoaXMuY29uc3RydWN0U3RhcnREYXRlKGRhdGVPYmplY3QpKGNvbnN0cnVjdERhdGUpO1xyXG4gICAgICAgICAgICB0aGlzLnRvRGF0ZSA9IHRoaXMuY29uc3RydWN0RW5kRGF0ZShkYXRlT2JqZWN0KShjb25zdHJ1Y3REYXRlKTtcclxuICAgICAgICAgICAgdGhpcy53ZWVrTnVtYmVyR2VuZXJhdG9yKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGRhdGUuYmVmb3JlKHRoaXMuZnJvbURhdGUpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZyb21EYXRlID0gdGhpcy5jb25zdHJ1Y3RTdGFydERhdGUoZGF0ZU9iamVjdCkoY29uc3RydWN0RGF0ZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5mbGFnMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9EYXRlID0gdGhpcy5jb25zdHJ1Y3RFbmREYXRlKGRhdGVPYmplY3QpKGNvbnN0cnVjdERhdGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5mbGFnMSA9ICF0aGlzLmZsYWcxO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGUuYWZ0ZXIodGhpcy50b0RhdGUpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5mbGFnMikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZnJvbURhdGUgPSB0aGlzLmNvbnN0cnVjdFN0YXJ0RGF0ZShkYXRlT2JqZWN0KShjb25zdHJ1Y3REYXRlKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLnRvRGF0ZSA9IHRoaXMuY29uc3RydWN0RW5kRGF0ZShkYXRlT2JqZWN0KShjb25zdHJ1Y3REYXRlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuZmxhZzIgPSAhdGhpcy5mbGFnMjtcclxuICAgICAgICAgICAgICAgIHRoaXMudG9EYXRlID0gdGhpcy5jb25zdHJ1Y3RFbmREYXRlKGRhdGVPYmplY3QpKGNvbnN0cnVjdERhdGUpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mcm9tRGF0ZSA9IHRoaXMuY29uc3RydWN0U3RhcnREYXRlKGRhdGVPYmplY3QpKGNvbnN0cnVjdERhdGUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b0RhdGUgPSB0aGlzLmNvbnN0cnVjdEVuZERhdGUoZGF0ZU9iamVjdCkoY29uc3RydWN0RGF0ZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRpc2FibGVkRGF0ZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGF5anNTdGFydERhdGUgPSBkYXlqcyhcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UuY29udmVydE5nYkRhdGVUb01vbWVudCh0aGlzLmZyb21EYXRlKSxcclxuICAgICAgICAgICAgICAgICAgICBcIk1NL0REL1lZWVlcIixcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkYXlqc0VuZERhdGUgPSBkYXlqcyhcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UuY29udmVydE5nYkRhdGVUb01vbWVudCh0aGlzLnRvRGF0ZSksXHJcbiAgICAgICAgICAgICAgICAgICAgXCJNTS9ERC9ZWVlZXCIsXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgbGV0IG5nYkRhdGU7XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoIWRheWpzU3RhcnREYXRlLmlzU2FtZShkYXlqc0VuZERhdGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmdiRGF0ZSA9IHRoaXMuYW5uYURhdGVUaW1lRm9ybWF0U2VydmljZS5jb252ZXJ0VG9OZ2JEYXRlKGRheWpzU3RhcnREYXRlLCBcIk1NL0REL1lZWVlcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY2hlY2tJZkRhdGVJc0Rpc2FibGVkKG5nYkRhdGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBkYXlqc1N0YXJ0RGF0ZS5hZGQoMSwgXCJkXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3RGF0ZU9iamVjdCA9IG5ldyBEYXRlKG5nYkRhdGUueWVhciwgbmdiRGF0ZS5tb250aCAtIDEsIG5nYkRhdGUuZGF5IC0gMSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdHJ1Y3REYXRlID0gdGhpcy5idWlsZERhdGUobmV3RGF0ZU9iamVjdCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvRGF0ZSA9IHRoaXMuY29uc3RydWN0RW5kRGF0ZShuZXdEYXRlT2JqZWN0KShjb25zdHJ1Y3REYXRlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy53ZWVrTnVtYmVyR2VuZXJhdG9yKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuY29uZmlnLnNob3dBc0Ryb3Bkb3duKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXBwbHlDaGFuZ2VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHdlZWtOdW1iZXJHZW5lcmF0b3IoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgZGF0ZXMgPSBbXTtcclxuICAgICAgICBsZXQgd2VlayA9IFtdO1xyXG5cclxuICAgICAgICBsZXQgc3RhcnREYXRlID0gTmdiRGF0ZS5mcm9tKHRoaXMuZnJvbURhdGUpO1xyXG4gICAgICAgIGNvbnN0IGVuZERhdGUgPSBOZ2JEYXRlLmZyb20odGhpcy50b0RhdGUpO1xyXG5cclxuICAgICAgICB3ZWVrLnB1c2goc3RhcnREYXRlKTtcclxuICAgICAgICB3aGlsZSAoZW5kRGF0ZSAhPSBudWxsICYmICFzdGFydERhdGUuZXF1YWxzKGVuZERhdGUpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGUgPSB0aGlzLmNhbGVuZGFyLmdldE5leHQoc3RhcnREYXRlLCBcImRcIiwgMSk7XHJcbiAgICAgICAgICAgIHN0YXJ0RGF0ZSA9IGRhdGU7XHJcbiAgICAgICAgICAgIHdlZWsucHVzaChkYXRlKTtcclxuXHJcbiAgICAgICAgICAgIC8vIENvbGxlY3QgYWxsIGRheXMgaW4gd2VlayB0byBjYWxjdWxhdGUgdGhlIHdlZWsgbnVtYmVyXHJcbiAgICAgICAgICAgIGlmICh3ZWVrLmxlbmd0aCA9PT0gNykge1xyXG4gICAgICAgICAgICAgICAgZGF0ZXMucHVzaCh3ZWVrKTtcclxuICAgICAgICAgICAgICAgIHdlZWsgPSBbXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoKHRoaXMuY29uZmlnLm1heFdlZWtzVG9TZWxlY3QgPz8gMCkgPiAwICYmIGRhdGVzLmxlbmd0aCA+ICh0aGlzLmNvbmZpZy5tYXhXZWVrc1RvU2VsZWN0ID8/IDApKSB7XHJcbiAgICAgICAgICAgIGRhdGVzLnNwbGljZSh0aGlzLmNvbmZpZy5tYXhXZWVrc1RvU2VsZWN0ID8/IDAsIGRhdGVzLmxlbmd0aCAtICh0aGlzLmNvbmZpZy5tYXhXZWVrc1RvU2VsZWN0ID8/IDApKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGVzKGRhdGVzKTtcclxuXHJcbiAgICAgICAgdGhpcy53ZWVrTnVtYmVycyA9IFtdO1xyXG4gICAgICAgIHRoaXMud2Vla09iamVjdHMgPSBbXTtcclxuXHJcbiAgICAgICAgZGF0ZXMuZm9yRWFjaCgoZGF0ZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLndlZWtOdW1iZXJzLnB1c2goYCBXZWVrICR7dGhpcy5jYWxlbmRhci5nZXRXZWVrTnVtYmVyKGRhdGUsIHRoaXMuY29uZmlnLmZpcnN0RGF5T2ZXZWVrKX1gKTtcclxuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkRGF0ZXMgPSB0aGlzLmZvcm1hdHRlcihkYXRlWzBdLCBkYXRlWzZdKTtcclxuICAgICAgICAgICAgY29uc3QgZGF0ZU9iamVjdHMgPSB7XHJcbiAgICAgICAgICAgICAgICBzdGFydERhdGU6IGZvcm1hdHRlZERhdGVzLmZvcm1hdHRlZFN0YXJ0RGF0ZSxcclxuICAgICAgICAgICAgICAgIGVuZERhdGU6IGZvcm1hdHRlZERhdGVzLmZvcm1hdHRlZEVuZERhdGUsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMud2Vla09iamVjdHMucHVzaChkYXRlT2JqZWN0cyk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuZGlzcGxheVRvVUkoKTtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RlZERhdGVzKGRhdGVzOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmZyb21EYXRlID0gZGF0ZXNbMF1bMF07XHJcbiAgICAgICAgdGhpcy50b0RhdGUgPSBkYXRlc1tkYXRlcy5sZW5ndGggLSAxXVs2XTtcclxuICAgIH1cclxuXHJcbiAgICBmb3JtYXR0ZWREYXRlcygpIHtcclxuICAgICAgICBjb25zdCBwaXBlID0gbmV3IERhdGVQaXBlKFwiZW4tVVNcIik7XHJcbiAgICAgICAgcmV0dXJuIChmcm9tRGF0ZTogTmdiRGF0ZSwgdG9EYXRlOiBOZ2JEYXRlKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZyb21EYXRlT2JqZWN0ID0gbmV3IERhdGUoZnJvbURhdGUueWVhciwgZnJvbURhdGUubW9udGggLSAxLCBmcm9tRGF0ZS5kYXkpO1xyXG4gICAgICAgICAgICBjb25zdCB0b0RhdGVPYmplY3QgPSBuZXcgRGF0ZSh0b0RhdGUueWVhciwgdG9EYXRlLm1vbnRoIC0gMSwgdG9EYXRlLmRheSk7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0dGVkU3RhcnREYXRlID0gcGlwZS50cmFuc2Zvcm0oZnJvbURhdGVPYmplY3QsIHRoaXMuY29uZmlnLmRhdGVGb3JtYXRGb3JSZXF1ZXN0KTtcclxuICAgICAgICAgICAgdGhpcy5mb3JtYXR0ZWRFbmREYXRlID0gcGlwZS50cmFuc2Zvcm0odG9EYXRlT2JqZWN0LCB0aGlzLmNvbmZpZy5kYXRlRm9ybWF0Rm9yUmVxdWVzdCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmRhdGVUb0Rpc3BsYXkgPSBgJHtwaXBlLnRyYW5zZm9ybShcclxuICAgICAgICAgICAgICAgIGZyb21EYXRlT2JqZWN0LFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcuZGF0ZUZvcm1hdFRvRGlzcGxheSxcclxuICAgICAgICAgICAgKX0gdG8gJHtwaXBlLnRyYW5zZm9ybSh0b0RhdGVPYmplY3QsIHRoaXMuY29uZmlnLmRhdGVGb3JtYXRUb0Rpc3BsYXkpfWA7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgZGlzcGxheVRvVUkoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNvbmZpZy5zZWxlY3RNdWx0aXBsZVdlZWtzICYmIHRoaXMuZnJvbURhdGUgJiYgdGhpcy50b0RhdGUpIHtcclxuICAgICAgICAgICAgLy8gRGlzcGxheSBmb3Igb25seSBTaW5nbGUgV2Vla1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1hdHRlcih0aGlzLmZyb21EYXRlLCB0aGlzLnRvRGF0ZSk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLndlZWtOdW1iZXJzLmxlbmd0aCA+ICh0aGlzLmNvbmZpZy5tYXhXZWVrc1RvU2hvd1dpdGhSZW1haW5pbmdDb3VudCA/PyAwKSkge1xyXG4gICAgICAgICAgICAvLyBEaXNwbGF5IGZvciBNdWx0aXBsZSBXZWVrc1xyXG4gICAgICAgICAgICBjb25zdCB3ZWVrRGlzcGxheSA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8ICh0aGlzLmNvbmZpZy5tYXhXZWVrc1RvU2hvd1dpdGhSZW1haW5pbmdDb3VudCA/PyAwKTsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB3ZWVrRGlzcGxheS5wdXNoKHRoaXMud2Vla051bWJlcnMuc2hpZnQoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgcmVtYWluaW5nV2Vla3MgPSB0aGlzLndlZWtOdW1iZXJzLmxlbmd0aDtcclxuICAgICAgICAgICAgdGhpcy53ZWVrTnVtYmVycyA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLndlZWtOdW1iZXJzLnB1c2goYCR7d2Vla0Rpc3BsYXl9ICske3JlbWFpbmluZ1dlZWtzfWApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3RTdGFydERhdGUoZGF0ZTogRGF0ZSkge1xyXG4gICAgICAgIGNvbnN0IHsgZmlyc3REYXlPZldlZWsgfSA9IHRoaXMuY29uZmlnO1xyXG4gICAgICAgIHJldHVybiAoY29uc3RydWN0RGF0ZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0RGF5ID0gZGF0ZS5nZXREYXkoKSAhPT0gMCA/IChmaXJzdERheU9mV2VlayA/PyAwKSAtIGRhdGUuZ2V0RGF5KCkgOiAtNjtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdERhdGUoc3RhcnREYXkpO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0RW5kRGF0ZShkYXRlOiBEYXRlKSB7XHJcbiAgICAgICAgY29uc3QgeyBmaXJzdERheU9mV2VlayB9ID0gdGhpcy5jb25maWc7XHJcbiAgICAgICAgcmV0dXJuIChjb25zdHJ1Y3REYXRlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZW5kRGF5ID0gZGF0ZS5nZXREYXkoKSAhPT0gMCA/IChmaXJzdERheU9mV2VlayA/PyAwKSArIDYgLSBkYXRlLmdldERheSgpIDogMDtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdERhdGUoZW5kRGF5KTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGJ1aWxkRGF0ZShkYXRlOiBEYXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIChudW1iZXI6IG51bWJlcik6IE5nYkRhdGUgfCBudWxsID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZGF5ID0gZGF0ZS5nZXREYXRlKCkgKyBudW1iZXI7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGVPYmplY3QgPSBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF5KTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG5nYkRhdGVPYmplY3QgPSB7fSBhcyBOZ2JEYXRlO1xyXG4gICAgICAgICAgICBuZ2JEYXRlT2JqZWN0LmRheSA9IGRheTtcclxuXHJcbiAgICAgICAgICAgIGlmIChuZ2JEYXRlT2JqZWN0LmRheSA+IDMxIHx8IG5nYkRhdGVPYmplY3QuZGF5IDwgMSkge1xyXG4gICAgICAgICAgICAgICAgbmdiRGF0ZU9iamVjdC5kYXkgPSBkYXRlT2JqZWN0LmdldERhdGUoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbmdiRGF0ZU9iamVjdC5tb250aCA9IGRhdGVPYmplY3QuZ2V0TW9udGgoKSArIDE7XHJcbiAgICAgICAgICAgIG5nYkRhdGVPYmplY3QueWVhciA9IGRhdGVPYmplY3QuZ2V0RnVsbFllYXIoKTtcclxuICAgICAgICAgICAgcmV0dXJuIE5nYkRhdGUuZnJvbShuZ2JEYXRlT2JqZWN0KTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGlzSG92ZXJlZChkYXRlOiBOZ2JEYXRlKTogYm9vbGVhbiB8IG51bGwge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIHRoaXMuZnJvbURhdGUgJiZcclxuICAgICAgICAgICAgIXRoaXMudG9EYXRlICYmXHJcbiAgICAgICAgICAgIHRoaXMuaG92ZXJlZERhdGUgJiZcclxuICAgICAgICAgICAgZGF0ZS5hZnRlcih0aGlzLmZyb21EYXRlKSAmJlxyXG4gICAgICAgICAgICBkYXRlLmJlZm9yZSh0aGlzLmhvdmVyZWREYXRlKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaXNJbnNpZGUoZGF0ZTogTmdiRGF0ZSk6IGJvb2xlYW4gfCBudWxsIHtcclxuICAgICAgICByZXR1cm4gdGhpcy50b0RhdGUgJiYgZGF0ZS5hZnRlcih0aGlzLmZyb21EYXRlKSAmJiBkYXRlLmJlZm9yZSh0aGlzLnRvRGF0ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaXNSYW5nZShkYXRlOiBOZ2JEYXRlKTogYm9vbGVhbiB8IG51bGwge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIGRhdGUuZXF1YWxzKHRoaXMuZnJvbURhdGUpIHx8XHJcbiAgICAgICAgICAgICh0aGlzLnRvRGF0ZSAmJiBkYXRlLmVxdWFscyh0aGlzLnRvRGF0ZSkpIHx8XHJcbiAgICAgICAgICAgIHRoaXMuaXNJbnNpZGUoZGF0ZSkgfHxcclxuICAgICAgICAgICAgdGhpcy5pc0hvdmVyZWQoZGF0ZSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHByZXZpb3VzV2VlaygpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5mcm9tRGF0ZSkge1xyXG4gICAgICAgICAgICB0aGlzLnRvRGF0ZSA9IHRoaXMuY2FsZW5kYXIuZ2V0UHJldih0aGlzLmZyb21EYXRlLCBcImRcIiwgMSk7XHJcbiAgICAgICAgICAgIHRoaXMuZnJvbURhdGUgPSB0aGlzLmNhbGVuZGFyLmdldFByZXYodGhpcy5mcm9tRGF0ZSwgXCJkXCIsIHRoaXMuY2FsZW5kYXIuZ2V0RGF5c1BlcldlZWsoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMud2Vla051bWJlckdlbmVyYXRvcigpO1xyXG4gICAgICAgIHRoaXMuYXBwbHlDaGFuZ2VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmV4dFdlZWsoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuZnJvbURhdGUpIHtcclxuICAgICAgICAgICAgdGhpcy5mcm9tRGF0ZSA9IHRoaXMuY2FsZW5kYXIuZ2V0TmV4dCh0aGlzLmZyb21EYXRlLCBcImRcIiwgdGhpcy5jYWxlbmRhci5nZXREYXlzUGVyV2VlaygpKTtcclxuICAgICAgICAgICAgdGhpcy50b0RhdGUgPSB0aGlzLmNhbGVuZGFyLmdldE5leHQodGhpcy5mcm9tRGF0ZSwgXCJkXCIsIHRoaXMuY2FsZW5kYXIuZ2V0RGF5c1BlcldlZWsoKSAtIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLndlZWtOdW1iZXJHZW5lcmF0b3IoKTtcclxuICAgICAgICB0aGlzLmFwcGx5Q2hhbmdlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldENhbGVuZGFyTWFwKCkge1xyXG4gICAgICAgIGNvbnN0IGRhdGVPYmogPSB7IGZyb21EYXRlOiB0aGlzLmZyb21EYXRlLCB0b0RhdGU6IHRoaXMudG9EYXRlIH07XHJcbiAgICAgICAgdGhpcy5jYWxlbmRhck1hcC5zZXQoXCJvbGREYXRlc1wiLCBkYXRlT2JqKTtcclxuICAgIH1cclxuXHJcbiAgICBhcHBseUNoYW5nZXMoKSB7XHJcbiAgICAgICAgdGhpcy5tdWx0aVNlbGVjdERyb3Bkb3duT3BlbiA9IGZhbHNlO1xyXG4gICAgICAgIGlmICghdGhpcy5jb25maWcuZW1pdE11bHRpcGxlV2Vla09iamVjdHMpIHtcclxuICAgICAgICAgICAgY29uc3QgZGF0ZXMgPSB7fSBhcyBXZWVrT2JqZWN0O1xyXG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWREYXRlcyA9IHRoaXMuZm9ybWF0dGVyKHRoaXMuZnJvbURhdGUsIHRoaXMudG9EYXRlKTtcclxuICAgICAgICAgICAgZGF0ZXMuc3RhcnREYXRlID0gZm9ybWF0dGVkRGF0ZXMuZm9ybWF0dGVkU3RhcnREYXRlO1xyXG4gICAgICAgICAgICBkYXRlcy5lbmREYXRlID0gZm9ybWF0dGVkRGF0ZXMuZm9ybWF0dGVkRW5kRGF0ZTtcclxuICAgICAgICAgICAgdGhpcy5hcHBseVdlZWtDYWxlbmRhckNoYW5nZXMuZW1pdChkYXRlcyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5hcHBseVdlZWtDYWxlbmRhckNoYW5nZXMuZW1pdCh0aGlzLndlZWtPYmplY3RzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXRDYWxlbmRhck1hcCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlzRm9jdXNlZCh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5jYWxlbmRhclRvZ2dsZWQuZW1pdCh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaXNEcm9wZG93bk9wZW5lZEZvckNhbGVuZGFyKGRhdGVwaWNrZXI6IE5nYklucHV0RGF0ZXBpY2tlcikge1xyXG4gICAgICAgIHRoaXMuZGF0ZXBpY2tlciA9IGRhdGVwaWNrZXI7XHJcbiAgICAgICAgaWYgKHRoaXMuZGF0ZXBpY2tlci5pc09wZW4oKSkge1xyXG4gICAgICAgICAgICB0aGlzLnJldmVydERhdGVzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0ZXBpY2tlci5jbG9zZSgpO1xyXG4gICAgICAgICAgICB0aGlzLm11bHRpU2VsZWN0RHJvcGRvd25PcGVuID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5kYXRlcGlja2VyLm9wZW4oKTtcclxuICAgICAgICAgICAgdGhpcy5tdWx0aVNlbGVjdERyb3Bkb3duT3BlbiA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldmVydERhdGVzKCkge1xyXG4gICAgICAgIHRoaXMubXVsdGlTZWxlY3REcm9wZG93bk9wZW4gPSBmYWxzZTtcclxuICAgICAgICBpZiAodGhpcy5jYWxlbmRhck1hcC5nZXQoXCJvbGREYXRlc1wiKSkge1xyXG4gICAgICAgICAgICBjb25zdCBkYXRlT2JqID0gdGhpcy5jYWxlbmRhck1hcC5nZXQoXCJvbGREYXRlc1wiKTtcclxuICAgICAgICAgICAgdGhpcy5mcm9tRGF0ZSA9IGRhdGVPYmouZnJvbURhdGU7XHJcbiAgICAgICAgICAgIHRoaXMudG9EYXRlID0gZGF0ZU9iai50b0RhdGU7XHJcbiAgICAgICAgICAgIHRoaXMud2Vla051bWJlckdlbmVyYXRvcigpO1xyXG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlUb1VJKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNoZWNrSWZEYXRlSXNEaXNhYmxlZChkYXRlOiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCB2YWxpZGF0b3JGdW5jID0gKG5nYkRhdGU6IE5nYkRhdGUpID0+XHJcbiAgICAgICAgICAgIG5nYkRhdGUueWVhciA9PT0gZGF0ZS55ZWFyICYmIG5nYkRhdGUubW9udGggPT09IGRhdGUubW9udGggJiYgbmdiRGF0ZS5kYXkgPT09IGRhdGUuZGF5O1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkRGF0ZXMuc29tZSh2YWxpZGF0b3JGdW5jKTtcclxuICAgIH1cclxuXHJcbiAgICBjbG9zZURhdGVwaWNrZXIoZGF0ZXBpY2tlclJlZjogYW55KSB7XHJcbiAgICAgICAgZGF0ZXBpY2tlclJlZi5jbG9zZSgpO1xyXG4gICAgfVxyXG59XHJcbiIsIjxmb3JtXHJcbiAgICBjbGFzcz1cImZvcm0taW5saW5lXCJcclxuICAgICpuZ0lmPVwiY29uZmlnLnNob3dBc0Ryb3Bkb3duXCJcclxuPlxyXG4gICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgaGlkZGVuXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgbmFtZT1cImRhdGVwaWNrZXIgZC1ub25lXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcclxuICAgICAgICAgICAgICAgIG5nYkRhdGVwaWNrZXJcclxuICAgICAgICAgICAgICAgICNkYXRlcGlja2VyPVwibmdiRGF0ZXBpY2tlclwiXHJcbiAgICAgICAgICAgICAgICBbYXV0b0Nsb3NlXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgIChkYXRlU2VsZWN0KT1cInNlbGVjdFdlZWsoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAoY2xvc2VkKT1cImlzRm9jdXNlZChmYWxzZSlcIlxyXG4gICAgICAgICAgICAgICAgW2Rpc3BsYXlNb250aHNdPVwiMVwiXHJcbiAgICAgICAgICAgICAgICBbZGF5VGVtcGxhdGVdPVwidFwiXHJcbiAgICAgICAgICAgICAgICBbc3RhcnREYXRlXT1cImZyb21EYXRlIVwiXHJcbiAgICAgICAgICAgICAgICBbZmlyc3REYXlPZldlZWtdPVwiY29uZmlnLmZpcnN0RGF5T2ZXZWVrXCJcclxuICAgICAgICAgICAgICAgIFtzaG93V2Vla051bWJlcnNdPVwiY29uZmlnLnNob3dXZWVrTnVtYmVyc1wiXHJcbiAgICAgICAgICAgICAgICB0YWJpbmRleD1cIi0xXCJcclxuICAgICAgICAgICAgICAgIFtmb290ZXJUZW1wbGF0ZV09XCJmb290ZXJUZW1wbGF0ZVwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tU2luZ2xlIHdlZWsgc2VsZWN0LS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiIWNvbmZpZy5zZWxlY3RNdWx0aXBsZVdlZWtzXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ3ZWVrbnVtYmVycy1sYWJlbFwiPiAmbmJzcDt7eyB3ZWVrTnVtYmVycyB9fSA8L3NwYW4+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2luZ2xlLXdlZWtcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVmdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1pY29ucyBuZXh0LXJvdW5kLWJ0blwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicHJldmlvdXNXZWVrKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0ZV9uZXh0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgI2RwRnJvbURhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBXZWVrc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIltjb25maWcuY3VzdG9tQ2xhc3MgPT09ICcnID8gJycgOiBjb25maWcuY3VzdG9tQ2xhc3NdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImRwRnJvbURhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZGF0ZVRvRGlzcGxheVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImlzRm9jdXNlZCh0cnVlKTsgaXNEcm9wZG93bk9wZW5lZEZvckNhbGVuZGFyKGRhdGVwaWNrZXIpXCJcclxuICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS1tZW51LWRvd25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFkYXRlcGlja2VyLmlzT3BlbigpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRhdGVwaWNrZXIub3BlbigpXCJcclxuICAgICAgICAgICAgICAgICAgICA+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS1tZW51LXVwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJkYXRlcGlja2VyLmlzT3BlbigpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImlzRHJvcGRvd25PcGVuZWRGb3JDYWxlbmRhcihkYXRlcGlja2VyKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgcm91bmQtYnRuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJuZXh0V2VlaygpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdGVfbmV4dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tTXVsdGlwbGUgd2VlayBzZWxlY3QtLT5cclxuICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cImZvcm0tZ3JvdXBcIlxyXG4gICAgICAgICpuZ0lmPVwiY29uZmlnLnNlbGVjdE11bHRpcGxlV2Vla3NcIlxyXG4gICAgPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXVsdGlwbGUtd2Vla3NcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICNkcEZyb21EYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxyXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IFdlZWtzXCJcclxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJbY29uZmlnLmN1c3RvbUNsYXNzID09PSAnJyA/ICcnIDogY29uZmlnLmN1c3RvbUNsYXNzXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZT1cImRwRnJvbURhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwid2Vla051bWJlcnNcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJpc0ZvY3VzZWQodHJ1ZSk7IGlzRHJvcGRvd25PcGVuZWRGb3JDYWxlbmRhcihkYXRlcGlja2VyKVwiXHJcbiAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFtdWx0aVNlbGVjdERyb3Bkb3duT3BlblwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGkgbWRpLW1lbnUtZG93biBtdWx0aXNlbGVjdC1pbnB1dC1hcnJvd1wiXHJcbiAgICAgICAgICAgICAgICA+PC9pPlxyXG4gICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIm11bHRpU2VsZWN0RHJvcGRvd25PcGVuXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktbWVudS11cCBtdWx0aXNlbGVjdC1pbnB1dC1hcnJvd1wiXHJcbiAgICAgICAgICAgICAgICA+PC9pPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Zvcm0+XHJcblxyXG48bmdiLWRhdGVwaWNrZXJcclxuICAgICN3ZWVrUGlja2VyXHJcbiAgICAqbmdJZj1cIiFjb25maWcuc2hvd0FzRHJvcGRvd25cIlxyXG4gICAgW2Rpc3BsYXlNb250aHNdPVwiMVwiXHJcbiAgICBbc3RhcnREYXRlXT1cImZyb21EYXRlIVwiXHJcbiAgICBbZmlyc3REYXlPZldlZWtdPVwiY29uZmlnLmZpcnN0RGF5T2ZXZWVrXCJcclxuICAgIFtzaG93V2Vla051bWJlcnNdPVwiY29uZmlnLnNob3dXZWVrTnVtYmVyc1wiXHJcbiAgICBbZGF5VGVtcGxhdGVdPVwidFwiXHJcbiAgICBbbWF4RGF0ZV09XCJtYXhEYXRlXCJcclxuICAgIFttaW5EYXRlXT1cIm1pbkRhdGVcIlxyXG4gICAgKGRhdGVTZWxlY3QpPVwic2VsZWN0V2VlaygkZXZlbnQpXCJcclxuICAgIFttYXJrRGlzYWJsZWRdPVwiZGlzYWJsZWRGdW5jXCJcclxuPlxyXG48L25nYi1kYXRlcGlja2VyPlxyXG5cclxuPG5nLXRlbXBsYXRlICNmb290ZXJUZW1wbGF0ZT5cclxuICAgIDxociBjbGFzcz1cIm15LTBcIiAvPlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbSBtLTIgZmxvYXQtcmlnaHQgYXBwbHktYnRuXCJcclxuICAgICAgICAoY2xpY2spPVwiYXBwbHlDaGFuZ2VzKCk7IGNsb3NlRGF0ZXBpY2tlcihkYXRlcGlja2VyKVwiXHJcbiAgICA+XHJcbiAgICAgICAgQXBwbHlcclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbSBtLTIgZmxvYXQtcmlnaHQgY2FuY2VsLWJ0blwiXHJcbiAgICAgICAgKGNsaWNrKT1cInJldmVydERhdGVzKCk7IGNsb3NlRGF0ZXBpY2tlcihkYXRlcGlja2VyKVwiXHJcbiAgICA+XHJcbiAgICAgICAgQ2FuY2VsXHJcbiAgICA8L2J1dHRvbj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZVxyXG4gICAgI3RcclxuICAgIGxldC1kYXRlXHJcbiAgICBsZXQtZm9jdXNlZD1cImZvY3VzZWRcIlxyXG4gICAgbGV0LWRpc2FibGVkPVwiZGlzYWJsZWRcIlxyXG4+XHJcbiAgICA8c3BhblxyXG4gICAgICAgIGNsYXNzPVwiY3VzdG9tLWRheVwiXHJcbiAgICAgICAgW2NsYXNzLmZvY3VzZWRdPVwiZm9jdXNlZFwiXHJcbiAgICAgICAgW2NsYXNzLnJhbmdlXT1cImlzUmFuZ2UoZGF0ZSlcIlxyXG4gICAgICAgIFtjbGFzcy5mYWRlZF09XCJpc0hvdmVyZWQoZGF0ZSkgfHwgaXNJbnNpZGUoZGF0ZSlcIlxyXG4gICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJkaXNhYmxlZFwiXHJcbiAgICAgICAgKG1vdXNlZW50ZXIpPVwiaG92ZXJlZERhdGUgPSBkYXRlXCJcclxuICAgICAgICAobW91c2VsZWF2ZSk9XCJob3ZlcmVkRGF0ZSA9IG51bGxcIlxyXG4gICAgPlxyXG4gICAgICAgIHt7IGRhdGUuZGF5IH19XHJcbiAgICA8L3NwYW4+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
359
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5uYS13ZWVrLWNhbGVuZGFyLWZpbHRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbm5hLWNvcmUvc3JjL2xpYi9hbm5hLWRyb3Bkb3duLWxpYi9jb21wb25lbnRzL2FubmEtd2Vlay1jYWxlbmRhci1maWx0ZXIvYW5uYS13ZWVrLWNhbGVuZGFyLWZpbHRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbm5hLWNvcmUvc3JjL2xpYi9hbm5hLWRyb3Bkb3duLWxpYi9jb21wb25lbnRzL2FubmEtd2Vlay1jYWxlbmRhci1maWx0ZXIvYW5uYS13ZWVrLWNhbGVuZGFyLWZpbHRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw0QkFBNEI7QUFDNUIsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUQsT0FBTyxFQUFpQixTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUN4SCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsZ0NBQWdDO0FBQ2hDLE9BQU8sRUFDSCxXQUFXLEVBQ1gsT0FBTyxFQUNQLGFBQWEsRUFDYixtQkFBbUIsRUFFbkIsa0JBQWtCLEdBQ3JCLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBSTFCLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHNFQUFzRSxDQUFDO0FBQ2pILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG1FQUFtRSxDQUFDOzs7Ozs7QUFFNUcsaUNBQWlDO0FBU2pDLE1BQU0sT0FBTyx5QkFBeUI7SUFvQ2xDLFdBQVcsQ0FBQyxPQUFzQjtRQUM5QiwwREFBMEQ7UUFDMUQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMseUJBQXlCLENBQUM7UUFDckUsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUV4RCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLEVBQUU7WUFDL0IsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDMUIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUNmLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQ2xDO1NBQ0o7UUFFRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV2QyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDOUQsa0NBQWtDO1lBQ2xDLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUNwRCxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ2pELElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDekI7UUFFRCxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMvQixJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsSUFBYSxFQUFFLE9BQTBCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN2RztJQUNMLENBQUM7SUFFRCxZQUNZLFFBQXFCLEVBQ3JCLGdCQUFxQyxFQUNyQyx5QkFBb0QsRUFDcEQsZ0JBQXlDO1FBSHpDLGFBQVEsR0FBUixRQUFRLENBQWE7UUFDckIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFxQjtRQUNyQyw4QkFBeUIsR0FBekIseUJBQXlCLENBQTJCO1FBQ3BELHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBeUI7UUFsRXJELGdCQUFXLEdBQW1CLElBQUksQ0FBQztRQUNuQyxXQUFNLEdBQW1CLElBQUksQ0FBQztRQUs5QixnQkFBVyxHQUFhLEVBQUUsQ0FBQztRQUUzQixrQkFBYSxHQUFXLEVBQUUsQ0FBQztRQUUzQiw0QkFBdUIsR0FBWSxLQUFLLENBQUM7UUFLakMsZ0JBQVcsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBS3ZCLGtCQUFhLEdBQWMsRUFBRSxDQUFDO1FBVzdCLDZCQUF3QixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDOUMsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBbUM1QyxDQUFDO0lBRUosYUFBYSxDQUFDLElBQVMsRUFBRSxjQUFtQjtRQUN4QyxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDM0UsTUFBTSxRQUFRLEdBQUcsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RDLE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxTQUFTLFFBQVEsRUFBRSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQy9ELE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUVwQyxNQUFNLFFBQVEsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFNUQsU0FBUyxzQkFBc0IsQ0FBQyxPQUFnQjtZQUM1QyxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDckIsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLEtBQUssSUFBSSxPQUFPLENBQUMsR0FBRyxJQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUU7Z0JBQ3pELFNBQVMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxLQUFLLElBQUksT0FBTyxDQUFDLEdBQUcsSUFBSSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQzlELFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO2FBQ3JEO1lBQ0QsT0FBTyxTQUFTLENBQUM7UUFDckIsQ0FBQztRQUVELFNBQVMsOEJBQThCO1lBQ25DLE1BQU0sVUFBVSxHQUFHLENBQUMsUUFBUSxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksUUFBUSxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxRQUFRLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQztZQUN4RixPQUFPLENBQUMsVUFBVSxJQUFJLENBQUMsT0FBTyxLQUFLLENBQUMsSUFBSSxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxJQUFJLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQztRQUM5RixDQUFDO1FBRUQsTUFBTSxVQUFVLEdBQUcsOEJBQThCLEVBQUUsQ0FBQztRQUNwRCxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3JDLE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFakMsTUFBTSxxQkFBcUIsR0FBRyxPQUFPLEdBQUcsUUFBUSxDQUFDO1FBQ2pELE1BQU0sbUJBQW1CLEdBQ3JCLHFCQUFxQixHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixHQUFHLENBQUMsQ0FBQztRQUVsRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsbUJBQW1CLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2pELE9BQU8sT0FBTyxDQUFDO1NBQ2xCO1FBQ0QsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRCxlQUFlO1FBQ1gsZ0NBQWdDO1FBQ2hDLGlFQUFpRTtRQUNqRSxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7SUFDaEYsQ0FBQztJQUVELFFBQVE7UUFDSixrQ0FBa0M7UUFDbEMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxrQkFBa0I7UUFDZCxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUV0QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDekMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRXRDLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQztRQUNwRyxJQUFJLGVBQWUsR0FBRyxDQUFDLEVBQUU7WUFDckIsTUFBTSxJQUFJLEdBQVksSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO1lBQ3RHLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNoQyxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDdEM7UUFFRCwrQ0FBK0M7UUFDL0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksR0FBRyxDQUFDLElBQW1CLEVBQUUsRUFBRTtZQUN6RCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLDRCQUE0QixDQUFDLENBQUM7WUFDdkcsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNqRSxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkQsQ0FBQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkMsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDdkIsQ0FBQztJQUVELFVBQVUsQ0FBQyxJQUFhO1FBQ3BCLE1BQU0sVUFBVSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pFLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFL0MsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLEVBQUU7WUFDbEMsd0JBQXdCO1lBQ3hCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ25FLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQy9ELElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1NBQzlCO2FBQU07WUFDSCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUM1QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDbkUsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO29CQUNaLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2lCQUNsRTtnQkFDRCxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQzthQUM1QjtpQkFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUNoQyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7b0JBQ1osSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUM7b0JBQ25FLGtFQUFrRTtpQkFDckU7Z0JBQ0QsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQ2xFO2lCQUFNO2dCQUNILElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUNuRSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUNsRTtZQUVELElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUMvQixNQUFNLGNBQWMsR0FBRyxLQUFLLENBQ3hCLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQ3BFLFlBQVksQ0FDZixDQUFDO2dCQUNGLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FDdEIsSUFBSSxDQUFDLHlCQUF5QixDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFDbEUsWUFBWSxDQUNmLENBQUM7Z0JBQ0YsSUFBSSxPQUFPLENBQUM7Z0JBQ1osT0FBTyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUU7b0JBQ3pDLE9BQU8sR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxDQUFDO29CQUN4RixJQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsRUFBRTt3QkFDckMsTUFBTTtxQkFDVDtvQkFDRCxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztpQkFDOUI7Z0JBQ0QsTUFBTSxhQUFhLEdBQUcsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUNqRixhQUFhLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDOUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDckU7WUFFRCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztTQUM5QjtRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRTtZQUM3QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDdkI7SUFDTCxDQUFDO0lBRUQsbUJBQW1CO1FBQ2YsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUVkLElBQUksU0FBUyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDckIsT0FBTyxPQUFPLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUNsRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3RELFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUVoQix3REFBd0Q7WUFDeEQsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtnQkFDbkIsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDakIsSUFBSSxHQUFHLEVBQUUsQ0FBQzthQUNiO1NBQ0o7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxDQUFDLEVBQUU7WUFDL0YsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixJQUFJLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3ZHO1FBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUUxQixJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUV0QixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDaEcsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEQsTUFBTSxXQUFXLEdBQUc7Z0JBQ2hCLFNBQVMsRUFBRSxjQUFjLENBQUMsa0JBQWtCO2dCQUM1QyxPQUFPLEVBQUUsY0FBYyxDQUFDLGdCQUFnQjthQUMzQyxDQUFDO1lBQ0YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdkMsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVELGFBQWEsQ0FBQyxLQUFVO1FBQ3BCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELGNBQWM7UUFDVixNQUFNLElBQUksR0FBRyxJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuQyxPQUFPLENBQUMsUUFBaUIsRUFBRSxNQUFlLEVBQUUsRUFBRTtZQUMxQyxNQUFNLGNBQWMsR0FBRyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNqRixNQUFNLFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN6RSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBQzNGLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7WUFFdkYsSUFBSSxDQUFDLGFBQWEsR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQ2xDLGNBQWMsRUFDZCxJQUFJLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUNsQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsRUFBRSxDQUFDO1lBQ3hFLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2xFLCtCQUErQjtZQUMvQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQzlDO2FBQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsZ0NBQWdDLElBQUksQ0FBQyxDQUFDLEVBQUU7WUFDdEYsNkJBQTZCO1lBQzdCLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQztZQUN2QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGdDQUFnQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUMxRSxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQzthQUM5QztZQUNELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDO1lBQy9DLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsV0FBVyxLQUFLLGNBQWMsRUFBRSxDQUFDLENBQUM7U0FDOUQ7SUFDTCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsSUFBVTtRQUN6QixNQUFNLEVBQUUsY0FBYyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUN2QyxPQUFPLENBQUMsYUFBa0IsRUFBRSxFQUFFO1lBQzFCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEYsT0FBTyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVELGdCQUFnQixDQUFDLElBQVU7UUFDdkIsTUFBTSxFQUFFLGNBQWMsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDdkMsT0FBTyxDQUFDLGFBQWtCLEVBQUUsRUFBRTtZQUMxQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkYsT0FBTyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVELFNBQVMsQ0FBQyxJQUFVO1FBQ2hCLE9BQU8sQ0FBQyxNQUFjLEVBQWtCLEVBQUU7WUFDdEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLE1BQU0sQ0FBQztZQUNwQyxNQUFNLFVBQVUsR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBRXRFLE1BQU0sYUFBYSxHQUFHLEVBQWEsQ0FBQztZQUNwQyxhQUFhLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztZQUV4QixJQUFJLGFBQWEsQ0FBQyxHQUFHLEdBQUcsRUFBRSxJQUFJLGFBQWEsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFO2dCQUNqRCxhQUFhLENBQUMsR0FBRyxHQUFHLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQzthQUM1QztZQUVELGFBQWEsQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNoRCxhQUFhLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUM5QyxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDdkMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVELFNBQVMsQ0FBQyxJQUFhO1FBQ25CLE9BQU8sQ0FDSCxJQUFJLENBQUMsUUFBUTtZQUNiLENBQUMsSUFBSSxDQUFDLE1BQU07WUFDWixJQUFJLENBQUMsV0FBVztZQUNoQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDekIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQ2hDLENBQUM7SUFDTixDQUFDO0lBRUQsUUFBUSxDQUFDLElBQWE7UUFDbEIsT0FBTyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFFRCxPQUFPLENBQUMsSUFBYTtRQUNqQixPQUFPLENBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQzFCLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN6QyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztZQUNuQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUN2QixDQUFDO0lBQ04sQ0FBQztJQUVELFlBQVk7UUFDUixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDZixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzNELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO1NBQzdGO1FBQ0QsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxRQUFRO1FBQ0osSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2YsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7WUFDMUYsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQy9GO1FBQ0QsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxjQUFjO1FBQ1YsTUFBTSxPQUFPLEdBQUcsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2pFLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsWUFBWTtRQUNSLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxLQUFLLENBQUM7UUFDckMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsdUJBQXVCLEVBQUU7WUFDdEMsTUFBTSxLQUFLLEdBQUcsRUFBZ0IsQ0FBQztZQUMvQixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2xFLEtBQUssQ0FBQyxTQUFTLEdBQUcsY0FBYyxDQUFDLGtCQUFrQixDQUFDO1lBQ3BELEtBQUssQ0FBQyxPQUFPLEdBQUcsY0FBYyxDQUFDLGdCQUFnQixDQUFDO1lBQ2hELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDN0M7YUFBTTtZQUNILElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ3hEO1FBQ0QsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxTQUFTLENBQUMsS0FBVTtRQUNoQixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsMkJBQTJCLENBQUMsVUFBOEI7UUFDdEQsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDN0IsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQzFCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxLQUFLLENBQUM7U0FDeEM7YUFBTTtZQUNILElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQztTQUN2QztJQUNMLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLHVCQUF1QixHQUFHLEtBQUssQ0FBQztRQUNyQyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ2xDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2pELElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztZQUNqQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7WUFDN0IsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ3RCO0lBQ0wsQ0FBQztJQUVELHFCQUFxQixDQUFDLElBQVM7UUFDM0IsTUFBTSxhQUFhLEdBQUcsQ0FBQyxPQUFnQixFQUFFLEVBQUUsQ0FDdkMsT0FBTyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLEtBQUssSUFBSSxPQUFPLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDM0YsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsZUFBZSxDQUFDLGFBQWtCO1FBQzlCLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMxQixDQUFDOytHQXRaUSx5QkFBeUI7bUdBQXpCLHlCQUF5QiwwWUM3QnRDLGs1S0F1SkEsa2hJRDVIYyxJQUFJLDRGQUFFLFdBQVcsd2RBQUUsa0JBQWtCLHllQUFFLE9BQU8sb0ZBQUUsYUFBYTs7NEZBRTlELHlCQUF5QjtrQkFQckMsU0FBUzsrQkFDSSxvQ0FBb0MsY0FHbEMsSUFBSSxXQUNQLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsYUFBYSxDQUFDO2tOQXNCL0QsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQVFHLE1BQU07c0JBQWQsS0FBSztnQkFDSSx3QkFBd0I7c0JBQWpDLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFuZ3VsYXIgaW1wb3J0IHN0YXRlbWVudHNcclxuaW1wb3J0IHsgRGF0ZVBpcGUsIE5nQ2xhc3MsIE5nSWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbi8vIFRoaXJkIHBhcnR5IGltcG9ydCBzdGF0ZW1lbnRzXHJcbmltcG9ydCB7XHJcbiAgICBOZ2JDYWxlbmRhcixcclxuICAgIE5nYkRhdGUsXHJcbiAgICBOZ2JEYXRlcGlja2VyLFxyXG4gICAgTmdiRGF0ZXBpY2tlckNvbmZpZyxcclxuICAgIE5nYkRhdGVTdHJ1Y3QsXHJcbiAgICBOZ2JJbnB1dERhdGVwaWNrZXIsXHJcbn0gZnJvbSBcIkBuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwXCI7XHJcbmltcG9ydCBkYXlqcyBmcm9tIFwiZGF5anNcIjtcclxuXHJcbmltcG9ydCB7IFdlZWtPYmplY3QgfSBmcm9tIFwiLi4vLi4vLi4vYW5uYS1jb3JlLXNoYXJlZC1saWIvbW9kZWxzL2FubmEtZ2VuZXJpYy1kYXRhLXR5cGUubW9kZWxcIjtcclxuaW1wb3J0IHsgSVdlZWtDYWxlbmRhciB9IGZyb20gXCIuLi8uLi8uLi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9tb2RlbHMvYW5uYS1nbG9iYWwtZHJvcGRvd24tY29uZmlnLm1vZGVsXCI7XHJcbmltcG9ydCB7IEFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vYW5uYS1jb3JlLXNoYXJlZC1saWIvc2VydmljZXMvYW5uYS1kYXRlLXRpbWUtZm9ybWF0LnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQW5uYUdsb2JhbENvbmZpZ1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vYW5uYS1jb3JlLXNoYXJlZC1saWIvc2VydmljZXMvYW5uYS1nbG9iYWwtY29uZmlnLnNlcnZpY2VcIjtcclxuXHJcbi8vIFVzZXIgZGVmaW5lZCBpbXBvcnQgc3RhdGVtZW50c1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogXCJhbm5hLWNvcmUtd2Vlay1jYWxlbmRhci1maWx0ZXItbGliXCIsXHJcbiAgICB0ZW1wbGF0ZVVybDogXCIuL2FubmEtd2Vlay1jYWxlbmRhci1maWx0ZXIuY29tcG9uZW50Lmh0bWxcIixcclxuICAgIHN0eWxlVXJsczogW1wiLi9hbm5hLXdlZWstY2FsZW5kYXItZmlsdGVyLmNvbXBvbmVudC5zY3NzXCJdLFxyXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICAgIGltcG9ydHM6IFtOZ0lmLCBGb3Jtc01vZHVsZSwgTmdiSW5wdXREYXRlcGlja2VyLCBOZ0NsYXNzLCBOZ2JEYXRlcGlja2VyXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEFubmFXZWVrQ2FsZW5kYXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgICBmcm9tRGF0ZTogTmdiRGF0ZSB8IG51bGw7XHJcbiAgICBob3ZlcmVkRGF0ZTogTmdiRGF0ZSB8IG51bGwgPSBudWxsO1xyXG4gICAgdG9EYXRlOiBOZ2JEYXRlIHwgbnVsbCA9IG51bGw7XHJcbiAgICB0b2RheTogTmdiRGF0ZTtcclxuXHJcbiAgICBtb2RlbDogTmdiRGF0ZVN0cnVjdDtcclxuXHJcbiAgICB3ZWVrTnVtYmVyczogc3RyaW5nW10gPSBbXTtcclxuICAgIHBpcGU6IERhdGVQaXBlO1xyXG4gICAgZGF0ZVRvRGlzcGxheTogc3RyaW5nID0gXCJcIjtcclxuICAgIHdlZWtPYmplY3RzOiBXZWVrT2JqZWN0W107XHJcbiAgICBtdWx0aVNlbGVjdERyb3Bkb3duT3BlbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgZGF0ZXBpY2tlcjogTmdiSW5wdXREYXRlcGlja2VyO1xyXG4gICAgcHJpdmF0ZSBmb3JtYXR0ZXI6IGFueTtcclxuICAgIHB1YmxpYyBmb3JtYXR0ZWRTdGFydERhdGU6IHN0cmluZztcclxuICAgIHB1YmxpYyBmb3JtYXR0ZWRFbmREYXRlOiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIGNhbGVuZGFyTWFwID0gbmV3IE1hcCgpO1xyXG4gICAgcHJpdmF0ZSBmbGFnMTogYm9vbGVhbjtcclxuICAgIHByaXZhdGUgZmxhZzI6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBzZWxlY3RlZEZyb21EYXRlOiBOZ2JEYXRlU3RydWN0O1xyXG4gICAgQElucHV0KCkgc2VsZWN0ZWRFbmREYXRlOiBOZ2JEYXRlU3RydWN0O1xyXG4gICAgQElucHV0KCkgZGlzYWJsZWREYXRlczogTmdiRGF0ZVtdID0gW107XHJcbiAgICBASW5wdXQoKSBtYXhEYXRlOiBhbnk7XHJcbiAgICBASW5wdXQoKSBtaW5EYXRlOiBhbnk7XHJcblxyXG4gICAgZGlzYWJsZWRGdW5jOiBhbnk7XHJcbiAgICBzdGF0ZTogYW55O1xyXG5cclxuICAgIC8vIFNldHRpbmcgdGhlIGRlZmF1bHQgdmFsdWVzO1xyXG4gICAgcHJpdmF0ZSBkZWZhdWx0VmFsdWVzOiBJV2Vla0NhbGVuZGFyO1xyXG5cclxuICAgIEBJbnB1dCgpIGNvbmZpZzogSVdlZWtDYWxlbmRhcjtcclxuICAgIEBPdXRwdXQoKSBhcHBseVdlZWtDYWxlbmRhckNoYW5nZXMgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICBAT3V0cHV0KCkgY2FsZW5kYXJUb2dnbGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgICAgICAvLyBpZiBzb21lIHZhbHVlcyBhcmUgbm90IHNlbnQsIHNldHRpbmcgdGhlIGRlZmF1bHQgdmFsdWVzXHJcbiAgICAgICAgdGhpcy5kZWZhdWx0VmFsdWVzID0gdGhpcy5hbm5hR2xvYmFsQ29uZmlnLmRlZmF1bHRXZWVrQ2FsZW5kYXJDb25maWc7XHJcbiAgICAgICAgdGhpcy5jb25maWcgPSB7IC4uLnRoaXMuZGVmYXVsdFZhbHVlcywgLi4udGhpcy5jb25maWcgfTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLnNlbGVjdEN1cnJlbnRXZWVrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZVdlZWtEYXRhKCk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmZyb21EYXRlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFdlZWsodGhpcy5mcm9tRGF0ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZm9ybWF0dGVyID0gdGhpcy5mb3JtYXR0ZWREYXRlcygpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEZyb21EYXRlICYmIHRoaXMuc2VsZWN0ZWRFbmREYXRlICYmIHRoaXMuY29uZmlnKSB7XHJcbiAgICAgICAgICAgIC8vIHRoaXMuc2VsZWN0V2Vlayh0aGlzLmZyb21EYXRlKTtcclxuICAgICAgICAgICAgdGhpcy5mcm9tRGF0ZSA9IE5nYkRhdGUuZnJvbSh0aGlzLnNlbGVjdGVkRnJvbURhdGUpO1xyXG4gICAgICAgICAgICB0aGlzLnRvRGF0ZSA9IE5nYkRhdGUuZnJvbSh0aGlzLnNlbGVjdGVkRW5kRGF0ZSk7XHJcbiAgICAgICAgICAgIHRoaXMud2Vla051bWJlckdlbmVyYXRvcigpO1xyXG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlUb1VJKCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Q2FsZW5kYXJNYXAoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkRGF0ZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmRpc2FibGVkRnVuYyA9IChkYXRlOiBOZ2JEYXRlLCBjdXJyZW50OiB7IG1vbnRoOiBudW1iZXIgfSkgPT4gdGhpcy5jaGVja0lmRGF0ZUlzRGlzYWJsZWQoZGF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgY2FsZW5kYXI6IE5nYkNhbGVuZGFyLFxyXG4gICAgICAgIHByaXZhdGUgZGF0ZVBpY2tlckNvbmZpZzogTmdiRGF0ZXBpY2tlckNvbmZpZyxcclxuICAgICAgICBwcml2YXRlIGFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2U6IEFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBhbm5hR2xvYmFsQ29uZmlnOiBBbm5hR2xvYmFsQ29uZmlnU2VydmljZSxcclxuICAgICkge31cclxuXHJcbiAgICBnZXRXZWVrTnVtYmVyKHdlZWs6IGFueSwgZmlyc3REYXlPZldlZWs6IGFueSkge1xyXG4gICAgICAgIGNvbnN0IHdlZWtTdGFydERhdGUgPSBkYXlqcyhjb252ZXJ0TmdiRGF0ZVRvTW9tZW50KHdlZWtbMF0pLCBcIk1NL0REL1lZWVlcIik7XHJcbiAgICAgICAgY29uc3Qgd2Vla1llYXIgPSB3ZWVrU3RhcnREYXRlLnllYXIoKTtcclxuICAgICAgICBjb25zdCB5ZWFyU3RhcnREYXRlID0gZGF5anMoYDAxLzAxLyR7d2Vla1llYXJ9YCwgXCJNTS9ERC9ZWVlZXCIpO1xyXG4gICAgICAgIGNvbnN0IHdlZWtEYXkgPSB5ZWFyU3RhcnREYXRlLmRheSgpO1xyXG5cclxuICAgICAgICBjb25zdCBub09mRGF5cyA9IHdlZWtTdGFydERhdGUuZGlmZih5ZWFyU3RhcnREYXRlLCBcImRcIikgKyAxO1xyXG5cclxuICAgICAgICBmdW5jdGlvbiBjb252ZXJ0TmdiRGF0ZVRvTW9tZW50KG5nYkRhdGU6IE5nYkRhdGUpOiBzdHJpbmcge1xyXG4gICAgICAgICAgICBsZXQgY29udmVydGVkID0gbnVsbDtcclxuICAgICAgICAgICAgaWYgKG5nYkRhdGUgJiYgbmdiRGF0ZS5tb250aCAmJiBuZ2JEYXRlLmRheSAmJiBuZ2JEYXRlLnllYXIpIHtcclxuICAgICAgICAgICAgICAgIGNvbnZlcnRlZCA9IGAke25nYkRhdGUubW9udGh9LyR7bmdiRGF0ZS5kYXl9LyR7bmdiRGF0ZS55ZWFyfWA7XHJcbiAgICAgICAgICAgICAgICBjb252ZXJ0ZWQgPSBkYXlqcyhjb252ZXJ0ZWQpLmZvcm1hdChcIk1NL0REL1lZWVlcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRlZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGNoZWNrSWZZZWFySXNCcm9hZGNhc3RMZWFwWWVhcigpIHtcclxuICAgICAgICAgICAgY29uc3QgaXNMZWFwWWVhciA9ICh3ZWVrWWVhciAlIDQgPT09IDAgJiYgd2Vla1llYXIgJSAxMDAgIT09IDApIHx8IHdlZWtZZWFyICUgNDAwID09PSAwO1xyXG4gICAgICAgICAgICByZXR1cm4gKGlzTGVhcFllYXIgJiYgKHdlZWtEYXkgPT09IDAgfHwgd2Vla0RheSA9PT0gNikpIHx8ICghaXNMZWFwWWVhciAmJiB3ZWVrRGF5ID09PSAwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGlzTGVhcFllYXIgPSBjaGVja0lmWWVhcklzQnJvYWRjYXN0TGVhcFllYXIoKTtcclxuICAgICAgICBjb25zdCBkaXZpZGVyID0gaXNMZWFwWWVhciA/IDUzIDogNTI7XHJcbiAgICAgICAgY29uc3QgYWRkZXIgPSBpc0xlYXBZZWFyID8gMiA6IDE7XHJcblxyXG4gICAgICAgIGNvbnN0IGJyb2FkY2FzdE51bWJlck9mRGF5cyA9IHdlZWtEYXkgKyBub09mRGF5cztcclxuICAgICAgICBjb25zdCBicm9hZGNhc3RXZWVrTnVtYmVyID1cclxuICAgICAgICAgICAgYnJvYWRjYXN0TnVtYmVyT2ZEYXlzICUgNyA+IDAgPyBicm9hZGNhc3ROdW1iZXJPZkRheXMgLyA3ICsgYWRkZXIgOiBicm9hZGNhc3ROdW1iZXJPZkRheXMgLyA3O1xyXG5cclxuICAgICAgICBpZiAoTWF0aC5mbG9vcihicm9hZGNhc3RXZWVrTnVtYmVyICUgZGl2aWRlcikgPT09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGRpdmlkZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKGJyb2FkY2FzdFdlZWtOdW1iZXIgJSBkaXZpZGVyKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICAgICAgLy8gQ0hBTkdFU0BBTk5BTElCIENoYW5nZWQgdGhpcy5cclxuICAgICAgICAvLyB0aGlzLmNhbGVuZGFyW1wiX19wcm90b19fXCJdLmdldFdlZWtOdW1iZXIgPSB0aGlzLmdldFdlZWtOdW1iZXI7XHJcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMuY2FsZW5kYXIsIHsgZ2V0V2Vla051bWJlcjogdGhpcy5nZXRXZWVrTnVtYmVyIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIC8vIHRoaXMuc2VsZWN0V2Vlayh0aGlzLmZyb21EYXRlKTtcclxuICAgICAgICB0aGlzLnNldENhbGVuZGFyTWFwKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdGlhbGl6ZVdlZWtEYXRhKCkge1xyXG4gICAgICAgIHRoaXMud2Vla09iamVjdHMgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5mcm9tRGF0ZSA9IHRoaXMuY2FsZW5kYXIuZ2V0VG9kYXkoKTtcclxuICAgICAgICB0aGlzLnRvZGF5ID0gdGhpcy5jYWxlbmRhci5nZXRUb2RheSgpO1xyXG5cclxuICAgICAgICBjb25zdCBiYWNrRGF0ZWRQZXJpb2QgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwidXNlckRldGFpbHNcIikgfHwgXCJ7fVwiKS5sb2NraW5nX3BlcmlvZF9kYXlzO1xyXG4gICAgICAgIGlmIChiYWNrRGF0ZWRQZXJpb2QgPCAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGU6IE5nYkRhdGUgPSB0aGlzLmNhbGVuZGFyLmdldFByZXYodGhpcy5jYWxlbmRhci5nZXRUb2RheSgpLCBcImRcIiwgTWF0aC5hYnMoYmFja0RhdGVkUGVyaW9kKSk7XHJcbiAgICAgICAgICAgIHRoaXMudG9kYXkgPSBOZ2JEYXRlLmZyb20oZGF0ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuZnJvbURhdGUgPSBOZ2JEYXRlLmZyb20oZGF0ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBEaXNhYmxlIG1vbnRocyBiZWZvcmUgbnVtYmVyT2ZNb250aHNUb0VuYWJsZVxyXG4gICAgICAgIHRoaXMuZGF0ZVBpY2tlckNvbmZpZy5tYXJrRGlzYWJsZWQgPSAoZGF0ZTogTmdiRGF0ZVN0cnVjdCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBwcmV2aW91c01vbnRoID0gdGhpcy5jYWxlbmRhci5nZXRQcmV2KHRoaXMudG9kYXksIFwibVwiLCB0aGlzLmNvbmZpZy5udW1iZXJPZk1vbnRoc1RvRW5hYmxlSW5QYXN0KTtcclxuICAgICAgICAgICAgY29uc3QgcHJldmlvdXNEYXkgPSB0aGlzLmNhbGVuZGFyLmdldFByZXYocHJldmlvdXNNb250aCwgXCJkXCIsIDEpO1xyXG4gICAgICAgICAgICByZXR1cm4gIU5nYkRhdGUuZnJvbShwcmV2aW91c0RheSkuYmVmb3JlKGRhdGUpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5mb3JtYXR0ZXIgPSB0aGlzLmZvcm1hdHRlZERhdGVzKCk7XHJcbiAgICAgICAgdGhpcy5mbGFnMSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZmxhZzIgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RXZWVrKGRhdGU6IE5nYkRhdGUpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBkYXRlT2JqZWN0ID0gbmV3IERhdGUoZGF0ZS55ZWFyLCBkYXRlLm1vbnRoIC0gMSwgZGF0ZS5kYXkpO1xyXG4gICAgICAgIGxldCBjb25zdHJ1Y3REYXRlID0gdGhpcy5idWlsZERhdGUoZGF0ZU9iamVjdCk7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5jb25maWcuc2VsZWN0TXVsdGlwbGVXZWVrcykge1xyXG4gICAgICAgICAgICAvLyBTaW5nbGUgd2VlayBzZWxlY3Rpb25cclxuICAgICAgICAgICAgdGhpcy5mcm9tRGF0ZSA9IHRoaXMuY29uc3RydWN0U3RhcnREYXRlKGRhdGVPYmplY3QpKGNvbnN0cnVjdERhdGUpO1xyXG4gICAgICAgICAgICB0aGlzLnRvRGF0ZSA9IHRoaXMuY29uc3RydWN0RW5kRGF0ZShkYXRlT2JqZWN0KShjb25zdHJ1Y3REYXRlKTtcclxuICAgICAgICAgICAgdGhpcy53ZWVrTnVtYmVyR2VuZXJhdG9yKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGRhdGUuYmVmb3JlKHRoaXMuZnJvbURhdGUpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZyb21EYXRlID0gdGhpcy5jb25zdHJ1Y3RTdGFydERhdGUoZGF0ZU9iamVjdCkoY29uc3RydWN0RGF0ZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5mbGFnMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9EYXRlID0gdGhpcy5jb25zdHJ1Y3RFbmREYXRlKGRhdGVPYmplY3QpKGNvbnN0cnVjdERhdGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5mbGFnMSA9ICF0aGlzLmZsYWcxO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGUuYWZ0ZXIodGhpcy50b0RhdGUpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5mbGFnMikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZnJvbURhdGUgPSB0aGlzLmNvbnN0cnVjdFN0YXJ0RGF0ZShkYXRlT2JqZWN0KShjb25zdHJ1Y3REYXRlKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLnRvRGF0ZSA9IHRoaXMuY29uc3RydWN0RW5kRGF0ZShkYXRlT2JqZWN0KShjb25zdHJ1Y3REYXRlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuZmxhZzIgPSAhdGhpcy5mbGFnMjtcclxuICAgICAgICAgICAgICAgIHRoaXMudG9EYXRlID0gdGhpcy5jb25zdHJ1Y3RFbmREYXRlKGRhdGVPYmplY3QpKGNvbnN0cnVjdERhdGUpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mcm9tRGF0ZSA9IHRoaXMuY29uc3RydWN0U3RhcnREYXRlKGRhdGVPYmplY3QpKGNvbnN0cnVjdERhdGUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b0RhdGUgPSB0aGlzLmNvbnN0cnVjdEVuZERhdGUoZGF0ZU9iamVjdCkoY29uc3RydWN0RGF0ZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRpc2FibGVkRGF0ZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGF5anNTdGFydERhdGUgPSBkYXlqcyhcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UuY29udmVydE5nYkRhdGVUb01vbWVudCh0aGlzLmZyb21EYXRlKSxcclxuICAgICAgICAgICAgICAgICAgICBcIk1NL0REL1lZWVlcIixcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkYXlqc0VuZERhdGUgPSBkYXlqcyhcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UuY29udmVydE5nYkRhdGVUb01vbWVudCh0aGlzLnRvRGF0ZSksXHJcbiAgICAgICAgICAgICAgICAgICAgXCJNTS9ERC9ZWVlZXCIsXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgbGV0IG5nYkRhdGU7XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoIWRheWpzU3RhcnREYXRlLmlzU2FtZShkYXlqc0VuZERhdGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmdiRGF0ZSA9IHRoaXMuYW5uYURhdGVUaW1lRm9ybWF0U2VydmljZS5jb252ZXJ0VG9OZ2JEYXRlKGRheWpzU3RhcnREYXRlLCBcIk1NL0REL1lZWVlcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY2hlY2tJZkRhdGVJc0Rpc2FibGVkKG5nYkRhdGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBkYXlqc1N0YXJ0RGF0ZS5hZGQoMSwgXCJkXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3RGF0ZU9iamVjdCA9IG5ldyBEYXRlKG5nYkRhdGUueWVhciwgbmdiRGF0ZS5tb250aCAtIDEsIG5nYkRhdGUuZGF5IC0gMSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdHJ1Y3REYXRlID0gdGhpcy5idWlsZERhdGUobmV3RGF0ZU9iamVjdCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvRGF0ZSA9IHRoaXMuY29uc3RydWN0RW5kRGF0ZShuZXdEYXRlT2JqZWN0KShjb25zdHJ1Y3REYXRlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy53ZWVrTnVtYmVyR2VuZXJhdG9yKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuY29uZmlnLnNob3dBc0Ryb3Bkb3duKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXBwbHlDaGFuZ2VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHdlZWtOdW1iZXJHZW5lcmF0b3IoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgZGF0ZXMgPSBbXTtcclxuICAgICAgICBsZXQgd2VlayA9IFtdO1xyXG5cclxuICAgICAgICBsZXQgc3RhcnREYXRlID0gTmdiRGF0ZS5mcm9tKHRoaXMuZnJvbURhdGUpO1xyXG4gICAgICAgIGNvbnN0IGVuZERhdGUgPSBOZ2JEYXRlLmZyb20odGhpcy50b0RhdGUpO1xyXG5cclxuICAgICAgICB3ZWVrLnB1c2goc3RhcnREYXRlKTtcclxuICAgICAgICB3aGlsZSAoZW5kRGF0ZSAhPSBudWxsICYmICFzdGFydERhdGUuZXF1YWxzKGVuZERhdGUpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGUgPSB0aGlzLmNhbGVuZGFyLmdldE5leHQoc3RhcnREYXRlLCBcImRcIiwgMSk7XHJcbiAgICAgICAgICAgIHN0YXJ0RGF0ZSA9IGRhdGU7XHJcbiAgICAgICAgICAgIHdlZWsucHVzaChkYXRlKTtcclxuXHJcbiAgICAgICAgICAgIC8vIENvbGxlY3QgYWxsIGRheXMgaW4gd2VlayB0byBjYWxjdWxhdGUgdGhlIHdlZWsgbnVtYmVyXHJcbiAgICAgICAgICAgIGlmICh3ZWVrLmxlbmd0aCA9PT0gNykge1xyXG4gICAgICAgICAgICAgICAgZGF0ZXMucHVzaCh3ZWVrKTtcclxuICAgICAgICAgICAgICAgIHdlZWsgPSBbXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoKHRoaXMuY29uZmlnLm1heFdlZWtzVG9TZWxlY3QgPz8gMCkgPiAwICYmIGRhdGVzLmxlbmd0aCA+ICh0aGlzLmNvbmZpZy5tYXhXZWVrc1RvU2VsZWN0ID8/IDApKSB7XHJcbiAgICAgICAgICAgIGRhdGVzLnNwbGljZSh0aGlzLmNvbmZpZy5tYXhXZWVrc1RvU2VsZWN0ID8/IDAsIGRhdGVzLmxlbmd0aCAtICh0aGlzLmNvbmZpZy5tYXhXZWVrc1RvU2VsZWN0ID8/IDApKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGVzKGRhdGVzKTtcclxuXHJcbiAgICAgICAgdGhpcy53ZWVrTnVtYmVycyA9IFtdO1xyXG4gICAgICAgIHRoaXMud2Vla09iamVjdHMgPSBbXTtcclxuXHJcbiAgICAgICAgZGF0ZXMuZm9yRWFjaCgoZGF0ZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLndlZWtOdW1iZXJzLnB1c2goYCBXZWVrICR7dGhpcy5jYWxlbmRhci5nZXRXZWVrTnVtYmVyKGRhdGUsIHRoaXMuY29uZmlnLmZpcnN0RGF5T2ZXZWVrKX1gKTtcclxuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkRGF0ZXMgPSB0aGlzLmZvcm1hdHRlcihkYXRlWzBdLCBkYXRlWzZdKTtcclxuICAgICAgICAgICAgY29uc3QgZGF0ZU9iamVjdHMgPSB7XHJcbiAgICAgICAgICAgICAgICBzdGFydERhdGU6IGZvcm1hdHRlZERhdGVzLmZvcm1hdHRlZFN0YXJ0RGF0ZSxcclxuICAgICAgICAgICAgICAgIGVuZERhdGU6IGZvcm1hdHRlZERhdGVzLmZvcm1hdHRlZEVuZERhdGUsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMud2Vla09iamVjdHMucHVzaChkYXRlT2JqZWN0cyk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuZGlzcGxheVRvVUkoKTtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RlZERhdGVzKGRhdGVzOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmZyb21EYXRlID0gZGF0ZXNbMF1bMF07XHJcbiAgICAgICAgdGhpcy50b0RhdGUgPSBkYXRlc1tkYXRlcy5sZW5ndGggLSAxXVs2XTtcclxuICAgIH1cclxuXHJcbiAgICBmb3JtYXR0ZWREYXRlcygpIHtcclxuICAgICAgICBjb25zdCBwaXBlID0gbmV3IERhdGVQaXBlKFwiZW4tVVNcIik7XHJcbiAgICAgICAgcmV0dXJuIChmcm9tRGF0ZTogTmdiRGF0ZSwgdG9EYXRlOiBOZ2JEYXRlKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZyb21EYXRlT2JqZWN0ID0gbmV3IERhdGUoZnJvbURhdGUueWVhciwgZnJvbURhdGUubW9udGggLSAxLCBmcm9tRGF0ZS5kYXkpO1xyXG4gICAgICAgICAgICBjb25zdCB0b0RhdGVPYmplY3QgPSBuZXcgRGF0ZSh0b0RhdGUueWVhciwgdG9EYXRlLm1vbnRoIC0gMSwgdG9EYXRlLmRheSk7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0dGVkU3RhcnREYXRlID0gcGlwZS50cmFuc2Zvcm0oZnJvbURhdGVPYmplY3QsIHRoaXMuY29uZmlnLmRhdGVGb3JtYXRGb3JSZXF1ZXN0KTtcclxuICAgICAgICAgICAgdGhpcy5mb3JtYXR0ZWRFbmREYXRlID0gcGlwZS50cmFuc2Zvcm0odG9EYXRlT2JqZWN0LCB0aGlzLmNvbmZpZy5kYXRlRm9ybWF0Rm9yUmVxdWVzdCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmRhdGVUb0Rpc3BsYXkgPSBgJHtwaXBlLnRyYW5zZm9ybShcclxuICAgICAgICAgICAgICAgIGZyb21EYXRlT2JqZWN0LFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcuZGF0ZUZvcm1hdFRvRGlzcGxheSxcclxuICAgICAgICAgICAgKX0gdG8gJHtwaXBlLnRyYW5zZm9ybSh0b0RhdGVPYmplY3QsIHRoaXMuY29uZmlnLmRhdGVGb3JtYXRUb0Rpc3BsYXkpfWA7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgZGlzcGxheVRvVUkoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNvbmZpZy5zZWxlY3RNdWx0aXBsZVdlZWtzICYmIHRoaXMuZnJvbURhdGUgJiYgdGhpcy50b0RhdGUpIHtcclxuICAgICAgICAgICAgLy8gRGlzcGxheSBmb3Igb25seSBTaW5nbGUgV2Vla1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1hdHRlcih0aGlzLmZyb21EYXRlLCB0aGlzLnRvRGF0ZSk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLndlZWtOdW1iZXJzLmxlbmd0aCA+ICh0aGlzLmNvbmZpZy5tYXhXZWVrc1RvU2hvd1dpdGhSZW1haW5pbmdDb3VudCA/PyAwKSkge1xyXG4gICAgICAgICAgICAvLyBEaXNwbGF5IGZvciBNdWx0aXBsZSBXZWVrc1xyXG4gICAgICAgICAgICBjb25zdCB3ZWVrRGlzcGxheSA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8ICh0aGlzLmNvbmZpZy5tYXhXZWVrc1RvU2hvd1dpdGhSZW1haW5pbmdDb3VudCA/PyAwKTsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB3ZWVrRGlzcGxheS5wdXNoKHRoaXMud2Vla051bWJlcnMuc2hpZnQoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgcmVtYWluaW5nV2Vla3MgPSB0aGlzLndlZWtOdW1iZXJzLmxlbmd0aDtcclxuICAgICAgICAgICAgdGhpcy53ZWVrTnVtYmVycyA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLndlZWtOdW1iZXJzLnB1c2goYCR7d2Vla0Rpc3BsYXl9ICske3JlbWFpbmluZ1dlZWtzfWApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3RTdGFydERhdGUoZGF0ZTogRGF0ZSkge1xyXG4gICAgICAgIGNvbnN0IHsgZmlyc3REYXlPZldlZWsgfSA9IHRoaXMuY29uZmlnO1xyXG4gICAgICAgIHJldHVybiAoY29uc3RydWN0RGF0ZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0RGF5ID0gZGF0ZS5nZXREYXkoKSAhPT0gMCA/IChmaXJzdERheU9mV2VlayA/PyAwKSAtIGRhdGUuZ2V0RGF5KCkgOiAtNjtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdERhdGUoc3RhcnREYXkpO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0RW5kRGF0ZShkYXRlOiBEYXRlKSB7XHJcbiAgICAgICAgY29uc3QgeyBmaXJzdERheU9mV2VlayB9ID0gdGhpcy5jb25maWc7XHJcbiAgICAgICAgcmV0dXJuIChjb25zdHJ1Y3REYXRlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZW5kRGF5ID0gZGF0ZS5nZXREYXkoKSAhPT0gMCA/IChmaXJzdERheU9mV2VlayA/PyAwKSArIDYgLSBkYXRlLmdldERheSgpIDogMDtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdERhdGUoZW5kRGF5KTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGJ1aWxkRGF0ZShkYXRlOiBEYXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIChudW1iZXI6IG51bWJlcik6IE5nYkRhdGUgfCBudWxsID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZGF5ID0gZGF0ZS5nZXREYXRlKCkgKyBudW1iZXI7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGVPYmplY3QgPSBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF5KTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG5nYkRhdGVPYmplY3QgPSB7fSBhcyBOZ2JEYXRlO1xyXG4gICAgICAgICAgICBuZ2JEYXRlT2JqZWN0LmRheSA9IGRheTtcclxuXHJcbiAgICAgICAgICAgIGlmIChuZ2JEYXRlT2JqZWN0LmRheSA+IDMxIHx8IG5nYkRhdGVPYmplY3QuZGF5IDwgMSkge1xyXG4gICAgICAgICAgICAgICAgbmdiRGF0ZU9iamVjdC5kYXkgPSBkYXRlT2JqZWN0LmdldERhdGUoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbmdiRGF0ZU9iamVjdC5tb250aCA9IGRhdGVPYmplY3QuZ2V0TW9udGgoKSArIDE7XHJcbiAgICAgICAgICAgIG5nYkRhdGVPYmplY3QueWVhciA9IGRhdGVPYmplY3QuZ2V0RnVsbFllYXIoKTtcclxuICAgICAgICAgICAgcmV0dXJuIE5nYkRhdGUuZnJvbShuZ2JEYXRlT2JqZWN0KTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGlzSG92ZXJlZChkYXRlOiBOZ2JEYXRlKTogYm9vbGVhbiB8IG51bGwge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIHRoaXMuZnJvbURhdGUgJiZcclxuICAgICAgICAgICAgIXRoaXMudG9EYXRlICYmXHJcbiAgICAgICAgICAgIHRoaXMuaG92ZXJlZERhdGUgJiZcclxuICAgICAgICAgICAgZGF0ZS5hZnRlcih0aGlzLmZyb21EYXRlKSAmJlxyXG4gICAgICAgICAgICBkYXRlLmJlZm9yZSh0aGlzLmhvdmVyZWREYXRlKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaXNJbnNpZGUoZGF0ZTogTmdiRGF0ZSk6IGJvb2xlYW4gfCBudWxsIHtcclxuICAgICAgICByZXR1cm4gdGhpcy50b0RhdGUgJiYgZGF0ZS5hZnRlcih0aGlzLmZyb21EYXRlKSAmJiBkYXRlLmJlZm9yZSh0aGlzLnRvRGF0ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaXNSYW5nZShkYXRlOiBOZ2JEYXRlKTogYm9vbGVhbiB8IG51bGwge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIGRhdGUuZXF1YWxzKHRoaXMuZnJvbURhdGUpIHx8XHJcbiAgICAgICAgICAgICh0aGlzLnRvRGF0ZSAmJiBkYXRlLmVxdWFscyh0aGlzLnRvRGF0ZSkpIHx8XHJcbiAgICAgICAgICAgIHRoaXMuaXNJbnNpZGUoZGF0ZSkgfHxcclxuICAgICAgICAgICAgdGhpcy5pc0hvdmVyZWQoZGF0ZSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHByZXZpb3VzV2VlaygpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5mcm9tRGF0ZSkge1xyXG4gICAgICAgICAgICB0aGlzLnRvRGF0ZSA9IHRoaXMuY2FsZW5kYXIuZ2V0UHJldih0aGlzLmZyb21EYXRlLCBcImRcIiwgMSk7XHJcbiAgICAgICAgICAgIHRoaXMuZnJvbURhdGUgPSB0aGlzLmNhbGVuZGFyLmdldFByZXYodGhpcy5mcm9tRGF0ZSwgXCJkXCIsIHRoaXMuY2FsZW5kYXIuZ2V0RGF5c1BlcldlZWsoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMud2Vla051bWJlckdlbmVyYXRvcigpO1xyXG4gICAgICAgIHRoaXMuYXBwbHlDaGFuZ2VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmV4dFdlZWsoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuZnJvbURhdGUpIHtcclxuICAgICAgICAgICAgdGhpcy5mcm9tRGF0ZSA9IHRoaXMuY2FsZW5kYXIuZ2V0TmV4dCh0aGlzLmZyb21EYXRlLCBcImRcIiwgdGhpcy5jYWxlbmRhci5nZXREYXlzUGVyV2VlaygpKTtcclxuICAgICAgICAgICAgdGhpcy50b0RhdGUgPSB0aGlzLmNhbGVuZGFyLmdldE5leHQodGhpcy5mcm9tRGF0ZSwgXCJkXCIsIHRoaXMuY2FsZW5kYXIuZ2V0RGF5c1BlcldlZWsoKSAtIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLndlZWtOdW1iZXJHZW5lcmF0b3IoKTtcclxuICAgICAgICB0aGlzLmFwcGx5Q2hhbmdlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldENhbGVuZGFyTWFwKCkge1xyXG4gICAgICAgIGNvbnN0IGRhdGVPYmogPSB7IGZyb21EYXRlOiB0aGlzLmZyb21EYXRlLCB0b0RhdGU6IHRoaXMudG9EYXRlIH07XHJcbiAgICAgICAgdGhpcy5jYWxlbmRhck1hcC5zZXQoXCJvbGREYXRlc1wiLCBkYXRlT2JqKTtcclxuICAgIH1cclxuXHJcbiAgICBhcHBseUNoYW5nZXMoKSB7XHJcbiAgICAgICAgdGhpcy5tdWx0aVNlbGVjdERyb3Bkb3duT3BlbiA9IGZhbHNlO1xyXG4gICAgICAgIGlmICghdGhpcy5jb25maWcuZW1pdE11bHRpcGxlV2Vla09iamVjdHMpIHtcclxuICAgICAgICAgICAgY29uc3QgZGF0ZXMgPSB7fSBhcyBXZWVrT2JqZWN0O1xyXG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWREYXRlcyA9IHRoaXMuZm9ybWF0dGVyKHRoaXMuZnJvbURhdGUsIHRoaXMudG9EYXRlKTtcclxuICAgICAgICAgICAgZGF0ZXMuc3RhcnREYXRlID0gZm9ybWF0dGVkRGF0ZXMuZm9ybWF0dGVkU3RhcnREYXRlO1xyXG4gICAgICAgICAgICBkYXRlcy5lbmREYXRlID0gZm9ybWF0dGVkRGF0ZXMuZm9ybWF0dGVkRW5kRGF0ZTtcclxuICAgICAgICAgICAgdGhpcy5hcHBseVdlZWtDYWxlbmRhckNoYW5nZXMuZW1pdChkYXRlcyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5hcHBseVdlZWtDYWxlbmRhckNoYW5nZXMuZW1pdCh0aGlzLndlZWtPYmplY3RzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXRDYWxlbmRhck1hcCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlzRm9jdXNlZCh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5jYWxlbmRhclRvZ2dsZWQuZW1pdCh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaXNEcm9wZG93bk9wZW5lZEZvckNhbGVuZGFyKGRhdGVwaWNrZXI6IE5nYklucHV0RGF0ZXBpY2tlcikge1xyXG4gICAgICAgIHRoaXMuZGF0ZXBpY2tlciA9IGRhdGVwaWNrZXI7XHJcbiAgICAgICAgaWYgKHRoaXMuZGF0ZXBpY2tlci5pc09wZW4oKSkge1xyXG4gICAgICAgICAgICB0aGlzLnJldmVydERhdGVzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0ZXBpY2tlci5jbG9zZSgpO1xyXG4gICAgICAgICAgICB0aGlzLm11bHRpU2VsZWN0RHJvcGRvd25PcGVuID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5kYXRlcGlja2VyLm9wZW4oKTtcclxuICAgICAgICAgICAgdGhpcy5tdWx0aVNlbGVjdERyb3Bkb3duT3BlbiA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldmVydERhdGVzKCkge1xyXG4gICAgICAgIHRoaXMubXVsdGlTZWxlY3REcm9wZG93bk9wZW4gPSBmYWxzZTtcclxuICAgICAgICBpZiAodGhpcy5jYWxlbmRhck1hcC5nZXQoXCJvbGREYXRlc1wiKSkge1xyXG4gICAgICAgICAgICBjb25zdCBkYXRlT2JqID0gdGhpcy5jYWxlbmRhck1hcC5nZXQoXCJvbGREYXRlc1wiKTtcclxuICAgICAgICAgICAgdGhpcy5mcm9tRGF0ZSA9IGRhdGVPYmouZnJvbURhdGU7XHJcbiAgICAgICAgICAgIHRoaXMudG9EYXRlID0gZGF0ZU9iai50b0RhdGU7XHJcbiAgICAgICAgICAgIHRoaXMud2Vla051bWJlckdlbmVyYXRvcigpO1xyXG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlUb1VJKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNoZWNrSWZEYXRlSXNEaXNhYmxlZChkYXRlOiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCB2YWxpZGF0b3JGdW5jID0gKG5nYkRhdGU6IE5nYkRhdGUpID0+XHJcbiAgICAgICAgICAgIG5nYkRhdGUueWVhciA9PT0gZGF0ZS55ZWFyICYmIG5nYkRhdGUubW9udGggPT09IGRhdGUubW9udGggJiYgbmdiRGF0ZS5kYXkgPT09IGRhdGUuZGF5O1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkRGF0ZXMuc29tZSh2YWxpZGF0b3JGdW5jKTtcclxuICAgIH1cclxuXHJcbiAgICBjbG9zZURhdGVwaWNrZXIoZGF0ZXBpY2tlclJlZjogYW55KSB7XHJcbiAgICAgICAgZGF0ZXBpY2tlclJlZi5jbG9zZSgpO1xyXG4gICAgfVxyXG59XHJcbiIsIjxmb3JtXHJcbiAgICBjbGFzcz1cImZvcm0taW5saW5lXCJcclxuICAgICpuZ0lmPVwiY29uZmlnLnNob3dBc0Ryb3Bkb3duXCJcclxuPlxyXG4gICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgaGlkZGVuXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgbmFtZT1cImRhdGVwaWNrZXIgZC1ub25lXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcclxuICAgICAgICAgICAgICAgIG5nYkRhdGVwaWNrZXJcclxuICAgICAgICAgICAgICAgICNkYXRlcGlja2VyPVwibmdiRGF0ZXBpY2tlclwiXHJcbiAgICAgICAgICAgICAgICBbYXV0b0Nsb3NlXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgIChkYXRlU2VsZWN0KT1cInNlbGVjdFdlZWsoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAoY2xvc2VkKT1cImlzRm9jdXNlZChmYWxzZSlcIlxyXG4gICAgICAgICAgICAgICAgW2Rpc3BsYXlNb250aHNdPVwiMVwiXHJcbiAgICAgICAgICAgICAgICBbZGF5VGVtcGxhdGVdPVwidFwiXHJcbiAgICAgICAgICAgICAgICBbc3RhcnREYXRlXT1cImZyb21EYXRlIVwiXHJcbiAgICAgICAgICAgICAgICBbZmlyc3REYXlPZldlZWtdPVwiY29uZmlnLmZpcnN0RGF5T2ZXZWVrXCJcclxuICAgICAgICAgICAgICAgIFtzaG93V2Vla051bWJlcnNdPVwiY29uZmlnLnNob3dXZWVrTnVtYmVyc1wiXHJcbiAgICAgICAgICAgICAgICB0YWJpbmRleD1cIi0xXCJcclxuICAgICAgICAgICAgICAgIFtmb290ZXJUZW1wbGF0ZV09XCJmb290ZXJUZW1wbGF0ZVwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tU2luZ2xlIHdlZWsgc2VsZWN0LS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiIWNvbmZpZy5zZWxlY3RNdWx0aXBsZVdlZWtzXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ3ZWVrbnVtYmVycy1sYWJlbFwiPiAmbmJzcDt7eyB3ZWVrTnVtYmVycyB9fSA8L3NwYW4+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2luZ2xlLXdlZWtcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVmdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1pY29ucyBuZXh0LXJvdW5kLWJ0blwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicHJldmlvdXNXZWVrKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0ZV9uZXh0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgI2RwRnJvbURhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBXZWVrc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIltjb25maWcuY3VzdG9tQ2xhc3MgPT09ICcnID8gJycgOiBjb25maWcuY3VzdG9tQ2xhc3NdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImRwRnJvbURhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZGF0ZVRvRGlzcGxheVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImlzRm9jdXNlZCh0cnVlKTsgaXNEcm9wZG93bk9wZW5lZEZvckNhbGVuZGFyKGRhdGVwaWNrZXIpXCJcclxuICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS1tZW51LWRvd25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFkYXRlcGlja2VyLmlzT3BlbigpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRhdGVwaWNrZXIub3BlbigpXCJcclxuICAgICAgICAgICAgICAgICAgICA+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS1tZW51LXVwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJkYXRlcGlja2VyLmlzT3BlbigpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImlzRHJvcGRvd25PcGVuZWRGb3JDYWxlbmRhcihkYXRlcGlja2VyKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgcm91bmQtYnRuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJuZXh0V2VlaygpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdGVfbmV4dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tTXVsdGlwbGUgd2VlayBzZWxlY3QtLT5cclxuICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cImZvcm0tZ3JvdXBcIlxyXG4gICAgICAgICpuZ0lmPVwiY29uZmlnLnNlbGVjdE11bHRpcGxlV2Vla3NcIlxyXG4gICAgPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXVsdGlwbGUtd2Vla3NcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICNkcEZyb21EYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxyXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IFdlZWtzXCJcclxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJbY29uZmlnLmN1c3RvbUNsYXNzID09PSAnJyA/ICcnIDogY29uZmlnLmN1c3RvbUNsYXNzXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZT1cImRwRnJvbURhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwid2Vla051bWJlcnNcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJpc0ZvY3VzZWQodHJ1ZSk7IGlzRHJvcGRvd25PcGVuZWRGb3JDYWxlbmRhcihkYXRlcGlja2VyKVwiXHJcbiAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFtdWx0aVNlbGVjdERyb3Bkb3duT3BlblwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGkgbWRpLW1lbnUtZG93biBtdWx0aXNlbGVjdC1pbnB1dC1hcnJvd1wiXHJcbiAgICAgICAgICAgICAgICA+PC9pPlxyXG4gICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIm11bHRpU2VsZWN0RHJvcGRvd25PcGVuXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktbWVudS11cCBtdWx0aXNlbGVjdC1pbnB1dC1hcnJvd1wiXHJcbiAgICAgICAgICAgICAgICA+PC9pPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Zvcm0+XHJcblxyXG48bmdiLWRhdGVwaWNrZXJcclxuICAgICN3ZWVrUGlja2VyXHJcbiAgICAqbmdJZj1cIiFjb25maWcuc2hvd0FzRHJvcGRvd25cIlxyXG4gICAgW2Rpc3BsYXlNb250aHNdPVwiMVwiXHJcbiAgICBbc3RhcnREYXRlXT1cImZyb21EYXRlIVwiXHJcbiAgICBbZmlyc3REYXlPZldlZWtdPVwiY29uZmlnLmZpcnN0RGF5T2ZXZWVrXCJcclxuICAgIFtzaG93V2Vla051bWJlcnNdPVwiY29uZmlnLnNob3dXZWVrTnVtYmVyc1wiXHJcbiAgICBbZGF5VGVtcGxhdGVdPVwidFwiXHJcbiAgICBbbWF4RGF0ZV09XCJtYXhEYXRlXCJcclxuICAgIFttaW5EYXRlXT1cIm1pbkRhdGVcIlxyXG4gICAgKGRhdGVTZWxlY3QpPVwic2VsZWN0V2VlaygkZXZlbnQpXCJcclxuICAgIFttYXJrRGlzYWJsZWRdPVwiZGlzYWJsZWRGdW5jXCJcclxuPlxyXG48L25nYi1kYXRlcGlja2VyPlxyXG5cclxuPG5nLXRlbXBsYXRlICNmb290ZXJUZW1wbGF0ZT5cclxuICAgIDxociBjbGFzcz1cIm15LTBcIiAvPlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbSBtLTIgZmxvYXQtcmlnaHQgYXBwbHktYnRuXCJcclxuICAgICAgICAoY2xpY2spPVwiYXBwbHlDaGFuZ2VzKCk7IGNsb3NlRGF0ZXBpY2tlcihkYXRlcGlja2VyKVwiXHJcbiAgICA+XHJcbiAgICAgICAgQXBwbHlcclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbSBtLTIgZmxvYXQtcmlnaHQgY2FuY2VsLWJ0blwiXHJcbiAgICAgICAgKGNsaWNrKT1cInJldmVydERhdGVzKCk7IGNsb3NlRGF0ZXBpY2tlcihkYXRlcGlja2VyKVwiXHJcbiAgICA+XHJcbiAgICAgICAgQ2FuY2VsXHJcbiAgICA8L2J1dHRvbj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZVxyXG4gICAgI3RcclxuICAgIGxldC1kYXRlXHJcbiAgICBsZXQtZm9jdXNlZD1cImZvY3VzZWRcIlxyXG4gICAgbGV0LWRpc2FibGVkPVwiZGlzYWJsZWRcIlxyXG4+XHJcbiAgICA8c3BhblxyXG4gICAgICAgIGNsYXNzPVwiY3VzdG9tLWRheVwiXHJcbiAgICAgICAgW2NsYXNzLmZvY3VzZWRdPVwiZm9jdXNlZFwiXHJcbiAgICAgICAgW2NsYXNzLnJhbmdlXT1cImlzUmFuZ2UoZGF0ZSlcIlxyXG4gICAgICAgIFtjbGFzcy5mYWRlZF09XCJpc0hvdmVyZWQoZGF0ZSkgfHwgaXNJbnNpZGUoZGF0ZSlcIlxyXG4gICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJkaXNhYmxlZFwiXHJcbiAgICAgICAgKG1vdXNlZW50ZXIpPVwiaG92ZXJlZERhdGUgPSBkYXRlXCJcclxuICAgICAgICAobW91c2VsZWF2ZSk9XCJob3ZlcmVkRGF0ZSA9IG51bGxcIlxyXG4gICAgPlxyXG4gICAgICAgIHt7IGRhdGUuZGF5IH19XHJcbiAgICA8L3NwYW4+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
@@ -31,10 +31,13 @@ export class AnnaColumnCheckboxFilterComponent {
31
31
  this.searchItem = null;
32
32
  this.showSortComponent = activeTab.isSortRequired;
33
33
  this.showFilterComponent = activeTab.isFilterRequired;
34
+ this.showSplitedOptions = activeTab.showSplitedOptions;
35
+ this.splitDelimiter = this.showSplitedOptions ? (activeTab.splitDelimiter ?? this.annaFilterService.DEFAULT_SPLIT_SEPARATOR) : "";
34
36
  this.tempSortOrder = null;
35
37
  this.isFilterChanged = false;
36
38
  this.isSortChanged = false;
37
39
  this.annaFilterService.selectedRadio = header;
40
+ this.selectedRadioKey = `${header}${(this.showSplitedOptions) ? (this.annaFilterService.SPLITED_CHECKBOX_FILTER_KEY) : ""}`;
38
41
  if (reload) {
39
42
  setTimeout(() => {
40
43
  this.createFilterTooltipData(activeTab, header);
@@ -64,7 +67,7 @@ export class AnnaColumnCheckboxFilterComponent {
64
67
  }
65
68
  createListForCheckboxFilter(header) {
66
69
  const optionData = this.annaFilterService.getFilterOptionsData(this.tableData, this.clonedTableData);
67
- const tooltipOptions = this.annaFilterService.createListForCheckboxFilter(header, optionData);
70
+ const tooltipOptions = this.annaFilterService.createListForCheckboxFilter(header, optionData, this.showSplitedOptions, this.splitDelimiter);
68
71
  return tooltipOptions;
69
72
  }
70
73
  selectUnselectListCheckbox(tooltipOptions, header) {
@@ -162,7 +165,7 @@ export class AnnaColumnCheckboxFilterComponent {
162
165
  if (this.showFilterComponent && this.isFilterChanged) {
163
166
  const currentSelectedValue = this.annaFilterService.getCheckboxCurrentSelectedValue(this.searchItem, this.tooltipOptions);
164
167
  this.annaFilterService.reOrderAppliedFiltersState(this.clonedTableData, currentSelectedValue);
165
- this.annaFilterService.tooltipSelectedMap.set(this.annaFilterService.selectedRadio, currentSelectedValue);
168
+ this.annaFilterService.tooltipSelectedMap.set(this.selectedRadioKey, currentSelectedValue);
166
169
  this.tableData = this.annaFilterService.filterData(this.clonedTableData, "");
167
170
  this.annaSortService.noSortingAppliedData = cloneDeep(this.tableData);
168
171
  }
@@ -253,4 +256,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
253
256
  }], closeTooltip: [{
254
257
  type: Output
255
258
  }] } });
256
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5uYS1jb2x1bW4tY2hlY2tib3gtZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FubmEtY29yZS9zcmMvbGliL2FubmEtZ2VuZXJpYy10YWJsZS1saWIvY29tcG9uZW50cy9hbm5hLWNvbHVtbi1maWx0ZXJzL2FubmEtY29sdW1uLWNoZWNrYm94LWZpbHRlci9hbm5hLWNvbHVtbi1jaGVja2JveC1maWx0ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5uYS1jb3JlL3NyYy9saWIvYW5uYS1nZW5lcmljLXRhYmxlLWxpYi9jb21wb25lbnRzL2FubmEtY29sdW1uLWZpbHRlcnMvYW5uYS1jb2x1bW4tY2hlY2tib3gtZmlsdGVyL2FubmEtY29sdW1uLWNoZWNrYm94LWZpbHRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsZUFBZSxFQUFFLHdCQUF3QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDOUcsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFJL0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0RBQStELENBQUM7QUFDbEcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZEQUE2RCxDQUFDO0FBQzlGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDOzs7OztB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QUUsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCwyQkFBMkIsQ0FBQyxLQUFlO1FBQ3ZDLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQzNCLElBQUksQ0FBQyxnQ0FBZ0MsRUFBRSxDQUFDO0lBQzVDLENBQUM7K0dBdFJRLGlDQUFpQzttR0FBakMsaUNBQWlDLGdkQzVCOUMseXVJQTRIQSw2cFdEMUdRLElBQUksNkZBQ0osS0FBSyxtSEFDTCxPQUFPLG9GQUNQLGlCQUFpQix5SEFDakIsV0FBVywrbUJBQ1gsd0JBQXdCLGlKQUN4Qix5QkFBeUIsc0lBQ3pCLGVBQWU7OzRGQUdWLGlDQUFpQztrQkFoQjdDLFNBQVM7K0JBQ0ksdUNBQXVDLGNBR3JDLElBQUksV0FDUDt3QkFDTCxJQUFJO3dCQUNKLEtBQUs7d0JBQ0wsT0FBTzt3QkFDUCxpQkFBaUI7d0JBQ2pCLFdBQVc7d0JBQ1gsd0JBQXdCO3dCQUN4Qix5QkFBeUI7d0JBQ3pCLGVBQWU7cUJBQ2xCO3NJQUdRLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFFSSxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBQ0cscUJBQXFCO3NCQUE5QixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGwsIENka1ZpcnR1YWxGb3JPZiwgQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0IH0gZnJvbSBcIkBhbmd1bGFyL2Nkay9zY3JvbGxpbmdcIjtcclxuaW1wb3J0IHsgTmdDbGFzcywgTmdGb3IsIE5nSWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBjbG9uZURlZXAsIGlzRXF1YWwgfSBmcm9tIFwibG9kYXNoLWVzXCI7XHJcblxyXG5pbXBvcnQgeyBTb3J0VHlwZSB9IGZyb20gXCIuLi8uLi8uLi8uLi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9tb2RlbHMvYW5uYS1zb3J0Lm1vZGVsXCI7XHJcbmltcG9ydCB7IFJhZGlvQnV0dG9uTW9kZWwsIFRvb2x0aXBNb2RlbCB9IGZyb20gXCIuLi8uLi8uLi8uLi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9tb2RlbHMvYW5uYS10b29sdGlwLm1vZGVsXCI7XHJcbmltcG9ydCB7IEFubmFGaWx0ZXJTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2FubmEtY29yZS1zaGFyZWQtbGliL3NlcnZpY2VzL2FubmEtZmlsdGVyLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQW5uYVNvcnRTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2FubmEtY29yZS1zaGFyZWQtbGliL3NlcnZpY2VzL2FubmEtc29ydC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEFubmFTb3J0Q29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2FubmEtc29ydC9hbm5hLXNvcnQuY29tcG9uZW50XCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiBcImFubmEtY29yZS1hbm5hLWNvbHVtbi1jaGVja2JveC1maWx0ZXJcIixcclxuICAgIHRlbXBsYXRlVXJsOiBcIi4vYW5uYS1jb2x1bW4tY2hlY2tib3gtZmlsdGVyLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgICBzdHlsZVVybHM6IFtcIi4vYW5uYS1jb2x1bW4tY2hlY2tib3gtZmlsdGVyLmNvbXBvbmVudC5zY3NzXCJdLFxyXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICAgIGltcG9ydHM6IFtcclxuICAgICAgICBOZ0lmLFxyXG4gICAgICAgIE5nRm9yLFxyXG4gICAgICAgIE5nQ2xhc3MsXHJcbiAgICAgICAgQW5uYVNvcnRDb21wb25lbnQsXHJcbiAgICAgICAgRm9ybXNNb2R1bGUsXHJcbiAgICAgICAgQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0LFxyXG4gICAgICAgIENka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGwsXHJcbiAgICAgICAgQ2RrVmlydHVhbEZvck9mLFxyXG4gICAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEFubmFDb2x1bW5DaGVja2JveEZpbHRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBASW5wdXQoKSBzaG93RmlsdGVySGVhZGVyVGFiczogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIGlzTHVyQW5kQ3NyQ29tcG9uZW50OiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgdGFibGVEYXRhOiBhbnlbXTtcclxuICAgIEBJbnB1dCgpIGNsb25lZFRhYmxlRGF0YTogYW55W107XHJcbiAgICBASW5wdXQoKSBmaWx0ZXJUYWJPYmplY3RzOiBhbnlbXTtcclxuXHJcbiAgICBAT3V0cHV0KCkgZmlsdGVyQXBwbGllZFRvVGFibGUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICBAT3V0cHV0KCkgc29ydGluZ0FwcGxpZWRUb1RhYmxlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gICAgQE91dHB1dCgpIGdldFNvcnRUeXBlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gICAgQE91dHB1dCgpIGNsb3NlVG9vbHRpcCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgICB0b29sdGlwT3B0aW9uczogVG9vbHRpcE1vZGVsW107XHJcbiAgICBjbG9uZWRUb29sdGlwT3B0aW9uczogVG9vbHRpcE1vZGVsW107XHJcbiAgICBoZWlnaHRPZkNoZWNrYm94VG9vbHRpcEZpbHRlcjogbnVtYmVyO1xyXG4gICAgdG9vbFRpcGRhdGE6IGFueTtcclxuICAgIHRlbXBUb29sdGlwRGF0YTogYW55O1xyXG4gICAgc2VsZWN0ZWRDaGVja2JveE9wdGlvbnNDb3VudDogbnVtYmVyO1xyXG4gICAgaXNGaWx0ZXJDaGFuZ2VkOiBib29sZWFuO1xyXG4gICAgdGVtcFNvcnRPcmRlcjogU29ydFR5cGUgPSBudWxsO1xyXG4gICAgaXNTb3J0Q2hhbmdlZDogYm9vbGVhbjtcclxuICAgIGRpc2FibGVTZWxlY3RBbGw6IGJvb2xlYW47XHJcbiAgICBkaXNhYmxlQ2xlYXJBbGw6IGJvb2xlYW47XHJcbiAgICBzZWFyY2hJdGVtOiBzdHJpbmc7XHJcbiAgICBzaG93U29ydENvbXBvbmVudDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgZGlzYWJsZUNoZWNrYm94QXBwbHk6IGJvb2xlYW47XHJcbiAgICBzaG93RmlsdGVyQ29tcG9uZW50OiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBtYXJnaW4gPSA1O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgYW5uYVNvcnRTZXJ2aWNlOiBBbm5hU29ydFNlcnZpY2UsXHJcbiAgICAgICAgcHVibGljIGFubmFGaWx0ZXJTZXJ2aWNlOiBBbm5hRmlsdGVyU2VydmljZSxcclxuICAgICkge31cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLnBvcHVsYXRlVG9vbHRpcERhdGFCYXNlZE9uU2VsZWN0ZWRSYWRpbyh0aGlzLmZpbHRlclRhYk9iamVjdHNbMF0sIGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICBwb3B1bGF0ZVRvb2x0aXBEYXRhQmFzZWRPblNlbGVjdGVkUmFkaW8oYWN0aXZlVGFiOiBSYWRpb0J1dHRvbk1vZGVsLCByZWxvYWQ6IGJvb2xlYW4pIHtcclxuICAgICAgICBjb25zdCBoZWFkZXIgPSBhY3RpdmVUYWIua2V5O1xyXG4gICAgICAgIHRoaXMuc2VhcmNoSXRlbSA9IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMuc2hvd1NvcnRDb21wb25lbnQgPSBhY3RpdmVUYWIuaXNTb3J0UmVxdWlyZWQ7XHJcbiAgICAgICAgdGhpcy5zaG93RmlsdGVyQ29tcG9uZW50ID0gYWN0aXZlVGFiLmlzRmlsdGVyUmVxdWlyZWQ7XHJcbiAgICAgICAgdGhpcy50ZW1wU29ydE9yZGVyID0gbnVsbDtcclxuICAgICAgICB0aGlzLmlzRmlsdGVyQ2hhbmdlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaXNTb3J0Q2hhbmdlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnNlbGVjdGVkUmFkaW8gPSBoZWFkZXI7XHJcbiAgICAgICAgaWYgKHJlbG9hZCkge1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlRmlsdGVyVG9vbHRpcERhdGEoYWN0aXZlVGFiLCBoZWFkZXIpO1xyXG4gICAgICAgICAgICB9LCAxMDApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlRmlsdGVyVG9vbHRpcERhdGEoYWN0aXZlVGFiLCBoZWFkZXIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGVGaWx0ZXJUb29sdGlwRGF0YShhY3RpdmVUYWI6IFJhZGlvQnV0dG9uTW9kZWwsIGtleTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5zaG93U29ydENvbXBvbmVudCA9IGFjdGl2ZVRhYi5pc1NvcnRSZXF1aXJlZDtcclxuICAgICAgICB0aGlzLnNob3dGaWx0ZXJDb21wb25lbnQgPSBhY3RpdmVUYWIuaXNGaWx0ZXJSZXF1aXJlZDtcclxuXHJcbiAgICAgICAgdGhpcy5kaXNhYmxlQ2hlY2tib3hBcHBseSA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnNob3dGaWx0ZXJDb21wb25lbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRDaGVja2JveERhdGEoa2V5KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q2hlY2tib3hEYXRhKGhlYWRlcjogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgdG9vbHRpcE9wdGlvbnMgPSB0aGlzLmNyZWF0ZUxpc3RGb3JDaGVja2JveEZpbHRlcihoZWFkZXIpO1xyXG5cclxuICAgICAgICBjb25zdCBbY2xvbmVkVG9vbHRpcE9wdGlvbnMsIHVwZGF0ZWRUb29sdGlwT3B0aW9ucywgc2VsZWN0ZWRJdGVtcywgdW5zZWxlY3RlZEl0ZW1zXSA9XHJcbiAgICAgICAgICAgIHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuZ2V0Q2xvbmVkVG9vbHRpcEFuZFRvb2x0aXBPcHRpb24odG9vbHRpcE9wdGlvbnMsIFwibGFiZWxcIik7XHJcblxyXG4gICAgICAgIHRoaXMuY2xvbmVkVG9vbHRpcE9wdGlvbnMgPSBjbG9uZWRUb29sdGlwT3B0aW9ucztcclxuICAgICAgICB0aGlzLnRvb2x0aXBPcHRpb25zID0gdXBkYXRlZFRvb2x0aXBPcHRpb25zO1xyXG5cclxuICAgICAgICB0aGlzLmhlaWdodE9mQ2hlY2tib3hUb29sdGlwRmlsdGVyID0gdGhpcy5hbm5hRmlsdGVyU2VydmljZS5nZXRIZWlnaHRPZkNoZWNrYm94VG9vbHRpcEZpbHRlcihcclxuICAgICAgICAgICAgdGhpcy50b29sdGlwT3B0aW9ucy5sZW5ndGgsXHJcbiAgICAgICAgICAgIHRoaXMubWFyZ2luLFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuZGlzYWJsZVNlbGVjdEFsbCA9IHVuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPT09IDA7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlQ2xlYXJBbGwgPSBzZWxlY3RlZEl0ZW1zLmxlbmd0aCA9PT0gMDtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkQ2hlY2tib3hPcHRpb25zQ291bnQgPSBzZWxlY3RlZEl0ZW1zLmxlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGVMaXN0Rm9yQ2hlY2tib3hGaWx0ZXIoaGVhZGVyOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBvcHRpb25EYXRhID0gdGhpcy5hbm5hRmlsdGVyU2VydmljZS5nZXRGaWx0ZXJPcHRpb25zRGF0YSh0aGlzLnRhYmxlRGF0YSwgdGhpcy5jbG9uZWRUYWJsZURhdGEpO1xyXG4gICAgICAgIGNvbnN0IHRvb2x0aXBPcHRpb25zID0gdGhpcy5hbm5hRmlsdGVyU2VydmljZS5jcmVhdGVMaXN0Rm9yQ2hlY2tib3hGaWx0ZXIoaGVhZGVyLCBvcHRpb25EYXRhKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRvb2x0aXBPcHRpb25zO1xyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdFVuc2VsZWN0TGlzdENoZWNrYm94KHRvb2x0aXBPcHRpb25zOiBUb29sdGlwTW9kZWxbXSwgaGVhZGVyOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodGhpcy5hbm5hRmlsdGVyU2VydmljZS50b29sdGlwU2VsZWN0ZWRNYXAuaGFzKGhlYWRlcikpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRWYWx1ZVNldCA9IG5ldyBTZXQodGhpcy5hbm5hRmlsdGVyU2VydmljZS50b29sdGlwU2VsZWN0ZWRNYXAuZ2V0KGhlYWRlcikpO1xyXG4gICAgICAgICAgICB0b29sdGlwT3B0aW9ucy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpdGVtLmlzU2VsZWN0ZWQgPSBzZWxlY3RlZFZhbHVlU2V0LmhhcyhpdGVtLnZhbHVlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdG9vbHRpcE9wdGlvbnMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaXRlbS5pc1NlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVuQ2hlY2tBbGxDaGVja2JveCgpIHtcclxuICAgICAgICB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnVuQ2hlY2tBbGxDaGVja2JveCh0aGlzLnRvb2x0aXBPcHRpb25zLCB0aGlzLmNsb25lZFRvb2x0aXBPcHRpb25zKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkQ2hlY2tib3hPcHRpb25zQ291bnQgPSAwO1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZVNlbGVjdEFsbCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZUNsZWFyQWxsID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmRpc2FibGVDaGVja2JveEFwcGx5ID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RBbGxDaGVja2JveCgpIHtcclxuICAgICAgICB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnNlbGVjdEFsbENoZWNrYm94KHRoaXMudG9vbHRpcE9wdGlvbnMsIHRoaXMuY2xvbmVkVG9vbHRpcE9wdGlvbnMpO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDaGVja2JveE9wdGlvbnNDb3VudCA9IHRoaXMudG9vbHRpcE9wdGlvbnMubGVuZ3RoO1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZVNlbGVjdEFsbCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlQ2xlYXJBbGwgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmRpc2FibGVDaGVja2JveEZpbHRlckFwcGx5QnV0dG9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2VhcmNoRm9yVGhlSXRlbShzdHI6IHN0cmluZykge1xyXG4gICAgICAgIGlmIChzdHIpIHtcclxuICAgICAgICAgICAgdGhpcy50b29sdGlwT3B0aW9ucyA9IHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuZ2V0RmlsdGVyZWRPcHRpb25Bc0JvbGRTdHJpbmcoc3RyLCB0aGlzLmNsb25lZFRvb2x0aXBPcHRpb25zKTtcclxuICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVIZWlnaHRGb3JGaWx0ZXJUb29sdGlwKCk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy50b29sdGlwT3B0aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBbc2VsZWN0ZWRJdGVtcywgdW5zZWxlY3RlZEl0ZW1zXSA9IHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuZ2V0U2VsZWN0ZWRBbmRVbnNlbGVjdGVkSXRlbXMoXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b29sdGlwT3B0aW9ucyxcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpc2FibGVTZWxlY3RBbGwgPSB1bnNlbGVjdGVkSXRlbXMubGVuZ3RoID09PSAwO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlQ2xlYXJBbGwgPSBzZWxlY3RlZEl0ZW1zLmxlbmd0aCA9PT0gMDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDaGVja2JveE9wdGlvbnNDb3VudCA9IHNlbGVjdGVkSXRlbXMubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlQ2hlY2tib3hBcHBseSA9IHNlbGVjdGVkSXRlbXMubGVuZ3RoID09PSAwIHx8ICF0aGlzLmNoZWNrSWZDaGVja2JveFRvb2x0aXBJc0ZpbHRlcmVkKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBbXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENoZWNrYm94T3B0aW9uc0NvdW50LFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZUNoZWNrYm94QXBwbHksXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlQ2xlYXJBbGwsXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlU2VsZWN0QWxsLFxyXG4gICAgICAgICAgICAgICAgXSA9IHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuZGlzYWJsZUFsbEJ0bnNXaGVuVGhlcmVBcmVOb0ZpbHRlcmVkUmVzdWx0cygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy50b29sdGlwT3B0aW9ucyA9IGNsb25lRGVlcCh0aGlzLmNsb25lZFRvb2x0aXBPcHRpb25zKTtcclxuICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVIZWlnaHRGb3JGaWx0ZXJUb29sdGlwKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IFtzZWxlY3RlZEl0ZW1zLCB1bnNlbGVjdGVkSXRlbXNdID0gdGhpcy5hbm5hRmlsdGVyU2VydmljZS5nZXRTZWxlY3RlZEFuZFVuc2VsZWN0ZWRJdGVtcyhcclxuICAgICAgICAgICAgICAgIHRoaXMudG9vbHRpcE9wdGlvbnMsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDaGVja2JveE9wdGlvbnNDb3VudCA9IHNlbGVjdGVkSXRlbXMubGVuZ3RoO1xyXG4gICAgICAgICAgICB0aGlzLmRpc2FibGVTZWxlY3RBbGwgPSB1bnNlbGVjdGVkSXRlbXMubGVuZ3RoID09PSAwO1xyXG4gICAgICAgICAgICB0aGlzLmRpc2FibGVDbGVhckFsbCA9IHNlbGVjdGVkSXRlbXMubGVuZ3RoID09PSAwO1xyXG4gICAgICAgICAgICB0aGlzLmRpc2FibGVDaGVja2JveEZpbHRlckFwcGx5QnV0dG9uKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNhbGN1bGF0ZUhlaWdodEZvckZpbHRlclRvb2x0aXAoKSB7XHJcbiAgICAgICAgY29uc3QgZGF0YUxlbmd0aCA9IHRoaXMudG9vbHRpcE9wdGlvbnMubGVuZ3RoID09PSAwID8gMSA6IHRoaXMudG9vbHRpcE9wdGlvbnMubGVuZ3RoO1xyXG4gICAgICAgIHRoaXMuaGVpZ2h0T2ZDaGVja2JveFRvb2x0aXBGaWx0ZXIgPSB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLmdldEhlaWdodE9mQ2hlY2tib3hUb29sdGlwRmlsdGVyKFxyXG4gICAgICAgICAgICBkYXRhTGVuZ3RoLFxyXG4gICAgICAgICAgICB0aGlzLm1hcmdpbixcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGVDaGVja2JveEZpbHRlckFwcGx5QnV0dG9uKCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkSXRlbXMgPSB0aGlzLnNob3dGaWx0ZXJDb21wb25lbnQgPyB0aGlzLnRvb2x0aXBPcHRpb25zLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5pc1NlbGVjdGVkKSA6IFtdO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5zaG93RmlsdGVyQ29tcG9uZW50ICYmIHRoaXMuc2hvd1NvcnRDb21wb25lbnQpIHtcclxuICAgICAgICAgICAgY29uc3QgaXNGaWx0ZXJDaGFuZ2VkID0gdGhpcy5jaGVja0lmQ2hlY2tib3hUb29sdGlwSXNGaWx0ZXJlZCgpO1xyXG4gICAgICAgICAgICBjb25zdCBpc1NvcnRDaGFuZ2VkID0gdGhpcy5jaGVja0lmU29ydGluZ0NoYW5nZWQoKTtcclxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlQ2hlY2tib3hBcHBseSA9IHNlbGVjdGVkSXRlbXMubGVuZ3RoID09PSAwIHx8ICghaXNTb3J0Q2hhbmdlZCAmJiAhaXNGaWx0ZXJDaGFuZ2VkKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2hvd0ZpbHRlckNvbXBvbmVudCkge1xyXG4gICAgICAgICAgICB0aGlzLmRpc2FibGVDaGVja2JveEFwcGx5ID0gc2VsZWN0ZWRJdGVtcy5sZW5ndGggPT09IDAgfHwgIXRoaXMuY2hlY2tJZkNoZWNrYm94VG9vbHRpcElzRmlsdGVyZWQoKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2hvd1NvcnRDb21wb25lbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlQ2hlY2tib3hBcHBseSA9ICF0aGlzLmNoZWNrSWZTb3J0aW5nQ2hhbmdlZCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjaGVja0lmU29ydGluZ0NoYW5nZWQoKSB7XHJcbiAgICAgICAgdGhpcy5pc1NvcnRDaGFuZ2VkID0gdGhpcy5hbm5hRmlsdGVyU2VydmljZS5jaGVja0lmU29ydGluZ0NoYW5nZWQodGhpcy50ZW1wU29ydE9yZGVyKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5pc1NvcnRDaGFuZ2VkO1xyXG4gICAgfVxyXG5cclxuICAgIGNoZWNrSWZDaGVja2JveFRvb2x0aXBJc0ZpbHRlcmVkKCkge1xyXG4gICAgICAgIGNvbnN0IHByZXZpb3VzU2VsZWN0ZWRWYWx1ZSA9IHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuZ2V0Q2hlY2tib3hQcmV2aW91c1NlbGVjdGVkVmFsdWUodGhpcy5jbG9uZWRUYWJsZURhdGEpO1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRTZWxlY3RlZFZhbHVlID0gdGhpcy5hbm5hRmlsdGVyU2VydmljZS5nZXRDaGVja2JveEN1cnJlbnRTZWxlY3RlZFZhbHVlKFxyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaEl0ZW0sXHJcbiAgICAgICAgICAgIHRoaXMudG9vbHRpcE9wdGlvbnMsXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmlzRmlsdGVyQ2hhbmdlZCA9ICFpc0VxdWFsKGN1cnJlbnRTZWxlY3RlZFZhbHVlLCBwcmV2aW91c1NlbGVjdGVkVmFsdWUpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmlzRmlsdGVyQ2hhbmdlZDtcclxuICAgIH1cclxuXHJcbiAgICBhcHBseUZpbHRlcnMoKSB7XHJcbiAgICAgICAgdGhpcy5hcHBseUxpc3RGaWx0ZXJzKCk7XHJcbiAgICAgICAgdGhpcy5hcHBseVNvcnRpbmdPbkZpbHRlcmVkRGF0YSgpO1xyXG4gICAgICAgIHRoaXMuYW5uYUZpbHRlclNlcnZpY2UudXBkYXRlU3RhdGVPZkFsbFRoZUtleXModGhpcy5hbm5hU29ydFNlcnZpY2UuY29sdW1uU29ydFN0YXRlKTtcclxuICAgICAgICB0aGlzLmVtaXREYXRhKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXBwbHlMaXN0RmlsdGVycygpIHtcclxuICAgICAgICBpZiAodGhpcy5zaG93RmlsdGVyQ29tcG9uZW50ICYmIHRoaXMuaXNGaWx0ZXJDaGFuZ2VkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTZWxlY3RlZFZhbHVlID0gdGhpcy5hbm5hRmlsdGVyU2VydmljZS5nZXRDaGVja2JveEN1cnJlbnRTZWxlY3RlZFZhbHVlKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hJdGVtLFxyXG4gICAgICAgICAgICAgICAgdGhpcy50b29sdGlwT3B0aW9ucyxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5hbm5hRmlsdGVyU2VydmljZS5yZU9yZGVyQXBwbGllZEZpbHRlcnNTdGF0ZSh0aGlzLmNsb25lZFRhYmxlRGF0YSwgY3VycmVudFNlbGVjdGVkVmFsdWUpO1xyXG4gICAgICAgICAgICB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnRvb2x0aXBTZWxlY3RlZE1hcC5zZXQodGhpcy5hbm5hRmlsdGVyU2VydmljZS5zZWxlY3RlZFJhZGlvLCBjdXJyZW50U2VsZWN0ZWRWYWx1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMudGFibGVEYXRhID0gdGhpcy5hbm5hRmlsdGVyU2VydmljZS5maWx0ZXJEYXRhKHRoaXMuY2xvbmVkVGFibGVEYXRhLCBcIlwiKTtcclxuICAgICAgICAgICAgdGhpcy5hbm5hU29ydFNlcnZpY2Uubm9Tb3J0aW5nQXBwbGllZERhdGEgPSBjbG9uZURlZXAodGhpcy50YWJsZURhdGEpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhcHBseVNvcnRpbmdPbkZpbHRlcmVkRGF0YSgpIHtcclxuICAgICAgICBpZiAodGhpcy5zaG93U29ydENvbXBvbmVudCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc1NvcnRDaGFuZ2VkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRhYmxlRGF0YSA9IHRoaXMuYW5uYUZpbHRlclNlcnZpY2UudXBkYXRlU29ydE1hcChcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRlbXBTb3J0T3JkZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50YWJsZURhdGEsXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0x1ckFuZENzckNvbXBvbmVudCxcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0ZpbHRlckNoYW5nZWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudGFibGVEYXRhID0gdGhpcy5hbm5hU29ydFNlcnZpY2UuY2hlY2tJZlNvcnRpbmdJc0FwcGxpZWQoXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50YWJsZURhdGEsXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0x1ckFuZENzckNvbXBvbmVudCxcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNGaWx0ZXJDaGFuZ2VkKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGFibGVEYXRhID0gdGhpcy5hbm5hU29ydFNlcnZpY2UuY2hlY2tJZlNvcnRpbmdJc0FwcGxpZWQodGhpcy50YWJsZURhdGEsIHRoaXMuaXNMdXJBbmRDc3JDb21wb25lbnQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBlbWl0RGF0YSgpIHtcclxuICAgICAgICBpZiAodGhpcy5pc0ZpbHRlckNoYW5nZWQgJiYgdGhpcy5pc1NvcnRDaGFuZ2VkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyQXBwbGllZFRvVGFibGUuZW1pdCh0aGlzLnRhYmxlRGF0YSk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzRmlsdGVyQ2hhbmdlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmZpbHRlckFwcGxpZWRUb1RhYmxlLmVtaXQodGhpcy50YWJsZURhdGEpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc1NvcnRDaGFuZ2VkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0U29ydFR5cGUuZW1pdCh0aGlzLnRlbXBTb3J0T3JkZXIpO1xyXG4gICAgICAgICAgICB0aGlzLnNvcnRpbmdBcHBsaWVkVG9UYWJsZS5lbWl0KHRoaXMudGFibGVEYXRhKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0VW5zZWxlY3RDaGVja2JveChkYXRhOiBUb29sdGlwTW9kZWwpIHtcclxuICAgICAgICB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnNlbGVjdFVuc2VsZWN0Q2hlY2tib3goZGF0YSwgdGhpcy5jbG9uZWRUb29sdGlwT3B0aW9ucyk7XHJcbiAgICAgICAgY29uc3QgW3NlbGVjdGVkSXRlbXMsIHVuc2VsZWN0ZWRJdGVtc10gPSB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLmdldFNlbGVjdGVkQW5kVW5zZWxlY3RlZEl0ZW1zKFxyXG4gICAgICAgICAgICB0aGlzLnRvb2x0aXBPcHRpb25zLFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuZGlzYWJsZUNsZWFyQWxsID0gc2VsZWN0ZWRJdGVtcy5sZW5ndGggPT09IDA7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlU2VsZWN0QWxsID0gdW5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA9PT0gMDtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkQ2hlY2tib3hPcHRpb25zQ291bnQgPSBzZWxlY3RlZEl0ZW1zLmxlbmd0aDtcclxuICAgICAgICB0aGlzLmRpc2FibGVDaGVja2JveEZpbHRlckFwcGx5QnV0dG9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2VDaGVja2JveEZpbHRlcigpIHtcclxuICAgICAgICBpZiAodGhpcy50b29sVGlwZGF0YSkge1xyXG4gICAgICAgICAgICB0aGlzLnJldmVydCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNsb3NlVG9vbHRpcC5lbWl0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV2ZXJ0KCkge1xyXG4gICAgICAgIHRoaXMudGVtcFRvb2x0aXBEYXRhID0gY2xvbmVEZWVwKHRoaXMudG9vbFRpcGRhdGEpO1xyXG4gICAgICAgIHRoaXMuYW5uYUZpbHRlclNlcnZpY2UudG9vbHRpcE1hcC5zZXQodGhpcy5hbm5hRmlsdGVyU2VydmljZS5zZWxlY3RlZFJhZGlvLCB0aGlzLnRlbXBUb29sdGlwRGF0YSk7XHJcbiAgICAgICAgdGhpcy50b29sVGlwZGF0YSA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJTZWFyY2hlZEl0ZW0oKSB7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hJdGVtID0gXCJcIjtcclxuICAgICAgICB0aGlzLnNlYXJjaEZvclRoZUl0ZW0oXCJcIik7XHJcbiAgICB9XHJcblxyXG4gICAgc3RvcmVTb3J0VHlwZUluVGVtcFZhcmlhYmxlKGV2ZW50OiBTb3J0VHlwZSkge1xyXG4gICAgICAgIHRoaXMudGVtcFNvcnRPcmRlciA9IGV2ZW50O1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZUNoZWNrYm94RmlsdGVyQXBwbHlCdXR0b24oKTtcclxuICAgIH1cclxufVxyXG4iLCI8ZGl2XHJcbiAgICBjbGFzcz1cInJhZGlvLWNvbnRhaW5lclwiXHJcbiAgICAqbmdJZj1cInNob3dGaWx0ZXJIZWFkZXJUYWJzXCJcclxuPlxyXG4gICAgPGRpdlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cInsgJ2Z1bGwtd2lkdGgnOiBmaWx0ZXJUYWJPYmplY3RzLmxlbmd0aCA9PT0gMSB9XCJcclxuICAgICAgICAqbmdGb3I9XCJsZXQgZGF0YSBvZiBmaWx0ZXJUYWJPYmplY3RzXCJcclxuICAgID5cclxuICAgICAgICA8cFxyXG4gICAgICAgICAgICBjbGFzcz1cImZpbHRlci10YWJcIlxyXG4gICAgICAgICAgICBbdGl0bGVdPVwiZGF0YS5sYWJlbFwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJwb3B1bGF0ZVRvb2x0aXBEYXRhQmFzZWRPblNlbGVjdGVkUmFkaW8oZGF0YSwgdHJ1ZSlcIlxyXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7IGFjdGl2ZTogYW5uYUZpbHRlclNlcnZpY2Uuc2VsZWN0ZWRSYWRpbyA9PT0gZGF0YS5rZXkgfVwiXHJcbiAgICAgICAgICAgICpuZ0lmPVwiZmlsdGVyVGFiT2JqZWN0cy5sZW5ndGggPiAwXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIHt7IGRhdGEubGFiZWwgfX1cclxuICAgICAgICA8L3A+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48ZGl2XHJcbiAgICBjbGFzcz1cImNoZWNrYm94LXNvcnRcIlxyXG4gICAgKm5nSWY9XCJzaG93U29ydENvbXBvbmVudFwiXHJcbj5cclxuICAgIDxhbm5hLWNvcmUtc29ydC1saWJcclxuICAgICAgICBbbmdDbGFzc109XCJ7ICduby1ib3R0b20tYm9yZGVyJzogIXNob3dGaWx0ZXJDb21wb25lbnQgfVwiXHJcbiAgICAgICAgKHNvcnRPcHRpb25DbGlja2VkKT1cInN0b3JlU29ydFR5cGVJblRlbXBWYXJpYWJsZSgkZXZlbnQpXCJcclxuICAgICAgICBbc29ydE9iamVjdEtleV09XCJhbm5hRmlsdGVyU2VydmljZS5zZWxlY3RlZFJhZGlvXCJcclxuICAgID48L2FubmEtY29yZS1zb3J0LWxpYj5cclxuPC9kaXY+XHJcblxyXG48bmctY29udGFpbmVyICpuZ0lmPVwic2hvd0ZpbHRlckNvbXBvbmVudFwiPlxyXG4gICAgPHAgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIGNsYXNzPVwiZmlsdGVyLXRleHQtYnRuXCJcclxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVDbGVhckFsbFwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJ1bkNoZWNrQWxsQ2hlY2tib3goKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICBDbGVhciBhbGxcclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIGNsYXNzPVwiZmlsdGVyLXRleHQtYnRuXCJcclxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVTZWxlY3RBbGxcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0QWxsQ2hlY2tib3goKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICBTZWxlY3QgYWxsXHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICA8L3A+XHJcbiAgICA8cCBjbGFzcz1cInNlYXJjaC1ib3hcIj5cclxuICAgICAgICA8aSBjbGFzcz1cIm1pIG1kaS1zZWFyY2ggc2VhcmNoLWljb24gc2VhcmNoLWljb24tcG9zaXRpb25cIj48L2k+XHJcbiAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2hcIlxyXG4gICAgICAgICAgICBjbGFzcz1cInNlYXJjaC1pbnB1dFwiXHJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoSXRlbVwiXHJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNlYXJjaEZvclRoZUl0ZW0oJGV2ZW50KVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgICA8aVxyXG4gICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktY2xvc2Ugc2VhcmNoLWJhci1jbG9zZVwiXHJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2Rpc2FibGUtY2xvc2UtaWNvbic6ICFzZWFyY2hJdGVtIHx8IHNlYXJjaEl0ZW0ubGVuZ3RoID09PSAwIH1cIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJTZWFyY2hlZEl0ZW0oKVwiXHJcbiAgICAgICAgPjwvaT5cclxuICAgIDwvcD5cclxuICAgIDxkaXYgY2xhc3M9XCJwb3NpdGlvbi1yZWxhdGl2ZVwiPlxyXG4gICAgICAgIDwhLS0gVHJhY2sgQnkgZnVuYyAtLT5cclxuICAgICAgICA8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0XHJcbiAgICAgICAgICAgIGl0ZW1TaXplPVwiMThcIlxyXG4gICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImhlaWdodE9mQ2hlY2tib3hUb29sdGlwRmlsdGVyXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1kYXRhLWNvbnRhaW5lclwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8cFxyXG4gICAgICAgICAgICAgICAgKmNka1ZpcnR1YWxGb3I9XCJsZXQgb3B0aW9uIG9mIHRvb2x0aXBPcHRpb25zXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaW5wdXQgZXhhbXBsZS1pdGVtXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RVbnNlbGVjdENoZWNrYm94KG9wdGlvbilcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwib3B0aW9uLmlzU2VsZWN0ZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWkgbWRpLWNoZWNrLWJveCBjaGVjay1ib3hcIlxyXG4gICAgICAgICAgICAgICAgPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhb3B0aW9uLmlzU2VsZWN0ZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWkgbWRpLWNoZWNrLWJveC1vdXRsaW5lLWJsYW5rIGNoZWNrLWJveCB1bmNoZWNrZWRcIlxyXG4gICAgICAgICAgICAgICAgPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhXCJcclxuICAgICAgICAgICAgICAgICAgICB0aXRsZT1cInt7IG9wdGlvbi52YWx1ZSB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJvcHRpb24ubGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgPjwvc3Bhbj5cclxuICAgICAgICAgICAgPC9wPlxyXG5cclxuICAgICAgICAgICAgPHBcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwibm8tZGF0YS1jYXNlXCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwidG9vbHRpcE9wdGlvbnM/Lmxlbmd0aCA9PT0gMFwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIE5vIGRhdGEgZm91bmRcclxuICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgIDwvY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2aXJ0dWFsLXNjcm9sbC1kaXZcIj48L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L25nLWNvbnRhaW5lcj5cclxuXHJcbjxkaXYgY2xhc3M9XCJidXR0b25zLWNvbnRhaW5lciBjaGVja2JveC1maWx0ZXItYnV0dG9ucy1jb250YWluZXJcIj5cclxuICAgIDxidXR0b25cclxuICAgICAgICBjbGFzcz1cImJ1dHRvblwiXHJcbiAgICAgICAgKGNsaWNrKT1cImNsb3NlQ2hlY2tib3hGaWx0ZXIoKVwiXHJcbiAgICA+XHJcbiAgICAgICAgQ2FuY2VsXHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxidXR0b25cclxuICAgICAgICBjbGFzcz1cImJ1dHRvblwiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwieyBkaXNhYmxlZDogZGlzYWJsZUNoZWNrYm94QXBwbHkgfVwiXHJcbiAgICAgICAgKGNsaWNrKT1cImFwcGx5RmlsdGVycygpXCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZUNoZWNrYm94QXBwbHlcIlxyXG4gICAgPlxyXG4gICAgICAgIEFwcGx5XHJcbiAgICAgICAgPHNwYW4gKm5nSWY9XCJzaG93RmlsdGVyQ29tcG9uZW50XCI+e3tcclxuICAgICAgICAgICAgc2VsZWN0ZWRDaGVja2JveE9wdGlvbnNDb3VudCA9PT0gdG9vbHRpcE9wdGlvbnMubGVuZ3RoICYmIHRvb2x0aXBPcHRpb25zLmxlbmd0aCAhPT0gMCAmJiAhc2VhcmNoSXRlbVxyXG4gICAgICAgICAgICAgICAgPyBcIkFsbCAoXCIgKyBzZWxlY3RlZENoZWNrYm94T3B0aW9uc0NvdW50ICsgXCIpXCJcclxuICAgICAgICAgICAgICAgIDogXCIoXCIgKyBzZWxlY3RlZENoZWNrYm94T3B0aW9uc0NvdW50ICsgXCIpXCJcclxuICAgICAgICB9fTwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG48L2Rpdj5cclxuIl19
259
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5uYS1jb2x1bW4tY2hlY2tib3gtZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FubmEtY29yZS9zcmMvbGliL2FubmEtZ2VuZXJpYy10YWJsZS1saWIvY29tcG9uZW50cy9hbm5hLWNvbHVtbi1maWx0ZXJzL2FubmEtY29sdW1uLWNoZWNrYm94LWZpbHRlci9hbm5hLWNvbHVtbi1jaGVja2JveC1maWx0ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5uYS1jb3JlL3NyYy9saWIvYW5uYS1nZW5lcmljLXRhYmxlLWxpYi9jb21wb25lbnRzL2FubmEtY29sdW1uLWZpbHRlcnMvYW5uYS1jb2x1bW4tY2hlY2tib3gtZmlsdGVyL2FubmEtY29sdW1uLWNoZWNrYm94LWZpbHRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsZUFBZSxFQUFFLHdCQUF3QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDOUcsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFJL0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0RBQStELENBQUM7QUFDbEcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZEQUE2RCxDQUFDO0FBQzlGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDOzs7OztB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QUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFFSSxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBQ0cscUJBQXFCO3NCQUE5QixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGwsIENka1ZpcnR1YWxGb3JPZiwgQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0IH0gZnJvbSBcIkBhbmd1bGFyL2Nkay9zY3JvbGxpbmdcIjtcclxuaW1wb3J0IHsgTmdDbGFzcywgTmdGb3IsIE5nSWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBjbG9uZURlZXAsIGlzRXF1YWwgfSBmcm9tIFwibG9kYXNoLWVzXCI7XHJcblxyXG5pbXBvcnQgeyBTb3J0VHlwZSB9IGZyb20gXCIuLi8uLi8uLi8uLi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9tb2RlbHMvYW5uYS1zb3J0Lm1vZGVsXCI7XHJcbmltcG9ydCB7IFJhZGlvQnV0dG9uTW9kZWwsIFRvb2x0aXBNb2RlbCB9IGZyb20gXCIuLi8uLi8uLi8uLi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9tb2RlbHMvYW5uYS10b29sdGlwLm1vZGVsXCI7XHJcbmltcG9ydCB7IEFubmFGaWx0ZXJTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2FubmEtY29yZS1zaGFyZWQtbGliL3NlcnZpY2VzL2FubmEtZmlsdGVyLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQW5uYVNvcnRTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2FubmEtY29yZS1zaGFyZWQtbGliL3NlcnZpY2VzL2FubmEtc29ydC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEFubmFTb3J0Q29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2FubmEtc29ydC9hbm5hLXNvcnQuY29tcG9uZW50XCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiBcImFubmEtY29yZS1hbm5hLWNvbHVtbi1jaGVja2JveC1maWx0ZXJcIixcclxuICAgIHRlbXBsYXRlVXJsOiBcIi4vYW5uYS1jb2x1bW4tY2hlY2tib3gtZmlsdGVyLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgICBzdHlsZVVybHM6IFtcIi4vYW5uYS1jb2x1bW4tY2hlY2tib3gtZmlsdGVyLmNvbXBvbmVudC5zY3NzXCJdLFxyXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICAgIGltcG9ydHM6IFtcclxuICAgICAgICBOZ0lmLFxyXG4gICAgICAgIE5nRm9yLFxyXG4gICAgICAgIE5nQ2xhc3MsXHJcbiAgICAgICAgQW5uYVNvcnRDb21wb25lbnQsXHJcbiAgICAgICAgRm9ybXNNb2R1bGUsXHJcbiAgICAgICAgQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0LFxyXG4gICAgICAgIENka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGwsXHJcbiAgICAgICAgQ2RrVmlydHVhbEZvck9mLFxyXG4gICAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEFubmFDb2x1bW5DaGVja2JveEZpbHRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBASW5wdXQoKSBzaG93RmlsdGVySGVhZGVyVGFiczogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIGlzTHVyQW5kQ3NyQ29tcG9uZW50OiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgdGFibGVEYXRhOiBhbnlbXTtcclxuICAgIEBJbnB1dCgpIGNsb25lZFRhYmxlRGF0YTogYW55W107XHJcbiAgICBASW5wdXQoKSBmaWx0ZXJUYWJPYmplY3RzOiBhbnlbXTtcclxuICAgIFxyXG4gICAgQE91dHB1dCgpIGZpbHRlckFwcGxpZWRUb1RhYmxlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gICAgQE91dHB1dCgpIHNvcnRpbmdBcHBsaWVkVG9UYWJsZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIEBPdXRwdXQoKSBnZXRTb3J0VHlwZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIEBPdXRwdXQoKSBjbG9zZVRvb2x0aXAgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICBcclxuICAgIHRvb2x0aXBPcHRpb25zOiBUb29sdGlwTW9kZWxbXTtcclxuICAgIGNsb25lZFRvb2x0aXBPcHRpb25zOiBUb29sdGlwTW9kZWxbXTtcclxuICAgIGhlaWdodE9mQ2hlY2tib3hUb29sdGlwRmlsdGVyOiBudW1iZXI7XHJcbiAgICB0b29sVGlwZGF0YTogYW55O1xyXG4gICAgdGVtcFRvb2x0aXBEYXRhOiBhbnk7XHJcbiAgICBzZWxlY3RlZENoZWNrYm94T3B0aW9uc0NvdW50OiBudW1iZXI7XHJcbiAgICBpc0ZpbHRlckNoYW5nZWQ6IGJvb2xlYW47XHJcbiAgICB0ZW1wU29ydE9yZGVyOiBTb3J0VHlwZSA9IG51bGw7XHJcbiAgICBpc1NvcnRDaGFuZ2VkOiBib29sZWFuO1xyXG4gICAgZGlzYWJsZVNlbGVjdEFsbDogYm9vbGVhbjtcclxuICAgIGRpc2FibGVDbGVhckFsbDogYm9vbGVhbjtcclxuICAgIHNlYXJjaEl0ZW06IHN0cmluZztcclxuICAgIHNob3dTb3J0Q29tcG9uZW50OiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBkaXNhYmxlQ2hlY2tib3hBcHBseTogYm9vbGVhbjtcclxuICAgIHNob3dGaWx0ZXJDb21wb25lbnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIG1hcmdpbiA9IDU7XHJcbiAgICBzZWxlY3RlZFJhZGlvS2V5OiBzdHJpbmc7XHJcbiAgICBzaG93U3BsaXRlZE9wdGlvbnM6IGJvb2xlYW47XHJcbiAgICBzcGxpdERlbGltaXRlcjogc3RyaW5nO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgYW5uYVNvcnRTZXJ2aWNlOiBBbm5hU29ydFNlcnZpY2UsXHJcbiAgICAgICAgcHVibGljIGFubmFGaWx0ZXJTZXJ2aWNlOiBBbm5hRmlsdGVyU2VydmljZSxcclxuICAgICkge31cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLnBvcHVsYXRlVG9vbHRpcERhdGFCYXNlZE9uU2VsZWN0ZWRSYWRpbyh0aGlzLmZpbHRlclRhYk9iamVjdHNbMF0sIGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICBwb3B1bGF0ZVRvb2x0aXBEYXRhQmFzZWRPblNlbGVjdGVkUmFkaW8oYWN0aXZlVGFiOiBSYWRpb0J1dHRvbk1vZGVsLCByZWxvYWQ6IGJvb2xlYW4pIHtcclxuICAgICAgICBjb25zdCBoZWFkZXIgPSBhY3RpdmVUYWIua2V5O1xyXG4gICAgICAgIHRoaXMuc2VhcmNoSXRlbSA9IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMuc2hvd1NvcnRDb21wb25lbnQgPSBhY3RpdmVUYWIuaXNTb3J0UmVxdWlyZWQ7XHJcbiAgICAgICAgdGhpcy5zaG93RmlsdGVyQ29tcG9uZW50ID0gYWN0aXZlVGFiLmlzRmlsdGVyUmVxdWlyZWQ7XHJcbiAgICAgICAgdGhpcy5zaG93U3BsaXRlZE9wdGlvbnMgPSBhY3RpdmVUYWIuc2hvd1NwbGl0ZWRPcHRpb25zO1xyXG4gICAgICAgIHRoaXMuc3BsaXREZWxpbWl0ZXIgPSB0aGlzLnNob3dTcGxpdGVkT3B0aW9ucyA/IChhY3RpdmVUYWIuc3BsaXREZWxpbWl0ZXIgPz8gdGhpcy5hbm5hRmlsdGVyU2VydmljZS5ERUZBVUxUX1NQTElUX1NFUEFSQVRPUikgOiBcIlwiO1xyXG4gICAgICAgIHRoaXMudGVtcFNvcnRPcmRlciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5pc0ZpbHRlckNoYW5nZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzU29ydENoYW5nZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5hbm5hRmlsdGVyU2VydmljZS5zZWxlY3RlZFJhZGlvID0gaGVhZGVyO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpb0tleSA9IGAke2hlYWRlciAgfSR7KHRoaXMuc2hvd1NwbGl0ZWRPcHRpb25zKT8gKHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuU1BMSVRFRF9DSEVDS0JPWF9GSUxURVJfS0VZKSA6IFwiXCJ9YDtcclxuXHJcbiAgICAgICAgaWYgKHJlbG9hZCkge1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlRmlsdGVyVG9vbHRpcERhdGEoYWN0aXZlVGFiLCBoZWFkZXIpO1xyXG4gICAgICAgICAgICB9LCAxMDApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlRmlsdGVyVG9vbHRpcERhdGEoYWN0aXZlVGFiLCBoZWFkZXIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGVGaWx0ZXJUb29sdGlwRGF0YShhY3RpdmVUYWI6IFJhZGlvQnV0dG9uTW9kZWwsIGtleTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5zaG93U29ydENvbXBvbmVudCA9IGFjdGl2ZVRhYi5pc1NvcnRSZXF1aXJlZDtcclxuICAgICAgICB0aGlzLnNob3dGaWx0ZXJDb21wb25lbnQgPSBhY3RpdmVUYWIuaXNGaWx0ZXJSZXF1aXJlZDtcclxuXHJcbiAgICAgICAgdGhpcy5kaXNhYmxlQ2hlY2tib3hBcHBseSA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnNob3dGaWx0ZXJDb21wb25lbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRDaGVja2JveERhdGEoa2V5KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q2hlY2tib3hEYXRhKGhlYWRlcjogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgdG9vbHRpcE9wdGlvbnMgPSB0aGlzLmNyZWF0ZUxpc3RGb3JDaGVja2JveEZpbHRlcihoZWFkZXIpO1xyXG5cclxuICAgICAgICBjb25zdCBbY2xvbmVkVG9vbHRpcE9wdGlvbnMsIHVwZGF0ZWRUb29sdGlwT3B0aW9ucywgc2VsZWN0ZWRJdGVtcywgdW5zZWxlY3RlZEl0ZW1zXSA9XHJcbiAgICAgICAgICAgIHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuZ2V0Q2xvbmVkVG9vbHRpcEFuZFRvb2x0aXBPcHRpb24odG9vbHRpcE9wdGlvbnMsIFwibGFiZWxcIik7XHJcblxyXG4gICAgICAgIHRoaXMuY2xvbmVkVG9vbHRpcE9wdGlvbnMgPSBjbG9uZWRUb29sdGlwT3B0aW9ucztcclxuICAgICAgICB0aGlzLnRvb2x0aXBPcHRpb25zID0gdXBkYXRlZFRvb2x0aXBPcHRpb25zO1xyXG5cclxuICAgICAgICB0aGlzLmhlaWdodE9mQ2hlY2tib3hUb29sdGlwRmlsdGVyID0gdGhpcy5hbm5hRmlsdGVyU2VydmljZS5nZXRIZWlnaHRPZkNoZWNrYm94VG9vbHRpcEZpbHRlcihcclxuICAgICAgICAgICAgdGhpcy50b29sdGlwT3B0aW9ucy5sZW5ndGgsXHJcbiAgICAgICAgICAgIHRoaXMubWFyZ2luLFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuZGlzYWJsZVNlbGVjdEFsbCA9IHVuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPT09IDA7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlQ2xlYXJBbGwgPSBzZWxlY3RlZEl0ZW1zLmxlbmd0aCA9PT0gMDtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkQ2hlY2tib3hPcHRpb25zQ291bnQgPSBzZWxlY3RlZEl0ZW1zLmxlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGVMaXN0Rm9yQ2hlY2tib3hGaWx0ZXIoaGVhZGVyOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBvcHRpb25EYXRhID0gdGhpcy5hbm5hRmlsdGVyU2VydmljZS5nZXRGaWx0ZXJPcHRpb25zRGF0YSh0aGlzLnRhYmxlRGF0YSwgdGhpcy5jbG9uZWRUYWJsZURhdGEpO1xyXG4gICAgICAgIGNvbnN0IHRvb2x0aXBPcHRpb25zID0gdGhpcy5hbm5hRmlsdGVyU2VydmljZS5jcmVhdGVMaXN0Rm9yQ2hlY2tib3hGaWx0ZXIoaGVhZGVyLCBvcHRpb25EYXRhLCB0aGlzLnNob3dTcGxpdGVkT3B0aW9ucywgdGhpcy5zcGxpdERlbGltaXRlcik7XHJcblxyXG4gICAgICAgIHJldHVybiB0b29sdGlwT3B0aW9ucztcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RVbnNlbGVjdExpc3RDaGVja2JveCh0b29sdGlwT3B0aW9uczogVG9vbHRpcE1vZGVsW10sIGhlYWRlcjogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuYW5uYUZpbHRlclNlcnZpY2UudG9vbHRpcFNlbGVjdGVkTWFwLmhhcyhoZWFkZXIpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkVmFsdWVTZXQgPSBuZXcgU2V0KHRoaXMuYW5uYUZpbHRlclNlcnZpY2UudG9vbHRpcFNlbGVjdGVkTWFwLmdldChoZWFkZXIpKTtcclxuICAgICAgICAgICAgdG9vbHRpcE9wdGlvbnMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaXRlbS5pc1NlbGVjdGVkID0gc2VsZWN0ZWRWYWx1ZVNldC5oYXMoaXRlbS52YWx1ZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRvb2x0aXBPcHRpb25zLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICAgIGl0ZW0uaXNTZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB1bkNoZWNrQWxsQ2hlY2tib3goKSB7XHJcbiAgICAgICAgdGhpcy5hbm5hRmlsdGVyU2VydmljZS51bkNoZWNrQWxsQ2hlY2tib3godGhpcy50b29sdGlwT3B0aW9ucywgdGhpcy5jbG9uZWRUb29sdGlwT3B0aW9ucyk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZENoZWNrYm94T3B0aW9uc0NvdW50ID0gMDtcclxuICAgICAgICB0aGlzLmRpc2FibGVTZWxlY3RBbGwgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmRpc2FibGVDbGVhckFsbCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlQ2hlY2tib3hBcHBseSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0QWxsQ2hlY2tib3goKSB7XHJcbiAgICAgICAgdGhpcy5hbm5hRmlsdGVyU2VydmljZS5zZWxlY3RBbGxDaGVja2JveCh0aGlzLnRvb2x0aXBPcHRpb25zLCB0aGlzLmNsb25lZFRvb2x0aXBPcHRpb25zKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkQ2hlY2tib3hPcHRpb25zQ291bnQgPSB0aGlzLnRvb2x0aXBPcHRpb25zLmxlbmd0aDtcclxuICAgICAgICB0aGlzLmRpc2FibGVTZWxlY3RBbGwgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZUNsZWFyQWxsID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlQ2hlY2tib3hGaWx0ZXJBcHBseUJ1dHRvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHNlYXJjaEZvclRoZUl0ZW0oc3RyOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoc3RyKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9vbHRpcE9wdGlvbnMgPSB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLmdldEZpbHRlcmVkT3B0aW9uQXNCb2xkU3RyaW5nKHN0ciwgdGhpcy5jbG9uZWRUb29sdGlwT3B0aW9ucyk7XHJcbiAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlSGVpZ2h0Rm9yRmlsdGVyVG9vbHRpcCgpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMudG9vbHRpcE9wdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgW3NlbGVjdGVkSXRlbXMsIHVuc2VsZWN0ZWRJdGVtc10gPSB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLmdldFNlbGVjdGVkQW5kVW5zZWxlY3RlZEl0ZW1zKFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9vbHRpcE9wdGlvbnMsXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlU2VsZWN0QWxsID0gdW5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA9PT0gMDtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZUNsZWFyQWxsID0gc2VsZWN0ZWRJdGVtcy5sZW5ndGggPT09IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2hlY2tib3hPcHRpb25zQ291bnQgPSBzZWxlY3RlZEl0ZW1zLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZUNoZWNrYm94QXBwbHkgPSBzZWxlY3RlZEl0ZW1zLmxlbmd0aCA9PT0gMCB8fCAhdGhpcy5jaGVja0lmQ2hlY2tib3hUb29sdGlwSXNGaWx0ZXJlZCgpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDaGVja2JveE9wdGlvbnNDb3VudCxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc2FibGVDaGVja2JveEFwcGx5LFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZUNsZWFyQWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZVNlbGVjdEFsbCxcclxuICAgICAgICAgICAgICAgIF0gPSB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLmRpc2FibGVBbGxCdG5zV2hlblRoZXJlQXJlTm9GaWx0ZXJlZFJlc3VsdHMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9vbHRpcE9wdGlvbnMgPSBjbG9uZURlZXAodGhpcy5jbG9uZWRUb29sdGlwT3B0aW9ucyk7XHJcbiAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlSGVpZ2h0Rm9yRmlsdGVyVG9vbHRpcCgpO1xyXG4gICAgICAgICAgICBjb25zdCBbc2VsZWN0ZWRJdGVtcywgdW5zZWxlY3RlZEl0ZW1zXSA9IHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuZ2V0U2VsZWN0ZWRBbmRVbnNlbGVjdGVkSXRlbXMoXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvb2x0aXBPcHRpb25zLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2hlY2tib3hPcHRpb25zQ291bnQgPSBzZWxlY3RlZEl0ZW1zLmxlbmd0aDtcclxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlU2VsZWN0QWxsID0gdW5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA9PT0gMDtcclxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlQ2xlYXJBbGwgPSBzZWxlY3RlZEl0ZW1zLmxlbmd0aCA9PT0gMDtcclxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlQ2hlY2tib3hGaWx0ZXJBcHBseUJ1dHRvbigpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjYWxjdWxhdGVIZWlnaHRGb3JGaWx0ZXJUb29sdGlwKCkge1xyXG4gICAgICAgIGNvbnN0IGRhdGFMZW5ndGggPSB0aGlzLnRvb2x0aXBPcHRpb25zLmxlbmd0aCA9PT0gMCA/IDEgOiB0aGlzLnRvb2x0aXBPcHRpb25zLmxlbmd0aDtcclxuICAgICAgICB0aGlzLmhlaWdodE9mQ2hlY2tib3hUb29sdGlwRmlsdGVyID0gdGhpcy5hbm5hRmlsdGVyU2VydmljZS5nZXRIZWlnaHRPZkNoZWNrYm94VG9vbHRpcEZpbHRlcihcclxuICAgICAgICAgICAgZGF0YUxlbmd0aCxcclxuICAgICAgICAgICAgdGhpcy5tYXJnaW4sXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlQ2hlY2tib3hGaWx0ZXJBcHBseUJ1dHRvbigpIHtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZW1zID0gdGhpcy5zaG93RmlsdGVyQ29tcG9uZW50ID8gdGhpcy50b29sdGlwT3B0aW9ucy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uaXNTZWxlY3RlZCkgOiBbXTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc2hvd0ZpbHRlckNvbXBvbmVudCAmJiB0aGlzLnNob3dTb3J0Q29tcG9uZW50KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzRmlsdGVyQ2hhbmdlZCA9IHRoaXMuY2hlY2tJZkNoZWNrYm94VG9vbHRpcElzRmlsdGVyZWQoKTtcclxuICAgICAgICAgICAgY29uc3QgaXNTb3J0Q2hhbmdlZCA9IHRoaXMuY2hlY2tJZlNvcnRpbmdDaGFuZ2VkKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZUNoZWNrYm94QXBwbHkgPSBzZWxlY3RlZEl0ZW1zLmxlbmd0aCA9PT0gMCB8fCAoIWlzU29ydENoYW5nZWQgJiYgIWlzRmlsdGVyQ2hhbmdlZCk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNob3dGaWx0ZXJDb21wb25lbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlQ2hlY2tib3hBcHBseSA9IHNlbGVjdGVkSXRlbXMubGVuZ3RoID09PSAwIHx8ICF0aGlzLmNoZWNrSWZDaGVja2JveFRvb2x0aXBJc0ZpbHRlcmVkKCk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNob3dTb3J0Q29tcG9uZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZUNoZWNrYm94QXBwbHkgPSAhdGhpcy5jaGVja0lmU29ydGluZ0NoYW5nZWQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY2hlY2tJZlNvcnRpbmdDaGFuZ2VkKCkge1xyXG4gICAgICAgIHRoaXMuaXNTb3J0Q2hhbmdlZCA9IHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuY2hlY2tJZlNvcnRpbmdDaGFuZ2VkKHRoaXMudGVtcFNvcnRPcmRlcik7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTb3J0Q2hhbmdlZDtcclxuICAgIH1cclxuXHJcbiAgICBjaGVja0lmQ2hlY2tib3hUb29sdGlwSXNGaWx0ZXJlZCgpIHtcclxuICAgICAgICBjb25zdCBwcmV2aW91c1NlbGVjdGVkVmFsdWUgPSB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLmdldENoZWNrYm94UHJldmlvdXNTZWxlY3RlZFZhbHVlKHRoaXMuY2xvbmVkVGFibGVEYXRhKTtcclxuICAgICAgICBjb25zdCBjdXJyZW50U2VsZWN0ZWRWYWx1ZSA9IHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuZ2V0Q2hlY2tib3hDdXJyZW50U2VsZWN0ZWRWYWx1ZShcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hJdGVtLFxyXG4gICAgICAgICAgICB0aGlzLnRvb2x0aXBPcHRpb25zLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5pc0ZpbHRlckNoYW5nZWQgPSAhaXNFcXVhbChjdXJyZW50U2VsZWN0ZWRWYWx1ZSwgcHJldmlvdXNTZWxlY3RlZFZhbHVlKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5pc0ZpbHRlckNoYW5nZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgYXBwbHlGaWx0ZXJzKCkge1xyXG4gICAgICAgIHRoaXMuYXBwbHlMaXN0RmlsdGVycygpO1xyXG4gICAgICAgIHRoaXMuYXBwbHlTb3J0aW5nT25GaWx0ZXJlZERhdGEoKTtcclxuICAgICAgICB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnVwZGF0ZVN0YXRlT2ZBbGxUaGVLZXlzKHRoaXMuYW5uYVNvcnRTZXJ2aWNlLmNvbHVtblNvcnRTdGF0ZSk7XHJcbiAgICAgICAgdGhpcy5lbWl0RGF0YSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGFwcGx5TGlzdEZpbHRlcnMoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2hvd0ZpbHRlckNvbXBvbmVudCAmJiB0aGlzLmlzRmlsdGVyQ2hhbmdlZCkge1xyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50U2VsZWN0ZWRWYWx1ZSA9IHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuZ2V0Q2hlY2tib3hDdXJyZW50U2VsZWN0ZWRWYWx1ZShcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoSXRlbSxcclxuICAgICAgICAgICAgICAgIHRoaXMudG9vbHRpcE9wdGlvbnMsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMuYW5uYUZpbHRlclNlcnZpY2UucmVPcmRlckFwcGxpZWRGaWx0ZXJzU3RhdGUodGhpcy5jbG9uZWRUYWJsZURhdGEsIGN1cnJlbnRTZWxlY3RlZFZhbHVlKTtcclxuICAgICAgICAgICAgdGhpcy5hbm5hRmlsdGVyU2VydmljZS50b29sdGlwU2VsZWN0ZWRNYXAuc2V0KHRoaXMuc2VsZWN0ZWRSYWRpb0tleSwgY3VycmVudFNlbGVjdGVkVmFsdWUpO1xyXG4gICAgICAgICAgICB0aGlzLnRhYmxlRGF0YSA9IHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuZmlsdGVyRGF0YSh0aGlzLmNsb25lZFRhYmxlRGF0YSwgXCJcIik7XHJcbiAgICAgICAgICAgIHRoaXMuYW5uYVNvcnRTZXJ2aWNlLm5vU29ydGluZ0FwcGxpZWREYXRhID0gY2xvbmVEZWVwKHRoaXMudGFibGVEYXRhKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXBwbHlTb3J0aW5nT25GaWx0ZXJlZERhdGEoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2hvd1NvcnRDb21wb25lbnQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNTb3J0Q2hhbmdlZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50YWJsZURhdGEgPSB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnVwZGF0ZVNvcnRNYXAoXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZW1wU29ydE9yZGVyLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGFibGVEYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNMdXJBbmRDc3JDb21wb25lbnQsXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNGaWx0ZXJDaGFuZ2VkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRhYmxlRGF0YSA9IHRoaXMuYW5uYVNvcnRTZXJ2aWNlLmNoZWNrSWZTb3J0aW5nSXNBcHBsaWVkKFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGFibGVEYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNMdXJBbmRDc3JDb21wb25lbnQsXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzRmlsdGVyQ2hhbmdlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnRhYmxlRGF0YSA9IHRoaXMuYW5uYVNvcnRTZXJ2aWNlLmNoZWNrSWZTb3J0aW5nSXNBcHBsaWVkKHRoaXMudGFibGVEYXRhLCB0aGlzLmlzTHVyQW5kQ3NyQ29tcG9uZW50KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZW1pdERhdGEoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNGaWx0ZXJDaGFuZ2VkICYmIHRoaXMuaXNTb3J0Q2hhbmdlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmZpbHRlckFwcGxpZWRUb1RhYmxlLmVtaXQodGhpcy50YWJsZURhdGEpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0ZpbHRlckNoYW5nZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5maWx0ZXJBcHBsaWVkVG9UYWJsZS5lbWl0KHRoaXMudGFibGVEYXRhKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNTb3J0Q2hhbmdlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmdldFNvcnRUeXBlLmVtaXQodGhpcy50ZW1wU29ydE9yZGVyKTtcclxuICAgICAgICAgICAgdGhpcy5zb3J0aW5nQXBwbGllZFRvVGFibGUuZW1pdCh0aGlzLnRhYmxlRGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdFVuc2VsZWN0Q2hlY2tib3goZGF0YTogVG9vbHRpcE1vZGVsKSB7XHJcbiAgICAgICAgdGhpcy5hbm5hRmlsdGVyU2VydmljZS5zZWxlY3RVbnNlbGVjdENoZWNrYm94KGRhdGEsIHRoaXMuY2xvbmVkVG9vbHRpcE9wdGlvbnMpO1xyXG4gICAgICAgIGNvbnN0IFtzZWxlY3RlZEl0ZW1zLCB1bnNlbGVjdGVkSXRlbXNdID0gdGhpcy5hbm5hRmlsdGVyU2VydmljZS5nZXRTZWxlY3RlZEFuZFVuc2VsZWN0ZWRJdGVtcyhcclxuICAgICAgICAgICAgdGhpcy50b29sdGlwT3B0aW9ucyxcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLmRpc2FibGVDbGVhckFsbCA9IHNlbGVjdGVkSXRlbXMubGVuZ3RoID09PSAwO1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZVNlbGVjdEFsbCA9IHVuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPT09IDA7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZENoZWNrYm94T3B0aW9uc0NvdW50ID0gc2VsZWN0ZWRJdGVtcy5sZW5ndGg7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlQ2hlY2tib3hGaWx0ZXJBcHBseUJ1dHRvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlQ2hlY2tib3hGaWx0ZXIoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudG9vbFRpcGRhdGEpIHtcclxuICAgICAgICAgICAgdGhpcy5yZXZlcnQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jbG9zZVRvb2x0aXAuZW1pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldmVydCgpIHtcclxuICAgICAgICB0aGlzLnRlbXBUb29sdGlwRGF0YSA9IGNsb25lRGVlcCh0aGlzLnRvb2xUaXBkYXRhKTtcclxuICAgICAgICB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnRvb2x0aXBNYXAuc2V0KHRoaXMuYW5uYUZpbHRlclNlcnZpY2Uuc2VsZWN0ZWRSYWRpbywgdGhpcy50ZW1wVG9vbHRpcERhdGEpO1xyXG4gICAgICAgIHRoaXMudG9vbFRpcGRhdGEgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyU2VhcmNoZWRJdGVtKCkge1xyXG4gICAgICAgIHRoaXMuc2VhcmNoSXRlbSA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hGb3JUaGVJdGVtKFwiXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0b3JlU29ydFR5cGVJblRlbXBWYXJpYWJsZShldmVudDogU29ydFR5cGUpIHtcclxuICAgICAgICB0aGlzLnRlbXBTb3J0T3JkZXIgPSBldmVudDtcclxuICAgICAgICB0aGlzLmRpc2FibGVDaGVja2JveEZpbHRlckFwcGx5QnV0dG9uKCk7XHJcbiAgICB9XHJcbn1cclxuIiwiPGRpdlxyXG4gICAgY2xhc3M9XCJyYWRpby1jb250YWluZXJcIlxyXG4gICAgKm5nSWY9XCJzaG93RmlsdGVySGVhZGVyVGFic1wiXHJcbj5cclxuICAgIDxkaXZcclxuICAgICAgICBbbmdDbGFzc109XCJ7ICdmdWxsLXdpZHRoJzogZmlsdGVyVGFiT2JqZWN0cy5sZW5ndGggPT09IDEgfVwiXHJcbiAgICAgICAgKm5nRm9yPVwibGV0IGRhdGEgb2YgZmlsdGVyVGFiT2JqZWN0c1wiXHJcbiAgICA+XHJcbiAgICAgICAgPHBcclxuICAgICAgICAgICAgY2xhc3M9XCJmaWx0ZXItdGFiXCJcclxuICAgICAgICAgICAgW3RpdGxlXT1cImRhdGEubGFiZWxcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwicG9wdWxhdGVUb29sdGlwRGF0YUJhc2VkT25TZWxlY3RlZFJhZGlvKGRhdGEsIHRydWUpXCJcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyBhY3RpdmU6IGFubmFGaWx0ZXJTZXJ2aWNlLnNlbGVjdGVkUmFkaW8gPT09IGRhdGEua2V5IH1cIlxyXG4gICAgICAgICAgICAqbmdJZj1cImZpbHRlclRhYk9iamVjdHMubGVuZ3RoID4gMFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICB7eyBkYXRhLmxhYmVsIH19XHJcbiAgICAgICAgPC9wPlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPGRpdlxyXG4gICAgY2xhc3M9XCJjaGVja2JveC1zb3J0XCJcclxuICAgICpuZ0lmPVwic2hvd1NvcnRDb21wb25lbnRcIlxyXG4+XHJcbiAgICA8YW5uYS1jb3JlLXNvcnQtbGliXHJcbiAgICAgICAgW25nQ2xhc3NdPVwieyAnbm8tYm90dG9tLWJvcmRlcic6ICFzaG93RmlsdGVyQ29tcG9uZW50IH1cIlxyXG4gICAgICAgIChzb3J0T3B0aW9uQ2xpY2tlZCk9XCJzdG9yZVNvcnRUeXBlSW5UZW1wVmFyaWFibGUoJGV2ZW50KVwiXHJcbiAgICAgICAgW3NvcnRPYmplY3RLZXldPVwiYW5uYUZpbHRlclNlcnZpY2Uuc2VsZWN0ZWRSYWRpb1wiXHJcbiAgICA+PC9hbm5hLWNvcmUtc29ydC1saWI+XHJcbjwvZGl2PlxyXG5cclxuPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dGaWx0ZXJDb21wb25lbnRcIj5cclxuICAgIDxwIGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICBjbGFzcz1cImZpbHRlci10ZXh0LWJ0blwiXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlQ2xlYXJBbGxcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwidW5DaGVja0FsbENoZWNrYm94KClcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgICAgQ2xlYXIgYWxsXHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICBjbGFzcz1cImZpbHRlci10ZXh0LWJ0blwiXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlU2VsZWN0QWxsXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdEFsbENoZWNrYm94KClcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgICAgU2VsZWN0IGFsbFxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9wPlxyXG4gICAgPHAgY2xhc3M9XCJzZWFyY2gtYm94XCI+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJtaSBtZGktc2VhcmNoIHNlYXJjaC1pY29uIHNlYXJjaC1pY29uLXBvc2l0aW9uXCI+PC9pPlxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJzZWFyY2gtaW5wdXRcIlxyXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlYXJjaEl0ZW1cIlxyXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZWFyY2hGb3JUaGVJdGVtKCRldmVudClcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgICAgPGlcclxuICAgICAgICAgICAgY2xhc3M9XCJtZGkgbWRpLWNsb3NlIHNlYXJjaC1iYXItY2xvc2VcIlxyXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdkaXNhYmxlLWNsb3NlLWljb24nOiAhc2VhcmNoSXRlbSB8fCBzZWFyY2hJdGVtLmxlbmd0aCA9PT0gMCB9XCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFyU2VhcmNoZWRJdGVtKClcIlxyXG4gICAgICAgID48L2k+XHJcbiAgICA8L3A+XHJcbiAgICA8ZGl2IGNsYXNzPVwicG9zaXRpb24tcmVsYXRpdmVcIj5cclxuICAgICAgICA8IS0tIFRyYWNrIEJ5IGZ1bmMgLS0+XHJcbiAgICAgICAgPGNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydFxyXG4gICAgICAgICAgICBpdGVtU2l6ZT1cIjE4XCJcclxuICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJoZWlnaHRPZkNoZWNrYm94VG9vbHRpcEZpbHRlclwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24tZGF0YS1jb250YWluZXJcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgICAgPHBcclxuICAgICAgICAgICAgICAgICpjZGtWaXJ0dWFsRm9yPVwibGV0IG9wdGlvbiBvZiB0b29sdGlwT3B0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImlucHV0IGV4YW1wbGUtaXRlbVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0VW5zZWxlY3RDaGVja2JveChvcHRpb24pXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIm9wdGlvbi5pc1NlbGVjdGVkXCJcclxuICAgICAgICAgICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1pIG1kaS1jaGVjay1ib3ggY2hlY2stYm94XCJcclxuICAgICAgICAgICAgICAgID48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIW9wdGlvbi5pc1NlbGVjdGVkXCJcclxuICAgICAgICAgICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1pIG1kaS1jaGVjay1ib3gtb3V0bGluZS1ibGFuayBjaGVjay1ib3ggdW5jaGVja2VkXCJcclxuICAgICAgICAgICAgICAgID48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YVwiXHJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyBvcHRpb24udmFsdWUgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwib3B0aW9uLmxhYmVsXCJcclxuICAgICAgICAgICAgICAgID48L3NwYW4+XHJcbiAgICAgICAgICAgIDwvcD5cclxuXHJcbiAgICAgICAgICAgIDxwXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm5vLWRhdGEtY2FzZVwiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInRvb2x0aXBPcHRpb25zPy5sZW5ndGggPT09IDBcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICBObyBkYXRhIGZvdW5kXHJcbiAgICAgICAgICAgIDwvcD5cclxuICAgICAgICA8L2Nkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydD5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidmlydHVhbC1zY3JvbGwtZGl2XCI+PC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9uZy1jb250YWluZXI+XHJcblxyXG48ZGl2IGNsYXNzPVwiYnV0dG9ucy1jb250YWluZXIgY2hlY2tib3gtZmlsdGVyLWJ1dHRvbnMtY29udGFpbmVyXCI+XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgICAgY2xhc3M9XCJidXR0b25cIlxyXG4gICAgICAgIChjbGljayk9XCJjbG9zZUNoZWNrYm94RmlsdGVyKClcIlxyXG4gICAgPlxyXG4gICAgICAgIENhbmNlbFxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgICAgY2xhc3M9XCJidXR0b25cIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cInsgZGlzYWJsZWQ6IGRpc2FibGVDaGVja2JveEFwcGx5IH1cIlxyXG4gICAgICAgIChjbGljayk9XCJhcHBseUZpbHRlcnMoKVwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVDaGVja2JveEFwcGx5XCJcclxuICAgID5cclxuICAgICAgICBBcHBseVxyXG4gICAgICAgIDxzcGFuICpuZ0lmPVwic2hvd0ZpbHRlckNvbXBvbmVudFwiPnt7XHJcbiAgICAgICAgICAgIHNlbGVjdGVkQ2hlY2tib3hPcHRpb25zQ291bnQgPT09IHRvb2x0aXBPcHRpb25zLmxlbmd0aCAmJiB0b29sdGlwT3B0aW9ucy5sZW5ndGggIT09IDAgJiYgIXNlYXJjaEl0ZW1cclxuICAgICAgICAgICAgICAgID8gXCJBbGwgKFwiICsgc2VsZWN0ZWRDaGVja2JveE9wdGlvbnNDb3VudCArIFwiKVwiXHJcbiAgICAgICAgICAgICAgICA6IFwiKFwiICsgc2VsZWN0ZWRDaGVja2JveE9wdGlvbnNDb3VudCArIFwiKVwiXHJcbiAgICAgICAgfX08L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuPC9kaXY+XHJcbiJdfQ==