tnx-shared 5.3.265 → 5.3.267
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/tnx-shared.umd.js +192 -8
- package/bundles/tnx-shared.umd.js.map +1 -1
- package/bundles/tnx-shared.umd.min.js +1 -1
- package/bundles/tnx-shared.umd.min.js.map +1 -1
- package/classes/base/list-base.d.ts.map +1 -1
- package/classes/base/list-component-base.d.ts.map +1 -1
- package/classes/form-schema.d.ts +1 -0
- package/classes/form-schema.d.ts.map +1 -1
- package/directives/authorize.directive.d.ts +1 -0
- package/directives/authorize.directive.d.ts.map +1 -1
- package/esm2015/classes/base/list-base.js +4 -1
- package/esm2015/classes/base/list-component-base.js +4 -1
- package/esm2015/classes/form-schema.js +2 -1
- package/esm2015/components/crud/crud-list/crud-list.component.js +2 -2
- package/esm2015/components/dropdown/dropdown.component.js +2 -2
- package/esm2015/components/html-preview/html-preview.component.js +2 -2
- package/esm2015/directives/authorize.directive.js +6 -6
- package/esm2015/public-api.js +2 -1
- package/esm2015/services/common.service.js +11 -1
- package/esm2015/services/latex.service.js +105 -0
- package/fesm2015/tnx-shared.js +122 -9
- package/fesm2015/tnx-shared.js.map +1 -1
- package/package.json +2 -2
- package/public-api.d.ts +1 -0
- package/public-api.d.ts.map +1 -1
- package/services/common.service.d.ts +1 -0
- package/services/common.service.d.ts.map +1 -1
- package/services/latex.service.d.ts +11 -0
- package/services/latex.service.d.ts.map +1 -0
- package/services/latex.service.ngfactory.d.ts.map +1 -0
- package/tnx-shared.metadata.json +1 -1
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { __awaiter } from "tslib";
|
|
2
|
+
import { Injectable } from "@angular/core";
|
|
3
|
+
import { FileObjectService } from "../components/file-explorer/services/file-object.service";
|
|
4
|
+
import { CommonService } from "./common.service";
|
|
5
|
+
import { TemplateInstanceService } from "./templateinstance.service";
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "./common.service";
|
|
8
|
+
import * as i2 from "./templateinstance.service";
|
|
9
|
+
import * as i3 from "../components/file-explorer/services/file-object.service";
|
|
10
|
+
export class LatexService {
|
|
11
|
+
constructor(_commonService, _templateInstanceService, _fileObjectService) {
|
|
12
|
+
this._commonService = _commonService;
|
|
13
|
+
this._templateInstanceService = _templateInstanceService;
|
|
14
|
+
this._fileObjectService = _fileObjectService;
|
|
15
|
+
}
|
|
16
|
+
// replace latex to image
|
|
17
|
+
replaceLatexData(data, oldData, fields, fontSize, ignoreCheckEdited = false) {
|
|
18
|
+
var _a;
|
|
19
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
20
|
+
try {
|
|
21
|
+
for (const field of fields) {
|
|
22
|
+
const pattern = /\\\(.*?\\\)|\$\$.*?\$\$|\$.*?\$|\\\[.*?\\\]/gm;
|
|
23
|
+
const patternChild = /\\\(|\\\)|\$\$|\$\$|\$|\$|\\\[|\\\]/gm;
|
|
24
|
+
if (data[field] && data[field] != oldData[field] || ignoreCheckEdited) {
|
|
25
|
+
let temp = data[field];
|
|
26
|
+
const lstLatex = data[field].match(pattern);
|
|
27
|
+
const lstLatexDistint = lstLatex === null || lstLatex === void 0 ? void 0 : lstLatex.filter((current, index, self) => self.indexOf(current) === index);
|
|
28
|
+
if (!(lstLatexDistint === null || lstLatexDistint === void 0 ? void 0 : lstLatexDistint.length)) {
|
|
29
|
+
data[field + 'Print'] = temp;
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
for (const latexItem of lstLatexDistint) {
|
|
33
|
+
const latex = latexItem.replace(patternChild, '');
|
|
34
|
+
const base64 = yield this._templateInstanceService.laTexToBase64Image(latex, fontSize);
|
|
35
|
+
if (!base64.success) {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
const imageName = 'latex.png';
|
|
39
|
+
const imageBlob = this._commonService.dataURItoBlob(base64.data.replace('data:image/png;base64,', ''));
|
|
40
|
+
const imageFile = new File([imageBlob], imageName, { type: 'image/png' });
|
|
41
|
+
const uploadFile = yield this._fileObjectService.uploadWithByteArray(imageFile);
|
|
42
|
+
if (!uploadFile) {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
let preIndex = temp.indexOf(latexItem);
|
|
46
|
+
if (preIndex < 0) {
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
const lstLatexSame = lstLatex.filter(x => x == latexItem);
|
|
50
|
+
for (let i = 0; i < lstLatexSame.length; i++) {
|
|
51
|
+
let index = temp.indexOf(latexItem, preIndex + i);
|
|
52
|
+
const alignCenter = ((_a = latexItem.match(/\$\$|\$\$|\\\[|\\\]/gm)) === null || _a === void 0 ? void 0 : _a.length) > 0;
|
|
53
|
+
let image = `<img src="${this._fileObjectService.getUrlImage(uploadFile)}" >`;
|
|
54
|
+
if (!fontSize) {
|
|
55
|
+
image = `<img src="${this._fileObjectService.getUrlImage(uploadFile)}" height="16.32px">`;
|
|
56
|
+
}
|
|
57
|
+
if (alignCenter) {
|
|
58
|
+
const lastIndexOfParagraph = temp.substring(0, index).lastIndexOf('<p');
|
|
59
|
+
if (lastIndexOfParagraph < 0) {
|
|
60
|
+
image = `<p style="text-align: center;"><img src="${this._fileObjectService.getUrlImage(uploadFile)}" ></p>`;
|
|
61
|
+
if (!fontSize) {
|
|
62
|
+
image = `<p style="text-align: center;"><img src="${this._fileObjectService.getUrlImage(uploadFile)}" height="16.32px" ></p>`;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
image = `<img src="${this._fileObjectService.getUrlImage(uploadFile)}" >`;
|
|
67
|
+
if (!fontSize) {
|
|
68
|
+
image = `<img src="${this._fileObjectService.getUrlImage(uploadFile)}" height="16.32px" >`;
|
|
69
|
+
}
|
|
70
|
+
const styleIndex = temp.substring(0, index).lastIndexOf('<p style=');
|
|
71
|
+
if (styleIndex < 0) {
|
|
72
|
+
temp = temp.substring(0, lastIndexOfParagraph + 2) + ' style="text-align: center;"' + temp.substring(lastIndexOfParagraph + 2);
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
temp = temp.substring(0, styleIndex + 10) + 'text-align: center;' + temp.substring(styleIndex + 10);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
index = temp.indexOf(latexItem);
|
|
80
|
+
temp = temp.substring(0, index) + image + temp.substring(index + latexItem.length);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
data[field + 'Print'] = temp;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return true;
|
|
87
|
+
}
|
|
88
|
+
catch (_b) {
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
LatexService.ɵprov = i0.ɵɵdefineInjectable({ factory: function LatexService_Factory() { return new LatexService(i0.ɵɵinject(i1.CommonService), i0.ɵɵinject(i2.TemplateInstanceService), i0.ɵɵinject(i3.FileObjectService)); }, token: LatexService, providedIn: "root" });
|
|
95
|
+
LatexService.decorators = [
|
|
96
|
+
{ type: Injectable, args: [{
|
|
97
|
+
providedIn: "root",
|
|
98
|
+
},] }
|
|
99
|
+
];
|
|
100
|
+
LatexService.ctorParameters = () => [
|
|
101
|
+
{ type: CommonService },
|
|
102
|
+
{ type: TemplateInstanceService },
|
|
103
|
+
{ type: FileObjectService }
|
|
104
|
+
];
|
|
105
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF0ZXguc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi9zZXJ2aWNlcy9sYXRleC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBQzdGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7QUFLckUsTUFBTSxPQUFPLFlBQVk7SUFFckIsWUFDWSxjQUE2QixFQUM3Qix3QkFBaUQsRUFDakQsa0JBQXFDO1FBRnJDLG1CQUFjLEdBQWQsY0FBYyxDQUFlO1FBQzdCLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBeUI7UUFDakQsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFtQjtJQUVqRCxDQUFDO0lBQ0QseUJBQXlCO0lBQ25CLGdCQUFnQixDQUFDLElBQVEsRUFBRSxPQUFXLEVBQUUsTUFBZ0IsRUFBRSxRQUFpQixFQUFFLGlCQUFpQixHQUFHLEtBQUs7OztZQUN4RyxJQUFJO2dCQUNBLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxFQUFFO29CQUN4QixNQUFNLE9BQU8sR0FBRywrQ0FBK0MsQ0FBQztvQkFDaEUsTUFBTSxZQUFZLEdBQUcsdUNBQXVDLENBQUM7b0JBQzdELElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksaUJBQWlCLEVBQUU7d0JBQ25FLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDdkIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFD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LENBQUM7NkJBQ3RGO3lCQUNKO3dCQUNELElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDO3FCQUNoQztpQkFDSjtnQkFDRCxPQUFPLElBQUksQ0FBQzthQUNmO1lBQUMsV0FBTTtnQkFDSixPQUFPLEtBQUssQ0FBQzthQUNoQjs7S0FDSjs7OztZQXJGSixVQUFVLFNBQUM7Z0JBQ1IsVUFBVSxFQUFFLE1BQU07YUFDckI7OztZQUxRLGFBQWE7WUFDYix1QkFBdUI7WUFGdkIsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBGaWxlT2JqZWN0U2VydmljZSB9IGZyb20gXCIuLi9jb21wb25lbnRzL2ZpbGUtZXhwbG9yZXIvc2VydmljZXMvZmlsZS1vYmplY3Quc2VydmljZVwiO1xuaW1wb3J0IHsgQ29tbW9uU2VydmljZSB9IGZyb20gXCIuL2NvbW1vbi5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZUluc3RhbmNlU2VydmljZSB9IGZyb20gXCIuL3RlbXBsYXRlaW5zdGFuY2Uuc2VydmljZVwiO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogXCJyb290XCIsXG59KVxuZXhwb3J0IGNsYXNzIExhdGV4U2VydmljZSB7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfY29tbW9uU2VydmljZTogQ29tbW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfdGVtcGxhdGVJbnN0YW5jZVNlcnZpY2U6IFRlbXBsYXRlSW5zdGFuY2VTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9maWxlT2JqZWN0U2VydmljZTogRmlsZU9iamVjdFNlcnZpY2VcbiAgICAgICAgKSB7XG4gICAgfVxuICAgIC8vIHJlcGxhY2UgbGF0ZXggdG8gaW1hZ2VcbiAgICBhc3luYyByZXBsYWNlTGF0ZXhEYXRhKGRhdGE6YW55LCBvbGREYXRhOmFueSwgZmllbGRzOiBzdHJpbmdbXSwgZm9udFNpemU/OiBudW1iZXIsIGlnbm9yZUNoZWNrRWRpdGVkID0gZmFsc2UpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZmllbGQgb2YgZmllbGRzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGF0dGVybiA9IC9cXFxcXFwoLio/XFxcXFxcKXxcXCRcXCQuKj9cXCRcXCR8XFwkLio/XFwkfFxcXFxcXFsuKj9cXFxcXFxdL2dtO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhdHRlcm5DaGlsZCA9IC9cXFxcXFwofFxcXFxcXCl8XFwkXFwkfFxcJFxcJHxcXCR8XFwkfFxcXFxcXFt8XFxcXFxcXS9nbTtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YVtmaWVsZF0gJiYgZGF0YVtmaWVsZF0gIT0gb2xkRGF0YVtmaWVsZF0gfHwgaWdub3JlQ2hlY2tFZGl0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRlbXAgPSBkYXRhW2ZpZWxkXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbHN0TGF0ZXggPSBkYXRhW2ZpZWxkXS5tYXRjaChwYXR0ZXJuKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbHN0TGF0ZXhEaXN0aW50ID0gbHN0TGF0ZXg/LmZpbHRlcigoY3VycmVudCwgaW5kZXgsIHNlbGYpID0+IHNlbGYuaW5kZXhPZihjdXJyZW50KSA9PT0gaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWxzdExhdGV4RGlzdGludD8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2ZpZWxkICsgJ1ByaW50J10gPSB0ZW1wO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGxhdGV4SXRlbSBvZiBsc3RMYXRleERpc3RpbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhdGV4ID0gbGF0ZXhJdGVtLnJlcGxhY2UocGF0dGVybkNoaWxkLCAnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBiYXNlNjQgPSBhd2FpdCB0aGlzLl90ZW1wbGF0ZUluc3RhbmNlU2VydmljZS5sYVRleFRvQmFzZTY0SW1hZ2UobGF0ZXgsIGZvbnRTaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYmFzZTY0LnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGltYWdlTmFtZSA9ICdsYXRleC5wbmcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW1hZ2VCbG9iID0gdGhpcy5fY29tbW9uU2VydmljZS5kYXRhVVJJdG9CbG9iKGJhc2U2NC5kYXRhLnJlcGxhY2UoJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwnLCAnJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW1hZ2VGaWxlID0gbmV3IEZpbGUoW2ltYWdlQmxvYl0sIGltYWdlTmFtZSwgeyB0eXBlOiAnaW1hZ2UvcG5nJyB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXBsb2FkRmlsZSA9IGF3YWl0IHRoaXMuX2ZpbGVPYmplY3RTZXJ2aWNlLnVwbG9hZFdpdGhCeXRlQXJyYXkoaW1hZ2VGaWxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdXBsb2FkRmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHByZUluZGV4ID0gdGVtcC5pbmRleE9mKGxhdGV4SXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJlSW5kZXggPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsc3RMYXRleFNhbWUgPSBsc3RMYXRleC5maWx0ZXIoeCA9PiB4ID09IGxhdGV4SXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxzdExhdGV4U2FtZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbmRleCA9IHRlbXAuaW5kZXhPZihsYXRleEl0ZW0sIHByZUluZGV4ICsgaSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYWxpZ25DZW50ZXIgPSBsYXRleEl0ZW0ubWF0Y2goL1xcJFxcJHxcXCRcXCR8XFxcXFxcW3xcXFxcXFxdL2dtKT8ubGVuZ3RoID4gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW1hZ2UgPSBgPGltZyBzcmM9XCIke3RoaXMuX2ZpbGVPYmplY3RTZXJ2aWNlLmdldFVybEltYWdlKHVwbG9hZEZpbGUpfVwiID5gO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZm9udFNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2UgPSBgPGltZyBzcmM9XCIke3RoaXMuX2ZpbGVPYmplY3RTZXJ2aWNlLmdldFVybEltYWdlKHVwbG9hZEZpbGUpfVwiIGhlaWdodD1cIjE2LjMycHhcIj5gO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWxpZ25DZW50ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFzdEluZGV4T2ZQYXJhZ3JhcGggPSB0ZW1wLnN1YnN0cmluZygwLCBpbmRleCkubGFzdEluZGV4T2YoJzxwJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0SW5kZXhPZlBhcmFncmFwaCA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlID0gYDxwIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyO1wiPjxpbWcgc3JjPVwiJHt0aGlzLl9maWxlT2JqZWN0U2VydmljZS5nZXRVcmxJbWFnZSh1cGxvYWRGaWxlKX1cIiA+PC9wPmA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZvbnRTaXplKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2UgPSBgPHAgc3R5bGU9XCJ0ZXh0LWFsaWduOiBjZW50ZXI7XCI+PGltZyBzcmM9XCIke3RoaXMuX2ZpbGVPYmplY3RTZXJ2aWNlLmdldFVybEltYWdlKHVwbG9hZEZpbGUpfVwiIGhlaWdodD1cIjE2LjMycHhcIiA+PC9wPmA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZSA9IGA8aW1nIHNyYz1cIiR7dGhpcy5fZmlsZU9iamVjdFNlcnZpY2UuZ2V0VXJsSW1hZ2UodXBsb2FkRmlsZSl9XCIgPmA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZvbnRTaXplKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2UgPSBgPGltZyBzcmM9XCIke3RoaXMuX2ZpbGVPYmplY3RTZXJ2aWNlLmdldFVybEltYWdlKHVwbG9hZEZpbGUpfVwiIGhlaWdodD1cIjE2LjMycHhcIiA+YDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0eWxlSW5kZXggPSB0ZW1wLnN1YnN0cmluZygwLCBpbmRleCkubGFzdEluZGV4T2YoJzxwIHN0eWxlPScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0eWxlSW5kZXggPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCA9IHRlbXAuc3Vic3RyaW5nKDAsIGxhc3RJbmRleE9mUGFyYWdyYXBoICsgMikgKyAnIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyO1wiJyArIHRlbXAuc3Vic3RyaW5nKGxhc3RJbmRleE9mUGFyYWdyYXBoICsgMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAgPSB0ZW1wLnN1YnN0cmluZygwLCBzdHlsZUluZGV4ICsgMTApICsgJ3RleHQtYWxpZ246IGNlbnRlcjsnICsgdGVtcC5zdWJzdHJpbmcoc3R5bGVJbmRleCArIDEwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IHRlbXAuaW5kZXhPZihsYXRleEl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAgPSB0ZW1wLnN1YnN0cmluZygwLCBpbmRleCkgKyBpbWFnZSArIHRlbXAuc3Vic3RyaW5nKGluZGV4ICsgbGF0ZXhJdGVtLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZGF0YVtmaWVsZCArICdQcmludCddID0gdGVtcDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
|