UNPKG

@rangertechnologies/ngnxt

Version:

This library was used for creating dymanic UI based on the input JSON/data

83 lines 16.3 kB
import { CommonModule } from '@angular/common'; import { Component, Input } from '@angular/core'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; export class NxtImageCard { imageSrc = ''; // image iconSrc = ''; // icon hoverIconSrc = ''; // hover icon iconBgColor = '#e8eaf6'; // icon background color iconHoverBgColor = '#c5cae9'; // icon hover background color iconPosition = 'middle'; // icon position title = ''; // title content = ''; // content cardData = []; // card data(key: value) cardHeight = 'auto'; // card height cardWidth = '300px'; // card width cardColor = 'white'; // card color padding = '20px'; // padding cardImageHeight = '40%'; // card image height cardImageWidth = '100%'; // card image width cardImageColor = '10px'; // card image color imagePadding = '10px'; // image padding imageBorderRadius = '25px'; // image border radius isHovered = false; constructor() { } ngOnInit() { } getIconPositionClass() { switch (this.iconPosition) { case 'start': return 'justify-content-start'; case 'end': return 'justify-content-end'; default: return 'justify-content-center'; } } onMouseEnter() { this.isHovered = true; } onMouseLeave() { this.isHovered = false; } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NxtImageCard, deps: [], target: i0.ɵɵFactoryTarget.Component }); static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: NxtImageCard, isStandalone: true, selector: "nxt-image-card", inputs: { imageSrc: "imageSrc", iconSrc: "iconSrc", hoverIconSrc: "hoverIconSrc", iconBgColor: "iconBgColor", iconHoverBgColor: "iconHoverBgColor", iconPosition: "iconPosition", title: "title", content: "content", cardData: "cardData", cardHeight: "cardHeight", cardWidth: "cardWidth", cardColor: "cardColor", padding: "padding", cardImageHeight: "cardImageHeight", cardImageWidth: "cardImageWidth", cardImageColor: "cardImageColor", imagePadding: "imagePadding", imageBorderRadius: "imageBorderRadius" }, ngImport: i0, template: "<div class=\"custom-card\" [style.height]=\"cardHeight\" [style.width]=\"cardWidth\" [style.background-color]=\"cardColor\"\n [style.padding]=\"padding\">\n\n <!-- Background Image -->\n <div class=\"card-image\" *ngIf=\"imageSrc\" [style.height]=\"cardImageHeight\" [style.width]=\"cardImageWidth\"\n [style.background-color]=\"cardImageColor\">\n <img [src]=\"imageSrc\" alt=\"Card background\" [style.padding]=\"imagePadding\"\n [style.border-radius]=\"imageBorderRadius\">\n </div>\n <!-- Icon Container -->\n <div class=\"icon-container d-flex\" [ngClass]=\"getIconPositionClass()\">\n <div class=\"icon-wrapper\" [style.border]=\"'4px solid ' + cardColor\"\n [style.background-color]=\"isHovered ? iconHoverBgColor : iconBgColor\" (mouseenter)=\"onMouseEnter()\"\n (mouseleave)=\"onMouseLeave()\">\n <img [src]=\"isHovered && hoverIconSrc ? hoverIconSrc : iconSrc\" alt=\"Icon\">\n </div>\n </div>\n <!-- Content -->\n <div class=\"card-content\">\n <h2 class=\"card-title\" *ngIf=\"title\">{{ title }}</h2>\n <p class=\"card-description\" *ngIf=\"content\">{{ content }}</p>\n </div>\n\n <!-- Data Points -->\n <div class=\"card-data\" *ngIf=\"cardData && cardData.length > 0\">\n <div class=\"data-row\">\n <div class=\"data-item\" *ngFor=\"let item of cardData\">\n <div class=\"data-value\">{{ item.value }}</div>\n <div class=\"data-key\">{{ item.key }}</div>\n </div>\n </div>\n </div>\n</div>", styles: [".custom-card{position:relative;border-radius:12px;box-shadow:0 4px 12px #0000001a;overflow:hidden;display:flex;flex-direction:column}.card-image{position:absolute;top:0;left:0;overflow:hidden}.card-image img{width:100%;height:100%;object-fit:cover}.icon-container{position:relative;margin-top:100px;z-index:1}.icon-wrapper{width:64px;height:64px;border-radius:50%;display:flex;align-items:center;justify-content:center;transition:background-color .3s ease}.icon-wrapper img{width:32px;height:32px;transition:all .3s ease}.card-content{text-align:center;padding:10px 15px;margin-top:auto}.card-content .card-title{font-size:20px;font-weight:600;margin-bottom:8px}.card-content .card-description{font-size:14px;color:#666;margin-bottom:20px}.card-data{margin-top:auto}.card-data .data-row{display:flex;justify-content:space-between;text-align:center}.card-data .data-item{flex:1;padding:10px}.card-data .data-item .data-value{font-size:22px;font-weight:700}.card-data .data-item .data-key{font-size:14px;color:#666}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NxtImageCard, decorators: [{ type: Component, args: [{ selector: 'nxt-image-card', standalone: true, imports: [CommonModule], template: "<div class=\"custom-card\" [style.height]=\"cardHeight\" [style.width]=\"cardWidth\" [style.background-color]=\"cardColor\"\n [style.padding]=\"padding\">\n\n <!-- Background Image -->\n <div class=\"card-image\" *ngIf=\"imageSrc\" [style.height]=\"cardImageHeight\" [style.width]=\"cardImageWidth\"\n [style.background-color]=\"cardImageColor\">\n <img [src]=\"imageSrc\" alt=\"Card background\" [style.padding]=\"imagePadding\"\n [style.border-radius]=\"imageBorderRadius\">\n </div>\n <!-- Icon Container -->\n <div class=\"icon-container d-flex\" [ngClass]=\"getIconPositionClass()\">\n <div class=\"icon-wrapper\" [style.border]=\"'4px solid ' + cardColor\"\n [style.background-color]=\"isHovered ? iconHoverBgColor : iconBgColor\" (mouseenter)=\"onMouseEnter()\"\n (mouseleave)=\"onMouseLeave()\">\n <img [src]=\"isHovered && hoverIconSrc ? hoverIconSrc : iconSrc\" alt=\"Icon\">\n </div>\n </div>\n <!-- Content -->\n <div class=\"card-content\">\n <h2 class=\"card-title\" *ngIf=\"title\">{{ title }}</h2>\n <p class=\"card-description\" *ngIf=\"content\">{{ content }}</p>\n </div>\n\n <!-- Data Points -->\n <div class=\"card-data\" *ngIf=\"cardData && cardData.length > 0\">\n <div class=\"data-row\">\n <div class=\"data-item\" *ngFor=\"let item of cardData\">\n <div class=\"data-value\">{{ item.value }}</div>\n <div class=\"data-key\">{{ item.key }}</div>\n </div>\n </div>\n </div>\n</div>", styles: [".custom-card{position:relative;border-radius:12px;box-shadow:0 4px 12px #0000001a;overflow:hidden;display:flex;flex-direction:column}.card-image{position:absolute;top:0;left:0;overflow:hidden}.card-image img{width:100%;height:100%;object-fit:cover}.icon-container{position:relative;margin-top:100px;z-index:1}.icon-wrapper{width:64px;height:64px;border-radius:50%;display:flex;align-items:center;justify-content:center;transition:background-color .3s ease}.icon-wrapper img{width:32px;height:32px;transition:all .3s ease}.card-content{text-align:center;padding:10px 15px;margin-top:auto}.card-content .card-title{font-size:20px;font-weight:600;margin-bottom:8px}.card-content .card-description{font-size:14px;color:#666;margin-bottom:20px}.card-data{margin-top:auto}.card-data .data-row{display:flex;justify-content:space-between;text-align:center}.card-data .data-item{flex:1;padding:10px}.card-data .data-item .data-value{font-size:22px;font-weight:700}.card-data .data-item .data-key{font-size:14px;color:#666}\n"] }] }], ctorParameters: () => [], propDecorators: { imageSrc: [{ type: Input }], iconSrc: [{ type: Input }], hoverIconSrc: [{ type: Input }], iconBgColor: [{ type: Input }], iconHoverBgColor: [{ type: Input }], iconPosition: [{ type: Input }], title: [{ type: Input }], content: [{ type: Input }], cardData: [{ type: Input }], cardHeight: [{ type: Input }], cardWidth: [{ type: Input }], cardColor: [{ type: Input }], padding: [{ type: Input }], cardImageHeight: [{ type: Input }], cardImageWidth: [{ type: Input }], cardImageColor: [{ type: Input }], imagePadding: [{ type: Input }], imageBorderRadius: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvY29tcG9uZW50cy9jYXJkcy9pbWFnZS1jYXJkL2ltYWdlLWNhcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL2NvbXBvbmVudHMvY2FyZHMvaW1hZ2UtY2FyZC9pbWFnZS1jYXJkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBYWpELE1BQU0sT0FBTyxZQUFZO0lBQ2QsUUFBUSxHQUFXLEVBQUUsQ0FBQyxDQUFDLFFBQVE7SUFDL0IsT0FBTyxHQUFXLEVBQUUsQ0FBQyxDQUFDLE9BQU87SUFDN0IsWUFBWSxHQUFXLEVBQUUsQ0FBQyxDQUFDLGFBQWE7SUFDeEMsV0FBVyxHQUFXLFNBQVMsQ0FBQyxDQUFDLHdCQUF3QjtJQUN6RCxnQkFBZ0IsR0FBVyxTQUFTLENBQUMsQ0FBQyw4QkFBOEI7SUFDcEUsWUFBWSxHQUErQixRQUFRLENBQUMsQ0FBQyxnQkFBZ0I7SUFDckUsS0FBSyxHQUFXLEVBQUUsQ0FBQyxDQUFDLFFBQVE7SUFDNUIsT0FBTyxHQUFXLEVBQUUsQ0FBQyxDQUFDLFVBQVU7SUFDaEMsUUFBUSxHQUFlLEVBQUUsQ0FBQyxDQUFDLHdCQUF3QjtJQUNuRCxVQUFVLEdBQVcsTUFBTSxDQUFDLENBQUMsY0FBYztJQUMzQyxTQUFTLEdBQVcsT0FBTyxDQUFDLENBQUMsYUFBYTtJQUMxQyxTQUFTLEdBQVcsT0FBTyxDQUFDLENBQUMsYUFBYTtJQUMxQyxPQUFPLEdBQVcsTUFBTSxDQUFDLENBQUMsVUFBVTtJQUNwQyxlQUFlLEdBQVcsS0FBSyxDQUFDLENBQUMsb0JBQW9CO0lBQ3JELGNBQWMsR0FBVyxNQUFNLENBQUMsQ0FBQyxtQkFBbUI7SUFDcEQsY0FBYyxHQUFXLE1BQU0sQ0FBQyxDQUFDLG1CQUFtQjtJQUNwRCxZQUFZLEdBQVcsTUFBTSxDQUFDLENBQUMsZ0JBQWdCO0lBQy9DLGlCQUFpQixHQUFXLE1BQU0sQ0FBQyxDQUFDLHNCQUFzQjtJQUVuRSxTQUFTLEdBQVksS0FBSyxDQUFDO0lBRTNCLGdCQUFnQixDQUFDO0lBRWpCLFFBQVEsS0FBVyxDQUFDO0lBRXBCLG9CQUFvQjtRQUNsQixRQUFRLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUMxQixLQUFLLE9BQU8sQ0FBQyxDQUFDLE9BQU8sdUJBQXVCLENBQUM7WUFDN0MsS0FBSyxLQUFLLENBQUMsQ0FBQyxPQUFPLHFCQUFxQixDQUFDO1lBQ3pDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sd0JBQXdCLENBQUM7UUFDM0MsQ0FBQztJQUNILENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7SUFDeEIsQ0FBQztJQUVELFlBQVk7UUFDVixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUN6QixDQUFDO3dHQXhDVSxZQUFZOzRGQUFaLFlBQVksb2tCQ2R6QixnOUNBZ0NNLGdqQ0R0Qk0sWUFBWTs7NEZBSVgsWUFBWTtrQkFQeEIsU0FBUzsrQkFDRSxnQkFBZ0IsY0FDZCxJQUFJLFdBQ1AsQ0FBQyxZQUFZLENBQUM7d0RBS2QsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW50ZXJmYWNlIENhcmREYXRhIHtcbiAga2V5OiBzdHJpbmc7XG4gIHZhbHVlOiBzdHJpbmcgfCBudW1iZXI7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ254dC1pbWFnZS1jYXJkJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9pbWFnZS1jYXJkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2ltYWdlLWNhcmQuY29tcG9uZW50LmNzcydcbn0pXG5leHBvcnQgY2xhc3MgTnh0SW1hZ2VDYXJkIHtcbiAgQElucHV0KCkgaW1hZ2VTcmM6IHN0cmluZyA9ICcnOyAvLyBpbWFnZVxuICBASW5wdXQoKSBpY29uU3JjOiBzdHJpbmcgPSAnJzsgLy8gaWNvblxuICBASW5wdXQoKSBob3Zlckljb25TcmM6IHN0cmluZyA9ICcnOyAvLyBob3ZlciBpY29uXG4gIEBJbnB1dCgpIGljb25CZ0NvbG9yOiBzdHJpbmcgPSAnI2U4ZWFmNic7IC8vIGljb24gYmFja2dyb3VuZCBjb2xvclxuICBASW5wdXQoKSBpY29uSG92ZXJCZ0NvbG9yOiBzdHJpbmcgPSAnI2M1Y2FlOSc7IC8vIGljb24gaG92ZXIgYmFja2dyb3VuZCBjb2xvclxuICBASW5wdXQoKSBpY29uUG9zaXRpb246ICdzdGFydCcgfCAnbWlkZGxlJyB8ICdlbmQnID0gJ21pZGRsZSc7IC8vIGljb24gcG9zaXRpb25cbiAgQElucHV0KCkgdGl0bGU6IHN0cmluZyA9ICcnOyAvLyB0aXRsZVxuICBASW5wdXQoKSBjb250ZW50OiBzdHJpbmcgPSAnJzsgLy8gY29udGVudFxuICBASW5wdXQoKSBjYXJkRGF0YTogQ2FyZERhdGFbXSA9IFtdOyAvLyBjYXJkIGRhdGEoa2V5OiB2YWx1ZSlcbiAgQElucHV0KCkgY2FyZEhlaWdodDogc3RyaW5nID0gJ2F1dG8nOyAvLyBjYXJkIGhlaWdodFxuICBASW5wdXQoKSBjYXJkV2lkdGg6IHN0cmluZyA9ICczMDBweCc7IC8vIGNhcmQgd2lkdGhcbiAgQElucHV0KCkgY2FyZENvbG9yOiBzdHJpbmcgPSAnd2hpdGUnOyAvLyBjYXJkIGNvbG9yXG4gIEBJbnB1dCgpIHBhZGRpbmc6IHN0cmluZyA9ICcyMHB4JzsgLy8gcGFkZGluZ1xuICBASW5wdXQoKSBjYXJkSW1hZ2VIZWlnaHQ6IHN0cmluZyA9ICc0MCUnOyAvLyBjYXJkIGltYWdlIGhlaWdodFxuICBASW5wdXQoKSBjYXJkSW1hZ2VXaWR0aDogc3RyaW5nID0gJzEwMCUnOyAvLyBjYXJkIGltYWdlIHdpZHRoXG4gIEBJbnB1dCgpIGNhcmRJbWFnZUNvbG9yOiBzdHJpbmcgPSAnMTBweCc7IC8vIGNhcmQgaW1hZ2UgY29sb3JcbiAgQElucHV0KCkgaW1hZ2VQYWRkaW5nOiBzdHJpbmcgPSAnMTBweCc7IC8vIGltYWdlIHBhZGRpbmdcbiAgQElucHV0KCkgaW1hZ2VCb3JkZXJSYWRpdXM6IHN0cmluZyA9ICcyNXB4JzsgLy8gaW1hZ2UgYm9yZGVyIHJhZGl1c1xuXG4gIGlzSG92ZXJlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKCkgeyB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7IH1cblxuICBnZXRJY29uUG9zaXRpb25DbGFzcygpOiBzdHJpbmcge1xuICAgIHN3aXRjaCAodGhpcy5pY29uUG9zaXRpb24pIHtcbiAgICAgIGNhc2UgJ3N0YXJ0JzogcmV0dXJuICdqdXN0aWZ5LWNvbnRlbnQtc3RhcnQnO1xuICAgICAgY2FzZSAnZW5kJzogcmV0dXJuICdqdXN0aWZ5LWNvbnRlbnQtZW5kJztcbiAgICAgIGRlZmF1bHQ6IHJldHVybiAnanVzdGlmeS1jb250ZW50LWNlbnRlcic7XG4gICAgfVxuICB9XG5cbiAgb25Nb3VzZUVudGVyKCk6IHZvaWQge1xuICAgIHRoaXMuaXNIb3ZlcmVkID0gdHJ1ZTtcbiAgfVxuXG4gIG9uTW91c2VMZWF2ZSgpOiB2b2lkIHtcbiAgICB0aGlzLmlzSG92ZXJlZCA9IGZhbHNlO1xuICB9XG59IiwiPGRpdiBjbGFzcz1cImN1c3RvbS1jYXJkXCIgW3N0eWxlLmhlaWdodF09XCJjYXJkSGVpZ2h0XCIgW3N0eWxlLndpZHRoXT1cImNhcmRXaWR0aFwiIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImNhcmRDb2xvclwiXG4gIFtzdHlsZS5wYWRkaW5nXT1cInBhZGRpbmdcIj5cblxuICA8IS0tIEJhY2tncm91bmQgSW1hZ2UgLS0+XG4gIDxkaXYgY2xhc3M9XCJjYXJkLWltYWdlXCIgKm5nSWY9XCJpbWFnZVNyY1wiIFtzdHlsZS5oZWlnaHRdPVwiY2FyZEltYWdlSGVpZ2h0XCIgW3N0eWxlLndpZHRoXT1cImNhcmRJbWFnZVdpZHRoXCJcbiAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJjYXJkSW1hZ2VDb2xvclwiPlxuICAgIDxpbWcgW3NyY109XCJpbWFnZVNyY1wiIGFsdD1cIkNhcmQgYmFja2dyb3VuZFwiIFtzdHlsZS5wYWRkaW5nXT1cImltYWdlUGFkZGluZ1wiXG4gICAgICBbc3R5bGUuYm9yZGVyLXJhZGl1c109XCJpbWFnZUJvcmRlclJhZGl1c1wiPlxuICA8L2Rpdj5cbiAgPCEtLSBJY29uIENvbnRhaW5lciAtLT5cbiAgPGRpdiBjbGFzcz1cImljb24tY29udGFpbmVyIGQtZmxleFwiIFtuZ0NsYXNzXT1cImdldEljb25Qb3NpdGlvbkNsYXNzKClcIj5cbiAgICA8ZGl2IGNsYXNzPVwiaWNvbi13cmFwcGVyXCIgW3N0eWxlLmJvcmRlcl09XCInNHB4IHNvbGlkICcgKyBjYXJkQ29sb3JcIlxuICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiaXNIb3ZlcmVkID8gaWNvbkhvdmVyQmdDb2xvciA6IGljb25CZ0NvbG9yXCIgKG1vdXNlZW50ZXIpPVwib25Nb3VzZUVudGVyKClcIlxuICAgICAgKG1vdXNlbGVhdmUpPVwib25Nb3VzZUxlYXZlKClcIj5cbiAgICAgIDxpbWcgW3NyY109XCJpc0hvdmVyZWQgJiYgaG92ZXJJY29uU3JjID8gaG92ZXJJY29uU3JjIDogaWNvblNyY1wiIGFsdD1cIkljb25cIj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDwhLS0gQ29udGVudCAtLT5cbiAgPGRpdiBjbGFzcz1cImNhcmQtY29udGVudFwiPlxuICAgIDxoMiBjbGFzcz1cImNhcmQtdGl0bGVcIiAqbmdJZj1cInRpdGxlXCI+e3sgdGl0bGUgfX08L2gyPlxuICAgIDxwIGNsYXNzPVwiY2FyZC1kZXNjcmlwdGlvblwiICpuZ0lmPVwiY29udGVudFwiPnt7IGNvbnRlbnQgfX08L3A+XG4gIDwvZGl2PlxuXG4gIDwhLS0gRGF0YSBQb2ludHMgLS0+XG4gIDxkaXYgY2xhc3M9XCJjYXJkLWRhdGFcIiAqbmdJZj1cImNhcmREYXRhICYmIGNhcmREYXRhLmxlbmd0aCA+IDBcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZGF0YS1yb3dcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkYXRhLWl0ZW1cIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjYXJkRGF0YVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0YS12YWx1ZVwiPnt7IGl0ZW0udmFsdWUgfX08L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRhdGEta2V5XCI+e3sgaXRlbS5rZXkgfX08L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PiJdfQ==