@skyux/grids 10.11.0 → 10.12.0
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.
|
@@ -955,7 +955,7 @@ export class SkyGridComponent {
|
|
|
955
955
|
arrayA.every((value, index) => value === arrayB[index]));
|
|
956
956
|
}
|
|
957
957
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: SkyGridComponent, deps: [{ token: i1.SkyAffixService }, { token: i0.ChangeDetectorRef }, { token: i2.DragulaService }, { token: i3.SkyGridAdapterService }, { token: i1.SkyOverlayService }, { token: i1.SkyAppWindowRef }, { token: i1.SkyUIConfigService }, { token: i1.SkyLogService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
958
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.4", type: SkyGridComponent, selector: "sky-grid", inputs: { columns: "columns", data: "data", enableMultiselect: "enableMultiselect", fit: "fit", hasToolbar: "hasToolbar", height: "height", highlightText: "highlightText", messageStream: "messageStream", multiselectRowId: "multiselectRowId", rowHighlightedId: "rowHighlightedId", selectedColumnIds: "selectedColumnIds", selectedRowIds: "selectedRowIds", settingsKey: "settingsKey", sortField: "sortField", width: "width" }, outputs: { columnWidthChange: "columnWidthChange", multiselectSelectionChange: "multiselectSelectionChange", rowDeleteCancel: "rowDeleteCancel", rowDeleteConfirm: "rowDeleteConfirm", selectedColumnIdsChange: "selectedColumnIdsChange", sortFieldChange: "sortFieldChange" }, host: { listeners: { "window:resize": "onWindowResize()" } }, providers: [SkyGridAdapterService], queries: [{ propertyName: "columnComponents", predicate: SkyGridColumnComponent }], viewQueries: [{ propertyName: "inlineDeleteTemplateRef", first: true, predicate: ["inlineDeleteTemplateRef"], descendants: true, read: TemplateRef }, { propertyName: "tableContainerElementRef", first: true, predicate: ["gridContainer"], descendants: true }, { propertyName: "tableElementRef", first: true, predicate: ["gridTable"], descendants: true }, { propertyName: "topScrollContainerElementRef", first: true, predicate: ["topScrollContainer"], descendants: true }, { propertyName: "resizeBar", first: true, predicate: ["resizeBar"], descendants: true }, { propertyName: "columnElementRefs", predicate: ["gridCol"], descendants: true }, { propertyName: "columnRangeInputElementRefs", predicate: ["colSizeRange"], descendants: true }, { propertyName: "inlineDeleteRefs", predicate: ["inlineDeleteRef"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"sky-grid\">\n <div\n *ngIf=\"showTopScroll\"\n class=\"sky-grid-top-scroll-container\"\n (scroll)=\"onTopScroll($event)\"\n #topScrollContainer\n >\n <div\n class=\"sky-grid-top-scroll\"\n [style.width.px]=\"getTopScrollWidth()\"\n ></div>\n </div>\n <div\n class=\"sky-grid-table-container\"\n [style.height.px]=\"height\"\n [style.width.px]=\"width\"\n (scroll)=\"onGridScroll($event)\"\n #gridContainer\n >\n <table class=\"sky-grid-table\" [ngClass]=\"getTableClassNames()\" #gridTable>\n <thead>\n <tr [dragula]=\"dragulaGroupName\">\n <th\n *ngIf=\"enableMultiselect\"\n class=\"sky-grid-heading sky-grid-multiselect-cell sky-grid-header-locked\"\n scope=\"col\"\n [style.max-width.px]=\"minColWidth\"\n [style.width.px]=\"minColWidth\"\n >\n <span class=\"screen-reader-only\">\n {{ 'skyux_grid_multiselect_select_row' | skyLibResources }}\n </span>\n </th>\n <th\n *ngFor=\"\n let column of displayedColumns;\n let last = last;\n let i = index\n \"\n class=\"sky-grid-heading sky-field-label\"\n scope=\"col\"\n [attr.sky-cmp-index]=\"i\"\n [attr.sky-cmp-id]=\"column.id || column.field\"\n [attr.aria-sort]=\"getAriaSortDirection(column) | async\"\n [id]=\"'sky-grid-' + gridId + '-column-' + i\"\n [ngClass]=\"'sky-grid-column-alignment-' + column.alignment\"\n [style.max-width.px]=\"column.width\"\n [style.width.px]=\"column.width\"\n [tabIndex]=\"column.isSortable ? 0 : -1\"\n (mouseup)=\"sortByColumn(column)\"\n (keydown)=\"onKeydown($event, column)\"\n (touchmove)=\"onTouchMove($event)\"\n #gridCol\n >\n <div\n class=\"overflow\"\n [ngClass]=\"getTableHeaderClassNames(column)\"\n [style.max-width.px]=\"column.width - 1\"\n [style.width.px]=\"column.width - 1\"\n >\n <span\n *ngIf=\"(getCaretVisibility(column.field) | async) === 'hidden'\"\n class=\"sky-grid-header-caret-hidden-spacing\"\n ></span>\n <!-- The no spacing here is intentional to avoid extra spaces due to these being inline elements -->\n <span class=\"sky-grid-header-text\">{{\n column.heading?.trim()\n }}</span>\n <sky-icon\n class=\"sky-grid-heading-sort\"\n [ngClass]=\"\n 'sky-grid-heading-sort-' +\n (getCaretVisibility(column.field) | async)\n \"\n [icon]=\"getCaretIconNames(column)\"\n />\n <sky-help-inline\n *ngIf=\"column.inlineHelpPopover\"\n [ngClass]=\"{\n 'sky-grid-help-inline-sort-hidden':\n getHelpInlineClass(column.field) | async\n }\"\n [skyPopover]=\"column.inlineHelpPopover\"\n (keydown.enter)=\"$event.stopPropagation()\"\n (keydown.space)=\"$event.stopPropagation()\"\n (mousedown)=\"$event.stopPropagation()\"\n (mouseup)=\"$event.stopPropagation()\"\n >\n </sky-help-inline>\n </div>\n <span\n *ngIf=\"(fit === 'width' && !last) || fit === 'scroll'\"\n aria-hidden=\"true\"\n class=\"sky-grid-resize-handle\"\n tabindex=\"-1\"\n [attr.sky-cmp-index]=\"i\"\n (mousedown)=\"onResizeColumnStart($event)\"\n (touchstart)=\"onResizeColumnStart($event)\"\n >\n </span>\n <input\n aria-label=\"Width of column\"\n class=\"sky-grid-column-input-aria-only\"\n role=\"slider\"\n type=\"range\"\n [attr.aria-controls]=\"'sky-grid-' + gridId + '-column-' + i\"\n [attr.aria-valuemin]=\"minColWidth\"\n [attr.aria-valuemax]=\"maxColWidth\"\n [attr.aria-valuenow]=\"column.width\"\n [attr.sky-cmp-index]=\"i\"\n [min]=\"minColWidth\"\n [max]=\"maxColWidth\"\n [step]=\"columnResizeStep\"\n [(ngModel)]=\"column.width\"\n (blur)=\"onResizeHandleBlur()\"\n (focus)=\"onResizeHandleFocus($event)\"\n (keydown)=\"onKeydownResizeCol($event)\"\n (change)=\"onInputChangeResizeCol($event)\"\n #colSizeRange\n />\n </th>\n </tr>\n </thead>\n <tbody class=\"sky-grid-tbody\">\n <tr\n class=\"sky-grid-row\"\n *ngFor=\"let item of items; let i = index\"\n [attr.aria-current]=\"isRowHighlighted(item.id) ? true : null\"\n [attr.sky-cmp-id]=\"item.id\"\n [ngClass]=\"{\n 'sky-grid-multiselect-selected-row': item.isSelected,\n 'sky-grid-multiselect-row': enableMultiselect,\n 'sky-grid-row-highlight': isRowHighlighted(item.id)\n }\"\n (click)=\"onRowClick($event, item)\"\n >\n <td\n *ngIf=\"enableMultiselect\"\n class=\"sky-grid-multiselect-cell sky-grid-header-locked\"\n >\n <div\n [style.max-width.px]=\"minColWidth\"\n [style.width.px]=\"minColWidth\"\n >\n <sky-checkbox\n [label]=\"'skyux_grid_multiselect_select_row' | skyLibResources\"\n (change)=\"onMultiselectCheckboxChange()\"\n [(ngModel)]=\"item.isSelected\"\n >\n </sky-checkbox>\n </div>\n </td>\n <td\n *ngFor=\"\n let column of displayedColumns;\n let last = last;\n let i = index\n \"\n class=\"sky-grid-cell\"\n [ngClass]=\"'sky-grid-column-alignment-' + column.alignment\"\n [style.max-width.px]=\"column.width\"\n [style.width.px]=\"column.width\"\n >\n <sky-grid-cell\n [skyHighlight]=\"\n !column.excludeFromHighlighting ? highlightText : undefined\n \"\n [template]=\"column.template || defaultCellTemplate\"\n [fieldSelector]=\"column.field\"\n [item]=\"item\"\n [columnId]=\"column.id\"\n [attr.sky-cmp-id]=\"column.id || column.field\"\n >\n </sky-grid-cell>\n </td>\n </tr>\n </tbody>\n </table>\n <div\n *ngIf=\"showResizeBar\"\n aria-hidden=\"true\"\n class=\"sky-grid-resize-bar\"\n tabindex=\"-1\"\n #resizeBar\n ></div>\n </div>\n</div>\n\n<ng-template #defaultCellTemplate let-row=\"row\" let-value=\"value\">{{\n value\n}}</ng-template>\n\n<ng-template let-item #inlineDeleteTemplateRef>\n <div\n [id]=\"'row-delete-ref-' + item.id\"\n [ngStyle]=\"{\n height: getRowHeight(0),\n position: 'fixed',\n width: tableWidth + 'px'\n }\"\n #inlineDeleteRef\n >\n <sky-inline-delete\n [pending]=\"getRowDeleteItem(item.id).pending\"\n (cancelTriggered)=\"cancelRowDelete(item.id)\"\n (deleteTriggered)=\"confirmRowDelete(item.id)\"\n ></sky-inline-delete>\n </div>\n</ng-template>\n", styles: [".sky-grid{position:relative;display:block}.sky-grid-table-container{overflow:auto}.sky-grid-table{position:relative;table-layout:fixed;border-collapse:collapse;margin:0;font-size:15px;min-width:100%}.sky-grid-table.sky-grid-fit{max-width:100%;width:100%}.sky-grid-tbody{background-color:#fff}.sky-grid-row{border-bottom:1px dotted #cdcfd2}.sky-grid-row:nth-child(odd){background-color:#fbfbfb}.sky-grid-row.sky-grid-row-highlight{border-top:1px solid #0974a1;box-shadow:0 0 0 3px inset #0974a1}.sky-grid-row .sky-grid-cell{padding:0;min-width:10px}.sky-grid-heading{position:relative;border-top:1px solid #cdcfd2;border-bottom:1px solid #cdcfd2;border-left:1px solid #cdcfd2;border-right:1px solid #cdcfd2;border-right-width:0px;padding:0;cursor:pointer;background-color:#fff;overflow:visible;background-clip:padding-box;-webkit-user-select:none;-webkit-tap-highlight-color:transparent;-moz-user-select:none;-ms-user-select:none;user-select:none}.sky-grid-heading:first-child{border-left:1px solid transparent}.sky-grid-heading.sky-grid-header-dragging{background-color:#eeeeef}.sky-grid-heading.sky-grid-column-alignment-left .sky-grid-heading-sort,.sky-grid-heading.sky-grid-column-alignment-center .sky-grid-heading-sort{width:14px}.sky-grid-heading.sky-grid-column-alignment-left .sky-grid-help-inline-sort-hidden,.sky-grid-heading.sky-grid-column-alignment-center .sky-grid-help-inline-sort-hidden{margin-left:-14px;margin-right:14px}.sky-grid-heading.sky-grid-column-alignment-right .sky-grid-header-caret-hidden-spacing{padding-left:14px}.sky-grid-heading.sky-grid-column-alignment-right .sky-grid-heading-sort-visible{width:14px}.sky-grid-heading div{padding:8px}.sky-grid-heading .overflow{text-overflow:ellipsis;white-space:nowrap;position:relative;z-index:1;overflow:hidden;min-width:100%}.sky-grid-heading .sky-grid-column-input-aria-only{-webkit-appearance:none;-moz-appearance:none;height:100%;width:5px;position:absolute;display:block;top:0;bottom:0;right:0}.sky-grid-heading .sky-grid-column-input-aria-only::-moz-range-track{background:transparent}.sky-grid-heading .sky-grid-column-input-aria-only::-moz-range-thumb{-webkit-appearance:none;-moz-appearance:none;width:0;height:0;border-radius:0;border:0 none;background:none;display:none}.sky-grid-heading .sky-grid-column-input-aria-only::-ms-thumb{-webkit-appearance:none;-moz-appearance:none;width:0;height:0;border-radius:0;border:0 none;background:none;display:none}.sky-grid-heading .sky-grid-column-input-aria-only::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;width:0;height:0;border-radius:0;border:0 none;background:none;display:none}.sky-grid-heading .sky-grid-column-input-aria-only:focus{background-color:#00b4f1}.sky-grid-column-alignment-left{text-align:left}.sky-grid-column-alignment-center{text-align:center}.sky-grid-column-alignment-right{text-align:right}.sky-grid-multiselect-cell{padding:0;text-align:center}.sky-grid-multiselect-cell ::ng-deep .sky-switch-control{margin:0 auto}th.sky-grid-multiselect-cell{cursor:default}th.sky-grid-multiselect-cell .screen-reader-only{width:0;height:0;padding:0;opacity:0;position:absolute;margin:-1px;border:0;overflow:hidden;clip:rect(0,0,0,0);outline:none;white-space:nowrap}@-moz-document url-prefix(){.sky-grid-multiselect-row td{border-left:0px solid transparent;border-right:0px solid transparent}}.sky-grid-multiselect-row:hover{background-color:#e9e4f1}.sky-grid-multiselect-row:hover:nth-child(odd){background:#e9e4f1}.sky-grid-multiselect-selected-row{background:#f1eef6;border-top:1px solid #dadbf6;border-bottom:1px solid #dadbf6}.sky-grid-multiselect-selected-row:nth-child(odd){background:#f1eef6}.sky-grid-has-toolbar .sky-grid-heading{border-top-width:0px}.sky-grid-heading-sort.sky-grid-heading-sort-hidden{visibility:hidden}.sky-grid-heading-sort.sky-grid-heading-sort-visible{visibility:visible;padding-left:5px}.sky-grid-resize-handle{position:absolute;right:0;top:0;bottom:0;width:30px;z-index:2;min-height:20px;height:100%!important;vertical-align:middle;cursor:col-resize}.sky-grid-resize-handle:hover:after{background-color:#00b4f1}.sky-grid-resize-handle:after{position:absolute;right:0;top:0;bottom:0;width:5px;height:100%;content:\"\"}.sky-grid-resize-bar{position:absolute;top:0;left:0;z-index:99;height:100%;width:5px;background:#00b4f1;opacity:.6}tr{position:relative}.sky-grid-top-scroll-container{overflow:auto}.sky-grid-top-scroll{height:1px}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.DragulaDirective, selector: "[dragula]", inputs: ["dragula", "dragulaModel"], outputs: ["dragulaModelChange"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.RangeValueAccessor, selector: "input[type=range][formControlName],input[type=range][formControl],input[type=range][ngModel]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.λ3, selector: "sky-checkbox", inputs: ["label", "labelledBy", "id", "disabled", "tabindex", "name", "helpPopoverContent", "helpPopoverTitle", "icon", "checkboxType", "checked", "indeterminate", "required", "labelText", "labelHidden", "hintText"], outputs: ["change", "checkedChange", "disabledChange", "indeterminateChange"] }, { kind: "component", type: i7.λ3, selector: "sky-help-inline", inputs: ["ariaControls", "ariaExpanded", "ariaLabel"], outputs: ["actionClick"] }, { kind: "component", type: i7.λ4, selector: "sky-icon", inputs: ["icon", "iconType", "size", "fixedWidth", "variant"] }, { kind: "component", type: i8.λ8, selector: "sky-inline-delete", inputs: ["pending"], outputs: ["cancelTriggered", "deleteTriggered"] }, { kind: "directive", type: i9.λ7, selector: "[skyPopover]", inputs: ["skyPopover", "skyPopoverAlignment", "skyPopoverMessageStream", "skyPopoverPlacement", "skyPopoverTrigger"] }, { kind: "directive", type: i7.SkyTextHighlightDirective, selector: "[skyHighlight]", inputs: ["skyHighlight"] }, { kind: "component", type: i10.SkyGridCellComponent, selector: "sky-grid-cell", inputs: ["item", "columnId", "template", "fieldSelector"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i11.SkyLibResourcesPipe, name: "skyLibResources" }], viewProviders: [DragulaService], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
958
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.4", type: SkyGridComponent, selector: "sky-grid", inputs: { columns: "columns", data: "data", enableMultiselect: "enableMultiselect", fit: "fit", hasToolbar: "hasToolbar", height: "height", highlightText: "highlightText", messageStream: "messageStream", multiselectRowId: "multiselectRowId", rowHighlightedId: "rowHighlightedId", selectedColumnIds: "selectedColumnIds", selectedRowIds: "selectedRowIds", settingsKey: "settingsKey", sortField: "sortField", width: "width" }, outputs: { columnWidthChange: "columnWidthChange", multiselectSelectionChange: "multiselectSelectionChange", rowDeleteCancel: "rowDeleteCancel", rowDeleteConfirm: "rowDeleteConfirm", selectedColumnIdsChange: "selectedColumnIdsChange", sortFieldChange: "sortFieldChange" }, host: { listeners: { "window:resize": "onWindowResize()" } }, providers: [SkyGridAdapterService], queries: [{ propertyName: "columnComponents", predicate: SkyGridColumnComponent }], viewQueries: [{ propertyName: "inlineDeleteTemplateRef", first: true, predicate: ["inlineDeleteTemplateRef"], descendants: true, read: TemplateRef }, { propertyName: "tableContainerElementRef", first: true, predicate: ["gridContainer"], descendants: true }, { propertyName: "tableElementRef", first: true, predicate: ["gridTable"], descendants: true }, { propertyName: "topScrollContainerElementRef", first: true, predicate: ["topScrollContainer"], descendants: true }, { propertyName: "resizeBar", first: true, predicate: ["resizeBar"], descendants: true }, { propertyName: "columnElementRefs", predicate: ["gridCol"], descendants: true }, { propertyName: "columnRangeInputElementRefs", predicate: ["colSizeRange"], descendants: true }, { propertyName: "inlineDeleteRefs", predicate: ["inlineDeleteRef"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"sky-grid\">\n <div\n *ngIf=\"showTopScroll\"\n class=\"sky-grid-top-scroll-container\"\n (scroll)=\"onTopScroll($event)\"\n #topScrollContainer\n >\n <div\n class=\"sky-grid-top-scroll\"\n [style.width.px]=\"getTopScrollWidth()\"\n ></div>\n </div>\n <div\n class=\"sky-grid-table-container\"\n [style.height.px]=\"height\"\n [style.width.px]=\"width\"\n (scroll)=\"onGridScroll($event)\"\n #gridContainer\n >\n <table class=\"sky-grid-table\" [ngClass]=\"getTableClassNames()\" #gridTable>\n <thead>\n <tr [dragula]=\"dragulaGroupName\">\n <th\n *ngIf=\"enableMultiselect\"\n class=\"sky-grid-heading sky-grid-multiselect-cell sky-grid-header-locked\"\n scope=\"col\"\n [style.max-width.px]=\"minColWidth\"\n [style.width.px]=\"minColWidth\"\n >\n <span class=\"screen-reader-only\">\n {{ 'skyux_grid_multiselect_select_row' | skyLibResources }}\n </span>\n </th>\n <th\n *ngFor=\"\n let column of displayedColumns;\n let last = last;\n let i = index\n \"\n class=\"sky-grid-heading sky-field-label\"\n scope=\"col\"\n [attr.sky-cmp-index]=\"i\"\n [attr.sky-cmp-id]=\"column.id || column.field\"\n [attr.aria-sort]=\"getAriaSortDirection(column) | async\"\n [id]=\"'sky-grid-' + gridId + '-column-' + i\"\n [ngClass]=\"'sky-grid-column-alignment-' + column.alignment\"\n [style.max-width.px]=\"column.width\"\n [style.width.px]=\"column.width\"\n [tabIndex]=\"column.isSortable ? 0 : -1\"\n (mouseup)=\"sortByColumn(column)\"\n (keydown)=\"onKeydown($event, column)\"\n (touchmove)=\"onTouchMove($event)\"\n #gridCol\n >\n <div\n class=\"overflow\"\n [ngClass]=\"getTableHeaderClassNames(column)\"\n [style.max-width.px]=\"column.width - 1\"\n [style.width.px]=\"column.width - 1\"\n >\n <span\n *ngIf=\"(getCaretVisibility(column.field) | async) === 'hidden'\"\n class=\"sky-grid-header-caret-hidden-spacing\"\n ></span>\n <!-- The no spacing here is intentional to avoid extra spaces due to these being inline elements -->\n <span class=\"sky-grid-header-text\">{{\n column.heading?.trim()\n }}</span>\n <sky-icon\n class=\"sky-grid-heading-sort\"\n [ngClass]=\"\n 'sky-grid-heading-sort-' +\n (getCaretVisibility(column.field) | async)\n \"\n [icon]=\"getCaretIconNames(column)\"\n />\n <sky-help-inline\n *ngIf=\"column.inlineHelpPopover\"\n [ngClass]=\"{\n 'sky-grid-help-inline-sort-hidden':\n getHelpInlineClass(column.field) | async\n }\"\n [skyPopover]=\"column.inlineHelpPopover\"\n (keydown.enter)=\"$event.stopPropagation()\"\n (keydown.space)=\"$event.stopPropagation()\"\n (mousedown)=\"$event.stopPropagation()\"\n (mouseup)=\"$event.stopPropagation()\"\n >\n </sky-help-inline>\n </div>\n <span\n *ngIf=\"(fit === 'width' && !last) || fit === 'scroll'\"\n aria-hidden=\"true\"\n class=\"sky-grid-resize-handle\"\n tabindex=\"-1\"\n [attr.sky-cmp-index]=\"i\"\n (mousedown)=\"onResizeColumnStart($event)\"\n (touchstart)=\"onResizeColumnStart($event)\"\n >\n </span>\n <input\n aria-label=\"Width of column\"\n class=\"sky-grid-column-input-aria-only\"\n role=\"slider\"\n type=\"range\"\n [attr.aria-controls]=\"'sky-grid-' + gridId + '-column-' + i\"\n [attr.aria-valuemin]=\"minColWidth\"\n [attr.aria-valuemax]=\"maxColWidth\"\n [attr.aria-valuenow]=\"column.width\"\n [attr.sky-cmp-index]=\"i\"\n [min]=\"minColWidth\"\n [max]=\"maxColWidth\"\n [step]=\"columnResizeStep\"\n [(ngModel)]=\"column.width\"\n (blur)=\"onResizeHandleBlur()\"\n (focus)=\"onResizeHandleFocus($event)\"\n (keydown)=\"onKeydownResizeCol($event)\"\n (change)=\"onInputChangeResizeCol($event)\"\n #colSizeRange\n />\n </th>\n </tr>\n </thead>\n <tbody class=\"sky-grid-tbody\">\n <tr\n class=\"sky-grid-row\"\n *ngFor=\"let item of items; let i = index\"\n [attr.aria-current]=\"isRowHighlighted(item.id) ? true : null\"\n [attr.sky-cmp-id]=\"item.id\"\n [ngClass]=\"{\n 'sky-grid-multiselect-selected-row': item.isSelected,\n 'sky-grid-multiselect-row': enableMultiselect,\n 'sky-grid-row-highlight': isRowHighlighted(item.id)\n }\"\n (click)=\"onRowClick($event, item)\"\n >\n <td\n *ngIf=\"enableMultiselect\"\n class=\"sky-grid-multiselect-cell sky-grid-header-locked\"\n >\n <div\n [style.max-width.px]=\"minColWidth\"\n [style.width.px]=\"minColWidth\"\n >\n <sky-checkbox\n [label]=\"'skyux_grid_multiselect_select_row' | skyLibResources\"\n (change)=\"onMultiselectCheckboxChange()\"\n [(ngModel)]=\"item.isSelected\"\n >\n </sky-checkbox>\n </div>\n </td>\n <td\n *ngFor=\"\n let column of displayedColumns;\n let last = last;\n let i = index\n \"\n class=\"sky-grid-cell\"\n [ngClass]=\"'sky-grid-column-alignment-' + column.alignment\"\n [style.max-width.px]=\"column.width\"\n [style.width.px]=\"column.width\"\n >\n <sky-grid-cell\n [skyHighlight]=\"\n !column.excludeFromHighlighting ? highlightText : undefined\n \"\n [template]=\"column.template || defaultCellTemplate\"\n [fieldSelector]=\"column.field\"\n [item]=\"item\"\n [columnId]=\"column.id\"\n [attr.sky-cmp-id]=\"column.id || column.field\"\n >\n </sky-grid-cell>\n </td>\n </tr>\n </tbody>\n </table>\n <div\n *ngIf=\"showResizeBar\"\n aria-hidden=\"true\"\n class=\"sky-grid-resize-bar\"\n tabindex=\"-1\"\n #resizeBar\n ></div>\n </div>\n</div>\n\n<ng-template #defaultCellTemplate let-row=\"row\" let-value=\"value\">{{\n value\n}}</ng-template>\n\n<ng-template let-item #inlineDeleteTemplateRef>\n <div\n [id]=\"'row-delete-ref-' + item.id\"\n [ngStyle]=\"{\n height: getRowHeight(0),\n position: 'fixed',\n width: tableWidth + 'px'\n }\"\n #inlineDeleteRef\n >\n <sky-inline-delete\n [pending]=\"getRowDeleteItem(item.id).pending\"\n (cancelTriggered)=\"cancelRowDelete(item.id)\"\n (deleteTriggered)=\"confirmRowDelete(item.id)\"\n ></sky-inline-delete>\n </div>\n</ng-template>\n", styles: [".sky-grid{position:relative;display:block}.sky-grid-table-container{overflow:auto}.sky-grid-table{position:relative;table-layout:fixed;border-collapse:collapse;margin:0;font-size:15px;min-width:100%}.sky-grid-table.sky-grid-fit{max-width:100%;width:100%}.sky-grid-tbody{background-color:#fff}.sky-grid-row{border-bottom:1px dotted #cdcfd2}.sky-grid-row:nth-child(odd){background-color:#fbfbfb}.sky-grid-row.sky-grid-row-highlight{border-top:1px solid #0974a1;box-shadow:0 0 0 3px inset #0974a1}.sky-grid-row .sky-grid-cell{padding:0;min-width:10px}.sky-grid-heading{position:relative;border-top:1px solid #cdcfd2;border-bottom:1px solid #cdcfd2;border-left:1px solid #cdcfd2;border-right:1px solid #cdcfd2;border-right-width:0px;padding:0;cursor:pointer;background-color:#fff;overflow:visible;background-clip:padding-box;-webkit-user-select:none;-webkit-tap-highlight-color:transparent;-moz-user-select:none;-ms-user-select:none;user-select:none}.sky-grid-heading:first-child{border-left:1px solid transparent}.sky-grid-heading.sky-grid-header-dragging{background-color:#eeeeef}.sky-grid-heading.sky-grid-column-alignment-left .sky-grid-heading-sort,.sky-grid-heading.sky-grid-column-alignment-center .sky-grid-heading-sort{width:14px}.sky-grid-heading.sky-grid-column-alignment-left .sky-grid-help-inline-sort-hidden,.sky-grid-heading.sky-grid-column-alignment-center .sky-grid-help-inline-sort-hidden{margin-left:-14px;margin-right:14px}.sky-grid-heading.sky-grid-column-alignment-right .sky-grid-header-caret-hidden-spacing{padding-left:14px}.sky-grid-heading.sky-grid-column-alignment-right .sky-grid-heading-sort-visible{width:14px}.sky-grid-heading div{padding:8px}.sky-grid-heading .overflow{text-overflow:ellipsis;white-space:nowrap;position:relative;z-index:1;overflow:hidden;min-width:100%}.sky-grid-heading .sky-grid-column-input-aria-only{-webkit-appearance:none;-moz-appearance:none;height:100%;width:5px;position:absolute;display:block;top:0;bottom:0;right:0}.sky-grid-heading .sky-grid-column-input-aria-only::-moz-range-track{background:transparent}.sky-grid-heading .sky-grid-column-input-aria-only::-moz-range-thumb{-webkit-appearance:none;-moz-appearance:none;width:0;height:0;border-radius:0;border:0 none;background:none;display:none}.sky-grid-heading .sky-grid-column-input-aria-only::-ms-thumb{-webkit-appearance:none;-moz-appearance:none;width:0;height:0;border-radius:0;border:0 none;background:none;display:none}.sky-grid-heading .sky-grid-column-input-aria-only::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;width:0;height:0;border-radius:0;border:0 none;background:none;display:none}.sky-grid-heading .sky-grid-column-input-aria-only:focus{background-color:#00b4f1}.sky-grid-column-alignment-left{text-align:left}.sky-grid-column-alignment-center{text-align:center}.sky-grid-column-alignment-right{text-align:right}.sky-grid-multiselect-cell{padding:0;text-align:center}.sky-grid-multiselect-cell ::ng-deep .sky-switch-control{margin:0 auto}th.sky-grid-multiselect-cell{cursor:default}th.sky-grid-multiselect-cell .screen-reader-only{width:0;height:0;padding:0;opacity:0;position:absolute;margin:-1px;border:0;overflow:hidden;clip:rect(0,0,0,0);outline:none;white-space:nowrap}@-moz-document url-prefix(){.sky-grid-multiselect-row td{border-left:0px solid transparent;border-right:0px solid transparent}}.sky-grid-multiselect-row:hover{background-color:#e9e4f1}.sky-grid-multiselect-row:hover:nth-child(odd){background:#e9e4f1}.sky-grid-multiselect-selected-row{background:#f1eef6;border-top:1px solid #dadbf6;border-bottom:1px solid #dadbf6}.sky-grid-multiselect-selected-row:nth-child(odd){background:#f1eef6}.sky-grid-has-toolbar .sky-grid-heading{border-top-width:0px}.sky-grid-heading-sort.sky-grid-heading-sort-hidden{visibility:hidden}.sky-grid-heading-sort.sky-grid-heading-sort-visible{visibility:visible;padding-left:5px}.sky-grid-resize-handle{position:absolute;right:0;top:0;bottom:0;width:30px;z-index:2;min-height:20px;height:100%!important;vertical-align:middle;cursor:col-resize}.sky-grid-resize-handle:hover:after{background-color:#00b4f1}.sky-grid-resize-handle:after{position:absolute;right:0;top:0;bottom:0;width:5px;height:100%;content:\"\"}.sky-grid-resize-bar{position:absolute;top:0;left:0;z-index:99;height:100%;width:5px;background:#00b4f1;opacity:.6}tr{position:relative}.sky-grid-top-scroll-container{overflow:auto}.sky-grid-top-scroll{height:1px}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.DragulaDirective, selector: "[dragula]", inputs: ["dragula", "dragulaModel"], outputs: ["dragulaModelChange"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.RangeValueAccessor, selector: "input[type=range][formControlName],input[type=range][formControl],input[type=range][ngModel]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.λ3, selector: "sky-checkbox", inputs: ["label", "labelledBy", "id", "disabled", "tabindex", "name", "helpPopoverContent", "helpPopoverTitle", "icon", "checkboxType", "checked", "indeterminate", "required", "labelText", "labelHidden", "hintText", "stacked"], outputs: ["change", "checkedChange", "disabledChange", "indeterminateChange"] }, { kind: "component", type: i7.λ3, selector: "sky-help-inline", inputs: ["ariaControls", "ariaExpanded", "ariaLabel"], outputs: ["actionClick"] }, { kind: "component", type: i7.λ4, selector: "sky-icon", inputs: ["icon", "iconType", "size", "fixedWidth", "variant"] }, { kind: "component", type: i8.λ8, selector: "sky-inline-delete", inputs: ["pending"], outputs: ["cancelTriggered", "deleteTriggered"] }, { kind: "directive", type: i9.λ7, selector: "[skyPopover]", inputs: ["skyPopover", "skyPopoverAlignment", "skyPopoverMessageStream", "skyPopoverPlacement", "skyPopoverTrigger"] }, { kind: "directive", type: i7.SkyTextHighlightDirective, selector: "[skyHighlight]", inputs: ["skyHighlight"] }, { kind: "component", type: i10.SkyGridCellComponent, selector: "sky-grid-cell", inputs: ["item", "columnId", "template", "fieldSelector"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i11.SkyLibResourcesPipe, name: "skyLibResources" }], viewProviders: [DragulaService], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
959
959
|
}
|
|
960
960
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: SkyGridComponent, decorators: [{
|
|
961
961
|
type: Component,
|
|
@@ -1033,4 +1033,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImpor
|
|
|
1033
1033
|
type: HostListener,
|
|
1034
1034
|
args: ['window:resize']
|
|
1035
1035
|
}] } });
|
|
1036
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZ3JpZHMvc3JjL2xpYi9tb2R1bGVzL2dyaWQvZ3JpZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZ3JpZHMvc3JjL2xpYi9tb2R1bGVzL2dyaWQvZ3JpZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxlQUFlLEVBRWYsbUJBQW1CLEVBQ25CLFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUlMLE1BQU0sRUFHTixXQUFXLEVBQ1gsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLHNCQUFzQixHQU12QixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQ0wsYUFBYSxHQUVkLE1BQU0sNEJBQTRCLENBQUM7QUFFcEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM3QyxPQUFPLEVBQ0wsZUFBZSxFQUVmLE9BQU8sRUFFUCxTQUFTLEVBQ1QsS0FBSyxHQUNOLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixHQUFHLEVBQ0gsSUFBSSxFQUNKLFNBQVMsRUFDVCxTQUFTLEdBQ1YsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQU16RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQU0vRCxPQUFPLEVB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dCI6WyJpbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFbGVtZW50UmVmLFxuICBFbnZpcm9ubWVudEluamVjdG9yLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxuICBWaWV3Q2hpbGRyZW4sXG4gIGluamVjdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBTa3lBZmZpeEF1dG9GaXRDb250ZXh0LFxuICBTa3lBZmZpeFNlcnZpY2UsXG4gIFNreUFwcFdpbmRvd1JlZixcbiAgU2t5TG9nU2VydmljZSxcbiAgU2t5T3ZlcmxheVNlcnZpY2UsXG4gIFNreVVJQ29uZmlnU2VydmljZSxcbn0gZnJvbSAnQHNreXV4L2NvcmUnO1xuaW1wb3J0IHtcbiAgTGlzdEl0ZW1Nb2RlbCxcbiAgTGlzdFNvcnRGaWVsZFNlbGVjdG9yTW9kZWwsXG59IGZyb20gJ0Bza3l1eC9saXN0LWJ1aWxkZXItY29tbW9uJztcblxuaW1wb3J0IHsgRHJhZ3VsYVNlcnZpY2UgfSBmcm9tICduZzItZHJhZ3VsYSc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIE9ic2VydmFibGUsXG4gIFN1YmplY3QsXG4gIFN1YnNjcmlwdGlvbixcbiAgZnJvbUV2ZW50LFxuICBtZXJnZSxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcbiAgbWFwLFxuICB0YWtlLFxuICB0YWtlVW50aWwsXG4gIHRha2VXaGlsZSxcbn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBTa3lHcmlkQWRhcHRlclNlcnZpY2UgfSBmcm9tICcuL2dyaWQtYWRhcHRlci5zZXJ2aWNlJztcbmltcG9ydCB7IFNreUdyaWRDb2x1bW5Db21wb25lbnQgfSBmcm9tICcuL2dyaWQtY29sdW1uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTa3lHcmlkQ29sdW1uTW9kZWwgfSBmcm9tICcuL2dyaWQtY29sdW1uLm1vZGVsJztcbmltcG9ydCB7IFNreUdyaWRDb2x1bW5EZXNjcmlwdGlvbk1vZGVsQ2hhbmdlIH0gZnJvbSAnLi90eXBlcy9ncmlkLWNvbHVtbi1kZXNjcmlwdGlvbi1tb2RlbC1jaGFuZ2UnO1xuaW1wb3J0IHsgU2t5R3JpZENvbHVtbkhlYWRpbmdNb2RlbENoYW5nZSB9IGZyb20gJy4vdHlwZXMvZ3JpZC1jb2x1bW4taGVhZGluZy1tb2RlbC1jaGFuZ2UnO1xuaW1wb3J0IHsgU2t5R3JpZENvbHVtbklubGluZUhlbHBQb3BvdmVyTW9kZWxDaGFuZ2UgfSBmcm9tICcuL3R5cGVzL2dyaWQtY29sdW1uLWlubGluZS1oZWxwLXBvcG92ZXItbW9kZWwtY2hhbmdlJztcbmltcG9ydCB7IFNreUdyaWRDb2x1bW5XaWR0aE1vZGVsQ2hhbmdlIH0gZnJvbSAnLi90eXBlcy9ncmlkLWNvbHVtbi13aWR0aC1tb2RlbC1jaGFuZ2UnO1xuaW1wb3J0IHsgU2t5R3JpZE1lc3NhZ2UgfSBmcm9tICcuL3R5cGVzL2dyaWQtbWVzc2FnZSc7XG5pbXBvcnQgeyBTa3lHcmlkTWVzc2FnZVR5cGUgfSBmcm9tICcuL3R5cGVzL2dyaWQtbWVzc2FnZS10eXBlJztcbmltcG9ydCB7IFNreUdyaWRSb3dEZWxldGVDYW5jZWxBcmdzIH0gZnJvbSAnLi90eXBlcy9ncmlkLXJvdy1kZWxldGUtY2FuY2VsLWFyZ3MnO1xuaW1wb3J0IHsgU2t5R3JpZFJvd0RlbGV0ZUNvbmZpZyB9IGZyb20gJy4vdHlwZXMvZ3JpZC1yb3ctZGVsZXRlLWNvbmZpZyc7XG5pbXBvcnQgeyBTa3lHcmlkUm93RGVsZXRlQ29uZmlybUFyZ3MgfSBmcm9tICcuL3R5cGVzL2dyaWQtcm93LWRlbGV0ZS1jb25maXJtLWFyZ3MnO1xuaW1wb3J0IHsgU2t5R3JpZFJvd0RlbGV0ZUNvbnRlbnRzIH0gZnJvbSAnLi90eXBlcy9ncmlkLXJvdy1kZWxldGUtY29udGVudHMnO1xuaW1wb3J0IHsgU2t5R3JpZFNlbGVjdGVkUm93c01vZGVsQ2hhbmdlIH0gZnJvbSAnLi90eXBlcy9ncmlkLXNlbGVjdGVkLXJvd3MtbW9kZWwtY2hhbmdlJztcbmltcG9ydCB7IFNreUdyaWRTZWxlY3RlZFJvd3NTb3VyY2UgfSBmcm9tICcuL3R5cGVzL2dyaWQtc2VsZWN0ZWQtcm93cy1zb3VyY2UnO1xuaW1wb3J0IHsgU2t5R3JpZFVJQ29uZmlnIH0gZnJvbSAnLi90eXBlcy9ncmlkLXVpLWNvbmZpZyc7XG5cbmxldCBuZXh0SWQgPSAwO1xuXG4vKipcbiAqIEBkZXByZWNhdGVkIGBTa3lHcmlkQ29tcG9uZW50YCBhbmQgaXRzIGZlYXR1cmVzIGFyZSBkZXByZWNhdGVkLiBXZSByZWNvbW1lbmQgdXNpbmcgdGhlIGRhdGEgZ3JpZCBpbnN0ZWFkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvY29tcG9uZW50cy9kYXRhLWdyaWRcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2t5LWdyaWQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZ3JpZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2dyaWQuY29tcG9uZW50LnNjc3MnXSxcbiAgdmlld1Byb3ZpZGVyczogW0RyYWd1bGFTZXJ2aWNlXSxcbiAgcHJvdmlkZXJzOiBbU2t5R3JpZEFkYXB0ZXJTZXJ2aWNlXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFNreUdyaWRDb21wb25lbnRcbiAgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95XG57XG4gIC8qKlxuICAgKiBDb2x1bW5zIGFuZCBjb2x1bW4gcHJvcGVydGllcyBmb3IgdGhlIGdyaWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGNvbHVtbnMobmV3Q29sdW1uczogU2t5R3JpZENvbHVtbk1vZGVsW10pIHtcbiAgICBjb25zdCBvbGRDb2x1bW5zID0gdGhpcy5jb2x1bW5zO1xuICAgIHRoaXMuX2NvbHVtbnMgPSBuZXdDb2x1bW5zO1xuICAgIGlmIChvbGRDb2x1bW5zKSB7XG4gICAgICB0aGlzLnRyYW5zZmVyQ29sdW1uV2lkdGhzKG9sZENvbHVtbnMsIHRoaXMuY29sdW1ucyk7XG4gICAgICB0aGlzLmlzUmVzaXplZCA9IGZhbHNlO1xuICAgICAgdGhpcy5zZXREaXNwbGF5ZWRDb2x1bW5zKHRydWUpO1xuICAgIH1cbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHVibGljIGdldCBjb2x1bW5zKCk6IFNreUdyaWRDb2x1bW5Nb2RlbFtdIHtcbiAgICByZXR1cm4gdGhpcy5fY29sdW1ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZGF0YSBmb3IgdGhlIGdyaWQuIEVhY2ggaXRlbSByZXF1aXJlcyBhbiBgaWRgIGFuZCBhIHByb3BlcnR5IHRoYXQgbWFwc1xuICAgKiB0byB0aGUgYGZpZWxkYCBvciBgaWRgIHByb3BlcnR5IG9mIGVhY2ggY29sdW1uIGluIHRoZSBncmlkLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGRhdGE6IGFueVtdO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGVuYWJsZSB0aGUgbXVsdGlzZWxlY3QgZmVhdHVyZSB0byBkaXNwbGF5IGEgY29sdW1uIG9mXG4gICAqIGNoZWNrYm94ZXMgb24gdGhlIGxlZnQgc2lkZSBvZiB0aGUgZ3JpZC4gWW91IGNhbiBzcGVjaWZ5IGEgdW5pcXVlIElEIHdpdGhcbiAgICogdGhlIGBtdWx0aXNlbGVjdFJvd0lkYCBwcm9wZXJ0eSwgYnV0IG11bHRpc2VsZWN0IGRlZmF1bHRzIHRvIHRoZSBgaWRgIHByb3BlcnR5IG9uXG4gICAqIHRoZSBgZGF0YWAgb2JqZWN0LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGVuYWJsZU11bHRpc2VsZWN0ID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEhvdyB0aGUgZ3JpZCBmaXRzIHRvIGl0cyBwYXJlbnQuIFRoZSB2YWxpZCBvcHRpb25zIGFyZSBgd2lkdGhgLFxuICAgKiB3aGljaCBmaXRzIHRoZSBncmlkIHRvIHRoZSBwYXJlbnQncyBmdWxsIHdpZHRoLCBhbmQgYHNjcm9sbGAsIHdoaWNoIGFsbG93cyB0aGUgZ3JpZFxuICAgKiB0byBleGNlZWQgdGhlIHBhcmVudCdzIHdpZHRoLiBJZiB0aGUgZ3JpZCBkb2VzIG5vdCBoYXZlIGVub3VnaCBjb2x1bW5zIHRvIGZpbGxcbiAgICogdGhlIHBhcmVudCdzIHdpZHRoLCBpdCBhbHdheXMgc3RyZXRjaGVzIHRvIHRoZSBwYXJlbnQncyBmdWxsIHdpZHRoLlxuICAgKiBAZGVmYXVsdCBcIndpZHRoXCJcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBmaXQgPSAnd2lkdGgnO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGRpc3BsYXkgYSB0b29sYmFyIHdpdGggdGhlIGdyaWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaGFzVG9vbGJhciA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBncmlkLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGhlaWdodDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUZXh0IHRvIGhpZ2hsaWdodCB3aXRoaW4gdGhlIGdyaWQuXG4gICAqIFR5cGljYWxseSwgdGhpcyBwcm9wZXJ0eSBpcyB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggc2VhcmNoLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGhpZ2hsaWdodFRleHQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG9ic2VydmFibGUgdG8gc2VuZCBjb21tYW5kcyB0byB0aGUgZ3JpZC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBtZXNzYWdlU3RyZWFtID0gbmV3IFN1YmplY3Q8U2t5R3JpZE1lc3NhZ2U+KCk7XG5cbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUgSUQgdGhhdCBtYXRjaGVzIGEgcHJvcGVydHkgb24gdGhlIGBkYXRhYCBvYmplY3QuXG4gICAqIEJ5IGRlZmF1bHQsIHRoaXMgcHJvcGVydHkgdXNlcyB0aGUgYGlkYCBwcm9wZXJ0eS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBtdWx0aXNlbGVjdFJvd0lkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgcm93IHRvIGhpZ2hsaWdodC4gVGhlIElEIG1hdGNoZXMgdGhlIGBpZGAgcHJvcGVydHlcbiAgICogb2YgdGhlIGBkYXRhYCBvYmplY3QuIFR5cGljYWxseSwgdGhpcyBwcm9wZXJ0eSBpcyB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGhcbiAgICogdGhlIGZseW91dCBjb21wb25lbnQgdG8gaW5kaWNhdGUgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCByb3cuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgcm93SGlnaGxpZ2h0ZWRJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY29sdW1ucyB0byBkaXNwbGF5IGluIHRoZSBncmlkIGJhc2VkIG9uIHRoZSBgaWRgIG9yIGBmaWVsZGAgcHJvcGVydGllc1xuICAgKiBvZiB0aGUgY29sdW1ucy4gSWYgbm8gY29sdW1ucyBhcmUgc3BlY2lmaWVkLCB0aGVuIHRoZSBncmlkIGRpc3BsYXlzIGFsbCBjb2x1bW5zLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBzZWxlY3RlZENvbHVtbklkcyh2YWx1ZTogc3RyaW5nW10pIHtcbiAgICBjb25zdCBjdXJyZW50SWRzID0gdGhpcy5fc2VsZWN0ZWRDb2x1bW5JZHM7XG4gICAgdGhpcy5fc2VsZWN0ZWRDb2x1bW5JZHMgPSB2YWx1ZTtcblxuICAgIGlmICh0aGlzLmNvbHVtbnMpIHtcbiAgICAgIHRoaXMuc2V0RGlzcGxheWVkQ29sdW1ucygpO1xuICAgIH1cblxuICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBpZHMgaGF2ZSBjaGFuZ2VkLlxuICAgIGlmICghY3VycmVudElkcyB8fCAhdmFsdWUgfHwgIXRoaXMuYXJyYXlzRXF1YWwodmFsdWUsIGN1cnJlbnRJZHMpKSB7XG4gICAgICAvLyBUaGlzIHZhcmlhYmxlIGVuc3VyZXMgdGhhdCB3ZSBkbyBub3Qgc2V0IHVzZXIgY29uZmlnIG9wdGlvbnMgb3IgZmlyZSB0aGUgY2hhbmdlIGV2ZW50XG4gICAgICAvLyBvbiB0aGUgZmlyc3QgdGltZSB0aGF0IHRoZSBjb2x1bW5zIGFyZSBzZXQgdXBcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ29sdW1uSWRzU2V0KSB7XG4gICAgICAgIHRoaXMuc2V0VXNlckNvbmZpZyh7XG4gICAgICAgICAgc2VsZWN0ZWRDb2x1bW5JZHM6IHZhbHVlLFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1uSWRzQ2hhbmdlLmVtaXQodGhpcy5fc2VsZWN0ZWRDb2x1bW5JZHMpO1xuXG4gICAgICAgIGlmICh0aGlzLmlzUmVzaXplZCkge1xuICAgICAgICAgIHRoaXMucmVzZXRUYWJsZVdpZHRoKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1uSWRzU2V0ID0gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWRDb2x1bW5JZHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZENvbHVtbklkcztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgc2V0IG9mIElEcyBmb3IgdGhlIHJvd3MgdG8gc2VsZWN0IGluIGEgbXVsdGlzZWxlY3QgZ3JpZC5cbiAgICogVGhlIElEcyBtYXRjaCB0aGUgYGlkYCBwcm9wZXJ0aWVzIG9mIHRoZSBgZGF0YWAgb2JqZWN0cy5cbiAgICogUm93cyB3aXRoIElEcyB0aGF0IGFyZSBub3QgaW5jbHVkZWQgYXJlIGRlLXNlbGVjdGVkIGluIHRoZSBncmlkLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBzZWxlY3RlZFJvd0lkcyh2YWx1ZTogc3RyaW5nW10pIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuX3NlbGVjdGVkUm93SWRzID0gdmFsdWU7XG4gICAgICB0aGlzLmFwcGx5U2VsZWN0ZWRSb3dzKCk7XG4gICAgICB0aGlzLmVtaXRTZWxlY3RlZFJvd3MoU2t5R3JpZFNlbGVjdGVkUm93c1NvdXJjZS5TZWxlY3RlZFJvd0lkc0NoYW5nZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBzZWxlY3RlZFJvd0lkcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkUm93SWRzO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUga2V5IGZvciB0aGUgVUkgQ29uZmlnIFNlcnZpY2UgdG8gcmV0cmlldmUgc3RvcmVkIHNldHRpbmdzIGZyb20gYSBkYXRhYmFzZS5cbiAgICogVGhlIFVJIENvbmZpZyBTZXJ2aWNlIHNhdmVzIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIHVzZXJzIGFuZCByZXR1cm5zXG4gICAqIGBzZWxlY3RlZENvbHVtbklkc2AgdG8gcHJlc2VydmUgdGhlIGNvbHVtbnMgdG8gZGlzcGxheSBhbmQgdGhlIHByZWZlcnJlZCBjb2x1bW4gb3JkZXIuIFlvdSAgbXVzdCBwcm92aWRlIGBpZGAgdmFsdWVzIGZvciB5b3VyIGBza3ktZ3JpZC1jb2x1bW5gIGVsZW1lbnRzIGJlY2F1c2UgdGhlIFVJIENvbmZpZyBTZXJ2aWNlIGRlcGVuZHMgb24gdGhvc2UgdmFsdWVzIHRvIG9yZ2FuaXplIGNvbHVtbnMgYmFzZWQgb24gdXNlciBzZXR0aW5ncy4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIFVJIENvbmZpZyBTZXJ2aWNlLCBzZWUgW3RoZSBzdGlja3kgc2V0dGluZ3MgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9kZXZlbG9wZXIuYmxhY2tiYXVkLmNvbS9za3l1eC9sZWFybi9kZXZlbG9wL3N0aWNreS1zZXR0aW5ncykuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0dGluZ3NLZXk6IHN0cmluZztcblxuICAvKipcbiAgICogRGlzcGxheXMgYSBjYXJldCBpbiB0aGUgY29sdW1uIHRoYXQgd2FzIHVzZWQgdG8gc29ydCB0aGUgZ3JpZC4gVGhpcyBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsXG4gICAqIHdoZW4geW91IHByb2dyYW1tYXRpY2FsbHkgc29ydCBkYXRhIGFuZCB3YW50IHRvIHZpc3VhbGx5IGluZGljYXRlIGhvdyB0aGUgZ3JpZCB3YXMgc29ydGVkLlxuICAgKiBUaGlzIHByb3BlcnR5IGFjY2VwdHMgYSBgTGlzdFNvcnRGaWVsZFNlbGVjdG9yTW9kZWxgIHZhbHVlIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICAgKiAtIGBmaWVsZFNlbGVjdG9yYCBSZXByZXNlbnRzIHRoZSBjdXJyZW50IHNvcnQgZmllbGQuIFRoaXMgcHJvcGVydHkgYWNjZXB0cyBgc3RyaW5nYCB2YWx1ZXMuXG4gICAqIC0gYGRlc2NlbmRpbmdgIEluZGljYXRlcyB3aGV0aGVyIHRvIHNvcnQgaW4gZGVzY2VuZGluZyBvcmRlci4gVGhlIGNhcmV0IHRoYXQgdmlzdWFsbHlcbiAgICogaW5kaWNhdGVzIHRoZSBzb3J0IG9yZGVyIHBvaW50cyBkb3duIGZvciBkZXNjZW5kaW5nIG9yZGVyIGFuZCB1cCBmb3IgYXNjZW5kaW5nIG9yZGVyLlxuICAgKiBUaGlzIHByb3BlcnR5IGFjY2VwdHMgYGJvb2xlYW5gIHZhbHVlcy4gRGVmYXVsdCBpcyBgZmFsc2VgLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNvcnRGaWVsZDogTGlzdFNvcnRGaWVsZFNlbGVjdG9yTW9kZWw7XG5cbiAgLyoqXG4gICAqIFRoZSB3aWR0aCBvZiB0aGUgZ3JpZCBpbiBwaXhlbHMuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgd2lkdGg6IG51bWJlcjtcblxuICAvKipcbiAgICogRmlyZXMgd2hlbiB0aGUgd2lkdGggb2YgYSBjb2x1bW4gY2hhbmdlcy5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgY29sdW1uV2lkdGhDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFxuICAgIFNreUdyaWRDb2x1bW5XaWR0aE1vZGVsQ2hhbmdlW11cbiAgPigpO1xuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHRoZSBzZWxlY3Rpb24gb2YgbXVsdGlzZWxlY3QgY2hlY2tib3hlcyBjaGFuZ2VzLlxuICAgKiBFbWl0cyBhbiBhcnJheSBvZiBJRHMgZm9yIHRoZSBzZWxlY3RlZCByb3dzIGJhc2VkIG9uIHRoZSBgbXVsdGlzZWxlY3RSb3dJZGAgcHJvcGVydHlcbiAgICogdGhhdCB0aGUgY29uc3VtZXIgcHJvdmlkZXMuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIG11bHRpc2VsZWN0U2VsZWN0aW9uQ2hhbmdlID1cbiAgICBuZXcgRXZlbnRFbWl0dGVyPFNreUdyaWRTZWxlY3RlZFJvd3NNb2RlbENoYW5nZT4oKTtcblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIHJvd0RlbGV0ZUNhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXI8U2t5R3JpZFJvd0RlbGV0ZUNhbmNlbEFyZ3M+KCk7XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyByb3dEZWxldGVDb25maXJtID0gbmV3IEV2ZW50RW1pdHRlcjxTa3lHcmlkUm93RGVsZXRlQ29uZmlybUFyZ3M+KCk7XG5cbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gdGhlIGNvbHVtbnMgdG8gZGlzcGxheSBpbiB0aGUgZ3JpZCBjaGFuZ2Ugb3Igd2hlbiB0aGUgb3JkZXIgb2YgdGhlIGNvbHVtbnMgY2hhbmdlcy5cbiAgICogVGhlIGV2ZW50IGVtaXRzIGFuIGFycmF5IG9mIElEcyBmb3IgdGhlIGRpc3BsYXllZCBjb2x1bW5zIHRoYXQgcmVmbGVjdHMgdGhlIGNvbHVtbiBvcmRlci5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgc2VsZWN0ZWRDb2x1bW5JZHNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZ1tdPigpO1xuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHRoZSBhY3RpdmUgc29ydCBmaWVsZCBjaGFuZ2VzLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBzb3J0RmllbGRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPExpc3RTb3J0RmllbGRTZWxlY3Rvck1vZGVsPigpO1xuXG4gIHB1YmxpYyBjb2x1bW5SZXNpemVTdGVwID0gMTA7XG4gIHB1YmxpYyBjdXJyZW50U29ydEZpZWxkOiBCZWhhdmlvclN1YmplY3Q8TGlzdFNvcnRGaWVsZFNlbGVjdG9yTW9kZWw+O1xuICBwdWJsaWMgZGlzcGxheWVkQ29sdW1uczogU2t5R3JpZENvbHVtbk1vZGVsW107XG4gIHB1YmxpYyBkcmFndWxhR3JvdXBOYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyBncmlkSWQ6IG51bWJlciA9ICsrbmV4dElkO1xuICBwdWJsaWMgcm93RGVsZXRlQ29uZmlnczogU2t5R3JpZFJvd0RlbGV0ZUNvbmZpZ1tdID0gW107XG4gIHB1YmxpYyBpdGVtczogYW55W107XG4gIHB1YmxpYyBtYXhDb2xXaWR0aCA9IDk5OTk7IC8vIFRoaXMgaXMgYW4gYXJiaXRyYXJ5IG51bWJlciwgYXMgdGhlIGlucHV0IHJhbmdlIHBpY2tlciB3b24ndCB3b3JrIHdpdGhvdXQgYSB2YWx1ZS5cbiAgcHVibGljIG1pbkNvbFdpZHRoID0gNTA7XG4gIHB1YmxpYyBzaG93UmVzaXplQmFyID0gZmFsc2U7XG4gIHB1YmxpYyBzaG93VG9wU2Nyb2xsID0gZmFsc2U7XG5cbiAgcHVibGljIGdldCB0YWJsZVdpZHRoKCkge1xuICAgIHJldHVybiB0aGlzLnRhYmxlRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuICB9XG5cbiAgQENvbnRlbnRDaGlsZHJlbihTa3lHcmlkQ29sdW1uQ29tcG9uZW50KVxuICBwcml2YXRlIGNvbHVtbkNvbXBvbmVudHM6IFF1ZXJ5TGlzdDxTa3lHcmlkQ29sdW1uQ29tcG9uZW50PjtcblxuICBAVmlld0NoaWxkcmVuKCdncmlkQ29sJylcbiAgcHJpdmF0ZSBjb2x1bW5FbGVtZW50UmVmczogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuICBAVmlld0NoaWxkcmVuKCdjb2xTaXplUmFuZ2UnKVxuICBwcml2YXRlIGNvbHVtblJhbmdlSW5wdXRFbGVtZW50UmVmczogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuICBAVmlld0NoaWxkcmVuKCdpbmxpbmVEZWxldGVSZWYnKVxuICBwcml2YXRlIGlubGluZURlbGV0ZVJlZnM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcbiAgQFZpZXdDaGlsZCgnaW5saW5lRGVsZXRlVGVtcGxhdGVSZWYnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gIHByaXZhdGUgaW5saW5lRGVsZXRlVGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPHVua25vd24+O1xuICBAVmlld0NoaWxkKCdncmlkQ29udGFpbmVyJylcbiAgcHJpdmF0ZSB0YWJsZUNvbnRhaW5lckVsZW1lbnRSZWY6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2dyaWRUYWJsZScpXG4gIHByaXZhdGUgdGFibGVFbGVtZW50UmVmOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCd0b3BTY3JvbGxDb250YWluZXInKVxuICBwcml2YXRlIHRvcFNjcm9sbENvbnRhaW5lckVsZW1lbnRSZWY6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3Jlc2l6ZUJhcicpXG4gIHByaXZhdGUgcmVzaXplQmFyOiBFbGVtZW50UmVmO1xuXG4gIHByaXZhdGUgYWN0aXZlUmVzaXplQ29sdW1uSW5kZXg6IHN0cmluZztcbiAgcHJpdmF0ZSBpc0RyYWdnaW5nUmVzaXplSGFuZGxlID0gZmFsc2U7XG4gIHByaXZhdGUgaXNSZXNpemVkID0gZmFsc2U7XG4gIHByaXZhdGUgbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgcm93RGVsZXRlQ29udGVudHM6IFJlY29yZDxzdHJpbmcsIFNreUdyaWRSb3dEZWxldGVDb250ZW50cz4gPSB7fTtcbiAgcHJpdmF0ZSBzdGFydENvbHVtbldpZHRoOiBudW1iZXI7XG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcbiAgcHJpdmF0ZSBzY3JvbGxUcmlnZ2VyZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBzZWxlY3RlZENvbHVtbklkc1NldCA9IGZhbHNlO1xuICBwcml2YXRlIHhQb3NTdGFydDogbnVtYmVyO1xuXG4gIHByaXZhdGUgX2NvbHVtbnM6IFNreUdyaWRDb2x1bW5Nb2RlbFtdO1xuICBwcml2YXRlIF9zZWxlY3RlZENvbHVtbklkczogc3RyaW5nW107XG4gIHByaXZhdGUgX3NlbGVjdGVkUm93SWRzOiBzdHJpbmdbXTtcblxuICByZWFkb25seSAjZW52aXJvbm1lbnRJbmplY3RvciA9IGluamVjdChFbnZpcm9ubWVudEluamVjdG9yKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFmZml4U2VydmljZTogU2t5QWZmaXhTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgZHJhZ3VsYVNlcnZpY2U6IERyYWd1bGFTZXJ2aWNlLFxuICAgIHByaXZhdGUgZ3JpZEFkYXB0ZXI6IFNreUdyaWRBZGFwdGVyU2VydmljZSxcbiAgICBwcml2YXRlIG92ZXJsYXlTZXJ2aWNlOiBTa3lPdmVybGF5U2VydmljZSxcbiAgICBwcml2YXRlIHNreVdpbmRvdzogU2t5QXBwV2luZG93UmVmLFxuICAgIHByaXZhdGUgdWlDb25maWdTZXJ2aWNlOiBTa3lVSUNvbmZpZ1NlcnZpY2UsXG4gICAgbG9nZ2VyOiBTa3lMb2dTZXJ2aWNlLFxuICApIHtcbiAgICBsb2dnZXIuZGVwcmVjYXRlZCgnU2t5R3JpZENvbXBvbmVudCcsIHtcbiAgICAgIGRlcHJlY2F0aW9uTWFqb3JWZXJzaW9uOiA2LFxuICAgICAgbW9yZUluZm9Vcmw6ICdodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2NvbXBvbmVudHMvZGF0YS1ncmlkJyxcbiAgICAgIHJlcGxhY2VtZW50UmVjb21tZW5kYXRpb246ICdVc2UgZGF0YSBncmlkIGluc3RlYWQuJyxcbiAgICB9KTtcblxuICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IG5ldyBBcnJheTxTa3lHcmlkQ29sdW1uTW9kZWw+KCk7XG4gICAgdGhpcy5pdGVtcyA9IG5ldyBBcnJheTxhbnk+KCk7XG4gICAgdGhpcy5jdXJyZW50U29ydEZpZWxkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxMaXN0U29ydEZpZWxkU2VsZWN0b3JNb2RlbD4oe1xuICAgICAgZmllbGRTZWxlY3RvcjogJycsXG4gICAgICBkZXNjZW5kaW5nOiBmYWxzZSxcbiAgICB9KTtcbiAgICB0aGlzLmRyYWd1bGFHcm91cE5hbWUgPSBgc2t5LWdyaWRzLWdyb3VwLSR7dGhpcy5ncmlkSWR9YDtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLm1lc3NhZ2VTdHJlYW1cbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgobWVzc2FnZTogU2t5R3JpZE1lc3NhZ2UpID0+IHtcbiAgICAgICAgdGhpcy5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKG1lc3NhZ2UpO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIGlmICh0aGlzLnNldHRpbmdzS2V5KSB7XG4gICAgICB0aGlzLmFwcGx5VXNlckNvbmZpZygpLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLmluaXRDb2x1bW5zKCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbml0Q29sdW1ucygpO1xuICAgIH1cblxuICAgIC8vIFNldHVwIGNvbHVtbiBkcmFnLWFuZC1kcm9wLlxuICAgIHRoaXMuZ3JpZEFkYXB0ZXIuaW5pdGlhbGl6ZURyYWdBbmREcm9wKFxuICAgICAgdGhpcy5kcmFndWxhR3JvdXBOYW1lLFxuICAgICAgdGhpcy5kcmFndWxhU2VydmljZSxcbiAgICAgIChzZWxlY3RlZENvbHVtbklkczogc3RyaW5nW10pID0+IHtcbiAgICAgICAgdGhpcy5vbkhlYWRlckRyb3Aoc2VsZWN0ZWRDb2x1bW5JZHMpO1xuICAgICAgfSxcbiAgICApO1xuXG4gICAgdGhpcy5hcHBseVNlbGVjdGVkUm93cygpO1xuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLmNoZWNrVXNlckNvbHVtbldpZHRoc0ZvclNjcm9sbCgpO1xuICB9XG5cbiAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlc1snY29sdW1ucyddICYmIHRoaXMuY29sdW1ucykge1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb2x1bW5JZHMpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbklkcyA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5JZHMuZmlsdGVyKChjb2x1bW5JZCkgPT4ge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbHVtbnMuZmluZCgoY29sdW1uKSA9PiBjb2x1bW4uaWQgPT09IGNvbHVtbklkKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLnNldERpc3BsYXllZENvbHVtbnModHJ1ZSk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXNbJ2RhdGEnXSAmJiB0aGlzLmRhdGEpIHtcbiAgICAgIHRoaXMudHJhbnNmb3JtRGF0YSgpO1xuXG4gICAgICAvLyBUaGlzIHNldCB0aW1lb3V0IGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhlIGRhdGEgaGFzIHJlbmRlcmVkIGluIHRoZSBncmlkXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgLy8gVGhpcyBjbGVhbnMgdXAgYW55IGxpbmdlcmluZyByb3cgZGVsZXRlcyBmb3IgaXRlbXMgdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZC5cbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5yb3dEZWxldGVDb250ZW50cykuZm9yRWFjaCgoaWQpID0+IHtcbiAgICAgICAgICBpZiAoIXRoaXMuZGF0YS5maW5kKChpdGVtKSA9PiBpdGVtLmlkID09PSBpZCkpIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdHJveVJvd0RlbGV0ZShpZCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFRoZSByb3dzIHJlLXJlbmRlciB0aHVzIG1lc3NpbmcgdXAgdGhlIGFmZml4ZXJzLiBXZSBtdXN0IHJlYWZmaXggdGhlbSBzbyB0aGF0IHRoaW5nc1xuICAgICAgICAgICAgLy8gY29udGludWUgdG8gcmVuZGVyIGNvcnJlY3RseS5cbiAgICAgICAgICAgIGNvbnN0IHJvd0VsZW1lbnQ6IEhUTUxFbGVtZW50ID1cbiAgICAgICAgICAgICAgdGhpcy50YWJsZUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAgICAgICAgICdbc2t5LWNtcC1pZD1cIicgKyBpZCArICdcIl0nLFxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICB0aGlzLnJvd0RlbGV0ZUNvbnRlbnRzW2lkXS5hZmZpeGVyLmFmZml4VG8ocm93RWxlbWVudCwge1xuICAgICAgICAgICAgICBhdXRvRml0Q29udGV4dDogU2t5QWZmaXhBdXRvRml0Q29udGV4dC5WaWV3cG9ydCxcbiAgICAgICAgICAgICAgaXNTdGlja3k6IHRydWUsXG4gICAgICAgICAgICAgIHBsYWNlbWVudDogJ2Fib3ZlJyxcbiAgICAgICAgICAgICAgdmVydGljYWxBbGlnbm1lbnQ6ICd0b3AnLFxuICAgICAgICAgICAgICBob3Jpem9udGFsQWxpZ25tZW50OiAnbGVmdCcsXG4gICAgICAgICAgICAgIGVuYWJsZUF1dG9GaXQ6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmNoZWNrVXNlckNvbHVtbldpZHRoc0ZvclNjcm9sbCgpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXNbJ3NvcnRGaWVsZCddKSB7XG4gICAgICB0aGlzLnNldFNvcnRIZWFkZXJzKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKChzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbikgPT4ge1xuICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfSk7XG4gICAgdGhpcy5tdWx0aXNlbGVjdFNlbGVjdGlvbkNoYW5nZS5jb21wbGV0ZSgpO1xuXG4gICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKTtcbiAgICB0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcblxuICAgIE9iamVjdC5rZXlzKHRoaXMucm93RGVsZXRlQ29udGVudHMpLmZvckVhY2goKGlkKSA9PiB7XG4gICAgICB0aGlzLmRlc3Ryb3lSb3dEZWxldGUoaWQpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5kcmFndWxhU2VydmljZS5kZXN0cm95KHRoaXMuZHJhZ3VsYUdyb3VwTmFtZSk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJylcbiAgcHVibGljIG9uV2luZG93UmVzaXplKCk6IHZvaWQge1xuICAgIHRoaXMuY2hlY2tVc2VyQ29sdW1uV2lkdGhzRm9yU2Nyb2xsKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0VG9wU2Nyb2xsV2lkdGgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50YWJsZUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zY3JvbGxXaWR0aDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRUYWJsZUNsYXNzTmFtZXMoKSB7XG4gICAgY29uc3QgY2xhc3NOYW1lczogc3RyaW5nW10gPSBbXTtcblxuICAgIGlmICh0aGlzLmZpdCAhPT0gJ3Njcm9sbCcpIHtcbiAgICAgIGNsYXNzTmFtZXMucHVzaCgnc2t5LWdyaWQtZml0Jyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaGFzVG9vbGJhcikge1xuICAgICAgY2xhc3NOYW1lcy5wdXNoKCdza3ktZ3JpZC1oYXMtdG9vbGJhcicpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmFkZERlbGltaXRlcihjbGFzc05hbWVzLCAnICcpO1xuICB9XG5cbiAgcHVibGljIGdldFRhYmxlSGVhZGVyQ2xhc3NOYW1lcyhjb2x1bW46IFNreUdyaWRDb2x1bW5Nb2RlbCkge1xuICAgIGNvbnN0IGNsYXNzTmFtZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICBpZiAoY29sdW1uICYmIGNvbHVtbi5sb2NrZWQpIHtcbiAgICAgIGNsYXNzTmFtZXMucHVzaCgnc2t5LWdyaWQtaGVhZGVyLWxvY2tlZCcpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmFkZERlbGltaXRlcihjbGFzc05hbWVzLCAnICcpO1xuICB9XG5cbiAgcHVibGljIGdldENhcmV0SWNvbk5hbWVzKGNvbHVtbjogU2t5R3JpZENvbHVtbk1vZGVsKSB7XG4gICAgY29uc3QgaWNvbk5hbWVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgdGhpcy5nZXRTb3J0RGlyZWN0aW9uKGNvbHVtbi5maWVsZCkuc3Vic2NyaWJlKChzb3J0RGlyKSA9PiB7XG4gICAgICBpZiAoc29ydERpciA9PT0gJ2FzYycpIHtcbiAgICAgICAgaWNvbk5hbWVzLnB1c2goJ2NhcmV0LXVwJyk7XG4gICAgICB9XG4gICAgICBpZiAoc29ydERpciA9PT0gJ2Rlc2MnKSB7XG4gICAgICAgIGljb25OYW1lcy5wdXNoKCdjYXJldC1kb3duJyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5hZGREZWxpbWl0ZXIoaWNvbk5hbWVzLCAnICcpO1xuICB9XG5cbiAgcHVibGljIG9uS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCwgY29sdW1uOiBTa3lHcmlkQ29sdW1uTW9kZWwpIHtcbiAgICBjb25zdCBrZXkgPSBldmVudC5rZXkudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoa2V5ID09PSAnZW50ZXInIHx8IGtleSA9PT0gJyAnKSB7XG4gICAgICB0aGlzLnNvcnRCeUNvbHVtbihjb2x1bW4pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzb3J0QnlDb2x1bW4oY29sdW1uOiBTa3lHcmlkQ29sdW1uTW9kZWwpIHtcbiAgICBpZiAoIXRoaXMuaXNEcmFnZ2luZ1Jlc2l6ZUhhbmRsZSAmJiBjb2x1bW4uaXNTb3J0YWJsZSkge1xuICAgICAgdGhpcy5jdXJyZW50U29ydEZpZWxkXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgbWFwKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgbGV0IHNlbGVjdG9yID0ge1xuICAgICAgICAgICAgICBmaWVsZFNlbGVjdG9yOiBjb2x1bW4uZmllbGQsXG4gICAgICAgICAgICAgIGRlc2NlbmRpbmc6IHRydWUsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGZpZWxkICYmXG4gICAgICAgICAgICAgIGZpZWxkLmZpZWxkU2VsZWN0b3IgPT09IGNvbHVtbi5maWVsZCAmJlxuICAgICAgICAgICAgICBmaWVsZC5kZXNjZW5kaW5nXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgc2VsZWN0b3IgPSB7XG4gICAgICAgICAgICAgICAgZmllbGRTZWxlY3RvcjogY29sdW1uLmZpZWxkLFxuICAgICAgICAgICAgICAgIGRlc2NlbmRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zb3J0RmllbGRDaGFuZ2UuZW1pdChzZWxlY3Rvcik7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTb3J0RmllbGQubmV4dChzZWxlY3Rvcik7XG4gICAgICAgICAgfSksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRTb3J0RGlyZWN0aW9uKGNvbHVtbkZpZWxkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRTb3J0RmllbGQucGlwZShcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICBtYXAoKGZpZWxkKSA9PiB7XG4gICAgICAgIHJldHVybiBmaWVsZC5maWVsZFNlbGVjdG9yID09PSBjb2x1bW5GaWVsZFxuICAgICAgICAgID8gZmllbGQuZGVzY2VuZGluZ1xuICAgICAgICAgICAgPyAnZGVzYydcbiAgICAgICAgICAgIDogJ2FzYydcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0QXJpYVNvcnREaXJlY3Rpb24oY29sdW1uOiBTa3lHcmlkQ29sdW1uTW9kZWwpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRTb3J0RmllbGQucGlwZShcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICBtYXAoKGZpZWxkKSA9PiB7XG4gICAgICAgIHJldHVybiBmaWVsZC5maWVsZFNlbGVjdG9yID09PSBjb2x1bW4uZmllbGRcbiAgICAgICAgICA/IGZpZWxkLmRlc2NlbmRpbmdcbiAgICAgICAgICAgID8gJ2Rlc2NlbmRpbmcnXG4gICAgICAgICAgICA6ICdhc2NlbmRpbmcnXG4gICAgICAgICAgOiBjb2x1bW4uaXNTb3J0YWJsZVxuICAgICAgICAgICAgPyAnbm9uZSdcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDYXJldFZpc2liaWxpdHkoY29sdW1uRmllbGQ6IHN0cmluZyk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFNvcnRGaWVsZC5waXBlKFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIG1hcCgoZmllbGQpID0+IHtcbiAgICAgICAgcmV0dXJuIGZpZWxkLmZpZWxkU2VsZWN0b3IgPT09IGNvbHVtbkZpZWxkID8gJ3Zpc2libGUnIDogJ2hpZGRlbic7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldEhlbHBJbmxpbmVDbGFzcyhjb2x1bW5GaWVsZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q2FyZXRWaXNpYmlsaXR5KGNvbHVtbkZpZWxkKS5waXBlKFxuICAgICAgbWFwKCh2aXNpYmlsaXR5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgcmV0dXJuIHZpc2liaWxpdHkgPT09ICdoaWRkZW4nO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBvbk11bHRpc2VsZWN0Q2hlY2tib3hDaGFuZ2UoKSB7XG4gICAgdGhpcy5lbWl0U2VsZWN0ZWRSb3dzKFNreUdyaWRTZWxlY3RlZFJvd3NTb3VyY2UuQ2hlY2tib3hDaGFuZ2UpO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZUNvbHVtbkhlYWRpbmcoY2hhbmdlOiBTa3lHcmlkQ29sdW1uSGVhZGluZ01vZGVsQ2hhbmdlKSB7XG4gICAgY29uc3QgZm91bmRDb2x1bW5Nb2RlbCA9IHRoaXMuY29sdW1ucy5maW5kKChjb2x1bW46IFNreUdyaWRDb2x1bW5Nb2RlbCkgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgKGNoYW5nZS5pZCAhPT0gdW5kZWZpbmVkICYmIGNoYW5nZS5pZCA9PT0gY29sdW1uLmlkKSB8fFxuICAgICAgICAoY2hhbmdlLmZpZWxkICE9PSB1bmRlZmluZWQgJiYgY2hhbmdlLmZpZWxkID09PSBjb2x1bW4uZmllbGQpXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoZm91bmRDb2x1bW5Nb2RlbCkge1xuICAgICAgZm91bmRDb2x1bW5Nb2RlbC5oZWFkaW5nID0gY2hhbmdlLnZhbHVlO1xuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlSW5saW5lSGVscFBvcG92ZXIoXG4gICAgY2hhbmdlOiBTa3lHcmlkQ29sdW1uSW5saW5lSGVscFBvcG92ZXJNb2RlbENoYW5nZSxcbiAgKSB7XG4gICAgY29uc3QgZm91bmRDb2x1bW5Nb2RlbCA9IHRoaXMuY29sdW1ucy5maW5kKChjb2x1bW46IFNreUdyaWRDb2x1bW5Nb2RlbCkgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgKGNoYW5nZS5pZCAhPT0gdW5kZWZpbmVkICYmIGNoYW5nZS5pZCA9PT0gY29sdW1uLmlkKSB8fFxuICAgICAgICAoY2hhbmdlLmZpZWxkICE9PSB1bmRlZmluZWQgJiYgY2hhbmdlLmZpZWxkID09PSBjb2x1bW4uZmllbGQpXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoZm91bmRDb2x1bW5Nb2RlbCkge1xuICAgICAgZm91bmRDb2x1bW5Nb2RlbC5pbmxpbmVIZWxwUG9wb3ZlciA9IGNoYW5nZS52YWx1ZTtcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHVwZGF0ZUNvbHVtbkRlc2NyaXB0aW9uKGNoYW5nZTogU2t5R3JpZENvbHVtbkRlc2NyaXB0aW9uTW9kZWxDaGFuZ2UpIHtcbiAgICBjb25zdCBmb3VuZENvbHVtbk1vZGVsID0gdGhpcy5jb2x1bW5zLmZpbmQoKGNvbHVtbjogU2t5R3JpZENvbHVtbk1vZGVsKSA9PiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAoY2hhbmdlLmlkICE9PSB1bmRlZmluZWQgJiYgY2hhbmdlLmlkID09PSBjb2x1bW4uaWQpIHx8XG4gICAgICAgIChjaGFuZ2UuZmllbGQgIT09IHVuZGVmaW5lZCAmJiBjaGFuZ2UuZmllbGQgPT09IGNvbHVtbi5maWVsZClcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChmb3VuZENvbHVtbk1vZGVsKSB7XG4gICAgICBmb3VuZENvbHVtbk1vZGVsLmRlc2NyaXB0aW9uID0gY2hhbmdlLnZhbHVlO1xuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25SZXNpemVDb2x1bW5TdGFydChldmVudDoge1xuICAgIHN0b3BQcm9wYWdhdGlvbjogKCkgPT4gdm9pZDtcbiAgICBwcmV2ZW50RGVmYXVsdDogKCkgPT4gdm9pZDtcbiAgICBwYWdlWD86IG51bWJlcjtcbiAgfSk6IHZvaWQge1xuICAgIC8vIElmIHRoaXMgdGFibGUgaGFzbid0IGJlZW4gcmVzaXplZCwgaW5pdGlhbGl6ZSBhbGwgdGhlIHJlc2l6ZSB3aWR0aHMuXG4gICAgaWYgKCF0aGlzLmlzUmVzaXplZCkge1xuICAgICAgdGhpcy5pbml0Q29sdW1uV2lkdGhzKCk7XG4gICAgICB0aGlzLmlzUmVzaXplZCA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5pbml0aWFsaXplUmVzaXplQ29sdW1uKGV2ZW50KTtcblxuICAgIHRoaXMuaXNEcmFnZ2luZ1Jlc2l6ZUhhbmRsZSA9IHRydWU7XG4gICAgdGhpcy54UG9zU3RhcnQgPSBldmVudC5wYWdlWDtcbiAgICB0aGlzLnNob3dSZXNpemVCYXIgPSB0cnVlO1xuXG4gICAgLy8gU2hvdyB2aXN1YWwgaW5kaWNhdG9yIG9mIHdoZXJlIG1vdXNlIGlzIGRyYWdnaW5nIChyZXNpemVCYXIpLlxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMuc2V0UmVzaXplQmFyUG9zaXRpb24oZXZlbnQucGFnZVgpO1xuXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIGNvbnN0IG1vdXNlTW92ZUV2ZW50ID0gZnJvbUV2ZW50KGRvY3VtZW50LCAnbW91c2Vtb3ZlJyk7XG4gICAgY29uc3QgdG91Y2hNb3ZlRXZlbnQgPSBmcm9tRXZlbnQoZG9jdW1lbnQsICd0b3VjaG1vdmUnKTtcblxuICAgIG1lcmdlKG1vdXNlTW92ZUV2ZW50LCB0b3VjaE1vdmVFdmVudClcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlV2hpbGUoKCkgPT4ge1xuICAgICAgICAgIHJldHVybiB0aGlzLmlzRHJhZ2dpbmdSZXNpemVIYW5kbGU7XG4gICAgICAgIH0pLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgobW92ZUV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5vblJlc2l6ZUhhbmRsZU1vdmUobW92ZUV2ZW50KTtcbiAgICAgIH0pO1xuXG4gICAgY29uc3QgbW91c2VVcEV2ZW50ID0gZnJvbUV2ZW50KGRvY3VtZW50LCAnbW91c2V1cCcpO1xuICAgIGNvbnN0IHRvdWNoRW5kRXZlbnQgPSBmcm9tRXZlbnQoZG9jdW1lbnQsICd0b3VjaGVuZCcpO1xuXG4gICAgbWVyZ2UobW91c2VVcEV2ZW50LCB0b3VjaEVuZEV2ZW50KVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VXaGlsZSgoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaXNEcmFnZ2luZ1Jlc2l6ZUhhbmRsZTtcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChlbmRFdmVudDogYW55KSA9PiB7XG4gICAgICAgIHRoaXMub25SZXNpemVIYW5kbGVSZWxlYXNlKGVuZEV2ZW50KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG9uS2V5ZG93blJlc2l6ZUNvbChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIC8vIElmIHRoaXMgdGFibGUgaGFzbid0IGJlZW4gcmVzaXplZCwgaW5pdGlhbGl6ZSBhbGwgdGhlIHJlc2l6ZSB3aWR0aHMuXG4gICAgaWYgKCF0aGlzLmlzUmVzaXplZCkge1xuICAgICAgdGhpcy5pbml0Q29sdW1uV2lkdGhzKCk7XG4gICAgICB0aGlzLmlzUmVzaXplZCA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5pbml0aWFsaXplUmVzaXplQ29sdW1uKGV2ZW50KTtcbiAgfVxuXG4gIHB1YmxpYyBvbklucHV0Q2hhbmdlUmVzaXplQ29sKGV2ZW50OiBFdmVudCkge1xuICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgY29uc3QgbmV3VmFsdWUgPSBOdW1iZXIoaW5wdXQudmFsdWUpO1xuICAgIGNvbnN0IGRlbHRhWCA9IG5ld1ZhbHVlIC0gdGhpcy5zdGFydENvbHVtbldpZHRoO1xuICAgIHRoaXMucmVzaXplQ29sdW1uQnlJbmRleCh0aGlzLmFjdGl2ZVJlc2l6ZUNvbHVtbkluZGV4LCBuZXdWYWx1ZSwgZGVsdGFYKTtcbiAgICBjb25zdCBsZWZ0ID0gaW5wdXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcbiAgICB0aGlzLnNldFJlc2l6ZUJhclBvc2l0aW9uKGxlZnQpO1xuICB9XG5cbiAgcHVibGljIG9uUmVzaXplSGFuZGxlTW92ZShldmVudDogTW91c2VFdmVudCkge1xuICAgIGNvbnN0IGRlbHRhWCA9IGV2ZW50LnBhZ2VYIC0gdGhpcy54UG9zU3RhcnQ7XG4gICAgY29uc3QgbmV3Q29sV2lkdGggPSB0aGlzLnN0YXJ0Q29sdW1uV2lkdGggKyBkZWx0YVg7XG5cbiAgICBpZiAobmV3Q29sV2lkdGggPD0gdGhpcy5taW5Db2xXaWR0aCkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbWF4ID0gdGhpcy5nZXRNYXhSYW5nZUJ5SW5kZXgodGhpcy5hY3RpdmVSZXNpemVDb2x1bW5JbmRleCk7XG4gICAgaWYgKHRoaXMuZml0ID09PSAnd2lkdGgnICYmIG5ld0NvbFdpZHRoID4gbWF4KSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNldFJlc2l6ZUJhclBvc2l0aW9uKGV2ZW50LnBhZ2VYKTtcbiAgfVxuXG4gIHB1YmxpYyBvblJlc2l6ZUhhbmRsZUJsdXIoKSB7XG4gICAgdGhpcy5zaG93UmVzaXplQmFyID0gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgb25SZXNpemVIYW5kbGVGb2N1cyhldmVudDogRm9jdXNFdmVudCkge1xuICAgIHRoaXMuc2hvd1Jlc2l6ZUJhciA9IHRydWU7XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgY29uc3QgbGVmdCA9IHRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O1xuICAgIHRoaXMuc2V0UmVzaXplQmFyUG9zaXRpb24obGVmdCk7XG4gIH1cblxuICBwdWJsaWMgb25SZXNpemVIYW5kbGVSZWxlYXNlKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgdGhpcy5zaG93UmVzaXplQmFyID0gZmFsc2U7XG4gICAgY29uc3QgZGVsdGFYID0gZXZlbnQucGFnZVggLSB0aGlzLnhQb3NTdGFydDtcbiAgICBjb25zdCBuZXdDb2xXaWR0aCA9IHRoaXMuc3RhcnRDb2x1bW5XaWR0aCArIGRlbHRhWDtcbiAgICB0aGlzLnJlc2l6ZUNvbHVtbkJ5SW5kZXgodGhpcy5hY3RpdmVSZXNpemVDb2x1bW5JbmRleCwgbmV3Q29sV2lkdGgsIGRlbHRhWCk7XG4gICAgdGhpcy5pc0RyYWdnaW5nUmVzaXplSGFuZGxlID0gZmFsc2U7XG4gICAgdGhpcy5hY3RpdmVSZXNpemVDb2x1bW5JbmRleCA9IHVuZGVmaW5lZDtcblxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwdWJsaWMgb25Sb3dDbGljayhldmVudDogYW55LCBzZWxlY3RlZEl0ZW06IExpc3RJdGVtTW9kZWwpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh0aGlzLmVuYWJsZU11bHRpc2VsZWN0KSB7XG4gICAgICBpZiAoXG4gICAgICAgIGV2ZW50LnRhcmdldCA9PT0gZXZlbnQuY3VycmVudFRhcmdldCB8fFxuICAgICAgICAhdGhpcy5pc0ludGVyYWN0aXZlRWxlbWVudChldmVudClcbiAgICAgICkge1xuICAgICAgICBzZWxlY3RlZEl0ZW0uaXNTZWxlY3RlZCA9ICFzZWxlY3RlZEl0ZW0uaXNTZWxlY3RlZDtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgdGhpcy5lbWl0U2VsZWN0ZWRSb3dzKFNreUdyaWRTZWxlY3RlZFJvd3NTb3VyY2UuUm93Q2xpY2spO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpc1Jvd0hpZ2hsaWdodGVkKGlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5yb3dIaWdobGlnaHRlZElkKSB7XG4gICAgICByZXR1cm4gaWQgPT09IHRoaXMucm93SGlnaGxpZ2h0ZWRJZDtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGdldFJvd0hlaWdodChpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5ncmlkQWRhcHRlci5nZXRSb3dIZWlnaHQodGhpcy50YWJsZUVsZW1lbnRSZWYsIGluZGV4KTtcbiAgfVxuXG4gIHB1YmxpYyBjYW5jZWxSb3dEZWxldGUoaWQ6IHN0cmluZykge1xuICAgIHRoaXMucm93RGVsZXRlQ29uZmlncyA9IHRoaXMucm93RGVsZXRlQ29uZmlncy5maWx0ZXIoXG4gICAgICAoY29uZmlnKSA9PiBjb25maWcuaWQgIT09IGlkLFxuICAgICk7XG4gICAgdGhpcy5yb3dEZWxldGVDYW5jZWwuZW1pdCh7IGlkOiBpZCB9KTtcblxuICAgIHRoaXMuZGVzdHJveVJvd0RlbGV0ZShpZCk7XG4gIH1cblxuICBwdWJsaWMgY29uZmlybVJvd0RlbGV0ZShpZDogc3RyaW5nKSB7XG4gICAgdGhpcy5yb3dEZWxldGVDb25maWdzLmZpbmQoKGNvbmZpZykgPT4gY29uZmlnLmlkID09PSBpZCkucGVuZGluZyA9IHRydWU7XG4gICAgdGhpcy5yb3dEZWxldGVDb25maXJtLmVtaXQoeyBpZDogaWQgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Um93RGVsZXRlSXRlbShpZDogc3RyaW5nKTogU2t5R3JpZFJvd0RlbGV0ZUNvbmZpZyB7XG4gICAgcmV0dXJuIHRoaXMucm93RGVsZXRlQ29uZmlncy5maW5kKChyb3dEZWxldGUpID0+IHJvd0RlbGV0ZS5pZCA9PT0gaWQpO1xuICB9XG5cbiAgLy8gUHJldmVudCB0b3VjaCBkZXZpY2VzIGZyb20gaW5hZHZlcnRlbnRseSBzY3JvbGxpbmcgZ3JpZCB3aGlsZSBkcmFnZ2luZyBjb2x1bW5zLlxuICBwdWJsaWMgb25Ub3VjaE1vdmUoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cblxuICBwdWJsaWMgb25Ub3BTY3JvbGwoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIC8qIHNhbml0eSBjaGVjayAqL1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHRoaXMudGFibGVDb250YWluZXJFbGVtZW50UmVmKSB7XG4gICAgICBpZiAodGhpcy5zY3JvbGxUcmlnZ2VyZWQpIHtcbiAgICAgICAgdGhpcy5zY3JvbGxUcmlnZ2VyZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy50YWJsZUNvbnRhaW5lckVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID1cbiAgICAgICAgICB0aGlzLnRvcFNjcm9sbENvbnRhaW5lckVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zY3JvbGxUcmlnZ2VyZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvbkdyaWRTY3JvbGwoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIC8qIHNhbml0eSBjaGVjayAqL1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHRoaXMudG9wU2Nyb2xsQ29udGFpbmVyRWxlbWVudFJlZikge1xuICAgICAgaWYgKHRoaXMuc2Nyb2xsVHJpZ2dlcmVkKSB7XG4gICAgICAgIHRoaXMuc2Nyb2xsVHJpZ2dlcmVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMudG9wU2Nyb2xsQ29udGFpbmVyRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPVxuICAgICAgICAgIHRoaXMudGFibGVDb250YWluZXJFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2Nyb2xsVHJpZ2dlcmVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNoZWNrVXNlckNvbHVtbldpZHRoc0ZvclNjcm9sbCgpOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5zaG93VG9wU2Nyb2xsICYmXG4gICAgICB0aGlzLmNvbHVtbkVsZW1lbnRSZWZzICYmXG4gICAgICB0aGlzLmNvbHVtbkVsZW1lbnRSZWZzLmxlbmd0aCA+IDBcbiAgICApIHtcbiAgICAgIGxldCBjb2x1bW5zV2lkdGhUb3RhbCA9IDA7XG4gICAgICBjb25zdCB3aW5kb3dTaXplID0gdGhpcy5za3lXaW5kb3cubmF0aXZlV2luZG93LmlubmVyV2lkdGg7XG4gICAgICB0aGlzLmNvbHVtbkVsZW1lbnRSZWZzLmZvckVhY2goKGNvbCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuc2hvd1RvcFNjcm9sbCkge1xuICAgICAgICAgIGNvbnN0IGNvbXB1dGVkV2lkdGggPSBwYXJzZUZsb2F0KFxuICAgICAgICAgICAgd2luZG93LmdldENvbXB1dGVkU3R5bGUoY29sLm5hdGl2ZUVsZW1lbnQpLndpZHRoLFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3Qgb2Zmc2V0V2lkdGggPSBjb2wubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICAgICAgICBjb25zdCB3aWR0aCA9IE1hdGgubWF4KFxuICAgICAgICAgICAgY29tcHV0ZWRXaWR0aCB8fCBvZmZzZXRXaWR0aCxcbiAgICAgICAgICAgIHRoaXMubWluQ29sV2lkdGgsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb2x1bW5zV2lkdGhUb3RhbCA9IGNvbHVtbnNXaWR0aFRvdGFsICsgd2lkdGg7XG4gICAgICAgICAgaWYgKGNvbHVtbnNXaWR0aFRvdGFsID4gd2luZG93U2l6ZSkge1xuICAgICAgICAgICAgdGhpcy5zaG93VG9wU2Nyb2xsID0gdHJ1ZTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG11bHRpc2VsZWN0U2VsZWN0QWxsKCkge1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLml0ZW1zKSB7XG4gICAgICBpdGVtLmlzU2VsZWN0ZWQgPSB0cnVlO1xuICAgIH1cbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgIHRoaXMuZW1pdFNlbGVjdGVkUm93cyhTa3lHcmlkU2VsZWN0ZWRSb3dzU291cmNlLlNlbGVjdEFsbCk7XG4gIH1cblxuICBwcml2YXRlIG11bHRpc2VsZWN0Q2xlYXJBbGwoKSB7XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMuaXRlbXMpIHtcbiAgICAgIGl0ZW0uaXNTZWxlY3RlZCA9IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgIHRoaXMuZW1pdFNlbGVjdGVkUm93cyhTa3lHcmlkU2VsZWN0ZWRSb3dzU291cmNlLkNsZWFyQWxsKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlSW5jb21pbmdNZXNzYWdlcyhtZXNzYWdlOiBTa3lHcmlkTWVzc2FnZSkge1xuICAgIHN3aXRjaCAobWVzc2FnZS50eXBlKSB7XG4gICAgICBjYXNlIFNreUdyaWRNZXNzYWdlVHlwZS5TZWxlY3RBbGw6XG4gICAgICAgIHRoaXMubXVsdGlzZWxlY3RTZWxlY3RBbGwoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgU2t5R3JpZE1lc3NhZ2VUeXBlLkNsZWFyQWxsOlxuICAgICAgICB0aGlzLm11bHRpc2VsZWN0Q2xlYXJBbGwoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFNreUdyaWRNZXNzYWdlVHlwZS5Qcm9tcHREZWxldGVSb3c6XG4gICAgICAgIC8qIHNhbml0eSBjaGVjayAqL1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAobWVzc2FnZS5kYXRhICYmIG1lc3NhZ2UuZGF0YS5wcm9tcHREZWxldGVSb3cpIHtcbiAgICAgICAgICBjb25zdCBleGlzdGluZ0NvbmZpZyA9IHRoaXMucm93RGVsZXRlQ29uZmlncy5maW5kKFxuICAgICAgICAgICAgKGNvbmZpZykgPT4gY29uZmlnLmlkID09PSBtZXNzYWdlLmRhdGEucHJvbXB0RGVsZXRlUm93LmlkLFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGV4aXN0aW5nQ29uZmlnKSB7XG4gICAgICAgICAgICBleGlzdGluZ0NvbmZpZy5wZW5kaW5nID0gZmFsc2U7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucm93RGVsZXRlQ29uZmlncy5wdXNoKHtcbiAgICAgICAgICAgICAgaWQ6IG1lc3NhZ2UuZGF0YS5wcm9tcHREZWxldGVSb3cuaWQsXG4gICAgICAgICAgICAgIHBlbmRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBvdmVybGF5ID0gdGhpcy5vdmVybGF5U2VydmljZS5jcmVhdGUoe1xuICAgICAgICAgICAgICBlbmFibGVTY3JvbGw6IHRydWUsXG4gICAgICAgICAgICAgIHNob3dCYWNrZHJvcDogZmFsc2UsXG4gICAgICAgICAgICAgIGNsb3NlT25OYXZpZ2F0aW9uOiB0cnVlLFxuICAgICAgICAgICAgICBlbmFibGVDbG9zZTogZmFsc2UsXG4gICAgICAgICAgICAgIGVuYWJsZVBvaW50ZXJFdmVudHM6IHRydWUsXG4gICAgICAgICAgICAgIGVudmlyb25tZW50SW5qZWN0b3I6IHRoaXMuI2Vudmlyb25tZW50SW5qZWN0b3IsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgb3ZlcmxheS5hdHRhY2hUZW1wbGF0ZSh0aGlzLmlubGluZURlbGV0ZVRlbXBsYXRlUmVmLCB7XG4gICAgICAgICAgICAgICRpbXBsaWNpdDogdGhpcy5kYXRhLmZpbmQoXG4gICAgICAgICAgICAgICAgKGl0ZW0pID0+IGl0ZW0uaWQgPT09IG1lc3NhZ2UuZGF0YS5wcm9tcHREZWxldGVSb3cuaWQsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBXZSBhcmUgbWFudWFsbHkgc2V0dGluZyB0aGUgei1pbmRleCBoZXJlIGJlY2F1c2Ugb3ZlcmxheXMgd2lsbCBhbHdheXMgYmUgb24gdG9wIG9mXG4gICAgICAgICAgICAgKiB0aGUgb21uaWJhci4gVGhpcyBtYW51YWwgc2V0dGluZyBpcyAxIGxlc3MgdGhhbiB0aGUgb21uaWJhcidzIHotaW5kZXggb2YgMTAwMC4gV2VcbiAgICAgICAgICAgICAqIGRpc2N1c3NlZCBjaGFuZ2luZyB0aGUgb3ZlcmxheSBzZXJ2aWNlIHRvIGFsbG93IGZvciB0aGlzIGJ1dCBkZWNpZGVkIGFnYWluc3QgdGhhdFxuICAgICAgICAgICAgICogY2hhbmdlIGF0IHRoaXMgdGltZSBkdWUgdG8gaXRzIG5pY2hlIG5hdHVyZS5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgb3ZlcmxheS5jb21wb25lbnRSZWYuaW5zdGFuY2UuekluZGV4ID0gJzk5OSc7XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBpbmxpbmVEZWxldGVSZWYgPSB0aGlzLmlubGluZURlbGV0ZVJlZnNcbiAgICAgICAgICAgICAgICAudG9BcnJheSgpXG4gICAgICAgICAgICAgICAgLmZpbmQoKGVsUmVmKSA9PiB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICBlbFJlZi5uYXRpdmVFbGVtZW50LmlkID09PVxuICAgICAgICAgICAgICAgICAgICAncm93LWRlbGV0ZS1yZWYtJyArIG1lc3NhZ2UuZGF0YS5wcm9tcHREZWxldGVSb3cuaWRcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGNvbnN0IGFmZml4ZXIgPSB0aGlzLmFmZml4U2VydmljZS5jcmVhdGVBZmZpeGVyKGlubGluZURlbGV0ZVJlZik7XG5cbiAgICAgICAgICAgICAgY29uc3Qgcm93RWxlbWVudDogSFRNTEVsZW1lbnQgPVxuICAgICAgICAgICAgICAgIHRoaXMudGFibGVFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAgICAgICAgICdbc2t5LWNtcC1pZD1cIicgKyBtZXNzYWdlLmRhdGEucHJvbXB0RGVsZXRlUm93LmlkICsgJ1wiXScsXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICBhZmZpeGVyLmFmZml4VG8ocm93RWxlbWVudCwge1xuICAgICAgICAgICAgICAgIGF1dG9GaXRDb250ZXh0OiBTa3lBZmZpeEF1dG9GaXRDb250ZXh0LlZpZXdwb3J0LFxuICAgICAgICAgICAgICAgIGlzU3RpY2t5OiB0cnVlLFxuICAgICAgICAgICAgICAgIHBsYWNlbWVudDogJ2Fib3ZlJyxcbiAgICAgICAgICAgICAgICB2ZXJ0aWNhbEFsaWdubWVudDogJ3RvcCcsXG4gICAgICAgICAgICAgICAgaG9yaXpvbnRhbEFsaWdubWVudDogJ2xlZnQnLFxuICAgICAgICAgICAgICAgIGVuYWJsZUF1dG9GaXQ6IGZhbHNlLFxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICB0aGlzLnJvd0RlbGV0ZUNvbnRlbnRzW21lc3NhZ2UuZGF0YS5wcm9tcHREZWxldGVSb3cuaWRdID0ge1xuICAgICAgICAgICAgICAgIGFmZml4ZXI6IGFmZml4ZXIsXG4gICAgICAgICAgICAgICAgb3ZlcmxheTogb3ZlcmxheSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgU2t5R3JpZE1lc3NhZ2VUeXBlLkFib3J0RGVsZXRlUm93OlxuICAgICAgICAvKiBzYW5pdHkgY2hlY2sgKi9cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2UuZGF0YSAmJiBtZXNzYWdlLmRhdGEuYWJvcnREZWxldGVSb3cpIHtcbiAgICAgICAgICB0aGlzLnJvd0RlbGV0ZUNvbmZpZ3MgPSB0aGlzLnJvd0RlbGV0ZUNvbmZpZ3MuZmlsdGVyKFxuICAgICAgICAgICAgKGNvbmZpZykgPT4gY29uZmlnLmlkICE9PSBtZXNzYWdlLmRhdGEuYWJvcnREZWxldGVSb3cuaWQsXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHRoaXMuZGVzdHJveVJvd0RlbGV0ZShtZXNzYWdlLmRhdGEuYWJvcnREZWxldGVSb3cuaWQpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkhlYWRlckRyb3AobmV3Q29sdW1uSWRzOiBzdHJpbmdbXSkge1xuICAgIC8vIHVwZGF0ZSBzZWxlY3RlZCBjb2x1bW5JZHNcbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1uSWRzU2V0ID0gdHJ1ZTtcbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1uSWRzID0gbmV3Q29sdW1uSWRzO1xuXG4gICAgLy8gbWFyayBmb3IgY2hlY2sgYmVjYXVzZSB3ZSBhcmUgdXNpbmcgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kub25QdXNoXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0RGlzcGxheWVkQ29sdW1ucyhyZXNwZWN0SGlkZGVuID0gZmFsc2UpIHtcbiAgICAvKiBzYW5pdHkgY2hlY2sgKi9cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh0aGlzLmNvbHVtbnMpIHtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ29sdW1uSWRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gc2V0dXAgZGlzcGxheWVkIGNvbHVtbnNcbiAgICAgICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zID0gdGhpcy5zZWxlY3RlZENvbHVtbklkc1xuICAgICAgICAgIC5maWx0ZXIoKGNvbHVtbklkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW5zLmZpbmQoKGNvbHVtbikgPT4gY29sdW1uLmlkID09PSBjb2x1bW5JZCk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAubWFwKChjb2x1bW5JZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1ucy5maWx0ZXIoKGNvbHVtbikgPT4gY29sdW1uLmlkID09PSBjb2x1bW5JZClbMF07XG4gICAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHJlc3BlY3RIaWRkZW4pIHtcbiAgICAgICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zID0gdGhpcy5jb2x1bW5zLmZpbHRlcigoY29sdW1uKSA9PiB7XG4gICAgICAgICAgcmV0dXJuICFjb2x1bW4uaGlkZGVuO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IHRoaXMuY29sdW1ucztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHRyYW5zZm9ybURhdGEoKSB7XG4gICAgLy8gVHJhbnNmb3JtIGRhdGEgaW50byBvYmplY3Qgd2l0aCBpZCBhbmQgZGF0YSBwcm9wZXJ0aWVzXG4gICAgaWYgKFxuICAgICAgdGhpcy5kYXRhICYmXG4gICAgICB0aGlzLmRhdGEubGVuZ3RoID4gMCAmJlxuICAgICAgdGhpcy5kYXRhWzBdLmlkICYmXG4gICAgICAhdGhpcy5kYXRhWzBdLmRhdGFcbiAgICApIHtcbiAgICAgIGlmICh0aGlzLm11bHRpc2VsZWN0Um93SWQpIHtcbiAgICAgICAgdGhpcy5pdGVtcyA9IHRoaXMuZ2V0R3JpZERhdGFXaXRoU2VsZWN0ZWRSb3dzKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLml0ZW1zID0gdGhpcy5kYXRhLm1hcCgoaXRlbSkgPT4gbmV3IExpc3RJdGVtTW9kZWwoaXRlbS5pZCwgaXRlbSkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLml0ZW1zID0gdGhpcy5kYXRhO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0R3JpZERhdGFXaXRoU2VsZWN0ZWRSb3dzKCkge1xuICAgIGNvbnN0IHNlbGVjdGVkUm93cyA9IHRoaXMuZ2V0U2VsZWN0ZWRSb3dzKCk7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5tYXAoKGl0ZW0pID0+IHtcbiAgICAgIGxldCBjaGVja2VkO1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpdGVtLCB0aGlzLm11bHRpc2VsZWN0Um93SWQpKSB7XG4gICAgICAgIGNoZWNrZWQgPSBzZWxlY3RlZFJvd3MuaW5kZXhPZihpdGVtW3RoaXMubXVsdGlzZWxlY3RSb3dJZF0pID4gLTE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGVja2VkID0gc2VsZWN0ZWRSb3dzLmluZGV4T2YoaXRlbS5pZCkgPiAtMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgTGlzdEl0ZW1Nb2RlbChpdGVtLmlkLCBpdGVtLCBjaGVja2VkKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlTZWxlY3RlZFJvd3MoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXRlbXMgJiYgdGhpcy5pdGVtcy5sZW5ndGggPiAwICYmIHRoaXMuc2VsZWN0ZWRSb3dJZHMpIHtcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLml0ZW1zKSB7XG4gICAgICAgIGl0ZW0uaXNTZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRSb3dJZHMuaW5kZXhPZihpdGVtLmlkKSA+IC0xO1xuICAgICAgfVxuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldFNvcnRIZWFkZXJzKCkge1xuICAgIHRoaXMuY3VycmVudFNvcnRGaWVsZC5uZXh0KFxuICAgICAgdGhpcy5zb3J0RmllbGQgfHwgeyBmaWVsZFNlbGVjdG9yOiAnJywgZGVzY2VuZGluZzogZmFsc2UgfSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb2x1bW5zRnJvbUNvbXBvbmVudCgpIHtcbiAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmNvbHVtbkNvbXBvbmVudHMubWFwKChjb2x1bW5Db21wb25lbnQpID0+IHtcbiAgICAgIHJldHVybiBuZXcgU2t5R3JpZENvbHVtbk1vZGVsKGNvbHVtbkNvbXBvbmVudC50ZW1wbGF0ZSwgY29sdW1uQ29tcG9uZW50KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ29sdW1ucygpIHtcbiAgICB0aGlzLmdldENvbHVtbnNGcm9tQ29tcG9uZW50KCk7XG5cbiAgICAvLyBUaGlzIHNldCB0aW1lb3V0IGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhlIGNvbHVtbnMgaGF2ZSByZW5kZXJlZCBpbiB0aGUgZ3JpZFxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5jaGVja1VzZXJDb2x1bW5XaWR0aHNGb3JTY3JvbGwoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzaXplQ29sdW1uQnlJbmRleChcbiAgICBjb2x1bW5JbmRleDogc3RyaW5nLFxuICAgIG5ld0NvbFdpZHRoOiBudW1iZXIsXG4gICAgZGVsdGFYOiBudW1iZXIsXG4gICkge1xuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuZ2V0Q29sdW1uTW9kZWxCeUluZGV4KGNvbHVtbkluZGV4KTtcblxuICAgIC8vIFByZXZlbnQgYWNjaWRlbnRhbCBzaHJpbmthZ2UgYmVsb3cgbWluaW11bSB3aWR0aC5cbiAgICBpZiAobmV3Q29sV2lkdGggPD0gdGhpcy5taW5Db2xXaWR0aCkge1xuICAgICAgZGVsdGFYID0gZGVsdGFYICsgdGhpcy5taW5Db2xXaWR0aCAtIG5ld0NvbFdpZHRoO1xuICAgICAgbmV3Q29sV2lkdGggPSB0aGlzLm1pbkNvbFdpZHRoO1xuICAgIH1cblxuICAgIC8vIGZpdD13aWR0aCBhZGRzL3JlbW92ZXMgd2lkdGggZnJvbSB0aGUgbGFzdCBjb2x1bW5cbiAgICAvLyBmaXQ9c2Nyb2xsIGFkZHMvcmVtb3ZlcyB3aWR0aCBmcm9tIHRoZSB0YWJsZVxuICAgIGlmICh0aGlzLmZpdCA9PT0gJ3dpZHRoJykge1xuICAgICAgY29uc3QgbGFzdENvbHVtbiA9IHRoaXMuZ2V0TGFzdERpc3BsYXllZENvbHVtbigpO1xuXG4gICAgICAvLyBQcmV2ZW50IGFjY2lkZW50YWwgZ3Jvd3RoIHRoYXQgd291bGQgYnVtcCBsYXN0IGNvbHVtbiBvZmYgc2NyZWVuLlxuICAgICAgY29uc3QgbWF4ID0gdGhpcy5nZXRNYXhSYW5nZUJ5SW5kZXgoY29sdW1uSW5kZXgpO1xuICAgICAgaWYgKG5ld0NvbFdpZHRoID4gbWF4KSB7XG4gICAgICAgIG5ld0NvbFdpZHRoID0gbWF4O1xuICAgICAgICBkZWx0YVggPSBtYXggLSB0aGlzLnN0YXJ0Q29sdW1uV2lkdGg7XG4gICAgICB9XG4gICAgICBjb2x1bW4ud2lkdGggPSBuZXdDb2xXaWR0aDtcbiAgICAgIGxhc3RDb2x1bW4ud2lkdGggPSBsYXN0Q29sdW1uLndpZHRoIC0gZGVsdGFYO1xuICAgICAgdGhpcy51cGRhdGVNYXhSYW5nZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmdyaWRBZGFwdGVyLnNldFN0eWxlKFxuICAgICAgICB0aGlzLnRhYmxlRWxlbWVudFJlZixcbiAgICAgICAgJ3dpZHRoJyxcbiAgICAgICAgYCR7dGhpcy50YWJsZVdpZHRoICsgZGVsdGFYfXB4YCxcbiAgICAgICk7XG4gICAgICBjb2x1bW4ud2lkdGggPSBuZXdDb2xXaWR0aDtcbiAgICB9XG5cbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICB0aGlzLmNvbHVtbldpZHRoQ2hhbmdlLmVtaXQodGhpcy5nZXRDb2x1bW5XaWR0aE1vZGVsQ2hhbmdlKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0Q29sdW1uV2lkdGhzKCkge1xuICAgIC8vIEVzdGFibGlzaCB0YWJsZSB3aWR0aC5cbiAgICB0aGlzLnNob3dUb3BTY3JvbGwgPSB0cnVlO1xuXG4gICAgLy8gU2V0IGNvbHVtbiB3aWR0aHMgYmFzZWQgb24gdGhlIHdpZHRoIGluaXRpYWxseSBnaXZlbiBieSB0aGUgYnJvd3Nlci5cbiAgICAvLyBjb21wdXRlZFdpZHRoIHByZXZlbnRzIGFjY2lkZW50YWwgb3ZlcmZsb3cgZm9yIGJyb3dzZXJzIHdpdGggc3ViLXBpeGVsIHdpZHRocy5cbiAgICB0aGlzLmNvbHVtbkVsZW1lbnRSZWZzLmZvckVhY2goKGNvbCwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IGNvbXB1dGVkV2lkdGggPSBwYXJzZUZsb2F0KFxuICAgICAgICB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShjb2wubmF0aXZlRWxlbWVudCkud2lkdGgsXG4gICAgICApO1xuICAgICAgY29uc3Qgb2Zmc2V0V2lkdGggPSBjb2wubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICB0aGlzLmdldENvbHVtbk1vZGVsQnlJbmRleChpbmRleCkud2lkdGggPSBNYXRoLm1heChcbiAgICAgICAgY29tcHV0ZWRXaWR0aCB8fCBvZmZzZXRXaWR0aCxcbiAgICAgICAgdGhpcy5taW5Db2xXaWR0aCxcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICAvLyAnc2Nyb2xsJyB0YWJsZXMgc2hvdWxkIGJlIGFsbG93ZWQgdG8gZXhwYW5kIG91dHNpZGUgb2YgdGhlaXIgY29uc3RyYWludHMuXG4gICAgaWYgKHRoaXMuZml0ID09PSAnc2Nyb2xsJykge1xuICAgICAgdGhpcy5ncmlkQWRhcHRlci5zZXRTdHlsZSh0aGlzLnRhYmxlRWxlbWVudFJlZiwgJ21pbi13aWR0aCcsICdhdXRvJyk7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIG1heCBsaW1pdHMgZm9yIGlucHV0IHJhbmdlcy5cbiAgICBpZiAodGhpcy5maXQgPT09ICd3aWR0aCcpIHtcbiAgICAgIHRoaXMudXBkYXRlTWF4UmFuZ2UoKTtcbiAgICB9XG5cbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgdHJhbnNmZXJDb2x1bW5XaWR0aHMoXG4gICAgb2xkQ29sdW1uczogU2t5R3JpZENvbHVtbk1vZGVsW10sXG4gICAgbmV3Q29sdW1uczogU2t5R3JpZENvbHVtbk1vZGVsW10sXG4gICkge1xuICAgIC8qIHNhbml0eSBjaGVjayAqL1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKG9sZENvbHVtbnMgJiYgbmV3Q29sdW1ucykge1xuICAgICAgZm9yIChjb25zdCBvbGRDb2x1bW4gb2Ygb2xkQ29sdW1ucykge1xuICAgICAgICBpZiAob2xkQ29sdW1uLndpZHRoKSB7XG4gICAgICAgICAgY29uc3QgbWF0Y2hpbmdDb2x1bW4gPSBuZXdDb2x1bW5zLmZpbmQoXG4gICAgICAgICAgICAobmV3Q29sdW1uKSA9PiBvbGRDb2x1bW4uaWQgPT09IG5ld0NvbHVtbi5pZCxcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChtYXRjaGluZ0NvbHVtbiAmJiAhbWF0Y2hpbmdDb2x1bW4ud2lkdGgpIHtcbiAgICAgICAgICAgIG1hdGNoaW5nQ29sdW1uLndpZHRoID0gb2xkQ29sdW1uLndpZHRoO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb2x1bW5XaWR0aE1vZGVsQ2hhbmdlKCkge1xuICAgIGNvbnN0IGNvbHVtbldpZHRoTW9kZWxDaGFuZ2UgPSBuZXcgQXJyYXk8U2t5R3JpZENvbHVtbldpZHRoTW9kZWxDaGFuZ2U+KCk7XG4gICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgY29sdW1uV2lkdGhNb2RlbENoYW5nZS5wdXNoKHtcbiAgICAgICAgaWQ6IGNvbHVtbi5pZCxcbiAgICAgICAgZmllbGQ6IGNvbHVtbi5maWVsZCxcbiAgICAgICAgd2lkdGg6IGNvbHVtbi53aWR0aCxcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBjb2x1bW5XaWR0aE1vZGVsQ2hhbmdlO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVNYXhSYW5nZSgpIHtcbiAgICBjb25zdCBsZWZ0b3ZlcldpZHRoID1cbiAgICAgIHRoaXMuZ2V0TGFzdERpc3BsYXllZENvbHVtbigpLndpZHRoIC0gdGhpcy5taW5Db2xXaWR0aDtcbiAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMuZm9yRWFjaCgoY29sdW1uLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgbmV3TWF4UmFuZ2UgPSBjb2x1bW4ud2lkdGggKyBsZWZ0b3ZlcldpZHRoO1xuICAgICAgY29uc3QgcmFuZ2VJbnB1dCA9IHRoaXMuZ2V0UmFuZ2VJbnB1dEJ5SW5kZXgoaW5kZXgpO1xuICAgICAgcmFuZ2VJbnB1dC5uYXRpdmVFbGVtZW50Lm1heCA9IG5ld01heFJhbmdlO1xuICAgICAgcmFuZ2VJbnB1dC5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS12YWx1ZW1heCcsIG5ld01heFJhbmdlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZVJlc2l6ZUNvbHVtbihldmVudDogYW55KSB7XG4gICAgY29uc3QgY2xpY2tUYXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgdGhpcy5hY3RpdmVSZXNpemVDb2x1bW5JbmRleCA9IGNsaWNrVGFyZ2V0LmdldEF0dHJpYnV0ZSgnc2t5LWNtcC1pbmRleCcpO1xuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuZ2V0Q29sdW1uTW9kZWxCeUluZGV4KHRoaXMuYWN0aXZlUmVzaXplQ29sdW1uSW5kZXgpO1xuICAgIHRoaXMuc3RhcnRDb2x1bW5XaWR0aCA9IGNvbHVtbi53aWR0aDtcbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRUYWJsZVdpZHRoKCkge1xuICAgIHRoaXMuc2t5V2luZG93Lm5hdGl2ZVdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuZ3JpZEFkYXB0ZXIuc2V0U3R5bGUodGhpcy50YWJsZUVsZW1lbnRSZWYsICd3aWR0aCcsIGBhdXRvYCk7XG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIHRoaXMuZ3JpZEFkYXB0ZXIuc2V0U3R5bGUoXG4gICAgICAgIHRoaXMudGFibGVFbGVtZW50UmVmLFxuICAgICAgICAnd2lkdGgnLFxuICAgICAgICBgJHt0aGlzLnRhYmxlV2lkdGh9cHhgLFxuICAgICAgKTtcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSYW5nZUlucHV0QnlJbmRleChpbmRleDogc3RyaW5nIHwgbnVtYmVyKSB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1uUmFuZ2VJbnB1dEVsZW1lbnRSZWZzLmZpbmQoXG4gICAgICAoaW5wdXQpID0+XG4gICAgICAgIGlucHV0Lm5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdza3ktY21wLWluZGV4JykgPT09IGluZGV4LnRvU3RyaW5nKCksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29sdW1uTW9kZWxCeUluZGV4KGluZGV4OiBzdHJpbmcgfCBudW1iZXIpIHtcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5ZWRDb2x1bW5zW051bWJlcihpbmRleCldO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRNYXhSYW5nZUJ5SW5kZXgoaW5kZXg6IHN0cmluZykge1xuICAgIGNvbnN0IGNvbHVtbkVsZW1lbnRSZWYgPSB0aGlzLmNvbHVtbkVsZW1lbnRSZWZzLmZpbmQoXG4gICAgICAodGgpID0+IHRoLm5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdza3ktY21wLWluZGV4JykgPT09IGluZGV4LFxuICAgICk7XG4gICAgY29uc3QgcmFuZ2VJbnB1dCA9IGNvbHVtbkVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgJy5za3ktZ3JpZC1jb2x1bW4taW5wdXQtYXJpYS1vbmx5JyxcbiAgICApO1xuICAgIHJldHVybiBOdW1iZXIocmFuZ2VJbnB1dC5tYXgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRMYXN0RGlzcGxheWVkQ29sdW1uKCkge1xuICAgIHJldHVybiB0aGlzLmdldENvbHVtbk1vZGVsQnlJbmRleCh0aGlzLmRpc3BsYXllZENvbHVtbnMubGVuZ3RoIC0gMSk7XG4gIH1cblxuICBwcml2YXRlIGFkZERlbGltaXRlcih0ZXh0OiBzdHJpbmdbXSwgZGVsaW1pdGVyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGV4dC5maWx0ZXIoKHZhbCkgPT4gdmFsKS5qb2luKGRlbGltaXRlcik7XG4gIH1cblxuICBwcml2YXRlIGRlc3Ryb3lSb3dEZWxldGUoaWQ6IHN0cmluZykge1xuICAgIGNvbnN0IHJvd0RlbGV0ZUNvbnRlbnRzID0gdGhpcy5yb3dEZWxldGVDb250ZW50c1tpZF07XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAocm93RGVsZXRlQ29udGVudHMpIHtcbiAgICAgIHJvd0RlbGV0ZUNvbnRlbnRzLmFmZml4ZXIuZGVzdHJveSgpO1xuICAgICAgdGhpcy5vdmVybGF5U2VydmljZS5jbG9zZShyb3dEZWxldGVDb250ZW50cy5vdmVybGF5KTtcbiAgICAgIGRlbGV0ZSB0aGlzLnJvd0RlbGV0ZUNvbnRlbnRzW2lkXTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGVtaXRTZWxlY3RlZFJvd3Moc291cmNlOiBTa3lHcmlkU2VsZWN0ZWRSb3dzU291cmNlKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWRSb3dzOiBTa3lHcmlkU2VsZWN0ZWRSb3dzTW9kZWxDaGFuZ2UgPSB7XG4gICAgICBzZWxlY3RlZFJvd0lkczogdGhpcy5nZXRTZWxlY3RlZFJvd3MoKSxcbiAgICAgIHNvdXJjZTogc291cmNlLFxuICAgIH07XG4gICAgdGhpcy5tdWx0aXNlbGVjdFNlbGVjdGlvbkNoYW5nZS5lbWl0KHNlbGVjdGVkUm93cyk7XG4gIH1cblxuICBwcml2YXRlIGdldFNlbGVjdGVkUm93cygpIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtc1xuICAgICAgLmZpbHRlcigoaXRlbSkgPT4ge1xuICAgICAgICByZXR1cm4gaXRlbS5pc1NlbGVjdGVkO1xuICAgICAgfSlcbiAgICAgIC5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpdGVtLmRhdGEsIHRoaXMubXVsdGlzZWxlY3RSb3dJZClcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIGl0ZW0uZGF0YVt0aGlzLm11bHRpc2VsZWN0Um93SWRdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpdGVtLmlkO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGlzSW50ZXJhY3RpdmVFbGVtZW50KGV2ZW50OiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IGludGVyYWN0aXZlRWxTZWxlY3RvcnMgPSBgXG4gICAgICBhLFxuICAgICAgYnV0dG9uLFxuICAgICAgaW5wdXQsXG4gICAgICBsYWJlbCxcbiAgICAgIG9wdGlvbixcbiAgICAgIHNlbGVjdCxcbiAgICAgIHRleHRhcmVhLFxuICAgICAgZGV0YWlscyxcbiAgICAgIGRpYWxvZyxcbiAgICAgIG1lbnUsXG4gICAgICBtZW51aXRlbSxcbiAgICAgIHN1bW1hcnlgO1xuICAgIHJldHVybiBldmVudC50YXJnZXQuY2xvc2VzdChpbnRlcmFjdGl2ZUVsU2VsZWN0b3JzKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0UmVzaXplQmFyUG9zaXRpb24oeFBvc2l0aW9uOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBwYXJlbnRTY3JvbGwgPSB0aGlzLnRhYmxlQ29udGFpbmVyRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgY29uc3QgcmVzaXplQmFyWCA9XG4gICAgICB4UG9zaXRpb24gLVxuICAgICAgdGhpcy50YWJsZUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC1cbiAgICAgIHBhcmVudFNjcm9sbDtcbiAgICB0aGlzLmdyaWRBZGFwdGVyLnNldFN0eWxlKHRoaXMucmVzaXplQmFyLCAnbGVmdCcsIHJlc2l6ZUJhclggKyAncHgnKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlVc2VyQ29uZmlnKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgdGhpcy51aUNvbmZpZ1NlcnZpY2VcbiAgICAgICAgLmdldENvbmZpZyh0aGlzLnNldHRpbmdzS2V5KVxuICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgIChjb25maWc6IFNreUdyaWRVSUNvbmZpZykgPT4ge1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICAgIGlmIChjb25maWcgJiYgY29uZmlnLnNlbGVjdGVkQ29sdW1uSWRzKSB7XG4gICAgICAgICAgICAgIC8vIFJlbW92ZSBhbnkgY29sdW1uSWRzIHRoYXQgZG9uJ3QgZXhpc3QgaW4gdGhlIGN1cnJlbnQgZGF0YSBzZXQuXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5JZHMgPSBjb25maWcuc2VsZWN0ZWRDb2x1bW5JZHMuZmlsdGVyKChpZCkgPT5cbiAgICAgICAgICAgICAgICB0aGlzLmNvbHVtbnMuZmluZCgoY29sdW1uKSA9PiBjb2x1bW4uaWQgPT09IGlkKSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldFVzZXJDb25maWcoY29uZmlnOiBTa3lHcmlkVUlDb25maWcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2V0dGluZ3NLZXkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnVpQ29uZmlnU2VydmljZVxuICAgICAgLnNldENvbmZpZyh0aGlzLnNldHRpbmdzS2V5LCBjb25maWcpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgICAgICAgKCkgPT4ge30sXG4gICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ0NvdWxkIG5vdCBzYXZlIGdyaWQgc2V0dGluZ3MuJyk7XG4gICAgICAgICAgY29uc29sZS53YXJuKGVycik7XG4gICAgICAgIH0sXG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0Q29sdW1ucygpOiB2b2lkIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh0aGlzLmNvbHVtbkNvbXBvbmVudHMubGVuZ3RoICE9PSAwIHx8IHRoaXMuY29sdW1ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgLyogc2FuaXR5IGNoZWNrICovXG4gICAgICBpZiAodGhpcy5jb2x1bW5Db21wb25lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5nZXRDb2x1bW5zRnJvbUNvbXBvbmVudCgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnRyYW5zZm9ybURhdGEoKTtcbiAgICAgIHRoaXMuc2V0RGlzcGxheWVkQ29sdW1ucyh0cnVlKTtcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLy8gV2F0Y2ggZm9yIGFkZGVkL3JlbW92ZWQgY29sdW1uczpcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuY29sdW1uQ29tcG9uZW50cy5jaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB0aGlzLnVwZGF0ZUNvbHVtbnMoKSksXG4gICAgKTtcblxuICAgIC8vIFdhdGNoIGZvciBjb2x1bW4gaGVhZGluZyBjaGFuZ2VzOlxuICAgIHRoaXMuY29sdW1uQ29tcG9uZW50cy5mb3JFYWNoKChjb21wOiBTa3lHcmlkQ29sdW1uQ29tcG9uZW50KSA9PiB7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgY29tcC5oZWFkaW5nTW9kZWxDaGFuZ2VzLnN1YnNjcmliZShcbiAgICAgICAgICAoY2hhbmdlOiBTa3lHcmlkQ29sdW1uSGVhZGluZ01vZGVsQ2hhbmdlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbHVtbkhlYWRpbmcoY2hhbmdlKTtcbiAgICAgICAgICB9LFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICBjb21wLmRlc2NyaXB0aW9uTW9kZWxDaGFuZ2VzLnN1YnNjcmliZShcbiAgICAgICAgICAoY2hhbmdlOiBTa3lHcmlkQ29sdW1uRGVzY3JpcHRpb25Nb2RlbENoYW5nZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVDb2x1bW5EZXNjcmlwdGlvbihjaGFuZ2UpO1xuICAgICAgICAgIH0sXG4gICAgICAgICksXG4gICAgICApO1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgIGNvbXAuaW5saW5lSGVscFBvcG92ZXJNb2RlbENoYW5nZXMuc3Vic2NyaWJlKFxuICAgICAgICAgIChjaGFuZ2U6IFNreUdyaWRDb2x1bW5JbmxpbmVIZWxwUG9wb3Zlck1vZGVsQ2hhbmdlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUlubGluZUhlbHBQb3BvdmVyKGNoYW5nZSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFycmF5c0VxdWFsKGFycmF5QTogYW55W10sIGFycmF5QjogYW55W10pOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgYXJyYXlBLmxlbmd0aCA9PT0gYXJyYXlCLmxlbmd0aCAmJlxuICAgICAgYXJyYXlBLmV2ZXJ5KCh2YWx1ZSwgaW5kZXgpID0+IHZhbHVlID09PSBhcnJheUJbaW5kZXhdKVxuICAgICk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJza3ktZ3JpZFwiPlxuICA8ZGl2XG4gICAgKm5nSWY9XCJzaG93VG9wU2Nyb2xsXCJcbiAgICBjbGFzcz1cInNreS1ncmlkLXRvcC1zY3JvbGwtY29udGFpbmVyXCJcbiAgICAoc2Nyb2xsKT1cIm9uVG9wU2Nyb2xsKCRldmVudClcIlxuICAgICN0b3BTY3JvbGxDb250YWluZXJcbiAgPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwic2t5LWdyaWQtdG9wLXNjcm9sbFwiXG4gICAgICBbc3R5bGUud2lkdGgucHhdPVwiZ2V0VG9wU2Nyb2xsV2lkdGgoKVwiXG4gICAgPjwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdlxuICAgIGNsYXNzPVwic2t5LWdyaWQtdGFibGUtY29udGFpbmVyXCJcbiAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImhlaWdodFwiXG4gICAgW3N0eWxlLndpZHRoLnB4XT1cIndpZHRoXCJcbiAgICAoc2Nyb2xsKT1cIm9uR3JpZFNjcm9sbCgkZXZlbnQpXCJcbiAgICAjZ3JpZENvbnRhaW5lclxuICA+XG4gICAgPHRhYmxlIGNsYXNzPVwic2t5LWdyaWQtdGFibGVcIiBbbmdDbGFzc109XCJnZXRUYWJsZUNsYXNzTmFtZXMoKVwiICNncmlkVGFibGU+XG4gICAgICA8dGhlYWQ+XG4gICAgICAgIDx0ciBbZHJhZ3VsYV09XCJkcmFndWxhR3JvdXBOYW1lXCI+XG4gICAgICAgICAgPHRoXG4gICAgICAgICAgICAqbmdJZj1cImVuYWJsZU11bHRpc2VsZWN0XCJcbiAgICAgICAgICAgIGNsYXNzPVwic2t5LWdyaWQtaGVhZGluZyBza3ktZ3JpZC1tdWx0aXNlbGVjdC1jZWxsIHNreS1ncmlkLWhlYWRlci1sb2NrZWRcIlxuICAgICAgICAgICAgc2NvcGU9XCJjb2xcIlxuICAgICAgICAgICAgW3N0eWxlLm1heC13aWR0aC5weF09XCJtaW5Db2xXaWR0aFwiXG4gICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwibWluQ29sV2lkdGhcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2NyZWVuLXJlYWRlci1vbmx5XCI+XG4gICAgICAgICAgICAgIHt7ICdza3l1eF9ncmlkX211bHRpc2VsZWN0X3NlbGVjdF9yb3cnIHwgc2t5TGliUmVzb3VyY2VzIH19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgICA8dGhcbiAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICBsZXQgY29sdW1uIG9mIGRpc3BsYXllZENvbHVtbnM7XG4gICAgICAgICAgICAgIGxldCBsYXN0ID0gbGFzdDtcbiAgICAgICAgICAgICAgbGV0IGkgPSBpbmRleFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIGNsYXNzPVwic2t5LWdyaWQtaGVhZGluZyBza3ktZmllbGQtbGFiZWxcIlxuICAgICAgICAgICAgc2NvcGU9XCJjb2xcIlxuICAgICAgICAgICAgW2F0dHIuc2t5LWNtcC1pbmRleF09XCJpXCJcbiAgICAgICAgICAgIFthdHRyLnNreS1jbXAtaWRdPVwiY29sdW1uLmlkIHx8IGNvbHVtbi5maWVsZFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLXNvcnRdPVwiZ2V0QXJpYVNvcnREaXJlY3Rpb24oY29sdW1uKSB8IGFzeW5jXCJcbiAgICAgICAgICAgIFtpZF09XCInc2t5LWdyaWQtJyArIGdyaWRJZCArICctY29sdW1uLScgKyBpXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIidza3ktZ3JpZC1jb2x1bW4tYWxpZ25tZW50LScgKyBjb2x1bW4uYWxpZ25tZW50XCJcbiAgICAgICAgICAgIFtzdHlsZS5tYXgtd2lkdGgucHhdPVwiY29sdW1uLndpZHRoXCJcbiAgICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJjb2x1bW4ud2lkdGhcIlxuICAgICAgICAgICAgW3RhYkluZGV4XT1cImNvbHVtbi5pc1NvcnRhYmxlID8gMCA6IC0xXCJcbiAgICAgICAgICAgIChtb3VzZXVwKT1cInNvcnRCeUNvbHVtbihjb2x1bW4pXCJcbiAgICAgICAgICAgIChrZXlkb3duKT1cIm9uS2V5ZG93bigkZXZlbnQsIGNvbHVtbilcIlxuICAgICAgICAgICAgKHRvdWNobW92ZSk9XCJvblRvdWNoTW92ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICNncmlkQ29sXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cIm92ZXJmbG93XCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0VGFibGVIZWFkZXJDbGFzc05hbWVzKGNvbHVtbilcIlxuICAgICAgICAgICAgICBbc3R5bGUubWF4LXdpZHRoLnB4XT1cImNvbHVtbi53aWR0aCAtIDFcIlxuICAgICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiY29sdW1uLndpZHRoIC0gMVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIoZ2V0Q2FyZXRWaXNpYmlsaXR5KGNvbHVtbi5maWVsZCkgfCBhc3luYykgPT09ICdoaWRkZW4nXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNreS1ncmlkLWhlYWRlci1jYXJldC1oaWRkZW4tc3BhY2luZ1wiXG4gICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgIDwhLS0gVGhlIG5vIHNwYWNpbmcgaGVyZSBpcyBpbnRlbnRpb25hbCB0byBhdm9pZCBleHRyYSBzcGFjZXMgZHVlIHRvIHRoZXNlIGJlaW5nIGlubGluZSBlbGVtZW50cyAtLT5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJza3ktZ3JpZC1oZWFkZXItdGV4dFwiPnt7XG4gICAgICAgICAgICAgICAgY29sdW1uLmhlYWRpbmc/LnRyaW0oKVxuICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNreS1pY29uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJza3ktZ3JpZC1oZWFkaW5nLXNvcnRcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgJ3NreS1ncmlkLWhlYWRpbmctc29ydC0nICtcbiAgICAgICAgICAgICAgICAgIChnZXRDYXJldFZpc2liaWxpdHkoY29sdW1uLmZpZWxkKSB8IGFzeW5jKVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgW2ljb25dPVwiZ2V0Q2FyZXRJY29uTmFtZXMoY29sdW1uKVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxza3ktaGVscC1pbmxpbmVcbiAgICAgICAgICAgICAgICAqbmdJZj1cImNvbHVtbi5pbmxpbmVIZWxwUG9wb3ZlclwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgJ3NreS1ncmlkLWhlbHAtaW5saW5lLXNvcnQtaGlkZGVuJzpcbiAgICAgICAgICAgICAgICAgICAgZ2V0SGVscElubGluZUNsYXNzKGNvbHVtbi5maWVsZCkgfCBhc3luY1xuICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgIFtza3lQb3BvdmVyXT1cImNvbHVtbi5pbmxpbmVIZWxwUG9wb3ZlclwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAobW91c2V1cCk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvc2t5LWhlbHAtaW5saW5lPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAqbmdJZj1cIihmaXQgPT09ICd3aWR0aCcgJiYgIWxhc3QpIHx8IGZpdCA9PT0gJ3Njcm9sbCdcIlxuICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICBjbGFzcz1cInNreS1ncmlkLXJlc2l6ZS1oYW5kbGVcIlxuICAgICAgICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgICAgW2F0dHIuc2t5LWNtcC1pbmRleF09XCJpXCJcbiAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCJvblJlc2l6ZUNvbHVtblN0YXJ0KCRldmVudClcIlxuICAgICAgICAgICAgICAodG91Y2hzdGFydCk9XCJvblJlc2l6ZUNvbHVtblN0YXJ0KCRldmVudClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJXaWR0aCBvZiBjb2x1bW5cIlxuICAgICAgICAgICAgICBjbGFzcz1cInNreS1ncmlkLWNvbHVtbi1pbnB1dC1hcmlhLW9ubHlcIlxuICAgICAgICAgICAgICByb2xlPVwic2xpZGVyXCJcbiAgICAgICAgICAgICAgdHlwZT1cInJhbmdlXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1jb250cm9sc109XCInc2t5LWdyaWQtJyArIGdyaWRJZCArICctY29sdW1uLScgKyBpXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS12YWx1ZW1pbl09XCJtaW5Db2xXaWR0aFwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtdmFsdWVtYXhdPVwibWF4Q29sV2lkdGhcIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLXZhbHVlbm93XT1cImNvbHVtbi53aWR0aFwiXG4gICAgICAgICAgICAgIFthdHRyLnNreS1jbXAtaW5kZXhdPVwiaVwiXG4gICAgICAgICAgICAgIFttaW5dPVwibWluQ29sV2lkdGhcIlxuICAgICAgICAgICAgICBbbWF4XT1cIm1heENvbFdpZHRoXCJcbiAgICAgICAgICAgICAgW3N0ZXBdPVwiY29sdW1uUmVzaXplU3RlcFwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY29sdW1uLndpZHRoXCJcbiAgICAgICAgICAgICAgKGJsdXIpPVwib25SZXNpemVIYW5kbGVCbHVyKClcIlxuICAgICAgICAgICAgICAoZm9jdXMpPVwib25SZXNpemVIYW5kbGVGb2N1cygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKGtleWRvd24pPVwib25LZXlkb3duUmVzaXplQ29sKCRldmVudClcIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uSW5wdXRDaGFuZ2VSZXNpemVDb2woJGV2ZW50KVwiXG4gICAgICAgICAgICAgICNjb2xTaXplUmFuZ2VcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvdGhlYWQ+XG4gICAgICA8dGJvZHkgY2xhc3M9XCJza3ktZ3JpZC10Ym9keVwiPlxuICAgICAgICA8dHJcbiAgICAgICAgICBjbGFzcz1cInNreS1ncmlkLXJvd1wiXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaXRlbXM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgIFthdHRyLmFyaWEtY3VycmVudF09XCJpc1Jvd0hpZ2hsaWdodGVkKGl0ZW0uaWQpID8gdHJ1ZSA6IG51bGxcIlxuICAgICAgICAgIFthdHRyLnNreS1jbXAtaWRdPVwiaXRlbS5pZFwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgJ3NreS1ncmlkLW11bHRpc2VsZWN0LXNlbGVjdGVkLXJvdyc6IGl0ZW0uaXNTZWxlY3RlZCxcbiAgICAgICAgICAgICdza3ktZ3JpZC1tdWx0aXNlbGVjdC1yb3cnOiBlbmFibGVNdWx0aXNlbGVjdCxcbiAgICAgICAgICAgICdza3ktZ3JpZC1yb3ctaGlnaGxpZ2h0JzogaXNSb3dIaWdobGlnaHRlZChpdGVtLmlkKVxuICAgICAgICAgIH1cIlxuICAgICAgICAgIChjbGljayk9XCJvblJvd0NsaWNrKCRldmVudCwgaXRlbSlcIlxuICAgICAgICA+XG4gICAgICAgICAgPHRkXG4gICAgICAgICAgICAqbmdJZj1cImVuYWJsZU11bHRpc2VsZWN0XCJcbiAgICAgICAgICAgIGNsYXNzPVwic2t5LWdyaWQtbXVsdGlzZWxlY3QtY2VsbCBza3ktZ3JpZC1oZWFkZXItbG9ja2VkXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIFtzdHlsZS5tYXgtd2lkdGgucHhdPVwibWluQ29sV2lkdGhcIlxuICAgICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwibWluQ29sV2lkdGhcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c2t5LWNoZWNrYm94XG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cIidza3l1eF9ncmlkX211bHRpc2VsZWN0X3NlbGVjdF9yb3cnIHwgc2t5TGliUmVzb3VyY2VzXCJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uTXVsdGlzZWxlY3RDaGVja2JveENoYW5nZSgpXCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIml0ZW0uaXNTZWxlY3RlZFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC9za3ktY2hlY2tib3g+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgIGxldCBjb2x1bW4gb2YgZGlzcGxheWVkQ29sdW1ucztcbiAgICAgICAgICAgICAgbGV0IGxhc3QgPSBsYXN0O1xuICAgICAgICAgICAgICBsZXQgaSA9IGluZGV4XG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgY2xhc3M9XCJza3ktZ3JpZC1jZWxsXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIidza3ktZ3JpZC1jb2x1bW4tYWxpZ25tZW50LScgKyBjb2x1bW4uYWxpZ25tZW50XCJcbiAgICAgICAgICAgIFtzdHlsZS5tYXgtd2lkdGgucHhdPVwiY29sdW1uLndpZHRoXCJcbiAgICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJjb2x1bW4ud2lkdGhcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxza3ktZ3JpZC1jZWxsXG4gICAgICAgICAgICAgIFtza3lIaWdobGlnaHRdPVwiXG4gICAgICAgICAgICAgICAgIWNvbHVtbi5leGNsdWRlRnJvbUhpZ2hsaWdodGluZyA/IGhpZ2hsaWdodFRleHQgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW3RlbXBsYXRlXT1cImNvbHVtbi50ZW1wbGF0ZSB8fCBkZWZhdWx0Q2VsbFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgW2ZpZWxkU2VsZWN0b3JdPVwiY29sdW1uLmZpZWxkXCJcbiAgICAgICAgICAgICAgW2l0ZW1dPVwiaXRlbVwiXG4gICAgICAgICAgICAgIFtjb2x1bW5JZF09XCJjb2x1bW4uaWRcIlxuICAgICAgICAgICAgICBbYXR0ci5za3ktY21wLWlkXT1cImNvbHVtbi5pZCB8fCBjb2x1bW4uZmllbGRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9za3ktZ3JpZC1jZWxsPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L3Rib2R5PlxuICAgIDwvdGFibGU+XG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCJzaG93UmVzaXplQmFyXCJcbiAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICBjbGFzcz1cInNreS1ncmlkLXJlc2l6ZS1iYXJcIlxuICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAjcmVzaXplQmFyXG4gICAgPjwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRDZWxsVGVtcGxhdGUgbGV0LXJvdz1cInJvd1wiIGxldC12YWx1ZT1cInZhbHVlXCI+e3tcbiAgdmFsdWVcbn19PC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlIGxldC1pdGVtICNpbmxpbmVEZWxldGVUZW1wbGF0ZVJlZj5cbiAgPGRpdlxuICAgIFtpZF09XCIncm93LWRlbGV0ZS1yZWYtJyArIGl0ZW0uaWRcIlxuICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgIGhlaWdodDogZ2V0Um93SGVpZ2h0KDApLFxuICAgICAgcG9zaXRpb246ICdmaXhlZCcsXG4gICAgICB3aWR0aDogdGFibGVXaWR0aCArICdweCdcbiAgICB9XCJcbiAgICAjaW5saW5lRGVsZXRlUmVmXG4gID5cbiAgICA8c2t5LWlubGluZS1kZWxldGVcbiAgICAgIFtwZW5kaW5nXT1cImdldFJvd0RlbGV0ZUl0ZW0oaXRlbS5pZCkucGVuZGluZ1wiXG4gICAgICAoY2FuY2VsVHJpZ2dlcmVkKT1cImNhbmNlbFJvd0RlbGV0ZShpdGVtLmlkKVwiXG4gICAgICAoZGVsZXRlVHJpZ2dlcmVkKT1cImNvbmZpcm1Sb3dEZWxldGUoaXRlbS5pZClcIlxuICAgID48L3NreS1pbmxpbmUtZGVsZXRlPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
1036
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZ3JpZHMvc3JjL2xpYi9tb2R1bGVzL2dyaWQvZ3JpZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZ3JpZHMvc3JjL2xpYi9tb2R1bGVzL2dyaWQvZ3JpZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxlQUFlLEVBRWYsbUJBQW1CLEVBQ25CLFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUlMLE1BQU0sRUFHTixXQUFXLEVBQ1gsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLHNCQUFzQixHQU12QixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQ0wsYUFBYSxHQUVkLE1BQU0sNEJBQTRCLENBQUM7QUFFcEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM3QyxPQUFPLEVBQ0wsZUFBZSxFQUVmLE9BQU8sRUFFUCxTQUFTLEVBQ1QsS0FBSyxHQUNOLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixHQUFHLEVBQ0gsSUFBSSxFQUNKLFNBQVMsRUFDVCxTQUFTLEdBQ1YsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQU16RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQU0vRCxPQUFPLEVB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dCI6WyJpbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFbGVtZW50UmVmLFxuICBFbnZpcm9ubWVudEluamVjdG9yLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxuICBWaWV3Q2hpbGRyZW4sXG4gIGluamVjdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBTa3lBZmZpeEF1dG9GaXRDb250ZXh0LFxuICBTa3lBZmZpeFNlcnZpY2UsXG4gIFNreUFwcFdpbmRvd1JlZixcbiAgU2t5TG9nU2VydmljZSxcbiAgU2t5T3ZlcmxheVNlcnZpY2UsXG4gIFNreVVJQ29uZmlnU2VydmljZSxcbn0gZnJvbSAnQHNreXV4L2NvcmUnO1xuaW1wb3J0IHtcbiAgTGlzdEl0ZW1Nb2RlbCxcbiAgTGlzdFNvcnRGaWVsZFNlbGVjdG9yTW9kZWwsXG59IGZyb20gJ0Bza3l1eC9saXN0LWJ1aWxkZXItY29tbW9uJztcblxuaW1wb3J0IHsgRHJhZ3VsYVNlcnZpY2UgfSBmcm9tICduZzItZHJhZ3VsYSc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIE9ic2VydmFibGUsXG4gIFN1YmplY3QsXG4gIFN1YnNjcmlwdGlvbixcbiAgZnJvbUV2ZW50LFxuICBtZXJnZSxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcbiAgbWFwLFxuICB0YWtlLFxuICB0YWtlVW50aWwsXG4gIHRha2VXaGlsZSxcbn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBTa3lHcmlkQWRhcHRlclNlcnZpY2UgfSBmcm9tICcuL2dyaWQtYWRhcHRlci5zZXJ2aWNlJztcbmltcG9ydCB7IFNreUdyaWRDb2x1bW5Db21wb25lbnQgfSBmcm9tICcuL2dyaWQtY29sdW1uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTa3lHcmlkQ29sdW1uTW9kZWwgfSBmcm9tICcuL2dyaWQtY29sdW1uLm1vZGVsJztcbmltcG9ydCB7IFNreUdyaWRDb2x1bW5EZXNjcmlwdGlvbk1vZGVsQ2hhbmdlIH0gZnJvbSAnLi90eXBlcy9ncmlkLWNvbHVtbi1kZXNjcmlwdGlvbi1tb2RlbC1jaGFuZ2UnO1xuaW1wb3J0IHsgU2t5R3JpZENvbHVtbkhlYWRpbmdNb2RlbENoYW5nZSB9IGZyb20gJy4vdHlwZXMvZ3JpZC1jb2x1bW4taGVhZGluZy1tb2RlbC1jaGFuZ2UnO1xuaW1wb3J0IHsgU2t5R3JpZENvbHVtbklubGluZUhlbHBQb3BvdmVyTW9kZWxDaGFuZ2UgfSBmcm9tICcuL3R5cGVzL2dyaWQtY29sdW1uLWlubGluZS1oZWxwLXBvcG92ZXItbW9kZWwtY2hhbmdlJztcbmltcG9ydCB7IFNreUdyaWRDb2x1bW5XaWR0aE1vZGVsQ2hhbmdlIH0gZnJvbSAnLi90eXBlcy9ncmlkLWNvbHVtbi13aWR0aC1tb2RlbC1jaGFuZ2UnO1xuaW1wb3J0IHsgU2t5R3JpZE1lc3NhZ2UgfSBmcm9tICcuL3R5cGVzL2dyaWQtbWVzc2FnZSc7XG5pbXBvcnQgeyBTa3lHcmlkTWVzc2FnZVR5cGUgfSBmcm9tICcuL3R5cGVzL2dyaWQtbWVzc2FnZS10eXBlJztcbmltcG9ydCB7IFNreUdyaWRSb3dEZWxldGVDYW5jZWxBcmdzIH0gZnJvbSAnLi90eXBlcy9ncmlkLXJvdy1kZWxldGUtY2FuY2VsLWFyZ3MnO1xuaW1wb3J0IHsgU2t5R3JpZFJvd0RlbGV0ZUNvbmZpZyB9IGZyb20gJy4vdHlwZXMvZ3JpZC1yb3ctZGVsZXRlLWNvbmZpZyc7XG5pbXBvcnQgeyBTa3lHcmlkUm93RGVsZXRlQ29uZmlybUFyZ3MgfSBmcm9tICcuL3R5cGVzL2dyaWQtcm93LWRlbGV0ZS1jb25maXJtLWFyZ3MnO1xuaW1wb3J0IHsgU2t5R3JpZFJvd0RlbGV0ZUNvbnRlbnRzIH0gZnJvbSAnLi90eXBlcy9ncmlkLXJvdy1kZWxldGUtY29udGVudHMnO1xuaW1wb3J0IHsgU2t5R3JpZFNlbGVjdGVkUm93c01vZGVsQ2hhbmdlIH0gZnJvbSAnLi90eXBlcy9ncmlkLXNlbGVjdGVkLXJvd3MtbW9kZWwtY2hhbmdlJztcbmltcG9ydCB7IFNreUdyaWRTZWxlY3RlZFJvd3NTb3VyY2UgfSBmcm9tICcuL3R5cGVzL2dyaWQtc2VsZWN0ZWQtcm93cy1zb3VyY2UnO1xuaW1wb3J0IHsgU2t5R3JpZFVJQ29uZmlnIH0gZnJvbSAnLi90eXBlcy9ncmlkLXVpLWNvbmZpZyc7XG5cbmxldCBuZXh0SWQgPSAwO1xuXG4vKipcbiAqIEBkZXByZWNhdGVkIGBTa3lHcmlkQ29tcG9uZW50YCBhbmQgaXRzIGZlYXR1cmVzIGFyZSBkZXByZWNhdGVkLiBXZSByZWNvbW1lbmQgdXNpbmcgdGhlIGRhdGEgZ3JpZCBpbnN0ZWFkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvY29tcG9uZW50cy9kYXRhLWdyaWRcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2t5LWdyaWQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZ3JpZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2dyaWQuY29tcG9uZW50LnNjc3MnXSxcbiAgdmlld1Byb3ZpZGVyczogW0RyYWd1bGFTZXJ2aWNlXSxcbiAgcHJvdmlkZXJzOiBbU2t5R3JpZEFkYXB0ZXJTZXJ2aWNlXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFNreUdyaWRDb21wb25lbnRcbiAgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95XG57XG4gIC8qKlxuICAgKiBDb2x1bW5zIGFuZCBjb2x1bW4gcHJvcGVydGllcyBmb3IgdGhlIGdyaWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGNvbHVtbnMobmV3Q29sdW1uczogU2t5R3JpZENvbHVtbk1vZGVsW10pIHtcbiAgICBjb25zdCBvbGRDb2x1bW5zID0gdGhpcy5jb2x1bW5zO1xuICAgIHRoaXMuX2NvbHVtbnMgPSBuZXdDb2x1bW5zO1xuICAgIGlmIChvbGRDb2x1bW5zKSB7XG4gICAgICB0aGlzLnRyYW5zZmVyQ29sdW1uV2lkdGhzKG9sZENvbHVtbnMsIHRoaXMuY29sdW1ucyk7XG4gICAgICB0aGlzLmlzUmVzaXplZCA9IGZhbHNlO1xuICAgICAgdGhpcy5zZXREaXNwbGF5ZWRDb2x1bW5zKHRydWUpO1xuICAgIH1cbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHVibGljIGdldCBjb2x1bW5zKCk6IFNreUdyaWRDb2x1bW5Nb2RlbFtdIHtcbiAgICByZXR1cm4gdGhpcy5fY29sdW1ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZGF0YSBmb3IgdGhlIGdyaWQuIEVhY2ggaXRlbSByZXF1aXJlcyBhbiBgaWRgIGFuZCBhIHByb3BlcnR5IHRoYXQgbWFwc1xuICAgKiB0byB0aGUgYGZpZWxkYCBvciBgaWRgIHByb3BlcnR5IG9mIGVhY2ggY29sdW1uIGluIHRoZSBncmlkLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGRhdGE6IGFueVtdO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGVuYWJsZSB0aGUgbXVsdGlzZWxlY3QgZmVhdHVyZSB0byBkaXNwbGF5IGEgY29sdW1uIG9mXG4gICAqIGNoZWNrYm94ZXMgb24gdGhlIGxlZnQgc2lkZSBvZiB0aGUgZ3JpZC4gWW91IGNhbiBzcGVjaWZ5IGEgdW5pcXVlIElEIHdpdGhcbiAgICogdGhlIGBtdWx0aXNlbGVjdFJvd0lkYCBwcm9wZXJ0eSwgYnV0IG11bHRpc2VsZWN0IGRlZmF1bHRzIHRvIHRoZSBgaWRgIHByb3BlcnR5IG9uXG4gICAqIHRoZSBgZGF0YWAgb2JqZWN0LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGVuYWJsZU11bHRpc2VsZWN0ID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEhvdyB0aGUgZ3JpZCBmaXRzIHRvIGl0cyBwYXJlbnQuIFRoZSB2YWxpZCBvcHRpb25zIGFyZSBgd2lkdGhgLFxuICAgKiB3aGljaCBmaXRzIHRoZSBncmlkIHRvIHRoZSBwYXJlbnQncyBmdWxsIHdpZHRoLCBhbmQgYHNjcm9sbGAsIHdoaWNoIGFsbG93cyB0aGUgZ3JpZFxuICAgKiB0byBleGNlZWQgdGhlIHBhcmVudCdzIHdpZHRoLiBJZiB0aGUgZ3JpZCBkb2VzIG5vdCBoYXZlIGVub3VnaCBjb2x1bW5zIHRvIGZpbGxcbiAgICogdGhlIHBhcmVudCdzIHdpZHRoLCBpdCBhbHdheXMgc3RyZXRjaGVzIHRvIHRoZSBwYXJlbnQncyBmdWxsIHdpZHRoLlxuICAgKiBAZGVmYXVsdCBcIndpZHRoXCJcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBmaXQgPSAnd2lkdGgnO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGRpc3BsYXkgYSB0b29sYmFyIHdpdGggdGhlIGdyaWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaGFzVG9vbGJhciA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBncmlkLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGhlaWdodDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUZXh0IHRvIGhpZ2hsaWdodCB3aXRoaW4gdGhlIGdyaWQuXG4gICAqIFR5cGljYWxseSwgdGhpcyBwcm9wZXJ0eSBpcyB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggc2VhcmNoLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGhpZ2hsaWdodFRleHQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG9ic2VydmFibGUgdG8gc2VuZCBjb21tYW5kcyB0byB0aGUgZ3JpZC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBtZXNzYWdlU3RyZWFtID0gbmV3IFN1YmplY3Q8U2t5R3JpZE1lc3NhZ2U+KCk7XG5cbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUgSUQgdGhhdCBtYXRjaGVzIGEgcHJvcGVydHkgb24gdGhlIGBkYXRhYCBvYmplY3QuXG4gICAqIEJ5IGRlZmF1bHQsIHRoaXMgcHJvcGVydHkgdXNlcyB0aGUgYGlkYCBwcm9wZXJ0eS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBtdWx0aXNlbGVjdFJvd0lkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgcm93IHRvIGhpZ2hsaWdodC4gVGhlIElEIG1hdGNoZXMgdGhlIGBpZGAgcHJvcGVydHlcbiAgICogb2YgdGhlIGBkYXRhYCBvYmplY3QuIFR5cGljYWxseSwgdGhpcyBwcm9wZXJ0eSBpcyB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGhcbiAgICogdGhlIGZseW91dCBjb21wb25lbnQgdG8gaW5kaWNhdGUgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCByb3cuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgcm93SGlnaGxpZ2h0ZWRJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY29sdW1ucyB0byBkaXNwbGF5IGluIHRoZSBncmlkIGJhc2VkIG9uIHRoZSBgaWRgIG9yIGBmaWVsZGAgcHJvcGVydGllc1xuICAgKiBvZiB0aGUgY29sdW1ucy4gSWYgbm8gY29sdW1ucyBhcmUgc3BlY2lmaWVkLCB0aGVuIHRoZSBncmlkIGRpc3BsYXlzIGFsbCBjb2x1bW5zLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBzZWxlY3RlZENvbHVtbklkcyh2YWx1ZTogc3RyaW5nW10pIHtcbiAgICBjb25zdCBjdXJyZW50SWRzID0gdGhpcy5fc2VsZWN0ZWRDb2x1bW5JZHM7XG4gICAgdGhpcy5fc2VsZWN0ZWRDb2x1bW5JZHMgPSB2YWx1ZTtcblxuICAgIGlmICh0aGlzLmNvbHVtbnMpIHtcbiAgICAgIHRoaXMuc2V0RGlzcGxheWVkQ29sdW1ucygpO1xuICAgIH1cblxuICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBpZHMgaGF2ZSBjaGFuZ2VkLlxuICAgIGlmICghY3VycmVudElkcyB8fCAhdmFsdWUgfHwgIXRoaXMuYXJyYXlzRXF1YWwodmFsdWUsIGN1cnJlbnRJZHMpKSB7XG4gICAgICAvLyBUaGlzIHZhcmlhYmxlIGVuc3VyZXMgdGhhdCB3ZSBkbyBub3Qgc2V0IHVzZXIgY29uZmlnIG9wdGlvbnMgb3IgZmlyZSB0aGUgY2hhbmdlIGV2ZW50XG4gICAgICAvLyBvbiB0aGUgZmlyc3QgdGltZSB0aGF0IHRoZSBjb2x1bW5zIGFyZSBzZXQgdXBcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ29sdW1uSWRzU2V0KSB7XG4gICAgICAgIHRoaXMuc2V0VXNlckNvbmZpZyh7XG4gICAgICAgICAgc2VsZWN0ZWRDb2x1bW5JZHM6IHZhbHVlLFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1uSWRzQ2hhbmdlLmVtaXQodGhpcy5fc2VsZWN0ZWRDb2x1bW5JZHMpO1xuXG4gICAgICAgIGlmICh0aGlzLmlzUmVzaXplZCkge1xuICAgICAgICAgIHRoaXMucmVzZXRUYWJsZVdpZHRoKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1uSWRzU2V0ID0gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWRDb2x1bW5JZHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZENvbHVtbklkcztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgc2V0IG9mIElEcyBmb3IgdGhlIHJvd3MgdG8gc2VsZWN0IGluIGEgbXVsdGlzZWxlY3QgZ3JpZC5cbiAgICogVGhlIElEcyBtYXRjaCB0aGUgYGlkYCBwcm9wZXJ0aWVzIG9mIHRoZSBgZGF0YWAgb2JqZWN0cy5cbiAgICogUm93cyB3aXRoIElEcyB0aGF0IGFyZSBub3QgaW5jbHVkZWQgYXJlIGRlLXNlbGVjdGVkIGluIHRoZSBncmlkLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBzZWxlY3RlZFJvd0lkcyh2YWx1ZTogc3RyaW5nW10pIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuX3NlbGVjdGVkUm93SWRzID0gdmFsdWU7XG4gICAgICB0aGlzLmFwcGx5U2VsZWN0ZWRSb3dzKCk7XG4gICAgICB0aGlzLmVtaXRTZWxlY3RlZFJvd3MoU2t5R3JpZFNlbGVjdGVkUm93c1NvdXJjZS5TZWxlY3RlZFJvd0lkc0NoYW5nZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBzZWxlY3RlZFJvd0lkcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkUm93SWRzO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUga2V5IGZvciB0aGUgVUkgQ29uZmlnIFNlcnZpY2UgdG8gcmV0cmlldmUgc3RvcmVkIHNldHRpbmdzIGZyb20gYSBkYXRhYmFzZS5cbiAgICogVGhlIFVJIENvbmZpZyBTZXJ2aWNlIHNhdmVzIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIHVzZXJzIGFuZCByZXR1cm5zXG4gICAqIGBzZWxlY3RlZENvbHVtbklkc2AgdG8gcHJlc2VydmUgdGhlIGNvbHVtbnMgdG8gZGlzcGxheSBhbmQgdGhlIHByZWZlcnJlZCBjb2x1bW4gb3JkZXIuIFlvdSAgbXVzdCBwcm92aWRlIGBpZGAgdmFsdWVzIGZvciB5b3VyIGBza3ktZ3JpZC1jb2x1bW5gIGVsZW1lbnRzIGJlY2F1c2UgdGhlIFVJIENvbmZpZyBTZXJ2aWNlIGRlcGVuZHMgb24gdGhvc2UgdmFsdWVzIHRvIG9yZ2FuaXplIGNvbHVtbnMgYmFzZWQgb24gdXNlciBzZXR0aW5ncy4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIFVJIENvbmZpZyBTZXJ2aWNlLCBzZWUgW3RoZSBzdGlja3kgc2V0dGluZ3MgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9kZXZlbG9wZXIuYmxhY2tiYXVkLmNvbS9za3l1eC9sZWFybi9kZXZlbG9wL3N0aWNreS1zZXR0aW5ncykuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0dGluZ3NLZXk6IHN0cmluZztcblxuICAvKipcbiAgICogRGlzcGxheXMgYSBjYXJldCBpbiB0aGUgY29sdW1uIHRoYXQgd2FzIHVzZWQgdG8gc29ydCB0aGUgZ3JpZC4gVGhpcyBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsXG4gICAqIHdoZW4geW91IHByb2dyYW1tYXRpY2FsbHkgc29ydCBkYXRhIGFuZCB3YW50IHRvIHZpc3VhbGx5IGluZGljYXRlIGhvdyB0aGUgZ3JpZCB3YXMgc29ydGVkLlxuICAgKiBUaGlzIHByb3BlcnR5IGFjY2VwdHMgYSBgTGlzdFNvcnRGaWVsZFNlbGVjdG9yTW9kZWxgIHZhbHVlIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICAgKiAtIGBmaWVsZFNlbGVjdG9yYCBSZXByZXNlbnRzIHRoZSBjdXJyZW50IHNvcnQgZmllbGQuIFRoaXMgcHJvcGVydHkgYWNjZXB0cyBgc3RyaW5nYCB2YWx1ZXMuXG4gICAqIC0gYGRlc2NlbmRpbmdgIEluZGljYXRlcyB3aGV0aGVyIHRvIHNvcnQgaW4gZGVzY2VuZGluZyBvcmRlci4gVGhlIGNhcmV0IHRoYXQgdmlzdWFsbHlcbiAgICogaW5kaWNhdGVzIHRoZSBzb3J0IG9yZGVyIHBvaW50cyBkb3duIGZvciBkZXNjZW5kaW5nIG9yZGVyIGFuZCB1cCBmb3IgYXNjZW5kaW5nIG9yZGVyLlxuICAgKiBUaGlzIHByb3BlcnR5IGFjY2VwdHMgYGJvb2xlYW5gIHZhbHVlcy4gRGVmYXVsdCBpcyBgZmFsc2VgLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNvcnRGaWVsZDogTGlzdFNvcnRGaWVsZFNlbGVjdG9yTW9kZWw7XG5cbiAgLyoqXG4gICAqIFRoZSB3aWR0aCBvZiB0aGUgZ3JpZCBpbiBwaXhlbHMuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgd2lkdGg6IG51bWJlcjtcblxuICAvKipcbiAgICogRmlyZXMgd2hlbiB0aGUgd2lkdGggb2YgYSBjb2x1bW4gY2hhbmdlcy5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgY29sdW1uV2lkdGhDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFxuICAgIFNreUdyaWRDb2x1bW5XaWR0aE1vZGVsQ2hhbmdlW11cbiAgPigpO1xuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHRoZSBzZWxlY3Rpb24gb2YgbXVsdGlzZWxlY3QgY2hlY2tib3hlcyBjaGFuZ2VzLlxuICAgKiBFbWl0cyBhbiBhcnJheSBvZiBJRHMgZm9yIHRoZSBzZWxlY3RlZCByb3dzIGJhc2VkIG9uIHRoZSBgbXVsdGlzZWxlY3RSb3dJZGAgcHJvcGVydHlcbiAgICogdGhhdCB0aGUgY29uc3VtZXIgcHJvdmlkZXMuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIG11bHRpc2VsZWN0U2VsZWN0aW9uQ2hhbmdlID1cbiAgICBuZXcgRXZlbnRFbWl0dGVyPFNreUdyaWRTZWxlY3RlZFJvd3NNb2RlbENoYW5nZT4oKTtcblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIHJvd0RlbGV0ZUNhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXI8U2t5R3JpZFJvd0RlbGV0ZUNhbmNlbEFyZ3M+KCk7XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyByb3dEZWxldGVDb25maXJtID0gbmV3IEV2ZW50RW1pdHRlcjxTa3lHcmlkUm93RGVsZXRlQ29uZmlybUFyZ3M+KCk7XG5cbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gdGhlIGNvbHVtbnMgdG8gZGlzcGxheSBpbiB0aGUgZ3JpZCBjaGFuZ2Ugb3Igd2hlbiB0aGUgb3JkZXIgb2YgdGhlIGNvbHVtbnMgY2hhbmdlcy5cbiAgICogVGhlIGV2ZW50IGVtaXRzIGFuIGFycmF5IG9mIElEcyBmb3IgdGhlIGRpc3BsYXllZCBjb2x1bW5zIHRoYXQgcmVmbGVjdHMgdGhlIGNvbHVtbiBvcmRlci5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgc2VsZWN0ZWRDb2x1bW5JZHNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZ1tdPigpO1xuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHRoZSBhY3RpdmUgc29ydCBmaWVsZCBjaGFuZ2VzLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBzb3J0RmllbGRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPExpc3RTb3J0RmllbGRTZWxlY3Rvck1vZGVsPigpO1xuXG4gIHB1YmxpYyBjb2x1bW5SZXNpemVTdGVwID0gMTA7XG4gIHB1YmxpYyBjdXJyZW50U29ydEZpZWxkOiBCZWhhdmlvclN1YmplY3Q8TGlzdFNvcnRGaWVsZFNlbGVjdG9yTW9kZWw+O1xuICBwdWJsaWMgZGlzcGxheWVkQ29sdW1uczogU2t5R3JpZENvbHVtbk1vZGVsW107XG4gIHB1YmxpYyBkcmFndWxhR3JvdXBOYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyBncmlkSWQ6IG51bWJlciA9ICsrbmV4dElkO1xuICBwdWJsaWMgcm93RGVsZXRlQ29uZmlnczogU2t5R3JpZFJvd0RlbGV0ZUNvbmZpZ1tdID0gW107XG4gIHB1YmxpYyBpdGVtczogYW55W107XG4gIHB1YmxpYyBtYXhDb2xXaWR0aCA9IDk5OTk7IC8vIFRoaXMgaXMgYW4gYXJiaXRyYXJ5IG51bWJlciwgYXMgdGhlIGlucHV0IHJhbmdlIHBpY2tlciB3b24ndCB3b3JrIHdpdGhvdXQgYSB2YWx1ZS5cbiAgcHVibGljIG1pbkNvbFdpZHRoID0gNTA7XG4gIHB1YmxpYyBzaG93UmVzaXplQmFyID0gZmFsc2U7XG4gIHB1YmxpYyBzaG93VG9wU2Nyb2xsID0gZmFsc2U7XG5cbiAgcHVibGljIGdldCB0YWJsZVdpZHRoKCkge1xuICAgIHJldHVybiB0aGlzLnRhYmxlRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuICB9XG5cbiAgQENvbnRlbnRDaGlsZHJlbihTa3lHcmlkQ29sdW1uQ29tcG9uZW50KVxuICBwcml2YXRlIGNvbHVtbkNvbXBvbmVudHM6IFF1ZXJ5TGlzdDxTa3lHcmlkQ29sdW1uQ29tcG9uZW50PjtcblxuICBAVmlld0NoaWxkcmVuKCdncmlkQ29sJylcbiAgcHJpdmF0ZSBjb2x1bW5FbGVtZW50UmVmczogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuICBAVmlld0NoaWxkcmVuKCdjb2xTaXplUmFuZ2UnKVxuICBwcml2YXRlIGNvbHVtblJhbmdlSW5wdXRFbGVtZW50UmVmczogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuICBAVmlld0NoaWxkcmVuKCdpbmxpbmVEZWxldGVSZWYnKVxuICBwcml2YXRlIGlubGluZURlbGV0ZVJlZnM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcbiAgQFZpZXdDaGlsZCgnaW5saW5lRGVsZXRlVGVtcGxhdGVSZWYnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gIHByaXZhdGUgaW5saW5lRGVsZXRlVGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPHVua25vd24+O1xuICBAVmlld0NoaWxkKCdncmlkQ29udGFpbmVyJylcbiAgcHJpdmF0ZSB0YWJsZUNvbnRhaW5lckVsZW1lbnRSZWY6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2dyaWRUYWJsZScpXG4gIHByaXZhdGUgdGFibGVFbGVtZW50UmVmOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCd0b3BTY3JvbGxDb250YWluZXInKVxuICBwcml2YXRlIHRvcFNjcm9sbENvbnRhaW5lckVsZW1lbnRSZWY6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3Jlc2l6ZUJhcicpXG4gIHByaXZhdGUgcmVzaXplQmFyOiBFbGVtZW50UmVmO1xuXG4gIHByaXZhdGUgYWN0aXZlUmVzaXplQ29sdW1uSW5kZXg6IHN0cmluZztcbiAgcHJpdmF0ZSBpc0RyYWdnaW5nUmVzaXplSGFuZGxlID0gZmFsc2U7XG4gIHByaXZhdGUgaXNSZXNpemVkID0gZmFsc2U7XG4gIHByaXZhdGUgbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgcm93RGVsZXRlQ29udGVudHM6IFJlY29yZDxzdHJpbmcsIFNreUdyaWRSb3dEZWxldGVDb250ZW50cz4gPSB7fTtcbiAgcHJpdmF0ZSBzdGFydENvbHVtbldpZHRoOiBudW1iZXI7XG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcbiAgcHJpdmF0ZSBzY3JvbGxUcmlnZ2VyZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBzZWxlY3RlZENvbHVtbklkc1NldCA9IGZhbHNlO1xuICBwcml2YXRlIHhQb3NTdGFydDogbnVtYmVyO1xuXG4gIHByaXZhdGUgX2NvbHVtbnM6IFNreUdyaWRDb2x1bW5Nb2RlbFtdO1xuICBwcml2YXRlIF9zZWxlY3RlZENvbHVtbklkczogc3RyaW5nW107XG4gIHByaXZhdGUgX3NlbGVjdGVkUm93SWRzOiBzdHJpbmdbXTtcblxuICByZWFkb25seSAjZW52aXJvbm1lbnRJbmplY3RvciA9IGluamVjdChFbnZpcm9ubWVudEluamVjdG9yKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFmZml4U2VydmljZTogU2t5QWZmaXhTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgZHJhZ3VsYVNlcnZpY2U6IERyYWd1bGFTZXJ2aWNlLFxuICAgIHByaXZhdGUgZ3JpZEFkYXB0ZXI6IFNreUdyaWRBZGFwdGVyU2VydmljZSxcbiAgICBwcml2YXRlIG92ZXJsYXlTZXJ2aWNlOiBTa3lPdmVybGF5U2VydmljZSxcbiAgICBwcml2YXRlIHNreVdpbmRvdzogU2t5QXBwV2luZG93UmVmLFxuICAgIHByaXZhdGUgdWlDb25maWdTZXJ2aWNlOiBTa3lVSUNvbmZpZ1NlcnZpY2UsXG4gICAgbG9nZ2VyOiBTa3lMb2dTZXJ2aWNlLFxuICApIHtcbiAgICBsb2dnZXIuZGVwcmVjYXRlZCgnU2t5R3JpZENvbXBvbmVudCcsIHtcbiAgICAgIGRlcHJlY2F0aW9uTWFqb3JWZXJzaW9uOiA2LFxuICAgICAgbW9yZUluZm9Vcmw6ICdodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2NvbXBvbmVudHMvZGF0YS1ncmlkJyxcbiAgICAgIHJlcGxhY2VtZW50UmVjb21tZW5kYXRpb246ICdVc2UgZGF0YSBncmlkIGluc3RlYWQuJyxcbiAgICB9KTtcblxuICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IG5ldyBBcnJheTxTa3lHcmlkQ29sdW1uTW9kZWw+KCk7XG4gICAgdGhpcy5pdGVtcyA9IG5ldyBBcnJheTxhbnk+KCk7XG4gICAgdGhpcy5jdXJyZW50U29ydEZpZWxkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxMaXN0U29ydEZpZWxkU2VsZWN0b3JNb2RlbD4oe1xuICAgICAgZmllbGRTZWxlY3RvcjogJycsXG4gICAgICBkZXNjZW5kaW5nOiBmYWxzZSxcbiAgICB9KTtcbiAgICB0aGlzLmRyYWd1bGFHcm91cE5hbWUgPSBgc2t5LWdyaWRzLWdyb3VwLSR7dGhpcy5ncmlkSWR9YDtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLm1lc3NhZ2VTdHJlYW1cbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgobWVzc2FnZTogU2t5R3JpZE1lc3NhZ2UpID0+IHtcbiAgICAgICAgdGhpcy5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKG1lc3NhZ2UpO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIGlmICh0aGlzLnNldHRpbmdzS2V5KSB7XG4gICAgICB0aGlzLmFwcGx5VXNlckNvbmZpZygpLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLmluaXRDb2x1bW5zKCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbml0Q29sdW1ucygpO1xuICAgIH1cblxuICAgIC8vIFNldHVwIGNvbHVtbiBkcmFnLWFuZC1kcm9wLlxuICAgIHRoaXMuZ3JpZEFkYXB0ZXIuaW5pdGlhbGl6ZURyYWdBbmREcm9wKFxuICAgICAgdGhpcy5kcmFndWxhR3JvdXBOYW1lLFxuICAgICAgdGhpcy5kcmFndWxhU2VydmljZSxcbiAgICAgIChzZWxlY3RlZENvbHVtbklkczogc3RyaW5nW10pID0+IHtcbiAgICAgICAgdGhpcy5vbkhlYWRlckRyb3Aoc2VsZWN0ZWRDb2x1bW5JZHMpO1xuICAgICAgfSxcbiAgICApO1xuXG4gICAgdGhpcy5hcHBseVNlbGVjdGVkUm93cygpO1xuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLmNoZWNrVXNlckNvbHVtbldpZHRoc0ZvclNjcm9sbCgpO1xuICB9XG5cbiAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlc1snY29sdW1ucyddICYmIHRoaXMuY29sdW1ucykge1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb2x1bW5JZHMpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbklkcyA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5JZHMuZmlsdGVyKChjb2x1bW5JZCkgPT4ge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbHVtbnMuZmluZCgoY29sdW1uKSA9PiBjb2x1bW4uaWQgPT09IGNvbHVtbklkKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLnNldERpc3BsYXllZENvbHVtbnModHJ1ZSk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXNbJ2RhdGEnXSAmJiB0aGlzLmRhdGEpIHtcbiAgICAgIHRoaXMudHJhbnNmb3JtRGF0YSgpO1xuXG4gICAgICAvLyBUaGlzIHNldCB0aW1lb3V0IGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhlIGRhdGEgaGFzIHJlbmRlcmVkIGluIHRoZSBncmlkXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgLy8gVGhpcyBjbGVhbnMgdXAgYW55IGxpbmdlcmluZyByb3cgZGVsZXRlcyBmb3IgaXRlbXMgdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZC5cbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5yb3dEZWxldGVDb250ZW50cykuZm9yRWFjaCgoaWQpID0+IHtcbiAgICAgICAgICBpZiAoIXRoaXMuZGF0YS5maW5kKChpdGVtKSA9PiBpdGVtLmlkID09PSBpZCkpIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdHJveVJvd0RlbGV0ZShpZCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFRoZSByb3dzIHJlLXJlbmRlciB0aHVzIG1lc3NpbmcgdXAgdGhlIGFmZml4ZXJzLiBXZSBtdXN0IHJlYWZmaXggdGhlbSBzbyB0aGF0IHRoaW5nc1xuICAgICAgICAgICAgLy8gY29udGludWUgdG8gcmVuZGVyIGNvcnJlY3RseS5cbiAgICAgICAgICAgIGNvbnN0IHJvd0VsZW1lbnQ6IEhUTUxFbGVtZW50ID1cbiAgICAgICAgICAgICAgdGhpcy50YWJsZUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAgICAgICAgICdbc2t5LWNtcC1pZD1cIicgKyBpZCArICdcIl0nLFxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICB0aGlzLnJvd0RlbGV0ZUNvbnRlbnRzW2lkXS5hZmZpeGVyLmFmZml4VG8ocm93RWxlbWVudCwge1xuICAgICAgICAgICAgICBhdXRvRml0Q29udGV4dDogU2t5QWZmaXhBdXRvRml0Q29udGV4dC5WaWV3cG9ydCxcbiAgICAgICAgICAgICAgaXNTdGlja3k6IHRydWUsXG4gICAgICAgICAgICAgIHBsYWNlbWVudDogJ2Fib3ZlJyxcbiAgICAgICAgICAgICAgdmVydGljYWxBbGlnbm1lbnQ6ICd0b3AnLFxuICAgICAgICAgICAgICBob3Jpem9udGFsQWxpZ25tZW50OiAnbGVmdCcsXG4gICAgICAgICAgICAgIGVuYWJsZUF1dG9GaXQ6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmNoZWNrVXNlckNvbHVtbldpZHRoc0ZvclNjcm9sbCgpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXNbJ3NvcnRGaWVsZCddKSB7XG4gICAgICB0aGlzLnNldFNvcnRIZWFkZXJzKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKChzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbikgPT4ge1xuICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfSk7XG4gICAgdGhpcy5tdWx0aXNlbGVjdFNlbGVjdGlvbkNoYW5nZS5jb21wbGV0ZSgpO1xuXG4gICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKTtcbiAgICB0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcblxuICAgIE9iamVjdC5rZXlzKHRoaXMucm93RGVsZXRlQ29udGVudHMpLmZvckVhY2goKGlkKSA9PiB7XG4gICAgICB0aGlzLmRlc3Ryb3lSb3dEZWxldGUoaWQpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5kcmFndWxhU2VydmljZS5kZXN0cm95KHRoaXMuZHJhZ3VsYUdyb3VwTmFtZSk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJylcbiAgcHVibGljIG9uV2luZG93UmVzaXplKCk6IHZvaWQge1xuICAgIHRoaXMuY2hlY2tVc2VyQ29sdW1uV2lkdGhzRm9yU2Nyb2xsKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0VG9wU2Nyb2xsV2lkdGgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50YWJsZUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zY3JvbGxXaWR0aDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRUYWJsZUNsYXNzTmFtZXMoKSB7XG4gICAgY29uc3QgY2xhc3NOYW1lczogc3RyaW5nW10gPSBbXTtcblxuICAgIGlmICh0aGlzLmZpdCAhPT0gJ3Njcm9sbCcpIHtcbiAgICAgIGNsYXNzTmFtZXMucHVzaCgnc2t5LWdyaWQtZml0Jyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaGFzVG9vbGJhcikge1xuICAgICAgY2xhc3NOYW1lcy5wdXNoKCdza3ktZ3JpZC1oYXMtdG9vbGJhcicpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmFkZERlbGltaXRlcihjbGFzc05hbWVzLCAnICcpO1xuICB9XG5cbiAgcHVibGljIGdldFRhYmxlSGVhZGVyQ2xhc3NOYW1lcyhjb2x1bW46IFNreUdyaWRDb2x1bW5Nb2RlbCkge1xuICAgIGNvbnN0IGNsYXNzTmFtZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICBpZiAoY29sdW1uICYmIGNvbHVtbi5sb2NrZWQpIHtcbiAgICAgIGNsYXNzTmFtZXMucHVzaCgnc2t5LWdyaWQtaGVhZGVyLWxvY2tlZCcpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmFkZERlbGltaXRlcihjbGFzc05hbWVzLCAnICcpO1xuICB9XG5cbiAgcHVibGljIGdldENhcmV0SWNvbk5hbWVzKGNvbHVtbjogU2t5R3JpZENvbHVtbk1vZGVsKSB7XG4gICAgY29uc3QgaWNvbk5hbWVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgdGhpcy5nZXRTb3J0RGlyZWN0aW9uKGNvbHVtbi5maWVsZCkuc3Vic2NyaWJlKChzb3J0RGlyKSA9PiB7XG4gICAgICBpZiAoc29ydERpciA9PT0gJ2FzYycpIHtcbiAgICAgICAgaWNvbk5hbWVzLnB1c2goJ2NhcmV0LXVwJyk7XG4gICAgICB9XG4gICAgICBpZiAoc29ydERpciA9PT0gJ2Rlc2MnKSB7XG4gICAgICAgIGljb25OYW1lcy5wdXNoKCdjYXJldC1kb3duJyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5hZGREZWxpbWl0ZXIoaWNvbk5hbWVzLCAnICcpO1xuICB9XG5cbiAgcHVibGljIG9uS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCwgY29sdW1uOiBTa3lHcmlkQ29sdW1uTW9kZWwpIHtcbiAgICBjb25zdCBrZXkgPSBldmVudC5rZXkudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoa2V5ID09PSAnZW50ZXInIHx8IGtleSA9PT0gJyAnKSB7XG4gICAgICB0aGlzLnNvcnRCeUNvbHVtbihjb2x1bW4pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzb3J0QnlDb2x1bW4oY29sdW1uOiBTa3lHcmlkQ29sdW1uTW9kZWwpIHtcbiAgICBpZiAoIXRoaXMuaXNEcmFnZ2luZ1Jlc2l6ZUhhbmRsZSAmJiBjb2x1bW4uaXNTb3J0YWJsZSkge1xuICAgICAgdGhpcy5jdXJyZW50U29ydEZpZWxkXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgbWFwKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgbGV0IHNlbGVjdG9yID0ge1xuICAgICAgICAgICAgICBmaWVsZFNlbGVjdG9yOiBjb2x1bW4uZmllbGQsXG4gICAgICAgICAgICAgIGRlc2NlbmRpbmc6IHRydWUsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGZpZWxkICYmXG4gICAgICAgICAgICAgIGZpZWxkLmZpZWxkU2VsZWN0b3IgPT09IGNvbHVtbi5maWVsZCAmJlxuICAgICAgICAgICAgICBmaWVsZC5kZXNjZW5kaW5nXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgc2VsZWN0b3IgPSB7XG4gICAgICAgICAgICAgICAgZmllbGRTZWxlY3RvcjogY29sdW1uLmZpZWxkLFxuICAgICAgICAgICAgICAgIGRlc2NlbmRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zb3J0RmllbGRDaGFuZ2UuZW1pdChzZWxlY3Rvcik7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTb3J0RmllbGQubmV4dChzZWxlY3Rvcik7XG4gICAgICAgICAgfSksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRTb3J0RGlyZWN0aW9uKGNvbHVtbkZpZWxkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRTb3J0RmllbGQucGlwZShcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICBtYXAoKGZpZWxkKSA9PiB7XG4gICAgICAgIHJldHVybiBmaWVsZC5maWVsZFNlbGVjdG9yID09PSBjb2x1bW5GaWVsZFxuICAgICAgICAgID8gZmllbGQuZGVzY2VuZGluZ1xuICAgICAgICAgICAgPyAnZGVzYydcbiAgICAgICAgICAgIDogJ2FzYydcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0QXJpYVNvcnREaXJlY3Rpb24oY29sdW1uOiBTa3lHcmlkQ29sdW1uTW9kZWwpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRTb3J0RmllbGQucGlwZShcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICBtYXAoKGZpZWxkKSA9PiB7XG4gICAgICAgIHJldHVybiBmaWVsZC5maWVsZFNlbGVjdG9yID09PSBjb2x1bW4uZmllbGRcbiAgICAgICAgICA/IGZpZWxkLmRlc2NlbmRpbmdcbiAgICAgICAgICAgID8gJ2Rlc2NlbmRpbmcnXG4gICAgICAgICAgICA6ICdhc2NlbmRpbmcnXG4gICAgICAgICAgOiBjb2x1bW4uaXNTb3J0YWJsZVxuICAgICAgICAgICAgPyAnbm9uZSdcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDYXJldFZpc2liaWxpdHkoY29sdW1uRmllbGQ6IHN0cmluZyk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFNvcnRGaWVsZC5waXBlKFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIG1hcCgoZmllbGQpID0+IHtcbiAgICAgICAgcmV0dXJuIGZpZWxkLmZpZWxkU2VsZWN0b3IgPT09IGNvbHVtbkZpZWxkID8gJ3Zpc2libGUnIDogJ2hpZGRlbic7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldEhlbHBJbmxpbmVDbGFzcyhjb2x1bW5GaWVsZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q2FyZXRWaXNpYmlsaXR5KGNvbHVtbkZpZWxkKS5waXBlKFxuICAgICAgbWFwKCh2aXNpYmlsaXR5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgcmV0dXJuIHZpc2liaWxpdHkgPT09ICdoaWRkZW4nO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBvbk11bHRpc2VsZWN0Q2hlY2tib3hDaGFuZ2UoKSB7XG4gICAgdGhpcy5lbWl0U2VsZWN0ZWRSb3dzKFNreUdyaWRTZWxlY3RlZFJvd3NTb3VyY2UuQ2hlY2tib3hDaGFuZ2UpO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZUNvbHVtbkhlYWRpbmcoY2hhbmdlOiBTa3lHcmlkQ29sdW1uSGVhZGluZ01vZGVsQ2hhbmdlKSB7XG4gICAgY29uc3QgZm91bmRDb2x1bW5Nb2RlbCA9IHRoaXMuY29sdW1ucy5maW5kKChjb2x1bW46IFNreUdyaWRDb2x1bW5Nb2RlbCkgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgKGNoYW5nZS5pZCAhPT0gdW5kZWZpbmVkICYmIGNoYW5nZS5pZCA9PT0gY29sdW1uLmlkKSB8fFxuICAgICAgICAoY2hhbmdlLmZpZWxkICE9PSB1bmRlZmluZWQgJiYgY2hhbmdlLmZpZWxkID09PSBjb2x1bW4uZmllbGQpXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoZm91bmRDb2x1bW5Nb2RlbCkge1xuICAgICAgZm91bmRDb2x1bW5Nb2RlbC5oZWFkaW5nID0gY2hhbmdlLnZhbHVlO1xuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlSW5saW5lSGVscFBvcG92ZXIoXG4gICAgY2hhbmdlOiBTa3lHcmlkQ29sdW1uSW5saW5lSGVscFBvcG92ZXJNb2RlbENoYW5nZSxcbiAgKSB7XG4gICAgY29uc3QgZm91bmRDb2x1bW5Nb2RlbCA9IHRoaXMuY29sdW1ucy5maW5kKChjb2x1bW46IFNreUdyaWRDb2x1bW5Nb2RlbCkgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgKGNoYW5nZS5pZCAhPT0gdW5kZWZpbmVkICYmIGNoYW5nZS5pZCA9PT0gY29sdW1uLmlkKSB8fFxuICAgICAgICAoY2hhbmdlLmZpZWxkICE9PSB1bmRlZmluZWQgJiYgY2hhbmdlLmZpZWxkID09PSBjb2x1bW4uZmllbGQpXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoZm91bmRDb2x1bW5Nb2RlbCkge1xuICAgICAgZm91bmRDb2x1bW5Nb2RlbC5pbmxpbmVIZWxwUG9wb3ZlciA9IGNoYW5nZS52YWx1ZTtcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHVwZGF0ZUNvbHVtbkRlc2NyaXB0aW9uKGNoYW5nZTogU2t5R3JpZENvbHVtbkRlc2NyaXB0aW9uTW9kZWxDaGFuZ2UpIHtcbiAgICBjb25zdCBmb3VuZENvbHVtbk1vZGVsID0gdGhpcy5jb2x1bW5zLmZpbmQoKGNvbHVtbjogU2t5R3JpZENvbHVtbk1vZGVsKSA9PiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAoY2hhbmdlLmlkICE9PSB1bmRlZmluZWQgJiYgY2hhbmdlLmlkID09PSBjb2x1bW4uaWQpIHx8XG4gICAgICAgIChjaGFuZ2UuZmllbGQgIT09IHVuZGVmaW5lZCAmJiBjaGFuZ2UuZmllbGQgPT09IGNvbHVtbi5maWVsZClcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChmb3VuZENvbHVtbk1vZGVsKSB7XG4gICAgICBmb3VuZENvbHVtbk1vZGVsLmRlc2NyaXB0aW9uID0gY2hhbmdlLnZhbHVlO1xuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25SZXNpemVDb2x1bW5TdGFydChldmVudDoge1xuICAgIHN0b3BQcm9wYWdhdGlvbjogKCkgPT4gdm9pZDtcbiAgICBwcmV2ZW50RGVmYXVsdDogKCkgPT4gdm9pZDtcbiAgICBwYWdlWD86IG51bWJlcjtcbiAgfSk6IHZvaWQge1xuICAgIC8vIElmIHRoaXMgdGFibGUgaGFzbid0IGJlZW4gcmVzaXplZCwgaW5pdGlhbGl6ZSBhbGwgdGhlIHJlc2l6ZSB3aWR0aHMuXG4gICAgaWYgKCF0aGlzLmlzUmVzaXplZCkge1xuICAgICAgdGhpcy5pbml0Q29sdW1uV2lkdGhzKCk7XG4gICAgICB0aGlzLmlzUmVzaXplZCA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5pbml0aWFsaXplUmVzaXplQ29sdW1uKGV2ZW50KTtcblxuICAgIHRoaXMuaXNEcmFnZ2luZ1Jlc2l6ZUhhbmRsZSA9IHRydWU7XG4gICAgdGhpcy54UG9zU3RhcnQgPSBldmVudC5wYWdlWDtcbiAgICB0aGlzLnNob3dSZXNpemVCYXIgPSB0cnVlO1xuXG4gICAgLy8gU2hvdyB2aXN1YWwgaW5kaWNhdG9yIG9mIHdoZXJlIG1vdXNlIGlzIGRyYWdnaW5nIChyZXNpemVCYXIpLlxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMuc2V0UmVzaXplQmFyUG9zaXRpb24oZXZlbnQucGFnZVgpO1xuXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIGNvbnN0IG1vdXNlTW92ZUV2ZW50ID0gZnJvbUV2ZW50KGRvY3VtZW50LCAnbW91c2Vtb3ZlJyk7XG4gICAgY29uc3QgdG91Y2hNb3ZlRXZlbnQgPSBmcm9tRXZlbnQoZG9jdW1lbnQsICd0b3VjaG1vdmUnKTtcblxuICAgIG1lcmdlKG1vdXNlTW92ZUV2ZW50LCB0b3VjaE1vdmVFdmVudClcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlV2hpbGUoKCkgPT4ge1xuICAgICAgICAgIHJldHVybiB0aGlzLmlzRHJhZ2dpbmdSZXNpemVIYW5kbGU7XG4gICAgICAgIH0pLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgobW92ZUV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5vblJlc2l6ZUhhbmRsZU1vdmUobW92ZUV2ZW50KTtcbiAgICAgIH0pO1xuXG4gICAgY29uc3QgbW91c2VVcEV2ZW50ID0gZnJvbUV2ZW50KGRvY3VtZW50LCAnbW91c2V1cCcpO1xuICAgIGNvbnN0IHRvdWNoRW5kRXZlbnQgPSBmcm9tRXZlbnQoZG9jdW1lbnQsICd0b3VjaGVuZCcpO1xuXG4gICAgbWVyZ2UobW91c2VVcEV2ZW50LCB0b3VjaEVuZEV2ZW50KVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VXaGlsZSgoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaXNEcmFnZ2luZ1Jlc2l6ZUhhbmRsZTtcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChlbmRFdmVudDogYW55KSA9PiB7XG4gICAgICAgIHRoaXMub25SZXNpemVIYW5kbGVSZWxlYXNlKGVuZEV2ZW50KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG9uS2V5ZG93blJlc2l6ZUNvbChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIC8vIElmIHRoaXMgdGFibGUgaGFzbid0IGJlZW4gcmVzaXplZCwgaW5pdGlhbGl6ZSBhbGwgdGhlIHJlc2l6ZSB3aWR0aHMuXG4gICAgaWYgKCF0aGlzLmlzUmVzaXplZCkge1xuICAgICAgdGhpcy5pbml0Q29sdW1uV2lkdGhzKCk7XG4gICAgICB0aGlzLmlzUmVzaXplZCA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5pbml0aWFsaXplUmVzaXplQ29sdW1uKGV2ZW50KTtcbiAgfVxuXG4gIHB1YmxpYyBvbklucHV0Q2hhbmdlUmVzaXplQ29sKGV2ZW50OiBFdmVudCkge1xuICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgY29uc3QgbmV3VmFsdWUgPSBOdW1iZXIoaW5wdXQudmFsdWUpO1xuICAgIGNvbnN0IGRlbHRhWCA9IG5ld1ZhbHVlIC0gdGhpcy5zdGFydENvbHVtbldpZHRoO1xuICAgIHRoaXMucmVzaXplQ29sdW1uQnlJbmRleCh0aGlzLmFjdGl2ZVJlc2l6ZUNvbHVtbkluZGV4LCBuZXdWYWx1ZSwgZGVsdGFYKTtcbiAgICBjb25zdCBsZWZ0ID0gaW5wdXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcbiAgICB0aGlzLnNldFJlc2l6ZUJhclBvc2l0aW9uKGxlZnQpO1xuICB9XG5cbiAgcHVibGljIG9uUmVzaXplSGFuZGxlTW92ZShldmVudDogTW91c2VFdmVudCkge1xuICAgIGNvbnN0IGRlbHRhWCA9IGV2ZW50LnBhZ2VYIC0gdGhpcy54UG9zU3RhcnQ7XG4gICAgY29uc3QgbmV3Q29sV2lkdGggPSB0aGlzLnN0YXJ0Q29sdW1uV2lkdGggKyBkZWx0YVg7XG5cbiAgICBpZiAobmV3Q29sV2lkdGggPD0gdGhpcy5taW5Db2xXaWR0aCkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbWF4ID0gdGhpcy5nZXRNYXhSYW5nZUJ5SW5kZXgodGhpcy5hY3RpdmVSZXNpemVDb2x1bW5JbmRleCk7XG4gICAgaWYgKHRoaXMuZml0ID09PSAnd2lkdGgnICYmIG5ld0NvbFdpZHRoID4gbWF4KSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNldFJlc2l6ZUJhclBvc2l0aW9uKGV2ZW50LnBhZ2VYKTtcbiAgfVxuXG4gIHB1YmxpYyBvblJlc2l6ZUhhbmRsZUJsdXIoKSB7XG4gICAgdGhpcy5zaG93UmVzaXplQmFyID0gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgb25SZXNpemVIYW5kbGVGb2N1cyhldmVudDogRm9jdXNFdmVudCkge1xuICAgIHRoaXMuc2hvd1Jlc2l6ZUJhciA9IHRydWU7XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgY29uc3QgbGVmdCA9IHRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O1xuICAgIHRoaXMuc2V0UmVzaXplQmFyUG9zaXRpb24obGVmdCk7XG4gIH1cblxuICBwdWJsaWMgb25SZXNpemVIYW5kbGVSZWxlYXNlKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgdGhpcy5zaG93UmVzaXplQmFyID0gZmFsc2U7XG4gICAgY29uc3QgZGVsdGFYID0gZXZlbnQucGFnZVggLSB0aGlzLnhQb3NTdGFydDtcbiAgICBjb25zdCBuZXdDb2xXaWR0aCA9IHRoaXMuc3RhcnRDb2x1bW5XaWR0aCArIGRlbHRhWDtcbiAgICB0aGlzLnJlc2l6ZUNvbHVtbkJ5SW5kZXgodGhpcy5hY3RpdmVSZXNpemVDb2x1bW5JbmRleCwgbmV3Q29sV2lkdGgsIGRlbHRhWCk7XG4gICAgdGhpcy5pc0RyYWdnaW5nUmVzaXplSGFuZGxlID0gZmFsc2U7XG4gICAgdGhpcy5hY3RpdmVSZXNpemVDb2x1bW5JbmRleCA9IHVuZGVmaW5lZDtcblxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwdWJsaWMgb25Sb3dDbGljayhldmVudDogYW55LCBzZWxlY3RlZEl0ZW06IExpc3RJdGVtTW9kZWwpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh0aGlzLmVuYWJsZU11bHRpc2VsZWN0KSB7XG4gICAgICBpZiAoXG4gICAgICAgIGV2ZW50LnRhcmdldCA9PT0gZXZlbnQuY3VycmVudFRhcmdldCB8fFxuICAgICAgICAhdGhpcy5pc0ludGVyYWN0aXZlRWxlbWVudChldmVudClcbiAgICAgICkge1xuICAgICAgICBzZWxlY3RlZEl0ZW0uaXNTZWxlY3RlZCA9ICFzZWxlY3RlZEl0ZW0uaXNTZWxlY3RlZDtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgdGhpcy5lbWl0U2VsZWN0ZWRSb3dzKFNreUdyaWRTZWxlY3RlZFJvd3NTb3VyY2UuUm93Q2xpY2spO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpc1Jvd0hpZ2hsaWdodGVkKGlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5yb3dIaWdobGlnaHRlZElkKSB7XG4gICAgICByZXR1cm4gaWQgPT09IHRoaXMucm93SGlnaGxpZ2h0ZWRJZDtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGdldFJvd0hlaWdodChpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5ncmlkQWRhcHRlci5nZXRSb3dIZWlnaHQodGhpcy50YWJsZUVsZW1lbnRSZWYsIGluZGV4KTtcbiAgfVxuXG4gIHB1YmxpYyBjYW5jZWxSb3dEZWxldGUoaWQ6IHN0cmluZykge1xuICAgIHRoaXMucm93RGVsZXRlQ29uZmlncyA9IHRoaXMucm93RGVsZXRlQ29uZmlncy5maWx0ZXIoXG4gICAgICAoY29uZmlnKSA9PiBjb25maWcuaWQgIT09IGlkLFxuICAgICk7XG4gICAgdGhpcy5yb3dEZWxldGVDYW5jZWwuZW1pdCh7IGlkOiBpZCB9KTtcblxuICAgIHRoaXMuZGVzdHJveVJvd0RlbGV0ZShpZCk7XG4gIH1cblxuICBwdWJsaWMgY29uZmlybVJvd0RlbGV0ZShpZDogc3RyaW5nKSB7XG4gICAgdGhpcy5yb3dEZWxldGVDb25maWdzLmZpbmQoKGNvbmZpZykgPT4gY29uZmlnLmlkID09PSBpZCkucGVuZGluZyA9IHRydWU7XG4gICAgdGhpcy5yb3dEZWxldGVDb25maXJtLmVtaXQoeyBpZDogaWQgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Um93RGVsZXRlSXRlbShpZDogc3RyaW5nKTogU2t5R3JpZFJvd0RlbGV0ZUNvbmZpZyB7XG4gICAgcmV0dXJuIHRoaXMucm93RGVsZXRlQ29uZmlncy5maW5kKChyb3dEZWxldGUpID0+IHJvd0RlbGV0ZS5pZCA9PT0gaWQpO1xuICB9XG5cbiAgLy8gUHJldmVudCB0b3VjaCBkZXZpY2VzIGZyb20gaW5hZHZlcnRlbnRseSBzY3JvbGxpbmcgZ3JpZCB3aGlsZSBkcmFnZ2luZyBjb2x1bW5zLlxuICBwdWJsaWMgb25Ub3VjaE1vdmUoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cblxuICBwdWJsaWMgb25Ub3BTY3JvbGwoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIC8qIHNhbml0eSBjaGVjayAqL1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHRoaXMudGFibGVDb250YWluZXJFbGVtZW50UmVmKSB7XG4gICAgICBpZiAodGhpcy5zY3JvbGxUcmlnZ2VyZWQpIHtcbiAgICAgICAgdGhpcy5zY3JvbGxUcmlnZ2VyZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy50YWJsZUNvbnRhaW5lckVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID1cbiAgICAgICAgICB0aGlzLnRvcFNjcm9sbENvbnRhaW5lckVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zY3JvbGxUcmlnZ2VyZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvbkdyaWRTY3JvbGwoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIC8qIHNhbml0eSBjaGVjayAqL1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHRoaXMudG9wU2Nyb2xsQ29udGFpbmVyRWxlbWVudFJlZikge1xuICAgICAgaWYgKHRoaXMuc2Nyb2xsVHJpZ2dlcmVkKSB7XG4gICAgICAgIHRoaXMuc2Nyb2xsVHJpZ2dlcmVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMudG9wU2Nyb2xsQ29udGFpbmVyRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPVxuICAgICAgICAgIHRoaXMudGFibGVDb250YWluZXJFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2Nyb2xsVHJpZ2dlcmVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNoZWNrVXNlckNvbHVtbldpZHRoc0ZvclNjcm9sbCgpOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5zaG93VG9wU2Nyb2xsICYmXG4gICAgICB0aGlzLmNvbHVtbkVsZW1lbnRSZWZzICYmXG4gICAgICB0aGlzLmNvbHVtbkVsZW1lbnRSZWZzLmxlbmd0aCA+IDBcbiAgICApIHtcbiAgICAgIGxldCBjb2x1bW5zV2lkdGhUb3RhbCA9IDA7XG4gICAgICBjb25zdCB3aW5kb3dTaXplID0gdGhpcy5za3lXaW5kb3cubmF0aXZlV2luZG93LmlubmVyV2lkdGg7XG4gICAgICB0aGlzLmNvbHVtbkVsZW1lbnRSZWZzLmZvckVhY2goKGNvbCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuc2hvd1RvcFNjcm9sbCkge1xuICAgICAgICAgIGNvbnN0IGNvbXB1dGVkV2lkdGggPSBwYXJzZUZsb2F0KFxuICAgICAgICAgICAgd2luZG93LmdldENvbXB1dGVkU3R5bGUoY29sLm5hdGl2ZUVsZW1lbnQpLndpZHRoLFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3Qgb2Zmc2V0V2lkdGggPSBjb2wubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICAgICAgICBjb25zdCB3aWR0aCA9IE1hdGgubWF4KFxuICAgICAgICAgICAgY29tcHV0ZWRXaWR0aCB8fCBvZmZzZXRXaWR0aCxcbiAgICAgICAgICAgIHRoaXMubWluQ29sV2lkdGgsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb2x1bW5zV2lkdGhUb3RhbCA9IGNvbHVtbnNXaWR0aFRvdGFsICsgd2lkdGg7XG4gICAgICAgICAgaWYgKGNvbHVtbnNXaWR0aFRvdGFsID4gd2luZG93U2l6ZSkge1xuICAgICAgICAgICAgdGhpcy5zaG93VG9wU2Nyb2xsID0gdHJ1ZTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG11bHRpc2VsZWN0U2VsZWN0QWxsKCkge1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLml0ZW1zKSB7XG4gICAgICBpdGVtLmlzU2VsZWN0ZWQgPSB0cnVlO1xuICAgIH1cbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgIHRoaXMuZW1pdFNlbGVjdGVkUm93cyhTa3lHcmlkU2VsZWN0ZWRSb3dzU291cmNlLlNlbGVjdEFsbCk7XG4gIH1cblxuICBwcml2YXRlIG11bHRpc2VsZWN0Q2xlYXJBbGwoKSB7XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMuaXRlbXMpIHtcbiAgICAgIGl0ZW0uaXNTZWxlY3RlZCA9IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgIHRoaXMuZW1pdFNlbGVjdGVkUm93cyhTa3lHcmlkU2VsZWN0ZWRSb3dzU291cmNlLkNsZWFyQWxsKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlSW5jb21pbmdNZXNzYWdlcyhtZXNzYWdlOiBTa3lHcmlkTWVzc2FnZSkge1xuICAgIHN3aXRjaCAobWVzc2FnZS50eXBlKSB7XG4gICAgICBjYXNlIFNreUdyaWRNZXNzYWdlVHlwZS5TZWxlY3RBbGw6XG4gICAgICAgIHRoaXMubXVsdGlzZWxlY3RTZWxlY3RBbGwoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgU2t5R3JpZE1lc3NhZ2VUeXBlLkNsZWFyQWxsOlxuICAgICAgICB0aGlzLm11bHRpc2VsZWN0Q2xlYXJBbGwoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFNreUdyaWRNZXNzYWdlVHlwZS5Qcm9tcHREZWxldGVSb3c6XG4gICAgICAgIC8qIHNhbml0eSBjaGVjayAqL1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAobWVzc2FnZS5kYXRhICYmIG1lc3NhZ2UuZGF0YS5wcm9tcHREZWxldGVSb3cpIHtcbiAgICAgICAgICBjb25zdCBleGlzdGluZ0NvbmZpZyA9IHRoaXMucm93RGVsZXRlQ29uZmlncy5maW5kKFxuICAgICAgICAgICAgKGNvbmZpZykgPT4gY29uZmlnLmlkID09PSBtZXNzYWdlLmRhdGEucHJvbXB0RGVsZXRlUm93LmlkLFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGV4aXN0aW5nQ29uZmlnKSB7XG4gICAgICAgICAgICBleGlzdGluZ0NvbmZpZy5wZW5kaW5nID0gZmFsc2U7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucm93RGVsZXRlQ29uZmlncy5wdXNoKHtcbiAgICAgICAgICAgICAgaWQ6IG1lc3NhZ2UuZGF0YS5wcm9tcHREZWxldGVSb3cuaWQsXG4gICAgICAgICAgICAgIHBlbmRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBvdmVybGF5ID0gdGhpcy5vdmVybGF5U2VydmljZS5jcmVhdGUoe1xuICAgICAgICAgICAgICBlbmFibGVTY3JvbGw6IHRydWUsXG4gICAgICAgICAgICAgIHNob3dCYWNrZHJvcDogZmFsc2UsXG4gICAgICAgICAgICAgIGNsb3NlT25OYXZpZ2F0aW9uOiB0cnVlLFxuICAgICAgICAgICAgICBlbmFibGVDbG9zZTogZmFsc2UsXG4gICAgICAgICAgICAgIGVuYWJsZVBvaW50ZXJFdmVudHM6IHRydWUsXG4gICAgICAgICAgICAgIGVudmlyb25tZW50SW5qZWN0b3I6IHRoaXMuI2Vudmlyb25tZW50SW5qZWN0b3IsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgb3ZlcmxheS5hdHRhY2hUZW1wbGF0ZSh0aGlzLmlubGluZURlbGV0ZVRlbXBsYXRlUmVmLCB7XG4gICAgICAgICAgICAgICRpbXBsaWNpdDogdGhpcy5kYXRhLmZpbmQoXG4gICAgICAgICAgICAgICAgKGl0ZW0pID0+IGl0ZW0uaWQgPT09IG1lc3NhZ2UuZGF0YS5wcm9tcHREZWxldGVSb3cuaWQsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBXZSBhcmUgbWFudWFsbHkgc2V0dGluZyB0aGUgei1pbmRleCBoZXJlIGJlY2F1c2Ugb3ZlcmxheXMgd2lsbCBhbHdheXMgYmUgb24gdG9wIG9mXG4gICAgICAgICAgICAgKiB0aGUgb21uaWJhci4gVGhpcyBtYW51YWwgc2V0dGluZyBpcyAxIGxlc3MgdGhhbiB0aGUgb21uaWJhcidzIHotaW5kZXggb2YgMTAwMC4gV2VcbiAgICAgICAgICAgICAqIGRpc2N1c3NlZCBjaGFuZ2luZyB0aGUgb3ZlcmxheSBzZXJ2aWNlIHRvIGFsbG93IGZvciB0aGlzIGJ1dCBkZWNpZGVkIGFnYWluc3QgdGhhdFxuICAgICAgICAgICAgICogY2hhbmdlIGF0IHRoaXMgdGltZSBkdWUgdG8gaXRzIG5pY2hlIG5hdHVyZS5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgb3ZlcmxheS5jb21wb25lbnRSZWYuaW5zdGFuY2UuekluZGV4ID0gJzk5OSc7XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBpbmxpbmVEZWxldGVSZWYgPSB0aGlzLmlubGluZURlbGV0ZVJlZnNcbiAgICAgICAgICAgICAgICAudG9BcnJheSgpXG4gICAgICAgICAgICAgICAgLmZpbmQoKGVsUmVmKSA9PiB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICBlbFJlZi5uYXRpdmVFbGVtZW50LmlkID09PVxuICAgICAgICAgICAgICAgICAgICAncm93LWRlbGV0ZS1yZWYtJyArIG1lc3NhZ2UuZGF0YS5wcm9tcHREZWxldGVSb3cuaWRcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGNvbnN0IGFmZml4ZXIgPSB0aGlzLmFmZml4U2VydmljZS5jcmVhdGVBZmZpeGVyKGlubGluZURlbGV0ZVJlZik7XG5cbiAgICAgICAgICAgICAgY29uc3Qgcm93RWxlbWVudDogSFRNTEVsZW1lbnQgPVxuICAgICAgICAgICAgICAgIHRoaXMudGFibGVFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAgICAgICAgICdbc2t5LWNtcC1pZD1cIicgKyBtZXNzYWdlLmRhdGEucHJvbXB0RGVsZXRlUm93LmlkICsgJ1wiXScsXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICBhZmZpeGVyLmFmZml4VG8ocm93RWxlbWVudCwge1xuICAgICAgICAgICAgICAgIGF1dG9GaXRDb250ZXh0OiBTa3lBZmZpeEF1dG9GaXRDb250ZXh0LlZpZXdwb3J0LFxuICAgICAgICAgICAgICAgIGlzU3RpY2t5OiB0cnVlLFxuICAgICAgICAgICAgICAgIHBsYWNlbWVudDogJ2Fib3ZlJyxcbiAgICAgICAgICAgICAgICB2ZXJ0aWNhbEFsaWdubWVudDogJ3RvcCcsXG4gICAgICAgICAgICAgICAgaG9yaXpvbnRhbEFsaWdubWVudDogJ2xlZnQnLFxuICAgICAgICAgICAgICAgIGVuYWJsZUF1dG9GaXQ6IGZhbHNlLFxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICB0aGlzLnJvd0RlbGV0ZUNvbnRlbnRzW21lc3NhZ2UuZGF0YS5wcm9tcHREZWxldGVSb3cuaWRdID0ge1xuICAgICAgICAgICAgICAgIGFmZml4ZXI6IGFmZml4ZXIsXG4gICAgICAgICAgICAgICAgb3ZlcmxheTogb3ZlcmxheSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgU2t5R3JpZE1lc3NhZ2VUeXBlLkFib3J0RGVsZXRlUm93OlxuICAgICAgICAvKiBzYW5pdHkgY2hlY2sgKi9cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2UuZGF0YSAmJiBtZXNzYWdlLmRhdGEuYWJvcnREZWxldGVSb3cpIHtcbiAgICAgICAgICB0aGlzLnJvd0RlbGV0ZUNvbmZpZ3MgPSB0aGlzLnJvd0RlbGV0ZUNvbmZpZ3MuZmlsdGVyKFxuICAgICAgICAgICAgKGNvbmZpZykgPT4gY29uZmlnLmlkICE9PSBtZXNzYWdlLmRhdGEuYWJvcnREZWxldGVSb3cuaWQsXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHRoaXMuZGVzdHJveVJvd0RlbGV0ZShtZXNzYWdlLmRhdGEuYWJvcnREZWxldGVSb3cuaWQpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkhlYWRlckRyb3AobmV3Q29sdW1uSWRzOiBzdHJpbmdbXSkge1xuICAgIC8vIHVwZGF0ZSBzZWxlY3RlZCBjb2x1bW5JZHNcbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1uSWRzU2V0ID0gdHJ1ZTtcbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1uSWRzID0gbmV3Q29sdW1uSWRzO1xuXG4gICAgLy8gbWFyayBmb3IgY2hlY2sgYmVjYXVzZSB3ZSBhcmUgdXNpbmcgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kub25QdXNoXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0RGlzcGxheWVkQ29sdW1ucyhyZXNwZWN0SGlkZGVuID0gZmFsc2UpIHtcbiAgICAvKiBzYW5pdHkgY2hlY2sgKi9cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh0aGlzLmNvbHVtbnMpIHtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ29sdW1uSWRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gc2V0dXAgZGlzcGxheWVkIGNvbHVtbnNcbiAgICAgICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zID0gdGhpcy5zZWxlY3RlZENvbHVtbklkc1xuICAgICAgICAgIC5maWx0ZXIoKGNvbHVtbklkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW5zLmZpbmQoKGNvbHVtbikgPT4gY29sdW1uLmlkID09PSBjb2x1bW5JZCk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAubWFwKChjb2x1bW5JZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1ucy5maWx0ZXIoKGNvbHVtbikgPT4gY29sdW1uLmlkID09PSBjb2x1bW5JZClbMF07XG4gICAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHJlc3BlY3RIaWRkZW4pIHtcbiAgICAgICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zID0gdGhpcy5jb2x1bW5zLmZpbHRlcigoY29sdW1uKSA9PiB7XG4gICAgICAgICAgcmV0dXJuICFjb2x1bW4uaGlkZGVuO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IHRoaXMuY29sdW1ucztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHRyYW5zZm9ybURhdGEoKSB7XG4gICAgLy8gVHJhbnNmb3JtIGRhdGEgaW50byBvYmplY3Qgd2l0aCBpZCBhbmQgZGF0YSBwcm9wZXJ0aWVzXG4gICAgaWYgKFxuICAgICAgdGhpcy5kYXRhICYmXG4gICAgICB0aGlzLmRhdGEubGVuZ3RoID4gMCAmJlxuICAgICAgdGhpcy5kYXRhWzBdLmlkICYmXG4gICAgICAhdGhpcy5kYXRhWzBdLmRhdGFcbiAgICApIHtcbiAgICAgIGlmICh0aGlzLm11bHRpc2VsZWN0Um93SWQpIHtcbiAgICAgICAgdGhpcy5pdGVtcyA9IHRoaXMuZ2V0R3JpZERhdGFXaXRoU2VsZWN0ZWRSb3dzKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLml0ZW1zID0gdGhpcy5kYXRhLm1hcCgoaXRlbSkgPT4gbmV3IExpc3RJdGVtTW9kZWwoaXRlbS5pZCwgaXRlbSkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLml0ZW1zID0gdGhpcy5kYXRhO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0R3JpZERhdGFXaXRoU2VsZWN0ZWRSb3dzKCkge1xuICAgIGNvbnN0IHNlbGVjdGVkUm93cyA9IHRoaXMuZ2V0U2VsZWN0ZWRSb3dzKCk7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5tYXAoKGl0ZW0pID0+IHtcbiAgICAgIGxldCBjaGVja2VkO1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpdGVtLCB0aGlzLm11bHRpc2VsZWN0Um93SWQpKSB7XG4gICAgICAgIGNoZWNrZWQgPSBzZWxlY3RlZFJvd3MuaW5kZXhPZihpdGVtW3RoaXMubXVsdGlzZWxlY3RSb3dJZF0pID4gLTE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGVja2VkID0gc2VsZWN0ZWRSb3dzLmluZGV4T2YoaXRlbS5pZCkgPiAtMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgTGlzdEl0ZW1Nb2RlbChpdGVtLmlkLCBpdGVtLCBjaGVja2VkKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlTZWxlY3RlZFJvd3MoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXRlbXMgJiYgdGhpcy5pdGVtcy5sZW5ndGggPiAwICYmIHRoaXMuc2VsZWN0ZWRSb3dJZHMpIHtcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLml0ZW1zKSB7XG4gICAgICAgIGl0ZW0uaXNTZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRSb3dJZHMuaW5kZXhPZihpdGVtLmlkKSA+IC0xO1xuICAgICAgfVxuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldFNvcnRIZWFkZXJzKCkge1xuICAgIHRoaXMuY3VycmVudFNvcnRGaWVsZC5uZXh0KFxuICAgICAgdGhpcy5zb3J0RmllbGQgfHwgeyBmaWVsZFNlbGVjdG9yOiAnJywgZGVzY2VuZGluZzogZmFsc2UgfSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb2x1bW5zRnJvbUNvbXBvbmVudCgpIHtcbiAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmNvbHVtbkNvbXBvbmVudHMubWFwKChjb2x1bW5Db21wb25lbnQpID0+IHtcbiAgICAgIHJldHVybiBuZXcgU2t5R3JpZENvbHVtbk1vZGVsKGNvbHVtbkNvbXBvbmVudC50ZW1wbGF0ZSwgY29sdW1uQ29tcG9uZW50KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ29sdW1ucygpIHtcbiAgICB0aGlzLmdldENvbHVtbnNGcm9tQ29tcG9uZW50KCk7XG5cbiAgICAvLyBUaGlzIHNldCB0aW1lb3V0IGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhlIGNvbHVtbnMgaGF2ZSByZW5kZXJlZCBpbiB0aGUgZ3JpZFxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5jaGVja1VzZXJDb2x1bW5XaWR0aHNGb3JTY3JvbGwoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzaXplQ29sdW1uQnlJbmRleChcbiAgICBjb2x1bW5JbmRleDogc3RyaW5nLFxuICAgIG5ld0NvbFdpZHRoOiBudW1iZXIsXG4gICAgZGVsdGFYOiBudW1iZXIsXG4gICkge1xuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuZ2V0Q29sdW1uTW9kZWxCeUluZGV4KGNvbHVtbkluZGV4KTtcblxuICAgIC8vIFByZXZlbnQgYWNjaWRlbnRhbCBzaHJpbmthZ2UgYmVsb3cgbWluaW11bSB3aWR0aC5cbiAgICBpZiAobmV3Q29sV2lkdGggPD0gdGhpcy5taW5Db2xXaWR0aCkge1xuICAgICAgZGVsdGFYID0gZGVsdGFYICsgdGhpcy5taW5Db2xXaWR0aCAtIG5ld0NvbFdpZHRoO1xuICAgICAgbmV3Q29sV2lkdGggPSB0aGlzLm1pbkNvbFdpZHRoO1xuICAgIH1cblxuICAgIC8vIGZpdD13aWR0aCBhZGRzL3JlbW92ZXMgd2lkdGggZnJvbSB0aGUgbGFzdCBjb2x1bW5cbiAgICAvLyBmaXQ9c2Nyb2xsIGFkZHMvcmVtb3ZlcyB3aWR0aCBmcm9tIHRoZSB0YWJsZVxuICAgIGlmICh0aGlzLmZpdCA9PT0gJ3dpZHRoJykge1xuICAgICAgY29uc3QgbGFzdENvbHVtbiA9IHRoaXMuZ2V0TGFzdERpc3BsYXllZENvbHVtbigpO1xuXG4gICAgICAvLyBQcmV2ZW50IGFjY2lkZW50YWwgZ3Jvd3RoIHRoYXQgd291bGQgYnVtcCBsYXN0IGNvbHVtbiBvZmYgc2NyZWVuLlxuICAgICAgY29uc3QgbWF4ID0gdGhpcy5nZXRNYXhSYW5nZUJ5SW5kZXgoY29sdW1uSW5kZXgpO1xuICAgICAgaWYgKG5ld0NvbFdpZHRoID4gbWF4KSB7XG4gICAgICAgIG5ld0NvbFdpZHRoID0gbWF4O1xuICAgICAgICBkZWx0YVggPSBtYXggLSB0aGlzLnN0YXJ0Q29sdW1uV2lkdGg7XG4gICAgICB9XG4gICAgICBjb2x1bW4ud2lkdGggPSBuZXdDb2xXaWR0aDtcbiAgICAgIGxhc3RDb2x1bW4ud2lkdGggPSBsYXN0Q29sdW1uLndpZHRoIC0gZGVsdGFYO1xuICAgICAgdGhpcy51cGRhdGVNYXhSYW5nZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmdyaWRBZGFwdGVyLnNldFN0eWxlKFxuICAgICAgICB0aGlzLnRhYmxlRWxlbWVudFJlZixcbiAgICAgICAgJ3dpZHRoJyxcbiAgICAgICAgYCR7dGhpcy50YWJsZVdpZHRoICsgZGVsdGFYfXB4YCxcbiAgICAgICk7XG4gICAgICBjb2x1bW4ud2lkdGggPSBuZXdDb2xXaWR0aDtcbiAgICB9XG5cbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICB0aGlzLmNvbHVtbldpZHRoQ2hhbmdlLmVtaXQodGhpcy5nZXRDb2x1bW5XaWR0aE1vZGVsQ2hhbmdlKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0Q29sdW1uV2lkdGhzKCkge1xuICAgIC8vIEVzdGFibGlzaCB0YWJsZSB3aWR0aC5cbiAgICB0aGlzLnNob3dUb3BTY3JvbGwgPSB0cnVlO1xuXG4gICAgLy8gU2V0IGNvbHVtbiB3aWR0aHMgYmFzZWQgb24gdGhlIHdpZHRoIGluaXRpYWxseSBnaXZlbiBieSB0aGUgYnJvd3Nlci5cbiAgICAvLyBjb21wdXRlZFdpZHRoIHByZXZlbnRzIGFjY2lkZW50YWwgb3ZlcmZsb3cgZm9yIGJyb3dzZXJzIHdpdGggc3ViLXBpeGVsIHdpZHRocy5cbiAgICB0aGlzLmNvbHVtbkVsZW1lbnRSZWZzLmZvckVhY2goKGNvbCwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IGNvbXB1dGVkV2lkdGggPSBwYXJzZUZsb2F0KFxuICAgICAgICB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShjb2wubmF0aXZlRWxlbWVudCkud2lkdGgsXG4gICAgICApO1xuICAgICAgY29uc3Qgb2Zmc2V0V2lkdGggPSBjb2wubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICB0aGlzLmdldENvbHVtbk1vZGVsQnlJbmRleChpbmRleCkud2lkdGggPSBNYXRoLm1heChcbiAgICAgICAgY29tcHV0ZWRXaWR0aCB8fCBvZmZzZXRXaWR0aCxcbiAgICAgICAgdGhpcy5taW5Db2xXaWR0aCxcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICAvLyAnc2Nyb2xsJyB0YWJsZXMgc2hvdWxkIGJlIGFsbG93ZWQgdG8gZXhwYW5kIG91dHNpZGUgb2YgdGhlaXIgY29uc3RyYWludHMuXG4gICAgaWYgKHRoaXMuZml0ID09PSAnc2Nyb2xsJykge1xuICAgICAgdGhpcy5ncmlkQWRhcHRlci5zZXRTdHlsZSh0aGlzLnRhYmxlRWxlbWVudFJlZiwgJ21pbi13aWR0aCcsICdhdXRvJyk7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIG1heCBsaW1pdHMgZm9yIGlucHV0IHJhbmdlcy5cbiAgICBpZiAodGhpcy5maXQgPT09ICd3aWR0aCcpIHtcbiAgICAgIHRoaXMudXBkYXRlTWF4UmFuZ2UoKTtcbiAgICB9XG5cbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgdHJhbnNmZXJDb2x1bW5XaWR0aHMoXG4gICAgb2xkQ29sdW1uczogU2t5R3JpZENvbHVtbk1vZGVsW10sXG4gICAgbmV3Q29sdW1uczogU2t5R3JpZENvbHVtbk1vZGVsW10sXG4gICkge1xuICAgIC8qIHNhbml0eSBjaGVjayAqL1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKG9sZENvbHVtbnMgJiYgbmV3Q29sdW1ucykge1xuICAgICAgZm9yIChjb25zdCBvbGRDb2x1bW4gb2Ygb2xkQ29sdW1ucykge1xuICAgICAgICBpZiAob2xkQ29sdW1uLndpZHRoKSB7XG4gICAgICAgICAgY29uc3QgbWF0Y2hpbmdDb2x1bW4gPSBuZXdDb2x1bW5zLmZpbmQoXG4gICAgICAgICAgICAobmV3Q29sdW1uKSA9PiBvbGRDb2x1bW4uaWQgPT09IG5ld0NvbHVtbi5pZCxcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChtYXRjaGluZ0NvbHVtbiAmJiAhbWF0Y2hpbmdDb2x1bW4ud2lkdGgpIHtcbiAgICAgICAgICAgIG1hdGNoaW5nQ29sdW1uLndpZHRoID0gb2xkQ29sdW1uLndpZHRoO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb2x1bW5XaWR0aE1vZGVsQ2hhbmdlKCkge1xuICAgIGNvbnN0IGNvbHVtbldpZHRoTW9kZWxDaGFuZ2UgPSBuZXcgQXJyYXk8U2t5R3JpZENvbHVtbldpZHRoTW9kZWxDaGFuZ2U+KCk7XG4gICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgY29sdW1uV2lkdGhNb2RlbENoYW5nZS5wdXNoKHtcbiAgICAgICAgaWQ6IGNvbHVtbi5pZCxcbiAgICAgICAgZmllbGQ6IGNvbHVtbi5maWVsZCxcbiAgICAgICAgd2lkdGg6IGNvbHVtbi53aWR0aCxcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBjb2x1bW5XaWR0aE1vZGVsQ2hhbmdlO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVNYXhSYW5nZSgpIHtcbiAgICBjb25zdCBsZWZ0b3ZlcldpZHRoID1cbiAgICAgIHRoaXMuZ2V0TGFzdERpc3BsYXllZENvbHVtbigpLndpZHRoIC0gdGhpcy5taW5Db2xXaWR0aDtcbiAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMuZm9yRWFjaCgoY29sdW1uLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgbmV3TWF4UmFuZ2UgPSBjb2x1bW4ud2lkdGggKyBsZWZ0b3ZlcldpZHRoO1xuICAgICAgY29uc3QgcmFuZ2VJbnB1dCA9IHRoaXMuZ2V0UmFuZ2VJbnB1dEJ5SW5kZXgoaW5kZXgpO1xuICAgICAgcmFuZ2VJbnB1dC5uYXRpdmVFbGVtZW50Lm1heCA9IG5ld01heFJhbmdlO1xuICAgICAgcmFuZ2VJbnB1dC5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS12YWx1ZW1heCcsIG5ld01heFJhbmdlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZVJlc2l6ZUNvbHVtbihldmVudDogYW55KSB7XG4gICAgY29uc3QgY2xpY2tUYXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgdGhpcy5hY3RpdmVSZXNpemVDb2x1bW5JbmRleCA9IGNsaWNrVGFyZ2V0LmdldEF0dHJpYnV0ZSgnc2t5LWNtcC1pbmRleCcpO1xuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuZ2V0Q29sdW1uTW9kZWxCeUluZGV4KHRoaXMuYWN0aXZlUmVzaXplQ29sdW1uSW5kZXgpO1xuICAgIHRoaXMuc3RhcnRDb2x1bW5XaWR0aCA9IGNvbHVtbi53aWR0aDtcbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRUYWJsZVdpZHRoKCkge1xuICAgIHRoaXMuc2t5V2luZG93Lm5hdGl2ZVdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuZ3JpZEFkYXB0ZXIuc2V0U3R5bGUodGhpcy50YWJsZUVsZW1lbnRSZWYsICd3aWR0aCcsIGBhdXRvYCk7XG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIHRoaXMuZ3JpZEFkYXB0ZXIuc2V0U3R5bGUoXG4gICAgICAgIHRoaXMudGFibGVFbGVtZW50UmVmLFxuICAgICAgICAnd2lkdGgnLFxuICAgICAgICBgJHt0aGlzLnRhYmxlV2lkdGh9cHhgLFxuICAgICAgKTtcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSYW5nZUlucHV0QnlJbmRleChpbmRleDogc3RyaW5nIHwgbnVtYmVyKSB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1uUmFuZ2VJbnB1dEVsZW1lbnRSZWZzLmZpbmQoXG4gICAgICAoaW5wdXQpID0+XG4gICAgICAgIGlucHV0Lm5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdza3ktY21wLWluZGV4JykgPT09IGluZGV4LnRvU3RyaW5nKCksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29sdW1uTW9kZWxCeUluZGV4KGluZGV4OiBzdHJpbmcgfCBudW1iZXIpIHtcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5ZWRDb2x1bW5zW051bWJlcihpbmRleCldO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRNYXhSYW5nZUJ5SW5kZXgoaW5kZXg6IHN0cmluZykge1xuICAgIGNvbnN0IGNvbHVtbkVsZW1lbnRSZWYgPSB0aGlzLmNvbHVtbkVsZW1lbnRSZWZzLmZpbmQoXG4gICAgICAodGgpID0+IHRoLm5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdza3ktY21wLWluZGV4JykgPT09IGluZGV4LFxuICAgICk7XG4gICAgY29uc3QgcmFuZ2VJbnB1dCA9IGNvbHVtbkVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgJy5za3ktZ3JpZC1jb2x1bW4taW5wdXQtYXJpYS1vbmx5JyxcbiAgICApO1xuICAgIHJldHVybiBOdW1iZXIocmFuZ2VJbnB1dC5tYXgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRMYXN0RGlzcGxheWVkQ29sdW1uKCkge1xuICAgIHJldHVybiB0aGlzLmdldENvbHVtbk1vZGVsQnlJbmRleCh0aGlzLmRpc3BsYXllZENvbHVtbnMubGVuZ3RoIC0gMSk7XG4gIH1cblxuICBwcml2YXRlIGFkZERlbGltaXRlcih0ZXh0OiBzdHJpbmdbXSwgZGVsaW1pdGVyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGV4dC5maWx0ZXIoKHZhbCkgPT4gdmFsKS5qb2luKGRlbGltaXRlcik7XG4gIH1cblxuICBwcml2YXRlIGRlc3Ryb3lSb3dEZWxldGUoaWQ6IHN0cmluZykge1xuICAgIGNvbnN0IHJvd0RlbGV0ZUNvbnRlbnRzID0gdGhpcy5yb3dEZWxldGVDb250ZW50c1tpZF07XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAocm93RGVsZXRlQ29udGVudHMpIHtcbiAgICAgIHJvd0RlbGV0ZUNvbnRlbnRzLmFmZml4ZXIuZGVzdHJveSgpO1xuICAgICAgdGhpcy5vdmVybGF5U2VydmljZS5jbG9zZShyb3dEZWxldGVDb250ZW50cy5vdmVybGF5KTtcbiAgICAgIGRlbGV0ZSB0aGlzLnJvd0RlbGV0ZUNvbnRlbnRzW2lkXTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGVtaXRTZWxlY3RlZFJvd3Moc291cmNlOiBTa3lHcmlkU2VsZWN0ZWRSb3dzU291cmNlKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWRSb3dzOiBTa3lHcmlkU2VsZWN0ZWRSb3dzTW9kZWxDaGFuZ2UgPSB7XG4gICAgICBzZWxlY3RlZFJvd0lkczogdGhpcy5nZXRTZWxlY3RlZFJvd3MoKSxcbiAgICAgIHNvdXJjZTogc291cmNlLFxuICAgIH07XG4gICAgdGhpcy5tdWx0aXNlbGVjdFNlbGVjdGlvbkNoYW5nZS5lbWl0KHNlbGVjdGVkUm93cyk7XG4gIH1cblxuICBwcml2YXRlIGdldFNlbGVjdGVkUm93cygpIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtc1xuICAgICAgLmZpbHRlcigoaXRlbSkgPT4ge1xuICAgICAgICByZXR1cm4gaXRlbS5pc1NlbGVjdGVkO1xuICAgICAgfSlcbiAgICAgIC5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpdGVtLmRhdGEsIHRoaXMubXVsdGlzZWxlY3RSb3dJZClcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIGl0ZW0uZGF0YVt0aGlzLm11bHRpc2VsZWN0Um93SWRdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpdGVtLmlkO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGlzSW50ZXJhY3RpdmVFbGVtZW50KGV2ZW50OiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IGludGVyYWN0aXZlRWxTZWxlY3RvcnMgPSBgXG4gICAgICBhLFxuICAgICAgYnV0dG9uLFxuICAgICAgaW5wdXQsXG4gICAgICBsYWJlbCxcbiAgICAgIG9wdGlvbixcbiAgICAgIHNlbGVjdCxcbiAgICAgIHRleHRhcmVhLFxuICAgICAgZGV0YWlscyxcbiAgICAgIGRpYWxvZyxcbiAgICAgIG1lbnUsXG4gICAgICBtZW51aXRlbSxcbiAgICAgIHN1bW1hcnlgO1xuICAgIHJldHVybiBldmVudC50YXJnZXQuY2xvc2VzdChpbnRlcmFjdGl2ZUVsU2VsZWN0b3JzKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0UmVzaXplQmFyUG9zaXRpb24oeFBvc2l0aW9uOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBwYXJlbnRTY3JvbGwgPSB0aGlzLnRhYmxlQ29udGFpbmVyRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgY29uc3QgcmVzaXplQmFyWCA9XG4gICAgICB4UG9zaXRpb24gLVxuICAgICAgdGhpcy50YWJsZUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC1cbiAgICAgIHBhcmVudFNjcm9sbDtcbiAgICB0aGlzLmdyaWRBZGFwdGVyLnNldFN0eWxlKHRoaXMucmVzaXplQmFyLCAnbGVmdCcsIHJlc2l6ZUJhclggKyAncHgnKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlVc2VyQ29uZmlnKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgdGhpcy51aUNvbmZpZ1NlcnZpY2VcbiAgICAgICAgLmdldENvbmZpZyh0aGlzLnNldHRpbmdzS2V5KVxuICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgIChjb25maWc6IFNreUdyaWRVSUNvbmZpZykgPT4ge1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICAgIGlmIChjb25maWcgJiYgY29uZmlnLnNlbGVjdGVkQ29sdW1uSWRzKSB7XG4gICAgICAgICAgICAgIC8vIFJlbW92ZSBhbnkgY29sdW1uSWRzIHRoYXQgZG9uJ3QgZXhpc3QgaW4gdGhlIGN1cnJlbnQgZGF0YSBzZXQuXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5JZHMgPSBjb25maWcuc2VsZWN0ZWRDb2x1bW5JZHMuZmlsdGVyKChpZCkgPT5cbiAgICAgICAgICAgICAgICB0aGlzLmNvbHVtbnMuZmluZCgoY29sdW1uKSA9PiBjb2x1bW4uaWQgPT09IGlkKSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldFVzZXJDb25maWcoY29uZmlnOiBTa3lHcmlkVUlDb25maWcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2V0dGluZ3NLZXkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnVpQ29uZmlnU2VydmljZVxuICAgICAgLnNldENvbmZpZyh0aGlzLnNldHRpbmdzS2V5LCBjb25maWcpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgICAgICAgKCkgPT4ge30sXG4gICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ0NvdWxkIG5vdCBzYXZlIGdyaWQgc2V0dGluZ3MuJyk7XG4gICAgICAgICAgY29uc29sZS53YXJuKGVycik7XG4gICAgICAgIH0sXG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0Q29sdW1ucygpOiB2b2lkIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh0aGlzLmNvbHVtbkNvbXBvbmVudHMubGVuZ3RoICE9PSAwIHx8IHRoaXMuY29sdW1ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgLyogc2FuaXR5IGNoZWNrICovXG4gICAgICBpZiAodGhpcy5jb2x1bW5Db21wb25lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5nZXRDb2x1bW5zRnJvbUNvbXBvbmVudCgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnRyYW5zZm9ybURhdGEoKTtcbiAgICAgIHRoaXMuc2V0RGlzcGxheWVkQ29sdW1ucyh0cnVlKTtcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLy8gV2F0Y2ggZm9yIGFkZGVkL3JlbW92ZWQgY29sdW1uczpcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuY29sdW1uQ29tcG9uZW50cy5jaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB0aGlzLnVwZGF0ZUNvbHVtbnMoKSksXG4gICAgKTtcblxuICAgIC8vIFdhdGNoIGZvciBjb2x1bW4gaGVhZGluZyBjaGFuZ2VzOlxuICAgIHRoaXMuY29sdW1uQ29tcG9uZW50cy5mb3JFYWNoKChjb21wOiBTa3lHcmlkQ29sdW1uQ29tcG9uZW50KSA9PiB7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgY29tcC5oZWFkaW5nTW9kZWxDaGFuZ2VzLnN1YnNjcmliZShcbiAgICAgICAgICAoY2hhbmdlOiBTa3lHcmlkQ29sdW1uSGVhZGluZ01vZGVsQ2hhbmdlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbHVtbkhlYWRpbmcoY2hhbmdlKTtcbiAgICAgICAgICB9LFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICBjb21wLmRlc2NyaXB0aW9uTW9kZWxDaGFuZ2VzLnN1YnNjcmliZShcbiAgICAgICAgICAoY2hhbmdlOiBTa3lHcmlkQ29sdW1uRGVzY3JpcHRpb25Nb2RlbENoYW5nZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVDb2x1bW5EZXNjcmlwdGlvbihjaGFuZ2UpO1xuICAgICAgICAgIH0sXG4gICAgICAgICksXG4gICAgICApO1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgIGNvbXAuaW5saW5lSGVscFBvcG92ZXJNb2RlbENoYW5nZXMuc3Vic2NyaWJlKFxuICAgICAgICAgIChjaGFuZ2U6IFNreUdyaWRDb2x1bW5JbmxpbmVIZWxwUG9wb3Zlck1vZGVsQ2hhbmdlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUlubGluZUhlbHBQb3BvdmVyKGNoYW5nZSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFycmF5c0VxdWFsKGFycmF5QTogYW55W10sIGFycmF5QjogYW55W10pOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgYXJyYXlBLmxlbmd0aCA9PT0gYXJyYXlCLmxlbmd0aCAmJlxuICAgICAgYXJyYXlBLmV2ZXJ5KCh2YWx1ZSwgaW5kZXgpID0+IHZhbHVlID09PSBhcnJheUJbaW5kZXhdKVxuICAgICk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJza3ktZ3JpZFwiPlxuICA8ZGl2XG4gICAgKm5nSWY9XCJzaG93VG9wU2Nyb2xsXCJcbiAgICBjbGFzcz1cInNreS1ncmlkLXRvcC1zY3JvbGwtY29udGFpbmVyXCJcbiAgICAoc2Nyb2xsKT1cIm9uVG9wU2Nyb2xsKCRldmVudClcIlxuICAgICN0b3BTY3JvbGxDb250YWluZXJcbiAgPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwic2t5LWdyaWQtdG9wLXNjcm9sbFwiXG4gICAgICBbc3R5bGUud2lkdGgucHhdPVwiZ2V0VG9wU2Nyb2xsV2lkdGgoKVwiXG4gICAgPjwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdlxuICAgIGNsYXNzPVwic2t5LWdyaWQtdGFibGUtY29udGFpbmVyXCJcbiAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImhlaWdodFwiXG4gICAgW3N0eWxlLndpZHRoLnB4XT1cIndpZHRoXCJcbiAgICAoc2Nyb2xsKT1cIm9uR3JpZFNjcm9sbCgkZXZlbnQpXCJcbiAgICAjZ3JpZENvbnRhaW5lclxuICA+XG4gICAgPHRhYmxlIGNsYXNzPVwic2t5LWdyaWQtdGFibGVcIiBbbmdDbGFzc109XCJnZXRUYWJsZUNsYXNzTmFtZXMoKVwiICNncmlkVGFibGU+XG4gICAgICA8dGhlYWQ+XG4gICAgICAgIDx0ciBbZHJhZ3VsYV09XCJkcmFndWxhR3JvdXBOYW1lXCI+XG4gICAgICAgICAgPHRoXG4gICAgICAgICAgICAqbmdJZj1cImVuYWJsZU11bHRpc2VsZWN0XCJcbiAgICAgICAgICAgIGNsYXNzPVwic2t5LWdyaWQtaGVhZGluZyBza3ktZ3JpZC1tdWx0aXNlbGVjdC1jZWxsIHNreS1ncmlkLWhlYWRlci1sb2NrZWRcIlxuICAgICAgICAgICAgc2NvcGU9XCJjb2xcIlxuICAgICAgICAgICAgW3N0eWxlLm1heC13aWR0aC5weF09XCJtaW5Db2xXaWR0aFwiXG4gICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwibWluQ29sV2lkdGhcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2NyZWVuLXJlYWRlci1vbmx5XCI+XG4gICAgICAgICAgICAgIHt7ICdza3l1eF9ncmlkX211bHRpc2VsZWN0X3NlbGVjdF9yb3cnIHwgc2t5TGliUmVzb3VyY2VzIH19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgICA8dGhcbiAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICBsZXQgY29sdW1uIG9mIGRpc3BsYXllZENvbHVtbnM7XG4gICAgICAgICAgICAgIGxldCBsYXN0ID0gbGFzdDtcbiAgICAgICAgICAgICAgbGV0IGkgPSBpbmRleFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIGNsYXNzPVwic2t5LWdyaWQtaGVhZGluZyBza3ktZmllbGQtbGFiZWxcIlxuICAgICAgICAgICAgc2NvcGU9XCJjb2xcIlxuICAgICAgICAgICAgW2F0dHIuc2t5LWNtcC1pbmRleF09XCJpXCJcbiAgICAgICAgICAgIFthdHRyLnNreS1jbXAtaWRdPVwiY29sdW1uLmlkIHx8IGNvbHVtbi5maWVsZFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLXNvcnRdPVwiZ2V0QXJpYVNvcnREaXJlY3Rpb24oY29sdW1uKSB8IGFzeW5jXCJcbiAgICAgICAgICAgIFtpZF09XCInc2t5LWdyaWQtJyArIGdyaWRJZCArICctY29sdW1uLScgKyBpXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIidza3ktZ3JpZC1jb2x1bW4tYWxpZ25tZW50LScgKyBjb2x1bW4uYWxpZ25tZW50XCJcbiAgICAgICAgICAgIFtzdHlsZS5tYXgtd2lkdGgucHhdPVwiY29sdW1uLndpZHRoXCJcbiAgICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJjb2x1bW4ud2lkdGhcIlxuICAgICAgICAgICAgW3RhYkluZGV4XT1cImNvbHVtbi5pc1NvcnRhYmxlID8gMCA6IC0xXCJcbiAgICAgICAgICAgIChtb3VzZXVwKT1cInNvcnRCeUNvbHVtbihjb2x1bW4pXCJcbiAgICAgICAgICAgIChrZXlkb3duKT1cIm9uS2V5ZG93bigkZXZlbnQsIGNvbHVtbilcIlxuICAgICAgICAgICAgKHRvdWNobW92ZSk9XCJvblRvdWNoTW92ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICNncmlkQ29sXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cIm92ZXJmbG93XCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0VGFibGVIZWFkZXJDbGFzc05hbWVzKGNvbHVtbilcIlxuICAgICAgICAgICAgICBbc3R5bGUubWF4LXdpZHRoLnB4XT1cImNvbHVtbi53aWR0aCAtIDFcIlxuICAgICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiY29sdW1uLndpZHRoIC0gMVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIoZ2V0Q2FyZXRWaXNpYmlsaXR5KGNvbHVtbi5maWVsZCkgfCBhc3luYykgPT09ICdoaWRkZW4nXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNreS1ncmlkLWhlYWRlci1jYXJldC1oaWRkZW4tc3BhY2luZ1wiXG4gICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgIDwhLS0gVGhlIG5vIHNwYWNpbmcgaGVyZSBpcyBpbnRlbnRpb25hbCB0byBhdm9pZCBleHRyYSBzcGFjZXMgZHVlIHRvIHRoZXNlIGJlaW5nIGlubGluZSBlbGVtZW50cyAtLT5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJza3ktZ3JpZC1oZWFkZXItdGV4dFwiPnt7XG4gICAgICAgICAgICAgICAgY29sdW1uLmhlYWRpbmc/LnRyaW0oKVxuICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNreS1pY29uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJza3ktZ3JpZC1oZWFkaW5nLXNvcnRcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgJ3NreS1ncmlkLWhlYWRpbmctc29ydC0nICtcbiAgICAgICAgICAgICAgICAgIChnZXRDYXJldFZpc2liaWxpdHkoY29sdW1uLmZpZWxkKSB8IGFzeW5jKVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgW2ljb25dPVwiZ2V0Q2FyZXRJY29uTmFtZXMoY29sdW1uKVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxza3ktaGVscC1pbmxpbmVcbiAgICAgICAgICAgICAgICAqbmdJZj1cImNvbHVtbi5pbmxpbmVIZWxwUG9wb3ZlclwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgJ3NreS1ncmlkLWhlbHAtaW5saW5lLXNvcnQtaGlkZGVuJzpcbiAgICAgICAgICAgICAgICAgICAgZ2V0SGVscElubGluZUNsYXNzKGNvbHVtbi5maWVsZCkgfCBhc3luY1xuICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgIFtza3lQb3BvdmVyXT1cImNvbHVtbi5pbmxpbmVIZWxwUG9wb3ZlclwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAobW91c2V1cCk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvc2t5LWhlbHAtaW5saW5lPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAqbmdJZj1cIihmaXQgPT09ICd3aWR0aCcgJiYgIWxhc3QpIHx8IGZpdCA9PT0gJ3Njcm9sbCdcIlxuICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICBjbGFzcz1cInNreS1ncmlkLXJlc2l6ZS1oYW5kbGVcIlxuICAgICAgICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgICAgW2F0dHIuc2t5LWNtcC1pbmRleF09XCJpXCJcbiAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCJvblJlc2l6ZUNvbHVtblN0YXJ0KCRldmVudClcIlxuICAgICAgICAgICAgICAodG91Y2hzdGFydCk9XCJvblJlc2l6ZUNvbHVtblN0YXJ0KCRldmVudClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJXaWR0aCBvZiBjb2x1bW5cIlxuICAgICAgICAgICAgICBjbGFzcz1cInNreS1ncmlkLWNvbHVtbi1pbnB1dC1hcmlhLW9ubHlcIlxuICAgICAgICAgICAgICByb2xlPVwic2xpZGVyXCJcbiAgICAgICAgICAgICAgdHlwZT1cInJhbmdlXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1jb250cm9sc109XCInc2t5LWdyaWQtJyArIGdyaWRJZCArICctY29sdW1uLScgKyBpXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS12YWx1ZW1pbl09XCJtaW5Db2xXaWR0aFwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtdmFsdWVtYXhdPVwibWF4Q29sV2lkdGhcIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLXZhbHVlbm93XT1cImNvbHVtbi53aWR0aFwiXG4gICAgICAgICAgICAgIFthdHRyLnNreS1jbXAtaW5kZXhdPVwiaVwiXG4gICAgICAgICAgICAgIFttaW5dPVwibWluQ29sV2lkdGhcIlxuICAgICAgICAgICAgICBbbWF4XT1cIm1heENvbFdpZHRoXCJcbiAgICAgICAgICAgICAgW3N0ZXBdPVwiY29sdW1uUmVzaXplU3RlcFwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY29sdW1uLndpZHRoXCJcbiAgICAgICAgICAgICAgKGJsdXIpPVwib25SZXNpemVIYW5kbGVCbHVyKClcIlxuICAgICAgICAgICAgICAoZm9jdXMpPVwib25SZXNpemVIYW5kbGVGb2N1cygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKGtleWRvd24pPVwib25LZXlkb3duUmVzaXplQ29sKCRldmVudClcIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uSW5wdXRDaGFuZ2VSZXNpemVDb2woJGV2ZW50KVwiXG4gICAgICAgICAgICAgICNjb2xTaXplUmFuZ2VcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvdGhlYWQ+XG4gICAgICA8dGJvZHkgY2xhc3M9XCJza3ktZ3JpZC10Ym9keVwiPlxuICAgICAgICA8dHJcbiAgICAgICAgICBjbGFzcz1cInNreS1ncmlkLXJvd1wiXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaXRlbXM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgIFthdHRyLmFyaWEtY3VycmVudF09XCJpc1Jvd0hpZ2hsaWdodGVkKGl0ZW0uaWQpID8gdHJ1ZSA6IG51bGxcIlxuICAgICAgICAgIFthdHRyLnNreS1jbXAtaWRdPVwiaXRlbS5pZFwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgJ3NreS1ncmlkLW11bHRpc2VsZWN0LXNlbGVjdGVkLXJvdyc6IGl0ZW0uaXNTZWxlY3RlZCxcbiAgICAgICAgICAgICdza3ktZ3JpZC1tdWx0aXNlbGVjdC1yb3cnOiBlbmFibGVNdWx0aXNlbGVjdCxcbiAgICAgICAgICAgICdza3ktZ3JpZC1yb3ctaGlnaGxpZ2h0JzogaXNSb3dIaWdobGlnaHRlZChpdGVtLmlkKVxuICAgICAgICAgIH1cIlxuICAgICAgICAgIChjbGljayk9XCJvblJvd0NsaWNrKCRldmVudCwgaXRlbSlcIlxuICAgICAgICA+XG4gICAgICAgICAgPHRkXG4gICAgICAgICAgICAqbmdJZj1cImVuYWJsZU11bHRpc2VsZWN0XCJcbiAgICAgICAgICAgIGNsYXNzPVwic2t5LWdyaWQtbXVsdGlzZWxlY3QtY2VsbCBza3ktZ3JpZC1oZWFkZXItbG9ja2VkXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIFtzdHlsZS5tYXgtd2lkdGgucHhdPVwibWluQ29sV2lkdGhcIlxuICAgICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwibWluQ29sV2lkdGhcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c2t5LWNoZWNrYm94XG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cIidza3l1eF9ncmlkX211bHRpc2VsZWN0X3NlbGVjdF9yb3cnIHwgc2t5TGliUmVzb3VyY2VzXCJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uTXVsdGlzZWxlY3RDaGVja2JveENoYW5nZSgpXCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIml0ZW0uaXNTZWxlY3RlZFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC9za3ktY2hlY2tib3g+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgIGxldCBjb2x1bW4gb2YgZGlzcGxheWVkQ29sdW1ucztcbiAgICAgICAgICAgICAgbGV0IGxhc3QgPSBsYXN0O1xuICAgICAgICAgICAgICBsZXQgaSA9IGluZGV4XG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgY2xhc3M9XCJza3ktZ3JpZC1jZWxsXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIidza3ktZ3JpZC1jb2x1bW4tYWxpZ25tZW50LScgKyBjb2x1bW4uYWxpZ25tZW50XCJcbiAgICAgICAgICAgIFtzdHlsZS5tYXgtd2lkdGgucHhdPVwiY29sdW1uLndpZHRoXCJcbiAgICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJjb2x1bW4ud2lkdGhcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxza3ktZ3JpZC1jZWxsXG4gICAgICAgICAgICAgIFtza3lIaWdobGlnaHRdPVwiXG4gICAgICAgICAgICAgICAgIWNvbHVtbi5leGNsdWRlRnJvbUhpZ2hsaWdodGluZyA/IGhpZ2hsaWdodFRleHQgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW3RlbXBsYXRlXT1cImNvbHVtbi50ZW1wbGF0ZSB8fCBkZWZhdWx0Q2VsbFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgW2ZpZWxkU2VsZWN0b3JdPVwiY29sdW1uLmZpZWxkXCJcbiAgICAgICAgICAgICAgW2l0ZW1dPVwiaXRlbVwiXG4gICAgICAgICAgICAgIFtjb2x1bW5JZF09XCJjb2x1bW4uaWRcIlxuICAgICAgICAgICAgICBbYXR0ci5za3ktY21wLWlkXT1cImNvbHVtbi5pZCB8fCBjb2x1bW4uZmllbGRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9za3ktZ3JpZC1jZWxsPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L3Rib2R5PlxuICAgIDwvdGFibGU+XG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCJzaG93UmVzaXplQmFyXCJcbiAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICBjbGFzcz1cInNreS1ncmlkLXJlc2l6ZS1iYXJcIlxuICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAjcmVzaXplQmFyXG4gICAgPjwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRDZWxsVGVtcGxhdGUgbGV0LXJvdz1cInJvd1wiIGxldC12YWx1ZT1cInZhbHVlXCI+e3tcbiAgdmFsdWVcbn19PC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlIGxldC1pdGVtICNpbmxpbmVEZWxldGVUZW1wbGF0ZVJlZj5cbiAgPGRpdlxuICAgIFtpZF09XCIncm93LWRlbGV0ZS1yZWYtJyArIGl0ZW0uaWRcIlxuICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgIGhlaWdodDogZ2V0Um93SGVpZ2h0KDApLFxuICAgICAgcG9zaXRpb246ICdmaXhlZCcsXG4gICAgICB3aWR0aDogdGFibGVXaWR0aCArICdweCdcbiAgICB9XCJcbiAgICAjaW5saW5lRGVsZXRlUmVmXG4gID5cbiAgICA8c2t5LWlubGluZS1kZWxldGVcbiAgICAgIFtwZW5kaW5nXT1cImdldFJvd0RlbGV0ZUl0ZW0oaXRlbS5pZCkucGVuZGluZ1wiXG4gICAgICAoY2FuY2VsVHJpZ2dlcmVkKT1cImNhbmNlbFJvd0RlbGV0ZShpdGVtLmlkKVwiXG4gICAgICAoZGVsZXRlVHJpZ2dlcmVkKT1cImNvbmZpcm1Sb3dEZWxldGUoaXRlbS5pZClcIlxuICAgID48L3NreS1pbmxpbmUtZGVsZXRlPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|