mmhglobal-dynamicform 2.7.3 → 2.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/README.md +8 -0
  2. package/esm2020/lib/components/fieldbase.component.mjs +5 -3
  3. package/esm2020/lib/input-error-message/input-error-message.component.mjs +9 -10
  4. package/esm2020/lib/services/main.service.mjs +10 -11
  5. package/esm2020/lib/services/zcomponent.debug.service.mjs +7 -8
  6. package/esm2020/lib/zinput-container/zinput-container.component.mjs +2 -2
  7. package/esm2020/lib/zmodal/zmodal-mobile.component.mjs +13 -14
  8. package/esm2020/lib/zmodal/zmodal.component.mjs +12 -13
  9. package/esm2020/lib/znumeric/znumeric.component.mjs +51 -3
  10. package/esm2020/lib/zudf/zudf.component.mjs +9 -10
  11. package/esm2020/lib/zworkflowbuttons/zworkflowbuttons.component.mjs +11 -25
  12. package/esm2020/public-api.mjs +1 -2
  13. package/fesm2015/mmhglobal-dynamicform.mjs +189 -270
  14. package/fesm2015/mmhglobal-dynamicform.mjs.map +1 -1
  15. package/fesm2020/mmhglobal-dynamicform.mjs +189 -270
  16. package/fesm2020/mmhglobal-dynamicform.mjs.map +1 -1
  17. package/lib/components/fieldbase.component.d.ts +4 -1
  18. package/lib/input-error-message/input-error-message.component.d.ts +3 -4
  19. package/lib/services/main.service.d.ts +3 -4
  20. package/lib/services/zcomponent.debug.service.d.ts +3 -4
  21. package/lib/zmodal/zmodal-mobile.component.d.ts +3 -4
  22. package/lib/zmodal/zmodal.component.d.ts +3 -4
  23. package/lib/znumeric/znumeric.component.d.ts +8 -2
  24. package/lib/zudf/zudf.component.d.ts +1 -2
  25. package/lib/zworkflowbuttons/zworkflowbuttons.component.d.ts +3 -4
  26. package/package.json +1 -1
  27. package/public-api.d.ts +0 -1
  28. package/esm2020/lib/services/component-error-handler.service.mjs +0 -121
  29. package/lib/services/component-error-handler.service.d.ts +0 -19
@@ -7,21 +7,20 @@ import { ZGroup, ZComponentHelper, } from "mmhglobal-zcore";
7
7
  import { ZmodalHelper } from 'mmhglobal-zmodal';
8
8
  import * as i0 from "@angular/core";
9
9
  import * as i1 from "mmhglobal-zcore";
10
- import * as i2 from "../services/component-error-handler.service";
11
- import * as i3 from "@ionic/angular";
12
- import * as i4 from "@fortawesome/angular-fontawesome";
13
- import * as i5 from "../uiactionbutton/uiactionbutton.component";
14
- import * as i6 from "../zform/zform.component";
15
- import * as i7 from "@angular/common";
16
- import * as i8 from "../directives/scrollbar.theme.directive";
17
- import * as i9 from "@angular/flex-layout/extended";
10
+ import * as i2 from "@ionic/angular";
11
+ import * as i3 from "@fortawesome/angular-fontawesome";
12
+ import * as i4 from "../uiactionbutton/uiactionbutton.component";
13
+ import * as i5 from "../zform/zform.component";
14
+ import * as i6 from "@angular/common";
15
+ import * as i7 from "../directives/scrollbar.theme.directive";
16
+ import * as i8 from "@angular/flex-layout/extended";
18
17
  export class ZmodalMobileComponent {
19
- constructor(webApiService, zcoreService, componentErrorHandler, // Use in mmhglobal-zmodal.helper
18
+ constructor(webApiService, zcoreService, componentErrorHandlerService, // Use in mmhglobal-zmodal.helper
20
19
  fieldService // Use in mmhglobal-zmodal.helper
21
20
  ) {
22
21
  this.webApiService = webApiService;
23
22
  this.zcoreService = zcoreService;
24
- this.componentErrorHandler = componentErrorHandler;
23
+ this.componentErrorHandlerService = componentErrorHandlerService;
25
24
  this.fieldService = fieldService;
26
25
  this.group = new ZGroup(true);
27
26
  }
@@ -113,12 +112,12 @@ export class ZmodalMobileComponent {
113
112
  return this.zcoreService.isDebugSession();
114
113
  }
115
114
  }
116
- ZmodalMobileComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ZmodalMobileComponent, deps: [{ token: i1.WebApiService }, { token: i1.ZCoreService }, { token: i2.ComponentErrorHandlerService }, { token: i1.FieldService }], target: i0.ɵɵFactoryTarget.Component });
117
- ZmodalMobileComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ZmodalMobileComponent, selector: "app-zmodal", inputs: { modalParams: "modalParams" }, ngImport: i0, template: "<ion-header *ngIf=\"isMobileScreen()\">\r\n <ion-toolbar>\r\n <ion-buttons slot=\"start\">\r\n <ion-button (click)=\"onCancel()\">\r\n <!-- <ion-icon name=\"close\"></ion-icon> -->\r\n <fa-icon [icon]=\"'times'\" size=\"lg\"></fa-icon>\r\n </ion-button>\r\n </ion-buttons>\r\n <ion-title>\r\n {{ modalParams.formHeader }}\r\n </ion-title>\r\n <ion-buttons slot=\"primary\" *ngIf=\"!group.isLoading\">\r\n <app-uiactionbutton [group]=\"group\"></app-uiactionbutton>\r\n </ion-buttons>\r\n </ion-toolbar>\r\n</ion-header>\r\n\r\n<ion-content appScrollbarTheme [ngStyle]=\"getGridStyle()\">\r\n <ion-grid>\r\n <ion-row *ngIf=\"group.isLoading\" class=\"ion-text-center\">\r\n <ion-col class=\"ion-margin ion-padding\">\r\n <ion-spinner></ion-spinner>\r\n </ion-col>\r\n </ion-row>\r\n <ion-row *ngIf=\"!group.isLoading\">\r\n <ion-col>\r\n <app-zform [group]=\"group\"></app-zform>\r\n </ion-col>\r\n </ion-row>\r\n <ion-row *ngIf=\"isSITEnvironment() && !group.isLoading\">\r\n <ion-col>\r\n <pre style=\"font-size: x-small;\">{{group.zModel | json}}</pre>\r\n </ion-col>\r\n </ion-row>\r\n </ion-grid>\r\n</ion-content>\r\n\r\n", styles: [""], components: [{ type: i3.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { type: i3.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { type: i3.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { type: i3.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { type: i4.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }, { type: i3.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { type: i5.UiactionbuttonComponent, selector: "app-uiactionbutton" }, { type: i3.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { type: i3.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { type: i3.IonRow, selector: "ion-row" }, { type: i3.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { type: i3.IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { type: i6.ZformComponent, selector: "app-zform", inputs: ["group", "fieldName"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.ScrollbarThemeDirective, selector: "[appScrollbarTheme]" }, { type: i7.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i9.DefaultStyleDirective, selector: " [ngStyle], [ngStyle.xs], [ngStyle.sm], [ngStyle.md], [ngStyle.lg], [ngStyle.xl], [ngStyle.lt-sm], [ngStyle.lt-md], [ngStyle.lt-lg], [ngStyle.lt-xl], [ngStyle.gt-xs], [ngStyle.gt-sm], [ngStyle.gt-md], [ngStyle.gt-lg]", inputs: ["ngStyle", "ngStyle.xs", "ngStyle.sm", "ngStyle.md", "ngStyle.lg", "ngStyle.xl", "ngStyle.lt-sm", "ngStyle.lt-md", "ngStyle.lt-lg", "ngStyle.lt-xl", "ngStyle.gt-xs", "ngStyle.gt-sm", "ngStyle.gt-md", "ngStyle.gt-lg"] }], pipes: { "json": i7.JsonPipe } });
115
+ ZmodalMobileComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ZmodalMobileComponent, deps: [{ token: i1.WebApiService }, { token: i1.ZCoreService }, { token: i1.ComponentErrorHandlerService }, { token: i1.FieldService }], target: i0.ɵɵFactoryTarget.Component });
116
+ ZmodalMobileComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ZmodalMobileComponent, selector: "app-zmodal", inputs: { modalParams: "modalParams" }, ngImport: i0, template: "<ion-header *ngIf=\"isMobileScreen()\">\r\n <ion-toolbar>\r\n <ion-buttons slot=\"start\">\r\n <ion-button (click)=\"onCancel()\">\r\n <!-- <ion-icon name=\"close\"></ion-icon> -->\r\n <fa-icon [icon]=\"'times'\" size=\"lg\"></fa-icon>\r\n </ion-button>\r\n </ion-buttons>\r\n <ion-title>\r\n {{ modalParams.formHeader }}\r\n </ion-title>\r\n <ion-buttons slot=\"primary\" *ngIf=\"!group.isLoading\">\r\n <app-uiactionbutton [group]=\"group\"></app-uiactionbutton>\r\n </ion-buttons>\r\n </ion-toolbar>\r\n</ion-header>\r\n\r\n<ion-content appScrollbarTheme [ngStyle]=\"getGridStyle()\">\r\n <ion-grid>\r\n <ion-row *ngIf=\"group.isLoading\" class=\"ion-text-center\">\r\n <ion-col class=\"ion-margin ion-padding\">\r\n <ion-spinner></ion-spinner>\r\n </ion-col>\r\n </ion-row>\r\n <ion-row *ngIf=\"!group.isLoading\">\r\n <ion-col>\r\n <app-zform [group]=\"group\"></app-zform>\r\n </ion-col>\r\n </ion-row>\r\n <ion-row *ngIf=\"isSITEnvironment() && !group.isLoading\">\r\n <ion-col>\r\n <pre style=\"font-size: x-small;\">{{group.zModel | json}}</pre>\r\n </ion-col>\r\n </ion-row>\r\n </ion-grid>\r\n</ion-content>\r\n\r\n", styles: [""], components: [{ type: i2.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { type: i2.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { type: i2.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { type: i2.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { type: i3.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }, { type: i2.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { type: i4.UiactionbuttonComponent, selector: "app-uiactionbutton" }, { type: i2.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { type: i2.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { type: i2.IonRow, selector: "ion-row" }, { type: i2.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { type: i2.IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { type: i5.ZformComponent, selector: "app-zform", inputs: ["group", "fieldName"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.ScrollbarThemeDirective, selector: "[appScrollbarTheme]" }, { type: i6.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i8.DefaultStyleDirective, selector: " [ngStyle], [ngStyle.xs], [ngStyle.sm], [ngStyle.md], [ngStyle.lg], [ngStyle.xl], [ngStyle.lt-sm], [ngStyle.lt-md], [ngStyle.lt-lg], [ngStyle.lt-xl], [ngStyle.gt-xs], [ngStyle.gt-sm], [ngStyle.gt-md], [ngStyle.gt-lg]", inputs: ["ngStyle", "ngStyle.xs", "ngStyle.sm", "ngStyle.md", "ngStyle.lg", "ngStyle.xl", "ngStyle.lt-sm", "ngStyle.lt-md", "ngStyle.lt-lg", "ngStyle.lt-xl", "ngStyle.gt-xs", "ngStyle.gt-sm", "ngStyle.gt-md", "ngStyle.gt-lg"] }], pipes: { "json": i6.JsonPipe } });
118
117
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ZmodalMobileComponent, decorators: [{
119
118
  type: Component,
120
119
  args: [{ selector: "app-zmodal", template: "<ion-header *ngIf=\"isMobileScreen()\">\r\n <ion-toolbar>\r\n <ion-buttons slot=\"start\">\r\n <ion-button (click)=\"onCancel()\">\r\n <!-- <ion-icon name=\"close\"></ion-icon> -->\r\n <fa-icon [icon]=\"'times'\" size=\"lg\"></fa-icon>\r\n </ion-button>\r\n </ion-buttons>\r\n <ion-title>\r\n {{ modalParams.formHeader }}\r\n </ion-title>\r\n <ion-buttons slot=\"primary\" *ngIf=\"!group.isLoading\">\r\n <app-uiactionbutton [group]=\"group\"></app-uiactionbutton>\r\n </ion-buttons>\r\n </ion-toolbar>\r\n</ion-header>\r\n\r\n<ion-content appScrollbarTheme [ngStyle]=\"getGridStyle()\">\r\n <ion-grid>\r\n <ion-row *ngIf=\"group.isLoading\" class=\"ion-text-center\">\r\n <ion-col class=\"ion-margin ion-padding\">\r\n <ion-spinner></ion-spinner>\r\n </ion-col>\r\n </ion-row>\r\n <ion-row *ngIf=\"!group.isLoading\">\r\n <ion-col>\r\n <app-zform [group]=\"group\"></app-zform>\r\n </ion-col>\r\n </ion-row>\r\n <ion-row *ngIf=\"isSITEnvironment() && !group.isLoading\">\r\n <ion-col>\r\n <pre style=\"font-size: x-small;\">{{group.zModel | json}}</pre>\r\n </ion-col>\r\n </ion-row>\r\n </ion-grid>\r\n</ion-content>\r\n\r\n", styles: [""] }]
121
- }], ctorParameters: function () { return [{ type: i1.WebApiService }, { type: i1.ZCoreService }, { type: i2.ComponentErrorHandlerService }, { type: i1.FieldService }]; }, propDecorators: { modalParams: [{
120
+ }], ctorParameters: function () { return [{ type: i1.WebApiService }, { type: i1.ZCoreService }, { type: i1.ComponentErrorHandlerService }, { type: i1.FieldService }]; }, propDecorators: { modalParams: [{
122
121
  type: Input
123
122
  }] } });
124
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiem1vZGFsLW1vYmlsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tbWhnbG9iYWwtZHluYW1pY2Zvcm0vc3JjL2xpYi96bW9kYWwvem1vZGFsLW1vYmlsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tbWhnbG9iYWwtZHluYW1pY2Zvcm0vc3JjL2xpYi96bW9kYWwvem1vZGFsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFxQixLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFVcEUsMkNBQTJDO0FBQzNDLG1FQUFtRTtBQUNuRSwrRUFBK0U7QUFDL0UsT0FBTyxFQUVILE1BQU0sRUFBZ0IsZ0JBQWdCLEdBQ3pDLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7Ozs7Ozs7OztBQVVoRCxNQUFNLE9BQU8scUJBQXFCO0lBTzlCLFlBQ1ksYUFBNEIsRUFDNUIsWUFBMEIsRUFDMUIscUJBQW1ELEVBQUUsaUNBQWlDO0lBQ3RGLFlBQTBCLENBQUMsaUNBQWlDOztRQUg1RCxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQiwwQkFBcUIsR0FBckIscUJBQXFCLENBQThCO1FBQ25ELGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBUnRDLFVBQUssR0FBVyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQVVqQyxDQUFDO0lBRUQscUJBQXFCO0lBQ3JCLHVCQUF1QjtJQUN2QixJQUFJO0lBRUosUUFBUTtRQUNKLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsV0FBVztRQUNQLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJ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VSxFQUFFLEdBQUc7YUFDbEIsQ0FBQztTQUNMO1FBQ0QsT0FBTztJQUNYLENBQUM7SUFFRCxjQUFjO1FBQ1YsTUFBTSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDNUMsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDO0lBRUQsZ0JBQWdCO1FBQ1osT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQzlDLENBQUM7O2tIQXJIUSxxQkFBcUI7c0dBQXJCLHFCQUFxQiwwRkM1QmxDLHF1Q0FxQ0E7MkZEVGEscUJBQXFCO2tCQU5qQyxTQUFTOytCQUNJLFlBQVk7cU1BTWIsV0FBVztzQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqIEFuZ3VsYXIgKioqKioqKioqKi9cclxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIE9uRGVzdHJveSwgSW5wdXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG4vKioqKioqKioqKiBJb25pYyAqKioqKioqKioqL1xyXG4vLyBpbXBvcnQgeyBNb2RhbENvbnRyb2xsZXIsIFBsYXRmb3JtIH0gZnJvbSBcIkBpb25pYy9hbmd1bGFyXCI7XHJcblxyXG4vKioqKioqKioqKiBQbHVnaW4gKioqKioqKioqKi9cclxuLy8gaW1wb3J0IHsgc3dpdGNoTWFwLCB0YXAgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBvZiwgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBmcm9tRXZlbnQgfSBmcm9tIFwicnhqc1wiO1xyXG5cclxuLyoqKioqKioqKiogQ29tcG9uZW50ICYgU2VydmljZSAqKioqKioqKioqL1xyXG4vLyBpbXBvcnQgeyBGaWVsZFNlcnZpY2UgfSBmcm9tIFwiLi4vbW1oZ2xvYmFsLXpjb3JlL2ZpZWxkLnNlcnZpY2VcIjtcclxuLy8gaW1wb3J0IHsgUmVzb3VyY2VBcGlTZXJ2aWNlIH0gZnJvbSBcIi4uL21taGdsb2JhbC16Y29yZS9yZXNvdXJjZWFwaS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7XHJcbiAgICBXZWJBcGlTZXJ2aWNlLCBNb2RhbFBhZ2VQYXJhbXMsXHJcbiAgICBaR3JvdXAsIFpDb3JlU2VydmljZSwgWkNvbXBvbmVudEhlbHBlciwgWkNvbXBvbmVudE91dHB1dEV2ZW50LCBGaWVsZFNlcnZpY2UsXHJcbn0gZnJvbSBcIm1taGdsb2JhbC16Y29yZVwiO1xyXG5pbXBvcnQgeyBabW9kYWxIZWxwZXIgfSBmcm9tICdtbWhnbG9iYWwtem1vZGFsJztcclxuaW1wb3J0IHsgQ29tcG9uZW50RXJyb3JIYW5kbGVyU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9jb21wb25lbnQtZXJyb3ItaGFuZGxlci5zZXJ2aWNlXCI7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogXCJhcHAtem1vZGFsXCIsXHJcbiAgICB0ZW1wbGF0ZVVybDogXCIuL3ptb2RhbC5jb21wb25lbnQuaHRtbFwiLFxyXG4gICAgc3R5bGVVcmxzOiBbXCIuL3ptb2RhbC5jb21wb25lbnQuc2Nzc1wiXVxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIFptb2RhbE1vYmlsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICAgIEBJbnB1dCgpIG1vZGFsUGFyYW1zOiBNb2RhbFBhZ2VQYXJhbXM7XHJcblxyXG4gICAgZ3JvdXA6IFpHcm91cCA9IG5ldyBaR3JvdXAodHJ1ZSk7XHJcbiAgICBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuICAgIGJhY2tCdXR0b25TdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIHdlYkFwaVNlcnZpY2U6IFdlYkFwaVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSB6Y29yZVNlcnZpY2U6IFpDb3JlU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGNvbXBvbmVudEVycm9ySGFuZGxlcjogQ29tcG9uZW50RXJyb3JIYW5kbGVyU2VydmljZSwgLy8gVXNlIGluIG1taGdsb2JhbC16bW9kYWwuaGVscGVyXHJcbiAgICAgICAgcHJpdmF0ZSBmaWVsZFNlcnZpY2U6IEZpZWxkU2VydmljZSAvLyBVc2UgaW4gbW1oZ2xvYmFsLXptb2RhbC5oZWxwZXJcclxuICAgICkge1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGdldCBtb2RhbEdyb3VwKCkge1xyXG4gICAgLy8gICByZXR1cm4gdGhpcy5ncm91cDtcclxuICAgIC8vIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICBabW9kYWxIZWxwZXIub25Jbml0X01vZGFsRm9ybSh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICBabW9kYWxIZWxwZXIub25EZXN0cm95X01vZGFsRm9ybSh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNhbmNlbChldmVudD86IFpDb21wb25lbnRPdXRwdXRFdmVudCkge1xyXG4gICAgICAgIFptb2RhbEhlbHBlci5vbkNhbmNlbCh0aGlzLCBldmVudCk7XHJcbiAgICAgICAgLy8gdGhpcy5tb2RhbEN0cmwuZGlzbWlzcyhudWxsLCBcImNhbmNlbFwiKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNvbmZpcm0oZXZlbnQ6IFpDb21wb25lbnRPdXRwdXRFdmVudCkge1xyXG4gICAgICAgIFptb2RhbEhlbHBlci5vbkNvbmZpcm0odGhpcywgZXZlbnQpO1xyXG4gICAgICAgIC8vIGNvbnN0IGZnID0gdGhpcy5ncm91cC5mb3JtIGFzIEZvcm1Hcm91cDtcclxuICAgICAgICAvLyBpZiAoIXRoaXMuZ3JvdXAuZm9ybSkge1xyXG4gICAgICAgIC8vICAgICByZXR1cm47XHJcbiAgICAgICAgLy8gfVxyXG5cclxuICAgICAgICAvLyBpZiAoIWZnLmRpcnR5KSB7XHJcbiAgICAgICAgLy8gICAgIGNvbnNvbGUud2FybignRm9ybSBpcyBub3QgZGlydHkgaGVuY2UgbW9kYWxmb3JtIHJlY29yZCBpcyBub3Qgc2F2ZWQuJyk7XHJcbiAgICAgICAgLy8gICAgIHRoaXMub25DYW5jZWwoKTtcclxuICAgICAgICAvLyAgICAgcmV0dXJuO1xyXG4gICAgICAgIC8vIH1cclxuXHJcbiAgICAgICAgLy8gaWYgKCFmZy52YWxpZCkge1xyXG4gICAgICAgIC8vICAgICBjb25zdCBlcnJvcnMgPSBaQ29tcG9uZW50SGVscGVyLmdldEZvcm1Hcm91cEVycm9ycyhmZywgdGhpcy5hbGVydFNlcnZpY2UpO1xyXG4gICAgICAgIC8vICAgICBjb25zb2xlLndhcm4oXCJGb3JtIFZhbGlkYXRpb24gZ290IGVycm9yKHMpOlwiLCBlcnJvcnMpO1xyXG4gICAgICAgIC8vICAgICByZXR1cm47XHJcbiAgICAgICAgLy8gfVxyXG5cclxuICAgICAgICAvLyAvLyBPYmplY3QuYXNzaWduKHRoaXMuZ3JvdXAuek1vZGVsLCBmZy52YWx1ZSk7XHJcbiAgICAgICAgLy8gLy8gdGhpcy5tb2RhbEN0cmwuZGlzbWlzcyh0aGlzLmdyb3VwLnpNb2RlbCwgXCJjb25maXJtXCIpO1xyXG4gICAgICAgIC8vIC8vIGlmIChaQ29tcG9uZW50SGVscGVyLmlzTW9iaWxlU2NyZWVuKCkpIHtcclxuICAgICAgICAvLyB0aGlzLm1vZGFsQ3RybC5kaXNtaXNzKGV2ZW50LmRhdGEsIFwiY29uZmlybVwiKTtcclxuICAgICAgICAvLyAvLyB9IGVsc2Uge1xyXG4gICAgICAgIC8vIC8vICAgdGhpcy5kaWFsb2cuY2xvc2UoZXZlbnQuZGF0YSk7XHJcbiAgICAgICAgLy8gLy8gfVxyXG4gICAgfVxyXG5cclxuICAgIG9uSW5pdENsb3NlKGV2ZW50PzogWkNvbXBvbmVudE91dHB1dEV2ZW50KSB7XHJcbiAgICAgIFptb2RhbEhlbHBlci5vbkluaXRDbG9zZSh0aGlzLCBldmVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gdG8gc2VydmUgYWN0aW9uQnV0dG9uIGF0IGZvcm1IZWFkZXJcclxuICAgIHN1YmplY3RFdmVudChldmVudDogWkNvbXBvbmVudE91dHB1dEV2ZW50LCBncm91cDogWkdyb3VwLCBtZTogYW55KSB7XHJcbiAgICAgICAgaWYgKCFldmVudCB8fCAhZXZlbnQudGFyZ2V0IHx8ICFldmVudC50YXJnZXQuc3RhcnRzV2l0aCgnbW9kYWxHcm91cCcpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc29sZS5sb2coXCI+PiBTdWJqZWN0RXZlbnRcIiwgZXZlbnQpO1xyXG4gICAgICAgIC8vIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldC5yZXBsYWNlKCdtb2RhbEdyb3VwLicsICdncm91cC4nKTtcclxuICAgICAgICBjb25zdCBjYWxsRnVuYyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbCh0aGlzLCBldmVudC50YXJnZXQsIGdyb3VwKTtcclxuICAgICAgICAvLyBjYWxsRnVuYyhldmVudCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsRnVuYyA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZnID0gdGhpcy5ncm91cC5mb3JtIGFzIEZvcm1Hcm91cDtcclxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmdyb3VwLnpNb2RlbCwgZmcudmFsdWUpO1xyXG4gICAgICAgICAgICBldmVudC5kYXRhID0gdGhpcy5ncm91cC56TW9kZWw7XHJcbiAgICAgICAgICAgIGlmIChldmVudC50YXJnZXQuc3RhcnRzV2l0aCgnbW9kYWxHcm91cC5tb2RhbEFuc3dlcicpIHx8IGV2ZW50LnRhcmdldC5zdGFydHNXaXRoKCdtb2RhbEdyb3VwLm1vZGFsQ2FuY2VsJykpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0Z1bmMgPSBjYWxsRnVuYy5iaW5kKHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgbmV3RnVuYyhldmVudCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdGdW5jID0gY2FsbEZ1bmMuYmluZChncm91cC5jdHJsU2NvcGUpO1xyXG4gICAgICAgICAgICAgICAgbmV3RnVuYyhldmVudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgICAgICAgICBcIkZ1bmN0aW9uIG5vdCBkZWZpbmVkIGluIGdyb3VwIGZvcjogXCIsXHJcbiAgICAgICAgICAgICAgICBjYWxsRnVuYyxcclxuICAgICAgICAgICAgICAgIFwiLCBFdmVudDogXCIsXHJcbiAgICAgICAgICAgICAgICBldmVudFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRNb2RlbCQoZ3JvdXA6IGFueSwgaWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgICAgY29uc3QgcmVjSWQgPSBpZCB8fCBncm91cC5yZWZlcmVuY2VJZDtcclxuICAgICAgICByZXR1cm4gdGhpcy53ZWJBcGlTZXJ2aWNlLmh0dHBHZXQkKGdyb3VwLnJlc291cmNlVVJMICsgXCIvXCIgKyByZWNJZCwgbnVsbCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0R3JpZFN0eWxlKCkge1xyXG4gICAgICAgIC8vIGRlYnVnZ2VyO1xyXG4gICAgICAgIGlmICghdGhpcy5pc01vYmlsZVNjcmVlbikge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgXCJoZWlnaHQucHhcIjogNTAwLFxyXG4gICAgICAgICAgICAgICAgXCJ3aWR0aC5weFwiOiA3MDBcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlzTW9iaWxlU2NyZWVuKCkge1xyXG4gICAgICAgIGNvbnN0IHYgPSBaQ29tcG9uZW50SGVscGVyLmlzTW9iaWxlU2NyZWVuKCk7XHJcbiAgICAgICAgcmV0dXJuIHY7XHJcbiAgICB9XHJcblxyXG4gICAgaXNTSVRFbnZpcm9ubWVudCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy56Y29yZVNlcnZpY2UuaXNEZWJ1Z1Nlc3Npb24oKTtcclxuICAgIH1cclxufVxyXG4iLCI8aW9uLWhlYWRlciAqbmdJZj1cImlzTW9iaWxlU2NyZWVuKClcIj5cclxuICA8aW9uLXRvb2xiYXI+XHJcbiAgICA8aW9uLWJ1dHRvbnMgc2xvdD1cInN0YXJ0XCI+XHJcbiAgICAgIDxpb24tYnV0dG9uIChjbGljayk9XCJvbkNhbmNlbCgpXCI+XHJcbiAgICAgICAgPCEtLSA8aW9uLWljb24gbmFtZT1cImNsb3NlXCI+PC9pb24taWNvbj4gLS0+XHJcbiAgICAgICAgPGZhLWljb24gW2ljb25dPVwiJ3RpbWVzJ1wiIHNpemU9XCJsZ1wiPjwvZmEtaWNvbj5cclxuICAgICAgPC9pb24tYnV0dG9uPlxyXG4gICAgPC9pb24tYnV0dG9ucz5cclxuICAgIDxpb24tdGl0bGU+XHJcbiAgICAgIHt7IG1vZGFsUGFyYW1zLmZvcm1IZWFkZXIgfX1cclxuICAgIDwvaW9uLXRpdGxlPlxyXG4gICAgPGlvbi1idXR0b25zIHNsb3Q9XCJwcmltYXJ5XCIgKm5nSWY9XCIhZ3JvdXAuaXNMb2FkaW5nXCI+XHJcbiAgICAgIDxhcHAtdWlhY3Rpb25idXR0b24gW2dyb3VwXT1cImdyb3VwXCI+PC9hcHAtdWlhY3Rpb25idXR0b24+XHJcbiAgICA8L2lvbi1idXR0b25zPlxyXG4gIDwvaW9uLXRvb2xiYXI+XHJcbjwvaW9uLWhlYWRlcj5cclxuXHJcbjxpb24tY29udGVudCBhcHBTY3JvbGxiYXJUaGVtZSBbbmdTdHlsZV09XCJnZXRHcmlkU3R5bGUoKVwiPlxyXG4gIDxpb24tZ3JpZD5cclxuICAgIDxpb24tcm93ICpuZ0lmPVwiZ3JvdXAuaXNMb2FkaW5nXCIgY2xhc3M9XCJpb24tdGV4dC1jZW50ZXJcIj5cclxuICAgICAgPGlvbi1jb2wgY2xhc3M9XCJpb24tbWFyZ2luIGlvbi1wYWRkaW5nXCI+XHJcbiAgICAgICAgPGlvbi1zcGlubmVyPjwvaW9uLXNwaW5uZXI+XHJcbiAgICAgIDwvaW9uLWNvbD5cclxuICAgIDwvaW9uLXJvdz5cclxuICAgIDxpb24tcm93ICpuZ0lmPVwiIWdyb3VwLmlzTG9hZGluZ1wiPlxyXG4gICAgICA8aW9uLWNvbD5cclxuICAgICAgICA8YXBwLXpmb3JtIFtncm91cF09XCJncm91cFwiPjwvYXBwLXpmb3JtPlxyXG4gICAgICA8L2lvbi1jb2w+XHJcbiAgICA8L2lvbi1yb3c+XHJcbiAgICA8aW9uLXJvdyAqbmdJZj1cImlzU0lURW52aXJvbm1lbnQoKSAmJiAhZ3JvdXAuaXNMb2FkaW5nXCI+XHJcbiAgICAgIDxpb24tY29sPlxyXG4gICAgICAgIDxwcmUgc3R5bGU9XCJmb250LXNpemU6IHgtc21hbGw7XCI+e3tncm91cC56TW9kZWwgfCBqc29ufX08L3ByZT5cclxuICAgICAgPC9pb24tY29sPlxyXG4gICAgPC9pb24tcm93PlxyXG4gIDwvaW9uLWdyaWQ+XHJcbjwvaW9uLWNvbnRlbnQ+XHJcblxyXG4iXX0=
123
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiem1vZGFsLW1vYmlsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tbWhnbG9iYWwtZHluYW1pY2Zvcm0vc3JjL2xpYi96bW9kYWwvem1vZGFsLW1vYmlsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tbWhnbG9iYWwtZHluYW1pY2Zvcm0vc3JjL2xpYi96bW9kYWwvem1vZGFsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFxQixLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFVcEUsMkNBQTJDO0FBQzNDLG1FQUFtRTtBQUNuRSwrRUFBK0U7QUFDL0UsT0FBTyxFQUVILE1BQU0sRUFBZ0IsZ0JBQWdCLEdBQ3pDLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7Ozs7Ozs7O0FBU2hELE1BQU0sT0FBTyxxQkFBcUI7SUFPOUIsWUFDWSxhQUE0QixFQUM1QixZQUEwQixFQUMxQiw0QkFBMEQsRUFBRSxpQ0FBaUM7SUFDN0YsWUFBMEIsQ0FBQyxpQ0FBaUM7O1FBSDVELGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLGlDQUE0QixHQUE1Qiw0QkFBNEIsQ0FBOEI7UUFDMUQsaUJBQVksR0FBWixZQUFZLENBQWM7UUFSdEMsVUFBSyxHQUFXLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBVWpDLENBQUM7SUFFRCxxQkFBcUI7SUFDckIsdUJBQXVCO0lBQ3ZCLElBQUk7SUFFSixRQUFRO1FBQ0osWUFBWSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxXQUFXO1FBQ1AsWUFBWSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxRQUFRLENBQUMsS0FBNkI7UUFDbEMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbkMsMENBQTBDO0lBQzlDLENBQUM7SUFFRCxTQUFTLENBQUMsS0FBNEI7UUFDbEMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDcEMsMkNBQTJDO1FBQzNDLDBCQUEwQjtRQUMxQixjQUFjO1FBQ2QsSUFBSTtRQUVKLG1CQUFtQjtRQUNuQiw4RUFBOEU7UUFDOUUsdUJBQXVCO1FBQ3ZCLGNBQWM7UUFDZCxJQUFJO1FBRUosbUJBQW1CO1FBQ25CLGlGQUFpRjtRQUNqRiw2REFBNkQ7UUFDN0QsY0FBYztRQUNkLElBQUk7UUFFSixpREFBaUQ7UUFDakQsMkRBQTJEO1FBQzNELDhDQUE4QztRQUM5QyxpREFBaUQ7UUFDakQsY0FBYztRQUNkLHNDQUFzQztRQUN0QyxPQUFPO0lBQ1gsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUE2QjtRQUN2QyxZQUFZLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsc0NBQXNDO0lBQ3RDLFlBQVksQ0FBQyxLQUE0QixFQUFFLEtBQWEsRUFBRSxFQUFPO1FBQzdELElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLEVBQUU7WUFDbkUsT0FBTztTQUNWO1FBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN0QyxnRUFBZ0U7UUFDaEUsTUFBTSxRQUFRLEdBQUcsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3BGLG1CQUFtQjtRQUNuQixJQUFJLE9BQU8sUUFBUSxLQUFLLFVBQVUsRUFBRTtZQUNoQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQWlCLENBQUM7WUFDeEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDM0MsS0FBSyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUMvQixJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLHdCQUF3QixDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsd0JBQXdCLENBQUMsRUFBRTtnQkFDeEcsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDcEMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ2xCO2lCQUFNO2dCQUNILE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUMvQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDbEI7U0FDSjthQUFNO1lBQ0gsT0FBTyxDQUFDLElBQUksQ0FDUixxQ0FBcUMsRUFDckMsUUFBUSxFQUNSLFdBQVcsRUFDWCxLQUFLLENBQ1IsQ0FBQztTQUNMO0lBQ0wsQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUFVLEVBQUUsRUFBVTtRQUM1QixNQUFNLEtBQUssR0FBRyxFQUFFLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQztRQUN0QyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsR0FBRyxHQUFHLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBRUQsWUFBWTtRQUNSLFlBQVk7UUFDWixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUN0QixPQUFPO2dCQUNILFdBQVcsRUFBRSxHQUFHO2dCQUNoQixVQUFVLEVBQUUsR0FBRzthQUNsQixDQUFDO1NBQ0w7UUFDRCxPQUFPO0lBQ1gsQ0FBQztJQUVELGNBQWM7UUFDVixNQUFNLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUM1QyxPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFFRCxnQkFBZ0I7UUFDWixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDOUMsQ0FBQzs7a0hBckhRLHFCQUFxQjtzR0FBckIscUJBQXFCLDBGQzNCbEMscXVDQXFDQTsyRkRWYSxxQkFBcUI7a0JBTmpDLFNBQVM7K0JBQ0ksWUFBWTtxTUFNYixXQUFXO3NCQUFuQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKiogQW5ndWxhciAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgT25EZXN0cm95LCBJbnB1dCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbi8qKioqKioqKioqIElvbmljICoqKioqKioqKiovXHJcbi8vIGltcG9ydCB7IE1vZGFsQ29udHJvbGxlciwgUGxhdGZvcm0gfSBmcm9tIFwiQGlvbmljL2FuZ3VsYXJcIjtcclxuXHJcbi8qKioqKioqKioqIFBsdWdpbiAqKioqKioqKioqL1xyXG4vLyBpbXBvcnQgeyBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIG9mLCBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIGZyb21FdmVudCB9IGZyb20gXCJyeGpzXCI7XHJcblxyXG4vKioqKioqKioqKiBDb21wb25lbnQgJiBTZXJ2aWNlICoqKioqKioqKiovXHJcbi8vIGltcG9ydCB7IEZpZWxkU2VydmljZSB9IGZyb20gXCIuLi9tbWhnbG9iYWwtemNvcmUvZmllbGQuc2VydmljZVwiO1xyXG4vLyBpbXBvcnQgeyBSZXNvdXJjZUFwaVNlcnZpY2UgfSBmcm9tIFwiLi4vbW1oZ2xvYmFsLXpjb3JlL3Jlc291cmNlYXBpLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtcclxuICAgIFdlYkFwaVNlcnZpY2UsIE1vZGFsUGFnZVBhcmFtcyxcclxuICAgIFpHcm91cCwgWkNvcmVTZXJ2aWNlLCBaQ29tcG9uZW50SGVscGVyLCBaQ29tcG9uZW50T3V0cHV0RXZlbnQsIEZpZWxkU2VydmljZSwgQ29tcG9uZW50RXJyb3JIYW5kbGVyU2VydmljZSxcclxufSBmcm9tIFwibW1oZ2xvYmFsLXpjb3JlXCI7XHJcbmltcG9ydCB7IFptb2RhbEhlbHBlciB9IGZyb20gJ21taGdsb2JhbC16bW9kYWwnOyBcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiBcImFwcC16bW9kYWxcIixcclxuICAgIHRlbXBsYXRlVXJsOiBcIi4vem1vZGFsLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgICBzdHlsZVVybHM6IFtcIi4vem1vZGFsLmNvbXBvbmVudC5zY3NzXCJdXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgWm1vZGFsTW9iaWxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gICAgQElucHV0KCkgbW9kYWxQYXJhbXM6IE1vZGFsUGFnZVBhcmFtcztcclxuXHJcbiAgICBncm91cDogWkdyb3VwID0gbmV3IFpHcm91cCh0cnVlKTtcclxuICAgIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG4gICAgYmFja0J1dHRvblN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgd2ViQXBpU2VydmljZTogV2ViQXBpU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHpjb3JlU2VydmljZTogWkNvcmVTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgY29tcG9uZW50RXJyb3JIYW5kbGVyU2VydmljZTogQ29tcG9uZW50RXJyb3JIYW5kbGVyU2VydmljZSwgLy8gVXNlIGluIG1taGdsb2JhbC16bW9kYWwuaGVscGVyXHJcbiAgICAgICAgcHJpdmF0ZSBmaWVsZFNlcnZpY2U6IEZpZWxkU2VydmljZSAvLyBVc2UgaW4gbW1oZ2xvYmFsLXptb2RhbC5oZWxwZXJcclxuICAgICkge1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGdldCBtb2RhbEdyb3VwKCkge1xyXG4gICAgLy8gICByZXR1cm4gdGhpcy5ncm91cDtcclxuICAgIC8vIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICBabW9kYWxIZWxwZXIub25Jbml0X01vZGFsRm9ybSh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICBabW9kYWxIZWxwZXIub25EZXN0cm95X01vZGFsRm9ybSh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNhbmNlbChldmVudD86IFpDb21wb25lbnRPdXRwdXRFdmVudCkge1xyXG4gICAgICAgIFptb2RhbEhlbHBlci5vbkNhbmNlbCh0aGlzLCBldmVudCk7XHJcbiAgICAgICAgLy8gdGhpcy5tb2RhbEN0cmwuZGlzbWlzcyhudWxsLCBcImNhbmNlbFwiKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNvbmZpcm0oZXZlbnQ6IFpDb21wb25lbnRPdXRwdXRFdmVudCkge1xyXG4gICAgICAgIFptb2RhbEhlbHBlci5vbkNvbmZpcm0odGhpcywgZXZlbnQpO1xyXG4gICAgICAgIC8vIGNvbnN0IGZnID0gdGhpcy5ncm91cC5mb3JtIGFzIEZvcm1Hcm91cDtcclxuICAgICAgICAvLyBpZiAoIXRoaXMuZ3JvdXAuZm9ybSkge1xyXG4gICAgICAgIC8vICAgICByZXR1cm47XHJcbiAgICAgICAgLy8gfVxyXG5cclxuICAgICAgICAvLyBpZiAoIWZnLmRpcnR5KSB7XHJcbiAgICAgICAgLy8gICAgIGNvbnNvbGUud2FybignRm9ybSBpcyBub3QgZGlydHkgaGVuY2UgbW9kYWxmb3JtIHJlY29yZCBpcyBub3Qgc2F2ZWQuJyk7XHJcbiAgICAgICAgLy8gICAgIHRoaXMub25DYW5jZWwoKTtcclxuICAgICAgICAvLyAgICAgcmV0dXJuO1xyXG4gICAgICAgIC8vIH1cclxuXHJcbiAgICAgICAgLy8gaWYgKCFmZy52YWxpZCkge1xyXG4gICAgICAgIC8vICAgICBjb25zdCBlcnJvcnMgPSBaQ29tcG9uZW50SGVscGVyLmdldEZvcm1Hcm91cEVycm9ycyhmZywgdGhpcy5hbGVydFNlcnZpY2UpO1xyXG4gICAgICAgIC8vICAgICBjb25zb2xlLndhcm4oXCJGb3JtIFZhbGlkYXRpb24gZ290IGVycm9yKHMpOlwiLCBlcnJvcnMpO1xyXG4gICAgICAgIC8vICAgICByZXR1cm47XHJcbiAgICAgICAgLy8gfVxyXG5cclxuICAgICAgICAvLyAvLyBPYmplY3QuYXNzaWduKHRoaXMuZ3JvdXAuek1vZGVsLCBmZy52YWx1ZSk7XHJcbiAgICAgICAgLy8gLy8gdGhpcy5tb2RhbEN0cmwuZGlzbWlzcyh0aGlzLmdyb3VwLnpNb2RlbCwgXCJjb25maXJtXCIpO1xyXG4gICAgICAgIC8vIC8vIGlmIChaQ29tcG9uZW50SGVscGVyLmlzTW9iaWxlU2NyZWVuKCkpIHtcclxuICAgICAgICAvLyB0aGlzLm1vZGFsQ3RybC5kaXNtaXNzKGV2ZW50LmRhdGEsIFwiY29uZmlybVwiKTtcclxuICAgICAgICAvLyAvLyB9IGVsc2Uge1xyXG4gICAgICAgIC8vIC8vICAgdGhpcy5kaWFsb2cuY2xvc2UoZXZlbnQuZGF0YSk7XHJcbiAgICAgICAgLy8gLy8gfVxyXG4gICAgfVxyXG5cclxuICAgIG9uSW5pdENsb3NlKGV2ZW50PzogWkNvbXBvbmVudE91dHB1dEV2ZW50KSB7XHJcbiAgICAgIFptb2RhbEhlbHBlci5vbkluaXRDbG9zZSh0aGlzLCBldmVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gdG8gc2VydmUgYWN0aW9uQnV0dG9uIGF0IGZvcm1IZWFkZXJcclxuICAgIHN1YmplY3RFdmVudChldmVudDogWkNvbXBvbmVudE91dHB1dEV2ZW50LCBncm91cDogWkdyb3VwLCBtZTogYW55KSB7XHJcbiAgICAgICAgaWYgKCFldmVudCB8fCAhZXZlbnQudGFyZ2V0IHx8ICFldmVudC50YXJnZXQuc3RhcnRzV2l0aCgnbW9kYWxHcm91cCcpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc29sZS5sb2coXCI+PiBTdWJqZWN0RXZlbnRcIiwgZXZlbnQpO1xyXG4gICAgICAgIC8vIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldC5yZXBsYWNlKCdtb2RhbEdyb3VwLicsICdncm91cC4nKTtcclxuICAgICAgICBjb25zdCBjYWxsRnVuYyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbCh0aGlzLCBldmVudC50YXJnZXQsIGdyb3VwKTtcclxuICAgICAgICAvLyBjYWxsRnVuYyhldmVudCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsRnVuYyA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZnID0gdGhpcy5ncm91cC5mb3JtIGFzIEZvcm1Hcm91cDtcclxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmdyb3VwLnpNb2RlbCwgZmcudmFsdWUpO1xyXG4gICAgICAgICAgICBldmVudC5kYXRhID0gdGhpcy5ncm91cC56TW9kZWw7XHJcbiAgICAgICAgICAgIGlmIChldmVudC50YXJnZXQuc3RhcnRzV2l0aCgnbW9kYWxHcm91cC5tb2RhbEFuc3dlcicpIHx8IGV2ZW50LnRhcmdldC5zdGFydHNXaXRoKCdtb2RhbEdyb3VwLm1vZGFsQ2FuY2VsJykpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0Z1bmMgPSBjYWxsRnVuYy5iaW5kKHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgbmV3RnVuYyhldmVudCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdGdW5jID0gY2FsbEZ1bmMuYmluZChncm91cC5jdHJsU2NvcGUpO1xyXG4gICAgICAgICAgICAgICAgbmV3RnVuYyhldmVudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgICAgICAgICBcIkZ1bmN0aW9uIG5vdCBkZWZpbmVkIGluIGdyb3VwIGZvcjogXCIsXHJcbiAgICAgICAgICAgICAgICBjYWxsRnVuYyxcclxuICAgICAgICAgICAgICAgIFwiLCBFdmVudDogXCIsXHJcbiAgICAgICAgICAgICAgICBldmVudFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRNb2RlbCQoZ3JvdXA6IGFueSwgaWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgICAgY29uc3QgcmVjSWQgPSBpZCB8fCBncm91cC5yZWZlcmVuY2VJZDtcclxuICAgICAgICByZXR1cm4gdGhpcy53ZWJBcGlTZXJ2aWNlLmh0dHBHZXQkKGdyb3VwLnJlc291cmNlVVJMICsgXCIvXCIgKyByZWNJZCwgbnVsbCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0R3JpZFN0eWxlKCkge1xyXG4gICAgICAgIC8vIGRlYnVnZ2VyO1xyXG4gICAgICAgIGlmICghdGhpcy5pc01vYmlsZVNjcmVlbikge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgXCJoZWlnaHQucHhcIjogNTAwLFxyXG4gICAgICAgICAgICAgICAgXCJ3aWR0aC5weFwiOiA3MDBcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlzTW9iaWxlU2NyZWVuKCkge1xyXG4gICAgICAgIGNvbnN0IHYgPSBaQ29tcG9uZW50SGVscGVyLmlzTW9iaWxlU2NyZWVuKCk7XHJcbiAgICAgICAgcmV0dXJuIHY7XHJcbiAgICB9XHJcblxyXG4gICAgaXNTSVRFbnZpcm9ubWVudCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy56Y29yZVNlcnZpY2UuaXNEZWJ1Z1Nlc3Npb24oKTtcclxuICAgIH1cclxufVxyXG4iLCI8aW9uLWhlYWRlciAqbmdJZj1cImlzTW9iaWxlU2NyZWVuKClcIj5cclxuICA8aW9uLXRvb2xiYXI+XHJcbiAgICA8aW9uLWJ1dHRvbnMgc2xvdD1cInN0YXJ0XCI+XHJcbiAgICAgIDxpb24tYnV0dG9uIChjbGljayk9XCJvbkNhbmNlbCgpXCI+XHJcbiAgICAgICAgPCEtLSA8aW9uLWljb24gbmFtZT1cImNsb3NlXCI+PC9pb24taWNvbj4gLS0+XHJcbiAgICAgICAgPGZhLWljb24gW2ljb25dPVwiJ3RpbWVzJ1wiIHNpemU9XCJsZ1wiPjwvZmEtaWNvbj5cclxuICAgICAgPC9pb24tYnV0dG9uPlxyXG4gICAgPC9pb24tYnV0dG9ucz5cclxuICAgIDxpb24tdGl0bGU+XHJcbiAgICAgIHt7IG1vZGFsUGFyYW1zLmZvcm1IZWFkZXIgfX1cclxuICAgIDwvaW9uLXRpdGxlPlxyXG4gICAgPGlvbi1idXR0b25zIHNsb3Q9XCJwcmltYXJ5XCIgKm5nSWY9XCIhZ3JvdXAuaXNMb2FkaW5nXCI+XHJcbiAgICAgIDxhcHAtdWlhY3Rpb25idXR0b24gW2dyb3VwXT1cImdyb3VwXCI+PC9hcHAtdWlhY3Rpb25idXR0b24+XHJcbiAgICA8L2lvbi1idXR0b25zPlxyXG4gIDwvaW9uLXRvb2xiYXI+XHJcbjwvaW9uLWhlYWRlcj5cclxuXHJcbjxpb24tY29udGVudCBhcHBTY3JvbGxiYXJUaGVtZSBbbmdTdHlsZV09XCJnZXRHcmlkU3R5bGUoKVwiPlxyXG4gIDxpb24tZ3JpZD5cclxuICAgIDxpb24tcm93ICpuZ0lmPVwiZ3JvdXAuaXNMb2FkaW5nXCIgY2xhc3M9XCJpb24tdGV4dC1jZW50ZXJcIj5cclxuICAgICAgPGlvbi1jb2wgY2xhc3M9XCJpb24tbWFyZ2luIGlvbi1wYWRkaW5nXCI+XHJcbiAgICAgICAgPGlvbi1zcGlubmVyPjwvaW9uLXNwaW5uZXI+XHJcbiAgICAgIDwvaW9uLWNvbD5cclxuICAgIDwvaW9uLXJvdz5cclxuICAgIDxpb24tcm93ICpuZ0lmPVwiIWdyb3VwLmlzTG9hZGluZ1wiPlxyXG4gICAgICA8aW9uLWNvbD5cclxuICAgICAgICA8YXBwLXpmb3JtIFtncm91cF09XCJncm91cFwiPjwvYXBwLXpmb3JtPlxyXG4gICAgICA8L2lvbi1jb2w+XHJcbiAgICA8L2lvbi1yb3c+XHJcbiAgICA8aW9uLXJvdyAqbmdJZj1cImlzU0lURW52aXJvbm1lbnQoKSAmJiAhZ3JvdXAuaXNMb2FkaW5nXCI+XHJcbiAgICAgIDxpb24tY29sPlxyXG4gICAgICAgIDxwcmUgc3R5bGU9XCJmb250LXNpemU6IHgtc21hbGw7XCI+e3tncm91cC56TW9kZWwgfCBqc29ufX08L3ByZT5cclxuICAgICAgPC9pb24tY29sPlxyXG4gICAgPC9pb24tcm93PlxyXG4gIDwvaW9uLWdyaWQ+XHJcbjwvaW9uLWNvbnRlbnQ+XHJcblxyXG4iXX0=
@@ -8,15 +8,14 @@ import * as i0 from "@angular/core";
8
8
  import * as i1 from "@progress/kendo-angular-dialog";
9
9
  import * as i2 from "@ionic/angular";
10
10
  import * as i3 from "mmhglobal-zcore";
11
- import * as i4 from "../services/component-error-handler.service";
12
- import * as i5 from "@fortawesome/angular-fontawesome";
13
- import * as i6 from "../uiactionbutton/uiactionbutton.component";
14
- import * as i7 from "../zform/zform.component";
15
- import * as i8 from "@angular/common";
16
- import * as i9 from "../directives/scrollbar.theme.directive";
17
- import * as i10 from "@angular/flex-layout/extended";
11
+ import * as i4 from "@fortawesome/angular-fontawesome";
12
+ import * as i5 from "../uiactionbutton/uiactionbutton.component";
13
+ import * as i6 from "../zform/zform.component";
14
+ import * as i7 from "@angular/common";
15
+ import * as i8 from "../directives/scrollbar.theme.directive";
16
+ import * as i9 from "@angular/flex-layout/extended";
18
17
  export class ZmodalComponent extends DialogContentBase {
19
- constructor(dialog, modalCtrl, zcoreService, webApiService, resourceApiService, componentErrorHandler, // Use in mmhglobal-zmodal.helper
18
+ constructor(dialog, modalCtrl, zcoreService, webApiService, resourceApiService, componentErrorHandlerService, // Use in mmhglobal-zmodal.helper
20
19
  fieldService, platform, alertService) {
21
20
  super(dialog);
22
21
  this.dialog = dialog;
@@ -24,7 +23,7 @@ export class ZmodalComponent extends DialogContentBase {
24
23
  this.zcoreService = zcoreService;
25
24
  this.webApiService = webApiService;
26
25
  this.resourceApiService = resourceApiService;
27
- this.componentErrorHandler = componentErrorHandler;
26
+ this.componentErrorHandlerService = componentErrorHandlerService;
28
27
  this.fieldService = fieldService;
29
28
  this.platform = platform;
30
29
  this.alertService = alertService;
@@ -118,12 +117,12 @@ export class ZmodalComponent extends DialogContentBase {
118
117
  return v;
119
118
  }
120
119
  }
121
- ZmodalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ZmodalComponent, deps: [{ token: i1.DialogRef }, { token: i2.ModalController }, { token: i3.ZCoreService }, { token: i3.WebApiService }, { token: i3.ResourceApiService }, { token: i4.ComponentErrorHandlerService }, { token: i3.FieldService }, { token: i2.Platform }, { token: i3.AlertService }], target: i0.ɵɵFactoryTarget.Component });
122
- ZmodalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ZmodalComponent, selector: "app-zmodal", inputs: { modalParams: "modalParams" }, usesInheritance: true, ngImport: i0, template: "<ion-header *ngIf=\"isMobileScreen()\">\r\n <ion-toolbar>\r\n <ion-buttons slot=\"start\">\r\n <ion-button (click)=\"onCancel()\">\r\n <!-- <ion-icon name=\"close\"></ion-icon> -->\r\n <fa-icon [icon]=\"'times'\" size=\"lg\"></fa-icon>\r\n </ion-button>\r\n </ion-buttons>\r\n <ion-title>\r\n {{ modalParams.formHeader }}\r\n </ion-title>\r\n <ion-buttons slot=\"primary\" *ngIf=\"!group.isLoading\">\r\n <app-uiactionbutton [group]=\"group\"></app-uiactionbutton>\r\n </ion-buttons>\r\n </ion-toolbar>\r\n</ion-header>\r\n\r\n<ion-content appScrollbarTheme [ngStyle]=\"getGridStyle()\">\r\n <ion-grid>\r\n <ion-row *ngIf=\"group.isLoading\" class=\"ion-text-center\">\r\n <ion-col class=\"ion-margin ion-padding\">\r\n <ion-spinner></ion-spinner>\r\n </ion-col>\r\n </ion-row>\r\n <ion-row *ngIf=\"!group.isLoading\">\r\n <ion-col>\r\n <app-zform [group]=\"group\"></app-zform>\r\n </ion-col>\r\n </ion-row>\r\n <ion-row *ngIf=\"isSITEnvironment() && !group.isLoading\">\r\n <ion-col>\r\n <pre style=\"font-size: x-small;\">{{group.zModel | json}}</pre>\r\n </ion-col>\r\n </ion-row>\r\n </ion-grid>\r\n</ion-content>\r\n\r\n", styles: [""], components: [{ type: i2.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { type: i2.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { type: i2.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { type: i2.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { type: i5.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }, { type: i2.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { type: i6.UiactionbuttonComponent, selector: "app-uiactionbutton" }, { type: i2.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { type: i2.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { type: i2.IonRow, selector: "ion-row" }, { type: i2.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { type: i2.IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { type: i7.ZformComponent, selector: "app-zform", inputs: ["group", "fieldName"] }], directives: [{ type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.ScrollbarThemeDirective, selector: "[appScrollbarTheme]" }, { type: i8.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i10.DefaultStyleDirective, selector: " [ngStyle], [ngStyle.xs], [ngStyle.sm], [ngStyle.md], [ngStyle.lg], [ngStyle.xl], [ngStyle.lt-sm], [ngStyle.lt-md], [ngStyle.lt-lg], [ngStyle.lt-xl], [ngStyle.gt-xs], [ngStyle.gt-sm], [ngStyle.gt-md], [ngStyle.gt-lg]", inputs: ["ngStyle", "ngStyle.xs", "ngStyle.sm", "ngStyle.md", "ngStyle.lg", "ngStyle.xl", "ngStyle.lt-sm", "ngStyle.lt-md", "ngStyle.lt-lg", "ngStyle.lt-xl", "ngStyle.gt-xs", "ngStyle.gt-sm", "ngStyle.gt-md", "ngStyle.gt-lg"] }], pipes: { "json": i8.JsonPipe } });
120
+ ZmodalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ZmodalComponent, deps: [{ token: i1.DialogRef }, { token: i2.ModalController }, { token: i3.ZCoreService }, { token: i3.WebApiService }, { token: i3.ResourceApiService }, { token: i3.ComponentErrorHandlerService }, { token: i3.FieldService }, { token: i2.Platform }, { token: i3.AlertService }], target: i0.ɵɵFactoryTarget.Component });
121
+ ZmodalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ZmodalComponent, selector: "app-zmodal", inputs: { modalParams: "modalParams" }, usesInheritance: true, ngImport: i0, template: "<ion-header *ngIf=\"isMobileScreen()\">\r\n <ion-toolbar>\r\n <ion-buttons slot=\"start\">\r\n <ion-button (click)=\"onCancel()\">\r\n <!-- <ion-icon name=\"close\"></ion-icon> -->\r\n <fa-icon [icon]=\"'times'\" size=\"lg\"></fa-icon>\r\n </ion-button>\r\n </ion-buttons>\r\n <ion-title>\r\n {{ modalParams.formHeader }}\r\n </ion-title>\r\n <ion-buttons slot=\"primary\" *ngIf=\"!group.isLoading\">\r\n <app-uiactionbutton [group]=\"group\"></app-uiactionbutton>\r\n </ion-buttons>\r\n </ion-toolbar>\r\n</ion-header>\r\n\r\n<ion-content appScrollbarTheme [ngStyle]=\"getGridStyle()\">\r\n <ion-grid>\r\n <ion-row *ngIf=\"group.isLoading\" class=\"ion-text-center\">\r\n <ion-col class=\"ion-margin ion-padding\">\r\n <ion-spinner></ion-spinner>\r\n </ion-col>\r\n </ion-row>\r\n <ion-row *ngIf=\"!group.isLoading\">\r\n <ion-col>\r\n <app-zform [group]=\"group\"></app-zform>\r\n </ion-col>\r\n </ion-row>\r\n <ion-row *ngIf=\"isSITEnvironment() && !group.isLoading\">\r\n <ion-col>\r\n <pre style=\"font-size: x-small;\">{{group.zModel | json}}</pre>\r\n </ion-col>\r\n </ion-row>\r\n </ion-grid>\r\n</ion-content>\r\n\r\n", styles: [""], components: [{ type: i2.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { type: i2.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { type: i2.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { type: i2.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { type: i4.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }, { type: i2.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { type: i5.UiactionbuttonComponent, selector: "app-uiactionbutton" }, { type: i2.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { type: i2.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { type: i2.IonRow, selector: "ion-row" }, { type: i2.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { type: i2.IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { type: i6.ZformComponent, selector: "app-zform", inputs: ["group", "fieldName"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.ScrollbarThemeDirective, selector: "[appScrollbarTheme]" }, { type: i7.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i9.DefaultStyleDirective, selector: " [ngStyle], [ngStyle.xs], [ngStyle.sm], [ngStyle.md], [ngStyle.lg], [ngStyle.xl], [ngStyle.lt-sm], [ngStyle.lt-md], [ngStyle.lt-lg], [ngStyle.lt-xl], [ngStyle.gt-xs], [ngStyle.gt-sm], [ngStyle.gt-md], [ngStyle.gt-lg]", inputs: ["ngStyle", "ngStyle.xs", "ngStyle.sm", "ngStyle.md", "ngStyle.lg", "ngStyle.xl", "ngStyle.lt-sm", "ngStyle.lt-md", "ngStyle.lt-lg", "ngStyle.lt-xl", "ngStyle.gt-xs", "ngStyle.gt-sm", "ngStyle.gt-md", "ngStyle.gt-lg"] }], pipes: { "json": i7.JsonPipe } });
123
122
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ZmodalComponent, decorators: [{
124
123
  type: Component,
125
124
  args: [{ selector: 'app-zmodal', template: "<ion-header *ngIf=\"isMobileScreen()\">\r\n <ion-toolbar>\r\n <ion-buttons slot=\"start\">\r\n <ion-button (click)=\"onCancel()\">\r\n <!-- <ion-icon name=\"close\"></ion-icon> -->\r\n <fa-icon [icon]=\"'times'\" size=\"lg\"></fa-icon>\r\n </ion-button>\r\n </ion-buttons>\r\n <ion-title>\r\n {{ modalParams.formHeader }}\r\n </ion-title>\r\n <ion-buttons slot=\"primary\" *ngIf=\"!group.isLoading\">\r\n <app-uiactionbutton [group]=\"group\"></app-uiactionbutton>\r\n </ion-buttons>\r\n </ion-toolbar>\r\n</ion-header>\r\n\r\n<ion-content appScrollbarTheme [ngStyle]=\"getGridStyle()\">\r\n <ion-grid>\r\n <ion-row *ngIf=\"group.isLoading\" class=\"ion-text-center\">\r\n <ion-col class=\"ion-margin ion-padding\">\r\n <ion-spinner></ion-spinner>\r\n </ion-col>\r\n </ion-row>\r\n <ion-row *ngIf=\"!group.isLoading\">\r\n <ion-col>\r\n <app-zform [group]=\"group\"></app-zform>\r\n </ion-col>\r\n </ion-row>\r\n <ion-row *ngIf=\"isSITEnvironment() && !group.isLoading\">\r\n <ion-col>\r\n <pre style=\"font-size: x-small;\">{{group.zModel | json}}</pre>\r\n </ion-col>\r\n </ion-row>\r\n </ion-grid>\r\n</ion-content>\r\n\r\n", styles: [""] }]
126
- }], ctorParameters: function () { return [{ type: i1.DialogRef }, { type: i2.ModalController }, { type: i3.ZCoreService }, { type: i3.WebApiService }, { type: i3.ResourceApiService }, { type: i4.ComponentErrorHandlerService }, { type: i3.FieldService }, { type: i2.Platform }, { type: i3.AlertService }]; }, propDecorators: { modalParams: [{
125
+ }], ctorParameters: function () { return [{ type: i1.DialogRef }, { type: i2.ModalController }, { type: i3.ZCoreService }, { type: i3.WebApiService }, { type: i3.ResourceApiService }, { type: i3.ComponentErrorHandlerService }, { type: i3.FieldService }, { type: i2.Platform }, { type: i3.AlertService }]; }, propDecorators: { modalParams: [{
127
126
  type: Input
128
127
  }] } });
129
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiem1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21taGdsb2JhbC1keW5hbWljZm9ybS9zcmMvbGliL3ptb2RhbC96bW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvem1vZGFsL3ptb2RhbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBcUIsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBUXBFLE9BQU8sRUFBRSxpQkFBaUIsRUFBYSxNQUFNLGdDQUFnQyxDQUFDO0FBRTlFLDJDQUEyQztBQUMzQyxPQUFPLEVBQ0wsTUFBTSxFQUVOLGdCQUFnQixFQUNqQixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxZQUFZLEVBQWlCLE1BQU0sa0JBQWtCLENBQUM7Ozs7Ozs7Ozs7OztBQVUvRCxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxpQkFBaUI7SUFPcEQsWUFDUyxNQUFpQixFQUNoQixTQUEwQixFQUMxQixZQUEwQixFQUMxQixhQUE0QixFQUM1QixrQkFBc0MsRUFDdEMscUJBQW1ELEVBQUUsaUNBQWlDO0lBQ3RGLFlBQTBCLEVBQzFCLFFBQWtCLEVBQ2xCLFlBQTBCO1FBR2xDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQVhQLFdBQU0sR0FBTixNQUFNLENBQVc7UUFDaEIsY0FBUyxHQUFULFNBQVMsQ0FBaUI7UUFDMUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0QywwQkFBcUIsR0FBckIscUJBQXFCLENBQThCO1FBQ25ELGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLGFBQVEsR0FBUixR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LHFDQUFxQyxFQUNyQyxRQUFRLEVBQ1IsV0FBVyxFQUNYLEtBQUssQ0FDTixDQUFDO1NBQ0g7SUFDSCxDQUFDO0lBRUQsU0FBUyxDQUFDLEtBQVUsRUFBRSxFQUFVO1FBQzlCLE1BQU0sS0FBSyxHQUFHLEVBQUUsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDO1FBQ3RDLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxHQUFHLEdBQUcsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFFRCxZQUFZO1FBQ1YsWUFBWTtRQUNaLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3hCLE9BQU87Z0JBQ0wsV0FBVyxFQUFFLEdBQUc7Z0JBQ2hCLFVBQVUsRUFBRSxHQUFHO2FBQ2hCLENBQUM7U0FDSDtRQUNELE9BQU87SUFDVCxDQUFDO0lBRUQsY0FBYztRQUNaLE1BQU0sQ0FBQyxHQUFHLGdCQUFnQixDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzVDLE9BQU8sQ0FBQyxDQUFDO0lBQ1gsQ0FBQzs7NEdBN0hVLGVBQWU7Z0dBQWYsZUFBZSxpSEMzQjVCLHF1Q0FxQ0E7MkZEVmEsZUFBZTtrQkFOM0IsU0FBUzsrQkFDRSxZQUFZOzhVQU1iLFdBQVc7c0JBQW5CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKioqKioqKioqKiBBbmd1bGFyICoqKioqKioqKiovXHJcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBPbkRlc3Ryb3ksIElucHV0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuLyoqKioqKioqKiogSW9uaWMgKioqKioqKioqKi9cclxuaW1wb3J0IHsgTW9kYWxDb250cm9sbGVyLCBQbGF0Zm9ybSB9IGZyb20gXCJAaW9uaWMvYW5ndWxhclwiO1xyXG5cclxuLyoqKioqKioqKiogUGx1Z2luICoqKioqKioqKiovXHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgT2JzZXJ2YWJsZSB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IERpYWxvZ0NvbnRlbnRCYXNlLCBEaWFsb2dSZWYgfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci1kaWFsb2cnO1xyXG5cclxuLyoqKioqKioqKiogQ29tcG9uZW50ICYgU2VydmljZSAqKioqKioqKioqL1xyXG5pbXBvcnQge1xyXG4gIFpHcm91cCwgTW9kYWxQYWdlUGFyYW1zLFxyXG4gIFdlYkFwaVNlcnZpY2UsIEFsZXJ0U2VydmljZSwgWkNvcmVTZXJ2aWNlLCBGaWVsZFNlcnZpY2UsIFJlc291cmNlQXBpU2VydmljZSxcclxuICBaQ29tcG9uZW50SGVscGVyLCBaQ29tcG9uZW50T3V0cHV0RXZlbnRcclxufSBmcm9tIFwibW1oZ2xvYmFsLXpjb3JlXCI7XHJcbmltcG9ydCB7IFptb2RhbEhlbHBlciwgTW9kYWxSZXNwb25zZSB9IGZyb20gJ21taGdsb2JhbC16bW9kYWwnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRFcnJvckhhbmRsZXJTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL2NvbXBvbmVudC1lcnJvci1oYW5kbGVyLnNlcnZpY2VcIjtcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC16bW9kYWwnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi96bW9kYWwuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3ptb2RhbC5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIFptb2RhbENvbXBvbmVudCBleHRlbmRzIERpYWxvZ0NvbnRlbnRCYXNlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBJbnB1dCgpIG1vZGFsUGFyYW1zOiBNb2RhbFBhZ2VQYXJhbXM7XHJcblxyXG4gIGdyb3VwOiBaR3JvdXAgPSBuZXcgWkdyb3VwKHRydWUpO1xyXG4gIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG4gIGJhY2tCdXR0b25TdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgZGlhbG9nOiBEaWFsb2dSZWYsXHJcbiAgICBwcml2YXRlIG1vZGFsQ3RybDogTW9kYWxDb250cm9sbGVyLFxyXG4gICAgcHJpdmF0ZSB6Y29yZVNlcnZpY2U6IFpDb3JlU2VydmljZSxcclxuICAgIHByaXZhdGUgd2ViQXBpU2VydmljZTogV2ViQXBpU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVzb3VyY2VBcGlTZXJ2aWNlOiBSZXNvdXJjZUFwaVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvbXBvbmVudEVycm9ySGFuZGxlcjogQ29tcG9uZW50RXJyb3JIYW5kbGVyU2VydmljZSwgLy8gVXNlIGluIG1taGdsb2JhbC16bW9kYWwuaGVscGVyXHJcbiAgICBwcml2YXRlIGZpZWxkU2VydmljZTogRmllbGRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBwbGF0Zm9ybTogUGxhdGZvcm0sXHJcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlXHJcblxyXG4gICkge1xyXG4gICAgc3VwZXIoZGlhbG9nKTtcclxuICB9XHJcblxyXG4gIC8vIGdldCBtb2RhbEdyb3VwKCkge1xyXG4gIC8vICAgcmV0dXJuIHRoaXMuZ3JvdXA7XHJcbiAgLy8gfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIFptb2RhbEhlbHBlci5vbkluaXRfTW9kYWxGb3JtKHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBabW9kYWxIZWxwZXIub25EZXN0cm95X01vZGFsRm9ybSh0aGlzKTtcclxuICB9XHJcblxyXG4gIG9uQ2FuY2VsKGV2ZW50PzogWkNvbXBvbmVudE91dHB1dEV2ZW50KSB7XHJcbiAgICBabW9kYWxIZWxwZXIub25DYW5jZWwodGhpcywgZXZlbnQpO1xyXG4gICAgLy8gdGhpcy5kaWFsb2cuY2xvc2UoKTtcclxuICB9XHJcblxyXG4gIG9uQ29uZmlybShldmVudDogWkNvbXBvbmVudE91dHB1dEV2ZW50KSB7XHJcbiAgICBabW9kYWxIZWxwZXIub25Db25maXJtKHRoaXMsIGV2ZW50KTtcclxuICAgIC8vIGNvbnN0IGZnID0gdGhpcy5ncm91cC5mb3JtIGFzIEZvcm1Hcm91cDtcclxuICAgIC8vIGlmICghdGhpcy5ncm91cC5mb3JtKSB7XHJcbiAgICAvLyAgIHJldHVybjtcclxuICAgIC8vIH1cclxuXHJcbiAgICAvLyBpZiAoIWZnLmRpcnR5KSB7XHJcbiAgICAvLyAgIGNvbnNvbGUud2FybignRm9ybSBpcyBub3QgZGlydHkgaGVuY2UgbW9kYWxmb3JtIHJlY29yZCBpcyBub3Qgc2F2ZWQuJyk7XHJcbiAgICAvLyAgIHRoaXMub25DYW5jZWwoKTtcclxuICAgIC8vICAgcmV0dXJuO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIC8vIGlmICghZmcudmFsaWQpIHtcclxuICAgIC8vICAgY29uc3QgZXJyb3JzID0gWkNvbXBvbmVudEhlbHBlci5nZXRGb3JtR3JvdXBFcnJvcnMoZmcsIHRoaXMuYWxlcnRTZXJ2aWNlKTtcclxuICAgIC8vICAgY29uc29sZS53YXJuKFwiRm9ybSBWYWxpZGF0aW9uIGdvdCBlcnJvcihzKTpcIiwgZXJyb3JzKTtcclxuICAgIC8vICAgcmV0dXJuO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIC8vIE9iamVjdC5hc3NpZ24odGhpcy5ncm91cC56TW9kZWwsIGZnLnZhbHVlKTtcclxuICAgIC8vIHRoaXMubW9kYWxDdHJsLmRpc21pc3ModGhpcy5ncm91cC56TW9kZWwsIFwiY29uZmlybVwiKTtcclxuICAgIC8vIGlmIChaQ29tcG9uZW50SGVscGVyLmlzTW9iaWxlU2NyZWVuKCkpIHtcclxuICAgIC8vICAgdGhpcy5tb2RhbEN0cmwuZGlzbWlzcyhldmVudC5kYXRhLCBcImNvbmZpcm1cIik7XHJcbiAgICAvLyB9IGVsc2Uge1xyXG4gICAgLy8gdGhpcy5kaWFsb2cuY2xvc2UoZXZlbnQuZGF0YSk7XHJcbiAgICAvLyB9XHJcbiAgfVxyXG5cclxuICBvbkluaXRDbG9zZShldmVudD86IFpDb21wb25lbnRPdXRwdXRFdmVudCkge1xyXG4gICAgWm1vZGFsSGVscGVyLm9uSW5pdENsb3NlKHRoaXMsZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgaXNTSVRFbnZpcm9ubWVudCgpIHtcclxuICAgIHJldHVybiB0aGlzLnpjb3JlU2VydmljZS5pc0RlYnVnU2Vzc2lvbigpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIHRvIHNlcnZlIGFjdGlvbkJ1dHRvbiBhdCBmb3JtSGVhZGVyXHJcbiAgc3ViamVjdEV2ZW50KGV2ZW50OiBaQ29tcG9uZW50T3V0cHV0RXZlbnQsIGdyb3VwOiBaR3JvdXAsIG1lOiBhbnkpIHtcclxuICAgIGlmICghZXZlbnQgfHwgIWV2ZW50LnRhcmdldCB8fCAhZXZlbnQudGFyZ2V0LnN0YXJ0c1dpdGgoJ21vZGFsR3JvdXAnKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZyhcIj4+IFN1YmplY3RFdmVudFwiLCBldmVudCk7XHJcbiAgICAvLyBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQucmVwbGFjZSgnbW9kYWxHcm91cC4nLCAnZ3JvdXAuJyk7XHJcbiAgICBjb25zdCBjYWxsRnVuYyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbCh0aGlzLCBldmVudC50YXJnZXQsIGdyb3VwKTtcclxuICAgIC8vIGNhbGxGdW5jKGV2ZW50KTtcclxuICAgIGlmICh0eXBlb2YgY2FsbEZ1bmMgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICBjb25zdCBmZyA9IHRoaXMuZ3JvdXAuZm9ybSBhcyBGb3JtR3JvdXA7XHJcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5ncm91cC56TW9kZWwsIGZnLnZhbHVlKTtcclxuICAgICAgZXZlbnQuZGF0YSA9IHRoaXMuZ3JvdXAuek1vZGVsO1xyXG4gICAgICBpZiAoZXZlbnQudGFyZ2V0LnN0YXJ0c1dpdGgoJ21vZGFsR3JvdXAubW9kYWxBbnN3ZXInKSB8fCBldmVudC50YXJnZXQuc3RhcnRzV2l0aCgnbW9kYWxHcm91cC5tb2RhbENsb3NlJykgfHwgZXZlbnQudGFyZ2V0LnN0YXJ0c1dpdGgoJ21vZGFsR3JvdXAubW9kYWxDYW5jZWwnKSkge1xyXG4gICAgICAgIGNvbnN0IG5ld0Z1bmMgPSBjYWxsRnVuYy5iaW5kKHRoaXMpO1xyXG4gICAgICAgIG5ld0Z1bmMoZXZlbnQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IG5ld0Z1bmMgPSBjYWxsRnVuYy5iaW5kKGdyb3VwLmN0cmxTY29wZSk7XHJcbiAgICAgICAgbmV3RnVuYyhldmVudCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICBcIkZ1bmN0aW9uIG5vdCBkZWZpbmVkIGluIGdyb3VwIGZvcjogXCIsXHJcbiAgICAgICAgY2FsbEZ1bmMsXHJcbiAgICAgICAgXCIsIEV2ZW50OiBcIixcclxuICAgICAgICBldmVudFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0TW9kZWwkKGdyb3VwOiBhbnksIGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgY29uc3QgcmVjSWQgPSBpZCB8fCBncm91cC5yZWZlcmVuY2VJZDtcclxuICAgIHJldHVybiB0aGlzLndlYkFwaVNlcnZpY2UuaHR0cEdldCQoZ3JvdXAucmVzb3VyY2VVUkwgKyBcIi9cIiArIHJlY0lkLCBudWxsKTtcclxuICB9XHJcblxyXG4gIGdldEdyaWRTdHlsZSgpIHtcclxuICAgIC8vIGRlYnVnZ2VyO1xyXG4gICAgaWYgKCF0aGlzLmlzTW9iaWxlU2NyZWVuKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgXCJoZWlnaHQucHhcIjogNTAwLFxyXG4gICAgICAgIFwid2lkdGgucHhcIjogNzAwXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBpc01vYmlsZVNjcmVlbigpIHtcclxuICAgIGNvbnN0IHYgPSBaQ29tcG9uZW50SGVscGVyLmlzTW9iaWxlU2NyZWVuKCk7XHJcbiAgICByZXR1cm4gdjtcclxuICB9XHJcbn1cclxuIiwiPGlvbi1oZWFkZXIgKm5nSWY9XCJpc01vYmlsZVNjcmVlbigpXCI+XHJcbiAgPGlvbi10b29sYmFyPlxyXG4gICAgPGlvbi1idXR0b25zIHNsb3Q9XCJzdGFydFwiPlxyXG4gICAgICA8aW9uLWJ1dHRvbiAoY2xpY2spPVwib25DYW5jZWwoKVwiPlxyXG4gICAgICAgIDwhLS0gPGlvbi1pY29uIG5hbWU9XCJjbG9zZVwiPjwvaW9uLWljb24+IC0tPlxyXG4gICAgICAgIDxmYS1pY29uIFtpY29uXT1cIid0aW1lcydcIiBzaXplPVwibGdcIj48L2ZhLWljb24+XHJcbiAgICAgIDwvaW9uLWJ1dHRvbj5cclxuICAgIDwvaW9uLWJ1dHRvbnM+XHJcbiAgICA8aW9uLXRpdGxlPlxyXG4gICAgICB7eyBtb2RhbFBhcmFtcy5mb3JtSGVhZGVyIH19XHJcbiAgICA8L2lvbi10aXRsZT5cclxuICAgIDxpb24tYnV0dG9ucyBzbG90PVwicHJpbWFyeVwiICpuZ0lmPVwiIWdyb3VwLmlzTG9hZGluZ1wiPlxyXG4gICAgICA8YXBwLXVpYWN0aW9uYnV0dG9uIFtncm91cF09XCJncm91cFwiPjwvYXBwLXVpYWN0aW9uYnV0dG9uPlxyXG4gICAgPC9pb24tYnV0dG9ucz5cclxuICA8L2lvbi10b29sYmFyPlxyXG48L2lvbi1oZWFkZXI+XHJcblxyXG48aW9uLWNvbnRlbnQgYXBwU2Nyb2xsYmFyVGhlbWUgW25nU3R5bGVdPVwiZ2V0R3JpZFN0eWxlKClcIj5cclxuICA8aW9uLWdyaWQ+XHJcbiAgICA8aW9uLXJvdyAqbmdJZj1cImdyb3VwLmlzTG9hZGluZ1wiIGNsYXNzPVwiaW9uLXRleHQtY2VudGVyXCI+XHJcbiAgICAgIDxpb24tY29sIGNsYXNzPVwiaW9uLW1hcmdpbiBpb24tcGFkZGluZ1wiPlxyXG4gICAgICAgIDxpb24tc3Bpbm5lcj48L2lvbi1zcGlubmVyPlxyXG4gICAgICA8L2lvbi1jb2w+XHJcbiAgICA8L2lvbi1yb3c+XHJcbiAgICA8aW9uLXJvdyAqbmdJZj1cIiFncm91cC5pc0xvYWRpbmdcIj5cclxuICAgICAgPGlvbi1jb2w+XHJcbiAgICAgICAgPGFwcC16Zm9ybSBbZ3JvdXBdPVwiZ3JvdXBcIj48L2FwcC16Zm9ybT5cclxuICAgICAgPC9pb24tY29sPlxyXG4gICAgPC9pb24tcm93PlxyXG4gICAgPGlvbi1yb3cgKm5nSWY9XCJpc1NJVEVudmlyb25tZW50KCkgJiYgIWdyb3VwLmlzTG9hZGluZ1wiPlxyXG4gICAgICA8aW9uLWNvbD5cclxuICAgICAgICA8cHJlIHN0eWxlPVwiZm9udC1zaXplOiB4LXNtYWxsO1wiPnt7Z3JvdXAuek1vZGVsIHwganNvbn19PC9wcmU+XHJcbiAgICAgIDwvaW9uLWNvbD5cclxuICAgIDwvaW9uLXJvdz5cclxuICA8L2lvbi1ncmlkPlxyXG48L2lvbi1jb250ZW50PlxyXG5cclxuIl19
128
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiem1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21taGdsb2JhbC1keW5hbWljZm9ybS9zcmMvbGliL3ptb2RhbC96bW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvem1vZGFsL3ptb2RhbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBcUIsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBUXBFLE9BQU8sRUFBRSxpQkFBaUIsRUFBYSxNQUFNLGdDQUFnQyxDQUFDO0FBRTlFLDJDQUEyQztBQUMzQyxPQUFPLEVBQ0wsTUFBTSxFQUVOLGdCQUFnQixFQUNqQixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxZQUFZLEVBQWlCLE1BQU0sa0JBQWtCLENBQUM7Ozs7Ozs7Ozs7O0FBUy9ELE1BQU0sT0FBTyxlQUFnQixTQUFRLGlCQUFpQjtJQU9wRCxZQUNTLE1BQWlCLEVBQ2hCLFNBQTBCLEVBQzFCLFlBQTBCLEVBQzFCLGFBQTRCLEVBQzVCLGtCQUFzQyxFQUN0Qyw0QkFBMEQsRUFBRSxpQ0FBaUM7SUFDN0YsWUFBMEIsRUFDMUIsUUFBa0IsRUFDbEIsWUFBMEI7UUFHbEMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBWFAsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUNoQixjQUFTLEdBQVQsU0FBUyxDQUFpQjtRQUMxQixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1Qix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLGlDQUE0QixHQUE1Qiw0QkFBNEIsQ0FBOEI7UUFDMUQsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsYUFBUSxHQUFSLFFB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cUNBQXFDLEVBQ3JDLFFBQVEsRUFDUixXQUFXLEVBQ1gsS0FBSyxDQUNOLENBQUM7U0FDSDtJQUNILENBQUM7SUFFRCxTQUFTLENBQUMsS0FBVSxFQUFFLEVBQVU7UUFDOUIsTUFBTSxLQUFLLEdBQUcsRUFBRSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUM7UUFDdEMsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLEdBQUcsR0FBRyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVELFlBQVk7UUFDVixZQUFZO1FBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDeEIsT0FBTztnQkFDTCxXQUFXLEVBQUUsR0FBRztnQkFDaEIsVUFBVSxFQUFFLEdBQUc7YUFDaEIsQ0FBQztTQUNIO1FBQ0QsT0FBTztJQUNULENBQUM7SUFFRCxjQUFjO1FBQ1osTUFBTSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDNUMsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDOzs0R0E3SFUsZUFBZTtnR0FBZixlQUFlLGlIQzFCNUIscXVDQXFDQTsyRkRYYSxlQUFlO2tCQU4zQixTQUFTOytCQUNFLFlBQVk7OFVBTWIsV0FBVztzQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqIEFuZ3VsYXIgKioqKioqKioqKi9cclxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIE9uRGVzdHJveSwgSW5wdXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG4vKioqKioqKioqKiBJb25pYyAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBNb2RhbENvbnRyb2xsZXIsIFBsYXRmb3JtIH0gZnJvbSBcIkBpb25pYy9hbmd1bGFyXCI7XHJcblxyXG4vKioqKioqKioqKiBQbHVnaW4gKioqKioqKioqKi9cclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBPYnNlcnZhYmxlIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgRGlhbG9nQ29udGVudEJhc2UsIERpYWxvZ1JlZiB9IGZyb20gJ0Bwcm9ncmVzcy9rZW5kby1hbmd1bGFyLWRpYWxvZyc7XHJcblxyXG4vKioqKioqKioqKiBDb21wb25lbnQgJiBTZXJ2aWNlICoqKioqKioqKiovXHJcbmltcG9ydCB7XHJcbiAgWkdyb3VwLCBNb2RhbFBhZ2VQYXJhbXMsXHJcbiAgV2ViQXBpU2VydmljZSwgQWxlcnRTZXJ2aWNlLCBaQ29yZVNlcnZpY2UsIEZpZWxkU2VydmljZSwgUmVzb3VyY2VBcGlTZXJ2aWNlLFxyXG4gIFpDb21wb25lbnRIZWxwZXIsIFpDb21wb25lbnRPdXRwdXRFdmVudCwgQ29tcG9uZW50RXJyb3JIYW5kbGVyU2VydmljZVxyXG59IGZyb20gXCJtbWhnbG9iYWwtemNvcmVcIjtcclxuaW1wb3J0IHsgWm1vZGFsSGVscGVyLCBNb2RhbFJlc3BvbnNlIH0gZnJvbSAnbW1oZ2xvYmFsLXptb2RhbCc7IFxyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXptb2RhbCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3ptb2RhbC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vem1vZGFsLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgWm1vZGFsQ29tcG9uZW50IGV4dGVuZHMgRGlhbG9nQ29udGVudEJhc2UgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgQElucHV0KCkgbW9kYWxQYXJhbXM6IE1vZGFsUGFnZVBhcmFtcztcclxuXHJcbiAgZ3JvdXA6IFpHcm91cCA9IG5ldyBaR3JvdXAodHJ1ZSk7XHJcbiAgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgYmFja0J1dHRvblN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBkaWFsb2c6IERpYWxvZ1JlZixcclxuICAgIHByaXZhdGUgbW9kYWxDdHJsOiBNb2RhbENvbnRyb2xsZXIsXHJcbiAgICBwcml2YXRlIHpjb3JlU2VydmljZTogWkNvcmVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB3ZWJBcGlTZXJ2aWNlOiBXZWJBcGlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZXNvdXJjZUFwaVNlcnZpY2U6IFJlc291cmNlQXBpU2VydmljZSxcclxuICAgIHByaXZhdGUgY29tcG9uZW50RXJyb3JIYW5kbGVyU2VydmljZTogQ29tcG9uZW50RXJyb3JIYW5kbGVyU2VydmljZSwgLy8gVXNlIGluIG1taGdsb2JhbC16bW9kYWwuaGVscGVyXHJcbiAgICBwcml2YXRlIGZpZWxkU2VydmljZTogRmllbGRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBwbGF0Zm9ybTogUGxhdGZvcm0sXHJcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlXHJcblxyXG4gICkge1xyXG4gICAgc3VwZXIoZGlhbG9nKTtcclxuICB9XHJcblxyXG4gIC8vIGdldCBtb2RhbEdyb3VwKCkge1xyXG4gIC8vICAgcmV0dXJuIHRoaXMuZ3JvdXA7XHJcbiAgLy8gfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIFptb2RhbEhlbHBlci5vbkluaXRfTW9kYWxGb3JtKHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBabW9kYWxIZWxwZXIub25EZXN0cm95X01vZGFsRm9ybSh0aGlzKTtcclxuICB9XHJcblxyXG4gIG9uQ2FuY2VsKGV2ZW50PzogWkNvbXBvbmVudE91dHB1dEV2ZW50KSB7XHJcbiAgICBabW9kYWxIZWxwZXIub25DYW5jZWwodGhpcywgZXZlbnQpO1xyXG4gICAgLy8gdGhpcy5kaWFsb2cuY2xvc2UoKTtcclxuICB9XHJcblxyXG4gIG9uQ29uZmlybShldmVudDogWkNvbXBvbmVudE91dHB1dEV2ZW50KSB7XHJcbiAgICBabW9kYWxIZWxwZXIub25Db25maXJtKHRoaXMsIGV2ZW50KTtcclxuICAgIC8vIGNvbnN0IGZnID0gdGhpcy5ncm91cC5mb3JtIGFzIEZvcm1Hcm91cDtcclxuICAgIC8vIGlmICghdGhpcy5ncm91cC5mb3JtKSB7XHJcbiAgICAvLyAgIHJldHVybjtcclxuICAgIC8vIH1cclxuXHJcbiAgICAvLyBpZiAoIWZnLmRpcnR5KSB7XHJcbiAgICAvLyAgIGNvbnNvbGUud2FybignRm9ybSBpcyBub3QgZGlydHkgaGVuY2UgbW9kYWxmb3JtIHJlY29yZCBpcyBub3Qgc2F2ZWQuJyk7XHJcbiAgICAvLyAgIHRoaXMub25DYW5jZWwoKTtcclxuICAgIC8vICAgcmV0dXJuO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIC8vIGlmICghZmcudmFsaWQpIHtcclxuICAgIC8vICAgY29uc3QgZXJyb3JzID0gWkNvbXBvbmVudEhlbHBlci5nZXRGb3JtR3JvdXBFcnJvcnMoZmcsIHRoaXMuYWxlcnRTZXJ2aWNlKTtcclxuICAgIC8vICAgY29uc29sZS53YXJuKFwiRm9ybSBWYWxpZGF0aW9uIGdvdCBlcnJvcihzKTpcIiwgZXJyb3JzKTtcclxuICAgIC8vICAgcmV0dXJuO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIC8vIE9iamVjdC5hc3NpZ24odGhpcy5ncm91cC56TW9kZWwsIGZnLnZhbHVlKTtcclxuICAgIC8vIHRoaXMubW9kYWxDdHJsLmRpc21pc3ModGhpcy5ncm91cC56TW9kZWwsIFwiY29uZmlybVwiKTtcclxuICAgIC8vIGlmIChaQ29tcG9uZW50SGVscGVyLmlzTW9iaWxlU2NyZWVuKCkpIHtcclxuICAgIC8vICAgdGhpcy5tb2RhbEN0cmwuZGlzbWlzcyhldmVudC5kYXRhLCBcImNvbmZpcm1cIik7XHJcbiAgICAvLyB9IGVsc2Uge1xyXG4gICAgLy8gdGhpcy5kaWFsb2cuY2xvc2UoZXZlbnQuZGF0YSk7XHJcbiAgICAvLyB9XHJcbiAgfVxyXG5cclxuICBvbkluaXRDbG9zZShldmVudD86IFpDb21wb25lbnRPdXRwdXRFdmVudCkge1xyXG4gICAgWm1vZGFsSGVscGVyLm9uSW5pdENsb3NlKHRoaXMsZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgaXNTSVRFbnZpcm9ubWVudCgpIHtcclxuICAgIHJldHVybiB0aGlzLnpjb3JlU2VydmljZS5pc0RlYnVnU2Vzc2lvbigpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIHRvIHNlcnZlIGFjdGlvbkJ1dHRvbiBhdCBmb3JtSGVhZGVyXHJcbiAgc3ViamVjdEV2ZW50KGV2ZW50OiBaQ29tcG9uZW50T3V0cHV0RXZlbnQsIGdyb3VwOiBaR3JvdXAsIG1lOiBhbnkpIHtcclxuICAgIGlmICghZXZlbnQgfHwgIWV2ZW50LnRhcmdldCB8fCAhZXZlbnQudGFyZ2V0LnN0YXJ0c1dpdGgoJ21vZGFsR3JvdXAnKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZyhcIj4+IFN1YmplY3RFdmVudFwiLCBldmVudCk7XHJcbiAgICAvLyBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQucmVwbGFjZSgnbW9kYWxHcm91cC4nLCAnZ3JvdXAuJyk7XHJcbiAgICBjb25zdCBjYWxsRnVuYyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbCh0aGlzLCBldmVudC50YXJnZXQsIGdyb3VwKTtcclxuICAgIC8vIGNhbGxGdW5jKGV2ZW50KTtcclxuICAgIGlmICh0eXBlb2YgY2FsbEZ1bmMgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICBjb25zdCBmZyA9IHRoaXMuZ3JvdXAuZm9ybSBhcyBGb3JtR3JvdXA7XHJcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5ncm91cC56TW9kZWwsIGZnLnZhbHVlKTtcclxuICAgICAgZXZlbnQuZGF0YSA9IHRoaXMuZ3JvdXAuek1vZGVsO1xyXG4gICAgICBpZiAoZXZlbnQudGFyZ2V0LnN0YXJ0c1dpdGgoJ21vZGFsR3JvdXAubW9kYWxBbnN3ZXInKSB8fCBldmVudC50YXJnZXQuc3RhcnRzV2l0aCgnbW9kYWxHcm91cC5tb2RhbENsb3NlJykgfHwgZXZlbnQudGFyZ2V0LnN0YXJ0c1dpdGgoJ21vZGFsR3JvdXAubW9kYWxDYW5jZWwnKSkge1xyXG4gICAgICAgIGNvbnN0IG5ld0Z1bmMgPSBjYWxsRnVuYy5iaW5kKHRoaXMpO1xyXG4gICAgICAgIG5ld0Z1bmMoZXZlbnQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IG5ld0Z1bmMgPSBjYWxsRnVuYy5iaW5kKGdyb3VwLmN0cmxTY29wZSk7XHJcbiAgICAgICAgbmV3RnVuYyhldmVudCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICBcIkZ1bmN0aW9uIG5vdCBkZWZpbmVkIGluIGdyb3VwIGZvcjogXCIsXHJcbiAgICAgICAgY2FsbEZ1bmMsXHJcbiAgICAgICAgXCIsIEV2ZW50OiBcIixcclxuICAgICAgICBldmVudFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0TW9kZWwkKGdyb3VwOiBhbnksIGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgY29uc3QgcmVjSWQgPSBpZCB8fCBncm91cC5yZWZlcmVuY2VJZDtcclxuICAgIHJldHVybiB0aGlzLndlYkFwaVNlcnZpY2UuaHR0cEdldCQoZ3JvdXAucmVzb3VyY2VVUkwgKyBcIi9cIiArIHJlY0lkLCBudWxsKTtcclxuICB9XHJcblxyXG4gIGdldEdyaWRTdHlsZSgpIHtcclxuICAgIC8vIGRlYnVnZ2VyO1xyXG4gICAgaWYgKCF0aGlzLmlzTW9iaWxlU2NyZWVuKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgXCJoZWlnaHQucHhcIjogNTAwLFxyXG4gICAgICAgIFwid2lkdGgucHhcIjogNzAwXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBpc01vYmlsZVNjcmVlbigpIHtcclxuICAgIGNvbnN0IHYgPSBaQ29tcG9uZW50SGVscGVyLmlzTW9iaWxlU2NyZWVuKCk7XHJcbiAgICByZXR1cm4gdjtcclxuICB9XHJcbn1cclxuIiwiPGlvbi1oZWFkZXIgKm5nSWY9XCJpc01vYmlsZVNjcmVlbigpXCI+XHJcbiAgPGlvbi10b29sYmFyPlxyXG4gICAgPGlvbi1idXR0b25zIHNsb3Q9XCJzdGFydFwiPlxyXG4gICAgICA8aW9uLWJ1dHRvbiAoY2xpY2spPVwib25DYW5jZWwoKVwiPlxyXG4gICAgICAgIDwhLS0gPGlvbi1pY29uIG5hbWU9XCJjbG9zZVwiPjwvaW9uLWljb24+IC0tPlxyXG4gICAgICAgIDxmYS1pY29uIFtpY29uXT1cIid0aW1lcydcIiBzaXplPVwibGdcIj48L2ZhLWljb24+XHJcbiAgICAgIDwvaW9uLWJ1dHRvbj5cclxuICAgIDwvaW9uLWJ1dHRvbnM+XHJcbiAgICA8aW9uLXRpdGxlPlxyXG4gICAgICB7eyBtb2RhbFBhcmFtcy5mb3JtSGVhZGVyIH19XHJcbiAgICA8L2lvbi10aXRsZT5cclxuICAgIDxpb24tYnV0dG9ucyBzbG90PVwicHJpbWFyeVwiICpuZ0lmPVwiIWdyb3VwLmlzTG9hZGluZ1wiPlxyXG4gICAgICA8YXBwLXVpYWN0aW9uYnV0dG9uIFtncm91cF09XCJncm91cFwiPjwvYXBwLXVpYWN0aW9uYnV0dG9uPlxyXG4gICAgPC9pb24tYnV0dG9ucz5cclxuICA8L2lvbi10b29sYmFyPlxyXG48L2lvbi1oZWFkZXI+XHJcblxyXG48aW9uLWNvbnRlbnQgYXBwU2Nyb2xsYmFyVGhlbWUgW25nU3R5bGVdPVwiZ2V0R3JpZFN0eWxlKClcIj5cclxuICA8aW9uLWdyaWQ+XHJcbiAgICA8aW9uLXJvdyAqbmdJZj1cImdyb3VwLmlzTG9hZGluZ1wiIGNsYXNzPVwiaW9uLXRleHQtY2VudGVyXCI+XHJcbiAgICAgIDxpb24tY29sIGNsYXNzPVwiaW9uLW1hcmdpbiBpb24tcGFkZGluZ1wiPlxyXG4gICAgICAgIDxpb24tc3Bpbm5lcj48L2lvbi1zcGlubmVyPlxyXG4gICAgICA8L2lvbi1jb2w+XHJcbiAgICA8L2lvbi1yb3c+XHJcbiAgICA8aW9uLXJvdyAqbmdJZj1cIiFncm91cC5pc0xvYWRpbmdcIj5cclxuICAgICAgPGlvbi1jb2w+XHJcbiAgICAgICAgPGFwcC16Zm9ybSBbZ3JvdXBdPVwiZ3JvdXBcIj48L2FwcC16Zm9ybT5cclxuICAgICAgPC9pb24tY29sPlxyXG4gICAgPC9pb24tcm93PlxyXG4gICAgPGlvbi1yb3cgKm5nSWY9XCJpc1NJVEVudmlyb25tZW50KCkgJiYgIWdyb3VwLmlzTG9hZGluZ1wiPlxyXG4gICAgICA8aW9uLWNvbD5cclxuICAgICAgICA8cHJlIHN0eWxlPVwiZm9udC1zaXplOiB4LXNtYWxsO1wiPnt7Z3JvdXAuek1vZGVsIHwganNvbn19PC9wcmU+XHJcbiAgICAgIDwvaW9uLWNvbD5cclxuICAgIDwvaW9uLXJvdz5cclxuICA8L2lvbi1ncmlkPlxyXG48L2lvbi1jb250ZW50PlxyXG5cclxuIl19
@@ -2,6 +2,8 @@
2
2
  import { Component, ViewChild } from '@angular/core';
3
3
  /********** Component & Service **********/
4
4
  import { InputFieldBase } from '../components/inputfieldbase.component';
5
+ import { ZComponentHelper } from "mmhglobal-zcore";
6
+ import { Validators } from '@angular/forms';
5
7
  import * as i0 from "@angular/core";
6
8
  import * as i1 from "../services/zcomponent.service";
7
9
  import * as i2 from "@ionic/angular";
@@ -19,10 +21,12 @@ export class ZnumericComponent extends InputFieldBase {
19
21
  }
20
22
  ngOnInit() {
21
23
  super.setupInnerField();
22
- this.minValue = this.data.MinValue;
23
- this.maxValue = this.data.MaxValue;
24
+ this.setInitMinAndMaxValue();
24
25
  super.focusOnDefault(this.focus.bind(this));
25
26
  }
27
+ ngOnDestroy() {
28
+ this.removeMinAndMaxValidator();
29
+ }
26
30
  ngAfterViewInit() {
27
31
  this.componentService.decrementComponentCounterForField(this.data);
28
32
  }
@@ -45,6 +49,50 @@ export class ZnumericComponent extends InputFieldBase {
45
49
  }
46
50
  return false;
47
51
  }
52
+ setInitMinAndMaxValue() {
53
+ if (typeof this.data.MinValue == 'string' && this.data.MinValue.toString().startsWith('group.')) {
54
+ this.minValue = ZComponentHelper.getGroupValue(this.data.MinValue.toString(), this.group);
55
+ }
56
+ else {
57
+ this.minValue = this.data.MinValue;
58
+ }
59
+ if (typeof this.data.MaxValue == 'string' && this.data.MaxValue.toString().startsWith('group.')) {
60
+ this.maxValue = ZComponentHelper.getGroupValue(this.data.MaxValue.toString(), this.group);
61
+ }
62
+ else {
63
+ this.maxValue = this.data.MaxValue;
64
+ }
65
+ this.addMinAndMaxValidator();
66
+ }
67
+ addMinAndMaxValidator() {
68
+ // Setup form validator for ionic components only (Kendo component will be auto setup)
69
+ if (this.isMobileScreen()) {
70
+ const control = this.form.controls[this.data.Value];
71
+ if (this.minValue != undefined) {
72
+ this.minValidator = Validators.min(Number(this.minValue));
73
+ control.addValidators(this.minValidator);
74
+ }
75
+ if (this.maxValue != undefined) {
76
+ this.maxValidator = Validators.max(Number(this.maxValue));
77
+ control.addValidators(this.maxValidator);
78
+ }
79
+ control.updateValueAndValidity();
80
+ }
81
+ }
82
+ removeMinAndMaxValidator() {
83
+ this.minValue = null;
84
+ this.maxValue = null;
85
+ const control = this.form.controls[this.data.Value];
86
+ if (this.isMobileScreen()) {
87
+ if (control.hasValidator(this.minValidator)) {
88
+ control.removeValidators(this.minValidator);
89
+ }
90
+ if (control.hasValidator(this.maxValidator)) {
91
+ control.removeValidators(this.maxValidator);
92
+ }
93
+ }
94
+ control.updateValueAndValidity();
95
+ }
48
96
  }
49
97
  ZnumericComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ZnumericComponent, deps: [{ token: i1.ZComponentService }], target: i0.ɵɵFactoryTarget.Component });
50
98
  ZnumericComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ZnumericComponent, selector: "app-znumeric", viewQueries: [{ propertyName: "numeric", first: true, predicate: ["numeric"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div [formGroup]=\"form\" class=\"znumeric-container e1tag-style\" [style]=\"componentProperties.style.style\">\r\n <ion-input *ngIf=\"isMobileScreen()\" #znumericField [id]=\"data.Value\" type=\"number\"\r\n [autocorrect]=\"data.AutoCorrect ? 'on' : 'off'\"\r\n [min]=\"minValue\"\r\n [max]=\"maxValue\"\r\n [step]=\"data.StepValue\"\r\n [inputmode]=\"inputMode\"\r\n [formControlName]=\"data.Value\"\r\n [attr.disabled]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [placeholder]=\"data.PlaceHolder\"\r\n [value]=\"0 | znumeric : form : data\"\r\n [class.left-aligned]=\"this.data.RightAlign === false\"\r\n [style]=\"componentProperties.style.style1\" class=\"e1tag-style1\">\r\n </ion-input>\r\n <kendo-numerictextbox *ngIf=\"!isMobileScreen()\"\r\n [spinners]=\"data.ShowSpinners\"\r\n [autoCorrect]=\"data.AutoCorrect\"\r\n [formControlName]=\"data.Value\"\r\n [class.disabled]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [readonly]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [min]=\"minValue\"\r\n [max]=\"maxValue\"\r\n [step]=\"data.StepValue\"\r\n [format]=\"data.FormatOptions\" [id]=\"data.Value\"\r\n [placeholder]=\"data.PlaceHolder\"\r\n class=\"input-field e1tag-style1\"\r\n [value]=\"0 | znumeric : form : data\"\r\n (valueChange)=\"onChange(null, $event)\"\r\n [style]=\"componentProperties.style.style1\"\r\n [decimals]=\"data.DecimalPlace\"\r\n [class.left-aligned]=\"this.data.RightAlign === false\"\r\n #numeric>\r\n </kendo-numerictextbox>\r\n</div>\r\n", styles: [":host ::ng-deep kendo-numerictextbox:focus-within{box-shadow:0 0 3px 1px var(--ion-color-primary)}:host ::ng-deep kendo-numerictextbox>input{text-align:right}:host ::ng-deep kendo-numerictextbox.left-aligned>input{text-align:left}.item.sc-ion-label-md-h,.item .sc-ion-label-md-h{font-weight:var(--z-label-weight);color:var(--z-label-color);text-shadow:var(--z-label-shadow)}.k-numerictextbox{color:var(--z-text-color)}\n"], components: [{ type: i2.IonInput, selector: "ion-input", inputs: ["accept", "autocapitalize", "autocomplete", "autocorrect", "autofocus", "clearInput", "clearOnEdit", "color", "debounce", "disabled", "enterkeyhint", "inputmode", "max", "maxlength", "min", "minlength", "mode", "multiple", "name", "pattern", "placeholder", "readonly", "required", "size", "spellcheck", "step", "type", "value"] }, { type: i3.NumericTextBoxComponent, selector: "kendo-numerictextbox", inputs: ["focusableId", "disabled", "readonly", "title", "autoCorrect", "format", "max", "min", "decimals", "placeholder", "step", "spinners", "rangeValidation", "tabindex", "tabIndex", "changeValueOnScroll", "selectOnFocus", "value", "maxlength", "size", "rounded", "fillMode"], outputs: ["valueChange", "focus", "blur"], exportAs: ["kendoNumericTextBox"] }], directives: [{ type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NumericValueAccessor, selector: "ion-input[type=number]" }, { type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }], pipes: { "znumeric": i6.ZNumericParser } });
@@ -55,4 +103,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
55
103
  type: ViewChild,
56
104
  args: ["numeric"]
57
105
  }] } });
58
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiem51bWVyaWMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvem51bWVyaWMvem51bWVyaWMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvem51bWVyaWMvem51bWVyaWMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBTzdELDJDQUEyQztBQUMzQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7Ozs7Ozs7O0FBU3hFLE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxjQUFjO0lBTW5ELFlBQ1MsZ0JBQW1DO1FBRTFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRmpCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBbUI7UUFMckMsY0FBUyxHQUFHLFNBQVMsQ0FBQztRQUN0QixhQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQ2IsYUFBUSxHQUFHLENBQUMsQ0FBQztJQU1wQixDQUFDO0lBRUQsUUFBUTtRQUNOLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUV4QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ25DLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDbkMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGlDQUFpQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQsV0FBVyxDQUFDLFFBQWdCO1FBQzFCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBRXpCLHlEQUF5RDtRQUN6RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BELE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsV0FBVyxDQUFDLFFBQWdCO1FBQzFCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBRXpCLHlEQUF5RDtRQUN6RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BELE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRU0sS0FBSztRQUNWLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNoQixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3JCLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7OzhHQTlDVSxpQkFBaUI7a0dBQWpCLGlCQUFpQiwrS0NsQjlCLDJzRUFrQ0E7MkZEaEJhLGlCQUFpQjtrQkFMN0IsU0FBUzsrQkFDRSxjQUFjO3dHQUtGLE9BQU87c0JBQTVCLFNBQVM7dUJBQUMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqIEFuZ3VsYXIgKioqKioqKioqKi9cclxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnOyBcclxuXHJcbi8qKioqKioqKioqIElvbmljICoqKioqKioqKiovXHJcblxyXG4vKioqKioqKioqKiBQbHVnaW4gKioqKioqKioqKi9cclxuaW1wb3J0IHsgTnVtZXJpY1RleHRCb3hDb21wb25lbnQgfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci1pbnB1dHMnO1xyXG5cclxuLyoqKioqKioqKiogQ29tcG9uZW50ICYgU2VydmljZSAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBJbnB1dEZpZWxkQmFzZSB9IGZyb20gJy4uL2NvbXBvbmVudHMvaW5wdXRmaWVsZGJhc2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgWkNvbXBvbmVudFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy96Y29tcG9uZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBaQ29tcG9uZW50IH0gZnJvbSBcIm1taGdsb2JhbC16Y29yZVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtem51bWVyaWMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi96bnVtZXJpYy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vem51bWVyaWMuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFpudW1lcmljQ29tcG9uZW50IGV4dGVuZHMgSW5wdXRGaWVsZEJhc2UgaW1wbGVtZW50cyBaQ29tcG9uZW50LCBPbkluaXQge1xyXG4gIEBWaWV3Q2hpbGQoXCJudW1lcmljXCIpIG51bWVyaWM6IE51bWVyaWNUZXh0Qm94Q29tcG9uZW50O1xyXG4gIHB1YmxpYyBpbnB1dE1vZGUgPSBcImRlY2ltYWxcIjtcclxuICBwdWJsaWMgbWluVmFsdWUgPSAwO1xyXG4gIHB1YmxpYyBtYXhWYWx1ZSA9IDA7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGNvbXBvbmVudFNlcnZpY2U6IFpDb21wb25lbnRTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcihjb21wb25lbnRTZXJ2aWNlKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgc3VwZXIuc2V0dXBJbm5lckZpZWxkKCk7XHJcblxyXG4gICAgdGhpcy5taW5WYWx1ZSA9IHRoaXMuZGF0YS5NaW5WYWx1ZTtcclxuICAgIHRoaXMubWF4VmFsdWUgPSB0aGlzLmRhdGEuTWF4VmFsdWU7XHJcbiAgICBzdXBlci5mb2N1c09uRGVmYXVsdCh0aGlzLmZvY3VzLmJpbmQodGhpcykpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy5jb21wb25lbnRTZXJ2aWNlLmRlY3JlbWVudENvbXBvbmVudENvdW50ZXJGb3JGaWVsZCh0aGlzLmRhdGEpO1xyXG4gIH1cclxuXHJcbiAgc2V0TWluVmFsdWUobmV3VmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy5taW5WYWx1ZSA9IG5ld1ZhbHVlO1xyXG5cclxuICAgIC8vIG1hcmsgdGhpcyBjb250cm9sIGFzIHRvdWNoZWQgdG8gdHJpZ2dlciBmb3IgdmFsaWRhdGlvblxyXG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybS5jb250cm9sc1t0aGlzLmRhdGEuVmFsdWVdO1xyXG4gICAgY29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XHJcbiAgfVxyXG5cclxuICBzZXRNYXhWYWx1ZShuZXdWYWx1ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLm1heFZhbHVlID0gbmV3VmFsdWU7XHJcblxyXG4gICAgLy8gbWFyayB0aGlzIGNvbnRyb2wgYXMgdG91Y2hlZCB0byB0cmlnZ2VyIGZvciB2YWxpZGF0aW9uXHJcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtLmNvbnRyb2xzW3RoaXMuZGF0YS5WYWx1ZV07XHJcbiAgICBjb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBmb2N1cygpIHtcclxuICAgIGlmICh0aGlzLm51bWVyaWMpIHtcclxuICAgICAgdGhpcy5udW1lcmljLmZvY3VzKCk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IFtmb3JtR3JvdXBdPVwiZm9ybVwiIGNsYXNzPVwiem51bWVyaWMtY29udGFpbmVyIGUxdGFnLXN0eWxlXCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGVcIj5cclxuICA8aW9uLWlucHV0ICpuZ0lmPVwiaXNNb2JpbGVTY3JlZW4oKVwiICN6bnVtZXJpY0ZpZWxkIFtpZF09XCJkYXRhLlZhbHVlXCIgdHlwZT1cIm51bWJlclwiXHJcbiAgICAgICAgICAgICBbYXV0b2NvcnJlY3RdPVwiZGF0YS5BdXRvQ29ycmVjdCA/ICdvbicgOiAnb2ZmJ1wiXHJcbiAgICAgICAgICAgICBbbWluXT1cIm1pblZhbHVlXCJcclxuICAgICAgICAgICAgIFttYXhdPVwibWF4VmFsdWVcIlxyXG4gICAgICAgICAgICAgW3N0ZXBdPVwiZGF0YS5TdGVwVmFsdWVcIlxyXG4gICAgICAgICAgICAgW2lucHV0bW9kZV09XCJpbnB1dE1vZGVcIlxyXG4gICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJkYXRhLlZhbHVlXCJcclxuICAgICAgICAgICAgIFthdHRyLmRpc2FibGVkXT1cIighIWNvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seUZpZWxkID8gZ3JvdXBbY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5RmllbGRdIDogY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5KVwiXHJcbiAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZGF0YS5QbGFjZUhvbGRlclwiXHJcbiAgICAgICAgICAgICBbdmFsdWVdPVwiMCB8IHpudW1lcmljIDogZm9ybSA6IGRhdGFcIlxyXG4gICAgICAgICAgICAgW2NsYXNzLmxlZnQtYWxpZ25lZF09XCJ0aGlzLmRhdGEuUmlnaHRBbGlnbiA9PT0gZmFsc2VcIlxyXG4gICAgICAgICAgICAgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGUxXCIgY2xhc3M9XCJlMXRhZy1zdHlsZTFcIj5cclxuICA8L2lvbi1pbnB1dD5cclxuICA8a2VuZG8tbnVtZXJpY3RleHRib3ggKm5nSWY9XCIhaXNNb2JpbGVTY3JlZW4oKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzcGlubmVyc109XCJkYXRhLlNob3dTcGlubmVyc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdXRvQ29ycmVjdF09XCJkYXRhLkF1dG9Db3JyZWN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJkYXRhLlZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIighIWNvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seUZpZWxkID8gZ3JvdXBbY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5RmllbGRdIDogY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIoISFjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHlGaWVsZCA/IGdyb3VwW2NvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seUZpZWxkXSA6IGNvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWluXT1cIm1pblZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW21heF09XCJtYXhWYWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdGVwXT1cImRhdGEuU3RlcFZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1hdF09XCJkYXRhLkZvcm1hdE9wdGlvbnNcIiBbaWRdPVwiZGF0YS5WYWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJkYXRhLlBsYWNlSG9sZGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpbnB1dC1maWVsZCBlMXRhZy1zdHlsZTFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiMCB8IHpudW1lcmljIDogZm9ybSA6IGRhdGFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwib25DaGFuZ2UobnVsbCwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkZWNpbWFsc109XCJkYXRhLkRlY2ltYWxQbGFjZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5sZWZ0LWFsaWduZWRdPVwidGhpcy5kYXRhLlJpZ2h0QWxpZ24gPT09IGZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgI251bWVyaWM+XHJcbiAgPC9rZW5kby1udW1lcmljdGV4dGJveD5cclxuPC9kaXY+XHJcbiJdfQ==
106
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiem51bWVyaWMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvem51bWVyaWMvem51bWVyaWMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvem51bWVyaWMvem51bWVyaWMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQXFCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQU94RSwyQ0FBMkM7QUFDM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRXhFLE9BQU8sRUFBYyxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7QUFPNUMsTUFBTSxPQUFPLGlCQUFrQixTQUFRLGNBQWM7SUFRbkQsWUFDUyxnQkFBbUM7UUFFMUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFGakIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFtQjtRQVByQyxjQUFTLEdBQUcsU0FBUyxDQUFDO1FBQ3RCLGFBQVEsR0FBRyxDQUFDLENBQUM7UUFDYixhQUFRLEdBQUcsQ0FBQyxDQUFDO0lBUXBCLENBQUM7SUFFRCxRQUFRO1FBQ04sS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzdCLEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO0lBQ2xDLENB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QUksQ0FBQyxZQUFZLENBQUMsQ0FBQzthQUMxQztZQUNELE9BQU8sQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1NBQ2xDO0lBQ0gsQ0FBQztJQUVPLHdCQUF3QjtRQUM5QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNyQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUVyQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BELElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFO1lBQ3pCLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUU7Z0JBQzNDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUE7YUFDNUM7WUFFRCxJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFO2dCQUMzQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFBO2FBQzVDO1NBQ0Y7UUFDRCxPQUFPLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUNuQyxDQUFDOzs4R0F0R1UsaUJBQWlCO2tHQUFqQixpQkFBaUIsK0tDbkI5Qiwyc0VBa0NBOzJGRGZhLGlCQUFpQjtrQkFMN0IsU0FBUzsrQkFDRSxjQUFjO3dHQUtGLE9BQU87c0JBQTVCLFNBQVM7dUJBQUMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqIEFuZ3VsYXIgKioqKioqKioqKi9cclxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG4vKioqKioqKioqKiBJb25pYyAqKioqKioqKioqL1xyXG5cclxuLyoqKioqKioqKiogUGx1Z2luICoqKioqKioqKiovXHJcbmltcG9ydCB7IE51bWVyaWNUZXh0Qm94Q29tcG9uZW50IH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItaW5wdXRzJztcclxuXHJcbi8qKioqKioqKioqIENvbXBvbmVudCAmIFNlcnZpY2UgKioqKioqKioqKi9cclxuaW1wb3J0IHsgSW5wdXRGaWVsZEJhc2UgfSBmcm9tICcuLi9jb21wb25lbnRzL2lucHV0ZmllbGRiYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFpDb21wb25lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvemNvbXBvbmVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgWkNvbXBvbmVudCwgWkNvbXBvbmVudEhlbHBlciB9IGZyb20gXCJtbWhnbG9iYWwtemNvcmVcIjtcclxuaW1wb3J0IHsgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXpudW1lcmljJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vem51bWVyaWMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3pudW1lcmljLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBabnVtZXJpY0NvbXBvbmVudCBleHRlbmRzIElucHV0RmllbGRCYXNlIGltcGxlbWVudHMgWkNvbXBvbmVudCwgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBWaWV3Q2hpbGQoXCJudW1lcmljXCIpIG51bWVyaWM6IE51bWVyaWNUZXh0Qm94Q29tcG9uZW50O1xyXG4gIHB1YmxpYyBpbnB1dE1vZGUgPSBcImRlY2ltYWxcIjtcclxuICBwdWJsaWMgbWluVmFsdWUgPSAwO1xyXG4gIHB1YmxpYyBtYXhWYWx1ZSA9IDA7XHJcbiAgcHJpdmF0ZSBtaW5WYWxpZGF0b3I7XHJcbiAgcHJpdmF0ZSBtYXhWYWxpZGF0b3I7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGNvbXBvbmVudFNlcnZpY2U6IFpDb21wb25lbnRTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcihjb21wb25lbnRTZXJ2aWNlKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgc3VwZXIuc2V0dXBJbm5lckZpZWxkKCk7XHJcbiAgICB0aGlzLnNldEluaXRNaW5BbmRNYXhWYWx1ZSgpO1xyXG4gICAgc3VwZXIuZm9jdXNPbkRlZmF1bHQodGhpcy5mb2N1cy5iaW5kKHRoaXMpKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5yZW1vdmVNaW5BbmRNYXhWYWxpZGF0b3IoKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMuY29tcG9uZW50U2VydmljZS5kZWNyZW1lbnRDb21wb25lbnRDb3VudGVyRm9yRmllbGQodGhpcy5kYXRhKTtcclxuICB9XHJcblxyXG4gIHNldE1pblZhbHVlKG5ld1ZhbHVlOiBudW1iZXIpIHtcclxuICAgIHRoaXMubWluVmFsdWUgPSBuZXdWYWx1ZTtcclxuXHJcbiAgICAvLyBtYXJrIHRoaXMgY29udHJvbCBhcyB0b3VjaGVkIHRvIHRyaWdnZXIgZm9yIHZhbGlkYXRpb25cclxuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5kYXRhLlZhbHVlXTtcclxuICAgIGNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xyXG4gIH1cclxuXHJcbiAgc2V0TWF4VmFsdWUobmV3VmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy5tYXhWYWx1ZSA9IG5ld1ZhbHVlO1xyXG5cclxuICAgIC8vIG1hcmsgdGhpcyBjb250cm9sIGFzIHRvdWNoZWQgdG8gdHJpZ2dlciBmb3IgdmFsaWRhdGlvblxyXG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybS5jb250cm9sc1t0aGlzLmRhdGEuVmFsdWVdO1xyXG4gICAgY29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZm9jdXMoKSB7XHJcbiAgICBpZiAodGhpcy5udW1lcmljKSB7XHJcbiAgICAgIHRoaXMubnVtZXJpYy5mb2N1cygpO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0SW5pdE1pbkFuZE1heFZhbHVlKCkge1xyXG4gICAgaWYgKHR5cGVvZiB0aGlzLmRhdGEuTWluVmFsdWUgPT0gJ3N0cmluZycgJiYgKHRoaXMuZGF0YS5NaW5WYWx1ZSBhcyBhbnkpLnRvU3RyaW5nKCkuc3RhcnRzV2l0aCgnZ3JvdXAuJykpIHtcclxuICAgICAgdGhpcy5taW5WYWx1ZSA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZSgodGhpcy5kYXRhLk1pblZhbHVlIGFzIGFueSkudG9TdHJpbmcoKSwgdGhpcy5ncm91cCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5taW5WYWx1ZSA9IHRoaXMuZGF0YS5NaW5WYWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodHlwZW9mIHRoaXMuZGF0YS5NYXhWYWx1ZSA9PSAnc3RyaW5nJyAmJiAodGhpcy5kYXRhLk1heFZhbHVlIGFzIGFueSkudG9TdHJpbmcoKS5zdGFydHNXaXRoKCdncm91cC4nKSkge1xyXG4gICAgICB0aGlzLm1heFZhbHVlID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cFZhbHVlKCh0aGlzLmRhdGEuTWF4VmFsdWUgYXMgYW55KS50b1N0cmluZygpLCB0aGlzLmdyb3VwKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLm1heFZhbHVlID0gdGhpcy5kYXRhLk1heFZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYWRkTWluQW5kTWF4VmFsaWRhdG9yKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFkZE1pbkFuZE1heFZhbGlkYXRvcigpIHtcclxuICAgIC8vIFNldHVwIGZvcm0gdmFsaWRhdG9yIGZvciBpb25pYyBjb21wb25lbnRzIG9ubHkgKEtlbmRvIGNvbXBvbmVudCB3aWxsIGJlIGF1dG8gc2V0dXApXHJcbiAgICBpZiAodGhpcy5pc01vYmlsZVNjcmVlbigpKSB7XHJcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5kYXRhLlZhbHVlXTtcclxuICAgICAgaWYgKHRoaXMubWluVmFsdWUgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdGhpcy5taW5WYWxpZGF0b3IgPSBWYWxpZGF0b3JzLm1pbihOdW1iZXIodGhpcy5taW5WYWx1ZSkpO1xyXG4gICAgICAgIGNvbnRyb2wuYWRkVmFsaWRhdG9ycyh0aGlzLm1pblZhbGlkYXRvcik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLm1heFZhbHVlICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMubWF4VmFsaWRhdG9yID0gVmFsaWRhdG9ycy5tYXgoTnVtYmVyKHRoaXMubWF4VmFsdWUpKTtcclxuICAgICAgICBjb250cm9sLmFkZFZhbGlkYXRvcnModGhpcy5tYXhWYWxpZGF0b3IpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW1vdmVNaW5BbmRNYXhWYWxpZGF0b3IoKSB7XHJcbiAgICB0aGlzLm1pblZhbHVlID0gbnVsbDtcclxuICAgIHRoaXMubWF4VmFsdWUgPSBudWxsO1xyXG5cclxuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5kYXRhLlZhbHVlXTtcclxuICAgIGlmICh0aGlzLmlzTW9iaWxlU2NyZWVuKCkpIHtcclxuICAgICAgaWYgKGNvbnRyb2wuaGFzVmFsaWRhdG9yKHRoaXMubWluVmFsaWRhdG9yKSkge1xyXG4gICAgICAgIGNvbnRyb2wucmVtb3ZlVmFsaWRhdG9ycyh0aGlzLm1pblZhbGlkYXRvcilcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGNvbnRyb2wuaGFzVmFsaWRhdG9yKHRoaXMubWF4VmFsaWRhdG9yKSkge1xyXG4gICAgICAgIGNvbnRyb2wucmVtb3ZlVmFsaWRhdG9ycyh0aGlzLm1heFZhbGlkYXRvcilcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgW2Zvcm1Hcm91cF09XCJmb3JtXCIgY2xhc3M9XCJ6bnVtZXJpYy1jb250YWluZXIgZTF0YWctc3R5bGVcIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZVwiPlxyXG4gIDxpb24taW5wdXQgKm5nSWY9XCJpc01vYmlsZVNjcmVlbigpXCIgI3pudW1lcmljRmllbGQgW2lkXT1cImRhdGEuVmFsdWVcIiB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgIFthdXRvY29ycmVjdF09XCJkYXRhLkF1dG9Db3JyZWN0ID8gJ29uJyA6ICdvZmYnXCJcclxuICAgICAgICAgICAgIFttaW5dPVwibWluVmFsdWVcIlxyXG4gICAgICAgICAgICAgW21heF09XCJtYXhWYWx1ZVwiXHJcbiAgICAgICAgICAgICBbc3RlcF09XCJkYXRhLlN0ZXBWYWx1ZVwiXHJcbiAgICAgICAgICAgICBbaW5wdXRtb2RlXT1cImlucHV0TW9kZVwiXHJcbiAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImRhdGEuVmFsdWVcIlxyXG4gICAgICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiKCEhY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5RmllbGQgPyBncm91cFtjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHlGaWVsZF0gOiBjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHkpXCJcclxuICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJkYXRhLlBsYWNlSG9sZGVyXCJcclxuICAgICAgICAgICAgIFt2YWx1ZV09XCIwIHwgem51bWVyaWMgOiBmb3JtIDogZGF0YVwiXHJcbiAgICAgICAgICAgICBbY2xhc3MubGVmdC1hbGlnbmVkXT1cInRoaXMuZGF0YS5SaWdodEFsaWduID09PSBmYWxzZVwiXHJcbiAgICAgICAgICAgICBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTFcIiBjbGFzcz1cImUxdGFnLXN0eWxlMVwiPlxyXG4gIDwvaW9uLWlucHV0PlxyXG4gIDxrZW5kby1udW1lcmljdGV4dGJveCAqbmdJZj1cIiFpc01vYmlsZVNjcmVlbigpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3NwaW5uZXJzXT1cImRhdGEuU2hvd1NwaW5uZXJzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2F1dG9Db3JyZWN0XT1cImRhdGEuQXV0b0NvcnJlY3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImRhdGEuVmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiKCEhY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5RmllbGQgPyBncm91cFtjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHlGaWVsZF0gOiBjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIighIWNvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seUZpZWxkID8gZ3JvdXBbY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5RmllbGRdIDogY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttaW5dPVwibWluVmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF4XT1cIm1heFZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0ZXBdPVwiZGF0YS5TdGVwVmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZm9ybWF0XT1cImRhdGEuRm9ybWF0T3B0aW9uc1wiIFtpZF09XCJkYXRhLlZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImRhdGEuUGxhY2VIb2xkZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImlucHV0LWZpZWxkIGUxdGFnLXN0eWxlMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCIwIHwgem51bWVyaWMgOiBmb3JtIDogZGF0YVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJvbkNoYW5nZShudWxsLCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGUxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2RlY2ltYWxzXT1cImRhdGEuRGVjaW1hbFBsYWNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmxlZnQtYWxpZ25lZF09XCJ0aGlzLmRhdGEuUmlnaHRBbGlnbiA9PT0gZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAjbnVtZXJpYz5cclxuICA8L2tlbmRvLW51bWVyaWN0ZXh0Ym94PlxyXG48L2Rpdj5cclxuIl19