@alfresco/adf-core 8.1.0-15416593341 → 8.1.0-15446587287

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.
@@ -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-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 >\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\n <div *ngIf=\"currentRootElement.type === 'dynamic-table'\" class=\"adf-container-widget\">\n <adf-form-field [field]=\"currentRootElement\" />\n </div>\n\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{width:100%}.alfresco-tabs-widget .adf-form-tab-content{margin-top:1em}.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 }); }
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 >\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\n <div *ngIf=\"currentRootElement.type === 'dynamic-table'\" class=\"adf-container-widget\">\n <adf-form-field [field]=\"currentRootElement\" />\n </div>\n\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{width:100%}.alfresco-tabs-widget .adf-form-tab-content{margin-top:1em}.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 }); }
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-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 >\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\n <div *ngIf=\"currentRootElement.type === 'dynamic-table'\" class=\"adf-container-widget\">\n <adf-form-field [field]=\"currentRootElement\" />\n </div>\n\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{width:100%}.alfresco-tabs-widget .adf-form-tab-content{margin-top:1em}.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-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 >\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\n <div *ngIf=\"currentRootElement.type === 'dynamic-table'\" class=\"adf-container-widget\">\n <adf-form-field [field]=\"currentRootElement\" />\n </div>\n\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{width:100%}.alfresco-tabs-widget .adf-form-tab-content{margin-top:1em}.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+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1GaWVsZHMgPSB0aGlzLmZvcm1EZWZpbml0aW9uLmdldEZvcm1GaWVsZHMoKTtcblxuICAgICAgICAgICAgZm9ybUZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubWlkZGxld2FyZVNlcnZpY2VzLmZvckVhY2goKG1pZGRsZXdhcmVTZXJ2aWNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtaWRkbGV3YXJlU2VydmljZS50eXBlID09PSBmaWVsZC50eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZCA9IG1pZGRsZXdhcmVTZXJ2aWNlLmdldFBhcnNlZEZpZWxkKGZpZWxkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8ZGl2IGlkPVwiYWRmLWZvcm0tcmVuZGVyZXJcIiBjbGFzcz1cInt7IGZvcm1EZWZpbml0aW9uLmNsYXNzTmFtZSB9fVwiXG4gICAgIFtuZ0NsYXNzXT1cInsgJ2FkZi1yZWFkb25seS1mb3JtJzogZm9ybURlZmluaXRpb24ucmVhZE9ubHkgfVwiPlxuICAgIDxkaXYgKm5nSWY9XCJmb3JtRGVmaW5pdGlvbi5oYXNUYWJzKClcIj5cbiAgICAgICAgPGRpdiAqbmdJZj1cImhhc1RhYnMoKVwiIGNsYXNzPVwiYWxmcmVzY28tdGFicy13aWRnZXRcIj5cbiAgICAgICAgICAgIDxtYXQtdGFiLWdyb3VwPlxuICAgICAgICAgICAgICAgIDxtYXQtdGFiICAgKm5nRm9yPVwibGV0IHRhYiBvZiB2aXNpYmxlVGFicygpXCIgW2xhYmVsXT1cInRhYi50aXRsZSB8IHRyYW5zbGF0ZSBcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLWZvcm0tdGFiLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJyZW5kZXI7IGNvbnRleHQ6IHsgZmllbGRUb1JlbmRlcjogdGFiLmZpZWxkcyB9XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvbWF0LXRhYj5cbiAgICAgICAgICAgIDwvbWF0LXRhYi1ncm91cD5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2ICpuZ0lmPVwiIWZvcm1EZWZpbml0aW9uLmhhc1RhYnMoKSAmJiBmb3JtRGVmaW5pdGlvbi5oYXNGaWVsZHMoKVwiPlxuICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJyZW5kZXI7IGNvbnRleHQ6IHsgZmllbGRUb1JlbmRlcjogZm9ybURlZmluaXRpb24uZmllbGRzIH1cIiAvPlxuICAgIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjcmVuZGVyIGxldC1maWVsZFRvUmVuZGVyPVwiZmllbGRUb1JlbmRlclwiPlxuICAgIDxkaXYgKm5nRm9yPVwibGV0IGN1cnJlbnRSb290RWxlbWVudCBvZiBmaWVsZFRvUmVuZGVyXCI+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJjdXJyZW50Um9vdEVsZW1lbnQudHlwZSA9PT0gJ2NvbnRhaW5lcicgfHwgY3VycmVudFJvb3RFbGVtZW50LnR5cGUgPT09ICdncm91cCdcIlxuICAgICAgICAgICAgIFtpZF09XCInZmllbGQtJyArIGN1cnJlbnRSb290RWxlbWVudD8uaWQgKyAnLWNvbnRhaW5lcidcIlxuICAgICAgICAgICAgIGNsYXNzPVwiYWRmLWNvbnRhaW5lci13aWRnZXRcIlxuICAgICAgICAgICAgIFtoaWRkZW5dPVwiIWN1cnJlbnRSb290RWxlbWVudD8uaXNWaXNpYmxlXCI+XG4gICAgICAgICAgICA8YWRmLWhlYWRlci13aWRnZXQgW2VsZW1lbnRdPVwiY3VycmVudFJvb3RFbGVtZW50XCIgLz5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjdXJyZW50Um9vdEVsZW1lbnQ/LmZvcm0/LmVuYWJsZUZpeGVkU3BhY2U7IGVsc2UgZml4aW5nVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLWdyaWQtbGlzdFwiXG4gICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7ICdncmlkLXRlbXBsYXRlLWNvbHVtbnMnOiAncmVwZWF0KCcgKyBnZXROdW1iZXJPZkNvbHVtbnMoY3VycmVudFJvb3RFbGVtZW50KSArICcsIDFmciknIH1cIlxuICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjdXJyZW50Um9vdEVsZW1lbnQ/LmlzRXhwYW5kZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1ncmlkLWxpc3QtaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGZpZWxkIG9mIGdldENvbnRhaW5lckZpZWxkcyhjdXJyZW50Um9vdEVsZW1lbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7ICdncmlkLWFyZWEnOiAnYXV0byAvIGF1dG8gLyBzcGFuICcgKyAoZmllbGQ/LnJvd3NwYW4gfHwgMSkgKyAnIC8gc3BhbiAnICsgKGZpZWxkPy5jb2xzcGFuIHx8IDEpIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhZGYtZm9ybS1maWVsZCAqbmdJZj1cImZpZWxkXCIgW2ZpZWxkXT1cImZpZWxkXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNmaXhpbmdUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImFkZi1ncmlkLWxpc3QtY29sdW1uLXZpZXdcIiAqbmdJZj1cImN1cnJlbnRSb290RWxlbWVudD8uaXNFeHBhbmRlZFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLWdyaWQtbGlzdC1zaW5nbGUtY29sdW1uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGN1cnJlbnRSb290RWxlbWVudD8uY29sdW1uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoLiVdPVwiZ2V0Q29sdW1uV2lkdGgoY3VycmVudFJvb3RFbGVtZW50KVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGZpZWxkIG9mIGNvbHVtbj8uZmllbGRzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpZWxkLnR5cGUgPT09ICdzZWN0aW9uJzsgZWxzZSBmb3JtRmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFkZi1mb3JtLXNlY3Rpb24gW2ZpZWxkXT1cImZpZWxkXCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZm9ybUZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLWdyaWQtbGlzdC1jb2x1bW4tdmlldy1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YWRmLWZvcm0tZmllbGQgW2ZpZWxkXT1cImZpZWxkXCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY29sdW1uVmlld0l0ZW0gbGV0LWNvbHVtbj1cImNvbHVtblwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtZ3JpZC1saXN0LWNvbHVtbi12aWV3LWl0ZW1cIiAqbmdGb3I9XCJsZXQgZmllbGQgb2YgY29sdW1uPy5maWVsZHNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGFkZi1mb3JtLWZpZWxkICpuZ0lmPVwiZmllbGRcIiBbZmllbGRdPVwiZmllbGRcIiAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiAqbmdJZj1cImN1cnJlbnRSb290RWxlbWVudC50eXBlID09PSAnZHluYW1pYy10YWJsZSdcIiBjbGFzcz1cImFkZi1jb250YWluZXItd2lkZ2V0XCI+XG4gICAgICAgICAgICA8YWRmLWZvcm0tZmllbGQgW2ZpZWxkXT1cImN1cnJlbnRSb290RWxlbWVudFwiIC8+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtY29udGFpbmVyLXdpZGdldFwiXG4gICAgICAgICAgICAgKm5nSWY9XCJjdXJyZW50Um9vdEVsZW1lbnQudHlwZSA9PT0gJ3JlYWRvbmx5JyAmJiBjdXJyZW50Um9vdEVsZW1lbnQuZmllbGQucGFyYW1zLmZpZWxkLnR5cGUgPT09ICdkeW5hbWljLXRhYmxlJ1wiPlxuICAgICAgICAgICAgPGFkZi1mb3JtLWZpZWxkIFtmaWVsZF09XCJjdXJyZW50Um9vdEVsZW1lbnQuZmllbGRcIi8+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
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+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtZ3JpZC1saXN0LXNpbmdsZS1jb2x1bW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY3VycmVudFJvb3RFbGVtZW50Py5jb2x1bW5zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGguJV09XCJnZXRDb2x1bW5XaWR0aChjdXJyZW50Um9vdEVsZW1lbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZmllbGQgb2YgY29sdW1uPy5maWVsZHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmllbGQudHlwZSA9PT0gJ3NlY3Rpb24nOyBlbHNlIGZvcm1GaWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YWRmLWZvcm0tc2VjdGlvbiBbZmllbGRdPVwiZmllbGRcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNmb3JtRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtZ3JpZC1saXN0LWNvbHVtbi12aWV3LWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhZGYtZm9ybS1maWVsZCBbZmllbGRdPVwiZmllbGRcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjb2x1bW5WaWV3SXRlbSBsZXQtY29sdW1uPVwiY29sdW1uXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1ncmlkLWxpc3QtY29sdW1uLXZpZXctaXRlbVwiICpuZ0Zvcj1cImxldCBmaWVsZCBvZiBjb2x1bW4/LmZpZWxkc1wiPlxuICAgICAgICAgICAgICAgICAgICA8YWRmLWZvcm0tZmllbGQgKm5nSWY9XCJmaWVsZFwiIFtmaWVsZF09XCJmaWVsZFwiIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2ICpuZ0lmPVwiY3VycmVudFJvb3RFbGVtZW50LnR5cGUgPT09ICdkeW5hbWljLXRhYmxlJ1wiIGNsYXNzPVwiYWRmLWNvbnRhaW5lci13aWRnZXRcIj5cbiAgICAgICAgICAgIDxhZGYtZm9ybS1maWVsZCBbZmllbGRdPVwiY3VycmVudFJvb3RFbGVtZW50XCIgLz5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1jb250YWluZXItd2lkZ2V0XCJcbiAgICAgICAgICAgICAqbmdJZj1cImN1cnJlbnRSb290RWxlbWVudC50eXBlID09PSAncmVhZG9ubHknICYmIGN1cnJlbnRSb290RWxlbWVudC5maWVsZC5wYXJhbXMuZmllbGQudHlwZSA9PT0gJ2R5bmFtaWMtdGFibGUnXCI+XG4gICAgICAgICAgICA8YWRmLWZvcm0tZmllbGQgW2ZpZWxkXT1cImN1cnJlbnRSb290RWxlbWVudC5maWVsZFwiLz5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -15,7 +15,7 @@
15
15
  * limitations under the License.
16
16
  */
17
17
  import { AppExtensionService, ExtensionsModule } from '@alfresco/adf-extensions';
18
- import { AsyncPipe, NgForOf, NgIf, NgSwitch, NgSwitchCase, NgSwitchDefault, NgTemplateOutlet } from '@angular/common';
18
+ import { NgForOf, NgIf, NgSwitch, NgSwitchCase, NgSwitchDefault, NgTemplateOutlet } from '@angular/common';
19
19
  import { Component, EventEmitter, Injector, Input, Output, TemplateRef, ViewEncapsulation } from '@angular/core';
20
20
  import { MatDialog } from '@angular/material/dialog';
21
21
  import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
@@ -26,7 +26,6 @@ import { MediaPlayerComponent } from '../media-player/media-player.component';
26
26
  import { PdfViewerComponent } from '../pdf-viewer/pdf-viewer.component';
27
27
  import { TxtViewerComponent } from '../txt-viewer/txt-viewer.component';
28
28
  import { UnknownFormatComponent } from '../unknown-format/unknown-format.component';
29
- import { BehaviorSubject } from 'rxjs';
30
29
  import * as i0 from "@angular/core";
31
30
  import * as i1 from "../../services/view-util.service";
32
31
  import * as i2 from "@alfresco/adf-extensions";
@@ -72,6 +71,8 @@ export class ViewerRenderComponent {
72
71
  this.allowThumbnails = true;
73
72
  /** The template for the pdf thumbnails. */
74
73
  this.thumbnailsTemplate = null;
74
+ /** Override loading status */
75
+ this.isLoading = false;
75
76
  /** Enable when where is possible the editing functionalities */
76
77
  this.readOnly = true;
77
78
  /**
@@ -100,14 +101,15 @@ export class ViewerRenderComponent {
100
101
  this.extensionTemplates = [];
101
102
  this.extensionsSupportedByTemplates = [];
102
103
  this.viewerType = 'unknown';
103
- this.isLoading$ = new BehaviorSubject(false);
104
+ this.isContentReady = false;
104
105
  this.cacheTypeForContent = 'no-cache';
105
106
  }
106
107
  ngOnInit() {
107
108
  this.cacheTypeForContent = 'no-cache';
108
- this.setDefaultLoadingState();
109
109
  }
110
110
  ngOnChanges() {
111
+ this.isContentReady = false;
112
+ this.isLoading = !this.blobFile && !this.urlFile;
111
113
  if (this.blobFile) {
112
114
  this.setUpBlobData();
113
115
  }
@@ -115,9 +117,6 @@ export class ViewerRenderComponent {
115
117
  this.setUpUrlFile();
116
118
  }
117
119
  }
118
- markAsLoaded() {
119
- this.isLoading$.next(false);
120
- }
121
120
  setUpBlobData() {
122
121
  this.internalFileName = this.fileName;
123
122
  this.viewerType = this.viewUtilService.getViewerTypeByMimeType(this.blobFile.type);
@@ -151,16 +150,8 @@ export class ViewerRenderComponent {
151
150
  onClose() {
152
151
  this.close.next(true);
153
152
  }
154
- canBePreviewed() {
155
- return this.viewerType === 'media' || this.viewerType === 'pdf' || this.viewerType === 'image';
156
- }
157
- setDefaultLoadingState() {
158
- if (this.canBePreviewed()) {
159
- this.isLoading$.next(true);
160
- }
161
- }
162
153
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ViewerRenderComponent, deps: [{ token: i1.ViewUtilService }, { token: i2.AppExtensionService }, { token: i3.MatDialog }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
163
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ViewerRenderComponent, isStandalone: true, selector: "adf-viewer-render", inputs: { urlFile: "urlFile", blobFile: "blobFile", allowFullScreen: "allowFullScreen", allowThumbnails: "allowThumbnails", thumbnailsTemplate: "thumbnailsTemplate", mimeType: "mimeType", fileName: "fileName", readOnly: "readOnly", allowedEditActions: "allowedEditActions", tracks: "tracks", nodeId: "nodeId", viewerTemplateExtensions: "viewerTemplateExtensions", customError: "customError" }, outputs: { extensionChange: "extensionChange", submitFile: "submitFile", close: "close", isSaving: "isSaving" }, host: { classAttribute: "adf-viewer-render" }, providers: [ViewUtilService], usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"isLoading$ | async\" class=\"adf-viewer-render-main-loader\">\n <div class=\"adf-viewer-render-layout-content adf-viewer__fullscreen-container\">\n <div class=\"adf-viewer-render-content-container\">\n <div class=\"adf-viewer-render__loading-screen\">\n <h2>{{ 'ADF_VIEWER.LOADING' | translate }}</h2>\n <div>\n <mat-spinner class=\"adf-viewer-render__loading-screen__spinner\" />\n </div>\n </div>\n </div>\n </div>\n</div>\n\n<ng-container *ngIf=\"urlFile || blobFile\">\n <div [hidden]=\"isLoading$ | async\" class=\"adf-viewer-render-main\">\n <div class=\"adf-viewer-render-layout-content adf-viewer__fullscreen-container\">\n <div class=\"adf-viewer-render-content-container\" [ngSwitch]=\"viewerType\">\n <ng-container *ngSwitchCase=\"'external'\">\n <adf-preview-extension\n *ngIf=\"!!externalViewer\"\n [id]=\"externalViewer.component\"\n [url]=\"urlFile\"\n [extension]=\"externalViewer.fileExtension\"\n [nodeId]=\"nodeId\"\n [attr.data-automation-id]=\"externalViewer.component\"\n />\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'pdf'\">\n <adf-pdf-viewer\n [thumbnailsTemplate]=\"thumbnailsTemplate\"\n [allowThumbnails]=\"allowThumbnails\"\n [blobFile]=\"blobFile\"\n [urlFile]=\"urlFile\"\n [fileName]=\"internalFileName\"\n [cacheType]=\"cacheTypeForContent\"\n (pagesLoaded)=\"markAsLoaded()\"\n (close)=\"onClose()\"\n (error)=\"onUnsupportedFile()\"\n />\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'image'\">\n <adf-img-viewer\n [urlFile]=\"urlFile\"\n [readOnly]=\"readOnly\"\n [fileName]=\"internalFileName\"\n [allowedEditActions]=\"allowedEditActions\"\n [blobFile]=\"blobFile\"\n (error)=\"onUnsupportedFile()\"\n (submit)=\"onSubmitFile($event)\"\n (imageLoaded)=\"markAsLoaded()\"\n (isSaving)=\"isSaving.emit($event)\"\n />\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'media'\">\n <adf-media-player\n id=\"adf-mdedia-player\"\n [urlFile]=\"urlFile\"\n [tracks]=\"tracks\"\n [mimeType]=\"mimeType\"\n [blobFile]=\"blobFile\"\n [fileName]=\"internalFileName\"\n (error)=\"onUnsupportedFile()\"\n (canPlay)=\"markAsLoaded()\"\n />\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'text'\">\n <adf-txt-viewer [urlFile]=\"urlFile\" [blobFile]=\"blobFile\" />\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'custom'\">\n <ng-container *ngFor=\"let ext of viewerExtensions\">\n <adf-preview-extension\n *ngIf=\"checkExtensions(ext.fileExtension)\"\n [id]=\"ext.component\"\n [url]=\"urlFile\"\n [extension]=\"extension\"\n [nodeId]=\"nodeId\"\n [attr.data-automation-id]=\"ext.component\"\n />\n </ng-container>\n\n <ng-container *ngFor=\"let extensionTemplate of extensionTemplates\">\n <span *ngIf=\"extensionTemplate.isVisible\" class=\"adf-viewer-render-custom-content\">\n <ng-template\n [ngTemplateOutlet]=\"extensionTemplate.template\"\n [ngTemplateOutletContext]=\"{ urlFile: urlFile, extension: extension }\"\n />\n </span>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchDefault>\n <adf-viewer-unknown-format [customError]=\"customError\" />\n </ng-container>\n </div>\n </div>\n </div>\n</ng-container>\n<ng-container *ngIf=\"viewerTemplateExtensions\">\n <ng-template [ngTemplateOutlet]=\"viewerTemplateExtensions\" [ngTemplateOutletInjector]=\"injector\" />\n</ng-container>\n", styles: [".adf-full-screen,.adf-viewer-render-layout-content{width:100%;height:100%;background-color:var(--adf-theme-background-card-color)}.adf-viewer-render-main-loader{position:fixed;top:64px;left:0;width:100%;height:100%;z-index:1000;display:flex;align-items:center;justify-content:center}.adf-viewer-render-main{width:0;order:1;flex:1 1 auto}.adf-viewer-render-content-container{display:flex;justify-content:center}.adf-viewer-render-layout-content{position:relative;overflow:hidden;z-index:1;background-color:var(--theme-background-color);display:flex;flex-flow:row wrap;flex:1}.adf-viewer-render-layout-content>div{display:flex;flex-flow:row wrap;margin:0 auto;align-items:stretch;height:93vh;width:100%}.adf-viewer-render-overlay-container .adf-viewer-render-content{position:fixed;top:0;left:0;z-index:1000}.adf-viewer-render__loading-screen{display:flex;flex:1 1 auto;align-items:center;justify-content:center;flex-direction:column;height:85vh}.adf-viewer-render__loading-screen__spinner{margin:0 auto}.adf-viewer-render-custom-content{width:100vw}.adf-viewer-render-unknown-content{align-items:center;display:flex}.adf-viewer-render-pdf{display:contents}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i5.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: PdfViewerComponent, selector: "adf-pdf-viewer", inputs: ["urlFile", "blobFile", "fileName", "showToolbar", "allowThumbnails", "thumbnailsTemplate", "cacheType"], outputs: ["rendered", "error", "close", "pagesLoaded"] }, { kind: "component", type: ImgViewerComponent, selector: "adf-img-viewer", inputs: ["showToolbar", "readOnly", "allowedEditActions", "urlFile", "blobFile", "fileName"], outputs: ["error", "submit", "isSaving", "imageLoaded"] }, { kind: "component", type: MediaPlayerComponent, selector: "adf-media-player", inputs: ["urlFile", "blobFile", "mimeType", "fileName", "tracks"], outputs: ["error", "canPlay"] }, { kind: "component", type: TxtViewerComponent, selector: "adf-txt-viewer", inputs: ["urlFile", "blobFile"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: UnknownFormatComponent, selector: "adf-viewer-unknown-format", inputs: ["customError"] }, { kind: "ngmodule", type: ExtensionsModule }, { kind: "component", type: i2.PreviewExtensionComponent, selector: "adf-preview-extension", inputs: ["id", "nodeId", "url", "extension"] }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "pipe", type: AsyncPipe, name: "async" }], encapsulation: i0.ViewEncapsulation.None }); }
154
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ViewerRenderComponent, isStandalone: true, selector: "adf-viewer-render", inputs: { urlFile: "urlFile", blobFile: "blobFile", allowFullScreen: "allowFullScreen", allowThumbnails: "allowThumbnails", thumbnailsTemplate: "thumbnailsTemplate", mimeType: "mimeType", fileName: "fileName", isLoading: "isLoading", readOnly: "readOnly", allowedEditActions: "allowedEditActions", tracks: "tracks", nodeId: "nodeId", viewerTemplateExtensions: "viewerTemplateExtensions", customError: "customError" }, outputs: { extensionChange: "extensionChange", submitFile: "submitFile", close: "close", isSaving: "isSaving" }, host: { classAttribute: "adf-viewer-render" }, providers: [ViewUtilService], usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"(viewerType === 'media' || viewerType === 'pdf' || viewerType === 'image') ? isLoading || !isContentReady : isLoading\"\n class=\"adf-viewer-render-main-loader\">\n <div class=\"adf-viewer-render-layout-content adf-viewer__fullscreen-container\">\n <div class=\"adf-viewer-render-content-container\">\n <div class=\"adf-viewer-render__loading-screen \">\n <h2>{{ 'ADF_VIEWER.LOADING' | translate }}</h2>\n <div>\n <mat-spinner class=\"adf-viewer-render__loading-screen__spinner\"/>\n </div>\n </div>\n </div>\n </div>\n</div>\n\n<div *ngIf=\"!isLoading\"\n class=\"adf-viewer-render-main\">\n <div class=\"adf-viewer-render-layout-content adf-viewer__fullscreen-container\">\n <div class=\"adf-viewer-render-content-container\" [ngSwitch]=\"viewerType\">\n <ng-container *ngSwitchCase=\"'external'\">\n <adf-preview-extension *ngIf=\"!!externalViewer\"\n [id]=\"externalViewer.component\"\n [url]=\"urlFile\"\n [extension]=\"externalViewer.fileExtension\"\n [nodeId]=\"nodeId\"\n [attr.data-automation-id]=\"externalViewer.component\" />\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'pdf'\">\n <adf-pdf-viewer [thumbnailsTemplate]=\"thumbnailsTemplate\"\n [allowThumbnails]=\"allowThumbnails\"\n [blobFile]=\"blobFile\"\n [urlFile]=\"urlFile\"\n [fileName]=\"internalFileName\"\n [cacheType]=\"cacheTypeForContent\"\n (pagesLoaded)=\"isContentReady = true\"\n (close)=\"onClose()\"\n (error)=\"onUnsupportedFile()\" />\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'image'\">\n <adf-img-viewer [urlFile]=\"urlFile\"\n [readOnly]=\"readOnly\"\n [fileName]=\"internalFileName\"\n [allowedEditActions]=\"allowedEditActions\"\n [blobFile]=\"blobFile\"\n (error)=\"onUnsupportedFile()\"\n (submit)=\"onSubmitFile($event)\"\n (imageLoaded)=\"isContentReady = true\"\n (isSaving)=\"isSaving.emit($event)\"\n />\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'media'\">\n <adf-media-player id=\"adf-mdedia-player\"\n [urlFile]=\"urlFile\"\n [tracks]=\"tracks\"\n [mimeType]=\"mimeType\"\n [blobFile]=\"blobFile\"\n [fileName]=\"internalFileName\"\n (error)=\"onUnsupportedFile()\"\n (canPlay)=\"isContentReady = true\"/>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'text'\">\n <adf-txt-viewer [urlFile]=\"urlFile\"\n [blobFile]=\"blobFile\" />\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'custom'\">\n <ng-container *ngFor=\"let ext of viewerExtensions\">\n <adf-preview-extension *ngIf=\"checkExtensions(ext.fileExtension)\"\n [id]=\"ext.component\"\n [url]=\"urlFile\"\n [extension]=\"extension\"\n [nodeId]=\"nodeId\"\n [attr.data-automation-id]=\"ext.component\" />\n </ng-container>\n\n <ng-container *ngFor=\"let extensionTemplate of extensionTemplates\">\n <span *ngIf=\"extensionTemplate.isVisible\" class=\"adf-viewer-render-custom-content\">\n <ng-template [ngTemplateOutlet]=\"extensionTemplate.template\"\n [ngTemplateOutletContext]=\"{ urlFile: urlFile, extension: extension }\" />\n </span>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchDefault>\n <adf-viewer-unknown-format [customError]=\"customError\"/>\n </ng-container>\n </div>\n </div>\n</div>\n<ng-container *ngIf=\"viewerTemplateExtensions\">\n <ng-template [ngTemplateOutlet]=\"viewerTemplateExtensions\" [ngTemplateOutletInjector]=\"injector\" />\n</ng-container>\n", styles: [".adf-full-screen,.adf-viewer-render-layout-content{width:100%;height:100%;background-color:var(--adf-theme-background-card-color)}.adf-viewer-render-main-loader{position:fixed;top:64px;left:0;width:100%;height:100%;z-index:1000;display:flex;align-items:center;justify-content:center}.adf-viewer-render-main{width:0;order:1;flex:1 1 auto}.adf-viewer-render-content-container{display:flex;justify-content:center}.adf-viewer-render-layout-content{position:relative;overflow:hidden;z-index:1;background-color:var(--theme-background-color);display:flex;flex-flow:row wrap;flex:1}.adf-viewer-render-layout-content>div{display:flex;flex-flow:row wrap;margin:0 auto;align-items:stretch;height:93vh;width:100%}.adf-viewer-render-overlay-container .adf-viewer-render-content{position:fixed;top:0;left:0;z-index:1000}.adf-viewer-render__loading-screen{display:flex;flex:1 1 auto;align-items:center;justify-content:center;flex-direction:column;height:85vh}.adf-viewer-render__loading-screen__spinner{margin:0 auto}.adf-viewer-render-custom-content{width:100vw}.adf-viewer-render-unknown-content{align-items:center;display:flex}.adf-viewer-render-pdf{display:contents}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i5.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: PdfViewerComponent, selector: "adf-pdf-viewer", inputs: ["urlFile", "blobFile", "fileName", "showToolbar", "allowThumbnails", "thumbnailsTemplate", "cacheType"], outputs: ["rendered", "error", "close", "pagesLoaded"] }, { kind: "component", type: ImgViewerComponent, selector: "adf-img-viewer", inputs: ["showToolbar", "readOnly", "allowedEditActions", "urlFile", "blobFile", "fileName"], outputs: ["error", "submit", "isSaving", "imageLoaded"] }, { kind: "component", type: MediaPlayerComponent, selector: "adf-media-player", inputs: ["urlFile", "blobFile", "mimeType", "fileName", "tracks"], outputs: ["error", "canPlay"] }, { kind: "component", type: TxtViewerComponent, selector: "adf-txt-viewer", inputs: ["urlFile", "blobFile"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: UnknownFormatComponent, selector: "adf-viewer-unknown-format", inputs: ["customError"] }, { kind: "ngmodule", type: ExtensionsModule }, { kind: "component", type: i2.PreviewExtensionComponent, selector: "adf-preview-extension", inputs: ["id", "nodeId", "url", "extension"] }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgSwitchDefault, selector: "[ngSwitchDefault]" }], encapsulation: i0.ViewEncapsulation.None }); }
164
155
  }
165
156
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ViewerRenderComponent, decorators: [{
166
157
  type: Component,
@@ -178,9 +169,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
178
169
  UnknownFormatComponent,
179
170
  ExtensionsModule,
180
171
  NgForOf,
181
- NgSwitchDefault,
182
- AsyncPipe
183
- ], providers: [ViewUtilService], template: "<div *ngIf=\"isLoading$ | async\" class=\"adf-viewer-render-main-loader\">\n <div class=\"adf-viewer-render-layout-content adf-viewer__fullscreen-container\">\n <div class=\"adf-viewer-render-content-container\">\n <div class=\"adf-viewer-render__loading-screen\">\n <h2>{{ 'ADF_VIEWER.LOADING' | translate }}</h2>\n <div>\n <mat-spinner class=\"adf-viewer-render__loading-screen__spinner\" />\n </div>\n </div>\n </div>\n </div>\n</div>\n\n<ng-container *ngIf=\"urlFile || blobFile\">\n <div [hidden]=\"isLoading$ | async\" class=\"adf-viewer-render-main\">\n <div class=\"adf-viewer-render-layout-content adf-viewer__fullscreen-container\">\n <div class=\"adf-viewer-render-content-container\" [ngSwitch]=\"viewerType\">\n <ng-container *ngSwitchCase=\"'external'\">\n <adf-preview-extension\n *ngIf=\"!!externalViewer\"\n [id]=\"externalViewer.component\"\n [url]=\"urlFile\"\n [extension]=\"externalViewer.fileExtension\"\n [nodeId]=\"nodeId\"\n [attr.data-automation-id]=\"externalViewer.component\"\n />\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'pdf'\">\n <adf-pdf-viewer\n [thumbnailsTemplate]=\"thumbnailsTemplate\"\n [allowThumbnails]=\"allowThumbnails\"\n [blobFile]=\"blobFile\"\n [urlFile]=\"urlFile\"\n [fileName]=\"internalFileName\"\n [cacheType]=\"cacheTypeForContent\"\n (pagesLoaded)=\"markAsLoaded()\"\n (close)=\"onClose()\"\n (error)=\"onUnsupportedFile()\"\n />\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'image'\">\n <adf-img-viewer\n [urlFile]=\"urlFile\"\n [readOnly]=\"readOnly\"\n [fileName]=\"internalFileName\"\n [allowedEditActions]=\"allowedEditActions\"\n [blobFile]=\"blobFile\"\n (error)=\"onUnsupportedFile()\"\n (submit)=\"onSubmitFile($event)\"\n (imageLoaded)=\"markAsLoaded()\"\n (isSaving)=\"isSaving.emit($event)\"\n />\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'media'\">\n <adf-media-player\n id=\"adf-mdedia-player\"\n [urlFile]=\"urlFile\"\n [tracks]=\"tracks\"\n [mimeType]=\"mimeType\"\n [blobFile]=\"blobFile\"\n [fileName]=\"internalFileName\"\n (error)=\"onUnsupportedFile()\"\n (canPlay)=\"markAsLoaded()\"\n />\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'text'\">\n <adf-txt-viewer [urlFile]=\"urlFile\" [blobFile]=\"blobFile\" />\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'custom'\">\n <ng-container *ngFor=\"let ext of viewerExtensions\">\n <adf-preview-extension\n *ngIf=\"checkExtensions(ext.fileExtension)\"\n [id]=\"ext.component\"\n [url]=\"urlFile\"\n [extension]=\"extension\"\n [nodeId]=\"nodeId\"\n [attr.data-automation-id]=\"ext.component\"\n />\n </ng-container>\n\n <ng-container *ngFor=\"let extensionTemplate of extensionTemplates\">\n <span *ngIf=\"extensionTemplate.isVisible\" class=\"adf-viewer-render-custom-content\">\n <ng-template\n [ngTemplateOutlet]=\"extensionTemplate.template\"\n [ngTemplateOutletContext]=\"{ urlFile: urlFile, extension: extension }\"\n />\n </span>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchDefault>\n <adf-viewer-unknown-format [customError]=\"customError\" />\n </ng-container>\n </div>\n </div>\n </div>\n</ng-container>\n<ng-container *ngIf=\"viewerTemplateExtensions\">\n <ng-template [ngTemplateOutlet]=\"viewerTemplateExtensions\" [ngTemplateOutletInjector]=\"injector\" />\n</ng-container>\n", styles: [".adf-full-screen,.adf-viewer-render-layout-content{width:100%;height:100%;background-color:var(--adf-theme-background-card-color)}.adf-viewer-render-main-loader{position:fixed;top:64px;left:0;width:100%;height:100%;z-index:1000;display:flex;align-items:center;justify-content:center}.adf-viewer-render-main{width:0;order:1;flex:1 1 auto}.adf-viewer-render-content-container{display:flex;justify-content:center}.adf-viewer-render-layout-content{position:relative;overflow:hidden;z-index:1;background-color:var(--theme-background-color);display:flex;flex-flow:row wrap;flex:1}.adf-viewer-render-layout-content>div{display:flex;flex-flow:row wrap;margin:0 auto;align-items:stretch;height:93vh;width:100%}.adf-viewer-render-overlay-container .adf-viewer-render-content{position:fixed;top:0;left:0;z-index:1000}.adf-viewer-render__loading-screen{display:flex;flex:1 1 auto;align-items:center;justify-content:center;flex-direction:column;height:85vh}.adf-viewer-render__loading-screen__spinner{margin:0 auto}.adf-viewer-render-custom-content{width:100vw}.adf-viewer-render-unknown-content{align-items:center;display:flex}.adf-viewer-render-pdf{display:contents}\n"] }]
172
+ NgSwitchDefault
173
+ ], providers: [ViewUtilService], template: "<div *ngIf=\"(viewerType === 'media' || viewerType === 'pdf' || viewerType === 'image') ? isLoading || !isContentReady : isLoading\"\n class=\"adf-viewer-render-main-loader\">\n <div class=\"adf-viewer-render-layout-content adf-viewer__fullscreen-container\">\n <div class=\"adf-viewer-render-content-container\">\n <div class=\"adf-viewer-render__loading-screen \">\n <h2>{{ 'ADF_VIEWER.LOADING' | translate }}</h2>\n <div>\n <mat-spinner class=\"adf-viewer-render__loading-screen__spinner\"/>\n </div>\n </div>\n </div>\n </div>\n</div>\n\n<div *ngIf=\"!isLoading\"\n class=\"adf-viewer-render-main\">\n <div class=\"adf-viewer-render-layout-content adf-viewer__fullscreen-container\">\n <div class=\"adf-viewer-render-content-container\" [ngSwitch]=\"viewerType\">\n <ng-container *ngSwitchCase=\"'external'\">\n <adf-preview-extension *ngIf=\"!!externalViewer\"\n [id]=\"externalViewer.component\"\n [url]=\"urlFile\"\n [extension]=\"externalViewer.fileExtension\"\n [nodeId]=\"nodeId\"\n [attr.data-automation-id]=\"externalViewer.component\" />\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'pdf'\">\n <adf-pdf-viewer [thumbnailsTemplate]=\"thumbnailsTemplate\"\n [allowThumbnails]=\"allowThumbnails\"\n [blobFile]=\"blobFile\"\n [urlFile]=\"urlFile\"\n [fileName]=\"internalFileName\"\n [cacheType]=\"cacheTypeForContent\"\n (pagesLoaded)=\"isContentReady = true\"\n (close)=\"onClose()\"\n (error)=\"onUnsupportedFile()\" />\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'image'\">\n <adf-img-viewer [urlFile]=\"urlFile\"\n [readOnly]=\"readOnly\"\n [fileName]=\"internalFileName\"\n [allowedEditActions]=\"allowedEditActions\"\n [blobFile]=\"blobFile\"\n (error)=\"onUnsupportedFile()\"\n (submit)=\"onSubmitFile($event)\"\n (imageLoaded)=\"isContentReady = true\"\n (isSaving)=\"isSaving.emit($event)\"\n />\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'media'\">\n <adf-media-player id=\"adf-mdedia-player\"\n [urlFile]=\"urlFile\"\n [tracks]=\"tracks\"\n [mimeType]=\"mimeType\"\n [blobFile]=\"blobFile\"\n [fileName]=\"internalFileName\"\n (error)=\"onUnsupportedFile()\"\n (canPlay)=\"isContentReady = true\"/>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'text'\">\n <adf-txt-viewer [urlFile]=\"urlFile\"\n [blobFile]=\"blobFile\" />\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'custom'\">\n <ng-container *ngFor=\"let ext of viewerExtensions\">\n <adf-preview-extension *ngIf=\"checkExtensions(ext.fileExtension)\"\n [id]=\"ext.component\"\n [url]=\"urlFile\"\n [extension]=\"extension\"\n [nodeId]=\"nodeId\"\n [attr.data-automation-id]=\"ext.component\" />\n </ng-container>\n\n <ng-container *ngFor=\"let extensionTemplate of extensionTemplates\">\n <span *ngIf=\"extensionTemplate.isVisible\" class=\"adf-viewer-render-custom-content\">\n <ng-template [ngTemplateOutlet]=\"extensionTemplate.template\"\n [ngTemplateOutletContext]=\"{ urlFile: urlFile, extension: extension }\" />\n </span>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchDefault>\n <adf-viewer-unknown-format [customError]=\"customError\"/>\n </ng-container>\n </div>\n </div>\n</div>\n<ng-container *ngIf=\"viewerTemplateExtensions\">\n <ng-template [ngTemplateOutlet]=\"viewerTemplateExtensions\" [ngTemplateOutletInjector]=\"injector\" />\n</ng-container>\n", styles: [".adf-full-screen,.adf-viewer-render-layout-content{width:100%;height:100%;background-color:var(--adf-theme-background-card-color)}.adf-viewer-render-main-loader{position:fixed;top:64px;left:0;width:100%;height:100%;z-index:1000;display:flex;align-items:center;justify-content:center}.adf-viewer-render-main{width:0;order:1;flex:1 1 auto}.adf-viewer-render-content-container{display:flex;justify-content:center}.adf-viewer-render-layout-content{position:relative;overflow:hidden;z-index:1;background-color:var(--theme-background-color);display:flex;flex-flow:row wrap;flex:1}.adf-viewer-render-layout-content>div{display:flex;flex-flow:row wrap;margin:0 auto;align-items:stretch;height:93vh;width:100%}.adf-viewer-render-overlay-container .adf-viewer-render-content{position:fixed;top:0;left:0;z-index:1000}.adf-viewer-render__loading-screen{display:flex;flex:1 1 auto;align-items:center;justify-content:center;flex-direction:column;height:85vh}.adf-viewer-render__loading-screen__spinner{margin:0 auto}.adf-viewer-render-custom-content{width:100vw}.adf-viewer-render-unknown-content{align-items:center;display:flex}.adf-viewer-render-pdf{display:contents}\n"] }]
184
174
  }], ctorParameters: () => [{ type: i1.ViewUtilService }, { type: i2.AppExtensionService }, { type: i3.MatDialog }, { type: i0.Injector }], propDecorators: { urlFile: [{
185
175
  type: Input
186
176
  }], blobFile: [{
@@ -195,6 +185,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
195
185
  type: Input
196
186
  }], fileName: [{
197
187
  type: Input
188
+ }], isLoading: [{
189
+ type: Input
198
190
  }], readOnly: [{
199
191
  type: Input
200
192
  }], allowedEditActions: [{
@@ -216,4 +208,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
216
208
  }], isSaving: [{
217
209
  type: Output
218
210
  }] } });
219
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld2VyLXJlbmRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvY29yZS9zcmMvbGliL3ZpZXdlci9jb21wb25lbnRzL3ZpZXdlci1yZW5kZXIvdmlld2VyLXJlbmRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvY29yZS9zcmMvbGliL3ZpZXdlci9jb21wb25lbnRzL3ZpZXdlci1yZW5kZXIvdmlld2VyLXJlbmRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsZ0JBQWdCLEVBQXNCLE1BQU0sMEJBQTBCLENBQUM7QUFDckcsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEgsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwSSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDOUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXRELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0Ms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eXJpZ2h0IMKpIDIwMDUtMjAyNSBIeWxhbmQgU29mdHdhcmUsIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgeyBBcHBFeHRlbnNpb25TZXJ2aWNlLCBFeHRlbnNpb25zTW9kdWxlLCBWaWV3ZXJFeHRlbnNpb25SZWYgfSBmcm9tICdAYWxmcmVzY28vYWRmLWV4dGVuc2lvbnMnO1xuaW1wb3J0IHsgQXN5bmNQaXBlLCBOZ0Zvck9mLCBOZ0lmLCBOZ1N3aXRjaCwgTmdTd2l0Y2hDYXNlLCBOZ1N3aXRjaERlZmF1bHQsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIEluamVjdG9yLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgVGVtcGxhdGVSZWYsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3Mtc3Bpbm5lcic7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IFRyYWNrIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3ZpZXdlci5tb2RlbCc7XG5pbXBvcnQgeyBWaWV3VXRpbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy92aWV3LXV0aWwuc2VydmljZSc7XG5pbXBvcnQgeyBJbWdWaWV3ZXJDb21wb25lbnQgfSBmcm9tICcuLi9pbWctdmlld2VyL2ltZy12aWV3ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IE1lZGlhUGxheWVyQ29tcG9uZW50IH0gZnJvbSAnLi4vbWVkaWEtcGxheWVyL21lZGlhLXBsYXllci5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGRmVmlld2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vcGRmLXZpZXdlci9wZGYtdmlld2VyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUeHRWaWV3ZXJDb21wb25lbnQgfSBmcm9tICcuLi90eHQtdmlld2VyL3R4dC12aWV3ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFVua25vd25Gb3JtYXRDb21wb25lbnQgfSBmcm9tICcuLi91bmtub3duLWZvcm1hdC91bmtub3duLWZvcm1hdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbnR5cGUgVmlld2VyVHlwZSA9ICdtZWRpYScgfCAnaW1hZ2UnIHwgJ3BkZicgfCAnZXh0ZXJuYWwnIHwgJ3RleHQnIHwgJ2N1c3RvbScgfCAndW5rbm93bic7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYWRmLXZpZXdlci1yZW5kZXInLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3ZpZXdlci1yZW5kZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3ZpZXdlci1yZW5kZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgICBob3N0OiB7IGNsYXNzOiAnYWRmLXZpZXdlci1yZW5kZXInIH0sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICAgICAgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlLFxuICAgICAgICBOZ1N3aXRjaCxcbiAgICAgICAgTmdTd2l0Y2hDYXNlLFxuICAgICAgICBOZ0lmLFxuICAgICAgICBQZGZWaWV3ZXJDb21wb25lbnQsXG4gICAgICAgIEltZ1ZpZXdlckNvbXBvbmVudCxcbiAgICAgICAgTWVkaWFQbGF5ZXJDb21wb25lbnQsXG4gICAgICAgIFR4dFZpZXdlckNvbXBvbmVudCxcbiAgICAgICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICAgICAgVW5rbm93bkZvcm1hdENvbXBvbmVudCxcbiAgICAgICAgRXh0ZW5zaW9uc01vZHVsZSxcbiAgICAgICAgTmdGb3JPZixcbiAgICAgICAgTmdTd2l0Y2hEZWZhdWx0LFxuICAgICAgICBBc3luY1BpcGVcbiAgICBdLFxuICAgIHByb3ZpZGVyczogW1ZpZXdVdGlsU2VydmljZV1cbn0pXG5leHBvcnQgY2xhc3MgVmlld2VyUmVuZGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkluaXQge1xuICAgIC8qKlxuICAgICAqIElmIHlvdSB3YW50IHRvIGxvYWQgYW4gZXh0ZXJuYWwgZmlsZSB0aGF0IGRvZXMgbm90IGNvbWUgZnJvbSBBQ1MgeW91XG4gICAgICogY2FuIHVzZSB0aGlzIFVSTCB0byBzcGVjaWZ5IHdoZXJlIHRvIGxvYWQgdGhlIGZpbGUgZnJvbS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHVybEZpbGUgPSAnJztcblxuICAgIC8qKiBMb2FkcyBhIEJsb2IgRmlsZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgYmxvYkZpbGU6IEJsb2I7XG5cbiAgICAvKiogVG9nZ2xlcyB0aGUgJ0Z1bGwgU2NyZWVuJyBmZWF0dXJlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYWxsb3dGdWxsU2NyZWVuID0gdHJ1ZTtcblxuICAgIC8qKiBUb2dnbGVzIFBERiB0aHVtYm5haWxzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYWxsb3dUaHVtYm5haWxzID0gdHJ1ZTtcblxuICAgIC8qKiBUaGUgdGVtcGxhdGUgZm9yIHRoZSBwZGYgdGh1bWJuYWlscy4gKi9cbiAgICBASW5wdXQoKVxuICAgIHRodW1ibmFpbHNUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiA9IG51bGw7XG5cbiAgICAvKiogTUlNRSB0eXBlIG9mIHRoZSBmaWxlIGNvbnRlbnQgKHdoZW4gbm90IGRldGVybWluZWQgYnkgdGhlIGZpbGVuYW1lIGV4dGVuc2lvbikuICovXG4gICAgQElucHV0KClcbiAgICBtaW1lVHlwZTogc3RyaW5nO1xuXG4gICAgLyoqIE92ZXJyaWRlIENvbnRlbnQgZmlsZW5hbWUuICovXG4gICAgQElucHV0KClcbiAgICBmaWxlTmFtZTogc3RyaW5nO1xuXG4gICAgLyoqIEVuYWJsZSB3aGVuIHdoZXJlIGlzIHBvc3NpYmxlIHRoZSBlZGl0aW5nIGZ1bmN0aW9uYWxpdGllcyAgKi9cbiAgICBASW5wdXQoKVxuICAgIHJlYWRPbmx5ID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIENvbnRyb2xzIHdoaWNoIGFjdGlvbnMgYXJlIGVuYWJsZWQgaW4gdGhlIHZpZXdlci5cbiAgICAgKiBFeGFtcGxlOlxuICAgICAqIHsgcm90YXRlOiB0cnVlLCBjcm9wOiBmYWxzZSB9IHdpbGwgZW5hYmxlIHJvdGF0aW9uIGJ1dCBkaXNhYmxlIGNyb3BwaW5nLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgYWxsb3dlZEVkaXRBY3Rpb25zOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSA9IHtcbiAgICAgICAgcm90YXRlOiB0cnVlLFxuICAgICAgICBjcm9wOiB0cnVlXG4gICAgfTtcblxuICAgIC8qKiBtZWRpYSBzdWJ0aXRsZXMgZm9yIHRoZSBtZWRpYSBwbGF5ZXIqL1xuICAgIEBJbnB1dCgpXG4gICAgdHJhY2tzOiBUcmFja1tdID0gW107XG5cbiAgICAvKiogSWRlbnRpZmllciBvZiBhIG5vZGUgdGhhdCBpcyBvcGVuZWQgYnkgdGhlIHZpZXdlci4gKi9cbiAgICBASW5wdXQoKVxuICAgIG5vZGVJZDogc3RyaW5nID0gbnVsbDtcblxuICAgIC8qKiBUZW1wbGF0ZSBjb250YWluaW5nIFZpZXdlckV4dGVuc2lvbkRpcmVjdGl2ZSBpbnN0YW5jZXMgcHJvdmlkaW5nIGRpZmZlcmVudCB2aWV3ZXIgZXh0ZW5zaW9ucyBiYXNlZCBvbiBzdXBwb3J0ZWQgZmlsZSBleHRlbnNpb24uICovXG4gICAgQElucHV0KClcbiAgICB2aWV3ZXJUZW1wbGF0ZUV4dGVuc2lvbnM6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKiogQ3VzdG9tIGVycm9yIG1lc3NhZ2UgdG8gYmUgZGlzcGxheWVkIGluIHRoZSB2aWV3ZXIuICovXG4gICAgQElucHV0KClcbiAgICBjdXN0b21FcnJvcjogc3RyaW5nID0gdW5kZWZpbmVkO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiB0aGUgZmlsZW5hbWUgZXh0ZW5zaW9uIGNoYW5nZXMuICovXG4gICAgQE91dHB1dCgpXG4gICAgZXh0ZW5zaW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIHRoZSBpbWcgaXMgc3VibWl0dGVkIGluIHRoZSBpbWcgdmlld2VyLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHN1Ym1pdEZpbGUgPSBuZXcgRXZlbnRFbWl0dGVyPEJsb2I+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIHRoZSBpbWcgaXMgc3VibWl0dGVkIGluIHRoZSBpbWcgdmlld2VyLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGNsb3NlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiB0aGUgaW1nIGlzIHNhdmluZy4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBpc1NhdmluZyA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIGV4dGVuc2lvblRlbXBsYXRlczogeyB0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjsgaXNWaXNpYmxlOiBib29sZWFuIH1bXSA9IFtdO1xuICAgIGV4dGVuc2lvbnNTdXBwb3J0ZWRCeVRlbXBsYXRlczogc3RyaW5nW10gPSBbXTtcbiAgICBleHRlbnNpb246IHN0cmluZztcbiAgICBpbnRlcm5hbEZpbGVOYW1lOiBzdHJpbmc7XG4gICAgdmlld2VyVHlwZTogVmlld2VyVHlwZSA9ICd1bmtub3duJztcbiAgICByZWFkb25seSBpc0xvYWRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiB0aGUgYWN0aXZlIFZpZXdlciBjb250ZW50IGV4dGVuc2lvbnMuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBsaXN0IG9mIGV4dGVuc2lvbiByZWZlcmVuY2VzXG4gICAgICovXG4gICAgZ2V0IHZpZXdlckV4dGVuc2lvbnMoKTogVmlld2VyRXh0ZW5zaW9uUmVmW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5leHRlbnNpb25TZXJ2aWNlLmdldFZpZXdlckV4dGVuc2lvbnMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcm92aWRlcyBhIGxpc3Qgb2YgZmlsZSBleHRlbnNpb25zIHN1cHBvcnRlZCBieSBleHRlcm5hbCBwbHVnaW5zLlxuICAgICAqXG4gICAgICogQHJldHVybnMgbGlzdCBvZiBleHRlbnNpb25zXG4gICAgICovXG4gICAgZ2V0IGV4dGVybmFsRXh0ZW5zaW9ucygpOiBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdlckV4dGVuc2lvbnMubWFwKChleHQpID0+IGV4dC5maWxlRXh0ZW5zaW9uKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9leHRlcm5hbFZpZXdlcjogVmlld2VyRXh0ZW5zaW9uUmVmO1xuICAgIGdldCBleHRlcm5hbFZpZXdlcigpOiBWaWV3ZXJFeHRlbnNpb25SZWYge1xuICAgICAgICBpZiAoIXRoaXMuX2V4dGVybmFsVmlld2VyKSB7XG4gICAgICAgICAgICB0aGlzLl9leHRlcm5hbFZpZXdlciA9IHRoaXMudmlld2VyRXh0ZW5zaW9ucy5maW5kKChleHQpID0+IGV4dC5maWxlRXh0ZW5zaW9uID09PSAnKicpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4dGVybmFsVmlld2VyO1xuICAgIH1cblxuICAgIGNhY2hlVHlwZUZvckNvbnRlbnQgPSAnbm8tY2FjaGUnO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgdmlld1V0aWxTZXJ2aWNlOiBWaWV3VXRpbFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZXh0ZW5zaW9uU2VydmljZTogQXBwRXh0ZW5zaW9uU2VydmljZSxcbiAgICAgICAgcHVibGljIGRpYWxvZzogTWF0RGlhbG9nLFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgaW5qZWN0b3I6IEluamVjdG9yXG4gICAgKSB7fVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuY2FjaGVUeXBlRm9yQ29udGVudCA9ICduby1jYWNoZSc7XG4gICAgICAgIHRoaXMuc2V0RGVmYXVsdExvYWRpbmdTdGF0ZSgpO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKCkge1xuICAgICAgICBpZiAodGhpcy5ibG9iRmlsZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRVcEJsb2JEYXRhKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy51cmxGaWxlKSB7XG4gICAgICAgICAgICB0aGlzLnNldFVwVXJsRmlsZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbWFya0FzTG9hZGVkKCkge1xuICAgICAgICB0aGlzLmlzTG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRVcEJsb2JEYXRhKCkge1xuICAgICAgICB0aGlzLmludGVybmFsRmlsZU5hbWUgPSB0aGlzLmZpbGVOYW1lO1xuICAgICAgICB0aGlzLnZpZXdlclR5cGUgPSB0aGlzLnZpZXdVdGlsU2VydmljZS5nZXRWaWV3ZXJUeXBlQnlNaW1lVHlwZSh0aGlzLmJsb2JGaWxlLnR5cGUpIGFzIFZpZXdlclR5cGU7XG5cbiAgICAgICAgdGhpcy5leHRlbnNpb25DaGFuZ2UuZW1pdCh0aGlzLmJsb2JGaWxlLnR5cGUpO1xuICAgICAgICB0aGlzLnNjcm9sbFRvcCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0VXBVcmxGaWxlKCkge1xuICAgICAgICB0aGlzLmludGVybmFsRmlsZU5hbWUgPSB0aGlzLmZpbGVOYW1lID8gdGhpcy5maWxlTmFtZSA6IHRoaXMudmlld1V0aWxTZXJ2aWNlLmdldEZpbGVuYW1lRnJvbVVybCh0aGlzLnVybEZpbGUpO1xuICAgICAgICB0aGlzLmV4dGVuc2lvbiA9IHRoaXMudmlld1V0aWxTZXJ2aWNlLmdldEZpbGVFeHRlbnNpb24odGhpcy5pbnRlcm5hbEZpbGVOYW1lKTtcbiAgICAgICAgdGhpcy52aWV3ZXJUeXBlID0gdGhpcy52aWV3VXRpbFNlcnZpY2UuZ2V0Vmlld2VyVHlwZSh0aGlzLmV4dGVuc2lvbiwgdGhpcy5taW1lVHlwZSwgdGhpcy5leHRlbnNpb25zU3VwcG9ydGVkQnlUZW1wbGF0ZXMpIGFzIFZpZXdlclR5cGU7XG5cbiAgICAgICAgdGhpcy5leHRlbnNpb25DaGFuZ2UuZW1pdCh0aGlzLmV4dGVuc2lvbik7XG4gICAgICAgIHRoaXMuc2Nyb2xsVG9wKCk7XG4gICAgfVxuXG4gICAgc2Nyb2xsVG9wKCkge1xuICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMSk7XG4gICAgfVxuXG4gICAgY2hlY2tFeHRlbnNpb25zKGV4dGVuc2lvbkFsbG93ZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBleHRlbnNpb25BbGxvd2VkID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXh0ZW5zaW9uLnRvTG93ZXJDYXNlKCkgPT09IGV4dGVuc2lvbkFsbG93ZWQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgfSBlbHNlIGlmIChleHRlbnNpb25BbGxvd2VkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiBleHRlbnNpb25BbGxvd2VkLmZpbmQoKGN1cnJlbnRFeHRlbnNpb24pID0+IHRoaXMuZXh0ZW5zaW9uLnRvTG93ZXJDYXNlKCkgPT09IGN1cnJlbnRFeHRlbnNpb24udG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblN1Ym1pdEZpbGUobmV3SW1hZ2VCbG9iOiBCbG9iKSB7XG4gICAgICAgIHRoaXMuc3VibWl0RmlsZS5uZXh0KG5ld0ltYWdlQmxvYik7XG4gICAgfVxuXG4gICAgb25VbnN1cHBvcnRlZEZpbGUoKSB7XG4gICAgICAgIHRoaXMudmlld2VyVHlwZSA9ICd1bmtub3duJztcbiAgICB9XG5cbiAgICBvbkNsb3NlKCkge1xuICAgICAgICB0aGlzLmNsb3NlLm5leHQodHJ1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYW5CZVByZXZpZXdlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld2VyVHlwZSA9PT0gJ21lZGlhJyB8fCB0aGlzLnZpZXdlclR5cGUgPT09ICdwZGYnIHx8IHRoaXMudmlld2VyVHlwZSA9PT0gJ2ltYWdlJztcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldERlZmF1bHRMb2FkaW5nU3RhdGUoKSB7XG4gICAgICAgIGlmICh0aGlzLmNhbkJlUHJldmlld2VkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nJC5uZXh0KHRydWUpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPGRpdiAqbmdJZj1cImlzTG9hZGluZyQgfCBhc3luY1wiIGNsYXNzPVwiYWRmLXZpZXdlci1yZW5kZXItbWFpbi1sb2FkZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiYWRmLXZpZXdlci1yZW5kZXItbGF5b3V0LWNvbnRlbnQgYWRmLXZpZXdlcl9fZnVsbHNjcmVlbi1jb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFkZi12aWV3ZXItcmVuZGVyLWNvbnRlbnQtY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLXZpZXdlci1yZW5kZXJfX2xvYWRpbmctc2NyZWVuXCI+XG4gICAgICAgICAgICAgICAgPGgyPnt7ICdBREZfVklFV0VSLkxPQURJTkcnIHwgdHJhbnNsYXRlIH19PC9oMj5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICA8bWF0LXNwaW5uZXIgY2xhc3M9XCJhZGYtdmlld2VyLXJlbmRlcl9fbG9hZGluZy1zY3JlZW5fX3NwaW5uZXJcIiAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJ1cmxGaWxlIHx8IGJsb2JGaWxlXCI+XG4gICAgPGRpdiBbaGlkZGVuXT1cImlzTG9hZGluZyQgfCBhc3luY1wiIGNsYXNzPVwiYWRmLXZpZXdlci1yZW5kZXItbWFpblwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLXZpZXdlci1yZW5kZXItbGF5b3V0LWNvbnRlbnQgYWRmLXZpZXdlcl9fZnVsbHNjcmVlbi1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtdmlld2VyLXJlbmRlci1jb250ZW50LWNvbnRhaW5lclwiIFtuZ1N3aXRjaF09XCJ2aWV3ZXJUeXBlXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2V4dGVybmFsJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8YWRmLXByZXZpZXctZXh0ZW5zaW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiEhZXh0ZXJuYWxWaWV3ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImV4dGVybmFsVmlld2VyLmNvbXBvbmVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdXJsXT1cInVybEZpbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2V4dGVuc2lvbl09XCJleHRlcm5hbFZpZXdlci5maWxlRXh0ZW5zaW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtub2RlSWRdPVwibm9kZUlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCJleHRlcm5hbFZpZXdlci5jb21wb25lbnRcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3BkZidcIj5cbiAgICAgICAgICAgICAgICAgICAgPGFkZi1wZGYtdmlld2VyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGh1bWJuYWlsc1RlbXBsYXRlXT1cInRodW1ibmFpbHNUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYWxsb3dUaHVtYm5haWxzXT1cImFsbG93VGh1bWJuYWlsc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYmxvYkZpbGVdPVwiYmxvYkZpbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3VybEZpbGVdPVwidXJsRmlsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZmlsZU5hbWVdPVwiaW50ZXJuYWxGaWxlTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2FjaGVUeXBlXT1cImNhY2hlVHlwZUZvckNvbnRlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKHBhZ2VzTG9hZGVkKT1cIm1hcmtBc0xvYWRlZCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbG9zZSk9XCJvbkNsb3NlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yKT1cIm9uVW5zdXBwb3J0ZWRGaWxlKClcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2ltYWdlJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8YWRmLWltZy12aWV3ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt1cmxGaWxlXT1cInVybEZpbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRPbmx5XT1cInJlYWRPbmx5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmaWxlTmFtZV09XCJpbnRlcm5hbEZpbGVOYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthbGxvd2VkRWRpdEFjdGlvbnNdPVwiYWxsb3dlZEVkaXRBY3Rpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtibG9iRmlsZV09XCJibG9iRmlsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IpPVwib25VbnN1cHBvcnRlZEZpbGUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoc3VibWl0KT1cIm9uU3VibWl0RmlsZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChpbWFnZUxvYWRlZCk9XCJtYXJrQXNMb2FkZWQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoaXNTYXZpbmcpPVwiaXNTYXZpbmcuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidtZWRpYSdcIj5cbiAgICAgICAgICAgICAgICAgICAgPGFkZi1tZWRpYS1wbGF5ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiYWRmLW1kZWRpYS1wbGF5ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3VybEZpbGVdPVwidXJsRmlsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdHJhY2tzXT1cInRyYWNrc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWltZVR5cGVdPVwibWltZVR5cGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Jsb2JGaWxlXT1cImJsb2JGaWxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmaWxlTmFtZV09XCJpbnRlcm5hbEZpbGVOYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvcik9XCJvblVuc3VwcG9ydGVkRmlsZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjYW5QbGF5KT1cIm1hcmtBc0xvYWRlZCgpXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid0ZXh0J1wiPlxuICAgICAgICAgICAgICAgICAgICA8YWRmLXR4dC12aWV3ZXIgW3VybEZpbGVdPVwidXJsRmlsZVwiIFtibG9iRmlsZV09XCJibG9iRmlsZVwiIC8+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInY3VzdG9tJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBleHQgb2Ygdmlld2VyRXh0ZW5zaW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGFkZi1wcmV2aWV3LWV4dGVuc2lvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY2hlY2tFeHRlbnNpb25zKGV4dC5maWxlRXh0ZW5zaW9uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImV4dC5jb21wb25lbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt1cmxdPVwidXJsRmlsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2V4dGVuc2lvbl09XCJleHRlbnNpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtub2RlSWRdPVwibm9kZUlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWF1dG9tYXRpb24taWRdPVwiZXh0LmNvbXBvbmVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBleHRlbnNpb25UZW1wbGF0ZSBvZiBleHRlbnNpb25UZW1wbGF0ZXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZXh0ZW5zaW9uVGVtcGxhdGUuaXNWaXNpYmxlXCIgY2xhc3M9XCJhZGYtdmlld2VyLXJlbmRlci1jdXN0b20tY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJleHRlbnNpb25UZW1wbGF0ZS50ZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IHVybEZpbGU6IHVybEZpbGUsIGV4dGVuc2lvbjogZXh0ZW5zaW9uIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0PlxuICAgICAgICAgICAgICAgICAgICA8YWRmLXZpZXdlci11bmtub3duLWZvcm1hdCBbY3VzdG9tRXJyb3JdPVwiY3VzdG9tRXJyb3JcIiAvPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG48bmctY29udGFpbmVyICpuZ0lmPVwidmlld2VyVGVtcGxhdGVFeHRlbnNpb25zXCI+XG4gICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInZpZXdlclRlbXBsYXRlRXh0ZW5zaW9uc1wiIFtuZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3JdPVwiaW5qZWN0b3JcIiAvPlxuPC9uZy1jb250YWluZXI+XG4iXX0=
211
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld2VyLXJlbmRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvY29yZS9zcmMvbGliL3ZpZXdlci9jb21wb25lbnRzL3ZpZXdlci1yZW5kZXIvdmlld2VyLXJlbmRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvY29yZS9zcmMvbGliL3ZpZXdlci9jb21wb25lbnRzL3ZpZXdlci1yZW5kZXIvdmlld2VyLXJlbmRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsZ0JBQWdCLEVBQXNCLE1BQU0sMEJBQTBCLENBQUM7QUFDckcsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzRyxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BJLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3hF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d0JBQ3hCLFFBQVE7d0JBQ1IsWUFBWTt3QkFDWixJQUFJO3dCQUNKLGtCQUFrQjt3QkFDbEIsa0JBQWtCO3dCQUNsQixvQkFBb0I7d0JBQ3BCLGtCQUFrQjt3QkFDbEIsZ0JBQWdCO3dCQUNoQixzQkFBc0I7d0JBQ3RCLGdCQUFnQjt3QkFDaEIsT0FBTzt3QkFDUCxlQUFlO3FCQUNsQixhQUNVLENBQUMsZUFBZSxDQUFDO3FLQVE1QixPQUFPO3NCQUROLEtBQUs7Z0JBS04sUUFBUTtzQkFEUCxLQUFLO2dCQUtOLGVBQWU7c0JBRGQsS0FBSztnQkFLTixlQUFlO3NCQURkLEtBQUs7Z0JBS04sa0JBQWtCO3NCQURqQixLQUFLO2dCQUtOLFFBQVE7c0JBRFAsS0FBSztnQkFLTixRQUFRO3NCQURQLEtBQUs7Z0JBS04sU0FBUztzQkFEUixLQUFLO2dCQUtOLFFBQVE7c0JBRFAsS0FBSztnQkFTTixrQkFBa0I7c0JBRGpCLEtBQUs7Z0JBUU4sTUFBTTtzQkFETCxLQUFLO2dCQUtOLE1BQU07c0JBREwsS0FBSztnQkFLTix3QkFBd0I7c0JBRHZCLEtBQUs7Z0JBS04sV0FBVztzQkFEVixLQUFLO2dCQUtOLGVBQWU7c0JBRGQsTUFBTTtnQkFLUCxVQUFVO3NCQURULE1BQU07Z0JBS1AsS0FBSztzQkFESixNQUFNO2dCQUtQLFFBQVE7c0JBRFAsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCDCqSAyMDA1LTIwMjUgSHlsYW5kIFNvZnR3YXJlLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHsgQXBwRXh0ZW5zaW9uU2VydmljZSwgRXh0ZW5zaW9uc01vZHVsZSwgVmlld2VyRXh0ZW5zaW9uUmVmIH0gZnJvbSAnQGFsZnJlc2NvL2FkZi1leHRlbnNpb25zJztcbmltcG9ydCB7IE5nRm9yT2YsIE5nSWYsIE5nU3dpdGNoLCBOZ1N3aXRjaENhc2UsIE5nU3dpdGNoRGVmYXVsdCwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5qZWN0b3IsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBUZW1wbGF0ZVJlZiwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1zcGlubmVyJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgVHJhY2sgfSBmcm9tICcuLi8uLi9tb2RlbHMvdmlld2VyLm1vZGVsJztcbmltcG9ydCB7IFZpZXdVdGlsU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3ZpZXctdXRpbC5zZXJ2aWNlJztcbmltcG9ydCB7IEltZ1ZpZXdlckNvbXBvbmVudCB9IGZyb20gJy4uL2ltZy12aWV3ZXIvaW1nLXZpZXdlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWVkaWFQbGF5ZXJDb21wb25lbnQgfSBmcm9tICcuLi9tZWRpYS1wbGF5ZXIvbWVkaWEtcGxheWVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQZGZWaWV3ZXJDb21wb25lbnQgfSBmcm9tICcuLi9wZGYtdmlld2VyL3BkZi12aWV3ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFR4dFZpZXdlckNvbXBvbmVudCB9IGZyb20gJy4uL3R4dC12aWV3ZXIvdHh0LXZpZXdlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgVW5rbm93bkZvcm1hdENvbXBvbmVudCB9IGZyb20gJy4uL3Vua25vd24tZm9ybWF0L3Vua25vd24tZm9ybWF0LmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYWRmLXZpZXdlci1yZW5kZXInLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3ZpZXdlci1yZW5kZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3ZpZXdlci1yZW5kZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgICBob3N0OiB7IGNsYXNzOiAnYWRmLXZpZXdlci1yZW5kZXInIH0sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICAgICAgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlLFxuICAgICAgICBOZ1N3aXRjaCxcbiAgICAgICAgTmdTd2l0Y2hDYXNlLFxuICAgICAgICBOZ0lmLFxuICAgICAgICBQZGZWaWV3ZXJDb21wb25lbnQsXG4gICAgICAgIEltZ1ZpZXdlckNvbXBvbmVudCxcbiAgICAgICAgTWVkaWFQbGF5ZXJDb21wb25lbnQsXG4gICAgICAgIFR4dFZpZXdlckNvbXBvbmVudCxcbiAgICAgICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICAgICAgVW5rbm93bkZvcm1hdENvbXBvbmVudCxcbiAgICAgICAgRXh0ZW5zaW9uc01vZHVsZSxcbiAgICAgICAgTmdGb3JPZixcbiAgICAgICAgTmdTd2l0Y2hEZWZhdWx0XG4gICAgXSxcbiAgICBwcm92aWRlcnM6IFtWaWV3VXRpbFNlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIFZpZXdlclJlbmRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25Jbml0IHtcbiAgICAvKipcbiAgICAgKiBJZiB5b3Ugd2FudCB0byBsb2FkIGFuIGV4dGVybmFsIGZpbGUgdGhhdCBkb2VzIG5vdCBjb21lIGZyb20gQUNTIHlvdVxuICAgICAqIGNhbiB1c2UgdGhpcyBVUkwgdG8gc3BlY2lmeSB3aGVyZSB0byBsb2FkIHRoZSBmaWxlIGZyb20uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICB1cmxGaWxlID0gJyc7XG5cbiAgICAvKiogTG9hZHMgYSBCbG9iIEZpbGUgKi9cbiAgICBASW5wdXQoKVxuICAgIGJsb2JGaWxlOiBCbG9iO1xuXG4gICAgLyoqIFRvZ2dsZXMgdGhlICdGdWxsIFNjcmVlbicgZmVhdHVyZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIGFsbG93RnVsbFNjcmVlbiA9IHRydWU7XG5cbiAgICAvKiogVG9nZ2xlcyBQREYgdGh1bWJuYWlscy4gKi9cbiAgICBASW5wdXQoKVxuICAgIGFsbG93VGh1bWJuYWlscyA9IHRydWU7XG5cbiAgICAvKiogVGhlIHRlbXBsYXRlIGZvciB0aGUgcGRmIHRodW1ibmFpbHMuICovXG4gICAgQElucHV0KClcbiAgICB0aHVtYm5haWxzVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gPSBudWxsO1xuXG4gICAgLyoqIE1JTUUgdHlwZSBvZiB0aGUgZmlsZSBjb250ZW50ICh3aGVuIG5vdCBkZXRlcm1pbmVkIGJ5IHRoZSBmaWxlbmFtZSBleHRlbnNpb24pLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbWltZVR5cGU6IHN0cmluZztcblxuICAgIC8qKiBPdmVycmlkZSBDb250ZW50IGZpbGVuYW1lLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZmlsZU5hbWU6IHN0cmluZztcblxuICAgIC8qKiBPdmVycmlkZSBsb2FkaW5nIHN0YXR1cyAqL1xuICAgIEBJbnB1dCgpXG4gICAgaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgICAvKiogRW5hYmxlIHdoZW4gd2hlcmUgaXMgcG9zc2libGUgdGhlIGVkaXRpbmcgZnVuY3Rpb25hbGl0aWVzICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcmVhZE9ubHkgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQ29udHJvbHMgd2hpY2ggYWN0aW9ucyBhcmUgZW5hYmxlZCBpbiB0aGUgdmlld2VyLlxuICAgICAqIEV4YW1wbGU6XG4gICAgICogeyByb3RhdGU6IHRydWUsIGNyb3A6IGZhbHNlIH0gd2lsbCBlbmFibGUgcm90YXRpb24gYnV0IGRpc2FibGUgY3JvcHBpbmcuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBhbGxvd2VkRWRpdEFjdGlvbnM6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9ID0ge1xuICAgICAgICByb3RhdGU6IHRydWUsXG4gICAgICAgIGNyb3A6IHRydWVcbiAgICB9O1xuXG4gICAgLyoqIG1lZGlhIHN1YnRpdGxlcyBmb3IgdGhlIG1lZGlhIHBsYXllciovXG4gICAgQElucHV0KClcbiAgICB0cmFja3M6IFRyYWNrW10gPSBbXTtcblxuICAgIC8qKiBJZGVudGlmaWVyIG9mIGEgbm9kZSB0aGF0IGlzIG9wZW5lZCBieSB0aGUgdmlld2VyLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbm9kZUlkOiBzdHJpbmcgPSBudWxsO1xuXG4gICAgLyoqIFRlbXBsYXRlIGNvbnRhaW5pbmcgVmlld2VyRXh0ZW5zaW9uRGlyZWN0aXZlIGluc3RhbmNlcyBwcm92aWRpbmcgZGlmZmVyZW50IHZpZXdlciBleHRlbnNpb25zIGJhc2VkIG9uIHN1cHBvcnRlZCBmaWxlIGV4dGVuc2lvbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIHZpZXdlclRlbXBsYXRlRXh0ZW5zaW9uczogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKiBDdXN0b20gZXJyb3IgbWVzc2FnZSB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHZpZXdlci4gKi9cbiAgICBASW5wdXQoKVxuICAgIGN1c3RvbUVycm9yOiBzdHJpbmcgPSB1bmRlZmluZWQ7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIHRoZSBmaWxlbmFtZSBleHRlbnNpb24gY2hhbmdlcy4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBleHRlbnNpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gdGhlIGltZyBpcyBzdWJtaXR0ZWQgaW4gdGhlIGltZyB2aWV3ZXIuICovXG4gICAgQE91dHB1dCgpXG4gICAgc3VibWl0RmlsZSA9IG5ldyBFdmVudEVtaXR0ZXI8QmxvYj4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gdGhlIGltZyBpcyBzdWJtaXR0ZWQgaW4gdGhlIGltZyB2aWV3ZXIuICovXG4gICAgQE91dHB1dCgpXG4gICAgY2xvc2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIHRoZSBpbWcgaXMgc2F2aW5nLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGlzU2F2aW5nID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgZXh0ZW5zaW9uVGVtcGxhdGVzOiB7IHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+OyBpc1Zpc2libGU6IGJvb2xlYW4gfVtdID0gW107XG4gICAgZXh0ZW5zaW9uc1N1cHBvcnRlZEJ5VGVtcGxhdGVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGV4dGVuc2lvbjogc3RyaW5nO1xuICAgIGludGVybmFsRmlsZU5hbWU6IHN0cmluZztcbiAgICB2aWV3ZXJUeXBlOiBzdHJpbmcgPSAndW5rbm93bic7XG4gICAgaXNDb250ZW50UmVhZHkgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBsaXN0IG9mIHRoZSBhY3RpdmUgVmlld2VyIGNvbnRlbnQgZXh0ZW5zaW9ucy5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIGxpc3Qgb2YgZXh0ZW5zaW9uIHJlZmVyZW5jZXNcbiAgICAgKi9cbiAgICBnZXQgdmlld2VyRXh0ZW5zaW9ucygpOiBWaWV3ZXJFeHRlbnNpb25SZWZbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmV4dGVuc2lvblNlcnZpY2UuZ2V0Vmlld2VyRXh0ZW5zaW9ucygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByb3ZpZGVzIGEgbGlzdCBvZiBmaWxlIGV4dGVuc2lvbnMgc3VwcG9ydGVkIGJ5IGV4dGVybmFsIHBsdWdpbnMuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBsaXN0IG9mIGV4dGVuc2lvbnNcbiAgICAgKi9cbiAgICBnZXQgZXh0ZXJuYWxFeHRlbnNpb25zKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld2VyRXh0ZW5zaW9ucy5tYXAoKGV4dCkgPT4gZXh0LmZpbGVFeHRlbnNpb24pO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2V4dGVybmFsVmlld2VyOiBWaWV3ZXJFeHRlbnNpb25SZWY7XG4gICAgZ2V0IGV4dGVybmFsVmlld2VyKCk6IFZpZXdlckV4dGVuc2lvblJlZiB7XG4gICAgICAgIGlmICghdGhpcy5fZXh0ZXJuYWxWaWV3ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX2V4dGVybmFsVmlld2VyID0gdGhpcy52aWV3ZXJFeHRlbnNpb25zLmZpbmQoKGV4dCkgPT4gZXh0LmZpbGVFeHRlbnNpb24gPT09ICcqJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fZXh0ZXJuYWxWaWV3ZXI7XG4gICAgfVxuXG4gICAgY2FjaGVUeXBlRm9yQ29udGVudCA9ICduby1jYWNoZSc7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSB2aWV3VXRpbFNlcnZpY2U6IFZpZXdVdGlsU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBleHRlbnNpb25TZXJ2aWNlOiBBcHBFeHRlbnNpb25TZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgZGlhbG9nOiBNYXREaWFsb2csXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBpbmplY3RvcjogSW5qZWN0b3JcbiAgICApIHt9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5jYWNoZVR5cGVGb3JDb250ZW50ID0gJ25vLWNhY2hlJztcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcygpIHtcbiAgICAgICAgdGhpcy5pc0NvbnRlbnRSZWFkeSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzTG9hZGluZyA9ICF0aGlzLmJsb2JGaWxlICYmICF0aGlzLnVybEZpbGU7XG5cbiAgICAgICAgaWYgKHRoaXMuYmxvYkZpbGUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VXBCbG9iRGF0YSgpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudXJsRmlsZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRVcFVybEZpbGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0VXBCbG9iRGF0YSgpIHtcbiAgICAgICAgdGhpcy5pbnRlcm5hbEZpbGVOYW1lID0gdGhpcy5maWxlTmFtZTtcbiAgICAgICAgdGhpcy52aWV3ZXJUeXBlID0gdGhpcy52aWV3VXRpbFNlcnZpY2UuZ2V0Vmlld2VyVHlwZUJ5TWltZVR5cGUodGhpcy5ibG9iRmlsZS50eXBlKTtcblxuICAgICAgICB0aGlzLmV4dGVuc2lvbkNoYW5nZS5lbWl0KHRoaXMuYmxvYkZpbGUudHlwZSk7XG4gICAgICAgIHRoaXMuc2Nyb2xsVG9wKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRVcFVybEZpbGUoKSB7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxGaWxlTmFtZSA9IHRoaXMuZmlsZU5hbWUgPyB0aGlzLmZpbGVOYW1lIDogdGhpcy52aWV3VXRpbFNlcnZpY2UuZ2V0RmlsZW5hbWVGcm9tVXJsKHRoaXMudXJsRmlsZSk7XG4gICAgICAgIHRoaXMuZXh0ZW5zaW9uID0gdGhpcy52aWV3VXRpbFNlcnZpY2UuZ2V0RmlsZUV4dGVuc2lvbih0aGlzLmludGVybmFsRmlsZU5hbWUpO1xuICAgICAgICB0aGlzLnZpZXdlclR5cGUgPSB0aGlzLnZpZXdVdGlsU2VydmljZS5nZXRWaWV3ZXJUeXBlKHRoaXMuZXh0ZW5zaW9uLCB0aGlzLm1pbWVUeXBlLCB0aGlzLmV4dGVuc2lvbnNTdXBwb3J0ZWRCeVRlbXBsYXRlcyk7XG5cbiAgICAgICAgdGhpcy5leHRlbnNpb25DaGFuZ2UuZW1pdCh0aGlzLmV4dGVuc2lvbik7XG4gICAgICAgIHRoaXMuc2Nyb2xsVG9wKCk7XG4gICAgfVxuXG4gICAgc2Nyb2xsVG9wKCkge1xuICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMSk7XG4gICAgfVxuXG4gICAgY2hlY2tFeHRlbnNpb25zKGV4dGVuc2lvbkFsbG93ZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBleHRlbnNpb25BbGxvd2VkID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXh0ZW5zaW9uLnRvTG93ZXJDYXNlKCkgPT09IGV4dGVuc2lvbkFsbG93ZWQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgfSBlbHNlIGlmIChleHRlbnNpb25BbGxvd2VkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiBleHRlbnNpb25BbGxvd2VkLmZpbmQoKGN1cnJlbnRFeHRlbnNpb24pID0+IHRoaXMuZXh0ZW5zaW9uLnRvTG93ZXJDYXNlKCkgPT09IGN1cnJlbnRFeHRlbnNpb24udG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblN1Ym1pdEZpbGUobmV3SW1hZ2VCbG9iOiBCbG9iKSB7XG4gICAgICAgIHRoaXMuc3VibWl0RmlsZS5uZXh0KG5ld0ltYWdlQmxvYik7XG4gICAgfVxuXG4gICAgb25VbnN1cHBvcnRlZEZpbGUoKSB7XG4gICAgICAgIHRoaXMudmlld2VyVHlwZSA9ICd1bmtub3duJztcbiAgICB9XG5cbiAgICBvbkNsb3NlKCkge1xuICAgICAgICB0aGlzLmNsb3NlLm5leHQodHJ1ZSk7XG4gICAgfVxufVxuIiwiPGRpdiAqbmdJZj1cIih2aWV3ZXJUeXBlID09PSAnbWVkaWEnIHx8IHZpZXdlclR5cGUgPT09ICdwZGYnIHx8IHZpZXdlclR5cGUgPT09ICdpbWFnZScpID8gaXNMb2FkaW5nIHx8ICFpc0NvbnRlbnRSZWFkeSA6IGlzTG9hZGluZ1wiXG4gICAgY2xhc3M9XCJhZGYtdmlld2VyLXJlbmRlci1tYWluLWxvYWRlclwiPlxuICAgIDxkaXYgY2xhc3M9XCJhZGYtdmlld2VyLXJlbmRlci1sYXlvdXQtY29udGVudCBhZGYtdmlld2VyX19mdWxsc2NyZWVuLWNvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLXZpZXdlci1yZW5kZXItY29udGVudC1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtdmlld2VyLXJlbmRlcl9fbG9hZGluZy1zY3JlZW4gXCI+XG4gICAgICAgICAgICAgICAgPGgyPnt7ICdBREZfVklFV0VSLkxPQURJTkcnIHwgdHJhbnNsYXRlIH19PC9oMj5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICA8bWF0LXNwaW5uZXIgY2xhc3M9XCJhZGYtdmlld2VyLXJlbmRlcl9fbG9hZGluZy1zY3JlZW5fX3NwaW5uZXJcIi8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cblxuPGRpdiAqbmdJZj1cIiFpc0xvYWRpbmdcIlxuICAgICBjbGFzcz1cImFkZi12aWV3ZXItcmVuZGVyLW1haW5cIj5cbiAgICA8ZGl2IGNsYXNzPVwiYWRmLXZpZXdlci1yZW5kZXItbGF5b3V0LWNvbnRlbnQgYWRmLXZpZXdlcl9fZnVsbHNjcmVlbi1jb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFkZi12aWV3ZXItcmVuZGVyLWNvbnRlbnQtY29udGFpbmVyXCIgW25nU3dpdGNoXT1cInZpZXdlclR5cGVcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidleHRlcm5hbCdcIj5cbiAgICAgICAgICAgICAgICA8YWRmLXByZXZpZXctZXh0ZW5zaW9uICpuZ0lmPVwiISFleHRlcm5hbFZpZXdlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiZXh0ZXJuYWxWaWV3ZXIuY29tcG9uZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt1cmxdPVwidXJsRmlsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZXh0ZW5zaW9uXT1cImV4dGVybmFsVmlld2VyLmZpbGVFeHRlbnNpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25vZGVJZF09XCJub2RlSWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cImV4dGVybmFsVmlld2VyLmNvbXBvbmVudFwiIC8+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3BkZidcIj5cbiAgICAgICAgICAgICAgICA8YWRmLXBkZi12aWV3ZXIgW3RodW1ibmFpbHNUZW1wbGF0ZV09XCJ0aHVtYm5haWxzVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWxsb3dUaHVtYm5haWxzXT1cImFsbG93VGh1bWJuYWlsc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtibG9iRmlsZV09XCJibG9iRmlsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt1cmxGaWxlXT1cInVybEZpbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmlsZU5hbWVdPVwiaW50ZXJuYWxGaWxlTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjYWNoZVR5cGVdPVwiY2FjaGVUeXBlRm9yQ29udGVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYWdlc0xvYWRlZCk9XCJpc0NvbnRlbnRSZWFkeSA9IHRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xvc2UpPVwib25DbG9zZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yKT1cIm9uVW5zdXBwb3J0ZWRGaWxlKClcIiAvPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidpbWFnZSdcIj5cbiAgICAgICAgICAgICAgICA8YWRmLWltZy12aWV3ZXIgW3VybEZpbGVdPVwidXJsRmlsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJyZWFkT25seVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWxlTmFtZV09XCJpbnRlcm5hbEZpbGVOYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FsbG93ZWRFZGl0QWN0aW9uc109XCJhbGxvd2VkRWRpdEFjdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYmxvYkZpbGVdPVwiYmxvYkZpbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IpPVwib25VbnN1cHBvcnRlZEZpbGUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdWJtaXQpPVwib25TdWJtaXRGaWxlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW1hZ2VMb2FkZWQpPVwiaXNDb250ZW50UmVhZHkgPSB0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlzU2F2aW5nKT1cImlzU2F2aW5nLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInbWVkaWEnXCI+XG4gICAgICAgICAgICAgICAgPGFkZi1tZWRpYS1wbGF5ZXIgaWQ9XCJhZGYtbWRlZGlhLXBsYXllclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3VybEZpbGVdPVwidXJsRmlsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RyYWNrc109XCJ0cmFja3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttaW1lVHlwZV09XCJtaW1lVHlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Jsb2JGaWxlXT1cImJsb2JGaWxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmlsZU5hbWVdPVwiaW50ZXJuYWxGaWxlTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yKT1cIm9uVW5zdXBwb3J0ZWRGaWxlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjYW5QbGF5KT1cImlzQ29udGVudFJlYWR5ID0gdHJ1ZVwiLz5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIndGV4dCdcIj5cbiAgICAgICAgICAgICAgICA8YWRmLXR4dC12aWV3ZXIgW3VybEZpbGVdPVwidXJsRmlsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtibG9iRmlsZV09XCJibG9iRmlsZVwiIC8+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2N1c3RvbSdcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBleHQgb2Ygdmlld2VyRXh0ZW5zaW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICA8YWRmLXByZXZpZXctZXh0ZW5zaW9uICpuZ0lmPVwiY2hlY2tFeHRlbnNpb25zKGV4dC5maWxlRXh0ZW5zaW9uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImV4dC5jb21wb25lbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt1cmxdPVwidXJsRmlsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2V4dGVuc2lvbl09XCJleHRlbnNpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtub2RlSWRdPVwibm9kZUlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWF1dG9tYXRpb24taWRdPVwiZXh0LmNvbXBvbmVudFwiIC8+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBleHRlbnNpb25UZW1wbGF0ZSBvZiBleHRlbnNpb25UZW1wbGF0ZXNcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJleHRlbnNpb25UZW1wbGF0ZS5pc1Zpc2libGVcIiBjbGFzcz1cImFkZi12aWV3ZXItcmVuZGVyLWN1c3RvbS1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiZXh0ZW5zaW9uVGVtcGxhdGUudGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IHVybEZpbGU6IHVybEZpbGUsIGV4dGVuc2lvbjogZXh0ZW5zaW9uIH1cIiAvPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0PlxuICAgICAgICAgICAgICAgIDxhZGYtdmlld2VyLXVua25vd24tZm9ybWF0IFtjdXN0b21FcnJvcl09XCJjdXN0b21FcnJvclwiLz5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuPG5nLWNvbnRhaW5lciAqbmdJZj1cInZpZXdlclRlbXBsYXRlRXh0ZW5zaW9uc1wiPlxuICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJ2aWV3ZXJUZW1wbGF0ZUV4dGVuc2lvbnNcIiBbbmdUZW1wbGF0ZU91dGxldEluamVjdG9yXT1cImluamVjdG9yXCIgLz5cbjwvbmctY29udGFpbmVyPlxuIl19