@alfresco/adf-core 8.1.0-15154809688 → 8.1.0-15157222665

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.
@@ -18,7 +18,7 @@
18
18
  "COMPLETE": "Abschließen",
19
19
  "CANCEL": "Abbrechen",
20
20
  "CLAIM": "Beanspruchen",
21
- "UNCLAIM": "Freigeben ",
21
+ "UNCLAIM": "Anspruch aufheben",
22
22
  "START PROCESS": "Prozess starten",
23
23
  "DATA_LOADING": "Daten werden geladen",
24
24
  "CLOSE": "Schließen",
@@ -123,7 +123,7 @@ export class FormRendererComponent {
123
123
  useFactory: formRulesManagerFactory,
124
124
  deps: [Injector]
125
125
  }
126
- ], ngImport: i0, template: "<div id=\"adf-form-renderer\" class=\"{{ formDefinition.className }}\"\n [ngClass]=\"{ 'adf-readonly-form': formDefinition.readOnly }\">\n <div *ngIf=\"formDefinition.hasTabs()\">\n <div *ngIf=\"hasTabs()\" class=\"alfresco-tabs-widget\">\n <mat-tab-group>\n <mat-tab *ngFor=\"let tab of visibleTabs()\" [label]=\"tab.title | translate \">\n <ng-container class=\"adf-form-tab-content\">\n <ng-template *ngTemplateOutlet=\"render; context: { fieldToRender: tab.fields }\" />\n </ng-container>\n </mat-tab>\n </mat-tab-group>\n </div>\n </div>\n\n <div *ngIf=\"!formDefinition.hasTabs() && formDefinition.hasFields()\">\n <ng-template *ngTemplateOutlet=\"render; context: { fieldToRender: formDefinition.fields }\" />\n </div>\n</div>\n\n<ng-template #render let-fieldToRender=\"fieldToRender\">\n <div *ngFor=\"let currentRootElement of fieldToRender\">\n <div *ngIf=\"currentRootElement.type === 'container' || currentRootElement.type === 'group'\"\n [id]=\"'field-' + currentRootElement?.id + '-container'\"\n class=\"adf-container-widget\"\n [hidden]=\"!currentRootElement?.isVisible\">\n <adf-header-widget [element]=\"currentRootElement\" />\n <div *ngIf=\"currentRootElement?.form?.enableFixedSpace; else fixingTemplate\">\n <div class=\"adf-grid-list\"\n [ngStyle]=\"{ 'grid-template-columns': 'repeat(' + getNumberOfColumns(currentRootElement) + ', 1fr)' }\"\n *ngIf=\"currentRootElement?.isExpanded\">\n <div class=\"adf-grid-list-item\"\n *ngFor=\"let field of getContainerFields(currentRootElement)\"\n [ngStyle]=\"{ 'grid-area': 'auto / auto / span ' + (field?.rowspan || 1) + ' / span ' + (field?.colspan || 1) }\">\n <adf-form-field *ngIf=\"field\" [field]=\"field\" />\n </div>\n </div>\n </div>\n\n <ng-template #fixingTemplate>\n <section class=\"adf-grid-list-column-view\" *ngIf=\"currentRootElement?.isExpanded\">\n <div class=\"adf-grid-list-single-column\"\n *ngFor=\"let column of currentRootElement?.columns\"\n [style.width.%]=\"getColumnWidth(currentRootElement)\">\n <ng-container *ngFor=\"let field of column?.fields\">\n <ng-container *ngIf=\"field.type === 'section'; else formField\">\n <adf-form-section [field]=\"field\"/>\n </ng-container>\n <ng-template #formField>\n <div class=\"adf-grid-list-column-view-item\">\n <adf-form-field [field]=\"field\"/>\n </div>\n </ng-template>\n </ng-container>\n </div>\n </section>\n </ng-template>\n\n <ng-template #columnViewItem let-column=\"column\">\n <div class=\"adf-grid-list-column-view-item\" *ngFor=\"let field of column?.fields\">\n <adf-form-field *ngIf=\"field\" [field]=\"field\" />\n </div>\n </ng-template>\n </div>\n <div *ngIf=\"currentRootElement.type === 'dynamic-table'\" class=\"adf-container-widget\">\n <adf-form-field [field]=\"currentRootElement\" />\n </div>\n <div class=\"adf-container-widget\"\n *ngIf=\"currentRootElement.type === 'readonly' && currentRootElement.field.params.field.type === 'dynamic-table'\">\n <adf-form-field [field]=\"currentRootElement.field\"/>\n </div>\n </div>\n</ng-template>\n", styles: [".adf-hidden{display:none}.adf-field-list{padding:0;list-style-type:none;width:100%;height:100%}.alfresco-tabs-widget,.alfresco-tabs-widget .adf-form-tab-group{width:100%}.alfresco-tabs-widget .mat-mdc-tab-body{margin-bottom:8em}.alfresco-tabs-widget .mat-mdc-tab-header{z-index:10;margin:0;background-color:#fff;position:absolute;width:96%;margin-left:0!important;margin-right:10px!important;top:0}.alfresco-tabs-widget .mat-mdc-tab-body-wrapper{padding-top:5%}.mat-mdc-card-content:first-child{padding-top:1em}.adf-container-widget .adf-grid-list{display:grid}.adf-container-widget .adf-grid-list-column-view{display:flex;margin-right:-1%;width:100%}@media (max-width: 959.9px){.adf-container-widget .adf-grid-list-column-view{display:flow}}.adf-container-widget .adf-grid-list-column-view-item{width:100%;flex-grow:1;box-sizing:border-box;padding-left:1%;padding-right:1%}.adf-container-widget .adf-grid-list-single-column{display:flex;flex-direction:column;flex:1 1 auto}.adf-container-widget .adf-grid-list-item{box-sizing:border-box;padding-left:3px;padding-right:3px}@media (max-width: 959.9px){.adf-container-widget .adf-grid-list-item{flex:1 0 100%}.adf-container-widget .adf-grid-list--column-view{flex-direction:column}.adf-container-widget .adf-grid-list-single-column-xl{display:none}.adf-container-widget .adf-grid-list-single-column-s{display:block;width:90%!important}.adf-container-widget .adf-grid-list-column-view-item{flex:1 0 auto}}.adf-container-widget mat-input-placeholder{top:1.8em}.adf-container-widget .mat-focused{width:100%}.adf-container-widget .mat-focused .mdc-text-field--focused label{color:var(--theme-primary-color)}.adf-container-widget .mat-focused label{transition:transform .15s linear;background-color:.3s cubic-bezier(.55,0,.55,.2)}.adf-container-widget .mat-focused .mat-mdc-form-field-text-prefix{color:var(--theme-primary-color)}.adf-container-widget .mat-grid-tile{overflow:visible;width:80%}.adf-container-widget adf-form-field,.adf-container-widget mat-form-field{width:100%}.adf-form-container{max-width:100%;max-height:100%}.adf-form-container .mat-mdc-card{padding:16px 24px;overflow:hidden}.adf-form-container .mat-mdc-tab-header{position:fixed;z-index:1000}.adf-form-container .mat-mdc-card-header-text{margin:0}.adf-form-container .mat-mdc-card-content{overflow:hidden;padding-top:0}.adf-form-container mat-tab-label-text{font-size:var(--theme-subheading-2-font-size);line-height:var(--theme-headline-line-height);letter-spacing:-.4px;text-align:left;color:#0000008a;text-transform:uppercase}.adf-form-container .mdc-tab-indicator .mdc-tab-indicator__content--underline{border-top-width:4px}.adf-form-container .mat-mdc-text-field-wrapper{margin:0 12px 0 0}.adf-form-title{font-size:var(--theme-title-font-size);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.adf-form-reload-button{position:absolute;right:12px;top:30px}.adf-form-validation-button{position:absolute;right:50px;top:39px;color:var(--theme-accent-color)}.adf-form-validation-button .adf-invalid-color{color:var(--theme-warn-color)}.adf-form-hide-button{display:none}.adf-task-title{text-align:center}.adf-label{width:32px;height:16px;font-size:var(--theme-caption-font-size);line-height:var(--theme-headline-line-height);text-align:left;white-space:nowrap}.adf-form-mat-card-actions{padding-bottom:25px;padding-right:25px}.adf-form-mat-card-actions .mat-mdc-button{height:36px;border-radius:5px;width:auto;padding:0 16px;margin:0 8px;white-space:nowrap}.adf-form-mat-card-actions .mdc-button__label{min-width:58px}.adf-left-label-input-container{display:flex}.adf-left-label-input-container div:nth-child(2){flex:1}.adf-left-label-input-container .mat-mdc-floating-label{top:auto;bottom:0}.adf-left-label{line-height:64px;margin-right:15px}form-field{width:100%}form-field .mat-mdc-input-element{font-size:var(--theme-body-2-font-size);padding-top:8px;line-height:normal}.adf-error-messages-container{min-height:35px}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatTabsModule }, { kind: "component", type: i3.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { kind: "component", type: i3.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor", "aria-label", "aria-labelledby"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: FormFieldComponent, selector: "adf-form-field", inputs: ["field"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: HeaderWidgetComponent, selector: "adf-header-widget", inputs: ["element"] }, { kind: "component", type: FormSectionComponent, selector: "adf-form-section", inputs: ["field"] }], encapsulation: i0.ViewEncapsulation.None }); }
126
+ ], ngImport: i0, template: "<div id=\"adf-form-renderer\" class=\"{{ formDefinition.className }}\"\n [ngClass]=\"{ 'adf-readonly-form': formDefinition.readOnly }\">\n <div *ngIf=\"formDefinition.hasTabs()\">\n <div *ngIf=\"hasTabs()\" class=\"alfresco-tabs-widget\">\n <mat-tab-group>\n <mat-tab *ngFor=\"let tab of visibleTabs()\" [label]=\"tab.title | translate \">\n <ng-template matTabContent>\n <div class=\"adf-form-tab-content\">\n <ng-template *ngTemplateOutlet=\"render; context: { fieldToRender: tab.fields }\" />\n </div>\n </ng-template>\n </mat-tab>\n </mat-tab-group>\n </div>\n </div>\n\n <div *ngIf=\"!formDefinition.hasTabs() && formDefinition.hasFields()\">\n <ng-template *ngTemplateOutlet=\"render; context: { fieldToRender: formDefinition.fields }\" />\n </div>\n</div>\n\n<ng-template #render let-fieldToRender=\"fieldToRender\">\n <div *ngFor=\"let currentRootElement of fieldToRender\">\n <div *ngIf=\"currentRootElement.type === 'container' || currentRootElement.type === 'group'\"\n [id]=\"'field-' + currentRootElement?.id + '-container'\"\n class=\"adf-container-widget\"\n [hidden]=\"!currentRootElement?.isVisible\">\n <adf-header-widget [element]=\"currentRootElement\" />\n <div *ngIf=\"currentRootElement?.form?.enableFixedSpace; else fixingTemplate\">\n <div class=\"adf-grid-list\"\n [ngStyle]=\"{ 'grid-template-columns': 'repeat(' + getNumberOfColumns(currentRootElement) + ', 1fr)' }\"\n *ngIf=\"currentRootElement?.isExpanded\">\n <div class=\"adf-grid-list-item\"\n *ngFor=\"let field of getContainerFields(currentRootElement)\"\n [ngStyle]=\"{ 'grid-area': 'auto / auto / span ' + (field?.rowspan || 1) + ' / span ' + (field?.colspan || 1) }\">\n <adf-form-field *ngIf=\"field\" [field]=\"field\" />\n </div>\n </div>\n </div>\n\n <ng-template #fixingTemplate>\n <section class=\"adf-grid-list-column-view\" *ngIf=\"currentRootElement?.isExpanded\">\n <div class=\"adf-grid-list-single-column\"\n *ngFor=\"let column of currentRootElement?.columns\"\n [style.width.%]=\"getColumnWidth(currentRootElement)\">\n <ng-container *ngFor=\"let field of column?.fields\">\n <ng-container *ngIf=\"field.type === 'section'; else formField\">\n <adf-form-section [field]=\"field\"/>\n </ng-container>\n <ng-template #formField>\n <div class=\"adf-grid-list-column-view-item\">\n <adf-form-field [field]=\"field\"/>\n </div>\n </ng-template>\n </ng-container>\n </div>\n </section>\n </ng-template>\n\n <ng-template #columnViewItem let-column=\"column\">\n <div class=\"adf-grid-list-column-view-item\" *ngFor=\"let field of column?.fields\">\n <adf-form-field *ngIf=\"field\" [field]=\"field\" />\n </div>\n </ng-template>\n </div>\n <div *ngIf=\"currentRootElement.type === 'dynamic-table'\" class=\"adf-container-widget\">\n <adf-form-field [field]=\"currentRootElement\" />\n </div>\n <div class=\"adf-container-widget\"\n *ngIf=\"currentRootElement.type === 'readonly' && currentRootElement.field.params.field.type === 'dynamic-table'\">\n <adf-form-field [field]=\"currentRootElement.field\"/>\n </div>\n </div>\n</ng-template>\n", styles: [".adf-hidden{display:none}.adf-field-list{padding:0;list-style-type:none;width:100%;height:100%}.alfresco-tabs-widget,.alfresco-tabs-widget .adf-form-tab-group{width:100%}.alfresco-tabs-widget .mat-mdc-tab-body{margin-bottom:8em}.alfresco-tabs-widget .mat-mdc-tab-header{z-index:10;margin:0;background-color:#fff;position:absolute;width:96%;margin-left:0!important;margin-right:10px!important;top:0}.alfresco-tabs-widget .mat-mdc-tab-body-wrapper{padding-top:5%}.mat-mdc-card-content:first-child{padding-top:1em}.adf-container-widget .adf-grid-list{display:grid}.adf-container-widget .adf-grid-list-column-view{display:flex;margin-right:-1%;width:100%}@media (max-width: 959.9px){.adf-container-widget .adf-grid-list-column-view{display:flow}}.adf-container-widget .adf-grid-list-column-view-item{width:100%;flex-grow:1;box-sizing:border-box;padding-left:1%;padding-right:1%}.adf-container-widget .adf-grid-list-single-column{display:flex;flex-direction:column;flex:1 1 auto}.adf-container-widget .adf-grid-list-item{box-sizing:border-box;padding-left:3px;padding-right:3px}@media (max-width: 959.9px){.adf-container-widget .adf-grid-list-item{flex:1 0 100%}.adf-container-widget .adf-grid-list--column-view{flex-direction:column}.adf-container-widget .adf-grid-list-single-column-xl{display:none}.adf-container-widget .adf-grid-list-single-column-s{display:block;width:90%!important}.adf-container-widget .adf-grid-list-column-view-item{flex:1 0 auto}}.adf-container-widget mat-input-placeholder{top:1.8em}.adf-container-widget .mat-focused{width:100%}.adf-container-widget .mat-focused .mdc-text-field--focused label{color:var(--theme-primary-color)}.adf-container-widget .mat-focused label{transition:transform .15s linear;background-color:.3s cubic-bezier(.55,0,.55,.2)}.adf-container-widget .mat-focused .mat-mdc-form-field-text-prefix{color:var(--theme-primary-color)}.adf-container-widget .mat-grid-tile{overflow:visible;width:80%}.adf-container-widget adf-form-field,.adf-container-widget mat-form-field{width:100%}.adf-form-container{max-width:100%;max-height:100%}.adf-form-container .mat-mdc-card{padding:16px 24px;overflow:hidden}.adf-form-container .mat-mdc-tab-header{position:fixed;z-index:1000}.adf-form-container .mat-mdc-card-header-text{margin:0}.adf-form-container .mat-mdc-card-content{overflow:hidden;padding-top:0}.adf-form-container mat-tab-label-text{font-size:var(--theme-subheading-2-font-size);line-height:var(--theme-headline-line-height);letter-spacing:-.4px;text-align:left;color:#0000008a;text-transform:uppercase}.adf-form-container .mdc-tab-indicator .mdc-tab-indicator__content--underline{border-top-width:4px}.adf-form-container .mat-mdc-text-field-wrapper{margin:0 12px 0 0}.adf-form-title{font-size:var(--theme-title-font-size);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.adf-form-reload-button{position:absolute;right:12px;top:30px}.adf-form-validation-button{position:absolute;right:50px;top:39px;color:var(--theme-accent-color)}.adf-form-validation-button .adf-invalid-color{color:var(--theme-warn-color)}.adf-form-hide-button{display:none}.adf-task-title{text-align:center}.adf-label{width:32px;height:16px;font-size:var(--theme-caption-font-size);line-height:var(--theme-headline-line-height);text-align:left;white-space:nowrap}.adf-form-mat-card-actions{padding-bottom:25px;padding-right:25px}.adf-form-mat-card-actions .mat-mdc-button{height:36px;border-radius:5px;width:auto;padding:0 16px;margin:0 8px;white-space:nowrap}.adf-form-mat-card-actions .mdc-button__label{min-width:58px}.adf-left-label-input-container{display:flex}.adf-left-label-input-container div:nth-child(2){flex:1}.adf-left-label-input-container .mat-mdc-floating-label{top:auto;bottom:0}.adf-left-label{line-height:64px;margin-right:15px}form-field{width:100%}form-field .mat-mdc-input-element{font-size:var(--theme-body-2-font-size);padding-top:8px;line-height:normal}.adf-error-messages-container{min-height:35px}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatTabsModule }, { kind: "directive", type: i3.MatTabContent, selector: "[matTabContent]" }, { kind: "component", type: i3.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { kind: "component", type: i3.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor", "aria-label", "aria-labelledby"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: FormFieldComponent, selector: "adf-form-field", inputs: ["field"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: HeaderWidgetComponent, selector: "adf-header-widget", inputs: ["element"] }, { kind: "component", type: FormSectionComponent, selector: "adf-form-section", inputs: ["field"] }], encapsulation: i0.ViewEncapsulation.None }); }
127
127
  }
128
128
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormRendererComponent, decorators: [{
129
129
  type: Component,
@@ -147,7 +147,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
147
147
  NgClass,
148
148
  HeaderWidgetComponent,
149
149
  FormSectionComponent
150
- ], encapsulation: ViewEncapsulation.None, template: "<div id=\"adf-form-renderer\" class=\"{{ formDefinition.className }}\"\n [ngClass]=\"{ 'adf-readonly-form': formDefinition.readOnly }\">\n <div *ngIf=\"formDefinition.hasTabs()\">\n <div *ngIf=\"hasTabs()\" class=\"alfresco-tabs-widget\">\n <mat-tab-group>\n <mat-tab *ngFor=\"let tab of visibleTabs()\" [label]=\"tab.title | translate \">\n <ng-container class=\"adf-form-tab-content\">\n <ng-template *ngTemplateOutlet=\"render; context: { fieldToRender: tab.fields }\" />\n </ng-container>\n </mat-tab>\n </mat-tab-group>\n </div>\n </div>\n\n <div *ngIf=\"!formDefinition.hasTabs() && formDefinition.hasFields()\">\n <ng-template *ngTemplateOutlet=\"render; context: { fieldToRender: formDefinition.fields }\" />\n </div>\n</div>\n\n<ng-template #render let-fieldToRender=\"fieldToRender\">\n <div *ngFor=\"let currentRootElement of fieldToRender\">\n <div *ngIf=\"currentRootElement.type === 'container' || currentRootElement.type === 'group'\"\n [id]=\"'field-' + currentRootElement?.id + '-container'\"\n class=\"adf-container-widget\"\n [hidden]=\"!currentRootElement?.isVisible\">\n <adf-header-widget [element]=\"currentRootElement\" />\n <div *ngIf=\"currentRootElement?.form?.enableFixedSpace; else fixingTemplate\">\n <div class=\"adf-grid-list\"\n [ngStyle]=\"{ 'grid-template-columns': 'repeat(' + getNumberOfColumns(currentRootElement) + ', 1fr)' }\"\n *ngIf=\"currentRootElement?.isExpanded\">\n <div class=\"adf-grid-list-item\"\n *ngFor=\"let field of getContainerFields(currentRootElement)\"\n [ngStyle]=\"{ 'grid-area': 'auto / auto / span ' + (field?.rowspan || 1) + ' / span ' + (field?.colspan || 1) }\">\n <adf-form-field *ngIf=\"field\" [field]=\"field\" />\n </div>\n </div>\n </div>\n\n <ng-template #fixingTemplate>\n <section class=\"adf-grid-list-column-view\" *ngIf=\"currentRootElement?.isExpanded\">\n <div class=\"adf-grid-list-single-column\"\n *ngFor=\"let column of currentRootElement?.columns\"\n [style.width.%]=\"getColumnWidth(currentRootElement)\">\n <ng-container *ngFor=\"let field of column?.fields\">\n <ng-container *ngIf=\"field.type === 'section'; else formField\">\n <adf-form-section [field]=\"field\"/>\n </ng-container>\n <ng-template #formField>\n <div class=\"adf-grid-list-column-view-item\">\n <adf-form-field [field]=\"field\"/>\n </div>\n </ng-template>\n </ng-container>\n </div>\n </section>\n </ng-template>\n\n <ng-template #columnViewItem let-column=\"column\">\n <div class=\"adf-grid-list-column-view-item\" *ngFor=\"let field of column?.fields\">\n <adf-form-field *ngIf=\"field\" [field]=\"field\" />\n </div>\n </ng-template>\n </div>\n <div *ngIf=\"currentRootElement.type === 'dynamic-table'\" class=\"adf-container-widget\">\n <adf-form-field [field]=\"currentRootElement\" />\n </div>\n <div class=\"adf-container-widget\"\n *ngIf=\"currentRootElement.type === 'readonly' && currentRootElement.field.params.field.type === 'dynamic-table'\">\n <adf-form-field [field]=\"currentRootElement.field\"/>\n </div>\n </div>\n</ng-template>\n", styles: [".adf-hidden{display:none}.adf-field-list{padding:0;list-style-type:none;width:100%;height:100%}.alfresco-tabs-widget,.alfresco-tabs-widget .adf-form-tab-group{width:100%}.alfresco-tabs-widget .mat-mdc-tab-body{margin-bottom:8em}.alfresco-tabs-widget .mat-mdc-tab-header{z-index:10;margin:0;background-color:#fff;position:absolute;width:96%;margin-left:0!important;margin-right:10px!important;top:0}.alfresco-tabs-widget .mat-mdc-tab-body-wrapper{padding-top:5%}.mat-mdc-card-content:first-child{padding-top:1em}.adf-container-widget .adf-grid-list{display:grid}.adf-container-widget .adf-grid-list-column-view{display:flex;margin-right:-1%;width:100%}@media (max-width: 959.9px){.adf-container-widget .adf-grid-list-column-view{display:flow}}.adf-container-widget .adf-grid-list-column-view-item{width:100%;flex-grow:1;box-sizing:border-box;padding-left:1%;padding-right:1%}.adf-container-widget .adf-grid-list-single-column{display:flex;flex-direction:column;flex:1 1 auto}.adf-container-widget .adf-grid-list-item{box-sizing:border-box;padding-left:3px;padding-right:3px}@media (max-width: 959.9px){.adf-container-widget .adf-grid-list-item{flex:1 0 100%}.adf-container-widget .adf-grid-list--column-view{flex-direction:column}.adf-container-widget .adf-grid-list-single-column-xl{display:none}.adf-container-widget .adf-grid-list-single-column-s{display:block;width:90%!important}.adf-container-widget .adf-grid-list-column-view-item{flex:1 0 auto}}.adf-container-widget mat-input-placeholder{top:1.8em}.adf-container-widget .mat-focused{width:100%}.adf-container-widget .mat-focused .mdc-text-field--focused label{color:var(--theme-primary-color)}.adf-container-widget .mat-focused label{transition:transform .15s linear;background-color:.3s cubic-bezier(.55,0,.55,.2)}.adf-container-widget .mat-focused .mat-mdc-form-field-text-prefix{color:var(--theme-primary-color)}.adf-container-widget .mat-grid-tile{overflow:visible;width:80%}.adf-container-widget adf-form-field,.adf-container-widget mat-form-field{width:100%}.adf-form-container{max-width:100%;max-height:100%}.adf-form-container .mat-mdc-card{padding:16px 24px;overflow:hidden}.adf-form-container .mat-mdc-tab-header{position:fixed;z-index:1000}.adf-form-container .mat-mdc-card-header-text{margin:0}.adf-form-container .mat-mdc-card-content{overflow:hidden;padding-top:0}.adf-form-container mat-tab-label-text{font-size:var(--theme-subheading-2-font-size);line-height:var(--theme-headline-line-height);letter-spacing:-.4px;text-align:left;color:#0000008a;text-transform:uppercase}.adf-form-container .mdc-tab-indicator .mdc-tab-indicator__content--underline{border-top-width:4px}.adf-form-container .mat-mdc-text-field-wrapper{margin:0 12px 0 0}.adf-form-title{font-size:var(--theme-title-font-size);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.adf-form-reload-button{position:absolute;right:12px;top:30px}.adf-form-validation-button{position:absolute;right:50px;top:39px;color:var(--theme-accent-color)}.adf-form-validation-button .adf-invalid-color{color:var(--theme-warn-color)}.adf-form-hide-button{display:none}.adf-task-title{text-align:center}.adf-label{width:32px;height:16px;font-size:var(--theme-caption-font-size);line-height:var(--theme-headline-line-height);text-align:left;white-space:nowrap}.adf-form-mat-card-actions{padding-bottom:25px;padding-right:25px}.adf-form-mat-card-actions .mat-mdc-button{height:36px;border-radius:5px;width:auto;padding:0 16px;margin:0 8px;white-space:nowrap}.adf-form-mat-card-actions .mdc-button__label{min-width:58px}.adf-left-label-input-container{display:flex}.adf-left-label-input-container div:nth-child(2){flex:1}.adf-left-label-input-container .mat-mdc-floating-label{top:auto;bottom:0}.adf-left-label{line-height:64px;margin-right:15px}form-field{width:100%}form-field .mat-mdc-input-element{font-size:var(--theme-body-2-font-size);padding-top:8px;line-height:normal}.adf-error-messages-container{min-height:35px}\n"] }]
150
+ ], encapsulation: ViewEncapsulation.None, template: "<div id=\"adf-form-renderer\" class=\"{{ formDefinition.className }}\"\n [ngClass]=\"{ 'adf-readonly-form': formDefinition.readOnly }\">\n <div *ngIf=\"formDefinition.hasTabs()\">\n <div *ngIf=\"hasTabs()\" class=\"alfresco-tabs-widget\">\n <mat-tab-group>\n <mat-tab *ngFor=\"let tab of visibleTabs()\" [label]=\"tab.title | translate \">\n <ng-template matTabContent>\n <div class=\"adf-form-tab-content\">\n <ng-template *ngTemplateOutlet=\"render; context: { fieldToRender: tab.fields }\" />\n </div>\n </ng-template>\n </mat-tab>\n </mat-tab-group>\n </div>\n </div>\n\n <div *ngIf=\"!formDefinition.hasTabs() && formDefinition.hasFields()\">\n <ng-template *ngTemplateOutlet=\"render; context: { fieldToRender: formDefinition.fields }\" />\n </div>\n</div>\n\n<ng-template #render let-fieldToRender=\"fieldToRender\">\n <div *ngFor=\"let currentRootElement of fieldToRender\">\n <div *ngIf=\"currentRootElement.type === 'container' || currentRootElement.type === 'group'\"\n [id]=\"'field-' + currentRootElement?.id + '-container'\"\n class=\"adf-container-widget\"\n [hidden]=\"!currentRootElement?.isVisible\">\n <adf-header-widget [element]=\"currentRootElement\" />\n <div *ngIf=\"currentRootElement?.form?.enableFixedSpace; else fixingTemplate\">\n <div class=\"adf-grid-list\"\n [ngStyle]=\"{ 'grid-template-columns': 'repeat(' + getNumberOfColumns(currentRootElement) + ', 1fr)' }\"\n *ngIf=\"currentRootElement?.isExpanded\">\n <div class=\"adf-grid-list-item\"\n *ngFor=\"let field of getContainerFields(currentRootElement)\"\n [ngStyle]=\"{ 'grid-area': 'auto / auto / span ' + (field?.rowspan || 1) + ' / span ' + (field?.colspan || 1) }\">\n <adf-form-field *ngIf=\"field\" [field]=\"field\" />\n </div>\n </div>\n </div>\n\n <ng-template #fixingTemplate>\n <section class=\"adf-grid-list-column-view\" *ngIf=\"currentRootElement?.isExpanded\">\n <div class=\"adf-grid-list-single-column\"\n *ngFor=\"let column of currentRootElement?.columns\"\n [style.width.%]=\"getColumnWidth(currentRootElement)\">\n <ng-container *ngFor=\"let field of column?.fields\">\n <ng-container *ngIf=\"field.type === 'section'; else formField\">\n <adf-form-section [field]=\"field\"/>\n </ng-container>\n <ng-template #formField>\n <div class=\"adf-grid-list-column-view-item\">\n <adf-form-field [field]=\"field\"/>\n </div>\n </ng-template>\n </ng-container>\n </div>\n </section>\n </ng-template>\n\n <ng-template #columnViewItem let-column=\"column\">\n <div class=\"adf-grid-list-column-view-item\" *ngFor=\"let field of column?.fields\">\n <adf-form-field *ngIf=\"field\" [field]=\"field\" />\n </div>\n </ng-template>\n </div>\n <div *ngIf=\"currentRootElement.type === 'dynamic-table'\" class=\"adf-container-widget\">\n <adf-form-field [field]=\"currentRootElement\" />\n </div>\n <div class=\"adf-container-widget\"\n *ngIf=\"currentRootElement.type === 'readonly' && currentRootElement.field.params.field.type === 'dynamic-table'\">\n <adf-form-field [field]=\"currentRootElement.field\"/>\n </div>\n </div>\n</ng-template>\n", styles: [".adf-hidden{display:none}.adf-field-list{padding:0;list-style-type:none;width:100%;height:100%}.alfresco-tabs-widget,.alfresco-tabs-widget .adf-form-tab-group{width:100%}.alfresco-tabs-widget .mat-mdc-tab-body{margin-bottom:8em}.alfresco-tabs-widget .mat-mdc-tab-header{z-index:10;margin:0;background-color:#fff;position:absolute;width:96%;margin-left:0!important;margin-right:10px!important;top:0}.alfresco-tabs-widget .mat-mdc-tab-body-wrapper{padding-top:5%}.mat-mdc-card-content:first-child{padding-top:1em}.adf-container-widget .adf-grid-list{display:grid}.adf-container-widget .adf-grid-list-column-view{display:flex;margin-right:-1%;width:100%}@media (max-width: 959.9px){.adf-container-widget .adf-grid-list-column-view{display:flow}}.adf-container-widget .adf-grid-list-column-view-item{width:100%;flex-grow:1;box-sizing:border-box;padding-left:1%;padding-right:1%}.adf-container-widget .adf-grid-list-single-column{display:flex;flex-direction:column;flex:1 1 auto}.adf-container-widget .adf-grid-list-item{box-sizing:border-box;padding-left:3px;padding-right:3px}@media (max-width: 959.9px){.adf-container-widget .adf-grid-list-item{flex:1 0 100%}.adf-container-widget .adf-grid-list--column-view{flex-direction:column}.adf-container-widget .adf-grid-list-single-column-xl{display:none}.adf-container-widget .adf-grid-list-single-column-s{display:block;width:90%!important}.adf-container-widget .adf-grid-list-column-view-item{flex:1 0 auto}}.adf-container-widget mat-input-placeholder{top:1.8em}.adf-container-widget .mat-focused{width:100%}.adf-container-widget .mat-focused .mdc-text-field--focused label{color:var(--theme-primary-color)}.adf-container-widget .mat-focused label{transition:transform .15s linear;background-color:.3s cubic-bezier(.55,0,.55,.2)}.adf-container-widget .mat-focused .mat-mdc-form-field-text-prefix{color:var(--theme-primary-color)}.adf-container-widget .mat-grid-tile{overflow:visible;width:80%}.adf-container-widget adf-form-field,.adf-container-widget mat-form-field{width:100%}.adf-form-container{max-width:100%;max-height:100%}.adf-form-container .mat-mdc-card{padding:16px 24px;overflow:hidden}.adf-form-container .mat-mdc-tab-header{position:fixed;z-index:1000}.adf-form-container .mat-mdc-card-header-text{margin:0}.adf-form-container .mat-mdc-card-content{overflow:hidden;padding-top:0}.adf-form-container mat-tab-label-text{font-size:var(--theme-subheading-2-font-size);line-height:var(--theme-headline-line-height);letter-spacing:-.4px;text-align:left;color:#0000008a;text-transform:uppercase}.adf-form-container .mdc-tab-indicator .mdc-tab-indicator__content--underline{border-top-width:4px}.adf-form-container .mat-mdc-text-field-wrapper{margin:0 12px 0 0}.adf-form-title{font-size:var(--theme-title-font-size);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.adf-form-reload-button{position:absolute;right:12px;top:30px}.adf-form-validation-button{position:absolute;right:50px;top:39px;color:var(--theme-accent-color)}.adf-form-validation-button .adf-invalid-color{color:var(--theme-warn-color)}.adf-form-hide-button{display:none}.adf-task-title{text-align:center}.adf-label{width:32px;height:16px;font-size:var(--theme-caption-font-size);line-height:var(--theme-headline-line-height);text-align:left;white-space:nowrap}.adf-form-mat-card-actions{padding-bottom:25px;padding-right:25px}.adf-form-mat-card-actions .mat-mdc-button{height:36px;border-radius:5px;width:auto;padding:0 16px;margin:0 8px;white-space:nowrap}.adf-form-mat-card-actions .mdc-button__label{min-width:58px}.adf-left-label-input-container{display:flex}.adf-left-label-input-container div:nth-child(2){flex:1}.adf-left-label-input-container .mat-mdc-floating-label{top:auto;bottom:0}.adf-left-label{line-height:64px;margin-right:15px}form-field{width:100%}form-field .mat-mdc-input-element{font-size:var(--theme-body-2-font-size);padding-top:8px;line-height:normal}.adf-error-messages-container{min-height:35px}\n"] }]
151
151
  }], ctorParameters: () => [{ type: i1.FormService }, { type: i2.FormRulesManager }, { type: undefined, decorators: [{
152
152
  type: Optional
153
153
  }, {
@@ -159,4 +159,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
159
159
  }], readOnly: [{
160
160
  type: Input
161
161
  }] } });
162
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1yZW5kZXJlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvY29yZS9zcmMvbGliL2Zvcm0vY29tcG9uZW50cy9mb3JtLXJlbmRlcmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb3JlL3NyYy9saWIvZm9ybS9jb21wb25lbnRzL2Zvcm0tcmVuZGVyZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQXFCLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuSCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsa0NBQWtDLEVBQWtDLE1BQU0sMEJBQTBCLENBQUM7QUFDOUcsT0FBTyxFQUFrQyxTQUFTLEVB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dGVudCI6WyIvKiFcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDI1IEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IE5nQ2xhc3MsIE5nRm9yT2YsIE5nSWYsIE5nU3R5bGUsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3QsIEluamVjdG9yLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE9wdGlvbmFsLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTWF0VGFic01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYnMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBGb3JtUnVsZXNNYW5hZ2VyLCBmb3JtUnVsZXNNYW5hZ2VyRmFjdG9yeSB9IGZyb20gJy4uL21vZGVscy9mb3JtLXJ1bGVzLm1vZGVsJztcbmltcG9ydCB7IEZvcm1TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZm9ybS5zZXJ2aWNlJztcbmltcG9ydCB7IEZvcm1GaWVsZENvbXBvbmVudCB9IGZyb20gJy4vZm9ybS1maWVsZC9mb3JtLWZpZWxkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGT1JNX0ZJRUxEX01PREVMX1JFTkRFUl9NSURETEVXQVJFLCBGb3JtRmllbGRNb2RlbFJlbmRlck1pZGRsZXdhcmUgfSBmcm9tICcuL21pZGRsZXdhcmVzL21pZGRsZXdhcmUnO1xuaW1wb3J0IHsgQ29udGFpbmVyTW9kZWwsIEZvcm1GaWVsZE1vZGVsLCBGb3JtTW9kZWwsIFRhYk1vZGVsIH0gZnJvbSAnLi93aWRnZXRzJztcbmltcG9ydCB7IEhlYWRlcldpZGdldENvbXBvbmVudCB9IGZyb20gJy4vd2lkZ2V0cy9oZWFkZXIvaGVhZGVyLndpZGdldCc7XG5pbXBvcnQgeyBGb3JtU2VjdGlvbkNvbXBvbmVudCB9IGZyb20gJy4vZm9ybS1zZWN0aW9uL2Zvcm0tc2VjdGlvbi5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FkZi1mb3JtLXJlbmRlcmVyJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9mb3JtLXJlbmRlcmVyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9mb3JtLXJlbmRlcmVyLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEZvcm1SdWxlc01hbmFnZXIsXG4gICAgICAgICAgICB1c2VGYWN0b3J5OiBmb3JtUnVsZXNNYW5hZ2VyRmFjdG9yeSxcbiAgICAgICAgICAgIGRlcHM6IFtJbmplY3Rvcl1cbiAgICAgICAgfVxuICAgIF0sXG4gICAgaW1wb3J0czogW1xuICAgICAgICBOZ0lmLFxuICAgICAgICBNYXRUYWJzTW9kdWxlLFxuICAgICAgICBOZ0Zvck9mLFxuICAgICAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgICAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICAgICAgTWF0SWNvbk1vZHVsZSxcbiAgICAgICAgTmdTdHlsZSxcbiAgICAgICAgRm9ybUZpZWxkQ29tcG9uZW50LFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgTmdDbGFzcyxcbiAgICAgICAgSGVhZGVyV2lkZ2V0Q29tcG9uZW50LFxuICAgICAgICBGb3JtU2VjdGlvbkNvbXBvbmVudFxuICAgIF0sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBGb3JtUmVuZGVyZXJDb21wb25lbnQ8VD4gaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgICBmb3JtRGVmaW5pdGlvbjogRm9ybU1vZGVsO1xuXG4gICAgQElucHV0KClcbiAgICByZWFkT25seSA9IGZhbHNlO1xuXG4gICAgZGVidWdNb2RlOiBib29sZWFuO1xuXG4gICAgZmllbGRzOiBGb3JtRmllbGRNb2RlbFtdO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBmb3JtU2VydmljZTogRm9ybVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZm9ybVJ1bGVzTWFuYWdlcjogRm9ybVJ1bGVzTWFuYWdlcjxUPixcbiAgICAgICAgQE9wdGlvbmFsKClcbiAgICAgICAgQEluamVjdChGT1JNX0ZJRUxEX01PREVMX1JFTkRFUl9NSURETEVXQVJFKVxuICAgICAgICBwcml2YXRlIG1pZGRsZXdhcmVTZXJ2aWNlcz86IEZvcm1GaWVsZE1vZGVsUmVuZGVyTWlkZGxld2FyZVtdXG4gICAgKSB7fVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucnVuTWlkZGxld2FyZVNlcnZpY2VzKCk7XG4gICAgICAgIGlmICghdGhpcy5yZWFkT25seSkge1xuICAgICAgICAgICAgdGhpcy5mb3JtUnVsZXNNYW5hZ2VyLmluaXRpYWxpemUodGhpcy5mb3JtRGVmaW5pdGlvbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5mb3JtUnVsZXNNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBoYXNUYWJzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtRGVmaW5pdGlvbi50YWJzICYmIHRoaXMuZm9ybURlZmluaXRpb24udGFicy5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIHZpc2libGVUYWJzKCk6IFRhYk1vZGVsW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtRGVmaW5pdGlvbi50YWJzLmZpbHRlcigodGFiKSA9PiB0YWIuaXNWaXNpYmxlKTtcbiAgICB9XG5cbiAgICBnZXROdW1iZXJPZkNvbHVtbnMoY29udGVudDogQ29udGFpbmVyTW9kZWwpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gKGNvbnRlbnQuanNvbj8ubnVtYmVyT2ZDb2x1bW5zIHx8IDEpID4gKGNvbnRlbnQuY29sdW1ucz8ubGVuZ3RoIHx8IDEpXG4gICAgICAgICAgICA/IGNvbnRlbnQuanNvbj8ubnVtYmVyT2ZDb2x1bW5zIHx8IDFcbiAgICAgICAgICAgIDogY29udGVudC5jb2x1bW5zPy5sZW5ndGggfHwgMTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXJpYWxpemVzIGNvbHVtbiBmaWVsZHNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb250ZW50IGNvbnRhaW5lciBtb2RlbFxuICAgICAqIEByZXR1cm5zIGEgbGlzdCBvZiBmb3JtIGZpZWxkIG1vZGVsc1xuICAgICAqL1xuICAgIGdldENvbnRhaW5lckZpZWxkcyhjb250ZW50OiBDb250YWluZXJNb2RlbCk6IEZvcm1GaWVsZE1vZGVsW10ge1xuICAgICAgICBjb25zdCBzZXJpYWxpc2VkRm9ybUZpZWxkczogRm9ybUZpZWxkTW9kZWxbXSA9IFtdO1xuICAgICAgICBjb25zdCBtYXhDb2x1bW5GaWVsZHNTaXplID0gdGhpcy5nZXRNYXhDb2x1bW5GaWVsZFNpemUoY29udGVudCk7XG4gICAgICAgIGZvciAobGV0IHJvd0luZGV4ID0gMDsgcm93SW5kZXggPCBtYXhDb2x1bW5GaWVsZHNTaXplOyByb3dJbmRleCsrKSB7XG4gICAgICAgICAgICBjb250ZW50Py5jb2x1bW5zLmZsYXRNYXAoKGN1cnJlbnRDb2x1bW4pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudENvbHVtbj8uZmllbGRzW3Jvd0luZGV4XSkge1xuICAgICAgICAgICAgICAgICAgICBzZXJpYWxpc2VkRm9ybUZpZWxkcy5wdXNoKGN1cnJlbnRDb2x1bW4/LmZpZWxkc1tyb3dJbmRleF0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0Um93RWxlbWVudENvbFNwYW4gPSBjdXJyZW50Q29sdW1uPy5maWVsZHNbMF0/LmNvbHNwYW47XG4gICAgICAgICAgICAgICAgICAgIGlmICghIWZpcnN0Um93RWxlbWVudENvbFNwYW4gJiYgcm93SW5kZXggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpcnN0Um93RWxlbWVudENvbFNwYW47IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcmlhbGlzZWRGb3JtRmllbGRzLnB1c2gobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzZXJpYWxpc2VkRm9ybUZpZWxkcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE1heENvbHVtbkZpZWxkU2l6ZShjb250ZW50OiBDb250YWluZXJNb2RlbCk6IG51bWJlciB7XG4gICAgICAgIGxldCBtYXhGaWVsZFNpemUgPSAwO1xuICAgICAgICBpZiAoY29udGVudD8uY29sdW1ucz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgbWF4RmllbGRTaXplID0gY29udGVudD8uY29sdW1ucz8ucmVkdWNlKChwcmV2Q29sdW1uLCBjdXJyZW50Q29sdW1uKSA9PlxuICAgICAgICAgICAgICAgIGN1cnJlbnRDb2x1bW4uZmllbGRzLmxlbmd0aCA+IHByZXZDb2x1bW4/LmZpZWxkcz8ubGVuZ3RoID8gY3VycmVudENvbHVtbiA6IHByZXZDb2x1bW5cbiAgICAgICAgICAgICk/LmZpZWxkcz8ubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXhGaWVsZFNpemU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjb2x1bW4gd2lkdGggYmFzZWQgb24gdGhlIG51bWJlck9mQ29sdW1ucyBhbmQgY3VycmVudCBmaWVsZCdzIGNvbHNwYW4gcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb250YWluZXIgY29udGFpbmVyIG1vZGVsXG4gICAgICogQHJldHVybnMgdGhlIGNvbHVtbiB3aWR0aCBmb3IgdGhlIGdpdmVuIG1vZGVsXG4gICAgICovXG4gICAgZ2V0Q29sdW1uV2lkdGgoY29udGFpbmVyOiBDb250YWluZXJNb2RlbCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHsgZmllbGQgfSA9IGNvbnRhaW5lcjtcbiAgICAgICAgY29uc3QgY29sc3BhbiA9IGZpZWxkID8gZmllbGQuY29sc3BhbiA6IDE7XG4gICAgICAgIHJldHVybiAoMTAwIC8gZmllbGQubnVtYmVyT2ZDb2x1bW5zKSAqIGNvbHNwYW4gKyAnJztcbiAgICB9XG5cbiAgICBwcml2YXRlIHJ1bk1pZGRsZXdhcmVTZXJ2aWNlcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMubWlkZGxld2FyZVNlcnZpY2VzICYmIHRoaXMubWlkZGxld2FyZVNlcnZpY2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1GaWVsZHMgPSB0aGlzLmZvcm1EZWZpbml0aW9uLmdldEZvcm1GaWVsZHMoKTtcblxuICAgICAgICAgICAgZm9ybUZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubWlkZGxld2FyZVNlcnZpY2VzLmZvckVhY2goKG1pZGRsZXdhcmVTZXJ2aWNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtaWRkbGV3YXJlU2VydmljZS50eXBlID09PSBmaWVsZC50eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZCA9IG1pZGRsZXdhcmVTZXJ2aWNlLmdldFBhcnNlZEZpZWxkKGZpZWxkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8ZGl2IGlkPVwiYWRmLWZvcm0tcmVuZGVyZXJcIiBjbGFzcz1cInt7IGZvcm1EZWZpbml0aW9uLmNsYXNzTmFtZSB9fVwiXG4gICAgIFtuZ0NsYXNzXT1cInsgJ2FkZi1yZWFkb25seS1mb3JtJzogZm9ybURlZmluaXRpb24ucmVhZE9ubHkgfVwiPlxuICAgIDxkaXYgKm5nSWY9XCJmb3JtRGVmaW5pdGlvbi5oYXNUYWJzKClcIj5cbiAgICAgICAgPGRpdiAqbmdJZj1cImhhc1RhYnMoKVwiIGNsYXNzPVwiYWxmcmVzY28tdGFicy13aWRnZXRcIj5cbiAgICAgICAgICAgIDxtYXQtdGFiLWdyb3VwPlxuICAgICAgICAgICAgICAgIDxtYXQtdGFiICAgKm5nRm9yPVwibGV0IHRhYiBvZiB2aXNpYmxlVGFicygpXCIgW2xhYmVsXT1cInRhYi50aXRsZSB8IHRyYW5zbGF0ZSBcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBjbGFzcz1cImFkZi1mb3JtLXRhYi1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJyZW5kZXI7IGNvbnRleHQ6IHsgZmllbGRUb1JlbmRlcjogdGFiLmZpZWxkcyB9XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9tYXQtdGFiPlxuICAgICAgICAgICAgPC9tYXQtdGFiLWdyb3VwPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgKm5nSWY9XCIhZm9ybURlZmluaXRpb24uaGFzVGFicygpICYmIGZvcm1EZWZpbml0aW9uLmhhc0ZpZWxkcygpXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cInJlbmRlcjsgY29udGV4dDogeyBmaWVsZFRvUmVuZGVyOiBmb3JtRGVmaW5pdGlvbi5maWVsZHMgfVwiIC8+XG4gICAgPC9kaXY+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNyZW5kZXIgbGV0LWZpZWxkVG9SZW5kZXI9XCJmaWVsZFRvUmVuZGVyXCI+XG4gICAgPGRpdiAqbmdGb3I9XCJsZXQgY3VycmVudFJvb3RFbGVtZW50IG9mIGZpZWxkVG9SZW5kZXJcIj5cbiAgICAgICAgPGRpdiAqbmdJZj1cImN1cnJlbnRSb290RWxlbWVudC50eXBlID09PSAnY29udGFpbmVyJyB8fCBjdXJyZW50Um9vdEVsZW1lbnQudHlwZSA9PT0gJ2dyb3VwJ1wiXG4gICAgICAgICAgICAgW2lkXT1cIidmaWVsZC0nICsgY3VycmVudFJvb3RFbGVtZW50Py5pZCArICctY29udGFpbmVyJ1wiXG4gICAgICAgICAgICAgY2xhc3M9XCJhZGYtY29udGFpbmVyLXdpZGdldFwiXG4gICAgICAgICAgICAgW2hpZGRlbl09XCIhY3VycmVudFJvb3RFbGVtZW50Py5pc1Zpc2libGVcIj5cbiAgICAgICAgICAgIDxhZGYtaGVhZGVyLXdpZGdldCBbZWxlbWVudF09XCJjdXJyZW50Um9vdEVsZW1lbnRcIiAvPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImN1cnJlbnRSb290RWxlbWVudD8uZm9ybT8uZW5hYmxlRml4ZWRTcGFjZTsgZWxzZSBmaXhpbmdUZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtZ3JpZC1saXN0XCJcbiAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgJ2dyaWQtdGVtcGxhdGUtY29sdW1ucyc6ICdyZXBlYXQoJyArIGdldE51bWJlck9mQ29sdW1ucyhjdXJyZW50Um9vdEVsZW1lbnQpICsgJywgMWZyKScgfVwiXG4gICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImN1cnJlbnRSb290RWxlbWVudD8uaXNFeHBhbmRlZFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLWdyaWQtbGlzdC1pdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZmllbGQgb2YgZ2V0Q29udGFpbmVyRmllbGRzKGN1cnJlbnRSb290RWxlbWVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgJ2dyaWQtYXJlYSc6ICdhdXRvIC8gYXV0byAvIHNwYW4gJyArIChmaWVsZD8ucm93c3BhbiB8fCAxKSArICcgLyBzcGFuICcgKyAoZmllbGQ/LmNvbHNwYW4gfHwgMSkgfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGFkZi1mb3JtLWZpZWxkICpuZ0lmPVwiZmllbGRcIiBbZmllbGRdPVwiZmllbGRcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2ZpeGluZ1RlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiYWRmLWdyaWQtbGlzdC1jb2x1bW4tdmlld1wiICpuZ0lmPVwiY3VycmVudFJvb3RFbGVtZW50Py5pc0V4cGFuZGVkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtZ3JpZC1saXN0LXNpbmdsZS1jb2x1bW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY3VycmVudFJvb3RFbGVtZW50Py5jb2x1bW5zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGguJV09XCJnZXRDb2x1bW5XaWR0aChjdXJyZW50Um9vdEVsZW1lbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBmaWVsZCBvZiBjb2x1bW4/LmZpZWxkc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWVsZC50eXBlID09PSAnc2VjdGlvbic7IGVsc2UgZm9ybUZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhZGYtZm9ybS1zZWN0aW9uIFtmaWVsZF09XCJmaWVsZFwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Zvcm1GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1ncmlkLWxpc3QtY29sdW1uLXZpZXctaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFkZi1mb3JtLWZpZWxkIFtmaWVsZF09XCJmaWVsZFwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2NvbHVtblZpZXdJdGVtIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLWdyaWQtbGlzdC1jb2x1bW4tdmlldy1pdGVtXCIgKm5nRm9yPVwibGV0IGZpZWxkIG9mIGNvbHVtbj8uZmllbGRzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhZGYtZm9ybS1maWVsZCAqbmdJZj1cImZpZWxkXCIgW2ZpZWxkXT1cImZpZWxkXCIgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiY3VycmVudFJvb3RFbGVtZW50LnR5cGUgPT09ICdkeW5hbWljLXRhYmxlJ1wiIGNsYXNzPVwiYWRmLWNvbnRhaW5lci13aWRnZXRcIj5cbiAgICAgICAgICAgIDxhZGYtZm9ybS1maWVsZCBbZmllbGRdPVwiY3VycmVudFJvb3RFbGVtZW50XCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtY29udGFpbmVyLXdpZGdldFwiXG4gICAgICAgICAgICAgKm5nSWY9XCJjdXJyZW50Um9vdEVsZW1lbnQudHlwZSA9PT0gJ3JlYWRvbmx5JyAmJiBjdXJyZW50Um9vdEVsZW1lbnQuZmllbGQucGFyYW1zLmZpZWxkLnR5cGUgPT09ICdkeW5hbWljLXRhYmxlJ1wiPlxuICAgICAgICAgICAgPGFkZi1mb3JtLWZpZWxkIFtmaWVsZF09XCJjdXJyZW50Um9vdEVsZW1lbnQuZmllbGRcIi8+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
162
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1yZW5kZXJlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvY29yZS9zcmMvbGliL2Zvcm0vY29tcG9uZW50cy9mb3JtLXJlbmRlcmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb3JlL3NyYy9saWIvZm9ybS9jb21wb25lbnRzL2Zvcm0tcmVuZGVyZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQXFCLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuSCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsa0NBQWtDLEVBQWtDLE1BQU0sMEJBQTBCLENBQUM7QUFDOUcsT0FBTyxFQUFrQyxTQUFTLEVBQVksTUFBTSxXQUFXLENBQUM7QUFDaEYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDdkUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7Ozs7OztBQStCN0UsTUFBTSxPQUFPLHFCQUFxQjtJQVc5QixZQUNXLFdBQXdCLEVBQ3ZCLGdCQUFxQyxFQUdyQyxrQkFBcUQ7UUFKdEQsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDdkIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFxQjtRQUdyQyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW1DO1FBWGpFLGFBQVEsR0FBRyxLQUFLLENBQUM7SUFZZCxDQUFDO0lBRUosUUFBUTtRQUNKLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDMUQsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFRCxPQUFPO1FBQ0gsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFRCxXQUFXO1FBQ1AsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQsa0JBQWtCLENBQUMsT0FBdUI7UUFDdEMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsZUFBZSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDO1lBQ3hFLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLGVBQWUsSUFBSSxDQUFDO1lBQ3BDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsa0JBQWtCLENBQUMsT0FBdUI7UUFDdEMsTUFBTSxvQkFBb0IsR0FBcUIsRUFBRSxDQUFDO1FBQ2xELE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2hFLEtBQUssSUFBSSxRQUFRLEdBQUcsQ0FBQyxFQUFFLFFBQVEsR0FBRyxtQkFBbUIsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDO1lBQ2hFLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsYUFBYSxFQUFFLEVBQUU7Z0JBQ3ZDLElBQUksYUFBYSxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO29CQUNsQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO2dCQUMvRCxDQUFDO3FCQUFNLENBQUM7b0JBQ0osTUFBTSxzQkFBc0IsR0FBRyxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQztvQkFDakUsSUFBSSxDQUFDLENBQUMsc0JBQXNCLElBQUksUUFBUSxHQUFHLENBQUMsRUFBRSxDQUFDO3dCQUMzQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsc0JBQXNCLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQzs0QkFDOUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUNwQyxDQUFDO29CQUNMLENBQUM7Z0JBQ0wsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztRQUVELE9BQU8sb0JBQW9CLENBQUM7SUFDaEMsQ0FBQztJQUVPLHFCQUFxQixDQUFDLE9BQXVCO1FBQ2pELElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQztRQUNyQixJQUFJLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQy9CLFlBQVksR0FBRyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDLFVBQVUsRUFBRSxhQUFhLEVBQUUsRUFBRSxDQUNsRSxhQUFhLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQ3hGLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQztRQUN0QixDQUFDO1FBQ0QsT0FBTyxZQUFZLENBQUM7SUFDeEIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsY0FBYyxDQUFDLFNBQXlCO1FBQ3BDLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxTQUFTLENBQUM7UUFDNUIsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsZUFBZSxDQUFDLEdBQUcsT0FBTyxHQUFHLEVBQUUsQ0FBQztJQUN4RCxDQUFDO0lBRU8scUJBQXFCO1FBQ3pCLElBQUksSUFBSSxDQUFDLGtCQUFrQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDaEUsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUV2RCxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ3pCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxFQUFFO29CQUNsRCxJQUFJLGlCQUFpQixDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7d0JBQ3hDLEtBQUssR0FBRyxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ3BELENBQUM7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7WUFDUCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7SUFDTCxDQUFDOytHQXpHUSxxQkFBcUIsNkVBZWxCLGtDQUFrQzttR0FmckMscUJBQXFCLG9JQXhCbkI7WUFDUDtnQkFDSSxPQUFPLEVBQUUsZ0JBQWdCO2dCQUN6QixVQUFVLEVBQUUsdUJBQXVCO2dCQUNuQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUM7YUFDbkI7U0FDSiwwQkMzQ0wsNjlIQTBFQSxzNkhEN0JRLElBQUksNEZBQ0osYUFBYSx5dEJBQ2IsT0FBTyxtSEFDUCxnQkFBZ0IsbUpBQ2hCLGVBQWUsMkZBQ2YsZUFBZSw4QkFDZixhQUFhLCtCQUNiLE9BQU8sMkVBQ1Asa0JBQWtCLDZFQUNsQixXQUFXLCtCQUNYLE9BQU8sb0ZBQ1AscUJBQXFCLG1GQUNyQixvQkFBb0I7OzRGQUlmLHFCQUFxQjtrQkE3QmpDLFNBQVM7K0JBQ0ksbUJBQW1CLGNBQ2pCLElBQUksYUFHTDt3QkFDUDs0QkFDSSxPQUFPLEVBQUUsZ0JBQWdCOzRCQUN6QixVQUFVLEVBQUUsdUJBQXVCOzRCQUNuQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUM7eUJBQ25CO3FCQUNKLFdBQ1E7d0JBQ0wsSUFBSTt3QkFDSixhQUFhO3dCQUNiLE9BQU87d0JBQ1AsZ0JBQWdCO3dCQUNoQixlQUFlO3dCQUNmLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYixPQUFPO3dCQUNQLGtCQUFrQjt3QkFDbEIsV0FBVzt3QkFDWCxPQUFPO3dCQUNQLHFCQUFxQjt3QkFDckIsb0JBQW9CO3FCQUN2QixpQkFDYyxpQkFBaUIsQ0FBQyxJQUFJOzswQkFnQmhDLFFBQVE7OzBCQUNSLE1BQU07MkJBQUMsa0NBQWtDO3lDQWI5QyxjQUFjO3NCQURiLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUl6QixRQUFRO3NCQURQLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDI1IEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IE5nQ2xhc3MsIE5nRm9yT2YsIE5nSWYsIE5nU3R5bGUsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3QsIEluamVjdG9yLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE9wdGlvbmFsLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTWF0VGFic01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYnMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBGb3JtUnVsZXNNYW5hZ2VyLCBmb3JtUnVsZXNNYW5hZ2VyRmFjdG9yeSB9IGZyb20gJy4uL21vZGVscy9mb3JtLXJ1bGVzLm1vZGVsJztcbmltcG9ydCB7IEZvcm1TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZm9ybS5zZXJ2aWNlJztcbmltcG9ydCB7IEZvcm1GaWVsZENvbXBvbmVudCB9IGZyb20gJy4vZm9ybS1maWVsZC9mb3JtLWZpZWxkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGT1JNX0ZJRUxEX01PREVMX1JFTkRFUl9NSURETEVXQVJFLCBGb3JtRmllbGRNb2RlbFJlbmRlck1pZGRsZXdhcmUgfSBmcm9tICcuL21pZGRsZXdhcmVzL21pZGRsZXdhcmUnO1xuaW1wb3J0IHsgQ29udGFpbmVyTW9kZWwsIEZvcm1GaWVsZE1vZGVsLCBGb3JtTW9kZWwsIFRhYk1vZGVsIH0gZnJvbSAnLi93aWRnZXRzJztcbmltcG9ydCB7IEhlYWRlcldpZGdldENvbXBvbmVudCB9IGZyb20gJy4vd2lkZ2V0cy9oZWFkZXIvaGVhZGVyLndpZGdldCc7XG5pbXBvcnQgeyBGb3JtU2VjdGlvbkNvbXBvbmVudCB9IGZyb20gJy4vZm9ybS1zZWN0aW9uL2Zvcm0tc2VjdGlvbi5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FkZi1mb3JtLXJlbmRlcmVyJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9mb3JtLXJlbmRlcmVyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9mb3JtLXJlbmRlcmVyLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEZvcm1SdWxlc01hbmFnZXIsXG4gICAgICAgICAgICB1c2VGYWN0b3J5OiBmb3JtUnVsZXNNYW5hZ2VyRmFjdG9yeSxcbiAgICAgICAgICAgIGRlcHM6IFtJbmplY3Rvcl1cbiAgICAgICAgfVxuICAgIF0sXG4gICAgaW1wb3J0czogW1xuICAgICAgICBOZ0lmLFxuICAgICAgICBNYXRUYWJzTW9kdWxlLFxuICAgICAgICBOZ0Zvck9mLFxuICAgICAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgICAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICAgICAgTWF0SWNvbk1vZHVsZSxcbiAgICAgICAgTmdTdHlsZSxcbiAgICAgICAgRm9ybUZpZWxkQ29tcG9uZW50LFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgTmdDbGFzcyxcbiAgICAgICAgSGVhZGVyV2lkZ2V0Q29tcG9uZW50LFxuICAgICAgICBGb3JtU2VjdGlvbkNvbXBvbmVudFxuICAgIF0sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBGb3JtUmVuZGVyZXJDb21wb25lbnQ8VD4gaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgICBmb3JtRGVmaW5pdGlvbjogRm9ybU1vZGVsO1xuXG4gICAgQElucHV0KClcbiAgICByZWFkT25seSA9IGZhbHNlO1xuXG4gICAgZGVidWdNb2RlOiBib29sZWFuO1xuXG4gICAgZmllbGRzOiBGb3JtRmllbGRNb2RlbFtdO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBmb3JtU2VydmljZTogRm9ybVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZm9ybVJ1bGVzTWFuYWdlcjogRm9ybVJ1bGVzTWFuYWdlcjxUPixcbiAgICAgICAgQE9wdGlvbmFsKClcbiAgICAgICAgQEluamVjdChGT1JNX0ZJRUxEX01PREVMX1JFTkRFUl9NSURETEVXQVJFKVxuICAgICAgICBwcml2YXRlIG1pZGRsZXdhcmVTZXJ2aWNlcz86IEZvcm1GaWVsZE1vZGVsUmVuZGVyTWlkZGxld2FyZVtdXG4gICAgKSB7fVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucnVuTWlkZGxld2FyZVNlcnZpY2VzKCk7XG4gICAgICAgIGlmICghdGhpcy5yZWFkT25seSkge1xuICAgICAgICAgICAgdGhpcy5mb3JtUnVsZXNNYW5hZ2VyLmluaXRpYWxpemUodGhpcy5mb3JtRGVmaW5pdGlvbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5mb3JtUnVsZXNNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBoYXNUYWJzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtRGVmaW5pdGlvbi50YWJzICYmIHRoaXMuZm9ybURlZmluaXRpb24udGFicy5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIHZpc2libGVUYWJzKCk6IFRhYk1vZGVsW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtRGVmaW5pdGlvbi50YWJzLmZpbHRlcigodGFiKSA9PiB0YWIuaXNWaXNpYmxlKTtcbiAgICB9XG5cbiAgICBnZXROdW1iZXJPZkNvbHVtbnMoY29udGVudDogQ29udGFpbmVyTW9kZWwpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gKGNvbnRlbnQuanNvbj8ubnVtYmVyT2ZDb2x1bW5zIHx8IDEpID4gKGNvbnRlbnQuY29sdW1ucz8ubGVuZ3RoIHx8IDEpXG4gICAgICAgICAgICA/IGNvbnRlbnQuanNvbj8ubnVtYmVyT2ZDb2x1bW5zIHx8IDFcbiAgICAgICAgICAgIDogY29udGVudC5jb2x1bW5zPy5sZW5ndGggfHwgMTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXJpYWxpemVzIGNvbHVtbiBmaWVsZHNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb250ZW50IGNvbnRhaW5lciBtb2RlbFxuICAgICAqIEByZXR1cm5zIGEgbGlzdCBvZiBmb3JtIGZpZWxkIG1vZGVsc1xuICAgICAqL1xuICAgIGdldENvbnRhaW5lckZpZWxkcyhjb250ZW50OiBDb250YWluZXJNb2RlbCk6IEZvcm1GaWVsZE1vZGVsW10ge1xuICAgICAgICBjb25zdCBzZXJpYWxpc2VkRm9ybUZpZWxkczogRm9ybUZpZWxkTW9kZWxbXSA9IFtdO1xuICAgICAgICBjb25zdCBtYXhDb2x1bW5GaWVsZHNTaXplID0gdGhpcy5nZXRNYXhDb2x1bW5GaWVsZFNpemUoY29udGVudCk7XG4gICAgICAgIGZvciAobGV0IHJvd0luZGV4ID0gMDsgcm93SW5kZXggPCBtYXhDb2x1bW5GaWVsZHNTaXplOyByb3dJbmRleCsrKSB7XG4gICAgICAgICAgICBjb250ZW50Py5jb2x1bW5zLmZsYXRNYXAoKGN1cnJlbnRDb2x1bW4pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudENvbHVtbj8uZmllbGRzW3Jvd0luZGV4XSkge1xuICAgICAgICAgICAgICAgICAgICBzZXJpYWxpc2VkRm9ybUZpZWxkcy5wdXNoKGN1cnJlbnRDb2x1bW4/LmZpZWxkc1tyb3dJbmRleF0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0Um93RWxlbWVudENvbFNwYW4gPSBjdXJyZW50Q29sdW1uPy5maWVsZHNbMF0/LmNvbHNwYW47XG4gICAgICAgICAgICAgICAgICAgIGlmICghIWZpcnN0Um93RWxlbWVudENvbFNwYW4gJiYgcm93SW5kZXggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpcnN0Um93RWxlbWVudENvbFNwYW47IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcmlhbGlzZWRGb3JtRmllbGRzLnB1c2gobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzZXJpYWxpc2VkRm9ybUZpZWxkcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE1heENvbHVtbkZpZWxkU2l6ZShjb250ZW50OiBDb250YWluZXJNb2RlbCk6IG51bWJlciB7XG4gICAgICAgIGxldCBtYXhGaWVsZFNpemUgPSAwO1xuICAgICAgICBpZiAoY29udGVudD8uY29sdW1ucz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgbWF4RmllbGRTaXplID0gY29udGVudD8uY29sdW1ucz8ucmVkdWNlKChwcmV2Q29sdW1uLCBjdXJyZW50Q29sdW1uKSA9PlxuICAgICAgICAgICAgICAgIGN1cnJlbnRDb2x1bW4uZmllbGRzLmxlbmd0aCA+IHByZXZDb2x1bW4/LmZpZWxkcz8ubGVuZ3RoID8gY3VycmVudENvbHVtbiA6IHByZXZDb2x1bW5cbiAgICAgICAgICAgICk/LmZpZWxkcz8ubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXhGaWVsZFNpemU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjb2x1bW4gd2lkdGggYmFzZWQgb24gdGhlIG51bWJlck9mQ29sdW1ucyBhbmQgY3VycmVudCBmaWVsZCdzIGNvbHNwYW4gcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb250YWluZXIgY29udGFpbmVyIG1vZGVsXG4gICAgICogQHJldHVybnMgdGhlIGNvbHVtbiB3aWR0aCBmb3IgdGhlIGdpdmVuIG1vZGVsXG4gICAgICovXG4gICAgZ2V0Q29sdW1uV2lkdGgoY29udGFpbmVyOiBDb250YWluZXJNb2RlbCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHsgZmllbGQgfSA9IGNvbnRhaW5lcjtcbiAgICAgICAgY29uc3QgY29sc3BhbiA9IGZpZWxkID8gZmllbGQuY29sc3BhbiA6IDE7XG4gICAgICAgIHJldHVybiAoMTAwIC8gZmllbGQubnVtYmVyT2ZDb2x1bW5zKSAqIGNvbHNwYW4gKyAnJztcbiAgICB9XG5cbiAgICBwcml2YXRlIHJ1bk1pZGRsZXdhcmVTZXJ2aWNlcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMubWlkZGxld2FyZVNlcnZpY2VzICYmIHRoaXMubWlkZGxld2FyZVNlcnZpY2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1GaWVsZHMgPSB0aGlzLmZvcm1EZWZpbml0aW9uLmdldEZvcm1GaWVsZHMoKTtcblxuICAgICAgICAgICAgZm9ybUZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubWlkZGxld2FyZVNlcnZpY2VzLmZvckVhY2goKG1pZGRsZXdhcmVTZXJ2aWNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtaWRkbGV3YXJlU2VydmljZS50eXBlID09PSBmaWVsZC50eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZCA9IG1pZGRsZXdhcmVTZXJ2aWNlLmdldFBhcnNlZEZpZWxkKGZpZWxkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8ZGl2IGlkPVwiYWRmLWZvcm0tcmVuZGVyZXJcIiBjbGFzcz1cInt7IGZvcm1EZWZpbml0aW9uLmNsYXNzTmFtZSB9fVwiXG4gICAgIFtuZ0NsYXNzXT1cInsgJ2FkZi1yZWFkb25seS1mb3JtJzogZm9ybURlZmluaXRpb24ucmVhZE9ubHkgfVwiPlxuICAgIDxkaXYgKm5nSWY9XCJmb3JtRGVmaW5pdGlvbi5oYXNUYWJzKClcIj5cbiAgICAgICAgPGRpdiAqbmdJZj1cImhhc1RhYnMoKVwiIGNsYXNzPVwiYWxmcmVzY28tdGFicy13aWRnZXRcIj5cbiAgICAgICAgICAgIDxtYXQtdGFiLWdyb3VwPlxuICAgICAgICAgICAgICAgIDxtYXQtdGFiICAgKm5nRm9yPVwibGV0IHRhYiBvZiB2aXNpYmxlVGFicygpXCIgW2xhYmVsXT1cInRhYi50aXRsZSB8IHRyYW5zbGF0ZSBcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLWZvcm0tdGFiLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJyZW5kZXI7IGNvbnRleHQ6IHsgZmllbGRUb1JlbmRlcjogdGFiLmZpZWxkcyB9XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvbWF0LXRhYj5cbiAgICAgICAgICAgIDwvbWF0LXRhYi1ncm91cD5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2ICpuZ0lmPVwiIWZvcm1EZWZpbml0aW9uLmhhc1RhYnMoKSAmJiBmb3JtRGVmaW5pdGlvbi5oYXNGaWVsZHMoKVwiPlxuICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJyZW5kZXI7IGNvbnRleHQ6IHsgZmllbGRUb1JlbmRlcjogZm9ybURlZmluaXRpb24uZmllbGRzIH1cIiAvPlxuICAgIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjcmVuZGVyIGxldC1maWVsZFRvUmVuZGVyPVwiZmllbGRUb1JlbmRlclwiPlxuICAgIDxkaXYgKm5nRm9yPVwibGV0IGN1cnJlbnRSb290RWxlbWVudCBvZiBmaWVsZFRvUmVuZGVyXCI+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJjdXJyZW50Um9vdEVsZW1lbnQudHlwZSA9PT0gJ2NvbnRhaW5lcicgfHwgY3VycmVudFJvb3RFbGVtZW50LnR5cGUgPT09ICdncm91cCdcIlxuICAgICAgICAgICAgIFtpZF09XCInZmllbGQtJyArIGN1cnJlbnRSb290RWxlbWVudD8uaWQgKyAnLWNvbnRhaW5lcidcIlxuICAgICAgICAgICAgIGNsYXNzPVwiYWRmLWNvbnRhaW5lci13aWRnZXRcIlxuICAgICAgICAgICAgIFtoaWRkZW5dPVwiIWN1cnJlbnRSb290RWxlbWVudD8uaXNWaXNpYmxlXCI+XG4gICAgICAgICAgICA8YWRmLWhlYWRlci13aWRnZXQgW2VsZW1lbnRdPVwiY3VycmVudFJvb3RFbGVtZW50XCIgLz5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjdXJyZW50Um9vdEVsZW1lbnQ/LmZvcm0/LmVuYWJsZUZpeGVkU3BhY2U7IGVsc2UgZml4aW5nVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLWdyaWQtbGlzdFwiXG4gICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7ICdncmlkLXRlbXBsYXRlLWNvbHVtbnMnOiAncmVwZWF0KCcgKyBnZXROdW1iZXJPZkNvbHVtbnMoY3VycmVudFJvb3RFbGVtZW50KSArICcsIDFmciknIH1cIlxuICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjdXJyZW50Um9vdEVsZW1lbnQ/LmlzRXhwYW5kZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1ncmlkLWxpc3QtaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGZpZWxkIG9mIGdldENvbnRhaW5lckZpZWxkcyhjdXJyZW50Um9vdEVsZW1lbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7ICdncmlkLWFyZWEnOiAnYXV0byAvIGF1dG8gLyBzcGFuICcgKyAoZmllbGQ/LnJvd3NwYW4gfHwgMSkgKyAnIC8gc3BhbiAnICsgKGZpZWxkPy5jb2xzcGFuIHx8IDEpIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhZGYtZm9ybS1maWVsZCAqbmdJZj1cImZpZWxkXCIgW2ZpZWxkXT1cImZpZWxkXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNmaXhpbmdUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImFkZi1ncmlkLWxpc3QtY29sdW1uLXZpZXdcIiAqbmdJZj1cImN1cnJlbnRSb290RWxlbWVudD8uaXNFeHBhbmRlZFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLWdyaWQtbGlzdC1zaW5nbGUtY29sdW1uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGN1cnJlbnRSb290RWxlbWVudD8uY29sdW1uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoLiVdPVwiZ2V0Q29sdW1uV2lkdGgoY3VycmVudFJvb3RFbGVtZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZmllbGQgb2YgY29sdW1uPy5maWVsZHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmllbGQudHlwZSA9PT0gJ3NlY3Rpb24nOyBlbHNlIGZvcm1GaWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YWRmLWZvcm0tc2VjdGlvbiBbZmllbGRdPVwiZmllbGRcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNmb3JtRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtZ3JpZC1saXN0LWNvbHVtbi12aWV3LWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhZGYtZm9ybS1maWVsZCBbZmllbGRdPVwiZmllbGRcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjb2x1bW5WaWV3SXRlbSBsZXQtY29sdW1uPVwiY29sdW1uXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1ncmlkLWxpc3QtY29sdW1uLXZpZXctaXRlbVwiICpuZ0Zvcj1cImxldCBmaWVsZCBvZiBjb2x1bW4/LmZpZWxkc1wiPlxuICAgICAgICAgICAgICAgICAgICA8YWRmLWZvcm0tZmllbGQgKm5nSWY9XCJmaWVsZFwiIFtmaWVsZF09XCJmaWVsZFwiIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cImN1cnJlbnRSb290RWxlbWVudC50eXBlID09PSAnZHluYW1pYy10YWJsZSdcIiBjbGFzcz1cImFkZi1jb250YWluZXItd2lkZ2V0XCI+XG4gICAgICAgICAgICA8YWRmLWZvcm0tZmllbGQgW2ZpZWxkXT1cImN1cnJlbnRSb290RWxlbWVudFwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLWNvbnRhaW5lci13aWRnZXRcIlxuICAgICAgICAgICAgICpuZ0lmPVwiY3VycmVudFJvb3RFbGVtZW50LnR5cGUgPT09ICdyZWFkb25seScgJiYgY3VycmVudFJvb3RFbGVtZW50LmZpZWxkLnBhcmFtcy5maWVsZC50eXBlID09PSAnZHluYW1pYy10YWJsZSdcIj5cbiAgICAgICAgICAgIDxhZGYtZm9ybS1maWVsZCBbZmllbGRdPVwiY3VycmVudFJvb3RFbGVtZW50LmZpZWxkXCIvPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -256,7 +256,7 @@ export class FormModel {
256
256
  else if (this.isContainerField(field)) {
257
257
  this.handleContainerField(field, formFieldModel);
258
258
  }
259
- else if (this.isFormField(field)) {
259
+ else {
260
260
  this.handleSingleField(field, formFieldModel);
261
261
  }
262
262
  });
@@ -264,9 +264,6 @@ export class FormModel {
264
264
  isContainerField(field) {
265
265
  return field instanceof ContainerModel;
266
266
  }
267
- isFormField(field) {
268
- return field instanceof FormFieldModel;
269
- }
270
267
  isSectionField(field) {
271
268
  return field.type === FormFieldTypes.SECTION;
272
269
  }
@@ -384,4 +381,4 @@ export class FormModel {
384
381
  this.fieldValidators = injectedFieldValidators ? [...FORM_FIELD_VALIDATORS, ...injectedFieldValidators] : [...FORM_FIELD_VALIDATORS];
385
382
  }
386
383
  }
387
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb3JlL3NyYy9saWIvZm9ybS9jb21wb25lbnRzL3dpZGdldHMvY29yZS9mb3JtLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNuRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVwRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBSXZDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sRUFBc0IscUJBQXFCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUtuRixPQUFPLEVBQUUsY0FBYyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUE2QmhHLE1BQU0sT0FBTyxTQUFTO2FBQ1gsb0JBQWUsR0FBVyxlQUFlLEFBQTFCLENBQTJCO2FBQzFDLGlCQUFZLEdBQVcsT0FBTyxBQUFsQixDQUFtQjthQUMvQixxQkFBZ0IsR0FBVyxXQUFXLEFBQXRCLENBQXVCO2FBQ3ZDLDBCQUFxQixHQUFXLGVBQWUsQUFBMUIsQ0FBMkI7SUE4QnZELFlBQ0ksSUFBVSxFQUNWLFVBQXVCLEVBQ3ZCLFdBQW9CLEtBQUssRUFDZixXQUFtQyxFQUM3QyxnQkFBMEIsRUFDMUIsdUJBQThDO1FBRnBDLGdCQUFX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USxHQUFHLFFBQVEsQ0FBQztRQUM5QixDQUFDO0lBQ0wsQ0FBQztJQUVELGdCQUFnQixDQUFDLE9BQWUsRUFBRSxLQUFVO1FBQ3hDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDekMsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNSLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLENBQUM7SUFDTCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsVUFBa0IsRUFBRSxLQUFVO1FBQzlDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbEQsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNYLFFBQVEsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQzNCLENBQUM7SUFDTCxDQUFDO0lBRU8sMkJBQTJCLENBQUMsdUJBQTZDO1FBQzdFLElBQUksQ0FBQyxlQUFlLEdBQUcsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxxQkFBcUIsRUFBRSxHQUFHLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxxQkFBcUIsQ0FBQyxDQUFDO0lBQ3pJLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDI1IEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IEZvcm1GaWVsZEV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vZXZlbnRzL2Zvcm0tZmllbGQuZXZlbnQnO1xuaW1wb3J0IHsgVmFsaWRhdGVGb3JtRmllbGRFdmVudCB9IGZyb20gJy4uLy4uLy4uL2V2ZW50cy92YWxpZGF0ZS1mb3JtLWZpZWxkLmV2ZW50JztcbmltcG9ydCB7IFZhbGlkYXRlRm9ybUV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vZXZlbnRzL3ZhbGlkYXRlLWZvcm0uZXZlbnQnO1xuaW1wb3J0IHsgQ29udGFpbmVyTW9kZWwgfSBmcm9tICcuL2NvbnRhaW5lci5tb2RlbCc7XG5pbXBvcnQgeyBGb3JtRmllbGRUeXBlcyB9IGZyb20gJy4vZm9ybS1maWVsZC10eXBlcyc7XG5pbXBvcnQgeyBGb3JtRmllbGRNb2RlbCB9IGZyb20gJy4vZm9ybS1maWVsZC5tb2RlbCc7XG5pbXBvcnQgeyBGb3JtVmFsdWVzIH0gZnJvbSAnLi9mb3JtLXZhbHVlcyc7XG5pbXBvcnQgeyBUYWJNb2RlbCB9IGZyb20gJy4vdGFiLm1vZGVsJztcblxuaW1wb3J0IHsgRm9ybVZhcmlhYmxlTW9kZWwgfSBmcm9tICcuL2Zvcm0tdmFyaWFibGUubW9kZWwnO1xuaW1wb3J0IHsgUHJvY2Vzc1ZhcmlhYmxlTW9kZWwgfSBmcm9tICcuL3Byb2Nlc3MtdmFyaWFibGUubW9kZWwnO1xuaW1wb3J0IHsgRm9ybU91dGNvbWVNb2RlbCB9IGZyb20gJy4vZm9ybS1vdXRjb21lLm1vZGVsJztcbmltcG9ydCB7IEZvcm1GaWVsZFZhbGlkYXRvciwgRk9STV9GSUVMRF9WQUxJREFUT1JTIH0gZnJvbSAnLi9mb3JtLWZpZWxkLXZhbGlkYXRvcic7XG5pbXBvcnQgeyBGb3JtRmllbGRUZW1wbGF0ZXMgfSBmcm9tICcuL2Zvcm0tZmllbGQtdGVtcGxhdGVzJztcbmltcG9ydCB7IFVwbG9hZFdpZGdldENvbnRlbnRMaW5rTW9kZWwgfSBmcm9tICcuL3VwbG9hZC13aWRnZXQtY29udGVudC1saW5rLm1vZGVsJztcbmltcG9ydCB7IEZvcm1WYWxpZGF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2Zvcm0tdmFsaWRhdGlvbi1zZXJ2aWNlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQcm9jZXNzRm9ybU1vZGVsIH0gZnJvbSAnLi9wcm9jZXNzLWZvcm0tbW9kZWwuaW50ZXJmYWNlJztcbmltcG9ydCB7IFdpZGdldFR5cGVFbnVtLCBXaWRnZXRWaXNpYmlsaXR5TW9kZWwgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvd2lkZ2V0LXZpc2liaWxpdHkubW9kZWwnO1xuaW1wb3J0IHsgVGhlbWVNb2RlbCB9IGZyb20gJy4vdGhlbWUubW9kZWwnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbmZpcm1NZXNzYWdlIHtcbiAgICBzaG93OiBib29sZWFuO1xuICAgIG1lc3NhZ2U6IHN0cmluZztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybVJlcHJlc2VudGF0aW9uTW9kZWwge1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcblxuICAgIGlkPzogc3RyaW5nIHwgbnVtYmVyO1xuICAgIG5hbWU/OiBzdHJpbmc7XG4gICAgdGFza0lkPzogc3RyaW5nO1xuICAgIHRhc2tOYW1lPzogc3RyaW5nO1xuICAgIHByb2Nlc3NEZWZpbml0aW9uSWQ/OiBzdHJpbmc7XG4gICAgY3VzdG9tRmllbGRUZW1wbGF0ZXM/OiB7XG4gICAgICAgIFtrZXk6IHN0cmluZ106IHN0cmluZztcbiAgICB9O1xuICAgIHNlbGVjdGVkT3V0Y29tZT86IHN0cmluZztcbiAgICBmaWVsZHM/OiBhbnlbXTtcbiAgICB0YWJzPzogYW55W107XG4gICAgb3V0Y29tZXM/OiBhbnlbXTtcbiAgICBmb3JtRGVmaW5pdGlvbj86IHtcbiAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICBmaWVsZHM/OiBhbnlbXTtcbiAgICB9O1xuICAgIGRpc3BsYXlNb2RlOiBzdHJpbmc7XG4gICAgdGhlbWU/OiBUaGVtZU1vZGVsO1xufVxuZXhwb3J0IGNsYXNzIEZvcm1Nb2RlbCBpbXBsZW1lbnRzIFByb2Nlc3NGb3JtTW9kZWwge1xuICAgIHN0YXRpYyBVTlNFVF9UQVNLX05BTUU6IHN0cmluZyA9ICdOYW1lbGVzcyB0YXNrJztcbiAgICBzdGF0aWMgU0FWRV9PVVRDT01FOiBzdHJpbmcgPSAnJHNhdmUnO1xuICAgIHN0YXRpYyBDT01QTEVURV9PVVRDT01FOiBzdHJpbmcgPSAnJGNvbXBsZXRlJztcbiAgICBzdGF0aWMgU1RBUlRfUFJPQ0VTU19PVVRDT01FOiBzdHJpbmcgPSAnJHN0YXJ0UHJvY2Vzcyc7XG5cbiAgICByZWFkb25seSBpZDogc3RyaW5nIHwgbnVtYmVyO1xuICAgIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgICByZWFkb25seSB0YXNrSWQ6IHN0cmluZztcbiAgICByZWFkb25seSBjb25maXJtTWVzc2FnZTogQ29uZmlybU1lc3NhZ2U7XG4gICAgcmVhZG9ubHkgdGFza05hbWUgPSBGb3JtTW9kZWwuVU5TRVRfVEFTS19OQU1FO1xuICAgIHJlYWRvbmx5IHByb2Nlc3NEZWZpbml0aW9uSWQ6IHN0cmluZztcbiAgICByZWFkb25seSBzZWxlY3RlZE91dGNvbWU6IHN0cmluZztcbiAgICByZWFkb25seSBlbmFibGVGaXhlZFNwYWNlOiBib29sZWFuO1xuICAgIHJlYWRvbmx5IGRpc3BsYXlNb2RlOiBhbnk7XG5cbiAgICBmaWVsZHNDYWNoZTogRm9ybUZpZWxkTW9kZWxbXSA9IFtdO1xuXG4gICAganNvbjogYW55O1xuICAgIG5vZGVJZDogc3RyaW5nO1xuICAgIHZhbHVlczogRm9ybVZhbHVlcyA9IHt9O1xuICAgIHRhYnM6IFRhYk1vZGVsW10gPSBbXTtcbiAgICBmaWVsZHM6IChDb250YWluZXJNb2RlbCB8IEZvcm1GaWVsZE1vZGVsKVtdID0gW107XG4gICAgb3V0Y29tZXM6IEZvcm1PdXRjb21lTW9kZWxbXSA9IFtdO1xuICAgIGZpZWxkVmFsaWRhdG9yczogRm9ybUZpZWxkVmFsaWRhdG9yW10gPSBbXTtcbiAgICBjdXN0b21GaWVsZFRlbXBsYXRlczogRm9ybUZpZWxkVGVtcGxhdGVzID0ge307XG4gICAgdGhlbWU/OiBUaGVtZU1vZGVsO1xuXG4gICAgY2xhc3NOYW1lOiBzdHJpbmc7XG4gICAgcmVhZE9ubHkgPSBmYWxzZTtcbiAgICBpc1ZhbGlkID0gdHJ1ZTtcbiAgICBwcm9jZXNzVmFyaWFibGVzOiBQcm9jZXNzVmFyaWFibGVNb2RlbFtdID0gW107XG4gICAgdmFyaWFibGVzOiBGb3JtVmFyaWFibGVNb2RlbFtdID0gW107XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAganNvbj86IGFueSxcbiAgICAgICAgZm9ybVZhbHVlcz86IEZvcm1WYWx1ZXMsXG4gICAgICAgIHJlYWRPbmx5OiBib29sZWFuID0gZmFsc2UsXG4gICAgICAgIHByb3RlY3RlZCBmb3JtU2VydmljZT86IEZvcm1WYWxpZGF0aW9uU2VydmljZSxcbiAgICAgICAgZW5hYmxlRml4ZWRTcGFjZT86IGJvb2xlYW4sXG4gICAgICAgIGluamVjdGVkRmllbGRWYWxpZGF0b3JzPzogRm9ybUZpZWxkVmFsaWRhdG9yW11cbiAgICApIHtcbiAgICAgICAgdGhpcy5yZWFkT25seSA9IHJlYWRPbmx5O1xuICAgICAgICB0aGlzLmpzb24gPSBqc29uO1xuXG4gICAgICAgIGlmIChqc29uKSB7XG4gICAgICAgICAgICB0aGlzLmlkID0ganNvbi5pZDtcbiAgICAgICAgICAgIHRoaXMubmFtZSA9IGpzb24ubmFtZTtcbiAgICAgICAgICAgIHRoaXMudGFza0lkID0ganNvbi50YXNrSWQ7XG4gICAgICAgICAgICB0aGlzLnRhc2tOYW1lID0ganNvbi50YXNrTmFtZSB8fCBqc29uLm5hbWUgfHwgRm9ybU1vZGVsLlVOU0VUX1RBU0tfTkFNRTtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc0RlZmluaXRpb25JZCA9IGpzb24ucHJvY2Vzc0RlZmluaXRpb25JZDtcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tRmllbGRUZW1wbGF0ZXMgPSBqc29uLmN1c3RvbUZpZWxkVGVtcGxhdGVzIHx8IHt9O1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE91dGNvbWUgPSBqc29uLnNlbGVjdGVkT3V0Y29tZTtcbiAgICAgICAgICAgIHRoaXMuY2xhc3NOYW1lID0ganNvbi5jbGFzc05hbWUgfHwgJyc7XG4gICAgICAgICAgICB0aGlzLnZhcmlhYmxlcyA9IGpzb24udmFyaWFibGVzIHx8IGpzb24uZm9ybURlZmluaXRpb24/LnZhcmlhYmxlcyB8fCBbXTtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1ZhcmlhYmxlcyA9IGpzb24ucHJvY2Vzc1ZhcmlhYmxlcyB8fCBbXTtcbiAgICAgICAgICAgIHRoaXMuZW5hYmxlRml4ZWRTcGFjZSA9IGVuYWJsZUZpeGVkU3BhY2U7XG4gICAgICAgICAgICB0aGlzLmNvbmZpcm1NZXNzYWdlID0ganNvbi5jb25maXJtTWVzc2FnZSB8fCB7fTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheU1vZGUgPSBqc29uLmRpc3BsYXlNb2RlO1xuICAgICAgICAgICAgdGhpcy50aGVtZSA9IGpzb24udGhlbWUgfHwganNvbi5mb3JtRGVmaW5pdGlvbj8udGhlbWU7XG5cbiAgICAgICAgICAgIHRoaXMudGFicyA9IChqc29uLnRhYnMgfHwgW10pLm1hcCgodGFiSnNvbikgPT4gbmV3IFRhYk1vZGVsKHRoaXMsIHRhYkpzb24pKTtcblxuICAgICAgICAgICAgdGhpcy5maWVsZHMgPSB0aGlzLnBhcnNlUm9vdEZpZWxkcyhqc29uKTtcbiAgICAgICAgICAgIHRoaXMuZmllbGRzQ2FjaGUgPSB0aGlzLmdldEZvcm1GaWVsZHMoKTtcblxuICAgICAgICAgICAgaWYgKGZvcm1WYWx1ZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWREYXRhKGZvcm1WYWx1ZXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnBhcnNlT3V0Y29tZXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubG9hZEluamVjdGVkRmllbGRWYWxpZGF0b3JzKGluamVjdGVkRmllbGRWYWxpZGF0b3JzKTtcbiAgICAgICAgdGhpcy52YWxpZGF0ZUZvcm0oKTtcbiAgICB9XG5cbiAgICBvbkZvcm1GaWVsZENoYW5nZWQoZmllbGQ6IEZvcm1GaWVsZE1vZGVsKSB7XG4gICAgICAgIHRoaXMudmFsaWRhdGVGaWVsZChmaWVsZCk7XG5cbiAgICAgICAgaWYgKHRoaXMuZm9ybVNlcnZpY2UpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybVNlcnZpY2UuZm9ybUZpZWxkVmFsdWVDaGFuZ2VkLm5leHQobmV3IEZvcm1GaWVsZEV2ZW50KHRoaXMsIGZpZWxkKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBWYWxpZGF0ZXMgZW50aXJlIGZvcm0gYW5kIGFsbCBmb3JtIGZpZWxkcy5cbiAgICAgKi9cbiAgICB2YWxpZGF0ZUZvcm0oKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRlRm9ybUV2ZW50OiBhbnkgPSBuZXcgVmFsaWRhdGVGb3JtRXZlbnQodGhpcyk7XG5cbiAgICAgICAgY29uc3QgZXJyb3JzRmllbGQ6IEZvcm1GaWVsZE1vZGVsW10gPSB0aGlzLmZpZWxkc0NhY2hlLmZpbHRlcigoZmllbGQpID0+IHtcbiAgICAgICAgICAgIGlmICghRm9ybUZpZWxkVHlwZXMuaXNSZWFjdGl2ZVR5cGUoZmllbGQudHlwZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gIWZpZWxkLnZhbGlkYXRlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBmaWVsZC52YWxpZGF0aW9uU3VtbWFyeS5pc0FjdGl2ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmlzVmFsaWQgPSBlcnJvcnNGaWVsZC5sZW5ndGggPD0gMDtcblxuICAgICAgICBpZiAodGhpcy5mb3JtU2VydmljZSkge1xuICAgICAgICAgICAgdmFsaWRhdGVGb3JtRXZlbnQuaXNWYWxpZCA9IHRoaXMuaXNWYWxpZDtcbiAgICAgICAgICAgIHZhbGlkYXRlRm9ybUV2ZW50LmVycm9yc0ZpZWxkID0gZXJyb3JzRmllbGQ7XG4gICAgICAgICAgICB0aGlzLmZvcm1TZXJ2aWNlLnZhbGlkYXRlRm9ybS5uZXh0KHZhbGlkYXRlRm9ybUV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFZhbGlkYXRlcyBhIHNwZWNpZmljIGZvcm0gZmllbGQsIHRyaWdnZXJzIGZvcm0gdmFsaWRhdGlvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBmaWVsZCBGb3JtIGZpZWxkIHRvIHZhbGlkYXRlLlxuICAgICAqL1xuICAgIHZhbGlkYXRlRmllbGQoZmllbGQ6IEZvcm1GaWVsZE1vZGVsKTogdm9pZCB7XG4gICAgICAgIGlmICghZmllbGQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZhbGlkYXRlRmllbGRFdmVudCA9IG5ldyBWYWxpZGF0ZUZvcm1GaWVsZEV2ZW50KHRoaXMsIGZpZWxkKTtcblxuICAgICAgICBpZiAodGhpcy5mb3JtU2VydmljZSkge1xuICAgICAgICAgICAgdGhpcy5mb3JtU2VydmljZS52YWxpZGF0ZUZvcm1GaWVsZC5uZXh0KHZhbGlkYXRlRmllbGRFdmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXZhbGlkYXRlRmllbGRFdmVudC5pc1ZhbGlkKSB7XG4gICAgICAgICAgICB0aGlzLm1hcmtBc0ludmFsaWQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWxpZGF0ZUZpZWxkRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFGb3JtRmllbGRUeXBlcy5pc1JlYWN0aXZlVHlwZShmaWVsZC50eXBlKSAmJiAhZmllbGQudmFsaWRhdGUoKSkge1xuICAgICAgICAgICAgdGhpcy5tYXJrQXNJbnZhbGlkKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnZhbGlkYXRlRm9ybSgpO1xuICAgIH1cblxuICAgIC8vIEFjdGl2aXRpIHN1cHBvcnRzIDMgdHlwZXMgb2Ygcm9vdCBmaWVsZHM6IGNvbnRhaW5lcnxncm91cHxkeW5hbWljLXRhYmxlXG4gICAgcHJpdmF0ZSBwYXJzZVJvb3RGaWVsZHMoanNvbjogYW55KTogKENvbnRhaW5lck1vZGVsIHwgRm9ybUZpZWxkTW9kZWwpW10ge1xuICAgICAgICBsZXQgZmllbGRzID0gW107XG5cbiAgICAgICAgaWYgKGpzb24uZmllbGRzKSB7XG4gICAgICAgICAgICBmaWVsZHMgPSBqc29uLmZpZWxkcztcbiAgICAgICAgfSBlbHNlIGlmIChqc29uLmZvcm1EZWZpbml0aW9uPy5maWVsZHMpIHtcbiAgICAgICAgICAgIGZpZWxkcyA9IGpzb24uZm9ybURlZmluaXRpb24uZmllbGRzO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgcm9vdEVsZW1lbnRzOiAoQ29udGFpbmVyTW9kZWwgfCBGb3JtRmllbGRNb2RlbClbXSA9IFtdO1xuICAgICAgICBsZXQgY3VycmVudFJvb3RFbGVtZW50O1xuICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykge1xuICAgICAgICAgICAgaWYgKGZpZWxkPy50eXBlID09PSBGb3JtRmllbGRUeXBlcy5EWU5BTUlDX1RBQkxFKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFJvb3RFbGVtZW50ID0gbmV3IEZvcm1GaWVsZE1vZGVsKHRoaXMsIGZpZWxkKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFJvb3RFbGVtZW50ID0gbmV3IENvbnRhaW5lck1vZGVsKG5ldyBGb3JtRmllbGRNb2RlbCh0aGlzLCBmaWVsZCkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZmllbGQudGFiKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGFiID0gdGhpcy50YWJzLmZpbmQoKGN1cnJlbnRUYWIpID0+IGZpZWxkLnRhYiA9PT0gY3VycmVudFRhYi5pZCk7XG4gICAgICAgICAgICAgICAgaWYgKHRhYikge1xuICAgICAgICAgICAgICAgICAgICB0YWIuZmllbGRzLnB1c2goY3VycmVudFJvb3RFbGVtZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJvb3RFbGVtZW50cy5wdXNoKGN1cnJlbnRSb290RWxlbWVudCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcm9vdEVsZW1lbnRzO1xuICAgIH1cblxuICAgIC8vIExvYWRzIGV4dGVybmFsIGRhdGEgYW5kIG92ZXJyaWRlcyBmaWVsZCB2YWx1ZXNcbiAgICAvLyBUeXBpY2FsbHkgdXNlZCB3aGVuIGZvcm0gZGVmaW5pdGlvbiBhbmQgZm9ybSBkYXRhIGNvbWluZyBmcm9tIGRpZmZlcmVudCBzb3VyY2VzXG4gICAgcHJpdmF0ZSBsb2FkRGF0YShmb3JtVmFsdWVzOiBGb3JtVmFsdWVzKSB7XG4gICAgICAgIGZvciAoY29uc3QgZmllbGQgb2YgdGhpcy5maWVsZHNDYWNoZSkge1xuICAgICAgICAgICAgY29uc3QgdmFyaWFibGVJZCA9IGB2YXJpYWJsZXMuJHtmaWVsZC5uYW1lfWA7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmNhbk92ZXJyaWRlRmllbGRWYWx1ZVdpdGhQcm9jZXNzVmFsdWUoZmllbGQsIHZhcmlhYmxlSWQsIGZvcm1WYWx1ZXMpKSB7XG4gICAgICAgICAgICAgICAgZmllbGQuanNvbi52YWx1ZSA9IGZvcm1WYWx1ZXNbdmFyaWFibGVJZF0gfHwgZm9ybVZhbHVlc1tmaWVsZC5pZF07XG4gICAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSBmaWVsZC5wYXJzZVZhbHVlKGZpZWxkLmpzb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYW5PdmVycmlkZUZpZWxkVmFsdWVXaXRoUHJvY2Vzc1ZhbHVlKGZpZWxkOiBGb3JtRmllbGRNb2RlbCwgdmFyaWFibGVJZDogc3RyaW5nLCBmb3JtVmFsdWVzOiBGb3JtVmFsdWVzKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhRm9ybUZpZWxkVHlwZXMuaXNDb25zdGFudFZhbHVlVHlwZShmaWVsZC50eXBlKSAmJiAodGhpcy5pc0RlZmluZWQoZm9ybVZhbHVlc1t2YXJpYWJsZUlkXSkgfHwgdGhpcy5pc0RlZmluZWQoZm9ybVZhbHVlc1tmaWVsZC5pZF0pKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzRGVmaW5lZCh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBmb3JtIHZhcmlhYmxlIHRoYXQgbWF0Y2hlcyB0aGUgaWRlbnRpZmllci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpZGVudGlmaWVyIFRoZSBgbmFtZWAgb3IgYGlkYCB2YWx1ZS5cbiAgICAgKiBAcmV0dXJucyBmb3JtIHZhcmlhYmxlIG1vZGVsXG4gICAgICovXG4gICAgZ2V0Rm9ybVZhcmlhYmxlKGlkZW50aWZpZXI6IHN0cmluZyk6IEZvcm1WYXJpYWJsZU1vZGVsIHtcbiAgICAgICAgaWYgKGlkZW50aWZpZXIpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhcmlhYmxlcy5maW5kKCh2YXJpYWJsZSkgPT4gdmFyaWFibGUubmFtZSA9PT0gaWRlbnRpZmllciB8fCB2YXJpYWJsZS5pZCA9PT0gaWRlbnRpZmllcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgdmFsdWUgb2YgdGhlIGZvcm0gdmFyaWFibGUgdGhhdCBtYXRjaGVzIHRoZSBpZGVudGlmaWVyLlxuICAgICAqIFByb3ZpZGVzIGFkZGl0aW9uYWwgY29udmVyc2lvbiBvZiB0eXBlcyAoZGF0ZSwgYm9vbGVhbikuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaWRlbnRpZmllciBUaGUgYG5hbWVgIG9yIGBpZGAgdmFsdWVcbiAgICAgKiBAcmV0dXJucyBmb3JtIHZhcmlhYmxlIHZhbHVlXG4gICAgICovXG4gICAgZ2V0RGVmYXVsdEZvcm1WYXJpYWJsZVZhbHVlKGlkZW50aWZpZXI6IHN0cmluZyk6IGFueSB7XG4gICAgICAgIGNvbnN0IHZhcmlhYmxlID0gdGhpcy5nZXRGb3JtVmFyaWFibGUoaWRlbnRpZmllcik7XG5cbiAgICAgICAgaWYgKHZhcmlhYmxlICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2YXJpYWJsZSwgJ3ZhbHVlJykpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlVmFsdWUodmFyaWFibGUudHlwZSwgdmFyaWFibGUudmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgcHJvY2VzcyB2YXJpYWJsZSB2YWx1ZS5cbiAgICAgKiBXaGVuIG1hcHBpbmcgYSBwcm9jZXNzIHZhcmlhYmxlIHdpdGggYSBmb3JtIHZhcmlhYmxlIHRoZSBtYXBwaW5nXG4gICAgICogaXMgYWxyZWFkeSByZXNvbHZlZCBieSB0aGUgcmVzdCBBUEkgd2l0aCB0aGUgbmFtZSBvZiB2YXJpYWJsZXMuZm9ybVZhcmlhYmxlTmFtZVxuICAgICAqXG4gICAgICogQHBhcmFtIG5hbWUgVmFyaWFibGUgbmFtZVxuICAgICAqIEByZXR1cm5zIHByb2Nlc3MgdmFyaWFibGUgdmFsdWVcbiAgICAgKi9cbiAgICBnZXRQcm9jZXNzVmFyaWFibGVWYWx1ZShuYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgICAgICBsZXQgdmFsdWU7XG4gICAgICAgIGlmICh0aGlzLnByb2Nlc3NWYXJpYWJsZXM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgbmFtZXMgPSBbYHZhcmlhYmxlcy4ke25hbWV9YCwgbmFtZV07XG5cbiAgICAgICAgICAgIGNvbnN0IHByb2Nlc3NWYXJpYWJsZSA9IHRoaXMucHJvY2Vzc1ZhcmlhYmxlcy5maW5kKChlbnRyeSkgPT4gbmFtZXMuaW5jbHVkZXMoZW50cnkubmFtZSkpO1xuXG4gICAgICAgICAgICBpZiAocHJvY2Vzc1ZhcmlhYmxlKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLnBhcnNlVmFsdWUocHJvY2Vzc1ZhcmlhYmxlLnR5cGUsIHByb2Nlc3NWYXJpYWJsZS52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHRoaXMuZ2V0RGVmYXVsdEZvcm1WYXJpYWJsZVZhbHVlKG5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwYXJzZVZhbHVlKHR5cGU6IHN0cmluZywgdmFsdWU6IGFueSk6IGFueSB7XG4gICAgICAgIGlmICh0eXBlICYmIHZhbHVlKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ1QnKSA/IHZhbHVlIDogYCR7dmFsdWV9VDAwOjAwOjAwLjAwMFpgO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UodmFsdWUpIDogdmFsdWU7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIGhhc1RhYnMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhYnMgJiYgdGhpcy50YWJzLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgaGFzRmllbGRzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5maWVsZHMgJiYgdGhpcy5maWVsZHMubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBoYXNPdXRjb21lcygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3V0Y29tZXMgJiYgdGhpcy5vdXRjb21lcy5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIGdldEZpZWxkQnlJZChmaWVsZElkOiBzdHJpbmcpOiBGb3JtRmllbGRNb2RlbCB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpZWxkc0NhY2hlLmZpbmQoKGZpZWxkKSA9PiBmaWVsZC5pZCA9PT0gZmllbGRJZCk7XG4gICAgfVxuXG4gICAgZ2V0Rm9ybUZpZWxkcyhmaWx0ZXJUeXBlcz86IHN0cmluZ1tdKTogRm9ybUZpZWxkTW9kZWxbXSB7XG4gICAgICAgIGlmICh0aGlzLmZpZWxkc0NhY2hlPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbHRlckZpZWxkc0J5VHlwZSh0aGlzLmZpZWxkc0NhY2hlLCBmaWx0ZXJUeXBlcyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmb3JtRmllbGRNb2RlbDogRm9ybUZpZWxkTW9kZWxbXSA9IFtdO1xuICAgICAgICB0aGlzLnByb2Nlc3NGaWVsZHModGhpcy5maWVsZHMsIGZvcm1GaWVsZE1vZGVsKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyRmllbGRzQnlUeXBlKGZvcm1GaWVsZE1vZGVsLCBmaWx0ZXJUeXBlcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcm9jZXNzRmllbGRzKGZpZWxkczogKENvbnRhaW5lck1vZGVsIHwgRm9ybUZpZWxkTW9kZWwpW10sIGZvcm1GaWVsZE1vZGVsOiBGb3JtRmllbGRNb2RlbFtdKTogdm9pZCB7XG4gICAgICAgIGZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNTZWN0aW9uRmllbGQoZmllbGQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVTZWN0aW9uRmllbGQoZmllbGQsIGZvcm1GaWVsZE1vZGVsKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0NvbnRhaW5lckZpZWxkKGZpZWxkKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQ29udGFpbmVyRmllbGQoZmllbGQsIGZvcm1GaWVsZE1vZGVsKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0Zvcm1GaWVsZChmaWVsZCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVNpbmdsZUZpZWxkKGZpZWxkLCBmb3JtRmllbGRNb2RlbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNDb250YWluZXJGaWVsZChmaWVsZDogQ29udGFpbmVyTW9kZWwgfCBGb3JtRmllbGRNb2RlbCk6IGZpZWxkIGlzIENvbnRhaW5lck1vZGVsIHtcbiAgICAgICAgcmV0dXJuIGZpZWxkIGluc3RhbmNlb2YgQ29udGFpbmVyTW9kZWw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0Zvcm1GaWVsZChmaWVsZDogQ29udGFpbmVyTW9kZWwgfCBGb3JtRmllbGRNb2RlbCk6IGZpZWxkIGlzIEZvcm1GaWVsZE1vZGVsIHtcbiAgICAgICAgcmV0dXJuIGZpZWxkIGluc3RhbmNlb2YgRm9ybUZpZWxkTW9kZWw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1NlY3Rpb25GaWVsZChmaWVsZDogQ29udGFpbmVyTW9kZWwgfCBGb3JtRmllbGRNb2RlbCk6IGZpZWxkIGlzIEZvcm1GaWVsZE1vZGVsIHtcbiAgICAgICAgcmV0dXJuIGZpZWxkLnR5cGUgPT09IEZvcm1GaWVsZFR5cGVzLlNFQ1RJT047XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVTZWN0aW9uRmllbGQoc2VjdGlvbjogRm9ybUZpZWxkTW9kZWwsIGZvcm1GaWVsZE1vZGVsOiBGb3JtRmllbGRNb2RlbFtdKTogdm9pZCB7XG4gICAgICAgIGZvcm1GaWVsZE1vZGVsLnB1c2goc2VjdGlvbik7XG4gICAgICAgIHNlY3Rpb24uY29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc0ZpZWxkcyhjb2x1bW4uZmllbGRzLCBmb3JtRmllbGRNb2RlbCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlQ29udGFpbmVyRmllbGQoY29udGFpbmVyOiBDb250YWluZXJNb2RlbCwgZm9ybUZpZWxkTW9kZWw6IEZvcm1GaWVsZE1vZGVsW10pOiB2b2lkIHtcbiAgICAgICAgZm9ybUZpZWxkTW9kZWwucHVzaChjb250YWluZXIuZmllbGQpO1xuICAgICAgICBjb250YWluZXIuZmllbGQuY29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc0ZpZWxkcyhjb2x1bW4uZmllbGRzLCBmb3JtRmllbGRNb2RlbCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlU2luZ2xlRmllbGQoZmllbGQ6IEZvcm1GaWVsZE1vZGVsLCBmb3JtRmllbGRNb2RlbDogRm9ybUZpZWxkTW9kZWxbXSk6IHZvaWQge1xuICAgICAgICBmb3JtRmllbGRNb2RlbC5wdXNoKGZpZWxkKTtcbiAgICAgICAgaWYgKGZpZWxkLmZpZWxkcykge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzRmllbGRzKE9iamVjdC52YWx1ZXMoZmllbGQuZmllbGRzKSwgZm9ybUZpZWxkTW9kZWwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaWx0ZXJGaWVsZHNCeVR5cGUoZmllbGRzOiBGb3JtRmllbGRNb2RlbFtdLCB0eXBlcz86IHN0cmluZ1tdKTogRm9ybUZpZWxkTW9kZWxbXSB7XG4gICAgICAgIGlmICghdHlwZXM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGZpZWxkcztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmaWVsZHMuZmlsdGVyKChmaWVsZCkgPT4gdHlwZXMuaW5jbHVkZXMoZmllbGQ/LnR5cGUpKTtcbiAgICB9XG5cbiAgICBtYXJrQXNJbnZhbGlkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzVmFsaWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcGFyc2VPdXRjb21lcygpIHtcbiAgICAgICAgaWYgKHRoaXMuanNvbi5maWVsZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNhdmVPdXRjb21lID0gbmV3IEZvcm1PdXRjb21lTW9kZWwodGhpcywge1xuICAgICAgICAgICAgICAgIGlkOiBGb3JtTW9kZWwuU0FWRV9PVVRDT01FLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdTQVZFJyxcbiAgICAgICAgICAgICAgICBpc1N5c3RlbTogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBjb21wbGV0ZU91dGNvbWUgPSBuZXcgRm9ybU91dGNvbWVNb2RlbCh0aGlzLCB7XG4gICAgICAgICAgICAgICAgaWQ6IEZvcm1Nb2RlbC5DT01QTEVURV9PVVRDT01FLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdDT01QTEVURScsXG4gICAgICAgICAgICAgICAgaXNTeXN0ZW06IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRQcm9jZXNzT3V0Y29tZSA9IG5ldyBGb3JtT3V0Y29tZU1vZGVsKHRoaXMsIHtcbiAgICAgICAgICAgICAgICBpZDogRm9ybU1vZGVsLlNUQVJUX1BST0NFU1NfT1VUQ09NRSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnU1RBUlQgUFJPQ0VTUycsXG4gICAgICAgICAgICAgICAgaXNTeXN0ZW06IHRydWVcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBjdXN0b21PdXRjb21lcyA9ICh0aGlzLmpzb24ub3V0Y29tZXMgfHwgW10pLm1hcCgob2JqKSA9PiBuZXcgRm9ybU91dGNvbWVNb2RlbCh0aGlzLCBvYmopKTtcblxuICAgICAgICAgICAgdGhpcy5vdXRjb21lcyA9IFtzYXZlT3V0Y29tZV0uY29uY2F0KGN1c3RvbU91dGNvbWVzLmxlbmd0aCA+IDAgPyBjdXN0b21PdXRjb21lcyA6IFtjb21wbGV0ZU91dGNvbWUsIHN0YXJ0UHJvY2Vzc091dGNvbWVdKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFkZFZhbHVlc05vdFByZXNlbnQodmFsdWVzVG9TZXRJZk5vdFByZXNlbnQ6IEZvcm1WYWx1ZXMpIHtcbiAgICAgICAgdGhpcy5maWVsZHNDYWNoZS5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgaWYgKHZhbHVlc1RvU2V0SWZOb3RQcmVzZW50W2ZpZWxkLmlkXSAmJiAoIXRoaXMudmFsdWVzW2ZpZWxkLmlkXSB8fCB0aGlzLmlzVmFsaWREcm9wRG93bihmaWVsZC5pZCkpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbZmllbGQuaWRdID0gdmFsdWVzVG9TZXRJZk5vdFByZXNlbnRbZmllbGQuaWRdO1xuICAgICAgICAgICAgICAgIGZpZWxkLmpzb24udmFsdWUgPSB0aGlzLnZhbHVlc1tmaWVsZC5pZF07XG4gICAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSBmaWVsZC5wYXJzZVZhbHVlKGZpZWxkLmpzb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzVmFsaWREcm9wRG93bihrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuZ2V0RmllbGRCeUlkKGtleSk7XG4gICAgICAgIGlmIChmaWVsZC50eXBlID09PSBGb3JtRmllbGRUeXBlcy5EUk9QRE9XTikge1xuICAgICAgICAgICAgaWYgKGZpZWxkLmhhc011bHRpcGxlVmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZXNba2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIHRoaXMudmFsdWVzW2tleV0gPT09ICdzdHJpbmcnID8gdGhpcy52YWx1ZXNba2V5XSA9PT0gJ2VtcHR5JyA6IE9iamVjdC5rZXlzKHRoaXMudmFsdWVzW2tleV0pLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgc2V0Tm9kZUlkVmFsdWVGb3JWaWV3ZXJzTGlua2VkVG9VcGxvYWRXaWRnZXQobGlua2VkVXBsb2FkV2lkZ2V0Q29udGVudFNlbGVjdGVkOiBVcGxvYWRXaWRnZXRDb250ZW50TGlua01vZGVsKSB7XG4gICAgICAgIGNvbnN0IGxpbmtlZFdpZGdldFR5cGUgPSBsaW5rZWRVcGxvYWRXaWRnZXRDb250ZW50U2VsZWN0ZWQ/Lm9wdGlvbnM/LmxpbmtlZFdpZGdldFR5cGUgPz8gJ3VwbG9hZFdpZGdldCc7XG5cbiAgICAgICAgY29uc3Qgc3Vic2NyaWJlZFZpZXdlcnMgPSB0aGlzLmZpZWxkc0NhY2hlLmZpbHRlcihcbiAgICAgICAgICAgIChmaWVsZCkgPT4gbGlua2VkVXBsb2FkV2lkZ2V0Q29udGVudFNlbGVjdGVkLnVwbG9hZFdpZGdldElkID09PSBmaWVsZC5wYXJhbXNbbGlua2VkV2lkZ2V0VHlwZV1cbiAgICAgICAgKTtcblxuICAgICAgICBzdWJzY3JpYmVkVmlld2Vycy5mb3JFYWNoKCh2aWV3ZXIpID0+IHtcbiAgICAgICAgICAgIHRoaXMudmFsdWVzW3ZpZXdlci5pZF0gPSBsaW5rZWRVcGxvYWRXaWRnZXRDb250ZW50U2VsZWN0ZWQuaWQ7XG4gICAgICAgICAgICB2aWV3ZXIuanNvbi52YWx1ZSA9IHRoaXMudmFsdWVzW3ZpZXdlci5pZF07XG4gICAgICAgICAgICB2aWV3ZXIudmFsdWUgPSB2aWV3ZXIucGFyc2VWYWx1ZSh2aWV3ZXIuanNvbik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNoYW5nZUZpZWxkVmlzaWJpbGl0eShmaWVsZElkOiBzdHJpbmcsIHZpc2liaWxpdHk6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdmlzaWJpbGl0eVJ1bGU6IFdpZGdldFZpc2liaWxpdHlNb2RlbCA9IG5ldyBXaWRnZXRWaXNpYmlsaXR5TW9kZWwoKTtcblxuICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuZ2V0RmllbGRCeUlkKGZpZWxkSWQpO1xuICAgICAgICBpZiAoZmllbGQpIHtcbiAgICAgICAgICAgIHZpc2liaWxpdHlSdWxlLm9wZXJhdG9yID0gdmlzaWJpbGl0eSA/ICdlbXB0eScgOiAnIWVtcHR5JztcbiAgICAgICAgICAgIHZpc2liaWxpdHlSdWxlLmxlZnRUeXBlID0gV2lkZ2V0VHlwZUVudW0uZmllbGQ7XG4gICAgICAgICAgICBmaWVsZC52aXNpYmlsaXR5Q29uZGl0aW9uID0gdmlzaWJpbGl0eVJ1bGU7XG4gICAgICAgICAgICBmaWVsZC5pc1Zpc2libGUgPSB2aXNpYmlsaXR5O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2hhbmdlRmllbGREaXNhYmxlZChmaWVsZElkOiBzdHJpbmcsIGRpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5nZXRGaWVsZEJ5SWQoZmllbGRJZCk7XG4gICAgICAgIGlmIChmaWVsZCkge1xuICAgICAgICAgICAgZmllbGQucmVhZE9ubHkgPSB0aGlzLnJlYWRPbmx5IHx8IGRpc2FibGVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2hhbmdlRmllbGRSZXF1aXJlZChmaWVsZElkOiBzdHJpbmcsIHJlcXVpcmVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5nZXRGaWVsZEJ5SWQoZmllbGRJZCk7XG4gICAgICAgIGlmIChmaWVsZCkge1xuICAgICAgICAgICAgZmllbGQucmVxdWlyZWQgPSByZXF1aXJlZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNoYW5nZUZpZWxkVmFsdWUoZmllbGRJZDogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5nZXRGaWVsZEJ5SWQoZmllbGRJZCk7XG4gICAgICAgIGlmIChmaWVsZCkge1xuICAgICAgICAgICAgZmllbGQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNoYW5nZVZhcmlhYmxlVmFsdWUodmFyaWFibGVJZDogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHZhcmlhYmxlID0gdGhpcy5nZXRGb3JtVmFyaWFibGUodmFyaWFibGVJZCk7XG4gICAgICAgIGlmICh2YXJpYWJsZSkge1xuICAgICAgICAgICAgdmFyaWFibGUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgbG9hZEluamVjdGVkRmllbGRWYWxpZGF0b3JzKGluamVjdGVkRmllbGRWYWxpZGF0b3JzOiBGb3JtRmllbGRWYWxpZGF0b3JbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLmZpZWxkVmFsaWRhdG9ycyA9IGluamVjdGVkRmllbGRWYWxpZGF0b3JzID8gWy4uLkZPUk1fRklFTERfVkFMSURBVE9SUywgLi4uaW5qZWN0ZWRGaWVsZFZhbGlkYXRvcnNdIDogWy4uLkZPUk1fRklFTERfVkFMSURBVE9SU107XG4gICAgfVxufVxuIl19
384
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb3JlL3NyYy9saWIvZm9ybS9jb21wb25lbnRzL3dpZGdldHMvY29yZS9mb3JtLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNuRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVwRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBSXZDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sRUFBc0IscUJBQXFCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUtuRixPQUFPLEVBQUUsY0FBYyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUE2QmhHLE1BQU0sT0FBTyxTQUFTO2FBQ1gsb0JBQWUsR0FBVyxlQUFlLEFBQTFCLENBQTJCO2FBQzFDLGlCQUFZLEdBQVcsT0FBTyxBQUFsQixDQUFtQjthQUMvQixxQkFBZ0IsR0FBVyxXQUFXLEFBQXRCLENBQXVCO2FBQ3ZDLDBCQUFxQixHQUFXLGVBQWUsQUFBMUIsQ0FBMkI7SUE4QnZELFlBQ0ksSUFBVSxFQUNWLFVBQXVCLEVBQ3ZCLFdBQW9CLEtBQUssRUFDZixXQUFtQyxFQUM3QyxnQkFBMEIsRUFDMUIsdUJBQThDO1FBRnBDLGdCQUFX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WSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3pDLElBQUksS0FBSyxFQUFFLENBQUM7WUFDUixLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUN4QixDQUFDO0lBQ0wsQ0FBQztJQUVELG1CQUFtQixDQUFDLFVBQWtCLEVBQUUsS0FBVTtRQUM5QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2xELElBQUksUUFBUSxFQUFFLENBQUM7WUFDWCxRQUFRLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUMzQixDQUFDO0lBQ0wsQ0FBQztJQUVPLDJCQUEyQixDQUFDLHVCQUE2QztRQUM3RSxJQUFJLENBQUMsZUFBZSxHQUFHLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcscUJBQXFCLEVBQUUsR0FBRyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcscUJBQXFCLENBQUMsQ0FBQztJQUN6SSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IMKpIDIwMDUtMjAyNSBIeWxhbmQgU29mdHdhcmUsIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgeyBGb3JtRmllbGRFdmVudCB9IGZyb20gJy4uLy4uLy4uL2V2ZW50cy9mb3JtLWZpZWxkLmV2ZW50JztcbmltcG9ydCB7IFZhbGlkYXRlRm9ybUZpZWxkRXZlbnQgfSBmcm9tICcuLi8uLi8uLi9ldmVudHMvdmFsaWRhdGUtZm9ybS1maWVsZC5ldmVudCc7XG5pbXBvcnQgeyBWYWxpZGF0ZUZvcm1FdmVudCB9IGZyb20gJy4uLy4uLy4uL2V2ZW50cy92YWxpZGF0ZS1mb3JtLmV2ZW50JztcbmltcG9ydCB7IENvbnRhaW5lck1vZGVsIH0gZnJvbSAnLi9jb250YWluZXIubW9kZWwnO1xuaW1wb3J0IHsgRm9ybUZpZWxkVHlwZXMgfSBmcm9tICcuL2Zvcm0tZmllbGQtdHlwZXMnO1xuaW1wb3J0IHsgRm9ybUZpZWxkTW9kZWwgfSBmcm9tICcuL2Zvcm0tZmllbGQubW9kZWwnO1xuaW1wb3J0IHsgRm9ybVZhbHVlcyB9IGZyb20gJy4vZm9ybS12YWx1ZXMnO1xuaW1wb3J0IHsgVGFiTW9kZWwgfSBmcm9tICcuL3RhYi5tb2RlbCc7XG5cbmltcG9ydCB7IEZvcm1WYXJpYWJsZU1vZGVsIH0gZnJvbSAnLi9mb3JtLXZhcmlhYmxlLm1vZGVsJztcbmltcG9ydCB7IFByb2Nlc3NWYXJpYWJsZU1vZGVsIH0gZnJvbSAnLi9wcm9jZXNzLXZhcmlhYmxlLm1vZGVsJztcbmltcG9ydCB7IEZvcm1PdXRjb21lTW9kZWwgfSBmcm9tICcuL2Zvcm0tb3V0Y29tZS5tb2RlbCc7XG5pbXBvcnQgeyBGb3JtRmllbGRWYWxpZGF0b3IsIEZPUk1fRklFTERfVkFMSURBVE9SUyB9IGZyb20gJy4vZm9ybS1maWVsZC12YWxpZGF0b3InO1xuaW1wb3J0IHsgRm9ybUZpZWxkVGVtcGxhdGVzIH0gZnJvbSAnLi9mb3JtLWZpZWxkLXRlbXBsYXRlcyc7XG5pbXBvcnQgeyBVcGxvYWRXaWRnZXRDb250ZW50TGlua01vZGVsIH0gZnJvbSAnLi91cGxvYWQtd2lkZ2V0LWNvbnRlbnQtbGluay5tb2RlbCc7XG5pbXBvcnQgeyBGb3JtVmFsaWRhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9mb3JtLXZhbGlkYXRpb24tc2VydmljZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUHJvY2Vzc0Zvcm1Nb2RlbCB9IGZyb20gJy4vcHJvY2Vzcy1mb3JtLW1vZGVsLmludGVyZmFjZSc7XG5pbXBvcnQgeyBXaWRnZXRUeXBlRW51bSwgV2lkZ2V0VmlzaWJpbGl0eU1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL3dpZGdldC12aXNpYmlsaXR5Lm1vZGVsJztcbmltcG9ydCB7IFRoZW1lTW9kZWwgfSBmcm9tICcuL3RoZW1lLm1vZGVsJztcblxuZXhwb3J0IGludGVyZmFjZSBDb25maXJtTWVzc2FnZSB7XG4gICAgc2hvdzogYm9vbGVhbjtcbiAgICBtZXNzYWdlOiBzdHJpbmc7XG59XG5leHBvcnQgaW50ZXJmYWNlIEZvcm1SZXByZXNlbnRhdGlvbk1vZGVsIHtcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG5cbiAgICBpZD86IHN0cmluZyB8IG51bWJlcjtcbiAgICBuYW1lPzogc3RyaW5nO1xuICAgIHRhc2tJZD86IHN0cmluZztcbiAgICB0YXNrTmFtZT86IHN0cmluZztcbiAgICBwcm9jZXNzRGVmaW5pdGlvbklkPzogc3RyaW5nO1xuICAgIGN1c3RvbUZpZWxkVGVtcGxhdGVzPzoge1xuICAgICAgICBba2V5OiBzdHJpbmddOiBzdHJpbmc7XG4gICAgfTtcbiAgICBzZWxlY3RlZE91dGNvbWU/OiBzdHJpbmc7XG4gICAgZmllbGRzPzogYW55W107XG4gICAgdGFicz86IGFueVtdO1xuICAgIG91dGNvbWVzPzogYW55W107XG4gICAgZm9ybURlZmluaXRpb24/OiB7XG4gICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgZmllbGRzPzogYW55W107XG4gICAgfTtcbiAgICBkaXNwbGF5TW9kZTogc3RyaW5nO1xuICAgIHRoZW1lPzogVGhlbWVNb2RlbDtcbn1cbmV4cG9ydCBjbGFzcyBGb3JtTW9kZWwgaW1wbGVtZW50cyBQcm9jZXNzRm9ybU1vZGVsIHtcbiAgICBzdGF0aWMgVU5TRVRfVEFTS19OQU1FOiBzdHJpbmcgPSAnTmFtZWxlc3MgdGFzayc7XG4gICAgc3RhdGljIFNBVkVfT1VUQ09NRTogc3RyaW5nID0gJyRzYXZlJztcbiAgICBzdGF0aWMgQ09NUExFVEVfT1VUQ09NRTogc3RyaW5nID0gJyRjb21wbGV0ZSc7XG4gICAgc3RhdGljIFNUQVJUX1BST0NFU1NfT1VUQ09NRTogc3RyaW5nID0gJyRzdGFydFByb2Nlc3MnO1xuXG4gICAgcmVhZG9ubHkgaWQ6IHN0cmluZyB8IG51bWJlcjtcbiAgICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgdGFza0lkOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgY29uZmlybU1lc3NhZ2U6IENvbmZpcm1NZXNzYWdlO1xuICAgIHJlYWRvbmx5IHRhc2tOYW1lID0gRm9ybU1vZGVsLlVOU0VUX1RBU0tfTkFNRTtcbiAgICByZWFkb25seSBwcm9jZXNzRGVmaW5pdGlvbklkOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgc2VsZWN0ZWRPdXRjb21lOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgZW5hYmxlRml4ZWRTcGFjZTogYm9vbGVhbjtcbiAgICByZWFkb25seSBkaXNwbGF5TW9kZTogYW55O1xuXG4gICAgZmllbGRzQ2FjaGU6IEZvcm1GaWVsZE1vZGVsW10gPSBbXTtcblxuICAgIGpzb246IGFueTtcbiAgICBub2RlSWQ6IHN0cmluZztcbiAgICB2YWx1ZXM6IEZvcm1WYWx1ZXMgPSB7fTtcbiAgICB0YWJzOiBUYWJNb2RlbFtdID0gW107XG4gICAgZmllbGRzOiAoQ29udGFpbmVyTW9kZWwgfCBGb3JtRmllbGRNb2RlbClbXSA9IFtdO1xuICAgIG91dGNvbWVzOiBGb3JtT3V0Y29tZU1vZGVsW10gPSBbXTtcbiAgICBmaWVsZFZhbGlkYXRvcnM6IEZvcm1GaWVsZFZhbGlkYXRvcltdID0gW107XG4gICAgY3VzdG9tRmllbGRUZW1wbGF0ZXM6IEZvcm1GaWVsZFRlbXBsYXRlcyA9IHt9O1xuICAgIHRoZW1lPzogVGhlbWVNb2RlbDtcblxuICAgIGNsYXNzTmFtZTogc3RyaW5nO1xuICAgIHJlYWRPbmx5ID0gZmFsc2U7XG4gICAgaXNWYWxpZCA9IHRydWU7XG4gICAgcHJvY2Vzc1ZhcmlhYmxlczogUHJvY2Vzc1ZhcmlhYmxlTW9kZWxbXSA9IFtdO1xuICAgIHZhcmlhYmxlczogRm9ybVZhcmlhYmxlTW9kZWxbXSA9IFtdO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGpzb24/OiBhbnksXG4gICAgICAgIGZvcm1WYWx1ZXM/OiBGb3JtVmFsdWVzLFxuICAgICAgICByZWFkT25seTogYm9vbGVhbiA9IGZhbHNlLFxuICAgICAgICBwcm90ZWN0ZWQgZm9ybVNlcnZpY2U/OiBGb3JtVmFsaWRhdGlvblNlcnZpY2UsXG4gICAgICAgIGVuYWJsZUZpeGVkU3BhY2U/OiBib29sZWFuLFxuICAgICAgICBpbmplY3RlZEZpZWxkVmFsaWRhdG9ycz86IEZvcm1GaWVsZFZhbGlkYXRvcltdXG4gICAgKSB7XG4gICAgICAgIHRoaXMucmVhZE9ubHkgPSByZWFkT25seTtcbiAgICAgICAgdGhpcy5qc29uID0ganNvbjtcblxuICAgICAgICBpZiAoanNvbikge1xuICAgICAgICAgICAgdGhpcy5pZCA9IGpzb24uaWQ7XG4gICAgICAgICAgICB0aGlzLm5hbWUgPSBqc29uLm5hbWU7XG4gICAgICAgICAgICB0aGlzLnRhc2tJZCA9IGpzb24udGFza0lkO1xuICAgICAgICAgICAgdGhpcy50YXNrTmFtZSA9IGpzb24udGFza05hbWUgfHwganNvbi5uYW1lIHx8IEZvcm1Nb2RlbC5VTlNFVF9UQVNLX05BTUU7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NEZWZpbml0aW9uSWQgPSBqc29uLnByb2Nlc3NEZWZpbml0aW9uSWQ7XG4gICAgICAgICAgICB0aGlzLmN1c3RvbUZpZWxkVGVtcGxhdGVzID0ganNvbi5jdXN0b21GaWVsZFRlbXBsYXRlcyB8fCB7fTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPdXRjb21lID0ganNvbi5zZWxlY3RlZE91dGNvbWU7XG4gICAgICAgICAgICB0aGlzLmNsYXNzTmFtZSA9IGpzb24uY2xhc3NOYW1lIHx8ICcnO1xuICAgICAgICAgICAgdGhpcy52YXJpYWJsZXMgPSBqc29uLnZhcmlhYmxlcyB8fCBqc29uLmZvcm1EZWZpbml0aW9uPy52YXJpYWJsZXMgfHwgW107XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NWYXJpYWJsZXMgPSBqc29uLnByb2Nlc3NWYXJpYWJsZXMgfHwgW107XG4gICAgICAgICAgICB0aGlzLmVuYWJsZUZpeGVkU3BhY2UgPSBlbmFibGVGaXhlZFNwYWNlO1xuICAgICAgICAgICAgdGhpcy5jb25maXJtTWVzc2FnZSA9IGpzb24uY29uZmlybU1lc3NhZ2UgfHwge307XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlNb2RlID0ganNvbi5kaXNwbGF5TW9kZTtcbiAgICAgICAgICAgIHRoaXMudGhlbWUgPSBqc29uLnRoZW1lIHx8IGpzb24uZm9ybURlZmluaXRpb24/LnRoZW1lO1xuXG4gICAgICAgICAgICB0aGlzLnRhYnMgPSAoanNvbi50YWJzIHx8IFtdKS5tYXAoKHRhYkpzb24pID0+IG5ldyBUYWJNb2RlbCh0aGlzLCB0YWJKc29uKSk7XG5cbiAgICAgICAgICAgIHRoaXMuZmllbGRzID0gdGhpcy5wYXJzZVJvb3RGaWVsZHMoanNvbik7XG4gICAgICAgICAgICB0aGlzLmZpZWxkc0NhY2hlID0gdGhpcy5nZXRGb3JtRmllbGRzKCk7XG5cbiAgICAgICAgICAgIGlmIChmb3JtVmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkRGF0YShmb3JtVmFsdWVzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5wYXJzZU91dGNvbWVzKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxvYWRJbmplY3RlZEZpZWxkVmFsaWRhdG9ycyhpbmplY3RlZEZpZWxkVmFsaWRhdG9ycyk7XG4gICAgICAgIHRoaXMudmFsaWRhdGVGb3JtKCk7XG4gICAgfVxuXG4gICAgb25Gb3JtRmllbGRDaGFuZ2VkKGZpZWxkOiBGb3JtRmllbGRNb2RlbCkge1xuICAgICAgICB0aGlzLnZhbGlkYXRlRmllbGQoZmllbGQpO1xuXG4gICAgICAgIGlmICh0aGlzLmZvcm1TZXJ2aWNlKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1TZXJ2aWNlLmZvcm1GaWVsZFZhbHVlQ2hhbmdlZC5uZXh0KG5ldyBGb3JtRmllbGRFdmVudCh0aGlzLCBmaWVsZCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVmFsaWRhdGVzIGVudGlyZSBmb3JtIGFuZCBhbGwgZm9ybSBmaWVsZHMuXG4gICAgICovXG4gICAgdmFsaWRhdGVGb3JtKCk6IHZvaWQge1xuICAgICAgICBjb25zdCB2YWxpZGF0ZUZvcm1FdmVudDogYW55ID0gbmV3IFZhbGlkYXRlRm9ybUV2ZW50KHRoaXMpO1xuXG4gICAgICAgIGNvbnN0IGVycm9yc0ZpZWxkOiBGb3JtRmllbGRNb2RlbFtdID0gdGhpcy5maWVsZHNDYWNoZS5maWx0ZXIoKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICBpZiAoIUZvcm1GaWVsZFR5cGVzLmlzUmVhY3RpdmVUeXBlKGZpZWxkLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICFmaWVsZC52YWxpZGF0ZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmllbGQudmFsaWRhdGlvblN1bW1hcnkuaXNBY3RpdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5pc1ZhbGlkID0gZXJyb3JzRmllbGQubGVuZ3RoIDw9IDA7XG5cbiAgICAgICAgaWYgKHRoaXMuZm9ybVNlcnZpY2UpIHtcbiAgICAgICAgICAgIHZhbGlkYXRlRm9ybUV2ZW50LmlzVmFsaWQgPSB0aGlzLmlzVmFsaWQ7XG4gICAgICAgICAgICB2YWxpZGF0ZUZvcm1FdmVudC5lcnJvcnNGaWVsZCA9IGVycm9yc0ZpZWxkO1xuICAgICAgICAgICAgdGhpcy5mb3JtU2VydmljZS52YWxpZGF0ZUZvcm0ubmV4dCh2YWxpZGF0ZUZvcm1FdmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBWYWxpZGF0ZXMgYSBzcGVjaWZpYyBmb3JtIGZpZWxkLCB0cmlnZ2VycyBmb3JtIHZhbGlkYXRpb24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZmllbGQgRm9ybSBmaWVsZCB0byB2YWxpZGF0ZS5cbiAgICAgKi9cbiAgICB2YWxpZGF0ZUZpZWxkKGZpZWxkOiBGb3JtRmllbGRNb2RlbCk6IHZvaWQge1xuICAgICAgICBpZiAoIWZpZWxkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2YWxpZGF0ZUZpZWxkRXZlbnQgPSBuZXcgVmFsaWRhdGVGb3JtRmllbGRFdmVudCh0aGlzLCBmaWVsZCk7XG5cbiAgICAgICAgaWYgKHRoaXMuZm9ybVNlcnZpY2UpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybVNlcnZpY2UudmFsaWRhdGVGb3JtRmllbGQubmV4dCh2YWxpZGF0ZUZpZWxkRXZlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF2YWxpZGF0ZUZpZWxkRXZlbnQuaXNWYWxpZCkge1xuICAgICAgICAgICAgdGhpcy5tYXJrQXNJbnZhbGlkKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsaWRhdGVGaWVsZEV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghRm9ybUZpZWxkVHlwZXMuaXNSZWFjdGl2ZVR5cGUoZmllbGQudHlwZSkgJiYgIWZpZWxkLnZhbGlkYXRlKCkpIHtcbiAgICAgICAgICAgIHRoaXMubWFya0FzSW52YWxpZCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy52YWxpZGF0ZUZvcm0oKTtcbiAgICB9XG5cbiAgICAvLyBBY3Rpdml0aSBzdXBwb3J0cyAzIHR5cGVzIG9mIHJvb3QgZmllbGRzOiBjb250YWluZXJ8Z3JvdXB8ZHluYW1pYy10YWJsZVxuICAgIHByaXZhdGUgcGFyc2VSb290RmllbGRzKGpzb246IGFueSk6IChDb250YWluZXJNb2RlbCB8IEZvcm1GaWVsZE1vZGVsKVtdIHtcbiAgICAgICAgbGV0IGZpZWxkcyA9IFtdO1xuXG4gICAgICAgIGlmIChqc29uLmZpZWxkcykge1xuICAgICAgICAgICAgZmllbGRzID0ganNvbi5maWVsZHM7XG4gICAgICAgIH0gZWxzZSBpZiAoanNvbi5mb3JtRGVmaW5pdGlvbj8uZmllbGRzKSB7XG4gICAgICAgICAgICBmaWVsZHMgPSBqc29uLmZvcm1EZWZpbml0aW9uLmZpZWxkcztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJvb3RFbGVtZW50czogKENvbnRhaW5lck1vZGVsIHwgRm9ybUZpZWxkTW9kZWwpW10gPSBbXTtcbiAgICAgICAgbGV0IGN1cnJlbnRSb290RWxlbWVudDtcbiAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHtcbiAgICAgICAgICAgIGlmIChmaWVsZD8udHlwZSA9PT0gRm9ybUZpZWxkVHlwZXMuRFlOQU1JQ19UQUJMRSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRSb290RWxlbWVudCA9IG5ldyBGb3JtRmllbGRNb2RlbCh0aGlzLCBmaWVsZCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRSb290RWxlbWVudCA9IG5ldyBDb250YWluZXJNb2RlbChuZXcgRm9ybUZpZWxkTW9kZWwodGhpcywgZmllbGQpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGZpZWxkLnRhYikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhYiA9IHRoaXMudGFicy5maW5kKChjdXJyZW50VGFiKSA9PiBmaWVsZC50YWIgPT09IGN1cnJlbnRUYWIuaWQpO1xuICAgICAgICAgICAgICAgIGlmICh0YWIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGFiLmZpZWxkcy5wdXNoKGN1cnJlbnRSb290RWxlbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByb290RWxlbWVudHMucHVzaChjdXJyZW50Um9vdEVsZW1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJvb3RFbGVtZW50cztcbiAgICB9XG5cbiAgICAvLyBMb2FkcyBleHRlcm5hbCBkYXRhIGFuZCBvdmVycmlkZXMgZmllbGQgdmFsdWVzXG4gICAgLy8gVHlwaWNhbGx5IHVzZWQgd2hlbiBmb3JtIGRlZmluaXRpb24gYW5kIGZvcm0gZGF0YSBjb21pbmcgZnJvbSBkaWZmZXJlbnQgc291cmNlc1xuICAgIHByaXZhdGUgbG9hZERhdGEoZm9ybVZhbHVlczogRm9ybVZhbHVlcykge1xuICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIHRoaXMuZmllbGRzQ2FjaGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhcmlhYmxlSWQgPSBgdmFyaWFibGVzLiR7ZmllbGQubmFtZX1gO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5jYW5PdmVycmlkZUZpZWxkVmFsdWVXaXRoUHJvY2Vzc1ZhbHVlKGZpZWxkLCB2YXJpYWJsZUlkLCBmb3JtVmFsdWVzKSkge1xuICAgICAgICAgICAgICAgIGZpZWxkLmpzb24udmFsdWUgPSBmb3JtVmFsdWVzW3ZhcmlhYmxlSWRdIHx8IGZvcm1WYWx1ZXNbZmllbGQuaWRdO1xuICAgICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gZmllbGQucGFyc2VWYWx1ZShmaWVsZC5qc29uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY2FuT3ZlcnJpZGVGaWVsZFZhbHVlV2l0aFByb2Nlc3NWYWx1ZShmaWVsZDogRm9ybUZpZWxkTW9kZWwsIHZhcmlhYmxlSWQ6IHN0cmluZywgZm9ybVZhbHVlczogRm9ybVZhbHVlcyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIUZvcm1GaWVsZFR5cGVzLmlzQ29uc3RhbnRWYWx1ZVR5cGUoZmllbGQudHlwZSkgJiYgKHRoaXMuaXNEZWZpbmVkKGZvcm1WYWx1ZXNbdmFyaWFibGVJZF0pIHx8IHRoaXMuaXNEZWZpbmVkKGZvcm1WYWx1ZXNbZmllbGQuaWRdKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0RlZmluZWQodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgZm9ybSB2YXJpYWJsZSB0aGF0IG1hdGNoZXMgdGhlIGlkZW50aWZpZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaWRlbnRpZmllciBUaGUgYG5hbWVgIG9yIGBpZGAgdmFsdWUuXG4gICAgICogQHJldHVybnMgZm9ybSB2YXJpYWJsZSBtb2RlbFxuICAgICAqL1xuICAgIGdldEZvcm1WYXJpYWJsZShpZGVudGlmaWVyOiBzdHJpbmcpOiBGb3JtVmFyaWFibGVNb2RlbCB7XG4gICAgICAgIGlmIChpZGVudGlmaWVyKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YXJpYWJsZXMuZmluZCgodmFyaWFibGUpID0+IHZhcmlhYmxlLm5hbWUgPT09IGlkZW50aWZpZXIgfHwgdmFyaWFibGUuaWQgPT09IGlkZW50aWZpZXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHZhbHVlIG9mIHRoZSBmb3JtIHZhcmlhYmxlIHRoYXQgbWF0Y2hlcyB0aGUgaWRlbnRpZmllci5cbiAgICAgKiBQcm92aWRlcyBhZGRpdGlvbmFsIGNvbnZlcnNpb24gb2YgdHlwZXMgKGRhdGUsIGJvb2xlYW4pLlxuICAgICAqXG4gICAgICogQHBhcmFtIGlkZW50aWZpZXIgVGhlIGBuYW1lYCBvciBgaWRgIHZhbHVlXG4gICAgICogQHJldHVybnMgZm9ybSB2YXJpYWJsZSB2YWx1ZVxuICAgICAqL1xuICAgIGdldERlZmF1bHRGb3JtVmFyaWFibGVWYWx1ZShpZGVudGlmaWVyOiBzdHJpbmcpOiBhbnkge1xuICAgICAgICBjb25zdCB2YXJpYWJsZSA9IHRoaXMuZ2V0Rm9ybVZhcmlhYmxlKGlkZW50aWZpZXIpO1xuXG4gICAgICAgIGlmICh2YXJpYWJsZSAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFyaWFibGUsICd2YWx1ZScpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVZhbHVlKHZhcmlhYmxlLnR5cGUsIHZhcmlhYmxlLnZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHByb2Nlc3MgdmFyaWFibGUgdmFsdWUuXG4gICAgICogV2hlbiBtYXBwaW5nIGEgcHJvY2VzcyB2YXJpYWJsZSB3aXRoIGEgZm9ybSB2YXJpYWJsZSB0aGUgbWFwcGluZ1xuICAgICAqIGlzIGFscmVhZHkgcmVzb2x2ZWQgYnkgdGhlIHJlc3QgQVBJIHdpdGggdGhlIG5hbWUgb2YgdmFyaWFibGVzLmZvcm1WYXJpYWJsZU5hbWVcbiAgICAgKlxuICAgICAqIEBwYXJhbSBuYW1lIFZhcmlhYmxlIG5hbWVcbiAgICAgKiBAcmV0dXJucyBwcm9jZXNzIHZhcmlhYmxlIHZhbHVlXG4gICAgICovXG4gICAgZ2V0UHJvY2Vzc1ZhcmlhYmxlVmFsdWUobmFtZTogc3RyaW5nKTogYW55IHtcbiAgICAgICAgbGV0IHZhbHVlO1xuICAgICAgICBpZiAodGhpcy5wcm9jZXNzVmFyaWFibGVzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IG5hbWVzID0gW2B2YXJpYWJsZXMuJHtuYW1lfWAsIG5hbWVdO1xuXG4gICAgICAgICAgICBjb25zdCBwcm9jZXNzVmFyaWFibGUgPSB0aGlzLnByb2Nlc3NWYXJpYWJsZXMuZmluZCgoZW50cnkpID0+IG5hbWVzLmluY2x1ZGVzKGVudHJ5Lm5hbWUpKTtcblxuICAgICAgICAgICAgaWYgKHByb2Nlc3NWYXJpYWJsZSkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5wYXJzZVZhbHVlKHByb2Nlc3NWYXJpYWJsZS50eXBlLCBwcm9jZXNzVmFyaWFibGUudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmdldERlZmF1bHRGb3JtVmFyaWFibGVWYWx1ZShuYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcGFyc2VWYWx1ZSh0eXBlOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBhbnkge1xuICAgICAgICBpZiAodHlwZSAmJiB2YWx1ZSkge1xuICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpLmluY2x1ZGVzKCdUJykgPyB2YWx1ZSA6IGAke3ZhbHVlfVQwMDowMDowMC4wMDBaYDtcbiAgICAgICAgICAgICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKHZhbHVlKSA6IHZhbHVlO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBoYXNUYWJzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy50YWJzICYmIHRoaXMudGFicy5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIGhhc0ZpZWxkcygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmllbGRzICYmIHRoaXMuZmllbGRzLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgaGFzT3V0Y29tZXMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLm91dGNvbWVzICYmIHRoaXMub3V0Y29tZXMubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBnZXRGaWVsZEJ5SWQoZmllbGRJZDogc3RyaW5nKTogRm9ybUZpZWxkTW9kZWwge1xuICAgICAgICByZXR1cm4gdGhpcy5maWVsZHNDYWNoZS5maW5kKChmaWVsZCkgPT4gZmllbGQuaWQgPT09IGZpZWxkSWQpO1xuICAgIH1cblxuICAgIGdldEZvcm1GaWVsZHMoZmlsdGVyVHlwZXM/OiBzdHJpbmdbXSk6IEZvcm1GaWVsZE1vZGVsW10ge1xuICAgICAgICBpZiAodGhpcy5maWVsZHNDYWNoZT8ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXJGaWVsZHNCeVR5cGUodGhpcy5maWVsZHNDYWNoZSwgZmlsdGVyVHlwZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZm9ybUZpZWxkTW9kZWw6IEZvcm1GaWVsZE1vZGVsW10gPSBbXTtcbiAgICAgICAgdGhpcy5wcm9jZXNzRmllbGRzKHRoaXMuZmllbGRzLCBmb3JtRmllbGRNb2RlbCk7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbHRlckZpZWxkc0J5VHlwZShmb3JtRmllbGRNb2RlbCwgZmlsdGVyVHlwZXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcHJvY2Vzc0ZpZWxkcyhmaWVsZHM6IChDb250YWluZXJNb2RlbCB8IEZvcm1GaWVsZE1vZGVsKVtdLCBmb3JtRmllbGRNb2RlbDogRm9ybUZpZWxkTW9kZWxbXSk6IHZvaWQge1xuICAgICAgICBmaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzU2VjdGlvbkZpZWxkKGZpZWxkKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlU2VjdGlvbkZpZWxkKGZpZWxkLCBmb3JtRmllbGRNb2RlbCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNDb250YWluZXJGaWVsZChmaWVsZCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUNvbnRhaW5lckZpZWxkKGZpZWxkLCBmb3JtRmllbGRNb2RlbCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlU2luZ2xlRmllbGQoZmllbGQsIGZvcm1GaWVsZE1vZGVsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0NvbnRhaW5lckZpZWxkKGZpZWxkOiBDb250YWluZXJNb2RlbCB8IEZvcm1GaWVsZE1vZGVsKTogZmllbGQgaXMgQ29udGFpbmVyTW9kZWwge1xuICAgICAgICByZXR1cm4gZmllbGQgaW5zdGFuY2VvZiBDb250YWluZXJNb2RlbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzU2VjdGlvbkZpZWxkKGZpZWxkOiBDb250YWluZXJNb2RlbCB8IEZvcm1GaWVsZE1vZGVsKTogZmllbGQgaXMgRm9ybUZpZWxkTW9kZWwge1xuICAgICAgICByZXR1cm4gZmllbGQudHlwZSA9PT0gRm9ybUZpZWxkVHlwZXMuU0VDVElPTjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZVNlY3Rpb25GaWVsZChzZWN0aW9uOiBGb3JtRmllbGRNb2RlbCwgZm9ybUZpZWxkTW9kZWw6IEZvcm1GaWVsZE1vZGVsW10pOiB2b2lkIHtcbiAgICAgICAgZm9ybUZpZWxkTW9kZWwucHVzaChzZWN0aW9uKTtcbiAgICAgICAgc2VjdGlvbi5jb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzRmllbGRzKGNvbHVtbi5maWVsZHMsIGZvcm1GaWVsZE1vZGVsKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVDb250YWluZXJGaWVsZChjb250YWluZXI6IENvbnRhaW5lck1vZGVsLCBmb3JtRmllbGRNb2RlbDogRm9ybUZpZWxkTW9kZWxbXSk6IHZvaWQge1xuICAgICAgICBmb3JtRmllbGRNb2RlbC5wdXNoKGNvbnRhaW5lci5maWVsZCk7XG4gICAgICAgIGNvbnRhaW5lci5maWVsZC5jb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzRmllbGRzKGNvbHVtbi5maWVsZHMsIGZvcm1GaWVsZE1vZGVsKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVTaW5nbGVGaWVsZChmaWVsZDogRm9ybUZpZWxkTW9kZWwsIGZvcm1GaWVsZE1vZGVsOiBGb3JtRmllbGRNb2RlbFtdKTogdm9pZCB7XG4gICAgICAgIGZvcm1GaWVsZE1vZGVsLnB1c2goZmllbGQpO1xuICAgICAgICBpZiAoZmllbGQuZmllbGRzKSB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NGaWVsZHMoT2JqZWN0LnZhbHVlcyhmaWVsZC5maWVsZHMpLCBmb3JtRmllbGRNb2RlbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGZpbHRlckZpZWxkc0J5VHlwZShmaWVsZHM6IEZvcm1GaWVsZE1vZGVsW10sIHR5cGVzPzogc3RyaW5nW10pOiBGb3JtRmllbGRNb2RlbFtdIHtcbiAgICAgICAgaWYgKCF0eXBlcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gZmllbGRzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZpZWxkcy5maWx0ZXIoKGZpZWxkKSA9PiB0eXBlcy5pbmNsdWRlcyhmaWVsZD8udHlwZSkpO1xuICAgIH1cblxuICAgIG1hcmtBc0ludmFsaWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNWYWxpZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwYXJzZU91dGNvbWVzKCkge1xuICAgICAgICBpZiAodGhpcy5qc29uLmZpZWxkcykge1xuICAgICAgICAgICAgY29uc3Qgc2F2ZU91dGNvbWUgPSBuZXcgRm9ybU91dGNvbWVNb2RlbCh0aGlzLCB7XG4gICAgICAgICAgICAgICAgaWQ6IEZvcm1Nb2RlbC5TQVZFX09VVENPTUUsXG4gICAgICAgICAgICAgICAgbmFtZTogJ1NBVkUnLFxuICAgICAgICAgICAgICAgIGlzU3lzdGVtOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBsZXRlT3V0Y29tZSA9IG5ldyBGb3JtT3V0Y29tZU1vZGVsKHRoaXMsIHtcbiAgICAgICAgICAgICAgICBpZDogRm9ybU1vZGVsLkNPTVBMRVRFX09VVENPTUUsXG4gICAgICAgICAgICAgICAgbmFtZTogJ0NPTVBMRVRFJyxcbiAgICAgICAgICAgICAgICBpc1N5c3RlbTogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBzdGFydFByb2Nlc3NPdXRjb21lID0gbmV3IEZvcm1PdXRjb21lTW9kZWwodGhpcywge1xuICAgICAgICAgICAgICAgIGlkOiBGb3JtTW9kZWwuU1RBUlRfUFJPQ0VTU19PVVRDT01FLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdTVEFSVCBQUk9DRVNTJyxcbiAgICAgICAgICAgICAgICBpc1N5c3RlbTogdHJ1ZVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGN1c3RvbU91dGNvbWVzID0gKHRoaXMuanNvbi5vdXRjb21lcyB8fCBbXSkubWFwKChvYmopID0+IG5ldyBGb3JtT3V0Y29tZU1vZGVsKHRoaXMsIG9iaikpO1xuXG4gICAgICAgICAgICB0aGlzLm91dGNvbWVzID0gW3NhdmVPdXRjb21lXS5jb25jYXQoY3VzdG9tT3V0Y29tZXMubGVuZ3RoID4gMCA/IGN1c3RvbU91dGNvbWVzIDogW2NvbXBsZXRlT3V0Y29tZSwgc3RhcnRQcm9jZXNzT3V0Y29tZV0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWRkVmFsdWVzTm90UHJlc2VudCh2YWx1ZXNUb1NldElmTm90UHJlc2VudDogRm9ybVZhbHVlcykge1xuICAgICAgICB0aGlzLmZpZWxkc0NhY2hlLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICBpZiAodmFsdWVzVG9TZXRJZk5vdFByZXNlbnRbZmllbGQuaWRdICYmICghdGhpcy52YWx1ZXNbZmllbGQuaWRdIHx8IHRoaXMuaXNWYWxpZERyb3BEb3duKGZpZWxkLmlkKSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1tmaWVsZC5pZF0gPSB2YWx1ZXNUb1NldElmTm90UHJlc2VudFtmaWVsZC5pZF07XG4gICAgICAgICAgICAgICAgZmllbGQuanNvbi52YWx1ZSA9IHRoaXMudmFsdWVzW2ZpZWxkLmlkXTtcbiAgICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IGZpZWxkLnBhcnNlVmFsdWUoZmllbGQuanNvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNWYWxpZERyb3BEb3duKGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5nZXRGaWVsZEJ5SWQoa2V5KTtcbiAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09IEZvcm1GaWVsZFR5cGVzLkRST1BET1dOKSB7XG4gICAgICAgICAgICBpZiAoZmllbGQuaGFzTXVsdGlwbGVWYWx1ZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlc1trZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgdGhpcy52YWx1ZXNba2V5XSA9PT0gJ3N0cmluZycgPyB0aGlzLnZhbHVlc1trZXldID09PSAnZW1wdHknIDogT2JqZWN0LmtleXModGhpcy52YWx1ZXNba2V5XSkubGVuZ3RoID09PSAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBzZXROb2RlSWRWYWx1ZUZvclZpZXdlcnNMaW5rZWRUb1VwbG9hZFdpZGdldChsaW5rZWRVcGxvYWRXaWRnZXRDb250ZW50U2VsZWN0ZWQ6IFVwbG9hZFdpZGdldENvbnRlbnRMaW5rTW9kZWwpIHtcbiAgICAgICAgY29uc3QgbGlua2VkV2lkZ2V0VHlwZSA9IGxpbmtlZFVwbG9hZFdpZGdldENvbnRlbnRTZWxlY3RlZD8ub3B0aW9ucz8ubGlua2VkV2lkZ2V0VHlwZSA/PyAndXBsb2FkV2lkZ2V0JztcblxuICAgICAgICBjb25zdCBzdWJzY3JpYmVkVmlld2VycyA9IHRoaXMuZmllbGRzQ2FjaGUuZmlsdGVyKFxuICAgICAgICAgICAgKGZpZWxkKSA9PiBsaW5rZWRVcGxvYWRXaWRnZXRDb250ZW50U2VsZWN0ZWQudXBsb2FkV2lkZ2V0SWQgPT09IGZpZWxkLnBhcmFtc1tsaW5rZWRXaWRnZXRUeXBlXVxuICAgICAgICApO1xuXG4gICAgICAgIHN1YnNjcmliZWRWaWV3ZXJzLmZvckVhY2goKHZpZXdlcikgPT4ge1xuICAgICAgICAgICAgdGhpcy52YWx1ZXNbdmlld2VyLmlkXSA9IGxpbmtlZFVwbG9hZFdpZGdldENvbnRlbnRTZWxlY3RlZC5pZDtcbiAgICAgICAgICAgIHZpZXdlci5qc29uLnZhbHVlID0gdGhpcy52YWx1ZXNbdmlld2VyLmlkXTtcbiAgICAgICAgICAgIHZpZXdlci52YWx1ZSA9IHZpZXdlci5wYXJzZVZhbHVlKHZpZXdlci5qc29uKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2hhbmdlRmllbGRWaXNpYmlsaXR5KGZpZWxkSWQ6IHN0cmluZywgdmlzaWJpbGl0eTogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBjb25zdCB2aXNpYmlsaXR5UnVsZTogV2lkZ2V0VmlzaWJpbGl0eU1vZGVsID0gbmV3IFdpZGdldFZpc2liaWxpdHlNb2RlbCgpO1xuXG4gICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5nZXRGaWVsZEJ5SWQoZmllbGRJZCk7XG4gICAgICAgIGlmIChmaWVsZCkge1xuICAgICAgICAgICAgdmlzaWJpbGl0eVJ1bGUub3BlcmF0b3IgPSB2aXNpYmlsaXR5ID8gJ2VtcHR5JyA6ICchZW1wdHknO1xuICAgICAgICAgICAgdmlzaWJpbGl0eVJ1bGUubGVmdFR5cGUgPSBXaWRnZXRUeXBlRW51bS5maWVsZDtcbiAgICAgICAgICAgIGZpZWxkLnZpc2liaWxpdHlDb25kaXRpb24gPSB2aXNpYmlsaXR5UnVsZTtcbiAgICAgICAgICAgIGZpZWxkLmlzVmlzaWJsZSA9IHZpc2liaWxpdHk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjaGFuZ2VGaWVsZERpc2FibGVkKGZpZWxkSWQ6IHN0cmluZywgZGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLmdldEZpZWxkQnlJZChmaWVsZElkKTtcbiAgICAgICAgaWYgKGZpZWxkKSB7XG4gICAgICAgICAgICBmaWVsZC5yZWFkT25seSA9IHRoaXMucmVhZE9ubHkgfHwgZGlzYWJsZWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjaGFuZ2VGaWVsZFJlcXVpcmVkKGZpZWxkSWQ6IHN0cmluZywgcmVxdWlyZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLmdldEZpZWxkQnlJZChmaWVsZElkKTtcbiAgICAgICAgaWYgKGZpZWxkKSB7XG4gICAgICAgICAgICBmaWVsZC5yZXF1aXJlZCA9IHJlcXVpcmVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2hhbmdlRmllbGRWYWx1ZShmaWVsZElkOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLmdldEZpZWxkQnlJZChmaWVsZElkKTtcbiAgICAgICAgaWYgKGZpZWxkKSB7XG4gICAgICAgICAgICBmaWVsZC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2hhbmdlVmFyaWFibGVWYWx1ZSh2YXJpYWJsZUlkOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdmFyaWFibGUgPSB0aGlzLmdldEZvcm1WYXJpYWJsZSh2YXJpYWJsZUlkKTtcbiAgICAgICAgaWYgKHZhcmlhYmxlKSB7XG4gICAgICAgICAgICB2YXJpYWJsZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2FkSW5qZWN0ZWRGaWVsZFZhbGlkYXRvcnMoaW5qZWN0ZWRGaWVsZFZhbGlkYXRvcnM6IEZvcm1GaWVsZFZhbGlkYXRvcltdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZmllbGRWYWxpZGF0b3JzID0gaW5qZWN0ZWRGaWVsZFZhbGlkYXRvcnMgPyBbLi4uRk9STV9GSUVMRF9WQUxJREFUT1JTLCAuLi5pbmplY3RlZEZpZWxkVmFsaWRhdG9yc10gOiBbLi4uRk9STV9GSUVMRF9WQUxJREFUT1JTXTtcbiAgICB9XG59XG4iXX0=