@ecodev/natural 44.0.6 → 45.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/esm2020/lib/classes/abstract-detail.mjs +39 -40
  2. package/esm2020/lib/classes/abstract-navigable-list.mjs +6 -2
  3. package/esm2020/lib/classes/rxjs.mjs +2 -1
  4. package/esm2020/lib/classes/validators.mjs +2 -2
  5. package/esm2020/lib/modules/dropdown-components/type-date/type-date.component.mjs +1 -1
  6. package/esm2020/lib/modules/dropdown-components/type-date-range/type-date-range.component.mjs +1 -1
  7. package/esm2020/lib/modules/dropdown-components/type-number/type-number.component.mjs +7 -3
  8. package/esm2020/lib/modules/dropdown-components/type-select/type-select.component.mjs +8 -4
  9. package/esm2020/lib/modules/file/abstract-file.mjs +26 -29
  10. package/esm2020/lib/modules/file/utils.mjs +12 -1
  11. package/esm2020/lib/modules/fixed-button-detail/fixed-button-detail.component.mjs +22 -9
  12. package/esm2020/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.component.mjs +3 -3
  13. package/esm2020/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.service.mjs +3 -9
  14. package/esm2020/lib/services/abstract-model.service.mjs +8 -41
  15. package/esm2020/lib/services/debounce.service.mjs +128 -0
  16. package/esm2020/lib/services/swiss-parsing-date-adapter.service.mjs +21 -13
  17. package/esm2020/public-api.mjs +2 -1
  18. package/fesm2015/ecodev-natural.mjs +266 -141
  19. package/fesm2015/ecodev-natural.mjs.map +1 -1
  20. package/fesm2020/ecodev-natural.mjs +263 -139
  21. package/fesm2020/ecodev-natural.mjs.map +1 -1
  22. package/lib/modules/dropdown-components/type-date/type-date.component.d.ts +1 -1
  23. package/lib/modules/dropdown-components/type-date-range/type-date-range.component.d.ts +1 -1
  24. package/lib/modules/dropdown-components/type-number/type-number.component.d.ts +2 -1
  25. package/lib/modules/dropdown-components/type-select/type-select.component.d.ts +7 -3
  26. package/lib/modules/file/abstract-file.d.ts +0 -3
  27. package/lib/modules/file/utils.d.ts +1 -0
  28. package/lib/modules/fixed-button-detail/fixed-button-detail.component.d.ts +14 -6
  29. package/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.component.d.ts +5 -6
  30. package/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.service.d.ts +5 -14
  31. package/lib/services/abstract-model.service.d.ts +4 -6
  32. package/lib/services/debounce.service.d.ts +46 -0
  33. package/package.json +1 -1
  34. package/public-api.d.ts +1 -0
@@ -114,7 +114,7 @@ export class NaturalHierarchicSelectorComponent extends NaturalAbstractControlle
114
114
  }
115
115
  else if (!this.multiple) {
116
116
  if (this.flatNodesSelection.isSelected(flatNode)) {
117
- this.unselectSingleFlatNode(flatNode);
117
+ this.unselectSingleFlatNode();
118
118
  }
119
119
  else {
120
120
  // If not multiple, and we want to select an element, unselect everything before to keep a single selection
@@ -285,7 +285,7 @@ export class NaturalHierarchicSelectorComponent extends NaturalAbstractControlle
285
285
  /**
286
286
  * Clear all selected and select the given node
287
287
  */
288
- unselectSingleFlatNode(flatNode) {
288
+ unselectSingleFlatNode() {
289
289
  this.flatNodesSelection.clear();
290
290
  this.selectedNodes = [];
291
291
  this.updateSelection(this.selectedNodes);
@@ -361,4 +361,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImpor
361
361
  }], selectionChange: [{
362
362
  type: Output
363
363
  }] } });
364
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGllcmFyY2hpYy1zZWxlY3Rvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsL3NyYy9saWIvbW9kdWxlcy9oaWVyYXJjaGljLXNlbGVjdG9yL2hpZXJhcmNoaWMtc2VsZWN0b3IvaGllcmFyY2hpYy1zZWxlY3Rvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsL3NyYy9saWIvbW9kdWxlcy9oaWVyYXJjaGljLXNlbGVjdG9yL2hpZXJhcmNoaWMtc2VsZWN0b3IvaGllcmFyY2hpYy1zZWxlY3Rvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDeEQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFnQixNQUFNLGVBQWUsQ0FBQztBQUN2RyxPQUFPLEVBQUMscUJBQXFCLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUUvRSxPQUFPLEVBQUMsUUFBUSxFQUFFLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBRy9FLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLHVDQUF1QyxDQUFDO0FBRzlFLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBSXhELE9BQU8sRUFBQyxnQ0FBZ0MsRUFBMEIsTUFBTSwrQkFBK0IsQ0FBQztBQUN4RyxPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7Ozs7QUFRdkUsTUFBTSxPQUFPLGtDQUFtQyxTQUFRLHlC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LEtBQUs7Z0JBS1UsT0FBTztzQkFBdEIsS0FBSztnQkFLVSxZQUFZO3NCQUEzQixLQUFLO2dCQUtVLGdCQUFnQjtzQkFBL0IsS0FBSztnQkFLb0IscUJBQXFCO3NCQUE5QyxNQUFNO2dCQVdtQixlQUFlO3NCQUF4QyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtTZWxlY3Rpb25Nb2RlbH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7RmxhdFRyZWVDb250cm9sfSBmcm9tICdAYW5ndWxhci9jZGsvdHJlZSc7XG5pbXBvcnQge0NvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlc30gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge01hdFRyZWVGbGF0RGF0YVNvdXJjZSwgTWF0VHJlZUZsYXR0ZW5lcn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdHJlZSc7XG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtmaW5hbGl6ZSwgdGFrZVVudGlsfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge05hdHVyYWxBYnN0cmFjdENvbnRyb2xsZXJ9IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvYWJzdHJhY3QtY29udHJvbGxlcic7XG5pbXBvcnQge1F1ZXJ5VmFyaWFibGVzfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL3F1ZXJ5LXZhcmlhYmxlLW1hbmFnZXInO1xuaW1wb3J0IHtMaXRlcmFsfSBmcm9tICcuLi8uLi8uLi90eXBlcy90eXBlcyc7XG5pbXBvcnQge3RvR3JhcGhRTERvY3RyaW5lRmlsdGVyfSBmcm9tICcuLi8uLi9zZWFyY2gvY2xhc3Nlcy9ncmFwaHFsLWRvY3RyaW5lJztcbmltcG9ydCB7TmF0dXJhbFNlYXJjaEZhY2V0c30gZnJvbSAnLi4vLi4vc2VhcmNoL3R5cGVzL2ZhY2V0JztcbmltcG9ydCB7TmF0dXJhbFNlYXJjaFNlbGVjdGlvbnN9IGZyb20gJy4uLy4uL3NlYXJjaC90eXBlcy92YWx1ZXMnO1xuaW1wb3J0IHtIaWVyYXJjaGljRmxhdE5vZGV9IGZyb20gJy4uL2NsYXNzZXMvZmxhdC1ub2RlJztcbmltcG9ydCB7TmF0dXJhbEhpZXJhcmNoaWNDb25maWd1cmF0aW9ufSBmcm9tICcuLi9jbGFzc2VzL2hpZXJhcmNoaWMtY29uZmlndXJhdGlvbic7XG5pbXBvcnQge0hpZXJhcmNoaWNGaWx0ZXJzQ29uZmlndXJhdGlvbn0gZnJvbSAnLi4vY2xhc3Nlcy9oaWVyYXJjaGljLWZpbHRlcnMtY29uZmlndXJhdGlvbic7XG5pbXBvcnQge0hpZXJhcmNoaWNNb2RlbE5vZGV9IGZyb20gJy4uL2NsYXNzZXMvbW9kZWwtbm9kZSc7XG5pbXBvcnQge05hdHVyYWxIaWVyYXJjaGljU2VsZWN0b3JTZXJ2aWNlLCBPcmdhbml6ZWRNb2RlbFNlbGVjdGlvbn0gZnJvbSAnLi9oaWVyYXJjaGljLXNlbGVjdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHtyZXBsYWNlT2JqZWN0S2VlcGluZ1JlZmVyZW5jZX0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy91dGlsaXR5JztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduYXR1cmFsLWhpZXJhcmNoaWMtc2VsZWN0b3InLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9oaWVyYXJjaGljLXNlbGVjdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9oaWVyYXJjaGljLXNlbGVjdG9yLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgcHJvdmlkZXJzOiBbTmF0dXJhbEhpZXJhcmNoaWNTZWxlY3RvclNlcnZpY2VdLFxufSlcbmV4cG9ydCBjbGFzcyBOYXR1cmFsSGllcmFyY2hpY1NlbGVjdG9yQ29tcG9uZW50IGV4dGVuZHMgTmF0dXJhbEFic3RyYWN0Q29udHJvbGxlciBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB0aGF0IHJlY2VpdmVzIGEgbW9kZWwgYW5kIHJldHVybnMgYSBzdHJpbmcgZm9yIGRpc3BsYXkgdmFsdWVcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgZGlzcGxheVdpdGg/OiAoaXRlbTogYW55KSA9PiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBDb25maWcgZm9yIGl0ZW1zIGFuZCByZWxhdGlvbnMgYXJyYW5nZW1lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgY29uZmlnITogTmF0dXJhbEhpZXJhcmNoaWNDb25maWd1cmF0aW9uW107XG5cbiAgICAvKipcbiAgICAgKiBJZiBtdWx0aXBsZSBvciBzaW5nbGUgaXRlbSBzZWxlY3Rpb25cbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgbXVsdGlwbGUgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFNlbGVjdGVkIGl0ZW1zXG4gICAgICogT3JnYW5pemVkIGJ5IGtleSwgY29udGFpbmluZyBlYWNoIGFuIGFycmF5IG9mIHNlbGVjdGVkIGl0ZW1zIG9mIHNhbWUgdHlwZVxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBzZWxlY3RlZDogT3JnYW5pemVkTW9kZWxTZWxlY3Rpb24gPSB7fTtcblxuICAgIC8qKlxuICAgICAqIFdoZXJldmVyIGlmIHNlbGVjdGFibGUgZWxlbWVudHMgY2FuIGJlIHVuc2VsZWN0ZWRcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgYWxsb3dVbnNlbGVjdCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBGaWx0ZXJzIHRoYXQgYXBwbHkgdG8gZWFjaCBxdWVyeVxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBmaWx0ZXJzPzogSGllcmFyY2hpY0ZpbHRlcnNDb25maWd1cmF0aW9uIHwgbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFNlYXJjaCBmYWNldHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgc2VhcmNoRmFjZXRzOiBOYXR1cmFsU2VhcmNoRmFjZXRzID0gW107XG5cbiAgICAvKipcbiAgICAgKiBTZWxlY3Rpb25zIHRvIGFwcGx5IG9uIG5hdHVyYWwtc2VhcmNoIG9uIGNvbXBvbmVudCBpbml0aWFsaXNhdGlvblxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBzZWFyY2hTZWxlY3Rpb25zOiBOYXR1cmFsU2VhcmNoU2VsZWN0aW9ucyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHMgd2hlbiBuYXR1cmFsLXNlYXJjaCBzZWxlY3Rpb25zIGNoYW5nZVxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgcmVhZG9ubHkgc2VhcmNoU2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxOYXR1cmFsU2VhcmNoU2VsZWN0aW9ucz4oKTtcblxuICAgIC8qKlxuICAgICAqIElubmVyIHJlcHJlc2VudGF0aW9uIG9mIHNlbGVjdGVkIEBJbnB1dCgpIHRvIGFsbG93IGZsYXQgbGlzdGluZyBhcyBtYXQtY2hpcC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2VsZWN0ZWROb2RlczogSGllcmFyY2hpY01vZGVsTm9kZVtdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBFbWl0cyBzZWxlY3Rpb24gY2hhbmdlXG4gICAgICogUmV0dXJucyBhIExpdGVyYWwgd2hlcmUgc2VsZWN0ZWQgbW9kZWxzIGFyZSBvcmdhbml6ZWQgYnkga2V5XG4gICAgICovXG4gICAgQE91dHB1dCgpIHB1YmxpYyByZWFkb25seSBzZWxlY3Rpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPE9yZ2FuaXplZE1vZGVsU2VsZWN0aW9uPigpO1xuXG4gICAgLyoqXG4gICAgICogQ29udHJvbGxlciBmb3Igbm9kZXMgc2VsZWN0aW9uXG4gICAgICovXG4gICAgcHVibGljIGZsYXROb2Rlc1NlbGVjdGlvbiE6IFNlbGVjdGlvbk1vZGVsPEhpZXJhcmNoaWNGbGF0Tm9kZT47XG5cbiAgICBwdWJsaWMgdHJlZUNvbnRyb2whOiBGbGF0VHJlZUNvbnRyb2w8SGllcmFyY2hpY0ZsYXROb2RlPjtcbiAgICBwdWJsaWMgdHJlZUZsYXR0ZW5lciE6IE1hdFRyZWVGbGF0dGVuZXI8SGllcmFyY2hpY01vZGVsTm9kZSwgSGllcmFyY2hpY0ZsYXROb2RlPjtcbiAgICBwdWJsaWMgZGF0YVNvdXJjZSE6IE1hdFRyZWVGbGF0RGF0YVNvdXJjZTxIaWVyYXJjaGljTW9kZWxOb2RlLCBIaWVyYXJjaGljRmxhdE5vZGU+O1xuXG4gICAgcHVibGljIGxvYWRpbmcgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIENhY2hlIGZvciB0cmFuc2Zvcm1lZCBub2Rlc1xuICAgICAqL1xuICAgIHByaXZhdGUgZmxhdE5vZGVNYXA6IE1hcDxzdHJpbmcsIEhpZXJhcmNoaWNGbGF0Tm9kZT4gPSBuZXcgTWFwPHN0cmluZywgSGllcmFyY2hpY0ZsYXROb2RlPigpO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgaGllcmFyY2hpY1NlbGVjdG9yU2VydmljZTogTmF0dXJhbEhpZXJhcmNoaWNTZWxlY3RvclNlcnZpY2UpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbmd1bGFyIE9uSW5pdCBpbXBsZW1lbnRhdGlvblxuICAgICAqL1xuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgLy8gSW5pdCB0cmVlIGNoZWNrYm94IHNlbGVjdG9yc1xuICAgICAgICB0aGlzLmZsYXROb2Rlc1NlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxhbnk+KHRoaXMubXVsdGlwbGUpO1xuXG4gICAgICAgIC8vIFRyZWUgY29udHJvbGxlcnMgYW5kIG1hbmlwdWxhdG9yc1xuICAgICAgICB0aGlzLnRyZWVGbGF0dGVuZXIgPSBuZXcgTWF0VHJlZUZsYXR0ZW5lcihcbiAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtZXIoKSxcbiAgICAgICAgICAgIHRoaXMuZ2V0TGV2ZWwoKSxcbiAgICAgICAgICAgIHRoaXMuaXNFeHBhbmRhYmxlKCksXG4gICAgICAgICAgICB0aGlzLmdldENoaWxkcmVuKCksXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMudHJlZUNvbnRyb2wgPSBuZXcgRmxhdFRyZWVDb250cm9sPEhpZXJhcmNoaWNGbGF0Tm9kZT4odGhpcy5nZXRMZXZlbCgpLCB0aGlzLmlzRXhwYW5kYWJsZSgpKTtcblxuICAgICAgICAvLyBUaGUgZGF0YVNvdXJjZSBjb250YWlucyBhIG5lc3RlZCBNb2RlbE5vZGVzIGxpc3QuIEVhY2ggTW9kZWxOb2RlIGhhcyBhIGNoaWxkIGF0dHJpYnV0ZSB0aGF0IHJldHVybnMgYW4gb2JzZXJ2YWJsZS5cbiAgICAgICAgLy8gVGhlIGRhdGFTb3VyY2UgY29udGFpbnMgYSBmbGF0IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBuZXN0ZWQgTW9kZWxOb2RlcyB0aGF0IGlzIGdlbmVyYXRlZCBieSB0aGUgdHJlZUZsYXR0ZW5lciByZWxhdGVkIGZ1bmN0aW9uc1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2UgPSBuZXcgTWF0VHJlZUZsYXREYXRhU291cmNlKHRoaXMudHJlZUNvbnRyb2wsIHRoaXMudHJlZUZsYXR0ZW5lcik7XG5cbiAgICAgICAgLy8gVXBkYXRlIGRhdGFTb3VyY2Ugd2hlbiByZWNlaXZpbmcgbmV3IGxpc3QgLT4gd2UgYXNzaWduIHRoZSB3aG9sZSB0cmVlXG4gICAgICAgIC8vIFRoZSB0cmVlQ29udHJvbCBhbmQgdHJlZUZsYXR0ZW5lciB3aWxsIGdlbmVyYXRlIHRoZSBkaXNwbGF5ZWQgdHJlZVxuICAgICAgICB0aGlzLmhpZXJhcmNoaWNTZWxlY3RvclNlcnZpY2UuZGF0YUNoYW5nZVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKGRhdGEgPT4gKHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gZGF0YSkpO1xuXG4gICAgICAgIC8vIFByZXZlbnQgZW1wdHkgc2NyZWVuIG9uIGZpcnN0IGxvYWQgYW5kIGluaXQgTmF0dXJhbEhpZXJhcmNoaWNTZWxlY3RvclNlcnZpY2Ugd2l0aCBpbnB1dHRlZCBjb25maWd1cmF0aW9uXG4gICAgICAgIGxldCB2YXJpYWJsZXM7XG4gICAgICAgIGlmICh0aGlzLnNlYXJjaFNlbGVjdGlvbnMuc29tZShzID0+IHMubGVuZ3RoKSkge1xuICAgICAgICAgICAgdmFyaWFibGVzID0ge2ZpbHRlcjogdG9HcmFwaFFMRG9jdHJpbmVGaWx0ZXIodGhpcy5zZWFyY2hGYWNldHMsIHRoaXMuc2VhcmNoU2VsZWN0aW9ucyl9O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubG9hZFJvb3RzKHZhcmlhYmxlcyk7XG5cbiAgICAgICAgLy8gT3JnYW5pemVkU2VsZWN0aW9uIGludG8gbGlzdCB1c2FibGUgYnkgdGVtcGxhdGVcbiAgICAgICAgdGhpcy51cGRhdGVJbm5lclNlbGVjdGlvbih0aGlzLnNlbGVjdGVkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbmd1bGFyIE9uQ2hhbmdlIGltcGxlbWVudGF0aW9uXG4gICAgICovXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXMuc2VsZWN0ZWQgJiYgIWNoYW5nZXMuc2VsZWN0ZWQuZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlSW5uZXJTZWxlY3Rpb24odGhpcy5zZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hhbmdlcy5maWx0ZXJzICYmICFjaGFuZ2VzLmZpbHRlcnMuZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZFJvb3RzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUb2dnbGUgc2VsZWN0aW9uIG9mIGEgRmxhdE5vZGUsIGNvbnNpZGVyaW5nIGlmIG11bHRpcGxlIHNlbGVjdGlvbiBpcyBhY3RpdmF0ZWQgb3Igbm90XG4gICAgICovXG4gICAgcHVibGljIHRvZ2dsZUZsYXROb2RlKGZsYXROb2RlOiBIaWVyYXJjaGljRmxhdE5vZGUpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgICAgIC8vIElzIG11bHRpcGxlIGFsbG93ZWQsIGp1c3QgdG9nZ2xlIGVsZW1lbnRcbiAgICAgICAgICAgIGlmICh0aGlzLmZsYXROb2Rlc1NlbGVjdGlvbi5pc1NlbGVjdGVkKGZsYXROb2RlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMudW5zZWxlY3RGbGF0Tm9kZShmbGF0Tm9kZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0RmxhdE5vZGUoZmxhdE5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5mbGF0Tm9kZXNTZWxlY3Rpb24uaXNTZWxlY3RlZChmbGF0Tm9kZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVuc2VsZWN0U2luZ2xlRmxhdE5vZGUoZmxhdE5vZGUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBJZiBub3QgbXVsdGlwbGUsIGFuZCB3ZSB3YW50IHRvIHNlbGVjdCBhbiBlbGVtZW50LCB1bnNlbGVjdCBldmVyeXRoaW5nIGJlZm9yZSB0byBrZWVwIGEgc2luZ2xlIHNlbGVjdGlvblxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0U2luZ2xlRmxhdE5vZGUoZmxhdE5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2hlbiB1bnNlbGVjdGluZyBhbiBlbGVtZW50IGZyb20gdGhlIG1hdC1jaGlwcywgaXQgY2FuIGJlIGRlZXAgaW4gdGhlIGhpZXJhcmNoeSwgYW5kIHRoZSB0cmVlIGVsZW1lbnQgbWF5IG5vdCBleGlzdC4uLlxuICAgICAqIC4uLiBidXQgd2Ugc3RpbGwgbmVlZCB0byByZW1vdmUgdGhlIGVsZW1lbnQgZnJvbSB0aGUgbWF0LWNoaXBzIGxpc3QuXG4gICAgICovXG4gICAgcHVibGljIHVuc2VsZWN0TW9kZWxOb2RlKG5vZGU6IEhpZXJhcmNoaWNNb2RlbE5vZGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZmxhdE5vZGUgPSB0aGlzLmdldEZsYXROb2RlKG5vZGUpO1xuICAgICAgICBpZiAoZmxhdE5vZGUpIHtcbiAgICAgICAgICAgIHRoaXMudW5zZWxlY3RGbGF0Tm9kZShmbGF0Tm9kZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBSZW1vdmUgZnJvbSBjaGlwcyBsaXN0IG9ubHkgaWYgbm8gZmxhdE5vZGUsIGJlY2F1c2UgdW5zZWxlY3RGbGF0Tm9kZSgpIGFscmVhZHkgZGVhbHMgd2l0aCBpdC5cbiAgICAgICAgICAgIHRoaXMucmVtb3ZlTW9kZWxOb2RlKG5vZGUpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb24odGhpcy5zZWxlY3RlZE5vZGVzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBpc05vZGVUb2dnbGFibGUoZmxhdE5vZGU6IEhpZXJhcmNoaWNGbGF0Tm9kZSk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5pc05vZGVTZWxlY3RlZChmbGF0Tm9kZS5ub2RlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZsYXROb2RlLmRlc2VsZWN0YWJsZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmbGF0Tm9kZS5zZWxlY3RhYmxlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREaXNwbGF5Rm4oY29uZmlnOiBOYXR1cmFsSGllcmFyY2hpY0NvbmZpZ3VyYXRpb24pOiAoaXRlbTogYW55KSA9PiBzdHJpbmcge1xuICAgICAgICBpZiAoY29uZmlnLmRpc3BsYXlXaXRoKSB7XG4gICAgICAgICAgICByZXR1cm4gY29uZmlnLmRpc3BsYXlXaXRoO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZGlzcGxheVdpdGgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRpc3BsYXlXaXRoO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGl0ZW0gPT4gKGl0ZW0gPyBpdGVtLmZ1bGxOYW1lIHx8IGl0ZW0ubmFtZSA6ICcnKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbG9hZENoaWxkcmVuKGZsYXROb2RlOiBIaWVyYXJjaGljRmxhdE5vZGUpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMudHJlZUNvbnRyb2wuaXNFeHBhbmRlZChmbGF0Tm9kZSkpIHtcbiAgICAgICAgICAgIHRoaXMuaGllcmFyY2hpY1NlbGVjdG9yU2VydmljZS5sb2FkQ2hpbGRyZW4oZmxhdE5vZGUsIHRoaXMuZmlsdGVycyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVkIHRvIGNvbGxhcHNlIGFsbCBjaGlsZHJlbiB3aGVuIGNsb3NpbmcgYSBwYXJlbnQsIGJ1dCBub3Qgc3VyZSBpdCdzIGdvb2QuXG4gICAgICovXG4gICAgLy8gcHVibGljIGxvYWRDaGlsZHJlbihmbGF0Tm9kZTogSGllcmFyY2hpY0ZsYXROb2RlKSB7XG4gICAgLy8gICAgIGlmICh0aGlzLnRyZWVDb250cm9sLmlzRXhwYW5kZWQoZmxhdE5vZGUpKSB7XG4gICAgLy9cbiAgICAvLyAgICAgICAgIGNvbnN0IGNhY2hlZEZsYXROb2RlID0gdGhpcy5nZXRGbGF0Tm9kZShmbGF0Tm9kZS5ub2RlKTtcbiAgICAvLyAgICAgICAgIGlmIChjYWNoZWRGbGF0Tm9kZSkge1xuICAgIC8vICAgICAgICAgICAgIHRoaXMuaGllcmFyY2hpY1NlbGVjdG9yU2VydmljZS5sb2FkQ2hpbGRyZW4oY2FjaGVkRmxhdE5vZGUsIHRoaXMuZmlsdGVycyk7XG4gICAgLy9cbiAgICAvLyAgICAgICAgICAgICAvLyBDbG9zZSBjaGlsZHJlblxuICAgIC8vICAgICAgICAgICAgIGNhY2hlZEZsYXROb2RlLm5vZGUuY2hpbGRyZW4uZm9yRWFjaChjaGlsZCA9PiB7XG4gICAgLy8gICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IHRoaXMuZ2V0RmxhdE5vZGUoY2hpbGQpO1xuICAgIC8vICAgICAgICAgICAgICAgICBpZiAoY2hpbGROb2RlKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLnRyZWVDb250cm9sLmNvbGxhcHNlKGNoaWxkTm9kZSk7XG4gICAgLy8gICAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICB9KTtcbiAgICAvLyAgICAgICAgIH1cbiAgICAvLyAgICAgfVxuICAgIC8vIH1cblxuICAgIHB1YmxpYyBnZXRDaGlsZHJlbigpOiAobm9kZTogSGllcmFyY2hpY01vZGVsTm9kZSkgPT4gT2JzZXJ2YWJsZTxIaWVyYXJjaGljTW9kZWxOb2RlW10+IHtcbiAgICAgICAgcmV0dXJuIChub2RlOiBIaWVyYXJjaGljTW9kZWxOb2RlKTogT2JzZXJ2YWJsZTxIaWVyYXJjaGljTW9kZWxOb2RlW10+ID0+IHtcbiAgICAgICAgICAgIHJldHVybiBub2RlLmNoaWxkcmVuQ2hhbmdlO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRyYW5zZm9ybXMgYSBIaWVyYXJjaGljTW9kZWxOb2RlIGludG8gYSBGbGF0Tm9kZVxuICAgICAqL1xuICAgIHB1YmxpYyB0cmFuc2Zvcm1lcigpOiAobm9kZTogSGllcmFyY2hpY01vZGVsTm9kZSwgbGV2ZWw6IG51bWJlcikgPT4gSGllcmFyY2hpY0ZsYXROb2RlIHtcbiAgICAgICAgcmV0dXJuIChub2RlOiBIaWVyYXJjaGljTW9kZWxOb2RlLCBsZXZlbDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRPckNyZWF0ZUZsYXROb2RlKG5vZGUsIGxldmVsKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gZGVlcCBvZiB0aGUgbm9kZSBpbiB0aGUgdHJlZVxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRMZXZlbCgpOiAobm9kZTogSGllcmFyY2hpY0ZsYXROb2RlKSA9PiBudW1iZXIge1xuICAgICAgICByZXR1cm4gKG5vZGU6IEhpZXJhcmNoaWNGbGF0Tm9kZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG5vZGUubGV2ZWw7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSXMgYWx3YXlzIGV4cGFuZGFibGUgYmVjYXVzZSB3ZSBsb2FkIG9uIGRlbWFuZCwgd2UgZG9uJ3Qga25vdyBpZiB0aGVyZSBhcmUgY2hpbGRyZW4geWV0XG4gICAgICovXG4gICAgcHVibGljIGlzRXhwYW5kYWJsZSgpOiAobm9kZTogSGllcmFyY2hpY0ZsYXROb2RlKSA9PiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIChub2RlOiBIaWVyYXJjaGljRmxhdE5vZGUpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBub2RlLmV4cGFuZGFibGU7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIGdldE9yQ3JlYXRlRmxhdE5vZGUobm9kZTogSGllcmFyY2hpY01vZGVsTm9kZSwgbGV2ZWw6IG51bWJlcik6IEhpZXJhcmNoaWNGbGF0Tm9kZSB7XG4gICAgICAgIC8vIFJldHVybiBGbGF0Tm9kZSBpZiBleGlzdHNcbiAgICAgICAgY29uc3QgZmxhdE5vZGUgPSB0aGlzLmdldEZsYXROb2RlKG5vZGUpO1xuICAgICAgICBpZiAoZmxhdE5vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBmbGF0Tm9kZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJldHVybiBuZXcgRmxhdE5vZGVcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlRmxhdE5vZGUobm9kZSwgbGV2ZWwpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZWFyY2goc2VsZWN0aW9uczogTmF0dXJhbFNlYXJjaFNlbGVjdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWFyY2hTZWxlY3Rpb25DaGFuZ2UuZW1pdChzZWxlY3Rpb25zKTtcbiAgICAgICAgaWYgKHNlbGVjdGlvbnMuc29tZShzID0+IHMubGVuZ3RoKSkge1xuICAgICAgICAgICAgY29uc3QgdmFyaWFibGVzID0ge2ZpbHRlcjogdG9HcmFwaFFMRG9jdHJpbmVGaWx0ZXIodGhpcy5zZWFyY2hGYWNldHMsIHNlbGVjdGlvbnMpfTtcbiAgICAgICAgICAgIHRoaXMuaGllcmFyY2hpY1NlbGVjdG9yU2VydmljZS5zZWFyY2godmFyaWFibGVzLCB0aGlzLmZpbHRlcnMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5sb2FkUm9vdHMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgbG9hZFJvb3RzKHNlYXJjaFZhcmlhYmxlcz86IFF1ZXJ5VmFyaWFibGVzKTogdm9pZCB7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuZmxhdE5vZGVNYXAgPSBuZXcgTWFwPHN0cmluZywgSGllcmFyY2hpY0ZsYXROb2RlPigpO1xuICAgICAgICB0aGlzLmhpZXJhcmNoaWNTZWxlY3RvclNlcnZpY2VcbiAgICAgICAgICAgIC5pbml0KHRoaXMuY29uZmlnLCB0aGlzLmZpbHRlcnMsIHNlYXJjaFZhcmlhYmxlcyB8fCBudWxsKVxuICAgICAgICAgICAgLnBpcGUoZmluYWxpemUoKCkgPT4gKHRoaXMubG9hZGluZyA9IGZhbHNlKSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU3luYyBpbm5lciBzZWxlY3Rpb24gKHRyZWUgYW5kIG1hdC1jaGlwcykgYWNjb3JkaW5nIHRvIHNlbGVjdGVkIGlucHV0IGF0dHJpYnV0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgdXBkYXRlSW5uZXJTZWxlY3Rpb24oc2VsZWN0ZWQ6IE9yZ2FuaXplZE1vZGVsU2VsZWN0aW9uKTogdm9pZCB7XG4gICAgICAgIC8vIFRyYW5zZm9ybSBhbiBPcmdhbml6ZWRNb2RlbFNlbGVjdGlvbiBpbnRvIGEgTW9kZWxOb2RlIGxpc3QgdGhhdCBpcyB1c2VkIGluIHRoZSBzZWxlY3RlZCB6b25lIG9mIHRoZSBjb21wb25lbnQgKHNlZSB0ZW1wbGF0ZSlcbiAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGVzID0gdGhpcy5oaWVyYXJjaGljU2VsZWN0b3JTZXJ2aWNlLmZyb21Pcmdhbml6ZWRTZWxlY3Rpb24oc2VsZWN0ZWQpO1xuXG4gICAgICAgIHRoaXMuZmxhdE5vZGVzU2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiB0aGlzLnNlbGVjdGVkTm9kZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGZsYXROb2RlID0gdGhpcy5nZXRGbGF0Tm9kZShub2RlKTtcbiAgICAgICAgICAgIGlmIChmbGF0Tm9kZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmxhdE5vZGVzU2VsZWN0aW9uLnNlbGVjdChmbGF0Tm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVbnNlbGVjdCBhIG5vZGUsIGtlZXBpbmcgdGhlIHJlc3Qgb2YgdGhlIHNlbGVjdGVkIHVudG91Y2hlZFxuICAgICAqL1xuICAgIHByaXZhdGUgdW5zZWxlY3RGbGF0Tm9kZShmbGF0Tm9kZTogSGllcmFyY2hpY0ZsYXROb2RlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZmxhdE5vZGVzU2VsZWN0aW9uLmRlc2VsZWN0KGZsYXROb2RlKTtcbiAgICAgICAgdGhpcy5yZW1vdmVNb2RlbE5vZGUoZmxhdE5vZGUubm9kZSk7XG4gICAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uKHRoaXMuc2VsZWN0ZWROb2Rlcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGEgbm9kZSBmcm9tIGNoaXAgbGlzdHNcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlbW92ZU1vZGVsTm9kZShub2RlOiBIaWVyYXJjaGljTW9kZWxOb2RlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0TWFwS2V5KG5vZGUubW9kZWwpO1xuICAgICAgICBjb25zdCBzZWxlY3Rpb25JbmRleCA9IHRoaXMuc2VsZWN0ZWROb2Rlcy5maW5kSW5kZXgobiA9PiB0aGlzLmdldE1hcEtleShuLm1vZGVsKSA9PT0ga2V5KTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGVzLnNwbGljZShzZWxlY3Rpb25JbmRleCwgMSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VsZWN0IGEgbm9kZSwga2VlcGluZyB0aCByZXN0IG9mIHRoZSBzZWxlY3RlZCB1bnRvdWNoZWRcbiAgICAgKi9cbiAgICBwcml2YXRlIHNlbGVjdEZsYXROb2RlKGZsYXROb2RlOiBIaWVyYXJjaGljRmxhdE5vZGUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mbGF0Tm9kZXNTZWxlY3Rpb24uc2VsZWN0KGZsYXROb2RlKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGVzLnB1c2goZmxhdE5vZGUubm9kZSk7XG4gICAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uKHRoaXMuc2VsZWN0ZWROb2Rlcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xlYXIgYWxsIHNlbGVjdGVkIGFuZCBzZWxlY3QgdGhlIGdpdmVuIG5vZGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHNlbGVjdFNpbmdsZUZsYXROb2RlKGZsYXROb2RlOiBIaWVyYXJjaGljRmxhdE5vZGUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mbGF0Tm9kZXNTZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgICAgdGhpcy5mbGF0Tm9kZXNTZWxlY3Rpb24uc2VsZWN0KGZsYXROb2RlKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGVzID0gW2ZsYXROb2RlLm5vZGVdO1xuICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbih0aGlzLnNlbGVjdGVkTm9kZXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsZWFyIGFsbCBzZWxlY3RlZCBhbmQgc2VsZWN0IHRoZSBnaXZlbiBub2RlXG4gICAgICovXG4gICAgcHJpdmF0ZSB1bnNlbGVjdFNpbmdsZUZsYXROb2RlKGZsYXROb2RlOiBIaWVyYXJjaGljRmxhdE5vZGUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mbGF0Tm9kZXNTZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGVzID0gW107XG4gICAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uKHRoaXMuc2VsZWN0ZWROb2Rlcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJhbnNmb3JtIHRoZSBnaXZlbiBlbGVtZW50cyBpbnRvIHRoZSBvcmdhbml6ZWQgc2VsZWN0aW9uIHRoYXQgaXMgZW1pdHRlZCB0byBvdXRwdXRcbiAgICAgKi9cbiAgICBwcml2YXRlIHVwZGF0ZVNlbGVjdGlvbihzZWxlY3RlZDogSGllcmFyY2hpY01vZGVsTm9kZVtdKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG9yZ2FuaXplZEZsYXROb2Rlc1NlbGVjdGlvbiA9IHRoaXMuaGllcmFyY2hpY1NlbGVjdG9yU2VydmljZS50b09yZ2FuaXplZFNlbGVjdGlvbihzZWxlY3RlZCk7XG4gICAgICAgIHJlcGxhY2VPYmplY3RLZWVwaW5nUmVmZXJlbmNlKHRoaXMuc2VsZWN0ZWQsIG9yZ2FuaXplZEZsYXROb2Rlc1NlbGVjdGlvbik7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQob3JnYW5pemVkRmxhdE5vZGVzU2VsZWN0aW9uKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzTm9kZVNlbGVjdGVkKG5vZGU6IEhpZXJhcmNoaWNNb2RlbE5vZGUpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5nZXRNYXBLZXkobm9kZS5tb2RlbCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWROb2Rlcy5zb21lKG4gPT4gdGhpcy5nZXRNYXBLZXkobi5tb2RlbCkgPT09IGtleSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGbGF0Tm9kZShub2RlOiBIaWVyYXJjaGljTW9kZWxOb2RlKTogSGllcmFyY2hpY0ZsYXROb2RlIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0TWFwS2V5KG5vZGUubW9kZWwpO1xuICAgICAgICByZXR1cm4gdGhpcy5mbGF0Tm9kZU1hcC5nZXQoa2V5KSB8fCBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlRmxhdE5vZGUobm9kZTogSGllcmFyY2hpY01vZGVsTm9kZSwgbGV2ZWw6IG51bWJlcik6IEhpZXJhcmNoaWNGbGF0Tm9kZSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0TWFwS2V5KG5vZGUubW9kZWwpO1xuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5nZXREaXNwbGF5Rm4obm9kZS5jb25maWcpKG5vZGUubW9kZWwpO1xuICAgICAgICBjb25zdCBleHBhbmRhYmxlID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGlzQ3VzdG9tU2VsZWN0YWJsZSA9IG5vZGUuY29uZmlnLmlzU2VsZWN0YWJsZUNhbGxiYWNrXG4gICAgICAgICAgICA/IG5vZGUuY29uZmlnLmlzU2VsZWN0YWJsZUNhbGxiYWNrKG5vZGUubW9kZWwpXG4gICAgICAgICAgICA6IHRydWU7XG4gICAgICAgIGNvbnN0IGlzU2VsZWN0YWJsZSA9ICEhbm9kZS5jb25maWcuc2VsZWN0YWJsZUF0S2V5ICYmIGlzQ3VzdG9tU2VsZWN0YWJsZTtcblxuICAgICAgICBjb25zdCBmbGF0Tm9kZSA9IG5ldyBIaWVyYXJjaGljRmxhdE5vZGUobm9kZSwgbmFtZSwgbGV2ZWwsIGV4cGFuZGFibGUsIGlzU2VsZWN0YWJsZSk7XG5cbiAgICAgICAgdGhpcy5oaWVyYXJjaGljU2VsZWN0b3JTZXJ2aWNlLmNvdW50SXRlbXMoZmxhdE5vZGUsIHRoaXMuZmlsdGVycyk7XG5cbiAgICAgICAgLy8gTWFyayBub2RlIGFzIHNlbGVjdGVkIGlmIG5lZWRlZCAoY2hlY2tzIHRoZSBzZWxlY3RlZCBwcm9jZXNzZWQgaW5wdXQpXG4gICAgICAgIGlmICh0aGlzLmlzTm9kZVNlbGVjdGVkKG5vZGUpKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuYWxsb3dVbnNlbGVjdCkge1xuICAgICAgICAgICAgICAgIGZsYXROb2RlLmRlc2VsZWN0YWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5mbGF0Tm9kZXNTZWxlY3Rpb24uc2VsZWN0KGZsYXROb2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENhY2hlIEZsYXROb2RlXG4gICAgICAgIHRoaXMuZmxhdE5vZGVNYXAuc2V0KGtleSwgZmxhdE5vZGUpO1xuXG4gICAgICAgIHJldHVybiBmbGF0Tm9kZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIGlkZW50aWZpZXIga2V5IGZvciBtYXAgY2FjaGVcbiAgICAgKiBBcyBtYW55IG9iamVjdCB0eXBlcyBjYW4gYmUgdXNlZCwgdGhpcyBmdW5jdGlvbiBjb25zaWRlcnMgdHlwZW5hbWUgYW5kIElEIHRvIHJldHVybiBzb21ldGhpbmcgbGlrZSBkb2N1bWVudC0xMjNcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldE1hcEtleShtb2RlbDogTGl0ZXJhbCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBtb2RlbC5fX3R5cGVuYW1lICsgJy0nICsgbW9kZWwuaWQ7XG4gICAgfVxufVxuIiwiPGRpdiBbc3R5bGUubWFyZ2luLWJvdHRvbS5weF09XCIyMFwiPlxuICAgIDxuYXR1cmFsLXNlYXJjaFxuICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cInNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgW2ZhY2V0c109XCJzZWFyY2hGYWNldHNcIlxuICAgICAgICBbc2VsZWN0aW9uc109XCJzZWFyY2hTZWxlY3Rpb25zXCJcbiAgICA+PC9uYXR1cmFsLXNlYXJjaD5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwiYm9keVwiPlxuICAgIDxtYXQtcHJvZ3Jlc3Mtc3Bpbm5lclxuICAgICAgICAqbmdJZj1cImxvYWRpbmdcIlxuICAgICAgICBbZGlhbWV0ZXJdPVwiMzZcIlxuICAgICAgICBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiXG4gICAgICAgIHN0eWxlPVwibWFyZ2luOiAxMHB4XCJcbiAgICA+PC9tYXQtcHJvZ3Jlc3Mtc3Bpbm5lcj5cblxuICAgIDxtYXQtdHJlZSBbZGF0YVNvdXJjZV09XCJkYXRhU291cmNlXCIgW3RyZWVDb250cm9sXT1cInRyZWVDb250cm9sXCI+XG4gICAgICAgIDxtYXQtdHJlZS1ub2RlICptYXRUcmVlTm9kZURlZj1cImxldCBub2RlXCIgW25nQ2xhc3NdPVwie2xlYWY6ICFub2RlLmV4cGFuZGFibGV9XCIgbWF0VHJlZU5vZGVQYWRkaW5nPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9XCJsb2FkQ2hpbGRyZW4obm9kZSlcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwibm9kZS5leHBhbmRhYmxlXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIid0b2dnbGUgJyArIG5vZGUubmFtZVwiXG4gICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgbWF0VHJlZU5vZGVUb2dnbGVcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bWF0LXByb2dyZXNzLXNwaW5uZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJub2RlLmxvYWRpbmdcIlxuICAgICAgICAgICAgICAgICAgICBbZGlhbWV0ZXJdPVwiMjRcIlxuICAgICAgICAgICAgICAgICAgICBbc3Ryb2tlV2lkdGhdPVwiNVwiXG4gICAgICAgICAgICAgICAgICAgIG1vZGU9XCJpbmRldGVybWluYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJtYXJnaW46IDhweFwiXG4gICAgICAgICAgICAgICAgPjwvbWF0LXByb2dyZXNzLXNwaW5uZXI+XG5cbiAgICAgICAgICAgICAgICA8bmF0dXJhbC1pY29uXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIW5vZGUubG9hZGluZ1wiXG4gICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cInRyZWVDb250cm9sLmlzRXhwYW5kZWQobm9kZSkgPyAnZXhwYW5kX21vcmUnIDogJ2NoZXZyb25fcmlnaHQnXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPC9uYXR1cmFsLWljb24+XG4gICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgPG1hdC1jaGVja2JveFxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlRmxhdE5vZGUobm9kZSlcIlxuICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImZsYXROb2Rlc1NlbGVjdGlvbi5pc1NlbGVjdGVkKG5vZGUpXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWlzTm9kZVRvZ2dsYWJsZShub2RlKVwiXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDEwcHhcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxuYXR1cmFsLWljb25cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJub2RlLm5vZGUuY29uZmlnLmljb25cIlxuICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJub2RlLm5vZGUuY29uZmlnLmljb25cIlxuICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIm1hcmdpbi1yaWdodDogMTBweFwiXG4gICAgICAgICAgICAgICAgPjwvbmF0dXJhbC1pY29uPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IG5vZGUubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxuICAgICAgICA8L21hdC10cmVlLW5vZGU+XG4gICAgPC9tYXQtdHJlZT5cblxuICAgIDxtYXQtY2hpcC1saXN0IGFyaWEtb3JpZW50YXRpb249XCJ2ZXJ0aWNhbFwiIGNsYXNzPVwibWF0LWNoaXAtbGlzdC1zdGFja2VkXCI+XG4gICAgICAgIDxtYXQtY2hpcFxuICAgICAgICAgICAgKHJlbW92ZWQpPVwidW5zZWxlY3RNb2RlbE5vZGUobm9kZSlcIlxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IG5vZGUgb2Ygc2VsZWN0ZWROb2Rlc1wiXG4gICAgICAgICAgICBbcmVtb3ZhYmxlXT1cInRydWVcIlxuICAgICAgICAgICAgW3NlbGVjdGFibGVdPVwiZmFsc2VcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8bmF0dXJhbC1pY29uICpuZ0lmPVwibm9kZS5jb25maWcuaWNvblwiIFtuYW1lXT1cIm5vZGUuY29uZmlnLmljb25cIj48L25hdHVyYWwtaWNvbj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYXQtYm9keSBjaGlwLWxhYmVsXCI+e3sgbm9kZS5tb2RlbC5uYW1lIHx8IG5vZGUubW9kZWwuZnVsbE5hbWUgfX08L2Rpdj5cbiAgICAgICAgICAgIDxuYXR1cmFsLWljb24gbWF0Q2hpcFJlbW92ZSBuYW1lPVwiY2FuY2VsXCI+PC9uYXR1cmFsLWljb24+XG4gICAgICAgIDwvbWF0LWNoaXA+XG4gICAgPC9tYXQtY2hpcC1saXN0PlxuPC9kaXY+XG5cbjxkaXYgKm5nSWY9XCIhbG9hZGluZyAmJiAhZGF0YVNvdXJjZS5kYXRhLmxlbmd0aFwiIGNsYXNzPVwibWFyZ2luLXZcIiBpMThuPkF1Y3VuIHLDqXN1bHRhdDwvZGl2PlxuIl19
364
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGllcmFyY2hpYy1zZWxlY3Rvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsL3NyYy9saWIvbW9kdWxlcy9oaWVyYXJjaGljLXNlbGVjdG9yL2hpZXJhcmNoaWMtc2VsZWN0b3IvaGllcmFyY2hpYy1zZWxlY3Rvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsL3NyYy9saWIvbW9kdWxlcy9oaWVyYXJjaGljLXNlbGVjdG9yL2hpZXJhcmNoaWMtc2VsZWN0b3IvaGllcmFyY2hpYy1zZWxlY3Rvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDeEQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFnQixNQUFNLGVBQWUsQ0FBQztBQUN2RyxPQUFPLEVBQUMscUJBQXFCLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUUvRSxPQUFPLEVBQUMsUUFBUSxFQUFFLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBRy9FLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLHVDQUF1QyxDQUFDO0FBRzlFLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBSXhELE9BQU8sRUFBQyxnQ0FBZ0MsRUFBMEIsTUFBTSwrQkFBK0IsQ0FBQztBQUN4RyxPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7Ozs7QUFRdkUsTUFBTSxPQUFPLGtDQUFtQyxTQUFRLHlC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QXRCLEtBQUs7Z0JBS1UsWUFBWTtzQkFBM0IsS0FBSztnQkFLVSxnQkFBZ0I7c0JBQS9CLEtBQUs7Z0JBS29CLHFCQUFxQjtzQkFBOUMsTUFBTTtnQkFXbUIsZUFBZTtzQkFBeEMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7U2VsZWN0aW9uTW9kZWx9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQge0ZsYXRUcmVlQ29udHJvbH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3RyZWUnO1xuaW1wb3J0IHtDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXN9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtNYXRUcmVlRmxhdERhdGFTb3VyY2UsIE1hdFRyZWVGbGF0dGVuZXJ9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RyZWUnO1xuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7ZmluYWxpemUsIHRha2VVbnRpbH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtOYXR1cmFsQWJzdHJhY3RDb250cm9sbGVyfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL2Fic3RyYWN0LWNvbnRyb2xsZXInO1xuaW1wb3J0IHtRdWVyeVZhcmlhYmxlc30gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9xdWVyeS12YXJpYWJsZS1tYW5hZ2VyJztcbmltcG9ydCB7TGl0ZXJhbH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvdHlwZXMnO1xuaW1wb3J0IHt0b0dyYXBoUUxEb2N0cmluZUZpbHRlcn0gZnJvbSAnLi4vLi4vc2VhcmNoL2NsYXNzZXMvZ3JhcGhxbC1kb2N0cmluZSc7XG5pbXBvcnQge05hdHVyYWxTZWFyY2hGYWNldHN9IGZyb20gJy4uLy4uL3NlYXJjaC90eXBlcy9mYWNldCc7XG5pbXBvcnQge05hdHVyYWxTZWFyY2hTZWxlY3Rpb25zfSBmcm9tICcuLi8uLi9zZWFyY2gvdHlwZXMvdmFsdWVzJztcbmltcG9ydCB7SGllcmFyY2hpY0ZsYXROb2RlfSBmcm9tICcuLi9jbGFzc2VzL2ZsYXQtbm9kZSc7XG5pbXBvcnQge05hdHVyYWxIaWVyYXJjaGljQ29uZmlndXJhdGlvbn0gZnJvbSAnLi4vY2xhc3Nlcy9oaWVyYXJjaGljLWNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHtIaWVyYXJjaGljRmlsdGVyc0NvbmZpZ3VyYXRpb259IGZyb20gJy4uL2NsYXNzZXMvaGllcmFyY2hpYy1maWx0ZXJzLWNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHtIaWVyYXJjaGljTW9kZWxOb2RlfSBmcm9tICcuLi9jbGFzc2VzL21vZGVsLW5vZGUnO1xuaW1wb3J0IHtOYXR1cmFsSGllcmFyY2hpY1NlbGVjdG9yU2VydmljZSwgT3JnYW5pemVkTW9kZWxTZWxlY3Rpb259IGZyb20gJy4vaGllcmFyY2hpYy1zZWxlY3Rvci5zZXJ2aWNlJztcbmltcG9ydCB7cmVwbGFjZU9iamVjdEtlZXBpbmdSZWZlcmVuY2V9IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvdXRpbGl0eSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmF0dXJhbC1oaWVyYXJjaGljLXNlbGVjdG9yJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vaGllcmFyY2hpYy1zZWxlY3Rvci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vaGllcmFyY2hpYy1zZWxlY3Rvci5jb21wb25lbnQuc2NzcyddLFxuICAgIHByb3ZpZGVyczogW05hdHVyYWxIaWVyYXJjaGljU2VsZWN0b3JTZXJ2aWNlXSxcbn0pXG5leHBvcnQgY2xhc3MgTmF0dXJhbEhpZXJhcmNoaWNTZWxlY3RvckNvbXBvbmVudCBleHRlbmRzIE5hdHVyYWxBYnN0cmFjdENvbnRyb2xsZXIgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gdGhhdCByZWNlaXZlcyBhIG1vZGVsIGFuZCByZXR1cm5zIGEgc3RyaW5nIGZvciBkaXNwbGF5IHZhbHVlXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIGRpc3BsYXlXaXRoPzogKGl0ZW06IGFueSkgPT4gc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQ29uZmlnIGZvciBpdGVtcyBhbmQgcmVsYXRpb25zIGFycmFuZ2VtZW50XG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIGNvbmZpZyE6IE5hdHVyYWxIaWVyYXJjaGljQ29uZmlndXJhdGlvbltdO1xuXG4gICAgLyoqXG4gICAgICogSWYgbXVsdGlwbGUgb3Igc2luZ2xlIGl0ZW0gc2VsZWN0aW9uXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIG11bHRpcGxlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTZWxlY3RlZCBpdGVtc1xuICAgICAqIE9yZ2FuaXplZCBieSBrZXksIGNvbnRhaW5pbmcgZWFjaCBhbiBhcnJheSBvZiBzZWxlY3RlZCBpdGVtcyBvZiBzYW1lIHR5cGVcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgc2VsZWN0ZWQ6IE9yZ2FuaXplZE1vZGVsU2VsZWN0aW9uID0ge307XG5cbiAgICAvKipcbiAgICAgKiBXaGVyZXZlciBpZiBzZWxlY3RhYmxlIGVsZW1lbnRzIGNhbiBiZSB1bnNlbGVjdGVkXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIGFsbG93VW5zZWxlY3QgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogRmlsdGVycyB0aGF0IGFwcGx5IHRvIGVhY2ggcXVlcnlcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgZmlsdGVycz86IEhpZXJhcmNoaWNGaWx0ZXJzQ29uZmlndXJhdGlvbiB8IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBTZWFyY2ggZmFjZXRzXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIHNlYXJjaEZhY2V0czogTmF0dXJhbFNlYXJjaEZhY2V0cyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogU2VsZWN0aW9ucyB0byBhcHBseSBvbiBuYXR1cmFsLXNlYXJjaCBvbiBjb21wb25lbnQgaW5pdGlhbGlzYXRpb25cbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgc2VhcmNoU2VsZWN0aW9uczogTmF0dXJhbFNlYXJjaFNlbGVjdGlvbnMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEVtaXRzIHdoZW4gbmF0dXJhbC1zZWFyY2ggc2VsZWN0aW9ucyBjaGFuZ2VcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgcHVibGljIHJlYWRvbmx5IHNlYXJjaFNlbGVjdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8TmF0dXJhbFNlYXJjaFNlbGVjdGlvbnM+KCk7XG5cbiAgICAvKipcbiAgICAgKiBJbm5lciByZXByZXNlbnRhdGlvbiBvZiBzZWxlY3RlZCBASW5wdXQoKSB0byBhbGxvdyBmbGF0IGxpc3RpbmcgYXMgbWF0LWNoaXAuXG4gICAgICovXG4gICAgcHVibGljIHNlbGVjdGVkTm9kZXM6IEhpZXJhcmNoaWNNb2RlbE5vZGVbXSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHMgc2VsZWN0aW9uIGNoYW5nZVxuICAgICAqIFJldHVybnMgYSBMaXRlcmFsIHdoZXJlIHNlbGVjdGVkIG1vZGVscyBhcmUgb3JnYW5pemVkIGJ5IGtleVxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgcmVhZG9ubHkgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxPcmdhbml6ZWRNb2RlbFNlbGVjdGlvbj4oKTtcblxuICAgIC8qKlxuICAgICAqIENvbnRyb2xsZXIgZm9yIG5vZGVzIHNlbGVjdGlvblxuICAgICAqL1xuICAgIHB1YmxpYyBmbGF0Tm9kZXNTZWxlY3Rpb24hOiBTZWxlY3Rpb25Nb2RlbDxIaWVyYXJjaGljRmxhdE5vZGU+O1xuXG4gICAgcHVibGljIHRyZWVDb250cm9sITogRmxhdFRyZWVDb250cm9sPEhpZXJhcmNoaWNGbGF0Tm9kZT47XG4gICAgcHVibGljIHRyZWVGbGF0dGVuZXIhOiBNYXRUcmVlRmxhdHRlbmVyPEhpZXJhcmNoaWNNb2RlbE5vZGUsIEhpZXJhcmNoaWNGbGF0Tm9kZT47XG4gICAgcHVibGljIGRhdGFTb3VyY2UhOiBNYXRUcmVlRmxhdERhdGFTb3VyY2U8SGllcmFyY2hpY01vZGVsTm9kZSwgSGllcmFyY2hpY0ZsYXROb2RlPjtcblxuICAgIHB1YmxpYyBsb2FkaW5nID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBDYWNoZSBmb3IgdHJhbnNmb3JtZWQgbm9kZXNcbiAgICAgKi9cbiAgICBwcml2YXRlIGZsYXROb2RlTWFwOiBNYXA8c3RyaW5nLCBIaWVyYXJjaGljRmxhdE5vZGU+ID0gbmV3IE1hcDxzdHJpbmcsIEhpZXJhcmNoaWNGbGF0Tm9kZT4oKTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGhpZXJhcmNoaWNTZWxlY3RvclNlcnZpY2U6IE5hdHVyYWxIaWVyYXJjaGljU2VsZWN0b3JTZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQW5ndWxhciBPbkluaXQgaW1wbGVtZW50YXRpb25cbiAgICAgKi9cbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIC8vIEluaXQgdHJlZSBjaGVja2JveCBzZWxlY3RvcnNcbiAgICAgICAgdGhpcy5mbGF0Tm9kZXNTZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uTW9kZWw8YW55Pih0aGlzLm11bHRpcGxlKTtcblxuICAgICAgICAvLyBUcmVlIGNvbnRyb2xsZXJzIGFuZCBtYW5pcHVsYXRvcnNcbiAgICAgICAgdGhpcy50cmVlRmxhdHRlbmVyID0gbmV3IE1hdFRyZWVGbGF0dGVuZXIoXG4gICAgICAgICAgICB0aGlzLnRyYW5zZm9ybWVyKCksXG4gICAgICAgICAgICB0aGlzLmdldExldmVsKCksXG4gICAgICAgICAgICB0aGlzLmlzRXhwYW5kYWJsZSgpLFxuICAgICAgICAgICAgdGhpcy5nZXRDaGlsZHJlbigpLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnRyZWVDb250cm9sID0gbmV3IEZsYXRUcmVlQ29udHJvbDxIaWVyYXJjaGljRmxhdE5vZGU+KHRoaXMuZ2V0TGV2ZWwoKSwgdGhpcy5pc0V4cGFuZGFibGUoKSk7XG5cbiAgICAgICAgLy8gVGhlIGRhdGFTb3VyY2UgY29udGFpbnMgYSBuZXN0ZWQgTW9kZWxOb2RlcyBsaXN0LiBFYWNoIE1vZGVsTm9kZSBoYXMgYSBjaGlsZCBhdHRyaWJ1dGUgdGhhdCByZXR1cm5zIGFuIG9ic2VydmFibGUuXG4gICAgICAgIC8vIFRoZSBkYXRhU291cmNlIGNvbnRhaW5zIGEgZmxhdCByZXByZXNlbnRhdGlvbiBvZiB0aGUgbmVzdGVkIE1vZGVsTm9kZXMgdGhhdCBpcyBnZW5lcmF0ZWQgYnkgdGhlIHRyZWVGbGF0dGVuZXIgcmVsYXRlZCBmdW5jdGlvbnNcbiAgICAgICAgdGhpcy5kYXRhU291cmNlID0gbmV3IE1hdFRyZWVGbGF0RGF0YVNvdXJjZSh0aGlzLnRyZWVDb250cm9sLCB0aGlzLnRyZWVGbGF0dGVuZXIpO1xuXG4gICAgICAgIC8vIFVwZGF0ZSBkYXRhU291cmNlIHdoZW4gcmVjZWl2aW5nIG5ldyBsaXN0IC0+IHdlIGFzc2lnbiB0aGUgd2hvbGUgdHJlZVxuICAgICAgICAvLyBUaGUgdHJlZUNvbnRyb2wgYW5kIHRyZWVGbGF0dGVuZXIgd2lsbCBnZW5lcmF0ZSB0aGUgZGlzcGxheWVkIHRyZWVcbiAgICAgICAgdGhpcy5oaWVyYXJjaGljU2VsZWN0b3JTZXJ2aWNlLmRhdGFDaGFuZ2VcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZShkYXRhID0+ICh0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IGRhdGEpKTtcblxuICAgICAgICAvLyBQcmV2ZW50IGVtcHR5IHNjcmVlbiBvbiBmaXJzdCBsb2FkIGFuZCBpbml0IE5hdHVyYWxIaWVyYXJjaGljU2VsZWN0b3JTZXJ2aWNlIHdpdGggaW5wdXR0ZWQgY29uZmlndXJhdGlvblxuICAgICAgICBsZXQgdmFyaWFibGVzO1xuICAgICAgICBpZiAodGhpcy5zZWFyY2hTZWxlY3Rpb25zLnNvbWUocyA9PiBzLmxlbmd0aCkpIHtcbiAgICAgICAgICAgIHZhcmlhYmxlcyA9IHtmaWx0ZXI6IHRvR3JhcGhRTERvY3RyaW5lRmlsdGVyKHRoaXMuc2VhcmNoRmFjZXRzLCB0aGlzLnNlYXJjaFNlbGVjdGlvbnMpfTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxvYWRSb290cyh2YXJpYWJsZXMpO1xuXG4gICAgICAgIC8vIE9yZ2FuaXplZFNlbGVjdGlvbiBpbnRvIGxpc3QgdXNhYmxlIGJ5IHRlbXBsYXRlXG4gICAgICAgIHRoaXMudXBkYXRlSW5uZXJTZWxlY3Rpb24odGhpcy5zZWxlY3RlZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQW5ndWxhciBPbkNoYW5nZSBpbXBsZW1lbnRhdGlvblxuICAgICAqL1xuICAgIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmIChjaGFuZ2VzLnNlbGVjdGVkICYmICFjaGFuZ2VzLnNlbGVjdGVkLmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUlubmVyU2VsZWN0aW9uKHRoaXMuc2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYW5nZXMuZmlsdGVycyAmJiAhY2hhbmdlcy5maWx0ZXJzLmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRSb290cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVG9nZ2xlIHNlbGVjdGlvbiBvZiBhIEZsYXROb2RlLCBjb25zaWRlcmluZyBpZiBtdWx0aXBsZSBzZWxlY3Rpb24gaXMgYWN0aXZhdGVkIG9yIG5vdFxuICAgICAqL1xuICAgIHB1YmxpYyB0b2dnbGVGbGF0Tm9kZShmbGF0Tm9kZTogSGllcmFyY2hpY0ZsYXROb2RlKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgICAgICAvLyBJcyBtdWx0aXBsZSBhbGxvd2VkLCBqdXN0IHRvZ2dsZSBlbGVtZW50XG4gICAgICAgICAgICBpZiAodGhpcy5mbGF0Tm9kZXNTZWxlY3Rpb24uaXNTZWxlY3RlZChmbGF0Tm9kZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVuc2VsZWN0RmxhdE5vZGUoZmxhdE5vZGUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdEZsYXROb2RlKGZsYXROb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZmxhdE5vZGVzU2VsZWN0aW9uLmlzU2VsZWN0ZWQoZmxhdE5vZGUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51bnNlbGVjdFNpbmdsZUZsYXROb2RlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIElmIG5vdCBtdWx0aXBsZSwgYW5kIHdlIHdhbnQgdG8gc2VsZWN0IGFuIGVsZW1lbnQsIHVuc2VsZWN0IGV2ZXJ5dGhpbmcgYmVmb3JlIHRvIGtlZXAgYSBzaW5nbGUgc2VsZWN0aW9uXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RTaW5nbGVGbGF0Tm9kZShmbGF0Tm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIHVuc2VsZWN0aW5nIGFuIGVsZW1lbnQgZnJvbSB0aGUgbWF0LWNoaXBzLCBpdCBjYW4gYmUgZGVlcCBpbiB0aGUgaGllcmFyY2h5LCBhbmQgdGhlIHRyZWUgZWxlbWVudCBtYXkgbm90IGV4aXN0Li4uXG4gICAgICogLi4uIGJ1dCB3ZSBzdGlsbCBuZWVkIHRvIHJlbW92ZSB0aGUgZWxlbWVudCBmcm9tIHRoZSBtYXQtY2hpcHMgbGlzdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgdW5zZWxlY3RNb2RlbE5vZGUobm9kZTogSGllcmFyY2hpY01vZGVsTm9kZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBmbGF0Tm9kZSA9IHRoaXMuZ2V0RmxhdE5vZGUobm9kZSk7XG4gICAgICAgIGlmIChmbGF0Tm9kZSkge1xuICAgICAgICAgICAgdGhpcy51bnNlbGVjdEZsYXROb2RlKGZsYXROb2RlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFJlbW92ZSBmcm9tIGNoaXBzIGxpc3Qgb25seSBpZiBubyBmbGF0Tm9kZSwgYmVjYXVzZSB1bnNlbGVjdEZsYXROb2RlKCkgYWxyZWFkeSBkZWFscyB3aXRoIGl0LlxuICAgICAgICAgICAgdGhpcy5yZW1vdmVNb2RlbE5vZGUobm9kZSk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbih0aGlzLnNlbGVjdGVkTm9kZXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGlzTm9kZVRvZ2dsYWJsZShmbGF0Tm9kZTogSGllcmFyY2hpY0ZsYXROb2RlKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLmlzTm9kZVNlbGVjdGVkKGZsYXROb2RlLm5vZGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmxhdE5vZGUuZGVzZWxlY3RhYmxlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZsYXROb2RlLnNlbGVjdGFibGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldERpc3BsYXlGbihjb25maWc6IE5hdHVyYWxIaWVyYXJjaGljQ29uZmlndXJhdGlvbik6IChpdGVtOiBhbnkpID0+IHN0cmluZyB7XG4gICAgICAgIGlmIChjb25maWcuZGlzcGxheVdpdGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjb25maWcuZGlzcGxheVdpdGg7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5kaXNwbGF5V2l0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGlzcGxheVdpdGg7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaXRlbSA9PiAoaXRlbSA/IGl0ZW0uZnVsbE5hbWUgfHwgaXRlbS5uYW1lIDogJycpO1xuICAgIH1cblxuICAgIHB1YmxpYyBsb2FkQ2hpbGRyZW4oZmxhdE5vZGU6IEhpZXJhcmNoaWNGbGF0Tm9kZSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy50cmVlQ29udHJvbC5pc0V4cGFuZGVkKGZsYXROb2RlKSkge1xuICAgICAgICAgICAgdGhpcy5oaWVyYXJjaGljU2VsZWN0b3JTZXJ2aWNlLmxvYWRDaGlsZHJlbihmbGF0Tm9kZSwgdGhpcy5maWx0ZXJzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZWQgdG8gY29sbGFwc2UgYWxsIGNoaWxkcmVuIHdoZW4gY2xvc2luZyBhIHBhcmVudCwgYnV0IG5vdCBzdXJlIGl0J3MgZ29vZC5cbiAgICAgKi9cbiAgICAvLyBwdWJsaWMgbG9hZENoaWxkcmVuKGZsYXROb2RlOiBIaWVyYXJjaGljRmxhdE5vZGUpIHtcbiAgICAvLyAgICAgaWYgKHRoaXMudHJlZUNvbnRyb2wuaXNFeHBhbmRlZChmbGF0Tm9kZSkpIHtcbiAgICAvL1xuICAgIC8vICAgICAgICAgY29uc3QgY2FjaGVkRmxhdE5vZGUgPSB0aGlzLmdldEZsYXROb2RlKGZsYXROb2RlLm5vZGUpO1xuICAgIC8vICAgICAgICAgaWYgKGNhY2hlZEZsYXROb2RlKSB7XG4gICAgLy8gICAgICAgICAgICAgdGhpcy5oaWVyYXJjaGljU2VsZWN0b3JTZXJ2aWNlLmxvYWRDaGlsZHJlbihjYWNoZWRGbGF0Tm9kZSwgdGhpcy5maWx0ZXJzKTtcbiAgICAvL1xuICAgIC8vICAgICAgICAgICAgIC8vIENsb3NlIGNoaWxkcmVuXG4gICAgLy8gICAgICAgICAgICAgY2FjaGVkRmxhdE5vZGUubm9kZS5jaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IHtcbiAgICAvLyAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGROb2RlID0gdGhpcy5nZXRGbGF0Tm9kZShjaGlsZCk7XG4gICAgLy8gICAgICAgICAgICAgICAgIGlmIChjaGlsZE5vZGUpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJlZUNvbnRyb2wuY29sbGFwc2UoY2hpbGROb2RlKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgIH0pO1xuICAgIC8vICAgICAgICAgfVxuICAgIC8vICAgICB9XG4gICAgLy8gfVxuXG4gICAgcHJpdmF0ZSBnZXRDaGlsZHJlbigpOiAobm9kZTogSGllcmFyY2hpY01vZGVsTm9kZSkgPT4gT2JzZXJ2YWJsZTxIaWVyYXJjaGljTW9kZWxOb2RlW10+IHtcbiAgICAgICAgcmV0dXJuIChub2RlOiBIaWVyYXJjaGljTW9kZWxOb2RlKTogT2JzZXJ2YWJsZTxIaWVyYXJjaGljTW9kZWxOb2RlW10+ID0+IHtcbiAgICAgICAgICAgIHJldHVybiBub2RlLmNoaWxkcmVuQ2hhbmdlO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRyYW5zZm9ybXMgYSBIaWVyYXJjaGljTW9kZWxOb2RlIGludG8gYSBGbGF0Tm9kZVxuICAgICAqL1xuICAgIHByaXZhdGUgdHJhbnNmb3JtZXIoKTogKG5vZGU6IEhpZXJhcmNoaWNNb2RlbE5vZGUsIGxldmVsOiBudW1iZXIpID0+IEhpZXJhcmNoaWNGbGF0Tm9kZSB7XG4gICAgICAgIHJldHVybiAobm9kZTogSGllcmFyY2hpY01vZGVsTm9kZSwgbGV2ZWw6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T3JDcmVhdGVGbGF0Tm9kZShub2RlLCBsZXZlbCk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGRlZXAgb2YgdGhlIG5vZGUgaW4gdGhlIHRyZWVcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldExldmVsKCk6IChub2RlOiBIaWVyYXJjaGljRmxhdE5vZGUpID0+IG51bWJlciB7XG4gICAgICAgIHJldHVybiAobm9kZTogSGllcmFyY2hpY0ZsYXROb2RlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbm9kZS5sZXZlbDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJcyBhbHdheXMgZXhwYW5kYWJsZSBiZWNhdXNlIHdlIGxvYWQgb24gZGVtYW5kLCB3ZSBkb24ndCBrbm93IGlmIHRoZXJlIGFyZSBjaGlsZHJlbiB5ZXRcbiAgICAgKi9cbiAgICBwcml2YXRlIGlzRXhwYW5kYWJsZSgpOiAobm9kZTogSGllcmFyY2hpY0ZsYXROb2RlKSA9PiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIChub2RlOiBIaWVyYXJjaGljRmxhdE5vZGUpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBub2RlLmV4cGFuZGFibGU7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRPckNyZWF0ZUZsYXROb2RlKG5vZGU6IEhpZXJhcmNoaWNNb2RlbE5vZGUsIGxldmVsOiBudW1iZXIpOiBIaWVyYXJjaGljRmxhdE5vZGUge1xuICAgICAgICAvLyBSZXR1cm4gRmxhdE5vZGUgaWYgZXhpc3RzXG4gICAgICAgIGNvbnN0IGZsYXROb2RlID0gdGhpcy5nZXRGbGF0Tm9kZShub2RlKTtcbiAgICAgICAgaWYgKGZsYXROb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmxhdE5vZGU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZXR1cm4gbmV3IEZsYXROb2RlXG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUZsYXROb2RlKG5vZGUsIGxldmVsKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2VhcmNoKHNlbGVjdGlvbnM6IE5hdHVyYWxTZWFyY2hTZWxlY3Rpb25zKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VhcmNoU2VsZWN0aW9uQ2hhbmdlLmVtaXQoc2VsZWN0aW9ucyk7XG4gICAgICAgIGlmIChzZWxlY3Rpb25zLnNvbWUocyA9PiBzLmxlbmd0aCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhcmlhYmxlcyA9IHtmaWx0ZXI6IHRvR3JhcGhRTERvY3RyaW5lRmlsdGVyKHRoaXMuc2VhcmNoRmFjZXRzLCBzZWxlY3Rpb25zKX07XG4gICAgICAgICAgICB0aGlzLmhpZXJhcmNoaWNTZWxlY3RvclNlcnZpY2Uuc2VhcmNoKHZhcmlhYmxlcywgdGhpcy5maWx0ZXJzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubG9hZFJvb3RzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGxvYWRSb290cyhzZWFyY2hWYXJpYWJsZXM/OiBRdWVyeVZhcmlhYmxlcyk6IHZvaWQge1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmZsYXROb2RlTWFwID0gbmV3IE1hcDxzdHJpbmcsIEhpZXJhcmNoaWNGbGF0Tm9kZT4oKTtcbiAgICAgICAgdGhpcy5oaWVyYXJjaGljU2VsZWN0b3JTZXJ2aWNlXG4gICAgICAgICAgICAuaW5pdCh0aGlzLmNvbmZpZywgdGhpcy5maWx0ZXJzLCBzZWFyY2hWYXJpYWJsZXMgfHwgbnVsbClcbiAgICAgICAgICAgIC5waXBlKGZpbmFsaXplKCgpID0+ICh0aGlzLmxvYWRpbmcgPSBmYWxzZSkpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFN5bmMgaW5uZXIgc2VsZWN0aW9uICh0cmVlIGFuZCBtYXQtY2hpcHMpIGFjY29yZGluZyB0byBzZWxlY3RlZCBpbnB1dCBhdHRyaWJ1dGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHVwZGF0ZUlubmVyU2VsZWN0aW9uKHNlbGVjdGVkOiBPcmdhbml6ZWRNb2RlbFNlbGVjdGlvbik6IHZvaWQge1xuICAgICAgICAvLyBUcmFuc2Zvcm0gYW4gT3JnYW5pemVkTW9kZWxTZWxlY3Rpb24gaW50byBhIE1vZGVsTm9kZSBsaXN0IHRoYXQgaXMgdXNlZCBpbiB0aGUgc2VsZWN0ZWQgem9uZSBvZiB0aGUgY29tcG9uZW50IChzZWUgdGVtcGxhdGUpXG4gICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlcyA9IHRoaXMuaGllcmFyY2hpY1NlbGVjdG9yU2VydmljZS5mcm9tT3JnYW5pemVkU2VsZWN0aW9uKHNlbGVjdGVkKTtcblxuICAgICAgICB0aGlzLmZsYXROb2Rlc1NlbGVjdGlvbi5jbGVhcigpO1xuICAgICAgICBmb3IgKGNvbnN0IG5vZGUgb2YgdGhpcy5zZWxlY3RlZE5vZGVzKSB7XG4gICAgICAgICAgICBjb25zdCBmbGF0Tm9kZSA9IHRoaXMuZ2V0RmxhdE5vZGUobm9kZSk7XG4gICAgICAgICAgICBpZiAoZmxhdE5vZGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZsYXROb2Rlc1NlbGVjdGlvbi5zZWxlY3QoZmxhdE5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVW5zZWxlY3QgYSBub2RlLCBrZWVwaW5nIHRoZSByZXN0IG9mIHRoZSBzZWxlY3RlZCB1bnRvdWNoZWRcbiAgICAgKi9cbiAgICBwcml2YXRlIHVuc2VsZWN0RmxhdE5vZGUoZmxhdE5vZGU6IEhpZXJhcmNoaWNGbGF0Tm9kZSk6IHZvaWQge1xuICAgICAgICB0aGlzLmZsYXROb2Rlc1NlbGVjdGlvbi5kZXNlbGVjdChmbGF0Tm9kZSk7XG4gICAgICAgIHRoaXMucmVtb3ZlTW9kZWxOb2RlKGZsYXROb2RlLm5vZGUpO1xuICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbih0aGlzLnNlbGVjdGVkTm9kZXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZSBhIG5vZGUgZnJvbSBjaGlwIGxpc3RzXG4gICAgICovXG4gICAgcHJpdmF0ZSByZW1vdmVNb2RlbE5vZGUobm9kZTogSGllcmFyY2hpY01vZGVsTm9kZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmdldE1hcEtleShub2RlLm1vZGVsKTtcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uSW5kZXggPSB0aGlzLnNlbGVjdGVkTm9kZXMuZmluZEluZGV4KG4gPT4gdGhpcy5nZXRNYXBLZXkobi5tb2RlbCkgPT09IGtleSk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWROb2Rlcy5zcGxpY2Uoc2VsZWN0aW9uSW5kZXgsIDEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlbGVjdCBhIG5vZGUsIGtlZXBpbmcgdGggcmVzdCBvZiB0aGUgc2VsZWN0ZWQgdW50b3VjaGVkXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZWxlY3RGbGF0Tm9kZShmbGF0Tm9kZTogSGllcmFyY2hpY0ZsYXROb2RlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZmxhdE5vZGVzU2VsZWN0aW9uLnNlbGVjdChmbGF0Tm9kZSk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWROb2Rlcy5wdXNoKGZsYXROb2RlLm5vZGUpO1xuICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbih0aGlzLnNlbGVjdGVkTm9kZXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsZWFyIGFsbCBzZWxlY3RlZCBhbmQgc2VsZWN0IHRoZSBnaXZlbiBub2RlXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZWxlY3RTaW5nbGVGbGF0Tm9kZShmbGF0Tm9kZTogSGllcmFyY2hpY0ZsYXROb2RlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZmxhdE5vZGVzU2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuZmxhdE5vZGVzU2VsZWN0aW9uLnNlbGVjdChmbGF0Tm9kZSk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlcyA9IFtmbGF0Tm9kZS5ub2RlXTtcbiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb24odGhpcy5zZWxlY3RlZE5vZGVzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhciBhbGwgc2VsZWN0ZWQgYW5kIHNlbGVjdCB0aGUgZ2l2ZW4gbm9kZVxuICAgICAqL1xuICAgIHByaXZhdGUgdW5zZWxlY3RTaW5nbGVGbGF0Tm9kZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mbGF0Tm9kZXNTZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGVzID0gW107XG4gICAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uKHRoaXMuc2VsZWN0ZWROb2Rlcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJhbnNmb3JtIHRoZSBnaXZlbiBlbGVtZW50cyBpbnRvIHRoZSBvcmdhbml6ZWQgc2VsZWN0aW9uIHRoYXQgaXMgZW1pdHRlZCB0byBvdXRwdXRcbiAgICAgKi9cbiAgICBwcml2YXRlIHVwZGF0ZVNlbGVjdGlvbihzZWxlY3RlZDogSGllcmFyY2hpY01vZGVsTm9kZVtdKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG9yZ2FuaXplZEZsYXROb2Rlc1NlbGVjdGlvbiA9IHRoaXMuaGllcmFyY2hpY1NlbGVjdG9yU2VydmljZS50b09yZ2FuaXplZFNlbGVjdGlvbihzZWxlY3RlZCk7XG4gICAgICAgIHJlcGxhY2VPYmplY3RLZWVwaW5nUmVmZXJlbmNlKHRoaXMuc2VsZWN0ZWQsIG9yZ2FuaXplZEZsYXROb2Rlc1NlbGVjdGlvbik7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQob3JnYW5pemVkRmxhdE5vZGVzU2VsZWN0aW9uKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzTm9kZVNlbGVjdGVkKG5vZGU6IEhpZXJhcmNoaWNNb2RlbE5vZGUpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5nZXRNYXBLZXkobm9kZS5tb2RlbCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWROb2Rlcy5zb21lKG4gPT4gdGhpcy5nZXRNYXBLZXkobi5tb2RlbCkgPT09IGtleSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGbGF0Tm9kZShub2RlOiBIaWVyYXJjaGljTW9kZWxOb2RlKTogSGllcmFyY2hpY0ZsYXROb2RlIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0TWFwS2V5KG5vZGUubW9kZWwpO1xuICAgICAgICByZXR1cm4gdGhpcy5mbGF0Tm9kZU1hcC5nZXQoa2V5KSB8fCBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlRmxhdE5vZGUobm9kZTogSGllcmFyY2hpY01vZGVsTm9kZSwgbGV2ZWw6IG51bWJlcik6IEhpZXJhcmNoaWNGbGF0Tm9kZSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0TWFwS2V5KG5vZGUubW9kZWwpO1xuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5nZXREaXNwbGF5Rm4obm9kZS5jb25maWcpKG5vZGUubW9kZWwpO1xuICAgICAgICBjb25zdCBleHBhbmRhYmxlID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGlzQ3VzdG9tU2VsZWN0YWJsZSA9IG5vZGUuY29uZmlnLmlzU2VsZWN0YWJsZUNhbGxiYWNrXG4gICAgICAgICAgICA/IG5vZGUuY29uZmlnLmlzU2VsZWN0YWJsZUNhbGxiYWNrKG5vZGUubW9kZWwpXG4gICAgICAgICAgICA6IHRydWU7XG4gICAgICAgIGNvbnN0IGlzU2VsZWN0YWJsZSA9ICEhbm9kZS5jb25maWcuc2VsZWN0YWJsZUF0S2V5ICYmIGlzQ3VzdG9tU2VsZWN0YWJsZTtcblxuICAgICAgICBjb25zdCBmbGF0Tm9kZSA9IG5ldyBIaWVyYXJjaGljRmxhdE5vZGUobm9kZSwgbmFtZSwgbGV2ZWwsIGV4cGFuZGFibGUsIGlzU2VsZWN0YWJsZSk7XG5cbiAgICAgICAgdGhpcy5oaWVyYXJjaGljU2VsZWN0b3JTZXJ2aWNlLmNvdW50SXRlbXMoZmxhdE5vZGUsIHRoaXMuZmlsdGVycyk7XG5cbiAgICAgICAgLy8gTWFyayBub2RlIGFzIHNlbGVjdGVkIGlmIG5lZWRlZCAoY2hlY2tzIHRoZSBzZWxlY3RlZCBwcm9jZXNzZWQgaW5wdXQpXG4gICAgICAgIGlmICh0aGlzLmlzTm9kZVNlbGVjdGVkKG5vZGUpKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuYWxsb3dVbnNlbGVjdCkge1xuICAgICAgICAgICAgICAgIGZsYXROb2RlLmRlc2VsZWN0YWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5mbGF0Tm9kZXNTZWxlY3Rpb24uc2VsZWN0KGZsYXROb2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENhY2hlIEZsYXROb2RlXG4gICAgICAgIHRoaXMuZmxhdE5vZGVNYXAuc2V0KGtleSwgZmxhdE5vZGUpO1xuXG4gICAgICAgIHJldHVybiBmbGF0Tm9kZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIGlkZW50aWZpZXIga2V5IGZvciBtYXAgY2FjaGVcbiAgICAgKiBBcyBtYW55IG9iamVjdCB0eXBlcyBjYW4gYmUgdXNlZCwgdGhpcyBmdW5jdGlvbiBjb25zaWRlcnMgdHlwZW5hbWUgYW5kIElEIHRvIHJldHVybiBzb21ldGhpbmcgbGlrZSBkb2N1bWVudC0xMjNcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldE1hcEtleShtb2RlbDogTGl0ZXJhbCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBtb2RlbC5fX3R5cGVuYW1lICsgJy0nICsgbW9kZWwuaWQ7XG4gICAgfVxufVxuIiwiPGRpdiBbc3R5bGUubWFyZ2luLWJvdHRvbS5weF09XCIyMFwiPlxuICAgIDxuYXR1cmFsLXNlYXJjaFxuICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cInNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgW2ZhY2V0c109XCJzZWFyY2hGYWNldHNcIlxuICAgICAgICBbc2VsZWN0aW9uc109XCJzZWFyY2hTZWxlY3Rpb25zXCJcbiAgICA+PC9uYXR1cmFsLXNlYXJjaD5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwiYm9keVwiPlxuICAgIDxtYXQtcHJvZ3Jlc3Mtc3Bpbm5lclxuICAgICAgICAqbmdJZj1cImxvYWRpbmdcIlxuICAgICAgICBbZGlhbWV0ZXJdPVwiMzZcIlxuICAgICAgICBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiXG4gICAgICAgIHN0eWxlPVwibWFyZ2luOiAxMHB4XCJcbiAgICA+PC9tYXQtcHJvZ3Jlc3Mtc3Bpbm5lcj5cblxuICAgIDxtYXQtdHJlZSBbZGF0YVNvdXJjZV09XCJkYXRhU291cmNlXCIgW3RyZWVDb250cm9sXT1cInRyZWVDb250cm9sXCI+XG4gICAgICAgIDxtYXQtdHJlZS1ub2RlICptYXRUcmVlTm9kZURlZj1cImxldCBub2RlXCIgW25nQ2xhc3NdPVwie2xlYWY6ICFub2RlLmV4cGFuZGFibGV9XCIgbWF0VHJlZU5vZGVQYWRkaW5nPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9XCJsb2FkQ2hpbGRyZW4obm9kZSlcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwibm9kZS5leHBhbmRhYmxlXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIid0b2dnbGUgJyArIG5vZGUubmFtZVwiXG4gICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgbWF0VHJlZU5vZGVUb2dnbGVcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bWF0LXByb2dyZXNzLXNwaW5uZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJub2RlLmxvYWRpbmdcIlxuICAgICAgICAgICAgICAgICAgICBbZGlhbWV0ZXJdPVwiMjRcIlxuICAgICAgICAgICAgICAgICAgICBbc3Ryb2tlV2lkdGhdPVwiNVwiXG4gICAgICAgICAgICAgICAgICAgIG1vZGU9XCJpbmRldGVybWluYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJtYXJnaW46IDhweFwiXG4gICAgICAgICAgICAgICAgPjwvbWF0LXByb2dyZXNzLXNwaW5uZXI+XG5cbiAgICAgICAgICAgICAgICA8bmF0dXJhbC1pY29uXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIW5vZGUubG9hZGluZ1wiXG4gICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cInRyZWVDb250cm9sLmlzRXhwYW5kZWQobm9kZSkgPyAnZXhwYW5kX21vcmUnIDogJ2NoZXZyb25fcmlnaHQnXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPC9uYXR1cmFsLWljb24+XG4gICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgPG1hdC1jaGVja2JveFxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlRmxhdE5vZGUobm9kZSlcIlxuICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImZsYXROb2Rlc1NlbGVjdGlvbi5pc1NlbGVjdGVkKG5vZGUpXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWlzTm9kZVRvZ2dsYWJsZShub2RlKVwiXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDEwcHhcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxuYXR1cmFsLWljb25cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJub2RlLm5vZGUuY29uZmlnLmljb25cIlxuICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJub2RlLm5vZGUuY29uZmlnLmljb25cIlxuICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIm1hcmdpbi1yaWdodDogMTBweFwiXG4gICAgICAgICAgICAgICAgPjwvbmF0dXJhbC1pY29uPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IG5vZGUubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxuICAgICAgICA8L21hdC10cmVlLW5vZGU+XG4gICAgPC9tYXQtdHJlZT5cblxuICAgIDxtYXQtY2hpcC1saXN0IGFyaWEtb3JpZW50YXRpb249XCJ2ZXJ0aWNhbFwiIGNsYXNzPVwibWF0LWNoaXAtbGlzdC1zdGFja2VkXCI+XG4gICAgICAgIDxtYXQtY2hpcFxuICAgICAgICAgICAgKHJlbW92ZWQpPVwidW5zZWxlY3RNb2RlbE5vZGUobm9kZSlcIlxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IG5vZGUgb2Ygc2VsZWN0ZWROb2Rlc1wiXG4gICAgICAgICAgICBbcmVtb3ZhYmxlXT1cInRydWVcIlxuICAgICAgICAgICAgW3NlbGVjdGFibGVdPVwiZmFsc2VcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8bmF0dXJhbC1pY29uICpuZ0lmPVwibm9kZS5jb25maWcuaWNvblwiIFtuYW1lXT1cIm5vZGUuY29uZmlnLmljb25cIj48L25hdHVyYWwtaWNvbj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYXQtYm9keSBjaGlwLWxhYmVsXCI+e3sgbm9kZS5tb2RlbC5uYW1lIHx8IG5vZGUubW9kZWwuZnVsbE5hbWUgfX08L2Rpdj5cbiAgICAgICAgICAgIDxuYXR1cmFsLWljb24gbWF0Q2hpcFJlbW92ZSBuYW1lPVwiY2FuY2VsXCI+PC9uYXR1cmFsLWljb24+XG4gICAgICAgIDwvbWF0LWNoaXA+XG4gICAgPC9tYXQtY2hpcC1saXN0PlxuPC9kaXY+XG5cbjxkaXYgKm5nSWY9XCIhbG9hZGluZyAmJiAhZGF0YVNvdXJjZS5kYXRhLmxlbmd0aFwiIGNsYXNzPVwibWFyZ2luLXZcIiBpMThuPkF1Y3VuIHLDqXN1bHRhdDwvZGl2PlxuIl19
@@ -1,6 +1,6 @@
1
1
  import { Injectable } from '@angular/core';
2
2
  import { intersection } from 'lodash-es';
3
- import { BehaviorSubject, forkJoin } from 'rxjs';
3
+ import { BehaviorSubject, first, forkJoin } from 'rxjs';
4
4
  import { finalize, map } from 'rxjs/operators';
5
5
  import { NaturalQueryVariablesManager } from '../../../classes/query-variable-manager';
6
6
  import { HierarchicModelNode } from '../classes/model-node';
@@ -76,7 +76,7 @@ export class NaturalHierarchicSelectorService {
76
76
  }
77
77
  countItems(node, contextFilters = null) {
78
78
  const configurations = this.getContextualizedConfigs(node, contextFilters, null);
79
- const observables = configurations.map(c => c.configuration.injectedService.count(c.variablesManager));
79
+ const observables = configurations.map(c => c.configuration.injectedService.count(c.variablesManager).pipe(first()));
80
80
  forkJoin(observables).subscribe(results => {
81
81
  const totalItems = results.reduce((total, length) => total + length, 0);
82
82
  node.expandable = totalItems > 0;
@@ -113,12 +113,6 @@ export class NaturalHierarchicSelectorService {
113
113
  }
114
114
  return configsAndServices;
115
115
  }
116
- /**
117
- * Check configuration to return a boolean that allows or denies the selection for the given element
118
- */
119
- isSelectable(node) {
120
- return !!node.node.config.selectableAtKey;
121
- }
122
116
  /**
123
117
  * Return models matching given FlatNodes
124
118
  * Returns a Literal of models grouped by their configuration attribute "selectableAtKey"
@@ -255,4 +249,4 @@ NaturalHierarchicSelectorService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersio
255
249
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: NaturalHierarchicSelectorService, decorators: [{
256
250
  type: Injectable
257
251
  }], ctorParameters: function () { return [{ type: i0.Injector }]; } });
258
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGllcmFyY2hpYy1zZWxlY3Rvci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF0dXJhbC9zcmMvbGliL21vZHVsZXMvaGllcmFyY2hpYy1zZWxlY3Rvci9oaWVyYXJjaGljLXNlbGVjdG9yL2hpZXJhcmNoaWMtc2VsZWN0b3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFXLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDdkMsT0FBTyxFQUFDLGVBQWUsRUFBRSxRQUFRLEVBQWEsTUFBTSxNQUFNLENBQUM7QUFFM0QsT0FBTyxFQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUMsNEJBQTRCLEVBQWlCLE1BQU0seUNBQXlDLENBQUM7QUFVckcsT0FBTyxFQUFrQixtQkFBbUIsRUFBQyxNQUFNLHVCQUF1QixDQUFDOztBQWEzRSxNQUFNLE9BQU8sZ0NBQWdDO0lBZXpDLFlBQW9DLFFBQWtCO1FBQWxCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFkdEQ7Ozs7V0FJRztRQUNJLGVBQVUsR0FBMkMsSUFBSSxlQUFlLENBQXdCLEVBQUUsQ0FBQyxDQUFDO1FBRTNHOzs7O1dBSUc7UUFDSyxrQkFBYSxHQUFxQyxFQUFFLENBQUM7SUFFSixDQUFDO0lBRTFEOzs7T0FHRztJQUNJLElBQUksQ0FDUCxNQUF3QyxFQUN4QyxnQkFBdUQsSUFBSSxFQUMzRCxrQkFBeUMsSUFBSTtRQUU3QyxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsNkJBQTZCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDaEUsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxhQUFhLEVBQUUsZUFBZSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksWUFBWSxDQUNmLFFBQTRCLEVBQzVCLGdCQUF1RCxJQUFJO1FBRTNELDhDQUE4QztRQUM5QyxrR0FBa0c7UUFDbEcsZ0VBQWdFO1FBQ2hFLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFO1lBQy9CLE9BQU87U0FDVjtRQUVELFFBQVEsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQzthQUNoQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO2FBQ2hELFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNmLFFBQVEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN6QyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hELENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVNLE1BQU0sQ0FBQyxlQUErQixFQUFFLGdCQUF1RCxJQUFJO1FBQ3RHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRSxlQUFlLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDakUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksT0FBTyxDQUNWLE9BQWtDLElBQUksRUFDdEMsaUJBQXdELElBQUksRUFDNUQsa0JBQXlDLElBQUk7UUFFN0MsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDNUYsTUFBTSxXQUFXLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1FBRXhHLCtFQUErRTtRQUMvRSxPQUFPLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQzdCLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUNWLE1BQU0sT0FBTyxHQUEwQixFQUFFLENBQUM7WUFFMUMsbUNBQW1DO1lBQ25DLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNyQyx3REFBd0Q7Z0JBQ3hELEtBQUssTUFBTSxJQUFJLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRTtvQkFDakMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO2lCQUNsRjthQUNKO1lBRUQsT0FBTyxPQUFPLENBQUM7UUFDbkIsQ0FBQyxDQUFDLENBQ0wsQ0FBQztJQUNOLENBQUM7SUFFTSxVQUFVLENBQUMsSUFBd0IsRUFBRSxpQkFBd0QsSUFBSTtRQUNwRyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNqRixNQUFNLFdBQVcsR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7UUFFdkcsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUN0QyxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsS0FBSyxHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN4RSxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsR0FBRyxDQUFDLENBQUM7UUFDckMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU0sd0JBQXdCLENBQzNCLE9BQWtDLElBQUksRUFDdEMsaUJBQXdELElBQUksRUFDNUQsa0JBQXlDLElBQUk7UUFFN0MsTUFBTSxrQkFBa0IsR0FBMkIsRUFBRSxDQUFDO1FBRXRELDhHQUE4RztRQUM5Ryw4SEFBOEg7UUFDOUgsNkhBQTZIO1FBQzdILHlHQUF5RztRQUN6RyxnREFBZ0Q7UUFDaEQsc0ZBQXNGO1FBQ3RGLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBRWxGLE1BQU0sVUFBVSxHQUFHLEVBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFDLENBQUM7UUFFakQsS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPLEVBQUU7WUFDMUIsTUFBTSxJQUFJLEdBQXlCLEVBQTBCLENBQUM7WUFDOUQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxjQUFjLENBQUMsQ0FBQztZQUN0RSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBRXJGLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxFQUFFO2dCQUNwQyxTQUFTO2FBQ1o7WUFFRCxNQUFNLGdCQUFnQixHQUFHLElBQUksNEJBQTRCLEVBQUUsQ0FBQztZQUU1RCxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLEVBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFDLENBQUMsQ0FBQztZQUM1RSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLEVBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUMsQ0FBQyxDQUFDO1lBRS9ELElBQUksZUFBZSxFQUFFO2dCQUNqQixnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsZUFBZSxDQUFDLENBQUM7YUFDM0Q7WUFFRCxtRUFBbUU7WUFDbkUsa0VBQWtFO1lBQ2xFLElBQUksQ0FBQyxhQUFhLEdBQUcsTUFBK0MsQ0FBQztZQUNyRSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUM7WUFDekMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2pDO1FBRUQsT0FBTyxrQkFBa0IsQ0FBQztJQUM5QixDQUFDO0lBRUQ7O09BRUc7SUFDSSxZQUFZLENBQUMsSUFBd0I7UUFDeEMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDO0lBQzlDLENBQUM7SUFFRDs7O09BR0c7SUFDSSxvQkFBb0IsQ0FBQyxLQUE0QjtRQUNwRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUMxRCxJQUFJLE1BQU0sQ0FBQyxlQUFlLEVBQUU7Z0JBQ3hCLEtBQUssQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxDQUFDO2FBQ3RDO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQyxFQUFFLEVBQWEsQ0FBQyxDQUFDO1FBRWxCLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFO1lBQ3RCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUU7Z0JBQzdCLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDM0Q7U0FDSjtRQUVELE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7T0FFRztJQUNJLHNCQUFzQixDQUFDLHVCQUFnRDtRQUMxRSxJQUFJLENBQUMsdUJBQXVCLEVBQUU7WUFDMUIsT0FBTyxFQUFFLENBQUM7U0FDYjtRQUVELE1BQU0sTUFBTSxHQUEwQixFQUFFLENBQUM7UUFDekMsS0FBSyxNQUFNLGVBQWUsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEVBQUU7WUFDaEUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLCtCQUErQixDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ3JFLElBQUksTUFBTSxFQUFFO2dCQUNSLEtBQUssTUFBTSxLQUFLLElBQUksdUJBQXVCLENBQUMsZUFBZSxDQUFDLEVBQUU7b0JBQzFELE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztpQkFDdkQ7YUFDSjtTQUNKO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVPLDZCQUE2QixDQUNqQyxjQUFnRDtRQUVoRCxLQUFLLE1BQU0sTUFBTSxJQUFJLGNBQWMsRUFBRTtZQUNqQyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsRUFBRTtnQkFDekIsTUFBTSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDOUQ7U0FDSjtRQUVELE9BQU8sY0FBYyxDQUFDO0lBQzFCLENBQUM7SUFFRDs7T0FFRztJQUNLLHFCQUFxQixDQUFDLGNBQWdEO1FBQzFFLE1BQU0seUJBQXlCLEdBQWEsRUFBRSxDQUFDO1FBQy9DLEtBQUssTUFBTSxNQUFNLElBQUksY0FBYyxFQUFFO1lBQ2pDLElBQUksTUFBTSxDQUFDLGVBQWUsRUFBRTtnQkFDeEIsTUFBTSxRQUFRLEdBQUcseUJBQXlCLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFFM0UsSUFBSSxRQUFRLEtBQUssQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLGVBQWUsRUFBRTtvQkFDM0MseUJBQXlCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztpQkFDMUQ7Z0JBRUQsa0JBQWtCO2dCQUNsQix5SEFBeUg7Z0JBQ3pILE9BQU87Z0JBQ1AsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUU7b0JBQ2YsT0FBTyxDQUFDLElBQUksQ0FBQywrRUFBK0UsQ0FBQyxDQUFDO2lCQUNqRzthQUNKO1NBQ0o7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxjQUFjLENBQUMsTUFBc0M7UUFDekQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLENBQUM7UUFDcEUsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxnQkFBZ0IsQ0FDcEIsUUFBbUMsRUFDbkMsTUFBc0MsRUFDdEMsZ0JBQWdFLElBQUksRUFDcEUsUUFBUSxHQUFHLEtBQUs7UUFFaEIsTUFBTSxjQUFjLEdBQVksRUFBRSxDQUFDO1FBRW5DLHNDQUFzQztRQUN0QyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ1gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsRUFBRTtnQkFDOUIsT0FBTyxhQUFhLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2FBQzdDO1lBRUQsSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDWCxNQUFNLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUNwQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQyxLQUFLLEVBQUUsRUFBRSxFQUFDLENBQUM7Z0JBQ3BDLENBQUMsQ0FBQyxDQUFDO2FBQ047U0FDSjthQUFNO1lBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLHFCQUFxQixJQUFJLENBQUMsTUFBTSxDQUFDLG9CQUFvQixFQUFFO2dCQUM3RSxPQUFPLElBQUksQ0FBQzthQUNmO1lBRUQsTUFBTSxlQUFlLEdBQUcsWUFBWSxDQUNoQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsRUFDMUMsTUFBTSxDQUFDLG9CQUFvQixDQUM5QixDQUFDO1lBQ0YsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUU7Z0JBQ3pCLE9BQU8sSUFBSSxDQUFDO2FBQ2Y7WUFDRCxjQUFjLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQyxJQUFJLEVBQUUsRUFBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBQyxFQUFDLENBQUM7U0FDbkY7UUFFRCxNQUFNLE9BQU8sR0FBRyxFQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUMsVUFBVSxFQUFFLENBQUMsY0FBYyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUM7UUFFM0QseUZBQXlGO1FBQ3pGLElBQUksYUFBYSxFQUFFO1lBQ2YsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDaEQ7UUFFRCxPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSyxrQkFBa0IsQ0FDdEIsTUFBc0MsRUFDdEMsY0FBc0Q7UUFFdEQsSUFBSSxDQUFDLGNBQWMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUM1QixPQUFPLElBQUksQ0FBQztTQUNmO1FBRUQsTUFBTSxNQUFNLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLEtBQUssTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3RFLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDekMsQ0FBQztJQUVEOztPQUVHO0lBQ0ssK0JBQStCLENBQ25DLEdBQXNEO1FBRXRELElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3JCLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFFRCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsS0FBSyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUM7SUFDakYsQ0FBQztJQUVPLG9CQUFvQixDQUN4QixJQUFxQixFQUNyQixhQUE2QztRQUU3QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxLQUFLLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMvRyxPQUFPLElBQUksSUFBSSxJQUFJLG1CQUFtQixDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsQ0FBQztJQUNoRSxDQUFDOzs2SEFqVVEsZ0NBQWdDO2lJQUFoQyxnQ0FBZ0M7MkZBQWhDLGdDQUFnQztrQkFENUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZSwgSW5qZWN0b3J9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtpbnRlcnNlY3Rpb259IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgZm9ya0pvaW4sIE9ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge2ZpbmFsaXplLCBtYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7TmF0dXJhbFF1ZXJ5VmFyaWFibGVzTWFuYWdlciwgUXVlcnlWYXJpYWJsZXN9IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvcXVlcnktdmFyaWFibGUtbWFuYWdlcic7XG5pbXBvcnQge0hpZXJhcmNoaWNGbGF0Tm9kZX0gZnJvbSAnLi4vY2xhc3Nlcy9mbGF0LW5vZGUnO1xuaW1wb3J0IHtcbiAgICBOYXR1cmFsSGllcmFyY2hpY0NvbmZpZ3VyYXRpb24sXG4gICAgTmF0dXJhbEhpZXJhcmNoaWNTZXJ2aWNlQ29uZmlndXJhdGlvbixcbn0gZnJvbSAnLi4vY2xhc3Nlcy9oaWVyYXJjaGljLWNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHtcbiAgICBIaWVyYXJjaGljRmlsdGVyQ29uZmlndXJhdGlvbixcbiAgICBIaWVyYXJjaGljRmlsdGVyc0NvbmZpZ3VyYXRpb24sXG59IGZyb20gJy4uL2NsYXNzZXMvaGllcmFyY2hpYy1maWx0ZXJzLWNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHtIaWVyYXJjaGljTW9kZWwsIEhpZXJhcmNoaWNNb2RlbE5vZGV9IGZyb20gJy4uL2NsYXNzZXMvbW9kZWwtbm9kZSc7XG5pbXBvcnQge0xpdGVyYWx9IGZyb20gJy4uLy4uLy4uL3R5cGVzL3R5cGVzJztcblxuZXhwb3J0IGludGVyZmFjZSBPcmdhbml6ZWRNb2RlbFNlbGVjdGlvbiB7XG4gICAgW2tleTogc3RyaW5nXTogYW55W107XG59XG5cbmludGVyZmFjZSBDb250ZXh0dWFsaXplZENvbmZpZyB7XG4gICAgY29uZmlndXJhdGlvbjogTmF0dXJhbEhpZXJhcmNoaWNTZXJ2aWNlQ29uZmlndXJhdGlvbjtcbiAgICB2YXJpYWJsZXNNYW5hZ2VyOiBOYXR1cmFsUXVlcnlWYXJpYWJsZXNNYW5hZ2VyO1xufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTmF0dXJhbEhpZXJhcmNoaWNTZWxlY3RvclNlcnZpY2Uge1xuICAgIC8qKlxuICAgICAqIFN0b3JlcyB0aGUgZ2xvYmFsIHJlc3VsdCBvZiB0aGUgdHJlZVxuICAgICAqIFRoaXMgb2JzZXJ2YWJsZSBjb250YWlucyBOb2RlLlxuICAgICAqIFdoZW4gaXQncyB1cGRhdGVkLCB0aGUgVHJlZUNvbnRyb2xsZXIgYW5kIFRyZWVGbGF0dGVuZXIgcHJvY2VzcyB0aGUgbmV3IGFycmF5IHRvIGdlbmVyYXRlIHRoZSBmbGF0IHRyZWUuXG4gICAgICovXG4gICAgcHVibGljIGRhdGFDaGFuZ2U6IEJlaGF2aW9yU3ViamVjdDxIaWVyYXJjaGljTW9kZWxOb2RlW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxIaWVyYXJjaGljTW9kZWxOb2RlW10+KFtdKTtcblxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyYXRpb24gZm9yIHJlbGF0aW9ucyBhbmQgc2VsZWN0aW9uIGNvbnN0cmFpbnRzXG4gICAgICpcbiAgICAgKiBUaGUgbGlzdCBzaG91bGQgYmUgc29ydGVkIGluIHRoZSBvcmRlciBvZiB0aGUgaGllcmFyY2hpYyAobGlzdCBmaXJzdCBwYXJlbnQgcnVsZXMsIHRoZW4gY2hpbGQgcnVsZXMpXG4gICAgICovXG4gICAgcHJpdmF0ZSBjb25maWd1cmF0aW9uOiBOYXR1cmFsSGllcmFyY2hpY0NvbmZpZ3VyYXRpb25bXSA9IFtdO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgaW5qZWN0b3I6IEluamVjdG9yKSB7fVxuXG4gICAgLyoqXG4gICAgICogSW5pdCBjb21wb25lbnQgYnkgc2F2aW5nIHRoZSBjb21wbGV0ZSBjb25maWd1cmF0aW9uLCBhbmQgdGhlbiByZXRyaWV2aW5nIHJvb3QgZWxlbWVudHMuXG4gICAgICogVXBkYXRlcyAqKmFub3RoZXIqKiBvYnNlcnZhYmxlICh0aGlzLmRhdGFDaGFuZ2UpIHdoZW4gZGF0YSBpcyByZXRyaWV2ZWQuXG4gICAgICovXG4gICAgcHVibGljIGluaXQoXG4gICAgICAgIGNvbmZpZzogTmF0dXJhbEhpZXJhcmNoaWNDb25maWd1cmF0aW9uW10sXG4gICAgICAgIGNvbnRleHRGaWx0ZXI6IEhpZXJhcmNoaWNGaWx0ZXJzQ29uZmlndXJhdGlvbiB8IG51bGwgPSBudWxsLFxuICAgICAgICBzZWFyY2hWYXJpYWJsZXM6IFF1ZXJ5VmFyaWFibGVzIHwgbnVsbCA9IG51bGwsXG4gICAgKTogT2JzZXJ2YWJsZTx1bmtub3duPiB7XG4gICAgICAgIHRoaXMudmFsaWRhdGVDb25maWd1cmF0aW9uKGNvbmZpZyk7XG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IHRoaXMuaW5qZWN0U2VydmljZXNJbkNvbmZpZ3VyYXRpb24oY29uZmlnKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TGlzdChudWxsLCBjb250ZXh0RmlsdGVyLCBzZWFyY2hWYXJpYWJsZXMpLnBpcGUobWFwKGRhdGEgPT4gdGhpcy5kYXRhQ2hhbmdlLm5leHQoZGF0YSkpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgbGlzdCBvZiBjaGlsZHJlbiwgY29uc2lkZXJpbmcgZ2l2ZW4gRmxhdE5vZGUgaWQgYXMgYSBwYXJlbnQuXG4gICAgICogTWFyayBsb2FkaW5nIHN0YXR1cyBpbmRpdmlkdWFsbHkgb24gbm9kZXMuXG4gICAgICovXG4gICAgcHVibGljIGxvYWRDaGlsZHJlbihcbiAgICAgICAgZmxhdE5vZGU6IEhpZXJhcmNoaWNGbGF0Tm9kZSxcbiAgICAgICAgY29udGV4dEZpbHRlcjogSGllcmFyY2hpY0ZpbHRlcnNDb25maWd1cmF0aW9uIHwgbnVsbCA9IG51bGwsXG4gICAgKTogdm9pZCB7XG4gICAgICAgIC8vIERvbnQgcmVmZXRjaCBjaGlsZHJlbi4gSW1wcm92ZSBwZXJmb3JtYW5jZXNcbiAgICAgICAgLy8gUHJldmVudHMgaW50ZXJmZXJlbmNlcyBiZXR3ZWVuIEhpZXJhcmNoaWNNb2RlbE5vZGUgc3RydWN0dXJlIGFuZCBhbmd1bGFyIGNvbXBvbmVudHMgbmF2aWdhdGlvbi5cbiAgICAgICAgLy8gUHJldmVudHMgYSBidWcgd2hlcmUgZ3JhbmQgY2hpbGRyZW4gd2VyZSBsb3N0IGlmIGNsb3Npbmcgcm9vdFxuICAgICAgICBpZiAoZmxhdE5vZGUubm9kZS5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZsYXROb2RlLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmdldExpc3QoZmxhdE5vZGUsIGNvbnRleHRGaWx0ZXIpXG4gICAgICAgICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiAoZmxhdE5vZGUubG9hZGluZyA9IGZhbHNlKSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKGl0ZW1zID0+IHtcbiAgICAgICAgICAgICAgICBmbGF0Tm9kZS5ub2RlLmNoaWxkcmVuQ2hhbmdlLm5leHQoaXRlbXMpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YUNoYW5nZS5uZXh0KHRoaXMuZGF0YUNoYW5nZS52YWx1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2VhcmNoKHNlYXJjaFZhcmlhYmxlczogUXVlcnlWYXJpYWJsZXMsIGNvbnRleHRGaWx0ZXI6IEhpZXJhcmNoaWNGaWx0ZXJzQ29uZmlndXJhdGlvbiB8IG51bGwgPSBudWxsKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZ2V0TGlzdChudWxsLCBjb250ZXh0RmlsdGVyLCBzZWFyY2hWYXJpYWJsZXMpLnN1YnNjcmliZShpdGVtcyA9PiB7XG4gICAgICAgICAgICB0aGlzLmRhdGFDaGFuZ2UubmV4dChpdGVtcyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlIGVsZW1lbnRzIGZyb20gdGhlIHNlcnZlclxuICAgICAqIEdldCByb290IGVsZW1lbnRzIGlmIG5vZGUgaXMgbnVsbCwgb3IgY2hpbGQgZWxlbWVudHMgaWYgbm9kZSBpcyBnaXZlblxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRMaXN0KFxuICAgICAgICBub2RlOiBIaWVyYXJjaGljRmxhdE5vZGUgfCBudWxsID0gbnVsbCxcbiAgICAgICAgY29udGV4dEZpbHRlcnM6IEhpZXJhcmNoaWNGaWx0ZXJzQ29uZmlndXJhdGlvbiB8IG51bGwgPSBudWxsLFxuICAgICAgICBzZWFyY2hWYXJpYWJsZXM6IFF1ZXJ5VmFyaWFibGVzIHwgbnVsbCA9IG51bGwsXG4gICAgKTogT2JzZXJ2YWJsZTxIaWVyYXJjaGljTW9kZWxOb2RlW10+IHtcbiAgICAgICAgY29uc3QgY29uZmlndXJhdGlvbnMgPSB0aGlzLmdldENvbnRleHR1YWxpemVkQ29uZmlncyhub2RlLCBjb250ZXh0RmlsdGVycywgc2VhcmNoVmFyaWFibGVzKTtcbiAgICAgICAgY29uc3Qgb2JzZXJ2YWJsZXMgPSBjb25maWd1cmF0aW9ucy5tYXAoYyA9PiBjLmNvbmZpZ3VyYXRpb24uaW5qZWN0ZWRTZXJ2aWNlLmdldEFsbChjLnZhcmlhYmxlc01hbmFnZXIpKTtcblxuICAgICAgICAvLyBGaXJlIHF1ZXJpZXMsIGFuZCBtZXJnZSByZXN1bHRzLCB0cmFuc2Zvcm1pbmcgYXBvbGxvIGl0ZW1zIGludG8gTm9kZSBPYmplY3QuXG4gICAgICAgIHJldHVybiBmb3JrSm9pbihvYnNlcnZhYmxlcykucGlwZShcbiAgICAgICAgICAgIG1hcChyZXN1bHRzID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBsaXN0aW5nOiBIaWVyYXJjaGljTW9kZWxOb2RlW10gPSBbXTtcblxuICAgICAgICAgICAgICAgIC8vIEZvciBlYWNoIHJlc3VsdCBvZiBhbiBvYnNlcnZhYmxlXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXN1bHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEZvciBlYWNoIGl0ZW0gb2YgdGhlIHJlc3VsdCwgY29udmVydCBpbnRvIE5vZGUgb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiByZXN1bHRzW2ldLml0ZW1zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0aW5nLnB1c2godGhpcy5nZXRPckNyZWF0ZU1vZGVsTm9kZShpdGVtLCBjb25maWd1cmF0aW9uc1tpXS5jb25maWd1cmF0aW9uKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbGlzdGluZztcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb3VudEl0ZW1zKG5vZGU6IEhpZXJhcmNoaWNGbGF0Tm9kZSwgY29udGV4dEZpbHRlcnM6IEhpZXJhcmNoaWNGaWx0ZXJzQ29uZmlndXJhdGlvbiB8IG51bGwgPSBudWxsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbmZpZ3VyYXRpb25zID0gdGhpcy5nZXRDb250ZXh0dWFsaXplZENvbmZpZ3Mobm9kZSwgY29udGV4dEZpbHRlcnMsIG51bGwpO1xuICAgICAgICBjb25zdCBvYnNlcnZhYmxlcyA9IGNvbmZpZ3VyYXRpb25zLm1hcChjID0+IGMuY29uZmlndXJhdGlvbi5pbmplY3RlZFNlcnZpY2UuY291bnQoYy52YXJpYWJsZXNNYW5hZ2VyKSk7XG5cbiAgICAgICAgZm9ya0pvaW4ob2JzZXJ2YWJsZXMpLnN1YnNjcmliZShyZXN1bHRzID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRvdGFsSXRlbXMgPSByZXN1bHRzLnJlZHVjZSgodG90YWwsIGxlbmd0aCkgPT4gdG90YWwgKyBsZW5ndGgsIDApO1xuICAgICAgICAgICAgbm9kZS5leHBhbmRhYmxlID0gdG90YWxJdGVtcyA+IDA7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDb250ZXh0dWFsaXplZENvbmZpZ3MoXG4gICAgICAgIG5vZGU6IEhpZXJhcmNoaWNGbGF0Tm9kZSB8IG51bGwgPSBudWxsLFxuICAgICAgICBjb250ZXh0RmlsdGVyczogSGllcmFyY2hpY0ZpbHRlcnNDb25maWd1cmF0aW9uIHwgbnVsbCA9IG51bGwsXG4gICAgICAgIHNlYXJjaFZhcmlhYmxlczogUXVlcnlWYXJpYWJsZXMgfCBudWxsID0gbnVsbCxcbiAgICApOiBDb250ZXh0dWFsaXplZENvbmZpZ1tdIHtcbiAgICAgICAgY29uc3QgY29uZmlnc0FuZFNlcnZpY2VzOiBDb250ZXh0dWFsaXplZENvbmZpZ1tdID0gW107XG5cbiAgICAgICAgLy8gQ29uc2lkZXJpbmcgdGhlIHdob2xlIGNvbmZpZ3VyYXRpb24gbWF5IGNhdXNlIHF1ZXJpZXMgd2l0aCBuby93cm9uZyByZXN1bHRzIHdlIGhhdmUgaW1wZXJhdGl2ZWx5IHRvIGF2b2lkICFcbiAgICAgICAgLy8gZS5nIHRoZXJlIGFyZSBjcm9zcyBkZXBlbmRlbmNpZXMgYmV0d2VlbiBlcXVpcG1lbnRzIGFuZCB0YXhvbm9taWVzIGZpbHRlcnMuIEJvdGggaGF2ZSBcInBhcmVudHNcIiBhbmQgXCJ0YXhvbm9taWVzXCIgZmlsdGVycy4uLlxuICAgICAgICAvLyBXaGVuIGNsaWNraW5nIG9uIGEgZXF1aXBtZW50LCB0aGUgY29uZmlndXJhdGlvbiBvZiB0YXhvbm9taWVzIHdpdGggbWF0Y2ggXCJwYXJlbnRzXCIgZmlsdGVyLCBidXQgdXNlIHRoZSBpZCBvZiB0aGUgZXF1aXBtZW50XG4gICAgICAgIC8vIFRvIGZpeCB0aGlzLCB3ZSBzaG91bGQgb25seSBjb25zaWRlciBjb25maWd1cmF0aW9uIGFmdGVyIHRoZSBvbmUgZ2l2ZW4gYnkgdGhlIG5vZGUgcGFzc2VkIGFzIGFyZ3VtZW50LlxuICAgICAgICAvLyBUaGF0IHdvdWxkIG1lYW4gOiBubyBjaGlsZCBjYW4gYWZmZWN0IHBhcmVudC5cbiAgICAgICAgLy8gVGhhdCB3b3VsZCBtZWFuIDogc29ydGluZyBpbiB0aGUgY29uZmlndXJhdGlvbiBoYXZlIHNlbWFudGljL2hpZXJhcmNoeSBpbXBsaWNhdGlvbnNcbiAgICAgICAgY29uc3QgY29uZmlncyA9IG5vZGUgPyB0aGlzLmdldE5leHRDb25maWdzKG5vZGUubm9kZS5jb25maWcpIDogdGhpcy5jb25maWd1cmF0aW9uO1xuXG4gICAgICAgIGNvbnN0IHBhZ2luYXRpb24gPSB7cGFnZUluZGV4OiAwLCBwYWdlU2l6ZTogOTk5fTtcblxuICAgICAgICBmb3IgKGNvbnN0IGNvbmZpZyBvZiBjb25maWdzKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtOiBDb250ZXh0dWFsaXplZENvbmZpZyA9IHt9IGFzIENvbnRleHR1YWxpemVkQ29uZmlnO1xuICAgICAgICAgICAgY29uc3QgY29udGV4dEZpbHRlciA9IHRoaXMuZ2V0RmlsdGVyQnlTZXJ2aWNlKGNvbmZpZywgY29udGV4dEZpbHRlcnMpO1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyID0gdGhpcy5nZXRTZXJ2aWNlRmlsdGVyKG5vZGUsIGNvbmZpZywgY29udGV4dEZpbHRlciwgISFzZWFyY2hWYXJpYWJsZXMpO1xuXG4gICAgICAgICAgICBpZiAoIWZpbHRlciB8fCAhY29uZmlnLmluamVjdGVkU2VydmljZSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB2YXJpYWJsZXNNYW5hZ2VyID0gbmV3IE5hdHVyYWxRdWVyeVZhcmlhYmxlc01hbmFnZXIoKTtcblxuICAgICAgICAgICAgdmFyaWFibGVzTWFuYWdlci5zZXQoJ3ZhcmlhYmxlcycsIHtmaWx0ZXI6IGZpbHRlciwgcGFnaW5hdGlvbjogcGFnaW5hdGlvbn0pO1xuICAgICAgICAgICAgdmFyaWFibGVzTWFuYWdlci5zZXQoJ2NvbmZpZy1maWx0ZXInLCB7ZmlsdGVyOiBjb25maWcuZmlsdGVyfSk7XG5cbiAgICAgICAgICAgIGlmIChzZWFyY2hWYXJpYWJsZXMpIHtcbiAgICAgICAgICAgICAgICB2YXJpYWJsZXNNYW5hZ2VyLnNldCgnbmF0dXJhbC1zZWFyY2gnLCBzZWFyY2hWYXJpYWJsZXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBDYXN0IE5hdHVyYWxIaWVyYXJjaGljU2VydmljZUNvbmZpZ3VyYXRpb24gYmVjYXVzZSB0aGUgdW5kZWZpbmVkXG4gICAgICAgICAgICAvLyBpbmplY3RlZFNlcnZpY2VzIGFyZSBmaWx0ZXJlZCBlYXJsaWVyIGFuZCB3ZSBjYW4gdmFsaWRhdGUgdmFsdWVcbiAgICAgICAgICAgIGl0ZW0uY29uZmlndXJhdGlvbiA9IGNvbmZpZyBhcyBOYXR1cmFsSGllcmFyY2hpY1NlcnZpY2VDb25maWd1cmF0aW9uO1xuICAgICAgICAgICAgaXRlbS52YXJpYWJsZXNNYW5hZ2VyID0gdmFyaWFibGVzTWFuYWdlcjtcbiAgICAgICAgICAgIGNvbmZpZ3NBbmRTZXJ2aWNlcy5wdXNoKGl0ZW0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbmZpZ3NBbmRTZXJ2aWNlcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBjb25maWd1cmF0aW9uIHRvIHJldHVybiBhIGJvb2xlYW4gdGhhdCBhbGxvd3Mgb3IgZGVuaWVzIHRoZSBzZWxlY3Rpb24gZm9yIHRoZSBnaXZlbiBlbGVtZW50XG4gICAgICovXG4gICAgcHVibGljIGlzU2VsZWN0YWJsZShub2RlOiBIaWVyYXJjaGljRmxhdE5vZGUpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhbm9kZS5ub2RlLmNvbmZpZy5zZWxlY3RhYmxlQXRLZXk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIG1vZGVscyBtYXRjaGluZyBnaXZlbiBGbGF0Tm9kZXNcbiAgICAgKiBSZXR1cm5zIGEgTGl0ZXJhbCBvZiBtb2RlbHMgZ3JvdXBlZCBieSB0aGVpciBjb25maWd1cmF0aW9uIGF0dHJpYnV0ZSBcInNlbGVjdGFibGVBdEtleVwiXG4gICAgICovXG4gICAgcHVibGljIHRvT3JnYW5pemVkU2VsZWN0aW9uKG5vZGVzOiBIaWVyYXJjaGljTW9kZWxOb2RlW10pOiBPcmdhbml6ZWRNb2RlbFNlbGVjdGlvbiB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuY29uZmlndXJhdGlvbi5yZWR1Y2UoKGdyb3VwLCBjb25maWcpID0+IHtcbiAgICAgICAgICAgIGlmIChjb25maWcuc2VsZWN0YWJsZUF0S2V5KSB7XG4gICAgICAgICAgICAgICAgZ3JvdXBbY29uZmlnLnNlbGVjdGFibGVBdEtleV0gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBncm91cDtcbiAgICAgICAgfSwge30gYXMgTGl0ZXJhbCk7XG5cbiAgICAgICAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG4gICAgICAgICAgICBpZiAobm9kZS5jb25maWcuc2VsZWN0YWJsZUF0S2V5KSB7XG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uW25vZGUuY29uZmlnLnNlbGVjdGFibGVBdEtleV0ucHVzaChub2RlLm1vZGVsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzZWxlY3Rpb247XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJhbnNmb3JtcyBhbiBPcmdhbml6ZWRNb2RlbFNlbGVjdGlvbiBpbnRvIGEgbGlzdCBvZiBNb2RlbE5vZGVzXG4gICAgICovXG4gICAgcHVibGljIGZyb21Pcmdhbml6ZWRTZWxlY3Rpb24ob3JnYW5pemVkTW9kZWxTZWxlY3Rpb246IE9yZ2FuaXplZE1vZGVsU2VsZWN0aW9uKTogSGllcmFyY2hpY01vZGVsTm9kZVtdIHtcbiAgICAgICAgaWYgKCFvcmdhbml6ZWRNb2RlbFNlbGVjdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0OiBIaWVyYXJjaGljTW9kZWxOb2RlW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBzZWxlY3RhYmxlQXRLZXkgb2YgT2JqZWN0LmtleXMob3JnYW5pemVkTW9kZWxTZWxlY3Rpb24pKSB7XG4gICAgICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLmdldENvbmZpZ3VyYXRpb25CeVNlbGVjdGFibGVLZXkoc2VsZWN0YWJsZUF0S2V5KTtcbiAgICAgICAgICAgIGlmIChjb25maWcpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG1vZGVsIG9mIG9yZ2FuaXplZE1vZGVsU2VsZWN0aW9uW3NlbGVjdGFibGVBdEtleV0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gobmV3IEhpZXJhcmNoaWNNb2RlbE5vZGUobW9kZWwsIGNvbmZpZykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5qZWN0U2VydmljZXNJbkNvbmZpZ3VyYXRpb24oXG4gICAgICAgIGNvbmZpZ3VyYXRpb25zOiBOYXR1cmFsSGllcmFyY2hpY0NvbmZpZ3VyYXRpb25bXSxcbiAgICApOiBOYXR1cmFsSGllcmFyY2hpY0NvbmZpZ3VyYXRpb25bXSB7XG4gICAgICAgIGZvciAoY29uc3QgY29uZmlnIG9mIGNvbmZpZ3VyYXRpb25zKSB7XG4gICAgICAgICAgICBpZiAoIWNvbmZpZy5pbmplY3RlZFNlcnZpY2UpIHtcbiAgICAgICAgICAgICAgICBjb25maWcuaW5qZWN0ZWRTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQoY29uZmlnLnNlcnZpY2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbmZpZ3VyYXRpb25zO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyB0aGF0IGVhY2ggY29uZmlndXJhdGlvbi5zZWxlY3RhYmxlQXRLZXkgYXR0cmlidXRlIGlzIHVuaXF1ZVxuICAgICAqL1xuICAgIHByaXZhdGUgdmFsaWRhdGVDb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb25zOiBOYXR1cmFsSGllcmFyY2hpY0NvbmZpZ3VyYXRpb25bXSk6IHZvaWQge1xuICAgICAgICBjb25zdCBzZWxlY3RhYmxlQXRLZXlBdHRyaWJ1dGVzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGNvbmZpZyBvZiBjb25maWd1cmF0aW9ucykge1xuICAgICAgICAgICAgaWYgKGNvbmZpZy5zZWxlY3RhYmxlQXRLZXkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlJbmRleCA9IHNlbGVjdGFibGVBdEtleUF0dHJpYnV0ZXMuaW5kZXhPZihjb25maWcuc2VsZWN0YWJsZUF0S2V5KTtcblxuICAgICAgICAgICAgICAgIGlmIChrZXlJbmRleCA9PT0gLTEgJiYgY29uZmlnLnNlbGVjdGFibGVBdEtleSkge1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlQXRLZXlBdHRyaWJ1dGVzLnB1c2goY29uZmlnLnNlbGVjdGFibGVBdEtleSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gVE9ETyA6IHJlbW92ZSA/XG4gICAgICAgICAgICAgICAgLy8gVGhpcyBiZWhhdmlvciBtYXliZSBkYW5nZXJvdXMgaW4gY2FzZSB3ZSByZS1vcGVuIGhpZXJhcmNoaWNhbCBzZWxlY3RvciB3aXRoIHRoZSBsYXN0IHJldHVybmVkIGNvbmZpZyBoYXZpbmcgbm9uLXVuaXF1ZVxuICAgICAgICAgICAgICAgIC8vIGtleXNcbiAgICAgICAgICAgICAgICBpZiAoa2V5SW5kZXggPCAtMSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ0ludmFsaWQgaGllcmFyY2hpYyBjb25maWd1cmF0aW9uIDogc2VsZWN0YWJsZUF0S2V5IGF0dHJpYnV0ZSBzaG91bGQgYmUgdW5pcXVlJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGNvbmZpZ3VyYXRpb25zIHNldHVwIGluIHRoZSBsaXN0IGFmdGVyIHRoZSBnaXZlbiBvbmVcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldE5leHRDb25maWdzKGNvbmZpZzogTmF0dXJhbEhpZXJhcmNoaWNDb25maWd1cmF0aW9uKTogTmF0dXJhbEhpZXJhcmNoaWNDb25maWd1cmF0aW9uW10ge1xuICAgICAgICBjb25zdCBjb25maWdJbmRleCA9IHRoaXMuY29uZmlndXJhdGlvbi5maW5kSW5kZXgoYyA9PiBjID09PSBjb25maWcpO1xuICAgICAgICByZXR1cm4gdGhpcy5jb25maWd1cmF0aW9uLnNsaWNlKGNvbmZpZ0luZGV4KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBCdWlsZHMgcXVlcnlWYXJpYWJsZXMgZmlsdGVyIGZvciBjaGlsZHJlbiBxdWVyeVxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0U2VydmljZUZpbHRlcihcbiAgICAgICAgZmxhdE5vZGU6IEhpZXJhcmNoaWNGbGF0Tm9kZSB8IG51bGwsXG4gICAgICAgIGNvbmZpZzogTmF0dXJhbEhpZXJhcmNoaWNDb25maWd1cmF0aW9uLFxuICAgICAgICBjb250ZXh0RmlsdGVyOiBIaWVyYXJjaGljRmlsdGVyQ29uZmlndXJhdGlvblsnZmlsdGVyJ10gfCBudWxsID0gbnVsbCxcbiAgICAgICAgYWxsRGVlcHMgPSBmYWxzZSxcbiAgICApOiBIaWVyYXJjaGljRmlsdGVyQ29uZmlndXJhdGlvblsnZmlsdGVyJ10gfCBudWxsIHtcbiAgICAgICAgY29uc3QgZmllbGRDb25kaXRpb246IExpdGVyYWwgPSB7fTtcblxuICAgICAgICAvLyBpZiBubyBwYXJlbnQsIGZpbHRlciBlbXB0eSBlbGVtZW50c1xuICAgICAgICBpZiAoIWZsYXROb2RlKSB7XG4gICAgICAgICAgICBpZiAoIWNvbmZpZy5wYXJlbnRzUmVsYXRpb25OYW1lcykge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0RmlsdGVyID8gY29udGV4dEZpbHRlciA6IHt9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWFsbERlZXBzKSB7XG4gICAgICAgICAgICAgICAgY29uZmlnLnBhcmVudHNSZWxhdGlvbk5hbWVzLmZvckVhY2goZiA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkQ29uZGl0aW9uW2ZdID0ge2VtcHR5OiB7fX07XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWZsYXROb2RlLm5vZGUuY29uZmlnLmNoaWxkcmVuUmVsYXRpb25OYW1lcyB8fCAhY29uZmlnLnBhcmVudHNSZWxhdGlvbk5hbWVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG1hdGNoaW5nRmlsdGVycyA9IGludGVyc2VjdGlvbihcbiAgICAgICAgICAgICAgICBmbGF0Tm9kZS5ub2RlLmNvbmZpZy5jaGlsZHJlblJlbGF0aW9uTmFtZXMsXG4gICAgICAgICAgICAgICAgY29uZmlnLnBhcmVudHNSZWxhdGlvbk5hbWVzLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmICghbWF0Y2hpbmdGaWx0ZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmllbGRDb25kaXRpb25bbWF0Y2hpbmdGaWx0ZXJzWzBdXSA9IHtoYXZlOiB7dmFsdWVzOiBbZmxhdE5vZGUubm9kZS5tb2RlbC5pZF19fTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbHRlcnMgPSB7Z3JvdXBzOiBbe2NvbmRpdGlvbnM6IFtmaWVsZENvbmRpdGlvbl19XX07XG5cbiAgICAgICAgLy8gdG9kbyA6IGlzIGl0IHJpZ2h0ID8gc2hvdWxkbid0IGl0IGJlIG1hbmFnZWQgd2l0aCBRdWVyeVZhcmlhYmxlc01hbmFnZXIncyBjaGFubmVscyA/ID9cbiAgICAgICAgaWYgKGNvbnRleHRGaWx0ZXIpIHtcbiAgICAgICAgICAgIGZpbHRlcnMuZ3JvdXBzLnB1c2goLi4uY29udGV4dEZpbHRlci5ncm91cHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZpbHRlcnM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGEgY29udGV4dCBmaWx0ZXIgYXBwbGljYWJsZSB0byB0aGUgc2VydmljZSBmb3IgZ2l2ZW4gY29uZmlnXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29uZmlnIEFwcGxpY2FibGUgY29uZmlnXG4gICAgICogQHBhcmFtIGNvbnRleHRGaWx0ZXJzIExpc3Qgb2YgY29udGV4dCBmaWx0ZXJzXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRGaWx0ZXJCeVNlcnZpY2UoXG4gICAgICAgIGNvbmZpZzogTmF0dXJhbEhpZXJhcmNoaWNDb25maWd1cmF0aW9uLFxuICAgICAgICBjb250ZXh0RmlsdGVyczogSGllcmFyY2hpY0ZpbHRlckNvbmZpZ3VyYXRpb25bXSB8IG51bGwsXG4gICAgKTogSGllcmFyY2hpY0ZpbHRlckNvbmZpZ3VyYXRpb25bJ2ZpbHRlciddIHwgbnVsbCB7XG4gICAgICAgIGlmICghY29udGV4dEZpbHRlcnMgfHwgIWNvbmZpZykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaWx0ZXIgPSBjb250ZXh0RmlsdGVycy5maW5kKGYgPT4gZi5zZXJ2aWNlID09PSBjb25maWcuc2VydmljZSk7XG4gICAgICAgIHJldHVybiBmaWx0ZXIgPyBmaWx0ZXIuZmlsdGVyIDogbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZWFyY2ggaW4gY29uZmlndXJhdGlvbnMuc2VsZWN0YWJsZUF0S2V5IGF0dHJpYnV0ZSB0byBmaW5kIGdpdmVuIGtleSBhbmQgcmV0dXJuIHRoZSBjb25maWd1cmF0aW9uXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRDb25maWd1cmF0aW9uQnlTZWxlY3RhYmxlS2V5KFxuICAgICAgICBrZXk6IE5hdHVyYWxIaWVyYXJjaGljQ29uZmlndXJhdGlvblsnc2VsZWN0YWJsZUF0S2V5J10sXG4gICAgKTogTmF0dXJhbEhpZXJhcmNoaWNDb25maWd1cmF0aW9uIHwgbnVsbCB7XG4gICAgICAgIGlmICghdGhpcy5jb25maWd1cmF0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZ3VyYXRpb24uZmluZChjb25mID0+IGNvbmYuc2VsZWN0YWJsZUF0S2V5ID09PSBrZXkpIHx8IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRPckNyZWF0ZU1vZGVsTm9kZShcbiAgICAgICAgaXRlbTogSGllcmFyY2hpY01vZGVsLFxuICAgICAgICBjb25maWd1cmF0aW9uOiBOYXR1cmFsSGllcmFyY2hpY0NvbmZpZ3VyYXRpb24sXG4gICAgKTogSGllcmFyY2hpY01vZGVsTm9kZSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmRhdGFDaGFuZ2UudmFsdWUuZmluZChuID0+IG4ubW9kZWwuaWQgPT09IGl0ZW0uaWQgJiYgbi5tb2RlbC5fX3R5cGVuYW1lID09PSBpdGVtLl9fdHlwZW5hbWUpO1xuICAgICAgICByZXR1cm4gbm9kZSB8fCBuZXcgSGllcmFyY2hpY01vZGVsTm9kZShpdGVtLCBjb25maWd1cmF0aW9uKTtcbiAgICB9XG59XG4iXX0=
252
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGllcmFyY2hpYy1zZWxlY3Rvci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF0dXJhbC9zcmMvbGliL21vZHVsZXMvaGllcmFyY2hpYy1zZWxlY3Rvci9oaWVyYXJjaGljLXNlbGVjdG9yL2hpZXJhcmNoaWMtc2VsZWN0b3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFXLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDdkMsT0FBTyxFQUFDLGVBQWUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFhLE1BQU0sTUFBTSxDQUFDO0FBRWxFLE9BQU8sRUFBQyxRQUFRLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFDLDRCQUE0QixFQUFpQixNQUFNLHlDQUF5QyxDQUFDO0FBVXJHLE9BQU8sRUFBa0IsbUJBQW1CLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQzs7QUFhM0UsTUFBTSxPQUFPLGdDQUFnQztJQWV6QyxZQUFvQyxRQUFrQjtRQUFsQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBZHREOzs7O1dBSUc7UUFDYSxlQUFVLEdBQTJDLElBQUksZUFBZSxDQUF3QixFQUFFLENBQUMsQ0FBQztRQUVwSDs7OztXQUlHO1FBQ0ssa0JBQWEsR0FBcUMsRUFBRSxDQUFDO0lBRUosQ0FBQztJQUUxRDs7O09BR0c7SUFDSSxJQUFJLENBQ1AsTUFBd0MsRUFDeEMsZ0JBQXVELElBQUksRUFDM0Qsa0JBQXlDLElBQUk7UUFFN0MsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLDZCQUE2QixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hFLE9BQU8sSUFBSSxDQUFDLE9BQU8s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YyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLEtBQUssTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3RFLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDekMsQ0FBQztJQUVEOztPQUVHO0lBQ0ssK0JBQStCLENBQ25DLEdBQXNEO1FBRXRELElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3JCLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFFRCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsS0FBSyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUM7SUFDakYsQ0FBQztJQUVPLG9CQUFvQixDQUN4QixJQUFxQixFQUNyQixhQUE2QztRQUU3QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxLQUFLLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMvRyxPQUFPLElBQUksSUFBSSxJQUFJLG1CQUFtQixDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsQ0FBQztJQUNoRSxDQUFDOzs2SEE1VFEsZ0NBQWdDO2lJQUFoQyxnQ0FBZ0M7MkZBQWhDLGdDQUFnQztrQkFENUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZSwgSW5qZWN0b3J9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtpbnRlcnNlY3Rpb259IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgZmlyc3QsIGZvcmtKb2luLCBPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtmaW5hbGl6ZSwgbWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge05hdHVyYWxRdWVyeVZhcmlhYmxlc01hbmFnZXIsIFF1ZXJ5VmFyaWFibGVzfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL3F1ZXJ5LXZhcmlhYmxlLW1hbmFnZXInO1xuaW1wb3J0IHtIaWVyYXJjaGljRmxhdE5vZGV9IGZyb20gJy4uL2NsYXNzZXMvZmxhdC1ub2RlJztcbmltcG9ydCB7XG4gICAgTmF0dXJhbEhpZXJhcmNoaWNDb25maWd1cmF0aW9uLFxuICAgIE5hdHVyYWxIaWVyYXJjaGljU2VydmljZUNvbmZpZ3VyYXRpb24sXG59IGZyb20gJy4uL2NsYXNzZXMvaGllcmFyY2hpYy1jb25maWd1cmF0aW9uJztcbmltcG9ydCB7XG4gICAgSGllcmFyY2hpY0ZpbHRlckNvbmZpZ3VyYXRpb24sXG4gICAgSGllcmFyY2hpY0ZpbHRlcnNDb25maWd1cmF0aW9uLFxufSBmcm9tICcuLi9jbGFzc2VzL2hpZXJhcmNoaWMtZmlsdGVycy1jb25maWd1cmF0aW9uJztcbmltcG9ydCB7SGllcmFyY2hpY01vZGVsLCBIaWVyYXJjaGljTW9kZWxOb2RlfSBmcm9tICcuLi9jbGFzc2VzL21vZGVsLW5vZGUnO1xuaW1wb3J0IHtMaXRlcmFsfSBmcm9tICcuLi8uLi8uLi90eXBlcy90eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3JnYW5pemVkTW9kZWxTZWxlY3Rpb24ge1xuICAgIFtrZXk6IHN0cmluZ106IGFueVtdO1xufVxuXG5pbnRlcmZhY2UgQ29udGV4dHVhbGl6ZWRDb25maWcge1xuICAgIGNvbmZpZ3VyYXRpb246IE5hdHVyYWxIaWVyYXJjaGljU2VydmljZUNvbmZpZ3VyYXRpb247XG4gICAgdmFyaWFibGVzTWFuYWdlcjogTmF0dXJhbFF1ZXJ5VmFyaWFibGVzTWFuYWdlcjtcbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE5hdHVyYWxIaWVyYXJjaGljU2VsZWN0b3JTZXJ2aWNlIHtcbiAgICAvKipcbiAgICAgKiBTdG9yZXMgdGhlIGdsb2JhbCByZXN1bHQgb2YgdGhlIHRyZWVcbiAgICAgKiBUaGlzIG9ic2VydmFibGUgY29udGFpbnMgTm9kZS5cbiAgICAgKiBXaGVuIGl0J3MgdXBkYXRlZCwgdGhlIFRyZWVDb250cm9sbGVyIGFuZCBUcmVlRmxhdHRlbmVyIHByb2Nlc3MgdGhlIG5ldyBhcnJheSB0byBnZW5lcmF0ZSB0aGUgZmxhdCB0cmVlLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBkYXRhQ2hhbmdlOiBCZWhhdmlvclN1YmplY3Q8SGllcmFyY2hpY01vZGVsTm9kZVtdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SGllcmFyY2hpY01vZGVsTm9kZVtdPihbXSk7XG5cbiAgICAvKipcbiAgICAgKiBDb25maWd1cmF0aW9uIGZvciByZWxhdGlvbnMgYW5kIHNlbGVjdGlvbiBjb25zdHJhaW50c1xuICAgICAqXG4gICAgICogVGhlIGxpc3Qgc2hvdWxkIGJlIHNvcnRlZCBpbiB0aGUgb3JkZXIgb2YgdGhlIGhpZXJhcmNoaWMgKGxpc3QgZmlyc3QgcGFyZW50IHJ1bGVzLCB0aGVuIGNoaWxkIHJ1bGVzKVxuICAgICAqL1xuICAgIHByaXZhdGUgY29uZmlndXJhdGlvbjogTmF0dXJhbEhpZXJhcmNoaWNDb25maWd1cmF0aW9uW10gPSBbXTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGluamVjdG9yOiBJbmplY3Rvcikge31cblxuICAgIC8qKlxuICAgICAqIEluaXQgY29tcG9uZW50IGJ5IHNhdmluZyB0aGUgY29tcGxldGUgY29uZmlndXJhdGlvbiwgYW5kIHRoZW4gcmV0cmlldmluZyByb290IGVsZW1lbnRzLlxuICAgICAqIFVwZGF0ZXMgKiphbm90aGVyKiogb2JzZXJ2YWJsZSAodGhpcy5kYXRhQ2hhbmdlKSB3aGVuIGRhdGEgaXMgcmV0cmlldmVkLlxuICAgICAqL1xuICAgIHB1YmxpYyBpbml0KFxuICAgICAgICBjb25maWc6IE5hdHVyYWxIaWVyYXJjaGljQ29uZmlndXJhdGlvbltdLFxuICAgICAgICBjb250ZXh0RmlsdGVyOiBIaWVyYXJjaGljRmlsdGVyc0NvbmZpZ3VyYXRpb24gfCBudWxsID0gbnVsbCxcbiAgICAgICAgc2VhcmNoVmFyaWFibGVzOiBRdWVyeVZhcmlhYmxlcyB8IG51bGwgPSBudWxsLFxuICAgICk6IE9ic2VydmFibGU8dW5rbm93bj4ge1xuICAgICAgICB0aGlzLnZhbGlkYXRlQ29uZmlndXJhdGlvbihjb25maWcpO1xuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSB0aGlzLmluamVjdFNlcnZpY2VzSW5Db25maWd1cmF0aW9uKGNvbmZpZyk7XG4gICAgICAgIHJldHVybiB0aGlzLmdldExpc3QobnVsbCwgY29udGV4dEZpbHRlciwgc2VhcmNoVmFyaWFibGVzKS5waXBlKG1hcChkYXRhID0+IHRoaXMuZGF0YUNoYW5nZS5uZXh0KGRhdGEpKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGxpc3Qgb2YgY2hpbGRyZW4sIGNvbnNpZGVyaW5nIGdpdmVuIEZsYXROb2RlIGlkIGFzIGEgcGFyZW50LlxuICAgICAqIE1hcmsgbG9hZGluZyBzdGF0dXMgaW5kaXZpZHVhbGx5IG9uIG5vZGVzLlxuICAgICAqL1xuICAgIHB1YmxpYyBsb2FkQ2hpbGRyZW4oXG4gICAgICAgIGZsYXROb2RlOiBIaWVyYXJjaGljRmxhdE5vZGUsXG4gICAgICAgIGNvbnRleHRGaWx0ZXI6IEhpZXJhcmNoaWNGaWx0ZXJzQ29uZmlndXJhdGlvbiB8IG51bGwgPSBudWxsLFxuICAgICk6IHZvaWQge1xuICAgICAgICAvLyBEb250IHJlZmV0Y2ggY2hpbGRyZW4uIEltcHJvdmUgcGVyZm9ybWFuY2VzXG4gICAgICAgIC8vIFByZXZlbnRzIGludGVyZmVyZW5jZXMgYmV0d2VlbiBIaWVyYXJjaGljTW9kZWxOb2RlIHN0cnVjdHVyZSBhbmQgYW5ndWxhciBjb21wb25lbnRzIG5hdmlnYXRpb24uXG4gICAgICAgIC8vIFByZXZlbnRzIGEgYnVnIHdoZXJlIGdyYW5kIGNoaWxkcmVuIHdlcmUgbG9zdCBpZiBjbG9zaW5nIHJvb3RcbiAgICAgICAgaWYgKGZsYXROb2RlLm5vZGUuY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmbGF0Tm9kZS5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5nZXRMaXN0KGZsYXROb2RlLCBjb250ZXh0RmlsdGVyKVxuICAgICAgICAgICAgLnBpcGUoZmluYWxpemUoKCkgPT4gKGZsYXROb2RlLmxvYWRpbmcgPSBmYWxzZSkpKVxuICAgICAgICAgICAgLnN1YnNjcmliZShpdGVtcyA9PiB7XG4gICAgICAgICAgICAgICAgZmxhdE5vZGUubm9kZS5jaGlsZHJlbkNoYW5nZS5uZXh0KGl0ZW1zKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFDaGFuZ2UubmV4dCh0aGlzLmRhdGFDaGFuZ2UudmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNlYXJjaChzZWFyY2hWYXJpYWJsZXM6IFF1ZXJ5VmFyaWFibGVzLCBjb250ZXh0RmlsdGVyOiBIaWVyYXJjaGljRmlsdGVyc0NvbmZpZ3VyYXRpb24gfCBudWxsID0gbnVsbCk6IHZvaWQge1xuICAgICAgICB0aGlzLmdldExpc3QobnVsbCwgY29udGV4dEZpbHRlciwgc2VhcmNoVmFyaWFibGVzKS5zdWJzY3JpYmUoaXRlbXMgPT4ge1xuICAgICAgICAgICAgdGhpcy5kYXRhQ2hhbmdlLm5leHQoaXRlbXMpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZSBlbGVtZW50cyBmcm9tIHRoZSBzZXJ2ZXJcbiAgICAgKiBHZXQgcm9vdCBlbGVtZW50cyBpZiBub2RlIGlzIG51bGwsIG9yIGNoaWxkIGVsZW1lbnRzIGlmIG5vZGUgaXMgZ2l2ZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIGdldExpc3QoXG4gICAgICAgIG5vZGU6IEhpZXJhcmNoaWNGbGF0Tm9kZSB8IG51bGwgPSBudWxsLFxuICAgICAgICBjb250ZXh0RmlsdGVyczogSGllcmFyY2hpY0ZpbHRlcnNDb25maWd1cmF0aW9uIHwgbnVsbCA9IG51bGwsXG4gICAgICAgIHNlYXJjaFZhcmlhYmxlczogUXVlcnlWYXJpYWJsZXMgfCBudWxsID0gbnVsbCxcbiAgICApOiBPYnNlcnZhYmxlPEhpZXJhcmNoaWNNb2RlbE5vZGVbXT4ge1xuICAgICAgICBjb25zdCBjb25maWd1cmF0aW9ucyA9IHRoaXMuZ2V0Q29udGV4dHVhbGl6ZWRDb25maWdzKG5vZGUsIGNvbnRleHRGaWx0ZXJzLCBzZWFyY2hWYXJpYWJsZXMpO1xuICAgICAgICBjb25zdCBvYnNlcnZhYmxlcyA9IGNvbmZpZ3VyYXRpb25zLm1hcChjID0+IGMuY29uZmlndXJhdGlvbi5pbmplY3RlZFNlcnZpY2UuZ2V0QWxsKGMudmFyaWFibGVzTWFuYWdlcikpO1xuXG4gICAgICAgIC8vIEZpcmUgcXVlcmllcywgYW5kIG1lcmdlIHJlc3VsdHMsIHRyYW5zZm9ybWluZyBhcG9sbG8gaXRlbXMgaW50byBOb2RlIE9iamVjdC5cbiAgICAgICAgcmV0dXJuIGZvcmtKb2luKG9ic2VydmFibGVzKS5waXBlKFxuICAgICAgICAgICAgbWFwKHJlc3VsdHMgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxpc3Rpbmc6IEhpZXJhcmNoaWNNb2RlbE5vZGVbXSA9IFtdO1xuXG4gICAgICAgICAgICAgICAgLy8gRm9yIGVhY2ggcmVzdWx0IG9mIGFuIG9ic2VydmFibGVcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gRm9yIGVhY2ggaXRlbSBvZiB0aGUgcmVzdWx0LCBjb252ZXJ0IGludG8gTm9kZSBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHJlc3VsdHNbaV0uaXRlbXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RpbmcucHVzaCh0aGlzLmdldE9yQ3JlYXRlTW9kZWxOb2RlKGl0ZW0sIGNvbmZpZ3VyYXRpb25zW2ldLmNvbmZpZ3VyYXRpb24pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBsaXN0aW5nO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGNvdW50SXRlbXMobm9kZTogSGllcmFyY2hpY0ZsYXROb2RlLCBjb250ZXh0RmlsdGVyczogSGllcmFyY2hpY0ZpbHRlcnNDb25maWd1cmF0aW9uIHwgbnVsbCA9IG51bGwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY29uZmlndXJhdGlvbnMgPSB0aGlzLmdldENvbnRleHR1YWxpemVkQ29uZmlncyhub2RlLCBjb250ZXh0RmlsdGVycywgbnVsbCk7XG4gICAgICAgIGNvbnN0IG9ic2VydmFibGVzID0gY29uZmlndXJhdGlvbnMubWFwKGMgPT5cbiAgICAgICAgICAgIGMuY29uZmlndXJhdGlvbi5pbmplY3RlZFNlcnZpY2UuY291bnQoYy52YXJpYWJsZXNNYW5hZ2VyKS5waXBlKGZpcnN0KCkpLFxuICAgICAgICApO1xuXG4gICAgICAgIGZvcmtKb2luKG9ic2VydmFibGVzKS5zdWJzY3JpYmUocmVzdWx0cyA9PiB7XG4gICAgICAgICAgICBjb25zdCB0b3RhbEl0ZW1zID0gcmVzdWx0cy5yZWR1Y2UoKHRvdGFsLCBsZW5ndGgpID0+IHRvdGFsICsgbGVuZ3RoLCAwKTtcbiAgICAgICAgICAgIG5vZGUuZXhwYW5kYWJsZSA9IHRvdGFsSXRlbXMgPiAwO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENvbnRleHR1YWxpemVkQ29uZmlncyhcbiAgICAgICAgbm9kZTogSGllcmFyY2hpY0ZsYXROb2RlIHwgbnVsbCA9IG51bGwsXG4gICAgICAgIGNvbnRleHRGaWx0ZXJzOiBIaWVyYXJjaGljRmlsdGVyc0NvbmZpZ3VyYXRpb24gfCBudWxsID0gbnVsbCxcbiAgICAgICAgc2VhcmNoVmFyaWFibGVzOiBRdWVyeVZhcmlhYmxlcyB8IG51bGwgPSBudWxsLFxuICAgICk6IENvbnRleHR1YWxpemVkQ29uZmlnW10ge1xuICAgICAgICBjb25zdCBjb25maWdzQW5kU2VydmljZXM6IENvbnRleHR1YWxpemVkQ29uZmlnW10gPSBbXTtcblxuICAgICAgICAvLyBDb25zaWRlcmluZyB0aGUgd2hvbGUgY29uZmlndXJhdGlvbiBtYXkgY2F1c2UgcXVlcmllcyB3aXRoIG5vL3dyb25nIHJlc3VsdHMgd2UgaGF2ZSBpbXBlcmF0aXZlbHkgdG8gYXZvaWQgIVxuICAgICAgICAvLyBlLmcgdGhlcmUgYXJlIGNyb3NzIGRlcGVuZGVuY2llcyBiZXR3ZWVuIGVxdWlwbWVudHMgYW5kIHRheG9ub21pZXMgZmlsdGVycy4gQm90aCBoYXZlIFwicGFyZW50c1wiIGFuZCBcInRheG9ub21pZXNcIiBmaWx0ZXJzLi4uXG4gICAgICAgIC8vIFdoZW4gY2xpY2tpbmcgb24gYSBlcXVpcG1lbnQsIHRoZSBjb25maWd1cmF0aW9uIG9mIHRheG9ub21pZXMgd2l0aCBtYXRjaCBcInBhcmVudHNcIiBmaWx0ZXIsIGJ1dCB1c2UgdGhlIGlkIG9mIHRoZSBlcXVpcG1lbnRcbiAgICAgICAgLy8gVG8gZml4IHRoaXMsIHdlIHNob3VsZCBvbmx5IGNvbnNpZGVyIGNvbmZpZ3VyYXRpb24gYWZ0ZXIgdGhlIG9uZSBnaXZlbiBieSB0aGUgbm9kZSBwYXNzZWQgYXMgYXJndW1lbnQuXG4gICAgICAgIC8vIFRoYXQgd291bGQgbWVhbiA6IG5vIGNoaWxkIGNhbiBhZmZlY3QgcGFyZW50LlxuICAgICAgICAvLyBUaGF0IHdvdWxkIG1lYW4gOiBzb3J0aW5nIGluIHRoZSBjb25maWd1cmF0aW9uIGhhdmUgc2VtYW50aWMvaGllcmFyY2h5IGltcGxpY2F0aW9uc1xuICAgICAgICBjb25zdCBjb25maWdzID0gbm9kZSA/IHRoaXMuZ2V0TmV4dENvbmZpZ3Mobm9kZS5ub2RlLmNvbmZpZykgOiB0aGlzLmNvbmZpZ3VyYXRpb247XG5cbiAgICAgICAgY29uc3QgcGFnaW5hdGlvbiA9IHtwYWdlSW5kZXg6IDAsIHBhZ2VTaXplOiA5OTl9O1xuXG4gICAgICAgIGZvciAoY29uc3QgY29uZmlnIG9mIGNvbmZpZ3MpIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW06IENvbnRleHR1YWxpemVkQ29uZmlnID0ge30gYXMgQ29udGV4dHVhbGl6ZWRDb25maWc7XG4gICAgICAgICAgICBjb25zdCBjb250ZXh0RmlsdGVyID0gdGhpcy5nZXRGaWx0ZXJCeVNlcnZpY2UoY29uZmlnLCBjb250ZXh0RmlsdGVycyk7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLmdldFNlcnZpY2VGaWx0ZXIobm9kZSwgY29uZmlnLCBjb250ZXh0RmlsdGVyLCAhIXNlYXJjaFZhcmlhYmxlcyk7XG5cbiAgICAgICAgICAgIGlmICghZmlsdGVyIHx8ICFjb25maWcuaW5qZWN0ZWRTZXJ2aWNlKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHZhcmlhYmxlc01hbmFnZXIgPSBuZXcgTmF0dXJhbFF1ZXJ5VmFyaWFibGVzTWFuYWdlcigpO1xuXG4gICAgICAgICAgICB2YXJpYWJsZXNNYW5hZ2VyLnNldCgndmFyaWFibGVzJywge2ZpbHRlcjogZmlsdGVyLCBwYWdpbmF0aW9uOiBwYWdpbmF0aW9ufSk7XG4gICAgICAgICAgICB2YXJpYWJsZXNNYW5hZ2VyLnNldCgnY29uZmlnLWZpbHRlcicsIHtmaWx0ZXI6IGNvbmZpZy5maWx0ZXJ9KTtcblxuICAgICAgICAgICAgaWYgKHNlYXJjaFZhcmlhYmxlcykge1xuICAgICAgICAgICAgICAgIHZhcmlhYmxlc01hbmFnZXIuc2V0KCduYXR1cmFsLXNlYXJjaCcsIHNlYXJjaFZhcmlhYmxlcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIENhc3QgTmF0dXJhbEhpZXJhcmNoaWNTZXJ2aWNlQ29uZmlndXJhdGlvbiBiZWNhdXNlIHRoZSB1bmRlZmluZWRcbiAgICAgICAgICAgIC8vIGluamVjdGVkU2VydmljZXMgYXJlIGZpbHRlcmVkIGVhcmxpZXIgYW5kIHdlIGNhbiB2YWxpZGF0ZSB2YWx1ZVxuICAgICAgICAgICAgaXRlbS5jb25maWd1cmF0aW9uID0gY29uZmlnIGFzIE5hdHVyYWxIaWVyYXJjaGljU2VydmljZUNvbmZpZ3VyYXRpb247XG4gICAgICAgICAgICBpdGVtLnZhcmlhYmxlc01hbmFnZXIgPSB2YXJpYWJsZXNNYW5hZ2VyO1xuICAgICAgICAgICAgY29uZmlnc0FuZFNlcnZpY2VzLnB1c2goaXRlbSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29uZmlnc0FuZFNlcnZpY2VzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBtb2RlbHMgbWF0Y2hpbmcgZ2l2ZW4gRmxhdE5vZGVzXG4gICAgICogUmV0dXJucyBhIExpdGVyYWwgb2YgbW9kZWxzIGdyb3VwZWQgYnkgdGhlaXIgY29uZmlndXJhdGlvbiBhdHRyaWJ1dGUgXCJzZWxlY3RhYmxlQXRLZXlcIlxuICAgICAqL1xuICAgIHB1YmxpYyB0b09yZ2FuaXplZFNlbGVjdGlvbihub2RlczogSGllcmFyY2hpY01vZGVsTm9kZVtdKTogT3JnYW5pemVkTW9kZWxTZWxlY3Rpb24ge1xuICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLmNvbmZpZ3VyYXRpb24ucmVkdWNlKChncm91cCwgY29uZmlnKSA9PiB7XG4gICAgICAgICAgICBpZiAoY29uZmlnLnNlbGVjdGFibGVBdEtleSkge1xuICAgICAgICAgICAgICAgIGdyb3VwW2NvbmZpZy5zZWxlY3RhYmxlQXRLZXldID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZ3JvdXA7XG4gICAgICAgIH0sIHt9IGFzIExpdGVyYWwpO1xuXG4gICAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuICAgICAgICAgICAgaWYgKG5vZGUuY29uZmlnLnNlbGVjdGFibGVBdEtleSkge1xuICAgICAgICAgICAgICAgIHNlbGVjdGlvbltub2RlLmNvbmZpZy5zZWxlY3RhYmxlQXRLZXldLnB1c2gobm9kZS5tb2RlbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2VsZWN0aW9uO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRyYW5zZm9ybXMgYW4gT3JnYW5pemVkTW9kZWxTZWxlY3Rpb24gaW50byBhIGxpc3Qgb2YgTW9kZWxOb2Rlc1xuICAgICAqL1xuICAgIHB1YmxpYyBmcm9tT3JnYW5pemVkU2VsZWN0aW9uKG9yZ2FuaXplZE1vZGVsU2VsZWN0aW9uOiBPcmdhbml6ZWRNb2RlbFNlbGVjdGlvbik6IEhpZXJhcmNoaWNNb2RlbE5vZGVbXSB7XG4gICAgICAgIGlmICghb3JnYW5pemVkTW9kZWxTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdDogSGllcmFyY2hpY01vZGVsTm9kZVtdID0gW107XG4gICAgICAgIGZvciAoY29uc3Qgc2VsZWN0YWJsZUF0S2V5IG9mIE9iamVjdC5rZXlzKG9yZ2FuaXplZE1vZGVsU2VsZWN0aW9uKSkge1xuICAgICAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5nZXRDb25maWd1cmF0aW9uQnlTZWxlY3RhYmxlS2V5KHNlbGVjdGFibGVBdEtleSk7XG4gICAgICAgICAgICBpZiAoY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBtb2RlbCBvZiBvcmdhbml6ZWRNb2RlbFNlbGVjdGlvbltzZWxlY3RhYmxlQXRLZXldKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5ldyBIaWVyYXJjaGljTW9kZWxOb2RlKG1vZGVsLCBjb25maWcpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluamVjdFNlcnZpY2VzSW5Db25maWd1cmF0aW9uKFxuICAgICAgICBjb25maWd1cmF0aW9uczogTmF0dXJhbEhpZXJhcmNoaWNDb25maWd1cmF0aW9uW10sXG4gICAgKTogTmF0dXJhbEhpZXJhcmNoaWNDb25maWd1cmF0aW9uW10ge1xuICAgICAgICBmb3IgKGNvbnN0IGNvbmZpZyBvZiBjb25maWd1cmF0aW9ucykge1xuICAgICAgICAgICAgaWYgKCFjb25maWcuaW5qZWN0ZWRTZXJ2aWNlKSB7XG4gICAgICAgICAgICAgICAgY29uZmlnLmluamVjdGVkU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KGNvbmZpZy5zZXJ2aWNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb25maWd1cmF0aW9ucztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgdGhhdCBlYWNoIGNvbmZpZ3VyYXRpb24uc2VsZWN0YWJsZUF0S2V5IGF0dHJpYnV0ZSBpcyB1bmlxdWVcbiAgICAgKi9cbiAgICBwcml2YXRlIHZhbGlkYXRlQ29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uczogTmF0dXJhbEhpZXJhcmNoaWNDb25maWd1cmF0aW9uW10pOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0YWJsZUF0S2V5QXR0cmlidXRlczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBjb25maWcgb2YgY29uZmlndXJhdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChjb25maWcuc2VsZWN0YWJsZUF0S2V5KSB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5SW5kZXggPSBzZWxlY3RhYmxlQXRLZXlBdHRyaWJ1dGVzLmluZGV4T2YoY29uZmlnLnNlbGVjdGFibGVBdEtleSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoa2V5SW5kZXggPT09IC0xICYmIGNvbmZpZy5zZWxlY3RhYmxlQXRLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZUF0S2V5QXR0cmlidXRlcy5wdXNoKGNvbmZpZy5zZWxlY3RhYmxlQXRLZXkpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIFRPRE8gOiByZW1vdmUgP1xuICAgICAgICAgICAgICAgIC8vIFRoaXMgYmVoYXZpb3IgbWF5YmUgZGFuZ2Vyb3VzIGluIGNhc2Ugd2UgcmUtb3BlbiBoaWVyYXJjaGljYWwgc2VsZWN0b3Igd2l0aCB0aGUgbGFzdCByZXR1cm5lZCBjb25maWcgaGF2aW5nIG5vbi11bmlxdWVcbiAgICAgICAgICAgICAgICAvLyBrZXlzXG4gICAgICAgICAgICAgICAgaWYgKGtleUluZGV4IDwgLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdJbnZhbGlkIGhpZXJhcmNoaWMgY29uZmlndXJhdGlvbiA6IHNlbGVjdGFibGVBdEtleSBhdHRyaWJ1dGUgc2hvdWxkIGJlIHVuaXF1ZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBjb25maWd1cmF0aW9ucyBzZXR1cCBpbiB0aGUgbGlzdCBhZnRlciB0aGUgZ2l2ZW4gb25lXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXROZXh0Q29uZmlncyhjb25maWc6IE5hdHVyYWxIaWVyYXJjaGljQ29uZmlndXJhdGlvbik6IE5hdHVyYWxIaWVyYXJjaGljQ29uZmlndXJhdGlvbltdIHtcbiAgICAgICAgY29uc3QgY29uZmlnSW5kZXggPSB0aGlzLmNvbmZpZ3VyYXRpb24uZmluZEluZGV4KGMgPT4gYyA9PT0gY29uZmlnKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlndXJhdGlvbi5zbGljZShjb25maWdJbmRleCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQnVpbGRzIHF1ZXJ5VmFyaWFibGVzIGZpbHRlciBmb3IgY2hpbGRyZW4gcXVlcnlcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldFNlcnZpY2VGaWx0ZXIoXG4gICAgICAgIGZsYXROb2RlOiBIaWVyYXJjaGljRmxhdE5vZGUgfCBudWxsLFxuICAgICAgICBjb25maWc6IE5hdHVyYWxIaWVyYXJjaGljQ29uZmlndXJhdGlvbixcbiAgICAgICAgY29udGV4dEZpbHRlcjogSGllcmFyY2hpY0ZpbHRlckNvbmZpZ3VyYXRpb25bJ2ZpbHRlciddIHwgbnVsbCA9IG51bGwsXG4gICAgICAgIGFsbERlZXBzID0gZmFsc2UsXG4gICAgKTogSGllcmFyY2hpY0ZpbHRlckNvbmZpZ3VyYXRpb25bJ2ZpbHRlciddIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGZpZWxkQ29uZGl0aW9uOiBMaXRlcmFsID0ge307XG5cbiAgICAgICAgLy8gaWYgbm8gcGFyZW50LCBmaWx0ZXIgZW1wdHkgZWxlbWVudHNcbiAgICAgICAgaWYgKCFmbGF0Tm9kZSkge1xuICAgICAgICAgICAgaWYgKCFjb25maWcucGFyZW50c1JlbGF0aW9uTmFtZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dEZpbHRlciA/IGNvbnRleHRGaWx0ZXIgOiB7fTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFhbGxEZWVwcykge1xuICAgICAgICAgICAgICAgIGNvbmZpZy5wYXJlbnRzUmVsYXRpb25OYW1lcy5mb3JFYWNoKGYgPT4ge1xuICAgICAgICAgICAgICAgICAgICBmaWVsZENvbmRpdGlvbltmXSA9IHtlbXB0eToge319O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFmbGF0Tm9kZS5ub2RlLmNvbmZpZy5jaGlsZHJlblJlbGF0aW9uTmFtZXMgfHwgIWNvbmZpZy5wYXJlbnRzUmVsYXRpb25OYW1lcykge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBtYXRjaGluZ0ZpbHRlcnMgPSBpbnRlcnNlY3Rpb24oXG4gICAgICAgICAgICAgICAgZmxhdE5vZGUubm9kZS5jb25maWcuY2hpbGRyZW5SZWxhdGlvbk5hbWVzLFxuICAgICAgICAgICAgICAgIGNvbmZpZy5wYXJlbnRzUmVsYXRpb25OYW1lcyxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoIW1hdGNoaW5nRmlsdGVycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpZWxkQ29uZGl0aW9uW21hdGNoaW5nRmlsdGVyc1swXV0gPSB7aGF2ZToge3ZhbHVlczogW2ZsYXROb2RlLm5vZGUubW9kZWwuaWRdfX07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaWx0ZXJzID0ge2dyb3VwczogW3tjb25kaXRpb25zOiBbZmllbGRDb25kaXRpb25dfV19O1xuXG4gICAgICAgIC8vIHRvZG8gOiBpcyBpdCByaWdodCA/IHNob3VsZG4ndCBpdCBiZSBtYW5hZ2VkIHdpdGggUXVlcnlWYXJpYWJsZXNNYW5hZ2VyJ3MgY2hhbm5lbHMgPyA/XG4gICAgICAgIGlmIChjb250ZXh0RmlsdGVyKSB7XG4gICAgICAgICAgICBmaWx0ZXJzLmdyb3Vwcy5wdXNoKC4uLmNvbnRleHRGaWx0ZXIuZ3JvdXBzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmaWx0ZXJzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBhIGNvbnRleHQgZmlsdGVyIGFwcGxpY2FibGUgdG8gdGhlIHNlcnZpY2UgZm9yIGdpdmVuIGNvbmZpZ1xuICAgICAqXG4gICAgICogQHBhcmFtIGNvbmZpZyBBcHBsaWNhYmxlIGNvbmZpZ1xuICAgICAqIEBwYXJhbSBjb250ZXh0RmlsdGVycyBMaXN0IG9mIGNvbnRleHQgZmlsdGVyc1xuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0RmlsdGVyQnlTZXJ2aWNlKFxuICAgICAgICBjb25maWc6IE5hdHVyYWxIaWVyYXJjaGljQ29uZmlndXJhdGlvbixcbiAgICAgICAgY29udGV4dEZpbHRlcnM6IEhpZXJhcmNoaWNGaWx0ZXJDb25maWd1cmF0aW9uW10gfCBudWxsLFxuICAgICk6IEhpZXJhcmNoaWNGaWx0ZXJDb25maWd1cmF0aW9uWydmaWx0ZXInXSB8IG51bGwge1xuICAgICAgICBpZiAoIWNvbnRleHRGaWx0ZXJzIHx8ICFjb25maWcpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsdGVyID0gY29udGV4dEZpbHRlcnMuZmluZChmID0+IGYuc2VydmljZSA9PT0gY29uZmlnLnNlcnZpY2UpO1xuICAgICAgICByZXR1cm4gZmlsdGVyID8gZmlsdGVyLmZpbHRlciA6IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VhcmNoIGluIGNvbmZpZ3VyYXRpb25zLnNlbGVjdGFibGVBdEtleSBhdHRyaWJ1dGUgdG8gZmluZCBnaXZlbiBrZXkgYW5kIHJldHVybiB0aGUgY29uZmlndXJhdGlvblxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0Q29uZmlndXJhdGlvbkJ5U2VsZWN0YWJsZUtleShcbiAgICAgICAga2V5OiBOYXR1cmFsSGllcmFyY2hpY0NvbmZpZ3VyYXRpb25bJ3NlbGVjdGFibGVBdEtleSddLFxuICAgICk6IE5hdHVyYWxIaWVyYXJjaGljQ29uZmlndXJhdGlvbiB8IG51bGwge1xuICAgICAgICBpZiAoIXRoaXMuY29uZmlndXJhdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5jb25maWd1cmF0aW9uLmZpbmQoY29uZiA9PiBjb25mLnNlbGVjdGFibGVBdEtleSA9PT0ga2V5KSB8fCBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0T3JDcmVhdGVNb2RlbE5vZGUoXG4gICAgICAgIGl0ZW06IEhpZXJhcmNoaWNNb2RlbCxcbiAgICAgICAgY29uZmlndXJhdGlvbjogTmF0dXJhbEhpZXJhcmNoaWNDb25maWd1cmF0aW9uLFxuICAgICk6IEhpZXJhcmNoaWNNb2RlbE5vZGUge1xuICAgICAgICBjb25zdCBub2RlID0gdGhpcy5kYXRhQ2hhbmdlLnZhbHVlLmZpbmQobiA9PiBuLm1vZGVsLmlkID09PSBpdGVtLmlkICYmIG4ubW9kZWwuX190eXBlbmFtZSA9PT0gaXRlbS5fX3R5cGVuYW1lKTtcbiAgICAgICAgcmV0dXJuIG5vZGUgfHwgbmV3IEhpZXJhcmNoaWNNb2RlbE5vZGUoaXRlbSwgY29uZmlndXJhdGlvbik7XG4gICAgfVxufVxuIl19