@schneideress/dashboardframework 17.0.34 → 17.0.36

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.
@@ -653,9 +653,6 @@ export class RAWidgetContainer {
653
653
  this.isGridDownloadVisible = true;
654
654
  this.showExcell = false;
655
655
  }
656
- if (this.dashboardInfo.templateName == 'Emission Report') {
657
- this.showSettingsLink = false;
658
- }
659
656
  }
660
657
  downloadIconClicked(type) {
661
658
  switch (type) {
@@ -894,11 +891,11 @@ export class RAWidgetContainer {
894
891
  return item;
895
892
  }
896
893
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: RAWidgetContainer, deps: [{ token: i1.RaDashboardService }, { token: i2.NgxUiLoaderService }, { token: i3.RATranslateService }, { token: i0.NgZone }, { token: i4.NotifierService }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: i3.RAPermissionService }, { token: i3.DomService }], target: i0.ɵɵFactoryTarget.Component }); }
897
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: RAWidgetContainer, selector: "ra-widget-container", inputs: { widgetInstanceId: ["widget-instance-id", "widgetInstanceId"], globalFilter: ["global-filter", "globalFilter"], dashboardInfo: ["dashboard-info", "dashboardInfo"], data: "data", raDashboardEventBus: ["event-bus", "raDashboardEventBus"], appConfig: ["app-config", "appConfig"], width: ["widget-width", "width"], height: ["widget-height", "height"], gridCellHeight: ["grid-cell-height", "gridCellHeight"], bulkActionData: ["bulk-action-data", "bulkActionData"], canLoadData: "canLoadData", setResized: ["dom-resized", "setResized"] }, outputs: { widgetDeleted: "widgetDeleted", updateAppliedFilters: "updateAppliedFilters", dataLoaded: "dataLoaded", widgetLoaded: "widgetLoaded" }, viewQueries: [{ propertyName: "ctlWidget", first: true, predicate: ["ctlWidget"], descendants: true }, { propertyName: "ctlWidgetModule", first: true, predicate: ["ctlWidgetModule"], descendants: true, read: ViewContainerRef }, { propertyName: "widgetDropdown", first: true, predicate: ["widgetDropdown"], descendants: true }, { propertyName: "searchInput", first: true, predicate: ["searchInput"], descendants: true }, { propertyName: "wcWrapper", first: true, predicate: ["wcWrapper"], descendants: true }, { propertyName: "banPopupDiv", first: true, predicate: ["banPopupDiv"], descendants: true }, { propertyName: "lockPopupDiv", first: true, predicate: ["lockPopupDiv"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div #wcWrapper class=\"wc-wrapper\" (mouseenter)=\"mouseHover(true)\" (mouseleave)=\"mouseHover(false)\"\r\n [ngStyle]=\"{'margin-left': noPadding?'0px':'15px','margin-right': noPadding?'0px':'15px'}\">\r\n <div class=\"wcheader widget-move\" *ngIf=\"!hideTitle\"\r\n [ngClass]=\"{'underLine': enableTitleLine || isWidgetStateApplicable}\">\r\n <div class=\"col-md-12\" [ngClass]=\"{'wc-mover' : isWidgetCanMove }\" style=\"padding-left: 0px;height:inherit;padding-right: 0px;\">\r\n <div style=\"display:flex;margin-top:10px;\"\r\n [ngStyle]=\"{'margin-left': noPadding?'15px':'0px','margin-right': noPadding?'15px':'0px'}\">\r\n <div class=\"col-9 float-left title-label\">\r\n <ra-tooltip [value]=\"toolTipValue\" [width]=\"toolTipWidth\">\r\n <div [hidden]=\"hideTitle\" style=\"text-overflow: ellipsis;white-space: nowrap;overflow: hidden;\"\r\n (mouseover)=\"mouseOver($event)\" #searchInput>{{WidgetDisplayName}}</div>\r\n </ra-tooltip>\r\n </div>\r\n <div class=\"col-3\" style=\"cursor:default;padding-right: 0px;\"> \r\n <div class=\"float-right\" style=\"display: flex;\">\r\n <div #banPopupDiv (mouseover)=\"openPopup(inapplicableIconTitle,inapplicableFilters,inapplicableIconFooter,'innaplicable')\" (mouseout)=\"closePopup()\" class=\"title-bar-lock-icon lock-dropdown\" [hidden]=\"!inapplicableFilters || inapplicableFilters.length == 0 || !globalFilter || globalFilter == '{}'\">\r\n <i class=\"fal fa-ban lock\"></i> \r\n </div>\r\n <div #lockPopupDiv (mouseover)=\"openPopup(lockIconTitle,lockDetails,lockIconFooter,'lock',lockTemplateInfo)\" (mouseout)=\"closePopup()\" class=\"title-bar-lock-icon lock-dropdown\" [hidden]=\"(!lockDetails && !lockTemplateInfo) || hideLock\">\r\n <i class=\"fal fa-lock lock\"></i> \r\n </div>\r\n <div class=\"widget-menu\" style=\"width:10px;\"\r\n [ngClass]=\"{'widget-menu-show': isMouseHover && showSettingsLink}\">\r\n <div class=\"dropbtn title-bar-icon\">\r\n <i (click)=\"showDropDown($event)\" #widgetDropdown class=\"fal fa-ellipsis-v widget-menu-ellipse\"></i>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"hideTitle && !showOnlyDropdown\" class=\"wcheader widget-move\"\r\n style=\"height: 45px;width: 95%;cursor: move;z-index: 99;opacity: 0;\">\r\n </div>\r\n <div *ngIf=\"hideTitle || showOnlyDropdown\" class=\"widget-menu widget-menu-title-hidden\" [ngClass]=\"{'widget-menu-show': isMouseHover && showSettingsLink}\">\r\n <div class=\"dropbtn title-bar-icon\">\r\n <i (click)=\"showDropDown($event)\" class=\"fal fa-ellipsis-v\" style=\"text-align: center;\"></i>\r\n </div>\r\n </div>\r\n <div class=\"wcBody\" [ngStyle]=\"{'bottom': noPadding?'0px':'10px','top':hideTitle || showOnlyDropdown?'10px':'46px'}\">\r\n <div [hidden]=\"isWidgetStateApplicable\" class=\"m-fadeOut widget-overlay\" [ngClass]=\"{'m-fadeIn': showPanel}\">\r\n <div class=\"lds-roller\">\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n </div>\r\n </div>\r\n <div class=\"wc\" [hidden]=\"isWidgetStateApplicable\">\r\n <div [hidden]=\"!isCustomElement\" #ctlWidget></div>\r\n <div [hidden]=\"isCustomElement\">\r\n <ng-container #ctlWidgetModule></ng-container>\r\n </div>\r\n </div>\r\n <div *ngIf=\"isWidgetStateApplicable\" class=\"defaultConfig\">\r\n <ra-widget-state style=\"width: 100%;height: 100%;\" [isWidgetStateApplicable]=\"isWidgetStateApplicable\"\r\n [isGlobalFilterApplied]=\"isGlobalFilterApplied\" [widgetEmptyState]=\"widgetEmptyState\"\r\n (editWidgetClicked)=editWidget() [widthCol]=\"width\" [heightCol]=\"height\">\r\n </ra-widget-state>\r\n </div>\r\n <div>\r\n </div>\r\n </div>\r\n</div>", dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i6.TooltipControl, selector: "ra-tooltip", inputs: ["data", "url", "value", "key", "dataField", "position", "width", "count", "moreItemText", "reset", "disable-tooltip", "set-top-padding"], outputs: ["dataLoaded"] }, { kind: "component", type: i6.WidgetStateControl, selector: "ra-widget-state", inputs: ["isWidgetStateApplicable", "isGlobalFilterApplied", "widgetEmptyState", "widgetEmptyDataText", "widthCol", "heightCol"], outputs: ["editWidgetClicked"] }] }); }
894
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: RAWidgetContainer, selector: "ra-widget-container", inputs: { widgetInstanceId: ["widget-instance-id", "widgetInstanceId"], globalFilter: ["global-filter", "globalFilter"], dashboardInfo: ["dashboard-info", "dashboardInfo"], data: "data", raDashboardEventBus: ["event-bus", "raDashboardEventBus"], appConfig: ["app-config", "appConfig"], width: ["widget-width", "width"], height: ["widget-height", "height"], gridCellHeight: ["grid-cell-height", "gridCellHeight"], bulkActionData: ["bulk-action-data", "bulkActionData"], canLoadData: "canLoadData", setResized: ["dom-resized", "setResized"] }, outputs: { widgetDeleted: "widgetDeleted", updateAppliedFilters: "updateAppliedFilters", dataLoaded: "dataLoaded", widgetLoaded: "widgetLoaded" }, viewQueries: [{ propertyName: "ctlWidget", first: true, predicate: ["ctlWidget"], descendants: true }, { propertyName: "ctlWidgetModule", first: true, predicate: ["ctlWidgetModule"], descendants: true, read: ViewContainerRef }, { propertyName: "widgetDropdown", first: true, predicate: ["widgetDropdown"], descendants: true }, { propertyName: "searchInput", first: true, predicate: ["searchInput"], descendants: true }, { propertyName: "wcWrapper", first: true, predicate: ["wcWrapper"], descendants: true }, { propertyName: "banPopupDiv", first: true, predicate: ["banPopupDiv"], descendants: true }, { propertyName: "lockPopupDiv", first: true, predicate: ["lockPopupDiv"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div #wcWrapper class=\"wc-wrapper\" (mouseenter)=\"mouseHover(true)\" (mouseleave)=\"mouseHover(false)\"\r\n [ngStyle]=\"{'margin-left': noPadding?'0px':'15px','margin-right': noPadding?'0px':'15px'}\">\r\n <div class=\"wcheader widget-move\" *ngIf=\"!hideTitle && !showOnlyDropdown\"\r\n [ngClass]=\"{'underLine': enableTitleLine || isWidgetStateApplicable}\">\r\n <div class=\"col-md-12\" [ngClass]=\"{'wc-mover' : isWidgetCanMove }\" style=\"padding-left: 0px;height:inherit;padding-right: 0px;\">\r\n <div style=\"display:flex;margin-top:10px;\"\r\n [ngStyle]=\"{'margin-left': noPadding?'15px':'0px','margin-right': noPadding?'15px':'0px'}\">\r\n <div class=\"col-9 float-left title-label\">\r\n <ra-tooltip [value]=\"toolTipValue\" [width]=\"toolTipWidth\">\r\n <div [hidden]=\"hideTitle\" style=\"text-overflow: ellipsis;white-space: nowrap;overflow: hidden;\"\r\n (mouseover)=\"mouseOver($event)\" #searchInput>{{WidgetDisplayName}}</div>\r\n </ra-tooltip>\r\n </div>\r\n <div class=\"col-3\" style=\"cursor:default;padding-right: 0px;\"> \r\n <div class=\"float-right\" style=\"display: flex;\">\r\n <div #banPopupDiv (mouseover)=\"openPopup(inapplicableIconTitle,inapplicableFilters,inapplicableIconFooter,'innaplicable')\" (mouseout)=\"closePopup()\" class=\"title-bar-lock-icon lock-dropdown\" [hidden]=\"!inapplicableFilters || inapplicableFilters.length == 0 || !globalFilter || globalFilter == '{}'\">\r\n <i class=\"fal fa-ban lock\"></i> \r\n </div>\r\n <div #lockPopupDiv (mouseover)=\"openPopup(lockIconTitle,lockDetails,lockIconFooter,'lock',lockTemplateInfo)\" (mouseout)=\"closePopup()\" class=\"title-bar-lock-icon lock-dropdown\" [hidden]=\"(!lockDetails && !lockTemplateInfo) || hideLock\">\r\n <i class=\"fal fa-lock lock\"></i> \r\n </div>\r\n <div class=\"widget-menu\" style=\"width:10px;\"\r\n [ngClass]=\"{'widget-menu-show': isMouseHover && showSettingsLink}\">\r\n <div class=\"dropbtn title-bar-icon\">\r\n <i (click)=\"showDropDown($event)\" #widgetDropdown class=\"fal fa-ellipsis-v widget-menu-ellipse\"></i>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"hideTitle && !showOnlyDropdown\" class=\"wcheader widget-move\"\r\n style=\"height: 45px;width: 95%;cursor: move;z-index: 99;opacity: 0;\">\r\n </div>\r\n <div *ngIf=\"hideTitle && !showOnlyDropdown\" class=\"widget-menu widget-menu-title-hidden\" [ngClass]=\"{'widget-menu-show': isMouseHover && showSettingsLink}\">\r\n <div class=\"dropbtn title-bar-icon\">\r\n <i (click)=\"showDropDown($event)\" class=\"fal fa-ellipsis-v\" style=\"text-align: center;\"></i>\r\n </div>\r\n </div>\r\n <div class=\"wcBody\" [ngStyle]=\"{'bottom': noPadding?'0px':'10px','top':hideTitle || showOnlyDropdown?'10px':'46px'}\">\r\n <div [hidden]=\"isWidgetStateApplicable\" class=\"m-fadeOut widget-overlay\" [ngClass]=\"{'m-fadeIn': showPanel}\">\r\n <div class=\"lds-roller\">\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n </div>\r\n </div>\r\n <div class=\"wc\" [hidden]=\"isWidgetStateApplicable\">\r\n <div [hidden]=\"!isCustomElement\" #ctlWidget></div>\r\n <div [hidden]=\"isCustomElement\">\r\n <ng-container #ctlWidgetModule></ng-container>\r\n </div>\r\n </div>\r\n <div *ngIf=\"isWidgetStateApplicable\" class=\"defaultConfig\">\r\n <ra-widget-state style=\"width: 100%;height: 100%;\" [isWidgetStateApplicable]=\"isWidgetStateApplicable\"\r\n [isGlobalFilterApplied]=\"isGlobalFilterApplied\" [widgetEmptyState]=\"widgetEmptyState\"\r\n (editWidgetClicked)=editWidget() [widthCol]=\"width\" [heightCol]=\"height\">\r\n </ra-widget-state>\r\n </div>\r\n <div>\r\n </div>\r\n </div>\r\n</div>", dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i6.TooltipControl, selector: "ra-tooltip", inputs: ["data", "url", "value", "key", "dataField", "position", "width", "count", "moreItemText", "reset", "disable-tooltip", "set-top-padding"], outputs: ["dataLoaded"] }, { kind: "component", type: i6.WidgetStateControl, selector: "ra-widget-state", inputs: ["isWidgetStateApplicable", "isGlobalFilterApplied", "widgetEmptyState", "widgetEmptyDataText", "widthCol", "heightCol"], outputs: ["editWidgetClicked"] }] }); }
898
895
  }
899
896
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: RAWidgetContainer, decorators: [{
900
897
  type: Component,
901
- args: [{ selector: 'ra-widget-container', template: "<div #wcWrapper class=\"wc-wrapper\" (mouseenter)=\"mouseHover(true)\" (mouseleave)=\"mouseHover(false)\"\r\n [ngStyle]=\"{'margin-left': noPadding?'0px':'15px','margin-right': noPadding?'0px':'15px'}\">\r\n <div class=\"wcheader widget-move\" *ngIf=\"!hideTitle\"\r\n [ngClass]=\"{'underLine': enableTitleLine || isWidgetStateApplicable}\">\r\n <div class=\"col-md-12\" [ngClass]=\"{'wc-mover' : isWidgetCanMove }\" style=\"padding-left: 0px;height:inherit;padding-right: 0px;\">\r\n <div style=\"display:flex;margin-top:10px;\"\r\n [ngStyle]=\"{'margin-left': noPadding?'15px':'0px','margin-right': noPadding?'15px':'0px'}\">\r\n <div class=\"col-9 float-left title-label\">\r\n <ra-tooltip [value]=\"toolTipValue\" [width]=\"toolTipWidth\">\r\n <div [hidden]=\"hideTitle\" style=\"text-overflow: ellipsis;white-space: nowrap;overflow: hidden;\"\r\n (mouseover)=\"mouseOver($event)\" #searchInput>{{WidgetDisplayName}}</div>\r\n </ra-tooltip>\r\n </div>\r\n <div class=\"col-3\" style=\"cursor:default;padding-right: 0px;\"> \r\n <div class=\"float-right\" style=\"display: flex;\">\r\n <div #banPopupDiv (mouseover)=\"openPopup(inapplicableIconTitle,inapplicableFilters,inapplicableIconFooter,'innaplicable')\" (mouseout)=\"closePopup()\" class=\"title-bar-lock-icon lock-dropdown\" [hidden]=\"!inapplicableFilters || inapplicableFilters.length == 0 || !globalFilter || globalFilter == '{}'\">\r\n <i class=\"fal fa-ban lock\"></i> \r\n </div>\r\n <div #lockPopupDiv (mouseover)=\"openPopup(lockIconTitle,lockDetails,lockIconFooter,'lock',lockTemplateInfo)\" (mouseout)=\"closePopup()\" class=\"title-bar-lock-icon lock-dropdown\" [hidden]=\"(!lockDetails && !lockTemplateInfo) || hideLock\">\r\n <i class=\"fal fa-lock lock\"></i> \r\n </div>\r\n <div class=\"widget-menu\" style=\"width:10px;\"\r\n [ngClass]=\"{'widget-menu-show': isMouseHover && showSettingsLink}\">\r\n <div class=\"dropbtn title-bar-icon\">\r\n <i (click)=\"showDropDown($event)\" #widgetDropdown class=\"fal fa-ellipsis-v widget-menu-ellipse\"></i>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"hideTitle && !showOnlyDropdown\" class=\"wcheader widget-move\"\r\n style=\"height: 45px;width: 95%;cursor: move;z-index: 99;opacity: 0;\">\r\n </div>\r\n <div *ngIf=\"hideTitle || showOnlyDropdown\" class=\"widget-menu widget-menu-title-hidden\" [ngClass]=\"{'widget-menu-show': isMouseHover && showSettingsLink}\">\r\n <div class=\"dropbtn title-bar-icon\">\r\n <i (click)=\"showDropDown($event)\" class=\"fal fa-ellipsis-v\" style=\"text-align: center;\"></i>\r\n </div>\r\n </div>\r\n <div class=\"wcBody\" [ngStyle]=\"{'bottom': noPadding?'0px':'10px','top':hideTitle || showOnlyDropdown?'10px':'46px'}\">\r\n <div [hidden]=\"isWidgetStateApplicable\" class=\"m-fadeOut widget-overlay\" [ngClass]=\"{'m-fadeIn': showPanel}\">\r\n <div class=\"lds-roller\">\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n </div>\r\n </div>\r\n <div class=\"wc\" [hidden]=\"isWidgetStateApplicable\">\r\n <div [hidden]=\"!isCustomElement\" #ctlWidget></div>\r\n <div [hidden]=\"isCustomElement\">\r\n <ng-container #ctlWidgetModule></ng-container>\r\n </div>\r\n </div>\r\n <div *ngIf=\"isWidgetStateApplicable\" class=\"defaultConfig\">\r\n <ra-widget-state style=\"width: 100%;height: 100%;\" [isWidgetStateApplicable]=\"isWidgetStateApplicable\"\r\n [isGlobalFilterApplied]=\"isGlobalFilterApplied\" [widgetEmptyState]=\"widgetEmptyState\"\r\n (editWidgetClicked)=editWidget() [widthCol]=\"width\" [heightCol]=\"height\">\r\n </ra-widget-state>\r\n </div>\r\n <div>\r\n </div>\r\n </div>\r\n</div>" }]
898
+ args: [{ selector: 'ra-widget-container', template: "<div #wcWrapper class=\"wc-wrapper\" (mouseenter)=\"mouseHover(true)\" (mouseleave)=\"mouseHover(false)\"\r\n [ngStyle]=\"{'margin-left': noPadding?'0px':'15px','margin-right': noPadding?'0px':'15px'}\">\r\n <div class=\"wcheader widget-move\" *ngIf=\"!hideTitle && !showOnlyDropdown\"\r\n [ngClass]=\"{'underLine': enableTitleLine || isWidgetStateApplicable}\">\r\n <div class=\"col-md-12\" [ngClass]=\"{'wc-mover' : isWidgetCanMove }\" style=\"padding-left: 0px;height:inherit;padding-right: 0px;\">\r\n <div style=\"display:flex;margin-top:10px;\"\r\n [ngStyle]=\"{'margin-left': noPadding?'15px':'0px','margin-right': noPadding?'15px':'0px'}\">\r\n <div class=\"col-9 float-left title-label\">\r\n <ra-tooltip [value]=\"toolTipValue\" [width]=\"toolTipWidth\">\r\n <div [hidden]=\"hideTitle\" style=\"text-overflow: ellipsis;white-space: nowrap;overflow: hidden;\"\r\n (mouseover)=\"mouseOver($event)\" #searchInput>{{WidgetDisplayName}}</div>\r\n </ra-tooltip>\r\n </div>\r\n <div class=\"col-3\" style=\"cursor:default;padding-right: 0px;\"> \r\n <div class=\"float-right\" style=\"display: flex;\">\r\n <div #banPopupDiv (mouseover)=\"openPopup(inapplicableIconTitle,inapplicableFilters,inapplicableIconFooter,'innaplicable')\" (mouseout)=\"closePopup()\" class=\"title-bar-lock-icon lock-dropdown\" [hidden]=\"!inapplicableFilters || inapplicableFilters.length == 0 || !globalFilter || globalFilter == '{}'\">\r\n <i class=\"fal fa-ban lock\"></i> \r\n </div>\r\n <div #lockPopupDiv (mouseover)=\"openPopup(lockIconTitle,lockDetails,lockIconFooter,'lock',lockTemplateInfo)\" (mouseout)=\"closePopup()\" class=\"title-bar-lock-icon lock-dropdown\" [hidden]=\"(!lockDetails && !lockTemplateInfo) || hideLock\">\r\n <i class=\"fal fa-lock lock\"></i> \r\n </div>\r\n <div class=\"widget-menu\" style=\"width:10px;\"\r\n [ngClass]=\"{'widget-menu-show': isMouseHover && showSettingsLink}\">\r\n <div class=\"dropbtn title-bar-icon\">\r\n <i (click)=\"showDropDown($event)\" #widgetDropdown class=\"fal fa-ellipsis-v widget-menu-ellipse\"></i>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"hideTitle && !showOnlyDropdown\" class=\"wcheader widget-move\"\r\n style=\"height: 45px;width: 95%;cursor: move;z-index: 99;opacity: 0;\">\r\n </div>\r\n <div *ngIf=\"hideTitle && !showOnlyDropdown\" class=\"widget-menu widget-menu-title-hidden\" [ngClass]=\"{'widget-menu-show': isMouseHover && showSettingsLink}\">\r\n <div class=\"dropbtn title-bar-icon\">\r\n <i (click)=\"showDropDown($event)\" class=\"fal fa-ellipsis-v\" style=\"text-align: center;\"></i>\r\n </div>\r\n </div>\r\n <div class=\"wcBody\" [ngStyle]=\"{'bottom': noPadding?'0px':'10px','top':hideTitle || showOnlyDropdown?'10px':'46px'}\">\r\n <div [hidden]=\"isWidgetStateApplicable\" class=\"m-fadeOut widget-overlay\" [ngClass]=\"{'m-fadeIn': showPanel}\">\r\n <div class=\"lds-roller\">\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n </div>\r\n </div>\r\n <div class=\"wc\" [hidden]=\"isWidgetStateApplicable\">\r\n <div [hidden]=\"!isCustomElement\" #ctlWidget></div>\r\n <div [hidden]=\"isCustomElement\">\r\n <ng-container #ctlWidgetModule></ng-container>\r\n </div>\r\n </div>\r\n <div *ngIf=\"isWidgetStateApplicable\" class=\"defaultConfig\">\r\n <ra-widget-state style=\"width: 100%;height: 100%;\" [isWidgetStateApplicable]=\"isWidgetStateApplicable\"\r\n [isGlobalFilterApplied]=\"isGlobalFilterApplied\" [widgetEmptyState]=\"widgetEmptyState\"\r\n (editWidgetClicked)=editWidget() [widthCol]=\"width\" [heightCol]=\"height\">\r\n </ra-widget-state>\r\n </div>\r\n <div>\r\n </div>\r\n </div>\r\n</div>" }]
902
899
  }], ctorParameters: () => [{ type: i1.RaDashboardService }, { type: i2.NgxUiLoaderService }, { type: i3.RATranslateService }, { type: i0.NgZone }, { type: i4.NotifierService }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: i3.RAPermissionService }, { type: i3.DomService }], propDecorators: { ctlWidget: [{
903
900
  type: ViewChild,
904
901
  args: ['ctlWidget', { static: false }]
@@ -964,4 +961,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
964
961
  type: Input,
965
962
  args: ['dom-resized']
966
963
  }] } });
967
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmEud2lkZ2V0LmNvbnRhaW5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yYS1kYXNoYm9hcmQtZnJhbWV3b3JrL3NyYy9saWIvcmEtd2lkZ2V0LWNvbnRhaW5lci9yYS53aWRnZXQuY29udGFpbmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JhLWRhc2hib2FyZC1mcmFtZXdvcmsvc3JjL2xpYi9yYS13aWRnZXQtY29udGFpbmVyL3JhLndpZGdldC5jb250YWluZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxNQUFNLEVBQW9HLGdCQUFnQixFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUc3TyxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3ZELE9BQU8sRUFBZ0QsY0FBYyxFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBK0MsTUFBTSwrQkFBK0IsQ0FBQztBQUlqTixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUNBQXVDLENBQUE7QUFDbkUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7Ozs7Ozs7O0FBU3pFLE1BQU0sT0FBTyxpQkFBaUI7SUEyRjVCLElBQ0ksVUFBVSxDQUFDLE9BQWdCO1FBQzdCLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxZQUFvQixnQkFBb0MsRUFDOUMsVUFBOEIsRUFDOUIsZ0JBQW9DLEVBQ3BDLE1BQWMsRUFDZCxRQUF5QixFQUN6QixRQUFtQixFQUNuQixHQUFzQixFQUN0QixtQkFBd0MsRUFDeEMsVUFBc0I7UUFSWixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQW9CO1FBQzlDLGVBQVUs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QWE7c0JBQXRCLE1BQU07Z0JBQ0csb0JBQW9CO3NCQUE3QixNQUFNO2dCQUVHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFlSCxVQUFVO3NCQURiLEtBQUs7dUJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgVmlld0NoaWxkLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIE91dHB1dCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBTaW1wbGVDaGFuZ2UsIE9uRGVzdHJveSwgTmdab25lLCBSZW5kZXJlcjIsIFRlbXBsYXRlUmVmLCBWaWV3Q29udGFpbmVyUmVmLCBDaGFuZ2VEZXRlY3RvclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSYURhc2hib2FyZFNlcnZpY2UgfSBmcm9tICcuLy4uL3JhLmRhc2hib2FyZC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUkFEYXNoYm9hcmRFdmVudEJ1cyB9IGZyb20gJy4uL3JhLmRhc2hiYXJkLmV2ZW50LmJ1cyc7XHJcbmltcG9ydCB7IFJBRXZlbnQsIFJBRXZlbnRLZXkgfSBmcm9tICcuLi9yYS5ldmVudC5lbnVtJztcclxuaW1wb3J0IHsgSUFwcENvbmZpZywgSVdpZGdldENvbmZpZ0ZpbHRlciwgSVdpZGdldEluZm8sIFJBRG93bmxvYWRUeXBlLCBSQURvd25sb2FkT3B0aW9uLCBSYVdpZGdldGxvY2tTdGF0dXMsIFdpZGdldFZpZXdTdGF0ZSwgSWNvbmZpZ0NoYW5nZXMsIElCdWxrQWN0aW9uLCBJRGFzaGJvYXJkSW5mbyB9IGZyb20gJ0BzY2huZWlkZXJlc3Mvd2lkZ2V0ZnJhbWV3b3JrJztcclxuaW1wb3J0IHsgTmd4VWlMb2FkZXJTZXJ2aWNlIH0gZnJvbSAnbmd4LXVpLWxvYWRlcic7XHJcbmltcG9ydCB7IE5vdGlmaWVyU2VydmljZSB9IGZyb20gJ2FuZ3VsYXItbm90aWZpZXInO1xyXG5pbXBvcnQgeyBSQVRyYW5zbGF0ZVNlcnZpY2UsIFJBUGVybWlzc2lvblNlcnZpY2UsIERvbVNlcnZpY2UgfSBmcm9tICdAc2NobmVpZGVyZXNzL3JhLWNvbW1vbic7XHJcbmltcG9ydCB7IExvY2tUb29sdGlwIH0gZnJvbSAnLi9sb2NrLXRvb2x0aXAvbG9jay50b29sdGlwLmNvbXBvbmVudCdcclxuaW1wb3J0IHsgbG9hZFJlbW90ZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyLWFyY2hpdGVjdHMvbW9kdWxlLWZlZGVyYXRpb24nO1xyXG5cclxuZGVjbGFyZSB2YXIgalF1ZXJ5OiBhbnk7XHJcbmRlY2xhcmUgdmFyIHdpbmRvdzogYW55O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdyYS13aWRnZXQtY29udGFpbmVyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcmEud2lkZ2V0LmNvbnRhaW5lci5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFJBV2lkZ2V0Q29udGFpbmVyIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcblxyXG4gIHB1YmxpYyBzaG93UGFuZWw6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHByaXZhdGUgaXNXaWRnZXRMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIHdpZGdldEVsZW1lbnQ6IGFueTtcclxuICBwcml2YXRlIGNvbmZpZ0NoYW5nZWQ6IGFueTtcclxuICBwdWJsaWMgd2lkZ2V0SGVpZ2h0ITogbnVtYmVyO1xyXG4gIHB1YmxpYyBsb2NrQ2xhc3M6IHN0cmluZyA9IFwidW5sb2NrZWRcIjtcclxuICBwdWJsaWMgbG9ja1N0YXR1czogUmFXaWRnZXRsb2NrU3RhdHVzID0gUmFXaWRnZXRsb2NrU3RhdHVzLlVubG9ja2VkO1xyXG4gIHB1YmxpYyBpc0Rvd25sb2FkSWNvblZpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgaXNDaGFydERvd25sb2FkVmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpc0dyaWREb3dubG9hZFZpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgZG93bmxvYWRJY29uVHlwZSE6IFJBRG93bmxvYWRUeXBlO1xyXG4gIHB1YmxpYyBlbmFibGVUaXRsZUxpbmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgaXNHbG9iYWxGaWx0ZXJBcHBsaWVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHRvb2xUaXBWYWx1ZTogc3RyaW5nID0gJyAgJztcclxuICBwdWJsaWMgdG9vbFRpcFdpZHRoOiBzdHJpbmcgPSAnMHB4JztcclxuICBwdWJsaWMgbG9ja0RldGFpbHM6IGFueTtcclxuICBwdWJsaWMgaGlkZUxvY2s6Ym9vbGVhbj1mYWxzZTtcclxuICBwdWJsaWMgbG9ja1RlbXBsYXRlSW5mbyE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgcHVibGljIGVkaXRUb29sVGlwVmFsdWU6IHN0cmluZyA9ICcgJztcclxuICBwdWJsaWMgY29weVRvb2xUaXBWYWx1ZTogc3RyaW5nID0gJyAnO1xyXG4gIHB1YmxpYyBtb3ZlVG9vbFRpcFZhbHVlOiBzdHJpbmcgPSAnICc7XHJcbiAgcHVibGljIGV4Y2VsVG9vbFRpcFZhbHVlOiBzdHJpbmcgPSAnICc7XHJcbiAgcHVibGljIGRlbGV0ZVRvb2xUaXBWYWx1ZTogc3RyaW5nID0gJyAnO1xyXG4gIHB1YmxpYyBlZGl0VGV4dDogc3RyaW5nID0gJyc7XHJcbiAgcHVibGljIGNvcHlUZXh0OiBzdHJpbmcgPSAnJztcclxuICBwdWJsaWMgbW92ZVRleHQ6IHN0cmluZyA9ICcnO1xyXG4gIHB1YmxpYyBleGNlbFRleHQ6IHN0cmluZyA9ICcnO1xyXG4gIHB1YmxpYyBkZWxldGVUZXh0OiBzdHJpbmcgPSAnJztcclxuICBwdWJsaWMgZWRpdFRvb2xUaXBXaWR0aDogc3RyaW5nID0gJzBweCc7XHJcbiAgcHVibGljIGNvcHlUb29sVGlwV2lkdGg6IHN0cmluZyA9ICcwcHgnO1xyXG4gIHB1YmxpYyBtb3ZlVG9vbFRpcFdpZHRoOiBzdHJpbmcgPSAnMHB4JztcclxuICBwdWJsaWMgZXhjZWxUb29sVGlwV2lkdGg6IHN0cmluZyA9ICcwcHgnO1xyXG4gIHB1YmxpYyBkZWxldGVUb29sVGlwV2lkdGg6IHN0cmluZyA9ICcwcHgnO1xyXG4gIHB1YmxpYyB3aWRnZXRTZXR0aW5nczogYW55O1xyXG4gIHB1YmxpYyBub1BhZGRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgaXNNb3VzZUhvdmVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHNob3dTZXR0aW5nc0xpbms6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHB1YmxpYyBpc0twaVZpZXc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgc2hvd0V4Y2VsbDogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHVibGljIGhpZGVUaXRsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpbmFwcGxpY2FibGVGaWx0ZXJzOiBhbnkgPSBbXTtcclxuICBwdWJsaWMgcG9wdXBJbnN0YW5jZSE6IExvY2tUb29sdGlwO1xyXG4gIHB1YmxpYyBjdXJyZW50Q29tcG9uZW50OiBhbnk7XHJcblxyXG4gIHB1YmxpYyBsb2NrSWNvblRpdGxlOiBhbnk7XHJcbiAgcHVibGljIGxvY2tJY29uRm9vdGVyOiBhbnk7XHJcbiAgcHVibGljIGluYXBwbGljYWJsZUljb25UaXRsZTogYW55O1xyXG4gIHB1YmxpYyBpbmFwcGxpY2FibGVJY29uRm9vdGVyOiBhbnk7XHJcbiAgcHVibGljIGlzQ3VzdG9tRWxlbWVudDogYW55ID0gZmFsc2U7XHJcbiAgcHVibGljIHNob3dPbmx5RHJvcGRvd246IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQFZpZXdDaGlsZCgnY3RsV2lkZ2V0JywgeyBzdGF0aWM6IGZhbHNlIH0pIGN0bFdpZGdldCE6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnY3RsV2lkZ2V0TW9kdWxlJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmLCBzdGF0aWM6IGZhbHNlIH0pIGN0bFdpZGdldE1vZHVsZSE6IFZpZXdDb250YWluZXJSZWY7XHJcbiAgQFZpZXdDaGlsZCgnd2lkZ2V0RHJvcGRvd24nLCB7IHN0YXRpYzogZmFsc2UgfSkgd2lkZ2V0RHJvcGRvd24hOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ3NlYXJjaElucHV0JywgeyBzdGF0aWM6IGZhbHNlIH0pIHNlYXJjaElucHV0ITogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCd3Y1dyYXBwZXInLCB7IHN0YXRpYzogZmFsc2UgfSkgd2NXcmFwcGVyITogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdiYW5Qb3B1cERpdicsIHsgc3RhdGljOiBmYWxzZSB9KSBiYW5Qb3B1cERpdiE6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnbG9ja1BvcHVwRGl2JywgeyBzdGF0aWM6IGZhbHNlIH0pIGxvY2tQb3B1cERpdiE6IEVsZW1lbnRSZWY7XHJcblxyXG4gIEBJbnB1dCgnd2lkZ2V0LWluc3RhbmNlLWlkJykgd2lkZ2V0SW5zdGFuY2VJZCE6IG51bWJlcjtcclxuICBASW5wdXQoJ2dsb2JhbC1maWx0ZXInKSBnbG9iYWxGaWx0ZXI6IGFueTtcclxuICBASW5wdXQoJ2Rhc2hib2FyZC1pbmZvJykgZGFzaGJvYXJkSW5mbyE6IElEYXNoYm9hcmRJbmZvO1xyXG4gIEBJbnB1dCgnZGF0YScpIGRhdGE6IGFueTtcclxuICBASW5wdXQoJ2V2ZW50LWJ1cycpIHJhRGFzaGJvYXJkRXZlbnRCdXMhOiBSQURhc2hib2FyZEV2ZW50QnVzO1xyXG4gIEBJbnB1dCgnYXBwLWNvbmZpZycpIGFwcENvbmZpZyE6IElBcHBDb25maWc7XHJcbiAgQElucHV0KCd3aWRnZXQtd2lkdGgnKSB3aWR0aCE6IG51bWJlcjtcclxuICBASW5wdXQoJ3dpZGdldC1oZWlnaHQnKSBoZWlnaHQhOiBudW1iZXI7XHJcbiAgQElucHV0KCdncmlkLWNlbGwtaGVpZ2h0JykgZ3JpZENlbGxIZWlnaHQhOiBudW1iZXI7XHJcbiAgQElucHV0KCdidWxrLWFjdGlvbi1kYXRhJykgYnVsa0FjdGlvbkRhdGEhOiBJQnVsa0FjdGlvbjtcclxuICBASW5wdXQoKSBjYW5Mb2FkRGF0YTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBAT3V0cHV0KCkgd2lkZ2V0RGVsZXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gIEBPdXRwdXQoKSB1cGRhdGVBcHBsaWVkRmlsdGVycyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBwdWJsaWMgbG9ja1RpdGxlITogc3RyaW5nO1xyXG4gIEBPdXRwdXQoKSBkYXRhTG9hZGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSB3aWRnZXRMb2FkZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIHB1YmxpYyBpc1dpZGdldFN0YXRlQXBwbGljYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpc1dpZGdldENhbk1vdmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgd2lkZ2V0RW1wdHlTdGF0ZTogc3RyaW5nID0gJyc7XHJcbiAgcHVibGljIGRvbVJlc2l6ZWQhOiBib29sZWFuO1xyXG4gIHB1YmxpYyBsb2NrVmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBsb2NrZWRGaWVsZHM6IGFueTtcclxuICBwdWJsaWMgZGV0YWlsUGFnZVVybCE6IHN0cmluZztcclxuICBwdWJsaWMgYmFzZVVybCE6IHN0cmluZztcclxuICBwdWJsaWMgaXNXaWRnZXRNZ21udDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBXaWRnZXREaXNwbGF5TmFtZSE6IHN0cmluZztcclxuICBwdWJsaWMgZW5hYmxlVGl0bGVMaW5lQWN0dWFsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHdpZGdldEVsZW1lbnRIYW5kbGVyOiBhbnk7XHJcbiAgQElucHV0KCdkb20tcmVzaXplZCcpXHJcbiAgc2V0IHNldFJlc2l6ZWQocmVzaXplZDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5pbnZva2VXaWRnZXRSZXNpemVkRXZlbnQoKTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZGFzaGJvYXJkU2VydmljZTogUmFEYXNoYm9hcmRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBuZ3hTZXJ2aWNlOiBOZ3hVaUxvYWRlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFJBVHJhbnNsYXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXHJcbiAgICBwcml2YXRlIG5vdGlmaWVyOiBOb3RpZmllclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIHJhUGVybWlzc2lvblNlcnZpY2U6IFJBUGVybWlzc2lvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGRvbVNlcnZpY2U6IERvbVNlcnZpY2UpIHtcclxuICAgIHRoaXMucmVuZGVyZXIubGlzdGVuKCd3aW5kb3cnLCAnY2xpY2snLCAoZTogYW55KSA9PiB7XHJcbiAgICAgIGlmIChlLnRhcmdldC5jbGFzc05hbWUpIHtcclxuICAgICAgICBpZiAoZS50YXJnZXQuY2xhc3NOYW1lICE9ICdmYWwgZmEtZWxsaXBzaXMtdiB3aWRnZXQtbWVudS1lbGxpcHNlJykge1xyXG4gICAgICAgICAgdGhpcy5yZW1vdmVNZW51KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMucmVtb3ZlTWVudSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLldpZGdldERpc3BsYXlOYW1lID0gdGhpcy5nZXR3aWRnZXRUaXRsZVRyYW5zbGF0aW9uKHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldFRpdGxlKTtcclxuICAgIHRoaXMubG9ja0ljb25UaXRsZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5sb2NrZWRmaWVsZHMnKTtcclxuICAgIHRoaXMubG9ja0ljb25Gb290ZXIgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24ubG9ja2VkZmllbGRzZWRpdGluZm8nKTtcclxuICAgIHRoaXMuaW5hcHBsaWNhYmxlSWNvblRpdGxlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLkluYXBwbGljYWJsZUZpbHRlcnMnKTtcclxuICAgIHRoaXMuaW5hcHBsaWNhYmxlSWNvbkZvb3RlciA9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5JbmFwcGxpY2FibGVGaWx0ZXJzRGVzYycpO1xyXG4gICAgaWYgKHRoaXMuZGFzaGJvYXJkSW5mby50ZW1wbGF0ZU5hbWUgPT0gJ0VtaXNzaW9uIFJlcG9ydCcpIHtcclxuICAgICAgdGhpcy5oaWRlVGl0bGUgPSB0cnVlO1xyXG4gICAgICB0aGlzLnNob3dPbmx5RHJvcGRvd24gPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXQgd2lkZ2V0Vmlld1N0YXRlKCkgeyByZXR1cm4gV2lkZ2V0Vmlld1N0YXRlOyB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNXaWRnZXRNZ21udCA9IHRoaXMucmFQZXJtaXNzaW9uU2VydmljZS5oYXNQZXJtaXNzaW9uKCdyYS53aWRnZXRtYW5hZ2VtZW50Jyk7XHJcbiAgICBpZiAoY2hhbmdlc1sncmFEYXNoYm9hcmRFdmVudEJ1cyddICYmIGNoYW5nZXNbJ3JhRGFzaGJvYXJkRXZlbnRCdXMnXS5jdXJyZW50VmFsdWUgIT0gY2hhbmdlc1sncmFEYXNoYm9hcmRFdmVudEJ1cyddLnByZXZpb3VzVmFsdWUpIHtcclxuICAgICAgdGhpcy5jb25maWdDaGFuZ2VkID0gdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnN1YnNjcmliZVdpdGhLZXkoUkFFdmVudC5Db25maWdDaGFuZ2VkLCBSQUV2ZW50S2V5LldpZGdldEluc3RhbmNlSWQsIHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldEluc3RhbmNlSWQudG9TdHJpbmcoKSkuc3Vic2NyaWJlKChlKSA9PiB7XHJcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuY29uZmlnQ2hhbmdlRXZlbnRIYW5kbGVyKGUpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy53aWRnZXRFbGVtZW50KSB7XHJcbiAgICAgIGlmIChjaGFuZ2VzWydidWxrQWN0aW9uRGF0YSddICYmIGNoYW5nZXNbJ2J1bGtBY3Rpb25EYXRhJ10uY3VycmVudFZhbHVlICE9IGNoYW5nZXNbJ2J1bGtBY3Rpb25EYXRhJ10ucHJldmlvdXNWYWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy53aWRnZXRFbGVtZW50LmJ1bGtBY3Rpb25DbGlja2VkID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgIHRoaXMud2lkZ2V0RWxlbWVudC5idWxrQWN0aW9uQ2xpY2tlZCh0aGlzLmJ1bGtBY3Rpb25EYXRhKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNoYW5nZXNbJ2dsb2JhbEZpbHRlciddICYmIGNoYW5nZXNbJ2dsb2JhbEZpbHRlciddLmN1cnJlbnRWYWx1ZSAhPSBjaGFuZ2VzWydnbG9iYWxGaWx0ZXInXS5wcmV2aW91c1ZhbHVlKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmRhc2hib2FyZEluZm8uY3VyYXRlZEZpbHRlcnMpIHtcclxuICAgICAgICAgIGxldCBmaWx0ZXJPYmogPSB0aGlzLmdldFBhcnNlZENvbmZpZyh0aGlzLmdsb2JhbEZpbHRlcik7XHJcbiAgICAgICAgICBpZiAoZmlsdGVyT2JqLldpZGdldEluc3RhbmNlSWQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldEluc3RhbmNlSWQgIT0gZmlsdGVyT2JqLldpZGdldEluc3RhbmNlSWQpXHJcbiAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoV2lkZ2V0KHRoaXMuZGF0YS53aWRnZXRJbmZvKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hXaWRnZXQodGhpcy5kYXRhLndpZGdldEluZm8pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGNoYW5nZXNbJ3dpZHRoJ10gJiYgY2hhbmdlc1snd2lkdGgnXS5jdXJyZW50VmFsdWUgIT0gY2hhbmdlc1snd2lkdGgnXS5wcmV2aW91c1ZhbHVlIHx8XHJcbiAgICAgICAgKGNoYW5nZXNbJ2hlaWdodCddICYmIGNoYW5nZXNbJ2hlaWdodCddLmN1cnJlbnRWYWx1ZSAhPSBjaGFuZ2VzWydoZWlnaHQnXS5wcmV2aW91c1ZhbHVlKSkge1xyXG4gICAgICAgIHRoaXMuaW52b2tlV2lkZ2V0UmVzaXplZEV2ZW50KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWydjYW5Mb2FkRGF0YSddICYmIChjaGFuZ2VzWydjYW5Mb2FkRGF0YSddLmN1cnJlbnRWYWx1ZSAhPSBjaGFuZ2VzWydjYW5Mb2FkRGF0YSddLnByZXZpb3VzVmFsdWUpKSB7XHJcbiAgICAgIGlmICh0aGlzLmNhbkxvYWREYXRhKVxyXG4gICAgICAgIHRoaXMubG9hZFdpZGdldCh0aGlzLmRhdGEud2lkZ2V0SW5mbyk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGludm9rZVdpZGdldFJlc2l6ZWRFdmVudCgpIHtcclxuICAgIGlmICh0aGlzLndpZGdldEVsZW1lbnQpIHtcclxuICAgICAgaWYgKHR5cGVvZiB0aGlzLndpZGdldEVsZW1lbnQud2lkZ2V0UmVzaXplZCA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgbGV0IHNpemU6IGFueSA9IHt9O1xyXG4gICAgICAgIHNpemUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XHJcbiAgICAgICAgc2l6ZS53aWR0aCA9IHRoaXMud2lkdGg7XHJcbiAgICAgICAgc2l6ZS5jZWxsSGVpZ2h0ID0gdGhpcy5ncmlkQ2VsbEhlaWdodDtcclxuICAgICAgICB0aGlzLndpZGdldEVsZW1lbnQud2lkZ2V0UmVzaXplZChzaXplKTtcclxuICAgICAgICBpZiAodGhpcy5oZWlnaHQgPT0gMSB8fCB0aGlzLndpZHRoID09IDEpXHJcbiAgICAgICAgICB0aGlzLmlzS3BpVmlldyA9IHRydWVcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICB0aGlzLmlzS3BpVmlldyA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBtb3VzZUhvdmVyKGlzSG92ZXIgPSB0cnVlKSB7XHJcbiAgICB0aGlzLmlzTW91c2VIb3ZlciA9IGlzSG92ZXI7XHJcblxyXG4gICAgaWYgKHRoaXMud2lkZ2V0RWxlbWVudCkge1xyXG4gICAgICBpZiAodHlwZW9mIHRoaXMud2lkZ2V0RWxlbWVudC5ob3ZlclN0YXR1cyA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgdGhpcy53aWRnZXRFbGVtZW50LmhvdmVyU3RhdHVzKGlzSG92ZXIpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUud2Fybignd2lkZ2V0IGZyYW1ld29yayBvdXRkYXRlZCwgcGxlYXNlIHVwZGF0ZSB0byB2ZXJzaW9uIDAuMC45NicpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy53aWRnZXRMb2FkZWQuZW1pdCh0aGlzLndjV3JhcHBlci5uYXRpdmVFbGVtZW50KTtcclxuICAgIH0sMTAwKTtcclxuXHJcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsICgpID0+IHtcclxuICAgICAgdGhpcy5yZW1vdmVNZW51KCk7XHJcbiAgICAgIHRoaXMuY2xvc2VQb3B1cCgpO1xyXG4gICAgfSlcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgbGV0IGl0ZW0gPSBqUXVlcnkodGhpcy53Y1dyYXBwZXIubmF0aXZlRWxlbWVudCkuY2xvc2VzdCgnZ3JpZHN0ZXItaXRlbScpO1xyXG4gICAgICBpdGVtLmJpbmQoJ21vdXNlZW50ZXInLCAoKSA9PiB7XHJcbiAgICAgICAgd2luZG93LmdyaWRzdGVySXRlbUVudGVyID0gdHJ1ZTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBpdGVtLmJpbmQoJ21vdXNlbGVhdmUnLCAoKSA9PiB7XHJcbiAgICAgICAgd2luZG93LmdyaWRzdGVySXRlbUVudGVyID0gZmFsc2U7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICBpZiAoIXdpbmRvdy5tb3VzZU92ZXJXaWRnZXRNZW51KSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlTWVudSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY29uZmlnQ2hhbmdlZClcclxuICAgICAgdGhpcy5jb25maWdDaGFuZ2VkLnVuc3Vic2NyaWJlKCk7XHJcbiAgICBpZiAodGhpcy53aWRnZXRFbGVtZW50SGFuZGxlciAmJiB0aGlzLmRhdGEgJiYgdGhpcy5kYXRhLndpZGdldEluZm8gJiYgdGhpcy5kYXRhLndpZGdldEluZm8ud2lkZ2V0SW5zdGFuY2VJZCkge1xyXG4gICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3dpZGdldGluaXRpYXRlZCcgKyB0aGlzLmRhdGEud2lkZ2V0SW5mby53aWRnZXRJbnN0YW5jZUlkLCB0aGlzLndpZGdldEVsZW1lbnRIYW5kbGVyKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICAvKiogVG8gRWRpdCBjdXJyZW50IHdpZGdldCBjb25maWd1cmF0aW9uKi9cclxuICBwdWJsaWMgZWRpdFdpZGdldCgpIHtcclxuICAgIGxldCB3aWRnZXRDb25maWdGaWx0ZXI6IElXaWRnZXRDb25maWdGaWx0ZXI7XHJcbiAgICBpZiAodGhpcy53aWRnZXRFbGVtZW50ICYmIHR5cGVvZiAodGhpcy53aWRnZXRFbGVtZW50LmdldENvbmZpZ0ZpbHRlcikgPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICBsZXQgY29uZmlnRGF0YSA9IHRoaXMud2lkZ2V0RWxlbWVudC5nZXRDb25maWdGaWx0ZXIoKTtcclxuICAgICAgaWYgKGNvbmZpZ0RhdGEpIHtcclxuICAgICAgICB3aWRnZXRDb25maWdGaWx0ZXIgPSBjb25maWdEYXRhO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAod2lkZ2V0Q29uZmlnRmlsdGVyISkge1xyXG4gICAgICB0aGlzLnJhRGFzaGJvYXJkRXZlbnRCdXMucHVibGlzaChSQUV2ZW50LldpZGdldEVkaXRDbGlja2VkLCB3aWRnZXRDb25maWdGaWx0ZXIpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCB3aWRnZXRDb25maWdGaWx0ZXJEYXRhID0gdGhpcy5nZW5lcmF0ZUNvbmZpZ0ZpbHRlcihmYWxzZSk7XHJcbiAgICAgIHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5wdWJsaXNoKFJBRXZlbnQuV2lkZ2V0RWRpdENsaWNrZWQsIHdpZGdldENvbmZpZ0ZpbHRlckRhdGEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIFRvIERlbGV0ZSBjdXJyZW50IHdpZGdldCBmcm9tIERPTSovXHJcbiAgcHVibGljIGRlbGV0ZVdpZGdldCgpIHtcclxuICAgIGxldCB3aWRnZXRDb250YWluZXJDb250ZXh0ID0gdGhpcztcclxuICAgIHdpZGdldENvbnRhaW5lckNvbnRleHQubmd4U2VydmljZS5zdGFydCgpO1xyXG4gICAgd2lkZ2V0Q29udGFpbmVyQ29udGV4dC5kYXNoYm9hcmRTZXJ2aWNlLmRlbGV0ZVdpZGdldCh0aGlzLmRhdGEud2lkZ2V0SW5mbywgdGhpcy5hcHBDb25maWcpLnN1YnNjcmliZShzdGF0dXMgPT4ge1xyXG4gICAgICB3aWRnZXRDb250YWluZXJDb250ZXh0Lm5neFNlcnZpY2Uuc3RvcCgpO1xyXG4gICAgICBpZiAoc3RhdHVzKSB7XHJcbiAgICAgICAgd2lkZ2V0Q29udGFpbmVyQ29udGV4dC53aWRnZXREZWxldGVkLmVtaXQodGhpcy5kYXRhLndpZGdldEluZm8ud2lkZ2V0SW5zdGFuY2VJZCk7XHJcbiAgICAgICAgdGhpcy5zZXRJbmFwcGxpY2FibGVGaWx0ZXJzKHVuZGVmaW5lZCwgdGhpcy5kYXRhLndpZGdldEluZm8ud2lkZ2V0SW5zdGFuY2VJZCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgd2lkZ2V0Q29udGFpbmVyQ29udGV4dC5ub3RpZmllci5ub3RpZnkoJ2Vycm9yJywgXCIgXCIgKyB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdGYWlsZWRUb1JlbW92ZVdpZGdldCcpICsgXCIgIChcIiArIHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi4nICsgdGhpcy5kYXRhLndpZGdldEluZm8ud2lkZ2V0VGl0bGUsIHRydWUpICsgXCIpIVwiKTtcclxuXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqIFRvIE1vdmUgb3IgY2hhbmdlIHBvc2l0aW9uIGlmIGN1cnJlbnQgd2lkZ2V0IGNvbnRhaW5lciovXHJcbiAgcHVibGljIG1vdmVXaWRnZXQoKSB7XHJcbiAgICB0aGlzLnJhRGFzaGJvYXJkRXZlbnRCdXMucHVibGlzaChSQUV2ZW50Lk1vdmVXaWRnZXQsIHRoaXMuZGF0YS53aWRnZXRJbmZvKTtcclxuICAgIHRoaXMuc2V0SW5hcHBsaWNhYmxlRmlsdGVycyh1bmRlZmluZWQsIHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldEluc3RhbmNlSWQpO1xyXG4gICAgLy8gdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLm1vdmVXaWRnZXQod2lkZ2V0SW5mbyk7XHJcbiAgfVxyXG5cclxuICAvKiogVG8gQ29weSBDdXJyZW50IHdpZGdldCB3aXRoIHNhbWUgY29uZmlndXJhdGlvbiovXHJcbiAgcHVibGljIGNvcHlXaWRnZXQoKSB7XHJcbiAgICB0aGlzLnJhRGFzaGJvYXJkRXZlbnRCdXMucHVibGlzaChSQUV2ZW50LkNvcHlXaWRnZXQsIHRoaXMuZGF0YS53aWRnZXRJbmZvKTtcclxuICAgIC8vdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmNvcHlXaWRnZXQod2lkZ2V0SW5mbyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdmlzaXRQYWdlKCkge1xyXG4gICAgdGhpcy5iYXNlVXJsID0gdGhpcy5nZXRIb3N0VXJsKCk7XHJcbiAgICBsZXQgdXJsID0gdGhpcy5iYXNlVXJsICsgdGhpcy5kZXRhaWxQYWdlVXJsO1xyXG4gICAgaWYgKHRoaXMuZGF0YS53aWRnZXRJbmZvICYmIHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldFNldHRpbmdzKSB7XHJcbiAgICAgIHRoaXMud2lkZ2V0U2V0dGluZ3MgPSB0aGlzLmdldFBhcnNlZENvbmZpZyh0aGlzLmRhdGEud2lkZ2V0SW5mby53aWRnZXRTZXR0aW5ncyk7XHJcbiAgICAgIGlmICh0aGlzLndpZGdldFNldHRpbmdzLmN1c3RvbVBhZ2VQYXJhbXMgfHwgdGhpcy53aWRnZXRTZXR0aW5ncy5jdXN0b21QYWdlVVJMKSB7XHJcbiAgICAgICAgbGV0IHBhcmFtcyA9IHRoaXMud2lkZ2V0RWxlbWVudC5nZXRQYWdlUGFyYW1zQ2xpY2tlZCgpO1xyXG4gICAgICAgIGlmIChwYXJhbXMpIHtcclxuICAgICAgICAgIGlmICh0aGlzLmRhdGEud2lkZ2V0SW5mby53aWRnZXRUeXBlID09ICdBViBXaWRnZXQnIHx8IHRoaXMud2lkZ2V0U2V0dGluZ3MuY3VzdG9tUGFnZVVSTClcclxuICAgICAgICAgICAgdXJsID0gdXJsICsgcGFyYW1zO1xyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB1cmwgPSB1cmwgKyAnPycgKyBwYXJhbXM7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB3aW5kb3cub3Blbih1cmwsICdfYmxhbmsnKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRIb3N0VXJsKCkge1xyXG4gICAgcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCArICcvLycgKyB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUgKyAod2luZG93LmxvY2F0aW9uLnBvcnQgPyAnOicgKyB3aW5kb3cubG9jYXRpb24ucG9ydCA6ICcnKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb25maWdDaGFuZ2VFdmVudEhhbmRsZXIod2lkZ2V0SW5mbzogYW55KSB7XHJcbiAgICB0aGlzLmRhdGEud2lkZ2V0SW5mbyA9IHdpZGdldEluZm87XHJcbiAgICBpZiAod2lkZ2V0SW5mby50ZW1wbGF0ZVNldHRpbmdzKSB7XHJcbiAgICAgIHRoaXMuZGF0YS53aWRnZXRJbmZvLnRlbXBsYXRlV2lkZ2V0U2V0dGluZ3MgPSBKU09OLnBhcnNlKHdpZGdldEluZm8udGVtcGxhdGVTZXR0aW5ncyk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5ncmlkQ2VsbEhlaWdodCA+IDApIHtcclxuICAgICAgdGhpcy5kYXRhLndpZGdldEluZm8ucm93SGVpZ2h0ID0gdGhpcy5ncmlkQ2VsbEhlaWdodDtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLndpZGdldEVsZW1lbnQgJiYgdHlwZW9mICh0aGlzLndpZGdldEVsZW1lbnQuc2V0Q29uZmlnRmlsdGVyKSA9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIHRoaXMud2lkZ2V0RWxlbWVudC5zZXRDb25maWdGaWx0ZXIodGhpcy5nZW5lcmF0ZUNvbmZpZ0ZpbHRlcih0cnVlKSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgY29uc29sZS53YXJuKCd3aWRnZXQgZnJhbWV3b3JrIG91dGRhdGVkLCBwbGVhc2UgdXBkYXRlIHRvIHZlcnNpb24gMC4wLjk4Jyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlZnJlc2hXaWRnZXQodGhpcy5kYXRhLndpZGdldEluZm8sIHRydWUpO1xyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgZ2VuZXJhdGVDb25maWdGaWx0ZXIoY29uZmlnQ2hhbmdlZDogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICBsZXQgd2lkZ2V0Q29uZmlnRmlsdGVyRGF0YSA9IDxJV2lkZ2V0Q29uZmlnRmlsdGVyPntcclxuICAgICAgYXBwQ29uZmlnOiB0aGlzLmFwcENvbmZpZyxcclxuICAgICAgZ2xvYmFsRmlsdGVyOiB0aGlzLmdsb2JhbEZpbHRlcixcclxuICAgICAgd2lkZ2V0SW5mbzogdGhpcy5kYXRhLndpZGdldEluZm8sXHJcbiAgICAgIGNvbmZpZzogdGhpcy5kYXRhLndpZGdldEluZm8ud2lkZ2V0Q29uZmlnSW5mby5jb25maWcsXHJcbiAgICAgIGNvbmZpZ0NoYW5nZXM6IHRoaXMuZ2V0Q29uZmlnQ2hhbmdlcyhjb25maWdDaGFuZ2VkKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHdpZGdldENvbmZpZ0ZpbHRlckRhdGE7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqICBUbyBsb2FkIGV4dGVybmFsIGN1c3RvbSBlbGVtZW50IHRvIHRoZSB3aWRnZXQgY29udGFpbmVyKi9cclxuICBhc3luYyBsb2FkV2lkZ2V0KHdpZGdldEluZm86IGFueSkge1xyXG4gICAgd2lkZ2V0SW5mby5yb3dIZWlnaHQgPSB0aGlzLmdyaWRDZWxsSGVpZ2h0O1xyXG4gICAgbGV0IHdpZGdldENvbmZpZ0ZpbHRlciA9IDxJV2lkZ2V0Q29uZmlnRmlsdGVyPntcclxuICAgICAgY29uZmlnOiB3aWRnZXRJbmZvLndpZGdldENvbmZpZ0luZm8uY29uZmlnLFxyXG4gICAgICBnbG9iYWxGaWx0ZXI6IHRoaXMuZ2xvYmFsRmlsdGVyLFxyXG4gICAgICBjb25maWdDaGFuZ2VzOiB0aGlzLmdldENvbmZpZ0NoYW5nZXMoZmFsc2UpLFxyXG4gICAgICBidWxrQWN0aW9uczp0aGlzLmJ1bGtBY3Rpb25EYXRhXHJcbiAgICB9XHJcbiAgICB0aGlzLmlzV2lkZ2V0Q2FuTW92ZT0gdGhpcy5kYXNoYm9hcmRJbmZvLnRlbXBsYXRlQ29uZmlnLndpZGdldC5jYW5Nb3ZlO1xyXG4gICAgaWYgKHdpZGdldEluZm8ud2lkZ2V0U2V0dGluZ3MpIHtcclxuICAgICAgdGhpcy53aWRnZXRTZXR0aW5ncyA9IHRoaXMuZ2V0UGFyc2VkQ29uZmlnKHdpZGdldEluZm8ud2lkZ2V0U2V0dGluZ3MpO1xyXG4gICAgICB0aGlzLmFwcGxheVdpZGdldFNldHRpbmdzKHRoaXMud2lkZ2V0U2V0dGluZ3MpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kZXRhaWxQYWdlVXJsID0gd2lkZ2V0SW5mby5kZXRhaWxQYWdlVXJsO1xyXG4gICAgbGV0IG1lID0gdGhpcztcclxuICAgIHRoaXMuaXNDdXN0b21FbGVtZW50ID0gd2lkZ2V0SW5mby5pc0N1c3RvbUVsZW1lbnQ7XHJcbiAgICBpZiAodGhpcy5pc0N1c3RvbUVsZW1lbnQpIHtcclxuICAgICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmxvYWRFeHRlcm5hbFNjcmlwdCh3aWRnZXRJbmZvLnNjcmlwdFVybCwgKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0Tm90Q29uZmlndXJlZFN0YXRlKHdpZGdldEluZm8pO1xyXG4gICAgICAgIGxldCBhcHBNb2R1bGUgPSB0aGlzLmRhdGEud2lkZ2V0SW5mby53aWRnZXROYW1lO1xyXG4gICAgICAgIGlmICh0aGlzLmRhdGEud2lkZ2V0SW5mby5hcHBsaWNhdGlvbk1vZHVsZSAmJiB0aGlzLmRhdGEud2lkZ2V0SW5mby5hcHBsaWNhdGlvbk1vZHVsZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBhcHBNb2R1bGUgPSB0aGlzLmRhdGEud2lkZ2V0SW5mby5hcHBsaWNhdGlvbk1vZHVsZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmxvYWRUcmFuc2xhdGlvbnModGhpcy5hcHBDb25maWcuYXBwTWFuYWdlbWVudEJhc2VVcmwsIGFwcE1vZHVsZSwgZmFsc2UpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgbWUud2lkZ2V0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQod2lkZ2V0SW5mby5jdXN0b21UYWcpO1xyXG4gICAgICAgICAgbWUud2lkZ2V0RWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJ3aWRnZXQtaW5zdGFuY2UtaWRcIiwgd2lkZ2V0SW5mby53aWRnZXRJbnN0YW5jZUlkKTtcclxuXHJcbiAgICAgICAgICBsZXQgaGFuZGxlciA9IGZ1bmN0aW9uIChldmVudDogYW55KSB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgIG1lLndpZGdldEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignb24td2lkZ2V0LXJlc3BvbmQnLCAoZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdHlwZTogc3RyaW5nID0gZS5kZXRhaWwudHlwZTtcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICBjYXNlICdvbkRhdGFMb2FkJzpcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZS5kZXRhaWwuZGF0YSlcclxuICAgICAgICAgICAgICAgICAgICAgIG1lLnNob3dQYW5lbCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgbWUuc2hvd1BhbmVsID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghbWUuZGF0YS5kYXRhTG9hZGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBtZS5kYXRhLmRhdGFMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgbWUuZGF0YUxvYWRlZC5lbWl0KHdpZGdldEluZm8pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgY2FzZSAnb25Db25maWdFZGl0Q2xpY2tlZCc6XHJcbiAgICAgICAgICAgICAgICAgICAgbWUuZWRpdFdpZGdldCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICBjYXNlICdvbkVuYWJsZURlZmF1bHRTdGF0ZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgbWUuc2V0RW1wdHlTdGF0ZShlLmRldGFpbC5kYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgY2FzZSAnb25TZXRUaXRsZVVuZGVybGluZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUuZGV0YWlsLmRhdGEgPT0gdHJ1ZSlcclxuICAgICAgICAgICAgICAgICAgICAgIG1lLmVuYWJsZVRpdGxlTGluZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgbWUuZW5hYmxlVGl0bGVMaW5lID0gbWUuZW5hYmxlVGl0bGVMaW5lQWN0dWFsO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICBjYXNlICdvbldpZGdldFRpdGxlSGlkZGVuJzpcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZS5kZXRhaWwuZGF0YSA9PSB0cnVlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgbWUuaGlkZVRpdGxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICBtZS5oaWRlVGl0bGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgY2FzZSAnb25VcGRhdGVMb2NrRGF0YSc6XHJcbiAgICAgICAgICAgICAgICAgICAgbWUuc2V0TG9jayhlLmRldGFpbC5kYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgY2FzZSAnb25HbG9iYWxGaWx0ZXJBcHBsaWNhYmxlQ2hlY2snOlxyXG4gICAgICAgICAgICAgICAgICAgIG1lLnNldEluYXBwbGljYWJsZUZpbHRlcnMoZS5kZXRhaWwuZGF0YSwgd2lkZ2V0SW5mby53aWRnZXRJbnN0YW5jZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiAobWUud2lkZ2V0RWxlbWVudC50aXRsZUxpbmVFbmFibGVkKSAhPSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICAgICAgbGV0IHRpdGxlTGluZUVuYWJsZWQgPSBtZS53aWRnZXRFbGVtZW50LnRpdGxlTGluZUVuYWJsZWQoKTtcclxuICAgICAgICAgICAgICAgIGlmICh0aXRsZUxpbmVFbmFibGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgIG1lLmVuYWJsZVRpdGxlTGluZSA9IHRpdGxlTGluZUVuYWJsZWQ7XHJcbiAgICAgICAgICAgICAgICAgIG1lLmVuYWJsZVRpdGxlTGluZUFjdHVhbCA9IHRpdGxlTGluZUVuYWJsZWQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIG1lLmVkaXRUZXh0ID0gbWUudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5lZGl0Jyk7XHJcbiAgICAgICAgICAgICAgaWYgKG1lLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uZWRpdCcpLmxlbmd0aCA+IDYpIHtcclxuICAgICAgICAgICAgICAgIG1lLmVkaXRUZXh0ID0gKG1lLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uZWRpdCcpLnN1YnN0cmluZygwLCA2KSArICcuLi4nKTtcclxuICAgICAgICAgICAgICAgIG1lLmVkaXRUb29sVGlwVmFsdWUgPSBtZS50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmVkaXQnKTtcclxuICAgICAgICAgICAgICAgIG1lLmVkaXRUb29sVGlwV2lkdGggPSBcIjMwMHB4XCI7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIG1lLmNvcHlUZXh0ID0gbWUudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5jb3B5Jyk7XHJcbiAgICAgICAgICAgICAgaWYgKG1lLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uY29weScpLmxlbmd0aCA+IDYpIHtcclxuICAgICAgICAgICAgICAgIG1lLmNvcHlUZXh0ID0gKG1lLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uY29weScpLnN1YnN0cmluZygwLCA2KSArICcuLi4nKTtcclxuICAgICAgICAgICAgICAgIG1lLmNvcHlUb29sVGlwVmFsdWUgPSBtZS50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmNvcHknKTtcclxuICAgICAgICAgICAgICAgIG1lLmNvcHlUb29sVGlwV2lkdGggPSBcIjMwMHB4XCI7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIG1lLm1vdmVUZXh0ID0gbWUudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5tb3ZlJylcclxuICAgICAgICAgICAgICBpZiAobWUudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5tb3ZlJykubGVuZ3RoID4gNikge1xyXG4gICAgICAgICAgICAgICAgbWUubW92ZVRleHQgPSAobWUudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5tb3ZlJykuc3Vic3RyaW5nKDAsIDYpICsgJy4uLicpO1xyXG4gICAgICAgICAgICAgICAgbWUubW92ZVRvb2xUaXBWYWx1ZSA9IG1lLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24ubW92ZScpO1xyXG4gICAgICAgICAgICAgICAgbWUubW92ZVRvb2xUaXBXaWR0aCA9IFwiMzAwcHhcIjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgbWUuZXhjZWxUZXh0ID0gbWUudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5leGNlbCcpO1xyXG4gICAgICAgICAgICAgIGlmIChtZS50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmV4Y2VsJykubGVuZ3RoID4gNikge1xyXG4gICAgICAgICAgICAgICAgbWUuZXhjZWxUZXh0ID0gKG1lLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uZXhjZWwnKS5zdWJzdHJpbmcoMCwgNikgKyAnLi4uJyk7XHJcbiAgICAgICAgICAgICAgICBtZS5leGNlbFRvb2xUaXBWYWx1ZSA9IG1lLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uZXhjZWwnKTtcclxuICAgICAgICAgICAgICAgIG1lLmV4Y2VsVG9vbFRpcFdpZHRoID0gXCIzMDBweFwiO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBtZS5kZWxldGVUZXh0ID0gbWUudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5kZWxldGUnKTtcclxuICAgICAgICAgICAgICBpZiAobWUudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5kZWxldGUnKS5sZW5ndGggPiA2KSB7XHJcbiAgICAgICAgICAgICAgICBtZS5kZWxldGVUZXh0ID0gKG1lLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uZGVsZXRlJykuc3Vic3RyaW5nKDAsIDYpICsgJy4uLicpO1xyXG4gICAgICAgICAgICAgICAgbWUuZGVsZXRlVG9vbFRpcFZhbHVlID0gbWUudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5kZWxldGUnKTtcclxuICAgICAgICAgICAgICAgIG1lLmRlbGV0ZVRvb2xUaXBXaWR0aCA9IFwiMzAwcHhcIjtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIG1lLmlzV2lkZ2V0TG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB3aWRnZXRDb25maWdGaWx0ZXIuYXBwQ29uZmlnID0gbWUuYXBwQ29uZmlnO1xyXG4gICAgICAgICAgICAgIHdpZGdldENvbmZpZ0ZpbHRlci53aWRnZXRJbmZvID0gd2lkZ2V0SW5mbztcclxuICAgICAgICAgICAgICB3aWRnZXRDb25maWdGaWx0ZXIuY29uZmlnQ2hhbmdlcyA9IG1lLmdldENvbmZpZ0NoYW5nZXMoZmFsc2UpO1xyXG4gICAgICAgICAgICAgIHdpZGdldENvbmZpZ0ZpbHRlci53aWRnZXRJbmZvLndpZGdldE5hbWUgPSB3aWRnZXRJbmZvLndpZGdldE5hbWU7XHJcbiAgICAgICAgICAgICAgd2lkZ2V0Q29uZmlnRmlsdGVyLmdsb2JhbEZpbHRlciA9IG1lLmdsb2JhbEZpbHRlcjtcclxuICAgICAgICAgICAgICB3aWRnZXRDb25maWdGaWx0ZXIuZGFzaGJvYXJkSW5mbyA9IG1lLmRhc2hib2FyZEluZm87XHJcbiAgICAgICAgICAgICAgbWUud2lkZ2V0RWxlbWVudC5sb2FkQ29udGVudCh3aWRnZXRDb25maWdGaWx0ZXIpO1xyXG4gICAgICAgICAgICAgIGF3YWl0IG1lLnNldExvY2sod2lkZ2V0Q29uZmlnRmlsdGVyLmNvbmZpZyk7XHJcbiAgICAgICAgICAgICAgYXdhaXQgbWUuc2V0RG93bmxvYWRJY29uKCk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICB9LmJpbmQodGhpcyk7XHJcblxyXG4gICAgICAgICAgdGhpcy53aWRnZXRFbGVtZW50SGFuZGxlciA9IGhhbmRsZXI7XHJcbiAgICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ3dpZGdldGluaXRpYXRlZCcgKyB3aWRnZXRJbmZvLndpZGdldEluc3RhbmNlSWQsIGhhbmRsZXIpO1xyXG4gICAgICAgICAgdGhpcy5jdGxXaWRnZXQubmF0aXZlRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLndpZGdldEVsZW1lbnQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBsZXQgYmFzZVBhdGggPSBkb2N1bWVudC5iYXNlVVJJO1xyXG4gICAgICBsb2FkUmVtb3RlTW9kdWxlKHtcclxuICAgICAgICB0eXBlOiAnbW9kdWxlJyxcclxuICAgICAgICByZW1vdGVFbnRyeTogYmFzZVBhdGggKyB3aWRnZXRJbmZvLnNjcmlwdFVybCxcclxuICAgICAgICBleHBvc2VkTW9kdWxlOiAnLi8nICsgd2lkZ2V0SW5mby53aWRnZXRDb21wb25lbnRcclxuICAgICAgfSkudGhlbigobTogYW55KSA9PiB7XHJcbiAgICAgICAgbGV0IGFwcE1vZHVsZSA9IHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldE5hbWU7XHJcbiAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmxvYWRUcmFuc2xhdGlvbnModGhpcy5hcHBDb25maWcuYXBwTWFuYWdlbWVudEJhc2VVcmwsIGFwcE1vZHVsZSwgZmFsc2UpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgbWUuY3RsV2lkZ2V0TW9kdWxlLmNsZWFyKCk7XHJcbiAgICAgICAgICB2YXIgY29tcG9uZW50ID0gbWUuY3RsV2lkZ2V0TW9kdWxlLmNyZWF0ZUNvbXBvbmVudChtW3dpZGdldEluZm8ud2lkZ2V0Q29tcG9uZW50XSk7XHJcbiAgICAgICAgICBsZXQgaW5zdGFuY2U6IGFueSA9IGNvbXBvbmVudC5pbnN0YW5jZTtcclxuICAgICAgICAgIGxldCB3aWRnZXRFbGVtZW50ID0gY29tcG9uZW50Lmluc3RhbmNlO1xyXG4gICAgICAgICAgdGhpcy5zZXROb3RDb25maWd1cmVkU3RhdGUod2lkZ2V0SW5mbyk7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuZGF0YS53aWRnZXRJbmZvLmFwcGxpY2F0aW9uTW9kdWxlICYmIHRoaXMuZGF0YS53aWRnZXRJbmZvLmFwcGxpY2F0aW9uTW9kdWxlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgYXBwTW9kdWxlID0gdGhpcy5kYXRhLndpZGdldEluZm8uYXBwbGljYXRpb25Nb2R1bGU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBtZS53aWRnZXRFbGVtZW50ID0gd2lkZ2V0RWxlbWVudDtcclxuICAgICAgICAgIGxldCBlbGVtZW50ID0gY29tcG9uZW50LmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShcIndpZGdldC1pbnN0YW5jZS1pZFwiLCB3aWRnZXRJbmZvLndpZGdldEluc3RhbmNlSWQpO1xyXG4gICAgICAgICAgaW5zdGFuY2Uud2lkZ2V0SW5zdGFuY2VJZCA9IHdpZGdldEluZm8ud2lkZ2V0SW5zdGFuY2VJZDtcclxuICAgICAgICAgIGxldCBoYW5kbGVyID0gZnVuY3Rpb24gKGV2ZW50OiBhbnkpIHtcclxuICAgICAgICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgaW5zdGFuY2Uub25XaWRnZXRSZXNwb25kLnN1YnNjcmliZSgoZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdHlwZTogc3RyaW5nID0gZS50eXBlO1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgJ29uRGF0YUxvYWQnOlxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlLmRhdGEpXHJcbiAgICAgICAgICAgICAgICAgICAgICBtZS5zaG93UGFuZWwgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgIG1lLnNob3dQYW5lbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghbWUuZGF0YS5kYXRhTG9hZGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBtZS5kYXRhLmRhdGFMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgbWUuZGF0YUxvYWRlZC5lbWl0KG1lLndpZGdldEVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgY2FzZSAnb25Db25maWdFZGl0Q2xpY2tlZCc6XHJcbiAgICAgICAgICAgICAgICAgICAgbWUuZWRpdFdpZGdldCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICBjYXNlICdvbkVuYWJsZURlZmF1bHRTdGF0ZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgbWUuc2V0RW1wdHlTdGF0ZShlLmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICBjYXNlICdvblNldFRpdGxlVW5kZXJsaW5lJzpcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZS5kYXRhID09IHRydWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICBtZS5lbmFibGVUaXRsZUxpbmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgIG1lLmVuYWJsZVRpdGxlTGluZSA9IG1lLmVuYWJsZVRpdGxlTGluZUFjdHVhbDtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgY2FzZSAnb25XaWRnZXRUaXRsZUhpZGRlbic6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUuZGF0YSA9PSB0cnVlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgbWUuaGlkZVRpdGxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICBtZS5oaWRlVGl0bGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgY2FzZSAnb25VcGRhdGVMb2NrRGF0YSc6XHJcbiAgICAgICAgICAgICAgICAgICAgbWUuc2V0TG9jayhlLmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICBjYXNlICdvbkdsb2JhbEZpbHRlckFwcGxpY2FibGVDaGVjayc6XHJcbiAgICAgICAgICAgICAgICAgICAgbWUuc2V0SW5hcHBsaWNhYmxlRmlsdGVycyhlLmRhdGEsIHdpZGdldEluZm8ud2lkZ2V0SW5zdGFuY2VJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiAobWUud2lkZ2V0RWxlbWVudC50aXRsZUxpbmVFbmFibGVkKSAhPSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICAgICAgbGV0IHRpdGxlTGluZUVuYWJsZWQgPSBtZS53aWRnZXRFbGVtZW50LnRpdGxlTGluZUVuYWJsZWQoKTtcclxuICAgICAgICAgICAgICAgIGlmICh0aXRsZUxpbmVFbmFibGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgIG1lLmVuYWJsZVRpdGxlTGluZSA9IHRpdGxlTGluZUVuYWJsZWQ7XHJcbiAgICAgICAgICAgICAgICAgIG1lLmVuYWJsZVRpdGxlTGluZUFjdHVhbCA9IHRpdGxlTGluZUVuYWJsZWQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIG1lLmVkaXRUZXh0ID0gbWUudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5lZGl0Jyk7XHJcbiAgICAgICAgICAgICAgaWYgKG1lLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uZWRpdCcpLmxlbmd0aCA+IDYpIHtcclxuICAgICAgICAgICAgICAgIG1lLmVkaXRUZXh0ID0gKG1lLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uZWRpdCcpLnN1YnN0cmluZygwLCA2KSArICcuLi4nKTtcclxuICAgICAgICAgICAgICAgIG1lLmVkaXRUb29sVGlwVmFsdWUgPSBtZS50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmVkaXQnKTtcclxuICAgICAgICAgICAgICAgIG1lLmVkaXRUb29sVGlwV2lkdGggPSBcIjMwMHB4XCI7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIG1lLmNvcHlUZXh0ID0gbWUudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5jb3B5Jyk7XHJcbiAgICAgICAgICAgICAgaWYgKG1lLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uY29weScpLmxlbmd0aCA+IDYpIHtcclxuICAgICAgICAgICAgICAgIG1lLmNvcHlUZXh0ID0gKG1lLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uY29weScpLnN1YnN0cmluZygwLCA2KSArICcuLi4nKTtcclxuICAgICAgICAgICAgICAgIG1lLmNvcHlUb29sVGlwVmFsdWUgPSBtZS50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmNvcHknKTtcclxuICAgICAgICAgICAgICAgIG1lLmNvcHlUb29sVGlwV2lkdGggPSBcIjMwMHB4XCI7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIG1lLm1vdmVUZXh0ID0gbWUudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5tb3ZlJylcclxuICAgICAgICAgICAgICBpZiAobWUudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5tb3ZlJykubGVuZ3RoID4gNikge1xyXG4gICAgICAgICAgICAgICAgbWUubW92ZVRleHQgPSAobWUudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5tb3ZlJykuc3Vic3RyaW5nKDAsIDYpICsgJy4uLicpO1xyXG4gICAgICAgICAgICAgICAgbWUubW92ZVRvb2xUaXBWYWx1ZSA9IG1lLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24ubW92ZScpO1xyXG4gICAgICAgICAgICAgICAgbWUubW92ZVRvb2xUaXBXaWR0aCA9IFwiMzAwcHhcIjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgbWUuZXhjZWxUZXh0ID0gbWUudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5leGNlbCcpO1xyXG4gICAgICAgICAgICAgIGlmIChtZS50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmV4Y2VsJykubGVuZ3RoID4gNikge1xyXG4gICAgICAgICAgICAgICAgbWUuZXhjZWxUZXh0ID0gKG1lLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uZXhjZWwnKS5zdWJzdHJpbmcoMCwgNikgKyAnLi4uJyk7XHJcbiAgICAgICAgICAgICAgICBtZS5leGNlbFRvb2xUaXBWYWx1ZSA9IG1lLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uZXhjZWwnKTtcclxuICAgICAgICAgICAgICAgIG1lLmV4Y2VsVG9vbFRpcFdpZHRoID0gXCIzMDBweFwiO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBtZS5kZWxldGVUZXh0ID0gbWUudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5kZWxldGUnKTtcclxuICAgICAgICAgICAgICBpZiAobWUudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5kZWxldGUnKS5sZW5ndGggPiA2KSB7XHJcbiAgICAgICAgICAgICAgICBtZS5kZWxldGVUZXh0ID0gKG1lLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uZGVsZXRlJykuc3Vic3RyaW5nKDAsIDYpICsgJy4uLicpO1xyXG4gICAgICAgICAgICAgICAgbWUuZGVsZXRlVG9vbFRpcFZhbHVlID0gbWUudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5kZWxldGUnKTtcclxuICAgICAgICAgICAgICAgIG1lLmRlbGV0ZVRvb2xUaXBXaWR0aCA9IFwiMzAwcHhcIjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgbWUuaXNXaWRnZXRMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHdpZGdldENvbmZpZ0ZpbHRlci5hcHBDb25maWcgPSBtZS5hcHBDb25maWc7XHJcbiAgICAgICAgICAgICAgd2lkZ2V0Q29uZmlnRmlsdGVyLndpZGdldEluZm8gPSB3aWRnZXRJbmZvO1xyXG4gICAgICAgICAgICAgIHdpZGdldENvbmZpZ0ZpbHRlci5jb25maWdDaGFuZ2VzID0gbWUuZ2V0Q29uZmlnQ2hhbmdlcyhmYWxzZSk7XHJcbiAgICAgICAgICAgICAgd2lkZ2V0Q29uZmlnRmlsdGVyLndpZGdldEluZm8ud2lkZ2V0TmFtZSA9IHdpZGdldEluZm8ud2lkZ2V0TmFtZTtcclxuICAgICAgICAgICAgICB3aWRnZXRDb25maWdGaWx0ZXIuZ2xvYmFsRmlsdGVyID0gbWUuZ2xvYmFsRmlsdGVyO1xyXG4gICAgICAgICAgICAgIHdpZGdldENvbmZpZ0ZpbHRlci5kYXNoYm9hcmRJbmZvID0gbWUuZGFzaGJvYXJkSW5mbztcclxuICAgICAgICAgICAgICBtZS53aWRnZXRFbGVtZW50LmxvYWRDb250ZW50KHdpZGdldENvbmZpZ0ZpbHRlcik7XHJcblxyXG4gICAgICAgICAgICAgIGF3YWl0IG1lLnNldExvY2sod2lkZ2V0Q29uZmlnRmlsdGVyLmNvbmZpZyk7XHJcbiAgICAgICAgICAgICAgYXdhaXQgbWUuc2V0RG93bmxvYWRJY29uKCk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICB9LmJpbmQodGhpcyk7XHJcblxyXG4gICAgICAgICAgdGhpcy53aWRnZXRFbGVtZW50SGFuZGxlciA9IGhhbmRsZXI7XHJcbiAgICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ3dpZGdldGluaXRpYXRlZCcgKyB3aWRnZXRJbmZvLndpZGdldEluc3RhbmNlSWQsIGhhbmRsZXIpO1xyXG4gICAgICAgICAgY29tcG9uZW50LmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipUbyBzZXQgRGVmYXVsdCBTdGF0ZSBmb3IgdGhlIHdpZGdldCB3aGVuIGl0IGlzIG5vdCBjb25maWd1cmVkICovXHJcbiAgc2V0Tm90Q29uZmlndXJlZFN0YXRlKHdpZGdldEluZm86IElXaWRnZXRJbmZvLCBmb3JjZUVuYWJsZTogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICBpZiAoKHdpZGdldEluZm8uc2hvd0RlZmF1bHRTdGF0ZSAmJiAod2lkZ2V0SW5mby53aWRnZXRDb25maWdJbmZvLmNvbmZpZyA9PSBcIlwiIHx8IE9iamVjdC5rZXlzKEpTT04ucGFyc2Uod2lkZ2V0SW5mby53aWRnZXRDb25maWdJbmZvLmNvbmZpZykpLmxlbmd0aCA9PSAwKSkgfHwgKGZvcmNlRW5hYmxlKSkge1xyXG4gICAgICB0aGlzLmlzV2lkZ2V0U3RhdGVBcHBsaWNhYmxlID0gdHJ1ZTtcclxuICAgICAgdGhpcy53aWRnZXRFbXB0eVN0YXRlID0gV2lkZ2V0Vmlld1N0YXRlLmVtcHR5Q29uZmlnLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy53aWRnZXRFbXB0eVN0YXRlID0gJyc7XHJcbiAgICAgIHRoaXMuaXNXaWRnZXRTdGF0ZUFwcGxpY2FibGUgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlRvIGNvbmZpZ3VyZSBlbXB0eSBzdGF0ZSBmb3IgdGhlIHdpZGdldCAgKi9cclxuICBzZXRFbXB0eVN0YXRlKHdpZGdldFN0YXRlOiBhbnkpIHtcclxuICAgIGlmICh0aGlzLmhlaWdodCA9PSAxIHx8IHRoaXMud2lkdGggPT0gMSlcclxuICAgICAgdGhpcy5pc0twaVZpZXcgPSB0cnVlXHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMuaXNLcGlWaWV3ID0gZmFsc2U7XHJcbiAgICB0aGlzLndpZGdldEVtcHR5U3RhdGUgPSB3aWRnZXRTdGF0ZS53aWRnZXRWaWV3U3RhdGU7XHJcbiAgICB0aGlzLmlzR2xvYmFsRmlsdGVyQXBwbGllZCA9IHdpZGdldFN0YXRlLmlzR2xvYmFsRmlsdGVyQXBwbGllZDtcclxuICAgIGlmICh3aWRnZXRTdGF0ZSAhPSBXaWRnZXRWaWV3U3RhdGUubm9ybWFsKSB7XHJcbiAgICAgIHRoaXMuaXNXaWRnZXRTdGF0ZUFwcGxpY2FibGUgPSB0cnVlO1xyXG4gICAgICB0aGlzLmlzRG93bmxvYWRJY29uVmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuaXNXaWRnZXRTdGF0ZUFwcGxpY2FibGUgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHN3aXRjaCAod2lkZ2V0U3RhdGUpIHtcclxuICAgICAgY2FzZSBXaWRnZXRWaWV3U3RhdGUuZW1wdHlDb25maWc6XHJcbiAgICAgICAgdGhpcy5zZXROb3RDb25maWd1cmVkU3RhdGUodGhpcy5kYXRhLndpZGdldEluZm8sIHRydWUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFdpZGdldFZpZXdTdGF0ZS5lbXB0eURhdGE6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgV2lkZ2V0Vmlld1N0YXRlLmVycm9yOlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFdpZGdldFZpZXdTdGF0ZS5zcWxUaW1lb3V0RXJyb3I6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRDb25maWdDaGFuZ2VzKGNvbmZpZ0NoYW5nZWQ6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgbGV0IGNvbmZpZ0NoYW5nZXMgPSA8SWNvbmZpZ0NoYW5nZXM+e1xyXG4gICAgICBpc0NvbmZpZ1VwZGF0ZWQ6IGNvbmZpZ0NoYW5nZWQsXHJcbiAgICAgIHVwZGF0ZWRDb25maWdQcm9wZXJ0eTogW11cclxuICAgIH1cclxuICAgIHJldHVybiBjb25maWdDaGFuZ2VzO1xyXG4gIH1cclxuXHJcbiAgLyoqIFRvIHJlZnJlc2ggd2lkZ2V0IG9uIGlucHV0IGNvbmZpZyBjaGFuZ2VzICovXHJcbiAgYXN5bmMgcmVmcmVzaFdpZGdldCh3aWRnZXRJbmZvOiBJV2lkZ2V0SW5mbywgY29uZmlnQ2hhbmdlZDogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLldpZGdldERpc3BsYXlOYW1lID0gdGhpcy5nZXR3aWRnZXRUaXRsZVRyYW5zbGF0aW9uKHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldFRpdGxlKTtcclxuICAgIHdpZGdldEluZm8ucm93SGVpZ2h0ID0gdGhpcy5ncmlkQ2VsbEhlaWdodDtcclxuICAgIHRoaXMuc2V0Tm90Q29uZmlndXJlZFN0YXRlKHdpZGdldEluZm8pO1xyXG4gICAgbGV0IHdpZGdldENvbnRhaW5lckNvbnRleHQgPSB0aGlzO1xyXG5cclxuICAgIGxldCB3aWRnZXRDb25maWdGaWx0ZXIgPSA8SVdpZGdldENvbmZpZ0ZpbHRlcj57XHJcbiAgICAgIGNvbmZpZzogd2lkZ2V0SW5mby53aWRnZXRDb25maWdJbmZvLmNvbmZpZyxcclxuICAgICAgZ2xvYmFsRmlsdGVyOiB0aGlzLmdsb2JhbEZpbHRlcixcclxuICAgICAgYXBwQ29uZmlnOiB0aGlzLmFwcENvbmZpZyxcclxuICAgICAgd2lkZ2V0SW5mbzogd2lkZ2V0SW5mbyxcclxuICAgICAgY29uZmlnQ2hhbmdlczogdGhpcy5nZXRDb25maWdDaGFuZ2VzKGNvbmZpZ0NoYW5nZWQpLFxyXG4gICAgICBkYXNoYm9hcmRJbmZvOiB0aGlzLmRhc2hib2FyZEluZm8sXHJcbiAgICAgIGJ1bGtBY3Rpb25zOiB0aGlzLmJ1bGtBY3Rpb25EYXRhXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHdpZGdldENvbnRhaW5lckNvbnRleHQuaXNXaWRnZXRMb2FkZWQpIHtcclxuICAgICAgaWYgKHRoaXMud2lkZ2V0RWxlbWVudCAmJiB0eXBlb2YgKHRoaXMud2lkZ2V0RWxlbWVudC5zZXRDb25maWdGaWx0ZXIpID09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICB3aWRnZXRDb250YWluZXJDb250ZXh0LndpZGdldEVsZW1lbnQuc2V0Q29uZmlnRmlsdGVyKHdpZGdldENvbmZpZ0ZpbHRlcik7XHJcbiAgICAgIH1cclxuICAgICAgd2lkZ2V0Q29udGFpbmVyQ29udGV4dC53aWRnZXRFbGVtZW50LmxvYWRDb250ZW50KHdpZGdldENvbmZpZ0ZpbHRlcik7XHJcbiAgICAgIGF3YWl0IHRoaXMuc2V0TG9jayh3aWRnZXRDb25maWdGaWx0ZXIuY29uZmlnKTtcclxuICAgICAgYXdhaXQgdGhpcy5zZXREb3dubG9hZEljb24oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBtb3VzZU92ZXIoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy50b29sVGlwVmFsdWUgPSAnICc7XHJcbiAgICB0aGlzLnRvb2xUaXBXaWR0aCA9ICcwcHgnO1xyXG4gICAgbGV0IGVsZW1lbnQgPSB0aGlzLnNlYXJjaElucHV0Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBpZiAoZWxlbWVudC5vZmZzZXRXaWR0aCA8IGVsZW1lbnQuc2Nyb2xsV2lkdGgpIHtcclxuICAgICAgdGhpcy50b29sVGlwVmFsdWUgPSBlbGVtZW50LmlubmVySFRNTDtcclxuICAgICAgdGhpcy50b29sVGlwV2lkdGggPSAnMzAwcHgnO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMudG9vbFRpcFdpZHRoID0gJzBweCc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHNldExvY2soY29uZmlnOiBzdHJpbmcpIHtcclxuICAgIHRoaXMubG9ja1RlbXBsYXRlSW5mbyA9IHRoaXMud2lkZ2V0RWxlbWVudC5sb2FkTG9ja0luZm8oKTtcclxuICAgIHRoaXMuaGlkZUxvY2sgPSB0aGlzLmRhc2hib2FyZEluZm8udGVtcGxhdGVDb25maWcud2lkZ2V0LmhpZGVMb2NrO1xyXG4gICAgdmFyIGNvbmZpZ09iajogYW55O1xyXG4gICAgaWYgKGNvbmZpZykge1xyXG4gICAgICBjb25maWdPYmogPSBKU09OLnBhcnNlKGNvbmZpZyk7XHJcbiAgICAgIGlmIChjb25maWdPYmogJiYgY29uZmlnT2JqLkxvY2tzICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGlmIChjb25maWdPYmouTG9ja3MuSXNEYXRlTG9ja2VkIHx8IGNvbmZpZ09iai5Mb2Nrcy5Jc0RhdGVzTG9ja2VkIHx8IGNvbmZpZ09iai5Mb2Nrcy5Jc1BhcnRpY2lwYW50TG9ja2VkIHx8IGNvbmZpZ09iai5Mb2Nrcy5Jc1NvdXJjZUxvY2tlZCkge1xyXG4gICAgICAgICAgdGhpcy5sb2NrRGV0YWlscyA9IFtdO1xyXG4gICAgICAgICAgaWYgKGNvbmZpZ09iai5Mb2Nrcy5Jc0RhdGVMb2NrZWQgfHwgY29uZmlnT2JqLkxvY2tzLklzRGF0ZXNMb2NrZWQpXHJcbiAgICAgICAgICAgIHRoaXMubG9ja0RldGFpbHMucHVzaCh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uRGF0ZVJhbmdlJykpO1xyXG5cclxuICAgICAgICAgIGlmIChjb25maWdPYmouTG9ja3MuSXNQYXJ0aWNpcGFudExvY2tlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmxvY2tEZXRhaWxzLnB1c2godGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLkRpdmlzaW9uT3JHcm91cG9yU2l0ZScpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChjb25maWdPYmouTG9ja3MuSXNTb3VyY2VMb2NrZWQpXHJcbiAgICAgICAgICAgIHRoaXMubG9ja0RldGFpbHMucHVzaCh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uRGF0YVN0cmVhbScpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmxvY2tEZXRhaWxzID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmxvY2tEZXRhaWxzID0gdW5kZWZpbmVkO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgc2V0RG93bmxvYWRJY29uKCkge1xyXG4gICAgbGV0IGRvd25sb2FkVHlwZSA9IGF3YWl0IHRoaXMud2lkZ2V0RWxlbWVudC5nZXREb3dubG9hZFR5cGUoKTtcclxuICAgIHRoaXMuZG93bmxvYWRJY29uVHlwZSA9IGRvd25sb2FkVHlwZTtcclxuICAgIHRoaXMuaXNEb3dubG9hZEljb25WaXNpYmxlID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzQ2hhcnREb3dubG9hZFZpc2libGUgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNHcmlkRG93bmxvYWRWaXNpYmxlID0gZmFsc2U7XHJcbiAgICB0aGlzLnNob3dFeGNlbGwgPSB0cnVlO1xyXG4gICAgaWYgKGRvd25sb2FkVHlwZSAhPSBSQURvd25sb2FkVHlwZS5Ob25lKSB7XHJcbiAgICAgIHRoaXMuaXNEb3dubG9hZEljb25WaXNpYmxlID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAoIXRoaXMuaXNXaWRnZXRNZ21udCAmJiAhdGhpcy5kZXRhaWxQYWdlVXJsKSB7XHJcbiAgICAgICAgdGhpcy5zaG93U2V0dGluZ3NMaW5rID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoZG93bmxvYWRUeXBlID09IFJBRG93bmxvYWRUeXBlLkNoYXJ0KSB7XHJcbiAgICAgIHRoaXMuaXNDaGFydERvd25sb2FkVmlzaWJsZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRvd25sb2FkVHlwZSA9PSBSQURvd25sb2FkVHlwZS5HcmlkKSB7XHJcbiAgICAgIHRoaXMuaXNHcmlkRG93bmxvYWRWaXNpYmxlID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZG93bmxvYWRUeXBlID09IFJBRG93bmxvYWRUeXBlLlN0YXRpc3RpY3MpIHtcclxuICAgICAgdGhpcy5pc0dyaWREb3dubG9hZFZpc2libGUgPSB0cnVlO1xyXG4gICAgICB0aGlzLnNob3dFeGNlbGwgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmRhc2hib2FyZEluZm8udGVtcGxhdGVOYW1lID09ICdFbWlzc2lvbiBSZXBvcnQnKSB7XHJcbiAgICAgIHRoaXMuc2hvd1NldHRpbmdzTGluayA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGRvd25sb2FkSWNvbkNsaWNrZWQodHlwZTogc3RyaW5nKSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSBcIkNTVlwiOlxyXG4gICAgICAgIHRoaXMud2lkZ2V0RWxlbWVudC5kb3dubG9hZENsaWNrZWQodGhpcy5kb3dubG9hZEljb25UeXBlLCBSQURvd25sb2FkT3B0aW9uLkNTVik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJQTkdcIjpcclxuICAgICAgICB0aGlzLndpZGdldEVsZW1lbnQuZG93bmxvYWRDbGlja2VkKHRoaXMuZG93bmxvYWRJY29uVHlwZSwgUkFEb3dubG9hZE9wdGlvbi5QTkcpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiUERGXCI6XHJcbiAgICAgICAgdGhpcy53aWRnZXRFbGVtZW50LmRvd25sb2FkQ2xpY2tlZCh0aGlzLmRvd25sb2FkSWNvblR5cGUsIFJBRG93bmxvYWRPcHRpb24uUERGKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcIlNWR1wiOlxyXG4gICAgICAgIHRoaXMud2lkZ2V0RWxlbWVudC5kb3dubG9hZENsaWNrZWQodGhpcy5kb3dubG9hZEljb25UeXBlLCBSQURvd25sb2FkT3B0aW9uLlNWRyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJKUEVHXCI6XHJcbiAgICAgICAgdGhpcy53aWRnZXRFbGVtZW50LmRvd25sb2FkQ2xpY2tlZCh0aGlzLmRvd25sb2FkSWNvblR5cGUsIFJBRG93bmxvYWRPcHRpb24uSlBFRyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbW92ZU1lbnUoKSB7XHJcbiAgICBqUXVlcnkoJyNyYS1kYi13aWRnZXQtbWVudScpLnJlbW92ZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGVja1Zpc2l0TGlua1Zpc2libGl0eSgpIHtcclxuICAgIGxldCBpc1Zpc2l0QXBwbGljYWJsZSA9IHRydWU7XHJcbiAgICBpZiAodGhpcy53aWRnZXRFbGVtZW50ICYmIHR5cGVvZiB0aGlzLndpZGdldEVsZW1lbnQuZ2V0VmlzaXRMaW5rVmlzaWJpbGl0eVN0YXR1cyA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgIGlzVmlzaXRBcHBsaWNhYmxlID0gdGhpcy53aWRnZXRFbGVtZW50LmdldFZpc2l0TGlua1Zpc2liaWxpdHlTdGF0dXMoKTtcclxuICAgIH1cclxuICAgIHJldHVybiBpc1Zpc2l0QXBwbGljYWJsZTtcclxuICB9XHJcblxyXG4gIC8qKlNob3cgZHJvcGRvd24gb24gZ2VhciBpY29uIGNsaWNrICAqL1xyXG4gIHB1YmxpYyBzaG93RHJvcERvd24oZTogYW55KSB7XHJcbiAgICB0aGlzLnNldERvd25sb2FkSWNvbigpO1xyXG5cclxuICAgIHRoaXMucmVtb3ZlTWVudSgpO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcblxyXG5cclxuICAgICAgbGV0IHRhcmdldFBvcyA9IGUudGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICBsZXQgc3R5bGU6IHN0cmluZyA9IFwicG9zaXRpb246Zml4ZWQ7dG9wOlwiICsgKHRhcmdldFBvcy55ICsgMTUpICsgJ3B4JyArICc7bGVmdDonICsgKGUucGFnZVggLSAxMjIpICsgJ3B4O3otaW5kZXg6MTAwMDsnO1xyXG4gICAgICBsZXQgaHRtbCA9IHRoaXMuZ2V0Q29udGVueHRIdG1sKHN0eWxlKTtcclxuXHJcbiAgICAgIGpRdWVyeShodG1sKS5hcHBlbmRUbygnYm9keScpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuaXNXaWRnZXRNZ21udCkge1xyXG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignd2NFZGl0V2lkZ2V0JywgdGhpcy5lZGl0V2lkZ2V0KTtcclxuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3djQ29weVdpZGdldCcsIHRoaXMuY29weVdpZGdldCk7XHJcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCd3Y01vdmVXaWRnZXQnLCB0aGlzLm1vdmVXaWRnZXQpO1xyXG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignd2NXaWRnZXREZWxldGUnLCB0aGlzLmRlbGV0ZVdpZGdldCk7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IGN1c3RvbVBhZ2VQYXJhbXMgPSBmYWxzZTtcclxuICAgICAgaWYgKHRoaXMuZGF0YS53aWRnZXRJbmZvICYmIHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldFNldHRpbmdzKSB7XHJcbiAgICAgICAgdGhpcy53aWRnZXRTZXR0aW5ncyA9IHRoaXMuZ2V0UGFyc2VkQ29uZmlnKHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldFNldHRpbmdzKTtcclxuICAgICAgICBpZiAodGhpcy53aWRnZXRTZXR0aW5ncy5jdXN0b21QYWdlUGFyYW1zIHx8IHRoaXMud2lkZ2V0U2V0dGluZ3MuY3VzdG9tUGFnZVVSTCkge1xyXG4gICAgICAgICAgY3VzdG9tUGFnZVBhcmFtcyA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoKHRoaXMuZGV0YWlsUGFnZVVybCB8fCBjdXN0b21QYWdlUGFyYW1zKSAmJiB0aGlzLmNoZWNrVmlzaXRMaW5rVmlzaWJsaXR5KCkpIHtcclxuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3djVmlzaXRXaWRnZXQnLCB0aGlzLnZpc2l0UGFnZSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuaXNDaGFydERvd25sb2FkVmlzaWJsZSkge1xyXG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignd2NEb3dubG9hZFBuZycsIHRoaXMuZG93bmxvYWRJY29uQ2xpY2tlZCwgJ1BORycpO1xyXG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignd2NEb3dubG9hZEpwZycsIHRoaXMuZG93bmxvYWRJY29uQ2xpY2tlZCwgJ0pQRUcnKTtcclxuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3djRG93bmxvYWRQZGYnLCB0aGlzLmRvd25sb2FkSWNvbkNsaWNrZWQsICdQREYnKTtcclxuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3djRG93bmxvYWRTdmcnLCB0aGlzLmRvd25sb2FkSWNvbkNsaWNrZWQsICdTVkcnKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5pc0dyaWREb3dubG9hZFZpc2libGUgJiYgdGhpcy5zaG93RXhjZWxsKSB7XHJcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCd3Y0Rvd25sb2FkRXhjZWwnLCB0aGlzLmRvd25sb2FkSWNvbkNsaWNrZWQsICdDU1YnKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JhLWRiLXdpZGdldC1tZW51Jyk/LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZW50ZXInLCAoKSA9PiB7XHJcbiAgICAgICAgd2luZG93Lm1vdXNlT3ZlcldpZGdldE1lbnUgPSB0cnVlO1xyXG4gICAgICB9KTtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JhLWRiLXdpZGdldC1tZW51Jyk/LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCAoKSA9PiB7XHJcbiAgICAgICAgd2luZG93Lm1vdXNlT3ZlcldpZGdldE1lbnUgPSBmYWxzZTtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIGlmICghd2luZG93LmdyaWRzdGVySXRlbUVudGVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlTWVudSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWRkRXZlbnRMaXN0ZW5lcihpZDogc3RyaW5nLCBldmVudDogYW55LCBwYXJhbXM/OiBhbnkpIHtcclxuICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xyXG4gICAgaWYgKGVsZW1lbnQpIHtcclxuICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcclxuICAgICAgICBldmVudC5jYWxsKHRoaXMsIHBhcmFtcyk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRDb250ZW54dEh0bWwoc3R5bGU6IHN0cmluZykge1xyXG4gICAgbGV0IGh0bWw6IHN0cmluZyA9ICc8ZGl2IGlkPVwicmEtZGItd2lkZ2V0LW1lbnVcIicgKyAnc3R5bGU9XCInICsgc3R5bGUgKyAnXCIgY2xhc3M9XCJkb3dubG9hZC1jb250ZW50IGRyb3Bkb3duLWNvbnRlbnQgd2lkZ2V0LWNvbmZpZy1pdGVtIGRyb3Bkb3duLWNsaWNrXCIgc3R5bGU9XCJ6LWluZGV4OiAxMDAyO1wiPic7XHJcblxyXG4gICAgbGV0IHNldHRpbmdzID0gJyc7XHJcbiAgICBpZiAodGhpcy5pc1dpZGdldE1nbW50KSB7XHJcbiAgICAgIGlmICghdGhpcy5kYXRhLndpZGdldEluZm8udGVtcGxhdGVXaWRnZXRTZXR0aW5ncyB8fCAhdGhpcy5kYXRhLndpZGdldEluZm8udGVtcGxhdGVXaWRnZXRTZXR0aW5ncy5oaWRlRWRpdClcclxuICAgICAgICBzZXR0aW5ncyArPSB0aGlzLmdldEh0bWxGb3JCdXR0b24oJ3djRWRpdFdpZGdldCcsICdmYWwgZmEtZWRpdCcsIHRoaXMuZWRpdFRleHQpO1xyXG4gICAgICBpZiAoIXRoaXMuZGF0YS53aWRnZXRJbmZvLnRlbXBsYXRlV2lkZ2V0U2V0dGluZ3MgfHwgIXRoaXMuZGF0YS53aWRnZXRJbmZvLnRlbXBsYXRlV2lkZ2V0U2V0dGluZ3MuaGlkZUNvcHkpXHJcbiAgICAgICAgc2V0dGluZ3MgKz0gdGhpcy5nZXRIdG1sRm9yQnV0dG9uKCd3Y0NvcHlXaWRnZXQnLCAnZmFsIGZhLWNvcHknLCB0aGlzLmNvcHlUZXh0KTtcclxuICAgICAgaWYgKCF0aGlzLmRhdGEud2lkZ2V0SW5mby50ZW1wbGF0ZVdpZGdldFNldHRpbmdzIHx8ICF0aGlzLmRhdGEud2lkZ2V0SW5mby50ZW1wbGF0ZVdpZGdldFNldHRpbmdzLmhpZGVNb3ZlKVxyXG4gICAgICAgIHNldHRpbmdzICs9IHRoaXMuZ2V0SHRtbEZvckJ1dHRvbignd2NNb3ZlV2lkZ2V0JywgJ2ZhbCBmYS1hcnJvd3MtYWx0JywgdGhpcy5tb3ZlVGV4dCk7XHJcbiAgICB9XHJcbiAgICBsZXQgY3VzdG9tUGFnZVBhcmFtcyA9IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuZGF0YS53aWRnZXRJbmZvICYmIHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldFNldHRpbmdzKSB7XHJcbiAgICAgIHRoaXMud2lkZ2V0U2V0dGluZ3MgPSB0aGlzLmdldFBhcnNlZENvbmZpZyh0aGlzLmRhdGEud2lkZ2V0SW5mby53aWRnZXRTZXR0aW5ncyk7XHJcbiAgICAgIGlmICh0aGlzLndpZGdldFNldHRpbmdzLmN1c3RvbVBhZ2VQYXJhbXMgfHwgdGhpcy53aWRnZXRTZXR0aW5ncy5jdXN0b21QYWdlVVJMKSB7XHJcbiAgICAgICAgY3VzdG9tUGFnZVBhcmFtcyA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICgoIXRoaXMuZGF0YS53aWRnZXRJbmZvLnRlbXBsYXRlV2lkZ2V0U2V0dGluZ3MgfHwgIXRoaXMuZGF0YS53aWRnZXRJbmZvLnRlbXBsYXRlV2lkZ2V0U2V0dGluZ3MuaGlkZVZpc2l0UGFnZSkgJiYgKHRoaXMuZGV0YWlsUGFnZVVybCB8fCBjdXN0b21QYWdlUGFyYW1zKSAmJiB0aGlzLmNoZWNrVmlzaXRMaW5rVmlzaWJsaXR5KCkpIHtcclxuICAgICAgc2V0dGluZ3MgKz0gJzxhIHN0eWxlPVwibWF4LWhlaWdodDogMzBweDthbGlnbi1pdGVtczogY2VudGVyO2FsaWduLWNvbnRlbnQ6IGNlbnRlcjsgZGlzcGxheTogZmxleDtcIiBpZD1cIndjVmlzaXRXaWRnZXRcIj4nO1xyXG4gICAgICBzZXR0aW5ncyArPSAnPGkgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDRweDtmb250LXNpemU6IDI3cHggIWltcG9ydGFudDtcIiBjbGFzcz1cImZhbCBmYS1hbmdsZS1yaWdodFwiPjwvaT4gJztcclxuICAgICAgc2V0dGluZ3MgKz0gJzxzcGFuIHN0eWxlPVwicGFkZGluZy1sZWZ0OiAxMXB4O21hcmdpbi10b3A6IDJweDtcIiBzdHlsZT1cInBhZGRpbmctbGVmdDogNnB4O1wiPic7XHJcbiAgICAgIHNldHRpbmdzICs9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi52aXNpdHBhZ2UnKTtcclxuICAgICAgc2V0dGluZ3MgKz0gJzwvc3Bhbj48L2E+JztcclxuICAgIH1cclxuICAgIGlmICgoIXRoaXMuZGF0YS53aWRnZXRJbmZvLnRlbXBsYXRlV2lkZ2V0U2V0dGluZ3MgfHwgIXRoaXMuZGF0YS53aWRnZXRJbmZvLnRlbXBsYXRlV2lkZ2V0U2V0dGluZ3MuaGlkZVZpc2l0UGFnZSkgJiYgKHRoaXMuZGV0YWlsUGFnZVVybCAmJiB0aGlzLmNoZWNrVmlzaXRMaW5rVmlzaWJsaXR5KCkpIHx8IHRoaXMuaXNXaWRnZXRNZ21udCkge1xyXG4gICAgICBodG1sICs9ICc8ZGl2IHN0eWxlPVwiY29sb3I6ICM5RkEwQTQ7Zm9udC1zaXplOiAxMnB4O3BhZGRpbmctdG9wOiA4cHg7cGFkZGluZy1sZWZ0OiAxMnB4O1wiPic7XHJcbiAgICAgIGh0bWwgKz0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLnNldHRpbmdzJykgKyAnPC9kaXY+JztcclxuICAgICAgaHRtbCArPSBzZXR0aW5ncztcclxuICAgICAgaHRtbCArPSB0aGlzLmdldEhyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEb3dubG9hZEljb25WaXNpYmxlKSB7XHJcbiAgICAgIGlmICh0aGlzLnNob3dFeGNlbGwpIHtcclxuICAgICAgICBpZiAodGhpcy5kZXRhaWxQYWdlVXJsIHx8IHRoaXMuaXNXaWRnZXRNZ21udClcclxuICAgICAgICAgIGh0bWwgKz0gJzxzcGFuIHN0eWxlPVwiY29sb3I6ICM5RkEwQTQ7Zm9udC1zaXplOiAxMnB4O1wiPic7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgaHRtbCArPSAnPHNwYW4gc3R5bGU9XCJjb2xvcjogIzlGQTBBNDtmb250LXNpemU6IDEycHg7cGFkZGluZy10b3A6NXB4O2Rpc3BsYXk6YmxvY2s7XCI+JztcclxuXHJcbiAgICAgICAgaHRtbCArPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uZG93bmxvYWRzJyk7XHJcbiAgICAgICAgaHRtbCArPSAnPC9zcGFuPic7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLmlzQ2hhcnREb3dubG9hZFZpc2libGUpIHtcclxuICAgICAgICBodG1sICs9ICc8ZGl2IHN0eWxlPVwicGFkZGluZy10b3A6IDEwcHg7XCIgY2xhc3M9XCJjaGFydERvd25sb2FkXCI+JztcclxuICAgICAgICBodG1sICs9IHRoaXMuZ2V0SHRtbEZvckJ1dHRvbignd2NEb3dubG9hZFBuZycsICdmYWwgZmEtZmlsZS1pbWFnZScsIHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5wbmcnKSk7XHJcbiAgICAgICAgaHRtbCArPSB0aGlzLmdldEh0bWxGb3JCdXR0b24oJ3djRG93bmxvYWRKcGcnLCAnZmFsIGZhLWZpbGUtaW1hZ2UnLCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uanBlZycpKTtcclxuICAgICAgICBodG1sICs9IHRoaXMuZ2V0SHRtbEZvckJ1dHRvbignd2NEb3dubG9hZFBkZicsICdmYWwgZmEtZmlsZS1wZGYnLCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24ucGRmJykpO1xyXG4gICAgICAgIGh0bWwgKz0gdGhpcy5nZXRIdG1sRm9yQnV0dG9uKCd3Y0Rvd25sb2FkU3ZnJywgJ2ZhbCBmYS1maWxlLWFsdCcsIHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5zdmcnKSk7XHJcbiAgICAgICAgaHRtbCArPSAnPC9kaXY+JztcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5pc0dyaWREb3dubG9hZFZpc2libGUgJiYgdGhpcy5zaG93RXhjZWxsKSB7XHJcbiAgICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz1cImdyaWREb3dubG9hZFwiPic7XHJcbiAgICAgICAgaHRtbCArPSB0aGlzLmdldEh0bWxGb3JCdXR0b24oJ3djRG93bmxvYWRFeGNlbCcsICdmYWwgZmEtZG93bmxvYWQnLCB0aGlzLmV4Y2VsVGV4dCk7XHJcbiAgICAgICAgaHRtbCArPSAnPC9kaXY+JztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuaXNEb3dubG9hZEljb25WaXNpYmxlICYmIHRoaXMuaXNXaWRnZXRNZ21udCAmJiB0aGlzLnNob3dFeGNlbGwpIHtcclxuICAgICAgaHRtbCArPSB0aGlzLmdldEhyKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5pc1dpZGdldE1nbW50ICYmICF0aGlzLmRhdGEud2lkZ2V0SW5mby50ZW1wbGF0ZVdpZGdldFNldHRpbmdzIHx8ICF0aGlzLmRhdGEud2lkZ2V0SW5mby50ZW1wbGF0ZVdpZGdldFNldHRpbmdzLmhpZGVEZWxldGUpIHtcclxuICAgICAgaHRtbCArPSAnPGEgaWQ9XCJ3Y1dpZGdldERlbGV0ZVwiPjxpIGNsYXNzPVwiZmFsIGZhLXRpbWVzXCIgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDNweDtjb2xvcjogcmVkO1wiPjwvaT48c3Bhbj4nO1xyXG4gICAgICBodG1sICs9IHRoaXMuZGVsZXRlVGV4dDtcclxuICAgICAgaHRtbCArPSAnPC9zcGFuPjwvYT4nO1xyXG4gICAgfVxyXG5cclxuICAgIGh0bWwgKz0gJzwvZGl2Pic7XHJcbiAgICByZXR1cm4gaHRtbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SHIoKSB7XHJcbiAgICByZXR1cm4gJzxociBjbGFzcz1cImhyXCIgc3R5bGU9XCJtYXJnaW4tdG9wOiA1cHg7bWFyZ2luLWJvdHRvbTogNXB4O1wiPic7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEh0bWxGb3JCdXR0b24oaWQ6IHN0cmluZywgZm9udENsYXNzOiBzdHJpbmcsIHRleHQ6IHN0cmluZykge1xyXG4gICAgbGV0IGh0bWwgPSAnPGEgaWQ9XCInICsgaWQgKyAnXCI+PGkgc3R5bGU9XCJ3aWR0aDoxNnB4XCIgY2xhc3M9XCInICsgZm9udENsYXNzICsgJ1wiPjwvaT4gPHNwYW4gc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDZweDtcIj4nO1xyXG4gICAgaHRtbCArPSB0ZXh0O1xyXG4gICAgaHRtbCArPSAnPC9zcGFuPjwvYT4nO1xyXG4gICAgcmV0dXJuIGh0bWw7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBnZXRQYXJzZWRDb25maWcoY29uZmlnOiBhbnkpIHtcclxuICAgIGxldCBwYXJzZWRDb25maWc6IGFueTtcclxuICAgIGlmIChjb25maWcpIHtcclxuICAgICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIHBhcnNlZENvbmZpZyA9IEpTT04ucGFyc2UoY29uZmlnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2gge1xyXG4gICAgICAgICAgcGFyc2VkQ29uZmlnID0ge307XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwYXJzZWRDb25maWc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjb25maWc7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFwcGxheVdpZGdldFNldHRpbmdzKHNldHRpbmdzOiBhbnkpIHtcclxuICAgIGlmIChzZXR0aW5ncy5Ob1BhZGRpbmcpXHJcbiAgICAgIHRoaXMubm9QYWRkaW5nID0gdHJ1ZVxyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLm5vUGFkZGluZyA9IGZhbHNlXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEluYXBwbGljYWJsZUZpbHRlcnMoZGF0YTogYW55LCBpbnN0YW5jZUlkOiBhbnkpIHtcclxuICAgIHZhciB3aWRnZXREYXRhOiBhbnkgPSB7fTtcclxuICAgIHRoaXMuaW5hcHBsaWNhYmxlRmlsdGVycyA9IFtdO1xyXG4gICAgd2lkZ2V0RGF0YS5pbnN0YW5jZUlkID0gaW5zdGFuY2VJZDtcclxuICAgIGlmIChkYXRhICYmIGRhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICBkYXRhLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChlbGVtZW50ID09ICdkYXRlUmFuZ2UnKVxyXG4gICAgICAgICAgdGhpcy5pbmFwcGxpY2FibGVGaWx0ZXJzLnB1c2godGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLkRhdGVSYW5nZScpKTtcclxuICAgICAgICBlbHNlIGlmIChlbGVtZW50ID09ICdwYXJ0aWNpcGFudCcpIHtcclxuICAgICAgICAgIHRoaXMuaW5hcHBsaWNhYmxlRmlsdGVycy5wdXNoKHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5EaXZpc2lvbkdyb3VwJykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChlbGVtZW50ID09ICdzb3VyY2UnKVxyXG4gICAgICAgICAgdGhpcy5pbmFwcGxpY2FibGVGaWx0ZXJzLnB1c2godGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLkRhdGFTdHJlYW0nKSk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgdGhpcy5pbmFwcGxpY2FibGVGaWx0ZXJzLnB1c2goZWxlbWVudCk7XHJcbiAgICAgIH0pO1xyXG4gICAgICB3aWRnZXREYXRhLmRhdGEgPSBkYXRhO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHdpZGdldERhdGEuZGF0YSA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuICAgIHRoaXMudXBkYXRlQXBwbGllZEZpbHRlcnMuZW1pdCh3aWRnZXREYXRhKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvcGVuUG9wdXAodGl0bGU6IGFueSwgZGF0YTogYW55LCBmb290ZXI6IGFueSwgdHlwZTogYW55LCB0ZW1wbGF0ZTogYW55ID0gdW5kZWZpbmVkKSB7XHJcbiAgICBsZXQgcHJvcHM6IGFueSA9IHt9O1xyXG4gICAgaWYgKHR5cGUgPT0gJ2lubmFwbGljYWJsZScgJiYgdGhpcy5iYW5Qb3B1cERpdilcclxuICAgICAgcHJvcHMuZWxlbWVudCA9IHRoaXMuYmFuUG9wdXBEaXYubmF0aXZlRWxlbWVudDtcclxuICAgIGlmICh0eXBlID09ICdsb2NrJyAmJiB0aGlzLmxvY2tQb3B1cERpdilcclxuICAgICAgcHJvcHMuZWxlbWVudCA9IHRoaXMubG9ja1BvcHVwRGl2Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBwcm9wcy50aXRsZSA9IHRpdGxlO1xyXG4gICAgcHJvcHMuZGF0YSA9IGRhdGE7XHJcbiAgICBwcm9wcy5mb290ZXIgPSBmb290ZXI7XHJcbiAgICBpZiAodGVtcGxhdGUpXHJcbiAgICAgIHByb3BzLnRlbXBsYXRlID0gdGVtcGxhdGU7XHJcbiAgICB0aGlzLmN1cnJlbnRDb21wb25lbnQgPSB0aGlzLmRvbVNlcnZpY2UuYXBwZW5kQ29tcG9uZW50KExvY2tUb29sdGlwLCBkb2N1bWVudC5ib2R5LCBwcm9wcyk7XHJcbiAgICB0aGlzLnBvcHVwSW5zdGFuY2UgPSA8YW55PnRoaXMuY3VycmVudENvbXBvbmVudC5pbnN0YW5jZTtcclxuICB9XHJcbiAgcHVibGljIGNsb3NlUG9wdXAoKSB7XHJcbiAgICBpZiAodGhpcy5jdXJyZW50Q29tcG9uZW50KVxyXG4gICAgICB0aGlzLnBvcHVwSW5zdGFuY2UucmVtb3ZlTWUodGhpcy5jdXJyZW50Q29tcG9uZW50KTtcclxuICB9XHJcbiAgZ2V0d2lkZ2V0VGl0bGVUcmFuc2xhdGlvbihpdGVtOiBhbnkpIHtcclxuICAgIGxldCByS2V5ID0gJ0RCV18nICsgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLm1ha2VDb2RlKGl0ZW0pO1xyXG5cclxuICAgIGxldCB0cmFuc2xhdGVkU3RyaW5nID0gJyc7XHJcbiAgICBpZiAodGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmNsaWVudElkKSB7XHJcbiAgICAgIGNvbnN0IHRyYW5zbGF0aW9uTW9kdWxlID0gdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmNsaWVudElkICsgJ19EQlcnXHJcbiAgICAgIHRyYW5zbGF0ZWRTdHJpbmcgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKHRyYW5zbGF0aW9uTW9kdWxlICsgJy4nICsgcktleSk7XHJcblxyXG4gICAgICBpZiAodHJhbnNsYXRlZFN0cmluZy50b0xvd2VyQ2FzZSgpID09PSByS2V5LnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gdHJhbnNsYXRlZFN0cmluZztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAgICByZXR1cm4gaXRlbTtcclxuICB9XHJcblxyXG59XHJcbiIsIjxkaXYgI3djV3JhcHBlciBjbGFzcz1cIndjLXdyYXBwZXJcIiAobW91c2VlbnRlcik9XCJtb3VzZUhvdmVyKHRydWUpXCIgKG1vdXNlbGVhdmUpPVwibW91c2VIb3ZlcihmYWxzZSlcIlxyXG4gIFtuZ1N0eWxlXT1cInsnbWFyZ2luLWxlZnQnOiBub1BhZGRpbmc/JzBweCc6JzE1cHgnLCdtYXJnaW4tcmlnaHQnOiBub1BhZGRpbmc/JzBweCc6JzE1cHgnfVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJ3Y2hlYWRlciB3aWRnZXQtbW92ZVwiICpuZ0lmPVwiIWhpZGVUaXRsZVwiXHJcbiAgICBbbmdDbGFzc109XCJ7J3VuZGVyTGluZSc6IGVuYWJsZVRpdGxlTGluZSB8fCBpc1dpZGdldFN0YXRlQXBwbGljYWJsZX1cIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIiBbbmdDbGFzc109XCJ7J3djLW1vdmVyJyA6IGlzV2lkZ2V0Q2FuTW92ZSB9XCIgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDBweDtoZWlnaHQ6aW5oZXJpdDtwYWRkaW5nLXJpZ2h0OiAwcHg7XCI+XHJcbiAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OmZsZXg7bWFyZ2luLXRvcDoxMHB4O1wiXHJcbiAgICAgICAgW25nU3R5bGVdPVwieydtYXJnaW4tbGVmdCc6IG5vUGFkZGluZz8nMTVweCc6JzBweCcsJ21hcmdpbi1yaWdodCc6IG5vUGFkZGluZz8nMTVweCc6JzBweCd9XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC05IGZsb2F0LWxlZnQgdGl0bGUtbGFiZWxcIj5cclxuICAgICAgICAgIDxyYS10b29sdGlwIFt2YWx1ZV09XCJ0b29sVGlwVmFsdWVcIiBbd2lkdGhdPVwidG9vbFRpcFdpZHRoXCI+XHJcbiAgICAgICAgICAgIDxkaXYgW2hpZGRlbl09XCJoaWRlVGl0bGVcIiBzdHlsZT1cInRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO3doaXRlLXNwYWNlOiBub3dyYXA7b3ZlcmZsb3c6IGhpZGRlbjtcIlxyXG4gICAgICAgICAgICAgIChtb3VzZW92ZXIpPVwibW91c2VPdmVyKCRldmVudClcIiAjc2VhcmNoSW5wdXQ+e3tXaWRnZXREaXNwbGF5TmFtZX19PC9kaXY+XHJcbiAgICAgICAgICA8L3JhLXRvb2x0aXA+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0zXCIgc3R5bGU9XCJjdXJzb3I6ZGVmYXVsdDtwYWRkaW5nLXJpZ2h0OiAwcHg7XCI+ICAgICAgICBcclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbG9hdC1yaWdodFwiIHN0eWxlPVwiZGlzcGxheTogZmxleDtcIj5cclxuICAgICAgICAgICAgPGRpdiAgI2JhblBvcHVwRGl2IChtb3VzZW92ZXIpPVwib3BlblBvcHVwKGluYXBwbGljYWJsZUljb25UaXRsZSxpbmFwcGxpY2FibGVGaWx0ZXJzLGluYXBwbGljYWJsZUljb25Gb290ZXIsJ2lubmFwbGljYWJsZScpXCIgKG1vdXNlb3V0KT1cImNsb3NlUG9wdXAoKVwiIGNsYXNzPVwidGl0bGUtYmFyLWxvY2staWNvbiBsb2NrLWRyb3Bkb3duXCIgW2hpZGRlbl09XCIhaW5hcHBsaWNhYmxlRmlsdGVycyB8fCBpbmFwcGxpY2FibGVGaWx0ZXJzLmxlbmd0aCA9PSAwIHx8ICFnbG9iYWxGaWx0ZXIgfHwgZ2xvYmFsRmlsdGVyID09ICd7fSdcIj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhbCBmYS1iYW4gbG9ja1wiPjwvaT4gICAgICAgICAgICBcclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgI2xvY2tQb3B1cERpdiAobW91c2VvdmVyKT1cIm9wZW5Qb3B1cChsb2NrSWNvblRpdGxlLGxvY2tEZXRhaWxzLGxvY2tJY29uRm9vdGVyLCdsb2NrJyxsb2NrVGVtcGxhdGVJbmZvKVwiIChtb3VzZW91dCk9XCJjbG9zZVBvcHVwKClcIiBjbGFzcz1cInRpdGxlLWJhci1sb2NrLWljb24gbG9jay1kcm9wZG93blwiIFtoaWRkZW5dPVwiKCFsb2NrRGV0YWlscyAmJiAhbG9ja1RlbXBsYXRlSW5mbykgfHwgaGlkZUxvY2tcIj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhbCBmYS1sb2NrIGxvY2tcIj48L2k+ICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndpZGdldC1tZW51XCIgc3R5bGU9XCJ3aWR0aDoxMHB4O1wiXHJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyd3aWRnZXQtbWVudS1zaG93JzogaXNNb3VzZUhvdmVyICYmIHNob3dTZXR0aW5nc0xpbmt9XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3BidG4gdGl0bGUtYmFyLWljb25cIj5cclxuICAgICAgICAgICAgICAgIDxpIChjbGljayk9XCJzaG93RHJvcERvd24oJGV2ZW50KVwiICN3aWRnZXREcm9wZG93biBjbGFzcz1cImZhbCBmYS1lbGxpcHNpcy12IHdpZGdldC1tZW51LWVsbGlwc2VcIj48L2k+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiAqbmdJZj1cImhpZGVUaXRsZSAmJiAhc2hvd09ubHlEcm9wZG93blwiIGNsYXNzPVwid2NoZWFkZXIgd2lkZ2V0LW1vdmVcIlxyXG4gICAgc3R5bGU9XCJoZWlnaHQ6IDQ1cHg7d2lkdGg6IDk1JTtjdXJzb3I6IG1vdmU7ei1pbmRleDogOTk7b3BhY2l0eTogMDtcIj5cclxuICA8L2Rpdj5cclxuICA8ZGl2ICAqbmdJZj1cImhpZGVUaXRsZSB8fCBzaG93T25seURyb3Bkb3duXCIgY2xhc3M9XCJ3aWRnZXQtbWVudSB3aWRnZXQtbWVudS10aXRsZS1oaWRkZW5cIiBbbmdDbGFzc109XCJ7J3dpZGdldC1tZW51LXNob3cnOiBpc01vdXNlSG92ZXIgJiYgc2hvd1NldHRpbmdzTGlua31cIj5cclxuICAgIDxkaXYgY2xhc3M9XCJkcm9wYnRuIHRpdGxlLWJhci1pY29uXCI+XHJcbiAgICAgIDxpIChjbGljayk9XCJzaG93RHJvcERvd24oJGV2ZW50KVwiIGNsYXNzPVwiZmFsIGZhLWVsbGlwc2lzLXZcIiBzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlcjtcIj48L2k+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwid2NCb2R5XCIgW25nU3R5bGVdPVwieydib3R0b20nOiBub1BhZGRpbmc/JzBweCc6JzEwcHgnLCd0b3AnOmhpZGVUaXRsZSB8fCBzaG93T25seURyb3Bkb3duPycxMHB4JzonNDZweCd9XCI+XHJcbiAgICA8ZGl2IFtoaWRkZW5dPVwiaXNXaWRnZXRTdGF0ZUFwcGxpY2FibGVcIiBjbGFzcz1cIm0tZmFkZU91dCB3aWRnZXQtb3ZlcmxheVwiIFtuZ0NsYXNzXT1cInsnbS1mYWRlSW4nOiAgc2hvd1BhbmVsfVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibGRzLXJvbGxlclwiPlxyXG4gICAgICAgIDxkaXY+PC9kaXY+XHJcbiAgICAgICAgPGRpdj48L2Rpdj5cclxuICAgICAgICA8ZGl2PjwvZGl2PlxyXG4gICAgICAgIDxkaXY+PC9kaXY+XHJcbiAgICAgICAgPGRpdj48L2Rpdj5cclxuICAgICAgICA8ZGl2PjwvZGl2PlxyXG4gICAgICAgIDxkaXY+PC9kaXY+XHJcbiAgICAgICAgPGRpdj48L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJ3Y1wiIFtoaWRkZW5dPVwiaXNXaWRnZXRTdGF0ZUFwcGxpY2FibGVcIj5cclxuICAgICAgPGRpdiBbaGlkZGVuXT1cIiFpc0N1c3RvbUVsZW1lbnRcIiAjY3RsV2lkZ2V0PjwvZGl2PlxyXG4gICAgICA8ZGl2IFtoaWRkZW5dPVwiaXNDdXN0b21FbGVtZW50XCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAjY3RsV2lkZ2V0TW9kdWxlPjwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiAqbmdJZj1cImlzV2lkZ2V0U3RhdGVBcHBsaWNhYmxlXCIgY2xhc3M9XCJkZWZhdWx0Q29uZmlnXCI+XHJcbiAgICAgIDxyYS13aWRnZXQtc3RhdGUgc3R5bGU9XCJ3aWR0aDogMTAwJTtoZWlnaHQ6IDEwMCU7XCIgW2lzV2lkZ2V0U3RhdGVBcHBsaWNhYmxlXT1cImlzV2lkZ2V0U3RhdGVBcHBsaWNhYmxlXCJcclxuICAgICAgICBbaXNHbG9iYWxGaWx0ZXJBcHBsaWVkXT1cImlzR2xvYmFsRmlsdGVyQXBwbGllZFwiIFt3aWRnZXRFbXB0eVN0YXRlXT1cIndpZGdldEVtcHR5U3RhdGVcIlxyXG4gICAgICAgIChlZGl0V2lkZ2V0Q2xpY2tlZCk9ZWRpdFdpZGdldCgpIFt3aWR0aENvbF09XCJ3aWR0aFwiIFtoZWlnaHRDb2xdPVwiaGVpZ2h0XCI+XHJcbiAgICAgIDwvcmEtd2lkZ2V0LXN0YXRlPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PiJdfQ==
964
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmEud2lkZ2V0LmNvbnRhaW5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yYS1kYXNoYm9hcmQtZnJhbWV3b3JrL3NyYy9saWIvcmEtd2lkZ2V0LWNvbnRhaW5lci9yYS53aWRnZXQuY29udGFpbmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JhLWRhc2hib2FyZC1mcmFtZXdvcmsvc3JjL2xpYi9yYS13aWRnZXQtY29udGFpbmVyL3JhLndpZGdldC5jb250YWluZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxNQUFNLEVBQW9HLGdCQUFnQixFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUc3TyxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3ZELE9BQU8sRUFBZ0QsY0FBYyxFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBK0MsTUFBTSwrQkFBK0IsQ0FBQztBQUlqTixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUNBQXVDLENBQUE7QUFDbkUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7Ozs7Ozs7O0FBU3pFLE1BQU0sT0FBTyxpQkFBaUI7SUEyRjVCLElBQ0ksVUFBVSxDQUFDLE9BQWdCO1FBQzdCLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxZQUFvQixnQkFBb0MsRUFDOUMsVUFBOEIsRUFDOUIsZ0JBQW9DLEVBQ3BDLE1BQWMsRUFDZCxRQUF5QixFQUN6QixRQUFtQixFQUNuQixHQUFzQixFQUN0QixtQkFBd0MsRUFDeEMsVUFBc0I7UUFSWixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQW9CO1FBQzlDLGVBQVUs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Szt1QkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgT3V0cHV0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIEFmdGVyVmlld0luaXQsIFNpbXBsZUNoYW5nZSwgT25EZXN0cm95LCBOZ1pvbmUsIFJlbmRlcmVyMiwgVGVtcGxhdGVSZWYsIFZpZXdDb250YWluZXJSZWYsIENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJhRGFzaGJvYXJkU2VydmljZSB9IGZyb20gJy4vLi4vcmEuZGFzaGJvYXJkLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSQURhc2hib2FyZEV2ZW50QnVzIH0gZnJvbSAnLi4vcmEuZGFzaGJhcmQuZXZlbnQuYnVzJztcclxuaW1wb3J0IHsgUkFFdmVudCwgUkFFdmVudEtleSB9IGZyb20gJy4uL3JhLmV2ZW50LmVudW0nO1xyXG5pbXBvcnQgeyBJQXBwQ29uZmlnLCBJV2lkZ2V0Q29uZmlnRmlsdGVyLCBJV2lkZ2V0SW5mbywgUkFEb3dubG9hZFR5cGUsIFJBRG93bmxvYWRPcHRpb24sIFJhV2lkZ2V0bG9ja1N0YXR1cywgV2lkZ2V0Vmlld1N0YXRlLCBJY29uZmlnQ2hhbmdlcywgSUJ1bGtBY3Rpb24sIElEYXNoYm9hcmRJbmZvIH0gZnJvbSAnQHNjaG5laWRlcmVzcy93aWRnZXRmcmFtZXdvcmsnO1xyXG5pbXBvcnQgeyBOZ3hVaUxvYWRlclNlcnZpY2UgfSBmcm9tICduZ3gtdWktbG9hZGVyJztcclxuaW1wb3J0IHsgTm90aWZpZXJTZXJ2aWNlIH0gZnJvbSAnYW5ndWxhci1ub3RpZmllcic7XHJcbmltcG9ydCB7IFJBVHJhbnNsYXRlU2VydmljZSwgUkFQZXJtaXNzaW9uU2VydmljZSwgRG9tU2VydmljZSB9IGZyb20gJ0BzY2huZWlkZXJlc3MvcmEtY29tbW9uJztcclxuaW1wb3J0IHsgTG9ja1Rvb2x0aXAgfSBmcm9tICcuL2xvY2stdG9vbHRpcC9sb2NrLnRvb2x0aXAuY29tcG9uZW50J1xyXG5pbXBvcnQgeyBsb2FkUmVtb3RlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXItYXJjaGl0ZWN0cy9tb2R1bGUtZmVkZXJhdGlvbic7XHJcblxyXG5kZWNsYXJlIHZhciBqUXVlcnk6IGFueTtcclxuZGVjbGFyZSB2YXIgd2luZG93OiBhbnk7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3JhLXdpZGdldC1jb250YWluZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9yYS53aWRnZXQuY29udGFpbmVyLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUkFXaWRnZXRDb250YWluZXIgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuXHJcbiAgcHVibGljIHNob3dQYW5lbDogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHJpdmF0ZSBpc1dpZGdldExvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgd2lkZ2V0RWxlbWVudDogYW55O1xyXG4gIHByaXZhdGUgY29uZmlnQ2hhbmdlZDogYW55O1xyXG4gIHB1YmxpYyB3aWRnZXRIZWlnaHQhOiBudW1iZXI7XHJcbiAgcHVibGljIGxvY2tDbGFzczogc3RyaW5nID0gXCJ1bmxvY2tlZFwiO1xyXG4gIHB1YmxpYyBsb2NrU3RhdHVzOiBSYVdpZGdldGxvY2tTdGF0dXMgPSBSYVdpZGdldGxvY2tTdGF0dXMuVW5sb2NrZWQ7XHJcbiAgcHVibGljIGlzRG93bmxvYWRJY29uVmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpc0NoYXJ0RG93bmxvYWRWaXNpYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGlzR3JpZERvd25sb2FkVmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBkb3dubG9hZEljb25UeXBlITogUkFEb3dubG9hZFR5cGU7XHJcbiAgcHVibGljIGVuYWJsZVRpdGxlTGluZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpc0dsb2JhbEZpbHRlckFwcGxpZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgdG9vbFRpcFZhbHVlOiBzdHJpbmcgPSAnICAnO1xyXG4gIHB1YmxpYyB0b29sVGlwV2lkdGg6IHN0cmluZyA9ICcwcHgnO1xyXG4gIHB1YmxpYyBsb2NrRGV0YWlsczogYW55O1xyXG4gIHB1YmxpYyBoaWRlTG9jazpib29sZWFuPWZhbHNlO1xyXG4gIHB1YmxpYyBsb2NrVGVtcGxhdGVJbmZvITogVGVtcGxhdGVSZWY8YW55PjtcclxuICBwdWJsaWMgZWRpdFRvb2xUaXBWYWx1ZTogc3RyaW5nID0gJyAnO1xyXG4gIHB1YmxpYyBjb3B5VG9vbFRpcFZhbHVlOiBzdHJpbmcgPSAnICc7XHJcbiAgcHVibGljIG1vdmVUb29sVGlwVmFsdWU6IHN0cmluZyA9ICcgJztcclxuICBwdWJsaWMgZXhjZWxUb29sVGlwVmFsdWU6IHN0cmluZyA9ICcgJztcclxuICBwdWJsaWMgZGVsZXRlVG9vbFRpcFZhbHVlOiBzdHJpbmcgPSAnICc7XHJcbiAgcHVibGljIGVkaXRUZXh0OiBzdHJpbmcgPSAnJztcclxuICBwdWJsaWMgY29weVRleHQ6IHN0cmluZyA9ICcnO1xyXG4gIHB1YmxpYyBtb3ZlVGV4dDogc3RyaW5nID0gJyc7XHJcbiAgcHVibGljIGV4Y2VsVGV4dDogc3RyaW5nID0gJyc7XHJcbiAgcHVibGljIGRlbGV0ZVRleHQ6IHN0cmluZyA9ICcnO1xyXG4gIHB1YmxpYyBlZGl0VG9vbFRpcFdpZHRoOiBzdHJpbmcgPSAnMHB4JztcclxuICBwdWJsaWMgY29weVRvb2xUaXBXaWR0aDogc3RyaW5nID0gJzBweCc7XHJcbiAgcHVibGljIG1vdmVUb29sVGlwV2lkdGg6IHN0cmluZyA9ICcwcHgnO1xyXG4gIHB1YmxpYyBleGNlbFRvb2xUaXBXaWR0aDogc3RyaW5nID0gJzBweCc7XHJcbiAgcHVibGljIGRlbGV0ZVRvb2xUaXBXaWR0aDogc3RyaW5nID0gJzBweCc7XHJcbiAgcHVibGljIHdpZGdldFNldHRpbmdzOiBhbnk7XHJcbiAgcHVibGljIG5vUGFkZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpc01vdXNlSG92ZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgc2hvd1NldHRpbmdzTGluazogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHVibGljIGlzS3BpVmlldzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBzaG93RXhjZWxsOiBib29sZWFuID0gdHJ1ZTtcclxuICBwdWJsaWMgaGlkZVRpdGxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGluYXBwbGljYWJsZUZpbHRlcnM6IGFueSA9IFtdO1xyXG4gIHB1YmxpYyBwb3B1cEluc3RhbmNlITogTG9ja1Rvb2x0aXA7XHJcbiAgcHVibGljIGN1cnJlbnRDb21wb25lbnQ6IGFueTtcclxuXHJcbiAgcHVibGljIGxvY2tJY29uVGl0bGU6IGFueTtcclxuICBwdWJsaWMgbG9ja0ljb25Gb290ZXI6IGFueTtcclxuICBwdWJsaWMgaW5hcHBsaWNhYmxlSWNvblRpdGxlOiBhbnk7XHJcbiAgcHVibGljIGluYXBwbGljYWJsZUljb25Gb290ZXI6IGFueTtcclxuICBwdWJsaWMgaXNDdXN0b21FbGVtZW50OiBhbnkgPSBmYWxzZTtcclxuICBwdWJsaWMgc2hvd09ubHlEcm9wZG93bjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBAVmlld0NoaWxkKCdjdGxXaWRnZXQnLCB7IHN0YXRpYzogZmFsc2UgfSkgY3RsV2lkZ2V0ITogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdjdGxXaWRnZXRNb2R1bGUnLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYsIHN0YXRpYzogZmFsc2UgfSkgY3RsV2lkZ2V0TW9kdWxlITogVmlld0NvbnRhaW5lclJlZjtcclxuICBAVmlld0NoaWxkKCd3aWRnZXREcm9wZG93bicsIHsgc3RhdGljOiBmYWxzZSB9KSB3aWRnZXREcm9wZG93biE6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnc2VhcmNoSW5wdXQnLCB7IHN0YXRpYzogZmFsc2UgfSkgc2VhcmNoSW5wdXQhOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ3djV3JhcHBlcicsIHsgc3RhdGljOiBmYWxzZSB9KSB3Y1dyYXBwZXIhOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2JhblBvcHVwRGl2JywgeyBzdGF0aWM6IGZhbHNlIH0pIGJhblBvcHVwRGl2ITogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdsb2NrUG9wdXBEaXYnLCB7IHN0YXRpYzogZmFsc2UgfSkgbG9ja1BvcHVwRGl2ITogRWxlbWVudFJlZjtcclxuXHJcbiAgQElucHV0KCd3aWRnZXQtaW5zdGFuY2UtaWQnKSB3aWRnZXRJbnN0YW5jZUlkITogbnVtYmVyO1xyXG4gIEBJbnB1dCgnZ2xvYmFsLWZpbHRlcicpIGdsb2JhbEZpbHRlcjogYW55O1xyXG4gIEBJbnB1dCgnZGFzaGJvYXJkLWluZm8nKSBkYXNoYm9hcmRJbmZvITogSURhc2hib2FyZEluZm87XHJcbiAgQElucHV0KCdkYXRhJykgZGF0YTogYW55O1xyXG4gIEBJbnB1dCgnZXZlbnQtYnVzJykgcmFEYXNoYm9hcmRFdmVudEJ1cyE6IFJBRGFzaGJvYXJkRXZlbnRCdXM7XHJcbiAgQElucHV0KCdhcHAtY29uZmlnJykgYXBwQ29uZmlnITogSUFwcENvbmZpZztcclxuICBASW5wdXQoJ3dpZGdldC13aWR0aCcpIHdpZHRoITogbnVtYmVyO1xyXG4gIEBJbnB1dCgnd2lkZ2V0LWhlaWdodCcpIGhlaWdodCE6IG51bWJlcjtcclxuICBASW5wdXQoJ2dyaWQtY2VsbC1oZWlnaHQnKSBncmlkQ2VsbEhlaWdodCE6IG51bWJlcjtcclxuICBASW5wdXQoJ2J1bGstYWN0aW9uLWRhdGEnKSBidWxrQWN0aW9uRGF0YSE6IElCdWxrQWN0aW9uO1xyXG4gIEBJbnB1dCgpIGNhbkxvYWREYXRhOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBPdXRwdXQoKSB3aWRnZXREZWxldGVkID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcbiAgQE91dHB1dCgpIHVwZGF0ZUFwcGxpZWRGaWx0ZXJzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIHB1YmxpYyBsb2NrVGl0bGUhOiBzdHJpbmc7XHJcbiAgQE91dHB1dCgpIGRhdGFMb2FkZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHdpZGdldExvYWRlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgcHVibGljIGlzV2lkZ2V0U3RhdGVBcHBsaWNhYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGlzV2lkZ2V0Q2FuTW92ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyB3aWRnZXRFbXB0eVN0YXRlOiBzdHJpbmcgPSAnJztcclxuICBwdWJsaWMgZG9tUmVzaXplZCE6IGJvb2xlYW47XHJcbiAgcHVibGljIGxvY2tWaXNpYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGxvY2tlZEZpZWxkczogYW55O1xyXG4gIHB1YmxpYyBkZXRhaWxQYWdlVXJsITogc3RyaW5nO1xyXG4gIHB1YmxpYyBiYXNlVXJsITogc3RyaW5nO1xyXG4gIHB1YmxpYyBpc1dpZGdldE1nbW50OiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIFdpZGdldERpc3BsYXlOYW1lITogc3RyaW5nO1xyXG4gIHB1YmxpYyBlbmFibGVUaXRsZUxpbmVBY3R1YWw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgd2lkZ2V0RWxlbWVudEhhbmRsZXI6IGFueTtcclxuICBASW5wdXQoJ2RvbS1yZXNpemVkJylcclxuICBzZXQgc2V0UmVzaXplZChyZXNpemVkOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLmludm9rZVdpZGdldFJlc2l6ZWRFdmVudCgpO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkYXNoYm9hcmRTZXJ2aWNlOiBSYURhc2hib2FyZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG5neFNlcnZpY2U6IE5neFVpTG9hZGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogUkFUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcclxuICAgIHByaXZhdGUgbm90aWZpZXI6IE5vdGlmaWVyU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgcmFQZXJtaXNzaW9uU2VydmljZTogUkFQZXJtaXNzaW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgZG9tU2VydmljZTogRG9tU2VydmljZSkge1xyXG4gICAgdGhpcy5yZW5kZXJlci5saXN0ZW4oJ3dpbmRvdycsICdjbGljaycsIChlOiBhbnkpID0+IHtcclxuICAgICAgaWYgKGUudGFyZ2V0LmNsYXNzTmFtZSkge1xyXG4gICAgICAgIGlmIChlLnRhcmdldC5jbGFzc05hbWUgIT0gJ2ZhbCBmYS1lbGxpcHNpcy12IHdpZGdldC1tZW51LWVsbGlwc2UnKSB7XHJcbiAgICAgICAgICB0aGlzLnJlbW92ZU1lbnUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVNZW51KCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuV2lkZ2V0RGlzcGxheU5hbWUgPSB0aGlzLmdldHdpZGdldFRpdGxlVHJhbnNsYXRpb24odGhpcy5kYXRhLndpZGdldEluZm8ud2lkZ2V0VGl0bGUpO1xyXG4gICAgdGhpcy5sb2NrSWNvblRpdGxlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmxvY2tlZGZpZWxkcycpO1xyXG4gICAgdGhpcy5sb2NrSWNvbkZvb3RlciA9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5sb2NrZWRmaWVsZHNlZGl0aW5mbycpO1xyXG4gICAgdGhpcy5pbmFwcGxpY2FibGVJY29uVGl0bGUgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uSW5hcHBsaWNhYmxlRmlsdGVycycpO1xyXG4gICAgdGhpcy5pbmFwcGxpY2FibGVJY29uRm9vdGVyID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLkluYXBwbGljYWJsZUZpbHRlcnNEZXNjJyk7XHJcbiAgICBpZiAodGhpcy5kYXNoYm9hcmRJbmZvLnRlbXBsYXRlTmFtZSA9PSAnRW1pc3Npb24gUmVwb3J0Jykge1xyXG4gICAgICB0aGlzLmhpZGVUaXRsZSA9IHRydWU7XHJcbiAgICAgIHRoaXMuc2hvd09ubHlEcm9wZG93biA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldCB3aWRnZXRWaWV3U3RhdGUoKSB7IHJldHVybiBXaWRnZXRWaWV3U3RhdGU7IH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgdGhpcy5pc1dpZGdldE1nbW50ID0gdGhpcy5yYVBlcm1pc3Npb25TZXJ2aWNlLmhhc1Blcm1pc3Npb24oJ3JhLndpZGdldG1hbmFnZW1lbnQnKTtcclxuICAgIGlmIChjaGFuZ2VzWydyYURhc2hib2FyZEV2ZW50QnVzJ10gJiYgY2hhbmdlc1sncmFEYXNoYm9hcmRFdmVudEJ1cyddLmN1cnJlbnRWYWx1ZSAhPSBjaGFuZ2VzWydyYURhc2hib2FyZEV2ZW50QnVzJ10ucHJldmlvdXNWYWx1ZSkge1xyXG4gICAgICB0aGlzLmNvbmZpZ0NoYW5nZWQgPSB0aGlzLnJhRGFzaGJvYXJkRXZlbnRCdXMuc3Vic2NyaWJlV2l0aEtleShSQUV2ZW50LkNvbmZpZ0NoYW5nZWQsIFJBRXZlbnRLZXkuV2lkZ2V0SW5zdGFuY2VJZCwgdGhpcy5kYXRhLndpZGdldEluZm8ud2lkZ2V0SW5zdGFuY2VJZC50b1N0cmluZygpKS5zdWJzY3JpYmUoKGUpID0+IHtcclxuICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jb25maWdDaGFuZ2VFdmVudEhhbmRsZXIoZSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLndpZGdldEVsZW1lbnQpIHtcclxuICAgICAgaWYgKGNoYW5nZXNbJ2J1bGtBY3Rpb25EYXRhJ10gJiYgY2hhbmdlc1snYnVsa0FjdGlvbkRhdGEnXS5jdXJyZW50VmFsdWUgIT0gY2hhbmdlc1snYnVsa0FjdGlvbkRhdGEnXS5wcmV2aW91c1ZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLndpZGdldEVsZW1lbnQuYnVsa0FjdGlvbkNsaWNrZWQgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgdGhpcy53aWRnZXRFbGVtZW50LmJ1bGtBY3Rpb25DbGlja2VkKHRoaXMuYnVsa0FjdGlvbkRhdGEpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoY2hhbmdlc1snZ2xvYmFsRmlsdGVyJ10gJiYgY2hhbmdlc1snZ2xvYmFsRmlsdGVyJ10uY3VycmVudFZhbHVlICE9IGNoYW5nZXNbJ2dsb2JhbEZpbHRlciddLnByZXZpb3VzVmFsdWUpIHtcclxuICAgICAgICBpZiAoIXRoaXMuZGFzaGJvYXJkSW5mby5jdXJhdGVkRmlsdGVycykge1xyXG4gICAgICAgICAgbGV0IGZpbHRlck9iaiA9IHRoaXMuZ2V0UGFyc2VkQ29uZmlnKHRoaXMuZ2xvYmFsRmlsdGVyKTtcclxuICAgICAgICAgIGlmIChmaWx0ZXJPYmouV2lkZ2V0SW5zdGFuY2VJZCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhLndpZGdldEluZm8ud2lkZ2V0SW5zdGFuY2VJZCAhPSBmaWx0ZXJPYmouV2lkZ2V0SW5zdGFuY2VJZClcclxuICAgICAgICAgICAgICB0aGlzLnJlZnJlc2hXaWRnZXQodGhpcy5kYXRhLndpZGdldEluZm8pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaFdpZGdldCh0aGlzLmRhdGEud2lkZ2V0SW5mbyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoY2hhbmdlc1snd2lkdGgnXSAmJiBjaGFuZ2VzWyd3aWR0aCddLmN1cnJlbnRWYWx1ZSAhPSBjaGFuZ2VzWyd3aWR0aCddLnByZXZpb3VzVmFsdWUgfHxcclxuICAgICAgICAoY2hhbmdlc1snaGVpZ2h0J10gJiYgY2hhbmdlc1snaGVpZ2h0J10uY3VycmVudFZhbHVlICE9IGNoYW5nZXNbJ2hlaWdodCddLnByZXZpb3VzVmFsdWUpKSB7XHJcbiAgICAgICAgdGhpcy5pbnZva2VXaWRnZXRSZXNpemVkRXZlbnQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXNbJ2NhbkxvYWREYXRhJ10gJiYgKGNoYW5nZXNbJ2NhbkxvYWREYXRhJ10uY3VycmVudFZhbHVlICE9IGNoYW5nZXNbJ2NhbkxvYWREYXRhJ10ucHJldmlvdXNWYWx1ZSkpIHtcclxuICAgICAgaWYgKHRoaXMuY2FuTG9hZERhdGEpXHJcbiAgICAgICAgdGhpcy5sb2FkV2lkZ2V0KHRoaXMuZGF0YS53aWRnZXRJbmZvKTtcclxuICAgIH1cclxuICB9XHJcbiAgaW52b2tlV2lkZ2V0UmVzaXplZEV2ZW50KCkge1xyXG4gICAgaWYgKHRoaXMud2lkZ2V0RWxlbWVudCkge1xyXG4gICAgICBpZiAodHlwZW9mIHRoaXMud2lkZ2V0RWxlbWVudC53aWRnZXRSZXNpemVkID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICBsZXQgc2l6ZTogYW55ID0ge307XHJcbiAgICAgICAgc2l6ZS5oZWlnaHQgPSB0aGlzLmhlaWdodDtcclxuICAgICAgICBzaXplLndpZHRoID0gdGhpcy53aWR0aDtcclxuICAgICAgICBzaXplLmNlbGxIZWlnaHQgPSB0aGlzLmdyaWRDZWxsSGVpZ2h0O1xyXG4gICAgICAgIHRoaXMud2lkZ2V0RWxlbWVudC53aWRnZXRSZXNpemVkKHNpemUpO1xyXG4gICAgICAgIGlmICh0aGlzLmhlaWdodCA9PSAxIHx8IHRoaXMud2lkdGggPT0gMSlcclxuICAgICAgICAgIHRoaXMuaXNLcGlWaWV3ID0gdHJ1ZVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHRoaXMuaXNLcGlWaWV3ID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG1vdXNlSG92ZXIoaXNIb3ZlciA9IHRydWUpIHtcclxuICAgIHRoaXMuaXNNb3VzZUhvdmVyID0gaXNIb3ZlcjtcclxuXHJcbiAgICBpZiAodGhpcy53aWRnZXRFbGVtZW50KSB7XHJcbiAgICAgIGlmICh0eXBlb2YgdGhpcy53aWRnZXRFbGVtZW50LmhvdmVyU3RhdHVzID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICB0aGlzLndpZGdldEVsZW1lbnQuaG92ZXJTdGF0dXMoaXNIb3Zlcik7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKCd3aWRnZXQgZnJhbWV3b3JrIG91dGRhdGVkLCBwbGVhc2UgdXBkYXRlIHRvIHZlcnNpb24gMC4wLjk2Jyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLndpZGdldExvYWRlZC5lbWl0KHRoaXMud2NXcmFwcGVyLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgfSwxMDApO1xyXG5cclxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgKCkgPT4ge1xyXG4gICAgICB0aGlzLnJlbW92ZU1lbnUoKTtcclxuICAgICAgdGhpcy5jbG9zZVBvcHVwKCk7XHJcbiAgICB9KVxyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBsZXQgaXRlbSA9IGpRdWVyeSh0aGlzLndjV3JhcHBlci5uYXRpdmVFbGVtZW50KS5jbG9zZXN0KCdncmlkc3Rlci1pdGVtJyk7XHJcbiAgICAgIGl0ZW0uYmluZCgnbW91c2VlbnRlcicsICgpID0+IHtcclxuICAgICAgICB3aW5kb3cuZ3JpZHN0ZXJJdGVtRW50ZXIgPSB0cnVlO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGl0ZW0uYmluZCgnbW91c2VsZWF2ZScsICgpID0+IHtcclxuICAgICAgICB3aW5kb3cuZ3JpZHN0ZXJJdGVtRW50ZXIgPSBmYWxzZTtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIGlmICghd2luZG93Lm1vdXNlT3ZlcldpZGdldE1lbnUpIHtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVNZW51KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jb25maWdDaGFuZ2VkKVxyXG4gICAgICB0aGlzLmNvbmZpZ0NoYW5nZWQudW5zdWJzY3JpYmUoKTtcclxuICAgIGlmICh0aGlzLndpZGdldEVsZW1lbnRIYW5kbGVyICYmIHRoaXMuZGF0YSAmJiB0aGlzLmRhdGEud2lkZ2V0SW5mbyAmJiB0aGlzLmRhdGEud2lkZ2V0SW5mby53aWRnZXRJbnN0YW5jZUlkKSB7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2lkZ2V0aW5pdGlhdGVkJyArIHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldEluc3RhbmNlSWQsIHRoaXMud2lkZ2V0RWxlbWVudEhhbmRsZXIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8qKiBUbyBFZGl0IGN1cnJlbnQgd2lkZ2V0IGNvbmZpZ3VyYXRpb24qL1xyXG4gIHB1YmxpYyBlZGl0V2lkZ2V0KCkge1xyXG4gICAgbGV0IHdpZGdldENvbmZpZ0ZpbHRlcjogSVdpZGdldENvbmZpZ0ZpbHRlcjtcclxuICAgIGlmICh0aGlzLndpZGdldEVsZW1lbnQgJiYgdHlwZW9mICh0aGlzLndpZGdldEVsZW1lbnQuZ2V0Q29uZmlnRmlsdGVyKSA9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIGxldCBjb25maWdEYXRhID0gdGhpcy53aWRnZXRFbGVtZW50LmdldENvbmZpZ0ZpbHRlcigpO1xyXG4gICAgICBpZiAoY29uZmlnRGF0YSkge1xyXG4gICAgICAgIHdpZGdldENvbmZpZ0ZpbHRlciA9IGNvbmZpZ0RhdGE7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh3aWRnZXRDb25maWdGaWx0ZXIhKSB7XHJcbiAgICAgIHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5wdWJsaXNoKFJBRXZlbnQuV2lkZ2V0RWRpdENsaWNrZWQsIHdpZGdldENvbmZpZ0ZpbHRlcik7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgbGV0IHdpZGdldENvbmZpZ0ZpbHRlckRhdGEgPSB0aGlzLmdlbmVyYXRlQ29uZmlnRmlsdGVyKGZhbHNlKTtcclxuICAgICAgdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnB1Ymxpc2goUkFFdmVudC5XaWRnZXRFZGl0Q2xpY2tlZCwgd2lkZ2V0Q29uZmlnRmlsdGVyRGF0YSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogVG8gRGVsZXRlIGN1cnJlbnQgd2lkZ2V0IGZyb20gRE9NKi9cclxuICBwdWJsaWMgZGVsZXRlV2lkZ2V0KCkge1xyXG4gICAgbGV0IHdpZGdldENvbnRhaW5lckNvbnRleHQgPSB0aGlzO1xyXG4gICAgd2lkZ2V0Q29udGFpbmVyQ29udGV4dC5uZ3hTZXJ2aWNlLnN0YXJ0KCk7XHJcbiAgICB3aWRnZXRDb250YWluZXJDb250ZXh0LmRhc2hib2FyZFNlcnZpY2UuZGVsZXRlV2lkZ2V0KHRoaXMuZGF0YS53aWRnZXRJbmZvLCB0aGlzLmFwcENvbmZpZykuc3Vic2NyaWJlKHN0YXR1cyA9PiB7XHJcbiAgICAgIHdpZGdldENvbnRhaW5lckNvbnRleHQubmd4U2VydmljZS5zdG9wKCk7XHJcbiAgICAgIGlmIChzdGF0dXMpIHtcclxuICAgICAgICB3aWRnZXRDb250YWluZXJDb250ZXh0LndpZGdldERlbGV0ZWQuZW1pdCh0aGlzLmRhdGEud2lkZ2V0SW5mby53aWRnZXRJbnN0YW5jZUlkKTtcclxuICAgICAgICB0aGlzLnNldEluYXBwbGljYWJsZUZpbHRlcnModW5kZWZpbmVkLCB0aGlzLmRhdGEud2lkZ2V0SW5mby53aWRnZXRJbnN0YW5jZUlkKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB3aWRnZXRDb250YWluZXJDb250ZXh0Lm5vdGlmaWVyLm5vdGlmeSgnZXJyb3InLCBcIiBcIiArIHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0ZhaWxlZFRvUmVtb3ZlV2lkZ2V0JykgKyBcIiAgKFwiICsgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLicgKyB0aGlzLmRhdGEud2lkZ2V0SW5mby53aWRnZXRUaXRsZSwgdHJ1ZSkgKyBcIikhXCIpO1xyXG5cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKiogVG8gTW92ZSBvciBjaGFuZ2UgcG9zaXRpb24gaWYgY3VycmVudCB3aWRnZXQgY29udGFpbmVyKi9cclxuICBwdWJsaWMgbW92ZVdpZGdldCgpIHtcclxuICAgIHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5wdWJsaXNoKFJBRXZlbnQuTW92ZVdpZGdldCwgdGhpcy5kYXRhLndpZGdldEluZm8pO1xyXG4gICAgdGhpcy5zZXRJbmFwcGxpY2FibGVGaWx0ZXJzKHVuZGVmaW5lZCwgdGhpcy5kYXRhLndpZGdldEluZm8ud2lkZ2V0SW5zdGFuY2VJZCk7XHJcbiAgICAvLyB0aGlzLmRhc2hib2FyZFNlcnZpY2UubW92ZVdpZGdldCh3aWRnZXRJbmZvKTtcclxuICB9XHJcblxyXG4gIC8qKiBUbyBDb3B5IEN1cnJlbnQgd2lkZ2V0IHdpdGggc2FtZSBjb25maWd1cmF0aW9uKi9cclxuICBwdWJsaWMgY29weVdpZGdldCgpIHtcclxuICAgIHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5wdWJsaXNoKFJBRXZlbnQuQ29weVdpZGdldCwgdGhpcy5kYXRhLndpZGdldEluZm8pO1xyXG4gICAgLy90aGlzLmRhc2hib2FyZFNlcnZpY2UuY29weVdpZGdldCh3aWRnZXRJbmZvKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB2aXNpdFBhZ2UoKSB7XHJcbiAgICB0aGlzLmJhc2VVcmwgPSB0aGlzLmdldEhvc3RVcmwoKTtcclxuICAgIGxldCB1cmwgPSB0aGlzLmJhc2VVcmwgKyB0aGlzLmRldGFpbFBhZ2VVcmw7XHJcbiAgICBpZiAodGhpcy5kYXRhLndpZGdldEluZm8gJiYgdGhpcy5kYXRhLndpZGdldEluZm8ud2lkZ2V0U2V0dGluZ3MpIHtcclxuICAgICAgdGhpcy53aWRnZXRTZXR0aW5ncyA9IHRoaXMuZ2V0UGFyc2VkQ29uZmlnKHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldFNldHRpbmdzKTtcclxuICAgICAgaWYgKHRoaXMud2lkZ2V0U2V0dGluZ3MuY3VzdG9tUGFnZVBhcmFtcyB8fCB0aGlzLndpZGdldFNldHRpbmdzLmN1c3RvbVBhZ2VVUkwpIHtcclxuICAgICAgICBsZXQgcGFyYW1zID0gdGhpcy53aWRnZXRFbGVtZW50LmdldFBhZ2VQYXJhbXNDbGlja2VkKCk7XHJcbiAgICAgICAgaWYgKHBhcmFtcykge1xyXG4gICAgICAgICAgaWYgKHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldFR5cGUgPT0gJ0FWIFdpZGdldCcgfHwgdGhpcy53aWRnZXRTZXR0aW5ncy5jdXN0b21QYWdlVVJMKVxyXG4gICAgICAgICAgICB1cmwgPSB1cmwgKyBwYXJhbXM7XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHVybCA9IHVybCArICc/JyArIHBhcmFtcztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHdpbmRvdy5vcGVuKHVybCwgJ19ibGFuaycpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEhvc3RVcmwoKSB7XHJcbiAgICByZXR1cm4gd2luZG93LmxvY2F0aW9uLnByb3RvY29sICsgJy8vJyArIHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSArICh3aW5kb3cubG9jYXRpb24ucG9ydCA/ICc6JyArIHdpbmRvdy5sb2NhdGlvbi5wb3J0IDogJycpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNvbmZpZ0NoYW5nZUV2ZW50SGFuZGxlcih3aWRnZXRJbmZvOiBhbnkpIHtcclxuICAgIHRoaXMuZGF0YS53aWRnZXRJbmZvID0gd2lkZ2V0SW5mbztcclxuICAgIGlmICh3aWRnZXRJbmZvLnRlbXBsYXRlU2V0dGluZ3MpIHtcclxuICAgICAgdGhpcy5kYXRhLndpZGdldEluZm8udGVtcGxhdGVXaWRnZXRTZXR0aW5ncyA9IEpTT04ucGFyc2Uod2lkZ2V0SW5mby50ZW1wbGF0ZVNldHRpbmdzKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmdyaWRDZWxsSGVpZ2h0ID4gMCkge1xyXG4gICAgICB0aGlzLmRhdGEud2lkZ2V0SW5mby5yb3dIZWlnaHQgPSB0aGlzLmdyaWRDZWxsSGVpZ2h0O1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMud2lkZ2V0RWxlbWVudCAmJiB0eXBlb2YgKHRoaXMud2lkZ2V0RWxlbWVudC5zZXRDb25maWdGaWx0ZXIpID09ICdmdW5jdGlvbicpIHtcclxuICAgICAgdGhpcy53aWRnZXRFbGVtZW50LnNldENvbmZpZ0ZpbHRlcih0aGlzLmdlbmVyYXRlQ29uZmlnRmlsdGVyKHRydWUpKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ3dpZGdldCBmcmFtZXdvcmsgb3V0ZGF0ZWQsIHBsZWFzZSB1cGRhdGUgdG8gdmVyc2lvbiAwLjAuOTgnKTtcclxuICAgIH1cclxuICAgIHRoaXMucmVmcmVzaFdpZGdldCh0aGlzLmRhdGEud2lkZ2V0SW5mbywgdHJ1ZSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBnZW5lcmF0ZUNvbmZpZ0ZpbHRlcihjb25maWdDaGFuZ2VkOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIGxldCB3aWRnZXRDb25maWdGaWx0ZXJEYXRhID0gPElXaWRnZXRDb25maWdGaWx0ZXI+e1xyXG4gICAgICBhcHBDb25maWc6IHRoaXMuYXBwQ29uZmlnLFxyXG4gICAgICBnbG9iYWxGaWx0ZXI6IHRoaXMuZ2xvYmFsRmlsdGVyLFxyXG4gICAgICB3aWRnZXRJbmZvOiB0aGlzLmRhdGEud2lkZ2V0SW5mbyxcclxuICAgICAgY29uZmlnOiB0aGlzLmRhdGEud2lkZ2V0SW5mby53aWRnZXRDb25maWdJbmZvLmNvbmZpZyxcclxuICAgICAgY29uZmlnQ2hhbmdlczogdGhpcy5nZXRDb25maWdDaGFuZ2VzKGNvbmZpZ0NoYW5nZWQpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gd2lkZ2V0Q29uZmlnRmlsdGVyRGF0YTtcclxuICB9XHJcblxyXG5cclxuICAvKiogIFRvIGxvYWQgZXh0ZXJuYWwgY3VzdG9tIGVsZW1lbnQgdG8gdGhlIHdpZGdldCBjb250YWluZXIqL1xyXG4gIGFzeW5jIGxvYWRXaWRnZXQod2lkZ2V0SW5mbzogYW55KSB7XHJcbiAgICB3aWRnZXRJbmZvLnJvd0hlaWdodCA9IHRoaXMuZ3JpZENlbGxIZWlnaHQ7XHJcbiAgICBsZXQgd2lkZ2V0Q29uZmlnRmlsdGVyID0gPElXaWRnZXRDb25maWdGaWx0ZXI+e1xyXG4gICAgICBjb25maWc6IHdpZGdldEluZm8ud2lkZ2V0Q29uZmlnSW5mby5jb25maWcsXHJcbiAgICAgIGdsb2JhbEZpbHRlcjogdGhpcy5nbG9iYWxGaWx0ZXIsXHJcbiAgICAgIGNvbmZpZ0NoYW5nZXM6IHRoaXMuZ2V0Q29uZmlnQ2hhbmdlcyhmYWxzZSksXHJcbiAgICAgIGJ1bGtBY3Rpb25zOnRoaXMuYnVsa0FjdGlvbkRhdGFcclxuICAgIH1cclxuICAgIHRoaXMuaXNXaWRnZXRDYW5Nb3ZlPSB0aGlzLmRhc2hib2FyZEluZm8udGVtcGxhdGVDb25maWcud2lkZ2V0LmNhbk1vdmU7XHJcbiAgICBpZiAod2lkZ2V0SW5mby53aWRnZXRTZXR0aW5ncykge1xyXG4gICAgICB0aGlzLndpZGdldFNldHRpbmdzID0gdGhpcy5nZXRQYXJzZWRDb25maWcod2lkZ2V0SW5mby53aWRnZXRTZXR0aW5ncyk7XHJcbiAgICAgIHRoaXMuYXBwbGF5V2lkZ2V0U2V0dGluZ3ModGhpcy53aWRnZXRTZXR0aW5ncyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmRldGFpbFBhZ2VVcmwgPSB3aWRnZXRJbmZvLmRldGFpbFBhZ2VVcmw7XHJcbiAgICBsZXQgbWUgPSB0aGlzO1xyXG4gICAgdGhpcy5pc0N1c3RvbUVsZW1lbnQgPSB3aWRnZXRJbmZvLmlzQ3VzdG9tRWxlbWVudDtcclxuICAgIGlmICh0aGlzLmlzQ3VzdG9tRWxlbWVudCkge1xyXG4gICAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UubG9hZEV4dGVybmFsU2NyaXB0KHdpZGdldEluZm8uc2NyaXB0VXJsLCAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXROb3RDb25maWd1cmVkU3RhdGUod2lkZ2V0SW5mbyk7XHJcbiAgICAgICAgbGV0IGFwcE1vZHVsZSA9IHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldE5hbWU7XHJcbiAgICAgICAgaWYgKHRoaXMuZGF0YS53aWRnZXRJbmZvLmFwcGxpY2F0aW9uTW9kdWxlICYmIHRoaXMuZGF0YS53aWRnZXRJbmZvLmFwcGxpY2F0aW9uTW9kdWxlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGFwcE1vZHVsZSA9IHRoaXMuZGF0YS53aWRnZXRJbmZvLmFwcGxpY2F0aW9uTW9kdWxlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UubG9hZFRyYW5zbGF0aW9ucyh0aGlzLmFwcENvbmZpZy5hcHBNYW5hZ2VtZW50QmFzZVVybCwgYXBwTW9kdWxlLCBmYWxzZSkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICBtZS53aWRnZXRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh3aWRnZXRJbmZvLmN1c3RvbVRhZyk7XHJcbiAgICAgICAgICBtZS53aWRnZXRFbGVtZW50LnNldEF0dHJpYnV0ZShcIndpZGdldC1pbnN0YW5jZS1pZFwiLCB3aWRnZXRJbmZvLndpZGdldEluc3RhbmNlSWQpO1xyXG5cclxuICAgICAgICAgIGxldCBoYW5kbGVyID0gZnVuY3Rpb24gKGV2ZW50OiBhbnkpIHtcclxuICAgICAgICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgbWUud2lkZ2V0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdvbi13aWRnZXQtcmVzcG9uZCcsIChlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIHZhciB0eXBlOiBzdHJpbmcgPSBlLmRldGFpbC50eXBlO1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgJ29uRGF0YUxvYWQnOlxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlLmRldGFpbC5kYXRhKVxyXG4gICAgICAgICAgICAgICAgICAgICAgbWUuc2hvd1BhbmVsID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICBtZS5zaG93UGFuZWwgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFtZS5kYXRhLmRhdGFMb2FkZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIG1lLmRhdGEuZGF0YUxvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICBtZS5kYXRhTG9hZGVkLmVtaXQod2lkZ2V0SW5mbyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICBjYXNlICdvbkNvbmZpZ0VkaXRDbGlja2VkJzpcclxuICAgICAgICAgICAgICAgICAgICBtZS5lZGl0V2lkZ2V0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgJ29uRW5hYmxlRGVmYXVsdFN0YXRlJzpcclxuICAgICAgICAgICAgICAgICAgICBtZS5zZXRFbXB0eVN0YXRlKGUuZGV0YWlsLmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICBjYXNlICdvblNldFRpdGxlVW5kZXJsaW5lJzpcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZS5kZXRhaWwuZGF0YSA9PSB0cnVlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgbWUuZW5hYmxlVGl0bGVMaW5lID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICBtZS5lbmFibGVUaXRsZUxpbmUgPSBtZS5lbmFibGVUaXRsZUxpbmVBY3R1YWw7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgJ29uV2lkZ2V0VGl0bGVIaWRkZW4nOlxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlLmRldGFpbC5kYXRhID09IHRydWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICBtZS5oaWRlVGl0bGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgIG1lLmhpZGVUaXRsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICBjYXNlICdvblVwZGF0ZUxvY2tEYXRhJzpcclxuICAgICAgICAgICAgICAgICAgICBtZS5zZXRMb2NrKGUuZGV0YWlsLmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICBjYXNlICdvbkdsb2JhbEZpbHRlckFwcGxpY2FibGVDaGVjayc6XHJcbiAgICAgICAgICAgICAgICAgICAgbWUuc2V0SW5hcHBsaWNhYmxlRmlsdGVycyhlLmRldGFpbC5kYXRhLCB3aWRnZXRJbmZvLndpZGdldEluc3RhbmNlSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICBpZiAodHlwZW9mIChtZS53aWRnZXRFbGVtZW50LnRpdGxlTGluZUVuYWJsZWQpICE9ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdGl0bGVMaW5lRW5hYmxlZCA9IG1lLndpZGdldEVsZW1lbnQudGl0bGVMaW5lRW5hYmxlZCgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRpdGxlTGluZUVuYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgICAgbWUuZW5hYmxlVGl0bGVMaW5lID0gdGl0bGVMaW5lRW5hYmxlZDtcclxuICAgICAgICAgICAgICAgICAgbWUuZW5hYmxlVGl0bGVMaW5lQWN0dWFsID0gdGl0bGVMaW5lRW5hYmxlZDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgbWUuZWRpdFRleHQgPSBtZS50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmVkaXQnKTtcclxuICAgICAgICAgICAgICBpZiAobWUudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5lZGl0JykubGVuZ3RoID4gNikge1xyXG4gICAgICAgICAgICAgICAgbWUuZWRpdFRleHQgPSAobWUudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5lZGl0Jykuc3Vic3RyaW5nKDAsIDYpICsgJy4uLicpO1xyXG4gICAgICAgICAgICAgICAgbWUuZWRpdFRvb2xUaXBWYWx1ZSA9IG1lLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uZWRpdCcpO1xyXG4gICAgICAgICAgICAgICAgbWUuZWRpdFRvb2xUaXBXaWR0aCA9IFwiMzAwcHhcIjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgbWUuY29weVRleHQgPSBtZS50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmNvcHknKTtcclxuICAgICAgICAgICAgICBpZiAobWUudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5jb3B5JykubGVuZ3RoID4gNikge1xyXG4gICAgICAgICAgICAgICAgbWUuY29weVRleHQgPSAobWUudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5jb3B5Jykuc3Vic3RyaW5nKDAsIDYpICsgJy4uLicpO1xyXG4gICAgICAgICAgICAgICAgbWUuY29weVRvb2xUaXBWYWx1ZSA9IG1lLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uY29weScpO1xyXG4gICAgICAgICAgICAgICAgbWUuY29weVRvb2xUaXBXaWR0aCA9IFwiMzAwcHhcIjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgbWUubW92ZVRleHQgPSBtZS50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLm1vdmUnKVxyXG4gICAgICAgICAgICAgIGlmIChtZS50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLm1vdmUnKS5sZW5ndGggPiA2KSB7XHJcbiAgICAgICAgICAgICAgICBtZS5tb3ZlVGV4dCA9IChtZS50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLm1vdmUnKS5zdWJzdHJpbmcoMCwgNikgKyAnLi4uJyk7XHJcbiAgICAgICAgICAgICAgICBtZS5tb3ZlVG9vbFRpcFZhbHVlID0gbWUudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5tb3ZlJyk7XHJcbiAgICAgICAgICAgICAgICBtZS5tb3ZlVG9vbFRpcFdpZHRoID0gXCIzMDBweFwiO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBtZS5leGNlbFRleHQgPSBtZS50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmV4Y2VsJyk7XHJcbiAgICAgICAgICAgICAgaWYgKG1lLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uZXhjZWwnKS5sZW5ndGggPiA2KSB7XHJcbiAgICAgICAgICAgICAgICBtZS5leGNlbFRleHQgPSAobWUudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5leGNlbCcpLnN1YnN0cmluZygwLCA2KSArICcuLi4nKTtcclxuICAgICAgICAgICAgICAgIG1lLmV4Y2VsVG9vbFRpcFZhbHVlID0gbWUudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5leGNlbCcpO1xyXG4gICAgICAgICAgICAgICAgbWUuZXhjZWxUb29sVGlwV2lkdGggPSBcIjMwMHB4XCI7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIG1lLmRlbGV0ZVRleHQgPSBtZS50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmRlbGV0ZScpO1xyXG4gICAgICAgICAgICAgIGlmIChtZS50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmRlbGV0ZScpLmxlbmd0aCA+IDYpIHtcclxuICAgICAgICAgICAgICAgIG1lLmRlbGV0ZVRleHQgPSAobWUudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5kZWxldGUnKS5zdWJzdHJpbmcoMCwgNikgKyAnLi4uJyk7XHJcbiAgICAgICAgICAgICAgICBtZS5kZWxldGVUb29sVGlwVmFsdWUgPSBtZS50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmRlbGV0ZScpO1xyXG4gICAgICAgICAgICAgICAgbWUuZGVsZXRlVG9vbFRpcFdpZHRoID0gXCIzMDBweFwiO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgbWUuaXNXaWRnZXRMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHdpZGdldENvbmZpZ0ZpbHRlci5hcHBDb25maWcgPSBtZS5hcHBDb25maWc7XHJcbiAgICAgICAgICAgICAgd2lkZ2V0Q29uZmlnRmlsdGVyLndpZGdldEluZm8gPSB3aWRnZXRJbmZvO1xyXG4gICAgICAgICAgICAgIHdpZGdldENvbmZpZ0ZpbHRlci5jb25maWdDaGFuZ2VzID0gbWUuZ2V0Q29uZmlnQ2hhbmdlcyhmYWxzZSk7XHJcbiAgICAgICAgICAgICAgd2lkZ2V0Q29uZmlnRmlsdGVyLndpZGdldEluZm8ud2lkZ2V0TmFtZSA9IHdpZGdldEluZm8ud2lkZ2V0TmFtZTtcclxuICAgICAgICAgICAgICB3aWRnZXRDb25maWdGaWx0ZXIuZ2xvYmFsRmlsdGVyID0gbWUuZ2xvYmFsRmlsdGVyO1xyXG4gICAgICAgICAgICAgIHdpZGdldENvbmZpZ0ZpbHRlci5kYXNoYm9hcmRJbmZvID0gbWUuZGFzaGJvYXJkSW5mbztcclxuICAgICAgICAgICAgICBtZS53aWRnZXRFbGVtZW50LmxvYWRDb250ZW50KHdpZGdldENvbmZpZ0ZpbHRlcik7XHJcbiAgICAgICAgICAgICAgYXdhaXQgbWUuc2V0TG9jayh3aWRnZXRDb25maWdGaWx0ZXIuY29uZmlnKTtcclxuICAgICAgICAgICAgICBhd2FpdCBtZS5zZXREb3dubG9hZEljb24oKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH0uYmluZCh0aGlzKTtcclxuXHJcbiAgICAgICAgICB0aGlzLndpZGdldEVsZW1lbnRIYW5kbGVyID0gaGFuZGxlcjtcclxuICAgICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignd2lkZ2V0aW5pdGlhdGVkJyArIHdpZGdldEluZm8ud2lkZ2V0SW5zdGFuY2VJZCwgaGFuZGxlcik7XHJcbiAgICAgICAgICB0aGlzLmN0bFdpZGdldC5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMud2lkZ2V0RWxlbWVudCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCBiYXNlUGF0aCA9IGRvY3VtZW50LmJhc2VVUkk7XHJcbiAgICAgIGxvYWRSZW1vdGVNb2R1bGUoe1xyXG4gICAgICAgIHR5cGU6ICdtb2R1bGUnLFxyXG4gICAgICAgIHJlbW90ZUVudHJ5OiBiYXNlUGF0aCArIHdpZGdldEluZm8uc2NyaXB0VXJsLFxyXG4gICAgICAgIGV4cG9zZWRNb2R1bGU6ICcuLycgKyB3aWRnZXRJbmZvLndpZGdldENvbXBvbmVudFxyXG4gICAgICB9KS50aGVuKChtOiBhbnkpID0+IHtcclxuICAgICAgICBsZXQgYXBwTW9kdWxlID0gdGhpcy5kYXRhLndpZGdldEluZm8ud2lkZ2V0TmFtZTtcclxuICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UubG9hZFRyYW5zbGF0aW9ucyh0aGlzLmFwcENvbmZpZy5hcHBNYW5hZ2VtZW50QmFzZVVybCwgYXBwTW9kdWxlLCBmYWxzZSkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICBtZS5jdGxXaWRnZXRNb2R1bGUuY2xlYXIoKTtcclxuICAgICAgICAgIHZhciBjb21wb25lbnQgPSBtZS5jdGxXaWRnZXRNb2R1bGUuY3JlYXRlQ29tcG9uZW50KG1bd2lkZ2V0SW5mby53aWRnZXRDb21wb25lbnRdKTtcclxuICAgICAgICAgIGxldCBpbnN0YW5jZTogYW55ID0gY29tcG9uZW50Lmluc3RhbmNlO1xyXG4gICAgICAgICAgbGV0IHdpZGdldEVsZW1lbnQgPSBjb21wb25lbnQuaW5zdGFuY2U7XHJcbiAgICAgICAgICB0aGlzLnNldE5vdENvbmZpZ3VyZWRTdGF0ZSh3aWRnZXRJbmZvKTtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5kYXRhLndpZGdldEluZm8uYXBwbGljYXRpb25Nb2R1bGUgJiYgdGhpcy5kYXRhLndpZGdldEluZm8uYXBwbGljYXRpb25Nb2R1bGUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBhcHBNb2R1bGUgPSB0aGlzLmRhdGEud2lkZ2V0SW5mby5hcHBsaWNhdGlvbk1vZHVsZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIG1lLndpZGdldEVsZW1lbnQgPSB3aWRnZXRFbGVtZW50O1xyXG4gICAgICAgICAgbGV0IGVsZW1lbnQgPSBjb21wb25lbnQubG9jYXRpb24ubmF0aXZlRWxlbWVudDtcclxuICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKFwid2lkZ2V0LWluc3RhbmNlLWlkXCIsIHdpZGdldEluZm8ud2lkZ2V0SW5zdGFuY2VJZCk7XHJcbiAgICAgICAgICBpbnN0YW5jZS53aWRnZXRJbnN0YW5jZUlkID0gd2lkZ2V0SW5mby53aWRnZXRJbnN0YW5jZUlkO1xyXG4gICAgICAgICAgbGV0IGhhbmRsZXIgPSBmdW5jdGlvbiAoZXZlbnQ6IGFueSkge1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgICBpbnN0YW5jZS5vbldpZGdldFJlc3BvbmQuc3Vic2NyaWJlKChlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIHZhciB0eXBlOiBzdHJpbmcgPSBlLnR5cGU7XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgY2FzZSAnb25EYXRhTG9hZCc6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUuZGF0YSlcclxuICAgICAgICAgICAgICAgICAgICAgIG1lLnNob3dQYW5lbCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgbWUuc2hvd1BhbmVsID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFtZS5kYXRhLmRhdGFMb2FkZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIG1lLmRhdGEuZGF0YUxvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICBtZS5kYXRhTG9hZGVkLmVtaXQobWUud2lkZ2V0RWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICBjYXNlICdvbkNvbmZpZ0VkaXRDbGlja2VkJzpcclxuICAgICAgICAgICAgICAgICAgICBtZS5lZGl0V2lkZ2V0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgJ29uRW5hYmxlRGVmYXVsdFN0YXRlJzpcclxuICAgICAgICAgICAgICAgICAgICBtZS5zZXRFbXB0eVN0YXRlKGUuZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgJ29uU2V0VGl0bGVVbmRlcmxpbmUnOlxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlLmRhdGEgPT0gdHJ1ZSlcclxuICAgICAgICAgICAgICAgICAgICAgIG1lLmVuYWJsZVRpdGxlTGluZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgbWUuZW5hYmxlVGl0bGVMaW5lID0gbWUuZW5hYmxlVGl0bGVMaW5lQWN0dWFsO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICBjYXNlICdvbldpZGdldFRpdGxlSGlkZGVuJzpcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZS5kYXRhID09IHRydWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICBtZS5oaWRlVGl0bGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgIG1lLmhpZGVUaXRsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICBjYXNlICdvblVwZGF0ZUxvY2tEYXRhJzpcclxuICAgICAgICAgICAgICAgICAgICBtZS5zZXRMb2NrKGUuZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgJ29uR2xvYmFsRmlsdGVyQXBwbGljYWJsZUNoZWNrJzpcclxuICAgICAgICAgICAgICAgICAgICBtZS5zZXRJbmFwcGxpY2FibGVGaWx0ZXJzKGUuZGF0YSwgd2lkZ2V0SW5mby53aWRnZXRJbnN0YW5jZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICBpZiAodHlwZW9mIChtZS53aWRnZXRFbGVtZW50LnRpdGxlTGluZUVuYWJsZWQpICE9ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdGl0bGVMaW5lRW5hYmxlZCA9IG1lLndpZGdldEVsZW1lbnQudGl0bGVMaW5lRW5hYmxlZCgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRpdGxlTGluZUVuYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgICAgbWUuZW5hYmxlVGl0bGVMaW5lID0gdGl0bGVMaW5lRW5hYmxlZDtcclxuICAgICAgICAgICAgICAgICAgbWUuZW5hYmxlVGl0bGVMaW5lQWN0dWFsID0gdGl0bGVMaW5lRW5hYmxlZDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgbWUuZWRpdFRleHQgPSBtZS50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmVkaXQnKTtcclxuICAgICAgICAgICAgICBpZiAobWUudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5lZGl0JykubGVuZ3RoID4gNikge1xyXG4gICAgICAgICAgICAgICAgbWUuZWRpdFRleHQgPSAobWUudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5lZGl0Jykuc3Vic3RyaW5nKDAsIDYpICsgJy4uLicpO1xyXG4gICAgICAgICAgICAgICAgbWUuZWRpdFRvb2xUaXBWYWx1ZSA9IG1lLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uZWRpdCcpO1xyXG4gICAgICAgICAgICAgICAgbWUuZWRpdFRvb2xUaXBXaWR0aCA9IFwiMzAwcHhcIjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgbWUuY29weVRleHQgPSBtZS50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmNvcHknKTtcclxuICAgICAgICAgICAgICBpZiAobWUudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5jb3B5JykubGVuZ3RoID4gNikge1xyXG4gICAgICAgICAgICAgICAgbWUuY29weVRleHQgPSAobWUudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5jb3B5Jykuc3Vic3RyaW5nKDAsIDYpICsgJy4uLicpO1xyXG4gICAgICAgICAgICAgICAgbWUuY29weVRvb2xUaXBWYWx1ZSA9IG1lLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uY29weScpO1xyXG4gICAgICAgICAgICAgICAgbWUuY29weVRvb2xUaXBXaWR0aCA9IFwiMzAwcHhcIjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgbWUubW92ZVRleHQgPSBtZS50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLm1vdmUnKVxyXG4gICAgICAgICAgICAgIGlmIChtZS50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLm1vdmUnKS5sZW5ndGggPiA2KSB7XHJcbiAgICAgICAgICAgICAgICBtZS5tb3ZlVGV4dCA9IChtZS50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLm1vdmUnKS5zdWJzdHJpbmcoMCwgNikgKyAnLi4uJyk7XHJcbiAgICAgICAgICAgICAgICBtZS5tb3ZlVG9vbFRpcFZhbHVlID0gbWUudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5tb3ZlJyk7XHJcbiAgICAgICAgICAgICAgICBtZS5tb3ZlVG9vbFRpcFdpZHRoID0gXCIzMDBweFwiO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBtZS5leGNlbFRleHQgPSBtZS50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmV4Y2VsJyk7XHJcbiAgICAgICAgICAgICAgaWYgKG1lLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uZXhjZWwnKS5sZW5ndGggPiA2KSB7XHJcbiAgICAgICAgICAgICAgICBtZS5leGNlbFRleHQgPSAobWUudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5leGNlbCcpLnN1YnN0cmluZygwLCA2KSArICcuLi4nKTtcclxuICAgICAgICAgICAgICAgIG1lLmV4Y2VsVG9vbFRpcFZhbHVlID0gbWUudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5leGNlbCcpO1xyXG4gICAgICAgICAgICAgICAgbWUuZXhjZWxUb29sVGlwV2lkdGggPSBcIjMwMHB4XCI7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIG1lLmRlbGV0ZVRleHQgPSBtZS50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmRlbGV0ZScpO1xyXG4gICAgICAgICAgICAgIGlmIChtZS50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmRlbGV0ZScpLmxlbmd0aCA+IDYpIHtcclxuICAgICAgICAgICAgICAgIG1lLmRlbGV0ZVRleHQgPSAobWUudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5kZWxldGUnKS5zdWJzdHJpbmcoMCwgNikgKyAnLi4uJyk7XHJcbiAgICAgICAgICAgICAgICBtZS5kZWxldGVUb29sVGlwVmFsdWUgPSBtZS50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmRlbGV0ZScpO1xyXG4gICAgICAgICAgICAgICAgbWUuZGVsZXRlVG9vbFRpcFdpZHRoID0gXCIzMDBweFwiO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBtZS5pc1dpZGdldExvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgd2lkZ2V0Q29uZmlnRmlsdGVyLmFwcENvbmZpZyA9IG1lLmFwcENvbmZpZztcclxuICAgICAgICAgICAgICB3aWRnZXRDb25maWdGaWx0ZXIud2lkZ2V0SW5mbyA9IHdpZGdldEluZm87XHJcbiAgICAgICAgICAgICAgd2lkZ2V0Q29uZmlnRmlsdGVyLmNvbmZpZ0NoYW5nZXMgPSBtZS5nZXRDb25maWdDaGFuZ2VzKGZhbHNlKTtcclxuICAgICAgICAgICAgICB3aWRnZXRDb25maWdGaWx0ZXIud2lkZ2V0SW5mby53aWRnZXROYW1lID0gd2lkZ2V0SW5mby53aWRnZXROYW1lO1xyXG4gICAgICAgICAgICAgIHdpZGdldENvbmZpZ0ZpbHRlci5nbG9iYWxGaWx0ZXIgPSBtZS5nbG9iYWxGaWx0ZXI7XHJcbiAgICAgICAgICAgICAgd2lkZ2V0Q29uZmlnRmlsdGVyLmRhc2hib2FyZEluZm8gPSBtZS5kYXNoYm9hcmRJbmZvO1xyXG4gICAgICAgICAgICAgIG1lLndpZGdldEVsZW1lbnQubG9hZENvbnRlbnQod2lkZ2V0Q29uZmlnRmlsdGVyKTtcclxuXHJcbiAgICAgICAgICAgICAgYXdhaXQgbWUuc2V0TG9jayh3aWRnZXRDb25maWdGaWx0ZXIuY29uZmlnKTtcclxuICAgICAgICAgICAgICBhd2FpdCBtZS5zZXREb3dubG9hZEljb24oKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH0uYmluZCh0aGlzKTtcclxuXHJcbiAgICAgICAgICB0aGlzLndpZGdldEVsZW1lbnRIYW5kbGVyID0gaGFuZGxlcjtcclxuICAgICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignd2lkZ2V0aW5pdGlhdGVkJyArIHdpZGdldEluZm8ud2lkZ2V0SW5zdGFuY2VJZCwgaGFuZGxlcik7XHJcbiAgICAgICAgICBjb21wb25lbnQuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlRvIHNldCBEZWZhdWx0IFN0YXRlIGZvciB0aGUgd2lkZ2V0IHdoZW4gaXQgaXMgbm90IGNvbmZpZ3VyZWQgKi9cclxuICBzZXROb3RDb25maWd1cmVkU3RhdGUod2lkZ2V0SW5mbzogSVdpZGdldEluZm8sIGZvcmNlRW5hYmxlOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIGlmICgod2lkZ2V0SW5mby5zaG93RGVmYXVsdFN0YXRlICYmICh3aWRnZXRJbmZvLndpZGdldENvbmZpZ0luZm8uY29uZmlnID09IFwiXCIgfHwgT2JqZWN0LmtleXMoSlNPTi5wYXJzZSh3aWRnZXRJbmZvLndpZGdldENvbmZpZ0luZm8uY29uZmlnKSkubGVuZ3RoID09IDApKSB8fCAoZm9yY2VFbmFibGUpKSB7XHJcbiAgICAgIHRoaXMuaXNXaWRnZXRTdGF0ZUFwcGxpY2FibGUgPSB0cnVlO1xyXG4gICAgICB0aGlzLndpZGdldEVtcHR5U3RhdGUgPSBXaWRnZXRWaWV3U3RhdGUuZW1wdHlDb25maWcudG9TdHJpbmcoKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLndpZGdldEVtcHR5U3RhdGUgPSAnJztcclxuICAgICAgdGhpcy5pc1dpZGdldFN0YXRlQXBwbGljYWJsZSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqVG8gY29uZmlndXJlIGVtcHR5IHN0YXRlIGZvciB0aGUgd2lkZ2V0ICAqL1xyXG4gIHNldEVtcHR5U3RhdGUod2lkZ2V0U3RhdGU6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuaGVpZ2h0ID09IDEgfHwgdGhpcy53aWR0aCA9PSAxKVxyXG4gICAgICB0aGlzLmlzS3BpVmlldyA9IHRydWVcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5pc0twaVZpZXcgPSBmYWxzZTtcclxuICAgIHRoaXMud2lkZ2V0RW1wdHlTdGF0ZSA9IHdpZGdldFN0YXRlLndpZGdldFZpZXdTdGF0ZTtcclxuICAgIHRoaXMuaXNHbG9iYWxGaWx0ZXJBcHBsaWVkID0gd2lkZ2V0U3RhdGUuaXNHbG9iYWxGaWx0ZXJBcHBsaWVkO1xyXG4gICAgaWYgKHdpZGdldFN0YXRlICE9IFdpZGdldFZpZXdTdGF0ZS5ub3JtYWwpIHtcclxuICAgICAgdGhpcy5pc1dpZGdldFN0YXRlQXBwbGljYWJsZSA9IHRydWU7XHJcbiAgICAgIHRoaXMuaXNEb3dubG9hZEljb25WaXNpYmxlID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5pc1dpZGdldFN0YXRlQXBwbGljYWJsZSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgc3dpdGNoICh3aWRnZXRTdGF0ZSkge1xyXG4gICAgICBjYXNlIFdpZGdldFZpZXdTdGF0ZS5lbXB0eUNvbmZpZzpcclxuICAgICAgICB0aGlzLnNldE5vdENvbmZpZ3VyZWRTdGF0ZSh0aGlzLmRhdGEud2lkZ2V0SW5mbywgdHJ1ZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgV2lkZ2V0Vmlld1N0YXRlLmVtcHR5RGF0YTpcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBXaWRnZXRWaWV3U3RhdGUuZXJyb3I6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgV2lkZ2V0Vmlld1N0YXRlLnNxbFRpbWVvdXRFcnJvcjpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldENvbmZpZ0NoYW5nZXMoY29uZmlnQ2hhbmdlZDogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICBsZXQgY29uZmlnQ2hhbmdlcyA9IDxJY29uZmlnQ2hhbmdlcz57XHJcbiAgICAgIGlzQ29uZmlnVXBkYXRlZDogY29uZmlnQ2hhbmdlZCxcclxuICAgICAgdXBkYXRlZENvbmZpZ1Byb3BlcnR5OiBbXVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvbmZpZ0NoYW5nZXM7XHJcbiAgfVxyXG5cclxuICAvKiogVG8gcmVmcmVzaCB3aWRnZXQgb24gaW5wdXQgY29uZmlnIGNoYW5nZXMgKi9cclxuICBhc3luYyByZWZyZXNoV2lkZ2V0KHdpZGdldEluZm86IElXaWRnZXRJbmZvLCBjb25maWdDaGFuZ2VkOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIHRoaXMuV2lkZ2V0RGlzcGxheU5hbWUgPSB0aGlzLmdldHdpZGdldFRpdGxlVHJhbnNsYXRpb24odGhpcy5kYXRhLndpZGdldEluZm8ud2lkZ2V0VGl0bGUpO1xyXG4gICAgd2lkZ2V0SW5mby5yb3dIZWlnaHQgPSB0aGlzLmdyaWRDZWxsSGVpZ2h0O1xyXG4gICAgdGhpcy5zZXROb3RDb25maWd1cmVkU3RhdGUod2lkZ2V0SW5mbyk7XHJcbiAgICBsZXQgd2lkZ2V0Q29udGFpbmVyQ29udGV4dCA9IHRoaXM7XHJcblxyXG4gICAgbGV0IHdpZGdldENvbmZpZ0ZpbHRlciA9IDxJV2lkZ2V0Q29uZmlnRmlsdGVyPntcclxuICAgICAgY29uZmlnOiB3aWRnZXRJbmZvLndpZGdldENvbmZpZ0luZm8uY29uZmlnLFxyXG4gICAgICBnbG9iYWxGaWx0ZXI6IHRoaXMuZ2xvYmFsRmlsdGVyLFxyXG4gICAgICBhcHBDb25maWc6IHRoaXMuYXBwQ29uZmlnLFxyXG4gICAgICB3aWRnZXRJbmZvOiB3aWRnZXRJbmZvLFxyXG4gICAgICBjb25maWdDaGFuZ2VzOiB0aGlzLmdldENvbmZpZ0NoYW5nZXMoY29uZmlnQ2hhbmdlZCksXHJcbiAgICAgIGRhc2hib2FyZEluZm86IHRoaXMuZGFzaGJvYXJkSW5mbyxcclxuICAgICAgYnVsa0FjdGlvbnM6IHRoaXMuYnVsa0FjdGlvbkRhdGFcclxuICAgIH1cclxuXHJcbiAgICBpZiAod2lkZ2V0Q29udGFpbmVyQ29udGV4dC5pc1dpZGdldExvYWRlZCkge1xyXG4gICAgICBpZiAodGhpcy53aWRnZXRFbGVtZW50ICYmIHR5cGVvZiAodGhpcy53aWRnZXRFbGVtZW50LnNldENvbmZpZ0ZpbHRlcikgPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIHdpZGdldENvbnRhaW5lckNvbnRleHQud2lkZ2V0RWxlbWVudC5zZXRDb25maWdGaWx0ZXIod2lkZ2V0Q29uZmlnRmlsdGVyKTtcclxuICAgICAgfVxyXG4gICAgICB3aWRnZXRDb250YWluZXJDb250ZXh0LndpZGdldEVsZW1lbnQubG9hZENvbnRlbnQod2lkZ2V0Q29uZmlnRmlsdGVyKTtcclxuICAgICAgYXdhaXQgdGhpcy5zZXRMb2NrKHdpZGdldENvbmZpZ0ZpbHRlci5jb25maWcpO1xyXG4gICAgICBhd2FpdCB0aGlzLnNldERvd25sb2FkSWNvbigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG1vdXNlT3ZlcihldmVudDogYW55KSB7XHJcbiAgICB0aGlzLnRvb2xUaXBWYWx1ZSA9ICcgJztcclxuICAgIHRoaXMudG9vbFRpcFdpZHRoID0gJzBweCc7XHJcbiAgICBsZXQgZWxlbWVudCA9IHRoaXMuc2VhcmNoSW5wdXQubmF0aXZlRWxlbWVudDtcclxuICAgIGlmIChlbGVtZW50Lm9mZnNldFdpZHRoIDwgZWxlbWVudC5zY3JvbGxXaWR0aCkge1xyXG4gICAgICB0aGlzLnRvb2xUaXBWYWx1ZSA9IGVsZW1lbnQuaW5uZXJIVE1MO1xyXG4gICAgICB0aGlzLnRvb2xUaXBXaWR0aCA9ICczMDBweCc7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy50b29sVGlwV2lkdGggPSAnMHB4JztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgc2V0TG9jayhjb25maWc6IHN0cmluZykge1xyXG4gICAgdGhpcy5sb2NrVGVtcGxhdGVJbmZvID0gdGhpcy53aWRnZXRFbGVtZW50LmxvYWRMb2NrSW5mbygpO1xyXG4gICAgdGhpcy5oaWRlTG9jayA9IHRoaXMuZGFzaGJvYXJkSW5mby50ZW1wbGF0ZUNvbmZpZy53aWRnZXQuaGlkZUxvY2s7XHJcbiAgICB2YXIgY29uZmlnT2JqOiBhbnk7XHJcbiAgICBpZiAoY29uZmlnKSB7XHJcbiAgICAgIGNvbmZpZ09iaiA9IEpTT04ucGFyc2UoY29uZmlnKTtcclxuICAgICAgaWYgKGNvbmZpZ09iaiAmJiBjb25maWdPYmouTG9ja3MgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgaWYgKGNvbmZpZ09iai5Mb2Nrcy5Jc0RhdGVMb2NrZWQgfHwgY29uZmlnT2JqLkxvY2tzLklzRGF0ZXNMb2NrZWQgfHwgY29uZmlnT2JqLkxvY2tzLklzUGFydGljaXBhbnRMb2NrZWQgfHwgY29uZmlnT2JqLkxvY2tzLklzU291cmNlTG9ja2VkKSB7XHJcbiAgICAgICAgICB0aGlzLmxvY2tEZXRhaWxzID0gW107XHJcbiAgICAgICAgICBpZiAoY29uZmlnT2JqLkxvY2tzLklzRGF0ZUxvY2tlZCB8fCBjb25maWdPYmouTG9ja3MuSXNEYXRlc0xvY2tlZClcclxuICAgICAgICAgICAgdGhpcy5sb2NrRGV0YWlscy5wdXNoKHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5EYXRlUmFuZ2UnKSk7XHJcblxyXG4gICAgICAgICAgaWYgKGNvbmZpZ09iai5Mb2Nrcy5Jc1BhcnRpY2lwYW50TG9ja2VkKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9ja0RldGFpbHMucHVzaCh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uRGl2aXNpb25Pckdyb3Vwb3JTaXRlJykpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGNvbmZpZ09iai5Mb2Nrcy5Jc1NvdXJjZUxvY2tlZClcclxuICAgICAgICAgICAgdGhpcy5sb2NrRGV0YWlscy5wdXNoKHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5EYXRhU3RyZWFtJykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHRoaXMubG9ja0RldGFpbHMgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMubG9ja0RldGFpbHMgPSB1bmRlZmluZWQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzZXREb3dubG9hZEljb24oKSB7XHJcbiAgICBsZXQgZG93bmxvYWRUeXBlID0gYXdhaXQgdGhpcy53aWRnZXRFbGVtZW50LmdldERvd25sb2FkVHlwZSgpO1xyXG4gICAgdGhpcy5kb3dubG9hZEljb25UeXBlID0gZG93bmxvYWRUeXBlO1xyXG4gICAgdGhpcy5pc0Rvd25sb2FkSWNvblZpc2libGUgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNDaGFydERvd25sb2FkVmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc0dyaWREb3dubG9hZFZpc2libGUgPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd0V4Y2VsbCA9IHRydWU7XHJcbiAgICBpZiAoZG93bmxvYWRUeXBlICE9IFJBRG93bmxvYWRUeXBlLk5vbmUpIHtcclxuICAgICAgdGhpcy5pc0Rvd25sb2FkSWNvblZpc2libGUgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmICghdGhpcy5pc1dpZGdldE1nbW50ICYmICF0aGlzLmRldGFpbFBhZ2VVcmwpIHtcclxuICAgICAgICB0aGlzLnNob3dTZXR0aW5nc0xpbmsgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChkb3dubG9hZFR5cGUgPT0gUkFEb3dubG9hZFR5cGUuQ2hhcnQpIHtcclxuICAgICAgdGhpcy5pc0NoYXJ0RG93bmxvYWRWaXNpYmxlID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZG93bmxvYWRUeXBlID09IFJBRG93bmxvYWRUeXBlLkdyaWQpIHtcclxuICAgICAgdGhpcy5pc0dyaWREb3dubG9hZFZpc2libGUgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChkb3dubG9hZFR5cGUgPT0gUkFEb3dubG9hZFR5cGUuU3RhdGlzdGljcykge1xyXG4gICAgICB0aGlzLmlzR3JpZERvd25sb2FkVmlzaWJsZSA9IHRydWU7XHJcbiAgICAgIHRoaXMuc2hvd0V4Y2VsbCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGRvd25sb2FkSWNvbkNsaWNrZWQodHlwZTogc3RyaW5nKSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSBcIkNTVlwiOlxyXG4gICAgICAgIHRoaXMud2lkZ2V0RWxlbWVudC5kb3dubG9hZENsaWNrZWQodGhpcy5kb3dubG9hZEljb25UeXBlLCBSQURvd25sb2FkT3B0aW9uLkNTVik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJQTkdcIjpcclxuICAgICAgICB0aGlzLndpZGdldEVsZW1lbnQuZG93bmxvYWRDbGlja2VkKHRoaXMuZG93bmxvYWRJY29uVHlwZSwgUkFEb3dubG9hZE9wdGlvbi5QTkcpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiUERGXCI6XHJcbiAgICAgICAgdGhpcy53aWRnZXRFbGVtZW50LmRvd25sb2FkQ2xpY2tlZCh0aGlzLmRvd25sb2FkSWNvblR5cGUsIFJBRG93bmxvYWRPcHRpb24uUERGKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcIlNWR1wiOlxyXG4gICAgICAgIHRoaXMud2lkZ2V0RWxlbWVudC5kb3dubG9hZENsaWNrZWQodGhpcy5kb3dubG9hZEljb25UeXBlLCBSQURvd25sb2FkT3B0aW9uLlNWRyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJKUEVHXCI6XHJcbiAgICAgICAgdGhpcy53aWRnZXRFbGVtZW50LmRvd25sb2FkQ2xpY2tlZCh0aGlzLmRvd25sb2FkSWNvblR5cGUsIFJBRG93bmxvYWRPcHRpb24uSlBFRyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbW92ZU1lbnUoKSB7XHJcbiAgICBqUXVlcnkoJyNyYS1kYi13aWRnZXQtbWVudScpLnJlbW92ZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGVja1Zpc2l0TGlua1Zpc2libGl0eSgpIHtcclxuICAgIGxldCBpc1Zpc2l0QXBwbGljYWJsZSA9IHRydWU7XHJcbiAgICBpZiAodGhpcy53aWRnZXRFbGVtZW50ICYmIHR5cGVvZiB0aGlzLndpZGdldEVsZW1lbnQuZ2V0VmlzaXRMaW5rVmlzaWJpbGl0eVN0YXR1cyA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgIGlzVmlzaXRBcHBsaWNhYmxlID0gdGhpcy53aWRnZXRFbGVtZW50LmdldFZpc2l0TGlua1Zpc2liaWxpdHlTdGF0dXMoKTtcclxuICAgIH1cclxuICAgIHJldHVybiBpc1Zpc2l0QXBwbGljYWJsZTtcclxuICB9XHJcblxyXG4gIC8qKlNob3cgZHJvcGRvd24gb24gZ2VhciBpY29uIGNsaWNrICAqL1xyXG4gIHB1YmxpYyBzaG93RHJvcERvd24oZTogYW55KSB7XHJcbiAgICB0aGlzLnNldERvd25sb2FkSWNvbigpO1xyXG5cclxuICAgIHRoaXMucmVtb3ZlTWVudSgpO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcblxyXG5cclxuICAgICAgbGV0IHRhcmdldFBvcyA9IGUudGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICBsZXQgc3R5bGU6IHN0cmluZyA9IFwicG9zaXRpb246Zml4ZWQ7dG9wOlwiICsgKHRhcmdldFBvcy55ICsgMTUpICsgJ3B4JyArICc7bGVmdDonICsgKGUucGFnZVggLSAxMjIpICsgJ3B4O3otaW5kZXg6MTAwMDsnO1xyXG4gICAgICBsZXQgaHRtbCA9IHRoaXMuZ2V0Q29udGVueHRIdG1sKHN0eWxlKTtcclxuXHJcbiAgICAgIGpRdWVyeShodG1sKS5hcHBlbmRUbygnYm9keScpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuaXNXaWRnZXRNZ21udCkge1xyXG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignd2NFZGl0V2lkZ2V0JywgdGhpcy5lZGl0V2lkZ2V0KTtcclxuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3djQ29weVdpZGdldCcsIHRoaXMuY29weVdpZGdldCk7XHJcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCd3Y01vdmVXaWRnZXQnLCB0aGlzLm1vdmVXaWRnZXQpO1xyXG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignd2NXaWRnZXREZWxldGUnLCB0aGlzLmRlbGV0ZVdpZGdldCk7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IGN1c3RvbVBhZ2VQYXJhbXMgPSBmYWxzZTtcclxuICAgICAgaWYgKHRoaXMuZGF0YS53aWRnZXRJbmZvICYmIHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldFNldHRpbmdzKSB7XHJcbiAgICAgICAgdGhpcy53aWRnZXRTZXR0aW5ncyA9IHRoaXMuZ2V0UGFyc2VkQ29uZmlnKHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldFNldHRpbmdzKTtcclxuICAgICAgICBpZiAodGhpcy53aWRnZXRTZXR0aW5ncy5jdXN0b21QYWdlUGFyYW1zIHx8IHRoaXMud2lkZ2V0U2V0dGluZ3MuY3VzdG9tUGFnZVVSTCkge1xyXG4gICAgICAgICAgY3VzdG9tUGFnZVBhcmFtcyA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoKHRoaXMuZGV0YWlsUGFnZVVybCB8fCBjdXN0b21QYWdlUGFyYW1zKSAmJiB0aGlzLmNoZWNrVmlzaXRMaW5rVmlzaWJsaXR5KCkpIHtcclxuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3djVmlzaXRXaWRnZXQnLCB0aGlzLnZpc2l0UGFnZSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuaXNDaGFydERvd25sb2FkVmlzaWJsZSkge1xyXG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignd2NEb3dubG9hZFBuZycsIHRoaXMuZG93bmxvYWRJY29uQ2xpY2tlZCwgJ1BORycpO1xyXG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignd2NEb3dubG9hZEpwZycsIHRoaXMuZG93bmxvYWRJY29uQ2xpY2tlZCwgJ0pQRUcnKTtcclxuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3djRG93bmxvYWRQZGYnLCB0aGlzLmRvd25sb2FkSWNvbkNsaWNrZWQsICdQREYnKTtcclxuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3djRG93bmxvYWRTdmcnLCB0aGlzLmRvd25sb2FkSWNvbkNsaWNrZWQsICdTVkcnKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5pc0dyaWREb3dubG9hZFZpc2libGUgJiYgdGhpcy5zaG93RXhjZWxsKSB7XHJcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCd3Y0Rvd25sb2FkRXhjZWwnLCB0aGlzLmRvd25sb2FkSWNvbkNsaWNrZWQsICdDU1YnKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JhLWRiLXdpZGdldC1tZW51Jyk/LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZW50ZXInLCAoKSA9PiB7XHJcbiAgICAgICAgd2luZG93Lm1vdXNlT3ZlcldpZGdldE1lbnUgPSB0cnVlO1xyXG4gICAgICB9KTtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JhLWRiLXdpZGdldC1tZW51Jyk/LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCAoKSA9PiB7XHJcbiAgICAgICAgd2luZG93Lm1vdXNlT3ZlcldpZGdldE1lbnUgPSBmYWxzZTtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIGlmICghd2luZG93LmdyaWRzdGVySXRlbUVudGVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlTWVudSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWRkRXZlbnRMaXN0ZW5lcihpZDogc3RyaW5nLCBldmVudDogYW55LCBwYXJhbXM/OiBhbnkpIHtcclxuICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xyXG4gICAgaWYgKGVsZW1lbnQpIHtcclxuICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcclxuICAgICAgICBldmVudC5jYWxsKHRoaXMsIHBhcmFtcyk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRDb250ZW54dEh0bWwoc3R5bGU6IHN0cmluZykge1xyXG4gICAgbGV0IGh0bWw6IHN0cmluZyA9ICc8ZGl2IGlkPVwicmEtZGItd2lkZ2V0LW1lbnVcIicgKyAnc3R5bGU9XCInICsgc3R5bGUgKyAnXCIgY2xhc3M9XCJkb3dubG9hZC1jb250ZW50IGRyb3Bkb3duLWNvbnRlbnQgd2lkZ2V0LWNvbmZpZy1pdGVtIGRyb3Bkb3duLWNsaWNrXCIgc3R5bGU9XCJ6LWluZGV4OiAxMDAyO1wiPic7XHJcblxyXG4gICAgbGV0IHNldHRpbmdzID0gJyc7XHJcbiAgICBpZiAodGhpcy5pc1dpZGdldE1nbW50KSB7XHJcbiAgICAgIGlmICghdGhpcy5kYXRhLndpZGdldEluZm8udGVtcGxhdGVXaWRnZXRTZXR0aW5ncyB8fCAhdGhpcy5kYXRhLndpZGdldEluZm8udGVtcGxhdGVXaWRnZXRTZXR0aW5ncy5oaWRlRWRpdClcclxuICAgICAgICBzZXR0aW5ncyArPSB0aGlzLmdldEh0bWxGb3JCdXR0b24oJ3djRWRpdFdpZGdldCcsICdmYWwgZmEtZWRpdCcsIHRoaXMuZWRpdFRleHQpO1xyXG4gICAgICBpZiAoIXRoaXMuZGF0YS53aWRnZXRJbmZvLnRlbXBsYXRlV2lkZ2V0U2V0dGluZ3MgfHwgIXRoaXMuZGF0YS53aWRnZXRJbmZvLnRlbXBsYXRlV2lkZ2V0U2V0dGluZ3MuaGlkZUNvcHkpXHJcbiAgICAgICAgc2V0dGluZ3MgKz0gdGhpcy5nZXRIdG1sRm9yQnV0dG9uKCd3Y0NvcHlXaWRnZXQnLCAnZmFsIGZhLWNvcHknLCB0aGlzLmNvcHlUZXh0KTtcclxuICAgICAgaWYgKCF0aGlzLmRhdGEud2lkZ2V0SW5mby50ZW1wbGF0ZVdpZGdldFNldHRpbmdzIHx8ICF0aGlzLmRhdGEud2lkZ2V0SW5mby50ZW1wbGF0ZVdpZGdldFNldHRpbmdzLmhpZGVNb3ZlKVxyXG4gICAgICAgIHNldHRpbmdzICs9IHRoaXMuZ2V0SHRtbEZvckJ1dHRvbignd2NNb3ZlV2lkZ2V0JywgJ2ZhbCBmYS1hcnJvd3MtYWx0JywgdGhpcy5tb3ZlVGV4dCk7XHJcbiAgICB9XHJcbiAgICBsZXQgY3VzdG9tUGFnZVBhcmFtcyA9IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuZGF0YS53aWRnZXRJbmZvICYmIHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldFNldHRpbmdzKSB7XHJcbiAgICAgIHRoaXMud2lkZ2V0U2V0dGluZ3MgPSB0aGlzLmdldFBhcnNlZENvbmZpZyh0aGlzLmRhdGEud2lkZ2V0SW5mby53aWRnZXRTZXR0aW5ncyk7XHJcbiAgICAgIGlmICh0aGlzLndpZGdldFNldHRpbmdzLmN1c3RvbVBhZ2VQYXJhbXMgfHwgdGhpcy53aWRnZXRTZXR0aW5ncy5jdXN0b21QYWdlVVJMKSB7XHJcbiAgICAgICAgY3VzdG9tUGFnZVBhcmFtcyA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICgoIXRoaXMuZGF0YS53aWRnZXRJbmZvLnRlbXBsYXRlV2lkZ2V0U2V0dGluZ3MgfHwgIXRoaXMuZGF0YS53aWRnZXRJbmZvLnRlbXBsYXRlV2lkZ2V0U2V0dGluZ3MuaGlkZVZpc2l0UGFnZSkgJiYgKHRoaXMuZGV0YWlsUGFnZVVybCB8fCBjdXN0b21QYWdlUGFyYW1zKSAmJiB0aGlzLmNoZWNrVmlzaXRMaW5rVmlzaWJsaXR5KCkpIHtcclxuICAgICAgc2V0dGluZ3MgKz0gJzxhIHN0eWxlPVwibWF4LWhlaWdodDogMzBweDthbGlnbi1pdGVtczogY2VudGVyO2FsaWduLWNvbnRlbnQ6IGNlbnRlcjsgZGlzcGxheTogZmxleDtcIiBpZD1cIndjVmlzaXRXaWRnZXRcIj4nO1xyXG4gICAgICBzZXR0aW5ncyArPSAnPGkgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDRweDtmb250LXNpemU6IDI3cHggIWltcG9ydGFudDtcIiBjbGFzcz1cImZhbCBmYS1hbmdsZS1yaWdodFwiPjwvaT4gJztcclxuICAgICAgc2V0dGluZ3MgKz0gJzxzcGFuIHN0eWxlPVwicGFkZGluZy1sZWZ0OiAxMXB4O21hcmdpbi10b3A6IDJweDtcIiBzdHlsZT1cInBhZGRpbmctbGVmdDogNnB4O1wiPic7XHJcbiAgICAgIHNldHRpbmdzICs9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi52aXNpdHBhZ2UnKTtcclxuICAgICAgc2V0dGluZ3MgKz0gJzwvc3Bhbj48L2E+JztcclxuICAgIH1cclxuICAgIGlmICgoIXRoaXMuZGF0YS53aWRnZXRJbmZvLnRlbXBsYXRlV2lkZ2V0U2V0dGluZ3MgfHwgIXRoaXMuZGF0YS53aWRnZXRJbmZvLnRlbXBsYXRlV2lkZ2V0U2V0dGluZ3MuaGlkZVZpc2l0UGFnZSkgJiYgKHRoaXMuZGV0YWlsUGFnZVVybCAmJiB0aGlzLmNoZWNrVmlzaXRMaW5rVmlzaWJsaXR5KCkpIHx8IHRoaXMuaXNXaWRnZXRNZ21udCkge1xyXG4gICAgICBodG1sICs9ICc8ZGl2IHN0eWxlPVwiY29sb3I6ICM5RkEwQTQ7Zm9udC1zaXplOiAxMnB4O3BhZGRpbmctdG9wOiA4cHg7cGFkZGluZy1sZWZ0OiAxMnB4O1wiPic7XHJcbiAgICAgIGh0bWwgKz0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLnNldHRpbmdzJykgKyAnPC9kaXY+JztcclxuICAgICAgaHRtbCArPSBzZXR0aW5ncztcclxuICAgICAgaHRtbCArPSB0aGlzLmdldEhyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEb3dubG9hZEljb25WaXNpYmxlKSB7XHJcbiAgICAgIGlmICh0aGlzLnNob3dFeGNlbGwpIHtcclxuICAgICAgICBpZiAodGhpcy5kZXRhaWxQYWdlVXJsIHx8IHRoaXMuaXNXaWRnZXRNZ21udClcclxuICAgICAgICAgIGh0bWwgKz0gJzxzcGFuIHN0eWxlPVwiY29sb3I6ICM5RkEwQTQ7Zm9udC1zaXplOiAxMnB4O1wiPic7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgaHRtbCArPSAnPHNwYW4gc3R5bGU9XCJjb2xvcjogIzlGQTBBNDtmb250LXNpemU6IDEycHg7cGFkZGluZy10b3A6NXB4O2Rpc3BsYXk6YmxvY2s7XCI+JztcclxuXHJcbiAgICAgICAgaHRtbCArPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uZG93bmxvYWRzJyk7XHJcbiAgICAgICAgaHRtbCArPSAnPC9zcGFuPic7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLmlzQ2hhcnREb3dubG9hZFZpc2libGUpIHtcclxuICAgICAgICBodG1sICs9ICc8ZGl2IHN0eWxlPVwicGFkZGluZy10b3A6IDEwcHg7XCIgY2xhc3M9XCJjaGFydERvd25sb2FkXCI+JztcclxuICAgICAgICBodG1sICs9IHRoaXMuZ2V0SHRtbEZvckJ1dHRvbignd2NEb3dubG9hZFBuZycsICdmYWwgZmEtZmlsZS1pbWFnZScsIHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5wbmcnKSk7XHJcbiAgICAgICAgaHRtbCArPSB0aGlzLmdldEh0bWxGb3JCdXR0b24oJ3djRG93bmxvYWRKcGcnLCAnZmFsIGZhLWZpbGUtaW1hZ2UnLCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uanBlZycpKTtcclxuICAgICAgICBodG1sICs9IHRoaXMuZ2V0SHRtbEZvckJ1dHRvbignd2NEb3dubG9hZFBkZicsICdmYWwgZmEtZmlsZS1wZGYnLCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24ucGRmJykpO1xyXG4gICAgICAgIGh0bWwgKz0gdGhpcy5nZXRIdG1sRm9yQnV0dG9uKCd3Y0Rvd25sb2FkU3ZnJywgJ2ZhbCBmYS1maWxlLWFsdCcsIHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5zdmcnKSk7XHJcbiAgICAgICAgaHRtbCArPSAnPC9kaXY+JztcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5pc0dyaWREb3dubG9hZFZpc2libGUgJiYgdGhpcy5zaG93RXhjZWxsKSB7XHJcbiAgICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz1cImdyaWREb3dubG9hZFwiPic7XHJcbiAgICAgICAgaHRtbCArPSB0aGlzLmdldEh0bWxGb3JCdXR0b24oJ3djRG93bmxvYWRFeGNlbCcsICdmYWwgZmEtZG93bmxvYWQnLCB0aGlzLmV4Y2VsVGV4dCk7XHJcbiAgICAgICAgaHRtbCArPSAnPC9kaXY+JztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuaXNEb3dubG9hZEljb25WaXNpYmxlICYmIHRoaXMuaXNXaWRnZXRNZ21udCAmJiB0aGlzLnNob3dFeGNlbGwpIHtcclxuICAgICAgaHRtbCArPSB0aGlzLmdldEhyKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5pc1dpZGdldE1nbW50ICYmICF0aGlzLmRhdGEud2lkZ2V0SW5mby50ZW1wbGF0ZVdpZGdldFNldHRpbmdzIHx8ICF0aGlzLmRhdGEud2lkZ2V0SW5mby50ZW1wbGF0ZVdpZGdldFNldHRpbmdzLmhpZGVEZWxldGUpIHtcclxuICAgICAgaHRtbCArPSAnPGEgaWQ9XCJ3Y1dpZGdldERlbGV0ZVwiPjxpIGNsYXNzPVwiZmFsIGZhLXRpbWVzXCIgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDNweDtjb2xvcjogcmVkO1wiPjwvaT48c3Bhbj4nO1xyXG4gICAgICBodG1sICs9IHRoaXMuZGVsZXRlVGV4dDtcclxuICAgICAgaHRtbCArPSAnPC9zcGFuPjwvYT4nO1xyXG4gICAgfVxyXG5cclxuICAgIGh0bWwgKz0gJzwvZGl2Pic7XHJcbiAgICByZXR1cm4gaHRtbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SHIoKSB7XHJcbiAgICByZXR1cm4gJzxociBjbGFzcz1cImhyXCIgc3R5bGU9XCJtYXJnaW4tdG9wOiA1cHg7bWFyZ2luLWJvdHRvbTogNXB4O1wiPic7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEh0bWxGb3JCdXR0b24oaWQ6IHN0cmluZywgZm9udENsYXNzOiBzdHJpbmcsIHRleHQ6IHN0cmluZykge1xyXG4gICAgbGV0IGh0bWwgPSAnPGEgaWQ9XCInICsgaWQgKyAnXCI+PGkgc3R5bGU9XCJ3aWR0aDoxNnB4XCIgY2xhc3M9XCInICsgZm9udENsYXNzICsgJ1wiPjwvaT4gPHNwYW4gc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDZweDtcIj4nO1xyXG4gICAgaHRtbCArPSB0ZXh0O1xyXG4gICAgaHRtbCArPSAnPC9zcGFuPjwvYT4nO1xyXG4gICAgcmV0dXJuIGh0bWw7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBnZXRQYXJzZWRDb25maWcoY29uZmlnOiBhbnkpIHtcclxuICAgIGxldCBwYXJzZWRDb25maWc6IGFueTtcclxuICAgIGlmIChjb25maWcpIHtcclxuICAgICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIHBhcnNlZENvbmZpZyA9IEpTT04ucGFyc2UoY29uZmlnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2gge1xyXG4gICAgICAgICAgcGFyc2VkQ29uZmlnID0ge307XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwYXJzZWRDb25maWc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjb25maWc7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFwcGxheVdpZGdldFNldHRpbmdzKHNldHRpbmdzOiBhbnkpIHtcclxuICAgIGlmIChzZXR0aW5ncy5Ob1BhZGRpbmcpXHJcbiAgICAgIHRoaXMubm9QYWRkaW5nID0gdHJ1ZVxyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLm5vUGFkZGluZyA9IGZhbHNlXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEluYXBwbGljYWJsZUZpbHRlcnMoZGF0YTogYW55LCBpbnN0YW5jZUlkOiBhbnkpIHtcclxuICAgIHZhciB3aWRnZXREYXRhOiBhbnkgPSB7fTtcclxuICAgIHRoaXMuaW5hcHBsaWNhYmxlRmlsdGVycyA9IFtdO1xyXG4gICAgd2lkZ2V0RGF0YS5pbnN0YW5jZUlkID0gaW5zdGFuY2VJZDtcclxuICAgIGlmIChkYXRhICYmIGRhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICBkYXRhLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChlbGVtZW50ID09ICdkYXRlUmFuZ2UnKVxyXG4gICAgICAgICAgdGhpcy5pbmFwcGxpY2FibGVGaWx0ZXJzLnB1c2godGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLkRhdGVSYW5nZScpKTtcclxuICAgICAgICBlbHNlIGlmIChlbGVtZW50ID09ICdwYXJ0aWNpcGFudCcpIHtcclxuICAgICAgICAgIHRoaXMuaW5hcHBsaWNhYmxlRmlsdGVycy5wdXNoKHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5EaXZpc2lvbkdyb3VwJykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChlbGVtZW50ID09ICdzb3VyY2UnKVxyXG4gICAgICAgICAgdGhpcy5pbmFwcGxpY2FibGVGaWx0ZXJzLnB1c2godGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLkRhdGFTdHJlYW0nKSk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgdGhpcy5pbmFwcGxpY2FibGVGaWx0ZXJzLnB1c2goZWxlbWVudCk7XHJcbiAgICAgIH0pO1xyXG4gICAgICB3aWRnZXREYXRhLmRhdGEgPSBkYXRhO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHdpZGdldERhdGEuZGF0YSA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuICAgIHRoaXMudXBkYXRlQXBwbGllZEZpbHRlcnMuZW1pdCh3aWRnZXREYXRhKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvcGVuUG9wdXAodGl0bGU6IGFueSwgZGF0YTogYW55LCBmb290ZXI6IGFueSwgdHlwZTogYW55LCB0ZW1wbGF0ZTogYW55ID0gdW5kZWZpbmVkKSB7XHJcbiAgICBsZXQgcHJvcHM6IGFueSA9IHt9O1xyXG4gICAgaWYgKHR5cGUgPT0gJ2lubmFwbGljYWJsZScgJiYgdGhpcy5iYW5Qb3B1cERpdilcclxuICAgICAgcHJvcHMuZWxlbWVudCA9IHRoaXMuYmFuUG9wdXBEaXYubmF0aXZlRWxlbWVudDtcclxuICAgIGlmICh0eXBlID09ICdsb2NrJyAmJiB0aGlzLmxvY2tQb3B1cERpdilcclxuICAgICAgcHJvcHMuZWxlbWVudCA9IHRoaXMubG9ja1BvcHVwRGl2Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBwcm9wcy50aXRsZSA9IHRpdGxlO1xyXG4gICAgcHJvcHMuZGF0YSA9IGRhdGE7XHJcbiAgICBwcm9wcy5mb290ZXIgPSBmb290ZXI7XHJcbiAgICBpZiAodGVtcGxhdGUpXHJcbiAgICAgIHByb3BzLnRlbXBsYXRlID0gdGVtcGxhdGU7XHJcbiAgICB0aGlzLmN1cnJlbnRDb21wb25lbnQgPSB0aGlzLmRvbVNlcnZpY2UuYXBwZW5kQ29tcG9uZW50KExvY2tUb29sdGlwLCBkb2N1bWVudC5ib2R5LCBwcm9wcyk7XHJcbiAgICB0aGlzLnBvcHVwSW5zdGFuY2UgPSA8YW55PnRoaXMuY3VycmVudENvbXBvbmVudC5pbnN0YW5jZTtcclxuICB9XHJcbiAgcHVibGljIGNsb3NlUG9wdXAoKSB7XHJcbiAgICBpZiAodGhpcy5jdXJyZW50Q29tcG9uZW50KVxyXG4gICAgICB0aGlzLnBvcHVwSW5zdGFuY2UucmVtb3ZlTWUodGhpcy5jdXJyZW50Q29tcG9uZW50KTtcclxuICB9XHJcbiAgZ2V0d2lkZ2V0VGl0bGVUcmFuc2xhdGlvbihpdGVtOiBhbnkpIHtcclxuICAgIGxldCByS2V5ID0gJ0RCV18nICsgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLm1ha2VDb2RlKGl0ZW0pO1xyXG5cclxuICAgIGxldCB0cmFuc2xhdGVkU3RyaW5nID0gJyc7XHJcbiAgICBpZiAodGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmNsaWVudElkKSB7XHJcbiAgICAgIGNvbnN0IHRyYW5zbGF0aW9uTW9kdWxlID0gdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmNsaWVudElkICsgJ19EQlcnXHJcbiAgICAgIHRyYW5zbGF0ZWRTdHJpbmcgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKHRyYW5zbGF0aW9uTW9kdWxlICsgJy4nICsgcktleSk7XHJcblxyXG4gICAgICBpZiAodHJhbnNsYXRlZFN0cmluZy50b0xvd2VyQ2FzZSgpID09PSByS2V5LnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gdHJhbnNsYXRlZFN0cmluZztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAgICByZXR1cm4gaXRlbTtcclxuICB9XHJcblxyXG59XHJcbiIsIjxkaXYgI3djV3JhcHBlciBjbGFzcz1cIndjLXdyYXBwZXJcIiAobW91c2VlbnRlcik9XCJtb3VzZUhvdmVyKHRydWUpXCIgKG1vdXNlbGVhdmUpPVwibW91c2VIb3ZlcihmYWxzZSlcIlxyXG4gIFtuZ1N0eWxlXT1cInsnbWFyZ2luLWxlZnQnOiBub1BhZGRpbmc/JzBweCc6JzE1cHgnLCdtYXJnaW4tcmlnaHQnOiBub1BhZGRpbmc/JzBweCc6JzE1cHgnfVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJ3Y2hlYWRlciB3aWRnZXQtbW92ZVwiICpuZ0lmPVwiIWhpZGVUaXRsZSAmJiAhc2hvd09ubHlEcm9wZG93blwiXHJcbiAgICBbbmdDbGFzc109XCJ7J3VuZGVyTGluZSc6IGVuYWJsZVRpdGxlTGluZSB8fCBpc1dpZGdldFN0YXRlQXBwbGljYWJsZX1cIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIiBbbmdDbGFzc109XCJ7J3djLW1vdmVyJyA6IGlzV2lkZ2V0Q2FuTW92ZSB9XCIgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDBweDtoZWlnaHQ6aW5oZXJpdDtwYWRkaW5nLXJpZ2h0OiAwcHg7XCI+XHJcbiAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OmZsZXg7bWFyZ2luLXRvcDoxMHB4O1wiXHJcbiAgICAgICAgW25nU3R5bGVdPVwieydtYXJnaW4tbGVmdCc6IG5vUGFkZGluZz8nMTVweCc6JzBweCcsJ21hcmdpbi1yaWdodCc6IG5vUGFkZGluZz8nMTVweCc6JzBweCd9XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC05IGZsb2F0LWxlZnQgdGl0bGUtbGFiZWxcIj5cclxuICAgICAgICAgIDxyYS10b29sdGlwIFt2YWx1ZV09XCJ0b29sVGlwVmFsdWVcIiBbd2lkdGhdPVwidG9vbFRpcFdpZHRoXCI+XHJcbiAgICAgICAgICAgIDxkaXYgW2hpZGRlbl09XCJoaWRlVGl0bGVcIiBzdHlsZT1cInRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO3doaXRlLXNwYWNlOiBub3dyYXA7b3ZlcmZsb3c6IGhpZGRlbjtcIlxyXG4gICAgICAgICAgICAgIChtb3VzZW92ZXIpPVwibW91c2VPdmVyKCRldmVudClcIiAjc2VhcmNoSW5wdXQ+e3tXaWRnZXREaXNwbGF5TmFtZX19PC9kaXY+XHJcbiAgICAgICAgICA8L3JhLXRvb2x0aXA+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0zXCIgc3R5bGU9XCJjdXJzb3I6ZGVmYXVsdDtwYWRkaW5nLXJpZ2h0OiAwcHg7XCI+ICAgICAgICBcclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbG9hdC1yaWdodFwiIHN0eWxlPVwiZGlzcGxheTogZmxleDtcIj5cclxuICAgICAgICAgICAgPGRpdiAgI2JhblBvcHVwRGl2IChtb3VzZW92ZXIpPVwib3BlblBvcHVwKGluYXBwbGljYWJsZUljb25UaXRsZSxpbmFwcGxpY2FibGVGaWx0ZXJzLGluYXBwbGljYWJsZUljb25Gb290ZXIsJ2lubmFwbGljYWJsZScpXCIgKG1vdXNlb3V0KT1cImNsb3NlUG9wdXAoKVwiIGNsYXNzPVwidGl0bGUtYmFyLWxvY2staWNvbiBsb2NrLWRyb3Bkb3duXCIgW2hpZGRlbl09XCIhaW5hcHBsaWNhYmxlRmlsdGVycyB8fCBpbmFwcGxpY2FibGVGaWx0ZXJzLmxlbmd0aCA9PSAwIHx8ICFnbG9iYWxGaWx0ZXIgfHwgZ2xvYmFsRmlsdGVyID09ICd7fSdcIj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhbCBmYS1iYW4gbG9ja1wiPjwvaT4gICAgICAgICAgICBcclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgI2xvY2tQb3B1cERpdiAobW91c2VvdmVyKT1cIm9wZW5Qb3B1cChsb2NrSWNvblRpdGxlLGxvY2tEZXRhaWxzLGxvY2tJY29uRm9vdGVyLCdsb2NrJyxsb2NrVGVtcGxhdGVJbmZvKVwiIChtb3VzZW91dCk9XCJjbG9zZVBvcHVwKClcIiBjbGFzcz1cInRpdGxlLWJhci1sb2NrLWljb24gbG9jay1kcm9wZG93blwiIFtoaWRkZW5dPVwiKCFsb2NrRGV0YWlscyAmJiAhbG9ja1RlbXBsYXRlSW5mbykgfHwgaGlkZUxvY2tcIj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhbCBmYS1sb2NrIGxvY2tcIj48L2k+ICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndpZGdldC1tZW51XCIgc3R5bGU9XCJ3aWR0aDoxMHB4O1wiXHJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyd3aWRnZXQtbWVudS1zaG93JzogaXNNb3VzZUhvdmVyICYmIHNob3dTZXR0aW5nc0xpbmt9XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3BidG4gdGl0bGUtYmFyLWljb25cIj5cclxuICAgICAgICAgICAgICAgIDxpIChjbGljayk9XCJzaG93RHJvcERvd24oJGV2ZW50KVwiICN3aWRnZXREcm9wZG93biBjbGFzcz1cImZhbCBmYS1lbGxpcHNpcy12IHdpZGdldC1tZW51LWVsbGlwc2VcIj48L2k+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiAqbmdJZj1cImhpZGVUaXRsZSAmJiAhc2hvd09ubHlEcm9wZG93blwiIGNsYXNzPVwid2NoZWFkZXIgd2lkZ2V0LW1vdmVcIlxyXG4gICAgc3R5bGU9XCJoZWlnaHQ6IDQ1cHg7d2lkdGg6IDk1JTtjdXJzb3I6IG1vdmU7ei1pbmRleDogOTk7b3BhY2l0eTogMDtcIj5cclxuICA8L2Rpdj5cclxuICA8ZGl2ICAqbmdJZj1cImhpZGVUaXRsZSAmJiAhc2hvd09ubHlEcm9wZG93blwiIGNsYXNzPVwid2lkZ2V0LW1lbnUgd2lkZ2V0LW1lbnUtdGl0bGUtaGlkZGVuXCIgW25nQ2xhc3NdPVwieyd3aWRnZXQtbWVudS1zaG93JzogaXNNb3VzZUhvdmVyICYmIHNob3dTZXR0aW5nc0xpbmt9XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZHJvcGJ0biB0aXRsZS1iYXItaWNvblwiPlxyXG4gICAgICA8aSAoY2xpY2spPVwic2hvd0Ryb3BEb3duKCRldmVudClcIiBjbGFzcz1cImZhbCBmYS1lbGxpcHNpcy12XCIgc3R5bGU9XCJ0ZXh0LWFsaWduOiBjZW50ZXI7XCI+PC9pPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cIndjQm9keVwiIFtuZ1N0eWxlXT1cInsnYm90dG9tJzogbm9QYWRkaW5nPycwcHgnOicxMHB4JywndG9wJzpoaWRlVGl0bGUgfHwgc2hvd09ubHlEcm9wZG93bj8nMTBweCc6JzQ2cHgnfVwiPlxyXG4gICAgPGRpdiBbaGlkZGVuXT1cImlzV2lkZ2V0U3RhdGVBcHBsaWNhYmxlXCIgY2xhc3M9XCJtLWZhZGVPdXQgd2lkZ2V0LW92ZXJsYXlcIiBbbmdDbGFzc109XCJ7J20tZmFkZUluJzogIHNob3dQYW5lbH1cIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImxkcy1yb2xsZXJcIj5cclxuICAgICAgICA8ZGl2PjwvZGl2PlxyXG4gICAgICAgIDxkaXY+PC9kaXY+XHJcbiAgICAgICAgPGRpdj48L2Rpdj5cclxuICAgICAgICA8ZGl2PjwvZGl2PlxyXG4gICAgICAgIDxkaXY+PC9kaXY+XHJcbiAgICAgICAgPGRpdj48L2Rpdj5cclxuICAgICAgICA8ZGl2PjwvZGl2PlxyXG4gICAgICAgIDxkaXY+PC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwid2NcIiBbaGlkZGVuXT1cImlzV2lkZ2V0U3RhdGVBcHBsaWNhYmxlXCI+XHJcbiAgICAgIDxkaXYgW2hpZGRlbl09XCIhaXNDdXN0b21FbGVtZW50XCIgI2N0bFdpZGdldD48L2Rpdj5cclxuICAgICAgPGRpdiBbaGlkZGVuXT1cImlzQ3VzdG9tRWxlbWVudFwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgI2N0bFdpZGdldE1vZHVsZT48L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgKm5nSWY9XCJpc1dpZGdldFN0YXRlQXBwbGljYWJsZVwiIGNsYXNzPVwiZGVmYXVsdENvbmZpZ1wiPlxyXG4gICAgICA8cmEtd2lkZ2V0LXN0YXRlIHN0eWxlPVwid2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO1wiIFtpc1dpZGdldFN0YXRlQXBwbGljYWJsZV09XCJpc1dpZGdldFN0YXRlQXBwbGljYWJsZVwiXHJcbiAgICAgICAgW2lzR2xvYmFsRmlsdGVyQXBwbGllZF09XCJpc0dsb2JhbEZpbHRlckFwcGxpZWRcIiBbd2lkZ2V0RW1wdHlTdGF0ZV09XCJ3aWRnZXRFbXB0eVN0YXRlXCJcclxuICAgICAgICAoZWRpdFdpZGdldENsaWNrZWQpPWVkaXRXaWRnZXQoKSBbd2lkdGhDb2xdPVwid2lkdGhcIiBbaGVpZ2h0Q29sXT1cImhlaWdodFwiPlxyXG4gICAgICA8L3JhLXdpZGdldC1zdGF0ZT5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj4iXX0=