ngx-iso-form 2.0.1 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWlzby1mb3JtL3NyYy9saWIvTW9kZWxzL1NjaGVtYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNjaGVtYUVsZW1lbnQge1xyXG4gICAgaWQ6IHN0cmluZztcclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIGRhdGFUeXBlOiBzdHJpbmc7XHJcbiAgICBtaW5PY2N1cnM6IHN0cmluZztcclxuICAgIG1heE9jY3Vyczogc3RyaW5nO1xyXG4gICAgbWluTGVuZ3RoOiBzdHJpbmc7XHJcbiAgICBtYXhMZW5ndGg6IHN0cmluZztcclxuICAgIHBhdHRlcm46IHN0cmluZztcclxuICAgIGZyYWN0aW9uRGlnaXRzOiBzdHJpbmc7XHJcbiAgICB0b3RhbERpZ2l0czogc3RyaW5nO1xyXG4gICAgbWluSW5jbHVzaXZlOiBzdHJpbmc7XHJcbiAgICBtYXhJbmNsdXNpdmU6IHN0cmluZztcclxuICAgIHZhbHVlczogc3RyaW5nW107XHJcbiAgICBpc0N1cnJlbmN5OiBib29sZWFuO1xyXG4gICAgeHBhdGg6IHN0cmluZztcclxuICAgIGVsZW1lbnRzOiBTY2hlbWFFbGVtZW50W107XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU2NoZW1hTW9kZWwgZXh0ZW5kcyBTY2hlbWFFbGVtZW50e1xyXG4gICAgdW5pcXVlSWQ/OnN0cmluZztcclxuICAgIGhpZGRlbj86IGJvb2xlYW47XHJcbiAgICB2YWx1ZT86c3RyaW5nO1xyXG4gICAgbXVsdGk/OnN0cmluZztcclxuICAgIGlzRm9ybUNvbnRyb2xzPzpib29sZWFuO1xyXG4gICAgY2hpbGRyZW4/OiBTY2hlbWFNb2RlbFtdO1xyXG4gICAgY2hvaWNlRm9ybUNvbnRyb2w/OiBBYnN0cmFjdENvbnRyb2w8YW55LGFueT47XHJcbn0iXX0=
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWlzby1mb3JtL3NyYy9saWIvTW9kZWxzL1NjaGVtYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNjaGVtYUVsZW1lbnQge1xyXG4gICAgaWQ6IHN0cmluZztcclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIGRhdGFUeXBlOiBzdHJpbmc7XHJcbiAgICBtaW5PY2N1cnM6IHN0cmluZztcclxuICAgIG1heE9jY3Vyczogc3RyaW5nO1xyXG4gICAgbWluTGVuZ3RoOiBzdHJpbmc7XHJcbiAgICBtYXhMZW5ndGg6IHN0cmluZztcclxuICAgIHBhdHRlcm46IHN0cmluZztcclxuICAgIGZyYWN0aW9uRGlnaXRzOiBzdHJpbmc7XHJcbiAgICB0b3RhbERpZ2l0czogc3RyaW5nO1xyXG4gICAgbWluSW5jbHVzaXZlOiBzdHJpbmc7XHJcbiAgICBtYXhJbmNsdXNpdmU6IHN0cmluZztcclxuICAgIHZhbHVlczogc3RyaW5nW107XHJcbiAgICBpc0N1cnJlbmN5OiBib29sZWFuO1xyXG4gICAgeHBhdGg6IHN0cmluZztcclxuICAgIGVsZW1lbnRzOiBTY2hlbWFFbGVtZW50W107XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU2NoZW1hTW9kZWwgZXh0ZW5kcyBTY2hlbWFFbGVtZW50e1xyXG4gICAgdW5pcXVlSWQ/OnN0cmluZztcclxuICAgIGhpZGRlbj86IGJvb2xlYW47XHJcbiAgICB2YWx1ZT86c3RyaW5nO1xyXG4gICAgbXVsdGk/OnN0cmluZztcclxuICAgIGlzRm9ybUNvbnRyb2xzPzpib29sZWFuO1xyXG4gICAgY2hpbGRyZW4/OiBTY2hlbWFNb2RlbFtdO1xyXG4gICAgY2hvaWNlS2V5Pzogc3RyaW5nO1xyXG59Il19
@@ -36,7 +36,9 @@ export class NgxIsoFormComponent {
36
36
  this.service._formModel = [this.structuredClone(this.schema)];
37
37
  this.service._formModel[0].elements = [];
38
38
  let group = {};
39
- group[this.schema.id] = this.service.getFormGroupControls(this.schema.elements, this.service._formModel[0].elements);
39
+ const schemaElements = this.schema.elements.length > 0 ? this.structuredClone(this.schema.elements) : this.schema.elements;
40
+ const formElements = this.service._formModel[0].elements.length > 0 ? this.structuredClone(this.service._formModel[0].elements) : this.service._formModel[0].elements;
41
+ group[this.schema.id] = this.service.getFormGroupControls(schemaElements, formElements);
40
42
  this._form = new FormGroup(group);
41
43
  if (!this._isFormInitiate) {
42
44
  this.initiateFormModel();
@@ -48,7 +50,6 @@ export class NgxIsoFormComponent {
48
50
  cloneData = structuredClone(data);
49
51
  }
50
52
  catch (e) {
51
- debugger;
52
53
  cloneData = JSON.parse(JSON.stringify(data));
53
54
  }
54
55
  return cloneData;
@@ -168,12 +169,17 @@ export class NgxIsoFormComponent {
168
169
  debugger;
169
170
  return this.service.getFormControl('');
170
171
  }
172
+ getChoiceFormControl(choiceKey) {
173
+ const formControl = this.service.getFormControl('');
174
+ formControl.setValue(choiceKey);
175
+ return formControl;
176
+ }
171
177
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: NgxIsoFormComponent, deps: [{ token: i1.NgxIsoService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
172
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.2", type: NgxIsoFormComponent, selector: "ngx-iso-form", inputs: { form: "form", schema: "schema" }, usesOnChanges: true, ngImport: i0, template: "<form *ngIf=\"_form && schema\" [formGroup]=\"_form\">\r\n <div class=\"form-group\">\r\n <ng-template #nodeTemplateRef let-node=\"node\" let-formElement=\"formElement\" let-index=\"index\"\r\n let-parentNode=\"parentNode\" let-parentFormElement=\"parentFormElement\">\r\n <ng-container *ngIf=\"node.multi then arr else obj\"></ng-container>\r\n <ng-template #arr>\r\n <ng-template *ngFor=\"let model of node.elements;let i = index\" [ngTemplateOutlet]=\"nodeTemplateRef\"\r\n [ngTemplateOutletContext]=\"{\r\n node: model,\r\n formElement: formElement,\r\n parentFormElement: parentFormElement,\r\n parentNode: node,\r\n index: i\r\n }\">\r\n </ng-template>\r\n </ng-template>\r\n <ng-template #obj>\r\n <ng-container *ngIf=\"node.elements.length\">\r\n <mat-accordion [formGroup]=\"formElement\" *ngIf=\"!node.hidden\">\r\n <mat-expansion-panel multi [expanded]=\"expand(node.minOccurs)\" #expan>\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n {{ node.name | trans: node.id : node.name }}\r\n </mat-panel-title>\r\n <mat-panel-description *ngIf=\"maxOccurs(node.maxOccurs)\">\r\n &nbsp;\r\n <button *ngIf=\"index < 1\" mat-icon-button (click)=\"addSection($event, node,parentNode, parentFormElement)\">\r\n <mat-icon>add</mat-icon>\r\n </button>\r\n <button *ngIf=\"index > 0\" mat-icon-button (click)=\"removeSection($event,parentNode,parentFormElement,index)\">\r\n <mat-icon>remove</mat-icon>\r\n </button>\r\n </mat-panel-description>\r\n </mat-expansion-panel-header>\r\n <ng-container *ngIf=\"expan.expanded\">\r\n <mat-form-field *ngIf=\"node.dataType === 'choice'\">\r\n <mat-label>{{ node.name | trans: node.id : node.name }}</mat-label>\r\n <mat-select (selectionChange)=\"onChoiceSelectionChange($event.value,formElement, node)\" [formControl]=\"node.choiceFormControl\">\r\n <mat-option *ngFor=\"let item of node.elements\" [value]=\"item.id\">\r\n {{item.name}}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <ng-container *ngIf=\"!isEmpty(formElement)\">\r\n <ng-template *ngFor=\"let model of node.elements; let i = index\" [ngTemplateOutlet]=\"nodeTemplateRef\"\r\n [ngTemplateOutletContext]=\"{\r\n node: model,\r\n formElement: getElement(formElement,model),\r\n parentFormElement: formElement\r\n }\">\r\n </ng-template>\r\n </ng-container>\r\n <div *ngIf=\"node.elements.length === 0\">\r\n <ngx-iso-control *ngIf=\"!node.hidden\" [formControl]=\"formElement\" [control]=\"node\"></ngx-iso-control>\r\n </div>\r\n </ng-container>\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n </ng-container>\r\n <ng-container *ngIf=\"!node.elements.length && !node.hidden\">\r\n <div *ngIf=\"maxOccurs(node.maxOccurs)\" class=\"form-add-section\">\r\n &nbsp;\r\n <button *ngIf=\"index < 1\" mat-icon-button (click)=\"addNewControl($event, node,parentNode,parentFormElement)\">\r\n <mat-icon>add</mat-icon>\r\n </button>\r\n <button *ngIf=\"index > 0\" mat-icon-button (click)=\"removeNewControl($event,parentNode,parentFormElement,index)\">\r\n <mat-icon>remove</mat-icon>\r\n </button>\r\n </div>\r\n <ngx-iso-control [formControl]=\"formElement\" [control]=\"node\"></ngx-iso-control>\r\n </ng-container>\r\n </ng-template>\r\n </ng-template>\r\n <ng-container *ngFor=\"let model of getFormModel; let i = index\">\r\n <ng-container *ngIf=\"isArray(model);then formArray else formObject\">\r\n </ng-container>\r\n <ng-template #formArray>\r\n <ng-template *ngFor=\"let key of model;let i = index\" [ngTemplateOutlet]=\"nodeTemplateRef\"\r\n [ngTemplateOutletContext]=\"{\r\n node: key,\r\n formElement: getElement(_form,key),\r\n parentFormElement: _form,\r\n index:i\r\n }\">\r\n </ng-template>\r\n </ng-template>\r\n <ng-template #formObject>\r\n <ng-template [ngTemplateOutlet]=\"nodeTemplateRef\" [ngTemplateOutletContext]=\"{\r\n node: model,\r\n formElement: getElement(_form,model),\r\n parentFormElement: _form,\r\n index: i,\r\n }\">\r\n </ng-template>\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n</form>", styles: [":host .mat-expansion-panel-header-description{justify-content:space-between;align-items:center}:host .mat-expansion-panel{width:100%;margin:5px 0}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.MatAccordion, selector: "mat-accordion", inputs: ["multi", "hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: i4.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["disabled", "expanded", "hideToggle", "togglePosition"], outputs: ["opened", "closed", "expandedChange", "afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i4.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["tabIndex", "expandedHeight", "collapsedHeight"] }, { kind: "directive", type: i4.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "directive", type: i4.MatExpansionPanelDescription, selector: "mat-panel-description" }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "component", type: i6.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i7.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "panelWidth", "hideSingleSelectionIndicator"], exportAs: ["matSelect"] }, { kind: "component", type: i8.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i10.NgxIsoControlComponent, selector: "ngx-iso-control", inputs: ["formControl", "control"] }, { kind: "pipe", type: i11.IsoTranslatePipe, name: "trans" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
178
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.2", type: NgxIsoFormComponent, selector: "ngx-iso-form", inputs: { form: "form", schema: "schema" }, usesOnChanges: true, ngImport: i0, template: "<form *ngIf=\"_form && schema\" [formGroup]=\"_form\">\r\n <div class=\"form-group\">\r\n <ng-template #nodeTemplateRef let-node=\"node\" let-formElement=\"formElement\" let-index=\"index\"\r\n let-parentNode=\"parentNode\" let-parentFormElement=\"parentFormElement\">\r\n <ng-container *ngIf=\"node.multi then arr else obj\"></ng-container>\r\n <ng-template #arr>\r\n <ng-template *ngFor=\"let model of node.elements;let i = index\" [ngTemplateOutlet]=\"nodeTemplateRef\"\r\n [ngTemplateOutletContext]=\"{\r\n node: model,\r\n formElement: formElement,\r\n parentFormElement: parentFormElement,\r\n parentNode: node,\r\n index: i\r\n }\">\r\n </ng-template>\r\n </ng-template>\r\n <ng-template #obj>\r\n <ng-container *ngIf=\"node.elements.length\">\r\n <mat-accordion [formGroup]=\"formElement\" *ngIf=\"!node.hidden\">\r\n <mat-expansion-panel multi [expanded]=\"expand(node.minOccurs)\" #expan>\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n {{ node.name | trans: node.id : node.name }}\r\n </mat-panel-title>\r\n <mat-panel-description *ngIf=\"maxOccurs(node.maxOccurs)\">\r\n &nbsp;\r\n <button *ngIf=\"index < 1\" mat-icon-button (click)=\"addSection($event, node,parentNode, parentFormElement)\">\r\n <mat-icon>add</mat-icon>\r\n </button>\r\n <button *ngIf=\"index > 0\" mat-icon-button (click)=\"removeSection($event,parentNode,parentFormElement,index)\">\r\n <mat-icon>remove</mat-icon>\r\n </button>\r\n </mat-panel-description>\r\n </mat-expansion-panel-header>\r\n <ng-container *ngIf=\"expan.expanded\">\r\n <mat-form-field *ngIf=\"node.dataType === 'choice'\">\r\n <mat-label>{{ node.name | trans: node.id : node.name }}</mat-label>\r\n <mat-select (selectionChange)=\"onChoiceSelectionChange($event.value,formElement, node)\" [formControl]=\"getChoiceFormControl(node.choiceKey)\">\r\n <mat-option *ngFor=\"let item of node.elements\" [value]=\"item.id\">\r\n {{item.name}}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <ng-container *ngIf=\"!isEmpty(formElement)\">\r\n <ng-template *ngFor=\"let model of node.elements; let i = index\" [ngTemplateOutlet]=\"nodeTemplateRef\"\r\n [ngTemplateOutletContext]=\"{\r\n node: model,\r\n formElement: getElement(formElement,model),\r\n parentFormElement: formElement\r\n }\">\r\n </ng-template>\r\n </ng-container>\r\n <div *ngIf=\"node.elements.length === 0\">\r\n <ngx-iso-control *ngIf=\"!node.hidden\" [formControl]=\"formElement\" [control]=\"node\"></ngx-iso-control>\r\n </div>\r\n </ng-container>\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n </ng-container>\r\n <ng-container *ngIf=\"!node.elements.length && !node.hidden\">\r\n <div *ngIf=\"maxOccurs(node.maxOccurs)\" class=\"form-add-section\">\r\n &nbsp;\r\n <button *ngIf=\"index < 1\" mat-icon-button (click)=\"addNewControl($event, node,parentNode,parentFormElement)\">\r\n <mat-icon>add</mat-icon>\r\n </button>\r\n <button *ngIf=\"index > 0\" mat-icon-button (click)=\"removeNewControl($event,parentNode,parentFormElement,index)\">\r\n <mat-icon>remove</mat-icon>\r\n </button>\r\n </div>\r\n <ngx-iso-control [formControl]=\"formElement\" [control]=\"node\"></ngx-iso-control>\r\n </ng-container>\r\n </ng-template>\r\n </ng-template>\r\n <ng-container *ngFor=\"let model of getFormModel; let i = index\">\r\n <ng-container *ngIf=\"isArray(model);then formArray else formObject\">\r\n </ng-container>\r\n <ng-template #formArray>\r\n <ng-template *ngFor=\"let key of model;let i = index\" [ngTemplateOutlet]=\"nodeTemplateRef\"\r\n [ngTemplateOutletContext]=\"{\r\n node: key,\r\n formElement: getElement(_form,key),\r\n parentFormElement: _form,\r\n index:i\r\n }\">\r\n </ng-template>\r\n </ng-template>\r\n <ng-template #formObject>\r\n <ng-template [ngTemplateOutlet]=\"nodeTemplateRef\" [ngTemplateOutletContext]=\"{\r\n node: model,\r\n formElement: getElement(_form,model),\r\n parentFormElement: _form,\r\n index: i,\r\n }\">\r\n </ng-template>\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n</form>", styles: [":host .mat-expansion-panel-header-description{justify-content:space-between;align-items:center}:host .mat-expansion-panel{width:100%;margin:5px 0}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.MatAccordion, selector: "mat-accordion", inputs: ["multi", "hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: i4.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["disabled", "expanded", "hideToggle", "togglePosition"], outputs: ["opened", "closed", "expandedChange", "afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i4.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["tabIndex", "expandedHeight", "collapsedHeight"] }, { kind: "directive", type: i4.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "directive", type: i4.MatExpansionPanelDescription, selector: "mat-panel-description" }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "component", type: i6.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i7.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "panelWidth", "hideSingleSelectionIndicator"], exportAs: ["matSelect"] }, { kind: "component", type: i8.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i10.NgxIsoControlComponent, selector: "ngx-iso-control", inputs: ["formControl", "control"] }, { kind: "pipe", type: i11.IsoTranslatePipe, name: "trans" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
173
179
  }
174
180
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: NgxIsoFormComponent, decorators: [{
175
181
  type: Component,
176
- args: [{ selector: 'ngx-iso-form', changeDetection: ChangeDetectionStrategy.OnPush, template: "<form *ngIf=\"_form && schema\" [formGroup]=\"_form\">\r\n <div class=\"form-group\">\r\n <ng-template #nodeTemplateRef let-node=\"node\" let-formElement=\"formElement\" let-index=\"index\"\r\n let-parentNode=\"parentNode\" let-parentFormElement=\"parentFormElement\">\r\n <ng-container *ngIf=\"node.multi then arr else obj\"></ng-container>\r\n <ng-template #arr>\r\n <ng-template *ngFor=\"let model of node.elements;let i = index\" [ngTemplateOutlet]=\"nodeTemplateRef\"\r\n [ngTemplateOutletContext]=\"{\r\n node: model,\r\n formElement: formElement,\r\n parentFormElement: parentFormElement,\r\n parentNode: node,\r\n index: i\r\n }\">\r\n </ng-template>\r\n </ng-template>\r\n <ng-template #obj>\r\n <ng-container *ngIf=\"node.elements.length\">\r\n <mat-accordion [formGroup]=\"formElement\" *ngIf=\"!node.hidden\">\r\n <mat-expansion-panel multi [expanded]=\"expand(node.minOccurs)\" #expan>\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n {{ node.name | trans: node.id : node.name }}\r\n </mat-panel-title>\r\n <mat-panel-description *ngIf=\"maxOccurs(node.maxOccurs)\">\r\n &nbsp;\r\n <button *ngIf=\"index < 1\" mat-icon-button (click)=\"addSection($event, node,parentNode, parentFormElement)\">\r\n <mat-icon>add</mat-icon>\r\n </button>\r\n <button *ngIf=\"index > 0\" mat-icon-button (click)=\"removeSection($event,parentNode,parentFormElement,index)\">\r\n <mat-icon>remove</mat-icon>\r\n </button>\r\n </mat-panel-description>\r\n </mat-expansion-panel-header>\r\n <ng-container *ngIf=\"expan.expanded\">\r\n <mat-form-field *ngIf=\"node.dataType === 'choice'\">\r\n <mat-label>{{ node.name | trans: node.id : node.name }}</mat-label>\r\n <mat-select (selectionChange)=\"onChoiceSelectionChange($event.value,formElement, node)\" [formControl]=\"node.choiceFormControl\">\r\n <mat-option *ngFor=\"let item of node.elements\" [value]=\"item.id\">\r\n {{item.name}}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <ng-container *ngIf=\"!isEmpty(formElement)\">\r\n <ng-template *ngFor=\"let model of node.elements; let i = index\" [ngTemplateOutlet]=\"nodeTemplateRef\"\r\n [ngTemplateOutletContext]=\"{\r\n node: model,\r\n formElement: getElement(formElement,model),\r\n parentFormElement: formElement\r\n }\">\r\n </ng-template>\r\n </ng-container>\r\n <div *ngIf=\"node.elements.length === 0\">\r\n <ngx-iso-control *ngIf=\"!node.hidden\" [formControl]=\"formElement\" [control]=\"node\"></ngx-iso-control>\r\n </div>\r\n </ng-container>\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n </ng-container>\r\n <ng-container *ngIf=\"!node.elements.length && !node.hidden\">\r\n <div *ngIf=\"maxOccurs(node.maxOccurs)\" class=\"form-add-section\">\r\n &nbsp;\r\n <button *ngIf=\"index < 1\" mat-icon-button (click)=\"addNewControl($event, node,parentNode,parentFormElement)\">\r\n <mat-icon>add</mat-icon>\r\n </button>\r\n <button *ngIf=\"index > 0\" mat-icon-button (click)=\"removeNewControl($event,parentNode,parentFormElement,index)\">\r\n <mat-icon>remove</mat-icon>\r\n </button>\r\n </div>\r\n <ngx-iso-control [formControl]=\"formElement\" [control]=\"node\"></ngx-iso-control>\r\n </ng-container>\r\n </ng-template>\r\n </ng-template>\r\n <ng-container *ngFor=\"let model of getFormModel; let i = index\">\r\n <ng-container *ngIf=\"isArray(model);then formArray else formObject\">\r\n </ng-container>\r\n <ng-template #formArray>\r\n <ng-template *ngFor=\"let key of model;let i = index\" [ngTemplateOutlet]=\"nodeTemplateRef\"\r\n [ngTemplateOutletContext]=\"{\r\n node: key,\r\n formElement: getElement(_form,key),\r\n parentFormElement: _form,\r\n index:i\r\n }\">\r\n </ng-template>\r\n </ng-template>\r\n <ng-template #formObject>\r\n <ng-template [ngTemplateOutlet]=\"nodeTemplateRef\" [ngTemplateOutletContext]=\"{\r\n node: model,\r\n formElement: getElement(_form,model),\r\n parentFormElement: _form,\r\n index: i,\r\n }\">\r\n </ng-template>\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n</form>", styles: [":host .mat-expansion-panel-header-description{justify-content:space-between;align-items:center}:host .mat-expansion-panel{width:100%;margin:5px 0}\n"] }]
182
+ args: [{ selector: 'ngx-iso-form', changeDetection: ChangeDetectionStrategy.OnPush, template: "<form *ngIf=\"_form && schema\" [formGroup]=\"_form\">\r\n <div class=\"form-group\">\r\n <ng-template #nodeTemplateRef let-node=\"node\" let-formElement=\"formElement\" let-index=\"index\"\r\n let-parentNode=\"parentNode\" let-parentFormElement=\"parentFormElement\">\r\n <ng-container *ngIf=\"node.multi then arr else obj\"></ng-container>\r\n <ng-template #arr>\r\n <ng-template *ngFor=\"let model of node.elements;let i = index\" [ngTemplateOutlet]=\"nodeTemplateRef\"\r\n [ngTemplateOutletContext]=\"{\r\n node: model,\r\n formElement: formElement,\r\n parentFormElement: parentFormElement,\r\n parentNode: node,\r\n index: i\r\n }\">\r\n </ng-template>\r\n </ng-template>\r\n <ng-template #obj>\r\n <ng-container *ngIf=\"node.elements.length\">\r\n <mat-accordion [formGroup]=\"formElement\" *ngIf=\"!node.hidden\">\r\n <mat-expansion-panel multi [expanded]=\"expand(node.minOccurs)\" #expan>\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n {{ node.name | trans: node.id : node.name }}\r\n </mat-panel-title>\r\n <mat-panel-description *ngIf=\"maxOccurs(node.maxOccurs)\">\r\n &nbsp;\r\n <button *ngIf=\"index < 1\" mat-icon-button (click)=\"addSection($event, node,parentNode, parentFormElement)\">\r\n <mat-icon>add</mat-icon>\r\n </button>\r\n <button *ngIf=\"index > 0\" mat-icon-button (click)=\"removeSection($event,parentNode,parentFormElement,index)\">\r\n <mat-icon>remove</mat-icon>\r\n </button>\r\n </mat-panel-description>\r\n </mat-expansion-panel-header>\r\n <ng-container *ngIf=\"expan.expanded\">\r\n <mat-form-field *ngIf=\"node.dataType === 'choice'\">\r\n <mat-label>{{ node.name | trans: node.id : node.name }}</mat-label>\r\n <mat-select (selectionChange)=\"onChoiceSelectionChange($event.value,formElement, node)\" [formControl]=\"getChoiceFormControl(node.choiceKey)\">\r\n <mat-option *ngFor=\"let item of node.elements\" [value]=\"item.id\">\r\n {{item.name}}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <ng-container *ngIf=\"!isEmpty(formElement)\">\r\n <ng-template *ngFor=\"let model of node.elements; let i = index\" [ngTemplateOutlet]=\"nodeTemplateRef\"\r\n [ngTemplateOutletContext]=\"{\r\n node: model,\r\n formElement: getElement(formElement,model),\r\n parentFormElement: formElement\r\n }\">\r\n </ng-template>\r\n </ng-container>\r\n <div *ngIf=\"node.elements.length === 0\">\r\n <ngx-iso-control *ngIf=\"!node.hidden\" [formControl]=\"formElement\" [control]=\"node\"></ngx-iso-control>\r\n </div>\r\n </ng-container>\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n </ng-container>\r\n <ng-container *ngIf=\"!node.elements.length && !node.hidden\">\r\n <div *ngIf=\"maxOccurs(node.maxOccurs)\" class=\"form-add-section\">\r\n &nbsp;\r\n <button *ngIf=\"index < 1\" mat-icon-button (click)=\"addNewControl($event, node,parentNode,parentFormElement)\">\r\n <mat-icon>add</mat-icon>\r\n </button>\r\n <button *ngIf=\"index > 0\" mat-icon-button (click)=\"removeNewControl($event,parentNode,parentFormElement,index)\">\r\n <mat-icon>remove</mat-icon>\r\n </button>\r\n </div>\r\n <ngx-iso-control [formControl]=\"formElement\" [control]=\"node\"></ngx-iso-control>\r\n </ng-container>\r\n </ng-template>\r\n </ng-template>\r\n <ng-container *ngFor=\"let model of getFormModel; let i = index\">\r\n <ng-container *ngIf=\"isArray(model);then formArray else formObject\">\r\n </ng-container>\r\n <ng-template #formArray>\r\n <ng-template *ngFor=\"let key of model;let i = index\" [ngTemplateOutlet]=\"nodeTemplateRef\"\r\n [ngTemplateOutletContext]=\"{\r\n node: key,\r\n formElement: getElement(_form,key),\r\n parentFormElement: _form,\r\n index:i\r\n }\">\r\n </ng-template>\r\n </ng-template>\r\n <ng-template #formObject>\r\n <ng-template [ngTemplateOutlet]=\"nodeTemplateRef\" [ngTemplateOutletContext]=\"{\r\n node: model,\r\n formElement: getElement(_form,model),\r\n parentFormElement: _form,\r\n index: i,\r\n }\">\r\n </ng-template>\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n</form>", styles: [":host .mat-expansion-panel-header-description{justify-content:space-between;align-items:center}:host .mat-expansion-panel{width:100%;margin:5px 0}\n"] }]
177
183
  }], ctorParameters: function () { return [{ type: i1.NgxIsoService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { form: [{
178
184
  type: Input,
179
185
  args: [{ required: true }]
@@ -181,4 +187,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.2", ngImpor
181
187
  type: Input,
182
188
  args: [{ required: true }]
183
189
  }] } });
184
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWlzby1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1pc28tZm9ybS9zcmMvbGliL25neC1pc28tZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtaXNvLWZvcm0vc3JjL2xpYi9uZ3gtaXNvLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsS0FBSyxFQUdOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxTQUFTLEVBQ1QsV0FBVyxFQUNYLFNBQVMsRUFFVixNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7O0FBWXhCLE1BQU0sT0FBTyxtQkFBbUI7SUFPOUIsWUFBb0IsT0FBc0IsRUFBVSxlQUFrQztRQUFsRSxZQUFPLEdBQVAsT0FBTyxDQUFlO1FBQVUsb0JBQWUsR0FBZixlQUFlLENBQW1CO0lBQ3RGLENBQUM7SUFFTSxXQUFXLENBQUMsT0FBc0I7UUFDdkMsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFlBQVksRUFBRTtZQUN2RCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDckI7UUFDRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsWUFBWSxFQUFFO1lBQ25ELElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1NBQzFCO0lBQ0gsQ0FBQztJQUVELElBQVcsVUFBVTtRQUNuQixJQUFJLElBQUksQ0FBQyxLQUFLO1lBQ1osT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxJQUFjLFlBQVk7UUFDeEIsT0FBTyxJQUFJ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dGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBTaW1wbGVDaGFuZ2VzXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgRm9ybUdyb3VwLFxuICBGb3JtQ29udHJvbCxcbiAgRm9ybUFycmF5LFxuICBBYnN0cmFjdENvbnRyb2xcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBTY2hlbWFNb2RlbCB9IGZyb20gJy4vTW9kZWxzL1NjaGVtYSc7XG5pbXBvcnQgeyBOZ3hJc29TZXJ2aWNlIH0gZnJvbSAnLi9uZ3gtaXNvLWZvcm0uc2VydmljZSc7XG5pbXBvcnQgeyBJc29Gb3JtIH0gZnJvbSAnLi9Nb2RlbHMvSXNvRm9ybSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25neC1pc28tZm9ybScsXG4gIHRlbXBsYXRlVXJsOiAnLi9uZ3gtaXNvLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9uZ3gtaXNvLWZvcm0uY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgTmd4SXNvRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIGZvcm06IElzb0Zvcm07XG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIHNjaGVtYTogU2NoZW1hTW9kZWw7XG4gIHByb3RlY3RlZCBfZm9ybTogRm9ybUdyb3VwO1xuICBwcml2YXRlIF9pc0Zvcm1Jbml0aWF0ZTogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfbmdNb2RlbDogYW55O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc2VydmljZTogTmd4SXNvU2VydmljZSwgcHJpdmF0ZSBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdG9yUmVmKSB7XG4gIH1cblxuICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydzY2hlbWEnXSAmJiBjaGFuZ2VzWydzY2hlbWEnXS5jdXJyZW50VmFsdWUpIHtcbiAgICAgIHRoaXMuaW5pdGlhdGVGb3JtKCk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWydmb3JtJ10gJiYgY2hhbmdlc1snZm9ybSddLmN1cnJlbnRWYWx1ZSkge1xuICAgICAgdGhpcy5pbml0aWF0ZUZvcm1Nb2RlbCgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgZ2V0SXNvRm9ybSgpOiBhbnkge1xuICAgIGlmICh0aGlzLl9mb3JtKVxuICAgICAgcmV0dXJuIHRoaXMuc2VydmljZS5zYW5pdGl6ZSh0aGlzLl9mb3JtLnZhbHVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgZ2V0Rm9ybU1vZGVsKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5zZXJ2aWNlLl9mb3JtTW9kZWw7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYXRlRm9ybSgpOiB2b2lkIHtcbiAgICB0aGlzLnNlcnZpY2UuX2Zvcm1Nb2RlbCA9IFt0aGlzLnN0cnVjdHVyZWRDbG9uZSh0aGlzLnNjaGVtYSldO1xuICAgIHRoaXMuc2VydmljZS5fZm9ybU1vZGVsWzBdLmVsZW1lbnRzID0gW107XG4gICAgbGV0IGdyb3VwOiBhbnkgPSB7fTtcbiAgICBncm91cFt0aGlzLnNjaGVtYS5pZF0gPSB0aGlzLnNlcnZpY2UuZ2V0Rm9ybUdyb3VwQ29udHJvbHModGhpcy5zY2hlbWEuZWxlbWVudHMsIHRoaXMuc2VydmljZS5fZm9ybU1vZGVsWzBdLmVsZW1lbnRzKTtcbiAgICB0aGlzLl9mb3JtID0gbmV3IEZvcm1Hcm91cChncm91cCk7XG4gICAgaWYgKCF0aGlzLl9pc0Zvcm1Jbml0aWF0ZSkge1xuICAgICAgdGhpcy5pbml0aWF0ZUZvcm1Nb2RlbCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RydWN0dXJlZENsb25lKGRhdGE6IGFueSk6IGFueSB7XG4gICAgbGV0IGNsb25lRGF0YTtcbiAgICB0cnkge1xuICAgICAgY2xvbmVEYXRhID0gc3RydWN0dXJlZENsb25lKGRhdGEpO1xuICAgIH0gY2F0Y2goZSkge1xuICAgICAgZGVidWdnZXJcbiAgICAgIGNsb25lRGF0YSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xuICAgIH1cbiAgICByZXR1cm4gY2xvbmVEYXRhO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWF0ZUZvcm1Nb2RlbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZm9ybSkge1xuICAgICAgdGhpcy5fbmdNb2RlbCA9IHRoaXMuZm9ybS5fbW9kZWw7XG4gICAgICB0aGlzLmZvcm0uZ2V0Rm9ybU1vZGVsID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRJc29Gb3JtO1xuICAgICAgfTtcbiAgICAgIHRoaXMuX2lzRm9ybUluaXRpYXRlID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2VydmljZS5pbml0Rm9ybU1vZGVsKHRoaXMuX25nTW9kZWwsIHRoaXMuX2Zvcm0pO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBvbkNob2ljZVNlbGVjdGlvbkNoYW5nZShpZDogc3RyaW5nLCBmb3JtRWxlbWVudDogYW55LCBub2RlczogU2NoZW1hTW9kZWwpOiB2b2lkIHtcbiAgICBub2Rlcy5lbGVtZW50cy5mb3JFYWNoKChlbGVtZW50OiBTY2hlbWFNb2RlbCkgPT4ge1xuICAgICAgZWxlbWVudC5oaWRkZW4gPSB0cnVlO1xuICAgICAgZm9ybUVsZW1lbnQucmVtb3ZlQ29udHJvbChlbGVtZW50LmlkKTtcbiAgICAgIGlmIChlbGVtZW50LmlkID09PSBpZCkge1xuICAgICAgICBlbGVtZW50LmhpZGRlbiA9IGZhbHNlO1xuICAgICAgICBpZiAoZWxlbWVudC5lbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICBjb25zdCBncm91cCA9IHRoaXMuc2VydmljZS5nZXRGb3JtR3JvdXBDb250cm9scyhlbGVtZW50LmVsZW1lbnRzLCBbXSwgMCwgdHJ1ZSk7XG4gICAgICAgICAgZm9ybUVsZW1lbnQuYWRkQ29udHJvbChlbGVtZW50LmlkLCBncm91cCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuc2VydmljZS5nZXRGb3JtQ29udHJvbCgnJyk7XG4gICAgICAgICAgZm9ybUVsZW1lbnQuYWRkQ29udHJvbChlbGVtZW50LmlkLCBjb250cm9sKTtcbiAgICAgICAgfVxuXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgbWF4T2NjdXJzKG1heE9jY3Vyczogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG1heE9jY3VycyAhPT0gbnVsbCAmJiBtYXhPY2N1cnMgIT09IHVuZGVmaW5lZCAmJiB0aGlzLnNlcnZpY2UubWF4T2NjdXJzKG1heE9jY3Vycyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZXhwYW5kKG1pbk9jY3Vyczogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG1pbk9jY3VycyAhPT0gbnVsbCAmJiBtaW5PY2N1cnMgIT09IHVuZGVmaW5lZCAmJiBwYXJzZUludChtaW5PY2N1cnMsIDEwKSA+IDA7XG4gIH1cblxuICBwcm90ZWN0ZWQgYWRkU2VjdGlvbigkZXZlbnQ6IEV2ZW50LCBub2RlOiBTY2hlbWFNb2RlbCwgcGFyZW50Tm9kZTogU2NoZW1hTW9kZWwsIHBhcmVudEZvcm1FbGU6IEZvcm1Hcm91cCk6IHZvaWQge1xuICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjb25zdCBjb250cm9sOiBGb3JtQXJyYXkgPSBwYXJlbnRGb3JtRWxlLmdldChub2RlLmlkKSBhcyBGb3JtQXJyYXk7XG4gICAgaWYgKG5vZGUubWF4T2NjdXJzICYmIHBhcnNlSW50KG5vZGUubWF4T2NjdXJzLCAxMCkgPD0gcGFyZW50Tm9kZS5lbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbmV3RWxlID0gdGhpcy5zdHJ1Y3R1cmVkQ2xvbmUocGFyZW50Tm9kZS5lbGVtZW50c1swXSk7XG4gICAgY29uc3QgbmV3S2V5czogYW55ID0gW107XG4gICAgY29uc3QgZ3JvdXBDb250cm9scyA9IHRoaXMuc2VydmljZS5nZXRGb3JtR3JvdXBDb250cm9scyhuZXdFbGUuZWxlbWVudHMsIG5ld0tleXMsIHBhcmVudE5vZGUuZWxlbWVudHMubGVuZ3RoIC0gMSk7XG4gICAgcGFyZW50Tm9kZS5lbGVtZW50cy5wdXNoKG5ld0VsZSk7XG4gICAgY29udHJvbC5wdXNoKGdyb3VwQ29udHJvbHMpO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0aW9uLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZW1vdmVTZWN0aW9uKCRldmVudDogRXZlbnQsIHBhcmVudE5vZGU6IFNjaGVtYU1vZGVsLCBwYXJlbnRGb3JtRWxlOiBGb3JtR3JvdXAsIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgY29uc3QgY29udHJvbDogRm9ybUFycmF5ID0gcGFyZW50Rm9ybUVsZS5nZXQocGFyZW50Tm9kZS5pZCkgYXMgRm9ybUFycmF5O1xuICAgIHBhcmVudE5vZGUuZWxlbWVudHMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICBjb250cm9sLnJlbW92ZUF0KGluZGV4KTtcbiAgICB0aGlzLmNoYW5nZURldGVjdGlvbi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYWRkTmV3Q29udHJvbCgkZXZlbnQ6IEV2ZW50LCBub2RlOiBTY2hlbWFNb2RlbCwgcGFyZW50Tm9kZTogU2NoZW1hTW9kZWwsIHBhcmVudEZvcm1FbGU6IEZvcm1Hcm91cCk6IHZvaWQge1xuICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAobm9kZS5tYXhPY2N1cnMgJiYgcGFyc2VJbnQobm9kZS5tYXhPY2N1cnMsIDEwKSA8PSBwYXJlbnROb2RlLmVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjb250cm9sOiBGb3JtQXJyYXkgPSBwYXJlbnRGb3JtRWxlLmdldChub2RlLmlkKSBhcyBGb3JtQXJyYXk7XG4gICAgY29uc3QgbmV3Q29udHJvbCA9IHRoaXMuc2VydmljZS5nZXRGb3JtQ29udHJvbCgnJyk7XG4gICAgY29uc3QgbmV3RWxlID0gdGhpcy5zdHJ1Y3R1cmVkQ2xvbmUocGFyZW50Tm9kZS5lbGVtZW50c1twYXJlbnROb2RlLmVsZW1lbnRzLmxlbmd0aCAtIDFdKTtcbiAgICBjb250cm9sLnB1c2gobmV3Q29udHJvbCk7XG4gICAgcGFyZW50Tm9kZS5lbGVtZW50cy5wdXNoKG5ld0VsZSk7XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rpb24uZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlbW92ZU5ld0NvbnRyb2woJGV2ZW50OiBFdmVudCwgcGFyZW50Tm9kZTogU2NoZW1hTW9kZWwsIHBhcmVudEZvcm1FbGU6IEZvcm1Hcm91cCwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjb25zdCBjb250cm9sOiBGb3JtQXJyYXkgPSBwYXJlbnRGb3JtRWxlLmdldChwYXJlbnROb2RlLmlkKSBhcyBGb3JtQXJyYXk7XG4gICAgcGFyZW50Tm9kZS5lbGVtZW50cy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIGNvbnRyb2wucmVtb3ZlQXQoaW5kZXgpO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0aW9uLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpc0FycmF5KG15S2V5OiBPYmplY3QgfCBBcnJheTxhbnk+KTogYm9vbGVhbiB7XG4gICAgaWYgKG15S2V5IGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcm90ZWN0ZWQgaXNFbXB0eShmb3JtRWxlbWVudDogRm9ybUdyb3VwKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGZvcm1FbGVtZW50LmNvbnRyb2xzKS5sZW5ndGggPT09IDA7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0RWxlbWVudChmb3JtRWxlbWVudDogRm9ybUdyb3VwLCBlbGVtZW50OiBhbnkpOiBBYnN0cmFjdENvbnRyb2w8YW55LCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoZWxlbWVudC5oaWRkZW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IF9lbGVtZW50O1xuICAgIGlmIChlbGVtZW50Lm11bHRpKSB7XG4gICAgICBfZWxlbWVudCA9IGVsZW1lbnQuZWxlbWVudHNbZWxlbWVudC5lbGVtZW50cy5sZW5ndGggLSAxXTtcbiAgICB9IGVsc2Uge1xuICAgICAgX2VsZW1lbnQgPSBlbGVtZW50O1xuICAgIH1cblxuICAgIGxldCBmb3JtQ29udHJvbCA9IGZvcm1FbGVtZW50LmNvbnRyb2xzW19lbGVtZW50LmlkXTtcbiAgICBpZiAoIWZvcm1Db250cm9sKSB7XG4gICAgICBmb3JtQ29udHJvbCA9IChmb3JtRWxlbWVudCBhcyBhbnkpW19lbGVtZW50LmlkXTtcbiAgICAgIGlmICghZm9ybUNvbnRyb2wpXG4gICAgICAgIHRocm93IGBGb3JtQ29udHJvbCBub3QgZm91bmQgJHtfZWxlbWVudC5pZH1gO1xuICAgIH1cbiAgICBpZiAoZm9ybUNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcbiAgICAgIGNvbnN0IGZvcm1Hcm91cCA9IGZvcm1Db250cm9sLmNvbnRyb2xzLmZpbmQoKGl0ZW06IGFueSkgPT4ge1xuICAgICAgICBpZiAoaXRlbSBpbnN0YW5jZW9mIEZvcm1Db250cm9sKVxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoaXRlbS5jb250cm9scykuZmluZCgoY3RybCkgPT4ge1xuICAgICAgICAgIHJldHVybiBjdHJsLmluZGV4T2YoZWxlbWVudC5pZCkgPiAtMTtcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgICAgaWYgKGZvcm1Hcm91cClcbiAgICAgICAgcmV0dXJuIGZvcm1Db250cm9sLmF0KGZvcm1Db250cm9sLmxlbmd0aCAtIDEpO1xuICAgIH1cbiAgICByZXR1cm4gZm9ybUNvbnRyb2w7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0Rm9ybUNvbnRyb2wobm9kZTogU2NoZW1hTW9kZWwpOiBGb3JtQ29udHJvbCB7XG4gICAgZGVidWdnZXJcbiAgICByZXR1cm4gdGhpcy5zZXJ2aWNlLmdldEZvcm1Db250cm9sKCcnKTtcbiAgfVxufVxuIiwiPGZvcm0gKm5nSWY9XCJfZm9ybSAmJiBzY2hlbWFcIiBbZm9ybUdyb3VwXT1cIl9mb3JtXCI+XHJcbiAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuICAgIDxuZy10ZW1wbGF0ZSAjbm9kZVRlbXBsYXRlUmVmIGxldC1ub2RlPVwibm9kZVwiIGxldC1mb3JtRWxlbWVudD1cImZvcm1FbGVtZW50XCIgbGV0LWluZGV4PVwiaW5kZXhcIlxyXG4gICAgICBsZXQtcGFyZW50Tm9kZT1cInBhcmVudE5vZGVcIiBsZXQtcGFyZW50Rm9ybUVsZW1lbnQ9XCJwYXJlbnRGb3JtRWxlbWVudFwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibm9kZS5tdWx0aSB0aGVuIGFyciBlbHNlIG9ialwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICA8bmctdGVtcGxhdGUgI2Fycj5cclxuICAgICAgICA8bmctdGVtcGxhdGUgKm5nRm9yPVwibGV0IG1vZGVsIG9mIG5vZGUuZWxlbWVudHM7bGV0IGkgPSBpbmRleFwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm5vZGVUZW1wbGF0ZVJlZlwiXHJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xyXG4gICAgICAgICAgbm9kZTogbW9kZWwsXHJcbiAgICAgICAgICBmb3JtRWxlbWVudDogZm9ybUVsZW1lbnQsXHJcbiAgICAgICAgICBwYXJlbnRGb3JtRWxlbWVudDogcGFyZW50Rm9ybUVsZW1lbnQsXHJcbiAgICAgICAgICBwYXJlbnROb2RlOiBub2RlLFxyXG4gICAgICAgICAgaW5kZXg6IGlcclxuICAgICAgICB9XCI+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgPG5nLXRlbXBsYXRlICNvYmo+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5vZGUuZWxlbWVudHMubGVuZ3RoXCI+XHJcbiAgICAgICAgICA8bWF0LWFjY29yZGlvbiBbZm9ybUdyb3VwXT1cImZvcm1FbGVtZW50XCIgKm5nSWY9XCIhbm9kZS5oaWRkZW5cIj5cclxuICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgbXVsdGkgW2V4cGFuZGVkXT1cImV4cGFuZChub2RlLm1pbk9jY3VycylcIiAjZXhwYW4+XHJcbiAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cclxuICAgICAgICAgICAgICAgICAge3sgbm9kZS5uYW1lIHwgdHJhbnM6IG5vZGUuaWQgOiBub2RlLm5hbWUgfX1cclxuICAgICAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1wYW5lbC1kZXNjcmlwdGlvbiAqbmdJZj1cIm1heE9jY3Vycyhub2RlLm1heE9jY3VycylcIj5cclxuICAgICAgICAgICAgICAgICAgJm5ic3A7XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJpbmRleCA8IDFcIiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImFkZFNlY3Rpb24oJGV2ZW50LCBub2RlLHBhcmVudE5vZGUsIHBhcmVudEZvcm1FbGVtZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImluZGV4ID4gMFwiIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwicmVtb3ZlU2VjdGlvbigkZXZlbnQscGFyZW50Tm9kZSxwYXJlbnRGb3JtRWxlbWVudCxpbmRleClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+cmVtb3ZlPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1wYW5lbC1kZXNjcmlwdGlvbj5cclxuICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJleHBhbi5leHBhbmRlZFwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwibm9kZS5kYXRhVHlwZSA9PT0gJ2Nob2ljZSdcIj5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBub2RlLm5hbWUgfCB0cmFuczogbm9kZS5pZCA6IG5vZGUubmFtZSB9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uQ2hvaWNlU2VsZWN0aW9uQ2hhbmdlKCRldmVudC52YWx1ZSxmb3JtRWxlbWVudCwgbm9kZSlcIiBbZm9ybUNvbnRyb2xdPVwibm9kZS5jaG9pY2VGb3JtQ29udHJvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBpdGVtIG9mIG5vZGUuZWxlbWVudHNcIiBbdmFsdWVdPVwiaXRlbS5pZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3tpdGVtLm5hbWV9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNFbXB0eShmb3JtRWxlbWVudClcIj5cclxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0Zvcj1cImxldCBtb2RlbCBvZiBub2RlLmVsZW1lbnRzOyBsZXQgaSA9IGluZGV4XCIgW25nVGVtcGxhdGVPdXRsZXRdPVwibm9kZVRlbXBsYXRlUmVmXCJcclxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xyXG4gICAgICAgICAgICBub2RlOiBtb2RlbCxcclxuICAgICAgICAgICAgZm9ybUVsZW1lbnQ6IGdldEVsZW1lbnQoZm9ybUVsZW1lbnQsbW9kZWwpLFxyXG4gICAgICAgICAgICBwYXJlbnRGb3JtRWxlbWVudDogZm9ybUVsZW1lbnRcclxuICAgICAgICAgIH1cIj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIm5vZGUuZWxlbWVudHMubGVuZ3RoID09PSAwXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZ3gtaXNvLWNvbnRyb2wgKm5nSWY9XCIhbm9kZS5oaWRkZW5cIiBbZm9ybUNvbnRyb2xdPVwiZm9ybUVsZW1lbnRcIiBbY29udHJvbF09XCJub2RlXCI+PC9uZ3gtaXNvLWNvbnRyb2w+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxyXG4gICAgICAgICAgPC9tYXQtYWNjb3JkaW9uPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbm9kZS5lbGVtZW50cy5sZW5ndGggJiYgIW5vZGUuaGlkZGVuXCI+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwibWF4T2NjdXJzKG5vZGUubWF4T2NjdXJzKVwiIGNsYXNzPVwiZm9ybS1hZGQtc2VjdGlvblwiPlxyXG4gICAgICAgICAgICAmbmJzcDtcclxuICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImluZGV4IDwgMVwiIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiYWRkTmV3Q29udHJvbCgkZXZlbnQsIG5vZGUscGFyZW50Tm9kZSxwYXJlbnRGb3JtRWxlbWVudClcIj5cclxuICAgICAgICAgICAgICA8bWF0LWljb24+YWRkPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJpbmRleCA+IDBcIiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInJlbW92ZU5ld0NvbnRyb2woJGV2ZW50LHBhcmVudE5vZGUscGFyZW50Rm9ybUVsZW1lbnQsaW5kZXgpXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1pY29uPnJlbW92ZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8bmd4LWlzby1jb250cm9sIFtmb3JtQ29udHJvbF09XCJmb3JtRWxlbWVudFwiIFtjb250cm9sXT1cIm5vZGVcIj48L25neC1pc28tY29udHJvbD5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBtb2RlbCBvZiBnZXRGb3JtTW9kZWw7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzQXJyYXkobW9kZWwpO3RoZW4gZm9ybUFycmF5IGVsc2UgZm9ybU9iamVjdFwiPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPG5nLXRlbXBsYXRlICNmb3JtQXJyYXk+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0Zvcj1cImxldCBrZXkgb2YgbW9kZWw7bGV0IGkgPSBpbmRleFwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm5vZGVUZW1wbGF0ZVJlZlwiXHJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xyXG4gICAgICAgICAgbm9kZToga2V5LFxyXG4gICAgICAgICAgZm9ybUVsZW1lbnQ6IGdldEVsZW1lbnQoX2Zvcm0sa2V5KSxcclxuICAgICAgICAgIHBhcmVudEZvcm1FbGVtZW50OiBfZm9ybSxcclxuICAgICAgICAgIGluZGV4OmlcclxuICAgICAgICB9XCI+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgPG5nLXRlbXBsYXRlICNmb3JtT2JqZWN0PlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJub2RlVGVtcGxhdGVSZWZcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xyXG4gICAgICAgICAgbm9kZTogbW9kZWwsXHJcbiAgICAgICAgICBmb3JtRWxlbWVudDogZ2V0RWxlbWVudChfZm9ybSxtb2RlbCksXHJcbiAgICAgICAgICBwYXJlbnRGb3JtRWxlbWVudDogX2Zvcm0sXHJcbiAgICAgICAgICBpbmRleDogaSxcclxuICAgICAgICB9XCI+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIDwvZGl2PlxyXG48L2Zvcm0+Il19
190
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWlzby1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1pc28tZm9ybS9zcmMvbGliL25neC1pc28tZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtaXNvLWZvcm0vc3JjL2xpYi9uZ3gtaXNvLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsS0FBSyxFQUdOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxTQUFTLEVBQ1QsV0FBVyxFQUNYLFNBQVMsRUFFVixNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7O0FBWXhCLE1BQU0sT0FBTyxtQkFBbUI7SUFPOUIsWUFBb0IsT0FBc0IsRUFBVSxlQUFrQztRQUFsRSxZQUFPLEdBQVAsT0FBTyxDQUFlO1FBQVUsb0JBQWUsR0FBZixlQUFlLENBQW1CO0lBQ3RGLENBQUM7SUFFTSxXQUFXLENBQUMsT0FBc0I7UUFDdkMsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFlBQVksRUFBRTtZQUN2RCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDckI7UUFDRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsWUFBWSxFQUFFO1lBQ25ELElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1NBQzFCO0lBQ0gsQ0FBQztJQUVELElBQVcsVUFBVTtRQUNuQixJQUFJLElBQUksQ0FBQyxLQUFLO1lBQ1osT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxJQUFjLFlBQVk7UUFDeEIsT0FBTyxJQUFJ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Q0FBQyxJQUFpQjtRQUN4QyxRQUFRLENBQUE7UUFDUixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFUyxvQkFBb0IsQ0FBQyxTQUFnQjtRQUM3QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNwRCxXQUFXLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2hDLE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7OEdBdExVLG1CQUFtQjtrR0FBbkIsbUJBQW1CLHFIQ3pCaEMsODNKQWlHTzs7MkZEeEVNLG1CQUFtQjtrQkFOL0IsU0FBUzsrQkFDRSxjQUFjLG1CQUdQLHVCQUF1QixDQUFDLE1BQU07b0lBR3BCLElBQUk7c0JBQTlCLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUNFLE1BQU07c0JBQWhDLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXNcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBGb3JtR3JvdXAsXG4gIEZvcm1Db250cm9sLFxuICBGb3JtQXJyYXksXG4gIEFic3RyYWN0Q29udHJvbFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IFNjaGVtYU1vZGVsIH0gZnJvbSAnLi9Nb2RlbHMvU2NoZW1hJztcbmltcG9ydCB7IE5neElzb1NlcnZpY2UgfSBmcm9tICcuL25neC1pc28tZm9ybS5zZXJ2aWNlJztcbmltcG9ydCB7IElzb0Zvcm0gfSBmcm9tICcuL01vZGVscy9Jc29Gb3JtJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmd4LWlzby1mb3JtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL25neC1pc28tZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL25neC1pc28tZm9ybS5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBOZ3hJc29Gb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgZm9ybTogSXNvRm9ybTtcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgc2NoZW1hOiBTY2hlbWFNb2RlbDtcbiAgcHJvdGVjdGVkIF9mb3JtOiBGb3JtR3JvdXA7XG4gIHByaXZhdGUgX2lzRm9ybUluaXRpYXRlOiBib29sZWFuO1xuICBwcml2YXRlIF9uZ01vZGVsOiBhbnk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzZXJ2aWNlOiBOZ3hJc29TZXJ2aWNlLCBwcml2YXRlIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ3NjaGVtYSddICYmIGNoYW5nZXNbJ3NjaGVtYSddLmN1cnJlbnRWYWx1ZSkge1xuICAgICAgdGhpcy5pbml0aWF0ZUZvcm0oKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ2Zvcm0nXSAmJiBjaGFuZ2VzWydmb3JtJ10uY3VycmVudFZhbHVlKSB7XG4gICAgICB0aGlzLmluaXRpYXRlRm9ybU1vZGVsKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBnZXRJc29Gb3JtKCk6IGFueSB7XG4gICAgaWYgKHRoaXMuX2Zvcm0pXG4gICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlLnNhbml0aXplKHRoaXMuX2Zvcm0udmFsdWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBnZXRGb3JtTW9kZWwoKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLnNlcnZpY2UuX2Zvcm1Nb2RlbDtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhdGVGb3JtKCk6IHZvaWQge1xuICAgIHRoaXMuc2VydmljZS5fZm9ybU1vZGVsID0gW3RoaXMuc3RydWN0dXJlZENsb25lKHRoaXMuc2NoZW1hKV07XG4gICAgdGhpcy5zZXJ2aWNlLl9mb3JtTW9kZWxbMF0uZWxlbWVudHMgPSBbXTtcbiAgICBsZXQgZ3JvdXA6IGFueSA9IHt9O1xuICAgIGNvbnN0IHNjaGVtYUVsZW1lbnRzID0gIHRoaXMuc2NoZW1hLmVsZW1lbnRzLmxlbmd0aCA+IDAgPyB0aGlzLnN0cnVjdHVyZWRDbG9uZSh0aGlzLnNjaGVtYS5lbGVtZW50cykgOiB0aGlzLnNjaGVtYS5lbGVtZW50cztcbiAgICBjb25zdCBmb3JtRWxlbWVudHMgPSB0aGlzLnNlcnZpY2UuX2Zvcm1Nb2RlbFswXS5lbGVtZW50cy5sZW5ndGggPiAwID8gdGhpcy5zdHJ1Y3R1cmVkQ2xvbmUodGhpcy5zZXJ2aWNlLl9mb3JtTW9kZWxbMF0uZWxlbWVudHMpIDogdGhpcy5zZXJ2aWNlLl9mb3JtTW9kZWxbMF0uZWxlbWVudHM7XG4gICAgZ3JvdXBbdGhpcy5zY2hlbWEuaWRdID0gdGhpcy5zZXJ2aWNlLmdldEZvcm1Hcm91cENvbnRyb2xzKHNjaGVtYUVsZW1lbnRzLCBmb3JtRWxlbWVudHMpO1xuICAgIHRoaXMuX2Zvcm0gPSBuZXcgRm9ybUdyb3VwKGdyb3VwKTtcbiAgICBpZiAoIXRoaXMuX2lzRm9ybUluaXRpYXRlKSB7XG4gICAgICB0aGlzLmluaXRpYXRlRm9ybU1vZGVsKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdHJ1Y3R1cmVkQ2xvbmUoZGF0YTogYW55KTogYW55IHtcbiAgICBsZXQgY2xvbmVEYXRhO1xuICAgIHRyeSB7XG4gICAgICBjbG9uZURhdGEgPSBzdHJ1Y3R1cmVkQ2xvbmUoZGF0YSk7XG4gICAgfSBjYXRjaChlKSB7XG4gICAgICBjbG9uZURhdGEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNsb25lRGF0YTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhdGVGb3JtTW9kZWwoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2Zvcm0pIHtcbiAgICAgIHRoaXMuX25nTW9kZWwgPSB0aGlzLmZvcm0uX21vZGVsO1xuICAgICAgdGhpcy5mb3JtLmdldEZvcm1Nb2RlbCA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SXNvRm9ybTtcbiAgICAgIH07XG4gICAgICB0aGlzLl9pc0Zvcm1Jbml0aWF0ZSA9IHRydWU7XG4gICAgICB0aGlzLnNlcnZpY2UuaW5pdEZvcm1Nb2RlbCh0aGlzLl9uZ01vZGVsLCB0aGlzLl9mb3JtKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgb25DaG9pY2VTZWxlY3Rpb25DaGFuZ2UoaWQ6IHN0cmluZywgZm9ybUVsZW1lbnQ6IGFueSwgbm9kZXM6IFNjaGVtYU1vZGVsKTogdm9pZCB7XG4gICAgbm9kZXMuZWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudDogU2NoZW1hTW9kZWwpID0+IHtcbiAgICAgIGVsZW1lbnQuaGlkZGVuID0gdHJ1ZTtcbiAgICAgIGZvcm1FbGVtZW50LnJlbW92ZUNvbnRyb2woZWxlbWVudC5pZCk7XG4gICAgICBpZiAoZWxlbWVudC5pZCA9PT0gaWQpIHtcbiAgICAgICAgZWxlbWVudC5oaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgaWYgKGVsZW1lbnQuZWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLnNlcnZpY2UuZ2V0Rm9ybUdyb3VwQ29udHJvbHMoZWxlbWVudC5lbGVtZW50cywgW10sIDAsIHRydWUpO1xuICAgICAgICAgIGZvcm1FbGVtZW50LmFkZENvbnRyb2woZWxlbWVudC5pZCwgZ3JvdXApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLnNlcnZpY2UuZ2V0Rm9ybUNvbnRyb2woJycpO1xuICAgICAgICAgIGZvcm1FbGVtZW50LmFkZENvbnRyb2woZWxlbWVudC5pZCwgY29udHJvbCk7XG4gICAgICAgIH1cblxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIG1heE9jY3VycyhtYXhPY2N1cnM6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBtYXhPY2N1cnMgIT09IG51bGwgJiYgbWF4T2NjdXJzICE9PSB1bmRlZmluZWQgJiYgdGhpcy5zZXJ2aWNlLm1heE9jY3VycyhtYXhPY2N1cnMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGV4cGFuZChtaW5PY2N1cnM6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBtaW5PY2N1cnMgIT09IG51bGwgJiYgbWluT2NjdXJzICE9PSB1bmRlZmluZWQgJiYgcGFyc2VJbnQobWluT2NjdXJzLCAxMCkgPiAwO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFkZFNlY3Rpb24oJGV2ZW50OiBFdmVudCwgbm9kZTogU2NoZW1hTW9kZWwsIHBhcmVudE5vZGU6IFNjaGVtYU1vZGVsLCBwYXJlbnRGb3JtRWxlOiBGb3JtR3JvdXApOiB2b2lkIHtcbiAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgY29uc3QgY29udHJvbDogRm9ybUFycmF5ID0gcGFyZW50Rm9ybUVsZS5nZXQobm9kZS5pZCkgYXMgRm9ybUFycmF5O1xuICAgIGlmIChub2RlLm1heE9jY3VycyAmJiBwYXJzZUludChub2RlLm1heE9jY3VycywgMTApIDw9IHBhcmVudE5vZGUuZWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG5ld0VsZSA9IHRoaXMuc3RydWN0dXJlZENsb25lKHBhcmVudE5vZGUuZWxlbWVudHNbMF0pO1xuICAgIGNvbnN0IG5ld0tleXM6IGFueSA9IFtdO1xuICAgIGNvbnN0IGdyb3VwQ29udHJvbHMgPSB0aGlzLnNlcnZpY2UuZ2V0Rm9ybUdyb3VwQ29udHJvbHMobmV3RWxlLmVsZW1lbnRzLCBuZXdLZXlzLCBwYXJlbnROb2RlLmVsZW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgIHBhcmVudE5vZGUuZWxlbWVudHMucHVzaChuZXdFbGUpO1xuICAgIGNvbnRyb2wucHVzaChncm91cENvbnRyb2xzKTtcbiAgICB0aGlzLmNoYW5nZURldGVjdGlvbi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVtb3ZlU2VjdGlvbigkZXZlbnQ6IEV2ZW50LCBwYXJlbnROb2RlOiBTY2hlbWFNb2RlbCwgcGFyZW50Rm9ybUVsZTogRm9ybUdyb3VwLCBpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGNvbnN0IGNvbnRyb2w6IEZvcm1BcnJheSA9IHBhcmVudEZvcm1FbGUuZ2V0KHBhcmVudE5vZGUuaWQpIGFzIEZvcm1BcnJheTtcbiAgICBwYXJlbnROb2RlLmVsZW1lbnRzLnNwbGljZShpbmRleCwgMSk7XG4gICAgY29udHJvbC5yZW1vdmVBdChpbmRleCk7XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rpb24uZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFkZE5ld0NvbnRyb2woJGV2ZW50OiBFdmVudCwgbm9kZTogU2NoZW1hTW9kZWwsIHBhcmVudE5vZGU6IFNjaGVtYU1vZGVsLCBwYXJlbnRGb3JtRWxlOiBGb3JtR3JvdXApOiB2b2lkIHtcbiAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKG5vZGUubWF4T2NjdXJzICYmIHBhcnNlSW50KG5vZGUubWF4T2NjdXJzLCAxMCkgPD0gcGFyZW50Tm9kZS5lbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY29udHJvbDogRm9ybUFycmF5ID0gcGFyZW50Rm9ybUVsZS5nZXQobm9kZS5pZCkgYXMgRm9ybUFycmF5O1xuICAgIGNvbnN0IG5ld0NvbnRyb2wgPSB0aGlzLnNlcnZpY2UuZ2V0Rm9ybUNvbnRyb2woJycpO1xuICAgIGNvbnN0IG5ld0VsZSA9IHRoaXMuc3RydWN0dXJlZENsb25lKHBhcmVudE5vZGUuZWxlbWVudHNbcGFyZW50Tm9kZS5lbGVtZW50cy5sZW5ndGggLSAxXSk7XG4gICAgY29udHJvbC5wdXNoKG5ld0NvbnRyb2wpO1xuICAgIHBhcmVudE5vZGUuZWxlbWVudHMucHVzaChuZXdFbGUpO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0aW9uLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZW1vdmVOZXdDb250cm9sKCRldmVudDogRXZlbnQsIHBhcmVudE5vZGU6IFNjaGVtYU1vZGVsLCBwYXJlbnRGb3JtRWxlOiBGb3JtR3JvdXAsIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgY29uc3QgY29udHJvbDogRm9ybUFycmF5ID0gcGFyZW50Rm9ybUVsZS5nZXQocGFyZW50Tm9kZS5pZCkgYXMgRm9ybUFycmF5O1xuICAgIHBhcmVudE5vZGUuZWxlbWVudHMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICBjb250cm9sLnJlbW92ZUF0KGluZGV4KTtcbiAgICB0aGlzLmNoYW5nZURldGVjdGlvbi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaXNBcnJheShteUtleTogT2JqZWN0IHwgQXJyYXk8YW55Pik6IGJvb2xlYW4ge1xuICAgIGlmIChteUtleSBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGlzRW1wdHkoZm9ybUVsZW1lbnQ6IEZvcm1Hcm91cCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhmb3JtRWxlbWVudC5jb250cm9scykubGVuZ3RoID09PSAwO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldEVsZW1lbnQoZm9ybUVsZW1lbnQ6IEZvcm1Hcm91cCwgZWxlbWVudDogYW55KTogQWJzdHJhY3RDb250cm9sPGFueSwgYW55PiB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKGVsZW1lbnQuaGlkZGVuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBfZWxlbWVudDtcbiAgICBpZiAoZWxlbWVudC5tdWx0aSkge1xuICAgICAgX2VsZW1lbnQgPSBlbGVtZW50LmVsZW1lbnRzW2VsZW1lbnQuZWxlbWVudHMubGVuZ3RoIC0gMV07XG4gICAgfSBlbHNlIHtcbiAgICAgIF9lbGVtZW50ID0gZWxlbWVudDtcbiAgICB9XG5cbiAgICBsZXQgZm9ybUNvbnRyb2wgPSBmb3JtRWxlbWVudC5jb250cm9sc1tfZWxlbWVudC5pZF07XG4gICAgaWYgKCFmb3JtQ29udHJvbCkge1xuICAgICAgZm9ybUNvbnRyb2wgPSAoZm9ybUVsZW1lbnQgYXMgYW55KVtfZWxlbWVudC5pZF07XG4gICAgICBpZiAoIWZvcm1Db250cm9sKVxuICAgICAgICB0aHJvdyBgRm9ybUNvbnRyb2wgbm90IGZvdW5kICR7X2VsZW1lbnQuaWR9YDtcbiAgICB9XG4gICAgaWYgKGZvcm1Db250cm9sIGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XG4gICAgICBjb25zdCBmb3JtR3JvdXAgPSBmb3JtQ29udHJvbC5jb250cm9scy5maW5kKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBGb3JtQ29udHJvbClcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGl0ZW0uY29udHJvbHMpLmZpbmQoKGN0cmwpID0+IHtcbiAgICAgICAgICByZXR1cm4gY3RybC5pbmRleE9mKGVsZW1lbnQuaWQpID4gLTE7XG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICAgIGlmIChmb3JtR3JvdXApXG4gICAgICAgIHJldHVybiBmb3JtQ29udHJvbC5hdChmb3JtQ29udHJvbC5sZW5ndGggLSAxKTtcbiAgICB9XG4gICAgcmV0dXJuIGZvcm1Db250cm9sO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldEZvcm1Db250cm9sKG5vZGU6IFNjaGVtYU1vZGVsKTogRm9ybUNvbnRyb2wge1xuICAgIGRlYnVnZ2VyXG4gICAgcmV0dXJuIHRoaXMuc2VydmljZS5nZXRGb3JtQ29udHJvbCgnJyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0Q2hvaWNlRm9ybUNvbnRyb2woY2hvaWNlS2V5OnN0cmluZyl7XG4gICAgY29uc3QgZm9ybUNvbnRyb2wgPSB0aGlzLnNlcnZpY2UuZ2V0Rm9ybUNvbnRyb2woJycpO1xuICAgIGZvcm1Db250cm9sLnNldFZhbHVlKGNob2ljZUtleSk7XG4gICAgcmV0dXJuIGZvcm1Db250cm9sO1xuICB9XG59XG4iLCI8Zm9ybSAqbmdJZj1cIl9mb3JtICYmIHNjaGVtYVwiIFtmb3JtR3JvdXBdPVwiX2Zvcm1cIj5cclxuICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgPG5nLXRlbXBsYXRlICNub2RlVGVtcGxhdGVSZWYgbGV0LW5vZGU9XCJub2RlXCIgbGV0LWZvcm1FbGVtZW50PVwiZm9ybUVsZW1lbnRcIiBsZXQtaW5kZXg9XCJpbmRleFwiXHJcbiAgICAgIGxldC1wYXJlbnROb2RlPVwicGFyZW50Tm9kZVwiIGxldC1wYXJlbnRGb3JtRWxlbWVudD1cInBhcmVudEZvcm1FbGVtZW50XCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJub2RlLm11bHRpIHRoZW4gYXJyIGVsc2Ugb2JqXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSAjYXJyPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdGb3I9XCJsZXQgbW9kZWwgb2Ygbm9kZS5lbGVtZW50cztsZXQgaSA9IGluZGV4XCIgW25nVGVtcGxhdGVPdXRsZXRdPVwibm9kZVRlbXBsYXRlUmVmXCJcclxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XHJcbiAgICAgICAgICBub2RlOiBtb2RlbCxcclxuICAgICAgICAgIGZvcm1FbGVtZW50OiBmb3JtRWxlbWVudCxcclxuICAgICAgICAgIHBhcmVudEZvcm1FbGVtZW50OiBwYXJlbnRGb3JtRWxlbWVudCxcclxuICAgICAgICAgIHBhcmVudE5vZGU6IG5vZGUsXHJcbiAgICAgICAgICBpbmRleDogaVxyXG4gICAgICAgIH1cIj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICA8bmctdGVtcGxhdGUgI29iaj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibm9kZS5lbGVtZW50cy5sZW5ndGhcIj5cclxuICAgICAgICAgIDxtYXQtYWNjb3JkaW9uIFtmb3JtR3JvdXBdPVwiZm9ybUVsZW1lbnRcIiAqbmdJZj1cIiFub2RlLmhpZGRlblwiPlxyXG4gICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCBtdWx0aSBbZXhwYW5kZWRdPVwiZXhwYW5kKG5vZGUubWluT2NjdXJzKVwiICNleHBhbj5cclxuICAgICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlxyXG4gICAgICAgICAgICAgICAgICB7eyBub2RlLm5hbWUgfCB0cmFuczogbm9kZS5pZCA6IG5vZGUubmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XHJcbiAgICAgICAgICAgICAgICA8bWF0LXBhbmVsLWRlc2NyaXB0aW9uICpuZ0lmPVwibWF4T2NjdXJzKG5vZGUubWF4T2NjdXJzKVwiPlxyXG4gICAgICAgICAgICAgICAgICAmbmJzcDtcclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImluZGV4IDwgMVwiIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiYWRkU2VjdGlvbigkZXZlbnQsIG5vZGUscGFyZW50Tm9kZSwgcGFyZW50Rm9ybUVsZW1lbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiaW5kZXggPiAwXCIgbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJyZW1vdmVTZWN0aW9uKCRldmVudCxwYXJlbnROb2RlLHBhcmVudEZvcm1FbGVtZW50LGluZGV4KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5yZW1vdmU8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvbWF0LXBhbmVsLWRlc2NyaXB0aW9uPlxyXG4gICAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImV4cGFuLmV4cGFuZGVkXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCJub2RlLmRhdGFUeXBlID09PSAnY2hvaWNlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7IG5vZGUubmFtZSB8IHRyYW5zOiBub2RlLmlkIDogbm9kZS5uYW1lIH19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IChzZWxlY3Rpb25DaGFuZ2UpPVwib25DaG9pY2VTZWxlY3Rpb25DaGFuZ2UoJGV2ZW50LnZhbHVlLGZvcm1FbGVtZW50LCBub2RlKVwiIFtmb3JtQ29udHJvbF09XCJnZXRDaG9pY2VGb3JtQ29udHJvbChub2RlLmNob2ljZUtleSlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBub2RlLmVsZW1lbnRzXCIgW3ZhbHVlXT1cIml0ZW0uaWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7aXRlbS5uYW1lfX1cclxuICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzRW1wdHkoZm9ybUVsZW1lbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdGb3I9XCJsZXQgbW9kZWwgb2Ygbm9kZS5lbGVtZW50czsgbGV0IGkgPSBpbmRleFwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm5vZGVUZW1wbGF0ZVJlZlwiXHJcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcclxuICAgICAgICAgICAgbm9kZTogbW9kZWwsXHJcbiAgICAgICAgICAgIGZvcm1FbGVtZW50OiBnZXRFbGVtZW50KGZvcm1FbGVtZW50LG1vZGVsKSxcclxuICAgICAgICAgICAgcGFyZW50Rm9ybUVsZW1lbnQ6IGZvcm1FbGVtZW50XHJcbiAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJub2RlLmVsZW1lbnRzLmxlbmd0aCA9PT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICA8bmd4LWlzby1jb250cm9sICpuZ0lmPVwiIW5vZGUuaGlkZGVuXCIgW2Zvcm1Db250cm9sXT1cImZvcm1FbGVtZW50XCIgW2NvbnRyb2xdPVwibm9kZVwiPjwvbmd4LWlzby1jb250cm9sPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cclxuICAgICAgICAgIDwvbWF0LWFjY29yZGlvbj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIW5vZGUuZWxlbWVudHMubGVuZ3RoICYmICFub2RlLmhpZGRlblwiPlxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cIm1heE9jY3Vycyhub2RlLm1heE9jY3VycylcIiBjbGFzcz1cImZvcm0tYWRkLXNlY3Rpb25cIj5cclxuICAgICAgICAgICAgJm5ic3A7XHJcbiAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJpbmRleCA8IDFcIiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImFkZE5ld0NvbnRyb2woJGV2ZW50LCBub2RlLHBhcmVudE5vZGUscGFyZW50Rm9ybUVsZW1lbnQpXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiaW5kZXggPiAwXCIgbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJyZW1vdmVOZXdDb250cm9sKCRldmVudCxwYXJlbnROb2RlLHBhcmVudEZvcm1FbGVtZW50LGluZGV4KVwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtaWNvbj5yZW1vdmU8L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPG5neC1pc28tY29udHJvbCBbZm9ybUNvbnRyb2xdPVwiZm9ybUVsZW1lbnRcIiBbY29udHJvbF09XCJub2RlXCI+PC9uZ3gtaXNvLWNvbnRyb2w+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbW9kZWwgb2YgZ2V0Rm9ybU1vZGVsOyBsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0FycmF5KG1vZGVsKTt0aGVuIGZvcm1BcnJheSBlbHNlIGZvcm1PYmplY3RcIj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSAjZm9ybUFycmF5PlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdGb3I9XCJsZXQga2V5IG9mIG1vZGVsO2xldCBpID0gaW5kZXhcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJub2RlVGVtcGxhdGVSZWZcIlxyXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcclxuICAgICAgICAgIG5vZGU6IGtleSxcclxuICAgICAgICAgIGZvcm1FbGVtZW50OiBnZXRFbGVtZW50KF9mb3JtLGtleSksXHJcbiAgICAgICAgICBwYXJlbnRGb3JtRWxlbWVudDogX2Zvcm0sXHJcbiAgICAgICAgICBpbmRleDppXHJcbiAgICAgICAgfVwiPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSAjZm9ybU9iamVjdD5cclxuICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwibm9kZVRlbXBsYXRlUmVmXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcclxuICAgICAgICAgIG5vZGU6IG1vZGVsLFxyXG4gICAgICAgICAgZm9ybUVsZW1lbnQ6IGdldEVsZW1lbnQoX2Zvcm0sbW9kZWwpLFxyXG4gICAgICAgICAgcGFyZW50Rm9ybUVsZW1lbnQ6IF9mb3JtLFxyXG4gICAgICAgICAgaW5kZXg6IGksXHJcbiAgICAgICAgfVwiPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICA8L2Rpdj5cclxuPC9mb3JtPiJdfQ==
@@ -4,7 +4,7 @@ import { BrowserModule } from '@angular/platform-browser';
4
4
  import { FormsModule, ReactiveFormsModule } from '@angular/forms';
5
5
  import { MatExpansionModule } from '@angular/material/expansion';
6
6
  import { MatFormFieldModule } from '@angular/material/form-field';
7
- import { MatNativeDateModule } from '@angular/material/core';
7
+ import { DateAdapter, MAT_DATE_FORMATS, MatNativeDateModule } from '@angular/material/core';
8
8
  import { MatIconModule } from '@angular/material/icon';
9
9
  import { MatInputModule } from '@angular/material/input';
10
10
  import { MatButtonModule } from '@angular/material/button';
@@ -18,7 +18,7 @@ import { NgxDynamicComponent } from './shared/components/dynamic/ngx-dynamic.com
18
18
  import { IsoTranslatePipe } from './shared/pipe/translate.pipe';
19
19
  import { IsoErrorPipe } from './shared/pipe/error.pipe';
20
20
  import { IsoGeneralPipe } from './shared/pipe/general.pipe';
21
- import { ControlService } from './shared/services';
21
+ import { CUSTOM_DATE_FORMATS, CustomDateAdapter } from './shared/services/custom-date-adapter';
22
22
  import * as i0 from "@angular/core";
23
23
  // // AoT requires an exported function for factories
24
24
  // export function HttpLoaderFactory(http: HttpClient) {
@@ -54,7 +54,8 @@ export class NgxIsoFormModule {
54
54
  MatSelectModule,
55
55
  MatIconModule], exports: [NgxIsoFormComponent] }); }
56
56
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: NgxIsoFormModule, providers: [
57
- ControlService
57
+ { provide: DateAdapter, useClass: CustomDateAdapter },
58
+ { provide: MAT_DATE_FORMATS, useValue: CUSTOM_DATE_FORMATS }
58
59
  ], imports: [BrowserModule,
59
60
  BrowserAnimationsModule,
60
61
  TranslateModule,
@@ -105,11 +106,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.2", ngImpor
105
106
  MatIconModule,
106
107
  ],
107
108
  providers: [
108
- ControlService
109
+ { provide: DateAdapter, useClass: CustomDateAdapter },
110
+ { provide: MAT_DATE_FORMATS, useValue: CUSTOM_DATE_FORMATS }
109
111
  ],
110
112
  exports: [
111
113
  NgxIsoFormComponent
112
114
  ]
113
115
  }]
114
116
  }] });
115
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWlzby1mb3JtLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1pc28tZm9ybS9zcmMvbGliL25neC1pc28tZm9ybS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQTtBQUM5RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWxFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzdELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUUzRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdEQsT0FBTyxFQUNMLHNCQUFzQixFQUN0Qix1QkFBdUIsRUFDdkIsV0FBVyxFQUNYLFVBQVUsRUFDVixjQUFjLEVBQ2QsWUFBWSxFQUNaLGNBQWMsRUFDZCxjQUFjLEVBQ2QsY0FBYyxHQUNmLE1BQU0sY0FBYyxDQUFDO0FBRXRCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRS9ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDOztBQUduRCxxREFBcUQ7QUFDckQsd0RBQXdEO0FBQ3hELDBDQUEwQztBQUMxQyxJQUFJO0FBMENKLE1BQU0sT0FBTyxnQkFBZ0I7OEdBQWhCLGdCQUFnQjsrR0FBaEIsZ0JBQWdCLGlCQXRDekIsbUJBQW1CO1lBQ25CLHNCQUFzQjtZQUN0QixtQkFBbUI7WUFDbkIsdUJBQXVCO1lBQ3ZCLFdBQVc7WUFDWCxjQUFjO1lBQ2QsVUFBVTtZQUNWLGNBQWM7WUFDZCxZQUFZO1lBQ1osY0FBYztZQUNkLGNBQWM7WUFDZCxrQkFBa0I7WUFDbEIsZ0JBQWdCO1lBQ2hCLFlBQVk7WUFDWixjQUFjLGFBR2QsYUFBYTtZQUNiLHVCQUF1QjtZQUN2QixlQUFlO1lBQ2YsV0FBVztZQUNYLG1CQUFtQjtZQUNuQixrQkFBa0I7WUFDbEIsa0JBQWtCO1lBQ2xCLGNBQWM7WUFDZCxtQkFBbUI7WUFDbkIsbUJBQW1CO1lBQ25CLGVBQWU7WUFDZixlQUFlO1lBQ2YsYUFBYSxhQU1iLG1CQUFtQjsrR0FHVixnQkFBZ0IsYUFQaEI7WUFDVCxjQUFjO1NBQ2YsWUFoQkMsYUFBYTtZQUNiLHVCQUF1QjtZQUN2QixlQUFlO1lBQ2YsV0FBVztZQUNYLG1CQUFtQjtZQUNuQixrQkFBa0I7WUFDbEIsa0JBQWtCO1lBQ2xCLGNBQWM7WUFDZCxtQkFBbUI7WUFDbkIsbUJBQW1CO1lBQ25CLGVBQWU7WUFDZixlQUFlO1lBQ2YsYUFBYTs7MkZBU0osZ0JBQWdCO2tCQXhDNUIsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUU7d0JBQ1osbUJBQW1CO3dCQUNuQixzQkFBc0I7d0JBQ3RCLG1CQUFtQjt3QkFDbkIsdUJBQXVCO3dCQUN2QixXQUFXO3dCQUNYLGNBQWM7d0JBQ2QsVUFBVTt3QkFDVixjQUFjO3dCQUNkLFlBQVk7d0JBQ1osY0FBYzt3QkFDZCxjQUFjO3dCQUNkLGtCQUFrQjt3QkFDbEIsZ0JBQWdCO3dCQUNoQixZQUFZO3dCQUNaLGNBQWM7cUJBQ2Y7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLGFBQWE7d0JBQ2IsdUJBQXVCO3dCQUN2QixlQUFlO3dCQUNmLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQixrQkFBa0I7d0JBQ2xCLGtCQUFrQjt3QkFDbEIsY0FBYzt3QkFDZCxtQkFBbUI7d0JBQ25CLG1CQUFtQjt3QkFDbkIsZUFBZTt3QkFDZixlQUFlO3dCQUNmLGFBQWE7cUJBQ2Q7b0JBQ0QsU0FBUyxFQUFFO3dCQUNULGNBQWM7cUJBQ2Y7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLG1CQUFtQjtxQkFDcEI7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgQnJvd3NlckFuaW1hdGlvbnNNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlci9hbmltYXRpb25zXCJcclxuaW1wb3J0IHsgQnJvd3Nlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5cclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5pbXBvcnQgeyBNYXRFeHBhbnNpb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9leHBhbnNpb24nO1xyXG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcclxuaW1wb3J0IHsgTWF0TmF0aXZlRGF0ZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xyXG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xyXG5pbXBvcnQgeyBNYXREYXRlcGlja2VyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGF0ZXBpY2tlcic7XHJcbmltcG9ydCB7IE1hdFNlbGVjdE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XHJcblxyXG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuXHJcbmltcG9ydCB7XHJcbiAgTmd4SXNvQ29udHJvbENvbXBvbmVudCxcclxuICBJc29CYXNlQ29udHJvbENvbXBvbmVudCxcclxuICBJc29NYXRJbnB1dCxcclxuICBJc29NYXREYXRlLFxyXG4gIElzb01hdFRleHRhcmVhLFxyXG4gIElzb01hdFNlbGVjdCxcclxuICBJc29NYXRDaGVja2JveCxcclxuICBJc29NYXREYXRlVGltZSxcclxuICBJc29NYXRDdXJyZW5jeSxcclxufSBmcm9tICcuL2NvbXBvbmVudHMnO1xyXG5cclxuaW1wb3J0IHsgTmd4SXNvRm9ybUNvbXBvbmVudCB9IGZyb20gJy4vbmd4LWlzby1mb3JtLmNvbXBvbmVudCc7XHJcblxyXG5pbXBvcnQgeyBDb21wb25lbnREaXJlY3RpdmUgfSBmcm9tICcuL3NoYXJlZC9kaXJlY3RpdmVzL2NvbXBvbmVudC1jb250ZW50LmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IE5neER5bmFtaWNDb21wb25lbnQgfSBmcm9tICcuL3NoYXJlZC9jb21wb25lbnRzL2R5bmFtaWMvbmd4LWR5bmFtaWMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgSXNvVHJhbnNsYXRlUGlwZSB9IGZyb20gJy4vc2hhcmVkL3BpcGUvdHJhbnNsYXRlLnBpcGUnO1xyXG5pbXBvcnQgeyBJc29FcnJvclBpcGUgfSBmcm9tICcuL3NoYXJlZC9waXBlL2Vycm9yLnBpcGUnO1xyXG5pbXBvcnQgeyBJc29HZW5lcmFsUGlwZSB9IGZyb20gJy4vc2hhcmVkL3BpcGUvZ2VuZXJhbC5waXBlJztcclxuaW1wb3J0IHsgQ29udHJvbFNlcnZpY2UgfSBmcm9tICcuL3NoYXJlZC9zZXJ2aWNlcyc7XHJcblxyXG5cclxuLy8gLy8gQW9UIHJlcXVpcmVzIGFuIGV4cG9ydGVkIGZ1bmN0aW9uIGZvciBmYWN0b3JpZXNcclxuLy8gZXhwb3J0IGZ1bmN0aW9uIEh0dHBMb2FkZXJGYWN0b3J5KGh0dHA6IEh0dHBDbGllbnQpIHtcclxuLy8gICByZXR1cm4gbmV3IFRyYW5zbGF0ZUh0dHBMb2FkZXIoaHR0cCk7XHJcbi8vIH1cclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICBOZ3hJc29Gb3JtQ29tcG9uZW50LFxyXG4gICAgTmd4SXNvQ29udHJvbENvbXBvbmVudCxcclxuICAgIE5neER5bmFtaWNDb21wb25lbnQsXHJcbiAgICBJc29CYXNlQ29udHJvbENvbXBvbmVudCxcclxuICAgIElzb01hdElucHV0LFxyXG4gICAgSXNvTWF0VGV4dGFyZWEsXHJcbiAgICBJc29NYXREYXRlLFxyXG4gICAgSXNvTWF0RGF0ZVRpbWUsXHJcbiAgICBJc29NYXRTZWxlY3QsXHJcbiAgICBJc29NYXRDaGVja2JveCxcclxuICAgIElzb01hdEN1cnJlbmN5LFxyXG4gICAgQ29tcG9uZW50RGlyZWN0aXZlLFxyXG4gICAgSXNvVHJhbnNsYXRlUGlwZSxcclxuICAgIElzb0Vycm9yUGlwZSxcclxuICAgIElzb0dlbmVyYWxQaXBlXHJcbiAgXSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBCcm93c2VyTW9kdWxlLFxyXG4gICAgQnJvd3NlckFuaW1hdGlvbnNNb2R1bGUsXHJcbiAgICBUcmFuc2xhdGVNb2R1bGUsXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcbiAgICBNYXRFeHBhbnNpb25Nb2R1bGUsXHJcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXHJcbiAgICBNYXRJbnB1dE1vZHVsZSxcclxuICAgIE1hdE5hdGl2ZURhdGVNb2R1bGUsXHJcbiAgICBNYXREYXRlcGlja2VyTW9kdWxlLFxyXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxyXG4gICAgTWF0U2VsZWN0TW9kdWxlLFxyXG4gICAgTWF0SWNvbk1vZHVsZSxcclxuICBdLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAgQ29udHJvbFNlcnZpY2VcclxuICBdLFxyXG4gIGV4cG9ydHM6IFtcclxuICAgIE5neElzb0Zvcm1Db21wb25lbnRcclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ3hJc29Gb3JtTW9kdWxlIHsgfVxyXG4iXX0=
117
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWlzby1mb3JtLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1pc28tZm9ybS9zcmMvbGliL25neC1pc28tZm9ybS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQTtBQUM5RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWxFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFM0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXRELE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsdUJBQXVCLEVBQ3ZCLFdBQVcsRUFDWCxVQUFVLEVBQ1YsY0FBYyxFQUNkLFlBQVksRUFDWixjQUFjLEVBQ2QsY0FBYyxFQUNkLGNBQWMsR0FDZixNQUFNLGNBQWMsQ0FBQztBQUV0QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUUvRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUNyRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUN4RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTVELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDOztBQUcvRixxREFBcUQ7QUFDckQsd0RBQXdEO0FBQ3hELDBDQUEwQztBQUMxQyxJQUFJO0FBMkNKLE1BQU0sT0FBTyxnQkFBZ0I7OEdBQWhCLGdCQUFnQjsrR0FBaEIsZ0JBQWdCLGlCQXZDekIsbUJBQW1CO1lBQ25CLHNCQUFzQjtZQUN0QixtQkFBbUI7WUFDbkIsdUJBQXVCO1lBQ3ZCLFdBQVc7WUFDWCxjQUFjO1lBQ2QsVUFBVTtZQUNWLGNBQWM7WUFDZCxZQUFZO1lBQ1osY0FBYztZQUNkLGNBQWM7WUFDZCxrQkFBa0I7WUFDbEIsZ0JBQWdCO1lBQ2hCLFlBQVk7WUFDWixjQUFjLGFBR2QsYUFBYTtZQUNiLHVCQUF1QjtZQUN2QixlQUFlO1lBQ2YsV0FBVztZQUNYLG1CQUFtQjtZQUNuQixrQkFBa0I7WUFDbEIsa0JBQWtCO1lBQ2xCLGNBQWM7WUFDZCxtQkFBbUI7WUFDbkIsbUJBQW1CO1lBQ25CLGVBQWU7WUFDZixlQUFlO1lBQ2YsYUFBYSxhQU9iLG1CQUFtQjsrR0FHVixnQkFBZ0IsYUFSaEI7WUFDVCxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixFQUFFO1lBQ3JELEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxtQkFBbUIsRUFBRTtTQUM3RCxZQWpCQyxhQUFhO1lBQ2IsdUJBQXVCO1lBQ3ZCLGVBQWU7WUFDZixXQUFXO1lBQ1gsbUJBQW1CO1lBQ25CLGtCQUFrQjtZQUNsQixrQkFBa0I7WUFDbEIsY0FBYztZQUNkLG1CQUFtQjtZQUNuQixtQkFBbUI7WUFDbkIsZUFBZTtZQUNmLGVBQWU7WUFDZixhQUFhOzsyRkFVSixnQkFBZ0I7a0JBekM1QixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRTt3QkFDWixtQkFBbUI7d0JBQ25CLHNCQUFzQjt3QkFDdEIsbUJBQW1CO3dCQUNuQix1QkFBdUI7d0JBQ3ZCLFdBQVc7d0JBQ1gsY0FBYzt3QkFDZCxVQUFVO3dCQUNWLGNBQWM7d0JBQ2QsWUFBWTt3QkFDWixjQUFjO3dCQUNkLGNBQWM7d0JBQ2Qsa0JBQWtCO3dCQUNsQixnQkFBZ0I7d0JBQ2hCLFlBQVk7d0JBQ1osY0FBYztxQkFDZjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsYUFBYTt3QkFDYix1QkFBdUI7d0JBQ3ZCLGVBQWU7d0JBQ2YsV0FBVzt3QkFDWCxtQkFBbUI7d0JBQ25CLGtCQUFrQjt3QkFDbEIsa0JBQWtCO3dCQUNsQixjQUFjO3dCQUNkLG1CQUFtQjt3QkFDbkIsbUJBQW1CO3dCQUNuQixlQUFlO3dCQUNmLGVBQWU7d0JBQ2YsYUFBYTtxQkFDZDtvQkFDRCxTQUFTLEVBQUU7d0JBQ1QsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxpQkFBaUIsRUFBRTt3QkFDckQsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLG1CQUFtQixFQUFFO3FCQUM3RDtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsbUJBQW1CO3FCQUNwQjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBCcm93c2VyQW5pbWF0aW9uc01vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyL2FuaW1hdGlvbnNcIlxyXG5pbXBvcnQgeyBCcm93c2VyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcblxyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbmltcG9ydCB7IE1hdEV4cGFuc2lvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2V4cGFuc2lvbic7XHJcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xyXG5pbXBvcnQgeyBEYXRlQWRhcHRlciwgTUFUX0RBVEVfRk9STUFUUywgTWF0TmF0aXZlRGF0ZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xyXG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xyXG5pbXBvcnQgeyBNYXREYXRlcGlja2VyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGF0ZXBpY2tlcic7XHJcbmltcG9ydCB7IE1hdFNlbGVjdE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XHJcblxyXG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuXHJcbmltcG9ydCB7XHJcbiAgTmd4SXNvQ29udHJvbENvbXBvbmVudCxcclxuICBJc29CYXNlQ29udHJvbENvbXBvbmVudCxcclxuICBJc29NYXRJbnB1dCxcclxuICBJc29NYXREYXRlLFxyXG4gIElzb01hdFRleHRhcmVhLFxyXG4gIElzb01hdFNlbGVjdCxcclxuICBJc29NYXRDaGVja2JveCxcclxuICBJc29NYXREYXRlVGltZSxcclxuICBJc29NYXRDdXJyZW5jeSxcclxufSBmcm9tICcuL2NvbXBvbmVudHMnO1xyXG5cclxuaW1wb3J0IHsgTmd4SXNvRm9ybUNvbXBvbmVudCB9IGZyb20gJy4vbmd4LWlzby1mb3JtLmNvbXBvbmVudCc7XHJcblxyXG5pbXBvcnQgeyBDb21wb25lbnREaXJlY3RpdmUgfSBmcm9tICcuL3NoYXJlZC9kaXJlY3RpdmVzL2NvbXBvbmVudC1jb250ZW50LmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IE5neER5bmFtaWNDb21wb25lbnQgfSBmcm9tICcuL3NoYXJlZC9jb21wb25lbnRzL2R5bmFtaWMvbmd4LWR5bmFtaWMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgSXNvVHJhbnNsYXRlUGlwZSB9IGZyb20gJy4vc2hhcmVkL3BpcGUvdHJhbnNsYXRlLnBpcGUnO1xyXG5pbXBvcnQgeyBJc29FcnJvclBpcGUgfSBmcm9tICcuL3NoYXJlZC9waXBlL2Vycm9yLnBpcGUnO1xyXG5pbXBvcnQgeyBJc29HZW5lcmFsUGlwZSB9IGZyb20gJy4vc2hhcmVkL3BpcGUvZ2VuZXJhbC5waXBlJztcclxuaW1wb3J0IHsgQ29udHJvbFNlcnZpY2UgfSBmcm9tICcuL3NoYXJlZC9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IENVU1RPTV9EQVRFX0ZPUk1BVFMsIEN1c3RvbURhdGVBZGFwdGVyIH0gZnJvbSAnLi9zaGFyZWQvc2VydmljZXMvY3VzdG9tLWRhdGUtYWRhcHRlcic7XHJcblxyXG5cclxuLy8gLy8gQW9UIHJlcXVpcmVzIGFuIGV4cG9ydGVkIGZ1bmN0aW9uIGZvciBmYWN0b3JpZXNcclxuLy8gZXhwb3J0IGZ1bmN0aW9uIEh0dHBMb2FkZXJGYWN0b3J5KGh0dHA6IEh0dHBDbGllbnQpIHtcclxuLy8gICByZXR1cm4gbmV3IFRyYW5zbGF0ZUh0dHBMb2FkZXIoaHR0cCk7XHJcbi8vIH1cclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICBOZ3hJc29Gb3JtQ29tcG9uZW50LFxyXG4gICAgTmd4SXNvQ29udHJvbENvbXBvbmVudCxcclxuICAgIE5neER5bmFtaWNDb21wb25lbnQsXHJcbiAgICBJc29CYXNlQ29udHJvbENvbXBvbmVudCxcclxuICAgIElzb01hdElucHV0LFxyXG4gICAgSXNvTWF0VGV4dGFyZWEsXHJcbiAgICBJc29NYXREYXRlLFxyXG4gICAgSXNvTWF0RGF0ZVRpbWUsXHJcbiAgICBJc29NYXRTZWxlY3QsXHJcbiAgICBJc29NYXRDaGVja2JveCxcclxuICAgIElzb01hdEN1cnJlbmN5LFxyXG4gICAgQ29tcG9uZW50RGlyZWN0aXZlLFxyXG4gICAgSXNvVHJhbnNsYXRlUGlwZSxcclxuICAgIElzb0Vycm9yUGlwZSxcclxuICAgIElzb0dlbmVyYWxQaXBlXHJcbiAgXSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBCcm93c2VyTW9kdWxlLFxyXG4gICAgQnJvd3NlckFuaW1hdGlvbnNNb2R1bGUsXHJcbiAgICBUcmFuc2xhdGVNb2R1bGUsXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcbiAgICBNYXRFeHBhbnNpb25Nb2R1bGUsXHJcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXHJcbiAgICBNYXRJbnB1dE1vZHVsZSxcclxuICAgIE1hdE5hdGl2ZURhdGVNb2R1bGUsXHJcbiAgICBNYXREYXRlcGlja2VyTW9kdWxlLFxyXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxyXG4gICAgTWF0U2VsZWN0TW9kdWxlLFxyXG4gICAgTWF0SWNvbk1vZHVsZSxcclxuICBdLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAgeyBwcm92aWRlOiBEYXRlQWRhcHRlciwgdXNlQ2xhc3M6IEN1c3RvbURhdGVBZGFwdGVyIH0sXHJcbiAgICB7IHByb3ZpZGU6IE1BVF9EQVRFX0ZPUk1BVFMsIHVzZVZhbHVlOiBDVVNUT01fREFURV9GT1JNQVRTIH1cclxuICBdLFxyXG4gIGV4cG9ydHM6IFtcclxuICAgIE5neElzb0Zvcm1Db21wb25lbnRcclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ3hJc29Gb3JtTW9kdWxlIHsgfVxyXG4iXX0=
@@ -2,29 +2,41 @@ import { Injectable } from '@angular/core';
2
2
  import { FormGroup, FormControl } from '@angular/forms';
3
3
  import * as i0 from "@angular/core";
4
4
  import * as i1 from "@angular/forms";
5
+ import * as i2 from "./shared/services/custom-date-adapter";
5
6
  export class NgxIsoService {
6
- constructor(fb) {
7
+ constructor(fb, dateService) {
7
8
  this.fb = fb;
9
+ this.dateService = dateService;
8
10
  this._formModel = [];
9
11
  this.sanitize = (obj) => {
10
- if (obj === null || obj === "") {
12
+ if (obj === null || obj === '') {
11
13
  return null;
12
14
  }
13
15
  if (Array.isArray(obj)) {
14
16
  const cleanedObj = [];
15
17
  for (const index in obj) {
16
18
  const cleanedValue = this.sanitize(obj[index]);
17
- if (cleanedValue !== null && cleanedValue !== "" && Object.keys(cleanedValue).length > 0 && (!Array.isArray(cleanedValue) || cleanedValue.length > 0)) {
19
+ if (cleanedValue !== null &&
20
+ cleanedValue !== '' &&
21
+ Object.keys(cleanedValue).length > 0 &&
22
+ (!Array.isArray(cleanedValue) || cleanedValue.length > 0)) {
18
23
  cleanedObj.push(cleanedValue);
19
24
  }
20
25
  }
21
26
  return cleanedObj;
22
27
  }
28
+ else if (typeof obj === 'object' && obj instanceof Date) {
29
+ const cleanedObj = this.dateService.format(obj, 'YYYY-MM-DD');
30
+ return cleanedObj;
31
+ }
23
32
  else if (typeof obj === 'object') {
24
33
  const cleanedObj = {};
25
34
  for (const key in obj) {
26
35
  const cleanedValue = this.sanitize(obj[key]);
27
- if (cleanedValue !== null && cleanedValue !== "" && Object.keys(cleanedValue).length > 0 && (!Array.isArray(cleanedValue) || cleanedValue.length > 0)) {
36
+ if (cleanedValue !== null &&
37
+ cleanedValue !== '' &&
38
+ Object.keys(cleanedValue).length > 0 &&
39
+ (!Array.isArray(cleanedValue) || cleanedValue.length > 0)) {
28
40
  cleanedObj[key] = cleanedValue;
29
41
  }
30
42
  }
@@ -64,14 +76,16 @@ export class NgxIsoService {
64
76
  const formArray = form.get(key);
65
77
  if (formArray && formArray.length !== item.length) {
66
78
  const newEle = structuredClone(parentNode.elements[parentNode.elements.length - 1]);
67
- if (!(newEle.maxOccurs && parseInt(newEle.maxOccurs, 10) <= parentNode.elements.length)) {
79
+ if (!(newEle.maxOccurs &&
80
+ parseInt(newEle.maxOccurs, 10) <= parentNode.elements.length)) {
68
81
  const newKeys = [];
69
82
  const groupControls = this.getFormGroupControls(newEle.elements, newKeys, parentNode.elements.length - 1);
70
83
  parentNode.elements.push(newEle);
71
84
  formArray.push(groupControls);
72
85
  parentNode.elements.forEach((element) => {
73
- if (!element.minOccurs || parseInt(element.minOccurs, 10) === 0) {
74
- element.minOccurs = "1";
86
+ if (!element.minOccurs ||
87
+ parseInt(element.minOccurs, 10) === 0) {
88
+ element.minOccurs = '1';
75
89
  }
76
90
  });
77
91
  }
@@ -89,14 +103,14 @@ export class NgxIsoService {
89
103
  else if (typeof model[key] === 'object') {
90
104
  const node = this.getFormModel(this._formModel[0], key);
91
105
  if (node && (!node.minOccurs || parseInt(node.minOccurs, 10) === 0)) {
92
- node.minOccurs = "1";
106
+ node.minOccurs = '1';
93
107
  }
94
108
  const _form = form.get(key);
95
109
  if (_form) {
96
110
  if (node.dataType === 'choice') {
97
- const choickKey = Object.keys(model[key])[0];
98
- const choiceEle = node.elements.find((item) => item.id === choickKey);
99
- node.choiceFormControl.setValue(choickKey);
111
+ const choiceKey = Object.keys(model[key])[0];
112
+ const choiceEle = node.elements.find((item) => item.id === choiceKey);
113
+ node.choiceKey = choiceKey;
100
114
  choiceEle.hidden = false;
101
115
  const newNode = structuredClone(choiceEle);
102
116
  if (newNode.elements.length) {
@@ -136,11 +150,16 @@ export class NgxIsoService {
136
150
  if (item.elements.length > 0) {
137
151
  let choice = item.dataType === 'choice';
138
152
  if (choice) {
139
- element.choiceFormControl = this.getFormControl('');
153
+ element.choiceKey = '';
140
154
  }
141
155
  if (this.maxOccurs(item.maxOccurs)) {
142
156
  element.uniqueId = `${element.id}_${index}`;
143
- keys.push({ id: element.id, multi: true, xpath: element.xpath, elements: [element] });
157
+ keys.push({
158
+ id: element.id,
159
+ multi: true,
160
+ xpath: element.xpath,
161
+ elements: [element],
162
+ });
144
163
  const data = this.getFormGroupControls(item.elements, element.elements, index, choice);
145
164
  controls = this.fb.array([]);
146
165
  if (!choice) {
@@ -149,7 +168,12 @@ export class NgxIsoService {
149
168
  control[id] = controls;
150
169
  }
151
170
  else if (item.multi && !item.isFormControls) {
152
- keys.push({ id: element.id, multi: true, xpath: element.xpath, elements: element.elements });
171
+ keys.push({
172
+ id: element.id,
173
+ multi: true,
174
+ xpath: element.xpath,
175
+ elements: element.elements,
176
+ });
153
177
  const data = this.getFormGroupControls(item.elements[item.elements.length - 1].elements, element.elements, index, choice);
154
178
  controls = this.fb.array([]);
155
179
  if (!choice) {
@@ -162,7 +186,7 @@ export class NgxIsoService {
162
186
  item.elements.splice(1, item.elements.length - 1);
163
187
  }
164
188
  keys.push(item);
165
- control[id] = this.fb.array([this.getFormControl(item.value || "")]);
189
+ control[id] = this.fb.array([this.getFormControl(item.value || '')]);
166
190
  }
167
191
  else {
168
192
  keys.push(element);
@@ -176,7 +200,13 @@ export class NgxIsoService {
176
200
  }
177
201
  }
178
202
  else if (this.maxOccurs(item.maxOccurs)) {
179
- keys.push({ id: element.id, multi: true, xpath: element.xpath, elements: [element], isFormControls: true });
203
+ keys.push({
204
+ id: element.id,
205
+ multi: true,
206
+ xpath: element.xpath,
207
+ elements: [element],
208
+ isFormControls: true,
209
+ });
180
210
  control[id] = this.fb.array([this.getFormControl(item.value)]);
181
211
  }
182
212
  else if (item.isCurrency) {
@@ -187,14 +217,14 @@ export class NgxIsoService {
187
217
  }
188
218
  else {
189
219
  keys.push(element);
190
- control[id] = this.getFormControl(item.value || "");
220
+ control[id] = this.getFormControl(item.value || '');
191
221
  }
192
222
  });
193
223
  return new FormGroup(control);
194
224
  }
195
225
  getFormControl(values) {
196
- return new FormControl(values || "", {
197
- updateOn: 'blur'
226
+ return new FormControl(values || '', {
227
+ updateOn: 'blur',
198
228
  });
199
229
  }
200
230
  getAmountCurrency(item) {
@@ -202,10 +232,10 @@ export class NgxIsoService {
202
232
  const ccy = structuredClone(item);
203
233
  const amt = structuredClone(item);
204
234
  ccy.id = `${ccy.id}_ccy`;
205
- ccy.name = "Ccy";
235
+ ccy.name = 'Ccy';
206
236
  ccy.fractionDigits = '';
207
237
  ccy.totalDigits = '';
208
- ccy.maxLength = "3";
238
+ ccy.maxLength = '3';
209
239
  ccy.xpath = `${ccy.xpath}@ccy`;
210
240
  ccy.isCurrency = false;
211
241
  elements.push(ccy);
@@ -216,13 +246,13 @@ export class NgxIsoService {
216
246
  elements.push(amt);
217
247
  return elements;
218
248
  }
219
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: NgxIsoService, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Injectable }); }
249
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: NgxIsoService, deps: [{ token: i1.FormBuilder }, { token: i2.CustomDateAdapter }], target: i0.ɵɵFactoryTarget.Injectable }); }
220
250
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: NgxIsoService, providedIn: 'root' }); }
221
251
  }
222
252
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: NgxIsoService, decorators: [{
223
253
  type: Injectable,
224
254
  args: [{
225
- providedIn: 'root'
255
+ providedIn: 'root',
226
256
  }]
227
- }], ctorParameters: function () { return [{ type: i1.FormBuilder }]; } });
228
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWlzby1mb3JtLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtaXNvLWZvcm0vc3JjL2xpYi9uZ3gtaXNvLWZvcm0uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUEwQixNQUFNLGdCQUFnQixDQUFDOzs7QUFNaEYsTUFBTSxPQUFPLGFBQWE7SUFFeEIsWUFBb0IsRUFBZTtRQUFmLE9BQUUsR0FBRixFQUFFLENBQWE7UUFENUIsZUFBVSxHQUFVLEVBQUUsQ0FBQztRQXVKdkIsYUFBUSxHQUFHLENBQUMsR0FBUSxFQUFPLEVBQUU7WUFDbEMsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLEdBQUcsS0FBSyxFQUFFLEVBQUU7Z0JBQzlCLE9BQU8sSUFBSSxDQUFDO2FBQ2I7WUFFRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ3RCLE1BQU0sVUFBVSxHQUFRLEVBQUUsQ0FBQztnQkFDM0IsS0FBSyxNQUFNLEtBQUssSUFBSSxHQUFHLEVBQUU7b0JBQ3ZCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7b0JBQy9DLElBQUksWUFBWSxLQUFLLElBQUksSUFBSSxZQUFZLEtBQUssRUFBRSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFO3dCQUNySixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO3FCQUMvQjtpQkFDRjtnQkFDRCxP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QUN6QixHQUFHLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssTUFBTSxDQUFDO1FBQy9CLEdBQUcsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLEdBQUcsQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkIsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQzs4R0E1TlUsYUFBYTtrSEFBYixhQUFhLGNBRlosTUFBTTs7MkZBRVAsYUFBYTtrQkFIekIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1Db250cm9sLCBGb3JtQXJyYXksIEZvcm1CdWlsZGVyIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU2NoZW1hTW9kZWwgfSBmcm9tICcuL01vZGVscy9TY2hlbWEnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBOZ3hJc29TZXJ2aWNlIHtcbiAgcHVibGljIF9mb3JtTW9kZWw6IGFueVtdID0gW107XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyKSB7IH1cblxuICBwdWJsaWMgbWF4T2NjdXJzKG1heE9jY3Vyczogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG1heE9jY3VycyA9PT0gJ3VuYm91bmRlZCcgfHwgcGFyc2VJbnQobWF4T2NjdXJzLCAxMCkgPiAxO1xuICB9XG5cbiAgcHVibGljIGluaXRGb3JtTW9kZWwobW9kZWw6IGFueSwgZm9ybTogRm9ybUdyb3VwIHwgRm9ybUFycmF5KTogdm9pZCB7XG4gICAgaWYgKHR5cGVvZiBtb2RlbCA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGZvciAoY29uc3Qga2V5IGluIG1vZGVsKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG1vZGVsW2tleV0pKSB7XG4gICAgICAgICAgY29uc3QgcGFyZW50Tm9kZSA9IHRoaXMuZ2V0Rm9ybU1vZGVsKHRoaXMuX2Zvcm1Nb2RlbFswXSwga2V5KTtcbiAgICAgICAgICBjb25zdCBpdGVtID0gbW9kZWxba2V5XTtcbiAgICAgICAgICBjb25zdCBmb3JtQXJyYXkgPSBmb3JtLmdldChrZXkpIGFzIEZvcm1BcnJheTtcbiAgICAgICAgICBpZiAoZm9ybUFycmF5ICYmIGZvcm1BcnJheS5sZW5ndGggIT09IGl0ZW0ubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdFbGUgPSBzdHJ1Y3R1cmVkQ2xvbmUocGFyZW50Tm9kZS5lbGVtZW50c1twYXJlbnROb2RlLmVsZW1lbnRzLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgICAgIGlmICghKG5ld0VsZS5tYXhPY2N1cnMgJiYgcGFyc2VJbnQobmV3RWxlLm1heE9jY3VycywgMTApIDw9IHBhcmVudE5vZGUuZWxlbWVudHMubGVuZ3RoKSkge1xuICAgICAgICAgICAgICBjb25zdCBuZXdLZXlzOiBhbnkgPSBbXTtcbiAgICAgICAgICAgICAgY29uc3QgZ3JvdXBDb250cm9scyA9IHRoaXMuZ2V0Rm9ybUdyb3VwQ29udHJvbHMobmV3RWxlLmVsZW1lbnRzLCBuZXdLZXlzLCBwYXJlbnROb2RlLmVsZW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgICBwYXJlbnROb2RlLmVsZW1lbnRzLnB1c2gobmV3RWxlKTtcbiAgICAgICAgICAgICAgZm9ybUFycmF5LnB1c2goZ3JvdXBDb250cm9scyk7XG4gICAgICAgICAgICAgIHBhcmVudE5vZGUuZWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudDogU2NoZW1hTW9kZWwpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWVsZW1lbnQubWluT2NjdXJzIHx8IHBhcnNlSW50KGVsZW1lbnQubWluT2NjdXJzLCAxMCkgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQubWluT2NjdXJzID0gXCIxXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW0ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1BcnJheSA9IGZvcm0uZ2V0KGtleSk7XG4gICAgICAgICAgICBpZiAoZm9ybUFycmF5KSB7XG4gICAgICAgICAgICAgIGNvbnN0IGZybUdyb3VwID0gKGZvcm1BcnJheSBhcyBGb3JtQXJyYXkpLmF0KGkpO1xuICAgICAgICAgICAgICBpZiAoZnJtR3JvdXApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRGb3JtTW9kZWwoaXRlbVtpXSwgZnJtR3JvdXAgYXMgRm9ybUdyb3VwKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgbW9kZWxba2V5XSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5nZXRGb3JtTW9kZWwodGhpcy5fZm9ybU1vZGVsWzBdLCBrZXkpO1xuICAgICAgICAgIGlmIChub2RlICYmICghbm9kZS5taW5PY2N1cnMgfHwgcGFyc2VJbnQobm9kZS5taW5PY2N1cnMsIDEwKSA9PT0gMCkpIHtcbiAgICAgICAgICAgIG5vZGUubWluT2NjdXJzID0gXCIxXCI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IF9mb3JtID0gZm9ybS5nZXQoa2V5KSBhcyBGb3JtR3JvdXBcbiAgICAgICAgICBpZiAoX2Zvcm0pIHtcbiAgICAgICAgICAgIGlmIChub2RlLmRhdGFUeXBlID09PSAnY2hvaWNlJykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgY29uc3QgY2hvaWNrS2V5ID0gT2JqZWN0LmtleXMobW9kZWxba2V5XSlbMF07XG4gICAgICAgICAgICAgIGNvbnN0IGNob2ljZUVsZSA9IG5vZGUuZWxlbWVudHMuZmluZCgoaXRlbTogU2NoZW1hTW9kZWwpID0+IGl0ZW0uaWQgPT09IGNob2lja0tleSk7XG4gICAgICAgICAgICAgIG5vZGUuY2hvaWNlRm9ybUNvbnRyb2wuc2V0VmFsdWUoY2hvaWNrS2V5KTtcbiAgICAgICAgICAgICAgY2hvaWNlRWxlLmhpZGRlbiA9IGZhbHNlO1xuICAgICAgICAgICAgICBjb25zdCBuZXdOb2RlID0gc3RydWN0dXJlZENsb25lKGNob2ljZUVsZSk7XG4gICAgICAgICAgICAgIGlmIChuZXdOb2RlLmVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gdGhpcy5nZXRGb3JtR3JvdXBDb250cm9scyhuZXdOb2RlLmVsZW1lbnRzLCBbXSwgMCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgX2Zvcm0uYWRkQ29udHJvbChuZXdOb2RlLmlkLCBncm91cCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuZ2V0Rm9ybUNvbnRyb2woJycpO1xuICAgICAgICAgICAgICAgIF9mb3JtLmFkZENvbnRyb2wobmV3Tm9kZS5pZCwgY29udHJvbCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaW5pdEZvcm1Nb2RlbChtb2RlbFtrZXldLCBfZm9ybSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGNvbnN0IF9mb3JtID0gZm9ybS5nZXQoa2V5KSBhcyBGb3JtQ29udHJvbDtcbiAgICAgICAgICBfZm9ybS5zZXRWYWx1ZShtb2RlbFtrZXldKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShtb2RlbCkpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kZWwubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgZnJtR3JvdXAgPSAoZm9ybSBhcyBGb3JtQXJyYXkpLmF0KGkpO1xuICAgICAgICB0aGlzLmluaXRGb3JtTW9kZWwobW9kZWxbaV0sIGZybUdyb3VwIGFzIEZvcm1Hcm91cCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldEZvcm1Hcm91cENvbnRyb2xzKGpzb246IFNjaGVtYU1vZGVsW10sIGtleXM6IGFueSwgaW5kZXg6IG51bWJlciA9IDAsIGNob2ljZUVsZTogYm9vbGVhbiA9IGZhbHNlKTogRm9ybUdyb3VwIHtcbiAgICBsZXQgY29udHJvbDogYW55ID0ge307XG4gICAgbGV0IGNvbnRyb2xzOiBhbnk7XG4gICAgbGV0IHZhbHVlID0ge307XG5cbiAgICBqc29uLmZvckVhY2goKGl0ZW06IFNjaGVtYU1vZGVsKSA9PiB7XG4gICAgICBpdGVtLmhpZGRlbiA9IGNob2ljZUVsZTtcbiAgICAgIHZhbHVlID0gaXRlbS5lbGVtZW50cztcbiAgICAgIGNvbnN0IGlkID0gaXRlbS5pZFxuICAgICAgY29uc3QgZWxlbWVudCA9IHsgLi4uaXRlbSwgZWxlbWVudHM6IFtdLCBpZCB9O1xuICAgICAgaWYgKGl0ZW0uZWxlbWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICBsZXQgY2hvaWNlID0gaXRlbS5kYXRhVHlwZSA9PT0gJ2Nob2ljZSc7XG4gICAgICAgIGlmIChjaG9pY2UpIHtcbiAgICAgICAgICBlbGVtZW50LmNob2ljZUZvcm1Db250cm9sID0gdGhpcy5nZXRGb3JtQ29udHJvbCgnJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubWF4T2NjdXJzKGl0ZW0ubWF4T2NjdXJzKSkge1xuICAgICAgICAgIGVsZW1lbnQudW5pcXVlSWQgPSBgJHtlbGVtZW50LmlkfV8ke2luZGV4fWA7XG4gICAgICAgICAga2V5cy5wdXNoKHsgaWQ6IGVsZW1lbnQuaWQsIG11bHRpOiB0cnVlLCB4cGF0aDogZWxlbWVudC54cGF0aCwgZWxlbWVudHM6IFtlbGVtZW50XSB9KTtcbiAgICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRGb3JtR3JvdXBDb250cm9scyhpdGVtLmVsZW1lbnRzLCBlbGVtZW50LmVsZW1lbnRzLCBpbmRleCwgY2hvaWNlKTtcbiAgICAgICAgICBjb250cm9scyA9IHRoaXMuZmIuYXJyYXkoW10pO1xuICAgICAgICAgIGlmICghY2hvaWNlKSB7XG4gICAgICAgICAgICBjb250cm9scy5wdXNoKGRhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb250cm9sW2lkXSA9IGNvbnRyb2xzO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGl0ZW0ubXVsdGkgJiYgIWl0ZW0uaXNGb3JtQ29udHJvbHMpIHtcbiAgICAgICAgICBrZXlzLnB1c2goeyBpZDogZWxlbWVudC5pZCwgbXVsdGk6IHRydWUsIHhwYXRoOiBlbGVtZW50LnhwYXRoLCBlbGVtZW50czogZWxlbWVudC5lbGVtZW50cyB9KTtcbiAgICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRGb3JtR3JvdXBDb250cm9scyhpdGVtLmVsZW1lbnRzW2l0ZW0uZWxlbWVudHMubGVuZ3RoIC0gMV0uZWxlbWVudHMsIGVsZW1lbnQuZWxlbWVudHMsIGluZGV4LCBjaG9pY2UpO1xuICAgICAgICAgIGNvbnRyb2xzID0gdGhpcy5mYi5hcnJheShbXSk7XG4gICAgICAgICAgaWYgKCFjaG9pY2UpIHtcbiAgICAgICAgICAgIGNvbnRyb2xzLnB1c2goZGF0YSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRyb2xbaWRdID0gY29udHJvbHM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXRlbS5tdWx0aSAmJiBpdGVtLmlzRm9ybUNvbnRyb2xzKSB7XG4gICAgICAgICAgaWYgKGl0ZW0uZWxlbWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgaXRlbS5lbGVtZW50cy5zcGxpY2UoMSwgaXRlbS5lbGVtZW50cy5sZW5ndGggLSAxKTtcbiAgICAgICAgICB9XG4gICAgICAgICAga2V5cy5wdXNoKGl0ZW0pO1xuICAgICAgICAgIGNvbnRyb2xbaWRdID0gdGhpcy5mYi5hcnJheShbdGhpcy5nZXRGb3JtQ29udHJvbChpdGVtLnZhbHVlIHx8IFwiXCIpXSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAga2V5cy5wdXNoKGVsZW1lbnQpO1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmdldEZvcm1Hcm91cENvbnRyb2xzKGl0ZW0uZWxlbWVudHMsIGVsZW1lbnQuZWxlbWVudHMsIGluZGV4LCBjaG9pY2UpO1xuICAgICAgICAgIGlmICghY2hvaWNlKSB7XG4gICAgICAgICAgICBjb250cm9sW2lkXSA9IGRhdGE7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnRyb2xbaWRdID0gdGhpcy5mYi5ncm91cCh7fSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKHRoaXMubWF4T2NjdXJzKGl0ZW0ubWF4T2NjdXJzKSkge1xuICAgICAgICBrZXlzLnB1c2goeyBpZDogZWxlbWVudC5pZCwgbXVsdGk6IHRydWUsIHhwYXRoOiBlbGVtZW50LnhwYXRoLCBlbGVtZW50czogW2VsZW1lbnRdLCBpc0Zvcm1Db250cm9sczogdHJ1ZSB9KTtcbiAgICAgICAgY29udHJvbFtpZF0gPSB0aGlzLmZiLmFycmF5KFt0aGlzLmdldEZvcm1Db250cm9sKGl0ZW0udmFsdWUpXSk7XG4gICAgICB9IGVsc2UgaWYgKGl0ZW0uaXNDdXJyZW5jeSkge1xuICAgICAgICBjb25zdCBfYW1vdW50Q3VycmVuY3kgPSB0aGlzLmdldEFtb3VudEN1cnJlbmN5KGl0ZW0pO1xuICAgICAgICBrZXlzLnB1c2goZWxlbWVudCk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmdldEZvcm1Hcm91cENvbnRyb2xzKF9hbW91bnRDdXJyZW5jeSwgZWxlbWVudC5lbGVtZW50cywgMCwgZmFsc2UpO1xuICAgICAgICBjb250cm9sW2l0ZW0uaWRdID0gZGF0YTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBrZXlzLnB1c2goZWxlbWVudCk7XG4gICAgICAgIGNvbnRyb2xbaWRdID0gdGhpcy5nZXRGb3JtQ29udHJvbChpdGVtLnZhbHVlIHx8IFwiXCIpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5ldyBGb3JtR3JvdXAoY29udHJvbCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Rm9ybUNvbnRyb2wodmFsdWVzOiBhbnkpOiBGb3JtQ29udHJvbCB7XG4gICAgcmV0dXJuIG5ldyBGb3JtQ29udHJvbCh2YWx1ZXMgfHwgXCJcIiwge1xuICAgICAgdXBkYXRlT246ICdibHVyJ1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHNhbml0aXplID0gKG9iajogYW55KTogYW55ID0+IHtcbiAgICBpZiAob2JqID09PSBudWxsIHx8IG9iaiA9PT0gXCJcIikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgY29uc3QgY2xlYW5lZE9iajogYW55ID0gW107XG4gICAgICBmb3IgKGNvbnN0IGluZGV4IGluIG9iaikge1xuICAgICAgICBjb25zdCBjbGVhbmVkVmFsdWUgPSB0aGlzLnNhbml0aXplKG9ialtpbmRleF0pO1xuICAgICAgICBpZiAoY2xlYW5lZFZhbHVlICE9PSBudWxsICYmIGNsZWFuZWRWYWx1ZSAhPT0gXCJcIiAmJiBPYmplY3Qua2V5cyhjbGVhbmVkVmFsdWUpLmxlbmd0aCA+IDAgJiYgKCFBcnJheS5pc0FycmF5KGNsZWFuZWRWYWx1ZSkgfHwgY2xlYW5lZFZhbHVlLmxlbmd0aCA+IDApKSB7XG4gICAgICAgICAgY2xlYW5lZE9iai5wdXNoKGNsZWFuZWRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBjbGVhbmVkT2JqO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGNvbnN0IGNsZWFuZWRPYmo6IGFueSA9IHt9O1xuXG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICAgICAgY29uc3QgY2xlYW5lZFZhbHVlID0gdGhpcy5zYW5pdGl6ZShvYmpba2V5XSk7XG4gICAgICAgIGlmIChjbGVhbmVkVmFsdWUgIT09IG51bGwgJiYgY2xlYW5lZFZhbHVlICE9PSBcIlwiICYmIE9iamVjdC5rZXlzKGNsZWFuZWRWYWx1ZSkubGVuZ3RoID4gMCAmJiAoIUFycmF5LmlzQXJyYXkoY2xlYW5lZFZhbHVlKSB8fCBjbGVhbmVkVmFsdWUubGVuZ3RoID4gMCkpIHtcbiAgICAgICAgICBjbGVhbmVkT2JqW2tleV0gPSBjbGVhbmVkVmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBjbGVhbmVkT2JqO1xuICAgIH1cblxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICBwcml2YXRlIGdldEZvcm1Nb2RlbCA9IChvYmplY3Q6IGFueSwga2V5OiBzdHJpbmcpOiBhbnkgPT4ge1xuICAgIGlmIChvYmplY3QpIHtcbiAgICAgIGlmIChvYmplY3QuZWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICAgIGlmIChvYmplY3QuaWQgPT09IGtleSkge1xuICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvYmplY3QuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBvYmogPSB0aGlzLmdldEZvcm1Nb2RlbChvYmplY3QuZWxlbWVudHNbaV0sIGtleSk7XG4gICAgICAgICAgaWYgKG9iailcbiAgICAgICAgICAgIHJldHVybiBvYmo7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChvYmplY3QuaWQgPT09IGtleSkge1xuICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldEFtb3VudEN1cnJlbmN5KGl0ZW06IFNjaGVtYU1vZGVsKTogU2NoZW1hTW9kZWxbXSB7XG4gICAgY29uc3QgZWxlbWVudHM6IFNjaGVtYU1vZGVsW10gPSBbXTtcbiAgICBjb25zdCBjY3kgPSBzdHJ1Y3R1cmVkQ2xvbmUoaXRlbSk7XG4gICAgY29uc3QgYW10ID0gc3RydWN0dXJlZENsb25lKGl0ZW0pO1xuXG4gICAgY2N5LmlkID0gYCR7Y2N5LmlkfV9jY3lgO1xuICAgIGNjeS5uYW1lID0gXCJDY3lcIjtcbiAgICBjY3kuZnJhY3Rpb25EaWdpdHMgPSAnJztcbiAgICBjY3kudG90YWxEaWdpdHMgPSAnJztcbiAgICBjY3kubWF4TGVuZ3RoID0gXCIzXCJcbiAgICBjY3kueHBhdGggPSBgJHtjY3kueHBhdGh9QGNjeWA7XG4gICAgY2N5LmlzQ3VycmVuY3kgPSBmYWxzZTtcbiAgICBlbGVtZW50cy5wdXNoKGNjeSk7XG5cbiAgICBhbXQuaWQgPSBgJHthbXQuaWR9X2FtdGA7XG4gICAgYW10LnhwYXRoID0gYCR7YW10LnhwYXRofS9hbXRgO1xuICAgIGFtdC5pc0N1cnJlbmN5ID0gZmFsc2U7XG4gICAgYW10LnBhdHRlcm4gPSAnJztcbiAgICBlbGVtZW50cy5wdXNoKGFtdCk7XG4gICAgcmV0dXJuIGVsZW1lbnRzO1xuICB9XG59XG4iXX0=
257
+ }], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i2.CustomDateAdapter }]; } });
258
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWlzby1mb3JtLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtaXNvLWZvcm0vc3JjL2xpYi9uZ3gtaXNvLWZvcm0uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUEwQixNQUFNLGdCQUFnQixDQUFDOzs7O0FBT2hGLE1BQU0sT0FBTyxhQUFhO0lBRXhCLFlBQ1UsRUFBZSxFQUNmLFdBQThCO1FBRDlCLE9BQUUsR0FBRixFQUFFLENBQWE7UUFDZixnQkFBVyxHQUFYLFdBQVcsQ0FBbUI7UUFIakMsZUFBVSxHQUFVLEVBQUUsQ0FBQztRQWlOdkIsYUFBUSxHQUFHLENBQUMsR0FBUSxFQUFPLEVBQUU7WUFDbEMsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLEdBQUcsS0FBSyxFQUFFLEVBQUU7Z0JBQzlCLE9BQU8sSUFBSSxDQUFDO2FBQ2I7WUFFRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ3RCLE1BQU0sVUFBVSxHQUFRLEVBQUUsQ0FBQztnQkFDM0IsS0FBSyxNQUFNLEtBQUssSUFBSSxHQUFHLEVBQUU7b0JBQ3ZCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7b0JBQy9DLElBQ0UsWUFBWSxLQUFLLElBQUk7d0JBQ3JCLFlBQVksS0FBSyxFQUFFO3dCQUNuQixNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDO3dCQUNwQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUN6RDt3QkFDQSxVQUFVLENBQUMs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QUcsR0FBRyxDQUFDO1FBQ3BCLEdBQUcsQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFHLENBQUMsS0FBSyxNQUFNLENBQUM7UUFDL0IsR0FBRyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDdkIsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVuQixHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDO1FBQ3pCLEdBQUcsQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFHLENBQUMsS0FBSyxNQUFNLENBQUM7UUFDL0IsR0FBRyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDdkIsR0FBRyxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDakIsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuQixPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDOzhHQWxTVSxhQUFhO2tIQUFiLGFBQWEsY0FGWixNQUFNOzsyRkFFUCxhQUFhO2tCQUh6QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybUNvbnRyb2wsIEZvcm1BcnJheSwgRm9ybUJ1aWxkZXIgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTY2hlbWFNb2RlbCB9IGZyb20gJy4vTW9kZWxzL1NjaGVtYSc7XG5pbXBvcnQgeyBDdXN0b21EYXRlQWRhcHRlciB9IGZyb20gJy4vc2hhcmVkL3NlcnZpY2VzL2N1c3RvbS1kYXRlLWFkYXB0ZXInO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgTmd4SXNvU2VydmljZSB7XG4gIHB1YmxpYyBfZm9ybU1vZGVsOiBhbnlbXSA9IFtdO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIGRhdGVTZXJ2aWNlOiBDdXN0b21EYXRlQWRhcHRlclxuICApIHt9XG5cbiAgcHVibGljIG1heE9jY3VycyhtYXhPY2N1cnM6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBtYXhPY2N1cnMgPT09ICd1bmJvdW5kZWQnIHx8IHBhcnNlSW50KG1heE9jY3VycywgMTApID4gMTtcbiAgfVxuXG4gIHB1YmxpYyBpbml0Rm9ybU1vZGVsKG1vZGVsOiBhbnksIGZvcm06IEZvcm1Hcm91cCB8IEZvcm1BcnJheSk6IHZvaWQge1xuICAgIGlmICh0eXBlb2YgbW9kZWwgPT09ICdvYmplY3QnKSB7XG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiBtb2RlbCkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShtb2RlbFtrZXldKSkge1xuICAgICAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSB0aGlzLmdldEZvcm1Nb2RlbCh0aGlzLl9mb3JtTW9kZWxbMF0sIGtleSk7XG4gICAgICAgICAgY29uc3QgaXRlbSA9IG1vZGVsW2tleV07XG4gICAgICAgICAgY29uc3QgZm9ybUFycmF5ID0gZm9ybS5nZXQoa2V5KSBhcyBGb3JtQXJyYXk7XG4gICAgICAgICAgaWYgKGZvcm1BcnJheSAmJiBmb3JtQXJyYXkubGVuZ3RoICE9PSBpdGVtLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgbmV3RWxlID0gc3RydWN0dXJlZENsb25lKFxuICAgICAgICAgICAgICBwYXJlbnROb2RlLmVsZW1lbnRzW3BhcmVudE5vZGUuZWxlbWVudHMubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgbmV3RWxlLm1heE9jY3VycyAmJlxuICAgICAgICAgICAgICAgIHBhcnNlSW50KG5ld0VsZS5tYXhPY2N1cnMsIDEwKSA8PSBwYXJlbnROb2RlLmVsZW1lbnRzLmxlbmd0aFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgY29uc3QgbmV3S2V5czogYW55ID0gW107XG4gICAgICAgICAgICAgIGNvbnN0IGdyb3VwQ29udHJvbHMgPSB0aGlzLmdldEZvcm1Hcm91cENvbnRyb2xzKFxuICAgICAgICAgICAgICAgIG5ld0VsZS5lbGVtZW50cyxcbiAgICAgICAgICAgICAgICBuZXdLZXlzLFxuICAgICAgICAgICAgICAgIHBhcmVudE5vZGUuZWxlbWVudHMubGVuZ3RoIC0gMVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBwYXJlbnROb2RlLmVsZW1lbnRzLnB1c2gobmV3RWxlKTtcbiAgICAgICAgICAgICAgZm9ybUFycmF5LnB1c2goZ3JvdXBDb250cm9scyk7XG4gICAgICAgICAgICAgIHBhcmVudE5vZGUuZWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudDogU2NoZW1hTW9kZWwpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAhZWxlbWVudC5taW5PY2N1cnMgfHxcbiAgICAgICAgICAgICAgICAgIHBhcnNlSW50KGVsZW1lbnQubWluT2NjdXJzLCAxMCkgPT09IDBcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQubWluT2NjdXJzID0gJzEnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtQXJyYXkgPSBmb3JtLmdldChrZXkpO1xuICAgICAgICAgICAgaWYgKGZvcm1BcnJheSkge1xuICAgICAgICAgICAgICBjb25zdCBmcm1Hcm91cCA9IChmb3JtQXJyYXkgYXMgRm9ybUFycmF5KS5hdChpKTtcbiAgICAgICAgICAgICAgaWYgKGZybUdyb3VwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0Rm9ybU1vZGVsKGl0ZW1baV0sIGZybUdyb3VwIGFzIEZvcm1Hcm91cCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG1vZGVsW2tleV0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Rm9ybU1vZGVsKHRoaXMuX2Zvcm1Nb2RlbFswXSwga2V5KTtcbiAgICAgICAgICBpZiAobm9kZSAmJiAoIW5vZGUubWluT2NjdXJzIHx8IHBhcnNlSW50KG5vZGUubWluT2NjdXJzLCAxMCkgPT09IDApKSB7XG4gICAgICAgICAgICBub2RlLm1pbk9jY3VycyA9ICcxJztcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgX2Zvcm0gPSBmb3JtLmdldChrZXkpIGFzIEZvcm1Hcm91cDtcbiAgICAgICAgICBpZiAoX2Zvcm0pIHtcbiAgICAgICAgICAgIGlmIChub2RlLmRhdGFUeXBlID09PSAnY2hvaWNlJykge1xuICAgICAgICAgICAgICBjb25zdCBjaG9pY2VLZXkgPSBPYmplY3Qua2V5cyhtb2RlbFtrZXldKVswXTtcbiAgICAgICAgICAgICAgY29uc3QgY2hvaWNlRWxlID0gbm9kZS5lbGVtZW50cy5maW5kKFxuICAgICAgICAgICAgICAgIChpdGVtOiBTY2hlbWFNb2RlbCkgPT4gaXRlbS5pZCA9PT0gY2hvaWNlS2V5XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIG5vZGUuY2hvaWNlS2V5ID0gY2hvaWNlS2V5O1xuICAgICAgICAgICAgICBjaG9pY2VFbGUuaGlkZGVuID0gZmFsc2U7XG4gICAgICAgICAgICAgIGNvbnN0IG5ld05vZGUgPSBzdHJ1Y3R1cmVkQ2xvbmUoY2hvaWNlRWxlKTtcbiAgICAgICAgICAgICAgaWYgKG5ld05vZGUuZWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLmdldEZvcm1Hcm91cENvbnRyb2xzKFxuICAgICAgICAgICAgICAgICAgbmV3Tm9kZS5lbGVtZW50cyxcbiAgICAgICAgICAgICAgICAgIFtdLFxuICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgIHRydWVcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIF9mb3JtLmFkZENvbnRyb2wobmV3Tm9kZS5pZCwgZ3JvdXApO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmdldEZvcm1Db250cm9sKCcnKTtcbiAgICAgICAgICAgICAgICBfZm9ybS5hZGRDb250cm9sKG5ld05vZGUuaWQsIGNvbnRyb2wpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmluaXRGb3JtTW9kZWwobW9kZWxba2V5XSwgX2Zvcm0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBfZm9ybSA9IGZvcm0uZ2V0KGtleSkgYXMgRm9ybUNvbnRyb2w7XG4gICAgICAgICAgX2Zvcm0uc2V0VmFsdWUobW9kZWxba2V5XSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkobW9kZWwpKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZGVsLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGZybUdyb3VwID0gKGZvcm0gYXMgRm9ybUFycmF5KS5hdChpKTtcbiAgICAgICAgdGhpcy5pbml0Rm9ybU1vZGVsKG1vZGVsW2ldLCBmcm1Hcm91cCBhcyBGb3JtR3JvdXApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRGb3JtR3JvdXBDb250cm9scyhcbiAgICBqc29uOiBTY2hlbWFNb2RlbFtdLFxuICAgIGtleXM6IGFueSxcbiAgICBpbmRleDogbnVtYmVyID0gMCxcbiAgICBjaG9pY2VFbGU6IGJvb2xlYW4gPSBmYWxzZVxuICApOiBGb3JtR3JvdXAge1xuICAgIGxldCBjb250cm9sOiBhbnkgPSB7fTtcbiAgICBsZXQgY29udHJvbHM6IGFueTtcbiAgICBsZXQgdmFsdWUgPSB7fTtcblxuICAgIGpzb24uZm9yRWFjaCgoaXRlbTogU2NoZW1hTW9kZWwpID0+IHtcbiAgICAgIGl0ZW0uaGlkZGVuID0gY2hvaWNlRWxlO1xuICAgICAgdmFsdWUgPSBpdGVtLmVsZW1lbnRzO1xuICAgICAgY29uc3QgaWQgPSBpdGVtLmlkO1xuICAgICAgY29uc3QgZWxlbWVudCA9IHsgLi4uaXRlbSwgZWxlbWVudHM6IFtdLCBpZCB9O1xuICAgICAgaWYgKGl0ZW0uZWxlbWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICBsZXQgY2hvaWNlID0gaXRlbS5kYXRhVHlwZSA9PT0gJ2Nob2ljZSc7XG4gICAgICAgIGlmIChjaG9pY2UpIHtcbiAgICAgICAgICBlbGVtZW50LmNob2ljZUtleSA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1heE9jY3VycyhpdGVtLm1heE9jY3VycykpIHtcbiAgICAgICAgICBlbGVtZW50LnVuaXF1ZUlkID0gYCR7ZWxlbWVudC5pZH1fJHtpbmRleH1gO1xuICAgICAgICAgIGtleXMucHVzaCh7XG4gICAgICAgICAgICBpZDogZWxlbWVudC5pZCxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICAgICAgeHBhdGg6IGVsZW1lbnQueHBhdGgsXG4gICAgICAgICAgICBlbGVtZW50czogW2VsZW1lbnRdLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmdldEZvcm1Hcm91cENvbnRyb2xzKFxuICAgICAgICAgICAgaXRlbS5lbGVtZW50cyxcbiAgICAgICAgICAgIGVsZW1lbnQuZWxlbWVudHMsXG4gICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgIGNob2ljZVxuICAgICAgICAgICk7XG4gICAgICAgICAgY29udHJvbHMgPSB0aGlzLmZiLmFycmF5KFtdKTtcbiAgICAgICAgICBpZiAoIWNob2ljZSkge1xuICAgICAgICAgICAgY29udHJvbHMucHVzaChkYXRhKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udHJvbFtpZF0gPSBjb250cm9scztcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtLm11bHRpICYmICFpdGVtLmlzRm9ybUNvbnRyb2xzKSB7XG4gICAgICAgICAga2V5cy5wdXNoKHtcbiAgICAgICAgICAgIGlkOiBlbGVtZW50LmlkLFxuICAgICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgICAgICB4cGF0aDogZWxlbWVudC54cGF0aCxcbiAgICAgICAgICAgIGVsZW1lbnRzOiBlbGVtZW50LmVsZW1lbnRzLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmdldEZvcm1Hcm91cENvbnRyb2xzKFxuICAgICAgICAgICAgaXRlbS5lbGVtZW50c1tpdGVtLmVsZW1lbnRzLmxlbmd0aCAtIDFdLmVsZW1lbnRzLFxuICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50cyxcbiAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgY2hvaWNlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb250cm9scyA9IHRoaXMuZmIuYXJyYXkoW10pO1xuICAgICAgICAgIGlmICghY2hvaWNlKSB7XG4gICAgICAgICAgICBjb250cm9scy5wdXNoKGRhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb250cm9sW2lkXSA9IGNvbnRyb2xzO1xuICAgICAgICB9IGVsc2UgaWYgKGl0ZW0ubXVsdGkgJiYgaXRlbS5pc0Zvcm1Db250cm9scykge1xuICAgICAgICAgIGlmIChpdGVtLmVsZW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIGl0ZW0uZWxlbWVudHMuc3BsaWNlKDEsIGl0ZW0uZWxlbWVudHMubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGtleXMucHVzaChpdGVtKTtcbiAgICAgICAgICBjb250cm9sW2lkXSA9IHRoaXMuZmIuYXJyYXkoW3RoaXMuZ2V0Rm9ybUNvbnRyb2woaXRlbS52YWx1ZSB8fCAnJyldKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBrZXlzLnB1c2goZWxlbWVudCk7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0Rm9ybUdyb3VwQ29udHJvbHMoXG4gICAgICAgICAgICBpdGVtLmVsZW1lbnRzLFxuICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50cyxcbiAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgY2hvaWNlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoIWNob2ljZSkge1xuICAgICAgICAgICAgY29udHJvbFtpZF0gPSBkYXRhO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb250cm9sW2lkXSA9IHRoaXMuZmIuZ3JvdXAoe30pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0aGlzLm1heE9jY3VycyhpdGVtLm1heE9jY3VycykpIHtcbiAgICAgICAga2V5cy5wdXNoKHtcbiAgICAgICAgICBpZDogZWxlbWVudC5pZCxcbiAgICAgICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgICAgICB4cGF0aDogZWxlbWVudC54cGF0aCxcbiAgICAgICAgICBlbGVtZW50czogW2VsZW1lbnRdLFxuICAgICAgICAgIGlzRm9ybUNvbnRyb2xzOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgY29udHJvbFtpZF0gPSB0aGlzLmZiLmFycmF5KFt0aGlzLmdldEZvcm1Db250cm9sKGl0ZW0udmFsdWUpXSk7XG4gICAgICB9IGVsc2UgaWYgKGl0ZW0uaXNDdXJyZW5jeSkge1xuICAgICAgICBjb25zdCBfYW1vdW50Q3VycmVuY3kgPSB0aGlzLmdldEFtb3VudEN1cnJlbmN5KGl0ZW0pO1xuICAgICAgICBrZXlzLnB1c2goZWxlbWVudCk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmdldEZvcm1Hcm91cENvbnRyb2xzKFxuICAgICAgICAgIF9hbW91bnRDdXJyZW5jeSxcbiAgICAgICAgICBlbGVtZW50LmVsZW1lbnRzLFxuICAgICAgICAgIDAsXG4gICAgICAgICAgZmFsc2VcbiAgICAgICAgKTtcbiAgICAgICAgY29udHJvbFtpdGVtLmlkXSA9IGRhdGE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBrZXlzLnB1c2goZWxlbWVudCk7XG4gICAgICAgIGNvbnRyb2xbaWRdID0gdGhpcy5nZXRGb3JtQ29udHJvbChpdGVtLnZhbHVlIHx8ICcnKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBuZXcgRm9ybUdyb3VwKGNvbnRyb2wpO1xuICB9XG5cbiAgcHVibGljIGdldEZvcm1Db250cm9sKHZhbHVlczogYW55KTogRm9ybUNvbnRyb2wge1xuICAgIHJldHVybiBuZXcgRm9ybUNvbnRyb2wodmFsdWVzIHx8ICcnLCB7XG4gICAgICB1cGRhdGVPbjogJ2JsdXInLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHNhbml0aXplID0gKG9iajogYW55KTogYW55ID0+IHtcbiAgICBpZiAob2JqID09PSBudWxsIHx8IG9iaiA9PT0gJycpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgIGNvbnN0IGNsZWFuZWRPYmo6IGFueSA9IFtdO1xuICAgICAgZm9yIChjb25zdCBpbmRleCBpbiBvYmopIHtcbiAgICAgICAgY29uc3QgY2xlYW5lZFZhbHVlID0gdGhpcy5zYW5pdGl6ZShvYmpbaW5kZXhdKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNsZWFuZWRWYWx1ZSAhPT0gbnVsbCAmJlxuICAgICAgICAgIGNsZWFuZWRWYWx1ZSAhPT0gJycgJiZcbiAgICAgICAgICBPYmplY3Qua2V5cyhjbGVhbmVkVmFsdWUpLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAoIUFycmF5LmlzQXJyYXkoY2xlYW5lZFZhbHVlKSB8fCBjbGVhbmVkVmFsdWUubGVuZ3RoID4gMClcbiAgICAgICAgKSB7XG4gICAgICAgICAgY2xlYW5lZE9iai5wdXNoKGNsZWFuZWRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBjbGVhbmVkT2JqO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgb2JqIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgY29uc3QgY2xlYW5lZE9iaiA9IHRoaXMuZGF0ZVNlcnZpY2UuZm9ybWF0KG9iaiwgJ1lZWVktTU0tREQnKTtcbiAgICAgIHJldHVybiBjbGVhbmVkT2JqO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGNvbnN0IGNsZWFuZWRPYmo6IGFueSA9IHt9O1xuXG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICAgICAgY29uc3QgY2xlYW5lZFZhbHVlID0gdGhpcy5zYW5pdGl6ZShvYmpba2V5XSk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjbGVhbmVkVmFsdWUgIT09IG51bGwgJiZcbiAgICAgICAgICBjbGVhbmVkVmFsdWUgIT09ICcnICYmXG4gICAgICAgICAgT2JqZWN0LmtleXMoY2xlYW5lZFZhbHVlKS5sZW5ndGggPiAwICYmXG4gICAgICAgICAgKCFBcnJheS5pc0FycmF5KGNsZWFuZWRWYWx1ZSkgfHwgY2xlYW5lZFZhbHVlLmxlbmd0aCA+IDApXG4gICAgICAgICkge1xuICAgICAgICAgIGNsZWFuZWRPYmpba2V5XSA9IGNsZWFuZWRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNsZWFuZWRPYmo7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iajtcbiAgfTtcblxuICBwcml2YXRlIGdldEZvcm1Nb2RlbCA9IChvYmplY3Q6IGFueSwga2V5OiBzdHJpbmcpOiBhbnkgPT4ge1xuICAgIGlmIChvYmplY3QpIHtcbiAgICAgIGlmIChvYmplY3QuZWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICAgIGlmIChvYmplY3QuaWQgPT09IGtleSkge1xuICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvYmplY3QuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBvYmogPSB0aGlzLmdldEZvcm1Nb2RlbChvYmplY3QuZWxlbWVudHNbaV0sIGtleSk7XG4gICAgICAgICAgaWYgKG9iaikgcmV0dXJuIG9iajtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG9iamVjdC5pZCA9PT0ga2V5KSB7XG4gICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIGdldEFtb3VudEN1cnJlbmN5KGl0ZW06IFNjaGVtYU1vZGVsKTogU2NoZW1hTW9kZWxbXSB7XG4gICAgY29uc3QgZWxlbWVudHM6IFNjaGVtYU1vZGVsW10gPSBbXTtcbiAgICBjb25zdCBjY3kgPSBzdHJ1Y3R1cmVkQ2xvbmUoaXRlbSk7XG4gICAgY29uc3QgYW10ID0gc3RydWN0dXJlZENsb25lKGl0ZW0pO1xuXG4gICAgY2N5LmlkID0gYCR7Y2N5LmlkfV9jY3lgO1xuICAgIGNjeS5uYW1lID0gJ0NjeSc7XG4gICAgY2N5LmZyYWN0aW9uRGlnaXRzID0gJyc7XG4gICAgY2N5LnRvdGFsRGlnaXRzID0gJyc7XG4gICAgY2N5Lm1heExlbmd0aCA9ICczJztcbiAgICBjY3kueHBhdGggPSBgJHtjY3kueHBhdGh9QGNjeWA7XG4gICAgY2N5LmlzQ3VycmVuY3kgPSBmYWxzZTtcbiAgICBlbGVtZW50cy5wdXNoKGNjeSk7XG5cbiAgICBhbXQuaWQgPSBgJHthbXQuaWR9X2FtdGA7XG4gICAgYW10LnhwYXRoID0gYCR7YW10LnhwYXRofS9hbXRgO1xuICAgIGFtdC5pc0N1cnJlbmN5ID0gZmFsc2U7XG4gICAgYW10LnBhdHRlcm4gPSAnJztcbiAgICBlbGVtZW50cy5wdXNoKGFtdCk7XG4gICAgcmV0dXJuIGVsZW1lbnRzO1xuICB9XG59XG4iXX0=