ngx-techlify-core 18.6.2 → 18.7.1

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.
@@ -136,11 +136,11 @@ export class FieldMappingComponent {
136
136
  this.onReUpload.emit(true);
137
137
  }
138
138
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FieldMappingComponent, deps: [{ token: i1.UntypedFormBuilder }, { token: i2.FormValidatorService }, { token: i0.ChangeDetectorRef }, { token: i3.Location }], target: i0.ɵɵFactoryTarget.Component }); }
139
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FieldMappingComponent, selector: "app-field-mapping", inputs: { data: "data", config: "config" }, outputs: { onSave: "onSave", onReUpload: "onReUpload" }, ngImport: i0, template: "<div fxLayout=\"column\" class=\"mt-2\">\n <div fxLayout=\"row wrap\" class=\"pb-3\">\n <h5 fxFlex=\"30%\" class=\"primary-color\">Summary</h5>\n <div fxFlex=\"70%\" fxLayoutAlign=\"center center\">\n <h5 class=\"secondary-color\">\n <span class=\"font-weight-bold\">{{data.length}}</span>\n </h5>\n <span class=\"text-muted ml-2\"> Records Found In Uploaded File</span>\n </div>\n </div>\n\n <div>\n <mat-divider></mat-divider>\n </div>\n\n <form [formGroup]=\"importMappingForm\" (ngSubmit)=\"next()\" fxLayout=\"column\" class=\"pt-3\">\n <h5 class=\"primary-color pb-2\">Properties</h5>\n <table style=\"width: 100%;\" class=\"table table-sm table-striped\">\n <tr class=\"table-header-row\">\n <th>Column Headers From File</th>\n <th>Preview Information</th>\n <th>Property</th>\n </tr>\n <ng-container formArrayName=\"fields\">\n <tr *ngFor=\"let field of fieldsArray.controls; let i = index\" [formGroupName]=\"i\">\n <td>{{ field.get('label').value }}</td>\n <td>{{ field.get('value').value }}</td>\n <td>\n <mat-form-field fxFlex=\"100%\" appearance=\"outline\">\n <mat-label>Select Property</mat-label>\n <mat-select placeholder=\"Select Property\" formControlName=\"property\" required\n (selectionChange)=\"updatePropertyType($event, i)\">\n <mat-option *ngFor=\"let property of properties\" [value]=\"property.value\">\n {{property.label}}\n </mat-option>\n </mat-select>\n <mat-error *ngIf=\"isFieldValid('property', fieldsArray.controls[i])\">\n {{getErrorMessage('property', fieldsArray.controls[i])}}\n </mat-error>\n </mat-form-field>\n <button type=\"button\" mat-icon-button (click)=\"removeField(i)\" *ngIf=\"fieldsArray.length > 1\"\n matTooltip=\"Remove column\" matTooltipPosition=\"right\">\n <mat-icon class=\"text-danger\">remove_circle</mat-icon>\n </button>\n </td>\n </tr>\n </ng-container>\n </table>\n\n <div class=\"mt-1\" fxFlex=\"100%\" fxLayoutAlign=\"end\">\n <button mat-button class=\"mt-2 mr-2\" type=\"button\" (click)=\"location.back()\">\n Cancel\n </button>\n <button mat-stroked-button class=\"mt-2 mr-2 primary-color\" type=\"button\" (click)=\"reUpload()\">\n <mat-icon>\n <span class=\"material-icons-outlined\">\n file_upload\n </span>\n </mat-icon>\n Re-upload\n </button>\n <button mat-stroked-button class=\"mt-2 primary-bg text-white\" type=\"submit\">\n Next\n <mat-icon>\n chevron_right\n </mat-icon>\n </button>\n </div>\n </form>\n</div>\n", styles: ["table{width:100%}th,td{padding:1%}.table-header-row{background-color:#e6e4e4;color:#000;font-weight:bolder}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i1.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "directive", type: i4.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i4.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i4.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "directive", type: i6.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i8.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i9.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i10.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "directive", type: i11.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] }); }
139
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FieldMappingComponent, selector: "app-field-mapping", inputs: { data: "data", config: "config" }, outputs: { onSave: "onSave", onReUpload: "onReUpload" }, ngImport: i0, template: "<div fxLayout=\"column\" class=\"mt-2\">\n <div fxLayout=\"row wrap\" class=\"pb-3\">\n <h5 fxFlex=\"30%\" class=\"primary-color\">Summary</h5>\n <div fxFlex=\"70%\" fxLayoutAlign=\"center center\">\n <h5 class=\"secondary-color\">\n <span class=\"font-weight-bold\">{{data.length}}</span>\n </h5>\n <span class=\"text-muted ml-2\"> Records Found In Uploaded File</span>\n </div>\n </div>\n\n <div>\n <mat-divider></mat-divider>\n </div>\n\n <form [formGroup]=\"importMappingForm\" (ngSubmit)=\"next()\" fxLayout=\"column\" class=\"pt-3\">\n <h5 class=\"primary-color pb-2\">Properties</h5>\n <table style=\"width: 100%;\" class=\"table table-sm table-striped\">\n <tr class=\"table-header-row\">\n <th>Column Headers From File</th>\n <th>Preview Information</th>\n <th>Property</th>\n </tr>\n <ng-container formArrayName=\"fields\">\n <tr *ngFor=\"let field of fieldsArray.controls; let i = index\" [formGroupName]=\"i\">\n <td>{{ field.get('label').value }}</td>\n <td>{{ field.get('value').value }}</td>\n <td>\n <mat-form-field fxFlex=\"100%\" appearance=\"outline\">\n <mat-label>Select Property</mat-label>\n <mat-select placeholder=\"Select Property\" formControlName=\"property\" required\n (selectionChange)=\"updatePropertyType($event, i)\">\n <mat-option *ngFor=\"let property of properties\" [value]=\"property.value\">\n {{property.label}}\n </mat-option>\n </mat-select>\n <mat-error *ngIf=\"isFieldValid('property', fieldsArray.controls[i])\">\n {{getErrorMessage('property', fieldsArray.controls[i])}}\n </mat-error>\n </mat-form-field>\n <button type=\"button\" mat-icon-button (click)=\"removeField(i)\" *ngIf=\"fieldsArray.length > 1\"\n matTooltip=\"Remove column\" matTooltipPosition=\"right\">\n <mat-icon class=\"text-danger\">remove_circle</mat-icon>\n </button>\n </td>\n </tr>\n </ng-container>\n </table>\n\n <div class=\"mt-1 d-flex flex-row gap-2\">\n <button mat-button class=\"mt-2 mr-2\" type=\"button\" (click)=\"location.back()\">\n Cancel\n </button>\n <button mat-stroked-button class=\"mt-2 mr-2 primary-color\" type=\"button\" (click)=\"reUpload()\">\n <mat-icon>\n <span class=\"material-icons-outlined\">\n file_upload\n </span>\n </mat-icon>\n Re-upload\n </button>\n <button mat-stroked-button class=\"mt-2 primary-bg\" type=\"submit\">\n Next\n <mat-icon>\n chevron_right\n </mat-icon>\n </button>\n </div>\n </form>\n</div>", styles: ["table{width:100%}th,td{padding:1%}.table-header-row{background-color:#e6e4e4;color:#000;font-weight:bolder}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i1.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "directive", type: i4.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i4.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i4.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "directive", type: i6.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i8.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i9.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i10.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "directive", type: i11.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] }); }
140
140
  }
141
141
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FieldMappingComponent, decorators: [{
142
142
  type: Component,
143
- args: [{ selector: 'app-field-mapping', template: "<div fxLayout=\"column\" class=\"mt-2\">\n <div fxLayout=\"row wrap\" class=\"pb-3\">\n <h5 fxFlex=\"30%\" class=\"primary-color\">Summary</h5>\n <div fxFlex=\"70%\" fxLayoutAlign=\"center center\">\n <h5 class=\"secondary-color\">\n <span class=\"font-weight-bold\">{{data.length}}</span>\n </h5>\n <span class=\"text-muted ml-2\"> Records Found In Uploaded File</span>\n </div>\n </div>\n\n <div>\n <mat-divider></mat-divider>\n </div>\n\n <form [formGroup]=\"importMappingForm\" (ngSubmit)=\"next()\" fxLayout=\"column\" class=\"pt-3\">\n <h5 class=\"primary-color pb-2\">Properties</h5>\n <table style=\"width: 100%;\" class=\"table table-sm table-striped\">\n <tr class=\"table-header-row\">\n <th>Column Headers From File</th>\n <th>Preview Information</th>\n <th>Property</th>\n </tr>\n <ng-container formArrayName=\"fields\">\n <tr *ngFor=\"let field of fieldsArray.controls; let i = index\" [formGroupName]=\"i\">\n <td>{{ field.get('label').value }}</td>\n <td>{{ field.get('value').value }}</td>\n <td>\n <mat-form-field fxFlex=\"100%\" appearance=\"outline\">\n <mat-label>Select Property</mat-label>\n <mat-select placeholder=\"Select Property\" formControlName=\"property\" required\n (selectionChange)=\"updatePropertyType($event, i)\">\n <mat-option *ngFor=\"let property of properties\" [value]=\"property.value\">\n {{property.label}}\n </mat-option>\n </mat-select>\n <mat-error *ngIf=\"isFieldValid('property', fieldsArray.controls[i])\">\n {{getErrorMessage('property', fieldsArray.controls[i])}}\n </mat-error>\n </mat-form-field>\n <button type=\"button\" mat-icon-button (click)=\"removeField(i)\" *ngIf=\"fieldsArray.length > 1\"\n matTooltip=\"Remove column\" matTooltipPosition=\"right\">\n <mat-icon class=\"text-danger\">remove_circle</mat-icon>\n </button>\n </td>\n </tr>\n </ng-container>\n </table>\n\n <div class=\"mt-1\" fxFlex=\"100%\" fxLayoutAlign=\"end\">\n <button mat-button class=\"mt-2 mr-2\" type=\"button\" (click)=\"location.back()\">\n Cancel\n </button>\n <button mat-stroked-button class=\"mt-2 mr-2 primary-color\" type=\"button\" (click)=\"reUpload()\">\n <mat-icon>\n <span class=\"material-icons-outlined\">\n file_upload\n </span>\n </mat-icon>\n Re-upload\n </button>\n <button mat-stroked-button class=\"mt-2 primary-bg text-white\" type=\"submit\">\n Next\n <mat-icon>\n chevron_right\n </mat-icon>\n </button>\n </div>\n </form>\n</div>\n", styles: ["table{width:100%}th,td{padding:1%}.table-header-row{background-color:#e6e4e4;color:#000;font-weight:bolder}\n"] }]
143
+ args: [{ selector: 'app-field-mapping', template: "<div fxLayout=\"column\" class=\"mt-2\">\n <div fxLayout=\"row wrap\" class=\"pb-3\">\n <h5 fxFlex=\"30%\" class=\"primary-color\">Summary</h5>\n <div fxFlex=\"70%\" fxLayoutAlign=\"center center\">\n <h5 class=\"secondary-color\">\n <span class=\"font-weight-bold\">{{data.length}}</span>\n </h5>\n <span class=\"text-muted ml-2\"> Records Found In Uploaded File</span>\n </div>\n </div>\n\n <div>\n <mat-divider></mat-divider>\n </div>\n\n <form [formGroup]=\"importMappingForm\" (ngSubmit)=\"next()\" fxLayout=\"column\" class=\"pt-3\">\n <h5 class=\"primary-color pb-2\">Properties</h5>\n <table style=\"width: 100%;\" class=\"table table-sm table-striped\">\n <tr class=\"table-header-row\">\n <th>Column Headers From File</th>\n <th>Preview Information</th>\n <th>Property</th>\n </tr>\n <ng-container formArrayName=\"fields\">\n <tr *ngFor=\"let field of fieldsArray.controls; let i = index\" [formGroupName]=\"i\">\n <td>{{ field.get('label').value }}</td>\n <td>{{ field.get('value').value }}</td>\n <td>\n <mat-form-field fxFlex=\"100%\" appearance=\"outline\">\n <mat-label>Select Property</mat-label>\n <mat-select placeholder=\"Select Property\" formControlName=\"property\" required\n (selectionChange)=\"updatePropertyType($event, i)\">\n <mat-option *ngFor=\"let property of properties\" [value]=\"property.value\">\n {{property.label}}\n </mat-option>\n </mat-select>\n <mat-error *ngIf=\"isFieldValid('property', fieldsArray.controls[i])\">\n {{getErrorMessage('property', fieldsArray.controls[i])}}\n </mat-error>\n </mat-form-field>\n <button type=\"button\" mat-icon-button (click)=\"removeField(i)\" *ngIf=\"fieldsArray.length > 1\"\n matTooltip=\"Remove column\" matTooltipPosition=\"right\">\n <mat-icon class=\"text-danger\">remove_circle</mat-icon>\n </button>\n </td>\n </tr>\n </ng-container>\n </table>\n\n <div class=\"mt-1 d-flex flex-row gap-2\">\n <button mat-button class=\"mt-2 mr-2\" type=\"button\" (click)=\"location.back()\">\n Cancel\n </button>\n <button mat-stroked-button class=\"mt-2 mr-2 primary-color\" type=\"button\" (click)=\"reUpload()\">\n <mat-icon>\n <span class=\"material-icons-outlined\">\n file_upload\n </span>\n </mat-icon>\n Re-upload\n </button>\n <button mat-stroked-button class=\"mt-2 primary-bg\" type=\"submit\">\n Next\n <mat-icon>\n chevron_right\n </mat-icon>\n </button>\n </div>\n </form>\n</div>", styles: ["table{width:100%}th,td{padding:1%}.table-header-row{background-color:#e6e4e4;color:#000;font-weight:bolder}\n"] }]
144
144
  }], ctorParameters: () => [{ type: i1.UntypedFormBuilder }, { type: i2.FormValidatorService }, { type: i0.ChangeDetectorRef }, { type: i3.Location }], propDecorators: { data: [{
145
145
  type: Input
146
146
  }], config: [{
@@ -150,4 +150,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
150
150
  }], onReUpload: [{
151
151
  type: Output
152
152
  }] } });
153
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQtbWFwcGluZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGVjaGxpZnktY29yZS9zcmMvbGliL2ltcG9ydC1jc3YvZmllbGQtbWFwcGluZy9maWVsZC1tYXBwaW5nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10ZWNobGlmeS1jb3JlL3NyYy9saWIvaW1wb3J0LWNzdi9maWVsZC1tYXBwaW5nL2ZpZWxkLW1hcHBpbmcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFxQixTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEcsT0FBTyxFQUF3QyxrQkFBa0IsRUFBb0IsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFJeEgsTUFBTSxhQUFhLEdBQVE7SUFDekIsUUFBUSxFQUFFO1FBQ1IsUUFBUSxFQUFFLHNCQUFzQjtRQUNoQyxXQUFXLEVBQUUsaUJBQWlCO0tBQy9CO0NBQ0YsQ0FBQztBQU9GLE1BQU0sT0FBTyxxQkFBcUI7SUFVaEMsWUFDVSxFQUFzQixFQUN0QixvQkFBMEMsRUFDMUMsaUJBQW9DLEVBQ3JDLFFBQWtCO1FBSGpCLE9BQUUsR0FBRixFQUFFLENBQW9CO1FBQ3RCLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBc0I7UUFDMUMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNyQyxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBVDNCLG1CQUFjLEdBQVUsRUFBRSxDQUFDO1FBQzNCLGVBQVUsR0FBVSxFQUFFLENBQUM7UUFDYixXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUM1QixlQUFVLEdBQUUsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQVF2QyxJQUFJLENBQUMsdUJBQXVCLEVBQUUs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OytHQTVJVSxxQkFBcUI7bUdBQXJCLHFCQUFxQiw4SkNsQmxDLHl6RkFzRUE7OzRGRHBEYSxxQkFBcUI7a0JBTGpDLFNBQVM7K0JBQ0UsbUJBQW1CO2lMQU9wQixJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUdJLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRm9ybVZhbGlkYXRvclNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL2Zvcm0tdmFsaWRhdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVudHlwZWRGb3JtQXJyYXksIFVudHlwZWRGb3JtQnVpbGRlciwgVW50eXBlZEZvcm1Db250cm9sLCBVbnR5cGVkRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSW1wb3J0Q3N2Q29uZmlnIH0gZnJvbSAnLi4vaW1wb3J0LWNzdi1jb25maWcnO1xuXG5jb25zdCBlcnJvck1lc3NhZ2VzOiBhbnkgPSB7XG4gIHByb3BlcnR5OiB7XG4gICAgcmVxdWlyZWQ6IFwiUHJvcGVydHkgaXMgcmVxdWlyZWRcIixcbiAgICB1bmF2YWlsYWJsZTogXCJEdXBsaWNhdGUgZW50cnlcIlxuICB9LFxufTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWZpZWxkLW1hcHBpbmcnLFxuICB0ZW1wbGF0ZVVybDogJy4vZmllbGQtbWFwcGluZy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2ZpZWxkLW1hcHBpbmcuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBGaWVsZE1hcHBpbmdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIGltcG9ydE1hcHBpbmdGb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xuICBASW5wdXQoKSBkYXRhOiBhbnlbXTtcbiAgQElucHV0KCkgY29uZmlnOiBJbXBvcnRDc3ZDb25maWc7XG4gIGZpcnN0RGF0YUFycmF5OiBhbnlbXSA9IFtdO1xuICBwcm9wZXJ0aWVzOiBhbnlbXSA9IFtdO1xuICBAT3V0cHV0KCkgb25TYXZlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgb25SZVVwbG9hZD0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZmI6IFVudHlwZWRGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIGZvcm1WYWxpZGF0b3JTZXJ2aWNlOiBGb3JtVmFsaWRhdG9yU2VydmljZSxcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwdWJsaWMgbG9jYXRpb246IExvY2F0aW9uXG4gICkge1xuICAgIHRoaXMuY3JlYXRlSW1wb3J0TWFwcGluZ0Zvcm0oKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMucHJvcGVydGllcyA9IHRoaXMuY29uZmlnLnByb3BlcnRpZXM7O1xuICAgIHRoaXMucmVGZWN0b3JBdHRyaWJ1dGVzKHRoaXMuZGF0YVswXSk7XG4gIH1cblxuICBjcmVhdGVJbXBvcnRNYXBwaW5nRm9ybSgpIHtcbiAgICB0aGlzLmltcG9ydE1hcHBpbmdGb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBmaWVsZHM6IHRoaXMuZmIuYXJyYXkoW10pLFxuICAgIH0pO1xuICB9XG5cbiAgZ2V0IGZpZWxkc0FycmF5KCk6IFVudHlwZWRGb3JtQXJyYXkge1xuICAgIHJldHVybiB0aGlzLmltcG9ydE1hcHBpbmdGb3JtLmdldCgnZmllbGRzJykgYXMgVW50eXBlZEZvcm1BcnJheTtcbiAgfVxuXG4gIGNyZWF0ZUZpZWxkKGZpZWxkOiBhbnkpOiBVbnR5cGVkRm9ybUdyb3VwIHtcbiAgICB2YXIgZmllbGRGb3JtOiBVbnR5cGVkRm9ybUdyb3VwID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBpZDogbmV3IFVudHlwZWRGb3JtQ29udHJvbChmaWVsZC5pZCksXG4gICAgICBsYWJlbDogbmV3IFVudHlwZWRGb3JtQ29udHJvbChmaWVsZC5sYWJlbCksXG4gICAgICB2YWx1ZTogbmV3IFVudHlwZWRGb3JtQ29udHJvbChmaWVsZC52YWx1ZSksXG4gICAgICBwcm9wZXJ0eTogbmV3IFVudHlwZWRGb3JtQ29udHJvbChmaWVsZC5wcm9wZXJ0eSxcbiAgICAgICAgVmFsaWRhdG9ycy5jb21wb3NlKFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWRcbiAgICAgICAgICBdXG4gICAgICAgIClcbiAgICAgICksXG4gICAgICBwcm9wZXJ0eVR5cGU6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woZmllbGQucHJvcGVydHlUeXBlKVxuICAgIH0pO1xuICAgIHJldHVybiBmaWVsZEZvcm07XG4gIH1cblxuICByZUZlY3RvckF0dHJpYnV0ZXMoZGF0YSkge1xuICAgIGZvciAodmFyIGsgaW4gZGF0YSkge1xuICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgdmFyIGRhdGFWYWx1ZSA9IHtcbiAgICAgICAgICBpZDogJycsXG4gICAgICAgICAgbGFiZWw6IGssXG4gICAgICAgICAgdmFsdWU6IGRhdGFba10sXG4gICAgICAgICAgcHJvcGVydHk6ICcnLFxuICAgICAgICAgIHByb3BlcnR5VHlwZTogJydcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5maXJzdERhdGFBcnJheS5wdXNoKGRhdGFWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuZmlyc3REYXRhQXJyYXkuZm9yRWFjaCgoZWxlbWVudDogYW55LCBtYWluSW5kZXg6IGFueSkgPT4ge1xuICAgICAgZWxlbWVudC5pZCA9IG1haW5JbmRleDtcbiAgICAgIHRoaXMucHJvcGVydGllcy5maW5kKChwcm9wZXJ0eTogYW55LCBpbmRleDogYW55KSA9PiB7XG4gICAgICAgIGlmIChwcm9wZXJ0eS5sYWJlbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGVsZW1lbnQubGFiZWwudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICBlbGVtZW50LnByb3BlcnR5ID0gcHJvcGVydHkudmFsdWU7XG4gICAgICAgICAgZWxlbWVudC5wcm9wZXJ0eVR5cGUgPSBwcm9wZXJ0eS50eXBlO1xuICAgICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIG5leHQoKSB7XG4gICAgdGhpcy5pbXBvcnRNYXBwaW5nRm9ybS5tYXJrQWxsQXNUb3VjaGVkKCk7XG4gICAgaWYgKCF0aGlzLmltcG9ydE1hcHBpbmdGb3JtLnZhbGlkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMub25TYXZlLmVtaXQodGhpcy5pbXBvcnRNYXBwaW5nRm9ybS52YWx1ZSk7XG4gIH1cblxuICAvKiogTWV0aG9kIHRvIGV2YWx1YXRlIGZvcm0gZmllbGRzKi9cbiAgaXNGaWVsZFZhbGlkKGZpZWxkOiBzdHJpbmcsIGZvcm06IGFueSkge1xuICAgIHJldHVybiB0aGlzLmZvcm1WYWxpZGF0b3JTZXJ2aWNlLmlzRmllbGRWYWxpZChmaWVsZCwgZm9ybSk7XG4gIH1cblxuICAvKiogTWV0aG9kIHRvIGZpbmQgZXJyb3IgaW4gZm9ybSBmaWVsZHMqL1xuICBnZXRFcnJvck1lc3NhZ2UoZmllbGQ6IHN0cmluZywgZm9ybTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybVZhbGlkYXRvclNlcnZpY2UuZ2V0RXJyb3JNZXNzYWdlKGZpZWxkLCBmb3JtLCBlcnJvck1lc3NhZ2VzKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAvL0NhbGxlZCBhZnRlciBuZ0FmdGVyQ29udGVudEluaXQgd2hlbiB0aGUgY29tcG9uZW50J3MgdmlldyBoYXMgYmVlbiBpbml0aWFsaXplZC4gQXBwbGllcyB0byBjb21wb25lbnRzIG9ubHkuXG4gICAgLy9BZGQgJ2ltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCcgdG8gdGhlIGNsYXNzLlxuICAgIHNldFRpbWVvdXQoeCA9PiB7XG4gICAgICB0aGlzLmZpcnN0RGF0YUFycmF5LmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmZpZWxkc0FycmF5LnB1c2godGhpcy5jcmVhdGVGaWVsZChlbGVtZW50KSk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0sIDUwMCk7XG4gIH1cblxuICB1cGRhdGVQcm9wZXJ0eVR5cGUoZXZlbnQ6IGFueSwgaW5kZXg6IGFueSk6IHZvaWQge1xuICAgIHZhciBmaWVsZCA9IHRoaXMucHJvcGVydGllcy5maW5kKChmaWVsZDogYW55KSA9PiBmaWVsZC52YWx1ZSA9PSBldmVudC52YWx1ZSk7XG4gICAgaWYgKGZpZWxkKSB7XG4gICAgICB0aGlzLmZpZWxkc0FycmF5LmNvbnRyb2xzW2luZGV4XS5nZXQoJ3Byb3BlcnR5VHlwZScpLnNldFZhbHVlKGZpZWxkLnR5cGUpO1xuICAgICAgdGhpcy51bmlxdWVWYWxpZGF0b3IoKTtcbiAgICB9XG4gIH1cblxuICB1bmlxdWVWYWxpZGF0b3IoKSB7XG4gICAgdGhpcy5maWVsZHNBcnJheS52YWx1ZS5mb3JFYWNoKChmaWVsZDogYW55LCBpbmRleDogYW55KSA9PiB7XG4gICAgICB2YXIgY29udHJvbCA9IHRoaXMuZmllbGRzQXJyYXkuY29udHJvbHNbaW5kZXhdLmdldCgncHJvcGVydHknKTtcbiAgICAgIGNvbnN0IGlzTmFtZVVuaXF1ZSA9IHRoaXMuZmllbGRzQXJyYXkudmFsdWUuZmluZChwcm9wZXJ0eURhdGEgPT5cbiAgICAgICAgcHJvcGVydHlEYXRhLnByb3BlcnR5ID09PSBjb250cm9sLnZhbHVlXG4gICAgICAgICYmIHByb3BlcnR5RGF0YS5pZCAhPSB0aGlzLmZpZWxkc0FycmF5LmNvbnRyb2xzW2luZGV4XS5nZXQoJ2lkJykudmFsdWVcbiAgICAgIClcbiAgICAgICAgPyBmYWxzZVxuICAgICAgICA6IHRydWU7XG4gICAgICBpZiAoIWlzTmFtZVVuaXF1ZSkge1xuICAgICAgICBjb250cm9sLnNldEVycm9ycyh7IHVuYXZhaWxhYmxlOiB0cnVlIH0pO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKG51bGwpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmVtb3ZlRmllbGQoaW5kZXg6IG51bWJlcikge1xuICAgIGlmIChpbmRleCA9PSAtMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmZpZWxkc0FycmF5LnJlbW92ZUF0KGluZGV4KTtcbiAgfVxuXG4gIHJlVXBsb2FkKCkge1xuICAgIHRoaXMub25SZVVwbG9hZC5lbWl0KHRydWUpO1xuICB9XG5cbn1cbiIsIjxkaXYgZnhMYXlvdXQ9XCJjb2x1bW5cIiBjbGFzcz1cIm10LTJcIj5cbiAgPGRpdiBmeExheW91dD1cInJvdyB3cmFwXCIgY2xhc3M9XCJwYi0zXCI+XG4gICAgPGg1IGZ4RmxleD1cIjMwJVwiIGNsYXNzPVwicHJpbWFyeS1jb2xvclwiPlN1bW1hcnk8L2g1PlxuICAgIDxkaXYgZnhGbGV4PVwiNzAlXCIgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIj5cbiAgICAgIDxoNSBjbGFzcz1cInNlY29uZGFyeS1jb2xvclwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtd2VpZ2h0LWJvbGRcIj57e2RhdGEubGVuZ3RofX08L3NwYW4+XG4gICAgICA8L2g1PlxuICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LW11dGVkIG1sLTJcIj4gUmVjb3JkcyBGb3VuZCBJbiBVcGxvYWRlZCBGaWxlPC9zcGFuPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2PlxuICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICA8L2Rpdj5cblxuICA8Zm9ybSBbZm9ybUdyb3VwXT1cImltcG9ydE1hcHBpbmdGb3JtXCIgKG5nU3VibWl0KT1cIm5leHQoKVwiIGZ4TGF5b3V0PVwiY29sdW1uXCIgY2xhc3M9XCJwdC0zXCI+XG4gICAgPGg1IGNsYXNzPVwicHJpbWFyeS1jb2xvciBwYi0yXCI+UHJvcGVydGllczwvaDU+XG4gICAgPHRhYmxlIHN0eWxlPVwid2lkdGg6IDEwMCU7XCIgY2xhc3M9XCJ0YWJsZSB0YWJsZS1zbSB0YWJsZS1zdHJpcGVkXCI+XG4gICAgICA8dHIgY2xhc3M9XCJ0YWJsZS1oZWFkZXItcm93XCI+XG4gICAgICAgIDx0aD5Db2x1bW4gSGVhZGVycyBGcm9tIEZpbGU8L3RoPlxuICAgICAgICA8dGg+UHJldmlldyBJbmZvcm1hdGlvbjwvdGg+XG4gICAgICAgIDx0aD5Qcm9wZXJ0eTwvdGg+XG4gICAgICA8L3RyPlxuICAgICAgPG5nLWNvbnRhaW5lciBmb3JtQXJyYXlOYW1lPVwiZmllbGRzXCI+XG4gICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgZmllbGQgb2YgZmllbGRzQXJyYXkuY29udHJvbHM7IGxldCBpID0gaW5kZXhcIiBbZm9ybUdyb3VwTmFtZV09XCJpXCI+XG4gICAgICAgICAgPHRkPnt7IGZpZWxkLmdldCgnbGFiZWwnKS52YWx1ZSB9fTwvdGQ+XG4gICAgICAgICAgPHRkPnt7IGZpZWxkLmdldCgndmFsdWUnKS52YWx1ZSB9fTwvdGQ+XG4gICAgICAgICAgPHRkPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD1cIjEwMCVcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPlNlbGVjdCBQcm9wZXJ0eTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBwbGFjZWhvbGRlcj1cIlNlbGVjdCBQcm9wZXJ0eVwiIGZvcm1Db250cm9sTmFtZT1cInByb3BlcnR5XCIgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cInVwZGF0ZVByb3BlcnR5VHlwZSgkZXZlbnQsIGkpXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHByb3BlcnR5IG9mIHByb3BlcnRpZXNcIiBbdmFsdWVdPVwicHJvcGVydHkudmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgIHt7cHJvcGVydHkubGFiZWx9fVxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwiaXNGaWVsZFZhbGlkKCdwcm9wZXJ0eScsIGZpZWxkc0FycmF5LmNvbnRyb2xzW2ldKVwiPlxuICAgICAgICAgICAgICAgIHt7Z2V0RXJyb3JNZXNzYWdlKCdwcm9wZXJ0eScsIGZpZWxkc0FycmF5LmNvbnRyb2xzW2ldKX19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwicmVtb3ZlRmllbGQoaSlcIiAqbmdJZj1cImZpZWxkc0FycmF5Lmxlbmd0aCA+IDFcIlxuICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiUmVtb3ZlIGNvbHVtblwiIG1hdFRvb2x0aXBQb3NpdGlvbj1cInJpZ2h0XCI+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+cmVtb3ZlX2NpcmNsZTwvbWF0LWljb24+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC90YWJsZT5cblxuICAgIDxkaXYgY2xhc3M9XCJtdC0xXCIgZnhGbGV4PVwiMTAwJVwiIGZ4TGF5b3V0QWxpZ249XCJlbmRcIj5cbiAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjbGFzcz1cIm10LTIgbXItMlwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwibG9jYXRpb24uYmFjaygpXCI+XG4gICAgICAgIENhbmNlbFxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBjbGFzcz1cIm10LTIgbXItMiBwcmltYXJ5LWNvbG9yXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJyZVVwbG9hZCgpXCI+XG4gICAgICAgIDxtYXQtaWNvbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCI+XG4gICAgICAgICAgICBmaWxlX3VwbG9hZFxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgUmUtdXBsb2FkXG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNsYXNzPVwibXQtMiBwcmltYXJ5LWJnIHRleHQtd2hpdGVcIiB0eXBlPVwic3VibWl0XCI+XG4gICAgICAgIE5leHRcbiAgICAgICAgPG1hdC1pY29uPlxuICAgICAgICAgIGNoZXZyb25fcmlnaHRcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Zvcm0+XG48L2Rpdj5cbiJdfQ==
153
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQtbWFwcGluZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGVjaGxpZnktY29yZS9zcmMvbGliL2ltcG9ydC1jc3YvZmllbGQtbWFwcGluZy9maWVsZC1tYXBwaW5nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10ZWNobGlmeS1jb3JlL3NyYy9saWIvaW1wb3J0LWNzdi9maWVsZC1tYXBwaW5nL2ZpZWxkLW1hcHBpbmcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFxQixTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEcsT0FBTyxFQUF3QyxrQkFBa0IsRUFBb0IsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFJeEgsTUFBTSxhQUFhLEdBQVE7SUFDekIsUUFBUSxFQUFFO1FBQ1IsUUFBUSxFQUFFLHNCQUFzQjtRQUNoQyxXQUFXLEVBQUUsaUJBQWlCO0tBQy9CO0NBQ0YsQ0FBQztBQU9GLE1BQU0sT0FBTyxxQkFBcUI7SUFVaEMsWUFDVSxFQUFzQixFQUN0QixvQkFBMEMsRUFDMUMsaUJBQW9DLEVBQ3JDLFFBQWtCO1FBSGpCLE9BQUUsR0FBRixFQUFFLENBQW9CO1FBQ3RCLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBc0I7UUFDMUMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNyQyxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBVDNCLG1CQUFjLEdBQVUsRUFBRSxDQUFDO1FBQzNCLGVBQVUsR0FBVSxFQUFFLENBQUM7UUFDYixXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUM1QixlQUFVLEdBQUUsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQVF2QyxJQUFJLENBQUMsdUJBQXVCLEVBQUUs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OytHQTVJVSxxQkFBcUI7bUdBQXJCLHFCQUFxQiw4SkNsQmxDLDR4RkFxRU07OzRGRG5ETyxxQkFBcUI7a0JBTGpDLFNBQVM7K0JBQ0UsbUJBQW1CO2lMQU9wQixJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUdJLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRm9ybVZhbGlkYXRvclNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL2Zvcm0tdmFsaWRhdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVudHlwZWRGb3JtQXJyYXksIFVudHlwZWRGb3JtQnVpbGRlciwgVW50eXBlZEZvcm1Db250cm9sLCBVbnR5cGVkRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSW1wb3J0Q3N2Q29uZmlnIH0gZnJvbSAnLi4vaW1wb3J0LWNzdi1jb25maWcnO1xuXG5jb25zdCBlcnJvck1lc3NhZ2VzOiBhbnkgPSB7XG4gIHByb3BlcnR5OiB7XG4gICAgcmVxdWlyZWQ6IFwiUHJvcGVydHkgaXMgcmVxdWlyZWRcIixcbiAgICB1bmF2YWlsYWJsZTogXCJEdXBsaWNhdGUgZW50cnlcIlxuICB9LFxufTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWZpZWxkLW1hcHBpbmcnLFxuICB0ZW1wbGF0ZVVybDogJy4vZmllbGQtbWFwcGluZy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2ZpZWxkLW1hcHBpbmcuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBGaWVsZE1hcHBpbmdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIGltcG9ydE1hcHBpbmdGb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xuICBASW5wdXQoKSBkYXRhOiBhbnlbXTtcbiAgQElucHV0KCkgY29uZmlnOiBJbXBvcnRDc3ZDb25maWc7XG4gIGZpcnN0RGF0YUFycmF5OiBhbnlbXSA9IFtdO1xuICBwcm9wZXJ0aWVzOiBhbnlbXSA9IFtdO1xuICBAT3V0cHV0KCkgb25TYXZlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgb25SZVVwbG9hZD0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZmI6IFVudHlwZWRGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIGZvcm1WYWxpZGF0b3JTZXJ2aWNlOiBGb3JtVmFsaWRhdG9yU2VydmljZSxcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwdWJsaWMgbG9jYXRpb246IExvY2F0aW9uXG4gICkge1xuICAgIHRoaXMuY3JlYXRlSW1wb3J0TWFwcGluZ0Zvcm0oKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMucHJvcGVydGllcyA9IHRoaXMuY29uZmlnLnByb3BlcnRpZXM7O1xuICAgIHRoaXMucmVGZWN0b3JBdHRyaWJ1dGVzKHRoaXMuZGF0YVswXSk7XG4gIH1cblxuICBjcmVhdGVJbXBvcnRNYXBwaW5nRm9ybSgpIHtcbiAgICB0aGlzLmltcG9ydE1hcHBpbmdGb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBmaWVsZHM6IHRoaXMuZmIuYXJyYXkoW10pLFxuICAgIH0pO1xuICB9XG5cbiAgZ2V0IGZpZWxkc0FycmF5KCk6IFVudHlwZWRGb3JtQXJyYXkge1xuICAgIHJldHVybiB0aGlzLmltcG9ydE1hcHBpbmdGb3JtLmdldCgnZmllbGRzJykgYXMgVW50eXBlZEZvcm1BcnJheTtcbiAgfVxuXG4gIGNyZWF0ZUZpZWxkKGZpZWxkOiBhbnkpOiBVbnR5cGVkRm9ybUdyb3VwIHtcbiAgICB2YXIgZmllbGRGb3JtOiBVbnR5cGVkRm9ybUdyb3VwID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBpZDogbmV3IFVudHlwZWRGb3JtQ29udHJvbChmaWVsZC5pZCksXG4gICAgICBsYWJlbDogbmV3IFVudHlwZWRGb3JtQ29udHJvbChmaWVsZC5sYWJlbCksXG4gICAgICB2YWx1ZTogbmV3IFVudHlwZWRGb3JtQ29udHJvbChmaWVsZC52YWx1ZSksXG4gICAgICBwcm9wZXJ0eTogbmV3IFVudHlwZWRGb3JtQ29udHJvbChmaWVsZC5wcm9wZXJ0eSxcbiAgICAgICAgVmFsaWRhdG9ycy5jb21wb3NlKFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWRcbiAgICAgICAgICBdXG4gICAgICAgIClcbiAgICAgICksXG4gICAgICBwcm9wZXJ0eVR5cGU6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woZmllbGQucHJvcGVydHlUeXBlKVxuICAgIH0pO1xuICAgIHJldHVybiBmaWVsZEZvcm07XG4gIH1cblxuICByZUZlY3RvckF0dHJpYnV0ZXMoZGF0YSkge1xuICAgIGZvciAodmFyIGsgaW4gZGF0YSkge1xuICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgdmFyIGRhdGFWYWx1ZSA9IHtcbiAgICAgICAgICBpZDogJycsXG4gICAgICAgICAgbGFiZWw6IGssXG4gICAgICAgICAgdmFsdWU6IGRhdGFba10sXG4gICAgICAgICAgcHJvcGVydHk6ICcnLFxuICAgICAgICAgIHByb3BlcnR5VHlwZTogJydcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5maXJzdERhdGFBcnJheS5wdXNoKGRhdGFWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuZmlyc3REYXRhQXJyYXkuZm9yRWFjaCgoZWxlbWVudDogYW55LCBtYWluSW5kZXg6IGFueSkgPT4ge1xuICAgICAgZWxlbWVudC5pZCA9IG1haW5JbmRleDtcbiAgICAgIHRoaXMucHJvcGVydGllcy5maW5kKChwcm9wZXJ0eTogYW55LCBpbmRleDogYW55KSA9PiB7XG4gICAgICAgIGlmIChwcm9wZXJ0eS5sYWJlbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGVsZW1lbnQubGFiZWwudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICBlbGVtZW50LnByb3BlcnR5ID0gcHJvcGVydHkudmFsdWU7XG4gICAgICAgICAgZWxlbWVudC5wcm9wZXJ0eVR5cGUgPSBwcm9wZXJ0eS50eXBlO1xuICAgICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIG5leHQoKSB7XG4gICAgdGhpcy5pbXBvcnRNYXBwaW5nRm9ybS5tYXJrQWxsQXNUb3VjaGVkKCk7XG4gICAgaWYgKCF0aGlzLmltcG9ydE1hcHBpbmdGb3JtLnZhbGlkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMub25TYXZlLmVtaXQodGhpcy5pbXBvcnRNYXBwaW5nRm9ybS52YWx1ZSk7XG4gIH1cblxuICAvKiogTWV0aG9kIHRvIGV2YWx1YXRlIGZvcm0gZmllbGRzKi9cbiAgaXNGaWVsZFZhbGlkKGZpZWxkOiBzdHJpbmcsIGZvcm06IGFueSkge1xuICAgIHJldHVybiB0aGlzLmZvcm1WYWxpZGF0b3JTZXJ2aWNlLmlzRmllbGRWYWxpZChmaWVsZCwgZm9ybSk7XG4gIH1cblxuICAvKiogTWV0aG9kIHRvIGZpbmQgZXJyb3IgaW4gZm9ybSBmaWVsZHMqL1xuICBnZXRFcnJvck1lc3NhZ2UoZmllbGQ6IHN0cmluZywgZm9ybTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybVZhbGlkYXRvclNlcnZpY2UuZ2V0RXJyb3JNZXNzYWdlKGZpZWxkLCBmb3JtLCBlcnJvck1lc3NhZ2VzKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAvL0NhbGxlZCBhZnRlciBuZ0FmdGVyQ29udGVudEluaXQgd2hlbiB0aGUgY29tcG9uZW50J3MgdmlldyBoYXMgYmVlbiBpbml0aWFsaXplZC4gQXBwbGllcyB0byBjb21wb25lbnRzIG9ubHkuXG4gICAgLy9BZGQgJ2ltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCcgdG8gdGhlIGNsYXNzLlxuICAgIHNldFRpbWVvdXQoeCA9PiB7XG4gICAgICB0aGlzLmZpcnN0RGF0YUFycmF5LmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmZpZWxkc0FycmF5LnB1c2godGhpcy5jcmVhdGVGaWVsZChlbGVtZW50KSk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0sIDUwMCk7XG4gIH1cblxuICB1cGRhdGVQcm9wZXJ0eVR5cGUoZXZlbnQ6IGFueSwgaW5kZXg6IGFueSk6IHZvaWQge1xuICAgIHZhciBmaWVsZCA9IHRoaXMucHJvcGVydGllcy5maW5kKChmaWVsZDogYW55KSA9PiBmaWVsZC52YWx1ZSA9PSBldmVudC52YWx1ZSk7XG4gICAgaWYgKGZpZWxkKSB7XG4gICAgICB0aGlzLmZpZWxkc0FycmF5LmNvbnRyb2xzW2luZGV4XS5nZXQoJ3Byb3BlcnR5VHlwZScpLnNldFZhbHVlKGZpZWxkLnR5cGUpO1xuICAgICAgdGhpcy51bmlxdWVWYWxpZGF0b3IoKTtcbiAgICB9XG4gIH1cblxuICB1bmlxdWVWYWxpZGF0b3IoKSB7XG4gICAgdGhpcy5maWVsZHNBcnJheS52YWx1ZS5mb3JFYWNoKChmaWVsZDogYW55LCBpbmRleDogYW55KSA9PiB7XG4gICAgICB2YXIgY29udHJvbCA9IHRoaXMuZmllbGRzQXJyYXkuY29udHJvbHNbaW5kZXhdLmdldCgncHJvcGVydHknKTtcbiAgICAgIGNvbnN0IGlzTmFtZVVuaXF1ZSA9IHRoaXMuZmllbGRzQXJyYXkudmFsdWUuZmluZChwcm9wZXJ0eURhdGEgPT5cbiAgICAgICAgcHJvcGVydHlEYXRhLnByb3BlcnR5ID09PSBjb250cm9sLnZhbHVlXG4gICAgICAgICYmIHByb3BlcnR5RGF0YS5pZCAhPSB0aGlzLmZpZWxkc0FycmF5LmNvbnRyb2xzW2luZGV4XS5nZXQoJ2lkJykudmFsdWVcbiAgICAgIClcbiAgICAgICAgPyBmYWxzZVxuICAgICAgICA6IHRydWU7XG4gICAgICBpZiAoIWlzTmFtZVVuaXF1ZSkge1xuICAgICAgICBjb250cm9sLnNldEVycm9ycyh7IHVuYXZhaWxhYmxlOiB0cnVlIH0pO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKG51bGwpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmVtb3ZlRmllbGQoaW5kZXg6IG51bWJlcikge1xuICAgIGlmIChpbmRleCA9PSAtMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmZpZWxkc0FycmF5LnJlbW92ZUF0KGluZGV4KTtcbiAgfVxuXG4gIHJlVXBsb2FkKCkge1xuICAgIHRoaXMub25SZVVwbG9hZC5lbWl0KHRydWUpO1xuICB9XG5cbn1cbiIsIjxkaXYgZnhMYXlvdXQ9XCJjb2x1bW5cIiBjbGFzcz1cIm10LTJcIj5cbiAgPGRpdiBmeExheW91dD1cInJvdyB3cmFwXCIgY2xhc3M9XCJwYi0zXCI+XG4gICAgPGg1IGZ4RmxleD1cIjMwJVwiIGNsYXNzPVwicHJpbWFyeS1jb2xvclwiPlN1bW1hcnk8L2g1PlxuICAgIDxkaXYgZnhGbGV4PVwiNzAlXCIgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIj5cbiAgICAgIDxoNSBjbGFzcz1cInNlY29uZGFyeS1jb2xvclwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtd2VpZ2h0LWJvbGRcIj57e2RhdGEubGVuZ3RofX08L3NwYW4+XG4gICAgICA8L2g1PlxuICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LW11dGVkIG1sLTJcIj4gUmVjb3JkcyBGb3VuZCBJbiBVcGxvYWRlZCBGaWxlPC9zcGFuPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2PlxuICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICA8L2Rpdj5cblxuICA8Zm9ybSBbZm9ybUdyb3VwXT1cImltcG9ydE1hcHBpbmdGb3JtXCIgKG5nU3VibWl0KT1cIm5leHQoKVwiIGZ4TGF5b3V0PVwiY29sdW1uXCIgY2xhc3M9XCJwdC0zXCI+XG4gICAgPGg1IGNsYXNzPVwicHJpbWFyeS1jb2xvciBwYi0yXCI+UHJvcGVydGllczwvaDU+XG4gICAgPHRhYmxlIHN0eWxlPVwid2lkdGg6IDEwMCU7XCIgY2xhc3M9XCJ0YWJsZSB0YWJsZS1zbSB0YWJsZS1zdHJpcGVkXCI+XG4gICAgICA8dHIgY2xhc3M9XCJ0YWJsZS1oZWFkZXItcm93XCI+XG4gICAgICAgIDx0aD5Db2x1bW4gSGVhZGVycyBGcm9tIEZpbGU8L3RoPlxuICAgICAgICA8dGg+UHJldmlldyBJbmZvcm1hdGlvbjwvdGg+XG4gICAgICAgIDx0aD5Qcm9wZXJ0eTwvdGg+XG4gICAgICA8L3RyPlxuICAgICAgPG5nLWNvbnRhaW5lciBmb3JtQXJyYXlOYW1lPVwiZmllbGRzXCI+XG4gICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgZmllbGQgb2YgZmllbGRzQXJyYXkuY29udHJvbHM7IGxldCBpID0gaW5kZXhcIiBbZm9ybUdyb3VwTmFtZV09XCJpXCI+XG4gICAgICAgICAgPHRkPnt7IGZpZWxkLmdldCgnbGFiZWwnKS52YWx1ZSB9fTwvdGQ+XG4gICAgICAgICAgPHRkPnt7IGZpZWxkLmdldCgndmFsdWUnKS52YWx1ZSB9fTwvdGQ+XG4gICAgICAgICAgPHRkPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD1cIjEwMCVcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPlNlbGVjdCBQcm9wZXJ0eTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBwbGFjZWhvbGRlcj1cIlNlbGVjdCBQcm9wZXJ0eVwiIGZvcm1Db250cm9sTmFtZT1cInByb3BlcnR5XCIgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cInVwZGF0ZVByb3BlcnR5VHlwZSgkZXZlbnQsIGkpXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHByb3BlcnR5IG9mIHByb3BlcnRpZXNcIiBbdmFsdWVdPVwicHJvcGVydHkudmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgIHt7cHJvcGVydHkubGFiZWx9fVxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwiaXNGaWVsZFZhbGlkKCdwcm9wZXJ0eScsIGZpZWxkc0FycmF5LmNvbnRyb2xzW2ldKVwiPlxuICAgICAgICAgICAgICAgIHt7Z2V0RXJyb3JNZXNzYWdlKCdwcm9wZXJ0eScsIGZpZWxkc0FycmF5LmNvbnRyb2xzW2ldKX19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwicmVtb3ZlRmllbGQoaSlcIiAqbmdJZj1cImZpZWxkc0FycmF5Lmxlbmd0aCA+IDFcIlxuICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiUmVtb3ZlIGNvbHVtblwiIG1hdFRvb2x0aXBQb3NpdGlvbj1cInJpZ2h0XCI+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+cmVtb3ZlX2NpcmNsZTwvbWF0LWljb24+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC90YWJsZT5cblxuICAgIDxkaXYgY2xhc3M9XCJtdC0xIGQtZmxleCBmbGV4LXJvdyBnYXAtMlwiPlxuICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNsYXNzPVwibXQtMiBtci0yXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJsb2NhdGlvbi5iYWNrKClcIj5cbiAgICAgICAgQ2FuY2VsXG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNsYXNzPVwibXQtMiBtci0yIHByaW1hcnktY29sb3JcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInJlVXBsb2FkKClcIj5cbiAgICAgICAgPG1hdC1pY29uPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5cbiAgICAgICAgICAgIGZpbGVfdXBsb2FkXG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICBSZS11cGxvYWRcbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gY2xhc3M9XCJtdC0yIHByaW1hcnktYmdcIiB0eXBlPVwic3VibWl0XCI+XG4gICAgICAgIE5leHRcbiAgICAgICAgPG1hdC1pY29uPlxuICAgICAgICAgIGNoZXZyb25fcmlnaHRcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Zvcm0+XG48L2Rpdj4iXX0=
@@ -94,13 +94,11 @@ let ImportCsvComponent = class ImportCsvComponent {
94
94
  return this.importSteps.find(step => step.id == this.currentStep);
95
95
  }
96
96
  async fileChanged(event) {
97
- this.currentStep = 2;
98
- this.filesList = event;
99
97
  let selectedFile = null;
100
98
  let jsonData = null;
101
99
  const reader = new FileReader();
102
- const file = this.filesList[0];
103
- reader.onload = (event) => {
100
+ const file = event[0];
101
+ reader.onload = () => {
104
102
  const data = reader.result;
105
103
  selectedFile = XLSX.read(data, {
106
104
  type: 'binary',
@@ -115,9 +113,15 @@ let ImportCsvComponent = class ImportCsvComponent {
115
113
  return initial;
116
114
  }, {});
117
115
  this.fileData = jsonData;
116
+ if (this.fileData.length === 0) {
117
+ this.reUpload();
118
+ this.alertService.addAlert('CSV file is empty', 'error');
119
+ return;
120
+ }
121
+ this.filesList = event;
122
+ this.currentStep = 2;
118
123
  };
119
124
  reader.readAsBinaryString(file);
120
- return;
121
125
  }
122
126
  mappingProcessed(event) {
123
127
  this.currentStep = 3;
@@ -196,4 +200,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
196
200
  }], ctorParameters: () => [{ type: i1.AlertService }, { type: i2.ErrorHandlerService }, { type: i3.HttpService }, { type: i4.DatePipe }], propDecorators: { config: [{
197
201
  type: Input
198
202
  }] } });
199
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0LWNzdi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGVjaGxpZnktY29yZS9zcmMvbGliL2ltcG9ydC1jc3YvaW1wb3J0LWNzdi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGVjaGxpZnktY29yZS9zcmMvbGliL2ltcG9ydC1jc3YvaW1wb3J0LWNzdi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBR0EsT0FBTyxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUd6RCxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFVdEIsSUFBTSxrQkFBa0IsR0FBeEIsTUFBTSxrQkFBa0I7SUEwRDdCLFlBQ1UsWUFBMEIsRUFDMUIsWUFBaUMsRUFDakMsSUFBaUIsRUFDakIsUUFBa0I7UUFIbEIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsaUJBQVksR0FBWixZQUFZLENBQXFCO1FBQ2pDLFNBQUksR0FBSixJQUFJLENBQWE7UUFDakIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQTFENUIsY0FBUyxHQUFVLEVBQUUsQ0FBQztRQUN0QixTQUFJLEdBQVUsRUFBRSxDQUFDO1FBQ2pCLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFDNUIseUJBQW9CLEdBQVksS0FBSyxDQUFDO1FBRXRDLGFBQVEsR0FBVSxFQUFFLENBQUM7UUFDckIsZ0JBQVcsR0FBVSxFQUFFLENBQUM7UUFDeEIsbUJBQWMsR0FBVSxFQUFFLENBQUM7UUFDM0IsZ0JBQVcsR0FBUTtZQUNqQjtnQkFDRSxFQUFFLEVBQUUsQ0FBQztnQkFDTCxJQUFJLEVBQUUsQ0FBQztnQkFDUCxLQUFLLEVBQUUsUUFBUTtn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QUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztJQUN2QixDQUFDOytHQXBMVSxrQkFBa0I7bUdBQWxCLGtCQUFrQixvRkNqQi9CLG1xSUE2RU07O0FENURPLGtCQUFrQjtJQVA5QixZQUFZLEVBQUU7R0FPRixrQkFBa0IsQ0FzTDlCOzs0RkF0TFksa0JBQWtCO2tCQUw5QixTQUFTOytCQUNFLGdCQUFnQjtvS0FNakIsTUFBTTtzQkFBZCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVmlld2VyQ29uZmlnIH0gZnJvbSAnLi4vZG9jdW1lbnQtdmlld2VyL3ZpZXdlci1jb25maWcubW9kZWwnO1xuaW1wb3J0IHsgRmlsZURyb3BwZXJDb25maWcgfSBmcm9tICcuLi9maWxlLWRyb3BwZXIvZmlsZS1kcm9wcGVyLm1vZGVsJztcbmltcG9ydCB7IEh0dHBTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS9odHRwLnNlcnZpY2UnO1xuaW1wb3J0IHsgVW50aWxEZXN0cm95LCB1bnRpbERlc3Ryb3llZCB9IGZyb20gJ0BuZ25lYXQvdW50aWwtZGVzdHJveSc7XG5pbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFsZXJ0U2VydmljZSB9IGZyb20gJy4uL2NvcmUvYWxlcnQuc2VydmljZSc7XG5pbXBvcnQgeyBFcnJvckhhbmRsZXJTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS9lcnJvci1oYW5kbGVyLnNlcnZpY2UnO1xuaW1wb3J0ICogYXMgWExTWCBmcm9tICd4bHN4JztcbmltcG9ydCB7IEltcG9ydENzdkNvbmZpZyB9IGZyb20gJy4vaW1wb3J0LWNzdi1jb25maWcnO1xuaW1wb3J0IHtEYXRlUGlwZX0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuQFVudGlsRGVzdHJveSgpXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1pbXBvcnQtY3N2JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2ltcG9ydC1jc3YuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9pbXBvcnQtY3N2LmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgSW1wb3J0Q3N2Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcmVzdWx0OiBhbnk7XG4gIEBJbnB1dCgpIGNvbmZpZzogSW1wb3J0Q3N2Q29uZmlnO1xuICBmaWxlc0NvbmZpZzogRmlsZURyb3BwZXJDb25maWc7XG4gIGZpbGVzTGlzdDogYW55W10gPSBbXTtcbiAgZGF0YTogYW55W10gPSBbXTtcbiAgaXNVcGxvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBpc0ltcG9ydFR5cGVTZWxlY3RlZDogYm9vbGVhbiA9IGZhbHNlO1xuICB2aWV3ZXJDb25maWc6IFZpZXdlckNvbmZpZztcbiAgZmlsZURhdGE6IGFueVtdID0gW107XG4gIGZhaWxlZEl0ZW1zOiBhbnlbXSA9IFtdO1xuICBzZWxlY3RlZEZpZWxkczogYW55W10gPSBbXTtcbiAgaW1wb3J0U3RlcHM6IGFueSA9IFtcbiAgICB7XG4gICAgICBpZDogMSxcbiAgICAgIHN0ZXA6IDEsXG4gICAgICB0aXRsZTogJ1VwbG9hZCcsXG4gICAgICBwcm9ncmVzc1RpdGxlOiAnJyxcbiAgICAgIHByb2dyZXNzRGVzY3JpcHRpb246ICcnXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogMixcbiAgICAgIHN0ZXA6IDIsXG4gICAgICB0aXRsZTogJ0ZpZWxkIE1hcHBpbmdzJyxcbiAgICAgIHByb2dyZXNzVGl0bGU6ICcnLFxuICAgICAgcHJvZ3Jlc3NEZXNjcmlwdGlvbjogJydcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAzLFxuICAgICAgc3RlcDogMyxcbiAgICAgIHRpdGxlOiAnRGF0YSBWYWxpZGF0aW9uJyxcbiAgICAgIHByb2dyZXNzVGl0bGU6ICdEYXRhIEJlaW5nIFZhbGlkYXRlZCcsXG4gICAgICBwcm9ncmVzc0Rlc2NyaXB0aW9uOiAnVGhlIGRhdGEgaXMgY3VycmVudGx5IGJlaW5nIHZhbGlkYXRlZCBhbmQgY2hlY2tlZCBmb3IgZXJyb3JzLCBwbGVhc2UgZG8gbm90IG5hdmlnYXRlIGF3YXkgZnJvbSB0aGlzIHBhZ2UuICdcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiA0LFxuICAgICAgc3RlcDogMyxcbiAgICAgIHRpdGxlOiAnRGF0YSBWYWxpZGF0aW9uICYgRXJyb3JzJyxcbiAgICAgIHByb2dyZXNzVGl0bGU6ICcnLFxuICAgICAgcHJvZ3Jlc3NEZXNjcmlwdGlvbjogJydcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiA1LFxuICAgICAgc3RlcDogNCxcbiAgICAgIHRpdGxlOiAnRGF0YSBJbXBvcnRpbmcnLFxuICAgICAgcHJvZ3Jlc3NUaXRsZTogJ0RhdGEgQmVpbmcgSW1wb3J0ZWQnLFxuICAgICAgcHJvZ3Jlc3NEZXNjcmlwdGlvbjogJ1RoZSBkYXRhIGlzIGN1cnJlbnRseSBiZWluZyBpbXBvcnRlZCBhbmQgc2F2ZWQsIHBsZWFzZSBkbyBub3QgbmF2aWdhdGUgYXdheSBmcm9tIHRoaXMgcGFnZS4gQWZ0ZXIgdGhlIGltcG9ydCBpcyBjb21wbGV0ZWQsIHlvdSB3aWxsIGJlIHJlZGlyZWN0ZWQgdG8gYSBwYWdlIHdpdGggdGhlIGltcG9ydGVkIHJlY29yZHMuJ1xuICAgIH0sXG4gICAge1xuICAgICAgaWQ6IDYsXG4gICAgICBzdGVwOiA1LFxuICAgICAgdGl0bGU6ICdTdWNjZXNzIFBhZ2UgJiBEYXRhIFByZXZpZXcnLFxuICAgICAgcHJvZ3Jlc3NUaXRsZTogJycsXG4gICAgICBwcm9ncmVzc0Rlc2NyaXB0aW9uOiAnJ1xuICAgIH0sXG4gIF07XG4gIGN1cnJlbnRTdGVwOiBhbnkgPSAxO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwU2VydmljZSxcbiAgICBwcml2YXRlIGRhdGVQaXBlOiBEYXRlUGlwZVxuICApIHtcbiAgICB0aGlzLmZpbGVzQ29uZmlnID0ge1xuICAgICAgZmlsZUlkOiBcImZpbGVcIixcbiAgICAgIGNvbnRhaW5lcklkOiBcImZpbGVDb250YWluZXJcIixcbiAgICAgIHN0eWxlczoge1xuICAgICAgICBoZWlnaHQ6IFwiMjAwcHhcIlxuICAgICAgfSxcbiAgICAgIGFjY2VwdEZpbGU6ICcuY3N2JyxcbiAgICAgIG11bHRpcGxlOiBmYWxzZSxcbiAgICAgIG1heFNpemU6IDEwLFxuICAgICAgYWNjZXB0RmlsZVRleHQ6IFwiLmNzdlwiXG4gICAgfTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICB9XG5cbiAgZ2V0IHN0ZXAoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW1wb3J0U3RlcHMuZmluZChzdGVwID0+IHN0ZXAuaWQgPT0gdGhpcy5jdXJyZW50U3RlcCk7XG4gIH1cblxuICBhc3luYyBmaWxlQ2hhbmdlZChldmVudDogYW55KSB7XG4gICAgdGhpcy5jdXJyZW50U3RlcCA9IDI7XG4gICAgdGhpcy5maWxlc0xpc3QgPSBldmVudDtcblxuICAgIGxldCBzZWxlY3RlZEZpbGUgPSBudWxsO1xuICAgIGxldCBqc29uRGF0YSA9IG51bGw7XG4gICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICBjb25zdCBmaWxlID0gdGhpcy5maWxlc0xpc3RbMF07XG4gICAgcmVhZGVyLm9ubG9hZCA9IChldmVudCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHJlYWRlci5yZXN1bHQ7XG4gICAgICBzZWxlY3RlZEZpbGUgPSBYTFNYLnJlYWQoZGF0YSwge1xuICAgICAgICB0eXBlOiAnYmluYXJ5JyxcbiAgICAgICAgY2VsbERhdGVzOiB0cnVlLFxuICAgICAgfSk7XG4gICAgICBqc29uRGF0YSA9IHNlbGVjdGVkRmlsZS5TaGVldE5hbWVzLnJlZHVjZSgoaW5pdGlhbCwgbmFtZSkgPT4ge1xuICAgICAgICBjb25zdCBzaGVldCA9IHNlbGVjdGVkRmlsZS5TaGVldHNbbmFtZV07XG4gICAgICAgIGluaXRpYWwgPSBYTFNYLnV0aWxzLnNoZWV0X3RvX2pzb24oc2hlZXQsIHtcbiAgICAgICAgICBoZWFkZXI6IDAsXG4gICAgICAgICAgZGVmdmFsOiBcIlwiLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGluaXRpYWw7XG4gICAgICB9LCB7fSk7XG4gICAgICB0aGlzLmZpbGVEYXRhID0ganNvbkRhdGE7XG4gICAgfVxuICAgIHJlYWRlci5yZWFkQXNCaW5hcnlTdHJpbmcoZmlsZSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbWFwcGluZ1Byb2Nlc3NlZChldmVudDogYW55KSB7XG4gICAgdGhpcy5jdXJyZW50U3RlcCA9IDM7XG4gICAgc2V0VGltZW91dCh4ID0+IHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWVsZHMgPSBldmVudC5maWVsZHM7XG4gICAgICBjb25zdCB0ZW1wRmlsZURhdGEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZmlsZURhdGEpKTtcbiAgICAgIHRlbXBGaWxlRGF0YS5mb3JFYWNoKGRhdGEgPT4ge1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gZGF0YSkge1xuICAgICAgICAgIHZhciBmaWVsZCA9IGV2ZW50LmZpZWxkcy5maW5kKChmaWVsZDogYW55KSA9PiBmaWVsZC5sYWJlbCA9PSBrZXkpO1xuICAgICAgICAgIGlmIChmaWVsZCkge1xuICAgICAgICAgICAgaWYgKGZpZWxkLnByb3BlcnR5VHlwZSA9PSAnZGF0ZScgJiYgdGhpcy5pc1ZhbGlkRGF0ZShuZXcgRGF0ZShkYXRhW2ZpZWxkLmxhYmVsXSkpKSB7XG4gICAgICAgICAgICAgIGRhdGFbZmllbGQucHJvcGVydHldID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0obmV3IERhdGUoZGF0YVtmaWVsZC5sYWJlbF0pLCAneXl5eS1NTS1kZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZmllbGQucHJvcGVydHlUeXBlID09ICdkYXRlVGltZScgJiYgdGhpcy5pc1ZhbGlkRGF0ZShuZXcgRGF0ZShkYXRhW2ZpZWxkLmxhYmVsXSkpKSB7XG4gICAgICAgICAgICAgIGRhdGFbZmllbGQucHJvcGVydHldID0gKG5ldyBEYXRlKGRhdGFbZmllbGQubGFiZWxdKSBhcyBEYXRlKS50b0lTT1N0cmluZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIGRhdGFbZmllbGQucHJvcGVydHldID0gZGF0YVtmaWVsZC5sYWJlbF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWxldGUgZGF0YVtrZXldO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLnNhdmUodGVtcEZpbGVEYXRhKTtcbiAgICB9LCAyMDAwKTtcbiAgfVxuXG4gIGFzeW5jIHNhdmUodGVtcEZpbGVEYXRhOiBhbnkpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5odHRwLnBvc3QodGhpcy5jb25maWcuYXBpVXJsLCB7IGRhdGE6IHRlbXBGaWxlRGF0YSB9KVxuICAgICAgICAucGlwZShcbiAgICAgICAgICB1bnRpbERlc3Ryb3llZCh0aGlzKVxuICAgICAgICApLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHtcblxuICAgICAgICAgIHRoaXMuZmFpbGVkSXRlbXMgPSByZXN1bHQuZmFpbGVkX2l0ZW1zO1xuICAgICAgICAgIGlmICh0aGlzLmZhaWxlZEl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkQWxlcnQocmVzdWx0Lm1zZywgJ3dhcm4nKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCEodGhpcy5mYWlsZWRJdGVtcy5sZW5ndGggPiAwKSkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RlcCA9IDU7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KHggPT4ge1xuICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGVwID0gNjtcbiAgICAgICAgICAgICAgdGhpcy5yZXN1bHQgPSByZXN1bHQ7XG4gICAgICAgICAgICB9LCAyMDAwKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGVwID0gNDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoKGVycm9yLnN0YXR1cyA9PT0gNDIyIHx8IGVycm9yLnN0YXR1cyA9PT0gNDAwKSAmJiBlcnJvci5tc2cpIHtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkQWxlcnQoZXJyb3IubXNnLCBcIndhcm5pbmdcIik7XG4gICAgICB9XG4gICAgICB0aGlzLmVycm9ySGFuZGxlci5oYW5kbGVFcnJvcihlcnJvcik7XG4gICAgICB0aGlzLnJlVXBsb2FkKCk7XG4gICAgfVxuICB9XG5cbiAgaXNWYWxpZERhdGUoZDogYW55KSB7XG4gICAgcmV0dXJuIGQgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTihkLmdldFRpbWUoKSk7XG4gIH1cblxuICByZVVwbG9hZCgpIHtcbiAgICB0aGlzLmRhdGEgPSBbXTtcbiAgICB0aGlzLmZpbGVEYXRhID0gW107XG4gICAgdGhpcy5maWxlc0xpc3QgPSBbXTtcbiAgICB0aGlzLmZhaWxlZEl0ZW1zID0gW107XG4gICAgdGhpcy5zZWxlY3RlZEZpZWxkcyA9IFtdO1xuICAgIHRoaXMuY3VycmVudFN0ZXAgPSAxO1xuICB9XG5cbn1cbiIsIjxkaXYgZnhMYXlvdXQ9XCJjb2x1bW4gd3JhcFwiIGNsYXNzPVwicC00XCI+XG4gIDxtYXQtY2FyZCBmeEZsZXg9XCIxMDAlXCIgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIiBjbGFzcz1cInAtMFwiPlxuICAgIDxtYXQtY2FyZC1jb250ZW50IGZ4RmlsbCBmeExheW91dD1cInJvdyB3cmFwXCIgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIiBjbGFzcz1cInByaW1hcnktY29sb3JcIj5cbiAgICAgIDxoNCBmeEZsZXg9XCIyMCVcIiBjbGFzcz1cIm1sLTJcIj5cbiAgICAgICAgU3RlcCB7e3N0ZXAuc3RlcH19OiA8c3BhbiBjbGFzcz1cIm5vcm1hbC1mb250LXdlaWdodFwiPnt7c3RlcD8udGl0bGV9fTwvc3Bhbj5cbiAgICAgIDwvaDQ+XG4gICAgICA8aDMgZnhGbGV4PVwiODAlXCIgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIiBjbGFzcz1cInRleHQtZGFya1wiIGZ4TGF5b3V0R2FwPVwiMXJlbSBncmlkXCI+XG4gICAgICAgIDxzcGFuPnt7Y29uZmlnPy50aXRsZX19IEltcG9ydDwvc3Bhbj5cbiAgICAgICAgPGEgKm5nSWY9XCJjb25maWc/LnNhbXBsZUZpbGUgJiYgY3VycmVudFN0ZXAgPT0gMVwiIHN0eWxlPVwiY29sb3I6IGluaGVyaXQ7XCIgW2Rvd25sb2FkXT1cImNvbmZpZz8uc2FtcGxlRmlsZT8ubmFtZVwiXG4gICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCIgW2hyZWZdPVwiY29uZmlnPy5zYW1wbGVGaWxlPy5wYXRoXCIgbWF0VG9vbHRpcD1cIkRvd25sb2FkIFNhbXBsZSBmaWxlXCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYmVsb3dcIlxuICAgICAgICAgIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCI+XG4gICAgICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gY2xhc3M9XCJwcmltYXJ5LWNvbG9yXCI+XG4gICAgICAgICAgICA8bWF0LWljb24+XG4gICAgICAgICAgICAgIGRvd25sb2FkXG4gICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgU2FtcGxlIEZpbGVcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9hPlxuICAgICAgPC9oMz5cbiAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XG4gIDwvbWF0LWNhcmQ+XG4gIDxkaXYgZnhGbGV4PVwiMTAwJVwiIGNsYXNzPVwibXQtM1wiPlxuICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3cgd3JhcFwiIGZ4TGF5b3V0R2FwPVwiMXJlbSBncmlkXCIgKm5nSWY9XCJjdXJyZW50U3RlcD09MSB8fCBjdXJyZW50U3RlcCA9PSAyIHx8IGN1cnJlbnRTdGVwID09IDRcIj5cbiAgICAgIDxkaXYgZnhGbGV4PVwiMTAwJVwiIGZ4RmxleC5ndC1zbT1cIjAgMSBjYWxjKDcwJS0xcmVtKVwiPlxuICAgICAgICA8bWF0LWNhcmQgZnhGbGV4PVwiMTAwJVwiPlxuICAgICAgICAgIDxtYXQtY2FyZC1jb250ZW50IGZ4TGF5b3V0PVwiY29sdW1uXCI+XG4gICAgICAgICAgICA8ZGl2IGZ4RmxleD1cIjEwMCVcIj5cbiAgICAgICAgICAgICAgPHNlY3Rpb24gZnhMYXlvdXQ9XCJjb2x1bW5cIiAqbmdJZj1cImNvbmZpZy5pbXBvcnRUeXBlICYmICF0aGlzLmZpbGVEYXRhLmxlbmd0aCAmJiAhdGhpcy5mYWlsZWRJdGVtcy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJwcmltYXJ5LWNvbG9yIHBiLTNcIj5GaWxlIFVwbG9hZDwvaDU+XG4gICAgICAgICAgICAgICAgPGFwcC1maWxlLWRyb3BwZXIgZnhGaWxsIGNsYXNzPVwibWItMiBkcm9wLXNlY3Rpb25cIiBbY29uZmlnXT1cImZpbGVzQ29uZmlnXCIgW2ZpbGVBcnJheV09XCJmaWxlc0xpc3RcIlxuICAgICAgICAgICAgICAgICAgKGZpbGVDaGFuZ2VkKT1cImZpbGVDaGFuZ2VkKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICA8L2FwcC1maWxlLWRyb3BwZXI+XG4gICAgICAgICAgICAgICAgPGFwcC1pbXBvcnQtaGlzdG9yeS1saXN0ICpuZ0lmPVwiY29uZmlnLmltcG9ydEhpc3RvcnkuaXNFbmFibGVkXCIgW2NvbmZpZ109XCJjb25maWdcIj5cbiAgICAgICAgICAgICAgICA8L2FwcC1pbXBvcnQtaGlzdG9yeS1saXN0PlxuICAgICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICAgIDxhcHAtZmllbGQtbWFwcGluZyBjbGFzcz1cInctMTAwXCIgKm5nSWY9XCJ0aGlzLmZpbGVEYXRhLmxlbmd0aCA+IDAgJiYgIXRoaXMuZmFpbGVkSXRlbXMubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICBbZGF0YV09XCJmaWxlRGF0YVwiIFtjb25maWddPVwiY29uZmlnXCIgKG9uU2F2ZSk9XCJtYXBwaW5nUHJvY2Vzc2VkKCRldmVudClcIiAob25SZVVwbG9hZCk9XCJyZVVwbG9hZCgpXCI+XG4gICAgICAgICAgICAgIDwvYXBwLWZpZWxkLW1hcHBpbmc+XG4gICAgICAgICAgICAgIDxhcHAtZmFpbGVkLWl0ZW1zLWxpc3QgY2xhc3M9XCJ3LTEwMFwiICpuZ0lmPVwidGhpcy5mYWlsZWRJdGVtcy5sZW5ndGggPiAwXCIgW2ZhaWxlZEl0ZW1zXT1cImZhaWxlZEl0ZW1zXCJcbiAgICAgICAgICAgICAgICBbc2VsZWN0ZWRGaWVsZHNdPVwic2VsZWN0ZWRGaWVsZHNcIiAob25SZVVwbG9hZCk9XCJyZVVwbG9hZCgpXCI+PC9hcHAtZmFpbGVkLWl0ZW1zLWxpc3Q+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XG4gICAgICAgIDwvbWF0LWNhcmQ+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgZnhGbGV4PVwiMTAwJVwiIGZ4RmxleC5ndC1zbT1cIjMwJVwiPlxuICAgICAgICA8bWF0LWNhcmQgZnhGbGV4PVwiMTAwJVwiPlxuICAgICAgICAgIDxtYXQtY2FyZC1jb250ZW50IGZ4TGF5b3V0PVwiY29sdW1uXCIgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IHN0YXJ0XCI+XG4gICAgICAgICAgICA8aDUgY2xhc3M9XCJwcmltYXJ5LWNvbG9yIHBiLTNcIj5JbnN0cnVjdGlvbnMgJiBSZXF1aXJlbWVudHM8L2g1PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWRcIj5cbiAgICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgICAgMS4gUGxlYXNlIHVzZSB0aGlzIHl5eXkvTU0vZGQgZGF0ZSBmb3JtYXQgZm9yIGFsbCB0aGUgZGF0ZSBmaWVsZHMuIE90aGVyd2lzZSB5b3VyIGRhdGUgZmllbGRzIHdpbGwgYmVcbiAgICAgICAgICAgICAgICBpbmNvcnJlY3Qgb3Igbm90IHdpbGwgYmUgYWNjZXB0ZWQuIEV4OiAyMDIxLzA5LzI3XG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbmZpZz8uY3VzdG9tRXJyb3JNZXNzYWdlc1wiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb25maWc/LmlzUmVuZGVyQ3VzdG9tRXJyb3JNZXNzYWdlc0luSHRtbDsgZWxzZSByZW5kZXJQbGFpblRleHRcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IG1lc3NhZ2Ugb2YgY29uZmlnPy5jdXN0b21FcnJvck1lc3NhZ2VzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgW2lubmVySHRtbF09XCJtZXNzYWdlXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3JlbmRlclBsYWluVGV4dD5cbiAgICAgICAgICAgICAgICAgIDxwICpuZ0Zvcj1cImxldCBtZXNzYWdlIG9mIGNvbmZpZz8uY3VzdG9tRXJyb3JNZXNzYWdlc1wiPlxuICAgICAgICAgICAgICAgICAgICB7e21lc3NhZ2V9fVxuICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9tYXQtY2FyZC1jb250ZW50PlxuICAgICAgICA8L21hdC1jYXJkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBmeExheW91dD1cImNvbHVtbiB3cmFwXCIgY2xhc3M9XCJwLTRcIiAqbmdJZj1cImN1cnJlbnRTdGVwPT0zIHx8IGN1cnJlbnRTdGVwID09IDVcIj5cbiAgICAgIDxhcHAtZGF0YS1pbXBvcnQgW3N0ZXBdPVwic3RlcFwiIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCI+PC9hcHAtZGF0YS1pbXBvcnQ+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBmeExheW91dD1cImNvbHVtbiB3cmFwXCIgY2xhc3M9XCJwLTRcIiAqbmdJZj1cImN1cnJlbnRTdGVwID09IDZcIj5cbiAgICAgIDxhcHAtaW1wb3J0LXN1Y2Nlc3MgW2RhdGFdPVwicmVzdWx0XCIgW2NvbmZpZ109XCJjb25maWdcIiBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiPjwvYXBwLWltcG9ydC1zdWNjZXNzPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PiJdfQ==
203
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0LWNzdi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGVjaGxpZnktY29yZS9zcmMvbGliL2ltcG9ydC1jc3YvaW1wb3J0LWNzdi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGVjaGxpZnktY29yZS9zcmMvbGliL2ltcG9ydC1jc3YvaW1wb3J0LWNzdi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBR0EsT0FBTyxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUd6RCxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFVdEIsSUFBTSxrQkFBa0IsR0FBeEIsTUFBTSxrQkFBa0I7SUEwRDdCLFlBQ1UsWUFBMEIsRUFDMUIsWUFBaUMsRUFDakMsSUFBaUIsRUFDakIsUUFBa0I7UUFIbEIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsaUJBQVksR0FBWixZQUFZLENBQXFCO1FBQ2pDLFNBQUksR0FBSixJQUFJLENBQWE7UUFDakIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQTFENUIsY0FBUyxHQUFVLEVBQUUsQ0FBQztRQUN0QixTQUFJLEdBQVUsRUFBRSxDQUFDO1FBQ2pCLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFDNUIseUJBQW9CLEdBQVksS0FBSyxDQUFDO1FBRXRDLGFBQVEsR0FBVSxFQUFFLENBQUM7UUFDckIsZ0JBQVcsR0FBVSxFQUFFLENBQUM7UUFDeEIsbUJBQWMsR0FBVSxFQUFFLENBQUM7UUFDM0IsZ0JBQVcsR0FBUTtZQUNqQjtnQkFDRSxFQUFFLEVBQUUsQ0FBQztnQkFDTCxJQUFJLEVBQUUsQ0FBQztnQkFDUCxLQUFLLEVBQUUsUUFBUTtn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QUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNmLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7K0dBdkxVLGtCQUFrQjttR0FBbEIsa0JBQWtCLG9GQ2pCL0IsbXFJQTZFTTs7QUQ1RE8sa0JBQWtCO0lBUDlCLFlBQVksRUFBRTtHQU9GLGtCQUFrQixDQXlMOUI7OzRGQXpMWSxrQkFBa0I7a0JBTDlCLFNBQVM7K0JBQ0UsZ0JBQWdCO29LQU1qQixNQUFNO3NCQUFkLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBWaWV3ZXJDb25maWcgfSBmcm9tICcuLi9kb2N1bWVudC12aWV3ZXIvdmlld2VyLWNvbmZpZy5tb2RlbCc7XG5pbXBvcnQgeyBGaWxlRHJvcHBlckNvbmZpZyB9IGZyb20gJy4uL2ZpbGUtZHJvcHBlci9maWxlLWRyb3BwZXIubW9kZWwnO1xuaW1wb3J0IHsgSHR0cFNlcnZpY2UgfSBmcm9tICcuLi9jb3JlL2h0dHAuc2VydmljZSc7XG5pbXBvcnQgeyBVbnRpbERlc3Ryb3ksIHVudGlsRGVzdHJveWVkIH0gZnJvbSAnQG5nbmVhdC91bnRpbC1kZXN0cm95JztcbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS9hbGVydC5zZXJ2aWNlJztcbmltcG9ydCB7IEVycm9ySGFuZGxlclNlcnZpY2UgfSBmcm9tICcuLi9jb3JlL2Vycm9yLWhhbmRsZXIuc2VydmljZSc7XG5pbXBvcnQgKiBhcyBYTFNYIGZyb20gJ3hsc3gnO1xuaW1wb3J0IHsgSW1wb3J0Q3N2Q29uZmlnIH0gZnJvbSAnLi9pbXBvcnQtY3N2LWNvbmZpZyc7XG5pbXBvcnQge0RhdGVQaXBlfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5AVW50aWxEZXN0cm95KClcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWltcG9ydC1jc3YnLFxuICB0ZW1wbGF0ZVVybDogJy4vaW1wb3J0LWNzdi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2ltcG9ydC1jc3YuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBJbXBvcnRDc3ZDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICByZXN1bHQ6IGFueTtcbiAgQElucHV0KCkgY29uZmlnOiBJbXBvcnRDc3ZDb25maWc7XG4gIGZpbGVzQ29uZmlnOiBGaWxlRHJvcHBlckNvbmZpZztcbiAgZmlsZXNMaXN0OiBhbnlbXSA9IFtdO1xuICBkYXRhOiBhbnlbXSA9IFtdO1xuICBpc1VwbG9hZGVkOiBib29sZWFuID0gZmFsc2U7XG4gIGlzSW1wb3J0VHlwZVNlbGVjdGVkOiBib29sZWFuID0gZmFsc2U7XG4gIHZpZXdlckNvbmZpZzogVmlld2VyQ29uZmlnO1xuICBmaWxlRGF0YTogYW55W10gPSBbXTtcbiAgZmFpbGVkSXRlbXM6IGFueVtdID0gW107XG4gIHNlbGVjdGVkRmllbGRzOiBhbnlbXSA9IFtdO1xuICBpbXBvcnRTdGVwczogYW55ID0gW1xuICAgIHtcbiAgICAgIGlkOiAxLFxuICAgICAgc3RlcDogMSxcbiAgICAgIHRpdGxlOiAnVXBsb2FkJyxcbiAgICAgIHByb2dyZXNzVGl0bGU6ICcnLFxuICAgICAgcHJvZ3Jlc3NEZXNjcmlwdGlvbjogJydcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAyLFxuICAgICAgc3RlcDogMixcbiAgICAgIHRpdGxlOiAnRmllbGQgTWFwcGluZ3MnLFxuICAgICAgcHJvZ3Jlc3NUaXRsZTogJycsXG4gICAgICBwcm9ncmVzc0Rlc2NyaXB0aW9uOiAnJ1xuICAgIH0sXG4gICAge1xuICAgICAgaWQ6IDMsXG4gICAgICBzdGVwOiAzLFxuICAgICAgdGl0bGU6ICdEYXRhIFZhbGlkYXRpb24nLFxuICAgICAgcHJvZ3Jlc3NUaXRsZTogJ0RhdGEgQmVpbmcgVmFsaWRhdGVkJyxcbiAgICAgIHByb2dyZXNzRGVzY3JpcHRpb246ICdUaGUgZGF0YSBpcyBjdXJyZW50bHkgYmVpbmcgdmFsaWRhdGVkIGFuZCBjaGVja2VkIGZvciBlcnJvcnMsIHBsZWFzZSBkbyBub3QgbmF2aWdhdGUgYXdheSBmcm9tIHRoaXMgcGFnZS4gJ1xuICAgIH0sXG4gICAge1xuICAgICAgaWQ6IDQsXG4gICAgICBzdGVwOiAzLFxuICAgICAgdGl0bGU6ICdEYXRhIFZhbGlkYXRpb24gJiBFcnJvcnMnLFxuICAgICAgcHJvZ3Jlc3NUaXRsZTogJycsXG4gICAgICBwcm9ncmVzc0Rlc2NyaXB0aW9uOiAnJ1xuICAgIH0sXG4gICAge1xuICAgICAgaWQ6IDUsXG4gICAgICBzdGVwOiA0LFxuICAgICAgdGl0bGU6ICdEYXRhIEltcG9ydGluZycsXG4gICAgICBwcm9ncmVzc1RpdGxlOiAnRGF0YSBCZWluZyBJbXBvcnRlZCcsXG4gICAgICBwcm9ncmVzc0Rlc2NyaXB0aW9uOiAnVGhlIGRhdGEgaXMgY3VycmVudGx5IGJlaW5nIGltcG9ydGVkIGFuZCBzYXZlZCwgcGxlYXNlIGRvIG5vdCBuYXZpZ2F0ZSBhd2F5IGZyb20gdGhpcyBwYWdlLiBBZnRlciB0aGUgaW1wb3J0IGlzIGNvbXBsZXRlZCwgeW91IHdpbGwgYmUgcmVkaXJlY3RlZCB0byBhIHBhZ2Ugd2l0aCB0aGUgaW1wb3J0ZWQgcmVjb3Jkcy4nXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogNixcbiAgICAgIHN0ZXA6IDUsXG4gICAgICB0aXRsZTogJ1N1Y2Nlc3MgUGFnZSAmIERhdGEgUHJldmlldycsXG4gICAgICBwcm9ncmVzc1RpdGxlOiAnJyxcbiAgICAgIHByb2dyZXNzRGVzY3JpcHRpb246ICcnXG4gICAgfSxcbiAgXTtcbiAgY3VycmVudFN0ZXA6IGFueSA9IDE7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcbiAgICBwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVyU2VydmljZSxcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBTZXJ2aWNlLFxuICAgIHByaXZhdGUgZGF0ZVBpcGU6IERhdGVQaXBlXG4gICkge1xuICAgIHRoaXMuZmlsZXNDb25maWcgPSB7XG4gICAgICBmaWxlSWQ6IFwiZmlsZVwiLFxuICAgICAgY29udGFpbmVySWQ6IFwiZmlsZUNvbnRhaW5lclwiLFxuICAgICAgc3R5bGVzOiB7XG4gICAgICAgIGhlaWdodDogXCIyMDBweFwiXG4gICAgICB9LFxuICAgICAgYWNjZXB0RmlsZTogJy5jc3YnLFxuICAgICAgbXVsdGlwbGU6IGZhbHNlLFxuICAgICAgbWF4U2l6ZTogMTAsXG4gICAgICBhY2NlcHRGaWxlVGV4dDogXCIuY3N2XCJcbiAgICB9O1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gIH1cblxuICBnZXQgc3RlcCgpIHtcbiAgICByZXR1cm4gdGhpcy5pbXBvcnRTdGVwcy5maW5kKHN0ZXAgPT4gc3RlcC5pZCA9PSB0aGlzLmN1cnJlbnRTdGVwKTtcbiAgfVxuXG4gIGFzeW5jIGZpbGVDaGFuZ2VkKGV2ZW50OiBhbnkpIHtcbiAgICBsZXQgc2VsZWN0ZWRGaWxlID0gbnVsbDtcbiAgICBsZXQganNvbkRhdGEgPSBudWxsO1xuICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgY29uc3QgZmlsZSA9IGV2ZW50WzBdO1xuICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gcmVhZGVyLnJlc3VsdDtcbiAgICAgIHNlbGVjdGVkRmlsZSA9IFhMU1gucmVhZChkYXRhLCB7XG4gICAgICAgIHR5cGU6ICdiaW5hcnknLFxuICAgICAgICBjZWxsRGF0ZXM6IHRydWUsXG4gICAgICB9KTtcbiAgICAgIGpzb25EYXRhID0gc2VsZWN0ZWRGaWxlLlNoZWV0TmFtZXMucmVkdWNlKChpbml0aWFsLCBuYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IHNoZWV0ID0gc2VsZWN0ZWRGaWxlLlNoZWV0c1tuYW1lXTtcbiAgICAgICAgaW5pdGlhbCA9IFhMU1gudXRpbHMuc2hlZXRfdG9fanNvbihzaGVldCwge1xuICAgICAgICAgIGhlYWRlcjogMCxcbiAgICAgICAgICBkZWZ2YWw6IFwiXCIsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gaW5pdGlhbDtcbiAgICAgIH0sIHt9KTtcbiAgICAgIHRoaXMuZmlsZURhdGEgPSBqc29uRGF0YTtcbiAgICAgIGlmICh0aGlzLmZpbGVEYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLnJlVXBsb2FkKCk7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZEFsZXJ0KCdDU1YgZmlsZSBpcyBlbXB0eScsICdlcnJvcicpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmZpbGVzTGlzdCA9IGV2ZW50O1xuICAgICAgdGhpcy5jdXJyZW50U3RlcCA9IDI7XG4gICAgfVxuICAgIHJlYWRlci5yZWFkQXNCaW5hcnlTdHJpbmcoZmlsZSk7XG4gIH1cblxuICBtYXBwaW5nUHJvY2Vzc2VkKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmN1cnJlbnRTdGVwID0gMztcbiAgICBzZXRUaW1lb3V0KHggPT4ge1xuICAgICAgdGhpcy5zZWxlY3RlZEZpZWxkcyA9IGV2ZW50LmZpZWxkcztcbiAgICAgIGNvbnN0IHRlbXBGaWxlRGF0YSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5maWxlRGF0YSkpO1xuICAgICAgdGVtcEZpbGVEYXRhLmZvckVhY2goZGF0YSA9PiB7XG4gICAgICAgIGZvciAodmFyIGtleSBpbiBkYXRhKSB7XG4gICAgICAgICAgdmFyIGZpZWxkID0gZXZlbnQuZmllbGRzLmZpbmQoKGZpZWxkOiBhbnkpID0+IGZpZWxkLmxhYmVsID09IGtleSk7XG4gICAgICAgICAgaWYgKGZpZWxkKSB7XG4gICAgICAgICAgICBpZiAoZmllbGQucHJvcGVydHlUeXBlID09ICdkYXRlJyAmJiB0aGlzLmlzVmFsaWREYXRlKG5ldyBEYXRlKGRhdGFbZmllbGQubGFiZWxdKSkpIHtcbiAgICAgICAgICAgICAgZGF0YVtmaWVsZC5wcm9wZXJ0eV0gPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShuZXcgRGF0ZShkYXRhW2ZpZWxkLmxhYmVsXSksICd5eXl5LU1NLWRkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChmaWVsZC5wcm9wZXJ0eVR5cGUgPT0gJ2RhdGVUaW1lJyAmJiB0aGlzLmlzVmFsaWREYXRlKG5ldyBEYXRlKGRhdGFbZmllbGQubGFiZWxdKSkpIHtcbiAgICAgICAgICAgICAgZGF0YVtmaWVsZC5wcm9wZXJ0eV0gPSAobmV3IERhdGUoZGF0YVtmaWVsZC5sYWJlbF0pIGFzIERhdGUpLnRvSVNPU3RyaW5nKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgZGF0YVtmaWVsZC5wcm9wZXJ0eV0gPSBkYXRhW2ZpZWxkLmxhYmVsXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlbGV0ZSBkYXRhW2tleV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuc2F2ZSh0ZW1wRmlsZURhdGEpO1xuICAgIH0sIDIwMDApO1xuICB9XG5cbiAgYXN5bmMgc2F2ZSh0ZW1wRmlsZURhdGE6IGFueSkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmh0dHAucG9zdCh0aGlzLmNvbmZpZy5hcGlVcmwsIHsgZGF0YTogdGVtcEZpbGVEYXRhIH0pXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHVudGlsRGVzdHJveWVkKHRoaXMpXG4gICAgICAgICkuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4ge1xuXG4gICAgICAgICAgdGhpcy5mYWlsZWRJdGVtcyA9IHJlc3VsdC5mYWlsZWRfaXRlbXM7XG4gICAgICAgICAgaWYgKHRoaXMuZmFpbGVkSXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRBbGVydChyZXN1bHQubXNnLCAnd2FybicpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoISh0aGlzLmZhaWxlZEl0ZW1zLmxlbmd0aCA+IDApKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGVwID0gNTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoeCA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuY3VycmVudFN0ZXAgPSA2O1xuICAgICAgICAgICAgICB0aGlzLnJlc3VsdCA9IHJlc3VsdDtcbiAgICAgICAgICAgIH0sIDIwMDApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFN0ZXAgPSA0O1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICgoZXJyb3Iuc3RhdHVzID09PSA0MjIgfHwgZXJyb3Iuc3RhdHVzID09PSA0MDApICYmIGVycm9yLm1zZykge1xuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRBbGVydChlcnJvci5tc2csIFwid2FybmluZ1wiKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZXJyb3JIYW5kbGVyLmhhbmRsZUVycm9yKGVycm9yKTtcbiAgICAgIHRoaXMucmVVcGxvYWQoKTtcbiAgICB9XG4gIH1cblxuICBpc1ZhbGlkRGF0ZShkOiBhbnkpIHtcbiAgICByZXR1cm4gZCBpbnN0YW5jZW9mIERhdGUgJiYgIWlzTmFOKGQuZ2V0VGltZSgpKTtcbiAgfVxuXG4gIHJlVXBsb2FkKCkge1xuICAgIHRoaXMuZGF0YSA9IFtdO1xuICAgIHRoaXMuZmlsZURhdGEgPSBbXTtcbiAgICB0aGlzLmZpbGVzTGlzdCA9IFtdO1xuICAgIHRoaXMuZmFpbGVkSXRlbXMgPSBbXTtcbiAgICB0aGlzLnNlbGVjdGVkRmllbGRzID0gW107XG4gICAgdGhpcy5jdXJyZW50U3RlcCA9IDE7XG4gIH1cblxufVxuIiwiPGRpdiBmeExheW91dD1cImNvbHVtbiB3cmFwXCIgY2xhc3M9XCJwLTRcIj5cbiAgPG1hdC1jYXJkIGZ4RmxleD1cIjEwMCVcIiBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiIGNsYXNzPVwicC0wXCI+XG4gICAgPG1hdC1jYXJkLWNvbnRlbnQgZnhGaWxsIGZ4TGF5b3V0PVwicm93IHdyYXBcIiBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiIGNsYXNzPVwicHJpbWFyeS1jb2xvclwiPlxuICAgICAgPGg0IGZ4RmxleD1cIjIwJVwiIGNsYXNzPVwibWwtMlwiPlxuICAgICAgICBTdGVwIHt7c3RlcC5zdGVwfX06IDxzcGFuIGNsYXNzPVwibm9ybWFsLWZvbnQtd2VpZ2h0XCI+e3tzdGVwPy50aXRsZX19PC9zcGFuPlxuICAgICAgPC9oND5cbiAgICAgIDxoMyBmeEZsZXg9XCI4MCVcIiBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiIGNsYXNzPVwidGV4dC1kYXJrXCIgZnhMYXlvdXRHYXA9XCIxcmVtIGdyaWRcIj5cbiAgICAgICAgPHNwYW4+e3tjb25maWc/LnRpdGxlfX0gSW1wb3J0PC9zcGFuPlxuICAgICAgICA8YSAqbmdJZj1cImNvbmZpZz8uc2FtcGxlRmlsZSAmJiBjdXJyZW50U3RlcCA9PSAxXCIgc3R5bGU9XCJjb2xvcjogaW5oZXJpdDtcIiBbZG93bmxvYWRdPVwiY29uZmlnPy5zYW1wbGVGaWxlPy5uYW1lXCJcbiAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIiBbaHJlZl09XCJjb25maWc/LnNhbXBsZUZpbGU/LnBhdGhcIiBtYXRUb29sdGlwPVwiRG93bmxvYWQgU2FtcGxlIGZpbGVcIiBtYXRUb29sdGlwUG9zaXRpb249XCJiZWxvd1wiXG4gICAgICAgICAgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIj5cbiAgICAgICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBjbGFzcz1cInByaW1hcnktY29sb3JcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5cbiAgICAgICAgICAgICAgZG93bmxvYWRcbiAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICBTYW1wbGUgRmlsZVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2E+XG4gICAgICA8L2gzPlxuICAgIDwvbWF0LWNhcmQtY29udGVudD5cbiAgPC9tYXQtY2FyZD5cbiAgPGRpdiBmeEZsZXg9XCIxMDAlXCIgY2xhc3M9XCJtdC0zXCI+XG4gICAgPGRpdiBmeExheW91dD1cInJvdyB3cmFwXCIgZnhMYXlvdXRHYXA9XCIxcmVtIGdyaWRcIiAqbmdJZj1cImN1cnJlbnRTdGVwPT0xIHx8IGN1cnJlbnRTdGVwID09IDIgfHwgY3VycmVudFN0ZXAgPT0gNFwiPlxuICAgICAgPGRpdiBmeEZsZXg9XCIxMDAlXCIgZnhGbGV4Lmd0LXNtPVwiMCAxIGNhbGMoNzAlLTFyZW0pXCI+XG4gICAgICAgIDxtYXQtY2FyZCBmeEZsZXg9XCIxMDAlXCI+XG4gICAgICAgICAgPG1hdC1jYXJkLWNvbnRlbnQgZnhMYXlvdXQ9XCJjb2x1bW5cIj5cbiAgICAgICAgICAgIDxkaXYgZnhGbGV4PVwiMTAwJVwiPlxuICAgICAgICAgICAgICA8c2VjdGlvbiBmeExheW91dD1cImNvbHVtblwiICpuZ0lmPVwiY29uZmlnLmltcG9ydFR5cGUgJiYgIXRoaXMuZmlsZURhdGEubGVuZ3RoICYmICF0aGlzLmZhaWxlZEl0ZW1zLmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cInByaW1hcnktY29sb3IgcGItM1wiPkZpbGUgVXBsb2FkPC9oNT5cbiAgICAgICAgICAgICAgICA8YXBwLWZpbGUtZHJvcHBlciBmeEZpbGwgY2xhc3M9XCJtYi0yIGRyb3Atc2VjdGlvblwiIFtjb25maWddPVwiZmlsZXNDb25maWdcIiBbZmlsZUFycmF5XT1cImZpbGVzTGlzdFwiXG4gICAgICAgICAgICAgICAgICAoZmlsZUNoYW5nZWQpPVwiZmlsZUNoYW5nZWQoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgIDwvYXBwLWZpbGUtZHJvcHBlcj5cbiAgICAgICAgICAgICAgICA8YXBwLWltcG9ydC1oaXN0b3J5LWxpc3QgKm5nSWY9XCJjb25maWcuaW1wb3J0SGlzdG9yeS5pc0VuYWJsZWRcIiBbY29uZmlnXT1cImNvbmZpZ1wiPlxuICAgICAgICAgICAgICAgIDwvYXBwLWltcG9ydC1oaXN0b3J5LWxpc3Q+XG4gICAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICAgICAgPGFwcC1maWVsZC1tYXBwaW5nIGNsYXNzPVwidy0xMDBcIiAqbmdJZj1cInRoaXMuZmlsZURhdGEubGVuZ3RoID4gMCAmJiAhdGhpcy5mYWlsZWRJdGVtcy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgIFtkYXRhXT1cImZpbGVEYXRhXCIgW2NvbmZpZ109XCJjb25maWdcIiAob25TYXZlKT1cIm1hcHBpbmdQcm9jZXNzZWQoJGV2ZW50KVwiIChvblJlVXBsb2FkKT1cInJlVXBsb2FkKClcIj5cbiAgICAgICAgICAgICAgPC9hcHAtZmllbGQtbWFwcGluZz5cbiAgICAgICAgICAgICAgPGFwcC1mYWlsZWQtaXRlbXMtbGlzdCBjbGFzcz1cInctMTAwXCIgKm5nSWY9XCJ0aGlzLmZhaWxlZEl0ZW1zLmxlbmd0aCA+IDBcIiBbZmFpbGVkSXRlbXNdPVwiZmFpbGVkSXRlbXNcIlxuICAgICAgICAgICAgICAgIFtzZWxlY3RlZEZpZWxkc109XCJzZWxlY3RlZEZpZWxkc1wiIChvblJlVXBsb2FkKT1cInJlVXBsb2FkKClcIj48L2FwcC1mYWlsZWQtaXRlbXMtbGlzdD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbWF0LWNhcmQtY29udGVudD5cbiAgICAgICAgPC9tYXQtY2FyZD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBmeEZsZXg9XCIxMDAlXCIgZnhGbGV4Lmd0LXNtPVwiMzAlXCI+XG4gICAgICAgIDxtYXQtY2FyZCBmeEZsZXg9XCIxMDAlXCI+XG4gICAgICAgICAgPG1hdC1jYXJkLWNvbnRlbnQgZnhMYXlvdXQ9XCJjb2x1bW5cIiBmeExheW91dEFsaWduPVwic3RhcnQgc3RhcnRcIj5cbiAgICAgICAgICAgIDxoNSBjbGFzcz1cInByaW1hcnktY29sb3IgcGItM1wiPkluc3RydWN0aW9ucyAmIFJlcXVpcmVtZW50czwvaDU+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZFwiPlxuICAgICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgICAxLiBQbGVhc2UgdXNlIHRoaXMgeXl5eS9NTS9kZCBkYXRlIGZvcm1hdCBmb3IgYWxsIHRoZSBkYXRlIGZpZWxkcy4gT3RoZXJ3aXNlIHlvdXIgZGF0ZSBmaWVsZHMgd2lsbCBiZVxuICAgICAgICAgICAgICAgIGluY29ycmVjdCBvciBub3Qgd2lsbCBiZSBhY2NlcHRlZC4gRXg6IDIwMjEvMDkvMjdcbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29uZmlnPy5jdXN0b21FcnJvck1lc3NhZ2VzXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbmZpZz8uaXNSZW5kZXJDdXN0b21FcnJvck1lc3NhZ2VzSW5IdG1sOyBlbHNlIHJlbmRlclBsYWluVGV4dFwiPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbWVzc2FnZSBvZiBjb25maWc/LmN1c3RvbUVycm9yTWVzc2FnZXNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBbaW5uZXJIdG1sXT1cIm1lc3NhZ2VcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcmVuZGVyUGxhaW5UZXh0PlxuICAgICAgICAgICAgICAgICAgPHAgKm5nRm9yPVwibGV0IG1lc3NhZ2Ugb2YgY29uZmlnPy5jdXN0b21FcnJvck1lc3NhZ2VzXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7bWVzc2FnZX19XG4gICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XG4gICAgICAgIDwvbWF0LWNhcmQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGZ4TGF5b3V0PVwiY29sdW1uIHdyYXBcIiBjbGFzcz1cInAtNFwiICpuZ0lmPVwiY3VycmVudFN0ZXA9PTMgfHwgY3VycmVudFN0ZXAgPT0gNVwiPlxuICAgICAgPGFwcC1kYXRhLWltcG9ydCBbc3RlcF09XCJzdGVwXCIgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIj48L2FwcC1kYXRhLWltcG9ydD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGZ4TGF5b3V0PVwiY29sdW1uIHdyYXBcIiBjbGFzcz1cInAtNFwiICpuZ0lmPVwiY3VycmVudFN0ZXAgPT0gNlwiPlxuICAgICAgPGFwcC1pbXBvcnQtc3VjY2VzcyBbZGF0YV09XCJyZXN1bHRcIiBbY29uZmlnXT1cImNvbmZpZ1wiIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCI+PC9hcHAtaW1wb3J0LXN1Y2Nlc3M+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+Il19
@@ -8364,11 +8364,11 @@ class FieldMappingComponent {
8364
8364
  this.onReUpload.emit(true);
8365
8365
  }
8366
8366
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FieldMappingComponent, deps: [{ token: i1$4.UntypedFormBuilder }, { token: FormValidatorService }, { token: i0.ChangeDetectorRef }, { token: i2$1.Location }], target: i0.ɵɵFactoryTarget.Component }); }
8367
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FieldMappingComponent, selector: "app-field-mapping", inputs: { data: "data", config: "config" }, outputs: { onSave: "onSave", onReUpload: "onReUpload" }, ngImport: i0, template: "<div fxLayout=\"column\" class=\"mt-2\">\n <div fxLayout=\"row wrap\" class=\"pb-3\">\n <h5 fxFlex=\"30%\" class=\"primary-color\">Summary</h5>\n <div fxFlex=\"70%\" fxLayoutAlign=\"center center\">\n <h5 class=\"secondary-color\">\n <span class=\"font-weight-bold\">{{data.length}}</span>\n </h5>\n <span class=\"text-muted ml-2\"> Records Found In Uploaded File</span>\n </div>\n </div>\n\n <div>\n <mat-divider></mat-divider>\n </div>\n\n <form [formGroup]=\"importMappingForm\" (ngSubmit)=\"next()\" fxLayout=\"column\" class=\"pt-3\">\n <h5 class=\"primary-color pb-2\">Properties</h5>\n <table style=\"width: 100%;\" class=\"table table-sm table-striped\">\n <tr class=\"table-header-row\">\n <th>Column Headers From File</th>\n <th>Preview Information</th>\n <th>Property</th>\n </tr>\n <ng-container formArrayName=\"fields\">\n <tr *ngFor=\"let field of fieldsArray.controls; let i = index\" [formGroupName]=\"i\">\n <td>{{ field.get('label').value }}</td>\n <td>{{ field.get('value').value }}</td>\n <td>\n <mat-form-field fxFlex=\"100%\" appearance=\"outline\">\n <mat-label>Select Property</mat-label>\n <mat-select placeholder=\"Select Property\" formControlName=\"property\" required\n (selectionChange)=\"updatePropertyType($event, i)\">\n <mat-option *ngFor=\"let property of properties\" [value]=\"property.value\">\n {{property.label}}\n </mat-option>\n </mat-select>\n <mat-error *ngIf=\"isFieldValid('property', fieldsArray.controls[i])\">\n {{getErrorMessage('property', fieldsArray.controls[i])}}\n </mat-error>\n </mat-form-field>\n <button type=\"button\" mat-icon-button (click)=\"removeField(i)\" *ngIf=\"fieldsArray.length > 1\"\n matTooltip=\"Remove column\" matTooltipPosition=\"right\">\n <mat-icon class=\"text-danger\">remove_circle</mat-icon>\n </button>\n </td>\n </tr>\n </ng-container>\n </table>\n\n <div class=\"mt-1\" fxFlex=\"100%\" fxLayoutAlign=\"end\">\n <button mat-button class=\"mt-2 mr-2\" type=\"button\" (click)=\"location.back()\">\n Cancel\n </button>\n <button mat-stroked-button class=\"mt-2 mr-2 primary-color\" type=\"button\" (click)=\"reUpload()\">\n <mat-icon>\n <span class=\"material-icons-outlined\">\n file_upload\n </span>\n </mat-icon>\n Re-upload\n </button>\n <button mat-stroked-button class=\"mt-2 primary-bg text-white\" type=\"submit\">\n Next\n <mat-icon>\n chevron_right\n </mat-icon>\n </button>\n </div>\n </form>\n</div>\n", styles: ["table{width:100%}th,td{padding:1%}.table-header-row{background-color:#e6e4e4;color:#000;font-weight:bolder}\n"], dependencies: [{ kind: "directive", type: i2$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1$4.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i1$4.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "directive", type: i7.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i7.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i7.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "component", type: i7$1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i7$1.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i9$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i9$1.MatLabel, selector: "mat-label" }, { kind: "directive", type: i9$1.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: i8$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i8$3.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i12.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i5$2.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "directive", type: i5$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] }); }
8367
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FieldMappingComponent, selector: "app-field-mapping", inputs: { data: "data", config: "config" }, outputs: { onSave: "onSave", onReUpload: "onReUpload" }, ngImport: i0, template: "<div fxLayout=\"column\" class=\"mt-2\">\n <div fxLayout=\"row wrap\" class=\"pb-3\">\n <h5 fxFlex=\"30%\" class=\"primary-color\">Summary</h5>\n <div fxFlex=\"70%\" fxLayoutAlign=\"center center\">\n <h5 class=\"secondary-color\">\n <span class=\"font-weight-bold\">{{data.length}}</span>\n </h5>\n <span class=\"text-muted ml-2\"> Records Found In Uploaded File</span>\n </div>\n </div>\n\n <div>\n <mat-divider></mat-divider>\n </div>\n\n <form [formGroup]=\"importMappingForm\" (ngSubmit)=\"next()\" fxLayout=\"column\" class=\"pt-3\">\n <h5 class=\"primary-color pb-2\">Properties</h5>\n <table style=\"width: 100%;\" class=\"table table-sm table-striped\">\n <tr class=\"table-header-row\">\n <th>Column Headers From File</th>\n <th>Preview Information</th>\n <th>Property</th>\n </tr>\n <ng-container formArrayName=\"fields\">\n <tr *ngFor=\"let field of fieldsArray.controls; let i = index\" [formGroupName]=\"i\">\n <td>{{ field.get('label').value }}</td>\n <td>{{ field.get('value').value }}</td>\n <td>\n <mat-form-field fxFlex=\"100%\" appearance=\"outline\">\n <mat-label>Select Property</mat-label>\n <mat-select placeholder=\"Select Property\" formControlName=\"property\" required\n (selectionChange)=\"updatePropertyType($event, i)\">\n <mat-option *ngFor=\"let property of properties\" [value]=\"property.value\">\n {{property.label}}\n </mat-option>\n </mat-select>\n <mat-error *ngIf=\"isFieldValid('property', fieldsArray.controls[i])\">\n {{getErrorMessage('property', fieldsArray.controls[i])}}\n </mat-error>\n </mat-form-field>\n <button type=\"button\" mat-icon-button (click)=\"removeField(i)\" *ngIf=\"fieldsArray.length > 1\"\n matTooltip=\"Remove column\" matTooltipPosition=\"right\">\n <mat-icon class=\"text-danger\">remove_circle</mat-icon>\n </button>\n </td>\n </tr>\n </ng-container>\n </table>\n\n <div class=\"mt-1 d-flex flex-row gap-2\">\n <button mat-button class=\"mt-2 mr-2\" type=\"button\" (click)=\"location.back()\">\n Cancel\n </button>\n <button mat-stroked-button class=\"mt-2 mr-2 primary-color\" type=\"button\" (click)=\"reUpload()\">\n <mat-icon>\n <span class=\"material-icons-outlined\">\n file_upload\n </span>\n </mat-icon>\n Re-upload\n </button>\n <button mat-stroked-button class=\"mt-2 primary-bg\" type=\"submit\">\n Next\n <mat-icon>\n chevron_right\n </mat-icon>\n </button>\n </div>\n </form>\n</div>", styles: ["table{width:100%}th,td{padding:1%}.table-header-row{background-color:#e6e4e4;color:#000;font-weight:bolder}\n"], dependencies: [{ kind: "directive", type: i2$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1$4.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i1$4.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "directive", type: i7.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i7.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i7.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "component", type: i7$1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i7$1.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i9$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i9$1.MatLabel, selector: "mat-label" }, { kind: "directive", type: i9$1.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: i8$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i8$3.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i12.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i5$2.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "directive", type: i5$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] }); }
8368
8368
  }
8369
8369
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FieldMappingComponent, decorators: [{
8370
8370
  type: Component,
8371
- args: [{ selector: 'app-field-mapping', template: "<div fxLayout=\"column\" class=\"mt-2\">\n <div fxLayout=\"row wrap\" class=\"pb-3\">\n <h5 fxFlex=\"30%\" class=\"primary-color\">Summary</h5>\n <div fxFlex=\"70%\" fxLayoutAlign=\"center center\">\n <h5 class=\"secondary-color\">\n <span class=\"font-weight-bold\">{{data.length}}</span>\n </h5>\n <span class=\"text-muted ml-2\"> Records Found In Uploaded File</span>\n </div>\n </div>\n\n <div>\n <mat-divider></mat-divider>\n </div>\n\n <form [formGroup]=\"importMappingForm\" (ngSubmit)=\"next()\" fxLayout=\"column\" class=\"pt-3\">\n <h5 class=\"primary-color pb-2\">Properties</h5>\n <table style=\"width: 100%;\" class=\"table table-sm table-striped\">\n <tr class=\"table-header-row\">\n <th>Column Headers From File</th>\n <th>Preview Information</th>\n <th>Property</th>\n </tr>\n <ng-container formArrayName=\"fields\">\n <tr *ngFor=\"let field of fieldsArray.controls; let i = index\" [formGroupName]=\"i\">\n <td>{{ field.get('label').value }}</td>\n <td>{{ field.get('value').value }}</td>\n <td>\n <mat-form-field fxFlex=\"100%\" appearance=\"outline\">\n <mat-label>Select Property</mat-label>\n <mat-select placeholder=\"Select Property\" formControlName=\"property\" required\n (selectionChange)=\"updatePropertyType($event, i)\">\n <mat-option *ngFor=\"let property of properties\" [value]=\"property.value\">\n {{property.label}}\n </mat-option>\n </mat-select>\n <mat-error *ngIf=\"isFieldValid('property', fieldsArray.controls[i])\">\n {{getErrorMessage('property', fieldsArray.controls[i])}}\n </mat-error>\n </mat-form-field>\n <button type=\"button\" mat-icon-button (click)=\"removeField(i)\" *ngIf=\"fieldsArray.length > 1\"\n matTooltip=\"Remove column\" matTooltipPosition=\"right\">\n <mat-icon class=\"text-danger\">remove_circle</mat-icon>\n </button>\n </td>\n </tr>\n </ng-container>\n </table>\n\n <div class=\"mt-1\" fxFlex=\"100%\" fxLayoutAlign=\"end\">\n <button mat-button class=\"mt-2 mr-2\" type=\"button\" (click)=\"location.back()\">\n Cancel\n </button>\n <button mat-stroked-button class=\"mt-2 mr-2 primary-color\" type=\"button\" (click)=\"reUpload()\">\n <mat-icon>\n <span class=\"material-icons-outlined\">\n file_upload\n </span>\n </mat-icon>\n Re-upload\n </button>\n <button mat-stroked-button class=\"mt-2 primary-bg text-white\" type=\"submit\">\n Next\n <mat-icon>\n chevron_right\n </mat-icon>\n </button>\n </div>\n </form>\n</div>\n", styles: ["table{width:100%}th,td{padding:1%}.table-header-row{background-color:#e6e4e4;color:#000;font-weight:bolder}\n"] }]
8371
+ args: [{ selector: 'app-field-mapping', template: "<div fxLayout=\"column\" class=\"mt-2\">\n <div fxLayout=\"row wrap\" class=\"pb-3\">\n <h5 fxFlex=\"30%\" class=\"primary-color\">Summary</h5>\n <div fxFlex=\"70%\" fxLayoutAlign=\"center center\">\n <h5 class=\"secondary-color\">\n <span class=\"font-weight-bold\">{{data.length}}</span>\n </h5>\n <span class=\"text-muted ml-2\"> Records Found In Uploaded File</span>\n </div>\n </div>\n\n <div>\n <mat-divider></mat-divider>\n </div>\n\n <form [formGroup]=\"importMappingForm\" (ngSubmit)=\"next()\" fxLayout=\"column\" class=\"pt-3\">\n <h5 class=\"primary-color pb-2\">Properties</h5>\n <table style=\"width: 100%;\" class=\"table table-sm table-striped\">\n <tr class=\"table-header-row\">\n <th>Column Headers From File</th>\n <th>Preview Information</th>\n <th>Property</th>\n </tr>\n <ng-container formArrayName=\"fields\">\n <tr *ngFor=\"let field of fieldsArray.controls; let i = index\" [formGroupName]=\"i\">\n <td>{{ field.get('label').value }}</td>\n <td>{{ field.get('value').value }}</td>\n <td>\n <mat-form-field fxFlex=\"100%\" appearance=\"outline\">\n <mat-label>Select Property</mat-label>\n <mat-select placeholder=\"Select Property\" formControlName=\"property\" required\n (selectionChange)=\"updatePropertyType($event, i)\">\n <mat-option *ngFor=\"let property of properties\" [value]=\"property.value\">\n {{property.label}}\n </mat-option>\n </mat-select>\n <mat-error *ngIf=\"isFieldValid('property', fieldsArray.controls[i])\">\n {{getErrorMessage('property', fieldsArray.controls[i])}}\n </mat-error>\n </mat-form-field>\n <button type=\"button\" mat-icon-button (click)=\"removeField(i)\" *ngIf=\"fieldsArray.length > 1\"\n matTooltip=\"Remove column\" matTooltipPosition=\"right\">\n <mat-icon class=\"text-danger\">remove_circle</mat-icon>\n </button>\n </td>\n </tr>\n </ng-container>\n </table>\n\n <div class=\"mt-1 d-flex flex-row gap-2\">\n <button mat-button class=\"mt-2 mr-2\" type=\"button\" (click)=\"location.back()\">\n Cancel\n </button>\n <button mat-stroked-button class=\"mt-2 mr-2 primary-color\" type=\"button\" (click)=\"reUpload()\">\n <mat-icon>\n <span class=\"material-icons-outlined\">\n file_upload\n </span>\n </mat-icon>\n Re-upload\n </button>\n <button mat-stroked-button class=\"mt-2 primary-bg\" type=\"submit\">\n Next\n <mat-icon>\n chevron_right\n </mat-icon>\n </button>\n </div>\n </form>\n</div>", styles: ["table{width:100%}th,td{padding:1%}.table-header-row{background-color:#e6e4e4;color:#000;font-weight:bolder}\n"] }]
8372
8372
  }], ctorParameters: () => [{ type: i1$4.UntypedFormBuilder }, { type: FormValidatorService }, { type: i0.ChangeDetectorRef }, { type: i2$1.Location }], propDecorators: { data: [{
8373
8373
  type: Input
8374
8374
  }], config: [{
@@ -8497,13 +8497,11 @@ let ImportCsvComponent = class ImportCsvComponent {
8497
8497
  return this.importSteps.find(step => step.id == this.currentStep);
8498
8498
  }
8499
8499
  async fileChanged(event) {
8500
- this.currentStep = 2;
8501
- this.filesList = event;
8502
8500
  let selectedFile = null;
8503
8501
  let jsonData = null;
8504
8502
  const reader = new FileReader();
8505
- const file = this.filesList[0];
8506
- reader.onload = (event) => {
8503
+ const file = event[0];
8504
+ reader.onload = () => {
8507
8505
  const data = reader.result;
8508
8506
  selectedFile = XLSX.read(data, {
8509
8507
  type: 'binary',
@@ -8518,9 +8516,15 @@ let ImportCsvComponent = class ImportCsvComponent {
8518
8516
  return initial;
8519
8517
  }, {});
8520
8518
  this.fileData = jsonData;
8519
+ if (this.fileData.length === 0) {
8520
+ this.reUpload();
8521
+ this.alertService.addAlert('CSV file is empty', 'error');
8522
+ return;
8523
+ }
8524
+ this.filesList = event;
8525
+ this.currentStep = 2;
8521
8526
  };
8522
8527
  reader.readAsBinaryString(file);
8523
- return;
8524
8528
  }
8525
8529
  mappingProcessed(event) {
8526
8530
  this.currentStep = 3;