UNPKG

@catull/igniteui-angular

Version:

Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps

117 lines 13.7 kB
import { __decorate, __extends, __metadata, __values } from "tslib"; import * as JSZip from 'jszip/dist/jszip'; import { EventEmitter, Injectable, Output } from '@angular/core'; import { ExcelElementsFactory } from './excel-elements-factory'; import { ExcelFolderTypes } from './excel-enums'; import { IgxBaseExporter } from '../exporter-common/base-export-service'; import { ExportUtilities } from '../exporter-common/export-utilities'; import { WorksheetData } from './worksheet-data'; /** * **Ignite UI for Angular Excel Exporter Service** - * [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/exporter_excel.html) * * The Ignite UI for Angular Excel Exporter service can export data in Microsoft® Excel® format from both raw data * (array) or from an `IgxGrid`. * * Example: * ```typescript * public localData = [ * { Name: "Eric Ridley", Age: "26" }, * { Name: "Alanis Brook", Age: "22" }, * { Name: "Jonathan Morris", Age: "23" } * ]; * * constructor(private excelExportService: IgxExcelExporterService) { * } * * this.excelExportService.exportData(this.localData, new IgxExcelExporterOptions("FileName")); * ``` */ var IgxExcelExporterService = /** @class */ (function (_super) { __extends(IgxExcelExporterService, _super); function IgxExcelExporterService() { var _this = _super !== null && _super.apply(this, arguments) || this; /** * This event is emitted when the export process finishes. * ```typescript * this.exporterService.onExportEnded.subscribe((args: IExcelExportEndedEventArgs) => { * // put event handler code here * }); * ``` * @memberof IgxExcelExporterService */ _this.onExportEnded = new EventEmitter(); return _this; } IgxExcelExporterService_1 = IgxExcelExporterService; IgxExcelExporterService.populateFolder = function (folder, zip, worksheetData) { var e_1, _a, e_2, _b; try { for (var _c = __values(folder.childFolders(worksheetData)), _d = _c.next(); !_d.done; _d = _c.next()) { var childFolder = _d.value; var folderIntance = ExcelElementsFactory.getExcelFolder(childFolder); var zipFolder = zip.folder(folderIntance.folderName); IgxExcelExporterService_1.populateFolder(folderIntance, zipFolder, worksheetData); } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (_d && !_d.done && (_a = _c.return)) _a.call(_c); } finally { if (e_1) throw e_1.error; } } try { for (var _e = __values(folder.childFiles(worksheetData)), _f = _e.next(); !_f.done; _f = _e.next()) { var childFile = _f.value; var fileInstance = ExcelElementsFactory.getExcelFile(childFile); fileInstance.writeElement(zip, worksheetData); } } catch (e_2_1) { e_2 = { error: e_2_1 }; } finally { try { if (_f && !_f.done && (_b = _e.return)) _b.call(_e); } finally { if (e_2) throw e_2.error; } } }; IgxExcelExporterService.prototype.exportDataImplementation = function (data, options) { var _this = this; if (this._isTreeGrid) { var maxLevel_1 = 0; data.forEach(function (r) { maxLevel_1 = Math.max(maxLevel_1, r.originalRowData.level); }); if (maxLevel_1 > 7) { throw Error('Can create an outline of up to eight levels!'); } } var worksheetData = new WorksheetData(data, options, this._indexOfLastPinnedColumn, this._sort, this._isTreeGrid); this._xlsx = new JSZip(); var rootFolder = ExcelElementsFactory.getExcelFolder(ExcelFolderTypes.RootExcelFolder); IgxExcelExporterService_1.populateFolder(rootFolder, this._xlsx, worksheetData); this._xlsx.generateAsync(IgxExcelExporterService_1.ZIP_OPTIONS).then(function (result) { _this.saveFile(result, options.fileName); _this.onExportEnded.emit({ xlsx: _this._xlsx }); }); }; IgxExcelExporterService.prototype.saveFile = function (data, fileName) { var blob = new Blob([ExportUtilities.stringToArrayBuffer(atob(data))], { type: '' }); ExportUtilities.saveBlobToFile(blob, fileName); }; var IgxExcelExporterService_1; IgxExcelExporterService.ZIP_OPTIONS = { compression: 'DEFLATE', type: 'base64' }; __decorate([ Output(), __metadata("design:type", Object) ], IgxExcelExporterService.prototype, "onExportEnded", void 0); IgxExcelExporterService = IgxExcelExporterService_1 = __decorate([ Injectable() ], IgxExcelExporterService); return IgxExcelExporterService; }(IgxBaseExporter)); export { IgxExcelExporterService }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhjZWwtZXhwb3J0ZXIuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9pZ25pdGV1aS1hbmd1bGFyLyIsInNvdXJjZXMiOlsibGliL3NlcnZpY2VzL2V4Y2VsL2V4Y2VsLWV4cG9ydGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEtBQUssS0FBSyxNQUFNLGtCQUFrQixDQUFDO0FBRTFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFPakQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBRUg7SUFBNkMsMkNBQWU7SUFBNUQ7UUFBQSxxRUE2REM7UUF4REc7Ozs7Ozs7O1dBUUc7UUFFSSxtQkFBYSxHQUFHLElBQUksWUFBWSxFQUE4QixDQUFDOztJQThDMUUsQ0FBQztnQ0E3RFksdUJBQXVCO0lBaUJqQixzQ0FBYyxHQUE3QixVQUE4QixNQUFvQixFQUFFLEdBQVUsRUFBRSxhQUE0Qjs7O1lBQ3hGLEtBQTBCLElBQUEsS0FBQSxTQUFBLE1BQU0sQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLENBQUEsZ0JBQUEsNEJBQUU7Z0JBQXpELElBQU0sV0FBVyxXQUFBO2dCQUNsQixJQUFNLGFBQWEsR0FBRyxvQkFBb0IsQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ3ZFLElBQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUN2RCx5QkFBdUIsQ0FBQyxjQUFjLENBQUMsYUFBYSxFQUFFLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQzthQUNuRjs7Ozs7Ozs7OztZQUVELEtBQXdCLElBQUEsS0FBQSxTQUFBLE1BQU0sQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUEsZ0JBQUEsNEJBQUU7Z0JBQXJELElBQU0sU0FBUyxXQUFBO2dCQUNoQixJQUFNLFlBQVksR0FBRyxvQkFBb0IsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ2xFLFlBQVksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLGFBQWEsQ0FBQyxDQUFDO2FBQ2pEOzs7Ozs7Ozs7SUFDTCxDQUFDO0lBRVMsMERBQXdCLEdBQWxDLFVBQW1DLElBQVcsRUFBRSxPQUFnQztRQUFoRixpQkFzQkM7UUFyQkcsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2xCLElBQUksVUFBUSxHQUFHLENBQUMsQ0FBQztZQUNqQixJQUFJLENBQUMsT0FBTyxDQUFDLFVBQUMsQ0FBQztnQkFDWCxVQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFRLEVBQUUsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzRCxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksVUFBUSxHQUFHLENBQUMsRUFBRTtnQkFDZCxNQUFNLEtBQUssQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO2FBQy9EO1NBQ0o7UUFFRCxJQUFNLGFBQWEsR0FBRyxJQUFJLGFBQWEsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNwSCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7UUFFekIsSUFBTSxVQUFVLEdBQUcsb0JBQW9CLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3pGLHlCQUF1QixDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQztRQUU5RSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyx5QkFBdUIsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBQyxNQUFNO1lBQ3RFLEtBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUV4QyxLQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNsRCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTywwQ0FBUSxHQUFoQixVQUFpQixJQUFZLEVBQUUsUUFBZ0I7UUFDM0MsSUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxlQUFlLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNyRSxJQUFJLEVBQUUsRUFBRTtTQUNYLENBQUMsQ0FBQztRQUVILGVBQWUsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ25ELENBQUM7O0lBMURjLG1DQUFXLEdBQUcsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQztJQWF4RTtRQURDLE1BQU0sRUFBRTs7a0VBQzZEO0lBZjdELHVCQUF1QjtRQURuQyxVQUFVLEVBQUU7T0FDQSx1QkFBdUIsQ0E2RG5DO0lBQUQsOEJBQUM7Q0FBQSxBQTdERCxDQUE2QyxlQUFlLEdBNkQzRDtTQTdEWSx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBKU1ppcCBmcm9tICdqc3ppcC9kaXN0L2pzemlwJztcblxuaW1wb3J0IHsgRXZlbnRFbWl0dGVyLCBJbmplY3RhYmxlLCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEV4Y2VsRWxlbWVudHNGYWN0b3J5IH0gZnJvbSAnLi9leGNlbC1lbGVtZW50cy1mYWN0b3J5JztcbmltcG9ydCB7IEV4Y2VsRm9sZGVyVHlwZXMgfSBmcm9tICcuL2V4Y2VsLWVudW1zJztcbmltcG9ydCB7IElneEV4Y2VsRXhwb3J0ZXJPcHRpb25zIH0gZnJvbSAnLi9leGNlbC1leHBvcnRlci1vcHRpb25zJztcbmltcG9ydCB7IElFeGNlbEZvbGRlciB9IGZyb20gJy4vZXhjZWwtaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBJZ3hCYXNlRXhwb3J0ZXIgfSBmcm9tICcuLi9leHBvcnRlci1jb21tb24vYmFzZS1leHBvcnQtc2VydmljZSc7XG5pbXBvcnQgeyBFeHBvcnRVdGlsaXRpZXMgfSBmcm9tICcuLi9leHBvcnRlci1jb21tb24vZXhwb3J0LXV0aWxpdGllcyc7XG5pbXBvcnQgeyBXb3Jrc2hlZXREYXRhIH0gZnJvbSAnLi93b3Jrc2hlZXQtZGF0YSc7XG5pbXBvcnQgeyBJQmFzZUV2ZW50QXJncyB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElFeGNlbEV4cG9ydEVuZGVkRXZlbnRBcmdzIGV4dGVuZHMgSUJhc2VFdmVudEFyZ3Mge1xuICAgIHhsc3g6IEpTWmlwO1xufVxuXG4vKipcbiAqICoqSWduaXRlIFVJIGZvciBBbmd1bGFyIEV4Y2VsIEV4cG9ydGVyIFNlcnZpY2UqKiAtXG4gKiBbRG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly93d3cuaW5mcmFnaXN0aWNzLmNvbS9wcm9kdWN0cy9pZ25pdGUtdWktYW5ndWxhci9hbmd1bGFyL2NvbXBvbmVudHMvZXhwb3J0ZXJfZXhjZWwuaHRtbClcbiAqXG4gKiBUaGUgSWduaXRlIFVJIGZvciBBbmd1bGFyIEV4Y2VsIEV4cG9ydGVyIHNlcnZpY2UgY2FuIGV4cG9ydCBkYXRhIGluIE1pY3Jvc29mdMKuIEV4Y2Vswq4gZm9ybWF0IGZyb20gYm90aCByYXcgZGF0YVxuICogKGFycmF5KSBvciBmcm9tIGFuIGBJZ3hHcmlkYC5cbiAqXG4gKiBFeGFtcGxlOlxuICogYGBgdHlwZXNjcmlwdFxuICogcHVibGljIGxvY2FsRGF0YSA9IFtcbiAqICAgeyBOYW1lOiBcIkVyaWMgUmlkbGV5XCIsIEFnZTogXCIyNlwiIH0sXG4gKiAgIHsgTmFtZTogXCJBbGFuaXMgQnJvb2tcIiwgQWdlOiBcIjIyXCIgfSxcbiAqICAgeyBOYW1lOiBcIkpvbmF0aGFuIE1vcnJpc1wiLCBBZ2U6IFwiMjNcIiB9XG4gKiBdO1xuICpcbiAqIGNvbnN0cnVjdG9yKHByaXZhdGUgZXhjZWxFeHBvcnRTZXJ2aWNlOiBJZ3hFeGNlbEV4cG9ydGVyU2VydmljZSkge1xuICogfVxuICpcbiAqIHRoaXMuZXhjZWxFeHBvcnRTZXJ2aWNlLmV4cG9ydERhdGEodGhpcy5sb2NhbERhdGEsIG5ldyBJZ3hFeGNlbEV4cG9ydGVyT3B0aW9ucyhcIkZpbGVOYW1lXCIpKTtcbiAqIGBgYFxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgSWd4RXhjZWxFeHBvcnRlclNlcnZpY2UgZXh0ZW5kcyBJZ3hCYXNlRXhwb3J0ZXIge1xuXG4gICAgcHJpdmF0ZSBzdGF0aWMgWklQX09QVElPTlMgPSB7IGNvbXByZXNzaW9uOiAnREVGTEFURScsIHR5cGU6ICdiYXNlNjQnIH07XG4gICAgcHJpdmF0ZSBfeGxzeDogSlNaaXA7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGlzIGVtaXR0ZWQgd2hlbiB0aGUgZXhwb3J0IHByb2Nlc3MgZmluaXNoZXMuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuZXhwb3J0ZXJTZXJ2aWNlLm9uRXhwb3J0RW5kZWQuc3Vic2NyaWJlKChhcmdzOiBJRXhjZWxFeHBvcnRFbmRlZEV2ZW50QXJncykgPT4ge1xuICAgICAqIC8vIHB1dCBldmVudCBoYW5kbGVyIGNvZGUgaGVyZVxuICAgICAqIH0pO1xuICAgICAqIGBgYFxuICAgICAqIEBtZW1iZXJvZiBJZ3hFeGNlbEV4cG9ydGVyU2VydmljZVxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvbkV4cG9ydEVuZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxJRXhjZWxFeHBvcnRFbmRlZEV2ZW50QXJncz4oKTtcblxuICAgIHByaXZhdGUgc3RhdGljIHBvcHVsYXRlRm9sZGVyKGZvbGRlcjogSUV4Y2VsRm9sZGVyLCB6aXA6IEpTWmlwLCB3b3Jrc2hlZXREYXRhOiBXb3Jrc2hlZXREYXRhKTogYW55IHtcbiAgICAgICAgZm9yIChjb25zdCBjaGlsZEZvbGRlciBvZiBmb2xkZXIuY2hpbGRGb2xkZXJzKHdvcmtzaGVldERhdGEpKSB7XG4gICAgICAgICAgICBjb25zdCBmb2xkZXJJbnRhbmNlID0gRXhjZWxFbGVtZW50c0ZhY3RvcnkuZ2V0RXhjZWxGb2xkZXIoY2hpbGRGb2xkZXIpO1xuICAgICAgICAgICAgY29uc3QgemlwRm9sZGVyID0gemlwLmZvbGRlcihmb2xkZXJJbnRhbmNlLmZvbGRlck5hbWUpO1xuICAgICAgICAgICAgSWd4RXhjZWxFeHBvcnRlclNlcnZpY2UucG9wdWxhdGVGb2xkZXIoZm9sZGVySW50YW5jZSwgemlwRm9sZGVyLCB3b3Jrc2hlZXREYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgY2hpbGRGaWxlIG9mIGZvbGRlci5jaGlsZEZpbGVzKHdvcmtzaGVldERhdGEpKSB7XG4gICAgICAgICAgICBjb25zdCBmaWxlSW5zdGFuY2UgPSBFeGNlbEVsZW1lbnRzRmFjdG9yeS5nZXRFeGNlbEZpbGUoY2hpbGRGaWxlKTtcbiAgICAgICAgICAgIGZpbGVJbnN0YW5jZS53cml0ZUVsZW1lbnQoemlwLCB3b3Jrc2hlZXREYXRhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBleHBvcnREYXRhSW1wbGVtZW50YXRpb24oZGF0YTogYW55W10sIG9wdGlvbnM6IElneEV4Y2VsRXhwb3J0ZXJPcHRpb25zKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9pc1RyZWVHcmlkKSB7XG4gICAgICAgICAgICBsZXQgbWF4TGV2ZWwgPSAwO1xuICAgICAgICAgICAgZGF0YS5mb3JFYWNoKChyKSA9PiB7XG4gICAgICAgICAgICAgICAgbWF4TGV2ZWwgPSBNYXRoLm1heChtYXhMZXZlbCwgci5vcmlnaW5hbFJvd0RhdGEubGV2ZWwpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAobWF4TGV2ZWwgPiA3KSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ0NhbiBjcmVhdGUgYW4gb3V0bGluZSBvZiB1cCB0byBlaWdodCBsZXZlbHMhJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB3b3Jrc2hlZXREYXRhID0gbmV3IFdvcmtzaGVldERhdGEoZGF0YSwgb3B0aW9ucywgdGhpcy5faW5kZXhPZkxhc3RQaW5uZWRDb2x1bW4sIHRoaXMuX3NvcnQsIHRoaXMuX2lzVHJlZUdyaWQpO1xuICAgICAgICB0aGlzLl94bHN4ID0gbmV3IEpTWmlwKCk7XG5cbiAgICAgICAgY29uc3Qgcm9vdEZvbGRlciA9IEV4Y2VsRWxlbWVudHNGYWN0b3J5LmdldEV4Y2VsRm9sZGVyKEV4Y2VsRm9sZGVyVHlwZXMuUm9vdEV4Y2VsRm9sZGVyKTtcbiAgICAgICAgSWd4RXhjZWxFeHBvcnRlclNlcnZpY2UucG9wdWxhdGVGb2xkZXIocm9vdEZvbGRlciwgdGhpcy5feGxzeCwgd29ya3NoZWV0RGF0YSk7XG5cbiAgICAgICAgdGhpcy5feGxzeC5nZW5lcmF0ZUFzeW5jKElneEV4Y2VsRXhwb3J0ZXJTZXJ2aWNlLlpJUF9PUFRJT05TKS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2F2ZUZpbGUocmVzdWx0LCBvcHRpb25zLmZpbGVOYW1lKTtcblxuICAgICAgICAgICAgdGhpcy5vbkV4cG9ydEVuZGVkLmVtaXQoeyB4bHN4OiB0aGlzLl94bHN4IH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNhdmVGaWxlKGRhdGE6IHN0cmluZywgZmlsZU5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW0V4cG9ydFV0aWxpdGllcy5zdHJpbmdUb0FycmF5QnVmZmVyKGF0b2IoZGF0YSkpXSwge1xuICAgICAgICAgICAgdHlwZTogJydcbiAgICAgICAgfSk7XG5cbiAgICAgICAgRXhwb3J0VXRpbGl0aWVzLnNhdmVCbG9iVG9GaWxlKGJsb2IsIGZpbGVOYW1lKTtcbiAgICB9XG59XG4iXX0=