ontimize-web-ngx
Version:
Ontimize Web framework using Angular 15
123 lines • 27.6 kB
JavaScript
import { __decorate, __metadata } from "tslib";
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChildren, ElementRef, Injector, QueryList, ViewChild, ViewContainerRef, ViewEncapsulation } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';
import { BooleanInputConverter } from '../../decorators/input-converter';
import { OTranslateService } from '../../services/translate/o-translate.service';
import * as i0 from "@angular/core";
import * as i1 from "@angular/router";
import * as i2 from "@angular/common";
import * as i3 from "@angular/flex-layout/flex";
import * as i4 from "@angular/material/button";
import * as i5 from "@angular/material/icon";
import * as i6 from "@angular/material/tooltip";
import * as i7 from "../../pipes/o-translate.pipe";
export const DEFAULT_INPUTS_O_MENU_CARD = [
'title',
'image',
'icon',
'tooltip',
'buttonText : button-text',
'disabledButton : disabled-button',
'mainContainerLayout : main-container-layout',
'secondaryContainerLayout : secondary-container-layout',
'route',
'detailComponent : detail-component',
'detailComponentInputs : detail-component-inputs',
'action'
];
export const DEFAULT_OUTPUTS_O_MENU_CARD = [];
export class OCardMenuItemComponent {
set detailComponentContainer(content) {
this._detailComponentContainer = content;
}
get detailComponentContainer() {
return this._detailComponentContainer;
}
constructor(injector, router, actRoute, cd, elRef) {
this.injector = injector;
this.router = router;
this.actRoute = actRoute;
this.cd = cd;
this.elRef = elRef;
this.disabledButton = false;
this.mainContainerLayout = 'column';
this.secondaryContainerLayout = 'column';
this._showSecondaryContainer = true;
this.translateService = this.injector.get(OTranslateService);
this.translateServiceSubscription = this.translateService.onLanguageChanged.subscribe(() => {
this.cd.detectChanges();
});
}
ngAfterViewInit() {
if (this.detailComponentContainer && this.detailComponent) {
const ref = this.detailComponentContainer.createComponent(this.detailComponent);
if (this.detailComponentInputs && ref.instance) {
const keys = Object.keys(this.detailComponentInputs);
for (let i = 0, len = keys.length; i < len; i++) {
ref.instance[keys[i]] = this.detailComponentInputs[keys[i]];
}
}
}
this.showSecondaryContainer = (this.detailComponentContainer && this.detailComponent) || this.secondaryContent.length > 0;
this.cd.detectChanges();
}
ngOnDestroy() {
if (this.translateServiceSubscription) {
this.translateServiceSubscription.unsubscribe();
}
}
useImage() {
return this.image !== undefined;
}
useIcon() {
return this.icon !== undefined && this.image === undefined;
}
onButtonClick() {
if (this.route) {
this.router.navigate([this.route], {
relativeTo: this.actRoute
});
}
else if (this.action) {
this.action();
}
}
onClick() {
if (this.buttonText === undefined) {
this.onButtonClick();
}
}
get showSecondaryContainer() {
return this._showSecondaryContainer;
}
set showSecondaryContainer(val) {
this._showSecondaryContainer = val;
if (val) {
this.elRef.nativeElement.classList.remove('compact');
}
else {
this.elRef.nativeElement.classList.add('compact');
}
}
}
OCardMenuItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OCardMenuItemComponent, deps: [{ token: i0.Injector }, { token: i1.Router }, { token: i1.ActivatedRoute }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
OCardMenuItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: OCardMenuItemComponent, selector: "o-card-menu-item", inputs: { title: "title", image: "image", icon: "icon", tooltip: "tooltip", buttonText: ["button-text", "buttonText"], disabledButton: ["disabled-button", "disabledButton"], mainContainerLayout: ["main-container-layout", "mainContainerLayout"], secondaryContainerLayout: ["secondary-container-layout", "secondaryContainerLayout"], route: "route", detailComponent: ["detail-component", "detailComponent"], detailComponentInputs: ["detail-component-inputs", "detailComponentInputs"], action: "action" }, host: { properties: { "class.o-card-menu-item": "true", "class.mat-elevation-z1": "true", "class.compact": "!showSecondaryContainer" } }, queries: [{ propertyName: "secondaryContent", predicate: [".secondary-container"] }], viewQueries: [{ propertyName: "detailComponentContainer", first: true, predicate: ["menuCardContent"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: "<div class=\"o-card-menu-item-content\" (click)=\"onClick()\" fxLayout=\"column\" fxFill fxLayoutAlign=\"space-between center\">\n\n <div *ngIf=\"showSecondaryContainer\" class=\"o-card-menu-item-secondary\" fxFlex=\"50\" [fxLayout]=\"secondaryContainerLayout\"\n fxLayoutAlign=\"space-around center\">\n <ng-content select=\".secondary-container\"></ng-content>\n <ng-container #menuCardContent *ngIf=\"detailComponent\">\n </ng-container>\n </div>\n\n <div class=\"o-card-menu-item-main\" fxFlex=\"{{ showSecondaryContainer ? '45' : '80' }}\" [fxLayout]=\"mainContainerLayout\"\n fxLayoutAlign=\"space-between center\">\n <div *ngIf=\"useImage() || useIcon()\" fxFlex=\"80\" fxLayout=\"column\" fxLayoutAlign=\"center center\" class=\"o-card-menu-item-image-container\">\n <img *ngIf=\"useImage()\" [src]=\"image\" alt=\"card image\"/>\n <mat-icon *ngIf=\"useIcon()\" class=\"o-card-menu-item-icon\" fxLayoutAlign=\"center center\">{{ icon }}</mat-icon>\n </div>\n\n <div class=\"o-card-menu-item-title\" fxFlex=\"20\" fxLayout=\"column\" fxLayoutAlign=\"center center\" *ngIf=\"title !== undefined\">{{\n title | oTranslate }}</div>\n\n <mat-icon class=\"o-card-menu-item-info\" matTooltip=\"{{ tooltip | oTranslate }}\" *ngIf=\"tooltip\" svgIcon=\"ontimize:info_outline\"></mat-icon>\n\n <ng-content select=\".main-container\"></ng-content>\n\n <button type=\"button\" *ngIf=\"buttonText !== undefined\" [disabled]=\"disabledButton\" (click)=\"onButtonClick()\" mat-button>\n {{ buttonText | oTranslate }}</button>\n </div>\n\n\n</div>\n", styles: [".o-card-menu-item{border-radius:4px}.o-card-menu-item .o-card-menu-item-content{padding:12px 18px}.o-card-menu-item .o-card-menu-item-content .o-card-menu-item-main,.o-card-menu-item .o-card-menu-item-content .o-card-menu-item-secondary{width:100%}.o-card-menu-item .o-card-menu-item-content .o-card-menu-item-secondary{padding-bottom:18px}.o-card-menu-item .o-card-menu-item-content .o-card-menu-item-image-container{width:100%}.o-card-menu-item .o-card-menu-item-content .o-card-menu-item-image-container .o-card-menu-item-icon{width:100%;height:100%;font-size:5em}.o-card-menu-item .o-card-menu-item-content .o-card-menu-item-image-container img{max-width:100%;max-height:100%}.o-card-menu-item .o-card-menu-item-content .o-card-menu-item-title{margin:8px 0}.o-card-menu-item .o-card-menu-item-content .mat-mdc-button,.o-card-menu-item .o-card-menu-item-content .o-card-menu-item-title{font-weight:600}.o-card-menu-item .o-card-menu-item-content .o-card-menu-item-main{position:relative;padding:16px;border-radius:4px}.o-card-menu-item .o-card-menu-item-content .o-card-menu-item-icon,.o-card-menu-item .o-card-menu-item-content .o-card-menu-item-title{cursor:default}.o-card-menu-item .o-card-menu-item-content .o-card-menu-item-info{cursor:default;position:absolute;top:16px;right:16px}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i3.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i3.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "directive", type: i3.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i6.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "pipe", type: i7.OTranslatePipe, name: "oTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
__decorate([
BooleanInputConverter(),
__metadata("design:type", Boolean)
], OCardMenuItemComponent.prototype, "disabledButton", void 0);
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OCardMenuItemComponent, decorators: [{
type: Component,
args: [{ selector: 'o-card-menu-item', inputs: DEFAULT_INPUTS_O_MENU_CARD, outputs: DEFAULT_OUTPUTS_O_MENU_CARD, encapsulation: ViewEncapsulation.None, host: {
'[class.o-card-menu-item]': 'true',
'[class.mat-elevation-z1]': 'true',
'[class.compact]': '!showSecondaryContainer'
}, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"o-card-menu-item-content\" (click)=\"onClick()\" fxLayout=\"column\" fxFill fxLayoutAlign=\"space-between center\">\n\n <div *ngIf=\"showSecondaryContainer\" class=\"o-card-menu-item-secondary\" fxFlex=\"50\" [fxLayout]=\"secondaryContainerLayout\"\n fxLayoutAlign=\"space-around center\">\n <ng-content select=\".secondary-container\"></ng-content>\n <ng-container #menuCardContent *ngIf=\"detailComponent\">\n </ng-container>\n </div>\n\n <div class=\"o-card-menu-item-main\" fxFlex=\"{{ showSecondaryContainer ? '45' : '80' }}\" [fxLayout]=\"mainContainerLayout\"\n fxLayoutAlign=\"space-between center\">\n <div *ngIf=\"useImage() || useIcon()\" fxFlex=\"80\" fxLayout=\"column\" fxLayoutAlign=\"center center\" class=\"o-card-menu-item-image-container\">\n <img *ngIf=\"useImage()\" [src]=\"image\" alt=\"card image\"/>\n <mat-icon *ngIf=\"useIcon()\" class=\"o-card-menu-item-icon\" fxLayoutAlign=\"center center\">{{ icon }}</mat-icon>\n </div>\n\n <div class=\"o-card-menu-item-title\" fxFlex=\"20\" fxLayout=\"column\" fxLayoutAlign=\"center center\" *ngIf=\"title !== undefined\">{{\n title | oTranslate }}</div>\n\n <mat-icon class=\"o-card-menu-item-info\" matTooltip=\"{{ tooltip | oTranslate }}\" *ngIf=\"tooltip\" svgIcon=\"ontimize:info_outline\"></mat-icon>\n\n <ng-content select=\".main-container\"></ng-content>\n\n <button type=\"button\" *ngIf=\"buttonText !== undefined\" [disabled]=\"disabledButton\" (click)=\"onButtonClick()\" mat-button>\n {{ buttonText | oTranslate }}</button>\n </div>\n\n\n</div>\n", styles: [".o-card-menu-item{border-radius:4px}.o-card-menu-item .o-card-menu-item-content{padding:12px 18px}.o-card-menu-item .o-card-menu-item-content .o-card-menu-item-main,.o-card-menu-item .o-card-menu-item-content .o-card-menu-item-secondary{width:100%}.o-card-menu-item .o-card-menu-item-content .o-card-menu-item-secondary{padding-bottom:18px}.o-card-menu-item .o-card-menu-item-content .o-card-menu-item-image-container{width:100%}.o-card-menu-item .o-card-menu-item-content .o-card-menu-item-image-container .o-card-menu-item-icon{width:100%;height:100%;font-size:5em}.o-card-menu-item .o-card-menu-item-content .o-card-menu-item-image-container img{max-width:100%;max-height:100%}.o-card-menu-item .o-card-menu-item-content .o-card-menu-item-title{margin:8px 0}.o-card-menu-item .o-card-menu-item-content .mat-mdc-button,.o-card-menu-item .o-card-menu-item-content .o-card-menu-item-title{font-weight:600}.o-card-menu-item .o-card-menu-item-content .o-card-menu-item-main{position:relative;padding:16px;border-radius:4px}.o-card-menu-item .o-card-menu-item-content .o-card-menu-item-icon,.o-card-menu-item .o-card-menu-item-content .o-card-menu-item-title{cursor:default}.o-card-menu-item .o-card-menu-item-content .o-card-menu-item-info{cursor:default;position:absolute;top:16px;right:16px}\n"] }]
}], ctorParameters: function () { return [{ type: i0.Injector }, { type: i1.Router }, { type: i1.ActivatedRoute }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }]; }, propDecorators: { disabledButton: [], detailComponentContainer: [{
type: ViewChild,
args: ['menuCardContent', { read: ViewContainerRef }]
}], secondaryContent: [{
type: ContentChildren,
args: ['.secondary-container']
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1jYXJkLW1lbnUtaXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbnRpbWl6ZS13ZWItbmd4L3NyYy9saWIvY29tcG9uZW50cy9jYXJkLW1lbnUtaXRlbS9vLWNhcmQtbWVudS1pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL2NhcmQtbWVudS1pdGVtL28tY2FyZC1tZW51LWl0ZW0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFFBQVEsRUFFUixTQUFTLEVBQ1QsU0FBUyxFQUNULGdCQUFnQixFQUNoQixpQkFBaUIsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUd6RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQzs7Ozs7Ozs7O0FBRWpGLE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHO0lBQ3hDLE9BQU87SUFDUCxPQUFPO0lBQ1AsTUFBTTtJQUNOLFNBQVM7SUFDVCwwQkFBMEI7SUFDMUIsa0NBQWtDO0lBQ2xDLDZDQUE2QztJQUM3Qyx1REFBdUQ7SUFDdkQsT0FBTztJQUNQLG9DQUFvQztJQUNwQyxpREFBaUQ7SUFDakQsUUFBUTtDQUNULENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRyxFQUFFLENBQUM7QUFnQjlDLE1BQU0sT0FBTyxzQkFBc0I7SUFrQmpDLElBQ0ksd0JBQXdCLENBQUMsT0FBeUI7UUFDcEQsSUFBSSxDQUFDLHlCQUF5QixHQUFHLE9BQU8sQ0FBQztJQUMzQyxDQUFDO0lBRUQsSUFBSSx3QkFBd0I7UUFDMUIsT0FBTyxJQUFJLENBQUMseUJBQXlCLENBQUM7SUFDeEMsQ0FBQztJQVVELFlBQ1ksUUFBa0IsRUFDbEIsTUFBYyxFQUNkLFFBQXdCLEVBQ3hCLEVBQXFCLEVBQ3JCLEtBQWlCO1FBSmpCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGFBQVEsR0FBUixRQUFRLENBQWdCO1FBQ3hCLE9BQUUsR0FBRixFQUFFLENBQW1CO1FBQ3JCLFVBQUssR0FBTCxLQUFLLENBQVk7UUFoQzdCLG1CQUFjLEdBQVksS0FBSyxDQUFDO1FBQ2hDLHdCQUFtQixHQUFHLFFBQVEsQ0FBQztRQUMvQiw2QkFBd0IsR0FBRyxRQUFRLENBQUM7UUF1QjFCLDRCQUF1QixHQUFZLElBQUksQ0FBQztRQVNoRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsNEJBQTRCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDekYsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxJQUFJLENBQUMsd0JBQXdCLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN6RCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUNoRixJQUFJLElBQUksQ0FBQyxxQkFBcUIsSUFBSSxHQUFHLENBQUMsUUFBUSxFQUFFO2dCQUM5QyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO2dCQUNyRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUMvQyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDN0Q7YUFDRjtTQUNGO1FBQ0QsSUFBSSxDQUFDLHNCQUFzQixHQUFHLENBQUMsSUFBSSxDQUFDLHdCQUF3QixJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUMxSCxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsNEJBQTRCLEVBQUU7WUFDckMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ2pEO0lBQ0gsQ0FBQztJQUVELFFBQVE7UUFDTixPQUFPLElBQUksQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxPQUFPO1FBQ0wsT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQztJQUM3RCxDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNkLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNqQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVE7YUFDMUIsQ0FBQyxDQUFDO1NBQ0o7YUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDdEIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQ2Y7SUFDSCxDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxTQUFTLEVBQUU7WUFDakMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQ3RCO0lBQ0gsQ0FBQztJQUVELElBQUksc0JBQXNCO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLHVCQUF1QixDQUFDO0lBQ3RDLENBQUM7SUFFRCxJQUFJLHNCQUFzQixDQUFDLEdBQVk7UUFDckMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLEdBQUcsQ0FBQztRQUNuQyxJQUFJLEdBQUcsRUFBRTtZQUNQLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDdEQ7YUFBTTtZQUNMLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDbkQ7SUFDSCxDQUFDOztvSEF2R1Usc0JBQXNCO3dHQUF0QixzQkFBc0IsczNCQWtCSyxnQkFBZ0IsNkJDckV4RCxna0RBNkJBO0FENkJFO0lBQUMscUJBQXFCLEVBQUU7OzhEQUNROzRGQVJyQixzQkFBc0I7a0JBZGxDLFNBQVM7K0JBQ0Usa0JBQWtCLFVBR3BCLDBCQUEwQixXQUN6QiwyQkFBMkIsaUJBQ3JCLGlCQUFpQixDQUFDLElBQUksUUFDL0I7d0JBQ0osMEJBQTBCLEVBQUUsTUFBTTt3QkFDbEMsMEJBQTBCLEVBQUUsTUFBTTt3QkFDbEMsaUJBQWlCLEVBQUUseUJBQXlCO3FCQUM3QyxtQkFDZ0IsdUJBQXVCLENBQUMsTUFBTTswTUFVL0MsY0FBYyxNQVdWLHdCQUF3QjtzQkFEM0IsU0FBUzt1QkFBQyxpQkFBaUIsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtnQkFheEQsZ0JBQWdCO3NCQURmLGVBQWU7dUJBQUMsc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRWxlbWVudFJlZixcbiAgSW5qZWN0b3IsXG4gIE9uRGVzdHJveSxcbiAgUXVlcnlMaXN0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDb250YWluZXJSZWYsXG4gIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgQm9vbGVhbklucHV0Q29udmVydGVyIH0gZnJvbSAnLi4vLi4vZGVjb3JhdG9ycy9pbnB1dC1jb252ZXJ0ZXInO1xuaW1wb3J0IHsgT1RyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cmFuc2xhdGUvby10cmFuc2xhdGUuc2VydmljZSc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0lOUFVUU19PX01FTlVfQ0FSRCA9IFtcbiAgJ3RpdGxlJyxcbiAgJ2ltYWdlJyxcbiAgJ2ljb24nLFxuICAndG9vbHRpcCcsXG4gICdidXR0b25UZXh0IDogYnV0dG9uLXRleHQnLFxuICAnZGlzYWJsZWRCdXR0b24gOiBkaXNhYmxlZC1idXR0b24nLFxuICAnbWFpbkNvbnRhaW5lckxheW91dCA6IG1haW4tY29udGFpbmVyLWxheW91dCcsXG4gICdzZWNvbmRhcnlDb250YWluZXJMYXlvdXQgOiBzZWNvbmRhcnktY29udGFpbmVyLWxheW91dCcsXG4gICdyb3V0ZScsXG4gICdkZXRhaWxDb21wb25lbnQgOiBkZXRhaWwtY29tcG9uZW50JyxcbiAgJ2RldGFpbENvbXBvbmVudElucHV0cyA6IGRldGFpbC1jb21wb25lbnQtaW5wdXRzJyxcbiAgJ2FjdGlvbidcbl07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX09VVFBVVFNfT19NRU5VX0NBUkQgPSBbXTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnby1jYXJkLW1lbnUtaXRlbScsXG4gIHRlbXBsYXRlVXJsOiAnLi9vLWNhcmQtbWVudS1pdGVtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vby1jYXJkLW1lbnUtaXRlbS5jb21wb25lbnQuc2NzcyddLFxuICBpbnB1dHM6IERFRkFVTFRfSU5QVVRTX09fTUVOVV9DQVJELFxuICBvdXRwdXRzOiBERUZBVUxUX09VVFBVVFNfT19NRU5VX0NBUkQsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGhvc3Q6IHtcbiAgICAnW2NsYXNzLm8tY2FyZC1tZW51LWl0ZW1dJzogJ3RydWUnLFxuICAgICdbY2xhc3MubWF0LWVsZXZhdGlvbi16MV0nOiAndHJ1ZScsXG4gICAgJ1tjbGFzcy5jb21wYWN0XSc6ICchc2hvd1NlY29uZGFyeUNvbnRhaW5lcidcbiAgfSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgT0NhcmRNZW51SXRlbUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG5cbiAgdGl0bGU6IHN0cmluZztcbiAgaW1hZ2U6IHN0cmluZztcbiAgaWNvbjogc3RyaW5nO1xuICB0b29sdGlwOiBzdHJpbmc7XG4gIGJ1dHRvblRleHQ6IHN0cmluZztcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIGRpc2FibGVkQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XG4gIG1haW5Db250YWluZXJMYXlvdXQgPSAnY29sdW1uJztcbiAgc2Vjb25kYXJ5Q29udGFpbmVyTGF5b3V0ID0gJ2NvbHVtbic7XG4gIHJvdXRlOiBzdHJpbmc7XG4gIGFjdGlvbjogKCkgPT4gdm9pZDtcbiAgZGV0YWlsQ29tcG9uZW50OiBhbnk7XG4gIGRldGFpbENvbXBvbmVudElucHV0czogb2JqZWN0O1xuXG4gIHByb3RlY3RlZCBfZGV0YWlsQ29tcG9uZW50Q29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmO1xuXG4gIEBWaWV3Q2hpbGQoJ21lbnVDYXJkQ29udGVudCcsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxuICBzZXQgZGV0YWlsQ29tcG9uZW50Q29udGFpbmVyKGNvbnRlbnQ6IFZpZXdDb250YWluZXJSZWYpIHtcbiAgICB0aGlzLl9kZXRhaWxDb21wb25lbnRDb250YWluZXIgPSBjb250ZW50O1xuICB9XG5cbiAgZ2V0IGRldGFpbENvbXBvbmVudENvbnRhaW5lcigpOiBWaWV3Q29udGFpbmVyUmVmIHtcbiAgICByZXR1cm4gdGhpcy5fZGV0YWlsQ29tcG9uZW50Q29udGFpbmVyO1xuICB9XG5cbiAgcHJvdGVjdGVkIHRyYW5zbGF0ZVNlcnZpY2U6IE9UcmFuc2xhdGVTZXJ2aWNlO1xuICBwcm90ZWN0ZWQgdHJhbnNsYXRlU2VydmljZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oJy5zZWNvbmRhcnktY29udGFpbmVyJylcbiAgc2Vjb25kYXJ5Q29udGVudDogUXVlcnlMaXN0PGFueT47XG5cbiAgcHJvdGVjdGVkIF9zaG93U2Vjb25kYXJ5Q29udGFpbmVyOiBib29sZWFuID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByb3RlY3RlZCByb3V0ZXI6IFJvdXRlcixcbiAgICBwcm90ZWN0ZWQgYWN0Um91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByb3RlY3RlZCBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJvdGVjdGVkIGVsUmVmOiBFbGVtZW50UmVmXG4gICkge1xuICAgIHRoaXMudHJhbnNsYXRlU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KE9UcmFuc2xhdGVTZXJ2aWNlKTtcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2VTdWJzY3JpcHRpb24gPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uub25MYW5ndWFnZUNoYW5nZWQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0pO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGlmICh0aGlzLmRldGFpbENvbXBvbmVudENvbnRhaW5lciAmJiB0aGlzLmRldGFpbENvbXBvbmVudCkge1xuICAgICAgY29uc3QgcmVmID0gdGhpcy5kZXRhaWxDb21wb25lbnRDb250YWluZXIuY3JlYXRlQ29tcG9uZW50KHRoaXMuZGV0YWlsQ29tcG9uZW50KTtcbiAgICAgIGlmICh0aGlzLmRldGFpbENvbXBvbmVudElucHV0cyAmJiByZWYuaW5zdGFuY2UpIHtcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuZGV0YWlsQ29tcG9uZW50SW5wdXRzKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGtleXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICByZWYuaW5zdGFuY2Vba2V5c1tpXV0gPSB0aGlzLmRldGFpbENvbXBvbmVudElucHV0c1trZXlzW2ldXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnNob3dTZWNvbmRhcnlDb250YWluZXIgPSAodGhpcy5kZXRhaWxDb21wb25lbnRDb250YWluZXIgJiYgdGhpcy5kZXRhaWxDb21wb25lbnQpIHx8IHRoaXMuc2Vjb25kYXJ5Q29udGVudC5sZW5ndGggPiAwO1xuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMudHJhbnNsYXRlU2VydmljZVN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgdXNlSW1hZ2UoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaW1hZ2UgIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHVzZUljb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaWNvbiAhPT0gdW5kZWZpbmVkICYmIHRoaXMuaW1hZ2UgPT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIG9uQnV0dG9uQ2xpY2soKSB7XG4gICAgaWYgKHRoaXMucm91dGUpIHtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLnJvdXRlXSwge1xuICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLmFjdFJvdXRlXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuYWN0aW9uKSB7XG4gICAgICB0aGlzLmFjdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIG9uQ2xpY2soKSB7XG4gICAgaWYgKHRoaXMuYnV0dG9uVGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLm9uQnV0dG9uQ2xpY2soKTtcbiAgICB9XG4gIH1cblxuICBnZXQgc2hvd1NlY29uZGFyeUNvbnRhaW5lcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc2hvd1NlY29uZGFyeUNvbnRhaW5lcjtcbiAgfVxuXG4gIHNldCBzaG93U2Vjb25kYXJ5Q29udGFpbmVyKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuX3Nob3dTZWNvbmRhcnlDb250YWluZXIgPSB2YWw7XG4gICAgaWYgKHZhbCkge1xuICAgICAgdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2NvbXBhY3QnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2NvbXBhY3QnKTtcbiAgICB9XG4gIH1cblxufVxuIiwiPGRpdiBjbGFzcz1cIm8tY2FyZC1tZW51LWl0ZW0tY29udGVudFwiIChjbGljayk9XCJvbkNsaWNrKClcIiBmeExheW91dD1cImNvbHVtblwiIGZ4RmlsbCBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlbiBjZW50ZXJcIj5cblxuICA8ZGl2ICpuZ0lmPVwic2hvd1NlY29uZGFyeUNvbnRhaW5lclwiIGNsYXNzPVwiby1jYXJkLW1lbnUtaXRlbS1zZWNvbmRhcnlcIiBmeEZsZXg9XCI1MFwiIFtmeExheW91dF09XCJzZWNvbmRhcnlDb250YWluZXJMYXlvdXRcIlxuICAgIGZ4TGF5b3V0QWxpZ249XCJzcGFjZS1hcm91bmQgY2VudGVyXCI+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiLnNlY29uZGFyeS1jb250YWluZXJcIj48L25nLWNvbnRlbnQ+XG4gICAgPG5nLWNvbnRhaW5lciAjbWVudUNhcmRDb250ZW50ICpuZ0lmPVwiZGV0YWlsQ29tcG9uZW50XCI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJvLWNhcmQtbWVudS1pdGVtLW1haW5cIiBmeEZsZXg9XCJ7eyBzaG93U2Vjb25kYXJ5Q29udGFpbmVyID8gJzQ1JyA6ICc4MCcgfX1cIiBbZnhMYXlvdXRdPVwibWFpbkNvbnRhaW5lckxheW91dFwiXG4gICAgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW4gY2VudGVyXCI+XG4gICAgPGRpdiAqbmdJZj1cInVzZUltYWdlKCkgfHwgdXNlSWNvbigpXCIgZnhGbGV4PVwiODBcIiBmeExheW91dD1cImNvbHVtblwiIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCIgY2xhc3M9XCJvLWNhcmQtbWVudS1pdGVtLWltYWdlLWNvbnRhaW5lclwiPlxuICAgICAgPGltZyAqbmdJZj1cInVzZUltYWdlKClcIiBbc3JjXT1cImltYWdlXCIgYWx0PVwiY2FyZCBpbWFnZVwiLz5cbiAgICAgIDxtYXQtaWNvbiAqbmdJZj1cInVzZUljb24oKVwiIGNsYXNzPVwiby1jYXJkLW1lbnUtaXRlbS1pY29uXCIgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIj57eyBpY29uIH19PC9tYXQtaWNvbj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJvLWNhcmQtbWVudS1pdGVtLXRpdGxlXCIgZnhGbGV4PVwiMjBcIiBmeExheW91dD1cImNvbHVtblwiIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCIgKm5nSWY9XCJ0aXRsZSAhPT0gdW5kZWZpbmVkXCI+e3tcbiAgICAgIHRpdGxlIHwgb1RyYW5zbGF0ZSB9fTwvZGl2PlxuXG4gICAgPG1hdC1pY29uIGNsYXNzPVwiby1jYXJkLW1lbnUtaXRlbS1pbmZvXCIgbWF0VG9vbHRpcD1cInt7IHRvb2x0aXAgfCBvVHJhbnNsYXRlIH19XCIgKm5nSWY9XCJ0b29sdGlwXCIgc3ZnSWNvbj1cIm9udGltaXplOmluZm9fb3V0bGluZVwiPjwvbWF0LWljb24+XG5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCIubWFpbi1jb250YWluZXJcIj48L25nLWNvbnRlbnQ+XG5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAqbmdJZj1cImJ1dHRvblRleHQgIT09IHVuZGVmaW5lZFwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZEJ1dHRvblwiIChjbGljayk9XCJvbkJ1dHRvbkNsaWNrKClcIiBtYXQtYnV0dG9uPlxuICAgICAge3sgYnV0dG9uVGV4dCB8IG9UcmFuc2xhdGUgfX08L2J1dHRvbj5cbiAgPC9kaXY+XG5cblxuPC9kaXY+XG4iXX0=