@tsi-developpement/tsi-shared-ui 1.7.23 → 1.7.25

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.
@@ -202,7 +202,7 @@ export class TsiFormComponentBaseComponent extends AppBaseComponent {
202
202
  }
203
203
  ngAfterViewChecked() {
204
204
  }
205
- async ngAfterViewInit() {
205
+ ngAfterViewInit() {
206
206
  this.directiveElements = [...this._presentationDesignerService.getDirectives(),
207
207
  ...this._presentationDesignerBaseService.getDirectives()
208
208
  ];
@@ -654,4 +654,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
654
654
  }], onSave: [{
655
655
  type: Output
656
656
  }] } });
657
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNpLWZvcm0tYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvdHNpLWJhc2UvY29tcG9uZW50cy90c2ktZm9ybS1iYXNlL3RzaS1mb3JtLWJhc2UuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHNpLXNoYXJlZC11aS9zcmMvbGliL3RzaS1iYXNlL2NvbXBvbmVudHMvdHNpLWZvcm0tYmFzZS90c2ktZm9ybS1iYXNlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBMkUsU0FBUyxFQUFjLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJN08sT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxtQkFBbUIsRUFBc0IsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakcsT0FBTyxFQUEwQixtQkFBbUIsRUFBa0UsTUFBTSxpQkFBaUIsQ0FBQztBQUM5SSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDNUQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLDZCQUE2QixFQUFFLG9CQUFvQixFQUFFLG1CQUFtQixFQUFFLDJCQUEyQixFQUFFLDBCQUEwQixFQUFFLGdCQUFnQixFQUFFLHNCQUFzQixFQUFFLDRCQUE0QixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdlMsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sMkVBQTJFLENBQUM7QUFDNUgsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkVBQTJFLENBQUM7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QUE3Qiw2QkFBNkIsd1JBcUU3QixnQkFBZ0IsOEVBR2hCLGtCQUFrQiw4REFFZixvQkFBb0IsdUVDdEdwQyxpQ0FDQTs7NEZEMkJhLDZCQUE2QjtrQkFMekMsU0FBUzsrQkFDRSxtQkFBbUI7dUpBeUVBLElBQUk7c0JBQWhDLFNBQVM7dUJBQUMsZ0JBQWdCO2dCQUdJLFdBQVc7c0JBQXpDLFNBQVM7dUJBQUMsa0JBQWtCO2dCQUVPLFFBQVE7c0JBQTNDLFlBQVk7dUJBQUMsb0JBQW9CO2dCQXNCekIsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csRUFBRTtzQkFBVixLQUFLO2dCQUlGLFNBQVM7c0JBRFosS0FBSztnQkFjRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFNTyxNQUFNO3NCQUFsQixLQUFLO2dCQTZCSSxNQUFNO3NCQUFmLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlckNvbnRlbnRDaGVja2VkLCBBZnRlclZpZXdDaGVja2VkLCBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIGluamVjdCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFJlbmRlcmVyMiwgVmlld0NoaWxkLCBWaWV3Q2hpbGRyZW4sIFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTmdGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBEeW5hbWljRGlhbG9nQ29uZmlnLCBEeW5hbWljRGlhbG9nUmVmIH0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IExvY2FsaXphdGlvbktleXMgfSBmcm9tICcuLi8uLi8uLi9jb25zdHMnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRfTW9kZXMsIEZvcm1WYWxpZGF0aW9uRXJyb3IsIEZvcm1WYWxpZGl0eVJlc3VsdCwgTW9kZXMgfSBmcm9tICcuLi8uLi8uLi9lbnVtcyc7XHJcbmltcG9ydCB7IENvbWJvU3RhdHVzTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgQ29tcG9uZW50RGVzY3JpbWluYXRvciwgUHJlc2VudGF0aW9uU2V0dGluZywgUHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbCwgd29ya2Zsb3dJbnN0YW5jZUluZm9ybWF0aW9uUmVzcG9uc2UgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBMb2NhbGl6ZVBpcGUgfSBmcm9tICcuLi8uLi8uLi9waXBlcy9sb2NhbGl6ZS5waXBlJztcclxuaW1wb3J0IHsgRW50aXR5Q29uZmlndXJhdGlvblNlcnZpY2UsIEVycm9yUmVzcG9uc2VNYW5hZ2VyU2VydmljZSwgR2VuZXJpY1ZhbGlkYXRpb25TdGF0ZVNlcnZpY2UsIElucHV0UmVnaXN0cnlTZXJ2aWNlLCBMYXlvdXRIZWxwZXJTZXJ2aWNlLCBQcmVzZW50YXRpb25EZXNpZ25lclNlcnZpY2UsIFByZXNlbnRhdGlvblNldHRpbmdTZXJ2aWNlLCBSZXBvcnRpbmdTZXJ2aWNlLCBUc2lOb3RpZmljYXRpb25TZXJ2aWNlLCBXb3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xyXG5pbXBvcnQgeyBQcmVzZW50YXRpb25EZXNpZ25lckJhc2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcHJlc2VudGF0aW9uLXNldHRpbmcvcHJlc2VudGF0aW9uLWRlc2lnbmVyLWJhc2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IFRzaUJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3RzaS1jb21wb25lbnRzL2J1dHRvbi1jb21wb25lbnRzL3RzaS1idXR0b24vdHNpLWJ1dHRvbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBFZGl0YWJsZUdyaWRDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi90c2ktY29tcG9uZW50cy9pbnB1dC1jb21wb25lbnRzL2VkaXRhYmxlLWdyaWQvZWRpdGFibGUtZ3JpZC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUc2lDaGVja2JveENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3RzaS1jb21wb25lbnRzL2lucHV0LWNvbXBvbmVudHMvdHNpLWNoZWNrYm94L3RzaS1jaGVja2JveC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUc2lHZW5lcmljR3JpZENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3RzaS1jb21wb25lbnRzL291dHB1dC1jb21wb25lbnRzL3RzaS1nZW5lcmljLWdyaWQvdHNpLWdlbmVyaWMtZ3JpZC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUc2lWaWV3R3JpZENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3RzaS1jb21wb25lbnRzL291dHB1dC1jb21wb25lbnRzL3RzaS12aWV3LWdyaWQvdHNpLXZpZXctZ3JpZC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUc2lGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vdHNpLWNvbXBvbmVudHMvdHNpLWZvcm0vdHNpLWZvcm0uY29tcG9uZW50JztcclxuaW1wb3J0IHsgVHNpR2VuZXJpY0NydWRDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi90c2ktY29tcG9uZW50cy90c2ktZ2VuZXJpYy1jcnVkL3RzaS1nZW5lcmljLWNydWQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUHJlc2VudGF0aW9uRGVzaWduZXJEaXJlY3RpdmUsIFByZXNlbnRhdGlvbkRlc2lnbmVyRGlyZWN0aXZlQmFzZSB9IGZyb20gJy4uLy4uLy4uL3RzaS1kaXJlY3RpdmVzJztcclxuaW1wb3J0IHsgVHNpSW5wdXRCYXNlIH0gZnJvbSAnLi4vLi4vdHNpLWlucHV0LWJhc2UvdHNpLWlucHV0LWJhc2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQXBwQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uL2FwcC1iYXNlL2FwcC1iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEZvcm1TdGF0ZSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9mb3JtL2Zvcm0tc3RhdGUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtdHNpLWZvcm0tYmFzZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RzaS1mb3JtLWJhc2UuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3RzaS1mb3JtLWJhc2UuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVHNpRm9ybUNvbXBvbmVudEJhc2VDb21wb25lbnQgZXh0ZW5kcyBBcHBCYXNlQ29tcG9uZW50XHJcbiAgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyQ29udGVudENoZWNrZWQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3Q2hlY2tlZCB7XHJcbiAgLy8jcmVnaW9uIHByb3BlcnRpZXNcclxuICAgcHVibGljIG92ZXJyaWRlIGdldCBmb3JtRW5kcG9pbnQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBzdXBlci5mb3JtRW5kcG9pbnQ7XHJcbiAgfTtcclxuICBwcml2YXRlIG92ZXJyaWRlIHNldCBmb3JtRW5kcG9pbnQoZW5kcG9pbnQ6IHN0cmluZykge1xyXG4gICAgc3VwZXIuZm9ybUVuZHBvaW50ID0gYCR7ZW5kcG9pbnR9LyR7dGhpcy5pZH1gO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG92ZXJyaWRlIGdldCBidXNpbmVzc0NsYXNzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2J1c2luZXNzQ2xhc3M7XHJcbiAgfVxyXG4gIHB1YmxpYyBvdmVycmlkZSBzZXQgYnVzaW5lc3NDbGFzcyh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9idXNpbmVzc0NsYXNzID0gdmFsdWU7XHJcbiAgICB0aGlzLmZvcm1FbmRwb2ludCA9IHRoaXMuYnVzaW5lc3NDbGFzcztcclxuICAgIHRoaXMuX2dlbmVyaWNWYWxpZGF0aW9uU3RhdGVTZXJ2aWNlPy5sb2FkRW50aXR5VmFsaWRhdGlvbkluZm9zKHRoaXMuX2J1c2luZXNzQ2xhc3MpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY29tcG9uZW50RGVzY3JpbWluYXRvcjogQ29tcG9uZW50RGVzY3JpbWluYXRvciB8IHVuZGVmaW5lZFxyXG4gIHByaXZhdGUgZGVzY3JpbWluYXRvclZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWRcclxuXHJcbiAgcHJvdGVjdGVkIHNldCBjb21wb25lbnREZXNjcmltaW5hdG9yKHZhbHVlOiBDb21wb25lbnREZXNjcmltaW5hdG9yIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9jb21wb25lbnREZXNjcmltaW5hdG9yID0gdmFsdWVcclxuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5wcm9wZXJ0eVZhbHVlKSB7XHJcbiAgICAgIGlmKHRoaXMuZm9ybSl7XHJcbiAgICAgICAgdGhpcy5mb3JtLmRlc2NyaW1pbmF0b3JWYWx1ZSA9IHZhbHVlLnByb3BlcnR5VmFsdWVcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZSA9IHZhbHVlLnByb3BlcnR5VmFsdWVcclxuICAgICAgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0ID0gdGhpcy5fcHJlc2VudGF0aW9uU2V0dGluZ1NlcnZpY2UuZ2V0UHJlc2VudGF0aW9uU2V0dGluZ0J5Q29tcG9uZW50SWRlbnRpZmllclN5bmModGhpcy5nZXRDb21wb25lbnRJZGVudGlmaWVyKCksXHJcbiAgICAgICAgdGhpcy5kZXNjcmltaW5hdG9yVmFsdWUpID8/IG5ldyBQcmVzZW50YXRpb25TZXR0aW5nKClcclxuICAgICAgdGhpcy5kaXJlY3RpdmVFbGVtZW50cyA9IFsuLi50aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lclNlcnZpY2UuZ2V0RGlyZWN0aXZlcygpLFxyXG4gICAgICAuLi50aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lckJhc2VTZXJ2aWNlLmdldERpcmVjdGl2ZXMoKVxyXG4gICAgICBdO1xyXG4gICAgICB0aGlzLmFkZElucHV0cyh0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QsICF0aGlzLl9sYXlvdXRIZWxwZXJTZXJ2aWNlPy5pc0Rlc2lnbk1vZGUpXHJcblxyXG4gICAgICAvLyB0aGlzLl9yZXBvcnRpbmdTZXJ2aWNlLmdldFJlcG9ydERlY3JpbWluYXRvcihyZXEpLnN1YnNjcmliZSh7XHJcbiAgICAgIC8vICAgbmV4dDogYXN5bmMgKHJlc3VsdCkgPT4ge1xyXG4gICAgICAvLyAgICAgdGhpcy5kZXNjcmltaW5hdG9yVmFsdWUgPSByZXN1bHQucHJvcGVydHlWYWx1ZTtcclxuICAgICAgLy8gICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdCA9IHRoaXMuX3ByZXNlbnRhdGlvblNldHRpbmdTZXJ2aWNlLmdldFByZXNlbnRhdGlvblNldHRpbmdCeUNvbXBvbmVudElkZW50aWZpZXJTeW5jKHRoaXMuZ2V0Q29tcG9uZW50SWRlbnRpZmllcigpKSA/PyBuZXcgUHJlc2VudGF0aW9uU2V0dGluZygpXHJcbiAgICAgIC8vICAgICBpZiAodGhpcy5mb3JtKSB7XHJcbiAgICAgIC8vICAgICAgIHRoaXMuZm9ybS5kZXNjcmltaW5hdG9yVmFsdWUgPSByZXN1bHQucHJvcGVydHlWYWx1ZVxyXG4gICAgICAvLyAgICAgICBpZiAodGhpcy5lbnRpdHlJbmZvPy5pc1dvcmtmbG93KSB7XHJcbiAgICAgIC8vICAgICAgICAgYXdhaXQgdGhpcy5mb3JtLmdldFdvcmtmbG93RW50aXR5SW5mb3JtYXRpb24odGhpcy5idXNpbmVzc0NsYXNzLCB0aGlzLmlkLCB0aGlzLmVudGl0eUluZm8/LmRpc2NyaW1pbmF0b3JDbGFzc05hbWUsXHJcbiAgICAgIC8vICAgICAgICAgICB0aGlzLmVudGl0eUluZm8/LmRpc2NyaW1pbmF0b3JQcm9wZXJ0eU5hbWUpXHJcbiAgICAgIC8vICAgICAgIH1cclxuICAgICAgLy8gICAgIH1cclxuICAgICAgLy8gICAgIHRoaXMuYWRkSW5wdXRzKHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdCwgIXRoaXMuX2xheW91dEhlbHBlclNlcnZpY2U/LmlzRGVzaWduTW9kZSlcclxuICAgICAgLy8gICB9LFxyXG4gICAgICAvLyAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgLy8gICAgIGNvbnNvbGUubG9nKGVycik7XHJcbiAgICAgIC8vICAgfSxcclxuICAgICAgLy8gfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuZm9ybSkge1xyXG4gICAgICAgIHRoaXMuZm9ybS5kZXNjcmltaW5hdG9yVmFsdWUgPSB1bmRlZmluZWRcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGdldCBjb21wb25lbnREZXNjcmltaW5hdG9yKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvbXBvbmVudERlc2NyaW1pbmF0b3JcclxuICB9XHJcblxyXG5cclxuICBAVmlld0NoaWxkKFRzaUZvcm1Db21wb25lbnQpIGZvcm0/OiBUc2lGb3JtQ29tcG9uZW50O1xyXG5cclxuXHJcbiAgQFZpZXdDaGlsZChUc2lCdXR0b25Db21wb25lbnQpIG1vZGFsRm9vdGVyPzogRWxlbWVudFJlZiB8IGFueTtcclxuXHJcbiAgQFZpZXdDaGlsZHJlbihUc2lDaGVja2JveENvbXBvbmVudCkgY2hlY2tib3g/OiBBcnJheTxUc2lDaGVja2JveENvbXBvbmVudD47XHJcblxyXG4gIGZhdWx0eUlucHV0cyA6IEZvcm1WYWxpZGl0eVJlc3VsdFtdID0gW107XHJcbiAgaXNGb3JtVmFsaWQgOiBib29sZWFuIHwgdW5kZWZpbmVkO1xyXG4gIHJlcXVpcmVkSW5wdXRzOiBUc2lJbnB1dEJhc2VbXSA9IFtdO1xyXG4gIC8vIEBWaWV3Q2hpbGRyZW4oRWRpdGFibGVHcmlkQ29tcG9uZW50KSBlZGl0YWJsZUdyaWRDb21wb25lbnRzITogUXVlcnlMaXN0PEVkaXRhYmxlR3JpZENvbXBvbmVudD47XHJcblxyXG4gIC8vIEBWaWV3Q2hpbGRyZW4oVHNpVmlld0dyaWRDb21wb25lbnQpIHZpZXdHcmlkc0NvbXBvbmVudHMhOiBRdWVyeUxpc3Q8VHNpVmlld0dyaWRDb21wb25lbnQ+O1xyXG4gIC8vIEBWaWV3Q2hpbGRyZW4oVHNpR2VuZXJpY0dyaWRDb21wb25lbnQpIGdlbmVyaWNHcmlkc0NvbXBvbmVudHMhOiBRdWVyeUxpc3Q8VHNpR2VuZXJpY0dyaWRDb21wb25lbnQ+O1xyXG4gIC8vIEBWaWV3Q2hpbGRyZW4oVHNpR2VuZXJpY0NydWRDb21wb25lbnQpIGdlbmVyaWNDcnVkc0NvbXBvbmVudHMhOiBRdWVyeUxpc3Q8VHNpR2VuZXJpY0NydWRDb21wb25lbnQ+O1xyXG4gIGVkaXRhYmxlR3JpZENvbXBvbmVudHM6IEFycmF5PEVkaXRhYmxlR3JpZENvbXBvbmVudD4gPSBbXTtcclxuICB2aWV3R3JpZHNDb21wb25lbnRzOiBBcnJheTxUc2lWaWV3R3JpZENvbXBvbmVudD4gPSBbXTtcclxuICBnZW5lcmljR3JpZHNDb21wb25lbnRzOiBBcnJheTxUc2lHZW5lcmljR3JpZENvbXBvbmVudD4gPSBbXTtcclxuICBnZW5lcmljQ3J1ZHNDb21wb25lbnRzOiBBcnJheTxUc2lHZW5lcmljQ3J1ZENvbXBvbmVudD4gPSBbXTtcclxuXHJcblxyXG4gIGZvcm1SZWY/OiBOZ0Zvcm07XHJcbiAgaXNGb3JtRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBjdWRDb21wb25lbnQ6IGFueTtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIElucHV0c1xyXG4gIEBJbnB1dCgpIGl0ZW1EaWFsb2c6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBtb2RlPzogc3RyaW5nID0gJyc7XHJcbiAgQElucHV0KCkgaWQ/OiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBfaXNsb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGlzbG9hZGluZyh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5faXNsb2FkaW5nID0gdmFsdWU7XHJcbiAgICBjb25zb2xlLmxvZygnaXNsb2FkaW5nIHNldCB0bycsIHZhbHVlKTtcclxuICAgIGlmICghdmFsdWUpIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5wcm9jZXNzRGlzYWJsZWRJbnB1dHModGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0KVxyXG4gICAgICB9LCAwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBpc2xvYWRpbmcoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5faXNsb2FkaW5nO1xyXG4gIH1cclxuICBASW5wdXQoKSBoZWFkZXI/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgc2F2aW5nID0gZmFsc2U7XHJcbiAgQElucHV0KCkgaXRlbTogYW55O1xyXG5cclxuICBwcml2YXRlIF9zdGF0dXM/OiBzdHJpbmcgPSAnJztcclxuICBnZXQgc3RhdHVzKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3RhdHVzO1xyXG4gIH1cclxuICBASW5wdXQoKSBzZXQgc3RhdHVzKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuX3N0YXR1cyA9IHZhbHVlO1xyXG4gICAgaWYgKHRoaXMuZm9ybSAgJiYgdGhpcy5mb3JtLnN0YXR1cyAhPT0gdGhpcy5fc3RhdHVzKSB7XHJcbiAgICAgIHRoaXMuZm9ybS5zdGF0dXMgPSB0aGlzLl9zdGF0dXM7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vYnNNb2RhbFJlZj86IGFueTtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgcHJpdmF0ZSBfdmlld0NvbnRhaW5lclJlZiA9IGluamVjdChWaWV3Q29udGFpbmVyUmVmKVxyXG4gIHByaXZhdGUgX3JlbmRlcmVyID0gaW5qZWN0KFJlbmRlcmVyMilcclxuICBwcml2YXRlIF9sYXlvdXRIZWxwZXJTZXJ2aWNlID0gaW5qZWN0KExheW91dEhlbHBlclNlcnZpY2UpXHJcbiAgcHJpdmF0ZSBfZW50aXR5Q29uZmlndXJhdGlvbnNTZXJ2aWNlID0gaW5qZWN0KEVudGl0eUNvbmZpZ3VyYXRpb25TZXJ2aWNlKVxyXG4gIHByaXZhdGUgX3dvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UgPSBpbmplY3QoV29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZSlcclxuICBwcml2YXRlIF9wcmVzZW50YXRpb25TZXR0aW5nU2VydmljZSA9IGluamVjdChQcmVzZW50YXRpb25TZXR0aW5nU2VydmljZSlcclxuICBwcml2YXRlIF9tZXNzYWdlSW5mb1NlcnZpY2UgPSBpbmplY3QoVHNpTm90aWZpY2F0aW9uU2VydmljZSlcclxuICBwcml2YXRlIF9lcnJvclJlc3BvbnNlTWFuYWdlciA9IGluamVjdChFcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2UpXHJcbiAgcHJpdmF0ZSBfcHJlc2VudGF0aW9uRGVzaWduZXJTZXJ2aWNlID0gaW5qZWN0KFByZXNlbnRhdGlvbkRlc2lnbmVyU2VydmljZSlcclxuICBwcml2YXRlIF9wcmVzZW50YXRpb25EZXNpZ25lckJhc2VTZXJ2aWNlID0gaW5qZWN0KFByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZVNlcnZpY2UpXHJcbiAgcHJpdmF0ZSBfcmVwb3J0aW5nU2VydmljZSA9IGluamVjdChSZXBvcnRpbmdTZXJ2aWNlKVxyXG4gIHB1YmxpYyBsb2NhbGl6ZT8gPSBpbmplY3QoTG9jYWxpemVQaXBlKVxyXG4gIHB1YmxpYyBfaW5wdXRSZWdpc3RyeSA9IGluamVjdChJbnB1dFJlZ2lzdHJ5U2VydmljZSlcclxuICBwcml2YXRlIGRpcmVjdGl2ZUVsZW1lbnRzOiAoUHJlc2VudGF0aW9uRGVzaWduZXJEaXJlY3RpdmUgfCBQcmVzZW50YXRpb25EZXNpZ25lckRpcmVjdGl2ZUJhc2UpW10gPSBbXTtcclxuICBwcmVzZW50YXRpb25SZXF1ZXN0OiBQcmVzZW50YXRpb25TZXR0aW5nID0gbmV3IFByZXNlbnRhdGlvblNldHRpbmcoKVxyXG4gIF9kZXNpZ25Nb2RlRm9ybVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkO1xyXG4gIF9zYXZlV29ya2Zsb3dGb3JtQ29uZmlndXJhdGlvblN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkXHJcbiAgX2FkZGVkRGlyZWN0aXZlU3Vic2NyaXRwaW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWRcclxuICBfYWRkZWREaXJlY3RpdmVCYXNlU3Vic2NyaXRwaW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWRcclxuICAvLyNyZWdpb24gT3V0cHV0c1xyXG4gIEBPdXRwdXQoKSBvblNhdmUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgcHJpdmF0ZSBfZ2VuZXJpY1ZhbGlkYXRpb25TdGF0ZVNlcnZpY2U/OiBHZW5lcmljVmFsaWRhdGlvblN0YXRlU2VydmljZSA9IGluamVjdChHZW5lcmljVmFsaWRhdGlvblN0YXRlU2VydmljZSk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIHJlZj86IER5bmFtaWNEaWFsb2dSZWYsXHJcbiAgICBwdWJsaWMgY29uZmlnPzogRHluYW1pY0RpYWxvZ0NvbmZpZyxcclxuICAgIHB1YmxpYyBvdmVycmlkZSBjZFJlZj86IENoYW5nZURldGVjdG9yUmVmKVxyXG4gIHtcclxuICAgIHN1cGVyKGNkUmVmKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBpc1JlcG9ydGluZ1Rvb2xiYXJEaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHdvcmtmbG93SW5mb3JtYXRpb24/OiB3b3JrZmxvd0luc3RhbmNlSW5mb3JtYXRpb25SZXNwb25zZVxyXG4gIGN1c3RvbURhdGE/OiBhbnlcclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIG92ZXJyaWRlIG5nT25Jbml0KCkge1xyXG4gICAgc3VwZXIubmdPbkluaXQoKTtcclxuICAgIHRoaXMuX2luaXRNb2RhbFJlZigpO1xyXG4gICAgdGhpcy5pbml0TW9kYWxEYXRhKCk7XHJcbiAgICB0aGlzLl9hZGRlZERpcmVjdGl2ZVN1YnNjcml0cGlvbiA9IHRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyU2VydmljZS5hZGRlZERpcmVjdGl2ZU9ic2VydmFibGVcclxuICAgICAgLnN1YnNjcmliZShkYXRhID0+IHtcclxuICAgICAgICBpZiAoZGF0YS50cmVhdGVkKSB7XHJcbiAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLmlzRGVzZ2luTW9kZUZyb21Xb3JrZmxvdykge1xyXG4gICAgICAgICAgdGhpcy5lbnRpdHlJbmZvID0gdGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS5jdXJyZW50V29ya2Zsb3dFbnRpdHlJbmZvXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICghdGhpcy5lbnRpdHlJbmZvPy5kaXNjcmltaW5hdG9yUHJvcGVydHlOYW1lICYmICF0aGlzLmVudGl0eUluZm8/LmRpc2NyaW1pbmF0b3JDbGFzc05hbWUpIHtcclxuICAgICAgICAgIHRoaXMucHJvY2Vzc1NpbmdsZUVsZW1lbnQoZGF0YSlcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5kZXNjcmltaW5hdG9yVmFsdWUpIHtcclxuICAgICAgICAgIHRoaXMucHJvY2Vzc1NpbmdsZUVsZW1lbnQoZGF0YSlcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcblxyXG4gICAgICB0aGlzLl9hZGRlZERpcmVjdGl2ZUJhc2VTdWJzY3JpdHBpb24gPSB0aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lckJhc2VTZXJ2aWNlLmFkZGVkRGlyZWN0aXZlT2JzZXJ2YWJsZVxyXG4gICAgICAuc3Vic2NyaWJlKGRhdGEgPT4ge1xyXG4gICAgICAgIGlmIChkYXRhLnRyZWF0ZWQpIHtcclxuICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3dvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UuaXNEZXNnaW5Nb2RlRnJvbVdvcmtmbG93KSB7XHJcbiAgICAgICAgICB0aGlzLmVudGl0eUluZm8gPSB0aGlzLl93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLmN1cnJlbnRXb3JrZmxvd0VudGl0eUluZm9cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5lbnRpdHlJbmZvPy5kaXNjcmltaW5hdG9yUHJvcGVydHlOYW1lICYmICF0aGlzLmVudGl0eUluZm8/LmRpc2NyaW1pbmF0b3JDbGFzc05hbWUpIHtcclxuICAgICAgICAgIHRoaXMucHJvY2Vzc1NpbmdsZUVsZW1lbnQoZGF0YSlcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5kZXNjcmltaW5hdG9yVmFsdWUpIHtcclxuICAgICAgICAgIHRoaXMucHJvY2Vzc1NpbmdsZUVsZW1lbnQoZGF0YSlcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcblxyXG4gICAgdGhpcy5fZGVzaWduTW9kZUZvcm1TdWJzY3JpcHRpb24gPSB0aGlzLl9sYXlvdXRIZWxwZXJTZXJ2aWNlLl9kZXNpZ25Nb2RlRm9ybVN1YmplY3Quc3Vic2NyaWJlKGRhdGEgPT4ge1xyXG4gICAgICBpZiAoZGF0YSAmJiBkYXRhID09IHRydWUpIHtcclxuICAgICAgICB0aGlzLnRvZ2dsZURlc2lnbk1vZGUoKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgdG9nZ2xlRGVzaWduTW9kZSgpIHtcclxuICAgIHRoaXMucmVtb3ZlVHNpTW9kYWxGb290ZXIoKVxyXG4gICAgdGhpcy5jcmVhdGVTYXZlQnV0dG9uKCk7XHJcblxyXG4gICAgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0ID0gdGhpcy5fcHJlc2VudGF0aW9uU2V0dGluZ1NlcnZpY2UuZ2V0UHJlc2VudGF0aW9uU2V0dGluZ0J5Q29tcG9uZW50SWRlbnRpZmllclN5bmModGhpcy5nZXRDb21wb25lbnRJZGVudGlmaWVyKCksIHRoaXMuZGVzY3JpbWluYXRvclZhbHVlKSA/PyBuZXcgUHJlc2VudGF0aW9uU2V0dGluZygpXHJcblxyXG4gICAgdGhpcy5kaXJlY3RpdmVFbGVtZW50cyA9IFsuLi50aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lclNlcnZpY2UuZ2V0RGlyZWN0aXZlcygpLFxyXG4gICAgLi4udGhpcy5fcHJlc2VudGF0aW9uRGVzaWduZXJCYXNlU2VydmljZS5nZXREaXJlY3RpdmVzKClcclxuICAgIF07XHJcblxyXG4gICAgdGhpcy5kaXJlY3RpdmVFbGVtZW50cz8uZm9yRWFjaChpbnB1dCA9PiB7XHJcbiAgICAgIGlucHV0Lmluc2VydEVsZW1lbnQoKTtcclxuICAgICAgaWYgKGlucHV0IGluc3RhbmNlb2YgUHJlc2VudGF0aW9uRGVzaWduZXJEaXJlY3RpdmUpIHtcclxuICAgICAgICBpbnB1dC5zZWxlY3RBcHByb3JpYXRlQ29sdW1ucyh0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QpO1xyXG4gICAgICB9XHJcbiAgICAgIGlucHV0LmFkZENoZWNrYm94ZXNUb0lucHV0cyh0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QpO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgc3VwZXIubmdPbkRlc3Ryb3koKVxyXG4gICAgdGhpcy51bnN1YnNjcmliZUZyb21BY3RpdmVTdWJzY3JpdHBpb24oKVxyXG4gICAgdGhpcy5fbGF5b3V0SGVscGVyU2VydmljZS5pc0Rlc2lnbk1vZGUgPSBmYWxzZVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy5kaXJlY3RpdmVFbGVtZW50cyA9IFsuLi50aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lclNlcnZpY2UuZ2V0RGlyZWN0aXZlcygpLFxyXG4gICAgLi4udGhpcy5fcHJlc2VudGF0aW9uRGVzaWduZXJCYXNlU2VydmljZS5nZXREaXJlY3RpdmVzKClcclxuICAgIF07XHJcbiAgICBjb25zb2xlLmxvZyhcImNvdW50IG9mIGRpcmVjdGl2ZUVsZW1lbnRzID0+IFwiLCB0aGlzLmRpcmVjdGl2ZUVsZW1lbnRzLmxlbmd0aClcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuX2xheW91dEhlbHBlclNlcnZpY2U/LmlzRGVzaWduTW9kZVxyXG4gICAgICAmJiAhdGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS5pc0Rlc2dpbk1vZGVGcm9tV29ya2Zsb3cpIHtcclxuICAgICAgLy8gdGhpcy5yZW1vdmVUc2lNb2RhbEZvb3RlcigpXHJcbiAgICAgIC8vIHRoaXMuY3JlYXRlU2F2ZUJ1dHRvbigpXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuXHJcbiAgICAgIGlmICh0aGlzLl93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLmlzRGVzZ2luTW9kZUZyb21Xb3JrZmxvdykge1xyXG4gICAgICAgIHRoaXMuZW50aXR5SW5mbyA9IHRoaXMuX3dvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UuY3VycmVudFdvcmtmbG93RW50aXR5SW5mb1xyXG4gICAgICB9XHJcbiAgICAgIC8vIGVsc2Uge1xyXG4gICAgICAvLyAgIHRoaXMuZW50aXR5SW5mbyA9IGF3YWl0IHRoaXMuX2VudGl0eUNvbmZpZ1NlcnZpY2UuZ2V0RW50aXR5SW5mb0Zyb21DYWNoZSh0aGlzLmJ1c2luZXNzQ2xhc3MpXHJcbiAgICAgIC8vIH1cclxuICAgIH1cclxuXHJcbiAgICAvL2luaXQgZ2VuZXJpY0NydWQgcmVwb3J0aW5nXHJcbiAgICBpZiAodGhpcy5mb3JtKSB7XHJcbiAgICAgIHRoaXMuZm9ybS5mb3JtUmVmQ2hhbmdlLnN1YnNjcmliZShmID0+IHtcclxuICAgICAgICBpZiAoZikge1xyXG4gICAgICAgICAgdGhpcy5mb3JtUmVmID0gZjtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmZvcm0uZGlzYWJsZWQgPSB0aGlzLmlzRm9ybURpc2FibGVkO1xyXG4gICAgICB0aGlzLmZvcm0uZm9ybUVuZHBvaW50ID0gdGhpcy5mb3JtRW5kcG9pbnQ7XHJcbiAgICAgIHRoaXMuZm9ybS5mb3JtTmFtZSA9IHRoaXMuZm9ybU5hbWU7XHJcbiAgICAgIHRoaXMuZm9ybS5idXNpbmVzc0NsYXNzID0gdGhpcy5fYnVzaW5lc3NDbGFzc1xyXG4gICAgICB0aGlzLmZvcm0uZm9ybU5hbWUgPSB0aGlzLmZvcm1OYW1lO1xyXG4gICAgICB0aGlzLmZvcm0uaWQgPSB0aGlzLmlkO1xyXG4gICAgICB0aGlzLmZvcm0ubW9kZSA9IHRoaXMubW9kZVxyXG5cclxuICAgICAgLy8gd29ya2Zsb3cgZm9ybSBkZXNpZ25cclxuICAgICAgdGhpcy5fc2F2ZVdvcmtmbG93Rm9ybUNvbmZpZ3VyYXRpb25TdWJzY3JpcHRpb24gPSB0aGlzLmZvcm0ub25TdWJtaXRGb3JtV29ya2Zsb3dDb25maWd1cmF0aW9uLnN1YnNjcmliZShkYXRhID0+IHtcclxuICAgICAgICBsZXQgd29ya2Zsb3dGb3JtQ29uZmlndXJhdGlvbiA9IHRoaXMuZ2V0Rm9ybVdvcmZrbG93UHJlc2VudGF0aW9uU2V0dGluZygpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiRm9ybVdvcmZrbG93U2V0dGluZyA9PiBcIiwgd29ya2Zsb3dGb3JtQ29uZmlndXJhdGlvbilcclxuICAgICAgICB0aGlzLmhpZGUod29ya2Zsb3dGb3JtQ29uZmlndXJhdGlvbilcclxuICAgICAgfSlcclxuXHJcbiAgICAgIHRoaXMuZm9ybS5vblN0YXR1c0NoYW5nZS5zdWJzY3JpYmUoKG5ld1ZhbHVlIDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zdGF0dXMgPSBuZXdWYWx1ZTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5tb2RlID09IENvbXBvbmVudF9Nb2Rlcy5DUkVBVEUpIHtcclxuICAgICAgaWYgKHRoaXMuY2hlY2tib3gpIHtcclxuICAgICAgICB0aGlzLmNoZWNrYm94LmZvckVhY2goYm94ID0+IHtcclxuICAgICAgICAgIGJveC5pbnB1dEZpZWxkID0gZmFsc2U7XHJcbiAgICAgICAgICBib3guY2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBcclxuICB9XHJcblxyXG4gIGluaXRUc2lHcmlkc1JlZigpIHtcclxuICAgIHRoaXMudmlld0dyaWRzQ29tcG9uZW50cyA9IHRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyU2VydmljZS5nZXRWaWV3R3JpZHMoKVxyXG4gICAgdGhpcy5nZW5lcmljR3JpZHNDb21wb25lbnRzID0gdGhpcy5fcHJlc2VudGF0aW9uRGVzaWduZXJTZXJ2aWNlLmdldEdlbmVyaWNHcmlkcygpXHJcbiAgICB0aGlzLmVkaXRhYmxlR3JpZENvbXBvbmVudHMgPSB0aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lclNlcnZpY2UuZ2V0RWRpdGFibGVHcmlkcygpXHJcbiAgICB0aGlzLmdlbmVyaWNDcnVkc0NvbXBvbmVudHMgPSB0aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lclNlcnZpY2UuZ2V0R2VuZXJpY0NydWRzKClcclxuICB9XHJcblxyXG4gIGdldEZvcm1Xb3Jma2xvd1ByZXNlbnRhdGlvblNldHRpbmcoKSB7XHJcbiAgICBsZXQgcHJlc2VudGF0aW9uUmVxdWVzdCA9IG5ldyBQcmVzZW50YXRpb25TZXR0aW5nKClcclxuXHJcbiAgICB0aGlzLmRpcmVjdGl2ZUVsZW1lbnRzID0gWy4uLnRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyU2VydmljZS5nZXREaXJlY3RpdmVzKCksXHJcbiAgICAuLi50aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lckJhc2VTZXJ2aWNlLmdldERpcmVjdGl2ZXMoKVxyXG4gICAgXTtcclxuXHJcbiAgICBsZXQgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHM6IFByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxbXSA9IFtdXHJcbiAgICBsZXQgYXZhaWxhYmxlRGlyZWN0aXZlRWxlbWVudHMgPSB0aGlzLmRpcmVjdGl2ZUVsZW1lbnRzLmZpbHRlcih4ID0+XHJcbiAgICAgICEodGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0Py5wcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscy5zb21lKHkgPT5cclxuICAgICAgICB5LmJsb2NrTmFtZSA9PT0geC5wcmVzZW50YXRpb25EZXNpZ25lciAmJiAheS5pc0Jsb2NrVmlzaWJsZVxyXG4gICAgICApKVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmluaXRUc2lHcmlkc1JlZigpXHJcblxyXG4gICAgYXZhaWxhYmxlRGlyZWN0aXZlRWxlbWVudHM/LmZvckVhY2goKGRpcmVjdGl2ZSkgPT4ge1xyXG5cclxuICAgICAgbGV0IGNvbmZpZ3VyYXRpb24gPSB1bmRlZmluZWRcclxuXHJcblxyXG4gICAgICBsZXQgZ3JpZFN0YXRlID0gW1xyXG4gICAgICAgIC4uLnRoaXMudmlld0dyaWRzQ29tcG9uZW50cyxcclxuICAgICAgICAuLi50aGlzLmdlbmVyaWNHcmlkc0NvbXBvbmVudHMsXHJcbiAgICAgICAgLi4udGhpcy5nZW5lcmljQ3J1ZHNDb21wb25lbnRzLFxyXG4gICAgICAgIC4uLnRoaXMuZWRpdGFibGVHcmlkQ29tcG9uZW50c1xyXG4gICAgICBdXHJcbiAgICAgICAgLmZpbmQoeCA9PiB4LmlkID09PSBkaXJlY3RpdmUucHJlc2VudGF0aW9uRGVzaWduZXIgfHwgKCdmb3JtTmFtZScgaW4geCAmJiB4LmZvcm1OYW1lID09PSBkaXJlY3RpdmUucHJlc2VudGF0aW9uRGVzaWduZXIpKVxyXG4gICAgICAgID8uZ2V0U3RhdGUoKTtcclxuXHJcbiAgICAgIGNvbmZpZ3VyYXRpb24gPSBncmlkU3RhdGUgPyBKU09OLnN0cmluZ2lmeShncmlkU3RhdGUpIDogdW5kZWZpbmVkO1xyXG5cclxuXHJcbiAgICAgIGxldCBvYmplY3Q6IFByZXNlbnRhdGlvblNldHRpbmdEZXRhaWwgPSB7XHJcbiAgICAgICAgYmxvY2tOYW1lOiBkaXJlY3RpdmUucHJlc2VudGF0aW9uRGVzaWduZXIsXHJcbiAgICAgICAgaXNCbG9ja1Zpc2libGU6ICFkaXJlY3RpdmUuc2hvd0hpZGVDaGVja2JveENvbXBvbmVudFJlZj8uaW5zdGFuY2U/Ll9jaGVja2VkLFxyXG4gICAgICAgIHVpZDogdGhpcy5nZXRQcmVzZW50YXRpb25TZXRpbmdEZXRhaWxVaWQoZGlyZWN0aXZlLnByZXNlbnRhdGlvbkRlc2lnbmVyID8/IFwiXCIpLFxyXG4gICAgICAgIGNvbmZpZ3VyYXRpb246IGNvbmZpZ3VyYXRpb24sXHJcbiAgICAgICAgaXNJbnB1dEVuYWJsZWQ6ICFkaXJlY3RpdmUuZGlzYWJsZWRDaGVja2JveENvbXBvbmVudFJlZj8uaW5zdGFuY2U/Ll9jaGVja2VkXHJcbiAgICAgIH1cclxuICAgICAgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHMucHVzaChvYmplY3QpXHJcbiAgICB9KVxyXG5cclxuICAgIHByZXNlbnRhdGlvblJlcXVlc3QuY29tcG9uZW50SWRlbnRpZmVyID0gdGhpcy5nZXRDb21wb25lbnRJZGVudGlmaWVyKCk7XHJcbiAgICBwcmVzZW50YXRpb25SZXF1ZXN0LnByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzID0gcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHNcclxuXHJcbiAgICBjb25zb2xlLmxvZyhcInByZXNlbnRhdGlvblJlcXVlc3QgPT4gXCIsIHByZXNlbnRhdGlvblJlcXVlc3QpXHJcbiAgICByZXR1cm4gcHJlc2VudGF0aW9uUmVxdWVzdFxyXG4gIH1cclxuXHJcblxyXG4gIGlzRGVsZXRlTW9kZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLm1vZGUgPT0gQ29tcG9uZW50X01vZGVzLkRFTEVURTtcclxuICB9XHJcbiAgaXNTdWJtaXREaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgIC8vcmV0dXJuICF0aGlzLmZvcm1SZWY/LmZvcm0/LnZhbGlkIHx8IHRoaXMuc2F2aW5nO1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBpc0NvbnN1bHRNb2RlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMubW9kZSA9PSBDb21wb25lbnRfTW9kZXMuQ09OU1VMVDtcclxuICB9XHJcblxyXG4gIGlzRHVwbGljYXRlTW9kZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLm1vZGUgPT0gQ29tcG9uZW50X01vZGVzLkRVUExJQ0FURTtcclxuICB9XHJcbiAgaXNFZGl0TW9kZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLm1vZGUgPT0gQ29tcG9uZW50X01vZGVzLkVESVQ7XHJcbiAgfVxyXG4gIC8vI3JlZ2lvbiBwcml2YXRlIG1ldGhvZHNcclxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgaW5pdE1vZGFsRGF0YSgpIHtcclxuICAgIHN1cGVyLmluaXRNb2RhbERhdGEoKVxyXG4gICAgaWYgKHRoaXMub3BlbmVkRGlhbG9nUmVmICE9IG51bGxcclxuICAgICAgJiYgdGhpcy5vcGVuZWREaWFsb2dSZWYgIT0gdW5kZWZpbmVkXHJcbiAgICAgICYmIHRoaXMub3BlbmVkRGlhbG9nQ29uZmlnICE9IG51bGxcclxuICAgICAgJiYgdGhpcy5vcGVuZWREaWFsb2dDb25maWcgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIC8vY2hlY2sgaGF2ZSBvcGVuZWREaWFsb2dDb25maWdcclxuICAgICAgaWYgKHRoaXMub3BlbmVkRGlhbG9nQ29uZmlnLmRhdGEgIT0gbnVsbCAmJiB0aGlzLm9wZW5lZERpYWxvZ0NvbmZpZy5kYXRhICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMuY3VkQ29tcG9uZW50ID0gdGhpcy5vcGVuZWREaWFsb2dDb25maWcuZGF0YS5jdWRDb21wb25lbnQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3ZlcmlmeU1vZGFsRGF0YSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLm9wZW5lZERpYWxvZ1JlZiAhPSBudWxsXHJcbiAgICAgICYmIHRoaXMub3BlbmVkRGlhbG9nUmVmICE9IHVuZGVmaW5lZFxyXG4gICAgICAmJiB0aGlzLm9wZW5lZERpYWxvZ0NvbmZpZyAhPSBudWxsXHJcbiAgICAgICYmIHRoaXMub3BlbmVkRGlhbG9nQ29uZmlnICE9IHVuZGVmaW5lZDtcclxuICB9XHJcbiAgXHJcbiAgcHJpdmF0ZSBfaW5pdE1vZGFsUmVmKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX3ZlcmlmeU1vZGFsRGF0YSgpKSB7XHJcbiAgICAgIC8vdGhpcy5ic01vZGFsUmVmID0ge2hpZGU6ICgpID0+IHRoaXMub3BlbmVkRGlhbG9nUmVmLmRlc3Ryb3koKSxjbG9zZTogKHZhbDogYW55KT0+e3RoaXMub3BlbmVkRGlhbG9nUmVmLmNsb3NlKHZhbCl9fVxyXG4gICAgfVxyXG4gIH1cclxuICAvL1xyXG4gIGwoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMubG9jYWxpemUgIT0gbnVsbFxyXG4gICAgICAmJiB0aGlzLmxvY2FsaXplICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5sb2NhbGl6ZS50cmFuc2Zvcm0oa2V5KTtcclxuICAgIH1cclxuICAgIHJldHVybiBrZXk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gdHJhaXRlciBtdWx0aXBsZSBjb21ib1xyXG4gIGFsbENvbWJvTG9hZGluZ1N0YXR1czogQXJyYXk8Q29tYm9TdGF0dXNNb2RlbD4gPSBbXTtcclxuICBhcmVBbGxDb21ib0xvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByb2Nlc3NDb21ib0luaXRFdmVudChjb21ib1N0YXR1czogQ29tYm9TdGF0dXNNb2RlbCkge1xyXG4gICAgaWYgKCF0aGlzLmFsbENvbWJvTG9hZGluZ1N0YXR1cy5maW5kKHUgPT4gdS51aWQgPT0gY29tYm9TdGF0dXMudWlkKSlcclxuICAgICAgdGhpcy5hbGxDb21ib0xvYWRpbmdTdGF0dXMucHVzaChjb21ib1N0YXR1cyk7XHJcbiAgfVxyXG5cclxuICBwcm9jZXNzQ29tYm9Jc0xvYWRlZEV2ZW50KGNvbWJvU3RhdHVzOiBDb21ib1N0YXR1c01vZGVsKSB7XHJcbiAgICBsZXQgY29tYm9TID0gdGhpcy5hbGxDb21ib0xvYWRpbmdTdGF0dXMuZmluZCh1ID0+IHUudWlkID09IGNvbWJvU3RhdHVzLnVpZCk7XHJcbiAgICBpZiAoY29tYm9TICE9IG51bGwgJiYgY29tYm9TICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICBjb21ib1MuaXNEYXRhTG9hZGVkID0gY29tYm9TdGF0dXMuaXNEYXRhTG9hZGVkO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hcmVBbGxDb21ib0xvYWRlZEZuKCk7XHJcbiAgfVxyXG5cclxuICBhcmVBbGxDb21ib0xvYWRlZEZuKCk6IHZvaWQge1xyXG4gICAgbGV0IHJlc3VsdDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgaWYgKHRoaXMuYWxsQ29tYm9Mb2FkaW5nU3RhdHVzLmxlbmd0aCA+IDApXHJcbiAgICAgIHRoaXMuYWxsQ29tYm9Mb2FkaW5nU3RhdHVzLmZvckVhY2godSA9PiB7XHJcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmIHUuaXNEYXRhTG9hZGVkO1xyXG4gICAgICB9KTtcclxuICAgIGVsc2UgcmVzdWx0ID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy5hcmVBbGxDb21ib0xvYWRlZCA9IHJlc3VsdDtcclxuICB9XHJcblxyXG4gIGhpZGUodmFsPzogYW55KSB7XHJcbiAgICBpZiAodGhpcy5vcGVuZWREaWFsb2dSZWYgIT0gbnVsbCAmJiB0aGlzLm9wZW5lZERpYWxvZ1JlZiAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKHZhbCA9PSBmYWxzZSkge1xyXG4gICAgICAgIHRoaXMub3BlbmVkRGlhbG9nUmVmLmRlc3Ryb3koKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLm9wZW5lZERpYWxvZ1JlZi5jbG9zZSh2YWwpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiB0cmFpdGVyIG11bHRpcGxlIGNvbWJvXHJcblxyXG4gIGdldFdvcmtmbG93RXRhdEZvcm0oKSB7XHJcbiAgICBsZXQgd29ya2Zsb3dFdGF0Rm9ybSA9IHRoaXMuX3dvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2Uud29ya2Zsb3dFdGF0Rm9ybUZvckN1cnJlbnRGb3JtXHJcbiAgICAgID8uZmluZCh4ID0+IHgudWlkID09IHRoaXMud29ya2Zsb3dJbmZvcm1hdGlvbj8ud29ya2Zsb3dFdGF0KVxyXG5cclxuICAgIGlmICh3b3JrZmxvd0V0YXRGb3JtKSB7XHJcbiAgICAgIGxldCB3b3JrZmxvd0V0YXQgPSB0aGlzLl93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLm1hcFdvcmtmbG93RXRhdEZvcm1Ub1ByZXNlbnRhdGlvblNldHRpbmcoXHJcbiAgICAgICAgd29ya2Zsb3dFdGF0Rm9ybT8ud29ya2Zsb3dFdGF0c0Zvcm1zXHJcbiAgICAgICk7XHJcblxyXG4gICAgICByZXR1cm4gd29ya2Zsb3dFdGF0XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdW5kZWZpbmVkXHJcbiAgfVxyXG5cclxuICAvLyAjcmVnaW9uIFByZXNlbnRhdGlvbiBTZXR0aW5nc1xyXG4gIGFkZElucHV0cyhcclxuICAgIHByZXNlbnRhdGlvblJlcXVlc3Q6IFByZXNlbnRhdGlvblNldHRpbmcsXHJcbiAgICBhcHBseUdyaWRDb25maWc6IGJvb2xlYW4gPSB0cnVlLFxyXG4gICAgd29ya2Zsb3dFdGF0PzogUHJlc2VudGF0aW9uU2V0dGluZyxcclxuICAgIGRpcmVjdGl2ZUVsZW1lbnRzOiAoUHJlc2VudGF0aW9uRGVzaWduZXJEaXJlY3RpdmUgfCBQcmVzZW50YXRpb25EZXNpZ25lckRpcmVjdGl2ZUJhc2UpW10gPSB0aGlzLmRpcmVjdGl2ZUVsZW1lbnRzXHJcbiAgKTogdm9pZCB7XHJcblxyXG4gICAgaWYgKCghd29ya2Zsb3dFdGF0IHx8IHdvcmtmbG93RXRhdC5wcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscy5sZW5ndGggPT0gMClcclxuICAgICAgJiYgdGhpcy53b3JrZmxvd0luZm9ybWF0aW9uXHJcbiAgICAgICYmIHRoaXMud29ya2Zsb3dJbmZvcm1hdGlvbj8ud29ya2Zsb3dFdGF0KSB7XHJcbiAgICAgIHdvcmtmbG93RXRhdCA9IHRoaXMuZ2V0V29ya2Zsb3dFdGF0Rm9ybSgpXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaGFzUHJlc2VudGF0aW9uUmVxdWVzdCA9IHByZXNlbnRhdGlvblJlcXVlc3Q/LnByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzPy5sZW5ndGggPiAwO1xyXG5cclxuXHJcbiAgICBpZiAoaGFzUHJlc2VudGF0aW9uUmVxdWVzdCkge1xyXG4gICAgICBkaXJlY3RpdmVFbGVtZW50cyA9IGRpcmVjdGl2ZUVsZW1lbnRzLmZpbHRlcih4ID0+XHJcbiAgICAgICAgcHJlc2VudGF0aW9uUmVxdWVzdC5wcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscz8uc29tZShcclxuICAgICAgICAgIHkgPT4geS5ibG9ja05hbWUgPT09IHgucHJlc2VudGF0aW9uRGVzaWduZXIgJiYgKHkuaXNCbG9ja1Zpc2libGUgPT0gdW5kZWZpbmVkIHx8IHkuaXNCbG9ja1Zpc2libGUgPT0gdHJ1ZSlcclxuICAgICAgICAgICAgJiYgeC50cmVhdGVkID09IGZhbHNlXHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGRpcmVjdGl2ZUVsZW1lbnRzPy5mb3JFYWNoKGRpcmVjdGl2ZSA9PiB7XHJcblxyXG4gICAgICBjb25zdCBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsID0gcHJlc2VudGF0aW9uUmVxdWVzdC5wcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscy5maW5kKHggPT4geC5ibG9ja05hbWUgPT0gZGlyZWN0aXZlLnByZXNlbnRhdGlvbkRlc2lnbmVyKVxyXG5cclxuICAgICAgaWYgKHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWwgPT0gdW5kZWZpbmVkIHx8IHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWwuaXNCbG9ja1Zpc2libGUpIHtcclxuXHJcbiAgICAgICAgbGV0IHdvcmZrZmxvd0V0YXRGb3JtID0gdGhpcy5nZXRXb3JrZmxvd0V0YXRGb3JtKCk7XHJcblxyXG4gICAgICAgIGlmICh3b3Jma2Zsb3dFdGF0Rm9ybSkge1xyXG4gICAgICAgICAgbGV0IHdvcmtmbG93Q29uZmlnID0gd29yZmtmbG93RXRhdEZvcm0ucHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHMuZmluZCh4ID0+IHguYmxvY2tOYW1lID09IGRpcmVjdGl2ZS5wcmVzZW50YXRpb25EZXNpZ25lcilcclxuXHJcbiAgICAgICAgICBpZiAoIXdvcmtmbG93Q29uZmlnKSB7XHJcbiAgICAgICAgICAgIGRpcmVjdGl2ZS5leGVjdXRlKHRydWUsIHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWw/LmNvbmZpZ3VyYXRpb24pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmICh3b3JrZmxvd0NvbmZpZyAmJiB3b3JrZmxvd0NvbmZpZy5pc0Jsb2NrVmlzaWJsZSAmJiAod29ya2Zsb3dDb25maWcuaXNJbnB1dEVuYWJsZWQgPT0gdW5kZWZpbmVkIHx8IHdvcmtmbG93Q29uZmlnLmlzSW5wdXRFbmFibGVkID09IHRydWUpKSB7XHJcbiAgICAgICAgICAgIGRpcmVjdGl2ZS5leGVjdXRlKHRydWUsIHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWw/LmNvbmZpZ3VyYXRpb24pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmICh3b3JrZmxvd0NvbmZpZyAmJiB3b3JrZmxvd0NvbmZpZy5pc0Jsb2NrVmlzaWJsZSAmJiB3b3JrZmxvd0NvbmZpZy5pc0lucHV0RW5hYmxlZCA9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICBkaXJlY3RpdmUuZGlzYWJsZUlucHV0cygpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgZGlyZWN0aXZlLmV4ZWN1dGUodHJ1ZSwgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbD8uY29uZmlndXJhdGlvbilcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLmlzRGVzZ2luTW9kZUZyb21Xb3JrZmxvdykge1xyXG4gICAgICAgICAgZGlyZWN0aXZlLmFkZENoZWNrYm94ZXNUb0lucHV0cyh0aGlzLl93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLndvcmtmbG93Rm9ybUNvbmZpZ3VyYXRpb24pXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMubW9kZSA9PT0gTW9kZXMuY3JlYXRlKSB7XHJcbiAgICAgIHRoaXMucHJvY2Vzc0Rpc2FibGVkSW5wdXRzKHByZXNlbnRhdGlvblJlcXVlc3QsIGRpcmVjdGl2ZUVsZW1lbnRzKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgdGhpcy5yZW1vdmVFbXB0eUFuY2VzdG9yc0Zyb21FbGVtZW50cygpO1xyXG4gIH1cclxuXHJcblxyXG5cclxuICBwcm9jZXNzRGlzYWJsZWRJbnB1dHMocHJlc2VudGF0aW9uUmVxdWVzdDogUHJlc2VudGF0aW9uU2V0dGluZywgZGlyZWN0aXZlRWxlbWVudHM6IChQcmVzZW50YXRpb25EZXNpZ25lckRpcmVjdGl2ZSB8IFByZXNlbnRhdGlvbkRlc2lnbmVyRGlyZWN0aXZlQmFzZSlbXSA9IHRoaXMuZGlyZWN0aXZlRWxlbWVudHMpIHtcclxuICAgIGlmICh0aGlzLl9sYXlvdXRIZWxwZXJTZXJ2aWNlPy5pc0Rlc2lnbk1vZGUgfHwgdGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS5pc0Rlc2dpbk1vZGVGcm9tV29ya2Zsb3cpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBjb25zdCBoYXNQcmVzZW50YXRpb25SZXF1ZXN0ID0gcHJlc2VudGF0aW9uUmVxdWVzdD8ucHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHM/Lmxlbmd0aCA+IDA7XHJcblxyXG4gICAgaWYgKGhhc1ByZXNlbnRhdGlvblJlcXVlc3QpIHtcclxuICAgICAgZGlyZWN0aXZlRWxlbWVudHMgPSBkaXJlY3RpdmVFbGVtZW50cy5maWx0ZXIoeCA9PlxyXG4gICAgICAgIHByZXNlbnRhdGlvblJlcXVlc3QucHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHM/LnNvbWUoXHJcbiAgICAgICAgICB5ID0+IHkuYmxvY2tOYW1lID09PSB4LnByZXNlbnRhdGlvbkRlc2lnbmVyICYmIHkuaXNCbG9ja1Zpc2libGVcclxuICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGNvbnN0IHdvcmZrZmxvd0V0YXRGb3JtID0gdGhpcy5nZXRXb3JrZmxvd0V0YXRGb3JtKClcclxuICAgIGRpcmVjdGl2ZUVsZW1lbnRzPy5mb3JFYWNoKGRpcmVjdGl2ZSA9PiB7XHJcblxyXG4gICAgICBsZXQgd29ya2Zsb3dDb25maWcgPSB3b3Jma2Zsb3dFdGF0Rm9ybT8ucHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHMuZmluZCh4ID0+IHguYmxvY2tOYW1lID09IGRpcmVjdGl2ZS5wcmVzZW50YXRpb25EZXNpZ25lcilcclxuXHJcbiAgICAgIGlmICh3b3JrZmxvd0NvbmZpZyAmJiAhd29ya2Zsb3dDb25maWcuaXNJbnB1dEVuYWJsZWQgJiYgKHdvcmtmbG93Q29uZmlnLmlzQmxvY2tWaXNpYmxlID8/IHRydWUpKSB7XHJcbiAgICAgICAgZGlyZWN0aXZlLmRpc2FibGVJbnB1dHMoKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlRW1wdHlBbmNlc3RvcnNGcm9tRWxlbWVudHMoKSB7XHJcbiAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgIC8vICAgdGhpcy5fcHJlc2VudGF0aW9uRGVzaWduZXJTZXJ2aWNlLmdldERpcmVjdGl2ZXMoKS5mb3JFYWNoKHMgPT4gcy5yZW1vdmVFbXB0eUFuY2VzdG9ycyhzPy50ZW1wVGVtcGxhdGVQYXJlbnROb2RlKSlcclxuICAgIC8vIH0sIDApO1xyXG4gIH1cclxuXHJcbiAgZ2V0UHJlc2VudGF0aW9uU2V0aW5nRGV0YWlsVWlkKGJsb2NrTmFtZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0Py5wcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscz8uZmluZCh4ID0+IHguYmxvY2tOYW1lID09IGJsb2NrTmFtZSk/LnVpZFxyXG4gIH1cclxuXHJcbiAgZ2V0Q29tcG9uZW50SWRlbnRpZmllcigpIHtcclxuICAgIC8vIGlmICh0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZSkge1xyXG4gICAgLy8gICByZXR1cm4gYCR7dGhpcy5fbXlOYW1lKCl9XyR7dGhpcy5kZXNjcmltaW5hdG9yVmFsdWV9YFxyXG4gICAgLy8gfVxyXG4gICAgcmV0dXJuIHRoaXMuX215TmFtZSgpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNhdmVQcm9wZXJ0aWVzKCk6IHZvaWQge1xyXG5cclxuICAgIHRoaXMuaW5pdFRzaUdyaWRzUmVmKClcclxuXHJcbiAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QgPSB0aGlzLl9wcmVzZW50YXRpb25TZXR0aW5nU2VydmljZS5nZXRQcmVzZW50YXRpb25TZXR0aW5nQnlDb21wb25lbnRJZGVudGlmaWVyU3luYyh0aGlzLmdldENvbXBvbmVudElkZW50aWZpZXIoKSwgdGhpcy5kZXNjcmltaW5hdG9yVmFsdWUpID8/IG5ldyBQcmVzZW50YXRpb25TZXR0aW5nKClcclxuXHJcbiAgICBpZiAoIXRoaXMucHJlc2VudGF0aW9uUmVxdWVzdCkge1xyXG4gICAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QgPSBuZXcgUHJlc2VudGF0aW9uU2V0dGluZygpXHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzOiBQcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsW10gPSBbXVxyXG5cclxuICAgIHRoaXMuZGlyZWN0aXZlRWxlbWVudHM/LmZvckVhY2goKGRpcmVjdGl2ZSkgPT4ge1xyXG5cclxuICAgICAgbGV0IGNvbmZpZ3VyYXRpb24gPSB1bmRlZmluZWRcclxuXHJcblxyXG4gICAgICBsZXQgZ3JpZFN0YXRlID0gW1xyXG4gICAgICAgIC4uLnRoaXMudmlld0dyaWRzQ29tcG9uZW50cyxcclxuICAgICAgICAuLi50aGlzLmdlbmVyaWNHcmlkc0NvbXBvbmVudHMsXHJcbiAgICAgICAgLi4udGhpcy5nZW5lcmljQ3J1ZHNDb21wb25lbnRzLFxyXG4gICAgICAgIC4uLnRoaXMuZWRpdGFibGVHcmlkQ29tcG9uZW50c1xyXG4gICAgICBdXHJcbiAgICAgICAgLmZpbmQoeCA9PiB4LmlkID09PSBkaXJlY3RpdmUucHJlc2VudGF0aW9uRGVzaWduZXIgfHwgKCdmb3JtTmFtZScgaW4geCAmJiB4LmZvcm1OYW1lID09PSBkaXJlY3RpdmUucHJlc2VudGF0aW9uRGVzaWduZXIpKVxyXG4gICAgICAgID8uZ2V0U3RhdGUoKTtcclxuXHJcbiAgICAgIGNvbmZpZ3VyYXRpb24gPSBncmlkU3RhdGUgPyBKU09OLnN0cmluZ2lmeShncmlkU3RhdGUpIDogdW5kZWZpbmVkO1xyXG5cclxuXHJcbiAgICAgIGxldCBvYmplY3Q6IFByZXNlbnRhdGlvblNldHRpbmdEZXRhaWwgPSB7XHJcbiAgICAgICAgYmxvY2tOYW1lOiBkaXJlY3RpdmUucHJlc2VudGF0aW9uRGVzaWduZXIsXHJcbiAgICAgICAgaXNCbG9ja1Zpc2libGU6ICFkaXJlY3RpdmUuc2hvd0hpZGVDaGVja2JveENvbXBvbmVudFJlZj8uaW5zdGFuY2U/Ll9jaGVja2VkLFxyXG4gICAgICAgIHVpZDogdGhpcy5nZXRQcmVzZW50YXRpb25TZXRpbmdEZXRhaWxVaWQoZGlyZWN0aXZlLnByZXNlbnRhdGlvbkRlc2lnbmVyID8/IFwiXCIpLFxyXG4gICAgICAgIGNvbmZpZ3VyYXRpb246IGNvbmZpZ3VyYXRpb25cclxuICAgICAgfVxyXG4gICAgICBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscy5wdXNoKG9iamVjdClcclxuICAgIH0pXHJcblxyXG4gICAgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0LmNvbXBvbmVudElkZW50aWZlciA9IHRoaXMuZ2V0Q29tcG9uZW50SWRlbnRpZmllcigpO1xyXG4gICAgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0LmRlc2NyaW1pbmF0b3JWYWx1ZSA9IHRoaXMuZGVzY3JpbWluYXRvclZhbHVlXHJcbiAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QucHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHMgPSBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsc1xyXG5cclxuICAgIHRoaXMuaXNsb2FkaW5nID0gdHJ1ZVxyXG5cclxuICAgIGlmICh0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QudWlkICE9IG51bGwgJiYgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0LnVpZCAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5fcHJlc2VudGF0aW9uU2V0dGluZ1NlcnZpY2UudXBkYXRlUHJlc2VudGF0aW9uU2V0dGluZyh0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QsIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdC51aWQpXHJcbiAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiBhc3luYyAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnByb2Nlc3NBZnRlclNhdmVDb25maWd1cmF0aW9uKClcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKVxyXG4gICAgICAgICAgICB0aGlzLl9lcnJvclJlc3BvbnNlTWFuYWdlci5zaG93RXJyb3JNZXNzYWdlKGVycm9yKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuX3ByZXNlbnRhdGlvblNldHRpbmdTZXJ2aWNlLmNyZWF0ZVByZXNlbnRhdGlvblNldHRpbmcodGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0KVxyXG4gICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogYXN5bmMgKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5wcm9jZXNzQWZ0ZXJTYXZlQ29uZmlndXJhdGlvbigpXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcilcclxuICAgICAgICAgICAgdGhpcy5fZXJyb3JSZXNwb25zZU1hbmFnZXIuc2hvd0Vycm9yTWVzc2FnZShlcnJvcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb2Nlc3NTaW5nbGVFbGVtZW50KGRpcmVjdGl2ZTogUHJlc2VudGF0aW9uRGVzaWduZXJEaXJlY3RpdmUgfCBQcmVzZW50YXRpb25EZXNpZ25lckRpcmVjdGl2ZUJhc2UpIHtcclxuICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdCA9IHRoaXMuX3ByZXNlbnRhdGlvblNldHRpbmdTZXJ2aWNlLmdldFByZXNlbnRhdGlvblNldHRpbmdCeUNvbXBvbmVudElkZW50aWZpZXJTeW5jKHRoaXMuZ2V0Q29tcG9uZW50SWRlbnRpZmllcigpLCB0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZSkgPz8gbmV3IFByZXNlbnRhdGlvblNldHRpbmcoKVxyXG4gICAgbGV0IHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWwgPSB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3Q/LnByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzPy5maW5kKHggPT4geC5ibG9ja05hbWUgPT0gZGlyZWN0aXZlLnByZXNlbnRhdGlvbkRlc2lnbmVyKVxyXG5cclxuXHJcbiAgICBpZiAocHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbCA9PSB1bmRlZmluZWQgfHwgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbC5pc0Jsb2NrVmlzaWJsZSkge1xyXG5cclxuICAgICAgbGV0IHdvcmZrZmxvd0V0YXRGb3JtID0gdGhpcy5nZXRXb3JrZmxvd0V0YXRGb3JtKCk7XHJcblxyXG4gICAgICBpZiAod29yZmtmbG93RXRhdEZvcm0pIHtcclxuICAgICAgICBsZXQgd29ya2Zsb3dDb25maWcgPSB3b3Jma2Zsb3dFdGF0Rm9ybS5wcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscy5maW5kKHggPT4geC5ibG9ja05hbWUgPT0gZGlyZWN0aXZlLnByZXNlbnRhdGlvbkRlc2lnbmVyKVxyXG5cclxuICAgICAgICBpZiAoIXdvcmtmbG93Q29uZmlnKSB7XHJcbiAgICAgICAgICBkaXJlY3RpdmUuZXhlY3V0ZSh0cnVlLCBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsPy5jb25maWd1cmF0aW9uKVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh3b3JrZmxvd0NvbmZpZyAmJiB3b3JrZmxvd0NvbmZpZy5pc0Jsb2NrVmlzaWJsZSAmJiAod29ya2Zsb3dDb25maWcuaXNJbnB1dEVuYWJsZWQgPT0gdW5kZWZpbmVkIHx8IHdvcmtmbG93Q29uZmlnLmlzSW5wdXRFbmFibGVkID09IHRydWUpKSB7XHJcbiAgICAgICAgICBkaXJlY3RpdmUuZXhlY3V0ZSh0cnVlLCBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsPy5jb25maWd1cmF0aW9uKVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh3b3JrZmxvd0NvbmZpZyAmJiB3b3JrZmxvd0NvbmZpZy5pc0Jsb2NrVmlzaWJsZSAmJiB3b3JrZmxvd0NvbmZpZy5pc0lucHV0RW5hYmxlZCA9PSBmYWxzZSkge1xyXG4gICAgICAgICAgZGlyZWN0aXZlLmRpc2FibGVJbnB1dHMoKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBkaXJlY3RpdmUuZXhlY3V0ZSh0cnVlLCBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsPy5jb25maWd1cmF0aW9uKVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS5pc0Rlc2dpbk1vZGVGcm9tV29ya2Zsb3cpIHtcclxuICAgICAgICBkaXJlY3RpdmUuYWRkQ2hlY2tib3hlc1RvSW5wdXRzKHRoaXMuX3dvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2Uud29ya2Zsb3dGb3JtQ29uZmlndXJhdGlvbilcclxuICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICB1bnN1YnNjcmliZUZyb21BY3RpdmVTdWJzY3JpdHBpb24oKSB7XHJcbiAgICBpZiAodGhpcy5fZGVzaWduTW9kZUZvcm1TdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy5fZGVzaWduTW9kZUZvcm1TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9zYXZlV29ya2Zsb3dGb3JtQ29uZmlndXJhdGlvblN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLl9zYXZlV29ya2Zsb3dGb3JtQ29uZmlndXJhdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2FkZGVkRGlyZWN0aXZlU3Vic2NyaXRwaW9uKSB7XHJcbiAgICAgIHRoaXMuX2FkZGVkRGlyZWN0aXZlU3Vic2NyaXRwaW9uLnVuc3Vic2NyaWJlKClcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fYWRkZWREaXJlY3RpdmVCYXNlU3Vic2NyaXRwaW9uKSB7XHJcbiAgICAgIHRoaXMuX2FkZGVkRGlyZWN0aXZlQmFzZVN1YnNjcml0cGlvbi51bnN1YnNjcmliZSgpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW1vdmVUc2lNb2RhbEZvb3RlcigpIHtcclxuICAgIGNvbnN0IHRzaU1vZGFsRm9vdGVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcInRzaS1tb2RhbC1mb290ZXJcIilcclxuXHJcbiAgICBpZiAodHNpTW9kYWxGb290ZXIgJiYgdHNpTW9kYWxGb290ZXIubGFzdENoaWxkKSB7XHJcbiAgICAgIHRoaXMuX3JlbmRlcmVyPy5yZW1vdmVDaGlsZCh0c2lNb2RhbEZvb3RlciwgdHNpTW9kYWxGb290ZXIubGFzdENoaWxkKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY3JlYXRlU2F2ZUJ1dHRvbigpIHtcclxuICAgIGNvbnN0IHRzaUJ1dHRvblJlZiA9IHRoaXMuX3ZpZXdDb250YWluZXJSZWY/LmNyZWF0ZUNvbXBvbmVudChUc2lCdXR0b25Db21wb25lbnQpO1xyXG4gICAgdHNpQnV0dG9uUmVmPy5zZXRJbnB1dCgndGV4dCcsICdzaGFyZWRfdHNpX2NvbXBvbmVudF9zYXZlX2NvbmZpZ19zaG93X2hpZGUnKTtcclxuICAgIHRzaUJ1dHRvblJlZj8uc2V0SW5wdXQoJ2ljb24nLCAnc2F2ZScpO1xyXG5cclxuICAgIHRzaUJ1dHRvblJlZiEuaW5zdGFuY2Uub25DbGljay5lbWl0ID0gKCkgPT4gdGhpcy5zYXZlUHJvcGVydGllcygpO1xyXG5cclxuICAgIGNvbnN0IHRzaUZvcm0gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwidHNpLWZvcm1cIilcclxuXHJcbiAgICBpZiAodHNpRm9ybSkge1xyXG4gICAgICB0aGlzLl9yZW5kZXJlcj8uYXBwZW5kQ2hpbGQodHNpRm9ybSwgdHNpQnV0dG9uUmVmPy5sb2NhdGlvbi5uYXRpdmVFbGVtZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIHByb2Nlc3NBZnRlclNhdmVDb25maWd1cmF0aW9uKCkge1xyXG4gICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZVxyXG4gICAgdGhpcy5oaWRlKClcclxuICAgIHRoaXMuX21lc3NhZ2VJbmZvU2VydmljZS5zdWNjZXNzKExvY2FsaXphdGlvbktleXMuc2F2ZWRTdWNjZXNzZnVsbHkpXHJcbiAgICB0aGlzLl9sYXlvdXRIZWxwZXJTZXJ2aWNlLmlzRGVzaWduTW9kZSA9IGZhbHNlXHJcbiAgICAvLyB0aGlzLl9sYXlvdXRIZWxwZXJTZXJ2aWNlLmN1cnJlbnRGb3JtTmFtZSA9IHVuZGVmaW5lZFxyXG4gICAgdGhpcy5fbGF5b3V0SGVscGVyU2VydmljZS5fZGVzaWduTW9kZUZvcm1TdWJqZWN0Lm5leHQoZmFsc2UpXHJcbiAgICBhd2FpdCB0aGlzLl9wcmVzZW50YXRpb25TZXR0aW5nU2VydmljZS5sb2FkUHJlc2VudGF0aW9uU2V0dGluZ3MoKTtcclxuICB9XHJcblxyXG4gIHNhdmUoKTogdm9pZHtcclxuICAgIGxldCBlcnJvck1lc3NhZ2U6IHN0cmluZyA9ICcnO1xyXG5cclxuICAgIHRoaXMucmVxdWlyZWRJbnB1dHMgPSB0aGlzLl9pbnB1dFJlZ2lzdHJ5LmdldEFsbCgpLmZpbHRlcihpbnAgPT4gaW5wLmlzUmVxdWlyZWQgJiYgaW5wLmRpc2FibGVkID09PSBmYWxzZSk7XHJcbiAgICB0aGlzLmZhdWx0eUlucHV0cyA9IFtdO1xyXG4gICAgdGhpcy5pc0Zvcm1WYWxpZCA9IHRoaXMucmVxdWlyZWRJbnB1dHMuZXZlcnkoaW5wdXQgPT4gaW5wdXQuaXNWYWxpZCgpLmlzVmFsaWQgPT09IHRydWUpXHJcblxyXG4gICAgdGhpcy5yZXF1aXJlZElucHV0cy5mb3JFYWNoKGlucHV0ID0+IHtcclxuICAgICAgbGV0IGZ2ciA9IGlucHV0LmlzVmFsaWQoKTtcclxuICAgICAgaWYoZnZyLmlzVmFsaWQgPT09IGZhbHNlKXtcclxuICAgICAgICB0aGlzLmZhdWx0eUlucHV0cy5wdXNoKGZ2cilcclxuICAgICAgfVxyXG4gICAgfSlcclxuXHJcbiAgICBpZih0aGlzLmlzRm9ybVZhbGlkID09PSBmYWxzZSAmJiB0aGlzLmZhdWx0eUlucHV0cy5sZW5ndGggPiAwKXtcclxuICAgICAgY29uc29sZS5sb2codGhpcy5mYXVsdHlJbnB1dHMpXHJcbiAgICAgIGxldCBmYXVsdHlJbnB1dHNOYW1lcyA9IFwiXCI7XHJcbiAgICAgIHRoaXMuZmF1bHR5SW5wdXRzLmZvckVhY2goKGl0ZW0saW5kZXgpID0+IHtcclxuICAgICAgICBpZihpbmRleCA9PT0gdGhpcy5mYXVsdHlJbnB1dHMubGVuZ3RoLTEpXHJcbiAgICAgICAgICBmYXVsdHlJbnB1dHNOYW1lcyArPSBgJHtpdGVtLmlucHV0TmFtZX0uIGBcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICBmYXVsdHlJbnB1dHNOYW1lcyArPSBgJHtpdGVtLmlucHV0TmFtZX0sIGBcclxuICAgICAgfSlcclxuICAgICAgZmF1bHR5SW5wdXRzTmFtZXMgPSBmYXVsdHlJbnB1dHNOYW1lcy5yZXBsYWNlKC8sJC8sICcnKTtcclxuICAgICAgaWYodGhpcy5mYXVsdHlJbnB1dHMuc29tZShmaSA9PiBmaS5lcnJvciA9PT0gRm9ybVZhbGlkYXRpb25FcnJvci5SZXF1aXJlZCkpe1xyXG4gICAgICAgIHRoaXMuX21lc3NhZ2VJbmZvU2VydmljZS53YXJuKGZhdWx0eUlucHV0c05hbWVzLCB0aGlzLmxvY2FsaXplPy50cmFuc2Zvcm0oJ3RzaV9mb3JtX2Jhc2VfYXV0b192YWxpZGF0aW9uX3JlcXVpcmVkX2ZpZWxkX3RpdGxlJykpXHJcbiAgICAgICAgZXJyb3JNZXNzYWdlID0gYExlcyBjaGFtcHMgJHtmYXVsdHlJbnB1dHNOYW1lc30gc29udCBvYmxpZ2F0b2lyZS5gO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYodGhpcy5mYXVsdHlJbnB1dHMuc29tZShmaSA9PiBmaS5lcnJvciA9PT0gRm9ybVZhbGlkYXRpb25FcnJvci5NYXhMZW5ndGgpKXtcclxuICAgICAgIHRoaXMuX21lc3NhZ2VJbmZvU2VydmljZS53YXJuKGBcclxuICAgICAgICAgICR7dGhpcy5sb2NhbGl6ZT8udHJhbnNmb3JtKCd0c2lfZm9ybV9iYXNlX2F1dG9fdmFsaWRhdGlvbl90aGVfZmllbGQnKX1cclxuICAgICAgICAgICR7dGhpcy5mYXVsdHlJbnB1dHNbMF0uaW5wdXROYW1lfSBcclxuICAgICAgICAgICR7dGhpcy5sb2NhbGl6ZT8udHJhbnNmb3JtKCd0c2lfZm9ybV9iYXNlX2F1dG9fdmFsaWRhdGlvbl9tYXhfbGVuZ3RoJykgfVxyXG4gICAgICAgICAgJHt0aGlzLmZhdWx0eUlucHV0c1swXS5kYXRhfSAke3RoaXMubG9jYWxpemU/LnRyYW5zZm9ybSgndHNpX2Zvcm1fYmFzZV9hdXRvX3ZhbGlkYXRpb25fbWF4X2xlbmd0aF9jaGFycycpIH1gLFxyXG4gICAgICAgICAgdGhpcy5sb2NhbGl6ZT8udHJhbnNmb3JtKCd0c2lfZm9ybV9iYXNlX2F1dG9fdmFsaWRhdGlvbl9tYXhfbGVuZ3RoX2ZpZWxkX3RpdGxlJykpXHJcbiAgICAgICAgZXJyb3JNZXNzYWdlID0gYExlIGNoYW1wICR7dGhpcy5mYXVsdHlJbnB1dHNbMF0uaW5wdXROYW1lfSBuZSBkb2l0IHBhcyBkw6lwYXNzZXIgJHt0aGlzLmZhdWx0eUlucHV0c1swXS5kYXRhfSBjYXJhY3TDqHJlcy5gO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYodGhpcy5mYXVsdHlJbnB1dHMuc29tZShmaSA9PiBmaS5lcnJvciA9PT0gRm9ybVZhbGlkYXRpb25FcnJvci5PdXRPZlJhbmdlKSl7XHJcbiAgICAgICAgLy90byBkb1xyXG4gICAgICAgIGVycm9yTWVzc2FnZSA9IGBMZSBjaGFtcCAke3RoaXMuZmF1bHR5SW5wdXRzWzBdLmlucHV0TmFtZX0gZG9pdCDDqnRyZSBkYW5zIGwnaW50ZXJ2YWxsZS5gO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnVwZGF0ZUZvcm1TdGF0ZSh7IGlzVmFsaWQ6IGZhbHNlLCBpc1N1Ym1pdHRlZDogdHJ1ZSB9KTtcclxuICAgICAgXHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICB0aGlzLnVwZGF0ZUZvcm1TdGF0ZSh7IGlzVmFsaWQ6IHRydWUsIGlzU3VibWl0dGVkOiB0cnVlIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVGb3JtU3RhdGUoZm9ybVN0YXRlOiBGb3JtU3RhdGUpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5fZ2VuZXJpY1ZhbGlkYXRpb25TdGF0ZVNlcnZpY2UpIHJldHVybjtcclxuXHJcbiAgICAgICAgdGhpcy5fZ2VuZXJpY1ZhbGlkYXRpb25TdGF0ZVNlcnZpY2UudXBkYXRlRm9ybVN0YXRlKGZvcm1TdGF0ZSk7XHJcblxyXG4gICAgICAgIHRoaXMuZWRpdGFibGVHcmlkQ29tcG9uZW50cyA9IHRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyU2VydmljZS5nZXRFZGl0YWJsZUdyaWRzKCk7XHJcbiAgICAgICAgdGhpcy5lZGl0YWJsZUdyaWRDb21wb25lbnRzLmZvckVhY2goKGUpID0+IGUudXBkYXRlRm9ybVN0YXRlKGZvcm1TdGF0ZSkpO1xyXG4gIH1cclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcbn1cclxuIiwiPHA+dHNpLWZvcm0tYmFzZSB3b3JrcyE8L3A+XHJcbiJdfQ==
657
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNpLWZvcm0tYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvdHNpLWJhc2UvY29tcG9uZW50cy90c2ktZm9ybS1iYXNlL3RzaS1mb3JtLWJhc2UuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHNpLXNoYXJlZC11aS9zcmMvbGliL3RzaS1iYXNlL2NvbXBvbmVudHMvdHNpLWZvcm0tYmFzZS90c2ktZm9ybS1iYXNlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBMkUsU0FBUyxFQUFjLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJN08sT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxtQkFBbUIsRUFBc0IsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakcsT0FBTyxFQUEwQixtQkFBbUIsRUFBa0UsTUFBTSxpQkFBaUIsQ0FBQztBQUM5SSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDNUQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLDZCQUE2QixFQUFFLG9CQUFvQixFQUFFLG1CQUFtQixFQUFFLDJCQUEyQixFQUFFLDBCQUEwQixFQUFFLGdCQUFnQixFQUFFLHNCQUFzQixFQUFFLDRCQUE0QixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdlMsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sMkVBQTJFLENBQUM7QUFDNUgsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkVBQTJFLENBQUM7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LHdSQXFFN0IsZ0JBQWdCLDhFQUdoQixrQkFBa0IsOERBRWYsb0JBQW9CLHVFQ3RHcEMsaUNBQ0E7OzRGRDJCYSw2QkFBNkI7a0JBTHpDLFNBQVM7K0JBQ0UsbUJBQW1CO3VKQXlFQSxJQUFJO3NCQUFoQyxTQUFTO3VCQUFDLGdCQUFnQjtnQkFHSSxXQUFXO3NCQUF6QyxTQUFTO3VCQUFDLGtCQUFrQjtnQkFFTyxRQUFRO3NCQUEzQyxZQUFZO3VCQUFDLG9CQUFvQjtnQkFzQnpCLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLEVBQUU7c0JBQVYsS0FBSztnQkFJRixTQUFTO3NCQURaLEtBQUs7Z0JBY0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBTU8sTUFBTTtzQkFBbEIsS0FBSztnQkE2QkksTUFBTTtzQkFBZixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJDb250ZW50Q2hlY2tlZCwgQWZ0ZXJWaWV3Q2hlY2tlZCwgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBpbmplY3QsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBSZW5kZXJlcjIsIFZpZXdDaGlsZCwgVmlld0NoaWxkcmVuLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5nRm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgRHluYW1pY0RpYWxvZ0NvbmZpZywgRHluYW1pY0RpYWxvZ1JlZiB9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBMb2NhbGl6YXRpb25LZXlzIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RzJztcclxuaW1wb3J0IHsgQ29tcG9uZW50X01vZGVzLCBGb3JtVmFsaWRhdGlvbkVycm9yLCBGb3JtVmFsaWRpdHlSZXN1bHQsIE1vZGVzIH0gZnJvbSAnLi4vLi4vLi4vZW51bXMnO1xyXG5pbXBvcnQgeyBDb21ib1N0YXR1c01vZGVsIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IENvbXBvbmVudERlc2NyaW1pbmF0b3IsIFByZXNlbnRhdGlvblNldHRpbmcsIFByZXNlbnRhdGlvblNldHRpbmdEZXRhaWwsIHdvcmtmbG93SW5zdGFuY2VJbmZvcm1hdGlvblJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgTG9jYWxpemVQaXBlIH0gZnJvbSAnLi4vLi4vLi4vcGlwZXMvbG9jYWxpemUucGlwZSc7XHJcbmltcG9ydCB7IEVudGl0eUNvbmZpZ3VyYXRpb25TZXJ2aWNlLCBFcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2UsIEdlbmVyaWNWYWxpZGF0aW9uU3RhdGVTZXJ2aWNlLCBJbnB1dFJlZ2lzdHJ5U2VydmljZSwgTGF5b3V0SGVscGVyU2VydmljZSwgUHJlc2VudGF0aW9uRGVzaWduZXJTZXJ2aWNlLCBQcmVzZW50YXRpb25TZXR0aW5nU2VydmljZSwgUmVwb3J0aW5nU2VydmljZSwgVHNpTm90aWZpY2F0aW9uU2VydmljZSwgV29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcclxuaW1wb3J0IHsgUHJlc2VudGF0aW9uRGVzaWduZXJCYXNlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3ByZXNlbnRhdGlvbi1zZXR0aW5nL3ByZXNlbnRhdGlvbi1kZXNpZ25lci1iYXNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUc2lCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi90c2ktY29tcG9uZW50cy9idXR0b24tY29tcG9uZW50cy90c2ktYnV0dG9uL3RzaS1idXR0b24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgRWRpdGFibGVHcmlkQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vdHNpLWNvbXBvbmVudHMvaW5wdXQtY29tcG9uZW50cy9lZGl0YWJsZS1ncmlkL2VkaXRhYmxlLWdyaWQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVHNpQ2hlY2tib3hDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi90c2ktY29tcG9uZW50cy9pbnB1dC1jb21wb25lbnRzL3RzaS1jaGVja2JveC90c2ktY2hlY2tib3guY29tcG9uZW50JztcclxuaW1wb3J0IHsgVHNpR2VuZXJpY0dyaWRDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi90c2ktY29tcG9uZW50cy9vdXRwdXQtY29tcG9uZW50cy90c2ktZ2VuZXJpYy1ncmlkL3RzaS1nZW5lcmljLWdyaWQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVHNpVmlld0dyaWRDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi90c2ktY29tcG9uZW50cy9vdXRwdXQtY29tcG9uZW50cy90c2ktdmlldy1ncmlkL3RzaS12aWV3LWdyaWQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVHNpRm9ybUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3RzaS1jb21wb25lbnRzL3RzaS1mb3JtL3RzaS1mb3JtLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRzaUdlbmVyaWNDcnVkQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vdHNpLWNvbXBvbmVudHMvdHNpLWdlbmVyaWMtY3J1ZC90c2ktZ2VuZXJpYy1jcnVkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFByZXNlbnRhdGlvbkRlc2lnbmVyRGlyZWN0aXZlLCBQcmVzZW50YXRpb25EZXNpZ25lckRpcmVjdGl2ZUJhc2UgfSBmcm9tICcuLi8uLi8uLi90c2ktZGlyZWN0aXZlcyc7XHJcbmltcG9ydCB7IFRzaUlucHV0QmFzZSB9IGZyb20gJy4uLy4uL3RzaS1pbnB1dC1iYXNlL3RzaS1pbnB1dC1iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFwcEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi9hcHAtYmFzZS9hcHAtYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBGb3JtU3RhdGUgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZm9ybS9mb3JtLXN0YXRlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXRzaS1mb3JtLWJhc2UnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90c2ktZm9ybS1iYXNlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90c2ktZm9ybS1iYXNlLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFRzaUZvcm1Db21wb25lbnRCYXNlQ29tcG9uZW50IGV4dGVuZHMgQXBwQmFzZUNvbXBvbmVudFxyXG4gIGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRDaGVja2VkLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0NoZWNrZWQge1xyXG4gIC8vI3JlZ2lvbiBwcm9wZXJ0aWVzXHJcbiAgIHB1YmxpYyBvdmVycmlkZSBnZXQgZm9ybUVuZHBvaW50KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gc3VwZXIuZm9ybUVuZHBvaW50O1xyXG4gIH07XHJcbiAgcHJpdmF0ZSBvdmVycmlkZSBzZXQgZm9ybUVuZHBvaW50KGVuZHBvaW50OiBzdHJpbmcpIHtcclxuICAgIHN1cGVyLmZvcm1FbmRwb2ludCA9IGAke2VuZHBvaW50fS8ke3RoaXMuaWR9YDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvdmVycmlkZSBnZXQgYnVzaW5lc3NDbGFzcygpIHtcclxuICAgIHJldHVybiB0aGlzLl9idXNpbmVzc0NsYXNzO1xyXG4gIH1cclxuICBwdWJsaWMgb3ZlcnJpZGUgc2V0IGJ1c2luZXNzQ2xhc3ModmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fYnVzaW5lc3NDbGFzcyA9IHZhbHVlO1xyXG4gICAgdGhpcy5mb3JtRW5kcG9pbnQgPSB0aGlzLmJ1c2luZXNzQ2xhc3M7XHJcbiAgICB0aGlzLl9nZW5lcmljVmFsaWRhdGlvblN0YXRlU2VydmljZT8ubG9hZEVudGl0eVZhbGlkYXRpb25JbmZvcyh0aGlzLl9idXNpbmVzc0NsYXNzKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NvbXBvbmVudERlc2NyaW1pbmF0b3I6IENvbXBvbmVudERlc2NyaW1pbmF0b3IgfCB1bmRlZmluZWRcclxuICBwcml2YXRlIGRlc2NyaW1pbmF0b3JWYWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkXHJcblxyXG4gIHByb3RlY3RlZCBzZXQgY29tcG9uZW50RGVzY3JpbWluYXRvcih2YWx1ZTogQ29tcG9uZW50RGVzY3JpbWluYXRvciB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fY29tcG9uZW50RGVzY3JpbWluYXRvciA9IHZhbHVlXHJcbiAgICBpZiAodmFsdWUgJiYgdmFsdWUucHJvcGVydHlWYWx1ZSkge1xyXG4gICAgICBpZih0aGlzLmZvcm0pe1xyXG4gICAgICAgIHRoaXMuZm9ybS5kZXNjcmltaW5hdG9yVmFsdWUgPSB2YWx1ZS5wcm9wZXJ0eVZhbHVlXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5kZXNjcmltaW5hdG9yVmFsdWUgPSB2YWx1ZS5wcm9wZXJ0eVZhbHVlXHJcbiAgICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdCA9IHRoaXMuX3ByZXNlbnRhdGlvblNldHRpbmdTZXJ2aWNlLmdldFByZXNlbnRhdGlvblNldHRpbmdCeUNvbXBvbmVudElkZW50aWZpZXJTeW5jKHRoaXMuZ2V0Q29tcG9uZW50SWRlbnRpZmllcigpLFxyXG4gICAgICAgIHRoaXMuZGVzY3JpbWluYXRvclZhbHVlKSA/PyBuZXcgUHJlc2VudGF0aW9uU2V0dGluZygpXHJcbiAgICAgIHRoaXMuZGlyZWN0aXZlRWxlbWVudHMgPSBbLi4udGhpcy5fcHJlc2VudGF0aW9uRGVzaWduZXJTZXJ2aWNlLmdldERpcmVjdGl2ZXMoKSxcclxuICAgICAgLi4udGhpcy5fcHJlc2VudGF0aW9uRGVzaWduZXJCYXNlU2VydmljZS5nZXREaXJlY3RpdmVzKClcclxuICAgICAgXTtcclxuICAgICAgdGhpcy5hZGRJbnB1dHModGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0LCAhdGhpcy5fbGF5b3V0SGVscGVyU2VydmljZT8uaXNEZXNpZ25Nb2RlKVxyXG5cclxuICAgICAgLy8gdGhpcy5fcmVwb3J0aW5nU2VydmljZS5nZXRSZXBvcnREZWNyaW1pbmF0b3IocmVxKS5zdWJzY3JpYmUoe1xyXG4gICAgICAvLyAgIG5leHQ6IGFzeW5jIChyZXN1bHQpID0+IHtcclxuICAgICAgLy8gICAgIHRoaXMuZGVzY3JpbWluYXRvclZhbHVlID0gcmVzdWx0LnByb3BlcnR5VmFsdWU7XHJcbiAgICAgIC8vICAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QgPSB0aGlzLl9wcmVzZW50YXRpb25TZXR0aW5nU2VydmljZS5nZXRQcmVzZW50YXRpb25TZXR0aW5nQnlDb21wb25lbnRJZGVudGlmaWVyU3luYyh0aGlzLmdldENvbXBvbmVudElkZW50aWZpZXIoKSkgPz8gbmV3IFByZXNlbnRhdGlvblNldHRpbmcoKVxyXG4gICAgICAvLyAgICAgaWYgKHRoaXMuZm9ybSkge1xyXG4gICAgICAvLyAgICAgICB0aGlzLmZvcm0uZGVzY3JpbWluYXRvclZhbHVlID0gcmVzdWx0LnByb3BlcnR5VmFsdWVcclxuICAgICAgLy8gICAgICAgaWYgKHRoaXMuZW50aXR5SW5mbz8uaXNXb3JrZmxvdykge1xyXG4gICAgICAvLyAgICAgICAgIGF3YWl0IHRoaXMuZm9ybS5nZXRXb3JrZmxvd0VudGl0eUluZm9ybWF0aW9uKHRoaXMuYnVzaW5lc3NDbGFzcywgdGhpcy5pZCwgdGhpcy5lbnRpdHlJbmZvPy5kaXNjcmltaW5hdG9yQ2xhc3NOYW1lLFxyXG4gICAgICAvLyAgICAgICAgICAgdGhpcy5lbnRpdHlJbmZvPy5kaXNjcmltaW5hdG9yUHJvcGVydHlOYW1lKVxyXG4gICAgICAvLyAgICAgICB9XHJcbiAgICAgIC8vICAgICB9XHJcbiAgICAgIC8vICAgICB0aGlzLmFkZElucHV0cyh0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QsICF0aGlzLl9sYXlvdXRIZWxwZXJTZXJ2aWNlPy5pc0Rlc2lnbk1vZGUpXHJcbiAgICAgIC8vICAgfSxcclxuICAgICAgLy8gICBlcnJvcjogKGVycjogYW55KSA9PiB7XHJcbiAgICAgIC8vICAgICBjb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgICAvLyAgIH0sXHJcbiAgICAgIC8vIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmZvcm0pIHtcclxuICAgICAgICB0aGlzLmZvcm0uZGVzY3JpbWluYXRvclZhbHVlID0gdW5kZWZpbmVkXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG5cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXQgY29tcG9uZW50RGVzY3JpbWluYXRvcigpIHtcclxuICAgIHJldHVybiB0aGlzLl9jb21wb25lbnREZXNjcmltaW5hdG9yXHJcbiAgfVxyXG5cclxuXHJcbiAgQFZpZXdDaGlsZChUc2lGb3JtQ29tcG9uZW50KSBmb3JtPzogVHNpRm9ybUNvbXBvbmVudDtcclxuXHJcblxyXG4gIEBWaWV3Q2hpbGQoVHNpQnV0dG9uQ29tcG9uZW50KSBtb2RhbEZvb3Rlcj86IEVsZW1lbnRSZWYgfCBhbnk7XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oVHNpQ2hlY2tib3hDb21wb25lbnQpIGNoZWNrYm94PzogQXJyYXk8VHNpQ2hlY2tib3hDb21wb25lbnQ+O1xyXG5cclxuICBmYXVsdHlJbnB1dHMgOiBGb3JtVmFsaWRpdHlSZXN1bHRbXSA9IFtdO1xyXG4gIGlzRm9ybVZhbGlkIDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcclxuICByZXF1aXJlZElucHV0czogVHNpSW5wdXRCYXNlW10gPSBbXTtcclxuICAvLyBAVmlld0NoaWxkcmVuKEVkaXRhYmxlR3JpZENvbXBvbmVudCkgZWRpdGFibGVHcmlkQ29tcG9uZW50cyE6IFF1ZXJ5TGlzdDxFZGl0YWJsZUdyaWRDb21wb25lbnQ+O1xyXG5cclxuICAvLyBAVmlld0NoaWxkcmVuKFRzaVZpZXdHcmlkQ29tcG9uZW50KSB2aWV3R3JpZHNDb21wb25lbnRzITogUXVlcnlMaXN0PFRzaVZpZXdHcmlkQ29tcG9uZW50PjtcclxuICAvLyBAVmlld0NoaWxkcmVuKFRzaUdlbmVyaWNHcmlkQ29tcG9uZW50KSBnZW5lcmljR3JpZHNDb21wb25lbnRzITogUXVlcnlMaXN0PFRzaUdlbmVyaWNHcmlkQ29tcG9uZW50PjtcclxuICAvLyBAVmlld0NoaWxkcmVuKFRzaUdlbmVyaWNDcnVkQ29tcG9uZW50KSBnZW5lcmljQ3J1ZHNDb21wb25lbnRzITogUXVlcnlMaXN0PFRzaUdlbmVyaWNDcnVkQ29tcG9uZW50PjtcclxuICBlZGl0YWJsZUdyaWRDb21wb25lbnRzOiBBcnJheTxFZGl0YWJsZUdyaWRDb21wb25lbnQ+ID0gW107XHJcbiAgdmlld0dyaWRzQ29tcG9uZW50czogQXJyYXk8VHNpVmlld0dyaWRDb21wb25lbnQ+ID0gW107XHJcbiAgZ2VuZXJpY0dyaWRzQ29tcG9uZW50czogQXJyYXk8VHNpR2VuZXJpY0dyaWRDb21wb25lbnQ+ID0gW107XHJcbiAgZ2VuZXJpY0NydWRzQ29tcG9uZW50czogQXJyYXk8VHNpR2VuZXJpY0NydWRDb21wb25lbnQ+ID0gW107XHJcblxyXG5cclxuICBmb3JtUmVmPzogTmdGb3JtO1xyXG4gIGlzRm9ybURpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgY3VkQ29tcG9uZW50OiBhbnk7XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBJbnB1dHNcclxuICBASW5wdXQoKSBpdGVtRGlhbG9nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgbW9kZT86IHN0cmluZyA9ICcnO1xyXG4gIEBJbnB1dCgpIGlkPzogc3RyaW5nO1xyXG4gIHByaXZhdGUgX2lzbG9hZGluZyA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBpc2xvYWRpbmcodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2lzbG9hZGluZyA9IHZhbHVlO1xyXG4gICAgY29uc29sZS5sb2coJ2lzbG9hZGluZyBzZXQgdG8nLCB2YWx1ZSk7XHJcbiAgICBpZiAoIXZhbHVlKSB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMucHJvY2Vzc0Rpc2FibGVkSW5wdXRzKHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdClcclxuICAgICAgfSwgMCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgaXNsb2FkaW5nKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lzbG9hZGluZztcclxuICB9XHJcbiAgQElucHV0KCkgaGVhZGVyPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHNhdmluZyA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGl0ZW06IGFueTtcclxuXHJcbiAgcHJpdmF0ZSBfc3RhdHVzPzogc3RyaW5nID0gJyc7XHJcbiAgZ2V0IHN0YXR1cygpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX3N0YXR1cztcclxuICB9XHJcbiAgQElucHV0KCkgc2V0IHN0YXR1cyh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9zdGF0dXMgPSB2YWx1ZTtcclxuICAgIGlmICh0aGlzLmZvcm0gICYmIHRoaXMuZm9ybS5zdGF0dXMgIT09IHRoaXMuX3N0YXR1cykge1xyXG4gICAgICB0aGlzLmZvcm0uc3RhdHVzID0gdGhpcy5fc3RhdHVzO1xyXG4gICAgfVxyXG4gIH1cclxuICAvL2JzTW9kYWxSZWY/OiBhbnk7XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIHByaXZhdGUgX3ZpZXdDb250YWluZXJSZWYgPSBpbmplY3QoVmlld0NvbnRhaW5lclJlZilcclxuICBwcml2YXRlIF9yZW5kZXJlciA9IGluamVjdChSZW5kZXJlcjIpXHJcbiAgcHJpdmF0ZSBfbGF5b3V0SGVscGVyU2VydmljZSA9IGluamVjdChMYXlvdXRIZWxwZXJTZXJ2aWNlKVxyXG4gIHByaXZhdGUgX2VudGl0eUNvbmZpZ3VyYXRpb25zU2VydmljZSA9IGluamVjdChFbnRpdHlDb25maWd1cmF0aW9uU2VydmljZSlcclxuICBwcml2YXRlIF93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlID0gaW5qZWN0KFdvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UpXHJcbiAgcHJpdmF0ZSBfcHJlc2VudGF0aW9uU2V0dGluZ1NlcnZpY2UgPSBpbmplY3QoUHJlc2VudGF0aW9uU2V0dGluZ1NlcnZpY2UpXHJcbiAgcHJpdmF0ZSBfbWVzc2FnZUluZm9TZXJ2aWNlID0gaW5qZWN0KFRzaU5vdGlmaWNhdGlvblNlcnZpY2UpXHJcbiAgcHJpdmF0ZSBfZXJyb3JSZXNwb25zZU1hbmFnZXIgPSBpbmplY3QoRXJyb3JSZXNwb25zZU1hbmFnZXJTZXJ2aWNlKVxyXG4gIHByaXZhdGUgX3ByZXNlbnRhdGlvbkRlc2lnbmVyU2VydmljZSA9IGluamVjdChQcmVzZW50YXRpb25EZXNpZ25lclNlcnZpY2UpXHJcbiAgcHJpdmF0ZSBfcHJlc2VudGF0aW9uRGVzaWduZXJCYXNlU2VydmljZSA9IGluamVjdChQcmVzZW50YXRpb25EZXNpZ25lckJhc2VTZXJ2aWNlKVxyXG4gIHByaXZhdGUgX3JlcG9ydGluZ1NlcnZpY2UgPSBpbmplY3QoUmVwb3J0aW5nU2VydmljZSlcclxuICBwdWJsaWMgbG9jYWxpemU/ID0gaW5qZWN0KExvY2FsaXplUGlwZSlcclxuICBwdWJsaWMgX2lucHV0UmVnaXN0cnkgPSBpbmplY3QoSW5wdXRSZWdpc3RyeVNlcnZpY2UpXHJcbiAgcHJpdmF0ZSBkaXJlY3RpdmVFbGVtZW50czogKFByZXNlbnRhdGlvbkRlc2lnbmVyRGlyZWN0aXZlIHwgUHJlc2VudGF0aW9uRGVzaWduZXJEaXJlY3RpdmVCYXNlKVtdID0gW107XHJcbiAgcHJlc2VudGF0aW9uUmVxdWVzdDogUHJlc2VudGF0aW9uU2V0dGluZyA9IG5ldyBQcmVzZW50YXRpb25TZXR0aW5nKClcclxuICBfZGVzaWduTW9kZUZvcm1TdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZDtcclxuICBfc2F2ZVdvcmtmbG93Rm9ybUNvbmZpZ3VyYXRpb25TdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZFxyXG4gIF9hZGRlZERpcmVjdGl2ZVN1YnNjcml0cGlvbjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkXHJcbiAgX2FkZGVkRGlyZWN0aXZlQmFzZVN1YnNjcml0cGlvbjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkXHJcbiAgLy8jcmVnaW9uIE91dHB1dHNcclxuICBAT3V0cHV0KCkgb25TYXZlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIHByaXZhdGUgX2dlbmVyaWNWYWxpZGF0aW9uU3RhdGVTZXJ2aWNlPzogR2VuZXJpY1ZhbGlkYXRpb25TdGF0ZVNlcnZpY2UgPSBpbmplY3QoR2VuZXJpY1ZhbGlkYXRpb25TdGF0ZVNlcnZpY2UpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyByZWY/OiBEeW5hbWljRGlhbG9nUmVmLFxyXG4gICAgcHVibGljIGNvbmZpZz86IER5bmFtaWNEaWFsb2dDb25maWcsXHJcbiAgICBwdWJsaWMgb3ZlcnJpZGUgY2RSZWY/OiBDaGFuZ2VEZXRlY3RvclJlZilcclxuICB7XHJcbiAgICBzdXBlcihjZFJlZik7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgaXNSZXBvcnRpbmdUb29sYmFyRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICB3b3JrZmxvd0luZm9ybWF0aW9uPzogd29ya2Zsb3dJbnN0YW5jZUluZm9ybWF0aW9uUmVzcG9uc2VcclxuICBjdXN0b21EYXRhPzogYW55XHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICBvdmVycmlkZSBuZ09uSW5pdCgpIHtcclxuICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICB0aGlzLl9pbml0TW9kYWxSZWYoKTtcclxuICAgIHRoaXMuaW5pdE1vZGFsRGF0YSgpO1xyXG4gICAgdGhpcy5fYWRkZWREaXJlY3RpdmVTdWJzY3JpdHBpb24gPSB0aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lclNlcnZpY2UuYWRkZWREaXJlY3RpdmVPYnNlcnZhYmxlXHJcbiAgICAgIC5zdWJzY3JpYmUoZGF0YSA9PiB7XHJcbiAgICAgICAgaWYgKGRhdGEudHJlYXRlZCkge1xyXG4gICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS5pc0Rlc2dpbk1vZGVGcm9tV29ya2Zsb3cpIHtcclxuICAgICAgICAgIHRoaXMuZW50aXR5SW5mbyA9IHRoaXMuX3dvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UuY3VycmVudFdvcmtmbG93RW50aXR5SW5mb1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICBpZiAoIXRoaXMuZW50aXR5SW5mbz8uZGlzY3JpbWluYXRvclByb3BlcnR5TmFtZSAmJiAhdGhpcy5lbnRpdHlJbmZvPy5kaXNjcmltaW5hdG9yQ2xhc3NOYW1lKSB7XHJcbiAgICAgICAgICB0aGlzLnByb2Nlc3NTaW5nbGVFbGVtZW50KGRhdGEpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuZGVzY3JpbWluYXRvclZhbHVlKSB7XHJcbiAgICAgICAgICB0aGlzLnByb2Nlc3NTaW5nbGVFbGVtZW50KGRhdGEpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG5cclxuICAgICAgdGhpcy5fYWRkZWREaXJlY3RpdmVCYXNlU3Vic2NyaXRwaW9uID0gdGhpcy5fcHJlc2VudGF0aW9uRGVzaWduZXJCYXNlU2VydmljZS5hZGRlZERpcmVjdGl2ZU9ic2VydmFibGVcclxuICAgICAgLnN1YnNjcmliZShkYXRhID0+IHtcclxuICAgICAgICBpZiAoZGF0YS50cmVhdGVkKSB7XHJcbiAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLmlzRGVzZ2luTW9kZUZyb21Xb3JrZmxvdykge1xyXG4gICAgICAgICAgdGhpcy5lbnRpdHlJbmZvID0gdGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS5jdXJyZW50V29ya2Zsb3dFbnRpdHlJbmZvXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuZW50aXR5SW5mbz8uZGlzY3JpbWluYXRvclByb3BlcnR5TmFtZSAmJiAhdGhpcy5lbnRpdHlJbmZvPy5kaXNjcmltaW5hdG9yQ2xhc3NOYW1lKSB7XHJcbiAgICAgICAgICB0aGlzLnByb2Nlc3NTaW5nbGVFbGVtZW50KGRhdGEpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuZGVzY3JpbWluYXRvclZhbHVlKSB7XHJcbiAgICAgICAgICB0aGlzLnByb2Nlc3NTaW5nbGVFbGVtZW50KGRhdGEpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG5cclxuICAgIHRoaXMuX2Rlc2lnbk1vZGVGb3JtU3Vic2NyaXB0aW9uID0gdGhpcy5fbGF5b3V0SGVscGVyU2VydmljZS5fZGVzaWduTW9kZUZvcm1TdWJqZWN0LnN1YnNjcmliZShkYXRhID0+IHtcclxuICAgICAgaWYgKGRhdGEgJiYgZGF0YSA9PSB0cnVlKSB7XHJcbiAgICAgICAgdGhpcy50b2dnbGVEZXNpZ25Nb2RlKClcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHRvZ2dsZURlc2lnbk1vZGUoKSB7XHJcbiAgICB0aGlzLnJlbW92ZVRzaU1vZGFsRm9vdGVyKClcclxuICAgIHRoaXMuY3JlYXRlU2F2ZUJ1dHRvbigpO1xyXG5cclxuICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdCA9IHRoaXMuX3ByZXNlbnRhdGlvblNldHRpbmdTZXJ2aWNlLmdldFByZXNlbnRhdGlvblNldHRpbmdCeUNvbXBvbmVudElkZW50aWZpZXJTeW5jKHRoaXMuZ2V0Q29tcG9uZW50SWRlbnRpZmllcigpLCB0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZSkgPz8gbmV3IFByZXNlbnRhdGlvblNldHRpbmcoKVxyXG5cclxuICAgIHRoaXMuZGlyZWN0aXZlRWxlbWVudHMgPSBbLi4udGhpcy5fcHJlc2VudGF0aW9uRGVzaWduZXJTZXJ2aWNlLmdldERpcmVjdGl2ZXMoKSxcclxuICAgIC4uLnRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZVNlcnZpY2UuZ2V0RGlyZWN0aXZlcygpXHJcbiAgICBdO1xyXG5cclxuICAgIHRoaXMuZGlyZWN0aXZlRWxlbWVudHM/LmZvckVhY2goaW5wdXQgPT4ge1xyXG4gICAgICBpbnB1dC5pbnNlcnRFbGVtZW50KCk7XHJcbiAgICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIFByZXNlbnRhdGlvbkRlc2lnbmVyRGlyZWN0aXZlKSB7XHJcbiAgICAgICAgaW5wdXQuc2VsZWN0QXBwcm9yaWF0ZUNvbHVtbnModGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0KTtcclxuICAgICAgfVxyXG4gICAgICBpbnB1dC5hZGRDaGVja2JveGVzVG9JbnB1dHModGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0KTtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHN1cGVyLm5nT25EZXN0cm95KClcclxuICAgIHRoaXMudW5zdWJzY3JpYmVGcm9tQWN0aXZlU3Vic2NyaXRwaW9uKClcclxuICAgIHRoaXMuX2xheW91dEhlbHBlclNlcnZpY2UuaXNEZXNpZ25Nb2RlID0gZmFsc2VcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMuZGlyZWN0aXZlRWxlbWVudHMgPSBbLi4udGhpcy5fcHJlc2VudGF0aW9uRGVzaWduZXJTZXJ2aWNlLmdldERpcmVjdGl2ZXMoKSxcclxuICAgIC4uLnRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZVNlcnZpY2UuZ2V0RGlyZWN0aXZlcygpXHJcbiAgICBdO1xyXG4gICAgY29uc29sZS5sb2coXCJjb3VudCBvZiBkaXJlY3RpdmVFbGVtZW50cyA9PiBcIiwgdGhpcy5kaXJlY3RpdmVFbGVtZW50cy5sZW5ndGgpXHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLl9sYXlvdXRIZWxwZXJTZXJ2aWNlPy5pc0Rlc2lnbk1vZGVcclxuICAgICAgJiYgIXRoaXMuX3dvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UuaXNEZXNnaW5Nb2RlRnJvbVdvcmtmbG93KSB7XHJcbiAgICAgIC8vIHRoaXMucmVtb3ZlVHNpTW9kYWxGb290ZXIoKVxyXG4gICAgICAvLyB0aGlzLmNyZWF0ZVNhdmVCdXR0b24oKVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcblxyXG4gICAgICBpZiAodGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS5pc0Rlc2dpbk1vZGVGcm9tV29ya2Zsb3cpIHtcclxuICAgICAgICB0aGlzLmVudGl0eUluZm8gPSB0aGlzLl93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLmN1cnJlbnRXb3JrZmxvd0VudGl0eUluZm9cclxuICAgICAgfVxyXG4gICAgICAvLyBlbHNlIHtcclxuICAgICAgLy8gICB0aGlzLmVudGl0eUluZm8gPSBhd2FpdCB0aGlzLl9lbnRpdHlDb25maWdTZXJ2aWNlLmdldEVudGl0eUluZm9Gcm9tQ2FjaGUodGhpcy5idXNpbmVzc0NsYXNzKVxyXG4gICAgICAvLyB9XHJcbiAgICB9XHJcblxyXG4gICAgLy9pbml0IGdlbmVyaWNDcnVkIHJlcG9ydGluZ1xyXG4gICAgaWYgKHRoaXMuZm9ybSkge1xyXG4gICAgICB0aGlzLmZvcm0uZm9ybVJlZkNoYW5nZS5zdWJzY3JpYmUoZiA9PiB7XHJcbiAgICAgICAgaWYgKGYpIHtcclxuICAgICAgICAgIHRoaXMuZm9ybVJlZiA9IGY7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5mb3JtLmRpc2FibGVkID0gdGhpcy5pc0Zvcm1EaXNhYmxlZDtcclxuICAgICAgdGhpcy5mb3JtLmZvcm1FbmRwb2ludCA9IHRoaXMuZm9ybUVuZHBvaW50O1xyXG4gICAgICB0aGlzLmZvcm0uZm9ybU5hbWUgPSB0aGlzLmZvcm1OYW1lO1xyXG4gICAgICB0aGlzLmZvcm0uYnVzaW5lc3NDbGFzcyA9IHRoaXMuX2J1c2luZXNzQ2xhc3NcclxuICAgICAgdGhpcy5mb3JtLmZvcm1OYW1lID0gdGhpcy5mb3JtTmFtZTtcclxuICAgICAgdGhpcy5mb3JtLmlkID0gdGhpcy5pZDtcclxuICAgICAgdGhpcy5mb3JtLm1vZGUgPSB0aGlzLm1vZGVcclxuXHJcbiAgICAgIC8vIHdvcmtmbG93IGZvcm0gZGVzaWduXHJcbiAgICAgIHRoaXMuX3NhdmVXb3JrZmxvd0Zvcm1Db25maWd1cmF0aW9uU3Vic2NyaXB0aW9uID0gdGhpcy5mb3JtLm9uU3VibWl0Rm9ybVdvcmtmbG93Q29uZmlndXJhdGlvbi5zdWJzY3JpYmUoZGF0YSA9PiB7XHJcbiAgICAgICAgbGV0IHdvcmtmbG93Rm9ybUNvbmZpZ3VyYXRpb24gPSB0aGlzLmdldEZvcm1Xb3Jma2xvd1ByZXNlbnRhdGlvblNldHRpbmcoKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIkZvcm1Xb3Jma2xvd1NldHRpbmcgPT4gXCIsIHdvcmtmbG93Rm9ybUNvbmZpZ3VyYXRpb24pXHJcbiAgICAgICAgdGhpcy5oaWRlKHdvcmtmbG93Rm9ybUNvbmZpZ3VyYXRpb24pXHJcbiAgICAgIH0pXHJcblxyXG4gICAgICB0aGlzLmZvcm0ub25TdGF0dXNDaGFuZ2Uuc3Vic2NyaWJlKChuZXdWYWx1ZSA6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIHRoaXMuc3RhdHVzID0gbmV3VmFsdWU7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMubW9kZSA9PSBDb21wb25lbnRfTW9kZXMuQ1JFQVRFKSB7XHJcbiAgICAgIGlmICh0aGlzLmNoZWNrYm94KSB7XHJcbiAgICAgICAgdGhpcy5jaGVja2JveC5mb3JFYWNoKGJveCA9PiB7XHJcbiAgICAgICAgICBib3guaW5wdXRGaWVsZCA9IGZhbHNlO1xyXG4gICAgICAgICAgYm94LmNoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgXHJcbiAgfVxyXG5cclxuICBpbml0VHNpR3JpZHNSZWYoKSB7XHJcbiAgICB0aGlzLnZpZXdHcmlkc0NvbXBvbmVudHMgPSB0aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lclNlcnZpY2UuZ2V0Vmlld0dyaWRzKClcclxuICAgIHRoaXMuZ2VuZXJpY0dyaWRzQ29tcG9uZW50cyA9IHRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyU2VydmljZS5nZXRHZW5lcmljR3JpZHMoKVxyXG4gICAgdGhpcy5lZGl0YWJsZUdyaWRDb21wb25lbnRzID0gdGhpcy5fcHJlc2VudGF0aW9uRGVzaWduZXJTZXJ2aWNlLmdldEVkaXRhYmxlR3JpZHMoKVxyXG4gICAgdGhpcy5nZW5lcmljQ3J1ZHNDb21wb25lbnRzID0gdGhpcy5fcHJlc2VudGF0aW9uRGVzaWduZXJTZXJ2aWNlLmdldEdlbmVyaWNDcnVkcygpXHJcbiAgfVxyXG5cclxuICBnZXRGb3JtV29yZmtsb3dQcmVzZW50YXRpb25TZXR0aW5nKCkge1xyXG4gICAgbGV0IHByZXNlbnRhdGlvblJlcXVlc3QgPSBuZXcgUHJlc2VudGF0aW9uU2V0dGluZygpXHJcblxyXG4gICAgdGhpcy5kaXJlY3RpdmVFbGVtZW50cyA9IFsuLi50aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lclNlcnZpY2UuZ2V0RGlyZWN0aXZlcygpLFxyXG4gICAgLi4udGhpcy5fcHJlc2VudGF0aW9uRGVzaWduZXJCYXNlU2VydmljZS5nZXREaXJlY3RpdmVzKClcclxuICAgIF07XHJcblxyXG4gICAgbGV0IHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzOiBQcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsW10gPSBbXVxyXG4gICAgbGV0IGF2YWlsYWJsZURpcmVjdGl2ZUVsZW1lbnRzID0gdGhpcy5kaXJlY3RpdmVFbGVtZW50cy5maWx0ZXIoeCA9PlxyXG4gICAgICAhKHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdD8ucHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHMuc29tZSh5ID0+XHJcbiAgICAgICAgeS5ibG9ja05hbWUgPT09IHgucHJlc2VudGF0aW9uRGVzaWduZXIgJiYgIXkuaXNCbG9ja1Zpc2libGVcclxuICAgICAgKSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5pbml0VHNpR3JpZHNSZWYoKVxyXG5cclxuICAgIGF2YWlsYWJsZURpcmVjdGl2ZUVsZW1lbnRzPy5mb3JFYWNoKChkaXJlY3RpdmUpID0+IHtcclxuXHJcbiAgICAgIGxldCBjb25maWd1cmF0aW9uID0gdW5kZWZpbmVkXHJcblxyXG5cclxuICAgICAgbGV0IGdyaWRTdGF0ZSA9IFtcclxuICAgICAgICAuLi50aGlzLnZpZXdHcmlkc0NvbXBvbmVudHMsXHJcbiAgICAgICAgLi4udGhpcy5nZW5lcmljR3JpZHNDb21wb25lbnRzLFxyXG4gICAgICAgIC4uLnRoaXMuZ2VuZXJpY0NydWRzQ29tcG9uZW50cyxcclxuICAgICAgICAuLi50aGlzLmVkaXRhYmxlR3JpZENvbXBvbmVudHNcclxuICAgICAgXVxyXG4gICAgICAgIC5maW5kKHggPT4geC5pZCA9PT0gZGlyZWN0aXZlLnByZXNlbnRhdGlvbkRlc2lnbmVyIHx8ICgnZm9ybU5hbWUnIGluIHggJiYgeC5mb3JtTmFtZSA9PT0gZGlyZWN0aXZlLnByZXNlbnRhdGlvbkRlc2lnbmVyKSlcclxuICAgICAgICA/LmdldFN0YXRlKCk7XHJcblxyXG4gICAgICBjb25maWd1cmF0aW9uID0gZ3JpZFN0YXRlID8gSlNPTi5zdHJpbmdpZnkoZ3JpZFN0YXRlKSA6IHVuZGVmaW5lZDtcclxuXHJcblxyXG4gICAgICBsZXQgb2JqZWN0OiBQcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsID0ge1xyXG4gICAgICAgIGJsb2NrTmFtZTogZGlyZWN0aXZlLnByZXNlbnRhdGlvbkRlc2lnbmVyLFxyXG4gICAgICAgIGlzQmxvY2tWaXNpYmxlOiAhZGlyZWN0aXZlLnNob3dIaWRlQ2hlY2tib3hDb21wb25lbnRSZWY/Lmluc3RhbmNlPy5fY2hlY2tlZCxcclxuICAgICAgICB1aWQ6IHRoaXMuZ2V0UHJlc2VudGF0aW9uU2V0aW5nRGV0YWlsVWlkKGRpcmVjdGl2ZS5wcmVzZW50YXRpb25EZXNpZ25lciA/PyBcIlwiKSxcclxuICAgICAgICBjb25maWd1cmF0aW9uOiBjb25maWd1cmF0aW9uLFxyXG4gICAgICAgIGlzSW5wdXRFbmFibGVkOiAhZGlyZWN0aXZlLmRpc2FibGVkQ2hlY2tib3hDb21wb25lbnRSZWY/Lmluc3RhbmNlPy5fY2hlY2tlZFxyXG4gICAgICB9XHJcbiAgICAgIHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzLnB1c2gob2JqZWN0KVxyXG4gICAgfSlcclxuXHJcbiAgICBwcmVzZW50YXRpb25SZXF1ZXN0LmNvbXBvbmVudElkZW50aWZlciA9IHRoaXMuZ2V0Q29tcG9uZW50SWRlbnRpZmllcigpO1xyXG4gICAgcHJlc2VudGF0aW9uUmVxdWVzdC5wcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscyA9IHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzXHJcblxyXG4gICAgY29uc29sZS5sb2coXCJwcmVzZW50YXRpb25SZXF1ZXN0ID0+IFwiLCBwcmVzZW50YXRpb25SZXF1ZXN0KVxyXG4gICAgcmV0dXJuIHByZXNlbnRhdGlvblJlcXVlc3RcclxuICB9XHJcblxyXG5cclxuICBpc0RlbGV0ZU1vZGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5tb2RlID09IENvbXBvbmVudF9Nb2Rlcy5ERUxFVEU7XHJcbiAgfVxyXG4gIGlzU3VibWl0RGlzYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICAvL3JldHVybiAhdGhpcy5mb3JtUmVmPy5mb3JtPy52YWxpZCB8fCB0aGlzLnNhdmluZztcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgaXNDb25zdWx0TW9kZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLm1vZGUgPT0gQ29tcG9uZW50X01vZGVzLkNPTlNVTFQ7XHJcbiAgfVxyXG5cclxuICBpc0R1cGxpY2F0ZU1vZGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5tb2RlID09IENvbXBvbmVudF9Nb2Rlcy5EVVBMSUNBVEU7XHJcbiAgfVxyXG4gIGlzRWRpdE1vZGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5tb2RlID09IENvbXBvbmVudF9Nb2Rlcy5FRElUO1xyXG4gIH1cclxuICAvLyNyZWdpb24gcHJpdmF0ZSBtZXRob2RzXHJcbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGluaXRNb2RhbERhdGEoKSB7XHJcbiAgICBzdXBlci5pbml0TW9kYWxEYXRhKClcclxuICAgIGlmICh0aGlzLm9wZW5lZERpYWxvZ1JlZiAhPSBudWxsXHJcbiAgICAgICYmIHRoaXMub3BlbmVkRGlhbG9nUmVmICE9IHVuZGVmaW5lZFxyXG4gICAgICAmJiB0aGlzLm9wZW5lZERpYWxvZ0NvbmZpZyAhPSBudWxsXHJcbiAgICAgICYmIHRoaXMub3BlbmVkRGlhbG9nQ29uZmlnICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAvL2NoZWNrIGhhdmUgb3BlbmVkRGlhbG9nQ29uZmlnXHJcbiAgICAgIGlmICh0aGlzLm9wZW5lZERpYWxvZ0NvbmZpZy5kYXRhICE9IG51bGwgJiYgdGhpcy5vcGVuZWREaWFsb2dDb25maWcuZGF0YSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICB0aGlzLmN1ZENvbXBvbmVudCA9IHRoaXMub3BlbmVkRGlhbG9nQ29uZmlnLmRhdGEuY3VkQ29tcG9uZW50O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF92ZXJpZnlNb2RhbERhdGEoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5vcGVuZWREaWFsb2dSZWYgIT0gbnVsbFxyXG4gICAgICAmJiB0aGlzLm9wZW5lZERpYWxvZ1JlZiAhPSB1bmRlZmluZWRcclxuICAgICAgJiYgdGhpcy5vcGVuZWREaWFsb2dDb25maWcgIT0gbnVsbFxyXG4gICAgICAmJiB0aGlzLm9wZW5lZERpYWxvZ0NvbmZpZyAhPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG4gIFxyXG4gIHByaXZhdGUgX2luaXRNb2RhbFJlZigpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl92ZXJpZnlNb2RhbERhdGEoKSkge1xyXG4gICAgICAvL3RoaXMuYnNNb2RhbFJlZiA9IHtoaWRlOiAoKSA9PiB0aGlzLm9wZW5lZERpYWxvZ1JlZi5kZXN0cm95KCksY2xvc2U6ICh2YWw6IGFueSk9Pnt0aGlzLm9wZW5lZERpYWxvZ1JlZi5jbG9zZSh2YWwpfX1cclxuICAgIH1cclxuICB9XHJcbiAgLy9cclxuICBsKGtleTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLmxvY2FsaXplICE9IG51bGxcclxuICAgICAgJiYgdGhpcy5sb2NhbGl6ZSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMubG9jYWxpemUudHJhbnNmb3JtKGtleSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ga2V5O1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIHRyYWl0ZXIgbXVsdGlwbGUgY29tYm9cclxuICBhbGxDb21ib0xvYWRpbmdTdGF0dXM6IEFycmF5PENvbWJvU3RhdHVzTW9kZWw+ID0gW107XHJcbiAgYXJlQWxsQ29tYm9Mb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcm9jZXNzQ29tYm9Jbml0RXZlbnQoY29tYm9TdGF0dXM6IENvbWJvU3RhdHVzTW9kZWwpIHtcclxuICAgIGlmICghdGhpcy5hbGxDb21ib0xvYWRpbmdTdGF0dXMuZmluZCh1ID0+IHUudWlkID09IGNvbWJvU3RhdHVzLnVpZCkpXHJcbiAgICAgIHRoaXMuYWxsQ29tYm9Mb2FkaW5nU3RhdHVzLnB1c2goY29tYm9TdGF0dXMpO1xyXG4gIH1cclxuXHJcbiAgcHJvY2Vzc0NvbWJvSXNMb2FkZWRFdmVudChjb21ib1N0YXR1czogQ29tYm9TdGF0dXNNb2RlbCkge1xyXG4gICAgbGV0IGNvbWJvUyA9IHRoaXMuYWxsQ29tYm9Mb2FkaW5nU3RhdHVzLmZpbmQodSA9PiB1LnVpZCA9PSBjb21ib1N0YXR1cy51aWQpO1xyXG4gICAgaWYgKGNvbWJvUyAhPSBudWxsICYmIGNvbWJvUyAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgY29tYm9TLmlzRGF0YUxvYWRlZCA9IGNvbWJvU3RhdHVzLmlzRGF0YUxvYWRlZDtcclxuICAgIH1cclxuICAgIHRoaXMuYXJlQWxsQ29tYm9Mb2FkZWRGbigpO1xyXG4gIH1cclxuXHJcbiAgYXJlQWxsQ29tYm9Mb2FkZWRGbigpOiB2b2lkIHtcclxuICAgIGxldCByZXN1bHQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgIGlmICh0aGlzLmFsbENvbWJvTG9hZGluZ1N0YXR1cy5sZW5ndGggPiAwKVxyXG4gICAgICB0aGlzLmFsbENvbWJvTG9hZGluZ1N0YXR1cy5mb3JFYWNoKHUgPT4ge1xyXG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiB1LmlzRGF0YUxvYWRlZDtcclxuICAgICAgfSk7XHJcbiAgICBlbHNlIHJlc3VsdCA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuYXJlQWxsQ29tYm9Mb2FkZWQgPSByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBoaWRlKHZhbD86IGFueSkge1xyXG4gICAgaWYgKHRoaXMub3BlbmVkRGlhbG9nUmVmICE9IG51bGwgJiYgdGhpcy5vcGVuZWREaWFsb2dSZWYgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGlmICh2YWwgPT0gZmFsc2UpIHtcclxuICAgICAgICB0aGlzLm9wZW5lZERpYWxvZ1JlZi5kZXN0cm95KCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5vcGVuZWREaWFsb2dSZWYuY2xvc2UodmFsKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gdHJhaXRlciBtdWx0aXBsZSBjb21ib1xyXG5cclxuICBnZXRXb3JrZmxvd0V0YXRGb3JtKCkge1xyXG4gICAgbGV0IHdvcmtmbG93RXRhdEZvcm0gPSB0aGlzLl93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLndvcmtmbG93RXRhdEZvcm1Gb3JDdXJyZW50Rm9ybVxyXG4gICAgICA/LmZpbmQoeCA9PiB4LnVpZCA9PSB0aGlzLndvcmtmbG93SW5mb3JtYXRpb24/LndvcmtmbG93RXRhdClcclxuXHJcbiAgICBpZiAod29ya2Zsb3dFdGF0Rm9ybSkge1xyXG4gICAgICBsZXQgd29ya2Zsb3dFdGF0ID0gdGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS5tYXBXb3JrZmxvd0V0YXRGb3JtVG9QcmVzZW50YXRpb25TZXR0aW5nKFxyXG4gICAgICAgIHdvcmtmbG93RXRhdEZvcm0/LndvcmtmbG93RXRhdHNGb3Jtc1xyXG4gICAgICApO1xyXG5cclxuICAgICAgcmV0dXJuIHdvcmtmbG93RXRhdFxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHVuZGVmaW5lZFxyXG4gIH1cclxuXHJcbiAgLy8gI3JlZ2lvbiBQcmVzZW50YXRpb24gU2V0dGluZ3NcclxuICBhZGRJbnB1dHMoXHJcbiAgICBwcmVzZW50YXRpb25SZXF1ZXN0OiBQcmVzZW50YXRpb25TZXR0aW5nLFxyXG4gICAgYXBwbHlHcmlkQ29uZmlnOiBib29sZWFuID0gdHJ1ZSxcclxuICAgIHdvcmtmbG93RXRhdD86IFByZXNlbnRhdGlvblNldHRpbmcsXHJcbiAgICBkaXJlY3RpdmVFbGVtZW50czogKFByZXNlbnRhdGlvbkRlc2lnbmVyRGlyZWN0aXZlIHwgUHJlc2VudGF0aW9uRGVzaWduZXJEaXJlY3RpdmVCYXNlKVtdID0gdGhpcy5kaXJlY3RpdmVFbGVtZW50c1xyXG4gICk6IHZvaWQge1xyXG5cclxuICAgIGlmICgoIXdvcmtmbG93RXRhdCB8fCB3b3JrZmxvd0V0YXQucHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHMubGVuZ3RoID09IDApXHJcbiAgICAgICYmIHRoaXMud29ya2Zsb3dJbmZvcm1hdGlvblxyXG4gICAgICAmJiB0aGlzLndvcmtmbG93SW5mb3JtYXRpb24/LndvcmtmbG93RXRhdCkge1xyXG4gICAgICB3b3JrZmxvd0V0YXQgPSB0aGlzLmdldFdvcmtmbG93RXRhdEZvcm0oKVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGhhc1ByZXNlbnRhdGlvblJlcXVlc3QgPSBwcmVzZW50YXRpb25SZXF1ZXN0Py5wcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscz8ubGVuZ3RoID4gMDtcclxuXHJcblxyXG4gICAgaWYgKGhhc1ByZXNlbnRhdGlvblJlcXVlc3QpIHtcclxuICAgICAgZGlyZWN0aXZlRWxlbWVudHMgPSBkaXJlY3RpdmVFbGVtZW50cy5maWx0ZXIoeCA9PlxyXG4gICAgICAgIHByZXNlbnRhdGlvblJlcXVlc3QucHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHM/LnNvbWUoXHJcbiAgICAgICAgICB5ID0+IHkuYmxvY2tOYW1lID09PSB4LnByZXNlbnRhdGlvbkRlc2lnbmVyICYmICh5LmlzQmxvY2tWaXNpYmxlID09IHVuZGVmaW5lZCB8fCB5LmlzQmxvY2tWaXNpYmxlID09IHRydWUpXHJcbiAgICAgICAgICAgICYmIHgudHJlYXRlZCA9PSBmYWxzZVxyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBkaXJlY3RpdmVFbGVtZW50cz8uZm9yRWFjaChkaXJlY3RpdmUgPT4ge1xyXG5cclxuICAgICAgY29uc3QgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbCA9IHByZXNlbnRhdGlvblJlcXVlc3QucHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHMuZmluZCh4ID0+IHguYmxvY2tOYW1lID09IGRpcmVjdGl2ZS5wcmVzZW50YXRpb25EZXNpZ25lcilcclxuXHJcbiAgICAgIGlmIChwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsID09IHVuZGVmaW5lZCB8fCBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsLmlzQmxvY2tWaXNpYmxlKSB7XHJcblxyXG4gICAgICAgIGxldCB3b3Jma2Zsb3dFdGF0Rm9ybSA9IHRoaXMuZ2V0V29ya2Zsb3dFdGF0Rm9ybSgpO1xyXG5cclxuICAgICAgICBpZiAod29yZmtmbG93RXRhdEZvcm0pIHtcclxuICAgICAgICAgIGxldCB3b3JrZmxvd0NvbmZpZyA9IHdvcmZrZmxvd0V0YXRGb3JtLnByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzLmZpbmQoeCA9PiB4LmJsb2NrTmFtZSA9PSBkaXJlY3RpdmUucHJlc2VudGF0aW9uRGVzaWduZXIpXHJcblxyXG4gICAgICAgICAgaWYgKCF3b3JrZmxvd0NvbmZpZykge1xyXG4gICAgICAgICAgICBkaXJlY3RpdmUuZXhlY3V0ZSh0cnVlLCBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsPy5jb25maWd1cmF0aW9uKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSBpZiAod29ya2Zsb3dDb25maWcgJiYgd29ya2Zsb3dDb25maWcuaXNCbG9ja1Zpc2libGUgJiYgKHdvcmtmbG93Q29uZmlnLmlzSW5wdXRFbmFibGVkID09IHVuZGVmaW5lZCB8fCB3b3JrZmxvd0NvbmZpZy5pc0lucHV0RW5hYmxlZCA9PSB0cnVlKSkge1xyXG4gICAgICAgICAgICBkaXJlY3RpdmUuZXhlY3V0ZSh0cnVlLCBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsPy5jb25maWd1cmF0aW9uKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSBpZiAod29ya2Zsb3dDb25maWcgJiYgd29ya2Zsb3dDb25maWcuaXNCbG9ja1Zpc2libGUgJiYgd29ya2Zsb3dDb25maWcuaXNJbnB1dEVuYWJsZWQgPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgZGlyZWN0aXZlLmRpc2FibGVJbnB1dHMoKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGRpcmVjdGl2ZS5leGVjdXRlKHRydWUsIHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWw/LmNvbmZpZ3VyYXRpb24pXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS5pc0Rlc2dpbk1vZGVGcm9tV29ya2Zsb3cpIHtcclxuICAgICAgICAgIGRpcmVjdGl2ZS5hZGRDaGVja2JveGVzVG9JbnB1dHModGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS53b3JrZmxvd0Zvcm1Db25maWd1cmF0aW9uKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGUgPT09IE1vZGVzLmNyZWF0ZSkge1xyXG4gICAgICB0aGlzLnByb2Nlc3NEaXNhYmxlZElucHV0cyhwcmVzZW50YXRpb25SZXF1ZXN0LCBkaXJlY3RpdmVFbGVtZW50cyk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHRoaXMucmVtb3ZlRW1wdHlBbmNlc3RvcnNGcm9tRWxlbWVudHMoKTtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgcHJvY2Vzc0Rpc2FibGVkSW5wdXRzKHByZXNlbnRhdGlvblJlcXVlc3Q6IFByZXNlbnRhdGlvblNldHRpbmcsIGRpcmVjdGl2ZUVsZW1lbnRzOiAoUHJlc2VudGF0aW9uRGVzaWduZXJEaXJlY3RpdmUgfCBQcmVzZW50YXRpb25EZXNpZ25lckRpcmVjdGl2ZUJhc2UpW10gPSB0aGlzLmRpcmVjdGl2ZUVsZW1lbnRzKSB7XHJcbiAgICBpZiAodGhpcy5fbGF5b3V0SGVscGVyU2VydmljZT8uaXNEZXNpZ25Nb2RlIHx8IHRoaXMuX3dvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UuaXNEZXNnaW5Nb2RlRnJvbVdvcmtmbG93KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcblxyXG4gICAgY29uc3QgaGFzUHJlc2VudGF0aW9uUmVxdWVzdCA9IHByZXNlbnRhdGlvblJlcXVlc3Q/LnByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzPy5sZW5ndGggPiAwO1xyXG5cclxuICAgIGlmIChoYXNQcmVzZW50YXRpb25SZXF1ZXN0KSB7XHJcbiAgICAgIGRpcmVjdGl2ZUVsZW1lbnRzID0gZGlyZWN0aXZlRWxlbWVudHMuZmlsdGVyKHggPT5cclxuICAgICAgICBwcmVzZW50YXRpb25SZXF1ZXN0LnByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzPy5zb21lKFxyXG4gICAgICAgICAgeSA9PiB5LmJsb2NrTmFtZSA9PT0geC5wcmVzZW50YXRpb25EZXNpZ25lciAmJiB5LmlzQmxvY2tWaXNpYmxlXHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBjb25zdCB3b3Jma2Zsb3dFdGF0Rm9ybSA9IHRoaXMuZ2V0V29ya2Zsb3dFdGF0Rm9ybSgpXHJcbiAgICBkaXJlY3RpdmVFbGVtZW50cz8uZm9yRWFjaChkaXJlY3RpdmUgPT4ge1xyXG5cclxuICAgICAgbGV0IHdvcmtmbG93Q29uZmlnID0gd29yZmtmbG93RXRhdEZvcm0/LnByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzLmZpbmQoeCA9PiB4LmJsb2NrTmFtZSA9PSBkaXJlY3RpdmUucHJlc2VudGF0aW9uRGVzaWduZXIpXHJcblxyXG4gICAgICBpZiAod29ya2Zsb3dDb25maWcgJiYgIXdvcmtmbG93Q29uZmlnLmlzSW5wdXRFbmFibGVkICYmICh3b3JrZmxvd0NvbmZpZy5pc0Jsb2NrVmlzaWJsZSA/PyB0cnVlKSkge1xyXG4gICAgICAgIGRpcmVjdGl2ZS5kaXNhYmxlSW5wdXRzKClcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHJlbW92ZUVtcHR5QW5jZXN0b3JzRnJvbUVsZW1lbnRzKCkge1xyXG4gICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAvLyAgIHRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyU2VydmljZS5nZXREaXJlY3RpdmVzKCkuZm9yRWFjaChzID0+IHMucmVtb3ZlRW1wdHlBbmNlc3RvcnMocz8udGVtcFRlbXBsYXRlUGFyZW50Tm9kZSkpXHJcbiAgICAvLyB9LCAwKTtcclxuICB9XHJcblxyXG4gIGdldFByZXNlbnRhdGlvblNldGluZ0RldGFpbFVpZChibG9ja05hbWU6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdD8ucHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHM/LmZpbmQoeCA9PiB4LmJsb2NrTmFtZSA9PSBibG9ja05hbWUpPy51aWRcclxuICB9XHJcblxyXG4gIGdldENvbXBvbmVudElkZW50aWZpZXIoKSB7XHJcbiAgICAvLyBpZiAodGhpcy5kZXNjcmltaW5hdG9yVmFsdWUpIHtcclxuICAgIC8vICAgcmV0dXJuIGAke3RoaXMuX215TmFtZSgpfV8ke3RoaXMuZGVzY3JpbWluYXRvclZhbHVlfWBcclxuICAgIC8vIH1cclxuICAgIHJldHVybiB0aGlzLl9teU5hbWUoKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzYXZlUHJvcGVydGllcygpOiB2b2lkIHtcclxuXHJcbiAgICB0aGlzLmluaXRUc2lHcmlkc1JlZigpXHJcblxyXG4gICAgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0ID0gdGhpcy5fcHJlc2VudGF0aW9uU2V0dGluZ1NlcnZpY2UuZ2V0UHJlc2VudGF0aW9uU2V0dGluZ0J5Q29tcG9uZW50SWRlbnRpZmllclN5bmModGhpcy5nZXRDb21wb25lbnRJZGVudGlmaWVyKCksIHRoaXMuZGVzY3JpbWluYXRvclZhbHVlKSA/PyBuZXcgUHJlc2VudGF0aW9uU2V0dGluZygpXHJcblxyXG4gICAgaWYgKCF0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QpIHtcclxuICAgICAgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0ID0gbmV3IFByZXNlbnRhdGlvblNldHRpbmcoKVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsczogUHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbFtdID0gW11cclxuXHJcbiAgICB0aGlzLmRpcmVjdGl2ZUVsZW1lbnRzPy5mb3JFYWNoKChkaXJlY3RpdmUpID0+IHtcclxuXHJcbiAgICAgIGxldCBjb25maWd1cmF0aW9uID0gdW5kZWZpbmVkXHJcblxyXG5cclxuICAgICAgbGV0IGdyaWRTdGF0ZSA9IFtcclxuICAgICAgICAuLi50aGlzLnZpZXdHcmlkc0NvbXBvbmVudHMsXHJcbiAgICAgICAgLi4udGhpcy5nZW5lcmljR3JpZHNDb21wb25lbnRzLFxyXG4gICAgICAgIC4uLnRoaXMuZ2VuZXJpY0NydWRzQ29tcG9uZW50cyxcclxuICAgICAgICAuLi50aGlzLmVkaXRhYmxlR3JpZENvbXBvbmVudHNcclxuICAgICAgXVxyXG4gICAgICAgIC5maW5kKHggPT4geC5pZCA9PT0gZGlyZWN0aXZlLnByZXNlbnRhdGlvbkRlc2lnbmVyIHx8ICgnZm9ybU5hbWUnIGluIHggJiYgeC5mb3JtTmFtZSA9PT0gZGlyZWN0aXZlLnByZXNlbnRhdGlvbkRlc2lnbmVyKSlcclxuICAgICAgICA/LmdldFN0YXRlKCk7XHJcblxyXG4gICAgICBjb25maWd1cmF0aW9uID0gZ3JpZFN0YXRlID8gSlNPTi5zdHJpbmdpZnkoZ3JpZFN0YXRlKSA6IHVuZGVmaW5lZDtcclxuXHJcblxyXG4gICAgICBsZXQgb2JqZWN0OiBQcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsID0ge1xyXG4gICAgICAgIGJsb2NrTmFtZTogZGlyZWN0aXZlLnByZXNlbnRhdGlvbkRlc2lnbmVyLFxyXG4gICAgICAgIGlzQmxvY2tWaXNpYmxlOiAhZGlyZWN0aXZlLnNob3dIaWRlQ2hlY2tib3hDb21wb25lbnRSZWY/Lmluc3RhbmNlPy5fY2hlY2tlZCxcclxuICAgICAgICB1aWQ6IHRoaXMuZ2V0UHJlc2VudGF0aW9uU2V0aW5nRGV0YWlsVWlkKGRpcmVjdGl2ZS5wcmVzZW50YXRpb25EZXNpZ25lciA/PyBcIlwiKSxcclxuICAgICAgICBjb25maWd1cmF0aW9uOiBjb25maWd1cmF0aW9uXHJcbiAgICAgIH1cclxuICAgICAgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHMucHVzaChvYmplY3QpXHJcbiAgICB9KVxyXG5cclxuICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdC5jb21wb25lbnRJZGVudGlmZXIgPSB0aGlzLmdldENvbXBvbmVudElkZW50aWZpZXIoKTtcclxuICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdC5kZXNjcmltaW5hdG9yVmFsdWUgPSB0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZVxyXG4gICAgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0LnByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzID0gcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHNcclxuXHJcbiAgICB0aGlzLmlzbG9hZGluZyA9IHRydWVcclxuXHJcbiAgICBpZiAodGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0LnVpZCAhPSBudWxsICYmIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdC51aWQgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuX3ByZXNlbnRhdGlvblNldHRpbmdTZXJ2aWNlLnVwZGF0ZVByZXNlbnRhdGlvblNldHRpbmcodGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0LCB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QudWlkKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogYXN5bmMgKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5wcm9jZXNzQWZ0ZXJTYXZlQ29uZmlndXJhdGlvbigpXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcilcclxuICAgICAgICAgICAgdGhpcy5fZXJyb3JSZXNwb25zZU1hbmFnZXIuc2hvd0Vycm9yTWVzc2FnZShlcnJvcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLl9wcmVzZW50YXRpb25TZXR0aW5nU2VydmljZS5jcmVhdGVQcmVzZW50YXRpb25TZXR0aW5nKHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdClcclxuICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IGFzeW5jIChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucHJvY2Vzc0FmdGVyU2F2ZUNvbmZpZ3VyYXRpb24oKVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpXHJcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yUmVzcG9uc2VNYW5hZ2VyLnNob3dFcnJvck1lc3NhZ2UoZXJyb3IpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm9jZXNzU2luZ2xlRWxlbWVudChkaXJlY3RpdmU6IFByZXNlbnRhdGlvbkRlc2lnbmVyRGlyZWN0aXZlIHwgUHJlc2VudGF0aW9uRGVzaWduZXJEaXJlY3RpdmVCYXNlKSB7XHJcbiAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QgPSB0aGlzLl9wcmVzZW50YXRpb25TZXR0aW5nU2VydmljZS5nZXRQcmVzZW50YXRpb25TZXR0aW5nQnlDb21wb25lbnRJZGVudGlmaWVyU3luYyh0aGlzLmdldENvbXBvbmVudElkZW50aWZpZXIoKSwgdGhpcy5kZXNjcmltaW5hdG9yVmFsdWUpID8/IG5ldyBQcmVzZW50YXRpb25TZXR0aW5nKClcclxuICAgIGxldCBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsID0gdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0Py5wcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscz8uZmluZCh4ID0+IHguYmxvY2tOYW1lID09IGRpcmVjdGl2ZS5wcmVzZW50YXRpb25EZXNpZ25lcilcclxuXHJcblxyXG4gICAgaWYgKHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWwgPT0gdW5kZWZpbmVkIHx8IHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWwuaXNCbG9ja1Zpc2libGUpIHtcclxuXHJcbiAgICAgIGxldCB3b3Jma2Zsb3dFdGF0Rm9ybSA9IHRoaXMuZ2V0V29ya2Zsb3dFdGF0Rm9ybSgpO1xyXG5cclxuICAgICAgaWYgKHdvcmZrZmxvd0V0YXRGb3JtKSB7XHJcbiAgICAgICAgbGV0IHdvcmtmbG93Q29uZmlnID0gd29yZmtmbG93RXRhdEZvcm0ucHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHMuZmluZCh4ID0+IHguYmxvY2tOYW1lID09IGRpcmVjdGl2ZS5wcmVzZW50YXRpb25EZXNpZ25lcilcclxuXHJcbiAgICAgICAgaWYgKCF3b3JrZmxvd0NvbmZpZykge1xyXG4gICAgICAgICAgZGlyZWN0aXZlLmV4ZWN1dGUodHJ1ZSwgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbD8uY29uZmlndXJhdGlvbilcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAod29ya2Zsb3dDb25maWcgJiYgd29ya2Zsb3dDb25maWcuaXNCbG9ja1Zpc2libGUgJiYgKHdvcmtmbG93Q29uZmlnLmlzSW5wdXRFbmFibGVkID09IHVuZGVmaW5lZCB8fCB3b3JrZmxvd0NvbmZpZy5pc0lucHV0RW5hYmxlZCA9PSB0cnVlKSkge1xyXG4gICAgICAgICAgZGlyZWN0aXZlLmV4ZWN1dGUodHJ1ZSwgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbD8uY29uZmlndXJhdGlvbilcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAod29ya2Zsb3dDb25maWcgJiYgd29ya2Zsb3dDb25maWcuaXNCbG9ja1Zpc2libGUgJiYgd29ya2Zsb3dDb25maWcuaXNJbnB1dEVuYWJsZWQgPT0gZmFsc2UpIHtcclxuICAgICAgICAgIGRpcmVjdGl2ZS5kaXNhYmxlSW5wdXRzKClcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgZGlyZWN0aXZlLmV4ZWN1dGUodHJ1ZSwgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbD8uY29uZmlndXJhdGlvbilcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuX3dvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UuaXNEZXNnaW5Nb2RlRnJvbVdvcmtmbG93KSB7XHJcbiAgICAgICAgZGlyZWN0aXZlLmFkZENoZWNrYm94ZXNUb0lucHV0cyh0aGlzLl93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLndvcmtmbG93Rm9ybUNvbmZpZ3VyYXRpb24pXHJcbiAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgdW5zdWJzY3JpYmVGcm9tQWN0aXZlU3Vic2NyaXRwaW9uKCkge1xyXG4gICAgaWYgKHRoaXMuX2Rlc2lnbk1vZGVGb3JtU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMuX2Rlc2lnbk1vZGVGb3JtU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKClcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fc2F2ZVdvcmtmbG93Rm9ybUNvbmZpZ3VyYXRpb25TdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy5fc2F2ZVdvcmtmbG93Rm9ybUNvbmZpZ3VyYXRpb25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9hZGRlZERpcmVjdGl2ZVN1YnNjcml0cGlvbikge1xyXG4gICAgICB0aGlzLl9hZGRlZERpcmVjdGl2ZVN1YnNjcml0cGlvbi51bnN1YnNjcmliZSgpXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2FkZGVkRGlyZWN0aXZlQmFzZVN1YnNjcml0cGlvbikge1xyXG4gICAgICB0aGlzLl9hZGRlZERpcmVjdGl2ZUJhc2VTdWJzY3JpdHBpb24udW5zdWJzY3JpYmUoKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlVHNpTW9kYWxGb290ZXIoKSB7XHJcbiAgICBjb25zdCB0c2lNb2RhbEZvb3RlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJ0c2ktbW9kYWwtZm9vdGVyXCIpXHJcblxyXG4gICAgaWYgKHRzaU1vZGFsRm9vdGVyICYmIHRzaU1vZGFsRm9vdGVyLmxhc3RDaGlsZCkge1xyXG4gICAgICB0aGlzLl9yZW5kZXJlcj8ucmVtb3ZlQ2hpbGQodHNpTW9kYWxGb290ZXIsIHRzaU1vZGFsRm9vdGVyLmxhc3RDaGlsZClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNyZWF0ZVNhdmVCdXR0b24oKSB7XHJcbiAgICBjb25zdCB0c2lCdXR0b25SZWYgPSB0aGlzLl92aWV3Q29udGFpbmVyUmVmPy5jcmVhdGVDb21wb25lbnQoVHNpQnV0dG9uQ29tcG9uZW50KTtcclxuICAgIHRzaUJ1dHRvblJlZj8uc2V0SW5wdXQoJ3RleHQnLCAnc2hhcmVkX3RzaV9jb21wb25lbnRfc2F2ZV9jb25maWdfc2hvd19oaWRlJyk7XHJcbiAgICB0c2lCdXR0b25SZWY/LnNldElucHV0KCdpY29uJywgJ3NhdmUnKTtcclxuXHJcbiAgICB0c2lCdXR0b25SZWYhLmluc3RhbmNlLm9uQ2xpY2suZW1pdCA9ICgpID0+IHRoaXMuc2F2ZVByb3BlcnRpZXMoKTtcclxuXHJcbiAgICBjb25zdCB0c2lGb3JtID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcInRzaS1mb3JtXCIpXHJcblxyXG4gICAgaWYgKHRzaUZvcm0pIHtcclxuICAgICAgdGhpcy5fcmVuZGVyZXI/LmFwcGVuZENoaWxkKHRzaUZvcm0sIHRzaUJ1dHRvblJlZj8ubG9jYXRpb24ubmF0aXZlRWxlbWVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBwcm9jZXNzQWZ0ZXJTYXZlQ29uZmlndXJhdGlvbigpIHtcclxuICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2VcclxuICAgIHRoaXMuaGlkZSgpXHJcbiAgICB0aGlzLl9tZXNzYWdlSW5mb1NlcnZpY2Uuc3VjY2VzcyhMb2NhbGl6YXRpb25LZXlzLnNhdmVkU3VjY2Vzc2Z1bGx5KVxyXG4gICAgdGhpcy5fbGF5b3V0SGVscGVyU2VydmljZS5pc0Rlc2lnbk1vZGUgPSBmYWxzZVxyXG4gICAgLy8gdGhpcy5fbGF5b3V0SGVscGVyU2VydmljZS5jdXJyZW50Rm9ybU5hbWUgPSB1bmRlZmluZWRcclxuICAgIHRoaXMuX2xheW91dEhlbHBlclNlcnZpY2UuX2Rlc2lnbk1vZGVGb3JtU3ViamVjdC5uZXh0KGZhbHNlKVxyXG4gICAgYXdhaXQgdGhpcy5fcHJlc2VudGF0aW9uU2V0dGluZ1NlcnZpY2UubG9hZFByZXNlbnRhdGlvblNldHRpbmdzKCk7XHJcbiAgfVxyXG5cclxuICBzYXZlKCk6IHZvaWR7XHJcbiAgICBsZXQgZXJyb3JNZXNzYWdlOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgICB0aGlzLnJlcXVpcmVkSW5wdXRzID0gdGhpcy5faW5wdXRSZWdpc3RyeS5nZXRBbGwoKS5maWx0ZXIoaW5wID0+IGlucC5pc1JlcXVpcmVkICYmIGlucC5kaXNhYmxlZCA9PT0gZmFsc2UpO1xyXG4gICAgdGhpcy5mYXVsdHlJbnB1dHMgPSBbXTtcclxuICAgIHRoaXMuaXNGb3JtVmFsaWQgPSB0aGlzLnJlcXVpcmVkSW5wdXRzLmV2ZXJ5KGlucHV0ID0+IGlucHV0LmlzVmFsaWQoKS5pc1ZhbGlkID09PSB0cnVlKVxyXG5cclxuICAgIHRoaXMucmVxdWlyZWRJbnB1dHMuZm9yRWFjaChpbnB1dCA9PiB7XHJcbiAgICAgIGxldCBmdnIgPSBpbnB1dC5pc1ZhbGlkKCk7XHJcbiAgICAgIGlmKGZ2ci5pc1ZhbGlkID09PSBmYWxzZSl7XHJcbiAgICAgICAgdGhpcy5mYXVsdHlJbnB1dHMucHVzaChmdnIpXHJcbiAgICAgIH1cclxuICAgIH0pXHJcblxyXG4gICAgaWYodGhpcy5pc0Zvcm1WYWxpZCA9PT0gZmFsc2UgJiYgdGhpcy5mYXVsdHlJbnB1dHMubGVuZ3RoID4gMCl7XHJcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMuZmF1bHR5SW5wdXRzKVxyXG4gICAgICBsZXQgZmF1bHR5SW5wdXRzTmFtZXMgPSBcIlwiO1xyXG4gICAgICB0aGlzLmZhdWx0eUlucHV0cy5mb3JFYWNoKChpdGVtLGluZGV4KSA9PiB7XHJcbiAgICAgICAgaWYoaW5kZXggPT09IHRoaXMuZmF1bHR5SW5wdXRzLmxlbmd0aC0xKVxyXG4gICAgICAgICAgZmF1bHR5SW5wdXRzTmFtZXMgKz0gYCR7aXRlbS5pbnB1dE5hbWV9LiBgXHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgZmF1bHR5SW5wdXRzTmFtZXMgKz0gYCR7aXRlbS5pbnB1dE5hbWV9LCBgXHJcbiAgICAgIH0pXHJcbiAgICAgIGZhdWx0eUlucHV0c05hbWVzID0gZmF1bHR5SW5wdXRzTmFtZXMucmVwbGFjZSgvLCQvLCAnJyk7XHJcbiAgICAgIGlmKHRoaXMuZmF1bHR5SW5wdXRzLnNvbWUoZmkgPT4gZmkuZXJyb3IgPT09IEZvcm1WYWxpZGF0aW9uRXJyb3IuUmVxdWlyZWQpKXtcclxuICAgICAgICB0aGlzLl9tZXNzYWdlSW5mb1NlcnZpY2Uud2FybihmYXVsdHlJbnB1dHNOYW1lcywgdGhpcy5sb2NhbGl6ZT8udHJhbnNmb3JtKCd0c2lfZm9ybV9iYXNlX2F1dG9fdmFsaWRhdGlvbl9yZXF1aXJlZF9maWVsZF90aXRsZScpKVxyXG4gICAgICAgIGVycm9yTWVzc2FnZSA9IGBMZXMgY2hhbXBzICR7ZmF1bHR5SW5wdXRzTmFtZXN9IHNvbnQgb2JsaWdhdG9pcmUuYDtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmKHRoaXMuZmF1bHR5SW5wdXRzLnNvbWUoZmkgPT4gZmkuZXJyb3IgPT09IEZvcm1WYWxpZGF0aW9uRXJyb3IuTWF4TGVuZ3RoKSl7XHJcbiAgICAgICB0aGlzLl9tZXNzYWdlSW5mb1NlcnZpY2Uud2FybihgXHJcbiAgICAgICAgICAke3RoaXMubG9jYWxpemU/LnRyYW5zZm9ybSgndHNpX2Zvcm1fYmFzZV9hdXRvX3ZhbGlkYXRpb25fdGhlX2ZpZWxkJyl9XHJcbiAgICAgICAgICAke3RoaXMuZmF1bHR5SW5wdXRzWzBdLmlucHV0TmFtZX0gXHJcbiAgICAgICAgICAke3RoaXMubG9jYWxpemU/LnRyYW5zZm9ybSgndHNpX2Zvcm1fYmFzZV9hdXRvX3ZhbGlkYXRpb25fbWF4X2xlbmd0aCcpIH1cclxuICAgICAgICAgICR7dGhpcy5mYXVsdHlJbnB1dHNbMF0uZGF0YX0gJHt0aGlzLmxvY2FsaXplPy50cmFuc2Zvcm0oJ3RzaV9mb3JtX2Jhc2VfYXV0b192YWxpZGF0aW9uX21heF9sZW5ndGhfY2hhcnMnKSB9YCxcclxuICAgICAgICAgIHRoaXMubG9jYWxpemU/LnRyYW5zZm9ybSgndHNpX2Zvcm1fYmFzZV9hdXRvX3ZhbGlkYXRpb25fbWF4X2xlbmd0aF9maWVsZF90aXRsZScpKVxyXG4gICAgICAgIGVycm9yTWVzc2FnZSA9IGBMZSBjaGFtcCAke3RoaXMuZmF1bHR5SW5wdXRzWzBdLmlucHV0TmFtZX0gbmUgZG9pdCBwYXMgZMOpcGFzc2VyICR7dGhpcy5mYXVsdHlJbnB1dHNbMF0uZGF0YX0gY2FyYWN0w6hyZXMuYDtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmKHRoaXMuZmF1bHR5SW5wdXRzLnNvbWUoZmkgPT4gZmkuZXJyb3IgPT09IEZvcm1WYWxpZGF0aW9uRXJyb3IuT3V0T2ZSYW5nZSkpe1xyXG4gICAgICAgIC8vdG8gZG9cclxuICAgICAgICBlcnJvck1lc3NhZ2UgPSBgTGUgY2hhbXAgJHt0aGlzLmZhdWx0eUlucHV0c1swXS5pbnB1dE5hbWV9IGRvaXQgw6p0cmUgZGFucyBsJ2ludGVydmFsbGUuYDtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy51cGRhdGVGb3JtU3RhdGUoeyBpc1ZhbGlkOiBmYWxzZSwgaXNTdWJtaXR0ZWQ6IHRydWUgfSk7XHJcbiAgICAgIFxyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgdGhpcy51cGRhdGVGb3JtU3RhdGUoeyBpc1ZhbGlkOiB0cnVlLCBpc1N1Ym1pdHRlZDogdHJ1ZSB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlRm9ybVN0YXRlKGZvcm1TdGF0ZTogRm9ybVN0YXRlKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuX2dlbmVyaWNWYWxpZGF0aW9uU3RhdGVTZXJ2aWNlKSByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMuX2dlbmVyaWNWYWxpZGF0aW9uU3RhdGVTZXJ2aWNlLnVwZGF0ZUZvcm1TdGF0ZShmb3JtU3RhdGUpO1xyXG5cclxuICAgICAgICB0aGlzLmVkaXRhYmxlR3JpZENvbXBvbmVudHMgPSB0aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lclNlcnZpY2UuZ2V0RWRpdGFibGVHcmlkcygpO1xyXG4gICAgICAgIHRoaXMuZWRpdGFibGVHcmlkQ29tcG9uZW50cy5mb3JFYWNoKChlKSA9PiBlLnVwZGF0ZUZvcm1TdGF0ZShmb3JtU3RhdGUpKTtcclxuICB9XHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG59XHJcbiIsIjxwPnRzaS1mb3JtLWJhc2Ugd29ya3MhPC9wPlxyXG4iXX0=
@@ -197,7 +197,7 @@ export class CreateOrEditEntityInformationsComponent extends TsiFormComponentBas
197
197
  this.entityWithRelations.relations.map(er => er.entityFrom = this.entityWithRelations.entity.className ?? '');
198
198
  }
199
199
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CreateOrEditEntityInformationsComponent, deps: [{ token: i1.EntityConfigurationService }, { token: i1.ErrorResponseManagerService }, { token: i2.DynamicDialogRef }, { token: i2.DynamicDialogConfig }, { token: i1.TsiNotificationService }, { token: i1.TsiConfirmationService }, { token: i1.ApiExplorerService }], target: i0.ɵɵFactoryTarget.Component }); }
200
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: CreateOrEditEntityInformationsComponent, selector: "app-create-or-edit-entity-informations", providers: [...appProviders], usesInheritance: true, ngImport: i0, template: "<tsi-form class=\"form-horizontal\" autocomplete=\"off\" (onSubmit)=\"save()\" [isLoading]=\"isloading\">\r\n <Tsi-Modal-Header [inputTitle]=\"header | modalLabel : mode : 'administration_entityRelations_title' | localize\"\r\n (onCloseClick)=\"hide()\">\r\n </Tsi-Modal-Header>\r\n\r\n <div *ngIf=\"uid\" class=\"flex align-items-center gap-2 mb-2\">\r\n <span class=\"font-semibold\">{{'administration_gestionEntityInformation_uid' | localize}} :</span>\r\n <span>{{ uid }}</span>\r\n </div>\r\n\r\n <p-tabView>\r\n <p-tabPanel [header]=\"'administration_tab_entityInformation' | localize\">\r\n <fieldset [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n <div class=\"modal-body\">\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\" [labelValue]=\"'administration_gestionEntityInformation_className'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'ClassName'\"\r\n [(inputField)]=\"entityWithRelations.entity.className\"\r\n (inputFieldChange)=\"getColonnesByClassNameAsKeyValuePair($event)\"\r\n [disabled]=\"isDeleteMode() || isConsultMode() || isEditMode()\">\r\n </Tsi-Text-Box>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\" [labelValue]=\"'administration_gestionEntityInformation_formName'\"></Tsi-Label>\r\n <Tsi-Search-Combo class=\"col-8\" [datasource]=\"componentsOptions\"\r\n [(bind)]=\"entityWithRelations.entity.formName\" id-field=\"key\" label-field=\"value\" [showClear]=\"true\"\r\n [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n </Tsi-Search-Combo>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_listComponent'\"></Tsi-Label>\r\n <Tsi-Search-Combo class=\"col-8\" [datasource]=\"componentsOptions\"\r\n [(bind)]=\"entityWithRelations.entity.listComponent\" id-field=\"key\" label-field=\"value\"\r\n [showClear]=\"true\" [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n </Tsi-Search-Combo>\r\n\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\" [labelValue]=\"'administration_gestionEntityInformation_logged'\"></Tsi-Label>\r\n <Tsi-CheckBox class=\"col-8\" [inputName]=\"'Logged'\" [(inputField)]=\"entityWithRelations.entity.logged\">\r\n </Tsi-CheckBox>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\" [labelValue]=\"'administration_gestionEntityInformation_listRoute'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'ListRoute'\"\r\n [(inputField)]=\"entityWithRelations.entity.listRoute\">\r\n </Tsi-Text-Box>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\" [labelValue]=\"'administration_gestionEntityInformation_formRoute'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'FormRoute'\"\r\n [(inputField)]=\"entityWithRelations.entity.formRoute\">\r\n </Tsi-Text-Box>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_discriminatorPropertyName'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'DiscriminatorPropertyName'\"\r\n [(inputField)]=\"entityWithRelations.entity.discriminatorPropertyName\">\r\n </Tsi-Text-Box>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_discriminatorClassName'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'DiscriminatorClassName'\"\r\n [(inputField)]=\"entityWithRelations.entity.discriminatorClassName\">\r\n </Tsi-Text-Box>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_keyColumns'\"></Tsi-Label>\r\n <div class=\"col-8\">\r\n <p-multiSelect [options]=\"keyColumnOptions\" [(ngModel)]=\"entityWithRelations.entity.keyColumns\"\r\n optionValue=\"key\" optionLabel=\"value\" display=\"chip\" defaultLabel=\"Select columns\" [filter]=\"true\">\r\n </p-multiSelect>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_statusColumnName'\"></Tsi-Label>\r\n \r\n <Tsi-Search-Combo class=\"col-6\" [datasource]=\"keyColumnOptions\"\r\n [(bind)]=\"entityWithRelations.entity.statusColumnName\" id-field=\"key\" label-field=\"value\"\r\n [showClear]=\"true\" [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n </Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_isWorkflow'\"></Tsi-Label>\r\n <Tsi-CheckBox class=\"col-8\" [inputName]=\"'IsWorkflow'\"\r\n [(inputField)]=\"entityWithRelations.entity.isWorkflow\">\r\n </Tsi-CheckBox>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_defaultStatus'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'DefaultStatus'\"\r\n [(inputField)]=\"entityWithRelations.entity.defaultStatus\">\r\n </Tsi-Text-Box>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_statusEnumName'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'StatusEnumName'\"\r\n [(inputField)]=\"entityWithRelations.entity.statusEnumName\">\r\n </Tsi-Text-Box>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_advancedSearchComponent'\"></Tsi-Label>\r\n <Tsi-Search-Combo class=\"col-8\" [datasource]=\"componentsOptions\"\r\n [(bind)]=\"entityWithRelations.entity.advancedSearchComponent\" id-field=\"key\" label-field=\"value\"\r\n [showClear]=\"true\" [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n </Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"grid\">\r\n <div class=\"col-4\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-6\"\r\n [labelValue]=\"'administration_gestionEntityInformation_cardHeaderPhotoColumn'\"></Tsi-Label>\r\n\r\n <Tsi-Search-Combo class=\"col-6\" [datasource]=\"keyColumnOptions\"\r\n [(bind)]=\"entityWithRelations.entity.cardHeaderPhotoColumn\" id-field=\"key\" label-field=\"value\"\r\n [showClear]=\"true\" [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n </Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-4\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-6\"\r\n [labelValue]=\"'administration_gestionEntityInformation_cardTitleColumn'\"></Tsi-Label>\r\n \r\n <Tsi-Search-Combo class=\"col-6\" [datasource]=\"keyColumnOptions\"\r\n [(bind)]=\"entityWithRelations.entity.cardTitleColumn\" id-field=\"key\" label-field=\"value\"\r\n [showClear]=\"true\" [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n </Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n <div class=\"col-4\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-6\"\r\n [labelValue]=\"'administration_gestionEntityInformation_cardSubHeaderColumn'\"></Tsi-Label>\r\n <Tsi-Search-Combo class=\"col-6\" [datasource]=\"keyColumnOptions\"\r\n [(bind)]=\"entityWithRelations.entity.cardSubHeaderColumn\" id-field=\"key\" label-field=\"value\"\r\n [showClear]=\"true\" [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n </Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-12\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-2\"\r\n [labelValue]=\"'administration_gestionEntityInformation_cardDescriptionColumn'\"></Tsi-Label>\r\n <Tsi-Search-Combo class=\"col-6\" [datasource]=\"keyColumnOptions\"\r\n [(bind)]=\"entityWithRelations.entity.cardDescriptionColumn\" id-field=\"key\" label-field=\"value\"\r\n [showClear]=\"true\" [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n </Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </fieldset>\r\n </p-tabPanel>\r\n <p-tabPanel [header]=\"'administration_tab_relations' | localize\">\r\n <div class=\"grid\">\r\n <Tsi-Generic-Editable-Grid [columns]=\"entitiesRelationsColumns\" [gridData]=\"entityWithRelations.relations\"\r\n [parent]=\"this\" (addedRowEventEmitter)=\"onAddRelation()\" [showAddButton]=\"isEditMode()\">\r\n </Tsi-Generic-Editable-Grid>\r\n </div>\r\n </p-tabPanel>\r\n <p-tabPanel [header]=\"'administration_tab_permissions' | localize\">\r\n <div class=\"grid\">\r\n <tsi-view-grid [header]=\"entityWithRelations.entity.className ?? ''\" class=\"col-12 mb-3\"\r\n [columns]=\"permissionsGridColumns\" [getDataFromApi]=\"false\" [gridData]=\"endpointInfos\">\r\n </tsi-view-grid>\r\n </div>\r\n </p-tabPanel>\r\n <p-tabPanel [header]=\"'administration_tab_properties' | localize\">\r\n <div class=\"grid\">\r\n <tsi-view-grid [header]=\"'administration_properties_title' | localize\" class=\"col-12 mb-3\"\r\n [columns]=\"propertiesGridColumns\" [getDataFromApi]=\"false\" [gridData]=\"propertiesData\">\r\n </tsi-view-grid>\r\n </div>\r\n </p-tabPanel>\r\n </p-tabView>\r\n \r\n <Tsi-Modal-Footer [isConsult]=\"isConsultMode()\" [cancelDisabled]=\"saving\" [saveDisabled]=\"isSubmitDisabled()\"\r\n (onCancelClick)=\"hide()\">\r\n </Tsi-Modal-Footer>\r\n</tsi-form>", styles: [""], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.TabView, selector: "p-tabView", inputs: ["style", "styleClass", "controlClose", "scrollable", "activeIndex", "selectOnFocus", "nextButtonAriaLabel", "prevButtonAriaLabel", "autoHideButtons", "tabindex"], outputs: ["onChange", "onClose", "activeIndexChange"] }, { kind: "component", type: i5.TabPanel, selector: "p-tabPanel", inputs: ["closable", "headerStyle", "headerStyleClass", "cache", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "selected", "disabled", "header", "leftIcon", "rightIcon"] }, { kind: "component", type: i6.MultiSelect, selector: "p-multiSelect", inputs: ["id", "ariaLabel", "style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "variant", "appendTo", "dataKey", "name", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "loading", "virtualScrollItemSize", "loadingIcon", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "showClear", "autofocus", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "defaultLabel", "placeholder", "options", "filterValue", "itemSize", "selectAll", "focusOnHover", "filterFields", "selectOnFocus", "autoOptionFocus"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad", "onRemove", "onSelectAllChange"] }, { kind: "component", type: i7.EditableGridComponent, selector: "Tsi-Generic-Editable-Grid", inputs: ["selectedItems", "configuration", "key", "items", "events", "showAddButton", "showDeleteButton", "showEditButton", "showRowSummary", "scrollHeight", "rowPerPage", "pageSize", "columns", "gridData", "isTableLoading", "parent", "showSaveButton", "showActionColumn", "enableRowDisabling", "rowSummaryConfig", "showHaveSumary", "showRowSumary", "selectKeyOnly", "selectionMode", "showConsultButton", "disabled", "editableGridBusinessClass", "orderColumn", "deleteLineButtonDisabled", "id"], outputs: ["itemsSave", "refreshEventEmitter", "saveDataEventEmitter", "rowChangedEventEmitter", "selectedRowEventEmitter", "addedRowEventEmitter", "focusOutEventEmitter", "cellChanged", "rowDeletedEventEmitter", "selectedItemsChange", "onRowSelect", "focusOutRow", "onConsultClicked"] }, { kind: "component", type: i8.TsiSearchComboComponent, selector: "Tsi-Search-Combo", inputs: ["elementSourceUrl", "listSourceUrl", "listSourceParams", "id-field", "label-field", "multiple", "sort", "showClear", "reloadDataSource", "isFiltered", "selectedLabel", "maxWidth", "businessClass", "comboType", "statusMetadata", "currentRowItem", "datasource", "bind", "maxSelectedLabels", "tooltipMaxDisplayedItems", "showSearchButton", "showAddButton", "showConsultButton", "showUpdateButton"], outputs: ["bindChange", "datasource-loaded", "init", "isLoaded", "selectedLabelChange", "onClick", "onSearchButtonClick"] }, { kind: "component", type: i9.TsiCheckboxComponent, selector: "Tsi-CheckBox", inputs: ["class", "isBinary", "checked", "tooltipText", "tooltipPosition"], outputs: ["inputFieldChange", "checkedChange"] }, { kind: "component", type: i10.TsiTextBoxComponent, selector: "Tsi-Text-Box", inputs: ["textBoxType", "autocomplete"], outputs: ["newItemEvent", "inputFieldChange"] }, { kind: "component", type: i11.TsiLabelComponent, selector: "Tsi-Label", inputs: ["labelValue", "styleClass", "infoText"] }, { kind: "component", type: i12.TsiViewGridComponent, selector: "tsi-view-grid", inputs: ["columns", "gridConfiguration", "viewComponent", "crudService", "header", "modalSize", "showConsultButton", "showSearchField", "searchFields", "formEndpoint", "formName", "id", "showImportExportButton", "targetBusinessClass", "getDataFromApi", "gridData", "isSearchButtonDisabled", "selectKeyOnly", "selectionMode", "selectedItems", "key", "showGlobalSearch", "showExportButton", "showCalenderView", "calenderSchema", "showHeaderFilters", "showFilterButton", "selectAll", "checkedByField", "searchOnInit"], outputs: ["summariesChange", "selectedItemsChange", "buttonColumnClicked", "searchFieldsValueChanged", "getAllPagedResultChanged"] }, { kind: "component", type: i13.TsiModalFooterComponent, selector: "Tsi-Modal-Footer", inputs: ["cancelDisabled", "saveDisabled", "cancelLabel", "saveLabel", "isConsult", "isDuplicate", "isOnlyCreate", "additionalButtonLabel", "additionalButtonIcon", "additionalButtonDisabled", "showAdditionalButton"], outputs: ["onCancelClick", "onSaveClick", "onAdditionalButtonClick"] }, { kind: "component", type: i14.TsiModalHeaderComponent, selector: "Tsi-Modal-Header", inputs: ["inputTitle"], outputs: ["onCloseClick"] }, { kind: "component", type: i15.TsiFormComponent, selector: "tsi-form", inputs: ["class", "autocomplete", "optionalEndpoints", "disabled", "isLoading", "modalSize", "formEndpoint", "formName", "isReportingToolbarDisabled", "isCreateOnly"], outputs: ["onSave", "onSubmit", "onSubmitFormWorkflowConfiguration", "formRefChange", "onStatusChange"] }, { kind: "pipe", type: i16.LocalizePipe, name: "localize" }, { kind: "pipe", type: i17.ModalLabelPipe, name: "modalLabel" }] }); }
200
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: CreateOrEditEntityInformationsComponent, selector: "app-create-or-edit-entity-informations", providers: [...appProviders], usesInheritance: true, ngImport: i0, template: "<tsi-form class=\"form-horizontal\" autocomplete=\"off\" (onSubmit)=\"save()\" [isLoading]=\"isloading\">\r\n <Tsi-Modal-Header [inputTitle]=\"header | modalLabel : mode : 'administration_entityRelations_title' | localize\"\r\n (onCloseClick)=\"hide()\">\r\n </Tsi-Modal-Header>\r\n\r\n <div *ngIf=\"uid\" class=\"flex align-items-center gap-2 mb-2\">\r\n <span class=\"font-semibold\">{{'administration_gestionEntityInformation_uid' | localize}} :</span>\r\n <span>{{ uid }}</span>\r\n </div>\r\n\r\n <p-tabView>\r\n <p-tabPanel [header]=\"'administration_tab_entityInformation' | localize\">\r\n <fieldset [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n <div class=\"modal-body\">\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\" [labelValue]=\"'administration_gestionEntityInformation_className'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'ClassName'\"\r\n [(inputField)]=\"entityWithRelations.entity.className\"\r\n (inputFieldChange)=\"getColonnesByClassNameAsKeyValuePair($event)\"\r\n [disabled]=\"isDeleteMode() || isConsultMode() || isEditMode()\">\r\n </Tsi-Text-Box>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\" [labelValue]=\"'administration_gestionEntityInformation_formName'\"></Tsi-Label>\r\n <Tsi-Search-Combo class=\"col-8\" [datasource]=\"componentsOptions\"\r\n [(bind)]=\"entityWithRelations.entity.formName\" id-field=\"key\" label-field=\"value\" [showClear]=\"true\"\r\n [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n </Tsi-Search-Combo>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_listComponent'\"></Tsi-Label>\r\n <Tsi-Search-Combo class=\"col-8\" [datasource]=\"componentsOptions\"\r\n [(bind)]=\"entityWithRelations.entity.listComponent\" id-field=\"key\" label-field=\"value\"\r\n [showClear]=\"true\" [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n </Tsi-Search-Combo>\r\n\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\" [labelValue]=\"'administration_gestionEntityInformation_logged'\"></Tsi-Label>\r\n <Tsi-CheckBox class=\"col-8\" [inputName]=\"'Logged'\" [(inputField)]=\"entityWithRelations.entity.logged\">\r\n </Tsi-CheckBox>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\" [labelValue]=\"'administration_gestionEntityInformation_listRoute'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'ListRoute'\"\r\n [(inputField)]=\"entityWithRelations.entity.listRoute\">\r\n </Tsi-Text-Box>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\" [labelValue]=\"'administration_gestionEntityInformation_formRoute'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'FormRoute'\"\r\n [(inputField)]=\"entityWithRelations.entity.formRoute\">\r\n </Tsi-Text-Box>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_discriminatorPropertyName'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'DiscriminatorPropertyName'\"\r\n [(inputField)]=\"entityWithRelations.entity.discriminatorPropertyName\">\r\n </Tsi-Text-Box>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_discriminatorClassName'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'DiscriminatorClassName'\"\r\n [(inputField)]=\"entityWithRelations.entity.discriminatorClassName\">\r\n </Tsi-Text-Box>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_keyColumns'\"></Tsi-Label>\r\n <div class=\"col-8\">\r\n <p-multiSelect [options]=\"keyColumnOptions\" [(ngModel)]=\"entityWithRelations.entity.keyColumns\"\r\n optionValue=\"key\" optionLabel=\"value\" display=\"chip\" defaultLabel=\"Select columns\" [filter]=\"true\">\r\n </p-multiSelect>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_statusColumnName'\"></Tsi-Label>\r\n \r\n <Tsi-Search-Combo class=\"col-6\" [datasource]=\"keyColumnOptions\"\r\n [(bind)]=\"entityWithRelations.entity.statusColumnName\" id-field=\"key\" label-field=\"value\"\r\n [showClear]=\"true\" [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n </Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_isWorkflow'\"></Tsi-Label>\r\n <Tsi-CheckBox class=\"col-8\" [inputName]=\"'IsWorkflow'\"\r\n [(inputField)]=\"entityWithRelations.entity.isWorkflow\">\r\n </Tsi-CheckBox>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_defaultStatus'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'DefaultStatus'\"\r\n [(inputField)]=\"entityWithRelations.entity.defaultStatus\">\r\n </Tsi-Text-Box>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_statusEnumName'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'StatusEnumName'\"\r\n [(inputField)]=\"entityWithRelations.entity.statusEnumName\">\r\n </Tsi-Text-Box>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_advancedSearchComponent'\"></Tsi-Label>\r\n <Tsi-Search-Combo class=\"col-8\" [datasource]=\"componentsOptions\"\r\n [(bind)]=\"entityWithRelations.entity.advancedSearchComponent\" id-field=\"key\" label-field=\"value\"\r\n [showClear]=\"true\" [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n </Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"grid\">\r\n <div class=\"col-4\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-6\"\r\n [labelValue]=\"'administration_gestionEntityInformation_cardHeaderPhotoColumn'\"></Tsi-Label>\r\n\r\n <Tsi-Search-Combo class=\"col-6\" [datasource]=\"keyColumnOptions\"\r\n [(bind)]=\"entityWithRelations.entity.cardHeaderPhotoColumn\" id-field=\"key\" label-field=\"value\"\r\n [showClear]=\"true\" [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n </Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-4\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-6\"\r\n [labelValue]=\"'administration_gestionEntityInformation_cardTitleColumn'\"></Tsi-Label>\r\n \r\n <Tsi-Search-Combo class=\"col-6\" [datasource]=\"keyColumnOptions\"\r\n [(bind)]=\"entityWithRelations.entity.cardTitleColumn\" id-field=\"key\" label-field=\"value\"\r\n [showClear]=\"true\" [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n </Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n <div class=\"col-4\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-6\"\r\n [labelValue]=\"'administration_gestionEntityInformation_cardSubHeaderColumn'\"></Tsi-Label>\r\n <Tsi-Search-Combo class=\"col-6\" [datasource]=\"keyColumnOptions\"\r\n [(bind)]=\"entityWithRelations.entity.cardSubHeaderColumn\" id-field=\"key\" label-field=\"value\"\r\n [showClear]=\"true\" [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n </Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-12\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-2\"\r\n [labelValue]=\"'administration_gestionEntityInformation_cardDescriptionColumn'\"></Tsi-Label>\r\n <Tsi-Search-Combo class=\"col-6\" [datasource]=\"keyColumnOptions\"\r\n [(bind)]=\"entityWithRelations.entity.cardDescriptionColumn\" id-field=\"key\" label-field=\"value\"\r\n [showClear]=\"true\" [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n </Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </fieldset>\r\n </p-tabPanel>\r\n <p-tabPanel [header]=\"'administration_tab_relations' | localize\">\r\n <div class=\"grid\">\r\n <Tsi-Generic-Editable-Grid [columns]=\"entitiesRelationsColumns\" [gridData]=\"entityWithRelations.relations\"\r\n [parent]=\"this\" (addedRowEventEmitter)=\"onAddRelation()\" [showAddButton]=\"isEditMode()\">\r\n </Tsi-Generic-Editable-Grid>\r\n </div>\r\n </p-tabPanel>\r\n <p-tabPanel [header]=\"'administration_tab_permissions' | localize\">\r\n <div class=\"grid\">\r\n <tsi-view-grid [header]=\"entityWithRelations.entity.className ?? ''\" class=\"col-12 mb-3\"\r\n [columns]=\"permissionsGridColumns\" [getDataFromApi]=\"false\" [gridData]=\"endpointInfos\">\r\n </tsi-view-grid>\r\n </div>\r\n </p-tabPanel>\r\n <p-tabPanel [header]=\"'administration_tab_properties' | localize\">\r\n <div class=\"grid\">\r\n <tsi-view-grid [header]=\"'administration_properties_title' | localize\" class=\"col-12 mb-3\"\r\n [columns]=\"propertiesGridColumns\" [getDataFromApi]=\"false\" [gridData]=\"propertiesData\">\r\n </tsi-view-grid>\r\n </div>\r\n </p-tabPanel>\r\n </p-tabView>\r\n \r\n <Tsi-Modal-Footer [isConsult]=\"isConsultMode()\" [cancelDisabled]=\"saving\" [saveDisabled]=\"isSubmitDisabled()\"\r\n (onCancelClick)=\"hide()\">\r\n </Tsi-Modal-Footer>\r\n</tsi-form>", styles: [""], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.TabView, selector: "p-tabView", inputs: ["style", "styleClass", "controlClose", "scrollable", "activeIndex", "selectOnFocus", "nextButtonAriaLabel", "prevButtonAriaLabel", "autoHideButtons", "tabindex"], outputs: ["onChange", "onClose", "activeIndexChange"] }, { kind: "component", type: i5.TabPanel, selector: "p-tabPanel", inputs: ["closable", "headerStyle", "headerStyleClass", "cache", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "selected", "disabled", "header", "leftIcon", "rightIcon"] }, { kind: "component", type: i6.MultiSelect, selector: "p-multiSelect", inputs: ["id", "ariaLabel", "style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "variant", "appendTo", "dataKey", "name", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "loading", "virtualScrollItemSize", "loadingIcon", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "showClear", "autofocus", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "defaultLabel", "placeholder", "options", "filterValue", "itemSize", "selectAll", "focusOnHover", "filterFields", "selectOnFocus", "autoOptionFocus"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad", "onRemove", "onSelectAllChange"] }, { kind: "component", type: i7.EditableGridComponent, selector: "Tsi-Generic-Editable-Grid", inputs: ["selectedItems", "configuration", "key", "items", "events", "showAddButton", "showDeleteButton", "showEditButton", "showRowSummary", "scrollHeight", "rowPerPage", "pageSize", "columns", "gridData", "isTableLoading", "parent", "showSaveButton", "showActionColumn", "enableRowDisabling", "rowSummaryConfig", "showHaveSumary", "showRowSumary", "selectKeyOnly", "selectionMode", "showConsultButton", "disabled", "editableGridBusinessClass", "orderColumn", "deleteLineButtonDisabled", "id"], outputs: ["itemsSave", "refreshEventEmitter", "saveDataEventEmitter", "rowChangedEventEmitter", "selectedRowEventEmitter", "addedRowEventEmitter", "focusOutEventEmitter", "cellChanged", "rowDeletedEventEmitter", "selectedItemsChange", "onRowSelect", "focusOutRow", "onConsultClicked"] }, { kind: "component", type: i8.TsiSearchComboComponent, selector: "Tsi-Search-Combo", inputs: ["elementSourceUrl", "listSourceUrl", "listSourceParams", "id-field", "label-field", "multiple", "sort", "showClear", "reloadDataSource", "isFiltered", "selectedLabel", "maxWidth", "businessClass", "comboType", "statusMetadata", "currentRowItem", "datasource", "bind", "maxSelectedLabels", "tooltipMaxDisplayedItems", "showSearchButton", "showAddButton", "showConsultButton", "showUpdateButton"], outputs: ["bindChange", "datasource-loaded", "init", "isLoaded", "selectedLabelChange", "onClick", "onSearchButtonClick"] }, { kind: "component", type: i9.TsiCheckboxComponent, selector: "Tsi-CheckBox", inputs: ["class", "isBinary", "checked", "tooltipText", "tooltipPosition"], outputs: ["inputFieldChange", "checkedChange"] }, { kind: "component", type: i10.TsiTextBoxComponent, selector: "Tsi-Text-Box", inputs: ["textBoxType", "autocomplete"], outputs: ["newItemEvent", "inputFieldChange"] }, { kind: "component", type: i11.TsiLabelComponent, selector: "Tsi-Label", inputs: ["labelValue", "styleClass", "infoText"] }, { kind: "component", type: i12.TsiViewGridComponent, selector: "tsi-view-grid", inputs: ["columns", "gridConfiguration", "viewComponent", "crudService", "header", "modalSize", "showConsultButton", "showSearchField", "searchFields", "formEndpoint", "formName", "id", "showImportExportButton", "targetBusinessClass", "getDataFromApi", "gridData", "isSearchButtonDisabled", "selectKeyOnly", "selectionMode", "selectedItems", "key", "showGlobalSearch", "showExportButton", "showCalenderView", "calenderSchema", "showHeaderFilters", "showFilterButton", "selectAll", "checkedByField", "sortMode", "searchOnInit"], outputs: ["summariesChange", "selectedItemsChange", "buttonColumnClicked", "searchFieldsValueChanged", "getAllPagedResultChanged"] }, { kind: "component", type: i13.TsiModalFooterComponent, selector: "Tsi-Modal-Footer", inputs: ["cancelDisabled", "saveDisabled", "cancelLabel", "saveLabel", "isConsult", "isDuplicate", "isOnlyCreate", "additionalButtonLabel", "additionalButtonIcon", "additionalButtonDisabled", "showAdditionalButton"], outputs: ["onCancelClick", "onSaveClick", "onAdditionalButtonClick"] }, { kind: "component", type: i14.TsiModalHeaderComponent, selector: "Tsi-Modal-Header", inputs: ["inputTitle"], outputs: ["onCloseClick"] }, { kind: "component", type: i15.TsiFormComponent, selector: "tsi-form", inputs: ["class", "autocomplete", "optionalEndpoints", "disabled", "isLoading", "modalSize", "formEndpoint", "formName", "isReportingToolbarDisabled", "isCreateOnly"], outputs: ["onSave", "onSubmit", "onSubmitFormWorkflowConfiguration", "formRefChange", "onStatusChange"] }, { kind: "pipe", type: i16.LocalizePipe, name: "localize" }, { kind: "pipe", type: i17.ModalLabelPipe, name: "modalLabel" }] }); }
201
201
  }
202
202
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CreateOrEditEntityInformationsComponent, decorators: [{
203
203
  type: Component,
@@ -481,7 +481,7 @@ export class ManageImportExportComponent extends TsiFormComponentBaseComponent {
481
481
  }
482
482
  }
483
483
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ManageImportExportComponent, deps: [{ token: i1.ModeleImportService }, { token: i1.TsiConfirmationService }, { token: i1.TsiNotificationService }, { token: i2.DynamicDialogConfig }, { token: i1.TsiModalService }, { token: i1.ErrorResponseManagerService }, { token: i2.DynamicDialogRef }], target: i0.ɵɵFactoryTarget.Component }); }
484
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ManageImportExportComponent, selector: "app-manage-import-export", providers: [...appProviders], viewQueries: [{ propertyName: "gridComponent", first: true, predicate: TsiViewGridComponent, descendants: true }, { propertyName: "fileUploader", first: true, predicate: ["fileUpload"], descendants: true }, { propertyName: "viewGridComponent", first: true, predicate: ["viewGrid"], descendants: true }, { propertyName: "importFileToExecuteFileUpload", first: true, predicate: ["importFileToExecuteFileUpload"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<p-tabView>\r\n <p-tabPanel [header]=\"'shared_execute_import_model_import_export' | localize\" class=\"pt-3 px-2\">\r\n <div class=\"card\">\r\n <div *busy=\"isloading\"></div>\r\n <div class=\"grid\">\r\n <div class=\"grid col-10\">\r\n <div>\r\n <Tsi-Label class=\"col-2\" [labelValue]=\"'shared_reporting_form'\">\r\n </Tsi-Label>\r\n <!-- <p-dropdown class=\"col-10 tsi-component\" class=\"tsi-component\" styleClass=\"tsi-component\" appendTp=\"body\"\r\n optionLabel=\"value\" optionValue=\"key\" [filter]=\"true\"\r\n filterBy=\"value\" [showClear]=\"true\" placeholder=\"{{'shared_reporting_select_form' | localize}}\"\r\n [disabled]=\"true\">\r\n </p-dropdown> -->\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <p-toolbar styleClass=\"mb-4 gap-2\">\r\n <ng-template pTemplate=\"left\">\r\n <Tsi-Button [text]=\"'shared_reporting_add_report' | localize\"\r\n icon=\"p-button-icon p-button-icon-left pi pi-plus\"\r\n styleClass=\"p-element p-button-success mr-2 p-button p-component ng-star-inserted p-button-label\"\r\n (click)=\"openModal()\"></Tsi-Button>\r\n </ng-template>\r\n <ng-template pTemplate=\"right\">\r\n <p-fileUpload #fileUpload name=\"demo[]\" (onBeforeUpload)=\"onImportFile($event)\"\r\n (onSelect)=\"onFileSelected($event)\" (onClear)=\"onClear($event)\" (onRemove)=\"onRemove($event)\"\r\n [multiple]=\"false\" accept=\"application/json\" [maxFileSize]=\"1000000\"\r\n [invalidFileSizeMessageSummary]=\"'shared_file_upload_invalid_file_size_message_summary' | localize\"\r\n [invalidFileSizeMessageDetail]=\"'shared_file_upload_invalid_file_size_message_detail' | localize\"\r\n [invalidFileTypeMessageSummary]=\"'shared_file_upload_invalid_file_type_message_summary' | localize\"\r\n [invalidFileLimitMessageDetail]=\"'shared_file_upload_invalid_file_limit_message_detail' | localize\"\r\n [invalidFileLimitMessageSummary]=\"'shared_file_upload_invalid_file_limit_message_summary' | localize\"\r\n [invalidFileTypeMessageDetail]=\"'shared_file_upload_invalid_file_type_message_detail' | localize\"\r\n [chooseIcon]=\"'pi pi-paperclip'\" cancelStyleClass=\"p-button-secondary\" uploadStyleClass=\"p-button-help\"\r\n removeStyleClass=\"p-button-danger\" [chooseLabel]=\"'shared_reporting_choose_report_file' | localize\"\r\n [uploadLabel]=\"'shared_reporting_import_report' | localize\"\r\n [cancelLabel]=\"'shared_reporting_cancel_choose_report_file' | localize\">\r\n <ng-template *ngIf=\"toUploadFileData\" pTemplate=\"fileupload-content\" let-files>\r\n <div *ngIf=\"files?.length\">\r\n <strong>{{ files[0].name }}</strong>\r\n </div>\r\n </ng-template>\r\n </p-fileUpload>\r\n </ng-template>\r\n </p-toolbar>\r\n\r\n <tsi-view-grid #viewGrid [header]=\"'shared_execute_import_model_import_export' |localize\"\r\n [searchFields]=\"searchFields\" [showConsultButton]=\"false\" [getDataFromApi]=\"true\"\r\n [crudService]=\"modeleImportService\" (buttonColumnClicked)=\"buttonClicked($event)\"\r\n [formName]=\"'app-manage-import-export'\" [columns]=\"columns\" key=\"uid\" [selectKeyOnly]=\"false\">\r\n </tsi-view-grid>\r\n </div>\r\n </p-tabPanel>\r\n\r\n <p-tabPanel [header]=\"'shared_execute_import_model_import_export_default' | localize\" class=\"pt-3 px-2\">\r\n <div class=\"grid\">\r\n <tsi-view-grid class=\"col-12\" [header]=\"'shared_execute_import_model_import_export_default' |localize\"\r\n [columns]=\"columnsJson\" [getDataFromApi]=\"false\" [gridData]=\"gridData\" [key]=\"key\"\r\n [formName]=\"'modele-import-par-default'\"\r\n (buttonColumnClicked)=\"handleButtonColumnExecuteClicked($event)\"></tsi-view-grid>\r\n </div>\r\n </p-tabPanel>\r\n\r\n <p-tabPanel [header]=\"'shared_execute_import_history' | localize\" class=\"pt-3 px-2\">\r\n <div class=\"grid\">\r\n <tsi-view-grid class=\"col-12\" [header]=\"'shared_execute_import_history' |localize\" [columns]=\"columnsHistory\"\r\n [getDataFromApi]=\"false\" [gridData]=\"historyGridData\" [key]=\"importHistoryKey\"\r\n [formName]=\"'modele-import-par-default'\"\r\n (buttonColumnClicked)=\"handleButtonColumnExecuteClicked($event)\"></tsi-view-grid>\r\n </div>\r\n </p-tabPanel>\r\n\r\n <p-tabPanel [header]=\"'shared_execute_import_without_model' | localize\" class=\"pt-3 px-2\">\r\n <div *busy=\"isloading\"></div>\r\n <ng-template pTemplate=\"body\">\r\n <p-fileUpload #importFileToReportFileUpload name=\"importFileToReport\" [multiple]=\"false\"\r\n (onSelect)=\"onImportFileWithoutModel_FileSelected($event)\" (onClear)=\"onImportFileWithoutModel_Clear($event)\"\r\n (onBeforeUpload)=\"onImportFileWithoutModel_ImportFile($event)\"\r\n (onRemove)=\"onImportFileWithoutModel_Remove($event)\" accept=\".xls,.xlsx\" [maxFileSize]=\"10000000\"\r\n [invalidFileSizeMessageSummary]=\"'shared_file_upload_invalid_file_size_message_summary' | localize\"\r\n [invalidFileSizeMessageDetail]=\"'shared_file_upload_invalid_file_size_message_detail' | localize\"\r\n [invalidFileTypeMessageSummary]=\"'shared_file_upload_invalid_file_type_message_summary' | localize\"\r\n [invalidFileLimitMessageDetail]=\"'shared_file_upload_invalid_file_limit_message_detail' | localize\"\r\n [invalidFileLimitMessageSummary]=\"'shared_file_upload_invalid_file_limit_message_summary' | localize\"\r\n [invalidFileTypeMessageDetail]=\"'shared_file_upload_invalid_file_type_message_detail' | localize\"\r\n [chooseIcon]=\"'pi pi-paperclip'\" cancelStyleClass=\"p-button-secondary\" uploadStyleClass=\"p-button-help\"\r\n removeStyleClass=\"p-button-danger\" [chooseLabel]=\"'shared_reporting_choose_report_file' | localize\"\r\n [uploadLabel]=\"'shared_reporting_import_report' | localize\"\r\n [cancelLabel]=\"'shared_reporting_cancel_choose_report_file' | localize\">\r\n <ng-template *ngIf=\"toUploadWithoutModel\" pTemplate=\"fileupload-content\" let-files>\r\n <div *ngIf=\"files?.length\">\r\n <strong>{{ files[0].name }}</strong>\r\n </div>\r\n </ng-template>\r\n </p-fileUpload>\r\n </ng-template>\r\n </p-tabPanel>\r\n\r\n <p-tabPanel [header]=\"'shared_import_result_header' | localize\" class=\"pt-3 px-2\">\r\n\r\n <div class=\"p-1\">\r\n <Tsi-Button (onClick)=\"getImportResult()\"\r\n styleClass=\"p-element p-button-text p-button-raised p-button-rounded mr-2 p-button p-component p-button-icon-only\"\r\n [tooltipText]=\"'shared_import_export_refresh'\" [tooltipPosition]=\"tooltipPosition.Top\"\r\n icon=\"p-button-icon pi pi-refresh\" class=\"p-button-text p-button-raised p-button-rounded mr-2\"></Tsi-Button>\r\n </div>\r\n\r\n <div class=\"grid\">\r\n <tsi-view-grid class=\"col-12\" [header]=\"'shared_import_result_header' |localize\" [columns]=\"importResultsColumns\"\r\n [getDataFromApi]=\"false\" [gridData]=\"importResultData\" [key]=\"'uid'\" [formName]=\"'modele-import-result-import'\"\r\n (buttonColumnClicked)=\"handleConsultImportResultButtonClicked($event)\"></tsi-view-grid>\r\n </div>\r\n </p-tabPanel>\r\n\r\n</p-tabView>\r\n\r\n<div class=\"p-1\">\r\n <Tsi-Button\r\n styleClass=\"p-element p-button-text p-button-raised p-button-rounded mr-2 p-button p-component p-button-icon-only\"\r\n [tooltipText]=\"'shared_import_export_refresh'\" [tooltipPosition]=\"tooltipPosition.Top\"\r\n icon=\"p-button-icon pi pi-refresh\" (onClick)=\"refreshImportExportData()\"\r\n class=\"p-button-text p-button-raised p-button-rounded mr-2\"></Tsi-Button>\r\n</div>\r\n\r\n<!-- dialog to import file to report -->\r\n<p-dialog header=\"{{'shared_reporting_select_file_to_import_into_report' | localize}}\"\r\n [(visible)]=\"isImportFileToExecuteVisible\" [style]=\"{width: '50vw'}\">\r\n <!-- <Tsi-Modal-Header (onCloseClick)=\"onImportFileToReportModalCancelClick()\" [inputTitle]=\"'shared_reporting_select_file_to_import_into_report'\"></Tsi-Modal-Header> -->\r\n\r\n <ng-template pTemplate=\"body\">\r\n <p-fileUpload #importFileToReportFileUpload name=\"importFileToReport\" [multiple]=\"false\"\r\n (onSelect)=\"onImportFileToExecute_FileSelected($event)\" (onClear)=\"onImportFileToExecute_Clear($event)\"\r\n (onBeforeUpload)=\"onImportFileToExecute_ImportFile($event)\" (onRemove)=\"onImportFileToExecute_Remove($event)\"\r\n accept=\"{{fileType}}\" [maxFileSize]=\"10000000\"\r\n [invalidFileSizeMessageSummary]=\"'shared_file_upload_invalid_file_size_message_summary' | localize\"\r\n [invalidFileSizeMessageDetail]=\"'shared_file_upload_invalid_file_size_message_detail' | localize\"\r\n [invalidFileTypeMessageSummary]=\"'shared_file_upload_invalid_file_type_message_summary' | localize\"\r\n [invalidFileLimitMessageDetail]=\"'shared_file_upload_invalid_file_limit_message_detail' | localize\"\r\n [invalidFileLimitMessageSummary]=\"'shared_file_upload_invalid_file_limit_message_summary' | localize\"\r\n [invalidFileTypeMessageDetail]=\"'shared_file_upload_invalid_file_type_message_detail' | localize\"\r\n [chooseIcon]=\"'pi pi-paperclip'\" cancelStyleClass=\"p-button-secondary\" uploadStyleClass=\"p-button-help\"\r\n removeStyleClass=\"p-button-danger\" [chooseLabel]=\"'shared_reporting_choose_report_file' | localize\"\r\n [uploadLabel]=\"'shared_reporting_import_report' | localize\"\r\n [cancelLabel]=\"'shared_reporting_cancel_choose_report_file' | localize\">\r\n <ng-template *ngIf=\"toUploadToExecuteFile\" pTemplate=\"fileupload-content\" let-files>\r\n <div *ngIf=\"files?.length\">\r\n <strong>{{ files[0].name }}</strong>\r\n </div>\r\n </ng-template>\r\n </p-fileUpload>\r\n </ng-template>\r\n\r\n\r\n <!-- <Tsi-Modal-Footer (onCancelClick)=\"onImportFileToReportModalCancelClick()\"\r\n (onSaveClick)=\"onImportFileToReportModalSaveClick()\"\r\n [saveDisabled]=\"!toUploadToUpdateReportFileData\"></Tsi-Modal-Footer> -->\r\n\r\n</p-dialog>", styles: ["::ng-deep .p-fileupload-choose input{display:none!important}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i5.Toolbar, selector: "p-toolbar", inputs: ["style", "styleClass", "ariaLabelledBy"] }, { kind: "component", type: i6.Dialog, selector: "p-dialog", inputs: ["header", "draggable", "resizable", "positionLeft", "positionTop", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "responsive", "appendTo", "breakpoints", "styleClass", "maskStyleClass", "maskStyle", "showHeader", "breakpoint", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "closeIcon", "closeAriaLabel", "closeTabindex", "minimizeIcon", "maximizeIcon", "visible", "style", "position"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }, { kind: "component", type: i7.TabView, selector: "p-tabView", inputs: ["style", "styleClass", "controlClose", "scrollable", "activeIndex", "selectOnFocus", "nextButtonAriaLabel", "prevButtonAriaLabel", "autoHideButtons", "tabindex"], outputs: ["onChange", "onClose", "activeIndexChange"] }, { kind: "component", type: i7.TabPanel, selector: "p-tabPanel", inputs: ["closable", "headerStyle", "headerStyleClass", "cache", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "selected", "disabled", "header", "leftIcon", "rightIcon"] }, { kind: "component", type: i8.FileUpload, selector: "p-fileUpload", inputs: ["name", "url", "method", "multiple", "accept", "disabled", "auto", "withCredentials", "maxFileSize", "invalidFileSizeMessageSummary", "invalidFileSizeMessageDetail", "invalidFileTypeMessageSummary", "invalidFileTypeMessageDetail", "invalidFileLimitMessageDetail", "invalidFileLimitMessageSummary", "style", "styleClass", "previewWidth", "chooseLabel", "uploadLabel", "cancelLabel", "chooseIcon", "uploadIcon", "cancelIcon", "showUploadButton", "showCancelButton", "mode", "headers", "customUpload", "fileLimit", "uploadStyleClass", "cancelStyleClass", "removeStyleClass", "chooseStyleClass", "files"], outputs: ["onBeforeUpload", "onSend", "onUpload", "onError", "onClear", "onRemove", "onSelect", "onProgress", "uploadHandler", "onImageError", "onRemoveUploadedFile"] }, { kind: "component", type: i9.TsiLabelComponent, selector: "Tsi-Label", inputs: ["labelValue", "styleClass", "infoText"] }, { kind: "component", type: i10.TsiViewGridComponent, selector: "tsi-view-grid", inputs: ["columns", "gridConfiguration", "viewComponent", "crudService", "header", "modalSize", "showConsultButton", "showSearchField", "searchFields", "formEndpoint", "formName", "id", "showImportExportButton", "targetBusinessClass", "getDataFromApi", "gridData", "isSearchButtonDisabled", "selectKeyOnly", "selectionMode", "selectedItems", "key", "showGlobalSearch", "showExportButton", "showCalenderView", "calenderSchema", "showHeaderFilters", "showFilterButton", "selectAll", "checkedByField", "searchOnInit"], outputs: ["summariesChange", "selectedItemsChange", "buttonColumnClicked", "searchFieldsValueChanged", "getAllPagedResultChanged"] }, { kind: "component", type: i11.TsiButtonComponent, selector: "Tsi-Button", inputs: ["disabled", "text", "style", "tooltipText", "tooltipPosition", "buttonType", "icon", "styleClass", "iconSrc", "id", "iconWidth", "iconClass"], outputs: ["onClick", "rightClick"] }, { kind: "directive", type: i12.BusyDirective, selector: "[busy]", inputs: ["busy"] }, { kind: "pipe", type: i13.LocalizePipe, name: "localize" }] }); }
484
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ManageImportExportComponent, selector: "app-manage-import-export", providers: [...appProviders], viewQueries: [{ propertyName: "gridComponent", first: true, predicate: TsiViewGridComponent, descendants: true }, { propertyName: "fileUploader", first: true, predicate: ["fileUpload"], descendants: true }, { propertyName: "viewGridComponent", first: true, predicate: ["viewGrid"], descendants: true }, { propertyName: "importFileToExecuteFileUpload", first: true, predicate: ["importFileToExecuteFileUpload"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<p-tabView>\r\n <p-tabPanel [header]=\"'shared_execute_import_model_import_export' | localize\" class=\"pt-3 px-2\">\r\n <div class=\"card\">\r\n <div *busy=\"isloading\"></div>\r\n <div class=\"grid\">\r\n <div class=\"grid col-10\">\r\n <div>\r\n <Tsi-Label class=\"col-2\" [labelValue]=\"'shared_reporting_form'\">\r\n </Tsi-Label>\r\n <!-- <p-dropdown class=\"col-10 tsi-component\" class=\"tsi-component\" styleClass=\"tsi-component\" appendTp=\"body\"\r\n optionLabel=\"value\" optionValue=\"key\" [filter]=\"true\"\r\n filterBy=\"value\" [showClear]=\"true\" placeholder=\"{{'shared_reporting_select_form' | localize}}\"\r\n [disabled]=\"true\">\r\n </p-dropdown> -->\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <p-toolbar styleClass=\"mb-4 gap-2\">\r\n <ng-template pTemplate=\"left\">\r\n <Tsi-Button [text]=\"'shared_reporting_add_report' | localize\"\r\n icon=\"p-button-icon p-button-icon-left pi pi-plus\"\r\n styleClass=\"p-element p-button-success mr-2 p-button p-component ng-star-inserted p-button-label\"\r\n (click)=\"openModal()\"></Tsi-Button>\r\n </ng-template>\r\n <ng-template pTemplate=\"right\">\r\n <p-fileUpload #fileUpload name=\"demo[]\" (onBeforeUpload)=\"onImportFile($event)\"\r\n (onSelect)=\"onFileSelected($event)\" (onClear)=\"onClear($event)\" (onRemove)=\"onRemove($event)\"\r\n [multiple]=\"false\" accept=\"application/json\" [maxFileSize]=\"1000000\"\r\n [invalidFileSizeMessageSummary]=\"'shared_file_upload_invalid_file_size_message_summary' | localize\"\r\n [invalidFileSizeMessageDetail]=\"'shared_file_upload_invalid_file_size_message_detail' | localize\"\r\n [invalidFileTypeMessageSummary]=\"'shared_file_upload_invalid_file_type_message_summary' | localize\"\r\n [invalidFileLimitMessageDetail]=\"'shared_file_upload_invalid_file_limit_message_detail' | localize\"\r\n [invalidFileLimitMessageSummary]=\"'shared_file_upload_invalid_file_limit_message_summary' | localize\"\r\n [invalidFileTypeMessageDetail]=\"'shared_file_upload_invalid_file_type_message_detail' | localize\"\r\n [chooseIcon]=\"'pi pi-paperclip'\" cancelStyleClass=\"p-button-secondary\" uploadStyleClass=\"p-button-help\"\r\n removeStyleClass=\"p-button-danger\" [chooseLabel]=\"'shared_reporting_choose_report_file' | localize\"\r\n [uploadLabel]=\"'shared_reporting_import_report' | localize\"\r\n [cancelLabel]=\"'shared_reporting_cancel_choose_report_file' | localize\">\r\n <ng-template *ngIf=\"toUploadFileData\" pTemplate=\"fileupload-content\" let-files>\r\n <div *ngIf=\"files?.length\">\r\n <strong>{{ files[0].name }}</strong>\r\n </div>\r\n </ng-template>\r\n </p-fileUpload>\r\n </ng-template>\r\n </p-toolbar>\r\n\r\n <tsi-view-grid #viewGrid [header]=\"'shared_execute_import_model_import_export' |localize\"\r\n [searchFields]=\"searchFields\" [showConsultButton]=\"false\" [getDataFromApi]=\"true\"\r\n [crudService]=\"modeleImportService\" (buttonColumnClicked)=\"buttonClicked($event)\"\r\n [formName]=\"'app-manage-import-export'\" [columns]=\"columns\" key=\"uid\" [selectKeyOnly]=\"false\">\r\n </tsi-view-grid>\r\n </div>\r\n </p-tabPanel>\r\n\r\n <p-tabPanel [header]=\"'shared_execute_import_model_import_export_default' | localize\" class=\"pt-3 px-2\">\r\n <div class=\"grid\">\r\n <tsi-view-grid class=\"col-12\" [header]=\"'shared_execute_import_model_import_export_default' |localize\"\r\n [columns]=\"columnsJson\" [getDataFromApi]=\"false\" [gridData]=\"gridData\" [key]=\"key\"\r\n [formName]=\"'modele-import-par-default'\"\r\n (buttonColumnClicked)=\"handleButtonColumnExecuteClicked($event)\"></tsi-view-grid>\r\n </div>\r\n </p-tabPanel>\r\n\r\n <p-tabPanel [header]=\"'shared_execute_import_history' | localize\" class=\"pt-3 px-2\">\r\n <div class=\"grid\">\r\n <tsi-view-grid class=\"col-12\" [header]=\"'shared_execute_import_history' |localize\" [columns]=\"columnsHistory\"\r\n [getDataFromApi]=\"false\" [gridData]=\"historyGridData\" [key]=\"importHistoryKey\"\r\n [formName]=\"'modele-import-par-default'\"\r\n (buttonColumnClicked)=\"handleButtonColumnExecuteClicked($event)\"></tsi-view-grid>\r\n </div>\r\n </p-tabPanel>\r\n\r\n <p-tabPanel [header]=\"'shared_execute_import_without_model' | localize\" class=\"pt-3 px-2\">\r\n <div *busy=\"isloading\"></div>\r\n <ng-template pTemplate=\"body\">\r\n <p-fileUpload #importFileToReportFileUpload name=\"importFileToReport\" [multiple]=\"false\"\r\n (onSelect)=\"onImportFileWithoutModel_FileSelected($event)\" (onClear)=\"onImportFileWithoutModel_Clear($event)\"\r\n (onBeforeUpload)=\"onImportFileWithoutModel_ImportFile($event)\"\r\n (onRemove)=\"onImportFileWithoutModel_Remove($event)\" accept=\".xls,.xlsx\" [maxFileSize]=\"10000000\"\r\n [invalidFileSizeMessageSummary]=\"'shared_file_upload_invalid_file_size_message_summary' | localize\"\r\n [invalidFileSizeMessageDetail]=\"'shared_file_upload_invalid_file_size_message_detail' | localize\"\r\n [invalidFileTypeMessageSummary]=\"'shared_file_upload_invalid_file_type_message_summary' | localize\"\r\n [invalidFileLimitMessageDetail]=\"'shared_file_upload_invalid_file_limit_message_detail' | localize\"\r\n [invalidFileLimitMessageSummary]=\"'shared_file_upload_invalid_file_limit_message_summary' | localize\"\r\n [invalidFileTypeMessageDetail]=\"'shared_file_upload_invalid_file_type_message_detail' | localize\"\r\n [chooseIcon]=\"'pi pi-paperclip'\" cancelStyleClass=\"p-button-secondary\" uploadStyleClass=\"p-button-help\"\r\n removeStyleClass=\"p-button-danger\" [chooseLabel]=\"'shared_reporting_choose_report_file' | localize\"\r\n [uploadLabel]=\"'shared_reporting_import_report' | localize\"\r\n [cancelLabel]=\"'shared_reporting_cancel_choose_report_file' | localize\">\r\n <ng-template *ngIf=\"toUploadWithoutModel\" pTemplate=\"fileupload-content\" let-files>\r\n <div *ngIf=\"files?.length\">\r\n <strong>{{ files[0].name }}</strong>\r\n </div>\r\n </ng-template>\r\n </p-fileUpload>\r\n </ng-template>\r\n </p-tabPanel>\r\n\r\n <p-tabPanel [header]=\"'shared_import_result_header' | localize\" class=\"pt-3 px-2\">\r\n\r\n <div class=\"p-1\">\r\n <Tsi-Button (onClick)=\"getImportResult()\"\r\n styleClass=\"p-element p-button-text p-button-raised p-button-rounded mr-2 p-button p-component p-button-icon-only\"\r\n [tooltipText]=\"'shared_import_export_refresh'\" [tooltipPosition]=\"tooltipPosition.Top\"\r\n icon=\"p-button-icon pi pi-refresh\" class=\"p-button-text p-button-raised p-button-rounded mr-2\"></Tsi-Button>\r\n </div>\r\n\r\n <div class=\"grid\">\r\n <tsi-view-grid class=\"col-12\" [header]=\"'shared_import_result_header' |localize\" [columns]=\"importResultsColumns\"\r\n [getDataFromApi]=\"false\" [gridData]=\"importResultData\" [key]=\"'uid'\" [formName]=\"'modele-import-result-import'\"\r\n (buttonColumnClicked)=\"handleConsultImportResultButtonClicked($event)\"></tsi-view-grid>\r\n </div>\r\n </p-tabPanel>\r\n\r\n</p-tabView>\r\n\r\n<div class=\"p-1\">\r\n <Tsi-Button\r\n styleClass=\"p-element p-button-text p-button-raised p-button-rounded mr-2 p-button p-component p-button-icon-only\"\r\n [tooltipText]=\"'shared_import_export_refresh'\" [tooltipPosition]=\"tooltipPosition.Top\"\r\n icon=\"p-button-icon pi pi-refresh\" (onClick)=\"refreshImportExportData()\"\r\n class=\"p-button-text p-button-raised p-button-rounded mr-2\"></Tsi-Button>\r\n</div>\r\n\r\n<!-- dialog to import file to report -->\r\n<p-dialog header=\"{{'shared_reporting_select_file_to_import_into_report' | localize}}\"\r\n [(visible)]=\"isImportFileToExecuteVisible\" [style]=\"{width: '50vw'}\">\r\n <!-- <Tsi-Modal-Header (onCloseClick)=\"onImportFileToReportModalCancelClick()\" [inputTitle]=\"'shared_reporting_select_file_to_import_into_report'\"></Tsi-Modal-Header> -->\r\n\r\n <ng-template pTemplate=\"body\">\r\n <p-fileUpload #importFileToReportFileUpload name=\"importFileToReport\" [multiple]=\"false\"\r\n (onSelect)=\"onImportFileToExecute_FileSelected($event)\" (onClear)=\"onImportFileToExecute_Clear($event)\"\r\n (onBeforeUpload)=\"onImportFileToExecute_ImportFile($event)\" (onRemove)=\"onImportFileToExecute_Remove($event)\"\r\n accept=\"{{fileType}}\" [maxFileSize]=\"10000000\"\r\n [invalidFileSizeMessageSummary]=\"'shared_file_upload_invalid_file_size_message_summary' | localize\"\r\n [invalidFileSizeMessageDetail]=\"'shared_file_upload_invalid_file_size_message_detail' | localize\"\r\n [invalidFileTypeMessageSummary]=\"'shared_file_upload_invalid_file_type_message_summary' | localize\"\r\n [invalidFileLimitMessageDetail]=\"'shared_file_upload_invalid_file_limit_message_detail' | localize\"\r\n [invalidFileLimitMessageSummary]=\"'shared_file_upload_invalid_file_limit_message_summary' | localize\"\r\n [invalidFileTypeMessageDetail]=\"'shared_file_upload_invalid_file_type_message_detail' | localize\"\r\n [chooseIcon]=\"'pi pi-paperclip'\" cancelStyleClass=\"p-button-secondary\" uploadStyleClass=\"p-button-help\"\r\n removeStyleClass=\"p-button-danger\" [chooseLabel]=\"'shared_reporting_choose_report_file' | localize\"\r\n [uploadLabel]=\"'shared_reporting_import_report' | localize\"\r\n [cancelLabel]=\"'shared_reporting_cancel_choose_report_file' | localize\">\r\n <ng-template *ngIf=\"toUploadToExecuteFile\" pTemplate=\"fileupload-content\" let-files>\r\n <div *ngIf=\"files?.length\">\r\n <strong>{{ files[0].name }}</strong>\r\n </div>\r\n </ng-template>\r\n </p-fileUpload>\r\n </ng-template>\r\n\r\n\r\n <!-- <Tsi-Modal-Footer (onCancelClick)=\"onImportFileToReportModalCancelClick()\"\r\n (onSaveClick)=\"onImportFileToReportModalSaveClick()\"\r\n [saveDisabled]=\"!toUploadToUpdateReportFileData\"></Tsi-Modal-Footer> -->\r\n\r\n</p-dialog>", styles: ["::ng-deep .p-fileupload-choose input{display:none!important}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i5.Toolbar, selector: "p-toolbar", inputs: ["style", "styleClass", "ariaLabelledBy"] }, { kind: "component", type: i6.Dialog, selector: "p-dialog", inputs: ["header", "draggable", "resizable", "positionLeft", "positionTop", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "responsive", "appendTo", "breakpoints", "styleClass", "maskStyleClass", "maskStyle", "showHeader", "breakpoint", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "closeIcon", "closeAriaLabel", "closeTabindex", "minimizeIcon", "maximizeIcon", "visible", "style", "position"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }, { kind: "component", type: i7.TabView, selector: "p-tabView", inputs: ["style", "styleClass", "controlClose", "scrollable", "activeIndex", "selectOnFocus", "nextButtonAriaLabel", "prevButtonAriaLabel", "autoHideButtons", "tabindex"], outputs: ["onChange", "onClose", "activeIndexChange"] }, { kind: "component", type: i7.TabPanel, selector: "p-tabPanel", inputs: ["closable", "headerStyle", "headerStyleClass", "cache", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "selected", "disabled", "header", "leftIcon", "rightIcon"] }, { kind: "component", type: i8.FileUpload, selector: "p-fileUpload", inputs: ["name", "url", "method", "multiple", "accept", "disabled", "auto", "withCredentials", "maxFileSize", "invalidFileSizeMessageSummary", "invalidFileSizeMessageDetail", "invalidFileTypeMessageSummary", "invalidFileTypeMessageDetail", "invalidFileLimitMessageDetail", "invalidFileLimitMessageSummary", "style", "styleClass", "previewWidth", "chooseLabel", "uploadLabel", "cancelLabel", "chooseIcon", "uploadIcon", "cancelIcon", "showUploadButton", "showCancelButton", "mode", "headers", "customUpload", "fileLimit", "uploadStyleClass", "cancelStyleClass", "removeStyleClass", "chooseStyleClass", "files"], outputs: ["onBeforeUpload", "onSend", "onUpload", "onError", "onClear", "onRemove", "onSelect", "onProgress", "uploadHandler", "onImageError", "onRemoveUploadedFile"] }, { kind: "component", type: i9.TsiLabelComponent, selector: "Tsi-Label", inputs: ["labelValue", "styleClass", "infoText"] }, { kind: "component", type: i10.TsiViewGridComponent, selector: "tsi-view-grid", inputs: ["columns", "gridConfiguration", "viewComponent", "crudService", "header", "modalSize", "showConsultButton", "showSearchField", "searchFields", "formEndpoint", "formName", "id", "showImportExportButton", "targetBusinessClass", "getDataFromApi", "gridData", "isSearchButtonDisabled", "selectKeyOnly", "selectionMode", "selectedItems", "key", "showGlobalSearch", "showExportButton", "showCalenderView", "calenderSchema", "showHeaderFilters", "showFilterButton", "selectAll", "checkedByField", "sortMode", "searchOnInit"], outputs: ["summariesChange", "selectedItemsChange", "buttonColumnClicked", "searchFieldsValueChanged", "getAllPagedResultChanged"] }, { kind: "component", type: i11.TsiButtonComponent, selector: "Tsi-Button", inputs: ["disabled", "text", "style", "tooltipText", "tooltipPosition", "buttonType", "icon", "styleClass", "iconSrc", "id", "iconWidth", "iconClass"], outputs: ["onClick", "rightClick"] }, { kind: "directive", type: i12.BusyDirective, selector: "[busy]", inputs: ["busy"] }, { kind: "pipe", type: i13.LocalizePipe, name: "localize" }] }); }
485
485
  }
486
486
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ManageImportExportComponent, decorators: [{
487
487
  type: Component,