@alfresco/adf-content-services
Version:
Alfresco ADF content services
53 lines • 16.3 kB
JavaScript
/*!
* @license
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { Component, EventEmitter, inject, Output, ViewEncapsulation } from '@angular/core';
import { SearchQueryBuilderService } from '../../services/search-query-builder.service';
import { CommonModule } from '@angular/common';
import { MatButtonModule } from '@angular/material/button';
import { TranslateModule } from '@ngx-translate/core';
import { MatMenuModule } from '@angular/material/menu';
import { MatIconModule } from '@angular/material/icon';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
import * as i2 from "@angular/material/button";
import * as i3 from "@ngx-translate/core";
import * as i4 from "@angular/material/menu";
import * as i5 from "@angular/material/icon";
export class SearchFormComponent {
constructor() {
this.queryBuilder = inject(SearchQueryBuilderService);
this.searchForms$ = this.queryBuilder.searchForms;
/** Emitted when the form change */
this.formChange = new EventEmitter();
}
onSelectionChange(form) {
this.queryBuilder.updateSelectedConfiguration(form.index);
this.formChange.emit(form);
}
getSelected(forms) {
return forms.find((form) => form.selected)?.name;
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SearchFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: SearchFormComponent, isStandalone: true, selector: "adf-search-form", outputs: { formChange: "formChange" }, ngImport: i0, template: "<ng-container *ngIf=\"searchForms$ | async as forms\">\n\n <ng-container *ngIf=\"forms.length === 1\">\n <button class=\"adf-search-form adf-search-form-button\"\n [disableRipple]=\"true\"\n mat-button\n [title]=\"getSelected(forms) | translate\"\n [attr.aria-label]=\"getSelected(forms) | translate\">\n <span class=\"adf-search-form-title\">{{ getSelected(forms) | translate }}</span>\n </button>\n </ng-container>\n\n <ng-container *ngIf=\"forms.length > 1\">\n <button class=\"adf-search-form adf-search-form-button\"\n [matMenuTriggerFor]=\"menu\"\n #menuTrigger=\"matMenuTrigger\"\n [disableRipple]=\"true\"\n mat-button\n [title]=\"getSelected(forms) | translate\"\n [attr.aria-label]=\"getSelected(forms) | translate\"\n [matMenuTriggerRestoreFocus]=\"true\">\n\n <span class=\"adf-search-form-title\">{{ getSelected(forms) | translate }}</span>\n <mat-icon [class.adf-search-form-icon-selected]=\"menuTrigger.menuOpen\" iconPositionEnd class=\"adf-search-form-icon\">expand_more</mat-icon>\n </button>\n\n <mat-menu #menu=\"matMenu\" class=\"adf-search-form-menu\">\n <button *ngFor=\"let form of forms\" mat-menu-item tabindex=\"0\" [attr.aria-label]=\"form.name | translate\" (click)=\"onSelectionChange(form)\">\n {{ form.name | translate }}\n </button>\n </mat-menu>\n </ng-container>\n</ng-container>\n", styles: [".adf-search-form.adf-search-form-button{place-content:center space-between;display:flex;padding:0 14px 0 16px;height:35px;max-width:190px;min-width:190px;overflow:hidden}.adf-search-form.adf-search-form-button>span:first-child{display:flex;align-items:center}.adf-search-form-title{max-width:120px;min-width:120px;font-size:var(--theme-body-1-font-size);line-height:24px;padding-right:12px;text-overflow:ellipsis;overflow:hidden;text-align:left}.adf-search-form .adf-search-form-icon.mat-icon{font-size:24px;height:24px;width:24px;border:2px solid transparent;border-radius:6px;transition:border .5s ease-out}.adf-search-form-icon-selected{border-color:var(--theme-accent-color)}.adf-search-form-menu{box-shadow:0 3px 1px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f;border-radius:6px}.adf-search-form-menu>div:first-child{padding:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i4.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i4.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i4.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], encapsulation: i0.ViewEncapsulation.None }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SearchFormComponent, decorators: [{
type: Component,
args: [{ selector: 'adf-search-form', standalone: true, imports: [CommonModule, MatButtonModule, TranslateModule, MatMenuModule, MatIconModule], encapsulation: ViewEncapsulation.None, template: "<ng-container *ngIf=\"searchForms$ | async as forms\">\n\n <ng-container *ngIf=\"forms.length === 1\">\n <button class=\"adf-search-form adf-search-form-button\"\n [disableRipple]=\"true\"\n mat-button\n [title]=\"getSelected(forms) | translate\"\n [attr.aria-label]=\"getSelected(forms) | translate\">\n <span class=\"adf-search-form-title\">{{ getSelected(forms) | translate }}</span>\n </button>\n </ng-container>\n\n <ng-container *ngIf=\"forms.length > 1\">\n <button class=\"adf-search-form adf-search-form-button\"\n [matMenuTriggerFor]=\"menu\"\n #menuTrigger=\"matMenuTrigger\"\n [disableRipple]=\"true\"\n mat-button\n [title]=\"getSelected(forms) | translate\"\n [attr.aria-label]=\"getSelected(forms) | translate\"\n [matMenuTriggerRestoreFocus]=\"true\">\n\n <span class=\"adf-search-form-title\">{{ getSelected(forms) | translate }}</span>\n <mat-icon [class.adf-search-form-icon-selected]=\"menuTrigger.menuOpen\" iconPositionEnd class=\"adf-search-form-icon\">expand_more</mat-icon>\n </button>\n\n <mat-menu #menu=\"matMenu\" class=\"adf-search-form-menu\">\n <button *ngFor=\"let form of forms\" mat-menu-item tabindex=\"0\" [attr.aria-label]=\"form.name | translate\" (click)=\"onSelectionChange(form)\">\n {{ form.name | translate }}\n </button>\n </mat-menu>\n </ng-container>\n</ng-container>\n", styles: [".adf-search-form.adf-search-form-button{place-content:center space-between;display:flex;padding:0 14px 0 16px;height:35px;max-width:190px;min-width:190px;overflow:hidden}.adf-search-form.adf-search-form-button>span:first-child{display:flex;align-items:center}.adf-search-form-title{max-width:120px;min-width:120px;font-size:var(--theme-body-1-font-size);line-height:24px;padding-right:12px;text-overflow:ellipsis;overflow:hidden;text-align:left}.adf-search-form .adf-search-form-icon.mat-icon{font-size:24px;height:24px;width:24px;border:2px solid transparent;border-radius:6px;transition:border .5s ease-out}.adf-search-form-icon-selected{border-color:var(--theme-accent-color)}.adf-search-form-menu{box-shadow:0 3px 1px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f;border-radius:6px}.adf-search-form-menu>div:first-child{padding:0}\n"] }]
}], propDecorators: { formChange: [{
type: Output
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGliL2NvbnRlbnQtc2VydmljZXMvc3JjL2xpYi9zZWFyY2gvY29tcG9uZW50cy9zZWFyY2gtZm9ybS9zZWFyY2gtZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvY29udGVudC1zZXJ2aWNlcy9zcmMvbGliL3NlYXJjaC9jb21wb25lbnRzL3NlYXJjaC1mb3JtL3NlYXJjaC1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0YsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFFeEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7OztBQVV2RCxNQUFNLE9BQU8sbUJBQW1CO0lBUmhDO1FBU1ksaUJBQVksR0FBRyxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUV6RCxpQkFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDO1FBRTdDLG1DQUFtQztRQUVuQyxlQUFVLEdBQTZCLElBQUksWUFBWSxFQUFjLENBQUM7S0FVekU7SUFSRyxpQkFBaUIsQ0FBQyxJQUFnQjtRQUM5QixJQUFJLENBQUMsWUFBWSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQW1CO1FBQzNCLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksQ0FBQztJQUNyRCxDQUFDOzhHQWhCUSxtQkFBbUI7a0dBQW5CLG1CQUFtQixrSENsQ2hDLHdrREFpQ0EsazRCREpjLFlBQVksb1RBQUUsZUFBZSwyTkFBRSxlQUFlLDJGQUFFLGFBQWEsNnZCQUFFLGFBQWE7OzJGQUs3RSxtQkFBbUI7a0JBUi9CLFNBQVM7K0JBQ0ksaUJBQWlCLGNBQ2YsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLGFBQWEsQ0FBQyxpQkFHeEUsaUJBQWlCLENBQUMsSUFBSTs4QkFTckMsVUFBVTtzQkFEVCxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IMKpIDIwMDUtMjAyNSBIeWxhbmQgU29mdHdhcmUsIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgaW5qZWN0LCBPdXRwdXQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTZWFyY2hRdWVyeUJ1aWxkZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2VhcmNoLXF1ZXJ5LWJ1aWxkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBTZWFyY2hGb3JtIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3NlYXJjaC1mb3JtLmludGVyZmFjZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgTWF0TWVudU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FkZi1zZWFyY2gtZm9ybScsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBNYXRCdXR0b25Nb2R1bGUsIFRyYW5zbGF0ZU1vZHVsZSwgTWF0TWVudU1vZHVsZSwgTWF0SWNvbk1vZHVsZV0sXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NlYXJjaC1mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9zZWFyY2gtZm9ybS5jb21wb25lbnQuc2NzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgU2VhcmNoRm9ybUNvbXBvbmVudCB7XG4gICAgcHJpdmF0ZSBxdWVyeUJ1aWxkZXIgPSBpbmplY3QoU2VhcmNoUXVlcnlCdWlsZGVyU2VydmljZSk7XG5cbiAgICBzZWFyY2hGb3JtcyQgPSB0aGlzLnF1ZXJ5QnVpbGRlci5zZWFyY2hGb3JtcztcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gdGhlIGZvcm0gY2hhbmdlICovXG4gICAgQE91dHB1dCgpXG4gICAgZm9ybUNoYW5nZTogRXZlbnRFbWl0dGVyPFNlYXJjaEZvcm0+ID0gbmV3IEV2ZW50RW1pdHRlcjxTZWFyY2hGb3JtPigpO1xuXG4gICAgb25TZWxlY3Rpb25DaGFuZ2UoZm9ybTogU2VhcmNoRm9ybSkge1xuICAgICAgICB0aGlzLnF1ZXJ5QnVpbGRlci51cGRhdGVTZWxlY3RlZENvbmZpZ3VyYXRpb24oZm9ybS5pbmRleCk7XG4gICAgICAgIHRoaXMuZm9ybUNoYW5nZS5lbWl0KGZvcm0pO1xuICAgIH1cblxuICAgIGdldFNlbGVjdGVkKGZvcm1zOiBTZWFyY2hGb3JtW10pOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gZm9ybXMuZmluZCgoZm9ybSkgPT4gZm9ybS5zZWxlY3RlZCk/Lm5hbWU7XG4gICAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlYXJjaEZvcm1zJCB8IGFzeW5jIGFzIGZvcm1zXCI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZm9ybXMubGVuZ3RoID09PSAxXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJhZGYtc2VhcmNoLWZvcm0gYWRmLXNlYXJjaC1mb3JtLWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVSaXBwbGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCJnZXRTZWxlY3RlZChmb3JtcykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiZ2V0U2VsZWN0ZWQoZm9ybXMpIHwgdHJhbnNsYXRlXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFkZi1zZWFyY2gtZm9ybS10aXRsZVwiPnt7IGdldFNlbGVjdGVkKGZvcm1zKSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICAqbmdJZj1cImZvcm1zLmxlbmd0aCA+IDFcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImFkZi1zZWFyY2gtZm9ybSBhZGYtc2VhcmNoLWZvcm0tYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudVwiXG4gICAgICAgICAgICAgICAgI21lbnVUcmlnZ2VyPVwibWF0TWVudVRyaWdnZXJcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlUmlwcGxlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgICAgICAgICBbdGl0bGVdPVwiZ2V0U2VsZWN0ZWQoZm9ybXMpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImdldFNlbGVjdGVkKGZvcm1zKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgW21hdE1lbnVUcmlnZ2VyUmVzdG9yZUZvY3VzXT1cInRydWVcIj5cblxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhZGYtc2VhcmNoLWZvcm0tdGl0bGVcIj57eyBnZXRTZWxlY3RlZChmb3JtcykgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICA8bWF0LWljb24gW2NsYXNzLmFkZi1zZWFyY2gtZm9ybS1pY29uLXNlbGVjdGVkXT1cIm1lbnVUcmlnZ2VyLm1lbnVPcGVuXCIgaWNvblBvc2l0aW9uRW5kIGNsYXNzPVwiYWRmLXNlYXJjaC1mb3JtLWljb25cIj5leHBhbmRfbW9yZTwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIiBjbGFzcz1cImFkZi1zZWFyY2gtZm9ybS1tZW51XCI+XG4gICAgICAgICAgICA8YnV0dG9uICpuZ0Zvcj1cImxldCBmb3JtIG9mIGZvcm1zXCIgbWF0LW1lbnUtaXRlbSB0YWJpbmRleD1cIjBcIiBbYXR0ci5hcmlhLWxhYmVsXT1cImZvcm0ubmFtZSB8IHRyYW5zbGF0ZVwiIChjbGljayk9XCJvblNlbGVjdGlvbkNoYW5nZShmb3JtKVwiPlxuICAgICAgICAgICAgICAgIHt7IGZvcm0ubmFtZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvbWF0LW1lbnU+XG4gICAgPC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==