@sd-angular/core 1.2.60 → 1.2.61
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/sd-angular-core-upload-excel.umd.js +27 -8
- package/bundles/sd-angular-core-upload-excel.umd.js.map +1 -1
- package/bundles/sd-angular-core-upload-excel.umd.min.js +1 -1
- package/bundles/sd-angular-core-upload-excel.umd.min.js.map +1 -1
- package/esm2015/upload-excel/src/lib/upload-excel.component.js +16 -9
- package/fesm2015/sd-angular-core-upload-excel.js +15 -8
- package/fesm2015/sd-angular-core-upload-excel.js.map +1 -1
- package/package.json +1 -1
- package/{sd-angular-core-1.2.60.tgz → sd-angular-core-1.2.61.tgz} +0 -0
|
@@ -352,16 +352,23 @@ export class SdUploadExcel {
|
|
|
352
352
|
});
|
|
353
353
|
this.export = () => __awaiter(this, void 0, void 0, function* () {
|
|
354
354
|
this.loadingService.start();
|
|
355
|
+
const columns = [{
|
|
356
|
+
field: 'sdMessage',
|
|
357
|
+
title: this.translateService.translate('Upload message'),
|
|
358
|
+
width: '250px',
|
|
359
|
+
required: false
|
|
360
|
+
}, ...this.option.columns.filter(column => this.sdColumnHidden.transform(column))];
|
|
355
361
|
yield this.exportService.export({
|
|
356
|
-
columns
|
|
357
|
-
field: 'sdMessage',
|
|
358
|
-
title: this.translateService.translate('Upload message'),
|
|
359
|
-
width: '250px',
|
|
360
|
-
required: false
|
|
361
|
-
}, ...this.option.columns.filter(column => this.sdColumnHidden.transform(column))],
|
|
362
|
+
columns,
|
|
362
363
|
items: this.filteredItems.map(e => {
|
|
363
|
-
var _a, _b, _c, _d;
|
|
364
|
-
|
|
364
|
+
var _a, _b, _c, _d, _e;
|
|
365
|
+
let result = {
|
|
366
|
+
sdMessage: (_d = (((_a = e.validation) === null || _a === void 0 ? void 0 : _a.error) || ((_b = e.validation) === null || _b === void 0 ? void 0 : _b.warning) || ((_c = e.validation) === null || _c === void 0 ? void 0 : _c.success))) === null || _d === void 0 ? void 0 : _d.replace(/<strong>/g, '').replace(/<\/strong>/g, '').replace(/<br>/g, '\n')
|
|
367
|
+
};
|
|
368
|
+
for (const column of columns) {
|
|
369
|
+
result = Object.assign(Object.assign({}, result), { [column.field]: (_e = e.sdOrigin) === null || _e === void 0 ? void 0 : _e[column.field] });
|
|
370
|
+
}
|
|
371
|
+
return result;
|
|
365
372
|
})
|
|
366
373
|
}).finally(this.loadingService.stop);
|
|
367
374
|
});
|
|
@@ -494,4 +501,4 @@ SdUploadExcel.propDecorators = {
|
|
|
494
501
|
modal: [{ type: ViewChild, args: ['modal',] }],
|
|
495
502
|
paginator: [{ type: ViewChild, args: [MatPaginator,] }]
|
|
496
503
|
};
|
|
497
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWV4Y2VsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJDOi9Vc2Vycy9uZ2hpYXR0MTVfb25lbW91bnQvRG9jdW1lbnRzL2xpYi1jb3JlLXVpL3Byb2plY3RzL3NkLWNvcmUvdXBsb2FkLWV4Y2VsLyIsInNvdXJjZXMiOlsic3JjL2xpYi91cGxvYWQtZXhjZWwuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ2xHLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUN2QixPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFNeEIsT0FBTyxFQUNMLGVBQWUsRUFDaEIsTUFBTSx5QkFBeUIsQ0FBQztBQUVqQyxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2pCLE1BQU0sMEJBQTBCLENBQUM7QUFFbEMsT0FBTyxFQUNMLGtCQUFrQixFQUNuQixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBR3BDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQVFoRSxNQUFNLE9BQU8sYUFBYTtJQTBCeEIsWUFDVSxHQUFzQixFQUN0QixhQUE4QixFQUM5QixnQkFBb0MsRUFDcEMsYUFBOEIsRUFDOUIsY0FBa0MsRUFDbEMsY0FBZ0M7UUFMaEMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsa0JBQWEsR0FBYixhQUFhLENBQWlCO1FBQzlCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBb0I7UUFDcEMsa0JBQWEsR0FBYixh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cG9uZW50LCBPbkluaXQsIElucHV0LCBWaWV3Q2hpbGQsIENoYW5nZURldGVjdG9yUmVmLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0ICogYXMgdXVpZCBmcm9tICd1dWlkJztcclxuaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcclxuaW1wb3J0IFhMU1ggZnJvbSAneGxzeCc7XHJcblxyXG5pbXBvcnQge1xyXG4gIFNkRXhjZWxTZXJ2aWNlLCBFeGNlbFRlbXBsYXRlXHJcbn0gZnJvbSAnQHNkLWFuZ3VsYXIvY29yZS9leGNlbCc7XHJcblxyXG5pbXBvcnQge1xyXG4gIFNkTm90aWZ5U2VydmljZVxyXG59IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvbm90aWZ5JztcclxuXHJcbmltcG9ydCB7XHJcbiAgU2RMb2FkaW5nU2VydmljZVxyXG59IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvbG9hZGluZyc7XHJcblxyXG5pbXBvcnQge1xyXG4gIFNkVHJhbnNsYXRlU2VydmljZVxyXG59IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvdHJhbnNsYXRlJztcclxuaW1wb3J0IHsgTWF0UGFnaW5hdG9yIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFNkTW9kYWwgfSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL21vZGFsJztcclxuaW1wb3J0IHsgU2RVcGxvYWRFeGNlbE9wdGlvbiwgU2RVcGxvYWRFeGNlbFZhbGlkYXRpb24gfSBmcm9tICcuL3VwbG9hZC1leGNlbC5tb2RlbCc7XHJcbmltcG9ydCB7IFNkRXhwb3J0U2VydmljZSB9IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvZXhwb3J0JztcclxuaW1wb3J0IHsgU2RDb2x1bW5IaWRkZW5QaXBlIH0gZnJvbSAnLi9waXBlcy9jb2x1bW0taGlkZGVuLnBpcGUnO1xyXG50eXBlIEFPQSA9IEFycmF5PEFycmF5PGFueT4+O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzZC11cGxvYWQtZXhjZWwnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi91cGxvYWQtZXhjZWwuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3VwbG9hZC1leGNlbC5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTZFVwbG9hZEV4Y2VsIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIHByaXZhdGUgaW1wb3J0SWQgPSAnSScgKyB1dWlkLnY0KCk7XHJcbiAgQElucHV0KCkgb3B0aW9uOiBTZFVwbG9hZEV4Y2VsT3B0aW9uO1xyXG4gIEBWaWV3Q2hpbGQoJ21vZGFsJykgbW9kYWw6IFNkTW9kYWw7XHJcbiAgaXRlbXM6IEV4Y2VsSXRlbVtdID0gW107XHJcbiAgb3JpZ2luSXRlbXM6IGFueVtdID0gW107XHJcbiAgaGFzRGVzY3JpcHRpb24gPSBmYWxzZTtcclxuXHJcbiAgc2hvd2luZzogJ0FMTCcgfCAnU1VDQ0VTUycgfCAnV0FSTklORycgfCAnRVJST1InID0gJ0FMTCc7XHJcbiAgZmlsdGVyZWRJdGVtczogRXhjZWxJdGVtW10gPSBbXTtcclxuICB2aWV3SXRlbXM6IEV4Y2VsSXRlbVtdID0gW107XHJcbiAgbnVtYmVyT2ZTdWNjZXNzID0gMDtcclxuICBudW1iZXJPZkVycm9yID0gMDtcclxuICBudW1iZXJPZldhcm5pbmcgPSAwO1xyXG4gIGZpbGU6IEZpbGU7XHJcbiAgI3BhZ2luYXRvcjogTWF0UGFnaW5hdG9yO1xyXG4gIEBWaWV3Q2hpbGQoTWF0UGFnaW5hdG9yKSBzZXQgcGFnaW5hdG9yKHBhZ2luYXRvcjogTWF0UGFnaW5hdG9yKSB7XHJcbiAgICBpZiAocGFnaW5hdG9yICYmIHRoaXMuI3BhZ2luYXRvciAhPT0gcGFnaW5hdG9yKSB7XHJcbiAgICAgIHRoaXMuI3BhZ2luYXRvciA9IHBhZ2luYXRvcjtcclxuICAgICAgdGhpcy4jc3Vic2NyaXB0aW9uLmFkZChwYWdpbmF0b3IucGFnZS5zdWJzY3JpYmUodGhpcy4jcmVsb2FkKSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gICNzdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XHJcbiAgdXBsb2FkaW5nOiBib29sZWFuO1xyXG4gIGlzVXBsb2FkZWQ6IGJvb2xlYW47XHJcbiAgaXNEb3dubG9hZFRlbXBsYXRlID0gZmFsc2U7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIGV4cG9ydFNlcnZpY2U6IFNkRXhwb3J0U2VydmljZSxcclxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogU2RUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBub3RpZnlTZXJ2aWNlOiBTZE5vdGlmeVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNkQ29sdW1uSGlkZGVuOiBTZENvbHVtbkhpZGRlblBpcGUsXHJcbiAgICBwcml2YXRlIGxvYWRpbmdTZXJ2aWNlOiBTZExvYWRpbmdTZXJ2aWNlKSB7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuaXNVcGxvYWRlZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLiNzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIG9wZW4gPSAoKSA9PiB7XHJcbiAgICB0aGlzLiNyZXNldCgpO1xyXG4gICAgdGhpcy5tb2RhbC5vcGVuKCk7XHJcbiAgfVxyXG5cclxuICBjbG9zZSA9ICgpID0+IHtcclxuICAgIHRoaXMubW9kYWwuY2xvc2UoKTtcclxuICB9XHJcblxyXG4gICNyZXNldCA9ICgpID0+IHtcclxuICAgIHRoaXMub3JpZ2luSXRlbXMgPSBbXTtcclxuICAgIHRoaXMuaXRlbXMgPSBbXTtcclxuICAgIHRoaXMuZmlsdGVyZWRJdGVtcyA9IFtdO1xyXG4gICAgdGhpcy52aWV3SXRlbXMgPSBbXTtcclxuICAgIHRoaXMubnVtYmVyT2ZTdWNjZXNzID0gMDtcclxuICAgIHRoaXMubnVtYmVyT2ZFcnJvciA9IDA7XHJcbiAgICB0aGlzLm51bWJlck9mV2FybmluZyA9IDA7XHJcbiAgICB0aGlzLnNob3dpbmcgPSAnQUxMJztcclxuICB9XHJcblxyXG4gICNyZWxvYWQgPSAoKSA9PiB7XHJcbiAgICBjb25zdCBwYWdlSW5kZXggPSB0aGlzLiNwYWdpbmF0b3IucGFnZUluZGV4O1xyXG4gICAgY29uc3QgcGFnZVNpemUgPSB0aGlzLiNwYWdpbmF0b3IucGFnZVNpemU7XHJcbiAgICB0aGlzLmZpbHRlcmVkSXRlbXMgPSB0aGlzLml0ZW1zLmZpbHRlcigoaXRlbSkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5zaG93aW5nID09PSAnU1VDQ0VTUycpIHtcclxuICAgICAgICByZXR1cm4gIWl0ZW0udmFsaWRhdGlvbj8uZXJyb3IgJiYgIWl0ZW0udmFsaWRhdGlvbj8ud2FybmluZztcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLnNob3dpbmcgPT09ICdXQVJOSU5HJykge1xyXG4gICAgICAgIHJldHVybiAhIWl0ZW0udmFsaWRhdGlvbj8ud2FybmluZyAmJiAhaXRlbS52YWxpZGF0aW9uPy5lcnJvcjtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLnNob3dpbmcgPT09ICdFUlJPUicpIHtcclxuICAgICAgICByZXR1cm4gISFpdGVtLnZhbGlkYXRpb24/LmVycm9yO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLnZpZXdJdGVtcyA9IHRoaXMuZmlsdGVyZWRJdGVtc1xyXG4gICAgICAuZmlsdGVyKChpdGVtLCBpbmRleCkgPT4gaW5kZXggPj0gcGFnZUluZGV4ICogcGFnZVNpemUgJiYgaW5kZXggPCAocGFnZUluZGV4ICsgMSkgKiBwYWdlU2l6ZSk7XHJcblxyXG4gICAgdGhpcy5udW1iZXJPZlN1Y2Nlc3MgPSB0aGlzLml0ZW1zLmZpbHRlcihpdGVtID0+ICFpdGVtLnZhbGlkYXRpb24/LmVycm9yICYmICFpdGVtLnZhbGlkYXRpb24/Lndhcm5pbmcpLmxlbmd0aDtcclxuICAgIHRoaXMubnVtYmVyT2ZFcnJvciA9IHRoaXMuaXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS52YWxpZGF0aW9uPy5lcnJvcikubGVuZ3RoO1xyXG4gICAgdGhpcy5udW1iZXJPZldhcm5pbmcgPSB0aGlzLml0ZW1zLmZpbHRlcihpdGVtID0+IGl0ZW0udmFsaWRhdGlvbj8ud2FybmluZyAmJiAhaXRlbS52YWxpZGF0aW9uPy5lcnJvcikubGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgdXBsb2FkID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgeyB0cmFuc2xhdGUgfSA9IHRoaXMudHJhbnNsYXRlU2VydmljZTtcclxuICAgICAgY29uc3QgeyBpdGVtcywgZmlsZSB9ID0gYXdhaXQgdGhpcy4jaW1wb3J0KCk7XHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbi5jb2x1bW5zLnNvbWUoZSA9PiAhIWUuZGVzY3JpcHRpb24pKSB7XHJcbiAgICAgICAgdGhpcy5oYXNEZXNjcmlwdGlvbiA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5oYXNEZXNjcmlwdGlvbiA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IG9mZnNldCA9IHRoaXMuaGFzRGVzY3JpcHRpb24gPyAyIDogMTtcclxuICAgICAgaXRlbXMuc3BsaWNlKDAsIG9mZnNldCk7XHJcbiAgICAgIGlmIChpdGVtcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICB0aGlzLm5vdGlmeVNlcnZpY2Uubm90aWZ5Lndhcm5pbmcoYCR7dHJhbnNsYXRlKGBObyBkYXRhIHRvIGltcG9ydGApfWApO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoaXRlbXMubGVuZ3RoID4gdGhpcy5vcHRpb24ubGltaXQpIHtcclxuICAgICAgICB0aGlzLm5vdGlmeVNlcnZpY2Uubm90aWZ5Lndhcm5pbmcoYCR7dHJhbnNsYXRlKGBMaW1pdCByb3dzYCl9OiAke3RoaXMub3B0aW9uLmxpbWl0fWApO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLiNyZXNldCgpO1xyXG4gICAgICB0aGlzLm9yaWdpbkl0ZW1zID0gaXRlbXM7XHJcbiAgICAgIGNvbnN0IHsgbWFwcGluZ0l0ZW1zIH0gPSB0aGlzLm9wdGlvbjtcclxuICAgICAgaWYgKG1hcHBpbmdJdGVtcykge1xyXG4gICAgICAgIGNvbnN0IGRhdGEgPSBtYXBwaW5nSXRlbXMoaXRlbXMpO1xyXG5cclxuICAgICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIFByb21pc2UpIHtcclxuICAgICAgICAgIHRoaXMudXBsb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuaXRlbXMgPSBhd2FpdCBkYXRhLmZpbmFsbHkoKCkgPT4gdGhpcy51cGxvYWRpbmcgPSBmYWxzZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuaXRlbXMgPSBkYXRhIHx8IGl0ZW1zO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLml0ZW1zID0gaXRlbXM7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5maWxlID0gZmlsZTtcclxuICAgICAgdGhpcy5sb2FkaW5nU2VydmljZS5zdGFydCgpO1xyXG4gICAgICBmb3IgKGNvbnN0IFtpZHgsIGl0ZW1dIG9mIHRoaXMuaXRlbXMuZW50cmllcygpKSB7XHJcbiAgICAgICAgaXRlbS5zZE9yaWdpbiA9IHsgLi4uaXRlbSB9O1xyXG4gICAgICAgIGl0ZW0uZXhjZWxJbmRleCA9IGlkeCArICh0aGlzLmhhc0Rlc2NyaXB0aW9uID8gNCA6IDMpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMudmFsaWRhdGUoaXRlbSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIE7hur91IGtow7RuZyBjw7MgZXJyb3IgdGjDrCB0aeG6v3AgdOG7pWMgdmFsaWRhdGUgdOG7qyBvcHRpb24gdmFsaWRhdGUgdHJ1eeG7gW4gdsOgb1xyXG4gICAgICBpZiAoIXRoaXMuaXRlbXMuc29tZShpdGVtID0+ICEhaXRlbS52YWxpZGF0aW9uLmVycm9yKSAmJiB0aGlzLm9wdGlvbi5lcnJvclZhbGlkYXRpb24pIHtcclxuICAgICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgdGhpcy5vcHRpb24uZXJyb3JWYWxpZGF0aW9uKHRoaXMuaXRlbXMpO1xyXG4gICAgICAgIHJlc3VsdHMuZm9yRWFjaChyZXN1bHQgPT4gdGhpcy5pdGVtc1tyZXN1bHQuaWR4XS52YWxpZGF0aW9uLmVycm9yID0gcmVzdWx0Lm1lc3NhZ2UpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBO4bq/dSBraMO0bmcgY8OzIHdhcm5pbmcgdGjDrCB0aeG6v3AgdOG7pWMgdmFsaWRhdGUgdOG7qyBvcHRpb24gdmFsaWRhdGUgdHJ1eeG7gW4gdsOgb1xyXG4gICAgICBpZiAoIXRoaXMuaXRlbXMuc29tZShpdGVtID0+ICEhaXRlbS52YWxpZGF0aW9uLndhcm5pbmcpICYmIHRoaXMub3B0aW9uLndhcm5pbmdWYWxpZGF0aW9uKSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHRoaXMub3B0aW9uLndhcm5pbmdWYWxpZGF0aW9uKHRoaXMuaXRlbXMpO1xyXG4gICAgICAgIHJlc3VsdHMuZm9yRWFjaChyZXN1bHQgPT4gdGhpcy5pdGVtc1tyZXN1bHQuaWR4XS52YWxpZGF0aW9uLndhcm5pbmcgPSByZXN1bHQubWVzc2FnZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuI3BhZ2luYXRvci5wYWdlSW5kZXggPSAwO1xyXG4gICAgICB0aGlzLiNyZWxvYWQoKTtcclxuICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuICAgICAgdGhpcy5pc1VwbG9hZGVkID0gZmFsc2U7XHJcbiAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgdGhpcy5ub3RpZnlTZXJ2aWNlLmhhbmRsZS5lcnJvcihlcnIpO1xyXG4gICAgfSBmaW5hbGx5IHtcclxuICAgICAgdGhpcy5sb2FkaW5nU2VydmljZS5zdG9wKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB2YWxpZGF0ZSA9IGFzeW5jIChpdGVtOiB7IFt4OiBzdHJpbmddOiBhbnk7IHZhbGlkYXRpb246IFNkVXBsb2FkRXhjZWxWYWxpZGF0aW9uOyB9KSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZGF0aW9uOiBTZFVwbG9hZEV4Y2VsVmFsaWRhdGlvbiA9IHtcclxuICAgICAgZXJyb3I6ICcnLFxyXG4gICAgICB3YXJuaW5nOiAnJyxcclxuICAgICAgZGF0YToge31cclxuICAgIH07XHJcbiAgICBjb25zdCB7IHRyYW5zbGF0ZSB9ID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlO1xyXG4gICAgZm9yIChjb25zdCBjb2x1bW4gb2YgdGhpcy5vcHRpb24uY29sdW1ucykge1xyXG4gICAgICBpZiAoIXRoaXMuc2RDb2x1bW5IaWRkZW4udHJhbnNmb3JtKGNvbHVtbikpIHtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG4gICAgICB2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXSA9IHt9O1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGlmIChjb2x1bW4uZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIGl0ZW1bY29sdW1uLmZpZWxkXSA9IGl0ZW1bY29sdW1uLmZpZWxkXSA/PyBjb2x1bW4uZGVmYXVsdFZhbHVlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnJlcXVpcmVkICYmICFpdGVtW2NvbHVtbi5maWVsZF0gJiYgaXRlbVtjb2x1bW4uZmllbGRdICE9PSAwKSB7XHJcbiAgICAgICAgICB2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvciA9IGAke3RyYW5zbGF0ZSgncmVxdWlyZWQnKX1gO1xyXG4gICAgICAgICAgdmFsaWRhdGlvbi5lcnJvciArPSBgPHN0cm9uZz5bJHtjb2x1bW4udGl0bGUgfHwgY29sdW1uLmZpZWxkfV08L3N0cm9uZz4gJHt2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvcn08YnI+YDtcclxuICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IChpdGVtW2NvbHVtbi5maWVsZF0gfHwgJycpLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICBpZiAoY29sdW1uLm1pbkxlbmd0aCAhPT0gdW5kZWZpbmVkICYmIHZhbHVlLmxlbmd0aCA8IGNvbHVtbi5taW5MZW5ndGgpIHtcclxuICAgICAgICAgICAgdmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3IgPSBgJHt0cmFuc2xhdGUoJ01pbiBsZW5ndGgnKX06ICR7Y29sdW1uLm1pbkxlbmd0aH1gO1xyXG4gICAgICAgICAgICB2YWxpZGF0aW9uLmVycm9yICs9IGA8c3Ryb25nPlske2NvbHVtbi50aXRsZSB8fCBjb2x1bW4uZmllbGR9XTwvc3Ryb25nPiAke3ZhbGlkYXRpb24uZGF0YVtjb2x1bW4uZmllbGRdLmVycm9yfTxicj5gO1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChjb2x1bW4ubWF4TGVuZ3RoICE9PSB1bmRlZmluZWQgJiYgdmFsdWUubGVuZ3RoID4gY29sdW1uLm1heExlbmd0aCkge1xyXG4gICAgICAgICAgICB2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvciA9IGAke3RyYW5zbGF0ZSgnTWF4IGxlbmd0aCcpfTogJHtjb2x1bW4ubWF4TGVuZ3RofWA7XHJcbiAgICAgICAgICAgIHZhbGlkYXRpb24uZXJyb3IgKz0gYDxzdHJvbmc+WyR7Y29sdW1uLnRpdGxlIHx8IGNvbHVtbi5maWVsZH1dPC9zdHJvbmc+ICR7dmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3J9PGJyPmA7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaXRlbVtjb2x1bW4uZmllbGRdID0gdmFsdWU7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICAgIGlmIChpdGVtW2NvbHVtbi5maWVsZF0pIHtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSAraXRlbVtjb2x1bW4uZmllbGRdO1xyXG4gICAgICAgICAgICBpZiAoTnVtYmVyLmlzTmFOKHZhbHVlKSkge1xyXG4gICAgICAgICAgICAgIHZhbGlkYXRpb24uZGF0YVtjb2x1bW4uZmllbGRdLmVycm9yID0gYCR7aXRlbVtjb2x1bW4uZmllbGRdfSAke3RyYW5zbGF0ZSgnaXMgbm90IGEgbnVtYmVyJyl9YDtcclxuICAgICAgICAgICAgICB2YWxpZGF0aW9uLmVycm9yICs9IGA8c3Ryb25nPlske2NvbHVtbi50aXRsZSB8fCBjb2x1bW4uZmllbGR9XTwvc3Ryb25nPiAke3ZhbGlkYXRpb24uZGF0YVtjb2x1bW4uZmllbGRdLmVycm9yfTxicj5gO1xyXG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGl0ZW1bY29sdW1uLmZpZWxkXSA9IHZhbHVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKCFpdGVtW2NvbHVtbi5maWVsZF0gJiYgaXRlbVtjb2x1bW4uZmllbGRdICE9PSAwKSB7XHJcbiAgICAgICAgICAgIGl0ZW1bY29sdW1uLmZpZWxkXSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChjb2x1bW4ubWluVmFsdWUgIT09IHVuZGVmaW5lZCAmJiBpdGVtW2NvbHVtbi5maWVsZF0gPCBjb2x1bW4ubWluVmFsdWUpIHtcclxuICAgICAgICAgICAgdmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3IgPSBgJHtpdGVtW2NvbHVtbi5maWVsZF19ICR7dHJhbnNsYXRlKCdNaW4gdmFsdWUnKX06ICR7Y29sdW1uLm1pblZhbHVlfWA7XHJcbiAgICAgICAgICAgIHZhbGlkYXRpb24uZXJyb3IgKz0gYDxzdHJvbmc+WyR7Y29sdW1uLnRpdGxlIHx8IGNvbHVtbi5maWVsZH1dPC9zdHJvbmc+ICR7dmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3J9PGJyPmA7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGNvbHVtbi5tYXhWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIGl0ZW1bY29sdW1uLmZpZWxkXSA+IGNvbHVtbi5tYXhWYWx1ZSkge1xyXG4gICAgICAgICAgICB2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvciA9IGAke2l0ZW1bY29sdW1uLmZpZWxkXX0gJHt0cmFuc2xhdGUoJ01heCB2YWx1ZScpfTogJHtjb2x1bW4ubWF4VmFsdWV9YDtcclxuICAgICAgICAgICAgdmFsaWRhdGlvbi5lcnJvciArPSBgPHN0cm9uZz5bJHtjb2x1bW4udGl0bGUgfHwgY29sdW1uLmZpZWxkfV08L3N0cm9uZz4gJHt2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvcn08YnI+YDtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ2Jvb2wnKSB7XHJcbiAgICAgICAgICBpZiAoaXRlbVtjb2x1bW4uZmllbGRdID09PSAwIHx8IGl0ZW1bY29sdW1uLmZpZWxkXSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgaXRlbVtjb2x1bW4uZmllbGRdID0gJzAnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGl0ZW1bY29sdW1uLmZpZWxkXSA9PT0gMSB8fCBpdGVtW2NvbHVtbi5maWVsZF0gPT09IHRydWUpIHtcclxuICAgICAgICAgICAgaXRlbVtjb2x1bW4uZmllbGRdID0gJzEnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGl0ZW1bY29sdW1uLmZpZWxkXSkge1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9ICtpdGVtW2NvbHVtbi5maWVsZF07XHJcbiAgICAgICAgICAgIGlmIChOdW1iZXIuaXNOYU4odmFsdWUpIHx8ICh2YWx1ZSAhPT0gMCAmJiB2YWx1ZSAhPT0gMSkpIHtcclxuICAgICAgICAgICAgICB2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvciA9IGAke3RyYW5zbGF0ZSgnVmFsdWUgc2hvdWQgYmUgMCBvciAxJyl9YDtcclxuICAgICAgICAgICAgICB2YWxpZGF0aW9uLmVycm9yICs9IGA8c3Ryb25nPlske2NvbHVtbi50aXRsZSB8fCBjb2x1bW4uZmllbGR9XTwvc3Ryb25nPiAke3ZhbGlkYXRpb24uZGF0YVtjb2x1bW4uZmllbGRdLmVycm9yfTxicj5gO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ3ZhbHVlcycpIHtcclxuICAgICAgICAgIGlmIChpdGVtW2NvbHVtbi5maWVsZF0gJiYgdHlwZW9mIChpdGVtW2NvbHVtbi5maWVsZF0pICE9PSAnbnVtYmVyJyAmJiB0eXBlb2YgKGl0ZW1bY29sdW1uLmZpZWxkXSkgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRpb24uZGF0YVtjb2x1bW4uZmllbGRdLmVycm9yID0gYCR7aXRlbVtjb2x1bW4uZmllbGRdfSAke3RyYW5zbGF0ZSgnSW52YWxpZCBkYXRhIHR5cGUnKX1gO1xyXG4gICAgICAgICAgICB2YWxpZGF0aW9uLmVycm9yICs9IGA8c3Ryb25nPlske2NvbHVtbi50aXRsZSB8fCBjb2x1bW4uZmllbGR9XTwvc3Ryb25nPiAke3ZhbGlkYXRpb24uZGF0YVtjb2x1bW4uZmllbGRdLmVycm9yfTxicj5gO1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChjb2x1bW4uY2hlY2tWYWx1ZUluQXJyYXkgJiYgaXRlbVtjb2x1bW4uZmllbGRdICYmICFjb2x1bW4udmFsdWVzLnNvbWUoZSA9PiBlLnRvU3RyaW5nKCkgPT09IGl0ZW1bY29sdW1uLmZpZWxkXS50b1N0cmluZygpKSkge1xyXG4gICAgICAgICAgICB2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvciA9IGAke2l0ZW1bY29sdW1uLmZpZWxkXX0gJHt0cmFuc2xhdGUoJ1ZhbHVlIG5vdCBpbicpfSBbJHtjb2x1bW4udmFsdWVzLmpvaW4oKX1dYDtcclxuICAgICAgICAgICAgdmFsaWRhdGlvbi5lcnJvciArPSBgPHN0cm9uZz5bJHtjb2x1bW4udGl0bGUgfHwgY29sdW1uLmZpZWxkfV08L3N0cm9uZz4gJHt2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvcn08YnI+YDtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ2RhdGUnIHx8IGNvbHVtbi50eXBlID09PSAnZGF0ZXRpbWUnIHx8IGNvbHVtbi50eXBlID09PSAndGltZScpIHtcclxuICAgICAgICAgIGNvbnN0IHsgdHlwZSwgZm9ybWF0IH0gPSBjb2x1bW47XHJcbiAgICAgICAgICBjb25zdCB2YWwgPSBpdGVtW2NvbHVtbi5maWVsZF07XHJcbiAgICAgICAgICBpZiAoZm9ybWF0ICYmIGl0ZW1bY29sdW1uLmZpZWxkXSkge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mICh2YWwpICE9PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgIHZhbGlkYXRpb24uZGF0YVtjb2x1bW4uZmllbGRdLmVycm9yID0gYCR7dHJhbnNsYXRlKCdJbnZhbGlkIGZvcm1hdCcpfSAke2NvbHVtbi5mb3JtYXR9OiAke3ZhbH1gO1xyXG4gICAgICAgICAgICAgIHZhbGlkYXRpb24uZXJyb3IgKz0gYDxzdHJvbmc+WyR7Y29sdW1uLnRpdGxlIHx8IGNvbHVtbi5maWVsZH1dPC9zdHJvbmc+ICR7dmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3J9PGJyPmA7XHJcbiAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdkYXRlJyAmJiAhdGhpcy4jaXNWYWxpZERhdGUoZm9ybWF0LCB2YWwpKSB7XHJcbiAgICAgICAgICAgICAgdmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3IgPSBgJHt0cmFuc2xhdGUoJ0ludmFsaWQgZm9ybWF0Jyl9ICR7Y29sdW1uLmZvcm1hdH06ICR7dmFsfWA7XHJcbiAgICAgICAgICAgICAgdmFsaWRhdGlvbi5lcnJvciArPSBgPHN0cm9uZz5bJHtjb2x1bW4udGl0bGUgfHwgY29sdW1uLmZpZWxkfV08L3N0cm9uZz4gJHt2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvcn08YnI+YDtcclxuICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gJ3RpbWUnICYmICF0aGlzLiNpc1ZhbGlkVGltZShmb3JtYXQsIHZhbCkpIHtcclxuICAgICAgICAgICAgICB2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvciA9IGAke3RyYW5zbGF0ZSgnSW52YWxpZCBmb3JtYXQnKX0gJHtjb2x1bW4uZm9ybWF0fTogJHt2YWx9YDtcclxuICAgICAgICAgICAgICB2YWxpZGF0aW9uLmVycm9yICs9IGA8c3Ryb25nPlske2NvbHVtbi50aXRsZSB8fCBjb2x1bW4uZmllbGR9XTwvc3Ryb25nPiAke3ZhbGlkYXRpb24uZGF0YVtjb2x1bW4uZmllbGRdLmVycm9yfTxicj5gO1xyXG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0eXBlID09PSAnZGF0ZXRpbWUnICYmICF0aGlzLiNpc1ZhbGlkRGF0ZVRpbWUoZm9ybWF0LCB2YWwpKSB7XHJcbiAgICAgICAgICAgICAgdmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3IgPSBgJHt0cmFuc2xhdGUoJ0ludmFsaWQgZm9ybWF0Jyl9ICR7Y29sdW1uLmZvcm1hdH06ICR7dmFsfWA7XHJcbiAgICAgICAgICAgICAgdmFsaWRhdGlvbi5lcnJvciArPSBgPHN0cm9uZz5bJHtjb2x1bW4udGl0bGUgfHwgY29sdW1uLmZpZWxkfV08L3N0cm9uZz4gJHt2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvcn08YnI+YDtcclxuICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpdGVtW2NvbHVtbi5maWVsZF0gPSBEYXRlLnBhcnNlRnJvbSh2YWwsIGNvbHVtbi5mb3JtYXQpLnRvRm9ybWF0KCdNTS9kZC95eXl5IEhIOm1tOnNzJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoaXRlbVtjb2x1bW4uZmllbGRdICYmICFEYXRlLmlzRGF0ZShpdGVtW2NvbHVtbi5maWVsZF0pKSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRpb24uZGF0YVtjb2x1bW4uZmllbGRdLmVycm9yID0gYCR7dHJhbnNsYXRlKCdJbnZhbGlkIGRhdGUnKX06ICR7aXRlbVtjb2x1bW4uZmllbGRdfWA7XHJcbiAgICAgICAgICAgIHZhbGlkYXRpb24uZXJyb3IgKz0gYDxzdHJvbmc+WyR7Y29sdW1uLnRpdGxlIHx8IGNvbHVtbi5maWVsZH1dPC9zdHJvbmc+ICR7dmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3J9PGJyPmA7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvciAmJiBjb2x1bW4uZXJyb3JWYWxpZGF0aW9uKSB7XHJcbiAgICAgICAgICBjb25zdCBlcnJvciA9IGF3YWl0IGNvbHVtbi5lcnJvclZhbGlkYXRpb24oaXRlbSwgaXRlbVtjb2x1bW4uZmllbGRdKTtcclxuICAgICAgICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgICAgICB2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvciA9IGAke2Vycm9yfWA7XHJcbiAgICAgICAgICAgIHZhbGlkYXRpb24uZXJyb3IgKz0gYDxzdHJvbmc+WyR7Y29sdW1uLnRpdGxlIHx8IGNvbHVtbi5maWVsZH1dPC9zdHJvbmc+ICR7ZXJyb3J9PGJyPmA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXZhbGlkYXRpb24uZGF0YVtjb2x1bW4uZmllbGRdLndhcm5pbmcgJiYgY29sdW1uLndhcm5pbmdWYWxpZGF0aW9uKSB7XHJcbiAgICAgICAgICBjb25zdCB3YXJuaW5nID0gYXdhaXQgY29sdW1uLndhcm5pbmdWYWxpZGF0aW9uKGl0ZW0sIGl0ZW1bY29sdW1uLmZpZWxkXSk7XHJcbiAgICAgICAgICBpZiAod2FybmluZykge1xyXG4gICAgICAgICAgICB2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS53YXJuaW5nID0gYCR7d2FybmluZ31gO1xyXG4gICAgICAgICAgICB2YWxpZGF0aW9uLndhcm5pbmcgKz0gYDxzdHJvbmc+WyR7Y29sdW1uLnRpdGxlIHx8IGNvbHVtbi5maWVsZH1dPC9zdHJvbmc+ICR7d2FybmluZ308YnI+YDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gY2F0Y2ggKGV4KSB7XHJcbiAgICAgICAgdmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3IgPSBgJHtleD8ubWVzc2FnZSB8fCBleD8uZXJyb3IgfHwgZXggfHwgJ0PDsyBs4buXaSB44bqjeSByYSd9YDtcclxuICAgICAgICB2YWxpZGF0aW9uLmVycm9yICs9IGA8c3Ryb25nPlske2NvbHVtbi50aXRsZSB8fCBjb2x1bW4uZmllbGR9XTwvc3Ryb25nPiAke3ZhbGlkYXRpb24uZGF0YVtjb2x1bW4uZmllbGRdLmVycm9yfTxicj5gO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpdGVtLnZhbGlkYXRpb24gPSB2YWxpZGF0aW9uO1xyXG4gIH1cclxuXHJcbiAgI21hcEl0ZW0gPSAoaXRlbTogRXhjZWxJdGVtKSA9PiB7XHJcbiAgICBjb25zdCB7IHZhbGlkYXRpb24sIHNkT3JpZ2luLCBleGNlbEluZGV4LCAuLi5yZW1haW4gfSA9IGl0ZW07XHJcbiAgICByZXR1cm4gcmVtYWluO1xyXG4gIH1cclxuXHJcbiAgYWNjZXB0ID0gKCkgPT4ge1xyXG4gICAgY29uc3Qgc3VjY2Vzc0l0ZW1zID0gdGhpcy5pdGVtcy5maWx0ZXIoaXRlbSA9PiAhaXRlbS52YWxpZGF0aW9uLmVycm9yICYmICFpdGVtLnZhbGlkYXRpb24ud2FybmluZykubWFwKHRoaXMuI21hcEl0ZW0pO1xyXG4gICAgY29uc3QgZXJyb3JJdGVtcyA9IHRoaXMuaXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS52YWxpZGF0aW9uLmVycm9yKS5tYXAodGhpcy4jbWFwSXRlbSk7XHJcbiAgICBjb25zdCB3YXJuaW5nSXRlbXMgPSB0aGlzLml0ZW1zLmZpbHRlcihpdGVtID0+ICFpdGVtLnZhbGlkYXRpb24uZXJyb3IgJiYgaXRlbS52YWxpZGF0aW9uLndhcm5pbmcpLm1hcCh0aGlzLiNtYXBJdGVtKTtcclxuICAgIHRoaXMub3B0aW9uPy5vbkFjY2VwdCh0aGlzLml0ZW1zLm1hcCh0aGlzLiNtYXBJdGVtKSwgc3VjY2Vzc0l0ZW1zLCBlcnJvckl0ZW1zLCB3YXJuaW5nSXRlbXMsIHRoaXMuZmlsZSk7XHJcblxyXG4gICAgdGhpcy5pc1VwbG9hZGVkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHNldFZhbGlkYXRpb24gPSAodmFsaWRhdGVzOiB7IGlkeDogbnVtYmVyLCBtZXNzYWdlRXJyb3I/OiBzdHJpbmcsIG1lc3NhZ2VXYXJuaW5nPzogc3RyaW5nLCBtZXNzYWdlU3VjY2Vzcz86IHN0cmluZyB9W10pID0+IHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbGlkYXRlcykpIHtcclxuICAgICAgdmFsaWRhdGVzLmZvckVhY2godmFsaWRhdGUgPT4ge1xyXG4gICAgICAgIHRoaXMuaXRlbXNbdmFsaWRhdGUuaWR4XS52YWxpZGF0aW9uLmVycm9yID0gdmFsaWRhdGUubWVzc2FnZUVycm9yO1xyXG4gICAgICAgIHRoaXMuaXRlbXNbdmFsaWRhdGUuaWR4XS52YWxpZGF0aW9uLndhcm5pbmcgPSB2YWxpZGF0ZS5tZXNzYWdlV2FybmluZztcclxuICAgICAgICB0aGlzLml0ZW1zW3ZhbGlkYXRlLmlkeF0udmFsaWRhdGlvbi5zdWNjZXNzID0gdmFsaWRhdGUubWVzc2FnZVN1Y2Nlc3M7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy4jcmVsb2FkKCk7XHJcbiAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICB2aWV3ID0gKHNob3dpbmc6ICdBTEwnIHwgJ1NVQ0NFU1MnIHwgJ1dBUk5JTkcnIHwgJ0VSUk9SJyA9ICdBTEwnKSA9PiB7XHJcbiAgICB0aGlzLnNob3dpbmcgPSBzaG93aW5nO1xyXG4gICAgdGhpcy4jcGFnaW5hdG9yLnBhZ2VJbmRleCA9IDA7XHJcbiAgICB0aGlzLiNyZWxvYWQoKTtcclxuICB9XHJcblxyXG4gIGRvd25sb2FkVGVtcGxhdGUgPSBhc3luYyAoKSA9PiB7XHJcbiAgICBjb25zdCBzaGVldHM6IHtcclxuICAgICAgbmFtZTogc3RyaW5nLFxyXG4gICAgICBpdGVtczogYW55W10sXHJcbiAgICAgIGZpZWxkczogc3RyaW5nW11cclxuICAgIH1bXSA9IFtdO1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5vcHRpb24/LnNoZWV0cykpIHtcclxuICAgICAgZm9yIChjb25zdCBzaGVldCBvZiB0aGlzLm9wdGlvbi5zaGVldHMpIHtcclxuICAgICAgICBpZiAoc2hlZXQubmFtZSAmJiBzaGVldC5pdGVtcyAmJiBzaGVldC5maWVsZHMpIHtcclxuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHNoZWV0Lml0ZW1zKSkge1xyXG4gICAgICAgICAgICBzaGVldHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgbmFtZTogc2hlZXQubmFtZSxcclxuICAgICAgICAgICAgICBpdGVtczogc2hlZXQuaXRlbXMsXHJcbiAgICAgICAgICAgICAgZmllbGRzOiBzaGVldC5maWVsZHNcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzaGVldHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgbmFtZTogc2hlZXQubmFtZSxcclxuICAgICAgICAgICAgICBpdGVtczogYXdhaXQgc2hlZXQuaXRlbXMoKSxcclxuICAgICAgICAgICAgICBmaWVsZHM6IHNoZWV0LmZpZWxkc1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IGNvbHVtbk5vdEhpZGRlbiA9IHRoaXMub3B0aW9uLmNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiB0aGlzLnNkQ29sdW1uSGlkZGVuLnRyYW5zZm9ybShjb2x1bW4pKTtcclxuICAgIGNvbnN0IGV4Y2VsVGVtcGxhdGU6IEV4Y2VsVGVtcGxhdGUgPSB7XHJcbiAgICAgIGZpbGVOYW1lOiB0aGlzLm9wdGlvbi5maWxlTmFtZSB8fCAnVGVtcGxhdGUnLFxyXG4gICAgICBjb2x1bW5zOiBjb2x1bW5Ob3RIaWRkZW4ubWFwKGNvbHVtbiA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIGZpZWxkOiBjb2x1bW4uZmllbGQsXHJcbiAgICAgICAgICB0aXRsZTogY29sdW1uLnRpdGxlLFxyXG4gICAgICAgICAgd2lkdGg6IGNvbHVtbi53aWR0aCxcclxuICAgICAgICAgIHJlcXVpcmVkOiBjb2x1bW4ucmVxdWlyZWQsXHJcbiAgICAgICAgICBkZXNjcmlwdGlvbjogY29sdW1uLmRlc2NyaXB0aW9uXHJcbiAgICAgICAgfTtcclxuICAgICAgfSksXHJcbiAgICAgIHNoZWV0c1xyXG4gICAgfTtcclxuICAgIHRoaXMuaXNEb3dubG9hZFRlbXBsYXRlID0gdHJ1ZTtcclxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZXhwb3J0U2VydmljZS5nZW5lcmF0ZVRlbXBsYXRlKGV4Y2VsVGVtcGxhdGUpLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICB0aGlzLmlzRG93bmxvYWRUZW1wbGF0ZSA9IGZhbHNlO1xyXG4gICAgfSk7XHJcbiAgICBpZiAocmVzdWx0Py5maWxlUGF0aCkge1xyXG4gICAgICB0aGlzLmV4cG9ydFNlcnZpY2UuZG93bmxvYWQocmVzdWx0LmZpbGVQYXRoLCBleGNlbFRlbXBsYXRlLmZpbGVOYW1lIHx8ICdUZW1wbGF0ZS54bHN4Jyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBleHBvcnQgPSBhc3luYyAoKSA9PiB7XHJcbiAgICB0aGlzLmxvYWRpbmdTZXJ2aWNlLnN0YXJ0KCk7XHJcbiAgICBhd2FpdCB0aGlzLmV4cG9ydFNlcnZpY2UuZXhwb3J0KHtcclxuICAgICAgY29sdW1uczogW3tcclxuICAgICAgICBmaWVsZDogJ3NkTWVzc2FnZScsXHJcbiAgICAgICAgdGl0bGU6IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ1VwbG9hZCBtZXNzYWdlJyksXHJcbiAgICAgICAgd2lkdGg6ICcyNTBweCcsXHJcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICAgIH0sIC4uLiB0aGlzLm9wdGlvbi5jb2x1bW5zLmZpbHRlcihjb2x1bW4gPT4gdGhpcy5zZENvbHVtbkhpZGRlbi50cmFuc2Zvcm0oY29sdW1uKSldLFxyXG4gICAgICBpdGVtczogdGhpcy5maWx0ZXJlZEl0ZW1zLm1hcChlID0+ICh7XHJcbiAgICAgICAgLi4uZS5zZE9yaWdpbixcclxuICAgICAgICBzZE1lc3NhZ2U6IChlLnZhbGlkYXRpb24/LmVycm9yIHx8IGUudmFsaWRhdGlvbj8ud2FybmluZyB8fCBlLnZhbGlkYXRpb24/LnN1Y2Nlc3MpPy5yZXBsYWNlKC88c3Ryb25nPi9nLCAnJylcclxuICAgICAgICAgIC5yZXBsYWNlKC88XFwvc3Ryb25nPi9nLCAnJylcclxuICAgICAgICAgIC5yZXBsYWNlKC88YnI+L2csICdcXG4nKVxyXG4gICAgICB9KSlcclxuICAgIH0pLmZpbmFsbHkodGhpcy5sb2FkaW5nU2VydmljZS5zdG9wKTtcclxuICB9XHJcblxyXG4gICNpbXBvcnQgPSAoKSA9PiB7XHJcbiAgICBjb25zdCB7IHRyYW5zbGF0ZSB9ID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlO1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHsgaXRlbXM6IGFueVtdLCBmaWxlOiBGaWxlIH0+KChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgaWYgKCQoYCMke3RoaXMuaW1wb3J0SWR9YCkubGVuZ3RoKSB7XHJcbiAgICAgICAgJCgnYm9keScpLmNoaWxkcmVuKGAjJHt0aGlzLmltcG9ydElkfWApLnJlbW92ZSgpO1xyXG4gICAgICB9XHJcbiAgICAgICQoJ2JvZHknKS5hcHBlbmQoYDxpbnB1dCBpZD1cIiR7dGhpcy5pbXBvcnRJZH1cIiBzdHlsZT1cImRpc3BsYXk6IG5vbmVcIiB0eXBlPVwiZmlsZVwiIC8+YCk7XHJcblxyXG4gICAgICAkKGAjJHt0aGlzLmltcG9ydElkfWApLm9uKCdjaGFuZ2UnLCAoZXZ0OiBhbnkpID0+IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgY29uc3QgdGFyZ2V0OiBEYXRhVHJhbnNmZXIgPSBldnQudGFyZ2V0O1xyXG4gICAgICAgICAgaWYgKHRhcmdldC5maWxlcy5sZW5ndGggIT09IDEpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHRyYW5zbGF0ZSgnQ2Fubm90IHVzZSBtdWx0aXBsZSBmaWxlcycpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNvbnN0IGZpbGUgPSB0YXJnZXQuZmlsZXNbMF07XHJcbiAgICAgICAgICBjb25zdCBsYXN0RG90ID0gZmlsZS5uYW1lLmxhc3RJbmRleE9mKCcuJyk7XHJcbiAgICAgICAgICBpZiAobGFzdERvdCA9PT0gLTEpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHRyYW5zbGF0ZSgnSW52YWxpZCBmaWxlIGV4dGVuc2lvbicpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNvbnN0IGV4dGVuc2lvbiA9IGZpbGUubmFtZS5zdWJzdHJpbmcobGFzdERvdCArIDEpO1xyXG4gICAgICAgICAgaWYgKGV4dGVuc2lvbi50b0xvd2VyQ2FzZSgpICE9PSAneGxzeCcpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHRyYW5zbGF0ZSgnUGxlYXNlIHVwbG9hZCAueGxzeCBmaWxlJykpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY29uc3QgcmVhZGVyOiBGaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgICAgIHJlYWRlci5vbmxvYWQgPSAoZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGJzdHI6IHN0cmluZyA9IGUudGFyZ2V0LnJlc3VsdDtcclxuICAgICAgICAgICAgY29uc3Qgd2I6IFhMU1guV29ya0Jvb2sgPSBYTFNYLnJlYWQoYnN0ciwgeyB0eXBlOiAnYmluYXJ5JyB9KTtcclxuICAgICAgICAgICAgY29uc3Qgd3NuYW1lOiBzdHJpbmcgPSB3Yi5TaGVldE5hbWVzWzBdO1xyXG4gICAgICAgICAgICBjb25zdCB3czogWExTWC5Xb3JrU2hlZXQgPSB3Yi5TaGVldHNbd3NuYW1lXTtcclxuICAgICAgICAgICAgY29uc3QgbGluZXM6IEFPQSA9IChYTFNYLnV0aWxzLnNoZWV0X3RvX2pzb24od3MsIHsgaGVhZGVyOiAxIH0pKTtcclxuICAgICAgICAgICAgY29uc3QgcmVjb3JkcyA9IFtdO1xyXG4gICAgICAgICAgICBjb25zdCBoZWFkZXJzID0gbGluZXNbMF07XHJcbiAgICAgICAgICAgIGxpbmVzLnNwbGljZSgwLCAxKTtcclxuICAgICAgICAgICAgbGluZXMuZm9yRWFjaChsaW5lID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCByZWNvcmQgPSB7fTtcclxuICAgICAgICAgICAgICBsZXQgaGFzVmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICBoZWFkZXJzLmZvckVhY2goKGhlYWRlciwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlY29yZFtoZWFkZXJdID0gbGluZVtpbmRleF07XHJcbiAgICAgICAgICAgICAgICBpZiAobGluZVtpbmRleF0gIT09IHVuZGVmaW5lZCAmJiBsaW5lW2luZGV4XSAhPT0gbnVsbCAmJiBsaW5lW2luZGV4XS50b1N0cmluZygpKSB7XHJcbiAgICAgICAgICAgICAgICAgIGhhc1ZhbHVlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKHJlY29yZFtoZWFkZXJdKSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgICAgcmVjb3JkW2hlYWRlcl0gPSByZWNvcmRbaGVhZGVyXS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocmVjb3JkW2hlYWRlcl0gPT09ICcnIHx8IHJlY29yZFtoZWFkZXJdID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgcmVjb3JkW2hlYWRlcl0gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIGlmIChoYXNWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmVjb3Jkcy5wdXNoKHJlY29yZCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmVzb2x2ZSh7XHJcbiAgICAgICAgICAgICAgaXRlbXM6IHJlY29yZHMsXHJcbiAgICAgICAgICAgICAgZmlsZTogdGFyZ2V0LmZpbGVzWzBdXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHJlYWRlci5yZWFkQXNCaW5hcnlTdHJpbmcodGFyZ2V0LmZpbGVzWzBdKTtcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICAkKGAjJHt0aGlzLmltcG9ydElkfWApLnRyaWdnZXIoJ2NsaWNrJyk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gICNpc1ZhbGlkRGF0ZSA9IChmb3JtYXQ6IHN0cmluZywgdmFsdWU6IHN0cmluZykgPT4ge1xyXG4gICAgaWYgKHZhbHVlPy5sZW5ndGggIT09IGZvcm1hdD8ubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGNvbnN0IHJlZ2V4ID0gL14oPzooPzozMShcXC98LXxcXC4pKD86MD9bMTM1NzhdfDFbMDJdKSlcXDF8KD86KD86Mjl8MzApKFxcL3wtfFxcLikoPzowP1sxMy05XXwxWzAtMl0pXFwyKSkoPzooPzoxWzYtOV18WzItOV1cXGQpP1xcZHsyfSkkfF4oPzoyOShcXC98LXxcXC4pMD8yXFwzKD86KD86KD86MVs2LTldfFsyLTldXFxkKT8oPzowWzQ4XXxbMjQ2OF1bMDQ4XXxbMTM1NzldWzI2XSl8KD86KD86MTZ8WzI0NjhdWzA0OF18WzM1NzldWzI2XSkwMCkpKSkkfF4oPzowP1sxLTldfDFcXGR8MlswLThdKShcXC98LXxcXC4pKD86KD86MD9bMS05XSl8KD86MVswLTJdKSlcXDQoPzooPzoxWzYtOV18WzItOV1cXGQpP1xcZHsyfSkkLztcclxuICAgIHJldHVybiByZWdleC50ZXN0KHZhbHVlKTtcclxuICB9XHJcblxyXG4gICNpc1ZhbGlkVGltZSA9IChmb3JtYXQ6IHN0cmluZywgdmFsdWU6IHN0cmluZykgPT4ge1xyXG4gICAgaWYgKHZhbHVlPy5sZW5ndGggIT09IGZvcm1hdD8ubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgI2lzVmFsaWREYXRlVGltZSA9IChmb3JtYXQ6IHN0cmluZywgdmFsdWU6IHN0cmluZykgPT4ge1xyXG4gICAgaWYgKHZhbHVlPy5sZW5ndGggIT09IGZvcm1hdD8ubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGNvbnN0IGRhdGVzID0gdmFsdWU/LnNwbGl0KCcgJyk7XHJcbiAgICBpZiAoZGF0ZXMubGVuZ3RoICE9PSAyKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGNvbnN0IGRhdGUgPSBkYXRlc1swXTtcclxuICAgIGlmICghdGhpcy4jaXNWYWxpZERhdGUoJ2RkL01NL3l5eXknLCBkYXRlKSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBjb25zdCB0aW1lID0gZGF0ZXNbMV07XHJcbiAgICBjb25zdCByZWdleCA9IC9eKDBbMC05XXwxWzAtOV18MlswLTNdKShcXDopKDBbMC05XXxbMC01XVswLTldKSQvO1xyXG4gICAgcmV0dXJuIHJlZ2V4LnRlc3QodGltZSk7XHJcbiAgfVxyXG59XHJcblxyXG5pbnRlcmZhY2UgRXhjZWxJdGVtIHtcclxuICB2YWxpZGF0aW9uOiBTZFVwbG9hZEV4Y2VsVmFsaWRhdGlvbjtcclxuICBzZE9yaWdpbjogYW55O1xyXG4gIGV4Y2VsSW5kZXg6IG51bWJlcjtcclxuICBbY29sdW1uOiBzdHJpbmddOiBhbnk7XHJcbn1cclxuIl19
|
|
504
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWV4Y2VsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJDOi9Vc2Vycy9uZ2hpYXR0MTVfb25lbW91bnQvRG9jdW1lbnRzL2xpYi1jb3JlLXVpL3Byb2plY3RzL3NkLWNvcmUvdXBsb2FkLWV4Y2VsLyIsInNvdXJjZXMiOlsic3JjL2xpYi91cGxvYWQtZXhjZWwuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ2xHLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUN2QixPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFNeEIsT0FBTyxFQUNMLGVBQWUsRUFDaEIsTUFBTSx5QkFBeUIsQ0FBQztBQUVqQyxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2pCLE1BQU0sMEJBQTBCLENBQUM7QUFFbEMsT0FBTyxFQUNMLGtCQUFrQixFQUNuQixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBR3BDLE9BQU8sRUFBdUIsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDL0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFRaEUsTUFBTSxPQUFPLGFBQWE7SUEwQnhCLFlBQ1UsR0FBc0IsRUFDdEIsYUFBOEIsRUFDOUIsZ0JBQW9DLEVBQ3BDLGFBQThCLEVBQzlCLGNBQWtDLEVBQ2xDLGNBQWdDO1FBTGhDLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3RCLGtCQUFhLEdBQWIsYUFBYSxDQUFpQjtRQUM5QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQW9CO1FBQ3BDLGtCQUFhLEdBQWIs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QUFJLE1BQU0sQ0FBQyxZQUFZLEtBQUssU0FBUyxFQUFFO3dCQUNyQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLG1DQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUM7cUJBQ2hFO3lCQUFNLElBQUksTUFBTSxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUU7d0JBQzdFLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO3dCQUNqRSxVQUFVLENBQUMsS0FBSyxJQUFJLFlBQVksTUFBTSxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUMsS0FBSyxjQUFjLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDO3dCQUNwSCxTQUFTO3FCQUNWO29CQUNELElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUU7d0JBQzVCLE1BQU0sS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQzt3QkFDcEQsSUFBSSxNQUFNLENBQUMsU0FBUyxLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLEVBQUU7NEJBQ3JFLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLFNBQVMsQ0FBQyxZQUFZLENBQUMsS0FBSyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7NEJBQ3hGLFVBQVUsQ0FBQyxLQUFLLElBQUksWUFBWSxNQUFNLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxLQUFL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S0FBSyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7NEJBQzVHLFVBQVUsQ0FBQyxLQUFLLElBQUksWUFBWSxNQUFNLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxLQUFLLGNBQWMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxNQUFNLENBQUM7NEJBQ3BILFNBQVM7eUJBQ1Y7cUJBQ0Y7eUJBQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRTt3QkFDakMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssRUFBRTs0QkFDNUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUM7eUJBQzFCO3dCQUNELElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUU7NEJBQzNELElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO3lCQUMxQjt3QkFDRCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUU7NEJBQ3RCLE1BQU0sS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQzs0QkFDbEMsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLEVBQUU7Z0NBQ3ZELFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLENBQUM7Z0NBQzlFLFVBQVUsQ0FBQyxLQUFLLElBQUksWUFBWSxNQUFNLENBQUMsS0FBSyxJ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QUFpQjtnQkFDM0IsaXRQQUE0Qzs7YUFFN0M7OztZQWhDNkMsaUJBQWlCO1lBd0JqQyxlQUFlO1lBTjNDLGtCQUFrQjtZQVJsQixlQUFlO1lBZVIsa0JBQWtCO1lBWHpCLGdCQUFnQjs7O3FCQXFCZixLQUFLO29CQUNMLFNBQVMsU0FBQyxPQUFPO3dCQWFqQixTQUFTLFNBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgVmlld0NoaWxkLCBDaGFuZ2VEZXRlY3RvclJlZiwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCAqIGFzIHV1aWQgZnJvbSAndXVpZCc7XHJcbmltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XHJcbmltcG9ydCBYTFNYIGZyb20gJ3hsc3gnO1xyXG5cclxuaW1wb3J0IHtcclxuICBTZEV4Y2VsU2VydmljZSwgRXhjZWxUZW1wbGF0ZVxyXG59IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvZXhjZWwnO1xyXG5cclxuaW1wb3J0IHtcclxuICBTZE5vdGlmeVNlcnZpY2VcclxufSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL25vdGlmeSc7XHJcblxyXG5pbXBvcnQge1xyXG4gIFNkTG9hZGluZ1NlcnZpY2VcclxufSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL2xvYWRpbmcnO1xyXG5cclxuaW1wb3J0IHtcclxuICBTZFRyYW5zbGF0ZVNlcnZpY2VcclxufSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL3RyYW5zbGF0ZSc7XHJcbmltcG9ydCB7IE1hdFBhZ2luYXRvciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBTZE1vZGFsIH0gZnJvbSAnQHNkLWFuZ3VsYXIvY29yZS9tb2RhbCc7XHJcbmltcG9ydCB7IFNkVXBsb2FkRXhjZWxPcHRpb24sIFNkVXBsb2FkRXhjZWxWYWxpZGF0aW9uIH0gZnJvbSAnLi91cGxvYWQtZXhjZWwubW9kZWwnO1xyXG5pbXBvcnQgeyBFeHBvcnRUZW1wYXRlQ29sdW1uLCBTZEV4cG9ydFNlcnZpY2UgfSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL2V4cG9ydCc7XHJcbmltcG9ydCB7IFNkQ29sdW1uSGlkZGVuUGlwZSB9IGZyb20gJy4vcGlwZXMvY29sdW1tLWhpZGRlbi5waXBlJztcclxudHlwZSBBT0EgPSBBcnJheTxBcnJheTxhbnk+PjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc2QtdXBsb2FkLWV4Y2VsJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdXBsb2FkLWV4Y2VsLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi91cGxvYWQtZXhjZWwuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2RVcGxvYWRFeGNlbCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBwcml2YXRlIGltcG9ydElkID0gJ0knICsgdXVpZC52NCgpO1xyXG4gIEBJbnB1dCgpIG9wdGlvbjogU2RVcGxvYWRFeGNlbE9wdGlvbjtcclxuICBAVmlld0NoaWxkKCdtb2RhbCcpIG1vZGFsOiBTZE1vZGFsO1xyXG4gIGl0ZW1zOiBFeGNlbEl0ZW1bXSA9IFtdO1xyXG4gIG9yaWdpbkl0ZW1zOiBhbnlbXSA9IFtdO1xyXG4gIGhhc0Rlc2NyaXB0aW9uID0gZmFsc2U7XHJcblxyXG4gIHNob3dpbmc6ICdBTEwnIHwgJ1NVQ0NFU1MnIHwgJ1dBUk5JTkcnIHwgJ0VSUk9SJyA9ICdBTEwnO1xyXG4gIGZpbHRlcmVkSXRlbXM6IEV4Y2VsSXRlbVtdID0gW107XHJcbiAgdmlld0l0ZW1zOiBFeGNlbEl0ZW1bXSA9IFtdO1xyXG4gIG51bWJlck9mU3VjY2VzcyA9IDA7XHJcbiAgbnVtYmVyT2ZFcnJvciA9IDA7XHJcbiAgbnVtYmVyT2ZXYXJuaW5nID0gMDtcclxuICBmaWxlOiBGaWxlO1xyXG4gICNwYWdpbmF0b3I6IE1hdFBhZ2luYXRvcjtcclxuICBAVmlld0NoaWxkKE1hdFBhZ2luYXRvcikgc2V0IHBhZ2luYXRvcihwYWdpbmF0b3I6IE1hdFBhZ2luYXRvcikge1xyXG4gICAgaWYgKHBhZ2luYXRvciAmJiB0aGlzLiNwYWdpbmF0b3IgIT09IHBhZ2luYXRvcikge1xyXG4gICAgICB0aGlzLiNwYWdpbmF0b3IgPSBwYWdpbmF0b3I7XHJcbiAgICAgIHRoaXMuI3N1YnNjcmlwdGlvbi5hZGQocGFnaW5hdG9yLnBhZ2Uuc3Vic2NyaWJlKHRoaXMuI3JlbG9hZCkpO1xyXG4gICAgfVxyXG4gIH1cclxuICAjc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xyXG4gIHVwbG9hZGluZzogYm9vbGVhbjtcclxuICBpc1VwbG9hZGVkOiBib29sZWFuO1xyXG4gIGlzRG93bmxvYWRUZW1wbGF0ZSA9IGZhbHNlO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBleHBvcnRTZXJ2aWNlOiBTZEV4cG9ydFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFNkVHJhbnNsYXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgbm90aWZ5U2VydmljZTogU2ROb3RpZnlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzZENvbHVtbkhpZGRlbjogU2RDb2x1bW5IaWRkZW5QaXBlLFxyXG4gICAgcHJpdmF0ZSBsb2FkaW5nU2VydmljZTogU2RMb2FkaW5nU2VydmljZSkge1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmlzVXBsb2FkZWQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy4jc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBvcGVuID0gKCkgPT4ge1xyXG4gICAgdGhpcy4jcmVzZXQoKTtcclxuICAgIHRoaXMubW9kYWwub3BlbigpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2UgPSAoKSA9PiB7XHJcbiAgICB0aGlzLm1vZGFsLmNsb3NlKCk7XHJcbiAgfVxyXG5cclxuICAjcmVzZXQgPSAoKSA9PiB7XHJcbiAgICB0aGlzLm9yaWdpbkl0ZW1zID0gW107XHJcbiAgICB0aGlzLml0ZW1zID0gW107XHJcbiAgICB0aGlzLmZpbHRlcmVkSXRlbXMgPSBbXTtcclxuICAgIHRoaXMudmlld0l0ZW1zID0gW107XHJcbiAgICB0aGlzLm51bWJlck9mU3VjY2VzcyA9IDA7XHJcbiAgICB0aGlzLm51bWJlck9mRXJyb3IgPSAwO1xyXG4gICAgdGhpcy5udW1iZXJPZldhcm5pbmcgPSAwO1xyXG4gICAgdGhpcy5zaG93aW5nID0gJ0FMTCc7XHJcbiAgfVxyXG5cclxuICAjcmVsb2FkID0gKCkgPT4ge1xyXG4gICAgY29uc3QgcGFnZUluZGV4ID0gdGhpcy4jcGFnaW5hdG9yLnBhZ2VJbmRleDtcclxuICAgIGNvbnN0IHBhZ2VTaXplID0gdGhpcy4jcGFnaW5hdG9yLnBhZ2VTaXplO1xyXG4gICAgdGhpcy5maWx0ZXJlZEl0ZW1zID0gdGhpcy5pdGVtcy5maWx0ZXIoKGl0ZW0pID0+IHtcclxuICAgICAgaWYgKHRoaXMuc2hvd2luZyA9PT0gJ1NVQ0NFU1MnKSB7XHJcbiAgICAgICAgcmV0dXJuICFpdGVtLnZhbGlkYXRpb24/LmVycm9yICYmICFpdGVtLnZhbGlkYXRpb24/Lndhcm5pbmc7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zaG93aW5nID09PSAnV0FSTklORycpIHtcclxuICAgICAgICByZXR1cm4gISFpdGVtLnZhbGlkYXRpb24/Lndhcm5pbmcgJiYgIWl0ZW0udmFsaWRhdGlvbj8uZXJyb3I7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zaG93aW5nID09PSAnRVJST1InKSB7XHJcbiAgICAgICAgcmV0dXJuICEhaXRlbS52YWxpZGF0aW9uPy5lcnJvcjtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy52aWV3SXRlbXMgPSB0aGlzLmZpbHRlcmVkSXRlbXNcclxuICAgICAgLmZpbHRlcigoaXRlbSwgaW5kZXgpID0+IGluZGV4ID49IHBhZ2VJbmRleCAqIHBhZ2VTaXplICYmIGluZGV4IDwgKHBhZ2VJbmRleCArIDEpICogcGFnZVNpemUpO1xyXG5cclxuICAgIHRoaXMubnVtYmVyT2ZTdWNjZXNzID0gdGhpcy5pdGVtcy5maWx0ZXIoaXRlbSA9PiAhaXRlbS52YWxpZGF0aW9uPy5lcnJvciAmJiAhaXRlbS52YWxpZGF0aW9uPy53YXJuaW5nKS5sZW5ndGg7XHJcbiAgICB0aGlzLm51bWJlck9mRXJyb3IgPSB0aGlzLml0ZW1zLmZpbHRlcihpdGVtID0+IGl0ZW0udmFsaWRhdGlvbj8uZXJyb3IpLmxlbmd0aDtcclxuICAgIHRoaXMubnVtYmVyT2ZXYXJuaW5nID0gdGhpcy5pdGVtcy5maWx0ZXIoaXRlbSA9PiBpdGVtLnZhbGlkYXRpb24/Lndhcm5pbmcgJiYgIWl0ZW0udmFsaWRhdGlvbj8uZXJyb3IpLmxlbmd0aDtcclxuICB9XHJcblxyXG4gIHVwbG9hZCA9IGFzeW5jICgpID0+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHsgdHJhbnNsYXRlIH0gPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2U7XHJcbiAgICAgIGNvbnN0IHsgaXRlbXMsIGZpbGUgfSA9IGF3YWl0IHRoaXMuI2ltcG9ydCgpO1xyXG4gICAgICBpZiAodGhpcy5vcHRpb24uY29sdW1ucy5zb21lKGUgPT4gISFlLmRlc2NyaXB0aW9uKSkge1xyXG4gICAgICAgIHRoaXMuaGFzRGVzY3JpcHRpb24gPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuaGFzRGVzY3JpcHRpb24gPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBvZmZzZXQgPSB0aGlzLmhhc0Rlc2NyaXB0aW9uID8gMiA6IDE7XHJcbiAgICAgIGl0ZW1zLnNwbGljZSgwLCBvZmZzZXQpO1xyXG4gICAgICBpZiAoaXRlbXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgdGhpcy5ub3RpZnlTZXJ2aWNlLm5vdGlmeS53YXJuaW5nKGAke3RyYW5zbGF0ZShgTm8gZGF0YSB0byBpbXBvcnRgKX1gKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA+IHRoaXMub3B0aW9uLmxpbWl0KSB7XHJcbiAgICAgICAgdGhpcy5ub3RpZnlTZXJ2aWNlLm5vdGlmeS53YXJuaW5nKGAke3RyYW5zbGF0ZShgTGltaXQgcm93c2ApfTogJHt0aGlzLm9wdGlvbi5saW1pdH1gKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy4jcmVzZXQoKTtcclxuICAgICAgdGhpcy5vcmlnaW5JdGVtcyA9IGl0ZW1zO1xyXG4gICAgICBjb25zdCB7IG1hcHBpbmdJdGVtcyB9ID0gdGhpcy5vcHRpb247XHJcbiAgICAgIGlmIChtYXBwaW5nSXRlbXMpIHtcclxuICAgICAgICBjb25zdCBkYXRhID0gbWFwcGluZ0l0ZW1zKGl0ZW1zKTtcclxuXHJcbiAgICAgICAgaWYgKGRhdGEgaW5zdGFuY2VvZiBQcm9taXNlKSB7XHJcbiAgICAgICAgICB0aGlzLnVwbG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLml0ZW1zID0gYXdhaXQgZGF0YS5maW5hbGx5KCgpID0+IHRoaXMudXBsb2FkaW5nID0gZmFsc2UpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLml0ZW1zID0gZGF0YSB8fCBpdGVtcztcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IGl0ZW1zO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZmlsZSA9IGZpbGU7XHJcbiAgICAgIHRoaXMubG9hZGluZ1NlcnZpY2Uuc3RhcnQoKTtcclxuICAgICAgZm9yIChjb25zdCBbaWR4LCBpdGVtXSBvZiB0aGlzLml0ZW1zLmVudHJpZXMoKSkge1xyXG4gICAgICAgIGl0ZW0uc2RPcmlnaW4gPSB7IC4uLml0ZW0gfTtcclxuICAgICAgICBpdGVtLmV4Y2VsSW5kZXggPSBpZHggKyAodGhpcy5oYXNEZXNjcmlwdGlvbiA/IDQgOiAzKTtcclxuICAgICAgICBhd2FpdCB0aGlzLnZhbGlkYXRlKGl0ZW0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBO4bq/dSBraMO0bmcgY8OzIGVycm9yIHRow6wgdGnhur9wIHThu6VjIHZhbGlkYXRlIHThu6sgb3B0aW9uIHZhbGlkYXRlIHRydXnhu4FuIHbDoG9cclxuICAgICAgaWYgKCF0aGlzLml0ZW1zLnNvbWUoaXRlbSA9PiAhIWl0ZW0udmFsaWRhdGlvbi5lcnJvcikgJiYgdGhpcy5vcHRpb24uZXJyb3JWYWxpZGF0aW9uKSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHRoaXMub3B0aW9uLmVycm9yVmFsaWRhdGlvbih0aGlzLml0ZW1zKTtcclxuICAgICAgICByZXN1bHRzLmZvckVhY2gocmVzdWx0ID0+IHRoaXMuaXRlbXNbcmVzdWx0LmlkeF0udmFsaWRhdGlvbi5lcnJvciA9IHJlc3VsdC5tZXNzYWdlKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gTuG6v3Uga2jDtG5nIGPDsyB3YXJuaW5nIHRow6wgdGnhur9wIHThu6VjIHZhbGlkYXRlIHThu6sgb3B0aW9uIHZhbGlkYXRlIHRydXnhu4FuIHbDoG9cclxuICAgICAgaWYgKCF0aGlzLml0ZW1zLnNvbWUoaXRlbSA9PiAhIWl0ZW0udmFsaWRhdGlvbi53YXJuaW5nKSAmJiB0aGlzLm9wdGlvbi53YXJuaW5nVmFsaWRhdGlvbikge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCB0aGlzLm9wdGlvbi53YXJuaW5nVmFsaWRhdGlvbih0aGlzLml0ZW1zKTtcclxuICAgICAgICByZXN1bHRzLmZvckVhY2gocmVzdWx0ID0+IHRoaXMuaXRlbXNbcmVzdWx0LmlkeF0udmFsaWRhdGlvbi53YXJuaW5nID0gcmVzdWx0Lm1lc3NhZ2UpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLiNwYWdpbmF0b3IucGFnZUluZGV4ID0gMDtcclxuICAgICAgdGhpcy4jcmVsb2FkKCk7XHJcbiAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHJcbiAgICAgIHRoaXMuaXNVcGxvYWRlZCA9IGZhbHNlO1xyXG4gICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgIHRoaXMubm90aWZ5U2VydmljZS5oYW5kbGUuZXJyb3IoZXJyKTtcclxuICAgIH0gZmluYWxseSB7XHJcbiAgICAgIHRoaXMubG9hZGluZ1NlcnZpY2Uuc3RvcCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdmFsaWRhdGUgPSBhc3luYyAoaXRlbTogeyBbeDogc3RyaW5nXTogYW55OyB2YWxpZGF0aW9uOiBTZFVwbG9hZEV4Y2VsVmFsaWRhdGlvbjsgfSkgPT4ge1xyXG4gICAgY29uc3QgdmFsaWRhdGlvbjogU2RVcGxvYWRFeGNlbFZhbGlkYXRpb24gPSB7XHJcbiAgICAgIGVycm9yOiAnJyxcclxuICAgICAgd2FybmluZzogJycsXHJcbiAgICAgIGRhdGE6IHt9XHJcbiAgICB9O1xyXG4gICAgY29uc3QgeyB0cmFuc2xhdGUgfSA9IHRoaXMudHJhbnNsYXRlU2VydmljZTtcclxuICAgIGZvciAoY29uc3QgY29sdW1uIG9mIHRoaXMub3B0aW9uLmNvbHVtbnMpIHtcclxuICAgICAgaWYgKCF0aGlzLnNkQ29sdW1uSGlkZGVuLnRyYW5zZm9ybShjb2x1bW4pKSB7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuICAgICAgdmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0gPSB7fTtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBpZiAoY29sdW1uLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICBpdGVtW2NvbHVtbi5maWVsZF0gPSBpdGVtW2NvbHVtbi5maWVsZF0gPz8gY29sdW1uLmRlZmF1bHRWYWx1ZTtcclxuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi5yZXF1aXJlZCAmJiAhaXRlbVtjb2x1bW4uZmllbGRdICYmIGl0ZW1bY29sdW1uLmZpZWxkXSAhPT0gMCkge1xyXG4gICAgICAgICAgdmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3IgPSBgJHt0cmFuc2xhdGUoJ3JlcXVpcmVkJyl9YDtcclxuICAgICAgICAgIHZhbGlkYXRpb24uZXJyb3IgKz0gYDxzdHJvbmc+WyR7Y29sdW1uLnRpdGxlIHx8IGNvbHVtbi5maWVsZH1dPC9zdHJvbmc+ICR7dmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3J9PGJyPmA7XHJcbiAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgY29uc3QgdmFsdWUgPSAoaXRlbVtjb2x1bW4uZmllbGRdIHx8ICcnKS50b1N0cmluZygpO1xyXG4gICAgICAgICAgaWYgKGNvbHVtbi5taW5MZW5ndGggIT09IHVuZGVmaW5lZCAmJiB2YWx1ZS5sZW5ndGggPCBjb2x1bW4ubWluTGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRpb24uZGF0YVtjb2x1bW4uZmllbGRdLmVycm9yID0gYCR7dHJhbnNsYXRlKCdNaW4gbGVuZ3RoJyl9OiAke2NvbHVtbi5taW5MZW5ndGh9YDtcclxuICAgICAgICAgICAgdmFsaWRhdGlvbi5lcnJvciArPSBgPHN0cm9uZz5bJHtjb2x1bW4udGl0bGUgfHwgY29sdW1uLmZpZWxkfV08L3N0cm9uZz4gJHt2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvcn08YnI+YDtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoY29sdW1uLm1heExlbmd0aCAhPT0gdW5kZWZpbmVkICYmIHZhbHVlLmxlbmd0aCA+IGNvbHVtbi5tYXhMZW5ndGgpIHtcclxuICAgICAgICAgICAgdmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3IgPSBgJHt0cmFuc2xhdGUoJ01heCBsZW5ndGgnKX06ICR7Y29sdW1uLm1heExlbmd0aH1gO1xyXG4gICAgICAgICAgICB2YWxpZGF0aW9uLmVycm9yICs9IGA8c3Ryb25nPlske2NvbHVtbi50aXRsZSB8fCBjb2x1bW4uZmllbGR9XTwvc3Ryb25nPiAke3ZhbGlkYXRpb24uZGF0YVtjb2x1bW4uZmllbGRdLmVycm9yfTxicj5gO1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGl0ZW1bY29sdW1uLmZpZWxkXSA9IHZhbHVlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICBpZiAoaXRlbVtjb2x1bW4uZmllbGRdKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gK2l0ZW1bY29sdW1uLmZpZWxkXTtcclxuICAgICAgICAgICAgaWYgKE51bWJlci5pc05hTih2YWx1ZSkpIHtcclxuICAgICAgICAgICAgICB2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvciA9IGAke2l0ZW1bY29sdW1uLmZpZWxkXX0gJHt0cmFuc2xhdGUoJ2lzIG5vdCBhIG51bWJlcicpfWA7XHJcbiAgICAgICAgICAgICAgdmFsaWRhdGlvbi5lcnJvciArPSBgPHN0cm9uZz5bJHtjb2x1bW4udGl0bGUgfHwgY29sdW1uLmZpZWxkfV08L3N0cm9uZz4gJHt2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvcn08YnI+YDtcclxuICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpdGVtW2NvbHVtbi5maWVsZF0gPSB2YWx1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICghaXRlbVtjb2x1bW4uZmllbGRdICYmIGl0ZW1bY29sdW1uLmZpZWxkXSAhPT0gMCkge1xyXG4gICAgICAgICAgICBpdGVtW2NvbHVtbi5maWVsZF0gPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoY29sdW1uLm1pblZhbHVlICE9PSB1bmRlZmluZWQgJiYgaXRlbVtjb2x1bW4uZmllbGRdIDwgY29sdW1uLm1pblZhbHVlKSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRpb24uZGF0YVtjb2x1bW4uZmllbGRdLmVycm9yID0gYCR7aXRlbVtjb2x1bW4uZmllbGRdfSAke3RyYW5zbGF0ZSgnTWluIHZhbHVlJyl9OiAke2NvbHVtbi5taW5WYWx1ZX1gO1xyXG4gICAgICAgICAgICB2YWxpZGF0aW9uLmVycm9yICs9IGA8c3Ryb25nPlske2NvbHVtbi50aXRsZSB8fCBjb2x1bW4uZmllbGR9XTwvc3Ryb25nPiAke3ZhbGlkYXRpb24uZGF0YVtjb2x1bW4uZmllbGRdLmVycm9yfTxicj5gO1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChjb2x1bW4ubWF4VmFsdWUgIT09IHVuZGVmaW5lZCAmJiBpdGVtW2NvbHVtbi5maWVsZF0gPiBjb2x1bW4ubWF4VmFsdWUpIHtcclxuICAgICAgICAgICAgdmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3IgPSBgJHtpdGVtW2NvbHVtbi5maWVsZF19ICR7dHJhbnNsYXRlKCdNYXggdmFsdWUnKX06ICR7Y29sdW1uLm1heFZhbHVlfWA7XHJcbiAgICAgICAgICAgIHZhbGlkYXRpb24uZXJyb3IgKz0gYDxzdHJvbmc+WyR7Y29sdW1uLnRpdGxlIHx8IGNvbHVtbi5maWVsZH1dPC9zdHJvbmc+ICR7dmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3J9PGJyPmA7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdib29sJykge1xyXG4gICAgICAgICAgaWYgKGl0ZW1bY29sdW1uLmZpZWxkXSA9PT0gMCB8fCBpdGVtW2NvbHVtbi5maWVsZF0gPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIGl0ZW1bY29sdW1uLmZpZWxkXSA9ICcwJztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChpdGVtW2NvbHVtbi5maWVsZF0gPT09IDEgfHwgaXRlbVtjb2x1bW4uZmllbGRdID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIGl0ZW1bY29sdW1uLmZpZWxkXSA9ICcxJztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChpdGVtW2NvbHVtbi5maWVsZF0pIHtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSAraXRlbVtjb2x1bW4uZmllbGRdO1xyXG4gICAgICAgICAgICBpZiAoTnVtYmVyLmlzTmFOKHZhbHVlKSB8fCAodmFsdWUgIT09IDAgJiYgdmFsdWUgIT09IDEpKSB7XHJcbiAgICAgICAgICAgICAgdmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3IgPSBgJHt0cmFuc2xhdGUoJ1ZhbHVlIHNob3VkIGJlIDAgb3IgMScpfWA7XHJcbiAgICAgICAgICAgICAgdmFsaWRhdGlvbi5lcnJvciArPSBgPHN0cm9uZz5bJHtjb2x1bW4udGl0bGUgfHwgY29sdW1uLmZpZWxkfV08L3N0cm9uZz4gJHt2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvcn08YnI+YDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICd2YWx1ZXMnKSB7XHJcbiAgICAgICAgICBpZiAoaXRlbVtjb2x1bW4uZmllbGRdICYmIHR5cGVvZiAoaXRlbVtjb2x1bW4uZmllbGRdKSAhPT0gJ251bWJlcicgJiYgdHlwZW9mIChpdGVtW2NvbHVtbi5maWVsZF0pICE9PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICB2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvciA9IGAke2l0ZW1bY29sdW1uLmZpZWxkXX0gJHt0cmFuc2xhdGUoJ0ludmFsaWQgZGF0YSB0eXBlJyl9YDtcclxuICAgICAgICAgICAgdmFsaWRhdGlvbi5lcnJvciArPSBgPHN0cm9uZz5bJHtjb2x1bW4udGl0bGUgfHwgY29sdW1uLmZpZWxkfV08L3N0cm9uZz4gJHt2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvcn08YnI+YDtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoY29sdW1uLmNoZWNrVmFsdWVJbkFycmF5ICYmIGl0ZW1bY29sdW1uLmZpZWxkXSAmJiAhY29sdW1uLnZhbHVlcy5zb21lKGUgPT4gZS50b1N0cmluZygpID09PSBpdGVtW2NvbHVtbi5maWVsZF0udG9TdHJpbmcoKSkpIHtcclxuICAgICAgICAgICAgdmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3IgPSBgJHtpdGVtW2NvbHVtbi5maWVsZF19ICR7dHJhbnNsYXRlKCdWYWx1ZSBub3QgaW4nKX0gWyR7Y29sdW1uLnZhbHVlcy5qb2luKCl9XWA7XHJcbiAgICAgICAgICAgIHZhbGlkYXRpb24uZXJyb3IgKz0gYDxzdHJvbmc+WyR7Y29sdW1uLnRpdGxlIHx8IGNvbHVtbi5maWVsZH1dPC9zdHJvbmc+ICR7dmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3J9PGJyPmA7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdkYXRlJyB8fCBjb2x1bW4udHlwZSA9PT0gJ2RhdGV0aW1lJyB8fCBjb2x1bW4udHlwZSA9PT0gJ3RpbWUnKSB7XHJcbiAgICAgICAgICBjb25zdCB7IHR5cGUsIGZvcm1hdCB9ID0gY29sdW1uO1xyXG4gICAgICAgICAgY29uc3QgdmFsID0gaXRlbVtjb2x1bW4uZmllbGRdO1xyXG4gICAgICAgICAgaWYgKGZvcm1hdCAmJiBpdGVtW2NvbHVtbi5maWVsZF0pIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiAodmFsKSAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICB2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvciA9IGAke3RyYW5zbGF0ZSgnSW52YWxpZCBmb3JtYXQnKX0gJHtjb2x1bW4uZm9ybWF0fTogJHt2YWx9YDtcclxuICAgICAgICAgICAgICB2YWxpZGF0aW9uLmVycm9yICs9IGA8c3Ryb25nPlske2NvbHVtbi50aXRsZSB8fCBjb2x1bW4uZmllbGR9XTwvc3Ryb25nPiAke3ZhbGlkYXRpb24uZGF0YVtjb2x1bW4uZmllbGRdLmVycm9yfTxicj5gO1xyXG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0eXBlID09PSAnZGF0ZScgJiYgIXRoaXMuI2lzVmFsaWREYXRlKGZvcm1hdCwgdmFsKSkge1xyXG4gICAgICAgICAgICAgIHZhbGlkYXRpb24uZGF0YVtjb2x1bW4uZmllbGRdLmVycm9yID0gYCR7dHJhbnNsYXRlKCdJbnZhbGlkIGZvcm1hdCcpfSAke2NvbHVtbi5mb3JtYXR9OiAke3ZhbH1gO1xyXG4gICAgICAgICAgICAgIHZhbGlkYXRpb24uZXJyb3IgKz0gYDxzdHJvbmc+WyR7Y29sdW1uLnRpdGxlIHx8IGNvbHVtbi5maWVsZH1dPC9zdHJvbmc+ICR7dmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3J9PGJyPmA7XHJcbiAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHR5cGUgPT09ICd0aW1lJyAmJiAhdGhpcy4jaXNWYWxpZFRpbWUoZm9ybWF0LCB2YWwpKSB7XHJcbiAgICAgICAgICAgICAgdmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3IgPSBgJHt0cmFuc2xhdGUoJ0ludmFsaWQgZm9ybWF0Jyl9ICR7Y29sdW1uLmZvcm1hdH06ICR7dmFsfWA7XHJcbiAgICAgICAgICAgICAgdmFsaWRhdGlvbi5lcnJvciArPSBgPHN0cm9uZz5bJHtjb2x1bW4udGl0bGUgfHwgY29sdW1uLmZpZWxkfV08L3N0cm9uZz4gJHt2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvcn08YnI+YDtcclxuICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gJ2RhdGV0aW1lJyAmJiAhdGhpcy4jaXNWYWxpZERhdGVUaW1lKGZvcm1hdCwgdmFsKSkge1xyXG4gICAgICAgICAgICAgIHZhbGlkYXRpb24uZGF0YVtjb2x1bW4uZmllbGRdLmVycm9yID0gYCR7dHJhbnNsYXRlKCdJbnZhbGlkIGZvcm1hdCcpfSAke2NvbHVtbi5mb3JtYXR9OiAke3ZhbH1gO1xyXG4gICAgICAgICAgICAgIHZhbGlkYXRpb24uZXJyb3IgKz0gYDxzdHJvbmc+WyR7Y29sdW1uLnRpdGxlIHx8IGNvbHVtbi5maWVsZH1dPC9zdHJvbmc+ICR7dmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3J9PGJyPmA7XHJcbiAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaXRlbVtjb2x1bW4uZmllbGRdID0gRGF0ZS5wYXJzZUZyb20odmFsLCBjb2x1bW4uZm9ybWF0KS50b0Zvcm1hdCgnTU0vZGQveXl5eSBISDptbTpzcycpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGl0ZW1bY29sdW1uLmZpZWxkXSAmJiAhRGF0ZS5pc0RhdGUoaXRlbVtjb2x1bW4uZmllbGRdKSkge1xyXG4gICAgICAgICAgICB2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvciA9IGAke3RyYW5zbGF0ZSgnSW52YWxpZCBkYXRlJyl9OiAke2l0ZW1bY29sdW1uLmZpZWxkXX1gO1xyXG4gICAgICAgICAgICB2YWxpZGF0aW9uLmVycm9yICs9IGA8c3Ryb25nPlske2NvbHVtbi50aXRsZSB8fCBjb2x1bW4uZmllbGR9XTwvc3Ryb25nPiAke3ZhbGlkYXRpb24uZGF0YVtjb2x1bW4uZmllbGRdLmVycm9yfTxicj5gO1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3IgJiYgY29sdW1uLmVycm9yVmFsaWRhdGlvbikge1xyXG4gICAgICAgICAgY29uc3QgZXJyb3IgPSBhd2FpdCBjb2x1bW4uZXJyb3JWYWxpZGF0aW9uKGl0ZW0sIGl0ZW1bY29sdW1uLmZpZWxkXSk7XHJcbiAgICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgdmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3IgPSBgJHtlcnJvcn1gO1xyXG4gICAgICAgICAgICB2YWxpZGF0aW9uLmVycm9yICs9IGA8c3Ryb25nPlske2NvbHVtbi50aXRsZSB8fCBjb2x1bW4uZmllbGR9XTwvc3Ryb25nPiAke2Vycm9yfTxicj5gO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS53YXJuaW5nICYmIGNvbHVtbi53YXJuaW5nVmFsaWRhdGlvbikge1xyXG4gICAgICAgICAgY29uc3Qgd2FybmluZyA9IGF3YWl0IGNvbHVtbi53YXJuaW5nVmFsaWRhdGlvbihpdGVtLCBpdGVtW2NvbHVtbi5maWVsZF0pO1xyXG4gICAgICAgICAgaWYgKHdhcm5pbmcpIHtcclxuICAgICAgICAgICAgdmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0ud2FybmluZyA9IGAke3dhcm5pbmd9YDtcclxuICAgICAgICAgICAgdmFsaWRhdGlvbi53YXJuaW5nICs9IGA8c3Ryb25nPlske2NvbHVtbi50aXRsZSB8fCBjb2x1bW4uZmllbGR9XTwvc3Ryb25nPiAke3dhcm5pbmd9PGJyPmA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGNhdGNoIChleCkge1xyXG4gICAgICAgIHZhbGlkYXRpb24uZGF0YVtjb2x1bW4uZmllbGRdLmVycm9yID0gYCR7ZXg/Lm1lc3NhZ2UgfHwgZXg/LmVycm9yIHx8IGV4IHx8ICdDw7MgbOG7l2kgeOG6o3kgcmEnfWA7XHJcbiAgICAgICAgdmFsaWRhdGlvbi5lcnJvciArPSBgPHN0cm9uZz5bJHtjb2x1bW4udGl0bGUgfHwgY29sdW1uLmZpZWxkfV08L3N0cm9uZz4gJHt2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvcn08YnI+YDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaXRlbS52YWxpZGF0aW9uID0gdmFsaWRhdGlvbjtcclxuICB9XHJcblxyXG4gICNtYXBJdGVtID0gKGl0ZW06IEV4Y2VsSXRlbSkgPT4ge1xyXG4gICAgY29uc3QgeyB2YWxpZGF0aW9uLCBzZE9yaWdpbiwgZXhjZWxJbmRleCwgLi4ucmVtYWluIH0gPSBpdGVtO1xyXG4gICAgcmV0dXJuIHJlbWFpbjtcclxuICB9XHJcblxyXG4gIGFjY2VwdCA9ICgpID0+IHtcclxuICAgIGNvbnN0IHN1Y2Nlc3NJdGVtcyA9IHRoaXMuaXRlbXMuZmlsdGVyKGl0ZW0gPT4gIWl0ZW0udmFsaWRhdGlvbi5lcnJvciAmJiAhaXRlbS52YWxpZGF0aW9uLndhcm5pbmcpLm1hcCh0aGlzLiNtYXBJdGVtKTtcclxuICAgIGNvbnN0IGVycm9ySXRlbXMgPSB0aGlzLml0ZW1zLmZpbHRlcihpdGVtID0+IGl0ZW0udmFsaWRhdGlvbi5lcnJvcikubWFwKHRoaXMuI21hcEl0ZW0pO1xyXG4gICAgY29uc3Qgd2FybmluZ0l0ZW1zID0gdGhpcy5pdGVtcy5maWx0ZXIoaXRlbSA9PiAhaXRlbS52YWxpZGF0aW9uLmVycm9yICYmIGl0ZW0udmFsaWRhdGlvbi53YXJuaW5nKS5tYXAodGhpcy4jbWFwSXRlbSk7XHJcbiAgICB0aGlzLm9wdGlvbj8ub25BY2NlcHQodGhpcy5pdGVtcy5tYXAodGhpcy4jbWFwSXRlbSksIHN1Y2Nlc3NJdGVtcywgZXJyb3JJdGVtcywgd2FybmluZ0l0ZW1zLCB0aGlzLmZpbGUpO1xyXG5cclxuICAgIHRoaXMuaXNVcGxvYWRlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBzZXRWYWxpZGF0aW9uID0gKHZhbGlkYXRlczogeyBpZHg6IG51bWJlciwgbWVzc2FnZUVycm9yPzogc3RyaW5nLCBtZXNzYWdlV2FybmluZz86IHN0cmluZywgbWVzc2FnZVN1Y2Nlc3M/OiBzdHJpbmcgfVtdKSA9PiB7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWxpZGF0ZXMpKSB7XHJcbiAgICAgIHZhbGlkYXRlcy5mb3JFYWNoKHZhbGlkYXRlID0+IHtcclxuICAgICAgICB0aGlzLml0ZW1zW3ZhbGlkYXRlLmlkeF0udmFsaWRhdGlvbi5lcnJvciA9IHZhbGlkYXRlLm1lc3NhZ2VFcnJvcjtcclxuICAgICAgICB0aGlzLml0ZW1zW3ZhbGlkYXRlLmlkeF0udmFsaWRhdGlvbi53YXJuaW5nID0gdmFsaWRhdGUubWVzc2FnZVdhcm5pbmc7XHJcbiAgICAgICAgdGhpcy5pdGVtc1t2YWxpZGF0ZS5pZHhdLnZhbGlkYXRpb24uc3VjY2VzcyA9IHZhbGlkYXRlLm1lc3NhZ2VTdWNjZXNzO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHRoaXMuI3JlbG9hZCgpO1xyXG4gICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgdmlldyA9IChzaG93aW5nOiAnQUxMJyB8ICdTVUNDRVNTJyB8ICdXQVJOSU5HJyB8ICdFUlJPUicgPSAnQUxMJykgPT4ge1xyXG4gICAgdGhpcy5zaG93aW5nID0gc2hvd2luZztcclxuICAgIHRoaXMuI3BhZ2luYXRvci5wYWdlSW5kZXggPSAwO1xyXG4gICAgdGhpcy4jcmVsb2FkKCk7XHJcbiAgfVxyXG5cclxuICBkb3dubG9hZFRlbXBsYXRlID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgY29uc3Qgc2hlZXRzOiB7XHJcbiAgICAgIG5hbWU6IHN0cmluZyxcclxuICAgICAgaXRlbXM6IGFueVtdLFxyXG4gICAgICBmaWVsZHM6IHN0cmluZ1tdXHJcbiAgICB9W10gPSBbXTtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMub3B0aW9uPy5zaGVldHMpKSB7XHJcbiAgICAgIGZvciAoY29uc3Qgc2hlZXQgb2YgdGhpcy5vcHRpb24uc2hlZXRzKSB7XHJcbiAgICAgICAgaWYgKHNoZWV0Lm5hbWUgJiYgc2hlZXQuaXRlbXMgJiYgc2hlZXQuZmllbGRzKSB7XHJcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzaGVldC5pdGVtcykpIHtcclxuICAgICAgICAgICAgc2hlZXRzLnB1c2goe1xyXG4gICAgICAgICAgICAgIG5hbWU6IHNoZWV0Lm5hbWUsXHJcbiAgICAgICAgICAgICAgaXRlbXM6IHNoZWV0Lml0ZW1zLFxyXG4gICAgICAgICAgICAgIGZpZWxkczogc2hlZXQuZmllbGRzXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc2hlZXRzLnB1c2goe1xyXG4gICAgICAgICAgICAgIG5hbWU6IHNoZWV0Lm5hbWUsXHJcbiAgICAgICAgICAgICAgaXRlbXM6IGF3YWl0IHNoZWV0Lml0ZW1zKCksXHJcbiAgICAgICAgICAgICAgZmllbGRzOiBzaGVldC5maWVsZHNcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjb25zdCBjb2x1bW5Ob3RIaWRkZW4gPSB0aGlzLm9wdGlvbi5jb2x1bW5zLmZpbHRlcihjb2x1bW4gPT4gdGhpcy5zZENvbHVtbkhpZGRlbi50cmFuc2Zvcm0oY29sdW1uKSk7XHJcbiAgICBjb25zdCBleGNlbFRlbXBsYXRlOiBFeGNlbFRlbXBsYXRlID0ge1xyXG4gICAgICBmaWxlTmFtZTogdGhpcy5vcHRpb24uZmlsZU5hbWUgfHwgJ1RlbXBsYXRlJyxcclxuICAgICAgY29sdW1uczogY29sdW1uTm90SGlkZGVuLm1hcChjb2x1bW4gPT4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICBmaWVsZDogY29sdW1uLmZpZWxkLFxyXG4gICAgICAgICAgdGl0bGU6IGNvbHVtbi50aXRsZSxcclxuICAgICAgICAgIHdpZHRoOiBjb2x1bW4ud2lkdGgsXHJcbiAgICAgICAgICByZXF1aXJlZDogY29sdW1uLnJlcXVpcmVkLFxyXG4gICAgICAgICAgZGVzY3JpcHRpb246IGNvbHVtbi5kZXNjcmlwdGlvblxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pLFxyXG4gICAgICBzaGVldHNcclxuICAgIH07XHJcbiAgICB0aGlzLmlzRG93bmxvYWRUZW1wbGF0ZSA9IHRydWU7XHJcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV4cG9ydFNlcnZpY2UuZ2VuZXJhdGVUZW1wbGF0ZShleGNlbFRlbXBsYXRlKS5maW5hbGx5KCgpID0+IHtcclxuICAgICAgdGhpcy5pc0Rvd25sb2FkVGVtcGxhdGUgPSBmYWxzZTtcclxuICAgIH0pO1xyXG4gICAgaWYgKHJlc3VsdD8uZmlsZVBhdGgpIHtcclxuICAgICAgdGhpcy5leHBvcnRTZXJ2aWNlLmRvd25sb2FkKHJlc3VsdC5maWxlUGF0aCwgZXhjZWxUZW1wbGF0ZS5maWxlTmFtZSB8fCAnVGVtcGxhdGUueGxzeCcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZXhwb3J0ID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgdGhpcy5sb2FkaW5nU2VydmljZS5zdGFydCgpO1xyXG4gICAgY29uc3QgY29sdW1uczogRXhwb3J0VGVtcGF0ZUNvbHVtbltdID0gW3tcclxuICAgICAgZmllbGQ6ICdzZE1lc3NhZ2UnLFxyXG4gICAgICB0aXRsZTogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnVXBsb2FkIG1lc3NhZ2UnKSxcclxuICAgICAgd2lkdGg6ICcyNTBweCcsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSwgLi4uIHRoaXMub3B0aW9uLmNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiB0aGlzLnNkQ29sdW1uSGlkZGVuLnRyYW5zZm9ybShjb2x1bW4pKV07XHJcbiAgICBhd2FpdCB0aGlzLmV4cG9ydFNlcnZpY2UuZXhwb3J0KHtcclxuICAgICAgY29sdW1ucyxcclxuICAgICAgaXRlbXM6IHRoaXMuZmlsdGVyZWRJdGVtcy5tYXAoZSA9PiB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcclxuICAgICAgICAgIHNkTWVzc2FnZTogKGUudmFsaWRhdGlvbj8uZXJyb3IgfHwgZS52YWxpZGF0aW9uPy53YXJuaW5nIHx8IGUudmFsaWRhdGlvbj8uc3VjY2Vzcyk/LnJlcGxhY2UoLzxzdHJvbmc+L2csICcnKVxyXG4gICAgICAgICAgICAucmVwbGFjZSgvPFxcL3N0cm9uZz4vZywgJycpXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKC88YnI+L2csICdcXG4nKVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xyXG4gICAgICAgICAgcmVzdWx0ID0ge1xyXG4gICAgICAgICAgICAuLi5yZXN1bHQsXHJcbiAgICAgICAgICAgIFtjb2x1bW4uZmllbGRdOiBlLnNkT3JpZ2luPy5bY29sdW1uLmZpZWxkXVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICB9KVxyXG4gICAgfSkuZmluYWxseSh0aGlzLmxvYWRpbmdTZXJ2aWNlLnN0b3ApO1xyXG4gIH1cclxuXHJcbiAgI2ltcG9ydCA9ICgpID0+IHtcclxuICAgIGNvbnN0IHsgdHJhbnNsYXRlIH0gPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2U7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2U8eyBpdGVtczogYW55W10sIGZpbGU6IEZpbGUgfT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBpZiAoJChgIyR7dGhpcy5pbXBvcnRJZH1gKS5sZW5ndGgpIHtcclxuICAgICAgICAkKCdib2R5JykuY2hpbGRyZW4oYCMke3RoaXMuaW1wb3J0SWR9YCkucmVtb3ZlKCk7XHJcbiAgICAgIH1cclxuICAgICAgJCgnYm9keScpLmFwcGVuZChgPGlucHV0IGlkPVwiJHt0aGlzLmltcG9ydElkfVwiIHN0eWxlPVwiZGlzcGxheTogbm9uZVwiIHR5cGU9XCJmaWxlXCIgLz5gKTtcclxuXHJcbiAgICAgICQoYCMke3RoaXMuaW1wb3J0SWR9YCkub24oJ2NoYW5nZScsIChldnQ6IGFueSkgPT4ge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBjb25zdCB0YXJnZXQ6IERhdGFUcmFuc2ZlciA9IGV2dC50YXJnZXQ7XHJcbiAgICAgICAgICBpZiAodGFyZ2V0LmZpbGVzLmxlbmd0aCAhPT0gMSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IodHJhbnNsYXRlKCdDYW5ub3QgdXNlIG11bHRpcGxlIGZpbGVzJykpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY29uc3QgZmlsZSA9IHRhcmdldC5maWxlc1swXTtcclxuICAgICAgICAgIGNvbnN0IGxhc3REb3QgPSBmaWxlLm5hbWUubGFzdEluZGV4T2YoJy4nKTtcclxuICAgICAgICAgIGlmIChsYXN0RG90ID09PSAtMSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IodHJhbnNsYXRlKCdJbnZhbGlkIGZpbGUgZXh0ZW5zaW9uJykpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY29uc3QgZXh0ZW5zaW9uID0gZmlsZS5uYW1lLnN1YnN0cmluZyhsYXN0RG90ICsgMSk7XHJcbiAgICAgICAgICBpZiAoZXh0ZW5zaW9uLnRvTG93ZXJDYXNlKCkgIT09ICd4bHN4Jykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IodHJhbnNsYXRlKCdQbGVhc2UgdXBsb2FkIC54bHN4IGZpbGUnKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjb25zdCByZWFkZXI6IEZpbGVSZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IChlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYnN0cjogc3RyaW5nID0gZS50YXJnZXQucmVzdWx0O1xyXG4gICAgICAgICAgICBjb25zdCB3YjogWExTWC5Xb3JrQm9vayA9IFhMU1gucmVhZChic3RyLCB7IHR5cGU6ICdiaW5hcnknIH0pO1xyXG4gICAgICAgICAgICBjb25zdCB3c25hbWU6IHN0cmluZyA9IHdiLlNoZWV0TmFtZXNbMF07XHJcbiAgICAgICAgICAgIGNvbnN0IHdzOiBYTFNYLldvcmtTaGVldCA9IHdiLlNoZWV0c1t3c25hbWVdO1xyXG4gICAgICAgICAgICBjb25zdCBsaW5lczogQU9BID0gKFhMU1gudXRpbHMuc2hlZXRfdG9fanNvbih3cywgeyBoZWFkZXI6IDEgfSkpO1xyXG4gICAgICAgICAgICBjb25zdCByZWNvcmRzID0gW107XHJcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSBsaW5lc1swXTtcclxuICAgICAgICAgICAgbGluZXMuc3BsaWNlKDAsIDEpO1xyXG4gICAgICAgICAgICBsaW5lcy5mb3JFYWNoKGxpbmUgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHJlY29yZCA9IHt9O1xyXG4gICAgICAgICAgICAgIGxldCBoYXNWYWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIGhlYWRlcnMuZm9yRWFjaCgoaGVhZGVyLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmVjb3JkW2hlYWRlcl0gPSBsaW5lW2luZGV4XTtcclxuICAgICAgICAgICAgICAgIGlmIChsaW5lW2luZGV4XSAhPT0gdW5kZWZpbmVkICYmIGxpbmVbaW5kZXhdICE9PSBudWxsICYmIGxpbmVbaW5kZXhdLnRvU3RyaW5nKCkpIHtcclxuICAgICAgICAgICAgICAgICAgaGFzVmFsdWUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAocmVjb3JkW2hlYWRlcl0pID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICByZWNvcmRbaGVhZGVyXSA9IHJlY29yZFtoZWFkZXJdLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChyZWNvcmRbaGVhZGVyXSA9PT0gJycgfHwgcmVjb3JkW2hlYWRlcl0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICByZWNvcmRbaGVhZGVyXSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgaWYgKGhhc1ZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICByZWNvcmRzLnB1c2gocmVjb3JkKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXNvbHZlKHtcclxuICAgICAgICAgICAgICBpdGVtczogcmVjb3JkcyxcclxuICAgICAgICAgICAgICBmaWxlOiB0YXJnZXQuZmlsZXNbMF1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgcmVhZGVyLnJlYWRBc0JpbmFyeVN0cmluZyh0YXJnZXQuZmlsZXNbMF0pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgICQoYCMke3RoaXMuaW1wb3J0SWR9YCkudHJpZ2dlcignY2xpY2snKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgI2lzVmFsaWREYXRlID0gKGZvcm1hdDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSA9PiB7XHJcbiAgICBpZiAodmFsdWU/Lmxlbmd0aCAhPT0gZm9ybWF0Py5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcmVnZXggPSAvXig/Oig/OjMxKFxcL3wtfFxcLikoPzowP1sxMzU3OF18MVswMl0pKVxcMXwoPzooPzoyOXwzMCkoXFwvfC18XFwuKSg/OjA/WzEzLTldfDFbMC0yXSlcXDIpKSg/Oig/OjFbNi05XXxbMi05XVxcZCk/XFxkezJ9KSR8Xig/OjI5KFxcL3wtfFxcLikwPzJcXDMoPzooPzooPzoxWzYtOV18WzItOV1cXGQpPyg/OjBbNDhdfFsyNDY4XVswNDhdfFsxMzU3OV1bMjZdKXwoPzooPzoxNnxbMjQ2OF1bMDQ4XXxbMzU3OV1bMjZdKTAwKSkpKSR8Xig/OjA/WzEtOV18MVxcZHwyWzAtOF0pKFxcL3wtfFxcLikoPzooPzowP1sxLTldKXwoPzoxWzAtMl0pKVxcNCg/Oig/OjFbNi05XXxbMi05XVxcZCk/XFxkezJ9KSQvO1xyXG4gICAgcmV0dXJuIHJlZ2V4LnRlc3QodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgI2lzVmFsaWRUaW1lID0gKGZvcm1hdDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSA9PiB7XHJcbiAgICBpZiAodmFsdWU/Lmxlbmd0aCAhPT0gZm9ybWF0Py5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAjaXNWYWxpZERhdGVUaW1lID0gKGZvcm1hdDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSA9PiB7XHJcbiAgICBpZiAodmFsdWU/Lmxlbmd0aCAhPT0gZm9ybWF0Py5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZGF0ZXMgPSB2YWx1ZT8uc3BsaXQoJyAnKTtcclxuICAgIGlmIChkYXRlcy5sZW5ndGggIT09IDIpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZGF0ZSA9IGRhdGVzWzBdO1xyXG4gICAgaWYgKCF0aGlzLiNpc1ZhbGlkRGF0ZSgnZGQvTU0veXl5eScsIGRhdGUpKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGNvbnN0IHRpbWUgPSBkYXRlc1sxXTtcclxuICAgIGNvbnN0IHJlZ2V4ID0gL14oMFswLTldfDFbMC05XXwyWzAtM10pKFxcOikoMFswLTldfFswLTVdWzAtOV0pJC87XHJcbiAgICByZXR1cm4gcmVnZXgudGVzdCh0aW1lKTtcclxuICB9XHJcbn1cclxuXHJcbmludGVyZmFjZSBFeGNlbEl0ZW0ge1xyXG4gIHZhbGlkYXRpb246IFNkVXBsb2FkRXhjZWxWYWxpZGF0aW9uO1xyXG4gIHNkT3JpZ2luOiBhbnk7XHJcbiAgZXhjZWxJbmRleDogbnVtYmVyO1xyXG4gIFtjb2x1bW46IHN0cmluZ106IGFueTtcclxufVxyXG4iXX0=
|
|
@@ -386,16 +386,23 @@ class SdUploadExcel {
|
|
|
386
386
|
});
|
|
387
387
|
this.export = () => __awaiter(this, void 0, void 0, function* () {
|
|
388
388
|
this.loadingService.start();
|
|
389
|
+
const columns = [{
|
|
390
|
+
field: 'sdMessage',
|
|
391
|
+
title: this.translateService.translate('Upload message'),
|
|
392
|
+
width: '250px',
|
|
393
|
+
required: false
|
|
394
|
+
}, ...this.option.columns.filter(column => this.sdColumnHidden.transform(column))];
|
|
389
395
|
yield this.exportService.export({
|
|
390
|
-
columns
|
|
391
|
-
field: 'sdMessage',
|
|
392
|
-
title: this.translateService.translate('Upload message'),
|
|
393
|
-
width: '250px',
|
|
394
|
-
required: false
|
|
395
|
-
}, ...this.option.columns.filter(column => this.sdColumnHidden.transform(column))],
|
|
396
|
+
columns,
|
|
396
397
|
items: this.filteredItems.map(e => {
|
|
397
|
-
var _a, _b, _c, _d;
|
|
398
|
-
|
|
398
|
+
var _a, _b, _c, _d, _e;
|
|
399
|
+
let result = {
|
|
400
|
+
sdMessage: (_d = (((_a = e.validation) === null || _a === void 0 ? void 0 : _a.error) || ((_b = e.validation) === null || _b === void 0 ? void 0 : _b.warning) || ((_c = e.validation) === null || _c === void 0 ? void 0 : _c.success))) === null || _d === void 0 ? void 0 : _d.replace(/<strong>/g, '').replace(/<\/strong>/g, '').replace(/<br>/g, '\n')
|
|
401
|
+
};
|
|
402
|
+
for (const column of columns) {
|
|
403
|
+
result = Object.assign(Object.assign({}, result), { [column.field]: (_e = e.sdOrigin) === null || _e === void 0 ? void 0 : _e[column.field] });
|
|
404
|
+
}
|
|
405
|
+
return result;
|
|
399
406
|
})
|
|
400
407
|
}).finally(this.loadingService.stop);
|
|
401
408
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sd-angular-core-upload-excel.js","sources":["../../../../projects/sd-core/upload-excel/src/lib/pipes/columm-hidden.pipe.ts","../../../../projects/sd-core/upload-excel/src/lib/upload-excel.component.ts","../../../../projects/sd-core/upload-excel/src/lib/pipes/column-transform.pipe.ts","../../../../projects/sd-core/upload-excel/src/lib/upload-excel.module.ts","../../../../projects/sd-core/upload-excel/sd-angular-core-upload-excel.ts"],"sourcesContent":["import { Injectable, Pipe, PipeTransform } from '@angular/core';\r\nimport { SdUploadExcelColumn } from '../upload-excel.model';\r\n@Pipe({\r\n name: 'columnHidden'\r\n})\r\n@Injectable()\r\nexport class SdColumnHiddenPipe implements PipeTransform {\r\n constructor() { }\r\n transform(column: SdUploadExcelColumn): boolean {\r\n if (column.hidden === undefined) {\r\n return true;\r\n }\r\n if (typeof (column.hidden) === 'boolean') {\r\n return !column.hidden;\r\n }\r\n if (typeof (column.hidden) === 'function') {\r\n return !column.hidden();\r\n }\r\n return false;\r\n }\r\n}\r\n","import { Component, OnInit, Input, ViewChild, ChangeDetectorRef, OnDestroy } from '@angular/core';\r\nimport * as uuid from 'uuid';\r\nimport $ from 'jquery';\r\nimport XLSX from 'xlsx';\r\n\r\nimport {\r\n SdExcelService, ExcelTemplate\r\n} from '@sd-angular/core/excel';\r\n\r\nimport {\r\n SdNotifyService\r\n} from '@sd-angular/core/notify';\r\n\r\nimport {\r\n SdLoadingService\r\n} from '@sd-angular/core/loading';\r\n\r\nimport {\r\n SdTranslateService\r\n} from '@sd-angular/core/translate';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { Subscription } from 'rxjs';\r\nimport { SdModal } from '@sd-angular/core/modal';\r\nimport { SdUploadExcelOption, SdUploadExcelValidation } from './upload-excel.model';\r\nimport { SdExportService } from '@sd-angular/core/export';\r\nimport { SdColumnHiddenPipe } from './pipes/columm-hidden.pipe';\r\ntype AOA = Array<Array<any>>;\r\n\r\n@Component({\r\n selector: 'sd-upload-excel',\r\n templateUrl: './upload-excel.component.html',\r\n styleUrls: ['./upload-excel.component.scss']\r\n})\r\nexport class SdUploadExcel implements OnInit, OnDestroy {\r\n private importId = 'I' + uuid.v4();\r\n @Input() option: SdUploadExcelOption;\r\n @ViewChild('modal') modal: SdModal;\r\n items: ExcelItem[] = [];\r\n originItems: any[] = [];\r\n hasDescription = false;\r\n\r\n showing: 'ALL' | 'SUCCESS' | 'WARNING' | 'ERROR' = 'ALL';\r\n filteredItems: ExcelItem[] = [];\r\n viewItems: ExcelItem[] = [];\r\n numberOfSuccess = 0;\r\n numberOfError = 0;\r\n numberOfWarning = 0;\r\n file: File;\r\n #paginator: MatPaginator;\r\n @ViewChild(MatPaginator) set paginator(paginator: MatPaginator) {\r\n if (paginator && this.#paginator !== paginator) {\r\n this.#paginator = paginator;\r\n this.#subscription.add(paginator.page.subscribe(this.#reload));\r\n }\r\n }\r\n #subscription = new Subscription();\r\n uploading: boolean;\r\n isUploaded: boolean;\r\n isDownloadTemplate = false;\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private exportService: SdExportService,\r\n private translateService: SdTranslateService,\r\n private notifyService: SdNotifyService,\r\n private sdColumnHidden: SdColumnHiddenPipe,\r\n private loadingService: SdLoadingService) {\r\n }\r\n\r\n ngOnInit() {\r\n this.isUploaded = false;\r\n }\r\n\r\n ngOnDestroy() {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n open = () => {\r\n this.#reset();\r\n this.modal.open();\r\n }\r\n\r\n close = () => {\r\n this.modal.close();\r\n }\r\n\r\n #reset = () => {\r\n this.originItems = [];\r\n this.items = [];\r\n this.filteredItems = [];\r\n this.viewItems = [];\r\n this.numberOfSuccess = 0;\r\n this.numberOfError = 0;\r\n this.numberOfWarning = 0;\r\n this.showing = 'ALL';\r\n }\r\n\r\n #reload = () => {\r\n const pageIndex = this.#paginator.pageIndex;\r\n const pageSize = this.#paginator.pageSize;\r\n this.filteredItems = this.items.filter((item) => {\r\n if (this.showing === 'SUCCESS') {\r\n return !item.validation?.error && !item.validation?.warning;\r\n } else if (this.showing === 'WARNING') {\r\n return !!item.validation?.warning && !item.validation?.error;\r\n } else if (this.showing === 'ERROR') {\r\n return !!item.validation?.error;\r\n }\r\n return true;\r\n });\r\n this.viewItems = this.filteredItems\r\n .filter((item, index) => index >= pageIndex * pageSize && index < (pageIndex + 1) * pageSize);\r\n\r\n this.numberOfSuccess = this.items.filter(item => !item.validation?.error && !item.validation?.warning).length;\r\n this.numberOfError = this.items.filter(item => item.validation?.error).length;\r\n this.numberOfWarning = this.items.filter(item => item.validation?.warning && !item.validation?.error).length;\r\n }\r\n\r\n upload = async () => {\r\n try {\r\n const { translate } = this.translateService;\r\n const { items, file } = await this.#import();\r\n if (this.option.columns.some(e => !!e.description)) {\r\n this.hasDescription = true;\r\n } else {\r\n this.hasDescription = false;\r\n }\r\n const offset = this.hasDescription ? 2 : 1;\r\n items.splice(0, offset);\r\n if (items.length === 0) {\r\n this.notifyService.notify.warning(`${translate(`No data to import`)}`);\r\n return;\r\n }\r\n if (items.length > this.option.limit) {\r\n this.notifyService.notify.warning(`${translate(`Limit rows`)}: ${this.option.limit}`);\r\n return;\r\n }\r\n this.#reset();\r\n this.originItems = items;\r\n const { mappingItems } = this.option;\r\n if (mappingItems) {\r\n const data = mappingItems(items);\r\n\r\n if (data instanceof Promise) {\r\n this.uploading = true;\r\n this.items = await data.finally(() => this.uploading = false);\r\n } else {\r\n this.items = data || items;\r\n }\r\n } else {\r\n this.items = items;\r\n }\r\n this.file = file;\r\n this.loadingService.start();\r\n for (const [idx, item] of this.items.entries()) {\r\n item.sdOrigin = { ...item };\r\n item.excelIndex = idx + (this.hasDescription ? 4 : 3);\r\n await this.validate(item);\r\n }\r\n\r\n // Nếu không có error thì tiếp tục validate từ option validate truyền vào\r\n if (!this.items.some(item => !!item.validation.error) && this.option.errorValidation) {\r\n const results = await this.option.errorValidation(this.items);\r\n results.forEach(result => this.items[result.idx].validation.error = result.message);\r\n }\r\n\r\n // Nếu không có warning thì tiếp tục validate từ option validate truyền vào\r\n if (!this.items.some(item => !!item.validation.warning) && this.option.warningValidation) {\r\n const results = await this.option.warningValidation(this.items);\r\n results.forEach(result => this.items[result.idx].validation.warning = result.message);\r\n }\r\n\r\n this.#paginator.pageIndex = 0;\r\n this.#reload();\r\n this.ref.detectChanges();\r\n\r\n this.isUploaded = false;\r\n } catch (err) {\r\n this.notifyService.handle.error(err);\r\n } finally {\r\n this.loadingService.stop();\r\n }\r\n }\r\n\r\n validate = async (item: { [x: string]: any; validation: SdUploadExcelValidation; }) => {\r\n const validation: SdUploadExcelValidation = {\r\n error: '',\r\n warning: '',\r\n data: {}\r\n };\r\n const { translate } = this.translateService;\r\n for (const column of this.option.columns) {\r\n if (!this.sdColumnHidden.transform(column)) {\r\n continue;\r\n }\r\n validation.data[column.field] = {};\r\n try {\r\n if (column.defaultValue !== undefined) {\r\n item[column.field] = item[column.field] ?? column.defaultValue;\r\n } else if (column.required && !item[column.field] && item[column.field] !== 0) {\r\n validation.data[column.field].error = `${translate('required')}`;\r\n validation.error += `<strong>[${column.title || column.field}]</strong> ${validation.data[column.field].error}<br>`;\r\n continue;\r\n }\r\n if (column.type === 'string') {\r\n const value = (item[column.field] || '').toString();\r\n if (column.minLength !== undefined && value.length < column.minLength) {\r\n validation.data[column.field].error = `${translate('Min length')}: ${column.minLength}`;\r\n validation.error += `<strong>[${column.title || column.field}]</strong> ${validation.data[column.field].error}<br>`;\r\n continue;\r\n }\r\n if (column.maxLength !== undefined && value.length > column.maxLength) {\r\n validation.data[column.field].error = `${translate('Max length')}: ${column.maxLength}`;\r\n validation.error += `<strong>[${column.title || column.field}]</strong> ${validation.data[column.field].error}<br>`;\r\n continue;\r\n }\r\n item[column.field] = value;\r\n } else if (column.type === 'number') {\r\n if (item[column.field]) {\r\n const value = +item[column.field];\r\n if (Number.isNaN(value)) {\r\n validation.data[column.field].error = `${item[column.field]} ${translate('is not a number')}`;\r\n validation.error += `<strong>[${column.title || column.field}]</strong> ${validation.data[column.field].error}<br>`;\r\n continue;\r\n }\r\n item[column.field] = value;\r\n }\r\n if (!item[column.field] && item[column.field] !== 0) {\r\n item[column.field] = undefined;\r\n }\r\n if (column.minValue !== undefined && item[column.field] < column.minValue) {\r\n validation.data[column.field].error = `${item[column.field]} ${translate('Min value')}: ${column.minValue}`;\r\n validation.error += `<strong>[${column.title || column.field}]</strong> ${validation.data[column.field].error}<br>`;\r\n continue;\r\n }\r\n if (column.maxValue !== undefined && item[column.field] > column.maxValue) {\r\n validation.data[column.field].error = `${item[column.field]} ${translate('Max value')}: ${column.maxValue}`;\r\n validation.error += `<strong>[${column.title || column.field}]</strong> ${validation.data[column.field].error}<br>`;\r\n continue;\r\n }\r\n } else if (column.type === 'bool') {\r\n if (item[column.field] === 0 || item[column.field] === false) {\r\n item[column.field] = '0';\r\n }\r\n if (item[column.field] === 1 || item[column.field] === true) {\r\n item[column.field] = '1';\r\n }\r\n if (item[column.field]) {\r\n const value = +item[column.field];\r\n if (Number.isNaN(value) || (value !== 0 && value !== 1)) {\r\n validation.data[column.field].error = `${translate('Value shoud be 0 or 1')}`;\r\n validation.error += `<strong>[${column.title || column.field}]</strong> ${validation.data[column.field].error}<br>`;\r\n }\r\n }\r\n } else if (column.type === 'values') {\r\n if (item[column.field] && typeof (item[column.field]) !== 'number' && typeof (item[column.field]) !== 'string') {\r\n validation.data[column.field].error = `${item[column.field]} ${translate('Invalid data type')}`;\r\n validation.error += `<strong>[${column.title || column.field}]</strong> ${validation.data[column.field].error}<br>`;\r\n continue;\r\n }\r\n if (column.checkValueInArray && item[column.field] && !column.values.some(e => e.toString() === item[column.field].toString())) {\r\n validation.data[column.field].error = `${item[column.field]} ${translate('Value not in')} [${column.values.join()}]`;\r\n validation.error += `<strong>[${column.title || column.field}]</strong> ${validation.data[column.field].error}<br>`;\r\n continue;\r\n }\r\n } else if (column.type === 'date' || column.type === 'datetime' || column.type === 'time') {\r\n const { type, format } = column;\r\n const val = item[column.field];\r\n if (format && item[column.field]) {\r\n if (typeof (val) !== 'string') {\r\n validation.data[column.field].error = `${translate('Invalid format')} ${column.format}: ${val}`;\r\n validation.error += `<strong>[${column.title || column.field}]</strong> ${validation.data[column.field].error}<br>`;\r\n continue;\r\n }\r\n if (type === 'date' && !this.#isValidDate(format, val)) {\r\n validation.data[column.field].error = `${translate('Invalid format')} ${column.format}: ${val}`;\r\n validation.error += `<strong>[${column.title || column.field}]</strong> ${validation.data[column.field].error}<br>`;\r\n continue;\r\n }\r\n if (type === 'time' && !this.#isValidTime(format, val)) {\r\n validation.data[column.field].error = `${translate('Invalid format')} ${column.format}: ${val}`;\r\n validation.error += `<strong>[${column.title || column.field}]</strong> ${validation.data[column.field].error}<br>`;\r\n continue;\r\n }\r\n if (type === 'datetime' && !this.#isValidDateTime(format, val)) {\r\n validation.data[column.field].error = `${translate('Invalid format')} ${column.format}: ${val}`;\r\n validation.error += `<strong>[${column.title || column.field}]</strong> ${validation.data[column.field].error}<br>`;\r\n continue;\r\n }\r\n item[column.field] = Date.parseFrom(val, column.format).toFormat('MM/dd/yyyy HH:mm:ss');\r\n }\r\n if (item[column.field] && !Date.isDate(item[column.field])) {\r\n validation.data[column.field].error = `${translate('Invalid date')}: ${item[column.field]}`;\r\n validation.error += `<strong>[${column.title || column.field}]</strong> ${validation.data[column.field].error}<br>`;\r\n continue;\r\n }\r\n }\r\n\r\n if (!validation.data[column.field].error && column.errorValidation) {\r\n const error = await column.errorValidation(item, item[column.field]);\r\n if (error) {\r\n validation.data[column.field].error = `${error}`;\r\n validation.error += `<strong>[${column.title || column.field}]</strong> ${error}<br>`;\r\n }\r\n }\r\n\r\n if (!validation.data[column.field].warning && column.warningValidation) {\r\n const warning = await column.warningValidation(item, item[column.field]);\r\n if (warning) {\r\n validation.data[column.field].warning = `${warning}`;\r\n validation.warning += `<strong>[${column.title || column.field}]</strong> ${warning}<br>`;\r\n }\r\n }\r\n } catch (ex) {\r\n validation.data[column.field].error = `${ex?.message || ex?.error || ex || 'Có lỗi xảy ra'}`;\r\n validation.error += `<strong>[${column.title || column.field}]</strong> ${validation.data[column.field].error}<br>`;\r\n }\r\n }\r\n item.validation = validation;\r\n }\r\n\r\n #mapItem = (item: ExcelItem) => {\r\n const { validation, sdOrigin, excelIndex, ...remain } = item;\r\n return remain;\r\n }\r\n\r\n accept = () => {\r\n const successItems = this.items.filter(item => !item.validation.error && !item.validation.warning).map(this.#mapItem);\r\n const errorItems = this.items.filter(item => item.validation.error).map(this.#mapItem);\r\n const warningItems = this.items.filter(item => !item.validation.error && item.validation.warning).map(this.#mapItem);\r\n this.option?.onAccept(this.items.map(this.#mapItem), successItems, errorItems, warningItems, this.file);\r\n\r\n this.isUploaded = true;\r\n }\r\n\r\n setValidation = (validates: { idx: number, messageError?: string, messageWarning?: string, messageSuccess?: string }[]) => {\r\n if (Array.isArray(validates)) {\r\n validates.forEach(validate => {\r\n this.items[validate.idx].validation.error = validate.messageError;\r\n this.items[validate.idx].validation.warning = validate.messageWarning;\r\n this.items[validate.idx].validation.success = validate.messageSuccess;\r\n });\r\n }\r\n this.#reload();\r\n this.ref.detectChanges();\r\n }\r\n\r\n view = (showing: 'ALL' | 'SUCCESS' | 'WARNING' | 'ERROR' = 'ALL') => {\r\n this.showing = showing;\r\n this.#paginator.pageIndex = 0;\r\n this.#reload();\r\n }\r\n\r\n downloadTemplate = async () => {\r\n const sheets: {\r\n name: string,\r\n items: any[],\r\n fields: string[]\r\n }[] = [];\r\n if (Array.isArray(this.option?.sheets)) {\r\n for (const sheet of this.option.sheets) {\r\n if (sheet.name && sheet.items && sheet.fields) {\r\n if (Array.isArray(sheet.items)) {\r\n sheets.push({\r\n name: sheet.name,\r\n items: sheet.items,\r\n fields: sheet.fields\r\n });\r\n } else {\r\n sheets.push({\r\n name: sheet.name,\r\n items: await sheet.items(),\r\n fields: sheet.fields\r\n });\r\n }\r\n }\r\n }\r\n }\r\n const columnNotHidden = this.option.columns.filter(column => this.sdColumnHidden.transform(column));\r\n const excelTemplate: ExcelTemplate = {\r\n fileName: this.option.fileName || 'Template',\r\n columns: columnNotHidden.map(column => {\r\n return {\r\n field: column.field,\r\n title: column.title,\r\n width: column.width,\r\n required: column.required,\r\n description: column.description\r\n };\r\n }),\r\n sheets\r\n };\r\n this.isDownloadTemplate = true;\r\n const result = await this.exportService.generateTemplate(excelTemplate).finally(() => {\r\n this.isDownloadTemplate = false;\r\n });\r\n if (result?.filePath) {\r\n this.exportService.download(result.filePath, excelTemplate.fileName || 'Template.xlsx');\r\n }\r\n }\r\n\r\n export = async () => {\r\n this.loadingService.start();\r\n await this.exportService.export({\r\n columns: [{\r\n field: 'sdMessage',\r\n title: this.translateService.translate('Upload message'),\r\n width: '250px',\r\n required: false\r\n }, ... this.option.columns.filter(column => this.sdColumnHidden.transform(column))],\r\n items: this.filteredItems.map(e => ({\r\n ...e.sdOrigin,\r\n sdMessage: (e.validation?.error || e.validation?.warning || e.validation?.success)?.replace(/<strong>/g, '')\r\n .replace(/<\\/strong>/g, '')\r\n .replace(/<br>/g, '\\n')\r\n }))\r\n }).finally(this.loadingService.stop);\r\n }\r\n\r\n #import = () => {\r\n const { translate } = this.translateService;\r\n return new Promise<{ items: any[], file: File }>((resolve, reject) => {\r\n if ($(`#${this.importId}`).length) {\r\n $('body').children(`#${this.importId}`).remove();\r\n }\r\n $('body').append(`<input id=\"${this.importId}\" style=\"display: none\" type=\"file\" />`);\r\n\r\n $(`#${this.importId}`).on('change', (evt: any) => {\r\n try {\r\n const target: DataTransfer = evt.target;\r\n if (target.files.length !== 1) {\r\n throw new Error(translate('Cannot use multiple files'));\r\n }\r\n const file = target.files[0];\r\n const lastDot = file.name.lastIndexOf('.');\r\n if (lastDot === -1) {\r\n throw new Error(translate('Invalid file extension'));\r\n }\r\n const extension = file.name.substring(lastDot + 1);\r\n if (extension.toLowerCase() !== 'xlsx') {\r\n throw new Error(translate('Please upload .xlsx file'));\r\n }\r\n const reader: FileReader = new FileReader();\r\n reader.onload = (e: any) => {\r\n const bstr: string = e.target.result;\r\n const wb: XLSX.WorkBook = XLSX.read(bstr, { type: 'binary' });\r\n const wsname: string = wb.SheetNames[0];\r\n const ws: XLSX.WorkSheet = wb.Sheets[wsname];\r\n const lines: AOA = (XLSX.utils.sheet_to_json(ws, { header: 1 }));\r\n const records = [];\r\n const headers = lines[0];\r\n lines.splice(0, 1);\r\n lines.forEach(line => {\r\n const record = {};\r\n let hasValue = false;\r\n headers.forEach((header, index) => {\r\n record[header] = line[index];\r\n if (line[index] !== undefined && line[index] !== null && line[index].toString()) {\r\n hasValue = true;\r\n }\r\n if (typeof (record[header]) === 'string') {\r\n record[header] = record[header].trim();\r\n }\r\n if (record[header] === '' || record[header] === undefined) {\r\n record[header] = null;\r\n }\r\n });\r\n if (hasValue) {\r\n records.push(record);\r\n }\r\n });\r\n resolve({\r\n items: records,\r\n file: target.files[0]\r\n });\r\n };\r\n reader.readAsBinaryString(target.files[0]);\r\n } catch (error) {\r\n reject(error);\r\n }\r\n });\r\n $(`#${this.importId}`).trigger('click');\r\n });\r\n }\r\n\r\n #isValidDate = (format: string, value: string) => {\r\n if (value?.length !== format?.length) {\r\n return false;\r\n }\r\n const regex = /^(?:(?:31(\\/|-|\\.)(?:0?[13578]|1[02]))\\1|(?:(?:29|30)(\\/|-|\\.)(?:0?[13-9]|1[0-2])\\2))(?:(?:1[6-9]|[2-9]\\d)?\\d{2})$|^(?:29(\\/|-|\\.)0?2\\3(?:(?:(?:1[6-9]|[2-9]\\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\\d|2[0-8])(\\/|-|\\.)(?:(?:0?[1-9])|(?:1[0-2]))\\4(?:(?:1[6-9]|[2-9]\\d)?\\d{2})$/;\r\n return regex.test(value);\r\n }\r\n\r\n #isValidTime = (format: string, value: string) => {\r\n if (value?.length !== format?.length) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n #isValidDateTime = (format: string, value: string) => {\r\n if (value?.length !== format?.length) {\r\n return false;\r\n }\r\n const dates = value?.split(' ');\r\n if (dates.length !== 2) {\r\n return false;\r\n }\r\n const date = dates[0];\r\n if (!this.#isValidDate('dd/MM/yyyy', date)) {\r\n return false;\r\n }\r\n const time = dates[1];\r\n const regex = /^(0[0-9]|1[0-9]|2[0-3])(\\:)(0[0-9]|[0-5][0-9])$/;\r\n return regex.test(time);\r\n }\r\n}\r\n\r\ninterface ExcelItem {\r\n validation: SdUploadExcelValidation;\r\n sdOrigin: any;\r\n excelIndex: number;\r\n [column: string]: any;\r\n}\r\n","import { DecimalPipe } from '@angular/common';\r\nimport { Pipe, PipeTransform } from '@angular/core';\r\nimport { SdUploadExcelColumn } from '../upload-excel.model';\r\n@Pipe({\r\n name: 'columnTransform'\r\n})\r\nexport class SdColumnTransformPipe implements PipeTransform {\r\n constructor(private decimalPipe: DecimalPipe) {\r\n\r\n }\r\n transform = async (value: any, rowData: any, column: SdUploadExcelColumn): Promise<string> => {\r\n if (rowData.validation?.data[column.field]?.error) {\r\n return rowData.sdOrigin?.[column.field] ?? value ?? '';\r\n }\r\n if (column?.transform) {\r\n return column.transform(value, rowData);\r\n }\r\n if (column.type === 'number') {\r\n return Number.toVNCurrency(value) ?? '';\r\n }\r\n return value ?? '';\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule, DecimalPipe } from '@angular/common';\r\nimport { DeviceDetectorModule } from 'ngx-device-detector';\r\nimport { SdNotifyModule } from '@sd-angular/core/notify';\r\nimport { SdTranslateModule } from '@sd-angular/core/translate';\r\nimport { SdUploadExcel } from './upload-excel.component';\r\nimport { SdButtonModule } from '@sd-angular/core/button';\r\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\r\nimport { SdModalModule } from '@sd-angular/core/modal';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatPaginatorModule } from '@angular/material/paginator';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { SdInputModule } from '@sd-angular/core/input';\r\nimport { SdUtilityModule } from '@sd-angular/core/utility';\r\nimport {MatIconModule} from '@angular/material/icon';\r\nimport {MatMenuModule} from '@angular/material/menu';\r\nimport { SdColumnHiddenPipe } from './pipes/columm-hidden.pipe';\r\nimport { SdColumnTransformPipe } from './pipes/column-transform.pipe';\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n DeviceDetectorModule.forRoot(),\r\n MatSlideToggleModule,\r\n MatTooltipModule,\r\n MatPaginatorModule,\r\n MatSlideToggleModule,\r\n SdNotifyModule,\r\n SdTranslateModule,\r\n SdUtilityModule,\r\n SdButtonModule,\r\n SdModalModule,\r\n SdInputModule,\r\n MatIconModule,\r\n MatMenuModule\r\n ],\r\n declarations: [\r\n SdUploadExcel,\r\n // pipe\r\n SdColumnHiddenPipe,\r\n SdColumnTransformPipe\r\n ],\r\n exports: [\r\n SdUploadExcel\r\n ],\r\n providers: [\r\n DecimalPipe,\r\n SdColumnHiddenPipe\r\n ]\r\n})\r\nexport class SdUploadExcelModule { }\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n\nexport {SdColumnHiddenPipe as ɵa} from './src/lib/pipes/columm-hidden.pipe';\nexport {SdColumnTransformPipe as ɵb} from './src/lib/pipes/column-transform.pipe';"],"names":["uuid.v4"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sd-angular-core-upload-excel.js","sources":["../../../../projects/sd-core/upload-excel/src/lib/pipes/columm-hidden.pipe.ts","../../../../projects/sd-core/upload-excel/src/lib/upload-excel.component.ts","../../../../projects/sd-core/upload-excel/src/lib/pipes/column-transform.pipe.ts","../../../../projects/sd-core/upload-excel/src/lib/upload-excel.module.ts","../../../../projects/sd-core/upload-excel/sd-angular-core-upload-excel.ts"],"sourcesContent":["import { Injectable, Pipe, PipeTransform } from '@angular/core';\r\nimport { SdUploadExcelColumn } from '../upload-excel.model';\r\n@Pipe({\r\n name: 'columnHidden'\r\n})\r\n@Injectable()\r\nexport class SdColumnHiddenPipe implements PipeTransform {\r\n constructor() { }\r\n transform(column: SdUploadExcelColumn): boolean {\r\n if (column.hidden === undefined) {\r\n return true;\r\n }\r\n if (typeof (column.hidden) === 'boolean') {\r\n return !column.hidden;\r\n }\r\n if (typeof (column.hidden) === 'function') {\r\n return !column.hidden();\r\n }\r\n return false;\r\n }\r\n}\r\n","import { Component, OnInit, Input, ViewChild, ChangeDetectorRef, OnDestroy } from '@angular/core';\r\nimport * as uuid from 'uuid';\r\nimport $ from 'jquery';\r\nimport XLSX from 'xlsx';\r\n\r\nimport {\r\n SdExcelService, ExcelTemplate\r\n} from '@sd-angular/core/excel';\r\n\r\nimport {\r\n SdNotifyService\r\n} from '@sd-angular/core/notify';\r\n\r\nimport {\r\n SdLoadingService\r\n} from '@sd-angular/core/loading';\r\n\r\nimport {\r\n SdTranslateService\r\n} from '@sd-angular/core/translate';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { Subscription } from 'rxjs';\r\nimport { SdModal } from '@sd-angular/core/modal';\r\nimport { SdUploadExcelOption, SdUploadExcelValidation } from './upload-excel.model';\r\nimport { ExportTempateColumn, SdExportService } from '@sd-angular/core/export';\r\nimport { SdColumnHiddenPipe } from './pipes/columm-hidden.pipe';\r\ntype AOA = Array<Array<any>>;\r\n\r\n@Component({\r\n selector: 'sd-upload-excel',\r\n templateUrl: './upload-excel.component.html',\r\n styleUrls: ['./upload-excel.component.scss']\r\n})\r\nexport class SdUploadExcel implements OnInit, OnDestroy {\r\n private importId = 'I' + uuid.v4();\r\n @Input() option: SdUploadExcelOption;\r\n @ViewChild('modal') modal: SdModal;\r\n items: ExcelItem[] = [];\r\n originItems: any[] = [];\r\n hasDescription = false;\r\n\r\n showing: 'ALL' | 'SUCCESS' | 'WARNING' | 'ERROR' = 'ALL';\r\n filteredItems: ExcelItem[] = [];\r\n viewItems: ExcelItem[] = [];\r\n numberOfSuccess = 0;\r\n numberOfError = 0;\r\n numberOfWarning = 0;\r\n file: File;\r\n #paginator: MatPaginator;\r\n @ViewChild(MatPaginator) set paginator(paginator: MatPaginator) {\r\n if (paginator && this.#paginator !== paginator) {\r\n this.#paginator = paginator;\r\n this.#subscription.add(paginator.page.subscribe(this.#reload));\r\n }\r\n }\r\n #subscription = new Subscription();\r\n uploading: boolean;\r\n isUploaded: boolean;\r\n isDownloadTemplate = false;\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private exportService: SdExportService,\r\n private translateService: SdTranslateService,\r\n private notifyService: SdNotifyService,\r\n private sdColumnHidden: SdColumnHiddenPipe,\r\n private loadingService: SdLoadingService) {\r\n }\r\n\r\n ngOnInit() {\r\n this.isUploaded = false;\r\n }\r\n\r\n ngOnDestroy() {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n open = () => {\r\n this.#reset();\r\n this.modal.open();\r\n }\r\n\r\n close = () => {\r\n this.modal.close();\r\n }\r\n\r\n #reset = () => {\r\n this.originItems = [];\r\n this.items = [];\r\n this.filteredItems = [];\r\n this.viewItems = [];\r\n this.numberOfSuccess = 0;\r\n this.numberOfError = 0;\r\n this.numberOfWarning = 0;\r\n this.showing = 'ALL';\r\n }\r\n\r\n #reload = () => {\r\n const pageIndex = this.#paginator.pageIndex;\r\n const pageSize = this.#paginator.pageSize;\r\n this.filteredItems = this.items.filter((item) => {\r\n if (this.showing === 'SUCCESS') {\r\n return !item.validation?.error && !item.validation?.warning;\r\n } else if (this.showing === 'WARNING') {\r\n return !!item.validation?.warning && !item.validation?.error;\r\n } else if (this.showing === 'ERROR') {\r\n return !!item.validation?.error;\r\n }\r\n return true;\r\n });\r\n this.viewItems = this.filteredItems\r\n .filter((item, index) => index >= pageIndex * pageSize && index < (pageIndex + 1) * pageSize);\r\n\r\n this.numberOfSuccess = this.items.filter(item => !item.validation?.error && !item.validation?.warning).length;\r\n this.numberOfError = this.items.filter(item => item.validation?.error).length;\r\n this.numberOfWarning = this.items.filter(item => item.validation?.warning && !item.validation?.error).length;\r\n }\r\n\r\n upload = async () => {\r\n try {\r\n const { translate } = this.translateService;\r\n const { items, file } = await this.#import();\r\n if (this.option.columns.some(e => !!e.description)) {\r\n this.hasDescription = true;\r\n } else {\r\n this.hasDescription = false;\r\n }\r\n const offset = this.hasDescription ? 2 : 1;\r\n items.splice(0, offset);\r\n if (items.length === 0) {\r\n this.notifyService.notify.warning(`${translate(`No data to import`)}`);\r\n return;\r\n }\r\n if (items.length > this.option.limit) {\r\n this.notifyService.notify.warning(`${translate(`Limit rows`)}: ${this.option.limit}`);\r\n return;\r\n }\r\n this.#reset();\r\n this.originItems = items;\r\n const { mappingItems } = this.option;\r\n if (mappingItems) {\r\n const data = mappingItems(items);\r\n\r\n if (data instanceof Promise) {\r\n this.uploading = true;\r\n this.items = await data.finally(() => this.uploading = false);\r\n } else {\r\n this.items = data || items;\r\n }\r\n } else {\r\n this.items = items;\r\n }\r\n this.file = file;\r\n this.loadingService.start();\r\n for (const [idx, item] of this.items.entries()) {\r\n item.sdOrigin = { ...item };\r\n item.excelIndex = idx + (this.hasDescription ? 4 : 3);\r\n await this.validate(item);\r\n }\r\n\r\n // Nếu không có error thì tiếp tục validate từ option validate truyền vào\r\n if (!this.items.some(item => !!item.validation.error) && this.option.errorValidation) {\r\n const results = await this.option.errorValidation(this.items);\r\n results.forEach(result => this.items[result.idx].validation.error = result.message);\r\n }\r\n\r\n // Nếu không có warning thì tiếp tục validate từ option validate truyền vào\r\n if (!this.items.some(item => !!item.validation.warning) && this.option.warningValidation) {\r\n const results = await this.option.warningValidation(this.items);\r\n results.forEach(result => this.items[result.idx].validation.warning = result.message);\r\n }\r\n\r\n this.#paginator.pageIndex = 0;\r\n this.#reload();\r\n this.ref.detectChanges();\r\n\r\n this.isUploaded = false;\r\n } catch (err) {\r\n this.notifyService.handle.error(err);\r\n } finally {\r\n this.loadingService.stop();\r\n }\r\n }\r\n\r\n validate = async (item: { [x: string]: any; validation: SdUploadExcelValidation; }) => {\r\n const validation: SdUploadExcelValidation = {\r\n error: '',\r\n warning: '',\r\n data: {}\r\n };\r\n const { translate } = this.translateService;\r\n for (const column of this.option.columns) {\r\n if (!this.sdColumnHidden.transform(column)) {\r\n continue;\r\n }\r\n validation.data[column.field] = {};\r\n try {\r\n if (column.defaultValue !== undefined) {\r\n item[column.field] = item[column.field] ?? column.defaultValue;\r\n } else if (column.required && !item[column.field] && item[column.field] !== 0) {\r\n validation.data[column.field].error = `${translate('required')}`;\r\n validation.error += `<strong>[${column.title || column.field}]</strong> ${validation.data[column.field].error}<br>`;\r\n continue;\r\n }\r\n if (column.type === 'string') {\r\n const value = (item[column.field] || '').toString();\r\n if (column.minLength !== undefined && value.length < column.minLength) {\r\n validation.data[column.field].error = `${translate('Min length')}: ${column.minLength}`;\r\n validation.error += `<strong>[${column.title || column.field}]</strong> ${validation.data[column.field].error}<br>`;\r\n continue;\r\n }\r\n if (column.maxLength !== undefined && value.length > column.maxLength) {\r\n validation.data[column.field].error = `${translate('Max length')}: ${column.maxLength}`;\r\n validation.error += `<strong>[${column.title || column.field}]</strong> ${validation.data[column.field].error}<br>`;\r\n continue;\r\n }\r\n item[column.field] = value;\r\n } else if (column.type === 'number') {\r\n if (item[column.field]) {\r\n const value = +item[column.field];\r\n if (Number.isNaN(value)) {\r\n validation.data[column.field].error = `${item[column.field]} ${translate('is not a number')}`;\r\n validation.error += `<strong>[${column.title || column.field}]</strong> ${validation.data[column.field].error}<br>`;\r\n continue;\r\n }\r\n item[column.field] = value;\r\n }\r\n if (!item[column.field] && item[column.field] !== 0) {\r\n item[column.field] = undefined;\r\n }\r\n if (column.minValue !== undefined && item[column.field] < column.minValue) {\r\n validation.data[column.field].error = `${item[column.field]} ${translate('Min value')}: ${column.minValue}`;\r\n validation.error += `<strong>[${column.title || column.field}]</strong> ${validation.data[column.field].error}<br>`;\r\n continue;\r\n }\r\n if (column.maxValue !== undefined && item[column.field] > column.maxValue) {\r\n validation.data[column.field].error = `${item[column.field]} ${translate('Max value')}: ${column.maxValue}`;\r\n validation.error += `<strong>[${column.title || column.field}]</strong> ${validation.data[column.field].error}<br>`;\r\n continue;\r\n }\r\n } else if (column.type === 'bool') {\r\n if (item[column.field] === 0 || item[column.field] === false) {\r\n item[column.field] = '0';\r\n }\r\n if (item[column.field] === 1 || item[column.field] === true) {\r\n item[column.field] = '1';\r\n }\r\n if (item[column.field]) {\r\n const value = +item[column.field];\r\n if (Number.isNaN(value) || (value !== 0 && value !== 1)) {\r\n validation.data[column.field].error = `${translate('Value shoud be 0 or 1')}`;\r\n validation.error += `<strong>[${column.title || column.field}]</strong> ${validation.data[column.field].error}<br>`;\r\n }\r\n }\r\n } else if (column.type === 'values') {\r\n if (item[column.field] && typeof (item[column.field]) !== 'number' && typeof (item[column.field]) !== 'string') {\r\n validation.data[column.field].error = `${item[column.field]} ${translate('Invalid data type')}`;\r\n validation.error += `<strong>[${column.title || column.field}]</strong> ${validation.data[column.field].error}<br>`;\r\n continue;\r\n }\r\n if (column.checkValueInArray && item[column.field] && !column.values.some(e => e.toString() === item[column.field].toString())) {\r\n validation.data[column.field].error = `${item[column.field]} ${translate('Value not in')} [${column.values.join()}]`;\r\n validation.error += `<strong>[${column.title || column.field}]</strong> ${validation.data[column.field].error}<br>`;\r\n continue;\r\n }\r\n } else if (column.type === 'date' || column.type === 'datetime' || column.type === 'time') {\r\n const { type, format } = column;\r\n const val = item[column.field];\r\n if (format && item[column.field]) {\r\n if (typeof (val) !== 'string') {\r\n validation.data[column.field].error = `${translate('Invalid format')} ${column.format}: ${val}`;\r\n validation.error += `<strong>[${column.title || column.field}]</strong> ${validation.data[column.field].error}<br>`;\r\n continue;\r\n }\r\n if (type === 'date' && !this.#isValidDate(format, val)) {\r\n validation.data[column.field].error = `${translate('Invalid format')} ${column.format}: ${val}`;\r\n validation.error += `<strong>[${column.title || column.field}]</strong> ${validation.data[column.field].error}<br>`;\r\n continue;\r\n }\r\n if (type === 'time' && !this.#isValidTime(format, val)) {\r\n validation.data[column.field].error = `${translate('Invalid format')} ${column.format}: ${val}`;\r\n validation.error += `<strong>[${column.title || column.field}]</strong> ${validation.data[column.field].error}<br>`;\r\n continue;\r\n }\r\n if (type === 'datetime' && !this.#isValidDateTime(format, val)) {\r\n validation.data[column.field].error = `${translate('Invalid format')} ${column.format}: ${val}`;\r\n validation.error += `<strong>[${column.title || column.field}]</strong> ${validation.data[column.field].error}<br>`;\r\n continue;\r\n }\r\n item[column.field] = Date.parseFrom(val, column.format).toFormat('MM/dd/yyyy HH:mm:ss');\r\n }\r\n if (item[column.field] && !Date.isDate(item[column.field])) {\r\n validation.data[column.field].error = `${translate('Invalid date')}: ${item[column.field]}`;\r\n validation.error += `<strong>[${column.title || column.field}]</strong> ${validation.data[column.field].error}<br>`;\r\n continue;\r\n }\r\n }\r\n\r\n if (!validation.data[column.field].error && column.errorValidation) {\r\n const error = await column.errorValidation(item, item[column.field]);\r\n if (error) {\r\n validation.data[column.field].error = `${error}`;\r\n validation.error += `<strong>[${column.title || column.field}]</strong> ${error}<br>`;\r\n }\r\n }\r\n\r\n if (!validation.data[column.field].warning && column.warningValidation) {\r\n const warning = await column.warningValidation(item, item[column.field]);\r\n if (warning) {\r\n validation.data[column.field].warning = `${warning}`;\r\n validation.warning += `<strong>[${column.title || column.field}]</strong> ${warning}<br>`;\r\n }\r\n }\r\n } catch (ex) {\r\n validation.data[column.field].error = `${ex?.message || ex?.error || ex || 'Có lỗi xảy ra'}`;\r\n validation.error += `<strong>[${column.title || column.field}]</strong> ${validation.data[column.field].error}<br>`;\r\n }\r\n }\r\n item.validation = validation;\r\n }\r\n\r\n #mapItem = (item: ExcelItem) => {\r\n const { validation, sdOrigin, excelIndex, ...remain } = item;\r\n return remain;\r\n }\r\n\r\n accept = () => {\r\n const successItems = this.items.filter(item => !item.validation.error && !item.validation.warning).map(this.#mapItem);\r\n const errorItems = this.items.filter(item => item.validation.error).map(this.#mapItem);\r\n const warningItems = this.items.filter(item => !item.validation.error && item.validation.warning).map(this.#mapItem);\r\n this.option?.onAccept(this.items.map(this.#mapItem), successItems, errorItems, warningItems, this.file);\r\n\r\n this.isUploaded = true;\r\n }\r\n\r\n setValidation = (validates: { idx: number, messageError?: string, messageWarning?: string, messageSuccess?: string }[]) => {\r\n if (Array.isArray(validates)) {\r\n validates.forEach(validate => {\r\n this.items[validate.idx].validation.error = validate.messageError;\r\n this.items[validate.idx].validation.warning = validate.messageWarning;\r\n this.items[validate.idx].validation.success = validate.messageSuccess;\r\n });\r\n }\r\n this.#reload();\r\n this.ref.detectChanges();\r\n }\r\n\r\n view = (showing: 'ALL' | 'SUCCESS' | 'WARNING' | 'ERROR' = 'ALL') => {\r\n this.showing = showing;\r\n this.#paginator.pageIndex = 0;\r\n this.#reload();\r\n }\r\n\r\n downloadTemplate = async () => {\r\n const sheets: {\r\n name: string,\r\n items: any[],\r\n fields: string[]\r\n }[] = [];\r\n if (Array.isArray(this.option?.sheets)) {\r\n for (const sheet of this.option.sheets) {\r\n if (sheet.name && sheet.items && sheet.fields) {\r\n if (Array.isArray(sheet.items)) {\r\n sheets.push({\r\n name: sheet.name,\r\n items: sheet.items,\r\n fields: sheet.fields\r\n });\r\n } else {\r\n sheets.push({\r\n name: sheet.name,\r\n items: await sheet.items(),\r\n fields: sheet.fields\r\n });\r\n }\r\n }\r\n }\r\n }\r\n const columnNotHidden = this.option.columns.filter(column => this.sdColumnHidden.transform(column));\r\n const excelTemplate: ExcelTemplate = {\r\n fileName: this.option.fileName || 'Template',\r\n columns: columnNotHidden.map(column => {\r\n return {\r\n field: column.field,\r\n title: column.title,\r\n width: column.width,\r\n required: column.required,\r\n description: column.description\r\n };\r\n }),\r\n sheets\r\n };\r\n this.isDownloadTemplate = true;\r\n const result = await this.exportService.generateTemplate(excelTemplate).finally(() => {\r\n this.isDownloadTemplate = false;\r\n });\r\n if (result?.filePath) {\r\n this.exportService.download(result.filePath, excelTemplate.fileName || 'Template.xlsx');\r\n }\r\n }\r\n\r\n export = async () => {\r\n this.loadingService.start();\r\n const columns: ExportTempateColumn[] = [{\r\n field: 'sdMessage',\r\n title: this.translateService.translate('Upload message'),\r\n width: '250px',\r\n required: false\r\n }, ... this.option.columns.filter(column => this.sdColumnHidden.transform(column))];\r\n await this.exportService.export({\r\n columns,\r\n items: this.filteredItems.map(e => {\r\n let result = {\r\n sdMessage: (e.validation?.error || e.validation?.warning || e.validation?.success)?.replace(/<strong>/g, '')\r\n .replace(/<\\/strong>/g, '')\r\n .replace(/<br>/g, '\\n')\r\n };\r\n for (const column of columns) {\r\n result = {\r\n ...result,\r\n [column.field]: e.sdOrigin?.[column.field]\r\n }\r\n }\r\n return result;\r\n })\r\n }).finally(this.loadingService.stop);\r\n }\r\n\r\n #import = () => {\r\n const { translate } = this.translateService;\r\n return new Promise<{ items: any[], file: File }>((resolve, reject) => {\r\n if ($(`#${this.importId}`).length) {\r\n $('body').children(`#${this.importId}`).remove();\r\n }\r\n $('body').append(`<input id=\"${this.importId}\" style=\"display: none\" type=\"file\" />`);\r\n\r\n $(`#${this.importId}`).on('change', (evt: any) => {\r\n try {\r\n const target: DataTransfer = evt.target;\r\n if (target.files.length !== 1) {\r\n throw new Error(translate('Cannot use multiple files'));\r\n }\r\n const file = target.files[0];\r\n const lastDot = file.name.lastIndexOf('.');\r\n if (lastDot === -1) {\r\n throw new Error(translate('Invalid file extension'));\r\n }\r\n const extension = file.name.substring(lastDot + 1);\r\n if (extension.toLowerCase() !== 'xlsx') {\r\n throw new Error(translate('Please upload .xlsx file'));\r\n }\r\n const reader: FileReader = new FileReader();\r\n reader.onload = (e: any) => {\r\n const bstr: string = e.target.result;\r\n const wb: XLSX.WorkBook = XLSX.read(bstr, { type: 'binary' });\r\n const wsname: string = wb.SheetNames[0];\r\n const ws: XLSX.WorkSheet = wb.Sheets[wsname];\r\n const lines: AOA = (XLSX.utils.sheet_to_json(ws, { header: 1 }));\r\n const records = [];\r\n const headers = lines[0];\r\n lines.splice(0, 1);\r\n lines.forEach(line => {\r\n const record = {};\r\n let hasValue = false;\r\n headers.forEach((header, index) => {\r\n record[header] = line[index];\r\n if (line[index] !== undefined && line[index] !== null && line[index].toString()) {\r\n hasValue = true;\r\n }\r\n if (typeof (record[header]) === 'string') {\r\n record[header] = record[header].trim();\r\n }\r\n if (record[header] === '' || record[header] === undefined) {\r\n record[header] = null;\r\n }\r\n });\r\n if (hasValue) {\r\n records.push(record);\r\n }\r\n });\r\n resolve({\r\n items: records,\r\n file: target.files[0]\r\n });\r\n };\r\n reader.readAsBinaryString(target.files[0]);\r\n } catch (error) {\r\n reject(error);\r\n }\r\n });\r\n $(`#${this.importId}`).trigger('click');\r\n });\r\n }\r\n\r\n #isValidDate = (format: string, value: string) => {\r\n if (value?.length !== format?.length) {\r\n return false;\r\n }\r\n const regex = /^(?:(?:31(\\/|-|\\.)(?:0?[13578]|1[02]))\\1|(?:(?:29|30)(\\/|-|\\.)(?:0?[13-9]|1[0-2])\\2))(?:(?:1[6-9]|[2-9]\\d)?\\d{2})$|^(?:29(\\/|-|\\.)0?2\\3(?:(?:(?:1[6-9]|[2-9]\\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\\d|2[0-8])(\\/|-|\\.)(?:(?:0?[1-9])|(?:1[0-2]))\\4(?:(?:1[6-9]|[2-9]\\d)?\\d{2})$/;\r\n return regex.test(value);\r\n }\r\n\r\n #isValidTime = (format: string, value: string) => {\r\n if (value?.length !== format?.length) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n #isValidDateTime = (format: string, value: string) => {\r\n if (value?.length !== format?.length) {\r\n return false;\r\n }\r\n const dates = value?.split(' ');\r\n if (dates.length !== 2) {\r\n return false;\r\n }\r\n const date = dates[0];\r\n if (!this.#isValidDate('dd/MM/yyyy', date)) {\r\n return false;\r\n }\r\n const time = dates[1];\r\n const regex = /^(0[0-9]|1[0-9]|2[0-3])(\\:)(0[0-9]|[0-5][0-9])$/;\r\n return regex.test(time);\r\n }\r\n}\r\n\r\ninterface ExcelItem {\r\n validation: SdUploadExcelValidation;\r\n sdOrigin: any;\r\n excelIndex: number;\r\n [column: string]: any;\r\n}\r\n","import { DecimalPipe } from '@angular/common';\r\nimport { Pipe, PipeTransform } from '@angular/core';\r\nimport { SdUploadExcelColumn } from '../upload-excel.model';\r\n@Pipe({\r\n name: 'columnTransform'\r\n})\r\nexport class SdColumnTransformPipe implements PipeTransform {\r\n constructor(private decimalPipe: DecimalPipe) {\r\n\r\n }\r\n transform = async (value: any, rowData: any, column: SdUploadExcelColumn): Promise<string> => {\r\n if (rowData.validation?.data[column.field]?.error) {\r\n return rowData.sdOrigin?.[column.field] ?? value ?? '';\r\n }\r\n if (column?.transform) {\r\n return column.transform(value, rowData);\r\n }\r\n if (column.type === 'number') {\r\n return Number.toVNCurrency(value) ?? '';\r\n }\r\n return value ?? '';\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule, DecimalPipe } from '@angular/common';\r\nimport { DeviceDetectorModule } from 'ngx-device-detector';\r\nimport { SdNotifyModule } from '@sd-angular/core/notify';\r\nimport { SdTranslateModule } from '@sd-angular/core/translate';\r\nimport { SdUploadExcel } from './upload-excel.component';\r\nimport { SdButtonModule } from '@sd-angular/core/button';\r\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\r\nimport { SdModalModule } from '@sd-angular/core/modal';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatPaginatorModule } from '@angular/material/paginator';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { SdInputModule } from '@sd-angular/core/input';\r\nimport { SdUtilityModule } from '@sd-angular/core/utility';\r\nimport {MatIconModule} from '@angular/material/icon';\r\nimport {MatMenuModule} from '@angular/material/menu';\r\nimport { SdColumnHiddenPipe } from './pipes/columm-hidden.pipe';\r\nimport { SdColumnTransformPipe } from './pipes/column-transform.pipe';\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n DeviceDetectorModule.forRoot(),\r\n MatSlideToggleModule,\r\n MatTooltipModule,\r\n MatPaginatorModule,\r\n MatSlideToggleModule,\r\n SdNotifyModule,\r\n SdTranslateModule,\r\n SdUtilityModule,\r\n SdButtonModule,\r\n SdModalModule,\r\n SdInputModule,\r\n MatIconModule,\r\n MatMenuModule\r\n ],\r\n declarations: [\r\n SdUploadExcel,\r\n // pipe\r\n SdColumnHiddenPipe,\r\n SdColumnTransformPipe\r\n ],\r\n exports: [\r\n SdUploadExcel\r\n ],\r\n providers: [\r\n DecimalPipe,\r\n SdColumnHiddenPipe\r\n ]\r\n})\r\nexport class SdUploadExcelModule { }\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n\nexport {SdColumnHiddenPipe as ɵa} from './src/lib/pipes/columm-hidden.pipe';\nexport {SdColumnTransformPipe as ɵb} from './src/lib/pipes/column-transform.pipe';"],"names":["uuid.v4"],"mappings":"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"}
|