carbon-components-angular 6.0.0-rc.4 → 6.0.0-rc.6

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 (61) hide show
  1. package/combobox/combobox.component.d.ts +3 -2
  2. package/docs/documentation/components/ComboBox.html +160 -138
  3. package/docs/documentation/components/ContentSwitcher.html +19 -13
  4. package/docs/documentation/components/ContextMenuComponent.html +35 -29
  5. package/docs/documentation/components/ContextMenuDividerComponent.html +11 -6
  6. package/docs/documentation/components/ContextMenuGroupComponent.html +25 -19
  7. package/docs/documentation/components/ContextMenuItemComponent.html +70 -64
  8. package/docs/documentation/components/DatePicker.html +106 -100
  9. package/docs/documentation/components/DatePickerInput.html +41 -35
  10. package/docs/documentation/components/Dropdown.html +118 -119
  11. package/docs/documentation/components/DropdownList.html +88 -97
  12. package/docs/documentation/js/search/search_index.js +2 -2
  13. package/docs/documentation/modules/TilesModule/dependencies.svg +106 -106
  14. package/docs/documentation/modules/TilesModule.html +106 -106
  15. package/docs/documentation/modules/TimePickerModule/dependencies.svg +36 -40
  16. package/docs/documentation/modules/TimePickerModule.html +36 -40
  17. package/docs/documentation/modules/TimePickerSelectModule/dependencies.svg +49 -45
  18. package/docs/documentation/modules/TimePickerSelectModule.html +49 -45
  19. package/docs/documentation/modules/ToggleModule/dependencies.svg +4 -4
  20. package/docs/documentation/modules/ToggleModule.html +4 -4
  21. package/docs/documentation/modules/TooltipModule/dependencies.svg +29 -29
  22. package/docs/documentation/modules/TooltipModule.html +29 -29
  23. package/docs/documentation/modules/TreeviewModule/dependencies.svg +35 -35
  24. package/docs/documentation/modules/TreeviewModule.html +35 -35
  25. package/docs/documentation.json +505 -497
  26. package/docs/storybook/{8383.1f80f6c8.iframe.bundle.js → 8383.844bcd95.iframe.bundle.js} +1 -1
  27. package/docs/storybook/combobox-combobox-stories.2b92d137.iframe.bundle.js +1 -0
  28. package/docs/storybook/{content-switcher-content-switcher-stories.753fbf1c.iframe.bundle.js → content-switcher-content-switcher-stories.0d959b5c.iframe.bundle.js} +1 -1
  29. package/docs/storybook/{context-menu-context-menu-stories.6344e050.iframe.bundle.js → context-menu-context-menu-stories.d2e63fe8.iframe.bundle.js} +1 -1
  30. package/docs/storybook/{datepicker-datepicker-stories.5cf89dc1.iframe.bundle.js → datepicker-datepicker-stories.b4bcda9f.iframe.bundle.js} +1 -1
  31. package/docs/storybook/iframe.html +2 -2
  32. package/docs/storybook/main.07778da0.iframe.bundle.js +1 -0
  33. package/docs/storybook/project.json +1 -1
  34. package/docs/storybook/{runtime~main.de5a4ef6.iframe.bundle.js → runtime~main.ec2949a5.iframe.bundle.js} +1 -1
  35. package/dropdown/dropdown.component.d.ts +2 -3
  36. package/dropdown/list/dropdown-list.component.d.ts +2 -3
  37. package/esm2022/combobox/combobox.component.mjs +11 -9
  38. package/esm2022/content-switcher/content-switcher.component.mjs +5 -4
  39. package/esm2022/context-menu/context-menu-divider.component.mjs +5 -4
  40. package/esm2022/context-menu/context-menu-group.component.mjs +5 -4
  41. package/esm2022/context-menu/context-menu-item.component.mjs +4 -4
  42. package/esm2022/context-menu/context-menu.component.mjs +4 -4
  43. package/esm2022/datepicker/datepicker.component.mjs +5 -4
  44. package/esm2022/datepicker-input/datepicker-input.component.mjs +5 -4
  45. package/esm2022/dropdown/dropdown.component.mjs +1 -1
  46. package/esm2022/dropdown/list/dropdown-list.component.mjs +4 -6
  47. package/fesm2022/carbon-components-angular-combobox.mjs +10 -8
  48. package/fesm2022/carbon-components-angular-combobox.mjs.map +1 -1
  49. package/fesm2022/carbon-components-angular-content-switcher.mjs +4 -3
  50. package/fesm2022/carbon-components-angular-content-switcher.mjs.map +1 -1
  51. package/fesm2022/carbon-components-angular-context-menu.mjs +11 -9
  52. package/fesm2022/carbon-components-angular-context-menu.mjs.map +1 -1
  53. package/fesm2022/carbon-components-angular-datepicker-input.mjs +4 -3
  54. package/fesm2022/carbon-components-angular-datepicker-input.mjs.map +1 -1
  55. package/fesm2022/carbon-components-angular-datepicker.mjs +4 -3
  56. package/fesm2022/carbon-components-angular-datepicker.mjs.map +1 -1
  57. package/fesm2022/carbon-components-angular-dropdown.mjs +3 -5
  58. package/fesm2022/carbon-components-angular-dropdown.mjs.map +1 -1
  59. package/package.json +7 -7
  60. package/docs/storybook/combobox-combobox-stories.3bf37571.iframe.bundle.js +0 -1
  61. package/docs/storybook/main.3c25e34a.iframe.bundle.js +0 -1
@@ -1,4 +1,4 @@
1
- import { Component, Input, Output, EventEmitter, TemplateRef, ViewChild } from "@angular/core";
1
+ import { Component, Input, Output, EventEmitter, TemplateRef, ViewChild, ChangeDetectionStrategy } from "@angular/core";
2
2
  import { NG_VALUE_ACCESSOR } from "@angular/forms";
3
3
  import * as i0 from "@angular/core";
4
4
  import * as i1 from "@angular/common";
@@ -169,7 +169,7 @@ export class DatePickerInput {
169
169
  </div>
170
170
  </div>
171
171
  </div>
172
- `, isInline: true, dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }] }); }
172
+ `, isInline: true, dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
173
173
  }
174
174
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: DatePickerInput, decorators: [{
175
175
  type: Component,
@@ -288,7 +288,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImpo
288
288
  useExisting: DatePickerInput,
289
289
  multi: true
290
290
  }
291
- ]
291
+ ],
292
+ changeDetection: ChangeDetectionStrategy.OnPush
292
293
  }]
293
294
  }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { type: [{
294
295
  type: Input
@@ -330,4 +331,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImpo
330
331
  type: ViewChild,
331
332
  args: ["input"]
332
333
  }] } });
333
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGF0ZXBpY2tlci1pbnB1dC9kYXRlcGlja2VyLWlucHV0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUVaLFdBQVcsRUFDWCxTQUFTLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUF1SG5ELE1BQU0sT0FBTyxlQUFlO2FBQ1osb0JBQWUsR0FBRyxDQUFDLEFBQUosQ0FBSztJQTBEbkMsWUFBc0IsVUFBc0I7UUFBdEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQXpENUM7OztXQUdHO1FBQ00sU0FBSSxHQUFrQyxRQUFRLENBQUM7UUFFL0MsT0FBRSxHQUFHLGNBQWMsZUFBZSxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUM7UUFFdkQsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUloQixnQkFBVyxHQUFHLFlBQVksQ0FBQztRQUUzQixZQUFPLEdBQUcsNEJBQTRCLENBQUM7UUFFdEMsZ0JBQVcsR0FBeUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUVqRTs7O1dBR0c7UUFDTSxVQUFLLEdBQXFCLE1BQU0sQ0FBQztRQUVqQyxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRWpCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDMUI7O1dBRUc7UUFDTSxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBS3pCOztZQUVJO1FBQ0ssU0FBSSxHQUFHLEtBQUssQ0FBQztRQVdiLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFakIsVUFBSyxHQUFHLEVBQUUsQ0FBQztRQUVYLFNBQUksR0FBdUIsSUFBSSxDQUFDO1FBeUJ6QyxjQUFTLEdBQWMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRWpDLG9CQUFlLEdBQUcsQ0FBQyxDQUFNLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztJQXZCYyxDQUFDO0lBRWpELFFBQVEsQ0FBQyxLQUFLO1FBQ2IsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUNoQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFTSxVQUFVLENBQUMsS0FBVTtRQUMzQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBRU0sZ0JBQWdCLENBQUMsRUFBTztRQUM5QixJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRU0saUJBQWlCLENBQUMsRUFBTztRQUMvQixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBTU0sVUFBVSxDQUFDLEtBQUs7UUFDdEIsT0FBTyxLQUFLLFlBQVksV0FBVyxDQUFDO0lBQ3JDLENBQUM7K0dBdEZXLGVBQWU7bUdBQWYsZUFBZSxzY0FSaEI7WUFDVjtnQkFDQyxPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixXQUFXLEVBQUUsZUFBZTtnQkFDNUIsS0FBSyxFQUFFLElBQUk7YUFDWDtTQUNELDBIQWpIUzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQTBHVDs7NEZBU1csZUFBZTtrQkFySDNCLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLDhDQUE4QztvQkFDeEQsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBMEdUO29CQUNELFNBQVMsRUFBRTt3QkFDVjs0QkFDQyxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLGlCQUFpQjs0QkFDNUIsS0FBSyxFQUFFLElBQUk7eUJBQ1g7cUJBQ0Q7aUJBQ0Q7K0VBT1MsSUFBSTtzQkFBWixLQUFLO2dCQUVHLEVBQUU7c0JBQVYsS0FBSztnQkFFRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRUcsS0FBSztzQkFBYixLQUFLO2dCQUVHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUcsT0FBTztzQkFBZixLQUFLO2dCQUVJLFdBQVc7c0JBQXBCLE1BQU07Z0JBTUUsS0FBSztzQkFBYixLQUFLO2dCQUVHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUcsUUFBUTtzQkFBaEIsS0FBSztnQkFJRyxPQUFPO3NCQUFmLEtBQUs7Z0JBSUcsV0FBVztzQkFBbkIsS0FBSztnQkFJRyxJQUFJO3NCQUFaLEtBQUs7Z0JBSUcsUUFBUTtzQkFBaEIsS0FBSztnQkFLRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUcsS0FBSztzQkFBYixLQUFLO2dCQUVHLElBQUk7c0JBQVosS0FBSztnQkFFYyxLQUFLO3NCQUF4QixTQUFTO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRDb21wb25lbnQsXG5cdElucHV0LFxuXHRPdXRwdXQsXG5cdEV2ZW50RW1pdHRlcixcblx0RWxlbWVudFJlZixcblx0VGVtcGxhdGVSZWYsXG5cdFZpZXdDaGlsZFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiBcImNkcy1kYXRlLXBpY2tlci1pbnB1dCwgaWJtLWRhdGUtcGlja2VyLWlucHV0XCIsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PGRpdiBjbGFzcz1cImNkcy0tZm9ybS1pdGVtXCI+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwiY2RzLS1kYXRlLXBpY2tlclwiXG5cdFx0XHRcdFtuZ0NsYXNzXT1cIntcblx0XHRcdFx0XHQnY2RzLS1kYXRlLXBpY2tlci0tc2ltcGxlJyA6IHR5cGUgPT09ICdzaW1wbGUnLFxuXHRcdFx0XHRcdCdjZHMtLWRhdGUtcGlja2VyLS1zaW5nbGUnIDogdHlwZSA9PT0gJ3NpbmdsZScsXG5cdFx0XHRcdFx0J2Nkcy0tZGF0ZS1waWNrZXItLXJhbmdlJyA6IHR5cGUgPT09ICdyYW5nZScsXG5cdFx0XHRcdFx0J2Nkcy0tZGF0ZS1waWNrZXItLWxpZ2h0JyA6IHRoZW1lID09PSAnbGlnaHQnLFxuXHRcdFx0XHRcdCdjZHMtLXNrZWxldG9uJyA6IHNrZWxldG9uXG5cdFx0XHRcdH1cIj5cblx0XHRcdFx0PGRpdiBjbGFzcz1cImNkcy0tZGF0ZS1waWNrZXItY29udGFpbmVyXCI+XG5cdFx0XHRcdFx0PCEtLSBTa2VsZXRvbiBzdHJ1Y3R1cmUgLS0+XG5cdFx0XHRcdFx0QGlmIChza2VsZXRvbikge1xuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJjZHMtLWxhYmVsIGNkcy0tc2tlbGV0b25cIj48L3NwYW4+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiY2RzLS1kYXRlLXBpY2tlcl9faW5wdXQgY2RzLS1za2VsZXRvblwiPjwvZGl2PlxuXHRcdFx0XHRcdH0gQGVsc2Uge1xuXHRcdFx0XHRcdFx0QGlmIChsYWJlbCkge1xuXHRcdFx0XHRcdFx0XHQ8bGFiZWxcblx0XHRcdFx0XHRcdFx0XHRbZm9yXT1cImlkXCJcblx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cImNkcy0tbGFiZWxcIlxuXHRcdFx0XHRcdFx0XHRcdFtuZ0NsYXNzXT1cInsnY2RzLS1sYWJlbC0tZGlzYWJsZWQnOiBkaXNhYmxlZH1cIj5cblx0XHRcdFx0XHRcdFx0XHRAaWYgKGlzVGVtcGxhdGUobGFiZWwpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHQ8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwibGFiZWxcIiAvPlxuXHRcdFx0XHRcdFx0XHRcdH0gQGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0e3tsYWJlbH19XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHQ8L2xhYmVsPlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImNkcy0tZGF0ZS1waWNrZXItaW5wdXRfX3dyYXBwZXJcIlxuXHRcdFx0XHRcdFx0XHRbbmdDbGFzc109XCJ7XG5cdFx0XHRcdFx0XHRcdFx0J2Nkcy0tZGF0ZS1waWNrZXItaW5wdXRfX3dyYXBwZXItLWludmFsaWQnOiBpbnZhbGlkLFxuXHRcdFx0XHRcdFx0XHRcdCdjZHMtLWRhdGUtcGlja2VyLWlucHV0X193cmFwcGVyLS13YXJuJzogd2FyblxuXHRcdFx0XHRcdFx0XHR9XCI+XG5cdFx0XHRcdFx0XHRcdDxzcGFuPlxuXHRcdFx0XHRcdFx0XHRcdDxpbnB1dFxuXHRcdFx0XHRcdFx0XHRcdFx0I2lucHV0XG5cdFx0XHRcdFx0XHRcdFx0XHRhdXRvY29tcGxldGU9XCJvZmZcIlxuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cInRleHRcIlxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJjZHMtLWRhdGUtcGlja2VyX19pbnB1dFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRbbmdDbGFzc109XCJ7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCdjZHMtLWRhdGUtcGlja2VyX19pbnB1dC0tc20nOiBzaXplID09PSAnc20nLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQnY2RzLS1kYXRlLXBpY2tlcl9faW5wdXQtLW1kJzogc2l6ZSA9PT0gJ21kJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0J2Nkcy0tZGF0ZS1waWNrZXJfX2lucHV0LS1sZyc6IHNpemUgPT09ICdsZydcblx0XHRcdFx0XHRcdFx0XHRcdH1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0W2F0dHIuZGF0YS1pbnZhbGlkXT1cImludmFsaWQgPyB0cnVlIDogdW5kZWZpbmVkXCJcblx0XHRcdFx0XHRcdFx0XHRcdFt2YWx1ZV09XCJ2YWx1ZVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRbcGF0dGVybl09XCJwYXR0ZXJuXCJcblx0XHRcdFx0XHRcdFx0XHRcdFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG5cdFx0XHRcdFx0XHRcdFx0XHRbaWRdPSBcImlkXCJcblx0XHRcdFx0XHRcdFx0XHRcdFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuXHRcdFx0XHRcdFx0XHRcdFx0KGNoYW5nZSk9XCJvbkNoYW5nZSgkZXZlbnQpXCIvPlxuXHRcdFx0XHRcdFx0XHRcdFx0QGlmICh0eXBlICE9PSAnc2ltcGxlJyAmJiAhd2FybiAmJiAhaW52YWxpZCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8c3ZnXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2RzSWNvbj1cImNhbGVuZGFyXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzaXplPVwiMTZcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPVwiY2RzLS1kYXRlLXBpY2tlcl9faWNvblwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3N2Zz5cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdEBpZiAoaW52YWxpZCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8c3ZnXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJjZHMtLWRhdGUtcGlja2VyX19pY29uIGNkcy0tZGF0ZS1waWNrZXJfX2ljb24tLWludmFsaWRcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNkc0ljb249XCJ3YXJuaW5nLS1maWxsZWRcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNpemU9XCIxNlwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3N2Zz5cblx0XHRcdFx0XHRcdFx0XHRcdH0gQGVsc2UgaWYgKHdhcm4pIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0PHN2Z1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNkc0ljb249XCJ3YXJuaW5nLS1hbHQtLWZpbGxlZFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2l6ZT1cIjE2XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cImNkcy0tZGF0ZS1waWNrZXJfX2ljb24gY2RzLS1kYXRlLXBpY2tlcl9faWNvbi0td2FyblwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3N2Zz5cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0QGlmIChpbnZhbGlkKSB7XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiY2RzLS1mb3JtLXJlcXVpcmVtZW50XCI+XG5cdFx0XHRcdFx0XHRcdEBpZiAoaXNUZW1wbGF0ZShpbnZhbGlkVGV4dCkpIHtcblx0XHRcdFx0XHRcdFx0XHQ8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiaW52YWxpZFRleHRcIiAvPlxuXHRcdFx0XHRcdFx0XHR9IEBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHR7e2ludmFsaWRUZXh0fX1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0fSBAZWxzZSBpZiAod2Fybikge1xuXHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImNkcy0tZm9ybS1yZXF1aXJlbWVudFwiPlxuXHRcdFx0XHRcdFx0XHRAaWYgKGlzVGVtcGxhdGUod2FyblRleHQpKSB7XG5cdFx0XHRcdFx0XHRcdFx0PG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIndhcm5UZXh0XCIgLz5cblx0XHRcdFx0XHRcdFx0fSBAZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0e3t3YXJuVGV4dH19XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdH0gQGVsc2UgaWYoaGVscGVyVGV4dCkge1xuXHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRjbGFzcz1cImNkcy0tZm9ybV9faGVscGVyLXRleHRcIlxuXHRcdFx0XHRcdFx0XHRbbmdDbGFzc109XCJ7J2Nkcy0tZm9ybV9faGVscGVyLXRleHQtLWRpc2FibGVkJzogZGlzYWJsZWR9XCI+XG5cdFx0XHRcdFx0XHRcdEBpZiAoaXNUZW1wbGF0ZShoZWxwZXJUZXh0KSkge1xuXHRcdFx0XHRcdFx0XHRcdDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJoZWxwZXJUZXh0XCIgLz5cblx0XHRcdFx0XHRcdFx0fSBAZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0e3toZWxwZXJUZXh0fX1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdDwvZGl2PlxuXHRgLFxuXHRwcm92aWRlcnM6IFtcblx0XHR7XG5cdFx0XHRwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcblx0XHRcdHVzZUV4aXN0aW5nOiBEYXRlUGlja2VySW5wdXQsXG5cdFx0XHRtdWx0aTogdHJ1ZVxuXHRcdH1cblx0XVxufSlcbmV4cG9ydCBjbGFzcyBEYXRlUGlja2VySW5wdXQge1xuXHRwcml2YXRlIHN0YXRpYyBkYXRlUGlja2VyQ291bnQgPSAwO1xuXHQvKipcblx0ICogU2VsZWN0IGEgY2FsZW5kYXIgdHlwZSBmb3IgdGhlIGBtb2RlbGAuXG5cdCAqIEludGVybmFsIHB1cnBvc2VzIG9ubHkuXG5cdCAqL1xuXHRASW5wdXQoKSB0eXBlOiBcInNpbXBsZVwiIHwgXCJzaW5nbGVcIiB8IFwicmFuZ2VcIiA9IFwic2ltcGxlXCI7XG5cblx0QElucHV0KCkgaWQgPSBgZGF0ZXBpY2tlci0ke0RhdGVQaWNrZXJJbnB1dC5kYXRlUGlja2VyQ291bnQrK31gO1xuXG5cdEBJbnB1dCgpIGhhc0ljb24gPSBmYWxzZTtcblxuXHRASW5wdXQoKSBsYWJlbDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PjtcblxuXHRASW5wdXQoKSBwbGFjZWhvbGRlciA9IFwibW0vZGQveXl5eVwiO1xuXG5cdEBJbnB1dCgpIHBhdHRlcm4gPSBcIl5cXFxcZHsxLDJ9L1xcXFxkezEsMn0vXFxcXGR7NH0kXCI7XG5cblx0QE91dHB1dCgpIHZhbHVlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuXHQvKipcblx0ICogQGRlcHJlY2F0ZWQgc2luY2UgdjUgLSBVc2UgYGNkc0xheWVyYCBkaXJlY3RpdmUgaW5zdGVhZFxuXHQgKiBTZXQgdG8gYFwibGlnaHRcImAgdG8gYXBwbHkgdGhlIGxpZ2h0IHN0eWxlXG5cdCAqL1xuXHRASW5wdXQoKSB0aGVtZTogXCJsaWdodFwiIHwgXCJkYXJrXCIgPSBcImRhcmtcIjtcblxuXHRASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuXG5cdEBJbnB1dCgpIHJlYWRvbmx5ID0gZmFsc2U7XG5cdC8qKlxuXHQgKiBTZXQgdG8gYHRydWVgIGZvciBpbnZhbGlkIHN0YXRlLlxuXHQgKi9cblx0QElucHV0KCkgaW52YWxpZCA9IGZhbHNlO1xuXHQvKipcblx0ICogVmFsdWUgZGlzcGxheWVkIGlmIGRyb3Bkb3duIGlzIGluIGludmFsaWQgc3RhdGUuXG5cdCAqL1xuXHRASW5wdXQoKSBpbnZhbGlkVGV4dDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55Pjtcblx0LyoqXG5cdCAgKiBTZXQgdG8gYHRydWVgIHRvIHNob3cgYSB3YXJuaW5nIChjb250ZW50cyBzZXQgYnkgd2FyblRleHQpXG5cdCAgKi9cblx0QElucHV0KCkgd2FybiA9IGZhbHNlO1xuXHQvKipcblx0ICogU2V0cyB0aGUgd2FybmluZyB0ZXh0XG5cdCAqL1xuXHRASW5wdXQoKSB3YXJuVGV4dDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PjtcblxuXHQvKipcblx0ICogU2V0cyB0aGUgb3B0aW9uYWwgaGVscGVyIHRleHQuXG5cdCAqL1xuXHRASW5wdXQoKSBoZWxwZXJUZXh0OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+O1xuXG5cdEBJbnB1dCgpIHNrZWxldG9uID0gZmFsc2U7XG5cblx0QElucHV0KCkgdmFsdWUgPSBcIlwiO1xuXG5cdEBJbnB1dCgpIHNpemU6IFwic21cIiB8IFwibWRcIiB8IFwibGdcIiA9IFwibWRcIjtcblxuXHRAVmlld0NoaWxkKFwiaW5wdXRcIikgaW5wdXQ6IEVsZW1lbnRSZWY7XG5cblx0Y29uc3RydWN0b3IocHJvdGVjdGVkIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHsgfVxuXG5cdG9uQ2hhbmdlKGV2ZW50KSB7XG5cdFx0dGhpcy52YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcblx0XHR0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSk7XG5cdFx0dGhpcy5wcm9wYWdhdGVDaGFuZ2UodGhpcy52YWx1ZSk7XG5cdFx0dGhpcy5vblRvdWNoZWQoKTtcblx0fVxuXG5cdHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpIHtcblx0XHR0aGlzLnZhbHVlID0gdmFsdWU7XG5cdH1cblxuXHRwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KSB7XG5cdFx0dGhpcy5wcm9wYWdhdGVDaGFuZ2UgPSBmbjtcblx0fVxuXG5cdHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KSB7XG5cdFx0dGhpcy5vblRvdWNoZWQgPSBmbjtcblx0fVxuXG5cdG9uVG91Y2hlZDogKCkgPT4gYW55ID0gKCkgPT4geyB9O1xuXG5cdHByb3BhZ2F0ZUNoYW5nZSA9IChfOiBhbnkpID0+IHsgfTtcblxuXHRwdWJsaWMgaXNUZW1wbGF0ZSh2YWx1ZSkge1xuXHRcdHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmO1xuXHR9XG59XG4iXX0=
334
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGF0ZXBpY2tlci1pbnB1dC9kYXRlcGlja2VyLWlucHV0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUVaLFdBQVcsRUFDWCxTQUFTLEVBQ1QsdUJBQXVCLEVBQ3ZCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7O0FBd0huRCxNQUFNLE9BQU8sZUFBZTthQUNaLG9CQUFlLEdBQUcsQ0FBQyxBQUFKLENBQUs7SUEwRG5DLFlBQXNCLFVBQXNCO1FBQXRCLGVBQVUsR0FBVixVQUFVLENBQVk7UUF6RDVDOzs7V0FHRztRQUNNLFNBQUksR0FBa0MsUUFBUSxDQUFDO1FBRS9DLE9BQUUsR0FBRyxjQUFjLGVBQWUsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDO1FBRXZELFlBQU8sR0FBRyxLQUFLLENBQUM7UUFJaEIsZ0JBQVcsR0FBRyxZQUFZLENBQUM7UUFFM0IsWUFBTyxHQUFHLDRCQUE0QixDQUFDO1FBRXRDLGdCQUFXLEdBQXlCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFakU7OztXQUdHO1FBQ00sVUFBSyxHQUFxQixNQUFNLENBQUM7UUFFakMsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVqQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQzFCOztXQUVHO1FBQ00sWUFBTyxHQUFHLEtBQUssQ0FBQztRQUt6Qjs7WUFFSTtRQUNLLFNBQUksR0FBRyxLQUFLLENBQUM7UUFXYixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRWpCLFVBQUssR0FBRyxFQUFFLENBQUM7UUFFWCxTQUFJLEdBQXVCLElBQUksQ0FBQztRQXlCekMsY0FBUyxHQUFjLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUVqQyxvQkFBZSxHQUFHLENBQUMsQ0FBTSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7SUF2QmMsQ0FBQztJQUVqRCxRQUFRLENBQUMsS0FBSztRQUNiLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDaEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRU0sVUFBVSxDQUFDLEtBQVU7UUFDM0IsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUVNLGdCQUFnQixDQUFDLEVBQU87UUFDOUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVNLGlCQUFpQixDQUFDLEVBQU87UUFDL0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQU1NLFVBQVUsQ0FBQyxLQUFLO1FBQ3RCLE9BQU8sS0FBSyxZQUFZLFdBQVcsQ0FBQztJQUNyQyxDQUFDOytHQXRGVyxlQUFlO21HQUFmLGVBQWUsc2NBVGhCO1lBQ1Y7Z0JBQ0MsT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsV0FBVyxFQUFFLGVBQWU7Z0JBQzVCLEtBQUssRUFBRSxJQUFJO2FBQ1g7U0FDRCwwSEFqSFM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUEwR1Q7OzRGQVVXLGVBQWU7a0JBdEgzQixTQUFTO21CQUFDO29CQUNWLFFBQVEsRUFBRSw4Q0FBOEM7b0JBQ3hELFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQTBHVDtvQkFDRCxTQUFTLEVBQUU7d0JBQ1Y7NEJBQ0MsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxpQkFBaUI7NEJBQzVCLEtBQUssRUFBRSxJQUFJO3lCQUNYO3FCQUNEO29CQUNELGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUMvQzsrRUFPUyxJQUFJO3NCQUFaLEtBQUs7Z0JBRUcsRUFBRTtzQkFBVixLQUFLO2dCQUVHLE9BQU87c0JBQWYsS0FBSztnQkFFRyxLQUFLO3NCQUFiLEtBQUs7Z0JBRUcsV0FBVztzQkFBbkIsS0FBSztnQkFFRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRUksV0FBVztzQkFBcEIsTUFBTTtnQkFNRSxLQUFLO3NCQUFiLEtBQUs7Z0JBRUcsUUFBUTtzQkFBaEIsS0FBSztnQkFFRyxRQUFRO3NCQUFoQixLQUFLO2dCQUlHLE9BQU87c0JBQWYsS0FBSztnQkFJRyxXQUFXO3NCQUFuQixLQUFLO2dCQUlHLElBQUk7c0JBQVosS0FBSztnQkFJRyxRQUFRO3NCQUFoQixLQUFLO2dCQUtHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUcsUUFBUTtzQkFBaEIsS0FBSztnQkFFRyxLQUFLO3NCQUFiLEtBQUs7Z0JBRUcsSUFBSTtzQkFBWixLQUFLO2dCQUVjLEtBQUs7c0JBQXhCLFNBQVM7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdENvbXBvbmVudCxcblx0SW5wdXQsXG5cdE91dHB1dCxcblx0RXZlbnRFbWl0dGVyLFxuXHRFbGVtZW50UmVmLFxuXHRUZW1wbGF0ZVJlZixcblx0Vmlld0NoaWxkLFxuXHRDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneVxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiBcImNkcy1kYXRlLXBpY2tlci1pbnB1dCwgaWJtLWRhdGUtcGlja2VyLWlucHV0XCIsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PGRpdiBjbGFzcz1cImNkcy0tZm9ybS1pdGVtXCI+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwiY2RzLS1kYXRlLXBpY2tlclwiXG5cdFx0XHRcdFtuZ0NsYXNzXT1cIntcblx0XHRcdFx0XHQnY2RzLS1kYXRlLXBpY2tlci0tc2ltcGxlJyA6IHR5cGUgPT09ICdzaW1wbGUnLFxuXHRcdFx0XHRcdCdjZHMtLWRhdGUtcGlja2VyLS1zaW5nbGUnIDogdHlwZSA9PT0gJ3NpbmdsZScsXG5cdFx0XHRcdFx0J2Nkcy0tZGF0ZS1waWNrZXItLXJhbmdlJyA6IHR5cGUgPT09ICdyYW5nZScsXG5cdFx0XHRcdFx0J2Nkcy0tZGF0ZS1waWNrZXItLWxpZ2h0JyA6IHRoZW1lID09PSAnbGlnaHQnLFxuXHRcdFx0XHRcdCdjZHMtLXNrZWxldG9uJyA6IHNrZWxldG9uXG5cdFx0XHRcdH1cIj5cblx0XHRcdFx0PGRpdiBjbGFzcz1cImNkcy0tZGF0ZS1waWNrZXItY29udGFpbmVyXCI+XG5cdFx0XHRcdFx0PCEtLSBTa2VsZXRvbiBzdHJ1Y3R1cmUgLS0+XG5cdFx0XHRcdFx0QGlmIChza2VsZXRvbikge1xuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJjZHMtLWxhYmVsIGNkcy0tc2tlbGV0b25cIj48L3NwYW4+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiY2RzLS1kYXRlLXBpY2tlcl9faW5wdXQgY2RzLS1za2VsZXRvblwiPjwvZGl2PlxuXHRcdFx0XHRcdH0gQGVsc2Uge1xuXHRcdFx0XHRcdFx0QGlmIChsYWJlbCkge1xuXHRcdFx0XHRcdFx0XHQ8bGFiZWxcblx0XHRcdFx0XHRcdFx0XHRbZm9yXT1cImlkXCJcblx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cImNkcy0tbGFiZWxcIlxuXHRcdFx0XHRcdFx0XHRcdFtuZ0NsYXNzXT1cInsnY2RzLS1sYWJlbC0tZGlzYWJsZWQnOiBkaXNhYmxlZH1cIj5cblx0XHRcdFx0XHRcdFx0XHRAaWYgKGlzVGVtcGxhdGUobGFiZWwpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHQ8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwibGFiZWxcIiAvPlxuXHRcdFx0XHRcdFx0XHRcdH0gQGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0e3tsYWJlbH19XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHQ8L2xhYmVsPlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImNkcy0tZGF0ZS1waWNrZXItaW5wdXRfX3dyYXBwZXJcIlxuXHRcdFx0XHRcdFx0XHRbbmdDbGFzc109XCJ7XG5cdFx0XHRcdFx0XHRcdFx0J2Nkcy0tZGF0ZS1waWNrZXItaW5wdXRfX3dyYXBwZXItLWludmFsaWQnOiBpbnZhbGlkLFxuXHRcdFx0XHRcdFx0XHRcdCdjZHMtLWRhdGUtcGlja2VyLWlucHV0X193cmFwcGVyLS13YXJuJzogd2FyblxuXHRcdFx0XHRcdFx0XHR9XCI+XG5cdFx0XHRcdFx0XHRcdDxzcGFuPlxuXHRcdFx0XHRcdFx0XHRcdDxpbnB1dFxuXHRcdFx0XHRcdFx0XHRcdFx0I2lucHV0XG5cdFx0XHRcdFx0XHRcdFx0XHRhdXRvY29tcGxldGU9XCJvZmZcIlxuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cInRleHRcIlxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJjZHMtLWRhdGUtcGlja2VyX19pbnB1dFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRbbmdDbGFzc109XCJ7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCdjZHMtLWRhdGUtcGlja2VyX19pbnB1dC0tc20nOiBzaXplID09PSAnc20nLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQnY2RzLS1kYXRlLXBpY2tlcl9faW5wdXQtLW1kJzogc2l6ZSA9PT0gJ21kJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0J2Nkcy0tZGF0ZS1waWNrZXJfX2lucHV0LS1sZyc6IHNpemUgPT09ICdsZydcblx0XHRcdFx0XHRcdFx0XHRcdH1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0W2F0dHIuZGF0YS1pbnZhbGlkXT1cImludmFsaWQgPyB0cnVlIDogdW5kZWZpbmVkXCJcblx0XHRcdFx0XHRcdFx0XHRcdFt2YWx1ZV09XCJ2YWx1ZVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRbcGF0dGVybl09XCJwYXR0ZXJuXCJcblx0XHRcdFx0XHRcdFx0XHRcdFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG5cdFx0XHRcdFx0XHRcdFx0XHRbaWRdPSBcImlkXCJcblx0XHRcdFx0XHRcdFx0XHRcdFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuXHRcdFx0XHRcdFx0XHRcdFx0KGNoYW5nZSk9XCJvbkNoYW5nZSgkZXZlbnQpXCIvPlxuXHRcdFx0XHRcdFx0XHRcdFx0QGlmICh0eXBlICE9PSAnc2ltcGxlJyAmJiAhd2FybiAmJiAhaW52YWxpZCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8c3ZnXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2RzSWNvbj1cImNhbGVuZGFyXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzaXplPVwiMTZcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPVwiY2RzLS1kYXRlLXBpY2tlcl9faWNvblwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3N2Zz5cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdEBpZiAoaW52YWxpZCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8c3ZnXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJjZHMtLWRhdGUtcGlja2VyX19pY29uIGNkcy0tZGF0ZS1waWNrZXJfX2ljb24tLWludmFsaWRcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNkc0ljb249XCJ3YXJuaW5nLS1maWxsZWRcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNpemU9XCIxNlwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3N2Zz5cblx0XHRcdFx0XHRcdFx0XHRcdH0gQGVsc2UgaWYgKHdhcm4pIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0PHN2Z1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNkc0ljb249XCJ3YXJuaW5nLS1hbHQtLWZpbGxlZFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2l6ZT1cIjE2XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cImNkcy0tZGF0ZS1waWNrZXJfX2ljb24gY2RzLS1kYXRlLXBpY2tlcl9faWNvbi0td2FyblwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3N2Zz5cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0QGlmIChpbnZhbGlkKSB7XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiY2RzLS1mb3JtLXJlcXVpcmVtZW50XCI+XG5cdFx0XHRcdFx0XHRcdEBpZiAoaXNUZW1wbGF0ZShpbnZhbGlkVGV4dCkpIHtcblx0XHRcdFx0XHRcdFx0XHQ8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiaW52YWxpZFRleHRcIiAvPlxuXHRcdFx0XHRcdFx0XHR9IEBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHR7e2ludmFsaWRUZXh0fX1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0fSBAZWxzZSBpZiAod2Fybikge1xuXHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImNkcy0tZm9ybS1yZXF1aXJlbWVudFwiPlxuXHRcdFx0XHRcdFx0XHRAaWYgKGlzVGVtcGxhdGUod2FyblRleHQpKSB7XG5cdFx0XHRcdFx0XHRcdFx0PG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIndhcm5UZXh0XCIgLz5cblx0XHRcdFx0XHRcdFx0fSBAZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0e3t3YXJuVGV4dH19XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdH0gQGVsc2UgaWYoaGVscGVyVGV4dCkge1xuXHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRjbGFzcz1cImNkcy0tZm9ybV9faGVscGVyLXRleHRcIlxuXHRcdFx0XHRcdFx0XHRbbmdDbGFzc109XCJ7J2Nkcy0tZm9ybV9faGVscGVyLXRleHQtLWRpc2FibGVkJzogZGlzYWJsZWR9XCI+XG5cdFx0XHRcdFx0XHRcdEBpZiAoaXNUZW1wbGF0ZShoZWxwZXJUZXh0KSkge1xuXHRcdFx0XHRcdFx0XHRcdDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJoZWxwZXJUZXh0XCIgLz5cblx0XHRcdFx0XHRcdFx0fSBAZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0e3toZWxwZXJUZXh0fX1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdDwvZGl2PlxuXHRgLFxuXHRwcm92aWRlcnM6IFtcblx0XHR7XG5cdFx0XHRwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcblx0XHRcdHVzZUV4aXN0aW5nOiBEYXRlUGlja2VySW5wdXQsXG5cdFx0XHRtdWx0aTogdHJ1ZVxuXHRcdH1cblx0XSxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgRGF0ZVBpY2tlcklucHV0IHtcblx0cHJpdmF0ZSBzdGF0aWMgZGF0ZVBpY2tlckNvdW50ID0gMDtcblx0LyoqXG5cdCAqIFNlbGVjdCBhIGNhbGVuZGFyIHR5cGUgZm9yIHRoZSBgbW9kZWxgLlxuXHQgKiBJbnRlcm5hbCBwdXJwb3NlcyBvbmx5LlxuXHQgKi9cblx0QElucHV0KCkgdHlwZTogXCJzaW1wbGVcIiB8IFwic2luZ2xlXCIgfCBcInJhbmdlXCIgPSBcInNpbXBsZVwiO1xuXG5cdEBJbnB1dCgpIGlkID0gYGRhdGVwaWNrZXItJHtEYXRlUGlja2VySW5wdXQuZGF0ZVBpY2tlckNvdW50Kyt9YDtcblxuXHRASW5wdXQoKSBoYXNJY29uID0gZmFsc2U7XG5cblx0QElucHV0KCkgbGFiZWw6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT47XG5cblx0QElucHV0KCkgcGxhY2Vob2xkZXIgPSBcIm1tL2RkL3l5eXlcIjtcblxuXHRASW5wdXQoKSBwYXR0ZXJuID0gXCJeXFxcXGR7MSwyfS9cXFxcZHsxLDJ9L1xcXFxkezR9JFwiO1xuXG5cdEBPdXRwdXQoKSB2YWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblx0LyoqXG5cdCAqIEBkZXByZWNhdGVkIHNpbmNlIHY1IC0gVXNlIGBjZHNMYXllcmAgZGlyZWN0aXZlIGluc3RlYWRcblx0ICogU2V0IHRvIGBcImxpZ2h0XCJgIHRvIGFwcGx5IHRoZSBsaWdodCBzdHlsZVxuXHQgKi9cblx0QElucHV0KCkgdGhlbWU6IFwibGlnaHRcIiB8IFwiZGFya1wiID0gXCJkYXJrXCI7XG5cblx0QElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcblxuXHRASW5wdXQoKSByZWFkb25seSA9IGZhbHNlO1xuXHQvKipcblx0ICogU2V0IHRvIGB0cnVlYCBmb3IgaW52YWxpZCBzdGF0ZS5cblx0ICovXG5cdEBJbnB1dCgpIGludmFsaWQgPSBmYWxzZTtcblx0LyoqXG5cdCAqIFZhbHVlIGRpc3BsYXllZCBpZiBkcm9wZG93biBpcyBpbiBpbnZhbGlkIHN0YXRlLlxuXHQgKi9cblx0QElucHV0KCkgaW52YWxpZFRleHQ6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT47XG5cdC8qKlxuXHQgICogU2V0IHRvIGB0cnVlYCB0byBzaG93IGEgd2FybmluZyAoY29udGVudHMgc2V0IGJ5IHdhcm5UZXh0KVxuXHQgICovXG5cdEBJbnB1dCgpIHdhcm4gPSBmYWxzZTtcblx0LyoqXG5cdCAqIFNldHMgdGhlIHdhcm5pbmcgdGV4dFxuXHQgKi9cblx0QElucHV0KCkgd2FyblRleHQ6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT47XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIG9wdGlvbmFsIGhlbHBlciB0ZXh0LlxuXHQgKi9cblx0QElucHV0KCkgaGVscGVyVGV4dDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PjtcblxuXHRASW5wdXQoKSBza2VsZXRvbiA9IGZhbHNlO1xuXG5cdEBJbnB1dCgpIHZhbHVlID0gXCJcIjtcblxuXHRASW5wdXQoKSBzaXplOiBcInNtXCIgfCBcIm1kXCIgfCBcImxnXCIgPSBcIm1kXCI7XG5cblx0QFZpZXdDaGlsZChcImlucHV0XCIpIGlucHV0OiBFbGVtZW50UmVmO1xuXG5cdGNvbnN0cnVjdG9yKHByb3RlY3RlZCBlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7IH1cblxuXHRvbkNoYW5nZShldmVudCkge1xuXHRcdHRoaXMudmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XG5cdFx0dGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpO1xuXHRcdHRoaXMucHJvcGFnYXRlQ2hhbmdlKHRoaXMudmFsdWUpO1xuXHRcdHRoaXMub25Ub3VjaGVkKCk7XG5cdH1cblxuXHRwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KSB7XG5cdFx0dGhpcy52YWx1ZSA9IHZhbHVlO1xuXHR9XG5cblx0cHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSkge1xuXHRcdHRoaXMucHJvcGFnYXRlQ2hhbmdlID0gZm47XG5cdH1cblxuXHRwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSkge1xuXHRcdHRoaXMub25Ub3VjaGVkID0gZm47XG5cdH1cblxuXHRvblRvdWNoZWQ6ICgpID0+IGFueSA9ICgpID0+IHsgfTtcblxuXHRwcm9wYWdhdGVDaGFuZ2UgPSAoXzogYW55KSA9PiB7IH07XG5cblx0cHVibGljIGlzVGVtcGxhdGUodmFsdWUpIHtcblx0XHRyZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZjtcblx0fVxufVxuIl19
@@ -1017,4 +1017,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImpo
1017
1017
  type: HostListener,
1018
1018
  args: ["keydown", ["$event"]]
1019
1019
  }] } });
1020
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Ryb3Bkb3duL2Ryb3Bkb3duLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUVaLFlBQVksRUFFWixTQUFTLEVBRVQsWUFBWSxFQUVaLFdBQVcsRUFDWCxXQUFXLEVBRVgsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUF3QixNQUFNLGdCQUFnQixDQUFDO0FBRXpFLHlFQUF5RTtBQUN6RSxPQUFPLEVBRU4sRUFBRSxFQUNGLFlBQVksRUFDWixNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBSXRFLE9BQU8sRUFBa0Isb0JBQW9CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN2RixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7Ozs7OztBQUV2RTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHO0FBZ0tILE1BQU0sT0FBTyxRQUFRO2FBQ2Isa0JBQWEsR0FBRyxDQUFDLEFBQUosQ0FBSztJQUN6QixJQUFpRSxpQkFBaUI7UUFDakYsT0FBTyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDbkMsQ0FBQztJQUVELElBQStELGVBQWU7UUFDN0UsT0FBTyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzRCxDQUFDO0lBRUQsSUFBYyxZQUFZO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBYyxZQUFZLENBQUMsR0FBVTtRQUNwQyxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLENB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RTtnQkFFRSxTQUFTO3NCQUFyRCxXQUFXO3VCQUFDLDhCQUE4QjtnQkFFRSxnQkFBZ0I7c0JBQTVELFdBQVc7dUJBQUMsOEJBQThCO2dCQUlrQixLQUFLO3NCQUFqRSxXQUFXO3VCQUFDLHFDQUFxQzs7c0JBQUcsS0FBSztnQkFtTTFELFNBQVM7c0JBRFIsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRDb21wb25lbnQsXG5cdElucHV0LFxuXHRPdXRwdXQsXG5cdEV2ZW50RW1pdHRlcixcblx0RWxlbWVudFJlZixcblx0Q29udGVudENoaWxkLFxuXHRPbkluaXQsXG5cdFZpZXdDaGlsZCxcblx0QWZ0ZXJDb250ZW50SW5pdCxcblx0SG9zdExpc3RlbmVyLFxuXHRPbkRlc3Ryb3ksXG5cdEhvc3RCaW5kaW5nLFxuXHRUZW1wbGF0ZVJlZixcblx0QWZ0ZXJWaWV3SW5pdFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5cbi8vIE9ic2VydmFibGUgaW1wb3J0IGlzIHJlcXVpcmVkIGhlcmUgc28gdHlwZXNjcmlwdCBjYW4gY29tcGlsZSBjb3JyZWN0bHlcbmltcG9ydCB7XG5cdE9ic2VydmFibGUsXG5cdG9mLFxuXHRTdWJzY3JpcHRpb25cbn0gZnJvbSBcInJ4anNcIjtcblxuaW1wb3J0IHsgQWJzdHJhY3REcm9wZG93blZpZXcgfSBmcm9tIFwiLi9hYnN0cmFjdC1kcm9wZG93bi12aWV3LmNsYXNzXCI7XG5pbXBvcnQgeyBJMThuIH0gZnJvbSBcImNhcmJvbi1jb21wb25lbnRzLWFuZ3VsYXIvaTE4blwiO1xuaW1wb3J0IHsgTGlzdEl0ZW0gfSBmcm9tIFwiLi9saXN0LWl0ZW0uaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBEcm9wZG93blNlcnZpY2UgfSBmcm9tIFwiLi9kcm9wZG93bi5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBFbGVtZW50U2VydmljZSwgZ2V0U2Nyb2xsYWJsZVBhcmVudHMgfSBmcm9tIFwiY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhci91dGlsc1wiO1xuaW1wb3J0IHsgaGFzU2Nyb2xsYWJsZVBhcmVudHMgfSBmcm9tIFwiY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhci91dGlsc1wiO1xuXG4vKipcbiAqIERyb3AtZG93biBsaXN0cyBlbmFibGUgdXNlcnMgdG8gc2VsZWN0IG9uZSBvciBtb3JlIGl0ZW1zIGZyb20gYSBsaXN0LlxuICpcbiAqICMjIyMgT3BlbmluZyBiZWhhdmlvci9MaXN0IERPTSBwbGFjZW1lbnRcbiAqIEJ5IGRlZmF1bHQgdGhlIGRyb3Bkb3duIHdpbGwgdHJ5IHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3QgcGxhY2VtZW50IGZvciB0aGUgZHJvcGRvd24gbGlzdC5cbiAqXG4gKiBJZiBpdCdzIG5vdCBjb250YWluZWQgd2l0aGluIGFueSBzY3JvbGxpbmcgZWxlbWVudHMsIGl0IHdpbGwgb3BlbiBpbmxpbmUsIGlmIGl0IF9pc19cbiAqIGNvbnRhaW5lZCB3aXRoaW4gYSBzY3JvbGxpbmcgY29udGFpbmVyIGl0IHdpbGwgdHJ5IHRvIG9wZW4gaW4gdGhlIGJvZHksIG9yIGFuIGBjZHMtcGxhY2Vob2xkZXJgLlxuICpcbiAqIFRvIGNvbnRyb2wgdGhpcyBiZWhhdmlvciB5b3UgY2FuIHVzZSB0aGUgYGFwcGVuZElubGluZWAgaW5wdXQ6XG4gKiAtIGBbYXBwZW5kSW5saW5lXT1cIm51bGxcImAgaXMgdGhlIGRlZmF1bHQgKGF1dG8gZGV0ZWN0aW9uKVxuICogLSBgW2FwcGVuZElubGluZV09XCJmYWxzZVwiYCB3aWxsIGFsd2F5cyBhcHBlbmQgdG8gdGhlIGJvZHkvYGNkcy1wbGFjZWhvbGRlcmBcbiAqIC0gYFthcHBlbmRJbmxpbmVdPVwidHJ1ZVwiYCB3aWxsIGFsd2F5cyBhcHBlbmQgaW5saW5lIChuZXh0IHRvIHRoZSBkcm9wZG93biBidXR0b24pXG4gKlxuICogR2V0IHN0YXJ0ZWQgd2l0aCBpbXBvcnRpbmcgdGhlIG1vZHVsZTpcbiAqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBEcm9wZG93bk1vZHVsZSB9IGZyb20gJ2NhcmJvbi1jb21wb25lbnRzLWFuZ3VsYXInO1xuICogYGBgXG4gKlxuICogW1NlZSBkZW1vXSguLi8uLi8/cGF0aD0vc3RvcnkvY29tcG9uZW50cy1kcm9wZG93bi0tYmFzaWMpXG4gKi9cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogXCJjZHMtZHJvcGRvd24sIGlibS1kcm9wZG93blwiLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdEBpZiAobGFiZWwgJiYgIXNrZWxldG9uKSB7XG5cdFx0XHQ8bGFiZWxcblx0XHRcdFtmb3JdPVwiaWRcIlxuXHRcdFx0Y2xhc3M9XCJjZHMtLWxhYmVsXCJcblx0XHRcdFtuZ0NsYXNzXT1cIntcblx0XHRcdFx0J2Nkcy0tbGFiZWwtLWRpc2FibGVkJzogZGlzYWJsZWQsXG5cdFx0XHRcdCdjZHMtLXZpc3VhbGx5LWhpZGRlbic6IGhpZGVMYWJlbFxuXHRcdFx0fVwiPlxuXHRcdFx0XHRAaWYgKGlzVGVtcGxhdGUobGFiZWwpKSB7XG5cdFx0XHRcdFx0PG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxhYmVsXCIgLz5cblx0XHRcdFx0fSBAZWxzZSB7XG5cdFx0XHRcdFx0e3tsYWJlbH19XG5cdFx0XHRcdH1cblx0XHRcdDwvbGFiZWw+XG5cdFx0fVxuXHRcdDxkaXZcblx0XHRcdGNsYXNzPVwiY2RzLS1saXN0LWJveFwiXG5cdFx0XHRbbmdDbGFzc109XCJ7XG5cdFx0XHRcdCdjZHMtLWRyb3Bkb3duJzogdHlwZSAhPT0gJ211bHRpJyAmJiAhKHNrZWxldG9uICYmIGZsdWlkKSxcblx0XHRcdFx0J2Nkcy0tbXVsdGlzZWxlY3QnOiB0eXBlID09PSAnbXVsdGknLFxuXHRcdFx0XHQnY2RzLS1tdWx0aS1zZWxlY3QtLXNlbGVjdGVkJzogdHlwZSA9PT0gJ211bHRpJyAmJiBnZXRTZWxlY3RlZENvdW50KCkgPiAwLFxuXHRcdFx0XHQnY2RzLS1kcm9wZG93bi0tbGlnaHQnOiB0aGVtZSA9PT0gJ2xpZ2h0Jyxcblx0XHRcdFx0J2Nkcy0tbGlzdC1ib3gtLWxpZ2h0JzogdGhlbWUgPT09ICdsaWdodCcsXG5cdFx0XHRcdCdjZHMtLWxpc3QtYm94LS1pbmxpbmUnOiBpbmxpbmUsXG5cdFx0XHRcdCdjZHMtLXNrZWxldG9uJzogc2tlbGV0b24sXG5cdFx0XHRcdCdjZHMtLWRyb3Bkb3duLS1kaXNhYmxlZCBjZHMtLWxpc3QtYm94LS1kaXNhYmxlZCc6IGRpc2FibGVkLFxuXHRcdFx0XHQnY2RzLS1kcm9wZG93bi0tcmVhZG9ubHknOiByZWFkb25seSxcblx0XHRcdFx0J2Nkcy0tZHJvcGRvd24tLWludmFsaWQnOiBpbnZhbGlkLFxuXHRcdFx0XHQnY2RzLS1kcm9wZG93bi0td2FybmluZyBjZHMtLWxpc3QtYm94LS13YXJuaW5nJzogd2Fybixcblx0XHRcdFx0J2Nkcy0tZHJvcGRvd24tLXNtIGNkcy0tbGlzdC1ib3gtLXNtJzogc2l6ZSA9PT0gJ3NtJyxcblx0XHRcdFx0J2Nkcy0tZHJvcGRvd24tLW1kIGNkcy0tbGlzdC1ib3gtLW1kJzogc2l6ZSA9PT0gJ21kJyxcblx0XHRcdFx0J2Nkcy0tZHJvcGRvd24tLWxnIGNkcy0tbGlzdC1ib3gtLWxnJzogc2l6ZSA9PT0gJ2xnJyxcblx0XHRcdFx0J2Nkcy0tbGlzdC1ib3gtLWV4cGFuZGVkJzogIW1lbnVJc0Nsb3NlZCxcblx0XHRcdFx0J2Nkcy0tbGlzdC1ib3gtLWludmFsaWQnOiBpbnZhbGlkXG5cdFx0XHR9XCJcblx0XHRcdFthdHRyLmRhdGEtaW52YWxpZF09XCJpbnZhbGlkID8gdHJ1ZSA6IG51bGxcIj5cblx0XHRcdEBpZiAoc2tlbGV0b24gJiYgZmx1aWQpIHtcblx0XHRcdFx0PGRpdiBjbGFzcz1cImNkcy0tbGlzdC1ib3hfX2xhYmVsXCI+PC9kaXY+XG5cdFx0XHR9XG5cdFx0XHQ8YnV0dG9uXG5cdFx0XHRcdCNkcm9wZG93bkJ1dHRvblxuXHRcdFx0XHRbaWRdPVwiaWRcIlxuXHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0Y2xhc3M9XCJjZHMtLWxpc3QtYm94X19maWVsZFwiXG5cdFx0XHRcdFtuZ0NsYXNzXT1cInsnYSc6ICFtZW51SXNDbG9zZWR9XCJcblx0XHRcdFx0W2F0dHIuYXJpYS1leHBhbmRlZF09XCIhbWVudUlzQ2xvc2VkXCJcblx0XHRcdFx0W2F0dHIuYXJpYS1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG5cdFx0XHRcdFthdHRyLmFyaWEtcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuXHRcdFx0XHRhcmlhLWhhc3BvcHVwPVwibGlzdGJveFwiXG5cdFx0XHRcdChjbGljayk9XCJkaXNhYmxlZCB8fCByZWFkb25seSA/ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKSA6IHRvZ2dsZU1lbnUoKVwiXG5cdFx0XHRcdChmb2N1cyk9XCJmbHVpZCA/IGhhbmRsZUZvY3VzKCRldmVudCkgOiBudWxsXCJcblx0XHRcdFx0KGJsdXIpPVwiZmx1aWQgPyBoYW5kbGVGb2N1cygkZXZlbnQpIDogb25CbHVyKClcIlxuXHRcdFx0XHRbYXR0ci5kaXNhYmxlZF09XCJkaXNhYmxlZCA/IHRydWUgOiBudWxsXCI+XG5cdFx0XHRcdEBpZiAodHlwZSA9PT0gJ211bHRpJyAmJiBnZXRTZWxlY3RlZENvdW50KCkgPiAwKSB7XG5cdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0KGNsaWNrKT1cImNsZWFyU2VsZWN0ZWQoKVwiXG5cdFx0XHRcdFx0XHQoa2V5ZG93bi5lbnRlcik9XCJjbGVhclNlbGVjdGVkKClcIlxuXG5cdFx0XHRcdFx0XHRjbGFzcz1cImNkcy0tbGlzdC1ib3hfX3NlbGVjdGlvbiBjZHMtLXRhZy0tZmlsdGVyIGNkcy0tbGlzdC1ib3hfX3NlbGVjdGlvbi0tbXVsdGlcIlxuXHRcdFx0XHRcdFx0dGFiaW5kZXg9XCIwXCJcblx0XHRcdFx0XHRcdFt0aXRsZV09XCJjbGVhclRleHRcIj5cblx0XHRcdFx0XHRcdHt7Z2V0U2VsZWN0ZWRDb3VudCgpfX1cblx0XHRcdFx0XHRcdDxzdmdcblx0XHRcdFx0XHRcdFx0Zm9jdXNhYmxlPVwiZmFsc2VcIlxuXHRcdFx0XHRcdFx0XHRwcmVzZXJ2ZUFzcGVjdFJhdGlvPVwieE1pZFlNaWQgbWVldFwiXG5cdFx0XHRcdFx0XHRcdHN0eWxlPVwid2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTtcIlxuXHRcdFx0XHRcdFx0XHRyb2xlPVwiaW1nXCJcblx0XHRcdFx0XHRcdFx0eG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG5cdFx0XHRcdFx0XHRcdHdpZHRoPVwiMTZcIlxuXHRcdFx0XHRcdFx0XHRoZWlnaHQ9XCIxNlwiXG5cdFx0XHRcdFx0XHRcdHZpZXdCb3g9XCIwIDAgMTYgMTZcIlxuXHRcdFx0XHRcdFx0XHRhcmlhLWhpZGRlbj1cInRydWVcIj5cblx0XHRcdFx0XHRcdFx0PHBhdGggZD1cIk0xMiA0LjdsLS43LS43TDggNy4zIDQuNyA0bC0uNy43TDcuMyA4IDQgMTEuM2wuNy43TDggOC43bDMuMyAzLjMuNy0uN0w4LjcgOHpcIj48L3BhdGg+XG5cdFx0XHRcdFx0XHQ8L3N2Zz5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0fVxuXHRcdFx0XHRAaWYgKGlzUmVuZGVyU3RyaW5nKCkpIHtcblx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImNkcy0tbGlzdC1ib3hfX2xhYmVsXCI+e3tnZXREaXNwbGF5U3RyaW5nVmFsdWUoKSB8IGFzeW5jfX08L3NwYW4+XG5cdFx0XHRcdH0gQGVsc2Uge1xuXHRcdFx0XHRcdDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwiZ2V0UmVuZGVyVGVtcGxhdGVDb250ZXh0KClcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJkaXNwbGF5VmFsdWVcIiAvPlxuXHRcdFx0XHR9XG5cdFx0XHRcdDxzcGFuIGNsYXNzPVwiY2RzLS1saXN0LWJveF9fbWVudS1pY29uXCI+XG5cdFx0XHRcdFx0QGlmICghc2tlbGV0b24pIHtcblx0XHRcdFx0XHRcdDxzdmdcblx0XHRcdFx0XHRcdFx0Y2RzSWNvbj1cImNoZXZyb24tLWRvd25cIlxuXHRcdFx0XHRcdFx0XHRzaXplPVwiMTZcIlxuXHRcdFx0XHRcdFx0XHRbYXR0ci5hcmlhLWxhYmVsXT1cIm1lbnVCdXR0b25MYWJlbFwiXG5cdFx0XHRcdFx0XHRcdFtuZ0NsYXNzXT1cInsnY2RzLS1saXN0LWJveF9fbWVudS1pY29uLS1vcGVuJzogIW1lbnVJc0Nsb3NlZCB9XCI+XG5cdFx0XHRcdFx0XHQ8L3N2Zz5cblx0XHRcdFx0XHR9XG5cdFx0XHRcdDwvc3Bhbj5cblx0XHRcdDwvYnV0dG9uPlxuXHRcdFx0QGlmIChpbnZhbGlkKSB7XG5cdFx0XHRcdDxzdmdcblx0XHRcdFx0XHRjbGFzcz1cImNkcy0tbGlzdC1ib3hfX2ludmFsaWQtaWNvblwiXG5cdFx0XHRcdFx0Y2RzSWNvbj1cIndhcm5pbmctLWZpbGxlZFwiXG5cdFx0XHRcdFx0c2l6ZT1cIjE2XCI+XG5cdFx0XHRcdDwvc3ZnPlxuXHRcdFx0fSBAZWxzZSBpZih3YXJuKSB7XG5cdFx0XHRcdDxzdmdcblx0XHRcdFx0XHRjZHNJY29uPVwid2FybmluZy0tYWx0LS1maWxsZWRcIlxuXHRcdFx0XHRcdHNpemU9XCIxNlwiXG5cdFx0XHRcdFx0Y2xhc3M9XCJjZHMtLWxpc3QtYm94X19pbnZhbGlkLWljb24gY2RzLS1saXN0LWJveF9faW52YWxpZC1pY29uLS13YXJuaW5nXCI+XG5cdFx0XHRcdDwvc3ZnPlxuXHRcdFx0fVxuXHRcdFx0PGRpdlxuXHRcdFx0XHQjZHJvcGRvd25NZW51XG5cdFx0XHRcdFtuZ0NsYXNzXT1cIntcblx0XHRcdFx0XHQnY2RzLS1saXN0LWJveC0tdXAnOiB0aGlzLmRyb3BVcCAhPT0gbnVsbCAmJiB0aGlzLmRyb3BVcCAhPT0gdW5kZWZpbmVkID8gZHJvcFVwIDogX2Ryb3BVcFxuXHRcdFx0XHR9XCI+XG5cdFx0XHRcdEBpZiAoIW1lbnVJc0Nsb3NlZCkge1xuXHRcdFx0XHRcdDxuZy1jb250ZW50IC8+XG5cdFx0XHRcdH1cblx0XHRcdDwvZGl2PlxuXHRcdDwvZGl2PlxuXHRcdEBpZiAoZmx1aWQpIHtcblx0XHRcdDxociBjbGFzcz1cImNkcy0tbGlzdC1ib3hfX2RpdmlkZXJcIiAvPlxuXHRcdH1cblx0XHRAaWYgKGludmFsaWQpIHtcblx0XHRcdDxkaXYgY2xhc3M9XCJjZHMtLWZvcm0tcmVxdWlyZW1lbnRcIj5cblx0XHRcdFx0QGlmIChpc1RlbXBsYXRlKGludmFsaWRUZXh0KSkge1xuXHRcdFx0XHRcdDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJpbnZhbGlkVGV4dFwiIC8+XG5cdFx0XHRcdH0gQGVsc2Uge1xuXHRcdFx0XHRcdHt7IGludmFsaWRUZXh0IH19XG5cdFx0XHRcdH1cblx0XHRcdDwvZGl2PlxuXHRcdH0gQGVsc2UgaWYgKHdhcm4pIHtcblx0XHRcdDxkaXYgY2xhc3M9XCJjZHMtLWZvcm0tcmVxdWlyZW1lbnRcIj5cblx0XHRcdFx0QGlmIChpc1RlbXBsYXRlKHdhcm5UZXh0KSkge1xuXHRcdFx0XHRcdDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJ3YXJuVGV4dFwiIC8+XG5cdFx0XHRcdH0gQGVsc2Uge1xuXHRcdFx0XHRcdHt7d2FyblRleHR9fVxuXHRcdFx0XHR9XG5cdFx0XHQ8L2Rpdj5cblx0XHR9IEBlbHNlIGlmKGhlbHBlclRleHQgJiYgIWZsdWlkKSB7XG5cdFx0XHQ8ZGl2XG5cdFx0XHRcdGNsYXNzPVwiY2RzLS1mb3JtX19oZWxwZXItdGV4dFwiXG5cdFx0XHRcdFtuZ0NsYXNzXT1cIntcblx0XHRcdFx0XHQnY2RzLS1mb3JtX19oZWxwZXItdGV4dC0tZGlzYWJsZWQnOiBkaXNhYmxlZFxuXHRcdFx0XHR9XCI+XG5cdFx0XHRcdEBpZiAoaXNUZW1wbGF0ZShoZWxwZXJUZXh0KSkge1xuXHRcdFx0XHRcdDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJoZWxwZXJUZXh0XCIgLz5cblx0XHRcdFx0fSBAZWxzZSB7XG5cdFx0XHRcdFx0e3toZWxwZXJUZXh0fX1cblx0XHRcdFx0fVxuXHRcdFx0PC9kaXY+XG5cdFx0fVxuXHRgLFxuXHRwcm92aWRlcnM6IFtcblx0XHR7XG5cdFx0XHRwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcblx0XHRcdHVzZUV4aXN0aW5nOiBEcm9wZG93bixcblx0XHRcdG11bHRpOiB0cnVlXG5cdFx0fVxuXHRdXG59KVxuZXhwb3J0IGNsYXNzIERyb3Bkb3duIGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRJbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcblx0c3RhdGljIGRyb3Bkb3duQ291bnQgPSAwO1xuXHRASG9zdEJpbmRpbmcoXCJjbGFzcy5jZHMtLWxpc3QtYm94X193cmFwcGVyLS1mbHVpZC0taW52YWxpZFwiKSBnZXQgZmx1aWRJbnZhbGlkQ2xhc3MoKSB7XG5cdFx0cmV0dXJuIHRoaXMuaW52YWxpZCAmJiB0aGlzLmZsdWlkO1xuXHR9XG5cblx0QEhvc3RCaW5kaW5nKFwiY2xhc3MuY2RzLS1saXN0LWJveF9fd3JhcHBlci0tZmx1aWQtLWZvY3VzXCIpIGdldCBmbHVpZEZvY3VzQ2xhc3MoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZmx1aWQgJiYgdGhpcy5faXNGb2N1c2VkICYmIHRoaXMubWVudUlzQ2xvc2VkO1xuXHR9XG5cblx0cHJvdGVjdGVkIGdldCB3cml0dGVuVmFsdWUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3dyaXR0ZW5WYWx1ZTtcblx0fVxuXG5cdHByb3RlY3RlZCBzZXQgd3JpdHRlblZhbHVlKHZhbDogYW55W10pIHtcblx0XHRpZiAodmFsICYmIHZhbC5sZW5ndGggPT09IDApIHtcblx0XHRcdHRoaXMuY2xlYXJTZWxlY3RlZCgpO1xuXHRcdH1cblx0XHR0aGlzLl93cml0dGVuVmFsdWUgPSB2YWw7XG5cdH1cblxuXHRASW5wdXQoKSBpZCA9IGBkcm9wZG93bi0ke0Ryb3Bkb3duLmRyb3Bkb3duQ291bnQrK31gO1xuXHQvKipcblx0ICogTGFiZWwgZm9yIHRoZSBkcm9wZG93bi5cblx0ICovXG5cdEBJbnB1dCgpIGxhYmVsOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+O1xuXHQvKipcblx0ICogSGlkZSBsYWJlbCB3aGlsZSBrZWVwaW5nIGl0IGFjY2Vzc2libGUgZm9yIHNjcmVlbiByZWFkZXJzXG5cdCAqL1xuXHRASW5wdXQoKSBoaWRlTGFiZWwgPSBmYWxzZTtcblx0LyoqXG5cdCAqIFNldHMgdGhlIG9wdGlvbmFsIGhlbHBlciB0ZXh0LlxuXHQgKi9cblx0QElucHV0KCkgaGVscGVyVGV4dDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55Pjtcblx0LyoqXG5cdCAqIFZhbHVlIGRpc3BsYXllZCBpZiBubyBpdGVtIGlzIHNlbGVjdGVkLlxuXHQgKi9cblx0QElucHV0KCkgcGxhY2Vob2xkZXIgPSBcIlwiO1xuXHQvKipcblx0ICogVGhlIHNlbGVjdGVkIHZhbHVlIGZyb20gdGhlIGBEcm9wZG93bmAuIENhbiBiZSBhIHN0cmluZyBvciB0ZW1wbGF0ZS5cblx0ICovXG5cdEBJbnB1dCgpIGRpc3BsYXlWYWx1ZTogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PiA9IFwiXCI7XG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBvcHRpb25hbCBjbGVhciBidXR0b24gdG9vbHRpcCB0ZXh0LlxuXHQgKi9cblx0QElucHV0KCkgY2xlYXJUZXh0OiBzdHJpbmcgPSB0aGlzLmkxOG4uZ2V0KCkuRFJPUERPV04uQ0xFQVI7XG5cdC8qKlxuXHQgKiBTaXplIHRvIHJlbmRlciB0aGUgZHJvcGRvd24gZmllbGQuXG5cdCAqL1xuXHRASW5wdXQoKSBzaXplOiBcInNtXCIgfCBcIm1kXCIgfCBcImxnXCIgPSBcIm1kXCI7XG5cdC8qKlxuXHQgKiBEZWZpbmVzIHdoZXRoZXIgb3Igbm90IHRoZSBgRHJvcGRvd25gIHN1cHBvcnRzIHNlbGVjdGluZyBtdWx0aXBsZSBpdGVtcyBhcyBvcHBvc2VkIHRvIHNpbmdsZVxuXHQgKiBpdGVtIHNlbGVjdGlvbi5cblx0ICovXG5cdEBJbnB1dCgpIHR5cGU6IFwic2luZ2xlXCIgfCBcIm11bHRpXCIgPSBcInNpbmdsZVwiO1xuXHQvKipcblx0ICogQGRlcHJlY2F0ZWQgc2luY2UgdjUgLSBVc2UgYGNkc0xheWVyYCBkaXJlY3RpdmUgaW5zdGVhZFxuXHQgKiBgbGlnaHRgIG9yIGBkYXJrYCBkcm9wZG93biB0aGVtZVxuXHQgKi9cblx0QElucHV0KCkgdGhlbWU6IFwibGlnaHRcIiB8IFwiZGFya1wiID0gXCJkYXJrXCI7XG5cdC8qKlxuXHQgKiBTZXQgdG8gYHRydWVgIHRvIGRpc2FibGUgdGhlIGRyb3Bkb3duLlxuXHQgKi9cblx0QElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcblx0LyoqXG5cdCAqIFNldCB0byBgdHJ1ZWAgZm9yIGEgcmVhZG9ubHkgc3RhdGUuXG5cdCAqL1xuXHRASW5wdXQoKSByZWFkb25seSA9IGZhbHNlO1xuXHQvKipcblx0ICogU2V0IHRvIGB0cnVlYCBmb3IgYSBsb2FkaW5nIGRyb3Bkb3duLlxuXHQgKi9cblx0QElucHV0KCkgc2tlbGV0b24gPSBmYWxzZTtcblx0LyoqXG5cdCAqIFNldCB0byBgdHJ1ZWAgZm9yIGFuIGlubGluZSBkcm9wZG93bi5cblx0ICovXG5cdEBJbnB1dCgpIGlubGluZSA9IGZhbHNlO1xuXHQvKipcblx0ICogU2V0IHRvIGB0cnVlYCBmb3IgYSBkcm9wZG93biB3aXRob3V0IGFycm93IGtleSBhY3RpdmF0aW9uLlxuXHQgKi9cblx0QElucHV0KCkgZGlzYWJsZUFycm93S2V5cyA9IGZhbHNlO1xuXHQvKipcblx0ICogU2V0IHRvIGB0cnVlYCBmb3IgaW52YWxpZCBzdGF0ZS5cblx0ICovXG5cdEBJbnB1dCgpIGludmFsaWQgPSBmYWxzZTtcblx0LyoqXG5cdCAqIFZhbHVlIGRpc3BsYXllZCBpZiBkcm9wZG93biBpcyBpbiBpbnZhbGlkIHN0YXRlLlxuXHQgKi9cblx0QElucHV0KCkgaW52YWxpZFRleHQ6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT47XG5cdC8qKlxuXHQgICogU2V0IHRvIGB0cnVlYCB0byBzaG93IGEgd2FybmluZyAoY29udGVudHMgc2V0IGJ5IHdhcm5pbmdUZXh0KVxuXHQgICovXG5cdEBJbnB1dCgpIHdhcm4gPSBmYWxzZTtcblx0LyoqXG5cdCAqIFNldHMgdGhlIHdhcm5pbmcgdGV4dFxuXHQgKi9cblx0QElucHV0KCkgd2FyblRleHQ6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT47XG5cdC8qKlxuXHQgKiBzZXQgdG8gYHRydWVgIHRvIHBsYWNlIHRoZSBkcm9wZG93biB2aWV3IGlubGluZSB3aXRoIHRoZSBjb21wb25lbnRcblx0ICovXG5cdEBJbnB1dCgpIGFwcGVuZElubGluZTogYm9vbGVhbiA9IG51bGw7XG5cdC8qKlxuXHQgKiBRdWVyeSBzdHJpbmcgZm9yIHRoZSBlbGVtZW50IHRoYXQgY29udGFpbnMgdGhlIGBEcm9wZG93bmAuXG5cdCAqIFVzZWQgdG8gdHJpZ2dlciBjbG9zaW5nIHRoZSBkcm9wZG93biBpZiBpdCBzY3JvbGxzIG91dHNpZGUgb2YgdGhlIHZpZXdwb3J0IG9mIHRoZSBgc2Nyb2xsYWJsZUNvbnRhaW5lcmAuXG5cdCAqL1xuXHRASW5wdXQoKSBzY3JvbGxhYmxlQ29udGFpbmVyOiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBTcGVjaWZpZXMgdGhlIHByb3BlcnR5IHRvIGJlIHVzZWQgYXMgdGhlIHJldHVybiB2YWx1ZSB0byBgbmdNb2RlbGBcblx0ICovXG5cdEBJbnB1dCgpIGl0ZW1WYWx1ZUtleTogc3RyaW5nO1xuXHQvKipcblx0ICogU3BlY2lmeSBmZWVkYmFjayAobW9kZSkgb2YgdGhlIHNlbGVjdGlvbi5cblx0ICogYHRvcGA6IHNlbGVjdGVkIGl0ZW0ganVtcHMgdG8gdG9wXG5cdCAqIGBmaXhlZGA6IHNlbGVjdGVkIGl0ZW0gc3RheXMgYXQgaXQncyBwb3NpdGlvblxuXHQgKiBgdG9wLWFmdGVyLXJlb3BlbmA6IHNlbGVjdGVkIGl0ZW0ganVtcCB0byB0b3AgYWZ0ZXIgcmVvcGVuIGRyb3Bkb3duXG5cdCAqL1xuXHRASW5wdXQoKSBzZWxlY3Rpb25GZWVkYmFjazogXCJ0b3BcIiB8IFwiZml4ZWRcIiB8IFwidG9wLWFmdGVyLXJlb3BlblwiID0gXCJ0b3AtYWZ0ZXItcmVvcGVuXCI7XG5cdC8qKlxuXHQgKiBBY2Nlc3NpYmxlIGxhYmVsIGZvciB0aGUgYnV0dG9uIHRoYXQgb3BlbnMgdGhlIGRyb3Bkb3duIGxpc3QuXG5cdCAqIERlZmF1bHRzIHRvIHRoZSBgRFJPUERPV04uT1BFTmAgdmFsdWUgZnJvbSB0aGUgaTE4biBzZXJ2aWNlLlxuXHQgKi9cblx0QElucHV0KCkgbWVudUJ1dHRvbkxhYmVsID0gdGhpcy5pMThuLmdldCgpLkRST1BET1dOLk9QRU47XG5cdC8qKlxuXHQgKiBQcm92aWRlcyB0aGUgbGFiZWwgZm9yIHRoZSBcIiMgc2VsZWN0ZWRcIiB0ZXh0LlxuXHQgKiBEZWZhdWx0cyB0byB0aGUgYERST1BET1dOLlNFTEVDVEVEYCB2YWx1ZSBmcm9tIHRoZSBpMThuIHNlcnZpY2UuXG5cdCAqL1xuXHRASW5wdXQoKSBzZWxlY3RlZExhYmVsID0gdGhpcy5pMThuLmdldCgpLkRST1BET1dOLlNFTEVDVEVEO1xuXHQvKipcblx0ICogT3ZlcnJpZGVzIHRoZSBhdXRvbWF0aWMgZHJvcFVwLlxuXHQgKi9cblx0QElucHV0KCkgZHJvcFVwOiBib29sZWFuO1xuXHQvKipcblx0ICogRW1pdHMgc2VsZWN0aW9uIGV2ZW50cy5cblx0ICovXG5cdEBPdXRwdXQoKSBzZWxlY3RlZDogRXZlbnRFbWl0dGVyPE9iamVjdD4gPSBuZXcgRXZlbnRFbWl0dGVyPE9iamVjdD4oKTtcblx0LyoqXG5cdCAqIEVtaXRzIGV2ZW50IG5vdGlmeWluZyB0byBvdGhlciBjbGFzc2VzIHRoYXQgdGhlIGBEcm9wZG93bmAgaGFzIGJlZW4gY2xvc2VkIChjb2xsYXBzZWQpLlxuXHQgKi9cblx0QE91dHB1dCgpIG9uQ2xvc2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cdC8qKlxuXHQgKiBFbWl0cyBldmVudCBub3RpZnlpbmcgdG8gb3RoZXIgY2xhc3NlcyB0aGF0IHRoZSBgRHJvcGRvd25gIGhhcyBiZWVuIGNsb3NlZCAoY29sbGFwc2VkKS5cblx0ICovXG5cdEBPdXRwdXQoKSBjbG9zZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuXHQvKipcblx0ICogTWFpbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSBgQWJzdHJhY3REcm9wZG93blZpZXdgIG9iamVjdCB3aXRoaW4gdGhlIGNvbnRlbnQgRE9NLlxuXHQgKi9cblx0QENvbnRlbnRDaGlsZChBYnN0cmFjdERyb3Bkb3duVmlldywgeyBzdGF0aWM6IHRydWUgfSkgdmlldzogQWJzdHJhY3REcm9wZG93blZpZXc7XG5cdC8qKlxuXHQgKiBNYWludGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlIHZpZXcgRE9NIGVsZW1lbnQgb2YgdGhlIGBEcm9wZG93bmAgYnV0dG9uLlxuXHQgKi9cblx0QFZpZXdDaGlsZChcImRyb3Bkb3duQnV0dG9uXCIsIHsgc3RhdGljOiB0cnVlIH0pIGRyb3Bkb3duQnV0dG9uO1xuXHQvKipcblx0ICogVmlld0NoaWQgb2YgdGhlIGRyb3Bkb3duIHZpZXcuXG5cdCAqL1xuXHRAVmlld0NoaWxkKFwiZHJvcGRvd25NZW51XCIsIHsgc3RhdGljOiB0cnVlIH0pIGRyb3Bkb3duTWVudTtcblxuXHRASG9zdEJpbmRpbmcoXCJjbGFzcy5jZHMtLWRyb3Bkb3duX193cmFwcGVyXCIpIGhvc3RDbGFzcyA9IHRydWU7XG5cblx0QEhvc3RCaW5kaW5nKFwiY2xhc3MuY2RzLS1saXN0LWJveF9fd3JhcHBlclwiKSBob3N0V3JhcHBlckNsYXNzID0gdHJ1ZTtcblx0LyoqXG5cdCAqIEV4cGVyaW1lbnRhbDogZW5hYmxlIGZsdWlkIHN0YXRlXG5cdCAqL1xuXHRASG9zdEJpbmRpbmcoXCJjbGFzcy5jZHMtLWxpc3QtYm94X193cmFwcGVyLS1mbHVpZFwiKSBASW5wdXQoKSBmbHVpZCA9IGZhbHNlO1xuXG5cdC8qKlxuXHQgKiBTZXQgdG8gYHRydWVgIGlmIHRoZSBkcm9wZG93biBpcyBjbG9zZWQgKG5vdCBleHBhbmRlZCkuXG5cdCAqL1xuXHRtZW51SXNDbG9zZWQgPSB0cnVlO1xuXG5cdC8qKlxuXHQgKiBjb250cm9scyB3aGV0aGVyIHRoZSBgZHJvcC11cGAgY2xhc3MgaXMgYXBwbGllZFxuXHQgKi9cblx0X2Ryb3BVcCA9IGZhbHNlO1xuXG5cdC8vIC5iaW5kIGNyZWF0ZXMgYSBuZXcgZnVuY3Rpb24sIHNvIHdlIGRlY2xhcmUgdGhlIG1ldGhvZHMgYmVsb3dcblx0Ly8gYnV0IC5iaW5kIHRoZW0gdXAgaGVyZVxuXHRub29wID0gdGhpcy5fbm9vcC5iaW5kKHRoaXMpO1xuXHRvdXRzaWRlQ2xpY2sgPSB0aGlzLl9vdXRzaWRlQ2xpY2suYmluZCh0aGlzKTtcblx0b3V0c2lkZUtleSA9IHRoaXMuX291dHNpZGVLZXkuYmluZCh0aGlzKTtcblx0a2V5Ym9hcmROYXYgPSB0aGlzLl9rZXlib2FyZE5hdi5iaW5kKHRoaXMpO1xuXG5cdHByb3RlY3RlZCB2aXNpYmlsaXR5U3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG5cdHByb3RlY3RlZCBvblRvdWNoZWRDYWxsYmFjazogKCkgPT4gdm9pZCA9IHRoaXMuX25vb3A7XG5cblx0cHJvdGVjdGVkIF9pc0ZvY3VzZWQgPSBmYWxzZTtcblxuXHQvLyBwcmltYXJpbHkgdXNlZCB0byBjYXB0dXJlIGFuZCBwcm9wYWdhdGUgaW5wdXQgdG8gYHdyaXRlVmFsdWVgIGJlZm9yZSB0aGUgY29udGVudCBpcyBhdmFpbGFibGVcblx0cHJpdmF0ZSBfd3JpdHRlblZhbHVlOiBhbnkgPSBbXTtcblxuXHQvKipcblx0ICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBEcm9wZG93bi5cblx0ICovXG5cdGNvbnN0cnVjdG9yKFxuXHRcdHByb3RlY3RlZCBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuXHRcdHByb3RlY3RlZCBpMThuOiBJMThuLFxuXHRcdHByb3RlY3RlZCBkcm9wZG93blNlcnZpY2U6IERyb3Bkb3duU2VydmljZSxcblx0XHRwcm90ZWN0ZWQgZWxlbWVudFNlcnZpY2U6IEVsZW1lbnRTZXJ2aWNlKSB7fVxuXG5cdC8qKlxuXHQgKiBVcGRhdGVzIHRoZSBgdHlwZWAgcHJvcGVydHkgaW4gdGhlIGBAQ29udGVudENoaWxkYC5cblx0ICogVGhlIGB0eXBlYCBwcm9wZXJ0eSBzcGVjaWZpZXMgd2hldGhlciB0aGUgYERyb3Bkb3duYCBhbGxvd3Mgc2luZ2xlIHNlbGVjdGlvbiBvciBtdWx0aSBzZWxlY3Rpb24uXG5cdCAqL1xuXHRuZ09uSW5pdCgpIHtcblx0XHRpZiAodGhpcy52aWV3KSB7XG5cdFx0XHR0aGlzLnZpZXcudHlwZSA9IHRoaXMudHlwZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSW5pdGlhbGl6ZXMgY2xhc3NlcyBhbmQgc3Vic2NyaWJlcyB0byBldmVudHMgZm9yIHNpbmdsZSBvciBtdWx0aSBzZWxlY3Rpb24uXG5cdCAqL1xuXHRuZ0FmdGVyQ29udGVudEluaXQoKSB7XG5cdFx0aWYgKCF0aGlzLnZpZXcpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKCh0aGlzLndyaXR0ZW5WYWx1ZSAmJiB0aGlzLndyaXR0ZW5WYWx1ZS5sZW5ndGgpIHx8IHR5cGVvZiB0aGlzLndyaXR0ZW5WYWx1ZSA9PT0gXCJudW1iZXJcIikge1xuXHRcdFx0dGhpcy53cml0ZVZhbHVlKHRoaXMud3JpdHRlblZhbHVlKTtcblx0XHR9XG5cdFx0dGhpcy52aWV3LnR5cGUgPSB0aGlzLnR5cGU7XG5cdFx0dGhpcy52aWV3LnNpemUgPSB0aGlzLnNpemU7XG5cblx0XHQvLyBmdW5jdGlvbiB0byBjaGVjayBpZiB0aGUgZXZlbnQgaXMgb3JnYW5pYyAoaXNVcGRhdGUgPT09IGZhbHNlKSBvciBwcm9ncmFtbWF0aWNcblx0XHRjb25zdCBpc1VwZGF0ZSA9IGV2ZW50ID0+IGV2ZW50ICYmIGV2ZW50LmlzVXBkYXRlO1xuXG5cdFx0dGhpcy52aWV3LnNlbGVjdC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuXHRcdFx0aWYgKHRoaXMudHlwZSA9PT0gXCJzaW5nbGVcIiAmJiAhaXNVcGRhdGUoZXZlbnQpICYmICFBcnJheS5pc0FycmF5KGV2ZW50KSkge1xuXHRcdFx0XHR0aGlzLmNsb3NlTWVudSgpO1xuXHRcdFx0XHRpZiAoZXZlbnQuaXRlbSAmJiBldmVudC5pdGVtLnNlbGVjdGVkKSB7XG5cdFx0XHRcdFx0aWYgKHRoaXMuaXRlbVZhbHVlS2V5KSB7XG5cdFx0XHRcdFx0XHR0aGlzLnByb3BhZ2F0ZUNoYW5nZShldmVudC5pdGVtW3RoaXMuaXRlbVZhbHVlS2V5XSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRoaXMucHJvcGFnYXRlQ2hhbmdlKGV2ZW50Lml0ZW0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aGlzLnByb3BhZ2F0ZUNoYW5nZShudWxsKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy50eXBlID09PSBcIm11bHRpXCIgJiYgIWlzVXBkYXRlKGV2ZW50KSkge1xuXHRcdFx0XHQvLyBpZiB3ZSBoYXZlIGEgYHZhbHVlYCBzZWxlY3RvciBhbmQgc2VsZWN0ZWQgaXRlbXMgbWFwIHRoZW0gYXBwcm9wcmlhdGVseVxuXHRcdFx0XHRpZiAodGhpcy5pdGVtVmFsdWVLZXkgJiYgdGhpcy52aWV3LmdldFNlbGVjdGVkKCkpIHtcblx0XHRcdFx0XHRjb25zdCB2YWx1ZXMgPSB0aGlzLnZpZXcuZ2V0U2VsZWN0ZWQoKS5tYXAoaXRlbSA9PiBpdGVtW3RoaXMuaXRlbVZhbHVlS2V5XSk7XG5cdFx0XHRcdFx0dGhpcy5wcm9wYWdhdGVDaGFuZ2UodmFsdWVzKTtcblx0XHRcdFx0XHQvLyBvdGhlcndpc2UganVzdCBwYXNzIHVwIHRoZSB2YWx1ZXMgZnJvbSBgZ2V0U2VsZWN0ZWRgXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy5wcm9wYWdhdGVDaGFuZ2UodGhpcy52aWV3LmdldFNlbGVjdGVkKCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvLyBvbmx5IGVtaXQgc2VsZWN0ZWQgZm9yIFwib3JnYW5pY1wiIHNlbGVjdGlvbnNcblx0XHRcdGlmICghaXNVcGRhdGUoZXZlbnQpKSB7XG5cdFx0XHRcdHRoaXMuY2hlY2tGb3JSZW9yZGVyKCk7XG5cdFx0XHRcdHRoaXMuc2VsZWN0ZWQuZW1pdChldmVudCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRuZ0FmdGVyVmlld0luaXQoKSB7XG5cdFx0Ly8gaWYgYXBwZW5kSW5saW5lIGlzIGRlZmF1bHQgdmFsdWVkIChudWxsKSB3ZSBzaG91bGQ6XG5cdFx0Ly8gMS4gaWYgdGhlcmUgYXJlIHNjcm9sbGFibGUgcGFyZW50cyAobm90IGluY2x1ZGluZyBib2R5KSBkb24ndCBhcHBlbmQgaW5saW5lXG5cdFx0Ly8gICAgdGhpcyBzaG91bGQgYWxzbyBjb3ZlciB0aGUgY2FzZSB3aGVyZSB0aGUgZHJvcGRvd24gaXMgaW4gYSBtb2RhbFxuXHRcdC8vICAgICh3aGVyZSB3ZSBfZG9fIHdhbnQgdG8gYXBwZW5kIHRvIHRoZSBwbGFjZWhvbGRlcilcblx0XHRpZiAodGhpcy5hcHBlbmRJbmxpbmUgPT09IG51bGwgJiYgaGFzU2Nyb2xsYWJsZVBhcmVudHModGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpKSB7XG5cdFx0XHR0aGlzLmFwcGVuZElubGluZSA9IGZhbHNlO1xuXHRcdFx0Ly8gMi4gb3RoZXJ3aXNlIHdlIHNob3VsZCBhcHBlbmQgaW5saW5lXG5cdFx0fSBlbHNlIGlmICh0aGlzLmFwcGVuZElubGluZSA9PT0gbnVsbCkge1xuXHRcdFx0dGhpcy5hcHBlbmRJbmxpbmUgPSB0cnVlO1xuXHRcdH1cblx0XHR0aGlzLmNoZWNrRm9yUmVvcmRlcigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92aW5nIHRoZSBgRHJvcGRvd25gIGZyb20gdGhlIGJvZHkgaWYgaXQgaXMgYXBwZW5kZWQgdG8gdGhlIGJvZHkuXG5cdCAqL1xuXHRuZ09uRGVzdHJveSgpIHtcblx0XHRpZiAoIXRoaXMuYXBwZW5kSW5saW5lKSB7XG5cdFx0XHR0aGlzLl9hcHBlbmRUb0Ryb3Bkb3duKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFByb3BhZ2F0ZXMgdGhlIGluamVjdGVkIGB2YWx1ZWAuXG5cdCAqL1xuXHR3cml0ZVZhbHVlKHZhbHVlOiBhbnkpIHtcblx0XHQvLyBjYWNoZSB0aGUgd3JpdHRlbiB2YWx1ZSBzbyB3ZSBjYW4gdXNlIGl0IGluIGBBZnRlckNvbnRlbnRJbml0YFxuXHRcdHRoaXMud3JpdHRlblZhbHVlID0gdmFsdWU7XG5cdFx0dGhpcy52aWV3Lm9uSXRlbXNSZWFkeSgoKSA9PiB7XG5cdFx0XHQvLyBwcm9wYWdhdGUgbnVsbC9mYWxzZXkgYXMgYW4gYXJyYXkgKGRlc2VsZWN0IGV2ZXJ5dGhpbmcpXG5cdFx0XHRpZiAoIXZhbHVlKSB7XG5cdFx0XHRcdHRoaXMudmlldy5wcm9wYWdhdGVTZWxlY3RlZChbdmFsdWVdKTtcblx0XHRcdH0gZWxzZSBpZiAodGhpcy50eXBlID09PSBcInNpbmdsZVwiKSB7XG5cdFx0XHRcdGlmICh0aGlzLml0ZW1WYWx1ZUtleSkge1xuXHRcdFx0XHRcdC8vIGNsb25lIHRoZSBzcGVjaWZpZWQgaXRlbSBhbmQgdXBkYXRlIGl0cyBzdGF0ZVxuXHRcdFx0XHRcdGNvbnN0IG5ld1ZhbHVlID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy52aWV3LmdldExpc3RJdGVtcygpLmZpbmQoaXRlbSA9PiBpdGVtW3RoaXMuaXRlbVZhbHVlS2V5XSA9PT0gdmFsdWUpKTtcblx0XHRcdFx0XHRuZXdWYWx1ZS5zZWxlY3RlZCA9IHRydWU7XG5cdFx0XHRcdFx0dGhpcy52aWV3LnByb3BhZ2F0ZVNlbGVjdGVkKFtuZXdWYWx1ZV0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIHBhc3MgdGhlIHNpbmd1bGFyIHZhbHVlIGFzIGFuIGFycmF5IG9mIExpc3RJdGVtXG5cdFx0XHRcdFx0dGhpcy52aWV3LnByb3BhZ2F0ZVNlbGVjdGVkKFt2YWx1ZV0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAodGhpcy5pdGVtVmFsdWVLZXkpIHtcblx0XHRcdFx0XHQvLyBjbG9uZSB0aGUgaXRlbXMgYW5kIHVwZGF0ZSB0aGVpciBzdGF0ZSBiYXNlZCBvbiB0aGUgcmVjZWl2ZWQgdmFsdWUgYXJyYXlcblx0XHRcdFx0XHQvLyB0aGlzIHdheSB3ZSBkb24ndCBsb3NlIGFueSBhZGRpdGlvbmFsIG1ldGFkYXRhIHRoYXQgbWF5IGJlIHBhc3NlZCBpbiB2aWEgdGhlIGBpdGVtc2AgSW5wdXRcblx0XHRcdFx0XHRsZXQgbmV3VmFsdWVzID0gW107XG5cdFx0XHRcdFx0Zm9yIChjb25zdCB2IG9mIHZhbHVlKSB7XG5cdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy52aWV3LmdldExpc3RJdGVtcygpKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChpdGVtW3RoaXMuaXRlbVZhbHVlS2V5XSA9PT0gdikge1xuXHRcdFx0XHRcdFx0XHRcdG5ld1ZhbHVlcy5wdXNoKE9iamVjdC5hc3NpZ24oe30sIGl0ZW0sIHsgc2VsZWN0ZWQ6IHRydWUgfSkpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRoaXMudmlldy5wcm9wYWdhdGVTZWxlY3RlZChuZXdWYWx1ZXMpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIHdlIGNhbiBzYWZlbHkgYXNzdW1lIHdlJ3JlIHBhc3NpbmcgYW4gYXJyYXkgb2YgYExpc3RJdGVtYHNcblx0XHRcdFx0XHR0aGlzLnZpZXcucHJvcGFnYXRlU2VsZWN0ZWQodmFsdWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmNoZWNrRm9yUmVvcmRlcigpO1xuXHRcdH0pO1xuXHR9XG5cblx0b25CbHVyKCkge1xuXHRcdHRoaXMub25Ub3VjaGVkQ2FsbGJhY2soKTtcblx0fVxuXG5cdHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSkge1xuXHRcdHRoaXMucHJvcGFnYXRlQ2hhbmdlID0gZm47XG5cdH1cblxuXHQvKipcblx0ICogUmVnaXN0ZXJpbmcgdGhlIGZ1bmN0aW9uIGluamVjdGVkIHRvIGNvbnRyb2wgdGhlIHRvdWNoIHVzZSBvZiB0aGUgYERyb3Bkb3duYC5cblx0ICovXG5cdHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpIHtcblx0XHR0aGlzLm9uVG91Y2hlZENhbGxiYWNrID0gZm47XG5cdH1cblxuXHQvKipcblx0ICogZnVuY3Rpb24gcGFzc2VkIGluIGJ5IGByZWdpc3Rlck9uQ2hhbmdlYFxuXHQgKi9cblx0cHJvcGFnYXRlQ2hhbmdlID0gKF86IGFueSkgPT4geyB9O1xuXG5cdC8qKlxuXHQgKiBgQ29udHJvbFZhbHVlQWNjZXNzb3JgIG1ldGhvZCB0byBwcm9ncmFtbWF0aWNhbGx5IGRpc2FibGUgdGhlIGRyb3Bkb3duLlxuXHQgKlxuXHQgKiBleDogYHRoaXMuZm9ybUdyb3VwLmdldChcIm15RHJvcGRvd25cIikuZGlzYWJsZSgpO2Bcblx0ICpcblx0ICogQHBhcmFtIGlzRGlzYWJsZWQgYHRydWVgIHRvIGRpc2FibGUgdGhlIGlucHV0XG5cdCAqL1xuXHRzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pIHtcblx0XHR0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGRzIGtleWJvYXJkIGZ1bmN0aW9uYWxpdHkgZm9yIG5hdmlnYXRpb24sIHNlbGVjdGlvbiBhbmQgY2xvc2luZyBvZiB0aGUgYERyb3Bkb3duYC5cblx0ICovXG5cdEBIb3N0TGlzdGVuZXIoXCJrZXlkb3duXCIsIFtcIiRldmVudFwiXSlcblx0b25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG5cdFx0aWYgKHRoaXMucmVhZG9ubHkpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoKGV2ZW50LmtleSA9PT0gXCJFc2NhcGVcIikgJiYgIXRoaXMubWVudUlzQ2xvc2VkKSB7XG5cdFx0XHRldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTsgIC8vIGRvbid0IHVuaW50ZW50aW9uYWxseSBjbG9zZSBvdGhlciB3aWRnZXRzIHRoYXQgbGlzdGVuIGZvciBFc2NhcGVcblx0XHR9XG5cdFx0aWYgKGV2ZW50LmtleSA9PT0gXCJFc2NhcGVcIikge1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdHRoaXMuY2xvc2VNZW51KCk7XG5cdFx0XHR0aGlzLmRyb3Bkb3duQnV0dG9uLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcblx0XHR9IGVsc2UgaWYgKHRoaXMubWVudUlzQ2xvc2VkICYmIChldmVudC5rZXkgPT09IFwiIFwiIHx8IGV2ZW50LmtleSA9PT0gXCJBcnJvd0Rvd25cIiB8fCBldmVudC5rZXkgPT09IFwiQXJyb3dVcFwiKSkge1xuXHRcdFx0aWYgKHRoaXMuZGlzYWJsZUFycm93S2V5cyAmJiAoZXZlbnQua2V5ID09PSBcIkFycm93RG93blwiIHx8IGV2ZW50LmtleSA9PT0gXCJBcnJvd1VwXCIpKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHR0aGlzLm9wZW5NZW51KCk7XG5cdFx0fVxuXG5cdFx0aWYgKCF0aGlzLm1lbnVJc0Nsb3NlZCAmJiBldmVudC5rZXkgPT09IFwiVGFiXCIgJiYgdGhpcy5kcm9wZG93bk1lbnUubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQgYXMgTm9kZSkpIHtcblx0XHRcdHRoaXMuY2xvc2VNZW51KCk7XG5cdFx0fVxuXG5cdFx0aWYgKCF0aGlzLm1lbnVJc0Nsb3NlZCAmJiBldmVudC5rZXkgPT09IFwiVGFiXCIgJiYgZXZlbnQuc2hpZnRLZXkpIHtcblx0XHRcdHRoaXMuY2xvc2VNZW51KCk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMudHlwZSA9PT0gXCJtdWx0aVwiKSB7IHJldHVybjsgfVxuXG5cdFx0aWYgKHRoaXMubWVudUlzQ2xvc2VkKSB7XG5cdFx0XHR0aGlzLmNsb3NlZERyb3Bkb3duTmF2aWdhdGlvbihldmVudCk7XG5cdFx0fVxuXHR9XG5cblx0Y2xvc2VkRHJvcGRvd25OYXZpZ2F0aW9uKGV2ZW50KSB7XG5cdFx0aWYgKGV2ZW50LmtleSA9PT0gXCJBcnJvd0Rvd25cIikge1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdHRoaXMudmlldy5nZXRDdXJyZW50SXRlbSgpLnNlbGVjdGVkID0gZmFsc2U7XG5cdFx0XHRsZXQgaXRlbSA9IHRoaXMudmlldy5nZXROZXh0SXRlbSgpO1xuXHRcdFx0aWYgKGl0ZW0pIHsgaXRlbS5zZWxlY3RlZCA9IHRydWU7IH1cblx0XHR9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gXCJBcnJvd1VwXCIpIHtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHR0aGlzLnZpZXcuZ2V0Q3VycmVudEl0ZW0oKS5zZWxlY3RlZCA9IGZhbHNlO1xuXHRcdFx0bGV0IGl0ZW0gPSB0aGlzLnZpZXcuZ2V0UHJldkl0ZW0oKTtcblx0XHRcdGlmIChpdGVtKSB7IGl0ZW0uc2VsZWN0ZWQgPSB0cnVlOyB9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGRpc3BsYXkgdmFsdWUgaWYgdGhlcmUgaXMgYSBzZWxlY3Rpb24gYW5kIGRpc3BsYXlWYWx1ZSBpcyBzZXQsXG5cdCAqIGlmIHRoZXJlIGlzIGp1c3QgYSBzZWxlY3Rpb24gdGhlIExpc3RJdGVtIGNvbnRlbnQgcHJvcGVydHkgd2lsbCBiZSByZXR1cm5lZCxcblx0ICogb3RoZXJ3aXNlIHRoZSBwbGFjZWhvbGRlciB3aWxsIGJlIHJldHVybmVkLlxuXHQgKi9cblx0Z2V0RGlzcGxheVN0cmluZ1ZhbHVlKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG5cdFx0aWYgKCF0aGlzLnZpZXcgfHwgdGhpcy5za2VsZXRvbikge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRsZXQgc2VsZWN0ZWQgPSB0aGlzLnZpZXcuZ2V0U2VsZWN0ZWQoKTtcblx0XHRpZiAoc2VsZWN0ZWQubGVuZ3RoICYmICghdGhpcy5kaXNwbGF5VmFsdWUgfHwgIXRoaXMuaXNSZW5kZXJTdHJpbmcoKSkpIHtcblx0XHRcdGlmICh0aGlzLnR5cGUgPT09IFwibXVsdGlcIikge1xuXHRcdFx0XHRyZXR1cm4gb2YodGhpcy5wbGFjZWhvbGRlcik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gb2Yoc2VsZWN0ZWRbMF0uY29udGVudCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChzZWxlY3RlZC5sZW5ndGggJiYgdGhpcy5pc1JlbmRlclN0cmluZygpKSB7XG5cdFx0XHRyZXR1cm4gb2YodGhpcy5kaXNwbGF5VmFsdWUgYXMgc3RyaW5nKTtcblx0XHR9XG5cdFx0cmV0dXJuIG9mKHRoaXMucGxhY2Vob2xkZXIpO1xuXHR9XG5cblx0aXNSZW5kZXJTdHJpbmcoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHR5cGVvZiB0aGlzLmRpc3BsYXlWYWx1ZSA9PT0gXCJzdHJpbmdcIjtcblx0fVxuXG5cdGdldFJlbmRlclRlbXBsYXRlQ29udGV4dCgpIHtcblx0XHRpZiAoIXRoaXMudmlldykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRsZXQgc2VsZWN0ZWQgPSB0aGlzLnZpZXcuZ2V0U2VsZWN0ZWQoKTtcblx0XHRpZiAodGhpcy50eXBlID09PSBcIm11bHRpXCIpIHtcblx0XHRcdHJldHVybiB7IGl0ZW1zOiBzZWxlY3RlZCB9O1xuXHRcdH0gZWxzZSBpZiAoc2VsZWN0ZWQgJiYgc2VsZWN0ZWQubGVuZ3RoID4gMCkge1xuXHRcdFx0cmV0dXJuIHsgaXRlbTogc2VsZWN0ZWRbMF0gfTsgLy8gdGhpcyBpcyB0byBiZSBjb21wYXRpYmxlIHdpdGggdGhlIGRyb3Bkb3duLWxpc3QgdGVtcGxhdGVcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHt9O1xuXHRcdH1cblx0fVxuXG5cdGdldFNlbGVjdGVkQ291bnQoKTogbnVtYmVyIHtcblx0XHRpZiAodGhpcy52aWV3LmdldFNlbGVjdGVkKCkpIHtcblx0XHRcdHJldHVybiB0aGlzLnZpZXcuZ2V0U2VsZWN0ZWQoKS5sZW5ndGg7XG5cdFx0fVxuXHR9XG5cblx0Y2xlYXJTZWxlY3RlZCgpIHtcblx0XHRpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLmdldFNlbGVjdGVkQ291bnQoKSA9PT0gMCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy52aWV3LmdldExpc3RJdGVtcygpKSB7XG5cdFx0XHRpdGVtLnNlbGVjdGVkID0gZmFsc2U7XG5cdFx0fVxuXHRcdHRoaXMuc2VsZWN0ZWQuZW1pdChbXSk7XG5cdFx0dGhpcy5wcm9wYWdhdGVDaGFuZ2UoW10pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgYHRydWVgIGlmIHRoZXJlIGlzIGEgdmFsdWUgc2VsZWN0ZWQuXG5cdCAqL1xuXHR2YWx1ZVNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuXHRcdGlmICh0aGlzLnZpZXcuZ2V0U2VsZWN0ZWQoKSkgeyByZXR1cm4gdHJ1ZTsgfVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdF9ub29wKCkgeyB9XG5cdC8qKlxuXHQgKiBIYW5kbGVzIGNsaWNrcyBvdXRzaWRlIG9mIHRoZSBgRHJvcGRvd25gLlxuXHQgKi9cblx0X291dHNpZGVDbGljayhldmVudCkge1xuXHRcdGlmICghdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJlxuXHRcdFx0Ly8gaWYgd2UncmUgYXBwZW5kVG9Cb2R5IHRoZSBsaXN0IGlzbid0IHdpdGhpbiB0aGUgX2VsZW1lbnRSZWYsXG5cdFx0XHQvLyBzbyB3ZSd2ZSBnb3QgdG8gY2hlY2sgaWYgb3VyIHRhcmdldCBpcyBwb3NzaWJseSBpbiB0aGVyZSB0b28uXG5cdFx0XHQhdGhpcy5kcm9wZG93bk1lbnUubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpKSB7XG5cdFx0XHR0aGlzLmNsb3NlTWVudSgpO1xuXHRcdH1cblx0fVxuXHRfb3V0c2lkZUtleShldmVudCkge1xuXHRcdGlmICghdGhpcy5tZW51SXNDbG9zZWQgJiYgZXZlbnQua2V5ID09PSBcIlRhYlwiICYmIHRoaXMuZHJvcGRvd25NZW51Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0IGFzIE5vZGUpKSB7XG5cdFx0XHR0aGlzLmNsb3NlTWVudSgpO1xuXHRcdH1cblx0fVxuXHQvKipcblx0ICogSGFuZGxlcyBrZXlib2FyZCBldmVudHMgc28gdXNlcnMgYXJlIGNvbnRyb2xsaW5nIHRoZSBgRHJvcGRvd25gIGluc3RlYWQgb2YgdW5pbnRlbnRpb25hbGx5IGNvbnRyb2xsaW5nIG91dHNpZGUgZWxlbWVudHMuXG5cdCAqL1xuXHRfa2V5Ym9hcmROYXYoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcblx0XHRpZiAoZXZlbnQua2V5ID09PSBcIkVzY2FwZVwiICYmICF0aGlzLm1lbnVJc0Nsb3NlZCkge1xuXHRcdFx0ZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7ICAvLyBkb24ndCB1bmludGVudGlvbmFsbHkgY2xvc2UgbW9kYWwgaWYgaW5zaWRlIG9mIGl0XG5cdFx0fVxuXHRcdGlmIChldmVudC5rZXkgPT09IFwiRXNjYXBlXCIpIHtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHR0aGlzLmNsb3NlTWVudSgpO1xuXHRcdFx0dGhpcy5kcm9wZG93bkJ1dHRvbi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG5cdFx0fSBlbHNlIGlmICghdGhpcy5tZW51SXNDbG9zZWQgJiYgZXZlbnQua2V5ID09PSBcIlRhYlwiKSB7XG5cdFx0XHQvLyB0aGlzIHdheSBmb2N1cyB3aWxsIHN0YXJ0IG9uIHRoZSBuZXh0IGZvY3VzYWJsZSBpdGVtIGZyb20gdGhlIGRyb3Bkb3duXG5cdFx0XHQvLyBub3QgdGhlIHRvcCBvZiB0aGUgYm9keSFcblx0XHRcdHRoaXMuZHJvcGRvd25CdXR0b24ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuXHRcdFx0dGhpcy5kcm9wZG93bkJ1dHRvbi5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IEtleWJvYXJkRXZlbnQoXCJrZXlkb3duXCIsIHsgYnViYmxlczogdHJ1ZSwgY2FuY2VsYWJsZTogdHJ1ZSwga2V5OiBcIlRhYlwiIH0pKTtcblx0XHRcdHRoaXMuY2xvc2VNZW51KCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgdGhlIGBEcm9wZG93bmAgbGlzdCBhcHBlbmRpbmcgaXQgdG8gdGhlIGRyb3Bkb3duIHBhcmVudCBvYmplY3QgaW5zdGVhZCBvZiB0aGUgYm9keS5cblx0ICovXG5cdF9hcHBlbmRUb0Ryb3Bkb3duKCkge1xuXHRcdHRoaXMuZHJvcGRvd25TZXJ2aWNlLmFwcGVuZFRvRHJvcGRvd24odGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuXHRcdHRoaXMuZHJvcGRvd25NZW51Lm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgdGhpcy5rZXlib2FyZE5hdiwgdHJ1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyB0aGUgYERyb3Bkb3duYCBsaXN0IGFzIGFuIGVsZW1lbnQgdGhhdCBpcyBhcHBlbmRlZCB0byB0aGUgRE9NIGJvZHkuXG5cdCAqL1xuXHRfYXBwZW5kVG9Cb2R5KCkge1xuXHRcdGNvbnN0IGxpZ2h0Q2xhc3MgPSB0aGlzLnRoZW1lID09PSBcImxpZ2h0XCIgPyBcIiBjZHMtLWxpc3QtYm94LS1saWdodFwiIDogXCJcIjtcblx0XHRjb25zdCBleHBhbmRlZENsYXNzID0gIXRoaXMubWVudUlzQ2xvc2VkID8gXCIgY2RzLS1saXN0LWJveC0tZXhwYW5kZWRcIiA6IFwiXCI7XG5cdFx0dGhpcy5kcm9wZG93blNlcnZpY2UuYXBwZW5kVG9Cb2R5KFxuXHRcdFx0dGhpcy5kcm9wZG93bkJ1dHRvbi5uYXRpdmVFbGVtZW50LFxuXHRcdFx0dGhpcy5kcm9wZG93bk1lbnUubmF0aXZlRWxlbWVudCxcblx0XHRcdGAke3RoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTmFtZX0ke2xpZ2h0Q2xhc3N9JHtleHBhbmRlZENsYXNzfWApO1xuXHRcdHRoaXMuZHJvcGRvd25NZW51Lm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgdGhpcy5rZXlib2FyZE5hdiwgdHJ1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogRGV0ZWN0cyB3aGV0aGVyIG9yIG5vdCB0aGUgYERyb3Bkb3duYCBsaXN0IGlzIHZpc2libGUgd2l0aGluIGFsbCBzY3JvbGxhYmxlIHBhcmVudHMuXG5cdCAqIFRoaXMgY2FuIGJlIG92ZXJyaWRkZW4gYnkgcGFzc2luZyBpbiBhIHZhbHVlIHRvIHRoZSBgZHJvcFVwYCBpbnB1dC5cblx0ICovXG5cdF9zaG91bGREcm9wVXAoKSB7XG5cdFx0Ly8gY2hlY2sgaWYgZHJvcGRvd25NZW51IGV4aXN0cyBmaXJzdC5cblx0XHRjb25zdCBtZW51ID0gdGhpcy5kcm9wZG93bk1lbnUgJiYgdGhpcy5kcm9wZG93bk1lbnUubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiLmNkcy0tbGlzdC1ib3hfX21lbnVcIik7XG5cdFx0Ly8gY2hlY2sgaWYgbWVudSBleGlzdHMgZmlyc3QuXG5cdFx0Y29uc3QgbWVudVJlY3QgPSBtZW51ICYmIG1lbnUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0aWYgKG1lbnUgJiYgbWVudVJlY3QpIHtcblx0XHRcdGNvbnN0IHNjcm9sbGFibGVQYXJlbnRzID0gZ2V0U2Nyb2xsYWJsZVBhcmVudHMobWVudSk7XG5cdFx0XHRyZXR1cm4gc2Nyb2xsYWJsZVBhcmVudHMucmVkdWNlKChzaG91bGREcm9wVXA6IGJvb2xlYW4sIHBhcmVudDogSFRNTEVsZW1lbnQpID0+IHtcblx0XHRcdFx0Y29uc3QgcGFyZW50UmVjdCA9IHBhcmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHRcdFx0Y29uc3QgaXNCZWxvd1BhcmVudCA9ICEobWVudVJlY3QuYm90dG9tIDw9IHBhcmVudFJlY3QuYm90dG9tKTtcblx0XHRcdFx0cmV0dXJuIHNob3VsZERyb3BVcCB8fCBpc0JlbG93UGFyZW50O1xuXHRcdFx0fSwgZmFsc2UpO1xuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeHBhbmRzIHRoZSBkcm9wZG93biBtZW51IGluIHRoZSB2aWV3LlxuXHQgKi9cblx0b3Blbk1lbnUoKSB7XG5cdFx0Ly8gcHJldmVudHMgdGhlIGRyb3Bkb3duIGZyb20gb3BlbmluZyB3aGVuIGxpc3Qgb2YgaXRlbXMgaXMgZW1wdHlcblx0XHRpZiAodGhpcy52aWV3LmdldExpc3RJdGVtcygpLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuX2Ryb3BVcCA9IGZhbHNlO1xuXHRcdHRoaXMubWVudUlzQ2xvc2VkID0gZmFsc2U7XG5cblx0XHQvLyBtb3ZlIHRoZSBkcm9wZG93biBsaXN0IHRvIHRoZSBib2R5IGlmIHdlJ3JlIG5vdCBhcHBlbmRpbmcgaW5saW5lXG5cdFx0Ly8gYW5kIHBvc2l0aW9uIGl0IHJlbGF0aXZlIHRvIHRoZSBkcm9wZG93biB3cmFwcGVyXG5cdFx0aWYgKCF0aGlzLmFwcGVuZElubGluZSkge1xuXHRcdFx0Y29uc3QgdGFyZ2V0ID0gdGhpcy5kcm9wZG93bkJ1dHRvbi5uYXRpdmVFbGVtZW50O1xuXHRcdFx0Y29uc3QgcGFyZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG5cdFx0XHR0aGlzLnZpc2liaWxpdHlTdWJzY3JpcHRpb24gPSB0aGlzLmVsZW1lbnRTZXJ2aWNlXG5cdFx0XHRcdC52aXNpYmlsaXR5KHRhcmdldCwgcGFyZW50KVxuXHRcdFx0XHQuc3Vic2NyaWJlKHZhbHVlID0+IHtcblx0XHRcdFx0XHRpZiAoIXZhbHVlLnZpc2libGUpIHtcblx0XHRcdFx0XHRcdHRoaXMuY2xvc2VNZW51KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdHRoaXMuX2FwcGVuZFRvQm9keSgpO1xuXHRcdH1cblxuXHRcdC8vIHNldCB0aGUgZHJvcGRvd24gbWVudSB0byBkcm9wIHVwIGlmIGl0J3MgbmVhciB0aGUgYm90dG9tIG9mIHRoZSBzY3JlZW5cblx0XHQvLyBzZXRUaW1lb3V0IGxldHMgdXMgbWVhc3VyZSBhZnRlciBpdCdzIHZpc2libGUgaW4gdGhlIERPTVxuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0aWYgKHRoaXMuZHJvcFVwID09PSBudWxsIHx8IHRoaXMuZHJvcFVwID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dGhpcy5fZHJvcFVwID0gdGhpcy5fc2hvdWxkRHJvcFVwKCk7XG5cdFx0XHR9XG5cdFx0fSwgMCk7XG5cblx0XHQvLyB3ZSBiaW5kIG5vb3AgdG8gZG9jdW1lbnQuYm9keS5maXJzdEVsZW1lbnRDaGlsZCB0byBhbGxvdyBzYWZhcmkgdG8gZmlyZSBldmVudHNcblx0XHQvLyBmcm9tIGRvY3VtZW50LiBUaGVuIHdlIHVuYmluZCBldmVyeXRoaW5nIGxhdGVyIHRvIGtlZXAgdGhpbmdzIGxpZ2h0LlxuXHRcdGRvY3VtZW50LmJvZHkuZmlyc3RFbGVtZW50Q2hpbGQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMubm9vcCwgdHJ1ZSk7XG5cdFx0ZG9jdW1lbnQuYm9keS5maXJzdEVsZW1lbnRDaGlsZC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCB0aGlzLm5vb3AsIHRydWUpO1xuXHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLm91dHNpZGVDbGljaywgdHJ1ZSk7XG5cdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgdGhpcy5vdXRzaWRlS2V5LCB0cnVlKTtcblx0XHRzZXRUaW1lb3V0KCgpID0+IHRoaXMudmlldy5pbml0Rm9jdXMoKSwgMCk7XG5cdH1cblxuXHQvKipcblx0ICogQ29sbGFwc2luZyB0aGUgZHJvcGRvd24gbWVudSBhbmQgcmVtb3ZpbmcgdW5uZWNlc3NhcnkgYEV2ZW50TGlzdGVuZXJzYC5cblx0ICovXG5cdGNsb3NlTWVudSgpIHtcblx0XHQvLyByZXR1cm4gZWFybHkgaWYgdGhlIG1lbnUgaXMgYWxyZWFkeSBjbG9zZWRcblx0XHRpZiAodGhpcy5tZW51SXNDbG9zZWQpIHsgcmV0dXJuOyB9XG5cdFx0dGhpcy5tZW51SXNDbG9zZWQgPSB0cnVlO1xuXHRcdHRoaXMuY2hlY2tGb3JSZW9yZGVyKCk7XG5cdFx0dGhpcy5vbkNsb3NlLmVtaXQoKTtcblx0XHR0aGlzLmNsb3NlLmVtaXQoKTtcblxuXHRcdC8vIGZvY3VzIHRoZSB0cmlnZ2VyIGJ1dHRvbiB3aGVuIHdlIGNsb3NlIC4uLlxuXHRcdHRoaXMuZHJvcGRvd25CdXR0b24ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuXG5cdFx0Ly8gcmVtb3ZlIHRoZSBjb25kaXRpb25hbCBvbmNlIHRoaXMgYXBpIGlzIHNldHRsZWQgYW5kIHBhcnQgb2YgYWJzdHJhY3QtZHJvcGRvd24tdmlldy5jbGFzc1xuXHRcdGlmICh0aGlzLnZpZXdbXCJkaXNhYmxlU2Nyb2xsXCJdKSB7XG5cdFx0XHR0aGlzLnZpZXdbXCJkaXNhYmxlU2Nyb2xsXCJdKCk7XG5cdFx0fVxuXG5cdFx0Ly8gbW92ZSB0aGUgbGlzdCBiYWNrIGluIHRoZSBjb21wb25lbnQgb24gY2xvc2Vcblx0XHRpZiAoIXRoaXMuYXBwZW5kSW5saW5lKSB7XG5cdFx0XHR0aGlzLnZpc2liaWxpdHlTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcblx0XHRcdHRoaXMuX2FwcGVuZFRvRHJvcGRvd24oKTtcblx0XHR9XG5cdFx0ZG9jdW1lbnQuYm9keS5maXJzdEVsZW1lbnRDaGlsZC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5ub29wLCB0cnVlKTtcblx0XHRkb2N1bWVudC5ib2R5LmZpcnN0RWxlbWVudENoaWxkLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMubm9vcCwgdHJ1ZSk7XG5cdFx0ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMub3V0c2lkZUNsaWNrLCB0cnVlKTtcblx0XHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCB0aGlzLm91dHNpZGVLZXksIHRydWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnRyb2xzIHRvZ2dsaW5nIG1lbnUgc3RhdGVzIGJldHdlZW4gb3Blbi9leHBhbmRlZCBhbmQgY2xvc2VkL2NvbGxhcHNlZC5cblx0ICovXG5cdHRvZ2dsZU1lbnUoKSB7XG5cdFx0aWYgKHRoaXMubWVudUlzQ2xvc2VkKSB7XG5cdFx0XHR0aGlzLm9wZW5NZW51KCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuY2xvc2VNZW51KCk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIGlzVGVtcGxhdGUodmFsdWUpIHtcblx0XHRyZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZjtcblx0fVxuXG5cdGhhbmRsZUZvY3VzKGV2ZW50OiBGb2N1c0V2ZW50KSB7XG5cdFx0dGhpcy5faXNGb2N1c2VkID0gZXZlbnQudHlwZSA9PT0gXCJmb2N1c1wiO1xuXHRcdGlmIChldmVudC50eXBlID09PSBcImJsdXJcIikge1xuXHRcdFx0dGhpcy5vbkJsdXIoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ29udHJvbHMgd2hlbiBpdCdzIG5lZWRlZCB0byBhcHBseSB0aGUgc2VsZWN0aW9uIGZlZWRiYWNrXG5cdCAqL1xuXHRwcm90ZWN0ZWQgY2hlY2tGb3JSZW9yZGVyKCkge1xuXHRcdGNvbnN0IHRvcEFmdGVyUmVvcGVuID0gdGhpcy5tZW51SXNDbG9zZWQgJiYgdGhpcy5zZWxlY3Rpb25GZWVkYmFjayA9PT0gXCJ0b3AtYWZ0ZXItcmVvcGVuXCI7XG5cdFx0aWYgKCh0aGlzLnR5cGUgPT09IFwibXVsdGlcIikgJiYgKHRvcEFmdGVyUmVvcGVuIHx8IHRoaXMuc2VsZWN0aW9uRmVlZGJhY2sgPT09IFwidG9wXCIpKSB7XG5cdFx0XHR0aGlzLnZpZXcucmVvcmRlclNlbGVjdGVkKCk7XG5cdFx0fVxuXHR9XG59XG4iXX0=
1020
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Ryb3Bkb3duL2Ryb3Bkb3duLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUVaLFlBQVksRUFFWixTQUFTLEVBRVQsWUFBWSxFQUVaLFdBQVcsRUFDWCxXQUFXLEVBRVgsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUF3QixNQUFNLGdCQUFnQixDQUFDO0FBRXpFLHlFQUF5RTtBQUN6RSxPQUFPLEVBRU4sRUFBRSxFQUNGLFlBQVksRUFDWixNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBR3RFLE9BQU8sRUFBa0Isb0JBQW9CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN2RixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7Ozs7OztBQUV2RTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHO0FBZ0tILE1BQU0sT0FBTyxRQUFRO2FBQ2Isa0JBQWEsR0FBRyxDQUFDLEFBQUosQ0FBSztJQUN6QixJQUFpRSxpQkFBaUI7UUFDakYsT0FBTyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDbkMsQ0FBQztJQUVELElBQStELGVBQWU7UUFDN0UsT0FBTyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzRCxDQUFDO0lBRUQsSUFBYyxZQUFZO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBYyxZQUFZLENBQUMsR0FBVTtRQUNwQyxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLENB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RTtnQkFFRSxTQUFTO3NCQUFyRCxXQUFXO3VCQUFDLDhCQUE4QjtnQkFFRSxnQkFBZ0I7c0JBQTVELFdBQVc7dUJBQUMsOEJBQThCO2dCQUlrQixLQUFLO3NCQUFqRSxXQUFXO3VCQUFDLHFDQUFxQzs7c0JBQUcsS0FBSztnQkFtTTFELFNBQVM7c0JBRFIsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRDb21wb25lbnQsXG5cdElucHV0LFxuXHRPdXRwdXQsXG5cdEV2ZW50RW1pdHRlcixcblx0RWxlbWVudFJlZixcblx0Q29udGVudENoaWxkLFxuXHRPbkluaXQsXG5cdFZpZXdDaGlsZCxcblx0QWZ0ZXJDb250ZW50SW5pdCxcblx0SG9zdExpc3RlbmVyLFxuXHRPbkRlc3Ryb3ksXG5cdEhvc3RCaW5kaW5nLFxuXHRUZW1wbGF0ZVJlZixcblx0QWZ0ZXJWaWV3SW5pdFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5cbi8vIE9ic2VydmFibGUgaW1wb3J0IGlzIHJlcXVpcmVkIGhlcmUgc28gdHlwZXNjcmlwdCBjYW4gY29tcGlsZSBjb3JyZWN0bHlcbmltcG9ydCB7XG5cdE9ic2VydmFibGUsXG5cdG9mLFxuXHRTdWJzY3JpcHRpb25cbn0gZnJvbSBcInJ4anNcIjtcblxuaW1wb3J0IHsgQWJzdHJhY3REcm9wZG93blZpZXcgfSBmcm9tIFwiLi9hYnN0cmFjdC1kcm9wZG93bi12aWV3LmNsYXNzXCI7XG5pbXBvcnQgeyBJMThuIH0gZnJvbSBcImNhcmJvbi1jb21wb25lbnRzLWFuZ3VsYXIvaTE4blwiO1xuaW1wb3J0IHsgRHJvcGRvd25TZXJ2aWNlIH0gZnJvbSBcIi4vZHJvcGRvd24uc2VydmljZVwiO1xuaW1wb3J0IHsgRWxlbWVudFNlcnZpY2UsIGdldFNjcm9sbGFibGVQYXJlbnRzIH0gZnJvbSBcImNhcmJvbi1jb21wb25lbnRzLWFuZ3VsYXIvdXRpbHNcIjtcbmltcG9ydCB7IGhhc1Njcm9sbGFibGVQYXJlbnRzIH0gZnJvbSBcImNhcmJvbi1jb21wb25lbnRzLWFuZ3VsYXIvdXRpbHNcIjtcblxuLyoqXG4gKiBEcm9wLWRvd24gbGlzdHMgZW5hYmxlIHVzZXJzIHRvIHNlbGVjdCBvbmUgb3IgbW9yZSBpdGVtcyBmcm9tIGEgbGlzdC5cbiAqXG4gKiAjIyMjIE9wZW5pbmcgYmVoYXZpb3IvTGlzdCBET00gcGxhY2VtZW50XG4gKiBCeSBkZWZhdWx0IHRoZSBkcm9wZG93biB3aWxsIHRyeSB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IHBsYWNlbWVudCBmb3IgdGhlIGRyb3Bkb3duIGxpc3QuXG4gKlxuICogSWYgaXQncyBub3QgY29udGFpbmVkIHdpdGhpbiBhbnkgc2Nyb2xsaW5nIGVsZW1lbnRzLCBpdCB3aWxsIG9wZW4gaW5saW5lLCBpZiBpdCBfaXNfXG4gKiBjb250YWluZWQgd2l0aGluIGEgc2Nyb2xsaW5nIGNvbnRhaW5lciBpdCB3aWxsIHRyeSB0byBvcGVuIGluIHRoZSBib2R5LCBvciBhbiBgY2RzLXBsYWNlaG9sZGVyYC5cbiAqXG4gKiBUbyBjb250cm9sIHRoaXMgYmVoYXZpb3IgeW91IGNhbiB1c2UgdGhlIGBhcHBlbmRJbmxpbmVgIGlucHV0OlxuICogLSBgW2FwcGVuZElubGluZV09XCJudWxsXCJgIGlzIHRoZSBkZWZhdWx0IChhdXRvIGRldGVjdGlvbilcbiAqIC0gYFthcHBlbmRJbmxpbmVdPVwiZmFsc2VcImAgd2lsbCBhbHdheXMgYXBwZW5kIHRvIHRoZSBib2R5L2BjZHMtcGxhY2Vob2xkZXJgXG4gKiAtIGBbYXBwZW5kSW5saW5lXT1cInRydWVcImAgd2lsbCBhbHdheXMgYXBwZW5kIGlubGluZSAobmV4dCB0byB0aGUgZHJvcGRvd24gYnV0dG9uKVxuICpcbiAqIEdldCBzdGFydGVkIHdpdGggaW1wb3J0aW5nIHRoZSBtb2R1bGU6XG4gKlxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgRHJvcGRvd25Nb2R1bGUgfSBmcm9tICdjYXJib24tY29tcG9uZW50cy1hbmd1bGFyJztcbiAqIGBgYFxuICpcbiAqIFtTZWUgZGVtb10oLi4vLi4vP3BhdGg9L3N0b3J5L2NvbXBvbmVudHMtZHJvcGRvd24tLWJhc2ljKVxuICovXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6IFwiY2RzLWRyb3Bkb3duLCBpYm0tZHJvcGRvd25cIixcblx0dGVtcGxhdGU6IGBcblx0XHRAaWYgKGxhYmVsICYmICFza2VsZXRvbikge1xuXHRcdFx0PGxhYmVsXG5cdFx0XHRbZm9yXT1cImlkXCJcblx0XHRcdGNsYXNzPVwiY2RzLS1sYWJlbFwiXG5cdFx0XHRbbmdDbGFzc109XCJ7XG5cdFx0XHRcdCdjZHMtLWxhYmVsLS1kaXNhYmxlZCc6IGRpc2FibGVkLFxuXHRcdFx0XHQnY2RzLS12aXN1YWxseS1oaWRkZW4nOiBoaWRlTGFiZWxcblx0XHRcdH1cIj5cblx0XHRcdFx0QGlmIChpc1RlbXBsYXRlKGxhYmVsKSkge1xuXHRcdFx0XHRcdDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJsYWJlbFwiIC8+XG5cdFx0XHRcdH0gQGVsc2Uge1xuXHRcdFx0XHRcdHt7bGFiZWx9fVxuXHRcdFx0XHR9XG5cdFx0XHQ8L2xhYmVsPlxuXHRcdH1cblx0XHQ8ZGl2XG5cdFx0XHRjbGFzcz1cImNkcy0tbGlzdC1ib3hcIlxuXHRcdFx0W25nQ2xhc3NdPVwie1xuXHRcdFx0XHQnY2RzLS1kcm9wZG93bic6IHR5cGUgIT09ICdtdWx0aScgJiYgIShza2VsZXRvbiAmJiBmbHVpZCksXG5cdFx0XHRcdCdjZHMtLW11bHRpc2VsZWN0JzogdHlwZSA9PT0gJ211bHRpJyxcblx0XHRcdFx0J2Nkcy0tbXVsdGktc2VsZWN0LS1zZWxlY3RlZCc6IHR5cGUgPT09ICdtdWx0aScgJiYgZ2V0U2VsZWN0ZWRDb3VudCgpID4gMCxcblx0XHRcdFx0J2Nkcy0tZHJvcGRvd24tLWxpZ2h0JzogdGhlbWUgPT09ICdsaWdodCcsXG5cdFx0XHRcdCdjZHMtLWxpc3QtYm94LS1saWdodCc6IHRoZW1lID09PSAnbGlnaHQnLFxuXHRcdFx0XHQnY2RzLS1saXN0LWJveC0taW5saW5lJzogaW5saW5lLFxuXHRcdFx0XHQnY2RzLS1za2VsZXRvbic6IHNrZWxldG9uLFxuXHRcdFx0XHQnY2RzLS1kcm9wZG93bi0tZGlzYWJsZWQgY2RzLS1saXN0LWJveC0tZGlzYWJsZWQnOiBkaXNhYmxlZCxcblx0XHRcdFx0J2Nkcy0tZHJvcGRvd24tLXJlYWRvbmx5JzogcmVhZG9ubHksXG5cdFx0XHRcdCdjZHMtLWRyb3Bkb3duLS1pbnZhbGlkJzogaW52YWxpZCxcblx0XHRcdFx0J2Nkcy0tZHJvcGRvd24tLXdhcm5pbmcgY2RzLS1saXN0LWJveC0td2FybmluZyc6IHdhcm4sXG5cdFx0XHRcdCdjZHMtLWRyb3Bkb3duLS1zbSBjZHMtLWxpc3QtYm94LS1zbSc6IHNpemUgPT09ICdzbScsXG5cdFx0XHRcdCdjZHMtLWRyb3Bkb3duLS1tZCBjZHMtLWxpc3QtYm94LS1tZCc6IHNpemUgPT09ICdtZCcsXG5cdFx0XHRcdCdjZHMtLWRyb3Bkb3duLS1sZyBjZHMtLWxpc3QtYm94LS1sZyc6IHNpemUgPT09ICdsZycsXG5cdFx0XHRcdCdjZHMtLWxpc3QtYm94LS1leHBhbmRlZCc6ICFtZW51SXNDbG9zZWQsXG5cdFx0XHRcdCdjZHMtLWxpc3QtYm94LS1pbnZhbGlkJzogaW52YWxpZFxuXHRcdFx0fVwiXG5cdFx0XHRbYXR0ci5kYXRhLWludmFsaWRdPVwiaW52YWxpZCA/IHRydWUgOiBudWxsXCI+XG5cdFx0XHRAaWYgKHNrZWxldG9uICYmIGZsdWlkKSB7XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJjZHMtLWxpc3QtYm94X19sYWJlbFwiPjwvZGl2PlxuXHRcdFx0fVxuXHRcdFx0PGJ1dHRvblxuXHRcdFx0XHQjZHJvcGRvd25CdXR0b25cblx0XHRcdFx0W2lkXT1cImlkXCJcblx0XHRcdFx0dHlwZT1cImJ1dHRvblwiXG5cdFx0XHRcdGNsYXNzPVwiY2RzLS1saXN0LWJveF9fZmllbGRcIlxuXHRcdFx0XHRbbmdDbGFzc109XCJ7J2EnOiAhbWVudUlzQ2xvc2VkfVwiXG5cdFx0XHRcdFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiIW1lbnVJc0Nsb3NlZFwiXG5cdFx0XHRcdFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuXHRcdFx0XHRbYXR0ci5hcmlhLXJlYWRvbmx5XT1cInJlYWRvbmx5XCJcblx0XHRcdFx0YXJpYS1oYXNwb3B1cD1cImxpc3Rib3hcIlxuXHRcdFx0XHQoY2xpY2spPVwiZGlzYWJsZWQgfHwgcmVhZG9ubHkgPyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkgOiB0b2dnbGVNZW51KClcIlxuXHRcdFx0XHQoZm9jdXMpPVwiZmx1aWQgPyBoYW5kbGVGb2N1cygkZXZlbnQpIDogbnVsbFwiXG5cdFx0XHRcdChibHVyKT1cImZsdWlkID8gaGFuZGxlRm9jdXMoJGV2ZW50KSA6IG9uQmx1cigpXCJcblx0XHRcdFx0W2F0dHIuZGlzYWJsZWRdPVwiZGlzYWJsZWQgPyB0cnVlIDogbnVsbFwiPlxuXHRcdFx0XHRAaWYgKHR5cGUgPT09ICdtdWx0aScgJiYgZ2V0U2VsZWN0ZWRDb3VudCgpID4gMCkge1xuXHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdChjbGljayk9XCJjbGVhclNlbGVjdGVkKClcIlxuXHRcdFx0XHRcdFx0KGtleWRvd24uZW50ZXIpPVwiY2xlYXJTZWxlY3RlZCgpXCJcblxuXHRcdFx0XHRcdFx0Y2xhc3M9XCJjZHMtLWxpc3QtYm94X19zZWxlY3Rpb24gY2RzLS10YWctLWZpbHRlciBjZHMtLWxpc3QtYm94X19zZWxlY3Rpb24tLW11bHRpXCJcblx0XHRcdFx0XHRcdHRhYmluZGV4PVwiMFwiXG5cdFx0XHRcdFx0XHRbdGl0bGVdPVwiY2xlYXJUZXh0XCI+XG5cdFx0XHRcdFx0XHR7e2dldFNlbGVjdGVkQ291bnQoKX19XG5cdFx0XHRcdFx0XHQ8c3ZnXG5cdFx0XHRcdFx0XHRcdGZvY3VzYWJsZT1cImZhbHNlXCJcblx0XHRcdFx0XHRcdFx0cHJlc2VydmVBc3BlY3RSYXRpbz1cInhNaWRZTWlkIG1lZXRcIlxuXHRcdFx0XHRcdFx0XHRzdHlsZT1cIndpbGwtY2hhbmdlOiB0cmFuc2Zvcm07XCJcblx0XHRcdFx0XHRcdFx0cm9sZT1cImltZ1wiXG5cdFx0XHRcdFx0XHRcdHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuXHRcdFx0XHRcdFx0XHR3aWR0aD1cIjE2XCJcblx0XHRcdFx0XHRcdFx0aGVpZ2h0PVwiMTZcIlxuXHRcdFx0XHRcdFx0XHR2aWV3Qm94PVwiMCAwIDE2IDE2XCJcblx0XHRcdFx0XHRcdFx0YXJpYS1oaWRkZW49XCJ0cnVlXCI+XG5cdFx0XHRcdFx0XHRcdDxwYXRoIGQ9XCJNMTIgNC43bC0uNy0uN0w4IDcuMyA0LjcgNGwtLjcuN0w3LjMgOCA0IDExLjNsLjcuN0w4IDguN2wzLjMgMy4zLjctLjdMOC43IDh6XCI+PC9wYXRoPlxuXHRcdFx0XHRcdFx0PC9zdmc+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdH1cblx0XHRcdFx0QGlmIChpc1JlbmRlclN0cmluZygpKSB7XG5cdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJjZHMtLWxpc3QtYm94X19sYWJlbFwiPnt7Z2V0RGlzcGxheVN0cmluZ1ZhbHVlKCkgfCBhc3luY319PC9zcGFuPlxuXHRcdFx0XHR9IEBlbHNlIHtcblx0XHRcdFx0XHQ8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cImdldFJlbmRlclRlbXBsYXRlQ29udGV4dCgpXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwiZGlzcGxheVZhbHVlXCIgLz5cblx0XHRcdFx0fVxuXHRcdFx0XHQ8c3BhbiBjbGFzcz1cImNkcy0tbGlzdC1ib3hfX21lbnUtaWNvblwiPlxuXHRcdFx0XHRcdEBpZiAoIXNrZWxldG9uKSB7XG5cdFx0XHRcdFx0XHQ8c3ZnXG5cdFx0XHRcdFx0XHRcdGNkc0ljb249XCJjaGV2cm9uLS1kb3duXCJcblx0XHRcdFx0XHRcdFx0c2l6ZT1cIjE2XCJcblx0XHRcdFx0XHRcdFx0W2F0dHIuYXJpYS1sYWJlbF09XCJtZW51QnV0dG9uTGFiZWxcIlxuXHRcdFx0XHRcdFx0XHRbbmdDbGFzc109XCJ7J2Nkcy0tbGlzdC1ib3hfX21lbnUtaWNvbi0tb3Blbic6ICFtZW51SXNDbG9zZWQgfVwiPlxuXHRcdFx0XHRcdFx0PC9zdmc+XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHQ8L2J1dHRvbj5cblx0XHRcdEBpZiAoaW52YWxpZCkge1xuXHRcdFx0XHQ8c3ZnXG5cdFx0XHRcdFx0Y2xhc3M9XCJjZHMtLWxpc3QtYm94X19pbnZhbGlkLWljb25cIlxuXHRcdFx0XHRcdGNkc0ljb249XCJ3YXJuaW5nLS1maWxsZWRcIlxuXHRcdFx0XHRcdHNpemU9XCIxNlwiPlxuXHRcdFx0XHQ8L3N2Zz5cblx0XHRcdH0gQGVsc2UgaWYod2Fybikge1xuXHRcdFx0XHQ8c3ZnXG5cdFx0XHRcdFx0Y2RzSWNvbj1cIndhcm5pbmctLWFsdC0tZmlsbGVkXCJcblx0XHRcdFx0XHRzaXplPVwiMTZcIlxuXHRcdFx0XHRcdGNsYXNzPVwiY2RzLS1saXN0LWJveF9faW52YWxpZC1pY29uIGNkcy0tbGlzdC1ib3hfX2ludmFsaWQtaWNvbi0td2FybmluZ1wiPlxuXHRcdFx0XHQ8L3N2Zz5cblx0XHRcdH1cblx0XHRcdDxkaXZcblx0XHRcdFx0I2Ryb3Bkb3duTWVudVxuXHRcdFx0XHRbbmdDbGFzc109XCJ7XG5cdFx0XHRcdFx0J2Nkcy0tbGlzdC1ib3gtLXVwJzogdGhpcy5kcm9wVXAgIT09IG51bGwgJiYgdGhpcy5kcm9wVXAgIT09IHVuZGVmaW5lZCA/IGRyb3BVcCA6IF9kcm9wVXBcblx0XHRcdFx0fVwiPlxuXHRcdFx0XHRAaWYgKCFtZW51SXNDbG9zZWQpIHtcblx0XHRcdFx0XHQ8bmctY29udGVudCAvPlxuXHRcdFx0XHR9XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L2Rpdj5cblx0XHRAaWYgKGZsdWlkKSB7XG5cdFx0XHQ8aHIgY2xhc3M9XCJjZHMtLWxpc3QtYm94X19kaXZpZGVyXCIgLz5cblx0XHR9XG5cdFx0QGlmIChpbnZhbGlkKSB7XG5cdFx0XHQ8ZGl2IGNsYXNzPVwiY2RzLS1mb3JtLXJlcXVpcmVtZW50XCI+XG5cdFx0XHRcdEBpZiAoaXNUZW1wbGF0ZShpbnZhbGlkVGV4dCkpIHtcblx0XHRcdFx0XHQ8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiaW52YWxpZFRleHRcIiAvPlxuXHRcdFx0XHR9IEBlbHNlIHtcblx0XHRcdFx0XHR7eyBpbnZhbGlkVGV4dCB9fVxuXHRcdFx0XHR9XG5cdFx0XHQ8L2Rpdj5cblx0XHR9IEBlbHNlIGlmICh3YXJuKSB7XG5cdFx0XHQ8ZGl2IGNsYXNzPVwiY2RzLS1mb3JtLXJlcXVpcmVtZW50XCI+XG5cdFx0XHRcdEBpZiAoaXNUZW1wbGF0ZSh3YXJuVGV4dCkpIHtcblx0XHRcdFx0XHQ8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwid2FyblRleHRcIiAvPlxuXHRcdFx0XHR9IEBlbHNlIHtcblx0XHRcdFx0XHR7e3dhcm5UZXh0fX1cblx0XHRcdFx0fVxuXHRcdFx0PC9kaXY+XG5cdFx0fSBAZWxzZSBpZihoZWxwZXJUZXh0ICYmICFmbHVpZCkge1xuXHRcdFx0PGRpdlxuXHRcdFx0XHRjbGFzcz1cImNkcy0tZm9ybV9faGVscGVyLXRleHRcIlxuXHRcdFx0XHRbbmdDbGFzc109XCJ7XG5cdFx0XHRcdFx0J2Nkcy0tZm9ybV9faGVscGVyLXRleHQtLWRpc2FibGVkJzogZGlzYWJsZWRcblx0XHRcdFx0fVwiPlxuXHRcdFx0XHRAaWYgKGlzVGVtcGxhdGUoaGVscGVyVGV4dCkpIHtcblx0XHRcdFx0XHQ8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiaGVscGVyVGV4dFwiIC8+XG5cdFx0XHRcdH0gQGVsc2Uge1xuXHRcdFx0XHRcdHt7aGVscGVyVGV4dH19XG5cdFx0XHRcdH1cblx0XHRcdDwvZGl2PlxuXHRcdH1cblx0YCxcblx0cHJvdmlkZXJzOiBbXG5cdFx0e1xuXHRcdFx0cHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG5cdFx0XHR1c2VFeGlzdGluZzogRHJvcGRvd24sXG5cdFx0XHRtdWx0aTogdHJ1ZVxuXHRcdH1cblx0XVxufSlcbmV4cG9ydCBjbGFzcyBEcm9wZG93biBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG5cdHN0YXRpYyBkcm9wZG93bkNvdW50ID0gMDtcblx0QEhvc3RCaW5kaW5nKFwiY2xhc3MuY2RzLS1saXN0LWJveF9fd3JhcHBlci0tZmx1aWQtLWludmFsaWRcIikgZ2V0IGZsdWlkSW52YWxpZENsYXNzKCkge1xuXHRcdHJldHVybiB0aGlzLmludmFsaWQgJiYgdGhpcy5mbHVpZDtcblx0fVxuXG5cdEBIb3N0QmluZGluZyhcImNsYXNzLmNkcy0tbGlzdC1ib3hfX3dyYXBwZXItLWZsdWlkLS1mb2N1c1wiKSBnZXQgZmx1aWRGb2N1c0NsYXNzKCkge1xuXHRcdHJldHVybiB0aGlzLmZsdWlkICYmIHRoaXMuX2lzRm9jdXNlZCAmJiB0aGlzLm1lbnVJc0Nsb3NlZDtcblx0fVxuXG5cdHByb3RlY3RlZCBnZXQgd3JpdHRlblZhbHVlKCkge1xuXHRcdHJldHVybiB0aGlzLl93cml0dGVuVmFsdWU7XG5cdH1cblxuXHRwcm90ZWN0ZWQgc2V0IHdyaXR0ZW5WYWx1ZSh2YWw6IGFueVtdKSB7XG5cdFx0aWYgKHZhbCAmJiB2YWwubGVuZ3RoID09PSAwKSB7XG5cdFx0XHR0aGlzLmNsZWFyU2VsZWN0ZWQoKTtcblx0XHR9XG5cdFx0dGhpcy5fd3JpdHRlblZhbHVlID0gdmFsO1xuXHR9XG5cblx0QElucHV0KCkgaWQgPSBgZHJvcGRvd24tJHtEcm9wZG93bi5kcm9wZG93bkNvdW50Kyt9YDtcblx0LyoqXG5cdCAqIExhYmVsIGZvciB0aGUgZHJvcGRvd24uXG5cdCAqL1xuXHRASW5wdXQoKSBsYWJlbDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55Pjtcblx0LyoqXG5cdCAqIEhpZGUgbGFiZWwgd2hpbGUga2VlcGluZyBpdCBhY2Nlc3NpYmxlIGZvciBzY3JlZW4gcmVhZGVyc1xuXHQgKi9cblx0QElucHV0KCkgaGlkZUxhYmVsID0gZmFsc2U7XG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBvcHRpb25hbCBoZWxwZXIgdGV4dC5cblx0ICovXG5cdEBJbnB1dCgpIGhlbHBlclRleHQ6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT47XG5cdC8qKlxuXHQgKiBWYWx1ZSBkaXNwbGF5ZWQgaWYgbm8gaXRlbSBpcyBzZWxlY3RlZC5cblx0ICovXG5cdEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gXCJcIjtcblx0LyoqXG5cdCAqIFRoZSBzZWxlY3RlZCB2YWx1ZSBmcm9tIHRoZSBgRHJvcGRvd25gLiBDYW4gYmUgYSBzdHJpbmcgb3IgdGVtcGxhdGUuXG5cdCAqL1xuXHRASW5wdXQoKSBkaXNwbGF5VmFsdWU6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT4gPSBcIlwiO1xuXHQvKipcblx0ICogU2V0cyB0aGUgb3B0aW9uYWwgY2xlYXIgYnV0dG9uIHRvb2x0aXAgdGV4dC5cblx0ICovXG5cdEBJbnB1dCgpIGNsZWFyVGV4dDogc3RyaW5nID0gdGhpcy5pMThuLmdldCgpLkRST1BET1dOLkNMRUFSO1xuXHQvKipcblx0ICogU2l6ZSB0byByZW5kZXIgdGhlIGRyb3Bkb3duIGZpZWxkLlxuXHQgKi9cblx0QElucHV0KCkgc2l6ZTogXCJzbVwiIHwgXCJtZFwiIHwgXCJsZ1wiID0gXCJtZFwiO1xuXHQvKipcblx0ICogRGVmaW5lcyB3aGV0aGVyIG9yIG5vdCB0aGUgYERyb3Bkb3duYCBzdXBwb3J0cyBzZWxlY3RpbmcgbXVsdGlwbGUgaXRlbXMgYXMgb3Bwb3NlZCB0byBzaW5nbGVcblx0ICogaXRlbSBzZWxlY3Rpb24uXG5cdCAqL1xuXHRASW5wdXQoKSB0eXBlOiBcInNpbmdsZVwiIHwgXCJtdWx0aVwiID0gXCJzaW5nbGVcIjtcblx0LyoqXG5cdCAqIEBkZXByZWNhdGVkIHNpbmNlIHY1IC0gVXNlIGBjZHNMYXllcmAgZGlyZWN0aXZlIGluc3RlYWRcblx0ICogYGxpZ2h0YCBvciBgZGFya2AgZHJvcGRvd24gdGhlbWVcblx0ICovXG5cdEBJbnB1dCgpIHRoZW1lOiBcImxpZ2h0XCIgfCBcImRhcmtcIiA9IFwiZGFya1wiO1xuXHQvKipcblx0ICogU2V0IHRvIGB0cnVlYCB0byBkaXNhYmxlIHRoZSBkcm9wZG93bi5cblx0ICovXG5cdEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG5cdC8qKlxuXHQgKiBTZXQgdG8gYHRydWVgIGZvciBhIHJlYWRvbmx5IHN0YXRlLlxuXHQgKi9cblx0QElucHV0KCkgcmVhZG9ubHkgPSBmYWxzZTtcblx0LyoqXG5cdCAqIFNldCB0byBgdHJ1ZWAgZm9yIGEgbG9hZGluZyBkcm9wZG93bi5cblx0ICovXG5cdEBJbnB1dCgpIHNrZWxldG9uID0gZmFsc2U7XG5cdC8qKlxuXHQgKiBTZXQgdG8gYHRydWVgIGZvciBhbiBpbmxpbmUgZHJvcGRvd24uXG5cdCAqL1xuXHRASW5wdXQoKSBpbmxpbmUgPSBmYWxzZTtcblx0LyoqXG5cdCAqIFNldCB0byBgdHJ1ZWAgZm9yIGEgZHJvcGRvd24gd2l0aG91dCBhcnJvdyBrZXkgYWN0aXZhdGlvbi5cblx0ICovXG5cdEBJbnB1dCgpIGRpc2FibGVBcnJvd0tleXMgPSBmYWxzZTtcblx0LyoqXG5cdCAqIFNldCB0byBgdHJ1ZWAgZm9yIGludmFsaWQgc3RhdGUuXG5cdCAqL1xuXHRASW5wdXQoKSBpbnZhbGlkID0gZmFsc2U7XG5cdC8qKlxuXHQgKiBWYWx1ZSBkaXNwbGF5ZWQgaWYgZHJvcGRvd24gaXMgaW4gaW52YWxpZCBzdGF0ZS5cblx0ICovXG5cdEBJbnB1dCgpIGludmFsaWRUZXh0OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+O1xuXHQvKipcblx0ICAqIFNldCB0byBgdHJ1ZWAgdG8gc2hvdyBhIHdhcm5pbmcgKGNvbnRlbnRzIHNldCBieSB3YXJuaW5nVGV4dClcblx0ICAqL1xuXHRASW5wdXQoKSB3YXJuID0gZmFsc2U7XG5cdC8qKlxuXHQgKiBTZXRzIHRoZSB3YXJuaW5nIHRleHRcblx0ICovXG5cdEBJbnB1dCgpIHdhcm5UZXh0OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+O1xuXHQvKipcblx0ICogc2V0IHRvIGB0cnVlYCB0byBwbGFjZSB0aGUgZHJvcGRvd24gdmlldyBpbmxpbmUgd2l0aCB0aGUgY29tcG9uZW50XG5cdCAqL1xuXHRASW5wdXQoKSBhcHBlbmRJbmxpbmU6IGJvb2xlYW4gPSBudWxsO1xuXHQvKipcblx0ICogUXVlcnkgc3RyaW5nIGZvciB0aGUgZWxlbWVudCB0aGF0IGNvbnRhaW5zIHRoZSBgRHJvcGRvd25gLlxuXHQgKiBVc2VkIHRvIHRyaWdnZXIgY2xvc2luZyB0aGUgZHJvcGRvd24gaWYgaXQgc2Nyb2xscyBvdXRzaWRlIG9mIHRoZSB2aWV3cG9ydCBvZiB0aGUgYHNjcm9sbGFibGVDb250YWluZXJgLlxuXHQgKi9cblx0QElucHV0KCkgc2Nyb2xsYWJsZUNvbnRhaW5lcjogc3RyaW5nO1xuXHQvKipcblx0ICogU3BlY2lmaWVzIHRoZSBwcm9wZXJ0eSB0byBiZSB1c2VkIGFzIHRoZSByZXR1cm4gdmFsdWUgdG8gYG5nTW9kZWxgXG5cdCAqL1xuXHRASW5wdXQoKSBpdGVtVmFsdWVLZXk6IHN0cmluZztcblx0LyoqXG5cdCAqIFNwZWNpZnkgZmVlZGJhY2sgKG1vZGUpIG9mIHRoZSBzZWxlY3Rpb24uXG5cdCAqIGB0b3BgOiBzZWxlY3RlZCBpdGVtIGp1bXBzIHRvIHRvcFxuXHQgKiBgZml4ZWRgOiBzZWxlY3RlZCBpdGVtIHN0YXlzIGF0IGl0J3MgcG9zaXRpb25cblx0ICogYHRvcC1hZnRlci1yZW9wZW5gOiBzZWxlY3RlZCBpdGVtIGp1bXAgdG8gdG9wIGFmdGVyIHJlb3BlbiBkcm9wZG93blxuXHQgKi9cblx0QElucHV0KCkgc2VsZWN0aW9uRmVlZGJhY2s6IFwidG9wXCIgfCBcImZpeGVkXCIgfCBcInRvcC1hZnRlci1yZW9wZW5cIiA9IFwidG9wLWFmdGVyLXJlb3BlblwiO1xuXHQvKipcblx0ICogQWNjZXNzaWJsZSBsYWJlbCBmb3IgdGhlIGJ1dHRvbiB0aGF0IG9wZW5zIHRoZSBkcm9wZG93biBsaXN0LlxuXHQgKiBEZWZhdWx0cyB0byB0aGUgYERST1BET1dOLk9QRU5gIHZhbHVlIGZyb20gdGhlIGkxOG4gc2VydmljZS5cblx0ICovXG5cdEBJbnB1dCgpIG1lbnVCdXR0b25MYWJlbCA9IHRoaXMuaTE4bi5nZXQoKS5EUk9QRE9XTi5PUEVOO1xuXHQvKipcblx0ICogUHJvdmlkZXMgdGhlIGxhYmVsIGZvciB0aGUgXCIjIHNlbGVjdGVkXCIgdGV4dC5cblx0ICogRGVmYXVsdHMgdG8gdGhlIGBEUk9QRE9XTi5TRUxFQ1RFRGAgdmFsdWUgZnJvbSB0aGUgaTE4biBzZXJ2aWNlLlxuXHQgKi9cblx0QElucHV0KCkgc2VsZWN0ZWRMYWJlbCA9IHRoaXMuaTE4bi5nZXQoKS5EUk9QRE9XTi5TRUxFQ1RFRDtcblx0LyoqXG5cdCAqIE92ZXJyaWRlcyB0aGUgYXV0b21hdGljIGRyb3BVcC5cblx0ICovXG5cdEBJbnB1dCgpIGRyb3BVcDogYm9vbGVhbjtcblx0LyoqXG5cdCAqIEVtaXRzIHNlbGVjdGlvbiBldmVudHMuXG5cdCAqL1xuXHRAT3V0cHV0KCkgc2VsZWN0ZWQ6IEV2ZW50RW1pdHRlcjxPYmplY3Q+ID0gbmV3IEV2ZW50RW1pdHRlcjxPYmplY3Q+KCk7XG5cdC8qKlxuXHQgKiBFbWl0cyBldmVudCBub3RpZnlpbmcgdG8gb3RoZXIgY2xhc3NlcyB0aGF0IHRoZSBgRHJvcGRvd25gIGhhcyBiZWVuIGNsb3NlZCAoY29sbGFwc2VkKS5cblx0ICovXG5cdEBPdXRwdXQoKSBvbkNsb3NlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXHQvKipcblx0ICogRW1pdHMgZXZlbnQgbm90aWZ5aW5nIHRvIG90aGVyIGNsYXNzZXMgdGhhdCB0aGUgYERyb3Bkb3duYCBoYXMgYmVlbiBjbG9zZWQgKGNvbGxhcHNlZCkuXG5cdCAqL1xuXHRAT3V0cHV0KCkgY2xvc2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cblx0LyoqXG5cdCAqIE1haW50YWlucyBhIHJlZmVyZW5jZSB0byB0aGUgYEFic3RyYWN0RHJvcGRvd25WaWV3YCBvYmplY3Qgd2l0aGluIHRoZSBjb250ZW50IERPTS5cblx0ICovXG5cdEBDb250ZW50Q2hpbGQoQWJzdHJhY3REcm9wZG93blZpZXcsIHsgc3RhdGljOiB0cnVlIH0pIHZpZXc6IEFic3RyYWN0RHJvcGRvd25WaWV3O1xuXHQvKipcblx0ICogTWFpbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSB2aWV3IERPTSBlbGVtZW50IG9mIHRoZSBgRHJvcGRvd25gIGJ1dHRvbi5cblx0ICovXG5cdEBWaWV3Q2hpbGQoXCJkcm9wZG93bkJ1dHRvblwiLCB7IHN0YXRpYzogdHJ1ZSB9KSBkcm9wZG93bkJ1dHRvbjtcblx0LyoqXG5cdCAqIFZpZXdDaGlkIG9mIHRoZSBkcm9wZG93biB2aWV3LlxuXHQgKi9cblx0QFZpZXdDaGlsZChcImRyb3Bkb3duTWVudVwiLCB7IHN0YXRpYzogdHJ1ZSB9KSBkcm9wZG93bk1lbnU7XG5cblx0QEhvc3RCaW5kaW5nKFwiY2xhc3MuY2RzLS1kcm9wZG93bl9fd3JhcHBlclwiKSBob3N0Q2xhc3MgPSB0cnVlO1xuXG5cdEBIb3N0QmluZGluZyhcImNsYXNzLmNkcy0tbGlzdC1ib3hfX3dyYXBwZXJcIikgaG9zdFdyYXBwZXJDbGFzcyA9IHRydWU7XG5cdC8qKlxuXHQgKiBFeHBlcmltZW50YWw6IGVuYWJsZSBmbHVpZCBzdGF0ZVxuXHQgKi9cblx0QEhvc3RCaW5kaW5nKFwiY2xhc3MuY2RzLS1saXN0LWJveF9fd3JhcHBlci0tZmx1aWRcIikgQElucHV0KCkgZmx1aWQgPSBmYWxzZTtcblxuXHQvKipcblx0ICogU2V0IHRvIGB0cnVlYCBpZiB0aGUgZHJvcGRvd24gaXMgY2xvc2VkIChub3QgZXhwYW5kZWQpLlxuXHQgKi9cblx0bWVudUlzQ2xvc2VkID0gdHJ1ZTtcblxuXHQvKipcblx0ICogY29udHJvbHMgd2hldGhlciB0aGUgYGRyb3AtdXBgIGNsYXNzIGlzIGFwcGxpZWRcblx0ICovXG5cdF9kcm9wVXAgPSBmYWxzZTtcblxuXHQvLyAuYmluZCBjcmVhdGVzIGEgbmV3IGZ1bmN0aW9uLCBzbyB3ZSBkZWNsYXJlIHRoZSBtZXRob2RzIGJlbG93XG5cdC8vIGJ1dCAuYmluZCB0aGVtIHVwIGhlcmVcblx0bm9vcCA9IHRoaXMuX25vb3AuYmluZCh0aGlzKTtcblx0b3V0c2lkZUNsaWNrID0gdGhpcy5fb3V0c2lkZUNsaWNrLmJpbmQodGhpcyk7XG5cdG91dHNpZGVLZXkgPSB0aGlzLl9vdXRzaWRlS2V5LmJpbmQodGhpcyk7XG5cdGtleWJvYXJkTmF2ID0gdGhpcy5fa2V5Ym9hcmROYXYuYmluZCh0aGlzKTtcblxuXHRwcm90ZWN0ZWQgdmlzaWJpbGl0eVN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuXHRwcm90ZWN0ZWQgb25Ub3VjaGVkQ2FsbGJhY2s6ICgpID0+IHZvaWQgPSB0aGlzLl9ub29wO1xuXG5cdHByb3RlY3RlZCBfaXNGb2N1c2VkID0gZmFsc2U7XG5cblx0Ly8gcHJpbWFyaWx5IHVzZWQgdG8gY2FwdHVyZSBhbmQgcHJvcGFnYXRlIGlucHV0IHRvIGB3cml0ZVZhbHVlYCBiZWZvcmUgdGhlIGNvbnRlbnQgaXMgYXZhaWxhYmxlXG5cdHByaXZhdGUgX3dyaXR0ZW5WYWx1ZTogYW55ID0gW107XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgRHJvcGRvd24uXG5cdCAqL1xuXHRjb25zdHJ1Y3Rvcihcblx0XHRwcm90ZWN0ZWQgZWxlbWVudFJlZjogRWxlbWVudFJlZixcblx0XHRwcm90ZWN0ZWQgaTE4bjogSTE4bixcblx0XHRwcm90ZWN0ZWQgZHJvcGRvd25TZXJ2aWNlOiBEcm9wZG93blNlcnZpY2UsXG5cdFx0cHJvdGVjdGVkIGVsZW1lbnRTZXJ2aWNlOiBFbGVtZW50U2VydmljZSkge31cblxuXHQvKipcblx0ICogVXBkYXRlcyB0aGUgYHR5cGVgIHByb3BlcnR5IGluIHRoZSBgQENvbnRlbnRDaGlsZGAuXG5cdCAqIFRoZSBgdHlwZWAgcHJvcGVydHkgc3BlY2lmaWVzIHdoZXRoZXIgdGhlIGBEcm9wZG93bmAgYWxsb3dzIHNpbmdsZSBzZWxlY3Rpb24gb3IgbXVsdGkgc2VsZWN0aW9uLlxuXHQgKi9cblx0bmdPbkluaXQoKSB7XG5cdFx0aWYgKHRoaXMudmlldykge1xuXHRcdFx0dGhpcy52aWV3LnR5cGUgPSB0aGlzLnR5cGU7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEluaXRpYWxpemVzIGNsYXNzZXMgYW5kIHN1YnNjcmliZXMgdG8gZXZlbnRzIGZvciBzaW5nbGUgb3IgbXVsdGkgc2VsZWN0aW9uLlxuXHQgKi9cblx0bmdBZnRlckNvbnRlbnRJbml0KCkge1xuXHRcdGlmICghdGhpcy52aWV3KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmICgodGhpcy53cml0dGVuVmFsdWUgJiYgdGhpcy53cml0dGVuVmFsdWUubGVuZ3RoKSB8fCB0eXBlb2YgdGhpcy53cml0dGVuVmFsdWUgPT09IFwibnVtYmVyXCIpIHtcblx0XHRcdHRoaXMud3JpdGVWYWx1ZSh0aGlzLndyaXR0ZW5WYWx1ZSk7XG5cdFx0fVxuXHRcdHRoaXMudmlldy50eXBlID0gdGhpcy50eXBlO1xuXHRcdHRoaXMudmlldy5zaXplID0gdGhpcy5zaXplO1xuXG5cdFx0Ly8gZnVuY3Rpb24gdG8gY2hlY2sgaWYgdGhlIGV2ZW50IGlzIG9yZ2FuaWMgKGlzVXBkYXRlID09PSBmYWxzZSkgb3IgcHJvZ3JhbW1hdGljXG5cdFx0Y29uc3QgaXNVcGRhdGUgPSBldmVudCA9PiBldmVudCAmJiBldmVudC5pc1VwZGF0ZTtcblxuXHRcdHRoaXMudmlldy5zZWxlY3Quc3Vic2NyaWJlKGV2ZW50ID0+IHtcblx0XHRcdGlmICh0aGlzLnR5cGUgPT09IFwic2luZ2xlXCIgJiYgIWlzVXBkYXRlKGV2ZW50KSAmJiAhQXJyYXkuaXNBcnJheShldmVudCkpIHtcblx0XHRcdFx0dGhpcy5jbG9zZU1lbnUoKTtcblx0XHRcdFx0aWYgKGV2ZW50Lml0ZW0gJiYgZXZlbnQuaXRlbS5zZWxlY3RlZCkge1xuXHRcdFx0XHRcdGlmICh0aGlzLml0ZW1WYWx1ZUtleSkge1xuXHRcdFx0XHRcdFx0dGhpcy5wcm9wYWdhdGVDaGFuZ2UoZXZlbnQuaXRlbVt0aGlzLml0ZW1WYWx1ZUtleV0pO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0aGlzLnByb3BhZ2F0ZUNoYW5nZShldmVudC5pdGVtKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy5wcm9wYWdhdGVDaGFuZ2UobnVsbCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMudHlwZSA9PT0gXCJtdWx0aVwiICYmICFpc1VwZGF0ZShldmVudCkpIHtcblx0XHRcdFx0Ly8gaWYgd2UgaGF2ZSBhIGB2YWx1ZWAgc2VsZWN0b3IgYW5kIHNlbGVjdGVkIGl0ZW1zIG1hcCB0aGVtIGFwcHJvcHJpYXRlbHlcblx0XHRcdFx0aWYgKHRoaXMuaXRlbVZhbHVlS2V5ICYmIHRoaXMudmlldy5nZXRTZWxlY3RlZCgpKSB7XG5cdFx0XHRcdFx0Y29uc3QgdmFsdWVzID0gdGhpcy52aWV3LmdldFNlbGVjdGVkKCkubWFwKGl0ZW0gPT4gaXRlbVt0aGlzLml0ZW1WYWx1ZUtleV0pO1xuXHRcdFx0XHRcdHRoaXMucHJvcGFnYXRlQ2hhbmdlKHZhbHVlcyk7XG5cdFx0XHRcdFx0Ly8gb3RoZXJ3aXNlIGp1c3QgcGFzcyB1cCB0aGUgdmFsdWVzIGZyb20gYGdldFNlbGVjdGVkYFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMucHJvcGFnYXRlQ2hhbmdlKHRoaXMudmlldy5nZXRTZWxlY3RlZCgpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Ly8gb25seSBlbWl0IHNlbGVjdGVkIGZvciBcIm9yZ2FuaWNcIiBzZWxlY3Rpb25zXG5cdFx0XHRpZiAoIWlzVXBkYXRlKGV2ZW50KSkge1xuXHRcdFx0XHR0aGlzLmNoZWNrRm9yUmVvcmRlcigpO1xuXHRcdFx0XHR0aGlzLnNlbGVjdGVkLmVtaXQoZXZlbnQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0bmdBZnRlclZpZXdJbml0KCkge1xuXHRcdC8vIGlmIGFwcGVuZElubGluZSBpcyBkZWZhdWx0IHZhbHVlZCAobnVsbCkgd2Ugc2hvdWxkOlxuXHRcdC8vIDEuIGlmIHRoZXJlIGFyZSBzY3JvbGxhYmxlIHBhcmVudHMgKG5vdCBpbmNsdWRpbmcgYm9keSkgZG9uJ3QgYXBwZW5kIGlubGluZVxuXHRcdC8vICAgIHRoaXMgc2hvdWxkIGFsc28gY292ZXIgdGhlIGNhc2Ugd2hlcmUgdGhlIGRyb3Bkb3duIGlzIGluIGEgbW9kYWxcblx0XHQvLyAgICAod2hlcmUgd2UgX2RvXyB3YW50IHRvIGFwcGVuZCB0byB0aGUgcGxhY2Vob2xkZXIpXG5cdFx0aWYgKHRoaXMuYXBwZW5kSW5saW5lID09PSBudWxsICYmIGhhc1Njcm9sbGFibGVQYXJlbnRzKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KSkge1xuXHRcdFx0dGhpcy5hcHBlbmRJbmxpbmUgPSBmYWxzZTtcblx0XHRcdC8vIDIuIG90aGVyd2lzZSB3ZSBzaG91bGQgYXBwZW5kIGlubGluZVxuXHRcdH0gZWxzZSBpZiAodGhpcy5hcHBlbmRJbmxpbmUgPT09IG51bGwpIHtcblx0XHRcdHRoaXMuYXBwZW5kSW5saW5lID0gdHJ1ZTtcblx0XHR9XG5cdFx0dGhpcy5jaGVja0ZvclJlb3JkZXIoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmluZyB0aGUgYERyb3Bkb3duYCBmcm9tIHRoZSBib2R5IGlmIGl0IGlzIGFwcGVuZGVkIHRvIHRoZSBib2R5LlxuXHQgKi9cblx0bmdPbkRlc3Ryb3koKSB7XG5cdFx0aWYgKCF0aGlzLmFwcGVuZElubGluZSkge1xuXHRcdFx0dGhpcy5fYXBwZW5kVG9Ecm9wZG93bigpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBQcm9wYWdhdGVzIHRoZSBpbmplY3RlZCBgdmFsdWVgLlxuXHQgKi9cblx0d3JpdGVWYWx1ZSh2YWx1ZTogYW55KSB7XG5cdFx0Ly8gY2FjaGUgdGhlIHdyaXR0ZW4gdmFsdWUgc28gd2UgY2FuIHVzZSBpdCBpbiBgQWZ0ZXJDb250ZW50SW5pdGBcblx0XHR0aGlzLndyaXR0ZW5WYWx1ZSA9IHZhbHVlO1xuXHRcdHRoaXMudmlldy5vbkl0ZW1zUmVhZHkoKCkgPT4ge1xuXHRcdFx0Ly8gcHJvcGFnYXRlIG51bGwvZmFsc2V5IGFzIGFuIGFycmF5IChkZXNlbGVjdCBldmVyeXRoaW5nKVxuXHRcdFx0aWYgKCF2YWx1ZSkge1xuXHRcdFx0XHR0aGlzLnZpZXcucHJvcGFnYXRlU2VsZWN0ZWQoW3ZhbHVlXSk7XG5cdFx0XHR9IGVsc2UgaWYgKHRoaXMudHlwZSA9PT0gXCJzaW5nbGVcIikge1xuXHRcdFx0XHRpZiAodGhpcy5pdGVtVmFsdWVLZXkpIHtcblx0XHRcdFx0XHQvLyBjbG9uZSB0aGUgc3BlY2lmaWVkIGl0ZW0gYW5kIHVwZGF0ZSBpdHMgc3RhdGVcblx0XHRcdFx0XHRjb25zdCBuZXdWYWx1ZSA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMudmlldy5nZXRMaXN0SXRlbXMoKS5maW5kKGl0ZW0gPT4gaXRlbVt0aGlzLml0ZW1WYWx1ZUtleV0gPT09IHZhbHVlKSk7XG5cdFx0XHRcdFx0bmV3VmFsdWUuc2VsZWN0ZWQgPSB0cnVlO1xuXHRcdFx0XHRcdHRoaXMudmlldy5wcm9wYWdhdGVTZWxlY3RlZChbbmV3VmFsdWVdKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBwYXNzIHRoZSBzaW5ndWxhciB2YWx1ZSBhcyBhbiBhcnJheSBvZiBMaXN0SXRlbVxuXHRcdFx0XHRcdHRoaXMudmlldy5wcm9wYWdhdGVTZWxlY3RlZChbdmFsdWVdKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKHRoaXMuaXRlbVZhbHVlS2V5KSB7XG5cdFx0XHRcdFx0Ly8gY2xvbmUgdGhlIGl0ZW1zIGFuZCB1cGRhdGUgdGhlaXIgc3RhdGUgYmFzZWQgb24gdGhlIHJlY2VpdmVkIHZhbHVlIGFycmF5XG5cdFx0XHRcdFx0Ly8gdGhpcyB3YXkgd2UgZG9uJ3QgbG9zZSBhbnkgYWRkaXRpb25hbCBtZXRhZGF0YSB0aGF0IG1heSBiZSBwYXNzZWQgaW4gdmlhIHRoZSBgaXRlbXNgIElucHV0XG5cdFx0XHRcdFx0bGV0IG5ld1ZhbHVlcyA9IFtdO1xuXHRcdFx0XHRcdGZvciAoY29uc3QgdiBvZiB2YWx1ZSkge1xuXHRcdFx0XHRcdFx0Zm9yIChjb25zdCBpdGVtIG9mIHRoaXMudmlldy5nZXRMaXN0SXRlbXMoKSkge1xuXHRcdFx0XHRcdFx0XHRpZiAoaXRlbVt0aGlzLml0ZW1WYWx1ZUtleV0gPT09IHYpIHtcblx0XHRcdFx0XHRcdFx0XHRuZXdWYWx1ZXMucHVzaChPYmplY3QuYXNzaWduKHt9LCBpdGVtLCB7IHNlbGVjdGVkOiB0cnVlIH0pKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0aGlzLnZpZXcucHJvcGFnYXRlU2VsZWN0ZWQobmV3VmFsdWVzKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyB3ZSBjYW4gc2FmZWx5IGFzc3VtZSB3ZSdyZSBwYXNzaW5nIGFuIGFycmF5IG9mIGBMaXN0SXRlbWBzXG5cdFx0XHRcdFx0dGhpcy52aWV3LnByb3BhZ2F0ZVNlbGVjdGVkKHZhbHVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0dGhpcy5jaGVja0ZvclJlb3JkZXIoKTtcblx0XHR9KTtcblx0fVxuXG5cdG9uQmx1cigpIHtcblx0XHR0aGlzLm9uVG91Y2hlZENhbGxiYWNrKCk7XG5cdH1cblxuXHRyZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpIHtcblx0XHR0aGlzLnByb3BhZ2F0ZUNoYW5nZSA9IGZuO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlZ2lzdGVyaW5nIHRoZSBmdW5jdGlvbiBpbmplY3RlZCB0byBjb250cm9sIHRoZSB0b3VjaCB1c2Ugb2YgdGhlIGBEcm9wZG93bmAuXG5cdCAqL1xuXHRyZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KSB7XG5cdFx0dGhpcy5vblRvdWNoZWRDYWxsYmFjayA9IGZuO1xuXHR9XG5cblx0LyoqXG5cdCAqIGZ1bmN0aW9uIHBhc3NlZCBpbiBieSBgcmVnaXN0ZXJPbkNoYW5nZWBcblx0ICovXG5cdHByb3BhZ2F0ZUNoYW5nZSA9IChfOiBhbnkpID0+IHsgfTtcblxuXHQvKipcblx0ICogYENvbnRyb2xWYWx1ZUFjY2Vzc29yYCBtZXRob2QgdG8gcHJvZ3JhbW1hdGljYWxseSBkaXNhYmxlIHRoZSBkcm9wZG93bi5cblx0ICpcblx0ICogZXg6IGB0aGlzLmZvcm1Hcm91cC5nZXQoXCJteURyb3Bkb3duXCIpLmRpc2FibGUoKTtgXG5cdCAqXG5cdCAqIEBwYXJhbSBpc0Rpc2FibGVkIGB0cnVlYCB0byBkaXNhYmxlIHRoZSBpbnB1dFxuXHQgKi9cblx0c2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKSB7XG5cdFx0dGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG5cdH1cblxuXHQvKipcblx0ICogQWRkcyBrZXlib2FyZCBmdW5jdGlvbmFsaXR5IGZvciBuYXZpZ2F0aW9uLCBzZWxlY3Rpb24gYW5kIGNsb3Npbmcgb2YgdGhlIGBEcm9wZG93bmAuXG5cdCAqL1xuXHRASG9zdExpc3RlbmVyKFwia2V5ZG93blwiLCBbXCIkZXZlbnRcIl0pXG5cdG9uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuXHRcdGlmICh0aGlzLnJlYWRvbmx5KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKChldmVudC5rZXkgPT09IFwiRXNjYXBlXCIpICYmICF0aGlzLm1lbnVJc0Nsb3NlZCkge1xuXHRcdFx0ZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7ICAvLyBkb24ndCB1bmludGVudGlvbmFsbHkgY2xvc2Ugb3RoZXIgd2lkZ2V0cyB0aGF0IGxpc3RlbiBmb3IgRXNjYXBlXG5cdFx0fVxuXHRcdGlmIChldmVudC5rZXkgPT09IFwiRXNjYXBlXCIpIHtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHR0aGlzLmNsb3NlTWVudSgpO1xuXHRcdFx0dGhpcy5kcm9wZG93bkJ1dHRvbi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG5cdFx0fSBlbHNlIGlmICh0aGlzLm1lbnVJc0Nsb3NlZCAmJiAoZXZlbnQua2V5ID09PSBcIiBcIiB8fCBldmVudC5rZXkgPT09IFwiQXJyb3dEb3duXCIgfHwgZXZlbnQua2V5ID09PSBcIkFycm93VXBcIikpIHtcblx0XHRcdGlmICh0aGlzLmRpc2FibGVBcnJvd0tleXMgJiYgKGV2ZW50LmtleSA9PT0gXCJBcnJvd0Rvd25cIiB8fCBldmVudC5rZXkgPT09IFwiQXJyb3dVcFwiKSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0dGhpcy5vcGVuTWVudSgpO1xuXHRcdH1cblxuXHRcdGlmICghdGhpcy5tZW51SXNDbG9zZWQgJiYgZXZlbnQua2V5ID09PSBcIlRhYlwiICYmIHRoaXMuZHJvcGRvd25NZW51Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0IGFzIE5vZGUpKSB7XG5cdFx0XHR0aGlzLmNsb3NlTWVudSgpO1xuXHRcdH1cblxuXHRcdGlmICghdGhpcy5tZW51SXNDbG9zZWQgJiYgZXZlbnQua2V5ID09PSBcIlRhYlwiICYmIGV2ZW50LnNoaWZ0S2V5KSB7XG5cdFx0XHR0aGlzLmNsb3NlTWVudSgpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLnR5cGUgPT09IFwibXVsdGlcIikgeyByZXR1cm47IH1cblxuXHRcdGlmICh0aGlzLm1lbnVJc0Nsb3NlZCkge1xuXHRcdFx0dGhpcy5jbG9zZWREcm9wZG93bk5hdmlnYXRpb24oZXZlbnQpO1xuXHRcdH1cblx0fVxuXG5cdGNsb3NlZERyb3Bkb3duTmF2aWdhdGlvbihldmVudCkge1xuXHRcdGlmIChldmVudC5rZXkgPT09IFwiQXJyb3dEb3duXCIpIHtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHR0aGlzLnZpZXcuZ2V0Q3VycmVudEl0ZW0oKS5zZWxlY3RlZCA9IGZhbHNlO1xuXHRcdFx0bGV0IGl0ZW0gPSB0aGlzLnZpZXcuZ2V0TmV4dEl0ZW0oKTtcblx0XHRcdGlmIChpdGVtKSB7IGl0ZW0uc2VsZWN0ZWQgPSB0cnVlOyB9XG5cdFx0fSBlbHNlIGlmIChldmVudC5rZXkgPT09IFwiQXJyb3dVcFwiKSB7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0dGhpcy52aWV3LmdldEN1cnJlbnRJdGVtKCkuc2VsZWN0ZWQgPSBmYWxzZTtcblx0XHRcdGxldCBpdGVtID0gdGhpcy52aWV3LmdldFByZXZJdGVtKCk7XG5cdFx0XHRpZiAoaXRlbSkgeyBpdGVtLnNlbGVjdGVkID0gdHJ1ZTsgfVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBkaXNwbGF5IHZhbHVlIGlmIHRoZXJlIGlzIGEgc2VsZWN0aW9uIGFuZCBkaXNwbGF5VmFsdWUgaXMgc2V0LFxuXHQgKiBpZiB0aGVyZSBpcyBqdXN0IGEgc2VsZWN0aW9uIHRoZSBMaXN0SXRlbSBjb250ZW50IHByb3BlcnR5IHdpbGwgYmUgcmV0dXJuZWQsXG5cdCAqIG90aGVyd2lzZSB0aGUgcGxhY2Vob2xkZXIgd2lsbCBiZSByZXR1cm5lZC5cblx0ICovXG5cdGdldERpc3BsYXlTdHJpbmdWYWx1ZSgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuXHRcdGlmICghdGhpcy52aWV3IHx8IHRoaXMuc2tlbGV0b24pIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0bGV0IHNlbGVjdGVkID0gdGhpcy52aWV3LmdldFNlbGVjdGVkKCk7XG5cdFx0aWYgKHNlbGVjdGVkLmxlbmd0aCAmJiAoIXRoaXMuZGlzcGxheVZhbHVlIHx8ICF0aGlzLmlzUmVuZGVyU3RyaW5nKCkpKSB7XG5cdFx0XHRpZiAodGhpcy50eXBlID09PSBcIm11bHRpXCIpIHtcblx0XHRcdFx0cmV0dXJuIG9mKHRoaXMucGxhY2Vob2xkZXIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIG9mKHNlbGVjdGVkWzBdLmNvbnRlbnQpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoc2VsZWN0ZWQubGVuZ3RoICYmIHRoaXMuaXNSZW5kZXJTdHJpbmcoKSkge1xuXHRcdFx0cmV0dXJuIG9mKHRoaXMuZGlzcGxheVZhbHVlIGFzIHN0cmluZyk7XG5cdFx0fVxuXHRcdHJldHVybiBvZih0aGlzLnBsYWNlaG9sZGVyKTtcblx0fVxuXG5cdGlzUmVuZGVyU3RyaW5nKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0eXBlb2YgdGhpcy5kaXNwbGF5VmFsdWUgPT09IFwic3RyaW5nXCI7XG5cdH1cblxuXHRnZXRSZW5kZXJUZW1wbGF0ZUNvbnRleHQoKSB7XG5cdFx0aWYgKCF0aGlzLnZpZXcpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0bGV0IHNlbGVjdGVkID0gdGhpcy52aWV3LmdldFNlbGVjdGVkKCk7XG5cdFx0aWYgKHRoaXMudHlwZSA9PT0gXCJtdWx0aVwiKSB7XG5cdFx0XHRyZXR1cm4geyBpdGVtczogc2VsZWN0ZWQgfTtcblx0XHR9IGVsc2UgaWYgKHNlbGVjdGVkICYmIHNlbGVjdGVkLmxlbmd0aCA+IDApIHtcblx0XHRcdHJldHVybiB7IGl0ZW06IHNlbGVjdGVkWzBdIH07IC8vIHRoaXMgaXMgdG8gYmUgY29tcGF0aWJsZSB3aXRoIHRoZSBkcm9wZG93bi1saXN0IHRlbXBsYXRlXG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB7fTtcblx0XHR9XG5cdH1cblxuXHRnZXRTZWxlY3RlZENvdW50KCk6IG51bWJlciB7XG5cdFx0aWYgKHRoaXMudmlldy5nZXRTZWxlY3RlZCgpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy52aWV3LmdldFNlbGVjdGVkKCkubGVuZ3RoO1xuXHRcdH1cblx0fVxuXG5cdGNsZWFyU2VsZWN0ZWQoKSB7XG5cdFx0aWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5nZXRTZWxlY3RlZENvdW50KCkgPT09IDApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Zm9yIChjb25zdCBpdGVtIG9mIHRoaXMudmlldy5nZXRMaXN0SXRlbXMoKSkge1xuXHRcdFx0aXRlbS5zZWxlY3RlZCA9IGZhbHNlO1xuXHRcdH1cblx0XHR0aGlzLnNlbGVjdGVkLmVtaXQoW10pO1xuXHRcdHRoaXMucHJvcGFnYXRlQ2hhbmdlKFtdKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGVyZSBpcyBhIHZhbHVlIHNlbGVjdGVkLlxuXHQgKi9cblx0dmFsdWVTZWxlY3RlZCgpOiBib29sZWFuIHtcblx0XHRpZiAodGhpcy52aWV3LmdldFNlbGVjdGVkKCkpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRfbm9vcCgpIHsgfVxuXHQvKipcblx0ICogSGFuZGxlcyBjbGlja3Mgb3V0c2lkZSBvZiB0aGUgYERyb3Bkb3duYC5cblx0ICovXG5cdF9vdXRzaWRlQ2xpY2soZXZlbnQpIHtcblx0XHRpZiAoIXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkgJiZcblx0XHRcdC8vIGlmIHdlJ3JlIGFwcGVuZFRvQm9keSB0aGUgbGlzdCBpc24ndCB3aXRoaW4gdGhlIF9lbGVtZW50UmVmLFxuXHRcdFx0Ly8gc28gd2UndmUgZ290IHRvIGNoZWNrIGlmIG91ciB0YXJnZXQgaXMgcG9zc2libHkgaW4gdGhlcmUgdG9vLlxuXHRcdFx0IXRoaXMuZHJvcGRvd25NZW51Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xuXHRcdFx0dGhpcy5jbG9zZU1lbnUoKTtcblx0XHR9XG5cdH1cblx0X291dHNpZGVLZXkoZXZlbnQpIHtcblx0XHRpZiAoIXRoaXMubWVudUlzQ2xvc2VkICYmIGV2ZW50LmtleSA9PT0gXCJUYWJcIiAmJiB0aGlzLmRyb3Bkb3duTWVudS5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCBhcyBOb2RlKSkge1xuXHRcdFx0dGhpcy5jbG9zZU1lbnUoKTtcblx0XHR9XG5cdH1cblx0LyoqXG5cdCAqIEhhbmRsZXMga2V5Ym9hcmQgZXZlbnRzIHNvIHVzZXJzIGFyZSBjb250cm9sbGluZyB0aGUgYERyb3Bkb3duYCBpbnN0ZWFkIG9mIHVuaW50ZW50aW9uYWxseSBjb250cm9sbGluZyBvdXRzaWRlIGVsZW1lbnRzLlxuXHQgKi9cblx0X2tleWJvYXJkTmF2KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG5cdFx0aWYgKGV2ZW50LmtleSA9PT0gXCJFc2NhcGVcIiAmJiAhdGhpcy5tZW51SXNDbG9zZWQpIHtcblx0XHRcdGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpOyAgLy8gZG9uJ3QgdW5pbnRlbnRpb25hbGx5IGNsb3NlIG1vZGFsIGlmIGluc2lkZSBvZiBpdFxuXHRcdH1cblx0XHRpZiAoZXZlbnQua2V5ID09PSBcIkVzY2FwZVwiKSB7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0dGhpcy5jbG9zZU1lbnUoKTtcblx0XHRcdHRoaXMuZHJvcGRvd25CdXR0b24ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuXHRcdH0gZWxzZSBpZiAoIXRoaXMubWVudUlzQ2xvc2VkICYmIGV2ZW50LmtleSA9PT0gXCJUYWJcIikge1xuXHRcdFx0Ly8gdGhpcyB3YXkgZm9jdXMgd2lsbCBzdGFydCBvbiB0aGUgbmV4dCBmb2N1c2FibGUgaXRlbSBmcm9tIHRoZSBkcm9wZG93blxuXHRcdFx0Ly8gbm90IHRoZSB0b3Agb2YgdGhlIGJvZHkhXG5cdFx0XHR0aGlzLmRyb3Bkb3duQnV0dG9uLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcblx0XHRcdHRoaXMuZHJvcGRvd25CdXR0b24ubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBLZXlib2FyZEV2ZW50KFwia2V5ZG93blwiLCB7IGJ1YmJsZXM6IHRydWUsIGNhbmNlbGFibGU6IHRydWUsIGtleTogXCJUYWJcIiB9KSk7XG5cdFx0XHR0aGlzLmNsb3NlTWVudSgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIHRoZSBgRHJvcGRvd25gIGxpc3QgYXBwZW5kaW5nIGl0IHRvIHRoZSBkcm9wZG93biBwYXJlbnQgb2JqZWN0IGluc3RlYWQgb2YgdGhlIGJvZHkuXG5cdCAqL1xuXHRfYXBwZW5kVG9Ecm9wZG93bigpIHtcblx0XHR0aGlzLmRyb3Bkb3duU2VydmljZS5hcHBlbmRUb0Ryb3Bkb3duKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcblx0XHR0aGlzLmRyb3Bkb3duTWVudS5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMua2V5Ym9hcmROYXYsIHRydWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgdGhlIGBEcm9wZG93bmAgbGlzdCBhcyBhbiBlbGVtZW50IHRoYXQgaXMgYXBwZW5kZWQgdG8gdGhlIERPTSBib2R5LlxuXHQgKi9cblx0X2FwcGVuZFRvQm9keSgpIHtcblx0XHRjb25zdCBsaWdodENsYXNzID0gdGhpcy50aGVtZSA9PT0gXCJsaWdodFwiID8gXCIgY2RzLS1saXN0LWJveC0tbGlnaHRcIiA6IFwiXCI7XG5cdFx0Y29uc3QgZXhwYW5kZWRDbGFzcyA9ICF0aGlzLm1lbnVJc0Nsb3NlZCA/IFwiIGNkcy0tbGlzdC1ib3gtLWV4cGFuZGVkXCIgOiBcIlwiO1xuXHRcdHRoaXMuZHJvcGRvd25TZXJ2aWNlLmFwcGVuZFRvQm9keShcblx0XHRcdHRoaXMuZHJvcGRvd25CdXR0b24ubmF0aXZlRWxlbWVudCxcblx0XHRcdHRoaXMuZHJvcGRvd25NZW51Lm5hdGl2ZUVsZW1lbnQsXG5cdFx0XHRgJHt0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc05hbWV9JHtsaWdodENsYXNzfSR7ZXhwYW5kZWRDbGFzc31gKTtcblx0XHR0aGlzLmRyb3Bkb3duTWVudS5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMua2V5Ym9hcmROYXYsIHRydWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIERldGVjdHMgd2hldGhlciBvciBub3QgdGhlIGBEcm9wZG93bmAgbGlzdCBpcyB2aXNpYmxlIHdpdGhpbiBhbGwgc2Nyb2xsYWJsZSBwYXJlbnRzLlxuXHQgKiBUaGlzIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHBhc3NpbmcgaW4gYSB2YWx1ZSB0byB0aGUgYGRyb3BVcGAgaW5wdXQuXG5cdCAqL1xuXHRfc2hvdWxkRHJvcFVwKCkge1xuXHRcdC8vIGNoZWNrIGlmIGRyb3Bkb3duTWVudSBleGlzdHMgZmlyc3QuXG5cdFx0Y29uc3QgbWVudSA9IHRoaXMuZHJvcGRvd25NZW51ICYmIHRoaXMuZHJvcGRvd25NZW51Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcIi5jZHMtLWxpc3QtYm94X19tZW51XCIpO1xuXHRcdC8vIGNoZWNrIGlmIG1lbnUgZXhpc3RzIGZpcnN0LlxuXHRcdGNvbnN0IG1lbnVSZWN0ID0gbWVudSAmJiBtZW51LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHRcdGlmIChtZW51ICYmIG1lbnVSZWN0KSB7XG5cdFx0XHRjb25zdCBzY3JvbGxhYmxlUGFyZW50cyA9IGdldFNjcm9sbGFibGVQYXJlbnRzKG1lbnUpO1xuXHRcdFx0cmV0dXJuIHNjcm9sbGFibGVQYXJlbnRzLnJlZHVjZSgoc2hvdWxkRHJvcFVwOiBib29sZWFuLCBwYXJlbnQ6IEhUTUxFbGVtZW50KSA9PiB7XG5cdFx0XHRcdGNvbnN0IHBhcmVudFJlY3QgPSBwYXJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0XHRcdGNvbnN0IGlzQmVsb3dQYXJlbnQgPSAhKG1lbnVSZWN0LmJvdHRvbSA8PSBwYXJlbnRSZWN0LmJvdHRvbSk7XG5cdFx0XHRcdHJldHVybiBzaG91bGREcm9wVXAgfHwgaXNCZWxvd1BhcmVudDtcblx0XHRcdH0sIGZhbHNlKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogRXhwYW5kcyB0aGUgZHJvcGRvd24gbWVudSBpbiB0aGUgdmlldy5cblx0ICovXG5cdG9wZW5NZW51KCkge1xuXHRcdC8vIHByZXZlbnRzIHRoZSBkcm9wZG93biBmcm9tIG9wZW5pbmcgd2hlbiBsaXN0IG9mIGl0ZW1zIGlzIGVtcHR5XG5cdFx0aWYgKHRoaXMudmlldy5nZXRMaXN0SXRlbXMoKS5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLl9kcm9wVXAgPSBmYWxzZTtcblx0XHR0aGlzLm1lbnVJc0Nsb3NlZCA9IGZhbHNlO1xuXG5cdFx0Ly8gbW92ZSB0aGUgZHJvcGRvd24gbGlzdCB0byB0aGUgYm9keSBpZiB3ZSdyZSBub3QgYXBwZW5kaW5nIGlubGluZVxuXHRcdC8vIGFuZCBwb3NpdGlvbiBpdCByZWxhdGl2ZSB0byB0aGUgZHJvcGRvd24gd3JhcHBlclxuXHRcdGlmICghdGhpcy5hcHBlbmRJbmxpbmUpIHtcblx0XHRcdGNvbnN0IHRhcmdldCA9IHRoaXMuZHJvcGRvd25CdXR0b24ubmF0aXZlRWxlbWVudDtcblx0XHRcdGNvbnN0IHBhcmVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuXHRcdFx0dGhpcy52aXNpYmlsaXR5U3Vic2NyaXB0aW9uID0gdGhpcy5lbGVtZW50U2VydmljZVxuXHRcdFx0XHQudmlzaWJpbGl0eSh0YXJnZXQsIHBhcmVudClcblx0XHRcdFx0LnN1YnNjcmliZSh2YWx1ZSA9PiB7XG5cdFx0XHRcdFx0aWYgKCF2YWx1ZS52aXNpYmxlKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmNsb3NlTWVudSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR0aGlzLl9hcHBlbmRUb0JvZHkoKTtcblx0XHR9XG5cblx0XHQvLyBzZXQgdGhlIGRyb3Bkb3duIG1lbnUgdG8gZHJvcCB1cCBpZiBpdCdzIG5lYXIgdGhlIGJvdHRvbSBvZiB0aGUgc2NyZWVuXG5cdFx0Ly8gc2V0VGltZW91dCBsZXRzIHVzIG1lYXN1cmUgYWZ0ZXIgaXQncyB2aXNpYmxlIGluIHRoZSBET01cblx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdGlmICh0aGlzLmRyb3BVcCA9PT0gbnVsbCB8fCB0aGlzLmRyb3BVcCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRoaXMuX2Ryb3BVcCA9IHRoaXMuX3Nob3VsZERyb3BVcCgpO1xuXHRcdFx0fVxuXHRcdH0sIDApO1xuXG5cdFx0Ly8gd2UgYmluZCBub29wIHRvIGRvY3VtZW50LmJvZHkuZmlyc3RFbGVtZW50Q2hpbGQgdG8gYWxsb3cgc2FmYXJpIHRvIGZpcmUgZXZlbnRzXG5cdFx0Ly8gZnJvbSBkb2N1bWVudC4gVGhlbiB3ZSB1bmJpbmQgZXZlcnl0aGluZyBsYXRlciB0byBrZWVwIHRoaW5ncyBsaWdodC5cblx0XHRkb2N1bWVudC5ib2R5LmZpcnN0RWxlbWVudENoaWxkLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLm5vb3AsIHRydWUpO1xuXHRcdGRvY3VtZW50LmJvZHkuZmlyc3RFbGVtZW50Q2hpbGQuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgdGhpcy5ub29wLCB0cnVlKTtcblx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5vdXRzaWRlQ2xpY2ssIHRydWUpO1xuXHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMub3V0c2lkZUtleSwgdHJ1ZSk7XG5cdFx0c2V0VGltZW91dCgoKSA9PiB0aGlzLnZpZXcuaW5pdEZvY3VzKCksIDApO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbGxhcHNpbmcgdGhlIGRyb3Bkb3duIG1lbnUgYW5kIHJlbW92aW5nIHVubmVjZXNzYXJ5IGBFdmVudExpc3RlbmVyc2AuXG5cdCAqL1xuXHRjbG9zZU1lbnUoKSB7XG5cdFx0Ly8gcmV0dXJuIGVhcmx5IGlmIHRoZSBtZW51IGlzIGFscmVhZHkgY2xvc2VkXG5cdFx0aWYgKHRoaXMubWVudUlzQ2xvc2VkKSB7IHJldHVybjsgfVxuXHRcdHRoaXMubWVudUlzQ2xvc2VkID0gdHJ1ZTtcblx0XHR0aGlzLmNoZWNrRm9yUmVvcmRlcigpO1xuXHRcdHRoaXMub25DbG9zZS5lbWl0KCk7XG5cdFx0dGhpcy5jbG9zZS5lbWl0KCk7XG5cblx0XHQvLyBmb2N1cyB0aGUgdHJpZ2dlciBidXR0b24gd2hlbiB3ZSBjbG9zZSAuLi5cblx0XHR0aGlzLmRyb3Bkb3duQnV0dG9uLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcblxuXHRcdC8vIHJlbW92ZSB0aGUgY29uZGl0aW9uYWwgb25jZSB0aGlzIGFwaSBpcyBzZXR0bGVkIGFuZCBwYXJ0IG9mIGFic3RyYWN0LWRyb3Bkb3duLXZpZXcuY2xhc3Ncblx0XHRpZiAodGhpcy52aWV3W1wiZGlzYWJsZVNjcm9sbFwiXSkge1xuXHRcdFx0dGhpcy52aWV3W1wiZGlzYWJsZVNjcm9sbFwiXSgpO1xuXHRcdH1cblxuXHRcdC8vIG1vdmUgdGhlIGxpc3QgYmFjayBpbiB0aGUgY29tcG9uZW50IG9uIGNsb3NlXG5cdFx0aWYgKCF0aGlzLmFwcGVuZElubGluZSkge1xuXHRcdFx0dGhpcy52aXNpYmlsaXR5U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG5cdFx0XHR0aGlzLl9hcHBlbmRUb0Ryb3Bkb3duKCk7XG5cdFx0fVxuXHRcdGRvY3VtZW50LmJvZHkuZmlyc3RFbGVtZW50Q2hpbGQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMubm9vcCwgdHJ1ZSk7XG5cdFx0ZG9jdW1lbnQuYm9keS5maXJzdEVsZW1lbnRDaGlsZC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCB0aGlzLm5vb3AsIHRydWUpO1xuXHRcdGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLm91dHNpZGVDbGljaywgdHJ1ZSk7XG5cdFx0ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgdGhpcy5vdXRzaWRlS2V5LCB0cnVlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb250cm9scyB0b2dnbGluZyBtZW51IHN0YXRlcyBiZXR3ZWVuIG9wZW4vZXhwYW5kZWQgYW5kIGNsb3NlZC9jb2xsYXBzZWQuXG5cdCAqL1xuXHR0b2dnbGVNZW51KCkge1xuXHRcdGlmICh0aGlzLm1lbnVJc0Nsb3NlZCkge1xuXHRcdFx0dGhpcy5vcGVuTWVudSgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmNsb3NlTWVudSgpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBpc1RlbXBsYXRlKHZhbHVlKSB7XG5cdFx0cmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgVGVtcGxhdGVSZWY7XG5cdH1cblxuXHRoYW5kbGVGb2N1cyhldmVudDogRm9jdXNFdmVudCkge1xuXHRcdHRoaXMuX2lzRm9jdXNlZCA9IGV2ZW50LnR5cGUgPT09IFwiZm9jdXNcIjtcblx0XHRpZiAoZXZlbnQudHlwZSA9PT0gXCJibHVyXCIpIHtcblx0XHRcdHRoaXMub25CbHVyKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENvbnRyb2xzIHdoZW4gaXQncyBuZWVkZWQgdG8gYXBwbHkgdGhlIHNlbGVjdGlvbiBmZWVkYmFja1xuXHQgKi9cblx0cHJvdGVjdGVkIGNoZWNrRm9yUmVvcmRlcigpIHtcblx0XHRjb25zdCB0b3BBZnRlclJlb3BlbiA9IHRoaXMubWVudUlzQ2xvc2VkICYmIHRoaXMuc2VsZWN0aW9uRmVlZGJhY2sgPT09IFwidG9wLWFmdGVyLXJlb3BlblwiO1xuXHRcdGlmICgodGhpcy50eXBlID09PSBcIm11bHRpXCIpICYmICh0b3BBZnRlclJlb3BlbiB8fCB0aGlzLnNlbGVjdGlvbkZlZWRiYWNrID09PSBcInRvcFwiKSkge1xuXHRcdFx0dGhpcy52aWV3LnJlb3JkZXJTZWxlY3RlZCgpO1xuXHRcdH1cblx0fVxufVxuIl19