ngx-hana-nameserver-history-viewer 1.1.9-9.3.beta → 1.1.9-9.4.beta

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.
@@ -523,10 +523,10 @@ export class NameServerHistoryComponent {
523
523
  }
524
524
  }
525
525
  NameServerHistoryComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: NameServerHistoryComponent, deps: [{ token: i1.FileService }, { token: i1.ChartService }, { token: i1.UIService }], target: i0.ɵɵFactoryTarget.Component });
526
- NameServerHistoryComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: NameServerHistoryComponent, selector: "ngx-hana-nameserver-history-viewer", inputs: { defaultSelectedItems: "defaultSelectedItems", hideMeasureColumns: "hideMeasureColumns", maxRowsLimitation: "maxRowsLimitation", showInstruction: "showInstruction", timezone: "timezone", fileBuffer: "fileBuffer", streamModeFileName: "streamModeFileName", autoDisplay: "autoDisplay" }, providers: [FileService, ChartService, UIService], viewQueries: [{ propertyName: "nameserverHistoryAllRef", first: true, predicate: ["nameserverHistoryAll"], descendants: true, read: ElementRef }, { propertyName: "nameserverHistoryContentRef", first: true, predicate: ["nameserverHistoryContent"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: "<div #nameserverHistoryAll class=\"nameserver-history-all\" (window:resize)=\"onResize()\">\r\n <div class=\"toolbar-chart\">\r\n <div class=\"upload-box-content\">\r\n <div *ngIf=\"!showReadFileProgress\">\r\n <file-drop-input (fileDrop)=\"fileDropped($event)\" (fileInput)=\"fileSelected($event)\"\r\n [dropAreaText]= \"abbreviatedFileName\"\r\n [inputAreaText]=\"'Browse'\"\r\n [title]=\"file?.name? file.name:'Select a name server history file from your local disk.'\"\r\n *ngIf=\"!fileBuffer\">\r\n </file-drop-input>\r\n <p *ngIf=\"fileBuffer\">{{streamModeFileName || 'nameserver_history.trc (stream mode)'}}</p>\r\n </div>\r\n <div *ngIf=\"showReadFileProgress\">\r\n <progress-bar [progress]=\"readProgress\"></progress-bar>\r\n </div>\r\n </div>\r\n <div class=\"input-time\">\r\n <div class=\"input-time-range\">\r\n <time-range-selector [disabled]=\"showReadFileProgress\" [(dateTimeRange)]=\"dateTimeRange\"></time-range-selector>\r\n </div>\r\n <div class=\"timezone-selector\">\r\n <timezone-selector [(timezone)]=\"timezone\" [disabled]=\"showReadFileProgress\"></timezone-selector>\r\n </div>\r\n </div>\r\n\r\n <div class=\"port-selection\">\r\n <div class=\"port-selector\">\r\n <port-selector (portChange)=\"switchPortForChart($event)\" [(port)]=\"port\" [ports]=\"ports\" [disabled]=\"showReadFileProgress\"></port-selector>\r\n </div>\r\n <div class=\"port-load-button\">\r\n <button (click)=\"loadPorts()\" title=\"Load all ports from name server history trace file.\" [disabled]=\"!enableShowChartButton || port || !enableLoadPortsButton\">{{showReadFileProgress? \"Loading...\" : \"Load\"}}</button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"chart-operation\">\r\n <div class=\"left\">\r\n <button (click)=\"showChart()\" title=\"Load and display all data from name server history trace file.\" [disabled]=\"!enableShowChartButton\">{{showReadFileProgress? \"Loading...\" : \"Show\"}}</button>\r\n </div>\r\n <div class=\"right\">\r\n <button (click)=\"resetChart()\" title=\"Reset zoom of chart.\" [disabled]=\"showReadFileProgress || !enableResetChartButton\">Reset Chart</button>\r\n </div>\r\n </div>\r\n </div>\r\n <div #nameserverHistoryContent class=\"nameserver-history-content\">\r\n <div class=\"nameserver-history-content-chart\">\r\n <instruction [(show)]=\"showInstruction\" *ngIf=\"!showChartFlag && showInstruction\"\r\n [step1Finished]=\"!!file\"\r\n [step2Finished]=\"dateTimeRange && (!!dateTimeRange[0] || !!dateTimeRange[1]) || timezone != defaultTimezone\"\r\n [step3Finished]=\"!!port\"\r\n [step4Finished]=\"stepShowChart && !enableShowChartButton\"\r\n [step5Finished]=\"false\">\r\n </instruction>\r\n <canvas id=\"chartNameServerHistory\" ></canvas>\r\n </div>\r\n <div class=\"nameserver-history-content-controller\" >\r\n <ngx-selection-table (change)=\"selectItem($event)\" *ngIf=\"showChartFlag\"\r\n [filter]=\"true\"\r\n [checkbox]=\"true\"\r\n [tableSource]=\"tableSource\"\r\n [keyColumn]=\"kpiColumn\"\r\n [hiddenColumns]=\"hiddenColumns\"\r\n [tooltipColumn]=\"descColumn\"\r\n [searchStyle]=\"searchType\"\r\n [searchColumn]=\"kpiColumn\"\r\n [multiSelection]=\"true\">\r\n </ngx-selection-table>\r\n </div>\r\n </div>\r\n</div>\r\n<div class=\"message-container\" *ngIf=\"alertMessage\">\r\n <alert [(alertMessage)]=\"alertMessage\" [alertType]=\"alertType\" [alertTimeout]=\"30000\"></alert>\r\n</div>\r\n", styles: [":host *,:host *:before,:host *:after{box-sizing:inherit;display:inherit;font-size:inherit;font-weight:inherit;font-family:inherit}:host .hover-box,:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button:hover{outline:0;box-shadow:0 0 6px #23adff}:host .dashed-box,:host .nameserver-history-all .toolbar-chart .chart-operation button,:host .nameserver-history-all .toolbar-chart .port-selection,:host .nameserver-history-all .toolbar-chart .input-time,:host .nameserver-history-all .toolbar-chart .upload-box-content{background:#f8f8f8;box-shadow:inset 0 20px 20px -20px #0009;border:1px dashed #0782d0}:host .solid-box,:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button{background:#fff none;border:1px solid #ccc;border-radius:4px;line-height:1.42857143}:host .nameserver-history-all{width:98%;min-width:1314px;height:auto;border:1px none #0782d0;border-bottom-style:dashed;margin:3px 1%;box-sizing:border-box;display:inline-block;font-size:14px;font-weight:400;font-family:Helvetica,Arial,sans-serif}:host .nameserver-history-all .toolbar-chart{width:100%;height:48px}:host .nameserver-history-all .toolbar-chart button{text-align:center;white-space:nowrap;vertical-align:middle}:host .nameserver-history-all .toolbar-chart button:hover{text-shadow:1px 1px 3px royalblue;cursor:pointer;font-weight:600}:host .nameserver-history-all .toolbar-chart button:disabled{text-shadow:none;opacity:.65;cursor:default;color:#a9a9a9;font-weight:400}:host .nameserver-history-all .toolbar-chart .upload-box-content{width:20%;height:100%;float:left;text-align:center;color:#00008b}:host .nameserver-history-all .toolbar-chart .input-time{margin-left:1%;margin-right:1%;width:43%;height:100%}:host .nameserver-history-all .toolbar-chart .input-time .input-time-range{height:100%;width:57%;float:left}:host .nameserver-history-all .toolbar-chart .input-time .timezone-selector{margin-top:6px;height:100%;width:42.5%;margin-right:.5%;float:right}:host .nameserver-history-all .toolbar-chart .port-selection{width:14%;margin-right:1%;height:48px}:host .nameserver-history-all .toolbar-chart .port-selection .port-selector{margin-top:6px;margin-left:2%;margin-right:1%;width:47%;float:left}:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button{margin-top:6px;margin-left:1%;margin-right:2%;width:47%;float:right}:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button{color:#333;width:100%;padding:6px 12px;margin-bottom:0}:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button:hover{text-shadow:None;font-weight:400}:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button:disabled{box-shadow:none}:host .nameserver-history-all .toolbar-chart .chart-operation{width:20%;height:48px;float:right}:host .nameserver-history-all .toolbar-chart .chart-operation .left{margin-right:1%;width:49%;height:100%;float:left}:host .nameserver-history-all .toolbar-chart .chart-operation .right{width:50%;height:100%;float:right}:host .nameserver-history-all .toolbar-chart .chart-operation button{width:100%;height:100%;color:#00008b}:host .nameserver-history-all .nameserver-history-content{width:100%;height:730px;margin:5px 5px 5px 0}:host .nameserver-history-all .nameserver-history-content .nameserver-history-content-chart{width:75%;height:100%;position:relative;float:left}:host .nameserver-history-all .nameserver-history-content .nameserver-history-content-controller{width:25%;height:100%;float:right;overflow:auto}:host .message-container{width:98%;margin:0 1%;box-sizing:border-box;display:inline-block}\n"], components: [{ type: i2.FileDropInputComponent, selector: "file-drop-input", inputs: ["dropAreaText", "inputAreaText"], outputs: ["fileDrop", "fileInput"] }, { type: i3.ProgressBarComponent, selector: "progress-bar", inputs: ["progress"] }, { type: i4.TimeRangeSelectorComponent, selector: "time-range-selector", inputs: ["disabled", "dateTimeRange"], outputs: ["dateTimeRangeChange"] }, { type: i5.TimezoneSelectorComponent, selector: "timezone-selector", inputs: ["disabled", "timezone"], outputs: ["timezoneChange"] }, { type: i6.PortSelectorComponent, selector: "port-selector", inputs: ["disabled", "port", "ports"], outputs: ["portChange"] }, { type: i7.InstructionComponent, selector: "instruction", inputs: ["step1Finished", "step2Finished", "step3Finished", "step4Finished", "step5Finished", "show"], outputs: ["showChange"] }, { type: i8.SelectionTableComponent, selector: "ngx-selection-table", inputs: ["filter", "keyColumn", "tableSource", "checkbox", "multiSelection", "clickToSelect", "hiddenColumns", "tooltipColumn", "searchStyle", "searchColumn"], outputs: ["change"] }, { type: i9.AlertComponent, selector: "alert", inputs: ["alertMessage", "alertType", "alertTimeout"], outputs: ["alertMessageChange"] }], directives: [{ type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
526
+ NameServerHistoryComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: NameServerHistoryComponent, selector: "ngx-hana-nameserver-history-viewer", inputs: { defaultSelectedItems: "defaultSelectedItems", hideMeasureColumns: "hideMeasureColumns", maxRowsLimitation: "maxRowsLimitation", showInstruction: "showInstruction", timezone: "timezone", fileBuffer: "fileBuffer", streamModeFileName: "streamModeFileName", autoDisplay: "autoDisplay" }, providers: [FileService, ChartService, UIService], viewQueries: [{ propertyName: "nameserverHistoryAllRef", first: true, predicate: ["nameserverHistoryAll"], descendants: true, read: ElementRef }, { propertyName: "nameserverHistoryContentRef", first: true, predicate: ["nameserverHistoryContent"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: "<div #nameserverHistoryAll class=\"nameserver-history-all\" (window:resize)=\"onResize()\">\r\n <div class=\"toolbar-chart\">\r\n <div class=\"upload-box-content\">\r\n <div *ngIf=\"!showReadFileProgress\">\r\n <file-drop-input (fileDrop)=\"fileDropped($event)\" (fileInput)=\"fileSelected($event)\"\r\n [dropAreaText]= \"abbreviatedFileName\"\r\n [inputAreaText]=\"'Browse'\"\r\n [title]=\"file?.name? file.name:'Select a name server history file from your local disk.'\"\r\n *ngIf=\"!fileBuffer\">\r\n </file-drop-input>\r\n <p *ngIf=\"fileBuffer\" style=\"padding-top:13px\">{{streamModeFileName || 'nameserver_history.trc (stream mode)'}}</p>\r\n </div>\r\n <div *ngIf=\"showReadFileProgress\">\r\n <progress-bar [progress]=\"readProgress\"></progress-bar>\r\n </div>\r\n </div>\r\n <div class=\"input-time\">\r\n <div class=\"input-time-range\">\r\n <time-range-selector [disabled]=\"showReadFileProgress\" [(dateTimeRange)]=\"dateTimeRange\"></time-range-selector>\r\n </div>\r\n <div class=\"timezone-selector\">\r\n <timezone-selector [(timezone)]=\"timezone\" [disabled]=\"showReadFileProgress\"></timezone-selector>\r\n </div>\r\n </div>\r\n\r\n <div class=\"port-selection\">\r\n <div class=\"port-selector\">\r\n <port-selector (portChange)=\"switchPortForChart($event)\" [(port)]=\"port\" [ports]=\"ports\" [disabled]=\"showReadFileProgress\"></port-selector>\r\n </div>\r\n <div class=\"port-load-button\">\r\n <button (click)=\"loadPorts()\" title=\"Load all ports from name server history trace file.\" [disabled]=\"!enableShowChartButton || port || !enableLoadPortsButton\">{{showReadFileProgress? \"Loading...\" : \"Load\"}}</button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"chart-operation\">\r\n <div class=\"left\">\r\n <button (click)=\"showChart()\" title=\"Load and display all data from name server history trace file.\" [disabled]=\"!enableShowChartButton\">{{showReadFileProgress? \"Loading...\" : \"Show\"}}</button>\r\n </div>\r\n <div class=\"right\">\r\n <button (click)=\"resetChart()\" title=\"Reset zoom of chart.\" [disabled]=\"showReadFileProgress || !enableResetChartButton\">Reset Chart</button>\r\n </div>\r\n </div>\r\n </div>\r\n <div #nameserverHistoryContent class=\"nameserver-history-content\">\r\n <div class=\"nameserver-history-content-chart\">\r\n <instruction [(show)]=\"showInstruction\" *ngIf=\"!showChartFlag && showInstruction\"\r\n [step1Finished]=\"!!file\"\r\n [step2Finished]=\"dateTimeRange && (!!dateTimeRange[0] || !!dateTimeRange[1]) || timezone != defaultTimezone\"\r\n [step3Finished]=\"!!port\"\r\n [step4Finished]=\"stepShowChart && !enableShowChartButton\"\r\n [step5Finished]=\"false\">\r\n </instruction>\r\n <canvas id=\"chartNameServerHistory\" ></canvas>\r\n </div>\r\n <div class=\"nameserver-history-content-controller\" >\r\n <ngx-selection-table (change)=\"selectItem($event)\" *ngIf=\"showChartFlag\"\r\n [filter]=\"true\"\r\n [checkbox]=\"true\"\r\n [tableSource]=\"tableSource\"\r\n [keyColumn]=\"kpiColumn\"\r\n [hiddenColumns]=\"hiddenColumns\"\r\n [tooltipColumn]=\"descColumn\"\r\n [searchStyle]=\"searchType\"\r\n [searchColumn]=\"kpiColumn\"\r\n [multiSelection]=\"true\">\r\n </ngx-selection-table>\r\n </div>\r\n </div>\r\n</div>\r\n<div class=\"message-container\" *ngIf=\"alertMessage\">\r\n <alert [(alertMessage)]=\"alertMessage\" [alertType]=\"alertType\" [alertTimeout]=\"30000\"></alert>\r\n</div>\r\n", styles: [":host *,:host *:before,:host *:after{box-sizing:inherit;display:inherit;font-size:inherit;font-weight:inherit;font-family:inherit}:host .hover-box,:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button:hover{outline:0;box-shadow:0 0 6px #23adff}:host .dashed-box,:host .nameserver-history-all .toolbar-chart .chart-operation button,:host .nameserver-history-all .toolbar-chart .port-selection,:host .nameserver-history-all .toolbar-chart .input-time,:host .nameserver-history-all .toolbar-chart .upload-box-content{background:#f8f8f8;box-shadow:inset 0 20px 20px -20px #0009;border:1px dashed #0782d0}:host .solid-box,:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button{background:#fff none;border:1px solid #ccc;border-radius:4px;line-height:1.42857143}:host .nameserver-history-all{width:98%;min-width:1314px;height:auto;border:1px none #0782d0;border-bottom-style:dashed;margin:3px 1%;box-sizing:border-box;display:inline-block;font-size:14px;font-weight:400;font-family:Helvetica,Arial,sans-serif}:host .nameserver-history-all .toolbar-chart{width:100%;height:48px}:host .nameserver-history-all .toolbar-chart button{text-align:center;white-space:nowrap;vertical-align:middle}:host .nameserver-history-all .toolbar-chart button:hover{text-shadow:1px 1px 3px royalblue;cursor:pointer;font-weight:600}:host .nameserver-history-all .toolbar-chart button:disabled{text-shadow:none;opacity:.65;cursor:default;color:#a9a9a9;font-weight:400}:host .nameserver-history-all .toolbar-chart .upload-box-content{width:20%;height:100%;float:left;text-align:center;color:#00008b}:host .nameserver-history-all .toolbar-chart .input-time{margin-left:1%;margin-right:1%;width:43%;height:100%}:host .nameserver-history-all .toolbar-chart .input-time .input-time-range{height:100%;width:57%;float:left}:host .nameserver-history-all .toolbar-chart .input-time .timezone-selector{margin-top:6px;height:100%;width:42.5%;margin-right:.5%;float:right}:host .nameserver-history-all .toolbar-chart .port-selection{width:14%;margin-right:1%;height:48px}:host .nameserver-history-all .toolbar-chart .port-selection .port-selector{margin-top:6px;margin-left:2%;margin-right:1%;width:47%;float:left}:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button{margin-top:6px;margin-left:1%;margin-right:2%;width:47%;float:right}:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button{color:#333;width:100%;padding:6px 12px;margin-bottom:0}:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button:hover{text-shadow:None;font-weight:400}:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button:disabled{box-shadow:none}:host .nameserver-history-all .toolbar-chart .chart-operation{width:20%;height:48px;float:right}:host .nameserver-history-all .toolbar-chart .chart-operation .left{margin-right:1%;width:49%;height:100%;float:left}:host .nameserver-history-all .toolbar-chart .chart-operation .right{width:50%;height:100%;float:right}:host .nameserver-history-all .toolbar-chart .chart-operation button{width:100%;height:100%;color:#00008b}:host .nameserver-history-all .nameserver-history-content{width:100%;height:730px;margin:5px 5px 5px 0}:host .nameserver-history-all .nameserver-history-content .nameserver-history-content-chart{width:75%;height:100%;position:relative;float:left}:host .nameserver-history-all .nameserver-history-content .nameserver-history-content-controller{width:25%;height:100%;float:right;overflow:auto}:host .message-container{width:98%;margin:0 1%;box-sizing:border-box;display:inline-block}\n"], components: [{ type: i2.FileDropInputComponent, selector: "file-drop-input", inputs: ["dropAreaText", "inputAreaText"], outputs: ["fileDrop", "fileInput"] }, { type: i3.ProgressBarComponent, selector: "progress-bar", inputs: ["progress"] }, { type: i4.TimeRangeSelectorComponent, selector: "time-range-selector", inputs: ["disabled", "dateTimeRange"], outputs: ["dateTimeRangeChange"] }, { type: i5.TimezoneSelectorComponent, selector: "timezone-selector", inputs: ["disabled", "timezone"], outputs: ["timezoneChange"] }, { type: i6.PortSelectorComponent, selector: "port-selector", inputs: ["disabled", "port", "ports"], outputs: ["portChange"] }, { type: i7.InstructionComponent, selector: "instruction", inputs: ["step1Finished", "step2Finished", "step3Finished", "step4Finished", "step5Finished", "show"], outputs: ["showChange"] }, { type: i8.SelectionTableComponent, selector: "ngx-selection-table", inputs: ["filter", "keyColumn", "tableSource", "checkbox", "multiSelection", "clickToSelect", "hiddenColumns", "tooltipColumn", "searchStyle", "searchColumn"], outputs: ["change"] }, { type: i9.AlertComponent, selector: "alert", inputs: ["alertMessage", "alertType", "alertTimeout"], outputs: ["alertMessageChange"] }], directives: [{ type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
527
527
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: NameServerHistoryComponent, decorators: [{
528
528
  type: Component,
529
- args: [{ selector: 'ngx-hana-nameserver-history-viewer', providers: [FileService, ChartService, UIService], template: "<div #nameserverHistoryAll class=\"nameserver-history-all\" (window:resize)=\"onResize()\">\r\n <div class=\"toolbar-chart\">\r\n <div class=\"upload-box-content\">\r\n <div *ngIf=\"!showReadFileProgress\">\r\n <file-drop-input (fileDrop)=\"fileDropped($event)\" (fileInput)=\"fileSelected($event)\"\r\n [dropAreaText]= \"abbreviatedFileName\"\r\n [inputAreaText]=\"'Browse'\"\r\n [title]=\"file?.name? file.name:'Select a name server history file from your local disk.'\"\r\n *ngIf=\"!fileBuffer\">\r\n </file-drop-input>\r\n <p *ngIf=\"fileBuffer\">{{streamModeFileName || 'nameserver_history.trc (stream mode)'}}</p>\r\n </div>\r\n <div *ngIf=\"showReadFileProgress\">\r\n <progress-bar [progress]=\"readProgress\"></progress-bar>\r\n </div>\r\n </div>\r\n <div class=\"input-time\">\r\n <div class=\"input-time-range\">\r\n <time-range-selector [disabled]=\"showReadFileProgress\" [(dateTimeRange)]=\"dateTimeRange\"></time-range-selector>\r\n </div>\r\n <div class=\"timezone-selector\">\r\n <timezone-selector [(timezone)]=\"timezone\" [disabled]=\"showReadFileProgress\"></timezone-selector>\r\n </div>\r\n </div>\r\n\r\n <div class=\"port-selection\">\r\n <div class=\"port-selector\">\r\n <port-selector (portChange)=\"switchPortForChart($event)\" [(port)]=\"port\" [ports]=\"ports\" [disabled]=\"showReadFileProgress\"></port-selector>\r\n </div>\r\n <div class=\"port-load-button\">\r\n <button (click)=\"loadPorts()\" title=\"Load all ports from name server history trace file.\" [disabled]=\"!enableShowChartButton || port || !enableLoadPortsButton\">{{showReadFileProgress? \"Loading...\" : \"Load\"}}</button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"chart-operation\">\r\n <div class=\"left\">\r\n <button (click)=\"showChart()\" title=\"Load and display all data from name server history trace file.\" [disabled]=\"!enableShowChartButton\">{{showReadFileProgress? \"Loading...\" : \"Show\"}}</button>\r\n </div>\r\n <div class=\"right\">\r\n <button (click)=\"resetChart()\" title=\"Reset zoom of chart.\" [disabled]=\"showReadFileProgress || !enableResetChartButton\">Reset Chart</button>\r\n </div>\r\n </div>\r\n </div>\r\n <div #nameserverHistoryContent class=\"nameserver-history-content\">\r\n <div class=\"nameserver-history-content-chart\">\r\n <instruction [(show)]=\"showInstruction\" *ngIf=\"!showChartFlag && showInstruction\"\r\n [step1Finished]=\"!!file\"\r\n [step2Finished]=\"dateTimeRange && (!!dateTimeRange[0] || !!dateTimeRange[1]) || timezone != defaultTimezone\"\r\n [step3Finished]=\"!!port\"\r\n [step4Finished]=\"stepShowChart && !enableShowChartButton\"\r\n [step5Finished]=\"false\">\r\n </instruction>\r\n <canvas id=\"chartNameServerHistory\" ></canvas>\r\n </div>\r\n <div class=\"nameserver-history-content-controller\" >\r\n <ngx-selection-table (change)=\"selectItem($event)\" *ngIf=\"showChartFlag\"\r\n [filter]=\"true\"\r\n [checkbox]=\"true\"\r\n [tableSource]=\"tableSource\"\r\n [keyColumn]=\"kpiColumn\"\r\n [hiddenColumns]=\"hiddenColumns\"\r\n [tooltipColumn]=\"descColumn\"\r\n [searchStyle]=\"searchType\"\r\n [searchColumn]=\"kpiColumn\"\r\n [multiSelection]=\"true\">\r\n </ngx-selection-table>\r\n </div>\r\n </div>\r\n</div>\r\n<div class=\"message-container\" *ngIf=\"alertMessage\">\r\n <alert [(alertMessage)]=\"alertMessage\" [alertType]=\"alertType\" [alertTimeout]=\"30000\"></alert>\r\n</div>\r\n", styles: [":host *,:host *:before,:host *:after{box-sizing:inherit;display:inherit;font-size:inherit;font-weight:inherit;font-family:inherit}:host .hover-box,:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button:hover{outline:0;box-shadow:0 0 6px #23adff}:host .dashed-box,:host .nameserver-history-all .toolbar-chart .chart-operation button,:host .nameserver-history-all .toolbar-chart .port-selection,:host .nameserver-history-all .toolbar-chart .input-time,:host .nameserver-history-all .toolbar-chart .upload-box-content{background:#f8f8f8;box-shadow:inset 0 20px 20px -20px #0009;border:1px dashed #0782d0}:host .solid-box,:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button{background:#fff none;border:1px solid #ccc;border-radius:4px;line-height:1.42857143}:host .nameserver-history-all{width:98%;min-width:1314px;height:auto;border:1px none #0782d0;border-bottom-style:dashed;margin:3px 1%;box-sizing:border-box;display:inline-block;font-size:14px;font-weight:400;font-family:Helvetica,Arial,sans-serif}:host .nameserver-history-all .toolbar-chart{width:100%;height:48px}:host .nameserver-history-all .toolbar-chart button{text-align:center;white-space:nowrap;vertical-align:middle}:host .nameserver-history-all .toolbar-chart button:hover{text-shadow:1px 1px 3px royalblue;cursor:pointer;font-weight:600}:host .nameserver-history-all .toolbar-chart button:disabled{text-shadow:none;opacity:.65;cursor:default;color:#a9a9a9;font-weight:400}:host .nameserver-history-all .toolbar-chart .upload-box-content{width:20%;height:100%;float:left;text-align:center;color:#00008b}:host .nameserver-history-all .toolbar-chart .input-time{margin-left:1%;margin-right:1%;width:43%;height:100%}:host .nameserver-history-all .toolbar-chart .input-time .input-time-range{height:100%;width:57%;float:left}:host .nameserver-history-all .toolbar-chart .input-time .timezone-selector{margin-top:6px;height:100%;width:42.5%;margin-right:.5%;float:right}:host .nameserver-history-all .toolbar-chart .port-selection{width:14%;margin-right:1%;height:48px}:host .nameserver-history-all .toolbar-chart .port-selection .port-selector{margin-top:6px;margin-left:2%;margin-right:1%;width:47%;float:left}:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button{margin-top:6px;margin-left:1%;margin-right:2%;width:47%;float:right}:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button{color:#333;width:100%;padding:6px 12px;margin-bottom:0}:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button:hover{text-shadow:None;font-weight:400}:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button:disabled{box-shadow:none}:host .nameserver-history-all .toolbar-chart .chart-operation{width:20%;height:48px;float:right}:host .nameserver-history-all .toolbar-chart .chart-operation .left{margin-right:1%;width:49%;height:100%;float:left}:host .nameserver-history-all .toolbar-chart .chart-operation .right{width:50%;height:100%;float:right}:host .nameserver-history-all .toolbar-chart .chart-operation button{width:100%;height:100%;color:#00008b}:host .nameserver-history-all .nameserver-history-content{width:100%;height:730px;margin:5px 5px 5px 0}:host .nameserver-history-all .nameserver-history-content .nameserver-history-content-chart{width:75%;height:100%;position:relative;float:left}:host .nameserver-history-all .nameserver-history-content .nameserver-history-content-controller{width:25%;height:100%;float:right;overflow:auto}:host .message-container{width:98%;margin:0 1%;box-sizing:border-box;display:inline-block}\n"] }]
529
+ args: [{ selector: 'ngx-hana-nameserver-history-viewer', providers: [FileService, ChartService, UIService], template: "<div #nameserverHistoryAll class=\"nameserver-history-all\" (window:resize)=\"onResize()\">\r\n <div class=\"toolbar-chart\">\r\n <div class=\"upload-box-content\">\r\n <div *ngIf=\"!showReadFileProgress\">\r\n <file-drop-input (fileDrop)=\"fileDropped($event)\" (fileInput)=\"fileSelected($event)\"\r\n [dropAreaText]= \"abbreviatedFileName\"\r\n [inputAreaText]=\"'Browse'\"\r\n [title]=\"file?.name? file.name:'Select a name server history file from your local disk.'\"\r\n *ngIf=\"!fileBuffer\">\r\n </file-drop-input>\r\n <p *ngIf=\"fileBuffer\" style=\"padding-top:13px\">{{streamModeFileName || 'nameserver_history.trc (stream mode)'}}</p>\r\n </div>\r\n <div *ngIf=\"showReadFileProgress\">\r\n <progress-bar [progress]=\"readProgress\"></progress-bar>\r\n </div>\r\n </div>\r\n <div class=\"input-time\">\r\n <div class=\"input-time-range\">\r\n <time-range-selector [disabled]=\"showReadFileProgress\" [(dateTimeRange)]=\"dateTimeRange\"></time-range-selector>\r\n </div>\r\n <div class=\"timezone-selector\">\r\n <timezone-selector [(timezone)]=\"timezone\" [disabled]=\"showReadFileProgress\"></timezone-selector>\r\n </div>\r\n </div>\r\n\r\n <div class=\"port-selection\">\r\n <div class=\"port-selector\">\r\n <port-selector (portChange)=\"switchPortForChart($event)\" [(port)]=\"port\" [ports]=\"ports\" [disabled]=\"showReadFileProgress\"></port-selector>\r\n </div>\r\n <div class=\"port-load-button\">\r\n <button (click)=\"loadPorts()\" title=\"Load all ports from name server history trace file.\" [disabled]=\"!enableShowChartButton || port || !enableLoadPortsButton\">{{showReadFileProgress? \"Loading...\" : \"Load\"}}</button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"chart-operation\">\r\n <div class=\"left\">\r\n <button (click)=\"showChart()\" title=\"Load and display all data from name server history trace file.\" [disabled]=\"!enableShowChartButton\">{{showReadFileProgress? \"Loading...\" : \"Show\"}}</button>\r\n </div>\r\n <div class=\"right\">\r\n <button (click)=\"resetChart()\" title=\"Reset zoom of chart.\" [disabled]=\"showReadFileProgress || !enableResetChartButton\">Reset Chart</button>\r\n </div>\r\n </div>\r\n </div>\r\n <div #nameserverHistoryContent class=\"nameserver-history-content\">\r\n <div class=\"nameserver-history-content-chart\">\r\n <instruction [(show)]=\"showInstruction\" *ngIf=\"!showChartFlag && showInstruction\"\r\n [step1Finished]=\"!!file\"\r\n [step2Finished]=\"dateTimeRange && (!!dateTimeRange[0] || !!dateTimeRange[1]) || timezone != defaultTimezone\"\r\n [step3Finished]=\"!!port\"\r\n [step4Finished]=\"stepShowChart && !enableShowChartButton\"\r\n [step5Finished]=\"false\">\r\n </instruction>\r\n <canvas id=\"chartNameServerHistory\" ></canvas>\r\n </div>\r\n <div class=\"nameserver-history-content-controller\" >\r\n <ngx-selection-table (change)=\"selectItem($event)\" *ngIf=\"showChartFlag\"\r\n [filter]=\"true\"\r\n [checkbox]=\"true\"\r\n [tableSource]=\"tableSource\"\r\n [keyColumn]=\"kpiColumn\"\r\n [hiddenColumns]=\"hiddenColumns\"\r\n [tooltipColumn]=\"descColumn\"\r\n [searchStyle]=\"searchType\"\r\n [searchColumn]=\"kpiColumn\"\r\n [multiSelection]=\"true\">\r\n </ngx-selection-table>\r\n </div>\r\n </div>\r\n</div>\r\n<div class=\"message-container\" *ngIf=\"alertMessage\">\r\n <alert [(alertMessage)]=\"alertMessage\" [alertType]=\"alertType\" [alertTimeout]=\"30000\"></alert>\r\n</div>\r\n", styles: [":host *,:host *:before,:host *:after{box-sizing:inherit;display:inherit;font-size:inherit;font-weight:inherit;font-family:inherit}:host .hover-box,:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button:hover{outline:0;box-shadow:0 0 6px #23adff}:host .dashed-box,:host .nameserver-history-all .toolbar-chart .chart-operation button,:host .nameserver-history-all .toolbar-chart .port-selection,:host .nameserver-history-all .toolbar-chart .input-time,:host .nameserver-history-all .toolbar-chart .upload-box-content{background:#f8f8f8;box-shadow:inset 0 20px 20px -20px #0009;border:1px dashed #0782d0}:host .solid-box,:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button{background:#fff none;border:1px solid #ccc;border-radius:4px;line-height:1.42857143}:host .nameserver-history-all{width:98%;min-width:1314px;height:auto;border:1px none #0782d0;border-bottom-style:dashed;margin:3px 1%;box-sizing:border-box;display:inline-block;font-size:14px;font-weight:400;font-family:Helvetica,Arial,sans-serif}:host .nameserver-history-all .toolbar-chart{width:100%;height:48px}:host .nameserver-history-all .toolbar-chart button{text-align:center;white-space:nowrap;vertical-align:middle}:host .nameserver-history-all .toolbar-chart button:hover{text-shadow:1px 1px 3px royalblue;cursor:pointer;font-weight:600}:host .nameserver-history-all .toolbar-chart button:disabled{text-shadow:none;opacity:.65;cursor:default;color:#a9a9a9;font-weight:400}:host .nameserver-history-all .toolbar-chart .upload-box-content{width:20%;height:100%;float:left;text-align:center;color:#00008b}:host .nameserver-history-all .toolbar-chart .input-time{margin-left:1%;margin-right:1%;width:43%;height:100%}:host .nameserver-history-all .toolbar-chart .input-time .input-time-range{height:100%;width:57%;float:left}:host .nameserver-history-all .toolbar-chart .input-time .timezone-selector{margin-top:6px;height:100%;width:42.5%;margin-right:.5%;float:right}:host .nameserver-history-all .toolbar-chart .port-selection{width:14%;margin-right:1%;height:48px}:host .nameserver-history-all .toolbar-chart .port-selection .port-selector{margin-top:6px;margin-left:2%;margin-right:1%;width:47%;float:left}:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button{margin-top:6px;margin-left:1%;margin-right:2%;width:47%;float:right}:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button{color:#333;width:100%;padding:6px 12px;margin-bottom:0}:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button:hover{text-shadow:None;font-weight:400}:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button:disabled{box-shadow:none}:host .nameserver-history-all .toolbar-chart .chart-operation{width:20%;height:48px;float:right}:host .nameserver-history-all .toolbar-chart .chart-operation .left{margin-right:1%;width:49%;height:100%;float:left}:host .nameserver-history-all .toolbar-chart .chart-operation .right{width:50%;height:100%;float:right}:host .nameserver-history-all .toolbar-chart .chart-operation button{width:100%;height:100%;color:#00008b}:host .nameserver-history-all .nameserver-history-content{width:100%;height:730px;margin:5px 5px 5px 0}:host .nameserver-history-all .nameserver-history-content .nameserver-history-content-chart{width:75%;height:100%;position:relative;float:left}:host .nameserver-history-all .nameserver-history-content .nameserver-history-content-controller{width:25%;height:100%;float:right;overflow:auto}:host .message-container{width:98%;margin:0 1%;box-sizing:border-box;display:inline-block}\n"] }]
530
530
  }], ctorParameters: function () { return [{ type: i1.FileService }, { type: i1.ChartService }, { type: i1.UIService }]; }, propDecorators: { nameserverHistoryAllRef: [{
531
531
  type: ViewChild,
532
532
  args: ['nameserverHistoryAll', { read: ElementRef }]
@@ -550,4 +550,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
550
550
  }], autoDisplay: [{
551
551
  type: Input
552
552
  }] } });
553
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFtZXNlcnZlci1oaXN0b3J5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9uYW1lc2VydmVyLWhpc3Rvcnktdmlld2VyL2NvbXBvbmVudHMvbmFtZXNlcnZlci1oaXN0b3J5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9uYW1lc2VydmVyLWhpc3Rvcnktdmlld2VyL2NvbXBvbmVudHMvbmFtZXNlcnZlci1oaXN0b3J5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBb0MsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3hHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQ0wsY0FBYyxFQUNkLEtBQUssRUFDTCxXQUFXLEVBQ1gsY0FBYyxFQUNkLGdCQUFnQixFQUNoQixVQUFVLEVBQ1Ysc0JBQXNCLEVBQ3RCLGVBQWUsRUFDZixZQUFZLEVBQ1osYUFBYSxFQUNiLGtCQUFrQixFQUNsQixrQkFBa0IsRUFDbEIsYUFBYSxFQUNiLGtCQUFrQixFQUNsQixVQUFVLEVBQ1gsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBZ0UsTUFBTSxVQUFVLENBQUM7QUFDekgsT0FBTyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRW5FLE9BQU8sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sNkJBQTZCLENBQUM7QUFDckMsT0FBTyx1QkFBdUIsQ0FBQzs7Ozs7Ozs7Ozs7O0FBRS9CLElBQUssVUFJSjtBQUpELFdBQUssVUFBVTtJQUNiLHlEQUEyQyxDQUFBO0lBQzNDLHFDQUF1QixDQUFBO0lBQ3ZCLG1EQUFxQyxDQUFBO0FBQ3ZDLENB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QkFBbEIsS0FBSztnQkFLRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBS0csV0FBVztzQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcclxuaW1wb3J0IHtcclxuICBzZXRDaGFydEhlaWdodCxcclxuICBzbGVlcCxcclxuICBpc0VtcHR5RGF0YSxcclxuICBnZXREaXNwbGF5UG9ydCxcclxuICBnZXRGaWxlRnJvbUlucHV0LFxyXG4gIGlzU2FtZUZpbGUsXHJcbiAgZ2V0QWJicmV2aWF0ZWRGaWxlTmFtZSxcclxuICBnZXRGaWxlRnJvbURyb3AsXHJcbiAgZ2V0UmVhbFBvcnRzLFxyXG4gIGdldFRpbWVTdHJpbmcsXHJcbiAgcHJpbnRQcm9jZXNzZWRUaW1lLFxyXG4gIGdldFRpbWVSYW5nZVN0cmluZyxcclxuICBnZW5lcmF0ZVBvcnRzLFxyXG4gIGdldERlZmF1bHRUaW1lem9uZSxcclxuICBibG9iVG9GaWxlXHJcbn0gZnJvbSAnLi4vdXRpbHMnO1xyXG5pbXBvcnQgeyBBYm9ydCwgQWxlcnQsIEh0bWxFbGVtZW50LCBJdGVtLCBDaGFydENvbnRlbnREYXRhLCBDaGFydENvbnRlbnRIZWFkZXIsIENoYXJ0Q29udGVudFRpbWUsIFBvcnQgfSBmcm9tICcuLi90eXBlcyc7XHJcbmltcG9ydCB7IEZpbGVTZXJ2aWNlLCBDaGFydFNlcnZpY2UsIFVJU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzJztcclxuXHJcbmltcG9ydCAnaGFtbWVyanMnO1xyXG5pbXBvcnQgJy4uL3V0aWxzL2NoYXJ0anMtZG93bnNhbXBsZSc7XHJcbmltcG9ydCAnLi4vdXRpbHMvY2hhcnRqcy16b29tJztcclxuXHJcbmVudW0gU2VhcmNoVHlwZSB7XHJcbiAgc2VhcmNoV2l0aFN1YkhlYWRlciA9ICdzZWFyY2hXaXRoU3ViSGVhZGVyJyxcclxuICBzZWFyY2hBbGwgPSAnc2VhcmNoQWxsJyxcclxuICBzZWFyY2hJbkNoaWxkcmVuID0gJ3NlYXJjaEluQ2hpbGRyZW4nXHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbmd4LWhhbmEtbmFtZXNlcnZlci1oaXN0b3J5LXZpZXdlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL25hbWVzZXJ2ZXItaGlzdG9yeS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbICcuL25hbWVzZXJ2ZXItaGlzdG9yeS5jb21wb25lbnQuc2NzcycgXSxcclxuICBwcm92aWRlcnM6IFsgRmlsZVNlcnZpY2UsIENoYXJ0U2VydmljZSwgVUlTZXJ2aWNlIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIE5hbWVTZXJ2ZXJIaXN0b3J5Q29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkluaXQge1xyXG4gIEBWaWV3Q2hpbGQoJ25hbWVzZXJ2ZXJIaXN0b3J5QWxsJywgeyByZWFkOiBFbGVtZW50UmVmIH0pIG5hbWVzZXJ2ZXJIaXN0b3J5QWxsUmVmOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ25hbWVzZXJ2ZXJIaXN0b3J5Q29udGVudCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBuYW1lc2VydmVySGlzdG9yeUNvbnRlbnRSZWY6IEVsZW1lbnRSZWY7XHJcblxyXG4gIC8qKlxyXG4gICAqIElucHV0IChvcHRpb25hbCkgYmluZCB0byBbZGVmYXVsdFNlbGVjdGVkSXRlbXNdXHJcbiAgICovXHJcbiAgQElucHV0KCkgZGVmYXVsdFNlbGVjdGVkSXRlbXM6IHN0cmluZ1tdO1xyXG5cclxuICAvKipcclxuICAgKiBJbnB1dCAob3B0aW9uYWwpIGJpbmQgdG8gW2hpZGVNZWFzdXJlQ29sdW1uc11cclxuICAgKi9cclxuICBASW5wdXQoKSBoaWRlTWVhc3VyZUNvbHVtbnM6IHN0cmluZ1tdO1xyXG5cclxuICAvKipcclxuICAgKiBJbnB1dCAob3B0aW9uYWwpIGJpbmQgdG8gW21heFJvd3NMaW1pdGF0aW9uXVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIG1heFJvd3NMaW1pdGF0aW9uOiBudW1iZXI7XHJcblxyXG4gIC8qKlxyXG4gICAqIElucHV0IChvcHRpb25hbCkgYmluZCB0byBbc2hvd0luc3RydWN0aW9uXVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHNob3dJbnN0cnVjdGlvbiA9IHRydWU7XHJcblxyXG4gIC8qKlxyXG4gICAqIElucHV0IChvcHRpb25hbCkgYmluZCB0byBbdGltZXpvbmVdXHJcbiAgICovXHJcbiAgQElucHV0KCkgdGltZXpvbmU6IHN0cmluZztcclxuXHJcbiAgLyoqXHJcbiAgICogZmlsZSBidWZmZXIsIHVzZSB0aGlzIGZvciBzdHJlYW0gbW9kZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGZpbGVCdWZmZXI6IEJsb2I7XHJcblxyXG4gIC8qKlxyXG4gICAqIGZpbGUgbmFtZSBmb3Igc3RyZWFtIG1vZGVcclxuICAgKi9cclxuICBASW5wdXQoKSBzdHJlYW1Nb2RlRmlsZU5hbWU6IHN0cmluZztcclxuXHJcbiAgLyoqXHJcbiAgICogYXV0byBkaXNwbGF5IHRoZSBjaGFydCBpbiBzdHJlYW0gbW9kZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGF1dG9EaXNwbGF5OiBib29sZWFuO1xyXG5cclxuICAvKipcclxuICAgKiBzZWxlY3RlZCBuYW1lIHNlcnZlciBoaXN0b3J5IGZpbGVcclxuICAgKi9cclxuICBmaWxlOiBGaWxlO1xyXG5cclxuICAvKipcclxuICAgKiB0aW1lIGluZm8gb2YgdGhlIG5hbWUgc2VydmVyIGhpc3RvcnkgZmlsZVxyXG4gICAqL1xyXG4gIHRpbWU6IENoYXJ0Q29udGVudFRpbWUgPSB7fTtcclxuXHJcbiAgLyoqXHJcbiAgICogZGF0YSBvZiB0aGUgbmFtZSBzZXJ2ZXIgaGlzdG9yeSBmaWxlXHJcbiAgICovXHJcbiAgZGF0YTogQ2hhcnRDb250ZW50RGF0YSA9IHt9O1xyXG5cclxuICAvKipcclxuICAgKiBoZWFkZXIgb2YgdGhlIG5hbWUgc2VydmVyIGhpc3RvcnkgZmlsZVxyXG4gICAqL1xyXG4gIGhlYWRlcjogQ2hhcnRDb250ZW50SGVhZGVyW10gPSBbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogaG9zdCBvZiB0aGUgbmFtZSBzZXJ2ZXIgaGlzdG9yeSBmaWxlXHJcbiAgICovXHJcbiAgaG9zdCA9ICduYW1lc2VydmVyIGhpc3RvcnkgZmlsZSc7XHJcblxyXG4gIC8qKlxyXG4gICAqIGFsZXJ0IG1lc3NhZ2UgY29udGVudFxyXG4gICAqL1xyXG4gIGFsZXJ0TWVzc2FnZTogc3RyaW5nO1xyXG5cclxuICAvKipcclxuICAgKiBhbGVydCBtZXNzYWdlIHR5cGVcclxuICAgKi9cclxuICBhbGVydFR5cGU6IEFsZXJ0O1xyXG5cclxuICAvKipcclxuICAgKiBzZWxlY3RlZCBwb3J0XHJcbiAgICovXHJcbiAgcG9ydDogc3RyaW5nO1xyXG5cclxuICAvKipcclxuICAgKiBhbGwgdGhlIHBvcnRzIGZyb20gdGhlIG5hbWVzZXJ2ZXIgaGlzdG9yeSBmaWxlXHJcbiAgICovXHJcbiAgcG9ydHM6IFBvcnRbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogc2VsZWN0ZWQgdGltZSByYW5nZVxyXG4gICAqL1xyXG4gIGRhdGVUaW1lUmFuZ2U6IERhdGVbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogZGF0YSBzb3VyY2UgZm9yIHRoZSBzZWxlY3Rpb24gdGFibGUgKHJpZ2h0IHBhcnQgb2YgdGhlIGNoYXJ0KVxyXG4gICAqL1xyXG4gIHRhYmxlU291cmNlOiBhbnlbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogdGhlIHByb2dyZXNzIGZvciByZWFkaW5nIGZpbGVcclxuICAgKi9cclxuICByZWFkUHJvZ3Jlc3MgPSAwO1xyXG5cclxuICAvKipcclxuICAgKiBzZWxlY3RlZC9kcm9wcGVkIGZpbGUgbmFtZSAoYWJicmV2aWF0aW9uKSwgZnVsbCBmaWxlIG5hbWUgd2lsbCBiZSBzaG93biB2aWEgdGhlIHRvb2x0aXBzXHJcbiAgICovXHJcbiAgYWJicmV2aWF0ZWRGaWxlTmFtZSA9ICdvciBEcm9wIEZpbGUgSGVyZSc7XHJcblxyXG4gIC8qKlxyXG4gICAqIGZvciB0aGUgaW5zdHJ1Y3Rpb24gc3RlcCA0XHJcbiAgICovXHJcbiAgc3RlcFNob3dDaGFydCA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBjb250cm9sIGZsYWcgZm9yIHNob3dpbmcgdGhlIG5hbWUgc2VydmVyIGhpc3RvcnkgY2hhcnRcclxuICAgKi9cclxuICBzaG93Q2hhcnRGbGFnOiBib29sZWFuO1xyXG5cclxuICAvKipcclxuICAgKiBjb250cm9sIGZsYWcgZm9yIHNob3dpbmcgdGhlIGZpbGUgcmVhZGluZyBwcm9ncmVzc1xyXG4gICAqL1xyXG4gIHNob3dSZWFkRmlsZVByb2dyZXNzOiBib29sZWFuO1xyXG5cclxuICAvKipcclxuICAgKiBjb250cm9sIGZsYWcgZm9yIFwiTG9hZFwiIHBvcnRzIGJ1dHRvblxyXG4gICAqL1xyXG4gIGVuYWJsZUxvYWRQb3J0c0J1dHRvbjogYm9vbGVhbjtcclxuXHJcbiAgLyoqXHJcbiAgICogY29udHJvbCBmbGFnIGZvciBlbmFibGluZyBcIlNob3dcIiBjaGFydCBidXR0b25cclxuICAgKi9cclxuICBlbmFibGVTaG93Q2hhcnRCdXR0b246IGJvb2xlYW47XHJcblxyXG4gIC8qKlxyXG4gICAqIGNvbnRyb2wgZmxhZyBmb3IgXCJSZXNldFwiIGNoYXJ0IGJ1dHRvblxyXG4gICAqL1xyXG4gIGVuYWJsZVJlc2V0Q2hhcnRCdXR0b246IGJvb2xlYW47XHJcblxyXG4gIHNlYXJjaFR5cGUgPSBTZWFyY2hUeXBlLnNlYXJjaEFsbDtcclxuXHJcbiAgLyoqXHJcbiAgICogc2VsZWN0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgc2VsZWN0aW9uIHRhYmxlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfc2VsZWN0aW9uOiBTZWxlY3Rpb25Nb2RlbDxhbnk+O1xyXG5cclxuICAvKipcclxuICAgKiBjdXJyZW50IGRpc3BsYXlpbmcgcG9ydFxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2N1cnJlbnRDaGFydFBvcnQ6IHN0cmluZztcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmaWxlU2VydmljZTogRmlsZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSBjaGFydFNlcnZpY2U6IENoYXJ0U2VydmljZSxcclxuICAgICAgICAgICAgICBwcml2YXRlIHVpU2VydmljZTogVUlTZXJ2aWNlKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIC8vIHRoaXMudGltZXpvbmUgPSB0aGlzLmRlZmF1bHRUaW1lem9uZTtcclxuICAgIHRoaXMub25SZXNpemUoKTtcclxuXHJcbiAgICAvLyBpbml0IGl0ZW1zJyBzdGF0dXNcclxuICAgIC8vIHJlc2V0IGNoYXJ0IGJ1dHRvbiB3aWxsIGJlIGRpc2FibGUgYnkgZGVmYXVsdCBsYXRlciwgb25seSBiZSBlbmFibGVkIGFmdGVyIHpvb21lZFxyXG4gICAgdGhpcy5fdG9nZ2xlSXRlbXMoW1xyXG4gICAgICB7aWQ6IEh0bWxFbGVtZW50LmNoYXJ0QXJlYSwgc3RhdHVzOiBmYWxzZX0sXHJcbiAgICAgIHtpZDogSHRtbEVsZW1lbnQucmVhZEZpbGVQcm9ncmVzcywgc3RhdHVzOiBmYWxzZX0sXHJcbiAgICAgIHtpZDogSHRtbEVsZW1lbnQuc2hvd0NoYXJ0QnV0dG9uLCBzdGF0dXM6IGZhbHNlfSxcclxuICAgICAge2lkOiBIdG1sRWxlbWVudC5sb2FkUG9ydHNCdXR0b24sIHN0YXR1czogdHJ1ZX0sXHJcbiAgICAgIHtpZDogSHRtbEVsZW1lbnQucmVzZXRDaGFydEJ1dHRvbiwgc3RhdHVzOiBmYWxzZX1dKTtcclxuXHJcbiAgfVxyXG5cclxuICBhc3luYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICBjb25zdCBmYmMgPSBjaGFuZ2VzLmZpbGVCdWZmZXI7XHJcbiAgICBpZiAoZmJjICYmIGZiYy5jdXJyZW50VmFsdWUgJiYgZmJjLmN1cnJlbnRWYWx1ZSAhPT0gZmJjLnByZXZpb3VzVmFsdWUpIHtcclxuICAgICAgLy8gc2ltdWxhdGUgc2VsZWN0aW5nIGZpbGVcclxuICAgICAgY29uc3Qgc2ltdWxhdGVkRXZlbnQgPSB7dGFyZ2V0OiB7ZmlsZXM6IFtibG9iVG9GaWxlKHRoaXMuZmlsZUJ1ZmZlciwgdGhpcy5zdHJlYW1Nb2RlRmlsZU5hbWUpXX19O1xyXG4gICAgICBhd2FpdCB0aGlzLmZpbGVTZWxlY3RlZChzaW11bGF0ZWRFdmVudCk7XHJcbiAgICAgIHRoaXMuc2hvd0NoYXJ0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAqIFJlc2V0IENoYXJ0IHRvIGluaXRpYWwgc3RhdHVzXHJcbiAgICogSWYgbGVnZW5kIGlzIGFscmVhZHkgc2VsZWN0ZWQvdW5zZWxlY3RlZCBmcm9tIHRoZSBsaXN0LCBpdCB3b3VsZG4ndCBiZSByZXN0b3JlZC5cclxuICAgKi9cclxuICByZXNldENoYXJ0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fdG9nZ2xlSXRlbXMoW3tpZDogSHRtbEVsZW1lbnQucmVzZXRDaGFydEJ1dHRvbiwgc3RhdHVzOiBmYWxzZX1dKTtcclxuXHJcbiAgICBpZiAodGhpcy50YWJsZVNvdXJjZSAmJiB0aGlzLl9zZWxlY3Rpb24pIHtcclxuICAgICAgdGhpcy5jaGFydFNlcnZpY2UucmVzZXRDaGFydCh0aGlzLnRhYmxlU291cmNlLCB0aGlzLl9zZWxlY3Rpb24pXHJcbiAgICAgICAgLmNhdGNoKGUgPT4gdGhpcy5fc2hvd01lc3NhZ2UoQWxlcnQuZXJyb3IsIGUpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIHJlYWQgdGhlIGZpbGUgYW5kIGRpc3BsYXkgdGhlIGNoYXJ0XHJcbiAgICovXHJcbiAgc2hvd0NoYXJ0KCk6IHZvaWQge1xyXG4gICAgLy8gYWZ0ZXIgY2xpY2ssIHRoaXMgYnV0dG9uIGFuZCByZXNldCBidXR0b24gbmVlZHMgdG8gYmUgZGlzYWJsZWRcclxuICAgIHRoaXMuX3RvZ2dsZUl0ZW1zKFtcclxuICAgICAge2lkOiBIdG1sRWxlbWVudC5yZXNldENoYXJ0QnV0dG9uLCBzdGF0dXM6IGZhbHNlfSxcclxuICAgICAge2lkOiBIdG1sRWxlbWVudC5zaG93Q2hhcnRCdXR0b24sIHN0YXR1czogZmFsc2V9XSk7XHJcblxyXG4gICAgdGhpcy5zdGVwU2hvd0NoYXJ0ID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLl9pbml0Q2hhcnRFbnYoKS50aGVuKCgpID0+IHtcclxuICAgICAgY29uc3Qgc2VsZWN0ZWRUaW1lID0gdGhpcy5fc2VsZWN0ZWRUaW1lUmFuZ2U7XHJcbiAgICAgIGlmIChzZWxlY3RlZFRpbWUuc3RhcnRUaW1lID4gc2VsZWN0ZWRUaW1lLmVuZFRpbWUpIHtcclxuICAgICAgICB0aGlzLl9zaG93TWVzc2FnZShBbGVydC5lcnJvciwgJ1RpbWUgcmFuZ2UgaXMgbm90IGNvcnJlY3QuJyk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmZpbGUpIHtcclxuICAgICAgICAvLyBpdCdzIHRpbWUgZm9yIGRpc3BsYXlpbmcgdGhlIHJlYWRpbmcgcHJvZ3Jlc3MgYmFyXHJcbiAgICAgICAgdGhpcy5fdG9nZ2xlSXRlbXMoW3tpZDogSHRtbEVsZW1lbnQucmVhZEZpbGVQcm9ncmVzcywgc3RhdHVzOiB0cnVlfV0pO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9idWlsZENoYXJ0RnJvbURhdGFGaWxlKHRoaXMuZmlsZSwgc2VsZWN0ZWRUaW1lLnN0YXJ0VGltZSwgc2VsZWN0ZWRUaW1lLmVuZFRpbWUsIHRoaXMucG9ydCk7XHJcbiAgICAgIH1cclxuICAgIH0pLmNhdGNoKGUgPT4ge1xyXG4gICAgICB0aGlzLl9zaG93TWVzc2FnZShBbGVydC5lcnJvciwgZSk7XHJcbiAgICAgIHRoaXMuX3RvZ2dsZUl0ZW1zKFt7aWQ6IEh0bWxFbGVtZW50LnJlYWRGaWxlUHJvZ3Jlc3MsIHN0YXR1czogZmFsc2V9XSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGxvYWQgYWxsIHBvcnRzIGZyb20gZmlsZVxyXG4gICAqL1xyXG4gIGxvYWRQb3J0cygpOiB2b2lkIHtcclxuICAgIC8vIGRvIGNvbmZpcm1hdGlvbiBhY3Rpb25zXHJcbiAgICBpZiAodGhpcy5maWxlKSB7XHJcbiAgICAgIC8vIGJlZm9yZSBzdGFydCBsb2FkaW5nIHBvcnRzIGZyb20gZmlsZSwgZGlzcGxheSBwcm9ncmVzcyBiYXIgYW5kIGRpc2FibGUgdGhlIHNob3cgY2hhcnQgYnV0dG9uXHJcbiAgICAgIHRoaXMuX3RvZ2dsZUl0ZW1zKFtcclxuICAgICAgICB7aWQ6IEh0bWxFbGVtZW50LnJlYWRGaWxlUHJvZ3Jlc3MsIHN0YXR1czogdHJ1ZX0sXHJcbiAgICAgICAge2lkOiBIdG1sRWxlbWVudC5zaG93Q2hhcnRCdXR0b24sIHN0YXR1czogZmFsc2V9XHJcbiAgICAgIF0pO1xyXG4gICAgICB0aGlzLl9yZWFkUG9ydHNGcm9tRmlsZSh0aGlzLmZpbGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogc2VsZWN0IG5hbWUgc2VydmVyIGhpc3RvcnkgZmlsZSwgY3VycmVudGx5IG9ubHkgc3VwcG9ydHMgMSBmaWxlLlxyXG4gICAqL1xyXG4gIGFzeW5jIGZpbGVTZWxlY3RlZChldmVudDogYW55KSB7XHJcbiAgICBjb25zdCBzZWxlY3RlZEZpbGUgPSBnZXRGaWxlRnJvbUlucHV0KGV2ZW50LnRhcmdldCk7XHJcbiAgICBpZiAoc2VsZWN0ZWRGaWxlKSB7XHJcbiAgICAgIGlmICghaXNTYW1lRmlsZSh0aGlzLmZpbGUsIHNlbGVjdGVkRmlsZSkpIHtcclxuICAgICAgICAvLyBpbml0IHBvcnQgc2VsZWN0b3JcclxuICAgICAgICBhd2FpdCB0aGlzLl9pbml0UG9ydFNlbGVjdG9yKCkuY2F0Y2goZSA9PiB0aGlzLl9zaG93TWVzc2FnZShBbGVydC5lcnJvciwgZSkpO1xyXG5cclxuICAgICAgICB0aGlzLmZpbGUgPSBzZWxlY3RlZEZpbGU7XHJcbiAgICAgICAgdGhpcy5hYmJyZXZpYXRlZEZpbGVOYW1lID0gZ2V0QWJicmV2aWF0ZWRGaWxlTmFtZSh0aGlzLmZpbGUubmFtZSk7XHJcbiAgICAgICAgLy8gYWZ0ZXIgZmlsZSBoYXMgYmVlbiBzZWxlY3RlZCwgdGhlIHNob3cgY2hhcnQgYnV0dG9uIG5lZWRzIHRvIGJlIGVuYWJsZWRcclxuICAgICAgICB0aGlzLl90b2dnbGVJdGVtcyhbe2lkOiBIdG1sRWxlbWVudC5zaG93Q2hhcnRCdXR0b24sIHN0YXR1czogdHJ1ZX1dKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogZHJvcCBuYW1lIHNlcnZlciBoaXN0b3J5IGZpbGUsIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIDEgZmlsZS5cclxuICAgKi9cclxuICBmaWxlRHJvcHBlZChldmVudDogYW55KSB7XHJcbiAgICBnZXRGaWxlRnJvbURyb3AoZXZlbnQpXHJcbiAgICAgIC50aGVuKGZpbGUgPT4ge1xyXG4gICAgICAgIGlmICghaXNTYW1lRmlsZSh0aGlzLmZpbGUsIGZpbGUpKSB7XHJcbiAgICAgICAgICAvLyBpbml0IHBvcnQgc2VsZWN0b3JcclxuICAgICAgICAgIHRoaXMuZmlsZSA9IGZpbGU7XHJcbiAgICAgICAgICBpZiAodGhpcy5maWxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWJicmV2aWF0ZWRGaWxlTmFtZSA9IGdldEFiYnJldmlhdGVkRmlsZU5hbWUodGhpcy5maWxlLm5hbWUpO1xyXG4gICAgICAgICAgICAvLyBhZnRlciBmaWxlIGhhcyBiZWVuIGRyb3BwZWQsIHRoZSBzaG93IGNoYXJ0IGJ1dHRvbiBuZWVkcyB0byBiZSBlbmFibGVkXHJcbiAgICAgICAgICAgIHRoaXMuX3RvZ2dsZUl0ZW1zKFt7aWQ6IEh0bWxFbGVtZW50LnNob3dDaGFydEJ1dHRvbiwgc3RhdHVzOiB0cnVlfV0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH19KVxyXG4gICAgICAudGhlbigoKSA9PiAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pbml0UG9ydFNlbGVjdG9yKCk7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaChlID0+IHRoaXMuX3Nob3dNZXNzYWdlKEFsZXJ0LmVycm9yLCBlKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZWxlY3Qgb25lIGl0ZW0gZnJvbSBzZWxlY3Rpb24gdGFibGUsIHJlbGF0aXZlIGRhdGFzZXQgd2lsbCBiZSBzaG93biBvciBoaWRkZW5cclxuICAgKi9cclxuICBzZWxlY3RJdGVtKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmIChldmVudCAmJiBldmVudC50YWJsZVJvdykge1xyXG4gICAgICBjb25zdCByb3cgPSBldmVudC50YWJsZVJvdztcclxuICAgICAgdGhpcy5fc2VsZWN0aW9uLnRvZ2dsZShyb3cpO1xyXG4gICAgICB0aGlzLmNoYXJ0U2VydmljZS50b2dnbGVEYXRhSW5DaGFydChyb3cuS1BJLCAhdGhpcy5fc2VsZWN0aW9uLmlzU2VsZWN0ZWQocm93KSlcclxuICAgICAgICAuY2F0Y2goZSA9PiB0aGlzLl9zaG93TWVzc2FnZShBbGVydC5lcnJvciwgZSkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogcmVjYWxjdWxhdGluZyBjaGFydCBoZWlnaHQgd2hlbiByZXNpemluZ1xyXG4gICAqL1xyXG4gIG9uUmVzaXplKCkge1xyXG4gICAgY29uc3QgbmFtZXNlcnZlckhpc3RvcnlBbGxFbGVtZW50ID0gdGhpcy5uYW1lc2VydmVySGlzdG9yeUFsbFJlZiA/IHRoaXMubmFtZXNlcnZlckhpc3RvcnlBbGxSZWYubmF0aXZlRWxlbWVudCA6IG51bGw7XHJcbiAgICBjb25zdCBuYW1lc2VydmVySGlzdG9yeUNvbnRlbnRFbGVtZW50ID0gdGhpcy5uYW1lc2VydmVySGlzdG9yeUNvbnRlbnRSZWYgPyB0aGlzLm5hbWVzZXJ2ZXJIaXN0b3J5Q29udGVudFJlZi5uYXRpdmVFbGVtZW50IDogbnVsbDtcclxuICAgIHNldENoYXJ0SGVpZ2h0KG5hbWVzZXJ2ZXJIaXN0b3J5QWxsRWxlbWVudCwgbmFtZXNlcnZlckhpc3RvcnlDb250ZW50RWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTd2l0Y2ggcG9ydCBhbmQgcmVpbml0aWFsaXplIGNoYXJ0LCB0cmlnZ2VyZWQgYnkgY2hhbmdpbmcgdGhlIHBvcnRcclxuICAgKiBAcGFyYW0gcG9ydCB0aGUgc2VsZWN0ZWQgcG9ydFxyXG4gICAqL1xyXG4gIHN3aXRjaFBvcnRGb3JDaGFydChwb3J0OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmIChwb3J0ID09PSB0aGlzLl9jdXJyZW50Q2hhcnRQb3J0KSB7XHJcbiAgICAgIC8vIG5vdCB0byBzd2l0Y2ggcG9ydCwgYmVjYXVzZSB0aGUgcmVsYXRpdmUgcG9ydCBpcyBkaXNwbGF5aW5nLCBubyBuZWVkIHRvIHJlbmRlciB0d2ljZS5cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmZpbGUgfHwgIXBvcnQgfHwgcG9ydC5sZW5ndGggPT09IDAgfHwgcG9ydC5zbGljZSgxLCAzKSA9PT0gJyoqJykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9IGVsc2UgaWYgKE9iamVjdC5rZXlzKHRoaXMudGltZSkubGVuZ3RoID4gMSAmJiAhZ2V0UmVhbFBvcnRzKE9iamVjdC5rZXlzKHRoaXMudGltZSkuZmlsdGVyKGtleSA9PiB0aGlzLnRpbWVba2V5XSkpLmluY2x1ZGVzKHBvcnQpKSB7XHJcbiAgICAgIHRoaXMuX3Nob3dNZXNzYWdlKEFsZXJ0LmluZm8sIGBEYXRhIG9mIHBvcnQ6JHtwb3J0fSBpcyBub3QgbG9hZGVkLCBwbGVhc2UgbG9hZCB0aGUgZGF0YSBmaXJzdCBieSBjbGlja2luZyB0aGUgXCJTaG93XCIgYnV0dG9uLmApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gb25seSBkbyBzd2l0Y2ggcG9ydHMgd2hlbiBhdmFpbGFibGUgcG9ydHMgbnVtYmVyID4gMVxyXG4gICAgaWYgKE9iamVjdC5rZXlzKHRoaXMudGltZSkuZmlsdGVyKGtleSA9PiB0aGlzLnRpbWVba2V5XSkubGVuZ3RoID4gMSkge1xyXG4gICAgICAvLyBkaXNhYmxlIHRoZSBcInNob3cgY2hhcnRcIiBhbmQgXCJyZXNldCBjaGFydFwiIGJ1dHRvbiBmaXJzdFxyXG4gICAgICB0aGlzLl90b2dnbGVJdGVtcyhbXHJcbiAgICAgICAge2lkOiBIdG1sRWxlbWVudC5zaG93Q2hhcnRCdXR0b24sIHN0YXR1czogZmFsc2V9LFxyXG4gICAgICAgIHtpZDogSHRtbEVsZW1lbnQucmVzZXRDaGFydEJ1dHRvbiwgc3RhdHVzOiBmYWxzZX1dKTtcclxuICAgICAgLy8gaW5pdCB0aGUgZW52aXJvbm1lbnQgd2l0aCBzd2l0Y2ggZmxhZ1xyXG4gICAgICB0aGlzLl9pbml0Q2hhcnRFbnYodHJ1ZSkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2J1aWxkQ2hhcnQocG9ydCwgbnVsbCwgdHJ1ZSk7XHJcbiAgICAgIH0pLmNhdGNoKGUgPT4gdGhpcy5fc2hvd01lc3NhZ2UoQWxlcnQuZXJyb3IsIGUpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGdldCB0aGUgY29sdW1ucyB3aGljaCBuZWVkIHRvIGJlIGhpZGRlbiBmcm9tIHRoZSBzZWxlY3Rpb24gdGFibGVcclxuICAgKi9cclxuICBnZXQgaGlkZGVuQ29sdW1ucygpOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gdGhpcy51aVNlcnZpY2UuZ2V0SGlkZGVuQ29sdW1ucyh0aGlzLmhpZGVNZWFzdXJlQ29sdW1ucyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBnZXQgZGVmYXVsdCB0aW1lem9uZVxyXG4gICAqL1xyXG4gIGdldCBkZWZhdWx0VGltZXpvbmUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBnZXREZWZhdWx0VGltZXpvbmUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGdldCB0aGUga2V5IGNvbHVtbiAoS1BJKVxyXG4gICAqL1xyXG4gIGdldCBrcGlDb2x1bW4oKTogSXRlbSB7XHJcbiAgICByZXR1cm4gSXRlbS5rcGk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBnZXQgdGhlIGtleSBjb2x1bW4gKEtQSSlcclxuICAgKi9cclxuICBnZXQgZGVzY0NvbHVtbigpOiBJdGVtIHtcclxuICAgIHJldHVybiBJdGVtLmRlc2NyaXB0aW9uO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogZ2V0IHRoZSBzZWxlY3RlZCB0aW1lIHJhbmdlLCBzZXQgc2Vjb25kIGFuZCBtaWxsaXNlY29uZCBwYXJ0IHRvIDBcclxuICAgKi9cclxuICBwcml2YXRlIGdldCBfc2VsZWN0ZWRUaW1lUmFuZ2UoKToge3N0YXJ0VGltZTogbnVtYmVyLCBlbmRUaW1lOiBudW1iZXJ9IHtcclxuICAgIGxldCBzdGFydFRpbWUgPSAwO1xyXG4gICAgbGV0IGVuZFRpbWUgPSA0MTAyMzU4NDAwMDAwOyAvLyAyMDk5LzEyLzMxXHJcbiAgICBpZiAodGhpcy5kYXRlVGltZVJhbmdlICE9IG51bGwpIHtcclxuICAgICAgaWYgKHRoaXMuZGF0ZVRpbWVSYW5nZS5sZW5ndGggPj0gMSkge1xyXG4gICAgICAgIC8vIGdldCBzdGFydCB0aW1lXHJcbiAgICAgICAgaWYgKHRoaXMuZGF0ZVRpbWVSYW5nZVswXSkge1xyXG4gICAgICAgICAgc3RhcnRUaW1lID0gdGhpcy5kYXRlVGltZVJhbmdlWzBdLnNldFNlY29uZHMoMCwgMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmRhdGVUaW1lUmFuZ2VbMV0pIHtcclxuICAgICAgICAgIGVuZFRpbWUgPSB0aGlzLmRhdGVUaW1lUmFuZ2VbMV0uc2V0U2Vjb25kcygwLCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7c3RhcnRUaW1lOiBzdGFydFRpbWUsIGVuZFRpbWU6IGVuZFRpbWV9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogZ2V0IHRoZSB0aW1lIHJhbmdlIHN0cmluZywgZWc6IDIwMTgtMTAtMjUgMTA6MjUgfiAyMDE4LTEwLTI2IDEwOjI2XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXQgX3NlbGVjdGVkVGltZVJhbmdlU3RyaW5nKCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBzZWxlY3RlZFRpbWVSYW5nZVN0cmluZyA9IHRoaXMuX3NlbGVjdGVkVGltZVJhbmdlO1xyXG4gICAgcmV0dXJuIGAke2dldFRpbWVTdHJpbmcoc2VsZWN0ZWRUaW1lUmFuZ2VTdHJpbmcuc3RhcnRUaW1lKX0gfiAke2dldFRpbWVTdHJpbmcoc2VsZWN0ZWRUaW1lUmFuZ2VTdHJpbmcuZW5kVGltZSl9YDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGdldCBhcnJheSBvZiBoZWFkZXIga2V5XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXQgX2hlYWRlcktleSgpOiBzdHJpbmdbXSB7XHJcbiAgICBpZiAodGhpcy5oZWFkZXIpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaGVhZGVyLm1hcChoZWFkZXJJdGVtID0+IGhlYWRlckl0ZW0ua2V5KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGdldCBhcnJheSBvZiBoZWFkZXIgdGV4dFxyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0IF9oZWFkZXJUZXh0KCk6IHN0cmluZ1tdIHtcclxuICAgIHJldHVybiB0aGlzLmhlYWRlci5tYXAoaGVhZGVySXRlbSA9PiBoZWFkZXJJdGVtLnRleHQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogcmVhZCBwb3J0cyBmcm9tIHRoZSBzZWxlY3RlZCBuYW1lc2VydmVyIGhpc3RvcnkgZmlsZVxyXG4gICAqIEBwYXJhbSBmaWxlIG5hbWVzZXJ2ZXIgaGlzdG9yeSBmaWxlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfcmVhZFBvcnRzRnJvbUZpbGUoZmlsZTogRmlsZSk6IHZvaWQge1xyXG4gICAgdGhpcy5maWxlU2VydmljZS5nZXRQb3J0c0Zyb21GaWxlKGZpbGUsIChwcm9ncmVzcykgPT4ge1xyXG4gICAgICB0aGlzLnJlYWRQcm9ncmVzcyA9IHByb2dyZXNzO1xyXG4gICAgfSkudGhlbihwb3J0cyA9PiB7XHJcbiAgICAgIHJldHVybiBzbGVlcCgxMDApLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pbml0UG9ydFNlbGVjdG9yKHBvcnRzKTtcclxuICAgICAgfSk7XHJcbiAgICB9KS5jYXRjaChlID0+IHRoaXMuX3Nob3dNZXNzYWdlKEFsZXJ0LmVycm9yLCBlKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBidWlsZCBjaGFydCBmcm9tIHRoZSBzZWxlY3RlZCBuYW1lc2VydmVyIGhpc3RvcnkgZmlsZVxyXG4gICAqIEBwYXJhbSBmaWxlIHRoZSBuYW1lc2VydmVyIGhpc3RvcnkgZmlsZVxyXG4gICAqIEBwYXJhbSBzdGFydFRpbWUgc3RhcnQgdGltZVxyXG4gICAqIEBwYXJhbSBlbmRUaW1lIGVuZCB0aW1lXHJcbiAgICogQHBhcmFtIHNlbGVjdGVkUG9ydCBzZWxlY3RlZCBwb3J0IGZvciBuYW1lc2VydmVyIGhpc3RvcnkgZmlsZSAoTURDIHN5c3RlbSlcclxuICAgKi9cclxuICBwcml2YXRlIF9idWlsZENoYXJ0RnJvbURhdGFGaWxlKGZpbGU6IEZpbGUsIHN0YXJ0VGltZTogbnVtYmVyLCBlbmRUaW1lOiBudW1iZXIsIHNlbGVjdGVkUG9ydDogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmZpbGVTZXJ2aWNlLmdldENoYXJ0Q29udGVudEZyb21GaWxlKFxyXG4gICAgICBmaWxlLFxyXG4gICAgICBzdGFydFRpbWUsXHJcbiAgICAgIGVuZFRpbWUsXHJcbiAgICAgIHNlbGVjdGVkUG9ydCxcclxuICAgICAgdGhpcy50aW1lem9uZSxcclxuICAgICAgdGhpcy5tYXhSb3dzTGltaXRhdGlvbiwgcHJvZ3Jlc3MgPT4gdGhpcy5yZWFkUHJvZ3Jlc3MgPSBwcm9ncmVzcylcclxuICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAvLyBwYXJzaW5nIGRvbmVcclxuICAgICAgICBjb25zdCBiZWdpblRpbWUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gW107XHJcbiAgICAgICAgY29uc3QgcG9ydHMgPSBnZXRSZWFsUG9ydHMoT2JqZWN0LmtleXMocmVzdWx0LnRpbWUpLCB0cnVlKTtcclxuICAgICAgICBwb3J0cy5mb3JFYWNoKHBvcnQgPT4ge1xyXG4gICAgICAgICAgLy8gY29udmVydCB0aGUgdW5pdCBhbmQgZ2VuZXJhdGUgY29udHJvbGxpbmcgZGF0YSBmb3IgYWxsIHBvcnRzXHJcbiAgICAgICAgICBwcm9taXNlcy5wdXNoKHRoaXMudWlTZXJ2aWNlLmNvbnZlcnRVbml0QW5kR2VuZXJhdGVDb250cm9sRGF0YShyZXN1bHQuZGF0YVtwb3J0XSwgcmVzdWx0LmhlYWRlciwgcG9ydCkpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpXHJcbiAgICAgICAgICAudGhlbigoKSA9PiB7XHJcblxyXG4gICAgICAgICAgICAvLyBnZXQgYWxsIHBvcnRzIGZyb20gdGhlIGFuYWx5emVkIGRhdGEodGltZSlcclxuICAgICAgICAgICAgLy8gZ2V0IHRoZSBwb3J0IHRoYXQgd2lsbCBiZSBzaG93biBpbiB0aGUgcGFnZVxyXG4gICAgICAgICAgICBjb25zdCBwb3J0ID0gZ2V0RGlzcGxheVBvcnQocG9ydHMsIHNlbGVjdGVkUG9ydCk7XHJcblxyXG4gICAgICAgICAgICBwcmludFByb2Nlc3NlZFRpbWUoYmVnaW5UaW1lLCAnY29udmVydGluZyBzdGVwJyk7XHJcbiAgICAgICAgICAgIHBvcnRzLmZvckVhY2goIHBvcnRJdGVtID0+IHRoaXMudWlTZXJ2aWNlLmdlbmVyYXRlWVNjYWxlKHBvcnRJdGVtKSk7XHJcbiAgICAgICAgICAgIHByaW50UHJvY2Vzc2VkVGltZShiZWdpblRpbWUsICdnZW5lcmF0aW5nIFlTY2FsZSBzdGVwJyk7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHJlc3VsdC5kYXRhO1xyXG4gICAgICAgICAgICB0aGlzLnRpbWUgPSByZXN1bHQudGltZTtcclxuICAgICAgICAgICAgdGhpcy5oZWFkZXIgPSB0aGlzLnVpU2VydmljZS5nZXRIZWFkZXIocmVzdWx0LmhlYWRlciwgcG9ydCk7XHJcbiAgICAgICAgICAgIHRoaXMuaG9zdCA9IHJlc3VsdC5ob3N0O1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0LmFib3J0ZWQgPT09IEFib3J0Lm1heExpbmVOdW1SZWFjaGVkKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fc2hvd01lc3NhZ2UoXHJcbiAgICAgICAgICAgICAgICBBbGVydC53YXJuaW5nLCBgTWF4aW11bSBudW1iZXIgb2YgbGluZXMgcmVhY2hlZC4gUHJvY2Vzc2VkIHRpbWUgcmFuZ2UgaXM6ICR7Z2V0VGltZVJhbmdlU3RyaW5nKHRoaXMudGltZSl9LmApO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGlmIChpc0VtcHR5RGF0YSh0aGlzLmRhdGEpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG93TWVzc2FnZShBbGVydC5pbmZvLCBgQ2Fubm90IGZpbmQgYW55IGRhdGEgZm9yIHRoZSBzZWxlY3RlZCB0aW1lIHBlcmlvZDogJHt0aGlzLl9zZWxlY3RlZFRpbWVSYW5nZVN0cmluZ31gKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvd01lc3NhZ2UoQWxlcnQuc3VjY2VzcywgYFByb2Nlc3NlZCB0aW1lIHJhbmdlIGlzOiAke2dldFRpbWVSYW5nZVN0cmluZyh0aGlzLnRpbWUpfS5gKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHNsZWVwKDEwMCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J1aWxkQ2hhcnQocG9ydCwgcG9ydHMpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIHJlaW5pdGlhbGl6ZSB0aGUgcG9ydCBzZWxlY3RvciB3aXRoIHRoZSBwb3J0c1xyXG4gICAqL1xyXG4gIHByaXZhdGUgX2luaXRQb3J0U2VsZWN0b3IocG9ydHM6IHN0cmluZ1tdID0gbnVsbCwgc2VsZWN0ZWRQb3J0OiBzdHJpbmcgPSBudWxsKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgIC8vIGluaXRpYWxpemF0aW9uIGZvciBuZ3gtc2VsZWN0XHJcbiAgICAgIGlmIChwb3J0cyAhPSBudWxsICYmIHBvcnRzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAvLyBNREMsIHJlbW92ZSBkZWZhdWx0ICcwMDAwJyBwb3J0XHJcbiAgICAgICAgdGhpcy5wb3J0cyA9IGdlbmVyYXRlUG9ydHMoZ2V0UmVhbFBvcnRzKHBvcnRzKSwgc2VsZWN0ZWRQb3J0KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnBvcnRzID0gZ2VuZXJhdGVQb3J0cyhwb3J0cyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChwb3J0cyAhPSBudWxsICYmIHNlbGVjdGVkUG9ydCA9PT0gbnVsbCkge1xyXG4gICAgICAgIC8vIHJlc2V0IHN0YXR1cyB3aGVuIGRvaW5nOlxyXG4gICAgICAgIC8vIDEuIGxvYWRpbmcgcG9ydHNcclxuICAgICAgICAvLyAyLiB0aGUgZmlsZSBkb2Vzbid0IGNvbnRhaW4gdGhlIHNlbGVjdGVkIFBvcnRcclxuICAgICAgICB0aGlzLnJlYWRQcm9ncmVzcyA9IDA7XHJcbiAgICAgICAgLy8gaGlkZSB0aGUgcHJvZ3Jlc3MgYmFyIGFuZCBlbmFibGUgdGhlIFwic2hvdyBjaGFydFwiIGJ1dHRvblxyXG4gICAgICAgIHRoaXMuX3RvZ2dsZUl0ZW1zKFtcclxuICAgICAgICAgIHtpZDogSHRtbEVsZW1lbnQucmVhZEZpbGVQcm9ncmVzcywgc3RhdHVzOiBmYWxzZX0sXHJcbiAgICAgICAgICB7aWQ6IEh0bWxFbGVtZW50LnNob3dDaGFydEJ1dHRvbiwgc3RhdHVzOiB0cnVlfVxyXG4gICAgICAgIF0pO1xyXG4gICAgICB9XHJcbiAgICAgIHJlc29sdmUoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogYnVpbGQgYW5kIGRpc3BsYXkgdGhlIGNoYXJ0IG9uIHBhZ2VcclxuICAgKiBAcGFyYW0gcG9ydCB0aGUgc2VsZWN0ZWQgcG9ydFxyXG4gICAqIEBwYXJhbSBwb3J0cyBhbGwgYXZhaWxhYmxlIHBvcnRzXHJcbiAgICogQHBhcmFtIHN3aXRjaEZsYWcgaW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBmdW5jdGlvbiBpcyB0cmlnZ2VyZWQgZnJvbSBzd2l0Y2hpbmcgcG9ydHMgKG5vIGluaXQgcG9ydCBzZWxlY3RvciBuZWVkZWQpXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfYnVpbGRDaGFydChwb3J0OiBzdHJpbmcsIHBvcnRzOiBzdHJpbmdbXSwgc3dpdGNoRmxhZyA9IGZhbHNlKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIGNvbnN0IGJlZ2luVGltZSA9IG5ldyBEYXRlKCk7XHJcbiAgICBpZiAocG9ydCkge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2xvYWRTZXR0aW5nc0ZvclNlbGVjdGlvbnNUYWJsZShwb3J0KSlcclxuICAgICAgICAudGhlbiggKCkgPT4ge1xyXG4gICAgICAgICAgLy8gZ2V0IHRoZSBjb25maWdcclxuICAgICAgICAgIHJldHVybiB0aGlzLmNoYXJ0U2VydmljZS5idWlsZENoYXJ0KFxyXG4gICAgICAgICAgICB0aGlzLnRpbWVbcG9ydF0sXHJcbiAgICAgICAgICAgIHRoaXMuZGF0YVtwb3J0XSxcclxuICAgICAgICAgICAgdGhpcy51aVNlcnZpY2UuZ2V0WVNjYWxlKHRoaXMuX2hlYWRlcktleSwgcG9ydCksXHJcbiAgICAgICAgICAgIHRoaXMuX2hlYWRlclRleHQsXHJcbiAgICAgICAgICAgIHRoaXMuX2hlYWRlcktleSxcclxuICAgICAgICAgICAgdGhpcy5fc2VsZWN0aW9uLFxyXG4gICAgICAgICAgICB0aGlzLnRhYmxlU291cmNlLFxyXG4gICAgICAgICAgICB0aGlzLl9nZXRIb3N0VGl0bGUocG9ydCksXHJcbiAgICAgICAgICAgIHRoaXMudWlTZXJ2aWNlLmdldERpc3BsYXlJdGVtcyh0aGlzLl9oZWFkZXJLZXksIHBvcnQsIHRoaXMuZGVmYXVsdFNlbGVjdGVkSXRlbXMpLFxyXG4gICAgICAgICAgICB0aGlzLl9vblpvb20uYmluZCh0aGlzKSlcclxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMucmVhZFByb2dyZXNzID0gMDtcclxuICAgICAgICAgICAgICAvLyBhZnRlciBjaGFydCBoYXMgYmVlbiBjcmVhdGVkLCBzaG93IHRoZSBjaGFydCBhcmVhLCBoaWRlIHByb2dyZXNzIGJhciBhbmQgZW5hYmxlIHRoZSBcInNob3cgY2hhcnRcIiBidXR0b25cclxuICAgICAgICAgICAgICB0aGlzLl90b2dnbGVJdGVtcyhbXHJcbiAgICAgICAgICAgICAgICB7aWQ6IEh0bWxFbGVtZW50LmNoYXJ0QXJlYSwgc3RhdHVzOiB0cnVlfSxcclxuICAgICAgICAgICAgICAgIHtpZDogSHRtbEVsZW1lbnQucmVhZEZpbGVQcm9ncmVzcywgc3RhdHVzOiBmYWxzZX0sXHJcbiAgICAgICAgICAgICAgICB7aWQ6IEh0bWxFbGVtZW50LnNob3dDaGFydEJ1dHRvbiwgc3RhdHVzOiB0cnVlfVxyXG4gICAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICAgIC8vIHNldCBwb3J0IHRvIGN1cnJlbnQgZGlzcGxheWluZyBwb3J0XHJcbiAgICAgICAgICAgICAgdGhpcy5fY3VycmVudENoYXJ0UG9ydCA9IHBvcnQ7XHJcbiAgICAgICAgICAgICAgcHJpbnRQcm9jZXNzZWRUaW1lKGJlZ2luVGltZSwgJ3N0ZXBfYnVpbGRfY2hhcnQnKTtcclxuICAgICAgICAgICAgICBpZiAocG9ydHMgJiYgcG9ydHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFzd2l0Y2hGbGFnKSB7XHJcbiAgICAgICAgICAgICAgICAgIC8vIGluaXRpYWxpemUgcG9ydCBzZWxlY3Rvci4gRG8gbm90IG5lZWQgdG8gZG8gaXQgd2hlbiBzd2l0Y2hpbmcgcG9ydC5cclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2luaXRQb3J0U2VsZWN0b3IocG9ydHMsIHBvcnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAocG9ydHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMuX3Nob3dNZXNzYWdlKFxyXG4gICAgICAgICAgQWxlcnQud2FybmluZyxcclxuICAgICAgICAgICdUaGUgc2VsZWN0ZWQgcG9ydCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbmFtZSBzZXJ2ZXIgaGlzdG9yeSBmaWxlLiBQbGVhc2UgY2hvb3NlIGEgY29ycmVjdCBwb3J0IGFuZCBoYXZlIGEgdHJ5IGFnYWluLicpO1xyXG4gICAgICAgIGlmICghc3dpdGNoRmxhZykge1xyXG4gICAgICAgICAgLy8gaW5pdGlhbGl6ZSBwb3J0IHNlbGVjdG9yLiBEbyBub3QgbmVlZCB0byBkbyBpdCB3aGVuIHN3aXRjaGluZyBwb3J0LlxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2luaXRQb3J0U2VsZWN0b3IocG9ydHMsIHBvcnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogZ2V0IHRoZSBzdHJpbmcgdGhhdCB3aWxsIGJlIGRpc3BsYXllZCBvbiB0aGUgdGl0bGUgYXJlYSBvZiB0aGUgY2hhcnRcclxuICAgKiBlZzogaG9zdDEgLSAzMDA0MCAoMjAxOC0wOS0wNSAxNTozMjozMiB+IDIwMTgtMDktMDcgMTU6MzI6MTUpXHJcbiAgICogQHBhcmFtIHBvcnQgc2VsZWN0ZWQgcG9ydFxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2dldEhvc3RUaXRsZShwb3J0OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMuaG9zdCkge1xyXG4gICAgICByZXR1cm4gIGAke3RoaXMuaG9zdH0gLSAke3BvcnR9ICggJHtnZXRUaW1lUmFuZ2VTdHJpbmcodGhpcy50aW1lW3BvcnRdKX0gKWA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBhZnRlciB6b29tLCBlbmFibGUgdGhlIHJlc2V0IGJ1dHRvbi5cclxuICAgKi9cclxuICBwcml2YXRlIF9vblpvb20oKTogdm9pZCB7XHJcbiAgICB0aGlzLl90b2dnbGVJdGVtcyhbe2lkOiBIdG1sRWxlbWVudC5yZXNldENoYXJ0QnV0dG9uLCBzdGF0dXM6IHRydWV9XSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBpbml0aWFsaXplIGNoYXJ0LCBpbmNsdWRpbmc6IGRlc3Ryb3kgY3VycmVudCBjaGFydCwgaW5pdGlhbGl6ZSBjb25maWcsIGluaXRpYWxpemUgYWxsIHJlbGF0aXZlIGRhdGFcclxuICAgKi9cclxuICBwcml2YXRlIF9pbml0Q2hhcnRFbnYoc3dpdGNoRmxhZzogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmNoYXJ0U2VydmljZS5kZXN0cm95Q2hhcnQoKS50aGVuKCgpID0+IHtcclxuICAgICAge1xyXG4gICAgICAgIC8vIGNsZWFudXAgb3RoZXIgZGF0YVxyXG4gICAgICAgIHRoaXMuX3RvZ2dsZUl0ZW1zKFt7aWQ6IEh0bWxFbGVtZW50LmNoYXJ0QXJlYSwgc3RhdHVzOiBmYWxzZX1dKTtcclxuXHJcbiAgICAgICAgaWYgKCFzd2l0Y2hGbGFnKSB7XHJcbiAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLnRpbWUpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMudGltZVtrZXldKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy50aW1lW2tleV0ubGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgfX0pO1xyXG4gICAgICAgICAgdGhpcy50aW1lID0ge307XHJcbiAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmRhdGEpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YVtrZXldKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5kYXRhW2tleV0ubGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgfX0pO1xyXG4gICAgICAgICAgdGhpcy5kYXRhID0ge307XHJcbiAgICAgICAgICB0aGlzLmhlYWRlci5sZW5ndGggPSAwO1xyXG4gICAgICAgICAgdGhpcy5ob3N0ID0gJ25hbWVzZXJ2ZXIgaGlzdG9yeSBmaWxlJztcclxuICAgICAgICAgIHRoaXMudGFibGVTb3VyY2UgPSB2b2lkIDA7XHJcbiAgICAgICAgICB0aGlzLnJlYWRQcm9ncmVzcyA9IDA7XHJcbiAgICAgICAgICB0aGlzLnVpU2VydmljZS5jbGVhckxvYWRIaXN0b3J5SW5mb3MoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTG9hZCBzZXR0aW5ncyBmb3IgdGhlIHNlbGVjdGlvbiB0YWJsZSAodGhlIHJpZ2h0IHBhcnQgb2YgdGhlIGNoYXJ0KVxyXG4gICAqIEBwYXJhbSBwb3J0IHRoZSBzZWxlY3RlZCBwb3J0XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfbG9hZFNldHRpbmdzRm9yU2VsZWN0aW9uc1RhYmxlKHBvcnQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy50YWJsZVNvdXJjZSA9IHRoaXMudWlTZXJ2aWNlLmdldFNlbGVjdGlvblRhYmxlUm93cyh0aGlzLl9oZWFkZXJLZXksIHBvcnQsIHRoaXMuZGVmYXVsdFNlbGVjdGVkSXRlbXMpO1xyXG4gICAgdGhpcy5fc2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbk1vZGVsKHRydWUsIFtdKTtcclxuICAgIHRoaXMudGFibGVTb3VyY2UuZm9yRWFjaChyb3cgPT4ge1xyXG4gICAgICBpZiAodGhpcy51aVNlcnZpY2UuZ2V0RGlzcGxheUl0ZW1zKHRoaXMuX2hlYWRlcktleSwgcG9ydCwgdGhpcy5kZWZhdWx0U2VsZWN0ZWRJdGVtcykuaW5jbHVkZXMocm93LktQSSkpIHtcclxuICAgICAgICB0aGlzLl9zZWxlY3Rpb24uc2VsZWN0KHJvdyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2hvdyBtZXNzYWdlc1xyXG4gICAqIEBwYXJhbSB0eXBlIHR5cGUgb2YgdGhlIG1lc3NhZ2VcclxuICAgKiBAcGFyYW0gbWVzc2FnZSBtZXNzYWdlIHRleHRcclxuICAgKi9cclxuICBwcml2YXRlIF9zaG93TWVzc2FnZSh0eXBlOiBBbGVydCwgbWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAodHlwZSkge1xyXG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgICBjYXNlIEFsZXJ0LnN1Y2Nlc3M6XHJcbiAgICAgICAgY2FzZSBBbGVydC5pbmZvOlxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBBbGVydC53YXJuaW5nOlxyXG4gICAgICAgICAgY29uc29sZS53YXJuKG1lc3NhZ2UpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBBbGVydC5lcnJvcjpcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLmFsZXJ0TWVzc2FnZSA9PT0gbWVzc2FnZSkge1xyXG4gICAgICAvLyB0cnkgdHJpZ2dlciB0aGUgY2hhbmdlIGV2ZW50IG9mIHRoZSBhbGVydC5cclxuICAgICAgdGhpcy5hbGVydE1lc3NhZ2UgPSB2b2lkIDA7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5hbGVydE1lc3NhZ2UgPSBtZXNzYWdlLCAxMDApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5hbGVydE1lc3NhZ2UgPSBtZXNzYWdlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hbGVydFR5cGUgPSB0eXBlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogdG9nZ2xlIGl0ZW1zIHdpdGggdGhlIHByb3ZpZGVkIHN0YXR1cyAoc2hvdyBvciBoaWRlIHRoZSByZWxhdGl2ZSBlbGVtZW50IG9uIHRoZSBwYWdlKVxyXG4gICAqIEBwYXJhbSBpdGVtcyBpdGVtcyB3aXRoIHRoZSByZWxhdGl2ZSBpZCBhbmQgc3RhdHVzLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgX3RvZ2dsZUl0ZW1zKGl0ZW1zOiB7aWQ6IEh0bWxFbGVtZW50LCBzdGF0dXM6IGJvb2xlYW59W10pIHtcclxuICAgIGNvbnN0IGdldFZhcmlhYmxlTmFtZUJ5VHlwZUlkID0gKGlkOiBIdG1sRWxlbWVudCkgPT4ge1xyXG4gICAgICBzd2l0Y2ggKGlkKSB7XHJcbiAgICAgICAgY2FzZSBIdG1sRWxlbWVudC5jaGFydEFyZWE6IHJldHVybiAnc2hvd0NoYXJ0RmxhZyc7XHJcbiAgICAgICAgY2FzZSBIdG1sRWxlbWVudC5yZWFkRmlsZVByb2dyZXNzOiByZXR1cm4gJ3Nob3dSZWFkRmlsZVByb2dyZXNzJztcclxuICAgICAgICBjYXNlIEh0bWxFbGVtZW50LnNob3dDaGFydEJ1dHRvbjogcmV0dXJuICdlbmFibGVTaG93Q2hhcnRCdXR0b24nO1xyXG4gICAgICAgIGNhc2UgSHRtbEVsZW1lbnQubG9hZFBvcnRzQnV0dG9uOiByZXR1cm4gJ2VuYWJsZUxvYWRQb3J0c0J1dHRvbic7XHJcbiAgICAgICAgY2FzZSBIdG1sRWxlbWVudC5yZXNldENoYXJ0QnV0dG9uOiByZXR1cm4gJ2VuYWJsZVJlc2V0Q2hhcnRCdXR0b24nO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gICAgaWYgKGl0ZW1zKSB7XHJcbiAgICAgIGl0ZW1zLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgdGhpc1tnZXRWYXJpYWJsZU5hbWVCeVR5cGVJZChpdGVtLmlkKV0gPSBpdGVtLnN0YXR1cztcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgI25hbWVzZXJ2ZXJIaXN0b3J5QWxsIGNsYXNzPVwibmFtZXNlcnZlci1oaXN0b3J5LWFsbFwiICh3aW5kb3c6cmVzaXplKT1cIm9uUmVzaXplKClcIj5cclxuICA8ZGl2IGNsYXNzPVwidG9vbGJhci1jaGFydFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInVwbG9hZC1ib3gtY29udGVudFwiPlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiIXNob3dSZWFkRmlsZVByb2dyZXNzXCI+XHJcbiAgICAgICAgPGZpbGUtZHJvcC1pbnB1dCAoZmlsZURyb3ApPVwiZmlsZURyb3BwZWQoJGV2ZW50KVwiIChmaWxlSW5wdXQpPVwiZmlsZVNlbGVjdGVkKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW2Ryb3BBcmVhVGV4dF09IFwiYWJicmV2aWF0ZWRGaWxlTmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbaW5wdXRBcmVhVGV4dF09XCInQnJvd3NlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiZmlsZT8ubmFtZT8gZmlsZS5uYW1lOidTZWxlY3QgYSBuYW1lIHNlcnZlciBoaXN0b3J5IGZpbGUgZnJvbSB5b3VyIGxvY2FsIGRpc2suJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFmaWxlQnVmZmVyXCI+XHJcbiAgICAgICAgPC9maWxlLWRyb3AtaW5wdXQ+XHJcbiAgICAgICAgPHAgKm5nSWY9XCJmaWxlQnVmZmVyXCI+e3tzdHJlYW1Nb2RlRmlsZU5hbWUgfHwgJ25hbWVzZXJ2ZXJfaGlzdG9yeS50cmMgKHN0cmVhbSBtb2RlKSd9fTwvcD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJzaG93UmVhZEZpbGVQcm9ncmVzc1wiPlxyXG4gICAgICAgIDxwcm9ncmVzcy1iYXIgW3Byb2dyZXNzXT1cInJlYWRQcm9ncmVzc1wiPjwvcHJvZ3Jlc3MtYmFyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImlucHV0LXRpbWVcIj5cclxuICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtdGltZS1yYW5nZVwiPlxyXG4gICAgICAgPHRpbWUtcmFuZ2Utc2VsZWN0b3IgW2Rpc2FibGVkXT1cInNob3dSZWFkRmlsZVByb2dyZXNzXCIgWyhkYXRlVGltZVJhbmdlKV09XCJkYXRlVGltZVJhbmdlXCI+PC90aW1lLXJhbmdlLXNlbGVjdG9yPlxyXG4gICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGltZXpvbmUtc2VsZWN0b3JcIj5cclxuICAgICAgICA8dGltZXpvbmUtc2VsZWN0b3IgWyh0aW1lem9uZSldPVwidGltZXpvbmVcIiBbZGlzYWJsZWRdPVwic2hvd1JlYWRGaWxlUHJvZ3Jlc3NcIj48L3RpbWV6b25lLXNlbGVjdG9yPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJwb3J0LXNlbGVjdGlvblwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicG9ydC1zZWxlY3RvclwiPlxyXG4gICAgICAgIDxwb3J0LXNlbGVjdG9yIChwb3J0Q2hhbmdlKT1cInN3aXRjaFBvcnRGb3JDaGFydCgkZXZlbnQpXCIgWyhwb3J0KV09XCJwb3J0XCIgW3BvcnRzXT1cInBvcnRzXCIgW2Rpc2FibGVkXT1cInNob3dSZWFkRmlsZVByb2dyZXNzXCI+PC9wb3J0LXNlbGVjdG9yPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInBvcnQtbG9hZC1idXR0b25cIj5cclxuICAgICAgICA8YnV0dG9uIChjbGljayk9XCJsb2FkUG9ydHMoKVwiIHRpdGxlPVwiTG9hZCBhbGwgcG9ydHMgZnJvbSBuYW1lIHNlcnZlciBoaXN0b3J5IHRyYWNlIGZpbGUuXCIgW2Rpc2FibGVkXT1cIiFlbmFibGVTaG93Q2hhcnRCdXR0b24gfHwgcG9ydCB8fCAhZW5hYmxlTG9hZFBvcnRzQnV0dG9uXCI+e3tzaG93UmVhZEZpbGVQcm9ncmVzcz8gXCJMb2FkaW5nLi4uXCIgOiBcIkxvYWRcIn19PC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImNoYXJ0LW9wZXJhdGlvblwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibGVmdFwiPlxyXG4gICAgICAgIDxidXR0b24gKGNsaWNrKT1cInNob3dDaGFydCgpXCIgdGl0bGU9XCJMb2FkIGFuZCBkaXNwbGF5IGFsbCBkYXRhIGZyb20gbmFtZSBzZXJ2ZXIgaGlzdG9yeSB0cmFjZSBmaWxlLlwiIFtkaXNhYmxlZF09XCIhZW5hYmxlU2hvd0NoYXJ0QnV0dG9uXCI+e3tzaG93UmVhZEZpbGVQcm9ncmVzcz8gXCJMb2FkaW5nLi4uXCIgOiBcIlNob3dcIn19PC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cclxuICAgICAgICA8YnV0dG9uIChjbGljayk9XCJyZXNldENoYXJ0KClcIiB0aXRsZT1cIlJlc2V0IHpvb20gb2YgY2hhcnQuXCIgW2Rpc2FibGVkXT1cInNob3dSZWFkRmlsZVByb2dyZXNzIHx8ICFlbmFibGVSZXNldENoYXJ0QnV0dG9uXCI+UmVzZXQgQ2hhcnQ8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8ZGl2ICNuYW1lc2VydmVySGlzdG9yeUNvbnRlbnQgY2xhc3M9XCJuYW1lc2VydmVyLWhpc3RvcnktY29udGVudFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm5hbWVzZXJ2ZXItaGlzdG9yeS1jb250ZW50LWNoYXJ0XCI+XHJcbiAgICAgIDxpbnN0cnVjdGlvbiBbKHNob3cpXT1cInNob3dJbnN0cnVjdGlvblwiICpuZ0lmPVwiIXNob3dDaGFydEZsYWcgJiYgc2hvd0luc3RydWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgIFtzdGVwMUZpbmlzaGVkXT1cIiEhZmlsZVwiXHJcbiAgICAgICAgICAgICAgICAgICBbc3RlcDJGaW5pc2hlZF09XCJkYXRlVGltZVJhbmdlICYmICghIWRhdGVUaW1lUmFuZ2VbMF0gfHwgISFkYXRlVGltZVJhbmdlWzFdKSB8fCB0aW1lem9uZSAhPSBkZWZhdWx0VGltZXpvbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgW3N0ZXAzRmluaXNoZWRdPVwiISFwb3J0XCJcclxuICAgICAgICAgICAgICAgICAgIFtzdGVwNEZpbmlzaGVkXT1cInN0ZXBTaG93Q2hhcnQgJiYgIWVuYWJsZVNob3dDaGFydEJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICBbc3RlcDVGaW5pc2hlZF09XCJmYWxzZVwiPlxyXG4gICAgICA8L2luc3RydWN0aW9uPlxyXG4gICAgICA8Y2FudmFzIGlkPVwiY2hhcnROYW1lU2VydmVySGlzdG9yeVwiID48L2NhbnZhcz5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cIm5hbWVzZXJ2ZXItaGlzdG9yeS1jb250ZW50LWNvbnRyb2xsZXJcIiA+XHJcbiAgICAgIDxuZ3gtc2VsZWN0aW9uLXRhYmxlIChjaGFuZ2UpPVwic2VsZWN0SXRlbSgkZXZlbnQpXCIgKm5nSWY9XCJzaG93Q2hhcnRGbGFnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpbHRlcl09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrYm94XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbdGFibGVTb3VyY2VdPVwidGFibGVTb3VyY2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBba2V5Q29sdW1uXT1cImtwaUNvbHVtblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoaWRkZW5Db2x1bW5zXT1cImhpZGRlbkNvbHVtbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcENvbHVtbl09XCJkZXNjQ29sdW1uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaFN0eWxlXT1cInNlYXJjaFR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VhcmNoQ29sdW1uXT1cImtwaUNvbHVtblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFttdWx0aVNlbGVjdGlvbl09XCJ0cnVlXCI+XHJcbiAgICAgIDwvbmd4LXNlbGVjdGlvbi10YWJsZT5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuPGRpdiBjbGFzcz1cIm1lc3NhZ2UtY29udGFpbmVyXCIgKm5nSWY9XCJhbGVydE1lc3NhZ2VcIj5cclxuICA8YWxlcnQgWyhhbGVydE1lc3NhZ2UpXT1cImFsZXJ0TWVzc2FnZVwiIFthbGVydFR5cGVdPVwiYWxlcnRUeXBlXCIgW2FsZXJ0VGltZW91dF09XCIzMDAwMFwiPjwvYWxlcnQ+XHJcbjwvZGl2PlxyXG4iXX0=
553
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFtZXNlcnZlci1oaXN0b3J5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9uYW1lc2VydmVyLWhpc3Rvcnktdmlld2VyL2NvbXBvbmVudHMvbmFtZXNlcnZlci1oaXN0b3J5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9uYW1lc2VydmVyLWhpc3Rvcnktdmlld2VyL2NvbXBvbmVudHMvbmFtZXNlcnZlci1oaXN0b3J5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBb0MsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3hHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQ0wsY0FBYyxFQUNkLEtBQUssRUFDTCxXQUFXLEVBQ1gsY0FBYyxFQUNkLGdCQUFnQixFQUNoQixVQUFVLEVBQ1Ysc0JBQXNCLEVBQ3RCLGVBQWUsRUFDZixZQUFZLEVBQ1osYUFBYSxFQUNiLGtCQUFrQixFQUNsQixrQkFBa0IsRUFDbEIsYUFBYSxFQUNiLGtCQUFrQixFQUNsQixVQUFVLEVBQ1gsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBZ0UsTUFBTSxVQUFVLENBQUM7QUFDekgsT0FBTyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRW5FLE9BQU8sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sNkJBQTZCLENBQUM7QUFDckMsT0FBTyx1QkFBdUIsQ0FBQzs7Ozs7Ozs7Ozs7O0FBRS9CLElBQUssVUFJSjtBQUpELFdBQUssVUFBVTtJQUNiLHlEQUEyQyxDQUFBO0lBQzNDLHFDQUF1QixDQUFBO0lBQ3ZCLG1EQUFxQyxDQUFBO0FBQ3ZDLENB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QkFBbEIsS0FBSztnQkFLRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBS0csV0FBVztzQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcclxuaW1wb3J0IHtcclxuICBzZXRDaGFydEhlaWdodCxcclxuICBzbGVlcCxcclxuICBpc0VtcHR5RGF0YSxcclxuICBnZXREaXNwbGF5UG9ydCxcclxuICBnZXRGaWxlRnJvbUlucHV0LFxyXG4gIGlzU2FtZUZpbGUsXHJcbiAgZ2V0QWJicmV2aWF0ZWRGaWxlTmFtZSxcclxuICBnZXRGaWxlRnJvbURyb3AsXHJcbiAgZ2V0UmVhbFBvcnRzLFxyXG4gIGdldFRpbWVTdHJpbmcsXHJcbiAgcHJpbnRQcm9jZXNzZWRUaW1lLFxyXG4gIGdldFRpbWVSYW5nZVN0cmluZyxcclxuICBnZW5lcmF0ZVBvcnRzLFxyXG4gIGdldERlZmF1bHRUaW1lem9uZSxcclxuICBibG9iVG9GaWxlXHJcbn0gZnJvbSAnLi4vdXRpbHMnO1xyXG5pbXBvcnQgeyBBYm9ydCwgQWxlcnQsIEh0bWxFbGVtZW50LCBJdGVtLCBDaGFydENvbnRlbnREYXRhLCBDaGFydENvbnRlbnRIZWFkZXIsIENoYXJ0Q29udGVudFRpbWUsIFBvcnQgfSBmcm9tICcuLi90eXBlcyc7XHJcbmltcG9ydCB7IEZpbGVTZXJ2aWNlLCBDaGFydFNlcnZpY2UsIFVJU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzJztcclxuXHJcbmltcG9ydCAnaGFtbWVyanMnO1xyXG5pbXBvcnQgJy4uL3V0aWxzL2NoYXJ0anMtZG93bnNhbXBsZSc7XHJcbmltcG9ydCAnLi4vdXRpbHMvY2hhcnRqcy16b29tJztcclxuXHJcbmVudW0gU2VhcmNoVHlwZSB7XHJcbiAgc2VhcmNoV2l0aFN1YkhlYWRlciA9ICdzZWFyY2hXaXRoU3ViSGVhZGVyJyxcclxuICBzZWFyY2hBbGwgPSAnc2VhcmNoQWxsJyxcclxuICBzZWFyY2hJbkNoaWxkcmVuID0gJ3NlYXJjaEluQ2hpbGRyZW4nXHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbmd4LWhhbmEtbmFtZXNlcnZlci1oaXN0b3J5LXZpZXdlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL25hbWVzZXJ2ZXItaGlzdG9yeS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbICcuL25hbWVzZXJ2ZXItaGlzdG9yeS5jb21wb25lbnQuc2NzcycgXSxcclxuICBwcm92aWRlcnM6IFsgRmlsZVNlcnZpY2UsIENoYXJ0U2VydmljZSwgVUlTZXJ2aWNlIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIE5hbWVTZXJ2ZXJIaXN0b3J5Q29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkluaXQge1xyXG4gIEBWaWV3Q2hpbGQoJ25hbWVzZXJ2ZXJIaXN0b3J5QWxsJywgeyByZWFkOiBFbGVtZW50UmVmIH0pIG5hbWVzZXJ2ZXJIaXN0b3J5QWxsUmVmOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ25hbWVzZXJ2ZXJIaXN0b3J5Q29udGVudCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBuYW1lc2VydmVySGlzdG9yeUNvbnRlbnRSZWY6IEVsZW1lbnRSZWY7XHJcblxyXG4gIC8qKlxyXG4gICAqIElucHV0IChvcHRpb25hbCkgYmluZCB0byBbZGVmYXVsdFNlbGVjdGVkSXRlbXNdXHJcbiAgICovXHJcbiAgQElucHV0KCkgZGVmYXVsdFNlbGVjdGVkSXRlbXM6IHN0cmluZ1tdO1xyXG5cclxuICAvKipcclxuICAgKiBJbnB1dCAob3B0aW9uYWwpIGJpbmQgdG8gW2hpZGVNZWFzdXJlQ29sdW1uc11cclxuICAgKi9cclxuICBASW5wdXQoKSBoaWRlTWVhc3VyZUNvbHVtbnM6IHN0cmluZ1tdO1xyXG5cclxuICAvKipcclxuICAgKiBJbnB1dCAob3B0aW9uYWwpIGJpbmQgdG8gW21heFJvd3NMaW1pdGF0aW9uXVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIG1heFJvd3NMaW1pdGF0aW9uOiBudW1iZXI7XHJcblxyXG4gIC8qKlxyXG4gICAqIElucHV0IChvcHRpb25hbCkgYmluZCB0byBbc2hvd0luc3RydWN0aW9uXVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHNob3dJbnN0cnVjdGlvbiA9IHRydWU7XHJcblxyXG4gIC8qKlxyXG4gICAqIElucHV0IChvcHRpb25hbCkgYmluZCB0byBbdGltZXpvbmVdXHJcbiAgICovXHJcbiAgQElucHV0KCkgdGltZXpvbmU6IHN0cmluZztcclxuXHJcbiAgLyoqXHJcbiAgICogZmlsZSBidWZmZXIsIHVzZSB0aGlzIGZvciBzdHJlYW0gbW9kZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGZpbGVCdWZmZXI6IEJsb2I7XHJcblxyXG4gIC8qKlxyXG4gICAqIGZpbGUgbmFtZSBmb3Igc3RyZWFtIG1vZGVcclxuICAgKi9cclxuICBASW5wdXQoKSBzdHJlYW1Nb2RlRmlsZU5hbWU6IHN0cmluZztcclxuXHJcbiAgLyoqXHJcbiAgICogYXV0byBkaXNwbGF5IHRoZSBjaGFydCBpbiBzdHJlYW0gbW9kZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGF1dG9EaXNwbGF5OiBib29sZWFuO1xyXG5cclxuICAvKipcclxuICAgKiBzZWxlY3RlZCBuYW1lIHNlcnZlciBoaXN0b3J5IGZpbGVcclxuICAgKi9cclxuICBmaWxlOiBGaWxlO1xyXG5cclxuICAvKipcclxuICAgKiB0aW1lIGluZm8gb2YgdGhlIG5hbWUgc2VydmVyIGhpc3RvcnkgZmlsZVxyXG4gICAqL1xyXG4gIHRpbWU6IENoYXJ0Q29udGVudFRpbWUgPSB7fTtcclxuXHJcbiAgLyoqXHJcbiAgICogZGF0YSBvZiB0aGUgbmFtZSBzZXJ2ZXIgaGlzdG9yeSBmaWxlXHJcbiAgICovXHJcbiAgZGF0YTogQ2hhcnRDb250ZW50RGF0YSA9IHt9O1xyXG5cclxuICAvKipcclxuICAgKiBoZWFkZXIgb2YgdGhlIG5hbWUgc2VydmVyIGhpc3RvcnkgZmlsZVxyXG4gICAqL1xyXG4gIGhlYWRlcjogQ2hhcnRDb250ZW50SGVhZGVyW10gPSBbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogaG9zdCBvZiB0aGUgbmFtZSBzZXJ2ZXIgaGlzdG9yeSBmaWxlXHJcbiAgICovXHJcbiAgaG9zdCA9ICduYW1lc2VydmVyIGhpc3RvcnkgZmlsZSc7XHJcblxyXG4gIC8qKlxyXG4gICAqIGFsZXJ0IG1lc3NhZ2UgY29udGVudFxyXG4gICAqL1xyXG4gIGFsZXJ0TWVzc2FnZTogc3RyaW5nO1xyXG5cclxuICAvKipcclxuICAgKiBhbGVydCBtZXNzYWdlIHR5cGVcclxuICAgKi9cclxuICBhbGVydFR5cGU6IEFsZXJ0O1xyXG5cclxuICAvKipcclxuICAgKiBzZWxlY3RlZCBwb3J0XHJcbiAgICovXHJcbiAgcG9ydDogc3RyaW5nO1xyXG5cclxuICAvKipcclxuICAgKiBhbGwgdGhlIHBvcnRzIGZyb20gdGhlIG5hbWVzZXJ2ZXIgaGlzdG9yeSBmaWxlXHJcbiAgICovXHJcbiAgcG9ydHM6IFBvcnRbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogc2VsZWN0ZWQgdGltZSByYW5nZVxyXG4gICAqL1xyXG4gIGRhdGVUaW1lUmFuZ2U6IERhdGVbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogZGF0YSBzb3VyY2UgZm9yIHRoZSBzZWxlY3Rpb24gdGFibGUgKHJpZ2h0IHBhcnQgb2YgdGhlIGNoYXJ0KVxyXG4gICAqL1xyXG4gIHRhYmxlU291cmNlOiBhbnlbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogdGhlIHByb2dyZXNzIGZvciByZWFkaW5nIGZpbGVcclxuICAgKi9cclxuICByZWFkUHJvZ3Jlc3MgPSAwO1xyXG5cclxuICAvKipcclxuICAgKiBzZWxlY3RlZC9kcm9wcGVkIGZpbGUgbmFtZSAoYWJicmV2aWF0aW9uKSwgZnVsbCBmaWxlIG5hbWUgd2lsbCBiZSBzaG93biB2aWEgdGhlIHRvb2x0aXBzXHJcbiAgICovXHJcbiAgYWJicmV2aWF0ZWRGaWxlTmFtZSA9ICdvciBEcm9wIEZpbGUgSGVyZSc7XHJcblxyXG4gIC8qKlxyXG4gICAqIGZvciB0aGUgaW5zdHJ1Y3Rpb24gc3RlcCA0XHJcbiAgICovXHJcbiAgc3RlcFNob3dDaGFydCA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBjb250cm9sIGZsYWcgZm9yIHNob3dpbmcgdGhlIG5hbWUgc2VydmVyIGhpc3RvcnkgY2hhcnRcclxuICAgKi9cclxuICBzaG93Q2hhcnRGbGFnOiBib29sZWFuO1xyXG5cclxuICAvKipcclxuICAgKiBjb250cm9sIGZsYWcgZm9yIHNob3dpbmcgdGhlIGZpbGUgcmVhZGluZyBwcm9ncmVzc1xyXG4gICAqL1xyXG4gIHNob3dSZWFkRmlsZVByb2dyZXNzOiBib29sZWFuO1xyXG5cclxuICAvKipcclxuICAgKiBjb250cm9sIGZsYWcgZm9yIFwiTG9hZFwiIHBvcnRzIGJ1dHRvblxyXG4gICAqL1xyXG4gIGVuYWJsZUxvYWRQb3J0c0J1dHRvbjogYm9vbGVhbjtcclxuXHJcbiAgLyoqXHJcbiAgICogY29udHJvbCBmbGFnIGZvciBlbmFibGluZyBcIlNob3dcIiBjaGFydCBidXR0b25cclxuICAgKi9cclxuICBlbmFibGVTaG93Q2hhcnRCdXR0b246IGJvb2xlYW47XHJcblxyXG4gIC8qKlxyXG4gICAqIGNvbnRyb2wgZmxhZyBmb3IgXCJSZXNldFwiIGNoYXJ0IGJ1dHRvblxyXG4gICAqL1xyXG4gIGVuYWJsZVJlc2V0Q2hhcnRCdXR0b246IGJvb2xlYW47XHJcblxyXG4gIHNlYXJjaFR5cGUgPSBTZWFyY2hUeXBlLnNlYXJjaEFsbDtcclxuXHJcbiAgLyoqXHJcbiAgICogc2VsZWN0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgc2VsZWN0aW9uIHRhYmxlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfc2VsZWN0aW9uOiBTZWxlY3Rpb25Nb2RlbDxhbnk+O1xyXG5cclxuICAvKipcclxuICAgKiBjdXJyZW50IGRpc3BsYXlpbmcgcG9ydFxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2N1cnJlbnRDaGFydFBvcnQ6IHN0cmluZztcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmaWxlU2VydmljZTogRmlsZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSBjaGFydFNlcnZpY2U6IENoYXJ0U2VydmljZSxcclxuICAgICAgICAgICAgICBwcml2YXRlIHVpU2VydmljZTogVUlTZXJ2aWNlKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIC8vIHRoaXMudGltZXpvbmUgPSB0aGlzLmRlZmF1bHRUaW1lem9uZTtcclxuICAgIHRoaXMub25SZXNpemUoKTtcclxuXHJcbiAgICAvLyBpbml0IGl0ZW1zJyBzdGF0dXNcclxuICAgIC8vIHJlc2V0IGNoYXJ0IGJ1dHRvbiB3aWxsIGJlIGRpc2FibGUgYnkgZGVmYXVsdCBsYXRlciwgb25seSBiZSBlbmFibGVkIGFmdGVyIHpvb21lZFxyXG4gICAgdGhpcy5fdG9nZ2xlSXRlbXMoW1xyXG4gICAgICB7aWQ6IEh0bWxFbGVtZW50LmNoYXJ0QXJlYSwgc3RhdHVzOiBmYWxzZX0sXHJcbiAgICAgIHtpZDogSHRtbEVsZW1lbnQucmVhZEZpbGVQcm9ncmVzcywgc3RhdHVzOiBmYWxzZX0sXHJcbiAgICAgIHtpZDogSHRtbEVsZW1lbnQuc2hvd0NoYXJ0QnV0dG9uLCBzdGF0dXM6IGZhbHNlfSxcclxuICAgICAge2lkOiBIdG1sRWxlbWVudC5sb2FkUG9ydHNCdXR0b24sIHN0YXR1czogdHJ1ZX0sXHJcbiAgICAgIHtpZDogSHRtbEVsZW1lbnQucmVzZXRDaGFydEJ1dHRvbiwgc3RhdHVzOiBmYWxzZX1dKTtcclxuXHJcbiAgfVxyXG5cclxuICBhc3luYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICBjb25zdCBmYmMgPSBjaGFuZ2VzLmZpbGVCdWZmZXI7XHJcbiAgICBpZiAoZmJjICYmIGZiYy5jdXJyZW50VmFsdWUgJiYgZmJjLmN1cnJlbnRWYWx1ZSAhPT0gZmJjLnByZXZpb3VzVmFsdWUpIHtcclxuICAgICAgLy8gc2ltdWxhdGUgc2VsZWN0aW5nIGZpbGVcclxuICAgICAgY29uc3Qgc2ltdWxhdGVkRXZlbnQgPSB7dGFyZ2V0OiB7ZmlsZXM6IFtibG9iVG9GaWxlKHRoaXMuZmlsZUJ1ZmZlciwgdGhpcy5zdHJlYW1Nb2RlRmlsZU5hbWUpXX19O1xyXG4gICAgICBhd2FpdCB0aGlzLmZpbGVTZWxlY3RlZChzaW11bGF0ZWRFdmVudCk7XHJcbiAgICAgIHRoaXMuc2hvd0NoYXJ0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAqIFJlc2V0IENoYXJ0IHRvIGluaXRpYWwgc3RhdHVzXHJcbiAgICogSWYgbGVnZW5kIGlzIGFscmVhZHkgc2VsZWN0ZWQvdW5zZWxlY3RlZCBmcm9tIHRoZSBsaXN0LCBpdCB3b3VsZG4ndCBiZSByZXN0b3JlZC5cclxuICAgKi9cclxuICByZXNldENoYXJ0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fdG9nZ2xlSXRlbXMoW3tpZDogSHRtbEVsZW1lbnQucmVzZXRDaGFydEJ1dHRvbiwgc3RhdHVzOiBmYWxzZX1dKTtcclxuXHJcbiAgICBpZiAodGhpcy50YWJsZVNvdXJjZSAmJiB0aGlzLl9zZWxlY3Rpb24pIHtcclxuICAgICAgdGhpcy5jaGFydFNlcnZpY2UucmVzZXRDaGFydCh0aGlzLnRhYmxlU291cmNlLCB0aGlzLl9zZWxlY3Rpb24pXHJcbiAgICAgICAgLmNhdGNoKGUgPT4gdGhpcy5fc2hvd01lc3NhZ2UoQWxlcnQuZXJyb3IsIGUpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIHJlYWQgdGhlIGZpbGUgYW5kIGRpc3BsYXkgdGhlIGNoYXJ0XHJcbiAgICovXHJcbiAgc2hvd0NoYXJ0KCk6IHZvaWQge1xyXG4gICAgLy8gYWZ0ZXIgY2xpY2ssIHRoaXMgYnV0dG9uIGFuZCByZXNldCBidXR0b24gbmVlZHMgdG8gYmUgZGlzYWJsZWRcclxuICAgIHRoaXMuX3RvZ2dsZUl0ZW1zKFtcclxuICAgICAge2lkOiBIdG1sRWxlbWVudC5yZXNldENoYXJ0QnV0dG9uLCBzdGF0dXM6IGZhbHNlfSxcclxuICAgICAge2lkOiBIdG1sRWxlbWVudC5zaG93Q2hhcnRCdXR0b24sIHN0YXR1czogZmFsc2V9XSk7XHJcblxyXG4gICAgdGhpcy5zdGVwU2hvd0NoYXJ0ID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLl9pbml0Q2hhcnRFbnYoKS50aGVuKCgpID0+IHtcclxuICAgICAgY29uc3Qgc2VsZWN0ZWRUaW1lID0gdGhpcy5fc2VsZWN0ZWRUaW1lUmFuZ2U7XHJcbiAgICAgIGlmIChzZWxlY3RlZFRpbWUuc3RhcnRUaW1lID4gc2VsZWN0ZWRUaW1lLmVuZFRpbWUpIHtcclxuICAgICAgICB0aGlzLl9zaG93TWVzc2FnZShBbGVydC5lcnJvciwgJ1RpbWUgcmFuZ2UgaXMgbm90IGNvcnJlY3QuJyk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmZpbGUpIHtcclxuICAgICAgICAvLyBpdCdzIHRpbWUgZm9yIGRpc3BsYXlpbmcgdGhlIHJlYWRpbmcgcHJvZ3Jlc3MgYmFyXHJcbiAgICAgICAgdGhpcy5fdG9nZ2xlSXRlbXMoW3tpZDogSHRtbEVsZW1lbnQucmVhZEZpbGVQcm9ncmVzcywgc3RhdHVzOiB0cnVlfV0pO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9idWlsZENoYXJ0RnJvbURhdGFGaWxlKHRoaXMuZmlsZSwgc2VsZWN0ZWRUaW1lLnN0YXJ0VGltZSwgc2VsZWN0ZWRUaW1lLmVuZFRpbWUsIHRoaXMucG9ydCk7XHJcbiAgICAgIH1cclxuICAgIH0pLmNhdGNoKGUgPT4ge1xyXG4gICAgICB0aGlzLl9zaG93TWVzc2FnZShBbGVydC5lcnJvciwgZSk7XHJcbiAgICAgIHRoaXMuX3RvZ2dsZUl0ZW1zKFt7aWQ6IEh0bWxFbGVtZW50LnJlYWRGaWxlUHJvZ3Jlc3MsIHN0YXR1czogZmFsc2V9XSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGxvYWQgYWxsIHBvcnRzIGZyb20gZmlsZVxyXG4gICAqL1xyXG4gIGxvYWRQb3J0cygpOiB2b2lkIHtcclxuICAgIC8vIGRvIGNvbmZpcm1hdGlvbiBhY3Rpb25zXHJcbiAgICBpZiAodGhpcy5maWxlKSB7XHJcbiAgICAgIC8vIGJlZm9yZSBzdGFydCBsb2FkaW5nIHBvcnRzIGZyb20gZmlsZSwgZGlzcGxheSBwcm9ncmVzcyBiYXIgYW5kIGRpc2FibGUgdGhlIHNob3cgY2hhcnQgYnV0dG9uXHJcbiAgICAgIHRoaXMuX3RvZ2dsZUl0ZW1zKFtcclxuICAgICAgICB7aWQ6IEh0bWxFbGVtZW50LnJlYWRGaWxlUHJvZ3Jlc3MsIHN0YXR1czogdHJ1ZX0sXHJcbiAgICAgICAge2lkOiBIdG1sRWxlbWVudC5zaG93Q2hhcnRCdXR0b24sIHN0YXR1czogZmFsc2V9XHJcbiAgICAgIF0pO1xyXG4gICAgICB0aGlzLl9yZWFkUG9ydHNGcm9tRmlsZSh0aGlzLmZpbGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogc2VsZWN0IG5hbWUgc2VydmVyIGhpc3RvcnkgZmlsZSwgY3VycmVudGx5IG9ubHkgc3VwcG9ydHMgMSBmaWxlLlxyXG4gICAqL1xyXG4gIGFzeW5jIGZpbGVTZWxlY3RlZChldmVudDogYW55KSB7XHJcbiAgICBjb25zdCBzZWxlY3RlZEZpbGUgPSBnZXRGaWxlRnJvbUlucHV0KGV2ZW50LnRhcmdldCk7XHJcbiAgICBpZiAoc2VsZWN0ZWRGaWxlKSB7XHJcbiAgICAgIGlmICghaXNTYW1lRmlsZSh0aGlzLmZpbGUsIHNlbGVjdGVkRmlsZSkpIHtcclxuICAgICAgICAvLyBpbml0IHBvcnQgc2VsZWN0b3JcclxuICAgICAgICBhd2FpdCB0aGlzLl9pbml0UG9ydFNlbGVjdG9yKCkuY2F0Y2goZSA9PiB0aGlzLl9zaG93TWVzc2FnZShBbGVydC5lcnJvciwgZSkpO1xyXG5cclxuICAgICAgICB0aGlzLmZpbGUgPSBzZWxlY3RlZEZpbGU7XHJcbiAgICAgICAgdGhpcy5hYmJyZXZpYXRlZEZpbGVOYW1lID0gZ2V0QWJicmV2aWF0ZWRGaWxlTmFtZSh0aGlzLmZpbGUubmFtZSk7XHJcbiAgICAgICAgLy8gYWZ0ZXIgZmlsZSBoYXMgYmVlbiBzZWxlY3RlZCwgdGhlIHNob3cgY2hhcnQgYnV0dG9uIG5lZWRzIHRvIGJlIGVuYWJsZWRcclxuICAgICAgICB0aGlzLl90b2dnbGVJdGVtcyhbe2lkOiBIdG1sRWxlbWVudC5zaG93Q2hhcnRCdXR0b24sIHN0YXR1czogdHJ1ZX1dKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogZHJvcCBuYW1lIHNlcnZlciBoaXN0b3J5IGZpbGUsIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIDEgZmlsZS5cclxuICAgKi9cclxuICBmaWxlRHJvcHBlZChldmVudDogYW55KSB7XHJcbiAgICBnZXRGaWxlRnJvbURyb3AoZXZlbnQpXHJcbiAgICAgIC50aGVuKGZpbGUgPT4ge1xyXG4gICAgICAgIGlmICghaXNTYW1lRmlsZSh0aGlzLmZpbGUsIGZpbGUpKSB7XHJcbiAgICAgICAgICAvLyBpbml0IHBvcnQgc2VsZWN0b3JcclxuICAgICAgICAgIHRoaXMuZmlsZSA9IGZpbGU7XHJcbiAgICAgICAgICBpZiAodGhpcy5maWxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWJicmV2aWF0ZWRGaWxlTmFtZSA9IGdldEFiYnJldmlhdGVkRmlsZU5hbWUodGhpcy5maWxlLm5hbWUpO1xyXG4gICAgICAgICAgICAvLyBhZnRlciBmaWxlIGhhcyBiZWVuIGRyb3BwZWQsIHRoZSBzaG93IGNoYXJ0IGJ1dHRvbiBuZWVkcyB0byBiZSBlbmFibGVkXHJcbiAgICAgICAgICAgIHRoaXMuX3RvZ2dsZUl0ZW1zKFt7aWQ6IEh0bWxFbGVtZW50LnNob3dDaGFydEJ1dHRvbiwgc3RhdHVzOiB0cnVlfV0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH19KVxyXG4gICAgICAudGhlbigoKSA9PiAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pbml0UG9ydFNlbGVjdG9yKCk7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaChlID0+IHRoaXMuX3Nob3dNZXNzYWdlKEFsZXJ0LmVycm9yLCBlKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZWxlY3Qgb25lIGl0ZW0gZnJvbSBzZWxlY3Rpb24gdGFibGUsIHJlbGF0aXZlIGRhdGFzZXQgd2lsbCBiZSBzaG93biBvciBoaWRkZW5cclxuICAgKi9cclxuICBzZWxlY3RJdGVtKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmIChldmVudCAmJiBldmVudC50YWJsZVJvdykge1xyXG4gICAgICBjb25zdCByb3cgPSBldmVudC50YWJsZVJvdztcclxuICAgICAgdGhpcy5fc2VsZWN0aW9uLnRvZ2dsZShyb3cpO1xyXG4gICAgICB0aGlzLmNoYXJ0U2VydmljZS50b2dnbGVEYXRhSW5DaGFydChyb3cuS1BJLCAhdGhpcy5fc2VsZWN0aW9uLmlzU2VsZWN0ZWQocm93KSlcclxuICAgICAgICAuY2F0Y2goZSA9PiB0aGlzLl9zaG93TWVzc2FnZShBbGVydC5lcnJvciwgZSkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogcmVjYWxjdWxhdGluZyBjaGFydCBoZWlnaHQgd2hlbiByZXNpemluZ1xyXG4gICAqL1xyXG4gIG9uUmVzaXplKCkge1xyXG4gICAgY29uc3QgbmFtZXNlcnZlckhpc3RvcnlBbGxFbGVtZW50ID0gdGhpcy5uYW1lc2VydmVySGlzdG9yeUFsbFJlZiA/IHRoaXMubmFtZXNlcnZlckhpc3RvcnlBbGxSZWYubmF0aXZlRWxlbWVudCA6IG51bGw7XHJcbiAgICBjb25zdCBuYW1lc2VydmVySGlzdG9yeUNvbnRlbnRFbGVtZW50ID0gdGhpcy5uYW1lc2VydmVySGlzdG9yeUNvbnRlbnRSZWYgPyB0aGlzLm5hbWVzZXJ2ZXJIaXN0b3J5Q29udGVudFJlZi5uYXRpdmVFbGVtZW50IDogbnVsbDtcclxuICAgIHNldENoYXJ0SGVpZ2h0KG5hbWVzZXJ2ZXJIaXN0b3J5QWxsRWxlbWVudCwgbmFtZXNlcnZlckhpc3RvcnlDb250ZW50RWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTd2l0Y2ggcG9ydCBhbmQgcmVpbml0aWFsaXplIGNoYXJ0LCB0cmlnZ2VyZWQgYnkgY2hhbmdpbmcgdGhlIHBvcnRcclxuICAgKiBAcGFyYW0gcG9ydCB0aGUgc2VsZWN0ZWQgcG9ydFxyXG4gICAqL1xyXG4gIHN3aXRjaFBvcnRGb3JDaGFydChwb3J0OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmIChwb3J0ID09PSB0aGlzLl9jdXJyZW50Q2hhcnRQb3J0KSB7XHJcbiAgICAgIC8vIG5vdCB0byBzd2l0Y2ggcG9ydCwgYmVjYXVzZSB0aGUgcmVsYXRpdmUgcG9ydCBpcyBkaXNwbGF5aW5nLCBubyBuZWVkIHRvIHJlbmRlciB0d2ljZS5cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmZpbGUgfHwgIXBvcnQgfHwgcG9ydC5sZW5ndGggPT09IDAgfHwgcG9ydC5zbGljZSgxLCAzKSA9PT0gJyoqJykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9IGVsc2UgaWYgKE9iamVjdC5rZXlzKHRoaXMudGltZSkubGVuZ3RoID4gMSAmJiAhZ2V0UmVhbFBvcnRzKE9iamVjdC5rZXlzKHRoaXMudGltZSkuZmlsdGVyKGtleSA9PiB0aGlzLnRpbWVba2V5XSkpLmluY2x1ZGVzKHBvcnQpKSB7XHJcbiAgICAgIHRoaXMuX3Nob3dNZXNzYWdlKEFsZXJ0LmluZm8sIGBEYXRhIG9mIHBvcnQ6JHtwb3J0fSBpcyBub3QgbG9hZGVkLCBwbGVhc2UgbG9hZCB0aGUgZGF0YSBmaXJzdCBieSBjbGlja2luZyB0aGUgXCJTaG93XCIgYnV0dG9uLmApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gb25seSBkbyBzd2l0Y2ggcG9ydHMgd2hlbiBhdmFpbGFibGUgcG9ydHMgbnVtYmVyID4gMVxyXG4gICAgaWYgKE9iamVjdC5rZXlzKHRoaXMudGltZSkuZmlsdGVyKGtleSA9PiB0aGlzLnRpbWVba2V5XSkubGVuZ3RoID4gMSkge1xyXG4gICAgICAvLyBkaXNhYmxlIHRoZSBcInNob3cgY2hhcnRcIiBhbmQgXCJyZXNldCBjaGFydFwiIGJ1dHRvbiBmaXJzdFxyXG4gICAgICB0aGlzLl90b2dnbGVJdGVtcyhbXHJcbiAgICAgICAge2lkOiBIdG1sRWxlbWVudC5zaG93Q2hhcnRCdXR0b24sIHN0YXR1czogZmFsc2V9LFxyXG4gICAgICAgIHtpZDogSHRtbEVsZW1lbnQucmVzZXRDaGFydEJ1dHRvbiwgc3RhdHVzOiBmYWxzZX1dKTtcclxuICAgICAgLy8gaW5pdCB0aGUgZW52aXJvbm1lbnQgd2l0aCBzd2l0Y2ggZmxhZ1xyXG4gICAgICB0aGlzLl9pbml0Q2hhcnRFbnYodHJ1ZSkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2J1aWxkQ2hhcnQocG9ydCwgbnVsbCwgdHJ1ZSk7XHJcbiAgICAgIH0pLmNhdGNoKGUgPT4gdGhpcy5fc2hvd01lc3NhZ2UoQWxlcnQuZXJyb3IsIGUpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGdldCB0aGUgY29sdW1ucyB3aGljaCBuZWVkIHRvIGJlIGhpZGRlbiBmcm9tIHRoZSBzZWxlY3Rpb24gdGFibGVcclxuICAgKi9cclxuICBnZXQgaGlkZGVuQ29sdW1ucygpOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gdGhpcy51aVNlcnZpY2UuZ2V0SGlkZGVuQ29sdW1ucyh0aGlzLmhpZGVNZWFzdXJlQ29sdW1ucyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBnZXQgZGVmYXVsdCB0aW1lem9uZVxyXG4gICAqL1xyXG4gIGdldCBkZWZhdWx0VGltZXpvbmUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBnZXREZWZhdWx0VGltZXpvbmUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGdldCB0aGUga2V5IGNvbHVtbiAoS1BJKVxyXG4gICAqL1xyXG4gIGdldCBrcGlDb2x1bW4oKTogSXRlbSB7XHJcbiAgICByZXR1cm4gSXRlbS5rcGk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBnZXQgdGhlIGtleSBjb2x1bW4gKEtQSSlcclxuICAgKi9cclxuICBnZXQgZGVzY0NvbHVtbigpOiBJdGVtIHtcclxuICAgIHJldHVybiBJdGVtLmRlc2NyaXB0aW9uO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogZ2V0IHRoZSBzZWxlY3RlZCB0aW1lIHJhbmdlLCBzZXQgc2Vjb25kIGFuZCBtaWxsaXNlY29uZCBwYXJ0IHRvIDBcclxuICAgKi9cclxuICBwcml2YXRlIGdldCBfc2VsZWN0ZWRUaW1lUmFuZ2UoKToge3N0YXJ0VGltZTogbnVtYmVyLCBlbmRUaW1lOiBudW1iZXJ9IHtcclxuICAgIGxldCBzdGFydFRpbWUgPSAwO1xyXG4gICAgbGV0IGVuZFRpbWUgPSA0MTAyMzU4NDAwMDAwOyAvLyAyMDk5LzEyLzMxXHJcbiAgICBpZiAodGhpcy5kYXRlVGltZVJhbmdlICE9IG51bGwpIHtcclxuICAgICAgaWYgKHRoaXMuZGF0ZVRpbWVSYW5nZS5sZW5ndGggPj0gMSkge1xyXG4gICAgICAgIC8vIGdldCBzdGFydCB0aW1lXHJcbiAgICAgICAgaWYgKHRoaXMuZGF0ZVRpbWVSYW5nZVswXSkge1xyXG4gICAgICAgICAgc3RhcnRUaW1lID0gdGhpcy5kYXRlVGltZVJhbmdlWzBdLnNldFNlY29uZHMoMCwgMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmRhdGVUaW1lUmFuZ2VbMV0pIHtcclxuICAgICAgICAgIGVuZFRpbWUgPSB0aGlzLmRhdGVUaW1lUmFuZ2VbMV0uc2V0U2Vjb25kcygwLCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7c3RhcnRUaW1lOiBzdGFydFRpbWUsIGVuZFRpbWU6IGVuZFRpbWV9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogZ2V0IHRoZSB0aW1lIHJhbmdlIHN0cmluZywgZWc6IDIwMTgtMTAtMjUgMTA6MjUgfiAyMDE4LTEwLTI2IDEwOjI2XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXQgX3NlbGVjdGVkVGltZVJhbmdlU3RyaW5nKCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBzZWxlY3RlZFRpbWVSYW5nZVN0cmluZyA9IHRoaXMuX3NlbGVjdGVkVGltZVJhbmdlO1xyXG4gICAgcmV0dXJuIGAke2dldFRpbWVTdHJpbmcoc2VsZWN0ZWRUaW1lUmFuZ2VTdHJpbmcuc3RhcnRUaW1lKX0gfiAke2dldFRpbWVTdHJpbmcoc2VsZWN0ZWRUaW1lUmFuZ2VTdHJpbmcuZW5kVGltZSl9YDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGdldCBhcnJheSBvZiBoZWFkZXIga2V5XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXQgX2hlYWRlcktleSgpOiBzdHJpbmdbXSB7XHJcbiAgICBpZiAodGhpcy5oZWFkZXIpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaGVhZGVyLm1hcChoZWFkZXJJdGVtID0+IGhlYWRlckl0ZW0ua2V5KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGdldCBhcnJheSBvZiBoZWFkZXIgdGV4dFxyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0IF9oZWFkZXJUZXh0KCk6IHN0cmluZ1tdIHtcclxuICAgIHJldHVybiB0aGlzLmhlYWRlci5tYXAoaGVhZGVySXRlbSA9PiBoZWFkZXJJdGVtLnRleHQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogcmVhZCBwb3J0cyBmcm9tIHRoZSBzZWxlY3RlZCBuYW1lc2VydmVyIGhpc3RvcnkgZmlsZVxyXG4gICAqIEBwYXJhbSBmaWxlIG5hbWVzZXJ2ZXIgaGlzdG9yeSBmaWxlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfcmVhZFBvcnRzRnJvbUZpbGUoZmlsZTogRmlsZSk6IHZvaWQge1xyXG4gICAgdGhpcy5maWxlU2VydmljZS5nZXRQb3J0c0Zyb21GaWxlKGZpbGUsIChwcm9ncmVzcykgPT4ge1xyXG4gICAgICB0aGlzLnJlYWRQcm9ncmVzcyA9IHByb2dyZXNzO1xyXG4gICAgfSkudGhlbihwb3J0cyA9PiB7XHJcbiAgICAgIHJldHVybiBzbGVlcCgxMDApLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pbml0UG9ydFNlbGVjdG9yKHBvcnRzKTtcclxuICAgICAgfSk7XHJcbiAgICB9KS5jYXRjaChlID0+IHRoaXMuX3Nob3dNZXNzYWdlKEFsZXJ0LmVycm9yLCBlKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBidWlsZCBjaGFydCBmcm9tIHRoZSBzZWxlY3RlZCBuYW1lc2VydmVyIGhpc3RvcnkgZmlsZVxyXG4gICAqIEBwYXJhbSBmaWxlIHRoZSBuYW1lc2VydmVyIGhpc3RvcnkgZmlsZVxyXG4gICAqIEBwYXJhbSBzdGFydFRpbWUgc3RhcnQgdGltZVxyXG4gICAqIEBwYXJhbSBlbmRUaW1lIGVuZCB0aW1lXHJcbiAgICogQHBhcmFtIHNlbGVjdGVkUG9ydCBzZWxlY3RlZCBwb3J0IGZvciBuYW1lc2VydmVyIGhpc3RvcnkgZmlsZSAoTURDIHN5c3RlbSlcclxuICAgKi9cclxuICBwcml2YXRlIF9idWlsZENoYXJ0RnJvbURhdGFGaWxlKGZpbGU6IEZpbGUsIHN0YXJ0VGltZTogbnVtYmVyLCBlbmRUaW1lOiBudW1iZXIsIHNlbGVjdGVkUG9ydDogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmZpbGVTZXJ2aWNlLmdldENoYXJ0Q29udGVudEZyb21GaWxlKFxyXG4gICAgICBmaWxlLFxyXG4gICAgICBzdGFydFRpbWUsXHJcbiAgICAgIGVuZFRpbWUsXHJcbiAgICAgIHNlbGVjdGVkUG9ydCxcclxuICAgICAgdGhpcy50aW1lem9uZSxcclxuICAgICAgdGhpcy5tYXhSb3dzTGltaXRhdGlvbiwgcHJvZ3Jlc3MgPT4gdGhpcy5yZWFkUHJvZ3Jlc3MgPSBwcm9ncmVzcylcclxuICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAvLyBwYXJzaW5nIGRvbmVcclxuICAgICAgICBjb25zdCBiZWdpblRpbWUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gW107XHJcbiAgICAgICAgY29uc3QgcG9ydHMgPSBnZXRSZWFsUG9ydHMoT2JqZWN0LmtleXMocmVzdWx0LnRpbWUpLCB0cnVlKTtcclxuICAgICAgICBwb3J0cy5mb3JFYWNoKHBvcnQgPT4ge1xyXG4gICAgICAgICAgLy8gY29udmVydCB0aGUgdW5pdCBhbmQgZ2VuZXJhdGUgY29udHJvbGxpbmcgZGF0YSBmb3IgYWxsIHBvcnRzXHJcbiAgICAgICAgICBwcm9taXNlcy5wdXNoKHRoaXMudWlTZXJ2aWNlLmNvbnZlcnRVbml0QW5kR2VuZXJhdGVDb250cm9sRGF0YShyZXN1bHQuZGF0YVtwb3J0XSwgcmVzdWx0LmhlYWRlciwgcG9ydCkpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpXHJcbiAgICAgICAgICAudGhlbigoKSA9PiB7XHJcblxyXG4gICAgICAgICAgICAvLyBnZXQgYWxsIHBvcnRzIGZyb20gdGhlIGFuYWx5emVkIGRhdGEodGltZSlcclxuICAgICAgICAgICAgLy8gZ2V0IHRoZSBwb3J0IHRoYXQgd2lsbCBiZSBzaG93biBpbiB0aGUgcGFnZVxyXG4gICAgICAgICAgICBjb25zdCBwb3J0ID0gZ2V0RGlzcGxheVBvcnQocG9ydHMsIHNlbGVjdGVkUG9ydCk7XHJcblxyXG4gICAgICAgICAgICBwcmludFByb2Nlc3NlZFRpbWUoYmVnaW5UaW1lLCAnY29udmVydGluZyBzdGVwJyk7XHJcbiAgICAgICAgICAgIHBvcnRzLmZvckVhY2goIHBvcnRJdGVtID0+IHRoaXMudWlTZXJ2aWNlLmdlbmVyYXRlWVNjYWxlKHBvcnRJdGVtKSk7XHJcbiAgICAgICAgICAgIHByaW50UHJvY2Vzc2VkVGltZShiZWdpblRpbWUsICdnZW5lcmF0aW5nIFlTY2FsZSBzdGVwJyk7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHJlc3VsdC5kYXRhO1xyXG4gICAgICAgICAgICB0aGlzLnRpbWUgPSByZXN1bHQudGltZTtcclxuICAgICAgICAgICAgdGhpcy5oZWFkZXIgPSB0aGlzLnVpU2VydmljZS5nZXRIZWFkZXIocmVzdWx0LmhlYWRlciwgcG9ydCk7XHJcbiAgICAgICAgICAgIHRoaXMuaG9zdCA9IHJlc3VsdC5ob3N0O1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0LmFib3J0ZWQgPT09IEFib3J0Lm1heExpbmVOdW1SZWFjaGVkKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fc2hvd01lc3NhZ2UoXHJcbiAgICAgICAgICAgICAgICBBbGVydC53YXJuaW5nLCBgTWF4aW11bSBudW1iZXIgb2YgbGluZXMgcmVhY2hlZC4gUHJvY2Vzc2VkIHRpbWUgcmFuZ2UgaXM6ICR7Z2V0VGltZVJhbmdlU3RyaW5nKHRoaXMudGltZSl9LmApO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGlmIChpc0VtcHR5RGF0YSh0aGlzLmRhdGEpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG93TWVzc2FnZShBbGVydC5pbmZvLCBgQ2Fubm90IGZpbmQgYW55IGRhdGEgZm9yIHRoZSBzZWxlY3RlZCB0aW1lIHBlcmlvZDogJHt0aGlzLl9zZWxlY3RlZFRpbWVSYW5nZVN0cmluZ31gKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvd01lc3NhZ2UoQWxlcnQuc3VjY2VzcywgYFByb2Nlc3NlZCB0aW1lIHJhbmdlIGlzOiAke2dldFRpbWVSYW5nZVN0cmluZyh0aGlzLnRpbWUpfS5gKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHNsZWVwKDEwMCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J1aWxkQ2hhcnQocG9ydCwgcG9ydHMpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIHJlaW5pdGlhbGl6ZSB0aGUgcG9ydCBzZWxlY3RvciB3aXRoIHRoZSBwb3J0c1xyXG4gICAqL1xyXG4gIHByaXZhdGUgX2luaXRQb3J0U2VsZWN0b3IocG9ydHM6IHN0cmluZ1tdID0gbnVsbCwgc2VsZWN0ZWRQb3J0OiBzdHJpbmcgPSBudWxsKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgIC8vIGluaXRpYWxpemF0aW9uIGZvciBuZ3gtc2VsZWN0XHJcbiAgICAgIGlmIChwb3J0cyAhPSBudWxsICYmIHBvcnRzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAvLyBNREMsIHJlbW92ZSBkZWZhdWx0ICcwMDAwJyBwb3J0XHJcbiAgICAgICAgdGhpcy5wb3J0cyA9IGdlbmVyYXRlUG9ydHMoZ2V0UmVhbFBvcnRzKHBvcnRzKSwgc2VsZWN0ZWRQb3J0KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnBvcnRzID0gZ2VuZXJhdGVQb3J0cyhwb3J0cyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChwb3J0cyAhPSBudWxsICYmIHNlbGVjdGVkUG9ydCA9PT0gbnVsbCkge1xyXG4gICAgICAgIC8vIHJlc2V0IHN0YXR1cyB3aGVuIGRvaW5nOlxyXG4gICAgICAgIC8vIDEuIGxvYWRpbmcgcG9ydHNcclxuICAgICAgICAvLyAyLiB0aGUgZmlsZSBkb2Vzbid0IGNvbnRhaW4gdGhlIHNlbGVjdGVkIFBvcnRcclxuICAgICAgICB0aGlzLnJlYWRQcm9ncmVzcyA9IDA7XHJcbiAgICAgICAgLy8gaGlkZSB0aGUgcHJvZ3Jlc3MgYmFyIGFuZCBlbmFibGUgdGhlIFwic2hvdyBjaGFydFwiIGJ1dHRvblxyXG4gICAgICAgIHRoaXMuX3RvZ2dsZUl0ZW1zKFtcclxuICAgICAgICAgIHtpZDogSHRtbEVsZW1lbnQucmVhZEZpbGVQcm9ncmVzcywgc3RhdHVzOiBmYWxzZX0sXHJcbiAgICAgICAgICB7aWQ6IEh0bWxFbGVtZW50LnNob3dDaGFydEJ1dHRvbiwgc3RhdHVzOiB0cnVlfVxyXG4gICAgICAgIF0pO1xyXG4gICAgICB9XHJcbiAgICAgIHJlc29sdmUoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogYnVpbGQgYW5kIGRpc3BsYXkgdGhlIGNoYXJ0IG9uIHBhZ2VcclxuICAgKiBAcGFyYW0gcG9ydCB0aGUgc2VsZWN0ZWQgcG9ydFxyXG4gICAqIEBwYXJhbSBwb3J0cyBhbGwgYXZhaWxhYmxlIHBvcnRzXHJcbiAgICogQHBhcmFtIHN3aXRjaEZsYWcgaW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBmdW5jdGlvbiBpcyB0cmlnZ2VyZWQgZnJvbSBzd2l0Y2hpbmcgcG9ydHMgKG5vIGluaXQgcG9ydCBzZWxlY3RvciBuZWVkZWQpXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfYnVpbGRDaGFydChwb3J0OiBzdHJpbmcsIHBvcnRzOiBzdHJpbmdbXSwgc3dpdGNoRmxhZyA9IGZhbHNlKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIGNvbnN0IGJlZ2luVGltZSA9IG5ldyBEYXRlKCk7XHJcbiAgICBpZiAocG9ydCkge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2xvYWRTZXR0aW5nc0ZvclNlbGVjdGlvbnNUYWJsZShwb3J0KSlcclxuICAgICAgICAudGhlbiggKCkgPT4ge1xyXG4gICAgICAgICAgLy8gZ2V0IHRoZSBjb25maWdcclxuICAgICAgICAgIHJldHVybiB0aGlzLmNoYXJ0U2VydmljZS5idWlsZENoYXJ0KFxyXG4gICAgICAgICAgICB0aGlzLnRpbWVbcG9ydF0sXHJcbiAgICAgICAgICAgIHRoaXMuZGF0YVtwb3J0XSxcclxuICAgICAgICAgICAgdGhpcy51aVNlcnZpY2UuZ2V0WVNjYWxlKHRoaXMuX2hlYWRlcktleSwgcG9ydCksXHJcbiAgICAgICAgICAgIHRoaXMuX2hlYWRlclRleHQsXHJcbiAgICAgICAgICAgIHRoaXMuX2hlYWRlcktleSxcclxuICAgICAgICAgICAgdGhpcy5fc2VsZWN0aW9uLFxyXG4gICAgICAgICAgICB0aGlzLnRhYmxlU291cmNlLFxyXG4gICAgICAgICAgICB0aGlzLl9nZXRIb3N0VGl0bGUocG9ydCksXHJcbiAgICAgICAgICAgIHRoaXMudWlTZXJ2aWNlLmdldERpc3BsYXlJdGVtcyh0aGlzLl9oZWFkZXJLZXksIHBvcnQsIHRoaXMuZGVmYXVsdFNlbGVjdGVkSXRlbXMpLFxyXG4gICAgICAgICAgICB0aGlzLl9vblpvb20uYmluZCh0aGlzKSlcclxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMucmVhZFByb2dyZXNzID0gMDtcclxuICAgICAgICAgICAgICAvLyBhZnRlciBjaGFydCBoYXMgYmVlbiBjcmVhdGVkLCBzaG93IHRoZSBjaGFydCBhcmVhLCBoaWRlIHByb2dyZXNzIGJhciBhbmQgZW5hYmxlIHRoZSBcInNob3cgY2hhcnRcIiBidXR0b25cclxuICAgICAgICAgICAgICB0aGlzLl90b2dnbGVJdGVtcyhbXHJcbiAgICAgICAgICAgICAgICB7aWQ6IEh0bWxFbGVtZW50LmNoYXJ0QXJlYSwgc3RhdHVzOiB0cnVlfSxcclxuICAgICAgICAgICAgICAgIHtpZDogSHRtbEVsZW1lbnQucmVhZEZpbGVQcm9ncmVzcywgc3RhdHVzOiBmYWxzZX0sXHJcbiAgICAgICAgICAgICAgICB7aWQ6IEh0bWxFbGVtZW50LnNob3dDaGFydEJ1dHRvbiwgc3RhdHVzOiB0cnVlfVxyXG4gICAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICAgIC8vIHNldCBwb3J0IHRvIGN1cnJlbnQgZGlzcGxheWluZyBwb3J0XHJcbiAgICAgICAgICAgICAgdGhpcy5fY3VycmVudENoYXJ0UG9ydCA9IHBvcnQ7XHJcbiAgICAgICAgICAgICAgcHJpbnRQcm9jZXNzZWRUaW1lKGJlZ2luVGltZSwgJ3N0ZXBfYnVpbGRfY2hhcnQnKTtcclxuICAgICAgICAgICAgICBpZiAocG9ydHMgJiYgcG9ydHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFzd2l0Y2hGbGFnKSB7XHJcbiAgICAgICAgICAgICAgICAgIC8vIGluaXRpYWxpemUgcG9ydCBzZWxlY3Rvci4gRG8gbm90IG5lZWQgdG8gZG8gaXQgd2hlbiBzd2l0Y2hpbmcgcG9ydC5cclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2luaXRQb3J0U2VsZWN0b3IocG9ydHMsIHBvcnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAocG9ydHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMuX3Nob3dNZXNzYWdlKFxyXG4gICAgICAgICAgQWxlcnQud2FybmluZyxcclxuICAgICAgICAgICdUaGUgc2VsZWN0ZWQgcG9ydCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbmFtZSBzZXJ2ZXIgaGlzdG9yeSBmaWxlLiBQbGVhc2UgY2hvb3NlIGEgY29ycmVjdCBwb3J0IGFuZCBoYXZlIGEgdHJ5IGFnYWluLicpO1xyXG4gICAgICAgIGlmICghc3dpdGNoRmxhZykge1xyXG4gICAgICAgICAgLy8gaW5pdGlhbGl6ZSBwb3J0IHNlbGVjdG9yLiBEbyBub3QgbmVlZCB0byBkbyBpdCB3aGVuIHN3aXRjaGluZyBwb3J0LlxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2luaXRQb3J0U2VsZWN0b3IocG9ydHMsIHBvcnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogZ2V0IHRoZSBzdHJpbmcgdGhhdCB3aWxsIGJlIGRpc3BsYXllZCBvbiB0aGUgdGl0bGUgYXJlYSBvZiB0aGUgY2hhcnRcclxuICAgKiBlZzogaG9zdDEgLSAzMDA0MCAoMjAxOC0wOS0wNSAxNTozMjozMiB+IDIwMTgtMDktMDcgMTU6MzI6MTUpXHJcbiAgICogQHBhcmFtIHBvcnQgc2VsZWN0ZWQgcG9ydFxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2dldEhvc3RUaXRsZShwb3J0OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMuaG9zdCkge1xyXG4gICAgICByZXR1cm4gIGAke3RoaXMuaG9zdH0gLSAke3BvcnR9ICggJHtnZXRUaW1lUmFuZ2VTdHJpbmcodGhpcy50aW1lW3BvcnRdKX0gKWA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBhZnRlciB6b29tLCBlbmFibGUgdGhlIHJlc2V0IGJ1dHRvbi5cclxuICAgKi9cclxuICBwcml2YXRlIF9vblpvb20oKTogdm9pZCB7XHJcbiAgICB0aGlzLl90b2dnbGVJdGVtcyhbe2lkOiBIdG1sRWxlbWVudC5yZXNldENoYXJ0QnV0dG9uLCBzdGF0dXM6IHRydWV9XSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBpbml0aWFsaXplIGNoYXJ0LCBpbmNsdWRpbmc6IGRlc3Ryb3kgY3VycmVudCBjaGFydCwgaW5pdGlhbGl6ZSBjb25maWcsIGluaXRpYWxpemUgYWxsIHJlbGF0aXZlIGRhdGFcclxuICAgKi9cclxuICBwcml2YXRlIF9pbml0Q2hhcnRFbnYoc3dpdGNoRmxhZzogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmNoYXJ0U2VydmljZS5kZXN0cm95Q2hhcnQoKS50aGVuKCgpID0+IHtcclxuICAgICAge1xyXG4gICAgICAgIC8vIGNsZWFudXAgb3RoZXIgZGF0YVxyXG4gICAgICAgIHRoaXMuX3RvZ2dsZUl0ZW1zKFt7aWQ6IEh0bWxFbGVtZW50LmNoYXJ0QXJlYSwgc3RhdHVzOiBmYWxzZX1dKTtcclxuXHJcbiAgICAgICAgaWYgKCFzd2l0Y2hGbGFnKSB7XHJcbiAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLnRpbWUpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMudGltZVtrZXldKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy50aW1lW2tleV0ubGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgfX0pO1xyXG4gICAgICAgICAgdGhpcy50aW1lID0ge307XHJcbiAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmRhdGEpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YVtrZXldKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5kYXRhW2tleV0ubGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgfX0pO1xyXG4gICAgICAgICAgdGhpcy5kYXRhID0ge307XHJcbiAgICAgICAgICB0aGlzLmhlYWRlci5sZW5ndGggPSAwO1xyXG4gICAgICAgICAgdGhpcy5ob3N0ID0gJ25hbWVzZXJ2ZXIgaGlzdG9yeSBmaWxlJztcclxuICAgICAgICAgIHRoaXMudGFibGVTb3VyY2UgPSB2b2lkIDA7XHJcbiAgICAgICAgICB0aGlzLnJlYWRQcm9ncmVzcyA9IDA7XHJcbiAgICAgICAgICB0aGlzLnVpU2VydmljZS5jbGVhckxvYWRIaXN0b3J5SW5mb3MoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTG9hZCBzZXR0aW5ncyBmb3IgdGhlIHNlbGVjdGlvbiB0YWJsZSAodGhlIHJpZ2h0IHBhcnQgb2YgdGhlIGNoYXJ0KVxyXG4gICAqIEBwYXJhbSBwb3J0IHRoZSBzZWxlY3RlZCBwb3J0XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfbG9hZFNldHRpbmdzRm9yU2VsZWN0aW9uc1RhYmxlKHBvcnQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy50YWJsZVNvdXJjZSA9IHRoaXMudWlTZXJ2aWNlLmdldFNlbGVjdGlvblRhYmxlUm93cyh0aGlzLl9oZWFkZXJLZXksIHBvcnQsIHRoaXMuZGVmYXVsdFNlbGVjdGVkSXRlbXMpO1xyXG4gICAgdGhpcy5fc2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbk1vZGVsKHRydWUsIFtdKTtcclxuICAgIHRoaXMudGFibGVTb3VyY2UuZm9yRWFjaChyb3cgPT4ge1xyXG4gICAgICBpZiAodGhpcy51aVNlcnZpY2UuZ2V0RGlzcGxheUl0ZW1zKHRoaXMuX2hlYWRlcktleSwgcG9ydCwgdGhpcy5kZWZhdWx0U2VsZWN0ZWRJdGVtcykuaW5jbHVkZXMocm93LktQSSkpIHtcclxuICAgICAgICB0aGlzLl9zZWxlY3Rpb24uc2VsZWN0KHJvdyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2hvdyBtZXNzYWdlc1xyXG4gICAqIEBwYXJhbSB0eXBlIHR5cGUgb2YgdGhlIG1lc3NhZ2VcclxuICAgKiBAcGFyYW0gbWVzc2FnZSBtZXNzYWdlIHRleHRcclxuICAgKi9cclxuICBwcml2YXRlIF9zaG93TWVzc2FnZSh0eXBlOiBBbGVydCwgbWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAodHlwZSkge1xyXG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgICBjYXNlIEFsZXJ0LnN1Y2Nlc3M6XHJcbiAgICAgICAgY2FzZSBBbGVydC5pbmZvOlxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBBbGVydC53YXJuaW5nOlxyXG4gICAgICAgICAgY29uc29sZS53YXJuKG1lc3NhZ2UpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBBbGVydC5lcnJvcjpcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLmFsZXJ0TWVzc2FnZSA9PT0gbWVzc2FnZSkge1xyXG4gICAgICAvLyB0cnkgdHJpZ2dlciB0aGUgY2hhbmdlIGV2ZW50IG9mIHRoZSBhbGVydC5cclxuICAgICAgdGhpcy5hbGVydE1lc3NhZ2UgPSB2b2lkIDA7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5hbGVydE1lc3NhZ2UgPSBtZXNzYWdlLCAxMDApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5hbGVydE1lc3NhZ2UgPSBtZXNzYWdlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hbGVydFR5cGUgPSB0eXBlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogdG9nZ2xlIGl0ZW1zIHdpdGggdGhlIHByb3ZpZGVkIHN0YXR1cyAoc2hvdyBvciBoaWRlIHRoZSByZWxhdGl2ZSBlbGVtZW50IG9uIHRoZSBwYWdlKVxyXG4gICAqIEBwYXJhbSBpdGVtcyBpdGVtcyB3aXRoIHRoZSByZWxhdGl2ZSBpZCBhbmQgc3RhdHVzLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgX3RvZ2dsZUl0ZW1zKGl0ZW1zOiB7aWQ6IEh0bWxFbGVtZW50LCBzdGF0dXM6IGJvb2xlYW59W10pIHtcclxuICAgIGNvbnN0IGdldFZhcmlhYmxlTmFtZUJ5VHlwZUlkID0gKGlkOiBIdG1sRWxlbWVudCkgPT4ge1xyXG4gICAgICBzd2l0Y2ggKGlkKSB7XHJcbiAgICAgICAgY2FzZSBIdG1sRWxlbWVudC5jaGFydEFyZWE6IHJldHVybiAnc2hvd0NoYXJ0RmxhZyc7XHJcbiAgICAgICAgY2FzZSBIdG1sRWxlbWVudC5yZWFkRmlsZVByb2dyZXNzOiByZXR1cm4gJ3Nob3dSZWFkRmlsZVByb2dyZXNzJztcclxuICAgICAgICBjYXNlIEh0bWxFbGVtZW50LnNob3dDaGFydEJ1dHRvbjogcmV0dXJuICdlbmFibGVTaG93Q2hhcnRCdXR0b24nO1xyXG4gICAgICAgIGNhc2UgSHRtbEVsZW1lbnQubG9hZFBvcnRzQnV0dG9uOiByZXR1cm4gJ2VuYWJsZUxvYWRQb3J0c0J1dHRvbic7XHJcbiAgICAgICAgY2FzZSBIdG1sRWxlbWVudC5yZXNldENoYXJ0QnV0dG9uOiByZXR1cm4gJ2VuYWJsZVJlc2V0Q2hhcnRCdXR0b24nO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gICAgaWYgKGl0ZW1zKSB7XHJcbiAgICAgIGl0ZW1zLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgdGhpc1tnZXRWYXJpYWJsZU5hbWVCeVR5cGVJZChpdGVtLmlkKV0gPSBpdGVtLnN0YXR1cztcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgI25hbWVzZXJ2ZXJIaXN0b3J5QWxsIGNsYXNzPVwibmFtZXNlcnZlci1oaXN0b3J5LWFsbFwiICh3aW5kb3c6cmVzaXplKT1cIm9uUmVzaXplKClcIj5cclxuICA8ZGl2IGNsYXNzPVwidG9vbGJhci1jaGFydFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInVwbG9hZC1ib3gtY29udGVudFwiPlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiIXNob3dSZWFkRmlsZVByb2dyZXNzXCI+XHJcbiAgICAgICAgPGZpbGUtZHJvcC1pbnB1dCAoZmlsZURyb3ApPVwiZmlsZURyb3BwZWQoJGV2ZW50KVwiIChmaWxlSW5wdXQpPVwiZmlsZVNlbGVjdGVkKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW2Ryb3BBcmVhVGV4dF09IFwiYWJicmV2aWF0ZWRGaWxlTmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbaW5wdXRBcmVhVGV4dF09XCInQnJvd3NlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiZmlsZT8ubmFtZT8gZmlsZS5uYW1lOidTZWxlY3QgYSBuYW1lIHNlcnZlciBoaXN0b3J5IGZpbGUgZnJvbSB5b3VyIGxvY2FsIGRpc2suJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFmaWxlQnVmZmVyXCI+XHJcbiAgICAgICAgPC9maWxlLWRyb3AtaW5wdXQ+XHJcbiAgICAgICAgPHAgKm5nSWY9XCJmaWxlQnVmZmVyXCIgc3R5bGU9XCJwYWRkaW5nLXRvcDoxM3B4XCI+e3tzdHJlYW1Nb2RlRmlsZU5hbWUgfHwgJ25hbWVzZXJ2ZXJfaGlzdG9yeS50cmMgKHN0cmVhbSBtb2RlKSd9fTwvcD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJzaG93UmVhZEZpbGVQcm9ncmVzc1wiPlxyXG4gICAgICAgIDxwcm9ncmVzcy1iYXIgW3Byb2dyZXNzXT1cInJlYWRQcm9ncmVzc1wiPjwvcHJvZ3Jlc3MtYmFyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImlucHV0LXRpbWVcIj5cclxuICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtdGltZS1yYW5nZVwiPlxyXG4gICAgICAgPHRpbWUtcmFuZ2Utc2VsZWN0b3IgW2Rpc2FibGVkXT1cInNob3dSZWFkRmlsZVByb2dyZXNzXCIgWyhkYXRlVGltZVJhbmdlKV09XCJkYXRlVGltZVJhbmdlXCI+PC90aW1lLXJhbmdlLXNlbGVjdG9yPlxyXG4gICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGltZXpvbmUtc2VsZWN0b3JcIj5cclxuICAgICAgICA8dGltZXpvbmUtc2VsZWN0b3IgWyh0aW1lem9uZSldPVwidGltZXpvbmVcIiBbZGlzYWJsZWRdPVwic2hvd1JlYWRGaWxlUHJvZ3Jlc3NcIj48L3RpbWV6b25lLXNlbGVjdG9yPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJwb3J0LXNlbGVjdGlvblwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicG9ydC1zZWxlY3RvclwiPlxyXG4gICAgICAgIDxwb3J0LXNlbGVjdG9yIChwb3J0Q2hhbmdlKT1cInN3aXRjaFBvcnRGb3JDaGFydCgkZXZlbnQpXCIgWyhwb3J0KV09XCJwb3J0XCIgW3BvcnRzXT1cInBvcnRzXCIgW2Rpc2FibGVkXT1cInNob3dSZWFkRmlsZVByb2dyZXNzXCI+PC9wb3J0LXNlbGVjdG9yPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInBvcnQtbG9hZC1idXR0b25cIj5cclxuICAgICAgICA8YnV0dG9uIChjbGljayk9XCJsb2FkUG9ydHMoKVwiIHRpdGxlPVwiTG9hZCBhbGwgcG9ydHMgZnJvbSBuYW1lIHNlcnZlciBoaXN0b3J5IHRyYWNlIGZpbGUuXCIgW2Rpc2FibGVkXT1cIiFlbmFibGVTaG93Q2hhcnRCdXR0b24gfHwgcG9ydCB8fCAhZW5hYmxlTG9hZFBvcnRzQnV0dG9uXCI+e3tzaG93UmVhZEZpbGVQcm9ncmVzcz8gXCJMb2FkaW5nLi4uXCIgOiBcIkxvYWRcIn19PC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImNoYXJ0LW9wZXJhdGlvblwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibGVmdFwiPlxyXG4gICAgICAgIDxidXR0b24gKGNsaWNrKT1cInNob3dDaGFydCgpXCIgdGl0bGU9XCJMb2FkIGFuZCBkaXNwbGF5IGFsbCBkYXRhIGZyb20gbmFtZSBzZXJ2ZXIgaGlzdG9yeSB0cmFjZSBmaWxlLlwiIFtkaXNhYmxlZF09XCIhZW5hYmxlU2hvd0NoYXJ0QnV0dG9uXCI+e3tzaG93UmVhZEZpbGVQcm9ncmVzcz8gXCJMb2FkaW5nLi4uXCIgOiBcIlNob3dcIn19PC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cclxuICAgICAgICA8YnV0dG9uIChjbGljayk9XCJyZXNldENoYXJ0KClcIiB0aXRsZT1cIlJlc2V0IHpvb20gb2YgY2hhcnQuXCIgW2Rpc2FibGVkXT1cInNob3dSZWFkRmlsZVByb2dyZXNzIHx8ICFlbmFibGVSZXNldENoYXJ0QnV0dG9uXCI+UmVzZXQgQ2hhcnQ8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8ZGl2ICNuYW1lc2VydmVySGlzdG9yeUNvbnRlbnQgY2xhc3M9XCJuYW1lc2VydmVyLWhpc3RvcnktY29udGVudFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm5hbWVzZXJ2ZXItaGlzdG9yeS1jb250ZW50LWNoYXJ0XCI+XHJcbiAgICAgIDxpbnN0cnVjdGlvbiBbKHNob3cpXT1cInNob3dJbnN0cnVjdGlvblwiICpuZ0lmPVwiIXNob3dDaGFydEZsYWcgJiYgc2hvd0luc3RydWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgIFtzdGVwMUZpbmlzaGVkXT1cIiEhZmlsZVwiXHJcbiAgICAgICAgICAgICAgICAgICBbc3RlcDJGaW5pc2hlZF09XCJkYXRlVGltZVJhbmdlICYmICghIWRhdGVUaW1lUmFuZ2VbMF0gfHwgISFkYXRlVGltZVJhbmdlWzFdKSB8fCB0aW1lem9uZSAhPSBkZWZhdWx0VGltZXpvbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgW3N0ZXAzRmluaXNoZWRdPVwiISFwb3J0XCJcclxuICAgICAgICAgICAgICAgICAgIFtzdGVwNEZpbmlzaGVkXT1cInN0ZXBTaG93Q2hhcnQgJiYgIWVuYWJsZVNob3dDaGFydEJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICBbc3RlcDVGaW5pc2hlZF09XCJmYWxzZVwiPlxyXG4gICAgICA8L2luc3RydWN0aW9uPlxyXG4gICAgICA8Y2FudmFzIGlkPVwiY2hhcnROYW1lU2VydmVySGlzdG9yeVwiID48L2NhbnZhcz5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cIm5hbWVzZXJ2ZXItaGlzdG9yeS1jb250ZW50LWNvbnRyb2xsZXJcIiA+XHJcbiAgICAgIDxuZ3gtc2VsZWN0aW9uLXRhYmxlIChjaGFuZ2UpPVwic2VsZWN0SXRlbSgkZXZlbnQpXCIgKm5nSWY9XCJzaG93Q2hhcnRGbGFnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpbHRlcl09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrYm94XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbdGFibGVTb3VyY2VdPVwidGFibGVTb3VyY2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBba2V5Q29sdW1uXT1cImtwaUNvbHVtblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoaWRkZW5Db2x1bW5zXT1cImhpZGRlbkNvbHVtbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcENvbHVtbl09XCJkZXNjQ29sdW1uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaFN0eWxlXT1cInNlYXJjaFR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VhcmNoQ29sdW1uXT1cImtwaUNvbHVtblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFttdWx0aVNlbGVjdGlvbl09XCJ0cnVlXCI+XHJcbiAgICAgIDwvbmd4LXNlbGVjdGlvbi10YWJsZT5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuPGRpdiBjbGFzcz1cIm1lc3NhZ2UtY29udGFpbmVyXCIgKm5nSWY9XCJhbGVydE1lc3NhZ2VcIj5cclxuICA8YWxlcnQgWyhhbGVydE1lc3NhZ2UpXT1cImFsZXJ0TWVzc2FnZVwiIFthbGVydFR5cGVdPVwiYWxlcnRUeXBlXCIgW2FsZXJ0VGltZW91dF09XCIzMDAwMFwiPjwvYWxlcnQ+XHJcbjwvZGl2PlxyXG4iXX0=
@@ -3991,10 +3991,10 @@ class NameServerHistoryComponent {
3991
3991
  }
3992
3992
  }
3993
3993
  NameServerHistoryComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: NameServerHistoryComponent, deps: [{ token: FileService }, { token: ChartService }, { token: UIService }], target: i0.ɵɵFactoryTarget.Component });
3994
- NameServerHistoryComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: NameServerHistoryComponent, selector: "ngx-hana-nameserver-history-viewer", inputs: { defaultSelectedItems: "defaultSelectedItems", hideMeasureColumns: "hideMeasureColumns", maxRowsLimitation: "maxRowsLimitation", showInstruction: "showInstruction", timezone: "timezone", fileBuffer: "fileBuffer", streamModeFileName: "streamModeFileName", autoDisplay: "autoDisplay" }, providers: [FileService, ChartService, UIService], viewQueries: [{ propertyName: "nameserverHistoryAllRef", first: true, predicate: ["nameserverHistoryAll"], descendants: true, read: ElementRef }, { propertyName: "nameserverHistoryContentRef", first: true, predicate: ["nameserverHistoryContent"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: "<div #nameserverHistoryAll class=\"nameserver-history-all\" (window:resize)=\"onResize()\">\r\n <div class=\"toolbar-chart\">\r\n <div class=\"upload-box-content\">\r\n <div *ngIf=\"!showReadFileProgress\">\r\n <file-drop-input (fileDrop)=\"fileDropped($event)\" (fileInput)=\"fileSelected($event)\"\r\n [dropAreaText]= \"abbreviatedFileName\"\r\n [inputAreaText]=\"'Browse'\"\r\n [title]=\"file?.name? file.name:'Select a name server history file from your local disk.'\"\r\n *ngIf=\"!fileBuffer\">\r\n </file-drop-input>\r\n <p *ngIf=\"fileBuffer\">{{streamModeFileName || 'nameserver_history.trc (stream mode)'}}</p>\r\n </div>\r\n <div *ngIf=\"showReadFileProgress\">\r\n <progress-bar [progress]=\"readProgress\"></progress-bar>\r\n </div>\r\n </div>\r\n <div class=\"input-time\">\r\n <div class=\"input-time-range\">\r\n <time-range-selector [disabled]=\"showReadFileProgress\" [(dateTimeRange)]=\"dateTimeRange\"></time-range-selector>\r\n </div>\r\n <div class=\"timezone-selector\">\r\n <timezone-selector [(timezone)]=\"timezone\" [disabled]=\"showReadFileProgress\"></timezone-selector>\r\n </div>\r\n </div>\r\n\r\n <div class=\"port-selection\">\r\n <div class=\"port-selector\">\r\n <port-selector (portChange)=\"switchPortForChart($event)\" [(port)]=\"port\" [ports]=\"ports\" [disabled]=\"showReadFileProgress\"></port-selector>\r\n </div>\r\n <div class=\"port-load-button\">\r\n <button (click)=\"loadPorts()\" title=\"Load all ports from name server history trace file.\" [disabled]=\"!enableShowChartButton || port || !enableLoadPortsButton\">{{showReadFileProgress? \"Loading...\" : \"Load\"}}</button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"chart-operation\">\r\n <div class=\"left\">\r\n <button (click)=\"showChart()\" title=\"Load and display all data from name server history trace file.\" [disabled]=\"!enableShowChartButton\">{{showReadFileProgress? \"Loading...\" : \"Show\"}}</button>\r\n </div>\r\n <div class=\"right\">\r\n <button (click)=\"resetChart()\" title=\"Reset zoom of chart.\" [disabled]=\"showReadFileProgress || !enableResetChartButton\">Reset Chart</button>\r\n </div>\r\n </div>\r\n </div>\r\n <div #nameserverHistoryContent class=\"nameserver-history-content\">\r\n <div class=\"nameserver-history-content-chart\">\r\n <instruction [(show)]=\"showInstruction\" *ngIf=\"!showChartFlag && showInstruction\"\r\n [step1Finished]=\"!!file\"\r\n [step2Finished]=\"dateTimeRange && (!!dateTimeRange[0] || !!dateTimeRange[1]) || timezone != defaultTimezone\"\r\n [step3Finished]=\"!!port\"\r\n [step4Finished]=\"stepShowChart && !enableShowChartButton\"\r\n [step5Finished]=\"false\">\r\n </instruction>\r\n <canvas id=\"chartNameServerHistory\" ></canvas>\r\n </div>\r\n <div class=\"nameserver-history-content-controller\" >\r\n <ngx-selection-table (change)=\"selectItem($event)\" *ngIf=\"showChartFlag\"\r\n [filter]=\"true\"\r\n [checkbox]=\"true\"\r\n [tableSource]=\"tableSource\"\r\n [keyColumn]=\"kpiColumn\"\r\n [hiddenColumns]=\"hiddenColumns\"\r\n [tooltipColumn]=\"descColumn\"\r\n [searchStyle]=\"searchType\"\r\n [searchColumn]=\"kpiColumn\"\r\n [multiSelection]=\"true\">\r\n </ngx-selection-table>\r\n </div>\r\n </div>\r\n</div>\r\n<div class=\"message-container\" *ngIf=\"alertMessage\">\r\n <alert [(alertMessage)]=\"alertMessage\" [alertType]=\"alertType\" [alertTimeout]=\"30000\"></alert>\r\n</div>\r\n", styles: [":host *,:host *:before,:host *:after{box-sizing:inherit;display:inherit;font-size:inherit;font-weight:inherit;font-family:inherit}:host .hover-box,:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button:hover{outline:0;box-shadow:0 0 6px #23adff}:host .dashed-box,:host .nameserver-history-all .toolbar-chart .chart-operation button,:host .nameserver-history-all .toolbar-chart .port-selection,:host .nameserver-history-all .toolbar-chart .input-time,:host .nameserver-history-all .toolbar-chart .upload-box-content{background:#f8f8f8;box-shadow:inset 0 20px 20px -20px #0009;border:1px dashed #0782d0}:host .solid-box,:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button{background:#fff none;border:1px solid #ccc;border-radius:4px;line-height:1.42857143}:host .nameserver-history-all{width:98%;min-width:1314px;height:auto;border:1px none #0782d0;border-bottom-style:dashed;margin:3px 1%;box-sizing:border-box;display:inline-block;font-size:14px;font-weight:400;font-family:Helvetica,Arial,sans-serif}:host .nameserver-history-all .toolbar-chart{width:100%;height:48px}:host .nameserver-history-all .toolbar-chart button{text-align:center;white-space:nowrap;vertical-align:middle}:host .nameserver-history-all .toolbar-chart button:hover{text-shadow:1px 1px 3px royalblue;cursor:pointer;font-weight:600}:host .nameserver-history-all .toolbar-chart button:disabled{text-shadow:none;opacity:.65;cursor:default;color:#a9a9a9;font-weight:400}:host .nameserver-history-all .toolbar-chart .upload-box-content{width:20%;height:100%;float:left;text-align:center;color:#00008b}:host .nameserver-history-all .toolbar-chart .input-time{margin-left:1%;margin-right:1%;width:43%;height:100%}:host .nameserver-history-all .toolbar-chart .input-time .input-time-range{height:100%;width:57%;float:left}:host .nameserver-history-all .toolbar-chart .input-time .timezone-selector{margin-top:6px;height:100%;width:42.5%;margin-right:.5%;float:right}:host .nameserver-history-all .toolbar-chart .port-selection{width:14%;margin-right:1%;height:48px}:host .nameserver-history-all .toolbar-chart .port-selection .port-selector{margin-top:6px;margin-left:2%;margin-right:1%;width:47%;float:left}:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button{margin-top:6px;margin-left:1%;margin-right:2%;width:47%;float:right}:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button{color:#333;width:100%;padding:6px 12px;margin-bottom:0}:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button:hover{text-shadow:None;font-weight:400}:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button:disabled{box-shadow:none}:host .nameserver-history-all .toolbar-chart .chart-operation{width:20%;height:48px;float:right}:host .nameserver-history-all .toolbar-chart .chart-operation .left{margin-right:1%;width:49%;height:100%;float:left}:host .nameserver-history-all .toolbar-chart .chart-operation .right{width:50%;height:100%;float:right}:host .nameserver-history-all .toolbar-chart .chart-operation button{width:100%;height:100%;color:#00008b}:host .nameserver-history-all .nameserver-history-content{width:100%;height:730px;margin:5px 5px 5px 0}:host .nameserver-history-all .nameserver-history-content .nameserver-history-content-chart{width:75%;height:100%;position:relative;float:left}:host .nameserver-history-all .nameserver-history-content .nameserver-history-content-controller{width:25%;height:100%;float:right;overflow:auto}:host .message-container{width:98%;margin:0 1%;box-sizing:border-box;display:inline-block}\n"], components: [{ type: FileDropInputComponent, selector: "file-drop-input", inputs: ["dropAreaText", "inputAreaText"], outputs: ["fileDrop", "fileInput"] }, { type: ProgressBarComponent, selector: "progress-bar", inputs: ["progress"] }, { type: TimeRangeSelectorComponent, selector: "time-range-selector", inputs: ["disabled", "dateTimeRange"], outputs: ["dateTimeRangeChange"] }, { type: TimezoneSelectorComponent, selector: "timezone-selector", inputs: ["disabled", "timezone"], outputs: ["timezoneChange"] }, { type: PortSelectorComponent, selector: "port-selector", inputs: ["disabled", "port", "ports"], outputs: ["portChange"] }, { type: InstructionComponent, selector: "instruction", inputs: ["step1Finished", "step2Finished", "step3Finished", "step4Finished", "step5Finished", "show"], outputs: ["showChange"] }, { type: i8.SelectionTableComponent, selector: "ngx-selection-table", inputs: ["filter", "keyColumn", "tableSource", "checkbox", "multiSelection", "clickToSelect", "hiddenColumns", "tooltipColumn", "searchStyle", "searchColumn"], outputs: ["change"] }, { type: AlertComponent, selector: "alert", inputs: ["alertMessage", "alertType", "alertTimeout"], outputs: ["alertMessageChange"] }], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
3994
+ NameServerHistoryComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: NameServerHistoryComponent, selector: "ngx-hana-nameserver-history-viewer", inputs: { defaultSelectedItems: "defaultSelectedItems", hideMeasureColumns: "hideMeasureColumns", maxRowsLimitation: "maxRowsLimitation", showInstruction: "showInstruction", timezone: "timezone", fileBuffer: "fileBuffer", streamModeFileName: "streamModeFileName", autoDisplay: "autoDisplay" }, providers: [FileService, ChartService, UIService], viewQueries: [{ propertyName: "nameserverHistoryAllRef", first: true, predicate: ["nameserverHistoryAll"], descendants: true, read: ElementRef }, { propertyName: "nameserverHistoryContentRef", first: true, predicate: ["nameserverHistoryContent"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: "<div #nameserverHistoryAll class=\"nameserver-history-all\" (window:resize)=\"onResize()\">\r\n <div class=\"toolbar-chart\">\r\n <div class=\"upload-box-content\">\r\n <div *ngIf=\"!showReadFileProgress\">\r\n <file-drop-input (fileDrop)=\"fileDropped($event)\" (fileInput)=\"fileSelected($event)\"\r\n [dropAreaText]= \"abbreviatedFileName\"\r\n [inputAreaText]=\"'Browse'\"\r\n [title]=\"file?.name? file.name:'Select a name server history file from your local disk.'\"\r\n *ngIf=\"!fileBuffer\">\r\n </file-drop-input>\r\n <p *ngIf=\"fileBuffer\" style=\"padding-top:13px\">{{streamModeFileName || 'nameserver_history.trc (stream mode)'}}</p>\r\n </div>\r\n <div *ngIf=\"showReadFileProgress\">\r\n <progress-bar [progress]=\"readProgress\"></progress-bar>\r\n </div>\r\n </div>\r\n <div class=\"input-time\">\r\n <div class=\"input-time-range\">\r\n <time-range-selector [disabled]=\"showReadFileProgress\" [(dateTimeRange)]=\"dateTimeRange\"></time-range-selector>\r\n </div>\r\n <div class=\"timezone-selector\">\r\n <timezone-selector [(timezone)]=\"timezone\" [disabled]=\"showReadFileProgress\"></timezone-selector>\r\n </div>\r\n </div>\r\n\r\n <div class=\"port-selection\">\r\n <div class=\"port-selector\">\r\n <port-selector (portChange)=\"switchPortForChart($event)\" [(port)]=\"port\" [ports]=\"ports\" [disabled]=\"showReadFileProgress\"></port-selector>\r\n </div>\r\n <div class=\"port-load-button\">\r\n <button (click)=\"loadPorts()\" title=\"Load all ports from name server history trace file.\" [disabled]=\"!enableShowChartButton || port || !enableLoadPortsButton\">{{showReadFileProgress? \"Loading...\" : \"Load\"}}</button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"chart-operation\">\r\n <div class=\"left\">\r\n <button (click)=\"showChart()\" title=\"Load and display all data from name server history trace file.\" [disabled]=\"!enableShowChartButton\">{{showReadFileProgress? \"Loading...\" : \"Show\"}}</button>\r\n </div>\r\n <div class=\"right\">\r\n <button (click)=\"resetChart()\" title=\"Reset zoom of chart.\" [disabled]=\"showReadFileProgress || !enableResetChartButton\">Reset Chart</button>\r\n </div>\r\n </div>\r\n </div>\r\n <div #nameserverHistoryContent class=\"nameserver-history-content\">\r\n <div class=\"nameserver-history-content-chart\">\r\n <instruction [(show)]=\"showInstruction\" *ngIf=\"!showChartFlag && showInstruction\"\r\n [step1Finished]=\"!!file\"\r\n [step2Finished]=\"dateTimeRange && (!!dateTimeRange[0] || !!dateTimeRange[1]) || timezone != defaultTimezone\"\r\n [step3Finished]=\"!!port\"\r\n [step4Finished]=\"stepShowChart && !enableShowChartButton\"\r\n [step5Finished]=\"false\">\r\n </instruction>\r\n <canvas id=\"chartNameServerHistory\" ></canvas>\r\n </div>\r\n <div class=\"nameserver-history-content-controller\" >\r\n <ngx-selection-table (change)=\"selectItem($event)\" *ngIf=\"showChartFlag\"\r\n [filter]=\"true\"\r\n [checkbox]=\"true\"\r\n [tableSource]=\"tableSource\"\r\n [keyColumn]=\"kpiColumn\"\r\n [hiddenColumns]=\"hiddenColumns\"\r\n [tooltipColumn]=\"descColumn\"\r\n [searchStyle]=\"searchType\"\r\n [searchColumn]=\"kpiColumn\"\r\n [multiSelection]=\"true\">\r\n </ngx-selection-table>\r\n </div>\r\n </div>\r\n</div>\r\n<div class=\"message-container\" *ngIf=\"alertMessage\">\r\n <alert [(alertMessage)]=\"alertMessage\" [alertType]=\"alertType\" [alertTimeout]=\"30000\"></alert>\r\n</div>\r\n", styles: [":host *,:host *:before,:host *:after{box-sizing:inherit;display:inherit;font-size:inherit;font-weight:inherit;font-family:inherit}:host .hover-box,:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button:hover{outline:0;box-shadow:0 0 6px #23adff}:host .dashed-box,:host .nameserver-history-all .toolbar-chart .chart-operation button,:host .nameserver-history-all .toolbar-chart .port-selection,:host .nameserver-history-all .toolbar-chart .input-time,:host .nameserver-history-all .toolbar-chart .upload-box-content{background:#f8f8f8;box-shadow:inset 0 20px 20px -20px #0009;border:1px dashed #0782d0}:host .solid-box,:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button{background:#fff none;border:1px solid #ccc;border-radius:4px;line-height:1.42857143}:host .nameserver-history-all{width:98%;min-width:1314px;height:auto;border:1px none #0782d0;border-bottom-style:dashed;margin:3px 1%;box-sizing:border-box;display:inline-block;font-size:14px;font-weight:400;font-family:Helvetica,Arial,sans-serif}:host .nameserver-history-all .toolbar-chart{width:100%;height:48px}:host .nameserver-history-all .toolbar-chart button{text-align:center;white-space:nowrap;vertical-align:middle}:host .nameserver-history-all .toolbar-chart button:hover{text-shadow:1px 1px 3px royalblue;cursor:pointer;font-weight:600}:host .nameserver-history-all .toolbar-chart button:disabled{text-shadow:none;opacity:.65;cursor:default;color:#a9a9a9;font-weight:400}:host .nameserver-history-all .toolbar-chart .upload-box-content{width:20%;height:100%;float:left;text-align:center;color:#00008b}:host .nameserver-history-all .toolbar-chart .input-time{margin-left:1%;margin-right:1%;width:43%;height:100%}:host .nameserver-history-all .toolbar-chart .input-time .input-time-range{height:100%;width:57%;float:left}:host .nameserver-history-all .toolbar-chart .input-time .timezone-selector{margin-top:6px;height:100%;width:42.5%;margin-right:.5%;float:right}:host .nameserver-history-all .toolbar-chart .port-selection{width:14%;margin-right:1%;height:48px}:host .nameserver-history-all .toolbar-chart .port-selection .port-selector{margin-top:6px;margin-left:2%;margin-right:1%;width:47%;float:left}:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button{margin-top:6px;margin-left:1%;margin-right:2%;width:47%;float:right}:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button{color:#333;width:100%;padding:6px 12px;margin-bottom:0}:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button:hover{text-shadow:None;font-weight:400}:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button:disabled{box-shadow:none}:host .nameserver-history-all .toolbar-chart .chart-operation{width:20%;height:48px;float:right}:host .nameserver-history-all .toolbar-chart .chart-operation .left{margin-right:1%;width:49%;height:100%;float:left}:host .nameserver-history-all .toolbar-chart .chart-operation .right{width:50%;height:100%;float:right}:host .nameserver-history-all .toolbar-chart .chart-operation button{width:100%;height:100%;color:#00008b}:host .nameserver-history-all .nameserver-history-content{width:100%;height:730px;margin:5px 5px 5px 0}:host .nameserver-history-all .nameserver-history-content .nameserver-history-content-chart{width:75%;height:100%;position:relative;float:left}:host .nameserver-history-all .nameserver-history-content .nameserver-history-content-controller{width:25%;height:100%;float:right;overflow:auto}:host .message-container{width:98%;margin:0 1%;box-sizing:border-box;display:inline-block}\n"], components: [{ type: FileDropInputComponent, selector: "file-drop-input", inputs: ["dropAreaText", "inputAreaText"], outputs: ["fileDrop", "fileInput"] }, { type: ProgressBarComponent, selector: "progress-bar", inputs: ["progress"] }, { type: TimeRangeSelectorComponent, selector: "time-range-selector", inputs: ["disabled", "dateTimeRange"], outputs: ["dateTimeRangeChange"] }, { type: TimezoneSelectorComponent, selector: "timezone-selector", inputs: ["disabled", "timezone"], outputs: ["timezoneChange"] }, { type: PortSelectorComponent, selector: "port-selector", inputs: ["disabled", "port", "ports"], outputs: ["portChange"] }, { type: InstructionComponent, selector: "instruction", inputs: ["step1Finished", "step2Finished", "step3Finished", "step4Finished", "step5Finished", "show"], outputs: ["showChange"] }, { type: i8.SelectionTableComponent, selector: "ngx-selection-table", inputs: ["filter", "keyColumn", "tableSource", "checkbox", "multiSelection", "clickToSelect", "hiddenColumns", "tooltipColumn", "searchStyle", "searchColumn"], outputs: ["change"] }, { type: AlertComponent, selector: "alert", inputs: ["alertMessage", "alertType", "alertTimeout"], outputs: ["alertMessageChange"] }], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
3995
3995
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: NameServerHistoryComponent, decorators: [{
3996
3996
  type: Component,
3997
- args: [{ selector: 'ngx-hana-nameserver-history-viewer', providers: [FileService, ChartService, UIService], template: "<div #nameserverHistoryAll class=\"nameserver-history-all\" (window:resize)=\"onResize()\">\r\n <div class=\"toolbar-chart\">\r\n <div class=\"upload-box-content\">\r\n <div *ngIf=\"!showReadFileProgress\">\r\n <file-drop-input (fileDrop)=\"fileDropped($event)\" (fileInput)=\"fileSelected($event)\"\r\n [dropAreaText]= \"abbreviatedFileName\"\r\n [inputAreaText]=\"'Browse'\"\r\n [title]=\"file?.name? file.name:'Select a name server history file from your local disk.'\"\r\n *ngIf=\"!fileBuffer\">\r\n </file-drop-input>\r\n <p *ngIf=\"fileBuffer\">{{streamModeFileName || 'nameserver_history.trc (stream mode)'}}</p>\r\n </div>\r\n <div *ngIf=\"showReadFileProgress\">\r\n <progress-bar [progress]=\"readProgress\"></progress-bar>\r\n </div>\r\n </div>\r\n <div class=\"input-time\">\r\n <div class=\"input-time-range\">\r\n <time-range-selector [disabled]=\"showReadFileProgress\" [(dateTimeRange)]=\"dateTimeRange\"></time-range-selector>\r\n </div>\r\n <div class=\"timezone-selector\">\r\n <timezone-selector [(timezone)]=\"timezone\" [disabled]=\"showReadFileProgress\"></timezone-selector>\r\n </div>\r\n </div>\r\n\r\n <div class=\"port-selection\">\r\n <div class=\"port-selector\">\r\n <port-selector (portChange)=\"switchPortForChart($event)\" [(port)]=\"port\" [ports]=\"ports\" [disabled]=\"showReadFileProgress\"></port-selector>\r\n </div>\r\n <div class=\"port-load-button\">\r\n <button (click)=\"loadPorts()\" title=\"Load all ports from name server history trace file.\" [disabled]=\"!enableShowChartButton || port || !enableLoadPortsButton\">{{showReadFileProgress? \"Loading...\" : \"Load\"}}</button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"chart-operation\">\r\n <div class=\"left\">\r\n <button (click)=\"showChart()\" title=\"Load and display all data from name server history trace file.\" [disabled]=\"!enableShowChartButton\">{{showReadFileProgress? \"Loading...\" : \"Show\"}}</button>\r\n </div>\r\n <div class=\"right\">\r\n <button (click)=\"resetChart()\" title=\"Reset zoom of chart.\" [disabled]=\"showReadFileProgress || !enableResetChartButton\">Reset Chart</button>\r\n </div>\r\n </div>\r\n </div>\r\n <div #nameserverHistoryContent class=\"nameserver-history-content\">\r\n <div class=\"nameserver-history-content-chart\">\r\n <instruction [(show)]=\"showInstruction\" *ngIf=\"!showChartFlag && showInstruction\"\r\n [step1Finished]=\"!!file\"\r\n [step2Finished]=\"dateTimeRange && (!!dateTimeRange[0] || !!dateTimeRange[1]) || timezone != defaultTimezone\"\r\n [step3Finished]=\"!!port\"\r\n [step4Finished]=\"stepShowChart && !enableShowChartButton\"\r\n [step5Finished]=\"false\">\r\n </instruction>\r\n <canvas id=\"chartNameServerHistory\" ></canvas>\r\n </div>\r\n <div class=\"nameserver-history-content-controller\" >\r\n <ngx-selection-table (change)=\"selectItem($event)\" *ngIf=\"showChartFlag\"\r\n [filter]=\"true\"\r\n [checkbox]=\"true\"\r\n [tableSource]=\"tableSource\"\r\n [keyColumn]=\"kpiColumn\"\r\n [hiddenColumns]=\"hiddenColumns\"\r\n [tooltipColumn]=\"descColumn\"\r\n [searchStyle]=\"searchType\"\r\n [searchColumn]=\"kpiColumn\"\r\n [multiSelection]=\"true\">\r\n </ngx-selection-table>\r\n </div>\r\n </div>\r\n</div>\r\n<div class=\"message-container\" *ngIf=\"alertMessage\">\r\n <alert [(alertMessage)]=\"alertMessage\" [alertType]=\"alertType\" [alertTimeout]=\"30000\"></alert>\r\n</div>\r\n", styles: [":host *,:host *:before,:host *:after{box-sizing:inherit;display:inherit;font-size:inherit;font-weight:inherit;font-family:inherit}:host .hover-box,:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button:hover{outline:0;box-shadow:0 0 6px #23adff}:host .dashed-box,:host .nameserver-history-all .toolbar-chart .chart-operation button,:host .nameserver-history-all .toolbar-chart .port-selection,:host .nameserver-history-all .toolbar-chart .input-time,:host .nameserver-history-all .toolbar-chart .upload-box-content{background:#f8f8f8;box-shadow:inset 0 20px 20px -20px #0009;border:1px dashed #0782d0}:host .solid-box,:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button{background:#fff none;border:1px solid #ccc;border-radius:4px;line-height:1.42857143}:host .nameserver-history-all{width:98%;min-width:1314px;height:auto;border:1px none #0782d0;border-bottom-style:dashed;margin:3px 1%;box-sizing:border-box;display:inline-block;font-size:14px;font-weight:400;font-family:Helvetica,Arial,sans-serif}:host .nameserver-history-all .toolbar-chart{width:100%;height:48px}:host .nameserver-history-all .toolbar-chart button{text-align:center;white-space:nowrap;vertical-align:middle}:host .nameserver-history-all .toolbar-chart button:hover{text-shadow:1px 1px 3px royalblue;cursor:pointer;font-weight:600}:host .nameserver-history-all .toolbar-chart button:disabled{text-shadow:none;opacity:.65;cursor:default;color:#a9a9a9;font-weight:400}:host .nameserver-history-all .toolbar-chart .upload-box-content{width:20%;height:100%;float:left;text-align:center;color:#00008b}:host .nameserver-history-all .toolbar-chart .input-time{margin-left:1%;margin-right:1%;width:43%;height:100%}:host .nameserver-history-all .toolbar-chart .input-time .input-time-range{height:100%;width:57%;float:left}:host .nameserver-history-all .toolbar-chart .input-time .timezone-selector{margin-top:6px;height:100%;width:42.5%;margin-right:.5%;float:right}:host .nameserver-history-all .toolbar-chart .port-selection{width:14%;margin-right:1%;height:48px}:host .nameserver-history-all .toolbar-chart .port-selection .port-selector{margin-top:6px;margin-left:2%;margin-right:1%;width:47%;float:left}:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button{margin-top:6px;margin-left:1%;margin-right:2%;width:47%;float:right}:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button{color:#333;width:100%;padding:6px 12px;margin-bottom:0}:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button:hover{text-shadow:None;font-weight:400}:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button:disabled{box-shadow:none}:host .nameserver-history-all .toolbar-chart .chart-operation{width:20%;height:48px;float:right}:host .nameserver-history-all .toolbar-chart .chart-operation .left{margin-right:1%;width:49%;height:100%;float:left}:host .nameserver-history-all .toolbar-chart .chart-operation .right{width:50%;height:100%;float:right}:host .nameserver-history-all .toolbar-chart .chart-operation button{width:100%;height:100%;color:#00008b}:host .nameserver-history-all .nameserver-history-content{width:100%;height:730px;margin:5px 5px 5px 0}:host .nameserver-history-all .nameserver-history-content .nameserver-history-content-chart{width:75%;height:100%;position:relative;float:left}:host .nameserver-history-all .nameserver-history-content .nameserver-history-content-controller{width:25%;height:100%;float:right;overflow:auto}:host .message-container{width:98%;margin:0 1%;box-sizing:border-box;display:inline-block}\n"] }]
3997
+ args: [{ selector: 'ngx-hana-nameserver-history-viewer', providers: [FileService, ChartService, UIService], template: "<div #nameserverHistoryAll class=\"nameserver-history-all\" (window:resize)=\"onResize()\">\r\n <div class=\"toolbar-chart\">\r\n <div class=\"upload-box-content\">\r\n <div *ngIf=\"!showReadFileProgress\">\r\n <file-drop-input (fileDrop)=\"fileDropped($event)\" (fileInput)=\"fileSelected($event)\"\r\n [dropAreaText]= \"abbreviatedFileName\"\r\n [inputAreaText]=\"'Browse'\"\r\n [title]=\"file?.name? file.name:'Select a name server history file from your local disk.'\"\r\n *ngIf=\"!fileBuffer\">\r\n </file-drop-input>\r\n <p *ngIf=\"fileBuffer\" style=\"padding-top:13px\">{{streamModeFileName || 'nameserver_history.trc (stream mode)'}}</p>\r\n </div>\r\n <div *ngIf=\"showReadFileProgress\">\r\n <progress-bar [progress]=\"readProgress\"></progress-bar>\r\n </div>\r\n </div>\r\n <div class=\"input-time\">\r\n <div class=\"input-time-range\">\r\n <time-range-selector [disabled]=\"showReadFileProgress\" [(dateTimeRange)]=\"dateTimeRange\"></time-range-selector>\r\n </div>\r\n <div class=\"timezone-selector\">\r\n <timezone-selector [(timezone)]=\"timezone\" [disabled]=\"showReadFileProgress\"></timezone-selector>\r\n </div>\r\n </div>\r\n\r\n <div class=\"port-selection\">\r\n <div class=\"port-selector\">\r\n <port-selector (portChange)=\"switchPortForChart($event)\" [(port)]=\"port\" [ports]=\"ports\" [disabled]=\"showReadFileProgress\"></port-selector>\r\n </div>\r\n <div class=\"port-load-button\">\r\n <button (click)=\"loadPorts()\" title=\"Load all ports from name server history trace file.\" [disabled]=\"!enableShowChartButton || port || !enableLoadPortsButton\">{{showReadFileProgress? \"Loading...\" : \"Load\"}}</button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"chart-operation\">\r\n <div class=\"left\">\r\n <button (click)=\"showChart()\" title=\"Load and display all data from name server history trace file.\" [disabled]=\"!enableShowChartButton\">{{showReadFileProgress? \"Loading...\" : \"Show\"}}</button>\r\n </div>\r\n <div class=\"right\">\r\n <button (click)=\"resetChart()\" title=\"Reset zoom of chart.\" [disabled]=\"showReadFileProgress || !enableResetChartButton\">Reset Chart</button>\r\n </div>\r\n </div>\r\n </div>\r\n <div #nameserverHistoryContent class=\"nameserver-history-content\">\r\n <div class=\"nameserver-history-content-chart\">\r\n <instruction [(show)]=\"showInstruction\" *ngIf=\"!showChartFlag && showInstruction\"\r\n [step1Finished]=\"!!file\"\r\n [step2Finished]=\"dateTimeRange && (!!dateTimeRange[0] || !!dateTimeRange[1]) || timezone != defaultTimezone\"\r\n [step3Finished]=\"!!port\"\r\n [step4Finished]=\"stepShowChart && !enableShowChartButton\"\r\n [step5Finished]=\"false\">\r\n </instruction>\r\n <canvas id=\"chartNameServerHistory\" ></canvas>\r\n </div>\r\n <div class=\"nameserver-history-content-controller\" >\r\n <ngx-selection-table (change)=\"selectItem($event)\" *ngIf=\"showChartFlag\"\r\n [filter]=\"true\"\r\n [checkbox]=\"true\"\r\n [tableSource]=\"tableSource\"\r\n [keyColumn]=\"kpiColumn\"\r\n [hiddenColumns]=\"hiddenColumns\"\r\n [tooltipColumn]=\"descColumn\"\r\n [searchStyle]=\"searchType\"\r\n [searchColumn]=\"kpiColumn\"\r\n [multiSelection]=\"true\">\r\n </ngx-selection-table>\r\n </div>\r\n </div>\r\n</div>\r\n<div class=\"message-container\" *ngIf=\"alertMessage\">\r\n <alert [(alertMessage)]=\"alertMessage\" [alertType]=\"alertType\" [alertTimeout]=\"30000\"></alert>\r\n</div>\r\n", styles: [":host *,:host *:before,:host *:after{box-sizing:inherit;display:inherit;font-size:inherit;font-weight:inherit;font-family:inherit}:host .hover-box,:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button:hover{outline:0;box-shadow:0 0 6px #23adff}:host .dashed-box,:host .nameserver-history-all .toolbar-chart .chart-operation button,:host .nameserver-history-all .toolbar-chart .port-selection,:host .nameserver-history-all .toolbar-chart .input-time,:host .nameserver-history-all .toolbar-chart .upload-box-content{background:#f8f8f8;box-shadow:inset 0 20px 20px -20px #0009;border:1px dashed #0782d0}:host .solid-box,:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button{background:#fff none;border:1px solid #ccc;border-radius:4px;line-height:1.42857143}:host .nameserver-history-all{width:98%;min-width:1314px;height:auto;border:1px none #0782d0;border-bottom-style:dashed;margin:3px 1%;box-sizing:border-box;display:inline-block;font-size:14px;font-weight:400;font-family:Helvetica,Arial,sans-serif}:host .nameserver-history-all .toolbar-chart{width:100%;height:48px}:host .nameserver-history-all .toolbar-chart button{text-align:center;white-space:nowrap;vertical-align:middle}:host .nameserver-history-all .toolbar-chart button:hover{text-shadow:1px 1px 3px royalblue;cursor:pointer;font-weight:600}:host .nameserver-history-all .toolbar-chart button:disabled{text-shadow:none;opacity:.65;cursor:default;color:#a9a9a9;font-weight:400}:host .nameserver-history-all .toolbar-chart .upload-box-content{width:20%;height:100%;float:left;text-align:center;color:#00008b}:host .nameserver-history-all .toolbar-chart .input-time{margin-left:1%;margin-right:1%;width:43%;height:100%}:host .nameserver-history-all .toolbar-chart .input-time .input-time-range{height:100%;width:57%;float:left}:host .nameserver-history-all .toolbar-chart .input-time .timezone-selector{margin-top:6px;height:100%;width:42.5%;margin-right:.5%;float:right}:host .nameserver-history-all .toolbar-chart .port-selection{width:14%;margin-right:1%;height:48px}:host .nameserver-history-all .toolbar-chart .port-selection .port-selector{margin-top:6px;margin-left:2%;margin-right:1%;width:47%;float:left}:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button{margin-top:6px;margin-left:1%;margin-right:2%;width:47%;float:right}:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button{color:#333;width:100%;padding:6px 12px;margin-bottom:0}:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button:hover{text-shadow:None;font-weight:400}:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button:disabled{box-shadow:none}:host .nameserver-history-all .toolbar-chart .chart-operation{width:20%;height:48px;float:right}:host .nameserver-history-all .toolbar-chart .chart-operation .left{margin-right:1%;width:49%;height:100%;float:left}:host .nameserver-history-all .toolbar-chart .chart-operation .right{width:50%;height:100%;float:right}:host .nameserver-history-all .toolbar-chart .chart-operation button{width:100%;height:100%;color:#00008b}:host .nameserver-history-all .nameserver-history-content{width:100%;height:730px;margin:5px 5px 5px 0}:host .nameserver-history-all .nameserver-history-content .nameserver-history-content-chart{width:75%;height:100%;position:relative;float:left}:host .nameserver-history-all .nameserver-history-content .nameserver-history-content-controller{width:25%;height:100%;float:right;overflow:auto}:host .message-container{width:98%;margin:0 1%;box-sizing:border-box;display:inline-block}\n"] }]
3998
3998
  }], ctorParameters: function () { return [{ type: FileService }, { type: ChartService }, { type: UIService }]; }, propDecorators: { nameserverHistoryAllRef: [{
3999
3999
  type: ViewChild,
4000
4000
  args: ['nameserverHistoryAll', { read: ElementRef }]