UNPKG

formioangular-colfuturo

Version:

This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 10.1.4.

64 lines 14.5 kB
import { Component, ViewChildren, } from "@angular/core"; import { GridBodyComponent } from "../GridBodyComponent"; import { Tooltip } from "bootstrap"; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; import * as i2 from "@angular/router"; import * as i3 from "./time-since.pipe"; export class FormGridBodyComponent extends GridBodyComponent { createBtns; viewBtns; editBtns; permissionsBtns; deleteBtns; tooltips = []; load(formio, query) { query = query || {}; return formio .loadForms({ params: query }) .then((forms) => this.setRows(query, forms)) .then(() => this.attachTooltips()); } attachTooltips() { this.createBtns.forEach((el) => { this.tooltips.push(new Tooltip(el.nativeElement, { title: "Create" })); }); this.editBtns.forEach((el) => { this.tooltips.push(new Tooltip(el.nativeElement, { title: "Edit" })); }); this.viewBtns.forEach((el) => { this.tooltips.push(new Tooltip(el.nativeElement, { title: "View" })); }); this.permissionsBtns.forEach((el) => { this.tooltips.push(new Tooltip(el.nativeElement, { title: "Permissions" })); }); this.deleteBtns.forEach((el) => { this.tooltips.push(new Tooltip(el.nativeElement, { title: "Delete" })); }); } ngOnDestroy() { this.tooltips.forEach((tootip) => tootip.dispose()); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormGridBodyComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FormGridBodyComponent, selector: "form-grid-body", viewQueries: [{ propertyName: "createBtns", predicate: ["create"], descendants: true }, { propertyName: "viewBtns", predicate: ["view"], descendants: true }, { propertyName: "editBtns", predicate: ["edit"], descendants: true }, { propertyName: "permissionsBtns", predicate: ["permissions"], descendants: true }, { propertyName: "deleteBtns", predicate: ["delete"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-template>\n <tbody *ngIf=\"rows\">\n <tr *ngFor=\"let form of rows\">\n <td>\n <div class=\"row\">\n <div class=\"col-sm-9\">\n <a routerLink=\"{{form._id}}/view\" (click)=\"onRowSelect($event, form)\" class=\"text-decoration-none\"><h5>{{ form.title }}</h5></a>\n <div class=\"form-updated small text-muted\">\n Updated {{ form.modified | timeSince }} ago\n </div>\n </div>\n <div class=\"col-sm-3 d-flex justify-content-end align-items-center\">\n <button #create *ngIf=\"actionAllowed('formView')\" class=\"btn btn-outline-secondary btn-sm form-btn form-btn-use\" (click)=\"onRowAction($event, form, 'view')\"><span class=\"fa fa-pencil bi bi-pencil\"></span></button>&nbsp;\n <button #view *ngIf=\"actionAllowed('formSubmission')\" class=\"btn btn-outline-secondary btn-sm form-btn\" (click)=\"onRowAction($event, form, 'submission')\"><span class=\"fa fa-list-alt bi bi-table\"></span></button>&nbsp;\n <button #edit *ngIf=\"actionAllowed('formEdit')\" class=\"btn btn-outline-secondary btn-sm form-btn\" (click)=\"onRowAction($event, form, 'edit')\"><span class=\"fa fa-edit bi bi-pencil-square\"></span></button>&nbsp;\n <button #delete *ngIf=\"actionAllowed('formDelete')\" class=\"btn btn-secondary btn-sm form-btn form-btn-delete\" (click)=\"onRowAction($event, form, 'delete')\" title=\"Delete form\"><span class=\"fa fa-trash bi bi-trash\"></span></button>\n </div>\n </div>\n </td>\n </tr>\n </tbody>\n</ng-template>\n", styles: [".form-btn{font-size:.75rem;margin:2px 0}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "pipe", type: i3.TimeSince, name: "timeSince" }] }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormGridBodyComponent, decorators: [{ type: Component, args: [{ selector: "form-grid-body", template: "<ng-template>\n <tbody *ngIf=\"rows\">\n <tr *ngFor=\"let form of rows\">\n <td>\n <div class=\"row\">\n <div class=\"col-sm-9\">\n <a routerLink=\"{{form._id}}/view\" (click)=\"onRowSelect($event, form)\" class=\"text-decoration-none\"><h5>{{ form.title }}</h5></a>\n <div class=\"form-updated small text-muted\">\n Updated {{ form.modified | timeSince }} ago\n </div>\n </div>\n <div class=\"col-sm-3 d-flex justify-content-end align-items-center\">\n <button #create *ngIf=\"actionAllowed('formView')\" class=\"btn btn-outline-secondary btn-sm form-btn form-btn-use\" (click)=\"onRowAction($event, form, 'view')\"><span class=\"fa fa-pencil bi bi-pencil\"></span></button>&nbsp;\n <button #view *ngIf=\"actionAllowed('formSubmission')\" class=\"btn btn-outline-secondary btn-sm form-btn\" (click)=\"onRowAction($event, form, 'submission')\"><span class=\"fa fa-list-alt bi bi-table\"></span></button>&nbsp;\n <button #edit *ngIf=\"actionAllowed('formEdit')\" class=\"btn btn-outline-secondary btn-sm form-btn\" (click)=\"onRowAction($event, form, 'edit')\"><span class=\"fa fa-edit bi bi-pencil-square\"></span></button>&nbsp;\n <button #delete *ngIf=\"actionAllowed('formDelete')\" class=\"btn btn-secondary btn-sm form-btn form-btn-delete\" (click)=\"onRowAction($event, form, 'delete')\" title=\"Delete form\"><span class=\"fa fa-trash bi bi-trash\"></span></button>\n </div>\n </div>\n </td>\n </tr>\n </tbody>\n</ng-template>\n", styles: [".form-btn{font-size:.75rem;margin:2px 0}\n"] }] }], propDecorators: { createBtns: [{ type: ViewChildren, args: ["create"] }], viewBtns: [{ type: ViewChildren, args: ["view"] }], editBtns: [{ type: ViewChildren, args: ["edit"] }], permissionsBtns: [{ type: ViewChildren, args: ["permissions"] }], deleteBtns: [{ type: ViewChildren, args: ["delete"] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRm9ybUdyaWRCb2R5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItZm9ybWlvL2dyaWQvc3JjL2Zvcm0vRm9ybUdyaWRCb2R5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItZm9ybWlvL2dyaWQvc3JjL2Zvcm0vRm9ybUdyaWRCb2R5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBSVQsWUFBWSxHQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXpELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7Ozs7O0FBTXBDLE1BQU0sT0FBTyxxQkFDWCxTQUFRLGlCQUFpQjtJQUdELFVBQVUsQ0FBZTtJQUMzQixRQUFRLENBQWU7SUFDdkIsUUFBUSxDQUFlO0lBQ2hCLGVBQWUsQ0FBZTtJQUNuQyxVQUFVLENBQWU7SUFDMUMsUUFBUSxHQUFtQixFQUFFLENBQUM7SUFFckMsSUFBSSxDQUFDLE1BQTRCLEVBQUUsS0FBVztRQUM1QyxLQUFLLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUNwQixPQUFPLE1BQU07YUFDVixTQUFTLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUM7YUFDNUIsSUFBSSxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQzthQUNoRCxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELGNBQWM7UUFDWixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQWMsRUFBRSxFQUFFO1lBQ3pDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksT0FBTyxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3pFLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFjLEVBQUUsRUFBRTtZQUN2QyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN2RSxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBYyxFQUFFLEVBQUU7WUFDdkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdkUsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQWMsRUFBRSxFQUFFO1lBQzlDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUNoQixJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQ3hELENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBYyxFQUFFLEVBQUU7WUFDekMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDekUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBZSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUMvRCxDQUFDO3dHQXpDVSxxQkFBcUI7NEZBQXJCLHFCQUFxQixnZENmbEMsMmpEQXNCQTs7NEZEUGEscUJBQXFCO2tCQUxqQyxTQUFTOytCQUNFLGdCQUFnQjs4QkFRRixVQUFVO3NCQUFqQyxZQUFZO3VCQUFDLFFBQVE7Z0JBQ0EsUUFBUTtzQkFBN0IsWUFBWTt1QkFBQyxNQUFNO2dCQUNFLFFBQVE7c0JBQTdCLFlBQVk7dUJBQUMsTUFBTTtnQkFDUyxlQUFlO3NCQUEzQyxZQUFZO3VCQUFDLGFBQWE7Z0JBQ0gsVUFBVTtzQkFBakMsWUFBWTt1QkFBQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBPbkRlc3Ryb3ksXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NoaWxkcmVuLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgR3JpZEJvZHlDb21wb25lbnQgfSBmcm9tIFwiLi4vR3JpZEJvZHlDb21wb25lbnRcIjtcbmltcG9ydCB7IEZvcm1pb1Byb21pc2VTZXJ2aWNlIH0gZnJvbSBcImZvcm1pb2FuZ3VsYXItY29sZnV0dXJvXCI7XG5pbXBvcnQgeyBUb29sdGlwIH0gZnJvbSBcImJvb3RzdHJhcFwiO1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImZvcm0tZ3JpZC1ib2R5XCIsXG4gIHN0eWxlVXJsczogW1wiLi9Gb3JtR3JpZEJvZHkuY29tcG9uZW50LnNjc3NcIl0sXG4gIHRlbXBsYXRlVXJsOiBcIi4vRm9ybUdyaWRCb2R5LmNvbXBvbmVudC5odG1sXCIsXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1HcmlkQm9keUNvbXBvbmVudFxuICBleHRlbmRzIEdyaWRCb2R5Q29tcG9uZW50XG4gIGltcGxlbWVudHMgT25EZXN0cm95XG57XG4gIEBWaWV3Q2hpbGRyZW4oXCJjcmVhdGVcIikgY3JlYXRlQnRuczogRWxlbWVudFJlZltdO1xuICBAVmlld0NoaWxkcmVuKFwidmlld1wiKSB2aWV3QnRuczogRWxlbWVudFJlZltdO1xuICBAVmlld0NoaWxkcmVuKFwiZWRpdFwiKSBlZGl0QnRuczogRWxlbWVudFJlZltdO1xuICBAVmlld0NoaWxkcmVuKFwicGVybWlzc2lvbnNcIikgcGVybWlzc2lvbnNCdG5zOiBFbGVtZW50UmVmW107XG4gIEBWaWV3Q2hpbGRyZW4oXCJkZWxldGVcIikgZGVsZXRlQnRuczogRWxlbWVudFJlZltdO1xuICBwdWJsaWMgdG9vbHRpcHM6IEFycmF5PFRvb2x0aXA+ID0gW107XG5cbiAgbG9hZChmb3JtaW86IEZvcm1pb1Byb21pc2VTZXJ2aWNlLCBxdWVyeT86IGFueSkge1xuICAgIHF1ZXJ5ID0gcXVlcnkgfHwge307XG4gICAgcmV0dXJuIGZvcm1pb1xuICAgICAgLmxvYWRGb3Jtcyh7IHBhcmFtczogcXVlcnkgfSlcbiAgICAgIC50aGVuKChmb3JtczogYW55KSA9PiB0aGlzLnNldFJvd3MocXVlcnksIGZvcm1zKSlcbiAgICAgIC50aGVuKCgpID0+IHRoaXMuYXR0YWNoVG9vbHRpcHMoKSk7XG4gIH1cblxuICBhdHRhY2hUb29sdGlwcygpIHtcbiAgICB0aGlzLmNyZWF0ZUJ0bnMuZm9yRWFjaCgoZWw6IEVsZW1lbnRSZWYpID0+IHtcbiAgICAgIHRoaXMudG9vbHRpcHMucHVzaChuZXcgVG9vbHRpcChlbC5uYXRpdmVFbGVtZW50LCB7IHRpdGxlOiBcIkNyZWF0ZVwiIH0pKTtcbiAgICB9KTtcbiAgICB0aGlzLmVkaXRCdG5zLmZvckVhY2goKGVsOiBFbGVtZW50UmVmKSA9PiB7XG4gICAgICB0aGlzLnRvb2x0aXBzLnB1c2gobmV3IFRvb2x0aXAoZWwubmF0aXZlRWxlbWVudCwgeyB0aXRsZTogXCJFZGl0XCIgfSkpO1xuICAgIH0pO1xuICAgIHRoaXMudmlld0J0bnMuZm9yRWFjaCgoZWw6IEVsZW1lbnRSZWYpID0+IHtcbiAgICAgIHRoaXMudG9vbHRpcHMucHVzaChuZXcgVG9vbHRpcChlbC5uYXRpdmVFbGVtZW50LCB7IHRpdGxlOiBcIlZpZXdcIiB9KSk7XG4gICAgfSk7XG4gICAgdGhpcy5wZXJtaXNzaW9uc0J0bnMuZm9yRWFjaCgoZWw6IEVsZW1lbnRSZWYpID0+IHtcbiAgICAgIHRoaXMudG9vbHRpcHMucHVzaChcbiAgICAgICAgbmV3IFRvb2x0aXAoZWwubmF0aXZlRWxlbWVudCwgeyB0aXRsZTogXCJQZXJtaXNzaW9uc1wiIH0pXG4gICAgICApO1xuICAgIH0pO1xuICAgIHRoaXMuZGVsZXRlQnRucy5mb3JFYWNoKChlbDogRWxlbWVudFJlZikgPT4ge1xuICAgICAgdGhpcy50b29sdGlwcy5wdXNoKG5ldyBUb29sdGlwKGVsLm5hdGl2ZUVsZW1lbnQsIHsgdGl0bGU6IFwiRGVsZXRlXCIgfSkpO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy50b29sdGlwcy5mb3JFYWNoKCh0b290aXA6IFRvb2x0aXApID0+IHRvb3RpcC5kaXNwb3NlKCkpO1xuICB9XG59XG4iLCI8bmctdGVtcGxhdGU+XG4gIDx0Ym9keSAqbmdJZj1cInJvd3NcIj5cbiAgICA8dHIgKm5nRm9yPVwibGV0IGZvcm0gb2Ygcm93c1wiPlxuICAgICAgPHRkPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS05XCI+XG4gICAgICAgICAgICA8YSByb3V0ZXJMaW5rPVwie3tmb3JtLl9pZH19L3ZpZXdcIiAoY2xpY2spPVwib25Sb3dTZWxlY3QoJGV2ZW50LCBmb3JtKVwiIGNsYXNzPVwidGV4dC1kZWNvcmF0aW9uLW5vbmVcIj48aDU+e3sgZm9ybS50aXRsZSB9fTwvaDU+PC9hPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tdXBkYXRlZCBzbWFsbCB0ZXh0LW11dGVkXCI+XG4gICAgICAgICAgICAgIFVwZGF0ZWQge3sgZm9ybS5tb2RpZmllZCB8IHRpbWVTaW5jZSB9fSBhZ29cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMyBkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxidXR0b24gI2NyZWF0ZSAqbmdJZj1cImFjdGlvbkFsbG93ZWQoJ2Zvcm1WaWV3JylcIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1zZWNvbmRhcnkgYnRuLXNtIGZvcm0tYnRuIGZvcm0tYnRuLXVzZVwiIChjbGljayk9XCJvblJvd0FjdGlvbigkZXZlbnQsIGZvcm0sICd2aWV3JylcIj48c3BhbiBjbGFzcz1cImZhIGZhLXBlbmNpbCBiaSBiaS1wZW5jaWxcIj48L3NwYW4+PC9idXR0b24+Jm5ic3A7XG4gICAgICAgICAgICA8YnV0dG9uICN2aWV3ICpuZ0lmPVwiYWN0aW9uQWxsb3dlZCgnZm9ybVN1Ym1pc3Npb24nKVwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXNlY29uZGFyeSBidG4tc20gZm9ybS1idG5cIiAoY2xpY2spPVwib25Sb3dBY3Rpb24oJGV2ZW50LCBmb3JtLCAnc3VibWlzc2lvbicpXCI+PHNwYW4gY2xhc3M9XCJmYSBmYS1saXN0LWFsdCBiaSBiaS10YWJsZVwiPjwvc3Bhbj48L2J1dHRvbj4mbmJzcDtcbiAgICAgICAgICAgIDxidXR0b24gI2VkaXQgKm5nSWY9XCJhY3Rpb25BbGxvd2VkKCdmb3JtRWRpdCcpXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGJ0bi1zbSBmb3JtLWJ0blwiIChjbGljayk9XCJvblJvd0FjdGlvbigkZXZlbnQsIGZvcm0sICdlZGl0JylcIj48c3BhbiBjbGFzcz1cImZhIGZhLWVkaXQgYmkgYmktcGVuY2lsLXNxdWFyZVwiPjwvc3Bhbj48L2J1dHRvbj4mbmJzcDtcbiAgICAgICAgICAgIDxidXR0b24gI2RlbGV0ZSAqbmdJZj1cImFjdGlvbkFsbG93ZWQoJ2Zvcm1EZWxldGUnKVwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnkgYnRuLXNtIGZvcm0tYnRuIGZvcm0tYnRuLWRlbGV0ZVwiIChjbGljayk9XCJvblJvd0FjdGlvbigkZXZlbnQsIGZvcm0sICdkZWxldGUnKVwiIHRpdGxlPVwiRGVsZXRlIGZvcm1cIj48c3BhbiBjbGFzcz1cImZhIGZhLXRyYXNoIGJpIGJpLXRyYXNoXCI+PC9zcGFuPjwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvdGQ+XG4gICAgPC90cj5cbiAgPC90Ym9keT5cbjwvbmctdGVtcGxhdGU+XG4iXX0=