@huntsman-cancer-institute/cod 15.0.3 → 16.0.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 (36) hide show
  1. package/components/attribute-base.d.ts +1 -1
  2. package/components/attribute-configuration.component.d.ts +1 -1
  3. package/components/attribute-container.component.d.ts +1 -1
  4. package/components/attribute-default.component.d.ts +1 -1
  5. package/{esm2020 → esm2022}/cod.module.mjs +42 -42
  6. package/{esm2020 → esm2022}/components/attribute-absolute.component.mjs +6 -6
  7. package/{esm2020 → esm2022}/components/attribute-base.mjs +4 -4
  8. package/{esm2020 → esm2022}/components/attribute-configuration.component.mjs +6 -6
  9. package/{esm2020 → esm2022}/components/attribute-container.component.mjs +6 -6
  10. package/{esm2020 → esm2022}/components/attribute-default.component.mjs +12 -12
  11. package/{esm2020 → esm2022}/components/attribute-edit.component.mjs +6 -6
  12. package/{esm2020 → esm2022}/components/attribute-flex.component.mjs +6 -6
  13. package/{esm2020 → esm2022}/date/date-util.mjs +4 -4
  14. package/{esm2020 → esm2022}/pipes/is-group-attribute.pipe.mjs +4 -4
  15. package/{esm2020 → esm2022}/services/attribute.service.mjs +4 -4
  16. package/{fesm2020 → fesm2022}/huntsman-cancer-institute-cod.mjs +89 -89
  17. package/{fesm2020 → fesm2022}/huntsman-cancer-institute-cod.mjs.map +1 -1
  18. package/package.json +14 -20
  19. package/fesm2015/huntsman-cancer-institute-cod.mjs +0 -5047
  20. package/fesm2015/huntsman-cancer-institute-cod.mjs.map +0 -1
  21. /package/{esm2020 → esm2022}/huntsman-cancer-institute-cod.mjs +0 -0
  22. /package/{esm2020 → esm2022}/index.mjs +0 -0
  23. /package/{esm2020 → esm2022}/model/attribute-choice.entity.mjs +0 -0
  24. /package/{esm2020 → esm2022}/model/attribute-configuration.dto.mjs +0 -0
  25. /package/{esm2020 → esm2022}/model/attribute-configuration.entity.mjs +0 -0
  26. /package/{esm2020 → esm2022}/model/attribute-container.entity.mjs +0 -0
  27. /package/{esm2020 → esm2022}/model/attribute-dictionary.entity.mjs +0 -0
  28. /package/{esm2020 → esm2022}/model/attribute-long-text.entity.mjs +0 -0
  29. /package/{esm2020 → esm2022}/model/attribute-value-grid-row.entity.mjs +0 -0
  30. /package/{esm2020 → esm2022}/model/attribute-value-set.entity.mjs +0 -0
  31. /package/{esm2020 → esm2022}/model/attribute-value.entity.mjs +0 -0
  32. /package/{esm2020 → esm2022}/model/attribute.entity.mjs +0 -0
  33. /package/{esm2020 → esm2022}/model/dictionary-entries.dto.mjs +0 -0
  34. /package/{esm2020 → esm2022}/model/extractable-field-status.entity.mjs +0 -0
  35. /package/{esm2020 → esm2022}/model/graphical-attribute.entity.mjs +0 -0
  36. /package/{esm2020 → esm2022}/model/pre-eval.dto.mjs +0 -0
@@ -536,10 +536,10 @@ export class AttributeBase {
536
536
  }
537
537
  return "";
538
538
  }
539
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AttributeBase, deps: [{ token: i1.AttributeService }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i2.NgbModal }], target: i0.ɵɵFactoryTarget.Directive }); }
540
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: AttributeBase, selector: "hci-attribute-base", inputs: { attribute: "attribute", internalValues: "internalValues", editInline: "editInline", groupAttributeRowId: "groupAttributeRowId" }, outputs: { resortColumns: "resortColumns" }, viewQueries: [{ propertyName: "inputRef", first: true, predicate: ["inputRef"], descendants: true }, { propertyName: "nativeSelectRef", first: true, predicate: ["nativeSelectRef"], descendants: true }], ngImport: i0 }); }
539
541
  }
540
- AttributeBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AttributeBase, deps: [{ token: i1.AttributeService }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i2.NgbModal }], target: i0.ɵɵFactoryTarget.Directive });
541
- AttributeBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: AttributeBase, selector: "hci-attribute-base", inputs: { attribute: "attribute", internalValues: "internalValues", editInline: "editInline", groupAttributeRowId: "groupAttributeRowId" }, outputs: { resortColumns: "resortColumns" }, viewQueries: [{ propertyName: "inputRef", first: true, predicate: ["inputRef"], descendants: true }, { propertyName: "nativeSelectRef", first: true, predicate: ["nativeSelectRef"], descendants: true }], ngImport: i0 });
542
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AttributeBase, decorators: [{
542
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AttributeBase, decorators: [{
543
543
  type: Directive,
544
544
  args: [{
545
545
  selector: "hci-attribute-base"
@@ -561,4 +561,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
561
561
  type: ViewChild,
562
562
  args: ["nativeSelectRef", { static: false }]
563
563
  }] } });
564
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0cmlidXRlLWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb2Qvc3JjL2NvbXBvbmVudHMvYXR0cmlidXRlLWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFVBQVUsRUFBZSxZQUFZLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBMkMsU0FBUyxFQUMxSSxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUE7QUFFeEMsT0FBTyxFQUFtQixZQUFZLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDcEQsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXJDLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBTy9ELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQyxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUN2RSxPQUFPLEVBQUMsUUFBUSxFQUFXLE1BQU0sNEJBQTRCLENBQUM7Ozs7QUFHOUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFLSCxNQUFNLE9BQU8sYUFBYTtJQStDeEIsWUFBWSxnQkFBa0MsRUFBRSxVQUFzQixFQUFFLFFBQW1CLEVBQVUsWUFBc0I7UUFBdEIsaUJBQVksR0FBWixZQUFZLENBQVU7UUE1Q2xILG1CQUFjLEdBQVksS0FBSyxDQUFDO1FBQ2hDLGVBQVUsR0FBWSxJQUFJLENBQUM7UUFDM0Isd0JBQW1CLEdBQVcsU0FBUyxDQUFDO1FBRXZDLGtCQUFhLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFLckUsb0JBQWUsR0FBcUIsRUFBRSxDQUFDO1FBYXZDLFVBQUssR0FBVyxDQUFDLENBQUM7UUFRbEIsZ0JBQVcsR0FBRztZQUNWLFlB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RSxLQUFLLEVBQUM7Z0JBQ1MsZUFBZTtzQkFBN0QsU0FBUzt1QkFBQyxpQkFBaUIsRUFBRSxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEVsZW1lbnRSZWYsIFRlbXBsYXRlUmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBpc0Rldk1vZGUsIE91dHB1dCwgUmVuZGVyZXIyLCBWaWV3Q2hpbGQsIFZpZXdDaGlsZHJlbiwgT25Jbml0LCBPbkRlc3Ryb3ksIEluamVjdCwgRGlyZWN0aXZlLCBRdWVyeUxpc3RcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuaW1wb3J0IHtEYXRlUGlwZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJ1xyXG5cclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJzY3JpcHRpb259IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7Zmlyc3R9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5cclxuaW1wb3J0IHtBdHRyaWJ1dGVTZXJ2aWNlfSBmcm9tIFwiLi4vc2VydmljZXMvYXR0cmlidXRlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtBdHRyaWJ1dGV9IGZyb20gXCIuLi9tb2RlbC9hdHRyaWJ1dGUuZW50aXR5XCI7XHJcbmltcG9ydCB7QXR0cmlidXRlVmFsdWV9IGZyb20gXCIuLi9tb2RlbC9hdHRyaWJ1dGUtdmFsdWUuZW50aXR5XCI7XHJcbmltcG9ydCB7QXR0cmlidXRlQ2hvaWNlfSBmcm9tIFwiLi4vbW9kZWwvYXR0cmlidXRlLWNob2ljZS5lbnRpdHlcIjtcclxuaW1wb3J0IHtBdHRyaWJ1dGVMb25nVGV4dH0gZnJvbSBcIi4uL21vZGVsL2F0dHJpYnV0ZS1sb25nLXRleHQuZW50aXR5XCI7XHJcbmltcG9ydCB7R3JhcGhpY2FsQXR0cmlidXRlfSBmcm9tIFwiLi4vbW9kZWwvZ3JhcGhpY2FsLWF0dHJpYnV0ZS5lbnRpdHlcIjtcclxuaW1wb3J0IHtEaWN0aW9uYXJ5RW50cmllc0RUT30gZnJvbSBcIi4uL21vZGVsL2RpY3Rpb25hcnktZW50cmllcy5kdG9cIjtcclxuaW1wb3J0IHtEYXRlVXRpbH0gZnJvbSBcIi4uL2RhdGUvZGF0ZS11dGlsXCI7XHJcbmltcG9ydCB7TmF0aXZlU2VsZWN0Q29tcG9uZW50fSBmcm9tIFwiQGh1bnRzbWFuLWNhbmNlci1pbnN0aXR1dGUvaW5wdXRcIjtcclxuaW1wb3J0IHtOZ2JNb2RhbCwgTmdiUGFuZWx9IGZyb20gXCJAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcFwiO1xyXG5pbXBvcnQge0dyaWRBcGksIFJvd0RvdWJsZUNsaWNrZWRFdmVudCwgUm93Tm9kZSwgUm93U2VsZWN0ZWRFdmVudCwgQWdHcmlkRXZlbnQsIEdyaWRTaXplQ2hhbmdlZEV2ZW50LCBNb2RlbFVwZGF0ZWRFdmVudH0gZnJvbSBcImFnLWdyaWQtY29tbXVuaXR5XCI7XHJcblxyXG4vKipcclxuICogVGhlIGJhc2UgY2xhc3MgZm9yIGFuIGF0dHJpYnV0ZS4gIEF0dHJpYnV0ZXMgYXJlIGl0ZXJhdGVkIG92ZXIgYnkgY29udGFpbmVyLiAgVGhlc2UgbWF5IGJlIGluIHRyYWRpdGlvbmFsIGFic29sdXRlXHJcbiAqIHBvc2l0aW9uaW5nLCBmbGV4IHBvc2l0aW9uaW5nLCBvciBhbiBlZGl0IG1vZGUgYXMgYSBjb2x1bW4gaW4gYSBtb2RhbC4gIFJlZ2FyZGxlc3Mgb2YgdGhlIHRlbXBsYXRlLCB0aGUgZnVuZGFtZW50YWxcclxuICogbmVlZHMgb2Ygc2V0dGluZyB1cCB0aGUgYXR0cmlidXRlIHZhbHVlcyBhbmQgcGVyc2lzdGluZyBkYXRhIGFyZSB0aGUgc2FtZS4gIFNvIHRoaXMgY2xhc3MgcHJvdmlkZXMgYmFzZSBmdW5jdGlvbmFsaXR5XHJcbiAqIGFuZCB0aGUgY29tcG9uZW50cyB0aGF0IGV4dGVuZCBpdCBwcm92aWRlIHRoZSB0ZW1wbGF0ZSBhbmQgbWF5IGFsc28gZXh0ZW5kIHRoZSBmdW5jdGlvbmFsaXR5LlxyXG4gKlxyXG4gKiBUeXBlczpcclxuICogTElORVxyXG4gKiBOTFBfTElOS1xyXG4gKiBESUNUXHJcbiAqIEdBXHJcbiAqIExBQkVMXHJcbiAqIERUXHJcbiAqIEFDXHJcbiAqIFRYVFxyXG4gKiBEXHJcbiAqIFNcclxuICogSVxyXG4gKiBDQlxyXG4gKiBCXHJcbiAqIE5cclxuICogRUJcclxuICovXHJcbkBEaXJlY3RpdmUoe1xyXG4gICAgc2VsZWN0b3I6IFwiaGNpLWF0dHJpYnV0ZS1iYXNlXCJcclxuICB9XHJcbilcclxuZXhwb3J0IGNsYXNzIEF0dHJpYnV0ZUJhc2UgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcblxyXG4gIEBJbnB1dCgpIGF0dHJpYnV0ZTogR3JhcGhpY2FsQXR0cmlidXRlO1xyXG4gIEBJbnB1dCgpIGludGVybmFsVmFsdWVzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgZWRpdElubGluZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgZ3JvdXBBdHRyaWJ1dGVSb3dJZDogbnVtYmVyID0gdW5kZWZpbmVkO1xyXG5cclxuICBAT3V0cHV0KCkgcmVzb3J0Q29sdW1uczogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgQFZpZXdDaGlsZChcImlucHV0UmVmXCIsIHtzdGF0aWM6IGZhbHNlfSkgaW5wdXRSZWY6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZChcIm5hdGl2ZVNlbGVjdFJlZlwiLCB7c3RhdGljOiBmYWxzZX0pIG5hdGl2ZVNlbGVjdFJlZjogTmF0aXZlU2VsZWN0Q29tcG9uZW50O1xyXG5cclxuICBhdHRyaWJ1dGVWYWx1ZXM6IEF0dHJpYnV0ZVZhbHVlW10gPSBbXTtcclxuICBhdHRyaWJ1dGVDaG9pY2VzOiBBdHRyaWJ1dGVDaG9pY2VbXTtcclxuXHJcbiAgY2hpbGRBdHRyaWJ1dGVzOiBHcmFwaGljYWxBdHRyaWJ1dGVbXTtcclxuICBncmlkRGF0YTogYW55W107XHJcbiAgZ3JpZENvbHVtbnM6IGFueVtdO1xyXG5cclxuICAvL1VzZWQgZm9yIHRoZSBlZGl0IGdyb3VwIHJvdyB0ZW1wbGF0ZVxyXG4gIGVkaXRHcm91cEF0dHJpYnV0ZVJvd0lkOiBudW1iZXI7XHJcbiAgZWRpdEdyb3VwUm93QXR0cmlidXRlczogR3JhcGhpY2FsQXR0cmlidXRlW107XHJcblxyXG4gIGRpY3Rpb25hcnlFbnRyaWVzOiBhbnlbXTtcclxuXHJcbiAgd2lkdGg6IG51bWJlciA9IDA7XHJcblxyXG4gIGF0dHJpYnV0ZVNlcnZpY2U6IEF0dHJpYnV0ZVNlcnZpY2U7XHJcbiAgZWxlbWVudFJlZjogRWxlbWVudFJlZjtcclxuICByZW5kZXJlcjogUmVuZGVyZXIyO1xyXG5cclxuICBncmlkQXBpOiBHcmlkQXBpO1xyXG5cclxuICBncmlkT3B0aW9ucyA9IHtcclxuICAgICAgaGVhZGVySGVpZ2h0OiAyMyxcclxuICAgICAgcm93SGVpZ2h0OiAyMyxcclxuICAgICAgcm93U3R5bGU6IHtcclxuICAgICAgICAgICdmb250LWZhbWlseSc6ICdQcm9tcHQsIHNhbnMtc2VyaWYnLFxyXG4gICAgICAgICAgJ2NvbG9yJzogJyMzZDdhOTknXHJcbiAgICAgIH0sXHJcbiAgICAgIGVuYWJsZUNlbGxUZXh0U2VsZWN0aW9uOiB0cnVlLFxyXG4gICAgICBlbnN1cmVEb21PcmRlcjogdHJ1ZSxcclxuICAgICAgc3VwcHJlc3NDb2x1bW5WaXJ0dWFsaXNhdGlvbjogZmFsc2VcclxuICAgIH07XHJcblxyXG4gIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuXHJcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlU2VydmljZTogQXR0cmlidXRlU2VydmljZSwgZWxlbWVudFJlZjogRWxlbWVudFJlZiwgcmVuZGVyZXI6IFJlbmRlcmVyMiwgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsKSB7XHJcbiAgICB0aGlzLmF0dHJpYnV0ZVNlcnZpY2UgPSBhdHRyaWJ1dGVTZXJ2aWNlO1xyXG4gICAgdGhpcy5lbGVtZW50UmVmID0gZWxlbWVudFJlZjtcclxuICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBhbnkgYXR0cmlidXRlIHZhbHVlcyBmb3IgdGhpcyBhdHRyaWJ1dGUuICBJZiBhIGNvbXBsZXggYXR0cmlidXRlIGxpa2UgYSBncmlkLCBzZXQgaXQgdXAuXHJcbiAgICovXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMuYXR0cmlidXRlU2VydmljZS5nZXRDb250YWluZXJVcGRhdGVkKCkuc3Vic2NyaWJlKCh1cGRhdGVkOiBib29sZWFuKSA9PiB7XHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgb25HcmlkUmVhZHkocGFyYW1zIDogYW55KSB7XHJcbiAgICB0aGlzLmdyaWRBcGkgPSBwYXJhbXMuYXBpO1xyXG4gICAgdGhpcy5ncmlkQXBpLnNpemVDb2x1bW5zVG9GaXQoKTtcclxuICB9XHJcblxyXG4gIG9uTW9kZWxVcGRhdGVkKF9ldmVudDogTW9kZWxVcGRhdGVkRXZlbnQpIHtcclxuICAgIGlmICh0aGlzLmdyaWRBcGkpIHtcclxuICAgICAgdGhpcy5ncmlkQXBpLnNpemVDb2x1bW5zVG9GaXQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uR3JpZFNpemVDaGFuZ2VkKF9ldmVudDogR3JpZFNpemVDaGFuZ2VkRXZlbnQpIHtcclxuICAgIGlmICh0aGlzLmdyaWRBcGkpIHtcclxuICAgICAgdGhpcy5ncmlkQXBpLnNpemVDb2x1bW5zVG9GaXQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFB1bGxzIHRoZSBhdHRyaWJ1dGUgdmFsdWVzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGF0dHJpYnV0ZSBhbmQgcGVyZm9ybXMgYW55IHNwZWNpYWxpemVkIGluaXRpYWxpemF0aW9uIHN1Y2ggYXMgZm9yXHJcbiAgICogdGhlIGdyaWQgb3IgbXVsdGkgY2hvaWNlLlxyXG4gICAqL1xyXG4gIGluaXQoKTogdm9pZCB7XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcIkF0dHJpYnV0ZS5pbml0OiBcIiArIHRoaXMuYXR0cmlidXRlLmlkQXR0cmlidXRlKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmdyaWREYXRhID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5ncmlkQ29sdW1ucyA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuYXR0cmlidXRlQ2hvaWNlcyA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMud2lkdGggPSB0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0V2lkdGgoKTtcclxuXHJcbiAgICBpZiAoIXRoaXMuaW50ZXJuYWxWYWx1ZXMpIHtcclxuICAgICAgdGhpcy5hdHRyaWJ1dGVWYWx1ZXMgPSB0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0QXR0cmlidXRlVmFsdWVzKHRoaXMuYXR0cmlidXRlLmlkQXR0cmlidXRlLCB0aGlzLmdyb3VwQXR0cmlidXRlUm93SWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmF0dHJpYnV0ZVZhbHVlcy5sZW5ndGggPT09IDAgJiYgdGhpcy5hdHRyaWJ1dGUuY29kZUF0dHJpYnV0ZURhdGFUeXBlICE9PSBcIkdBXCIgJiYgdGhpcy5hdHRyaWJ1dGUuaXNNdWx0aVZhbHVlICE9PSBcIllcIikge1xyXG4gICAgICAvLyBUT0RPOiBEZWNpZGUgd2hlbiB0byBwZXJzaXN0IHRoaXMgdG8gZ2V0IHRoZSBpZEF0dHJpYnV0ZVZhbHVlLlxyXG4gICAgICB0aGlzLmF0dHJpYnV0ZVZhbHVlcy5wdXNoKDxBdHRyaWJ1dGVWYWx1ZT57XHJcbiAgICAgICAgY29kZUF0dHJpYnV0ZURhdGFUeXBlOiB0aGlzLmF0dHJpYnV0ZS5jb2RlQXR0cmlidXRlRGF0YVR5cGUsXHJcbiAgICAgICAgaWRBdHRyaWJ1dGVWYWx1ZTogdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLmdldFVuaXF1ZUlkKCksXHJcbiAgICAgICAgaWRBdHRyaWJ1dGU6IHRoaXMuYXR0cmlidXRlLmlkQXR0cmlidXRlLFxyXG4gICAgICAgIGlkR3JvdXBBdHRyaWJ1dGU6IHRoaXMuYXR0cmlidXRlLmlkR3JvdXBBdHRyaWJ1dGUsXHJcbiAgICAgICAgZ3JvdXBBdHRyaWJ1dGVSb3dJZDogdGhpcy5ncm91cEF0dHJpYnV0ZVJvd0lkXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmF0dHJpYnV0ZS5jb2RlQXR0cmlidXRlRGF0YVR5cGUgPT09IFwiR0FcIikge1xyXG4gICAgICB0aGlzLmluaXRpYWxpemVHcmlkKCk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuYXR0cmlidXRlLmNvZGVBdHRyaWJ1dGVEYXRhVHlwZSA9PT0gXCJBQ1wiKSB7XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUF0dHJpYnV0ZUNob2ljZXMoKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5hdHRyaWJ1dGUuY29kZUF0dHJpYnV0ZURhdGFUeXBlID09PSBcIlRYVFwiICYmICF0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXS52YWx1ZUxvbmdUZXh0KSB7XHJcbiAgICAgIHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdLnZhbHVlTG9uZ1RleHQgPSA8QXR0cmlidXRlTG9uZ1RleHQ+e1xyXG4gICAgICAgIGlkTG9uZ1RleHQ6IHVuZGVmaW5lZCxcclxuICAgICAgICB0ZXh0RGF0YTogdW5kZWZpbmVkXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLmF0dHJpYnV0ZS5jb2RlQXR0cmlidXRlRGF0YVR5cGUgPT09IFwiRElDVFwiKSB7XHJcbiAgICAgIHRoaXMubG9hZERpY3Rpb25hcnlFbnRyaWVzKHRoaXMuYXR0cmlidXRlLCB0aGlzLmF0dHJpYnV0ZVZhbHVlcywgdGhpcy5ncm91cEF0dHJpYnV0ZVJvd0lkKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuYXR0cmlidXRlLmNvZGVBdHRyaWJ1dGVEYXRhVHlwZSA9PT0gXCJEVFwiKSB7XHJcbiAgICAgIC8vTWFrZSBhIHByb3BlciBkYXRlIGZvciB0aGUgZGF0ZSB0aW1lIGNvbXBvbmVudFxyXG4gICAgICB0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXS5kYXRlID0gbmV3IERhdGUodGhpcy5hdHRyaWJ1dGVWYWx1ZXNbMF0udmFsdWVEYXRlVGltZSk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcblxyXG4gIGxvYWREaWN0aW9uYXJ5RW50cmllcyhhdHRyaWJ1dGU6IEF0dHJpYnV0ZSwgdmFsdWVzOiBBdHRyaWJ1dGVWYWx1ZVtdLCBncm91cEF0dHJpYnV0ZVJvd0lkOiBudW1iZXIpIHtcclxuICAgIC8vQWRkaW5nIHRoaXMgdG8gc3Vic2NyaXB0aW9ucyBpcyBwcm9iYWJseSB1bm5lY2Vzc2FyeSwgc2luY2UgdGhlIGZpcnN0KCkgd2lsbCB1bnN1YnNjcmliZS4gV2Ugb25seSBnZXQgb25lIHZhbHVlLlxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0RGljdGlvbmFyeUVudHJpZXMoYXR0cmlidXRlLCB2YWx1ZXMsIGdyb3VwQXR0cmlidXRlUm93SWQpLnBpcGUoZmlyc3QoKSkuc3Vic2NyaWJlKChkdG86IERpY3Rpb25hcnlFbnRyaWVzRFRPKSA9PiB7XHJcbiAgICAgIHRoaXMuZGljdGlvbmFyeUVudHJpZXMgPSBkdG8uZW50cmllcztcclxuXHJcbiAgICAgIGlmICh0aGlzLmF0dHJpYnV0ZS5pc011bHRpVmFsdWUgPT09ICdZJykge1xyXG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZU11bHRpRGljdEVudHJpZXMoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy9JZiB0aGVyZSBpcyBhIHJlZmVyZW5jZWQgYXR0cmlidXRlIHRoaXMgbWVhbnMgdGhpcyBhdHRyaWJ1dGUgaXMgZmlsdGVyZWQgYnkgYW5vdGhlciBhdHRyaWJ1dGUuXHJcbiAgICAgIGlmIChkdG8ucmVmZXJlbmNlZEF0dHJpYnV0ZSkge1xyXG4gICAgICAgIC8vTmVlZCB0byBzdWJzY3JpYmUgdG8gYXR0cmlidXRlIHB1c2hlcywgaW4gb3JkZXIgdG8gdXBkYXRlIG91ciBGSUxURVJFRCBESUNUSU9OQVJZIHdoZW4gdGhlIHJlZmVyZW5jZWQgYXR0cmlidXRlIHdhcyBjaGFuZ2VkXHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0QXR0cmlidXRlVmFsdWVQdXNoZWRTdWJqZWN0KCkuc3Vic2NyaWJlKChhdjogQXR0cmlidXRlVmFsdWUpID0+IHtcclxuICAgICAgICAgIC8vSWYgaXQgaXMgdGhlIHJlZmVyZW5jZWQgYXR0cmlidXRlLCAoYW5kIGZvciB0aGUgc2FtZSByb3cgaWYgdGhpcyBpcyBhIGdyaWQgcm93KSB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgZGljdGlvbmFyeSBlbnRyaWVzXHJcbiAgICAgICAgICBpZiAoYXYuaWRBdHRyaWJ1dGUgPT09IGR0by5yZWZlcmVuY2VkQXR0cmlidXRlLmlkQXR0cmlidXRlXHJcbiAgICAgICAgICAgICAgJiYgKChhdi5ncm91cEF0dHJpYnV0ZVJvd0lkID09IG51bGwgJiYgdGhpcy5ncm91cEF0dHJpYnV0ZVJvd0lkID09IG51bGwpIHx8IGF2Lmdyb3VwQXR0cmlidXRlUm93SWQgPT09IHRoaXMuZ3JvdXBBdHRyaWJ1dGVSb3dJZCkpIHtcclxuXHJcbiAgICAgICAgICAgIC8vTWFrZSBhbm90aGVyIGNhbGwgdG8gZ2V0IHRoZSBkaWN0aW9uYXJ5IGVudHJpZXNcclxuICAgICAgICAgICAgLy9Ob3RlIHRoYXQgd2hlbiBwYXNzaW5nIGluIHRoZSByZWZlcmVuY2VBdHRyaWJ1dGVWYWx1ZSwgdGhlIHJlc3VsdGluZyBEVE8gd29uJ3QgY29udGFpbiBhIHJlZmVyZW5jZWRBdHRyaWJ1dGUuIEEgc2Vjb25kIHN1YnNjcmlwdGlvbiB3b24ndCBiZSBjcmVhdGVkLlxyXG4gICAgICAgICAgICB0aGlzLnJlbG9hZEZpbHRlcmVkRGljdGlvbmFyeUVudHJpZXMoYXR0cmlidXRlLCB2YWx1ZXMsIGdyb3VwQXR0cmlidXRlUm93SWQsIGF2KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KSk7XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIHJlbG9hZEZpbHRlcmVkRGljdGlvbmFyeUVudHJpZXMoYXR0cmlidXRlOiBBdHRyaWJ1dGUsIHZhbHVlczogQXR0cmlidXRlVmFsdWVbXSwgZ3JvdXBBdHRyaWJ1dGVSb3dJZDogbnVtYmVyLCByZWZlcmVuY2VkQXR0cmlidXRlVmFsdWU6IEF0dHJpYnV0ZVZhbHVlKSB7XHJcbiAgICAvL0FkZGluZyB0aGlzIHRvIHN1YnNjcmlwdGlvbnMgaXMgcHJvYmFibHkgdW5uZWNlc3NhcnksIHNpbmNlIHRoZSBmaXJzdCgpIHdpbGwgdW5zdWJzY3JpYmUuIFdlIG9ubHkgZ2V0IG9uZSB2YWx1ZS5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLmdldERpY3Rpb25hcnlFbnRyaWVzKGF0dHJpYnV0ZSwgdmFsdWVzLCBncm91cEF0dHJpYnV0ZVJvd0lkLCByZWZlcmVuY2VkQXR0cmlidXRlVmFsdWUpLnBpcGUoZmlyc3QoKSkuc3Vic2NyaWJlKChkdG86IERpY3Rpb25hcnlFbnRyaWVzRFRPKSA9PiB7XHJcbiAgICAgIHRoaXMuZGljdGlvbmFyeUVudHJpZXMgPSBkdG8uZW50cmllcztcclxuXHJcbiAgICAgIC8vTXVsdGlcclxuICAgICAgaWYgKHRoaXMuYXR0cmlidXRlLmlzTXVsdGlWYWx1ZSA9PT0gJ1knKSB7XHJcbiAgICAgICAgdGhpcy5pbml0aWFsaXplTXVsdGlEaWN0RW50cmllcygpO1xyXG5cclxuICAgICAgICAvL1Byb2JhYmx5IG5lZWQgdG8gc2xpY2Ugb3V0IG11bHRpIHZhbHVlcyB0aGF0IGRvbid0IGFwcGx5XHJcbiAgICAgICAgdGhpcy5kZWxldGVGaWx0ZXJlZE91dERpY3Rpb25hcnlWYWx1ZXMoKTtcclxuICAgICAgfVxyXG4gICAgICAvL1NpbmdsZVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICAvL01heWJlIG5lZWQgdG8gY2xlYXIgb3V0IHRoZSB2YWx1ZSBpZiBpdCBubyBsb25nZXIgYXBwbGllc1xyXG4gICAgICAgIGlmICghIGR0by5lbnRyaWVzSW5jbHVkZVNlbGVjdGVkVmFsdWUpIHtcclxuICAgICAgICAgIHRoaXMudmFsdWVEaWN0Q2hhbmdlKHVuZGVmaW5lZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICBkZWxldGVGaWx0ZXJlZE91dERpY3Rpb25hcnlWYWx1ZXMoKSB7XHJcbiAgICAvL0l0ZXJhdGUgZXhpc3RpbmcgdmFsdWVzXHJcbiAgICBmb3IgKGxldCBhdHRyaWJ1dGVWYWx1ZSBvZiB0aGlzLmF0dHJpYnV0ZVZhbHVlcykge1xyXG4gICAgICBsZXQgYXBwbGljYWJsZTpib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgICAvL0RvZXMgaXQgZXhpc3QgaW4gbmV3IGRpY2F0aW9ucnlFbnRyaWVzP1xyXG4gICAgICBmb3IgKGxldCBlbnRyeSBvZiB0aGlzLmRpY3Rpb25hcnlFbnRyaWVzKSB7XHJcbiAgICAgICAgaWYgKGF0dHJpYnV0ZVZhbHVlLnZhbHVlSWREaWN0aW9uYXJ5ICYmIGVudHJ5LnZhbHVlID09PSBhdHRyaWJ1dGVWYWx1ZS52YWx1ZUlkRGljdGlvbmFyeSkge1xyXG4gICAgICAgICAgLy9rZWVwXHJcbiAgICAgICAgICBhcHBsaWNhYmxlID0gdHJ1ZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCEgYXBwbGljYWJsZSkge1xyXG4gICAgICAgIC8vR2V0IHJpZCBvZiB2YWx1ZXMgdGhhdCBubyBsb25nZXIgYXBwbHlcclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZVNlcnZpY2Uuc3BsaWNlQXR0cmlidXRlVmFsdWVEaWN0KHRoaXMuYXR0cmlidXRlLCBhdHRyaWJ1dGVWYWx1ZS52YWx1ZUlkRGljdGlvbmFyeSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW5pdGlhbGl6ZU11bHRpRGljdEVudHJpZXMoKSB7XHJcbiAgICBmb3IgKGxldCBlbnRyeSBvZiB0aGlzLmRpY3Rpb25hcnlFbnRyaWVzKSB7XHJcbiAgICAgIGVudHJ5LmNoZWNrZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgIGZvciAobGV0IGF0dHJpYnV0ZVZhbHVlIG9mIHRoaXMuYXR0cmlidXRlVmFsdWVzKSB7XHJcbiAgICAgICAgaWYgKGF0dHJpYnV0ZVZhbHVlLnZhbHVlSWREaWN0aW9uYXJ5ICYmIGVudHJ5LnZhbHVlID09PSBhdHRyaWJ1dGVWYWx1ZS52YWx1ZUlkRGljdGlvbmFyeSkge1xyXG4gICAgICAgICAgZW50cnkuY2hlY2tlZCA9IHRydWU7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCBhIHRyYW5zaWVudCB2YWx1ZSBvbiB0aGUgYXR0cmlidXRlQ2hvaWNlIHRvIGtlZXAgdHJhY2sgb2Ygc2VsZWN0ZWQgdmFsdWVzLlxyXG4gICAqL1xyXG4gIGluaXRpYWxpemVBdHRyaWJ1dGVDaG9pY2VzKCkge1xyXG4gICAgdGhpcy5hdHRyaWJ1dGVDaG9pY2VzID0gdGhpcy5hdHRyaWJ1dGUuYXR0cmlidXRlQ2hvaWNlcy5zbGljZSgpO1xyXG5cclxuICAgIGZvciAobGV0IGF0dHJpYnV0ZUNob2ljZSBvZiB0aGlzLmF0dHJpYnV0ZUNob2ljZXMpIHtcclxuICAgICAgYXR0cmlidXRlQ2hvaWNlLnZhbHVlID0gZmFsc2U7XHJcblxyXG4gICAgICBmb3IgKGxldCBhdHRyaWJ1dGVWYWx1ZSBvZiB0aGlzLmF0dHJpYnV0ZVZhbHVlcykge1xyXG4gICAgICAgIGlmIChhdHRyaWJ1dGVWYWx1ZS52YWx1ZUF0dHJpYnV0ZUNob2ljZSAmJiBhdHRyaWJ1dGVDaG9pY2UuaWRBdHRyaWJ1dGVDaG9pY2UgPT09IGF0dHJpYnV0ZVZhbHVlLnZhbHVlQXR0cmlidXRlQ2hvaWNlLmlkQXR0cmlidXRlQ2hvaWNlKSB7XHJcbiAgICAgICAgICBhdHRyaWJ1dGVDaG9pY2UudmFsdWUgPSB0cnVlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJZiB0aGUgYXR0cmlidXRlIGlzIGEgZ3JpZCwgZmluZCBpdHMgY2hpbGRyZW4gYXR0cmlidXRlcyB3aGljaCBtYWtlIHVwIHRoZSBjb2x1bW5zIGFuZCBnZW5lcmF0ZSBkYXRhIGJhc2VkIG9uIGFsbFxyXG4gICAqIHRoZSBhdHRyaWJ1dGUgdmFsdWVzIGJ5IHRoZWlyIGdyb3VwQXR0cmlidXRlUm93SWQuXHJcbiAgICovXHJcbiAgaW5pdGlhbGl6ZUdyaWQoKTogdm9pZCB7XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcIkF0dHJpYnV0ZUNvbXBvbmVudC5pbml0aWFsaXplR3JpZFwiKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgY29sdW1uczogYW55W10gPSBbXTtcclxuICAgIGxldCBkYXRhOiBhbnlbXSA9IFtdO1xyXG5cclxuICAgIGlmICghdGhpcy5hdHRyaWJ1dGUuYXR0cmlidXRlcykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jaGlsZEF0dHJpYnV0ZXMgPSA8R3JhcGhpY2FsQXR0cmlidXRlW10+dGhpcy5hdHRyaWJ1dGUuYXR0cmlidXRlcy5maWx0ZXIoKGF0dHJpYnV0ZTogR3JhcGhpY2FsQXR0cmlidXRlKSA9PiB7XHJcbiAgICAgIHJldHVybiBhdHRyaWJ1dGVbXCJ0YWJPcmRlclwiXSAhPT0gdW5kZWZpbmVkIHx8IGF0dHJpYnV0ZVtcIndcIl0gIT09IHVuZGVmaW5lZDtcclxuICAgIH0pLnNvcnQoKGE6IEdyYXBoaWNhbEF0dHJpYnV0ZSwgYjogR3JhcGhpY2FsQXR0cmlidXRlKSA9PiB7XHJcbiAgICAgIGlmIChhLnRhYk9yZGVyIDwgYi50YWJPcmRlcikge1xyXG4gICAgICAgIHJldHVybiAtMTtcclxuICAgICAgfSBlbHNlIGlmIChhLnRhYk9yZGVyID4gYi50YWJPcmRlcikge1xyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcIkF0dHJpYnV0ZUNvbXBvbmVudC5pbml0aWFsaXplR3JpZDogbiBHcmlkIEF0dHJpYnV0ZXM6IFwiICsgdGhpcy5jaGlsZEF0dHJpYnV0ZXMubGVuZ3RoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXRpYWxpemVHcmlkQ29sdW1ucyh0aGlzLmNoaWxkQXR0cmlidXRlcywgY29sdW1ucyk7XHJcblxyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJBdHRyaWJ1dGVDb21wb25lbnQuaW5pdGlhbGl6ZUdyaWQ6IG4gQ29sdW1uczogXCIgKyBjb2x1bW5zLmxlbmd0aCk7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoY29sdW1ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJBdHRyaWJ1dGVDb21wb25lbnQuaW5pdGlhbGl6ZUdyaWQ6IG4gYXR0cmlidXRlVmFsdWVzOiBcIiArIHRoaXMuYXR0cmlidXRlVmFsdWVzLmxlbmd0aCk7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcodGhpcy5hdHRyaWJ1dGVWYWx1ZXMpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBsZXQgc29ydGVkUm93VmFsdWVzID0gdGhpcy5hdHRyaWJ1dGVWYWx1ZXMuZmlsdGVyKChhdHRyaWJ1dGVWYWx1ZSkgPT4gYXR0cmlidXRlVmFsdWUuaWRHcm91cEF0dHJpYnV0ZSA9IHRoaXMuYXR0cmlidXRlLmlkQXR0cmlidXRlKVxyXG4gICAgICAuc29ydCgoYTogQXR0cmlidXRlVmFsdWUsIGI6IEF0dHJpYnV0ZVZhbHVlKSA9PiB7XHJcbiAgICAgIGlmIChhLmdyb3VwQXR0cmlidXRlUm93SWQgPCBiLmdyb3VwQXR0cmlidXRlUm93SWQpIHtcclxuICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgIH0gZWxzZSBpZiAoYS5ncm91cEF0dHJpYnV0ZVJvd0lkID4gYi5ncm91cEF0dHJpYnV0ZVJvd0lkKSB7XHJcbiAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGxldCBuOiBudW1iZXIgPSAwO1xyXG4gICAgZm9yIChsZXQgZGF0dW0gb2Ygc29ydGVkUm93VmFsdWVzKSB7XHJcbiAgICAgIGlmIChkYXR1bS5ncm91cEF0dHJpYnV0ZVJvd0lkID4gbikge1xyXG4gICAgICAgIG4gPSBkYXR1bS5ncm91cEF0dHJpYnV0ZVJvd0lkO1xyXG4gICAgICAgIGRhdGEucHVzaCh7XHJcbiAgICAgICAgICBncm91cEF0dHJpYnV0ZVJvd0lkOiBkYXR1bS5ncm91cEF0dHJpYnV0ZVJvd0lkXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcIkF0dHJpYnV0ZUNvbXBvbmVudC5pbml0aWFsaXplR3JpZDogbiBEYXRhOiBcIiArIGRhdGEubGVuZ3RoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXRpYWxpemVHcmlkVmFsdWVzKGRhdGEsIHNvcnRlZFJvd1ZhbHVlcyk7XHJcblxyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJBdHRyaWJ1dGVDb21wb25lbnQuaW5pdGlhbGl6ZUdyaWQ6IERhdGFcIik7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5ncmlkQ29sdW1ucyA9IGNvbHVtbnM7XHJcbiAgICB0aGlzLmdyaWREYXRhID0gZGF0YTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdlbmVyYXRlIGEgY29sdW1uIGFycmF5IGJhc2VkIG9uIHRoZSBncm91cGVkIGF0dHJpYnV0ZXMgd2l0aGluIHRoZSBncmlkLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtBdHRyaWJ1dGVbXX0gYXR0cmlidXRlc1xyXG4gICAqIEBwYXJhbSB7YW55W119IGNvbHVtbnNcclxuICAgKi9cclxuICBpbml0aWFsaXplR3JpZENvbHVtbnMoYXR0cmlidXRlczogR3JhcGhpY2FsQXR0cmlidXRlW10sIGNvbHVtbnM6IGFueVtdKSB7XHJcblxyXG4gICAgLypcclxuICAgIGNvbHVtbnMucHVzaCh7XHJcbiAgICAgIGZpZWxkOiBcImdyb3VwQXR0cmlidXRlUm93SWRcIiwgaXNLZXk6IHRydWUsIHZpc2libGU6IGZhbHNlXHJcbiAgICB9KTsqL1xyXG5cclxuICAgIGZvciAoY29uc3QgW2ksIGF0dHJpYnV0ZV0gb2YgYXR0cmlidXRlcy5lbnRyaWVzKCkpIHtcclxuICAgICAgbGV0IGNvbHVtbjogYW55ID0ge1xyXG4gICAgICAgIGZpZWxkOiBhdHRyaWJ1dGUuYXR0cmlidXRlTmFtZSxcclxuICAgICAgICBoZWFkZXJOYW1lOiBhdHRyaWJ1dGUuZGlzcGxheU5hbWUsXHJcbiAgICAgICAgZWRpdGFibGU6IGZhbHNlLFxyXG4gICAgICAgIHNvcnRhYmxlOiB0cnVlLFxyXG4gICAgICAgIHJlc2l6YWJsZTogdHJ1ZSxcclxuICAgICAgICBmaWx0ZXI6IGZhbHNlLFxyXG4gICAgICAgIHdpZHRoOiBhdHRyaWJ1dGUudyxcclxuICAgICAgfTtcclxuXHJcbiAgICAgIC8vIHRoZSBsYXN0IGNvbHVtbiBzaG91bGQgYXV0byBmaWxsIHRoZSByZW1haW5pbmcgc3BhY2VcclxuICAgICAgaWYgKGF0dHJpYnV0ZS53ICYmIGkgPCBhdHRyaWJ1dGVzLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICBjb2x1bW4uc3VwcHJlc3NTaXplVG9GaXQgPSB0cnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoYXR0cmlidXRlLmNvZGVBdHRyaWJ1dGVEYXRhVHlwZSA9PT0gXCJEXCIpIHtcclxuICAgICAgICBjb2x1bW4uY29tcGFyYXRvciA9IERhdGVVdGlsLmRhdGVDb21wYXJhdG9yO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKGF0dHJpYnV0ZS5jb2RlQXR0cmlidXRlRGF0YVR5cGUgPT09IFwiRFRcIikge1xyXG4gICAgICAgIGNvbHVtbi5jb21wYXJhdG9yID0gRGF0ZVV0aWwuZGF0ZVRpbWVDb21wYXJhdG9yO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb2x1bW5zLnB1c2goY29sdW1uKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFmdGVyIHRoZSBjb2x1bW5zIGFyZSBjcmVhdGVkLCBhc3NpZ25lZFxyXG4gICAqXHJcbiAgICogQHBhcmFtIHthbnlbXX0gZGF0YVxyXG4gICAqL1xyXG4gIGluaXRpYWxpemVHcmlkVmFsdWVzKGRhdGE6IGFueVtdLCBhdHRyaWJ1dGVWYWx1ZXM6IEF0dHJpYnV0ZVZhbHVlW10pOiB2b2lkIHtcclxuICAgIGZvciAobGV0IGRhdHVtIG9mIGF0dHJpYnV0ZVZhbHVlcykge1xyXG4gICAgICBsZXQgYXR0cmlidXRlOiBBdHRyaWJ1dGUgPSB0aGlzLmNoaWxkQXR0cmlidXRlcy5maWx0ZXIoKGF0dHJpYnV0ZTogQXR0cmlidXRlKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZS5pZEF0dHJpYnV0ZSA9PT0gZGF0dW0uaWRBdHRyaWJ1dGU7XHJcbiAgICAgIH0pWzBdO1xyXG5cclxuICAgICAgLy9NYWtlIGEgcm93VmFsdWUgb2JqZWN0IHdpdGggdmFsdWVzIGZvciBlYWNoIGF0dHJpYnV0ZSBvZiB0aGUgcm93XHJcbiAgICAgIGxldCByb3dWYWx1ZTogYW55ID0gZGF0YS5maW5kKChyb3cpID0+IHJvdy5ncm91cEF0dHJpYnV0ZVJvd0lkID09PSBkYXR1bS5ncm91cEF0dHJpYnV0ZVJvd0lkKTtcclxuICAgICAgaWYgKCEgcm93VmFsdWUpIHtcclxuICAgICAgICByb3dWYWx1ZSA9IHtncm91cEF0dHJpYnV0ZVJvd0lkOiBkYXR1bS5ncm91cEF0dHJpYnV0ZVJvd0lkfTtcclxuICAgICAgICBkYXRhLnB1c2gocm93VmFsdWUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIWF0dHJpYnV0ZSkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJBdHRyaWJ1dGUuaW5pdGlhbGl6ZUdyaWQ6IGlkQXR0cmlidXRlIFwiICsgZGF0dW0uaWRBdHRyaWJ1dGUgKyBcIiBub3QgZm91bmQuXCIpO1xyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoYXR0cmlidXRlLmNvZGVBdHRyaWJ1dGVEYXRhVHlwZSA9PT0gXCJEVFwiKSB7XHJcbiAgICAgICAgcm93VmFsdWVbYXR0cmlidXRlLmF0dHJpYnV0ZU5hbWVdID0gbmV3IERhdGVQaXBlKFwiZW4tVVNcIikudHJhbnNmb3JtKG5ldyBEYXRlKGRhdHVtLnZhbHVlRGF0ZVRpbWUpLCBcIk0vZC95eSwgaDptbTpzcyBhXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKGF0dHJpYnV0ZS5jb2RlQXR0cmlidXRlRGF0YVR5cGUgPT09IFwiQUNcIiAmJiBhdHRyaWJ1dGUuaXNNdWx0aVZhbHVlID09PSBcIk5cIikge1xyXG4gICAgICAgIGlmIChkYXR1bS52YWx1ZUF0dHJpYnV0ZUNob2ljZSkge1xyXG4gICAgICAgICAgcm93VmFsdWVbYXR0cmlidXRlLmF0dHJpYnV0ZU5hbWVdID0gZGF0dW0udmFsdWVBdHRyaWJ1dGVDaG9pY2UuY2hvaWNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChhdHRyaWJ1dGUuY29kZUF0dHJpYnV0ZURhdGFUeXBlID09PSBcIkFDXCIgJiYgYXR0cmlidXRlLmlzTXVsdGlWYWx1ZSA9PT0gXCJZXCIpIHtcclxuICAgICAgICAvL0NvbmNhdGVuYXRlZCBkaXNwbGF5XHJcbiAgICAgICAgaWYgKHJvd1ZhbHVlW2F0dHJpYnV0ZS5hdHRyaWJ1dGVOYW1lXSkge1xyXG4gICAgICAgICAgcm93VmFsdWVbYXR0cmlidXRlLmF0dHJpYnV0ZU5hbWVdID0gcm93VmFsdWVbYXR0cmlidXRlLmF0dHJpYnV0ZU5hbWVdICsgXCIsIFwiICsgZGF0dW0udmFsdWVBdHRyaWJ1dGVDaG9pY2UuY2hvaWNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByb3dWYWx1ZVthdHRyaWJ1dGUuYXR0cmlidXRlTmFtZV0gPSBkYXR1bS52YWx1ZUF0dHJpYnV0ZUNob2ljZS5jaG9pY2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKGF0dHJpYnV0ZS5jb2RlQXR0cmlidXRlRGF0YVR5cGUgPT09IFwiRElDVFwiKSB7XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0RGljdGlvbmFyeUVudHJpZXMoYXR0cmlidXRlLCBhdHRyaWJ1dGVWYWx1ZXMsIGRhdHVtLmdyb3VwQXR0cmlidXRlUm93SWQpLnBpcGUoZmlyc3QoKSkuc3Vic2NyaWJlKChkdG86IERpY3Rpb25hcnlFbnRyaWVzRFRPKSA9PiB7XHJcbiAgICAgICAgICBsZXQgZW50cnkgPSBkdG8uZW50cmllcy5maW5kKChlbnRyeTphbnkpID0+IGVudHJ5LnZhbHVlID09PSBkYXR1bS52YWx1ZUlkRGljdGlvbmFyeSk7XHJcblxyXG4gICAgICAgICAgaWYgKGVudHJ5KSB7XHJcbiAgICAgICAgICAgIHJvd1ZhbHVlW2F0dHJpYnV0ZS5hdHRyaWJ1dGVOYW1lXSA9IGR0by5lbnRyaWVzLmZpbmQoKGVudHJ5OmFueSkgPT4gZW50cnkudmFsdWUgPT09IGRhdHVtLnZhbHVlSWREaWN0aW9uYXJ5KS5kaXNwbGF5O1xyXG4gICAgICAgICAgICBpZiAodGhpcy5ncmlkQXBpKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5ncmlkQXBpLnJlZnJlc2hDZWxscygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSkpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKGF0dHJpYnV0ZS5jb2RlQXR0cmlidXRlRGF0YVR5cGUgPT09IFwiU1wiIHx8IGF0dHJpYnV0ZS5jb2RlQXR0cmlidXRlRGF0YVR5cGUgPT09IFwiQlwiIHx8IGF0dHJpYnV0ZS5jb2RlQXR0cmlidXRlRGF0YVR5cGUgPT09IFwiRUJcIiB8fCBhdHRyaWJ1dGUuY29kZUF0dHJpYnV0ZURhdGFUeXBlID09PSBcIkNCXCIpIHtcclxuICAgICAgICByb3dWYWx1ZVthdHRyaWJ1dGUuYXR0cmlidXRlTmFtZV0gPSBkYXR1bS52YWx1ZVN0cmluZztcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICByb3dWYWx1ZVthdHRyaWJ1dGUuYXR0cmlidXRlTmFtZV0gPSBkYXR1bS52YWx1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRm9yIG92ZXJyaWRlLlxyXG4gICAqL1xyXG4gIHJlZnJlc2goKTogdm9pZCB7XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcIkF0dHJpYnV0ZS5yZWZyZXNoOiBcIiArIHRoaXMuYXR0cmlidXRlLmlkQXR0cmlidXRlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuXHJcbiAgdmFsdWVTdHJpbmdDaGFuZ2UodmFsdWU6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKHZhbHVlID09PSBcIlwiKSB7XHJcbiAgICAgIHZhbHVlID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdLnZhbHVlU3RyaW5nID0gdmFsdWU7XHJcbiAgICB0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXS52YWx1ZSA9IHZhbHVlO1xyXG5cclxuICAgIHRoaXMuYXR0cmlidXRlU2VydmljZS5wdXNoQXR0cmlidXRlVmFsdWUodGhpcy5hdHRyaWJ1dGVWYWx1ZXNbMF0pO1xyXG4gIH1cclxuXHJcbiAgdmFsdWVDaGVja2JveENoYW5nZShldmVudDogYW55KSB7XHJcbiAgICBpZiAoZXZlbnQudGFyZ2V0LmNoZWNrZWQpIHtcclxuICAgICAgdGhpcy5hdHRyaWJ1dGVWYWx1ZXNbMF0udmFsdWVTdHJpbmcgPSBcIllcIjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXS52YWx1ZVN0cmluZyA9IFwiTlwiO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hdHRyaWJ1dGVWYWx1ZXNbMF0udmFsdWUgPSB0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXS52YWx1ZVN0cmluZztcclxuXHJcbiAgICB0aGlzLmF0dHJpYnV0ZVNlcnZpY2UucHVzaEF0dHJpYnV0ZVZhbHVlKHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdKTtcclxuICB9XHJcblxyXG4gIHZhbHVlSW50ZWdlckNoYW5nZSh2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXS52YWx1ZUludGVnZXIgPSB2YWx1ZTtcclxuICAgIHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdLnZhbHVlID0gKHZhbHVlKT92YWx1ZS50b1N0cmluZygpOnVuZGVmaW5lZDtcclxuXHJcbiAgICB0aGlzLmF0dHJpYnV0ZVNlcnZpY2UucHVzaEF0dHJpYnV0ZVZhbHVlKHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdKTtcclxuICB9XHJcblxyXG4gIHZhbHVlTnVtZXJpY0NoYW5nZSh2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXS52YWx1ZU51bWVyaWMgPSB2YWx1ZTtcclxuICAgIHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdLnZhbHVlID0gKHZhbHVlKT92YWx1ZS50b1N0cmluZygpOnVuZGVmaW5lZDtcclxuXHJcbiAgICB0aGlzLmF0dHJpYnV0ZVNlcnZpY2UucHVzaEF0dHJpYnV0ZVZhbHVlKHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdKTtcclxuICB9XHJcblxyXG4gIHZhbHVlRGljdENoYW5nZSh2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXS52YWx1ZUlkRGljdGlvbmFyeSA9IHZhbHVlO1xyXG4gICAgdGhpcy5hdHRyaWJ1dGVWYWx1ZXNbMF0udmFsdWUgPSAodmFsdWUpP3ZhbHVlLnRvU3RyaW5nKCk6dW5kZWZpbmVkO1xyXG5cclxuICAgIHRoaXMuYXR0cmlidXRlU2VydmljZS5wdXNoQXR0cmlidXRlVmFsdWUodGhpcy5hdHRyaWJ1dGVWYWx1ZXNbMF0pO1xyXG4gIH1cclxuXHJcbiAgdmFsdWVEYXRlQ2hhbmdlKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdLnZhbHVlRGF0ZVRpbWUgPSB2YWx1ZTtcclxuICAgIHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdLnZhbHVlID0gKHZhbHVlKT92YWx1ZS50b1N0cmluZygpOnVuZGVmaW5lZDtcclxuXHJcbiAgICB0aGlzLmF0dHJpYnV0ZVNlcnZpY2UucHVzaEF0dHJpYnV0ZVZhbHVlKHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdKTtcclxuICB9XHJcblxyXG4gIHZhbHVlVGV4dENoYW5nZSh2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5hdHRyaWJ1dGVWYWx1ZXNbMF0udmFsdWVMb25nVGV4dCkge1xyXG4gICAgICB0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXS52YWx1ZUxvbmdUZXh0LnRleHREYXRhID0gdmFsdWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXS52YWx1ZUxvbmdUZXh0ID0gPEF0dHJpYnV0ZUxvbmdUZXh0PntcclxuICAgICAgICBpZExvbmdUZXh0OiB1bmRlZmluZWQsXHJcbiAgICAgICAgdGV4dERhdGE6IHZhbHVlXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICB0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXS52YWx1ZSA9ICh2YWx1ZSk/dmFsdWUudG9TdHJpbmcoKTp1bmRlZmluZWQ7XHJcblxyXG4gICAgdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnB1c2hBdHRyaWJ1dGVWYWx1ZSh0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXSk7XHJcbiAgfVxyXG5cclxuICB2YWx1ZUNob2ljZUNoYW5nZSh2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXS52YWx1ZUF0dHJpYnV0ZUNob2ljZSA9IHRoaXMuYXR0cmlidXRlQ2hvaWNlcy5maW5kKChhdHRyKSA9PiBhdHRyLmlkQXR0cmlidXRlQ2hvaWNlID09PSB2YWx1ZSk7XHJcbiAgICB0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXS52YWx1ZSA9ICh2YWx1ZSk/dmFsdWUudG9TdHJpbmcoKTp1bmRlZmluZWQ7XHJcblxyXG4gICAgdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnB1c2hBdHRyaWJ1dGVWYWx1ZSh0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXSk7XHJcbiAgfVxyXG5cclxuICB2YWx1ZU11bHRpQ2hvaWNlQ2hhbmdlKGF0dHJpYnV0ZUNob2ljZTogYW55KTogdm9pZCB7XHJcbiAgICBhdHRyaWJ1dGVDaG9pY2UudmFsdWUgPSAhYXR0cmlidXRlQ2hvaWNlLnZhbHVlO1xyXG5cclxuICAgIC8vUmVtb3ZlXHJcbiAgICBpZiAoIWF0dHJpYnV0ZUNob2ljZS52YWx1ZSkge1xyXG4gICAgICB0aGlzLmF0dHJpYnV0ZVNlcnZpY2Uuc3BsaWNlQXR0cmlidXRlVmFsdWVDaG9pY2UodGhpcy5hdHRyaWJ1dGUsIGF0dHJpYnV0ZUNob2ljZSk7XHJcbiAgICB9XHJcbiAgICAvL0FkZFxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuYXR0cmlidXRlVmFsdWVzLnB1c2goPEF0dHJpYnV0ZVZhbHVlPntcclxuICAgICAgICBjb2RlQXR0cmlidXRlRGF0YVR5cGU6IFwiQUNcIixcclxuICAgICAgICBpZEF0dHJpYnV0ZVZhbHVlOiB0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0VW5pcXVlSWQoKSxcclxuICAgICAgICBpZEF0dHJpYnV0ZVZhbHVlU2V0OiB0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0QXR0cmlidXRlVmFsdWVTZXQoKS5nZXRWYWx1ZSgpLmlkQXR0cmlidXRlVmFsdWVTZXQsXHJcbiAgICAgICAgaWRBdHRyaWJ1dGU6IHRoaXMuYXR0cmlidXRlLmlkQXR0cmlidXRlLFxyXG4gICAgICAgIHZhbHVlQXR0cmlidXRlQ2hvaWNlOiBhdHRyaWJ1dGVDaG9pY2UsXHJcbiAgICAgICAgZ3JvdXBBdHRyaWJ1dGVSb3dJZDogdGhpcy5ncm91cEF0dHJpYnV0ZVJvd0lkLFxyXG4gICAgICAgIGlkR3JvdXBBdHRyaWJ1dGU6IHRoaXMuYXR0cmlidXRlLmlkR3JvdXBBdHRyaWJ1dGVcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLmF0dHJpYnV0ZVNlcnZpY2UucHVzaEF0dHJpYnV0ZVZhbHVlTXVsdGlDaG9pY2UodGhpcy5hdHRyaWJ1dGVWYWx1ZXNbdGhpcy5hdHRyaWJ1dGVWYWx1ZXMubGVuZ3RoIC0gMV0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdmFsdWVNdWx0aURpY3RDaGFuZ2UoZW50cnk6IGFueSk6IHZvaWQge1xyXG4gICAgZW50cnkuY2hlY2tlZCA9ICFlbnRyeS5jaGVja2VkO1xyXG5cclxuICAgIC8vUmVtb3ZlXHJcbiAgICBpZiAoIWVudHJ5LmNoZWNrZWQpIHtcclxuICAgICAgdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnNwbGljZUF0dHJpYnV0ZVZhbHVlRGljdCh0aGlzLmF0dHJpYnV0ZSwgZW50cnkudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgLy9BZGRcclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmF0dHJpYnV0ZVZhbHVlcy5wdXNoKDxBdHRyaWJ1dGVWYWx1ZT57XHJcbiAgICAgICAgY29kZUF0dHJpYnV0ZURhdGFUeXBlOiBcIkRJQ1RcIixcclxuICAgICAgICBpZEF0dHJpYnV0ZVZhbHVlOiB0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0VW5pcXVlSWQoKSxcclxuICAgICAgICBpZEF0dHJpYnV0ZVZhbHVlU2V0OiB0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0QXR0cmlidXRlVmFsdWVTZXQoKS5nZXRWYWx1ZSgpLmlkQXR0cmlidXRlVmFsdWVTZXQsXHJcbiAgICAgICAgaWRBdHRyaWJ1dGU6IHRoaXMuYXR0cmlidXRlLmlkQXR0cmlidXRlLFxyXG4gICAgICAgIHZhbHVlSWREaWN0aW9uYXJ5OiBlbnRyeS52YWx1ZSxcclxuICAgICAgICBncm91cEF0dHJpYnV0ZVJvd0lkOiB0aGlzLmdyb3VwQXR0cmlidXRlUm93SWQsXHJcbiAgICAgICAgaWRHcm91cEF0dHJpYnV0ZTogdGhpcy5hdHRyaWJ1dGUuaWRHcm91cEF0dHJpYnV0ZVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuYXR0cmlidXRlU2VydmljZS5wdXNoQXR0cmlidXRlVmFsdWVNdWx0aURpY3QodGhpcy5hdHRyaWJ1dGVWYWx1ZXNbdGhpcy5hdHRyaWJ1dGVWYWx1ZXMubGVuZ3RoIC0gMV0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIGFkZEdyaWRSb3cobW9kYWw6IFRlbXBsYXRlUmVmPGFueT4sIGlkR3JvdXBBdHRyaWJ1dGU6IG51bWJlcikge1xyXG4gICAgY29uc29sZS5sb2coXCJhZGQgZ3JpZCByb3c6IFwiICsgaWRHcm91cEF0dHJpYnV0ZSk7XHJcblxyXG4gICAgLy9HZXQgYSBuZWdhdGl2ZSBJRCwgc28gd2Uga25vdyB0aGlzIGlzIGEgbmV3IHJvd1xyXG4gICAgdGhpcy5lZGl0R3JvdXBBdHRyaWJ1dGVSb3dJZCA9IHRoaXMuYXR0cmlidXRlU2VydmljZS5nZXRVbmlxdWVJZCgpO1xyXG4gICAgdGhpcy5lZGl0R3JvdXBSb3dBdHRyaWJ1dGVzID0gdGhpcy5jaGlsZEF0dHJpYnV0ZXM7XHJcblxyXG5cclxuICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4obW9kYWwsIHt3aW5kb3dDbGFzczogXCJtb2RhbC1sZ1wifSkucmVzdWx0LnRoZW4oKHJlc3VsdCkgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0ID09PSBcIlNhdmVcIikge1xyXG4gICAgICAgIHRoaXMuc2F2ZUdyaWRSb3coaWRHcm91cEF0dHJpYnV0ZSk7XHJcbiAgICAgIH0gZWxzZSBpZiAocmVzdWx0ID09PSBcIkNhbmNlbFwiKSB7XHJcbiAgICAgICAgdGhpcy5jYW5jZWxFZGl0Q29kR3JpZFJvdygpO1xyXG4gICAgICB9XHJcbiAgICB9LCAocmVhc29uKSA9PiB7fSk7XHJcbiAgfVxyXG5cclxuICBlZGl0R3JpZFJvdyhtb2RhbDogVGVtcGxhdGVSZWY8YW55PiwgaWRHcm91cEF0dHJpYnV0ZTogbnVtYmVyLCBldmVudDogUm93RG91YmxlQ2xpY2tlZEV2ZW50KSB7XHJcbiAgICAvL0VkaXRJbmxpbmUgaXMgYWN0dWFsbHkgdGhlIE9OTFkgd2F5IHRoaXMgY2FuIGJlIGVkaXRhYmxlLCBzbyB0aGlzIGlzIHJlYWxseSB3aGV0aGVyIHRoZSBncmlkIGlzIGVkaXRhYmxlLCBhdCBhbGxcclxuICAgIGlmICh0aGlzLmVkaXRJbmxpbmUpIHtcclxuICAgICAgdGhpcy5lZGl0R3JvdXBBdHRyaWJ1dGVSb3dJZCA9IGV2ZW50LmRhdGEuZ3JvdXBBdHRyaWJ1dGVSb3dJZDtcclxuICAgICAgdGhpcy5lZGl0R3JvdXBSb3dBdHRyaWJ1dGVzID0gdGhpcy5jaGlsZEF0dHJpYnV0ZXM7XHJcblxyXG5cclxuICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3Blbihtb2RhbCwge3dpbmRvd0NsYXNzOiBcIm1vZGFsLWxnXCJ9KS5yZXN1bHQudGhlbigocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gXCJTYXZlXCIpIHtcclxuICAgICAgICAgIHRoaXMuc2F2ZUdyaWRSb3coaWRHcm91cEF0dHJpYnV0ZSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQgPT09IFwiQ2FuY2VsXCIpIHtcclxuICAgICAgICAgIHRoaXMuY2FuY2VsRWRpdENvZEdyaWRSb3coKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sIChyZWFzb24pID0+IHt9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlbW92ZUdyaWRSb3coaWRHcm91cEF0dHJpYnV0ZTogbnVtYmVyKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcInJlbW92ZSBncmlkIHJvdzogXCIgKyBpZEdyb3VwQXR0cmlidXRlKTtcclxuICAgIGxldCBzZWxlY3RlZENvbHVtbnM6IFJvd05vZGVbXSA9IHRoaXMuZ3JpZEFwaS5nZXRTZWxlY3RlZE5vZGVzKCk7XHJcblxyXG4gICAgaWYgKHNlbGVjdGVkQ29sdW1ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuYXR0cmlidXRlU2VydmljZS5kZWxldGVHcmlkUm93QXR0cmlidXRlVmFsdWVzKGlkR3JvdXBBdHRyaWJ1dGUsIHNlbGVjdGVkQ29sdW1uc1swXS5kYXRhLmdyb3VwQXR0cmlidXRlUm93SWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2FuY2VsRWRpdENvZEdyaWRSb3coKSB7XHJcbiAgICB0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuY2xlYXJVcGRhdGVkR3JpZFJvd0F0dHJpYnV0ZVZhbHVlcyh0aGlzLmVkaXRHcm91cEF0dHJpYnV0ZVJvd0lkKTtcclxuICAgIHRoaXMuZWRpdEdyb3VwUm93QXR0cmlidXRlcyA9IFtdO1xyXG4gICAgdGhpcy5lZGl0R3JvdXBBdHRyaWJ1dGVSb3dJZCA9IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBWYWx1ZXMgZm9yIGEgbmV3IGdyaWQgcm93IGFyZSBzdG9yZWQgc2VwYXJhdGVseS4gIFRoaXMgZnVuY3Rpb24gd2lsbCBhZGQgdGhhdCBkYXRhIHRvIHRoZSBjdXJyZW50IGdyaWQgZGF0YSBhbmRcclxuICAgKiBwdXNoIHRoZSB2YWx1ZXMgdG8gdGhlIHNlcnZpY2UuXHJcbiAgICovXHJcbiAgc2F2ZUdyaWRSb3coaWRHcm91cEF0dHJpYnV0ZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBjb25zb2xlLmxvZyhcInNhdmUgZ3JpZCByb3dcIik7XHJcblxyXG4gICAgdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnNhdmVHcmlkUm93QXR0cmlidXRlVmFsdWVzKGlkR3JvdXBBdHRyaWJ1dGUsIHRoaXMuZWRpdEdyb3VwQXR0cmlidXRlUm93SWQpO1xyXG5cclxuICAgIHRoaXMuZWRpdEdyb3VwQXR0cmlidXRlUm93SWQgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLmVkaXRHcm91cFJvd0F0dHJpYnV0ZXMgPSBbXTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29tYm9GaWx0ZXJWYWx1ZUdldHRlcihwYXJhbXMpOiBhbnkge1xyXG4gICAgbGV0IHZhbHVlID0gcGFyYW1zLmRhdGFbcGFyYW1zLmNvbERlZi5maWVsZF07XHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgbGV0IG9wdGlvbiA9ICgocGFyYW1zLmNvbERlZiBhcyBhbnkpLnNlbGVjdE9wdGlvbnMgYXMgYW55W10pLmZpbmQoKGVudHJ5KSA9PiAoZW50cnlbcGFyYW1zLmNvbERlZi5zZWxlY3RPcHRpb25zVmFsdWVGaWVsZF0gPT09IHZhbHVlKSk7XHJcbiAgICAgIHJldHVybiBvcHRpb24gPyBvcHRpb25bcGFyYW1zLmNvbERlZi5zZWxlY3RPcHRpb25zRGlzcGxheUZpZWxkXSA6IFwiXCI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gXCJcIjtcclxuICB9XHJcbn1cclxuIl19
564
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0cmlidXRlLWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb2Qvc3JjL2NvbXBvbmVudHMvYXR0cmlidXRlLWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFVBQVUsRUFBZSxZQUFZLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBMkMsU0FBUyxFQUMxSSxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUE7QUFFeEMsT0FBTyxFQUFtQixZQUFZLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDcEQsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXJDLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBTy9ELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQyxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUN2RSxPQUFPLEVBQUMsUUFBUSxFQUFXLE1BQU0sNEJBQTRCLENBQUM7Ozs7QUFHOUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFLSCxNQUFNLE9BQU8sYUFBYTtJQStDeEIsWUFBWSxnQkFBa0MsRUFBRSxVQUFzQixFQUFFLFFBQW1CLEVBQVUsWUFBc0I7UUFBdEIsaUJBQVksR0FBWixZQUFZLENBQVU7UUE1Q2xILG1CQUFjLEdBQVksS0FBSyxDQUFDO1FBQ2hDLGVBQVUsR0FBWSxJQUFJLENBQUM7UUFDM0Isd0JBQW1CLEdBQVcsU0FBUyxDQUFDO1FBRXZDLGtCQUFhLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFLckUsb0JBQWUsR0FBcUIsRUFBRSxDQUFDO1FBYXZDLFVBQUssR0FBVyxDQUFDLENBQUM7UUFRbEIsZ0JBQVcsR0FBRztZQUNWLFlB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RSxLQUFLLEVBQUM7Z0JBQ1MsZUFBZTtzQkFBN0QsU0FBUzt1QkFBQyxpQkFBaUIsRUFBRSxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEVsZW1lbnRSZWYsIFRlbXBsYXRlUmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBpc0Rldk1vZGUsIE91dHB1dCwgUmVuZGVyZXIyLCBWaWV3Q2hpbGQsIFZpZXdDaGlsZHJlbiwgT25Jbml0LCBPbkRlc3Ryb3ksIEluamVjdCwgRGlyZWN0aXZlLCBRdWVyeUxpc3RcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuaW1wb3J0IHtEYXRlUGlwZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJ1xyXG5cclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJzY3JpcHRpb259IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7Zmlyc3R9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5cclxuaW1wb3J0IHtBdHRyaWJ1dGVTZXJ2aWNlfSBmcm9tIFwiLi4vc2VydmljZXMvYXR0cmlidXRlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtBdHRyaWJ1dGV9IGZyb20gXCIuLi9tb2RlbC9hdHRyaWJ1dGUuZW50aXR5XCI7XHJcbmltcG9ydCB7QXR0cmlidXRlVmFsdWV9IGZyb20gXCIuLi9tb2RlbC9hdHRyaWJ1dGUtdmFsdWUuZW50aXR5XCI7XHJcbmltcG9ydCB7QXR0cmlidXRlQ2hvaWNlfSBmcm9tIFwiLi4vbW9kZWwvYXR0cmlidXRlLWNob2ljZS5lbnRpdHlcIjtcclxuaW1wb3J0IHtBdHRyaWJ1dGVMb25nVGV4dH0gZnJvbSBcIi4uL21vZGVsL2F0dHJpYnV0ZS1sb25nLXRleHQuZW50aXR5XCI7XHJcbmltcG9ydCB7R3JhcGhpY2FsQXR0cmlidXRlfSBmcm9tIFwiLi4vbW9kZWwvZ3JhcGhpY2FsLWF0dHJpYnV0ZS5lbnRpdHlcIjtcclxuaW1wb3J0IHtEaWN0aW9uYXJ5RW50cmllc0RUT30gZnJvbSBcIi4uL21vZGVsL2RpY3Rpb25hcnktZW50cmllcy5kdG9cIjtcclxuaW1wb3J0IHtEYXRlVXRpbH0gZnJvbSBcIi4uL2RhdGUvZGF0ZS11dGlsXCI7XHJcbmltcG9ydCB7TmF0aXZlU2VsZWN0Q29tcG9uZW50fSBmcm9tIFwiQGh1bnRzbWFuLWNhbmNlci1pbnN0aXR1dGUvaW5wdXRcIjtcclxuaW1wb3J0IHtOZ2JNb2RhbCwgTmdiUGFuZWx9IGZyb20gXCJAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcFwiO1xyXG5pbXBvcnQge0dyaWRBcGksIFJvd0RvdWJsZUNsaWNrZWRFdmVudCwgUm93Tm9kZSwgUm93U2VsZWN0ZWRFdmVudCwgQWdHcmlkRXZlbnQsIEdyaWRTaXplQ2hhbmdlZEV2ZW50LCBNb2RlbFVwZGF0ZWRFdmVudH0gZnJvbSBcImFnLWdyaWQtY29tbXVuaXR5XCI7XHJcblxyXG4vKipcclxuICogVGhlIGJhc2UgY2xhc3MgZm9yIGFuIGF0dHJpYnV0ZS4gIEF0dHJpYnV0ZXMgYXJlIGl0ZXJhdGVkIG92ZXIgYnkgY29udGFpbmVyLiAgVGhlc2UgbWF5IGJlIGluIHRyYWRpdGlvbmFsIGFic29sdXRlXHJcbiAqIHBvc2l0aW9uaW5nLCBmbGV4IHBvc2l0aW9uaW5nLCBvciBhbiBlZGl0IG1vZGUgYXMgYSBjb2x1bW4gaW4gYSBtb2RhbC4gIFJlZ2FyZGxlc3Mgb2YgdGhlIHRlbXBsYXRlLCB0aGUgZnVuZGFtZW50YWxcclxuICogbmVlZHMgb2Ygc2V0dGluZyB1cCB0aGUgYXR0cmlidXRlIHZhbHVlcyBhbmQgcGVyc2lzdGluZyBkYXRhIGFyZSB0aGUgc2FtZS4gIFNvIHRoaXMgY2xhc3MgcHJvdmlkZXMgYmFzZSBmdW5jdGlvbmFsaXR5XHJcbiAqIGFuZCB0aGUgY29tcG9uZW50cyB0aGF0IGV4dGVuZCBpdCBwcm92aWRlIHRoZSB0ZW1wbGF0ZSBhbmQgbWF5IGFsc28gZXh0ZW5kIHRoZSBmdW5jdGlvbmFsaXR5LlxyXG4gKlxyXG4gKiBUeXBlczpcclxuICogTElORVxyXG4gKiBOTFBfTElOS1xyXG4gKiBESUNUXHJcbiAqIEdBXHJcbiAqIExBQkVMXHJcbiAqIERUXHJcbiAqIEFDXHJcbiAqIFRYVFxyXG4gKiBEXHJcbiAqIFNcclxuICogSVxyXG4gKiBDQlxyXG4gKiBCXHJcbiAqIE5cclxuICogRUJcclxuICovXHJcbkBEaXJlY3RpdmUoe1xyXG4gICAgc2VsZWN0b3I6IFwiaGNpLWF0dHJpYnV0ZS1iYXNlXCJcclxuICB9XHJcbilcclxuZXhwb3J0IGNsYXNzIEF0dHJpYnV0ZUJhc2UgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcblxyXG4gIEBJbnB1dCgpIGF0dHJpYnV0ZTogR3JhcGhpY2FsQXR0cmlidXRlO1xyXG4gIEBJbnB1dCgpIGludGVybmFsVmFsdWVzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgZWRpdElubGluZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgZ3JvdXBBdHRyaWJ1dGVSb3dJZDogbnVtYmVyID0gdW5kZWZpbmVkO1xyXG5cclxuICBAT3V0cHV0KCkgcmVzb3J0Q29sdW1uczogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgQFZpZXdDaGlsZChcImlucHV0UmVmXCIsIHtzdGF0aWM6IGZhbHNlfSkgaW5wdXRSZWY6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZChcIm5hdGl2ZVNlbGVjdFJlZlwiLCB7c3RhdGljOiBmYWxzZX0pIG5hdGl2ZVNlbGVjdFJlZjogTmF0aXZlU2VsZWN0Q29tcG9uZW50O1xyXG5cclxuICBhdHRyaWJ1dGVWYWx1ZXM6IEF0dHJpYnV0ZVZhbHVlW10gPSBbXTtcclxuICBhdHRyaWJ1dGVDaG9pY2VzOiBBdHRyaWJ1dGVDaG9pY2VbXTtcclxuXHJcbiAgY2hpbGRBdHRyaWJ1dGVzOiBHcmFwaGljYWxBdHRyaWJ1dGVbXTtcclxuICBncmlkRGF0YTogYW55W107XHJcbiAgZ3JpZENvbHVtbnM6IGFueVtdO1xyXG5cclxuICAvL1VzZWQgZm9yIHRoZSBlZGl0IGdyb3VwIHJvdyB0ZW1wbGF0ZVxyXG4gIGVkaXRHcm91cEF0dHJpYnV0ZVJvd0lkOiBudW1iZXI7XHJcbiAgZWRpdEdyb3VwUm93QXR0cmlidXRlczogR3JhcGhpY2FsQXR0cmlidXRlW107XHJcblxyXG4gIGRpY3Rpb25hcnlFbnRyaWVzOiBhbnlbXTtcclxuXHJcbiAgd2lkdGg6IG51bWJlciA9IDA7XHJcblxyXG4gIGF0dHJpYnV0ZVNlcnZpY2U6IEF0dHJpYnV0ZVNlcnZpY2U7XHJcbiAgZWxlbWVudFJlZjogRWxlbWVudFJlZjtcclxuICByZW5kZXJlcjogUmVuZGVyZXIyO1xyXG5cclxuICBncmlkQXBpOiBHcmlkQXBpO1xyXG5cclxuICBncmlkT3B0aW9ucyA9IHtcclxuICAgICAgaGVhZGVySGVpZ2h0OiAyMyxcclxuICAgICAgcm93SGVpZ2h0OiAyMyxcclxuICAgICAgcm93U3R5bGU6IHtcclxuICAgICAgICAgICdmb250LWZhbWlseSc6ICdQcm9tcHQsIHNhbnMtc2VyaWYnLFxyXG4gICAgICAgICAgJ2NvbG9yJzogJyMzZDdhOTknXHJcbiAgICAgIH0sXHJcbiAgICAgIGVuYWJsZUNlbGxUZXh0U2VsZWN0aW9uOiB0cnVlLFxyXG4gICAgICBlbnN1cmVEb21PcmRlcjogdHJ1ZSxcclxuICAgICAgc3VwcHJlc3NDb2x1bW5WaXJ0dWFsaXNhdGlvbjogZmFsc2VcclxuICAgIH07XHJcblxyXG4gIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuXHJcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlU2VydmljZTogQXR0cmlidXRlU2VydmljZSwgZWxlbWVudFJlZjogRWxlbWVudFJlZiwgcmVuZGVyZXI6IFJlbmRlcmVyMiwgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsKSB7XHJcbiAgICB0aGlzLmF0dHJpYnV0ZVNlcnZpY2UgPSBhdHRyaWJ1dGVTZXJ2aWNlO1xyXG4gICAgdGhpcy5lbGVtZW50UmVmID0gZWxlbWVudFJlZjtcclxuICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBhbnkgYXR0cmlidXRlIHZhbHVlcyBmb3IgdGhpcyBhdHRyaWJ1dGUuICBJZiBhIGNvbXBsZXggYXR0cmlidXRlIGxpa2UgYSBncmlkLCBzZXQgaXQgdXAuXHJcbiAgICovXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMuYXR0cmlidXRlU2VydmljZS5nZXRDb250YWluZXJVcGRhdGVkKCkuc3Vic2NyaWJlKCh1cGRhdGVkOiBib29sZWFuKSA9PiB7XHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgb25HcmlkUmVhZHkocGFyYW1zIDogYW55KSB7XHJcbiAgICB0aGlzLmdyaWRBcGkgPSBwYXJhbXMuYXBpO1xyXG4gICAgdGhpcy5ncmlkQXBpLnNpemVDb2x1bW5zVG9GaXQoKTtcclxuICB9XHJcblxyXG4gIG9uTW9kZWxVcGRhdGVkKF9ldmVudDogTW9kZWxVcGRhdGVkRXZlbnQpIHtcclxuICAgIGlmICh0aGlzLmdyaWRBcGkpIHtcclxuICAgICAgdGhpcy5ncmlkQXBpLnNpemVDb2x1bW5zVG9GaXQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uR3JpZFNpemVDaGFuZ2VkKF9ldmVudDogR3JpZFNpemVDaGFuZ2VkRXZlbnQpIHtcclxuICAgIGlmICh0aGlzLmdyaWRBcGkpIHtcclxuICAgICAgdGhpcy5ncmlkQXBpLnNpemVDb2x1bW5zVG9GaXQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFB1bGxzIHRoZSBhdHRyaWJ1dGUgdmFsdWVzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGF0dHJpYnV0ZSBhbmQgcGVyZm9ybXMgYW55IHNwZWNpYWxpemVkIGluaXRpYWxpemF0aW9uIHN1Y2ggYXMgZm9yXHJcbiAgICogdGhlIGdyaWQgb3IgbXVsdGkgY2hvaWNlLlxyXG4gICAqL1xyXG4gIGluaXQoKTogdm9pZCB7XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcIkF0dHJpYnV0ZS5pbml0OiBcIiArIHRoaXMuYXR0cmlidXRlLmlkQXR0cmlidXRlKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmdyaWREYXRhID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5ncmlkQ29sdW1ucyA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuYXR0cmlidXRlQ2hvaWNlcyA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMud2lkdGggPSB0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0V2lkdGgoKTtcclxuXHJcbiAgICBpZiAoIXRoaXMuaW50ZXJuYWxWYWx1ZXMpIHtcclxuICAgICAgdGhpcy5hdHRyaWJ1dGVWYWx1ZXMgPSB0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0QXR0cmlidXRlVmFsdWVzKHRoaXMuYXR0cmlidXRlLmlkQXR0cmlidXRlLCB0aGlzLmdyb3VwQXR0cmlidXRlUm93SWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmF0dHJpYnV0ZVZhbHVlcy5sZW5ndGggPT09IDAgJiYgdGhpcy5hdHRyaWJ1dGUuY29kZUF0dHJpYnV0ZURhdGFUeXBlICE9PSBcIkdBXCIgJiYgdGhpcy5hdHRyaWJ1dGUuaXNNdWx0aVZhbHVlICE9PSBcIllcIikge1xyXG4gICAgICAvLyBUT0RPOiBEZWNpZGUgd2hlbiB0byBwZXJzaXN0IHRoaXMgdG8gZ2V0IHRoZSBpZEF0dHJpYnV0ZVZhbHVlLlxyXG4gICAgICB0aGlzLmF0dHJpYnV0ZVZhbHVlcy5wdXNoKDxBdHRyaWJ1dGVWYWx1ZT57XHJcbiAgICAgICAgY29kZUF0dHJpYnV0ZURhdGFUeXBlOiB0aGlzLmF0dHJpYnV0ZS5jb2RlQXR0cmlidXRlRGF0YVR5cGUsXHJcbiAgICAgICAgaWRBdHRyaWJ1dGVWYWx1ZTogdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLmdldFVuaXF1ZUlkKCksXHJcbiAgICAgICAgaWRBdHRyaWJ1dGU6IHRoaXMuYXR0cmlidXRlLmlkQXR0cmlidXRlLFxyXG4gICAgICAgIGlkR3JvdXBBdHRyaWJ1dGU6IHRoaXMuYXR0cmlidXRlLmlkR3JvdXBBdHRyaWJ1dGUsXHJcbiAgICAgICAgZ3JvdXBBdHRyaWJ1dGVSb3dJZDogdGhpcy5ncm91cEF0dHJpYnV0ZVJvd0lkXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmF0dHJpYnV0ZS5jb2RlQXR0cmlidXRlRGF0YVR5cGUgPT09IFwiR0FcIikge1xyXG4gICAgICB0aGlzLmluaXRpYWxpemVHcmlkKCk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuYXR0cmlidXRlLmNvZGVBdHRyaWJ1dGVEYXRhVHlwZSA9PT0gXCJBQ1wiKSB7XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUF0dHJpYnV0ZUNob2ljZXMoKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5hdHRyaWJ1dGUuY29kZUF0dHJpYnV0ZURhdGFUeXBlID09PSBcIlRYVFwiICYmICF0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXS52YWx1ZUxvbmdUZXh0KSB7XHJcbiAgICAgIHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdLnZhbHVlTG9uZ1RleHQgPSA8QXR0cmlidXRlTG9uZ1RleHQ+e1xyXG4gICAgICAgIGlkTG9uZ1RleHQ6IHVuZGVmaW5lZCxcclxuICAgICAgICB0ZXh0RGF0YTogdW5kZWZpbmVkXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLmF0dHJpYnV0ZS5jb2RlQXR0cmlidXRlRGF0YVR5cGUgPT09IFwiRElDVFwiKSB7XHJcbiAgICAgIHRoaXMubG9hZERpY3Rpb25hcnlFbnRyaWVzKHRoaXMuYXR0cmlidXRlLCB0aGlzLmF0dHJpYnV0ZVZhbHVlcywgdGhpcy5ncm91cEF0dHJpYnV0ZVJvd0lkKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuYXR0cmlidXRlLmNvZGVBdHRyaWJ1dGVEYXRhVHlwZSA9PT0gXCJEVFwiKSB7XHJcbiAgICAgIC8vTWFrZSBhIHByb3BlciBkYXRlIGZvciB0aGUgZGF0ZSB0aW1lIGNvbXBvbmVudFxyXG4gICAgICB0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXS5kYXRlID0gbmV3IERhdGUodGhpcy5hdHRyaWJ1dGVWYWx1ZXNbMF0udmFsdWVEYXRlVGltZSk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcblxyXG4gIGxvYWREaWN0aW9uYXJ5RW50cmllcyhhdHRyaWJ1dGU6IEF0dHJpYnV0ZSwgdmFsdWVzOiBBdHRyaWJ1dGVWYWx1ZVtdLCBncm91cEF0dHJpYnV0ZVJvd0lkOiBudW1iZXIpIHtcclxuICAgIC8vQWRkaW5nIHRoaXMgdG8gc3Vic2NyaXB0aW9ucyBpcyBwcm9iYWJseSB1bm5lY2Vzc2FyeSwgc2luY2UgdGhlIGZpcnN0KCkgd2lsbCB1bnN1YnNjcmliZS4gV2Ugb25seSBnZXQgb25lIHZhbHVlLlxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0RGljdGlvbmFyeUVudHJpZXMoYXR0cmlidXRlLCB2YWx1ZXMsIGdyb3VwQXR0cmlidXRlUm93SWQpLnBpcGUoZmlyc3QoKSkuc3Vic2NyaWJlKChkdG86IERpY3Rpb25hcnlFbnRyaWVzRFRPKSA9PiB7XHJcbiAgICAgIHRoaXMuZGljdGlvbmFyeUVudHJpZXMgPSBkdG8uZW50cmllcztcclxuXHJcbiAgICAgIGlmICh0aGlzLmF0dHJpYnV0ZS5pc011bHRpVmFsdWUgPT09ICdZJykge1xyXG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZU11bHRpRGljdEVudHJpZXMoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy9JZiB0aGVyZSBpcyBhIHJlZmVyZW5jZWQgYXR0cmlidXRlIHRoaXMgbWVhbnMgdGhpcyBhdHRyaWJ1dGUgaXMgZmlsdGVyZWQgYnkgYW5vdGhlciBhdHRyaWJ1dGUuXHJcbiAgICAgIGlmIChkdG8ucmVmZXJlbmNlZEF0dHJpYnV0ZSkge1xyXG4gICAgICAgIC8vTmVlZCB0byBzdWJzY3JpYmUgdG8gYXR0cmlidXRlIHB1c2hlcywgaW4gb3JkZXIgdG8gdXBkYXRlIG91ciBGSUxURVJFRCBESUNUSU9OQVJZIHdoZW4gdGhlIHJlZmVyZW5jZWQgYXR0cmlidXRlIHdhcyBjaGFuZ2VkXHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0QXR0cmlidXRlVmFsdWVQdXNoZWRTdWJqZWN0KCkuc3Vic2NyaWJlKChhdjogQXR0cmlidXRlVmFsdWUpID0+IHtcclxuICAgICAgICAgIC8vSWYgaXQgaXMgdGhlIHJlZmVyZW5jZWQgYXR0cmlidXRlLCAoYW5kIGZvciB0aGUgc2FtZSByb3cgaWYgdGhpcyBpcyBhIGdyaWQgcm93KSB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgZGljdGlvbmFyeSBlbnRyaWVzXHJcbiAgICAgICAgICBpZiAoYXYuaWRBdHRyaWJ1dGUgPT09IGR0by5yZWZlcmVuY2VkQXR0cmlidXRlLmlkQXR0cmlidXRlXHJcbiAgICAgICAgICAgICAgJiYgKChhdi5ncm91cEF0dHJpYnV0ZVJvd0lkID09IG51bGwgJiYgdGhpcy5ncm91cEF0dHJpYnV0ZVJvd0lkID09IG51bGwpIHx8IGF2Lmdyb3VwQXR0cmlidXRlUm93SWQgPT09IHRoaXMuZ3JvdXBBdHRyaWJ1dGVSb3dJZCkpIHtcclxuXHJcbiAgICAgICAgICAgIC8vTWFrZSBhbm90aGVyIGNhbGwgdG8gZ2V0IHRoZSBkaWN0aW9uYXJ5IGVudHJpZXNcclxuICAgICAgICAgICAgLy9Ob3RlIHRoYXQgd2hlbiBwYXNzaW5nIGluIHRoZSByZWZlcmVuY2VBdHRyaWJ1dGVWYWx1ZSwgdGhlIHJlc3VsdGluZyBEVE8gd29uJ3QgY29udGFpbiBhIHJlZmVyZW5jZWRBdHRyaWJ1dGUuIEEgc2Vjb25kIHN1YnNjcmlwdGlvbiB3b24ndCBiZSBjcmVhdGVkLlxyXG4gICAgICAgICAgICB0aGlzLnJlbG9hZEZpbHRlcmVkRGljdGlvbmFyeUVudHJpZXMoYXR0cmlidXRlLCB2YWx1ZXMsIGdyb3VwQXR0cmlidXRlUm93SWQsIGF2KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KSk7XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIHJlbG9hZEZpbHRlcmVkRGljdGlvbmFyeUVudHJpZXMoYXR0cmlidXRlOiBBdHRyaWJ1dGUsIHZhbHVlczogQXR0cmlidXRlVmFsdWVbXSwgZ3JvdXBBdHRyaWJ1dGVSb3dJZDogbnVtYmVyLCByZWZlcmVuY2VkQXR0cmlidXRlVmFsdWU6IEF0dHJpYnV0ZVZhbHVlKSB7XHJcbiAgICAvL0FkZGluZyB0aGlzIHRvIHN1YnNjcmlwdGlvbnMgaXMgcHJvYmFibHkgdW5uZWNlc3NhcnksIHNpbmNlIHRoZSBmaXJzdCgpIHdpbGwgdW5zdWJzY3JpYmUuIFdlIG9ubHkgZ2V0IG9uZSB2YWx1ZS5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLmdldERpY3Rpb25hcnlFbnRyaWVzKGF0dHJpYnV0ZSwgdmFsdWVzLCBncm91cEF0dHJpYnV0ZVJvd0lkLCByZWZlcmVuY2VkQXR0cmlidXRlVmFsdWUpLnBpcGUoZmlyc3QoKSkuc3Vic2NyaWJlKChkdG86IERpY3Rpb25hcnlFbnRyaWVzRFRPKSA9PiB7XHJcbiAgICAgIHRoaXMuZGljdGlvbmFyeUVudHJpZXMgPSBkdG8uZW50cmllcztcclxuXHJcbiAgICAgIC8vTXVsdGlcclxuICAgICAgaWYgKHRoaXMuYXR0cmlidXRlLmlzTXVsdGlWYWx1ZSA9PT0gJ1knKSB7XHJcbiAgICAgICAgdGhpcy5pbml0aWFsaXplTXVsdGlEaWN0RW50cmllcygpO1xyXG5cclxuICAgICAgICAvL1Byb2JhYmx5IG5lZWQgdG8gc2xpY2Ugb3V0IG11bHRpIHZhbHVlcyB0aGF0IGRvbid0IGFwcGx5XHJcbiAgICAgICAgdGhpcy5kZWxldGVGaWx0ZXJlZE91dERpY3Rpb25hcnlWYWx1ZXMoKTtcclxuICAgICAgfVxyXG4gICAgICAvL1NpbmdsZVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICAvL01heWJlIG5lZWQgdG8gY2xlYXIgb3V0IHRoZSB2YWx1ZSBpZiBpdCBubyBsb25nZXIgYXBwbGllc1xyXG4gICAgICAgIGlmICghIGR0by5lbnRyaWVzSW5jbHVkZVNlbGVjdGVkVmFsdWUpIHtcclxuICAgICAgICAgIHRoaXMudmFsdWVEaWN0Q2hhbmdlKHVuZGVmaW5lZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICBkZWxldGVGaWx0ZXJlZE91dERpY3Rpb25hcnlWYWx1ZXMoKSB7XHJcbiAgICAvL0l0ZXJhdGUgZXhpc3RpbmcgdmFsdWVzXHJcbiAgICBmb3IgKGxldCBhdHRyaWJ1dGVWYWx1ZSBvZiB0aGlzLmF0dHJpYnV0ZVZhbHVlcykge1xyXG4gICAgICBsZXQgYXBwbGljYWJsZTpib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgICAvL0RvZXMgaXQgZXhpc3QgaW4gbmV3IGRpY2F0aW9ucnlFbnRyaWVzP1xyXG4gICAgICBmb3IgKGxldCBlbnRyeSBvZiB0aGlzLmRpY3Rpb25hcnlFbnRyaWVzKSB7XHJcbiAgICAgICAgaWYgKGF0dHJpYnV0ZVZhbHVlLnZhbHVlSWREaWN0aW9uYXJ5ICYmIGVudHJ5LnZhbHVlID09PSBhdHRyaWJ1dGVWYWx1ZS52YWx1ZUlkRGljdGlvbmFyeSkge1xyXG4gICAgICAgICAgLy9rZWVwXHJcbiAgICAgICAgICBhcHBsaWNhYmxlID0gdHJ1ZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCEgYXBwbGljYWJsZSkge1xyXG4gICAgICAgIC8vR2V0IHJpZCBvZiB2YWx1ZXMgdGhhdCBubyBsb25nZXIgYXBwbHlcclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZVNlcnZpY2Uuc3BsaWNlQXR0cmlidXRlVmFsdWVEaWN0KHRoaXMuYXR0cmlidXRlLCBhdHRyaWJ1dGVWYWx1ZS52YWx1ZUlkRGljdGlvbmFyeSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW5pdGlhbGl6ZU11bHRpRGljdEVudHJpZXMoKSB7XHJcbiAgICBmb3IgKGxldCBlbnRyeSBvZiB0aGlzLmRpY3Rpb25hcnlFbnRyaWVzKSB7XHJcbiAgICAgIGVudHJ5LmNoZWNrZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgIGZvciAobGV0IGF0dHJpYnV0ZVZhbHVlIG9mIHRoaXMuYXR0cmlidXRlVmFsdWVzKSB7XHJcbiAgICAgICAgaWYgKGF0dHJpYnV0ZVZhbHVlLnZhbHVlSWREaWN0aW9uYXJ5ICYmIGVudHJ5LnZhbHVlID09PSBhdHRyaWJ1dGVWYWx1ZS52YWx1ZUlkRGljdGlvbmFyeSkge1xyXG4gICAgICAgICAgZW50cnkuY2hlY2tlZCA9IHRydWU7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCBhIHRyYW5zaWVudCB2YWx1ZSBvbiB0aGUgYXR0cmlidXRlQ2hvaWNlIHRvIGtlZXAgdHJhY2sgb2Ygc2VsZWN0ZWQgdmFsdWVzLlxyXG4gICAqL1xyXG4gIGluaXRpYWxpemVBdHRyaWJ1dGVDaG9pY2VzKCkge1xyXG4gICAgdGhpcy5hdHRyaWJ1dGVDaG9pY2VzID0gdGhpcy5hdHRyaWJ1dGUuYXR0cmlidXRlQ2hvaWNlcy5zbGljZSgpO1xyXG5cclxuICAgIGZvciAobGV0IGF0dHJpYnV0ZUNob2ljZSBvZiB0aGlzLmF0dHJpYnV0ZUNob2ljZXMpIHtcclxuICAgICAgYXR0cmlidXRlQ2hvaWNlLnZhbHVlID0gZmFsc2U7XHJcblxyXG4gICAgICBmb3IgKGxldCBhdHRyaWJ1dGVWYWx1ZSBvZiB0aGlzLmF0dHJpYnV0ZVZhbHVlcykge1xyXG4gICAgICAgIGlmIChhdHRyaWJ1dGVWYWx1ZS52YWx1ZUF0dHJpYnV0ZUNob2ljZSAmJiBhdHRyaWJ1dGVDaG9pY2UuaWRBdHRyaWJ1dGVDaG9pY2UgPT09IGF0dHJpYnV0ZVZhbHVlLnZhbHVlQXR0cmlidXRlQ2hvaWNlLmlkQXR0cmlidXRlQ2hvaWNlKSB7XHJcbiAgICAgICAgICBhdHRyaWJ1dGVDaG9pY2UudmFsdWUgPSB0cnVlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJZiB0aGUgYXR0cmlidXRlIGlzIGEgZ3JpZCwgZmluZCBpdHMgY2hpbGRyZW4gYXR0cmlidXRlcyB3aGljaCBtYWtlIHVwIHRoZSBjb2x1bW5zIGFuZCBnZW5lcmF0ZSBkYXRhIGJhc2VkIG9uIGFsbFxyXG4gICAqIHRoZSBhdHRyaWJ1dGUgdmFsdWVzIGJ5IHRoZWlyIGdyb3VwQXR0cmlidXRlUm93SWQuXHJcbiAgICovXHJcbiAgaW5pdGlhbGl6ZUdyaWQoKTogdm9pZCB7XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcIkF0dHJpYnV0ZUNvbXBvbmVudC5pbml0aWFsaXplR3JpZFwiKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgY29sdW1uczogYW55W10gPSBbXTtcclxuICAgIGxldCBkYXRhOiBhbnlbXSA9IFtdO1xyXG5cclxuICAgIGlmICghdGhpcy5hdHRyaWJ1dGUuYXR0cmlidXRlcykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jaGlsZEF0dHJpYnV0ZXMgPSA8R3JhcGhpY2FsQXR0cmlidXRlW10+dGhpcy5hdHRyaWJ1dGUuYXR0cmlidXRlcy5maWx0ZXIoKGF0dHJpYnV0ZTogR3JhcGhpY2FsQXR0cmlidXRlKSA9PiB7XHJcbiAgICAgIHJldHVybiBhdHRyaWJ1dGVbXCJ0YWJPcmRlclwiXSAhPT0gdW5kZWZpbmVkIHx8IGF0dHJpYnV0ZVtcIndcIl0gIT09IHVuZGVmaW5lZDtcclxuICAgIH0pLnNvcnQoKGE6IEdyYXBoaWNhbEF0dHJpYnV0ZSwgYjogR3JhcGhpY2FsQXR0cmlidXRlKSA9PiB7XHJcbiAgICAgIGlmIChhLnRhYk9yZGVyIDwgYi50YWJPcmRlcikge1xyXG4gICAgICAgIHJldHVybiAtMTtcclxuICAgICAgfSBlbHNlIGlmIChhLnRhYk9yZGVyID4gYi50YWJPcmRlcikge1xyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcIkF0dHJpYnV0ZUNvbXBvbmVudC5pbml0aWFsaXplR3JpZDogbiBHcmlkIEF0dHJpYnV0ZXM6IFwiICsgdGhpcy5jaGlsZEF0dHJpYnV0ZXMubGVuZ3RoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXRpYWxpemVHcmlkQ29sdW1ucyh0aGlzLmNoaWxkQXR0cmlidXRlcywgY29sdW1ucyk7XHJcblxyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJBdHRyaWJ1dGVDb21wb25lbnQuaW5pdGlhbGl6ZUdyaWQ6IG4gQ29sdW1uczogXCIgKyBjb2x1bW5zLmxlbmd0aCk7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoY29sdW1ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJBdHRyaWJ1dGVDb21wb25lbnQuaW5pdGlhbGl6ZUdyaWQ6IG4gYXR0cmlidXRlVmFsdWVzOiBcIiArIHRoaXMuYXR0cmlidXRlVmFsdWVzLmxlbmd0aCk7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcodGhpcy5hdHRyaWJ1dGVWYWx1ZXMpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBsZXQgc29ydGVkUm93VmFsdWVzID0gdGhpcy5hdHRyaWJ1dGVWYWx1ZXMuZmlsdGVyKChhdHRyaWJ1dGVWYWx1ZSkgPT4gYXR0cmlidXRlVmFsdWUuaWRHcm91cEF0dHJpYnV0ZSA9IHRoaXMuYXR0cmlidXRlLmlkQXR0cmlidXRlKVxyXG4gICAgICAuc29ydCgoYTogQXR0cmlidXRlVmFsdWUsIGI6IEF0dHJpYnV0ZVZhbHVlKSA9PiB7XHJcbiAgICAgIGlmIChhLmdyb3VwQXR0cmlidXRlUm93SWQgPCBiLmdyb3VwQXR0cmlidXRlUm93SWQpIHtcclxuICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgIH0gZWxzZSBpZiAoYS5ncm91cEF0dHJpYnV0ZVJvd0lkID4gYi5ncm91cEF0dHJpYnV0ZVJvd0lkKSB7XHJcbiAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGxldCBuOiBudW1iZXIgPSAwO1xyXG4gICAgZm9yIChsZXQgZGF0dW0gb2Ygc29ydGVkUm93VmFsdWVzKSB7XHJcbiAgICAgIGlmIChkYXR1bS5ncm91cEF0dHJpYnV0ZVJvd0lkID4gbikge1xyXG4gICAgICAgIG4gPSBkYXR1bS5ncm91cEF0dHJpYnV0ZVJvd0lkO1xyXG4gICAgICAgIGRhdGEucHVzaCh7XHJcbiAgICAgICAgICBncm91cEF0dHJpYnV0ZVJvd0lkOiBkYXR1bS5ncm91cEF0dHJpYnV0ZVJvd0lkXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcIkF0dHJpYnV0ZUNvbXBvbmVudC5pbml0aWFsaXplR3JpZDogbiBEYXRhOiBcIiArIGRhdGEubGVuZ3RoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXRpYWxpemVHcmlkVmFsdWVzKGRhdGEsIHNvcnRlZFJvd1ZhbHVlcyk7XHJcblxyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJBdHRyaWJ1dGVDb21wb25lbnQuaW5pdGlhbGl6ZUdyaWQ6IERhdGFcIik7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5ncmlkQ29sdW1ucyA9IGNvbHVtbnM7XHJcbiAgICB0aGlzLmdyaWREYXRhID0gZGF0YTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdlbmVyYXRlIGEgY29sdW1uIGFycmF5IGJhc2VkIG9uIHRoZSBncm91cGVkIGF0dHJpYnV0ZXMgd2l0aGluIHRoZSBncmlkLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtBdHRyaWJ1dGVbXX0gYXR0cmlidXRlc1xyXG4gICAqIEBwYXJhbSB7YW55W119IGNvbHVtbnNcclxuICAgKi9cclxuICBpbml0aWFsaXplR3JpZENvbHVtbnMoYXR0cmlidXRlczogR3JhcGhpY2FsQXR0cmlidXRlW10sIGNvbHVtbnM6IGFueVtdKSB7XHJcblxyXG4gICAgLypcclxuICAgIGNvbHVtbnMucHVzaCh7XHJcbiAgICAgIGZpZWxkOiBcImdyb3VwQXR0cmlidXRlUm93SWRcIiwgaXNLZXk6IHRydWUsIHZpc2libGU6IGZhbHNlXHJcbiAgICB9KTsqL1xyXG5cclxuICAgIGZvciAoY29uc3QgW2ksIGF0dHJpYnV0ZV0gb2YgYXR0cmlidXRlcy5lbnRyaWVzKCkpIHtcclxuICAgICAgbGV0IGNvbHVtbjogYW55ID0ge1xyXG4gICAgICAgIGZpZWxkOiBhdHRyaWJ1dGUuYXR0cmlidXRlTmFtZSxcclxuICAgICAgICBoZWFkZXJOYW1lOiBhdHRyaWJ1dGUuZGlzcGxheU5hbWUsXHJcbiAgICAgICAgZWRpdGFibGU6IGZhbHNlLFxyXG4gICAgICAgIHNvcnRhYmxlOiB0cnVlLFxyXG4gICAgICAgIHJlc2l6YWJsZTogdHJ1ZSxcclxuICAgICAgICBmaWx0ZXI6IGZhbHNlLFxyXG4gICAgICAgIHdpZHRoOiBhdHRyaWJ1dGUudyxcclxuICAgICAgfTtcclxuXHJcbiAgICAgIC8vIHRoZSBsYXN0IGNvbHVtbiBzaG91bGQgYXV0byBmaWxsIHRoZSByZW1haW5pbmcgc3BhY2VcclxuICAgICAgaWYgKGF0dHJpYnV0ZS53ICYmIGkgPCBhdHRyaWJ1dGVzLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICBjb2x1bW4uc3VwcHJlc3NTaXplVG9GaXQgPSB0cnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoYXR0cmlidXRlLmNvZGVBdHRyaWJ1dGVEYXRhVHlwZSA9PT0gXCJEXCIpIHtcclxuICAgICAgICBjb2x1bW4uY29tcGFyYXRvciA9IERhdGVVdGlsLmRhdGVDb21wYXJhdG9yO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKGF0dHJpYnV0ZS5jb2RlQXR0cmlidXRlRGF0YVR5cGUgPT09IFwiRFRcIikge1xyXG4gICAgICAgIGNvbHVtbi5jb21wYXJhdG9yID0gRGF0ZVV0aWwuZGF0ZVRpbWVDb21wYXJhdG9yO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb2x1bW5zLnB1c2goY29sdW1uKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFmdGVyIHRoZSBjb2x1bW5zIGFyZSBjcmVhdGVkLCBhc3NpZ25lZFxyXG4gICAqXHJcbiAgICogQHBhcmFtIHthbnlbXX0gZGF0YVxyXG4gICAqL1xyXG4gIGluaXRpYWxpemVHcmlkVmFsdWVzKGRhdGE6IGFueVtdLCBhdHRyaWJ1dGVWYWx1ZXM6IEF0dHJpYnV0ZVZhbHVlW10pOiB2b2lkIHtcclxuICAgIGZvciAobGV0IGRhdHVtIG9mIGF0dHJpYnV0ZVZhbHVlcykge1xyXG4gICAgICBsZXQgYXR0cmlidXRlOiBBdHRyaWJ1dGUgPSB0aGlzLmNoaWxkQXR0cmlidXRlcy5maWx0ZXIoKGF0dHJpYnV0ZTogQXR0cmlidXRlKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZS5pZEF0dHJpYnV0ZSA9PT0gZGF0dW0uaWRBdHRyaWJ1dGU7XHJcbiAgICAgIH0pWzBdO1xyXG5cclxuICAgICAgLy9NYWtlIGEgcm93VmFsdWUgb2JqZWN0IHdpdGggdmFsdWVzIGZvciBlYWNoIGF0dHJpYnV0ZSBvZiB0aGUgcm93XHJcbiAgICAgIGxldCByb3dWYWx1ZTogYW55ID0gZGF0YS5maW5kKChyb3cpID0+IHJvdy5ncm91cEF0dHJpYnV0ZVJvd0lkID09PSBkYXR1bS5ncm91cEF0dHJpYnV0ZVJvd0lkKTtcclxuICAgICAgaWYgKCEgcm93VmFsdWUpIHtcclxuICAgICAgICByb3dWYWx1ZSA9IHtncm91cEF0dHJpYnV0ZVJvd0lkOiBkYXR1bS5ncm91cEF0dHJpYnV0ZVJvd0lkfTtcclxuICAgICAgICBkYXRhLnB1c2gocm93VmFsdWUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIWF0dHJpYnV0ZSkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJBdHRyaWJ1dGUuaW5pdGlhbGl6ZUdyaWQ6IGlkQXR0cmlidXRlIFwiICsgZGF0dW0uaWRBdHRyaWJ1dGUgKyBcIiBub3QgZm91bmQuXCIpO1xyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoYXR0cmlidXRlLmNvZGVBdHRyaWJ1dGVEYXRhVHlwZSA9PT0gXCJEVFwiKSB7XHJcbiAgICAgICAgcm93VmFsdWVbYXR0cmlidXRlLmF0dHJpYnV0ZU5hbWVdID0gbmV3IERhdGVQaXBlKFwiZW4tVVNcIikudHJhbnNmb3JtKG5ldyBEYXRlKGRhdHVtLnZhbHVlRGF0ZVRpbWUpLCBcIk0vZC95eSwgaDptbTpzcyBhXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKGF0dHJpYnV0ZS5jb2RlQXR0cmlidXRlRGF0YVR5cGUgPT09IFwiQUNcIiAmJiBhdHRyaWJ1dGUuaXNNdWx0aVZhbHVlID09PSBcIk5cIikge1xyXG4gICAgICAgIGlmIChkYXR1bS52YWx1ZUF0dHJpYnV0ZUNob2ljZSkge1xyXG4gICAgICAgICAgcm93VmFsdWVbYXR0cmlidXRlLmF0dHJpYnV0ZU5hbWVdID0gZGF0dW0udmFsdWVBdHRyaWJ1dGVDaG9pY2UuY2hvaWNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChhdHRyaWJ1dGUuY29kZUF0dHJpYnV0ZURhdGFUeXBlID09PSBcIkFDXCIgJiYgYXR0cmlidXRlLmlzTXVsdGlWYWx1ZSA9PT0gXCJZXCIpIHtcclxuICAgICAgICAvL0NvbmNhdGVuYXRlZCBkaXNwbGF5XHJcbiAgICAgICAgaWYgKHJvd1ZhbHVlW2F0dHJpYnV0ZS5hdHRyaWJ1dGVOYW1lXSkge1xyXG4gICAgICAgICAgcm93VmFsdWVbYXR0cmlidXRlLmF0dHJpYnV0ZU5hbWVdID0gcm93VmFsdWVbYXR0cmlidXRlLmF0dHJpYnV0ZU5hbWVdICsgXCIsIFwiICsgZGF0dW0udmFsdWVBdHRyaWJ1dGVDaG9pY2UuY2hvaWNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByb3dWYWx1ZVthdHRyaWJ1dGUuYXR0cmlidXRlTmFtZV0gPSBkYXR1bS52YWx1ZUF0dHJpYnV0ZUNob2ljZS5jaG9pY2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKGF0dHJpYnV0ZS5jb2RlQXR0cmlidXRlRGF0YVR5cGUgPT09IFwiRElDVFwiKSB7XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0RGljdGlvbmFyeUVudHJpZXMoYXR0cmlidXRlLCBhdHRyaWJ1dGVWYWx1ZXMsIGRhdHVtLmdyb3VwQXR0cmlidXRlUm93SWQpLnBpcGUoZmlyc3QoKSkuc3Vic2NyaWJlKChkdG86IERpY3Rpb25hcnlFbnRyaWVzRFRPKSA9PiB7XHJcbiAgICAgICAgICBsZXQgZW50cnkgPSBkdG8uZW50cmllcy5maW5kKChlbnRyeTphbnkpID0+IGVudHJ5LnZhbHVlID09PSBkYXR1bS52YWx1ZUlkRGljdGlvbmFyeSk7XHJcblxyXG4gICAgICAgICAgaWYgKGVudHJ5KSB7XHJcbiAgICAgICAgICAgIHJvd1ZhbHVlW2F0dHJpYnV0ZS5hdHRyaWJ1dGVOYW1lXSA9IGR0by5lbnRyaWVzLmZpbmQoKGVudHJ5OmFueSkgPT4gZW50cnkudmFsdWUgPT09IGRhdHVtLnZhbHVlSWREaWN0aW9uYXJ5KS5kaXNwbGF5O1xyXG4gICAgICAgICAgICBpZiAodGhpcy5ncmlkQXBpKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5ncmlkQXBpLnJlZnJlc2hDZWxscygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSkpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKGF0dHJpYnV0ZS5jb2RlQXR0cmlidXRlRGF0YVR5cGUgPT09IFwiU1wiIHx8IGF0dHJpYnV0ZS5jb2RlQXR0cmlidXRlRGF0YVR5cGUgPT09IFwiQlwiIHx8IGF0dHJpYnV0ZS5jb2RlQXR0cmlidXRlRGF0YVR5cGUgPT09IFwiRUJcIiB8fCBhdHRyaWJ1dGUuY29kZUF0dHJpYnV0ZURhdGFUeXBlID09PSBcIkNCXCIpIHtcclxuICAgICAgICByb3dWYWx1ZVthdHRyaWJ1dGUuYXR0cmlidXRlTmFtZV0gPSBkYXR1bS52YWx1ZVN0cmluZztcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICByb3dWYWx1ZVthdHRyaWJ1dGUuYXR0cmlidXRlTmFtZV0gPSBkYXR1bS52YWx1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRm9yIG92ZXJyaWRlLlxyXG4gICAqL1xyXG4gIHJlZnJlc2goKTogdm9pZCB7XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcIkF0dHJpYnV0ZS5yZWZyZXNoOiBcIiArIHRoaXMuYXR0cmlidXRlLmlkQXR0cmlidXRlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuXHJcbiAgdmFsdWVTdHJpbmdDaGFuZ2UodmFsdWU6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKHZhbHVlID09PSBcIlwiKSB7XHJcbiAgICAgIHZhbHVlID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdLnZhbHVlU3RyaW5nID0gdmFsdWU7XHJcbiAgICB0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXS52YWx1ZSA9IHZhbHVlO1xyXG5cclxuICAgIHRoaXMuYXR0cmlidXRlU2VydmljZS5wdXNoQXR0cmlidXRlVmFsdWUodGhpcy5hdHRyaWJ1dGVWYWx1ZXNbMF0pO1xyXG4gIH1cclxuXHJcbiAgdmFsdWVDaGVja2JveENoYW5nZShldmVudDogYW55KSB7XHJcbiAgICBpZiAoZXZlbnQudGFyZ2V0LmNoZWNrZWQpIHtcclxuICAgICAgdGhpcy5hdHRyaWJ1dGVWYWx1ZXNbMF0udmFsdWVTdHJpbmcgPSBcIllcIjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXS52YWx1ZVN0cmluZyA9IFwiTlwiO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hdHRyaWJ1dGVWYWx1ZXNbMF0udmFsdWUgPSB0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXS52YWx1ZVN0cmluZztcclxuXHJcbiAgICB0aGlzLmF0dHJpYnV0ZVNlcnZpY2UucHVzaEF0dHJpYnV0ZVZhbHVlKHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdKTtcclxuICB9XHJcblxyXG4gIHZhbHVlSW50ZWdlckNoYW5nZSh2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXS52YWx1ZUludGVnZXIgPSB2YWx1ZTtcclxuICAgIHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdLnZhbHVlID0gKHZhbHVlKT92YWx1ZS50b1N0cmluZygpOnVuZGVmaW5lZDtcclxuXHJcbiAgICB0aGlzLmF0dHJpYnV0ZVNlcnZpY2UucHVzaEF0dHJpYnV0ZVZhbHVlKHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdKTtcclxuICB9XHJcblxyXG4gIHZhbHVlTnVtZXJpY0NoYW5nZSh2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXS52YWx1ZU51bWVyaWMgPSB2YWx1ZTtcclxuICAgIHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdLnZhbHVlID0gKHZhbHVlKT92YWx1ZS50b1N0cmluZygpOnVuZGVmaW5lZDtcclxuXHJcbiAgICB0aGlzLmF0dHJpYnV0ZVNlcnZpY2UucHVzaEF0dHJpYnV0ZVZhbHVlKHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdKTtcclxuICB9XHJcblxyXG4gIHZhbHVlRGljdENoYW5nZSh2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXS52YWx1ZUlkRGljdGlvbmFyeSA9IHZhbHVlO1xyXG4gICAgdGhpcy5hdHRyaWJ1dGVWYWx1ZXNbMF0udmFsdWUgPSAodmFsdWUpP3ZhbHVlLnRvU3RyaW5nKCk6dW5kZWZpbmVkO1xyXG5cclxuICAgIHRoaXMuYXR0cmlidXRlU2VydmljZS5wdXNoQXR0cmlidXRlVmFsdWUodGhpcy5hdHRyaWJ1dGVWYWx1ZXNbMF0pO1xyXG4gIH1cclxuXHJcbiAgdmFsdWVEYXRlQ2hhbmdlKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdLnZhbHVlRGF0ZVRpbWUgPSB2YWx1ZTtcclxuICAgIHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdLnZhbHVlID0gKHZhbHVlKT92YWx1ZS50b1N0cmluZygpOnVuZGVmaW5lZDtcclxuXHJcbiAgICB0aGlzLmF0dHJpYnV0ZVNlcnZpY2UucHVzaEF0dHJpYnV0ZVZhbHVlKHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdKTtcclxuICB9XHJcblxyXG4gIHZhbHVlVGV4dENoYW5nZSh2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5hdHRyaWJ1dGVWYWx1ZXNbMF0udmFsdWVMb25nVGV4dCkge1xyXG4gICAgICB0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXS52YWx1ZUxvbmdUZXh0LnRleHREYXRhID0gdmFsdWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXS52YWx1ZUxvbmdUZXh0ID0gPEF0dHJpYnV0ZUxvbmdUZXh0PntcclxuICAgICAgICBpZExvbmdUZXh0OiB1bmRlZmluZWQsXHJcbiAgICAgICAgdGV4dERhdGE6IHZhbHVlXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICB0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXS52YWx1ZSA9ICh2YWx1ZSk/dmFsdWUudG9TdHJpbmcoKTp1bmRlZmluZWQ7XHJcblxyXG4gICAgdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnB1c2hBdHRyaWJ1dGVWYWx1ZSh0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXSk7XHJcbiAgfVxyXG5cclxuICB2YWx1ZUNob2ljZUNoYW5nZSh2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXS52YWx1ZUF0dHJpYnV0ZUNob2ljZSA9IHRoaXMuYXR0cmlidXRlQ2hvaWNlcy5maW5kKChhdHRyKSA9PiBhdHRyLmlkQXR0cmlidXRlQ2hvaWNlID09PSB2YWx1ZSk7XHJcbiAgICB0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXS52YWx1ZSA9ICh2YWx1ZSk/dmFsdWUudG9TdHJpbmcoKTp1bmRlZmluZWQ7XHJcblxyXG4gICAgdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnB1c2hBdHRyaWJ1dGVWYWx1ZSh0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXSk7XHJcbiAgfVxyXG5cclxuICB2YWx1ZU11bHRpQ2hvaWNlQ2hhbmdlKGF0dHJpYnV0ZUNob2ljZTogYW55KTogdm9pZCB7XHJcbiAgICBhdHRyaWJ1dGVDaG9pY2UudmFsdWUgPSAhYXR0cmlidXRlQ2hvaWNlLnZhbHVlO1xyXG5cclxuICAgIC8vUmVtb3ZlXHJcbiAgICBpZiAoIWF0dHJpYnV0ZUNob2ljZS52YWx1ZSkge1xyXG4gICAgICB0aGlzLmF0dHJpYnV0ZVNlcnZpY2Uuc3BsaWNlQXR0cmlidXRlVmFsdWVDaG9pY2UodGhpcy5hdHRyaWJ1dGUsIGF0dHJpYnV0ZUNob2ljZSk7XHJcbiAgICB9XHJcbiAgICAvL0FkZFxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuYXR0cmlidXRlVmFsdWVzLnB1c2goPEF0dHJpYnV0ZVZhbHVlPntcclxuICAgICAgICBjb2RlQXR0cmlidXRlRGF0YVR5cGU6IFwiQUNcIixcclxuICAgICAgICBpZEF0dHJpYnV0ZVZhbHVlOiB0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0VW5pcXVlSWQoKSxcclxuICAgICAgICBpZEF0dHJpYnV0ZVZhbHVlU2V0OiB0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0QXR0cmlidXRlVmFsdWVTZXQoKS5nZXRWYWx1ZSgpLmlkQXR0cmlidXRlVmFsdWVTZXQsXHJcbiAgICAgICAgaWRBdHRyaWJ1dGU6IHRoaXMuYXR0cmlidXRlLmlkQXR0cmlidXRlLFxyXG4gICAgICAgIHZhbHVlQXR0cmlidXRlQ2hvaWNlOiBhdHRyaWJ1dGVDaG9pY2UsXHJcbiAgICAgICAgZ3JvdXBBdHRyaWJ1dGVSb3dJZDogdGhpcy5ncm91cEF0dHJpYnV0ZVJvd0lkLFxyXG4gICAgICAgIGlkR3JvdXBBdHRyaWJ1dGU6IHRoaXMuYXR0cmlidXRlLmlkR3JvdXBBdHRyaWJ1dGVcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLmF0dHJpYnV0ZVNlcnZpY2UucHVzaEF0dHJpYnV0ZVZhbHVlTXVsdGlDaG9pY2UodGhpcy5hdHRyaWJ1dGVWYWx1ZXNbdGhpcy5hdHRyaWJ1dGVWYWx1ZXMubGVuZ3RoIC0gMV0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdmFsdWVNdWx0aURpY3RDaGFuZ2UoZW50cnk6IGFueSk6IHZvaWQge1xyXG4gICAgZW50cnkuY2hlY2tlZCA9ICFlbnRyeS5jaGVja2VkO1xyXG5cclxuICAgIC8vUmVtb3ZlXHJcbiAgICBpZiAoIWVudHJ5LmNoZWNrZWQpIHtcclxuICAgICAgdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnNwbGljZUF0dHJpYnV0ZVZhbHVlRGljdCh0aGlzLmF0dHJpYnV0ZSwgZW50cnkudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgLy9BZGRcclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmF0dHJpYnV0ZVZhbHVlcy5wdXNoKDxBdHRyaWJ1dGVWYWx1ZT57XHJcbiAgICAgICAgY29kZUF0dHJpYnV0ZURhdGFUeXBlOiBcIkRJQ1RcIixcclxuICAgICAgICBpZEF0dHJpYnV0ZVZhbHVlOiB0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0VW5pcXVlSWQoKSxcclxuICAgICAgICBpZEF0dHJpYnV0ZVZhbHVlU2V0OiB0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0QXR0cmlidXRlVmFsdWVTZXQoKS5nZXRWYWx1ZSgpLmlkQXR0cmlidXRlVmFsdWVTZXQsXHJcbiAgICAgICAgaWRBdHRyaWJ1dGU6IHRoaXMuYXR0cmlidXRlLmlkQXR0cmlidXRlLFxyXG4gICAgICAgIHZhbHVlSWREaWN0aW9uYXJ5OiBlbnRyeS52YWx1ZSxcclxuICAgICAgICBncm91cEF0dHJpYnV0ZVJvd0lkOiB0aGlzLmdyb3VwQXR0cmlidXRlUm93SWQsXHJcbiAgICAgICAgaWRHcm91cEF0dHJpYnV0ZTogdGhpcy5hdHRyaWJ1dGUuaWRHcm91cEF0dHJpYnV0ZVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuYXR0cmlidXRlU2VydmljZS5wdXNoQXR0cmlidXRlVmFsdWVNdWx0aURpY3QodGhpcy5hdHRyaWJ1dGVWYWx1ZXNbdGhpcy5hdHRyaWJ1dGVWYWx1ZXMubGVuZ3RoIC0gMV0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIGFkZEdyaWRSb3cobW9kYWw6IFRlbXBsYXRlUmVmPGFueT4sIGlkR3JvdXBBdHRyaWJ1dGU6IG51bWJlcikge1xyXG4gICAgY29uc29sZS5sb2coXCJhZGQgZ3JpZCByb3c6IFwiICsgaWRHcm91cEF0dHJpYnV0ZSk7XHJcblxyXG4gICAgLy9HZXQgYSBuZWdhdGl2ZSBJRCwgc28gd2Uga25vdyB0aGlzIGlzIGEgbmV3IHJvd1xyXG4gICAgdGhpcy5lZGl0R3JvdXBBdHRyaWJ1dGVSb3dJZCA9IHRoaXMuYXR0cmlidXRlU2VydmljZS5nZXRVbmlxdWVJZCgpO1xyXG4gICAgdGhpcy5lZGl0R3JvdXBSb3dBdHRyaWJ1dGVzID0gdGhpcy5jaGlsZEF0dHJpYnV0ZXM7XHJcblxyXG5cclxuICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4obW9kYWwsIHt3aW5kb3dDbGFzczogXCJtb2RhbC1sZ1wifSkucmVzdWx0LnRoZW4oKHJlc3VsdCkgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0ID09PSBcIlNhdmVcIikge1xyXG4gICAgICAgIHRoaXMuc2F2ZUdyaWRSb3coaWRHcm91cEF0dHJpYnV0ZSk7XHJcbiAgICAgIH0gZWxzZSBpZiAocmVzdWx0ID09PSBcIkNhbmNlbFwiKSB7XHJcbiAgICAgICAgdGhpcy5jYW5jZWxFZGl0Q29kR3JpZFJvdygpO1xyXG4gICAgICB9XHJcbiAgICB9LCAocmVhc29uKSA9PiB7fSk7XHJcbiAgfVxyXG5cclxuICBlZGl0R3JpZFJvdyhtb2RhbDogVGVtcGxhdGVSZWY8YW55PiwgaWRHcm91cEF0dHJpYnV0ZTogbnVtYmVyLCBldmVudDogUm93RG91YmxlQ2xpY2tlZEV2ZW50KSB7XHJcbiAgICAvL0VkaXRJbmxpbmUgaXMgYWN0dWFsbHkgdGhlIE9OTFkgd2F5IHRoaXMgY2FuIGJlIGVkaXRhYmxlLCBzbyB0aGlzIGlzIHJlYWxseSB3aGV0aGVyIHRoZSBncmlkIGlzIGVkaXRhYmxlLCBhdCBhbGxcclxuICAgIGlmICh0aGlzLmVkaXRJbmxpbmUpIHtcclxuICAgICAgdGhpcy5lZGl0R3JvdXBBdHRyaWJ1dGVSb3dJZCA9IGV2ZW50LmRhdGEuZ3JvdXBBdHRyaWJ1dGVSb3dJZDtcclxuICAgICAgdGhpcy5lZGl0R3JvdXBSb3dBdHRyaWJ1dGVzID0gdGhpcy5jaGlsZEF0dHJpYnV0ZXM7XHJcblxyXG5cclxuICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3Blbihtb2RhbCwge3dpbmRvd0NsYXNzOiBcIm1vZGFsLWxnXCJ9KS5yZXN1bHQudGhlbigocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gXCJTYXZlXCIpIHtcclxuICAgICAgICAgIHRoaXMuc2F2ZUdyaWRSb3coaWRHcm91cEF0dHJpYnV0ZSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQgPT09IFwiQ2FuY2VsXCIpIHtcclxuICAgICAgICAgIHRoaXMuY2FuY2VsRWRpdENvZEdyaWRSb3coKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sIChyZWFzb24pID0+IHt9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlbW92ZUdyaWRSb3coaWRHcm91cEF0dHJpYnV0ZTogbnVtYmVyKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcInJlbW92ZSBncmlkIHJvdzogXCIgKyBpZEdyb3VwQXR0cmlidXRlKTtcclxuICAgIGxldCBzZWxlY3RlZENvbHVtbnM6IFJvd05vZGVbXSA9IHRoaXMuZ3JpZEFwaS5nZXRTZWxlY3RlZE5vZGVzKCk7XHJcblxyXG4gICAgaWYgKHNlbGVjdGVkQ29sdW1ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuYXR0cmlidXRlU2VydmljZS5kZWxldGVHcmlkUm93QXR0cmlidXRlVmFsdWVzKGlkR3JvdXBBdHRyaWJ1dGUsIHNlbGVjdGVkQ29sdW1uc1swXS5kYXRhLmdyb3VwQXR0cmlidXRlUm93SWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2FuY2VsRWRpdENvZEdyaWRSb3coKSB7XHJcbiAgICB0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuY2xlYXJVcGRhdGVkR3JpZFJvd0F0dHJpYnV0ZVZhbHVlcyh0aGlzLmVkaXRHcm91cEF0dHJpYnV0ZVJvd0lkKTtcclxuICAgIHRoaXMuZWRpdEdyb3VwUm93QXR0cmlidXRlcyA9IFtdO1xyXG4gICAgdGhpcy5lZGl0R3JvdXBBdHRyaWJ1dGVSb3dJZCA9IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBWYWx1ZXMgZm9yIGEgbmV3IGdyaWQgcm93IGFyZSBzdG9yZWQgc2VwYXJhdGVseS4gIFRoaXMgZnVuY3Rpb24gd2lsbCBhZGQgdGhhdCBkYXRhIHRvIHRoZSBjdXJyZW50IGdyaWQgZGF0YSBhbmRcclxuICAgKiBwdXNoIHRoZSB2YWx1ZXMgdG8gdGhlIHNlcnZpY2UuXHJcbiAgICovXHJcbiAgc2F2ZUdyaWRSb3coaWRHcm91cEF0dHJpYnV0ZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBjb25zb2xlLmxvZyhcInNhdmUgZ3JpZCByb3dcIik7XHJcblxyXG4gICAgdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnNhdmVHcmlkUm93QXR0cmlidXRlVmFsdWVzKGlkR3JvdXBBdHRyaWJ1dGUsIHRoaXMuZWRpdEdyb3VwQXR0cmlidXRlUm93SWQpO1xyXG5cclxuICAgIHRoaXMuZWRpdEdyb3VwQXR0cmlidXRlUm93SWQgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLmVkaXRHcm91cFJvd0F0dHJpYnV0ZXMgPSBbXTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29tYm9GaWx0ZXJWYWx1ZUdldHRlcihwYXJhbXMpOiBhbnkge1xyXG4gICAgbGV0IHZhbHVlID0gcGFyYW1zLmRhdGFbcGFyYW1zLmNvbERlZi5maWVsZF07XHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgbGV0IG9wdGlvbiA9ICgocGFyYW1zLmNvbERlZiBhcyBhbnkpLnNlbGVjdE9wdGlvbnMgYXMgYW55W10pLmZpbmQoKGVudHJ5KSA9PiAoZW50cnlbcGFyYW1zLmNvbERlZi5zZWxlY3RPcHRpb25zVmFsdWVGaWVsZF0gPT09IHZhbHVlKSk7XHJcbiAgICAgIHJldHVybiBvcHRpb24gPyBvcHRpb25bcGFyYW1zLmNvbERlZi5zZWxlY3RPcHRpb25zRGlzcGxheUZpZWxkXSA6IFwiXCI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gXCJcIjtcclxuICB9XHJcbn1cclxuIl19
@@ -98,9 +98,8 @@ export class AttributeConfigurationComponent {
98
98
  post() {
99
99
  this.attributeService.updateAttributeValueSet();
100
100
  }
101
- }
102
- AttributeConfigurationComponentfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AttributeConfigurationComponent, deps: [{ token: i1.AttributeService }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: i2.NgbModal }], target: i0.ɵɵFactoryTarget.Component });
103
- AttributeConfigurationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: AttributeConfigurationComponent, selector: "hci-attribute-configuration", inputs: { idAttributeValueSet: "idAttributeValueSet", idParentObject: "idParentObject", accordionNav: "accordionNav", editInline: "editInline", editPopup: "editPopup", editable: "editable", boundData: "boundData" }, host: { properties: { "class": "this.classList" } }, queries: [{ propertyName: "cPanels", predicate: NgbPanel }], viewQueries: [{ propertyName: "accordion", first: true, predicate: NgbAccordion, descendants: true }, { propertyName: "vPanels", predicate: NgbPanel, descendants: true }], usesOnChanges: true, ngImport: i0, template: `
101
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AttributeConfigurationComponent, deps: [{ token: i1.AttributeService }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: i2.NgbModal }], target: i0.ɵɵFactoryTarget.Component }); }
102
+ static { thiscmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AttributeConfigurationComponent, selector: "hci-attribute-configuration", inputs: { idAttributeValueSet: "idAttributeValueSet", idParentObject: "idParentObject", accordionNav: "accordionNav", editInline: "editInline", editPopup: "editPopup", editable: "editable", boundData: "boundData" }, host: { properties: { "class": "this.classList" } }, queries: [{ propertyName: "cPanels", predicate: NgbPanel }], viewQueries: [{ propertyName: "accordion", first: true, predicate: NgbAccordion, descendants: true }, { propertyName: "vPanels", predicate: NgbPanel, descendants: true }], usesOnChanges: true, ngImport: i0, template: `
104
103
  <hci-busy [busySubjects]="[loadingSubject]"></hci-busy>
105
104
 
106
105
  <ng-container *ngIf="attributeConfiguration && attributeValueSet">
@@ -163,8 +162,9 @@ AttributeConfigurationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion:
163
162
  <button class="btn btn-primary" (click)="close('Cancel')">Cancel</button>
164
163
  </div>
165
164
  </ng-template>
166
- `, isInline: true, dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.NgbAccordion, selector: "ngb-accordion", inputs: ["animation", "activeIds", "closeOthers", "destroyOnHide", "type"], outputs: ["panelChange", "shown", "hidden"], exportAs: ["ngbAccordion"] }, { kind: "directive", type: i2.NgbPanel, selector: "ngb-panel", inputs: ["disabled", "id", "title", "type", "cardClass"], outputs: ["shown", "hidden"] }, { kind: "directive", type: i2.NgbPanelTitle, selector: "ng-template[ngbPanelTitle]" }, { kind: "directive", type: i2.NgbPanelContent, selector: "ng-template[ngbPanelContent]" }, { kind: "component", type: i4.BusyComponent, selector: "hci-busy", inputs: ["busy", "busySubjects", "getBusySubjects", "parentSelector", "rootClass", "icon", "iconSize", "showIcon", "mxAuto", "myAuto", "text", "template", "config"] }, { kind: "component", type: i5.AttributeAbsoluteComponent, selector: "hci-attribute-absolute" }, { kind: "component", type: i6.AttributeFlexComponent, selector: "hci-attribute-flex" }, { kind: "component", type: i7.AttributeEditComponent, selector: "hci-attribute-edit" }, { kind: "pipe", type: i8.IsGroupAttributePipe, name: "isGroupAttribute" }] });
167
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AttributeConfigurationComponent, decorators: [{
165
+ `, isInline: true, dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.NgbAccordion, selector: "ngb-accordion", inputs: ["animation", "activeIds", "closeOthers", "destroyOnHide", "type"], outputs: ["panelChange", "shown", "hidden"], exportAs: ["ngbAccordion"] }, { kind: "directive", type: i2.NgbPanel, selector: "ngb-panel", inputs: ["disabled", "id", "title", "type", "cardClass"], outputs: ["shown", "hidden"] }, { kind: "directive", type: i2.NgbPanelTitle, selector: "ng-template[ngbPanelTitle]" }, { kind: "directive", type: i2.NgbPanelContent, selector: "ng-template[ngbPanelContent]" }, { kind: "component", type: i4.BusyComponent, selector: "hci-busy", inputs: ["busy", "busySubjects", "getBusySubjects", "parentSelector", "rootClass", "icon", "iconSize", "showIcon", "mxAuto", "myAuto", "text", "template", "config"] }, { kind: "component", type: i5.AttributeAbsoluteComponent, selector: "hci-attribute-absolute" }, { kind: "component", type: i6.AttributeFlexComponent, selector: "hci-attribute-flex" }, { kind: "component", type: i7.AttributeEditComponent, selector: "hci-attribute-edit" }, { kind: "pipe", type: i8.IsGroupAttributePipe, name: "isGroupAttribute" }] }); }
166
+ }
167
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AttributeConfigurationComponent, decorators: [{
168
168
  type: Component,
169
169
  args: [{
170
170
  selector: "hci-attribute-configuration",
@@ -260,4 +260,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
260
260
  type: ViewChild,
261
261
  args: [NgbAccordion, { static: false }]
262
262
  }] } });
263
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0cmlidXRlLWNvbmZpZ3VyYXRpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY29kL3NyYy9jb21wb25lbnRzL2F0dHJpYnV0ZS1jb25maWd1cmF0aW9uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUNoRSxTQUFTLEVBQUUsU0FBUyxFQUFnQixTQUFTLEVBQUUsWUFBWSxFQUFxQixXQUFXLEVBQzVGLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBQyxZQUFZLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBRTVFLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBRXRFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLCtCQUErQixDQUFDOzs7Ozs7Ozs7O0FBSy9EOzs7O0dBSUc7QUFvRUgsTUFBTSxPQUFPLCtCQUErQjtJQTBCMUMsWUFBb0IsZ0JBQWtDLEVBQ2xDLFVBQXNCLEVBQ3RCLFFBQW1CLEVBQ25CLGlCQUFvQyxFQUNwQyxZQUFzQjtRQUp0QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLGlCQUFZLEdBQVosWUFBWSxDQUFVO1FBN0JwQixjQUFTLEdBQVcsb0VBQW9FLENBQUM7UUFPdEcsZUFBVSxHQUFZLElBQUksQ0FBQztRQUMzQixjQUFTLEdBQWEsS0FBSyxDQUFDO1FBQzVCLGFBQVEsR0FBWSxJQUFJLENBQUM7UUFRbEMs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RjsrTUFFdUIsU0FBUztzQkFBOUIsV0FBVzt1QkFBQyxPQUFPO2dCQUVYLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUVHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUcsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRWtCLE9BQU87c0JBQTlCLFlBQVk7dUJBQUMsUUFBUTtnQkFDSyxPQUFPO3NCQUFqQyxlQUFlO3VCQUFDLFFBQVE7Z0JBaURaLFNBQVM7c0JBQXJCLEtBQUs7Z0JBU0YsU0FBUztzQkFEWixTQUFTO3VCQUFDLFlBQVksRUFBRSxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIENvbnRlbnRDaGlsZHJlbiwgRWxlbWVudFJlZiwgSW5wdXQsIGlzRGV2TW9kZSwgVGVtcGxhdGVSZWYsXHJcbiAgUXVlcnlMaXN0LCBSZW5kZXJlcjIsIFNpbXBsZUNoYW5nZSwgVmlld0NoaWxkLCBWaWV3Q2hpbGRyZW4sIE9uSW5pdCwgT25EZXN0cm95LCBIb3N0QmluZGluZ1xyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQge05nYkFjY29yZGlvbiwgTmdiTW9kYWwsIE5nYlBhbmVsfSBmcm9tIFwiQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXBcIjtcclxuXHJcbmltcG9ydCB7QWNjb3JkaW9uTmF2Q29tcG9uZW50fSBmcm9tIFwiQGh1bnRzbWFuLWNhbmNlci1pbnN0aXR1dGUvbWlzY1wiO1xyXG5cclxuaW1wb3J0IHtBdHRyaWJ1dGVTZXJ2aWNlfSBmcm9tIFwiLi4vc2VydmljZXMvYXR0cmlidXRlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtBdHRyaWJ1dGVDb25maWd1cmF0aW9ufSBmcm9tIFwiLi4vbW9kZWwvYXR0cmlidXRlLWNvbmZpZ3VyYXRpb24uZW50aXR5XCI7XHJcbmltcG9ydCB7QXR0cmlidXRlVmFsdWVTZXR9IGZyb20gXCIuLi9tb2RlbC9hdHRyaWJ1dGUtdmFsdWUtc2V0LmVudGl0eVwiO1xyXG5pbXBvcnQge0F0dHJpYnV0ZUNvbnRhaW5lcn0gZnJvbSBcIi4uL21vZGVsL2F0dHJpYnV0ZS1jb250YWluZXIuZW50aXR5XCI7XHJcblxyXG4vKipcclxuICogVGhpcyBjb21wb25lbnQgc2hvdWxkIGJlIGFkZGVkIG9uIHRvIGFueSBzY3JlZW4gdGhhdCBkaXNwbGF5cyBhbiBlbnRpdHkgd2l0aCBhbiBpZEF0dHJpYnV0ZVZhbHVlU2V0LiAgVGhpcyBjb25maWd1cmF0aW9uXHJcbiAqIHJlcHJlc2VudHMgdGhlIHBhcmVudCBvZiBzZXBhcmF0ZSBjb250YWluZXJzLCB3aGljaCBpbiB0dXJuIGNvbnRhaW4gYXR0cmlidXRlcyB3aGljaCBkaXNwbGF5IHRob3NlIHZhbHVlcyBpbiB0aGVcclxuICogYXR0cmlidXRlVmFsdWVTZXQuXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJoY2ktYXR0cmlidXRlLWNvbmZpZ3VyYXRpb25cIixcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPGhjaS1idXN5IFtidXN5U3ViamVjdHNdPVwiW2xvYWRpbmdTdWJqZWN0XVwiPjwvaGNpLWJ1c3k+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImF0dHJpYnV0ZUNvbmZpZ3VyYXRpb24gJiYgYXR0cmlidXRlVmFsdWVTZXRcIj5cclxuICAgICAgPG5nYi1hY2NvcmRpb24gI2FjY29yZGlvbj1cIm5nYkFjY29yZGlvblwiIGNsYXNzPVwieS1hdXRvXCI+XHJcbiAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGF0dHJpYnV0ZUNvbnRhaW5lciBvZiBhdHRyaWJ1dGVDb25maWd1cmF0aW9uLmF0dHJpYnV0ZUNvbnRhaW5lcnNcIj5cclxuICAgICAgICAgIDxuZ2ItcGFuZWwgW2lkXT1cIidpZC1hdHRyaWJ1dGUtY29udGFpbmVyLScgKyBhdHRyaWJ1dGVDb250YWluZXIuaWRBdHRyaWJ1dGVDb250YWluZXJcIiBbdGl0bGVdPVwiYXR0cmlidXRlQ29udGFpbmVyLmNvbnRhaW5lck5hbWVcIj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nYlBhbmVsVGl0bGU+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImVkaXRQb3B1cFwiIFtpZF09XCInaWQtYXR0cmlidXRlLWNvbnRhaW5lci0nICsgYXR0cmlidXRlQ29udGFpbmVyLmlkQXR0cmlidXRlQ29udGFpbmVyICsgJy1oZWFkZXInXCJcclxuICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGZsZXgtZ3Jvdy0xIGF0dHJpYnV0ZS1jb250YWluZXItaGVhZGVyIHt7J3NvcnQtb3JkZXItJyArIGF0dHJpYnV0ZUNvbnRhaW5lci5zb3J0T3JkZXJ9fVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1sLWF1dG8gbXItMFwiIChjbGljayk9XCJlZGl0KGVkaXRNb2RhbCwgYXR0cmlidXRlQ29udGFpbmVyKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1wZW5jaWxcIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nYlBhbmVsQ29udGVudD5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXR0cmlidXRlLWNvbnRhaW5lclwiXHJcbiAgICAgICAgICAgICAgICAgICBbY2xhc3MuY29sLW1kLTEyXT1cImF0dHJpYnV0ZUNvbnRhaW5lci5pc0F1dG9MYXlvdXQgJiYgYXR0cmlidXRlQ29udGFpbmVyLmlzQXV0b0xheW91dCA9PT0gJ1knXCJcclxuICAgICAgICAgICAgICAgICAgIFtjbGFzcy5mbGV4XT1cImF0dHJpYnV0ZUNvbnRhaW5lci5pc0F1dG9MYXlvdXQgJiYgYXR0cmlidXRlQ29udGFpbmVyLmlzQXV0b0xheW91dCA9PT0gJ1knXCJcclxuICAgICAgICAgICAgICAgICAgIFtjbGFzcy5mbGV4LXdyYXBdPVwiYXR0cmlidXRlQ29udGFpbmVyLmlzQXV0b0xheW91dCAmJiBhdHRyaWJ1dGVDb250YWluZXIuaXNBdXRvTGF5b3V0ID09PSAnWSdcIlxyXG4gICAgICAgICAgICAgICAgICAgW2NsYXNzLmFic29sdXRlXT1cIiFhdHRyaWJ1dGVDb250YWluZXIuaXNBdXRvTGF5b3V0IHx8IGF0dHJpYnV0ZUNvbnRhaW5lci5pc0F1dG9MYXlvdXQgPT09ICdOJ1wiXHJcbiAgICAgICAgICAgICAgICAgICBbY2xhc3MueC1hdXRvXT1cIiFhdHRyaWJ1dGVDb250YWluZXIuaXNBdXRvTGF5b3V0IHx8IGF0dHJpYnV0ZUNvbnRhaW5lci5pc0F1dG9MYXlvdXQgPT09ICdOJ1wiXHJcbiAgICAgICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cIighYXR0cmlidXRlQ29udGFpbmVyLmlzQXV0b0xheW91dCB8fCBhdHRyaWJ1dGVDb250YWluZXIuaXNBdXRvTGF5b3V0ID09PSAnTicpID8gd2luZG93RGltZW5zaW9uLmhlaWdodCA6ICdhdXRvJ1wiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYXR0cmlidXRlIG9mIGF0dHJpYnV0ZUNvbnRhaW5lci5ncmFwaGljYWxBdHRyaWJ1dGVzIHwgaXNHcm91cEF0dHJpYnV0ZTogZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImF0dHJpYnV0ZUNvbnRhaW5lci5pc0F1dG9MYXlvdXQgJiYgYXR0cmlidXRlQ29udGFpbmVyLmlzQXV0b0xheW91dCA9PT0gJ1knICYmIGF0dHJpYnV0ZS5jb2RlQXR0cmlidXRlRGF0YVR5cGUgIT09ICdMSU5FJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxoY2ktYXR0cmlidXRlLWZsZXggW2lkXT1cIidpZC1hdHRyaWJ1dGUtJyArIGF0dHJpYnV0ZS5pZEF0dHJpYnV0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlXT1cImF0dHJpYnV0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZWRpdElubGluZV09XCJlZGl0SW5saW5lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5hdHRyaWJ1dGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuY29sLTRdPVwiYXR0cmlidXRlLmNvZGVBdHRyaWJ1dGVEYXRhVHlwZSAhPT0gJ0dBJyAmJiBhdHRyaWJ1dGUuY29kZUF0dHJpYnV0ZURhdGFUeXBlICE9PSAnTElORSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmNvbC0xMl09XCJhdHRyaWJ1dGUuY29kZUF0dHJpYnV0ZURhdGFUeXBlID09PSAnR0EnIHx8IGF0dHJpYnV0ZS5jb2RlQXR0cmlidXRlRGF0YVR5cGUgPT09ICdMSU5FJ1wiPjwvaGNpLWF0dHJpYnV0ZS1mbGV4PlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFhdHRyaWJ1dGVDb250YWluZXIuaXNBdXRvTGF5b3V0IHx8IGF0dHJpYnV0ZUNvbnRhaW5lci5pc0F1dG9MYXlvdXQgPT09ICdOJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxoY2ktYXR0cmlidXRlLWFic29sdXRlIFtpZF09XCInaWQtYXR0cmlidXRlLScgKyBhdHRyaWJ1dGUuaWRBdHRyaWJ1dGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVdPVwiYXR0cmlidXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZWRpdElubGluZV09XCJlZGl0SW5saW5lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYXR0cmlidXRlXT1cInRydWVcIj48L2hjaS1hdHRyaWJ1dGUtYWJzb2x1dGU+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICA8L25nYi1wYW5lbD5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9uZ2ItYWNjb3JkaW9uPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlICNlZGl0TW9kYWwgbGV0LWNsb3NlPVwiY2xvc2VcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxyXG4gICAgICAgIHt7ZWRpdENvbnRhaW5lci5jb250YWluZXJOYW1lfX1cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IGQtZmxleCBmbGV4LWNvbHVtbiBoY2ktY29kLWVkaXRcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBhdHRyaWJ1dGUgb2YgZWRpdENvbnRhaW5lci5ncmFwaGljYWxBdHRyaWJ1dGVzIHwgaXNHcm91cEF0dHJpYnV0ZTogZmFsc2VcIj5cclxuICAgICAgICAgIDxoY2ktYXR0cmlidXRlLWVkaXQgW2lkXT1cIidlZGl0LWlkLWF0dHJpYnV0ZS0nICsgYXR0cmlidXRlLmlkQXR0cmlidXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZV09XCJhdHRyaWJ1dGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImF0dHJpYnV0ZVwiPjwvaGNpLWF0dHJpYnV0ZS1lZGl0PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiAoY2xpY2spPVwiY2xvc2UoJ1NhdmUnKVwiPlNhdmU8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgKGNsaWNrKT1cImNsb3NlKCdDYW5jZWwnKVwiPkNhbmNlbDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgYFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQXR0cmlidXRlQ29uZmlndXJhdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBASG9zdEJpbmRpbmcoXCJjbGFzc1wiKSBjbGFzc0xpc3Q6IHN0cmluZyA9IFwiaGNpLWF0dHJpYnV0ZS1jb25maWd1cmF0aW9uIGhjaS1jb2QgZC1mbGV4IGZsZXgtY29sdW1uIGZsZXgtZ3Jvdy0xXCI7XHJcblxyXG4gIEBJbnB1dCgpIGlkQXR0cmlidXRlVmFsdWVTZXQ6IG51bWJlcjtcclxuICBASW5wdXQoKSBpZFBhcmVudE9iamVjdDogbnVtYmVyO1xyXG4gIFxyXG4gIEBJbnB1dCgpIGFjY29yZGlvbk5hdjogQWNjb3JkaW9uTmF2Q29tcG9uZW50O1xyXG4gIFxyXG4gIEBJbnB1dCgpIGVkaXRJbmxpbmU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGVkaXRQb3B1cDogYm9vbGVhbiA9ICBmYWxzZTtcclxuICBASW5wdXQoKSBlZGl0YWJsZTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oTmdiUGFuZWwpIHZQYW5lbHM6IFF1ZXJ5TGlzdDxOZ2JQYW5lbD47XHJcbiAgQENvbnRlbnRDaGlsZHJlbihOZ2JQYW5lbCkgY1BhbmVsczogUXVlcnlMaXN0PE5nYlBhbmVsPjtcclxuXHJcbiAgYXR0cmlidXRlQ29uZmlndXJhdGlvbjogQXR0cmlidXRlQ29uZmlndXJhdGlvbjtcclxuICBhdHRyaWJ1dGVWYWx1ZVNldDogQXR0cmlidXRlVmFsdWVTZXQ7XHJcblxyXG4gIGxvYWRpbmdTdWJqZWN0OiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuXHJcbiAgZWRpdENvbnRhaW5lcjogQXR0cmlidXRlQ29udGFpbmVyO1xyXG5cclxuICB3aW5kb3dEaW1lbnNpb246IGFueSA9IHt9O1xyXG5cclxuICBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYXR0cmlidXRlU2VydmljZTogQXR0cmlidXRlU2VydmljZSxcclxuICAgICAgICAgICAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCkge31cclxuXHJcbiAgLyoqXHJcbiAgICogVXBvbiBpbml0LCBzdWJzY3JpYmUgdG8gdGhlIGNvbmZpZ3VyYXRpb24gYW5kIHZhbHVlIHNldC5cclxuICAgKi9cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGlmICghIHRoaXMuZWRpdGFibGUpIHtcclxuICAgICAgdGhpcy5lZGl0SW5saW5lID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuZWRpdFBvcHVwID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRoaXMubG9hZGluZ1N1YmplY3QgPSB0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0TG9hZGluZ1N1YmplY3QoKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMuYXR0cmlidXRlU2VydmljZS5nZXRBdHRyaWJ1dGVDb25maWd1cmF0aW9uU3ViamVjdCgpLnN1YnNjcmliZSgoYXR0cmlidXRlQ29uZmlndXJhdGlvbjogQXR0cmlidXRlQ29uZmlndXJhdGlvbikgPT4ge1xyXG4gICAgICB0aGlzLmF0dHJpYnV0ZUNvbmZpZ3VyYXRpb24gPSBhdHRyaWJ1dGVDb25maWd1cmF0aW9uO1xyXG4gICAgICBcclxuICAgICAgdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnNldEF0dHJpYnV0ZVZhbHVlU2V0KHRoaXMuaWRBdHRyaWJ1dGVWYWx1ZVNldCwgdGhpcy5pZFBhcmVudE9iamVjdCk7XHJcbiAgICB9KSk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuYXR0cmlidXRlQ29uZmlndXJhdGlvbkRpbWVuc2lvblN1YmplY3Quc3Vic2NyaWJlKCh3aW5kb3dEaW1lbnNpb246IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLndpbmRvd0RpbWVuc2lvbiA9IHdpbmRvd0RpbWVuc2lvbjtcclxuICAgIH0pKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMuYXR0cmlidXRlU2VydmljZS5nZXRBdHRyaWJ1dGVWYWx1ZVNldCgpLnN1YnNjcmliZSgoYXR0cmlidXRlVmFsdWVTZXQ6IEF0dHJpYnV0ZVZhbHVlU2V0KSA9PiB7XHJcbiAgICAgIHRoaXMuYXR0cmlidXRlVmFsdWVTZXQgPSBhdHRyaWJ1dGVWYWx1ZVNldDtcclxuICAgICAgXHJcbiAgICAgIGlmICh0aGlzLmF0dHJpYnV0ZVZhbHVlU2V0KSB7XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLm5vdGlmeUF0dHJpYnV0ZXMoKTtcclxuICAgICAgfVxyXG4gICAgfSkpO1xyXG4gIH1cclxuICBcclxuICBASW5wdXQoKSBzZXQgYm91bmREYXRhKHZhbHVlOiBhbnkpIHtcclxuICAgIHRoaXMuYXR0cmlidXRlU2VydmljZS5zZXRCb3VuZERhdGEodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIEBWaWV3Q2hpbGQoTmdiQWNjb3JkaW9uLCB7c3RhdGljOiBmYWxzZX0pXHJcbiAgc2V0IGFjY29yZGlvbihhY2NvcmRpb246IE5nYkFjY29yZGlvbikge1xyXG4gICAgaWYgKGFjY29yZGlvbikge1xyXG4gICAgICBhY2NvcmRpb24ucGFuZWxzLnJlc2V0KFt0aGlzLmNQYW5lbHMudG9BcnJheSgpLCB0aGlzLnZQYW5lbHMudG9BcnJheSgpXSk7XHJcbiAgICAgIGFjY29yZGlvbi5uZ0FmdGVyQ29udGVudENoZWNrZWQoKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmFjY29yZGlvbk5hdiAmJiAhdGhpcy5hY2NvcmRpb25OYXYuYWNjb3JkaW9uKSB7XHJcbiAgICAgICAgdGhpcy5hY2NvcmRpb25OYXYuc2V0QWNjb3JkaW9uKGFjY29yZGlvbik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczoge1twcm9wTmFtZTogc3RyaW5nXTogU2ltcGxlQ2hhbmdlfSkge1xyXG4gICAgaWYgKCEgdGhpcy5lZGl0YWJsZSkge1xyXG4gICAgICB0aGlzLmVkaXRJbmxpbmUgPSBmYWxzZTtcclxuICAgICAgdGhpcy5lZGl0UG9wdXAgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgaWYgKGNoYW5nZXNbXCJhY2NvcmRpb25OYXZcIl0gJiYgdGhpcy5hY2NvcmRpb25OYXYgJiYgdGhpcy5hY2NvcmRpb24pIHtcclxuICAgICAgdGhpcy5hY2NvcmRpb25OYXYuYWNjb3JkaW9uID0gdGhpcy5hY2NvcmRpb247XHJcbiAgICAgIHRoaXMuYWNjb3JkaW9uTmF2LnBhbmVscyA9IHRoaXMuYWNjb3JkaW9uLnBhbmVscztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldEF0dHJpYnV0ZVNlcnZpY2UoKTogQXR0cmlidXRlU2VydmljZSB7XHJcbiAgICByZXR1cm4gdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlO1xyXG4gIH1cclxuXHJcbiAgZWRpdChtb2RhbDogVGVtcGxhdGVSZWY8YW55PiwgZWRpdENvbnRhaW5lcjogQXR0cmlidXRlQ29udGFpbmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLmVkaXRDb250YWluZXIgPSBlZGl0Q29udGFpbmVyO1xyXG5cclxuICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4obW9kYWwsIHt3aW5kb3dDbGFzczogXCJtb2RhbC1sZ1wifSkucmVzdWx0LnRoZW4oKHJlc3VsdCkgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0ID09PSBcIlNhdmVcIikge1xyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlU2VydmljZS51cGRhdGVBdHRyaWJ1dGVWYWx1ZVNldCgpO1xyXG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PT0gXCJDYW5jZWxcIikge1xyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlU2VydmljZS5jbGVhclVwZGF0ZWRBdHRyaWJ1dGVWYWx1ZXMoKTtcclxuICAgICAgfVxyXG4gICAgfSwgKHJlYXNvbikgPT4ge30pO1xyXG4gIH1cclxuXHJcbiAgcG9zdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuYXR0cmlidXRlU2VydmljZS51cGRhdGVBdHRyaWJ1dGVWYWx1ZVNldCgpO1xyXG4gIH1cclxuXHJcbn1cclxuIl19
263
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0cmlidXRlLWNvbmZpZ3VyYXRpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY29kL3NyYy9jb21wb25lbnRzL2F0dHJpYnV0ZS1jb25maWd1cmF0aW9uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUNoRSxTQUFTLEVBQUUsU0FBUyxFQUFnQixTQUFTLEVBQUUsWUFBWSxFQUFxQixXQUFXLEVBQzVGLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBQyxZQUFZLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBRTVFLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBRXRFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLCtCQUErQixDQUFDOzs7Ozs7Ozs7O0FBSy9EOzs7O0dBSUc7QUFvRUgsTUFBTSxPQUFPLCtCQUErQjtJQTBCMUMsWUFBb0IsZ0JBQWtDLEVBQ2xDLFVBQXNCLEVBQ3RCLFFBQW1CLEVBQ25CLGlCQUFvQyxFQUNwQyxZQUFzQjtRQUp0QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLGlCQUFZLEdBQVosWUFBWSxDQUFVO1FBN0JwQixjQUFTLEdBQVcsb0VBQW9FLENBQUM7UUFPdEcsZUFBVSxHQUFZLElBQUksQ0FBQztRQUMzQixjQUFTLEdBQWEsS0FBSyxDQUFDO1FBQzVCLGFBQVEsR0FBWSxJQUFJLENBQUM7UUFRbEMs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RjsrTUFFdUIsU0FBUztzQkFBOUIsV0FBVzt1QkFBQyxPQUFPO2dCQUVYLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUVHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUcsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRWtCLE9BQU87c0JBQTlCLFlBQVk7dUJBQUMsUUFBUTtnQkFDSyxPQUFPO3NCQUFqQyxlQUFlO3VCQUFDLFFBQVE7Z0JBaURaLFNBQVM7c0JBQXJCLEtBQUs7Z0JBU0YsU0FBUztzQkFEWixTQUFTO3VCQUFDLFlBQVksRUFBRSxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIENvbnRlbnRDaGlsZHJlbiwgRWxlbWVudFJlZiwgSW5wdXQsIGlzRGV2TW9kZSwgVGVtcGxhdGVSZWYsXHJcbiAgUXVlcnlMaXN0LCBSZW5kZXJlcjIsIFNpbXBsZUNoYW5nZSwgVmlld0NoaWxkLCBWaWV3Q2hpbGRyZW4sIE9uSW5pdCwgT25EZXN0cm95LCBIb3N0QmluZGluZ1xyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQge05nYkFjY29yZGlvbiwgTmdiTW9kYWwsIE5nYlBhbmVsfSBmcm9tIFwiQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXBcIjtcclxuXHJcbmltcG9ydCB7QWNjb3JkaW9uTmF2Q29tcG9uZW50fSBmcm9tIFwiQGh1bnRzbWFuLWNhbmNlci1pbnN0aXR1dGUvbWlzY1wiO1xyXG5cclxuaW1wb3J0IHtBdHRyaWJ1dGVTZXJ2aWNlfSBmcm9tIFwiLi4vc2VydmljZXMvYXR0cmlidXRlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtBdHRyaWJ1dGVDb25maWd1cmF0aW9ufSBmcm9tIFwiLi4vbW9kZWwvYXR0cmlidXRlLWNvbmZpZ3VyYXRpb24uZW50aXR5XCI7XHJcbmltcG9ydCB7QXR0cmlidXRlVmFsdWVTZXR9IGZyb20gXCIuLi9tb2RlbC9hdHRyaWJ1dGUtdmFsdWUtc2V0LmVudGl0eVwiO1xyXG5pbXBvcnQge0F0dHJpYnV0ZUNvbnRhaW5lcn0gZnJvbSBcIi4uL21vZGVsL2F0dHJpYnV0ZS1jb250YWluZXIuZW50aXR5XCI7XHJcblxyXG4vKipcclxuICogVGhpcyBjb21wb25lbnQgc2hvdWxkIGJlIGFkZGVkIG9uIHRvIGFueSBzY3JlZW4gdGhhdCBkaXNwbGF5cyBhbiBlbnRpdHkgd2l0aCBhbiBpZEF0dHJpYnV0ZVZhbHVlU2V0LiAgVGhpcyBjb25maWd1cmF0aW9uXHJcbiAqIHJlcHJlc2VudHMgdGhlIHBhcmVudCBvZiBzZXBhcmF0ZSBjb250YWluZXJzLCB3aGljaCBpbiB0dXJuIGNvbnRhaW4gYXR0cmlidXRlcyB3aGljaCBkaXNwbGF5IHRob3NlIHZhbHVlcyBpbiB0aGVcclxuICogYXR0cmlidXRlVmFsdWVTZXQuXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJoY2ktYXR0cmlidXRlLWNvbmZpZ3VyYXRpb25cIixcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPGhjaS1idXN5IFtidXN5U3ViamVjdHNdPVwiW2xvYWRpbmdTdWJqZWN0XVwiPjwvaGNpLWJ1c3k+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImF0dHJpYnV0ZUNvbmZpZ3VyYXRpb24gJiYgYXR0cmlidXRlVmFsdWVTZXRcIj5cclxuICAgICAgPG5nYi1hY2NvcmRpb24gI2FjY29yZGlvbj1cIm5nYkFjY29yZGlvblwiIGNsYXNzPVwieS1hdXRvXCI+XHJcbiAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGF0dHJpYnV0ZUNvbnRhaW5lciBvZiBhdHRyaWJ1dGVDb25maWd1cmF0aW9uLmF0dHJpYnV0ZUNvbnRhaW5lcnNcIj5cclxuICAgICAgICAgIDxuZ2ItcGFuZWwgW2lkXT1cIidpZC1hdHRyaWJ1dGUtY29udGFpbmVyLScgKyBhdHRyaWJ1dGVDb250YWluZXIuaWRBdHRyaWJ1dGVDb250YWluZXJcIiBbdGl0bGVdPVwiYXR0cmlidXRlQ29udGFpbmVyLmNvbnRhaW5lck5hbWVcIj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nYlBhbmVsVGl0bGU+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImVkaXRQb3B1cFwiIFtpZF09XCInaWQtYXR0cmlidXRlLWNvbnRhaW5lci0nICsgYXR0cmlidXRlQ29udGFpbmVyLmlkQXR0cmlidXRlQ29udGFpbmVyICsgJy1oZWFkZXInXCJcclxuICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGZsZXgtZ3Jvdy0xIGF0dHJpYnV0ZS1jb250YWluZXItaGVhZGVyIHt7J3NvcnQtb3JkZXItJyArIGF0dHJpYnV0ZUNvbnRhaW5lci5zb3J0T3JkZXJ9fVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1sLWF1dG8gbXItMFwiIChjbGljayk9XCJlZGl0KGVkaXRNb2RhbCwgYXR0cmlidXRlQ29udGFpbmVyKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1wZW5jaWxcIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nYlBhbmVsQ29udGVudD5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXR0cmlidXRlLWNvbnRhaW5lclwiXHJcbiAgICAgICAgICAgICAgICAgICBbY2xhc3MuY29sLW1kLTEyXT1cImF0dHJpYnV0ZUNvbnRhaW5lci5pc0F1dG9MYXlvdXQgJiYgYXR0cmlidXRlQ29udGFpbmVyLmlzQXV0b0xheW91dCA9PT0gJ1knXCJcclxuICAgICAgICAgICAgICAgICAgIFtjbGFzcy5mbGV4XT1cImF0dHJpYnV0ZUNvbnRhaW5lci5pc0F1dG9MYXlvdXQgJiYgYXR0cmlidXRlQ29udGFpbmVyLmlzQXV0b0xheW91dCA9PT0gJ1knXCJcclxuICAgICAgICAgICAgICAgICAgIFtjbGFzcy5mbGV4LXdyYXBdPVwiYXR0cmlidXRlQ29udGFpbmVyLmlzQXV0b0xheW91dCAmJiBhdHRyaWJ1dGVDb250YWluZXIuaXNBdXRvTGF5b3V0ID09PSAnWSdcIlxyXG4gICAgICAgICAgICAgICAgICAgW2NsYXNzLmFic29sdXRlXT1cIiFhdHRyaWJ1dGVDb250YWluZXIuaXNBdXRvTGF5b3V0IHx8IGF0dHJpYnV0ZUNvbnRhaW5lci5pc0F1dG9MYXlvdXQgPT09ICdOJ1wiXHJcbiAgICAgICAgICAgICAgICAgICBbY2xhc3MueC1hdXRvXT1cIiFhdHRyaWJ1dGVDb250YWluZXIuaXNBdXRvTGF5b3V0IHx8IGF0dHJpYnV0ZUNvbnRhaW5lci5pc0F1dG9MYXlvdXQgPT09ICdOJ1wiXHJcbiAgICAgICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cIighYXR0cmlidXRlQ29udGFpbmVyLmlzQXV0b0xheW91dCB8fCBhdHRyaWJ1dGVDb250YWluZXIuaXNBdXRvTGF5b3V0ID09PSAnTicpID8gd2luZG93RGltZW5zaW9uLmhlaWdodCA6ICdhdXRvJ1wiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYXR0cmlidXRlIG9mIGF0dHJpYnV0ZUNvbnRhaW5lci5ncmFwaGljYWxBdHRyaWJ1dGVzIHwgaXNHcm91cEF0dHJpYnV0ZTogZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImF0dHJpYnV0ZUNvbnRhaW5lci5pc0F1dG9MYXlvdXQgJiYgYXR0cmlidXRlQ29udGFpbmVyLmlzQXV0b0xheW91dCA9PT0gJ1knICYmIGF0dHJpYnV0ZS5jb2RlQXR0cmlidXRlRGF0YVR5cGUgIT09ICdMSU5FJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxoY2ktYXR0cmlidXRlLWZsZXggW2lkXT1cIidpZC1hdHRyaWJ1dGUtJyArIGF0dHJpYnV0ZS5pZEF0dHJpYnV0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlXT1cImF0dHJpYnV0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZWRpdElubGluZV09XCJlZGl0SW5saW5lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5hdHRyaWJ1dGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuY29sLTRdPVwiYXR0cmlidXRlLmNvZGVBdHRyaWJ1dGVEYXRhVHlwZSAhPT0gJ0dBJyAmJiBhdHRyaWJ1dGUuY29kZUF0dHJpYnV0ZURhdGFUeXBlICE9PSAnTElORSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmNvbC0xMl09XCJhdHRyaWJ1dGUuY29kZUF0dHJpYnV0ZURhdGFUeXBlID09PSAnR0EnIHx8IGF0dHJpYnV0ZS5jb2RlQXR0cmlidXRlRGF0YVR5cGUgPT09ICdMSU5FJ1wiPjwvaGNpLWF0dHJpYnV0ZS1mbGV4PlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFhdHRyaWJ1dGVDb250YWluZXIuaXNBdXRvTGF5b3V0IHx8IGF0dHJpYnV0ZUNvbnRhaW5lci5pc0F1dG9MYXlvdXQgPT09ICdOJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxoY2ktYXR0cmlidXRlLWFic29sdXRlIFtpZF09XCInaWQtYXR0cmlidXRlLScgKyBhdHRyaWJ1dGUuaWRBdHRyaWJ1dGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVdPVwiYXR0cmlidXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZWRpdElubGluZV09XCJlZGl0SW5saW5lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYXR0cmlidXRlXT1cInRydWVcIj48L2hjaS1hdHRyaWJ1dGUtYWJzb2x1dGU+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICA8L25nYi1wYW5lbD5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9uZ2ItYWNjb3JkaW9uPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlICNlZGl0TW9kYWwgbGV0LWNsb3NlPVwiY2xvc2VcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxyXG4gICAgICAgIHt7ZWRpdENvbnRhaW5lci5jb250YWluZXJOYW1lfX1cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IGQtZmxleCBmbGV4LWNvbHVtbiBoY2ktY29kLWVkaXRcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBhdHRyaWJ1dGUgb2YgZWRpdENvbnRhaW5lci5ncmFwaGljYWxBdHRyaWJ1dGVzIHwgaXNHcm91cEF0dHJpYnV0ZTogZmFsc2VcIj5cclxuICAgICAgICAgIDxoY2ktYXR0cmlidXRlLWVkaXQgW2lkXT1cIidlZGl0LWlkLWF0dHJpYnV0ZS0nICsgYXR0cmlidXRlLmlkQXR0cmlidXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZV09XCJhdHRyaWJ1dGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImF0dHJpYnV0ZVwiPjwvaGNpLWF0dHJpYnV0ZS1lZGl0PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiAoY2xpY2spPVwiY2xvc2UoJ1NhdmUnKVwiPlNhdmU8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgKGNsaWNrKT1cImNsb3NlKCdDYW5jZWwnKVwiPkNhbmNlbDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgYFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQXR0cmlidXRlQ29uZmlndXJhdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBASG9zdEJpbmRpbmcoXCJjbGFzc1wiKSBjbGFzc0xpc3Q6IHN0cmluZyA9IFwiaGNpLWF0dHJpYnV0ZS1jb25maWd1cmF0aW9uIGhjaS1jb2QgZC1mbGV4IGZsZXgtY29sdW1uIGZsZXgtZ3Jvdy0xXCI7XHJcblxyXG4gIEBJbnB1dCgpIGlkQXR0cmlidXRlVmFsdWVTZXQ6IG51bWJlcjtcclxuICBASW5wdXQoKSBpZFBhcmVudE9iamVjdDogbnVtYmVyO1xyXG4gIFxyXG4gIEBJbnB1dCgpIGFjY29yZGlvbk5hdjogQWNjb3JkaW9uTmF2Q29tcG9uZW50O1xyXG4gIFxyXG4gIEBJbnB1dCgpIGVkaXRJbmxpbmU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGVkaXRQb3B1cDogYm9vbGVhbiA9ICBmYWxzZTtcclxuICBASW5wdXQoKSBlZGl0YWJsZTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oTmdiUGFuZWwpIHZQYW5lbHM6IFF1ZXJ5TGlzdDxOZ2JQYW5lbD47XHJcbiAgQENvbnRlbnRDaGlsZHJlbihOZ2JQYW5lbCkgY1BhbmVsczogUXVlcnlMaXN0PE5nYlBhbmVsPjtcclxuXHJcbiAgYXR0cmlidXRlQ29uZmlndXJhdGlvbjogQXR0cmlidXRlQ29uZmlndXJhdGlvbjtcclxuICBhdHRyaWJ1dGVWYWx1ZVNldDogQXR0cmlidXRlVmFsdWVTZXQ7XHJcblxyXG4gIGxvYWRpbmdTdWJqZWN0OiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuXHJcbiAgZWRpdENvbnRhaW5lcjogQXR0cmlidXRlQ29udGFpbmVyO1xyXG5cclxuICB3aW5kb3dEaW1lbnNpb246IGFueSA9IHt9O1xyXG5cclxuICBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYXR0cmlidXRlU2VydmljZTogQXR0cmlidXRlU2VydmljZSxcclxuICAgICAgICAgICAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCkge31cclxuXHJcbiAgLyoqXHJcbiAgICogVXBvbiBpbml0LCBzdWJzY3JpYmUgdG8gdGhlIGNvbmZpZ3VyYXRpb24gYW5kIHZhbHVlIHNldC5cclxuICAgKi9cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGlmICghIHRoaXMuZWRpdGFibGUpIHtcclxuICAgICAgdGhpcy5lZGl0SW5saW5lID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuZWRpdFBvcHVwID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRoaXMubG9hZGluZ1N1YmplY3QgPSB0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0TG9hZGluZ1N1YmplY3QoKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMuYXR0cmlidXRlU2VydmljZS5nZXRBdHRyaWJ1dGVDb25maWd1cmF0aW9uU3ViamVjdCgpLnN1YnNjcmliZSgoYXR0cmlidXRlQ29uZmlndXJhdGlvbjogQXR0cmlidXRlQ29uZmlndXJhdGlvbikgPT4ge1xyXG4gICAgICB0aGlzLmF0dHJpYnV0ZUNvbmZpZ3VyYXRpb24gPSBhdHRyaWJ1dGVDb25maWd1cmF0aW9uO1xyXG4gICAgICBcclxuICAgICAgdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnNldEF0dHJpYnV0ZVZhbHVlU2V0KHRoaXMuaWRBdHRyaWJ1dGVWYWx1ZVNldCwgdGhpcy5pZFBhcmVudE9iamVjdCk7XHJcbiAgICB9KSk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuYXR0cmlidXRlQ29uZmlndXJhdGlvbkRpbWVuc2lvblN1YmplY3Quc3Vic2NyaWJlKCh3aW5kb3dEaW1lbnNpb246IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLndpbmRvd0RpbWVuc2lvbiA9IHdpbmRvd0RpbWVuc2lvbjtcclxuICAgIH0pKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMuYXR0cmlidXRlU2VydmljZS5nZXRBdHRyaWJ1dGVWYWx1ZVNldCgpLnN1YnNjcmliZSgoYXR0cmlidXRlVmFsdWVTZXQ6IEF0dHJpYnV0ZVZhbHVlU2V0KSA9PiB7XHJcbiAgICAgIHRoaXMuYXR0cmlidXRlVmFsdWVTZXQgPSBhdHRyaWJ1dGVWYWx1ZVNldDtcclxuICAgICAgXHJcbiAgICAgIGlmICh0aGlzLmF0dHJpYnV0ZVZhbHVlU2V0KSB7XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLm5vdGlmeUF0dHJpYnV0ZXMoKTtcclxuICAgICAgfVxyXG4gICAgfSkpO1xyXG4gIH1cclxuICBcclxuICBASW5wdXQoKSBzZXQgYm91bmREYXRhKHZhbHVlOiBhbnkpIHtcclxuICAgIHRoaXMuYXR0cmlidXRlU2VydmljZS5zZXRCb3VuZERhdGEodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIEBWaWV3Q2hpbGQoTmdiQWNjb3JkaW9uLCB7c3RhdGljOiBmYWxzZX0pXHJcbiAgc2V0IGFjY29yZGlvbihhY2NvcmRpb246IE5nYkFjY29yZGlvbikge1xyXG4gICAgaWYgKGFjY29yZGlvbikge1xyXG4gICAgICBhY2NvcmRpb24ucGFuZWxzLnJlc2V0KFt0aGlzLmNQYW5lbHMudG9BcnJheSgpLCB0aGlzLnZQYW5lbHMudG9BcnJheSgpXSk7XHJcbiAgICAgIGFjY29yZGlvbi5uZ0FmdGVyQ29udGVudENoZWNrZWQoKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmFjY29yZGlvbk5hdiAmJiAhdGhpcy5hY2NvcmRpb25OYXYuYWNjb3JkaW9uKSB7XHJcbiAgICAgICAgdGhpcy5hY2NvcmRpb25OYXYuc2V0QWNjb3JkaW9uKGFjY29yZGlvbik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczoge1twcm9wTmFtZTogc3RyaW5nXTogU2ltcGxlQ2hhbmdlfSkge1xyXG4gICAgaWYgKCEgdGhpcy5lZGl0YWJsZSkge1xyXG4gICAgICB0aGlzLmVkaXRJbmxpbmUgPSBmYWxzZTtcclxuICAgICAgdGhpcy5lZGl0UG9wdXAgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgaWYgKGNoYW5nZXNbXCJhY2NvcmRpb25OYXZcIl0gJiYgdGhpcy5hY2NvcmRpb25OYXYgJiYgdGhpcy5hY2NvcmRpb24pIHtcclxuICAgICAgdGhpcy5hY2NvcmRpb25OYXYuYWNjb3JkaW9uID0gdGhpcy5hY2NvcmRpb247XHJcbiAgICAgIHRoaXMuYWNjb3JkaW9uTmF2LnBhbmVscyA9IHRoaXMuYWNjb3JkaW9uLnBhbmVscztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldEF0dHJpYnV0ZVNlcnZpY2UoKTogQXR0cmlidXRlU2VydmljZSB7XHJcbiAgICByZXR1cm4gdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlO1xyXG4gIH1cclxuXHJcbiAgZWRpdChtb2RhbDogVGVtcGxhdGVSZWY8YW55PiwgZWRpdENvbnRhaW5lcjogQXR0cmlidXRlQ29udGFpbmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLmVkaXRDb250YWluZXIgPSBlZGl0Q29udGFpbmVyO1xyXG5cclxuICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4obW9kYWwsIHt3aW5kb3dDbGFzczogXCJtb2RhbC1sZ1wifSkucmVzdWx0LnRoZW4oKHJlc3VsdCkgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0ID09PSBcIlNhdmVcIikge1xyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlU2VydmljZS51cGRhdGVBdHRyaWJ1dGVWYWx1ZVNldCgpO1xyXG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PT0gXCJDYW5jZWxcIikge1xyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlU2VydmljZS5jbGVhclVwZGF0ZWRBdHRyaWJ1dGVWYWx1ZXMoKTtcclxuICAgICAgfVxyXG4gICAgfSwgKHJlYXNvbikgPT4ge30pO1xyXG4gIH1cclxuXHJcbiAgcG9zdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuYXR0cmlidXRlU2VydmljZS51cGRhdGVBdHRyaWJ1dGVWYWx1ZVNldCgpO1xyXG4gIH1cclxuXHJcbn1cclxuIl19
@@ -114,9 +114,8 @@ export class AttributeContainerComponent {
114
114
  return this.attributeConfiguration.attributeContainers.find(x => x.idAttributeContainer === idAttributeContainer);
115
115
  }
116
116
  }
117
- }
118
- AttributeContainerComponentfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AttributeContainerComponent, deps: [{ token: i1.AttributeService }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: i2.NgbModal }], target: i0.ɵɵFactoryTarget.Component });
119
- AttributeContainerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: AttributeContainerComponent, selector: "hci-attribute-container", inputs: { idAttributeValueSet: "idAttributeValueSet", idAttributeConfiguration: "idAttributeConfiguration", idAttributeContainer: "idAttributeContainer", indexOfContainer: "indexOfContainer", idParentObject: "idParentObject", attributeContainer: "attributeContainer", attributeConfiguration: "attributeConfiguration", attributeValueSet: "attributeValueSet", editInline: "editInline", editPopup: "editPopup", editable: "editable", boundData: "boundData" }, host: { properties: { "class": "this.classList" } }, usesOnChanges: true, ngImport: i0, template: `
117
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AttributeContainerComponent, deps: [{ token: i1.AttributeService }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: i2.NgbModal }], target: i0.ɵɵFactoryTarget.Component }); }
118
+ static { thiscmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AttributeContainerComponent, selector: "hci-attribute-container", inputs: { idAttributeValueSet: "idAttributeValueSet", idAttributeConfiguration: "idAttributeConfiguration", idAttributeContainer: "idAttributeContainer", indexOfContainer: "indexOfContainer", idParentObject: "idParentObject", attributeContainer: "attributeContainer", attributeConfiguration: "attributeConfiguration", attributeValueSet: "attributeValueSet", editInline: "editInline", editPopup: "editPopup", editable: "editable", boundData: "boundData" }, host: { properties: { "class": "this.classList" } }, usesOnChanges: true, ngImport: i0, template: `
120
119
  <hci-busy [getBusySubjects]="getBusySubjects"></hci-busy>
121
120
 
122
121
  <ng-container *ngIf="attributeContainer">
@@ -168,8 +167,9 @@ AttributeContainerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.
168
167
  <button class="btn btn-primary" (click)="close('Cancel')">Cancel</button>
169
168
  </div>
170
169
  </ng-template>
171
- `, isInline: true, dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.BusyComponent, selector: "hci-busy", inputs: ["busy", "busySubjects", "getBusySubjects", "parentSelector", "rootClass", "icon", "iconSize", "showIcon", "mxAuto", "myAuto", "text", "template", "config"] }, { kind: "component", type: i5.AttributeAbsoluteComponent, selector: "hci-attribute-absolute" }, { kind: "component", type: i6.AttributeFlexComponent, selector: "hci-attribute-flex" }, { kind: "component", type: i7.AttributeEditComponent, selector: "hci-attribute-edit" }, { kind: "pipe", type: i8.IsGroupAttributePipe, name: "isGroupAttribute" }] });
172
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AttributeContainerComponent, decorators: [{
170
+ `, isInline: true, dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.BusyComponent, selector: "hci-busy", inputs: ["busy", "busySubjects", "getBusySubjects", "parentSelector", "rootClass", "icon", "iconSize", "showIcon", "mxAuto", "myAuto", "text", "template", "config"] }, { kind: "component", type: i5.AttributeAbsoluteComponent, selector: "hci-attribute-absolute" }, { kind: "component", type: i6.AttributeFlexComponent, selector: "hci-attribute-flex" }, { kind: "component", type: i7.AttributeEditComponent, selector: "hci-attribute-edit" }, { kind: "pipe", type: i8.IsGroupAttributePipe, name: "isGroupAttribute" }] }); }
171
+ }
172
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AttributeContainerComponent, decorators: [{
173
173
  type: Component,
174
174
  args: [{
175
175
  selector: "hci-attribute-container",
@@ -255,4 +255,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
255
255
  }], boundData: [{
256
256
  type: Input
257
257
  }] } });
258
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0cmlidXRlLWNvbnRhaW5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb2Qvc3JjL2NvbXBvbmVudHMvYXR0cmlidXRlLWNvbnRhaW5lci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGlCQUFpQixFQUFFLFNBQVMsRUFBbUIsVUFBVSxFQUFFLEtBQUssRUFDckQsU0FBUyxFQUErQixXQUFXLEVBQy9ELE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBVyxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFDLFFBQVEsRUFBVyxNQUFNLDRCQUE0QixDQUFDO0FBRTlELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLCtCQUErQixDQUFDOzs7Ozs7Ozs7O0FBSy9EOzs7O0dBSUc7QUF5REgsTUFBTSxPQUFPLDJCQUEyQjtJQWdDdEMsWUFBb0IsZ0JBQWtDLEVBQ2xDLFVBQXNCLEVBQ3RCLFFBQW1CLEVBQ25CLGlCQUFvQyxFQUNwQyxZQUFzQjtRQUp0QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLGlCQUFZLEdBQVosWUFBWSxDQUFVO1FBbkNwQixjQUFTLEdBQVcsb0VBQW9FLENBQUM7UUFZdEcsZUFBVSxHQUFZLElBQUksQ0FBQztRQUMzQixjQUFTLEdBQWEsS0FBSyxDQUFDO1FBQzVCLGFBQVEsR0FBWSxJQUFJLENBQUM7UUFJbEMsb0JBQWUsR0FBUSxFQUFFLENBQUM7UUFFMUIsa0JBQWEsR0FBaUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUVqRCxvQkFBZSxHQUFhLEdBQUcsRUFBRTtZQUMvQixJQUFJLFFBQVEsR0FBVSxFQUFFLENBQUM7WUFFekIs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LElBQUksSUFBSSxDQUFDLHNCQUFzQixFQUFFO1lBQy9CLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsS0FBSyxvQkFBb0IsQ0FBQyxDQUFDO1NBQ25IO0lBQ0gsQ0FBQzs7eUhBcElVLDJCQUEyQjs2R0FBM0IsMkJBQTJCLGlsQkF0RDVCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0RUOzRGQUVVLDJCQUEyQjtrQkF4RHZDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHlCQUF5QjtvQkFDbkMsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0RUO2lCQUNGOytNQUV1QixTQUFTO3NCQUE5QixXQUFXO3VCQUFDLE9BQU87Z0JBRVgsbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLHdCQUF3QjtzQkFBaEMsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBRUcsa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBRUcsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBaUVPLFNBQVM7c0JBQXJCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIENvbnRlbnRDaGlsZHJlbiwgRWxlbWVudFJlZiwgSW5wdXQsIGlzRGV2TW9kZSxcclxuICBRdWVyeUxpc3QsIFJlbmRlcmVyMiwgVmlld0NoaWxkcmVuLCBTaW1wbGVDaGFuZ2VzLCBIb3N0QmluZGluZywgVGVtcGxhdGVSZWZcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQge05nYk1vZGFsLCBOZ2JQYW5lbH0gZnJvbSBcIkBuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwXCI7XHJcbmltcG9ydCB7QWNjb3JkaW9uTmF2Q29tcG9uZW50fSBmcm9tIFwiQGh1bnRzbWFuLWNhbmNlci1pbnN0aXR1dGUvbWlzY1wiO1xyXG5pbXBvcnQge0F0dHJpYnV0ZVNlcnZpY2V9IGZyb20gXCIuLi9zZXJ2aWNlcy9hdHRyaWJ1dGUuc2VydmljZVwiO1xyXG5pbXBvcnQge0F0dHJpYnV0ZUNvbmZpZ3VyYXRpb259IGZyb20gXCIuLi9tb2RlbC9hdHRyaWJ1dGUtY29uZmlndXJhdGlvbi5lbnRpdHlcIjtcclxuaW1wb3J0IHtBdHRyaWJ1dGVWYWx1ZVNldH0gZnJvbSBcIi4uL21vZGVsL2F0dHJpYnV0ZS12YWx1ZS1zZXQuZW50aXR5XCI7XHJcbmltcG9ydCB7QXR0cmlidXRlQ29udGFpbmVyfSBmcm9tIFwiLi4vbW9kZWwvYXR0cmlidXRlLWNvbnRhaW5lci5lbnRpdHlcIjtcclxuXHJcbi8qKlxyXG4gKiBUaGlzIGNvbXBvbmVudCBzaG91bGQgYmUgYWRkZWQgb24gdG8gYW55IHNjcmVlbiB0aGF0IGRpc3BsYXlzIGEgY29udGFpbmVyIHdpdGggQ09EIGNvbnRlbnQuICBUaGlzIGNvbnRhaW5lclxyXG4gKiByZXByZXNlbnRzIHRoZSBvbmUgb2YgdGhlIGNvbnRhaW5lcnMsIHdoaWNoIGluIHR1cm4gY29udGFpbiBhdHRyaWJ1dGVzIHdoaWNoIGRpc3BsYXkgdGhvc2UgdmFsdWVzIGluIHRoZVxyXG4gKiBhdHRyaWJ1dGVWYWx1ZVNldC5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImhjaS1hdHRyaWJ1dGUtY29udGFpbmVyXCIsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxoY2ktYnVzeSBbZ2V0QnVzeVN1YmplY3RzXT1cImdldEJ1c3lTdWJqZWN0c1wiPjwvaGNpLWJ1c3k+XHJcbiAgXHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYXR0cmlidXRlQ29udGFpbmVyXCI+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJlZGl0UG9wdXBcIiBbaWRdPVwiJ2lkLWF0dHJpYnV0ZS1jb250YWluZXItJyArIGF0dHJpYnV0ZUNvbnRhaW5lci5pZEF0dHJpYnV0ZUNvbnRhaW5lciArICctaGVhZGVyJ1wiXHJcbiAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggYXR0cmlidXRlLWNvbnRhaW5lci1oZWFkZXIge3snc29ydC1vcmRlci0nICsgYXR0cmlidXRlQ29udGFpbmVyLnNvcnRPcmRlcn19XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1sLWF1dG8gbXItMFwiIChjbGljayk9XCJlZGl0KGVkaXRNb2RhbCwgYXR0cmlidXRlQ29udGFpbmVyKVwiPlxyXG4gICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtcGVuY2lsXCI+PC9pPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWdyb3ctMSB5LWF1dG9cIiBzdHlsZT1cImZsZXg6IDEgMSAxcHg7XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImF0dHJpYnV0ZS1jb250YWluZXJcIlxyXG4gICAgICAgICAgICAgW2NsYXNzLmNvbC1tZC0xMl09XCJhdHRyaWJ1dGVDb250YWluZXIuaXNBdXRvTGF5b3V0ICYmIGF0dHJpYnV0ZUNvbnRhaW5lci5pc0F1dG9MYXlvdXQgPT09ICdZJ1wiXHJcbiAgICAgICAgICAgICBbY2xhc3MuZmxleF09XCJhdHRyaWJ1dGVDb250YWluZXIuaXNBdXRvTGF5b3V0ICYmIGF0dHJpYnV0ZUNvbnRhaW5lci5pc0F1dG9MYXlvdXQgPT09ICdZJ1wiXHJcbiAgICAgICAgICAgICBbY2xhc3MuZmxleC13cmFwXT1cImF0dHJpYnV0ZUNvbnRhaW5lci5pc0F1dG9MYXlvdXQgJiYgYXR0cmlidXRlQ29udGFpbmVyLmlzQXV0b0xheW91dCA9PT0gJ1knXCJcclxuICAgICAgICAgICAgIFtjbGFzcy5hYnNvbHV0ZV09XCIhYXR0cmlidXRlQ29udGFpbmVyLmlzQXV0b0xheW91dCB8fCBhdHRyaWJ1dGVDb250YWluZXIuaXNBdXRvTGF5b3V0ID09PSAnTidcIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGF0dHJpYnV0ZSBvZiBhdHRyaWJ1dGVDb250YWluZXIuZ3JhcGhpY2FsQXR0cmlidXRlcyB8IGlzR3JvdXBBdHRyaWJ1dGU6IGZhbHNlXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhdHRyaWJ1dGVDb250YWluZXIuaXNBdXRvTGF5b3V0ICYmIGF0dHJpYnV0ZUNvbnRhaW5lci5pc0F1dG9MYXlvdXQgPT09ICdZJyAmJiBhdHRyaWJ1dGUuY29kZUF0dHJpYnV0ZURhdGFUeXBlICE9PSAnTElORSdcIj5cclxuICAgICAgICAgICAgICA8aGNpLWF0dHJpYnV0ZS1mbGV4IFtpZF09XCInaWQtYXR0cmlidXRlLScgKyBhdHRyaWJ1dGUuaWRBdHRyaWJ1dGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZV09XCJhdHRyaWJ1dGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VkaXRJbmxpbmVdPVwiZWRpdElubGluZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYXR0cmlidXRlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmNvbC00XT1cImF0dHJpYnV0ZS5jb2RlQXR0cmlidXRlRGF0YVR5cGUgIT09ICdHQScgJiYgYXR0cmlidXRlLmNvZGVBdHRyaWJ1dGVEYXRhVHlwZSAhPT0gJ0xJTkUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5jb2wtMTJdPVwiYXR0cmlidXRlLmNvZGVBdHRyaWJ1dGVEYXRhVHlwZSA9PT0gJ0dBJyB8fCBhdHRyaWJ1dGUuY29kZUF0dHJpYnV0ZURhdGFUeXBlID09PSAnTElORSdcIj48L2hjaS1hdHRyaWJ1dGUtZmxleD5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhYXR0cmlidXRlQ29udGFpbmVyLmlzQXV0b0xheW91dCB8fCBhdHRyaWJ1dGVDb250YWluZXIuaXNBdXRvTGF5b3V0ID09PSAnTidcIj5cclxuICAgICAgICAgICAgICA8aGNpLWF0dHJpYnV0ZS1hYnNvbHV0ZSBbaWRdPVwiJ2lkLWF0dHJpYnV0ZS0nICsgYXR0cmlidXRlLmlkQXR0cmlidXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlXT1cImF0dHJpYnV0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VkaXRJbmxpbmVdPVwiZWRpdElubGluZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmF0dHJpYnV0ZV09XCJ0cnVlXCI+PC9oY2ktYXR0cmlidXRlLWFic29sdXRlPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSAjZWRpdE1vZGFsIGxldC1jbG9zZT1cImNsb3NlXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuICAgICAgICB7e2VkaXRDb250YWluZXIuY29udGFpbmVyTmFtZX19XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBkLWZsZXggZmxleC1jb2x1bW4gaGNpLWNvZC1lZGl0XCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYXR0cmlidXRlIG9mIGVkaXRDb250YWluZXIuZ3JhcGhpY2FsQXR0cmlidXRlcyB8IGlzR3JvdXBBdHRyaWJ1dGU6IGZhbHNlXCI+XHJcbiAgICAgICAgICA8aGNpLWF0dHJpYnV0ZS1lZGl0IFtpZF09XCInZWRpdC1pZC1hdHRyaWJ1dGUtJyArIGF0dHJpYnV0ZS5pZEF0dHJpYnV0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVdPVwiYXR0cmlidXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhdHRyaWJ1dGVcIj48L2hjaS1hdHRyaWJ1dGUtZWRpdD5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgKGNsaWNrKT1cImNsb3NlKCdTYXZlJylcIj5TYXZlPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIChjbGljayk9XCJjbG9zZSgnQ2FuY2VsJylcIj5DYW5jZWw8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gIGBcclxufSlcclxuZXhwb3J0IGNsYXNzIEF0dHJpYnV0ZUNvbnRhaW5lckNvbXBvbmVudCB7XHJcbiAgQEhvc3RCaW5kaW5nKFwiY2xhc3NcIikgY2xhc3NMaXN0OiBzdHJpbmcgPSBcImhjaS1hdHRyaWJ1dGUtY29uZmlndXJhdGlvbiBoY2ktY29kIGQtZmxleCBmbGV4LWNvbHVtbiBmbGV4LWdyb3ctMVwiO1xyXG5cclxuICBASW5wdXQoKSBpZEF0dHJpYnV0ZVZhbHVlU2V0OiBudW1iZXI7XHJcbiAgQElucHV0KCkgaWRBdHRyaWJ1dGVDb25maWd1cmF0aW9uOiBudW1iZXI7XHJcbiAgQElucHV0KCkgaWRBdHRyaWJ1dGVDb250YWluZXI6IG51bWJlcjtcclxuICBASW5wdXQoKSBpbmRleE9mQ29udGFpbmVyOiBudW1iZXI7XHJcbiAgQElucHV0KCkgaWRQYXJlbnRPYmplY3Q6IG51bWJlcjtcclxuXHJcbiAgQElucHV0KCkgYXR0cmlidXRlQ29udGFpbmVyOiBBdHRyaWJ1dGVDb250YWluZXI7XHJcbiAgQElucHV0KCkgYXR0cmlidXRlQ29uZmlndXJhdGlvbjogQXR0cmlidXRlQ29uZmlndXJhdGlvbjtcclxuICBASW5wdXQoKSBhdHRyaWJ1dGVWYWx1ZVNldDogQXR0cmlidXRlVmFsdWVTZXQ7XHJcbiAgXHJcbiAgQElucHV0KCkgZWRpdElubGluZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgZWRpdFBvcHVwOiBib29sZWFuID0gIGZhbHNlO1xyXG4gIEBJbnB1dCgpIGVkaXRhYmxlOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgZWRpdENvbnRhaW5lcjogQXR0cmlidXRlQ29udGFpbmVyO1xyXG5cclxuICB3aW5kb3dEaW1lbnNpb246IGFueSA9IHt9O1xyXG5cclxuICBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XHJcbiAgXHJcbiAgZ2V0QnVzeVN1YmplY3RzOiBGdW5jdGlvbiA9ICgpID0+IHtcclxuICAgIGxldCBzdWJqZWN0czogYW55W10gPSBbXTtcclxuICBcclxuICAgIC8vc3ViamVjdHMucHVzaCh0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0QXR0cmlidXRlQ29uZmlndXJhdGlvbkxvYWRpbmdTdWJqZWN0KCkpO1xyXG4gICAgc3ViamVjdHMucHVzaCh0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0TG9hZGluZ1N1YmplY3QoKSk7XHJcbiAgICBcclxuICAgIHJldHVybiBzdWJqZWN0cztcclxuICB9O1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGF0dHJpYnV0ZVNlcnZpY2U6IEF0dHJpYnV0ZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgICAgICAgICAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgICAgICAgICAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWwpIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwb24gaW5pdCwgc3Vic2NyaWJlIHRvIHRoZSBjb25maWd1cmF0aW9uIGFuZCB2YWx1ZSBzZXQuXHJcbiAgICovXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBpZiAoISB0aGlzLmVkaXRhYmxlKSB7XHJcbiAgICAgIHRoaXMuZWRpdElubGluZSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmVkaXRQb3B1cCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICB0aGlzLmF0dHJpYnV0ZVNlcnZpY2Uuc2V0QXR0cmlidXRlQ29uZmlndXJhdGlvbkJ5SWQodGhpcy5pZEF0dHJpYnV0ZUNvbmZpZ3VyYXRpb24sIHRoaXMuaWRBdHRyaWJ1dGVWYWx1ZVNldCwgdGhpcy5pZFBhcmVudE9iamVjdCk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0QXR0cmlidXRlQ29uZmlndXJhdGlvblN1YmplY3QoKS5zdWJzY3JpYmUoKGF0dHJpYnV0ZUNvbmZpZ3VyYXRpb246IEF0dHJpYnV0ZUNvbmZpZ3VyYXRpb24pID0+IHtcclxuICAgICAgaWYoYXR0cmlidXRlQ29uZmlndXJhdGlvbikge1xyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlQ29uZmlndXJhdGlvbiA9IGF0dHJpYnV0ZUNvbmZpZ3VyYXRpb247XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlkQXR0cmlidXRlQ29udGFpbmVyICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIHRoaXMuYXR0cmlidXRlQ29udGFpbmVyID0gdGhpcy5nZXRBdHRyaWJ1dGVDb250YWluZXJCeUlkKHRoaXMuaWRBdHRyaWJ1dGVDb250YWluZXIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaW5kZXhPZkNvbnRhaW5lciAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5hdHRyaWJ1dGVDb25maWd1cmF0aW9uLmF0dHJpYnV0ZUNvbnRhaW5lcnNbdGhpcy5pbmRleE9mQ29udGFpbmVyXSkge1xyXG4gICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZUNvbnRhaW5lciA9IHRoaXMuYXR0cmlidXRlQ29uZmlndXJhdGlvbi5hdHRyaWJ1dGVDb250YWluZXJzW3RoaXMuaW5kZXhPZkNvbnRhaW5lcl07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KSk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuYXR0cmlidXRlQ29uZmlndXJhdGlvbkRpbWVuc2lvblN1YmplY3Quc3Vic2NyaWJlKCh3aW5kb3dEaW1lbnNpb246IGFueSkgPT4ge1xyXG4gICAgICBpZih3aW5kb3dEaW1lbnNpb24pe1xyXG4gICAgICAgIHRoaXMud2luZG93RGltZW5zaW9uID0gd2luZG93RGltZW5zaW9uO1xyXG4gICAgICB9XHJcbiAgICB9KSk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0QXR0cmlidXRlVmFsdWVTZXQoKS5zdWJzY3JpYmUoKGF0dHJpYnV0ZVZhbHVlU2V0OiBBdHRyaWJ1dGVWYWx1ZVNldCkgPT4ge1xyXG4gICAgICB0aGlzLmF0dHJpYnV0ZVZhbHVlU2V0ID0gYXR0cmlidXRlVmFsdWVTZXQ7XHJcblxyXG4gICAgICBpZiAodGhpcy5hdHRyaWJ1dGVWYWx1ZVNldCkge1xyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlU2VydmljZS5ub3RpZnlBdHRyaWJ1dGVzKCk7XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIHNldCBib3VuZERhdGEodmFsdWU6IGFueSkge1xyXG4gICAgdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnNldEJvdW5kRGF0YSh2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgaWYgKCEgdGhpcy5lZGl0YWJsZSkge1xyXG4gICAgICB0aGlzLmVkaXRJbmxpbmUgPSBmYWxzZTtcclxuICAgICAgdGhpcy5lZGl0UG9wdXAgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgaWYgKGNoYW5nZXMuaWRBdHRyaWJ1dGVDb250YWluZXIpIHtcclxuICAgICAgdGhpcy5pZEF0dHJpYnV0ZUNvbnRhaW5lciA9IGNoYW5nZXMuaWRBdHRyaWJ1dGVDb250YWluZXIuY3VycmVudFZhbHVlO1xyXG5cclxuICAgICAgdGhpcy5hdHRyaWJ1dGVDb250YWluZXIgPSB0aGlzLmdldEF0dHJpYnV0ZUNvbnRhaW5lckJ5SWQodGhpcy5pZEF0dHJpYnV0ZUNvbnRhaW5lcik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNoYW5nZXMuaW5kZXhPZkNvbnRhaW5lcikge1xyXG4gICAgICB0aGlzLmluZGV4T2ZDb250YWluZXIgPSBjaGFuZ2VzLmluZGV4T2ZDb250YWluZXIuY3VycmVudFZhbHVlO1xyXG4gICAgICBpZiAodGhpcy5hdHRyaWJ1dGVDb25maWd1cmF0aW9uICYmIHRoaXMuYXR0cmlidXRlQ29uZmlndXJhdGlvbi5hdHRyaWJ1dGVDb250YWluZXJzW3RoaXMuaW5kZXhPZkNvbnRhaW5lcl0pIHtcclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZUNvbnRhaW5lciA9IHRoaXMuYXR0cmlidXRlQ29uZmlndXJhdGlvbi5hdHRyaWJ1dGVDb250YWluZXJzW3RoaXMuaW5kZXhPZkNvbnRhaW5lcl07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldEF0dHJpYnV0ZVNlcnZpY2UoKTogQXR0cmlidXRlU2VydmljZSB7XHJcbiAgICByZXR1cm4gdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlO1xyXG4gIH1cclxuXHJcbiAgZWRpdChtb2RhbDogVGVtcGxhdGVSZWY8YW55PiwgZWRpdENvbnRhaW5lcjogQXR0cmlidXRlQ29udGFpbmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLmVkaXRDb250YWluZXIgPSBlZGl0Q29udGFpbmVyO1xyXG5cclxuICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4obW9kYWwsIHt3aW5kb3dDbGFzczogXCJtb2RhbC1sZ1wifSkucmVzdWx0LnRoZW4oKHJlc3VsdCkgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0ID09PSBcIlNhdmVcIikge1xyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlU2VydmljZS51cGRhdGVBdHRyaWJ1dGVWYWx1ZVNldCgpO1xyXG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PT0gXCJDYW5jZWxcIikge1xyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlU2VydmljZS5jbGVhclVwZGF0ZWRBdHRyaWJ1dGVWYWx1ZXMoKTtcclxuICAgICAgfVxyXG4gICAgfSwgKHJlYXNvbikgPT4ge30pO1xyXG4gIH1cclxuXHJcbiAgcG9zdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuYXR0cmlidXRlU2VydmljZS51cGRhdGVBdHRyaWJ1dGVWYWx1ZVNldCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0QXR0cmlidXRlQ29udGFpbmVyQnlJZChpZEF0dHJpYnV0ZUNvbnRhaW5lcjogbnVtYmVyKTogQXR0cmlidXRlQ29udGFpbmVyIHtcclxuICAgIGlmICh0aGlzLmF0dHJpYnV0ZUNvbmZpZ3VyYXRpb24pIHtcclxuICAgICAgcmV0dXJuIHRoaXMuYXR0cmlidXRlQ29uZmlndXJhdGlvbi5hdHRyaWJ1dGVDb250YWluZXJzLmZpbmQoeCA9PiB4LmlkQXR0cmlidXRlQ29udGFpbmVyID09PSBpZEF0dHJpYnV0ZUNvbnRhaW5lcik7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
258
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0cmlidXRlLWNvbnRhaW5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb2Qvc3JjL2NvbXBvbmVudHMvYXR0cmlidXRlLWNvbnRhaW5lci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGlCQUFpQixFQUFFLFNBQVMsRUFBbUIsVUFBVSxFQUFFLEtBQUssRUFDckQsU0FBUyxFQUErQixXQUFXLEVBQy9ELE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBVyxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFDLFFBQVEsRUFBVyxNQUFNLDRCQUE0QixDQUFDO0FBRTlELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLCtCQUErQixDQUFDOzs7Ozs7Ozs7O0FBSy9EOzs7O0dBSUc7QUF5REgsTUFBTSxPQUFPLDJCQUEyQjtJQWdDdEMsWUFBb0IsZ0JBQWtDLEVBQ2xDLFVBQXNCLEVBQ3RCLFFBQW1CLEVBQ25CLGlCQUFvQyxFQUNwQyxZQUFzQjtRQUp0QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLGlCQUFZLEdBQVosWUFBWSxDQUFVO1FBbkNwQixjQUFTLEdBQVcsb0VBQW9FLENBQUM7UUFZdEcsZUFBVSxHQUFZLElBQUksQ0FBQztRQUMzQixjQUFTLEdBQWEsS0FBSyxDQUFDO1FBQzVCLGFBQVEsR0FBWSxJQUFJLENBQUM7UUFJbEMsb0JBQWUsR0FBUSxFQUFFLENBQUM7UUFFMUIsa0JBQWEsR0FBaUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUVqRCxvQkFBZSxHQUFhLEdBQUcsRUFBRTtZQUMvQixJQUFJLFFBQVEsR0FBVSxFQUFFLENBQUM7WUFFekIs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LElBQUksSUFBSSxDQUFDLHNCQUFzQixFQUFFO1lBQy9CLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsS0FBSyxvQkFBb0IsQ0FBQyxDQUFDO1NBQ25IO0lBQ0gsQ0FBQzsrR0FwSVUsMkJBQTJCO21HQUEzQiwyQkFBMkIsaWxCQXRENUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvRFQ7OzRGQUVVLDJCQUEyQjtrQkF4RHZDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHlCQUF5QjtvQkFDbkMsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0RUO2lCQUNGOytNQUV1QixTQUFTO3NCQUE5QixXQUFXO3VCQUFDLE9BQU87Z0JBRVgsbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLHdCQUF3QjtzQkFBaEMsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBRUcsa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBRUcsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBaUVPLFNBQVM7c0JBQXJCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIENvbnRlbnRDaGlsZHJlbiwgRWxlbWVudFJlZiwgSW5wdXQsIGlzRGV2TW9kZSxcclxuICBRdWVyeUxpc3QsIFJlbmRlcmVyMiwgVmlld0NoaWxkcmVuLCBTaW1wbGVDaGFuZ2VzLCBIb3N0QmluZGluZywgVGVtcGxhdGVSZWZcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQge05nYk1vZGFsLCBOZ2JQYW5lbH0gZnJvbSBcIkBuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwXCI7XHJcbmltcG9ydCB7QWNjb3JkaW9uTmF2Q29tcG9uZW50fSBmcm9tIFwiQGh1bnRzbWFuLWNhbmNlci1pbnN0aXR1dGUvbWlzY1wiO1xyXG5pbXBvcnQge0F0dHJpYnV0ZVNlcnZpY2V9IGZyb20gXCIuLi9zZXJ2aWNlcy9hdHRyaWJ1dGUuc2VydmljZVwiO1xyXG5pbXBvcnQge0F0dHJpYnV0ZUNvbmZpZ3VyYXRpb259IGZyb20gXCIuLi9tb2RlbC9hdHRyaWJ1dGUtY29uZmlndXJhdGlvbi5lbnRpdHlcIjtcclxuaW1wb3J0IHtBdHRyaWJ1dGVWYWx1ZVNldH0gZnJvbSBcIi4uL21vZGVsL2F0dHJpYnV0ZS12YWx1ZS1zZXQuZW50aXR5XCI7XHJcbmltcG9ydCB7QXR0cmlidXRlQ29udGFpbmVyfSBmcm9tIFwiLi4vbW9kZWwvYXR0cmlidXRlLWNvbnRhaW5lci5lbnRpdHlcIjtcclxuXHJcbi8qKlxyXG4gKiBUaGlzIGNvbXBvbmVudCBzaG91bGQgYmUgYWRkZWQgb24gdG8gYW55IHNjcmVlbiB0aGF0IGRpc3BsYXlzIGEgY29udGFpbmVyIHdpdGggQ09EIGNvbnRlbnQuICBUaGlzIGNvbnRhaW5lclxyXG4gKiByZXByZXNlbnRzIHRoZSBvbmUgb2YgdGhlIGNvbnRhaW5lcnMsIHdoaWNoIGluIHR1cm4gY29udGFpbiBhdHRyaWJ1dGVzIHdoaWNoIGRpc3BsYXkgdGhvc2UgdmFsdWVzIGluIHRoZVxyXG4gKiBhdHRyaWJ1dGVWYWx1ZVNldC5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImhjaS1hdHRyaWJ1dGUtY29udGFpbmVyXCIsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxoY2ktYnVzeSBbZ2V0QnVzeVN1YmplY3RzXT1cImdldEJ1c3lTdWJqZWN0c1wiPjwvaGNpLWJ1c3k+XHJcbiAgXHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYXR0cmlidXRlQ29udGFpbmVyXCI+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJlZGl0UG9wdXBcIiBbaWRdPVwiJ2lkLWF0dHJpYnV0ZS1jb250YWluZXItJyArIGF0dHJpYnV0ZUNvbnRhaW5lci5pZEF0dHJpYnV0ZUNvbnRhaW5lciArICctaGVhZGVyJ1wiXHJcbiAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggYXR0cmlidXRlLWNvbnRhaW5lci1oZWFkZXIge3snc29ydC1vcmRlci0nICsgYXR0cmlidXRlQ29udGFpbmVyLnNvcnRPcmRlcn19XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1sLWF1dG8gbXItMFwiIChjbGljayk9XCJlZGl0KGVkaXRNb2RhbCwgYXR0cmlidXRlQ29udGFpbmVyKVwiPlxyXG4gICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtcGVuY2lsXCI+PC9pPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWdyb3ctMSB5LWF1dG9cIiBzdHlsZT1cImZsZXg6IDEgMSAxcHg7XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImF0dHJpYnV0ZS1jb250YWluZXJcIlxyXG4gICAgICAgICAgICAgW2NsYXNzLmNvbC1tZC0xMl09XCJhdHRyaWJ1dGVDb250YWluZXIuaXNBdXRvTGF5b3V0ICYmIGF0dHJpYnV0ZUNvbnRhaW5lci5pc0F1dG9MYXlvdXQgPT09ICdZJ1wiXHJcbiAgICAgICAgICAgICBbY2xhc3MuZmxleF09XCJhdHRyaWJ1dGVDb250YWluZXIuaXNBdXRvTGF5b3V0ICYmIGF0dHJpYnV0ZUNvbnRhaW5lci5pc0F1dG9MYXlvdXQgPT09ICdZJ1wiXHJcbiAgICAgICAgICAgICBbY2xhc3MuZmxleC13cmFwXT1cImF0dHJpYnV0ZUNvbnRhaW5lci5pc0F1dG9MYXlvdXQgJiYgYXR0cmlidXRlQ29udGFpbmVyLmlzQXV0b0xheW91dCA9PT0gJ1knXCJcclxuICAgICAgICAgICAgIFtjbGFzcy5hYnNvbHV0ZV09XCIhYXR0cmlidXRlQ29udGFpbmVyLmlzQXV0b0xheW91dCB8fCBhdHRyaWJ1dGVDb250YWluZXIuaXNBdXRvTGF5b3V0ID09PSAnTidcIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGF0dHJpYnV0ZSBvZiBhdHRyaWJ1dGVDb250YWluZXIuZ3JhcGhpY2FsQXR0cmlidXRlcyB8IGlzR3JvdXBBdHRyaWJ1dGU6IGZhbHNlXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhdHRyaWJ1dGVDb250YWluZXIuaXNBdXRvTGF5b3V0ICYmIGF0dHJpYnV0ZUNvbnRhaW5lci5pc0F1dG9MYXlvdXQgPT09ICdZJyAmJiBhdHRyaWJ1dGUuY29kZUF0dHJpYnV0ZURhdGFUeXBlICE9PSAnTElORSdcIj5cclxuICAgICAgICAgICAgICA8aGNpLWF0dHJpYnV0ZS1mbGV4IFtpZF09XCInaWQtYXR0cmlidXRlLScgKyBhdHRyaWJ1dGUuaWRBdHRyaWJ1dGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZV09XCJhdHRyaWJ1dGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VkaXRJbmxpbmVdPVwiZWRpdElubGluZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYXR0cmlidXRlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmNvbC00XT1cImF0dHJpYnV0ZS5jb2RlQXR0cmlidXRlRGF0YVR5cGUgIT09ICdHQScgJiYgYXR0cmlidXRlLmNvZGVBdHRyaWJ1dGVEYXRhVHlwZSAhPT0gJ0xJTkUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5jb2wtMTJdPVwiYXR0cmlidXRlLmNvZGVBdHRyaWJ1dGVEYXRhVHlwZSA9PT0gJ0dBJyB8fCBhdHRyaWJ1dGUuY29kZUF0dHJpYnV0ZURhdGFUeXBlID09PSAnTElORSdcIj48L2hjaS1hdHRyaWJ1dGUtZmxleD5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhYXR0cmlidXRlQ29udGFpbmVyLmlzQXV0b0xheW91dCB8fCBhdHRyaWJ1dGVDb250YWluZXIuaXNBdXRvTGF5b3V0ID09PSAnTidcIj5cclxuICAgICAgICAgICAgICA8aGNpLWF0dHJpYnV0ZS1hYnNvbHV0ZSBbaWRdPVwiJ2lkLWF0dHJpYnV0ZS0nICsgYXR0cmlidXRlLmlkQXR0cmlidXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlXT1cImF0dHJpYnV0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VkaXRJbmxpbmVdPVwiZWRpdElubGluZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmF0dHJpYnV0ZV09XCJ0cnVlXCI+PC9oY2ktYXR0cmlidXRlLWFic29sdXRlPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSAjZWRpdE1vZGFsIGxldC1jbG9zZT1cImNsb3NlXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuICAgICAgICB7e2VkaXRDb250YWluZXIuY29udGFpbmVyTmFtZX19XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBkLWZsZXggZmxleC1jb2x1bW4gaGNpLWNvZC1lZGl0XCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYXR0cmlidXRlIG9mIGVkaXRDb250YWluZXIuZ3JhcGhpY2FsQXR0cmlidXRlcyB8IGlzR3JvdXBBdHRyaWJ1dGU6IGZhbHNlXCI+XHJcbiAgICAgICAgICA8aGNpLWF0dHJpYnV0ZS1lZGl0IFtpZF09XCInZWRpdC1pZC1hdHRyaWJ1dGUtJyArIGF0dHJpYnV0ZS5pZEF0dHJpYnV0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVdPVwiYXR0cmlidXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhdHRyaWJ1dGVcIj48L2hjaS1hdHRyaWJ1dGUtZWRpdD5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgKGNsaWNrKT1cImNsb3NlKCdTYXZlJylcIj5TYXZlPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIChjbGljayk9XCJjbG9zZSgnQ2FuY2VsJylcIj5DYW5jZWw8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gIGBcclxufSlcclxuZXhwb3J0IGNsYXNzIEF0dHJpYnV0ZUNvbnRhaW5lckNvbXBvbmVudCB7XHJcbiAgQEhvc3RCaW5kaW5nKFwiY2xhc3NcIikgY2xhc3NMaXN0OiBzdHJpbmcgPSBcImhjaS1hdHRyaWJ1dGUtY29uZmlndXJhdGlvbiBoY2ktY29kIGQtZmxleCBmbGV4LWNvbHVtbiBmbGV4LWdyb3ctMVwiO1xyXG5cclxuICBASW5wdXQoKSBpZEF0dHJpYnV0ZVZhbHVlU2V0OiBudW1iZXI7XHJcbiAgQElucHV0KCkgaWRBdHRyaWJ1dGVDb25maWd1cmF0aW9uOiBudW1iZXI7XHJcbiAgQElucHV0KCkgaWRBdHRyaWJ1dGVDb250YWluZXI6IG51bWJlcjtcclxuICBASW5wdXQoKSBpbmRleE9mQ29udGFpbmVyOiBudW1iZXI7XHJcbiAgQElucHV0KCkgaWRQYXJlbnRPYmplY3Q6IG51bWJlcjtcclxuXHJcbiAgQElucHV0KCkgYXR0cmlidXRlQ29udGFpbmVyOiBBdHRyaWJ1dGVDb250YWluZXI7XHJcbiAgQElucHV0KCkgYXR0cmlidXRlQ29uZmlndXJhdGlvbjogQXR0cmlidXRlQ29uZmlndXJhdGlvbjtcclxuICBASW5wdXQoKSBhdHRyaWJ1dGVWYWx1ZVNldDogQXR0cmlidXRlVmFsdWVTZXQ7XHJcbiAgXHJcbiAgQElucHV0KCkgZWRpdElubGluZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgZWRpdFBvcHVwOiBib29sZWFuID0gIGZhbHNlO1xyXG4gIEBJbnB1dCgpIGVkaXRhYmxlOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgZWRpdENvbnRhaW5lcjogQXR0cmlidXRlQ29udGFpbmVyO1xyXG5cclxuICB3aW5kb3dEaW1lbnNpb246IGFueSA9IHt9O1xyXG5cclxuICBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XHJcbiAgXHJcbiAgZ2V0QnVzeVN1YmplY3RzOiBGdW5jdGlvbiA9ICgpID0+IHtcclxuICAgIGxldCBzdWJqZWN0czogYW55W10gPSBbXTtcclxuICBcclxuICAgIC8vc3ViamVjdHMucHVzaCh0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0QXR0cmlidXRlQ29uZmlndXJhdGlvbkxvYWRpbmdTdWJqZWN0KCkpO1xyXG4gICAgc3ViamVjdHMucHVzaCh0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0TG9hZGluZ1N1YmplY3QoKSk7XHJcbiAgICBcclxuICAgIHJldHVybiBzdWJqZWN0cztcclxuICB9O1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGF0dHJpYnV0ZVNlcnZpY2U6IEF0dHJpYnV0ZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgICAgICAgICAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgICAgICAgICAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWwpIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwb24gaW5pdCwgc3Vic2NyaWJlIHRvIHRoZSBjb25maWd1cmF0aW9uIGFuZCB2YWx1ZSBzZXQuXHJcbiAgICovXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBpZiAoISB0aGlzLmVkaXRhYmxlKSB7XHJcbiAgICAgIHRoaXMuZWRpdElubGluZSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmVkaXRQb3B1cCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICB0aGlzLmF0dHJpYnV0ZVNlcnZpY2Uuc2V0QXR0cmlidXRlQ29uZmlndXJhdGlvbkJ5SWQodGhpcy5pZEF0dHJpYnV0ZUNvbmZpZ3VyYXRpb24sIHRoaXMuaWRBdHRyaWJ1dGVWYWx1ZVNldCwgdGhpcy5pZFBhcmVudE9iamVjdCk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0QXR0cmlidXRlQ29uZmlndXJhdGlvblN1YmplY3QoKS5zdWJzY3JpYmUoKGF0dHJpYnV0ZUNvbmZpZ3VyYXRpb246IEF0dHJpYnV0ZUNvbmZpZ3VyYXRpb24pID0+IHtcclxuICAgICAgaWYoYXR0cmlidXRlQ29uZmlndXJhdGlvbikge1xyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlQ29uZmlndXJhdGlvbiA9IGF0dHJpYnV0ZUNvbmZpZ3VyYXRpb247XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlkQXR0cmlidXRlQ29udGFpbmVyICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIHRoaXMuYXR0cmlidXRlQ29udGFpbmVyID0gdGhpcy5nZXRBdHRyaWJ1dGVDb250YWluZXJCeUlkKHRoaXMuaWRBdHRyaWJ1dGVDb250YWluZXIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaW5kZXhPZkNvbnRhaW5lciAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5hdHRyaWJ1dGVDb25maWd1cmF0aW9uLmF0dHJpYnV0ZUNvbnRhaW5lcnNbdGhpcy5pbmRleE9mQ29udGFpbmVyXSkge1xyXG4gICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZUNvbnRhaW5lciA9IHRoaXMuYXR0cmlidXRlQ29uZmlndXJhdGlvbi5hdHRyaWJ1dGVDb250YWluZXJzW3RoaXMuaW5kZXhPZkNvbnRhaW5lcl07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KSk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuYXR0cmlidXRlQ29uZmlndXJhdGlvbkRpbWVuc2lvblN1YmplY3Quc3Vic2NyaWJlKCh3aW5kb3dEaW1lbnNpb246IGFueSkgPT4ge1xyXG4gICAgICBpZih3aW5kb3dEaW1lbnNpb24pe1xyXG4gICAgICAgIHRoaXMud2luZG93RGltZW5zaW9uID0gd2luZG93RGltZW5zaW9uO1xyXG4gICAgICB9XHJcbiAgICB9KSk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0QXR0cmlidXRlVmFsdWVTZXQoKS5zdWJzY3JpYmUoKGF0dHJpYnV0ZVZhbHVlU2V0OiBBdHRyaWJ1dGVWYWx1ZVNldCkgPT4ge1xyXG4gICAgICB0aGlzLmF0dHJpYnV0ZVZhbHVlU2V0ID0gYXR0cmlidXRlVmFsdWVTZXQ7XHJcblxyXG4gICAgICBpZiAodGhpcy5hdHRyaWJ1dGVWYWx1ZVNldCkge1xyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlU2VydmljZS5ub3RpZnlBdHRyaWJ1dGVzKCk7XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIHNldCBib3VuZERhdGEodmFsdWU6IGFueSkge1xyXG4gICAgdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnNldEJvdW5kRGF0YSh2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgaWYgKCEgdGhpcy5lZGl0YWJsZSkge1xyXG4gICAgICB0aGlzLmVkaXRJbmxpbmUgPSBmYWxzZTtcclxuICAgICAgdGhpcy5lZGl0UG9wdXAgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgaWYgKGNoYW5nZXMuaWRBdHRyaWJ1dGVDb250YWluZXIpIHtcclxuICAgICAgdGhpcy5pZEF0dHJpYnV0ZUNvbnRhaW5lciA9IGNoYW5nZXMuaWRBdHRyaWJ1dGVDb250YWluZXIuY3VycmVudFZhbHVlO1xyXG5cclxuICAgICAgdGhpcy5hdHRyaWJ1dGVDb250YWluZXIgPSB0aGlzLmdldEF0dHJpYnV0ZUNvbnRhaW5lckJ5SWQodGhpcy5pZEF0dHJpYnV0ZUNvbnRhaW5lcik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNoYW5nZXMuaW5kZXhPZkNvbnRhaW5lcikge1xyXG4gICAgICB0aGlzLmluZGV4T2ZDb250YWluZXIgPSBjaGFuZ2VzLmluZGV4T2ZDb250YWluZXIuY3VycmVudFZhbHVlO1xyXG4gICAgICBpZiAodGhpcy5hdHRyaWJ1dGVDb25maWd1cmF0aW9uICYmIHRoaXMuYXR0cmlidXRlQ29uZmlndXJhdGlvbi5hdHRyaWJ1dGVDb250YWluZXJzW3RoaXMuaW5kZXhPZkNvbnRhaW5lcl0pIHtcclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZUNvbnRhaW5lciA9IHRoaXMuYXR0cmlidXRlQ29uZmlndXJhdGlvbi5hdHRyaWJ1dGVDb250YWluZXJzW3RoaXMuaW5kZXhPZkNvbnRhaW5lcl07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldEF0dHJpYnV0ZVNlcnZpY2UoKTogQXR0cmlidXRlU2VydmljZSB7XHJcbiAgICByZXR1cm4gdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlO1xyXG4gIH1cclxuXHJcbiAgZWRpdChtb2RhbDogVGVtcGxhdGVSZWY8YW55PiwgZWRpdENvbnRhaW5lcjogQXR0cmlidXRlQ29udGFpbmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLmVkaXRDb250YWluZXIgPSBlZGl0Q29udGFpbmVyO1xyXG5cclxuICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4obW9kYWwsIHt3aW5kb3dDbGFzczogXCJtb2RhbC1sZ1wifSkucmVzdWx0LnRoZW4oKHJlc3VsdCkgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0ID09PSBcIlNhdmVcIikge1xyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlU2VydmljZS51cGRhdGVBdHRyaWJ1dGVWYWx1ZVNldCgpO1xyXG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PT0gXCJDYW5jZWxcIikge1xyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlU2VydmljZS5jbGVhclVwZGF0ZWRBdHRyaWJ1dGVWYWx1ZXMoKTtcclxuICAgICAgfVxyXG4gICAgfSwgKHJlYXNvbikgPT4ge30pO1xyXG4gIH1cclxuXHJcbiAgcG9zdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuYXR0cmlidXRlU2VydmljZS51cGRhdGVBdHRyaWJ1dGVWYWx1ZVNldCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0QXR0cmlidXRlQ29udGFpbmVyQnlJZChpZEF0dHJpYnV0ZUNvbnRhaW5lcjogbnVtYmVyKTogQXR0cmlidXRlQ29udGFpbmVyIHtcclxuICAgIGlmICh0aGlzLmF0dHJpYnV0ZUNvbmZpZ3VyYXRpb24pIHtcclxuICAgICAgcmV0dXJuIHRoaXMuYXR0cmlidXRlQ29uZmlndXJhdGlvbi5hdHRyaWJ1dGVDb250YWluZXJzLmZpbmQoeCA9PiB4LmlkQXR0cmlidXRlQ29udGFpbmVyID09PSBpZEF0dHJpYnV0ZUNvbnRhaW5lcik7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==