@smarterplan/ngx-smarterplan-locations 0.4.19 → 0.4.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/README.md +24 -24
  2. package/esm2022/lib/components/carousel/carousel.component.mjs +3 -3
  3. package/esm2022/lib/components/chevron/chevron.component.mjs +3 -3
  4. package/esm2022/lib/components/detail-location/detail-location.component.mjs +40 -4
  5. package/esm2022/lib/components/form-location/form-location.component.mjs +3 -3
  6. package/esm2022/lib/components/images/images.component.mjs +3 -3
  7. package/esm2022/lib/components/landmark-picker/landmark-picker.component.mjs +3 -3
  8. package/esm2022/lib/components/locations/locations.component.mjs +19 -4
  9. package/esm2022/lib/components/locations/map/map-popup/map-popup.component.mjs +3 -3
  10. package/esm2022/lib/components/locations/map/map.component.mjs +3 -3
  11. package/esm2022/lib/components/models3d/models3d.component.mjs +295 -0
  12. package/esm2022/lib/components/plan-legend/plan-legend.component.mjs +3 -3
  13. package/esm2022/lib/components/plans/calibration/calibration.component.mjs +3 -3
  14. package/esm2022/lib/components/plans/edit-plan/edit-plan.component.mjs +3 -3
  15. package/esm2022/lib/components/plans/plans.component.mjs +3 -3
  16. package/esm2022/lib/components/tab-navigation/tab-navigation.component.mjs +3 -3
  17. package/esm2022/lib/components/visits/visits.component.mjs +45 -12
  18. package/esm2022/lib/components/zones/add-audio-zone/add-audio-zone.component.mjs +3 -3
  19. package/esm2022/lib/components/zones/add-zone/add-zone.component.mjs +3 -3
  20. package/esm2022/lib/components/zones/add-zone/selection/selection.component.mjs +3 -3
  21. package/esm2022/lib/components/zones/add-zone/sweep-plan-selection/sweep-plan-selection.component.mjs +3 -3
  22. package/esm2022/lib/components/zones/zones.component.mjs +3 -3
  23. package/esm2022/lib/helper.service.mjs +1 -1
  24. package/esm2022/lib/ngx-smarterplan-location-routing.module.mjs +3 -1
  25. package/esm2022/lib/ngx-smarterplan-locations.module.mjs +4 -1
  26. package/esm2022/lib/ngx-smarterplan-locations.service.mjs +1 -1
  27. package/esm2022/lib/pipes/count-audio-sweeps.pipe.mjs +1 -1
  28. package/esm2022/lib/radio-button/radio-button.component.mjs +3 -3
  29. package/esm2022/public-api.mjs +1 -1
  30. package/fesm2022/smarterplan-ngx-smarterplan-locations.mjs +424 -56
  31. package/fesm2022/smarterplan-ngx-smarterplan-locations.mjs.map +1 -1
  32. package/lib/components/detail-location/detail-location.component.d.ts +13 -0
  33. package/lib/components/locations/locations.component.d.ts +10 -0
  34. package/lib/components/locations/map/map.component.d.ts +2 -2
  35. package/lib/components/models3d/models3d.component.d.ts +84 -0
  36. package/lib/components/visits/visits.component.d.ts +8 -3
  37. package/lib/components/zones/add-zone/sweep-plan-selection/sweep-plan-selection.component.d.ts +0 -1
  38. package/lib/ngx-smarterplan-locations.module.d.ts +27 -26
  39. package/package.json +2 -2
@@ -231,11 +231,11 @@ export class FormLocationComponent {
231
231
  }
232
232
  }
233
233
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormLocationComponent, deps: [{ token: i1.SpaceService }, { token: i1.PropertyService }, { token: i1.BaseUserService }, { token: i2.UntypedFormBuilder }, { token: i1.MissionService }, { token: i1.LayerService }, { token: i1.ValidatorsService }], target: i0.ɵɵFactoryTarget.Component });
234
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FormLocationComponent, selector: "lib-form-location", inputs: { location: "location" }, outputs: { onChange: "onChange" }, viewQueries: [{ propertyName: "imageInputContainer", first: true, predicate: ["imageInputContainer"], descendants: true }, { propertyName: "imageInput", first: true, predicate: ["imageInput"], descendants: true }, { propertyName: "imageBasePreview", first: true, predicate: ["imageBasePreview"], descendants: true }], ngImport: i0, template: "<div class=\"col-md-6 form-new-loc\" *ngIf=\"form\">\r\n <form (ngSubmit)=\"onSubmit()\" [formGroup]=\"form\">\r\n\r\n <div class=\"mb-3 row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Name' | translate}} *</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" data-testid=\"new-location-name\" (ngModelChange)=\"onFormChange()\"\r\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['name'])|| isFormError(form.controls['name'])}\"\r\n required formControlName=\"name\">\r\n\r\n <div class=\"invalid-feedback\">\r\n <ngb-alert data-testid=\"new-location-name-invalid\" [dismissible]=\"false\" type=\"danger\" *ngIf=\"validatorsService.isControlError(form.controls['name']) \r\n || isFormError(form.controls['name'])\">\r\n {{validatorsService.getError(form.controls['name']) | translate}}\r\n </ngb-alert>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"mb-3 row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Address' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"addresses\" data-testid=\"new-location-address\" (ngModelChange)=\"onFormChange()\"\r\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['addresses']) || isFormError(form.controls['addresses'])}\">\r\n <div class=\"invalid-feedback\">\r\n <span data-testid=\"\" [translate]=\"validatorsService.getError(form.controls['addresses'])\"\r\n *ngIf=\" validatorsService.isControlError(form.controls['addresses'])\"></span>\r\n\r\n <ngb-alert data-testid=\"new-location-address-invalid\" [dismissible]=\"false\" type=\"danger\"\r\n *ngIf=\"validatorsService.isControlError(form.controls['addresses']) \">\r\n\r\n {{validatorsService.getError(form.controls['addresses']) | translate}}\r\n </ngb-alert>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3 row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Construction year' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"constructionYear\"\r\n data-testid=\"new-location-constructionYear\" (ngModelChange)=\"onFormChange()\"\r\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['constructionYear']) || isFormError(form.controls['constructionYear'])}\">\r\n <div class=\"invalid-feedback\">\r\n <ngb-alert data-testid=\"new-location-constructionYear-invalid\" [dismissible]=\"false\" type=\"danger\"\r\n *ngIf=\"validatorsService.isControlError(form.controls['constructionYear']) || isFormError(form.controls['constructionYear'])\">\r\n {{validatorsService.getError(form.controls['constructionYear']) | translate}}\r\n </ngb-alert>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3 row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Latitude' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"latitude\" data-testid=\"new-location-latitude\" (ngModelChange)=\"onFormChange()\"\r\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['latitude'])|| isFormError(form.controls['latitude'])}\">\r\n <div class=\"invalid-feedback\">\r\n <ngb-alert data-testid=\"new-location-latitude-invalid\" [dismissible]=\"false\" type=\"danger\"\r\n *ngIf=\"validatorsService.isControlError(form.controls['latitude']) || isFormError(form.controls['latitude'])\">\r\n {{validatorsService.getError(form.controls['latitude']) | translate}}\r\n </ngb-alert>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3 row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Longitude' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"longitude\" data-testid=\"new-location-longitude\" (ngModelChange)=\"onFormChange()\"\r\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['longitude'])|| isFormError(form.controls['longitude'])}\">\r\n <div class=\"invalid-feedback\">\r\n <ngb-alert data-testid=\"new-location-longitude-invalid\" [dismissible]=\"false\" type=\"danger\"\r\n *ngIf=\"validatorsService.isControlError(form.controls['longitude']) || isFormError(form.controls['longitude'])\">\r\n {{validatorsService.getError(form.controls['longitude']) | translate}}\r\n </ngb-alert>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3 row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Access level' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <select class=\"d-inline-block custom-select rounded-pill\" formControlName=\"level\">\r\n <option *ngFor=\"let level of levels\" [value]=\"level\">{{level | translate}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3 row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Energy Class' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"classEnergyConsumption\"\r\n data-testid=\"new-location-classEnergyConsumption\" (ngModelChange)=\"onFormChange()\"\r\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['classEnergyConsumption']) || isFormError(form.controls['classEnergyConsumption'])}\">\r\n <div class=\"invalid-feedback\">\r\n <ngb-alert data-testid=\"new-location-classEnergyConsumption-invalid\" [dismissible]=\"false\" type=\"danger\"\r\n *ngIf=\"validatorsService.isControlError(form.controls['classEnergyConsumption']) || isFormError(form.controls['classEnergyConsumption'])\">\r\n {{validatorsService.getError(form.controls['classEnergyConsumption']) | translate}}\r\n </ngb-alert>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3 row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Greenhouse gas emission Class' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"classGes\" data-testid=\"new-location-classGes\" (ngModelChange)=\"onFormChange()\"\r\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['classGes'])|| isFormError(form.controls['classGes'])}\">\r\n <div class=\"invalid-feedback\">\r\n <ngb-alert data-testid=\"new-location-classGes-invalid\" [dismissible]=\"false\" type=\"danger\"\r\n *ngIf=\"validatorsService.isControlError(form.controls['classGes']) || isFormError(form.controls['classGes'])\">\r\n {{validatorsService.getError(form.controls['classGes']) | translate}}\r\n </ngb-alert>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3 row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Cover picture' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <img #imageBasePreview *ngIf=\"currentImage\" class=\"image-preview\" [src]=\"currentImage\">\r\n <label #imageInputContainer for=\"image\"\r\n class=\"btn btn-label-file btn-outline-primary rounded-pill imageInputContainer\">\r\n <input #imageInput type=\"file\" id=\"image\" (change)=\"handleImageInput($event.target)\" />\r\n {{ imageInputText | translate}}</label>\r\n <button *ngIf=\"currentImage && !imageToUpload\" class=\"btn btn-outline-primary rounded-pill\"\r\n (click)=\"imageToBeDeleted=true;clearImageFile()\">{{'Delete picture' | translate }}</button>\r\n <div class=\"image-name\" *ngIf=\"imageToUpload\">\r\n <p>{{ imageToUpload.name}}</p>\r\n <div (click)=\"clearImageFile()\" [style.cursor]=\"'pointer'\">\r\n <span class=\"iconify\" data-icon=\"mdi:trash-can-outline\"></span>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n <div class=\"mb-3 row\" *ngIf=\"!location\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Create mission for this space' | translate}}</label>\r\n <div class=\"col-sm-3\">\r\n <input type=\"checkbox\" [(ngModel)]=\"addMissionForNewSpace\" [ngModelOptions]=\"{standalone: true}\">\r\n </div>\r\n </div>\r\n\r\n <button data-testid=\"new-location-submit-btn\" [ngClass]=\"{'is-invalid' : errorForm }\" type=\"submit\"\r\n class=\"btn btn-outline-primary rounded-pill me-3\">{{'Save' | translate}}</button>\r\n\r\n <button data-testid=\"new-location-close-btn\" type=\"button\" (click)=\"onCancel()\"\r\n class=\"btn btn-outline-primary rounded-pill\">{{'Cancel' |\r\n translate}}</button>\r\n\r\n <div class=\"invalid-feedback\" *ngIf=\"errorForm\">\r\n <ngb-alert data-testid=\"new-location-form-invalid\" [dismissible]=\"false\" type=\"danger\">\r\n {{'errorForm.infoBtn' |translate}}\r\n\r\n </ngb-alert>\r\n </div>\r\n </form>\r\n</div>", styles: ["input[type=file]{display:none}.custom-select{border-color:var(--smarterplan-primary);width:auto}.form-new-loc{background-color:#d3d3d3;padding-top:10px;padding-bottom:10px;margin-bottom:15px}.btn-outline-primary{background-color:#fff}h4{color:var(--smarterplan-primary)}.image-preview{object-fit:cover;max-height:400px;max-width:400px;display:flex;margin-bottom:15px}.imageInputContainer{width:fit-content;height:fit-content}.image-name{display:flex}.col-form-label{margin-bottom:1rem;width:230px}.form-new-loc{background-color:#d3d3d3;margin-bottom:15px;padding:10px;width:80%;border-radius:10px}.col-sm-9 select{width:100%;height:31.25px;padding-left:10px}.btn-outline-primary{width:200px;margin-bottom:1rem;margin-right:1rem}.is-invalid,.btn-outline-primary.is-invalid{border-color:red!important}\n"], dependencies: [{ kind: "component", type: i3.NgbAlert, selector: "ngb-alert", inputs: ["animation", "dismissible", "type"], outputs: ["closed"], exportAs: ["ngbAlert"] }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }] });
234
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FormLocationComponent, selector: "lib-form-location", inputs: { location: "location" }, outputs: { onChange: "onChange" }, viewQueries: [{ propertyName: "imageInputContainer", first: true, predicate: ["imageInputContainer"], descendants: true }, { propertyName: "imageInput", first: true, predicate: ["imageInput"], descendants: true }, { propertyName: "imageBasePreview", first: true, predicate: ["imageBasePreview"], descendants: true }], ngImport: i0, template: "<div class=\"col-md-6 form-new-loc\" *ngIf=\"form\">\n <form (ngSubmit)=\"onSubmit()\" [formGroup]=\"form\">\n\n <div class=\"mb-3 row\">\n <label class=\"col-sm-3 col-form-label\">{{'Name' | translate}} *</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" data-testid=\"new-location-name\" (ngModelChange)=\"onFormChange()\"\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['name'])|| isFormError(form.controls['name'])}\"\n required formControlName=\"name\">\n\n <div class=\"invalid-feedback\">\n <ngb-alert data-testid=\"new-location-name-invalid\" [dismissible]=\"false\" type=\"danger\" *ngIf=\"validatorsService.isControlError(form.controls['name']) \n || isFormError(form.controls['name'])\">\n {{validatorsService.getError(form.controls['name']) | translate}}\n </ngb-alert>\n\n </div>\n </div>\n </div>\n <div class=\"mb-3 row\">\n <label class=\"col-sm-3 col-form-label\">{{'Address' | translate}}</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" formControlName=\"addresses\" data-testid=\"new-location-address\" (ngModelChange)=\"onFormChange()\"\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['addresses']) || isFormError(form.controls['addresses'])}\">\n <div class=\"invalid-feedback\">\n <span data-testid=\"\" [translate]=\"validatorsService.getError(form.controls['addresses'])\"\n *ngIf=\" validatorsService.isControlError(form.controls['addresses'])\"></span>\n\n <ngb-alert data-testid=\"new-location-address-invalid\" [dismissible]=\"false\" type=\"danger\"\n *ngIf=\"validatorsService.isControlError(form.controls['addresses']) \">\n\n {{validatorsService.getError(form.controls['addresses']) | translate}}\n </ngb-alert>\n\n </div>\n </div>\n </div>\n\n <div class=\"mb-3 row\">\n <label class=\"col-sm-3 col-form-label\">{{'Construction year' | translate}}</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" formControlName=\"constructionYear\"\n data-testid=\"new-location-constructionYear\" (ngModelChange)=\"onFormChange()\"\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['constructionYear']) || isFormError(form.controls['constructionYear'])}\">\n <div class=\"invalid-feedback\">\n <ngb-alert data-testid=\"new-location-constructionYear-invalid\" [dismissible]=\"false\" type=\"danger\"\n *ngIf=\"validatorsService.isControlError(form.controls['constructionYear']) || isFormError(form.controls['constructionYear'])\">\n {{validatorsService.getError(form.controls['constructionYear']) | translate}}\n </ngb-alert>\n </div>\n </div>\n </div>\n\n <div class=\"mb-3 row\">\n <label class=\"col-sm-3 col-form-label\">{{'Latitude' | translate}}</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" formControlName=\"latitude\" data-testid=\"new-location-latitude\" (ngModelChange)=\"onFormChange()\"\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['latitude'])|| isFormError(form.controls['latitude'])}\">\n <div class=\"invalid-feedback\">\n <ngb-alert data-testid=\"new-location-latitude-invalid\" [dismissible]=\"false\" type=\"danger\"\n *ngIf=\"validatorsService.isControlError(form.controls['latitude']) || isFormError(form.controls['latitude'])\">\n {{validatorsService.getError(form.controls['latitude']) | translate}}\n </ngb-alert>\n </div>\n </div>\n </div>\n\n <div class=\"mb-3 row\">\n <label class=\"col-sm-3 col-form-label\">{{'Longitude' | translate}}</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" formControlName=\"longitude\" data-testid=\"new-location-longitude\" (ngModelChange)=\"onFormChange()\"\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['longitude'])|| isFormError(form.controls['longitude'])}\">\n <div class=\"invalid-feedback\">\n <ngb-alert data-testid=\"new-location-longitude-invalid\" [dismissible]=\"false\" type=\"danger\"\n *ngIf=\"validatorsService.isControlError(form.controls['longitude']) || isFormError(form.controls['longitude'])\">\n {{validatorsService.getError(form.controls['longitude']) | translate}}\n </ngb-alert>\n </div>\n </div>\n </div>\n\n <div class=\"mb-3 row\">\n <label class=\"col-sm-3 col-form-label\">{{'Access level' | translate}}</label>\n <div class=\"col-sm-9\">\n <select class=\"d-inline-block custom-select rounded-pill\" formControlName=\"level\">\n <option *ngFor=\"let level of levels\" [value]=\"level\">{{level | translate}}</option>\n </select>\n </div>\n </div>\n\n <div class=\"mb-3 row\">\n <label class=\"col-sm-3 col-form-label\">{{'Energy Class' | translate}}</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" formControlName=\"classEnergyConsumption\"\n data-testid=\"new-location-classEnergyConsumption\" (ngModelChange)=\"onFormChange()\"\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['classEnergyConsumption']) || isFormError(form.controls['classEnergyConsumption'])}\">\n <div class=\"invalid-feedback\">\n <ngb-alert data-testid=\"new-location-classEnergyConsumption-invalid\" [dismissible]=\"false\" type=\"danger\"\n *ngIf=\"validatorsService.isControlError(form.controls['classEnergyConsumption']) || isFormError(form.controls['classEnergyConsumption'])\">\n {{validatorsService.getError(form.controls['classEnergyConsumption']) | translate}}\n </ngb-alert>\n </div>\n </div>\n </div>\n\n <div class=\"mb-3 row\">\n <label class=\"col-sm-3 col-form-label\">{{'Greenhouse gas emission Class' | translate}}</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" formControlName=\"classGes\" data-testid=\"new-location-classGes\" (ngModelChange)=\"onFormChange()\"\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['classGes'])|| isFormError(form.controls['classGes'])}\">\n <div class=\"invalid-feedback\">\n <ngb-alert data-testid=\"new-location-classGes-invalid\" [dismissible]=\"false\" type=\"danger\"\n *ngIf=\"validatorsService.isControlError(form.controls['classGes']) || isFormError(form.controls['classGes'])\">\n {{validatorsService.getError(form.controls['classGes']) | translate}}\n </ngb-alert>\n </div>\n </div>\n </div>\n\n <div class=\"mb-3 row\">\n <label class=\"col-sm-3 col-form-label\">{{'Cover picture' | translate}}</label>\n <div class=\"col-sm-9\">\n <img #imageBasePreview *ngIf=\"currentImage\" class=\"image-preview\" [src]=\"currentImage\">\n <label #imageInputContainer for=\"image\"\n class=\"btn btn-label-file btn-outline-primary rounded-pill imageInputContainer\">\n <input #imageInput type=\"file\" id=\"image\" (change)=\"handleImageInput($event.target)\" />\n {{ imageInputText | translate}}</label>\n <button *ngIf=\"currentImage && !imageToUpload\" class=\"btn btn-outline-primary rounded-pill\"\n (click)=\"imageToBeDeleted=true;clearImageFile()\">{{'Delete picture' | translate }}</button>\n <div class=\"image-name\" *ngIf=\"imageToUpload\">\n <p>{{ imageToUpload.name}}</p>\n <div (click)=\"clearImageFile()\" [style.cursor]=\"'pointer'\">\n <span class=\"iconify\" data-icon=\"mdi:trash-can-outline\"></span>\n </div>\n </div>\n\n </div>\n </div>\n <div class=\"mb-3 row\" *ngIf=\"!location\">\n <label class=\"col-sm-3 col-form-label\">{{'Create mission for this space' | translate}}</label>\n <div class=\"col-sm-3\">\n <input type=\"checkbox\" [(ngModel)]=\"addMissionForNewSpace\" [ngModelOptions]=\"{standalone: true}\">\n </div>\n </div>\n\n <button data-testid=\"new-location-submit-btn\" [ngClass]=\"{'is-invalid' : errorForm }\" type=\"submit\"\n class=\"btn btn-outline-primary rounded-pill me-3\">{{'Save' | translate}}</button>\n\n <button data-testid=\"new-location-close-btn\" type=\"button\" (click)=\"onCancel()\"\n class=\"btn btn-outline-primary rounded-pill\">{{'Cancel' |\n translate}}</button>\n\n <div class=\"invalid-feedback\" *ngIf=\"errorForm\">\n <ngb-alert data-testid=\"new-location-form-invalid\" [dismissible]=\"false\" type=\"danger\">\n {{'errorForm.infoBtn' |translate}}\n\n </ngb-alert>\n </div>\n </form>\n</div>", styles: ["input[type=file]{display:none}.custom-select{border-color:var(--smarterplan-primary);width:auto}.form-new-loc{background-color:#d3d3d3;padding-top:10px;padding-bottom:10px;margin-bottom:15px}.btn-outline-primary{background-color:#fff}h4{color:var(--smarterplan-primary)}.image-preview{object-fit:cover;max-height:400px;max-width:400px;display:flex;margin-bottom:15px}.imageInputContainer{width:fit-content;height:fit-content}.image-name{display:flex}.col-form-label{margin-bottom:1rem;width:230px}.form-new-loc{background-color:#d3d3d3;margin-bottom:15px;padding:10px;width:80%;border-radius:10px}.col-sm-9 select{width:100%;height:31.25px;padding-left:10px}.btn-outline-primary{width:200px;margin-bottom:1rem;margin-right:1rem}.is-invalid,.btn-outline-primary.is-invalid{border-color:red!important}\n"], dependencies: [{ kind: "component", type: i3.NgbAlert, selector: "ngb-alert", inputs: ["animation", "dismissible", "type"], outputs: ["closed"], exportAs: ["ngbAlert"] }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }] });
235
235
  }
236
236
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormLocationComponent, decorators: [{
237
237
  type: Component,
238
- args: [{ selector: 'lib-form-location', template: "<div class=\"col-md-6 form-new-loc\" *ngIf=\"form\">\r\n <form (ngSubmit)=\"onSubmit()\" [formGroup]=\"form\">\r\n\r\n <div class=\"mb-3 row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Name' | translate}} *</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" data-testid=\"new-location-name\" (ngModelChange)=\"onFormChange()\"\r\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['name'])|| isFormError(form.controls['name'])}\"\r\n required formControlName=\"name\">\r\n\r\n <div class=\"invalid-feedback\">\r\n <ngb-alert data-testid=\"new-location-name-invalid\" [dismissible]=\"false\" type=\"danger\" *ngIf=\"validatorsService.isControlError(form.controls['name']) \r\n || isFormError(form.controls['name'])\">\r\n {{validatorsService.getError(form.controls['name']) | translate}}\r\n </ngb-alert>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"mb-3 row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Address' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"addresses\" data-testid=\"new-location-address\" (ngModelChange)=\"onFormChange()\"\r\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['addresses']) || isFormError(form.controls['addresses'])}\">\r\n <div class=\"invalid-feedback\">\r\n <span data-testid=\"\" [translate]=\"validatorsService.getError(form.controls['addresses'])\"\r\n *ngIf=\" validatorsService.isControlError(form.controls['addresses'])\"></span>\r\n\r\n <ngb-alert data-testid=\"new-location-address-invalid\" [dismissible]=\"false\" type=\"danger\"\r\n *ngIf=\"validatorsService.isControlError(form.controls['addresses']) \">\r\n\r\n {{validatorsService.getError(form.controls['addresses']) | translate}}\r\n </ngb-alert>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3 row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Construction year' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"constructionYear\"\r\n data-testid=\"new-location-constructionYear\" (ngModelChange)=\"onFormChange()\"\r\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['constructionYear']) || isFormError(form.controls['constructionYear'])}\">\r\n <div class=\"invalid-feedback\">\r\n <ngb-alert data-testid=\"new-location-constructionYear-invalid\" [dismissible]=\"false\" type=\"danger\"\r\n *ngIf=\"validatorsService.isControlError(form.controls['constructionYear']) || isFormError(form.controls['constructionYear'])\">\r\n {{validatorsService.getError(form.controls['constructionYear']) | translate}}\r\n </ngb-alert>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3 row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Latitude' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"latitude\" data-testid=\"new-location-latitude\" (ngModelChange)=\"onFormChange()\"\r\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['latitude'])|| isFormError(form.controls['latitude'])}\">\r\n <div class=\"invalid-feedback\">\r\n <ngb-alert data-testid=\"new-location-latitude-invalid\" [dismissible]=\"false\" type=\"danger\"\r\n *ngIf=\"validatorsService.isControlError(form.controls['latitude']) || isFormError(form.controls['latitude'])\">\r\n {{validatorsService.getError(form.controls['latitude']) | translate}}\r\n </ngb-alert>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3 row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Longitude' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"longitude\" data-testid=\"new-location-longitude\" (ngModelChange)=\"onFormChange()\"\r\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['longitude'])|| isFormError(form.controls['longitude'])}\">\r\n <div class=\"invalid-feedback\">\r\n <ngb-alert data-testid=\"new-location-longitude-invalid\" [dismissible]=\"false\" type=\"danger\"\r\n *ngIf=\"validatorsService.isControlError(form.controls['longitude']) || isFormError(form.controls['longitude'])\">\r\n {{validatorsService.getError(form.controls['longitude']) | translate}}\r\n </ngb-alert>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3 row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Access level' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <select class=\"d-inline-block custom-select rounded-pill\" formControlName=\"level\">\r\n <option *ngFor=\"let level of levels\" [value]=\"level\">{{level | translate}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3 row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Energy Class' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"classEnergyConsumption\"\r\n data-testid=\"new-location-classEnergyConsumption\" (ngModelChange)=\"onFormChange()\"\r\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['classEnergyConsumption']) || isFormError(form.controls['classEnergyConsumption'])}\">\r\n <div class=\"invalid-feedback\">\r\n <ngb-alert data-testid=\"new-location-classEnergyConsumption-invalid\" [dismissible]=\"false\" type=\"danger\"\r\n *ngIf=\"validatorsService.isControlError(form.controls['classEnergyConsumption']) || isFormError(form.controls['classEnergyConsumption'])\">\r\n {{validatorsService.getError(form.controls['classEnergyConsumption']) | translate}}\r\n </ngb-alert>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3 row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Greenhouse gas emission Class' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"classGes\" data-testid=\"new-location-classGes\" (ngModelChange)=\"onFormChange()\"\r\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['classGes'])|| isFormError(form.controls['classGes'])}\">\r\n <div class=\"invalid-feedback\">\r\n <ngb-alert data-testid=\"new-location-classGes-invalid\" [dismissible]=\"false\" type=\"danger\"\r\n *ngIf=\"validatorsService.isControlError(form.controls['classGes']) || isFormError(form.controls['classGes'])\">\r\n {{validatorsService.getError(form.controls['classGes']) | translate}}\r\n </ngb-alert>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3 row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Cover picture' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <img #imageBasePreview *ngIf=\"currentImage\" class=\"image-preview\" [src]=\"currentImage\">\r\n <label #imageInputContainer for=\"image\"\r\n class=\"btn btn-label-file btn-outline-primary rounded-pill imageInputContainer\">\r\n <input #imageInput type=\"file\" id=\"image\" (change)=\"handleImageInput($event.target)\" />\r\n {{ imageInputText | translate}}</label>\r\n <button *ngIf=\"currentImage && !imageToUpload\" class=\"btn btn-outline-primary rounded-pill\"\r\n (click)=\"imageToBeDeleted=true;clearImageFile()\">{{'Delete picture' | translate }}</button>\r\n <div class=\"image-name\" *ngIf=\"imageToUpload\">\r\n <p>{{ imageToUpload.name}}</p>\r\n <div (click)=\"clearImageFile()\" [style.cursor]=\"'pointer'\">\r\n <span class=\"iconify\" data-icon=\"mdi:trash-can-outline\"></span>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n <div class=\"mb-3 row\" *ngIf=\"!location\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Create mission for this space' | translate}}</label>\r\n <div class=\"col-sm-3\">\r\n <input type=\"checkbox\" [(ngModel)]=\"addMissionForNewSpace\" [ngModelOptions]=\"{standalone: true}\">\r\n </div>\r\n </div>\r\n\r\n <button data-testid=\"new-location-submit-btn\" [ngClass]=\"{'is-invalid' : errorForm }\" type=\"submit\"\r\n class=\"btn btn-outline-primary rounded-pill me-3\">{{'Save' | translate}}</button>\r\n\r\n <button data-testid=\"new-location-close-btn\" type=\"button\" (click)=\"onCancel()\"\r\n class=\"btn btn-outline-primary rounded-pill\">{{'Cancel' |\r\n translate}}</button>\r\n\r\n <div class=\"invalid-feedback\" *ngIf=\"errorForm\">\r\n <ngb-alert data-testid=\"new-location-form-invalid\" [dismissible]=\"false\" type=\"danger\">\r\n {{'errorForm.infoBtn' |translate}}\r\n\r\n </ngb-alert>\r\n </div>\r\n </form>\r\n</div>", styles: ["input[type=file]{display:none}.custom-select{border-color:var(--smarterplan-primary);width:auto}.form-new-loc{background-color:#d3d3d3;padding-top:10px;padding-bottom:10px;margin-bottom:15px}.btn-outline-primary{background-color:#fff}h4{color:var(--smarterplan-primary)}.image-preview{object-fit:cover;max-height:400px;max-width:400px;display:flex;margin-bottom:15px}.imageInputContainer{width:fit-content;height:fit-content}.image-name{display:flex}.col-form-label{margin-bottom:1rem;width:230px}.form-new-loc{background-color:#d3d3d3;margin-bottom:15px;padding:10px;width:80%;border-radius:10px}.col-sm-9 select{width:100%;height:31.25px;padding-left:10px}.btn-outline-primary{width:200px;margin-bottom:1rem;margin-right:1rem}.is-invalid,.btn-outline-primary.is-invalid{border-color:red!important}\n"] }]
238
+ args: [{ selector: 'lib-form-location', template: "<div class=\"col-md-6 form-new-loc\" *ngIf=\"form\">\n <form (ngSubmit)=\"onSubmit()\" [formGroup]=\"form\">\n\n <div class=\"mb-3 row\">\n <label class=\"col-sm-3 col-form-label\">{{'Name' | translate}} *</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" data-testid=\"new-location-name\" (ngModelChange)=\"onFormChange()\"\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['name'])|| isFormError(form.controls['name'])}\"\n required formControlName=\"name\">\n\n <div class=\"invalid-feedback\">\n <ngb-alert data-testid=\"new-location-name-invalid\" [dismissible]=\"false\" type=\"danger\" *ngIf=\"validatorsService.isControlError(form.controls['name']) \n || isFormError(form.controls['name'])\">\n {{validatorsService.getError(form.controls['name']) | translate}}\n </ngb-alert>\n\n </div>\n </div>\n </div>\n <div class=\"mb-3 row\">\n <label class=\"col-sm-3 col-form-label\">{{'Address' | translate}}</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" formControlName=\"addresses\" data-testid=\"new-location-address\" (ngModelChange)=\"onFormChange()\"\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['addresses']) || isFormError(form.controls['addresses'])}\">\n <div class=\"invalid-feedback\">\n <span data-testid=\"\" [translate]=\"validatorsService.getError(form.controls['addresses'])\"\n *ngIf=\" validatorsService.isControlError(form.controls['addresses'])\"></span>\n\n <ngb-alert data-testid=\"new-location-address-invalid\" [dismissible]=\"false\" type=\"danger\"\n *ngIf=\"validatorsService.isControlError(form.controls['addresses']) \">\n\n {{validatorsService.getError(form.controls['addresses']) | translate}}\n </ngb-alert>\n\n </div>\n </div>\n </div>\n\n <div class=\"mb-3 row\">\n <label class=\"col-sm-3 col-form-label\">{{'Construction year' | translate}}</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" formControlName=\"constructionYear\"\n data-testid=\"new-location-constructionYear\" (ngModelChange)=\"onFormChange()\"\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['constructionYear']) || isFormError(form.controls['constructionYear'])}\">\n <div class=\"invalid-feedback\">\n <ngb-alert data-testid=\"new-location-constructionYear-invalid\" [dismissible]=\"false\" type=\"danger\"\n *ngIf=\"validatorsService.isControlError(form.controls['constructionYear']) || isFormError(form.controls['constructionYear'])\">\n {{validatorsService.getError(form.controls['constructionYear']) | translate}}\n </ngb-alert>\n </div>\n </div>\n </div>\n\n <div class=\"mb-3 row\">\n <label class=\"col-sm-3 col-form-label\">{{'Latitude' | translate}}</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" formControlName=\"latitude\" data-testid=\"new-location-latitude\" (ngModelChange)=\"onFormChange()\"\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['latitude'])|| isFormError(form.controls['latitude'])}\">\n <div class=\"invalid-feedback\">\n <ngb-alert data-testid=\"new-location-latitude-invalid\" [dismissible]=\"false\" type=\"danger\"\n *ngIf=\"validatorsService.isControlError(form.controls['latitude']) || isFormError(form.controls['latitude'])\">\n {{validatorsService.getError(form.controls['latitude']) | translate}}\n </ngb-alert>\n </div>\n </div>\n </div>\n\n <div class=\"mb-3 row\">\n <label class=\"col-sm-3 col-form-label\">{{'Longitude' | translate}}</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" formControlName=\"longitude\" data-testid=\"new-location-longitude\" (ngModelChange)=\"onFormChange()\"\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['longitude'])|| isFormError(form.controls['longitude'])}\">\n <div class=\"invalid-feedback\">\n <ngb-alert data-testid=\"new-location-longitude-invalid\" [dismissible]=\"false\" type=\"danger\"\n *ngIf=\"validatorsService.isControlError(form.controls['longitude']) || isFormError(form.controls['longitude'])\">\n {{validatorsService.getError(form.controls['longitude']) | translate}}\n </ngb-alert>\n </div>\n </div>\n </div>\n\n <div class=\"mb-3 row\">\n <label class=\"col-sm-3 col-form-label\">{{'Access level' | translate}}</label>\n <div class=\"col-sm-9\">\n <select class=\"d-inline-block custom-select rounded-pill\" formControlName=\"level\">\n <option *ngFor=\"let level of levels\" [value]=\"level\">{{level | translate}}</option>\n </select>\n </div>\n </div>\n\n <div class=\"mb-3 row\">\n <label class=\"col-sm-3 col-form-label\">{{'Energy Class' | translate}}</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" formControlName=\"classEnergyConsumption\"\n data-testid=\"new-location-classEnergyConsumption\" (ngModelChange)=\"onFormChange()\"\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['classEnergyConsumption']) || isFormError(form.controls['classEnergyConsumption'])}\">\n <div class=\"invalid-feedback\">\n <ngb-alert data-testid=\"new-location-classEnergyConsumption-invalid\" [dismissible]=\"false\" type=\"danger\"\n *ngIf=\"validatorsService.isControlError(form.controls['classEnergyConsumption']) || isFormError(form.controls['classEnergyConsumption'])\">\n {{validatorsService.getError(form.controls['classEnergyConsumption']) | translate}}\n </ngb-alert>\n </div>\n </div>\n </div>\n\n <div class=\"mb-3 row\">\n <label class=\"col-sm-3 col-form-label\">{{'Greenhouse gas emission Class' | translate}}</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" formControlName=\"classGes\" data-testid=\"new-location-classGes\" (ngModelChange)=\"onFormChange()\"\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['classGes'])|| isFormError(form.controls['classGes'])}\">\n <div class=\"invalid-feedback\">\n <ngb-alert data-testid=\"new-location-classGes-invalid\" [dismissible]=\"false\" type=\"danger\"\n *ngIf=\"validatorsService.isControlError(form.controls['classGes']) || isFormError(form.controls['classGes'])\">\n {{validatorsService.getError(form.controls['classGes']) | translate}}\n </ngb-alert>\n </div>\n </div>\n </div>\n\n <div class=\"mb-3 row\">\n <label class=\"col-sm-3 col-form-label\">{{'Cover picture' | translate}}</label>\n <div class=\"col-sm-9\">\n <img #imageBasePreview *ngIf=\"currentImage\" class=\"image-preview\" [src]=\"currentImage\">\n <label #imageInputContainer for=\"image\"\n class=\"btn btn-label-file btn-outline-primary rounded-pill imageInputContainer\">\n <input #imageInput type=\"file\" id=\"image\" (change)=\"handleImageInput($event.target)\" />\n {{ imageInputText | translate}}</label>\n <button *ngIf=\"currentImage && !imageToUpload\" class=\"btn btn-outline-primary rounded-pill\"\n (click)=\"imageToBeDeleted=true;clearImageFile()\">{{'Delete picture' | translate }}</button>\n <div class=\"image-name\" *ngIf=\"imageToUpload\">\n <p>{{ imageToUpload.name}}</p>\n <div (click)=\"clearImageFile()\" [style.cursor]=\"'pointer'\">\n <span class=\"iconify\" data-icon=\"mdi:trash-can-outline\"></span>\n </div>\n </div>\n\n </div>\n </div>\n <div class=\"mb-3 row\" *ngIf=\"!location\">\n <label class=\"col-sm-3 col-form-label\">{{'Create mission for this space' | translate}}</label>\n <div class=\"col-sm-3\">\n <input type=\"checkbox\" [(ngModel)]=\"addMissionForNewSpace\" [ngModelOptions]=\"{standalone: true}\">\n </div>\n </div>\n\n <button data-testid=\"new-location-submit-btn\" [ngClass]=\"{'is-invalid' : errorForm }\" type=\"submit\"\n class=\"btn btn-outline-primary rounded-pill me-3\">{{'Save' | translate}}</button>\n\n <button data-testid=\"new-location-close-btn\" type=\"button\" (click)=\"onCancel()\"\n class=\"btn btn-outline-primary rounded-pill\">{{'Cancel' |\n translate}}</button>\n\n <div class=\"invalid-feedback\" *ngIf=\"errorForm\">\n <ngb-alert data-testid=\"new-location-form-invalid\" [dismissible]=\"false\" type=\"danger\">\n {{'errorForm.infoBtn' |translate}}\n\n </ngb-alert>\n </div>\n </form>\n</div>", styles: ["input[type=file]{display:none}.custom-select{border-color:var(--smarterplan-primary);width:auto}.form-new-loc{background-color:#d3d3d3;padding-top:10px;padding-bottom:10px;margin-bottom:15px}.btn-outline-primary{background-color:#fff}h4{color:var(--smarterplan-primary)}.image-preview{object-fit:cover;max-height:400px;max-width:400px;display:flex;margin-bottom:15px}.imageInputContainer{width:fit-content;height:fit-content}.image-name{display:flex}.col-form-label{margin-bottom:1rem;width:230px}.form-new-loc{background-color:#d3d3d3;margin-bottom:15px;padding:10px;width:80%;border-radius:10px}.col-sm-9 select{width:100%;height:31.25px;padding-left:10px}.btn-outline-primary{width:200px;margin-bottom:1rem;margin-right:1rem}.is-invalid,.btn-outline-primary.is-invalid{border-color:red!important}\n"] }]
239
239
  }], ctorParameters: () => [{ type: i1.SpaceService }, { type: i1.PropertyService }, { type: i1.BaseUserService }, { type: i2.UntypedFormBuilder }, { type: i1.MissionService }, { type: i1.LayerService }, { type: i1.ValidatorsService }], propDecorators: { imageInputContainer: [{
240
240
  type: ViewChild,
241
241
  args: ["imageInputContainer"]
@@ -250,4 +250,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
250
250
  }], onChange: [{
251
251
  type: Output
252
252
  }] } });
253
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1sb2NhdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tbG9jYXRpb25zL3NyYy9saWIvY29tcG9uZW50cy9mb3JtLWxvY2F0aW9uL2Zvcm0tbG9jYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWxvY2F0aW9ucy9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS1sb2NhdGlvbi9mb3JtLWxvY2F0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RHLE9BQU8sRUFBd0MsVUFBVSxFQUFtQixNQUFNLGdCQUFnQixDQUFDO0FBQ25HLE9BQU8sRUFBUyxXQUFXLEVBQWtFLFdBQVcsRUFBRSxjQUFjLEVBQVMsWUFBWSxFQUFFLHlCQUF5QixFQUFnQixZQUFZLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNoUCxPQUFPLEVBQXFCLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7Ozs7OztBQU92SCxNQUFNLE9BQU8scUJBQXFCO0lBbUNsQjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDRDtJQXZDWCxJQUFJLENBQW1CO0lBR3ZCLG1CQUFtQixDQUFhO0lBR2hDLFVBQVUsQ0FBYTtJQUd2QixnQkFBZ0IsQ0FBYTtJQUc3QixRQUFRLENBQVE7SUFFaEIsYUFBYSxDQUFNO0lBRW5CLFdBQVcsR0FBRyxLQUFLLENBQUM7SUFFcEIsTUFBTSxDQUFxQjtJQUUzQixxQkFBcUIsR0FBRyxJQUFJLENBQUM7SUFFN0IsY0FBYyxDQUFTO0lBRXZCLFlBQVksQ0FBUztJQUVyQixnQkFB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QUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDbEQsSUFBSSxHQUFHLEVBQUUsQ0FBQztvQkFDTixJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQztnQkFDNUIsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLENBQUMsY0FBYyxHQUFHLGFBQWEsQ0FBQztRQUN4QyxDQUFDO0lBQ0wsQ0FBQztJQUdELFdBQVcsQ0FBQyxPQUFPO1FBQ2YsT0FBTyxPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hELENBQUM7SUFHRCxZQUFZO1FBQ1IsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDM0IsQ0FBQztJQUVMLENBQUM7d0dBdFFRLHFCQUFxQjs0RkFBckIscUJBQXFCLDRiQ1ZsQywwcVNBK0pNOzs0RkRySk8scUJBQXFCO2tCQUxqQyxTQUFTOytCQUNJLG1CQUFtQjtzUUFTN0IsbUJBQW1CO3NCQURsQixTQUFTO3VCQUFDLHFCQUFxQjtnQkFJaEMsVUFBVTtzQkFEVCxTQUFTO3VCQUFDLFlBQVk7Z0JBSXZCLGdCQUFnQjtzQkFEZixTQUFTO3VCQUFDLGtCQUFrQjtnQkFJN0IsUUFBUTtzQkFEUCxLQUFLO2dCQW1CSSxRQUFRO3NCQUFqQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFVudHlwZWRGb3JtR3JvdXAsIFVudHlwZWRGb3JtQnVpbGRlciwgVmFsaWRhdG9ycywgQWJzdHJhY3RDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBTcGFjZSwgTGV2ZWxTdGF0dXMsIFNwYWNlU2VydmljZSwgUHJvcGVydHlTZXJ2aWNlLCBCYXNlVXNlclNlcnZpY2UsIE1pc3Npb25TZXJ2aWNlLCBlbnVtVG9BcnJheSwgdXBsb2FkRmlsZVRvUzMsIExheWVyLCBQcm9wZXJ0eVR5cGUsIGdldFNpZ25lZEltYWdlVXJsRm9yU3BhY2UsIExheWVyU2VydmljZSwgZGVsZXRlRnJvbVMzIH0gZnJvbSAnQHNtYXJ0ZXJwbGFuL25neC1zbWFydGVycGxhbi1jb3JlJztcclxuaW1wb3J0IHsgVmFsaWRhdG9yc1NlcnZpY2UsIHRleHRWYWxpZGF0b3IsIG5vRW1wdHlWYWxpZGF0b3IsIGZsb2F0VmFsaWRhdG9yIH0gZnJvbSBcIkBzbWFydGVycGxhbi9uZ3gtc21hcnRlcnBsYW4tY29yZVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2xpYi1mb3JtLWxvY2F0aW9uJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9mb3JtLWxvY2F0aW9uLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2Zvcm0tbG9jYXRpb24uY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRm9ybUxvY2F0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgICBmb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoXCJpbWFnZUlucHV0Q29udGFpbmVyXCIpXHJcbiAgICBpbWFnZUlucHV0Q29udGFpbmVyOiBFbGVtZW50UmVmO1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoXCJpbWFnZUlucHV0XCIpXHJcbiAgICBpbWFnZUlucHV0OiBFbGVtZW50UmVmO1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoXCJpbWFnZUJhc2VQcmV2aWV3XCIpXHJcbiAgICBpbWFnZUJhc2VQcmV2aWV3OiBFbGVtZW50UmVmO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBsb2NhdGlvbjogU3BhY2U7XHJcblxyXG4gICAgaW1hZ2VUb1VwbG9hZDogYW55O1xyXG5cclxuICAgIGlzU3VibWl0dGVkID0gZmFsc2U7XHJcblxyXG4gICAgbGV2ZWxzOiBBcnJheTxMZXZlbFN0YXR1cz47XHJcblxyXG4gICAgYWRkTWlzc2lvbkZvck5ld1NwYWNlID0gdHJ1ZTtcclxuXHJcbiAgICBpbWFnZUlucHV0VGV4dDogc3RyaW5nO1xyXG5cclxuICAgIGN1cnJlbnRJbWFnZTogc3RyaW5nO1xyXG5cclxuICAgIGltYWdlVG9CZURlbGV0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBlcnJvckZvcm06IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBAT3V0cHV0KCkgb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFNwYWNlIHwgbnVsbD4oKTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIHNwYWNlU2VydmljZTogU3BhY2VTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcHJvcGVydHlTZXJ2aWNlOiBQcm9wZXJ0eVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSB1c2VyU2VydmljZTogQmFzZVVzZXJTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgZmI6IFVudHlwZWRGb3JtQnVpbGRlcixcclxuICAgICAgICBwcml2YXRlIG1pc3Npb25TZXJ2aWNlOiBNaXNzaW9uU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGxheWVyU2VydmljZTogTGF5ZXJTZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyB2YWxpZGF0b3JzU2VydmljZTogVmFsaWRhdG9yc1NlcnZpY2VcclxuICAgICkge1xyXG4gICAgICAgIHRoaXMubGV2ZWxzID0gZW51bVRvQXJyYXkoTGV2ZWxTdGF0dXMpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmxvY2F0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdEVkaXRGb3JtKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5pbml0Rm9ybSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmhhbmRsZUlucHV0SW1hZ2VUZXh0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdEZvcm0oKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgICAgICAgIG5hbWU6IFtcIlwiLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoMjU1KSwgdGV4dFZhbGlkYXRvcigpLCBub0VtcHR5VmFsaWRhdG9yKCldXSxcclxuICAgICAgICAgICAgYWRkcmVzc2VzOiBbXCJcIiwgW1ZhbGlkYXRvcnMubWF4TGVuZ3RoKDI1NSksIHRleHRWYWxpZGF0b3IoKSwgbm9FbXB0eVZhbGlkYXRvcigpXV0sXHJcbiAgICAgICAgICAgIGxhdGl0dWRlOiBbbnVsbCwgW1ZhbGlkYXRvcnMubWF4TGVuZ3RoKDI1NSksIG5vRW1wdHlWYWxpZGF0b3IoKSwgZmxvYXRWYWxpZGF0b3IoKV1dLFxyXG4gICAgICAgICAgICBsb25naXR1ZGU6IFtudWxsLCBbVmFsaWRhdG9ycy5tYXhMZW5ndGgoMjU1KSwgbm9FbXB0eVZhbGlkYXRvcigpLCBmbG9hdFZhbGlkYXRvcigpXV0sXHJcbiAgICAgICAgICAgIGxldmVsOiBMZXZlbFN0YXR1cy5MT1csXHJcbiAgICAgICAgICAgIGNsYXNzR2VzOiBbXCJcIiwgW1ZhbGlkYXRvcnMubWF4TGVuZ3RoKDI1NSksIHRleHRWYWxpZGF0b3IoKSwgbm9FbXB0eVZhbGlkYXRvcigpXV0sXHJcbiAgICAgICAgICAgIGNsYXNzRW5lcmd5Q29uc3VtcHRpb246IFtcIlwiLCBbVmFsaWRhdG9ycy5tYXhMZW5ndGgoMjU1KSwgdGV4dFZhbGlkYXRvcigpLCBub0VtcHR5VmFsaWRhdG9yKCldXSxcclxuICAgICAgICAgICAgY29uc3RydWN0aW9uWWVhcjogW1wiXCIsIFtWYWxpZGF0b3JzLm1heExlbmd0aCgyNTUpLCB0ZXh0VmFsaWRhdG9yKCksIG5vRW1wdHlWYWxpZGF0b3IoKV1dLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGluaXRFZGl0Rm9ybSgpIHtcclxuICAgICAgICB0aGlzLmZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgICAgICAgaWQ6IHRoaXMubG9jYXRpb24uaWQsXHJcbiAgICAgICAgICAgIG5hbWU6IFt0aGlzLmxvY2F0aW9uLm5hbWUsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1heExlbmd0aCgyNTUpLCB0ZXh0VmFsaWRhdG9yKCksIG5vRW1wdHlWYWxpZGF0b3IoKV1dLFxyXG4gICAgICAgICAgICBhZGRyZXNzZXM6IFt0aGlzLmxvY2F0aW9uLmFkZHJlc3NlcywgW1ZhbGlkYXRvcnMubWF4TGVuZ3RoKDI1NSksIHRleHRWYWxpZGF0b3IoKSwgbm9FbXB0eVZhbGlkYXRvcigpXV0sXHJcbiAgICAgICAgICAgIGxhdGl0dWRlOiBbdGhpcy5sb2NhdGlvbi5sYXRpdHVkZSwgW1ZhbGlkYXRvcnMubWF4TGVuZ3RoKDI1NSksIGZsb2F0VmFsaWRhdG9yKCldXSxcclxuICAgICAgICAgICAgbG9uZ2l0dWRlOiBbdGhpcy5sb2NhdGlvbi5sb25naXR1ZGUsIFtWYWxpZGF0b3JzLm1heExlbmd0aCgyNTUpLCBmbG9hdFZhbGlkYXRvcigpXV0sXHJcbiAgICAgICAgICAgIGxldmVsOiB0aGlzLmxvY2F0aW9uLmxldmVsLFxyXG4gICAgICAgICAgICBjbGFzc0dlczogW3RoaXMubG9jYXRpb24uY2xhc3NHZXMsIFtWYWxpZGF0b3JzLm1heExlbmd0aCgyNTUpLCB0ZXh0VmFsaWRhdG9yKCksIG5vRW1wdHlWYWxpZGF0b3IoKV1dLFxyXG4gICAgICAgICAgICBjbGFzc0VuZXJneUNvbnN1bXB0aW9uOiBbdGhpcy5sb2NhdGlvbi5jbGFzc0VuZXJneUNvbnN1bXB0aW9uLCBbVmFsaWRhdG9ycy5tYXhMZW5ndGgoMjU1KSwgdGV4dFZhbGlkYXRvcigpLCBub0VtcHR5VmFsaWRhdG9yKCldXSxcclxuICAgICAgICAgICAgY29uc3RydWN0aW9uWWVhcjogW3RoaXMubG9jYXRpb24uY29uc3RydWN0aW9uWWVhciwgW1ZhbGlkYXRvcnMubWF4TGVuZ3RoKDI1NSksIHRleHRWYWxpZGF0b3IoKSwgbm9FbXB0eVZhbGlkYXRvcigpXV0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlSW1hZ2VJbnB1dCh0YXJnZXQ6IEV2ZW50VGFyZ2V0KSB7XHJcbiAgICAgICAgdGhpcy5pbWFnZVRvVXBsb2FkID0gKHRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5maWxlc1swXTtcclxuICAgICAgICBpZiAodGhpcy5pbWFnZVRvVXBsb2FkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW1hZ2VJbnB1dENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcclxuICAgICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgICAgICAgcmVhZGVyLmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEltYWdlID0gcmVhZGVyLnJlc3VsdCBhcyBzdHJpbmc7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTCh0aGlzLmltYWdlVG9VcGxvYWQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyB1cGxvYWRJbWFnZShzcGFjZUlEOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodGhpcy5pbWFnZVRvVXBsb2FkKSB7XHJcbiAgICAgICAgICAgIHVwbG9hZEZpbGVUb1MzKFwibG9jYXRpb25zL1wiLCB0aGlzLmltYWdlVG9VcGxvYWQsIHNwYWNlSUQpLnRoZW4oXHJcbiAgICAgICAgICAgICAgICBhc3luYyAodXJsKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHVybCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNwYWNlU2VydmljZS51cGRhdGVTcGFjZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogc3BhY2VJRCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubmV4ZXM6IHVybCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaW1hZ2VUb0JlRGVsZXRlZCkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNwYWNlU2VydmljZS51cGRhdGVTcGFjZSh7XHJcbiAgICAgICAgICAgICAgICBpZDogc3BhY2VJRCxcclxuICAgICAgICAgICAgICAgIGFubmV4ZXM6IG51bGwsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBhd2FpdCBkZWxldGVGcm9tUzModGhpcy5sb2NhdGlvbi5hbm5leGVzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJJbWFnZUZpbGUoKSB7XHJcbiAgICAgICAgdGhpcy5pbWFnZVRvVXBsb2FkID0gbnVsbDtcclxuICAgICAgICB0aGlzLmN1cnJlbnRJbWFnZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5pbWFnZUlucHV0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IFwiZmxleFwiO1xyXG4gICAgICAgIHRoaXMuaW1hZ2VJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gXCJcIjtcclxuICAgICAgICB0aGlzLmltYWdlSW5wdXRUZXh0ID0gXCJBZGQgcGljdHVyZVwiO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldExheWVyQnlOYW1lKG5hbWU6IHN0cmluZyk6IFByb21pc2U8TGF5ZXI+IHtcclxuICAgICAgICBjb25zdCBjdXJyZW50T3JnSWQgPSB0aGlzLnVzZXJTZXJ2aWNlLmN1cnJlbnRPcmdhbmlzYXRpb24oKS5pZDtcclxuICAgICAgICBjb25zdCBsYXllcnMgPSBhd2FpdCB0aGlzLmxheWVyU2VydmljZS5nZXRMYXllckJ5TmFtZUZvck9yZ2FuaXNhdGlvbihcclxuICAgICAgICAgICAgbmFtZSxcclxuICAgICAgICAgICAgY3VycmVudE9yZ0lkLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKGxheWVycykge1xyXG4gICAgICAgICAgICByZXR1cm4gbGF5ZXJzWzBdO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjcmVhdGUgdGhlblxyXG4gICAgICAgIHJldHVybiB0aGlzLmxheWVyU2VydmljZS5jcmVhdGVMYXllckZvck9yZ2FuaXNhdGlvbihuYW1lLCBjdXJyZW50T3JnSWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uU3VibWl0KCkge1xyXG4gICAgICAgIHRoaXMuaXNTdWJtaXR0ZWQgPSB0cnVlO1xyXG4gICAgICAgIGlmICghdGhpcy5mb3JtLnZhbGlkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3JGb3JtID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yRm9ybSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBsZXQgc3BhY2U7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmxvY2F0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZUNvbW1hVG9Eb3QoKTtcclxuICAgICAgICAgICAgICAgIHNwYWNlID0gYXdhaXQgdGhpcy5zcGFjZVNlcnZpY2UudXBkYXRlU3BhY2UodGhpcy5mb3JtLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgIGlmIChzcGFjZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudXBsb2FkSW1hZ2Uoc3BhY2UuaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9jYXRpb24gPSBzcGFjZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQoc3BhY2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VDb21tYVRvRG90KCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzcGFjZUlucHV0ID0gdGhpcy5mb3JtLnZhbHVlIGFzIFNwYWNlO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudE9yZ0lEID0gdGhpcy51c2VyU2VydmljZS5jdXJyZW50T3JnYW5pc2F0aW9uKCkuaWQ7XHJcbiAgICAgICAgICAgICAgICBzcGFjZUlucHV0Lm9yZ2FuaXNhdGlvbklEID0gY3VycmVudE9yZ0lEO1xyXG4gICAgICAgICAgICAgICAgbGV0IGxheWVyID0gYXdhaXQgdGhpcy5nZXRMYXllckJ5TmFtZShcIkJVSUxESU5HXCIpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFsYXllcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGxheWVyID0gYXdhaXQgdGhpcy5sYXllclNlcnZpY2UuY3JlYXRlTGF5ZXJGb3JPcmdhbmlzYXRpb24oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiQlVJTERJTkdcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudE9yZ0lELFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBzcGFjZSA9IGF3YWl0IHRoaXMuc3BhY2VTZXJ2aWNlLmNyZWF0ZVNwYWNlKFxyXG4gICAgICAgICAgICAgICAgICAgIHNwYWNlSW5wdXQsXHJcbiAgICAgICAgICAgICAgICAgICAgbGF5ZXIsXHJcbiAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IG1pc3Npb25zID0gdGhpcy51c2VyU2VydmljZS5nZXRNYW5hZ2VyTWlzc2lvbnMoKTtcclxuICAgICAgICAgICAgICAgIGlmIChzcGFjZSAmJiBtaXNzaW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhhbXBsZU1pc3Npb24gPSBtaXNzaW9uc1swXTtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnVwbG9hZEltYWdlKHNwYWNlLmlkKTtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnByb3BlcnR5U2VydmljZS5jcmVhdGVQcm9wZXJ0eSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBQcm9wZXJ0eVR5cGUuUFJPUEVSVFksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFjZUlEOiBzcGFjZS5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZ2FuaXNhdGlvbklEOiBjdXJyZW50T3JnSUQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJBUEkgU2VydmljZSBkb2VzIG5vdCBoYXZlIFByb3BlcnR5IHJlcXVlc3RzXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gYWRkIGRpcmVjdGx5IGEgbWlzc2lvbiBmb3IgdGhpcyBzcGFjZVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmFkZE1pc3Npb25Gb3JOZXdTcGFjZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLm1pc3Npb25TZXJ2aWNlLmNyZWF0ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFjZUlEOiBzcGFjZS5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJJRDogZXhhbXBsZU1pc3Npb24udXNlcklELFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9sZTogZXhhbXBsZU1pc3Npb24ucm9sZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsOiBleGFtcGxlTWlzc2lvbi5sZXZlbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZ2FuaXNhdGlvbklEOiBleGFtcGxlTWlzc2lvbi5vcmdhbmlzYXRpb25JRCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyZWRPcmdhbmlzYXRpb25JRDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGFtcGxlTWlzc2lvbi5vcmdhbmlzYXRpb25JRCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2UuZW1pdChzcGFjZSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2UuZW1pdChudWxsKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQobnVsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uQ2FuY2VsKCkge1xyXG4gICAgICAgIHRoaXMuZm9ybS5yZXNldCgpO1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2UuZW1pdChudWxsKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbmFtZSgpOiBBYnN0cmFjdENvbnRyb2wge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0uZ2V0KFwibmFtZVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBjaGFuZ2VDb21tYVRvRG90KCkge1xyXG4gICAgICAgIGNvbnN0IHVwZGF0ZWRTcGFjZSA9IHRoaXMuZm9ybS52YWx1ZTtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHVwZGF0ZWRTcGFjZS5sYXRpdHVkZSAmJlxyXG4gICAgICAgICAgICB1cGRhdGVkU3BhY2UubGF0aXR1ZGUudG9TdHJpbmcoKS5pbmNsdWRlcyhcIixcIilcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgdXBkYXRlZFNwYWNlLmxhdGl0dWRlID0gdXBkYXRlZFNwYWNlLmxhdGl0dWRlXHJcbiAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxyXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoXCIsXCIsIFwiLlwiKTtcclxuICAgICAgICAgICAgTnVtYmVyLnBhcnNlRmxvYXQodXBkYXRlZFNwYWNlLmxhdGl0dWRlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB1cGRhdGVkU3BhY2UubG9uZ2l0dWRlICYmXHJcbiAgICAgICAgICAgIHVwZGF0ZWRTcGFjZS5sb25naXR1ZGUudG9TdHJpbmcoKS5pbmNsdWRlcyhcIixcIilcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgdXBkYXRlZFNwYWNlLmxvbmdpdHVkZSA9IHVwZGF0ZWRTcGFjZS5sb25naXR1ZGVcclxuICAgICAgICAgICAgICAgIC50b1N0cmluZygpXHJcbiAgICAgICAgICAgICAgICAucmVwbGFjZShcIixcIiwgXCIuXCIpO1xyXG4gICAgICAgICAgICBOdW1iZXIucGFyc2VGbG9hdCh1cGRhdGVkU3BhY2UubG9uZ2l0dWRlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlSW5wdXRJbWFnZVRleHQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubG9jYXRpb24gJiYgdGhpcy5sb2NhdGlvbi5hbm5leGVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW1hZ2VJbnB1dFRleHQgPSBcIkNoYW5nZSBwaWN0dXJlXCI7XHJcbiAgICAgICAgICAgIGdldFNpZ25lZEltYWdlVXJsRm9yU3BhY2UodGhpcy5sb2NhdGlvbikudGhlbigodXJsKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodXJsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50SW1hZ2UgPSB1cmw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW1hZ2VJbnB1dFRleHQgPSBcIkFkZCBwaWN0dXJlXCI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBpc0Zvcm1FcnJvcihjb250cm9sKSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbnRyb2wgJiYgY29udHJvbC5pbnZhbGlkICYmIHRoaXMuZXJyb3JGb3JtO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBvbkZvcm1DaGFuZ2UoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZXJyb3JGb3JtICYmIHRoaXMuZm9ybS52YWxpZCkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yRm9ybSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImNvbC1tZC02IGZvcm0tbmV3LWxvY1wiICpuZ0lmPVwiZm9ybVwiPlxyXG4gIDxmb3JtIChuZ1N1Ym1pdCk9XCJvblN1Ym1pdCgpXCIgW2Zvcm1Hcm91cF09XCJmb3JtXCI+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cIm1iLTMgcm93XCI+XHJcbiAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+e3snTmFtZScgfCB0cmFuc2xhdGV9fSAqPC9sYWJlbD5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS05XCI+XHJcbiAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBkYXRhLXRlc3RpZD1cIm5ldy1sb2NhdGlvbi1uYW1lXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25Gb3JtQ2hhbmdlKClcIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwieydpcy1pbnZhbGlkJyA6IHZhbGlkYXRvcnNTZXJ2aWNlLmlzQ29udHJvbEVycm9yKGZvcm0uY29udHJvbHNbJ25hbWUnXSl8fCAgaXNGb3JtRXJyb3IoZm9ybS5jb250cm9sc1snbmFtZSddKX1cIlxyXG4gICAgICAgICAgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiPlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiPlxyXG4gICAgICAgICAgPG5nYi1hbGVydCBkYXRhLXRlc3RpZD1cIm5ldy1sb2NhdGlvbi1uYW1lLWludmFsaWRcIiBbZGlzbWlzc2libGVdPVwiZmFsc2VcIiB0eXBlPVwiZGFuZ2VyXCIgKm5nSWY9XCJ2YWxpZGF0b3JzU2VydmljZS5pc0NvbnRyb2xFcnJvcihmb3JtLmNvbnRyb2xzWyduYW1lJ10pIFxyXG4gICAgICAgICAgfHwgIGlzRm9ybUVycm9yKGZvcm0uY29udHJvbHNbJ25hbWUnXSlcIj5cclxuICAgICAgICAgICAge3t2YWxpZGF0b3JzU2VydmljZS5nZXRFcnJvcihmb3JtLmNvbnRyb2xzWyduYW1lJ10pIHwgdHJhbnNsYXRlfX1cclxuICAgICAgICAgIDwvbmdiLWFsZXJ0PlxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJtYi0zIHJvd1wiPlxyXG4gICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbFwiPnt7J0FkZHJlc3MnIHwgdHJhbnNsYXRlfX08L2xhYmVsPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTlcIj5cclxuICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cImFkZHJlc3Nlc1wiIGRhdGEtdGVzdGlkPVwibmV3LWxvY2F0aW9uLWFkZHJlc3NcIiAobmdNb2RlbENoYW5nZSk9XCJvbkZvcm1DaGFuZ2UoKVwiXHJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7J2lzLWludmFsaWQnIDogdmFsaWRhdG9yc1NlcnZpY2UuaXNDb250cm9sRXJyb3IoZm9ybS5jb250cm9sc1snYWRkcmVzc2VzJ10pIHx8ICBpc0Zvcm1FcnJvcihmb3JtLmNvbnRyb2xzWydhZGRyZXNzZXMnXSl9XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIj5cclxuICAgICAgICAgIDxzcGFuIGRhdGEtdGVzdGlkPVwiXCIgW3RyYW5zbGF0ZV09XCJ2YWxpZGF0b3JzU2VydmljZS5nZXRFcnJvcihmb3JtLmNvbnRyb2xzWydhZGRyZXNzZXMnXSlcIlxyXG4gICAgICAgICAgICAqbmdJZj1cIiB2YWxpZGF0b3JzU2VydmljZS5pc0NvbnRyb2xFcnJvcihmb3JtLmNvbnRyb2xzWydhZGRyZXNzZXMnXSlcIj48L3NwYW4+XHJcblxyXG4gICAgICAgICAgPG5nYi1hbGVydCBkYXRhLXRlc3RpZD1cIm5ldy1sb2NhdGlvbi1hZGRyZXNzLWludmFsaWRcIiBbZGlzbWlzc2libGVdPVwiZmFsc2VcIiB0eXBlPVwiZGFuZ2VyXCJcclxuICAgICAgICAgICAgKm5nSWY9XCJ2YWxpZGF0b3JzU2VydmljZS5pc0NvbnRyb2xFcnJvcihmb3JtLmNvbnRyb2xzWydhZGRyZXNzZXMnXSkgXCI+XHJcblxyXG4gICAgICAgICAgICB7e3ZhbGlkYXRvcnNTZXJ2aWNlLmdldEVycm9yKGZvcm0uY29udHJvbHNbJ2FkZHJlc3NlcyddKSB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgICA8L25nYi1hbGVydD5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cIm1iLTMgcm93XCI+XHJcbiAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+e3snQ29uc3RydWN0aW9uIHllYXInIHwgdHJhbnNsYXRlfX08L2xhYmVsPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTlcIj5cclxuICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cImNvbnN0cnVjdGlvblllYXJcIlxyXG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJuZXctbG9jYXRpb24tY29uc3RydWN0aW9uWWVhclwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uRm9ybUNoYW5nZSgpXCJcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsnaXMtaW52YWxpZCcgOiB2YWxpZGF0b3JzU2VydmljZS5pc0NvbnRyb2xFcnJvcihmb3JtLmNvbnRyb2xzWydjb25zdHJ1Y3Rpb25ZZWFyJ10pIHx8IGlzRm9ybUVycm9yKGZvcm0uY29udHJvbHNbJ2NvbnN0cnVjdGlvblllYXInXSl9XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIj5cclxuICAgICAgICAgIDxuZ2ItYWxlcnQgZGF0YS10ZXN0aWQ9XCJuZXctbG9jYXRpb24tY29uc3RydWN0aW9uWWVhci1pbnZhbGlkXCIgW2Rpc21pc3NpYmxlXT1cImZhbHNlXCIgdHlwZT1cImRhbmdlclwiXHJcbiAgICAgICAgICAgICpuZ0lmPVwidmFsaWRhdG9yc1NlcnZpY2UuaXNDb250cm9sRXJyb3IoZm9ybS5jb250cm9sc1snY29uc3RydWN0aW9uWWVhciddKSB8fCAgaXNGb3JtRXJyb3IoZm9ybS5jb250cm9sc1snY29uc3RydWN0aW9uWWVhciddKVwiPlxyXG4gICAgICAgICAgICB7e3ZhbGlkYXRvcnNTZXJ2aWNlLmdldEVycm9yKGZvcm0uY29udHJvbHNbJ2NvbnN0cnVjdGlvblllYXInXSkgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgPC9uZ2ItYWxlcnQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cIm1iLTMgcm93XCI+XHJcbiAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+e3snTGF0aXR1ZGUnIHwgdHJhbnNsYXRlfX08L2xhYmVsPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTlcIj5cclxuICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cImxhdGl0dWRlXCIgZGF0YS10ZXN0aWQ9XCJuZXctbG9jYXRpb24tbGF0aXR1ZGVcIiAobmdNb2RlbENoYW5nZSk9XCJvbkZvcm1DaGFuZ2UoKVwiXHJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7J2lzLWludmFsaWQnIDogdmFsaWRhdG9yc1NlcnZpY2UuaXNDb250cm9sRXJyb3IoZm9ybS5jb250cm9sc1snbGF0aXR1ZGUnXSl8fCAgaXNGb3JtRXJyb3IoZm9ybS5jb250cm9sc1snbGF0aXR1ZGUnXSl9XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIj5cclxuICAgICAgICAgIDxuZ2ItYWxlcnQgZGF0YS10ZXN0aWQ9XCJuZXctbG9jYXRpb24tbGF0aXR1ZGUtaW52YWxpZFwiIFtkaXNtaXNzaWJsZV09XCJmYWxzZVwiIHR5cGU9XCJkYW5nZXJcIlxyXG4gICAgICAgICAgICAqbmdJZj1cInZhbGlkYXRvcnNTZXJ2aWNlLmlzQ29udHJvbEVycm9yKGZvcm0uY29udHJvbHNbJ2xhdGl0dWRlJ10pIHx8ICBpc0Zvcm1FcnJvcihmb3JtLmNvbnRyb2xzWydsYXRpdHVkZSddKVwiPlxyXG4gICAgICAgICAgICB7e3ZhbGlkYXRvcnNTZXJ2aWNlLmdldEVycm9yKGZvcm0uY29udHJvbHNbJ2xhdGl0dWRlJ10pIHwgdHJhbnNsYXRlfX1cclxuICAgICAgICAgIDwvbmdiLWFsZXJ0PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJtYi0zIHJvd1wiPlxyXG4gICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbFwiPnt7J0xvbmdpdHVkZScgfCB0cmFuc2xhdGV9fTwvbGFiZWw+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tOVwiPlxyXG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwibG9uZ2l0dWRlXCIgZGF0YS10ZXN0aWQ9XCJuZXctbG9jYXRpb24tbG9uZ2l0dWRlXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25Gb3JtQ2hhbmdlKClcIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwieydpcy1pbnZhbGlkJyA6IHZhbGlkYXRvcnNTZXJ2aWNlLmlzQ29udHJvbEVycm9yKGZvcm0uY29udHJvbHNbJ2xvbmdpdHVkZSddKXx8ICBpc0Zvcm1FcnJvcihmb3JtLmNvbnRyb2xzWydsb25naXR1ZGUnXSl9XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIj5cclxuICAgICAgICAgIDxuZ2ItYWxlcnQgZGF0YS10ZXN0aWQ9XCJuZXctbG9jYXRpb24tbG9uZ2l0dWRlLWludmFsaWRcIiBbZGlzbWlzc2libGVdPVwiZmFsc2VcIiB0eXBlPVwiZGFuZ2VyXCJcclxuICAgICAgICAgICAgKm5nSWY9XCJ2YWxpZGF0b3JzU2VydmljZS5pc0NvbnRyb2xFcnJvcihmb3JtLmNvbnRyb2xzWydsb25naXR1ZGUnXSkgfHwgIGlzRm9ybUVycm9yKGZvcm0uY29udHJvbHNbJ2xvbmdpdHVkZSddKVwiPlxyXG4gICAgICAgICAgICB7e3ZhbGlkYXRvcnNTZXJ2aWNlLmdldEVycm9yKGZvcm0uY29udHJvbHNbJ2xvbmdpdHVkZSddKSB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgICA8L25nYi1hbGVydD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwibWItMyByb3dcIj5cclxuICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTMgY29sLWZvcm0tbGFiZWxcIj57eydBY2Nlc3MgbGV2ZWwnIHwgdHJhbnNsYXRlfX08L2xhYmVsPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTlcIj5cclxuICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZC1pbmxpbmUtYmxvY2sgY3VzdG9tLXNlbGVjdCByb3VuZGVkLXBpbGxcIiBmb3JtQ29udHJvbE5hbWU9XCJsZXZlbFwiPlxyXG4gICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgbGV2ZWwgb2YgbGV2ZWxzXCIgW3ZhbHVlXT1cImxldmVsXCI+e3tsZXZlbCB8IHRyYW5zbGF0ZX19PC9vcHRpb24+XHJcbiAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cIm1iLTMgcm93XCI+XHJcbiAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+e3snRW5lcmd5IENsYXNzJyB8IHRyYW5zbGF0ZX19PC9sYWJlbD5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS05XCI+XHJcbiAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJjbGFzc0VuZXJneUNvbnN1bXB0aW9uXCJcclxuICAgICAgICAgIGRhdGEtdGVzdGlkPVwibmV3LWxvY2F0aW9uLWNsYXNzRW5lcmd5Q29uc3VtcHRpb25cIiAobmdNb2RlbENoYW5nZSk9XCJvbkZvcm1DaGFuZ2UoKVwiXHJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7J2lzLWludmFsaWQnIDogdmFsaWRhdG9yc1NlcnZpY2UuaXNDb250cm9sRXJyb3IoZm9ybS5jb250cm9sc1snY2xhc3NFbmVyZ3lDb25zdW1wdGlvbiddKSB8fCAgaXNGb3JtRXJyb3IoZm9ybS5jb250cm9sc1snY2xhc3NFbmVyZ3lDb25zdW1wdGlvbiddKX1cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiPlxyXG4gICAgICAgICAgPG5nYi1hbGVydCBkYXRhLXRlc3RpZD1cIm5ldy1sb2NhdGlvbi1jbGFzc0VuZXJneUNvbnN1bXB0aW9uLWludmFsaWRcIiBbZGlzbWlzc2libGVdPVwiZmFsc2VcIiB0eXBlPVwiZGFuZ2VyXCJcclxuICAgICAgICAgICAgKm5nSWY9XCJ2YWxpZGF0b3JzU2VydmljZS5pc0NvbnRyb2xFcnJvcihmb3JtLmNvbnRyb2xzWydjbGFzc0VuZXJneUNvbnN1bXB0aW9uJ10pIHx8ICBpc0Zvcm1FcnJvcihmb3JtLmNvbnRyb2xzWydjbGFzc0VuZXJneUNvbnN1bXB0aW9uJ10pXCI+XHJcbiAgICAgICAgICAgIHt7dmFsaWRhdG9yc1NlcnZpY2UuZ2V0RXJyb3IoZm9ybS5jb250cm9sc1snY2xhc3NFbmVyZ3lDb25zdW1wdGlvbiddKSB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgICA8L25nYi1hbGVydD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwibWItMyByb3dcIj5cclxuICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTMgY29sLWZvcm0tbGFiZWxcIj57eydHcmVlbmhvdXNlIGdhcyBlbWlzc2lvbiBDbGFzcycgfCB0cmFuc2xhdGV9fTwvbGFiZWw+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tOVwiPlxyXG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwiY2xhc3NHZXNcIiBkYXRhLXRlc3RpZD1cIm5ldy1sb2NhdGlvbi1jbGFzc0dlc1wiIChuZ01vZGVsQ2hhbmdlKT1cIm9uRm9ybUNoYW5nZSgpXCJcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsnaXMtaW52YWxpZCcgOiB2YWxpZGF0b3JzU2VydmljZS5pc0NvbnRyb2xFcnJvcihmb3JtLmNvbnRyb2xzWydjbGFzc0dlcyddKXx8ICBpc0Zvcm1FcnJvcihmb3JtLmNvbnRyb2xzWydjbGFzc0dlcyddKX1cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiPlxyXG4gICAgICAgICAgPG5nYi1hbGVydCBkYXRhLXRlc3RpZD1cIm5ldy1sb2NhdGlvbi1jbGFzc0dlcy1pbnZhbGlkXCIgW2Rpc21pc3NpYmxlXT1cImZhbHNlXCIgdHlwZT1cImRhbmdlclwiXHJcbiAgICAgICAgICAgICpuZ0lmPVwidmFsaWRhdG9yc1NlcnZpY2UuaXNDb250cm9sRXJyb3IoZm9ybS5jb250cm9sc1snY2xhc3NHZXMnXSkgfHwgIGlzRm9ybUVycm9yKGZvcm0uY29udHJvbHNbJ2NsYXNzR2VzJ10pXCI+XHJcbiAgICAgICAgICAgIHt7dmFsaWRhdG9yc1NlcnZpY2UuZ2V0RXJyb3IoZm9ybS5jb250cm9sc1snY2xhc3NHZXMnXSkgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgPC9uZ2ItYWxlcnQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cIm1iLTMgcm93XCI+XHJcbiAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+e3snQ292ZXIgcGljdHVyZScgfCB0cmFuc2xhdGV9fTwvbGFiZWw+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tOVwiPlxyXG4gICAgICAgIDxpbWcgI2ltYWdlQmFzZVByZXZpZXcgKm5nSWY9XCJjdXJyZW50SW1hZ2VcIiBjbGFzcz1cImltYWdlLXByZXZpZXdcIiBbc3JjXT1cImN1cnJlbnRJbWFnZVwiPlxyXG4gICAgICAgIDxsYWJlbCAjaW1hZ2VJbnB1dENvbnRhaW5lciBmb3I9XCJpbWFnZVwiXHJcbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4tbGFiZWwtZmlsZSBidG4tb3V0bGluZS1wcmltYXJ5IHJvdW5kZWQtcGlsbCBpbWFnZUlucHV0Q29udGFpbmVyXCI+XHJcbiAgICAgICAgICA8aW5wdXQgI2ltYWdlSW5wdXQgdHlwZT1cImZpbGVcIiBpZD1cImltYWdlXCIgKGNoYW5nZSk9XCJoYW5kbGVJbWFnZUlucHV0KCRldmVudC50YXJnZXQpXCIgLz5cclxuICAgICAgICAgIHt7IGltYWdlSW5wdXRUZXh0IHwgdHJhbnNsYXRlfX08L2xhYmVsPlxyXG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJjdXJyZW50SW1hZ2UgJiYgIWltYWdlVG9VcGxvYWRcIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IHJvdW5kZWQtcGlsbFwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiaW1hZ2VUb0JlRGVsZXRlZD10cnVlO2NsZWFySW1hZ2VGaWxlKClcIj57eydEZWxldGUgcGljdHVyZScgfCB0cmFuc2xhdGUgfX08L2J1dHRvbj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW1hZ2UtbmFtZVwiICpuZ0lmPVwiaW1hZ2VUb1VwbG9hZFwiPlxyXG4gICAgICAgICAgPHA+e3sgaW1hZ2VUb1VwbG9hZC5uYW1lfX08L3A+XHJcbiAgICAgICAgICA8ZGl2IChjbGljayk9XCJjbGVhckltYWdlRmlsZSgpXCIgW3N0eWxlLmN1cnNvcl09XCIncG9pbnRlcidcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uaWZ5XCIgZGF0YS1pY29uPVwibWRpOnRyYXNoLWNhbi1vdXRsaW5lXCI+PC9zcGFuPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cIm1iLTMgcm93XCIgKm5nSWY9XCIhbG9jYXRpb25cIj5cclxuICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTMgY29sLWZvcm0tbGFiZWxcIj57eydDcmVhdGUgbWlzc2lvbiBmb3IgdGhpcyBzcGFjZScgfCB0cmFuc2xhdGV9fTwvbGFiZWw+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tM1wiPlxyXG4gICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbKG5nTW9kZWwpXT1cImFkZE1pc3Npb25Gb3JOZXdTcGFjZVwiIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8YnV0dG9uIGRhdGEtdGVzdGlkPVwibmV3LWxvY2F0aW9uLXN1Ym1pdC1idG5cIiBbbmdDbGFzc109XCJ7J2lzLWludmFsaWQnIDogZXJyb3JGb3JtIH1cIiB0eXBlPVwic3VibWl0XCJcclxuICAgICAgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSByb3VuZGVkLXBpbGwgbWUtM1wiPnt7J1NhdmUnIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cclxuXHJcbiAgICA8YnV0dG9uIGRhdGEtdGVzdGlkPVwibmV3LWxvY2F0aW9uLWNsb3NlLWJ0blwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib25DYW5jZWwoKVwiXHJcbiAgICAgIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgcm91bmRlZC1waWxsXCI+e3snQ2FuY2VsJyB8XHJcbiAgICAgIHRyYW5zbGF0ZX19PC9idXR0b24+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIiAqbmdJZj1cImVycm9yRm9ybVwiPlxyXG4gICAgICA8bmdiLWFsZXJ0IGRhdGEtdGVzdGlkPVwibmV3LWxvY2F0aW9uLWZvcm0taW52YWxpZFwiIFtkaXNtaXNzaWJsZV09XCJmYWxzZVwiIHR5cGU9XCJkYW5nZXJcIj5cclxuICAgICAgICB7eydlcnJvckZvcm0uaW5mb0J0bicgfHRyYW5zbGF0ZX19XHJcblxyXG4gICAgICA8L25nYi1hbGVydD5cclxuICAgIDwvZGl2PlxyXG4gIDwvZm9ybT5cclxuPC9kaXY+Il19
253
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1sb2NhdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tbG9jYXRpb25zL3NyYy9saWIvY29tcG9uZW50cy9mb3JtLWxvY2F0aW9uL2Zvcm0tbG9jYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWxvY2F0aW9ucy9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS1sb2NhdGlvbi9mb3JtLWxvY2F0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RHLE9BQU8sRUFBd0MsVUFBVSxFQUFtQixNQUFNLGdCQUFnQixDQUFDO0FBQ25HLE9BQU8sRUFBUyxXQUFXLEVBQWtFLFdBQVcsRUFBRSxjQUFjLEVBQVMsWUFBWSxFQUFFLHlCQUF5QixFQUFnQixZQUFZLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNoUCxPQUFPLEVBQXFCLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7Ozs7OztBQU92SCxNQUFNLE9BQU8scUJBQXFCO0lBbUNsQjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDRDtJQXZDWCxJQUFJLENBQW1CO0lBR3ZCLG1CQUFtQixDQUFhO0lBR2hDLFVBQVUsQ0FBYTtJQUd2QixnQkFBZ0IsQ0FBYTtJQUc3QixRQUFRLENBQVE7SUFFaEIsYUFBYSxDQUFNO0lBRW5CLFdBQVcsR0FBRyxLQUFLLENBQUM7SUFFcEIsTUFBTSxDQUFxQjtJQUUzQixxQkFBcUIsR0FBRyxJQUFJLENBQUM7SUFFN0IsY0FBYyxDQUFTO0lBRXZCLFlBQVksQ0FBUztJQUVyQixnQkFB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QUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDbEQsSUFBSSxHQUFHLEVBQUUsQ0FBQztvQkFDTixJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQztnQkFDNUIsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLENBQUMsY0FBYyxHQUFHLGFBQWEsQ0FBQztRQUN4QyxDQUFDO0lBQ0wsQ0FBQztJQUdELFdBQVcsQ0FBQyxPQUFPO1FBQ2YsT0FBTyxPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hELENBQUM7SUFHRCxZQUFZO1FBQ1IsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDM0IsQ0FBQztJQUVMLENBQUM7d0dBdFFRLHFCQUFxQjs0RkFBckIscUJBQXFCLDRiQ1ZsQyw0MlJBK0pNOzs0RkRySk8scUJBQXFCO2tCQUxqQyxTQUFTOytCQUNJLG1CQUFtQjtzUUFTN0IsbUJBQW1CO3NCQURsQixTQUFTO3VCQUFDLHFCQUFxQjtnQkFJaEMsVUFBVTtzQkFEVCxTQUFTO3VCQUFDLFlBQVk7Z0JBSXZCLGdCQUFnQjtzQkFEZixTQUFTO3VCQUFDLGtCQUFrQjtnQkFJN0IsUUFBUTtzQkFEUCxLQUFLO2dCQW1CSSxRQUFRO3NCQUFqQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBVbnR5cGVkRm9ybUdyb3VwLCBVbnR5cGVkRm9ybUJ1aWxkZXIsIFZhbGlkYXRvcnMsIEFic3RyYWN0Q29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFNwYWNlLCBMZXZlbFN0YXR1cywgU3BhY2VTZXJ2aWNlLCBQcm9wZXJ0eVNlcnZpY2UsIEJhc2VVc2VyU2VydmljZSwgTWlzc2lvblNlcnZpY2UsIGVudW1Ub0FycmF5LCB1cGxvYWRGaWxlVG9TMywgTGF5ZXIsIFByb3BlcnR5VHlwZSwgZ2V0U2lnbmVkSW1hZ2VVcmxGb3JTcGFjZSwgTGF5ZXJTZXJ2aWNlLCBkZWxldGVGcm9tUzMgfSBmcm9tICdAc21hcnRlcnBsYW4vbmd4LXNtYXJ0ZXJwbGFuLWNvcmUnO1xuaW1wb3J0IHsgVmFsaWRhdG9yc1NlcnZpY2UsIHRleHRWYWxpZGF0b3IsIG5vRW1wdHlWYWxpZGF0b3IsIGZsb2F0VmFsaWRhdG9yIH0gZnJvbSBcIkBzbWFydGVycGxhbi9uZ3gtc21hcnRlcnBsYW4tY29yZVwiO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2xpYi1mb3JtLWxvY2F0aW9uJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZm9ybS1sb2NhdGlvbi5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZm9ybS1sb2NhdGlvbi5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1Mb2NhdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgICBmb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xuXG4gICAgQFZpZXdDaGlsZChcImltYWdlSW5wdXRDb250YWluZXJcIilcbiAgICBpbWFnZUlucHV0Q29udGFpbmVyOiBFbGVtZW50UmVmO1xuXG4gICAgQFZpZXdDaGlsZChcImltYWdlSW5wdXRcIilcbiAgICBpbWFnZUlucHV0OiBFbGVtZW50UmVmO1xuXG4gICAgQFZpZXdDaGlsZChcImltYWdlQmFzZVByZXZpZXdcIilcbiAgICBpbWFnZUJhc2VQcmV2aWV3OiBFbGVtZW50UmVmO1xuXG4gICAgQElucHV0KClcbiAgICBsb2NhdGlvbjogU3BhY2U7XG5cbiAgICBpbWFnZVRvVXBsb2FkOiBhbnk7XG5cbiAgICBpc1N1Ym1pdHRlZCA9IGZhbHNlO1xuXG4gICAgbGV2ZWxzOiBBcnJheTxMZXZlbFN0YXR1cz47XG5cbiAgICBhZGRNaXNzaW9uRm9yTmV3U3BhY2UgPSB0cnVlO1xuXG4gICAgaW1hZ2VJbnB1dFRleHQ6IHN0cmluZztcblxuICAgIGN1cnJlbnRJbWFnZTogc3RyaW5nO1xuXG4gICAgaW1hZ2VUb0JlRGVsZXRlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgZXJyb3JGb3JtOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBAT3V0cHV0KCkgb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFNwYWNlIHwgbnVsbD4oKTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHNwYWNlU2VydmljZTogU3BhY2VTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHByb3BlcnR5U2VydmljZTogUHJvcGVydHlTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBCYXNlVXNlclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZmI6IFVudHlwZWRGb3JtQnVpbGRlcixcbiAgICAgICAgcHJpdmF0ZSBtaXNzaW9uU2VydmljZTogTWlzc2lvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgbGF5ZXJTZXJ2aWNlOiBMYXllclNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyB2YWxpZGF0b3JzU2VydmljZTogVmFsaWRhdG9yc1NlcnZpY2VcbiAgICApIHtcbiAgICAgICAgdGhpcy5sZXZlbHMgPSBlbnVtVG9BcnJheShMZXZlbFN0YXR1cyk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmxvY2F0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmluaXRFZGl0Rm9ybSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pbml0Rm9ybSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaGFuZGxlSW5wdXRJbWFnZVRleHQoKTtcbiAgICB9XG5cbiAgICBpbml0Rm9ybSgpIHtcbiAgICAgICAgdGhpcy5mb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICAgICAgICBuYW1lOiBbXCJcIiwgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDI1NSksIHRleHRWYWxpZGF0b3IoKSwgbm9FbXB0eVZhbGlkYXRvcigpXV0sXG4gICAgICAgICAgICBhZGRyZXNzZXM6IFtcIlwiLCBbVmFsaWRhdG9ycy5tYXhMZW5ndGgoMjU1KSwgdGV4dFZhbGlkYXRvcigpLCBub0VtcHR5VmFsaWRhdG9yKCldXSxcbiAgICAgICAgICAgIGxhdGl0dWRlOiBbbnVsbCwgW1ZhbGlkYXRvcnMubWF4TGVuZ3RoKDI1NSksIG5vRW1wdHlWYWxpZGF0b3IoKSwgZmxvYXRWYWxpZGF0b3IoKV1dLFxuICAgICAgICAgICAgbG9uZ2l0dWRlOiBbbnVsbCwgW1ZhbGlkYXRvcnMubWF4TGVuZ3RoKDI1NSksIG5vRW1wdHlWYWxpZGF0b3IoKSwgZmxvYXRWYWxpZGF0b3IoKV1dLFxuICAgICAgICAgICAgbGV2ZWw6IExldmVsU3RhdHVzLkxPVyxcbiAgICAgICAgICAgIGNsYXNzR2VzOiBbXCJcIiwgW1ZhbGlkYXRvcnMubWF4TGVuZ3RoKDI1NSksIHRleHRWYWxpZGF0b3IoKSwgbm9FbXB0eVZhbGlkYXRvcigpXV0sXG4gICAgICAgICAgICBjbGFzc0VuZXJneUNvbnN1bXB0aW9uOiBbXCJcIiwgW1ZhbGlkYXRvcnMubWF4TGVuZ3RoKDI1NSksIHRleHRWYWxpZGF0b3IoKSwgbm9FbXB0eVZhbGlkYXRvcigpXV0sXG4gICAgICAgICAgICBjb25zdHJ1Y3Rpb25ZZWFyOiBbXCJcIiwgW1ZhbGlkYXRvcnMubWF4TGVuZ3RoKDI1NSksIHRleHRWYWxpZGF0b3IoKSwgbm9FbXB0eVZhbGlkYXRvcigpXV0sXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGluaXRFZGl0Rm9ybSgpIHtcbiAgICAgICAgdGhpcy5mb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICAgICAgICBpZDogdGhpcy5sb2NhdGlvbi5pZCxcbiAgICAgICAgICAgIG5hbWU6IFt0aGlzLmxvY2F0aW9uLm5hbWUsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1heExlbmd0aCgyNTUpLCB0ZXh0VmFsaWRhdG9yKCksIG5vRW1wdHlWYWxpZGF0b3IoKV1dLFxuICAgICAgICAgICAgYWRkcmVzc2VzOiBbdGhpcy5sb2NhdGlvbi5hZGRyZXNzZXMsIFtWYWxpZGF0b3JzLm1heExlbmd0aCgyNTUpLCB0ZXh0VmFsaWRhdG9yKCksIG5vRW1wdHlWYWxpZGF0b3IoKV1dLFxuICAgICAgICAgICAgbGF0aXR1ZGU6IFt0aGlzLmxvY2F0aW9uLmxhdGl0dWRlLCBbVmFsaWRhdG9ycy5tYXhMZW5ndGgoMjU1KSwgZmxvYXRWYWxpZGF0b3IoKV1dLFxuICAgICAgICAgICAgbG9uZ2l0dWRlOiBbdGhpcy5sb2NhdGlvbi5sb25naXR1ZGUsIFtWYWxpZGF0b3JzLm1heExlbmd0aCgyNTUpLCBmbG9hdFZhbGlkYXRvcigpXV0sXG4gICAgICAgICAgICBsZXZlbDogdGhpcy5sb2NhdGlvbi5sZXZlbCxcbiAgICAgICAgICAgIGNsYXNzR2VzOiBbdGhpcy5sb2NhdGlvbi5jbGFzc0dlcywgW1ZhbGlkYXRvcnMubWF4TGVuZ3RoKDI1NSksIHRleHRWYWxpZGF0b3IoKSwgbm9FbXB0eVZhbGlkYXRvcigpXV0sXG4gICAgICAgICAgICBjbGFzc0VuZXJneUNvbnN1bXB0aW9uOiBbdGhpcy5sb2NhdGlvbi5jbGFzc0VuZXJneUNvbnN1bXB0aW9uLCBbVmFsaWRhdG9ycy5tYXhMZW5ndGgoMjU1KSwgdGV4dFZhbGlkYXRvcigpLCBub0VtcHR5VmFsaWRhdG9yKCldXSxcbiAgICAgICAgICAgIGNvbnN0cnVjdGlvblllYXI6IFt0aGlzLmxvY2F0aW9uLmNvbnN0cnVjdGlvblllYXIsIFtWYWxpZGF0b3JzLm1heExlbmd0aCgyNTUpLCB0ZXh0VmFsaWRhdG9yKCksIG5vRW1wdHlWYWxpZGF0b3IoKV1dLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBoYW5kbGVJbWFnZUlucHV0KHRhcmdldDogRXZlbnRUYXJnZXQpIHtcbiAgICAgICAgdGhpcy5pbWFnZVRvVXBsb2FkID0gKHRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5maWxlc1swXTtcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2VUb1VwbG9hZCkge1xuICAgICAgICAgICAgdGhpcy5pbWFnZUlucHV0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICAgICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgICAgIHJlYWRlci5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50SW1hZ2UgPSByZWFkZXIucmVzdWx0IGFzIHN0cmluZztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwodGhpcy5pbWFnZVRvVXBsb2FkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIHVwbG9hZEltYWdlKHNwYWNlSUQ6IHN0cmluZykge1xuICAgICAgICBpZiAodGhpcy5pbWFnZVRvVXBsb2FkKSB7XG4gICAgICAgICAgICB1cGxvYWRGaWxlVG9TMyhcImxvY2F0aW9ucy9cIiwgdGhpcy5pbWFnZVRvVXBsb2FkLCBzcGFjZUlEKS50aGVuKFxuICAgICAgICAgICAgICAgIGFzeW5jICh1cmwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHVybCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zcGFjZVNlcnZpY2UudXBkYXRlU3BhY2Uoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBzcGFjZUlELFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubmV4ZXM6IHVybCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pbWFnZVRvQmVEZWxldGVkKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNwYWNlU2VydmljZS51cGRhdGVTcGFjZSh7XG4gICAgICAgICAgICAgICAgaWQ6IHNwYWNlSUQsXG4gICAgICAgICAgICAgICAgYW5uZXhlczogbnVsbCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXdhaXQgZGVsZXRlRnJvbVMzKHRoaXMubG9jYXRpb24uYW5uZXhlcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGVhckltYWdlRmlsZSgpIHtcbiAgICAgICAgdGhpcy5pbWFnZVRvVXBsb2FkID0gbnVsbDtcbiAgICAgICAgdGhpcy5jdXJyZW50SW1hZ2UgPSBudWxsO1xuICAgICAgICB0aGlzLmltYWdlSW5wdXRDb250YWluZXIubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gXCJmbGV4XCI7XG4gICAgICAgIHRoaXMuaW1hZ2VJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gXCJcIjtcbiAgICAgICAgdGhpcy5pbWFnZUlucHV0VGV4dCA9IFwiQWRkIHBpY3R1cmVcIjtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRMYXllckJ5TmFtZShuYW1lOiBzdHJpbmcpOiBQcm9taXNlPExheWVyPiB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRPcmdJZCA9IHRoaXMudXNlclNlcnZpY2UuY3VycmVudE9yZ2FuaXNhdGlvbigpLmlkO1xuICAgICAgICBjb25zdCBsYXllcnMgPSBhd2FpdCB0aGlzLmxheWVyU2VydmljZS5nZXRMYXllckJ5TmFtZUZvck9yZ2FuaXNhdGlvbihcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBjdXJyZW50T3JnSWQsXG4gICAgICAgICk7XG4gICAgICAgIGlmIChsYXllcnMpIHtcbiAgICAgICAgICAgIHJldHVybiBsYXllcnNbMF07XG4gICAgICAgIH1cbiAgICAgICAgLy8gY3JlYXRlIHRoZW5cbiAgICAgICAgcmV0dXJuIHRoaXMubGF5ZXJTZXJ2aWNlLmNyZWF0ZUxheWVyRm9yT3JnYW5pc2F0aW9uKG5hbWUsIGN1cnJlbnRPcmdJZCk7XG4gICAgfVxuXG4gICAgYXN5bmMgb25TdWJtaXQoKSB7XG4gICAgICAgIHRoaXMuaXNTdWJtaXR0ZWQgPSB0cnVlO1xuICAgICAgICBpZiAoIXRoaXMuZm9ybS52YWxpZCkge1xuICAgICAgICAgICAgdGhpcy5lcnJvckZvcm0gPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmVycm9yRm9ybSA9IGZhbHNlO1xuICAgICAgICAgICAgbGV0IHNwYWNlO1xuICAgICAgICAgICAgaWYgKHRoaXMubG9jYXRpb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZUNvbW1hVG9Eb3QoKTtcbiAgICAgICAgICAgICAgICBzcGFjZSA9IGF3YWl0IHRoaXMuc3BhY2VTZXJ2aWNlLnVwZGF0ZVNwYWNlKHRoaXMuZm9ybS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHNwYWNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudXBsb2FkSW1hZ2Uoc3BhY2UuaWQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvY2F0aW9uID0gc3BhY2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2UuZW1pdChzcGFjZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZUNvbW1hVG9Eb3QoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzcGFjZUlucHV0ID0gdGhpcy5mb3JtLnZhbHVlIGFzIFNwYWNlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRPcmdJRCA9IHRoaXMudXNlclNlcnZpY2UuY3VycmVudE9yZ2FuaXNhdGlvbigpLmlkO1xuICAgICAgICAgICAgICAgIHNwYWNlSW5wdXQub3JnYW5pc2F0aW9uSUQgPSBjdXJyZW50T3JnSUQ7XG4gICAgICAgICAgICAgICAgbGV0IGxheWVyID0gYXdhaXQgdGhpcy5nZXRMYXllckJ5TmFtZShcIkJVSUxESU5HXCIpO1xuICAgICAgICAgICAgICAgIGlmICghbGF5ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgbGF5ZXIgPSBhd2FpdCB0aGlzLmxheWVyU2VydmljZS5jcmVhdGVMYXllckZvck9yZ2FuaXNhdGlvbihcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiQlVJTERJTkdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRPcmdJRCxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3BhY2UgPSBhd2FpdCB0aGlzLnNwYWNlU2VydmljZS5jcmVhdGVTcGFjZShcbiAgICAgICAgICAgICAgICAgICAgc3BhY2VJbnB1dCxcbiAgICAgICAgICAgICAgICAgICAgbGF5ZXIsXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IG1pc3Npb25zID0gdGhpcy51c2VyU2VydmljZS5nZXRNYW5hZ2VyTWlzc2lvbnMoKTtcbiAgICAgICAgICAgICAgICBpZiAoc3BhY2UgJiYgbWlzc2lvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBleGFtcGxlTWlzc2lvbiA9IG1pc3Npb25zWzBdO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnVwbG9hZEltYWdlKHNwYWNlLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucHJvcGVydHlTZXJ2aWNlLmNyZWF0ZVByb3BlcnR5KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBQcm9wZXJ0eVR5cGUuUFJPUEVSVFksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2VJRDogc3BhY2UuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnYW5pc2F0aW9uSUQ6IGN1cnJlbnRPcmdJRCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkFQSSBTZXJ2aWNlIGRvZXMgbm90IGhhdmUgUHJvcGVydHkgcmVxdWVzdHNcIik7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBhZGQgZGlyZWN0bHkgYSBtaXNzaW9uIGZvciB0aGlzIHNwYWNlXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmFkZE1pc3Npb25Gb3JOZXdTcGFjZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5taXNzaW9uU2VydmljZS5jcmVhdGUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYWNlSUQ6IHNwYWNlLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJJRDogZXhhbXBsZU1pc3Npb24udXNlcklELFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU6IGV4YW1wbGVNaXNzaW9uLnJvbGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWw6IGV4YW1wbGVNaXNzaW9uLmxldmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZ2FuaXNhdGlvbklEOiBleGFtcGxlTWlzc2lvbi5vcmdhbmlzYXRpb25JRCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmRlcmVkT3JnYW5pc2F0aW9uSUQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4YW1wbGVNaXNzaW9uLm9yZ2FuaXNhdGlvbklELFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZS5lbWl0KHNwYWNlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQobnVsbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQobnVsbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkNhbmNlbCgpIHtcbiAgICAgICAgdGhpcy5mb3JtLnJlc2V0KCk7XG4gICAgICAgIHRoaXMub25DaGFuZ2UuZW1pdChudWxsKTtcbiAgICB9XG5cbiAgICBnZXQgbmFtZSgpOiBBYnN0cmFjdENvbnRyb2wge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLmdldChcIm5hbWVcIik7XG4gICAgfVxuXG4gICAgY2hhbmdlQ29tbWFUb0RvdCgpIHtcbiAgICAgICAgY29uc3QgdXBkYXRlZFNwYWNlID0gdGhpcy5mb3JtLnZhbHVlO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB1cGRhdGVkU3BhY2UubGF0aXR1ZGUgJiZcbiAgICAgICAgICAgIHVwZGF0ZWRTcGFjZS5sYXRpdHVkZS50b1N0cmluZygpLmluY2x1ZGVzKFwiLFwiKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHVwZGF0ZWRTcGFjZS5sYXRpdHVkZSA9IHVwZGF0ZWRTcGFjZS5sYXRpdHVkZVxuICAgICAgICAgICAgICAgIC50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoXCIsXCIsIFwiLlwiKTtcbiAgICAgICAgICAgIE51bWJlci5wYXJzZUZsb2F0KHVwZGF0ZWRTcGFjZS5sYXRpdHVkZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdXBkYXRlZFNwYWNlLmxvbmdpdHVkZSAmJlxuICAgICAgICAgICAgdXBkYXRlZFNwYWNlLmxvbmdpdHVkZS50b1N0cmluZygpLmluY2x1ZGVzKFwiLFwiKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHVwZGF0ZWRTcGFjZS5sb25naXR1ZGUgPSB1cGRhdGVkU3BhY2UubG9uZ2l0dWRlXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAucmVwbGFjZShcIixcIiwgXCIuXCIpO1xuICAgICAgICAgICAgTnVtYmVyLnBhcnNlRmxvYXQodXBkYXRlZFNwYWNlLmxvbmdpdHVkZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVJbnB1dEltYWdlVGV4dCgpIHtcbiAgICAgICAgaWYgKHRoaXMubG9jYXRpb24gJiYgdGhpcy5sb2NhdGlvbi5hbm5leGVzKSB7XG4gICAgICAgICAgICB0aGlzLmltYWdlSW5wdXRUZXh0ID0gXCJDaGFuZ2UgcGljdHVyZVwiO1xuICAgICAgICAgICAgZ2V0U2lnbmVkSW1hZ2VVcmxGb3JTcGFjZSh0aGlzLmxvY2F0aW9uKS50aGVuKCh1cmwpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodXJsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEltYWdlID0gdXJsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pbWFnZUlucHV0VGV4dCA9IFwiQWRkIHBpY3R1cmVcIjtcbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgaXNGb3JtRXJyb3IoY29udHJvbCkge1xuICAgICAgICByZXR1cm4gY29udHJvbCAmJiBjb250cm9sLmludmFsaWQgJiYgdGhpcy5lcnJvckZvcm07XG4gICAgfVxuXG5cbiAgICBvbkZvcm1DaGFuZ2UoKSB7XG4gICAgICAgIGlmICh0aGlzLmVycm9yRm9ybSAmJiB0aGlzLmZvcm0udmFsaWQpIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JGb3JtID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjb2wtbWQtNiBmb3JtLW5ldy1sb2NcIiAqbmdJZj1cImZvcm1cIj5cbiAgPGZvcm0gKG5nU3VibWl0KT1cIm9uU3VibWl0KClcIiBbZm9ybUdyb3VwXT1cImZvcm1cIj5cblxuICAgIDxkaXYgY2xhc3M9XCJtYi0zIHJvd1wiPlxuICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTMgY29sLWZvcm0tbGFiZWxcIj57eydOYW1lJyB8IHRyYW5zbGF0ZX19ICo8L2xhYmVsPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS05XCI+XG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZGF0YS10ZXN0aWQ9XCJuZXctbG9jYXRpb24tbmFtZVwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uRm9ybUNoYW5nZSgpXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7J2lzLWludmFsaWQnIDogdmFsaWRhdG9yc1NlcnZpY2UuaXNDb250cm9sRXJyb3IoZm9ybS5jb250cm9sc1snbmFtZSddKXx8ICBpc0Zvcm1FcnJvcihmb3JtLmNvbnRyb2xzWyduYW1lJ10pfVwiXG4gICAgICAgICAgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCI+XG4gICAgICAgICAgPG5nYi1hbGVydCBkYXRhLXRlc3RpZD1cIm5ldy1sb2NhdGlvbi1uYW1lLWludmFsaWRcIiBbZGlzbWlzc2libGVdPVwiZmFsc2VcIiB0eXBlPVwiZGFuZ2VyXCIgKm5nSWY9XCJ2YWxpZGF0b3JzU2VydmljZS5pc0NvbnRyb2xFcnJvcihmb3JtLmNvbnRyb2xzWyduYW1lJ10pIFxuICAgICAgICAgIHx8ICBpc0Zvcm1FcnJvcihmb3JtLmNvbnRyb2xzWyduYW1lJ10pXCI+XG4gICAgICAgICAgICB7e3ZhbGlkYXRvcnNTZXJ2aWNlLmdldEVycm9yKGZvcm0uY29udHJvbHNbJ25hbWUnXSkgfCB0cmFuc2xhdGV9fVxuICAgICAgICAgIDwvbmdiLWFsZXJ0PlxuXG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIm1iLTMgcm93XCI+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbFwiPnt7J0FkZHJlc3MnIHwgdHJhbnNsYXRlfX08L2xhYmVsPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS05XCI+XG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwiYWRkcmVzc2VzXCIgZGF0YS10ZXN0aWQ9XCJuZXctbG9jYXRpb24tYWRkcmVzc1wiIChuZ01vZGVsQ2hhbmdlKT1cIm9uRm9ybUNoYW5nZSgpXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7J2lzLWludmFsaWQnIDogdmFsaWRhdG9yc1NlcnZpY2UuaXNDb250cm9sRXJyb3IoZm9ybS5jb250cm9sc1snYWRkcmVzc2VzJ10pIHx8ICBpc0Zvcm1FcnJvcihmb3JtLmNvbnRyb2xzWydhZGRyZXNzZXMnXSl9XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCI+XG4gICAgICAgICAgPHNwYW4gZGF0YS10ZXN0aWQ9XCJcIiBbdHJhbnNsYXRlXT1cInZhbGlkYXRvcnNTZXJ2aWNlLmdldEVycm9yKGZvcm0uY29udHJvbHNbJ2FkZHJlc3NlcyddKVwiXG4gICAgICAgICAgICAqbmdJZj1cIiB2YWxpZGF0b3JzU2VydmljZS5pc0NvbnRyb2xFcnJvcihmb3JtLmNvbnRyb2xzWydhZGRyZXNzZXMnXSlcIj48L3NwYW4+XG5cbiAgICAgICAgICA8bmdiLWFsZXJ0IGRhdGEtdGVzdGlkPVwibmV3LWxvY2F0aW9uLWFkZHJlc3MtaW52YWxpZFwiIFtkaXNtaXNzaWJsZV09XCJmYWxzZVwiIHR5cGU9XCJkYW5nZXJcIlxuICAgICAgICAgICAgKm5nSWY9XCJ2YWxpZGF0b3JzU2VydmljZS5pc0NvbnRyb2xFcnJvcihmb3JtLmNvbnRyb2xzWydhZGRyZXNzZXMnXSkgXCI+XG5cbiAgICAgICAgICAgIHt7dmFsaWRhdG9yc1NlcnZpY2UuZ2V0RXJyb3IoZm9ybS5jb250cm9sc1snYWRkcmVzc2VzJ10pIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICA8L25nYi1hbGVydD5cblxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cIm1iLTMgcm93XCI+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbFwiPnt7J0NvbnN0cnVjdGlvbiB5ZWFyJyB8IHRyYW5zbGF0ZX19PC9sYWJlbD5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tOVwiPlxuICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cImNvbnN0cnVjdGlvblllYXJcIlxuICAgICAgICAgIGRhdGEtdGVzdGlkPVwibmV3LWxvY2F0aW9uLWNvbnN0cnVjdGlvblllYXJcIiAobmdNb2RlbENoYW5nZSk9XCJvbkZvcm1DaGFuZ2UoKVwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwieydpcy1pbnZhbGlkJyA6IHZhbGlkYXRvcnNTZXJ2aWNlLmlzQ29udHJvbEVycm9yKGZvcm0uY29udHJvbHNbJ2NvbnN0cnVjdGlvblllYXInXSkgfHwgaXNGb3JtRXJyb3IoZm9ybS5jb250cm9sc1snY29uc3RydWN0aW9uWWVhciddKX1cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIj5cbiAgICAgICAgICA8bmdiLWFsZXJ0IGRhdGEtdGVzdGlkPVwibmV3LWxvY2F0aW9uLWNvbnN0cnVjdGlvblllYXItaW52YWxpZFwiIFtkaXNtaXNzaWJsZV09XCJmYWxzZVwiIHR5cGU9XCJkYW5nZXJcIlxuICAgICAgICAgICAgKm5nSWY9XCJ2YWxpZGF0b3JzU2VydmljZS5pc0NvbnRyb2xFcnJvcihmb3JtLmNvbnRyb2xzWydjb25zdHJ1Y3Rpb25ZZWFyJ10pIHx8ICBpc0Zvcm1FcnJvcihmb3JtLmNvbnRyb2xzWydjb25zdHJ1Y3Rpb25ZZWFyJ10pXCI+XG4gICAgICAgICAgICB7e3ZhbGlkYXRvcnNTZXJ2aWNlLmdldEVycm9yKGZvcm0uY29udHJvbHNbJ2NvbnN0cnVjdGlvblllYXInXSkgfCB0cmFuc2xhdGV9fVxuICAgICAgICAgIDwvbmdiLWFsZXJ0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cIm1iLTMgcm93XCI+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbFwiPnt7J0xhdGl0dWRlJyB8IHRyYW5zbGF0ZX19PC9sYWJlbD5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tOVwiPlxuICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cImxhdGl0dWRlXCIgZGF0YS10ZXN0aWQ9XCJuZXctbG9jYXRpb24tbGF0aXR1ZGVcIiAobmdNb2RlbENoYW5nZSk9XCJvbkZvcm1DaGFuZ2UoKVwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwieydpcy1pbnZhbGlkJyA6IHZhbGlkYXRvcnNTZXJ2aWNlLmlzQ29udHJvbEVycm9yKGZvcm0uY29udHJvbHNbJ2xhdGl0dWRlJ10pfHwgIGlzRm9ybUVycm9yKGZvcm0uY29udHJvbHNbJ2xhdGl0dWRlJ10pfVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiPlxuICAgICAgICAgIDxuZ2ItYWxlcnQgZGF0YS10ZXN0aWQ9XCJuZXctbG9jYXRpb24tbGF0aXR1ZGUtaW52YWxpZFwiIFtkaXNtaXNzaWJsZV09XCJmYWxzZVwiIHR5cGU9XCJkYW5nZXJcIlxuICAgICAgICAgICAgKm5nSWY9XCJ2YWxpZGF0b3JzU2VydmljZS5pc0NvbnRyb2xFcnJvcihmb3JtLmNvbnRyb2xzWydsYXRpdHVkZSddKSB8fCAgaXNGb3JtRXJyb3IoZm9ybS5jb250cm9sc1snbGF0aXR1ZGUnXSlcIj5cbiAgICAgICAgICAgIHt7dmFsaWRhdG9yc1NlcnZpY2UuZ2V0RXJyb3IoZm9ybS5jb250cm9sc1snbGF0aXR1ZGUnXSkgfCB0cmFuc2xhdGV9fVxuICAgICAgICAgIDwvbmdiLWFsZXJ0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cIm1iLTMgcm93XCI+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbFwiPnt7J0xvbmdpdHVkZScgfCB0cmFuc2xhdGV9fTwvbGFiZWw+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTlcIj5cbiAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJsb25naXR1ZGVcIiBkYXRhLXRlc3RpZD1cIm5ldy1sb2NhdGlvbi1sb25naXR1ZGVcIiAobmdNb2RlbENoYW5nZSk9XCJvbkZvcm1DaGFuZ2UoKVwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwieydpcy1pbnZhbGlkJyA6IHZhbGlkYXRvcnNTZXJ2aWNlLmlzQ29udHJvbEVycm9yKGZvcm0uY29udHJvbHNbJ2xvbmdpdHVkZSddKXx8ICBpc0Zvcm1FcnJvcihmb3JtLmNvbnRyb2xzWydsb25naXR1ZGUnXSl9XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCI+XG4gICAgICAgICAgPG5nYi1hbGVydCBkYXRhLXRlc3RpZD1cIm5ldy1sb2NhdGlvbi1sb25naXR1ZGUtaW52YWxpZFwiIFtkaXNtaXNzaWJsZV09XCJmYWxzZVwiIHR5cGU9XCJkYW5nZXJcIlxuICAgICAgICAgICAgKm5nSWY9XCJ2YWxpZGF0b3JzU2VydmljZS5pc0NvbnRyb2xFcnJvcihmb3JtLmNvbnRyb2xzWydsb25naXR1ZGUnXSkgfHwgIGlzRm9ybUVycm9yKGZvcm0uY29udHJvbHNbJ2xvbmdpdHVkZSddKVwiPlxuICAgICAgICAgICAge3t2YWxpZGF0b3JzU2VydmljZS5nZXRFcnJvcihmb3JtLmNvbnRyb2xzWydsb25naXR1ZGUnXSkgfCB0cmFuc2xhdGV9fVxuICAgICAgICAgIDwvbmdiLWFsZXJ0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cIm1iLTMgcm93XCI+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbFwiPnt7J0FjY2VzcyBsZXZlbCcgfCB0cmFuc2xhdGV9fTwvbGFiZWw+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTlcIj5cbiAgICAgICAgPHNlbGVjdCBjbGFzcz1cImQtaW5saW5lLWJsb2NrIGN1c3RvbS1zZWxlY3Qgcm91bmRlZC1waWxsXCIgZm9ybUNvbnRyb2xOYW1lPVwibGV2ZWxcIj5cbiAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBsZXZlbCBvZiBsZXZlbHNcIiBbdmFsdWVdPVwibGV2ZWxcIj57e2xldmVsIHwgdHJhbnNsYXRlfX08L29wdGlvbj5cbiAgICAgICAgPC9zZWxlY3Q+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJtYi0zIHJvd1wiPlxuICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTMgY29sLWZvcm0tbGFiZWxcIj57eydFbmVyZ3kgQ2xhc3MnIHwgdHJhbnNsYXRlfX08L2xhYmVsPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS05XCI+XG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwiY2xhc3NFbmVyZ3lDb25zdW1wdGlvblwiXG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJuZXctbG9jYXRpb24tY2xhc3NFbmVyZ3lDb25zdW1wdGlvblwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uRm9ybUNoYW5nZSgpXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7J2lzLWludmFsaWQnIDogdmFsaWRhdG9yc1NlcnZpY2UuaXNDb250cm9sRXJyb3IoZm9ybS5jb250cm9sc1snY2xhc3NFbmVyZ3lDb25zdW1wdGlvbiddKSB8fCAgaXNGb3JtRXJyb3IoZm9ybS5jb250cm9sc1snY2xhc3NFbmVyZ3lDb25zdW1wdGlvbiddKX1cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIj5cbiAgICAgICAgICA8bmdiLWFsZXJ0IGRhdGEtdGVzdGlkPVwibmV3LWxvY2F0aW9uLWNsYXNzRW5lcmd5Q29uc3VtcHRpb24taW52YWxpZFwiIFtkaXNtaXNzaWJsZV09XCJmYWxzZVwiIHR5cGU9XCJkYW5nZXJcIlxuICAgICAgICAgICAgKm5nSWY9XCJ2YWxpZGF0b3JzU2VydmljZS5pc0NvbnRyb2xFcnJvcihmb3JtLmNvbnRyb2xzWydjbGFzc0VuZXJneUNvbnN1bXB0aW9uJ10pIHx8ICBpc0Zvcm1FcnJvcihmb3JtLmNvbnRyb2xzWydjbGFzc0VuZXJneUNvbnN1bXB0aW9uJ10pXCI+XG4gICAgICAgICAgICB7e3ZhbGlkYXRvcnNTZXJ2aWNlLmdldEVycm9yKGZvcm0uY29udHJvbHNbJ2NsYXNzRW5lcmd5Q29uc3VtcHRpb24nXSkgfCB0cmFuc2xhdGV9fVxuICAgICAgICAgIDwvbmdiLWFsZXJ0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cIm1iLTMgcm93XCI+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbFwiPnt7J0dyZWVuaG91c2UgZ2FzIGVtaXNzaW9uIENsYXNzJyB8IHRyYW5zbGF0ZX19PC9sYWJlbD5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tOVwiPlxuICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cImNsYXNzR2VzXCIgZGF0YS10ZXN0aWQ9XCJuZXctbG9jYXRpb24tY2xhc3NHZXNcIiAobmdNb2RlbENoYW5nZSk9XCJvbkZvcm1DaGFuZ2UoKVwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwieydpcy1pbnZhbGlkJyA6IHZhbGlkYXRvcnNTZXJ2aWNlLmlzQ29udHJvbEVycm9yKGZvcm0uY29udHJvbHNbJ2NsYXNzR2VzJ10pfHwgIGlzRm9ybUVycm9yKGZvcm0uY29udHJvbHNbJ2NsYXNzR2VzJ10pfVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiPlxuICAgICAgICAgIDxuZ2ItYWxlcnQgZGF0YS10ZXN0aWQ9XCJuZXctbG9jYXRpb24tY2xhc3NHZXMtaW52YWxpZFwiIFtkaXNtaXNzaWJsZV09XCJmYWxzZVwiIHR5cGU9XCJkYW5nZXJcIlxuICAgICAgICAgICAgKm5nSWY9XCJ2YWxpZGF0b3JzU2VydmljZS5pc0NvbnRyb2xFcnJvcihmb3JtLmNvbnRyb2xzWydjbGFzc0dlcyddKSB8fCAgaXNGb3JtRXJyb3IoZm9ybS5jb250cm9sc1snY2xhc3NHZXMnXSlcIj5cbiAgICAgICAgICAgIHt7dmFsaWRhdG9yc1NlcnZpY2UuZ2V0RXJyb3IoZm9ybS5jb250cm9sc1snY2xhc3NHZXMnXSkgfCB0cmFuc2xhdGV9fVxuICAgICAgICAgIDwvbmdiLWFsZXJ0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cIm1iLTMgcm93XCI+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbFwiPnt7J0NvdmVyIHBpY3R1cmUnIHwgdHJhbnNsYXRlfX08L2xhYmVsPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS05XCI+XG4gICAgICAgIDxpbWcgI2ltYWdlQmFzZVByZXZpZXcgKm5nSWY9XCJjdXJyZW50SW1hZ2VcIiBjbGFzcz1cImltYWdlLXByZXZpZXdcIiBbc3JjXT1cImN1cnJlbnRJbWFnZVwiPlxuICAgICAgICA8bGFiZWwgI2ltYWdlSW5wdXRDb250YWluZXIgZm9yPVwiaW1hZ2VcIlxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1sYWJlbC1maWxlIGJ0bi1vdXRsaW5lLXByaW1hcnkgcm91bmRlZC1waWxsIGltYWdlSW5wdXRDb250YWluZXJcIj5cbiAgICAgICAgICA8aW5wdXQgI2ltYWdlSW5wdXQgdHlwZT1cImZpbGVcIiBpZD1cImltYWdlXCIgKGNoYW5nZSk9XCJoYW5kbGVJbWFnZUlucHV0KCRldmVudC50YXJnZXQpXCIgLz5cbiAgICAgICAgICB7eyBpbWFnZUlucHV0VGV4dCB8IHRyYW5zbGF0ZX19PC9sYWJlbD5cbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImN1cnJlbnRJbWFnZSAmJiAhaW1hZ2VUb1VwbG9hZFwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgcm91bmRlZC1waWxsXCJcbiAgICAgICAgICAoY2xpY2spPVwiaW1hZ2VUb0JlRGVsZXRlZD10cnVlO2NsZWFySW1hZ2VGaWxlKClcIj57eydEZWxldGUgcGljdHVyZScgfCB0cmFuc2xhdGUgfX08L2J1dHRvbj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImltYWdlLW5hbWVcIiAqbmdJZj1cImltYWdlVG9VcGxvYWRcIj5cbiAgICAgICAgICA8cD57eyBpbWFnZVRvVXBsb2FkLm5hbWV9fTwvcD5cbiAgICAgICAgICA8ZGl2IChjbGljayk9XCJjbGVhckltYWdlRmlsZSgpXCIgW3N0eWxlLmN1cnNvcl09XCIncG9pbnRlcidcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvbmlmeVwiIGRhdGEtaWNvbj1cIm1kaTp0cmFzaC1jYW4tb3V0bGluZVwiPjwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJtYi0zIHJvd1wiICpuZ0lmPVwiIWxvY2F0aW9uXCI+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbFwiPnt7J0NyZWF0ZSBtaXNzaW9uIGZvciB0aGlzIHNwYWNlJyB8IHRyYW5zbGF0ZX19PC9sYWJlbD5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tM1wiPlxuICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgWyhuZ01vZGVsKV09XCJhZGRNaXNzaW9uRm9yTmV3U3BhY2VcIiBbbmdNb2RlbE9wdGlvbnNdPVwie3N0YW5kYWxvbmU6IHRydWV9XCI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxidXR0b24gZGF0YS10ZXN0aWQ9XCJuZXctbG9jYXRpb24tc3VibWl0LWJ0blwiIFtuZ0NsYXNzXT1cInsnaXMtaW52YWxpZCcgOiBlcnJvckZvcm0gfVwiIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSByb3VuZGVkLXBpbGwgbWUtM1wiPnt7J1NhdmUnIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cblxuICAgIDxidXR0b24gZGF0YS10ZXN0aWQ9XCJuZXctbG9jYXRpb24tY2xvc2UtYnRuXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvbkNhbmNlbCgpXCJcbiAgICAgIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgcm91bmRlZC1waWxsXCI+e3snQ2FuY2VsJyB8XG4gICAgICB0cmFuc2xhdGV9fTwvYnV0dG9uPlxuXG4gICAgPGRpdiBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIiAqbmdJZj1cImVycm9yRm9ybVwiPlxuICAgICAgPG5nYi1hbGVydCBkYXRhLXRlc3RpZD1cIm5ldy1sb2NhdGlvbi1mb3JtLWludmFsaWRcIiBbZGlzbWlzc2libGVdPVwiZmFsc2VcIiB0eXBlPVwiZGFuZ2VyXCI+XG4gICAgICAgIHt7J2Vycm9yRm9ybS5pbmZvQnRuJyB8dHJhbnNsYXRlfX1cblxuICAgICAgPC9uZ2ItYWxlcnQ+XG4gICAgPC9kaXY+XG4gIDwvZm9ybT5cbjwvZGl2PiJdfQ==
@@ -110,10 +110,10 @@ export class ImagesComponent {
110
110
  }
111
111
  }
112
112
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ImagesComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.SpaceService }, { token: i2.VisitService }, { token: i2.NodeService }, { token: i2.NavigatorService }, { token: i1.Router }], target: i0.ɵɵFactoryTarget.Component });
113
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ImagesComponent, selector: "lib-images", ngImport: i0, template: "<div class=\"container-fluid dashboard-tab col-sm-10 mb-3\" *ngIf=\"currentSpace\" >\r\n <div class=\"m-3\">\r\n <lib-tab-navigation [menuItems]='menuItems' (onGoBack)=\"onGoBack()\"></lib-tab-navigation>\r\n </div>\r\n <div class=\"d-flex justify-content-center\" *ngIf=\"loading\">\r\n <div class=\"spinner-border\" role=\"status\">\r\n <span class=\"visually-hidden\">{{'Loading' | translate}}...</span>\r\n </div>\r\n </div>\r\n <div ngbDropdown class=\"d-inline-block\" *ngIf=\"currentSpace.visits && currentSpace.visits.length > 0\">\r\n <button class=\"btn btn-label-file rounded-pill\" id=\"dropdownBasic1\" *ngIf=\"!currentVisit\"\r\n ngbDropdownToggle>{{'Choose 3D visit' | translate}}</button>\r\n <div ngbDropdownMenu aria-labelledby=\"dropdownBasic1\">\r\n <button ngbDropdownItem *ngFor=\"let visit of currentSpace.visits\" (click)=\"setVisit(visit)\"> {{ visit.name }}\r\n </button>\r\n </div>\r\n </div>\r\n <h3 *ngIf=\"currentVisit\">{{ currentVisit.name }}</h3>\r\n <div class=\"mt-3\" *ngIf=\"currentVisit && currentImages.length == 0 && !loading\">\r\n <h4>{{'No imported images' | translate }}</h4>\r\n <p>{{'For import: go Virtual Visits => Import Images' | translate}}</p>\r\n </div>\r\n <button *ngIf=\"currentVisit && currentImages.length > 0 && !loading\"\r\n class=\"btn btn-outline-primary rounded-pill no-lowercase mb-2\" (click)=\"onInventoryClick()\">\r\n {{'Run AI inventory on this image' | translate}}</button>\r\n <lib-carousel [images]=\"currentImages\" *ngIf=\"currentImages\" (currentScan)=\"setCurrentScan($event)\"></lib-carousel>\r\n </div>", styles: [""], dependencies: [{ kind: "directive", type: i3.NgbDropdown, selector: "[ngbDropdown]", inputs: ["autoClose", "dropdownClass", "open", "placement", "popperOptions", "container", "display"], outputs: ["openChange"], exportAs: ["ngbDropdown"] }, { kind: "directive", type: i3.NgbDropdownToggle, selector: "[ngbDropdownToggle]" }, { kind: "directive", type: i3.NgbDropdownMenu, selector: "[ngbDropdownMenu]" }, { kind: "directive", type: i3.NgbDropdownItem, selector: "[ngbDropdownItem]", inputs: ["tabindex", "disabled"] }, { kind: "directive", type: i3.NgbDropdownButtonItem, selector: "button[ngbDropdownItem]" }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.TabNavigationComponent, selector: "lib-tab-navigation", inputs: ["menuItems"], outputs: ["onGoBack"] }, { kind: "component", type: i6.CarouselComponent, selector: "lib-carousel", inputs: ["images"], outputs: ["currentScan"] }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }] });
113
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ImagesComponent, selector: "lib-images", ngImport: i0, template: "<div class=\"container-fluid dashboard-tab col-sm-10 mb-3\" *ngIf=\"currentSpace\" >\n <div class=\"m-3\">\n <lib-tab-navigation [menuItems]='menuItems' (onGoBack)=\"onGoBack()\"></lib-tab-navigation>\n </div>\n <div class=\"d-flex justify-content-center\" *ngIf=\"loading\">\n <div class=\"spinner-border\" role=\"status\">\n <span class=\"visually-hidden\">{{'Loading' | translate}}...</span>\n </div>\n </div>\n <div ngbDropdown class=\"d-inline-block\" *ngIf=\"currentSpace.visits && currentSpace.visits.length > 0\">\n <button class=\"btn btn-label-file rounded-pill\" id=\"dropdownBasic1\" *ngIf=\"!currentVisit\"\n ngbDropdownToggle>{{'Choose 3D visit' | translate}}</button>\n <div ngbDropdownMenu aria-labelledby=\"dropdownBasic1\">\n <button ngbDropdownItem *ngFor=\"let visit of currentSpace.visits\" (click)=\"setVisit(visit)\"> {{ visit.name }}\n </button>\n </div>\n </div>\n <h3 *ngIf=\"currentVisit\">{{ currentVisit.name }}</h3>\n <div class=\"mt-3\" *ngIf=\"currentVisit && currentImages.length == 0 && !loading\">\n <h4>{{'No imported images' | translate }}</h4>\n <p>{{'For import: go Virtual Visits => Import Images' | translate}}</p>\n </div>\n <button *ngIf=\"currentVisit && currentImages.length > 0 && !loading\"\n class=\"btn btn-outline-primary rounded-pill no-lowercase mb-2\" (click)=\"onInventoryClick()\">\n {{'Run AI inventory on this image' | translate}}</button>\n <lib-carousel [images]=\"currentImages\" *ngIf=\"currentImages\" (currentScan)=\"setCurrentScan($event)\"></lib-carousel>\n </div>", styles: [""], dependencies: [{ kind: "directive", type: i3.NgbDropdown, selector: "[ngbDropdown]", inputs: ["autoClose", "dropdownClass", "open", "placement", "popperOptions", "container", "display"], outputs: ["openChange"], exportAs: ["ngbDropdown"] }, { kind: "directive", type: i3.NgbDropdownToggle, selector: "[ngbDropdownToggle]" }, { kind: "directive", type: i3.NgbDropdownMenu, selector: "[ngbDropdownMenu]" }, { kind: "directive", type: i3.NgbDropdownItem, selector: "[ngbDropdownItem]", inputs: ["tabindex", "disabled"] }, { kind: "directive", type: i3.NgbDropdownButtonItem, selector: "button[ngbDropdownItem]" }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.TabNavigationComponent, selector: "lib-tab-navigation", inputs: ["menuItems"], outputs: ["onGoBack"] }, { kind: "component", type: i6.CarouselComponent, selector: "lib-carousel", inputs: ["images"], outputs: ["currentScan"] }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }] });
114
114
  }
115
115
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ImagesComponent, decorators: [{
116
116
  type: Component,
117
- args: [{ selector: 'lib-images', template: "<div class=\"container-fluid dashboard-tab col-sm-10 mb-3\" *ngIf=\"currentSpace\" >\r\n <div class=\"m-3\">\r\n <lib-tab-navigation [menuItems]='menuItems' (onGoBack)=\"onGoBack()\"></lib-tab-navigation>\r\n </div>\r\n <div class=\"d-flex justify-content-center\" *ngIf=\"loading\">\r\n <div class=\"spinner-border\" role=\"status\">\r\n <span class=\"visually-hidden\">{{'Loading' | translate}}...</span>\r\n </div>\r\n </div>\r\n <div ngbDropdown class=\"d-inline-block\" *ngIf=\"currentSpace.visits && currentSpace.visits.length > 0\">\r\n <button class=\"btn btn-label-file rounded-pill\" id=\"dropdownBasic1\" *ngIf=\"!currentVisit\"\r\n ngbDropdownToggle>{{'Choose 3D visit' | translate}}</button>\r\n <div ngbDropdownMenu aria-labelledby=\"dropdownBasic1\">\r\n <button ngbDropdownItem *ngFor=\"let visit of currentSpace.visits\" (click)=\"setVisit(visit)\"> {{ visit.name }}\r\n </button>\r\n </div>\r\n </div>\r\n <h3 *ngIf=\"currentVisit\">{{ currentVisit.name }}</h3>\r\n <div class=\"mt-3\" *ngIf=\"currentVisit && currentImages.length == 0 && !loading\">\r\n <h4>{{'No imported images' | translate }}</h4>\r\n <p>{{'For import: go Virtual Visits => Import Images' | translate}}</p>\r\n </div>\r\n <button *ngIf=\"currentVisit && currentImages.length > 0 && !loading\"\r\n class=\"btn btn-outline-primary rounded-pill no-lowercase mb-2\" (click)=\"onInventoryClick()\">\r\n {{'Run AI inventory on this image' | translate}}</button>\r\n <lib-carousel [images]=\"currentImages\" *ngIf=\"currentImages\" (currentScan)=\"setCurrentScan($event)\"></lib-carousel>\r\n </div>" }]
117
+ args: [{ selector: 'lib-images', template: "<div class=\"container-fluid dashboard-tab col-sm-10 mb-3\" *ngIf=\"currentSpace\" >\n <div class=\"m-3\">\n <lib-tab-navigation [menuItems]='menuItems' (onGoBack)=\"onGoBack()\"></lib-tab-navigation>\n </div>\n <div class=\"d-flex justify-content-center\" *ngIf=\"loading\">\n <div class=\"spinner-border\" role=\"status\">\n <span class=\"visually-hidden\">{{'Loading' | translate}}...</span>\n </div>\n </div>\n <div ngbDropdown class=\"d-inline-block\" *ngIf=\"currentSpace.visits && currentSpace.visits.length > 0\">\n <button class=\"btn btn-label-file rounded-pill\" id=\"dropdownBasic1\" *ngIf=\"!currentVisit\"\n ngbDropdownToggle>{{'Choose 3D visit' | translate}}</button>\n <div ngbDropdownMenu aria-labelledby=\"dropdownBasic1\">\n <button ngbDropdownItem *ngFor=\"let visit of currentSpace.visits\" (click)=\"setVisit(visit)\"> {{ visit.name }}\n </button>\n </div>\n </div>\n <h3 *ngIf=\"currentVisit\">{{ currentVisit.name }}</h3>\n <div class=\"mt-3\" *ngIf=\"currentVisit && currentImages.length == 0 && !loading\">\n <h4>{{'No imported images' | translate }}</h4>\n <p>{{'For import: go Virtual Visits => Import Images' | translate}}</p>\n </div>\n <button *ngIf=\"currentVisit && currentImages.length > 0 && !loading\"\n class=\"btn btn-outline-primary rounded-pill no-lowercase mb-2\" (click)=\"onInventoryClick()\">\n {{'Run AI inventory on this image' | translate}}</button>\n <lib-carousel [images]=\"currentImages\" *ngIf=\"currentImages\" (currentScan)=\"setCurrentScan($event)\"></lib-carousel>\n </div>" }]
118
118
  }], ctorParameters: () => [{ type: i1.ActivatedRoute }, { type: i2.SpaceService }, { type: i2.VisitService }, { type: i2.NodeService }, { type: i2.NavigatorService }, { type: i1.Router }] });
119
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2VzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zbWFydGVycGxhbi1sb2NhdGlvbnMvc3JjL2xpYi9jb21wb25lbnRzL2ltYWdlcy9pbWFnZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWxvY2F0aW9ucy9zcmMvbGliL2NvbXBvbmVudHMvaW1hZ2VzL2ltYWdlcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBRWxELE9BQU8sRUFBbUUsZUFBZSxFQUFvQixNQUFNLG1DQUFtQyxDQUFDO0FBQ3ZKLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7QUFPMUMsTUFBTSxPQUFPLGVBQWU7SUFxQlo7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBeEJaLE1BQU0sQ0FBYTtJQUVuQixPQUFPLENBQVM7SUFFaEIsWUFBWSxDQUFRO0lBRXBCLFlBQVksQ0FBUTtJQUVwQixhQUFhLENBQWE7SUFFMUIsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUVoQixhQUFhLENBQVM7SUFFdEIsU0FBUyxHQUFlLEVBQUUsQ0FBQztJQUUzQixRQUFRLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUV6QixZQUNZLEtBQXFCLEVBQ3JCLFlBQTBCLEVBQzFCLFlBQTBCLEVBQzFCLFdBQXdCLEVBQ3hCLGdCQUFrQyxFQUNsQyxNQUFjO1FBTGQsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDckIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxX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QztJQUM1QixDQUFDO0lBRUQsS0FBSyxDQUFDLGdCQUFnQjtRQUNsQixNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUNuQyxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxzQkFBc0I7UUFDbkYsZ0RBQWdEO1FBQ2hELE1BQU0sa0JBQWtCLEdBQUc7WUFDdkIsZUFBZSxDQUFDLHlCQUF5QjtZQUN6QyxlQUFlLENBQUMsMEJBQTBCO1lBQzFDLGVBQWUsQ0FBQyx3QkFBd0I7U0FDM0MsQ0FBQztRQUNGLElBQ0ksSUFBSSxDQUFDLGVBQWU7WUFDcEIsa0JBQWtCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsRUFDbkQsQ0FBQztZQUNDLEtBQUssQ0FDRCx1RUFBdUUsQ0FDMUUsQ0FBQztRQUNOLENBQUM7YUFBTSxDQUFDO1lBQ0osTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQztnQkFDOUIsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO2dCQUNYLGVBQWUsRUFBRSxlQUFlLENBQUMsZ0JBQWdCO2dCQUNqRCxzQkFBc0IsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNqRCxDQUFDLENBQUM7WUFDSCxLQUFLLENBQ0Qsb0ZBQW9GLENBQ3ZGLENBQUM7UUFDTixDQUFDO0lBQ0wsQ0FBQzt3R0F4SFEsZUFBZTs0RkFBZixlQUFlLGtEQ1Y1QiwrcERBMEJROzs0RkRoQkssZUFBZTtrQkFMM0IsU0FBUzsrQkFDSSxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFNwYWNlLCBWaXNpdCwgTWVudUl0ZW0sIFNwYWNlU2VydmljZSwgVmlzaXRTZXJ2aWNlLCBOb2RlU2VydmljZSwgSW52ZW50b3J5U3RhdHVzLCBOYXZpZ2F0b3JTZXJ2aWNlIH0gZnJvbSAnQHNtYXJ0ZXJwbGFuL25neC1zbWFydGVycGxhbi1jb3JlJztcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnbGliLWltYWdlcycsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vaW1hZ2VzLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2ltYWdlcy5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBJbWFnZXNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICAgIGltYWdlczogQXJyYXk8YW55PjtcclxuXHJcbiAgICBzcGFjZUlEOiBzdHJpbmc7XHJcblxyXG4gICAgY3VycmVudFNwYWNlOiBTcGFjZTtcclxuXHJcbiAgICBjdXJyZW50VmlzaXQ6IFZpc2l0O1xyXG5cclxuICAgIGN1cnJlbnRJbWFnZXM6IEFycmF5PGFueT47XHJcblxyXG4gICAgbG9hZGluZyA9IGZhbHNlO1xyXG5cclxuICAgIGN1cnJlbnRTY2FuSUQ6IHN0cmluZztcclxuXHJcbiAgICBtZW51SXRlbXM6IE1lbnVJdGVtW10gPSBbXTtcclxuXHJcbiAgICBkZXN0cm95JCA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICAgICAgcHJpdmF0ZSBzcGFjZVNlcnZpY2U6IFNwYWNlU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHZpc2l0U2VydmljZTogVmlzaXRTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbm9kZVNlcnZpY2U6IE5vZGVTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbmF2aWdhdG9yU2VydmljZTogTmF2aWdhdG9yU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgKSB7XHJcbiAgICAgICAgdGhpcy5uYXZpZ2F0b3JTZXJ2aWNlLmxvY2F0aW9uSURDaGFuZ2VcclxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChzcGFjZUlEKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCJkYXNoYm9hcmQvbG9jYWxpc2F0aW9uXCIsIHNwYWNlSUQsIFwiaW1hZ2VzXCJdKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMucm91dGUucGFyYW1zLnN1YnNjcmliZSgocGFyYW1zKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc3BhY2VJRCA9IHBhcmFtcy5pZDs7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZEltYWdlcygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcclxuICAgICAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0dXBNZW51SXRlbXMoKSB7XHJcbiAgICAgICAgdGhpcy5tZW51SXRlbXMgPSBbXHJcbiAgICAgICAgICAgIHsgbGFiZWw6IFwiTG9jYXRpb25zXCIsIHVybDogXCIvbG9jYWxpc2F0aW9uXCIgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuY3VycmVudFNwYWNlLm5hbWUsXHJcbiAgICAgICAgICAgICAgICB1cmw6IGAvbG9jYWxpc2F0aW9uLyR7dGhpcy5zcGFjZUlEfWAsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHsgbGFiZWw6IFwiMzYwwrAgSW1hZ2VzXCIgfSxcclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50VmlzaXQpIHtcclxuICAgICAgICAgICAgdGhpcy5tZW51SXRlbXMucHVzaCh7IGxhYmVsOiB0aGlzLmN1cnJlbnRWaXNpdC5uYW1lIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbkdvQmFjaygpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRWaXNpdCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50SW1hZ2VzID0gbnVsbDtcclxuICAgICAgICB0aGlzLnNldHVwTWVudUl0ZW1zKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgbG9hZEltYWdlcygpIHtcclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFNwYWNlID0gYXdhaXQgdGhpcy5zcGFjZVNlcnZpY2UuZ2V0U3BhY2UodGhpcy5zcGFjZUlEKTtcclxuICAgICAgICB0aGlzLnNldHVwTWVudUl0ZW1zKCk7XHJcbiAgICAgICAgdGhpcy5pbWFnZXMgPSBhd2FpdCB0aGlzLnZpc2l0U2VydmljZS5sb2FkSW1hZ2VzRm9yU3BhY2UoXHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFNwYWNlLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFNwYWNlLnZpc2l0cy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRWaXNpdCh0aGlzLmN1cnJlbnRTcGFjZS52aXNpdHNbMF0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRWaXNpdCh2aXNpdCkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFZpc2l0ID0gdmlzaXQ7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50SW1hZ2VzID0gdGhpcy5pbWFnZXMuZmlsdGVyKChpbSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gaW0udmlzaXQgPT09IHZpc2l0O1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuc2V0dXBNZW51SXRlbXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRDdXJyZW50U2NhbihpZCkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFNjYW5JRCA9IGlkO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uSW52ZW50b3J5Q2xpY2soKSB7XHJcbiAgICAgICAgY29uc3QgeyBub2RlIH0gPSB0aGlzLmN1cnJlbnRWaXNpdDtcclxuICAgICAgICBjb25zdCB7IGZpbGVuYW1lIH0gPSB0aGlzLmN1cnJlbnRJbWFnZXNbdGhpcy5jdXJyZW50U2NhbklEXTsgLy8gMTEwZWU0NTJfc3dlZXAuanBlZ1xyXG4gICAgICAgIC8vIGNoZWNrIGlmIG5vZGUgaGFzIGFscmVhZHkgZXJyb3JzIG9mIGludmVudG9yeVxyXG4gICAgICAgIGNvbnN0IG1pc3NpbmdGaWxlc0Vycm9ycyA9IFtcclxuICAgICAgICAgICAgSW52ZW50b3J5U3RhdHVzLkVSUk9SX0ZJTEVfSlNPTl9OT1RfRVhJU1QsXHJcbiAgICAgICAgICAgIEludmVudG9yeVN0YXR1cy5FUlJPUl9GSUxFX01PREVMX05PVF9FWElTVCxcclxuICAgICAgICAgICAgSW52ZW50b3J5U3RhdHVzLkVSUk9SX0ZJTEVfT0JKX05PVF9FWElTVCxcclxuICAgICAgICBdO1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgbm9kZS5pbnZlbnRvcnlTdGF0dXMgJiZcclxuICAgICAgICAgICAgbWlzc2luZ0ZpbGVzRXJyb3JzLmluY2x1ZGVzKG5vZGUuaW52ZW50b3J5U3RhdHVzKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBhbGVydChcclxuICAgICAgICAgICAgICAgIFwiRmlsZXMgbWlzc2luZyBmb3IgdGhpcyB2aXNpdCdzIGludmVudG9yeS4gQ29udGFjdCB5b3VyIGFkbWluaXN0cmF0b3IuXCIsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5ub2RlU2VydmljZS51cGRhdGVOb2RlKHtcclxuICAgICAgICAgICAgICAgIGlkOiBub2RlLmlkLFxyXG4gICAgICAgICAgICAgICAgaW52ZW50b3J5U3RhdHVzOiBJbnZlbnRvcnlTdGF0dXMuVE9fUlVOX09ORV9JTUFHRSxcclxuICAgICAgICAgICAgICAgIG5hdmlnYXRpb25Gb3JJbnZlbnRvcnk6IGZpbGVuYW1lLnNwbGl0KFwiX1wiKVswXSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGFsZXJ0KFxyXG4gICAgICAgICAgICAgICAgXCJBdXRvbWF0aWMgQUkgSW52ZW50b3J5IHN0YXJ0ZWQhIERldGVjdGVkIGVxdWlwbWVudHMgd2lsbCBhcHBlYXIgc29vbiBpbiB0aGUgdmlzaXQuXCIsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkIGRhc2hib2FyZC10YWIgY29sLXNtLTEwIG1iLTNcIiAqbmdJZj1cImN1cnJlbnRTcGFjZVwiID5cclxuICAgIDxkaXYgY2xhc3M9XCJtLTNcIj5cclxuICAgICAgPGxpYi10YWItbmF2aWdhdGlvbiBbbWVudUl0ZW1zXT0nbWVudUl0ZW1zJyAob25Hb0JhY2spPVwib25Hb0JhY2soKVwiPjwvbGliLXRhYi1uYXZpZ2F0aW9uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIiAqbmdJZj1cImxvYWRpbmdcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInNwaW5uZXItYm9yZGVyXCIgcm9sZT1cInN0YXR1c1wiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwidmlzdWFsbHktaGlkZGVuXCI+e3snTG9hZGluZycgfCB0cmFuc2xhdGV9fS4uLjwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgbmdiRHJvcGRvd24gY2xhc3M9XCJkLWlubGluZS1ibG9ja1wiICpuZ0lmPVwiY3VycmVudFNwYWNlLnZpc2l0cyAmJiBjdXJyZW50U3BhY2UudmlzaXRzLmxlbmd0aCA+IDBcIj5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tbGFiZWwtZmlsZSByb3VuZGVkLXBpbGxcIiBpZD1cImRyb3Bkb3duQmFzaWMxXCIgKm5nSWY9XCIhY3VycmVudFZpc2l0XCJcclxuICAgICAgICBuZ2JEcm9wZG93blRvZ2dsZT57eydDaG9vc2UgM0QgdmlzaXQnIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cclxuICAgICAgPGRpdiBuZ2JEcm9wZG93bk1lbnUgYXJpYS1sYWJlbGxlZGJ5PVwiZHJvcGRvd25CYXNpYzFcIj5cclxuICAgICAgICA8YnV0dG9uIG5nYkRyb3Bkb3duSXRlbSAqbmdGb3I9XCJsZXQgdmlzaXQgb2YgY3VycmVudFNwYWNlLnZpc2l0c1wiIChjbGljayk9XCJzZXRWaXNpdCh2aXNpdClcIj4ge3sgdmlzaXQubmFtZSB9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGgzICpuZ0lmPVwiY3VycmVudFZpc2l0XCI+e3sgY3VycmVudFZpc2l0Lm5hbWUgfX08L2gzPlxyXG4gICAgPGRpdiBjbGFzcz1cIm10LTNcIiAqbmdJZj1cImN1cnJlbnRWaXNpdCAmJiBjdXJyZW50SW1hZ2VzLmxlbmd0aCA9PSAwICYmICFsb2FkaW5nXCI+XHJcbiAgICAgIDxoND57eydObyBpbXBvcnRlZCBpbWFnZXMnIHwgdHJhbnNsYXRlIH19PC9oND5cclxuICAgICAgPHA+e3snRm9yIGltcG9ydDogZ28gVmlydHVhbCBWaXNpdHMgPT4gSW1wb3J0IEltYWdlcycgfCB0cmFuc2xhdGV9fTwvcD5cclxuICAgIDwvZGl2PlxyXG4gICAgPGJ1dHRvbiAqbmdJZj1cImN1cnJlbnRWaXNpdCAmJiBjdXJyZW50SW1hZ2VzLmxlbmd0aCA+IDAgJiYgIWxvYWRpbmdcIlxyXG4gICAgICBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IHJvdW5kZWQtcGlsbCBuby1sb3dlcmNhc2UgbWItMlwiIChjbGljayk9XCJvbkludmVudG9yeUNsaWNrKClcIj5cclxuICAgICAge3snUnVuIEFJIGludmVudG9yeSBvbiB0aGlzIGltYWdlJyB8IHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICA8bGliLWNhcm91c2VsIFtpbWFnZXNdPVwiY3VycmVudEltYWdlc1wiICpuZ0lmPVwiY3VycmVudEltYWdlc1wiIChjdXJyZW50U2Nhbik9XCJzZXRDdXJyZW50U2NhbigkZXZlbnQpXCI+PC9saWItY2Fyb3VzZWw+XHJcbiAgPC9kaXY+Il19
119
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2VzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zbWFydGVycGxhbi1sb2NhdGlvbnMvc3JjL2xpYi9jb21wb25lbnRzL2ltYWdlcy9pbWFnZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWxvY2F0aW9ucy9zcmMvbGliL2NvbXBvbmVudHMvaW1hZ2VzL2ltYWdlcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBRWxELE9BQU8sRUFBbUUsZUFBZSxFQUFvQixNQUFNLG1DQUFtQyxDQUFDO0FBQ3ZKLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7QUFPMUMsTUFBTSxPQUFPLGVBQWU7SUFxQlo7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBeEJaLE1BQU0sQ0FBYTtJQUVuQixPQUFPLENBQVM7SUFFaEIsWUFBWSxDQUFRO0lBRXBCLFlBQVksQ0FBUTtJQUVwQixhQUFhLENBQWE7SUFFMUIsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUVoQixhQUFhLENBQVM7SUFFdEIsU0FBUyxHQUFlLEVBQUUsQ0FBQztJQUUzQixRQUFRLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUV6QixZQUNZLEtBQXFCLEVBQ3JCLFlBQTBCLEVBQzFCLFlBQTBCLEVBQzFCLFdBQXdCLEVBQ3hCLGdCQUFrQyxFQUNsQyxNQUFjO1FBTGQsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDckIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBRXRCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0I7YUFDakMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDOUIsU0FBUyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDbkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyx3QkFBd0IsRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUN4RSxDQUFDLENBQUMsQ0FBQztRQUVQLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ25DLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUFBLENBQUM7WUFDMUIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3RCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFFBQVE7SUFDUixDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELGNBQWM7UUFDVixJQUFJLENBQUMsU0FBUyxHQUFHO1lBQ2IsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxlQUFlLEVBQUU7WUFDNUM7Z0JBQ0ksS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSTtnQkFDN0IsR0FBRyxFQUFFLGlCQUFpQixJQUFJLENBQUMsT0FBTyxFQUFFO2FBQ3ZDO1lBQ0QsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFO1NBQzNCLENBQUM7UUFFRixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDM0QsQ0FBQztJQUNMLENBQUM7SUFFRCxRQUFRO1FBQ0osSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDekIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFDMUIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVTtRQUNaLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUNwRCxJQUFJLENBQUMsWUFBWSxDQUNwQixDQUFDO1FBQ0YsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDeEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9DLENBQUM7UUFDRCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUN6QixDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQUs7UUFDVixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUMxQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUU7WUFDM0MsT0FBTyxFQUFFLENBQUMsS0FBSyxLQUFLLEtBQUssQ0FBQztRQUM5QixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsY0FBYyxDQUFDLEVBQUU7UUFDYixJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsS0FBSyxDQUFDLGdCQUFnQjtRQUNsQixNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUNuQyxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxzQkFBc0I7UUFDbkYsZ0RBQWdEO1FBQ2hELE1BQU0sa0JBQWtCLEdBQUc7WUFDdkIsZUFBZSxDQUFDLHlCQUF5QjtZQUN6QyxlQUFlLENBQUMsMEJBQTBCO1lBQzFDLGVBQWUsQ0FBQyx3QkFBd0I7U0FDM0MsQ0FBQztRQUNGLElBQ0ksSUFBSSxDQUFDLGVBQWU7WUFDcEIsa0JBQWtCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsRUFDbkQsQ0FBQztZQUNDLEtBQUssQ0FDRCx1RUFBdUUsQ0FDMUUsQ0FBQztRQUNOLENBQUM7YUFBTSxDQUFDO1lBQ0osTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQztnQkFDOUIsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO2dCQUNYLGVBQWUsRUFBRSxlQUFlLENBQUMsZ0JBQWdCO2dCQUNqRCxzQkFBc0IsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNqRCxDQUFDLENBQUM7WUFDSCxLQUFLLENBQ0Qsb0ZBQW9GLENBQ3ZGLENBQUM7UUFDTixDQUFDO0lBQ0wsQ0FBQzt3R0F4SFEsZUFBZTs0RkFBZixlQUFlLGtEQ1Y1QiwybURBMEJROzs0RkRoQkssZUFBZTtrQkFMM0IsU0FBUzsrQkFDSSxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgU3BhY2UsIFZpc2l0LCBNZW51SXRlbSwgU3BhY2VTZXJ2aWNlLCBWaXNpdFNlcnZpY2UsIE5vZGVTZXJ2aWNlLCBJbnZlbnRvcnlTdGF0dXMsIE5hdmlnYXRvclNlcnZpY2UgfSBmcm9tICdAc21hcnRlcnBsYW4vbmd4LXNtYXJ0ZXJwbGFuLWNvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbGliLWltYWdlcycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2ltYWdlcy5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vaW1hZ2VzLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgSW1hZ2VzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICAgIGltYWdlczogQXJyYXk8YW55PjtcblxuICAgIHNwYWNlSUQ6IHN0cmluZztcblxuICAgIGN1cnJlbnRTcGFjZTogU3BhY2U7XG5cbiAgICBjdXJyZW50VmlzaXQ6IFZpc2l0O1xuXG4gICAgY3VycmVudEltYWdlczogQXJyYXk8YW55PjtcblxuICAgIGxvYWRpbmcgPSBmYWxzZTtcblxuICAgIGN1cnJlbnRTY2FuSUQ6IHN0cmluZztcblxuICAgIG1lbnVJdGVtczogTWVudUl0ZW1bXSA9IFtdO1xuXG4gICAgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICBwcml2YXRlIHNwYWNlU2VydmljZTogU3BhY2VTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHZpc2l0U2VydmljZTogVmlzaXRTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG5vZGVTZXJ2aWNlOiBOb2RlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBuYXZpZ2F0b3JTZXJ2aWNlOiBOYXZpZ2F0b3JTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgICkge1xuICAgICAgICB0aGlzLm5hdmlnYXRvclNlcnZpY2UubG9jYXRpb25JRENoYW5nZVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoc3BhY2VJRCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcImRhc2hib2FyZC9sb2NhbGlzYXRpb25cIiwgc3BhY2VJRCwgXCJpbWFnZXNcIl0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5yb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKChwYXJhbXMpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3BhY2VJRCA9IHBhcmFtcy5pZDs7XG4gICAgICAgICAgICB0aGlzLmxvYWRJbWFnZXMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIHNldHVwTWVudUl0ZW1zKCkge1xuICAgICAgICB0aGlzLm1lbnVJdGVtcyA9IFtcbiAgICAgICAgICAgIHsgbGFiZWw6IFwiTG9jYXRpb25zXCIsIHVybDogXCIvbG9jYWxpc2F0aW9uXCIgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5jdXJyZW50U3BhY2UubmFtZSxcbiAgICAgICAgICAgICAgICB1cmw6IGAvbG9jYWxpc2F0aW9uLyR7dGhpcy5zcGFjZUlEfWAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeyBsYWJlbDogXCIzNjDCsCBJbWFnZXNcIiB9LFxuICAgICAgICBdO1xuXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRWaXNpdCkge1xuICAgICAgICAgICAgdGhpcy5tZW51SXRlbXMucHVzaCh7IGxhYmVsOiB0aGlzLmN1cnJlbnRWaXNpdC5uYW1lIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Hb0JhY2soKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZpc2l0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5jdXJyZW50SW1hZ2VzID0gbnVsbDtcbiAgICAgICAgdGhpcy5zZXR1cE1lbnVJdGVtcygpO1xuICAgIH1cblxuICAgIGFzeW5jIGxvYWRJbWFnZXMoKSB7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuY3VycmVudFNwYWNlID0gYXdhaXQgdGhpcy5zcGFjZVNlcnZpY2UuZ2V0U3BhY2UodGhpcy5zcGFjZUlEKTtcbiAgICAgICAgdGhpcy5zZXR1cE1lbnVJdGVtcygpO1xuICAgICAgICB0aGlzLmltYWdlcyA9IGF3YWl0IHRoaXMudmlzaXRTZXJ2aWNlLmxvYWRJbWFnZXNGb3JTcGFjZShcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFNwYWNlLFxuICAgICAgICApO1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50U3BhY2UudmlzaXRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgdGhpcy5zZXRWaXNpdCh0aGlzLmN1cnJlbnRTcGFjZS52aXNpdHNbMF0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgIH1cblxuICAgIHNldFZpc2l0KHZpc2l0KSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZpc2l0ID0gdmlzaXQ7XG4gICAgICAgIHRoaXMuY3VycmVudEltYWdlcyA9IHRoaXMuaW1hZ2VzLmZpbHRlcigoaW0pID0+IHtcbiAgICAgICAgICAgIHJldHVybiBpbS52aXNpdCA9PT0gdmlzaXQ7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNldHVwTWVudUl0ZW1zKCk7XG4gICAgfVxuXG4gICAgc2V0Q3VycmVudFNjYW4oaWQpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50U2NhbklEID0gaWQ7XG4gICAgfVxuXG4gICAgYXN5bmMgb25JbnZlbnRvcnlDbGljaygpIHtcbiAgICAgICAgY29uc3QgeyBub2RlIH0gPSB0aGlzLmN1cnJlbnRWaXNpdDtcbiAgICAgICAgY29uc3QgeyBmaWxlbmFtZSB9ID0gdGhpcy5jdXJyZW50SW1hZ2VzW3RoaXMuY3VycmVudFNjYW5JRF07IC8vIDExMGVlNDUyX3N3ZWVwLmpwZWdcbiAgICAgICAgLy8gY2hlY2sgaWYgbm9kZSBoYXMgYWxyZWFkeSBlcnJvcnMgb2YgaW52ZW50b3J5XG4gICAgICAgIGNvbnN0IG1pc3NpbmdGaWxlc0Vycm9ycyA9IFtcbiAgICAgICAgICAgIEludmVudG9yeVN0YXR1cy5FUlJPUl9GSUxFX0pTT05fTk9UX0VYSVNULFxuICAgICAgICAgICAgSW52ZW50b3J5U3RhdHVzLkVSUk9SX0ZJTEVfTU9ERUxfTk9UX0VYSVNULFxuICAgICAgICAgICAgSW52ZW50b3J5U3RhdHVzLkVSUk9SX0ZJTEVfT0JKX05PVF9FWElTVCxcbiAgICAgICAgXTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgbm9kZS5pbnZlbnRvcnlTdGF0dXMgJiZcbiAgICAgICAgICAgIG1pc3NpbmdGaWxlc0Vycm9ycy5pbmNsdWRlcyhub2RlLmludmVudG9yeVN0YXR1cylcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBhbGVydChcbiAgICAgICAgICAgICAgICBcIkZpbGVzIG1pc3NpbmcgZm9yIHRoaXMgdmlzaXQncyBpbnZlbnRvcnkuIENvbnRhY3QgeW91ciBhZG1pbmlzdHJhdG9yLlwiLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMubm9kZVNlcnZpY2UudXBkYXRlTm9kZSh7XG4gICAgICAgICAgICAgICAgaWQ6IG5vZGUuaWQsXG4gICAgICAgICAgICAgICAgaW52ZW50b3J5U3RhdHVzOiBJbnZlbnRvcnlTdGF0dXMuVE9fUlVOX09ORV9JTUFHRSxcbiAgICAgICAgICAgICAgICBuYXZpZ2F0aW9uRm9ySW52ZW50b3J5OiBmaWxlbmFtZS5zcGxpdChcIl9cIilbMF0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGFsZXJ0KFxuICAgICAgICAgICAgICAgIFwiQXV0b21hdGljIEFJIEludmVudG9yeSBzdGFydGVkISBEZXRlY3RlZCBlcXVpcG1lbnRzIHdpbGwgYXBwZWFyIHNvb24gaW4gdGhlIHZpc2l0LlwiLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxufVxuIiwiPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZCBkYXNoYm9hcmQtdGFiIGNvbC1zbS0xMCBtYi0zXCIgKm5nSWY9XCJjdXJyZW50U3BhY2VcIiA+XG4gICAgPGRpdiBjbGFzcz1cIm0tM1wiPlxuICAgICAgPGxpYi10YWItbmF2aWdhdGlvbiBbbWVudUl0ZW1zXT0nbWVudUl0ZW1zJyAob25Hb0JhY2spPVwib25Hb0JhY2soKVwiPjwvbGliLXRhYi1uYXZpZ2F0aW9uPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiICpuZ0lmPVwibG9hZGluZ1wiPlxuICAgICAgPGRpdiBjbGFzcz1cInNwaW5uZXItYm9yZGVyXCIgcm9sZT1cInN0YXR1c1wiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInZpc3VhbGx5LWhpZGRlblwiPnt7J0xvYWRpbmcnIHwgdHJhbnNsYXRlfX0uLi48L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IG5nYkRyb3Bkb3duIGNsYXNzPVwiZC1pbmxpbmUtYmxvY2tcIiAqbmdJZj1cImN1cnJlbnRTcGFjZS52aXNpdHMgJiYgY3VycmVudFNwYWNlLnZpc2l0cy5sZW5ndGggPiAwXCI+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1sYWJlbC1maWxlIHJvdW5kZWQtcGlsbFwiIGlkPVwiZHJvcGRvd25CYXNpYzFcIiAqbmdJZj1cIiFjdXJyZW50VmlzaXRcIlxuICAgICAgICBuZ2JEcm9wZG93blRvZ2dsZT57eydDaG9vc2UgM0QgdmlzaXQnIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cbiAgICAgIDxkaXYgbmdiRHJvcGRvd25NZW51IGFyaWEtbGFiZWxsZWRieT1cImRyb3Bkb3duQmFzaWMxXCI+XG4gICAgICAgIDxidXR0b24gbmdiRHJvcGRvd25JdGVtICpuZ0Zvcj1cImxldCB2aXNpdCBvZiBjdXJyZW50U3BhY2UudmlzaXRzXCIgKGNsaWNrKT1cInNldFZpc2l0KHZpc2l0KVwiPiB7eyB2aXNpdC5uYW1lIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGgzICpuZ0lmPVwiY3VycmVudFZpc2l0XCI+e3sgY3VycmVudFZpc2l0Lm5hbWUgfX08L2gzPlxuICAgIDxkaXYgY2xhc3M9XCJtdC0zXCIgKm5nSWY9XCJjdXJyZW50VmlzaXQgJiYgY3VycmVudEltYWdlcy5sZW5ndGggPT0gMCAmJiAhbG9hZGluZ1wiPlxuICAgICAgPGg0Pnt7J05vIGltcG9ydGVkIGltYWdlcycgfCB0cmFuc2xhdGUgfX08L2g0PlxuICAgICAgPHA+e3snRm9yIGltcG9ydDogZ28gVmlydHVhbCBWaXNpdHMgPT4gSW1wb3J0IEltYWdlcycgfCB0cmFuc2xhdGV9fTwvcD5cbiAgICA8L2Rpdj5cbiAgICA8YnV0dG9uICpuZ0lmPVwiY3VycmVudFZpc2l0ICYmIGN1cnJlbnRJbWFnZXMubGVuZ3RoID4gMCAmJiAhbG9hZGluZ1wiXG4gICAgICBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IHJvdW5kZWQtcGlsbCBuby1sb3dlcmNhc2UgbWItMlwiIChjbGljayk9XCJvbkludmVudG9yeUNsaWNrKClcIj5cbiAgICAgIHt7J1J1biBBSSBpbnZlbnRvcnkgb24gdGhpcyBpbWFnZScgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxuICAgIDxsaWItY2Fyb3VzZWwgW2ltYWdlc109XCJjdXJyZW50SW1hZ2VzXCIgKm5nSWY9XCJjdXJyZW50SW1hZ2VzXCIgKGN1cnJlbnRTY2FuKT1cInNldEN1cnJlbnRTY2FuKCRldmVudClcIj48L2xpYi1jYXJvdXNlbD5cbiAgPC9kaXY+Il19
@@ -169,11 +169,11 @@ export class LandmarkPickerComponent {
169
169
  }
170
170
  }
171
171
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LandmarkPickerComponent, deps: [{ token: i1.ViewerService }, { token: i2.TranslateService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
172
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: LandmarkPickerComponent, selector: "lib-landmark-picker", inputs: { visit3dModel: "visit3dModel", sdkKey: "sdkKey", title: "title", value: "value" }, outputs: { pointPicked: "pointPicked" }, viewQueries: [{ propertyName: "iframeRef", first: true, predicate: ["mpFrame"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"landmark-picker border rounded p-2\">\r\n <p *ngIf=\"title\" class=\"fw-bold small mb-1\">{{ title }}</p>\r\n\r\n <iframe #mpFrame width=\"100%\" height=\"380\" frameborder=\"0\" allow=\"xr-spatial-tracking\" allowfullscreen></iframe>\r\n\r\n <div *ngIf=\"loadError\" class=\"text-danger small mt-1\">{{ loadError }}</div>\r\n\r\n <div class=\"d-flex align-items-center mt-2 mb-2\">\r\n <button type=\"button\" class=\"btn btn-sm btn-outline-primary me-3\" [disabled]=\"!isReady\"\r\n (click)=\"startPicking()\">\r\n {{ (isPicking ? 'landmarkPicker.pickButtonPicking' : (lastPicked ? 'landmarkPicker.pickButtonAgain' :\r\n 'landmarkPicker.pickButtonInitial')) | translate }}\r\n </button>\r\n </div>\r\n\r\n <!-- Manual coordinate entry -->\r\n <div class=\"row g-1 align-items-center\">\r\n <div class=\"col-3\">\r\n <input type=\"number\" step=\"0.001\" class=\"form-control form-control-sm\"\r\n [placeholder]=\"'landmarkPicker.placeholderX' | translate\" [(ngModel)]=\"manualX\">\r\n </div>\r\n <div class=\"col-3\">\r\n <input type=\"number\" step=\"0.001\" class=\"form-control form-control-sm\"\r\n [placeholder]=\"'landmarkPicker.placeholderY' | translate\" [(ngModel)]=\"manualY\">\r\n </div>\r\n <div class=\"col-3\">\r\n <input type=\"number\" step=\"0.001\" class=\"form-control form-control-sm\"\r\n [placeholder]=\"'landmarkPicker.placeholderZ' | translate\" [(ngModel)]=\"manualZ\">\r\n </div>\r\n <div class=\"col-3\">\r\n <button type=\"button\" class=\"btn btn-sm btn-outline-secondary w-100\" (click)=\"applyManualCoordinates()\">\r\n {{ 'landmarkPicker.apply' | translate }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <span *ngIf=\"lastPicked\" class=\"text-success small d-block mt-1\">\r\n {{ 'landmarkPicker.confirmed' | translate: { x: lastPicked.x.toFixed(3), y: lastPicked.y.toFixed(3), z:\r\n lastPicked.z.toFixed(3) } }}\r\n </span>\r\n</div>", styles: [""], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { 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: "pipe", type: i2.TranslatePipe, name: "translate" }] });
172
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: LandmarkPickerComponent, selector: "lib-landmark-picker", inputs: { visit3dModel: "visit3dModel", sdkKey: "sdkKey", title: "title", value: "value" }, outputs: { pointPicked: "pointPicked" }, viewQueries: [{ propertyName: "iframeRef", first: true, predicate: ["mpFrame"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"landmark-picker border rounded p-2\">\n <p *ngIf=\"title\" class=\"fw-bold small mb-1\">{{ title }}</p>\n\n <iframe #mpFrame width=\"100%\" height=\"380\" frameborder=\"0\" allow=\"xr-spatial-tracking\" allowfullscreen></iframe>\n\n <div *ngIf=\"loadError\" class=\"text-danger small mt-1\">{{ loadError }}</div>\n\n <div class=\"d-flex align-items-center mt-2 mb-2\">\n <button type=\"button\" class=\"btn btn-sm btn-outline-primary me-3\" [disabled]=\"!isReady\"\n (click)=\"startPicking()\">\n {{ (isPicking ? 'landmarkPicker.pickButtonPicking' : (lastPicked ? 'landmarkPicker.pickButtonAgain' :\n 'landmarkPicker.pickButtonInitial')) | translate }}\n </button>\n </div>\n\n <!-- Manual coordinate entry -->\n <div class=\"row g-1 align-items-center\">\n <div class=\"col-3\">\n <input type=\"number\" step=\"0.001\" class=\"form-control form-control-sm\"\n [placeholder]=\"'landmarkPicker.placeholderX' | translate\" [(ngModel)]=\"manualX\">\n </div>\n <div class=\"col-3\">\n <input type=\"number\" step=\"0.001\" class=\"form-control form-control-sm\"\n [placeholder]=\"'landmarkPicker.placeholderY' | translate\" [(ngModel)]=\"manualY\">\n </div>\n <div class=\"col-3\">\n <input type=\"number\" step=\"0.001\" class=\"form-control form-control-sm\"\n [placeholder]=\"'landmarkPicker.placeholderZ' | translate\" [(ngModel)]=\"manualZ\">\n </div>\n <div class=\"col-3\">\n <button type=\"button\" class=\"btn btn-sm btn-outline-secondary w-100\" (click)=\"applyManualCoordinates()\">\n {{ 'landmarkPicker.apply' | translate }}\n </button>\n </div>\n </div>\n\n <span *ngIf=\"lastPicked\" class=\"text-success small d-block mt-1\">\n {{ 'landmarkPicker.confirmed' | translate: { x: lastPicked.x.toFixed(3), y: lastPicked.y.toFixed(3), z:\n lastPicked.z.toFixed(3) } }}\n </span>\n</div>", styles: [""], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { 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: "pipe", type: i2.TranslatePipe, name: "translate" }] });
173
173
  }
174
174
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LandmarkPickerComponent, decorators: [{
175
175
  type: Component,
176
- args: [{ selector: 'lib-landmark-picker', template: "<div class=\"landmark-picker border rounded p-2\">\r\n <p *ngIf=\"title\" class=\"fw-bold small mb-1\">{{ title }}</p>\r\n\r\n <iframe #mpFrame width=\"100%\" height=\"380\" frameborder=\"0\" allow=\"xr-spatial-tracking\" allowfullscreen></iframe>\r\n\r\n <div *ngIf=\"loadError\" class=\"text-danger small mt-1\">{{ loadError }}</div>\r\n\r\n <div class=\"d-flex align-items-center mt-2 mb-2\">\r\n <button type=\"button\" class=\"btn btn-sm btn-outline-primary me-3\" [disabled]=\"!isReady\"\r\n (click)=\"startPicking()\">\r\n {{ (isPicking ? 'landmarkPicker.pickButtonPicking' : (lastPicked ? 'landmarkPicker.pickButtonAgain' :\r\n 'landmarkPicker.pickButtonInitial')) | translate }}\r\n </button>\r\n </div>\r\n\r\n <!-- Manual coordinate entry -->\r\n <div class=\"row g-1 align-items-center\">\r\n <div class=\"col-3\">\r\n <input type=\"number\" step=\"0.001\" class=\"form-control form-control-sm\"\r\n [placeholder]=\"'landmarkPicker.placeholderX' | translate\" [(ngModel)]=\"manualX\">\r\n </div>\r\n <div class=\"col-3\">\r\n <input type=\"number\" step=\"0.001\" class=\"form-control form-control-sm\"\r\n [placeholder]=\"'landmarkPicker.placeholderY' | translate\" [(ngModel)]=\"manualY\">\r\n </div>\r\n <div class=\"col-3\">\r\n <input type=\"number\" step=\"0.001\" class=\"form-control form-control-sm\"\r\n [placeholder]=\"'landmarkPicker.placeholderZ' | translate\" [(ngModel)]=\"manualZ\">\r\n </div>\r\n <div class=\"col-3\">\r\n <button type=\"button\" class=\"btn btn-sm btn-outline-secondary w-100\" (click)=\"applyManualCoordinates()\">\r\n {{ 'landmarkPicker.apply' | translate }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <span *ngIf=\"lastPicked\" class=\"text-success small d-block mt-1\">\r\n {{ 'landmarkPicker.confirmed' | translate: { x: lastPicked.x.toFixed(3), y: lastPicked.y.toFixed(3), z:\r\n lastPicked.z.toFixed(3) } }}\r\n </span>\r\n</div>" }]
176
+ args: [{ selector: 'lib-landmark-picker', template: "<div class=\"landmark-picker border rounded p-2\">\n <p *ngIf=\"title\" class=\"fw-bold small mb-1\">{{ title }}</p>\n\n <iframe #mpFrame width=\"100%\" height=\"380\" frameborder=\"0\" allow=\"xr-spatial-tracking\" allowfullscreen></iframe>\n\n <div *ngIf=\"loadError\" class=\"text-danger small mt-1\">{{ loadError }}</div>\n\n <div class=\"d-flex align-items-center mt-2 mb-2\">\n <button type=\"button\" class=\"btn btn-sm btn-outline-primary me-3\" [disabled]=\"!isReady\"\n (click)=\"startPicking()\">\n {{ (isPicking ? 'landmarkPicker.pickButtonPicking' : (lastPicked ? 'landmarkPicker.pickButtonAgain' :\n 'landmarkPicker.pickButtonInitial')) | translate }}\n </button>\n </div>\n\n <!-- Manual coordinate entry -->\n <div class=\"row g-1 align-items-center\">\n <div class=\"col-3\">\n <input type=\"number\" step=\"0.001\" class=\"form-control form-control-sm\"\n [placeholder]=\"'landmarkPicker.placeholderX' | translate\" [(ngModel)]=\"manualX\">\n </div>\n <div class=\"col-3\">\n <input type=\"number\" step=\"0.001\" class=\"form-control form-control-sm\"\n [placeholder]=\"'landmarkPicker.placeholderY' | translate\" [(ngModel)]=\"manualY\">\n </div>\n <div class=\"col-3\">\n <input type=\"number\" step=\"0.001\" class=\"form-control form-control-sm\"\n [placeholder]=\"'landmarkPicker.placeholderZ' | translate\" [(ngModel)]=\"manualZ\">\n </div>\n <div class=\"col-3\">\n <button type=\"button\" class=\"btn btn-sm btn-outline-secondary w-100\" (click)=\"applyManualCoordinates()\">\n {{ 'landmarkPicker.apply' | translate }}\n </button>\n </div>\n </div>\n\n <span *ngIf=\"lastPicked\" class=\"text-success small d-block mt-1\">\n {{ 'landmarkPicker.confirmed' | translate: { x: lastPicked.x.toFixed(3), y: lastPicked.y.toFixed(3), z:\n lastPicked.z.toFixed(3) } }}\n </span>\n</div>" }]
177
177
  }], ctorParameters: () => [{ type: i1.ViewerService }, { type: i2.TranslateService }, { type: i0.NgZone }], propDecorators: { visit3dModel: [{
178
178
  type: Input
179
179
  }], sdkKey: [{
@@ -188,4 +188,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
188
188
  type: ViewChild,
189
189
  args: ['mpFrame', { static: true }]
190
190
  }] } });
191
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFuZG1hcmstcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zbWFydGVycGxhbi1sb2NhdGlvbnMvc3JjL2xpYi9jb21wb25lbnRzL2xhbmRtYXJrLXBpY2tlci9sYW5kbWFyay1waWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWxvY2F0aW9ucy9zcmMvbGliL2NvbXBvbmVudHMvbGFuZG1hcmstcGlja2VyL2xhbmRtYXJrLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUNjLFNBQVMsRUFDaEUsTUFBTSxlQUFlLENBQUM7Ozs7OztBQVN2QixNQUFNLE9BQU8sdUJBQXVCO0lBeUNwQjtJQUNBO0lBQ0E7SUF6Q1osMkJBQTJCO0lBQ2xCLFlBQVksQ0FBUztJQUNyQixNQUFNLENBQVM7SUFDZixLQUFLLEdBQUcsRUFBRSxDQUFDO0lBRXBCLDZFQUE2RTtJQUM3RSxJQUFhLEtBQUssQ0FBQyxDQUFjO1FBQzdCLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDSixJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ25CLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QixDQUFDO0lBQ0wsQ0FBQztJQUVTLFdBQVcsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO0lBRVQsU0FBUyxDQUFnQztJQUVqRiwrQ0FBK0M7SUFDL0MsVUFBVSxHQUFnQixJQUFJLENB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R0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxvQkFBb0IsQ0FBQyxPQUFnQjtRQUN6QyxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsR0FBRyxPQUFPLENBQUM7UUFDL0QsQ0FBQztJQUNMLENBQUM7d0dBeExRLHVCQUF1Qjs0RkFBdkIsdUJBQXVCLHlVQ1pwQyxvbUVBd0NNOzs0RkQ1Qk8sdUJBQXVCO2tCQUxuQyxTQUFTOytCQUNJLHFCQUFxQjtzSUFPdEIsWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUdPLEtBQUs7c0JBQWpCLEtBQUs7Z0JBU0ksV0FBVztzQkFBcEIsTUFBTTtnQkFFaUMsU0FBUztzQkFBaEQsU0FBUzt1QkFBQyxTQUFTLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBOZ1pvbmUsXHJcbiAgICBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkLCBFbGVtZW50UmVmXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgVmVjMywgVmlld2VyU2VydmljZSB9IGZyb20gJ0BzbWFydGVycGxhbi9uZ3gtc21hcnRlcnBsYW4tY29yZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnbGliLWxhbmRtYXJrLXBpY2tlcicsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vbGFuZG1hcmstcGlja2VyLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2xhbmRtYXJrLXBpY2tlci5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMYW5kbWFya1BpY2tlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuXHJcbiAgICAvLyAtLS0gSW5wdXRzIC8gT3V0cHV0cyAtLS1cclxuICAgIEBJbnB1dCgpIHZpc2l0M2RNb2RlbDogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgc2RrS2V5OiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSB0aXRsZSA9ICcnO1xyXG5cclxuICAgIC8vIEFsbG93cyBhIHBhcmVudCBjb21wb25lbnQgdG8gcHJlLWZpbGwgYSBsYW5kbWFyayAoZS5nLiBmcm9tIGEgSlNPTiBpbXBvcnQpXHJcbiAgICBASW5wdXQoKSBzZXQgdmFsdWUodjogVmVjMyB8IG51bGwpIHtcclxuICAgICAgICBpZiAodikge1xyXG4gICAgICAgICAgICB0aGlzLmxhc3RQaWNrZWQgPSB7IC4uLnYgfTtcclxuICAgICAgICAgICAgdGhpcy5tYW51YWxYID0gdi54O1xyXG4gICAgICAgICAgICB0aGlzLm1hbnVhbFkgPSB2Lnk7XHJcbiAgICAgICAgICAgIHRoaXMubWFudWFsWiA9IHYuejtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgQE91dHB1dCgpIHBvaW50UGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjxWZWMzPigpO1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ21wRnJhbWUnLCB7IHN0YXRpYzogdHJ1ZSB9KSBpZnJhbWVSZWY6IEVsZW1lbnRSZWY8SFRNTElGcmFtZUVsZW1lbnQ+O1xyXG5cclxuICAgIC8vIC0tLSBQdWJsaWMgc3RhdGUgKGJvdW5kIGluIHRoZSB0ZW1wbGF0ZSkgLS0tXHJcbiAgICBsYXN0UGlja2VkOiBWZWMzIHwgbnVsbCA9IG51bGw7XHJcbiAgICBpc1JlYWR5ID0gZmFsc2U7XHJcbiAgICBpc1BpY2tpbmcgPSBmYWxzZTtcclxuICAgIGxvYWRFcnJvcjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgLy8gTWFudWFsIGVudHJ5IGZpZWxkcyAoYm91bmQgdmlhIG5nTW9kZWwgaW4gdGhlIHRlbXBsYXRlKVxyXG4gICAgbWFudWFsWDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgICBtYW51YWxZOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICAgIG1hbnVhbFo6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgIC8vIC0tLSBQcml2YXRlIHN0YXRlIC0tLVxyXG4gICAgcHJpdmF0ZSBtcFNkazogYW55O1xyXG4gICAgcHJpdmF0ZSBpbnB1dFNjZW5lT2JqZWN0OiBhbnk7XHJcbiAgICBwcml2YXRlIGlucHV0Q29tcG9uZW50OiBhbnk7XHJcbiAgICBwcml2YXRlIGludGVyc2VjdGlvblN1YjogYW55O1xyXG4gICAgcHJpdmF0ZSBjbGlja1NweTogYW55O1xyXG4gICAgcHJpdmF0ZSBjdXJyZW50SW50ZXJzZWN0aW9uOiBWZWMzIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSB2aWV3ZXJTZXJ2aWNlOiBWaWV3ZXJTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmVcclxuICAgICkgeyB9XHJcblxyXG4gICAgLy9cclxuICAgIC8vIC0tLS0tLS0tLS0gTGlmZWN5Y2xlIC0tLS0tLS0tLS1cclxuICAgIC8vXHJcblxyXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgICAgIGlmICgoY2hhbmdlc1sndmlzaXQzZE1vZGVsJ10gfHwgY2hhbmdlc1snc2RrS2V5J10pICYmIHRoaXMudmlzaXQzZE1vZGVsKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZE1vZGVsKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgICAgICBjb25zdCBpZnJhbWUgPSB0aGlzLmlmcmFtZVJlZi5uYXRpdmVFbGVtZW50O1xyXG5cclxuICAgICAgICBpZnJhbWUuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMubXBTZGspIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2hvd2Nhc2VXaW5kb3cgPSBpZnJhbWUuY29udGVudFdpbmRvdyBhcyBhbnk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1wU2RrID0gYXdhaXQgc2hvd2Nhc2VXaW5kb3cuTVBfU0RLLmNvbm5lY3QoaWZyYW1lLCB0aGlzLnNka0tleSwgJycpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zZXR1cENsaWNrTGlzdGVuZXIoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNSZWFkeSA9IHRydWU7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGNvbm5lY3QgdG8gTWF0dGVycG9ydCBTREsnLCBlcnIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkRXJyb3IgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdsYW5kbWFya1BpY2tlci5sb2FkRXJyb3InKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMuaW50ZXJzZWN0aW9uU3ViPy5jYW5jZWwoKTtcclxuICAgICAgICB0aGlzLmNsaWNrU3B5Py5jYW5jZWwoKTtcclxuICAgICAgICB0aGlzLmlucHV0U2NlbmVPYmplY3Q/LnN0b3AoKTtcclxuICAgIH1cclxuXHJcbiAgICAvL1xyXG4gICAgLy8gLS0tLS0tLS0tLSBQdWJsaWMgQVBJICh0ZW1wbGF0ZS1ib3VuZCkgLS0tLS0tLS0tLVxyXG4gICAgLy9cclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0YXJ0cyBsYW5kbWFyay1waWNraW5nIG1vZGUuIE5hdGl2ZSBjbGljay10by1uYXZpZ2F0ZSBpcyBkaXNhYmxlZCBmb3IgdGhlXHJcbiAgICAgKiBkdXJhdGlvbiBvZiB0aGUgcGljazogb3RoZXJ3aXNlIHRoZSB1c2VyJ3MgY2xpY2sgY2FuIGJlIHBhcnRpYWxseSBjb25zdW1lZCBieVxyXG4gICAgICogYSBjYW1lcmEgbmF2aWdhdGlvbiB0cmFuc2l0aW9uIGluc3RlYWQgb2YgYmVpbmcgY2FwdHVyZWQgYXMgYSBwb2ludCBzZWxlY3Rpb24uXHJcbiAgICAgKi9cclxuICAgIHN0YXJ0UGlja2luZygpIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNSZWFkeSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNQaWNraW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNldE5hdmlnYXRpb25FbmFibGVkKGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQ2FsbGVkIHdoZW4gdGhlIHVzZXIgdmFsaWRhdGVzIG1hbnVhbGx5IHR5cGVkIHgveS96IHZhbHVlcy4gKi9cclxuICAgIGFwcGx5TWFudWFsQ29vcmRpbmF0ZXMoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubWFudWFsWCA9PSBudWxsIHx8IHRoaXMubWFudWFsWSA9PSBudWxsIHx8IHRoaXMubWFudWFsWiA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jb25maXJtUG9pbnQoeyB4OiB0aGlzLm1hbnVhbFgsIHk6IHRoaXMubWFudWFsWSwgejogdGhpcy5tYW51YWxaIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vXHJcbiAgICAvLyAtLS0tLS0tLS0tIFByaXZhdGUgaGVscGVycyAtLS0tLS0tLS0tXHJcbiAgICAvL1xyXG5cclxuICAgIHByaXZhdGUgbG9hZE1vZGVsKCkge1xyXG4gICAgICAgIGNvbnN0IGlmcmFtZSA9IHRoaXMuaWZyYW1lUmVmLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgdGhpcy52aWV3ZXJTZXJ2aWNlLnNldFRvdXJVcmwoeyBtb2RlbDNkOiB0aGlzLnZpc2l0M2RNb2RlbCB9KTtcclxuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLnZpZXdlclNlcnZpY2UuZ2V0VG91clVybCgpO1xyXG4gICAgICAgIGlmcmFtZS5zZXRBdHRyaWJ1dGUoJ3NyYycsIHVybCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBzZXR1cENsaWNrTGlzdGVuZXIoKSB7XHJcbiAgICAgICAgdGhpcy5pbnRlcnNlY3Rpb25TdWIgPSB0aGlzLm1wU2RrLlBvaW50ZXIuaW50ZXJzZWN0aW9uLnN1YnNjcmliZSgoaW50ZXJzZWN0aW9uOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKGludGVyc2VjdGlvbiAmJiBpbnRlcnNlY3Rpb24ucG9zaXRpb24pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEludGVyc2VjdGlvbiA9IHsgLi4uaW50ZXJzZWN0aW9uLnBvc2l0aW9uIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc3QgW3NjZW5lT2JqZWN0XSA9IGF3YWl0IHRoaXMubXBTZGsuU2NlbmUuY3JlYXRlT2JqZWN0cygxKTtcclxuICAgICAgICBjb25zdCBub2RlID0gc2NlbmVPYmplY3QuYWRkTm9kZSgpO1xyXG4gICAgICAgIGNvbnN0IGlucHV0Q29tcG9uZW50ID0gbm9kZS5hZGRDb21wb25lbnQoJ21wLmlucHV0Jywge1xyXG4gICAgICAgICAgICBldmVudHNFbmFibGVkOiB0cnVlLFxyXG4gICAgICAgICAgICAvLyBOYXRpdmUgbmF2aWdhdGlvbiBzdGF5cyBlbmFibGVkIGJ5IGRlZmF1bHQgKG5vcm1hbCB2aWV3ZXIgYmVoYXZpb3IpO1xyXG4gICAgICAgICAgICAvLyBpdCBpcyB0b2dnbGVkIG9mZiBvbmx5IHdoaWxlIGFjdGl2ZWx5IHBpY2tpbmcgYSBsYW5kbWFyaywgc2VlXHJcbiAgICAgICAgICAgIC8vIHNldE5hdmlnYXRpb25FbmFibGVkKCkuXHJcbiAgICAgICAgICAgIHVzZXJOYXZpZ2F0aW9uRW5hYmxlZDogdHJ1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHNjZW5lT2JqZWN0LnN0YXJ0KCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGNsaWNrRW1pdFBhdGggPSBzY2VuZU9iamVjdC5hZGRFbWl0UGF0aChpbnB1dENvbXBvbmVudCwgJ0lOVEVSQUNUSU9OLkNMSUNLJyk7XHJcbiAgICAgICAgdGhpcy5jbGlja1NweSA9IHNjZW5lT2JqZWN0LnNweU9uRXZlbnQoe1xyXG4gICAgICAgICAgICBwYXRoOiBjbGlja0VtaXRQYXRoLFxyXG4gICAgICAgICAgICAvLyBUaGUgTWF0dGVycG9ydCBTREsgZGlzcGF0Y2hlcyB0aGlzIGNhbGxiYWNrIG91dHNpZGUgQW5ndWxhcidzIHpvbmVcclxuICAgICAgICAgICAgLy8gKGl0IGNvbW11bmljYXRlcyB3aXRoIHRoZSBob3N0IHBhZ2UgdmlhIGl0cyBvd24gaW50ZXJuYWwgbWVzc2FnaW5nLFxyXG4gICAgICAgICAgICAvLyBub3QgdGhyb3VnaCB6b25lLXBhdGNoZWQgRE9NIGV2ZW50cykuIFdpdGhvdXQgbmdab25lLnJ1bigpLCB0aGUgc3RhdGVcclxuICAgICAgICAgICAgLy8gY2hhbmdlcyBiZWxvdyBoYXBwZW4gY29ycmVjdGx5IGJ1dCBBbmd1bGFyIG5ldmVyIHJlLXJlbmRlcnMgdGhlIHZpZXdcclxuICAgICAgICAgICAgLy8gZm9yIHRoZW0g4oCUIHRoZSBidXR0b24gbGFiZWwgYW5kIFwiQ29uZmlybWVkOiAuLi5cIiB0ZXh0IHN0YXkgc3RhbGUgdW50aWxcclxuICAgICAgICAgICAgLy8gc29tZSB1bnJlbGF0ZWQgRE9NIGV2ZW50IChsaWtlIGNsaWNraW5nIHRoZSBidXR0b24gYWdhaW4pIGZvcmNlcyBhXHJcbiAgICAgICAgICAgIC8vIGNoYW5nZSBkZXRlY3Rpb24gY3ljbGUuIFdyYXBwaW5nIHRoZSBjYWxsIGhlcmUgZml4ZXMgdGhhdDogdGhlIHBpY2sgaXNcclxuICAgICAgICAgICAgLy8gcmVmbGVjdGVkIGluIHRoZSBVSSBpbW1lZGlhdGVseSwgaW4gYSBzaW5nbGUgY2xpY2suXHJcbiAgICAgICAgICAgIG9uRXZlbnQ6ICgpID0+IHRoaXMubmdab25lLnJ1bigoKSA9PiB0aGlzLm9uTW9kZWxDbGlja2VkKCkpXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuaW5wdXRTY2VuZU9iamVjdCA9IHNjZW5lT2JqZWN0O1xyXG4gICAgICAgIHRoaXMuaW5wdXRDb21wb25lbnQgPSBpbnB1dENvbXBvbmVudDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEhhbmRsZXMgYSBjbGljayB3aGlsZSBpbiBwaWNraW5nIG1vZGU6IGNvbmZpcm1zIHRoZSBwb2ludCwgZXhpdHMgcGlja2luZyBtb2RlLFxyXG4gICAgICogYW5kIHJlc3RvcmVzIG5hdGl2ZSBuYXZpZ2F0aW9uIHNvIHRoZSB2aWV3ZXIgYmVoYXZlcyBub3JtYWxseSBhZ2Fpbi5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBvbk1vZGVsQ2xpY2tlZCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNQaWNraW5nIHx8ICF0aGlzLmN1cnJlbnRJbnRlcnNlY3Rpb24pIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNvbmZpcm1Qb2ludCh0aGlzLmN1cnJlbnRJbnRlcnNlY3Rpb24pO1xyXG4gICAgICAgIHRoaXMuaXNQaWNraW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zZXROYXZpZ2F0aW9uRW5hYmxlZCh0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQ29tbW9uIHBhdGggZm9yIGJvdGggY2xpY2stcGlja2luZyBhbmQgbWFudWFsIGVudHJ5OiB1cGRhdGVzIHN0YXRlICsgbm90aWZpZXMgdGhlIHBhcmVudC4gKi9cclxuICAgIHByaXZhdGUgY29uZmlybVBvaW50KHBvaW50OiBWZWMzKSB7XHJcbiAgICAgICAgdGhpcy5sYXN0UGlja2VkID0geyAuLi5wb2ludCB9O1xyXG4gICAgICAgIHRoaXMubWFudWFsWCA9IHBvaW50Lng7XHJcbiAgICAgICAgdGhpcy5tYW51YWxZID0gcG9pbnQueTtcclxuICAgICAgICB0aGlzLm1hbnVhbFogPSBwb2ludC56O1xyXG4gICAgICAgIHRoaXMucG9pbnRQaWNrZWQuZW1pdCh0aGlzLmxhc3RQaWNrZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVG9nZ2xlcyB0aGUgdmlld2VyJ3MgbmF0aXZlIGNsaWNrLXRvLW5hdmlnYXRlIGJlaGF2aW9yIG9uIHRoZSBtcC5pbnB1dCBjb21wb25lbnQuXHJcbiAgICAgKiBEaXNhYmxlZCB3aGlsZSBwaWNraW5nIGEgbGFuZG1hcmsgc28gdGhlIHVzZXIncyBjbGljayBjYW4gb25seSBiZSBjYXB0dXJlZCBhcyBhXHJcbiAgICAgKiBwb2ludCBzZWxlY3Rpb24gaW5zdGVhZCBvZiBiZWluZyBpbnRlcmNlcHRlZCBieSBhIGNhbWVyYSBuYXZpZ2F0aW9uIHRyYW5zaXRpb24uXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgc2V0TmF2aWdhdGlvbkVuYWJsZWQoZW5hYmxlZDogYm9vbGVhbikge1xyXG4gICAgICAgIGlmICh0aGlzLmlucHV0Q29tcG9uZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5wdXRDb21wb25lbnQuaW5wdXRzLnVzZXJOYXZpZ2F0aW9uRW5hYmxlZCA9IGVuYWJsZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59IiwiPGRpdiBjbGFzcz1cImxhbmRtYXJrLXBpY2tlciBib3JkZXIgcm91bmRlZCBwLTJcIj5cclxuICAgIDxwICpuZ0lmPVwidGl0bGVcIiBjbGFzcz1cImZ3LWJvbGQgc21hbGwgbWItMVwiPnt7IHRpdGxlIH19PC9wPlxyXG5cclxuICAgIDxpZnJhbWUgI21wRnJhbWUgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMzgwXCIgZnJhbWVib3JkZXI9XCIwXCIgYWxsb3c9XCJ4ci1zcGF0aWFsLXRyYWNraW5nXCIgYWxsb3dmdWxsc2NyZWVuPjwvaWZyYW1lPlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCJsb2FkRXJyb3JcIiBjbGFzcz1cInRleHQtZGFuZ2VyIHNtYWxsIG10LTFcIj57eyBsb2FkRXJyb3IgfX08L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtdC0yIG1iLTJcIj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtcHJpbWFyeSBtZS0zXCIgW2Rpc2FibGVkXT1cIiFpc1JlYWR5XCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cInN0YXJ0UGlja2luZygpXCI+XHJcbiAgICAgICAgICAgIHt7IChpc1BpY2tpbmcgPyAnbGFuZG1hcmtQaWNrZXIucGlja0J1dHRvblBpY2tpbmcnIDogKGxhc3RQaWNrZWQgPyAnbGFuZG1hcmtQaWNrZXIucGlja0J1dHRvbkFnYWluJyA6XHJcbiAgICAgICAgICAgICdsYW5kbWFya1BpY2tlci5waWNrQnV0dG9uSW5pdGlhbCcpKSB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSBNYW51YWwgY29vcmRpbmF0ZSBlbnRyeSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cgZy0xIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtM1wiPlxyXG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIHN0ZXA9XCIwLjAwMVwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiXHJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ2xhbmRtYXJrUGlja2VyLnBsYWNlaG9sZGVyWCcgfCB0cmFuc2xhdGVcIiBbKG5nTW9kZWwpXT1cIm1hbnVhbFhcIj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTNcIj5cclxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBzdGVwPVwiMC4wMDFcIiBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIlxyXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidsYW5kbWFya1BpY2tlci5wbGFjZWhvbGRlclknIHwgdHJhbnNsYXRlXCIgWyhuZ01vZGVsKV09XCJtYW51YWxZXCI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0zXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgc3RlcD1cIjAuMDAxXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCJcclxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInbGFuZG1hcmtQaWNrZXIucGxhY2Vob2xkZXJaJyB8IHRyYW5zbGF0ZVwiIFsobmdNb2RlbCldPVwibWFudWFsWlwiPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtM1wiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtc2Vjb25kYXJ5IHctMTAwXCIgKGNsaWNrKT1cImFwcGx5TWFudWFsQ29vcmRpbmF0ZXMoKVwiPlxyXG4gICAgICAgICAgICAgICAge3sgJ2xhbmRtYXJrUGlja2VyLmFwcGx5JyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxzcGFuICpuZ0lmPVwibGFzdFBpY2tlZFwiIGNsYXNzPVwidGV4dC1zdWNjZXNzIHNtYWxsIGQtYmxvY2sgbXQtMVwiPlxyXG4gICAgICAgIHt7ICdsYW5kbWFya1BpY2tlci5jb25maXJtZWQnIHwgdHJhbnNsYXRlOiB7IHg6IGxhc3RQaWNrZWQueC50b0ZpeGVkKDMpLCB5OiBsYXN0UGlja2VkLnkudG9GaXhlZCgzKSwgejpcclxuICAgICAgICBsYXN0UGlja2VkLnoudG9GaXhlZCgzKSB9IH19XHJcbiAgICA8L3NwYW4+XHJcbjwvZGl2PiJdfQ==
191
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFuZG1hcmstcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zbWFydGVycGxhbi1sb2NhdGlvbnMvc3JjL2xpYi9jb21wb25lbnRzL2xhbmRtYXJrLXBpY2tlci9sYW5kbWFyay1waWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWxvY2F0aW9ucy9zcmMvbGliL2NvbXBvbmVudHMvbGFuZG1hcmstcGlja2VyL2xhbmRtYXJrLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUNjLFNBQVMsRUFDaEUsTUFBTSxlQUFlLENBQUM7Ozs7OztBQVN2QixNQUFNLE9BQU8sdUJBQXVCO0lBeUNwQjtJQUNBO0lBQ0E7SUF6Q1osMkJBQTJCO0lBQ2xCLFlBQVksQ0FBUztJQUNyQixNQUFNLENBQVM7SUFDZixLQUFLLEdBQUcsRUFBRSxDQUFDO0lBRXBCLDZFQUE2RTtJQUM3RSxJQUFhLEtBQUssQ0FBQyxDQUFjO1FBQzdCLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDSixJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ25CLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QixDQUFDO0lBQ0wsQ0FBQztJQUVTLFdBQVcsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO0lBRVQsU0FBUyxDQUFnQztJQUVqRiwrQ0FBK0M7SUFDL0MsVUFBVSxHQUFnQixJQUFJLENB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R0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxvQkFBb0IsQ0FBQyxPQUFnQjtRQUN6QyxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsR0FBRyxPQUFPLENBQUM7UUFDL0QsQ0FBQztJQUNMLENBQUM7d0dBeExRLHVCQUF1Qjs0RkFBdkIsdUJBQXVCLHlVQ1pwQyxvaEVBd0NNOzs0RkQ1Qk8sdUJBQXVCO2tCQUxuQyxTQUFTOytCQUNJLHFCQUFxQjtzSUFPdEIsWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUdPLEtBQUs7c0JBQWpCLEtBQUs7Z0JBU0ksV0FBVztzQkFBcEIsTUFBTTtnQkFFaUMsU0FBUztzQkFBaEQsU0FBUzt1QkFBQyxTQUFTLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgTmdab25lLFxuICAgIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBWZWMzLCBWaWV3ZXJTZXJ2aWNlIH0gZnJvbSAnQHNtYXJ0ZXJwbGFuL25neC1zbWFydGVycGxhbi1jb3JlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdsaWItbGFuZG1hcmstcGlja2VyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbGFuZG1hcmstcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9sYW5kbWFyay1waWNrZXIuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBMYW5kbWFya1BpY2tlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcblxuICAgIC8vIC0tLSBJbnB1dHMgLyBPdXRwdXRzIC0tLVxuICAgIEBJbnB1dCgpIHZpc2l0M2RNb2RlbDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHNka0tleTogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHRpdGxlID0gJyc7XG5cbiAgICAvLyBBbGxvd3MgYSBwYXJlbnQgY29tcG9uZW50IHRvIHByZS1maWxsIGEgbGFuZG1hcmsgKGUuZy4gZnJvbSBhIEpTT04gaW1wb3J0KVxuICAgIEBJbnB1dCgpIHNldCB2YWx1ZSh2OiBWZWMzIHwgbnVsbCkge1xuICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgdGhpcy5sYXN0UGlja2VkID0geyAuLi52IH07XG4gICAgICAgICAgICB0aGlzLm1hbnVhbFggPSB2Lng7XG4gICAgICAgICAgICB0aGlzLm1hbnVhbFkgPSB2Lnk7XG4gICAgICAgICAgICB0aGlzLm1hbnVhbFogPSB2Lno7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBAT3V0cHV0KCkgcG9pbnRQaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFZlYzM+KCk7XG5cbiAgICBAVmlld0NoaWxkKCdtcEZyYW1lJywgeyBzdGF0aWM6IHRydWUgfSkgaWZyYW1lUmVmOiBFbGVtZW50UmVmPEhUTUxJRnJhbWVFbGVtZW50PjtcblxuICAgIC8vIC0tLSBQdWJsaWMgc3RhdGUgKGJvdW5kIGluIHRoZSB0ZW1wbGF0ZSkgLS0tXG4gICAgbGFzdFBpY2tlZDogVmVjMyB8IG51bGwgPSBudWxsO1xuICAgIGlzUmVhZHkgPSBmYWxzZTtcbiAgICBpc1BpY2tpbmcgPSBmYWxzZTtcbiAgICBsb2FkRXJyb3I6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgLy8gTWFudWFsIGVudHJ5IGZpZWxkcyAoYm91bmQgdmlhIG5nTW9kZWwgaW4gdGhlIHRlbXBsYXRlKVxuICAgIG1hbnVhbFg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgIG1hbnVhbFk6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgIG1hbnVhbFo6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gICAgLy8gLS0tIFByaXZhdGUgc3RhdGUgLS0tXG4gICAgcHJpdmF0ZSBtcFNkazogYW55O1xuICAgIHByaXZhdGUgaW5wdXRTY2VuZU9iamVjdDogYW55O1xuICAgIHByaXZhdGUgaW5wdXRDb21wb25lbnQ6IGFueTtcbiAgICBwcml2YXRlIGludGVyc2VjdGlvblN1YjogYW55O1xuICAgIHByaXZhdGUgY2xpY2tTcHk6IGFueTtcbiAgICBwcml2YXRlIGN1cnJlbnRJbnRlcnNlY3Rpb246IFZlYzMgfCBudWxsID0gbnVsbDtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHZpZXdlclNlcnZpY2U6IFZpZXdlclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG5nWm9uZTogTmdab25lXG4gICAgKSB7IH1cblxuICAgIC8vXG4gICAgLy8gLS0tLS0tLS0tLSBMaWZlY3ljbGUgLS0tLS0tLS0tLVxuICAgIC8vXG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgICAgIGlmICgoY2hhbmdlc1sndmlzaXQzZE1vZGVsJ10gfHwgY2hhbmdlc1snc2RrS2V5J10pICYmIHRoaXMudmlzaXQzZE1vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRNb2RlbCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBjb25zdCBpZnJhbWUgPSB0aGlzLmlmcmFtZVJlZi5uYXRpdmVFbGVtZW50O1xuXG4gICAgICAgIGlmcmFtZS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMubXBTZGspIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNob3djYXNlV2luZG93ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cgYXMgYW55O1xuICAgICAgICAgICAgICAgIHRoaXMubXBTZGsgPSBhd2FpdCBzaG93Y2FzZVdpbmRvdy5NUF9TREsuY29ubmVjdChpZnJhbWUsIHRoaXMuc2RrS2V5LCAnJyk7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zZXR1cENsaWNrTGlzdGVuZXIoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzUmVhZHkgPSB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGNvbm5lY3QgdG8gTWF0dGVycG9ydCBTREsnLCBlcnIpO1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZEVycm9yID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnbGFuZG1hcmtQaWNrZXIubG9hZEVycm9yJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLmludGVyc2VjdGlvblN1Yj8uY2FuY2VsKCk7XG4gICAgICAgIHRoaXMuY2xpY2tTcHk/LmNhbmNlbCgpO1xuICAgICAgICB0aGlzLmlucHV0U2NlbmVPYmplY3Q/LnN0b3AoKTtcbiAgICB9XG5cbiAgICAvL1xuICAgIC8vIC0tLS0tLS0tLS0gUHVibGljIEFQSSAodGVtcGxhdGUtYm91bmQpIC0tLS0tLS0tLS1cbiAgICAvL1xuXG4gICAgLyoqXG4gICAgICogU3RhcnRzIGxhbmRtYXJrLXBpY2tpbmcgbW9kZS4gTmF0aXZlIGNsaWNrLXRvLW5hdmlnYXRlIGlzIGRpc2FibGVkIGZvciB0aGVcbiAgICAgKiBkdXJhdGlvbiBvZiB0aGUgcGljazogb3RoZXJ3aXNlIHRoZSB1c2VyJ3MgY2xpY2sgY2FuIGJlIHBhcnRpYWxseSBjb25zdW1lZCBieVxuICAgICAqIGEgY2FtZXJhIG5hdmlnYXRpb24gdHJhbnNpdGlvbiBpbnN0ZWFkIG9mIGJlaW5nIGNhcHR1cmVkIGFzIGEgcG9pbnQgc2VsZWN0aW9uLlxuICAgICAqL1xuICAgIHN0YXJ0UGlja2luZygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzUmVhZHkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzUGlja2luZyA9IHRydWU7XG4gICAgICAgIHRoaXMuc2V0TmF2aWdhdGlvbkVuYWJsZWQoZmFsc2UpO1xuICAgIH1cblxuICAgIC8qKiBDYWxsZWQgd2hlbiB0aGUgdXNlciB2YWxpZGF0ZXMgbWFudWFsbHkgdHlwZWQgeC95L3ogdmFsdWVzLiAqL1xuICAgIGFwcGx5TWFudWFsQ29vcmRpbmF0ZXMoKSB7XG4gICAgICAgIGlmICh0aGlzLm1hbnVhbFggPT0gbnVsbCB8fCB0aGlzLm1hbnVhbFkgPT0gbnVsbCB8fCB0aGlzLm1hbnVhbFogPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29uZmlybVBvaW50KHsgeDogdGhpcy5tYW51YWxYLCB5OiB0aGlzLm1hbnVhbFksIHo6IHRoaXMubWFudWFsWiB9KTtcbiAgICB9XG5cbiAgICAvL1xuICAgIC8vIC0tLS0tLS0tLS0gUHJpdmF0ZSBoZWxwZXJzIC0tLS0tLS0tLS1cbiAgICAvL1xuXG4gICAgcHJpdmF0ZSBsb2FkTW9kZWwoKSB7XG4gICAgICAgIGNvbnN0IGlmcmFtZSA9IHRoaXMuaWZyYW1lUmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIHRoaXMudmlld2VyU2VydmljZS5zZXRUb3VyVXJsKHsgbW9kZWwzZDogdGhpcy52aXNpdDNkTW9kZWwgfSk7XG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMudmlld2VyU2VydmljZS5nZXRUb3VyVXJsKCk7XG4gICAgICAgIGlmcmFtZS5zZXRBdHRyaWJ1dGUoJ3NyYycsIHVybCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBzZXR1cENsaWNrTGlzdGVuZXIoKSB7XG4gICAgICAgIHRoaXMuaW50ZXJzZWN0aW9uU3ViID0gdGhpcy5tcFNkay5Qb2ludGVyLmludGVyc2VjdGlvbi5zdWJzY3JpYmUoKGludGVyc2VjdGlvbjogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAoaW50ZXJzZWN0aW9uICYmIGludGVyc2VjdGlvbi5wb3NpdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEludGVyc2VjdGlvbiA9IHsgLi4uaW50ZXJzZWN0aW9uLnBvc2l0aW9uIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IFtzY2VuZU9iamVjdF0gPSBhd2FpdCB0aGlzLm1wU2RrLlNjZW5lLmNyZWF0ZU9iamVjdHMoMSk7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBzY2VuZU9iamVjdC5hZGROb2RlKCk7XG4gICAgICAgIGNvbnN0IGlucHV0Q29tcG9uZW50ID0gbm9kZS5hZGRDb21wb25lbnQoJ21wLmlucHV0Jywge1xuICAgICAgICAgICAgZXZlbnRzRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgIC8vIE5hdGl2ZSBuYXZpZ2F0aW9uIHN0YXlzIGVuYWJsZWQgYnkgZGVmYXVsdCAobm9ybWFsIHZpZXdlciBiZWhhdmlvcik7XG4gICAgICAgICAgICAvLyBpdCBpcyB0b2dnbGVkIG9mZiBvbmx5IHdoaWxlIGFjdGl2ZWx5IHBpY2tpbmcgYSBsYW5kbWFyaywgc2VlXG4gICAgICAgICAgICAvLyBzZXROYXZpZ2F0aW9uRW5hYmxlZCgpLlxuICAgICAgICAgICAgdXNlck5hdmlnYXRpb25FbmFibGVkOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICBzY2VuZU9iamVjdC5zdGFydCgpO1xuXG4gICAgICAgIGNvbnN0IGNsaWNrRW1pdFBhdGggPSBzY2VuZU9iamVjdC5hZGRFbWl0UGF0aChpbnB1dENvbXBvbmVudCwgJ0lOVEVSQUNUSU9OLkNMSUNLJyk7XG4gICAgICAgIHRoaXMuY2xpY2tTcHkgPSBzY2VuZU9iamVjdC5zcHlPbkV2ZW50KHtcbiAgICAgICAgICAgIHBhdGg6IGNsaWNrRW1pdFBhdGgsXG4gICAgICAgICAgICAvLyBUaGUgTWF0dGVycG9ydCBTREsgZGlzcGF0Y2hlcyB0aGlzIGNhbGxiYWNrIG91dHNpZGUgQW5ndWxhcidzIHpvbmVcbiAgICAgICAgICAgIC8vIChpdCBjb21tdW5pY2F0ZXMgd2l0aCB0aGUgaG9zdCBwYWdlIHZpYSBpdHMgb3duIGludGVybmFsIG1lc3NhZ2luZyxcbiAgICAgICAgICAgIC8vIG5vdCB0aHJvdWdoIHpvbmUtcGF0Y2hlZCBET00gZXZlbnRzKS4gV2l0aG91dCBuZ1pvbmUucnVuKCksIHRoZSBzdGF0ZVxuICAgICAgICAgICAgLy8gY2hhbmdlcyBiZWxvdyBoYXBwZW4gY29ycmVjdGx5IGJ1dCBBbmd1bGFyIG5ldmVyIHJlLXJlbmRlcnMgdGhlIHZpZXdcbiAgICAgICAgICAgIC8vIGZvciB0aGVtIOKAlCB0aGUgYnV0dG9uIGxhYmVsIGFuZCBcIkNvbmZpcm1lZDogLi4uXCIgdGV4dCBzdGF5IHN0YWxlIHVudGlsXG4gICAgICAgICAgICAvLyBzb21lIHVucmVsYXRlZCBET00gZXZlbnQgKGxpa2UgY2xpY2tpbmcgdGhlIGJ1dHRvbiBhZ2FpbikgZm9yY2VzIGFcbiAgICAgICAgICAgIC8vIGNoYW5nZSBkZXRlY3Rpb24gY3ljbGUuIFdyYXBwaW5nIHRoZSBjYWxsIGhlcmUgZml4ZXMgdGhhdDogdGhlIHBpY2sgaXNcbiAgICAgICAgICAgIC8vIHJlZmxlY3RlZCBpbiB0aGUgVUkgaW1tZWRpYXRlbHksIGluIGEgc2luZ2xlIGNsaWNrLlxuICAgICAgICAgICAgb25FdmVudDogKCkgPT4gdGhpcy5uZ1pvbmUucnVuKCgpID0+IHRoaXMub25Nb2RlbENsaWNrZWQoKSlcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5pbnB1dFNjZW5lT2JqZWN0ID0gc2NlbmVPYmplY3Q7XG4gICAgICAgIHRoaXMuaW5wdXRDb21wb25lbnQgPSBpbnB1dENvbXBvbmVudDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGVzIGEgY2xpY2sgd2hpbGUgaW4gcGlja2luZyBtb2RlOiBjb25maXJtcyB0aGUgcG9pbnQsIGV4aXRzIHBpY2tpbmcgbW9kZSxcbiAgICAgKiBhbmQgcmVzdG9yZXMgbmF0aXZlIG5hdmlnYXRpb24gc28gdGhlIHZpZXdlciBiZWhhdmVzIG5vcm1hbGx5IGFnYWluLlxuICAgICAqL1xuICAgIHByaXZhdGUgb25Nb2RlbENsaWNrZWQoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1BpY2tpbmcgfHwgIXRoaXMuY3VycmVudEludGVyc2VjdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29uZmlybVBvaW50KHRoaXMuY3VycmVudEludGVyc2VjdGlvbik7XG4gICAgICAgIHRoaXMuaXNQaWNraW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2V0TmF2aWdhdGlvbkVuYWJsZWQodHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqIENvbW1vbiBwYXRoIGZvciBib3RoIGNsaWNrLXBpY2tpbmcgYW5kIG1hbnVhbCBlbnRyeTogdXBkYXRlcyBzdGF0ZSArIG5vdGlmaWVzIHRoZSBwYXJlbnQuICovXG4gICAgcHJpdmF0ZSBjb25maXJtUG9pbnQocG9pbnQ6IFZlYzMpIHtcbiAgICAgICAgdGhpcy5sYXN0UGlja2VkID0geyAuLi5wb2ludCB9O1xuICAgICAgICB0aGlzLm1hbnVhbFggPSBwb2ludC54O1xuICAgICAgICB0aGlzLm1hbnVhbFkgPSBwb2ludC55O1xuICAgICAgICB0aGlzLm1hbnVhbFogPSBwb2ludC56O1xuICAgICAgICB0aGlzLnBvaW50UGlja2VkLmVtaXQodGhpcy5sYXN0UGlja2VkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUb2dnbGVzIHRoZSB2aWV3ZXIncyBuYXRpdmUgY2xpY2stdG8tbmF2aWdhdGUgYmVoYXZpb3Igb24gdGhlIG1wLmlucHV0IGNvbXBvbmVudC5cbiAgICAgKiBEaXNhYmxlZCB3aGlsZSBwaWNraW5nIGEgbGFuZG1hcmsgc28gdGhlIHVzZXIncyBjbGljayBjYW4gb25seSBiZSBjYXB0dXJlZCBhcyBhXG4gICAgICogcG9pbnQgc2VsZWN0aW9uIGluc3RlYWQgb2YgYmVpbmcgaW50ZXJjZXB0ZWQgYnkgYSBjYW1lcmEgbmF2aWdhdGlvbiB0cmFuc2l0aW9uLlxuICAgICAqL1xuICAgIHByaXZhdGUgc2V0TmF2aWdhdGlvbkVuYWJsZWQoZW5hYmxlZDogYm9vbGVhbikge1xuICAgICAgICBpZiAodGhpcy5pbnB1dENvbXBvbmVudCkge1xuICAgICAgICAgICAgdGhpcy5pbnB1dENvbXBvbmVudC5pbnB1dHMudXNlck5hdmlnYXRpb25FbmFibGVkID0gZW5hYmxlZDtcbiAgICAgICAgfVxuICAgIH1cbn0iLCI8ZGl2IGNsYXNzPVwibGFuZG1hcmstcGlja2VyIGJvcmRlciByb3VuZGVkIHAtMlwiPlxuICAgIDxwICpuZ0lmPVwidGl0bGVcIiBjbGFzcz1cImZ3LWJvbGQgc21hbGwgbWItMVwiPnt7IHRpdGxlIH19PC9wPlxuXG4gICAgPGlmcmFtZSAjbXBGcmFtZSB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCIzODBcIiBmcmFtZWJvcmRlcj1cIjBcIiBhbGxvdz1cInhyLXNwYXRpYWwtdHJhY2tpbmdcIiBhbGxvd2Z1bGxzY3JlZW4+PC9pZnJhbWU+XG5cbiAgICA8ZGl2ICpuZ0lmPVwibG9hZEVycm9yXCIgY2xhc3M9XCJ0ZXh0LWRhbmdlciBzbWFsbCBtdC0xXCI+e3sgbG9hZEVycm9yIH19PC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtdC0yIG1iLTJcIj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXByaW1hcnkgbWUtM1wiIFtkaXNhYmxlZF09XCIhaXNSZWFkeVwiXG4gICAgICAgICAgICAoY2xpY2spPVwic3RhcnRQaWNraW5nKClcIj5cbiAgICAgICAgICAgIHt7IChpc1BpY2tpbmcgPyAnbGFuZG1hcmtQaWNrZXIucGlja0J1dHRvblBpY2tpbmcnIDogKGxhc3RQaWNrZWQgPyAnbGFuZG1hcmtQaWNrZXIucGlja0J1dHRvbkFnYWluJyA6XG4gICAgICAgICAgICAnbGFuZG1hcmtQaWNrZXIucGlja0J1dHRvbkluaXRpYWwnKSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIE1hbnVhbCBjb29yZGluYXRlIGVudHJ5IC0tPlxuICAgIDxkaXYgY2xhc3M9XCJyb3cgZy0xIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTNcIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgc3RlcD1cIjAuMDAxXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ2xhbmRtYXJrUGlja2VyLnBsYWNlaG9sZGVyWCcgfCB0cmFuc2xhdGVcIiBbKG5nTW9kZWwpXT1cIm1hbnVhbFhcIj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtM1wiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBzdGVwPVwiMC4wMDFcIiBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIlxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInbGFuZG1hcmtQaWNrZXIucGxhY2Vob2xkZXJZJyB8IHRyYW5zbGF0ZVwiIFsobmdNb2RlbCldPVwibWFudWFsWVwiPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0zXCI+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIHN0ZXA9XCIwLjAwMVwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidsYW5kbWFya1BpY2tlci5wbGFjZWhvbGRlclonIHwgdHJhbnNsYXRlXCIgWyhuZ01vZGVsKV09XCJtYW51YWxaXCI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTNcIj5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1zZWNvbmRhcnkgdy0xMDBcIiAoY2xpY2spPVwiYXBwbHlNYW51YWxDb29yZGluYXRlcygpXCI+XG4gICAgICAgICAgICAgICAge3sgJ2xhbmRtYXJrUGlja2VyLmFwcGx5JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPHNwYW4gKm5nSWY9XCJsYXN0UGlja2VkXCIgY2xhc3M9XCJ0ZXh0LXN1Y2Nlc3Mgc21hbGwgZC1ibG9jayBtdC0xXCI+XG4gICAgICAgIHt7ICdsYW5kbWFya1BpY2tlci5jb25maXJtZWQnIHwgdHJhbnNsYXRlOiB7IHg6IGxhc3RQaWNrZWQueC50b0ZpeGVkKDMpLCB5OiBsYXN0UGlja2VkLnkudG9GaXhlZCgzKSwgejpcbiAgICAgICAgbGFzdFBpY2tlZC56LnRvRml4ZWQoMykgfSB9fVxuICAgIDwvc3Bhbj5cbjwvZGl2PiJdfQ==