@craftsjs/alert
Version:
Material alert library for angular
78 lines • 18.1 kB
JavaScript
import { Component, ChangeDetectionStrategy, Inject, ViewEncapsulation, Injector, InjectionToken, ViewChildren, TemplateRef } from '@angular/core';
import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
import { alertComponents } from './components/components';
import { DynamicDirective } from '@craftsjs/core';
import { TranslateModule } from '@ngx-translate/core';
import { AlertOkButtonComponent } from './components/buttons/alert-ok-button/alert-ok-button.component';
import { AlertCancelButtonComponent } from './components/buttons/alert-cancel-button/alert-cancel-button.component';
import * as i0 from "@angular/core";
import * as i1 from "@angular/material/dialog";
import * as i2 from "@ngx-translate/core";
export const CRAFTSJS_ALERT_DATA = new InjectionToken('CraftsjsAlertData');
export class DialogAlertComponent {
constructor(dialogRef, data) {
this.dialogRef = dialogRef;
this.data = data;
}
ngOnInit() {
}
ngAfterViewInit() {
this.loadComponents();
}
loadComponents() {
const itemComponent = alertComponents.find(x => x.type === this.data.type);
const component = itemComponent && itemComponent.component;
this.resolveComponent(component, this.appDynamic.find(x => x.name === 'alert-icon').viewContainerRef);
this.resolveComponent(this.data.customBody, this.appDynamic.find(x => x.name === 'alert-body').viewContainerRef);
this.resolveComponent(this.data.customButtonComponent, this.appDynamic.find(x => x.name === 'alert-buttons').viewContainerRef);
}
resolveComponent(component, viewContainerRef) {
if (!component) {
return;
}
viewContainerRef.clear();
if (component instanceof TemplateRef) {
viewContainerRef.createEmbeddedView(component, { $implicit: this.data, dialogRef: this.dialogRef });
}
else {
const injector = this.createInjector(viewContainerRef.injector);
viewContainerRef.createComponent(component, {
injector
});
}
}
createInjector(injector) {
return Injector.create({
providers: [{
provide: CRAFTSJS_ALERT_DATA,
useValue: this.data
},
{
provide: MatDialogRef,
useValue: this.dialogRef
}],
parent: injector
});
}
buttonClick(result) {
this.dialogRef.close({ data: this.data, result });
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DialogAlertComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: DialogAlertComponent, isStandalone: true, selector: "dialog-alert", viewQueries: [{ propertyName: "appDynamic", predicate: DynamicDirective, descendants: true }], ngImport: i0, template: "<ng-template craftsjsDynamic name=\"alert-icon\"></ng-template>\r\n@if (data?.title) {\r\n <div class=\"alert-title\">\r\n <span>\r\n {{data.title | translate}}\r\n </span>\r\n </div>\r\n}\r\n@if (data?.text) {\r\n <div class=\"alert-text\">\r\n <span>\r\n {{data.text | translate}}\r\n </span>\r\n </div>\r\n}\r\n<ng-template craftsjsDynamic name=\"alert-body\"></ng-template>\r\n@if (!data?.hiddenButtons) {\r\n <div class=\"alert-footer\">\r\n @if (!data?.customButtonComponent) {\r\n <alert-ok-button (click)=\"buttonClick('ok')\">\r\n </alert-ok-button>\r\n }\r\n @if (!data?.customButtonComponent && data?.showCancelButton) {\r\n <alert-cancel-button\r\n (click)=\"buttonClick('cancel')\">\r\n </alert-cancel-button>\r\n }\r\n </div>\r\n}\r\n<ng-template craftsjsDynamic name=\"alert-buttons\"></ng-template>", styles: [".alert-icon{width:80px;height:80px;border-width:4px;border-style:solid;border-radius:50%;padding:0;position:relative;box-sizing:content-box;margin:20px auto}.alert-icon-custom{width:auto;height:auto;max-width:100%;border:none;border-radius:0}.alert-icon img{max-width:100%;max-height:100%}.alert-title{color:#000000a6;font-weight:600;text-transform:none;position:relative;display:block;font-size:27px;line-height:normal;text-align:center;margin-bottom:0}.alert-title:first-child{margin-top:26px}.alert-title:not(:first-child){padding-bottom:0}.alert-title:not(:last-child){margin-bottom:13px}.alert-text{font-size:16px;position:relative;float:none;line-height:normal;vertical-align:top;text-align:center;display:inline-block;margin:0;padding:0 10px;font-weight:400;color:#000000a3;overflow-wrap:break-word;box-sizing:border-box;width:100%}.alert-text:first-child{margin-top:45px}.alert-text:last-child{margin-bottom:45px}.alert-footer{text-align:right;margin-top:13px;padding:13px 16px;border-radius:inherit;border-top-left-radius:0;border-top-right-radius:0}.alert-footer-button-container{margin:5px;display:inline-block;position:relative}.alert-footer>*{display:inline-block;margin-right:.5em}.alert-footer>:last-child{margin-right:inherit}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "directive", type: DynamicDirective, selector: "[craftsjsDynamic]", inputs: ["name"] }, { kind: "component", type: AlertOkButtonComponent, selector: "alert-ok-button", outputs: ["click"] }, { kind: "component", type: AlertCancelButtonComponent, selector: "alert-cancel-button", outputs: ["click"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DialogAlertComponent, decorators: [{
type: Component,
args: [{ selector: 'dialog-alert', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, standalone: true, imports: [
TranslateModule,
DynamicDirective,
AlertOkButtonComponent,
AlertCancelButtonComponent
], template: "<ng-template craftsjsDynamic name=\"alert-icon\"></ng-template>\r\n@if (data?.title) {\r\n <div class=\"alert-title\">\r\n <span>\r\n {{data.title | translate}}\r\n </span>\r\n </div>\r\n}\r\n@if (data?.text) {\r\n <div class=\"alert-text\">\r\n <span>\r\n {{data.text | translate}}\r\n </span>\r\n </div>\r\n}\r\n<ng-template craftsjsDynamic name=\"alert-body\"></ng-template>\r\n@if (!data?.hiddenButtons) {\r\n <div class=\"alert-footer\">\r\n @if (!data?.customButtonComponent) {\r\n <alert-ok-button (click)=\"buttonClick('ok')\">\r\n </alert-ok-button>\r\n }\r\n @if (!data?.customButtonComponent && data?.showCancelButton) {\r\n <alert-cancel-button\r\n (click)=\"buttonClick('cancel')\">\r\n </alert-cancel-button>\r\n }\r\n </div>\r\n}\r\n<ng-template craftsjsDynamic name=\"alert-buttons\"></ng-template>", styles: [".alert-icon{width:80px;height:80px;border-width:4px;border-style:solid;border-radius:50%;padding:0;position:relative;box-sizing:content-box;margin:20px auto}.alert-icon-custom{width:auto;height:auto;max-width:100%;border:none;border-radius:0}.alert-icon img{max-width:100%;max-height:100%}.alert-title{color:#000000a6;font-weight:600;text-transform:none;position:relative;display:block;font-size:27px;line-height:normal;text-align:center;margin-bottom:0}.alert-title:first-child{margin-top:26px}.alert-title:not(:first-child){padding-bottom:0}.alert-title:not(:last-child){margin-bottom:13px}.alert-text{font-size:16px;position:relative;float:none;line-height:normal;vertical-align:top;text-align:center;display:inline-block;margin:0;padding:0 10px;font-weight:400;color:#000000a3;overflow-wrap:break-word;box-sizing:border-box;width:100%}.alert-text:first-child{margin-top:45px}.alert-text:last-child{margin-bottom:45px}.alert-footer{text-align:right;margin-top:13px;padding:13px 16px;border-radius:inherit;border-top-left-radius:0;border-top-right-radius:0}.alert-footer-button-container{margin:5px;display:inline-block;position:relative}.alert-footer>*{display:inline-block;margin-right:.5em}.alert-footer>:last-child{margin-right:inherit}\n"] }]
}], ctorParameters: () => [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
type: Inject,
args: [MAT_DIALOG_DATA]
}] }], propDecorators: { appDynamic: [{
type: ViewChildren,
args: [DynamicDirective]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLWFsZXJ0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NyYWZ0c2pzL2FsZXJ0L3NyYy9saWIvY29tcG9uZW50cy9kaWFsb2ctYWxlcnQvZGlhbG9nLWFsZXJ0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NyYWZ0c2pzL2FsZXJ0L3NyYy9saWIvY29tcG9uZW50cy9kaWFsb2ctYWxlcnQvZGlhbG9nLWFsZXJ0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsdUJBQXVCLEVBQ3ZCLE1BQU0sRUFDTixpQkFBaUIsRUFFakIsUUFBUSxFQUNSLGNBQWMsRUFJZCxZQUFZLEVBRVosV0FBVyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFekUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzFELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWxELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxnRUFBZ0UsQ0FBQztBQUN4RyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx3RUFBd0UsQ0FBQzs7OztBQUVwSCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLGNBQWMsQ0FBTSxtQkFBbUIsQ0FBQyxDQUFDO0FBZ0JoRixNQUFNLE9BQU8sb0JBQW9CO0lBSy9CLFlBQ1MsU0FBNkMsRUFDcEIsSUFBZ0I7UUFEekMsY0FBUyxHQUFULFNBQVMsQ0FBb0M7UUFDcEIsU0FBSSxHQUFKLElBQUksQ0FBWTtJQUVsRCxDQUFDO0lBRUQsUUFBUTtJQUVS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O3FCQUM3Qjs7MEJBU0ksTUFBTTsyQkFBQyxlQUFlO3lDQUp6QixVQUFVO3NCQURULFlBQVk7dUJBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgSW5qZWN0LFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG4gIE9uSW5pdCxcclxuICBJbmplY3RvcixcclxuICBJbmplY3Rpb25Ub2tlbixcclxuICBUeXBlLFxyXG4gIFZpZXdDb250YWluZXJSZWYsXHJcbiAgUXVlcnlMaXN0LFxyXG4gIFZpZXdDaGlsZHJlbixcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIFRlbXBsYXRlUmVmXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdERpYWxvZ1JlZiwgTUFUX0RJQUxPR19EQVRBIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgQWxlcnRNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9hbGVydC5tb2RlbCc7XHJcbmltcG9ydCB7IGFsZXJ0Q29tcG9uZW50cyB9IGZyb20gJy4vY29tcG9uZW50cy9jb21wb25lbnRzJztcclxuaW1wb3J0IHsgRHluYW1pY0RpcmVjdGl2ZSB9IGZyb20gJ0BjcmFmdHNqcy9jb3JlJztcclxuXHJcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBBbGVydE9rQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2J1dHRvbnMvYWxlcnQtb2stYnV0dG9uL2FsZXJ0LW9rLWJ1dHRvbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBbGVydENhbmNlbEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9idXR0b25zL2FsZXJ0LWNhbmNlbC1idXR0b24vYWxlcnQtY2FuY2VsLWJ1dHRvbi5jb21wb25lbnQnO1xyXG5cclxuZXhwb3J0IGNvbnN0IENSQUZUU0pTX0FMRVJUX0RBVEEgPSBuZXcgSW5qZWN0aW9uVG9rZW48YW55PignQ3JhZnRzanNBbGVydERhdGEnKTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZGlhbG9nLWFsZXJ0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZGlhbG9nLWFsZXJ0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9kaWFsb2ctYWxlcnQuY29tcG9uZW50LnNjc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxyXG4gICAgRHluYW1pY0RpcmVjdGl2ZSxcclxuICAgIEFsZXJ0T2tCdXR0b25Db21wb25lbnQsXHJcbiAgICBBbGVydENhbmNlbEJ1dHRvbkNvbXBvbmVudFxyXG5dXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEaWFsb2dBbGVydENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oRHluYW1pY0RpcmVjdGl2ZSlcclxuICBhcHBEeW5hbWljOiBRdWVyeUxpc3Q8RHluYW1pY0RpcmVjdGl2ZT47XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPERpYWxvZ0FsZXJ0Q29tcG9uZW50PixcclxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogQWxlcnRNb2RlbCxcclxuICApIHtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG5cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMubG9hZENvbXBvbmVudHMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbG9hZENvbXBvbmVudHMoKSB7XHJcbiAgICBjb25zdCBpdGVtQ29tcG9uZW50ID0gYWxlcnRDb21wb25lbnRzLmZpbmQoeCA9PiB4LnR5cGUgPT09IHRoaXMuZGF0YS50eXBlKTtcclxuICAgIGNvbnN0IGNvbXBvbmVudCA9IGl0ZW1Db21wb25lbnQgJiYgaXRlbUNvbXBvbmVudC5jb21wb25lbnQ7XHJcbiAgICB0aGlzLnJlc29sdmVDb21wb25lbnQoY29tcG9uZW50LCB0aGlzLmFwcER5bmFtaWMuZmluZCh4ID0+IHgubmFtZSA9PT0gJ2FsZXJ0LWljb24nKS52aWV3Q29udGFpbmVyUmVmKTtcclxuICAgIHRoaXMucmVzb2x2ZUNvbXBvbmVudCh0aGlzLmRhdGEuY3VzdG9tQm9keSwgdGhpcy5hcHBEeW5hbWljLmZpbmQoeCA9PiB4Lm5hbWUgPT09ICdhbGVydC1ib2R5Jykudmlld0NvbnRhaW5lclJlZik7XHJcbiAgICB0aGlzLnJlc29sdmVDb21wb25lbnQodGhpcy5kYXRhLmN1c3RvbUJ1dHRvbkNvbXBvbmVudCwgdGhpcy5hcHBEeW5hbWljLmZpbmQoeCA9PiB4Lm5hbWUgPT09ICdhbGVydC1idXR0b25zJykudmlld0NvbnRhaW5lclJlZik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlc29sdmVDb21wb25lbnQoY29tcG9uZW50OiBUeXBlPGFueT4gfCBUZW1wbGF0ZVJlZjxhbnk+LCB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmKSB7XHJcbiAgICBpZiAoIWNvbXBvbmVudCkgeyByZXR1cm47IH1cclxuICAgIHZpZXdDb250YWluZXJSZWYuY2xlYXIoKTtcclxuICAgIGlmIChjb21wb25lbnQgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZikge1xyXG4gICAgICB2aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyhjb21wb25lbnQsIHsgJGltcGxpY2l0OiB0aGlzLmRhdGEsIGRpYWxvZ1JlZjogdGhpcy5kaWFsb2dSZWYgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBpbmplY3RvciA9IHRoaXMuY3JlYXRlSW5qZWN0b3Iodmlld0NvbnRhaW5lclJlZi5pbmplY3Rvcik7XHJcbiAgICAgIHZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudCwge1xyXG4gICAgICAgIGluamVjdG9yXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVJbmplY3RvcihpbmplY3RvcjogSW5qZWN0b3IpIHtcclxuICAgIHJldHVybiBJbmplY3Rvci5jcmVhdGUoe1xyXG4gICAgICBwcm92aWRlcnM6IFt7XHJcbiAgICAgICAgcHJvdmlkZTogQ1JBRlRTSlNfQUxFUlRfREFUQSxcclxuICAgICAgICB1c2VWYWx1ZTogdGhpcy5kYXRhXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBwcm92aWRlOiBNYXREaWFsb2dSZWYsXHJcbiAgICAgICAgdXNlVmFsdWU6IHRoaXMuZGlhbG9nUmVmXHJcbiAgICAgIH1dLFxyXG4gICAgICBwYXJlbnQ6IGluamVjdG9yXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgYnV0dG9uQ2xpY2socmVzdWx0OiBzdHJpbmcpIHtcclxuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHsgZGF0YTogdGhpcy5kYXRhLCByZXN1bHQgfSk7XHJcbiAgfVxyXG5cclxufVxyXG4iLCI8bmctdGVtcGxhdGUgY3JhZnRzanNEeW5hbWljIG5hbWU9XCJhbGVydC1pY29uXCI+PC9uZy10ZW1wbGF0ZT5cclxuQGlmIChkYXRhPy50aXRsZSkge1xyXG4gIDxkaXYgY2xhc3M9XCJhbGVydC10aXRsZVwiPlxyXG4gICAgPHNwYW4+XHJcbiAgICAgIHt7ZGF0YS50aXRsZSB8IHRyYW5zbGF0ZX19XHJcbiAgICA8L3NwYW4+XHJcbiAgPC9kaXY+XHJcbn1cclxuQGlmIChkYXRhPy50ZXh0KSB7XHJcbiAgPGRpdiBjbGFzcz1cImFsZXJ0LXRleHRcIj5cclxuICAgIDxzcGFuPlxyXG4gICAgICB7e2RhdGEudGV4dCB8IHRyYW5zbGF0ZX19XHJcbiAgICA8L3NwYW4+XHJcbiAgPC9kaXY+XHJcbn1cclxuPG5nLXRlbXBsYXRlIGNyYWZ0c2pzRHluYW1pYyBuYW1lPVwiYWxlcnQtYm9keVwiPjwvbmctdGVtcGxhdGU+XHJcbkBpZiAoIWRhdGE/LmhpZGRlbkJ1dHRvbnMpIHtcclxuICA8ZGl2IGNsYXNzPVwiYWxlcnQtZm9vdGVyXCI+XHJcbiAgICBAaWYgKCFkYXRhPy5jdXN0b21CdXR0b25Db21wb25lbnQpIHtcclxuICAgICAgPGFsZXJ0LW9rLWJ1dHRvbiAoY2xpY2spPVwiYnV0dG9uQ2xpY2soJ29rJylcIj5cclxuICAgICAgPC9hbGVydC1vay1idXR0b24+XHJcbiAgICB9XHJcbiAgICBAaWYgKCFkYXRhPy5jdXN0b21CdXR0b25Db21wb25lbnQgJiYgZGF0YT8uc2hvd0NhbmNlbEJ1dHRvbikge1xyXG4gICAgICA8YWxlcnQtY2FuY2VsLWJ1dHRvblxyXG4gICAgICAgIChjbGljayk9XCJidXR0b25DbGljaygnY2FuY2VsJylcIj5cclxuICAgICAgPC9hbGVydC1jYW5jZWwtYnV0dG9uPlxyXG4gICAgfVxyXG4gIDwvZGl2PlxyXG59XHJcbjxuZy10ZW1wbGF0ZSBjcmFmdHNqc0R5bmFtaWMgbmFtZT1cImFsZXJ0LWJ1dHRvbnNcIj48L25nLXRlbXBsYXRlPiJdfQ==