@thetradeengineorg1/snova-shell-module 1.0.3 → 1.0.4

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.
@@ -1801,7 +1801,7 @@ HeaderSideComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: HeaderS
1801
1801
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.documentPopover = _t.first);
1802
1802
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.openAnnoucementDialogComponent = _t.first);
1803
1803
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.fileUploadDropzonePopup = _t);
1804
- } }, inputs: { notificPanel: "notificPanel" }, outputs: { opened: "opened" }, features: [i0.ɵɵInheritDefinitionFeature], decls: 45, vars: 26, consts: [[1, "topbar", "remove-padding", 2, "background", "#ffffff !important", "border-bottom", "1px solid #e5e7eb", "height", "65px", "padding", "0 20px", "z-index", "1200", "position", "relative"], ["fxFlex", ""], [3, "reload", "isOpened", "openNewDashboard"], ["fxFlex", "", "fxLayout", "row", "fxHide.xs", "", "fxLayoutAlign", "center"], ["fxFlex", "", "fxLayout", "row", "fxLayoutAlign", "end center", 2, "gap", "10px"], ["class", "filter-data custom-box language-section", "style", "width:180px; position:relative;", 3, "click", 4, "ngIf"], [4, "ngIf"], ["mat-icon-button", "", "id", "feedTimeSheetComponent", 2, "background", "rgba(255,255,255,0.6)", "border-radius", "10px", 3, "matTooltip", "satPopoverAnchorFor", "click"], [2, "background", "linear-gradient(90deg,#5de0e6,#004aad)", "-webkit-background-clip", "text", "-webkit-text-fill-color", "transparent"], ["mat-icon-button", "", "style", "position:relative; background:rgba(255,255,255,0.6); border-radius:10px;", 3, "matTooltip", "matMenuTriggerFor", "click", 4, "ngIf"], ["notification", "matMenu"], ["mat-icon-button", "", "style", "width:32px; height:32px; background:rgba(255,255,255,0.6);\n border-radius:50%; border:1px solid #e5e7eb;\n display:flex; align-items:center; justify-content:center; overflow:hidden;", 3, "matMenuTriggerFor", 4, "ngIf"], ["hasBackdrop", "", "scrollStrategy", "reposition", "verticalAlign", "below", "horizontalAlign", "before", 3, "autoFocus", "restoreFocus", "interactiveClose"], ["feedTimeSheet", ""], [3, "isFeedTimeSheet", "closeFeedTimeSheetPopup"], ["accountMenu", "matMenu"], ["mat-menu-item", "", 3, "click"], ["mat-menu-item", "", 3, "click", 4, "ngIf"], [1, "feedback-icon", 3, "satPopoverAnchorFor"], ["verticalAlign", "below", "hasBackdrop", "", "backdropClass", "backdrop-color", "horizontalAlign", "end", 3, "interactiveClose"], ["feedBackPopOver", ""], [3, "closeDialog", 4, "ngIf"], [1, "filter-data", "custom-box", "language-section", 2, "width", "180px", "position", "relative", 3, "click"], ["placeholder", "", "name", "selectedCompany", "panelClass", "company-select-panel", 3, "ngModel", "ngModelChange", "selectionChange"], ["style", "display:flex; align-items:center; gap:10px;", 4, "ngIf"], ["fxFlex", "", "fxLayoutAlign", "start center", 1, "search_goalinput", "ml-1", 2, "position", "sticky", "top", "0", "z-index", "1", "background-color", "#fff", "padding", "6px 8px"], [1, "full-width", 2, "width", "100%", "margin", "0"], ["matInput", "", "autocomplete", "off", 1, "search_goal", 3, "placeholder", "ngModel", "ngModelChange"], ["style", "cursor:pointer", 3, "click", 4, "ngIf"], ["matTooltipClass", "tooltipClass-mat", "matTooltipShowDelay", "400", 3, "value", "matTooltip", 4, "ngFor", "ngForOf"], [2, "display", "flex", "align-items", "center", "gap", "10px"], ["fxLayoutAlign", "start center", "size", "20", 3, "name", "src", "isRound"], [1, "language-display", 2, "font-weight", "600", "overflow", "hidden", "text-overflow", "ellipsis", "white-space", "nowrap", "background", "linear-gradient(90deg,#5de0e6,#004aad)", "-webkit-background-clip", "text", "-webkit-text-fill-color", "transparent", "background-clip", "text"], [2, "cursor", "pointer", 3, "click"], ["matTooltipClass", "tooltipClass-mat", "matTooltipShowDelay", "400", 3, "value", "matTooltip"], [1, "cursor-pointer", 2, "display", "flex", "align-items", "center"], ["size", "20", 3, "name", "src", "isRound"], [2, "margin-left", "8px"], ["mat-icon-button", "", 2, "background", "rgba(255,255,255,0.6)", "border-radius", "10px", 3, "matTooltip", "ngClass", "click"], ["mat-icon-button", "", 2, "background", "rgba(255,255,255,0.6)", "border-radius", "10px", 3, "matTooltip", "click"], ["mat-icon-button", "", 2, "position", "relative", "background", "rgba(255,255,255,0.6)", "border-radius", "10px", 3, "matTooltip", "matMenuTriggerFor", "click"], ["class", "notification-number mat-bg-warn", "style", "position:absolute; top:-2px; right:-2px;", 4, "ngIf"], [1, "notification-number", "mat-bg-warn", 2, "position", "absolute", "top", "-2px", "right", "-2px"], ["mat-icon-button", "", 2, "width", "32px", "height", "32px", "background", "rgba(255,255,255,0.6)", "border-radius", "50%", "border", "1px solid #e5e7eb", "display", "flex", "align-items", "center", "justify-content", "center", "overflow", "hidden", 3, "matMenuTriggerFor"], ["alt", "profile image", "style", "width:28px; height:28px; border-radius:50%;", 3, "src", 4, "ngIf"], ["alt", "profile image", 2, "width", "28px", "height", "28px", "border-radius", "50%", 3, "src"], ["size", "26", 3, "name", "isRound"], [3, "closeDialog"]], template: function HeaderSideComponent_Template(rf, ctx) { if (rf & 1) {
1804
+ } }, inputs: { notificPanel: "notificPanel" }, outputs: { opened: "opened" }, features: [i0.ɵɵInheritDefinitionFeature], decls: 45, vars: 26, consts: [[1, "topbar", "remove-padding", 2, "background", "#ffffff !important", "border-bottom", "1px solid #e5e7eb", "height", "65px", "padding", "0 20px", "z-index", "1200", "position", "relative"], ["fxFlex", ""], [3, "reload", "isOpened", "openNewDashboard"], ["fxFlex", "", "fxLayout", "row", "fxHide.xs", "", "fxLayoutAlign", "center"], ["fxFlex", "", "fxLayout", "row", "fxLayoutAlign", "end center", 2, "gap", "10px"], ["class", "filter-data custom-box language-section", "style", "width:180px; position:relative;", 3, "click", 4, "ngIf"], [4, "ngIf"], ["mat-icon-button", "", "id", "feedTimeSheetComponent", 2, "background", "rgba(255,255,255,0.6)", "border-radius", "10px", 3, "matTooltip", "satPopoverAnchorFor", "click"], [2, "background", "linear-gradient(90deg,#f79a6b,#f1580c)", "-webkit-background-clip", "text", "-webkit-text-fill-color", "transparent"], ["mat-icon-button", "", "style", "position:relative; background:rgba(255,255,255,0.6); border-radius:10px;", 3, "matTooltip", "matMenuTriggerFor", "click", 4, "ngIf"], ["notification", "matMenu"], ["mat-icon-button", "", "style", "width:32px; height:32px; background:rgba(255,255,255,0.6);\n border-radius:50%; border:1px solid #e5e7eb;\n display:flex; align-items:center; justify-content:center; overflow:hidden;", 3, "matMenuTriggerFor", 4, "ngIf"], ["hasBackdrop", "", "scrollStrategy", "reposition", "verticalAlign", "below", "horizontalAlign", "before", 3, "autoFocus", "restoreFocus", "interactiveClose"], ["feedTimeSheet", ""], [3, "isFeedTimeSheet", "closeFeedTimeSheetPopup"], ["accountMenu", "matMenu"], ["mat-menu-item", "", 3, "click"], ["mat-menu-item", "", 3, "click", 4, "ngIf"], [1, "feedback-icon", 3, "satPopoverAnchorFor"], ["verticalAlign", "below", "hasBackdrop", "", "backdropClass", "backdrop-color", "horizontalAlign", "end", 3, "interactiveClose"], ["feedBackPopOver", ""], [3, "closeDialog", 4, "ngIf"], [1, "filter-data", "custom-box", "language-section", 2, "width", "180px", "position", "relative", 3, "click"], ["placeholder", "", "name", "selectedCompany", "panelClass", "company-select-panel", 3, "ngModel", "ngModelChange", "selectionChange"], ["style", "display:flex; align-items:center; gap:10px;", 4, "ngIf"], ["fxFlex", "", "fxLayoutAlign", "start center", 1, "search_goalinput", "ml-1", 2, "position", "sticky", "top", "0", "z-index", "1", "background-color", "#fff", "padding", "6px 8px"], [1, "full-width", 2, "width", "100%", "margin", "0"], ["matInput", "", "autocomplete", "off", 1, "search_goal", 3, "placeholder", "ngModel", "ngModelChange"], ["style", "cursor:pointer", 3, "click", 4, "ngIf"], ["matTooltipClass", "tooltipClass-mat", "matTooltipShowDelay", "400", 3, "value", "matTooltip", 4, "ngFor", "ngForOf"], [2, "display", "flex", "align-items", "center", "gap", "10px"], ["fxLayoutAlign", "start center", "size", "20", 3, "name", "src", "isRound"], [1, "language-display", 2, "font-weight", "600", "overflow", "hidden", "text-overflow", "ellipsis", "white-space", "nowrap", "background", "linear-gradient(90deg,#f79a6b,#f1580c)", "-webkit-background-clip", "text", "-webkit-text-fill-color", "transparent", "background-clip", "text"], [2, "cursor", "pointer", 3, "click"], ["matTooltipClass", "tooltipClass-mat", "matTooltipShowDelay", "400", 3, "value", "matTooltip"], [1, "cursor-pointer", 2, "display", "flex", "align-items", "center"], ["size", "20", 3, "name", "src", "isRound"], [2, "margin-left", "8px"], ["mat-icon-button", "", 2, "background", "rgba(255,255,255,0.6)", "border-radius", "10px", 3, "matTooltip", "ngClass", "click"], ["mat-icon-button", "", 2, "background", "rgba(255,255,255,0.6)", "border-radius", "10px", 3, "matTooltip", "click"], ["mat-icon-button", "", 2, "position", "relative", "background", "rgba(255,255,255,0.6)", "border-radius", "10px", 3, "matTooltip", "matMenuTriggerFor", "click"], ["class", "notification-number mat-bg-warn", "style", "position:absolute; top:-2px; right:-2px;", 4, "ngIf"], [1, "notification-number", "mat-bg-warn", 2, "position", "absolute", "top", "-2px", "right", "-2px"], ["mat-icon-button", "", 2, "width", "32px", "height", "32px", "background", "rgba(255,255,255,0.6)", "border-radius", "50%", "border", "1px solid #e5e7eb", "display", "flex", "align-items", "center", "justify-content", "center", "overflow", "hidden", 3, "matMenuTriggerFor"], ["alt", "profile image", "style", "width:28px; height:28px; border-radius:50%;", 3, "src", 4, "ngIf"], ["alt", "profile image", 2, "width", "28px", "height", "28px", "border-radius", "50%", 3, "src"], ["size", "26", 3, "name", "isRound"], [3, "closeDialog"]], template: function HeaderSideComponent_Template(rf, ctx) { if (rf & 1) {
1805
1805
  const _r38 = i0.ɵɵgetCurrentView();
1806
1806
  i0.ɵɵelementStart(0, "mat-toolbar", 0);
1807
1807
  i0.ɵɵelementStart(1, "div", 1);
@@ -1955,4 +1955,4 @@ HeaderSideComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: HeaderS
1955
1955
  type: ViewChild,
1956
1956
  args: ["openAnnoucementDialogComponent"]
1957
1957
  }] }); })();
1958
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVyLXNpZGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc2hlbGwtbW9kdWxlLWNvbXBvbmVudHMvc2hlbGwtY29tcG9uZW50cy9zcmMvbGliL3NoZWxsLWNvbXBvbmVudHMvY29tcG9uZW50cy9oZWFkZXItc2lkZS9oZWFkZXItc2lkZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zaGVsbC1tb2R1bGUtY29tcG9uZW50cy9zaGVsbC1jb21wb25lbnRzL3NyYy9saWIvc2hlbGwtY29tcG9uZW50cy9jb21wb25lbnRzL2hlYWRlci1zaWRlL2hlYWRlci1zaWRlLnRlbXBsYXRlLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBcUUsMkJBQTJCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUNuTCxPQUFPLEVBQ0wsU0FBUyxFQUNULE1BQU0sRUFDTixLQUFLLEVBRUwsU0FBUyxFQUNULE1BQU0sRUFDTixZQUFZLEVBR00sWUFBWSxFQUMvQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLHNCQUFzQixFQUN0QiwyQkFBMkIsRUFDM0Isa0JBQWtCLEVBQ2xCLGtDQUFrQyxFQUNsQyxzQkFBc0IsR0FDdkIsTUFBTSxrQ0FBa0MsQ0FBQTtBQUl6QyxPQUFPLEVBQUUsTUFBTSxFQUFTLE1BQU0sYUFBYSxDQUFDO0FBSTVDLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUNoSCxPQUFPLEVBQUUsb0NBQW9DLEVBQUUsaUNBQWlDLEVBQUUsdUJBQXVCLEVBQUUsd0JBQXdCLEVBQUUs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LENBQUM7YUFDSCxDQUFDO1NBQ0g7dUZBR1UsbUJBQW1CO2NBZC9CLFNBQVM7ZUFBQztnQkFDVCxRQUFRLEVBQUUsaUJBQWlCO2dCQUMzQixXQUFXLEVBQUUsNkJBQTZCO2dCQUMxQyxVQUFVLEVBQUU7b0JBQ1YsT0FBTyxDQUFDLE1BQU0sRUFBRTt3QkFDZCxVQUFVLENBQUMsV0FBVyxFQUFFOzRCQUN0QixLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUM7NEJBQ3JCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7NEJBQ3BDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7eUJBQ3JDLENBQUM7cUJBQ0gsQ0FBQztpQkFDSDthQUNGO3NsQkFxSW1DLE1BQU07c0JBQXJDLE1BQU07dUJBQUMsTUFBTTt3QkFsSVksb0JBQW9CO2tCQUEvQyxTQUFTO21CQUFDLGVBQWU7WUFDSSxlQUFlO2tCQUE1QyxTQUFTO21CQUFDLGlCQUFpQjtZQUNhLHVCQUF1QjtrQkFBL0QsWUFBWTttQkFBQyx5QkFBeUI7WUFDVCxlQUFlO2tCQUE1QyxTQUFTO21CQUFDLGlCQUFpQjtZQUVuQixZQUFZO2tCQUFwQixLQUFLO1lBQ0ksTUFBTTtrQkFBZixNQUFNO1lBQzhDLDhCQUE4QjtrQkFBbEYsU0FBUzttQkFBQyxnQ0FBZ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBVc2VyRGV0YWlsc0ZldGNoZWRBZnRlckxvZ2luLCBVc2VyRGV0YWlsc0ZldGNoZWRBZnRlckNvbXBhbnlMb2dpbiwgRmV0Y2hUaW1lU2hlZXRCdXR0b25EZXRhaWxzLCBSb2xlc0ZldGNoVHJpZ2dlcmVkIH0gZnJvbSAnLi8uLi8uLi9zdG9yZS9hY3Rpb25zL2F1dGhlbnRpY2F0aW9uLmFjdGlvbnMnO1xyXG5pbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBJbmplY3QsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIFZpZXdDaGlsZCxcclxuICBPdXRwdXQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIE5nTW9kdWxlUmVmLFxyXG4gIE5nTW9kdWxlRmFjdG9yeUxvYWRlcixcclxuICBWaWV3Q29udGFpbmVyUmVmLCBWaWV3Q2hpbGRyZW4sIENoYW5nZURldGVjdG9yUmVmLCBUZW1wbGF0ZVJlZlxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7XHJcbiAgUmVjZWl2ZU1lc3NhZ2VUcmlnZ2VyZWQsXHJcbiAgUHJlc2VuY2VFdmVudFRyaWdnZXJlZCxcclxuICBJbml0YWxTdGF0ZU9mVXNlcnNUcmlnZ2VyZWQsXHJcbiAgTWVzc2FnZUFjdGlvblR5cGVzLFxyXG4gIFJlY2VpdmVDaGFubmVsVXBkYXRlTW9kZWxUcmlnZ2VyZWQsXHJcbiAgUmVjZWl2ZVNpZ25hbFRyaWdnZXJlZCxcclxufSBmcm9tIFwiLi4vLi4vc3RvcmUvYWN0aW9ucy9jaGF0LmFjdGlvbnNcIlxyXG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHsgU2F0UG9wb3ZlciB9IGZyb20gXCJAbmNzdGF0ZS9zYXQtcG9wb3ZlclwiO1xyXG5pbXBvcnQgeyBzZWxlY3QsIFN0b3JlIH0gZnJvbSBcIkBuZ3J4L3N0b3JlXCI7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tIFwiQG5neC10cmFuc2xhdGUvY29yZVwiO1xyXG5pbXBvcnQgeyBDb29raWVTZXJ2aWNlIH0gZnJvbSBcIm5neC1jb29raWUtc2VydmljZVwiO1xyXG5cclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IHRha2VVbnRpbCwgdGFwIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcbmltcG9ydCB7IEdldFVzZXJTdG9yZUlkVHJpZ2dlcmVkLCBBdXRoZW50aWNhdGlvbkFjdGlvblR5cGVzIH0gZnJvbSBcIi4uLy4uL3N0b3JlL2FjdGlvbnMvYXV0aGVudGljYXRpb24uYWN0aW9uc1wiO1xyXG5pbXBvcnQgeyBDbGVhckFsbFVucmVhZE5vdGlmaWNhdGlvbnNUcmlnZ2VyZWQsIENsZWFyVW5yZWFkTm90aWZpY2F0aW9uc1RyaWdnZXJlZCwgTmV3Tm90aWZpY2F0aW9uUmVjZWl2ZWQsIE5vdGlmaWNhdGlvbnNBY3Rpb25UeXBlcywgVXBzZXJ0VW5yZWFkTm90aWZpY2F0aW9uc1RyaWdnZXJlZCB9IGZyb20gXCIuLi8uLi9zdG9yZS9hY3Rpb25zL25vdGlmaWNhdGlvbnMuYWN0aW9uc1wiO1xyXG5pbXBvcnQgeyBTdGF0ZSB9IGZyb20gXCIuLi8uLi9zdG9yZS9yZWR1Y2Vycy9pbmRleFwiO1xyXG5pbXBvcnQgKiBhcyBzaGFyZWRNb2R1bGVSZWR1Y2VycyBmcm9tIFwiLi4vLi4vc3RvcmUvcmVkdWNlcnMvaW5kZXhcIjtcclxuaW1wb3J0ICcuLi8uLi8uLi9nbG9iYWxkZXBlbmRlbmNpZXMvaGVscGVycy9mb250YXdlc29tZS1pY29ucyc7XHJcbmltcG9ydCB7IENvbmZpcm1hdGlvbkRpYWxvZ0NvbXBvbmVudCB9IGZyb20gXCIuLi9jb25maXJtYXRpb24tZGlhbG9nL2NvbmZpcm1hdGlvbi1kaWFsb2cuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvY29tbW9uLXVzZWQuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBBY3Rpb25zLCBvZlR5cGUgfSBmcm9tIFwiQG5ncngvZWZmZWN0c1wiO1xyXG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzIH0gZnJvbSAnLi4vLi4vLi4vZ2xvYmFsZGVwZW5kZW5jaWVzL2NvbnN0YW50cy9sb2NhbHN0b3JhZ2UtcHJvcGVydGllcyc7XHJcbmltcG9ydCB7IENoYW5uZWxOYW1lcyB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9jaGFubmVsLW5hbWVzJztcclxuaW1wb3J0IHsgV0lORE9XIH0gZnJvbSAnLi4vLi4vLi4vZ2xvYmFsZGVwZW5kZW5jaWVzL2hlbHBlcnMvd2luZG93LmhlbHBlcic7XHJcbmltcG9ydCB7IEF1dGhlbnRpY2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2F1dGhlbnRpY2F0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUaGVtZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90aGVtZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTGF5b3V0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2xheW91dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVGltZXNoZWV0RGlzYWJsZW9yRW5hYmxlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3RpbWVzaGVldGVuYWJsZWRpc2FibGUnO1xyXG5pbXBvcnQgeyBUaGVtZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3RoZW1lcy5tb2RlbCc7XHJcbmltcG9ydCB7IE5vdGlmaWNhdGlvbk1vZGVsLCBOb3RpZmljYXRpb25PdXRwdXRNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9Ob3RpZmljYXRpb25zT3V0UHV0TW9kZWwnO1xyXG5pbXBvcnQgeyBDdXN0b21BcHBCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vZ2xvYmFsZGVwZW5kZW5jaWVzL2NvbXBvbmVudHMvY29tcG9uZW50YmFzZSc7XHJcbmltcG9ydCB7IFNvZnRMYWJlbENvbmZpZ3VyYXRpb25Nb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9zb2Z0bGFiZWxzLW1vZGVsJztcclxuaW1wb3J0IHsgVXNlck1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3VzZXInO1xyXG5pbXBvcnQgeyBDb21wYW5pZXNMaXN0IH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NvbXBhbmllc2xpc3QubW9kZWwnO1xyXG5pbXBvcnQgeyBTdG9yZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3N0b3JlLW1vZGVsJztcclxuaW1wb3J0IHsgQXBwTm90aWZpY2F0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL0FwcE5vdGlmaWNhdGlvbic7XHJcbmltcG9ydCB7IFN0b3JlU2VhcmNoTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvc3RvcmUtc2VhcmNoLW1vZGVsJztcclxuaW1wb3J0IHsgTmdNb2R1bGVGYWN0b3J5LCBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFdvcmtJdGVtc0RpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uL2FsbC13b3JrLWl0ZW1zLWRpYWxvZy9hbGwtd29yay1pdGVtcy1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU2hlbGxNb2R1bGVzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3NoZWxsLm1vZHVsZXMuc2VydmljZSc7XHJcbmltcG9ydCAqIGFzIF8gZnJvbSBcInVuZGVyc2NvcmVcIjtcclxuaW1wb3J0IHsgRmVlZFRpbWVEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi9mZWVkLXRpbWUvZmVlZC10aW1lLWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBOb3RpZmljYXRpb25UeXBlSWRzIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL25vdGlmaWNhdGlvbi10eXBlLWlkcyc7XHJcbmltcG9ydCB7IFVzZXJTdG9yeUFzc2lnbmVkTm90aWZpY2F0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL1VzZXJTdG9yeUFzc2lnbmVkTm90aWZpY2F0aW9uJztcclxuaW1wb3J0IHsgQ2hhbm5lbFJvdXRlcyB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9ub3RpZmljYXRpb24tcm91dGVzJztcclxuaW1wb3J0IHsgUm9sZVVwZGF0ZWROb3RpZmljYXRpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvUm9sZVVwZGF0ZWROb3RpZmljYXRpb24nO1xyXG5pbXBvcnQgeyBSZXBvcnRTdWJtaXR0ZWROb3RpZmljYXRpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvUmVwb3J0U3VibWl0dGVkTm90aWZpY2F0aW9uJztcclxuaW1wb3J0IHsgUmVwb3J0Q29uZmlnQXNzaWduZWROb3RpZmljYXRpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvUmVwb3J0Q29uZmlnQXNzaWduZWROb3RpZmljYXRpb24nO1xyXG5pbXBvcnQgeyBNdWx0aXBsZUNoYXJ0c1NjaGVkdWxpbmcgfSBmcm9tICcuLi8uLi9tb2RlbHMvbXVsdGlDaGFydHNTY2hlZHVsaW5nJztcclxuaW1wb3J0IHsgQXNzZXRBc3NpZ25lZE5vdGlmaWNhdGlvbiB9IGZyb20gJy4uLy4uL21vZGVscy9Bc3NldEFzc2lnbmVkTm90aWZpY2F0aW9uTW9kZWwnO1xyXG5pbXBvcnQgeyBOZXdQcm9qZWN0Q3JlYXRlZE5vdGlmaWNhdGlvbk1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL05ld1Byb2plY3RDcmVhdGVkTm90aWZpY2F0aW9uTW9kZWwnO1xyXG5pbXBvcnQgeyBHb2FsQXBwcm92ZWROb3RpZmljYXRpb25Nb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nb2FsQXBwcm92ZWROb3RpZmljYXRpb25Nb2RlbCc7XHJcbmltcG9ydCB7IFVzZXJTdG9yeVVwZGF0ZU5vdGlmaWNhdGlvbk1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3VzZXJTdG9yeVVwZGF0ZU5vdGlmaWNhdGlvbk1vZGVsJztcclxuaW1wb3J0IHsgVXNlclN0b3J5Q29tbWVudE5vdGlmaWNhdGlvbk1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3VzZXJTdG9yeUNvbW1lbnROb3RpZmljYXRpb25Nb2RlbCc7XHJcbmltcG9ydCB7IFNwcmludFN0YXJ0ZWROb3RpZmljYXRpb25Nb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9zcHJpbnRTdGFydGVkTm90aWZpY2F0aW9uTW9kZWwnO1xyXG5pbXBvcnQgeyBTcHJpbnRSZXBsYW5TdGFydGVkTm90aWZpY2F0aW9uTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvc3ByaW50UmVwbGFuUmVxdWVzdGVkTW9kZWwnO1xyXG5pbXBvcnQgeyBBbm5vdWNlbWVudERpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uL25vdGlmaWNhdGlvbnMvYW5ub3VuY2VtZW50LWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBXb3Jrc3BhY2VMaXN0IH0gZnJvbSAnLi4vLi4vbW9kZWxzL3dvcmtzcGFjZUxpc3QnO1xyXG5pbXBvcnQgeyBhbmltYXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xyXG5pbXBvcnQgeyBOZ3hVaUxvYWRlclNlcnZpY2UsIFNQSU5ORVIgfSBmcm9tICduZ3gtdWktbG9hZGVyJztcclxuaW1wb3J0IHsgTmV3UHJvamVjdEZlYXR1cmVDcmVhdGVkTm90aWZpY2F0aW9uTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvTmV3UHJvamVjdEZlYXR1cmVOb3RpZmljYXRpb25Nb2RlbCc7XHJcbmltcG9ydCB7IFVzZXJTdG9yeUFyY2hpdmVOb3RpZmljYXRpb25Nb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9hcmNoaXZlVXNlclN0b3J5TW9kZWwnO1xyXG5pbXBvcnQgeyBVc2VyU3RvcnlQYXJrTm90aWZpY2F0aW9uTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvcGFya1VzZXJTdG9yeUlucHV0TW9kZWwnO1xyXG5pbXBvcnQgeyBFeHBvcnRDb25maWd1cmF0aW9uRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vZXhwb3J0LWltcG9ydC1jb25maWd1cmF0aW9uL2V4cG9ydC1jb25maWd1cmF0aW9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEZpbGVNb2RlbCwgRmlsZVJlc3VsdE1vZGVsLCBTdG9yZU1hbmFnZW1lbnRTZXJ2aWNlLCBVcHNlcnRGaWxlTW9kZWwgfSBmcm9tICdAdGhldHJhZGVlbmdpbmVvcmcxL3Nub3ZhLWRvY3VtZW50LW1hbmFnZW1lbnQnO1xyXG5pbXBvcnQgeyBUb2FzdHJTZXJ2aWNlIH0gZnJvbSAnbmd4LXRvYXN0cic7XHJcbnR5cGUgTW9kdWxlV2l0aENvbXBvbmVudFNlcnZpY2UgPSBUeXBlPGFueT4gJiB7IGNvbXBvbmVudFNlcnZpY2U6IFR5cGU8YW55PiB9O1xyXG4vLyBpbXBvcnQgeyBDb25zdGFudFZhcmlhYmxlcyB9IGZyb20gXCIuLi9jb25zdGFudHMvY29uc3RhbnQtdmFyaWFibGVzXCI7XHJcbmltcG9ydCBSZXN1bWFibGUgZnJvbSBcInJlc3VtYWJsZWpzXCI7XHJcbmltcG9ydCB7IEFwaVVybHMgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvYXBpLXVybHMnO1xyXG5pbXBvcnQgeyBBdmFpbGFibGVMYW5ncyB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9hdmFpbGFibGUtbGFuZ3VhZ2VzJztcclxuaW1wb3J0IHsgSW1wb3J0Q29uZmlndXJhdGlvbk1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2ltcG9ydC1jb25maWd1cmF0aW9uLW1vZGVsJztcclxuaW1wb3J0IHsgQ2hhdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jaGF0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNZXNzYWdlRGV0YWlscyB9IGZyb20gJy4uLy4uL21vZGVscy9NZXNzYWdlRGV0YWlscyc7XHJcbmltcG9ydCB7IENoYW5uZWxVcGRhdGVNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9DaGFubmVsVXBkYXRlTW9kZWwnO1xyXG5pbXBvcnQgeyBQdXNoTm90aWZpY2F0aW9uc1NlcnZpY2UgfSBmcm9tICduZy1wdXNoLWl2eSc7XHJcbmltcG9ydCB7IE1lc3NhZ2VUeXBpbmdEZXRhaWxzIH0gZnJvbSAnLi4vLi4vbW9kZWxzL01lc3NhZ2VUeXBpbmdEZXRhaWxzJztcclxuaW1wb3J0IHsgUHViTnViQW5ndWxhciB9IGZyb20gJ3B1Ym51Yi1hbmd1bGFyMic7XHJcblxyXG5cclxuaW1wb3J0IHsgSW50cm9Nb2RlbCB9IGZyb20gXCIuLi8uLi9tb2RlbHMvSW50cm9Nb2RlbFwiO1xyXG5pbXBvcnQgeyBMZWF2ZUFwcGxpY2F0aW9uTm90aWZpY2F0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2xlYXZlQXBwbGljYXRpb25Ob3RpZmljdGlvbic7XHJcbmltcG9ydCB7IFNpZ25hbHJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2lnbmFsci5zZXJ2aWNlJztcclxuXHJcbi8qKiBAZHluYW1pYyAqL1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwiYXBwLWhlYWRlci1zaWRlXCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi9oZWFkZXItc2lkZS50ZW1wbGF0ZS5odG1sXCIsXHJcbiAgYW5pbWF0aW9uczogW1xyXG4gICAgdHJpZ2dlcignZmFkZScsIFtcclxuICAgICAgdHJhbnNpdGlvbigndm9pZCA9PiAqJywgW1xyXG4gICAgICAgIHN0eWxlKHsgb3BhY2l0eTogMCB9KSxcclxuICAgICAgICBhbmltYXRlKDIwMDAsIHN0eWxlKHsgb3BhY2l0eTogMSB9KSksXHJcbiAgICAgICAgYW5pbWF0ZSg2MDAwLCBzdHlsZSh7IG9wYWNpdHk6IDAgfSkpXHJcbiAgICAgIF0pXHJcbiAgICBdKVxyXG4gIF1cclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBIZWFkZXJTaWRlQ29tcG9uZW50IGV4dGVuZHMgQ3VzdG9tQXBwQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQFZpZXdDaGlsZCgnZmVlZFRpbWVTaGVldCcpIGZlZWRUaW1lU2hlZXRQb3BvdmVyOiBTYXRQb3BvdmVyO1xyXG4gIEBWaWV3Q2hpbGQoJ2ZlZWRCYWNrUG9wb3ZlcicpIGZlZWRCYWNrUG9wT3ZlcjogU2F0UG9wb3ZlcjtcclxuICBAVmlld0NoaWxkcmVuKFwiZmlsZVVwbG9hZERyb3B6b25lUG9wdXBcIikgZmlsZVVwbG9hZERyb3B6b25lUG9wdXA7XHJcbiAgQFZpZXdDaGlsZCgnZG9jdW1lbnRQb3BvdmVyJykgZG9jdW1lbnRQb3BvdmVyOiBTYXRQb3BvdmVyO1xyXG4gIHNvZnRMYWJlbHM6IFNvZnRMYWJlbENvbmZpZ3VyYXRpb25Nb2RlbFtdO1xyXG4gIEBJbnB1dCgpIG5vdGlmaWNQYW5lbDtcclxuICBAT3V0cHV0KCkgb3BlbmVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQFZpZXdDaGlsZChcIm9wZW5Bbm5vdWNlbWVudERpYWxvZ0NvbXBvbmVudFwiKSBwcml2YXRlIG9wZW5Bbm5vdWNlbWVudERpYWxvZ0NvbXBvbmVudDogVGVtcGxhdGVSZWY8YW55PjtcclxuICBzcGlubmVyVHlwZSA9IFNQSU5ORVIuY2lyY2xlO1xyXG4gIHB1YmxpYyBhdmFpbGFibGVMYW5ncyA9IEF2YWlsYWJsZUxhbmdzLmxhbmd1YWdlcztcclxuICBwdWJsaWMgYXZhaWxhYmxlTGFuZ3NNb2JpbGUgPSBbXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6IFwiRW5cIixcclxuICAgICAgY29kZTogXCJlblwiXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiBcIlRlXCIsXHJcbiAgICAgIGNvZGU6IFwidGVcIlxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogXCJLb1wiLFxyXG4gICAgICBjb2RlOiBcImtvXCJcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6IFwiQXJcIixcclxuICAgICAgY29kZTogXCJhclwiXHJcbiAgICB9XHJcbiAgXTtcclxuICAvLyB0aGVtZU1vZGVsJDogT2JzZXJ2YWJsZTxUaGVtZU1vZGVsPjtcclxuICBjb3VudE9mTm90aWZpY2F0aW9ucyQ6IE9ic2VydmFibGU8bnVtYmVyPjtcclxuICBub3RpZmljYXRpb25zJDogT2JzZXJ2YWJsZTxOb3RpZmljYXRpb25PdXRwdXRNb2RlbFtdPjtcclxuICB1bnJlYWRDb3VudE9mTm90aWZpY2F0aW9ucyQ6IE9ic2VydmFibGU8bnVtYmVyPjtcclxuICBhc3NldElkJDogT2JzZXJ2YWJsZTxzdHJpbmc+O1xyXG4gIHVzZXJTdG9yZUlkJDogT2JzZXJ2YWJsZTxzdHJpbmc+O1xyXG4gIHRoZW1lTW9kZWw6IFRoZW1lTW9kZWw7XHJcbiAgcmVsb2FkOiBib29sZWFuO1xyXG4gIHB1YmxpYyBuZ0Rlc3Ryb3llZCQgPSBuZXcgU3ViamVjdCgpO1xyXG4gIGRhc2hib2FyZEZpbHRlcnMgPSB7XHJcbiAgICBwcm9qZWN0SWQ6IG51bGwsXHJcbiAgICB1c2VySWQ6IG51bGwsXHJcbiAgICBnb2FsSWQ6IG51bGwsXHJcbiAgICBpc0RhaWxvZ3VlOiB0cnVlXHJcbiAgfTtcclxuICBwdWJsaWMgZWdyZXRUaGVtZXM7XHJcbiAgcHVibGljIGxheW91dENvbmY6IGFueTtcclxuICBwdWJsaWMgdGltZXNoZWV0RGlzYWJsZW9yRW5hYmxlOiBUaW1lc2hlZXREaXNhYmxlb3JFbmFibGU7XHJcbiAgZG9tYWluczogYW55W107XHJcbiAgbG9hZGluZ0luUHJvZ3Jlc3MkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xyXG4gIHRpbWVQdW5jaENhcmRTaG93ID0gZmFsc2U7XHJcbiAgc2hvd1RyYWlsUGVyaW9kOiBib29sZWFuID0gZmFsc2U7XHJcbiAgYXBwbGljYXRpb25WZXJzaW9uOiBhbnk7XHJcbiAgY29tcGFuaWVzTGlzdCA9IFtdO1xyXG4gIG1lbnVUeXBlOiBzdHJpbmdcclxuICBpc0ZlZWRCYWNrRGlhbG9nOiBib29sZWFuO1xyXG4gIHNlbGVjdGVkTGFuZ05hbWU6IHN0cmluZztcclxuICBjdXJyZW50TGFuZzogc3RyaW5nO1xyXG4gIHNlbGVjdGVkU3RvcmVJZDogc3RyaW5nID0gXCJcIjtcclxuICB1c2VyU3RvcmVJZDogc3RyaW5nO1xyXG4gIHN0b3Jlc0xpc3Q6IFN0b3JlTW9kZWxbXTtcclxuICB2YWxpZGF0aW9uTWVzc2FnZTogc3RyaW5nO1xyXG4gIGlzUmVjb3JkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJvamVjdFJvbGVUZXh0OiBzdHJpbmcgPSAnUHJvamVjdCByb2xlIGNvbmZpZ3VyYXRpb24nO1xyXG4gIGxvZ2dlZEluVXNlcklkOiBzdHJpbmcgPSBcIlwiO1xyXG4gIGNvbXBhbnk6IGFueTtcclxuICBsb2dnZWRVc2VyRGV0YWlsczogYW55O1xyXG4gIG5vT2ZEYXlzOiBhbnk7XHJcbiAgc2hvd0RlbGV0ZUljb246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzaG93RGVsZXRlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNTdG9yZUFjY2VzczogYm9vbGVhbiA9IHRydWU7XHJcbiAgY29tcGFueUlkOiBzdHJpbmc7XHJcbiAgcmV0dXJuVXJsOiBzdHJpbmc7XHJcbiAgc2VsZWN0ZWRDb21wYW55TmFtZTogc3RyaW5nO1xyXG4gIHNlbGVjdGVkQ29tcGFueTogQ29tcGFuaWVzTGlzdDtcclxuICB1c2VyTmFtZTogc3RyaW5nO1xyXG4gIGxvYWRpbmc6IGJvb2xlYW47XHJcbiAgYXV0aGVudGljYXRlZFVzZXJSZWNvcmQ6IFVzZXJNb2RlbDtcclxuICBlbXBsb3llZUlkOiBzdHJpbmc7XHJcbiAgaXNGZWVkVGltZVNoZWV0OiBib29sZWFuO1xyXG4gIGRlZmF1bHREYXNoYm9hcmRJZDogc3RyaW5nO1xyXG4gIHRpbWVTaGVldEJ1dHRvbkRldGFpbHMkOiBPYnNlcnZhYmxlPFRpbWVzaGVldERpc2FibGVvckVuYWJsZT5cclxuICBub3RpZmljYXRpb25zOiBOb3RpZmljYXRpb25PdXRwdXRNb2RlbFtdO1xyXG4gIGFubm91bmNlbWVudElkOiBzdHJpbmc7XHJcbiAgYW5ub3VuY2VOb3RpZmljYXRpb25JZDogc3RyaW5nO1xyXG4gIGRpc3BsYXlXZWxjb21lTm90ZTogYm9vbGVhbjtcclxuICBsb2dnZWRJbkNvdW50OiBhbnk7XHJcbiAgdXNlckZ1bGxOYW1lOiBhbnk7XHJcbiAgZmlsZXM6IEZpbGVbXSA9IFtdO1xyXG4gIGZpbGVzUHJlc2VudDogYm9vbGVhbjtcclxuICBwcm9ncmVzc1ZhbHVlOiBudW1iZXI7XHJcbiAgZmlsZVJlc3VsdE1vZGVsOiBGaWxlUmVzdWx0TW9kZWxbXTtcclxuICBtb2R1bGVUeXBlSWQgPSA5O1xyXG4gIGFueU9wZXJhdGlvbkluUHJvZ3Jlc3M6IGJvb2xlYW47XHJcbiAgZmlsZUluZGV4OiBudW1iZXIgPSAwO1xyXG4gIGZpbGVDb3VudGVyOiBudW1iZXIgPSAxO1xyXG4gIHVwbG9hZGVkRmlsZU5hbWVzID0gW107XHJcbiAgaXNGaWxlVXBsb2FkQ29tcGxldGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNGb2xkZXJVcGxvYWRDb21wbGV0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpbXBvcnRpbmdJblByb2dyZXNzOiBib29sZWFuO1xyXG4gIHNlYXJjaFRleHQ6IHN0cmluZyA9IG51bGw7XHJcbiAgLy8gbWVzc2FnZXNVbnJlYWRDb3VudDogbnVtYmVyID0gMDtcclxuICBjaGFubmVsTGlzdDogYW55O1xyXG4gIHVzZXJDaGFubmVsczogYW55O1xyXG4gIGNvbGxlYWd1ZXNMaXN0OiBhbnk7XHJcbiAgbG9nZ2VkSW5Vc2VyZnVsbE5hbWU6IGFueTtcclxuICBsb2dJblVzZXJJZCA9IHRoaXMuY29va2llU2VydmljZS5nZXQoXCJDdXJyZW50VXNlcklkXCIpO1xyXG4gIGxvZ2luVXNlcmNoYW5uZWxOYW1lOiBzdHJpbmc7XHJcbiAgcHJldmlvdXNNZXNzYWdlOiBhbnk7XHJcbiAgcHVibGlzaGluZ01lc3NhZ2VPZlVzZXI6IGFueTtcclxuICBuZXdOb3RpZmljYXRpb25zQ291bnQ6IGFueSA9IDA7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBwdXNoTm90aWZpY2F0aW9uczogUHVzaE5vdGlmaWNhdGlvbnNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0aGVtZVNlcnZpY2U6IFRoZW1lU2VydmljZSxcclxuICAgIHByaXZhdGUgbmd4U2VydmljZTogTmd4VWlMb2FkZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBsYXlvdXQ6IExheW91dFNlcnZpY2UsXHJcbiAgICBwdWJsaWMgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgcHVibGljIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBjb29raWVTZXJ2aWNlOiBDb29raWVTZXJ2aWNlLFxyXG4gICAgcHVibGljIGRpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgcHJpdmF0ZSBjb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzdG9yZTogU3RvcmU8U3RhdGU+LFxyXG4gICAgcHJpdmF0ZSBwdWJudWI6IFB1Yk51YkFuZ3VsYXIsXHJcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoZW50aWNhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFjdGlvblVwZGF0ZXMkOiBBY3Rpb25zLFxyXG4gICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIHRvYXN0cjogVG9hc3RyU2VydmljZSxcclxuICAgIHByaXZhdGUgc3RvcmVNYW5hZ2VtZW50U2VydmljZTogU3RvcmVNYW5hZ2VtZW50U2VydmljZSxcclxuICAgIHByaXZhdGUgU2hlbGxNb2R1bGVzU2VydmljZTogU2hlbGxNb2R1bGVzU2VydmljZSxcclxuICAgIHByaXZhdGUgY2hhdFNlcnZpY2U6IENoYXRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzaWduYWxyOiBTaWduYWxyU2VydmljZSxcclxuICAgIEBJbmplY3QoV0lORE9XKSBwcml2YXRlIHdpbmRvdzogV2luZG93XHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgLy8gdGhpcy5zaWduYWxyLmluaXRpYWxpemVTaWduYWxSQ29ubmVjdGlvbigpO1xyXG4gICAgdGhpcy5zaWduYWxyLm5vdGlmaWNhdGlvbnMkLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB0aGlzLm5ld05vdGlmaWNhdGlvbnNDb3VudCA9IGRhdGEgJiYgZGF0YS5sZW5ndGggPyBkYXRhLmxlbmd0aCA6IDApO1xyXG5cclxuICAgIHRoaXMucHVzaE5vdGlmaWNhdGlvbnMucmVxdWVzdFBlcm1pc3Npb24oKTtcclxuICAgIHRoaXMuaXNSZWNvcmRpbmcgPSBmYWxzZTtcclxuICAgIC8vIHRoaXMuZ2V0QWN0VHJhY2tlclJlY29yZGVyKCk7XHJcbiAgICBpZiAoKGxvY2FsU3RvcmFnZS5nZXRJdGVtKExvY2FsU3RvcmFnZVByb3BlcnRpZXMuVXNlck1vZGVsKSAhPSBudWxsICYmIGxvY2FsU3RvcmFnZS5nZXRJdGVtKExvY2FsU3RvcmFnZVByb3BlcnRpZXMuVXNlck1vZGVsKSAhPSB1bmRlZmluZWQpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5sb2FkTm90aWZpY2F0aW9ucygpO1xyXG4gICAgfVxyXG4gICAgbGV0IGN1cnJlbnRDdWx0dXJlID0gdGhpcy5jb29raWVTZXJ2aWNlLmdldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkN1cnJlbnRDdWx0dXJlKTtcclxuICAgIGNvbnN0IGNvbXBhbnlsYW4gPSBKU09OLnBhcnNlKHRoaXMuY29va2llU2VydmljZS5nZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Db21wYW55RGV0YWlscykpO1xyXG4gICAgbGV0IGN1cnJlbnRDdWx0dXJlbGFuID0gY29tcGFueWxhbi5sYW5Db2RlO1xyXG5cclxuICAgIGlmIChjdXJyZW50Q3VsdHVyZSA9PSAnJyB8fCBjdXJyZW50Q3VsdHVyZSA9PSBudWxsIHx8IGN1cnJlbnRDdWx0dXJlID09IHVuZGVmaW5lZCB8fCBjdXJyZW50Q3VsdHVyZSA9PT0gJ251bGwnIHx8IGN1cnJlbnRDdWx0dXJlID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICBpZiAoY3VycmVudEN1bHR1cmVsYW4gPT0gJycgfHwgY3VycmVudEN1bHR1cmVsYW4gPT0gbnVsbCB8fCBjdXJyZW50Q3VsdHVyZWxhbiA9PSB1bmRlZmluZWQgfHwgY3VycmVudEN1bHR1cmVsYW4gPT09ICdudWxsJyB8fCBjdXJyZW50Q3VsdHVyZWxhbiA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICBjdXJyZW50Q3VsdHVyZSA9ICdlbic7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgY3VycmVudEN1bHR1cmUgPSBjdXJyZW50Q3VsdHVyZWxhbjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5jdXJyZW50TGFuZyA9IGN1cnJlbnRDdWx0dXJlO1xyXG4gICAgbGV0IGVudmlyb25tZW50ID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkVudmlyb25tZW50KSk7XHJcbiAgICB0aGlzLmNvb2tpZVNlcnZpY2Uuc2V0KExvY2FsU3RvcmFnZVByb3BlcnRpZXMuQ3VycmVudEN1bHR1cmUsIHRoaXMuY3VycmVudExhbmcsIG51bGwsIGVudmlyb25tZW50LmNvb2tpZVBhdGgsIHRoaXMud2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLCBmYWxzZSwgXCJTdHJpY3RcIik7XHJcbiAgICB0aGlzLmFjdGlvblVwZGF0ZXMkXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLm5nRGVzdHJveWVkJCksXHJcbiAgICAgICAgb2ZUeXBlKEF1dGhlbnRpY2F0aW9uQWN0aW9uVHlwZXMuVXNlckRldGFpbHNGZXRjaGVkQWZ0ZXJDb21wYW55TG9naW4pLFxyXG4gICAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnJlbG9hZCA9IHRydWU7XHJcbiAgICAgICAgICAvLyB0aGlzLmNoYXRTZXJ2aWNlLmdldFJlY2VudENoYW5uZWxNZXNzYWdlcygpLnN1YnNjcmliZSgocmVjZW50Q2hhbm5lbE1lc3NhZ2VzOiBhbnkpID0+IHtcclxuICAgICAgICAgIC8vICAgcmVjZW50Q2hhbm5lbE1lc3NhZ2VzLmRhdGEuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICAgIC8vICAgICB0aGlzLm1lc3NhZ2VzVW5yZWFkQ291bnQgKz0gZWxlbWVudC51bnJlYWRNZXNzYWdlQ291bnQ7XHJcbiAgICAgICAgICAvLyAgIH0pO1xyXG4gICAgICAgICAgLy8gfSk7XHJcbiAgICAgICAgICAvLyB0aGlzLmNoYXRTZXJ2aWNlLmdldFJlY2VudEluZGl2aWR1YWxNZXNzYWdlcygpLnN1YnNjcmliZSgocmVjZW50Q29sbGVhZ3VlTWVzc2FnZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgLy8gICB2YXIgdW5pcSA9IHt9O1xyXG4gICAgICAgICAgLy8gICByZWNlbnRDb2xsZWFndWVNZXNzYWdlcy5kYXRhID0gcmVjZW50Q29sbGVhZ3VlTWVzc2FnZXMuZGF0YS5maWx0ZXIob2JqID0+ICF1bmlxW29iai5pZF0gJiYgKHVuaXFbb2JqLmlkXSA9IHRydWUpKTtcclxuICAgICAgICAgIC8vICAgcmVjZW50Q29sbGVhZ3VlTWVzc2FnZXMuZGF0YS5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgLy8gICAgIGlmKGVsZW1lbnQuaWQgIT0gdGhpcy5sb2dnZWRJblVzZXJJZCl7XHJcbiAgICAgICAgICAvLyAgICAgdGhpcy5tZXNzYWdlc1VucmVhZENvdW50ICs9IGVsZW1lbnQudW5yZWFkTWVzc2FnZUNvdW50O1xyXG4gICAgICAgICAgLy8gICAgIH1cclxuICAgICAgICAgIC8vICAgfSk7XHJcbiAgICAgICAgICAvLyB9KTtcclxuICAgICAgICAgIHRoaXMuZ2V0SW50cm9EZXRhaWxzKCk7XHJcbiAgICAgICAgICB0aGlzLm5nT25Jbml0KCk7XHJcbiAgICAgICAgICB0aGlzLmdldE5vdGlmaWNhdGlvbnMoKTtcclxuICAgICAgICAgIHRoaXMuZ2V0VGVhbU1lbWJlcnMoKTtcclxuICAgICAgICAgIHZhciBEZWZhdWx0RGFzaGJvYXJkSWRGb3JMb2dnZWRJblVzZXIgPSB0aGlzLmNvb2tpZVNlcnZpY2UuY2hlY2soTG9jYWxTdG9yYWdlUHJvcGVydGllcy5EZWZhdWx0RGFzaGJvYXJkKSA/IEpTT04ucGFyc2UodGhpcy5jb29raWVTZXJ2aWNlLmdldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkRlZmF1bHREYXNoYm9hcmQpKSA6IG51bGw7XHJcbiAgICAgICAgICBjb25zdCB1c2VyUmVmZXJlbmNlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Vc2VyUmVmZXJlbmNlSWQpO1xyXG4gICAgICAgICAgaWYgKCFEZWZhdWx0RGFzaGJvYXJkSWRGb3JMb2dnZWRJblVzZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RoaXMucmV0dXJuVXJsXSk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHVzZXJSZWZlcmVuY2UgIT0gXCJudWxsXCIgJiYgdXNlclJlZmVyZW5jZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoXCJkYXNoYm9hcmQtbWFuYWdlbWVudC9kYXNoYm9hcmQvXCIgKyBEZWZhdWx0RGFzaGJvYXJkSWRGb3JMb2dnZWRJblVzZXIgKyBcIi9mb3JtL1wiICsgdXNlclJlZmVyZW5jZSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKFwiZGFzaGJvYXJkLW1hbmFnZW1lbnQvZGFzaGJvYXJkL1wiICsgRGVmYXVsdERhc2hib2FyZElkRm9yTG9nZ2VkSW5Vc2VyKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKCk7XHJcblxyXG5cclxuICAgIHRoaXMuYWN0aW9uVXBkYXRlcyRcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMubmdEZXN0cm95ZWQkKSxcclxuICAgICAgICBvZlR5cGUoQXV0aGVudGljYXRpb25BY3Rpb25UeXBlcy5Vc2VyRGV0YWlsc0ZldGNoZWRBZnRlckxvZ2luKSxcclxuICAgICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvb2tpZVNlcnZpY2UuY2hlY2soTG9jYWxTdG9yYWdlUHJvcGVydGllcy5DdXJyZW50VXNlcklkKSkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IEN1cnJlbnRVc2VySWQgPSB0aGlzLmNvb2tpZVNlcnZpY2UuZ2V0KExvY2FsU3RvcmFnZVByb3BlcnRpZXMuQ3VycmVudFVzZXJJZCk7XHJcbiAgICAgICAgICAgICAgLy8gU3Vic2NyaWJlIHRvIFRhc2sgQXNzaWdubWVudCBOb3RpZmljYWl0b25zIGhlcmUuXHJcbiAgICAgICAgICAgICAgY29uc3QgdGFza0Fzc2lnbm1lbnRDaGFubmVsVG9TdWJzY3JpYmVJbnRvID0gQ2hhbm5lbE5hbWVzLkNoYW5uZWxfVGFza0Fzc2lnbm1lbnRzICsgQ3VycmVudFVzZXJJZDtcclxuICAgICAgICAgICAgICBjb25zdCB0YXN0YXR1c1JlcG9ydFN1Ym1pc3Npb25DaGFubmVsVG9TdWJzY3JpYmVJbnRvID0gQ2hhbm5lbE5hbWVzLkNoYW5uZWxfU3RhdHVzUmVwb3J0U3VibWlzc2lvbiArIEN1cnJlbnRVc2VySWQ7XHJcbiAgICAgICAgICAgICAgY29uc3QgdGFzdGF0dXNDb25maWdBc3NpZ25DaGFubmVsVG9TdWJzY3JpYmVJbnRvID0gQ2hhbm5lbE5hbWVzLkNoYW5uZWxfU3RhdHVzQ29uZmlnQXNzaWduICsgQ3VycmVudFVzZXJJZDtcclxuICAgICAgICAgICAgICBjb25zdCBtdWx0aUNoYXJ0c1NjaGVkdWxpbmdDaGFubmVsVG9TdWJzY3JpYmVJbnRvID0gQ2hhbm5lbE5hbWVzLkNoYW5uZWxfTXVsdGlDaGFydHNTY2hlZHVsaW5nICsgQ3VycmVudFVzZXJJZDtcclxuICAgICAgICAgICAgICBjb25zdCBhc3NldHNBc3NpZ25lZENoYW5uZWxUb1N1YnNjcmliZUludG8gPSBDaGFubmVsTmFtZXMuQ2hhbm5lbF9Bc3NldEFzc2lnbm1lbnQgKyBDdXJyZW50VXNlcklkO1xyXG4gICAgICAgICAgICAgIGNvbnN0IHByb2plY3RDcmVhdGVkQ2hhbm5lbFRvU3Vic2NyaWJlSW50byA9IENoYW5uZWxOYW1lcy5DaGFubmVsX05ld1Byb2plY3QgKyBDdXJyZW50VXNlcklkO1xyXG4gICAgICAgICAgICAgIGNvbnN0IHByb2plY3RBY2Nlc3NUb01lbWJlckNoYW5uZWxUb1N1YnNjcmliZUludG8gPSBDaGFubmVsTmFtZXMuQ2hhbm5lbF9Qcm9qZWN0TWVtYmVyUm9sZSArIEN1cnJlbnRVc2VySWQ7XHJcbiAgICAgICAgICAgICAgY29uc3QgZ29hbEFwcHJvdmVkQ2hhbm5lbFRvU3Vic2NyaWJlSW50byA9IENoYW5uZWxOYW1lcy5DaGFubmVsX0dvYWxBcHByb3ZlZEZyb21SZXBsYW4gKyBDdXJyZW50VXNlcklkO1xyXG4gICAgICAgICAgICAgIGNvbnN0IHVzZXJTdG9yeVVwZGF0ZUNoYW5uZWxUb1N1YnNjcmliZUludG8gPSBDaGFubmVsTmFtZXMuQ2hhbm5lbF9Vc2VyU3RvcnlVcGRhdGVOb3RpZmljYXRpb24gKyBDdXJyZW50VXNlcklkO1xyXG4gICAgICAgICAgICAgIGNvbnN0IEFubm91bmNlbWVudENoYW5uZWxUb1N1YnNjcmliZUludG8gPSBDaGFubmVsTmFtZXMuQ2hhbm5lbF9Bbm5vdW5jZW1lbnROb3RpZmljYXRpb24gKyBDdXJyZW50VXNlcklkO1xyXG4gICAgICAgICAgICAgIGNvbnN0IHB1cmNoYXNlRXhlY3V0aW9uQXNzaWduZWRDaGFubmVsVG9TdWJzY3JpYmVJbnRvID0gQ2hhbm5lbE5hbWVzLkNoYW5uZWxfUHVyY2hhc2VFeGVjdXRpb25Bc3NpZ25Ub0VtcGxveWVlTm90aWZpY2F0aW9uICsgQ3VycmVudFVzZXJJZDtcclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcInN1YnNjcmliaW5nIHRvIFwiICsgdGFza0Fzc2lnbm1lbnRDaGFubmVsVG9TdWJzY3JpYmVJbnRvKTtcclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcInN1YnNjcmliaW5nIHRvIFwiICsgdGFzdGF0dXNSZXBvcnRTdWJtaXNzaW9uQ2hhbm5lbFRvU3Vic2NyaWJlSW50byk7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJzdWJzY3JpYmluZyB0byBcIiArIHRhc3RhdHVzQ29uZmlnQXNzaWduQ2hhbm5lbFRvU3Vic2NyaWJlSW50byk7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJzdWJzY3JpYmluZyB0b1wiICsgYXNzZXRzQXNzaWduZWRDaGFubmVsVG9TdWJzY3JpYmVJbnRvKTtcclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcInN1YnNjcmliaW5nIHRvXCIgKyBwcm9qZWN0Q3JlYXRlZENoYW5uZWxUb1N1YnNjcmliZUludG8pO1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwic3Vic2NyaWJpbmcgdG9cIiArIHByb2plY3RBY2Nlc3NUb01lbWJlckNoYW5uZWxUb1N1YnNjcmliZUludG8pO1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwic3Vic2NyaWJpbmcgdG9cIiArIGdvYWxBcHByb3ZlZENoYW5uZWxUb1N1YnNjcmliZUludG8pO1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwic3Vic2NyaWJpbmcgdG9cIiArIHVzZXJTdG9yeVVwZGF0ZUNoYW5uZWxUb1N1YnNjcmliZUludG8pO1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwic3Vic2NyaWJpbmcgdG9cIiArIEFubm91bmNlbWVudENoYW5uZWxUb1N1YnNjcmliZUludG8pO1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwic3Vic2NyaWJpbmcgdG9cIiArIHB1cmNoYXNlRXhlY3V0aW9uQXNzaWduZWRDaGFubmVsVG9TdWJzY3JpYmVJbnRvKTtcclxuICAgICAgICAgICAgICBwdWJudWIuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgIGNoYW5uZWxzOiBbdGFza0Fzc2lnbm1lbnRDaGFubmVsVG9TdWJzY3JpYmVJbnRvLCB0YXN0YXR1c1JlcG9ydFN1Ym1pc3Npb25DaGFubmVsVG9TdWJzY3JpYmVJbnRvLFxyXG4gICAgICAgICAgICAgICAgICB0YXN0YXR1c0NvbmZpZ0Fzc2lnbkNoYW5uZWxUb1N1YnNjcmliZUludG8sIG11bHRpQ2hhcnRzU2NoZWR1bGluZ0NoYW5uZWxUb1N1YnNjcmliZUludG8sXHJcbiAgICAgICAgICAgICAgICAgIGFzc2V0c0Fzc2lnbmVkQ2hhbm5lbFRvU3Vic2NyaWJlSW50bywgcHJvamVjdENyZWF0ZWRDaGFubmVsVG9TdWJzY3JpYmVJbnRvLCAsXHJcbiAgICAgICAgICAgICAgICAgIHByb2plY3RBY2Nlc3NUb01lbWJlckNoYW5uZWxUb1N1YnNjcmliZUludG8sIGdvYWxBcHByb3ZlZENoYW5uZWxUb1N1YnNjcmliZUludG8sXHJcbiAgICAgICAgICAgICAgICAgIHVzZXJTdG9yeVVwZGF0ZUNoYW5uZWxUb1N1YnNjcmliZUludG8sIEFubm91bmNlbWVudENoYW5uZWxUb1N1YnNjcmliZUludG8sIHB1cmNoYXNlRXhlY3V0aW9uQXNzaWduZWRDaGFubmVsVG9TdWJzY3JpYmVJbnRvXVxyXG4gICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAvLyBBZGQgb3RoZXIgc3Vic2NyaXB0aW9ucyBoZXJlLlxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiVXNlciBub3QgbG9nZ2VkIGluIHlldCB0byBiZSBhYmxlIHRvIHN1YnNjcmliZS5cIik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciByb2xlVXBkYXRlc0NoYW5uZWxUb1N1YnNjcmliZUludG8gPSBDaGFubmVsTmFtZXMuQ2hhbm5lbF9Sb2xlVXBkYXRlcyArIFwiMTlCNkY5RkMtNzM3MC00QjlDLUEwNUMtM0I4RDgxOUVFRUFGXCI7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwic3Vic2NyaWJpbmcgdG8gXCIgKyByb2xlVXBkYXRlc0NoYW5uZWxUb1N1YnNjcmliZUludG8pO1xyXG4gICAgICAgICAgICBwdWJudWIuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICBjaGFubmVsczogW3JvbGVVcGRhdGVzQ2hhbm5lbFRvU3Vic2NyaWJlSW50b11cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9LCAzMDAwKTtcclxuICAgICAgICB9KSkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgdGhpcy5hY3Rpb25VcGRhdGVzJFxyXG4gICAgICAucGlwZShcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5uZ0Rlc3Ryb3llZCQpLFxyXG4gICAgICAgIG9mVHlwZShOb3RpZmljYXRpb25zQWN0aW9uVHlwZXMuQ2xlYXJBbGxVbnJlYWROb3RpZmljYXRpb25zQ29tcGxldGVkKSxcclxuICAgICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25zJCA9IHRoaXMuc3RvcmUucGlwZShzZWxlY3Qoc2hhcmVkTW9kdWxlUmVkdWNlcnMuZ2V0Tm90aWZpY2F0aW9uQWxsKSk7XHJcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnMkLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25zID0geDtcclxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLm5vdGlmaWNhdGlvbnMuZmluZEluZGV4KChwKSA9PiBKU09OLnBhcnNlKHAubm90aWZpY2F0aW9uSnNvbikuTm90aWZpY2F0aW9uVHlwZUd1aWQudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09IE5vdGlmaWNhdGlvblR5cGVJZHMuQW5ub3VuY2VtZW50X1JlY2VpdmVkLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgLy90aGlzLmFubm91bmNlTm90aWZpY2F0aW9uSWQgPSBKU09OLnBhcnNlKHRoaXMubm90aWZpY2F0aW9uc1tpbmRleF0ubm90aWZpY2F0aW9uSnNvbikubm90aWZpY2F0aW9uSWQ7XHJcbiAgICAgICAgICAgICAgdGhpcy5hbm5vdW5jZU5vdGlmaWNhdGlvbklkID0gdGhpcy5ub3RpZmljYXRpb25zW2luZGV4XS5ub3RpZmljYXRpb25JZDtcclxuICAgICAgICAgICAgICB0aGlzLm9wZW5Bbm5vdW5jZW1lbnREaWFsb2coSlNPTi5wYXJzZSh0aGlzLm5vdGlmaWNhdGlvbnNbaW5kZXhdLm5vdGlmaWNhdGlvbkpzb24pKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB9KVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAvLyB0aGlzLmFjdGlvblVwZGF0ZXMkXHJcbiAgICAvLyAgIC5waXBlKFxyXG4gICAgLy8gICAgIHRha2VVbnRpbCh0aGlzLm5nRGVzdHJveWVkJCksXHJcbiAgICAvLyAgICAgb2ZUeXBlKE1lc3NhZ2VBY3Rpb25UeXBlcy5Db3VudENvbXBsZXRlZCksXHJcbiAgICAvLyAgICAgdGFwKChyZXN1bHQ6IGFueSkgPT4ge1xyXG4gICAgLy8gICAgICAgdGhpcy5tZXNzYWdlc1VucmVhZENvdW50ID0gcmVzdWx0Lm1lc3NhZ2VDb3VudDtcclxuICAgIC8vICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgLy8gICAgIH0pXHJcbiAgICAvLyAgIClcclxuICAgIC8vICAgLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIHRoaXMuYWN0aW9uVXBkYXRlcyRcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMubmdEZXN0cm95ZWQkKSxcclxuICAgICAgICBvZlR5cGUoTWVzc2FnZUFjdGlvblR5cGVzLlJlcXVlc3RpbmdTdGF0ZU9mVXNlcnNDb21wbGV0ZWQpLFxyXG4gICAgICAgIHRhcCgocmVzdWx0OiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMuc3ViU2NyaWJpbmdUb1ByZXNlbmNlQ2hhbm5lbCgpO1xyXG5cclxuICAgICAgICB9KVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuYWN0aW9uVXBkYXRlcyRcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMubmdEZXN0cm95ZWQkKSxcclxuICAgICAgICBvZlR5cGUoTWVzc2FnZUFjdGlvblR5cGVzLk1lc3NhZ2VDb21wbGV0ZWQpLFxyXG4gICAgICAgIHRhcCgocmVzdWx0OiBhbnkpID0+IHtcclxuICAgICAgICAgIHZhciBtZXNzYWdlRGV0YWlscyA9IHJlc3VsdFsnbWVzc2FnZURldGFpbHMnXTtcclxuICAgICAgICAgIHRoaXMucHVibGlzaGluZ01lc3NhZ2VPZlVzZXIgPSBtZXNzYWdlRGV0YWlscztcclxuICAgICAgICAgIHRoaXMucHVibGlzaGluZ01lc3NhZ2UoKTtcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuYWN0aW9uVXBkYXRlcyRcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMubmdEZXN0cm95ZWQkKSxcclxuICAgICAgICBvZlR5cGUoTWVzc2FnZUFjdGlvblR5cGVzLlNlbmRDaGFubmVsVXBkYXRlTW9kZWxDb21wbGV0ZWQpLFxyXG4gICAgICAgIHRhcCgocmVzdWx0OiBhbnkpID0+IHtcclxuICAgICAgICAgIHZhciBjaGFubmVsVXBkYXRlTW9kZWwgPSByZXN1bHRbJ2NoYW5uZWxVcGRhdGVNb2RlbCddO1xyXG4gICAgICAgICAgdmFyIGxvZ2luQ29tcGFueUlkID0gdGhpcy5jb29raWVTZXJ2aWNlLmdldChcIkNvbXBhbnlJZFwiKTtcclxuICAgICAgICAgIHRoaXMucHVibnViLnB1Ymxpc2goe1xyXG4gICAgICAgICAgICBjaGFubmVsOiBbKGxvZ2luQ29tcGFueUlkICsgJy0nICsgY2hhbm5lbFVwZGF0ZU1vZGVsLmNoYW5uZWxJZCldLFxyXG4gICAgICAgICAgICBtZXNzYWdlOiBKU09OLnN0cmluZ2lmeShjaGFubmVsVXBkYXRlTW9kZWwpXHJcbiAgICAgICAgICB9LCBmdW5jdGlvbiAoc3RhdHVzLCByZXNvcG5zZSkge1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhzdGF0dXMpXHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHJlc29wbnNlKVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKTtcclxuXHJcblxyXG4gICAgdGhpcy5hY3Rpb25VcGRhdGVzJFxyXG4gICAgICAucGlwZShcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5uZ0Rlc3Ryb3llZCQpLFxyXG4gICAgICAgIG9mVHlwZShNZXNzYWdlQWN0aW9uVHlwZXMuU2VuZGluZ1NpZ25hbENvbXBsZXRlZCksXHJcbiAgICAgICAgdGFwKChyZXN1bHQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdmFyIG1lc3NhZ2VUeXBpbmdEZXRhaWxzID0gcmVzdWx0Lm1lc3NhZ2VUeXBpbmdEZXRhaWxzO1xyXG4gICAgICAgICAgdmFyIHNpZ25hbE1lc3NhZ2UgPSBuZXcgTWVzc2FnZVR5cGluZ0RldGFpbHMoKTtcclxuICAgICAgICAgIHNpZ25hbE1lc3NhZ2Uuc3RhdGUgPSBtZXNzYWdlVHlwaW5nRGV0YWlscy5zdGF0ZTtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKG1lc3NhZ2VUeXBpbmdEZXRhaWxzLCBzaWduYWxNZXNzYWdlKTtcclxuICAgICAgICAgIC8vIHRoaXMucHVibnViLnNpZ25hbCh7XHJcbiAgICAgICAgICAvLyAgIGNoYW5uZWw6W21lc3NhZ2VUeXBpbmdEZXRhaWxzLnB1Ym51YkNoYW5uZWxOYW1lT2ZNZXNzYWdlXSxcclxuICAgICAgICAgIC8vICAgbWVzc2FnZSA6IEpTT04uc3RyaW5naWZ5KHNpZ25hbE1lc3NhZ2UpXHJcbiAgICAgICAgICAvLyB9KVxyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgpO1xyXG4gICAgY29uc3Qgc3RvcmVMaXN0bmVyID0gKG1lc3NhZ2UpID0+IHtcclxuICAgICAgY29uc29sZS5sb2coXCItLS0tLS0tLS1SZWNlaXZlZCBwdWJudWIgbWVzc2FnZS0tLS0tLS0tLVwiKTtcclxuICAgICAgLy90aGlzLnRvYXN0ci5pbmZvKG1lc3NhZ2UubWVzc2FnZS5TdW1tYXJ5KTtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICAvL1JlY2VpdmluZyB0aGUgVXNlciBTdG9yeSBBc3NpZ25lZCBOb3RpZmljYXRpb25cclxuICAgICAgICBpZiAodHlwZW9mIChtZXNzYWdlLm1lc3NhZ2UpID09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICB2YXIgaW5kZXhPZkN1cnJlbnRUb3BpYzogbnVtYmVyO1xyXG4gICAgICAgICAgdmFyIG1lc3NhZ2VEZXRhaWxzT2JqZWN0ID0gSlNPTi5wYXJzZShtZXNzYWdlLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgaWYgKG1lc3NhZ2VEZXRhaWxzT2JqZWN0LnRleHRNZXNzYWdlIHx8IG1lc3NhZ2VEZXRhaWxzT2JqZWN0LmZpbGVQYXRoIHx8IG1lc3NhZ2VEZXRhaWxzT2JqZWN0Lm1lc3NhZ2VUeXBlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFJlY2VpdmVNZXNzYWdlVHJpZ2dlcmVkKG1lc3NhZ2VEZXRhaWxzT2JqZWN0KSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmIChtZXNzYWdlRGV0YWlsc09iamVjdC5pc0Zyb21DaGFubmVsQXJjaGl2ZSA9PSB0cnVlIHx8XHJcbiAgICAgICAgICAgIG1lc3NhZ2VEZXRhaWxzT2JqZWN0LmlzRnJvbVJlbW92ZU1lbWJlciA9PSB0cnVlIHx8XHJcbiAgICAgICAgICAgIG1lc3NhZ2VEZXRhaWxzT2JqZWN0LnJlZnJlc2hDaGFubmVscyA9PSB0cnVlIHx8IG1lc3NhZ2VEZXRhaWxzT2JqZWN0LmlzRnJvbUFkZE1lbWJlciA9PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhdFNlcnZpY2UuZ2V0VXNlckNoYW5uZWxzKCkuc3Vic2NyaWJlKChjaGFubmVsczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5jaGFubmVsTGlzdCA9IGNoYW5uZWxzLmRhdGE7XHJcbiAgICAgICAgICAgICAgdmFyIGxvZ2luQ29tcGFueUlkID0gdGhpcy5jb29raWVTZXJ2aWNlLmdldChcIkNvbXBhbnlJZFwiKTtcclxuICAgICAgICAgICAgICB2YXIgY2hhbm5lbE5hbWUgPSBsb2dpbkNvbXBhbnlJZCArICctJyArIG1lc3NhZ2VEZXRhaWxzT2JqZWN0LmNoYW5uZWxJZDtcclxuICAgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmNoYW5uZWxMaXN0LmZpbmRJbmRleCh4ID0+IHguaWQgPT0gbWVzc2FnZURldGFpbHNPYmplY3QuY2hhbm5lbElkKTtcclxuICAgICAgICAgICAgICBpZiAoaW5kZXggIT0gLTEgJiYgKG1lc3NhZ2VEZXRhaWxzT2JqZWN0LnJlZnJlc2hDaGFubmVscyA9PSB0cnVlIHx8IG1lc3NhZ2VEZXRhaWxzT2JqZWN0LmlzRnJvbUFkZE1lbWJlciA9PSB0cnVlKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wdWJudWIuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgICAgY2hhbm5lbHM6IFtjaGFubmVsTmFtZV1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnB1Ym51Yi51bnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgY2hhbm5lbHM6IFtjaGFubmVsTmFtZV1cclxuICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgUmVjZWl2ZUNoYW5uZWxVcGRhdGVNb2RlbFRyaWdnZXJlZChtZXNzYWdlRGV0YWlsc09iamVjdCkpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5yb3V0ZXIucm91dGVyU3RhdGUuc25hcHNob3QudXJsICE9IFwiL2NoYXRcIiAmJiBtZXNzYWdlRGV0YWlsc09iamVjdC5tZXNzYWdlVHlwZSAhPSBcIlJlYWN0aW9uXCIgJiYgbWVzc2FnZURldGFpbHNPYmplY3QuYm9keSAhPSBudWxsICYmIG1lc3NhZ2VEZXRhaWxzT2JqZWN0LnRpdGxlICE9IG51bGwgJiYgKG1lc3NhZ2VEZXRhaWxzT2JqZWN0LmlzUGlubmVkID09IG51bGwgfHwgbWVzc2FnZURldGFpbHNPYmplY3QuaXNQaW5uZWQgPT0gdW5kZWZpbmVkKSAmJiAobWVzc2FnZURldGFpbHNPYmplY3QuaXNTdGFycmVkID09IG51bGwgfHwgbWVzc2FnZURldGFpbHNPYmplY3QuaXNTdGFycmVkID09IHVuZGVmaW5lZCkgJiYgbWVzc2FnZURldGFpbHNPYmplY3Quc2VuZGVyVXNlcklkICE9IHRoaXMubG9nSW5Vc2VySWQpIHtcclxuICAgICAgICAgICAgaWYgKG1lc3NhZ2VEZXRhaWxzT2JqZWN0LmNoYW5uZWxJZCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuY2hhdFNlcnZpY2UuZ2V0VXNlckNoYW5uZWxzKCkuc3Vic2NyaWJlKChjaGFubmVsczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5uZWxMaXN0ID0gY2hhbm5lbHMuZGF0YTtcclxuICAgICAgICAgICAgICAgIGluZGV4T2ZDdXJyZW50VG9waWMgPSB0aGlzLmNoYW5uZWxMaXN0LmZpbmRJbmRleCh4ID0+IHguaWQgPT0gbWVzc2FnZURldGFpbHNPYmplY3QuY2hhbm5lbElkKTtcclxuICAgICAgICAgICAgICAgIGlmIChpbmRleE9mQ3VycmVudFRvcGljICE9IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgIC8vIHRoaXMubm90aWZpY2F0aW9uT2ZDaGF0KG1lc3NhZ2VEZXRhaWxzT2JqZWN0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAvLyB0aGlzLm5vdGlmaWNhdGlvbk9mQ2hhdChtZXNzYWdlRGV0YWlsc09iamVjdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2VcclxuICAgICAgICAgIGlmIChtZXNzYWdlLm1lc3NhZ2UuTm90aWZpY2F0aW9uVHlwZUd1aWQgPT0gTm90aWZpY2F0aW9uVHlwZUlkcy5Ob3RpZmljYXRpb25fV29ya0l0ZW1Bc3NpZ25lZFRvVXNlcikge1xyXG4gICAgICAgICAgICB2YXIgdXNlclN0b3J5QXNzaWduZWROb3RpZmljYXRpb24gPSBuZXcgVXNlclN0b3J5QXNzaWduZWROb3RpZmljYXRpb24oKTtcclxuICAgICAgICAgICAgdXNlclN0b3J5QXNzaWduZWROb3RpZmljYXRpb24ubG9hZEZyb21DYXNlSW5zZW5zaXRpdmVPYmplY3QobWVzc2FnZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgdXNlclN0b3J5QXNzaWduZWROb3RpZmljYXRpb24ucm91dGUgPSBDaGFubmVsUm91dGVzLlZpZXdXb3JrSXRlbSArIHVzZXJTdG9yeUFzc2lnbmVkTm90aWZpY2F0aW9uLm5vdGlmaWNhdGlvbklkO1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBOZXdOb3RpZmljYXRpb25SZWNlaXZlZCh1c2VyU3RvcnlBc3NpZ25lZE5vdGlmaWNhdGlvbikpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChtZXNzYWdlLm1lc3NhZ2UuTm90aWZpY2F0aW9uVHlwZUd1aWQgPT0gTm90aWZpY2F0aW9uVHlwZUlkcy5HZW5lcmljTm90aWZpY2F0aW9uQWN0aXZpdHkpIHtcclxuICAgICAgICAgICAgdmFyIHVzZXJTdG9yeUFzc2lnbmVkTm90aWZpY2F0aW9uID0gbmV3IFVzZXJTdG9yeUFzc2lnbmVkTm90aWZpY2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHVzZXJTdG9yeUFzc2lnbmVkTm90aWZpY2F0aW9uLmxvYWRGcm9tQ2FzZUluc2Vuc2l0aXZlT2JqZWN0KG1lc3NhZ2UubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIC8vIHVzZXJTdG9yeUFzc2lnbmVkTm90aWZpY2F0aW9uLnJvdXRlID0gQ2hhbm5lbFJvdXRlcy5WaWV3V29ya0l0ZW0gKyB1c2VyU3RvcnlBc3NpZ25lZE5vdGlmaWNhdGlvbi5ub3RpZmljYXRpb25JZDtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgTmV3Tm90aWZpY2F0aW9uUmVjZWl2ZWQodXNlclN0b3J5QXNzaWduZWROb3RpZmljYXRpb24pKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAobWVzc2FnZS5tZXNzYWdlLk5vdGlmaWNhdGlvblR5cGVHdWlkID09IE5vdGlmaWNhdGlvblR5cGVJZHMuTm90aWZpY2F0aW9uX1JvbGVVcGRhdGVkKSB7XHJcbiAgICAgICAgICAgIHZhciByb2xlVXBkYXRlZE5vdGlmaWNhdGlvbiA9IG5ldyBSb2xlVXBkYXRlZE5vdGlmaWNhdGlvbigpO1xyXG4gICAgICAgICAgICByb2xlVXBkYXRlZE5vdGlmaWNhdGlvbi5sb2FkRnJvbUNhc2VJbnNlbnNpdGl2ZU9iamVjdChtZXNzYWdlLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICByb2xlVXBkYXRlZE5vdGlmaWNhdGlvbi5yb3V0ZSA9IENoYW5uZWxSb3V0ZXMuVmlld0FjY291bnQ7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IE5ld05vdGlmaWNhdGlvblJlY2VpdmVkKHJvbGVVcGRhdGVkTm90aWZpY2F0aW9uKSk7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFJvbGVzRmV0Y2hUcmlnZ2VyZWQoKSk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKG1lc3NhZ2UubWVzc2FnZS5Ob3RpZmljYXRpb25UeXBlR3VpZCA9PSBOb3RpZmljYXRpb25UeXBlSWRzLlN0YXR1c19SZXBvcnRfU3VtaXR0ZWQpIHtcclxuICAgICAgICAgICAgdmFyIHJlcG9ydFN1Ym1pdHRlZE5vdGlmaWNhdGlvbiA9IG5ldyBSZXBvcnRTdWJtaXR0ZWROb3RpZmljYXRpb24oKTtcclxuICAgICAgICAgICAgcmVwb3J0U3VibWl0dGVkTm90aWZpY2F0aW9uLmxvYWRGcm9tQ2FzZUluc2Vuc2l0aXZlT2JqZWN0KG1lc3NhZ2UubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIHJlcG9ydFN1Ym1pdHRlZE5vdGlmaWNhdGlvbi5yb3V0ZSA9IENoYW5uZWxSb3V0ZXMuVmlld0FjY291bnQ7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IE5ld05vdGlmaWNhdGlvblJlY2VpdmVkKHJlcG9ydFN1Ym1pdHRlZE5vdGlmaWNhdGlvbikpO1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBSb2xlc0ZldGNoVHJpZ2dlcmVkKCkpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChtZXNzYWdlLm1lc3NhZ2UuTm90aWZpY2F0aW9uVHlwZUd1aWQgPT0gTm90aWZpY2F0aW9uVHlwZUlkcy5TdGF0dXNfUmVwb3J0X0NvbmZpZ19DcmVhdGVkKSB7XHJcbiAgICAgICAgICAgIHZhciByZXBvcnRDb25maWdBc3NpZ25lZE5vdGlmaWNhdGlvbiA9IG5ldyBSZXBvcnRDb25maWdBc3NpZ25lZE5vdGlmaWNhdGlvbigpO1xyXG4gICAgICAgICAgICByZXBvcnRDb25maWdBc3NpZ25lZE5vdGlmaWNhdGlvbi5sb2FkRnJvbUNhc2VJbnNlbnNpdGl2ZU9iamVjdChtZXNzYWdlLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICByZXBvcnRDb25maWdBc3NpZ25lZE5vdGlmaWNhdGlvbi5yb3V0ZSA9IENoYW5uZWxSb3V0ZXMuVmlld0FjY291bnQ7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IE5ld05vdGlmaWNhdGlvblJlY2VpdmVkKHJlcG9ydENvbmZpZ0Fzc2lnbmVkTm90aWZpY2F0aW9uKSk7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFJvbGVzRmV0Y2hUcmlnZ2VyZWQoKSk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKG1lc3NhZ2UubWVzc2FnZS5Ob3RpZmljYXRpb25UeXBlR3VpZCA9PSBOb3RpZmljYXRpb25UeXBlSWRzLk11bHRpcGxlX0NoYXJ0c19TY2hlZHVsaW5nX2NyZWF0ZWQpIHtcclxuICAgICAgICAgICAgdmFyIG11bHRpcGxlQ2hhcnRzU2NoZWR1bGluZyA9IG5ldyBNdWx0aXBsZUNoYXJ0c1NjaGVkdWxpbmcoKTtcclxuICAgICAgICAgICAgbXVsdGlwbGVDaGFydHNTY2hlZHVsaW5nLmxvYWRGcm9tQ2FzZUluc2Vuc2l0aXZlT2JqZWN0KG1lc3NhZ2UubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIG11bHRpcGxlQ2hhcnRzU2NoZWR1bGluZy5yb3V0ZSA9IENoYW5uZWxSb3V0ZXMuVmlld0FjY291bnQ7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IE5ld05vdGlmaWNhdGlvblJlY2VpdmVkKG11bHRpcGxlQ2hhcnRzU2NoZWR1bGluZykpO1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBSb2xlc0ZldGNoVHJpZ2dlcmVkKCkpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChtZXNzYWdlLm1lc3NhZ2UuTm90aWZpY2F0aW9uVHlwZUd1aWQgPT0gTm90aWZpY2F0aW9uVHlwZUlkcy5Bc3NldHNfQXNzaWdubWVudCkge1xyXG4gICAgICAgICAgICBjb25zdCBhc3NldEFzc2lnbmVkTm90aWZpY2F0aW9uID0gbmV3IEFzc2V0QXNzaWduZWROb3RpZmljYXRpb24oKTtcclxuICAgICAgICAgICAgYXNzZXRBc3NpZ25lZE5vdGlmaWNhdGlvbi5sb2FkRnJvbUNhc2VJbnNlbnNpdGl2ZU9iamVjdChtZXNzYWdlLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICBhc3NldEFzc2lnbmVkTm90aWZpY2F0aW9uLnJvdXRlID0gQ2hhbm5lbFJvdXRlcy5WaWV3QWNjb3VudDtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgTmV3Tm90aWZpY2F0aW9uUmVjZWl2ZWQoYXNzZXRBc3NpZ25lZE5vdGlmaWNhdGlvbikpO1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBSb2xlc0ZldGNoVHJpZ2dlcmVkKCkpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChtZXNzYWdlLm1lc3NhZ2UuTm90aWZpY2F0aW9uVHlwZUd1aWQudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09IE5vdGlmaWNhdGlvblR5cGVJZHMuUmVtaW5kZXJfTm90aWZpY2F0aW9uLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICAgICAgICBjb25zdCBhc3NldEFzc2lnbmVkTm90aWZpY2F0aW9uID0gbmV3IEFzc2V0QXNzaWduZWROb3RpZmljYXRpb24oKTtcclxuICAgICAgICAgICAgYXNzZXRBc3NpZ25lZE5vdGlmaWNhdGlvbi5sb2FkRnJvbUNhc2VJbnNlbnNpdGl2ZU9iamVjdChtZXNzYWdlLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICBhc3NldEFzc2lnbmVkTm90aWZpY2F0aW9uLnJvdXRlID0gQ2hhbm5lbFJvdXRlcy5WaWV3QWNjb3VudDtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgTmV3Tm90aWZpY2F0aW9uUmVjZWl2ZWQoYXNzZXRBc3NpZ25lZE5vdGlmaWNhdGlvbikpO1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBSb2xlc0ZldGNoVHJpZ2dlcmVkKCkpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChtZXNzYWdlLm1lc3NhZ2UuTm90aWZpY2F0aW9uVHlwZUd1aWQudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09IE5vdGlmaWNhdGlvblR5cGVJZHMuQW5ub3VuY2VtZW50X1JlY2VpdmVkLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICAgICAgICBjb25zdCBhc3NldEFzc2lnbmVkTm90aWZpY2F0aW9uID0gbmV3IEFzc2V0QXNzaWduZWROb3RpZmljYXRpb24oKTtcclxuICAgICAgICAgICAgYXNzZXRBc3NpZ25lZE5vdGlmaWNhdGlvbi5sb2FkRnJvbUNhc2VJbnNlbnNpdGl2ZU9iamVjdChtZXNzYWdlLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICBhc3NldEFzc2lnbmVkTm90aWZpY2F0aW9uLnJvdXRlID0gQ2hhbm5lbFJvdXRlcy5WaWV3QWNjb3VudDtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgTmV3Tm90aWZpY2F0aW9uUmVjZWl2ZWQoYXNzZXRBc3NpZ25lZE5vdGlmaWNhdGlvbikpO1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBSb2xlc0ZldGNoVHJpZ2dlcmVkKCkpO1xyXG4gICAgICAgICAgICAvLyBpZiAobWVzc2FnZS5tZXNzYWdlLklkICE9IHRoaXMuYW5ub3VuY2VOb3RpZmljYXRpb25JZCkge1xyXG4gICAgICAgICAgICAvLyAgIHRoaXMuYW5ub3VuY2VOb3RpZmljYXRpb25JZCA9IG1lc3NhZ2UubWVzc2FnZS5JZDtcclxuICAgICAgICAgICAgLy8gICB0aGlzLm9wZW5Bbm5vdW5jZW1lbnREaWFsb2cobWVzc2FnZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgfSBlbHNlIGlmIChtZXNzYWdlLm1lc3NhZ2UuTm90aWZpY2F0aW9uVHlwZUd1aWQudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09IE5vdGlmaWNhdGlvblR5cGVJZHMuUGVyZm9ybWFuY2VfUmVjZWl2ZWQudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpIHx8IG1lc3NhZ2UubWVzc2FnZS5Ob3RpZmljYXRpb25UeXBlR3VpZC50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT0gTm90aWZpY2F0aW9uVHlwZUlkcy5Qcm9qZWN0TWVtYmVyUm9sZUFkZGVkTm90aWZpY2F0aW9uSWQudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld1Byb2plY3RDcmVhdGVkTm90aWZpY2F0aW9uID0gbmV3IE5ld1Byb2plY3RDcmVhdGVkTm90aWZpY2F0aW9uTW9kZWwoKTtcclxuICAgICAgICAgICAgbmV3UHJvamVjdENyZWF0ZWROb3RpZmljYXRpb24ubG9hZEZyb21DYXNlSW5zZW5zaXRpdmVPYmplY3QobWVzc2FnZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgbmV3UHJvamVjdENyZWF0ZWROb3RpZmljYXRpb24ucm91dGUgPSBDaGFubmVsUm91dGVzLlZpZXdBY2NvdW50O1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBOZXdOb3RpZmljYXRpb25SZWNlaXZlZChuZXdQcm9qZWN0Q3JlYXRlZE5vdGlmaWNhdGlvbikpO1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBSb2xlc0ZldGNoVHJpZ2dlcmVkKCkpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChtZXNzYWdlLm1lc3NhZ2UuTm90aWZpY2F0aW9uVHlwZUd1aWQudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09IE5vdGlmaWNhdGlvblR5cGVJZHMuTmV3UHJvamVjdENyZWF0ZWROb3RpZmljYXRpb25JZC50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgfHwgbWVzc2FnZS5tZXNzYWdlLk5vdGlmaWNhdGlvblR5cGVHdWlkLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PSBOb3RpZmljYXRpb25UeXBlSWRzLlByb2plY3RNZW1iZXJSb2xlQWRkZWROb3RpZmljYXRpb25JZC50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgY29uc3QgbmV3UHJvamVjdENyZWF0ZWROb3RpZmljYXRpb24gPSBuZXcgTmV3UHJvamVjdENyZWF0ZWROb3RpZmljYXRpb25Nb2RlbCgpO1xyXG4gICAgICAgICAgICBuZXdQcm9qZWN0Q3JlYXRlZE5vdGlmaWNhdGlvbi5sb2FkRnJvbUNhc2VJbnNlbnNpdGl2ZU9iamVjdChtZXNzYWdlLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICBuZXdQcm9qZWN0Q3JlYXRlZE5vdGlmaWNhdGlvbi5yb3V0ZSA9IENoYW5uZWxSb3V0ZXMuVmlld0FjY291bnQ7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IE5ld05vdGlmaWNhdGlvblJlY2VpdmVkKG5ld1Byb2plY3RDcmVhdGVkTm90aWZpY2F0aW9uKSk7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFJvbGVzRmV0Y2hUcmlnZ2VyZWQoKSk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKG1lc3NhZ2UubWVzc2FnZS5Ob3RpZmljYXRpb25UeXBlR3VpZC50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT0gTm90aWZpY2F0aW9uVHlwZUlkcy5Hb2FsQXBwcm92ZWRGcm9tUmVwbGFuLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICAgICAgICBjb25zdCBnb2FsQXBwcm92ZWROb3RpZmljYXRpb25Nb2RlbCA9IG5ldyBHb2FsQXBwcm92ZWROb3RpZmljYXRpb25Nb2RlbCgpO1xyXG4gICAgICAgICAgICBnb2FsQXBwcm92ZWROb3RpZmljYXRpb25Nb2RlbC5sb2FkRnJvbUNhc2VJbnNlbnNpdGl2ZU9iamVjdChtZXNzYWdlLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICBnb2FsQXBwcm92ZWROb3RpZmljYXRpb25Nb2RlbC5yb3V0ZSA9IENoYW5uZWxSb3V0ZXMuVmlld0FjY291bnQ7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IE5ld05vdGlmaWNhdGlvblJlY2VpdmVkKGdvYWxBcHByb3ZlZE5vdGlmaWNhdGlvbk1vZGVsKSk7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFJvbGVzRmV0Y2hUcmlnZ2VyZWQoKSk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKG1lc3NhZ2UubWVzc2FnZS5Ob3RpZmljYXRpb25UeXBlR3VpZC50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT0gTm90aWZpY2F0aW9uVHlwZUlkcy5VU2VyU3RvcnlVcGRhdGVOb3RpZmljYXRpb25JZC50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgY29uc3QgdXNlclN0b3J5VXBkYXRlTm90aWZpY2F0aW9uTW9kZWwgPSBuZXcgVXNlclN0b3J5VXBkYXRlTm90aWZpY2F0aW9uTW9kZWwoKTtcclxuICAgICAgICAgICAgdXNlclN0b3J5VXBkYXRlTm90aWZpY2F0aW9uTW9kZWwubG9hZEZyb21DYXNlSW5zZW5zaXRpdmVPYmplY3QobWVzc2FnZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgdXNlclN0b3J5VXBkYXRlTm90aWZpY2F0aW9uTW9kZWwucm91dGUgPSBDaGFubmVsUm91dGVzLlZpZXdBY2NvdW50O1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBOZXdOb3RpZmljYXRpb25SZWNlaXZlZCh1c2VyU3RvcnlVcGRhdGVOb3RpZmljYXRpb25Nb2RlbCkpO1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBSb2xlc0ZldGNoVHJpZ2dlcmVkKCkpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChtZXNzYWdlLm1lc3NhZ2UuTm90aWZpY2F0aW9uVHlwZUd1aWQudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09IE5vdGlmaWNhdGlvblR5cGVJZHMuUHVzaE5vdGlmaWNhdGlvbkZvclVzZXJTdG9yeUNvbW1lbnQudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHVzZXJTdG9yeUNvbW1lbnROb3RpZmljYXRpb25Nb2RlbCA9IG5ldyBVc2VyU3RvcnlDb21tZW50Tm90aWZpY2F0aW9uTW9kZWwoKTtcclxuICAgICAgICAgICAgdXNlclN0b3J5Q29tbWVudE5vdGlmaWNhdGlvbk1vZGVsLmxvYWRGcm9tQ2FzZUluc2Vuc2l0aXZlT2JqZWN0KG1lc3NhZ2UubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIHVzZXJTdG9yeUNvbW1lbnROb3RpZmljYXRpb25Nb2RlbC5yb3V0ZSA9IENoYW5uZWxSb3V0ZXMuVmlld0FjY291bnQ7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IE5ld05vdGlmaWNhdGlvblJlY2VpdmVkKHVzZXJTdG9yeUNvbW1lbnROb3RpZmljYXRpb25Nb2RlbCkpO1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBSb2xlc0ZldGNoVHJpZ2dlcmVkKCkpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChtZXNzYWdlLm1lc3NhZ2UuTm90aWZpY2F0aW9uVHlwZUd1aWQudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09IE5vdGlmaWNhdGlvblR5cGVJZHMuU3ByaW50U3RhcnRlZC50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3ByaW50U3RhcnRlZE5vdGlmaWNhdGlvbk1vZGVsID0gbmV3IFNwcmludFN0YXJ0ZWROb3RpZmljYXRpb25Nb2RlbCgpO1xyXG4gICAgICAgICAgICBzcHJpbnRTdGFydGVkTm90aWZpY2F0aW9uTW9kZWwubG9hZEZyb21DYXNlSW5zZW5zaXRpdmVPYmplY3QobWVzc2FnZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgc3ByaW50U3RhcnRlZE5vdGlmaWNhdGlvbk1vZGVsLnJvdXRlID0gQ2hhbm5lbFJvdXRlcy5WaWV3QWNjb3VudDtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgTmV3Tm90aWZpY2F0aW9uUmVjZWl2ZWQoc3ByaW50U3RhcnRlZE5vdGlmaWNhdGlvbk1vZGVsKSk7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFJvbGVzRmV0Y2hUcmlnZ2VyZWQoKSk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKG1lc3NhZ2UubWVzc2FnZS5Ob3RpZmljYXRpb25UeXBlR3VpZC50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT0gTm90aWZpY2F0aW9uVHlwZUlkcy5TcHJpbnRSZXF1ZXN0ZEZvclJFcGxhbi50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3ByaW50UmVwbGFuU3RhcnRlZE5vdGlmaWNhdGlvbk1vZGVsID0gbmV3IFNwcmludFJlcGxhblN0YXJ0ZWROb3RpZmljYXRpb25Nb2RlbCgpO1xyXG4gICAgICAgICAgICBzcHJpbnRSZXBsYW5TdGFydGVkTm90aWZpY2F0aW9uTW9kZWwubG9hZEZyb21DYXNlSW5zZW5zaXRpdmVPYmplY3QobWVzc2FnZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgc3ByaW50UmVwbGFuU3RhcnRlZE5vdGlmaWNhdGlvbk1vZGVsLnJvdXRlID0gQ2hhbm5lbFJvdXRlcy5WaWV3QWNjb3VudDtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgTmV3Tm90aWZpY2F0aW9uUmVjZWl2ZWQoc3ByaW50UmVwbGFuU3RhcnRlZE5vdGlmaWNhdGlvbk1vZGVsKSk7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFJvbGVzRmV0Y2hUcmlnZ2VyZWQoKSk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKG1lc3NhZ2UubWVzc2FnZS5Ob3RpZmljYXRpb25UeXBlR3VpZC50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT0gTm90aWZpY2F0aW9uVHlwZUlkcy5Qcm9qZWN0RmVhdHVyZS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgY29uc3QgbmV3UHJvamVjdEZlYXR1cmVDcmVhdGVkTm90aWZpY2F0aW9uID0gbmV3IE5ld1Byb2plY3RGZWF0dXJlQ3JlYXRlZE5vdGlmaWNhdGlvbk1vZGVsKCk7XHJcbiAgICAgICAgICAgIG5ld1Byb2plY3RGZWF0dXJlQ3JlYXRlZE5vdGlmaWNhdGlvbi5sb2FkRnJvbUNhc2VJbnNlbnNpdGl2ZU9iamVjdChtZXNzYWdlLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICBuZXdQcm9qZWN0RmVhdHVyZUNyZWF0ZWROb3RpZmljYXRpb24ucm91dGUgPSBDaGFubmVsUm91dGVzLlZpZXdBY2NvdW50O1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBOZXdOb3RpZmljYXRpb25SZWNlaXZlZChuZXdQcm9qZWN0RmVhdHVyZUNyZWF0ZWROb3RpZmljYXRpb24pKTtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgUm9sZXNGZXRjaFRyaWdnZXJlZCgpKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAobWVzc2FnZS5tZXNzYWdlLk5vdGlmaWNhdGlvblR5cGVHdWlkLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PSBOb3RpZmljYXRpb25UeXBlSWRzLlVzZXJTdG9yeUFyY2hpdmUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld1VzZXJTdG9yeUFyY2hpdmVNb2RlbCA9IG5ldyBVc2VyU3RvcnlBcmNoaXZlTm90aWZpY2F0aW9uTW9kZWwoKTtcclxuICAgICAgICAgICAgbmV3VXNlclN0b3J5QXJjaGl2ZU1vZGVsLmxvYWRGcm9tQ2FzZUluc2Vuc2l0aXZlT2JqZWN0KG1lc3NhZ2UubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIG5ld1VzZXJTdG9yeUFyY2hpdmVNb2RlbC5yb3V0ZSA9IENoYW5uZWxSb3V0ZXMuVmlld0FjY291bnQ7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IE5ld05vdGlmaWNhdGlvblJlY2VpdmVkKG5ld1VzZXJTdG9yeUFyY2hpdmVNb2RlbCkpO1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBSb2xlc0ZldGNoVHJpZ2dlcmVkKCkpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChtZXNzYWdlLm1lc3NhZ2UuTm90aWZpY2F0aW9uVHlwZUd1aWQudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09IE5vdGlmaWNhdGlvblR5cGVJZHMuVXNlclN0b3J5UGFyay50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgY29uc3QgbmV3VXNlclN0b3J5UGFya01vZGVsID0gbmV3IFVzZXJTdG9yeVBhcmtOb3RpZmljYXRpb25Nb2RlbCgpO1xyXG4gICAgICAgICAgICBuZXdVc2VyU3RvcnlQYXJrTW9kZWwubG9hZEZyb21DYXNlSW5zZW5zaXRpdmVPYmplY3QobWVzc2FnZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgbmV3VXNlclN0b3J5UGFya01vZGVsLnJvdXRlID0gQ2hhbm5lbFJvdXRlcy5WaWV3QWNjb3VudDtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgTmV3Tm90aWZpY2F0aW9uUmVjZWl2ZWQobmV3VXNlclN0b3J5UGFya01vZGVsKSk7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFJvbGVzRmV0Y2hUcmlnZ2VyZWQoKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmIChtZXNzYWdlLm1lc3NhZ2UuTm90aWZpY2F0aW9uVHlwZUd1aWQudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09IE5vdGlmaWNhdGlvblR5cGVJZHMuTGVhdmVBcHBsaWNhdGlvbi50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgY29uc3QgbGVhdmVBcHBsaWNhdGlvbk5vdGlmaWNhdGlvbiA9IG5ldyBMZWF2ZUFwcGxpY2F0aW9uTm90aWZpY2F0aW9uKCk7XHJcbiAgICAgICAgICAgIGxlYXZlQXBwbGljYXRpb25Ob3RpZmljYXRpb24ubG9hZEZyb21DYXNlSW5zZW5zaXRpdmVPYmplY3QobWVzc2FnZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgbGVhdmVBcHBsaWNhdGlvbk5vdGlmaWNhdGlvbi5yb3V0ZSA9IENoYW5uZWxSb3V0ZXMuVmlld0FjY291bnQ7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IE5ld05vdGlmaWNhdGlvblJlY2VpdmVkKGxlYXZlQXBwbGljYXRpb25Ob3RpZmljYXRpb24pKTtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgUm9sZXNGZXRjaFRyaWdnZXJlZCgpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgaWYgKG1lc3NhZ2UubWVzc2FnZS5Ob3RpZmljYXRpb25UeXBlR3VpZC50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT0gTm90aWZpY2F0aW9uVHlwZUlkcy5BcHByb3ZlTGVhdmVBcHBsaWNhdGlvbi50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgY29uc3QgbGVhdmVBcHBsaWNhdGlvbk5vdGlmaWNhdGlvbiA9IG5ldyBMZWF2ZUFwcGxpY2F0aW9uTm90aWZpY2F0aW9uKCk7XHJcbiAgICAgICAgICAgIGxlYXZlQXBwbGljYXRpb25Ob3RpZmljYXRpb24ubG9hZEZyb21DYXNlSW5zZW5zaXRpdmVPYmplY3QobWVzc2FnZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgbGVhdmVBcHBsaWNhdGlvbk5vdGlmaWNhdGlvbi5yb3V0ZSA9IENoYW5uZWxSb3V0ZXMuVmlld0FjY291bnQ7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IE5ld05vdGlmaWNhdGlvblJlY2VpdmVkKGxlYXZlQXBwbGljYXRpb25Ob3RpZmljYXRpb24pKTtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgUm9sZXNGZXRjaFRyaWdnZXJlZCgpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgaWYgKG1lc3NhZ2UubWVzc2FnZS5Ob3RpZmljYXRpb25UeXBlR3VpZC50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT0gTm90aWZpY2F0aW9uVHlwZUlkcy5SZWplY3RMZWF2ZUFwcGxpY2F0aW9uLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICAgICAgICBjb25zdCBsZWF2ZUFwcGxpY2F0aW9uTm90aWZpY2F0aW9uID0gbmV3IExlYXZlQXBwbGljYXRpb25Ob3RpZmljYXRpb24oKTtcclxuICAgICAgICAgICAgbGVhdmVBcHBsaWNhdGlvbk5vdGlmaWNhdGlvbi5sb2FkRnJvbUNhc2VJbnNlbnNpdGl2ZU9iamVjdChtZXNzYWdlLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICBsZWF2ZUFwcGxpY2F0aW9uTm90aWZpY2F0aW9uLnJvdXRlID0gQ2hhbm5lbFJvdXRlcy5WaWV3QWNjb3VudDtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgTmV3Tm90aWZpY2F0aW9uUmVjZWl2ZWQobGVhdmVBcHBsaWNhdGlvbk5vdGlmaWNhdGlvbikpO1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBSb2xlc0ZldGNoVHJpZ2dlcmVkKCkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSBpZiAobWVzc2FnZS5tZXNzYWdlLk5vdGlmaWNhdGlvblR5cGVHdWlkLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PSBOb3RpZmljYXRpb25UeXBlSWRzLlJlc2lnbmF0aW9uTm90aWZpY2F0aW9uLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICAgICAgICBjb25zdCBsZWF2ZUFwcGxpY2F0aW9uTm90aWZpY2F0aW9uID0gbmV3IExlYXZlQXBwbGljYXRpb25Ob3RpZmljYXRpb24oKTtcclxuICAgICAgICAgICAgbGVhdmVBcHBsaWNhdGlvbk5vdGlmaWNhdGlvbi5sb2FkRnJvbUNhc2VJbnNlbnNpdGl2ZU9iamVjdChtZXNzYWdlLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICBsZWF2ZUFwcGxpY2F0aW9uTm90aWZpY2F0aW9uLnJvdXRlID0gQ2hhbm5lbFJvdXRlcy5WaWV3QWNjb3VudDtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgTmV3Tm90aWZpY2F0aW9uUmVjZWl2ZWQobGVhdmVBcHBsaWNhdGlvbk5vdGlmaWNhdGlvbikpO1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBSb2xlc0ZldGNoVHJpZ2dlcmVkKCkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSBpZiAobWVzc2FnZS5tZXNzYWdlLk5vdGlmaWNhdGlvblR5cGVHdWlkLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PSBOb3RpZmljYXRpb25UeXBlSWRzLlJlc2lnbmF0aW9uQXBwcm92YWxOb3RpZmljYXRpb24udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxlYXZlQXBwbGljYXRpb25Ob3RpZmljYXRpb24gPSBuZXcgTGVhdmVBcHBsaWNhdGlvbk5vdGlmaWNhdGlvbigpO1xyXG4gICAgICAgICAgICBsZWF2ZUFwcGxpY2F0aW9uTm90aWZpY2F0aW9uLmxvYWRGcm9tQ2FzZUluc2Vuc2l0aXZlT2JqZWN0KG1lc3NhZ2UubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIGxlYXZlQXBwbGljYXRpb25Ob3RpZmljYXRpb24ucm91dGUgPSBDaGFubmVsUm91dGVzLlZpZXdBY2NvdW50O1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBOZXdOb3RpZmljYXRpb25SZWNlaXZlZChsZWF2ZUFwcGxpY2F0aW9uTm90aWZpY2F0aW9uKSk7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFJvbGVzRmV0Y2hUcmlnZ2VyZWQoKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmIChtZXNzYWdlLm1lc3NhZ2UuTm90aWZpY2F0aW9uVHlwZUd1aWQudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09IE5vdGlmaWNhdGlvblR5cGVJZHMuUmVzaWduYXRpb25SZWplY3Rpb25Ob3RpZmljYXRpb24udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxlYXZlQXBwbGljYXRpb25Ob3RpZmljYXRpb24gPSBuZXcgTGVhdmVBcHBsaWNhdGlvbk5vdGlmaWNhdGlvbigpO1xyXG4gICAgICAgICAgICBsZWF2ZUFwcGxpY2F0aW9uTm90aWZpY2F0aW9uLmxvYWRGcm9tQ2FzZUluc2Vuc2l0aXZlT2JqZWN0KG1lc3NhZ2UubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIGxlYXZlQXBwbGljYXRpb25Ob3RpZmljYXRpb24ucm91dGUgPSBDaGFubmVsUm91dGVzLlZpZXdBY2NvdW50O1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBOZXdOb3RpZmljYXRpb25SZWNlaXZlZChsZWF2ZUFwcGxpY2F0aW9uTm90aWZpY2F0aW9uKSk7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFJvbGVzRmV0Y2hUcmlnZ2VyZWQoKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmIChtZXNzYWdlLm1lc3NhZ2UuTm90aWZpY2F0aW9uVHlwZUd1aWQudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09IE5vdGlmaWNhdGlvblR5cGVJZHMuQXV0b1RpbWVTaGVldFN1Ym1pc3Npb25Ob3RpZmljYXRpb24udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxlYXZlQXBwbGljYXRpb25Ob3RpZmljYXRpb24gPSBuZXcgTGVhdmVBcHBsaWNhdGlvbk5vdGlmaWNhdGlvbigpO1xyXG4gICAgICAgICAgICBsZWF2ZUFwcGxpY2F0aW9uTm90aWZpY2F0aW9uLmxvYWRGcm9tQ2FzZUluc2Vuc2l0aXZlT2JqZWN0KG1lc3NhZ2UubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIGxlYXZlQXBwbGljYXRpb25Ob3RpZmljYXRpb24ucm91dGUgPSBDaGFubmVsUm91dGVzLlZpZXdBY2NvdW50O1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBOZXdOb3RpZmljYXRpb25SZWNlaXZlZChsZWF2ZUFwcGxpY2F0aW9uTm90aWZpY2F0aW9uKSk7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFJvbGVzRmV0Y2hUcmlnZ2VyZWQoKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmIChtZXNzYWdlLm1lc3NhZ2UuTm90aWZpY2F0aW9uVHlwZUd1aWQudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09IE5vdGlmaWNhdGlvblR5cGVJZHMuUHJvYmF0aW9uQXNzaWduTm90aWZpY2F0aW9uLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICAgICAgICBjb25zdCBsZWF2ZUFwcGxpY2F0aW9uTm90aWZpY2F0aW9uID0gbmV3IExlYXZlQXBwbGljYXRpb25Ob3RpZmljYXRpb24oKTtcclxuICAgICAgICAgICAgbGVhdmVBcHBsaWNhdGlvbk5vdGlmaWNhdGlvbi5sb2FkRnJvbUNhc2VJbnNlbnNpdGl2ZU9iamVjdChtZXNzYWdlLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICBsZWF2ZUFwcGxpY2F0aW9uTm90aWZpY2F0aW9uLnJvdXRlID0gQ2hhbm5lbFJvdXRlcy5WaWV3QWNjb3VudDtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgTmV3Tm90aWZpY2F0aW9uUmVjZWl2ZWQobGVhdmVBcHBsaWNhdGlvbk5vdGlmaWNhdGlvbikpO1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBSb2xlc0ZldGNoVHJpZ2dlcmVkKCkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSBpZiAobWVzc2FnZS5tZXNzYWdlLk5vdGlmaWNhdGlvblR5cGVHdWlkLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PSBOb3RpZmljYXRpb25UeXBlSWRzLlJldmlld0Fzc2lnblRvRW1wbG95ZWVOb3RpZmljYXRpb24udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxlYXZlQXBwbGljYXRpb25Ob3RpZmljYXRpb24gPSBuZXcgTGVhdmVBcHBsaWNhdGlvbk5vdGlmaWNhdGlvbigpO1xyXG4gICAgICAgICAgICBsZWF2ZUFwcGxpY2F0aW9uTm90aWZpY2F0aW9uLmxvYWRGcm9tQ2FzZUluc2Vuc2l0aXZlT2JqZWN0KG1lc3NhZ2UubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIGxlYXZlQXBwbGljYXRpb25Ob3RpZmljYXRpb24ucm91dGUgPSBDaGFubmVsUm91dGVzLlZpZXdBY2NvdW50O1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBOZXdOb3RpZmljYXRpb25SZWNlaXZlZChsZWF2ZUFwcGxpY2F0aW9uTm90aWZpY2F0aW9uKSk7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFJvbGVzRmV0Y2hUcmlnZ2VyZWQoKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmIChtZXNzYWdlLm1lc3NhZ2UuTm90aWZpY2F0aW9uVHlwZUd1aWQudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09IE5vdGlmaWNhdGlvblR5cGVJZHMuUmV2aWV3U3VibWl0dGVkQnlFbXBsb3llZU5vdGlmaWNhdGlvbi50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgY29uc3QgbGVhdmVBcHBsaWNhdGlvbk5vdGlmaWNhdGlvbiA9IG5ldyBMZWF2ZUFwcGxpY2F0aW9uTm90aWZpY2F0aW9uKCk7XHJcbiAgICAgICAgICAgIGxlYXZlQXBwbGljYXRpb25Ob3RpZmljYXRpb24ubG9hZEZyb21DYXNlSW5zZW5zaXRpdmVPYmplY3QobWVzc2FnZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgbGVhdmVBcHBsaWNhdGlvbk5vdGlmaWNhdGlvbi5yb3V0ZSA9IENoYW5uZWxSb3V0ZXMuVmlld0FjY291bnQ7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IE5ld05vdGlmaWNhdGlvblJlY2VpdmVkKGxlYXZlQXBwbGljYXRpb25Ob3RpZmljYXRpb24pKTtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgUm9sZXNGZXRjaFRyaWdnZXJlZCgpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgaWYgKG1lc3NhZ2UubWVzc2FnZS5Ob3RpZmljYXRpb25UeXBlR3VpZC50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT0gTm90aWZpY2F0aW9uVHlwZUlkcy5SZXZpZXdJbnZpdGF0aW9uTm90aWZpY2F0aW9uLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICAgICAgICBjb25zdCBsZWF2ZUFwcGxpY2F0aW9uTm90aWZpY2F0aW9uID0gbmV3IExlYXZlQXBwbGljYXRpb25Ob3RpZmljYXRpb24oKTtcclxuICAgICAgICAgICAgbGVhdmVBcHBsaWNhdGlvbk5vdGlmaWNhdGlvbi5sb2FkRnJvbUNhc2VJbnNlbnNpdGl2ZU9iamVjdChtZXNzYWdlLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICBsZWF2ZUFwcGxpY2F0aW9uTm90aWZpY2F0aW9uLnJvdXRlID0gQ2hhbm5lbFJvdXRlcy5WaWV3QWNjb3VudDtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgTmV3Tm90aWZpY2F0aW9uUmVjZWl2ZWQobGVhdmVBcHBsaWNhdGlvbk5vdGlmaWNhdGlvbikpO1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBSb2xlc0ZldGNoVHJpZ2dlcmVkKCkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSBpZiAobWVzc2FnZS5tZXNzYWdlLk5vdGlmaWNhdGlvblR5cGVHdWlkLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PSBOb3RpZmljYXRpb25UeXBlSWRzLlBlcmZvcm1hbmNlUmV2aWV3U3VibWl0dGVkQnlFbXBsb3llZU5vdGlmaWNhdGlvbi50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgY29uc3QgbGVhdmVBcHBsaWNhdGlvbk5vdGlmaWNhdGlvbiA9IG5ldyBMZWF2ZUFwcGxpY2F0aW9uTm90aWZpY2F0aW9uKCk7XHJcbiAgICAgICAgICAgIGxlYXZlQXBwbGljYXRpb25Ob3RpZmljYXRpb24ubG9hZEZyb21DYXNlSW5zZW5zaXRpdmVPYmplY3QobWVzc2FnZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgbGVhdmVBcHBsaWNhdGlvbk5vdGlmaWNhdGlvbi5yb3V0ZSA9IENoYW5uZWxSb3V0ZXMuVmlld0FjY291bnQ7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IE5ld05vdGlmaWNhdGlvblJlY2VpdmVkKGxlYXZlQXBwbGljYXRpb25Ob3RpZmljYXRpb24pKTtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgUm9sZXNGZXRjaFRyaWdnZXJlZCgpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgaWYgKG1lc3NhZ2UubWVzc2FnZS5Ob3RpZmljYXRpb25UeXBlR3VpZC50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT0gTm90aWZpY2F0aW9uVHlwZUlkcy5QZXJmb3JtYW5jZVJldmlld0ludml0YXRpb25Ob3RpZmljYXRpb25Nb2RlbC50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgY29uc3QgbGVhdmVBcHBsaWNhdGlvbk5vdGlmaWNhdGlvbiA9IG5ldyBMZWF2ZUFwcGxpY2F0aW9uTm90aWZpY2F0aW9uKCk7XHJcbiAgICAgICAgICAgIGxlYXZlQXBwbGljYXRpb25Ob3RpZmljYXRpb24ubG9hZEZyb21DYXNlSW5zZW5zaXRpdmVPYmplY3QobWVzc2FnZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgbGVhdmVBcHBsaWNhdGlvbk5vdGlmaWNhdGlvbi5yb3V0ZSA9IENoYW5uZWxSb3V0ZXMuVmlld0FjY291bnQ7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IE5ld05vdGlmaWNhdGlvblJlY2VpdmVkKGxlYXZlQXBwbGljYXRpb25Ob3RpZmljYXRpb24pKTtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgUm9sZXNGZXRjaFRyaWdnZXJlZCgpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgaWYgKG1lc3NhZ2UubWVzc2FnZS5Ob3RpZmljYXRpb25UeXBlR3VpZC50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT0gTm90aWZpY2F0aW9uVHlwZUlkcy5QZXJmb3JtYW5jZVJldmlld0Fzc2lnblRvRW1wbG95ZWVOb3RpZmljYXRpb24udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxlYXZlQXBwbGljYXRpb25Ob3RpZmljYXRpb24gPSBuZXcgTGVhdmVBcHBsaWNhdGlvbk5vdGlmaWNhdGlvbigpO1xyXG4gICAgICAgICAgICBsZWF2ZUFwcGxpY2F0aW9uTm90aWZpY2F0aW9uLmxvYWRGcm9tQ2FzZUluc2Vuc2l0aXZlT2JqZWN0KG1lc3NhZ2UubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIGxlYXZlQXBwbGljYXRpb25Ob3RpZmljYXRpb24ucm91dGUgPSBDaGFubmVsUm91dGVzLlZpZXdBY2NvdW50O1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBOZXdOb3RpZmljYXRpb25SZWNlaXZlZChsZWF2ZUFwcGxpY2F0aW9uTm90aWZpY2F0aW9uKSk7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFJvbGVzRmV0Y2hUcmlnZ2VyZWQoKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmIChtZXNzYWdlLm1lc3NhZ2UuTm90aWZpY2F0aW9uVHlwZUd1aWQudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09IE5vdGlmaWNhdGlvblR5cGVJZHMuUHVyY2hhc2VTaGlwbWVudE5vdGlmaWNhdGlvbklkLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICAgICAgICBjb25zdCBwdXJjaGFzZUV4ZWN1dGlvbk5vdGlmaWNhdGlvbiA9IG5ldyBMZWF2ZUFwcGxpY2F0aW9uTm90aWZpY2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHB1cmNoYXNlRXhlY3V0aW9uTm90aWZpY2F0aW9uLmxvYWRGcm9tQ2FzZUluc2Vuc2l0aXZlT2JqZWN0KG1lc3NhZ2UubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIHB1cmNoYXNlRXhlY3V0aW9uTm90aWZpY2F0aW9uLnJvdXRlID0gQ2hhbm5lbFJvdXRlcy5FZGl0UHVyY2hhc2VFeGVjdXRpb247XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IE5ld05vdGlmaWNhdGlvblJlY2VpdmVkKHB1cmNoYXNlRXhlY3V0aW9uTm90aWZpY2F0aW9uKSk7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFJvbGVzRmV0Y2hUcmlnZ2VyZWQoKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gVE9ETzogU2VuZCB0aGVzZSBlcnJvcnMgb250byBzZXJ2ZXIgZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZ1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkZvdW5kIHVuZGV0ZWN0ZWQgbm90aWZpY2F0aW9uIHR5cGUuIFwiICsgbWVzc2FnZS5tZXNzYWdlLk5vdGlmaWNhdGlvblR5cGVHdWlkKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAvLyBBZGQgb3RoZXIgbm90aWZpY2F0aW9ucyBoZXJlLlxyXG5cclxuICAgICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7XHJcbiAgICAgICAgLy8gVE9ETzogU2VuZCB0aGVzZSBleGNlcHRpb25zIG9udG8gc2VydmVyIGZvciBmdXJ0aGVyIHByb2Nlc3NpbmdcclxuICAgICAgICBjb25zb2xlLmxvZyhcIkV4Y2VwdGlvbiBPY2N1cmVkXCIgKyBleGNlcHRpb24ubWVzc2FnZSk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgICBjb25zdCBzdGF0dXNPZlVzZXIgPSAocHJlc2VuY2VFdmVudCkgPT4ge1xyXG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBQcmVzZW5jZUV2ZW50VHJpZ2dlcmVkKHByZXNlbmNlRXZlbnQpKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHR5cGluZ1N0YXR1cyA9IChzaWduYWxFdmVudCkgPT4ge1xyXG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBSZWNlaXZlU2lnbmFsVHJpZ2dlcmVkKHNpZ25hbEV2ZW50KSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNoYXRTZXJ2aWNlLmdldFB1Ym51YktleXMoKS5zdWJzY3JpYmUoKGtleXM6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnB1Ym51Yi5pbml0KHtcclxuICAgICAgICBwdWJsaXNoS2V5OiBrZXlzLmRhdGEucHVibGlzaEtleSxcclxuICAgICAgICBzdWJzY3JpYmVLZXk6IGtleXMuZGF0YS5zdWJzY3JpYmVLZXksXHJcbiAgICAgICAgdXVpZDogdGhpcy5sb2dJblVzZXJJZFxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLmNoYXRTZXJ2aWNlLmdldEFsbFVzZXJzRm9yU2xhY2tBcHAoKS5zdWJzY3JpYmUoKGNvbGxlYWd1ZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuY29sbGVhZ3Vlc0xpc3QgPSBjb2xsZWFndWVzLmRhdGE7XHJcbiAgICAgICAgdGhpcy5jaGF0U2VydmljZS5nZXRVc2VyQ2hhbm5lbHMoKS5zdWJzY3JpYmUoKGNoYW5uZWxzOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMuY2hhbm5lbExpc3QgPSBjaGFubmVscy5kYXRhO1xyXG4gICAgICAgICAgdGhpcy5zaWduT3V0VXNlckNoYW5uZWxzKCk7XHJcbiAgICAgICAgICB2YXIgbG9naW5Db21wYW55SWQgPSB0aGlzLmNvb2tpZVNlcnZpY2UuZ2V0KFwiQ29tcGFueUlkXCIpO1xyXG4gICAgICAgICAgaWYgKHRoaXMuY2hhbm5lbExpc3QgIT0gdW5kZWZpbmVkIHx8IHRoaXMuY2hhbm5lbExpc3QgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpbmRleDEgPSAwOyBpbmRleDEgPCB0aGlzLmNoYW5uZWxMaXN0Lmxlbmd0aDsgaW5kZXgxKyspIHtcclxuICAgICAgICAgICAgICB0aGlzLnB1Ym51Yi5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgY2hhbm5lbHM6IFsobG9naW5Db21wYW55SWQgKyAnLScgKyB0aGlzLmNoYW5uZWxMaXN0W2luZGV4MV0uaWQpXVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnB1Ym51Yi5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICBjaGFubmVsczogWygnQ2hhbm5lbFVwZGF0ZXMtJyArIGxvZ2luQ29tcGFueUlkKV1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdGhpcy5wdWJudWIuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgY2hhbm5lbHM6IFsoJ1VzZXJVcGRhdGVzLScgKyBsb2dpbkNvbXBhbnlJZCldXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHZhciBpbmRleDEyID0gdGhpcy5jb2xsZWFndWVzTGlzdC5maW5kSW5kZXgoeCA9PiB4LnVzZXJJZCA9PSB0aGlzLmxvZ0luVXNlcklkKTtcclxuICAgICAgICAgIGlmIChpbmRleDEyID4gLTEpIHtcclxuICAgICAgICAgICAgdmFyIG5hbWUgPSB0aGlzLmNvbGxlYWd1ZXNMaXN0W2luZGV4MTJdLmZ1bGxOYW1lO1xyXG4gICAgICAgICAgICBuYW1lID0gbmFtZS50cmltKCk7XHJcbiAgICAgICAgICAgIG5hbWUgPSB0aGlzLnJlcGxhY2VBbGwobmFtZSwgXCIgXCIsIFwiXCIpXHJcbiAgICAgICAgICAgIHRoaXMubG9naW5Vc2VyY2hhbm5lbE5hbWUgPSAobmFtZSArICctJyArIHRoaXMubG9nSW5Vc2VySWQpO1xyXG4gICAgICAgICAgICB0aGlzLnB1Ym51Yi5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgIGNoYW5uZWxzOiBbdGhpcy5sb2dpblVzZXJjaGFubmVsTmFtZV1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgfSlcclxuICAgICAgdGhpcy5wdWJudWIuYWRkTGlzdGVuZXIoe1xyXG4gICAgICAgIHN0YXR1czogc3QgPT4ge1xyXG4gICAgICAgICAgaWYgKHN0LmNhdGVnb3J5ID09PSBcIlBOVW5rbm93bkNhdGVnb3J5XCIpIHtcclxuICAgICAgICAgICAgdmFyIG5ld1N0YXRlID0ge1xyXG4gICAgICAgICAgICAgIG5ldzogXCJlcnJvclwiXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMucHVibnViLnNldFN0YXRlKFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN0YXRlOiBuZXdTdGF0ZVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAvLyBmdW5jdGlvbiAoc3RhdHVzKSB7XHJcbiAgICAgICAgICAgICAgLy8gICBjb25zb2xlLmxvZyhzdC5lcnJvckRhdGEubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2lnbmFsOiBzaWduYWxFdmVudCA9PiB7XHJcbiAgICAgICAgICB0eXBpbmdTdGF0dXMoc2lnbmFsRXZlbnQpXHJcbiAgICAgICAgfSxcclxuICAgICAgICBwcmVzZW5jZTogcHJlc2VuY2VFdmVudCA9PiB7XHJcbiAgICAgICAgICBzdGF0dXNPZlVzZXIocHJlc2VuY2VFdmVudClcclxuICAgICAgICB9LFxyXG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJzdWJzY3JpYmVkIHRvIFwiICsgbWVzc2FnZSk7XHJcbiAgICAgICAgICBzdG9yZUxpc3RuZXIobWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuICBhc3luYyBzaWduT3V0VXNlckNoYW5uZWxzKCkge1xyXG4gICAgdGhpcy5wdWJudWIudW5zdWJzY3JpYmUoeyBjaGFubmVsczogW3RoaXMubG9naW5Vc2VyY2hhbm5lbE5hbWVdIH0pO1xyXG4gICAgdmFyIGxvZ2luQ29tcGFueUlkID0gdGhpcy5jb29raWVTZXJ2aWNlLmdldChcIkNvbXBhbnlJZFwiKTtcclxuICAgIGlmICh0aGlzLmNoYW5uZWxMaXN0ICE9IHVuZGVmaW5lZCB8fCB0aGlzLmNoYW5uZWxMaXN0ICE9IG51bGwpIHtcclxuICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuY2hhbm5lbExpc3QubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgdGhpcy5wdWJudWIudW5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgY2hhbm5lbHM6IFsobG9naW5Db21wYW55SWQgKyAnLScgKyB0aGlzLmNoYW5uZWxMaXN0W2luZGV4XS5pZCldXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMucHVibnViLnVuc3Vic2NyaWJlKHtcclxuICAgICAgY2hhbm5lbHM6IFsoJ0NoYW5uZWxVcGRhdGVzLScgKyBsb2dpbkNvbXBhbnlJZCldXHJcbiAgICB9KTtcclxuICAgIHRoaXMucHVibnViLnVuc3Vic2NyaWJlKHtcclxuICAgICAgY2hhbm5lbHM6IFsoJ1VzZXJVcGRhdGVzLScgKyBsb2dpbkNvbXBhbnlJZCldXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHN1YlNjcmliaW5nVG9QcmVzZW5jZUNoYW5uZWwoKSB7XHJcbiAgICB2YXIgbG9naW5Db21wYW55SWQgPSB0aGlzLmNvb2tpZVNlcnZpY2UuZ2V0KFwiQ29tcGFueUlkXCIpO1xyXG4gICAgdmFyIHByZXNlbmNlQ2hhbm5lbCA9IFwiTWVzc2VuZ2VyUHJlc2VuY2UtXCIgKyBsb2dpbkNvbXBhbnlJZDtcclxuICAgIGF3YWl0IHRoaXMucHVibnViLnN1YnNjcmliZSh7XHJcbiAgICAgIGNoYW5uZWxzOiBbcHJlc2VuY2VDaGFubmVsXSxcclxuICAgICAgd2l0aFByZXNlbmNlOiB0cnVlXHJcbiAgICB9KTtcclxuICAgIHRoaXMucHVibnViLmhlcmVOb3coe1xyXG4gICAgICBjaGFubmVsczogW3ByZXNlbmNlQ2hhbm5lbF0sXHJcbiAgICAgIGluY2x1ZGVVVUlEczogdHJ1ZSxcclxuICAgICAgaW5jbHVkZVN0YXRlOiB0cnVlXHJcbiAgICB9LFxyXG4gICAgICAoc3RhdHVzLCByZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IEluaXRhbFN0YXRlT2ZVc2Vyc1RyaWdnZXJlZChyZXNwb25zZSkpXHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gIH1cclxuICBwdWJsaXNoaW5nTWVzc2FnZSgpIHtcclxuICAgIGlmICh0aGlzLnB1Ymxpc2hpbmdNZXNzYWdlT2ZVc2VyLnB1Ym51YkNoYW5uZWxOYW1lT2ZNZXNzYWdlLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5wdWJsaXNoaW5nTWVzc2FnZU9mVXNlci5wdWJudWJDaGFubmVsTmFtZU9mTWVzc2FnZS5mb3JFYWNoKGNoYW5uZWxOYW1lID0+IHtcclxuICAgICAgICB0aGlzLnB1Ym51Yi5wdWJsaXNoKHtcclxuICAgICAgICAgIGNoYW5uZWw6IFtjaGFubmVsTmFtZV0sXHJcbiAgICAgICAgICBtZXNzYWdlOiBKU09OLnN0cmluZ2lmeSh0aGlzLnB1Ymxpc2hpbmdNZXNzYWdlT2ZVc2VyKVxyXG4gICAgICAgIH0sIGZ1bmN0aW9uIChzdGF0dXMsIHJlc29wbnNlKSB7XHJcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZyhzdGF0dXMpXHJcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZyhyZXNvcG5zZSlcclxuICAgICAgICB9KVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9wZW5Bbm5vdW5jZW1lbnREaWFsb2coYW5ub3VuY2VkKSB7XHJcbiAgICB0aGlzLmRpYWxvZy5jbG9zZUFsbCgpO1xyXG4gICAgbGV0IGRpYWxvZ0lkID0gXCJhbm5vdWNlbWVudC1kaWFsb2dcIjtcclxuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5vcGVuQW5ub3VjZW1lbnREaWFsb2dDb21wb25lbnQsIHtcclxuICAgICAgbWluV2lkdGg6IFwiNjB2d1wiLFxyXG4gICAgICBtYXhXaWR0aDogXCI2MHZ3XCIsXHJcbiAgICAgIG1pbkhlaWdodDogXCI1MHZoXCIsXHJcbiAgICAgIG1heEhlaWdodDogXCI4MHZoXCIsXHJcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgaWQ6IGRpYWxvZ0lkLFxyXG4gICAgICBkYXRhOiB7XHJcbiAgICAgICAgZGlhbG9nSWQ6IGRpYWxvZ0lkLFxyXG4gICAgICAgIGFubm91bmNlbWVudElkOiBhbm5vdW5jZWQuQW5ub3VuY2VtZW50SWQsXHJcbiAgICAgICAgYW5ub3VuY2VtZW50OiBhbm5vdW5jZWQuQW5ub3VuY2VtZW50LFxyXG4gICAgICAgIGFubm91bmNlZEJ5OiBhbm5vdW5jZWQuQW5ub3VuY2VkQnksXHJcbiAgICAgICAgYW5ub3VuY2VkQnlJZDogYW5ub3VuY2VkLkFubm91bmNlZEJ5SWQsXHJcbiAgICAgICAgYW5ub3VuY2VkQnlVc2VySW1hZ2U6IGFubm91bmNlZC5Bbm5vdW5jZWRCeVVzZXJJbWFnZSxcclxuICAgICAgICBhbm5vdW5jZWRPbjogYW5ub3VuY2VkLkFubm91bmNlZE9uXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLm5vdGlmaWNhdGlvbnMuZmluZEluZGV4KChwKSA9PiBwLm5vdGlmaWNhdGlvbklkLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PSB0aGlzLmFubm91bmNlTm90aWZpY2F0aW9uSWQudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpKTtcclxuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICB0aGlzLnVwc2VydFJlYWROb3RpZmljYXRpb24odGhpcy5ub3RpZmljYXRpb25zW2luZGV4XSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuICAvLyBub3RpZmljYXRpb25PZkNoYXQobWVzc2FnZURldGFpbHNPYmplY3QpIHtcclxuICAvLyAgIGlmKHRoaXMucHJldmlvdXNNZXNzYWdlICE9IG1lc3NhZ2VEZXRhaWxzT2JqZWN0KXtcclxuICAvLyAgIHRoaXMubWVzc2FnZXNVbnJlYWRDb3VudCArPSAxO1xyXG4gIC8vICAgdmFyIGltYWdlZm9yTm90aWZpY2F0aW9uOiBhbnk7XHJcbiAgLy8gICBpZiAobWVzc2FnZURldGFpbHNPYmplY3Quc2VuZGVyUHJvZmlsZUltYWdlID09IG51bGwpIHtcclxuICAvLyAgICAgaW1hZ2Vmb3JOb3RpZmljYXRpb24gPSBcImh0dHBzOi8vcG5naW1hZ2UubmV0L3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE4LzA1L2F2YXRhci1wbmctaW1hZ2VzLTEucG5nXCI7XHJcbiAgLy8gICB9XHJcbiAgLy8gICBlbHNlIHtcclxuICAvLyAgICAgaW1hZ2Vmb3JOb3RpZmljYXRpb24gPSBtZXNzYWdlRGV0YWlsc09iamVjdC5zZW5kZXJQcm9maWxlSW1hZ2U7XHJcbiAgLy8gICB9XHJcbiAgLy8gICBsZXQgb3B0aW9ucyA9IHtcclxuICAvLyAgICAgYm9keTogbWVzc2FnZURldGFpbHNPYmplY3QuYm9keSxcclxuICAvLyAgICAgaWNvbjogaW1hZ2Vmb3JOb3RpZmljYXRpb24sXHJcbiAgLy8gICAgIGRhdGE6IHtcclxuICAvLyAgICAgICBzZW5kZXJVc2VySWQ6IG1lc3NhZ2VEZXRhaWxzT2JqZWN0LnNlbmRlclVzZXJJZCxcclxuICAvLyAgICAgICBjaGFubmVsSWQ6IG1lc3NhZ2VEZXRhaWxzT2JqZWN0LmNoYW5uZWxJZFxyXG4gIC8vICAgICB9XHJcbiAgLy8gICB9XHJcbiAgLy8gICB0aGlzLnB1c2hOb3RpZmljYXRpb25zLmNyZWF0ZShtZXNzYWdlRGV0YWlsc09iamVjdC50aXRsZSwgb3B0aW9ucykuc3Vic2NyaWJlKFxyXG4gIC8vICAgICByZXMgPT4ge1xyXG4gIC8vICAgICAgIGlmIChyZXMuZXZlbnQudHlwZSA9PT0gJ2NsaWNrJykge1xyXG4gIC8vICAgICAgICAgd2luZG93LmZvY3VzKCk7XHJcbiAgLy8gICAgICAgICBpZiAodGhpcy5yb3V0ZXIudXJsICE9ICcvY2hhdCcpIHtcclxuICAvLyAgICAgICAgICAgaWYgKHJlcy5ub3RpZmljYXRpb24uZGF0YS5jaGFubmVsSWQgIT0gbnVsbCAmJiByZXMubm90aWZpY2F0aW9uLmRhdGEuY2hhbm5lbElkICE9IHVuZGVmaW5lZCkge1xyXG4gIC8vICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKExvY2FsU3RvcmFnZVByb3BlcnRpZXMuQ2hhdElkLCByZXMubm90aWZpY2F0aW9uLmRhdGEuY2hhbm5lbElkKTtcclxuICAvLyAgICAgICAgICAgfSBlbHNlIHtcclxuICAvLyAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkNoYXRJZCwgcmVzLm5vdGlmaWNhdGlvbi5kYXRhLnNlbmRlclVzZXJJZCk7XHJcbiAgLy8gICAgICAgICAgIH1cclxuICAvLyAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW1wiL2NoYXRcIl0pO1xyXG4gIC8vICAgICAgICAgfVxyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgfSxcclxuICAvLyAgICAgZXJyID0+IGNvbnNvbGUubG9nKGVycilcclxuICAvLyAgICk7XHJcbiAgLy8gICB0aGlzLnByZXZpb3VzTWVzc2FnZSA9IG1lc3NhZ2VEZXRhaWxzT2JqZWN0XHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG4gIHVwc2VydFJlYWROb3RpZmljYXRpb24oc2VsZWN0ZWROb3RpZmljYXRpb24pIHtcclxuICAgIGNvbnN0IG5vdGlmaWNhdGlvbnMgPSBbXTtcclxuICAgIG5vdGlmaWNhdGlvbnMucHVzaChzZWxlY3RlZE5vdGlmaWNhdGlvbik7XHJcbiAgICBjb25zdCBub3RpaWZjYXRpb25tb2RlbCA9IEpTT04ucGFyc2Uoc2VsZWN0ZWROb3RpZmljYXRpb24ubm90aWZpY2F0aW9uSnNvbik7XHJcbiAgICBpZiAoc2VsZWN0ZWROb3RpZmljYXRpb24ubm90aWZpY2F0aW9uVHlwZUlkLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PVxyXG4gICAgICBOb3RpZmljYXRpb25UeXBlSWRzLk5ld1Byb2plY3RDcmVhdGVkTm90aWZpY2F0aW9uSWQudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpIHx8XHJcbiAgICAgIHNlbGVjdGVkTm90aWZpY2F0aW9uLm5vdGlmaWNhdGlvblR5cGVJZC50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT1cclxuICAgICAgTm90aWZpY2F0aW9uVHlwZUlkcy5Qcm9qZWN0TWVtYmVyUm9sZUFkZGVkTm90aWZpY2F0aW9uSWQudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcInByb2plY3RzL3Byb2plY3RzdGF0dXMvXCIgKyBub3RpaWZjYXRpb25tb2RlbC5Qcm9qZWN0R3VpZCArIFwiL2FjdGl2ZS1nb2Fsc1wiXSk7XHJcbiAgICB9IGVsc2UgaWYgKHNlbGVjdGVkTm90aWZpY2F0aW9uLm5vdGlmaWNhdGlvblR5cGVJZC50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT1cclxuICAgICAgTm90aWZpY2F0aW9uVHlwZUlkcy5Hb2FsQXBwcm92ZWRGcm9tUmVwbGFuLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCJwcm9qZWN0cy9nb2FsL1wiICsgbm90aWlmY2F0aW9ubW9kZWwuR29hbEd1aWRdKTtcclxuICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWROb3RpZmljYXRpb24ubm90aWZpY2F0aW9uVHlwZUlkLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PVxyXG4gICAgICBOb3RpZmljYXRpb25UeXBlSWRzLk5vdGlmaWNhdGlvbl9Xb3JrSXRlbUFzc2lnbmVkVG9Vc2VyLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCJwcm9qZWN0cy93b3JraXRlbS9cIiArIG5vdGlpZmNhdGlvbm1vZGVsLlVzZXJTdG9yeUd1aWRdKTtcclxuICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWROb3RpZmljYXRpb24ubm90aWZpY2F0aW9uVHlwZUlkLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PVxyXG4gICAgICBOb3RpZmljYXRpb25UeXBlSWRzLlVTZXJTdG9yeVVwZGF0ZU5vdGlmaWNhdGlvbklkLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCJwcm9qZWN0cy93b3JraXRlbS9cIiArIG5vdGlpZmNhdGlvbm1vZGVsLlVzZXJTdG9yeUlkXSk7XHJcbiAgICB9IGVsc2UgaWYgKHNlbGVjdGVkTm90aWZpY2F0aW9uLm5vdGlmaWNhdGlvblR5cGVJZC50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT1cclxuICAgICAgTm90aWZpY2F0aW9uVHlwZUlkcy5TcHJpbnRTdGFydGVkLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCJwcm9qZWN0cy9zcHJpbnQvXCIgKyBub3RpaWZjYXRpb25tb2RlbC5TcHJpbnRHdWlkXSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChzZWxlY3RlZE5vdGlmaWNhdGlvbi5ub3RpZmljYXRpb25UeXBlSWQudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09XHJcbiAgICAgIE5vdGlmaWNhdGlvblR5cGVJZHMuUHVzaE5vdGlmaWNhdGlvbkZvclVzZXJTdG9yeUNvbW1lbnQudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcInByb2plY3RzL3dvcmtpdGVtL1wiICsgbm90aWlmY2F0aW9ubW9kZWwuVXNlclN0b3J5R3VpZF0pO1xyXG4gICAgfSBlbHNlIGlmIChzZWxlY3RlZE5vdGlmaWNhdGlvbi5ub3RpZmljYXRpb25UeXBlSWQudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09XHJcbiAgICAgIE5vdGlmaWNhdGlvblR5cGVJZHMuR29hbFJlcXVlc3RkRm9yUkVwbGFuLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCJwcm9qZWN0cy9nb2FsL1wiICsgbm90aWlmY2F0aW9ubW9kZWwuR29hbEd1aWRdKTtcclxuICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWROb3RpZmljYXRpb24ubm90aWZpY2F0aW9uVHlwZUlkLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PVxyXG4gICAgICBOb3RpZmljYXRpb25UeXBlSWRzLlNwcmludFJlcXVlc3RkRm9yUkVwbGFuLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCJwcm9qZWN0cy9zcHJpbnQvXCIgKyBub3RpaWZjYXRpb25tb2RlbC5TcHJpbnRHdWlkXSk7XHJcbiAgICB9IGVsc2UgaWYgKHNlbGVjdGVkTm90aWZpY2F0aW9uLm5vdGlmaWNhdGlvblR5cGVJZC50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT1cclxuICAgICAgTm90aWZpY2F0aW9uVHlwZUlkcy5Ob3RpZmljYXRpb25fQWRob2NXb3JrSXRlbUFzc2lnbmVkVG9Vc2VyLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCJkYXNoYm9hcmQvYWRob2Mtd29ya2l0ZW0vXCIgKyBub3RpaWZjYXRpb25tb2RlbC5Vc2VyU3RvcnlHdWlkXSk7XHJcbiAgICB9IGVsc2UgaWYgKHNlbGVjdGVkTm90aWZpY2F0aW9uLm5vdGlmaWNhdGlvblR5cGVJZC50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT1cclxuICAgICAgTm90aWZpY2F0aW9uVHlwZUlkcy5BZGhvY1VTZXJTdG9yeVVwZGF0ZU5vdGlmaWNhdGlvbklkLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCJkYXNoYm9hcmQvYWRob2Mtd29ya2l0ZW0vXCIgKyBub3RpaWZjYXRpb25tb2RlbC5Vc2VyU3RvcnlJZF0pO1xyXG4gICAgfSBlbHNlIGlmIChzZWxlY3RlZE5vdGlmaWNhdGlvbi5ub3RpZmljYXRpb25UeXBlSWQudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09XHJcbiAgICAgIE5vdGlmaWNhdGlvblR5cGVJZHMuUHVyY2hhc2VTaGlwbWVudE5vdGlmaWNhdGlvbklkLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCJjbGllbnQvcHVyY2hhc2UtZXhlY3V0aW9uL1wiICsgbm90aWlmY2F0aW9ubW9kZWwuUHVyY2hhc2VHdWlkXSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBVcHNlcnRVbnJlYWROb3RpZmljYXRpb25zVHJpZ2dlcmVkKG5vdGlmaWNhdGlvbnMpKTtcclxuXHJcblxyXG4gIH1cclxuICBsb2FkTm90aWZpY2F0aW9ucygpIHtcclxuICAgIGNvbnN0IEN1cnJlbnRVc2VySWQgPSB0aGlzLmNvb2tpZVNlcnZpY2UuZ2V0KExvY2FsU3RvcmFnZVByb3BlcnRpZXMuQ3VycmVudFVzZXJJZCk7XHJcbiAgICAvLyBTdWJzY3JpYmUgdG8gVGFzayBBc3NpZ25tZW50IE5vdGlmaWNhaXRvbnMgaGVyZS5cclxuICAgIGNvbnN0IHRhc2tBc3NpZ25tZW50Q2hhbm5lbFRvU3Vic2NyaWJlSW50byA9IENoYW5uZWxOYW1lcy5DaGFubmVsX1Rhc2tBc3NpZ25tZW50cyArIEN1cnJlbnRVc2VySWQ7XHJcbiAgICBjb25zdCB0YXN0YXR1c1JlcG9ydFN1Ym1pc3Npb25DaGFubmVsVG9TdWJzY3JpYmVJbnRvID0gQ2hhbm5lbE5hbWVzLkNoYW5uZWxfU3RhdHVzUmVwb3J0U3VibWlzc2lvbiArIEN1cnJlbnRVc2VySWQ7XHJcbiAgICBjb25zdCB0YXN0YXR1c0NvbmZpZ0Fzc2lnbkNoYW5uZWxUb1N1YnNjcmliZUludG8gPSBDaGFubmVsTmFtZXMuQ2hhbm5lbF9TdGF0dXNDb25maWdBc3NpZ24gKyBDdXJyZW50VXNlcklkO1xyXG4gICAgY29uc3QgbXVsdGlDaGFydHNTY2hlZHVsaW5nQ2hhbm5lbFRvU3Vic2NyaWJlSW50byA9IENoYW5uZWxOYW1lcy5DaGFubmVsX011bHRpQ2hhcnRzU2NoZWR1bGluZyArIEN1cnJlbnRVc2VySWQ7XHJcbiAgICBjb25zdCBhc3NldHNBc3NpZ25lZENoYW5uZWxUb1N1YnNjcmliZUludG8gPSBDaGFubmVsTmFtZXMuQ2hhbm5lbF9Bc3NldEFzc2lnbm1lbnQgKyBDdXJyZW50VXNlcklkO1xyXG4gICAgY29uc3QgcHJvamVjdENyZWF0ZWRDaGFubmVsVG9TdWJzY3JpYmVJbnRvID0gQ2hhbm5lbE5hbWVzLkNoYW5uZWxfTmV3UHJvamVjdCArIEN1cnJlbnRVc2VySWQ7XHJcbiAgICBjb25zdCBwcm9qZWN0QWNjZXNzVG9NZW1iZXJDaGFubmVsVG9TdWJzY3JpYmVJbnRvID0gQ2hhbm5lbE5hbWVzLkNoYW5uZWxfUHJvamVjdE1lbWJlclJvbGUgKyBDdXJyZW50VXNlcklkO1xyXG4gICAgY29uc3QgZ29hbEFwcHJvdmVkQ2hhbm5lbFRvU3Vic2NyaWJlSW50byA9IENoYW5uZWxOYW1lcy5DaGFubmVsX0dvYWxBcHByb3ZlZEZyb21SZXBsYW4gKyBDdXJyZW50VXNlcklkO1xyXG4gICAgY29uc3QgdXNlclN0b3J5VXBkYXRlQ2hhbm5lbFRvU3Vic2NyaWJlSW50byA9IENoYW5uZWxOYW1lcy5DaGFubmVsX1VzZXJTdG9yeVVwZGF0ZU5vdGlmaWNhdGlvbiArIEN1cnJlbnRVc2VySWQ7XHJcbiAgICBjb25zdCBBbm5vdW5jZW1lbnRDaGFubmVsVG9TdWJzY3JpYmVJbnRvID0gQ2hhbm5lbE5hbWVzLkNoYW5uZWxfQW5ub3VuY2VtZW50Tm90aWZpY2F0aW9uICsgQ3VycmVudFVzZXJJZDtcclxuICAgIGNvbnN0IFJlbWluZGVyQ2hhbm5lbFRvU3Vic2NyaWJlSW50byA9IENoYW5uZWxOYW1lcy5DaGFubmVsX1JlbWluZGVyTm90aWZpY2F0aW9uICsgQ3VycmVudFVzZXJJZDtcclxuICAgIGNvbnN0IFBlcmZvcm1hbmNlQ2hhbm5lbFRvU3Vic2NyaWJlSW50byA9IENoYW5uZWxOYW1lcy5DaGFubmVsX1Blcm9mb3JtYW5jZU5vdGlmaWNhdGlvbiArIEN1cnJlbnRVc2VySWQ7XHJcbiAgICBjb25zdCB1c2VyU3RvcnlDb21tZW50Q2hhbm5lbFRvU3Vic2NyaWJlSW50byA9IENoYW5uZWxOYW1lcy5DaGFubmVsX1VzZXJTdG9yeUNvbW1lbnQgKyBDdXJyZW50VXNlcklkO1xyXG4gICAgY29uc3Qgc3ByaW50U3RhcnRlZENoYW5uZWxUb1N1YnNjcmliZUludG8gPSBDaGFubmVsTmFtZXMuQ2hhbm5lbF9TcHJpbnRTdGFydGVkICsgQ3VycmVudFVzZXJJZDtcclxuICAgIGNvbnN0IHNwcmludFJlcGxhbkNoYW5uZWxUb1N1YnNjcmliZUludG8gPSBDaGFubmVsTmFtZXMuQ2hhbm5lbF9TcHJpbnRSZXF1ZXN0ZWRUb1JlcGxhbiArIEN1cnJlbnRVc2VySWQ7XHJcbiAgICBjb25zdCBwcm9qZWN0RmVhdHVyZUNoYW5uZWxUb1N1YnNjcmliZUludG8gPSBDaGFubmVsTmFtZXMuQ2hhbm5lbF9Qcm9qZWN0RmVhdHVyZSArIEN1cnJlbnRVc2VySWQ7XHJcbiAgICBjb25zdCB1c2VyU3RvcnlBcmNoaXZlQ2hhbm5lbFRvU3Vic2NyaWJlSW50byA9IENoYW5uZWxOYW1lcy5DaGFubmVsX1VzZXJTdG9yeUFyY2hpdmUgKyBDdXJyZW50VXNlcklkO1xyXG4gICAgY29uc3QgdXNlclN0b3J5UGFya0NoYW5uZWxUb1N1YnNjcmliZUludG8gPSBDaGFubmVsTmFtZXMuQ2hhbm5lbF9Vc2VyU3RvcnlQYXJrICsgQ3VycmVudFVzZXJJZDtcclxuICAgIGNvbnN0IGdlbmVyaWNBY3Rpdml0eU5vdGlmaWNhdGlvbkNoYW5uZWxUb1N1YnNjcmliZUludG8gPSBDaGFubmVsTmFtZXMuQ2hhbm5lbF9HZW5lcmljQWN0aXZpdHlOb3RpZmljYXRpb24gKyBDdXJyZW50VXNlcklkO1xyXG4gICAgY29uc3QgcHVyY2hhc2VFeGVjdXRpb25Bc3NpZ25lZENoYW5uZWxUb1N1YnNjcmliZUludG8gPSBDaGFubmVsTmFtZXMuQ2hhbm5lbF9HZW5lcmljQWN0aXZpdHlOb3RpZmljYXRpb24gKyBDdXJyZW50VXNlcklkO1xyXG5cclxuICAgIGNvbnNvbGUubG9nKFwic3Vic2NyaWJpbmcgdG8gXCIgKyB0YXNrQXNzaWdubWVudENoYW5uZWxUb1N1YnNjcmliZUludG8pO1xyXG4gICAgY29uc29sZS5sb2coXCJzdWJzY3JpYmluZyB0byBcIiArIHRhc3RhdHVzUmVwb3J0U3VibWlzc2lvbkNoYW5uZWxUb1N1YnNjcmliZUludG8pO1xyXG4gICAgY29uc29sZS5sb2coXCJzdWJzY3JpYmluZyB0byBcIiArIHRhc3RhdHVzQ29uZmlnQXNzaWduQ2hhbm5lbFRvU3Vic2NyaWJlSW50byk7XHJcbiAgICBjb25zb2xlLmxvZyhcInN1YnNjcmliaW5nIHRvXCIgKyBhc3NldHNBc3NpZ25lZENoYW5uZWxUb1N1YnNjcmliZUludG8pO1xyXG4gICAgY29uc29sZS5sb2coXCJzdWJzY3JpYmluZyB0b1wiICsgcHJvamVjdENyZWF0ZWRDaGFubmVsVG9TdWJzY3JpYmVJbnRvKTtcclxuICAgIGNvbnNvbGUubG9nKFwic3Vic2NyaWJpbmcgdG9cIiArIHByb2plY3RBY2Nlc3NUb01lbWJlckNoYW5uZWxUb1N1YnNjcmliZUludG8pO1xyXG4gICAgY29uc29sZS5sb2coXCJzdWJzY3JpYmluZyB0b1wiICsgZ29hbEFwcHJvdmVkQ2hhbm5lbFRvU3Vic2NyaWJlSW50byk7XHJcbiAgICBjb25zb2xlLmxvZyhcInN1YnNjcmliaW5nIHRvXCIgKyB1c2VyU3RvcnlVcGRhdGVDaGFubmVsVG9TdWJzY3JpYmVJbnRvKTtcclxuICAgIGNvbnNvbGUubG9nKFwic3Vic2NyaWJpbmcgdG9cIiArIEFubm91bmNlbWVudENoYW5uZWxUb1N1YnNjcmliZUludG8pO1xyXG4gICAgY29uc29sZS5sb2coXCJzdWJzY3JpYmluZyB0b1wiICsgdXNlclN0b3J5Q29tbWVudENoYW5uZWxUb1N1YnNjcmliZUludG8pO1xyXG4gICAgY29uc29sZS5sb2coXCJzdWJzY3JpYmluZyB0b1wiICsgc3ByaW50U3RhcnRlZENoYW5uZWxUb1N1YnNjcmliZUludG8pO1xyXG4gICAgY29uc29sZS5sb2coXCJzdWJzY3JpYmluZyB0b1wiICsgc3ByaW50UmVwbGFuQ2hhbm5lbFRvU3Vic2NyaWJlSW50byk7XHJcbiAgICBjb25zb2xlLmxvZyhcInN1YnNjcmliaW5nIHRvXCIgKyBSZW1pbmRlckNoYW5uZWxUb1N1YnNjcmliZUludG8pO1xyXG4gICAgY29uc29sZS5sb2coXCJzdWJzY3JpYmluZyB0b1wiICsgUGVyZm9ybWFuY2VDaGFubmVsVG9TdWJzY3JpYmVJbnRvKTtcclxuICAgIGNvbnNvbGUubG9nKFwic3Vic2NyaWJpbmcgdG9cIiArIHByb2plY3RGZWF0dXJlQ2hhbm5lbFRvU3Vic2NyaWJlSW50byk7XHJcbiAgICBjb25zb2xlLmxvZyhcInN1YnNjcmliaW5nIHRvXCIgKyB1c2VyU3RvcnlBcmNoaXZlQ2hhbm5lbFRvU3Vic2NyaWJlSW50byk7XHJcbiAgICBjb25zb2xlLmxvZyhcInN1YnNjcmliaW5nIHRvXCIgKyB1c2VyU3RvcnlQYXJrQ2hhbm5lbFRvU3Vic2NyaWJlSW50byk7XHJcbiAgICBjb25zb2xlLmxvZyhcInN1YnNjcmliaW5nIHRvXCIgKyBnZW5lcmljQWN0aXZpdHlOb3RpZmljYXRpb25DaGFubmVsVG9TdWJzY3JpYmVJbnRvKTtcclxuICAgIGNvbnNvbGUubG9nKFwic3Vic2NyaWJpbmcgdG9cIiArIHB1cmNoYXNlRXhlY3V0aW9uQXNzaWduZWRDaGFubmVsVG9TdWJzY3JpYmVJbnRvKTtcclxuXHJcblxyXG4gICAgdGhpcy5wdWJudWIuc3Vic2NyaWJlKHtcclxuICAgICAgY2hhbm5lbHM6IFt0YXNrQXNzaWdubWVudENoYW5uZWxUb1N1YnNjcmliZUludG8sIHRhc3RhdHVzUmVwb3J0U3VibWlzc2lvbkNoYW5uZWxUb1N1YnNjcmliZUludG8sXHJcbiAgICAgICAgdGFzdGF0dXNDb25maWdBc3NpZ25DaGFubmVsVG9TdWJzY3JpYmVJbnRvLCBtdWx0aUNoYXJ0c1NjaGVkdWxpbmdDaGFubmVsVG9TdWJzY3JpYmVJbnRvLFxyXG4gICAgICAgIGFzc2V0c0Fzc2lnbmVkQ2hhbm5lbFRvU3Vic2NyaWJlSW50bywgcHJvamVjdENyZWF0ZWRDaGFubmVsVG9TdWJzY3JpYmVJbnRvLCAsXHJcbiAgICAgICAgcHJvamVjdEFjY2Vzc1RvTWVtYmVyQ2hhbm5lbFRvU3Vic2NyaWJlSW50bywgZ29hbEFwcHJvdmVkQ2hhbm5lbFRvU3Vic2NyaWJlSW50byxcclxuICAgICAgICB1c2VyU3RvcnlVcGRhdGVDaGFubmVsVG9TdWJzY3JpYmVJbnRvLCBBbm5vdW5jZW1lbnRDaGFubmVsVG9TdWJzY3JpYmVJbnRvLCBSZW1pbmRlckNoYW5uZWxUb1N1YnNjcmliZUludG8sXHJcbiAgICAgICAgdXNlclN0b3J5Q29tbWVudENoYW5uZWxUb1N1YnNjcmliZUludG8sIHNwcmludFN0YXJ0ZWRDaGFubmVsVG9TdWJzY3JpYmVJbnRvLFxyXG4gICAgICAgIHNwcmludFJlcGxhbkNoYW5uZWxUb1N1YnNjcmliZUludG8sXHJcbiAgICAgICAgUGVyZm9ybWFuY2VDaGFubmVsVG9TdWJzY3JpYmVJbnRvLFxyXG4gICAgICAgIHByb2plY3RGZWF0dXJlQ2hhbm5lbFRvU3Vic2NyaWJlSW50byxcclxuICAgICAgICB1c2VyU3RvcnlBcmNoaXZlQ2hhbm5lbFRvU3Vic2NyaWJlSW50byxcclxuICAgICAgICB1c2VyU3RvcnlQYXJrQ2hhbm5lbFRvU3Vic2NyaWJlSW50bywgZ2VuZXJpY0FjdGl2aXR5Tm90aWZpY2F0aW9uQ2hhbm5lbFRvU3Vic2NyaWJlSW50bywgcHVyY2hhc2VFeGVjdXRpb25Bc3NpZ25lZENoYW5uZWxUb1N1YnNjcmliZUludG9dXHJcbiAgICB9KTtcclxuICAgIHZhciByb2xlVXBkYXRlc0NoYW5uZWxUb1N1YnNjcmliZUludG8gPSBDaGFubmVsTmFtZXMuQ2hhbm5lbF9Sb2xlVXBkYXRlcyArIFwiMTlCNkY5RkMtNzM3MC00QjlDLUEwNUMtM0I4RDgxOUVFRUFGXCI7XHJcbiAgICBjb25zb2xlLmxvZyhcInN1YnNjcmliaW5nIHRvIFwiICsgcm9sZVVwZGF0ZXNDaGFubmVsVG9TdWJzY3JpYmVJbnRvKTtcclxuICAgIHRoaXMucHVibnViLnN1YnNjcmliZSh7XHJcbiAgICAgIGNoYW5uZWxzOiBbcm9sZVVwZGF0ZXNDaGFubmVsVG9TdWJzY3JpYmVJbnRvXVxyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuXHJcbiAgcmVwbGFjZUFsbChzdHIsIGZpbmQsIHJlcGxhY2UpIHtcclxuICAgIHZhciBlc2NhcGVkRmluZCA9IGZpbmQucmVwbGFjZSgvKFsuKis/Xj0hOiR7fSgpfFxcW1xcXVxcL1xcXFxdKS9nLCBcIlxcXFwkMVwiKTtcclxuICAgIHJldHVybiBzdHIucmVwbGFjZShuZXcgUmVnRXhwKGVzY2FwZWRGaW5kLCAnZycpLCByZXBsYWNlKTtcclxuICB9XHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnNpZ25hbHIuZ2V0Tm90aWZpY2F0aW9uc0Zyb21BcGkoKS5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuZ2V0U29mdExhYmVscygpO1xyXG4gICAgaWYgKHRoaXMuY29va2llU2VydmljZS5jaGVjayhMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkRpc3BsYXlXZWxDb21lTm90ZSkgJiYgdGhpcy5jb29raWVTZXJ2aWNlLmdldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkRpc3BsYXlXZWxDb21lTm90ZSkgPT0gJ3RydWUnKSB7XHJcbiAgICAgIGlmICgobG9jYWxTdG9yYWdlLmdldEl0ZW0oTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Vc2VyTW9kZWwpICE9IG51bGwgJiYgbG9jYWxTdG9yYWdlLmdldEl0ZW0oTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Vc2VyTW9kZWwpICE9IHVuZGVmaW5lZClcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy51c2VyRnVsbE5hbWUgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKExvY2FsU3RvcmFnZVByb3BlcnRpZXMuVXNlck1vZGVsKSkuZnVsbE5hbWU7XHJcbiAgICAgIH1cclxuICAgICAgdmFyIGNvdW50ID0gdGhpcy5jb29raWVTZXJ2aWNlLmNoZWNrKExvY2FsU3RvcmFnZVByb3BlcnRpZXMuVXNlckxvZ2dlZEluQ291bnQpO1xyXG4gICAgICBpZiAoY291bnQgJiYgdGhpcy5jb29raWVTZXJ2aWNlLmdldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLlVzZXJMb2dnZWRJbkNvdW50KSAhPSAnbnVsbCdcclxuICAgICAgICAmJiB0aGlzLmNvb2tpZVNlcnZpY2UuZ2V0KExvY2FsU3RvcmFnZVByb3BlcnRpZXMuVXNlckxvZ2dlZEluQ291bnQpICE9ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgdGhpcy5sb2dnZWRJbkNvdW50ID0gdGhpcy5jb29raWVTZXJ2aWNlLmdldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLlVzZXJMb2dnZWRJbkNvdW50KTtcclxuICAgICAgICBpZiAodGhpcy5sb2dnZWRJbkNvdW50ID09ICcxJyB8fCB0aGlzLmxvZ2dlZEluQ291bnQgPT0gJzInKSB7XHJcbiAgICAgICAgICB0aGlzLmRpc3BsYXlXZWxjb21lTm90ZSA9IHRydWU7XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5kaXNwbGF5V2VsY29tZU5vdGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgbGV0IGVudmlyb25tZW50ID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkVudmlyb25tZW50KSk7XHJcbiAgICAgICAgICAgIHRoaXMuY29va2llU2VydmljZS5zZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5EaXNwbGF5V2VsQ29tZU5vdGUsICdmYWxzZScsIG51bGwsIGVudmlyb25tZW50LmNvb2tpZVBhdGgsIHRoaXMud2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLCBmYWxzZSwgXCJTdHJpY3RcIik7XHJcbiAgICAgICAgICB9LCA4MDAwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGxldCBjdXJyZW50Q3VsdHVyZSA9IHRoaXMuY29va2llU2VydmljZS5nZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5DdXJyZW50Q3VsdHVyZSk7XHJcbiAgICBjb25zdCBjb21wYW55bGFuID0gSlNPTi5wYXJzZSh0aGlzLmNvb2tpZVNlcnZpY2UuZ2V0KExvY2FsU3RvcmFnZVByb3BlcnRpZXMuQ29tcGFueURldGFpbHMpKTtcclxuICAgIGxldCBjdXJyZW50Q3VsdHVyZWxhbiA9IGNvbXBhbnlsYW4ubGFuQ29kZTtcclxuXHJcbiAgICBpZiAoY3VycmVudEN1bHR1cmUgPT0gJycgfHwgY3VycmVudEN1bHR1cmUgPT0gbnVsbCB8fCBjdXJyZW50Q3VsdHVyZSA9PSB1bmRlZmluZWQgfHwgY3VycmVudEN1bHR1cmUgPT09ICdudWxsJyB8fCBjdXJyZW50Q3VsdHVyZSA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgaWYgKGN1cnJlbnRDdWx0dXJlbGFuID09ICcnIHx8IGN1cnJlbnRDdWx0dXJlbGFuID09IG51bGwgfHwgY3VycmVudEN1bHR1cmVsYW4gPT0gdW5kZWZpbmVkIHx8IGN1cnJlbnRDdWx0dXJlbGFuID09PSAnbnVsbCcgfHwgY3VycmVudEN1bHR1cmVsYW4gPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgY3VycmVudEN1bHR1cmUgPSAnZW4nO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGN1cnJlbnRDdWx0dXJlID0gY3VycmVudEN1bHR1cmVsYW47XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuY3VycmVudExhbmcgPSBjdXJyZW50Q3VsdHVyZTtcclxuICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICB0aGlzLmxvYWRpbmdJblByb2dyZXNzJCA9IHRoaXMuc3RvcmUucGlwZShzZWxlY3Qoc2hhcmVkTW9kdWxlUmVkdWNlcnMuaXNUaW1lU2hlZXRGZXRjaGluZykpO1xyXG4gICAgdGhpcy50aW1lU2hlZXRCdXR0b25EZXRhaWxzJCA9IHRoaXMuc3RvcmUucGlwZShzZWxlY3Qoc2hhcmVkTW9kdWxlUmVkdWNlcnMuZ2V0VGltZVNoZXR0QnV0dG9uRGV0YWlscykpO1xyXG4gICAgdGhpcy50aW1lU2hlZXRCdXR0b25EZXRhaWxzJFxyXG4gICAgICAuc3Vic2NyaWJlKGRhdGEgPT4ge1xyXG4gICAgICAgIHRoaXMudGltZXNoZWV0RGlzYWJsZW9yRW5hYmxlID0gZGF0YTtcclxuICAgICAgfSlcclxuICAgIC8vdGhpcy5nZXRUaW1lU2hlZXRCdXR0b25zKCk7XHJcbiAgICAvL3RoaXMuZ2V0VXNlclN0b3JlKCk7XHJcbiAgICB0aGlzLnNob3dUcmFpbFBlcmlvZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5lZ3JldFRoZW1lcyA9IHRoaXMudGhlbWVTZXJ2aWNlLmVncmV0VGhlbWVzO1xyXG4gICAgdGhpcy5sYXlvdXRDb25mID0gdGhpcy5sYXlvdXQubGF5b3V0Q29uZjtcclxuXHJcbiAgICAvLyB0aGlzLnRoZW1lTW9kZWwkID0gdGhpcy5zdG9yZS5waXBlKHNlbGVjdChzaGFyZWRNb2R1bGVSZWR1Y2Vycy5nZXRUaGVtZU1vZGVsKSk7XHJcbiAgICAvL3RoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IEluaXRpYWxpemVBZnRlckxvZ2luRGF0YSgpKTtcclxuICAgIHZhciB1c2VyID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLlVzZXJNb2RlbCkpO1xyXG4gICAgaWYgKHVzZXIgIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLm1vbml0b3JDb21wYW55cmVsYXRlZERldGFpbHModXNlcik7XHJcbiAgICB9XHJcbiAgICB0aGlzLmxvZ2dlZEluVXNlcklkID0gdGhpcy5jb29raWVTZXJ2aWNlLmdldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkN1cnJlbnRVc2VySWQpO1xyXG4gICAgdGhpcy5nZXRFbXBsb3llZUlkQnlVc2VySWQoKTtcclxuICAgIGxldCBlbnZpcm9ubWVudCA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oTG9jYWxTdG9yYWdlUHJvcGVydGllcy5FbnZpcm9ubWVudCkpO1xyXG4gICAgdGhpcy5hcHBsaWNhdGlvblZlcnNpb24gPSBlbnZpcm9ubWVudC52ZXJzaW9uO1xyXG4gICAgdGhpcy5tZW51VHlwZSA9IFwiTWFpblwiO1xyXG4gICAgdGhpcy5zZWxlY3RlZExhbmdOYW1lID0gdGhpcy5hdmFpbGFibGVMYW5ncy5maW5kKHggPT4geC5jb2RlID09IHRoaXMuY3VycmVudExhbmcpLm5hbWU7XHJcbiAgICB0aGlzLnVzZXJTdG9yZUlkJCA9IHRoaXMuc3RvcmUucGlwZShzZWxlY3Qoc2hhcmVkTW9kdWxlUmVkdWNlcnMuZ2V0VXNlclN0b3JlSWQpKTtcclxuICAgIHRoaXMudXNlclN0b3JlSWQkLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICB0aGlzLnVzZXJTdG9yZUlkID0gcmVzdWx0O1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHNob3dIaWRlRGVsZXRlQnV0dG9uKGRhdGEpIHtcclxuICAgIHRoaXMuc2hvd0RlbGV0ZUljb24gPSBkYXRhLmlzRGVtb0RhdGFDbGVhcmVkID8gZmFsc2UgOiBkYXRhLmlzVG9TaG93RGVsZXRlSWNvbjtcclxuICB9XHJcblxyXG4gIG1vbml0b3JDb21wYW55cmVsYXRlZERldGFpbHModXNlcikge1xyXG4gICAgdGhpcy5hdXRoZW50aWNhdGVkVXNlclJlY29yZCA9IHVzZXI7XHJcbiAgICB0aGlzLnNob3dIaWRlRGVsZXRlQnV0dG9uKHVzZXIpO1xyXG4gICAgdGhpcy5jb21wYW5pZXNMaXN0ID0gdXNlci5jb21wYW5pZXNMaXN0O1xyXG4gICAgdGhpcy5nZXRDb21wYW55RGV0YWlscyh1c2VyLmNvbXBhbnlJZCk7XHJcbiAgICB2YXIgY29tcGFueSA9IHRoaXMuY29tcGFuaWVzTGlzdC5maWx0ZXIoeCA9PiB4LmNvbXBhbnlJZC50b0xvd2VyQ2FzZSgpID09IHRoaXMuY29va2llU2VydmljZS5nZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Db21wYW55SWQpLnRvTG93ZXJDYXNlKCkpXHJcbiAgICB0aGlzLnNlbGVjdGVkQ29tcGFueSA9IGNvbXBhbnkgPyBjb21wYW55WzBdIDogbnVsbDtcclxuICAgIHRoaXMuc2VsZWN0ZWRDb21wYW55TmFtZSA9IGNvbXBhbnkgPyBjb21wYW55WzBdID8gY29tcGFueVswXS5jb21wYW55TmFtZSA6IG51bGwgOiBudWxsO1xyXG4gIH1cclxuXHJcbiAgbmF2aWdhdGVUb0Rhc2hib2FyZHMoKSB7XHJcbiAgICBjb25zdCB1c2VyUmVmZXJlbmNlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Vc2VyUmVmZXJlbmNlSWQpO1xyXG4gICAgdGhpcy5kZWZhdWx0RGFzaGJvYXJkSWQgPSB0aGlzLmNvb2tpZVNlcnZpY2UuY2hlY2soTG9jYWxTdG9yYWdlUHJvcGVydGllcy5EZWZhdWx0RGFzaGJvYXJkKSA/IEpTT04ucGFyc2UodGhpcy5jb29raWVTZXJ2aWNlLmdldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkRlZmF1bHREYXNoYm9hcmQpKSA6IG51bGw7XHJcbiAgICBpZiAodGhpcy5kZWZhdWx0RGFzaGJvYXJkSWQgJiYgdXNlclJlZmVyZW5jZSAhPSBcIm51bGxcIiAmJiB1c2VyUmVmZXJlbmNlICE9IG51bGwpIHtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChcImRhc2hib2FyZC1tYW5hZ2VtZW50L2Rhc2hib2FyZC9cIiArIHRoaXMuZGVmYXVsdERhc2hib2FyZElkICsgXCIvZm9ybS9cIiArIHVzZXJSZWZlcmVuY2UpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmRlZmF1bHREYXNoYm9hcmRJZCkge1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKFwiZGFzaGJvYXJkLW1hbmFnZW1lbnQvZGFzaGJvYXJkL1wiICsgdGhpcy5kZWZhdWx0RGFzaGJvYXJkSWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNPcGVuZWQoZXZlbnQpIHtcclxuICAgIHRoaXMub3BlbmVkLmVtaXQoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgZ2V0U29mdExhYmVscygpIHtcclxuICAgIHRoaXMuc29mdExhYmVscyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ1NvZnRMYWJlbHMnKSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBvblNpZ25vdXQoKSB7XHJcbiAgICB0aGlzLnJlbG9hZCA9IGZhbHNlO1xyXG4gICAgY29uc3QgQ3VycmVudFVzZXJJZCA9IHRoaXMuY29va2llU2VydmljZS5nZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5DdXJyZW50VXNlcklkKTtcclxuICAgIGNvbnN0IHRhc2tBc3NpZ25tZW50Q2hhbm5lbFRvU3Vic2NyaWJlSW50byA9IENoYW5uZWxOYW1lcy5DaGFubmVsX1Rhc2tBc3NpZ25tZW50c1xyXG4gICAgICArIHRoaXMuY29va2llU2VydmljZS5nZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5DdXJyZW50VXNlcklkKTtcclxuICAgIGNvbnN0IHRhc3RhdHVzUmVwb3J0U3VibWlzc2lvbkNoYW5uZWxUb1N1YnNjcmliZUludG8gPSBDaGFubmVsTmFtZXMuQ2hhbm5lbF9TdGF0dXNSZXBvcnRTdWJtaXNzaW9uXHJcbiAgICAgICsgdGhpcy5jb29raWVTZXJ2aWNlLmdldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkN1cnJlbnRVc2VySWQpO1xyXG4gICAgY29uc3QgdGFzdGF0dXNDb25maWdBc3NpZ25DaGFubmVsVG9TdWJzY3JpYmVJbnRvID0gQ2hhbm5lbE5hbWVzLkNoYW5uZWxfU3RhdHVzQ29uZmlnQXNzaWduXHJcbiAgICAgICsgdGhpcy5jb29raWVTZXJ2aWNlLmdldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkN1cnJlbnRVc2VySWQpO1xyXG4gICAgY29uc3QgbXVsdGlDaGFydHNTY2hlZHVsaW5nQ2hhbm5lbFRvU3Vic2NyaWJlSW50byA9IENoYW5uZWxOYW1lcy5DaGFubmVsX011bHRpQ2hhcnRzU2NoZWR1bGluZyArIEN1cnJlbnRVc2VySWQ7XHJcbiAgICBjb25zdCBhc3NldHNBc3NpZ25lZENoYW5uZWxUb1N1YnNjcmliZUludG8gPSBDaGFubmVsTmFtZXMuQ2hhbm5lbF9Bc3NldEFzc2lnbm1lbnQgKyBDdXJyZW50VXNlcklkO1xyXG4gICAgY29uc3QgcHJvamVjdENyZWF0ZWRDaGFubmVsVG9TdWJzY3JpYmVJbnRvID0gQ2hhbm5lbE5hbWVzLkNoYW5uZWxfTmV3UHJvamVjdCArIEN1cnJlbnRVc2VySWQ7XHJcbiAgICBjb25zdCBwcm9qZWN0QWNjZXNzVG9NZW1iZXJDaGFubmVsVG9TdWJzY3JpYmVJbnRvID0gQ2hhbm5lbE5hbWVzLkNoYW5uZWxfUHJvamVjdE1lbWJlclJvbGUgKyBDdXJyZW50VXNlcklkO1xyXG4gICAgY29uc3QgZ29hbEFwcHJvdmVkQ2hhbm5lbFRvU3Vic2NyaWJlSW50byA9IENoYW5uZWxOYW1lcy5DaGFubmVsX0dvYWxBcHByb3ZlZEZyb21SZXBsYW4gKyBDdXJyZW50VXNlcklkO1xyXG4gICAgY29uc3QgdXNlclN0b3J5VXBkYXRlQ2hhbm5lbFRvU3Vic2NyaWJlSW50byA9IENoYW5uZWxOYW1lcy5DaGFubmVsX1VzZXJTdG9yeVVwZGF0ZU5vdGlmaWNhdGlvbiArIEN1cnJlbnRVc2VySWQ7XHJcbiAgICBjb25zdCBBbm5vdW5jZW1lbnRDaGFubmVsVG9TdWJzY3JpYmVJbnRvID0gQ2hhbm5lbE5hbWVzLkNoYW5uZWxfQW5ub3VuY2VtZW50Tm90aWZpY2F0aW9uICsgQ3VycmVudFVzZXJJZDtcclxuICAgIGNvbnN0IHVzZXJTdG9yeUNvbW1lbnRDaGFubmVsVG9TdWJzY3JpYmVJbnRvID0gQ2hhbm5lbE5hbWVzLkNoYW5uZWxfVXNlclN0b3J5Q29tbWVudCArIEN1cnJlbnRVc2VySWQ7XHJcbiAgICBjb25zdCBzcHJpbnRTdGFydGVkQ2hhbm5lbFRvU3Vic2NyaWJlSW50byA9IENoYW5uZWxOYW1lcy5DaGFubmVsX1NwcmludFN0YXJ0ZWQgKyBDdXJyZW50VXNlcklkO1xyXG4gICAgY29uc3Qgc3ByaW50UmVwbGFuQ2hhbm5lbFRvU3Vic2NyaWJlSW50byA9IENoYW5uZWxOYW1lcy5DaGFubmVsX1NwcmludFJlcXVlc3RlZFRvUmVwbGFuICsgQ3VycmVudFVzZXJJZDtcclxuICAgIGNvbnN0IFBlcmZvcm1hbmNlQ2hhbm5lbFRvU3Vic2NyaWJlSW50byA9IENoYW5uZWxOYW1lcy5DaGFubmVsX1Blcm9mb3JtYW5jZU5vdGlmaWNhdGlvbiArIEN1cnJlbnRVc2VySWQ7XHJcbiAgICBjb25zdCBSZW1pbmRlckNoYW5uZWxUb1N1YnNjcmliZUludG8gPSBDaGFubmVsTmFtZXMuQ2hhbm5lbF9SZW1pbmRlck5vdGlmaWNhdGlvbiArIEN1cnJlbnRVc2VySWQ7XHJcbiAgICBjb25zdCBwcm9qZWN0RmVhdHVyZUNoYW5uZWxUb1N1YnNjcmliZUludG8gPSBDaGFubmVsTmFtZXMuQ2hhbm5lbF9Qcm9qZWN0RmVhdHVyZSArIEN1cnJlbnRVc2VySWQ7XHJcbiAgICBjb25zdCB1c2VyU3RvcnlBcmNoaXZlQ2hhbm5lbFRvU3Vic2NyaWJlSW50byA9IENoYW5uZWxOYW1lcy5DaGFubmVsX1VzZXJTdG9yeUFyY2hpdmUgKyBDdXJyZW50VXNlcklkO1xyXG4gICAgY29uc3QgdXNlclN0b3J5UGFya0NoYW5uZWxUb1N1YnNjcmliZUludG8gPSBDaGFubmVsTmFtZXMuQ2hhbm5lbF9Vc2VyU3RvcnlQYXJrICsgQ3VycmVudFVzZXJJZDtcclxuICAgIGNvbnN0IGdlbmVyaWNBY3Rpdml0eU5vdGlmaWNhdGlvbkNoYW5uZWxUb1N1YnNjcmliZUludG8gPSBDaGFubmVsTmFtZXMuQ2hhbm5lbF9HZW5lcmljQWN0aXZpdHlOb3RpZmljYXRpb24gKyBDdXJyZW50VXNlcklkO1xyXG4gICAgY29uc3QgcHVyY2hhc2VFeGVjdXRpb25Bc3NpZ25lZENoYW5uZWxUb1N1YnNjcmliZUludG8gPSBDaGFubmVsTmFtZXMuQ2hhbm5lbF9QdXJjaGFzZUV4ZWN1dGlvbkFzc2lnblRvRW1wbG95ZWVOb3RpZmljYXRpb24gKyBDdXJyZW50VXNlcklkO1xyXG5cclxuICAgIHRoaXMucHVibnViLnVuc3Vic2NyaWJlKHsgY2hhbm5lbHM6IFt0YXNrQXNzaWdubWVudENoYW5uZWxUb1N1YnNjcmliZUludG9dIH0pO1xyXG4gICAgdGhpcy5wdWJudWIudW5zdWJzY3JpYmUoeyBjaGFubmVsczogW3Rhc3RhdHVzUmVwb3J0U3VibWlzc2lvbkNoYW5uZWxUb1N1YnNjcmliZUludG9dIH0pO1xyXG4gICAgdGhpcy5wdWJudWIudW5zdWJzY3JpYmUoeyBjaGFubmVsczogW3Rhc3RhdHVzQ29uZmlnQXNzaWduQ2hhbm5lbFRvU3Vic2NyaWJlSW50b10gfSk7XHJcbiAgICB0aGlzLnB1Ym51Yi51bnN1YnNjcmliZSh7IGNoYW5uZWxzOiBbbXVsdGlDaGFydHNTY2hlZHVsaW5nQ2hhbm5lbFRvU3Vic2NyaWJlSW50b10gfSk7XHJcbiAgICB0aGlzLnB1Ym51Yi51bnN1YnNjcmliZSh7IGNoYW5uZWxzOiBbYXNzZXRzQXNzaWduZWRDaGFubmVsVG9TdWJzY3JpYmVJbnRvXSB9KTtcclxuICAgIHRoaXMucHVibnViLnVuc3Vic2NyaWJlKHsgY2hhbm5lbHM6IFtwcm9qZWN0Q3JlYXRlZENoYW5uZWxUb1N1YnNjcmliZUludG9dIH0pO1xyXG4gICAgdGhpcy5wdWJudWIudW5zdWJzY3JpYmUoeyBjaGFubmVsczogW3Byb2plY3RBY2Nlc3NUb01lbWJlckNoYW5uZWxUb1N1YnNjcmliZUludG9dIH0pO1xyXG4gICAgdGhpcy5wdWJudWIudW5zdWJzY3JpYmUoeyBjaGFubmVsczogW2dvYWxBcHByb3ZlZENoYW5uZWxUb1N1YnNjcmliZUludG9dIH0pO1xyXG4gICAgdGhpcy5wdWJudWIudW5zdWJzY3JpYmUoeyBjaGFubmVsczogW3VzZXJTdG9yeVVwZGF0ZUNoYW5uZWxUb1N1YnNjcmliZUludG9dIH0pO1xyXG4gICAgdGhpcy5wdWJudWIudW5zdWJzY3JpYmUoeyBjaGFubmVsczogW0Fubm91bmNlbWVudENoYW5uZWxUb1N1YnNjcmliZUludG9dIH0pO1xyXG4gICAgdGhpcy5wdWJudWIudW5zdWJzY3JpYmUoeyBjaGFubmVsczogW3VzZXJTdG9yeUNvbW1lbnRDaGFubmVsVG9TdWJzY3JpYmVJbnRvXSB9KTtcclxuICAgIHRoaXMucHVibnViLnVuc3Vic2NyaWJlKHsgY2hhbm5lbHM6IFtzcHJpbnRTdGFydGVkQ2hhbm5lbFRvU3Vic2NyaWJlSW50b10gfSk7XHJcbiAgICB0aGlzLnB1Ym51Yi51bnN1YnNjcmliZSh7IGNoYW5uZWxzOiBbc3ByaW50UmVwbGFuQ2hhbm5lbFRvU3Vic2NyaWJlSW50b10gfSk7XHJcbiAgICB0aGlzLnB1Ym51Yi51bnN1YnNjcmliZSh7IGNoYW5uZWxzOiBbUGVyZm9ybWFuY2VDaGFubmVsVG9TdWJzY3JpYmVJbnRvXSB9KTtcclxuICAgIHRoaXMucHVibnViLnVuc3Vic2NyaWJlKHsgY2hhbm5lbHM6IFtSZW1pbmRlckNoYW5uZWxUb1N1YnNjcmliZUludG9dIH0pO1xyXG4gICAgdGhpcy5wdWJudWIudW5zdWJzY3JpYmUoeyBjaGFubmVsczogW3Byb2plY3RGZWF0dXJlQ2hhbm5lbFRvU3Vic2NyaWJlSW50b10gfSk7XHJcbiAgICB0aGlzLnB1Ym51Yi51bnN1YnNjcmliZSh7IGNoYW5uZWxzOiBbdXNlclN0b3J5QXJjaGl2ZUNoYW5uZWxUb1N1YnNjcmliZUludG9dIH0pO1xyXG4gICAgdGhpcy5wdWJudWIudW5zdWJzY3JpYmUoeyBjaGFubmVsczogW3VzZXJTdG9yeVBhcmtDaGFubmVsVG9TdWJzY3JpYmVJbnRvXSB9KTtcclxuICAgIHRoaXMucHVibnViLnVuc3Vic2NyaWJlKHsgY2hhbm5lbHM6IFtwdXJjaGFzZUV4ZWN1dGlvbkFzc2lnbmVkQ2hhbm5lbFRvU3Vic2NyaWJlSW50b10gfSk7XHJcbiAgICB0aGlzLnB1Ym51Yi51bnN1YnNjcmliZSh7IGNoYW5uZWxzOiBbdGhpcy5sb2dpblVzZXJjaGFubmVsTmFtZV0gfSk7XHJcbiAgICAvLyB2YXIgbG9naW5Db21wYW55SWQgPSB0aGlzLmNvb2tpZVNlcnZpY2UuZ2V0KFwiQ29tcGFueUlkXCIpO1xyXG4gICAgLy8gdmFyIHByZXNlbmNlQ2hhbm5lbCA9IFwiTWVzc2VuZ2VyUHJlc2VuY2UtXCIgKyBsb2dpbkNvbXBhbnlJZDtcclxuICAgIC8vIHRoaXMucHVibnViLnVuc3Vic2NyaWJlKHtcclxuICAgIC8vICAgY2hhbm5lbHM6IFtwcmVzZW5jZUNoYW5uZWxdLFxyXG4gICAgLy8gfSk7XHJcbiAgICAvLyBpZiAodGhpcy5jaGFubmVsTGlzdCAhPSB1bmRlZmluZWQgfHwgdGhpcy5jaGFubmVsTGlzdCAhPSBudWxsKSB7XHJcbiAgICAvLyAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLmNoYW5uZWxMaXN0Lmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgLy8gICAgIHRoaXMucHVibnViLnVuc3Vic2NyaWJlKHtcclxuICAgIC8vICAgICAgIGNoYW5uZWxzOiBbKGxvZ2luQ29tcGFueUlkICsgJy0nICsgdGhpcy5jaGFubmVsTGlzdFtpbmRleF0uaWQpXVxyXG4gICAgLy8gICAgIH0pO1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyB9XHJcbiAgICAvLyB0aGlzLnB1Ym51Yi51bnN1YnNjcmliZSh7XHJcbiAgICAvLyAgIGNoYW5uZWxzOiBbKCdDaGFubmVsVXBkYXRlcy0nICsgbG9naW5Db21wYW55SWQpXVxyXG4gICAgLy8gfSk7XHJcbiAgICAvLyB0aGlzLnB1Ym51Yi51bnN1YnNjcmliZSh7XHJcbiAgICAvLyAgIGNoYW5uZWxzOiBbKCdVc2VyVXBkYXRlcy0nICsgbG9naW5Db21wYW55SWQpXVxyXG4gICAgLy8gfSk7XHJcbiAgICB0aGlzLnB1Ym51Yi51bnN1YnNjcmliZSh7IGNoYW5uZWxzOiBbZ2VuZXJpY0FjdGl2aXR5Tm90aWZpY2F0aW9uQ2hhbm5lbFRvU3Vic2NyaWJlSW50b10gfSk7XHJcbiAgICAvLyB0aGlzLnB1Ym51Yi51bnN1YnNjcmliZUFsbCgpO1xyXG4gICAgLy8gdGhpcy5wdWJudWIucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XHJcbiAgICBsZXQgZW52aXJvbm1lbnQgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKExvY2FsU3RvcmFnZVByb3BlcnRpZXMuRW52aXJvbm1lbnQpKTtcclxuICAgIGxldCBjb21wYW55TmFtZSA9IHRoaXMuY29va2llU2VydmljZS5nZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Db21wYW55RGV0YWlscyk7XHJcbiAgICBsZXQgY29tcGFueUlkID0gdGhpcy5jb29raWVTZXJ2aWNlLmdldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkNvbXBhbnlJZCk7XHJcblxyXG4gICAgbGV0IGNvbXBhbnlEZXRhaWxzID0gdGhpcy5jb29raWVTZXJ2aWNlLmdldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkNvbXBhbnlEZXRhaWxzKTtcclxuICAgIGxldCBjb21wYW55VGhlbWUgPSB0aGlzLmNvb2tpZVNlcnZpY2UuZ2V0KExvY2FsU3RvcmFnZVByb3BlcnRpZXMuQ29tcGFueVRoZW1lKTtcclxuICAgIGxldCBVc2VyTG9nZ2VkSW5Db3VudCA9IHRoaXMuY29va2llU2VydmljZS5nZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Vc2VyTG9nZ2VkSW5Db3VudCk7XHJcbiAgICBsZXQgY3VycmVudEN1bHR1cmUgPSB0aGlzLmNvb2tpZVNlcnZpY2UuZ2V0KExvY2FsU3RvcmFnZVByb3BlcnRpZXMuQ3VycmVudEN1bHR1cmUpO1xyXG4gICAgdGhpcy5jb29raWVTZXJ2aWNlLmRlbGV0ZUFsbChlbnZpcm9ubWVudC5jb29raWVQYXRoKTtcclxuICAgIHRoaXMuY29va2llU2VydmljZS5kZWxldGUoXCJzZWxlY3RlZFByb2plY3RzVGFiXCIpO1xyXG5cclxuXHJcbiAgICB0aGlzLmNvb2tpZVNlcnZpY2Uuc2V0KExvY2FsU3RvcmFnZVByb3BlcnRpZXMuVXNlckxvZ2dlZEluQ291bnQsIFVzZXJMb2dnZWRJbkNvdW50LCBudWxsLCBlbnZpcm9ubWVudC5jb29raWVQYXRoLCB0aGlzLndpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSwgZmFsc2UsIFwiU3RyaWN0XCIpO1xyXG4gICAgdGhpcy5jb29raWVTZXJ2aWNlLnNldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkN1cnJlbnRDdWx0dXJlLCBjdXJyZW50Q3VsdHVyZSwgbnVsbCwgZW52aXJvbm1lbnQuY29va2llUGF0aCwgdGhpcy53aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsIGZhbHNlLCBcIlN0cmljdFwiKTtcclxuICAgIHRoaXMuY29va2llU2VydmljZS5zZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5DdXJyZW50VXNlciwgbnVsbCwgbnVsbCwgZW52aXJvbm1lbnQuY29va2llUGF0aCwgdGhpcy53aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsIGZhbHNlLCBcIlN0cmljdFwiKTtcclxuICAgIHRoaXMuY29va2llU2VydmljZS5zZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5DdXJyZW50VXNlcklkLCBudWxsLCBudWxsLCBlbnZpcm9ubWVudC5jb29raWVQYXRoLCB0aGlzLndpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSwgZmFsc2UsIFwiU3RyaWN0XCIpO1xyXG4gICAgdGhpcy5jb29raWVTZXJ2aWNlLnNldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkNvbXBhbnlOYW1lLCBjb21wYW55TmFtZSwgbnVsbCwgZW52aXJvbm1lbnQuY29va2llUGF0aCwgdGhpcy53aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsIGZhbHNlLCBcIlN0cmljdFwiKTtcclxuICAgIHRoaXMuY29va2llU2VydmljZS5zZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Db21wYW55SWQsIGNvbXBhbnlJZCwgbnVsbCwgZW52aXJvbm1lbnQuY29va2llUGF0aCwgdGhpcy53aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsIGZhbHNlLCBcIlN0cmljdFwiKTtcclxuICAgIHRoaXMuY29va2llU2VydmljZS5zZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5EZWZhdWx0RGFzaGJvYXJkLCBudWxsLCBudWxsLCBlbnZpcm9ubWVudC5jb29raWVQYXRoLCB0aGlzLndpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSwgZmFsc2UsIFwiU3RyaWN0XCIpO1xyXG4gICAgdGhpcy5jb29raWVTZXJ2aWNlLnNldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkNvbXBhbnlEZXRhaWxzLCBjb21wYW55RGV0YWlscywgbnVsbCwgZW52aXJvbm1lbnQuY29va2llUGF0aCwgdGhpcy53aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsIGZhbHNlLCBcIlN0cmljdFwiKTtcclxuICAgIHRoaXMuY29va2llU2VydmljZS5zZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Db21wYW55VGhlbWUsIGNvbXBhbnlUaGVtZSwgbnVsbCwgZW52aXJvbm1lbnQuY29va2llUGF0aCwgdGhpcy53aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsIGZhbHNlLCBcIlN0cmljdFwiKTtcclxuICAgIHRoaXMuY29va2llU2VydmljZS5zZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5TZWFyY2hDbGljaywgbnVsbCwgbnVsbCwgZW52aXJvbm1lbnQuY29va2llUGF0aCwgdGhpcy53aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsIGZhbHNlLCBcIlN0cmljdFwiKTtcclxuICAgIHRoaXMuY29va2llU2VydmljZS5zZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Vc2VyTW9kZWwsIG51bGwsIG51bGwsIGVudmlyb25tZW50LmNvb2tpZVBhdGgsIHRoaXMud2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLCBmYWxzZSwgXCJTdHJpY3RcIik7XHJcbiAgICB0aGlzLmNvb2tpZVNlcnZpY2Uuc2V0KExvY2FsU3RvcmFnZVByb3BlcnRpZXMuRW5hYmxlVGVhbURhc2hib2FyZCwgbnVsbCwgbnVsbCwgZW52aXJvbm1lbnQuY29va2llUGF0aCwgdGhpcy53aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsIGZhbHNlLCBcIlN0cmljdFwiKTtcclxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKExvY2FsU3RvcmFnZVByb3BlcnRpZXMuRGFzaGJvYXJkcywgbnVsbCk7XHJcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLlVzZXJSZWZlcmVuY2VJZCwgbnVsbCk7XHJcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLlJvbGVGZWF0dXJlcywgbnVsbCk7XHJcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLlVzZXJSb2xlRmVhdHVyZXMpO1xyXG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oTG9jYWxTdG9yYWdlUHJvcGVydGllcy5SZWRpcmVjdGlvblVybCk7XHJcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLlNpZGVCYXJNZW51SXRlbXMpO1xyXG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oTG9jYWxTdG9yYWdlUHJvcGVydGllcy5JbnRyb01vZHVsZXMpO1xyXG4gICAgdGhpcy5jb29raWVTZXJ2aWNlLnNldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkFkZE9yRWRpdEN1c3RvbUFwcElzUmVxdWlyZWQsIG51bGwsIG51bGwsIGVudmlyb25tZW50LmNvb2tpZVBhdGgsIHRoaXMud2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLCBmYWxzZSwgXCJTdHJpY3RcIik7XHJcblxyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW1wiL3Nlc3Npb25zL3NpZ25pblwiXSk7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBzZXRMYW5nKCkge1xyXG4gICAgdGhpcy50cmFuc2xhdGUudXNlKHRoaXMuY3VycmVudExhbmcpO1xyXG4gICAgY29uc29sZS5sb2codGhpcy53aW5kb3cubG9jYXRpb24uaG9zdG5hbWUpO1xyXG4gICAgbGV0IGVudmlyb25tZW50ID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkVudmlyb25tZW50KSk7XHJcbiAgICB0aGlzLmNvb2tpZVNlcnZpY2Uuc2V0KExvY2FsU3RvcmFnZVByb3BlcnRpZXMuQ3VycmVudEN1bHR1cmUsIHRoaXMuY3VycmVudExhbmcsIG51bGwsIGVudmlyb25tZW50LmNvb2tpZVBhdGgsIHRoaXMud2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLCBmYWxzZSwgXCJTdHJpY3RcIik7XHJcbiAgICB0aGlzLnNlbGVjdGVkTGFuZ05hbWUgPSB0aGlzLmF2YWlsYWJsZUxhbmdzLmZpbmQoeCA9PiB4LmNvZGUgPT0gdGhpcy5jdXJyZW50TGFuZykubmFtZTtcclxuICB9XHJcblxyXG4gIGNoYW5nZVRoZW1lKHRoZW1lKSB7XHJcbiAgICB0aGlzLnRoZW1lU2VydmljZS5jaGFuZ2VUaGVtZSh0aGVtZSk7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVOb3RpZmljKCkge1xyXG4gICAgLy8gdGhpcy5nZXRVbnJlYWROb3RpZmljYXRpb25zKCk7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVSZWNvcmRpbmcoKSB7XHJcbiAgICB0aGlzLmdldEFjdFRyYWNrZXJSZWNvcmRlcigpO1xyXG4gICAgdmFyIHVzZXIgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKExvY2FsU3RvcmFnZVByb3BlcnRpZXMuVXNlck1vZGVsKSk7XHJcbiAgICBpZiAodXNlciAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMubW9uaXRvckNvbXBhbnlyZWxhdGVkRGV0YWlscyh1c2VyKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldE5vdGlmaWNhdGlvbnMoKSB7XHJcbiAgICBjb25zdCBub3RpZmljYXRpb25TZWFyY2hNb2RlbCA9IG5ldyBBcHBOb3RpZmljYXRpb24oKTtcclxuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IENsZWFyQWxsVW5yZWFkTm90aWZpY2F0aW9uc1RyaWdnZXJlZChub3RpZmljYXRpb25TZWFyY2hNb2RlbCkpO1xyXG4gICAgdGhpcy51bnJlYWRDb3VudE9mTm90aWZpY2F0aW9ucyQgPSB0aGlzLnN0b3JlLnBpcGUoc2VsZWN0KHNoYXJlZE1vZHVsZVJlZHVjZXJzLmdldE5vdGlmaWNhdGlvblVucmVhZFRvdGFsKSk7XHJcbiAgfVxyXG5cclxuICBnZXRVbnJlYWROb3RpZmljYXRpb25zKCkge1xyXG4gICAgY29uc3Qgbm90aWZpY2F0aW9uU2VhcmNoTW9kZWwgPSBuZXcgQXBwTm90aWZpY2F0aW9uKCk7XHJcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBDbGVhclVucmVhZE5vdGlmaWNhdGlvbnNUcmlnZ2VyZWQobm90aWZpY2F0aW9uU2VhcmNoTW9kZWwpKTtcclxuICAgIHRoaXMudW5yZWFkQ291bnRPZk5vdGlmaWNhdGlvbnMkID0gdGhpcy5zdG9yZS5waXBlKHNlbGVjdChzaGFyZWRNb2R1bGVSZWR1Y2Vycy5nZXROb3RpZmljYXRpb25VbnJlYWRUb3RhbCkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWN0VHJhY2tlclJlY29yZGVyKCkge1xyXG4gICAgdGhpcy5jb21tb25TZXJ2aWNlLmdldEFjdFRyYWNrZXJSZWNvcmRlcigpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xyXG4gICAgICAgIHRoaXMuaXNSZWNvcmRpbmcgPSByZXNwb25zZS5kYXRhO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNsZWFyRGVtb0RhdGEoKSB7XHJcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKENvbmZpcm1hdGlvbkRpYWxvZ0NvbXBvbmVudCwge1xyXG4gICAgICBoZWlnaHQ6IFwiMzAlXCIsXHJcbiAgICAgIHdpZHRoOiBcIjMwJVwiLFxyXG4gICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgICAgZGlyZWN0aW9uOiBcImx0clwiLFxyXG4gICAgICBkYXRhOiB7fSxcclxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlXHJcbiAgICB9KTtcclxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiVGhlIGRpYWxvZyB3YXMgY2xvc2VkXCIpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgZXhwb3J0Q29uZmlndXJhdGlvbkRpYWxvZ0RhdGEoKSB7XHJcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKEV4cG9ydENvbmZpZ3VyYXRpb25EaWFsb2dDb21wb25lbnQsIHtcclxuICAgICAgaGVpZ2h0OiBcIjQ1JVwiLFxyXG4gICAgICB3aWR0aDogXCI0MCVcIixcclxuICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgICAgIGRpcmVjdGlvbjogXCJsdHJcIixcclxuICAgICAgZGF0YToge30sXHJcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICBjb25zb2xlLmxvZyhcIlRoZSBkaWFsb2cgd2FzIGNsb3NlZFwiKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlU2lkZW5hdigpIHtcclxuICAgIGlmICh0aGlzLmxheW91dENvbmYuc2lkZWJhclN0eWxlID09PSBcImNsb3NlZFwiKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmxheW91dC5wdWJsaXNoTGF5b3V0Q2hhbmdlKHtcclxuICAgICAgICBzaWRlYmFyU3R5bGU6IFwiZnVsbFwiXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5sYXlvdXQucHVibGlzaExheW91dENoYW5nZSh7XHJcbiAgICAgIHNpZGViYXJTdHlsZTogXCJjbG9zZWRcIlxyXG4gICAgfSk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHsgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwicmVzaXplXCIpKTsgfSwgMjUwKTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZUNvbGxhcHNlKCkge1xyXG4gICAgLy8gY29tcGFjdCAtLT4gZnVsbFxyXG4gICAgaWYgKHRoaXMubGF5b3V0Q29uZi5zaWRlYmFyU3R5bGUgPT09IFwiY29tcGFjdFwiKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmxheW91dC5wdWJsaXNoTGF5b3V0Q2hhbmdlKFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHNpZGViYXJTdHlsZTogXCJmdWxsXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHsgdHJhbnNpdGlvbkNsYXNzOiB0cnVlIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAqIC0tPiBjb21wYWN0XHJcbiAgICB0aGlzLmxheW91dC5wdWJsaXNoTGF5b3V0Q2hhbmdlKFxyXG4gICAgICB7XHJcbiAgICAgICAgc2lkZWJhclN0eWxlOiBcImNvbXBhY3RcIlxyXG4gICAgICB9LFxyXG4gICAgICB7IHRyYW5zaXRpb25DbGFzczogdHJ1ZSB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFRpbWVTaGVldEJ1dHRvbnMoKSB7XHJcbiAgICAvL3RoaXMubG9hZGluZ0luUHJvZ3Jlc3MgPSB0cnVlO1xyXG4gICAgLy8gdGhpcy5jb21tb25TZXJ2aWNlLmdldFRpbWVTaGVldEVuYWJsZWRJbmZvcm1hdGlvbigpLnBpcGUodGFrZVVudGlsKHRoaXMubmdEZXN0cm95ZWQkKSlcclxuICAgIC8vICAgLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAvLyAgICAgaWYgKGRhdGEgPT09IFwiXCIgfHwgZGF0YSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAvLyAgICAgICByZXR1cm47XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICAgIHRoaXMudGltZXNoZWV0RGlzYWJsZW9yRW5hYmxlID0gSlNPTi5wYXJzZShkYXRhKTtcclxuICAgIC8vICAgICB0aGlzLmxvYWRpbmdJblByb2dyZXNzID0gZmFsc2U7XHJcbiAgICAvLyAgIH0pO1xyXG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgRmV0Y2hUaW1lU2hlZXRCdXR0b25EZXRhaWxzKCkpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2VGZWVkVGltZVNoZWV0KCkge1xyXG4gICAgdGhpcy5mZWVkVGltZVNoZWV0UG9wb3Zlci5jbG9zZSgpO1xyXG4gICAgdGhpcy5pc0ZlZWRUaW1lU2hlZXQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIG9wZW5UaW1lU2hlZXQoKSB7XHJcbiAgICBjb25zdCBwcm9qZWN0RGlhbG9nID0gdGhpcy5kaWFsb2cub3BlbihGZWVkVGltZURpYWxvZ0NvbXBvbmVudCwge1xyXG4gICAgICBtaW5XaWR0aDogJzMwdncnLFxyXG4gICAgICBoZWlnaHQ6ICczNXZoJyxcclxuICAgICAgZGF0YTogIXRoaXMuaXNGZWVkVGltZVNoZWV0XHJcbiAgICAgIC8vZGlzYWJsZUNsb3NlOiB0cnVlXHJcbiAgICB9KTtcclxuICAgIHByb2plY3REaWFsb2cuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLmNsb3NlRmVlZFRpbWVTaGVldCgpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmdldFRpbWVTaGVldEJ1dHRvbnMoKTtcclxuICAgIC8vIHRoaXMuaXNGZWVkVGltZVNoZWV0ID0gIXRoaXMuaXNGZWVkVGltZVNoZWV0O1xyXG4gIH1cclxuXHJcbiAgLy8gZ2V0QWxsTWVudUl0ZW1zKCkge1xyXG4gIC8vICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgR2V0QWxsTWVudUl0ZW1zVHJpZ2dlcmVkKE1lbnVDYXRlZ29yaWVzLk1haW4pKTtcclxuICAvLyB9XHJcblxyXG4gIGNoYW5nZU1lbnVUeXBlKHR5cGUpIHtcclxuICAgIHRoaXMubWVudVR5cGUgPSB0eXBlO1xyXG4gIH1cclxuXHJcbiAgb3BlbkZlZWRCYWNrRGlhbG9nKCkge1xyXG4gICAgdGhpcy5pc0ZlZWRCYWNrRGlhbG9nID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGNsb3NlRmVlZEJhY2tsb2dEaWFsb2coKSB7XHJcbiAgICB0aGlzLmlzRmVlZEJhY2tEaWFsb2cgPSBmYWxzZTtcclxuICAgIHRoaXMuZmVlZEJhY2tQb3BPdmVyLmNsb3NlKCk7XHJcbiAgfVxyXG5cclxuICBnZXRDb21wYW55RGV0YWlscyhjb21wYW55SWQ6IHN0cmluZykge1xyXG4gICAgaWYgKHRoaXMuY29va2llU2VydmljZS5jaGVjayhMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkNvbXBhbnlEZXRhaWxzKSAmJiB0aGlzLmNvb2tpZVNlcnZpY2UuY2hlY2soTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Db21wYW55SWQpKSB7XHJcbiAgICAgIHRoaXMuY29tcGFueSA9IEpTT04ucGFyc2UodGhpcy5jb29raWVTZXJ2aWNlLmdldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkNvbXBhbnlEZXRhaWxzKSk7XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuY29tcGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2UuZ2V0Q29tcGFueUJ5SWQoY29tcGFueUlkKS5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmNvbXBhbnkgPSByZXNwb25zZS5kYXRhO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5jb21wYW55LmlzUmVtb3RlQWNjZXNzID09IDEgJiYgdGhpcy5jb21wYW55LnRyYWlsRGF5cyA+IDApIHtcclxuICAgICAgICAgIHRoaXMuc2hvd1RyYWlsUGVyaW9kID0gdHJ1ZTtcclxuICAgICAgICAgIC8vIHRoaXMubm9PZkRheXM9dGhpcy5jb21wYW55Lm5vT2ZEYXlzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5jb21wYW55LmlzRGVtb0RhdGEgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgdGhpcy5zaG93RGVsZXRlID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zaG93RGVsZXRlID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmNvbXBhbnkuaXNEZW1vRGF0YSA9PSBmYWxzZSB8fCB0aGlzLmNvbXBhbnkuaXNEZW1vRGF0YSA9PSBudWxsKSB7XHJcbiAgICAgICAgICB0aGlzLnNob3dEZWxldGUgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuY29tcGFueSAhPSBudWxsICYmIHRoaXMuY29tcGFueSAhPSB1bmRlZmluZWQgJiYgdGhpcy5jb21wYW55LmluZHVzdHJ5SWQudG9VcHBlckNhc2UoKSA9PSAnNzQ5OUY1RTMtMEVGMi00MDQ0LUI4NDAtMjQxMUI2ODMwMkY5JylcclxuICAgICAgICAgIHRoaXMuaXNTdG9yZUFjY2VzcyA9IGZhbHNlO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHRoaXMuaXNTdG9yZUFjY2VzcyA9IHRydWU7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmNvbXBhbnkuaXNSZW1vdGVBY2Nlc3MgPT0gMSAmJiB0aGlzLmNvbXBhbnkudHJhaWxEYXlzID4gMCkge1xyXG4gICAgICAgIHRoaXMuc2hvd1RyYWlsUGVyaW9kID0gdHJ1ZTtcclxuICAgICAgICAvLyB0aGlzLm5vT2ZEYXlzPXRoaXMuY29tcGFueS5ub09mRGF5cztcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5jb21wYW55LmlzRGVtb0RhdGEgPT0gdHJ1ZSkge1xyXG4gICAgICAgIHRoaXMuc2hvd0RlbGV0ZSA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuY29tcGFueS5pc0RlbW9EYXRhID09IGZhbHNlIHx8IHRoaXMuY29tcGFueS5pc0RlbW9EYXRhID09IG51bGwpIHtcclxuICAgICAgICB0aGlzLnNob3dEZWxldGUgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5jb21wYW55ICE9IG51bGwgJiYgdGhpcy5jb21wYW55ICE9IHVuZGVmaW5lZCAmJiB0aGlzLmNvbXBhbnkuaW5kdXN0cnlJZC50b1VwcGVyQ2FzZSgpID09ICc3NDk5RjVFMy0wRUYyLTQwNDQtQjg0MC0yNDExQjY4MzAyRjknKVxyXG4gICAgICAgIHRoaXMuaXNTdG9yZUFjY2VzcyA9IGZhbHNlO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5pc1N0b3JlQWNjZXNzID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFVzZXJTdG9yZSgpIHtcclxuICAgIGxldCBzdG9yZVNlYXJjaE1vZGVsID0gbmV3IFN0b3JlU2VhcmNoTW9kZWwoKTtcclxuICAgIHN0b3JlU2VhcmNoTW9kZWwuaXNBcmNoaXZlZCA9IGZhbHNlO1xyXG4gICAgc3RvcmVTZWFyY2hNb2RlbC5pc0RlZmF1bHQgPSB0cnVlO1xyXG4gICAgc3RvcmVTZWFyY2hNb2RlbC5pc0NvbXBhbnkgPSBmYWxzZTtcclxuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IEdldFVzZXJTdG9yZUlkVHJpZ2dlcmVkKHN0b3JlU2VhcmNoTW9kZWwpKTtcclxuICB9XHJcblxyXG4gIGdvVG9Vc2VyU3RvcmUoKSB7XHJcbiAgICBpZiAodGhpcy5jb29raWVTZXJ2aWNlLmdldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkN1cnJlbnRVc2VySWQpKVxyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCJkb2N1bWVudC9zdG9yZVwiLCB0aGlzLnVzZXJTdG9yZUlkLCB0aGlzLmNvb2tpZVNlcnZpY2UuZ2V0KExvY2FsU3RvcmFnZVByb3BlcnRpZXMuQ3VycmVudFVzZXJJZCkudG9Mb3dlckNhc2UoKV0pO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0QWZ0ZXJsb2dpbihlKSB7XHJcbiAgICB0aGlzLmNvbXBhbnlJZCA9IGUuY29tcGFueUlkXHJcbiAgICB0aGlzLnNlbGVjdGVkQ29tcGFueU5hbWUgPSBlLmNvbXBhbnlOYW1lO1xyXG4gICAgdGhpcy5zZWxlY3RlZENvbXBhbnkgPSBlO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgc2VsZWN0Q29tcGFueShlKSB7XHJcbiAgICBpZiAodGhpcy5jb29raWVTZXJ2aWNlLmdldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkNvbXBhbnlJZCkudG9Mb3dlckNhc2UoKSAhPSBlLmNvbXBhbnlJZC50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgdGhpcy5yZWxvYWQgPSBmYWxzZTtcclxuICAgICAgY29uc29sZS5sb2coZSk7XHJcbiAgICAgIHRoaXMuY29tcGFueUlkID0gZS5jb21wYW55SWQ7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb21wYW55TmFtZSA9IGUuY29tcGFueU5hbWU7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb21wYW55ID0gZTtcclxuICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gbnVsbDtcclxuICAgICAgdGhpcy5uZ3hTZXJ2aWNlLnN0YXJ0KCk7XHJcbiAgICAgIHRoaXMuYXV0aFNlcnZpY2UuY29tcGFueUxvZ2luKHRoaXMuc2VsZWN0ZWRDb21wYW55KS5zdWJzY3JpYmUoYXN5bmMgKHVzZXJUb2tlbjogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHVzZXJUb2tlbi5zdWNjZXNzKSB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLm9uU2lnbm91dCgpO1xyXG4gICAgICAgICAgbGV0IGVudmlyb25tZW50ID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkVudmlyb25tZW50KSk7XHJcbiAgICAgICAgICB0aGlzLmNvb2tpZVNlcnZpY2Uuc2V0KExvY2FsU3RvcmFnZVByb3BlcnRpZXMuQ3VycmVudFVzZXIsIGUuYXV0aFRva2VuLCBudWxsLCBlbnZpcm9ubWVudC5jb29raWVQYXRoLCB0aGlzLndpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSwgZmFsc2UsIFwiU3RyaWN0XCIpO1xyXG4gICAgICAgICAgdGhpcy5jb29raWVTZXJ2aWNlLnNldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkN1cnJlbnRVc2VySWQsIGUudXNlcklkLCBudWxsLCBlbnZpcm9ubWVudC5jb29raWVQYXRoLCB0aGlzLndpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSwgZmFsc2UsIFwiU3RyaWN0XCIpO1xyXG4gICAgICAgICAgdGhpcy5jb29raWVTZXJ2aWNlLnNldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkN1cnJlbnRVc2VyLCB1c2VyVG9rZW4uZGF0YS5hdXRoVG9rZW4sIG51bGwsIGVudmlyb25tZW50LmNvb2tpZVBhdGgsIHRoaXMud2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLCBmYWxzZSwgXCJTdHJpY3RcIik7XHJcbiAgICAgICAgICB0aGlzLmNvb2tpZVNlcnZpY2Uuc2V0KFwiRGVmYXVsdERhc2hib2FyZFwiLCB1c2VyVG9rZW4uZGF0YS5kZWZhdWx0RGFzaGJvYXJkSWQgPyBKU09OLnN0cmluZ2lmeSh1c2VyVG9rZW4uZGF0YS5kZWZhdWx0RGFzaGJvYXJkSWQud29ya3NwYWNlSWQpIDogbnVsbCwgbnVsbCwgZW52aXJvbm1lbnQuY29va2llUGF0aCwgdGhpcy53aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsIGZhbHNlLCBcIlN0cmljdFwiKTtcclxuICAgICAgICAgIHRoaXMuY29va2llU2VydmljZS5zZXQoJ0NvbXBhbnlEZXRhaWxzJywgSlNPTi5zdHJpbmdpZnkodXNlclRva2VuLmRhdGEuY29tcGFueURldGFpbHMpKTtcclxuICAgICAgICAgIHRoaXMuY29va2llU2VydmljZS5zZXQoJ0NvbXBhbmllc0xpc3QnLCBKU09OLnN0cmluZ2lmeSh1c2VyVG9rZW4uZGF0YS51c2Vyc01vZGVsLmNvbXBhbmllc0xpc3QpKSxcclxuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ1JvbGVGZWF0dXJlcycsIEpTT04uc3RyaW5naWZ5KHVzZXJUb2tlbi5kYXRhLnJvbGVGZWF0dXJlcykpO1xyXG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJVc2VyTW9kZWxcIiwgSlNPTi5zdHJpbmdpZnkodXNlclRva2VuLmRhdGEudXNlcnNNb2RlbCkpO1xyXG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ1NvZnRMYWJlbHMnLCBKU09OLnN0cmluZ2lmeSh1c2VyVG9rZW4uZGF0YS5zb2Z0TGFiZWxzKSk7XHJcbiAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcIkNvbXBhbnlTZXR0aW5nc1wiLCBKU09OLnN0cmluZ2lmeSh1c2VyVG9rZW4uZGF0YS5jb21wYW55U2V0dGluZ3MpKTtcclxuICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiRnJvbUxvZ0luXCIsIEpTT04uc3RyaW5naWZ5KHRydWUpKTtcclxuICAgICAgICAgIHRoaXMuY29va2llU2VydmljZS5zZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Db21wYW55TmFtZSwgdXNlclRva2VuLmRhdGEudXNlcnNNb2RlbC5jb21wYW55TmFtZSwgbnVsbCwgZW52aXJvbm1lbnQuY29va2llUGF0aCwgdGhpcy53aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsIGZhbHNlLCBcIlN0cmljdFwiKTtcclxuICAgICAgICAgIHRoaXMuY29va2llU2VydmljZS5zZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Db21wYW55SWQsIHVzZXJUb2tlbi5kYXRhLnVzZXJzTW9kZWwuY29tcGFueUlkLCBudWxsLCBlbnZpcm9ubWVudC5jb29raWVQYXRoLCB0aGlzLndpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSwgZmFsc2UsIFwiU3RyaWN0XCIpO1xyXG4gICAgICAgICAgLy90aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBVc2VyRGV0YWlsc0ZldGNoZWRBZnRlckNvbXBhbnlMb2dpbih1c2VyVG9rZW4uZGF0YS51c2Vyc01vZGVsKSk7XHJcbiAgICAgICAgICB0aGlzLnNldERhZmF1bHRMYW5ndWFnZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm5neFNlcnZpY2Uuc3RvcCgpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldERhZmF1bHRMYW5ndWFnZSgpIHtcclxuICAgIGNvbnN0IGNvbXBhbnkgPSBKU09OLnBhcnNlKHRoaXMuY29va2llU2VydmljZS5nZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Db21wYW55RGV0YWlscykpO1xyXG4gICAgbGV0IGN1cnJlbnRDdWx0dXJlID0gY29tcGFueS5sYW5Db2RlO1xyXG4gICAgaWYgKGN1cnJlbnRDdWx0dXJlID09IG51bGwgfHwgY3VycmVudEN1bHR1cmUgPT0gdW5kZWZpbmVkIHx8IGN1cnJlbnRDdWx0dXJlID09PSAnbnVsbCcgfHwgY3VycmVudEN1bHR1cmUgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgIGN1cnJlbnRDdWx0dXJlID0gJ2VuJztcclxuICAgIH1cclxuICAgIGxldCBlbnZpcm9ubWVudCA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oTG9jYWxTdG9yYWdlUHJvcGVydGllcy5FbnZpcm9ubWVudCkpO1xyXG4gICAgdGhpcy5jb29raWVTZXJ2aWNlLnNldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkN1cnJlbnRDdWx0dXJlLCBjdXJyZW50Q3VsdHVyZSwgbnVsbCwgZW52aXJvbm1lbnQuY29va2llUGF0aCwgdGhpcy53aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsIGZhbHNlLCBcIlN0cmljdFwiKTtcclxuICAgIHRoaXMuY3VycmVudExhbmcgPSBjdXJyZW50Q3VsdHVyZTtcclxuICAgIHRoaXMudHJhbnNsYXRlLnVzZSh0aGlzLmN1cnJlbnRMYW5nKTtcclxuICB9XHJcblxyXG5cclxuICBnZXRFbXBsb3llZUlkQnlVc2VySWQoKSB7XHJcblxyXG4gIH1cclxuXHJcbiAgbmF2aWdhdGVUb1Byb2ZpbGUoKSB7XHJcbiAgICB0aGlzLmNvbW1vblNlcnZpY2UuZ2V0VXNlckJ5SWQodGhpcy5jb29raWVTZXJ2aWNlLmdldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkN1cnJlbnRVc2VySWQpLnRvTG93ZXJDYXNlKCkpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzcG9uc2Uuc3VjY2VzcyA9PSB0cnVlKSB7XHJcbiAgICAgICAgdGhpcy5lbXBsb3llZUlkID0gcmVzcG9uc2UuZGF0YS5lbXBsb3llZUlkO1xyXG4gICAgICAgIGlmICh0aGlzLmVtcGxveWVlSWQpIHtcclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcImRhc2hib2FyZC9wcm9maWxlXCIsIHRoaXMuY29va2llU2VydmljZS5nZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5DdXJyZW50VXNlcklkKS50b0xvd2VyQ2FzZSgpLCBcIm92ZXJ2aWV3XCJdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCJkYXNoYm9hcmQvbXlQcm9maWxlXCIsIHRoaXMuY29va2llU2VydmljZS5nZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5DdXJyZW50VXNlcklkKS50b0xvd2VyQ2FzZSgpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgbmF2aWdhdGVUb01lc3NlbmdlcigpIHtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcIi9jaGF0XCJdKTtcclxuICB9XHJcblxyXG5cclxuICBuYXZpZ2F0ZVRvU3RhdHVzUmVwb3J0KCkge1xyXG4gICAgY29uc3QgcHJvamVjdERpYWxvZyA9IHRoaXMuZGlhbG9nLm9wZW4oV29ya0l0ZW1zRGlhbG9nQ29tcG9uZW50LCB7XHJcbiAgICAgIG1pbldpZHRoOiAnODJ2dycsXHJcbiAgICAgIGhlaWdodDogJzgydmgnLFxyXG4gICAgICBkYXRhOiB7IGRhc2hib2FyZEZpbHRlcnM6IHRoaXMuZGFzaGJvYXJkRmlsdGVycyB9LFxyXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWVcclxuICAgIH0pO1xyXG4gICAgcHJvamVjdERpYWxvZy5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgoKSA9PiB7IH0pO1xyXG4gIH1cclxuICBuYXZpZ2F0ZVRvU2V0dGluZ3MoKSB7XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCIvc2V0dGluZ3NcIl0pO1xyXG4gIH1cclxuXHJcbiAgYWx0ZXJuYXRlU2lnbkluKCkge1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW1wiL3Nlc3Npb25zL2dlbmVyaWMtc2lnbmluXCJdKTtcclxuICB9XHJcblxyXG4gIG5hdmlnYXRlVG9Sb2xlcygpIHtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcIi9yb2xlbWFuYWdlbWVudC9yb2xlbWFuYWdlbWVudFwiXSk7XHJcbiAgfVxyXG5cclxuICBuYXZpZ2F0ZVRvVXJsKHdvcmtzcGFjZUlkKSB7XHJcbiAgICBjb25zdCB1c2VyUmVmZXJlbmNlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Vc2VyUmVmZXJlbmNlSWQpO1xyXG4gICAgaWYgKHVzZXJSZWZlcmVuY2UgIT0gXCJudWxsXCIgJiYgdXNlclJlZmVyZW5jZSAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoXCJkYXNoYm9hcmQtbWFuYWdlbWVudC9kYXNoYm9hcmQvXCIgKyB3b3Jrc3BhY2VJZCArIFwiL2Zvcm0vXCIgKyB1c2VyUmVmZXJlbmNlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoXCJkYXNoYm9hcmQtbWFuYWdlbWVudC9kYXNoYm9hcmQvXCIgKyB3b3Jrc3BhY2VJZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRVcGxvYWRGaWxlUG9wdXBPcGVuKGZpbGVVcGxvYWREcm9wem9uZVBvcHVwKSB7XHJcbiAgICBmaWxlVXBsb2FkRHJvcHpvbmVQb3B1cC5vcGVuUG9wb3ZlcigpO1xyXG4gIH1cclxuICBzZXRMYWJlbE5hbWVGb3JEcm9wem9uZShmaWxlTmFtZSkge1xyXG4gICAgcmV0dXJuIGZpbGVOYW1lLnN1YnN0cmluZygwLCAyMCkgKyBcIi4uLlwiO1xyXG4gIH1cclxuICBvblJlbW92ZShldmVudCkge1xyXG4gICAgdGhpcy5maWxlcy5zcGxpY2UodGhpcy5maWxlcy5pbmRleE9mKGV2ZW50KSwgMSk7XHJcbiAgICBpZiAodGhpcy5maWxlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuZmlsZXNQcmVzZW50ID0gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZmlsZXNQcmVzZW50ID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJlbW92ZUFsbEZpbGVzKCkge1xyXG4gICAgdGhpcy5maWxlc1ByZXNlbnQgPSBmYWxzZTtcclxuICAgIHRoaXMuZmlsZXMgPSBbXTtcclxuICB9XHJcbiAgZmlsZXNTZWxlY3RlZChldmVudCkge1xyXG4gICAgdGhpcy5maWxlcy5wdXNoKC4uLmV2ZW50LmFkZGVkRmlsZXMpO1xyXG4gICAgaWYgKHRoaXMuZmlsZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLmZpbGVzUHJlc2VudCA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbG9zZVVwbG9hZEZpbGVQb3B1cCgpIHtcclxuICAgIHRoaXMuZmlsZVVwbG9hZERyb3B6b25lUG9wdXAuZm9yRWFjaCgocCkgPT4gcC5jbG9zZVBvcG92ZXIoKSk7XHJcbiAgICB0aGlzLmZpbGVzID0gW107XHJcbiAgICB0aGlzLmZpbGVSZXN1bHRNb2RlbCA9IFtdO1xyXG4gIH1cclxuICBzYXZlRmlsZXMoKSB7XHJcbiAgICB0aGlzLmFueU9wZXJhdGlvbkluUHJvZ3Jlc3MgPSB0cnVlO1xyXG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcclxuICAgIHRoaXMuZmlsZXMuZm9yRWFjaCgoZmlsZTogRmlsZSkgPT4ge1xyXG4gICAgICB0aGlzLmZpbGVJbmRleCA9IHRoaXMuZmlsZUluZGV4ICsgMTtcclxuICAgICAgY29uc3QgZmlsZUtleU5hbWUgPSBcImZpbGVcIiArIHRoaXMuZmlsZUluZGV4LnRvU3RyaW5nKCk7XHJcbiAgICAgIGZvcm1EYXRhLmFwcGVuZChmaWxlS2V5TmFtZSwgZmlsZSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBsZXQgZW52aXJvbm1lbnQgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKExvY2FsU3RvcmFnZVByb3BlcnRpZXMuRW52aXJvbm1lbnQpKTtcclxuICAgIHRoaXMuVXBsb2FkZXJPbkluaXQoZW52aXJvbm1lbnQuYXBpVVJMICsgQXBpVXJscy5VcGxvYWRGaWxlQ2h1bmtzKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBVcGxvYWRlck9uSW5pdCh1cmw6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgbGV0IHByb2dyZXNzID0gMDtcclxuICAgIGNvbnN0IHIgPSBuZXcgUmVzdW1hYmxlKHtcclxuICAgICAgdGFyZ2V0OiB1cmwsXHJcbiAgICAgIGNodW5rU2l6ZTogMSAqIDEwMjQgKiAxMDI0LCAvLzMgTUJcclxuICAgICAgcXVlcnk6IHsgbW9kdWxlVHlwZUlkOiB0aGlzLm1vZHVsZVR5cGVJZCB9LFxyXG4gICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgXCJBdXRob3JpemF0aW9uXCI6IGBCZWFyZXIgJHt0aGlzLmNvb2tpZVNlcnZpY2UuZ2V0KExvY2FsU3RvcmFnZVByb3BlcnRpZXMuQ3VycmVudFVzZXIpfWBcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gICAgci5hZGRGaWxlcyh0aGlzLmZpbGVzKTtcclxuICAgIHIub24oJ2ZpbGVBZGRlZCcsIChmaWxlLCBldmVudCkgPT4ge1xyXG4gICAgICBpZiAoIXRoaXMuZmlsZVJlc3VsdE1vZGVsIHx8IHRoaXMuZmlsZVJlc3VsdE1vZGVsLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLmZpbGVSZXN1bHRNb2RlbCA9IFtdO1xyXG4gICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9XHJcbiAgICAgIHIudXBsb2FkKClcclxuICAgIH0pO1xyXG4gICAgci5vbignY29tcGxldGUnLCAoZXZlbnQpID0+IHtcclxuICAgICAgci5maWxlcy5wb3AoKTtcclxuICAgICAgdGhpcy5wcm9ncmVzc1ZhbHVlID0gMDtcclxuICAgICAgdGhpcy5maWxlc1ByZXNlbnQgPSBmYWxzZTtcclxuICAgICAgdGhpcy51cGxvYWRlZEZpbGVOYW1lcyA9IFtdO1xyXG4gICAgICB0aGlzLmZpbGVDb3VudGVyID0gMTtcclxuICAgICAgdGhpcy5maWxlSW5kZXggPSAwO1xyXG4gICAgICB0aGlzLmFueU9wZXJhdGlvbkluUHJvZ3Jlc3MgPSBmYWxzZTtcclxuICAgIH0pO1xyXG4gICAgci5vbigncHJvZ3Jlc3MnLCAoKSA9PiB7XHJcbiAgICAgIHByb2dyZXNzID0gTWF0aC5yb3VuZChyLnByb2dyZXNzKCkgKiAxMDApO1xyXG4gICAgICB0aGlzLnByb2dyZXNzVmFsdWUgPSBwcm9ncmVzcztcclxuICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9KTtcclxuICAgIHIub24oJ2ZpbGVTdWNjZXNzJywgKGZpbGUsIHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgIGlmIChmaWxlICYmIGZpbGUuZmlsZU5hbWUpIHtcclxuICAgICAgICBpZiAoIXRoaXMudXBsb2FkZWRGaWxlTmFtZXMuZmluZCh4ID0+IHggPT0gZmlsZS5maWxlTmFtZSkpIHtcclxuICAgICAgICAgIHRoaXMudXBsb2FkZWRGaWxlTmFtZXMucHVzaChmaWxlLmZpbGVOYW1lKVxyXG4gICAgICAgICAgdGhpcy5maWxlQ291bnRlciA9IHRoaXMudXBsb2FkZWRGaWxlTmFtZXMubGVuZ3RoO1xyXG5cclxuICAgICAgICAgIGxldCByZXN1bHQgPSBKU09OLnBhcnNlKHJlc3BvbnNlKTtcclxuICAgICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmZpbGVSZXN1bHRNb2RlbCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuZmlsZVJlc3VsdE1vZGVsID0gW107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IGZpbGVSZXN1bHQgPSBuZXcgRmlsZVJlc3VsdE1vZGVsKCk7XHJcbiAgICAgICAgICAgIGZpbGVSZXN1bHQuZmlsZUV4dGVuc2lvbiA9IHJlc3VsdFswXS5GaWxlRXh0ZW5zaW9uO1xyXG4gICAgICAgICAgICBmaWxlUmVzdWx0LmZpbGVOYW1lID0gcmVzdWx0WzBdLkZpbGVOYW1lO1xyXG4gICAgICAgICAgICBmaWxlUmVzdWx0LmZpbGVQYXRoID0gcmVzdWx0WzBdLkZpbGVQYXRoO1xyXG4gICAgICAgICAgICBmaWxlUmVzdWx0LmZpbGVTaXplID0gcmVzdWx0WzBdLkZpbGVTaXplO1xyXG4gICAgICAgICAgICB0aGlzLmZpbGVSZXN1bHRNb2RlbC5wdXNoKGZpbGVSZXN1bHQpO1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0WzBdLkZpbGVQYXRoICE9IG51bGwgJiYgcmVzdWx0WzBdLkZpbGVQYXRoICE9IFwiXCIpXHJcbiAgICAgICAgICAgICAgdGhpcy5pbXBvcnREeW5hbWljSnNvbihyZXN1bHRbMF0uRmlsZVBhdGgpO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgdGhpcy5jbG9zZVVwbG9hZEZpbGVQb3B1cCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGltcG9ydER5bmFtaWNKc29uKGNvbmZpZ3VyZWRKc29uVVJMKSB7XHJcbiAgICB2YXIgaW1wb3J0Q29uZmlndXJhdGlvbk1vZGVsID0gbmV3IEltcG9ydENvbmZpZ3VyYXRpb25Nb2RlbCgpO1xyXG4gICAgaW1wb3J0Q29uZmlndXJhdGlvbk1vZGVsLmNvbmZpZ3VyYXRpb25VcmwgPSBjb25maWd1cmVkSnNvblVSTDtcclxuICAgIHRoaXMuaW1wb3J0aW5nSW5Qcm9ncmVzcyA9IHRydWU7XHJcbiAgICB0aGlzLmNvbW1vblNlcnZpY2UuU3lzdGVtSW1wb3J0Q29uZmlndXJhdGlvbihpbXBvcnRDb25maWd1cmF0aW9uTW9kZWwpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzcG9uc2Uuc3VjY2VzcyA9PT0gdHJ1ZSkge1xyXG4gICAgICAgIHRoaXMuY2xvc2VVcGxvYWRGaWxlUG9wdXAoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5zdWNjZXNzKFwiRGF0YSBpbXBvcnRlZCBzdWNjZXNzZnVsbHlcIik7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UuYXBpUmVzcG9uc2VNZXNzYWdlc1swXS5tZXNzYWdlKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmltcG9ydGluZ0luUHJvZ3Jlc3MgPSBmYWxzZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY2xvc2VTZWFyY2goKSB7XHJcbiAgICB0aGlzLnNlYXJjaFRleHQgPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgc2VhcmNoQ29tcGFuaWVzKGNvbXBhbmllcywgc2VhcmNoKSB7XHJcbiAgICBpZiAoc2VhcmNoID09IG51bGwgfHwgc2VhcmNoID09ICcnKSB7XHJcbiAgICAgIHJldHVybiBjb21wYW5pZXM7XHJcbiAgICB9IGVsc2UgaWYgKHNlYXJjaCAhPSBudWxsKSB7XHJcbiAgICAgIHNlYXJjaCA9IHNlYXJjaC50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICBzZWFyY2ggPSBzZWFyY2gudHJpbSgpO1xyXG4gICAgICBjb25zdCB0ZW1wID0gY29tcGFuaWVzLmZpbHRlcihkYXRhID0+XHJcbiAgICAgICAgZGF0YS5jb21wYW55TmFtZS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihzZWFyY2gpID4gLTFcclxuICAgICAgKVxyXG4gICAgICByZXR1cm4gdGVtcDtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIC8vIHRoaXMucHVibnViLnVuc3Vic2NyaWJlKHsgY2hhbm5lbHM6IFt0aGlzLmxvZ2luVXNlcmNoYW5uZWxOYW1lXSB9KTtcclxuICAgIC8vIHZhciBsb2dpbkNvbXBhbnlJZCA9IHRoaXMuY29va2llU2VydmljZS5nZXQoXCJDb21wYW55SWRcIik7XHJcbiAgICAvLyBpZiAodGhpcy5jaGFubmVsTGlzdCAhPSB1bmRlZmluZWQgfHwgdGhpcy5jaGFubmVsTGlzdCAhPSBudWxsKSB7XHJcbiAgICAvLyAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLmNoYW5uZWxMaXN0Lmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgLy8gICAgIHRoaXMucHVibnViLnVuc3Vic2NyaWJlKHtcclxuICAgIC8vICAgICAgIGNoYW5uZWxzOiBbKGxvZ2luQ29tcGFueUlkICsgJy0nICsgdGhpcy5jaGFubmVsTGlzdFtpbmRleF0uaWQpXVxyXG4gICAgLy8gICAgIH0pO1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyB9XHJcbiAgICAvLyAgdGhpcy5wdWJudWIudW5zdWJzY3JpYmUoe1xyXG4gICAgLy8gICBjaGFubmVsczogWygnQ2hhbm5lbFVwZGF0ZXMtJyArIGxvZ2luQ29tcGFueUlkKV1cclxuICAgIC8vIH0pO1xyXG4gICAgLy8gdGhpcy5wdWJudWIudW5zdWJzY3JpYmUoe1xyXG4gICAgLy8gICBjaGFubmVsczogWygnVXNlclVwZGF0ZXMtJyArIGxvZ2luQ29tcGFueUlkKV1cclxuICAgIC8vIH0pO1xyXG4gICAgdGhpcy5uZ0Rlc3Ryb3llZCQubmV4dCgpO1xyXG4gICAgdGhpcy5uZ0Rlc3Ryb3llZCQuY29tcGxldGUoKTtcclxuICB9XHJcbiAgb25OYXZpZ2F0ZVRvQmlsbGluZ1NjcmVlbigpIHtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcIi9zaGVsbC9BY2NvdW50c1wiXSk7XHJcbiAgfVxyXG5cclxuICBvbk5hdmlnYXRlVG9QcmljaW5nU2NyZWVuKCkge1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW1wiL3NoZWxsL3BheW1lbnRzLXBsYW5zXCJdKTtcclxuICB9XHJcbiAgZ2V0SW50cm9EZXRhaWxzKCkge1xyXG4gICAgdmFyIGludHJvID0gbmV3IEludHJvTW9kZWwoKTtcclxuICAgIGludHJvLnVzZXJJZCA9IHRoaXMuY29va2llU2VydmljZS5nZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5DdXJyZW50VXNlcklkKTtcclxuICAgIHRoaXMuY29tbW9uU2VydmljZS5nZXRJbnRyb0RldGFpbHMoaW50cm8pLnN1YnNjcmliZSgocmVzcG9uc2VEYXRhOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJlc3BvbnNlRGF0YS5zdWNjZXNzID09IGZhbHNlKSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZSA9IHJlc3BvbnNlRGF0YS5hcGlSZXNwb25zZU1lc3NhZ2VzWzBdLm1lc3NhZ2U7XHJcbiAgICAgICAgdGhpcy5hbnlPcGVyYXRpb25JblByb2dyZXNzID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IodGhpcy52YWxpZGF0aW9uTWVzc2FnZSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAocmVzcG9uc2VEYXRhLnN1Y2Nlc3MgPT0gdHJ1ZSkge1xyXG4gICAgICAgIGxldCBpbnRybyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oTG9jYWxTdG9yYWdlUHJvcGVydGllcy5JbnRyb01vZHVsZXMpKTtcclxuICAgICAgICBpZiAoIWludHJvKVxyXG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oTG9jYWxTdG9yYWdlUHJvcGVydGllcy5JbnRyb01vZHVsZXMsIEpTT04uc3RyaW5naWZ5KHJlc3BvbnNlRGF0YS5kYXRhKSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0VGVhbU1lbWJlcnMoKSB7XHJcbiAgICB2YXIgdGVhbU1lbWJlck1vZGVsO1xyXG4gICAgbGV0IGVudmlyb25tZW50ID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkVudmlyb25tZW50KSk7XHJcbiAgICB2YXIgdGVhbU1lbWJlck1vZGVsO1xyXG4gICAgdGVhbU1lbWJlck1vZGVsID0ge1xyXG4gICAgICBpc0ZvclRyYWNrZXI6IHRydWVcclxuICAgIH1cclxuICAgIHRlYW1NZW1iZXJNb2RlbC5pc0FyY2hpdmVkID0gZmFsc2U7XHJcbiAgICB0aGlzLmNvbW1vblNlcnZpY2UuZ2V0VGVhbUxlYWRzTGlzdCh0ZWFtTWVtYmVyTW9kZWwpLnN1YnNjcmliZSgocmVzcG9uc2VEYXRhOiBhbnkpID0+IHtcclxuICAgICAgbGV0IGVtcGxveWVlc0Ryb3BEb3duID0gcmVzcG9uc2VEYXRhLmRhdGE7XHJcbiAgICAgIGlmIChlbXBsb3llZXNEcm9wRG93biAmJiBlbXBsb3llZXNEcm9wRG93bi5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgdGhpcy5jb29raWVTZXJ2aWNlLnNldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkVuYWJsZVRlYW1EYXNoYm9hcmQsICd0cnVlJywgbnVsbCwgZW52aXJvbm1lbnQuY29va2llUGF0aCwgdGhpcy53aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsIGZhbHNlLCBcIlN0cmljdFwiKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmNvb2tpZVNlcnZpY2Uuc2V0KExvY2FsU3RvcmFnZVByb3BlcnRpZXMuRW5hYmxlVGVhbURhc2hib2FyZCwgJ2ZhbHNlJywgbnVsbCwgZW52aXJvbm1lbnQuY29va2llUGF0aCwgdGhpcy53aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsIGZhbHNlLCBcIlN0cmljdFwiKTtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcbn1cclxuIiwiPG1hdC10b29sYmFyIGNsYXNzPVwidG9wYmFyIHJlbW92ZS1wYWRkaW5nXCIgc3R5bGU9XCJiYWNrZ3JvdW5kOiNmZmZmZmYgIWltcG9ydGFudDsgXHJcbiAgICAgICAgICAgYm9yZGVyLWJvdHRvbToxcHggc29saWQgI2U1ZTdlYjsgXHJcbiAgICAgICAgICAgaGVpZ2h0OjY1cHg7IFxyXG4gICAgICAgICAgIHBhZGRpbmc6MCAyMHB4OyBcclxuICAgICAgICAgICB6LWluZGV4OjEyMDA7IFxyXG4gICAgICAgICAgIHBvc2l0aW9uOnJlbGF0aXZlO1wiPlxyXG5cclxuICAgIDwhLS0gTGVmdDogQXBwIE1lbnUgLS0+XHJcbiAgICA8ZGl2IGZ4RmxleD5cclxuICAgICAgICA8YXBwLW1lbnUgW3JlbG9hZF09XCJyZWxvYWRcIiAoaXNPcGVuZWQpPVwiaXNPcGVuZWQoJGV2ZW50KVwiIChvcGVuTmV3RGFzaGJvYXJkKT1cIm5hdmlnYXRlVG9VcmwoJGV2ZW50KVwiPjwvYXBwLW1lbnU+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIENlbnRlciAoZW1wdHkgcGxhY2Vob2xkZXIpIC0tPlxyXG4gICAgPGRpdiBmeEZsZXggZnhMYXlvdXQ9XCJyb3dcIiBmeEhpZGUueHMgZnhMYXlvdXRBbGlnbj1cImNlbnRlclwiPjwvZGl2PlxyXG5cclxuICAgIDwhLS0gUmlnaHQ6IENvbnRyb2xzIC0tPlxyXG4gICAgPGRpdiBmeEZsZXggZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwiZW5kIGNlbnRlclwiIHN0eWxlPVwiZ2FwOjEwcHg7XCI+XHJcblxyXG4gICAgICAgIDwhLS0gQ29tcGFueSBTZWxlY3RvciAtLT5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiY29tcGFuaWVzTGlzdCAhPSBudWxsICYmIGNvbXBhbmllc0xpc3QubGVuZ3RoID4gMVwiIGNsYXNzPVwiZmlsdGVyLWRhdGEgY3VzdG9tLWJveCBsYW5ndWFnZS1zZWN0aW9uXCJcclxuICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDoxODBweDsgcG9zaXRpb246cmVsYXRpdmU7XCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxyXG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBwbGFjZWhvbGRlcj1cIlwiIG5hbWU9XCJzZWxlY3RlZENvbXBhbnlcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkQ29tcGFueVwiXHJcbiAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cInNlbGVjdENvbXBhbnkoJGV2ZW50LnZhbHVlKVwiIHBhbmVsQ2xhc3M9XCJjb21wYW55LXNlbGVjdC1wYW5lbFwiPlxyXG5cclxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNlbGVjdGVkQ29tcGFueVwiIHN0eWxlPVwiZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGdhcDoxMHB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWF2YXRhciBbbmFtZV09XCJzZWxlY3RlZENvbXBhbnkuY29tcGFueU5hbWUgfCByZW1vdmVTcGVjaWFsQ2hhcmFjdGVyc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmeExheW91dEFsaWduPVwic3RhcnQgY2VudGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzcmNdPVwic2VsZWN0ZWRDb21wYW55LmNvbXBhbnlNaW5pTG9nbyB8IGZldGNoU2l6ZWRBbmRDYWNoZWRJbWFnZTogJzIwJzonJ1wiIFtpc1JvdW5kXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cIjIwXCI+PC9hcHAtYXZhdGFyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhbmd1YWdlLWRpc3BsYXlcIiBzdHlsZT1cImZvbnQtd2VpZ2h0OjYwMDsgb3ZlcmZsb3c6aGlkZGVuOyB0ZXh0LW92ZXJmbG93OmVsbGlwc2lzOyB3aGl0ZS1zcGFjZTpub3dyYXA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCg5MGRlZywjNWRlMGU2LCMwMDRhYWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgLXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6dGV4dDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgIC13ZWJraXQtdGV4dC1maWxsLWNvbG9yOnRyYW5zcGFyZW50O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jbGlwOnRleHQ7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBzZWxlY3RlZENvbXBhbnlOYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gU2VhcmNoIGJhciAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgZnhGbGV4IGNsYXNzPVwic2VhcmNoX2dvYWxpbnB1dCBtbC0xXCIgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwb3NpdGlvbjpzdGlja3k7IHRvcDowOyB6LWluZGV4OjE7IGJhY2tncm91bmQtY29sb3I6I2ZmZjsgcGFkZGluZzo2cHggOHB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZ1bGwtd2lkdGhcIiBzdHlsZT1cIndpZHRoOjEwMCU7IG1hcmdpbjowO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJzZWFyY2hfZ29hbFwiIG1hdElucHV0IHBsYWNlaG9sZGVyPVwie3snSFJNQU5BR0FNRU5ULlNFQVJDSCcgfCB0cmFuc2xhdGV9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlYXJjaFRleHRcIiBhdXRvY29tcGxldGU9XCJvZmZcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cInNlYXJjaFRleHRcIiBzdHlsZT1cImN1cnNvcjpwb2ludGVyXCIgKGNsaWNrKT1cImNsb3NlU2VhcmNoKClcIj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIE9wdGlvbnMgLS0+XHJcbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgY29tcGFueUxpc3Qgb2Ygc2VhcmNoQ29tcGFuaWVzKGNvbXBhbmllc0xpc3QsIHNlYXJjaFRleHQpXCIgW3ZhbHVlXT1cImNvbXBhbnlMaXN0XCJcclxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwie3tjb21wYW55TGlzdC5jb21wYW55TmFtZX19XCIgbWF0VG9vbHRpcENsYXNzPVwidG9vbHRpcENsYXNzLW1hdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjQwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIHN0eWxlPVwiZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtYXZhdGFyIFtuYW1lXT1cImNvbXBhbnlMaXN0LmNvbXBhbnlOYW1lIHwgcmVtb3ZlU3BlY2lhbENoYXJhY3RlcnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJjb21wYW55TGlzdC5jb21wYW55TWluaUxvZ28gfCBmZXRjaFNpemVkQW5kQ2FjaGVkSW1hZ2U6ICcyMCc6JydcIiBbaXNSb3VuZF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCIyMFwiPjwvYXBwLWF2YXRhcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1sZWZ0OjhweDtcIj57eyBjb21wYW55TGlzdC5jb21wYW55TmFtZSB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gU2V0dGluZ3MgLS0+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cImNhbkFjY2Vzc19mZWF0dXJlX1NldHRpbmdzIHx8IGNhbkFjY2Vzc19mZWF0dXJlX1ZpZXdSb2xlc1wiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBtYXRUb29sdGlwPVwie3sgJ1NIRUxMLlNFVFRJTkdTJyB8IHRyYW5zbGF0ZSB9fVwiIChjbGljayk9XCJuYXZpZ2F0ZVRvU2V0dGluZ3MoKVwiXHJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJyb3V0ZXIudXJsLmluY2x1ZGVzKCcvc2V0dGluZ3MnKSA/ICdpY29uX2FjdGl2ZV9jbGFzcycgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICBzdHlsZT1cImJhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwwLjYpOyBib3JkZXItcmFkaXVzOjEwcHg7XCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24gc3R5bGU9XCJiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCg5MGRlZywjNWRlMGU2LCMwMDRhYWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgLXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6dGV4dDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgIC13ZWJraXQtdGV4dC1maWxsLWNvbG9yOnRyYW5zcGFyZW50O1wiPnNldHRpbmdzPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gTXkgV29yayAtLT5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiY2FuQWNjZXNzX2ZlYXR1cmVfTXlQcm9qZWN0V29ya1wiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBtYXRUb29sdGlwPVwie3sgJ1NIRUxMLk1ZV09SSycgfCB0cmFuc2xhdGUgfX1cIiAoY2xpY2spPVwibmF2aWdhdGVUb1N0YXR1c1JlcG9ydCgpXCJcclxuICAgICAgICAgICAgICAgIHN0eWxlPVwiYmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LDAuNik7IGJvcmRlci1yYWRpdXM6MTBweDtcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdHlsZT1cImJhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDkwZGVnLCM1ZGUwZTYsIzAwNGFhZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAtd2Via2l0LWJhY2tncm91bmQtY2xpcDp0ZXh0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgLXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnQ7XCI+YXNzaWdubWVudDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIFRpbWVzaGVldCAtLT5cclxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBpZD1cImZlZWRUaW1lU2hlZXRDb21wb25lbnRcIiBtYXRUb29sdGlwPVwie3sgJ1NIRUxMLkxPR1RJTUUnIHwgdHJhbnNsYXRlfX1cIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwib3BlblRpbWVTaGVldCgpXCIgW3NhdFBvcG92ZXJBbmNob3JGb3JdPVwiZmVlZFRpbWVTaGVldFwiXHJcbiAgICAgICAgICAgIHN0eWxlPVwiYmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LDAuNik7IGJvcmRlci1yYWRpdXM6MTBweDtcIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uIHN0eWxlPVwiYmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoOTBkZWcsIzVkZTBlNiwjMDA0YWFkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAtd2Via2l0LWJhY2tncm91bmQtY2xpcDp0ZXh0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgIC13ZWJraXQtdGV4dC1maWxsLWNvbG9yOnRyYW5zcGFyZW50O1wiPmFjY2Vzc190aW1lPC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgPCEtLSBOb3RpZmljYXRpb25zIC0tPlxyXG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIG1hdFRvb2x0aXA9XCJ7eyAnU0hFTEwuTk9USUZJQ0FUSU9OUycgfCB0cmFuc2xhdGV9fVwiIChjbGljayk9XCJ0b2dnbGVOb3RpZmljKClcIlxyXG4gICAgICAgICAgICAqbmdJZj1cIm5ld05vdGlmaWNhdGlvbnNDb3VudCAhPSAwXCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm5vdGlmaWNhdGlvblwiXHJcbiAgICAgICAgICAgIHN0eWxlPVwicG9zaXRpb246cmVsYXRpdmU7IGJhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwwLjYpOyBib3JkZXItcmFkaXVzOjEwcHg7XCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbiBzdHlsZT1cImJhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDkwZGVnLCM1ZGUwZTYsIzAwNGFhZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgLXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6dGV4dDtcclxuICAgICAgICAgICAgICAgICAgICAgICAtd2Via2l0LXRleHQtZmlsbC1jb2xvcjp0cmFuc3BhcmVudDtcIj5ub3RpZmljYXRpb25zPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJuZXdOb3RpZmljYXRpb25zQ291bnQgIT0gMFwiIGNsYXNzPVwibm90aWZpY2F0aW9uLW51bWJlciBtYXQtYmctd2FyblwiXHJcbiAgICAgICAgICAgICAgICBzdHlsZT1cInBvc2l0aW9uOmFic29sdXRlOyB0b3A6LTJweDsgcmlnaHQ6LTJweDtcIj5cclxuICAgICAgICAgICAgICAgIHt7IG5ld05vdGlmaWNhdGlvbnNDb3VudCB9fVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPG1hdC1tZW51ICNub3RpZmljYXRpb249XCJtYXRNZW51XCI+XHJcbiAgICAgICAgICAgIDxhcHAtbm90aWZpY2F0aW9ucz48L2FwcC1ub3RpZmljYXRpb25zPlxyXG4gICAgICAgIDwvbWF0LW1lbnU+XHJcblxyXG4gICAgICAgIDwhLS0gUHJvZmlsZSAtLT5cclxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwiYWNjb3VudE1lbnVcIiAqbmdJZj1cImF1dGhlbnRpY2F0ZWRVc2VyUmVjb3JkXCIgc3R5bGU9XCJ3aWR0aDozMnB4OyBoZWlnaHQ6MzJweDsgYmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LDAuNik7XHJcbiAgICAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOjUwJTsgYm9yZGVyOjFweCBzb2xpZCAjZTVlN2ViO1xyXG4gICAgICAgICAgICAgICAgICAgZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGp1c3RpZnktY29udGVudDpjZW50ZXI7IG92ZXJmbG93OmhpZGRlbjtcIj5cclxuICAgICAgICAgICAgPGltZyAqbmdJZj1cImF1dGhlbnRpY2F0ZWRVc2VyUmVjb3JkLnByb2ZpbGVJbWFnZVwiXHJcbiAgICAgICAgICAgICAgICBbc3JjXT1cImF1dGhlbnRpY2F0ZWRVc2VyUmVjb3JkLnByb2ZpbGVJbWFnZSB8IGZldGNoU2l6ZWRBbmRDYWNoZWRJbWFnZTogJzYwJzonJ1wiIGFsdD1cInByb2ZpbGUgaW1hZ2VcIlxyXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDoyOHB4OyBoZWlnaHQ6MjhweDsgYm9yZGVyLXJhZGl1czo1MCU7XCIgLz5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFhdXRoZW50aWNhdGVkVXNlclJlY29yZC5wcm9maWxlSW1hZ2VcIj5cclxuICAgICAgICAgICAgICAgIDxhcHAtYXZhdGFyIFtuYW1lXT1cImF1dGhlbnRpY2F0ZWRVc2VyUmVjb3JkLmZ1bGxOYW1lIHwgcmVtb3ZlU3BlY2lhbENoYXJhY3RlcnNcIiBbaXNSb3VuZF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICBzaXplPVwiMjZcIj48L2FwcC1hdmF0YXI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbjwvbWF0LXRvb2xiYXI+XHJcblxyXG48IS0tIFRpbWVzaGVldCBQb3BvdmVyIC0tPlxyXG48c2F0LXBvcG92ZXIgI2ZlZWRUaW1lU2hlZXQgW2F1dG9Gb2N1c109XCJmYWxzZVwiIGhhc0JhY2tkcm9wIFtyZXN0b3JlRm9jdXNdPVwiZmFsc2VcIiBbaW50ZXJhY3RpdmVDbG9zZV09XCJ0cnVlXCJcclxuICAgIHNjcm9sbFN0cmF0ZWd5PVwicmVwb3NpdGlvblwiIHZlcnRpY2FsQWxpZ249XCJiZWxvd1wiIGhvcml6b250YWxBbGlnbj1cImJlZm9yZVwiPlxyXG4gICAgPGFwcC1mZWVkLXRpbWUgKGNsb3NlRmVlZFRpbWVTaGVldFBvcHVwKT1cImNsb3NlRmVlZFRpbWVTaGVldCgpXCIgW2lzRmVlZFRpbWVTaGVldF09XCJpc0ZlZWRUaW1lU2hlZXRcIj48L2FwcC1mZWVkLXRpbWU+XHJcbjwvc2F0LXBvcG92ZXI+XHJcblxyXG48IS0tIFByb2ZpbGUgTWVudSAtLT5cclxuPG1hdC1tZW51ICNhY2NvdW50TWVudT1cIm1hdE1lbnVcIj5cclxuICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwibmF2aWdhdGVUb1Byb2ZpbGUoKVwiPlxyXG4gICAgICAgIDxtYXQtaWNvbj5hY2NvdW50X2JveDwvbWF0LWljb24+XHJcbiAgICAgICAgPHNwYW4+e3sgJ1NIRUxMLlBST0ZJTEUnIHwgdHJhbnNsYXRlfX08L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwib25OYXZpZ2F0ZVRvQmlsbGluZ1NjcmVlbigpXCIgKm5nSWY9XCJjYW5BY2Nlc3NfZmVhdHVyZV9NYW5hZ2VBY2NvdW50c0FuZEJpbGxpbmdcIj5cclxuICAgICAgICA8bWF0LWljb24+YWNjb3VudF9iYWxhbmNlPC9tYXQtaWNvbj5cclxuICAgICAgICA8c3Bhbj5BY2NvdW50ICYgQmlsbGluZzwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJvbk5hdmlnYXRlVG9QcmljaW5nU2NyZWVuKClcIiAqbmdJZj1cImNhbkFjY2Vzc19mZWF0dXJlX01hbmFnZUFjY291bnRzQW5kQmlsbGluZ1wiPlxyXG4gICAgICAgIDxtYXQtaWNvbj5hY2NvdW50X2JhbGFuY2Vfd2FsbGV0PC9tYXQtaWNvbj5cclxuICAgICAgICA8c3Bhbj5QcmljaW5nICYgRmVhdHVyZXM8L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwib25TaWdub3V0KClcIj5cclxuICAgICAgICA8bWF0LWljb24+ZXhpdF90b19hcHA8L21hdC1pY29uPlxyXG4gICAgICAgIDxzcGFuPnt7ICdTSEVMTC5TSUdOT1VUJyB8IHRyYW5zbGF0ZX19PC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiZmVlZEJhY2tQb3BPdmVyLnRvZ2dsZSgpO29wZW5GZWVkQmFja0RpYWxvZygpXCI+XHJcbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiZmVlZGJhY2staWNvblwiIFtzYXRQb3BvdmVyQW5jaG9yRm9yXT1cImZlZWRCYWNrUG9wT3ZlclwiPlxyXG4gICAgICAgICAgICBzZW50aW1lbnRfc2F0aXNmaWVkX2FsdFxyXG4gICAgICAgIDwvbWF0LWljb24+XHJcbiAgICAgICAgPHNwYW4+di17e2FwcGxpY2F0aW9uVmVyc2lvbn19PC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbjwvbWF0LW1lbnU+XHJcblxyXG48IS0tIEZlZWRiYWNrIFBvcG92ZXIgLS0+XHJcbjxzYXQtcG9wb3ZlciAjZmVlZEJhY2tQb3BPdmVyIHZlcnRpY2FsQWxpZ249XCJiZWxvd1wiIGhhc0JhY2tkcm9wIGJhY2tkcm9wQ2xhc3M9XCJiYWNrZHJvcC1jb2xvclwiXHJcbiAgICBbaW50ZXJhY3RpdmVDbG9zZV09XCJmYWxzZVwiIGhvcml6b250YWxBbGlnbj1cImVuZFwiPlxyXG4gICAgPGFwcC1zdWJtaXQtZmVlZGJhY2sgKm5nSWY9XCJpc0ZlZWRCYWNrRGlhbG9nXCIgKGNsb3NlRGlhbG9nKT1cImNsb3NlRmVlZEJhY2tsb2dEaWFsb2coKVwiPjwvYXBwLXN1Ym1pdC1mZWVkYmFjaz5cclxuPC9zYXQtcG9wb3Zlcj4iXX0=
1958
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVyLXNpZGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc2hlbGwtbW9kdWxlLWNvbXBvbmVudHMvc2hlbGwtY29tcG9uZW50cy9zcmMvbGliL3NoZWxsLWNvbXBvbmVudHMvY29tcG9uZW50cy9oZWFkZXItc2lkZS9oZWFkZXItc2lkZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zaGVsbC1tb2R1bGUtY29tcG9uZW50cy9zaGVsbC1jb21wb25lbnRzL3NyYy9saWIvc2hlbGwtY29tcG9uZW50cy9jb21wb25lbnRzL2hlYWRlci1zaWRlL2hlYWRlci1zaWRlLnRlbXBsYXRlLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBcUUsMkJBQTJCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUNuTCxPQUFPLEVBQ0wsU0FBUyxFQUNULE1BQU0sRUFDTixLQUFLLEVBRUwsU0FBUyxFQUNULE1BQU0sRUFDTixZQUFZLEVBR00sWUFBWSxFQUMvQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLHNCQUFzQixFQUN0QiwyQkFBMkIsRUFDM0Isa0JBQWtCLEVBQ2xCLGtDQUFrQyxFQUNsQyxzQkFBc0IsR0FDdkIsTUFBTSxrQ0FBa0MsQ0FBQTtBQUl6QyxPQUFPLEVBQUUsTUFBTSxFQUFTLE1BQU0sYUFBYSxDQUFDO0FBSTVDLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUNoSCxPQUFPLEVBQUUsb0NBQW9DLEVBQUUsaUNBQWlDLEVBQUUsdUJBQXVCLEVBQUUsd0JBQXdCLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUUzTixPQUFPLEtBQUssb0JBQW9CLE1BQU0sNEJBQTRCLENBQUM7QUFDbkUsT0FBTyx1REFBdUQsQ0FBQztBQUMvRCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUVuRyxPQUFPLEVBQVcsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLCtEQUErRCxDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFPM0UsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFLOUYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRW5FLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBR3BHLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzVFLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQzNGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMvRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUN2RixPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNqRyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUN4RixPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUNyRyxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUMzRixPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNqRyxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUNuRyxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUM3RixPQUFPLEVBQUUsb0NBQW9DLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUcvRixPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDMUUsT0FBTyxFQUFzQixPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUQsT0FBTyxFQUFFLHlDQUF5QyxFQUFFLE1BQU0saURBQWlELENBQUM7QUFDNUcsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdkYsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDdEYsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sK0RBQStELENBQUM7QUFDbkgsT0FBTyxFQUFhLGVBQWUsRUFBMkMsTUFBTSwrQ0FBK0MsQ0FBQztBQUdwSSx1RUFBdUU7QUFDdkUsT0FBTyxTQUFTLE1BQU0sYUFBYSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDckUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFLbkYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFJekUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3JELE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUN6RXBFLCtCQUFpRjtJQUM3RSxpQ0FHMkI7OztJQUMzQixnQ0FJd0I7SUFDcEIsWUFDSjtJQUFBLGlCQUFPO0lBQ1gsaUJBQU07OztJQVhVLGVBQThEO0lBQTlELGdGQUE4RCxnRkFBQSxpQkFBQTtJQVN0RSxlQUNKO0lBREksNERBQ0o7Ozs7SUFXSixvQ0FBNEU7SUFBeEIseU1BQXVCO0lBQUMscUJBQUs7SUFBQSxpQkFBVzs7O0lBSWhHLHNDQUU4QjtJQUMxQiwrQkFBc0U7SUFDbEUsaUNBRTJCOzs7SUFDM0IsK0JBQThCO0lBQUEsWUFBNkI7SUFBQSxpQkFBTTtJQUNyRSxpQkFBTTtJQUNWLGlCQUFhOzs7SUFSVCxtRUFBd0M7SUFEdUMsdUNBQXFCO0lBSXBGLGVBQTBEO0lBQTFELHdFQUEwRCx3RUFBQSxpQkFBQTtJQUd4QyxlQUE2QjtJQUE3QixpREFBNkI7Ozs7SUF2QzNFLCtCQUMrRTtJQUFuQyx5R0FBUyx3QkFBd0IsSUFBQztJQUMxRSxzQ0FDc0Y7SUFEcEMsZ09BQTZCLDBOQUFBO0lBRzNFLDBDQUFvQjtJQUNoQiw0RUFZTTtJQUNWLGlCQUFxQjtJQUdyQiwrQkFDdUY7SUFDbkYsMENBQWlFO0lBQzdELGlDQUNnRDtJQUE1QyxzTkFBd0I7O0lBRDVCLGlCQUNnRDtJQUNwRCxpQkFBaUI7SUFDakIscUZBQTRGO0lBQ2hHLGlCQUFNO0lBR04sMEZBU2E7SUFDakIsaUJBQWE7SUFDakIsaUJBQU07OztJQXpDZ0QsZUFBNkI7SUFBN0IsZ0RBQTZCO0lBSWpFLGVBQXFCO0lBQXJCLDZDQUFxQjtJQW1CYSxlQUFtRDtJQUFuRCxvRkFBbUQ7SUFDbkYsMkNBQXdCO0lBRXJCLGVBQWdCO0lBQWhCLHdDQUFnQjtJQUlLLGVBQTZDO0lBQTdDLHlGQUE2Qzs7OztJQWN6RiwyQkFBdUU7SUFDbkUsa0NBRWtFO0lBRk0sa01BQThCOztJQUdsRyxtQ0FFK0M7SUFBQSx3QkFBUTtJQUFBLGlCQUFXO0lBQ3RFLGlCQUFTO0lBQ2IsaUJBQU07OztJQVBzQixlQUErQztJQUEvQyw4RUFBK0M7SUFDbkUsNEZBQXVFOzs7O0lBUy9FLDJCQUE2QztJQUN6QyxrQ0FDa0U7SUFESSxzTUFBa0M7O0lBRXBHLG1DQUUrQztJQUFBLDBCQUFVO0lBQUEsaUJBQVc7SUFDeEUsaUJBQVM7SUFDYixpQkFBTTs7SUFOc0IsZUFBNkM7SUFBN0MsNEVBQTZDOzs7SUF3QnJFLGdDQUNxRDtJQUNqRCxZQUNKO0lBQUEsaUJBQU87OztJQURILGVBQ0o7SUFESSw4REFDSjs7OztJQVRKLGtDQUVxRjtJQUZULGlNQUF5Qjs7SUFHakcsbUNBRWlEO0lBQUEsNkJBQWE7SUFBQSxpQkFBVztJQUN6RSxpRkFHTztJQUNYLGlCQUFTOzs7O0lBVmUsbUZBQW1EO0lBQ3BDLHVDQUFrQztJQUs5RCxlQUFnQztJQUFoQyx3REFBZ0M7OztJQWF2QywwQkFFMEQ7Ozs7SUFEdEQsb0hBQWdGOzs7SUFFcEYsMkJBQW1EO0lBQy9DLGlDQUMyQjs7SUFDL0IsaUJBQU07OztJQUZVLGVBQW1FO0lBQW5FLHFGQUFtRSxpQkFBQTs7O0lBUHZGLGtDQUV1RjtJQUNuRiwrRUFFMEQ7SUFDMUQsOEVBR007SUFDVixpQkFBUzs7OztJQVZlLHVDQUFpQztJQUcvQyxlQUEwQztJQUExQyxrRUFBMEM7SUFHMUMsZUFBMkM7SUFBM0MsbUVBQTJDOzs7O0lBb0J6RCxrQ0FBK0c7SUFBekYsNk1BQXFDO0lBQ3ZELGdDQUFVO0lBQUEsK0JBQWU7SUFBQSxpQkFBVztJQUNwQyw0QkFBTTtJQUFBLGlDQUFpQjtJQUFBLGlCQUFPO0lBQ2xDLGlCQUFTOzs7O0lBQ1Qsa0NBQStHO0lBQXpGLDZNQUFxQztJQUN2RCxnQ0FBVTtJQUFBLHNDQUFzQjtJQUFBLGlCQUFXO0lBQzNDLDRCQUFNO0lBQUEsa0NBQWtCO0lBQUEsaUJBQU87SUFDbkMsaUJBQVM7Ozs7SUFpQlQsK0NBQXVGO0lBQXpDLGdQQUF3QztJQUFDLGlCQUFzQjs7QUQ1RGpILGVBQWU7QUFnQmYsTUFBTSxPQUFPLG1CQUFvQixTQUFRLHNCQUFzQjtJQStHN0QsWUFDVSxpQkFBMkMsRUFDM0MsWUFBMEIsRUFDMUIsVUFBOEIsRUFDOUIsTUFBcUIsRUFDdEIsU0FBMkIsRUFDM0IsTUFBYyxFQUNiLGFBQTRCLEVBQzdCLE1BQWlCLEVBQ2hCLGFBQTRCLEVBQzVCLEtBQW1CLEVBQ25CLE1BQXFCLEVBQ3JCLFdBQWtDLEVBQ2xDLGNBQXVCLEVBQ3ZCLEtBQXdCLEVBQ3hCLE1BQXFCLEVBQ3JCLHNCQUE4QyxFQUM5QyxtQkFBd0MsRUFDeEMsV0FBd0IsRUFDeEIsT0FBdUIsRUFDUCxNQUFjO1FBRXRDLEtBQUssRUFBRSxDQUFDO1FBckJBLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBMEI7UUFDM0MsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsZUFBVSxHQUFWLFVBQVUsQ0FBb0I7UUFDOUIsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUN0QixjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUMzQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2Isa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDN0IsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUNoQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixVQUFLLEdBQUwsS0FBSyxDQUFjO1FBQ25CLFdBQU0sR0FBTixNQUFNLENBQWU7UUFDckIsZ0JBQVcsR0FBWCxXQUFXLENBQXVCO1FBQ2xDLG1CQUFjLEdBQWQsY0FBYyxDQUFTO1FBQ3ZCLFVBQUssR0FBTCxLQUFLLENBQW1CO1FBQ3hCLFdBQU0sR0FBTixNQUFNLENBQWU7UUFDckIsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUM5Qyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLFlBQU8sR0FBUCxPQUFPLENBQWdCO1FBQ1AsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQTVIOUIsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFFM0MsZ0JBQVcsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQ3RCLG1CQUFjLEdBQUcsY0FBYyxDQUFDLFNBQVMsQ0FBQztRQUMxQyx5QkFBb0IsR0FBRztZQUM1QjtnQkFDRSxJQUFJLEVBQUUsSUFBSTtnQkFDVixJQUFJLEVBQUUsSUFBSTthQUNYO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLElBQUk7Z0JBQ1YsSUFBSSxFQUFFLElBQUk7YUFDWDtZQUNEO2dCQUNFLElBQUksRUFBRSxJQUFJO2dCQUNWLElBQUksRUFBRSxJQUFJO2FBQ1g7WUFDRDtnQkFDRSxJQUFJLEVBQUUsSUFBSTtnQkFDVixJQUFJLEVBQUUsSUFBSTthQUNYO1NBQ0YsQ0FBQztRQVNLLGlCQUFZLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUNwQyxxQkFBZ0IsR0FBRztZQUNqQixTQUFTLEVBQUUsSUFBSTtZQUNmLE1BQU0sRUFBRSxJQUFJO1lBQ1osTUFBTSxFQUFFLElBQUk7WUFDWixVQUFVLEVBQUUsSUFBSTtTQUNqQixDQUFDO1FBTUYsc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQzFCLG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBRWpDLGtCQUFhLEdBQUcsRUFBRSxDQUFDO1FBS25CLG9CQUFlLEdBQVcsRUFBRSxDQUFDO1FBSTdCLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBQzdCLG9CQUFlLEdBQVcsNEJBQTRCLENBQUM7UUFDdkQsbUJBQWMsR0FBVyxFQUFFLENBQUM7UUFJNUIsbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFDaEMsZUFBVSxHQUFZLEtBQUssQ0FBQztRQUM1QixrQkFBYSxHQUFZLElBQUksQ0FBQztRQWtCOUIsVUFBSyxHQUFXLEVBQUUsQ0FBQztRQUluQixpQkFBWSxHQUFHLENBQUMsQ0FBQztRQUVqQixjQUFTLEdBQVcsQ0FBQyxDQUFDO1FBQ3RCLGdCQUFXLEdBQVcsQ0FBQyxDQUFDO1FBQ3hCLHNCQUFpQixHQUFHLEVBQUUsQ0FBQztRQUN2QiwwQkFBcUIsR0FBWSxLQUFLLENBQUM7UUFDdkMsNEJBQXVCLEdBQVksS0FBSyxDQUFDO1FBRXpDLGVBQVUsR0FBVyxJQUFJLENBQUM7UUFNMUIsZ0JBQVcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUl0RCwwQkFBcUIsR0FBUSxDQUFDLENBQUM7UUF5QjdCLDhDQUE4QztRQUM5QyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFekgsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDM0MsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDekIsZ0NBQWdDO1FBQ2hDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxFQUN6STtZQUNBLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1NBQzFCO1FBQ0QsSUFBSSxjQUFjLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDbkYsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO1FBQzdGLElBQUksaUJBQWlCLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQztRQUUzQyxJQUFJLGNBQWMsSUFBSSxFQUFFLElBQUksY0FBYyxJQUFJLElBQUksSUFBSSxjQUFjLElBQUksU0FBUyxJQUFJLGNBQWMsS0FBSyxNQUFNLElBQUksY0FBYyxLQUFLLFdBQVcsRUFBRTtZQUNoSixJQUFJLGlCQUFpQixJQUFJLEVBQUUsSUFBSSxpQkFBaUIsSUFBSSxJQUFJLElBQUksaUJBQWlCLElBQUksU0FBUyxJQUFJLGlCQUFpQixLQUFLLE1BQU0sSUFBSSxpQkFBaUIsS0FBSyxXQUFXLEVBQUU7Z0JBQy9KLGNBQWMsR0FBRyxJQUFJLENBQUM7YUFDdkI7aUJBQ0k7Z0JBQ0gsY0FBYyxHQUFHLGlCQUFpQixDQUFDO2FBQ3BDO1NBQ0Y7UUFDRCxJQUFJLENBQUMsV0FBVyxHQUFHLGNBQWMsQ0FBQztRQUNsQyxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUN2RixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzlKLElBQUksQ0FBQyxjQUFjO2FBQ2hCLElBQUksQ0FDSCxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM1QixNQUFNLENBQUMseUJBQXlCLENBQUMsbUNBQW1DLENBQUMsRUFDckUsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNQLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBQ25CLDBGQUEwRjtZQUMxRixvREFBb0Q7WUFDcEQsOERBQThEO1lBQzlELFFBQVE7WUFDUixNQUFNO1lBQ04sK0ZBQStGO1lBQy9GLG1CQUFtQjtZQUNuQix1SEFBdUg7WUFDdkgsc0RBQXNEO1lBQ3RELDZDQUE2QztZQUM3Qyw4REFBOEQ7WUFDOUQsUUFBUTtZQUNSLFFBQVE7WUFDUixNQUFNO1lBQ04sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdEIsSUFBSSxpQ0FBaUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQy9MLE1BQU0sYUFBYSxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDbkYsSUFBSSxDQUFDLGlDQUFpQyxFQUFFO2dCQUN0QyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO2FBQ3hDO2lCQUFNLElBQUksYUFBYSxJQUFJLE1BQU0sSUFBSSxhQUFhLElBQUksSUFBSSxFQUFFO2dCQUMzRCxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxpQ0FBaUMsR0FBRyxpQ0FBaUMsR0FBRyxRQUFRLEdBQUcsYUFBYSxDQUFDLENBQUM7YUFDN0g7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsaUNBQWlDLEdBQUcsaUNBQWlDLENBQUMsQ0FBQzthQUNsRztRQUVILENBQUMsQ0FBQyxDQUNIO2FBQ0EsU0FBUyxFQUFFLENBQUM7UUFHZixJQUFJLENBQUMsY0FBYzthQUNoQixJQUFJLENBQ0gsU0FBUyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDNUIsTUFBTSxDQUFDLHlCQUF5QixDQUFDLDRCQUE0QixDQUFDLEVBQzlELEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDUCxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsc0JBQXNCLENBQUMsYUFBYSxDQUFDLEVBQUU7b0JBQ2xFLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLGFBQWEsQ0FBQyxDQUFDO29CQUNuRixtREFBbUQ7b0JBQ25ELE1BQU0sb0NBQW9DLEdBQUcsWUFBWSxDQUFDLHVCQUF1QixHQUFHLGFBQWEsQ0FBQztvQkFDbEcsTUFBTSw4Q0FBOEMsR0FBRyxZQUFZLENBQUMsOEJBQThCLEdBQUcsYUFBYSxDQUFDO29CQUNuSCxNQUFNLDBDQUEwQyxHQUFHLFlBQVksQ0FBQywwQkFBMEIsR0FBRyxhQUFhLENBQUM7b0JBQzNHLE1BQU0sMkNBQTJDLEdBQUcsWUFBWSxDQUFDLDZCQUE2QixHQUFHLGFBQWEsQ0FBQztvQkFDL0csTUFBTSxvQ0FBb0MsR0FBRyxZQUFZLENBQUMsdUJBQXVCLEdBQUcsYUFBYSxDQUFDO29CQUNsRyxNQUFNLG9DQUFvQyxHQUFHLFlBQVksQ0FBQyxrQkFBa0IsR0FBRyxhQUFhLENBQUM7b0JBQzdGLE1BQU0sMkNBQTJDLEdBQUcsWUFBWSxDQUFDLHlCQUF5QixHQUFHLGFBQWEsQ0FBQztvQkFDM0csTUFBTSxrQ0FBa0MsR0FBRyxZQUFZLENBQUMsOEJBQThCLEdBQUcsYUFBYSxDQUFDO29CQUN2RyxNQUFNLHFDQUFxQyxHQUFHLFlBQVksQ0FBQyxtQ0FBbUMsR0FBRyxhQUFhLENBQUM7b0JBQy9HLE1BQU0sa0NBQWtDLEdBQUcsWUFBWSxDQUFDLGdDQUFnQyxHQUFHLGFBQWEsQ0FBQztvQkFDekcsTUFBTSwrQ0FBK0MsR0FBRyxZQUFZLENBQUMscURBQXFELEdBQUcsYUFBYSxDQUFDO29CQUMzSSxPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixHQUFHLG9DQUFvQyxDQUFDLENBQUM7b0JBQ3RFLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEdBQUcsOENBQThDLENBQUMsQ0FBQztvQkFDaEYsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsR0FBRywwQ0FBMEMsQ0FBQyxDQUFDO29CQUM1RSxPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixHQUFHLG9DQUFvQyxDQUFDLENBQUM7b0JBQ3JFLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEdBQUcsb0NBQW9DLENBQUMsQ0FBQztvQkFDckUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsR0FBRywyQ0FBMkMsQ0FBQyxDQUFDO29CQUM1RSxPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixHQUFHLGtDQUFrQyxDQUFDLENBQUM7b0JBQ25FLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEdBQUcscUNBQXFDLENBQUMsQ0FBQztvQkFDdEUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsR0FBRyxrQ0FBa0MsQ0FBQyxDQUFDO29CQUNuRSxPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixHQUFHLCtDQUErQyxDQUFDLENBQUM7b0JBQ2hGLE1BQU0sQ0FBQyxTQUFTLENBQUM7d0JBQ2YsUUFBUSxFQUFFLENBQUMsb0NBQW9DLEVBQUUsOENBQThDOzRCQUM3RiwwQ0FBMEMsRUFBRSwyQ0FBMkM7NEJBQ3ZGLG9DQUFvQyxFQUFFLG9DQUFvQyxFQUFFLEFBQUQ7NEJBQzNFLDJDQUEyQyxFQUFFLGtDQUFrQzs0QkFDL0UscUNBQXFDLEVBQUUsa0NBQWtDLEVBQUUsK0NBQStDLENBQUM7cUJBQzlILENBQUMsQ0FBQztvQkFFSCxnQ0FBZ0M7aUJBQ2pDO3FCQUFNO29CQUNMLE9BQU8sQ0FBQyxHQUFHLENBQUMsaURBQWlELENBQUMsQ0FBQztpQkFDaEU7Z0JBRUQsSUFBSSxpQ0FBaUMsR0FBRyxZQUFZLENBQUMsbUJBQW1CLEdBQUcsc0NBQXNDLENBQUM7Z0JBQ2xILE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEdBQUcsaUNBQWlDLENBQUMsQ0FBQztnQkFDbkUsTUFBTSxDQUFDLFNBQVMsQ0FBQztvQkFDZixRQUFRLEVBQUUsQ0FBQyxpQ0FBaUMsQ0FBQztpQkFDOUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVwQixJQUFJLENBQUMsY0FBYzthQUNoQixJQUFJLENBQ0gsU0FBUyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDNUIsTUFBTSxDQUFDLHdCQUF3QixDQUFDLG9DQUFvQyxDQUFDLEVBQ3JFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDUCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7WUFDdkYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ2hDLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDO2dCQUN2QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxtQkFBbUIsQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO2dCQUN0TSxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRTtvQkFDZCxzR0FBc0c7b0JBQ3RHLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLGNBQWMsQ0FBQztvQkFDdkUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7aUJBRXJGO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFTCxDQUFDLENBQUMsQ0FDSDthQUNBLFNBQVMsRUFBRSxDQUFDO1FBRWYsc0JBQXNCO1FBQ3RCLFdBQVc7UUFDWCxvQ0FBb0M7UUFDcEMsaURBQWlEO1FBQ2pELDZCQUE2QjtRQUM3Qix3REFBd0Q7UUFDeEQsb0NBQW9DO1FBQ3BDLFNBQVM7UUFDVCxNQUFNO1FBQ04sa0JBQWtCO1FBRWxCLElBQUksQ0FBQyxjQUFjO2FBQ2hCLElBQUksQ0FDSCxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM1QixNQUFNLENBQUMsa0JBQWtCLENBQUMsK0JBQStCLENBQUMsRUFDMUQsR0FBRyxDQUFDLENBQUMsTUFBVyxFQUFFLEVBQUU7WUFDbEIsSUFBSSxDQUFDLDRCQUE0QixFQUFFLENBQUM7UUFFdEMsQ0FBQyxDQUFDLENBQ0g7YUFDQSxTQUFTLEVBQUUsQ0FBQztRQUNmLElBQUksQ0FBQyxjQUFjO2FBQ2hCLElBQUksQ0FDSCxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM1QixNQUFNLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCLENBQUMsRUFDM0MsR0FBRyxDQUFDLENBQUMsTUFBVyxFQUFFLEVBQUU7WUFDbEIsSUFBSSxjQUFjLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLGNBQWMsQ0FBQztZQUM5QyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FDSDthQUNBLFNBQVMsRUFBRSxDQUFDO1FBQ2YsSUFBSSxDQUFDLGNBQWM7YUFDaEIsSUFBSSxDQUNILFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzVCLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQywrQkFBK0IsQ0FBQyxFQUMxRCxHQUFHLENBQUMsQ0FBQyxNQUFXLEVBQUUsRUFBRTtZQUNsQixJQUFJLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBQ3RELElBQUksY0FBYyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3pELElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO2dCQUNsQixPQUFPLEVBQUUsQ0FBQyxDQUFDLGNBQWMsR0FBRyxHQUFHLEdBQUcsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ2hFLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDO2FBQzVDLEVBQUUsVUFBVSxNQUFNLEVBQUUsUUFBUTtnQkFDM0Isc0JBQXNCO2dCQUN0Qix3QkFBd0I7WUFDMUIsQ0FBQyxDQUFDLENBQUE7UUFDSixDQUFDLENBQUMsQ0FDSDthQUNBLFNBQVMsRUFBRSxDQUFDO1FBR2YsSUFBSSxDQUFDLGNBQWM7YUFDaEIsSUFBSSxDQUNILFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzVCLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxzQkFBc0IsQ0FBQyxFQUNqRCxHQUFHLENBQUMsQ0FBQyxNQUFXLEVBQUUsRUFBRTtZQUNsQixJQUFJLG9CQUFvQixHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQztZQUN2RCxJQUFJLGFBQWEsR0FBRyxJQUFJLG9CQUFvQixFQUFFLENBQUM7WUFDL0MsYUFBYSxDQUFDLEtBQUssR0FBRyxvQkFBb0IsQ0FBQyxLQUFLLENBQUM7WUFDakQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsRUFBRSxhQUFhLENBQUMsQ0FBQztZQUNqRCx1QkFBdUI7WUFDdkIsK0RBQStEO1lBQy9ELDRDQUE0QztZQUM1QyxLQUFLO1FBQ1AsQ0FBQyxDQUFDLENBQ0g7YUFDQSxTQUFTLEVBQUUsQ0FBQztRQUNmLE1BQU0sWUFBWSxHQUFHLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDL0IsT0FBTyxDQUFDLEdBQUcsQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO1lBQ3pELDRDQUE0QztZQUM1QyxJQUFJO2dCQUNGLGdEQUFnRDtnQkFDaEQsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLFFBQVEsRUFBRTtvQkFDeEMsSUFBSSxtQkFBMkIsQ0FBQztvQkFDaEMsSUFBSSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDdkQsSUFBSSxvQkFBb0IsQ0FBQyxXQUFXLElBQUksb0JBQW9CLENBQUMsUUFBUSxJQUFJLG9CQUFvQixDQUFDLFdBQVcsRUFBRTt3QkFDekcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSx1QkFBdUIsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7cUJBQ3hFO3lCQUNJLElBQUksb0JBQW9CLENBQUMsb0JBQW9CLElBQUksSUFBSTt3QkFDeEQsb0JBQW9CLENBQUMsa0JBQWtCLElBQUksSUFBSTt3QkFDL0Msb0JBQW9CLENBQUMsZUFBZSxJQUFJLElBQUksSUFBSSxvQkFBb0IsQ0FBQyxlQUFlLElBQUksSUFBSSxFQUFFO3dCQUM5RixJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFOzRCQUM3RCxJQUFJLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7NEJBQ2pDLElBQUksY0FBYyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDOzRCQUN6RCxJQUFJLFdBQVcsR0FBRyxjQUFjLEdBQUcsR0FBRyxHQUFHLG9CQUFvQixDQUFDLFNBQVMsQ0FBQzs0QkFDeEUsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxDQUFDOzRCQUNwRixJQUFJLEtBQUssSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGVBQWUsSUFBSSxJQUFJLElBQUksb0JBQW9CLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxFQUFFO2dDQUNqSCxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztvQ0FDcEIsUUFBUSxFQUFFLENBQUMsV0FBVyxDQUFDO2lDQUN4QixDQUFDLENBQUE7NkJBQ0g7aUNBQU07Z0NBQ0wsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLEVBQUU7b0NBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7d0NBQ3RCLFFBQVEsRUFBRSxDQUFDLFdBQVcsQ0FBQztxQ0FDeEIsQ0FBQyxDQUFBO2lDQUNIOzZCQUNGOzRCQUNELElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksa0NBQWtDLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO3dCQUNwRixDQUFDLENBQUMsQ0FBQztxQkFDSjtvQkFFRCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksT0FBTyxJQUFJLG9CQUFvQixDQUFDLFdBQVcsSUFBSSxVQUFVLElBQUksb0JBQW9CLENBQUMsSUFBSSxJQUFJLElBQUksSUFBSSxvQkFBb0IsQ0FBQyxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxJQUFJLElBQUksSUFBSSxvQkFBb0IsQ0FBQyxRQUFRLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLElBQUksSUFBSSxJQUFJLG9CQUFvQixDQUFDLFNBQVMsSUFBSSxTQUFTLENBQUMsSUFBSSxvQkFBb0IsQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTt3QkFDN1osSUFBSSxvQkFBb0IsQ0FBQyxTQUFTLEVBQUU7NEJBQ2xDLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7Z0NBQzdELElBQUksQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztnQ0FDakMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxDQUFDO2dDQUM5RixJQUFJLG1CQUFtQixJQUFJLENBQUMsQ0FBQyxFQUFFO29DQUM3QixpREFBaUQ7aUNBQ2xEOzRCQUNILENBQUMsQ0FBQyxDQUFDO3lCQUNKOzZCQUFNOzRCQUNMLGlEQUFpRDt5QkFDbEQ7cUJBQ0Y7aUJBQ0Y7cUJBQ0MsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLG9CQUFvQixJQUFJLG1CQUFtQixDQUFDLG1DQUFtQyxFQUFFO29CQUNuRyxJQUFJLDZCQUE2QixHQUFHLElBQUksNkJBQTZCLEVBQUUsQ0FBQztvQkFDeEUsNkJBQTZCLENBQUMsNkJBQTZCLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUM3RSw2QkFBNkIsQ0FBQyxLQUFLLEdBQUcsYUFBYSxDQUFDLFlBQVksR0FBRyw2QkFBNkIsQ0FBQyxjQUFjLENBQUM7b0JBQ2hILElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksdUJBQXVCLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxDQUFDO2lCQUNqRjtxQkFBTSxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsb0JBQW9CLElBQUksbUJBQW1CLENBQUMsMkJBQTJCLEVBQUU7b0JBQ2xHLElBQUksNkJBQTZCLEdBQUcsSUFBSSw2QkFBNkIsRUFBRSxDQUFDO29CQUN4RSw2QkFBNkIsQ0FBQyw2QkFBNkIsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQzdFLG1IQUFtSDtvQkFDbkgsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSx1QkFBdUIsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLENBQUM7aUJBQ2pGO3FCQUFNLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsSUFBSSxtQkFBbUIsQ0FBQyx3QkFBd0IsRUFBRTtvQkFDL0YsSUFBSSx1QkFBdUIsR0FBRyxJQUFJLHVCQUF1QixFQUFFLENBQUM7b0JBQzVELHVCQUF1QixDQUFDLDZCQUE2QixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDdkUsdUJBQXVCLENBQUMsS0FBSyxHQUFHLGFBQWEsQ0FBQyxXQUFXLENBQUM7b0JBQzFELElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksdUJBQXVCLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDO29CQUMxRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLG1CQUFtQixFQUFFLENBQUMsQ0FBQztpQkFDaEQ7cUJBQU0sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLG9CQUFvQixJQUFJLG1CQUFtQixDQUFDLHNCQUFzQixFQUFFO29CQUM3RixJQUFJLDJCQUEyQixHQUFHLElBQUksMkJBQTJCLEVBQUUsQ0FBQztvQkFDcEUsMkJBQTJCLENBQUMsNkJBQTZCLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUMzRSwyQkFBMkIsQ0FBQyxLQUFLLEdBQUcsYUFBYSxDQUFDLFdBQVcsQ0FBQztvQkFDOUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSx1QkFBdUIsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLENBQUM7b0JBQzlFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO2lCQUNoRDtxQkFBTSxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsb0JBQW9CLElBQUksbUJBQW1CLENBQUMsNEJBQTRCLEVBQUU7b0JBQ25HLElBQUksZ0NBQWdDLEdBQUcsSUFBSSxnQ0FBZ0MsRUFBRSxDQUFDO29CQUM5RSxnQ0FBZ0MsQ0FBQyw2QkFBNkIsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQ2hGLGdDQUFnQyxDQUFDLEtBQUssR0FBRyxhQUFhLENBQUMsV0FBVyxDQUFDO29CQUNuRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLHVCQUF1QixDQUFDLGdDQUFnQyxDQUFDLENBQUMsQ0FBQztvQkFDbkYsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxtQkFBbUIsRUFBRSxDQUFDLENBQUM7aUJBQ2hEO3FCQUFNLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsSUFBSSxtQkFBbUIsQ0FBQyxrQ0FBa0MsRUFBRTtvQkFDekcsSUFBSSx3QkFBd0IsR0FBRyxJQUFJLHdCQUF3QixFQUFFLENBQUM7b0JBQzlELHdCQUF3QixDQUFDLDZCQUE2QixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDeEUsd0JBQXdCLENBQUMsS0FBSyxHQUFHLGFBQWEsQ0FBQyxXQUFXLENBQUM7b0JBQzNELElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksdUJBQXVCLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDO29CQUMzRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLG1CQUFtQixFQUFFLENBQUMsQ0FBQztpQkFDaEQ7cUJBQU0sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLG9CQUFvQixJQUFJLG1CQUFtQixDQUFDLGlCQUFpQixFQUFFO29CQUN4RixNQUFNLHlCQUF5QixHQUFHLElBQUkseUJBQXlCLEVBQUUsQ0FBQztvQkFDbEUseUJBQXlCLENBQUMsNkJBQTZCLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUN6RSx5QkFBeUIsQ0FBQyxLQUFLLEdBQUcsYUFBYSxDQUFDLFdBQVcsQ0FBQztvQkFDNUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSx1QkFBdUIsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLENBQUM7b0JBQzVFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO2lCQUNoRDtxQkFBTSxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLElBQUksbUJBQW1CLENBQUMscUJBQXFCLENBQUMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLEVBQUU7b0JBQzlJLE1BQU0seUJBQXlCLEdBQUcsSUFBSSx5QkFBeUIsRUFBRSxDQUFDO29CQUNsRSx5QkFBeUIsQ0FBQyw2QkFBNkIsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQ3pFLHlCQUF5QixDQUFDLEtBQUssR0FBRyxhQUFhLENBQUMsV0FBVyxDQUFDO29CQUM1RCxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLHVCQUF1QixDQUFDLHlCQUF5QixDQUFDLENBQUMsQ0FBQztvQkFDNUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxtQkFBbUIsRUFBRSxDQUFDLENBQUM7aUJBQ2hEO3FCQUFNLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxtQkFBbUIsQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsRUFBRTtvQkFDOUksTUFBTSx5QkFBeUIsR0FBRyxJQUFJLHlCQUF5QixFQUFFLENBQUM7b0JBQ2xFLHlCQUF5QixDQUFDLDZCQUE2QixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDekUseUJBQXlCLENBQUMsS0FBSyxHQUFHLGFBQWEsQ0FBQyxXQUFXLENBQUM7b0JBQzVELElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksdUJBQXVCLENBQUMseUJBQXlCLENBQUMsQ0FBQyxDQUFDO29CQUM1RSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLG1CQUFtQixFQUFFLENBQUMsQ0FBQztvQkFDL0MsMkRBQTJEO29CQUMzRCxzREFBc0Q7b0JBQ3RELGtEQUFrRDtvQkFDbEQsSUFBSTtpQkFDTDtxQkFBTSxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLElBQUksbUJBQW1CLENBQUMsb0JBQW9CLENBQUMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxtQkFBbUIsQ0FBQyxvQ0FBb0MsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsRUFBRTtvQkFDblMsTUFBTSw2QkFBNkIsR0FBRyxJQUFJLGtDQUFrQyxFQUFFLENBQUM7b0JBQy9FLDZCQUE2QixDQUFDLDZCQUE2QixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDN0UsNkJBQTZCLENBQUMsS0FBSyxHQUFHLGFBQWEsQ0FBQyxXQUFXLENBQUM7b0JBQ2hFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksdUJBQXVCLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxDQUFDO29CQUNoRixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLG1CQUFtQixFQUFFLENBQUMsQ0FBQztpQkFDaEQ7cUJBQU0sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxJQUFJLG1CQUFtQixDQUFDLCtCQUErQixDQUFDLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLElBQUksbUJBQW1CLENBQUMsb0NBQW9DLENBQUMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLEVBQUU7b0JBQzlTLE1BQU0sNkJBQTZCLEdBQUcsSUFBSSxrQ0FBa0MsRUFBRSxDQUFDO29CQUMvRSw2QkFBNkIsQ0FBQyw2QkFBNkIsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQzdFLDZCQUE2QixDQUFDLEtBQUssR0FBRyxhQUFhLENBQUMsV0FBVyxDQUFDO29CQUNoRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLHVCQUF1QixDQUFDLDZCQUE2QixDQUFDLENBQUMsQ0FBQztvQkFDaEYsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxtQkFBbUIsRUFBRSxDQUFDLENBQUM7aUJBQ2hEO3FCQUFNLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxtQkFBbUIsQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsRUFBRTtvQkFDL0ksTUFBTSw2QkFBNkIsR0FBRyxJQUFJLDZCQUE2QixFQUFFLENBQUM7b0JBQzFFLDZCQUE2QixDQUFDLDZCQUE2QixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDN0UsNkJBQTZCLENBQUMsS0FBSyxHQUFHLGFBQWEsQ0FBQyxXQUFXLENBQUM7b0JBQ2hFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksdUJBQXVCLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxDQUFDO29CQUNoRixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLG1CQUFtQixFQUFFLENBQUMsQ0FBQztpQkFDaEQ7cUJBQU0sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxJQUFJLG1CQUFtQixDQUFDLDZCQUE2QixDQUFDLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFO29CQUN0SixNQUFNLGdDQUFnQyxHQUFHLElBQUksZ0NBQWdDLEVBQUUsQ0FBQztvQkFDaEYsZ0NBQWdDLENBQUMsNkJBQTZCLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUNoRixnQ0FBZ0MsQ0FBQyxLQUFLLEdBQUcsYUFBYSxDQUFDLFdBQVcsQ0FBQztvQkFDbkUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSx1QkFBdUIsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDLENBQUM7b0JBQ25GLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO2lCQUNoRDtxQkFBTSxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLElBQUksbUJBQW1CLENBQUMsbUNBQW1DLENBQUMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLEVBQUU7b0JBQzVKLE1BQU0saUNBQWlDLEdBQUcsSUFBSSxpQ0FBaUMsRUFBRSxDQUFDO29CQUNsRixpQ0FBaUMsQ0FBQyw2QkFBNkIsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQ2pGLGlDQUFpQyxDQUFDLEtBQUssR0FBRyxhQUFhLENBQUMsV0FBVyxDQUFDO29CQUNwRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLHVCQUF1QixDQUFDLGlDQUFpQyxDQUFDLENBQUMsQ0FBQztvQkFDcEYsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxtQkFBbUIsRUFBRSxDQUFDLENBQUM7aUJBQ2hEO3FCQUFNLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLEVBQUU7b0JBQ3RJLE1BQU0sOEJBQThCLEdBQUcsSUFBSSw4QkFBOEIsRUFBRSxDQUFDO29CQUM1RSw4QkFBOEIsQ0FBQyw2QkFBNkIsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQzlFLDhCQUE4QixDQUFDLEtBQUssR0FBRyxhQUFhLENBQUMsV0FBVyxDQUFDO29CQUNqRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLHVCQUF1QixDQUFDLDhCQUE4QixDQUFDLENBQUMsQ0FBQztvQkFDakYsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxtQkFBbUIsRUFBRSxDQUFDLENBQUM7aUJBQ2hEO3FCQUFNLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxtQkFBbUIsQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsRUFBRTtvQkFDaEosTUFBTSxvQ0FBb0MsR0FBRyxJQUFJLG9DQUFvQyxFQUFFLENBQUM7b0JBQ3hGLG9DQUFvQyxDQUFDLDZCQUE2QixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDcEYsb0NBQW9DLENBQUMsS0FBSyxHQUFHLGFBQWEsQ0FBQyxXQUFXLENBQUM7b0JBQ3ZFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksdUJBQXVCLENBQUMsb0NBQW9DLENBQUMsQ0FBQyxDQUFDO29CQUN2RixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLG1CQUFtQixFQUFFLENBQUMsQ0FBQztpQkFDaEQ7cUJBQU0sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxJQUFJLG1CQUFtQixDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsRUFBRTtvQkFDdkksTUFBTSxvQ0FBb0MsR0FBRyxJQUFJLHlDQUF5QyxFQUFFLENBQUM7b0JBQzdGLG9DQUFvQyxDQUFDLDZCQUE2QixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDcEYsb0NBQW9DLENBQUMsS0FBSyxHQUFHLGFBQWEsQ0FBQyxXQUFXLENBQUM7b0JBQ3ZFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksdUJBQXVCLENBQUMsb0NBQW9DLENBQUMsQ0FBQyxDQUFDO29CQUN2RixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLG1CQUFtQixFQUFFLENBQUMsQ0FBQztpQkFDaEQ7cUJBQU0sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxJQUFJLG1CQUFtQixDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFO29CQUN6SSxNQUFNLHdCQUF3QixHQUFHLElBQUksaUNBQWlDLEVBQUUsQ0FBQztvQkFDekUsd0JBQXdCLENBQUMsNkJBQTZCLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUN4RSx3QkFBd0IsQ0FBQyxLQUFLLEdBQUcsYUFBYSxDQUFDLFdBQVcsQ0FBQztvQkFDM0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSx1QkFBdUIsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUM7b0JBQzNFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO2lCQUNoRDtxQkFBTSxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLElBQUksbUJBQW1CLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFO29CQUN0SSxNQUFNLHFCQUFxQixHQUFHLElBQUksOEJBQThCLEVBQUUsQ0FBQztvQkFDbkUscUJBQXFCLENBQUMsNkJBQTZCLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUNyRSxxQkFBcUIsQ0FBQyxLQUFLLEdBQUcsYUFBYSxDQUFDLFdBQVcsQ0FBQztvQkFDeEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSx1QkFBdUIsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUM7b0JBQ3hFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO2lCQUNoRDtxQkFDSSxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLElBQUksbUJBQW1CLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLEVBQUU7b0JBQ3ZJLE1BQU0sNEJBQTRCLEdBQUcsSUFBSSw0QkFBNEIsRUFBRSxDQUFDO29CQUN4RSw0QkFBNEIsQ0FBQyw2QkFBNkIsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQzVFLDRCQUE0QixDQUFDLEtBQUssR0FBRyxhQUFhLENBQUMsV0FBVyxDQUFDO29CQUMvRCxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLHVCQUF1QixDQUFDLDRCQUE0QixDQUFDLENBQUMsQ0FBQztvQkFDL0UsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxtQkFBbUIsRUFBRSxDQUFDLENBQUM7aUJBQ2hEO3FCQUNJLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxtQkFBbUIsQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsRUFBRTtvQkFDOUksTUFBTSw0QkFBNEIsR0FBRyxJQUFJLDRCQUE0QixFQUFFLENBQUM7b0JBQ3hFLDRCQUE0QixDQUFDLDZCQUE2QixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDNUUsNEJBQTRCLENBQUMsS0FBSyxHQUFHLGFBQWEsQ0FBQyxXQUFXLENBQUM7b0JBQy9ELElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksdUJBQXVCLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxDQUFDO29CQUMvRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLG1CQUFtQixFQUFFLENBQUMsQ0FBQztpQkFDaEQ7cUJBQ0ksSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxJQUFJLG1CQUFtQixDQUFDLHNCQUFzQixDQUFDLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFO29CQUM3SSxNQUFNLDRCQUE0QixHQUFHLElBQUksNEJBQTRCLEVBQUUsQ0FBQztvQkFDeEUsNEJBQTRCLENBQUMsNkJBQTZCLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUM1RSw0QkFBNEIsQ0FBQyxLQUFLLEdBQUcsYUFBYSxDQUFDLFdBQVcsQ0FBQztvQkFDL0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSx1QkFBdUIsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDLENBQUM7b0JBQy9FLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO2lCQUNoRDtxQkFDSSxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLElBQUksbUJBQW1CLENBQUMsdUJBQXVCLENBQUMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLEVBQUU7b0JBQzlJLE1BQU0sNEJBQTRCLEdBQUcsSUFBSSw0QkFBNEIsRUFBRSxDQUFDO29CQUN4RSw0QkFBNEIsQ0FBQyw2QkFBNkIsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQzVFLDRCQUE0QixDQUFDLEtBQUssR0FBRyxhQUFhLENBQUMsV0FBVyxDQUFDO29CQUMvRCxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLHVCQUF1QixDQUFDLDRCQUE0QixDQUFDLENBQUMsQ0FBQztvQkFDL0UsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxtQkFBbUIsRUFBRSxDQUFDLENBQUM7aUJBQ2hEO3FCQUNJLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxtQkFBbUIsQ0FBQywrQkFBK0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsRUFBRTtvQkFDdEosTUFBTSw0QkFBNEIsR0FBRyxJQUFJLDRCQUE0QixFQUFFLENBQUM7b0JBQ3hFLDRCQUE0QixDQUFDLDZCQUE2QixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDNUUsNEJBQTRCLENBQUMsS0FBSyxHQUFHLGFBQWEsQ0FBQyxXQUFXLENBQUM7b0JBQy9ELElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksdUJBQXVCLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxDQUFDO29CQUMvRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLG1CQUFtQixFQUFFLENBQUMsQ0FBQztpQkFDaEQ7cUJBQ0ksSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxJQUFJLG1CQUFtQixDQUFDLGdDQUFnQyxDQUFDLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFO29CQUN2SixNQUFNLDRCQUE0QixHQUFHLElBQUksNEJBQTRCLEVBQUUsQ0FBQztvQkFDeEUsNEJBQTRCLENBQUMsNkJBQTZCLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUM1RSw0QkFBNEIsQ0FBQyxLQUFLLEdBQUcsYUFBYSxDQUFDLFdBQVcsQ0FBQztvQkFDL0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSx1QkFBdUIsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDLENBQUM7b0JBQy9FLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO2lCQUNoRDtxQkFDSSxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLElBQUksbUJBQW1CLENBQUMsbUNBQW1DLENBQUMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLEVBQUU7b0JBQzFKLE1BQU0sNEJBQTRCLEdBQUcsSUFBSSw0QkFBNEIsRUFBRSxDQUFDO29CQUN4RSw0QkFBNEIsQ0FBQyw2QkFBNkIsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQzVFLDRCQUE0QixDQUFDLEtBQUssR0FBRyxhQUFhLENBQUMsV0FBVyxDQUFDO29CQUMvRCxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLHVCQUF1QixDQUFDLDRCQUE0QixDQUFDLENBQUMsQ0FBQztvQkFDL0UsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxtQkFBbUIsRUFBRSxDQUFDLENBQUM7aUJBQ2hEO3FCQUNJLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxtQkFBbUIsQ0FBQywyQkFBMkIsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsRUFBRTtvQkFDbEosTUFBTSw0QkFBNEIsR0FBRyxJQUFJLDRCQUE0QixFQUFFLENBQUM7b0JBQ3hFLDRCQUE0QixDQUFDLDZCQUE2QixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDNUUsNEJBQTRCLENBQUMsS0FBSyxHQUFHLGFBQWEsQ0FBQyxXQUFXLENBQUM7b0JBQy9ELElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksdUJBQXVCLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxDQUFDO29CQUMvRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLG1CQUFtQixFQUFFLENBQUMsQ0FBQztpQkFDaEQ7cUJBQ0ksSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxJQUFJLG1CQUFtQixDQUFDLGtDQUFrQyxDQUFDLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFO29CQUN6SixNQUFNLDRCQUE0QixHQUFHLElBQUksNEJBQTRCLEVBQUUsQ0FBQztvQkFDeEUsNEJBQTRCLENBQUMsNkJBQTZCLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUM1RSw0QkFBNEIsQ0FBQyxLQUFLLEdBQUcsYUFBYSxDQUFDLFdBQVcsQ0FBQztvQkFDL0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSx1QkFBdUIsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDLENBQUM7b0JBQy9FLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO2lCQUNoRDtxQkFDSSxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLElBQUksbUJBQW1CLENBQUMscUNBQXFDLENBQUMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLEVBQUU7b0JBQzVKLE1BQU0sNEJBQTRCLEdBQUcsSUFBSSw0QkFBNEIsRUFBRSxDQUFDO29CQUN4RSw0QkFBNEIsQ0FBQyw2QkFBNkIsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQzVFLDRCQUE0QixDQUFDLEtBQUssR0FBRyxhQUFhLENBQUMsV0FBVyxDQUFDO29CQUMvRCxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLHVCQUF1QixDQUFDLDRCQUE0QixDQUFDLENBQUMsQ0FBQztvQkFDL0UsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxtQkFBbUIsRUFBRSxDQUFDLENBQUM7aUJBQ2hEO3FCQUNJLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxtQkFBbUIsQ0FBQyw0QkFBNEIsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsRUFBRTtvQkFDbkosTUFBTSw0QkFBNEIsR0FBRyxJQUFJLDRCQUE0QixFQUFFLENBQUM7b0JBQ3hFLDRCQUE0QixDQUFDLDZCQUE2QixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDNUUsNEJBQTRCLENBQUMsS0FBSyxHQUFHLGFBQWEsQ0FBQyxXQUFXLENBQUM7b0JBQy9ELElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksdUJBQXVCLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxDQUFDO29CQUMvRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLG1CQUFtQixFQUFFLENBQUMsQ0FBQztpQkFDaEQ7cUJBQ0ksSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxJQUFJLG1CQUFtQixDQUFDLGdEQUFnRCxDQUFDLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFO29CQUN2SyxNQUFNLDRCQUE0QixHQUFHLElBQUksNEJBQTRCLEVBQUUsQ0FBQztvQkFDeEUsNEJBQTRCLENBQUMsNkJBQTZCLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUM1RSw0QkFBNEIsQ0FBQyxLQUFLLEdBQUcsYUFBYSxDQUFDLFdBQVcsQ0FBQztvQkFDL0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSx1QkFBdUIsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDLENBQUM7b0JBQy9FLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO2lCQUNoRDtxQkFDSSxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLElBQUksbUJBQW1CLENBQUMsNENBQTRDLENBQUMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLEVBQUU7b0JBQ25LLE1BQU0sNEJBQTRCLEdBQUcsSUFBSSw0QkFBNEIsRUFBRSxDQUFDO29CQUN4RSw0QkFBNEIsQ0FBQyw2QkFBNkIsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQzVFLDRCQUE0QixDQUFDLEtBQUssR0FBRyxhQUFhLENBQUMsV0FBVyxDQUFDO29CQUMvRCxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLHVCQUF1QixDQUFDLDRCQUE0QixDQUFDLENBQUMsQ0FBQztvQkFDL0UsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxtQkFBbUIsRUFBRSxDQUFDLENBQUM7aUJBQ2hEO3FCQUNJLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxtQkFBbUIsQ0FBQyw2Q0FBNkMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsRUFBRTtvQkFDcEssTUFBTSw0QkFBNEIsR0FBRyxJQUFJLDRCQUE0QixFQUFFLENBQUM7b0JBQ3hFLDRCQUE0QixDQUFDLDZCQUE2QixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDNUUsNEJBQTRCLENBQUMsS0FBSyxHQUFHLGFBQWEsQ0FBQyxXQUFXLENBQUM7b0JBQy9ELElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksdUJBQXVCLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxDQUFDO29CQUMvRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLG1CQUFtQixFQUFFLENBQUMsQ0FBQztpQkFDaEQ7cUJBQ0ksSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxJQUFJLG1CQUFtQixDQUFDLDhCQUE4QixDQUFDLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFO29CQUNySixNQUFNLDZCQUE2QixHQUFHLElBQUksNEJBQTRCLEVBQUUsQ0FBQztvQkFDekUsNkJBQTZCLENBQUMsNkJBQTZCLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUM3RSw2QkFBNkIsQ0FBQyxLQUFLLEdBQUcsYUFBYSxDQUFDLHFCQUFxQixDQUFDO29CQUMxRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLHVCQUF1QixDQUFDLDZCQUE2QixDQUFDLENBQUMsQ0FBQztvQkFDaEYsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxtQkFBbUIsRUFBRSxDQUFDLENBQUM7aUJBQ2hEO3FCQUNJO29CQUNILDZEQUE2RDtvQkFDN0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQ0FBc0MsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUM7aUJBQzVGO2dCQUNILGdDQUFnQzthQUVqQztZQUFDLE9BQU8sU0FBUyxFQUFFO2dCQUNsQixpRUFBaUU7Z0JBQ2pFLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQ3REO1FBQ0gsQ0FBQyxDQUFDO1FBQ0YsTUFBTSxZQUFZLEdBQUcsQ0FBQyxhQUFhLEVBQUUsRUFBRTtZQUNyQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLHNCQUFzQixDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7UUFDakUsQ0FBQyxDQUFBO1FBQ0QsTUFBTSxZQUFZLEdBQUcsQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUNuQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLHNCQUFzQixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDL0QsQ0FBQyxDQUFBO1FBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtZQUN2RCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztnQkFDZixVQUFVLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVO2dCQUNoQyxZQUFZLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZO2dCQUNwQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVc7YUFDdkIsQ0FBQyxDQUFBO1lBQ0YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFVBQWUsRUFBRSxFQUFFO2dCQUN0RSxJQUFJLENBQUMsY0FBYyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7Z0JBQ3RDLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7b0JBQzdELElBQUksQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztvQkFDakMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7b0JBQzNCLElBQUksY0FBYyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO29CQUN6RCxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksU0FBUyxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxFQUFFO3dCQUM3RCxLQUFLLElBQUksTUFBTSxHQUFHLENBQUMsRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUU7NEJBQy9ELElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO2dDQUNwQixRQUFRLEVBQUUsQ0FBQyxDQUFDLGNBQWMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzs2QkFDakUsQ0FBQyxDQUFDO3lCQUNKO3FCQUNGO29CQUNELElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO3dCQUNwQixRQUFRLEVBQUUsQ0FBQyxDQUFDLGlCQUFpQixHQUFHLGNBQWMsQ0FBQyxDQUFDO3FCQUNqRCxDQUFDLENBQUM7b0JBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7d0JBQ3BCLFFBQVEsRUFBRSxDQUFDLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQyxDQUFDO3FCQUM5QyxDQUFDLENBQUM7b0JBQ0gsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztvQkFDL0UsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDLEVBQUU7d0JBQ2hCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDO3dCQUNqRCxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO3dCQUNuQixJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFBO3dCQUNyQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQzt3QkFDNUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7NEJBQ3BCLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQzt5QkFDdEMsQ0FBQyxDQUFDO3FCQUNKO2dCQUNILENBQUMsQ0FBQyxDQUFBO1lBQ0osQ0FBQyxDQUFDLENBQUE7WUFDRixJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztnQkFDdEIsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFO29CQUNYLElBQUksRUFBRSxDQUFDLFFBQVEsS0FBSyxtQkFBbUIsRUFBRTt3QkFDdkMsSUFBSSxRQUFRLEdBQUc7NEJBQ2IsR0FBRyxFQUFFLE9BQU87eUJBQ2IsQ0FBQzt3QkFDRixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FDbEI7NEJBQ0UsS0FBSyxFQUFFLFFBQVE7eUJBQ2hCO3dCQUNELHNCQUFzQjt3QkFDdEIsdUNBQXVDO3dCQUN2QyxJQUFJO3lCQUNMLENBQUM7cUJBQ0g7Z0JBQ0gsQ0FBQztnQkFDRCxNQUFNLEVBQUUsV0FBVyxDQUFDLEVBQUU7b0JBQ3BCLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQTtnQkFDM0IsQ0FBQztnQkFDRCxRQUFRLEVBQUUsYUFBYSxDQUFDLEVBQUU7b0JBQ3hCLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQTtnQkFDN0IsQ0FBQztnQkFDRCxPQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUU7b0JBQ2pCLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLENBQUM7b0JBQ3hDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDeEIsQ0FBQzthQUNGLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNLLG1CQUFtQjs7WUFDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbkUsSUFBSSxjQUFjLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDekQsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLFNBQVMsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksRUFBRTtnQkFDN0QsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO29CQUM1RCxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQzt3QkFDdEIsUUFBUSxFQUFFLENBQUMsQ0FBQyxjQUFjLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7cUJBQ2hFLENBQUMsQ0FBQztpQkFDSjthQUNGO1lBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7Z0JBQ3RCLFFBQVEsRUFBRSxDQUFDLENBQUMsaUJBQWlCLEdBQUcsY0FBYyxDQUFDLENBQUM7YUFDakQsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7Z0JBQ3RCLFFBQVEsRUFBRSxDQUFDLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQyxDQUFDO2FBQzlDLENBQUMsQ0FBQztRQUNMLENBQUM7S0FBQTtJQUVLLDRCQUE0Qjs7WUFDaEMsSUFBSSxjQUFjLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDekQsSUFBSSxlQUFlLEdBQUcsb0JBQW9CLEdBQUcsY0FBYyxDQUFDO1lBQzVELE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7Z0JBQzFCLFFBQVEsRUFBRSxDQUFDLGVBQWUsQ0FBQztnQkFDM0IsWUFBWSxFQUFFLElBQUk7YUFDbkIsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7Z0JBQ2xCLFFBQVEsRUFBRSxDQUFDLGVBQWUsQ0FBQztnQkFDM0IsWUFBWSxFQUFFLElBQUk7Z0JBQ2xCLFlBQVksRUFBRSxJQUFJO2FBQ25CLEVBQ0MsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLEVBQUU7Z0JBQ25CLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksMkJBQTJCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQTtZQUNoRSxDQUFDLENBQ0YsQ0FBQztRQUVKLENBQUM7S0FBQTtJQUNELGlCQUFpQjtRQUNmLElBQUksSUFBSSxDQUFDLHVCQUF1QixDQUFDLDBCQUEwQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDdEUsSUFBSSxDQUFDLHVCQUF1QixDQUFDLDBCQUEwQixDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRTtnQkFDNUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7b0JBQ2xCLE9BQU8sRUFBRSxDQUFDLFdBQVcsQ0FBQztvQkFDdEIsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDO2lCQUN0RCxFQUFFLFVBQVUsTUFBTSxFQUFFLFFBQVE7b0JBQzNCLHNCQUFzQjtvQkFDdEIsd0JBQXdCO2dCQUMxQixDQUFDLENBQUMsQ0FBQTtZQUNKLENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRUQsc0JBQXNCLENBQUMsU0FBUztRQUM5QixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3ZCLElBQUksUUFBUSxHQUFHLG9CQUFvQixDQUFDO1FBQ3BDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyw4QkFBOEIsRUFBRTtZQUN0RSxRQUFRLEVBQUUsTUFBTTtZQUNoQixRQUFRLEVBQUUsTUFBTTtZQUNoQixTQUFTLEVBQUUsTUFBTTtZQUNqQixTQUFTLEVBQUUsTUFBTTtZQUNqQixZQUFZLEVBQUUsSUFBSTtZQUNsQixFQUFFLEVBQUUsUUFBUTtZQUNaLElBQUksRUFBRTtnQkFDSixRQUFRLEVBQUUsUUFBUTtnQkFDbEIsY0FBYyxFQUFFLFNBQVMsQ0FBQyxjQUFjO2dCQUN4QyxZQUFZLEVBQUUsU0FBUyxDQUFDLFlBQVk7Z0JBQ3BDLFdBQVcsRUFBRSxTQUFTLENBQUMsV0FBVztnQkFDbEMsYUFBYSxFQUFFLFNBQVMsQ0FBQyxhQUFhO2dCQUN0QyxvQkFBb0IsRUFBRSxTQUFTLENBQUMsb0JBQW9CO2dCQUNwRCxXQUFXLEVBQUUsU0FBUyxDQUFDLFdBQVc7YUFDbkM7U0FDRixDQUFDLENBQUM7UUFDSCxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDM0MsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLElBQUksSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDckosSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQzthQUN4RDtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNELDZDQUE2QztJQUM3QyxzREFBc0Q7SUFDdEQsbUNBQW1DO0lBQ25DLG1DQUFtQztJQUNuQywyREFBMkQ7SUFDM0Qsd0dBQXdHO0lBQ3hHLE1BQU07SUFDTixXQUFXO0lBQ1gsc0VBQXNFO0lBQ3RFLE1BQU07SUFDTixvQkFBb0I7SUFDcEIsdUNBQXVDO0lBQ3ZDLGtDQUFrQztJQUNsQyxjQUFjO0lBQ2QseURBQXlEO0lBQ3pELGtEQUFrRDtJQUNsRCxRQUFRO0lBQ1IsTUFBTTtJQUNOLGtGQUFrRjtJQUNsRixlQUFlO0lBQ2YsMENBQTBDO0lBQzFDLDBCQUEwQjtJQUMxQiw0Q0FBNEM7SUFDNUMsMkdBQTJHO0lBQzNHLG9HQUFvRztJQUNwRyxxQkFBcUI7SUFDckIsdUdBQXVHO0lBQ3ZHLGNBQWM7SUFDZCw2Q0FBNkM7SUFDN0MsWUFBWTtJQUNaLFVBQVU7SUFDVixTQUFTO0lBQ1QsOEJBQThCO0lBQzlCLE9BQU87SUFDUCxnREFBZ0Q7SUFDaEQsTUFBTTtJQUNOLElBQUk7SUFDSixzQkFBc0IsQ0FBQyxvQkFBb0I7UUFDekMsTUFBTSxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLGFBQWEsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUN6QyxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsb0JBQW9CLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM1RSxJQUFJLG9CQUFvQixDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRTtZQUNsRSxtQkFBbUIsQ0FBQywrQkFBK0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUU7WUFDNUUsb0JBQW9CLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFO2dCQUNoRSxtQkFBbUIsQ0FBQyxvQ0FBb0MsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUNuRixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLHlCQUF5QixHQUFHLGlCQUFpQixDQUFDLFdBQVcsR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDO1NBQ3JHO2FBQU0sSUFBSSxvQkFBb0IsQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUU7WUFDekUsbUJBQW1CLENBQUMsc0JBQXNCLENBQUMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLEVBQUU7WUFDckUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxnQkFBZ0IsR0FBRyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1NBQ3ZFO2FBQU0sSUFBSSxvQkFBb0IsQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUU7WUFDekUsbUJBQW1CLENBQUMsbUNBQW1DLENBQUMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLEVBQUU7WUFDbEYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxvQkFBb0IsR0FBRyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1NBQ2hGO2FBQU0sSUFBSSxvQkFBb0IsQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUU7WUFDekUsbUJBQW1CLENBQUMsNkJBQTZCLENBQUMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLEVBQUU7WUFDNUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxvQkFBb0IsR0FBRyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1NBQzlFO2FBQU0sSUFBSSxvQkFBb0IsQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUU7WUFDekUsbUJBQW1CLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQzVELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsa0JBQWtCLEdBQUcsaUJBQWlCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztTQUMzRTthQUNJLElBQUksb0JBQW9CLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFO1lBQ3ZFLG1CQUFtQixDQUFDLG1DQUFtQyxDQUFDLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQ2xGLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsb0JBQW9CLEdBQUcsaUJBQWlCLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztTQUNoRjthQUFNLElBQUksb0JBQW9CLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFO1lBQ3pFLG1CQUFtQixDQUFDLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQ3BFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsZ0JBQWdCLEdBQUcsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztTQUN2RTthQUFNLElBQUksb0JBQW9CLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFO1lBQ3pFLG1CQUFtQixDQUFDLHVCQUF1QixDQUFDLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQ3RFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsa0JBQWtCLEdBQUcsaUJBQWlCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztTQUMzRTthQUFNLElBQUksb0JBQW9CLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFO1lBQ3pFLG1CQUFtQixDQUFDLHdDQUF3QyxDQUFDLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQ3ZGLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsMkJBQTJCLEdBQUcsaUJBQWlCLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztTQUN2RjthQUFNLElBQUksb0JBQW9CLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFO1lBQ3pFLG1CQUFtQixDQUFDLGtDQUFrQyxDQUFDLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQ2pGLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsMkJBQTJCLEdBQUcsaUJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztTQUNyRjthQUFNLElBQUksb0JBQW9CLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFO1lBQ3pFLG1CQUFtQixDQUFDLDhCQUE4QixDQUFDLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQzdFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsNEJBQTRCLEdBQUcsaUJBQWlCLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztTQUN2RjtRQUNELElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksa0NBQWtDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztJQUc3RSxDQUFDO0lBQ0QsaUJBQWlCO1FBQ2YsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDbkYsbURBQW1EO1FBQ25ELE1BQU0sb0NBQW9DLEdBQUcsWUFBWSxDQUFDLHVCQUF1QixHQUFHLGFBQWEsQ0FBQztRQUNsRyxNQUFNLDhDQUE4QyxHQUFHLFlBQVksQ0FBQyw4QkFBOEIsR0FBRyxhQUFhLENBQUM7UUFDbkgsTUFBTSwwQ0FBMEMsR0FBRyxZQUFZLENBQUMsMEJBQTBCLEdBQUcsYUFBYSxDQUFDO1FBQzNHLE1BQU0sMkNBQTJDLEdBQUcsWUFBWSxDQUFDLDZCQUE2QixHQUFHLGFBQWEsQ0FBQztRQUMvRyxNQUFNLG9DQUFvQyxHQUFHLFlBQVksQ0FBQyx1QkFBdUIsR0FBRyxhQUFhLENBQUM7UUFDbEcsTUFBTSxvQ0FBb0MsR0FBRyxZQUFZLENBQUMsa0JBQWtCLEdBQUcsYUFBYSxDQUFDO1FBQzdGLE1BQU0sMkNBQTJDLEdBQUcsWUFBWSxDQUFDLHlCQUF5QixHQUFHLGFBQWEsQ0FBQztRQUMzRyxNQUFNLGtDQUFrQyxHQUFHLFlBQVksQ0FBQyw4QkFBOEIsR0FBRyxhQUFhLENBQUM7UUFDdkcsTUFBTSxxQ0FBcUMsR0FBRyxZQUFZLENBQUMsbUNBQW1DLEdBQUcsYUFBYSxDQUFDO1FBQy9HLE1BQU0sa0NBQWtDLEdBQUcsWUFBWSxDQUFDLGdDQUFnQyxHQUFHLGFBQWEsQ0FBQztRQUN6RyxNQUFNLDhCQUE4QixHQUFHLFlBQVksQ0FBQyw0QkFBNEIsR0FBRyxhQUFhLENBQUM7UUFDakcsTUFBTSxpQ0FBaUMsR0FBRyxZQUFZLENBQUMsZ0NBQWdDLEdBQUcsYUFBYSxDQUFDO1FBQ3hHLE1BQU0sc0NBQXNDLEdBQUcsWUFBWSxDQUFDLHdCQUF3QixHQUFHLGFBQWEsQ0FBQztRQUNyRyxNQUFNLG1DQUFtQyxHQUFHLFlBQVksQ0FBQyxxQkFBcUIsR0FBRyxhQUFhLENBQUM7UUFDL0YsTUFBTSxrQ0FBa0MsR0FBRyxZQUFZLENBQUMsK0JBQStCLEdBQUcsYUFBYSxDQUFDO1FBQ3hHLE1BQU0sb0NBQW9DLEdBQUcsWUFBWSxDQUFDLHNCQUFzQixHQUFHLGFBQWEsQ0FBQztRQUNqRyxNQUFNLHNDQUFzQyxHQUFHLFlBQVksQ0FBQyx3QkFBd0IsR0FBRyxhQUFhLENBQUM7UUFDckcsTUFBTSxtQ0FBbUMsR0FBRyxZQUFZLENBQUMscUJBQXFCLEdBQUcsYUFBYSxDQUFDO1FBQy9GLE1BQU0saURBQWlELEdBQUcsWUFBWSxDQUFDLG1DQUFtQyxHQUFHLGFBQWEsQ0FBQztRQUMzSCxNQUFNLCtDQUErQyxHQUFHLFlBQVksQ0FBQyxtQ0FBbUMsR0FBRyxhQUFhLENBQUM7UUFFekgsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsR0FBRyxvQ0FBb0MsQ0FBQyxDQUFDO1FBQ3RFLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEdBQUcsOENBQThDLENBQUMsQ0FBQztRQUNoRixPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixHQUFHLDBDQUEwQyxDQUFDLENBQUM7UUFDNUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsR0FBRyxvQ0FBb0MsQ0FBQyxDQUFDO1FBQ3JFLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEdBQUcsb0NBQW9DLENBQUMsQ0FBQztRQUNyRSxPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixHQUFHLDJDQUEyQyxDQUFDLENBQUM7UUFDNUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsR0FBRyxrQ0FBa0MsQ0FBQyxDQUFDO1FBQ25FLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEdBQUcscUNBQXFDLENBQUMsQ0FBQztRQUN0RSxPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixHQUFHLGtDQUFrQyxDQUFDLENBQUM7UUFDbkUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsR0FBRyxzQ0FBc0MsQ0FBQyxDQUFDO1FBQ3ZFLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEdBQUcsbUNBQW1DLENBQUMsQ0FBQztRQUNwRSxPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixHQUFHLGtDQUFrQyxDQUFDLENBQUM7UUFDbkUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsR0FBRyw4QkFBOEIsQ0FBQyxDQUFDO1FBQy9ELE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEdBQUcsaUNBQWlDLENBQUMsQ0FBQztRQUNsRSxPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixHQUFHLG9DQUFvQyxDQUFDLENBQUM7UUFDckUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsR0FBRyxzQ0FBc0MsQ0FBQyxDQUFDO1FBQ3ZFLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEdBQUcsbUNBQW1DLENBQUMsQ0FBQztRQUNwRSxPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixHQUFHLGlEQUFpRCxDQUFDLENBQUM7UUFDbEYsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsR0FBRywrQ0FBK0MsQ0FBQyxDQUFDO1FBR2hGLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO1lBQ3BCLFFBQVEsRUFBRSxDQUFDLG9DQUFvQyxFQUFFLDhDQUE4QztnQkFDN0YsMENBQTBDLEVBQUUsMkNBQTJDO2dCQUN2RixvQ0FBb0MsRUFBRSxvQ0FBb0MsRUFBRSxBQUFEO2dCQUMzRSwyQ0FBMkMsRUFBRSxrQ0FBa0M7Z0JBQy9FLHFDQUFxQyxFQUFFLGtDQUFrQyxFQUFFLDhCQUE4QjtnQkFDekcsc0NBQXNDLEVBQUUsbUNBQW1DO2dCQUMzRSxrQ0FBa0M7Z0JBQ2xDLGlDQUFpQztnQkFDakMsb0NBQW9DO2dCQUNwQyxzQ0FBc0M7Z0JBQ3RDLG1DQUFtQyxFQUFFLGlEQUFpRCxFQUFFLCtDQUErQyxDQUFDO1NBQzNJLENBQUMsQ0FBQztRQUNILElBQUksaUNBQWlDLEdBQUcsWUFBWSxDQUFDLG1CQUFtQixHQUFHLHNDQUFzQyxDQUFDO1FBQ2xILE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEdBQUcsaUNBQWlDLENBQUMsQ0FBQztRQUNuRSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztZQUNwQixRQUFRLEVBQUUsQ0FBQyxpQ0FBaUMsQ0FBQztTQUM5QyxDQUFDLENBQUM7SUFFTCxDQUFDO0lBRUQsVUFBVSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsT0FBTztRQUMzQixJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLDZCQUE2QixFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3RFLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUNELFFBQVE7UUFDTixJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUF1QixFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDbkQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsc0JBQXNCLENBQUMsa0JBQWtCLENBQUMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLE1BQU0sRUFBRTtZQUN0SixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLElBQUksWUFBWSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxTQUFTLENBQUMsRUFDekk7Z0JBQ0EsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7YUFDakc7WUFDRCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQy9FLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLGlCQUFpQixDQUFDLElBQUksTUFBTTttQkFDbEYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsaUJBQWlCLENBQUMsSUFBSSxXQUFXLEVBQUU7Z0JBQ3BGLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsaUJBQWlCLENBQUMsQ0FBQztnQkFDdEYsSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLEdBQUcsRUFBRTtvQkFDMUQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztvQkFDL0IsVUFBVSxDQUFDLEdBQUcsRUFBRTt3QkFDZCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO3dCQUNoQyxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQzt3QkFDdkYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsa0JBQWtCLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxXQUFXLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7b0JBQzNKLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztpQkFDVjthQUNGO1NBQ0Y7UUFDRCxJQUFJLGNBQWMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNuRixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7UUFDN0YsSUFBSSxpQkFBaUIsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDO1FBRTNDLElBQUksY0FBYyxJQUFJLEVBQUUsSUFBSSxjQUFjLElBQUksSUFBSSxJQUFJLGNBQWMsSUFBSSxTQUFTLElBQUksY0FBYyxLQUFLLE1BQU0sSUFBSSxjQUFjLEtBQUssV0FBVyxFQUFFO1lBQ2hKLElBQUksaUJBQWlCLElBQUksRUFBRSxJQUFJLGlCQUFpQixJQUFJLElBQUksSUFBSSxpQkFBaUIsSUFBSSxTQUFTLElBQUksaUJBQWlCLEtBQUssTUFBTSxJQUFJLGlCQUFpQixLQUFLLFdBQVcsRUFBRTtnQkFDL0osY0FBYyxHQUFHLElBQUksQ0FBQzthQUN2QjtpQkFDSTtnQkFDSCxjQUFjLEdBQUcsaUJBQWlCLENBQUM7YUFDcEM7U0FDRjtRQUNELElBQUksQ0FBQyxXQUFXLEdBQUcsY0FBYyxDQUFDO1FBQ2xDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLG9CQUFvQixDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQztRQUM1RixJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLG9CQUFvQixDQUFDLHlCQUF5QixDQUFDLENBQUMsQ0FBQztRQUN2RyxJQUFJLENBQUMsdUJBQXVCO2FBQ3pCLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNoQixJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDO1FBQ3ZDLENBQUMsQ0FBQyxDQUFBO1FBQ0osNkJBQTZCO1FBQzdCLHNCQUFzQjtRQUN0QixJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztRQUM3QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDO1FBQ2pELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7UUFFekMsa0ZBQWtGO1FBQ2xGLHNEQUFzRDtRQUN0RCxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUM5RSxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUU7WUFDaEIsSUFBSSxDQUFDLDRCQUE0QixDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3pDO1FBQ0QsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNuRixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUM3QixJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUN2RixJQUFJLENBQUMsa0JBQWtCLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQztRQUM5QyxJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQztRQUN2QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDdkYsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsb0JBQW9CLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztRQUNqRixJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNuQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxJQUFJO1FBQ3ZCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztJQUNqRixDQUFDO0lBRUQsNEJBQTRCLENBQUMsSUFBSTtRQUMvQixJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDeEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN2QyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsU0FBUyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQTtRQUNqSixJQUFJLENBQUMsZUFBZSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDbkQsSUFBSSxDQUFDLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUN6RixDQUFDO0lBRUQsb0JBQW9CO1FBQ2xCLE1BQU0sYUFBYSxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDbkYsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLHNCQUFzQixDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDakwsSUFBSSxJQUFJLENBQUMsa0JBQWtCLElBQUksYUFBYSxJQUFJLE1BQU0sSUFBSSxhQUFhLElBQUksSUFBSSxFQUFFO1lBQy9FLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLGlDQUFpQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxRQUFRLEdBQUcsYUFBYSxDQUFDLENBQUM7U0FDbkg7YUFBTSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZQUNsQyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxpQ0FBaUMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztTQUN4RjtJQUNILENBQUM7SUFFRCxRQUFRLENBQUMsS0FBSztRQUNaLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUssU0FBUzs7WUFDYixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztZQUNwQixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNuRixNQUFNLG9DQUFvQyxHQUFHLFlBQVksQ0FBQyx1QkFBdUI7a0JBQzdFLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ2pFLE1BQU0sOENBQThDLEdBQUcsWUFBWSxDQUFDLDhCQUE4QjtrQkFDOUYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDakUsTUFBTSwwQ0FBMEMsR0FBRyxZQUFZLENBQUMsMEJBQTBCO2tCQUN0RixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNqRSxNQUFNLDJDQUEyQyxHQUFHLFlBQVksQ0FBQyw2QkFBNkIsR0FBRyxhQUFhLENBQUM7WUFDL0csTUFBTSxvQ0FBb0MsR0FBRyxZQUFZLENBQUMsdUJBQXVCLEdBQUcsYUFBYSxDQUFDO1lBQ2xHLE1BQU0sb0NBQW9DLEdBQUcsWUFBWSxDQUFDLGtCQUFrQixHQUFHLGFBQWEsQ0FBQztZQUM3RixNQUFNLDJDQUEyQyxHQUFHLFlBQVksQ0FBQyx5QkFBeUIsR0FBRyxhQUFhLENBQUM7WUFDM0csTUFBTSxrQ0FBa0MsR0FBRyxZQUFZLENBQUMsOEJBQThCLEdBQUcsYUFBYSxDQUFDO1lBQ3ZHLE1BQU0scUNBQXFDLEdBQUcsWUFBWSxDQUFDLG1DQUFtQyxHQUFHLGFBQWEsQ0FBQztZQUMvRyxNQUFNLGtDQUFrQyxHQUFHLFlBQVksQ0FBQyxnQ0FBZ0MsR0FBRyxhQUFhLENBQUM7WUFDekcsTUFBTSxzQ0FBc0MsR0FBRyxZQUFZLENBQUMsd0JBQXdCLEdBQUcsYUFBYSxDQUFDO1lBQ3JHLE1BQU0sbUNBQW1DLEdBQUcsWUFBWSxDQUFDLHFCQUFxQixHQUFHLGFBQWEsQ0FBQztZQUMvRixNQUFNLGtDQUFrQyxHQUFHLFlBQVksQ0FBQywrQkFBK0IsR0FBRyxhQUFhLENBQUM7WUFDeEcsTUFBTSxpQ0FBaUMsR0FBRyxZQUFZLENBQUMsZ0NBQWdDLEdBQUcsYUFBYSxDQUFDO1lBQ3hHLE1BQU0sOEJBQThCLEdBQUcsWUFBWSxDQUFDLDRCQUE0QixHQUFHLGFBQWEsQ0FBQztZQUNqRyxNQUFNLG9DQUFvQyxHQUFHLFlBQVksQ0FBQyxzQkFBc0IsR0FBRyxhQUFhLENBQUM7WUFDakcsTUFBTSxzQ0FBc0MsR0FBRyxZQUFZLENBQUMsd0JBQXdCLEdBQUcsYUFBYSxDQUFDO1lBQ3JHLE1BQU0sbUNBQW1DLEdBQUcsWUFBWSxDQUFDLHFCQUFxQixHQUFHLGFBQWEsQ0FBQztZQUMvRixNQUFNLGlEQUFpRCxHQUFHLFlBQVksQ0FBQyxtQ0FBbUMsR0FBRyxhQUFhLENBQUM7WUFDM0gsTUFBTSwrQ0FBK0MsR0FBRyxZQUFZLENBQUMscURBQXFELEdBQUcsYUFBYSxDQUFDO1lBRTNJLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsb0NBQW9DLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDOUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyw4Q0FBOEMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN4RixJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLDBDQUEwQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3BGLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsMkNBQTJDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDckYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxvQ0FBb0MsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM5RSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLG9DQUFvQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzlFLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsMkNBQTJDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDckYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxrQ0FBa0MsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM1RSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLHFDQUFxQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQy9FLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsa0NBQWtDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDNUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxzQ0FBc0MsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNoRixJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLG1DQUFtQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzdFLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsa0NBQWtDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDNUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxpQ0FBaUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMzRSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLDhCQUE4QixDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3hFLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsb0NBQW9DLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDOUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxzQ0FBc0MsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNoRixJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLG1DQUFtQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzdFLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsK0NBQStDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDekYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbkUsNERBQTREO1lBQzVELCtEQUErRDtZQUMvRCw0QkFBNEI7WUFDNUIsaUNBQWlDO1lBQ2pDLE1BQU07WUFDTixtRUFBbUU7WUFDbkUsb0VBQW9FO1lBQ3BFLGdDQUFnQztZQUNoQyx3RUFBd0U7WUFDeEUsVUFBVTtZQUNWLE1BQU07WUFDTixJQUFJO1lBQ0osNEJBQTRCO1lBQzVCLHFEQUFxRDtZQUNyRCxNQUFNO1lBQ04sNEJBQTRCO1lBQzVCLGtEQUFrRDtZQUNsRCxNQUFNO1lBQ04sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxpREFBaUQsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMzRixnQ0FBZ0M7WUFDaEMsb0NBQW9DO1lBQ3BDLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQ3ZGLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ2hGLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRXpFLElBQUksY0FBYyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ25GLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQy9FLElBQUksaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUN6RixJQUFJLGNBQWMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUNuRixJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDckQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUdqRCxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ2xLLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLGNBQWMsRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztZQUM1SixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxXQUFXLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDL0ksSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsYUFBYSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ2pKLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztZQUN0SixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxXQUFXLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDbEosSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxXQUFXLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDcEosSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsY0FBYyxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQzVKLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLFlBQVksRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztZQUN4SixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxXQUFXLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDL0ksSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQzdJLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLG1CQUFtQixFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3ZKLFlBQVksQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzlELFlBQVksQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ25FLFlBQVksQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2hFLFlBQVksQ0FBQyxVQUFVLENBQUMsc0JBQXNCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUNqRSxZQUFZLENBQUMsVUFBVSxDQUFDLHNCQUFzQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQy9ELFlBQVksQ0FBQyxVQUFVLENBQUMsc0JBQXNCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUNqRSxZQUFZLENBQUMsVUFBVSxDQUFDLHNCQUFzQixDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzdELElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLDRCQUE0QixFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBRWhLLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO1lBQzNDLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztLQUFBO0lBRUQsT0FBTztRQUNMLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNyQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNDLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ3ZGLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxXQUFXLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDOUosSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3pGLENBQUM7SUFFRCxXQUFXLENBQUMsS0FBSztRQUNmLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxhQUFhO1FBQ1gsaUNBQWlDO0lBQ25DLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDN0IsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDOUUsSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFO1lBQ2hCLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN6QztJQUNILENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxNQUFNLHVCQUF1QixHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7UUFDdEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxvQ0FBb0MsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUM7UUFDdkYsSUFBSSxDQUFDLDJCQUEyQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLENBQUM7SUFDOUcsQ0FBQztJQUVELHNCQUFzQjtRQUNwQixNQUFNLHVCQUF1QixHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7UUFDdEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxpQ0FBaUMsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUM7UUFDcEYsSUFBSSxDQUFDLDJCQUEyQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLENBQUM7SUFDOUcsQ0FBQztJQUVELHFCQUFxQjtRQUNuQixJQUFJLENBQUMsYUFBYSxDQUFDLHFCQUFxQixFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7WUFDckUsSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFO2dCQUNwQixJQUFJLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7YUFDbEM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxhQUFhO1FBQ1gsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsMkJBQTJCLEVBQUU7WUFDOUQsTUFBTSxFQUFFLEtBQUs7WUFDYixLQUFLLEVBQUUsS0FBSztZQUNaLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLFNBQVMsRUFBRSxLQUFLO1lBQ2hCLElBQUksRUFBRSxFQUFFO1lBQ1IsWUFBWSxFQUFFLElBQUk7U0FDbkIsQ0FBQyxDQUFDO1FBQ0gsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDckMsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQ3ZDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUdELDZCQUE2QjtRQUMzQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxrQ0FBa0MsRUFBRTtZQUNyRSxNQUFNLEVBQUUsS0FBSztZQUNiLEtBQUssRUFBRSxLQUFLO1lBQ1osV0FBVyxFQUFFLElBQUk7WUFDakIsU0FBUyxFQUFFLEtBQUs7WUFDaEIsSUFBSSxFQUFFLEVBQUU7WUFDUixZQUFZLEVBQUUsSUFBSTtTQUNuQixDQUFDLENBQUM7UUFDSCxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNyQyxPQUFPLENBQUMsR0FBRyxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDdkMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEtBQUssUUFBUSxFQUFFO1lBQzdDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQztnQkFDckMsWUFBWSxFQUFFLE1BQU07YUFDckIsQ0FBQyxDQUFDO1NBQ0o7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDO1lBQzlCLFlBQVksRUFBRSxRQUFRO1NBQ3ZCLENBQUMsQ0FBQztRQUNILFVBQVUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVELGNBQWM7UUFDWixtQkFBbUI7UUFDbkIsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksS0FBSyxTQUFTLEVBQUU7WUFDOUMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUNwQztnQkFDRSxZQUFZLEVBQUUsTUFBTTthQUNyQixFQUNELEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxDQUMxQixDQUFDO1NBQ0g7UUFFRCxnQkFBZ0I7UUFDaEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FDN0I7WUFDRSxZQUFZLEVBQUUsU0FBUztTQUN4QixFQUNELEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxDQUMxQixDQUFDO0lBQ0osQ0FBQztJQUVNLG1CQUFtQjtRQUN4QixnQ0FBZ0M7UUFDaEMseUZBQXlGO1FBQ3pGLGdDQUFnQztRQUNoQywrQ0FBK0M7UUFDL0MsZ0JBQWdCO1FBQ2hCLFFBQVE7UUFDUix3REFBd0Q7UUFDeEQsc0NBQXNDO1FBQ3RDLFFBQVE7UUFDUixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLDJCQUEyQixFQUFFLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztJQUMvQixDQUFDO0lBRUQsYUFBYTtRQUNYLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFO1lBQzlELFFBQVEsRUFBRSxNQUFNO1lBQ2hCLE1BQU0sRUFBRSxNQUFNO1lBQ2QsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWU7WUFDM0Isb0JBQW9CO1NBQ3JCLENBQUMsQ0FBQztRQUNILGFBQWEsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ3pDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDM0IsZ0RBQWdEO0lBQ2xELENBQUM7SUFFRCxzQkFBc0I7SUFDdEIsNEVBQTRFO0lBQzVFLElBQUk7SUFFSixjQUFjLENBQUMsSUFBSTtRQUNqQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztJQUN2QixDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7SUFDL0IsQ0FBQztJQUVELHNCQUFzQjtRQUNwQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQzlCLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELGlCQUFpQixDQUFDLFNBQWlCO1FBQ2pDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsc0JBQXNCLENBQUMsY0FBYyxDQUFDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsc0JBQXNCLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDakksSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7U0FDMUY7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNqQixJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFhLEVBQUUsRUFBRTtnQkFDdkUsSUFBSSxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO2dCQUU3QixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxDQUFDLEVBQUU7b0JBQ2xFLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO29CQUM1Qix1Q0FBdUM7aUJBQ3hDO2dCQUNELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLElBQUksSUFBSSxFQUFFO29CQUNuQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztpQkFDeEI7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7aUJBQ3pCO2dCQUNELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxJQUFJLElBQUksRUFBRTtvQkFDdkUsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7aUJBQ3pCO2dCQUNELElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxTQUFTLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLElBQUksc0NBQXNDO29CQUN0SSxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQzs7b0JBRTNCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1lBQzlCLENBQUMsQ0FBQyxDQUFDO1NBQ0o7YUFDSTtZQUNILElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxHQUFHLENBQUMsRUFBRTtnQkFDbEUsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7Z0JBQzVCLHVDQUF1QzthQUN4QztZQUNELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLElBQUksSUFBSSxFQUFFO2dCQUNuQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQzthQUN4QjtZQUNELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxJQUFJLElBQUksRUFBRTtnQkFDdkUsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7YUFDekI7WUFDRCxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksU0FBUyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxJQUFJLHNDQUFzQztnQkFDdEksSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7O2dCQUUzQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztTQUM3QjtJQUNILENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxnQkFBZ0IsR0FBRyxJQUFJLGdCQUFnQixFQUFFLENBQUM7UUFDOUMsZ0JBQWdCLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUNwQyxnQkFBZ0IsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ2xDLGdCQUFnQixDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSx1QkFBdUIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLGFBQWEsQ0FBQztZQUM5RCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsYUFBYSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzNJLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQTtRQUM1QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsQ0FBQyxDQUFDLFdBQVcsQ0FBQztRQUN6QyxJQUFJLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUssYUFBYSxDQUFDLENBQUM7O1lBQ25CLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsU0FBUyxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsRUFBRTtnQkFDbEgsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Z0JBQ3BCLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2YsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDO2dCQUM3QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsQ0FBQyxDQUFDLFdBQVcsQ0FBQztnQkFDekMsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO2dCQUNwQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztnQkFDdkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFPLFNBQWMsRUFBRSxFQUFFO29CQUNyRixJQUFJLFNBQVMsQ0FBQyxPQUFPLEVBQUU7d0JBQ3JCLE1BQU0sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO3dCQUN2QixJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQzt3QkFDdkYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQzt3QkFDdEosSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQzt3QkFDckosSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxXQUFXLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7d0JBQ25LLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxXQUFXLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7d0JBQ25PLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO3dCQUN4RixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQzs0QkFDOUYsWUFBWSxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7d0JBQ3BGLFlBQVksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO3dCQUM3RSxZQUFZLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQzt3QkFDOUUsWUFBWSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQzt3QkFDeEYsWUFBWSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO3dCQUN4RCxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxXQUFXLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7d0JBQ2hMLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQzt3QkFDNUssMEZBQTBGO3dCQUMxRixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztxQkFDM0I7b0JBQ0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7b0JBQ3JCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3pCLENBQUMsQ0FBQSxDQUFDLENBQUM7YUFDSjtRQUNILENBQUM7S0FBQTtJQUVELGtCQUFrQjtRQUNoQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7UUFDMUYsSUFBSSxjQUFjLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUNyQyxJQUFJLGNBQWMsSUFBSSxJQUFJLElBQUksY0FBYyxJQUFJLFNBQVMsSUFBSSxjQUFjLEtBQUssTUFBTSxJQUFJLGNBQWMsS0FBSyxXQUFXLEVBQUU7WUFDeEgsY0FBYyxHQUFHLElBQUksQ0FBQztTQUN2QjtRQUNELElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ3ZGLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLGNBQWMsRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztRQUM1SixJQUFJLENBQUMsV0FBVyxHQUFHLGNBQWMsQ0FBQztRQUNsQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUdELHFCQUFxQjtJQUVyQixDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsYUFBYSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFhLEVBQUUsRUFBRTtZQUNySSxJQUFJLFFBQVEsQ0FBQyxPQUFPLElBQUksSUFBSSxFQUFFO2dCQUM1QixJQUFJLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO2dCQUMzQyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7b0JBQ25CLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsYUFBYSxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztpQkFDckk7cUJBQ0k7b0JBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxxQkFBcUIsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxhQUFhLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7aUJBQzNIO2FBQ0Y7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFJRCxtQkFBbUI7UUFDakIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFHRCxzQkFBc0I7UUFDcEIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUU7WUFDL0QsUUFBUSxFQUFFLE1BQU07WUFDaEIsTUFBTSxFQUFFLE1BQU07WUFDZCxJQUFJLEVBQUUsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDakQsWUFBWSxFQUFFLElBQUk7U0FDbkIsQ0FBQyxDQUFDO1FBQ0gsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBQ0Qsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVELGFBQWEsQ0FBQyxXQUFXO1FBQ3ZCLE1BQU0sYUFBYSxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDbkYsSUFBSSxhQUFhLElBQUksTUFBTSxJQUFJLGFBQWEsSUFBSSxJQUFJLEVBQUU7WUFDcEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsaUNBQWlDLEdBQUcsV0FBVyxHQUFHLFFBQVEsR0FBRyxhQUFhLENBQUMsQ0FBQztTQUN2RzthQUFNO1lBQ0wsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsaUNBQWlDLEdBQUcsV0FBVyxDQUFDLENBQUM7U0FDNUU7SUFDSCxDQUFDO0lBRUQsc0JBQXNCLENBQUMsdUJBQXVCO1FBQzVDLHVCQUF1QixDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFDRCx1QkFBdUIsQ0FBQyxRQUFRO1FBQzlCLE9BQU8sUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQzNDLENBQUM7SUFDRCxRQUFRLENBQUMsS0FBSztRQUNaLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2hELElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3pCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1NBQzFCO2FBQU07WUFDTCxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztTQUMzQjtJQUNILENBQUM7SUFDRCxjQUFjO1FBQ1osSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDMUIsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUNELGFBQWEsQ0FBQyxLQUFLO1FBQ2pCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3JDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3pCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1NBQzFCO0lBQ0gsQ0FBQztJQUVELG9CQUFvQjtRQUNsQixJQUFJLENBQUMsdUJBQXVCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNoQixJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBQ0QsU0FBUztRQUNQLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUM7UUFDbkMsTUFBTSxRQUFRLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUNoQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQVUsRUFBRSxFQUFFO1lBQ2hDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7WUFDcEMsTUFBTSxXQUFXLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDdkQsUUFBUSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDckMsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUN2RixJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDckUsQ0FBQztJQUNPLGNBQWMsQ0FBQyxHQUFXO1FBQ2hDLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztRQUNqQixNQUFNLENBQUMsR0FBRyxJQUFJLFNBQVMsQ0FBQztZQUN0QixNQUFNLEVBQUUsR0FBRztZQUNYLFNBQVMsRUFBRSxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUk7WUFDMUIsS0FBSyxFQUFFLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDMUMsT0FBTyxFQUFFO2dCQUNQLGVBQWUsRUFBRSxVQUFVLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLFdBQVcsQ0FBQyxFQUFFO2FBQ3hGO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUM1RCxJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztnQkFDMUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQzthQUM1QjtZQUNELENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQTtRQUNaLENBQUMsQ0FBQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUN6QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ2QsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUM7WUFDdkIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7WUFDMUIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztZQUNyQixJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztZQUNuQixJQUFJLENBQUMsc0JBQXNCLEdBQUcsS0FBSyxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFO1lBQ3BCLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQztZQUMxQyxJQUFJLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQztZQUM5QixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUU7WUFDckMsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFO29CQUN6RCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtvQkFDMUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDO29CQUVqRCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUNsQyxJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTt3QkFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUU7NEJBQ3pCLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO3lCQUMzQjt3QkFDRCxJQUFJLFVBQVUsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO3dCQUN2QyxVQUFVLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUM7d0JBQ25ELFVBQVUsQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQzt3QkFDekMsVUFBVSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO3dCQUN6QyxVQUFVLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7d0JBQ3pDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO3dCQUN0QyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLElBQUksSUFBSSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLElBQUksRUFBRTs0QkFDeEQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQzs7NEJBRTNDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO3FCQUMvQjtvQkFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO2lCQUM1QjthQUNGO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsaUJBQWlCO1FBQ2pDLElBQUksd0JBQXdCLEdBQUcsSUFBSSx3QkFBd0IsRUFBRSxDQUFDO1FBQzlELHdCQUF3QixDQUFDLGdCQUFnQixHQUFHLGlCQUFpQixDQUFDO1FBQzlELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUM7UUFDaEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyx5QkFBeUIsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFO1lBQ2pHLElBQUksUUFBUSxDQUFDLE9BQU8sS0FBSyxJQUFJLEVBQUU7Z0JBQzdCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO2dCQUM1QixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO2FBQ25EO2lCQUNJO2dCQUNILElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUM1RDtZQUNELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxLQUFLLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxlQUFlLENBQUMsU0FBUyxFQUFFLE1BQU07UUFDL0IsSUFBSSxNQUFNLElBQUksSUFBSSxJQUFJLE1BQU0sSUFBSSxFQUFFLEVBQUU7WUFDbEMsT0FBTyxTQUFTLENBQUM7U0FDbEI7YUFBTSxJQUFJLE1BQU0sSUFBSSxJQUFJLEVBQUU7WUFDekIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUM5QixNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDbkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQy9ELENBQUE7WUFDRCxPQUFPLElBQUksQ0FBQztTQUNiO0lBQ0gsQ0FBQztJQUdELFdBQVc7UUFDVCxzRUFBc0U7UUFDdEUsNERBQTREO1FBQzVELG1FQUFtRTtRQUNuRSxvRUFBb0U7UUFDcEUsZ0NBQWdDO1FBQ2hDLHdFQUF3RTtRQUN4RSxVQUFVO1FBQ1YsTUFBTTtRQUNOLElBQUk7UUFDSiw2QkFBNkI7UUFDN0IscURBQXFEO1FBQ3JELE1BQU07UUFDTiw0QkFBNEI7UUFDNUIsa0RBQWtEO1FBQ2xELE1BQU07UUFDTixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUNELHlCQUF5QjtRQUN2QixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQseUJBQXlCO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFDRCxlQUFlO1FBQ2IsSUFBSSxLQUFLLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUM3QixLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFlBQWlCLEVBQUUsRUFBRTtZQUN4RSxJQUFJLFlBQVksQ0FBQyxPQUFPLElBQUksS0FBSyxFQUFFO2dCQUNqQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsWUFBWSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztnQkFDckUsSUFBSSxDQUFDLHNCQUFzQixHQUFHLEtBQUssQ0FBQztnQkFDcEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7YUFDM0M7aUJBQ0ksSUFBSSxZQUFZLENBQUMsT0FBTyxJQUFJLElBQUksRUFBRTtnQkFDckMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7Z0JBQ2xGLElBQUksQ0FBQyxLQUFLO29CQUNSLFlBQVksQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7YUFDaEc7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxjQUFjO1FBQ1osSUFBSSxlQUFlLENBQUM7UUFDcEIsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDdkYsSUFBSSxlQUFlLENBQUM7UUFDcEIsZUFBZSxHQUFHO1lBQ2hCLFlBQVksRUFBRSxJQUFJO1NBQ25CLENBQUE7UUFDRCxlQUFlLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUNuQyxJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFlBQWlCLEVBQUUsRUFBRTtZQUNuRixJQUFJLGlCQUFpQixHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUM7WUFDMUMsSUFBSSxpQkFBaUIsSUFBSSxpQkFBaUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUNyRCxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxtQkFBbUIsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQzthQUMxSjtpQkFDSTtnQkFDSCxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxtQkFBbUIsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQzthQUMzSjtRQUNILENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQzs7c0ZBdm1EVSxtQkFBbUIsMnlCQW1JcEIsTUFBTTtzRUFuSUwsbUJBQW1COzs7Ozs7Ozs7Ozs7Ozs7UUNySGhDLHNDQUsrQjtRQUczQiw4QkFBWTtRQUNSLG1DQUFxRztRQUF6RSw4R0FBWSxvQkFBZ0IsSUFBQyxpSEFBcUIseUJBQXFCLElBQTFDO1FBQTRDLGlCQUFXO1FBQ3BILGlCQUFNO1FBR04seUJBQWtFO1FBR2xFLDhCQUF3RTtRQUdwRSxxRUEyQ007UUFHTixvRUFRTTtRQUdOLG9FQU9NO1FBR04saUNBRWtFO1FBRDlELGdHQUFTLG1CQUFlLElBQUM7O1FBRXpCLG9DQUVpRDtRQUFBLDRCQUFXO1FBQUEsaUJBQVc7UUFDM0UsaUJBQVM7UUFHVCw0RUFVUztRQUNULDJDQUFrQztRQUM5QixxQ0FBdUM7UUFDM0MsaUJBQVc7UUFHWCw2RUFVUztRQUNiLGlCQUFNO1FBQ1YsaUJBQWM7UUFHZCw0Q0FDK0U7UUFDM0UsMENBQW9HO1FBQXJGLDRJQUEyQix3QkFBb0IsSUFBQztRQUFxQyxpQkFBZ0I7UUFDeEgsaUJBQWM7UUFHZCwyQ0FBaUM7UUFDN0IsbUNBQW9EO1FBQTlCLGlHQUFTLHVCQUFtQixJQUFDO1FBQy9DLGlDQUFVO1FBQUEsNEJBQVc7UUFBQSxpQkFBVztRQUNoQyw2QkFBTTtRQUFBLGFBQWdDOztRQUFBLGlCQUFPO1FBQ2pELGlCQUFTO1FBQ1QsNkVBR1M7UUFDVCw2RUFHUztRQUNULG1DQUE0QztRQUF0QixpR0FBUyxlQUFXLElBQUM7UUFDdkMsaUNBQVU7UUFBQSw0QkFBVztRQUFBLGlCQUFXO1FBQ2hDLDZCQUFNO1FBQUEsYUFBZ0M7O1FBQUEsaUJBQU87UUFDakQsaUJBQVM7UUFDVCwrQkFBMkI7UUFDM0IsbUNBQThFO1FBQXhELG1KQUFTLGFBQXdCLFNBQUMsd0JBQW9CLElBQUM7UUFDekUscUNBQXdFO1FBQ3BFLDBDQUNKO1FBQUEsaUJBQVc7UUFDWCw2QkFBTTtRQUFBLGFBQXdCO1FBQUEsaUJBQU87UUFDekMsaUJBQVM7UUFDYixpQkFBVztRQUdYLDRDQUNxRDtRQUNqRCx1R0FBNkc7UUFDakgsaUJBQWM7Ozs7UUF6SkksZUFBaUI7UUFBakIsbUNBQWlCO1FBVXJCLGVBQXVEO1FBQXZELGdGQUF1RDtRQThDdkQsZUFBK0Q7UUFBL0Qsd0ZBQStEO1FBVy9ELGVBQXFDO1FBQXJDLDBEQUFxQztRQVVTLGVBQTZDO1FBQTdDLDhFQUE2QztRQUNuRSx5Q0FBcUM7UUFTOUQsZUFBZ0M7UUFBaEMscURBQWdDO1FBZXNCLGVBQTZCO1FBQTdCLGtEQUE2QjtRQWVwRSxlQUFtQjtRQUFuQixpQ0FBbUIsdUJBQUEsMEJBQUE7UUFFcUIsZUFBbUM7UUFBbkMscURBQW1DO1FBT3pGLGVBQWdDO1FBQWhDLDZEQUFnQztRQUVtQixlQUFnRDtRQUFoRCxxRUFBZ0Q7UUFJaEQsZUFBZ0Q7UUFBaEQscUVBQWdEO1FBTW5HLGVBQWdDO1FBQWhDLDZEQUFnQztRQUlOLGVBQXVDO1FBQXZDLDBDQUF1QztRQUdqRSxlQUF3QjtRQUF4Qix1REFBd0I7UUFNbEMsZUFBMEI7UUFBMUIsd0NBQTBCO1FBQ0osZUFBc0I7UUFBdEIsMkNBQXNCO3N3QkR2RGxDO1lBQ1YsT0FBTyxDQUFDLE1BQU0sRUFBRTtnQkFDZCxVQUFVLENBQUMsV0FBVyxFQUFFO29CQUN0QixLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUM7b0JBQ3JCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ3BDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQ3JDLENBQUM7YUFDSCxDQUFDO1NBQ0g7dUZBR1UsbUJBQW1CO2NBZC9CLFNBQVM7ZUFBQztnQkFDVCxRQUFRLEVBQUUsaUJBQWlCO2dCQUMzQixXQUFXLEVBQUUsNkJBQTZCO2dCQUMxQyxVQUFVLEVBQUU7b0JBQ1YsT0FBTyxDQUFDLE1BQU0sRUFBRTt3QkFDZCxVQUFVLENBQUMsV0FBVyxFQUFFOzRCQUN0QixLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUM7NEJBQ3JCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7NEJBQ3BDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7eUJBQ3JDLENBQUM7cUJBQ0gsQ0FBQztpQkFDSDthQUNGO3NsQkFxSW1DLE1BQU07c0JBQXJDLE1BQU07dUJBQUMsTUFBTTt3QkFsSVksb0JBQW9CO2tCQUEvQyxTQUFTO21CQUFDLGVBQWU7WUFDSSxlQUFlO2tCQUE1QyxTQUFTO21CQUFDLGlCQUFpQjtZQUNhLHVCQUF1QjtrQkFBL0QsWUFBWTttQkFBQyx5QkFBeUI7WUFDVCxlQUFlO2tCQUE1QyxTQUFTO21CQUFDLGlCQUFpQjtZQUVuQixZQUFZO2tCQUFwQixLQUFLO1lBQ0ksTUFBTTtrQkFBZixNQUFNO1lBQzhDLDhCQUE4QjtrQkFBbEYsU0FBUzttQkFBQyxnQ0FBZ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBVc2VyRGV0YWlsc0ZldGNoZWRBZnRlckxvZ2luLCBVc2VyRGV0YWlsc0ZldGNoZWRBZnRlckNvbXBhbnlMb2dpbiwgRmV0Y2hUaW1lU2hlZXRCdXR0b25EZXRhaWxzLCBSb2xlc0ZldGNoVHJpZ2dlcmVkIH0gZnJvbSAnLi8uLi8uLi9zdG9yZS9hY3Rpb25zL2F1dGhlbnRpY2F0aW9uLmFjdGlvbnMnO1xyXG5pbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBJbmplY3QsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIFZpZXdDaGlsZCxcclxuICBPdXRwdXQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIE5nTW9kdWxlUmVmLFxyXG4gIE5nTW9kdWxlRmFjdG9yeUxvYWRlcixcclxuICBWaWV3Q29udGFpbmVyUmVmLCBWaWV3Q2hpbGRyZW4sIENoYW5nZURldGVjdG9yUmVmLCBUZW1wbGF0ZVJlZlxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7XHJcbiAgUmVjZWl2ZU1lc3NhZ2VUcmlnZ2VyZWQsXHJcbiAgUHJlc2VuY2VFdmVudFRyaWdnZXJlZCxcclxuICBJbml0YWxTdGF0ZU9mVXNlcnNUcmlnZ2VyZWQsXHJcbiAgTWVzc2FnZUFjdGlvblR5cGVzLFxyXG4gIFJlY2VpdmVDaGFubmVsVXBkYXRlTW9kZWxUcmlnZ2VyZWQsXHJcbiAgUmVjZWl2ZVNpZ25hbFRyaWdnZXJlZCxcclxufSBmcm9tIFwiLi4vLi4vc3RvcmUvYWN0aW9ucy9jaGF0LmFjdGlvbnNcIlxyXG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHsgU2F0UG9wb3ZlciB9IGZyb20gXCJAbmNzdGF0ZS9zYXQtcG9wb3ZlclwiO1xyXG5pbXBvcnQgeyBzZWxlY3QsIFN0b3JlIH0gZnJvbSBcIkBuZ3J4L3N0b3JlXCI7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tIFwiQG5neC10cmFuc2xhdGUvY29yZVwiO1xyXG5pbXBvcnQgeyBDb29raWVTZXJ2aWNlIH0gZnJvbSBcIm5neC1jb29raWUtc2VydmljZVwiO1xyXG5cclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IHRha2VVbnRpbCwgdGFwIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcbmltcG9ydCB7IEdldFVzZXJTdG9yZUlkVHJpZ2dlcmVkLCBBdXRoZW50aWNhdGlvbkFjdGlvblR5cGVzIH0gZnJvbSBcIi4uLy4uL3N0b3JlL2FjdGlvbnMvYXV0aGVudGljYXRpb24uYWN0aW9uc1wiO1xyXG5pbXBvcnQgeyBDbGVhckFsbFVucmVhZE5vdGlmaWNhdGlvbnNUcmlnZ2VyZWQsIENsZWFyVW5yZWFkTm90aWZpY2F0aW9uc1RyaWdnZXJlZCwgTmV3Tm90aWZpY2F0aW9uUmVjZWl2ZWQsIE5vdGlmaWNhdGlvbnNBY3Rpb25UeXBlcywgVXBzZXJ0VW5yZWFkTm90aWZpY2F0aW9uc1RyaWdnZXJlZCB9IGZyb20gXCIuLi8uLi9zdG9yZS9hY3Rpb25zL25vdGlmaWNhdGlvbnMuYWN0aW9uc1wiO1xyXG5pbXBvcnQgeyBTdGF0ZSB9IGZyb20gXCIuLi8uLi9zdG9yZS9yZWR1Y2Vycy9pbmRleFwiO1xyXG5pbXBvcnQgKiBhcyBzaGFyZWRNb2R1bGVSZWR1Y2VycyBmcm9tIFwiLi4vLi4vc3RvcmUvcmVkdWNlcnMvaW5kZXhcIjtcclxuaW1wb3J0ICcuLi8uLi8uLi9nbG9iYWxkZXBlbmRlbmNpZXMvaGVscGVycy9mb250YXdlc29tZS1pY29ucyc7XHJcbmltcG9ydCB7IENvbmZpcm1hdGlvbkRpYWxvZ0NvbXBvbmVudCB9IGZyb20gXCIuLi9jb25maXJtYXRpb24tZGlhbG9nL2NvbmZpcm1hdGlvbi1kaWFsb2cuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvY29tbW9uLXVzZWQuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBBY3Rpb25zLCBvZlR5cGUgfSBmcm9tIFwiQG5ncngvZWZmZWN0c1wiO1xyXG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzIH0gZnJvbSAnLi4vLi4vLi4vZ2xvYmFsZGVwZW5kZW5jaWVzL2NvbnN0YW50cy9sb2NhbHN0b3JhZ2UtcHJvcGVydGllcyc7XHJcbmltcG9ydCB7IENoYW5uZWxOYW1lcyB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9jaGFubmVsLW5hbWVzJztcclxuaW1wb3J0IHsgV0lORE9XIH0gZnJvbSAnLi4vLi4vLi4vZ2xvYmFsZGVwZW5kZW5jaWVzL2hlbHBlcnMvd2luZG93LmhlbHBlcic7XHJcbmltcG9ydCB7IEF1dGhlbnRpY2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2F1dGhlbnRpY2F0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUaGVtZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90aGVtZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTGF5b3V0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2xheW91dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVGltZXNoZWV0RGlzYWJsZW9yRW5hYmxlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3RpbWVzaGVldGVuYWJsZWRpc2FibGUnO1xyXG5pbXBvcnQgeyBUaGVtZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3RoZW1lcy5tb2RlbCc7XHJcbmltcG9ydCB7IE5vdGlmaWNhdGlvbk1vZGVsLCBOb3RpZmljYXRpb25PdXRwdXRNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9Ob3RpZmljYXRpb25zT3V0UHV0TW9kZWwnO1xyXG5pbXBvcnQgeyBDdXN0b21BcHBCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vZ2xvYmFsZGVwZW5kZW5jaWVzL2NvbXBvbmVudHMvY29tcG9uZW50YmFzZSc7XHJcbmltcG9ydCB7IFNvZnRMYWJlbENvbmZpZ3VyYXRpb25Nb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9zb2Z0bGFiZWxzLW1vZGVsJztcclxuaW1wb3J0IHsgVXNlck1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3VzZXInO1xyXG5pbXBvcnQgeyBDb21wYW5pZXNMaXN0IH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NvbXBhbmllc2xpc3QubW9kZWwnO1xyXG5pbXBvcnQgeyBTdG9yZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3N0b3JlLW1vZGVsJztcclxuaW1wb3J0IHsgQXBwTm90aWZpY2F0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL0FwcE5vdGlmaWNhdGlvbic7XHJcbmltcG9ydCB7IFN0b3JlU2VhcmNoTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvc3RvcmUtc2VhcmNoLW1vZGVsJztcclxuaW1wb3J0IHsgTmdNb2R1bGVGYWN0b3J5LCBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFdvcmtJdGVtc0RpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uL2FsbC13b3JrLWl0ZW1zLWRpYWxvZy9hbGwtd29yay1pdGVtcy1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU2hlbGxNb2R1bGVzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3NoZWxsLm1vZHVsZXMuc2VydmljZSc7XHJcbmltcG9ydCAqIGFzIF8gZnJvbSBcInVuZGVyc2NvcmVcIjtcclxuaW1wb3J0IHsgRmVlZFRpbWVEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi9mZWVkLXRpbWUvZmVlZC10aW1lLWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBOb3RpZmljYXRpb25UeXBlSWRzIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL25vdGlmaWNhdGlvbi10eXBlLWlkcyc7XHJcbmltcG9ydCB7IFVzZXJTdG9yeUFzc2lnbmVkTm90aWZpY2F0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL1VzZXJTdG9yeUFzc2lnbmVkTm90aWZpY2F0aW9uJztcclxuaW1wb3J0IHsgQ2hhbm5lbFJvdXRlcyB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9ub3RpZmljYXRpb24tcm91dGVzJztcclxuaW1wb3J0IHsgUm9sZVVwZGF0ZWROb3RpZmljYXRpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvUm9sZVVwZGF0ZWROb3RpZmljYXRpb24nO1xyXG5pbXBvcnQgeyBSZXBvcnRTdWJtaXR0ZWROb3RpZmljYXRpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvUmVwb3J0U3VibWl0dGVkTm90aWZpY2F0aW9uJztcclxuaW1wb3J0IHsgUmVwb3J0Q29uZmlnQXNzaWduZWROb3RpZmljYXRpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvUmVwb3J0Q29uZmlnQXNzaWduZWROb3RpZmljYXRpb24nO1xyXG5pbXBvcnQgeyBNdWx0aXBsZUNoYXJ0c1NjaGVkdWxpbmcgfSBmcm9tICcuLi8uLi9tb2RlbHMvbXVsdGlDaGFydHNTY2hlZHVsaW5nJztcclxuaW1wb3J0IHsgQXNzZXRBc3NpZ25lZE5vdGlmaWNhdGlvbiB9IGZyb20gJy4uLy4uL21vZGVscy9Bc3NldEFzc2lnbmVkTm90aWZpY2F0aW9uTW9kZWwnO1xyXG5pbXBvcnQgeyBOZXdQcm9qZWN0Q3JlYXRlZE5vdGlmaWNhdGlvbk1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL05ld1Byb2plY3RDcmVhdGVkTm90aWZpY2F0aW9uTW9kZWwnO1xyXG5pbXBvcnQgeyBHb2FsQXBwcm92ZWROb3RpZmljYXRpb25Nb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nb2FsQXBwcm92ZWROb3RpZmljYXRpb25Nb2RlbCc7XHJcbmltcG9ydCB7IFVzZXJTdG9yeVVwZGF0ZU5vdGlmaWNhdGlvbk1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3VzZXJTdG9yeVVwZGF0ZU5vdGlmaWNhdGlvbk1vZGVsJztcclxuaW1wb3J0IHsgVXNlclN0b3J5Q29tbWVudE5vdGlmaWNhdGlvbk1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3VzZXJTdG9yeUNvbW1lbnROb3RpZmljYXRpb25Nb2RlbCc7XHJcbmltcG9ydCB7IFNwcmludFN0YXJ0ZWROb3RpZmljYXRpb25Nb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9zcHJpbnRTdGFydGVkTm90aWZpY2F0aW9uTW9kZWwnO1xyXG5pbXBvcnQgeyBTcHJpbnRSZXBsYW5TdGFydGVkTm90aWZpY2F0aW9uTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvc3ByaW50UmVwbGFuUmVxdWVzdGVkTW9kZWwnO1xyXG5pbXBvcnQgeyBBbm5vdWNlbWVudERpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uL25vdGlmaWNhdGlvbnMvYW5ub3VuY2VtZW50LWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBXb3Jrc3BhY2VMaXN0IH0gZnJvbSAnLi4vLi4vbW9kZWxzL3dvcmtzcGFjZUxpc3QnO1xyXG5pbXBvcnQgeyBhbmltYXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xyXG5pbXBvcnQgeyBOZ3hVaUxvYWRlclNlcnZpY2UsIFNQSU5ORVIgfSBmcm9tICduZ3gtdWktbG9hZGVyJztcclxuaW1wb3J0IHsgTmV3UHJvamVjdEZlYXR1cmVDcmVhdGVkTm90aWZpY2F0aW9uTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvTmV3UHJvamVjdEZlYXR1cmVOb3RpZmljYXRpb25Nb2RlbCc7XHJcbmltcG9ydCB7IFVzZXJTdG9yeUFyY2hpdmVOb3RpZmljYXRpb25Nb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9hcmNoaXZlVXNlclN0b3J5TW9kZWwnO1xyXG5pbXBvcnQgeyBVc2VyU3RvcnlQYXJrTm90aWZpY2F0aW9uTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvcGFya1VzZXJTdG9yeUlucHV0TW9kZWwnO1xyXG5pbXBvcnQgeyBFeHBvcnRDb25maWd1cmF0aW9uRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vZXhwb3J0LWltcG9ydC1jb25maWd1cmF0aW9uL2V4cG9ydC1jb25maWd1cmF0aW9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEZpbGVNb2RlbCwgRmlsZVJlc3VsdE1vZGVsLCBTdG9yZU1hbmFnZW1lbnRTZXJ2aWNlLCBVcHNlcnRGaWxlTW9kZWwgfSBmcm9tICdAdGhldHJhZGVlbmdpbmVvcmcxL3Nub3ZhLWRvY3VtZW50LW1hbmFnZW1lbnQnO1xyXG5pbXBvcnQgeyBUb2FzdHJTZXJ2aWNlIH0gZnJvbSAnbmd4LXRvYXN0cic7XHJcbnR5cGUgTW9kdWxlV2l0aENvbXBvbmVudFNlcnZpY2UgPSBUeXBlPGFueT4gJiB7IGNvbXBvbmVudFNlcnZpY2U6IFR5cGU8YW55PiB9O1xyXG4vLyBpbXBvcnQgeyBDb25zdGFudFZhcmlhYmxlcyB9IGZyb20gXCIuLi9jb25zdGFudHMvY29uc3RhbnQtdmFyaWFibGVzXCI7XHJcbmltcG9ydCBSZXN1bWFibGUgZnJvbSBcInJlc3VtYWJsZWpzXCI7XHJcbmltcG9ydCB7IEFwaVVybHMgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvYXBpLXVybHMnO1xyXG5pbXBvcnQgeyBBdmFpbGFibGVMYW5ncyB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9hdmFpbGFibGUtbGFuZ3VhZ2VzJztcclxuaW1wb3J0IHsgSW1wb3J0Q29uZmlndXJhdGlvbk1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2ltcG9ydC1jb25maWd1cmF0aW9uLW1vZGVsJztcclxuaW1wb3J0IHsgQ2hhdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jaGF0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNZXNzYWdlRGV0YWlscyB9IGZyb20gJy4uLy4uL21vZGVscy9NZXNzYWdlRGV0YWlscyc7XHJcbmltcG9ydCB7IENoYW5uZWxVcGRhdGVNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9DaGFubmVsVXBkYXRlTW9kZWwnO1xyXG5pbXBvcnQgeyBQdXNoTm90aWZpY2F0aW9uc1NlcnZpY2UgfSBmcm9tICduZy1wdXNoLWl2eSc7XHJcbmltcG9ydCB7IE1lc3NhZ2VUeXBpbmdEZXRhaWxzIH0gZnJvbSAnLi4vLi4vbW9kZWxzL01lc3NhZ2VUeXBpbmdEZXRhaWxzJztcclxuaW1wb3J0IHsgUHViTnViQW5ndWxhciB9IGZyb20gJ3B1Ym51Yi1hbmd1bGFyMic7XHJcblxyXG5cclxuaW1wb3J0IHsgSW50cm9Nb2RlbCB9IGZyb20gXCIuLi8uLi9tb2RlbHMvSW50cm9Nb2RlbFwiO1xyXG5pbXBvcnQgeyBMZWF2ZUFwcGxpY2F0aW9uTm90aWZpY2F0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2xlYXZlQXBwbGljYXRpb25Ob3RpZmljdGlvbic7XHJcbmltcG9ydCB7IFNpZ25hbHJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2lnbmFsci5zZXJ2aWNlJztcclxuXHJcbi8qKiBAZHluYW1pYyAqL1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwiYXBwLWhlYWRlci1zaWRlXCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi9oZWFkZXItc2lkZS50ZW1wbGF0ZS5odG1sXCIsXHJcbiAgYW5pbWF0aW9uczogW1xyXG4gICAgdHJpZ2dlcignZmFkZScsIFtcclxuICAgICAgdHJhbnNpdGlvbigndm9pZCA9PiAqJywgW1xyXG4gICAgICAgIHN0eWxlKHsgb3BhY2l0eTogMCB9KSxcclxuICAgICAgICBhbmltYXRlKDIwMDAsIHN0eWxlKHsgb3BhY2l0eTogMSB9KSksXHJcbiAgICAgICAgYW5pbWF0ZSg2MDAwLCBzdHlsZSh7IG9wYWNpdHk6IDAgfSkpXHJcbiAgICAgIF0pXHJcbiAgICBdKVxyXG4gIF1cclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBIZWFkZXJTaWRlQ29tcG9uZW50IGV4dGVuZHMgQ3VzdG9tQXBwQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQFZpZXdDaGlsZCgnZmVlZFRpbWVTaGVldCcpIGZlZWRUaW1lU2hlZXRQb3BvdmVyOiBTYXRQb3BvdmVyO1xyXG4gIEBWaWV3Q2hpbGQoJ2ZlZWRCYWNrUG9wb3ZlcicpIGZlZWRCYWNrUG9wT3ZlcjogU2F0UG9wb3ZlcjtcclxuICBAVmlld0NoaWxkcmVuKFwiZmlsZVVwbG9hZERyb3B6b25lUG9wdXBcIikgZmlsZVVwbG9hZERyb3B6b25lUG9wdXA7XHJcbiAgQFZpZXdDaGlsZCgnZG9jdW1lbnRQb3BvdmVyJykgZG9jdW1lbnRQb3BvdmVyOiBTYXRQb3BvdmVyO1xyXG4gIHNvZnRMYWJlbHM6IFNvZnRMYWJlbENvbmZpZ3VyYXRpb25Nb2RlbFtdO1xyXG4gIEBJbnB1dCgpIG5vdGlmaWNQYW5lbDtcclxuICBAT3V0cHV0KCkgb3BlbmVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQFZpZXdDaGlsZChcIm9wZW5Bbm5vdWNlbWVudERpYWxvZ0NvbXBvbmVudFwiKSBwcml2YXRlIG9wZW5Bbm5vdWNlbWVudERpYWxvZ0NvbXBvbmVudDogVGVtcGxhdGVSZWY8YW55PjtcclxuICBzcGlubmVyVHlwZSA9IFNQSU5ORVIuY2lyY2xlO1xyXG4gIHB1YmxpYyBhdmFpbGFibGVMYW5ncyA9IEF2YWlsYWJsZUxhbmdzLmxhbmd1YWdlcztcclxuICBwdWJsaWMgYXZhaWxhYmxlTGFuZ3NNb2JpbGUgPSBbXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6IFwiRW5cIixcclxuICAgICAgY29kZTogXCJlblwiXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiBcIlRlXCIsXHJcbiAgICAgIGNvZGU6IFwidGVcIlxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogXCJLb1wiLFxyXG4gICAgICBjb2RlOiBcImtvXCJcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6IFwiQXJcIixcclxuICAgICAgY29kZTogXCJhclwiXHJcbiAgICB9XHJcbiAgXTtcclxuICAvLyB0aGVtZU1vZGVsJDogT2JzZXJ2YWJsZTxUaGVtZU1vZGVsPjtcclxuICBjb3VudE9mTm90aWZpY2F0aW9ucyQ6IE9ic2VydmFibGU8bnVtYmVyPjtcclxuICBub3RpZmljYXRpb25zJDogT2JzZXJ2YWJsZTxOb3RpZmljYXRpb25PdXRwdXRNb2RlbFtdPjtcclxuICB1bnJlYWRDb3VudE9mTm90aWZpY2F0aW9ucyQ6IE9ic2VydmFibGU8bnVtYmVyPjtcclxuICBhc3NldElkJDogT2JzZXJ2YWJsZTxzdHJpbmc+O1xyXG4gIHVzZXJTdG9yZUlkJDogT2JzZXJ2YWJsZTxzdHJpbmc+O1xyXG4gIHRoZW1lTW9kZWw6IFRoZW1lTW9kZWw7XHJcbiAgcmVsb2FkOiBib29sZWFuO1xyXG4gIHB1YmxpYyBuZ0Rlc3Ryb3llZCQgPSBuZXcgU3ViamVjdCgpO1xyXG4gIGRhc2hib2FyZEZpbHRlcnMgPSB7XHJcbiAgICBwcm9qZWN0SWQ6IG51bGwsXHJcbiAgICB1c2VySWQ6IG51bGwsXHJcbiAgICBnb2FsSWQ6IG51bGwsXHJcbiAgICBpc0RhaWxvZ3VlOiB0cnVlXHJcbiAgfTtcclxuICBwdWJsaWMgZWdyZXRUaGVtZXM7XHJcbiAgcHVibGljIGxheW91dENvbmY6IGFueTtcclxuICBwdWJsaWMgdGltZXNoZWV0RGlzYWJsZW9yRW5hYmxlOiBUaW1lc2hlZXREaXNhYmxlb3JFbmFibGU7XHJcbiAgZG9tYWluczogYW55W107XHJcbiAgbG9hZGluZ0luUHJvZ3Jlc3MkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xyXG4gIHRpbWVQdW5jaENhcmRTaG93ID0gZmFsc2U7XHJcbiAgc2hvd1RyYWlsUGVyaW9kOiBib29sZWFuID0gZmFsc2U7XHJcbiAgYXBwbGljYXRpb25WZXJzaW9uOiBhbnk7XHJcbiAgY29tcGFuaWVzTGlzdCA9IFtdO1xyXG4gIG1lbnVUeXBlOiBzdHJpbmdcclxuICBpc0ZlZWRCYWNrRGlhbG9nOiBib29sZWFuO1xyXG4gIHNlbGVjdGVkTGFuZ05hbWU6IHN0cmluZztcclxuICBjdXJyZW50TGFuZzogc3RyaW5nO1xyXG4gIHNlbGVjdGVkU3RvcmVJZDogc3RyaW5nID0gXCJcIjtcclxuICB1c2VyU3RvcmVJZDogc3RyaW5nO1xyXG4gIHN0b3Jlc0xpc3Q6IFN0b3JlTW9kZWxbXTtcclxuICB2YWxpZGF0aW9uTWVzc2FnZTogc3RyaW5nO1xyXG4gIGlzUmVjb3JkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJvamVjdFJvbGVUZXh0OiBzdHJpbmcgPSAnUHJvamVjdCByb2xlIGNvbmZpZ3VyYXRpb24nO1xyXG4gIGxvZ2dlZEluVXNlcklkOiBzdHJpbmcgPSBcIlwiO1xyXG4gIGNvbXBhbnk6IGFueTtcclxuICBsb2dnZWRVc2VyRGV0YWlsczogYW55O1xyXG4gIG5vT2ZEYXlzOiBhbnk7XHJcbiAgc2hvd0RlbGV0ZUljb246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzaG93RGVsZXRlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNTdG9yZUFjY2VzczogYm9vbGVhbiA9IHRydWU7XHJcbiAgY29tcGFueUlkOiBzdHJpbmc7XHJcbiAgcmV0dXJuVXJsOiBzdHJpbmc7XHJcbiAgc2VsZWN0ZWRDb21wYW55TmFtZTogc3RyaW5nO1xyXG4gIHNlbGVjdGVkQ29tcGFueTogQ29tcGFuaWVzTGlzdDtcclxuICB1c2VyTmFtZTogc3RyaW5nO1xyXG4gIGxvYWRpbmc6IGJvb2xlYW47XHJcbiAgYXV0aGVudGljYXRlZFVzZXJSZWNvcmQ6IFVzZXJNb2RlbDtcclxuICBlbXBsb3llZUlkOiBzdHJpbmc7XHJcbiAgaXNGZWVkVGltZVNoZWV0OiBib29sZWFuO1xyXG4gIGRlZmF1bHREYXNoYm9hcmRJZDogc3RyaW5nO1xyXG4gIHRpbWVTaGVldEJ1dHRvbkRldGFpbHMkOiBPYnNlcnZhYmxlPFRpbWVzaGVldERpc2FibGVvckVuYWJsZT5cclxuICBub3RpZmljYXRpb25zOiBOb3RpZmljYXRpb25PdXRwdXRNb2RlbFtdO1xyXG4gIGFubm91bmNlbWVudElkOiBzdHJpbmc7XHJcbiAgYW5ub3VuY2VOb3RpZmljYXRpb25JZDogc3RyaW5nO1xyXG4gIGRpc3BsYXlXZWxjb21lTm90ZTogYm9vbGVhbjtcclxuICBsb2dnZWRJbkNvdW50OiBhbnk7XHJcbiAgdXNlckZ1bGxOYW1lOiBhbnk7XHJcbiAgZmlsZXM6IEZpbGVbXSA9IFtdO1xyXG4gIGZpbGVzUHJlc2VudDogYm9vbGVhbjtcclxuICBwcm9ncmVzc1ZhbHVlOiBudW1iZXI7XHJcbiAgZmlsZVJlc3VsdE1vZGVsOiBGaWxlUmVzdWx0TW9kZWxbXTtcclxuICBtb2R1bGVUeXBlSWQgPSA5O1xyXG4gIGFueU9wZXJhdGlvbkluUHJvZ3Jlc3M6IGJvb2xlYW47XHJcbiAgZmlsZUluZGV4OiBudW1iZXIgPSAwO1xyXG4gIGZpbGVDb3VudGVyOiBudW1iZXIgPSAxO1xyXG4gIHVwbG9hZGVkRmlsZU5hbWVzID0gW107XHJcbiAgaXNGaWxlVXBsb2FkQ29tcGxldGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNGb2xkZXJVcGxvYWRDb21wbGV0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpbXBvcnRpbmdJblByb2dyZXNzOiBib29sZWFuO1xyXG4gIHNlYXJjaFRleHQ6IHN0cmluZyA9IG51bGw7XHJcbiAgLy8gbWVzc2FnZXNVbnJlYWRDb3VudDogbnVtYmVyID0gMDtcclxuICBjaGFubmVsTGlzdDogYW55O1xyXG4gIHVzZXJDaGFubmVsczogYW55O1xyXG4gIGNvbGxlYWd1ZXNMaXN0OiBhbnk7XHJcbiAgbG9nZ2VkSW5Vc2VyZnVsbE5hbWU6IGFueTtcclxuICBsb2dJblVzZXJJZCA9IHRoaXMuY29va2llU2VydmljZS5nZXQoXCJDdXJyZW50VXNlcklkXCIpO1xyXG4gIGxvZ2luVXNlcmNoYW5uZWxOYW1lOiBzdHJpbmc7XHJcbiAgcHJldmlvdXNNZXNzYWdlOiBhbnk7XHJcbiAgcHVibGlzaGluZ01lc3NhZ2VPZlVzZXI6IGFueTtcclxuICBuZXdOb3RpZmljYXRpb25zQ291bnQ6IGFueSA9IDA7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBwdXNoTm90aWZpY2F0aW9uczogUHVzaE5vdGlmaWNhdGlvbnNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0aGVtZVNlcnZpY2U6IFRoZW1lU2VydmljZSxcclxuICAgIHByaXZhdGUgbmd4U2VydmljZTogTmd4VWlMb2FkZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBsYXlvdXQ6IExheW91dFNlcnZpY2UsXHJcbiAgICBwdWJsaWMgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgcHVibGljIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBjb29raWVTZXJ2aWNlOiBDb29raWVTZXJ2aWNlLFxyXG4gICAgcHVibGljIGRpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgcHJpdmF0ZSBjb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzdG9yZTogU3RvcmU8U3RhdGU+LFxyXG4gICAgcHJpdmF0ZSBwdWJudWI6IFB1Yk51YkFuZ3VsYXIsXHJcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoZW50aWNhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFjdGlvblVwZGF0ZXMkOiBBY3Rpb25zLFxyXG4gICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIHRvYXN0cjogVG9hc3RyU2VydmljZSxcclxuICAgIHByaXZhdGUgc3RvcmVNYW5hZ2VtZW50U2VydmljZTogU3RvcmVNYW5hZ2VtZW50U2VydmljZSxcclxuICAgIHByaXZhdGUgU2hlbGxNb2R1bGVzU2VydmljZTogU2hlbGxNb2R1bGVzU2VydmljZSxcclxuICAgIHByaXZhdGUgY2hhdFNlcnZpY2U6IENoYXRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzaWduYWxyOiBTaWduYWxyU2VydmljZSxcclxuICAgIEBJbmplY3QoV0lORE9XKSBwcml2YXRlIHdpbmRvdzogV2luZG93XHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgLy8gdGhpcy5zaWduYWxyLmluaXRpYWxpemVTaWduYWxSQ29ubmVjdGlvbigpO1xyXG4gICAgdGhpcy5zaWduYWxyLm5vdGlmaWNhdGlvbnMkLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB0aGlzLm5ld05vdGlmaWNhdGlvbnNDb3VudCA9IGRhdGEgJiYgZGF0YS5sZW5ndGggPyBkYXRhLmxlbmd0aCA6IDApO1xyXG5cclxuICAgIHRoaXMucHVzaE5vdGlmaWNhdGlvbnMucmVxdWVzdFBlcm1pc3Npb24oKTtcclxuICAgIHRoaXMuaXNSZWNvcmRpbmcgPSBmYWxzZTtcclxuICAgIC8vIHRoaXMuZ2V0QWN0VHJhY2tlclJlY29yZGVyKCk7XHJcbiAgICBpZiAoKGxvY2FsU3RvcmFnZS5nZXRJdGVtKExvY2FsU3RvcmFnZVByb3BlcnRpZXMuVXNlck1vZGVsKSAhPSBudWxsICYmIGxvY2FsU3RvcmFnZS5nZXRJdGVtKExvY2FsU3RvcmFnZVByb3BlcnRpZXMuVXNlck1vZGVsKSAhPSB1bmRlZmluZWQpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5sb2FkTm90aWZpY2F0aW9ucygpO1xyXG4gICAgfVxyXG4gICAgbGV0IGN1cnJlbnRDdWx0dXJlID0gdGhpcy5jb29raWVTZXJ2aWNlLmdldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkN1cnJlbnRDdWx0dXJlKTtcclxuICAgIGNvbnN0IGNvbXBhbnlsYW4gPSBKU09OLnBhcnNlKHRoaXMuY29va2llU2VydmljZS5nZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Db21wYW55RGV0YWlscykpO1xyXG4gICAgbGV0IGN1cnJlbnRDdWx0dXJlbGFuID0gY29tcGFueWxhbi5sYW5Db2RlO1xyXG5cclxuICAgIGlmIChjdXJyZW50Q3VsdHVyZSA9PSAnJyB8fCBjdXJyZW50Q3VsdHVyZSA9PSBudWxsIHx8IGN1cnJlbnRDdWx0dXJlID09IHVuZGVmaW5lZCB8fCBjdXJyZW50Q3VsdHVyZSA9PT0gJ251bGwnIHx8IGN1cnJlbnRDdWx0dXJlID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICBpZiAoY3VycmVudEN1bHR1cmVsYW4gPT0gJycgfHwgY3VycmVudEN1bHR1cmVsYW4gPT0gbnVsbCB8fCBjdXJyZW50Q3VsdHVyZWxhbiA9PSB1bmRlZmluZWQgfHwgY3VycmVudEN1bHR1cmVsYW4gPT09ICdudWxsJyB8fCBjdXJyZW50Q3VsdHVyZWxhbiA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICBjdXJyZW50Q3VsdHVyZSA9ICdlbic7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgY3VycmVudEN1bHR1cmUgPSBjdXJyZW50Q3VsdHVyZWxhbjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5jdXJyZW50TGFuZyA9IGN1cnJlbnRDdWx0dXJlO1xyXG4gICAgbGV0IGVudmlyb25tZW50ID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkVudmlyb25tZW50KSk7XHJcbiAgICB0aGlzLmNvb2tpZVNlcnZpY2Uuc2V0KExvY2FsU3RvcmFnZVByb3BlcnRpZXMuQ3VycmVudEN1bHR1cmUsIHRoaXMuY3VycmVudExhbmcsIG51bGwsIGVudmlyb25tZW50LmNvb2tpZVBhdGgsIHRoaXMud2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLCBmYWxzZSwgXCJTdHJpY3RcIik7XHJcbiAgICB0aGlzLmFjdGlvblVwZGF0ZXMkXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLm5nRGVzdHJveWVkJCksXHJcbiAgICAgICAgb2ZUeXBlKEF1dGhlbnRpY2F0aW9uQWN0aW9uVHlwZXMuVXNlckRldGFpbHNGZXRjaGVkQWZ0ZXJDb21wYW55TG9naW4pLFxyXG4gICAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnJlbG9hZCA9IHRydWU7XHJcbiAgICAgICAgICAvLyB0aGlzLmNoYXRTZXJ2aWNlLmdldFJlY2VudENoYW5uZWxNZXNzYWdlcygpLnN1YnNjcmliZSgocmVjZW50Q2hhbm5lbE1lc3NhZ2VzOiBhbnkpID0+IHtcclxuICAgICAgICAgIC8vICAgcmVjZW50Q2hhbm5lbE1lc3NhZ2VzLmRhdGEuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICAgIC8vICAgICB0aGlzLm1lc3NhZ2VzVW5yZWFkQ291bnQgKz0gZWxlbWVudC51bnJlYWRNZXNzYWdlQ291bnQ7XHJcbiAgICAgICAgICAvLyAgIH0pO1xyXG4gICAgICAgICAgLy8gfSk7XHJcbiAgICAgICAgICAvLyB0aGlzLmNoYXRTZXJ2aWNlLmdldFJlY2VudEluZGl2aWR1YWxNZXNzYWdlcygpLnN1YnNjcmliZSgocmVjZW50Q29sbGVhZ3VlTWVzc2FnZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgLy8gICB2YXIgdW5pcSA9IHt9O1xyXG4gICAgICAgICAgLy8gICByZWNlbnRDb2xsZWFndWVNZXNzYWdlcy5kYXRhID0gcmVjZW50Q29sbGVhZ3VlTWVzc2FnZXMuZGF0YS5maWx0ZXIob2JqID0+ICF1bmlxW29iai5pZF0gJiYgKHVuaXFbb2JqLmlkXSA9IHRydWUpKTtcclxuICAgICAgICAgIC8vICAgcmVjZW50Q29sbGVhZ3VlTWVzc2FnZXMuZGF0YS5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgLy8gICAgIGlmKGVsZW1lbnQuaWQgIT0gdGhpcy5sb2dnZWRJblVzZXJJZCl7XHJcbiAgICAgICAgICAvLyAgICAgdGhpcy5tZXNzYWdlc1VucmVhZENvdW50ICs9IGVsZW1lbnQudW5yZWFkTWVzc2FnZUNvdW50O1xyXG4gICAgICAgICAgLy8gICAgIH1cclxuICAgICAgICAgIC8vICAgfSk7XHJcbiAgICAgICAgICAvLyB9KTtcclxuICAgICAgICAgIHRoaXMuZ2V0SW50cm9EZXRhaWxzKCk7XHJcbiAgICAgICAgICB0aGlzLm5nT25Jbml0KCk7XHJcbiAgICAgICAgICB0aGlzLmdldE5vdGlmaWNhdGlvbnMoKTtcclxuICAgICAgICAgIHRoaXMuZ2V0VGVhbU1lbWJlcnMoKTtcclxuICAgICAgICAgIHZhciBEZWZhdWx0RGFzaGJvYXJkSWRGb3JMb2dnZWRJblVzZXIgPSB0aGlzLmNvb2tpZVNlcnZpY2UuY2hlY2soTG9jYWxTdG9yYWdlUHJvcGVydGllcy5EZWZhdWx0RGFzaGJvYXJkKSA/IEpTT04ucGFyc2UodGhpcy5jb29raWVTZXJ2aWNlLmdldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkRlZmF1bHREYXNoYm9hcmQpKSA6IG51bGw7XHJcbiAgICAgICAgICBjb25zdCB1c2VyUmVmZXJlbmNlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Vc2VyUmVmZXJlbmNlSWQpO1xyXG4gICAgICAgICAgaWYgKCFEZWZhdWx0RGFzaGJvYXJkSWRGb3JMb2dnZWRJblVzZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RoaXMucmV0dXJuVXJsXSk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHVzZXJSZWZlcmVuY2UgIT0gXCJudWxsXCIgJiYgdXNlclJlZmVyZW5jZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoXCJkYXNoYm9hcmQtbWFuYWdlbWVudC9kYXNoYm9hcmQvXCIgKyBEZWZhdWx0RGFzaGJvYXJkSWRGb3JMb2dnZWRJblVzZXIgKyBcIi9mb3JtL1wiICsgdXNlclJlZmVyZW5jZSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKFwiZGFzaGJvYXJkLW1hbmFnZW1lbnQvZGFzaGJvYXJkL1wiICsgRGVmYXVsdERhc2hib2FyZElkRm9yTG9nZ2VkSW5Vc2VyKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKCk7XHJcblxyXG5cclxuICAgIHRoaXMuYWN0aW9uVXBkYXRlcyRcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMubmdEZXN0cm95ZWQkKSxcclxuICAgICAgICBvZlR5cGUoQXV0aGVudGljYXRpb25BY3Rpb25UeXBlcy5Vc2VyRGV0YWlsc0ZldGNoZWRBZnRlckxvZ2luKSxcclxuICAgICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvb2tpZVNlcnZpY2UuY2hlY2soTG9jYWxTdG9yYWdlUHJvcGVydGllcy5DdXJyZW50VXNlcklkKSkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IEN1cnJlbnRVc2VySWQgPSB0aGlzLmNvb2tpZVNlcnZpY2UuZ2V0KExvY2FsU3RvcmFnZVByb3BlcnRpZXMuQ3VycmVudFVzZXJJZCk7XHJcbiAgICAgICAgICAgICAgLy8gU3Vic2NyaWJlIHRvIFRhc2sgQXNzaWdubWVudCBOb3RpZmljYWl0b25zIGhlcmUuXHJcbiAgICAgICAgICAgICAgY29uc3QgdGFza0Fzc2lnbm1lbnRDaGFubmVsVG9TdWJzY3JpYmVJbnRvID0gQ2hhbm5lbE5hbWVzLkNoYW5uZWxfVGFza0Fzc2lnbm1lbnRzICsgQ3VycmVudFVzZXJJZDtcclxuICAgICAgICAgICAgICBjb25zdCB0YXN0YXR1c1JlcG9ydFN1Ym1pc3Npb25DaGFubmVsVG9TdWJzY3JpYmVJbnRvID0gQ2hhbm5lbE5hbWVzLkNoYW5uZWxfU3RhdHVzUmVwb3J0U3VibWlzc2lvbiArIEN1cnJlbnRVc2VySWQ7XHJcbiAgICAgICAgICAgICAgY29uc3QgdGFzdGF0dXNDb25maWdBc3NpZ25DaGFubmVsVG9TdWJzY3JpYmVJbnRvID0gQ2hhbm5lbE5hbWVzLkNoYW5uZWxfU3RhdHVzQ29uZmlnQXNzaWduICsgQ3VycmVudFVzZXJJZDtcclxuICAgICAgICAgICAgICBjb25zdCBtdWx0aUNoYXJ0c1NjaGVkdWxpbmdDaGFubmVsVG9TdWJzY3JpYmVJbnRvID0gQ2hhbm5lbE5hbWVzLkNoYW5uZWxfTXVsdGlDaGFydHNTY2hlZHVsaW5nICsgQ3VycmVudFVzZXJJZDtcclxuICAgICAgICAgICAgICBjb25zdCBhc3NldHNBc3NpZ25lZENoYW5uZWxUb1N1YnNjcmliZUludG8gPSBDaGFubmVsTmFtZXMuQ2hhbm5lbF9Bc3NldEFzc2lnbm1lbnQgKyBDdXJyZW50VXNlcklkO1xyXG4gICAgICAgICAgICAgIGNvbnN0IHByb2plY3RDcmVhdGVkQ2hhbm5lbFRvU3Vic2NyaWJlSW50byA9IENoYW5uZWxOYW1lcy5DaGFubmVsX05ld1Byb2plY3QgKyBDdXJyZW50VXNlcklkO1xyXG4gICAgICAgICAgICAgIGNvbnN0IHByb2plY3RBY2Nlc3NUb01lbWJlckNoYW5uZWxUb1N1YnNjcmliZUludG8gPSBDaGFubmVsTmFtZXMuQ2hhbm5lbF9Qcm9qZWN0TWVtYmVyUm9sZSArIEN1cnJlbnRVc2VySWQ7XHJcbiAgICAgICAgICAgICAgY29uc3QgZ29hbEFwcHJvdmVkQ2hhbm5lbFRvU3Vic2NyaWJlSW50byA9IENoYW5uZWxOYW1lcy5DaGFubmVsX0dvYWxBcHByb3ZlZEZyb21SZXBsYW4gKyBDdXJyZW50VXNlcklkO1xyXG4gICAgICAgICAgICAgIGNvbnN0IHVzZXJTdG9yeVVwZGF0ZUNoYW5uZWxUb1N1YnNjcmliZUludG8gPSBDaGFubmVsTmFtZXMuQ2hhbm5lbF9Vc2VyU3RvcnlVcGRhdGVOb3RpZmljYXRpb24gKyBDdXJyZW50VXNlcklkO1xyXG4gICAgICAgICAgICAgIGNvbnN0IEFubm91bmNlbWVudENoYW5uZWxUb1N1YnNjcmliZUludG8gPSBDaGFubmVsTmFtZXMuQ2hhbm5lbF9Bbm5vdW5jZW1lbnROb3RpZmljYXRpb24gKyBDdXJyZW50VXNlcklkO1xyXG4gICAgICAgICAgICAgIGNvbnN0IHB1cmNoYXNlRXhlY3V0aW9uQXNzaWduZWRDaGFubmVsVG9TdWJzY3JpYmVJbnRvID0gQ2hhbm5lbE5hbWVzLkNoYW5uZWxfUHVyY2hhc2VFeGVjdXRpb25Bc3NpZ25Ub0VtcGxveWVlTm90aWZpY2F0aW9uICsgQ3VycmVudFVzZXJJZDtcclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcInN1YnNjcmliaW5nIHRvIFwiICsgdGFza0Fzc2lnbm1lbnRDaGFubmVsVG9TdWJzY3JpYmVJbnRvKTtcclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcInN1YnNjcmliaW5nIHRvIFwiICsgdGFzdGF0dXNSZXBvcnRTdWJtaXNzaW9uQ2hhbm5lbFRvU3Vic2NyaWJlSW50byk7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJzdWJzY3JpYmluZyB0byBcIiArIHRhc3RhdHVzQ29uZmlnQXNzaWduQ2hhbm5lbFRvU3Vic2NyaWJlSW50byk7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJzdWJzY3JpYmluZyB0b1wiICsgYXNzZXRzQXNzaWduZWRDaGFubmVsVG9TdWJzY3JpYmVJbnRvKTtcclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcInN1YnNjcmliaW5nIHRvXCIgKyBwcm9qZWN0Q3JlYXRlZENoYW5uZWxUb1N1YnNjcmliZUludG8pO1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwic3Vic2NyaWJpbmcgdG9cIiArIHByb2plY3RBY2Nlc3NUb01lbWJlckNoYW5uZWxUb1N1YnNjcmliZUludG8pO1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwic3Vic2NyaWJpbmcgdG9cIiArIGdvYWxBcHByb3ZlZENoYW5uZWxUb1N1YnNjcmliZUludG8pO1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwic3Vic2NyaWJpbmcgdG9cIiArIHVzZXJTdG9yeVVwZGF0ZUNoYW5uZWxUb1N1YnNjcmliZUludG8pO1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwic3Vic2NyaWJpbmcgdG9cIiArIEFubm91bmNlbWVudENoYW5uZWxUb1N1YnNjcmliZUludG8pO1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwic3Vic2NyaWJpbmcgdG9cIiArIHB1cmNoYXNlRXhlY3V0aW9uQXNzaWduZWRDaGFubmVsVG9TdWJzY3JpYmVJbnRvKTtcclxuICAgICAgICAgICAgICBwdWJudWIuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgIGNoYW5uZWxzOiBbdGFza0Fzc2lnbm1lbnRDaGFubmVsVG9TdWJzY3JpYmVJbnRvLCB0YXN0YXR1c1JlcG9ydFN1Ym1pc3Npb25DaGFubmVsVG9TdWJzY3JpYmVJbnRvLFxyXG4gICAgICAgICAgICAgICAgICB0YXN0YXR1c0NvbmZpZ0Fzc2lnbkNoYW5uZWxUb1N1YnNjcmliZUludG8sIG11bHRpQ2hhcnRzU2NoZWR1bGluZ0NoYW5uZWxUb1N1YnNjcmliZUludG8sXHJcbiAgICAgICAgICAgICAgICAgIGFzc2V0c0Fzc2lnbmVkQ2hhbm5lbFRvU3Vic2NyaWJlSW50bywgcHJvamVjdENyZWF0ZWRDaGFubmVsVG9TdWJzY3JpYmVJbnRvLCAsXHJcbiAgICAgICAgICAgICAgICAgIHByb2plY3RBY2Nlc3NUb01lbWJlckNoYW5uZWxUb1N1YnNjcmliZUludG8sIGdvYWxBcHByb3ZlZENoYW5uZWxUb1N1YnNjcmliZUludG8sXHJcbiAgICAgICAgICAgICAgICAgIHVzZXJTdG9yeVVwZGF0ZUNoYW5uZWxUb1N1YnNjcmliZUludG8sIEFubm91bmNlbWVudENoYW5uZWxUb1N1YnNjcmliZUludG8sIHB1cmNoYXNlRXhlY3V0aW9uQXNzaWduZWRDaGFubmVsVG9TdWJzY3JpYmVJbnRvXVxyXG4gICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAvLyBBZGQgb3RoZXIgc3Vic2NyaXB0aW9ucyBoZXJlLlxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiVXNlciBub3QgbG9nZ2VkIGluIHlldCB0byBiZSBhYmxlIHRvIHN1YnNjcmliZS5cIik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciByb2xlVXBkYXRlc0NoYW5uZWxUb1N1YnNjcmliZUludG8gPSBDaGFubmVsTmFtZXMuQ2hhbm5lbF9Sb2xlVXBkYXRlcyArIFwiMTlCNkY5RkMtNzM3MC00QjlDLUEwNUMtM0I4RDgxOUVFRUFGXCI7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwic3Vic2NyaWJpbmcgdG8gXCIgKyByb2xlVXBkYXRlc0NoYW5uZWxUb1N1YnNjcmliZUludG8pO1xyXG4gICAgICAgICAgICBwdWJudWIuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICBjaGFubmVsczogW3JvbGVVcGRhdGVzQ2hhbm5lbFRvU3Vic2NyaWJlSW50b11cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9LCAzMDAwKTtcclxuICAgICAgICB9KSkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgdGhpcy5hY3Rpb25VcGRhdGVzJFxyXG4gICAgICAucGlwZShcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5uZ0Rlc3Ryb3llZCQpLFxyXG4gICAgICAgIG9mVHlwZShOb3RpZmljYXRpb25zQWN0aW9uVHlwZXMuQ2xlYXJBbGxVbnJlYWROb3RpZmljYXRpb25zQ29tcGxldGVkKSxcclxuICAgICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25zJCA9IHRoaXMuc3RvcmUucGlwZShzZWxlY3Qoc2hhcmVkTW9kdWxlUmVkdWNlcnMuZ2V0Tm90aWZpY2F0aW9uQWxsKSk7XHJcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnMkLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25zID0geDtcclxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLm5vdGlmaWNhdGlvbnMuZmluZEluZGV4KChwKSA9PiBKU09OLnBhcnNlKHAubm90aWZpY2F0aW9uSnNvbikuTm90aWZpY2F0aW9uVHlwZUd1aWQudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09IE5vdGlmaWNhdGlvblR5cGVJZHMuQW5ub3VuY2VtZW50X1JlY2VpdmVkLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgLy90aGlzLmFubm91bmNlTm90aWZpY2F0aW9uSWQgPSBKU09OLnBhcnNlKHRoaXMubm90aWZpY2F0aW9uc1tpbmRleF0ubm90aWZpY2F0aW9uSnNvbikubm90aWZpY2F0aW9uSWQ7XHJcbiAgICAgICAgICAgICAgdGhpcy5hbm5vdW5jZU5vdGlmaWNhdGlvbklkID0gdGhpcy5ub3RpZmljYXRpb25zW2luZGV4XS5ub3RpZmljYXRpb25JZDtcclxuICAgICAgICAgICAgICB0aGlzLm9wZW5Bbm5vdW5jZW1lbnREaWFsb2coSlNPTi5wYXJzZSh0aGlzLm5vdGlmaWNhdGlvbnNbaW5kZXhdLm5vdGlmaWNhdGlvbkpzb24pKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB9KVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAvLyB0aGlzLmFjdGlvblVwZGF0ZXMkXHJcbiAgICAvLyAgIC5waXBlKFxyXG4gICAgLy8gICAgIHRha2VVbnRpbCh0aGlzLm5nRGVzdHJveWVkJCksXHJcbiAgICAvLyAgICAgb2ZUeXBlKE1lc3NhZ2VBY3Rpb25UeXBlcy5Db3VudENvbXBsZXRlZCksXHJcbiAgICAvLyAgICAgdGFwKChyZXN1bHQ6IGFueSkgPT4ge1xyXG4gICAgLy8gICAgICAgdGhpcy5tZXNzYWdlc1VucmVhZENvdW50ID0gcmVzdWx0Lm1lc3NhZ2VDb3VudDtcclxuICAgIC8vICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgLy8gICAgIH0pXHJcbiAgICAvLyAgIClcclxuICAgIC8vICAgLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIHRoaXMuYWN0aW9uVXBkYXRlcyRcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMubmdEZXN0cm95ZWQkKSxcclxuICAgICAgICBvZlR5cGUoTWVzc2FnZUFjdGlvblR5cGVzLlJlcXVlc3RpbmdTdGF0ZU9mVXNlcnNDb21wbGV0ZWQpLFxyXG4gICAgICAgIHRhcCgocmVzdWx0OiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMuc3ViU2NyaWJpbmdUb1ByZXNlbmNlQ2hhbm5lbCgpO1xyXG5cclxuICAgICAgICB9KVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuYWN0aW9uVXBkYXRlcyRcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMubmdEZXN0cm95ZWQkKSxcclxuICAgICAgICBvZlR5cGUoTWVzc2FnZUFjdGlvblR5cGVzLk1lc3NhZ2VDb21wbGV0ZWQpLFxyXG4gICAgICAgIHRhcCgocmVzdWx0OiBhbnkpID0+IHtcclxuICAgICAgICAgIHZhciBtZXNzYWdlRGV0YWlscyA9IHJlc3VsdFsnbWVzc2FnZURldGFpbHMnXTtcclxuICAgICAgICAgIHRoaXMucHVibGlzaGluZ01lc3NhZ2VPZlVzZXIgPSBtZXNzYWdlRGV0YWlscztcclxuICAgICAgICAgIHRoaXMucHVibGlzaGluZ01lc3NhZ2UoKTtcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuYWN0aW9uVXBkYXRlcyRcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMubmdEZXN0cm95ZWQkKSxcclxuICAgICAgICBvZlR5cGUoTWVzc2FnZUFjdGlvblR5cGVzLlNlbmRDaGFubmVsVXBkYXRlTW9kZWxDb21wbGV0ZWQpLFxyXG4gICAgICAgIHRhcCgocmVzdWx0OiBhbnkpID0+IHtcclxuICAgICAgICAgIHZhciBjaGFubmVsVXBkYXRlTW9kZWwgPSByZXN1bHRbJ2NoYW5uZWxVcGRhdGVNb2RlbCddO1xyXG4gICAgICAgICAgdmFyIGxvZ2luQ29tcGFueUlkID0gdGhpcy5jb29raWVTZXJ2aWNlLmdldChcIkNvbXBhbnlJZFwiKTtcclxuICAgICAgICAgIHRoaXMucHVibnViLnB1Ymxpc2goe1xyXG4gICAgICAgICAgICBjaGFubmVsOiBbKGxvZ2luQ29tcGFueUlkICsgJy0nICsgY2hhbm5lbFVwZGF0ZU1vZGVsLmNoYW5uZWxJZCldLFxyXG4gICAgICAgICAgICBtZXNzYWdlOiBKU09OLnN0cmluZ2lmeShjaGFubmVsVXBkYXRlTW9kZWwpXHJcbiAgICAgICAgICB9LCBmdW5jdGlvbiAoc3RhdHVzLCByZXNvcG5zZSkge1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhzdGF0dXMpXHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHJlc29wbnNlKVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKTtcclxuXHJcblxyXG4gICAgdGhpcy5hY3Rpb25VcGRhdGVzJFxyXG4gICAgICAucGlwZShcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5uZ0Rlc3Ryb3llZCQpLFxyXG4gICAgICAgIG9mVHlwZShNZXNzYWdlQWN0aW9uVHlwZXMuU2VuZGluZ1NpZ25hbENvbXBsZXRlZCksXHJcbiAgICAgICAgdGFwKChyZXN1bHQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdmFyIG1lc3NhZ2VUeXBpbmdEZXRhaWxzID0gcmVzdWx0Lm1lc3NhZ2VUeXBpbmdEZXRhaWxzO1xyXG4gICAgICAgICAgdmFyIHNpZ25hbE1lc3NhZ2UgPSBuZXcgTWVzc2FnZVR5cGluZ0RldGFpbHMoKTtcclxuICAgICAgICAgIHNpZ25hbE1lc3NhZ2Uuc3RhdGUgPSBtZXNzYWdlVHlwaW5nRGV0YWlscy5zdGF0ZTtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKG1lc3NhZ2VUeXBpbmdEZXRhaWxzLCBzaWduYWxNZXNzYWdlKTtcclxuICAgICAgICAgIC8vIHRoaXMucHVibnViLnNpZ25hbCh7XHJcbiAgICAgICAgICAvLyAgIGNoYW5uZWw6W21lc3NhZ2VUeXBpbmdEZXRhaWxzLnB1Ym51YkNoYW5uZWxOYW1lT2ZNZXNzYWdlXSxcclxuICAgICAgICAgIC8vICAgbWVzc2FnZSA6IEpTT04uc3RyaW5naWZ5KHNpZ25hbE1lc3NhZ2UpXHJcbiAgICAgICAgICAvLyB9KVxyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgpO1xyXG4gICAgY29uc3Qgc3RvcmVMaXN0bmVyID0gKG1lc3NhZ2UpID0+IHtcclxuICAgICAgY29uc29sZS5sb2coXCItLS0tLS0tLS1SZWNlaXZlZCBwdWJudWIgbWVzc2FnZS0tLS0tLS0tLVwiKTtcclxuICAgICAgLy90aGlzLnRvYXN0ci5pbmZvKG1lc3NhZ2UubWVzc2FnZS5TdW1tYXJ5KTtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICAvL1JlY2VpdmluZyB0aGUgVXNlciBTdG9yeSBBc3NpZ25lZCBOb3RpZmljYXRpb25cclxuICAgICAgICBpZiAodHlwZW9mIChtZXNzYWdlLm1lc3NhZ2UpID09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICB2YXIgaW5kZXhPZkN1cnJlbnRUb3BpYzogbnVtYmVyO1xyXG4gICAgICAgICAgdmFyIG1lc3NhZ2VEZXRhaWxzT2JqZWN0ID0gSlNPTi5wYXJzZShtZXNzYWdlLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgaWYgKG1lc3NhZ2VEZXRhaWxzT2JqZWN0LnRleHRNZXNzYWdlIHx8IG1lc3NhZ2VEZXRhaWxzT2JqZWN0LmZpbGVQYXRoIHx8IG1lc3NhZ2VEZXRhaWxzT2JqZWN0Lm1lc3NhZ2VUeXBlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFJlY2VpdmVNZXNzYWdlVHJpZ2dlcmVkKG1lc3NhZ2VEZXRhaWxzT2JqZWN0KSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmIChtZXNzYWdlRGV0YWlsc09iamVjdC5pc0Zyb21DaGFubmVsQXJjaGl2ZSA9PSB0cnVlIHx8XHJcbiAgICAgICAgICAgIG1lc3NhZ2VEZXRhaWxzT2JqZWN0LmlzRnJvbVJlbW92ZU1lbWJlciA9PSB0cnVlIHx8XHJcbiAgICAgICAgICAgIG1lc3NhZ2VEZXRhaWxzT2JqZWN0LnJlZnJlc2hDaGFubmVscyA9PSB0cnVlIHx8IG1lc3NhZ2VEZXRhaWxzT2JqZWN0LmlzRnJvbUFkZE1lbWJlciA9PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhdFNlcnZpY2UuZ2V0VXNlckNoYW5uZWxzKCkuc3Vic2NyaWJlKChjaGFubmVsczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5jaGFubmVsTGlzdCA9IGNoYW5uZWxzLmRhdGE7XHJcbiAgICAgICAgICAgICAgdmFyIGxvZ2luQ29tcGFueUlkID0gdGhpcy5jb29raWVTZXJ2aWNlLmdldChcIkNvbXBhbnlJZFwiKTtcclxuICAgICAgICAgICAgICB2YXIgY2hhbm5lbE5hbWUgPSBsb2dpbkNvbXBhbnlJZCArICctJyArIG1lc3NhZ2VEZXRhaWxzT2JqZWN0LmNoYW5uZWxJZDtcclxuICAgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmNoYW5uZWxMaXN0LmZpbmRJbmRleCh4ID0+IHguaWQgPT0gbWVzc2FnZURldGFpbHNPYmplY3QuY2hhbm5lbElkKTtcclxuICAgICAgICAgICAgICBpZiAoaW5kZXggIT0gLTEgJiYgKG1lc3NhZ2VEZXRhaWxzT2JqZWN0LnJlZnJlc2hDaGFubmVscyA9PSB0cnVlIHx8IG1lc3NhZ2VEZXRhaWxzT2JqZWN0LmlzRnJvbUFkZE1lbWJlciA9PSB0cnVlKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wdWJudWIuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgICAgY2hhbm5lbHM6IFtjaGFubmVsTmFtZV1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnB1Ym51Yi51bnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgY2hhbm5lbHM6IFtjaGFubmVsTmFtZV1cclxuICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgUmVjZWl2ZUNoYW5uZWxVcGRhdGVNb2RlbFRyaWdnZXJlZChtZXNzYWdlRGV0YWlsc09iamVjdCkpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5yb3V0ZXIucm91dGVyU3RhdGUuc25hcHNob3QudXJsICE9IFwiL2NoYXRcIiAmJiBtZXNzYWdlRGV0YWlsc09iamVjdC5tZXNzYWdlVHlwZSAhPSBcIlJlYWN0aW9uXCIgJiYgbWVzc2FnZURldGFpbHNPYmplY3QuYm9keSAhPSBudWxsICYmIG1lc3NhZ2VEZXRhaWxzT2JqZWN0LnRpdGxlICE9IG51bGwgJiYgKG1lc3NhZ2VEZXRhaWxzT2JqZWN0LmlzUGlubmVkID09IG51bGwgfHwgbWVzc2FnZURldGFpbHNPYmplY3QuaXNQaW5uZWQgPT0gdW5kZWZpbmVkKSAmJiAobWVzc2FnZURldGFpbHNPYmplY3QuaXNTdGFycmVkID09IG51bGwgfHwgbWVzc2FnZURldGFpbHNPYmplY3QuaXNTdGFycmVkID09IHVuZGVmaW5lZCkgJiYgbWVzc2FnZURldGFpbHNPYmplY3Quc2VuZGVyVXNlcklkICE9IHRoaXMubG9nSW5Vc2VySWQpIHtcclxuICAgICAgICAgICAgaWYgKG1lc3NhZ2VEZXRhaWxzT2JqZWN0LmNoYW5uZWxJZCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuY2hhdFNlcnZpY2UuZ2V0VXNlckNoYW5uZWxzKCkuc3Vic2NyaWJlKChjaGFubmVsczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5uZWxMaXN0ID0gY2hhbm5lbHMuZGF0YTtcclxuICAgICAgICAgICAgICAgIGluZGV4T2ZDdXJyZW50VG9waWMgPSB0aGlzLmNoYW5uZWxMaXN0LmZpbmRJbmRleCh4ID0+IHguaWQgPT0gbWVzc2FnZURldGFpbHNPYmplY3QuY2hhbm5lbElkKTtcclxuICAgICAgICAgICAgICAgIGlmIChpbmRleE9mQ3VycmVudFRvcGljICE9IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgIC8vIHRoaXMubm90aWZpY2F0aW9uT2ZDaGF0KG1lc3NhZ2VEZXRhaWxzT2JqZWN0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAvLyB0aGlzLm5vdGlmaWNhdGlvbk9mQ2hhdChtZXNzYWdlRGV0YWlsc09iamVjdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2VcclxuICAgICAgICAgIGlmIChtZXNzYWdlLm1lc3NhZ2UuTm90aWZpY2F0aW9uVHlwZUd1aWQgPT0gTm90aWZpY2F0aW9uVHlwZUlkcy5Ob3RpZmljYXRpb25fV29ya0l0ZW1Bc3NpZ25lZFRvVXNlcikge1xyXG4gICAgICAgICAgICB2YXIgdXNlclN0b3J5QXNzaWduZWROb3RpZmljYXRpb24gPSBuZXcgVXNlclN0b3J5QXNzaWduZWROb3RpZmljYXRpb24oKTtcclxuICAgICAgICAgICAgdXNlclN0b3J5QXNzaWduZWROb3RpZmljYXRpb24ubG9hZEZyb21DYXNlSW5zZW5zaXRpdmVPYmplY3QobWVzc2FnZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgdXNlclN0b3J5QXNzaWduZWROb3RpZmljYXRpb24ucm91dGUgPSBDaGFubmVsUm91dGVzLlZpZXdXb3JrSXRlbSArIHVzZXJTdG9yeUFzc2lnbmVkTm90aWZpY2F0aW9uLm5vdGlmaWNhdGlvbklkO1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBOZXdOb3RpZmljYXRpb25SZWNlaXZlZCh1c2VyU3RvcnlBc3NpZ25lZE5vdGlmaWNhdGlvbikpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChtZXNzYWdlLm1lc3NhZ2UuTm90aWZpY2F0aW9uVHlwZUd1aWQgPT0gTm90aWZpY2F0aW9uVHlwZUlkcy5HZW5lcmljTm90aWZpY2F0aW9uQWN0aXZpdHkpIHtcclxuICAgICAgICAgICAgdmFyIHVzZXJTdG9yeUFzc2lnbmVkTm90aWZpY2F0aW9uID0gbmV3IFVzZXJTdG9yeUFzc2lnbmVkTm90aWZpY2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHVzZXJTdG9yeUFzc2lnbmVkTm90aWZpY2F0aW9uLmxvYWRGcm9tQ2FzZUluc2Vuc2l0aXZlT2JqZWN0KG1lc3NhZ2UubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIC8vIHVzZXJTdG9yeUFzc2lnbmVkTm90aWZpY2F0aW9uLnJvdXRlID0gQ2hhbm5lbFJvdXRlcy5WaWV3V29ya0l0ZW0gKyB1c2VyU3RvcnlBc3NpZ25lZE5vdGlmaWNhdGlvbi5ub3RpZmljYXRpb25JZDtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgTmV3Tm90aWZpY2F0aW9uUmVjZWl2ZWQodXNlclN0b3J5QXNzaWduZWROb3RpZmljYXRpb24pKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAobWVzc2FnZS5tZXNzYWdlLk5vdGlmaWNhdGlvblR5cGVHdWlkID09IE5vdGlmaWNhdGlvblR5cGVJZHMuTm90aWZpY2F0aW9uX1JvbGVVcGRhdGVkKSB7XHJcbiAgICAgICAgICAgIHZhciByb2xlVXBkYXRlZE5vdGlmaWNhdGlvbiA9IG5ldyBSb2xlVXBkYXRlZE5vdGlmaWNhdGlvbigpO1xyXG4gICAgICAgICAgICByb2xlVXBkYXRlZE5vdGlmaWNhdGlvbi5sb2FkRnJvbUNhc2VJbnNlbnNpdGl2ZU9iamVjdChtZXNzYWdlLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICByb2xlVXBkYXRlZE5vdGlmaWNhdGlvbi5yb3V0ZSA9IENoYW5uZWxSb3V0ZXMuVmlld0FjY291bnQ7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IE5ld05vdGlmaWNhdGlvblJlY2VpdmVkKHJvbGVVcGRhdGVkTm90aWZpY2F0aW9uKSk7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFJvbGVzRmV0Y2hUcmlnZ2VyZWQoKSk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKG1lc3NhZ2UubWVzc2FnZS5Ob3RpZmljYXRpb25UeXBlR3VpZCA9PSBOb3RpZmljYXRpb25UeXBlSWRzLlN0YXR1c19SZXBvcnRfU3VtaXR0ZWQpIHtcclxuICAgICAgICAgICAgdmFyIHJlcG9ydFN1Ym1pdHRlZE5vdGlmaWNhdGlvbiA9IG5ldyBSZXBvcnRTdWJtaXR0ZWROb3RpZmljYXRpb24oKTtcclxuICAgICAgICAgICAgcmVwb3J0U3VibWl0dGVkTm90aWZpY2F0aW9uLmxvYWRGcm9tQ2FzZUluc2Vuc2l0aXZlT2JqZWN0KG1lc3NhZ2UubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIHJlcG9ydFN1Ym1pdHRlZE5vdGlmaWNhdGlvbi5yb3V0ZSA9IENoYW5uZWxSb3V0ZXMuVmlld0FjY291bnQ7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IE5ld05vdGlmaWNhdGlvblJlY2VpdmVkKHJlcG9ydFN1Ym1pdHRlZE5vdGlmaWNhdGlvbikpO1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBSb2xlc0ZldGNoVHJpZ2dlcmVkKCkpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChtZXNzYWdlLm1lc3NhZ2UuTm90aWZpY2F0aW9uVHlwZUd1aWQgPT0gTm90aWZpY2F0aW9uVHlwZUlkcy5TdGF0dXNfUmVwb3J0X0NvbmZpZ19DcmVhdGVkKSB7XHJcbiAgICAgICAgICAgIHZhciByZXBvcnRDb25maWdBc3NpZ25lZE5vdGlmaWNhdGlvbiA9IG5ldyBSZXBvcnRDb25maWdBc3NpZ25lZE5vdGlmaWNhdGlvbigpO1xyXG4gICAgICAgICAgICByZXBvcnRDb25maWdBc3NpZ25lZE5vdGlmaWNhdGlvbi5sb2FkRnJvbUNhc2VJbnNlbnNpdGl2ZU9iamVjdChtZXNzYWdlLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICByZXBvcnRDb25maWdBc3NpZ25lZE5vdGlmaWNhdGlvbi5yb3V0ZSA9IENoYW5uZWxSb3V0ZXMuVmlld0FjY291bnQ7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IE5ld05vdGlmaWNhdGlvblJlY2VpdmVkKHJlcG9ydENvbmZpZ0Fzc2lnbmVkTm90aWZpY2F0aW9uKSk7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFJvbGVzRmV0Y2hUcmlnZ2VyZWQoKSk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKG1lc3NhZ2UubWVzc2FnZS5Ob3RpZmljYXRpb25UeXBlR3VpZCA9PSBOb3RpZmljYXRpb25UeXBlSWRzLk11bHRpcGxlX0NoYXJ0c19TY2hlZHVsaW5nX2NyZWF0ZWQpIHtcclxuICAgICAgICAgICAgdmFyIG11bHRpcGxlQ2hhcnRzU2NoZWR1bGluZyA9IG5ldyBNdWx0aXBsZUNoYXJ0c1NjaGVkdWxpbmcoKTtcclxuICAgICAgICAgICAgbXVsdGlwbGVDaGFydHNTY2hlZHVsaW5nLmxvYWRGcm9tQ2FzZUluc2Vuc2l0aXZlT2JqZWN0KG1lc3NhZ2UubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIG11bHRpcGxlQ2hhcnRzU2NoZWR1bGluZy5yb3V0ZSA9IENoYW5uZWxSb3V0ZXMuVmlld0FjY291bnQ7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IE5ld05vdGlmaWNhdGlvblJlY2VpdmVkKG11bHRpcGxlQ2hhcnRzU2NoZWR1bGluZykpO1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBSb2xlc0ZldGNoVHJpZ2dlcmVkKCkpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChtZXNzYWdlLm1lc3NhZ2UuTm90aWZpY2F0aW9uVHlwZUd1aWQgPT0gTm90aWZpY2F0aW9uVHlwZUlkcy5Bc3NldHNfQXNzaWdubWVudCkge1xyXG4gICAgICAgICAgICBjb25zdCBhc3NldEFzc2lnbmVkTm90aWZpY2F0aW9uID0gbmV3IEFzc2V0QXNzaWduZWROb3RpZmljYXRpb24oKTtcclxuICAgICAgICAgICAgYXNzZXRBc3NpZ25lZE5vdGlmaWNhdGlvbi5sb2FkRnJvbUNhc2VJbnNlbnNpdGl2ZU9iamVjdChtZXNzYWdlLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICBhc3NldEFzc2lnbmVkTm90aWZpY2F0aW9uLnJvdXRlID0gQ2hhbm5lbFJvdXRlcy5WaWV3QWNjb3VudDtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgTmV3Tm90aWZpY2F0aW9uUmVjZWl2ZWQoYXNzZXRBc3NpZ25lZE5vdGlmaWNhdGlvbikpO1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBSb2xlc0ZldGNoVHJpZ2dlcmVkKCkpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChtZXNzYWdlLm1lc3NhZ2UuTm90aWZpY2F0aW9uVHlwZUd1aWQudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09IE5vdGlmaWNhdGlvblR5cGVJZHMuUmVtaW5kZXJfTm90aWZpY2F0aW9uLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICAgICAgICBjb25zdCBhc3NldEFzc2lnbmVkTm90aWZpY2F0aW9uID0gbmV3IEFzc2V0QXNzaWduZWROb3RpZmljYXRpb24oKTtcclxuICAgICAgICAgICAgYXNzZXRBc3NpZ25lZE5vdGlmaWNhdGlvbi5sb2FkRnJvbUNhc2VJbnNlbnNpdGl2ZU9iamVjdChtZXNzYWdlLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICBhc3NldEFzc2lnbmVkTm90aWZpY2F0aW9uLnJvdXRlID0gQ2hhbm5lbFJvdXRlcy5WaWV3QWNjb3VudDtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgTmV3Tm90aWZpY2F0aW9uUmVjZWl2ZWQoYXNzZXRBc3NpZ25lZE5vdGlmaWNhdGlvbikpO1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBSb2xlc0ZldGNoVHJpZ2dlcmVkKCkpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChtZXNzYWdlLm1lc3NhZ2UuTm90aWZpY2F0aW9uVHlwZUd1aWQudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09IE5vdGlmaWNhdGlvblR5cGVJZHMuQW5ub3VuY2VtZW50X1JlY2VpdmVkLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICAgICAgICBjb25zdCBhc3NldEFzc2lnbmVkTm90aWZpY2F0aW9uID0gbmV3IEFzc2V0QXNzaWduZWROb3RpZmljYXRpb24oKTtcclxuICAgICAgICAgICAgYXNzZXRBc3NpZ25lZE5vdGlmaWNhdGlvbi5sb2FkRnJvbUNhc2VJbnNlbnNpdGl2ZU9iamVjdChtZXNzYWdlLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICBhc3NldEFzc2lnbmVkTm90aWZpY2F0aW9uLnJvdXRlID0gQ2hhbm5lbFJvdXRlcy5WaWV3QWNjb3VudDtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgTmV3Tm90aWZpY2F0aW9uUmVjZWl2ZWQoYXNzZXRBc3NpZ25lZE5vdGlmaWNhdGlvbikpO1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBSb2xlc0ZldGNoVHJpZ2dlcmVkKCkpO1xyXG4gICAgICAgICAgICAvLyBpZiAobWVzc2FnZS5tZXNzYWdlLklkICE9IHRoaXMuYW5ub3VuY2VOb3RpZmljYXRpb25JZCkge1xyXG4gICAgICAgICAgICAvLyAgIHRoaXMuYW5ub3VuY2VOb3RpZmljYXRpb25JZCA9IG1lc3NhZ2UubWVzc2FnZS5JZDtcclxuICAgICAgICAgICAgLy8gICB0aGlzLm9wZW5Bbm5vdW5jZW1lbnREaWFsb2cobWVzc2FnZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgfSBlbHNlIGlmIChtZXNzYWdlLm1lc3NhZ2UuTm90aWZpY2F0aW9uVHlwZUd1aWQudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09IE5vdGlmaWNhdGlvblR5cGVJZHMuUGVyZm9ybWFuY2VfUmVjZWl2ZWQudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpIHx8IG1lc3NhZ2UubWVzc2FnZS5Ob3RpZmljYXRpb25UeXBlR3VpZC50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT0gTm90aWZpY2F0aW9uVHlwZUlkcy5Qcm9qZWN0TWVtYmVyUm9sZUFkZGVkTm90aWZpY2F0aW9uSWQudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld1Byb2plY3RDcmVhdGVkTm90aWZpY2F0aW9uID0gbmV3IE5ld1Byb2plY3RDcmVhdGVkTm90aWZpY2F0aW9uTW9kZWwoKTtcclxuICAgICAgICAgICAgbmV3UHJvamVjdENyZWF0ZWROb3RpZmljYXRpb24ubG9hZEZyb21DYXNlSW5zZW5zaXRpdmVPYmplY3QobWVzc2FnZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgbmV3UHJvamVjdENyZWF0ZWROb3RpZmljYXRpb24ucm91dGUgPSBDaGFubmVsUm91dGVzLlZpZXdBY2NvdW50O1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBOZXdOb3RpZmljYXRpb25SZWNlaXZlZChuZXdQcm9qZWN0Q3JlYXRlZE5vdGlmaWNhdGlvbikpO1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBSb2xlc0ZldGNoVHJpZ2dlcmVkKCkpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChtZXNzYWdlLm1lc3NhZ2UuTm90aWZpY2F0aW9uVHlwZUd1aWQudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09IE5vdGlmaWNhdGlvblR5cGVJZHMuTmV3UHJvamVjdENyZWF0ZWROb3RpZmljYXRpb25JZC50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgfHwgbWVzc2FnZS5tZXNzYWdlLk5vdGlmaWNhdGlvblR5cGVHdWlkLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PSBOb3RpZmljYXRpb25UeXBlSWRzLlByb2plY3RNZW1iZXJSb2xlQWRkZWROb3RpZmljYXRpb25JZC50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgY29uc3QgbmV3UHJvamVjdENyZWF0ZWROb3RpZmljYXRpb24gPSBuZXcgTmV3UHJvamVjdENyZWF0ZWROb3RpZmljYXRpb25Nb2RlbCgpO1xyXG4gICAgICAgICAgICBuZXdQcm9qZWN0Q3JlYXRlZE5vdGlmaWNhdGlvbi5sb2FkRnJvbUNhc2VJbnNlbnNpdGl2ZU9iamVjdChtZXNzYWdlLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICBuZXdQcm9qZWN0Q3JlYXRlZE5vdGlmaWNhdGlvbi5yb3V0ZSA9IENoYW5uZWxSb3V0ZXMuVmlld0FjY291bnQ7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IE5ld05vdGlmaWNhdGlvblJlY2VpdmVkKG5ld1Byb2plY3RDcmVhdGVkTm90aWZpY2F0aW9uKSk7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFJvbGVzRmV0Y2hUcmlnZ2VyZWQoKSk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKG1lc3NhZ2UubWVzc2FnZS5Ob3RpZmljYXRpb25UeXBlR3VpZC50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT0gTm90aWZpY2F0aW9uVHlwZUlkcy5Hb2FsQXBwcm92ZWRGcm9tUmVwbGFuLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICAgICAgICBjb25zdCBnb2FsQXBwcm92ZWROb3RpZmljYXRpb25Nb2RlbCA9IG5ldyBHb2FsQXBwcm92ZWROb3RpZmljYXRpb25Nb2RlbCgpO1xyXG4gICAgICAgICAgICBnb2FsQXBwcm92ZWROb3RpZmljYXRpb25Nb2RlbC5sb2FkRnJvbUNhc2VJbnNlbnNpdGl2ZU9iamVjdChtZXNzYWdlLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICBnb2FsQXBwcm92ZWROb3RpZmljYXRpb25Nb2RlbC5yb3V0ZSA9IENoYW5uZWxSb3V0ZXMuVmlld0FjY291bnQ7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IE5ld05vdGlmaWNhdGlvblJlY2VpdmVkKGdvYWxBcHByb3ZlZE5vdGlmaWNhdGlvbk1vZGVsKSk7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFJvbGVzRmV0Y2hUcmlnZ2VyZWQoKSk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKG1lc3NhZ2UubWVzc2FnZS5Ob3RpZmljYXRpb25UeXBlR3VpZC50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT0gTm90aWZpY2F0aW9uVHlwZUlkcy5VU2VyU3RvcnlVcGRhdGVOb3RpZmljYXRpb25JZC50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgY29uc3QgdXNlclN0b3J5VXBkYXRlTm90aWZpY2F0aW9uTW9kZWwgPSBuZXcgVXNlclN0b3J5VXBkYXRlTm90aWZpY2F0aW9uTW9kZWwoKTtcclxuICAgICAgICAgICAgdXNlclN0b3J5VXBkYXRlTm90aWZpY2F0aW9uTW9kZWwubG9hZEZyb21DYXNlSW5zZW5zaXRpdmVPYmplY3QobWVzc2FnZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgdXNlclN0b3J5VXBkYXRlTm90aWZpY2F0aW9uTW9kZWwucm91dGUgPSBDaGFubmVsUm91dGVzLlZpZXdBY2NvdW50O1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBOZXdOb3RpZmljYXRpb25SZWNlaXZlZCh1c2VyU3RvcnlVcGRhdGVOb3RpZmljYXRpb25Nb2RlbCkpO1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBSb2xlc0ZldGNoVHJpZ2dlcmVkKCkpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChtZXNzYWdlLm1lc3NhZ2UuTm90aWZpY2F0aW9uVHlwZUd1aWQudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09IE5vdGlmaWNhdGlvblR5cGVJZHMuUHVzaE5vdGlmaWNhdGlvbkZvclVzZXJTdG9yeUNvbW1lbnQudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHVzZXJTdG9yeUNvbW1lbnROb3RpZmljYXRpb25Nb2RlbCA9IG5ldyBVc2VyU3RvcnlDb21tZW50Tm90aWZpY2F0aW9uTW9kZWwoKTtcclxuICAgICAgICAgICAgdXNlclN0b3J5Q29tbWVudE5vdGlmaWNhdGlvbk1vZGVsLmxvYWRGcm9tQ2FzZUluc2Vuc2l0aXZlT2JqZWN0KG1lc3NhZ2UubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIHVzZXJTdG9yeUNvbW1lbnROb3RpZmljYXRpb25Nb2RlbC5yb3V0ZSA9IENoYW5uZWxSb3V0ZXMuVmlld0FjY291bnQ7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IE5ld05vdGlmaWNhdGlvblJlY2VpdmVkKHVzZXJTdG9yeUNvbW1lbnROb3RpZmljYXRpb25Nb2RlbCkpO1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBSb2xlc0ZldGNoVHJpZ2dlcmVkKCkpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChtZXNzYWdlLm1lc3NhZ2UuTm90aWZpY2F0aW9uVHlwZUd1aWQudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09IE5vdGlmaWNhdGlvblR5cGVJZHMuU3ByaW50U3RhcnRlZC50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3ByaW50U3RhcnRlZE5vdGlmaWNhdGlvbk1vZGVsID0gbmV3IFNwcmludFN0YXJ0ZWROb3RpZmljYXRpb25Nb2RlbCgpO1xyXG4gICAgICAgICAgICBzcHJpbnRTdGFydGVkTm90aWZpY2F0aW9uTW9kZWwubG9hZEZyb21DYXNlSW5zZW5zaXRpdmVPYmplY3QobWVzc2FnZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgc3ByaW50U3RhcnRlZE5vdGlmaWNhdGlvbk1vZGVsLnJvdXRlID0gQ2hhbm5lbFJvdXRlcy5WaWV3QWNjb3VudDtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgTmV3Tm90aWZpY2F0aW9uUmVjZWl2ZWQoc3ByaW50U3RhcnRlZE5vdGlmaWNhdGlvbk1vZGVsKSk7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFJvbGVzRmV0Y2hUcmlnZ2VyZWQoKSk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKG1lc3NhZ2UubWVzc2FnZS5Ob3RpZmljYXRpb25UeXBlR3VpZC50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT0gTm90aWZpY2F0aW9uVHlwZUlkcy5TcHJpbnRSZXF1ZXN0ZEZvclJFcGxhbi50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3ByaW50UmVwbGFuU3RhcnRlZE5vdGlmaWNhdGlvbk1vZGVsID0gbmV3IFNwcmludFJlcGxhblN0YXJ0ZWROb3RpZmljYXRpb25Nb2RlbCgpO1xyXG4gICAgICAgICAgICBzcHJpbnRSZXBsYW5TdGFydGVkTm90aWZpY2F0aW9uTW9kZWwubG9hZEZyb21DYXNlSW5zZW5zaXRpdmVPYmplY3QobWVzc2FnZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgc3ByaW50UmVwbGFuU3RhcnRlZE5vdGlmaWNhdGlvbk1vZGVsLnJvdXRlID0gQ2hhbm5lbFJvdXRlcy5WaWV3QWNjb3VudDtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgTmV3Tm90aWZpY2F0aW9uUmVjZWl2ZWQoc3ByaW50UmVwbGFuU3RhcnRlZE5vdGlmaWNhdGlvbk1vZGVsKSk7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFJvbGVzRmV0Y2hUcmlnZ2VyZWQoKSk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKG1lc3NhZ2UubWVzc2FnZS5Ob3RpZmljYXRpb25UeXBlR3VpZC50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT0gTm90aWZpY2F0aW9uVHlwZUlkcy5Qcm9qZWN0RmVhdHVyZS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgY29uc3QgbmV3UHJvamVjdEZlYXR1cmVDcmVhdGVkTm90aWZpY2F0aW9uID0gbmV3IE5ld1Byb2plY3RGZWF0dXJlQ3JlYXRlZE5vdGlmaWNhdGlvbk1vZGVsKCk7XHJcbiAgICAgICAgICAgIG5ld1Byb2plY3RGZWF0dXJlQ3JlYXRlZE5vdGlmaWNhdGlvbi5sb2FkRnJvbUNhc2VJbnNlbnNpdGl2ZU9iamVjdChtZXNzYWdlLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICBuZXdQcm9qZWN0RmVhdHVyZUNyZWF0ZWROb3RpZmljYXRpb24ucm91dGUgPSBDaGFubmVsUm91dGVzLlZpZXdBY2NvdW50O1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBOZXdOb3RpZmljYXRpb25SZWNlaXZlZChuZXdQcm9qZWN0RmVhdHVyZUNyZWF0ZWROb3RpZmljYXRpb24pKTtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgUm9sZXNGZXRjaFRyaWdnZXJlZCgpKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAobWVzc2FnZS5tZXNzYWdlLk5vdGlmaWNhdGlvblR5cGVHdWlkLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PSBOb3RpZmljYXRpb25UeXBlSWRzLlVzZXJTdG9yeUFyY2hpdmUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld1VzZXJTdG9yeUFyY2hpdmVNb2RlbCA9IG5ldyBVc2VyU3RvcnlBcmNoaXZlTm90aWZpY2F0aW9uTW9kZWwoKTtcclxuICAgICAgICAgICAgbmV3VXNlclN0b3J5QXJjaGl2ZU1vZGVsLmxvYWRGcm9tQ2FzZUluc2Vuc2l0aXZlT2JqZWN0KG1lc3NhZ2UubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIG5ld1VzZXJTdG9yeUFyY2hpdmVNb2RlbC5yb3V0ZSA9IENoYW5uZWxSb3V0ZXMuVmlld0FjY291bnQ7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IE5ld05vdGlmaWNhdGlvblJlY2VpdmVkKG5ld1VzZXJTdG9yeUFyY2hpdmVNb2RlbCkpO1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBSb2xlc0ZldGNoVHJpZ2dlcmVkKCkpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChtZXNzYWdlLm1lc3NhZ2UuTm90aWZpY2F0aW9uVHlwZUd1aWQudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09IE5vdGlmaWNhdGlvblR5cGVJZHMuVXNlclN0b3J5UGFyay50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgY29uc3QgbmV3VXNlclN0b3J5UGFya01vZGVsID0gbmV3IFVzZXJTdG9yeVBhcmtOb3RpZmljYXRpb25Nb2RlbCgpO1xyXG4gICAgICAgICAgICBuZXdVc2VyU3RvcnlQYXJrTW9kZWwubG9hZEZyb21DYXNlSW5zZW5zaXRpdmVPYmplY3QobWVzc2FnZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgbmV3VXNlclN0b3J5UGFya01vZGVsLnJvdXRlID0gQ2hhbm5lbFJvdXRlcy5WaWV3QWNjb3VudDtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgTmV3Tm90aWZpY2F0aW9uUmVjZWl2ZWQobmV3VXNlclN0b3J5UGFya01vZGVsKSk7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFJvbGVzRmV0Y2hUcmlnZ2VyZWQoKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmIChtZXNzYWdlLm1lc3NhZ2UuTm90aWZpY2F0aW9uVHlwZUd1aWQudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09IE5vdGlmaWNhdGlvblR5cGVJZHMuTGVhdmVBcHBsaWNhdGlvbi50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgY29uc3QgbGVhdmVBcHBsaWNhdGlvbk5vdGlmaWNhdGlvbiA9IG5ldyBMZWF2ZUFwcGxpY2F0aW9uTm90aWZpY2F0aW9uKCk7XHJcbiAgICAgICAgICAgIGxlYXZlQXBwbGljYXRpb25Ob3RpZmljYXRpb24ubG9hZEZyb21DYXNlSW5zZW5zaXRpdmVPYmplY3QobWVzc2FnZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgbGVhdmVBcHBsaWNhdGlvbk5vdGlmaWNhdGlvbi5yb3V0ZSA9IENoYW5uZWxSb3V0ZXMuVmlld0FjY291bnQ7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IE5ld05vdGlmaWNhdGlvblJlY2VpdmVkKGxlYXZlQXBwbGljYXRpb25Ob3RpZmljYXRpb24pKTtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgUm9sZXNGZXRjaFRyaWdnZXJlZCgpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgaWYgKG1lc3NhZ2UubWVzc2FnZS5Ob3RpZmljYXRpb25UeXBlR3VpZC50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT0gTm90aWZpY2F0aW9uVHlwZUlkcy5BcHByb3ZlTGVhdmVBcHBsaWNhdGlvbi50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgY29uc3QgbGVhdmVBcHBsaWNhdGlvbk5vdGlmaWNhdGlvbiA9IG5ldyBMZWF2ZUFwcGxpY2F0aW9uTm90aWZpY2F0aW9uKCk7XHJcbiAgICAgICAgICAgIGxlYXZlQXBwbGljYXRpb25Ob3RpZmljYXRpb24ubG9hZEZyb21DYXNlSW5zZW5zaXRpdmVPYmplY3QobWVzc2FnZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgbGVhdmVBcHBsaWNhdGlvbk5vdGlmaWNhdGlvbi5yb3V0ZSA9IENoYW5uZWxSb3V0ZXMuVmlld0FjY291bnQ7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IE5ld05vdGlmaWNhdGlvblJlY2VpdmVkKGxlYXZlQXBwbGljYXRpb25Ob3RpZmljYXRpb24pKTtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgUm9sZXNGZXRjaFRyaWdnZXJlZCgpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgaWYgKG1lc3NhZ2UubWVzc2FnZS5Ob3RpZmljYXRpb25UeXBlR3VpZC50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT0gTm90aWZpY2F0aW9uVHlwZUlkcy5SZWplY3RMZWF2ZUFwcGxpY2F0aW9uLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICAgICAgICBjb25zdCBsZWF2ZUFwcGxpY2F0aW9uTm90aWZpY2F0aW9uID0gbmV3IExlYXZlQXBwbGljYXRpb25Ob3RpZmljYXRpb24oKTtcclxuICAgICAgICAgICAgbGVhdmVBcHBsaWNhdGlvbk5vdGlmaWNhdGlvbi5sb2FkRnJvbUNhc2VJbnNlbnNpdGl2ZU9iamVjdChtZXNzYWdlLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICBsZWF2ZUFwcGxpY2F0aW9uTm90aWZpY2F0aW9uLnJvdXRlID0gQ2hhbm5lbFJvdXRlcy5WaWV3QWNjb3VudDtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgTmV3Tm90aWZpY2F0aW9uUmVjZWl2ZWQobGVhdmVBcHBsaWNhdGlvbk5vdGlmaWNhdGlvbikpO1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBSb2xlc0ZldGNoVHJpZ2dlcmVkKCkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSBpZiAobWVzc2FnZS5tZXNzYWdlLk5vdGlmaWNhdGlvblR5cGVHdWlkLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PSBOb3RpZmljYXRpb25UeXBlSWRzLlJlc2lnbmF0aW9uTm90aWZpY2F0aW9uLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICAgICAgICBjb25zdCBsZWF2ZUFwcGxpY2F0aW9uTm90aWZpY2F0aW9uID0gbmV3IExlYXZlQXBwbGljYXRpb25Ob3RpZmljYXRpb24oKTtcclxuICAgICAgICAgICAgbGVhdmVBcHBsaWNhdGlvbk5vdGlmaWNhdGlvbi5sb2FkRnJvbUNhc2VJbnNlbnNpdGl2ZU9iamVjdChtZXNzYWdlLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICBsZWF2ZUFwcGxpY2F0aW9uTm90aWZpY2F0aW9uLnJvdXRlID0gQ2hhbm5lbFJvdXRlcy5WaWV3QWNjb3VudDtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgTmV3Tm90aWZpY2F0aW9uUmVjZWl2ZWQobGVhdmVBcHBsaWNhdGlvbk5vdGlmaWNhdGlvbikpO1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBSb2xlc0ZldGNoVHJpZ2dlcmVkKCkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSBpZiAobWVzc2FnZS5tZXNzYWdlLk5vdGlmaWNhdGlvblR5cGVHdWlkLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PSBOb3RpZmljYXRpb25UeXBlSWRzLlJlc2lnbmF0aW9uQXBwcm92YWxOb3RpZmljYXRpb24udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxlYXZlQXBwbGljYXRpb25Ob3RpZmljYXRpb24gPSBuZXcgTGVhdmVBcHBsaWNhdGlvbk5vdGlmaWNhdGlvbigpO1xyXG4gICAgICAgICAgICBsZWF2ZUFwcGxpY2F0aW9uTm90aWZpY2F0aW9uLmxvYWRGcm9tQ2FzZUluc2Vuc2l0aXZlT2JqZWN0KG1lc3NhZ2UubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIGxlYXZlQXBwbGljYXRpb25Ob3RpZmljYXRpb24ucm91dGUgPSBDaGFubmVsUm91dGVzLlZpZXdBY2NvdW50O1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBOZXdOb3RpZmljYXRpb25SZWNlaXZlZChsZWF2ZUFwcGxpY2F0aW9uTm90aWZpY2F0aW9uKSk7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFJvbGVzRmV0Y2hUcmlnZ2VyZWQoKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmIChtZXNzYWdlLm1lc3NhZ2UuTm90aWZpY2F0aW9uVHlwZUd1aWQudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09IE5vdGlmaWNhdGlvblR5cGVJZHMuUmVzaWduYXRpb25SZWplY3Rpb25Ob3RpZmljYXRpb24udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxlYXZlQXBwbGljYXRpb25Ob3RpZmljYXRpb24gPSBuZXcgTGVhdmVBcHBsaWNhdGlvbk5vdGlmaWNhdGlvbigpO1xyXG4gICAgICAgICAgICBsZWF2ZUFwcGxpY2F0aW9uTm90aWZpY2F0aW9uLmxvYWRGcm9tQ2FzZUluc2Vuc2l0aXZlT2JqZWN0KG1lc3NhZ2UubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIGxlYXZlQXBwbGljYXRpb25Ob3RpZmljYXRpb24ucm91dGUgPSBDaGFubmVsUm91dGVzLlZpZXdBY2NvdW50O1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBOZXdOb3RpZmljYXRpb25SZWNlaXZlZChsZWF2ZUFwcGxpY2F0aW9uTm90aWZpY2F0aW9uKSk7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFJvbGVzRmV0Y2hUcmlnZ2VyZWQoKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmIChtZXNzYWdlLm1lc3NhZ2UuTm90aWZpY2F0aW9uVHlwZUd1aWQudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09IE5vdGlmaWNhdGlvblR5cGVJZHMuQXV0b1RpbWVTaGVldFN1Ym1pc3Npb25Ob3RpZmljYXRpb24udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxlYXZlQXBwbGljYXRpb25Ob3RpZmljYXRpb24gPSBuZXcgTGVhdmVBcHBsaWNhdGlvbk5vdGlmaWNhdGlvbigpO1xyXG4gICAgICAgICAgICBsZWF2ZUFwcGxpY2F0aW9uTm90aWZpY2F0aW9uLmxvYWRGcm9tQ2FzZUluc2Vuc2l0aXZlT2JqZWN0KG1lc3NhZ2UubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIGxlYXZlQXBwbGljYXRpb25Ob3RpZmljYXRpb24ucm91dGUgPSBDaGFubmVsUm91dGVzLlZpZXdBY2NvdW50O1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBOZXdOb3RpZmljYXRpb25SZWNlaXZlZChsZWF2ZUFwcGxpY2F0aW9uTm90aWZpY2F0aW9uKSk7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFJvbGVzRmV0Y2hUcmlnZ2VyZWQoKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmIChtZXNzYWdlLm1lc3NhZ2UuTm90aWZpY2F0aW9uVHlwZUd1aWQudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09IE5vdGlmaWNhdGlvblR5cGVJZHMuUHJvYmF0aW9uQXNzaWduTm90aWZpY2F0aW9uLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICAgICAgICBjb25zdCBsZWF2ZUFwcGxpY2F0aW9uTm90aWZpY2F0aW9uID0gbmV3IExlYXZlQXBwbGljYXRpb25Ob3RpZmljYXRpb24oKTtcclxuICAgICAgICAgICAgbGVhdmVBcHBsaWNhdGlvbk5vdGlmaWNhdGlvbi5sb2FkRnJvbUNhc2VJbnNlbnNpdGl2ZU9iamVjdChtZXNzYWdlLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICBsZWF2ZUFwcGxpY2F0aW9uTm90aWZpY2F0aW9uLnJvdXRlID0gQ2hhbm5lbFJvdXRlcy5WaWV3QWNjb3VudDtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgTmV3Tm90aWZpY2F0aW9uUmVjZWl2ZWQobGVhdmVBcHBsaWNhdGlvbk5vdGlmaWNhdGlvbikpO1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBSb2xlc0ZldGNoVHJpZ2dlcmVkKCkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSBpZiAobWVzc2FnZS5tZXNzYWdlLk5vdGlmaWNhdGlvblR5cGVHdWlkLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PSBOb3RpZmljYXRpb25UeXBlSWRzLlJldmlld0Fzc2lnblRvRW1wbG95ZWVOb3RpZmljYXRpb24udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxlYXZlQXBwbGljYXRpb25Ob3RpZmljYXRpb24gPSBuZXcgTGVhdmVBcHBsaWNhdGlvbk5vdGlmaWNhdGlvbigpO1xyXG4gICAgICAgICAgICBsZWF2ZUFwcGxpY2F0aW9uTm90aWZpY2F0aW9uLmxvYWRGcm9tQ2FzZUluc2Vuc2l0aXZlT2JqZWN0KG1lc3NhZ2UubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIGxlYXZlQXBwbGljYXRpb25Ob3RpZmljYXRpb24ucm91dGUgPSBDaGFubmVsUm91dGVzLlZpZXdBY2NvdW50O1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBOZXdOb3RpZmljYXRpb25SZWNlaXZlZChsZWF2ZUFwcGxpY2F0aW9uTm90aWZpY2F0aW9uKSk7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFJvbGVzRmV0Y2hUcmlnZ2VyZWQoKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmIChtZXNzYWdlLm1lc3NhZ2UuTm90aWZpY2F0aW9uVHlwZUd1aWQudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09IE5vdGlmaWNhdGlvblR5cGVJZHMuUmV2aWV3U3VibWl0dGVkQnlFbXBsb3llZU5vdGlmaWNhdGlvbi50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgY29uc3QgbGVhdmVBcHBsaWNhdGlvbk5vdGlmaWNhdGlvbiA9IG5ldyBMZWF2ZUFwcGxpY2F0aW9uTm90aWZpY2F0aW9uKCk7XHJcbiAgICAgICAgICAgIGxlYXZlQXBwbGljYXRpb25Ob3RpZmljYXRpb24ubG9hZEZyb21DYXNlSW5zZW5zaXRpdmVPYmplY3QobWVzc2FnZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgbGVhdmVBcHBsaWNhdGlvbk5vdGlmaWNhdGlvbi5yb3V0ZSA9IENoYW5uZWxSb3V0ZXMuVmlld0FjY291bnQ7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IE5ld05vdGlmaWNhdGlvblJlY2VpdmVkKGxlYXZlQXBwbGljYXRpb25Ob3RpZmljYXRpb24pKTtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgUm9sZXNGZXRjaFRyaWdnZXJlZCgpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgaWYgKG1lc3NhZ2UubWVzc2FnZS5Ob3RpZmljYXRpb25UeXBlR3VpZC50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT0gTm90aWZpY2F0aW9uVHlwZUlkcy5SZXZpZXdJbnZpdGF0aW9uTm90aWZpY2F0aW9uLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICAgICAgICBjb25zdCBsZWF2ZUFwcGxpY2F0aW9uTm90aWZpY2F0aW9uID0gbmV3IExlYXZlQXBwbGljYXRpb25Ob3RpZmljYXRpb24oKTtcclxuICAgICAgICAgICAgbGVhdmVBcHBsaWNhdGlvbk5vdGlmaWNhdGlvbi5sb2FkRnJvbUNhc2VJbnNlbnNpdGl2ZU9iamVjdChtZXNzYWdlLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICBsZWF2ZUFwcGxpY2F0aW9uTm90aWZpY2F0aW9uLnJvdXRlID0gQ2hhbm5lbFJvdXRlcy5WaWV3QWNjb3VudDtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgTmV3Tm90aWZpY2F0aW9uUmVjZWl2ZWQobGVhdmVBcHBsaWNhdGlvbk5vdGlmaWNhdGlvbikpO1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBSb2xlc0ZldGNoVHJpZ2dlcmVkKCkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSBpZiAobWVzc2FnZS5tZXNzYWdlLk5vdGlmaWNhdGlvblR5cGVHdWlkLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PSBOb3RpZmljYXRpb25UeXBlSWRzLlBlcmZvcm1hbmNlUmV2aWV3U3VibWl0dGVkQnlFbXBsb3llZU5vdGlmaWNhdGlvbi50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgY29uc3QgbGVhdmVBcHBsaWNhdGlvbk5vdGlmaWNhdGlvbiA9IG5ldyBMZWF2ZUFwcGxpY2F0aW9uTm90aWZpY2F0aW9uKCk7XHJcbiAgICAgICAgICAgIGxlYXZlQXBwbGljYXRpb25Ob3RpZmljYXRpb24ubG9hZEZyb21DYXNlSW5zZW5zaXRpdmVPYmplY3QobWVzc2FnZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgbGVhdmVBcHBsaWNhdGlvbk5vdGlmaWNhdGlvbi5yb3V0ZSA9IENoYW5uZWxSb3V0ZXMuVmlld0FjY291bnQ7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IE5ld05vdGlmaWNhdGlvblJlY2VpdmVkKGxlYXZlQXBwbGljYXRpb25Ob3RpZmljYXRpb24pKTtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgUm9sZXNGZXRjaFRyaWdnZXJlZCgpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgaWYgKG1lc3NhZ2UubWVzc2FnZS5Ob3RpZmljYXRpb25UeXBlR3VpZC50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT0gTm90aWZpY2F0aW9uVHlwZUlkcy5QZXJmb3JtYW5jZVJldmlld0ludml0YXRpb25Ob3RpZmljYXRpb25Nb2RlbC50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgY29uc3QgbGVhdmVBcHBsaWNhdGlvbk5vdGlmaWNhdGlvbiA9IG5ldyBMZWF2ZUFwcGxpY2F0aW9uTm90aWZpY2F0aW9uKCk7XHJcbiAgICAgICAgICAgIGxlYXZlQXBwbGljYXRpb25Ob3RpZmljYXRpb24ubG9hZEZyb21DYXNlSW5zZW5zaXRpdmVPYmplY3QobWVzc2FnZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgbGVhdmVBcHBsaWNhdGlvbk5vdGlmaWNhdGlvbi5yb3V0ZSA9IENoYW5uZWxSb3V0ZXMuVmlld0FjY291bnQ7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IE5ld05vdGlmaWNhdGlvblJlY2VpdmVkKGxlYXZlQXBwbGljYXRpb25Ob3RpZmljYXRpb24pKTtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgUm9sZXNGZXRjaFRyaWdnZXJlZCgpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgaWYgKG1lc3NhZ2UubWVzc2FnZS5Ob3RpZmljYXRpb25UeXBlR3VpZC50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT0gTm90aWZpY2F0aW9uVHlwZUlkcy5QZXJmb3JtYW5jZVJldmlld0Fzc2lnblRvRW1wbG95ZWVOb3RpZmljYXRpb24udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxlYXZlQXBwbGljYXRpb25Ob3RpZmljYXRpb24gPSBuZXcgTGVhdmVBcHBsaWNhdGlvbk5vdGlmaWNhdGlvbigpO1xyXG4gICAgICAgICAgICBsZWF2ZUFwcGxpY2F0aW9uTm90aWZpY2F0aW9uLmxvYWRGcm9tQ2FzZUluc2Vuc2l0aXZlT2JqZWN0KG1lc3NhZ2UubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIGxlYXZlQXBwbGljYXRpb25Ob3RpZmljYXRpb24ucm91dGUgPSBDaGFubmVsUm91dGVzLlZpZXdBY2NvdW50O1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBOZXdOb3RpZmljYXRpb25SZWNlaXZlZChsZWF2ZUFwcGxpY2F0aW9uTm90aWZpY2F0aW9uKSk7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFJvbGVzRmV0Y2hUcmlnZ2VyZWQoKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmIChtZXNzYWdlLm1lc3NhZ2UuTm90aWZpY2F0aW9uVHlwZUd1aWQudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09IE5vdGlmaWNhdGlvblR5cGVJZHMuUHVyY2hhc2VTaGlwbWVudE5vdGlmaWNhdGlvbklkLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICAgICAgICBjb25zdCBwdXJjaGFzZUV4ZWN1dGlvbk5vdGlmaWNhdGlvbiA9IG5ldyBMZWF2ZUFwcGxpY2F0aW9uTm90aWZpY2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHB1cmNoYXNlRXhlY3V0aW9uTm90aWZpY2F0aW9uLmxvYWRGcm9tQ2FzZUluc2Vuc2l0aXZlT2JqZWN0KG1lc3NhZ2UubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIHB1cmNoYXNlRXhlY3V0aW9uTm90aWZpY2F0aW9uLnJvdXRlID0gQ2hhbm5lbFJvdXRlcy5FZGl0UHVyY2hhc2VFeGVjdXRpb247XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IE5ld05vdGlmaWNhdGlvblJlY2VpdmVkKHB1cmNoYXNlRXhlY3V0aW9uTm90aWZpY2F0aW9uKSk7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFJvbGVzRmV0Y2hUcmlnZ2VyZWQoKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gVE9ETzogU2VuZCB0aGVzZSBlcnJvcnMgb250byBzZXJ2ZXIgZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZ1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkZvdW5kIHVuZGV0ZWN0ZWQgbm90aWZpY2F0aW9uIHR5cGUuIFwiICsgbWVzc2FnZS5tZXNzYWdlLk5vdGlmaWNhdGlvblR5cGVHdWlkKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAvLyBBZGQgb3RoZXIgbm90aWZpY2F0aW9ucyBoZXJlLlxyXG5cclxuICAgICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7XHJcbiAgICAgICAgLy8gVE9ETzogU2VuZCB0aGVzZSBleGNlcHRpb25zIG9udG8gc2VydmVyIGZvciBmdXJ0aGVyIHByb2Nlc3NpbmdcclxuICAgICAgICBjb25zb2xlLmxvZyhcIkV4Y2VwdGlvbiBPY2N1cmVkXCIgKyBleGNlcHRpb24ubWVzc2FnZSk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgICBjb25zdCBzdGF0dXNPZlVzZXIgPSAocHJlc2VuY2VFdmVudCkgPT4ge1xyXG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBQcmVzZW5jZUV2ZW50VHJpZ2dlcmVkKHByZXNlbmNlRXZlbnQpKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHR5cGluZ1N0YXR1cyA9IChzaWduYWxFdmVudCkgPT4ge1xyXG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBSZWNlaXZlU2lnbmFsVHJpZ2dlcmVkKHNpZ25hbEV2ZW50KSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNoYXRTZXJ2aWNlLmdldFB1Ym51YktleXMoKS5zdWJzY3JpYmUoKGtleXM6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnB1Ym51Yi5pbml0KHtcclxuICAgICAgICBwdWJsaXNoS2V5OiBrZXlzLmRhdGEucHVibGlzaEtleSxcclxuICAgICAgICBzdWJzY3JpYmVLZXk6IGtleXMuZGF0YS5zdWJzY3JpYmVLZXksXHJcbiAgICAgICAgdXVpZDogdGhpcy5sb2dJblVzZXJJZFxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLmNoYXRTZXJ2aWNlLmdldEFsbFVzZXJzRm9yU2xhY2tBcHAoKS5zdWJzY3JpYmUoKGNvbGxlYWd1ZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuY29sbGVhZ3Vlc0xpc3QgPSBjb2xsZWFndWVzLmRhdGE7XHJcbiAgICAgICAgdGhpcy5jaGF0U2VydmljZS5nZXRVc2VyQ2hhbm5lbHMoKS5zdWJzY3JpYmUoKGNoYW5uZWxzOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMuY2hhbm5lbExpc3QgPSBjaGFubmVscy5kYXRhO1xyXG4gICAgICAgICAgdGhpcy5zaWduT3V0VXNlckNoYW5uZWxzKCk7XHJcbiAgICAgICAgICB2YXIgbG9naW5Db21wYW55SWQgPSB0aGlzLmNvb2tpZVNlcnZpY2UuZ2V0KFwiQ29tcGFueUlkXCIpO1xyXG4gICAgICAgICAgaWYgKHRoaXMuY2hhbm5lbExpc3QgIT0gdW5kZWZpbmVkIHx8IHRoaXMuY2hhbm5lbExpc3QgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpbmRleDEgPSAwOyBpbmRleDEgPCB0aGlzLmNoYW5uZWxMaXN0Lmxlbmd0aDsgaW5kZXgxKyspIHtcclxuICAgICAgICAgICAgICB0aGlzLnB1Ym51Yi5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgY2hhbm5lbHM6IFsobG9naW5Db21wYW55SWQgKyAnLScgKyB0aGlzLmNoYW5uZWxMaXN0W2luZGV4MV0uaWQpXVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnB1Ym51Yi5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICBjaGFubmVsczogWygnQ2hhbm5lbFVwZGF0ZXMtJyArIGxvZ2luQ29tcGFueUlkKV1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdGhpcy5wdWJudWIuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgY2hhbm5lbHM6IFsoJ1VzZXJVcGRhdGVzLScgKyBsb2dpbkNvbXBhbnlJZCldXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHZhciBpbmRleDEyID0gdGhpcy5jb2xsZWFndWVzTGlzdC5maW5kSW5kZXgoeCA9PiB4LnVzZXJJZCA9PSB0aGlzLmxvZ0luVXNlcklkKTtcclxuICAgICAgICAgIGlmIChpbmRleDEyID4gLTEpIHtcclxuICAgICAgICAgICAgdmFyIG5hbWUgPSB0aGlzLmNvbGxlYWd1ZXNMaXN0W2luZGV4MTJdLmZ1bGxOYW1lO1xyXG4gICAgICAgICAgICBuYW1lID0gbmFtZS50cmltKCk7XHJcbiAgICAgICAgICAgIG5hbWUgPSB0aGlzLnJlcGxhY2VBbGwobmFtZSwgXCIgXCIsIFwiXCIpXHJcbiAgICAgICAgICAgIHRoaXMubG9naW5Vc2VyY2hhbm5lbE5hbWUgPSAobmFtZSArICctJyArIHRoaXMubG9nSW5Vc2VySWQpO1xyXG4gICAgICAgICAgICB0aGlzLnB1Ym51Yi5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgIGNoYW5uZWxzOiBbdGhpcy5sb2dpblVzZXJjaGFubmVsTmFtZV1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgfSlcclxuICAgICAgdGhpcy5wdWJudWIuYWRkTGlzdGVuZXIoe1xyXG4gICAgICAgIHN0YXR1czogc3QgPT4ge1xyXG4gICAgICAgICAgaWYgKHN0LmNhdGVnb3J5ID09PSBcIlBOVW5rbm93bkNhdGVnb3J5XCIpIHtcclxuICAgICAgICAgICAgdmFyIG5ld1N0YXRlID0ge1xyXG4gICAgICAgICAgICAgIG5ldzogXCJlcnJvclwiXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMucHVibnViLnNldFN0YXRlKFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN0YXRlOiBuZXdTdGF0ZVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAvLyBmdW5jdGlvbiAoc3RhdHVzKSB7XHJcbiAgICAgICAgICAgICAgLy8gICBjb25zb2xlLmxvZyhzdC5lcnJvckRhdGEubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2lnbmFsOiBzaWduYWxFdmVudCA9PiB7XHJcbiAgICAgICAgICB0eXBpbmdTdGF0dXMoc2lnbmFsRXZlbnQpXHJcbiAgICAgICAgfSxcclxuICAgICAgICBwcmVzZW5jZTogcHJlc2VuY2VFdmVudCA9PiB7XHJcbiAgICAgICAgICBzdGF0dXNPZlVzZXIocHJlc2VuY2VFdmVudClcclxuICAgICAgICB9LFxyXG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJzdWJzY3JpYmVkIHRvIFwiICsgbWVzc2FnZSk7XHJcbiAgICAgICAgICBzdG9yZUxpc3RuZXIobWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuICBhc3luYyBzaWduT3V0VXNlckNoYW5uZWxzKCkge1xyXG4gICAgdGhpcy5wdWJudWIudW5zdWJzY3JpYmUoeyBjaGFubmVsczogW3RoaXMubG9naW5Vc2VyY2hhbm5lbE5hbWVdIH0pO1xyXG4gICAgdmFyIGxvZ2luQ29tcGFueUlkID0gdGhpcy5jb29raWVTZXJ2aWNlLmdldChcIkNvbXBhbnlJZFwiKTtcclxuICAgIGlmICh0aGlzLmNoYW5uZWxMaXN0ICE9IHVuZGVmaW5lZCB8fCB0aGlzLmNoYW5uZWxMaXN0ICE9IG51bGwpIHtcclxuICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuY2hhbm5lbExpc3QubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgdGhpcy5wdWJudWIudW5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgY2hhbm5lbHM6IFsobG9naW5Db21wYW55SWQgKyAnLScgKyB0aGlzLmNoYW5uZWxMaXN0W2luZGV4XS5pZCldXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMucHVibnViLnVuc3Vic2NyaWJlKHtcclxuICAgICAgY2hhbm5lbHM6IFsoJ0NoYW5uZWxVcGRhdGVzLScgKyBsb2dpbkNvbXBhbnlJZCldXHJcbiAgICB9KTtcclxuICAgIHRoaXMucHVibnViLnVuc3Vic2NyaWJlKHtcclxuICAgICAgY2hhbm5lbHM6IFsoJ1VzZXJVcGRhdGVzLScgKyBsb2dpbkNvbXBhbnlJZCldXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHN1YlNjcmliaW5nVG9QcmVzZW5jZUNoYW5uZWwoKSB7XHJcbiAgICB2YXIgbG9naW5Db21wYW55SWQgPSB0aGlzLmNvb2tpZVNlcnZpY2UuZ2V0KFwiQ29tcGFueUlkXCIpO1xyXG4gICAgdmFyIHByZXNlbmNlQ2hhbm5lbCA9IFwiTWVzc2VuZ2VyUHJlc2VuY2UtXCIgKyBsb2dpbkNvbXBhbnlJZDtcclxuICAgIGF3YWl0IHRoaXMucHVibnViLnN1YnNjcmliZSh7XHJcbiAgICAgIGNoYW5uZWxzOiBbcHJlc2VuY2VDaGFubmVsXSxcclxuICAgICAgd2l0aFByZXNlbmNlOiB0cnVlXHJcbiAgICB9KTtcclxuICAgIHRoaXMucHVibnViLmhlcmVOb3coe1xyXG4gICAgICBjaGFubmVsczogW3ByZXNlbmNlQ2hhbm5lbF0sXHJcbiAgICAgIGluY2x1ZGVVVUlEczogdHJ1ZSxcclxuICAgICAgaW5jbHVkZVN0YXRlOiB0cnVlXHJcbiAgICB9LFxyXG4gICAgICAoc3RhdHVzLCByZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IEluaXRhbFN0YXRlT2ZVc2Vyc1RyaWdnZXJlZChyZXNwb25zZSkpXHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gIH1cclxuICBwdWJsaXNoaW5nTWVzc2FnZSgpIHtcclxuICAgIGlmICh0aGlzLnB1Ymxpc2hpbmdNZXNzYWdlT2ZVc2VyLnB1Ym51YkNoYW5uZWxOYW1lT2ZNZXNzYWdlLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5wdWJsaXNoaW5nTWVzc2FnZU9mVXNlci5wdWJudWJDaGFubmVsTmFtZU9mTWVzc2FnZS5mb3JFYWNoKGNoYW5uZWxOYW1lID0+IHtcclxuICAgICAgICB0aGlzLnB1Ym51Yi5wdWJsaXNoKHtcclxuICAgICAgICAgIGNoYW5uZWw6IFtjaGFubmVsTmFtZV0sXHJcbiAgICAgICAgICBtZXNzYWdlOiBKU09OLnN0cmluZ2lmeSh0aGlzLnB1Ymxpc2hpbmdNZXNzYWdlT2ZVc2VyKVxyXG4gICAgICAgIH0sIGZ1bmN0aW9uIChzdGF0dXMsIHJlc29wbnNlKSB7XHJcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZyhzdGF0dXMpXHJcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZyhyZXNvcG5zZSlcclxuICAgICAgICB9KVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9wZW5Bbm5vdW5jZW1lbnREaWFsb2coYW5ub3VuY2VkKSB7XHJcbiAgICB0aGlzLmRpYWxvZy5jbG9zZUFsbCgpO1xyXG4gICAgbGV0IGRpYWxvZ0lkID0gXCJhbm5vdWNlbWVudC1kaWFsb2dcIjtcclxuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5vcGVuQW5ub3VjZW1lbnREaWFsb2dDb21wb25lbnQsIHtcclxuICAgICAgbWluV2lkdGg6IFwiNjB2d1wiLFxyXG4gICAgICBtYXhXaWR0aDogXCI2MHZ3XCIsXHJcbiAgICAgIG1pbkhlaWdodDogXCI1MHZoXCIsXHJcbiAgICAgIG1heEhlaWdodDogXCI4MHZoXCIsXHJcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgaWQ6IGRpYWxvZ0lkLFxyXG4gICAgICBkYXRhOiB7XHJcbiAgICAgICAgZGlhbG9nSWQ6IGRpYWxvZ0lkLFxyXG4gICAgICAgIGFubm91bmNlbWVudElkOiBhbm5vdW5jZWQuQW5ub3VuY2VtZW50SWQsXHJcbiAgICAgICAgYW5ub3VuY2VtZW50OiBhbm5vdW5jZWQuQW5ub3VuY2VtZW50LFxyXG4gICAgICAgIGFubm91bmNlZEJ5OiBhbm5vdW5jZWQuQW5ub3VuY2VkQnksXHJcbiAgICAgICAgYW5ub3VuY2VkQnlJZDogYW5ub3VuY2VkLkFubm91bmNlZEJ5SWQsXHJcbiAgICAgICAgYW5ub3VuY2VkQnlVc2VySW1hZ2U6IGFubm91bmNlZC5Bbm5vdW5jZWRCeVVzZXJJbWFnZSxcclxuICAgICAgICBhbm5vdW5jZWRPbjogYW5ub3VuY2VkLkFubm91bmNlZE9uXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLm5vdGlmaWNhdGlvbnMuZmluZEluZGV4KChwKSA9PiBwLm5vdGlmaWNhdGlvbklkLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PSB0aGlzLmFubm91bmNlTm90aWZpY2F0aW9uSWQudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpKTtcclxuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICB0aGlzLnVwc2VydFJlYWROb3RpZmljYXRpb24odGhpcy5ub3RpZmljYXRpb25zW2luZGV4XSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuICAvLyBub3RpZmljYXRpb25PZkNoYXQobWVzc2FnZURldGFpbHNPYmplY3QpIHtcclxuICAvLyAgIGlmKHRoaXMucHJldmlvdXNNZXNzYWdlICE9IG1lc3NhZ2VEZXRhaWxzT2JqZWN0KXtcclxuICAvLyAgIHRoaXMubWVzc2FnZXNVbnJlYWRDb3VudCArPSAxO1xyXG4gIC8vICAgdmFyIGltYWdlZm9yTm90aWZpY2F0aW9uOiBhbnk7XHJcbiAgLy8gICBpZiAobWVzc2FnZURldGFpbHNPYmplY3Quc2VuZGVyUHJvZmlsZUltYWdlID09IG51bGwpIHtcclxuICAvLyAgICAgaW1hZ2Vmb3JOb3RpZmljYXRpb24gPSBcImh0dHBzOi8vcG5naW1hZ2UubmV0L3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE4LzA1L2F2YXRhci1wbmctaW1hZ2VzLTEucG5nXCI7XHJcbiAgLy8gICB9XHJcbiAgLy8gICBlbHNlIHtcclxuICAvLyAgICAgaW1hZ2Vmb3JOb3RpZmljYXRpb24gPSBtZXNzYWdlRGV0YWlsc09iamVjdC5zZW5kZXJQcm9maWxlSW1hZ2U7XHJcbiAgLy8gICB9XHJcbiAgLy8gICBsZXQgb3B0aW9ucyA9IHtcclxuICAvLyAgICAgYm9keTogbWVzc2FnZURldGFpbHNPYmplY3QuYm9keSxcclxuICAvLyAgICAgaWNvbjogaW1hZ2Vmb3JOb3RpZmljYXRpb24sXHJcbiAgLy8gICAgIGRhdGE6IHtcclxuICAvLyAgICAgICBzZW5kZXJVc2VySWQ6IG1lc3NhZ2VEZXRhaWxzT2JqZWN0LnNlbmRlclVzZXJJZCxcclxuICAvLyAgICAgICBjaGFubmVsSWQ6IG1lc3NhZ2VEZXRhaWxzT2JqZWN0LmNoYW5uZWxJZFxyXG4gIC8vICAgICB9XHJcbiAgLy8gICB9XHJcbiAgLy8gICB0aGlzLnB1c2hOb3RpZmljYXRpb25zLmNyZWF0ZShtZXNzYWdlRGV0YWlsc09iamVjdC50aXRsZSwgb3B0aW9ucykuc3Vic2NyaWJlKFxyXG4gIC8vICAgICByZXMgPT4ge1xyXG4gIC8vICAgICAgIGlmIChyZXMuZXZlbnQudHlwZSA9PT0gJ2NsaWNrJykge1xyXG4gIC8vICAgICAgICAgd2luZG93LmZvY3VzKCk7XHJcbiAgLy8gICAgICAgICBpZiAodGhpcy5yb3V0ZXIudXJsICE9ICcvY2hhdCcpIHtcclxuICAvLyAgICAgICAgICAgaWYgKHJlcy5ub3RpZmljYXRpb24uZGF0YS5jaGFubmVsSWQgIT0gbnVsbCAmJiByZXMubm90aWZpY2F0aW9uLmRhdGEuY2hhbm5lbElkICE9IHVuZGVmaW5lZCkge1xyXG4gIC8vICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKExvY2FsU3RvcmFnZVByb3BlcnRpZXMuQ2hhdElkLCByZXMubm90aWZpY2F0aW9uLmRhdGEuY2hhbm5lbElkKTtcclxuICAvLyAgICAgICAgICAgfSBlbHNlIHtcclxuICAvLyAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkNoYXRJZCwgcmVzLm5vdGlmaWNhdGlvbi5kYXRhLnNlbmRlclVzZXJJZCk7XHJcbiAgLy8gICAgICAgICAgIH1cclxuICAvLyAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW1wiL2NoYXRcIl0pO1xyXG4gIC8vICAgICAgICAgfVxyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgfSxcclxuICAvLyAgICAgZXJyID0+IGNvbnNvbGUubG9nKGVycilcclxuICAvLyAgICk7XHJcbiAgLy8gICB0aGlzLnByZXZpb3VzTWVzc2FnZSA9IG1lc3NhZ2VEZXRhaWxzT2JqZWN0XHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG4gIHVwc2VydFJlYWROb3RpZmljYXRpb24oc2VsZWN0ZWROb3RpZmljYXRpb24pIHtcclxuICAgIGNvbnN0IG5vdGlmaWNhdGlvbnMgPSBbXTtcclxuICAgIG5vdGlmaWNhdGlvbnMucHVzaChzZWxlY3RlZE5vdGlmaWNhdGlvbik7XHJcbiAgICBjb25zdCBub3RpaWZjYXRpb25tb2RlbCA9IEpTT04ucGFyc2Uoc2VsZWN0ZWROb3RpZmljYXRpb24ubm90aWZpY2F0aW9uSnNvbik7XHJcbiAgICBpZiAoc2VsZWN0ZWROb3RpZmljYXRpb24ubm90aWZpY2F0aW9uVHlwZUlkLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PVxyXG4gICAgICBOb3RpZmljYXRpb25UeXBlSWRzLk5ld1Byb2plY3RDcmVhdGVkTm90aWZpY2F0aW9uSWQudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpIHx8XHJcbiAgICAgIHNlbGVjdGVkTm90aWZpY2F0aW9uLm5vdGlmaWNhdGlvblR5cGVJZC50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT1cclxuICAgICAgTm90aWZpY2F0aW9uVHlwZUlkcy5Qcm9qZWN0TWVtYmVyUm9sZUFkZGVkTm90aWZpY2F0aW9uSWQudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcInByb2plY3RzL3Byb2plY3RzdGF0dXMvXCIgKyBub3RpaWZjYXRpb25tb2RlbC5Qcm9qZWN0R3VpZCArIFwiL2FjdGl2ZS1nb2Fsc1wiXSk7XHJcbiAgICB9IGVsc2UgaWYgKHNlbGVjdGVkTm90aWZpY2F0aW9uLm5vdGlmaWNhdGlvblR5cGVJZC50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT1cclxuICAgICAgTm90aWZpY2F0aW9uVHlwZUlkcy5Hb2FsQXBwcm92ZWRGcm9tUmVwbGFuLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCJwcm9qZWN0cy9nb2FsL1wiICsgbm90aWlmY2F0aW9ubW9kZWwuR29hbEd1aWRdKTtcclxuICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWROb3RpZmljYXRpb24ubm90aWZpY2F0aW9uVHlwZUlkLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PVxyXG4gICAgICBOb3RpZmljYXRpb25UeXBlSWRzLk5vdGlmaWNhdGlvbl9Xb3JrSXRlbUFzc2lnbmVkVG9Vc2VyLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCJwcm9qZWN0cy93b3JraXRlbS9cIiArIG5vdGlpZmNhdGlvbm1vZGVsLlVzZXJTdG9yeUd1aWRdKTtcclxuICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWROb3RpZmljYXRpb24ubm90aWZpY2F0aW9uVHlwZUlkLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PVxyXG4gICAgICBOb3RpZmljYXRpb25UeXBlSWRzLlVTZXJTdG9yeVVwZGF0ZU5vdGlmaWNhdGlvbklkLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCJwcm9qZWN0cy93b3JraXRlbS9cIiArIG5vdGlpZmNhdGlvbm1vZGVsLlVzZXJTdG9yeUlkXSk7XHJcbiAgICB9IGVsc2UgaWYgKHNlbGVjdGVkTm90aWZpY2F0aW9uLm5vdGlmaWNhdGlvblR5cGVJZC50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT1cclxuICAgICAgTm90aWZpY2F0aW9uVHlwZUlkcy5TcHJpbnRTdGFydGVkLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCJwcm9qZWN0cy9zcHJpbnQvXCIgKyBub3RpaWZjYXRpb25tb2RlbC5TcHJpbnRHdWlkXSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChzZWxlY3RlZE5vdGlmaWNhdGlvbi5ub3RpZmljYXRpb25UeXBlSWQudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09XHJcbiAgICAgIE5vdGlmaWNhdGlvblR5cGVJZHMuUHVzaE5vdGlmaWNhdGlvbkZvclVzZXJTdG9yeUNvbW1lbnQudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcInByb2plY3RzL3dvcmtpdGVtL1wiICsgbm90aWlmY2F0aW9ubW9kZWwuVXNlclN0b3J5R3VpZF0pO1xyXG4gICAgfSBlbHNlIGlmIChzZWxlY3RlZE5vdGlmaWNhdGlvbi5ub3RpZmljYXRpb25UeXBlSWQudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09XHJcbiAgICAgIE5vdGlmaWNhdGlvblR5cGVJZHMuR29hbFJlcXVlc3RkRm9yUkVwbGFuLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCJwcm9qZWN0cy9nb2FsL1wiICsgbm90aWlmY2F0aW9ubW9kZWwuR29hbEd1aWRdKTtcclxuICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWROb3RpZmljYXRpb24ubm90aWZpY2F0aW9uVHlwZUlkLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PVxyXG4gICAgICBOb3RpZmljYXRpb25UeXBlSWRzLlNwcmludFJlcXVlc3RkRm9yUkVwbGFuLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCJwcm9qZWN0cy9zcHJpbnQvXCIgKyBub3RpaWZjYXRpb25tb2RlbC5TcHJpbnRHdWlkXSk7XHJcbiAgICB9IGVsc2UgaWYgKHNlbGVjdGVkTm90aWZpY2F0aW9uLm5vdGlmaWNhdGlvblR5cGVJZC50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT1cclxuICAgICAgTm90aWZpY2F0aW9uVHlwZUlkcy5Ob3RpZmljYXRpb25fQWRob2NXb3JrSXRlbUFzc2lnbmVkVG9Vc2VyLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCJkYXNoYm9hcmQvYWRob2Mtd29ya2l0ZW0vXCIgKyBub3RpaWZjYXRpb25tb2RlbC5Vc2VyU3RvcnlHdWlkXSk7XHJcbiAgICB9IGVsc2UgaWYgKHNlbGVjdGVkTm90aWZpY2F0aW9uLm5vdGlmaWNhdGlvblR5cGVJZC50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT1cclxuICAgICAgTm90aWZpY2F0aW9uVHlwZUlkcy5BZGhvY1VTZXJTdG9yeVVwZGF0ZU5vdGlmaWNhdGlvbklkLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCJkYXNoYm9hcmQvYWRob2Mtd29ya2l0ZW0vXCIgKyBub3RpaWZjYXRpb25tb2RlbC5Vc2VyU3RvcnlJZF0pO1xyXG4gICAgfSBlbHNlIGlmIChzZWxlY3RlZE5vdGlmaWNhdGlvbi5ub3RpZmljYXRpb25UeXBlSWQudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09XHJcbiAgICAgIE5vdGlmaWNhdGlvblR5cGVJZHMuUHVyY2hhc2VTaGlwbWVudE5vdGlmaWNhdGlvbklkLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCJjbGllbnQvcHVyY2hhc2UtZXhlY3V0aW9uL1wiICsgbm90aWlmY2F0aW9ubW9kZWwuUHVyY2hhc2VHdWlkXSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBVcHNlcnRVbnJlYWROb3RpZmljYXRpb25zVHJpZ2dlcmVkKG5vdGlmaWNhdGlvbnMpKTtcclxuXHJcblxyXG4gIH1cclxuICBsb2FkTm90aWZpY2F0aW9ucygpIHtcclxuICAgIGNvbnN0IEN1cnJlbnRVc2VySWQgPSB0aGlzLmNvb2tpZVNlcnZpY2UuZ2V0KExvY2FsU3RvcmFnZVByb3BlcnRpZXMuQ3VycmVudFVzZXJJZCk7XHJcbiAgICAvLyBTdWJzY3JpYmUgdG8gVGFzayBBc3NpZ25tZW50IE5vdGlmaWNhaXRvbnMgaGVyZS5cclxuICAgIGNvbnN0IHRhc2tBc3NpZ25tZW50Q2hhbm5lbFRvU3Vic2NyaWJlSW50byA9IENoYW5uZWxOYW1lcy5DaGFubmVsX1Rhc2tBc3NpZ25tZW50cyArIEN1cnJlbnRVc2VySWQ7XHJcbiAgICBjb25zdCB0YXN0YXR1c1JlcG9ydFN1Ym1pc3Npb25DaGFubmVsVG9TdWJzY3JpYmVJbnRvID0gQ2hhbm5lbE5hbWVzLkNoYW5uZWxfU3RhdHVzUmVwb3J0U3VibWlzc2lvbiArIEN1cnJlbnRVc2VySWQ7XHJcbiAgICBjb25zdCB0YXN0YXR1c0NvbmZpZ0Fzc2lnbkNoYW5uZWxUb1N1YnNjcmliZUludG8gPSBDaGFubmVsTmFtZXMuQ2hhbm5lbF9TdGF0dXNDb25maWdBc3NpZ24gKyBDdXJyZW50VXNlcklkO1xyXG4gICAgY29uc3QgbXVsdGlDaGFydHNTY2hlZHVsaW5nQ2hhbm5lbFRvU3Vic2NyaWJlSW50byA9IENoYW5uZWxOYW1lcy5DaGFubmVsX011bHRpQ2hhcnRzU2NoZWR1bGluZyArIEN1cnJlbnRVc2VySWQ7XHJcbiAgICBjb25zdCBhc3NldHNBc3NpZ25lZENoYW5uZWxUb1N1YnNjcmliZUludG8gPSBDaGFubmVsTmFtZXMuQ2hhbm5lbF9Bc3NldEFzc2lnbm1lbnQgKyBDdXJyZW50VXNlcklkO1xyXG4gICAgY29uc3QgcHJvamVjdENyZWF0ZWRDaGFubmVsVG9TdWJzY3JpYmVJbnRvID0gQ2hhbm5lbE5hbWVzLkNoYW5uZWxfTmV3UHJvamVjdCArIEN1cnJlbnRVc2VySWQ7XHJcbiAgICBjb25zdCBwcm9qZWN0QWNjZXNzVG9NZW1iZXJDaGFubmVsVG9TdWJzY3JpYmVJbnRvID0gQ2hhbm5lbE5hbWVzLkNoYW5uZWxfUHJvamVjdE1lbWJlclJvbGUgKyBDdXJyZW50VXNlcklkO1xyXG4gICAgY29uc3QgZ29hbEFwcHJvdmVkQ2hhbm5lbFRvU3Vic2NyaWJlSW50byA9IENoYW5uZWxOYW1lcy5DaGFubmVsX0dvYWxBcHByb3ZlZEZyb21SZXBsYW4gKyBDdXJyZW50VXNlcklkO1xyXG4gICAgY29uc3QgdXNlclN0b3J5VXBkYXRlQ2hhbm5lbFRvU3Vic2NyaWJlSW50byA9IENoYW5uZWxOYW1lcy5DaGFubmVsX1VzZXJTdG9yeVVwZGF0ZU5vdGlmaWNhdGlvbiArIEN1cnJlbnRVc2VySWQ7XHJcbiAgICBjb25zdCBBbm5vdW5jZW1lbnRDaGFubmVsVG9TdWJzY3JpYmVJbnRvID0gQ2hhbm5lbE5hbWVzLkNoYW5uZWxfQW5ub3VuY2VtZW50Tm90aWZpY2F0aW9uICsgQ3VycmVudFVzZXJJZDtcclxuICAgIGNvbnN0IFJlbWluZGVyQ2hhbm5lbFRvU3Vic2NyaWJlSW50byA9IENoYW5uZWxOYW1lcy5DaGFubmVsX1JlbWluZGVyTm90aWZpY2F0aW9uICsgQ3VycmVudFVzZXJJZDtcclxuICAgIGNvbnN0IFBlcmZvcm1hbmNlQ2hhbm5lbFRvU3Vic2NyaWJlSW50byA9IENoYW5uZWxOYW1lcy5DaGFubmVsX1Blcm9mb3JtYW5jZU5vdGlmaWNhdGlvbiArIEN1cnJlbnRVc2VySWQ7XHJcbiAgICBjb25zdCB1c2VyU3RvcnlDb21tZW50Q2hhbm5lbFRvU3Vic2NyaWJlSW50byA9IENoYW5uZWxOYW1lcy5DaGFubmVsX1VzZXJTdG9yeUNvbW1lbnQgKyBDdXJyZW50VXNlcklkO1xyXG4gICAgY29uc3Qgc3ByaW50U3RhcnRlZENoYW5uZWxUb1N1YnNjcmliZUludG8gPSBDaGFubmVsTmFtZXMuQ2hhbm5lbF9TcHJpbnRTdGFydGVkICsgQ3VycmVudFVzZXJJZDtcclxuICAgIGNvbnN0IHNwcmludFJlcGxhbkNoYW5uZWxUb1N1YnNjcmliZUludG8gPSBDaGFubmVsTmFtZXMuQ2hhbm5lbF9TcHJpbnRSZXF1ZXN0ZWRUb1JlcGxhbiArIEN1cnJlbnRVc2VySWQ7XHJcbiAgICBjb25zdCBwcm9qZWN0RmVhdHVyZUNoYW5uZWxUb1N1YnNjcmliZUludG8gPSBDaGFubmVsTmFtZXMuQ2hhbm5lbF9Qcm9qZWN0RmVhdHVyZSArIEN1cnJlbnRVc2VySWQ7XHJcbiAgICBjb25zdCB1c2VyU3RvcnlBcmNoaXZlQ2hhbm5lbFRvU3Vic2NyaWJlSW50byA9IENoYW5uZWxOYW1lcy5DaGFubmVsX1VzZXJTdG9yeUFyY2hpdmUgKyBDdXJyZW50VXNlcklkO1xyXG4gICAgY29uc3QgdXNlclN0b3J5UGFya0NoYW5uZWxUb1N1YnNjcmliZUludG8gPSBDaGFubmVsTmFtZXMuQ2hhbm5lbF9Vc2VyU3RvcnlQYXJrICsgQ3VycmVudFVzZXJJZDtcclxuICAgIGNvbnN0IGdlbmVyaWNBY3Rpdml0eU5vdGlmaWNhdGlvbkNoYW5uZWxUb1N1YnNjcmliZUludG8gPSBDaGFubmVsTmFtZXMuQ2hhbm5lbF9HZW5lcmljQWN0aXZpdHlOb3RpZmljYXRpb24gKyBDdXJyZW50VXNlcklkO1xyXG4gICAgY29uc3QgcHVyY2hhc2VFeGVjdXRpb25Bc3NpZ25lZENoYW5uZWxUb1N1YnNjcmliZUludG8gPSBDaGFubmVsTmFtZXMuQ2hhbm5lbF9HZW5lcmljQWN0aXZpdHlOb3RpZmljYXRpb24gKyBDdXJyZW50VXNlcklkO1xyXG5cclxuICAgIGNvbnNvbGUubG9nKFwic3Vic2NyaWJpbmcgdG8gXCIgKyB0YXNrQXNzaWdubWVudENoYW5uZWxUb1N1YnNjcmliZUludG8pO1xyXG4gICAgY29uc29sZS5sb2coXCJzdWJzY3JpYmluZyB0byBcIiArIHRhc3RhdHVzUmVwb3J0U3VibWlzc2lvbkNoYW5uZWxUb1N1YnNjcmliZUludG8pO1xyXG4gICAgY29uc29sZS5sb2coXCJzdWJzY3JpYmluZyB0byBcIiArIHRhc3RhdHVzQ29uZmlnQXNzaWduQ2hhbm5lbFRvU3Vic2NyaWJlSW50byk7XHJcbiAgICBjb25zb2xlLmxvZyhcInN1YnNjcmliaW5nIHRvXCIgKyBhc3NldHNBc3NpZ25lZENoYW5uZWxUb1N1YnNjcmliZUludG8pO1xyXG4gICAgY29uc29sZS5sb2coXCJzdWJzY3JpYmluZyB0b1wiICsgcHJvamVjdENyZWF0ZWRDaGFubmVsVG9TdWJzY3JpYmVJbnRvKTtcclxuICAgIGNvbnNvbGUubG9nKFwic3Vic2NyaWJpbmcgdG9cIiArIHByb2plY3RBY2Nlc3NUb01lbWJlckNoYW5uZWxUb1N1YnNjcmliZUludG8pO1xyXG4gICAgY29uc29sZS5sb2coXCJzdWJzY3JpYmluZyB0b1wiICsgZ29hbEFwcHJvdmVkQ2hhbm5lbFRvU3Vic2NyaWJlSW50byk7XHJcbiAgICBjb25zb2xlLmxvZyhcInN1YnNjcmliaW5nIHRvXCIgKyB1c2VyU3RvcnlVcGRhdGVDaGFubmVsVG9TdWJzY3JpYmVJbnRvKTtcclxuICAgIGNvbnNvbGUubG9nKFwic3Vic2NyaWJpbmcgdG9cIiArIEFubm91bmNlbWVudENoYW5uZWxUb1N1YnNjcmliZUludG8pO1xyXG4gICAgY29uc29sZS5sb2coXCJzdWJzY3JpYmluZyB0b1wiICsgdXNlclN0b3J5Q29tbWVudENoYW5uZWxUb1N1YnNjcmliZUludG8pO1xyXG4gICAgY29uc29sZS5sb2coXCJzdWJzY3JpYmluZyB0b1wiICsgc3ByaW50U3RhcnRlZENoYW5uZWxUb1N1YnNjcmliZUludG8pO1xyXG4gICAgY29uc29sZS5sb2coXCJzdWJzY3JpYmluZyB0b1wiICsgc3ByaW50UmVwbGFuQ2hhbm5lbFRvU3Vic2NyaWJlSW50byk7XHJcbiAgICBjb25zb2xlLmxvZyhcInN1YnNjcmliaW5nIHRvXCIgKyBSZW1pbmRlckNoYW5uZWxUb1N1YnNjcmliZUludG8pO1xyXG4gICAgY29uc29sZS5sb2coXCJzdWJzY3JpYmluZyB0b1wiICsgUGVyZm9ybWFuY2VDaGFubmVsVG9TdWJzY3JpYmVJbnRvKTtcclxuICAgIGNvbnNvbGUubG9nKFwic3Vic2NyaWJpbmcgdG9cIiArIHByb2plY3RGZWF0dXJlQ2hhbm5lbFRvU3Vic2NyaWJlSW50byk7XHJcbiAgICBjb25zb2xlLmxvZyhcInN1YnNjcmliaW5nIHRvXCIgKyB1c2VyU3RvcnlBcmNoaXZlQ2hhbm5lbFRvU3Vic2NyaWJlSW50byk7XHJcbiAgICBjb25zb2xlLmxvZyhcInN1YnNjcmliaW5nIHRvXCIgKyB1c2VyU3RvcnlQYXJrQ2hhbm5lbFRvU3Vic2NyaWJlSW50byk7XHJcbiAgICBjb25zb2xlLmxvZyhcInN1YnNjcmliaW5nIHRvXCIgKyBnZW5lcmljQWN0aXZpdHlOb3RpZmljYXRpb25DaGFubmVsVG9TdWJzY3JpYmVJbnRvKTtcclxuICAgIGNvbnNvbGUubG9nKFwic3Vic2NyaWJpbmcgdG9cIiArIHB1cmNoYXNlRXhlY3V0aW9uQXNzaWduZWRDaGFubmVsVG9TdWJzY3JpYmVJbnRvKTtcclxuXHJcblxyXG4gICAgdGhpcy5wdWJudWIuc3Vic2NyaWJlKHtcclxuICAgICAgY2hhbm5lbHM6IFt0YXNrQXNzaWdubWVudENoYW5uZWxUb1N1YnNjcmliZUludG8sIHRhc3RhdHVzUmVwb3J0U3VibWlzc2lvbkNoYW5uZWxUb1N1YnNjcmliZUludG8sXHJcbiAgICAgICAgdGFzdGF0dXNDb25maWdBc3NpZ25DaGFubmVsVG9TdWJzY3JpYmVJbnRvLCBtdWx0aUNoYXJ0c1NjaGVkdWxpbmdDaGFubmVsVG9TdWJzY3JpYmVJbnRvLFxyXG4gICAgICAgIGFzc2V0c0Fzc2lnbmVkQ2hhbm5lbFRvU3Vic2NyaWJlSW50bywgcHJvamVjdENyZWF0ZWRDaGFubmVsVG9TdWJzY3JpYmVJbnRvLCAsXHJcbiAgICAgICAgcHJvamVjdEFjY2Vzc1RvTWVtYmVyQ2hhbm5lbFRvU3Vic2NyaWJlSW50bywgZ29hbEFwcHJvdmVkQ2hhbm5lbFRvU3Vic2NyaWJlSW50byxcclxuICAgICAgICB1c2VyU3RvcnlVcGRhdGVDaGFubmVsVG9TdWJzY3JpYmVJbnRvLCBBbm5vdW5jZW1lbnRDaGFubmVsVG9TdWJzY3JpYmVJbnRvLCBSZW1pbmRlckNoYW5uZWxUb1N1YnNjcmliZUludG8sXHJcbiAgICAgICAgdXNlclN0b3J5Q29tbWVudENoYW5uZWxUb1N1YnNjcmliZUludG8sIHNwcmludFN0YXJ0ZWRDaGFubmVsVG9TdWJzY3JpYmVJbnRvLFxyXG4gICAgICAgIHNwcmludFJlcGxhbkNoYW5uZWxUb1N1YnNjcmliZUludG8sXHJcbiAgICAgICAgUGVyZm9ybWFuY2VDaGFubmVsVG9TdWJzY3JpYmVJbnRvLFxyXG4gICAgICAgIHByb2plY3RGZWF0dXJlQ2hhbm5lbFRvU3Vic2NyaWJlSW50byxcclxuICAgICAgICB1c2VyU3RvcnlBcmNoaXZlQ2hhbm5lbFRvU3Vic2NyaWJlSW50byxcclxuICAgICAgICB1c2VyU3RvcnlQYXJrQ2hhbm5lbFRvU3Vic2NyaWJlSW50bywgZ2VuZXJpY0FjdGl2aXR5Tm90aWZpY2F0aW9uQ2hhbm5lbFRvU3Vic2NyaWJlSW50bywgcHVyY2hhc2VFeGVjdXRpb25Bc3NpZ25lZENoYW5uZWxUb1N1YnNjcmliZUludG9dXHJcbiAgICB9KTtcclxuICAgIHZhciByb2xlVXBkYXRlc0NoYW5uZWxUb1N1YnNjcmliZUludG8gPSBDaGFubmVsTmFtZXMuQ2hhbm5lbF9Sb2xlVXBkYXRlcyArIFwiMTlCNkY5RkMtNzM3MC00QjlDLUEwNUMtM0I4RDgxOUVFRUFGXCI7XHJcbiAgICBjb25zb2xlLmxvZyhcInN1YnNjcmliaW5nIHRvIFwiICsgcm9sZVVwZGF0ZXNDaGFubmVsVG9TdWJzY3JpYmVJbnRvKTtcclxuICAgIHRoaXMucHVibnViLnN1YnNjcmliZSh7XHJcbiAgICAgIGNoYW5uZWxzOiBbcm9sZVVwZGF0ZXNDaGFubmVsVG9TdWJzY3JpYmVJbnRvXVxyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuXHJcbiAgcmVwbGFjZUFsbChzdHIsIGZpbmQsIHJlcGxhY2UpIHtcclxuICAgIHZhciBlc2NhcGVkRmluZCA9IGZpbmQucmVwbGFjZSgvKFsuKis/Xj0hOiR7fSgpfFxcW1xcXVxcL1xcXFxdKS9nLCBcIlxcXFwkMVwiKTtcclxuICAgIHJldHVybiBzdHIucmVwbGFjZShuZXcgUmVnRXhwKGVzY2FwZWRGaW5kLCAnZycpLCByZXBsYWNlKTtcclxuICB9XHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnNpZ25hbHIuZ2V0Tm90aWZpY2F0aW9uc0Zyb21BcGkoKS5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuZ2V0U29mdExhYmVscygpO1xyXG4gICAgaWYgKHRoaXMuY29va2llU2VydmljZS5jaGVjayhMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkRpc3BsYXlXZWxDb21lTm90ZSkgJiYgdGhpcy5jb29raWVTZXJ2aWNlLmdldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkRpc3BsYXlXZWxDb21lTm90ZSkgPT0gJ3RydWUnKSB7XHJcbiAgICAgIGlmICgobG9jYWxTdG9yYWdlLmdldEl0ZW0oTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Vc2VyTW9kZWwpICE9IG51bGwgJiYgbG9jYWxTdG9yYWdlLmdldEl0ZW0oTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Vc2VyTW9kZWwpICE9IHVuZGVmaW5lZClcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy51c2VyRnVsbE5hbWUgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKExvY2FsU3RvcmFnZVByb3BlcnRpZXMuVXNlck1vZGVsKSkuZnVsbE5hbWU7XHJcbiAgICAgIH1cclxuICAgICAgdmFyIGNvdW50ID0gdGhpcy5jb29raWVTZXJ2aWNlLmNoZWNrKExvY2FsU3RvcmFnZVByb3BlcnRpZXMuVXNlckxvZ2dlZEluQ291bnQpO1xyXG4gICAgICBpZiAoY291bnQgJiYgdGhpcy5jb29raWVTZXJ2aWNlLmdldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLlVzZXJMb2dnZWRJbkNvdW50KSAhPSAnbnVsbCdcclxuICAgICAgICAmJiB0aGlzLmNvb2tpZVNlcnZpY2UuZ2V0KExvY2FsU3RvcmFnZVByb3BlcnRpZXMuVXNlckxvZ2dlZEluQ291bnQpICE9ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgdGhpcy5sb2dnZWRJbkNvdW50ID0gdGhpcy5jb29raWVTZXJ2aWNlLmdldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLlVzZXJMb2dnZWRJbkNvdW50KTtcclxuICAgICAgICBpZiAodGhpcy5sb2dnZWRJbkNvdW50ID09ICcxJyB8fCB0aGlzLmxvZ2dlZEluQ291bnQgPT0gJzInKSB7XHJcbiAgICAgICAgICB0aGlzLmRpc3BsYXlXZWxjb21lTm90ZSA9IHRydWU7XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5kaXNwbGF5V2VsY29tZU5vdGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgbGV0IGVudmlyb25tZW50ID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkVudmlyb25tZW50KSk7XHJcbiAgICAgICAgICAgIHRoaXMuY29va2llU2VydmljZS5zZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5EaXNwbGF5V2VsQ29tZU5vdGUsICdmYWxzZScsIG51bGwsIGVudmlyb25tZW50LmNvb2tpZVBhdGgsIHRoaXMud2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLCBmYWxzZSwgXCJTdHJpY3RcIik7XHJcbiAgICAgICAgICB9LCA4MDAwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGxldCBjdXJyZW50Q3VsdHVyZSA9IHRoaXMuY29va2llU2VydmljZS5nZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5DdXJyZW50Q3VsdHVyZSk7XHJcbiAgICBjb25zdCBjb21wYW55bGFuID0gSlNPTi5wYXJzZSh0aGlzLmNvb2tpZVNlcnZpY2UuZ2V0KExvY2FsU3RvcmFnZVByb3BlcnRpZXMuQ29tcGFueURldGFpbHMpKTtcclxuICAgIGxldCBjdXJyZW50Q3VsdHVyZWxhbiA9IGNvbXBhbnlsYW4ubGFuQ29kZTtcclxuXHJcbiAgICBpZiAoY3VycmVudEN1bHR1cmUgPT0gJycgfHwgY3VycmVudEN1bHR1cmUgPT0gbnVsbCB8fCBjdXJyZW50Q3VsdHVyZSA9PSB1bmRlZmluZWQgfHwgY3VycmVudEN1bHR1cmUgPT09ICdudWxsJyB8fCBjdXJyZW50Q3VsdHVyZSA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgaWYgKGN1cnJlbnRDdWx0dXJlbGFuID09ICcnIHx8IGN1cnJlbnRDdWx0dXJlbGFuID09IG51bGwgfHwgY3VycmVudEN1bHR1cmVsYW4gPT0gdW5kZWZpbmVkIHx8IGN1cnJlbnRDdWx0dXJlbGFuID09PSAnbnVsbCcgfHwgY3VycmVudEN1bHR1cmVsYW4gPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgY3VycmVudEN1bHR1cmUgPSAnZW4nO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGN1cnJlbnRDdWx0dXJlID0gY3VycmVudEN1bHR1cmVsYW47XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuY3VycmVudExhbmcgPSBjdXJyZW50Q3VsdHVyZTtcclxuICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICB0aGlzLmxvYWRpbmdJblByb2dyZXNzJCA9IHRoaXMuc3RvcmUucGlwZShzZWxlY3Qoc2hhcmVkTW9kdWxlUmVkdWNlcnMuaXNUaW1lU2hlZXRGZXRjaGluZykpO1xyXG4gICAgdGhpcy50aW1lU2hlZXRCdXR0b25EZXRhaWxzJCA9IHRoaXMuc3RvcmUucGlwZShzZWxlY3Qoc2hhcmVkTW9kdWxlUmVkdWNlcnMuZ2V0VGltZVNoZXR0QnV0dG9uRGV0YWlscykpO1xyXG4gICAgdGhpcy50aW1lU2hlZXRCdXR0b25EZXRhaWxzJFxyXG4gICAgICAuc3Vic2NyaWJlKGRhdGEgPT4ge1xyXG4gICAgICAgIHRoaXMudGltZXNoZWV0RGlzYWJsZW9yRW5hYmxlID0gZGF0YTtcclxuICAgICAgfSlcclxuICAgIC8vdGhpcy5nZXRUaW1lU2hlZXRCdXR0b25zKCk7XHJcbiAgICAvL3RoaXMuZ2V0VXNlclN0b3JlKCk7XHJcbiAgICB0aGlzLnNob3dUcmFpbFBlcmlvZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5lZ3JldFRoZW1lcyA9IHRoaXMudGhlbWVTZXJ2aWNlLmVncmV0VGhlbWVzO1xyXG4gICAgdGhpcy5sYXlvdXRDb25mID0gdGhpcy5sYXlvdXQubGF5b3V0Q29uZjtcclxuXHJcbiAgICAvLyB0aGlzLnRoZW1lTW9kZWwkID0gdGhpcy5zdG9yZS5waXBlKHNlbGVjdChzaGFyZWRNb2R1bGVSZWR1Y2Vycy5nZXRUaGVtZU1vZGVsKSk7XHJcbiAgICAvL3RoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IEluaXRpYWxpemVBZnRlckxvZ2luRGF0YSgpKTtcclxuICAgIHZhciB1c2VyID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLlVzZXJNb2RlbCkpO1xyXG4gICAgaWYgKHVzZXIgIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLm1vbml0b3JDb21wYW55cmVsYXRlZERldGFpbHModXNlcik7XHJcbiAgICB9XHJcbiAgICB0aGlzLmxvZ2dlZEluVXNlcklkID0gdGhpcy5jb29raWVTZXJ2aWNlLmdldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkN1cnJlbnRVc2VySWQpO1xyXG4gICAgdGhpcy5nZXRFbXBsb3llZUlkQnlVc2VySWQoKTtcclxuICAgIGxldCBlbnZpcm9ubWVudCA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oTG9jYWxTdG9yYWdlUHJvcGVydGllcy5FbnZpcm9ubWVudCkpO1xyXG4gICAgdGhpcy5hcHBsaWNhdGlvblZlcnNpb24gPSBlbnZpcm9ubWVudC52ZXJzaW9uO1xyXG4gICAgdGhpcy5tZW51VHlwZSA9IFwiTWFpblwiO1xyXG4gICAgdGhpcy5zZWxlY3RlZExhbmdOYW1lID0gdGhpcy5hdmFpbGFibGVMYW5ncy5maW5kKHggPT4geC5jb2RlID09IHRoaXMuY3VycmVudExhbmcpLm5hbWU7XHJcbiAgICB0aGlzLnVzZXJTdG9yZUlkJCA9IHRoaXMuc3RvcmUucGlwZShzZWxlY3Qoc2hhcmVkTW9kdWxlUmVkdWNlcnMuZ2V0VXNlclN0b3JlSWQpKTtcclxuICAgIHRoaXMudXNlclN0b3JlSWQkLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICB0aGlzLnVzZXJTdG9yZUlkID0gcmVzdWx0O1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHNob3dIaWRlRGVsZXRlQnV0dG9uKGRhdGEpIHtcclxuICAgIHRoaXMuc2hvd0RlbGV0ZUljb24gPSBkYXRhLmlzRGVtb0RhdGFDbGVhcmVkID8gZmFsc2UgOiBkYXRhLmlzVG9TaG93RGVsZXRlSWNvbjtcclxuICB9XHJcblxyXG4gIG1vbml0b3JDb21wYW55cmVsYXRlZERldGFpbHModXNlcikge1xyXG4gICAgdGhpcy5hdXRoZW50aWNhdGVkVXNlclJlY29yZCA9IHVzZXI7XHJcbiAgICB0aGlzLnNob3dIaWRlRGVsZXRlQnV0dG9uKHVzZXIpO1xyXG4gICAgdGhpcy5jb21wYW5pZXNMaXN0ID0gdXNlci5jb21wYW5pZXNMaXN0O1xyXG4gICAgdGhpcy5nZXRDb21wYW55RGV0YWlscyh1c2VyLmNvbXBhbnlJZCk7XHJcbiAgICB2YXIgY29tcGFueSA9IHRoaXMuY29tcGFuaWVzTGlzdC5maWx0ZXIoeCA9PiB4LmNvbXBhbnlJZC50b0xvd2VyQ2FzZSgpID09IHRoaXMuY29va2llU2VydmljZS5nZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Db21wYW55SWQpLnRvTG93ZXJDYXNlKCkpXHJcbiAgICB0aGlzLnNlbGVjdGVkQ29tcGFueSA9IGNvbXBhbnkgPyBjb21wYW55WzBdIDogbnVsbDtcclxuICAgIHRoaXMuc2VsZWN0ZWRDb21wYW55TmFtZSA9IGNvbXBhbnkgPyBjb21wYW55WzBdID8gY29tcGFueVswXS5jb21wYW55TmFtZSA6IG51bGwgOiBudWxsO1xyXG4gIH1cclxuXHJcbiAgbmF2aWdhdGVUb0Rhc2hib2FyZHMoKSB7XHJcbiAgICBjb25zdCB1c2VyUmVmZXJlbmNlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Vc2VyUmVmZXJlbmNlSWQpO1xyXG4gICAgdGhpcy5kZWZhdWx0RGFzaGJvYXJkSWQgPSB0aGlzLmNvb2tpZVNlcnZpY2UuY2hlY2soTG9jYWxTdG9yYWdlUHJvcGVydGllcy5EZWZhdWx0RGFzaGJvYXJkKSA/IEpTT04ucGFyc2UodGhpcy5jb29raWVTZXJ2aWNlLmdldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkRlZmF1bHREYXNoYm9hcmQpKSA6IG51bGw7XHJcbiAgICBpZiAodGhpcy5kZWZhdWx0RGFzaGJvYXJkSWQgJiYgdXNlclJlZmVyZW5jZSAhPSBcIm51bGxcIiAmJiB1c2VyUmVmZXJlbmNlICE9IG51bGwpIHtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChcImRhc2hib2FyZC1tYW5hZ2VtZW50L2Rhc2hib2FyZC9cIiArIHRoaXMuZGVmYXVsdERhc2hib2FyZElkICsgXCIvZm9ybS9cIiArIHVzZXJSZWZlcmVuY2UpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmRlZmF1bHREYXNoYm9hcmRJZCkge1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKFwiZGFzaGJvYXJkLW1hbmFnZW1lbnQvZGFzaGJvYXJkL1wiICsgdGhpcy5kZWZhdWx0RGFzaGJvYXJkSWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNPcGVuZWQoZXZlbnQpIHtcclxuICAgIHRoaXMub3BlbmVkLmVtaXQoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgZ2V0U29mdExhYmVscygpIHtcclxuICAgIHRoaXMuc29mdExhYmVscyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ1NvZnRMYWJlbHMnKSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBvblNpZ25vdXQoKSB7XHJcbiAgICB0aGlzLnJlbG9hZCA9IGZhbHNlO1xyXG4gICAgY29uc3QgQ3VycmVudFVzZXJJZCA9IHRoaXMuY29va2llU2VydmljZS5nZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5DdXJyZW50VXNlcklkKTtcclxuICAgIGNvbnN0IHRhc2tBc3NpZ25tZW50Q2hhbm5lbFRvU3Vic2NyaWJlSW50byA9IENoYW5uZWxOYW1lcy5DaGFubmVsX1Rhc2tBc3NpZ25tZW50c1xyXG4gICAgICArIHRoaXMuY29va2llU2VydmljZS5nZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5DdXJyZW50VXNlcklkKTtcclxuICAgIGNvbnN0IHRhc3RhdHVzUmVwb3J0U3VibWlzc2lvbkNoYW5uZWxUb1N1YnNjcmliZUludG8gPSBDaGFubmVsTmFtZXMuQ2hhbm5lbF9TdGF0dXNSZXBvcnRTdWJtaXNzaW9uXHJcbiAgICAgICsgdGhpcy5jb29raWVTZXJ2aWNlLmdldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkN1cnJlbnRVc2VySWQpO1xyXG4gICAgY29uc3QgdGFzdGF0dXNDb25maWdBc3NpZ25DaGFubmVsVG9TdWJzY3JpYmVJbnRvID0gQ2hhbm5lbE5hbWVzLkNoYW5uZWxfU3RhdHVzQ29uZmlnQXNzaWduXHJcbiAgICAgICsgdGhpcy5jb29raWVTZXJ2aWNlLmdldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkN1cnJlbnRVc2VySWQpO1xyXG4gICAgY29uc3QgbXVsdGlDaGFydHNTY2hlZHVsaW5nQ2hhbm5lbFRvU3Vic2NyaWJlSW50byA9IENoYW5uZWxOYW1lcy5DaGFubmVsX011bHRpQ2hhcnRzU2NoZWR1bGluZyArIEN1cnJlbnRVc2VySWQ7XHJcbiAgICBjb25zdCBhc3NldHNBc3NpZ25lZENoYW5uZWxUb1N1YnNjcmliZUludG8gPSBDaGFubmVsTmFtZXMuQ2hhbm5lbF9Bc3NldEFzc2lnbm1lbnQgKyBDdXJyZW50VXNlcklkO1xyXG4gICAgY29uc3QgcHJvamVjdENyZWF0ZWRDaGFubmVsVG9TdWJzY3JpYmVJbnRvID0gQ2hhbm5lbE5hbWVzLkNoYW5uZWxfTmV3UHJvamVjdCArIEN1cnJlbnRVc2VySWQ7XHJcbiAgICBjb25zdCBwcm9qZWN0QWNjZXNzVG9NZW1iZXJDaGFubmVsVG9TdWJzY3JpYmVJbnRvID0gQ2hhbm5lbE5hbWVzLkNoYW5uZWxfUHJvamVjdE1lbWJlclJvbGUgKyBDdXJyZW50VXNlcklkO1xyXG4gICAgY29uc3QgZ29hbEFwcHJvdmVkQ2hhbm5lbFRvU3Vic2NyaWJlSW50byA9IENoYW5uZWxOYW1lcy5DaGFubmVsX0dvYWxBcHByb3ZlZEZyb21SZXBsYW4gKyBDdXJyZW50VXNlcklkO1xyXG4gICAgY29uc3QgdXNlclN0b3J5VXBkYXRlQ2hhbm5lbFRvU3Vic2NyaWJlSW50byA9IENoYW5uZWxOYW1lcy5DaGFubmVsX1VzZXJTdG9yeVVwZGF0ZU5vdGlmaWNhdGlvbiArIEN1cnJlbnRVc2VySWQ7XHJcbiAgICBjb25zdCBBbm5vdW5jZW1lbnRDaGFubmVsVG9TdWJzY3JpYmVJbnRvID0gQ2hhbm5lbE5hbWVzLkNoYW5uZWxfQW5ub3VuY2VtZW50Tm90aWZpY2F0aW9uICsgQ3VycmVudFVzZXJJZDtcclxuICAgIGNvbnN0IHVzZXJTdG9yeUNvbW1lbnRDaGFubmVsVG9TdWJzY3JpYmVJbnRvID0gQ2hhbm5lbE5hbWVzLkNoYW5uZWxfVXNlclN0b3J5Q29tbWVudCArIEN1cnJlbnRVc2VySWQ7XHJcbiAgICBjb25zdCBzcHJpbnRTdGFydGVkQ2hhbm5lbFRvU3Vic2NyaWJlSW50byA9IENoYW5uZWxOYW1lcy5DaGFubmVsX1NwcmludFN0YXJ0ZWQgKyBDdXJyZW50VXNlcklkO1xyXG4gICAgY29uc3Qgc3ByaW50UmVwbGFuQ2hhbm5lbFRvU3Vic2NyaWJlSW50byA9IENoYW5uZWxOYW1lcy5DaGFubmVsX1NwcmludFJlcXVlc3RlZFRvUmVwbGFuICsgQ3VycmVudFVzZXJJZDtcclxuICAgIGNvbnN0IFBlcmZvcm1hbmNlQ2hhbm5lbFRvU3Vic2NyaWJlSW50byA9IENoYW5uZWxOYW1lcy5DaGFubmVsX1Blcm9mb3JtYW5jZU5vdGlmaWNhdGlvbiArIEN1cnJlbnRVc2VySWQ7XHJcbiAgICBjb25zdCBSZW1pbmRlckNoYW5uZWxUb1N1YnNjcmliZUludG8gPSBDaGFubmVsTmFtZXMuQ2hhbm5lbF9SZW1pbmRlck5vdGlmaWNhdGlvbiArIEN1cnJlbnRVc2VySWQ7XHJcbiAgICBjb25zdCBwcm9qZWN0RmVhdHVyZUNoYW5uZWxUb1N1YnNjcmliZUludG8gPSBDaGFubmVsTmFtZXMuQ2hhbm5lbF9Qcm9qZWN0RmVhdHVyZSArIEN1cnJlbnRVc2VySWQ7XHJcbiAgICBjb25zdCB1c2VyU3RvcnlBcmNoaXZlQ2hhbm5lbFRvU3Vic2NyaWJlSW50byA9IENoYW5uZWxOYW1lcy5DaGFubmVsX1VzZXJTdG9yeUFyY2hpdmUgKyBDdXJyZW50VXNlcklkO1xyXG4gICAgY29uc3QgdXNlclN0b3J5UGFya0NoYW5uZWxUb1N1YnNjcmliZUludG8gPSBDaGFubmVsTmFtZXMuQ2hhbm5lbF9Vc2VyU3RvcnlQYXJrICsgQ3VycmVudFVzZXJJZDtcclxuICAgIGNvbnN0IGdlbmVyaWNBY3Rpdml0eU5vdGlmaWNhdGlvbkNoYW5uZWxUb1N1YnNjcmliZUludG8gPSBDaGFubmVsTmFtZXMuQ2hhbm5lbF9HZW5lcmljQWN0aXZpdHlOb3RpZmljYXRpb24gKyBDdXJyZW50VXNlcklkO1xyXG4gICAgY29uc3QgcHVyY2hhc2VFeGVjdXRpb25Bc3NpZ25lZENoYW5uZWxUb1N1YnNjcmliZUludG8gPSBDaGFubmVsTmFtZXMuQ2hhbm5lbF9QdXJjaGFzZUV4ZWN1dGlvbkFzc2lnblRvRW1wbG95ZWVOb3RpZmljYXRpb24gKyBDdXJyZW50VXNlcklkO1xyXG5cclxuICAgIHRoaXMucHVibnViLnVuc3Vic2NyaWJlKHsgY2hhbm5lbHM6IFt0YXNrQXNzaWdubWVudENoYW5uZWxUb1N1YnNjcmliZUludG9dIH0pO1xyXG4gICAgdGhpcy5wdWJudWIudW5zdWJzY3JpYmUoeyBjaGFubmVsczogW3Rhc3RhdHVzUmVwb3J0U3VibWlzc2lvbkNoYW5uZWxUb1N1YnNjcmliZUludG9dIH0pO1xyXG4gICAgdGhpcy5wdWJudWIudW5zdWJzY3JpYmUoeyBjaGFubmVsczogW3Rhc3RhdHVzQ29uZmlnQXNzaWduQ2hhbm5lbFRvU3Vic2NyaWJlSW50b10gfSk7XHJcbiAgICB0aGlzLnB1Ym51Yi51bnN1YnNjcmliZSh7IGNoYW5uZWxzOiBbbXVsdGlDaGFydHNTY2hlZHVsaW5nQ2hhbm5lbFRvU3Vic2NyaWJlSW50b10gfSk7XHJcbiAgICB0aGlzLnB1Ym51Yi51bnN1YnNjcmliZSh7IGNoYW5uZWxzOiBbYXNzZXRzQXNzaWduZWRDaGFubmVsVG9TdWJzY3JpYmVJbnRvXSB9KTtcclxuICAgIHRoaXMucHVibnViLnVuc3Vic2NyaWJlKHsgY2hhbm5lbHM6IFtwcm9qZWN0Q3JlYXRlZENoYW5uZWxUb1N1YnNjcmliZUludG9dIH0pO1xyXG4gICAgdGhpcy5wdWJudWIudW5zdWJzY3JpYmUoeyBjaGFubmVsczogW3Byb2plY3RBY2Nlc3NUb01lbWJlckNoYW5uZWxUb1N1YnNjcmliZUludG9dIH0pO1xyXG4gICAgdGhpcy5wdWJudWIudW5zdWJzY3JpYmUoeyBjaGFubmVsczogW2dvYWxBcHByb3ZlZENoYW5uZWxUb1N1YnNjcmliZUludG9dIH0pO1xyXG4gICAgdGhpcy5wdWJudWIudW5zdWJzY3JpYmUoeyBjaGFubmVsczogW3VzZXJTdG9yeVVwZGF0ZUNoYW5uZWxUb1N1YnNjcmliZUludG9dIH0pO1xyXG4gICAgdGhpcy5wdWJudWIudW5zdWJzY3JpYmUoeyBjaGFubmVsczogW0Fubm91bmNlbWVudENoYW5uZWxUb1N1YnNjcmliZUludG9dIH0pO1xyXG4gICAgdGhpcy5wdWJudWIudW5zdWJzY3JpYmUoeyBjaGFubmVsczogW3VzZXJTdG9yeUNvbW1lbnRDaGFubmVsVG9TdWJzY3JpYmVJbnRvXSB9KTtcclxuICAgIHRoaXMucHVibnViLnVuc3Vic2NyaWJlKHsgY2hhbm5lbHM6IFtzcHJpbnRTdGFydGVkQ2hhbm5lbFRvU3Vic2NyaWJlSW50b10gfSk7XHJcbiAgICB0aGlzLnB1Ym51Yi51bnN1YnNjcmliZSh7IGNoYW5uZWxzOiBbc3ByaW50UmVwbGFuQ2hhbm5lbFRvU3Vic2NyaWJlSW50b10gfSk7XHJcbiAgICB0aGlzLnB1Ym51Yi51bnN1YnNjcmliZSh7IGNoYW5uZWxzOiBbUGVyZm9ybWFuY2VDaGFubmVsVG9TdWJzY3JpYmVJbnRvXSB9KTtcclxuICAgIHRoaXMucHVibnViLnVuc3Vic2NyaWJlKHsgY2hhbm5lbHM6IFtSZW1pbmRlckNoYW5uZWxUb1N1YnNjcmliZUludG9dIH0pO1xyXG4gICAgdGhpcy5wdWJudWIudW5zdWJzY3JpYmUoeyBjaGFubmVsczogW3Byb2plY3RGZWF0dXJlQ2hhbm5lbFRvU3Vic2NyaWJlSW50b10gfSk7XHJcbiAgICB0aGlzLnB1Ym51Yi51bnN1YnNjcmliZSh7IGNoYW5uZWxzOiBbdXNlclN0b3J5QXJjaGl2ZUNoYW5uZWxUb1N1YnNjcmliZUludG9dIH0pO1xyXG4gICAgdGhpcy5wdWJudWIudW5zdWJzY3JpYmUoeyBjaGFubmVsczogW3VzZXJTdG9yeVBhcmtDaGFubmVsVG9TdWJzY3JpYmVJbnRvXSB9KTtcclxuICAgIHRoaXMucHVibnViLnVuc3Vic2NyaWJlKHsgY2hhbm5lbHM6IFtwdXJjaGFzZUV4ZWN1dGlvbkFzc2lnbmVkQ2hhbm5lbFRvU3Vic2NyaWJlSW50b10gfSk7XHJcbiAgICB0aGlzLnB1Ym51Yi51bnN1YnNjcmliZSh7IGNoYW5uZWxzOiBbdGhpcy5sb2dpblVzZXJjaGFubmVsTmFtZV0gfSk7XHJcbiAgICAvLyB2YXIgbG9naW5Db21wYW55SWQgPSB0aGlzLmNvb2tpZVNlcnZpY2UuZ2V0KFwiQ29tcGFueUlkXCIpO1xyXG4gICAgLy8gdmFyIHByZXNlbmNlQ2hhbm5lbCA9IFwiTWVzc2VuZ2VyUHJlc2VuY2UtXCIgKyBsb2dpbkNvbXBhbnlJZDtcclxuICAgIC8vIHRoaXMucHVibnViLnVuc3Vic2NyaWJlKHtcclxuICAgIC8vICAgY2hhbm5lbHM6IFtwcmVzZW5jZUNoYW5uZWxdLFxyXG4gICAgLy8gfSk7XHJcbiAgICAvLyBpZiAodGhpcy5jaGFubmVsTGlzdCAhPSB1bmRlZmluZWQgfHwgdGhpcy5jaGFubmVsTGlzdCAhPSBudWxsKSB7XHJcbiAgICAvLyAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLmNoYW5uZWxMaXN0Lmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgLy8gICAgIHRoaXMucHVibnViLnVuc3Vic2NyaWJlKHtcclxuICAgIC8vICAgICAgIGNoYW5uZWxzOiBbKGxvZ2luQ29tcGFueUlkICsgJy0nICsgdGhpcy5jaGFubmVsTGlzdFtpbmRleF0uaWQpXVxyXG4gICAgLy8gICAgIH0pO1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyB9XHJcbiAgICAvLyB0aGlzLnB1Ym51Yi51bnN1YnNjcmliZSh7XHJcbiAgICAvLyAgIGNoYW5uZWxzOiBbKCdDaGFubmVsVXBkYXRlcy0nICsgbG9naW5Db21wYW55SWQpXVxyXG4gICAgLy8gfSk7XHJcbiAgICAvLyB0aGlzLnB1Ym51Yi51bnN1YnNjcmliZSh7XHJcbiAgICAvLyAgIGNoYW5uZWxzOiBbKCdVc2VyVXBkYXRlcy0nICsgbG9naW5Db21wYW55SWQpXVxyXG4gICAgLy8gfSk7XHJcbiAgICB0aGlzLnB1Ym51Yi51bnN1YnNjcmliZSh7IGNoYW5uZWxzOiBbZ2VuZXJpY0FjdGl2aXR5Tm90aWZpY2F0aW9uQ2hhbm5lbFRvU3Vic2NyaWJlSW50b10gfSk7XHJcbiAgICAvLyB0aGlzLnB1Ym51Yi51bnN1YnNjcmliZUFsbCgpO1xyXG4gICAgLy8gdGhpcy5wdWJudWIucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XHJcbiAgICBsZXQgZW52aXJvbm1lbnQgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKExvY2FsU3RvcmFnZVByb3BlcnRpZXMuRW52aXJvbm1lbnQpKTtcclxuICAgIGxldCBjb21wYW55TmFtZSA9IHRoaXMuY29va2llU2VydmljZS5nZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Db21wYW55RGV0YWlscyk7XHJcbiAgICBsZXQgY29tcGFueUlkID0gdGhpcy5jb29raWVTZXJ2aWNlLmdldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkNvbXBhbnlJZCk7XHJcblxyXG4gICAgbGV0IGNvbXBhbnlEZXRhaWxzID0gdGhpcy5jb29raWVTZXJ2aWNlLmdldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkNvbXBhbnlEZXRhaWxzKTtcclxuICAgIGxldCBjb21wYW55VGhlbWUgPSB0aGlzLmNvb2tpZVNlcnZpY2UuZ2V0KExvY2FsU3RvcmFnZVByb3BlcnRpZXMuQ29tcGFueVRoZW1lKTtcclxuICAgIGxldCBVc2VyTG9nZ2VkSW5Db3VudCA9IHRoaXMuY29va2llU2VydmljZS5nZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Vc2VyTG9nZ2VkSW5Db3VudCk7XHJcbiAgICBsZXQgY3VycmVudEN1bHR1cmUgPSB0aGlzLmNvb2tpZVNlcnZpY2UuZ2V0KExvY2FsU3RvcmFnZVByb3BlcnRpZXMuQ3VycmVudEN1bHR1cmUpO1xyXG4gICAgdGhpcy5jb29raWVTZXJ2aWNlLmRlbGV0ZUFsbChlbnZpcm9ubWVudC5jb29raWVQYXRoKTtcclxuICAgIHRoaXMuY29va2llU2VydmljZS5kZWxldGUoXCJzZWxlY3RlZFByb2plY3RzVGFiXCIpO1xyXG5cclxuXHJcbiAgICB0aGlzLmNvb2tpZVNlcnZpY2Uuc2V0KExvY2FsU3RvcmFnZVByb3BlcnRpZXMuVXNlckxvZ2dlZEluQ291bnQsIFVzZXJMb2dnZWRJbkNvdW50LCBudWxsLCBlbnZpcm9ubWVudC5jb29raWVQYXRoLCB0aGlzLndpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSwgZmFsc2UsIFwiU3RyaWN0XCIpO1xyXG4gICAgdGhpcy5jb29raWVTZXJ2aWNlLnNldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkN1cnJlbnRDdWx0dXJlLCBjdXJyZW50Q3VsdHVyZSwgbnVsbCwgZW52aXJvbm1lbnQuY29va2llUGF0aCwgdGhpcy53aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsIGZhbHNlLCBcIlN0cmljdFwiKTtcclxuICAgIHRoaXMuY29va2llU2VydmljZS5zZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5DdXJyZW50VXNlciwgbnVsbCwgbnVsbCwgZW52aXJvbm1lbnQuY29va2llUGF0aCwgdGhpcy53aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsIGZhbHNlLCBcIlN0cmljdFwiKTtcclxuICAgIHRoaXMuY29va2llU2VydmljZS5zZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5DdXJyZW50VXNlcklkLCBudWxsLCBudWxsLCBlbnZpcm9ubWVudC5jb29raWVQYXRoLCB0aGlzLndpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSwgZmFsc2UsIFwiU3RyaWN0XCIpO1xyXG4gICAgdGhpcy5jb29raWVTZXJ2aWNlLnNldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkNvbXBhbnlOYW1lLCBjb21wYW55TmFtZSwgbnVsbCwgZW52aXJvbm1lbnQuY29va2llUGF0aCwgdGhpcy53aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsIGZhbHNlLCBcIlN0cmljdFwiKTtcclxuICAgIHRoaXMuY29va2llU2VydmljZS5zZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Db21wYW55SWQsIGNvbXBhbnlJZCwgbnVsbCwgZW52aXJvbm1lbnQuY29va2llUGF0aCwgdGhpcy53aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsIGZhbHNlLCBcIlN0cmljdFwiKTtcclxuICAgIHRoaXMuY29va2llU2VydmljZS5zZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5EZWZhdWx0RGFzaGJvYXJkLCBudWxsLCBudWxsLCBlbnZpcm9ubWVudC5jb29raWVQYXRoLCB0aGlzLndpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSwgZmFsc2UsIFwiU3RyaWN0XCIpO1xyXG4gICAgdGhpcy5jb29raWVTZXJ2aWNlLnNldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkNvbXBhbnlEZXRhaWxzLCBjb21wYW55RGV0YWlscywgbnVsbCwgZW52aXJvbm1lbnQuY29va2llUGF0aCwgdGhpcy53aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsIGZhbHNlLCBcIlN0cmljdFwiKTtcclxuICAgIHRoaXMuY29va2llU2VydmljZS5zZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Db21wYW55VGhlbWUsIGNvbXBhbnlUaGVtZSwgbnVsbCwgZW52aXJvbm1lbnQuY29va2llUGF0aCwgdGhpcy53aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsIGZhbHNlLCBcIlN0cmljdFwiKTtcclxuICAgIHRoaXMuY29va2llU2VydmljZS5zZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5TZWFyY2hDbGljaywgbnVsbCwgbnVsbCwgZW52aXJvbm1lbnQuY29va2llUGF0aCwgdGhpcy53aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsIGZhbHNlLCBcIlN0cmljdFwiKTtcclxuICAgIHRoaXMuY29va2llU2VydmljZS5zZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Vc2VyTW9kZWwsIG51bGwsIG51bGwsIGVudmlyb25tZW50LmNvb2tpZVBhdGgsIHRoaXMud2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLCBmYWxzZSwgXCJTdHJpY3RcIik7XHJcbiAgICB0aGlzLmNvb2tpZVNlcnZpY2Uuc2V0KExvY2FsU3RvcmFnZVByb3BlcnRpZXMuRW5hYmxlVGVhbURhc2hib2FyZCwgbnVsbCwgbnVsbCwgZW52aXJvbm1lbnQuY29va2llUGF0aCwgdGhpcy53aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsIGZhbHNlLCBcIlN0cmljdFwiKTtcclxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKExvY2FsU3RvcmFnZVByb3BlcnRpZXMuRGFzaGJvYXJkcywgbnVsbCk7XHJcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLlVzZXJSZWZlcmVuY2VJZCwgbnVsbCk7XHJcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLlJvbGVGZWF0dXJlcywgbnVsbCk7XHJcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLlVzZXJSb2xlRmVhdHVyZXMpO1xyXG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oTG9jYWxTdG9yYWdlUHJvcGVydGllcy5SZWRpcmVjdGlvblVybCk7XHJcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLlNpZGVCYXJNZW51SXRlbXMpO1xyXG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oTG9jYWxTdG9yYWdlUHJvcGVydGllcy5JbnRyb01vZHVsZXMpO1xyXG4gICAgdGhpcy5jb29raWVTZXJ2aWNlLnNldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkFkZE9yRWRpdEN1c3RvbUFwcElzUmVxdWlyZWQsIG51bGwsIG51bGwsIGVudmlyb25tZW50LmNvb2tpZVBhdGgsIHRoaXMud2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLCBmYWxzZSwgXCJTdHJpY3RcIik7XHJcblxyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW1wiL3Nlc3Npb25zL3NpZ25pblwiXSk7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBzZXRMYW5nKCkge1xyXG4gICAgdGhpcy50cmFuc2xhdGUudXNlKHRoaXMuY3VycmVudExhbmcpO1xyXG4gICAgY29uc29sZS5sb2codGhpcy53aW5kb3cubG9jYXRpb24uaG9zdG5hbWUpO1xyXG4gICAgbGV0IGVudmlyb25tZW50ID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkVudmlyb25tZW50KSk7XHJcbiAgICB0aGlzLmNvb2tpZVNlcnZpY2Uuc2V0KExvY2FsU3RvcmFnZVByb3BlcnRpZXMuQ3VycmVudEN1bHR1cmUsIHRoaXMuY3VycmVudExhbmcsIG51bGwsIGVudmlyb25tZW50LmNvb2tpZVBhdGgsIHRoaXMud2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLCBmYWxzZSwgXCJTdHJpY3RcIik7XHJcbiAgICB0aGlzLnNlbGVjdGVkTGFuZ05hbWUgPSB0aGlzLmF2YWlsYWJsZUxhbmdzLmZpbmQoeCA9PiB4LmNvZGUgPT0gdGhpcy5jdXJyZW50TGFuZykubmFtZTtcclxuICB9XHJcblxyXG4gIGNoYW5nZVRoZW1lKHRoZW1lKSB7XHJcbiAgICB0aGlzLnRoZW1lU2VydmljZS5jaGFuZ2VUaGVtZSh0aGVtZSk7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVOb3RpZmljKCkge1xyXG4gICAgLy8gdGhpcy5nZXRVbnJlYWROb3RpZmljYXRpb25zKCk7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVSZWNvcmRpbmcoKSB7XHJcbiAgICB0aGlzLmdldEFjdFRyYWNrZXJSZWNvcmRlcigpO1xyXG4gICAgdmFyIHVzZXIgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKExvY2FsU3RvcmFnZVByb3BlcnRpZXMuVXNlck1vZGVsKSk7XHJcbiAgICBpZiAodXNlciAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMubW9uaXRvckNvbXBhbnlyZWxhdGVkRGV0YWlscyh1c2VyKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldE5vdGlmaWNhdGlvbnMoKSB7XHJcbiAgICBjb25zdCBub3RpZmljYXRpb25TZWFyY2hNb2RlbCA9IG5ldyBBcHBOb3RpZmljYXRpb24oKTtcclxuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IENsZWFyQWxsVW5yZWFkTm90aWZpY2F0aW9uc1RyaWdnZXJlZChub3RpZmljYXRpb25TZWFyY2hNb2RlbCkpO1xyXG4gICAgdGhpcy51bnJlYWRDb3VudE9mTm90aWZpY2F0aW9ucyQgPSB0aGlzLnN0b3JlLnBpcGUoc2VsZWN0KHNoYXJlZE1vZHVsZVJlZHVjZXJzLmdldE5vdGlmaWNhdGlvblVucmVhZFRvdGFsKSk7XHJcbiAgfVxyXG5cclxuICBnZXRVbnJlYWROb3RpZmljYXRpb25zKCkge1xyXG4gICAgY29uc3Qgbm90aWZpY2F0aW9uU2VhcmNoTW9kZWwgPSBuZXcgQXBwTm90aWZpY2F0aW9uKCk7XHJcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBDbGVhclVucmVhZE5vdGlmaWNhdGlvbnNUcmlnZ2VyZWQobm90aWZpY2F0aW9uU2VhcmNoTW9kZWwpKTtcclxuICAgIHRoaXMudW5yZWFkQ291bnRPZk5vdGlmaWNhdGlvbnMkID0gdGhpcy5zdG9yZS5waXBlKHNlbGVjdChzaGFyZWRNb2R1bGVSZWR1Y2Vycy5nZXROb3RpZmljYXRpb25VbnJlYWRUb3RhbCkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWN0VHJhY2tlclJlY29yZGVyKCkge1xyXG4gICAgdGhpcy5jb21tb25TZXJ2aWNlLmdldEFjdFRyYWNrZXJSZWNvcmRlcigpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xyXG4gICAgICAgIHRoaXMuaXNSZWNvcmRpbmcgPSByZXNwb25zZS5kYXRhO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNsZWFyRGVtb0RhdGEoKSB7XHJcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKENvbmZpcm1hdGlvbkRpYWxvZ0NvbXBvbmVudCwge1xyXG4gICAgICBoZWlnaHQ6IFwiMzAlXCIsXHJcbiAgICAgIHdpZHRoOiBcIjMwJVwiLFxyXG4gICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgICAgZGlyZWN0aW9uOiBcImx0clwiLFxyXG4gICAgICBkYXRhOiB7fSxcclxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlXHJcbiAgICB9KTtcclxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiVGhlIGRpYWxvZyB3YXMgY2xvc2VkXCIpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgZXhwb3J0Q29uZmlndXJhdGlvbkRpYWxvZ0RhdGEoKSB7XHJcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKEV4cG9ydENvbmZpZ3VyYXRpb25EaWFsb2dDb21wb25lbnQsIHtcclxuICAgICAgaGVpZ2h0OiBcIjQ1JVwiLFxyXG4gICAgICB3aWR0aDogXCI0MCVcIixcclxuICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgICAgIGRpcmVjdGlvbjogXCJsdHJcIixcclxuICAgICAgZGF0YToge30sXHJcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICBjb25zb2xlLmxvZyhcIlRoZSBkaWFsb2cgd2FzIGNsb3NlZFwiKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlU2lkZW5hdigpIHtcclxuICAgIGlmICh0aGlzLmxheW91dENvbmYuc2lkZWJhclN0eWxlID09PSBcImNsb3NlZFwiKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmxheW91dC5wdWJsaXNoTGF5b3V0Q2hhbmdlKHtcclxuICAgICAgICBzaWRlYmFyU3R5bGU6IFwiZnVsbFwiXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5sYXlvdXQucHVibGlzaExheW91dENoYW5nZSh7XHJcbiAgICAgIHNpZGViYXJTdHlsZTogXCJjbG9zZWRcIlxyXG4gICAgfSk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHsgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwicmVzaXplXCIpKTsgfSwgMjUwKTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZUNvbGxhcHNlKCkge1xyXG4gICAgLy8gY29tcGFjdCAtLT4gZnVsbFxyXG4gICAgaWYgKHRoaXMubGF5b3V0Q29uZi5zaWRlYmFyU3R5bGUgPT09IFwiY29tcGFjdFwiKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmxheW91dC5wdWJsaXNoTGF5b3V0Q2hhbmdlKFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHNpZGViYXJTdHlsZTogXCJmdWxsXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHsgdHJhbnNpdGlvbkNsYXNzOiB0cnVlIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAqIC0tPiBjb21wYWN0XHJcbiAgICB0aGlzLmxheW91dC5wdWJsaXNoTGF5b3V0Q2hhbmdlKFxyXG4gICAgICB7XHJcbiAgICAgICAgc2lkZWJhclN0eWxlOiBcImNvbXBhY3RcIlxyXG4gICAgICB9LFxyXG4gICAgICB7IHRyYW5zaXRpb25DbGFzczogdHJ1ZSB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFRpbWVTaGVldEJ1dHRvbnMoKSB7XHJcbiAgICAvL3RoaXMubG9hZGluZ0luUHJvZ3Jlc3MgPSB0cnVlO1xyXG4gICAgLy8gdGhpcy5jb21tb25TZXJ2aWNlLmdldFRpbWVTaGVldEVuYWJsZWRJbmZvcm1hdGlvbigpLnBpcGUodGFrZVVudGlsKHRoaXMubmdEZXN0cm95ZWQkKSlcclxuICAgIC8vICAgLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAvLyAgICAgaWYgKGRhdGEgPT09IFwiXCIgfHwgZGF0YSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAvLyAgICAgICByZXR1cm47XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICAgIHRoaXMudGltZXNoZWV0RGlzYWJsZW9yRW5hYmxlID0gSlNPTi5wYXJzZShkYXRhKTtcclxuICAgIC8vICAgICB0aGlzLmxvYWRpbmdJblByb2dyZXNzID0gZmFsc2U7XHJcbiAgICAvLyAgIH0pO1xyXG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgRmV0Y2hUaW1lU2hlZXRCdXR0b25EZXRhaWxzKCkpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2VGZWVkVGltZVNoZWV0KCkge1xyXG4gICAgdGhpcy5mZWVkVGltZVNoZWV0UG9wb3Zlci5jbG9zZSgpO1xyXG4gICAgdGhpcy5pc0ZlZWRUaW1lU2hlZXQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIG9wZW5UaW1lU2hlZXQoKSB7XHJcbiAgICBjb25zdCBwcm9qZWN0RGlhbG9nID0gdGhpcy5kaWFsb2cub3BlbihGZWVkVGltZURpYWxvZ0NvbXBvbmVudCwge1xyXG4gICAgICBtaW5XaWR0aDogJzMwdncnLFxyXG4gICAgICBoZWlnaHQ6ICczNXZoJyxcclxuICAgICAgZGF0YTogIXRoaXMuaXNGZWVkVGltZVNoZWV0XHJcbiAgICAgIC8vZGlzYWJsZUNsb3NlOiB0cnVlXHJcbiAgICB9KTtcclxuICAgIHByb2plY3REaWFsb2cuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLmNsb3NlRmVlZFRpbWVTaGVldCgpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmdldFRpbWVTaGVldEJ1dHRvbnMoKTtcclxuICAgIC8vIHRoaXMuaXNGZWVkVGltZVNoZWV0ID0gIXRoaXMuaXNGZWVkVGltZVNoZWV0O1xyXG4gIH1cclxuXHJcbiAgLy8gZ2V0QWxsTWVudUl0ZW1zKCkge1xyXG4gIC8vICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgR2V0QWxsTWVudUl0ZW1zVHJpZ2dlcmVkKE1lbnVDYXRlZ29yaWVzLk1haW4pKTtcclxuICAvLyB9XHJcblxyXG4gIGNoYW5nZU1lbnVUeXBlKHR5cGUpIHtcclxuICAgIHRoaXMubWVudVR5cGUgPSB0eXBlO1xyXG4gIH1cclxuXHJcbiAgb3BlbkZlZWRCYWNrRGlhbG9nKCkge1xyXG4gICAgdGhpcy5pc0ZlZWRCYWNrRGlhbG9nID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGNsb3NlRmVlZEJhY2tsb2dEaWFsb2coKSB7XHJcbiAgICB0aGlzLmlzRmVlZEJhY2tEaWFsb2cgPSBmYWxzZTtcclxuICAgIHRoaXMuZmVlZEJhY2tQb3BPdmVyLmNsb3NlKCk7XHJcbiAgfVxyXG5cclxuICBnZXRDb21wYW55RGV0YWlscyhjb21wYW55SWQ6IHN0cmluZykge1xyXG4gICAgaWYgKHRoaXMuY29va2llU2VydmljZS5jaGVjayhMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkNvbXBhbnlEZXRhaWxzKSAmJiB0aGlzLmNvb2tpZVNlcnZpY2UuY2hlY2soTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Db21wYW55SWQpKSB7XHJcbiAgICAgIHRoaXMuY29tcGFueSA9IEpTT04ucGFyc2UodGhpcy5jb29raWVTZXJ2aWNlLmdldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkNvbXBhbnlEZXRhaWxzKSk7XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuY29tcGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2UuZ2V0Q29tcGFueUJ5SWQoY29tcGFueUlkKS5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmNvbXBhbnkgPSByZXNwb25zZS5kYXRhO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5jb21wYW55LmlzUmVtb3RlQWNjZXNzID09IDEgJiYgdGhpcy5jb21wYW55LnRyYWlsRGF5cyA+IDApIHtcclxuICAgICAgICAgIHRoaXMuc2hvd1RyYWlsUGVyaW9kID0gdHJ1ZTtcclxuICAgICAgICAgIC8vIHRoaXMubm9PZkRheXM9dGhpcy5jb21wYW55Lm5vT2ZEYXlzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5jb21wYW55LmlzRGVtb0RhdGEgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgdGhpcy5zaG93RGVsZXRlID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zaG93RGVsZXRlID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmNvbXBhbnkuaXNEZW1vRGF0YSA9PSBmYWxzZSB8fCB0aGlzLmNvbXBhbnkuaXNEZW1vRGF0YSA9PSBudWxsKSB7XHJcbiAgICAgICAgICB0aGlzLnNob3dEZWxldGUgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuY29tcGFueSAhPSBudWxsICYmIHRoaXMuY29tcGFueSAhPSB1bmRlZmluZWQgJiYgdGhpcy5jb21wYW55LmluZHVzdHJ5SWQudG9VcHBlckNhc2UoKSA9PSAnNzQ5OUY1RTMtMEVGMi00MDQ0LUI4NDAtMjQxMUI2ODMwMkY5JylcclxuICAgICAgICAgIHRoaXMuaXNTdG9yZUFjY2VzcyA9IGZhbHNlO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHRoaXMuaXNTdG9yZUFjY2VzcyA9IHRydWU7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmNvbXBhbnkuaXNSZW1vdGVBY2Nlc3MgPT0gMSAmJiB0aGlzLmNvbXBhbnkudHJhaWxEYXlzID4gMCkge1xyXG4gICAgICAgIHRoaXMuc2hvd1RyYWlsUGVyaW9kID0gdHJ1ZTtcclxuICAgICAgICAvLyB0aGlzLm5vT2ZEYXlzPXRoaXMuY29tcGFueS5ub09mRGF5cztcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5jb21wYW55LmlzRGVtb0RhdGEgPT0gdHJ1ZSkge1xyXG4gICAgICAgIHRoaXMuc2hvd0RlbGV0ZSA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuY29tcGFueS5pc0RlbW9EYXRhID09IGZhbHNlIHx8IHRoaXMuY29tcGFueS5pc0RlbW9EYXRhID09IG51bGwpIHtcclxuICAgICAgICB0aGlzLnNob3dEZWxldGUgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5jb21wYW55ICE9IG51bGwgJiYgdGhpcy5jb21wYW55ICE9IHVuZGVmaW5lZCAmJiB0aGlzLmNvbXBhbnkuaW5kdXN0cnlJZC50b1VwcGVyQ2FzZSgpID09ICc3NDk5RjVFMy0wRUYyLTQwNDQtQjg0MC0yNDExQjY4MzAyRjknKVxyXG4gICAgICAgIHRoaXMuaXNTdG9yZUFjY2VzcyA9IGZhbHNlO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5pc1N0b3JlQWNjZXNzID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFVzZXJTdG9yZSgpIHtcclxuICAgIGxldCBzdG9yZVNlYXJjaE1vZGVsID0gbmV3IFN0b3JlU2VhcmNoTW9kZWwoKTtcclxuICAgIHN0b3JlU2VhcmNoTW9kZWwuaXNBcmNoaXZlZCA9IGZhbHNlO1xyXG4gICAgc3RvcmVTZWFyY2hNb2RlbC5pc0RlZmF1bHQgPSB0cnVlO1xyXG4gICAgc3RvcmVTZWFyY2hNb2RlbC5pc0NvbXBhbnkgPSBmYWxzZTtcclxuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IEdldFVzZXJTdG9yZUlkVHJpZ2dlcmVkKHN0b3JlU2VhcmNoTW9kZWwpKTtcclxuICB9XHJcblxyXG4gIGdvVG9Vc2VyU3RvcmUoKSB7XHJcbiAgICBpZiAodGhpcy5jb29raWVTZXJ2aWNlLmdldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkN1cnJlbnRVc2VySWQpKVxyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCJkb2N1bWVudC9zdG9yZVwiLCB0aGlzLnVzZXJTdG9yZUlkLCB0aGlzLmNvb2tpZVNlcnZpY2UuZ2V0KExvY2FsU3RvcmFnZVByb3BlcnRpZXMuQ3VycmVudFVzZXJJZCkudG9Mb3dlckNhc2UoKV0pO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0QWZ0ZXJsb2dpbihlKSB7XHJcbiAgICB0aGlzLmNvbXBhbnlJZCA9IGUuY29tcGFueUlkXHJcbiAgICB0aGlzLnNlbGVjdGVkQ29tcGFueU5hbWUgPSBlLmNvbXBhbnlOYW1lO1xyXG4gICAgdGhpcy5zZWxlY3RlZENvbXBhbnkgPSBlO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgc2VsZWN0Q29tcGFueShlKSB7XHJcbiAgICBpZiAodGhpcy5jb29raWVTZXJ2aWNlLmdldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkNvbXBhbnlJZCkudG9Mb3dlckNhc2UoKSAhPSBlLmNvbXBhbnlJZC50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgdGhpcy5yZWxvYWQgPSBmYWxzZTtcclxuICAgICAgY29uc29sZS5sb2coZSk7XHJcbiAgICAgIHRoaXMuY29tcGFueUlkID0gZS5jb21wYW55SWQ7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb21wYW55TmFtZSA9IGUuY29tcGFueU5hbWU7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb21wYW55ID0gZTtcclxuICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gbnVsbDtcclxuICAgICAgdGhpcy5uZ3hTZXJ2aWNlLnN0YXJ0KCk7XHJcbiAgICAgIHRoaXMuYXV0aFNlcnZpY2UuY29tcGFueUxvZ2luKHRoaXMuc2VsZWN0ZWRDb21wYW55KS5zdWJzY3JpYmUoYXN5bmMgKHVzZXJUb2tlbjogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHVzZXJUb2tlbi5zdWNjZXNzKSB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLm9uU2lnbm91dCgpO1xyXG4gICAgICAgICAgbGV0IGVudmlyb25tZW50ID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkVudmlyb25tZW50KSk7XHJcbiAgICAgICAgICB0aGlzLmNvb2tpZVNlcnZpY2Uuc2V0KExvY2FsU3RvcmFnZVByb3BlcnRpZXMuQ3VycmVudFVzZXIsIGUuYXV0aFRva2VuLCBudWxsLCBlbnZpcm9ubWVudC5jb29raWVQYXRoLCB0aGlzLndpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSwgZmFsc2UsIFwiU3RyaWN0XCIpO1xyXG4gICAgICAgICAgdGhpcy5jb29raWVTZXJ2aWNlLnNldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkN1cnJlbnRVc2VySWQsIGUudXNlcklkLCBudWxsLCBlbnZpcm9ubWVudC5jb29raWVQYXRoLCB0aGlzLndpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSwgZmFsc2UsIFwiU3RyaWN0XCIpO1xyXG4gICAgICAgICAgdGhpcy5jb29raWVTZXJ2aWNlLnNldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkN1cnJlbnRVc2VyLCB1c2VyVG9rZW4uZGF0YS5hdXRoVG9rZW4sIG51bGwsIGVudmlyb25tZW50LmNvb2tpZVBhdGgsIHRoaXMud2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLCBmYWxzZSwgXCJTdHJpY3RcIik7XHJcbiAgICAgICAgICB0aGlzLmNvb2tpZVNlcnZpY2Uuc2V0KFwiRGVmYXVsdERhc2hib2FyZFwiLCB1c2VyVG9rZW4uZGF0YS5kZWZhdWx0RGFzaGJvYXJkSWQgPyBKU09OLnN0cmluZ2lmeSh1c2VyVG9rZW4uZGF0YS5kZWZhdWx0RGFzaGJvYXJkSWQud29ya3NwYWNlSWQpIDogbnVsbCwgbnVsbCwgZW52aXJvbm1lbnQuY29va2llUGF0aCwgdGhpcy53aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsIGZhbHNlLCBcIlN0cmljdFwiKTtcclxuICAgICAgICAgIHRoaXMuY29va2llU2VydmljZS5zZXQoJ0NvbXBhbnlEZXRhaWxzJywgSlNPTi5zdHJpbmdpZnkodXNlclRva2VuLmRhdGEuY29tcGFueURldGFpbHMpKTtcclxuICAgICAgICAgIHRoaXMuY29va2llU2VydmljZS5zZXQoJ0NvbXBhbmllc0xpc3QnLCBKU09OLnN0cmluZ2lmeSh1c2VyVG9rZW4uZGF0YS51c2Vyc01vZGVsLmNvbXBhbmllc0xpc3QpKSxcclxuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ1JvbGVGZWF0dXJlcycsIEpTT04uc3RyaW5naWZ5KHVzZXJUb2tlbi5kYXRhLnJvbGVGZWF0dXJlcykpO1xyXG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJVc2VyTW9kZWxcIiwgSlNPTi5zdHJpbmdpZnkodXNlclRva2VuLmRhdGEudXNlcnNNb2RlbCkpO1xyXG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ1NvZnRMYWJlbHMnLCBKU09OLnN0cmluZ2lmeSh1c2VyVG9rZW4uZGF0YS5zb2Z0TGFiZWxzKSk7XHJcbiAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcIkNvbXBhbnlTZXR0aW5nc1wiLCBKU09OLnN0cmluZ2lmeSh1c2VyVG9rZW4uZGF0YS5jb21wYW55U2V0dGluZ3MpKTtcclxuICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiRnJvbUxvZ0luXCIsIEpTT04uc3RyaW5naWZ5KHRydWUpKTtcclxuICAgICAgICAgIHRoaXMuY29va2llU2VydmljZS5zZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Db21wYW55TmFtZSwgdXNlclRva2VuLmRhdGEudXNlcnNNb2RlbC5jb21wYW55TmFtZSwgbnVsbCwgZW52aXJvbm1lbnQuY29va2llUGF0aCwgdGhpcy53aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsIGZhbHNlLCBcIlN0cmljdFwiKTtcclxuICAgICAgICAgIHRoaXMuY29va2llU2VydmljZS5zZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Db21wYW55SWQsIHVzZXJUb2tlbi5kYXRhLnVzZXJzTW9kZWwuY29tcGFueUlkLCBudWxsLCBlbnZpcm9ubWVudC5jb29raWVQYXRoLCB0aGlzLndpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSwgZmFsc2UsIFwiU3RyaWN0XCIpO1xyXG4gICAgICAgICAgLy90aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBVc2VyRGV0YWlsc0ZldGNoZWRBZnRlckNvbXBhbnlMb2dpbih1c2VyVG9rZW4uZGF0YS51c2Vyc01vZGVsKSk7XHJcbiAgICAgICAgICB0aGlzLnNldERhZmF1bHRMYW5ndWFnZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm5neFNlcnZpY2Uuc3RvcCgpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldERhZmF1bHRMYW5ndWFnZSgpIHtcclxuICAgIGNvbnN0IGNvbXBhbnkgPSBKU09OLnBhcnNlKHRoaXMuY29va2llU2VydmljZS5nZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Db21wYW55RGV0YWlscykpO1xyXG4gICAgbGV0IGN1cnJlbnRDdWx0dXJlID0gY29tcGFueS5sYW5Db2RlO1xyXG4gICAgaWYgKGN1cnJlbnRDdWx0dXJlID09IG51bGwgfHwgY3VycmVudEN1bHR1cmUgPT0gdW5kZWZpbmVkIHx8IGN1cnJlbnRDdWx0dXJlID09PSAnbnVsbCcgfHwgY3VycmVudEN1bHR1cmUgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgIGN1cnJlbnRDdWx0dXJlID0gJ2VuJztcclxuICAgIH1cclxuICAgIGxldCBlbnZpcm9ubWVudCA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oTG9jYWxTdG9yYWdlUHJvcGVydGllcy5FbnZpcm9ubWVudCkpO1xyXG4gICAgdGhpcy5jb29raWVTZXJ2aWNlLnNldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkN1cnJlbnRDdWx0dXJlLCBjdXJyZW50Q3VsdHVyZSwgbnVsbCwgZW52aXJvbm1lbnQuY29va2llUGF0aCwgdGhpcy53aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsIGZhbHNlLCBcIlN0cmljdFwiKTtcclxuICAgIHRoaXMuY3VycmVudExhbmcgPSBjdXJyZW50Q3VsdHVyZTtcclxuICAgIHRoaXMudHJhbnNsYXRlLnVzZSh0aGlzLmN1cnJlbnRMYW5nKTtcclxuICB9XHJcblxyXG5cclxuICBnZXRFbXBsb3llZUlkQnlVc2VySWQoKSB7XHJcblxyXG4gIH1cclxuXHJcbiAgbmF2aWdhdGVUb1Byb2ZpbGUoKSB7XHJcbiAgICB0aGlzLmNvbW1vblNlcnZpY2UuZ2V0VXNlckJ5SWQodGhpcy5jb29raWVTZXJ2aWNlLmdldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkN1cnJlbnRVc2VySWQpLnRvTG93ZXJDYXNlKCkpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzcG9uc2Uuc3VjY2VzcyA9PSB0cnVlKSB7XHJcbiAgICAgICAgdGhpcy5lbXBsb3llZUlkID0gcmVzcG9uc2UuZGF0YS5lbXBsb3llZUlkO1xyXG4gICAgICAgIGlmICh0aGlzLmVtcGxveWVlSWQpIHtcclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcImRhc2hib2FyZC9wcm9maWxlXCIsIHRoaXMuY29va2llU2VydmljZS5nZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5DdXJyZW50VXNlcklkKS50b0xvd2VyQ2FzZSgpLCBcIm92ZXJ2aWV3XCJdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCJkYXNoYm9hcmQvbXlQcm9maWxlXCIsIHRoaXMuY29va2llU2VydmljZS5nZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5DdXJyZW50VXNlcklkKS50b0xvd2VyQ2FzZSgpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgbmF2aWdhdGVUb01lc3NlbmdlcigpIHtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcIi9jaGF0XCJdKTtcclxuICB9XHJcblxyXG5cclxuICBuYXZpZ2F0ZVRvU3RhdHVzUmVwb3J0KCkge1xyXG4gICAgY29uc3QgcHJvamVjdERpYWxvZyA9IHRoaXMuZGlhbG9nLm9wZW4oV29ya0l0ZW1zRGlhbG9nQ29tcG9uZW50LCB7XHJcbiAgICAgIG1pbldpZHRoOiAnODJ2dycsXHJcbiAgICAgIGhlaWdodDogJzgydmgnLFxyXG4gICAgICBkYXRhOiB7IGRhc2hib2FyZEZpbHRlcnM6IHRoaXMuZGFzaGJvYXJkRmlsdGVycyB9LFxyXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWVcclxuICAgIH0pO1xyXG4gICAgcHJvamVjdERpYWxvZy5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgoKSA9PiB7IH0pO1xyXG4gIH1cclxuICBuYXZpZ2F0ZVRvU2V0dGluZ3MoKSB7XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCIvc2V0dGluZ3NcIl0pO1xyXG4gIH1cclxuXHJcbiAgYWx0ZXJuYXRlU2lnbkluKCkge1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW1wiL3Nlc3Npb25zL2dlbmVyaWMtc2lnbmluXCJdKTtcclxuICB9XHJcblxyXG4gIG5hdmlnYXRlVG9Sb2xlcygpIHtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcIi9yb2xlbWFuYWdlbWVudC9yb2xlbWFuYWdlbWVudFwiXSk7XHJcbiAgfVxyXG5cclxuICBuYXZpZ2F0ZVRvVXJsKHdvcmtzcGFjZUlkKSB7XHJcbiAgICBjb25zdCB1c2VyUmVmZXJlbmNlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Vc2VyUmVmZXJlbmNlSWQpO1xyXG4gICAgaWYgKHVzZXJSZWZlcmVuY2UgIT0gXCJudWxsXCIgJiYgdXNlclJlZmVyZW5jZSAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoXCJkYXNoYm9hcmQtbWFuYWdlbWVudC9kYXNoYm9hcmQvXCIgKyB3b3Jrc3BhY2VJZCArIFwiL2Zvcm0vXCIgKyB1c2VyUmVmZXJlbmNlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoXCJkYXNoYm9hcmQtbWFuYWdlbWVudC9kYXNoYm9hcmQvXCIgKyB3b3Jrc3BhY2VJZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRVcGxvYWRGaWxlUG9wdXBPcGVuKGZpbGVVcGxvYWREcm9wem9uZVBvcHVwKSB7XHJcbiAgICBmaWxlVXBsb2FkRHJvcHpvbmVQb3B1cC5vcGVuUG9wb3ZlcigpO1xyXG4gIH1cclxuICBzZXRMYWJlbE5hbWVGb3JEcm9wem9uZShmaWxlTmFtZSkge1xyXG4gICAgcmV0dXJuIGZpbGVOYW1lLnN1YnN0cmluZygwLCAyMCkgKyBcIi4uLlwiO1xyXG4gIH1cclxuICBvblJlbW92ZShldmVudCkge1xyXG4gICAgdGhpcy5maWxlcy5zcGxpY2UodGhpcy5maWxlcy5pbmRleE9mKGV2ZW50KSwgMSk7XHJcbiAgICBpZiAodGhpcy5maWxlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuZmlsZXNQcmVzZW50ID0gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZmlsZXNQcmVzZW50ID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJlbW92ZUFsbEZpbGVzKCkge1xyXG4gICAgdGhpcy5maWxlc1ByZXNlbnQgPSBmYWxzZTtcclxuICAgIHRoaXMuZmlsZXMgPSBbXTtcclxuICB9XHJcbiAgZmlsZXNTZWxlY3RlZChldmVudCkge1xyXG4gICAgdGhpcy5maWxlcy5wdXNoKC4uLmV2ZW50LmFkZGVkRmlsZXMpO1xyXG4gICAgaWYgKHRoaXMuZmlsZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLmZpbGVzUHJlc2VudCA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbG9zZVVwbG9hZEZpbGVQb3B1cCgpIHtcclxuICAgIHRoaXMuZmlsZVVwbG9hZERyb3B6b25lUG9wdXAuZm9yRWFjaCgocCkgPT4gcC5jbG9zZVBvcG92ZXIoKSk7XHJcbiAgICB0aGlzLmZpbGVzID0gW107XHJcbiAgICB0aGlzLmZpbGVSZXN1bHRNb2RlbCA9IFtdO1xyXG4gIH1cclxuICBzYXZlRmlsZXMoKSB7XHJcbiAgICB0aGlzLmFueU9wZXJhdGlvbkluUHJvZ3Jlc3MgPSB0cnVlO1xyXG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcclxuICAgIHRoaXMuZmlsZXMuZm9yRWFjaCgoZmlsZTogRmlsZSkgPT4ge1xyXG4gICAgICB0aGlzLmZpbGVJbmRleCA9IHRoaXMuZmlsZUluZGV4ICsgMTtcclxuICAgICAgY29uc3QgZmlsZUtleU5hbWUgPSBcImZpbGVcIiArIHRoaXMuZmlsZUluZGV4LnRvU3RyaW5nKCk7XHJcbiAgICAgIGZvcm1EYXRhLmFwcGVuZChmaWxlS2V5TmFtZSwgZmlsZSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBsZXQgZW52aXJvbm1lbnQgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKExvY2FsU3RvcmFnZVByb3BlcnRpZXMuRW52aXJvbm1lbnQpKTtcclxuICAgIHRoaXMuVXBsb2FkZXJPbkluaXQoZW52aXJvbm1lbnQuYXBpVVJMICsgQXBpVXJscy5VcGxvYWRGaWxlQ2h1bmtzKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBVcGxvYWRlck9uSW5pdCh1cmw6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgbGV0IHByb2dyZXNzID0gMDtcclxuICAgIGNvbnN0IHIgPSBuZXcgUmVzdW1hYmxlKHtcclxuICAgICAgdGFyZ2V0OiB1cmwsXHJcbiAgICAgIGNodW5rU2l6ZTogMSAqIDEwMjQgKiAxMDI0LCAvLzMgTUJcclxuICAgICAgcXVlcnk6IHsgbW9kdWxlVHlwZUlkOiB0aGlzLm1vZHVsZVR5cGVJZCB9LFxyXG4gICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgXCJBdXRob3JpemF0aW9uXCI6IGBCZWFyZXIgJHt0aGlzLmNvb2tpZVNlcnZpY2UuZ2V0KExvY2FsU3RvcmFnZVByb3BlcnRpZXMuQ3VycmVudFVzZXIpfWBcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gICAgci5hZGRGaWxlcyh0aGlzLmZpbGVzKTtcclxuICAgIHIub24oJ2ZpbGVBZGRlZCcsIChmaWxlLCBldmVudCkgPT4ge1xyXG4gICAgICBpZiAoIXRoaXMuZmlsZVJlc3VsdE1vZGVsIHx8IHRoaXMuZmlsZVJlc3VsdE1vZGVsLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLmZpbGVSZXN1bHRNb2RlbCA9IFtdO1xyXG4gICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9XHJcbiAgICAgIHIudXBsb2FkKClcclxuICAgIH0pO1xyXG4gICAgci5vbignY29tcGxldGUnLCAoZXZlbnQpID0+IHtcclxuICAgICAgci5maWxlcy5wb3AoKTtcclxuICAgICAgdGhpcy5wcm9ncmVzc1ZhbHVlID0gMDtcclxuICAgICAgdGhpcy5maWxlc1ByZXNlbnQgPSBmYWxzZTtcclxuICAgICAgdGhpcy51cGxvYWRlZEZpbGVOYW1lcyA9IFtdO1xyXG4gICAgICB0aGlzLmZpbGVDb3VudGVyID0gMTtcclxuICAgICAgdGhpcy5maWxlSW5kZXggPSAwO1xyXG4gICAgICB0aGlzLmFueU9wZXJhdGlvbkluUHJvZ3Jlc3MgPSBmYWxzZTtcclxuICAgIH0pO1xyXG4gICAgci5vbigncHJvZ3Jlc3MnLCAoKSA9PiB7XHJcbiAgICAgIHByb2dyZXNzID0gTWF0aC5yb3VuZChyLnByb2dyZXNzKCkgKiAxMDApO1xyXG4gICAgICB0aGlzLnByb2dyZXNzVmFsdWUgPSBwcm9ncmVzcztcclxuICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9KTtcclxuICAgIHIub24oJ2ZpbGVTdWNjZXNzJywgKGZpbGUsIHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgIGlmIChmaWxlICYmIGZpbGUuZmlsZU5hbWUpIHtcclxuICAgICAgICBpZiAoIXRoaXMudXBsb2FkZWRGaWxlTmFtZXMuZmluZCh4ID0+IHggPT0gZmlsZS5maWxlTmFtZSkpIHtcclxuICAgICAgICAgIHRoaXMudXBsb2FkZWRGaWxlTmFtZXMucHVzaChmaWxlLmZpbGVOYW1lKVxyXG4gICAgICAgICAgdGhpcy5maWxlQ291bnRlciA9IHRoaXMudXBsb2FkZWRGaWxlTmFtZXMubGVuZ3RoO1xyXG5cclxuICAgICAgICAgIGxldCByZXN1bHQgPSBKU09OLnBhcnNlKHJlc3BvbnNlKTtcclxuICAgICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmZpbGVSZXN1bHRNb2RlbCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuZmlsZVJlc3VsdE1vZGVsID0gW107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IGZpbGVSZXN1bHQgPSBuZXcgRmlsZVJlc3VsdE1vZGVsKCk7XHJcbiAgICAgICAgICAgIGZpbGVSZXN1bHQuZmlsZUV4dGVuc2lvbiA9IHJlc3VsdFswXS5GaWxlRXh0ZW5zaW9uO1xyXG4gICAgICAgICAgICBmaWxlUmVzdWx0LmZpbGVOYW1lID0gcmVzdWx0WzBdLkZpbGVOYW1lO1xyXG4gICAgICAgICAgICBmaWxlUmVzdWx0LmZpbGVQYXRoID0gcmVzdWx0WzBdLkZpbGVQYXRoO1xyXG4gICAgICAgICAgICBmaWxlUmVzdWx0LmZpbGVTaXplID0gcmVzdWx0WzBdLkZpbGVTaXplO1xyXG4gICAgICAgICAgICB0aGlzLmZpbGVSZXN1bHRNb2RlbC5wdXNoKGZpbGVSZXN1bHQpO1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0WzBdLkZpbGVQYXRoICE9IG51bGwgJiYgcmVzdWx0WzBdLkZpbGVQYXRoICE9IFwiXCIpXHJcbiAgICAgICAgICAgICAgdGhpcy5pbXBvcnREeW5hbWljSnNvbihyZXN1bHRbMF0uRmlsZVBhdGgpO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgdGhpcy5jbG9zZVVwbG9hZEZpbGVQb3B1cCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGltcG9ydER5bmFtaWNKc29uKGNvbmZpZ3VyZWRKc29uVVJMKSB7XHJcbiAgICB2YXIgaW1wb3J0Q29uZmlndXJhdGlvbk1vZGVsID0gbmV3IEltcG9ydENvbmZpZ3VyYXRpb25Nb2RlbCgpO1xyXG4gICAgaW1wb3J0Q29uZmlndXJhdGlvbk1vZGVsLmNvbmZpZ3VyYXRpb25VcmwgPSBjb25maWd1cmVkSnNvblVSTDtcclxuICAgIHRoaXMuaW1wb3J0aW5nSW5Qcm9ncmVzcyA9IHRydWU7XHJcbiAgICB0aGlzLmNvbW1vblNlcnZpY2UuU3lzdGVtSW1wb3J0Q29uZmlndXJhdGlvbihpbXBvcnRDb25maWd1cmF0aW9uTW9kZWwpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzcG9uc2Uuc3VjY2VzcyA9PT0gdHJ1ZSkge1xyXG4gICAgICAgIHRoaXMuY2xvc2VVcGxvYWRGaWxlUG9wdXAoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5zdWNjZXNzKFwiRGF0YSBpbXBvcnRlZCBzdWNjZXNzZnVsbHlcIik7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UuYXBpUmVzcG9uc2VNZXNzYWdlc1swXS5tZXNzYWdlKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmltcG9ydGluZ0luUHJvZ3Jlc3MgPSBmYWxzZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY2xvc2VTZWFyY2goKSB7XHJcbiAgICB0aGlzLnNlYXJjaFRleHQgPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgc2VhcmNoQ29tcGFuaWVzKGNvbXBhbmllcywgc2VhcmNoKSB7XHJcbiAgICBpZiAoc2VhcmNoID09IG51bGwgfHwgc2VhcmNoID09ICcnKSB7XHJcbiAgICAgIHJldHVybiBjb21wYW5pZXM7XHJcbiAgICB9IGVsc2UgaWYgKHNlYXJjaCAhPSBudWxsKSB7XHJcbiAgICAgIHNlYXJjaCA9IHNlYXJjaC50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICBzZWFyY2ggPSBzZWFyY2gudHJpbSgpO1xyXG4gICAgICBjb25zdCB0ZW1wID0gY29tcGFuaWVzLmZpbHRlcihkYXRhID0+XHJcbiAgICAgICAgZGF0YS5jb21wYW55TmFtZS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihzZWFyY2gpID4gLTFcclxuICAgICAgKVxyXG4gICAgICByZXR1cm4gdGVtcDtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIC8vIHRoaXMucHVibnViLnVuc3Vic2NyaWJlKHsgY2hhbm5lbHM6IFt0aGlzLmxvZ2luVXNlcmNoYW5uZWxOYW1lXSB9KTtcclxuICAgIC8vIHZhciBsb2dpbkNvbXBhbnlJZCA9IHRoaXMuY29va2llU2VydmljZS5nZXQoXCJDb21wYW55SWRcIik7XHJcbiAgICAvLyBpZiAodGhpcy5jaGFubmVsTGlzdCAhPSB1bmRlZmluZWQgfHwgdGhpcy5jaGFubmVsTGlzdCAhPSBudWxsKSB7XHJcbiAgICAvLyAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLmNoYW5uZWxMaXN0Lmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgLy8gICAgIHRoaXMucHVibnViLnVuc3Vic2NyaWJlKHtcclxuICAgIC8vICAgICAgIGNoYW5uZWxzOiBbKGxvZ2luQ29tcGFueUlkICsgJy0nICsgdGhpcy5jaGFubmVsTGlzdFtpbmRleF0uaWQpXVxyXG4gICAgLy8gICAgIH0pO1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyB9XHJcbiAgICAvLyAgdGhpcy5wdWJudWIudW5zdWJzY3JpYmUoe1xyXG4gICAgLy8gICBjaGFubmVsczogWygnQ2hhbm5lbFVwZGF0ZXMtJyArIGxvZ2luQ29tcGFueUlkKV1cclxuICAgIC8vIH0pO1xyXG4gICAgLy8gdGhpcy5wdWJudWIudW5zdWJzY3JpYmUoe1xyXG4gICAgLy8gICBjaGFubmVsczogWygnVXNlclVwZGF0ZXMtJyArIGxvZ2luQ29tcGFueUlkKV1cclxuICAgIC8vIH0pO1xyXG4gICAgdGhpcy5uZ0Rlc3Ryb3llZCQubmV4dCgpO1xyXG4gICAgdGhpcy5uZ0Rlc3Ryb3llZCQuY29tcGxldGUoKTtcclxuICB9XHJcbiAgb25OYXZpZ2F0ZVRvQmlsbGluZ1NjcmVlbigpIHtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcIi9zaGVsbC9BY2NvdW50c1wiXSk7XHJcbiAgfVxyXG5cclxuICBvbk5hdmlnYXRlVG9QcmljaW5nU2NyZWVuKCkge1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW1wiL3NoZWxsL3BheW1lbnRzLXBsYW5zXCJdKTtcclxuICB9XHJcbiAgZ2V0SW50cm9EZXRhaWxzKCkge1xyXG4gICAgdmFyIGludHJvID0gbmV3IEludHJvTW9kZWwoKTtcclxuICAgIGludHJvLnVzZXJJZCA9IHRoaXMuY29va2llU2VydmljZS5nZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5DdXJyZW50VXNlcklkKTtcclxuICAgIHRoaXMuY29tbW9uU2VydmljZS5nZXRJbnRyb0RldGFpbHMoaW50cm8pLnN1YnNjcmliZSgocmVzcG9uc2VEYXRhOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJlc3BvbnNlRGF0YS5zdWNjZXNzID09IGZhbHNlKSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZSA9IHJlc3BvbnNlRGF0YS5hcGlSZXNwb25zZU1lc3NhZ2VzWzBdLm1lc3NhZ2U7XHJcbiAgICAgICAgdGhpcy5hbnlPcGVyYXRpb25JblByb2dyZXNzID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IodGhpcy52YWxpZGF0aW9uTWVzc2FnZSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAocmVzcG9uc2VEYXRhLnN1Y2Nlc3MgPT0gdHJ1ZSkge1xyXG4gICAgICAgIGxldCBpbnRybyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oTG9jYWxTdG9yYWdlUHJvcGVydGllcy5JbnRyb01vZHVsZXMpKTtcclxuICAgICAgICBpZiAoIWludHJvKVxyXG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oTG9jYWxTdG9yYWdlUHJvcGVydGllcy5JbnRyb01vZHVsZXMsIEpTT04uc3RyaW5naWZ5KHJlc3BvbnNlRGF0YS5kYXRhKSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0VGVhbU1lbWJlcnMoKSB7XHJcbiAgICB2YXIgdGVhbU1lbWJlck1vZGVsO1xyXG4gICAgbGV0IGVudmlyb25tZW50ID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkVudmlyb25tZW50KSk7XHJcbiAgICB2YXIgdGVhbU1lbWJlck1vZGVsO1xyXG4gICAgdGVhbU1lbWJlck1vZGVsID0ge1xyXG4gICAgICBpc0ZvclRyYWNrZXI6IHRydWVcclxuICAgIH1cclxuICAgIHRlYW1NZW1iZXJNb2RlbC5pc0FyY2hpdmVkID0gZmFsc2U7XHJcbiAgICB0aGlzLmNvbW1vblNlcnZpY2UuZ2V0VGVhbUxlYWRzTGlzdCh0ZWFtTWVtYmVyTW9kZWwpLnN1YnNjcmliZSgocmVzcG9uc2VEYXRhOiBhbnkpID0+IHtcclxuICAgICAgbGV0IGVtcGxveWVlc0Ryb3BEb3duID0gcmVzcG9uc2VEYXRhLmRhdGE7XHJcbiAgICAgIGlmIChlbXBsb3llZXNEcm9wRG93biAmJiBlbXBsb3llZXNEcm9wRG93bi5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgdGhpcy5jb29raWVTZXJ2aWNlLnNldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkVuYWJsZVRlYW1EYXNoYm9hcmQsICd0cnVlJywgbnVsbCwgZW52aXJvbm1lbnQuY29va2llUGF0aCwgdGhpcy53aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsIGZhbHNlLCBcIlN0cmljdFwiKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmNvb2tpZVNlcnZpY2Uuc2V0KExvY2FsU3RvcmFnZVByb3BlcnRpZXMuRW5hYmxlVGVhbURhc2hib2FyZCwgJ2ZhbHNlJywgbnVsbCwgZW52aXJvbm1lbnQuY29va2llUGF0aCwgdGhpcy53aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsIGZhbHNlLCBcIlN0cmljdFwiKTtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcbn1cclxuIiwiPG1hdC10b29sYmFyIGNsYXNzPVwidG9wYmFyIHJlbW92ZS1wYWRkaW5nXCIgc3R5bGU9XCJiYWNrZ3JvdW5kOiNmZmZmZmYgIWltcG9ydGFudDsgXHJcbiAgICAgICAgICAgYm9yZGVyLWJvdHRvbToxcHggc29saWQgI2U1ZTdlYjsgXHJcbiAgICAgICAgICAgaGVpZ2h0OjY1cHg7IFxyXG4gICAgICAgICAgIHBhZGRpbmc6MCAyMHB4OyBcclxuICAgICAgICAgICB6LWluZGV4OjEyMDA7IFxyXG4gICAgICAgICAgIHBvc2l0aW9uOnJlbGF0aXZlO1wiPlxyXG5cclxuICAgIDwhLS0gTGVmdDogQXBwIE1lbnUgLS0+XHJcbiAgICA8ZGl2IGZ4RmxleD5cclxuICAgICAgICA8YXBwLW1lbnUgW3JlbG9hZF09XCJyZWxvYWRcIiAoaXNPcGVuZWQpPVwiaXNPcGVuZWQoJGV2ZW50KVwiIChvcGVuTmV3RGFzaGJvYXJkKT1cIm5hdmlnYXRlVG9VcmwoJGV2ZW50KVwiPjwvYXBwLW1lbnU+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIENlbnRlciAoZW1wdHkgcGxhY2Vob2xkZXIpIC0tPlxyXG4gICAgPGRpdiBmeEZsZXggZnhMYXlvdXQ9XCJyb3dcIiBmeEhpZGUueHMgZnhMYXlvdXRBbGlnbj1cImNlbnRlclwiPjwvZGl2PlxyXG5cclxuICAgIDwhLS0gUmlnaHQ6IENvbnRyb2xzIC0tPlxyXG4gICAgPGRpdiBmeEZsZXggZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwiZW5kIGNlbnRlclwiIHN0eWxlPVwiZ2FwOjEwcHg7XCI+XHJcblxyXG4gICAgICAgIDwhLS0gQ29tcGFueSBTZWxlY3RvciAtLT5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiY29tcGFuaWVzTGlzdCAhPSBudWxsICYmIGNvbXBhbmllc0xpc3QubGVuZ3RoID4gMVwiIGNsYXNzPVwiZmlsdGVyLWRhdGEgY3VzdG9tLWJveCBsYW5ndWFnZS1zZWN0aW9uXCJcclxuICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDoxODBweDsgcG9zaXRpb246cmVsYXRpdmU7XCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxyXG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBwbGFjZWhvbGRlcj1cIlwiIG5hbWU9XCJzZWxlY3RlZENvbXBhbnlcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkQ29tcGFueVwiXHJcbiAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cInNlbGVjdENvbXBhbnkoJGV2ZW50LnZhbHVlKVwiIHBhbmVsQ2xhc3M9XCJjb21wYW55LXNlbGVjdC1wYW5lbFwiPlxyXG5cclxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNlbGVjdGVkQ29tcGFueVwiIHN0eWxlPVwiZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGdhcDoxMHB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWF2YXRhciBbbmFtZV09XCJzZWxlY3RlZENvbXBhbnkuY29tcGFueU5hbWUgfCByZW1vdmVTcGVjaWFsQ2hhcmFjdGVyc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmeExheW91dEFsaWduPVwic3RhcnQgY2VudGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzcmNdPVwic2VsZWN0ZWRDb21wYW55LmNvbXBhbnlNaW5pTG9nbyB8IGZldGNoU2l6ZWRBbmRDYWNoZWRJbWFnZTogJzIwJzonJ1wiIFtpc1JvdW5kXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cIjIwXCI+PC9hcHAtYXZhdGFyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhbmd1YWdlLWRpc3BsYXlcIiBzdHlsZT1cImZvbnQtd2VpZ2h0OjYwMDsgb3ZlcmZsb3c6aGlkZGVuOyB0ZXh0LW92ZXJmbG93OmVsbGlwc2lzOyB3aGl0ZS1zcGFjZTpub3dyYXA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCg5MGRlZywjZjc5YTZiLCNmMTU4MGMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgLXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6dGV4dDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgIC13ZWJraXQtdGV4dC1maWxsLWNvbG9yOnRyYW5zcGFyZW50O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jbGlwOnRleHQ7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBzZWxlY3RlZENvbXBhbnlOYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gU2VhcmNoIGJhciAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgZnhGbGV4IGNsYXNzPVwic2VhcmNoX2dvYWxpbnB1dCBtbC0xXCIgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwb3NpdGlvbjpzdGlja3k7IHRvcDowOyB6LWluZGV4OjE7IGJhY2tncm91bmQtY29sb3I6I2ZmZjsgcGFkZGluZzo2cHggOHB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZ1bGwtd2lkdGhcIiBzdHlsZT1cIndpZHRoOjEwMCU7IG1hcmdpbjowO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJzZWFyY2hfZ29hbFwiIG1hdElucHV0IHBsYWNlaG9sZGVyPVwie3snSFJNQU5BR0FNRU5ULlNFQVJDSCcgfCB0cmFuc2xhdGV9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlYXJjaFRleHRcIiBhdXRvY29tcGxldGU9XCJvZmZcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cInNlYXJjaFRleHRcIiBzdHlsZT1cImN1cnNvcjpwb2ludGVyXCIgKGNsaWNrKT1cImNsb3NlU2VhcmNoKClcIj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIE9wdGlvbnMgLS0+XHJcbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgY29tcGFueUxpc3Qgb2Ygc2VhcmNoQ29tcGFuaWVzKGNvbXBhbmllc0xpc3QsIHNlYXJjaFRleHQpXCIgW3ZhbHVlXT1cImNvbXBhbnlMaXN0XCJcclxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwie3tjb21wYW55TGlzdC5jb21wYW55TmFtZX19XCIgbWF0VG9vbHRpcENsYXNzPVwidG9vbHRpcENsYXNzLW1hdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjQwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIHN0eWxlPVwiZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtYXZhdGFyIFtuYW1lXT1cImNvbXBhbnlMaXN0LmNvbXBhbnlOYW1lIHwgcmVtb3ZlU3BlY2lhbENoYXJhY3RlcnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJjb21wYW55TGlzdC5jb21wYW55TWluaUxvZ28gfCBmZXRjaFNpemVkQW5kQ2FjaGVkSW1hZ2U6ICcyMCc6JydcIiBbaXNSb3VuZF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCIyMFwiPjwvYXBwLWF2YXRhcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1sZWZ0OjhweDtcIj57eyBjb21wYW55TGlzdC5jb21wYW55TmFtZSB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gU2V0dGluZ3MgLS0+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cImNhbkFjY2Vzc19mZWF0dXJlX1NldHRpbmdzIHx8IGNhbkFjY2Vzc19mZWF0dXJlX1ZpZXdSb2xlc1wiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBtYXRUb29sdGlwPVwie3sgJ1NIRUxMLlNFVFRJTkdTJyB8IHRyYW5zbGF0ZSB9fVwiIChjbGljayk9XCJuYXZpZ2F0ZVRvU2V0dGluZ3MoKVwiXHJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJyb3V0ZXIudXJsLmluY2x1ZGVzKCcvc2V0dGluZ3MnKSA/ICdpY29uX2FjdGl2ZV9jbGFzcycgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICBzdHlsZT1cImJhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwwLjYpOyBib3JkZXItcmFkaXVzOjEwcHg7XCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24gc3R5bGU9XCJiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCg5MGRlZywjZjc5YTZiLCNmMTU4MGMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgLXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6dGV4dDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgIC13ZWJraXQtdGV4dC1maWxsLWNvbG9yOnRyYW5zcGFyZW50O1wiPnNldHRpbmdzPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gTXkgV29yayAtLT5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiY2FuQWNjZXNzX2ZlYXR1cmVfTXlQcm9qZWN0V29ya1wiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBtYXRUb29sdGlwPVwie3sgJ1NIRUxMLk1ZV09SSycgfCB0cmFuc2xhdGUgfX1cIiAoY2xpY2spPVwibmF2aWdhdGVUb1N0YXR1c1JlcG9ydCgpXCJcclxuICAgICAgICAgICAgICAgIHN0eWxlPVwiYmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LDAuNik7IGJvcmRlci1yYWRpdXM6MTBweDtcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdHlsZT1cImJhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDkwZGVnLCNmNzlhNmIsI2YxNTgwYyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAtd2Via2l0LWJhY2tncm91bmQtY2xpcDp0ZXh0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgLXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnQ7XCI+YXNzaWdubWVudDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIFRpbWVzaGVldCAtLT5cclxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBpZD1cImZlZWRUaW1lU2hlZXRDb21wb25lbnRcIiBtYXRUb29sdGlwPVwie3sgJ1NIRUxMLkxPR1RJTUUnIHwgdHJhbnNsYXRlfX1cIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwib3BlblRpbWVTaGVldCgpXCIgW3NhdFBvcG92ZXJBbmNob3JGb3JdPVwiZmVlZFRpbWVTaGVldFwiXHJcbiAgICAgICAgICAgIHN0eWxlPVwiYmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LDAuNik7IGJvcmRlci1yYWRpdXM6MTBweDtcIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uIHN0eWxlPVwiYmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoOTBkZWcsI2Y3OWE2YiwjZjE1ODBjKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAtd2Via2l0LWJhY2tncm91bmQtY2xpcDp0ZXh0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgIC13ZWJraXQtdGV4dC1maWxsLWNvbG9yOnRyYW5zcGFyZW50O1wiPmFjY2Vzc190aW1lPC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgPCEtLSBOb3RpZmljYXRpb25zIC0tPlxyXG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIG1hdFRvb2x0aXA9XCJ7eyAnU0hFTEwuTk9USUZJQ0FUSU9OUycgfCB0cmFuc2xhdGV9fVwiIChjbGljayk9XCJ0b2dnbGVOb3RpZmljKClcIlxyXG4gICAgICAgICAgICAqbmdJZj1cIm5ld05vdGlmaWNhdGlvbnNDb3VudCAhPSAwXCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm5vdGlmaWNhdGlvblwiXHJcbiAgICAgICAgICAgIHN0eWxlPVwicG9zaXRpb246cmVsYXRpdmU7IGJhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwwLjYpOyBib3JkZXItcmFkaXVzOjEwcHg7XCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbiBzdHlsZT1cImJhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDkwZGVnLCNmNzlhNmIsI2YxNTgwYyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgLXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6dGV4dDtcclxuICAgICAgICAgICAgICAgICAgICAgICAtd2Via2l0LXRleHQtZmlsbC1jb2xvcjp0cmFuc3BhcmVudDtcIj5ub3RpZmljYXRpb25zPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJuZXdOb3RpZmljYXRpb25zQ291bnQgIT0gMFwiIGNsYXNzPVwibm90aWZpY2F0aW9uLW51bWJlciBtYXQtYmctd2FyblwiXHJcbiAgICAgICAgICAgICAgICBzdHlsZT1cInBvc2l0aW9uOmFic29sdXRlOyB0b3A6LTJweDsgcmlnaHQ6LTJweDtcIj5cclxuICAgICAgICAgICAgICAgIHt7IG5ld05vdGlmaWNhdGlvbnNDb3VudCB9fVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPG1hdC1tZW51ICNub3RpZmljYXRpb249XCJtYXRNZW51XCI+XHJcbiAgICAgICAgICAgIDxhcHAtbm90aWZpY2F0aW9ucz48L2FwcC1ub3RpZmljYXRpb25zPlxyXG4gICAgICAgIDwvbWF0LW1lbnU+XHJcblxyXG4gICAgICAgIDwhLS0gUHJvZmlsZSAtLT5cclxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwiYWNjb3VudE1lbnVcIiAqbmdJZj1cImF1dGhlbnRpY2F0ZWRVc2VyUmVjb3JkXCIgc3R5bGU9XCJ3aWR0aDozMnB4OyBoZWlnaHQ6MzJweDsgYmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LDAuNik7XHJcbiAgICAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOjUwJTsgYm9yZGVyOjFweCBzb2xpZCAjZTVlN2ViO1xyXG4gICAgICAgICAgICAgICAgICAgZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGp1c3RpZnktY29udGVudDpjZW50ZXI7IG92ZXJmbG93OmhpZGRlbjtcIj5cclxuICAgICAgICAgICAgPGltZyAqbmdJZj1cImF1dGhlbnRpY2F0ZWRVc2VyUmVjb3JkLnByb2ZpbGVJbWFnZVwiXHJcbiAgICAgICAgICAgICAgICBbc3JjXT1cImF1dGhlbnRpY2F0ZWRVc2VyUmVjb3JkLnByb2ZpbGVJbWFnZSB8IGZldGNoU2l6ZWRBbmRDYWNoZWRJbWFnZTogJzYwJzonJ1wiIGFsdD1cInByb2ZpbGUgaW1hZ2VcIlxyXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDoyOHB4OyBoZWlnaHQ6MjhweDsgYm9yZGVyLXJhZGl1czo1MCU7XCIgLz5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFhdXRoZW50aWNhdGVkVXNlclJlY29yZC5wcm9maWxlSW1hZ2VcIj5cclxuICAgICAgICAgICAgICAgIDxhcHAtYXZhdGFyIFtuYW1lXT1cImF1dGhlbnRpY2F0ZWRVc2VyUmVjb3JkLmZ1bGxOYW1lIHwgcmVtb3ZlU3BlY2lhbENoYXJhY3RlcnNcIiBbaXNSb3VuZF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICBzaXplPVwiMjZcIj48L2FwcC1hdmF0YXI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbjwvbWF0LXRvb2xiYXI+XHJcblxyXG48IS0tIFRpbWVzaGVldCBQb3BvdmVyIC0tPlxyXG48c2F0LXBvcG92ZXIgI2ZlZWRUaW1lU2hlZXQgW2F1dG9Gb2N1c109XCJmYWxzZVwiIGhhc0JhY2tkcm9wIFtyZXN0b3JlRm9jdXNdPVwiZmFsc2VcIiBbaW50ZXJhY3RpdmVDbG9zZV09XCJ0cnVlXCJcclxuICAgIHNjcm9sbFN0cmF0ZWd5PVwicmVwb3NpdGlvblwiIHZlcnRpY2FsQWxpZ249XCJiZWxvd1wiIGhvcml6b250YWxBbGlnbj1cImJlZm9yZVwiPlxyXG4gICAgPGFwcC1mZWVkLXRpbWUgKGNsb3NlRmVlZFRpbWVTaGVldFBvcHVwKT1cImNsb3NlRmVlZFRpbWVTaGVldCgpXCIgW2lzRmVlZFRpbWVTaGVldF09XCJpc0ZlZWRUaW1lU2hlZXRcIj48L2FwcC1mZWVkLXRpbWU+XHJcbjwvc2F0LXBvcG92ZXI+XHJcblxyXG48IS0tIFByb2ZpbGUgTWVudSAtLT5cclxuPG1hdC1tZW51ICNhY2NvdW50TWVudT1cIm1hdE1lbnVcIj5cclxuICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwibmF2aWdhdGVUb1Byb2ZpbGUoKVwiPlxyXG4gICAgICAgIDxtYXQtaWNvbj5hY2NvdW50X2JveDwvbWF0LWljb24+XHJcbiAgICAgICAgPHNwYW4+e3sgJ1NIRUxMLlBST0ZJTEUnIHwgdHJhbnNsYXRlfX08L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwib25OYXZpZ2F0ZVRvQmlsbGluZ1NjcmVlbigpXCIgKm5nSWY9XCJjYW5BY2Nlc3NfZmVhdHVyZV9NYW5hZ2VBY2NvdW50c0FuZEJpbGxpbmdcIj5cclxuICAgICAgICA8bWF0LWljb24+YWNjb3VudF9iYWxhbmNlPC9tYXQtaWNvbj5cclxuICAgICAgICA8c3Bhbj5BY2NvdW50ICYgQmlsbGluZzwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJvbk5hdmlnYXRlVG9QcmljaW5nU2NyZWVuKClcIiAqbmdJZj1cImNhbkFjY2Vzc19mZWF0dXJlX01hbmFnZUFjY291bnRzQW5kQmlsbGluZ1wiPlxyXG4gICAgICAgIDxtYXQtaWNvbj5hY2NvdW50X2JhbGFuY2Vfd2FsbGV0PC9tYXQtaWNvbj5cclxuICAgICAgICA8c3Bhbj5QcmljaW5nICYgRmVhdHVyZXM8L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwib25TaWdub3V0KClcIj5cclxuICAgICAgICA8bWF0LWljb24+ZXhpdF90b19hcHA8L21hdC1pY29uPlxyXG4gICAgICAgIDxzcGFuPnt7ICdTSEVMTC5TSUdOT1VUJyB8IHRyYW5zbGF0ZX19PC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiZmVlZEJhY2tQb3BPdmVyLnRvZ2dsZSgpO29wZW5GZWVkQmFja0RpYWxvZygpXCI+XHJcbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiZmVlZGJhY2staWNvblwiIFtzYXRQb3BvdmVyQW5jaG9yRm9yXT1cImZlZWRCYWNrUG9wT3ZlclwiPlxyXG4gICAgICAgICAgICBzZW50aW1lbnRfc2F0aXNmaWVkX2FsdFxyXG4gICAgICAgIDwvbWF0LWljb24+XHJcbiAgICAgICAgPHNwYW4+di17e2FwcGxpY2F0aW9uVmVyc2lvbn19PC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbjwvbWF0LW1lbnU+XHJcblxyXG48IS0tIEZlZWRiYWNrIFBvcG92ZXIgLS0+XHJcbjxzYXQtcG9wb3ZlciAjZmVlZEJhY2tQb3BPdmVyIHZlcnRpY2FsQWxpZ249XCJiZWxvd1wiIGhhc0JhY2tkcm9wIGJhY2tkcm9wQ2xhc3M9XCJiYWNrZHJvcC1jb2xvclwiXHJcbiAgICBbaW50ZXJhY3RpdmVDbG9zZV09XCJmYWxzZVwiIGhvcml6b250YWxBbGlnbj1cImVuZFwiPlxyXG4gICAgPGFwcC1zdWJtaXQtZmVlZGJhY2sgKm5nSWY9XCJpc0ZlZWRCYWNrRGlhbG9nXCIgKGNsb3NlRGlhbG9nKT1cImNsb3NlRmVlZEJhY2tsb2dEaWFsb2coKVwiPjwvYXBwLXN1Ym1pdC1mZWVkYmFjaz5cclxuPC9zYXQtcG9wb3Zlcj4iXX0=