tnx-shared 5.3.405 → 5.3.407
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/tnx-shared.umd.js +219 -112
- package/bundles/tnx-shared.umd.js.map +1 -1
- package/bundles/tnx-shared.umd.min.js +1 -1
- package/bundles/tnx-shared.umd.min.js.map +1 -1
- package/components/access-denied-component/access-denied.component.d.ts.map +1 -1
- package/components/file-explorer/file-manager/file-manager.component.d.ts +4 -1
- package/components/file-explorer/file-manager/file-manager.component.d.ts.map +1 -1
- package/components/file-explorer/file-viewer/file-viewer.component.d.ts +4 -0
- package/components/file-explorer/file-viewer/file-viewer.component.d.ts.map +1 -1
- package/esm2015/components/access-denied-component/access-denied.component.js +2 -1
- package/esm2015/components/crud/crud-list/crud-list.component.js +2 -2
- package/esm2015/components/file-explorer/file-manager/file-manager.component.js +34 -2
- package/esm2015/components/file-explorer/file-viewer/file-viewer.component.js +55 -2
- package/esm2015/services/user-chu-ky-so.service.js +28 -0
- package/esm2015/tnx-shared.js +92 -91
- package/fesm2015/tnx-shared.js +110 -4
- package/fesm2015/tnx-shared.js.map +1 -1
- package/package.json +2 -2
- package/services/user-chu-ky-so.service.d.ts +11 -0
- package/services/user-chu-ky-so.service.d.ts.map +1 -0
- package/services/user-chu-ky-so.service.ngfactory.d.ts.map +1 -0
- package/tnx-shared.d.ts +91 -90
- package/tnx-shared.d.ts.map +1 -1
- package/tnx-shared.metadata.json +1 -1
|
@@ -430,11 +430,64 @@ export class FileViewerComponent extends ComponentBase {
|
|
|
430
430
|
}
|
|
431
431
|
return styleClass;
|
|
432
432
|
}
|
|
433
|
+
kySoHandle() {
|
|
434
|
+
}
|
|
435
|
+
ngAfterViewInit() {
|
|
436
|
+
// Access the PDF.js viewer instance
|
|
437
|
+
setTimeout(() => {
|
|
438
|
+
var _a;
|
|
439
|
+
const pdfViewer = (_a = window.PDFViewerApplication) === null || _a === void 0 ? void 0 : _a.pdfViewer;
|
|
440
|
+
if (pdfViewer) {
|
|
441
|
+
// Add click listener to each page canvas
|
|
442
|
+
const container = document.querySelector('#viewerContainer');
|
|
443
|
+
container === null || container === void 0 ? void 0 : container.addEventListener('click', (e) => {
|
|
444
|
+
this.handlePageClick(e, pdfViewer);
|
|
445
|
+
});
|
|
446
|
+
}
|
|
447
|
+
}, 1000);
|
|
448
|
+
}
|
|
449
|
+
handlePageClick(event, pdfViewer) {
|
|
450
|
+
const target = event.target;
|
|
451
|
+
const marker = document.getElementById(`custom-marker`);
|
|
452
|
+
if (marker) {
|
|
453
|
+
marker.remove();
|
|
454
|
+
}
|
|
455
|
+
if (target.classList.contains('canvasWrapper') ||
|
|
456
|
+
target.tagName === 'CANVAS') {
|
|
457
|
+
// Get page number and coordinates
|
|
458
|
+
const pageDiv = target.closest('.page');
|
|
459
|
+
const pageNumber = parseInt((pageDiv === null || pageDiv === void 0 ? void 0 : pageDiv.getAttribute('data-page-number')) || '1');
|
|
460
|
+
const rect = target.getBoundingClientRect();
|
|
461
|
+
const x = event.clientX - rect.left;
|
|
462
|
+
const y = event.clientY - rect.top;
|
|
463
|
+
// Create marker at this position
|
|
464
|
+
this.createMarker(target, x, y, pageNumber);
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
createMarker(parent, x, y, page) {
|
|
468
|
+
const marker = document.createElement('div');
|
|
469
|
+
marker.id = 'custom-marker';
|
|
470
|
+
marker.style.cssText = `
|
|
471
|
+
position: absolute;
|
|
472
|
+
left: ${x}px;
|
|
473
|
+
top: ${y}px;
|
|
474
|
+
width: 100px;
|
|
475
|
+
height: 100px;
|
|
476
|
+
background-image: url(${this.model.data.fileBase64Content});
|
|
477
|
+
pointer-events: none;
|
|
478
|
+
background-size: contain; /* Fits the image */
|
|
479
|
+
background-repeat: no-repeat; /* No tiling */
|
|
480
|
+
background-position: center top; /* Positioning */
|
|
481
|
+
z-index: 999;
|
|
482
|
+
`;
|
|
483
|
+
const pageContainer = parent.closest('.page');
|
|
484
|
+
pageContainer === null || pageContainer === void 0 ? void 0 : pageContainer.appendChild(marker);
|
|
485
|
+
}
|
|
433
486
|
}
|
|
434
487
|
FileViewerComponent.decorators = [
|
|
435
488
|
{ type: Component, args: [{
|
|
436
489
|
selector: 'file-viewer',
|
|
437
|
-
template: "<p-sidebar #sidebar [showCloseIcon]=\"false\" [fullScreen]=\"fullScreen\" [appendTo]=\"'body'\" [modal]=\"showModal\"\n [styleClass]=\"getStyleClassByDocumentType(data.fileType)\" [(visible)]=\"show\">\n <ng-container *ngIf=\"data.fileType == fileTypes.PDF\">\n <div id=\"fileViewerHolder\" class=\"file-viewer-holder\">\n <div #headerdialogmaterial class=\"header-dialog-material\">\n <div class=\"flex-item\" style=\"margin: 0px auto;\">\n <a *ngIf=\"isDesktop()\" (click)=\"!isReadonly && renameFile()\" style=\"color: white;\"\n class=\"btn btn-secondary\">\n <i class=\"fas fa-file-alt\"></i><span class=\"cursor-pointer\">\n {{ data.name }}\n </span>\n </a>\n </div>\n <div class=\"flex-item\">\n <!-- UD-2450 - TuDN -->\n <!-- <a *ngIf=\"_deviceDetectorService.isDesktop() && showPrint\" pTooltip=\"In t\u00E0i li\u1EC7u\"\n tooltipPosition=\"bottom\" placeholder=\"Bottom\" style=\"color: white;\" (click)=\"print()\"\n class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-print\"></i></a> -->\n <a *ngIf=\"showDownload\" pTooltip=\"T\u1EA3i xu\u1ED1ng\" tooltipPosition=\"bottom\" placeholder=\"Bottom\"\n style=\"color: white;\" (click)=\"download()\" class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-download\"></i></a>\n <!-- End UD-2450 - TuDN -->\n <a *ngIf=\"!_deviceDetectorService.isDesktop() && !readonly\" pTooltip=\"\u0110\u1ED5i t\u00EAn\"\n tooltipPosition=\"bottom\" (click)=\"renameFile()\"\n class=\"cursor-pointer button-link btn btn-secondary\" style=\"color: white;\"><i\n class=\"fas fa-eraser\"></i></a>\n <a *ngIf=\"showDelete && !readonly\" pTooltip=\"X\u00F3a t\u1EC7p tin\" tooltipPosition=\"bottom\"\n (click)=\"deleteFile()\" class=\"cursor-pointer button-link btn btn-secondary\"\n style=\"color: white;\"><i class=\"far fa-trash-alt\"></i></a>\n <a (click)=\"onTopbarItemClick($event)\" role=\"menuitem\" style=\"color: white;\"\n *ngIf=\"!readonly && _deviceDetectorService.isDesktop()\"\n class=\"cursor-pointer button-link btn btn-secondary submenu\"> <i class=\"fas fa-ellipsis-v\"></i>\n <ul class=\"layout-menu fadeInDown\" *ngIf=\"model.activeTopbarItem\">\n <li *ngIf=\"_deviceDetectorService.isDesktop()\" role=\"menuitem\" class=\"cursor-pointer\">\n <a (click)=\"editFile()\" class=\"file-row-action\"><i class=\"fas fa-pen-square\"></i>S\u1EEDa\n file\n tr\u1EF1c\n tuy\u1EBFn</a>\n </li>\n <li *ngIf=\"!isReadonly\" role=\"menuitem\" class=\"cursor-pointer\">\n <a (click)=\"renameFile()\" class=\"file-row-action\"><i class=\"fas fa-eraser\"></i>\u0110\u1ED5i\n t\u00EAn</a>\n </li>\n <li *ngIf=\"!isReadonly\" role=\"menuitem\" class=\"cursor-pointer\">\n <a (click)=\"deleteFile()\" class=\"file-row-action\"><i class=\"far fa-trash-alt\"></i>X\u00F3a\n t\u1EC7p\n tin</a>\n </li>\n </ul>\n </a>\n <a pTooltip=\"\u0110\u00F3ng\" tooltipPosition=\"bottom\" placeholder=\"Bottom\" style=\"color: white;\"\n (click)=\"closeSidebar(null)\" class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-times\"></i></a>\n </div>\n </div>\n </div>\n <ngx-extended-pdf-viewer [src]=\"model.fileUrl\" useBrowserLocale=\"true\" height=\"calc(100vh - 50px)\"\n [enablePinchOnMobile]=\"true\" [filenameForDownload]=\"data.fileName\" [language]=\"'vi-VN'\"\n [showBookmarkButton]=\"false\" [showHandToolButton]=\"false\" [showOpenFileButton]=\"false\"\n [showUnverifiedSignatures]=\"true\">\n </ngx-extended-pdf-viewer>\n </ng-container>\n\n <ng-container\n *ngIf=\"data.fileType != fileTypes.IMAGE && data.fileType != fileTypes.VIDEO && data.fileType != fileTypes.AUDIO && data.fileType != fileTypes.PDF\">\n <div id=\"fileViewerHolder\" class=\"file-viewer-holder\">\n <div #headerdialogmaterial class=\"header-dialog-material\">\n <div class=\"flex-item\">\n </div>\n <div class=\"flex-item\">\n <a *ngIf=\"isDesktop()\" (click)=\"!isReadonly && renameFile()\" style=\"color: white;\"\n class=\"btn btn-secondary\">\n <i class=\"fas fa-file-alt\"></i><span class=\"cursor-pointer\">\n {{ data.name }}\n </span>\n </a>\n </div>\n <div class=\"flex-item\">\n <a *ngIf=\"isDesktop() && showPrint\" pTooltip=\"In t\u00E0i li\u1EC7u\" tooltipPosition=\"bottom\"\n placeholder=\"Bottom\" style=\"color: white;\" (click)=\"print()\"\n class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-print\"></i></a>\n <a *ngIf=\"showDownload\" pTooltip=\"T\u1EA3i xu\u1ED1ng\" tooltipPosition=\"bottom\" placeholder=\"Bottom\"\n style=\"color: white;\" (click)=\"download()\" class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-download\"></i></a>\n <a *ngIf=\"!readonly && showDelete && isDesktop()\" pTooltip=\"X\u00F3a t\u1EC7p tin\" tooltipPosition=\"bottom\"\n (click)=\"deleteFile()\" class=\"cursor-pointer button-link btn btn-secondary\"\n style=\"color: white;\"><i class=\"pi pi-trash\"></i></a>\n <a *ngIf=\"!readonly && isDesktop()\" pTooltip=\"S\u1EEDa file tr\u1EF1c tuy\u1EBFn\" (click)=\"editFile()\"\n placeholder=\"Bottom\" class=\"cursor-pointer button-link btn btn-secondary\" style=\"color: white;\">\n <i class=\"fas fa-pen-square\"></i></a>\n\n <a (click)=\"onTopbarItemClick($event)\" role=\"menuitem\" style=\"color: white;\" *ngIf=\"!isDesktop()\"\n class=\"cursor-pointer button-link btn btn-secondary submenu\">\n <i class=\"fas fa-ellipsis-v\"></i>\n <ul class=\"layout-menu fadeInDown\" *ngIf=\"model.activeTopbarItem\">\n <li *ngIf=\"!isReadonly\" role=\"menuitem\" class=\"cursor-pointer\">\n <a (click)=\"editFile()\" class=\"file-row-action\">\n <i class=\"fas fa-pen-square\"></i>S\u1EEDa file tr\u1EF1c tuy\u1EBFn</a>\n </li>\n <li *ngIf=\"!isReadonly\" role=\"menuitem\" class=\"cursor-pointer\">\n <a (click)=\"renameFile()\" class=\"file-row-action\"><i class=\"fas fa-eraser\"></i>\u0110\u1ED5i\n t\u00EAn</a>\n </li>\n <li *ngIf=\"!isReadonly && showDelete\" role=\"menuitem\" class=\"cursor-pointer\">\n <a (click)=\"deleteFile()\" class=\"file-row-action\"><i class=\"pi pi-trash\"></i>X\u00F3a\n t\u1EC7p tin</a>\n </li>\n </ul>\n </a>\n <a pTooltip=\"\u0110\u00F3ng\" tooltipPosition=\"bottom\" placeholder=\"Bottom\" style=\"color: white;\"\n (click)=\"closeSidebar(null)\" class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-times\"></i></a>\n </div>\n </div>\n\n <div class=\"dialog-material\" [class.view-file]=\"true\" [class.mobile]=\"!isDesktop()\"\n [class.view-file-text]=\"isFileType(fileTypes.TEXT)\"\n [class.view-file-spreadsheet]=\"isFileType(fileTypes.SPREADSHEET)\"\n [class.view-file-presentation]=\"isFileType(fileTypes.PRESENTATION)\">\n <div id=\"file-viewer\"></div>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"data.fileType == fileTypes.IMAGE && model.images.length > 0\">\n <div class=\"image-container\">\n <div #headerdialogmaterial class=\"header-dialog-material\">\n <div class=\"flex-item\">\n </div>\n <div class=\"flex-item\">\n <a *ngIf=\"isDesktop()\" (click)=\"!isReadonly && renameFile()\" style=\"color: white;\"\n class=\"btn btn-secondary\">\n <i class=\"fas fa-file-alt\"></i><span class=\"cursor-pointer\">\n {{ data.name }}\n </span>\n </a>\n </div>\n <div class=\"flex-item\">\n <a pTooltip=\"\u0110\u00F3ng\" tooltipPosition=\"bottom\" placeholder=\"Bottom\" style=\"color: white;\"\n (click)=\"closeSidebar(null)\" class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-times\"></i></a>\n </div>\n </div>\n\n <img *ngIf=\"model.images && model.images.length\" src=\"{{model.images[0]}}\" alt=\"Ch\u01B0a c\u00F3 \u1EA3nh\">\n </div>\n <!-- <app-image-viewer [showPDFOnlyLabel]=\"false\" [showPDFOnlyOption]=\"false\" [fullscreen]=\"false\"\n [images]=\"model.images\" [primaryColor]=\"'#3192e1'\" [idContainer]=\"'image-view-list'\"\n (mousedown)=\"closeSidebar($event)\" id=\"fileViewerHolder\" [loadOnInit]=\"true\">\n </app-image-viewer>\n <a style=\"color: white;\" (click)=\"closeSidebar(null)\" class=\"mobile-image-viewer-close\">\n <i class=\"far fa-times-circle\"></i></a> -->\n </ng-container>\n\n <ng-container *ngIf=\"data.fileType == fileTypes.VIDEO\">\n <div id=\"fileViewerHolder\" class=\"file-viewer-holder\" style=\"height: 100%;\">\n <div #headerdialogmaterial class=\"header-dialog-material\">\n <div class=\"flex-item\">\n </div>\n <div class=\"flex-item\">\n <a *ngIf=\"isDesktop()\" (click)=\"!isReadonly && renameFile()\" style=\"color: white;\"\n class=\"btn btn-secondary\">\n <i class=\"fas fa-file-alt\"></i><span class=\"cursor-pointer\">\n {{ data.name }}\n </span>\n </a>\n </div>\n <div class=\"flex-item\">\n <a *ngIf=\"showDownload\" pTooltip=\"T\u1EA3i xu\u1ED1ng\" tooltipPosition=\"bottom\" placeholder=\"Bottom\"\n style=\"color: white;\" (click)=\"download()\" class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-download\"></i>\n </a>\n <a *ngIf=\"!isReadonly && !isDesktop()\" (click)=\"renameFile()\" style=\"color: white;\"\n class=\"btn btn-secondary\">\n <i class=\"fas fa-file-alt\"></i><span class=\"cursor-pointer\">\n {{ data.name }}\n </span>\n </a>\n <a *ngIf=\"!readonly && showDelete\" pTooltip=\"X\u00F3a t\u1EC7p tin\" tooltipPosition=\"bottom\"\n (click)=\"deleteFile()\" class=\"cursor-pointer button-link btn btn-secondary\"\n style=\"color: white;\"><i class=\"pi pi-trash\"></i></a>\n <a pTooltip=\"\u0110\u00F3ng\" tooltipPosition=\"bottom\" placeholder=\"Bottom\" style=\"color: white;\"\n (click)=\"closeSidebar(null)\" class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-times\"></i></a>\n </div>\n </div>\n\n <div class=\"dialog-material\" [class.view-file]=\"true\" [class.mobile]=\"!isDesktop()\"\n style=\"width: 80%; margin: auto; height: 100%; border-radius: 0px;\">\n <video width=\"100%\" height=\"100%\" style=\"margin-top: 50px;\" autoplay controls src=\"{{model.fileUrl}}\">\n Tr\u00ECnh duy\u1EC7t kh\u00F4ng h\u1ED7 tr\u1EE3 m\u1EDF video.\n </video>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"data.fileType == fileTypes.AUDIO\">\n <div id=\"fileViewerHolder\" class=\"file-viewer-holder\" (mousedown)=\"closeSidebar($event)\" style=\"height: 100%;\">\n <div #headerdialogmaterial class=\"header-dialog-material\">\n <div class=\"flex-item\">\n </div>\n <div class=\"flex-item\">\n <a *ngIf=\"isDesktop()\" (click)=\"!isReadonly && renameFile()\" style=\"color: white;\"\n class=\"btn btn-secondary\">\n <i class=\"fas fa-file-alt\"></i><span class=\"cursor-pointer\">\n {{ data.name }}\n </span>\n </a>\n </div>\n <div class=\"flex-item\">\n <a *ngIf=\"showDownload\" pTooltip=\"T\u1EA3i xu\u1ED1ng\" tooltipPosition=\"bottom\" placeholder=\"Bottom\"\n style=\"color: white;\" (click)=\"download()\" class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-download\"></i></a>\n <a *ngIf=\"!isReadonly && showDelete\" pTooltip=\"X\u00F3a t\u1EC7p tin\" tooltipPosition=\"bottom\"\n (click)=\"deleteFile()\" class=\"cursor-pointer button-link btn btn-secondary\"\n style=\"color: white;\"><i class=\"pi pi-trash\"></i></a>\n <a pTooltip=\"\u0110\u00F3ng\" tooltipPosition=\"bottom\" placeholder=\"Bottom\" style=\"color: white;\"\n (click)=\"closeSidebar(null)\" class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-times\"></i></a>\n </div>\n </div>\n <audio controls autoplay src=\"{{model.fileUrl}}\"\n style=\"margin: auto;position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%);\">\n Tr\u00ECnh duy\u1EC7t kh\u00F4ng h\u1ED7 tr\u1EE3 ph\u00E1t audio. </audio>\n </div>\n </ng-container>\n\n</p-sidebar>\n\n<tn-dialog *ngIf=\"renameFileForm.show\" #dialog [styleClass]=\"'address-form'\"\n [header]=\"renameFileForm.header | translate\" [popupSize]=\"renameFileForm.popupSize\" (onHide)=\"onCancelRenameFile()\">\n <file-form #formBase [parentModel]=\"model\" [parentContext]=\"context\" [model]=\"renameFileForm.formData\"\n (onSaved)=\"onSavedRenameFile()\" (onCancel)=\"onCancelRenameFile()\">\n </file-form>\n</tn-dialog>",
|
|
490
|
+
template: "<p-sidebar #sidebar [showCloseIcon]=\"false\" [fullScreen]=\"fullScreen\" [appendTo]=\"'body'\" [modal]=\"showModal\"\n [styleClass]=\"getStyleClassByDocumentType(data.fileType)\" [(visible)]=\"show\">\n <ng-container *ngIf=\"data.fileType == fileTypes.PDF\">\n <div id=\"fileViewerHolder\" class=\"file-viewer-holder\">\n <div #headerdialogmaterial class=\"header-dialog-material\">\n <div class=\"flex-item\" style=\"margin: 0px auto;\">\n <a *ngIf=\"isDesktop()\" (click)=\"!isReadonly && renameFile()\" style=\"color: white;\"\n class=\"btn btn-secondary\">\n <i class=\"fas fa-file-alt\"></i><span class=\"cursor-pointer\">\n {{ data.name }}\n </span>\n </a>\n </div>\n <div class=\"flex-item\">\n <!-- UD-2450 - TuDN -->\n <!-- <a *ngIf=\"_deviceDetectorService.isDesktop() && showPrint\" pTooltip=\"In t\u00E0i li\u1EC7u\"\n tooltipPosition=\"bottom\" placeholder=\"Bottom\" style=\"color: white;\" (click)=\"print()\"\n class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-print\"></i></a> -->\n <a *ngIf=\"showDownload\" pTooltip=\"T\u1EA3i xu\u1ED1ng\" tooltipPosition=\"bottom\" placeholder=\"Bottom\"\n style=\"color: white;\" (click)=\"download()\" class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-download\"></i></a>\n <!-- End UD-2450 - TuDN -->\n <a *ngIf=\"!_deviceDetectorService.isDesktop() && !readonly\" pTooltip=\"\u0110\u1ED5i t\u00EAn\"\n tooltipPosition=\"bottom\" (click)=\"renameFile()\"\n class=\"cursor-pointer button-link btn btn-secondary\" style=\"color: white;\"><i\n class=\"fas fa-eraser\"></i></a>\n <a *ngIf=\"showDelete && !readonly\" pTooltip=\"X\u00F3a t\u1EC7p tin\" tooltipPosition=\"bottom\"\n (click)=\"deleteFile()\" class=\"cursor-pointer button-link btn btn-secondary\"\n style=\"color: white;\"><i class=\"far fa-trash-alt\"></i></a>\n <a (click)=\"onTopbarItemClick($event)\" role=\"menuitem\" style=\"color: white;\"\n *ngIf=\"!readonly && _deviceDetectorService.isDesktop()\"\n class=\"cursor-pointer button-link btn btn-secondary submenu\"> <i class=\"fas fa-ellipsis-v\"></i>\n <ul class=\"layout-menu fadeInDown\" *ngIf=\"model.activeTopbarItem\">\n <li *ngIf=\"_deviceDetectorService.isDesktop()\" role=\"menuitem\" class=\"cursor-pointer\">\n <a (click)=\"editFile()\" class=\"file-row-action\"><i class=\"fas fa-pen-square\"></i>S\u1EEDa\n file\n tr\u1EF1c\n tuy\u1EBFn</a>\n </li>\n <li *ngIf=\"!isReadonly\" role=\"menuitem\" class=\"cursor-pointer\">\n <a (click)=\"renameFile()\" class=\"file-row-action\"><i class=\"fas fa-eraser\"></i>\u0110\u1ED5i\n t\u00EAn</a>\n </li>\n <li *ngIf=\"!isReadonly\" role=\"menuitem\" class=\"cursor-pointer\">\n <a (click)=\"deleteFile()\" class=\"file-row-action\"><i class=\"far fa-trash-alt\"></i>X\u00F3a\n t\u1EC7p\n tin</a>\n </li>\n </ul>\n </a>\n <a *ngIf=\"model.data?.showKySoButton\" pTooltip=\"K\u00FD s\u1ED1\" tooltipPosition=\"bottom\" placeholder=\"Bottom\"\n style=\"color: white;\" (click)=\"kySoHandle()\"\n class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-signature\"></i></a>\n <a pTooltip=\"\u0110\u00F3ng\" tooltipPosition=\"bottom\" placeholder=\"Bottom\" style=\"color: white;\"\n (click)=\"closeSidebar(null)\" class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-times\"></i></a>\n </div>\n </div>\n </div>\n <ngx-extended-pdf-viewer [src]=\"model.fileUrl\" useBrowserLocale=\"true\" height=\"calc(100vh - 50px)\"\n [enablePinchOnMobile]=\"true\" [filenameForDownload]=\"data.fileName\" [language]=\"'vi-VN'\"\n [showBookmarkButton]=\"false\" [showHandToolButton]=\"false\" [showOpenFileButton]=\"false\"\n [showUnverifiedSignatures]=\"true\">\n </ngx-extended-pdf-viewer>\n </ng-container>\n\n <ng-container\n *ngIf=\"data.fileType != fileTypes.IMAGE && data.fileType != fileTypes.VIDEO && data.fileType != fileTypes.AUDIO && data.fileType != fileTypes.PDF\">\n <div id=\"fileViewerHolder\" class=\"file-viewer-holder\">\n <div #headerdialogmaterial class=\"header-dialog-material\">\n <div class=\"flex-item\">\n </div>\n <div class=\"flex-item\">\n <a *ngIf=\"isDesktop()\" (click)=\"!isReadonly && renameFile()\" style=\"color: white;\"\n class=\"btn btn-secondary\">\n <i class=\"fas fa-file-alt\"></i><span class=\"cursor-pointer\">\n {{ data.name }}\n </span>\n </a>\n </div>\n <div class=\"flex-item\">\n <a *ngIf=\"isDesktop() && showPrint\" pTooltip=\"In t\u00E0i li\u1EC7u\" tooltipPosition=\"bottom\"\n placeholder=\"Bottom\" style=\"color: white;\" (click)=\"print()\"\n class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-print\"></i></a>\n <a *ngIf=\"showDownload\" pTooltip=\"T\u1EA3i xu\u1ED1ng\" tooltipPosition=\"bottom\" placeholder=\"Bottom\"\n style=\"color: white;\" (click)=\"download()\" class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-download\"></i></a>\n <a *ngIf=\"!readonly && showDelete && isDesktop()\" pTooltip=\"X\u00F3a t\u1EC7p tin\" tooltipPosition=\"bottom\"\n (click)=\"deleteFile()\" class=\"cursor-pointer button-link btn btn-secondary\"\n style=\"color: white;\"><i class=\"pi pi-trash\"></i></a>\n <a *ngIf=\"!readonly && isDesktop()\" pTooltip=\"S\u1EEDa file tr\u1EF1c tuy\u1EBFn\" (click)=\"editFile()\"\n placeholder=\"Bottom\" class=\"cursor-pointer button-link btn btn-secondary\" style=\"color: white;\">\n <i class=\"fas fa-pen-square\"></i></a>\n\n <a (click)=\"onTopbarItemClick($event)\" role=\"menuitem\" style=\"color: white;\" *ngIf=\"!isDesktop()\"\n class=\"cursor-pointer button-link btn btn-secondary submenu\">\n <i class=\"fas fa-ellipsis-v\"></i>\n <ul class=\"layout-menu fadeInDown\" *ngIf=\"model.activeTopbarItem\">\n <li *ngIf=\"!isReadonly\" role=\"menuitem\" class=\"cursor-pointer\">\n <a (click)=\"editFile()\" class=\"file-row-action\">\n <i class=\"fas fa-pen-square\"></i>S\u1EEDa file tr\u1EF1c tuy\u1EBFn</a>\n </li>\n <li *ngIf=\"!isReadonly\" role=\"menuitem\" class=\"cursor-pointer\">\n <a (click)=\"renameFile()\" class=\"file-row-action\"><i class=\"fas fa-eraser\"></i>\u0110\u1ED5i\n t\u00EAn</a>\n </li>\n <li *ngIf=\"!isReadonly && showDelete\" role=\"menuitem\" class=\"cursor-pointer\">\n <a (click)=\"deleteFile()\" class=\"file-row-action\"><i class=\"pi pi-trash\"></i>X\u00F3a\n t\u1EC7p tin</a>\n </li>\n </ul>\n </a>\n <a pTooltip=\"\u0110\u00F3ng\" tooltipPosition=\"bottom\" placeholder=\"Bottom\" style=\"color: white;\"\n (click)=\"closeSidebar(null)\" class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-times\"></i></a>\n </div>\n </div>\n\n <div class=\"dialog-material\" [class.view-file]=\"true\" [class.mobile]=\"!isDesktop()\"\n [class.view-file-text]=\"isFileType(fileTypes.TEXT)\"\n [class.view-file-spreadsheet]=\"isFileType(fileTypes.SPREADSHEET)\"\n [class.view-file-presentation]=\"isFileType(fileTypes.PRESENTATION)\">\n <div id=\"file-viewer\"></div>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"data.fileType == fileTypes.IMAGE && model.images.length > 0\">\n <div class=\"image-container\">\n <div #headerdialogmaterial class=\"header-dialog-material\">\n <div class=\"flex-item\">\n </div>\n <div class=\"flex-item\">\n <a *ngIf=\"isDesktop()\" (click)=\"!isReadonly && renameFile()\" style=\"color: white;\"\n class=\"btn btn-secondary\">\n <i class=\"fas fa-file-alt\"></i><span class=\"cursor-pointer\">\n {{ data.name }}\n </span>\n </a>\n </div>\n <div class=\"flex-item\">\n <a pTooltip=\"\u0110\u00F3ng\" tooltipPosition=\"bottom\" placeholder=\"Bottom\" style=\"color: white;\"\n (click)=\"closeSidebar(null)\" class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-times\"></i></a>\n </div>\n </div>\n\n <img *ngIf=\"model.images && model.images.length\" src=\"{{model.images[0]}}\" alt=\"Ch\u01B0a c\u00F3 \u1EA3nh\">\n </div>\n <!-- <app-image-viewer [showPDFOnlyLabel]=\"false\" [showPDFOnlyOption]=\"false\" [fullscreen]=\"false\"\n [images]=\"model.images\" [primaryColor]=\"'#3192e1'\" [idContainer]=\"'image-view-list'\"\n (mousedown)=\"closeSidebar($event)\" id=\"fileViewerHolder\" [loadOnInit]=\"true\">\n </app-image-viewer>\n <a style=\"color: white;\" (click)=\"closeSidebar(null)\" class=\"mobile-image-viewer-close\">\n <i class=\"far fa-times-circle\"></i></a> -->\n </ng-container>\n\n <ng-container *ngIf=\"data.fileType == fileTypes.VIDEO\">\n <div id=\"fileViewerHolder\" class=\"file-viewer-holder\" style=\"height: 100%;\">\n <div #headerdialogmaterial class=\"header-dialog-material\">\n <div class=\"flex-item\">\n </div>\n <div class=\"flex-item\">\n <a *ngIf=\"isDesktop()\" (click)=\"!isReadonly && renameFile()\" style=\"color: white;\"\n class=\"btn btn-secondary\">\n <i class=\"fas fa-file-alt\"></i><span class=\"cursor-pointer\">\n {{ data.name }}\n </span>\n </a>\n </div>\n <div class=\"flex-item\">\n <a *ngIf=\"showDownload\" pTooltip=\"T\u1EA3i xu\u1ED1ng\" tooltipPosition=\"bottom\" placeholder=\"Bottom\"\n style=\"color: white;\" (click)=\"download()\" class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-download\"></i>\n </a>\n <a *ngIf=\"!isReadonly && !isDesktop()\" (click)=\"renameFile()\" style=\"color: white;\"\n class=\"btn btn-secondary\">\n <i class=\"fas fa-file-alt\"></i><span class=\"cursor-pointer\">\n {{ data.name }}\n </span>\n </a>\n <a *ngIf=\"!readonly && showDelete\" pTooltip=\"X\u00F3a t\u1EC7p tin\" tooltipPosition=\"bottom\"\n (click)=\"deleteFile()\" class=\"cursor-pointer button-link btn btn-secondary\"\n style=\"color: white;\"><i class=\"pi pi-trash\"></i></a>\n <a pTooltip=\"\u0110\u00F3ng\" tooltipPosition=\"bottom\" placeholder=\"Bottom\" style=\"color: white;\"\n (click)=\"closeSidebar(null)\" class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-times\"></i></a>\n </div>\n </div>\n\n <div class=\"dialog-material\" [class.view-file]=\"true\" [class.mobile]=\"!isDesktop()\"\n style=\"width: 80%; margin: auto; height: 100%; border-radius: 0px;\">\n <video width=\"100%\" height=\"100%\" style=\"margin-top: 50px;\" autoplay controls src=\"{{model.fileUrl}}\">\n Tr\u00ECnh duy\u1EC7t kh\u00F4ng h\u1ED7 tr\u1EE3 m\u1EDF video.\n </video>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"data.fileType == fileTypes.AUDIO\">\n <div id=\"fileViewerHolder\" class=\"file-viewer-holder\" (mousedown)=\"closeSidebar($event)\" style=\"height: 100%;\">\n <div #headerdialogmaterial class=\"header-dialog-material\">\n <div class=\"flex-item\">\n </div>\n <div class=\"flex-item\">\n <a *ngIf=\"isDesktop()\" (click)=\"!isReadonly && renameFile()\" style=\"color: white;\"\n class=\"btn btn-secondary\">\n <i class=\"fas fa-file-alt\"></i><span class=\"cursor-pointer\">\n {{ data.name }}\n </span>\n </a>\n </div>\n <div class=\"flex-item\">\n <a *ngIf=\"showDownload\" pTooltip=\"T\u1EA3i xu\u1ED1ng\" tooltipPosition=\"bottom\" placeholder=\"Bottom\"\n style=\"color: white;\" (click)=\"download()\" class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-download\"></i></a>\n <a *ngIf=\"!isReadonly && showDelete\" pTooltip=\"X\u00F3a t\u1EC7p tin\" tooltipPosition=\"bottom\"\n (click)=\"deleteFile()\" class=\"cursor-pointer button-link btn btn-secondary\"\n style=\"color: white;\"><i class=\"pi pi-trash\"></i></a>\n <a pTooltip=\"\u0110\u00F3ng\" tooltipPosition=\"bottom\" placeholder=\"Bottom\" style=\"color: white;\"\n (click)=\"closeSidebar(null)\" class=\"cursor-pointer button-link btn btn-secondary\">\n <i class=\"fas fa-times\"></i></a>\n </div>\n </div>\n <audio controls autoplay src=\"{{model.fileUrl}}\"\n style=\"margin: auto;position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%);\">\n Tr\u00ECnh duy\u1EC7t kh\u00F4ng h\u1ED7 tr\u1EE3 ph\u00E1t audio. </audio>\n </div>\n </ng-container>\n\n</p-sidebar>\n\n<tn-dialog *ngIf=\"renameFileForm.show\" #dialog [styleClass]=\"'address-form'\"\n [header]=\"renameFileForm.header | translate\" [popupSize]=\"renameFileForm.popupSize\" (onHide)=\"onCancelRenameFile()\">\n <file-form #formBase [parentModel]=\"model\" [parentContext]=\"context\" [model]=\"renameFileForm.formData\"\n (onSaved)=\"onSavedRenameFile()\" (onCancel)=\"onCancelRenameFile()\">\n </file-form>\n</tn-dialog>",
|
|
438
491
|
providers: [ComponentContextService],
|
|
439
492
|
styles: ["::ng-deep .pdf-container ngx-extended-pdf-viewer #outerContainer{top:51px}.view-file{height:92vh}.dialog-material{display:block;border-radius:4px;box-sizing:border-box;overflow:hidden;outline:0;min-height:inherit;max-height:inherit;width:50vw;width:100%}.dialog-material.view-file-text{width:85%;margin:0 auto}.dialog-material.view-file-text.mobile{width:100%;margin:0 auto}.header-dialog-material{display:flex;flex-direction:row;justify-content:space-between;padding:5px 15px;box-sizing:border-box;outline:0;height:50px;line-height:50px;background:#3192e1;position:absolute;pointer-events:auto;left:0;right:0;top:0;width:auto}.header-dialog-material .flex-item{line-height:40px}.header-dialog-material .flex-item .cursor-pointer{cursor:pointer;display:inline-block;padding:0 15px}.header-dialog-material .flex-item .cursor-pointer.submenu{position:relative}.header-dialog-material .flex-item .cursor-pointer.submenu ul{display:flex;position:absolute;top:25px;right:0;align-content:flex-end;flex-direction:column;width:230px;border-radius:2px;padding:5px 0;background:#fff;box-shadow:0 6px 12px rgba(0,0,0,.175);z-index:1}.header-dialog-material .flex-item .cursor-pointer.submenu ul li{padding:0}.header-dialog-material .flex-item .cursor-pointer.submenu ul li a{padding:0 0 0 5px;line-height:40px}.header-dialog-material .flex-item .cursor-pointer.submenu ul li a:hover{background:#f5f5f5}.header-dialog-material ul:before{top:-8px;right:8px;left:auto;width:0;height:0;border-left:8px solid transparent;border-right:8px solid transparent;border-bottom:10px solid #fff;content:\" \";position:absolute}.mat-dialog-content{display:block;margin:0;padding:0;max-height:100vh;max-width:50vw;overflow:auto;-webkit-overflow-scrolling:touch}::ng-deep .cdk-overlay-container{position:fixed;z-index:1000;background:rgba(0,0,0,.7)!important}::ng-deep .cdk-overlay-backdrop{position:absolute;top:0;bottom:0;left:0;right:0;z-index:1000;pointer-events:auto;-webkit-tap-highlight-color:rgba(0,0,0,0);transition:opacity .4s cubic-bezier(.25,.8,.25,1);opacity:0}::ng-deep .mat-dialog-container{display:block;padding:0!important}::ng-deep .cdk-overlay-pane{max-height:100%}.button-link:hover{transition:background-color .1s,opacity .1s;background-image:none;background-color:hsla(0,0%,100%,.25)}.file-row-action i{margin-right:5px;width:40px;text-align:center}.file-row-action{line-height:34px;width:100%;display:block;color:#212529}.layout-menu li a{border:none;text-align:left}.layout-menu li a i:first-child{color:#666;font-size:1em}.footer-page{position:absolute;left:50%;margin-right:-50%;transform:translate(-50%);border-radius:3px;bottom:12px;z-index:3;overflow:hidden}.footer-page-label{border-right:1px solid hsla(0,0%,100%,.2);display:inline-block;font-size:13px;line-height:44px;height:44px;vertical-align:middle;background:#000}.footer-page-label-page{display:inline-block;margin-left:12px;vertical-align:middle;background:rgba(0,0,0,.75);color:#fff}.footer-page-label-numberpage{display:inline-block;text-align:center;vertical-align:middle;width:48px;color:#fff}.footer-page-label-space{display:inline-block;margin-left:12px;vertical-align:middle;color:#fff}.footer-page-label-totalpage{display:inline-block;text-align:center;vertical-align:middle;width:48px;color:#fff}::ng-deep p-table .ui-table-tbody>tr>td{overflow:unset}::ng-deep .ui-sidebar-left.ui-sidebar-active{padding-top:55px;background:rgba(0,0,0,.4);border:0}::ng-deep .layout-wrapper .layout-menu-container{border-radius:unset}::ng-deep .p-sidebar{padding:0!important;background-color:#000}@media print{::ng-deep body *{visibility:visible!important}}::ng-deep .image-container{display:flex;justify-content:center;background-color:#000}::ng-deep .image-container .image-container-toolbar{display:flex;justify-content:flex-end}::ng-deep .image-container>img{height:calc(100ch - 50px)!important;max-height:100%!important;margin-top:50px}"]
|
|
440
493
|
},] }
|
|
@@ -470,4 +523,4 @@ FileViewerComponent.propDecorators = {
|
|
|
470
523
|
onRename: [{ type: Output }],
|
|
471
524
|
onDelete: [{ type: Output }]
|
|
472
525
|
};
|
|
473
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS12aWV3ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliL2NvbXBvbmVudHMvZmlsZS1leHBsb3Jlci9maWxlLXZpZXdlci9maWxlLXZpZXdlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDNUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVwRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUN6RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDckUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRXZFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5Q0FB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QUM7O2FBQ3ZDOzs7WUFuQlEsbUJBQW1CO1lBaEJSLFVBQVU7WUFjckIsYUFBYTtZQVFiLG1CQUFtQjtZQW5CRSxjQUFjO1lBY25DLGVBQWU7WUFkZixtQkFBbUI7WUFlbkIsZUFBZTtZQU1mLGtCQUFrQjtZQVRsQixtQkFBbUI7WUFibkIscUJBQXFCO1lBcUJyQixpQkFBaUI7WUFGakIsbUJBQW1CO1lBSW5CLGFBQWE7WUF6QndCLFFBQVE7OztzQkFxQ2pELFNBQVMsU0FBQyxTQUFTO29CQUNuQixLQUFLO3VCQUdMLEtBQUs7d0JBQ0wsS0FBSzsyQkFDTCxLQUFLO3lCQUNMLEtBQUs7eUJBQ0wsS0FBSzt3QkFDTCxLQUFLO3lCQUNMLEtBQUs7c0JBQ0wsTUFBTTt1QkFDTixNQUFNO3VCQUNOLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5qZWN0b3IsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBEZXZpY2VEZXRlY3RvclNlcnZpY2UgfSBmcm9tICduZ3gtZGV2aWNlLWRldGVjdG9yJztcbmltcG9ydCB7IENvbmZpcm1hdGlvblNlcnZpY2UsIE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvYXBpJztcbmltcG9ydCB7IFNpZGViYXIgfSBmcm9tICd0bi1jdXN0b20tcHJpbWVuZy9zaWRlYmFyJztcblxuaW1wb3J0IHsgQ29tcG9uZW50Q29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9hcHAtY29udGV4dC9jb21wb25lbnQtY29udGV4dC5zZXJ2aWNlJztcbmltcG9ydCB7IENvbXBvbmVudEJhc2UgfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL2Jhc2UvY29tcG9uZW50LWJhc2UnO1xuaW1wb3J0IHsgQ29tbW9uRXJyb3JDb2RlIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9jb21tb24tZXJyb3ItY29kZSc7XG5pbXBvcnQgeyBGSUxFX1RZUEVTIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9jb25zdGFudHMnO1xuaW1wb3J0IHsgQ3J1ZEZvcm1EYXRhLCBQb3B1cFNpemUgfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL2Zvcm0tc2NoZW1hJztcbmltcG9ydCB7IE1vZHVsZUNvbmZpZyB9IGZyb20gJy4uLy4uLy4uL2NvbmZpZ3MvbW9kdWxlLWNvbmZpZyc7XG5pbXBvcnQgeyBFZGl0RmlsZUNvbW1hbmQgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZWRpdC1maWxlLWNvbW1hbmQnO1xuaW1wb3J0IHsgQ29tbWFuZFR5cGUsIFRuQ2xpZW50Q29tbWFuZCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy90bi1jbGllbnQtY29tbWFuZCc7XG5pbXBvcnQgeyBBdXRoZW5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXV0aGVuLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ3VzdG9tUm91dGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2N1c3RvbS1yb3V0ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBNb2R1bGVDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbW9kdWxlLWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IE5vdGlmaWVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL25vdGlmaWVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgVG5DbGllbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdG4tY2xpZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgRmlsZVZlcnNpb25EVE8gfSBmcm9tICcuLi9tb2RlbHMvZmlsZS12ZXJzaW9uLWR0byc7XG5pbXBvcnQgeyBHZW5lcmF0ZUxpbmtEb3dubG9hZERUTyB9IGZyb20gJy4uL21vZGVscy9nZW5lcmF0ZS1saW5rLWRvd25sb2FkLWR0byc7XG5pbXBvcnQgeyBEb3dubG9hZExpbmtTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZG93bmxvYWQtbGluay5zZXJ2aWNlJztcbmltcG9ydCB7IEZpbGVFeHBsb3JlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9maWxlLWV4cGxvcmVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmlsZU9iamVjdFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9maWxlLW9iamVjdC5zZXJ2aWNlJztcbmltcG9ydCB7IEZpbGVWZXJzaW9uU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2ZpbGUtdmVyc2lvbi5zZXJ2aWNlJztcbmltcG9ydCB7IEZvbGRlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9mb2xkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBDb21DdHhDb25zdGFudHMgfSBmcm9tICcuLy4uLy4uLy4uL2NvbmZpZ3MvY29tcG9uZW50LWNvbnRleHQuY29uc3RhbnQnO1xuXG5kZWNsYXJlIGxldCBEb2NzQVBJOiBhbnk7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmlsZS12aWV3ZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnZmlsZS12aWV3ZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWydmaWxlLXZpZXdlci5jb21wb25lbnQuc2NzcyddLFxuICAgIHByb3ZpZGVyczogW0NvbXBvbmVudENvbnRleHRTZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBGaWxlVmlld2VyQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50QmFzZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgQFZpZXdDaGlsZCgnc2lkZWJhcicpIHNpZGViYXI6IFNpZGViYXI7XG4gICAgQElucHV0KCkgbW9kZWw6IGFueSA9IHtcbiAgICAgICAgZGF0YToge31cbiAgICB9O1xuICAgIEBJbnB1dCgpIHJlYWRvbmx5ID0gZmFsc2U7XG4gICAgQElucHV0KCkgc2hvd1ByaW50ID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBzaG93RG93bmxvYWQgPSB0cnVlO1xuICAgIEBJbnB1dCgpIHNob3dEZWxldGUgPSB0cnVlO1xuICAgIEBJbnB1dCgpIGZ1bGxTY3JlZW4gPSB0cnVlO1xuICAgIEBJbnB1dCgpIHNob3dNb2RhbCA9IHRydWU7XG4gICAgQElucHV0KCkgc3R5bGVDbGFzcyA9IFwiXCI7XG4gICAgQE91dHB1dCgpIG9uQ2xvc2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uUmVuYW1lOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvbkRlbGV0ZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIHByaXZhdGUgX21vZHVsZUNvbmZpZzogTW9kdWxlQ29uZmlnO1xuICAgIGRhdGE6IGFueSA9IHt9O1xuICAgIHNob3cgPSBmYWxzZTtcbiAgICBpc1JlYWRvbmx5ID0gZmFsc2U7XG4gICAgZmlsZVR5cGVzID0gRklMRV9UWVBFUztcbiAgICByZW5hbWVGaWxlRm9ybTogYW55O1xuICAgIHByaXZhdGUgX3RyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2U7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX21vZHVsZUNvbmZpZ1NlcnZpY2U6IE1vZHVsZUNvbmZpZ1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgX2F1dGhlblNlcnZpY2U6IEF1dGhlblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2ZpbGVFeHBsb3JlclNlcnZpY2U6IEZpbGVFeHBsb3JlclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX21lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfbm90aWZpZXJTZXJ2aWNlOiBOb3RpZmllclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2NvbmZpcm1TZXJ2aWNlOiBDb25maXJtYXRpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF90bkNsaWVudFNlcnZpY2U6IFRuQ2xpZW50U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfZmlsZVZlcnNpb25TZXJ2aWNlOiBGaWxlVmVyc2lvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2N1c3RvbVJvdXRlclNlcnZpY2U6IEN1c3RvbVJvdXRlclNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyBfZGV2aWNlRGV0ZWN0b3JTZXJ2aWNlOiBEZXZpY2VEZXRlY3RvclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2ZpbGVPYmplY3RTZXJ2aWNlOiBGaWxlT2JqZWN0U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfZG93bmxvYWRMaW5rU2VydmljZTogRG93bmxvYWRMaW5rU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfZm9sZGVyU2VydmljZTogRm9sZGVyU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIF9pbmplY3RvcjogSW5qZWN0b3JcbiAgICApIHtcbiAgICAgICAgc3VwZXIoX2luamVjdG9yKTtcbiAgICAgICAgdGhpcy5fbW9kdWxlQ29uZmlnID0gdGhpcy5fbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKTtcbiAgICAgICAgdGhpcy5fdHJhbnNsYXRlU2VydmljZSA9IF9pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuaW5pdCgpO1xuICAgIH1cblxuICAgIGFzeW5jIGluaXQoKSB7XG4gICAgICAgIHRoaXMuaW5pdEZvcm0oKTtcbiAgICAgICAgYXdhaXQgdGhpcy5nZXREZXRhaWwoKTtcbiAgICAgICAgdGhpcy5zaG93RmlsZSgpO1xuICAgIH1cblxuICAgIGFzeW5jIGdldERldGFpbCgpIHtcbiAgICAgICAgdGhpcy5kYXRhID0gdGhpcy5tb2RlbC5kYXRhO1xuICAgICAgICBpZiAoIXRoaXMuZGF0YS5maWxlSWQgJiYgIXRoaXMuZGF0YS5maWxlVmVyc2lvbklkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhLmZpbGVVcmwgIT0gbnVsbCAmJiB0aGlzLmRhdGEuZmlsZVVybCAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEuZXh0ZW5zaW9uID0gdGhpcy5fZmlsZU9iamVjdFNlcnZpY2UuZ2V0RmlsZUV4dGVuc2lvbih0aGlzLmRhdGEubmFtZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhLmZpbGVUeXBlID0gdGhpcy5fZmlsZU9iamVjdFNlcnZpY2UuZ2V0RmlsZVR5cGUodGhpcy5kYXRhLmV4dGVuc2lvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZGF0YTogYW55ID0gbnVsbDtcbiAgICAgICAgaWYgKHRoaXMuZGF0YS5maWxlVmVyc2lvbklkKSB7XG4gICAgICAgICAgICBjb25zdCBmaWxlVmVyc2lvbiA9IChhd2FpdCB0aGlzLl9maWxlVmVyc2lvblNlcnZpY2UuZ2V0RGV0YWlsKHRoaXMuZGF0YS5maWxlVmVyc2lvbklkKSkuZGF0YSB8fCB7fTtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVPYmplY3QgPSAoYXdhaXQgdGhpcy5fZmlsZU9iamVjdFNlcnZpY2UuZ2V0RGV0YWlsKGZpbGVWZXJzaW9uLmZpbGVJZCkpLmRhdGEgfHwge307XG4gICAgICAgICAgICBkYXRhID0gZmlsZU9iamVjdDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGRhdGEgPSAoYXdhaXQgdGhpcy5fZmlsZU9iamVjdFNlcnZpY2UuZ2V0RGV0YWlsKHRoaXMuZGF0YS5maWxlSWQpKS5kYXRhIHx8IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgZGF0YS5leHRlbnNpb24gPSB0aGlzLl9maWxlT2JqZWN0U2VydmljZS5nZXRGaWxlRXh0ZW5zaW9uKGRhdGEubmFtZSk7XG4gICAgICAgIGRhdGEuZmlsZVR5cGUgPSB0aGlzLl9maWxlT2JqZWN0U2VydmljZS5nZXRGaWxlVHlwZShkYXRhLmV4dGVuc2lvbik7XG4gICAgICAgIGRhdGEuZmlsZUlkID0gdGhpcy5kYXRhLmZpbGVJZDtcbiAgICAgICAgZGF0YS5maWxlVmVyc2lvbklkID0gdGhpcy5kYXRhLmZpbGVWZXJzaW9uSWQ7XG5cbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICB9XG5cbiAgICBzaG93RmlsZSgpIHtcbiAgICAgICAgdGhpcy5tb2RlbC5pbWFnZXMgPSBbXTtcbiAgICAgICAgdGhpcy5tb2RlbC5pc0ltYWdlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zaG93ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jb250ZXh0LnJvb3Quc3Vic2NyaWJlKENvbUN0eENvbnN0YW50cy5ST09ULktFWV9ET1dOX0VTQywgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jbG9zZVNpZGViYXIobnVsbCk7XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgZm9yY2VVc2luZ0ludGVybmFsID0gZmFsc2U7XG4gICAgICAgIGxldCBwcm9jZXNzRnVuYzogKHVybDogc3RyaW5nKSA9PiB2b2lkO1xuICAgICAgICBzd2l0Y2ggKHRoaXMuZGF0YS5maWxlVHlwZSkge1xuICAgICAgICAgICAgY2FzZSBGSUxFX1RZUEVTLklNQUdFOlxuICAgICAgICAgICAgICAgIHByb2Nlc3NGdW5jID0gdGhpcy5wcm9jZXNzU2hvd0ltYWdlLmJpbmQodGhpcyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEZJTEVfVFlQRVMuVklERU86XG4gICAgICAgICAgICBjYXNlIEZJTEVfVFlQRVMuQVVESU86XG4gICAgICAgICAgICAgICAgcHJvY2Vzc0Z1bmMgPSB0aGlzLnByb2Nlc3NWaWRlb09yQXVkaW8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRklMRV9UWVBFUy5QREY6XG4gICAgICAgICAgICAgICAgcHJvY2Vzc0Z1bmMgPSB0aGlzLnByb2Nlc3NGaWxlUGRmLmJpbmQodGhpcyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuaXNJbWFnZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGZvcmNlVXNpbmdJbnRlcm5hbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgcHJvY2Vzc0Z1bmMgPSB0aGlzLnByb2Nlc3NPdGhlckZpbGVFeHRlbnNpb24uYmluZCh0aGlzKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5kYXRhLmZpbGVVcmwgfHwgdGhpcy5kYXRhLmZpbGVVcmwgPT09ICcnKSB7XG4gICAgICAgICAgICBjb25zdCBtb2RlbCA9IHRoaXMuZ2V0R2VuZXJhdGVEb3dubG9hZExpbmtNb2RlbCgpO1xuICAgICAgICAgICAgdGhpcy5fZG93bmxvYWRMaW5rU2VydmljZVxuICAgICAgICAgICAgICAgIC5nZW5lcmF0ZURvd25sb2FkTGluayhtb2RlbClcbiAgICAgICAgICAgICAgICAudGhlbihycyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVybCA9IHRoaXMuX2Rvd25sb2FkTGlua1NlcnZpY2UuZ2V0QW5vbnltb3VzRG93bmxvYWRVcmxGb3JWaWV3ZXIocnMuZGF0YSwgZm9yY2VVc2luZ0ludGVybmFsKTtcbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0Z1bmModXJsKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHByb2Nlc3NGdW5jKHRoaXMuZGF0YS5maWxlVXJsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldEdlbmVyYXRlRG93bmxvYWRMaW5rTW9kZWwoKSB7XG4gICAgICAgIHJldHVybiA8R2VuZXJhdGVMaW5rRG93bmxvYWREVE8+e1xuICAgICAgICAgICAgZmlsZUlkOiB0aGlzLmRhdGEuZmlsZUlkLFxuICAgICAgICAgICAgZmlsZVZlcnNpb25JZDogdGhpcy5kYXRhLmZpbGVWZXJzaW9uSWRcbiAgICAgICAgfTtcbiAgICB9XG5cblxuICAgIHNob3dJbWFnZVdoZW5Mb2FkZWQoKSB7XG4gICAgICAgIGxldCBkb25lID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbWFnZS12aWV3LWxpc3QnKTtcbiAgICAgICAgaWYgKGNvbnRhaW5lcikge1xuICAgICAgICAgICAgY29uc3QgbG9hZGluZzogYW55ID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJy5pdi1sb2FkZXInKTtcbiAgICAgICAgICAgIGlmIChsb2FkaW5nICYmIGxvYWRpbmcuc3R5bGUuZGlzcGxheSA9PSAnbm9uZScpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbWcgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcignaW1nLml2LWltYWdlLml2LWxhcmdlLWltYWdlJyk7XG4gICAgICAgICAgICAgICAgaWYgKGltZykge1xuICAgICAgICAgICAgICAgICAgICBpbWcuY2xhc3NMaXN0LmFkZCgnc2hvdycpO1xuICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWRvbmUpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zaG93SW1hZ2VXaGVuTG9hZGVkKCksIDUwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb2Nlc3NTaG93SW1hZ2UodXJsOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5tb2RlbC5pbWFnZXMgPSBbdXJsXTtcbiAgICB9XG5cbiAgICBwcm9jZXNzVmlkZW9PckF1ZGlvKHVybDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMubW9kZWwuZmlsZVVybCA9IHVybDtcbiAgICB9XG5cbiAgICBwcm9jZXNzRmlsZVBkZih1cmw6IHN0cmluZykge1xuICAgICAgICB0aGlzLm1vZGVsLmZpbGVVcmwgPSB1cmw7XG4gICAgfVxuXG4gICAgcHJvY2Vzc090aGVyRmlsZUV4dGVuc2lvbih1cmw6IHN0cmluZykge1xuICAgICAgICB0aGlzLmluaXREb2N1bWVudFZpZXdlcih0aGlzLmRhdGEuZXh0ZW5zaW9uLCB0aGlzLmRhdGEuZmlsZVR5cGUsIHVybCk7XG4gICAgfVxuXG4gICAgaW5pdERvY3VtZW50Vmlld2VyKGZpbGVFeHRlbnNpb24sIGZpbGVUeXBlLCBmaWxlVXJsKSB7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHtcbiAgICAgICAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgIHR5cGU6IHRoaXMuX2RldmljZURldGVjdG9yU2VydmljZS5pc0Rlc2t0b3AoKSA/ICdkZXNrdG9wJyA6ICdtb2JpbGUnLFxuICAgICAgICAgICAgZG9jdW1lbnRUeXBlOiBgJHtmaWxlVHlwZX1gLFxuICAgICAgICAgICAgZWRpdG9yQ29uZmlnOiB7XG4gICAgICAgICAgICAgICAgbW9kZTogJ3ZpZXcnLFxuICAgICAgICAgICAgICAgIGN1c3RvbWl6YXRpb246IHtcbiAgICAgICAgICAgICAgICAgICAgY2hhdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGFib3V0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgY29tbWVudHM6IHRydWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZG9jdW1lbnQ6IHtcbiAgICAgICAgICAgICAgICBwZXJtaXNzaW9uczoge1xuICAgICAgICAgICAgICAgICAgICBjb21tZW50OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgZG93bmxvYWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGVkaXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBwcmludDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgcmV2aWV3OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgZmlsbEZvcm1zOiBmYWxzZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZmlsZVR5cGU6IGAke2ZpbGVFeHRlbnNpb259YCxcbiAgICAgICAgICAgICAgICB0aXRsZTogYCR7dGhpcy5tb2RlbC5kYXRhLm5hbWV9YCxcbiAgICAgICAgICAgICAgICB1cmw6IGAke2ZpbGVVcmx9YFxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLm1vZGVsLmRvY0VkaXRvciA9IG5ldyBEb2NzQVBJLkRvY0VkaXRvcignZmlsZS12aWV3ZXInLCBjb25maWcpO1xuICAgIH1cblxuICAgIGluaXRGb3JtKCkge1xuICAgICAgICB0aGlzLnJlbmFtZUZpbGVGb3JtID0ge1xuICAgICAgICAgICAgaGVhZGVyOiAnxJDhu5VpIHTDqm4gdOG7h3AnLFxuICAgICAgICAgICAgc2hvdzogZmFsc2UsXG4gICAgICAgICAgICBmb3JtRGF0YTogbmV3IENydWRGb3JtRGF0YSgpLFxuICAgICAgICAgICAgcG9wdXBTaXplOiBuZXcgUG9wdXBTaXplKHtcbiAgICAgICAgICAgICAgICB3aWR0aDogNDAwLFxuICAgICAgICAgICAgICAgIGhlaWdodDogMjAwXG4gICAgICAgICAgICB9KVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGFzeW5jIGdldE9yaWVudGF0aW9uKGltYWdlVXJsLCBjYWxsYmFjaykge1xuICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChpbWFnZVVybCk7XG4gICAgICAgIGNvbnN0IGJsb2IgPSBhd2FpdCByZXMuYmxvYigpO1xuXG4gICAgICAgIHJlYWRlci5vbmxvYWQgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmlldyA9IG5ldyBEYXRhVmlldyhldmVudC50YXJnZXQucmVzdWx0KTtcblxuICAgICAgICAgICAgaWYgKHZpZXcuZ2V0VWludDE2KDAsIGZhbHNlKSAhPSAweEZGRDgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soYmxvYiwgLTIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBsZW5ndGggPSB2aWV3LmJ5dGVMZW5ndGg7XG4gICAgICAgICAgICBsZXQgb2Zmc2V0ID0gMjtcblxuICAgICAgICAgICAgd2hpbGUgKG9mZnNldCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hcmtlciA9IHZpZXcuZ2V0VWludDE2KG9mZnNldCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIG9mZnNldCArPSAyO1xuXG4gICAgICAgICAgICAgICAgaWYgKG1hcmtlciA9PSAweEZGRTEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZpZXcuZ2V0VWludDMyKG9mZnNldCArPSAyLCBmYWxzZSkgIT0gMHg0NTc4Njk2Nikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGJsb2IsIC0xKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBsaXR0bGUgPSB2aWV3LmdldFVpbnQxNihvZmZzZXQgKz0gNiwgZmFsc2UpID09IDB4NDk0OTtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IHZpZXcuZ2V0VWludDMyKG9mZnNldCArIDQsIGxpdHRsZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhZ3MgPSB2aWV3LmdldFVpbnQxNihvZmZzZXQsIGxpdHRsZSk7XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSAyO1xuXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGFnczsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmlldy5nZXRVaW50MTYob2Zmc2V0ICsgKGkgKiAxMiksIGxpdHRsZSkgPT0gMHgwMTEyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGJsb2IsIHZpZXcuZ2V0VWludDE2KG9mZnNldCArIChpICogMTIpICsgOCwgbGl0dGxlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoKG1hcmtlciAmIDB4RkYwMCkgIT0gMHhGRjAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IHZpZXcuZ2V0VWludDE2KG9mZnNldCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhibG9iLCAtMSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGJsb2IpO1xuICAgIH1cblxuICAgIGFzeW5jIGdldEJhc2U2NChibG9iLCBvcmllbnRhdGlvbikge1xuICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuXG4gICAgICAgIC8vIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKGltYWdlVXJsKTtcbiAgICAgICAgLy8gY29uc3QgYmxvYiA9IGF3YWl0IHJlcy5ibG9iKCk7XG5cbiAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoYmxvYik7XG4gICAgICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBiYXNlNjQgPSByZWFkZXIucmVzdWx0O1xuICAgICAgICAgICAgdGhpcy5yZXNldE9yaWVudGF0aW9uKGJhc2U2NCwgb3JpZW50YXRpb24sIChyZXNldEJhc2U2NEltYWdlKSA9PiB7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnNob3cgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGltYWdlV2l0aG91dEJhc2U2NFByZWZpeCA9IHJlc2V0QmFzZTY0SW1hZ2Uuc3BsaXQoJ2Jhc2U2NCwnKVsxXTtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmltYWdlcyA9IFtpbWFnZVdpdGhvdXRCYXNlNjRQcmVmaXhdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIHJlYWRlci5vbmVycm9yID0gKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnRXJyb3I6ICcsIGVycm9yKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICByZXNldE9yaWVudGF0aW9uKHNyY0Jhc2U2NCwgc3JjT3JpZW50YXRpb24sIGNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IGltZyA9IG5ldyBJbWFnZSgpO1xuXG4gICAgICAgIGltZy5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB3aWR0aCA9IGltZy53aWR0aCxcbiAgICAgICAgICAgICAgICBoZWlnaHQgPSBpbWcuaGVpZ2h0LFxuICAgICAgICAgICAgICAgIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpLFxuICAgICAgICAgICAgICAgIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG4gICAgICAgICAgICAvLyBzZXQgcHJvcGVyIGNhbnZhcyBkaW1lbnNpb25zIGJlZm9yZSB0cmFuc2Zvcm0gJiBleHBvcnRcbiAgICAgICAgICAgIGlmICg0IDwgc3JjT3JpZW50YXRpb24gJiYgc3JjT3JpZW50YXRpb24gPCA5KSB7XG4gICAgICAgICAgICAgICAgY2FudmFzLndpZHRoID0gaGVpZ2h0O1xuICAgICAgICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSB3aWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHRyYW5zZm9ybSBjb250ZXh0IGJlZm9yZSBkcmF3aW5nIGltYWdlXG4gICAgICAgICAgICBzd2l0Y2ggKHNyY09yaWVudGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAyOiBjdHgudHJhbnNmb3JtKC0xLCAwLCAwLCAxLCB3aWR0aCwgMCk7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgMzogY3R4LnRyYW5zZm9ybSgtMSwgMCwgMCwgLTEsIHdpZHRoLCBoZWlnaHQpOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IGN0eC50cmFuc2Zvcm0oMSwgMCwgMCwgLTEsIDAsIGhlaWdodCk7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNTogY3R4LnRyYW5zZm9ybSgwLCAxLCAxLCAwLCAwLCAwKTsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA2OiBjdHgudHJhbnNmb3JtKDAsIDEsIC0xLCAwLCBoZWlnaHQsIDApOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDc6IGN0eC50cmFuc2Zvcm0oMCwgLTEsIC0xLCAwLCBoZWlnaHQsIHdpZHRoKTsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA4OiBjdHgudHJhbnNmb3JtKDAsIC0xLCAxLCAwLCAwLCB3aWR0aCk7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBkcmF3IGltYWdlXG4gICAgICAgICAgICBjdHguZHJhd0ltYWdlKGltZywgMCwgMCk7XG5cbiAgICAgICAgICAgIC8vIGV4cG9ydCBiYXNlNjRcbiAgICAgICAgICAgIGNhbGxiYWNrKGNhbnZhcy50b0RhdGFVUkwoKSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgaW1nLnNyYyA9IHNyY0Jhc2U2NDtcbiAgICB9XG5cbiAgICBvblRvcGJhckl0ZW1DbGljayhldmVudCkge1xuICAgICAgICB0aGlzLm1vZGVsLmFjdGl2ZVRvcGJhckl0ZW0gPSAhdGhpcy5tb2RlbC5hY3RpdmVUb3BiYXJJdGVtO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIGNsb3NlU2lkZWJhcihldmVudCA9IG51bGwpIHtcbiAgICAgICAgaWYgKCFldmVudCB8fCBldmVudC50YXJnZXQuaWQgPT0gJ2ZpbGVWaWV3ZXJIb2xkZXInIHx8IGV2ZW50LnRhcmdldC5pZCA9PSAnaW1hZ2Utdmlldy1saXN0JyB8fCBldmVudC50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdpbWFnZS1jb250YWluZXInKVxuICAgICAgICAgICAgfHwgZXZlbnQudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnaXYtaW1hZ2UtdmlldycpKSB7XG4gICAgICAgICAgICB0aGlzLm1vZGVsLmFjdGl2ZVRvcGJhckl0ZW0gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc2hvdyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5vbkNsb3NlLm5leHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaW50KCkge1xuICAgICAgICB0aGlzLl9kb3dubG9hZExpbmtTZXJ2aWNlLmNvbnZlcnRUb1BkZkJhc2U2NCh0aGlzLmRhdGEubmFtZSwgdGhpcy5kYXRhLmZpbGVJZCwgdGhpcy5kYXRhLmZpbGVWZXJzaW9uSWQpXG4gICAgICAgICAgICAudGhlbihycyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFycy5zdWNjZXNzIHx8ICFycy5kYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9maWxlRXhwbG9yZXJTZXJ2aWNlLnByaW50KHJzLmRhdGEpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZG93bmxvYWQoKSB7XG4gICAgICAgIGNvbnN0IG1vZGVsID0gdGhpcy5nZXRHZW5lcmF0ZURvd25sb2FkTGlua01vZGVsKCk7XG4gICAgICAgIHRoaXMuX2Rvd25sb2FkTGlua1NlcnZpY2UuZG93bmxvYWRMaW5rKG1vZGVsKTtcbiAgICB9XG5cbiAgICBkZWxldGVGaWxlKCkge1xuICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd0RlbGV0ZUNvbmZpcm0oKVxuICAgICAgICAgICAgLnRoZW4ocnMgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl9mb2xkZXJTZXJ2aWNlLmRlbGV0ZU11bHRpcGxlKFt0aGlzLmRhdGFdKVxuICAgICAgICAgICAgICAgICAgICAudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93RGVsZXRlRGF0YVN1Y2Nlc3MoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlU2lkZWJhcihudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uQ2xvc2UubmV4dCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZ0J5UmVzcG9uc2UocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlbmFtZUZpbGUoKSB7XG4gICAgICAgIHRoaXMucmVuYW1lRmlsZUZvcm0uaGVhZGVyID0gJ8SQ4buVaSB0w6puIHRoxrAgbeG7pWMnO1xuICAgICAgICB0aGlzLnJlbmFtZUZpbGVGb3JtLmZvcm1EYXRhLmRhdGEgPSB7XG4gICAgICAgICAgICBpZDogdGhpcy5kYXRhLmlkXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5yZW5hbWVGaWxlRm9ybS5zaG93ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBhc3luYyBvblNhdmVkUmVuYW1lRmlsZSgpIHtcbiAgICAgICAgdGhpcy5yZW5hbWVGaWxlRm9ybS5zaG93ID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGZpbGUgPSAoYXdhaXQgdGhpcy5fZmlsZU9iamVjdFNlcnZpY2UuZ2V0RGV0YWlsKHRoaXMuZGF0YS5pZCkpLmRhdGE7XG4gICAgICAgIGlmIChmaWxlKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEubmFtZSA9IGZpbGUubmFtZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQ2FuY2VsUmVuYW1lRmlsZSgpIHtcbiAgICAgICAgdGhpcy5yZW5hbWVGaWxlRm9ybS5zaG93ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgZWRpdEZpbGUoKSB7XG4gICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93U3VjY2VzcygnxJBhbmcga+G6v3QgbuG7kWkgbeG7nyDhu6luZyBk4bulbmcnKTtcblxuICAgICAgICB0aGlzLl9maWxlVmVyc2lvblNlcnZpY2UuY3JlYXRlTmV3TWlub3JWZXJzaW9uKHRoaXMuZGF0YS5maWxlSWQsICcnLCBmYWxzZSlcbiAgICAgICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlVmVyc2lvbiA9IDxGaWxlVmVyc2lvbkRUTz5yZXNwb25zZS5kYXRhO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZVVybCA9IHRoaXMuX2ZpbGVWZXJzaW9uU2VydmljZS5nZXRGaWxlVmVyc2lvbkRvd25sb2FkVXJsKGZpbGVWZXJzaW9uLmlkKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1hbmQgPSBuZXcgVG5DbGllbnRDb21tYW5kKCk7XG4gICAgICAgICAgICAgICAgY29tbWFuZC5jb21tYW5kVHlwZSA9IENvbW1hbmRUeXBlLkVkaXRGaWxlO1xuICAgICAgICAgICAgICAgIGNvbW1hbmQua2V5ID0gdGhpcy5fbW9kdWxlQ29uZmlnLmVudmlyb25tZW50LnNpZ25hbHIuY2xpZW50S2V5O1xuXG4gICAgICAgICAgICAgICAgY29uc3QgZWRpdEZpbGVDb21tYW5kID0gbmV3IEVkaXRGaWxlQ29tbWFuZCgpO1xuICAgICAgICAgICAgICAgIGVkaXRGaWxlQ29tbWFuZC5maWxlU2VydmljZUVuZHBvaW50ID0gdGhpcy5fbW9kdWxlQ29uZmlnLmVudmlyb25tZW50LmFwaURvbWFpbi5maWxlRW5kcG9pbnQ7XG4gICAgICAgICAgICAgICAgZWRpdEZpbGVDb21tYW5kLnVwbG9hZEZpbGVBcGkgPSB0aGlzLl9maWxlVmVyc2lvblNlcnZpY2UuZ2V0VXBsb2FkRmlsZVZlcnNpb25BcGlVcmwoKTtcbiAgICAgICAgICAgICAgICBlZGl0RmlsZUNvbW1hbmQucmVtb3ZlRmlsZUFwaSA9IHRoaXMuX2ZpbGVWZXJzaW9uU2VydmljZS5nZXRSZW1vdmVGaWxlVmVyc2lvbkFwaVVybCgpO1xuICAgICAgICAgICAgICAgIGVkaXRGaWxlQ29tbWFuZC5maWxlVXJsID0gZmlsZVVybDtcbiAgICAgICAgICAgICAgICBlZGl0RmlsZUNvbW1hbmQuaXNEcmFmdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgZWRpdEZpbGVDb21tYW5kLmdyb3VwRmlsZU5hbWUgPSB0aGlzLmRhdGEubmFtZTtcbiAgICAgICAgICAgICAgICBlZGl0RmlsZUNvbW1hbmQuZmlsZU5hbWUgPSB0aGlzLmRhdGEubmFtZTtcbiAgICAgICAgICAgICAgICBlZGl0RmlsZUNvbW1hbmQudmVyc2lvbiA9IGZpbGVWZXJzaW9uLnZlcnNpb25OYW1lO1xuICAgICAgICAgICAgICAgIGVkaXRGaWxlQ29tbWFuZC5maWxlVmVyc2lvbklkID0gZmlsZVZlcnNpb24uaWQ7XG4gICAgICAgICAgICAgICAgZWRpdEZpbGVDb21tYW5kLmFjY2Vzc1Rva2VuID0gdGhpcy5fYXV0aGVuU2VydmljZS5nZXRBY2Nlc3NUb2tlbigpO1xuICAgICAgICAgICAgICAgIGNvbW1hbmQuZGF0YSA9IGVkaXRGaWxlQ29tbWFuZDtcblxuICAgICAgICAgICAgICAgIHRoaXMuX3RuQ2xpZW50U2VydmljZS5zZW5kQ29tbWFuZChjb21tYW5kKTtcbiAgICAgICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoQ29tbW9uRXJyb3JDb2RlLkVSUk9SX1NFUlZJQ0VfTk9UX1JVTiA9PT0gZXJyb3Iuc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93UmVzcG9uc2VFcnJvcigwLCBudWxsLCAnRmlsZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuYWRkKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldmVyaXR5OiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3VtbWFyeTogdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdGSUxFX0VYUExPUkVSLk1FU1NBR0VfRVJST1JfSEVBREVSJyksXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWw6IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnRklMRV9FWFBMT1JFUi5NRVNTQUdFX0VSUk9SX0RFVEFJTCcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGlmZTogNTAwMFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB0cnlDb25uZWN0VG9DbGllbnQoKSB7XG5cbiAgICB9XG5cbiAgICBpc0Rlc2t0b3AoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZXZpY2VEZXRlY3RvclNlcnZpY2UuaXNEZXNrdG9wKCk7XG4gICAgfVxuXG4gICAgaXNGaWxlVHlwZSh0eXBlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuZmlsZVR5cGUgPT0gdHlwZTtcbiAgICB9XG4gICAgZ2V0U3R5bGVDbGFzc0J5RG9jdW1lbnRUeXBlKGRvY1R5cGUpIHtcbiAgICAgICAgbGV0IHN0eWxlQ2xhc3MgPSB0aGlzLnN0eWxlQ2xhc3M7XG4gICAgICAgIGlmIChkb2NUeXBlID09PSBGSUxFX1RZUEVTLlBERikge1xuICAgICAgICAgICAgcmV0dXJuIHN0eWxlQ2xhc3MgKyAnICcgKyAncGRmLWNvbnRhaW5lcic7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0eWxlQ2xhc3M7XG4gICAgfVxufVxuIl19
|
|
526
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS12aWV3ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliL2NvbXBvbmVudHMvZmlsZS1leHBsb3Jlci9maWxlLXZpZXdlci9maWxlLXZpZXdlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDNUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVwRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUN6RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDckUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRXZFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5Q0FB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LEtBQUs7eUJBQ0wsS0FBSzt3QkFDTCxLQUFLO3lCQUNMLEtBQUs7c0JBQ0wsTUFBTTt1QkFDTixNQUFNO3VCQUNOLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5qZWN0b3IsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBEZXZpY2VEZXRlY3RvclNlcnZpY2UgfSBmcm9tICduZ3gtZGV2aWNlLWRldGVjdG9yJztcbmltcG9ydCB7IENvbmZpcm1hdGlvblNlcnZpY2UsIE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvYXBpJztcbmltcG9ydCB7IFNpZGViYXIgfSBmcm9tICd0bi1jdXN0b20tcHJpbWVuZy9zaWRlYmFyJztcblxuaW1wb3J0IHsgQ29tcG9uZW50Q29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9hcHAtY29udGV4dC9jb21wb25lbnQtY29udGV4dC5zZXJ2aWNlJztcbmltcG9ydCB7IENvbXBvbmVudEJhc2UgfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL2Jhc2UvY29tcG9uZW50LWJhc2UnO1xuaW1wb3J0IHsgQ29tbW9uRXJyb3JDb2RlIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9jb21tb24tZXJyb3ItY29kZSc7XG5pbXBvcnQgeyBGSUxFX1RZUEVTIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9jb25zdGFudHMnO1xuaW1wb3J0IHsgQ3J1ZEZvcm1EYXRhLCBQb3B1cFNpemUgfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL2Zvcm0tc2NoZW1hJztcbmltcG9ydCB7IE1vZHVsZUNvbmZpZyB9IGZyb20gJy4uLy4uLy4uL2NvbmZpZ3MvbW9kdWxlLWNvbmZpZyc7XG5pbXBvcnQgeyBFZGl0RmlsZUNvbW1hbmQgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZWRpdC1maWxlLWNvbW1hbmQnO1xuaW1wb3J0IHsgQ29tbWFuZFR5cGUsIFRuQ2xpZW50Q29tbWFuZCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy90bi1jbGllbnQtY29tbWFuZCc7XG5pbXBvcnQgeyBBdXRoZW5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXV0aGVuLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ3VzdG9tUm91dGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2N1c3RvbS1yb3V0ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBNb2R1bGVDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbW9kdWxlLWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IE5vdGlmaWVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL25vdGlmaWVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgVG5DbGllbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdG4tY2xpZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgRmlsZVZlcnNpb25EVE8gfSBmcm9tICcuLi9tb2RlbHMvZmlsZS12ZXJzaW9uLWR0byc7XG5pbXBvcnQgeyBHZW5lcmF0ZUxpbmtEb3dubG9hZERUTyB9IGZyb20gJy4uL21vZGVscy9nZW5lcmF0ZS1saW5rLWRvd25sb2FkLWR0byc7XG5pbXBvcnQgeyBEb3dubG9hZExpbmtTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZG93bmxvYWQtbGluay5zZXJ2aWNlJztcbmltcG9ydCB7IEZpbGVFeHBsb3JlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9maWxlLWV4cGxvcmVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmlsZU9iamVjdFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9maWxlLW9iamVjdC5zZXJ2aWNlJztcbmltcG9ydCB7IEZpbGVWZXJzaW9uU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2ZpbGUtdmVyc2lvbi5zZXJ2aWNlJztcbmltcG9ydCB7IEZvbGRlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9mb2xkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBDb21DdHhDb25zdGFudHMgfSBmcm9tICcuLy4uLy4uLy4uL2NvbmZpZ3MvY29tcG9uZW50LWNvbnRleHQuY29uc3RhbnQnO1xuXG5kZWNsYXJlIGxldCBEb2NzQVBJOiBhbnk7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmlsZS12aWV3ZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnZmlsZS12aWV3ZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWydmaWxlLXZpZXdlci5jb21wb25lbnQuc2NzcyddLFxuICAgIHByb3ZpZGVyczogW0NvbXBvbmVudENvbnRleHRTZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBGaWxlVmlld2VyQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50QmFzZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgQFZpZXdDaGlsZCgnc2lkZWJhcicpIHNpZGViYXI6IFNpZGViYXI7XG4gICAgQElucHV0KCkgbW9kZWw6IGFueSA9IHtcbiAgICAgICAgZGF0YToge31cbiAgICB9O1xuICAgIEBJbnB1dCgpIHJlYWRvbmx5ID0gZmFsc2U7XG4gICAgQElucHV0KCkgc2hvd1ByaW50ID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBzaG93RG93bmxvYWQgPSB0cnVlO1xuICAgIEBJbnB1dCgpIHNob3dEZWxldGUgPSB0cnVlO1xuICAgIEBJbnB1dCgpIGZ1bGxTY3JlZW4gPSB0cnVlO1xuICAgIEBJbnB1dCgpIHNob3dNb2RhbCA9IHRydWU7XG4gICAgQElucHV0KCkgc3R5bGVDbGFzcyA9IFwiXCI7XG4gICAgQE91dHB1dCgpIG9uQ2xvc2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uUmVuYW1lOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvbkRlbGV0ZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIHByaXZhdGUgX21vZHVsZUNvbmZpZzogTW9kdWxlQ29uZmlnO1xuICAgIGRhdGE6IGFueSA9IHt9O1xuICAgIHNob3cgPSBmYWxzZTtcbiAgICBpc1JlYWRvbmx5ID0gZmFsc2U7XG4gICAgZmlsZVR5cGVzID0gRklMRV9UWVBFUztcbiAgICByZW5hbWVGaWxlRm9ybTogYW55O1xuICAgIHByaXZhdGUgX3RyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2U7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX21vZHVsZUNvbmZpZ1NlcnZpY2U6IE1vZHVsZUNvbmZpZ1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgX2F1dGhlblNlcnZpY2U6IEF1dGhlblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2ZpbGVFeHBsb3JlclNlcnZpY2U6IEZpbGVFeHBsb3JlclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX21lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfbm90aWZpZXJTZXJ2aWNlOiBOb3RpZmllclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2NvbmZpcm1TZXJ2aWNlOiBDb25maXJtYXRpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF90bkNsaWVudFNlcnZpY2U6IFRuQ2xpZW50U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfZmlsZVZlcnNpb25TZXJ2aWNlOiBGaWxlVmVyc2lvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2N1c3RvbVJvdXRlclNlcnZpY2U6IEN1c3RvbVJvdXRlclNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyBfZGV2aWNlRGV0ZWN0b3JTZXJ2aWNlOiBEZXZpY2VEZXRlY3RvclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2ZpbGVPYmplY3RTZXJ2aWNlOiBGaWxlT2JqZWN0U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfZG93bmxvYWRMaW5rU2VydmljZTogRG93bmxvYWRMaW5rU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfZm9sZGVyU2VydmljZTogRm9sZGVyU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIF9pbmplY3RvcjogSW5qZWN0b3JcbiAgICApIHtcbiAgICAgICAgc3VwZXIoX2luamVjdG9yKTtcbiAgICAgICAgdGhpcy5fbW9kdWxlQ29uZmlnID0gdGhpcy5fbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKTtcbiAgICAgICAgdGhpcy5fdHJhbnNsYXRlU2VydmljZSA9IF9pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuaW5pdCgpO1xuICAgIH1cblxuICAgIGFzeW5jIGluaXQoKSB7XG4gICAgICAgIHRoaXMuaW5pdEZvcm0oKTtcbiAgICAgICAgYXdhaXQgdGhpcy5nZXREZXRhaWwoKTtcbiAgICAgICAgdGhpcy5zaG93RmlsZSgpO1xuICAgIH1cblxuICAgIGFzeW5jIGdldERldGFpbCgpIHtcbiAgICAgICAgdGhpcy5kYXRhID0gdGhpcy5tb2RlbC5kYXRhO1xuICAgICAgICBpZiAoIXRoaXMuZGF0YS5maWxlSWQgJiYgIXRoaXMuZGF0YS5maWxlVmVyc2lvbklkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhLmZpbGVVcmwgIT0gbnVsbCAmJiB0aGlzLmRhdGEuZmlsZVVybCAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEuZXh0ZW5zaW9uID0gdGhpcy5fZmlsZU9iamVjdFNlcnZpY2UuZ2V0RmlsZUV4dGVuc2lvbih0aGlzLmRhdGEubmFtZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhLmZpbGVUeXBlID0gdGhpcy5fZmlsZU9iamVjdFNlcnZpY2UuZ2V0RmlsZVR5cGUodGhpcy5kYXRhLmV4dGVuc2lvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZGF0YTogYW55ID0gbnVsbDtcbiAgICAgICAgaWYgKHRoaXMuZGF0YS5maWxlVmVyc2lvbklkKSB7XG4gICAgICAgICAgICBjb25zdCBmaWxlVmVyc2lvbiA9IChhd2FpdCB0aGlzLl9maWxlVmVyc2lvblNlcnZpY2UuZ2V0RGV0YWlsKHRoaXMuZGF0YS5maWxlVmVyc2lvbklkKSkuZGF0YSB8fCB7fTtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVPYmplY3QgPSAoYXdhaXQgdGhpcy5fZmlsZU9iamVjdFNlcnZpY2UuZ2V0RGV0YWlsKGZpbGVWZXJzaW9uLmZpbGVJZCkpLmRhdGEgfHwge307XG4gICAgICAgICAgICBkYXRhID0gZmlsZU9iamVjdDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGRhdGEgPSAoYXdhaXQgdGhpcy5fZmlsZU9iamVjdFNlcnZpY2UuZ2V0RGV0YWlsKHRoaXMuZGF0YS5maWxlSWQpKS5kYXRhIHx8IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgZGF0YS5leHRlbnNpb24gPSB0aGlzLl9maWxlT2JqZWN0U2VydmljZS5nZXRGaWxlRXh0ZW5zaW9uKGRhdGEubmFtZSk7XG4gICAgICAgIGRhdGEuZmlsZVR5cGUgPSB0aGlzLl9maWxlT2JqZWN0U2VydmljZS5nZXRGaWxlVHlwZShkYXRhLmV4dGVuc2lvbik7XG4gICAgICAgIGRhdGEuZmlsZUlkID0gdGhpcy5kYXRhLmZpbGVJZDtcbiAgICAgICAgZGF0YS5maWxlVmVyc2lvbklkID0gdGhpcy5kYXRhLmZpbGVWZXJzaW9uSWQ7XG5cbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICB9XG5cbiAgICBzaG93RmlsZSgpIHtcbiAgICAgICAgdGhpcy5tb2RlbC5pbWFnZXMgPSBbXTtcbiAgICAgICAgdGhpcy5tb2RlbC5pc0ltYWdlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zaG93ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jb250ZXh0LnJvb3Quc3Vic2NyaWJlKENvbUN0eENvbnN0YW50cy5ST09ULktFWV9ET1dOX0VTQywgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jbG9zZVNpZGViYXIobnVsbCk7XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgZm9yY2VVc2luZ0ludGVybmFsID0gZmFsc2U7XG4gICAgICAgIGxldCBwcm9jZXNzRnVuYzogKHVybDogc3RyaW5nKSA9PiB2b2lkO1xuICAgICAgICBzd2l0Y2ggKHRoaXMuZGF0YS5maWxlVHlwZSkge1xuICAgICAgICAgICAgY2FzZSBGSUxFX1RZUEVTLklNQUdFOlxuICAgICAgICAgICAgICAgIHByb2Nlc3NGdW5jID0gdGhpcy5wcm9jZXNzU2hvd0ltYWdlLmJpbmQodGhpcyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEZJTEVfVFlQRVMuVklERU86XG4gICAgICAgICAgICBjYXNlIEZJTEVfVFlQRVMuQVVESU86XG4gICAgICAgICAgICAgICAgcHJvY2Vzc0Z1bmMgPSB0aGlzLnByb2Nlc3NWaWRlb09yQXVkaW8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRklMRV9UWVBFUy5QREY6XG4gICAgICAgICAgICAgICAgcHJvY2Vzc0Z1bmMgPSB0aGlzLnByb2Nlc3NGaWxlUGRmLmJpbmQodGhpcyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuaXNJbWFnZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGZvcmNlVXNpbmdJbnRlcm5hbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgcHJvY2Vzc0Z1bmMgPSB0aGlzLnByb2Nlc3NPdGhlckZpbGVFeHRlbnNpb24uYmluZCh0aGlzKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5kYXRhLmZpbGVVcmwgfHwgdGhpcy5kYXRhLmZpbGVVcmwgPT09ICcnKSB7XG4gICAgICAgICAgICBjb25zdCBtb2RlbCA9IHRoaXMuZ2V0R2VuZXJhdGVEb3dubG9hZExpbmtNb2RlbCgpO1xuICAgICAgICAgICAgdGhpcy5fZG93bmxvYWRMaW5rU2VydmljZVxuICAgICAgICAgICAgICAgIC5nZW5lcmF0ZURvd25sb2FkTGluayhtb2RlbClcbiAgICAgICAgICAgICAgICAudGhlbihycyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVybCA9IHRoaXMuX2Rvd25sb2FkTGlua1NlcnZpY2UuZ2V0QW5vbnltb3VzRG93bmxvYWRVcmxGb3JWaWV3ZXIocnMuZGF0YSwgZm9yY2VVc2luZ0ludGVybmFsKTtcbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0Z1bmModXJsKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHByb2Nlc3NGdW5jKHRoaXMuZGF0YS5maWxlVXJsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldEdlbmVyYXRlRG93bmxvYWRMaW5rTW9kZWwoKSB7XG4gICAgICAgIHJldHVybiA8R2VuZXJhdGVMaW5rRG93bmxvYWREVE8+e1xuICAgICAgICAgICAgZmlsZUlkOiB0aGlzLmRhdGEuZmlsZUlkLFxuICAgICAgICAgICAgZmlsZVZlcnNpb25JZDogdGhpcy5kYXRhLmZpbGVWZXJzaW9uSWRcbiAgICAgICAgfTtcbiAgICB9XG5cblxuICAgIHNob3dJbWFnZVdoZW5Mb2FkZWQoKSB7XG4gICAgICAgIGxldCBkb25lID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbWFnZS12aWV3LWxpc3QnKTtcbiAgICAgICAgaWYgKGNvbnRhaW5lcikge1xuICAgICAgICAgICAgY29uc3QgbG9hZGluZzogYW55ID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJy5pdi1sb2FkZXInKTtcbiAgICAgICAgICAgIGlmIChsb2FkaW5nICYmIGxvYWRpbmcuc3R5bGUuZGlzcGxheSA9PSAnbm9uZScpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbWcgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcignaW1nLml2LWltYWdlLml2LWxhcmdlLWltYWdlJyk7XG4gICAgICAgICAgICAgICAgaWYgKGltZykge1xuICAgICAgICAgICAgICAgICAgICBpbWcuY2xhc3NMaXN0LmFkZCgnc2hvdycpO1xuICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWRvbmUpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zaG93SW1hZ2VXaGVuTG9hZGVkKCksIDUwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb2Nlc3NTaG93SW1hZ2UodXJsOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5tb2RlbC5pbWFnZXMgPSBbdXJsXTtcbiAgICB9XG5cbiAgICBwcm9jZXNzVmlkZW9PckF1ZGlvKHVybDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMubW9kZWwuZmlsZVVybCA9IHVybDtcbiAgICB9XG5cbiAgICBwcm9jZXNzRmlsZVBkZih1cmw6IHN0cmluZykge1xuICAgICAgICB0aGlzLm1vZGVsLmZpbGVVcmwgPSB1cmw7XG4gICAgfVxuXG4gICAgcHJvY2Vzc090aGVyRmlsZUV4dGVuc2lvbih1cmw6IHN0cmluZykge1xuICAgICAgICB0aGlzLmluaXREb2N1bWVudFZpZXdlcih0aGlzLmRhdGEuZXh0ZW5zaW9uLCB0aGlzLmRhdGEuZmlsZVR5cGUsIHVybCk7XG4gICAgfVxuXG4gICAgaW5pdERvY3VtZW50Vmlld2VyKGZpbGVFeHRlbnNpb24sIGZpbGVUeXBlLCBmaWxlVXJsKSB7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHtcbiAgICAgICAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgIHR5cGU6IHRoaXMuX2RldmljZURldGVjdG9yU2VydmljZS5pc0Rlc2t0b3AoKSA/ICdkZXNrdG9wJyA6ICdtb2JpbGUnLFxuICAgICAgICAgICAgZG9jdW1lbnRUeXBlOiBgJHtmaWxlVHlwZX1gLFxuICAgICAgICAgICAgZWRpdG9yQ29uZmlnOiB7XG4gICAgICAgICAgICAgICAgbW9kZTogJ3ZpZXcnLFxuICAgICAgICAgICAgICAgIGN1c3RvbWl6YXRpb246IHtcbiAgICAgICAgICAgICAgICAgICAgY2hhdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGFib3V0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgY29tbWVudHM6IHRydWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZG9jdW1lbnQ6IHtcbiAgICAgICAgICAgICAgICBwZXJtaXNzaW9uczoge1xuICAgICAgICAgICAgICAgICAgICBjb21tZW50OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgZG93bmxvYWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGVkaXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBwcmludDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgcmV2aWV3OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgZmlsbEZvcm1zOiBmYWxzZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZmlsZVR5cGU6IGAke2ZpbGVFeHRlbnNpb259YCxcbiAgICAgICAgICAgICAgICB0aXRsZTogYCR7dGhpcy5tb2RlbC5kYXRhLm5hbWV9YCxcbiAgICAgICAgICAgICAgICB1cmw6IGAke2ZpbGVVcmx9YFxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLm1vZGVsLmRvY0VkaXRvciA9IG5ldyBEb2NzQVBJLkRvY0VkaXRvcignZmlsZS12aWV3ZXInLCBjb25maWcpO1xuICAgIH1cblxuICAgIGluaXRGb3JtKCkge1xuICAgICAgICB0aGlzLnJlbmFtZUZpbGVGb3JtID0ge1xuICAgICAgICAgICAgaGVhZGVyOiAnxJDhu5VpIHTDqm4gdOG7h3AnLFxuICAgICAgICAgICAgc2hvdzogZmFsc2UsXG4gICAgICAgICAgICBmb3JtRGF0YTogbmV3IENydWRGb3JtRGF0YSgpLFxuICAgICAgICAgICAgcG9wdXBTaXplOiBuZXcgUG9wdXBTaXplKHtcbiAgICAgICAgICAgICAgICB3aWR0aDogNDAwLFxuICAgICAgICAgICAgICAgIGhlaWdodDogMjAwXG4gICAgICAgICAgICB9KVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGFzeW5jIGdldE9yaWVudGF0aW9uKGltYWdlVXJsLCBjYWxsYmFjaykge1xuICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChpbWFnZVVybCk7XG4gICAgICAgIGNvbnN0IGJsb2IgPSBhd2FpdCByZXMuYmxvYigpO1xuXG4gICAgICAgIHJlYWRlci5vbmxvYWQgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmlldyA9IG5ldyBEYXRhVmlldyhldmVudC50YXJnZXQucmVzdWx0KTtcblxuICAgICAgICAgICAgaWYgKHZpZXcuZ2V0VWludDE2KDAsIGZhbHNlKSAhPSAweEZGRDgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soYmxvYiwgLTIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBsZW5ndGggPSB2aWV3LmJ5dGVMZW5ndGg7XG4gICAgICAgICAgICBsZXQgb2Zmc2V0ID0gMjtcblxuICAgICAgICAgICAgd2hpbGUgKG9mZnNldCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hcmtlciA9IHZpZXcuZ2V0VWludDE2KG9mZnNldCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIG9mZnNldCArPSAyO1xuXG4gICAgICAgICAgICAgICAgaWYgKG1hcmtlciA9PSAweEZGRTEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZpZXcuZ2V0VWludDMyKG9mZnNldCArPSAyLCBmYWxzZSkgIT0gMHg0NTc4Njk2Nikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGJsb2IsIC0xKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBsaXR0bGUgPSB2aWV3LmdldFVpbnQxNihvZmZzZXQgKz0gNiwgZmFsc2UpID09IDB4NDk0OTtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IHZpZXcuZ2V0VWludDMyKG9mZnNldCArIDQsIGxpdHRsZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhZ3MgPSB2aWV3LmdldFVpbnQxNihvZmZzZXQsIGxpdHRsZSk7XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSAyO1xuXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGFnczsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmlldy5nZXRVaW50MTYob2Zmc2V0ICsgKGkgKiAxMiksIGxpdHRsZSkgPT0gMHgwMTEyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGJsb2IsIHZpZXcuZ2V0VWludDE2KG9mZnNldCArIChpICogMTIpICsgOCwgbGl0dGxlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoKG1hcmtlciAmIDB4RkYwMCkgIT0gMHhGRjAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IHZpZXcuZ2V0VWludDE2KG9mZnNldCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhibG9iLCAtMSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGJsb2IpO1xuICAgIH1cblxuICAgIGFzeW5jIGdldEJhc2U2NChibG9iLCBvcmllbnRhdGlvbikge1xuICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuXG4gICAgICAgIC8vIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKGltYWdlVXJsKTtcbiAgICAgICAgLy8gY29uc3QgYmxvYiA9IGF3YWl0IHJlcy5ibG9iKCk7XG5cbiAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoYmxvYik7XG4gICAgICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBiYXNlNjQgPSByZWFkZXIucmVzdWx0O1xuICAgICAgICAgICAgdGhpcy5yZXNldE9yaWVudGF0aW9uKGJhc2U2NCwgb3JpZW50YXRpb24sIChyZXNldEJhc2U2NEltYWdlKSA9PiB7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnNob3cgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGltYWdlV2l0aG91dEJhc2U2NFByZWZpeCA9IHJlc2V0QmFzZTY0SW1hZ2Uuc3BsaXQoJ2Jhc2U2NCwnKVsxXTtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmltYWdlcyA9IFtpbWFnZVdpdGhvdXRCYXNlNjRQcmVmaXhdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIHJlYWRlci5vbmVycm9yID0gKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnRXJyb3I6ICcsIGVycm9yKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICByZXNldE9yaWVudGF0aW9uKHNyY0Jhc2U2NCwgc3JjT3JpZW50YXRpb24sIGNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IGltZyA9IG5ldyBJbWFnZSgpO1xuXG4gICAgICAgIGltZy5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB3aWR0aCA9IGltZy53aWR0aCxcbiAgICAgICAgICAgICAgICBoZWlnaHQgPSBpbWcuaGVpZ2h0LFxuICAgICAgICAgICAgICAgIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpLFxuICAgICAgICAgICAgICAgIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG4gICAgICAgICAgICAvLyBzZXQgcHJvcGVyIGNhbnZhcyBkaW1lbnNpb25zIGJlZm9yZSB0cmFuc2Zvcm0gJiBleHBvcnRcbiAgICAgICAgICAgIGlmICg0IDwgc3JjT3JpZW50YXRpb24gJiYgc3JjT3JpZW50YXRpb24gPCA5KSB7XG4gICAgICAgICAgICAgICAgY2FudmFzLndpZHRoID0gaGVpZ2h0O1xuICAgICAgICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSB3aWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHRyYW5zZm9ybSBjb250ZXh0IGJlZm9yZSBkcmF3aW5nIGltYWdlXG4gICAgICAgICAgICBzd2l0Y2ggKHNyY09yaWVudGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAyOiBjdHgudHJhbnNmb3JtKC0xLCAwLCAwLCAxLCB3aWR0aCwgMCk7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgMzogY3R4LnRyYW5zZm9ybSgtMSwgMCwgMCwgLTEsIHdpZHRoLCBoZWlnaHQpOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IGN0eC50cmFuc2Zvcm0oMSwgMCwgMCwgLTEsIDAsIGhlaWdodCk7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNTogY3R4LnRyYW5zZm9ybSgwLCAxLCAxLCAwLCAwLCAwKTsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA2OiBjdHgudHJhbnNmb3JtKDAsIDEsIC0xLCAwLCBoZWlnaHQsIDApOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDc6IGN0eC50cmFuc2Zvcm0oMCwgLTEsIC0xLCAwLCBoZWlnaHQsIHdpZHRoKTsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA4OiBjdHgudHJhbnNmb3JtKDAsIC0xLCAxLCAwLCAwLCB3aWR0aCk7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBkcmF3IGltYWdlXG4gICAgICAgICAgICBjdHguZHJhd0ltYWdlKGltZywgMCwgMCk7XG5cbiAgICAgICAgICAgIC8vIGV4cG9ydCBiYXNlNjRcbiAgICAgICAgICAgIGNhbGxiYWNrKGNhbnZhcy50b0RhdGFVUkwoKSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgaW1nLnNyYyA9IHNyY0Jhc2U2NDtcbiAgICB9XG5cbiAgICBvblRvcGJhckl0ZW1DbGljayhldmVudCkge1xuICAgICAgICB0aGlzLm1vZGVsLmFjdGl2ZVRvcGJhckl0ZW0gPSAhdGhpcy5tb2RlbC5hY3RpdmVUb3BiYXJJdGVtO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIGNsb3NlU2lkZWJhcihldmVudCA9IG51bGwpIHtcbiAgICAgICAgaWYgKCFldmVudCB8fCBldmVudC50YXJnZXQuaWQgPT0gJ2ZpbGVWaWV3ZXJIb2xkZXInIHx8IGV2ZW50LnRhcmdldC5pZCA9PSAnaW1hZ2Utdmlldy1saXN0JyB8fCBldmVudC50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdpbWFnZS1jb250YWluZXInKVxuICAgICAgICAgICAgfHwgZXZlbnQudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnaXYtaW1hZ2UtdmlldycpKSB7XG4gICAgICAgICAgICB0aGlzLm1vZGVsLmFjdGl2ZVRvcGJhckl0ZW0gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc2hvdyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5vbkNsb3NlLm5leHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaW50KCkge1xuICAgICAgICB0aGlzLl9kb3dubG9hZExpbmtTZXJ2aWNlLmNvbnZlcnRUb1BkZkJhc2U2NCh0aGlzLmRhdGEubmFtZSwgdGhpcy5kYXRhLmZpbGVJZCwgdGhpcy5kYXRhLmZpbGVWZXJzaW9uSWQpXG4gICAgICAgICAgICAudGhlbihycyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFycy5zdWNjZXNzIHx8ICFycy5kYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9maWxlRXhwbG9yZXJTZXJ2aWNlLnByaW50KHJzLmRhdGEpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZG93bmxvYWQoKSB7XG4gICAgICAgIGNvbnN0IG1vZGVsID0gdGhpcy5nZXRHZW5lcmF0ZURvd25sb2FkTGlua01vZGVsKCk7XG4gICAgICAgIHRoaXMuX2Rvd25sb2FkTGlua1NlcnZpY2UuZG93bmxvYWRMaW5rKG1vZGVsKTtcbiAgICB9XG5cbiAgICBkZWxldGVGaWxlKCkge1xuICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd0RlbGV0ZUNvbmZpcm0oKVxuICAgICAgICAgICAgLnRoZW4ocnMgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl9mb2xkZXJTZXJ2aWNlLmRlbGV0ZU11bHRpcGxlKFt0aGlzLmRhdGFdKVxuICAgICAgICAgICAgICAgICAgICAudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93RGVsZXRlRGF0YVN1Y2Nlc3MoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlU2lkZWJhcihudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uQ2xvc2UubmV4dCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZ0J5UmVzcG9uc2UocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlbmFtZUZpbGUoKSB7XG4gICAgICAgIHRoaXMucmVuYW1lRmlsZUZvcm0uaGVhZGVyID0gJ8SQ4buVaSB0w6puIHRoxrAgbeG7pWMnO1xuICAgICAgICB0aGlzLnJlbmFtZUZpbGVGb3JtLmZvcm1EYXRhLmRhdGEgPSB7XG4gICAgICAgICAgICBpZDogdGhpcy5kYXRhLmlkXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5yZW5hbWVGaWxlRm9ybS5zaG93ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBhc3luYyBvblNhdmVkUmVuYW1lRmlsZSgpIHtcbiAgICAgICAgdGhpcy5yZW5hbWVGaWxlRm9ybS5zaG93ID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGZpbGUgPSAoYXdhaXQgdGhpcy5fZmlsZU9iamVjdFNlcnZpY2UuZ2V0RGV0YWlsKHRoaXMuZGF0YS5pZCkpLmRhdGE7XG4gICAgICAgIGlmIChmaWxlKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEubmFtZSA9IGZpbGUubmFtZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQ2FuY2VsUmVuYW1lRmlsZSgpIHtcbiAgICAgICAgdGhpcy5yZW5hbWVGaWxlRm9ybS5zaG93ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgZWRpdEZpbGUoKSB7XG4gICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93U3VjY2VzcygnxJBhbmcga+G6v3QgbuG7kWkgbeG7nyDhu6luZyBk4bulbmcnKTtcblxuICAgICAgICB0aGlzLl9maWxlVmVyc2lvblNlcnZpY2UuY3JlYXRlTmV3TWlub3JWZXJzaW9uKHRoaXMuZGF0YS5maWxlSWQsICcnLCBmYWxzZSlcbiAgICAgICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlVmVyc2lvbiA9IDxGaWxlVmVyc2lvbkRUTz5yZXNwb25zZS5kYXRhO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZVVybCA9IHRoaXMuX2ZpbGVWZXJzaW9uU2VydmljZS5nZXRGaWxlVmVyc2lvbkRvd25sb2FkVXJsKGZpbGVWZXJzaW9uLmlkKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1hbmQgPSBuZXcgVG5DbGllbnRDb21tYW5kKCk7XG4gICAgICAgICAgICAgICAgY29tbWFuZC5jb21tYW5kVHlwZSA9IENvbW1hbmRUeXBlLkVkaXRGaWxlO1xuICAgICAgICAgICAgICAgIGNvbW1hbmQua2V5ID0gdGhpcy5fbW9kdWxlQ29uZmlnLmVudmlyb25tZW50LnNpZ25hbHIuY2xpZW50S2V5O1xuXG4gICAgICAgICAgICAgICAgY29uc3QgZWRpdEZpbGVDb21tYW5kID0gbmV3IEVkaXRGaWxlQ29tbWFuZCgpO1xuICAgICAgICAgICAgICAgIGVkaXRGaWxlQ29tbWFuZC5maWxlU2VydmljZUVuZHBvaW50ID0gdGhpcy5fbW9kdWxlQ29uZmlnLmVudmlyb25tZW50LmFwaURvbWFpbi5maWxlRW5kcG9pbnQ7XG4gICAgICAgICAgICAgICAgZWRpdEZpbGVDb21tYW5kLnVwbG9hZEZpbGVBcGkgPSB0aGlzLl9maWxlVmVyc2lvblNlcnZpY2UuZ2V0VXBsb2FkRmlsZVZlcnNpb25BcGlVcmwoKTtcbiAgICAgICAgICAgICAgICBlZGl0RmlsZUNvbW1hbmQucmVtb3ZlRmlsZUFwaSA9IHRoaXMuX2ZpbGVWZXJzaW9uU2VydmljZS5nZXRSZW1vdmVGaWxlVmVyc2lvbkFwaVVybCgpO1xuICAgICAgICAgICAgICAgIGVkaXRGaWxlQ29tbWFuZC5maWxlVXJsID0gZmlsZVVybDtcbiAgICAgICAgICAgICAgICBlZGl0RmlsZUNvbW1hbmQuaXNEcmFmdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgZWRpdEZpbGVDb21tYW5kLmdyb3VwRmlsZU5hbWUgPSB0aGlzLmRhdGEubmFtZTtcbiAgICAgICAgICAgICAgICBlZGl0RmlsZUNvbW1hbmQuZmlsZU5hbWUgPSB0aGlzLmRhdGEubmFtZTtcbiAgICAgICAgICAgICAgICBlZGl0RmlsZUNvbW1hbmQudmVyc2lvbiA9IGZpbGVWZXJzaW9uLnZlcnNpb25OYW1lO1xuICAgICAgICAgICAgICAgIGVkaXRGaWxlQ29tbWFuZC5maWxlVmVyc2lvbklkID0gZmlsZVZlcnNpb24uaWQ7XG4gICAgICAgICAgICAgICAgZWRpdEZpbGVDb21tYW5kLmFjY2Vzc1Rva2VuID0gdGhpcy5fYXV0aGVuU2VydmljZS5nZXRBY2Nlc3NUb2tlbigpO1xuICAgICAgICAgICAgICAgIGNvbW1hbmQuZGF0YSA9IGVkaXRGaWxlQ29tbWFuZDtcblxuICAgICAgICAgICAgICAgIHRoaXMuX3RuQ2xpZW50U2VydmljZS5zZW5kQ29tbWFuZChjb21tYW5kKTtcbiAgICAgICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoQ29tbW9uRXJyb3JDb2RlLkVSUk9SX1NFUlZJQ0VfTk9UX1JVTiA9PT0gZXJyb3Iuc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93UmVzcG9uc2VFcnJvcigwLCBudWxsLCAnRmlsZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuYWRkKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldmVyaXR5OiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3VtbWFyeTogdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdGSUxFX0VYUExPUkVSLk1FU1NBR0VfRVJST1JfSEVBREVSJyksXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWw6IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnRklMRV9FWFBMT1JFUi5NRVNTQUdFX0VSUk9SX0RFVEFJTCcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGlmZTogNTAwMFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB0cnlDb25uZWN0VG9DbGllbnQoKSB7XG5cbiAgICB9XG5cbiAgICBpc0Rlc2t0b3AoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZXZpY2VEZXRlY3RvclNlcnZpY2UuaXNEZXNrdG9wKCk7XG4gICAgfVxuXG4gICAgaXNGaWxlVHlwZSh0eXBlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuZmlsZVR5cGUgPT0gdHlwZTtcbiAgICB9XG4gICAgZ2V0U3R5bGVDbGFzc0J5RG9jdW1lbnRUeXBlKGRvY1R5cGUpIHtcbiAgICAgICAgbGV0IHN0eWxlQ2xhc3MgPSB0aGlzLnN0eWxlQ2xhc3M7XG4gICAgICAgIGlmIChkb2NUeXBlID09PSBGSUxFX1RZUEVTLlBERikge1xuICAgICAgICAgICAgcmV0dXJuIHN0eWxlQ2xhc3MgKyAnICcgKyAncGRmLWNvbnRhaW5lcic7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0eWxlQ2xhc3M7XG4gICAgfVxuXG4gICAga3lTb0hhbmRsZSgpIHtcbiAgICB9XG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICAvLyBBY2Nlc3MgdGhlIFBERi5qcyB2aWV3ZXIgaW5zdGFuY2VcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwZGZWaWV3ZXIgPSAod2luZG93IGFzIGFueSkuUERGVmlld2VyQXBwbGljYXRpb24/LnBkZlZpZXdlcjtcblxuICAgICAgICAgICAgaWYgKHBkZlZpZXdlcikge1xuICAgICAgICAgICAgICAgIC8vIEFkZCBjbGljayBsaXN0ZW5lciB0byBlYWNoIHBhZ2UgY2FudmFzXG4gICAgICAgICAgICAgICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3ZpZXdlckNvbnRhaW5lcicpO1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lcj8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVBhZ2VDbGljayhlIGFzIE1vdXNlRXZlbnQsIHBkZlZpZXdlcik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIDEwMDApO1xuICAgIH1cblxuICAgIGhhbmRsZVBhZ2VDbGljayhldmVudDogTW91c2VFdmVudCwgcGRmVmlld2VyOiBhbnkpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBjb25zdCBtYXJrZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgY3VzdG9tLW1hcmtlcmApO1xuICAgICAgICBpZiAobWFya2VyKSB7XG4gICAgICAgICAgICBtYXJrZXIucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ2NhbnZhc1dyYXBwZXInKSB8fFxuICAgICAgICAgICAgdGFyZ2V0LnRhZ05hbWUgPT09ICdDQU5WQVMnKSB7XG5cbiAgICAgICAgICAgIC8vIEdldCBwYWdlIG51bWJlciBhbmQgY29vcmRpbmF0ZXNcbiAgICAgICAgICAgIGNvbnN0IHBhZ2VEaXYgPSB0YXJnZXQuY2xvc2VzdCgnLnBhZ2UnKTtcbiAgICAgICAgICAgIGNvbnN0IHBhZ2VOdW1iZXIgPSBwYXJzZUludChwYWdlRGl2Py5nZXRBdHRyaWJ1dGUoJ2RhdGEtcGFnZS1udW1iZXInKSB8fCAnMScpO1xuXG4gICAgICAgICAgICBjb25zdCByZWN0ID0gdGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgY29uc3QgeCA9IGV2ZW50LmNsaWVudFggLSByZWN0LmxlZnQ7XG4gICAgICAgICAgICBjb25zdCB5ID0gZXZlbnQuY2xpZW50WSAtIHJlY3QudG9wO1xuXG5cbiAgICAgICAgICAgIC8vIENyZWF0ZSBtYXJrZXIgYXQgdGhpcyBwb3NpdGlvblxuICAgICAgICAgICAgdGhpcy5jcmVhdGVNYXJrZXIodGFyZ2V0LCB4LCB5LCBwYWdlTnVtYmVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNyZWF0ZU1hcmtlcihwYXJlbnQ6IEhUTUxFbGVtZW50LCB4OiBudW1iZXIsIHk6IG51bWJlciwgcGFnZTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IG1hcmtlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBtYXJrZXIuaWQgPSAnY3VzdG9tLW1hcmtlcic7XG4gICAgICAgIG1hcmtlci5zdHlsZS5jc3NUZXh0ID0gYFxuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgbGVmdDogJHt4fXB4O1xuICAgICAgICAgICAgdG9wOiAke3l9cHg7XG4gICAgICAgICAgICB3aWR0aDogMTAwcHg7XG4gICAgICAgICAgICBoZWlnaHQ6IDEwMHB4O1xuICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCR7dGhpcy5tb2RlbC5kYXRhLmZpbGVCYXNlNjRDb250ZW50fSk7XG4gICAgICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgICAgICAgIGJhY2tncm91bmQtc2l6ZTogY29udGFpbjsgICAgICAgIC8qIEZpdHMgdGhlIGltYWdlICovXG4gICAgICAgICAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OyAgICAvKiBObyB0aWxpbmcgKi9cbiAgICAgICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciB0b3A7IC8qIFBvc2l0aW9uaW5nICovXG4gICAgICAgICAgICB6LWluZGV4OiA5OTk7XG4gICAgICAgIGA7XG4gICAgICAgIGNvbnN0IHBhZ2VDb250YWluZXIgPSBwYXJlbnQuY2xvc2VzdCgnLnBhZ2UnKTtcbiAgICAgICAgcGFnZUNvbnRhaW5lcj8uYXBwZW5kQ2hpbGQobWFya2VyKTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { HttpClient } from '@angular/common/http';
|
|
2
|
+
import { Injectable, Injector } from '@angular/core';
|
|
3
|
+
import { BaseService } from './base.service';
|
|
4
|
+
import { ModuleConfigService } from './module-config.service';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@angular/common/http";
|
|
7
|
+
import * as i2 from "./module-config.service";
|
|
8
|
+
export class UserChuKySoService extends BaseService {
|
|
9
|
+
constructor(http, injector, _moduleConfigService) {
|
|
10
|
+
super(http, injector, `${_moduleConfigService.getConfig().environment.apiDomain.userOrgEndpoint}/${_moduleConfigService.getConfig().environment.apiVersion}/UserChuKySo`);
|
|
11
|
+
this._moduleConfigService = _moduleConfigService;
|
|
12
|
+
this.entityName = 'UserChuKySo';
|
|
13
|
+
this.serviceCode = 'userorg';
|
|
14
|
+
this.endPoint = _moduleConfigService.getConfig().environment.apiDomain.userOrgEndpoint;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
UserChuKySoService.ɵprov = i0.ɵɵdefineInjectable({ factory: function UserChuKySoService_Factory() { return new UserChuKySoService(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(i0.INJECTOR), i0.ɵɵinject(i2.ModuleConfigService)); }, token: UserChuKySoService, providedIn: "root" });
|
|
18
|
+
UserChuKySoService.decorators = [
|
|
19
|
+
{ type: Injectable, args: [{
|
|
20
|
+
providedIn: 'root'
|
|
21
|
+
},] }
|
|
22
|
+
];
|
|
23
|
+
UserChuKySoService.ctorParameters = () => [
|
|
24
|
+
{ type: HttpClient },
|
|
25
|
+
{ type: Injector },
|
|
26
|
+
{ type: ModuleConfigService }
|
|
27
|
+
];
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1jaHUta3ktc28uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi9zZXJ2aWNlcy91c2VyLWNodS1reS1zby5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7QUFJOUQsTUFBTSxPQUFPLGtCQUFtQixTQUFRLFdBQVc7SUFJL0MsWUFBWSxJQUFnQixFQUFFLFFBQWtCLEVBQ3BDLG9CQUF5QztRQUNqRCxLQUFLLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxHQUFHLG9CQUFvQixDQUFDLFNBQVMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsZUFBZSxJQUFJLG9CQUFvQixDQUFDLFNBQVMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxVQUFVLGNBQWMsQ0FBQyxDQUFDO1FBRGxLLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBcUI7UUFKckQsZUFBVSxHQUFHLGFBQWEsQ0FBQztRQUMzQixnQkFBVyxHQUFHLFNBQVMsQ0FBQztRQUtwQixJQUFJLENBQUMsUUFBUSxHQUFHLG9CQUFvQixDQUFDLFNBQVMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDO0lBQzNGLENBQUM7Ozs7WUFYSixVQUFVLFNBQUM7Z0JBQ1IsVUFBVSxFQUFFLE1BQU07YUFDckI7OztZQU5RLFVBQVU7WUFDRSxRQUFRO1lBRXBCLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmFzZVNlcnZpY2UgfSBmcm9tICcuL2Jhc2Uuc2VydmljZSc7XG5pbXBvcnQgeyBNb2R1bGVDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi9tb2R1bGUtY29uZmlnLnNlcnZpY2UnO1xuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBVc2VyQ2h1S3lTb1NlcnZpY2UgZXh0ZW5kcyBCYXNlU2VydmljZSB7XG4gICAgZW50aXR5TmFtZSA9ICdVc2VyQ2h1S3lTbyc7XG4gICAgc2VydmljZUNvZGUgPSAndXNlcm9yZyc7XG5cbiAgICBjb25zdHJ1Y3RvcihodHRwOiBIdHRwQ2xpZW50LCBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIHByaXZhdGUgX21vZHVsZUNvbmZpZ1NlcnZpY2U6IE1vZHVsZUNvbmZpZ1NlcnZpY2UpIHtcbiAgICAgICAgc3VwZXIoaHR0cCwgaW5qZWN0b3IsIGAke19tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50LmFwaURvbWFpbi51c2VyT3JnRW5kcG9pbnR9LyR7X21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQuYXBpVmVyc2lvbn0vVXNlckNodUt5U29gKTtcbiAgICAgICAgdGhpcy5lbmRQb2ludCA9IF9tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50LmFwaURvbWFpbi51c2VyT3JnRW5kcG9pbnQ7XG4gICAgfVxufVxuIl19
|