ax-common-ui-lib 1.0.1-beta.34.1 → 1.0.1-beta.34.1-testing

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.
@@ -341,6 +341,8 @@ export class AppListComponent {
341
341
  this._unsubscribeAll = new Subject();
342
342
  this.userPermissions = []; // Variable to hold user permissions
343
343
  this.showWebPortalAccessOverlay = false; // Flag to control overlay display
344
+ this.hasCalledGetUserPermissions = false; // Flag to track if the function has been called
345
+ this.permissions = [];
344
346
  this.hasAppBuilderPermission = false;
345
347
  }
346
348
  /**
@@ -596,6 +598,10 @@ export class AppListComponent {
596
598
  }
597
599
  }
598
600
  ngOnChanges(changes) {
601
+ if (this.currentOrg != this.previousOrg) {
602
+ this.getUserPermissions();
603
+ this.previousOrg = this.currentOrg;
604
+ }
599
605
  if (changes.appList && changes.appList.currentValue) {
600
606
  this.assignGradients();
601
607
  }
@@ -639,8 +645,6 @@ export class AppListComponent {
639
645
  */
640
646
  switchAccount(organizationId) {
641
647
  this.switchAccountEvent.emit(organizationId);
642
- this.getUserPermissions();
643
- this._changeDetectorRef.detectChanges();
644
648
  }
645
649
  /**
646
650
  * Sign out
@@ -989,12 +993,13 @@ export class AppListComponent {
989
993
  });
990
994
  }
991
995
  getUserPermissions() {
992
- this._commonService.getUserDetail().subscribe((response) => {
996
+ this._commonService.getUserDetail(true).subscribe((response) => {
993
997
  if (response.status === 'success' && response.ud) {
994
998
  this.permissions = response.ud.permissions; // Extract permissions
995
999
  this.hasOrgUserAccess = this.permissions.includes('ORG_IAM'); // Check if 'ORG_IAM' is in the permissions array
996
1000
  // Show overlay only if 'ACCESS_WEB_PORTAL' permission is not present
997
1001
  this.showWebPortalAccessOverlay = !this.permissions.includes('ACCESS_WEB_PORTAL');
1002
+ this.hasAppBuilderPermission = this.permissions.includes("APP_BUILDER") && this.permissions.includes("ACCESS_WEB_PORTAL");
998
1003
  console.log('User Permissions:', this.permissions);
999
1004
  console.log('Is Builder Access:', this.hasOrgUserAccess);
1000
1005
  }
@@ -1012,7 +1017,7 @@ export class AppListComponent {
1012
1017
  }
1013
1018
  }
1014
1019
  AppListComponent.ɵfac = function AppListComponent_Factory(t) { return new (t || AppListComponent)(i0.ɵɵdirectiveInject(i1.AuthService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i2.UserService), i0.ɵɵdirectiveInject(i3.CommonLibConfigurationService), i0.ɵɵdirectiveInject(i4.MyAppListService), i0.ɵɵdirectiveInject(i5.Router), i0.ɵɵdirectiveInject(i6.AxoSnackBarService), i0.ɵɵdirectiveInject(i7.MatDialog), i0.ɵɵdirectiveInject(i8.FlattenService), i0.ɵɵdirectiveInject(i9.HttpClient), i0.ɵɵdirectiveInject(i9.HttpClient), i0.ɵɵdirectiveInject(i10.CookieService), i0.ɵɵdirectiveInject(i5.ActivatedRoute), i0.ɵɵdirectiveInject(i5.Router), i0.ɵɵdirectiveInject(i11.LoggingService), i0.ɵɵdirectiveInject(i12.CommonService), i0.ɵɵdirectiveInject(i13.DataViewFiltersService), i0.ɵɵdirectiveInject(i14.SubscribedPlanName), i0.ɵɵdirectiveInject(i15.StripeService)); };
1015
- AppListComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AppListComponent, selectors: [["lib-app-list"]], inputs: { appList: "appList", baseUrl: "baseUrl", organizationList: "organizationList", selectedOrganization: "selectedOrganization", user: "user", listType: "listType", showCreateButton: "showCreateButton", showQRIcon: "showQRIcon", showDotsOption: "showDotsOption", showCustomize: "showCustomize", showAddBtn: "showAddBtn" }, outputs: { switchAccountEvent: "switchAccountEvent", openAppEvent: "openAppEvent", updateListEvent: "updateListEvent" }, features: [i0.ɵɵProvidersFeature([
1020
+ AppListComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AppListComponent, selectors: [["lib-app-list"]], inputs: { currentOrg: "currentOrg", appList: "appList", baseUrl: "baseUrl", organizationList: "organizationList", selectedOrganization: "selectedOrganization", user: "user", listType: "listType", showCreateButton: "showCreateButton", showQRIcon: "showQRIcon", showDotsOption: "showDotsOption", showCustomize: "showCustomize", showAddBtn: "showAddBtn" }, outputs: { switchAccountEvent: "switchAccountEvent", openAppEvent: "openAppEvent", updateListEvent: "updateListEvent" }, features: [i0.ɵɵProvidersFeature([
1016
1021
  {
1017
1022
  provide: MAT_SELECT_CONFIG,
1018
1023
  useValue: { overlayPanelClass: 'organization-list-overlay-panel' },
@@ -1154,7 +1159,9 @@ AppListComponent.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: AppList
1154
1159
  useValue: { overlayPanelClass: 'organization-list-overlay-panel' },
1155
1160
  },
1156
1161
  ], template: "<div class=\"flex flex-col flex-auto h-full-appList my-app-list overflow-hidden page-background axo-font\">\n <!-- Header -->\n <div class=\"sticky top-0 bg-white\">\n <div class=\"app-list-main-header relative flex flex-0 h-12 z-49 box-border px-6\">\n <div class=\"flex flex-auto items-center min-w-0\"> <img class=\"w-36 h-7\" src=\"assets/images/logo/axo-logo.svg\" alt=\"Logo image\"> <span class=\"beta\">Beta</span> </div>\n <div class=\"flex flex-auto justify-end items-center min-w-0 gap-3\">\n <button mat-icon-button class=\"mt-1.5\">\n <mat-icon svgIcon=\"axo_search\"></mat-icon>\n </button>\n <button mat-icon-button class=\"mt-1.5\">\n <mat-icon class=\"cursor-pointer axo_notifiction-2\" matTooltip=\"Notification\" svgIcon=\"axo_notifiction-2\"></mat-icon>\n </button>\n <!-- once we fix identity server API, this code will be needed again\n <button (click)=\"$event.stopPropagation();\" mat-icon-button [matMenuTriggerFor]=\"userProfile09Menu\">\n <ng-container *ngIf=\"userImage; else isEmptyImage\">\n <img [src]=\"baseUrl + 'images/'+ userImage\" onError =\"this.src='assets/icons/organization.png'\" class=\"inline object-cover w-7 h-7 mr-2 organizationIcon\" alt=\"avtar\">\n </ng-container>\n <ng-template #isEmptyImage>\n\n <span class=\"empty-app-icon\">{{ (user['FirstName']).charAt(0) + \"\" + (user['LastName']).charAt(0) | uppercase }}</span>\n </ng-template>\n </button>\n <mat-menu #userProfile09Menu=\"matMenu\">\n <button mat-menu-item class=\"h-full\">\n <ng-container *ngIf=\"userImage; else isEmptyProfileImage\">\n <img class=\"organizationIcon\" [src]=\"baseUrl + 'images/'+ userImage\" alt=\"\" onError =\"this.src='assets/icons/organization.png'\"/>\n </ng-container>\n <ng-template #isEmptyProfileImage>\n <span class=\"userEmptyIcon\">{{ (user['FirstName']).charAt(0) + \"\" + (user['LastName']).charAt(0) | uppercase }}</span>\n </ng-template>\n <div class=\"inline-grid\">\n <span class=\"user-name-title \">{{ userEmail }}</span>\n <span class=\"user-emailid \">{{ userName }}</span>\n </div>\n </button>\n <button mat-menu-item class=\"organization-section\" (click)=\"signOut()\">\n <span class=\"logout-title\">Logout</span>\n </button>\n </mat-menu> -->\n\n <button (click)=\"$event.stopPropagation();\" mat-icon-button [matMenuTriggerFor]=\"userProfile09Menu\">\n <ng-container *ngIf=\"userImage; else isEmptyImage\">\n <img [src]=\"baseUrl + userImage\" onError =\"this.src='assets/icons/organization.svg'\" class=\"organizationIcon\" alt=\"avtar\">\n </ng-container>\n <ng-template #isEmptyImage>\n\n <span class=\"uppercase font-medium cursor-pointer text-sm h-8 w-8 flex justify-center items-center ml-2 bg-gray-300 rounded-full\">{{ (user['fname']).charAt(0) + \"\" + (user['lname']).charAt(0) | uppercase }}</span>\n </ng-template>\n </button>\n <mat-menu #userProfile09Menu=\"matMenu\" backdropClass=\"app-list-mat-menu-panel-class\">\n <button mat-menu-item class=\"h-full user-info\">\n <ng-container *ngIf=\"userImage; else isEmptyProfileImage\">\n <img class=\"organizationIconprofile\" [src]=\"baseUrl + userImage\" alt=\"\" onError =\"this.src='assets/icons/organization.svg'\"/>\n </ng-container>\n <ng-template #isEmptyProfileImage>\n <span class=\"userEmptyIcon\">{{ (user['fname']).charAt(0) + \"\" + (user['lname']).charAt(0) | uppercase }}</span>\n </ng-template>\n <div class=\"inline-grid py-3\">\n <span class=\"user-emailid\">{{ userEmail }}</span>\n <span class=\"user-name-title\">{{ userName }}</span>\n </div>\n </button>\n <mat-divider class=\"my-0\"></mat-divider>\n <button mat-menu-item class=\"user-logout-btn organization-btn\" (click)=\"navigatetoOrganiation()\" *ngIf=\"hasOrgUserAccess\">\n <!-- <mat-icon [svgIcon]=\"'heroicons_outline:user-group'\"></mat-icon> -->\n <span class=\"logout-label\">Organization Users</span>\n </button>\n <button mat-menu-item class=\"user-logout-btn organization-btn\" (click)=\"navigatetoOrganiationSettings()\" *ngIf=\"hasOrgUserAccess\">\n <!-- <mat-icon [svgIcon]=\"'heroicons_outline:user-group'\"></mat-icon> -->\n <span class=\"logout-label\">Organization Settings</span>\n </button>\n <button mat-menu-item class=\"user-logout-btn billing-btn\" (click)=\"navigateToBilling()\">\n <!-- <mat-icon [svgIcon]=\"'heroicons_outline:credit-card'\"></mat-icon> -->\n <span class=\"logout-label\">Billing</span>\n </button>\n <mat-divider class=\"my-0\"></mat-divider>\n <button mat-menu-item class=\"user-logout-btn\" (click)=\"signOut()\">\n <!-- <mat-icon [svgIcon]=\"'heroicons_outline:logout'\"></mat-icon> -->\n <span class=\"logout-lable\">Logout</span>\n </button>\n\n </mat-menu>\n\n\n\n </div>\n </div>\n <!-- Header -->\n <div class=\"app-list-main-subheader\">\n <div class=\"app-list-header relative flex flex-0 items-center z-49 box-border px-4 sm:px-6\">\n <div class=\"flex flex-auto items-center min-w-0 gap-3\">\n <div class=\"flex items-center hover:bg-gray-100 p-2 rounded-lg\">\n <mat-form-field appearance=\"standard\" class=\"sm:w-full flex items-center organization-mat-select\">\n <mat-select [(ngModel)]=\"selectedOrganization\" placeholder=\"select Organization\" class=\"flex items-center\">\n <mat-select-trigger class=\"flex items-center\" *ngIf=\"selectedOrganization\">\n <span>\n <img class=\"organizationIcon\" alt=\"\" [src]=\"(selectedOrganization.icon.indexOf('https://') !== -1) ? selectedOrganization.icon : baseUrl + selectedOrganization.icon\" onError =\"this.src='assets/icons/organization.svg'\">\n </span>\n <span class=\"org-name\" [matTooltip]=\"selectedOrganization.name\"> {{ selectedOrganization.name }}</span>\n <!-- Custom arrow icon -->\n <!-- <mat-icon class=\"dropdown-arrow\" svgIcon=\"dropdown-arrow\"></mat-icon> -->\n </mat-select-trigger>\n <div class=\"switch flex p-2 gap-2 pl-4 items-center cursor-pointer \">\n <mat-icon svgIcon=\"axo_switch\" class=\"switch-icon h-8 w-8\"></mat-icon>\n <span class=\"switch-span\">Switch Organization</span>\n </div>\n <mat-option class=\"organizationList\"\n *ngFor=\"let organization of organizationList; let organizationIndex = index\"\n [value]=\"organization\"\n (click)=\"switchAccount(organization.id)\"\n [selected]=\"selectedOrganization.id === organization.id\"\n >\n <div class=\"org-icon-span\">\n <img class=\"organizationIcon\" alt=\"\" [src]=\"(organization.icon.indexOf('https://') !== -1) ? organization.icon : baseUrl + organization.icon\" onError =\"this.src='assets/icons/organization.svg'\">\n </div>\n <div class=\"sm:text-lg text-xs font-medium org-name\"> {{ organization.name}}</div>\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <span class=\"sm:text-lg text-xs font-medium main-title\">My Apps</span>\n </div>\n <div>\n <button *ngIf=\"hasAppBuilderPermission && !isRestrictedUrl()\" class=\"primary-btn axo-font w-28\" (click)=\"openCreateAppDialog()\">\n <span>Create App</span>\n </button>\n </div>\n \n </div>\n\n </div>\n </div>\n\n <!-- App List with Overlay -->\n <div class=\"relative flex-auto app-list h-full-appList px-4 py-5 sm:py-8 overflow-auto\">\n <!-- Overlay for web portal access -->\n <div *ngIf=\"showWebPortalAccessOverlay\" class=\"permission-overlay\">\n You don't have permission to access Web Portal.\n </div>\n\n <ng-container *ngIf=\"appList.length; else notEmptyAppList\">\n <div class=\"app-grid items-start card-body w-full\">\n <div class=\"card-outer-div\" *ngFor=\"let appDetail of appList; let i = index\">\n <fuse-card class=\"fuse-card-app flex flex-col gap-2 filter-list\" [ngStyle]=\"{'background': appDetail.gradient}\" (click)=\"openApp(appDetail.appVersionId)\">\n <div *ngIf=\"appDetail.qr_status === true && showQRIcon\" (click)=\"disableQRDialog(appDetail.appVersionId, i); $event.stopPropagation();\" class=\"flex justify-center items-center border-0 rounded-full qr-icon bg-white absolute top-4 right-4\" [ngClass]=\"{'appHover': openPopupMenu === appDetail.appVersionId}\" style=\"padding: .3rem;\">\n <img matTooltip=\"Disable QR\" src=\"assets/icons/axo/sculptor/axo_qrcode_new.svg\"\n alt=\"\"\n class=\"h-3 w-3 object-cover\">\n </div>\n <div class=\"flex items-center card justify-between\" style=\"margin-left: -20px;\">\n <div class=\"dots-vertical-app\" *ngIf=\"showDotsOption\" [ngClass]=\"{'appHover': openPopupMenu === appDetail.appVersionId}\">\n <button (click)=\"$event.stopPropagation();setOpenPopupMenu(appDetail.appVersionId)\" mat-icon-button [disableRipple]=\"true\"\n [matMenuTriggerFor]=\"contextMenu\">\n <mat-icon [svgIcon]=\"'heroicons_solid:dots-vertical'\" style=\"color: #FFFFFF;\"></mat-icon>\n </button>\n <mat-menu #contextMenu=\"matMenu\" class=\"customize\">\n <div id=\"report-menu\">\n <button mat-menu-item (click)=\"openQRCodeDialog()\" class=\"py-0 pl-4 pr-6\">\n <img src=\"assets/icons/options-mobile.svg\" alt=\"\" class=\"h-6 w-6 inline-block mr-2\">\n <span>Use On Mobile</span>\n </button>\n </div>\n <div id=\"report-menu\">\n <button mat-menu-item (click)=\"openDeleteAppDialog(appDetail.appVersionId)\" class=\"py-0 pl-4 pr-6\">\n <img src=\"assets/icons/options-delete.svg\" alt=\"\" class=\"h-6 w-6 inline-block mr-2\">\n <span>Delete</span>\n </button>\n </div>\n </mat-menu>\n </div>\n </div>\n <div class=\"card-inner-div\">\n <div class=\"flex items-center justify-center dashboard-icon\">\n <img [src]=\"baseUrl + appDetail.icon\" onError =\"this.src='https://static.axonator.com/static/default_icons/app.png'\" alt=\"Logo image\">\n </div>\n </div>\n <div class=\"card-content\">\n <div class=\"app-info\">\n <div class=\"block app-title-wrapper\">\n <div class=\"app_title font-medium leading-tight axo-font\" [matTooltip]=\"appDetail.name\">\n {{appDetail.name}}\n </div>\n </div>\n <div class=\"app_version w-full leading-tight text-xs\">\n v {{appDetail.version.split('.')[0]}}.{{padZero(appDetail.minorVersion)}}\n </div>\n </div>\n <div class=\"cust-open flex justify-end w-full\">\n <div class=\"flex flex-row items-center justify-end space-x-2\">\n <a *ngIf=\"showCustomize\" routerLink=\"\" class=\"customize text-left leading-tight text-xs\">Customize</a>\n <button class=\"open-button\">Open</button>\n </div>\n </div>\n </div>\n </fuse-card>\n </div>\n </div>\n </ng-container>\n \n </div>\n <ng-template #notEmptyAppList>\n <!-- if app list is empty -->\n <div class=\"flex flex-col flex-auto min-w-0 relative items-center\" #notEmptyAppList>\n <div class=\"container flex flex-col my-auto items-center justify-center no-app-created\">\n <h2>No app created yet!</h2>\n </div>\n </div>\n </ng-template>\n <app-common-footer [showAddBtn]=\"showAddBtn\" [showUpgradeBtn]=\"true\"></app-common-footer>\n <!-- <div class=\"fixed bottom-0 flex flex-0 items-center justify-start w-full h-14 px-4 md:px-6 z-49 bg-white app-list-footer\">\n <span class=\"font-medium text-secondary\">Axonator &copy; {{currentYear}}</span>\n </div> -->\n</div>\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Noto+Sans:wght@300&display=swap\";@import\"https://fonts.googleapis.com/css2?family=Noto+Sans:wght@400&display=swap\";@import\"https://fonts.googleapis.com/css2?family=Noto+Sans:wght@500&display=swap\";lib-app-list{width:100%}lib-app-list .app-list-main-header{border-bottom:1px solid #E9EFFA}lib-app-list .app-list-main-header .beta{border:1px solid #5136F4;color:#0b8df4;text-transform:capitalize;border-radius:3px;font-size:10px;padding:0 3px;line-height:150%;transform:translate(6px,-3px);height:fit-content;width:fit-content}lib-app-list .app-list-main-subheader{margin-top:1.5px}lib-app-list .app-list-main-subheader .app-list-header{width:100%;background:#FCFDFF;z-index:99;height:3.3rem;border-bottom:1px solid #E9EFFA}lib-app-list .app-list-main-subheader .main-title{color:#3b3f4a;font-family:Noto Sans,sans-serif}lib-app-list .app-list-main-subheader .organization-mat-select .mat-form-field-wrapper{display:flex;align-items:center}lib-app-list .app-list{height:calc(100vh - 9.5rem);background-color:#f2f7ff;overflow-y:scroll}lib-app-list .app-list:has(.permission-overlay){overflow:hidden!important}lib-app-list .app-list .contact-img{height:30px;width:30px;margin-left:-32px}lib-app-list .app-list .contact-names{padding-left:13px;padding-top:1px}lib-app-list .app-list mat-selection-list{position:relative;margin-top:-20.5px;width:100%;height:80vh;overflow-y:scroll}lib-app-list .app-list ::ng-deep .mat-pseudo-checkbox{display:none!important}lib-app-list .app-list .app-grid{display:grid;grid-gap:6px;gap:6px;grid-row-gap:30px;row-gap:30px}@media only screen and (min-width: 2080px){lib-app-list .app-list .app-grid{grid-template-columns:repeat(7,minmax(0,1fr))}}@media only screen and (max-width: 2080px){lib-app-list .app-list .app-grid{grid-template-columns:repeat(6,minmax(0,1fr))}}@media only screen and (max-width: 1800px){lib-app-list .app-list .app-grid{grid-template-columns:repeat(5,minmax(0,1fr))}}@media only screen and (max-width: 1500px){lib-app-list .app-list .app-grid{grid-template-columns:repeat(4,minmax(0,1fr))}}@media only screen and (max-width: 1200px){lib-app-list .app-list .app-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}@media only screen and (max-width: 900px){lib-app-list .app-list .app-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media only screen and (max-width: 600px){lib-app-list .app-list .app-grid{grid-template-columns:repeat(1,minmax(0,1fr))}}lib-app-list .app-list .app-grid .card-outer-div .fuse-card-app{flex:0 0 100%;width:280px;height:200px;padding-top:5px!important;border-radius:19px;opacity:1;display:flex!important;margin-left:10px;flex-wrap:wrap;gap:10px;cursor:pointer;align-items:flex-start;padding-left:18px;padding-right:15px;position:relative;box-shadow:none;justify-content:start!important}lib-app-list .app-list .app-grid .card-outer-div .fuse-card-app .mat-icon{color:#64748b}lib-app-list .app-list .app-grid .card-outer-div .fuse-card-app .card-inner-div{width:70px;height:70px}lib-app-list .app-list .app-grid .card-outer-div .fuse-card-app .card-content{display:flex;flex-direction:column;justify-content:space-between;width:100%;height:95px}lib-app-list .app-list .app-grid .card-outer-div .fuse-card-app .app-info{display:flex;flex-direction:column;align-items:flex-start}lib-app-list .app-list .app-grid .card-outer-div .fuse-card-app .app-title-wrapper{max-height:3.6rem;overflow:hidden;display:block}lib-app-list .app-list .app-grid .card-outer-div .fuse-card-app .app_title{font-weight:500;margin-top:1px;max-width:100%;font-family:Noto Sans,sans-serif;font-size:20px;display:-webkit-box!important;justify-content:left!important;white-space:wrap;-webkit-line-clamp:2;-webkit-box-orient:vertical;color:#fff}lib-app-list .app-list .app-grid .card-outer-div .fuse-card-app .app_version{color:#dedede;font-size:11px!important;margin-top:2px}lib-app-list .app-list .app-grid .card-outer-div .fuse-card-app .cust-open{display:flex;justify-content:flex-end}lib-app-list .app-list .app-grid .card-outer-div .fuse-card-app .cust-open .open-button{background-color:#fff;width:61px;height:29px;border-radius:20px;color:#464646;font-weight:700;font-family:Noto Sans,sans-serif;font-size:11px;padding:5px 10px;cursor:pointer}lib-app-list .app-list .app-grid .card-outer-div .fuse-card-app .cust-open .customize{color:#dedede;font-size:12px!important;font-weight:700}lib-app-list .app-list .app-grid .card-outer-div .fuse-card-app .cust-open .flex{margin-left:auto}lib-app-list .app-list .app-grid .card-outer-div .fuse-card-app .dots-vertical-app{position:absolute;left:2.4rem;top:.8rem;margin-left:205px}lib-app-list .app-list .app-grid .card-outer-div .fuse-card-app .card .mat-icon-button .mat-button-focus-overlay{width:20px;margin-top:0;background-color:#fff!important;margin-left:9px}@media screen and (max-width: 768px){lib-app-list .app-list .app-grid .card-outer-div .fuse-card-app{padding-top:0!important}}@media only screen and (max-width: 320px){lib-app-list .app-list .card-body{grid-template-columns:repeat(2,minmax(0,1fr))!important}}@media only screen and (max-width: 600px){lib-app-list .app-list{height:calc(100vh - 13.3rem)}}lib-app-list .mat-form-field-ripple{background-color:transparent!important}lib-app-list .mat-form-field-underline{background-color:transparent!important}lib-app-list .mat-form-field-wrapper{padding-bottom:0!important}lib-app-list .mat-form-field-wrapper .mat-form-field-flex{padding:0!important}lib-app-list .mat-form-field-wrapper .mat-form-field-flex .mat-form-field-infix{padding:0!important;border:0!important;width:auto}@media only screen and (max-width: 425px){lib-app-list .mat-form-field-wrapper .mat-form-field-flex .mat-form-field-infix{min-width:100px;max-width:180px}}lib-app-list .app-list-footer{border-top:1px solid #8080802e}lib-app-list .app-list-footer span{font-family:Poppins,sans-serif}lib-app-list .no-app-created{height:calc(100vh - 150px)}.empty-app-icon{padding:7px 9px;font-weight:500;background:#dce3ed;border-radius:50%;color:#000;cursor:pointer;font-family:Noto Sans,sans-serif}.userEmptyIcon{border-radius:100%!important;min-width:35px!important;min-height:35px!important;max-height:35px!important;line-height:35px;background:#e6a478;margin-right:14px;text-align:center;color:#fff;font-family:Noto Sans,sans-serif}.organizationIcon{border-radius:55%!important;width:1.75rem;height:1.75rem;margin-right:.5rem;display:inline;object-fit:cover}.organizationIconprofile{border-radius:55%!important;width:2.5rem;height:2.5rem;margin-right:.875rem}.mat-menu-panel{background-color:#fff;box-shadow:#3c40434d 0 1px 2px,#3c404326 0 1px 3px 1px}.mat-select-panel:not([class*=mat-elevation-z]){background-color:#fff;box-shadow:0 2px 4px -1px #0003,0 4px 5px #00000024,0 1px 10px #0000001f}.app-list-mat-menu-item:hover{color:#fff;background-color:#6554c0}.user-name-title{font-size:14px;margin-left:5px;margin-top:1px;font-weight:400;color:#2e2f35;height:22px;display:inline-block;font-family:Roboto,sans-serif}.user-emailid{font-size:13px;font-weight:400;color:#8d8d8d;margin-left:5px;display:block;word-wrap:break-word}.organization-section{border-top:1px solid #ddd!important}.logout-title{font-family:Noto Sans,sans-serif}.logout-title:hover{background:transparent;color:#333!important;background-color:transparent!important;background-image:none!important}.mat-menu-item{font-family:Noto Sans,sans-serif}.mat-menu-item:hover{background:#f5f5f5!important}.organizationList .mat-option-text{display:flex!important;align-items:center}.org-name{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:85%;font-weight:500;font-size:1rem;padding-right:.4rem;font-family:Noto Sans,sans-serif}@media only screen and (max-width: 425px){.org-name{font-size:12px}}.org-icon-span{display:flex;align-items:center}.organization-list-overlay-panel{background:#FCFDFF;transform:translate(-15px) translateY(45px)!important;width:14%}.app-list-mat-menu-panel-class+.cdk-overlay-connected-position-bounding-box .mat-menu-content{min-width:250px}.app-list-mat-menu-panel-class+.cdk-overlay-connected-position-bounding-box .mat-divider{border-top-color:#e2e8f0}.user-info .user-name-title,.user-info .user-emailid{line-height:initial;font-weight:400;height:22px;display:inline-block;font-family:Roboto,sans-serif;word-wrap:break-word}.user-info .user-emailid{font-size:14px;color:#2e2f35;font-family:Noto Sans,sans-serif}.user-info .user-name-title{font-size:13px;color:#8d8d8d;font-family:Noto Sans,sans-serif}.user-info:hover{background-color:#6c52ed!important}.user-info:hover .user-emailid,.user-info:hover .user-name-title{color:#fff!important}.user-logout-btn .mat-icon,.user-logout-btn .logout-lable{font-size:16px;font-weight:500}.user-logout-btn:hover .mat-icon,.user-logout-btn:hover .logout-lable{color:#fff!important}.user-logout-btn .mat-icon,.user-logout-btn .logout-label{font-size:16px;font-weight:500;font-family:Noto Sans,sans-serif}.user-logout-btn:hover{background-color:#6c52ed!important}.user-logout-btn:hover .mat-icon,.user-logout-btn:hover .logout-label{color:#fff!important}.card-outer-div .fuse-card-app .dots-vertical-app .mat-icon{width:1.125rem!important;opacity:1;min-height:1.125rem!important;max-height:1.125rem!important}.fuse-card-app .dots-vertical-app{display:none}.fuse-card-app:hover .dots-vertical-app{display:block}.appHover{display:block!important}.fuse-card-app:hover .qr-icon,.appHover{margin-right:1.3rem}.fuse-card-app:hover,.fuse-card-app:focus{box-shadow:0 3px 8px 1px #00000026!important;background-color:#fff!important}.axo_notifiction-2{height:30px!important;width:30px!important}.mat-tooltip{background-color:#333;color:#fff;border-radius:4px;padding:8px 10px}.switch-span{color:#929292;font-family:Noto Sans,sans-serif;font-size:16px;font-style:normal;font-weight:600;line-height:normal}.mat-select-arrow{display:inline-block}.dropdown-arrow{padding-top:8.5px!important;padding:8px}.permission-overlay{position:absolute;top:0;left:0;background:rgba(0,0,0,.75);display:flex;justify-content:center;align-items:center;height:100%;width:100%;z-index:999;color:#fff;font-size:18px}\n"] }]
1157
- }], function () { return [{ type: i1.AuthService }, { type: i0.ChangeDetectorRef }, { type: i2.UserService }, { type: i3.CommonLibConfigurationService }, { type: i4.MyAppListService }, { type: i5.Router }, { type: i6.AxoSnackBarService }, { type: i7.MatDialog }, { type: i8.FlattenService }, { type: i9.HttpClient }, { type: i9.HttpClient }, { type: i10.CookieService }, { type: i5.ActivatedRoute }, { type: i5.Router }, { type: i11.LoggingService }, { type: i12.CommonService }, { type: i13.DataViewFiltersService }, { type: i14.SubscribedPlanName }, { type: i15.StripeService }]; }, { appList: [{
1162
+ }], function () { return [{ type: i1.AuthService }, { type: i0.ChangeDetectorRef }, { type: i2.UserService }, { type: i3.CommonLibConfigurationService }, { type: i4.MyAppListService }, { type: i5.Router }, { type: i6.AxoSnackBarService }, { type: i7.MatDialog }, { type: i8.FlattenService }, { type: i9.HttpClient }, { type: i9.HttpClient }, { type: i10.CookieService }, { type: i5.ActivatedRoute }, { type: i5.Router }, { type: i11.LoggingService }, { type: i12.CommonService }, { type: i13.DataViewFiltersService }, { type: i14.SubscribedPlanName }, { type: i15.StripeService }]; }, { currentOrg: [{
1163
+ type: Input
1164
+ }], appList: [{
1158
1165
  type: Input
1159
1166
  }], baseUrl: [{
1160
1167
  type: Input
@@ -1183,4 +1190,4 @@ AppListComponent.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: AppList
1183
1190
  }], updateListEvent: [{
1184
1191
  type: Output
1185
1192
  }] }); })();
1186
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2F4LWNvbW1vbi11aS1saWIvc3JjL2xpYi9hcHAtbGlzdC9hcHAtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvYXgtY29tbW9uLXVpLWxpYi9zcmMvbGliL2FwcC1saXN0L2FwcC1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGlDQUFpQztBQUNqQyx1REFBdUQ7QUFDdkQsMEJBQTBCO0FBQzFCLHFFQUFxRTtBQUVyRSxPQUFPLEVBQUUsU0FBUyxFQUFVLGlCQUFpQixFQUFhLEtBQUssRUFBRSxNQUFNLEVBQWlCLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0osT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDN0QsT0FBTyxFQUFFLE1BQU0sRUFBcUIsTUFBTSxpQkFBaUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFPLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzdGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFHeEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDekQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JE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ZUFBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7Y0FDQSxTQUFTOzJCQUNFLGNBQWMsaUJBR1QsaUJBQWlCLENBQUMsSUFBSSxhQUMxQjtvQkFDVDt3QkFDRSxPQUFPLEVBQUUsaUJBQWlCO3dCQUMxQixRQUFRLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxpQ0FBaUMsRUFBRTtxQkFDbkU7aUJBQ0Y7K2tCQUdRLE9BQU87a0JBQWYsS0FBSztZQUNHLE9BQU87a0JBQWYsS0FBSztZQUNHLGdCQUFnQjtrQkFBeEIsS0FBSztZQUNHLG9CQUFvQjtrQkFBNUIsS0FBSztZQUNHLElBQUk7a0JBQVosS0FBSztZQUNHLFFBQVE7a0JBQWhCLEtBQUs7WUFDRyxnQkFBZ0I7a0JBQXhCLEtBQUs7WUFDRyxVQUFVO2tCQUFsQixLQUFLO1lBQ0csY0FBYztrQkFBdEIsS0FBSztZQUNHLGFBQWE7a0JBQXJCLEtBQUs7WUFDRyxVQUFVO2tCQUFsQixLQUFLO1lBQ0ksa0JBQWtCO2tCQUEzQixNQUFNO1lBQ0csWUFBWTtrQkFBckIsTUFBTTtZQUNHLGVBQWU7a0JBQXhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBhcnJvdy1wYXJlbnMgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9tZW1iZXItb3JkZXJpbmcgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJhZGl4ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtZnVuY3Rpb24tcmV0dXJuLXR5cGUgKi9cblxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIFZpZXdFbmNhcHN1bGF0aW9uLCBPbkRlc3Ryb3ksIElucHV0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIEV2ZW50RW1pdHRlciwgQ2hhbmdlRGV0ZWN0b3JSZWYsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1BVF9TRUxFQ1RfQ09ORklHIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcbmltcG9ydCB7IFJvdXRlciAsICBOYXZpZ2F0aW9uRXh0cmFzfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgU3ViamVjdCwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQXhvU25hY2tCYXJTZXJ2aWNlLCBBeG9TbmFja0JhclR5cGUgfSBmcm9tICcuLi9heG8tc25hY2stYmFyL2F4by1zbmFjay1iYXIuc2VydmljZSc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uL2NvcmUvYXV0aC9hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuLi9jb3JlL3VzZXIvdXNlci5zZXJ2aWNlJztcbmltcG9ydCB7IFVzZXIgfSBmcm9tICcuLi9jb3JlL3VzZXIvdXNlci50eXBlcyc7XG5pbXBvcnQgeyBBcHBMaXN0RHRvIH0gZnJvbSAnLi9hcHAtbGlzdC1kdG8nO1xuaW1wb3J0IHsgTXlBcHBMaXN0U2VydmljZSB9IGZyb20gJy4vbXktYXBwLWxpc3Quc2VydmljZSc7XG5pbXBvcnQgeyBPcmdhbml6YXRpb25MaXN0RHRvIH0gZnJvbSAnLi9vcmdhbml6YXRpb24tbGlzdC1kdG8nO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IEZsYXR0ZW5TZXJ2aWNlIH0gZnJvbSAnLi4vZmxhdHRlbi1tb2R1bGUvZmxhdHRlbi5zZXJ2aWNlJztcbmltcG9ydCB7IElGbGF0dGVuIH0gZnJvbSAnLi4vY29tbW9uLXV0aWxzL2lGbGF0dGVuJztcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgQ29va2llU2VydmljZSB9IGZyb20gJ25neC1jb29raWUtc2VydmljZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBFbmxpZ2h0ZW5MaWJNb2R1bGUgfSBmcm9tICcuLi9lbmxpZ2h0ZW4tbGliL2VubGlnaHRlbi1saWIubW9kdWxlJztcbmltcG9ydCB7IFFyZGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vcXJkaWFsb2cvcXJkaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IExvZ2dpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbG9nZ2luZy5zZXJ2aWNlJztcbmltcG9ydCB7IExvYWRpbmdEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi9sb2FkaW5nLWRpYWxvZy9sb2FkaW5nLWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuaW1wb3J0IHsgTG9hZGluZ0FwcGluc3RhbGxDb21wb25lbnQgfSBmcm9tICcuLi9sb2FkaW5nLWFwcGluc3RhbGwvbG9hZGluZy1hcHBpbnN0YWxsLmNvbXBvbmVudCc7IFxuaW1wb3J0IHsgQ29tbW9uU2VydmljZSB9IGZyb20gJy4uL2NvbW1vbi5zZXJ2aWNlJztcbmltcG9ydCB7IFN1Y2Nlc3NEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi9zdWNjZXNzLWRpYWxvZy9zdWNjZXNzLWRpYWxvZy5jb21wb25lbnQnOyBcbmltcG9ydCB7IHRha2UsICB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGZvcmtKb2luLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbG9jYWxlIH0gZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IEFwcENyZWF0ZURpYWxvZ0NvbXBvbmVudENvbXBvbmVudCB9IGZyb20gJy4uL2FwcC1jcmVhdGUtZGlhbG9nLWNvbXBvbmVudC9hcHAtY3JlYXRlLWRpYWxvZy1jb21wb25lbnQuY29tcG9uZW50JzsgXG5cbi8vaW1wb3J0IHsgQ29uc29sZSB9IGZyb20gJ2NvbnNvbGUnO1xuaW1wb3J0IHsgQ29tbW9uTGliQ29uZmlndXJhdGlvblNlcnZpY2UgfSBmcm9tICcuLi9jb21tb24tbGliLWNvbmZpZ3VyYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBEYXRhVmlld0ZpbHRlcnNTZXJ2aWNlIH0gZnJvbSAnLi4vZGF0YS12aWV3LWxpYi9kYXRhLXZpZXctZmlsdGVycy9kYXRhLXZpZXctZmlsdGVycy5zZXJ2aWNlJztcbmltcG9ydCB7IENvbmZpcm1hdGlvbk1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vc2hhcmVkL2NvbWZpcm1hdGlvbi1tb2RhbC9jb25maXJtYXRpb24tbW9kYWwuY29tcG9uZW50JztcbmltcG9ydCB7IFN1YnNjcmliZWRQbGFuTmFtZSB9IGZyb20gJy4uL3N1YnNjcmliZWRQbGFuTmFtZS5zZXJ2aWNlJztcbmltcG9ydCB7IFN0cmlwZVNlcnZpY2UgfSBmcm9tICcuLi9zdHJpcGUuc2VydmljZSc7XG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1hcHAtbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9hcHAtbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2FwcC1saXN0LmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE1BVF9TRUxFQ1RfQ09ORklHLFxuICAgICAgdXNlVmFsdWU6IHsgb3ZlcmxheVBhbmVsQ2xhc3M6ICdvcmdhbml6YXRpb24tbGlzdC1vdmVybGF5LXBhbmVsJyB9LFxuICAgIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEFwcExpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIGFwcExpc3Q6IEFycmF5PEFwcExpc3REdG8+O1xuICBASW5wdXQoKSBiYXNlVXJsOiBzdHJpbmc7XG4gIEBJbnB1dCgpIG9yZ2FuaXphdGlvbkxpc3Q6IEFycmF5PE9yZ2FuaXphdGlvbkxpc3REdG8+ID0gW107XG4gIEBJbnB1dCgpIHNlbGVjdGVkT3JnYW5pemF0aW9uOiBPcmdhbml6YXRpb25MaXN0RHRvO1xuICBASW5wdXQoKSB1c2VyOiBVc2VyO1xuICBASW5wdXQoKSBsaXN0VHlwZTogc3RyaW5nO1xuICBASW5wdXQoKSBzaG93Q3JlYXRlQnV0dG9uOmJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc2hvd1FSSWNvbjpib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNob3dEb3RzT3B0aW9uOmJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc2hvd0N1c3RvbWl6ZTpib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNob3dBZGRCdG46Ym9vbGVhbiA9IGZhbHNlO1xuICBAT3V0cHV0KCkgc3dpdGNoQWNjb3VudEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBvcGVuQXBwRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHVwZGF0ZUxpc3RFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAvLyB1c2VyOiBVc2VyO1xuICBpc0FwcENoYW5nZWRBZnRlclB1Ymxpc2g6IGJvb2xlYW4gPSBmYWxzZTtcbiAgdXNlck5hbWU6IHN0cmluZztcbiAgYXBwVmVyc2lvbklkOiBudW1iZXI7XG4gIHVzZXJFbWFpbDogc3RyaW5nO1xuICBmdWxsVmVyc2lvbjogc3RyaW5nO1xuICBmdWxsVmVyc2lvbnM6IHN0cmluZ1tdID0gW107XG4gIHVzZXJJbWFnZTogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmcgPSAnJztcbiAgbWlub3JWZXJzaW9uOiBzdHJpbmcgPSAnJztcbiAgYXBwSWQ6IHN0cmluZyA9Jyc7XG4gIGJ1aWxkZXJVcmw6IHN0cmluZztcbiAgb3BlblBvcHVwTWVudTogbnVtYmVyO1xuICBncmFkaWVudHMgPSBbXG4gICAgJ3JhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgODAlIDIwJSwgI0RCNkQ4MSwgI0JGNDU4MSknLFxuICAgICdyYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDgwJSAyMCUsICM0NDkxRDksICM0NTU5QkYpJyxcbiAgICAncmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA4MCUgMjAlLCAjRTdBNzc5LCAjQUE1NTI1KScsXG4gICAgJ3JhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgODAlIDIwJSwgIzQ0RDk1MywgIzBEOTIxMiknXG4gIF07XG4gIGN1cnJlbnRVcmwgPSBkb2N1bWVudC5VUkw7XG4gIGJhc2VVc3JsID0gZG9jdW1lbnQuYmFzZVVSSTtcbiAgcmVnZXggPSAvXFwvYXBwc1xcLyhcXGQrKVxcLyhcXHcrKS87XG4gIG1hdGNoID0gdGhpcy5jdXJyZW50VXJsLm1hdGNoKHRoaXMucmVnZXgpO1xuXG4gIGRhdGEgPSB7fTtcblxuICAvKlxuICAgICAqIFN1YmplY3Qgb2JqZWN0IHdoaWNoIGhlbHBzIHVuc3Vic2NyaWJlIGFsbCB0aGUgc3Vic2NyaWJlZCBvYmplY3RzIGluIHRoZSBjb21wb25lbnRcbiAgICAgKi9cbiAgcHJpdmF0ZSBfdW5zdWJzY3JpYmVBbGw6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0PGFueT4oKTtcbiAgb3JnYW5pemF0b25JZDogbnVtYmVyO1xuICB1c2VyUGVybWlzc2lvbnM6IHN0cmluZ1tdID0gW107IC8vIFZhcmlhYmxlIHRvIGhvbGQgdXNlciBwZXJtaXNzaW9uc1xuICBwZXJtaXNzaW9uczogYW55O1xuICBoYXNPcmdVc2VyQWNjZXNzOiBib29sZWFuO1xuICBjdXJyZW50QXBwVmVyc2lvbklkOiBzdHJpbmc7XG4gIHNob3dXZWJQb3J0YWxBY2Nlc3NPdmVybGF5OiBib29sZWFuID0gZmFsc2U7IC8vIEZsYWcgdG8gY29udHJvbCBvdmVybGF5IGRpc3BsYXlcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9hdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgX3VzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcbiAgICBwcml2YXRlIGNvbW1vbkxpYkNvbmZpZzogQ29tbW9uTGliQ29uZmlndXJhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfbXBBcHBMaXN0U2VydmljZTogTXlBcHBMaXN0U2VydmljZSxcbiAgICBwcml2YXRlIF9yb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIF9heG9TbmFja0JhcjogQXhvU25hY2tCYXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csXG4gICAgcHJpdmF0ZSBfZmxhdHRlblNlcnZpY2U6IEZsYXR0ZW5TZXJ2aWNlLFxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCwgLy8gSW5qZWN0IEh0dHBDbGllbnRcbiAgICBwcml2YXRlIF9odHRwQ2xpZW50OiBIdHRwQ2xpZW50LFxuICAgIHByaXZhdGUgY29va2llU2VydmljZTogQ29va2llU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgX2xvZ2dpbmdTZXJ2aWNlIDogTG9nZ2luZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBfY29tbW9uU2VydmljZTpDb21tb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgX2RhdGFWaWV3RmlsdGVyc1NlcnZpY2U6IERhdGFWaWV3RmlsdGVyc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBfc3Vic2NyaWJlZFBsYW5OYW1lOiBTdWJzY3JpYmVkUGxhbk5hbWUsXG4gICAgcHJpdmF0ZSBzdHJpcGVTZXJ2aWNlOiBTdHJpcGVTZXJ2aWNlLFxuXG4gICAgXG4gICkgeyB9XG4gIC8qKlxuICAgKiBHZXR0ZXIgZm9yIGN1cnJlbnQgeWVhclxuICAgKi9cbiAgZ2V0IGN1cnJlbnRZZWFyKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTtcbiAgfVxuXG4gIHNldE9wZW5Qb3B1cE1lbnUoYXBwSWQpIHtcbiAgICB0aGlzLm9wZW5Qb3B1cE1lbnUgPSBhcHBJZDtcbiAgICBjb25zdCBvdmVybGF5ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmNkay1vdmVybGF5LWNvbnRhaW5lcicpO1xuICAgIG92ZXJsYXkuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICB0aGlzLm9wZW5Qb3B1cE1lbnUgPSB1bmRlZmluZWQ7XG4gICAgfSk7XG4gIH1cblxuICBvcGVuUVJDb2RlRGlhbG9nKCk6IHZvaWQge1xuXG4gICAgY29uc3QgcXJEaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFFyZGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICB3aWR0aDogJzI1MHB4JywgLy8gQWRqdXN0IHdpZHRoIGFzIG5lZWRlZFxuICAgIH0pO1xuICB9XG5cbiAgbmF2aWdhdGV0b09yZ2FuaWF0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IHVybE1hcDogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICAgICdsb2NhbGhvc3Q6NDIwMCc6ICdodHRwczovL2xvY2FsaG9zdDo0MjAwLycsXG4gICAgICAnbG9jYWxob3N0OjQyMDEnOiAnaHR0cHM6Ly9sb2NhbGhvc3Q6NDIwMC8nLFxuICAgICAgJ2FuZHJvbWVkYS1idWlsZGVyLXFhLmF4b25hdG9yLmNvbSc6ICdodHRwczovL2FuZHJvbWVkYS1idWlsZGVyLXFhLmF4b25hdG9yLmNvbS8nLFxuICAgICAgJ2FuZHJvbWVkYS1jb250YWluZXItcWEuYXhvbmF0b3IuY29tJzogJ2h0dHBzOi8vYW5kcm9tZWRhLWJ1aWxkZXItcWEuYXhvbmF0b3IuY29tLycsXG4gICAgICAnYnVpbGRlci5heG9uYXRvci5jb20nOiAnaHR0cHM6Ly9idWlsZGVyLmF4b25hdG9yLmNvbS8nLFxuICAgICAgJ3dlYi5heG9uYXRvci5jb20nOiAnaHR0cHM6Ly9idWlsZGVyLmF4b25hdG9yLmNvbS8nXG4gICAgfTtcbiAgICBjb25zdCB1cmw6IHN0cmluZyA9IHVybE1hcFt3aW5kb3cubG9jYXRpb24uaG9zdF0gfHwgJyc7XG4gICAgaWYgKHRoaXMubWF0Y2gpIHtcbiAgICAgIGNvbnN0IHVzZXJMaXN0VXJsID0gYGFwcHMvJHt0aGlzLm1hdGNoWzFdfS91c2Vyc2A7IC8vIGR5bmFtaWMgcGFydCBiYXNlZCBvbiBtYXRjaFxuICAgICAgd2luZG93Lm9wZW4odXJsICsgdXNlckxpc3RVcmwsICdfc2VsZicpOyAvLyBvcGVuIGR5bmFtaWMgVVJMXG4gICAgfSBlbHNlIHtcbiAgICAgIHdpbmRvdy5vcGVuKHVybCArICdvcmdhbml6YXRpb24nLCAnX3NlbGYnKTsgLy8gZmFsbGJhY2sgdG8gb3JnYW5pemF0aW9uIHJvdXRlXG4gICAgfVxuICB9ICBcblxuICBuYXZpZ2F0ZXRvT3JnYW5pYXRpb25TZXR0aW5ncygpOiB2b2lkIHtcbiAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGVCeVVybCgnb3JnYW5pemF0aW9uLXNldHRpbmdzJyk7XG4gIH1cbiAgXG5cblxuXG4gIC8vIGRlbGV0ZUFwcChhcHBJZDogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgLy8gICB0aGlzLl9tcEFwcExpc3RTZXJ2aWNlLmRlbGV0ZUFwcChhcHBJZCwgdmVyc2lvbilcbiAgLy8gICAgIC5waXBlKFxuICAvLyAgICAgICB0YWtlVW50aWwodGhpcy5fdW5zdWJzY3JpYmVBbGwpLFxuICAvLyAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAvLyAgICAgICAgIGNvbnNvbGUubG9nKCdFcnJvciBvY2N1cnJlZCB3aGlsZSBkZWxldGluZyBhcHA6JywgZXJyb3IpO1xuICAvLyAgICAgICAgIC8vIHRoaXMuX3NuYWNrYmFyU2V2aWNlLm9wZW5TbmFja0JhcignRXJyb3Igb2NjdXJyZWQgd2hpbGUgZGVsZXRpbmcgYXBwLicsIEF4b1NuYWNrQmFyVHlwZS5lcnJvcik7XG4gIC8vICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3IpO1xuICAvLyAgICAgICB9KVxuICAvLyAgICAgKVxuICAvLyAgICAgLnN1YnNjcmliZShcbiAgLy8gICAgICAgLy8gcmVzcG9uc2UgPT4gdGhpcy5oYW5kbGVEZWxldGVTdWNjZXNzKHJlc3BvbnNlKSxcbiAgLy8gICAgICAgLy8gZXJyb3IgPT4gdGhpcy5oYW5kbGVEZWxldGVFcnJvcihlcnJvcilcbiAgLy8gICAgICk7XG4gIC8vIH1cblxuICAvLyBBc3N1bWluZyBfZGVsZXRlU2VydmljZSBoYXMgYSBkZWxldGVBcHAgbWV0aG9kIHRoYXQgaGFuZGxlcyBhcHAgZGVsZXRpb25cbiAgLy8gQWxzbywgYXNzdW1pbmcgaGFuZGxlRGVsZXRlU3VjY2VzcyBhbmQgaGFuZGxlRGVsZXRlRXJyb3IgYXJlIG1ldGhvZHMgdG8gaGFuZGxlIHN1Y2Nlc3MgYW5kIGVycm9yIHNjZW5hcmlvc1xuXG4gIHBhZFplcm8odmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdmFyIHBhZGRpbmc9Jyc7XG4gICAgbGV0IGxlbmd0aD12YWx1ZS50b1N0cmluZygpLmxlbmd0aDtcbiAgICBpZihsZW5ndGg9PTEpXG4gICAge1xuICAgICAgcGFkZGluZz0nMDAnK3ZhbHVlXG4gICAgfVxuICAgIGVsc2UgaWYobGVuZ3RoPT0yKVxuICAgIHtcbiAgICAgIHBhZGRpbmc9JzAnK3ZhbHVlXG4gICAgfVxuICAgIGVsc2UgaWYobGVuZ3RoPT0zKVxuICAgIHtcbiAgICAgIHBhZGRpbmc9dmFsdWVcbiAgICB9XG4gICAgcmV0dXJuIHBhZGRpbmc7XG4gIH1cblxuICBwdWJsaWMgaGFzQXBwQnVpbGRlclBlcm1pc3Npb246IGJvb2xlYW4gPSBmYWxzZTtcblxuICBnZXRVc2VyRGV0YWlscygpOiB2b2lkIHtcbiAgICB0aGlzLl9jb21tb25TZXJ2aWNlLmdldFVzZXJEZXRhaWwoKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl91bnN1YnNjcmliZUFsbCksXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgdXNlciBkZXRhaWxzOicsIGVycm9yKTtcbiAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnJvcik7XG4gICAgICAgIH0pLFxuICAgICAgICB0YXAoKHVzZXJSZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgdXNlclBlcm1pc3Npb25zID0gdXNlclJlc3BvbnNlPy51ZD8ucGVybWlzc2lvbnMgfHwgW107XG4gICAgICAgICAgLy8gQ2hlY2sgaWYgXCJBUFBfQlVJTERFUlwiIHBlcm1pc3Npb24gZXhpc3RzXG4gICAgICAgICAgdGhpcy5oYXNBcHBCdWlsZGVyUGVybWlzc2lvbiA9IHVzZXJQZXJtaXNzaW9ucy5pbmNsdWRlcyhcIkFQUF9CVUlMREVSXCIpICYmIHVzZXJQZXJtaXNzaW9ucy5pbmNsdWRlcyhcIkFDQ0VTU19XRUJfUE9SVEFMXCIpO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBzdWJzY3JpcHRpb25PcHRpb25zID0ge1xuICAgICAgICAgIGFjY291bnRJZDogcmVzcG9uc2UudWQubGFzdHVzZWRfYWNjb3VudFxuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgdGhpcy5zdHJpcGVTZXJ2aWNlLmdldFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb25PcHRpb25zKS5zdWJzY3JpYmUoXG4gICAgICAgICAgKHN1YnNjcmlwdGlvblJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnU3Vic2NyaXB0aW9uIGRldGFpbHM6Jywgc3Vic2NyaXB0aW9uUmVzcG9uc2UpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAoc3Vic2NyaXB0aW9uUmVzcG9uc2UgJiYgc3Vic2NyaXB0aW9uUmVzcG9uc2UubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBjb25zdCBzdWJzY3JpcHRpb25JbmZvID0gc3Vic2NyaXB0aW9uUmVzcG9uc2VbMF07XG4gICAgICAgICAgICAgIGNvbnN0IHByb2R1Y3RPcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIFByb2R1Y3RJZDogc3Vic2NyaXB0aW9uSW5mby5pdGVtc1swXS5wcm9kdWN0SWRcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIHRoaXMuc3RyaXBlU2VydmljZS5nZXRQcm9kdWN0RGV0YWlscyhwcm9kdWN0T3B0aW9ucykuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgIChwcm9kdWN0UmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3N1YnNjcmliZWRQbGFuTmFtZS5zdWJzY3JpYmVkUGxhbk5hbWUgPSBwcm9kdWN0UmVzcG9uc2UubmFtZTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgcHJvZHVjdCBkZXRhaWxzOicsIGVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIHN1YnNjcmlwdGlvbiBkZXRhaWxzOicsIGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgfVxuICBcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmdldFVzZXJQZXJtaXNzaW9ucygpO1xuICAgXG4gICAgLy8gdGhpcy5jdXJyZW50QXBwVmVyc2lvbklkID0gd2luZG93LmxvY2F0aW9uLmhyZWYuc3BsaXQoXCIvXCIpWzRdO1xuICAgIC8vIHRoaXMuX25hdmlnYXRpb24udXBkYXRlQ2xhc3NpY05hdmlnYXRpb25Sb3V0ZXModGhpcy5jdXJyZW50QXBwVmVyc2lvbklkLnRvU3RyaW5nKCkpO1xuXG4gICAgLy8gRmV0Y2ggdXNlciBkZXRhaWxzXG4gICAgXG4gICAgXG4gICAgaWYgKHRoaXMudXNlcikge1xuICAgICAgdGhpcy51c2VyRW1haWwgPSB0aGlzLnVzZXIuZW1haWw7XG4gICAgICB0aGlzLnVzZXJOYW1lID0gdGhpcy51c2VyWydmbmFtZSddICsgJyAnICsgdGhpcy51c2VyWydsbmFtZSddO1xuICAgICAgdGhpcy51c2VySW1hZ2UgPSB0aGlzLnVzZXJbJ3VpbWcnXTtcbiAgICB9XG5cbiAgICB0aGlzLmdldFVzZXJEZXRhaWxzKCk7XG4gICAgXG4gIC8vQVhFLUk2Mzc2XG4gIC8vSXNzdWUgOiBQYXJhbWV0ZXJpemVkIHVybCB3YXMgbm90IG1haW50YWluIChhcHAgaW5zdGFsbGF0aW9uKSwgYXV0aG9yaXphdGlvbiBjYWxsIHNvbWVob3cgbG9zZXMgdGhlIHBhcmFtZXRlcnNcbiAgLy91cmwgc3RvcmFnZSBpcyBtYWludGFpbmVkIGJ5IHRoZSBuYW1lIFwiYXBwbmFtZVwiXG4gIC8vSXQgaXMgc2V0IGluIGF1dGgucmVzb2x2ZXIgYW5kIHJlbW92ZWQgaGVyZVxuICAvL2lmIGFwcG5hbWUgZXhpc3QgaW4gc2Vzc2lvbiB1c2VkIHRoZSBzdG9yZWQgbmFtZSwgaWYgbm90IHVzZWQgdGhlIHZhbHVlIGZyb20gdGhlIHVybFxuICAvL1xudmFyIGFwcE5hbWVjaGVjaz1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYXBwbmFtZScpO1xuLy9jb25zb2xlLmxvZyhcIiExMTNcIik7XG4vLyBpZihhcHBOYW1lY2hlY2shPT1udWxsKVxuLy8ge1xuLy8gICBpZihhcHBOYW1lY2hlY2s9PVwiL2FwcHNcIilcbi8vICAge1xuLy8gICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFwiYXBwbmFtZVwiKTtcbi8vICAgfVxuLy8gfVxuLy8gYXBwTmFtZWNoZWNrPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCdhcHBuYW1lJyk7XG4vL2NvbnNvbGUubG9nKFwiITExM1wiKTtcbi8vY29uc29sZS5sb2coYXBwTmFtZWNoZWNrKVxuICAvL1xudmFyIGFwcE5hbWVjaGVjaz1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYXBwbmFtZScpO1xudmFyIGFwcFB1Ymxpc2hTdGF0dXM9bG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3B1Ymxpc2hzdGF0dXMnKTtcbi8vY29uc29sZS5sb2coXCIhMTEzXCIpO1xuLy8gaWYoYXBwTmFtZWNoZWNrIT09bnVsbClcbi8vIHtcbi8vICAgaWYoYXBwTmFtZWNoZWNrPT1cIi9hcHBzXCIpXG4vLyAgIHtcbi8vICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcImFwcG5hbWVcIik7XG4vLyAgIH1cbi8vIH1cbi8vIGFwcE5hbWVjaGVjaz1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYXBwbmFtZScpO1xuLy9jb25zb2xlLmxvZyhcIiExMTNcIik7XG4vL2NvbnNvbGUubG9nKGFwcE5hbWVjaGVjaylcbiAgbGV0IGFwcG5hbWU6c3RyaW5nO1xuICBsZXQgY2F0ZWdvcnk6c3RyaW5nO1xuXG4vLyBjb25zdCB1cmxQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO1xuLy8gY29uc3QgYXBwTmFtZUNoZWNrID0gdXJsUGFyYW1zLmdldCgnYXBwbmFtZScpO1xuLy8gY29uc29sZS5sb2coYXBwTmFtZUNoZWNrKVxuLy8gY29uc3QgY2F0ZWdvcnkgPSB1cmxQYXJhbXMuZ2V0KCdjYXRlZ29yeScpO1xuLy8gY29uc29sZS5sb2coY2F0ZWdvcnkpaVxuXG5cbmxldCBJbnN0YWxsQXBwTmFtZTpzdHJpbmc7XG5JbnN0YWxsQXBwTmFtZT1sb2NhbFN0b3JhZ2UuZ2V0SXRlbShcIkluc3RhbGxlZEFwcE5hbWVcIik7XG5pZihJbnN0YWxsQXBwTmFtZSE9bnVsbCl7XG5jb25zdCBjYXBpdGFsaXplZEFwcE5hbWU6IHN0cmluZyA9IHRoaXMuY2FwaXRhbGl6ZVdvcmRzKEluc3RhbGxBcHBOYW1lLnJlcGxhY2UoLy0vZywgJyAnKSk7XG50aGlzLmNoZWNrQW5kUHVibGlzaEFwcChjYXBpdGFsaXplZEFwcE5hbWUpO1xubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJJbnN0YWxsZWRBcHBOYW1lXCIpO1xufVxuaWYgKGFwcE5hbWVjaGVjayAhPT0gbnVsbCkge1xuICAvL1xuICBjb25zdCB1cmxQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKGFwcE5hbWVjaGVjay5zcGxpdCgnPycpWzFdKTtcbiAgY29uc3QgYXBwTmFtZVRlbXAgPSB1cmxQYXJhbXMuZ2V0KCdhcHBuYW1lJyk7XG4gIGNvbnN0IGNhdGVnb3J5VGVtcCA9IHVybFBhcmFtcy5nZXQoJ2NhdGVnb3J5Jyk7XG4gIC8vY29uc3QgYXBwTmFtZVRlbXAgPSBhcHBOYW1lY2hlY2suc3BsaXQoJz0nKVsxXS5zcGxpdCgnJicpWzBdOyAvLyBFeHRyYWN0aW5nIGFwcG5hbWUgdmFsdWUgZnJvbSBVUkwgcGFyYW1ldGVyXG4gIC8vbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJJbnN0YWxsZWRBcHBOYW1lXCIsYXBwTmFtZVRlbXApXG4vLyBFeHRyYWN0aW5nIGNhdGVnb3J5IHZhbHVlIGZyb20gVVJMIHBhcmFtZXRlclxuIC8vIGNvbnN0IGNhdGVnb3J5VGVtcCA9IGFwcE5hbWVjaGVjay5zcGxpdCgnY2F0ZWdvcnk9JylbMV07XG4gIC8vXG4gIGlmIChhcHBOYW1lVGVtcCkge1xuICAgIHRoaXMuaW5zdGFsbEFwcChhcHBOYW1lVGVtcCwgY2F0ZWdvcnlUZW1wKS50aGVuKCgpID0+IHtcbiAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFwiYXBwbmFtZVwiKTtcbiAgICB9KS5jYXRjaChlcnJvciA9PiB7XG4gICAgICAvLyBIYW5kbGUgZXJyb3IgaWYgaW5zdGFsbEFwcCBmYWlsc1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW5zdGFsbGluZyBhcHA6JywgZXJyb3IpO1xuICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJhcHBuYW1lXCIpO1xuICAgIH0pO1xuICB9XG5cbi8vIGxldCBhcHBOYW1lOiBzdHJpbmc7IFxuLy8gaWYoYXBwTmFtZWNoZWNrIT09bnVsbCl7XG4vLyAgIGFwcE5hbWU9YXBwTmFtZWNoZWNrLnNwbGl0KCc9JylbMV0uc3BsaXQoJyUyRicpWzBdO1xuLy8gICBpZiAoYXBwTmFtZSkge1xuLy8gICAgIHRoaXMuaW5zdGFsbEFwcChhcHBOYW1lLCkudGhlbigoKSA9PiB7XG4vLyAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcImFwcG5hbWVcIik7XG4gICAgICBcbi8vICAgICB9KVxuLy8gICAgIC5jYXRjaChlcnJvciA9PiB7XG4vLyAgICAgICAvLyBIYW5kbGUgZXJyb3IgaWYgaW5zdGFsbEFwcCBmYWlsc1xuLy8gICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW5zdGFsbGluZyBhcHA6JywgZXJyb3IpO1xuLy8gICAgIH0pO1xuLy8gICB9XG4gIFxuICBcbiAgfVxuICBlbHNle1xuICAgIC8vIFZhcmlhYmxlIHRvIHN0b3JlIGFwcG5hbWVcblxuICAgIFxuICAgIHRoaXMucm91dGUucXVlcnlQYXJhbXMucGlwZShcbiAgICAgIHRha2VVbnRpbCh0aGlzLl91bnN1YnNjcmliZUFsbClcbiAgICApLnN1YnNjcmliZShwYXJhbXMgPT4ge1xuICAgICAgYXBwbmFtZSA9IHBhcmFtc1snYXBwbmFtZSddO1xuICAgICAgLy9sb2NhbFN0b3JhZ2Uuc2V0SXRlbShcIkluc3RhbGxlZEFwcE5hbWVcIixhcHBuYW1lKTtcbiAgICAgIGNvbnNvbGUubG9nKGFwcG5hbWUpXG4gICAgICBjYXRlZ29yeSA9IHBhcmFtc1snY2F0ZWdvcnknXTtcbiAgICAgIGNvbnNvbGUubG9nKGNhdGVnb3J5KVxuICAgIFxuICAgICAgaWYgKGFwcG5hbWUpIHtcbiAgICAgICAgLy8gU3BsaXQgdGhlIGFwcG5hbWUgYXQgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgJy8nXG4gICAgICAgIGNvbnN0IGFwcE5hbWVQYXJ0cyA9IGFwcG5hbWUuc3BsaXQoJy8nLCAxKTtcbiAgICAgICAgY29uc3QgYXBwTmFtZSA9IGFwcE5hbWVQYXJ0c1swXTsgLy8gU3RvcmUgYXBwbmFtZVxuICAgICAgICAvL2NvbnN0IGNhdGVnb3J5ID0gY2F0ZWdvcnk7IC8vIFN0b3JlIGNhdGVnb3J5XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiYXBwTmFtZT1cIithcHBOYW1lKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJjYXRlZ29yeT1cIitjYXRlZ29yeSk7XG4gICAgICAgIFxuICAgICAgICAvLyBOYXZpZ2F0ZSB0byB0aGUgc2FtZSByb3V0ZSB3aXRob3V0IGFueSBxdWVyeSBwYXJhbWV0ZXJzXG4gICAgICAgIGNvbnN0IG5hdmlnYXRpb25FeHRyYXM6IE5hdmlnYXRpb25FeHRyYXMgPSB7XG4gICAgICAgICAgcmVwbGFjZVVybDogdHJ1ZSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIG5hdmlnYXRpb25FeHRyYXMpO1xuICAgICAgICBcblxuICAgICAgICBpZiAoYXBwbmFtZSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGFwcG5hbWUpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGNhdGVnb3J5KTtcbiAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcInB1Ymxpc2hzdGF0dXNcIixcIkZhbHNlXCIpXG4gICAgICAgICAgdGhpcy5pbnN0YWxsQXBwKGFwcG5hbWUsY2F0ZWdvcnkpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgLy8gSGFuZGxlIHN1Y2Nlc3NmdWwgaW5zdGFsbGF0aW9uXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnQXBwIGluc3RhbGxlZCBNZXRob2QgY2FsbGVkOicsIGFwcG5hbWUsIGNhdGVnb3J5KTtcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFwiYXBwbmFtZVwiKTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgICAvLyBIYW5kbGUgZXJyb3IgaWYgaW5zdGFsbEFwcCBmYWlsc1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW5zdGFsbGluZyBhcHA6JywgZXJyb3IpO1xuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJhcHBuYW1lXCIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgfVxuICAgICAgLy8gfSBlbHNlIHtcbiAgICAgIC8vICAgY29uc29sZS5lcnJvcignYXBwbmFtZSBvciBjYXRlZ29yeSBxdWVyeSBwYXJhbWV0ZXIgaXMgbWlzc2luZycpO1xuICAgICAgfX0pO1xuXG4gICAgfVxuICAgIFxuICAgIC8vIG9uY2Ugd2UgZml4IGlkZW50aXR5IHNlcnZlciBBUEksIHRoaXMgY29kZSB3aWxsIGJlIG5lZWRlZCBhZ2FpblxuICAgIC8vIFN1YnNjcmliZSB0byB1c2VyIGNoYW5nZXNcbiAgICAvLyB0aGlzLl91c2VyU2VydmljZS51c2VyJFxuICAgIC8vIC5waXBlKHRha2VVbnRpbCh0aGlzLl91bnN1YnNjcmliZUFsbCkpXG4gICAgLy8gLnN1YnNjcmliZSgodXNlcjogYW55KSA9PiB7XG4gICAgLy8gICAgIHRoaXMudXNlciA9IHVzZXI7XG4gICAgLy8gICAgIHRoaXMudXNlckVtYWlsID0gdXNlci5lbWFpbDtcbiAgICAvLyAgICAgdGhpcy51c2VyTmFtZSA9IHVzZXIuRmlyc3ROYW1lICsgJyAnKyB1c2VyLkxhc3ROYW1lIDtcbiAgICAvLyAgICAgdGhpcy51c2VySW1hZ2UgPSB1c2VyLnBpY3R1cmU7XG4gICAgLy8gICAgIC8vIE1hcmsgZm9yIGNoZWNrXG4gICAgLy8gICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIC8vIH0pO1xuXG5cblxuXG4gICAgY29uc3QgdXJsID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgndXJsJyk7XG4gICAgaWYgKHVybCkge1xuICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSB1cmw7XG4gICAgICAvLyBSZW1vdmUgc2F2ZWQgZGF0YSBmcm9tIHNlc3Npb25TdG9yYWdlXG4gICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKCd1cmwnKTtcblxuICAgICAgLy8gUmVtb3ZlIGFsbCBzYXZlZCBkYXRhIGZyb20gc2Vzc2lvblN0b3JhZ2VcbiAgICAgIHNlc3Npb25TdG9yYWdlLmNsZWFyKCk7XG4gICAgfVxuXG4gIH1cblxuICBcblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXMuYXBwTGlzdCAmJiBjaGFuZ2VzLmFwcExpc3QuY3VycmVudFZhbHVlKSB7XG4gICAgICB0aGlzLmFzc2lnbkdyYWRpZW50cygpO1xuICAgIH1cbiAgfVxuXG4gIGFzc2lnbkdyYWRpZW50cygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hcHBMaXN0ICYmIHRoaXMuYXBwTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmFwcExpc3QuZm9yRWFjaCgoYXBwLCBpbmRleCkgPT4ge1xuICAgICAgICBhcHAuZ3JhZGllbnQgPSB0aGlzLmdyYWRpZW50c1tpbmRleCAlIHRoaXMuZ3JhZGllbnRzLmxlbmd0aF07XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsbCBhcHBzIEFwcCBWZXJzaW9uIElkIHJvdXRlXG4gICAqXG4gICAqIEBwYXJhbSBhcHBWZXJzaW9uSWRcbiAgICovXG4gIG9wZW5BcHAoYXBwVmVyc2lvbklkOiBudW1iZXIpOiB2b2lkIHtcbiAgICBcbiAgICBjb25zdCBjdXJyZW50VXJsID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbjsgLy8gR2V0IHRoZSBjdXJyZW50IFVSTFxuICAgIC8vIFVwZGF0ZWQgVVJMIGNoZWNrIGxvZ2ljXG4gICAgaWYgKGN1cnJlbnRVcmwuaW5jbHVkZXMoJ2xvY2FsaG9zdDo0MjAwJykgfHwgY3VycmVudFVybC5pbmNsdWRlcygnYnVpbGRlci5heG9uYXRvci5jb20nKSB8fCBjdXJyZW50VXJsLmluY2x1ZGVzKCdhbmRyb21lZGEtYnVpbGRlci1xYS5heG9uYXRvci5jb20nKSkge1xuICAgICAgXG4gICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgdXNlciBpcyBkZWZpbmVkIGFuZCBoYXMgYSBVc2VySURcbiAgICAgIGlmICghdGhpcy51c2VyKSB7XG4gICAgICAgICAgdGhpcy5fYXhvU25hY2tCYXIub3BlblNuYWNrQmFyKCdVc2VyIG5vdCBmb3VuZCBvciBub3QgbG9nZ2VkIGluJywgQXhvU25hY2tCYXJUeXBlLmVycm9yKTtcbiAgICAgICAgICByZXR1cm47IC8vIEV4aXQgdGhlIG1ldGhvZCBpZiB1c2VyIGlzIG5vdCBhdmFpbGFibGVcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIHJlcXVpcmVkIHBlcm1pc3Npb25zXG4gICAgICBjb25zdCBoYXNSZXF1aXJlZFBlcm1pc3Npb24gPSB0aGlzLnBlcm1pc3Npb25zLmluY2x1ZGVzKCdBUFBfQlVJTERFUicpIHx8IHRoaXMucGVybWlzc2lvbnMuaW5jbHVkZXMoJ0FQUF9JQU0nKTtcbiAgICAgIGlmICghaGFzUmVxdWlyZWRQZXJtaXNzaW9uKSB7XG4gICAgICAgICAgdGhpcy5fYXhvU25hY2tCYXIub3BlblNuYWNrQmFyKCdZb3UgbmVlZCBlaXRoZXIgQVBQX0JVSUxERVIgb3IgQVBQX0lBTSBwZXJtaXNzaW9ucyB0byBwZXJmb3JtIHRoaXMgYWN0aW9uLicsIEF4b1NuYWNrQmFyVHlwZS5lcnJvcik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIERpcmVjdGx5IG9wZW4gdGhlIGFwcCByZWdhcmRsZXNzIG9mIFVSTCBpZiB0aGUgY29uZGl0aW9ucyBhcmUgbm90IG1ldFxuICAgIHRoaXMub3BlbkFwcEV2ZW50LmVtaXQoYXBwVmVyc2lvbklkKTtcbiAgfVxuXG5cblxuICBuYXZpZ2F0ZVRvSG9tZShhcHBWZXJzaW9uSWQ6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZUJ5VXJsKGBhcHBzLyR7YXBwVmVyc2lvbklkfS9ob21lYCk7XG4gIH1cblxuICAvKipcbiAgICogZnVuY3Rpb24gdXNlIHRvIFN3aXRjaCB0aGUgb3JnYW5pemF0aW9uXG4gICAqL1xuICBzd2l0Y2hBY2NvdW50KG9yZ2FuaXphdGlvbklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnN3aXRjaEFjY291bnRFdmVudC5lbWl0KG9yZ2FuaXphdGlvbklkKTtcbiAgICB0aGlzLmdldFVzZXJQZXJtaXNzaW9ucygpO1xuICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWduIG91dFxuICAgKi9cbiAgc2lnbk91dCgpOiB2b2lkIHtcbiAgICB0aGlzLl9sb2dnaW5nU2VydmljZS50cmFja0V2ZW50KCd1c2VyIGxvZ2dlZCBvdXQnLHtzdGVwIDogJ0J5ZSBCeWUgJyt0aGlzLnVzZXJOYW1lfSk7XG4gICAgdGhpcy5fYXV0aFNlcnZpY2Uuc2lnbk91dCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJpbGxpbmdcbiAgICovXG4gIG5hdmlnYXRlVG9CaWxsaW5nKCk6IHZvaWQge1xuICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZUJ5VXJsKCdwYXltZW50aW5mby9wcmljaW5nJylcbiAgICBcbiAgfVxuXG5cblxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8gQ3JlYXRlIEFwcHAvLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8qKlxuICAgKnRvIGNyZWF0ZSBuZXcgYXBwXG4gICAqL1xuICAgb3BlbkNyZWF0ZUFwcERpYWxvZygpOiB2b2lkIHtcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKEFwcENyZWF0ZURpYWxvZ0NvbXBvbmVudENvbXBvbmVudCwge1xuICAgICAgd2lkdGg6ICc2MDBweCcsXG4gICAgICBoZWlnaHQ6ICdhdXRvJyxcbiAgICAgIHBhbmVsQ2xhc3M6ICdjdXN0b20tZGlhbG9nLWNvbnRhaW5lcicsXG4gICAgICBiYWNrZHJvcENsYXNzOiAnY3VzdG9tLWRpYWxvZy1iYWNrZHJvcCdcbiAgICB9KTtcblxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICBjb25zdCB7IG5hbWUsIGRlc2NyaXB0aW9uIH0gPSByZXN1bHQ7XG5cbiAgICAgICAgdGhpcy5fYXhvU25hY2tCYXIub3BlblNuYWNrQmFyKCdDcmVhdGluZyBBcHAuLi4nLCBBeG9TbmFja0JhclR5cGUuaW5mbyk7XG4gICAgICAgIHRoaXMuY3JlYXRlQXBwKG5hbWUsIGRlc2NyaXB0aW9uKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNyZWF0ZUFwcChuYW1lOiBzdHJpbmcsIGRlc2NyaXB0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtRGF0YUZvclNlcnZpY2UgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBmb3JtRGF0YUZvclNlcnZpY2UuYXBwZW5kKCduYW1lJywgbmFtZSk7XG4gICAgZm9ybURhdGFGb3JTZXJ2aWNlLmFwcGVuZCgnZGVzY3JpcHRpb24nLCBkZXNjcmlwdGlvbik7XG5cbiAgICB0aGlzLl9tcEFwcExpc3RTZXJ2aWNlLmFkZEFwcEJhc2ljSW5mbyhmb3JtRGF0YUZvclNlcnZpY2UpLnRvUHJvbWlzZSgpXG4gICAgICAudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgIGlmIChyZXNwb25zZT8uYWRkQXBwQmFzaWNJbmZvPy5zdGF0dXMgPT09ICdzdWNjZXNzJyAmJiByZXNwb25zZS5hZGRBcHBCYXNpY0luZm8uYXBwPy5hcHB2ZXJzaW9uX2lkKSB7XG4gICAgICAgICAgLy90aGlzLl9uYXZpZ2F0aW9uLnVwZGF0ZUNsYXNzaWNOYXZpZ2F0aW9uUm91dGVzKHJlc3BvbnNlLmFkZEFwcEJhc2ljSW5mby5hcHAuYXBwdmVyc2lvbl9pZCk7XG4gICAgICAgICAgLy90aGlzLl9yb3V0ZXIubmF2aWdhdGUoWydhcHBzJywgcmVzcG9uc2UuYWRkQXBwQmFzaWNJbmZvLmFwcC5hcHB2ZXJzaW9uX2lkXSk7XG4gICAgICAgICAgXG4gICAgICAgICAgdGhpcy5fYXhvU25hY2tCYXIub3BlblNuYWNrQmFyKCdBcHAgY3JlYXRlZC4nLCBBeG9TbmFja0JhclR5cGUuc3VjY2Vzcyk7XG4gICAgICAgICAgdGhpcy5vcGVuQXBwKHJlc3BvbnNlLmFkZEFwcEJhc2ljSW5mby5hcHAuYXBwdmVyc2lvbl9pZClcbiAgICAgICAgfSBlbHNlIGlmIChyZXNwb25zZT8uYWRkQXBwQmFzaWNJbmZvPy5hcHAgPT09ICdhbHJlYWR5X2V4aXN0cycpIHtcbiAgICAgICAgICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ0FwcCBhbHJlYWR5IGV4aXN0cycsIEF4b1NuYWNrQmFyVHlwZS53YXJuaW5nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ09vcHMhIFNvbWV0aGluZyB3ZW50IHdyb25nJywgQXhvU25hY2tCYXJUeXBlLmVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGNyZWF0aW5nIGFwcDonLCBlcnJvcik7XG4gICAgICAgIHZhciBlcnJvck1lc3NhZ2UgPSAnT29wcyEgU29tZXRoaW5nIHdlbnQgd3JvbmcnXG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgIGlmIChlcnJvciA9PT0gJ0FYX0VSUl82NycpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9ICdPb3BzISBDYW5cXCd0IHJlYWNoIG91ciBzZXJ2ZXJzIPCfk6EuIFBsZWFzZSB3YWl0LCB3ZVxcJ2xsIG5vdGlmeSB5b3Ugc29vbi4nO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAgIHRoaXMuX2F4b1NuYWNrQmFyLm9wZW5TbmFja0JhcihlcnJvck1lc3NhZ2UsIEF4b1NuYWNrQmFyVHlwZS5lcnJvcik7XG4gICAgICB9KTtcbiAgfVxuLy9UcnlpbmcgdG8gaW1wbGVtZW50IHVybCBhcyB3ZWxsIGFzIGJ1dHRvbiBmdW5jdGlvbmFsaXR5IGZvciBpbnN0YWxsaW5nIGFwcFxuLy8gYXN5bmMgaW5zdGFsbEFwcCh1c2VySW5wdXQ/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgXG4vLyAgIGlmICghdXNlcklucHV0KSB7XG4vLyAgICAgdXNlcklucHV0ID0gcHJvbXB0KCdFbnRlciB0aGUgc3RyaW5nIHRvIHNlbmQgdG8gdGhlIEFQSTonKTtcbi8vICAgICBpZiAoIXVzZXJJbnB1dCkge1xuLy8gICAgICAgLy8gSWYgdXNlciBjYW5jZWxzIG9yIHByb3ZpZGVzIG5vIGlucHV0LCBkbyBub3RoaW5nXG4vLyAgICAgICByZXR1cm47XG4vLyAgICAgfVxuLy8gICB9XG5cbi8vICAgdGhpcy5fYXhvU25hY2tCYXIub3BlblNuYWNrQmFyKCdJbnN0YWxsaW5nIEFwcC4uLicsIEF4b1NuYWNrQmFyVHlwZS5pbmZvKTtcbiAgXG4gXG5jaGVja0FuZFB1Ymxpc2hBcHAoaW5zdGFsbGVkQXBwOiBzdHJpbmcpIHtcbiAgLy9cbiAgY29uc3QgYXBwTmFtZWNoZWNrID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2FwcG5hbWUnKTsgLy8gUmVwbGFjZSB3aXRoIHlvdXIgbG9naWMgdG8gZ2V0IGFwcE5hbWVjaGVja1xuICBjb25zdCBhcHBQdWJsaXNoU3RhdHVzID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3B1Ymxpc2hzdGF0dXMnKTsgLy8gUmVwbGFjZSB3aXRoIHlvdXIgbG9naWMgdG8gZ2V0IGFwcFB1Ymxpc2hTdGF0dXNcbiAgY29uc3QgYXBwSW5zdGFsbFN0YXR1cz1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnaW5zdGFsbHN0YXR1cycpXG5cbiAgIGlmIChhcHBOYW1lY2hlY2sgPT0gbnVsbCAmJiBhcHBQdWJsaXNoU3RhdHVzID09IFwiRmFsc2VcIiAmJiBhcHBJbnN0YWxsU3RhdHVzPT1cIlRydWVcIikge1xuICAgIGNvbnN0IGFwcElkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3B1Ymxpc2hBcHBJZERhdGEnKTtcbiAgICBjb25zdCBhcHBWZXJzaW9uID0gXCIxLjAwXCI7XG4gICAgY29uc3QgcHVibGlzaFN0YXR1cyA9IFwiUFwiO1xuICAgIGlmIChhcHBJZCkge1xuICAgICAgdGhpcy5fY29tbW9uU2VydmljZS5wdWJsaXNoYXBwKGFwcElkLCBhcHBWZXJzaW9uLCBwdWJsaXNoU3RhdHVzKS5zdWJzY3JpYmUoXG4gICAgICAgIHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAvLyBIYW5kbGUgdGhlIHJlc3BvbnNlIGlmIG5lZWRlZFxuICAgICAgICAgIGNvbnNvbGUubG9nKCdQdWJsaXNoIHJlc3BvbnNlOicsIHJlc3BvbnNlKTtcbiAgICAgICAgICAvLyBjb25zdCBhcHBOYW1lID0gaW5zdGFsbGVkQXBwIHx8ICdZb3VyIEFwcCc7XG4gICAgICAgICAgLy8gY29uc3QgYXBwVmVyc2lvbiA9ICcxLjAwMCc7XG4gICAgICAgICAgLy8gY29uc3Qgc3VjY2Vzc01lc3NhZ2UgPSBgQXBwOiAke2FwcE5hbWV9IHZlcnNpb24gJHthcHBWZXJzaW9ufSBpcyBwdWJsaXNoZWQgc3VjY2Vzc2Z1bGx5LmA7XG4gICAgICAgICAvLyB0aGlzLm9wZW5TdWNjZXNzRGlhbG9nKCd2ZXJzaW9uIHB1Ymxpc2hlZCBzdWNjZXNzZnVsbHkhJyk7XG4gICAgICAgICBjb25zdCBhcHBOYW1lID0gaW5zdGFsbGVkQXBwO1xuICAgICAgICAgY29uc3QgYXBwVmVyc2lvbiA9ICcxLjAwMCc7XG4gICAgICAgICBjb25zdCBib3hoZWFkaW5nPWBJbnN0YWxsZWRgXG4gICAgICAgICBjb25zdCBzdWNjZXNzTWVzc2FnZSA9IGBBcHA6ICR7YXBwTmFtZX0gdmVyc2lvbiAke2FwcFZlcnNpb259IGlzIGluc3RhbGxlZCBzdWNjZXNzZnVsbHkuIGA7XG4gICAgICAgICBjb25zdCBzdWNjZXNzRGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihTdWNjZXNzRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICAgICAgIHdpZHRoOiAnNTAwcHgnLFxuICAgICAgICAgICBkYXRhOiB7IG1lc3NhZ2U6IHN1Y2Nlc3NNZXNzYWdlICwgaGVhZGluZzpib3hoZWFkaW5nfSxcbiAgICAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlXG4gICAgICAgICB9KTtcbiAgICAgICAgICAvLyBSZW1vdmUgbG9jYWwgc3RvcmFnZSBpdGVtc1xuICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdwdWJsaXNoQXBwSWREYXRhJyk7XG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ3B1Ymxpc2hzdGF0dXMnKTtcbiAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnaW5zdGFsbHN0YXR1cycpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvciA9PiB7XG4gICAgICAgICAgLy8gSGFuZGxlIGVycm9yIGlmIG5lZWRlZFxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHB1Ymxpc2hpbmcgYXBwOicsIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbmZldGNoQXBwRGV0YWlscyhmbGF0dGVuOiBhbnkpIHtcbiAgaWYgKGZsYXR0ZW4gJiYgZmxhdHRlbi5hcHBWZXJzaW9uSWQpIHtcbiAgICB0aGlzLl9tcEFwcExpc3RTZXJ2aWNlLmZldGNoQXBwRGV0YWlscyhmbGF0dGVuLmFwcFZlcnNpb25JZCwgdGhpcy5jb21tb25MaWJDb25maWcuYXhvbmF0b3JYMVVybCkuc3Vic2NyaWJlKFxuICAgICAgKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgaXNBcHBDaGFuZ2VkQWZ0ZXJQdWJsaXNoID0gcmVzcG9uc2U/LmRhdGE/LmRldGFpbHM/LmlzX2FwcF9jaGFuZ2VkX2VkaXRlZF9hZnRlcl9wdWJsaXNoIHx8IGZhbHNlO1xuICAgICAgICB0aGlzLmlzQXBwQ2hhbmdlZEFmdGVyUHVibGlzaCA9IGlzQXBwQ2hhbmdlZEFmdGVyUHVibGlzaDtcblxuICAgICAgICB0aGlzLmlzQXBwQ2hhbmdlZEFmdGVyUHVibGlzaCA9IHRydWU7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiRGV0YWlscyBGb3VuZFwiKVxuICAgICAgICAvLyBUcmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb24gdG8gdXBkYXRlIHRoZSB2aWV3XG4gICAgICAgIC8vIHRoaXMuZGV0ZWN0Q2hhbmdlcygpOyAvLyA8LS0tIENhbGwgZGV0ZWN0Q2hhbmdlcygpIGhlcmVcblxuICAgICAgfSxcbiAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBhcHAgZGV0YWlsczonLCBlcnJvcik7XG4gICAgICB9XG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zb2xlLmVycm9yKCdhcHBWZXJzaW9uSWQgaXMgbWlzc2luZyBvciBpbnZhbGlkIGluIHRoZSBmbGF0dGVuIG9iamVjdDonLCBmbGF0dGVuKTtcbiAgfVxufVxuXG5cbmFzeW5jICBpbnN0YWxsQXBwKHVzZXJJbnB1dDogc3RyaW5nLCBjYXRlZ29yeTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIC8vXG4gIFxuICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoICdJbnN0YWxsaW5nIEFwcC4uLicsIEF4b1NuYWNrQmFyVHlwZS5pbmZvKTtcbiAgY29uc3QgbG9hZGluZ0RpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oTG9hZGluZ0FwcGluc3RhbGxDb21wb25lbnQsIHtcbiAgICB3aWR0aDogJzYwMHB4JyxcbiAgICBkYXRhOiB7IGxvYWRpbmdNZXNzYWdlOiAnSW5zdGFsbGluZyBhcHAsIHBsZWFzZSB3YWl0Li4uJyB9LFxuICAgIGRpc2FibGVDbG9zZTogdHJ1ZVxuICB9KTtcbiAgLy9jb25zdCBsb2FkaW5nRGlhbG9nUmVmID0gdGhpcy5vcGVuTG9hZGluZ0RpYWxvZ1dpdGhNZXNzYWdlKCdQbGVhc2Ugd2FpdC4gSW5zdGFsbGluZyBpbiBwcm9ncmVzcy4uLicpO1xuICBcbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgcmVxdWVzdFN0cmluZzogdXNlcklucHV0LFxuICAgICAgc2Vjb25kU3RyaW5nOiBjYXRlZ29yeVxuICAgIH07IFxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwLnBvc3Q8c3RyaW5nPignSW5zdGFsbEFwcCcsIGRhdGEsIHtcbiAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgLy8gU2V0IGNvbnRlbnQgdHlwZSB0byBhcHBsaWNhdGlvbi9qc29uXG4gICAgICB9KSxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZVxuICAgIH0pLnRvUHJvbWlzZSgpO1xuXG4gICAgLy9jb25zb2xlLmxvZygnUmVzcG9uc2UgZnJvbSBzZXJ2ZXI6JywgcmVzcG9uc2UpOyBcbiAgICBcbiAgICAvL2NvbnN0IHJlc3BvbnNlT2JqZWN0ID0gSlNPTi5wYXJzZShyZXNwb25zZSk7XG4gICAgXG4gICAgXG4gIC8vICAgaWYgKHJlc3BvbnNlKSB7XG5cbiAgLy8gICAgIGlmKHJlc3BvbnNlT2JqZWN0LnN0YXR1cz09XCJzdWNjZXNzXCIpe1xuICAvLyAgICAgdGhpcy5fYXhvU25hY2tCYXIub3BlblNuYWNrQmFyKCdBcHAgaW5zdGFsbGVkIHN1Y2Nlc3NmdWxseScsIEF4b1NuYWNrQmFyVHlwZS5zdWNjZXNzKTtcbiAgLy8gICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAvLyAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gIC8vICAgICB9LCAxNTAwMCk7XG4gIC8vICAgfSBlbHNlIGlmKHJlc3BvbnNlT2JqZWN0LnN0YXR1cz09J2ZhaWx1cmUnKSB7XG4gIC8vICAgICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ0Zvcm0gTm90IEZvdW5kIGluIHRoaXMgYXBwJywgQXhvU25hY2tCYXJUeXBlLmVycm9yKTtcbiAgLy8gICB9XG4gIC8vICAgICBlbHNlIHtcbiAgLy8gICAgIHRoaXMuX2F4b1NuYWNrQmFyLm9wZW5TbmFja0JhcignT29wcyEgU29tZXRoaW5nIHdlbnQgd3Jvbmcgd2hpbGUgaW5zdGFsbGluZyB0aGUgYXBwLicsIEF4b1NuYWNrQmFyVHlwZS5lcnJvcik7XG4gICAgICBcbiAgLy8gICAgIGNvbnNvbGUuZXJyb3IoQXhvU25hY2tCYXJUeXBlLmVycm9yKTtcbiAgLy8gICB9fVxuICAvLyB9IGNhdGNoIChlcnJvcikge1xuICAvLyAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluc3RhbGxpbmcgYXBwOicsIGVycm9yKTtcbiAgLy8gICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ09vcHMhIFNvbWV0aGluZyB3ZW50IHdyb25nIHdoaWxlIGluc3RhbGxpbmcgdGhlIGFwcC4nLCBBeG9TbmFja0JhclR5cGUuZXJyb3IpO1xuICAvLyAgIC8vdGhpcy5fbG9nZ2luZ1NlcnZpY2UudHJhY2tFdmVudCgnRXJyb3Igb2NjdXJyZWQgd2hpbGUgaW5zdGFsbGluZyBhcHAnLCBlcnJvcik7XG4gIC8vIH1cblxuICAgIFxuICAgICAgLy9jb25zdCByZXNwb25zZU9iamVjdCA9IEpTT04ucGFyc2UocmVzcG9uc2UpO1xuICAgICAgLy9jb25zb2xlLmxvZyhyZXNwb25zZU9iamVjdCk7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcIkluc3RhbGxlZEFwcE5hbWVcIix1c2VySW5wdXQpXG4gICAgICBjb25zdCByZXNwb25zZU9iamVjdCA9IHR5cGVvZiByZXNwb25zZSA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKHJlc3BvbnNlKSA6IHJlc3BvbnNlO1xuICAgICAgXG4gICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgLy9pZiAocmVzcG9uc2VPYmplY3QpIHtcbiAgICAgICAgIGlmIChyZXNwb25zZU9iamVjdC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7ICAgICAgICAgIFxuICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiaW5zdGFsbHN0YXR1c1wiLFwiVHJ1ZVwiKVxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ0FwcCBpbnN0YWxsZWQgc3VjY2Vzc2Z1bGx5JywgQXhvU25hY2tCYXJUeXBlLnN1Y2Nlc3MpO1xuICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICAgIGxvYWRpbmdEaWFsb2dSZWYuY2xvc2UoKTtcbiAgICAgICAgICAgIH0sIDIwMDAwKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICBcbiAgICAgICAgICAvLyB9IGVsc2UgaWYgKHJlc3BvbnNlT2JqZWN0LnN0YXR1cyA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgICAgLy8gICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ0Zvcm0gTm90IEZvdW5kIGluIHRoaXMgYXBwJywgQXhvU25hY2tCYXJUeXBlLmVycm9yKTtcbiAgICAgICAgfWVsc2Uge1xuICAgICAgICAgIHRoaXMuX2F4b1NuYWNrQmFyLm9wZW5TbmFja0JhcignRm9ybSBjYW5ub3QgYmUgZm91bmQgZm9yIHRoaXMgYXBwJywgQXhvU25hY2tCYXJUeXBlLmVycm9yKTtcbiAgICAgICAgICBsb2FkaW5nRGlhbG9nUmVmLmNsb3NlKCk7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihBeG9TbmFja0JhclR5cGUuZXJyb3IpO1xuICAgICAgICB9fVxuICAgICAgICBlbHNle1xuICAgICAgICAgIHRoaXMuX2F4b1NuYWNrQmFyLm9wZW5TbmFja0JhcignT29wcyFTb21ldGhpbmcgd2VudCB3cm9uZyB3aGlsZSBjcmVhdGluZyB0aGUgYXBwJywgQXhvU25hY2tCYXJUeXBlLmVycm9yKTtcbiAgICAgICAgICBsb2FkaW5nRGlhbG9nUmVmLmNsb3NlKCk7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihBeG9TbmFja0JhclR5cGUuZXJyb3IpO1xuICAgICAgICB9XG4gICAgfSAgIFxuXG5cbiAgICBvcGVuRGVsZXRlQXBwRGlhbG9nKGFwcFZlcnNpb25JZDpudW1iZXIpe1xuICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDb25maXJtYXRpb25Nb2RhbENvbXBvbmVudCwge1xuICAgICAgICB3aWR0aDogJzMwJScsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHRpdGxlOiAnRGVsZXRlIEFwcCcsXG4gICAgICAgIG1lc3NhZ2U6ICdBcmUgeW91IHN1cmUgd2FudCB0byBkZWxldGUgdGhpcyBhcHA/JyxcbiAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6ICdEZWxldGUnLFxuICAgICAgICBjYW5jZWxCdXR0b25UZXh0OiAnQ2FuY2VsJyxcbiAgICAgICAgY29uZmlybUJ1dHRvblR5cGU6ICdkZWxldGUnXG4gICAgICB9LFxuICAgICAgcGFuZWxDbGFzczogJ2NvbmZpcm0tbW9kYWwtY29udGFpbmVyJ1xuICAgICAgfSk7XG5cbiAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgdGhpcy5kZWxldGVBcHAoYXBwVmVyc2lvbklkKTsgLy8gUHJvY2VlZCB3aXRoIGRlbGV0aW9uXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGRlbGV0ZUFwcChhcHBWZXJzaW9uSWQ6bnVtYmVyKTogdm9pZCB7XG4gICAgICB0aGlzLl9mbGF0dGVuU2VydmljZS5nZXRGbGF0dGVuRGF0YShhcHBWZXJzaW9uSWQpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl91bnN1YnNjcmliZUFsbCksXG4gICAgICAgICAgICAgIHN3aXRjaE1hcCgoZmxhdHRlbikgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKGZsYXR0ZW4gJiYgZmxhdHRlbi5hcHBJZCAhPT0gdW5kZWZpbmVkICYmIGZsYXR0ZW4udmVyc2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXBwSWQgPSBmbGF0dGVuLmFwcElkLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXBwVmVyc2lvbiA9IGZsYXR0ZW4udmVyc2lvbi50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFwcFY9YXBwVmVyc2lvbklkO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQXBwIHZlcnNpb24gSWQ6XCIrYXBwVmVyc2lvbklkKTtcblxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YT17XG4gICAgICAgICAgICAgICAgICAgICAgICBcIkFwcCBJZFwiIDogZmxhdHRlbi5hcHBJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiQXBwIE5hbWVcIiA6IGZsYXR0ZW4uYXBwTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiQXBwIHZlcnNpb25cIiA6IGZsYXR0ZW4udmVyc2lvblxuICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdGZXRjaGVkIGFwcCBkZXRhaWxzIGZyb20gZmxhdHRlbjonLCB7IGFwcElkLCBhcHBWZXJzaW9uIH0pO1xuICBcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbXBBcHBMaXN0U2VydmljZS5kZWxldGVBcHAoYXBwSWQsIGFwcFZlcnNpb24udG9TdHJpbmcoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFcnJvciBvY2N1cnJlZCB3aGlsZSBkZWxldGluZyBhcHA6JywgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgZXJyb3IsIGUuZy4sIGRpc3BsYXkgYSBtZXNzYWdlIG9yIHBlcmZvcm0gYWRkaXRpb25hbCBhY3Rpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0Vycm9yOiBmbGF0dGVuIG9iamVjdCBvciBpdHMgcHJvcGVydGllcyBhcmUgdW5kZWZpbmVkLicpO1xuICAgICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBmbGF0dGVuIG9yIGl0cyBwcm9wZXJ0aWVzIGFyZSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcignRmxhdHRlbiBvYmplY3Qgb3IgaXRzIHByb3BlcnRpZXMgYXJlIHVuZGVmaW5lZCcpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgc3VjY2VzcyByZXNwb25zZSBoZXJlIGlmIG5lZWRlZFxuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0RlbGV0ZSBhcHAgc3VjY2VzczonLCByZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgZGVsZXRlZCBhcHAgZnJvbSB0aGUgYXBwTGlzdFxuICAgICAgICAgICAgICAgICB0aGlzLmFwcExpc3QgPSB0aGlzLmFwcExpc3QuZmlsdGVyKGFwcCA9PiBhcHAuYXBwVmVyc2lvbklkICE9PSBhcHBWZXJzaW9uSWQpO1xuICAgICAgICAgICAgICAgICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ0FwcCBkZWxldGVkIHN1Y2Nlc3NmdWxseScsIEF4b1NuYWNrQmFyVHlwZS5zdWNjZXNzKTtcbiAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2luZ1NlcnZpY2UudHJhY2tFdmVudCgnQXBwIGRlbGV0ZWQnLCB0aGlzLmRhdGEpO1xuICAgICAgICAgICAgICAgICAgLy8gTWFudWFsbHkgdHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uIHRvIHVwZGF0ZSB0aGUgdmlld1xuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpOyAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgZXJyb3IgaGVyZSBpZiBuZWVkZWRcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0RlbGV0ZSBhcHAgZXJyb3I6JywgZXJyb3IpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgfVxuICAgIFxuICBcblxucHJpdmF0ZSBvcGVuTG9hZGluZ0RpYWxvZ1dpdGhNZXNzYWdlKG1lc3NhZ2U6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBcbiAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihMb2FkaW5nQXBwaW5zdGFsbENvbXBvbmVudCwge1xuICAgIHdpZHRoOiAnNTAwcHgnLFxuICAgIFxuICAgIHBhbmVsQ2xhc3M6ICdhcHAtbG9hZGluZy1kaWFsb2cnLFxuICAgIGRhdGE6IHsgbWVzc2FnZSwgdHlwZTogJ1lvdXIgYXBwIGlzIGJlaW5nIFB1Ymxpc2hlZC4uLicgfSxcbiAgfSk7XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBkaWFsb2dSZWYuY2xvc2UoKTtcbiAgICAgIC8vdGhpcy5vcGVuU3VjY2Vzc0RpYWxvZygndmVyc2lvbiBwdWJsaXNoZWQgc3VjY2Vzc2Z1bGx5IScpO1xuICAgICAgcmVzb2x2ZSgpOyAvLyBSZXNvbHZlIHRoZSBwcm9taXNlIGFmdGVyIGNsb3NpbmcgdGhlIGRpYWxvZ1xuICAgIH0sIDEzODAwKTsgLy8gMTMuNiBzZWNvbmRzIGluIG1pbGxpc2Vjb25kc1xuICB9KTtcbn1cblxucHJpdmF0ZSBvcGVuU3VjY2Vzc0RpYWxvZyhtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgLy9cbiAgdGhpcy5fZmxhdHRlblNlcnZpY2UuZmxhdHRlbiQucGlwZShcbiAgICB0YWtlKDEpLFxuICAgIHN3aXRjaE1hcCgoZmxhdHRlbikgPT4ge1xuICAgICAgaWYgKCFmbGF0dGVuIHx8ICFmbGF0dGVuLmFwcFZlcnNpb25JZCkge1xuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcignRmxhdHRlbiBvYmplY3Qgb3IgaXRzIHByb3BlcnRpZXMgYXJlIHVuZGVmaW5lZCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZvcmtKb2luKHtcbiAgICAgICAgZmxhdHRlbjogb2YoZmxhdHRlbiksXG4gICAgICAgIGFwcERldGFpbHM6IHRoaXMuX21wQXBwTGlzdFNlcnZpY2UuZmV0Y2hBcHBEZXRhaWxzKGZsYXR0ZW4uYXBwVmVyc2lvbklkLCB0aGlzLmNvbW1vbkxpYkNvbmZpZy5heG9uYXRvclgxVXJsKS5waXBlKFxuICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBhcHAgZGV0YWlsczonLCBlcnJvcik7XG4gICAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgfSk7XG4gICAgfSlcbiAgKS5zdWJzY3JpYmUoKHsgZmxhdHRlbiwgYXBwRGV0YWlscyB9KSA9PiB7XG4gICAgY29uc29sZS5sb2coJ2ZldGNoQXBwRGV0YWlscyBmdW5jdGlvbiBjYWxsZWQgNCcpO1xuICAgIHRoaXMuaXNBcHBDaGFuZ2VkQWZ0ZXJQdWJsaXNoID0gYXBwRGV0YWlscz8uZGF0YT8uZGV0YWlscz8uaXNfYXBwX2NoYW5nZWRfZWRpdGVkX2FmdGVyX3B1Ymxpc2ggfHwgZmFsc2U7IC8vIFNldCBpc0FwcENoYW5nZWRBZnRlclB1Ymxpc2ggYmFzZWQgb24gdGhlIEFQSSByZXNwb25zZVxuICAgIC8vIEZldGNoIHRoZSBtaW5vciB2ZXJzaW9uIGZyb20gZ2V0VmVyc2lvbkxpc3RcbiAgICB0aGlzLl9jb21tb25TZXJ2aWNlLmdldFZlcnNpb25MaXN0KGZsYXR0ZW4uYXBwSWQsIGZsYXR0ZW4udmVyc2lvbikuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGxldCBhcHBNaW5vclZlcnNpb24gPSAnVW5rbm93bic7IC8vIERlZmF1bHQgdmFsdWUgaWYgbWlub3IgdmVyc2lvbiBpcyBub3QgZm91bmRcbiAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LnYgJiYgcmVzdWx0LnYudmVyc2lvbnNsaXN0ICYmIHJlc3VsdC52LnZlcnNpb25zbGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGFwcE1pbm9yVmVyc2lvbiA9IHJlc3VsdC52LnZlcnNpb25zbGlzdFswXS5hcHBtaW5vcnZlcnNpb247XG4gICAgICB9XG4gICAgICBjb25zdCBhcHBOYW1lID0gZmxhdHRlbj8uYXBwTmFtZSB8fCAnWW91ciBBcHAnO1xuICAgICAgICBjb25zdCBhcHBWZXJzaW9uID0gZmxhdHRlbj8udmVyc2lvbiB8fCAndmVyc2lvbic7XG4gICAgICAgIGNvbnN0IHN1Y2Nlc3NNZXNzYWdlID0gYEFwcDogJHthcHBOYW1lfSB2ZXJzaW9uICR7YXBwTWlub3JWZXJzaW9ufSBpcyBJbnN0YWxsZWQgc3VjY2Vzc2Z1bGx5LmA7XG4gICAgICAgIGNvbnN0IGFwcGhlYWRpbmcgPWBJbnN0YWxsZWRgXG4gICAgICAgIGNvbnN0IHN1Y2Nlc3NEaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFN1Y2Nlc3NEaWFsb2dDb21wb25lbnQsIHtcbiAgICAgICAgICB3aWR0aDogJzUwMHB4JyxcbiAgICAgICAgICBkYXRhOiB7IG1lc3NhZ2U6IHN1Y2Nlc3NNZXNzYWdlfVxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmNhcGl0YWxpemVXb3JkcyhzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBzdHJcbiAgICAuc3BsaXQoJyAnKVxuICAgIC5tYXAod29yZCA9PiB3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKSlcbiAgICAuam9pbignICcpO1xufVxuXG5cbiAgLyoqXG4gICAqIE9uIGRlc3Ryb3lcbiAgICovXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIC8vIFVuc3Vic2NyaWJlIGZyb20gYWxsIHN1YnNjcmlwdGlvbnNcbiAgICB0aGlzLl91bnN1YnNjcmliZUFsbC5uZXh0KCk7XG4gICAgdGhpcy5fdW5zdWJzY3JpYmVBbGwuY29tcGxldGUoKTtcbiAgfVxuXG4gIGRpc2FibGVRUihhcHBWZXJzaW9uSWQ6IGFueSAsIGluZGV4OiBudW1iZXIpe1xuICAgIGxldCBkYXRhID0ge1xuICAgICAgYXBwVmVyc2lvbklkIDogYXBwVmVyc2lvbklkXG4gICAgfTtcbiAgXG4gICAgdGhpcy5fZGF0YVZpZXdGaWx0ZXJzU2VydmljZS5kaXNhYmxlUVIoZGF0YSlcbiAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIHRoaXMuX2F4b1NuYWNrQmFyLm9wZW5TbmFja0JhcignUVIgY29kZSBkaXNhYmxlZCBzdWNjZXNzZnVsbHknLCBBeG9TbmFja0JhclR5cGUuc3VjY2Vzcyk7XG4gICAgICAgICAgdGhpcy5fbG9nZ2luZ1NlcnZpY2UudHJhY2tFdmVudCgnUVIgRGlzYWJsZWQnLHtyZXNwb25zZX0pO1xuICAgICAgICAgIHRoaXMuYXBwTGlzdFtpbmRleF0ucXJfc3RhdHVzID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9LFxuICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvcjonLCBlcnJvcik7XG4gICAgICAgICAgLy8gSGFuZGxlIHRoZSBlcnJvclxuICAgICAgICB9XG4gICAgICApOyAgXG4gIH1cblxuICBkaXNhYmxlUVJEaWFsb2coYXBwVmVyc2lvbklkOiBhbnksIGluZGV4OiBudW1iZXIpe1xuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQ29uZmlybWF0aW9uTW9kYWxDb21wb25lbnQsIHtcbiAgICAgIHdpZHRoOiAnMzAlJyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgdGl0bGU6ICdEaXNhYmxlIFFSJyxcbiAgICAgICAgbWVzc2FnZTogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkaXNhYmxlIFFSIGZvciB0aGlzIGZvcm0/JyxcbiAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6ICdEaXNhYmxlJyxcbiAgICAgICAgY2FuY2VsQnV0dG9uVGV4dDogJ0NhbmNlbCcsXG4gICAgICAgIGNvbmZpcm1CdXR0b25UeXBlOiAnZGVsZXRlJ1xuICAgICAgfSxcbiAgICAgIHBhbmVsQ2xhc3M6ICdjb25maXJtLW1vZGFsLWNvbnRhaW5lcidcbiAgICB9KTtcbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlUVIoYXBwVmVyc2lvbklkLCBpbmRleCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnZXRVc2VyUGVybWlzc2lvbnMoKSB7XG4gICAgdGhpcy5fY29tbW9uU2VydmljZS5nZXRVc2VyRGV0YWlsKCkuc3Vic2NyaWJlKFxuICAgICAgKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gJ3N1Y2Nlc3MnICYmIHJlc3BvbnNlLnVkKSB7XG4gICAgICAgICAgdGhpcy5wZXJtaXNzaW9ucyA9IHJlc3BvbnNlLnVkLnBlcm1pc3Npb25zOyAvLyBFeHRyYWN0IHBlcm1pc3Npb25zXG4gICAgICAgICAgdGhpcy5oYXNPcmdVc2VyQWNjZXNzID0gdGhpcy5wZXJtaXNzaW9ucy5pbmNsdWRlcygnT1JHX0lBTScpOyAvLyBDaGVjayBpZiAnT1JHX0lBTScgaXMgaW4gdGhlIHBlcm1pc3Npb25zIGFycmF5XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gU2hvdyBvdmVybGF5IG9ubHkgaWYgJ0FDQ0VTU19XRUJfUE9SVEFMJyBwZXJtaXNzaW9uIGlzIG5vdCBwcmVzZW50XG4gICAgICAgICAgdGhpcy5zaG93V2ViUG9ydGFsQWNjZXNzT3ZlcmxheSA9ICF0aGlzLnBlcm1pc3Npb25zLmluY2x1ZGVzKCdBQ0NFU1NfV0VCX1BPUlRBTCcpO1xuXG4gICAgICAgICAgY29uc29sZS5sb2coJ1VzZXIgUGVybWlzc2lvbnM6JywgdGhpcy5wZXJtaXNzaW9ucyk7XG4gICAgICAgICAgY29uc29sZS5sb2coJ0lzIEJ1aWxkZXIgQWNjZXNzOicsIHRoaXMuaGFzT3JnVXNlckFjY2Vzcyk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgdXNlciBkZXRhaWxzOicsIGVycm9yKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG4gIGlzUmVzdHJpY3RlZFVybCgpOiBib29sZWFuIHtcbiAgICBjb25zdCByZXN0cmljdGVkVXJscyA9IFtcbiAgICAgICdodHRwczovL2FuZHJvbWVkYS1jb250YWluZXItcWEuYXhvbmF0b3IuY29tL2FwcHMnLFxuICAgICAgJ2h0dHBzOi8vbG9jYWxob3N0OjQyMDEvYXBwcycsXG4gICAgICAnaHR0cHM6Ly93ZWIuYXhvbmF0b3IuY29tJ1xuICAgIF07XG4gICAgcmV0dXJuIHJlc3RyaWN0ZWRVcmxzLmluY2x1ZGVzKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcbiAgfVxufVxuXG4iLCI8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBmbGV4LWF1dG8gaC1mdWxsLWFwcExpc3QgbXktYXBwLWxpc3Qgb3ZlcmZsb3ctaGlkZGVuIHBhZ2UtYmFja2dyb3VuZCBheG8tZm9udFwiPlxuICAgIDwhLS0gSGVhZGVyIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJzdGlja3kgdG9wLTAgYmctd2hpdGVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFwcC1saXN0LW1haW4taGVhZGVyIHJlbGF0aXZlIGZsZXggZmxleC0wIGgtMTIgei00OSBib3gtYm9yZGVyIHB4LTZcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtYXV0byBpdGVtcy1jZW50ZXIgbWluLXctMFwiPiA8aW1nIGNsYXNzPVwidy0zNiBoLTdcIiBzcmM9XCJhc3NldHMvaW1hZ2VzL2xvZ28vYXhvLWxvZ28uc3ZnXCIgYWx0PVwiTG9nbyBpbWFnZVwiPiA8c3BhbiBjbGFzcz1cImJldGFcIj5CZXRhPC9zcGFuPiA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtYXV0byBqdXN0aWZ5LWVuZCBpdGVtcy1jZW50ZXIgbWluLXctMCBnYXAtM1wiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGNsYXNzPVwibXQtMS41XCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwiYXhvX3NlYXJjaFwiPjwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gY2xhc3M9XCJtdC0xLjVcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgYXhvX25vdGlmaWN0aW9uLTJcIiBtYXRUb29sdGlwPVwiTm90aWZpY2F0aW9uXCIgc3ZnSWNvbj1cImF4b19ub3RpZmljdGlvbi0yXCI+PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8IS0tIG9uY2Ugd2UgZml4IGlkZW50aXR5IHNlcnZlciBBUEksIHRoaXMgY29kZSB3aWxsIGJlIG5lZWRlZCBhZ2FpblxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XCIgbWF0LWljb24tYnV0dG9uIFttYXRNZW51VHJpZ2dlckZvcl09XCJ1c2VyUHJvZmlsZTA5TWVudVwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidXNlckltYWdlOyBlbHNlIGlzRW1wdHlJbWFnZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImJhc2VVcmwgKyAnaW1hZ2VzLycrIHVzZXJJbWFnZVwiIG9uRXJyb3IgPVwidGhpcy5zcmM9J2Fzc2V0cy9pY29ucy9vcmdhbml6YXRpb24ucG5nJ1wiIGNsYXNzPVwiaW5saW5lIG9iamVjdC1jb3ZlciB3LTcgaC03IG1yLTIgb3JnYW5pemF0aW9uSWNvblwiIGFsdD1cImF2dGFyXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2lzRW1wdHlJbWFnZT5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gIGNsYXNzPVwiZW1wdHktYXBwLWljb25cIj57eyAodXNlclsnRmlyc3ROYW1lJ10pLmNoYXJBdCgwKSArIFwiXCIgKyAgKHVzZXJbJ0xhc3ROYW1lJ10pLmNoYXJBdCgwKSB8IHVwcGVyY2FzZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8bWF0LW1lbnUgI3VzZXJQcm9maWxlMDlNZW51PVwibWF0TWVudVwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gY2xhc3M9XCJoLWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ1c2VySW1hZ2U7IGVsc2UgaXNFbXB0eVByb2ZpbGVJbWFnZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJvcmdhbml6YXRpb25JY29uXCIgW3NyY109XCJiYXNlVXJsICsgJ2ltYWdlcy8nKyB1c2VySW1hZ2VcIiBhbHQ9XCJcIiBvbkVycm9yID1cInRoaXMuc3JjPSdhc3NldHMvaWNvbnMvb3JnYW5pemF0aW9uLnBuZydcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaXNFbXB0eVByb2ZpbGVJbWFnZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAgY2xhc3M9XCJ1c2VyRW1wdHlJY29uXCI+e3sgKHVzZXJbJ0ZpcnN0TmFtZSddKS5jaGFyQXQoMCkgKyBcIlwiICsgICh1c2VyWydMYXN0TmFtZSddKS5jaGFyQXQoMCkgfCB1cHBlcmNhc2UgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlubGluZS1ncmlkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1c2VyLW5hbWUtdGl0bGUgXCI+e3sgdXNlckVtYWlsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidXNlci1lbWFpbGlkIFwiPnt7IHVzZXJOYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gY2xhc3M9XCJvcmdhbml6YXRpb24tc2VjdGlvblwiIChjbGljayk9XCJzaWduT3V0KClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibG9nb3V0LXRpdGxlXCI+TG9nb3V0PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1tZW51PiAtLT5cblxuICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcIiBtYXQtaWNvbi1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cInVzZXJQcm9maWxlMDlNZW51XCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ1c2VySW1hZ2U7IGVsc2UgaXNFbXB0eUltYWdlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiYmFzZVVybCArIHVzZXJJbWFnZVwiIG9uRXJyb3IgPVwidGhpcy5zcmM9J2Fzc2V0cy9pY29ucy9vcmdhbml6YXRpb24uc3ZnJ1wiIGNsYXNzPVwib3JnYW5pemF0aW9uSWNvblwiIGFsdD1cImF2dGFyXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2lzRW1wdHlJbWFnZT5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gIGNsYXNzPVwidXBwZXJjYXNlIGZvbnQtbWVkaXVtIGN1cnNvci1wb2ludGVyIHRleHQtc20gaC04IHctOCBmbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlciBtbC0yIGJnLWdyYXktMzAwIHJvdW5kZWQtZnVsbFwiPnt7ICh1c2VyWydmbmFtZSddKS5jaGFyQXQoMCkgKyBcIlwiICsgICh1c2VyWydsbmFtZSddKS5jaGFyQXQoMCkgfCB1cHBlcmNhc2UgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPG1hdC1tZW51ICN1c2VyUHJvZmlsZTA5TWVudT1cIm1hdE1lbnVcIiBiYWNrZHJvcENsYXNzPVwiYXBwLWxpc3QtbWF0LW1lbnUtcGFuZWwtY2xhc3NcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIGNsYXNzPVwiaC1mdWxsIHVzZXItaW5mb1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInVzZXJJbWFnZTsgZWxzZSBpc0VtcHR5UHJvZmlsZUltYWdlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cIm9yZ2FuaXphdGlvbkljb25wcm9maWxlXCIgW3NyY109XCJiYXNlVXJsICsgdXNlckltYWdlXCIgYWx0PVwiXCIgb25FcnJvciA9XCJ0aGlzLnNyYz0nYXNzZXRzL2ljb25zL29yZ2FuaXphdGlvbi5zdmcnXCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2lzRW1wdHlQcm9maWxlSW1hZ2U+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gIGNsYXNzPVwidXNlckVtcHR5SWNvblwiPnt7ICh1c2VyWydmbmFtZSddKS5jaGFyQXQoMCkgKyBcIlwiICsgICh1c2VyWydsbmFtZSddKS5jaGFyQXQoMCkgfCB1cHBlcmNhc2UgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlubGluZS1ncmlkIHB5LTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVzZXItZW1haWxpZFwiPnt7IHVzZXJFbWFpbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVzZXItbmFtZS10aXRsZVwiPnt7IHVzZXJOYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWRpdmlkZXIgY2xhc3M9XCJteS0wXCI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIGNsYXNzPVwidXNlci1sb2dvdXQtYnRuIG9yZ2FuaXphdGlvbi1idG5cIiAoY2xpY2spPVwibmF2aWdhdGV0b09yZ2FuaWF0aW9uKClcIiAqbmdJZj1cImhhc09yZ1VzZXJBY2Nlc3NcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPG1hdC1pY29uIFtzdmdJY29uXT1cIidoZXJvaWNvbnNfb3V0bGluZTp1c2VyLWdyb3VwJ1wiPjwvbWF0LWljb24+IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsb2dvdXQtbGFiZWxcIj5Pcmdhbml6YXRpb24gVXNlcnM8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIGNsYXNzPVwidXNlci1sb2dvdXQtYnRuIG9yZ2FuaXphdGlvbi1idG5cIiAoY2xpY2spPVwibmF2aWdhdGV0b09yZ2FuaWF0aW9uU2V0dGluZ3MoKVwiICpuZ0lmPVwiaGFzT3JnVXNlckFjY2Vzc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8bWF0LWljb24gW3N2Z0ljb25dPVwiJ2hlcm9pY29uc19vdXRsaW5lOnVzZXItZ3JvdXAnXCI+PC9tYXQtaWNvbj4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxvZ291dC1sYWJlbFwiPk9yZ2FuaXphdGlvbiBTZXR0aW5nczwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gY2xhc3M9XCJ1c2VyLWxvZ291dC1idG4gYmlsbGluZy1idG5cIiAoY2xpY2spPVwibmF2aWdhdGVUb0JpbGxpbmcoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8bWF0LWljb24gW3N2Z0ljb25dPVwiJ2hlcm9pY29uc19vdXRsaW5lOmNyZWRpdC1jYXJkJ1wiPjwvbWF0LWljb24+IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsb2dvdXQtbGFiZWxcIj5CaWxsaW5nPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWRpdmlkZXIgY2xhc3M9XCJteS0wXCI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIGNsYXNzPVwidXNlci1sb2dvdXQtYnRuXCIgKGNsaWNrKT1cInNpZ25PdXQoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8bWF0LWljb24gW3N2Z0ljb25dPVwiJ2hlcm9pY29uc19vdXRsaW5lOmxvZ291dCdcIj48L21hdC1pY29uPiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibG9nb3V0LWxhYmxlXCI+TG9nb3V0PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgIDwvbWF0LW1lbnU+XG5cblxuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDwhLS0gSGVhZGVyIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXBwLWxpc3QtbWFpbi1zdWJoZWFkZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcHAtbGlzdC1oZWFkZXIgcmVsYXRpdmUgZmxleCBmbGV4LTAgaXRlbXMtY2VudGVyIHotNDkgYm94LWJvcmRlciBweC00IHNtOnB4LTZcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWF1dG8gaXRlbXMtY2VudGVyIG1pbi13LTAgZ2FwLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGhvdmVyOmJnLWdyYXktMTAwIHAtMiByb3VuZGVkLWxnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cInN0YW5kYXJkXCIgY2xhc3M9XCJzbTp3LWZ1bGwgZmxleCBpdGVtcy1jZW50ZXIgb3JnYW5pemF0aW9uLW1hdC1zZWxlY3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBbKG5nTW9kZWwpXT1cInNlbGVjdGVkT3JnYW5pemF0aW9uXCIgcGxhY2Vob2xkZXI9XCJzZWxlY3QgT3JnYW5pemF0aW9uXCIgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdC10cmlnZ2VyIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXJcIiAqbmdJZj1cInNlbGVjdGVkT3JnYW5pemF0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwib3JnYW5pemF0aW9uSWNvblwiIGFsdD1cIlwiIFtzcmNdPVwiKHNlbGVjdGVkT3JnYW5pemF0aW9uLmljb24uaW5kZXhPZignaHR0cHM6Ly8nKSAhPT0gLTEpID8gc2VsZWN0ZWRPcmdhbml6YXRpb24uaWNvbiA6IGJhc2VVcmwgKyBzZWxlY3RlZE9yZ2FuaXphdGlvbi5pY29uXCIgb25FcnJvciA9XCJ0aGlzLnNyYz0nYXNzZXRzL2ljb25zL29yZ2FuaXphdGlvbi5zdmcnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9yZy1uYW1lXCIgW21hdFRvb2x0aXBdPVwic2VsZWN0ZWRPcmdhbml6YXRpb24ubmFtZVwiPiB7eyBzZWxlY3RlZE9yZ2FuaXphdGlvbi5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBDdXN0b20gYXJyb3cgaWNvbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPG1hdC1pY29uIGNsYXNzPVwiZHJvcGRvd24tYXJyb3dcIiBzdmdJY29uPVwiZHJvcGRvd24tYXJyb3dcIj48L21hdC1pY29uPiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzd2l0Y2ggZmxleCBwLTIgZ2FwLTIgcGwtNCBpdGVtcy1jZW50ZXIgY3Vyc29yLXBvaW50ZXIgXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gc3ZnSWNvbj1cImF4b19zd2l0Y2hcIiBjbGFzcz1cInN3aXRjaC1pY29uIGgtOCB3LThcIj48L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzd2l0Y2gtc3BhblwiPlN3aXRjaCBPcmdhbml6YXRpb248L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAgY2xhc3M9XCJvcmdhbml6YXRpb25MaXN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBvcmdhbml6YXRpb24gb2Ygb3JnYW5pemF0aW9uTGlzdDsgbGV0IG9yZ2FuaXphdGlvbkluZGV4ID0gaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIm9yZ2FuaXphdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic3dpdGNoQWNjb3VudChvcmdhbml6YXRpb24uaWQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZF09XCJzZWxlY3RlZE9yZ2FuaXphdGlvbi5pZCA9PT0gb3JnYW5pemF0aW9uLmlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcmctaWNvbi1zcGFuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cIm9yZ2FuaXphdGlvbkljb25cIiBhbHQ9XCJcIiBbc3JjXT1cIihvcmdhbml6YXRpb24uaWNvbi5pbmRleE9mKCdodHRwczovLycpICE9PSAtMSkgPyBvcmdhbml6YXRpb24uaWNvbiA6IGJhc2VVcmwgKyBvcmdhbml6YXRpb24uaWNvblwiIG9uRXJyb3IgPVwidGhpcy5zcmM9J2Fzc2V0cy9pY29ucy9vcmdhbml6YXRpb24uc3ZnJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic206dGV4dC1sZyB0ZXh0LXhzIGZvbnQtbWVkaXVtIG9yZy1uYW1lXCI+IHt7IG9yZ2FuaXphdGlvbi5uYW1lfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNtOnRleHQtbGcgdGV4dC14cyBmb250LW1lZGl1bSBtYWluLXRpdGxlXCI+TXkgQXBwczwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiaGFzQXBwQnVpbGRlclBlcm1pc3Npb24gJiYgIWlzUmVzdHJpY3RlZFVybCgpXCIgY2xhc3M9XCJwcmltYXJ5LWJ0biBheG8tZm9udCB3LTI4XCIgKGNsaWNrKT1cIm9wZW5DcmVhdGVBcHBEaWFsb2coKVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPkNyZWF0ZSBBcHA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBBcHAgTGlzdCB3aXRoIE92ZXJsYXkgLS0+XG4gICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIGZsZXgtYXV0byBhcHAtbGlzdCBoLWZ1bGwtYXBwTGlzdCBweC00IHB5LTUgc206cHktOCBvdmVyZmxvdy1hdXRvXCI+XG4gICAgICAgIDwhLS0gT3ZlcmxheSBmb3Igd2ViIHBvcnRhbCBhY2Nlc3MgLS0+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJzaG93V2ViUG9ydGFsQWNjZXNzT3ZlcmxheVwiIGNsYXNzPVwicGVybWlzc2lvbi1vdmVybGF5XCI+XG4gICAgICAgICAgICBZb3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGFjY2VzcyBXZWIgUG9ydGFsLlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYXBwTGlzdC5sZW5ndGg7IGVsc2Ugbm90RW1wdHlBcHBMaXN0XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXBwLWdyaWQgaXRlbXMtc3RhcnQgY2FyZC1ib2R5IHctZnVsbFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLW91dGVyLWRpdlwiICpuZ0Zvcj1cImxldCBhcHBEZXRhaWwgb2YgYXBwTGlzdDsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZnVzZS1jYXJkIGNsYXNzPVwiZnVzZS1jYXJkLWFwcCBmbGV4IGZsZXgtY29sIGdhcC0yIGZpbHRlci1saXN0XCIgW25nU3R5bGVdPVwieydiYWNrZ3JvdW5kJzogYXBwRGV0YWlsLmdyYWRpZW50fVwiIChjbGljayk9XCJvcGVuQXBwKGFwcERldGFpbC5hcHBWZXJzaW9uSWQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYXBwRGV0YWlsLnFyX3N0YXR1cyA9PT0gdHJ1ZSAmJiBzaG93UVJJY29uXCIgKGNsaWNrKT1cImRpc2FibGVRUkRpYWxvZyhhcHBEZXRhaWwuYXBwVmVyc2lvbklkLCBpKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1wiIGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIgYm9yZGVyLTAgcm91bmRlZC1mdWxsIHFyLWljb24gYmctd2hpdGUgYWJzb2x1dGUgdG9wLTQgcmlnaHQtNFwiICBbbmdDbGFzc109XCJ7J2FwcEhvdmVyJzogb3BlblBvcHVwTWVudSA9PT0gYXBwRGV0YWlsLmFwcFZlcnNpb25JZH1cIiBzdHlsZT1cInBhZGRpbmc6IC4zcmVtO1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgbWF0VG9vbHRpcD1cIkRpc2FibGUgUVJcIiAgc3JjPVwiYXNzZXRzL2ljb25zL2F4by9zY3VscHRvci9heG9fcXJjb2RlX25ldy5zdmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaC0zIHctMyBvYmplY3QtY292ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBjYXJkIGp1c3RpZnktYmV0d2VlblwiIHN0eWxlPVwibWFyZ2luLWxlZnQ6IC0yMHB4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkb3RzLXZlcnRpY2FsLWFwcFwiICpuZ0lmPVwic2hvd0RvdHNPcHRpb25cIiAgW25nQ2xhc3NdPVwieydhcHBIb3Zlcic6IG9wZW5Qb3B1cE1lbnUgPT09IGFwcERldGFpbC5hcHBWZXJzaW9uSWR9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtzZXRPcGVuUG9wdXBNZW51KGFwcERldGFpbC5hcHBWZXJzaW9uSWQpXCIgbWF0LWljb24tYnV0dG9uIFtkaXNhYmxlUmlwcGxlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwiY29udGV4dE1lbnVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIFtzdmdJY29uXT1cIidoZXJvaWNvbnNfc29saWQ6ZG90cy12ZXJ0aWNhbCdcIiBzdHlsZT1cImNvbG9yOiAjRkZGRkZGO1wiPjwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1tZW51ICNjb250ZXh0TWVudT1cIm1hdE1lbnVcIiBjbGFzcz1cImN1c3RvbWl6ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cInJlcG9ydC1tZW51XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJvcGVuUVJDb2RlRGlhbG9nKClcIiAgY2xhc3M9XCJweS0wIHBsLTQgcHItNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cImFzc2V0cy9pY29ucy9vcHRpb25zLW1vYmlsZS5zdmdcIiBhbHQ9XCJcIiBjbGFzcz1cImgtNiB3LTYgaW5saW5lLWJsb2NrIG1yLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+VXNlIE9uIE1vYmlsZTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cInJlcG9ydC1tZW51XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJvcGVuRGVsZXRlQXBwRGlhbG9nKGFwcERldGFpbC5hcHBWZXJzaW9uSWQpXCIgIGNsYXNzPVwicHktMCBwbC00IHByLTZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCJhc3NldHMvaWNvbnMvb3B0aW9ucy1kZWxldGUuc3ZnXCIgYWx0PVwiXCIgY2xhc3M9XCJoLTYgdy02IGlubGluZS1ibG9jayBtci0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPkRlbGV0ZTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1tZW51PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1pbm5lci1kaXZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZGFzaGJvYXJkLWljb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImJhc2VVcmwgKyBhcHBEZXRhaWwuaWNvblwiIG9uRXJyb3IgPVwidGhpcy5zcmM9J2h0dHBzOi8vc3RhdGljLmF4b25hdG9yLmNvbS9zdGF0aWMvZGVmYXVsdF9pY29ucy9hcHAucG5nJ1wiIGFsdD1cIkxvZ28gaW1hZ2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcHAtaW5mb1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmxvY2sgYXBwLXRpdGxlLXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcHBfdGl0bGUgZm9udC1tZWRpdW0gbGVhZGluZy10aWdodCBheG8tZm9udFwiIFttYXRUb29sdGlwXT1cImFwcERldGFpbC5uYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3thcHBEZXRhaWwubmFtZX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcHBfdmVyc2lvbiB3LWZ1bGwgbGVhZGluZy10aWdodCB0ZXh0LXhzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2IHt7YXBwRGV0YWlsLnZlcnNpb24uc3BsaXQoJy4nKVswXX19Lnt7cGFkWmVybyhhcHBEZXRhaWwubWlub3JWZXJzaW9uKX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0LW9wZW4gZmxleCBqdXN0aWZ5LWVuZCB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kIHNwYWNlLXgtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgKm5nSWY9XCJzaG93Q3VzdG9taXplXCIgcm91dGVyTGluaz1cIlwiIGNsYXNzPVwiY3VzdG9taXplIHRleHQtbGVmdCBsZWFkaW5nLXRpZ2h0IHRleHQteHNcIj5DdXN0b21pemU8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwib3Blbi1idXR0b25cIj5PcGVuPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZnVzZS1jYXJkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICBcbiAgICA8L2Rpdj5cbiAgICA8bmctdGVtcGxhdGUgI25vdEVtcHR5QXBwTGlzdD5cbiAgICAgICAgPCEtLSBpZiBhcHAgbGlzdCBpcyBlbXB0eSAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZmxleC1hdXRvIG1pbi13LTAgcmVsYXRpdmUgaXRlbXMtY2VudGVyXCIgI25vdEVtcHR5QXBwTGlzdD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXIgZmxleCBmbGV4LWNvbCBteS1hdXRvIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBuby1hcHAtY3JlYXRlZFwiPlxuICAgICAgICAgICAgICAgIDxoMj5ObyBhcHAgY3JlYXRlZCB5ZXQhPC9oMj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxhcHAtY29tbW9uLWZvb3RlciBbc2hvd0FkZEJ0bl09XCJzaG93QWRkQnRuXCIgW3Nob3dVcGdyYWRlQnRuXT1cInRydWVcIj48L2FwcC1jb21tb24tZm9vdGVyPlxuICAgIDwhLS0gPGRpdiBjbGFzcz1cImZpeGVkIGJvdHRvbS0wIGZsZXggZmxleC0wIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LXN0YXJ0IHctZnVsbCBoLTE0IHB4LTQgbWQ6cHgtNiB6LTQ5IGJnLXdoaXRlIGFwcC1saXN0LWZvb3RlclwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtbWVkaXVtIHRleHQtc2Vjb25kYXJ5XCI+QXhvbmF0b3IgJmNvcHk7IHt7Y3VycmVudFllYXJ9fTwvc3Bhbj5cbiAgICA8L2Rpdj4gLS0+XG48L2Rpdj5cbiJdfQ==
1193
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2F4LWNvbW1vbi11aS1saWIvc3JjL2xpYi9hcHAtbGlzdC9hcHAtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvYXgtY29tbW9uLXVpLWxpYi9zcmMvbGliL2FwcC1saXN0L2FwcC1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGlDQUFpQztBQUNqQyx1REFBdUQ7QUFDdkQsMEJBQTBCO0FBQzFCLHFFQUFxRTtBQUVyRSxPQUFPLEVBQUUsU0FBUyxFQUFVLGlCQUFpQixFQUFhLEtBQUssRUFBRSxNQUFNLEVBQWlCLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0osT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDN0QsT0FBTyxFQUFFLE1BQU0sRUFBcUIsTUFBTSxpQkFBaUIsQ0FBQztBQUM1RCxPQUFPLEVBQWMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2RCxPQUFPLEVBQUUsVUFBVSxFQUFPLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzdGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFHeEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDekQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JE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c0I7UUEwQjlHLGdCQUFrQztRQUFsQyxrREFBa0M7UUFDSyxlQUEwQjtRQUExQiwrQ0FBMEI7UUFhNUMsZUFBcUI7UUFBckIsOENBQXFCO1FBZ0JyRCxlQUFtRDtRQUFuRCw0RUFBbUQ7UUFhbEUsZUFBZ0M7UUFBaEMscURBQWdDO1FBSXZCLGVBQXNCO1FBQXRCLHlDQUFzQixrQkFBQTtRQW9FdEIsZUFBeUI7UUFBekIsMkNBQXlCLHdCQUFBOztzRUR2Sm5DLGdCQUFnQixXQUFoQixnQkFBZ0IsbUJBZGYsTUFBTTt1RkFjUCxnQkFBZ0I7Y0FmNUIsVUFBVTtlQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25COztjQUNBLFNBQVM7MkJBQ0UsY0FBYyxpQkFHVCxpQkFBaUIsQ0FBQyxJQUFJLGFBQzFCO29CQUNUO3dCQUNFLE9BQU8sRUFBRSxpQkFBaUI7d0JBQzFCLFFBQVEsRUFBRSxFQUFFLGlCQUFpQixFQUFFLGlDQUFpQyxFQUFFO3FCQUNuRTtpQkFDRjsra0JBR1EsVUFBVTtrQkFBbEIsS0FBSztZQUNHLE9BQU87a0JBQWYsS0FBSztZQUNHLE9BQU87a0JBQWYsS0FBSztZQUNHLGdCQUFnQjtrQkFBeEIsS0FBSztZQUNHLG9CQUFvQjtrQkFBNUIsS0FBSztZQUNHLElBQUk7a0JBQVosS0FBSztZQUNHLFFBQVE7a0JBQWhCLEtBQUs7WUFDRyxnQkFBZ0I7a0JBQXhCLEtBQUs7WUFDRyxVQUFVO2tCQUFsQixLQUFLO1lBQ0csY0FBYztrQkFBdEIsS0FBSztZQUNHLGFBQWE7a0JBQXJCLEtBQUs7WUFDRyxVQUFVO2tCQUFsQixLQUFLO1lBQ0ksa0JBQWtCO2tCQUEzQixNQUFNO1lBQ0csWUFBWTtrQkFBckIsTUFBTTtZQUNHLGVBQWU7a0JBQXhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBhcnJvdy1wYXJlbnMgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9tZW1iZXItb3JkZXJpbmcgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJhZGl4ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtZnVuY3Rpb24tcmV0dXJuLXR5cGUgKi9cblxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIFZpZXdFbmNhcHN1bGF0aW9uLCBPbkRlc3Ryb3ksIElucHV0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIEV2ZW50RW1pdHRlciwgQ2hhbmdlRGV0ZWN0b3JSZWYsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1BVF9TRUxFQ1RfQ09ORklHIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcbmltcG9ydCB7IFJvdXRlciAsICBOYXZpZ2F0aW9uRXh0cmFzfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQXhvU25hY2tCYXJTZXJ2aWNlLCBBeG9TbmFja0JhclR5cGUgfSBmcm9tICcuLi9heG8tc25hY2stYmFyL2F4by1zbmFjay1iYXIuc2VydmljZSc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uL2NvcmUvYXV0aC9hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuLi9jb3JlL3VzZXIvdXNlci5zZXJ2aWNlJztcbmltcG9ydCB7IFVzZXIgfSBmcm9tICcuLi9jb3JlL3VzZXIvdXNlci50eXBlcyc7XG5pbXBvcnQgeyBBcHBMaXN0RHRvIH0gZnJvbSAnLi9hcHAtbGlzdC1kdG8nO1xuaW1wb3J0IHsgTXlBcHBMaXN0U2VydmljZSB9IGZyb20gJy4vbXktYXBwLWxpc3Quc2VydmljZSc7XG5pbXBvcnQgeyBPcmdhbml6YXRpb25MaXN0RHRvIH0gZnJvbSAnLi9vcmdhbml6YXRpb24tbGlzdC1kdG8nO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IEZsYXR0ZW5TZXJ2aWNlIH0gZnJvbSAnLi4vZmxhdHRlbi1tb2R1bGUvZmxhdHRlbi5zZXJ2aWNlJztcbmltcG9ydCB7IElGbGF0dGVuIH0gZnJvbSAnLi4vY29tbW9uLXV0aWxzL2lGbGF0dGVuJztcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgQ29va2llU2VydmljZSB9IGZyb20gJ25neC1jb29raWUtc2VydmljZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBFbmxpZ2h0ZW5MaWJNb2R1bGUgfSBmcm9tICcuLi9lbmxpZ2h0ZW4tbGliL2VubGlnaHRlbi1saWIubW9kdWxlJztcbmltcG9ydCB7IFFyZGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vcXJkaWFsb2cvcXJkaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IExvZ2dpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbG9nZ2luZy5zZXJ2aWNlJztcbmltcG9ydCB7IExvYWRpbmdEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi9sb2FkaW5nLWRpYWxvZy9sb2FkaW5nLWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IExvYWRpbmdBcHBpbnN0YWxsQ29tcG9uZW50IH0gZnJvbSAnLi4vbG9hZGluZy1hcHBpbnN0YWxsL2xvYWRpbmctYXBwaW5zdGFsbC5jb21wb25lbnQnOyBcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tICcuLi9jb21tb24uc2VydmljZSc7XG5pbXBvcnQgeyBTdWNjZXNzRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vc3VjY2Vzcy1kaWFsb2cvc3VjY2Vzcy1kaWFsb2cuY29tcG9uZW50JzsgXG5pbXBvcnQgeyB0YWtlLCAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBmb3JrSm9pbiwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGxvY2FsZSB9IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBBcHBDcmVhdGVEaWFsb2dDb21wb25lbnRDb21wb25lbnQgfSBmcm9tICcuLi9hcHAtY3JlYXRlLWRpYWxvZy1jb21wb25lbnQvYXBwLWNyZWF0ZS1kaWFsb2ctY29tcG9uZW50LmNvbXBvbmVudCc7IFxuXG4vL2ltcG9ydCB7IENvbnNvbGUgfSBmcm9tICdjb25zb2xlJztcbmltcG9ydCB7IENvbW1vbkxpYkNvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vY29tbW9uLWxpYi1jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGF0YVZpZXdGaWx0ZXJzU2VydmljZSB9IGZyb20gJy4uL2RhdGEtdmlldy1saWIvZGF0YS12aWV3LWZpbHRlcnMvZGF0YS12aWV3LWZpbHRlcnMuc2VydmljZSc7XG5pbXBvcnQgeyBDb25maXJtYXRpb25Nb2RhbENvbXBvbmVudCB9IGZyb20gJy4uL3NoYXJlZC9jb21maXJtYXRpb24tbW9kYWwvY29uZmlybWF0aW9uLW1vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTdWJzY3JpYmVkUGxhbk5hbWUgfSBmcm9tICcuLi9zdWJzY3JpYmVkUGxhbk5hbWUuc2VydmljZSc7XG5pbXBvcnQgeyBTdHJpcGVTZXJ2aWNlIH0gZnJvbSAnLi4vc3RyaXBlLnNlcnZpY2UnO1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItYXBwLWxpc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vYXBwLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9hcHAtbGlzdC5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBNQVRfU0VMRUNUX0NPTkZJRyxcbiAgICAgIHVzZVZhbHVlOiB7IG92ZXJsYXlQYW5lbENsYXNzOiAnb3JnYW5pemF0aW9uLWxpc3Qtb3ZlcmxheS1wYW5lbCcgfSxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBcHBMaXN0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBjdXJyZW50T3JnOnN0cmluZztcbiAgQElucHV0KCkgYXBwTGlzdDogQXJyYXk8QXBwTGlzdER0bz47XG4gIEBJbnB1dCgpIGJhc2VVcmw6IHN0cmluZztcbiAgQElucHV0KCkgb3JnYW5pemF0aW9uTGlzdDogQXJyYXk8T3JnYW5pemF0aW9uTGlzdER0bz4gPSBbXTtcbiAgQElucHV0KCkgc2VsZWN0ZWRPcmdhbml6YXRpb246IE9yZ2FuaXphdGlvbkxpc3REdG87XG4gIEBJbnB1dCgpIHVzZXI6IFVzZXI7XG4gIEBJbnB1dCgpIGxpc3RUeXBlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHNob3dDcmVhdGVCdXR0b246Ym9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzaG93UVJJY29uOmJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc2hvd0RvdHNPcHRpb246Ym9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzaG93Q3VzdG9taXplOmJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc2hvd0FkZEJ0bjpib29sZWFuID0gZmFsc2U7XG4gIEBPdXRwdXQoKSBzd2l0Y2hBY2NvdW50RXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG9wZW5BcHBFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgdXBkYXRlTGlzdEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIC8vIHVzZXI6IFVzZXI7XG4gIGlzQXBwQ2hhbmdlZEFmdGVyUHVibGlzaDogYm9vbGVhbiA9IGZhbHNlO1xuICB1c2VyTmFtZTogc3RyaW5nO1xuICBhcHBWZXJzaW9uSWQ6IG51bWJlcjtcbiAgdXNlckVtYWlsOiBzdHJpbmc7XG4gIGZ1bGxWZXJzaW9uOiBzdHJpbmc7XG4gIGZ1bGxWZXJzaW9uczogc3RyaW5nW10gPSBbXTtcbiAgdXNlckltYWdlOiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZyA9ICcnO1xuICBtaW5vclZlcnNpb246IHN0cmluZyA9ICcnO1xuICBhcHBJZDogc3RyaW5nID0nJztcbiAgYnVpbGRlclVybDogc3RyaW5nO1xuICBvcGVuUG9wdXBNZW51OiBudW1iZXI7XG4gIGdyYWRpZW50cyA9IFtcbiAgICAncmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA4MCUgMjAlLCAjREI2RDgxLCAjQkY0NTgxKScsXG4gICAgJ3JhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgODAlIDIwJSwgIzQ0OTFEOSwgIzQ1NTlCRiknLFxuICAgICdyYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDgwJSAyMCUsICNFN0E3NzksICNBQTU1MjUpJyxcbiAgICAncmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA4MCUgMjAlLCAjNDREOTUzLCAjMEQ5MjEyKSdcbiAgXTtcbiAgY3VycmVudFVybCA9IGRvY3VtZW50LlVSTDtcbiAgYmFzZVVzcmwgPSBkb2N1bWVudC5iYXNlVVJJO1xuICByZWdleCA9IC9cXC9hcHBzXFwvKFxcZCspXFwvKFxcdyspLztcbiAgbWF0Y2ggPSB0aGlzLmN1cnJlbnRVcmwubWF0Y2godGhpcy5yZWdleCk7XG5cbiAgZGF0YSA9IHt9O1xuICBwcmV2aW91c09yZzpzdHJpbmc7XG5cbiAgLypcbiAgICAgKiBTdWJqZWN0IG9iamVjdCB3aGljaCBoZWxwcyB1bnN1YnNjcmliZSBhbGwgdGhlIHN1YnNjcmliZWQgb2JqZWN0cyBpbiB0aGUgY29tcG9uZW50XG4gICAgICovXG4gIHByaXZhdGUgX3Vuc3Vic2NyaWJlQWxsOiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdDxhbnk+KCk7XG4gIG9yZ2FuaXphdG9uSWQ6IG51bWJlcjtcbiAgdXNlclBlcm1pc3Npb25zOiBzdHJpbmdbXSA9IFtdOyAvLyBWYXJpYWJsZSB0byBob2xkIHVzZXIgcGVybWlzc2lvbnNcbiAgaGFzT3JnVXNlckFjY2VzczogYm9vbGVhbjtcbiAgY3VycmVudEFwcFZlcnNpb25JZDogc3RyaW5nO1xuICBzaG93V2ViUG9ydGFsQWNjZXNzT3ZlcmxheTogYm9vbGVhbiA9IGZhbHNlOyAvLyBGbGFnIHRvIGNvbnRyb2wgb3ZlcmxheSBkaXNwbGF5XG4gIHByaXZhdGUgaGFzQ2FsbGVkR2V0VXNlclBlcm1pc3Npb25zOiBib29sZWFuID0gZmFsc2U7IC8vIEZsYWcgdG8gdHJhY2sgaWYgdGhlIGZ1bmN0aW9uIGhhcyBiZWVuIGNhbGxlZFxuICBwZXJtaXNzaW9uczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxuICAgIHByaXZhdGUgX2NoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIF91c2VyU2VydmljZTogVXNlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb21tb25MaWJDb25maWc6IENvbW1vbkxpYkNvbmZpZ3VyYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgX21wQXBwTGlzdFNlcnZpY2U6IE15QXBwTGlzdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBfYXhvU25hY2tCYXI6IEF4b1NuYWNrQmFyU2VydmljZSxcbiAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLFxuICAgIHByaXZhdGUgX2ZsYXR0ZW5TZXJ2aWNlOiBGbGF0dGVuU2VydmljZSxcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsIC8vIEluamVjdCBIdHRwQ2xpZW50XG4gICAgcHJpdmF0ZSBfaHR0cENsaWVudDogSHR0cENsaWVudCxcbiAgICBwcml2YXRlIGNvb2tpZVNlcnZpY2U6IENvb2tpZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIF9sb2dnaW5nU2VydmljZSA6IExvZ2dpbmdTZXJ2aWNlLFxuICAgIHByaXZhdGUgX2NvbW1vblNlcnZpY2U6Q29tbW9uU2VydmljZSxcbiAgICBwcml2YXRlIF9kYXRhVmlld0ZpbHRlcnNTZXJ2aWNlOiBEYXRhVmlld0ZpbHRlcnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgX3N1YnNjcmliZWRQbGFuTmFtZTogU3Vic2NyaWJlZFBsYW5OYW1lLFxuICAgIHByaXZhdGUgc3RyaXBlU2VydmljZTogU3RyaXBlU2VydmljZSxcblxuICAgIFxuICApIHsgfVxuICAvKipcbiAgICogR2V0dGVyIGZvciBjdXJyZW50IHllYXJcbiAgICovXG4gIGdldCBjdXJyZW50WWVhcigpOiBudW1iZXIge1xuICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCk7XG4gIH1cblxuICBzZXRPcGVuUG9wdXBNZW51KGFwcElkKSB7XG4gICAgdGhpcy5vcGVuUG9wdXBNZW51ID0gYXBwSWQ7XG4gICAgY29uc3Qgb3ZlcmxheSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5jZGstb3ZlcmxheS1jb250YWluZXInKTtcbiAgICBvdmVybGF5LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgdGhpcy5vcGVuUG9wdXBNZW51ID0gdW5kZWZpbmVkO1xuICAgIH0pO1xuICB9XG5cbiAgb3BlblFSQ29kZURpYWxvZygpOiB2b2lkIHtcblxuICAgIGNvbnN0IHFyRGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihRcmRpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgd2lkdGg6ICcyNTBweCcsIC8vIEFkanVzdCB3aWR0aCBhcyBuZWVkZWRcbiAgICB9KTtcbiAgfVxuXG4gIG5hdmlnYXRldG9PcmdhbmlhdGlvbigpOiB2b2lkIHtcbiAgICBjb25zdCB1cmxNYXA6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgICAnbG9jYWxob3N0OjQyMDAnOiAnaHR0cHM6Ly9sb2NhbGhvc3Q6NDIwMC8nLFxuICAgICAgJ2xvY2FsaG9zdDo0MjAxJzogJ2h0dHBzOi8vbG9jYWxob3N0OjQyMDAvJyxcbiAgICAgICdhbmRyb21lZGEtYnVpbGRlci1xYS5heG9uYXRvci5jb20nOiAnaHR0cHM6Ly9hbmRyb21lZGEtYnVpbGRlci1xYS5heG9uYXRvci5jb20vJyxcbiAgICAgICdhbmRyb21lZGEtY29udGFpbmVyLXFhLmF4b25hdG9yLmNvbSc6ICdodHRwczovL2FuZHJvbWVkYS1idWlsZGVyLXFhLmF4b25hdG9yLmNvbS8nLFxuICAgICAgJ2J1aWxkZXIuYXhvbmF0b3IuY29tJzogJ2h0dHBzOi8vYnVpbGRlci5heG9uYXRvci5jb20vJyxcbiAgICAgICd3ZWIuYXhvbmF0b3IuY29tJzogJ2h0dHBzOi8vYnVpbGRlci5heG9uYXRvci5jb20vJ1xuICAgIH07XG4gICAgY29uc3QgdXJsOiBzdHJpbmcgPSB1cmxNYXBbd2luZG93LmxvY2F0aW9uLmhvc3RdIHx8ICcnO1xuICAgIGlmICh0aGlzLm1hdGNoKSB7XG4gICAgICBjb25zdCB1c2VyTGlzdFVybCA9IGBhcHBzLyR7dGhpcy5tYXRjaFsxXX0vdXNlcnNgOyAvLyBkeW5hbWljIHBhcnQgYmFzZWQgb24gbWF0Y2hcbiAgICAgIHdpbmRvdy5vcGVuKHVybCArIHVzZXJMaXN0VXJsLCAnX3NlbGYnKTsgLy8gb3BlbiBkeW5hbWljIFVSTFxuICAgIH0gZWxzZSB7XG4gICAgICB3aW5kb3cub3Blbih1cmwgKyAnb3JnYW5pemF0aW9uJywgJ19zZWxmJyk7IC8vIGZhbGxiYWNrIHRvIG9yZ2FuaXphdGlvbiByb3V0ZVxuICAgIH1cbiAgfSAgXG5cbiAgbmF2aWdhdGV0b09yZ2FuaWF0aW9uU2V0dGluZ3MoKTogdm9pZCB7XG4gICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlQnlVcmwoJ29yZ2FuaXphdGlvbi1zZXR0aW5ncycpO1xuICB9XG4gIFxuXG5cblxuICAvLyBkZWxldGVBcHAoYXBwSWQ6IHN0cmluZywgdmVyc2lvbjogc3RyaW5nKTogdm9pZCB7XG4gIC8vICAgdGhpcy5fbXBBcHBMaXN0U2VydmljZS5kZWxldGVBcHAoYXBwSWQsIHZlcnNpb24pXG4gIC8vICAgICAucGlwZShcbiAgLy8gICAgICAgdGFrZVVudGlsKHRoaXMuX3Vuc3Vic2NyaWJlQWxsKSxcbiAgLy8gICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgLy8gICAgICAgICBjb25zb2xlLmxvZygnRXJyb3Igb2NjdXJyZWQgd2hpbGUgZGVsZXRpbmcgYXBwOicsIGVycm9yKTtcbiAgLy8gICAgICAgICAvLyB0aGlzLl9zbmFja2JhclNldmljZS5vcGVuU25hY2tCYXIoJ0Vycm9yIG9jY3VycmVkIHdoaWxlIGRlbGV0aW5nIGFwcC4nLCBBeG9TbmFja0JhclR5cGUuZXJyb3IpO1xuICAvLyAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVycm9yKTtcbiAgLy8gICAgICAgfSlcbiAgLy8gICAgIClcbiAgLy8gICAgIC5zdWJzY3JpYmUoXG4gIC8vICAgICAgIC8vIHJlc3BvbnNlID0+IHRoaXMuaGFuZGxlRGVsZXRlU3VjY2VzcyhyZXNwb25zZSksXG4gIC8vICAgICAgIC8vIGVycm9yID0+IHRoaXMuaGFuZGxlRGVsZXRlRXJyb3IoZXJyb3IpXG4gIC8vICAgICApO1xuICAvLyB9XG5cbiAgLy8gQXNzdW1pbmcgX2RlbGV0ZVNlcnZpY2UgaGFzIGEgZGVsZXRlQXBwIG1ldGhvZCB0aGF0IGhhbmRsZXMgYXBwIGRlbGV0aW9uXG4gIC8vIEFsc28sIGFzc3VtaW5nIGhhbmRsZURlbGV0ZVN1Y2Nlc3MgYW5kIGhhbmRsZURlbGV0ZUVycm9yIGFyZSBtZXRob2RzIHRvIGhhbmRsZSBzdWNjZXNzIGFuZCBlcnJvciBzY2VuYXJpb3NcblxuICBwYWRaZXJvKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHZhciBwYWRkaW5nPScnO1xuICAgIGxldCBsZW5ndGg9dmFsdWUudG9TdHJpbmcoKS5sZW5ndGg7XG4gICAgaWYobGVuZ3RoPT0xKVxuICAgIHtcbiAgICAgIHBhZGRpbmc9JzAwJyt2YWx1ZVxuICAgIH1cbiAgICBlbHNlIGlmKGxlbmd0aD09MilcbiAgICB7XG4gICAgICBwYWRkaW5nPScwJyt2YWx1ZVxuICAgIH1cbiAgICBlbHNlIGlmKGxlbmd0aD09MylcbiAgICB7XG4gICAgICBwYWRkaW5nPXZhbHVlXG4gICAgfVxuICAgIHJldHVybiBwYWRkaW5nO1xuICB9XG5cbiAgcHVibGljIGhhc0FwcEJ1aWxkZXJQZXJtaXNzaW9uOiBib29sZWFuID0gZmFsc2U7XG5cbiAgZ2V0VXNlckRldGFpbHMoKTogdm9pZCB7XG4gICAgdGhpcy5fY29tbW9uU2VydmljZS5nZXRVc2VyRGV0YWlsKClcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fdW5zdWJzY3JpYmVBbGwpLFxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIHVzZXIgZGV0YWlsczonLCBlcnJvcik7XG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3IpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFwKCh1c2VyUmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHVzZXJQZXJtaXNzaW9ucyA9IHVzZXJSZXNwb25zZT8udWQ/LnBlcm1pc3Npb25zIHx8IFtdO1xuICAgICAgICAgIC8vIENoZWNrIGlmIFwiQVBQX0JVSUxERVJcIiBwZXJtaXNzaW9uIGV4aXN0c1xuICAgICAgICAgIHRoaXMuaGFzQXBwQnVpbGRlclBlcm1pc3Npb24gPSB1c2VyUGVybWlzc2lvbnMuaW5jbHVkZXMoXCJBUFBfQlVJTERFUlwiKSAmJiB1c2VyUGVybWlzc2lvbnMuaW5jbHVkZXMoXCJBQ0NFU1NfV0VCX1BPUlRBTFwiKTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uT3B0aW9ucyA9IHtcbiAgICAgICAgICBhY2NvdW50SWQ6IHJlc3BvbnNlLnVkLmxhc3R1c2VkX2FjY291bnRcbiAgICAgICAgfTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMuc3RyaXBlU2VydmljZS5nZXRTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uT3B0aW9ucykuc3Vic2NyaWJlKFxuICAgICAgICAgIChzdWJzY3JpcHRpb25SZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ1N1YnNjcmlwdGlvbiBkZXRhaWxzOicsIHN1YnNjcmlwdGlvblJlc3BvbnNlKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKHN1YnNjcmlwdGlvblJlc3BvbnNlICYmIHN1YnNjcmlwdGlvblJlc3BvbnNlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uSW5mbyA9IHN1YnNjcmlwdGlvblJlc3BvbnNlWzBdO1xuICAgICAgICAgICAgICBjb25zdCBwcm9kdWN0T3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICBQcm9kdWN0SWQ6IHN1YnNjcmlwdGlvbkluZm8uaXRlbXNbMF0ucHJvZHVjdElkXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICB0aGlzLnN0cmlwZVNlcnZpY2UuZ2V0UHJvZHVjdERldGFpbHMocHJvZHVjdE9wdGlvbnMpLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICAocHJvZHVjdFJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9zdWJzY3JpYmVkUGxhbk5hbWUuc3Vic2NyaWJlZFBsYW5OYW1lID0gcHJvZHVjdFJlc3BvbnNlLm5hbWU7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIHByb2R1Y3QgZGV0YWlsczonLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBzdWJzY3JpcHRpb24gZGV0YWlsczonLCBlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfSk7XG4gIH1cbiAgXG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5nZXRVc2VyUGVybWlzc2lvbnMoKTtcbiAgIFxuICAgIC8vIHRoaXMuY3VycmVudEFwcFZlcnNpb25JZCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLnNwbGl0KFwiL1wiKVs0XTtcbiAgICAvLyB0aGlzLl9uYXZpZ2F0aW9uLnVwZGF0ZUNsYXNzaWNOYXZpZ2F0aW9uUm91dGVzKHRoaXMuY3VycmVudEFwcFZlcnNpb25JZC50b1N0cmluZygpKTtcblxuICAgIC8vIEZldGNoIHVzZXIgZGV0YWlsc1xuICAgIFxuICAgIFxuICAgIGlmICh0aGlzLnVzZXIpIHtcbiAgICAgIHRoaXMudXNlckVtYWlsID0gdGhpcy51c2VyLmVtYWlsO1xuICAgICAgdGhpcy51c2VyTmFtZSA9IHRoaXMudXNlclsnZm5hbWUnXSArICcgJyArIHRoaXMudXNlclsnbG5hbWUnXTtcbiAgICAgIHRoaXMudXNlckltYWdlID0gdGhpcy51c2VyWyd1aW1nJ107XG4gICAgfVxuXG4gICAgdGhpcy5nZXRVc2VyRGV0YWlscygpO1xuICAgIFxuICAvL0FYRS1JNjM3NlxuICAvL0lzc3VlIDogUGFyYW1ldGVyaXplZCB1cmwgd2FzIG5vdCBtYWludGFpbiAoYXBwIGluc3RhbGxhdGlvbiksIGF1dGhvcml6YXRpb24gY2FsbCBzb21laG93IGxvc2VzIHRoZSBwYXJhbWV0ZXJzXG4gIC8vdXJsIHN0b3JhZ2UgaXMgbWFpbnRhaW5lZCBieSB0aGUgbmFtZSBcImFwcG5hbWVcIlxuICAvL0l0IGlzIHNldCBpbiBhdXRoLnJlc29sdmVyIGFuZCByZW1vdmVkIGhlcmVcbiAgLy9pZiBhcHBuYW1lIGV4aXN0IGluIHNlc3Npb24gdXNlZCB0aGUgc3RvcmVkIG5hbWUsIGlmIG5vdCB1c2VkIHRoZSB2YWx1ZSBmcm9tIHRoZSB1cmxcbiAgLy9cbnZhciBhcHBOYW1lY2hlY2s9bG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2FwcG5hbWUnKTtcbi8vY29uc29sZS5sb2coXCIhMTEzXCIpO1xuLy8gaWYoYXBwTmFtZWNoZWNrIT09bnVsbClcbi8vIHtcbi8vICAgaWYoYXBwTmFtZWNoZWNrPT1cIi9hcHBzXCIpXG4vLyAgIHtcbi8vICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcImFwcG5hbWVcIik7XG4vLyAgIH1cbi8vIH1cbi8vIGFwcE5hbWVjaGVjaz1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYXBwbmFtZScpO1xuLy9jb25zb2xlLmxvZyhcIiExMTNcIik7XG4vL2NvbnNvbGUubG9nKGFwcE5hbWVjaGVjaylcbiAgLy9cbnZhciBhcHBOYW1lY2hlY2s9bG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2FwcG5hbWUnKTtcbnZhciBhcHBQdWJsaXNoU3RhdHVzPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCdwdWJsaXNoc3RhdHVzJyk7XG4vL2NvbnNvbGUubG9nKFwiITExM1wiKTtcbi8vIGlmKGFwcE5hbWVjaGVjayE9PW51bGwpXG4vLyB7XG4vLyAgIGlmKGFwcE5hbWVjaGVjaz09XCIvYXBwc1wiKVxuLy8gICB7XG4vLyAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJhcHBuYW1lXCIpO1xuLy8gICB9XG4vLyB9XG4vLyBhcHBOYW1lY2hlY2s9bG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2FwcG5hbWUnKTtcbi8vY29uc29sZS5sb2coXCIhMTEzXCIpO1xuLy9jb25zb2xlLmxvZyhhcHBOYW1lY2hlY2spXG4gIGxldCBhcHBuYW1lOnN0cmluZztcbiAgbGV0IGNhdGVnb3J5OnN0cmluZztcblxuLy8gY29uc3QgdXJsUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcbi8vIGNvbnN0IGFwcE5hbWVDaGVjayA9IHVybFBhcmFtcy5nZXQoJ2FwcG5hbWUnKTtcbi8vIGNvbnNvbGUubG9nKGFwcE5hbWVDaGVjaylcbi8vIGNvbnN0IGNhdGVnb3J5ID0gdXJsUGFyYW1zLmdldCgnY2F0ZWdvcnknKTtcbi8vIGNvbnNvbGUubG9nKGNhdGVnb3J5KWlcblxuXG5sZXQgSW5zdGFsbEFwcE5hbWU6c3RyaW5nO1xuSW5zdGFsbEFwcE5hbWU9bG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJJbnN0YWxsZWRBcHBOYW1lXCIpO1xuaWYoSW5zdGFsbEFwcE5hbWUhPW51bGwpe1xuY29uc3QgY2FwaXRhbGl6ZWRBcHBOYW1lOiBzdHJpbmcgPSB0aGlzLmNhcGl0YWxpemVXb3JkcyhJbnN0YWxsQXBwTmFtZS5yZXBsYWNlKC8tL2csICcgJykpO1xudGhpcy5jaGVja0FuZFB1Ymxpc2hBcHAoY2FwaXRhbGl6ZWRBcHBOYW1lKTtcbmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFwiSW5zdGFsbGVkQXBwTmFtZVwiKTtcbn1cbmlmIChhcHBOYW1lY2hlY2sgIT09IG51bGwpIHtcbiAgLy9cbiAgY29uc3QgdXJsUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhhcHBOYW1lY2hlY2suc3BsaXQoJz8nKVsxXSk7XG4gIGNvbnN0IGFwcE5hbWVUZW1wID0gdXJsUGFyYW1zLmdldCgnYXBwbmFtZScpO1xuICBjb25zdCBjYXRlZ29yeVRlbXAgPSB1cmxQYXJhbXMuZ2V0KCdjYXRlZ29yeScpO1xuICAvL2NvbnN0IGFwcE5hbWVUZW1wID0gYXBwTmFtZWNoZWNrLnNwbGl0KCc9JylbMV0uc3BsaXQoJyYnKVswXTsgLy8gRXh0cmFjdGluZyBhcHBuYW1lIHZhbHVlIGZyb20gVVJMIHBhcmFtZXRlclxuICAvL2xvY2FsU3RvcmFnZS5zZXRJdGVtKFwiSW5zdGFsbGVkQXBwTmFtZVwiLGFwcE5hbWVUZW1wKVxuLy8gRXh0cmFjdGluZyBjYXRlZ29yeSB2YWx1ZSBmcm9tIFVSTCBwYXJhbWV0ZXJcbiAvLyBjb25zdCBjYXRlZ29yeVRlbXAgPSBhcHBOYW1lY2hlY2suc3BsaXQoJ2NhdGVnb3J5PScpWzFdO1xuICAvL1xuICBpZiAoYXBwTmFtZVRlbXApIHtcbiAgICB0aGlzLmluc3RhbGxBcHAoYXBwTmFtZVRlbXAsIGNhdGVnb3J5VGVtcCkudGhlbigoKSA9PiB7XG4gICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcImFwcG5hbWVcIik7XG4gICAgfSkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgLy8gSGFuZGxlIGVycm9yIGlmIGluc3RhbGxBcHAgZmFpbHNcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluc3RhbGxpbmcgYXBwOicsIGVycm9yKTtcbiAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFwiYXBwbmFtZVwiKTtcbiAgICB9KTtcbiAgfVxuXG4vLyBsZXQgYXBwTmFtZTogc3RyaW5nOyBcbi8vIGlmKGFwcE5hbWVjaGVjayE9PW51bGwpe1xuLy8gICBhcHBOYW1lPWFwcE5hbWVjaGVjay5zcGxpdCgnPScpWzFdLnNwbGl0KCclMkYnKVswXTtcbi8vICAgaWYgKGFwcE5hbWUpIHtcbi8vICAgICB0aGlzLmluc3RhbGxBcHAoYXBwTmFtZSwpLnRoZW4oKCkgPT4ge1xuLy8gICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJhcHBuYW1lXCIpO1xuICAgICAgXG4vLyAgICAgfSlcbi8vICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuLy8gICAgICAgLy8gSGFuZGxlIGVycm9yIGlmIGluc3RhbGxBcHAgZmFpbHNcbi8vICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluc3RhbGxpbmcgYXBwOicsIGVycm9yKTtcbi8vICAgICB9KTtcbi8vICAgfVxuICBcbiAgXG4gIH1cbiAgZWxzZXtcbiAgICAvLyBWYXJpYWJsZSB0byBzdG9yZSBhcHBuYW1lXG5cbiAgICBcbiAgICB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1zLnBpcGUoXG4gICAgICB0YWtlVW50aWwodGhpcy5fdW5zdWJzY3JpYmVBbGwpXG4gICAgKS5zdWJzY3JpYmUocGFyYW1zID0+IHtcbiAgICAgIGFwcG5hbWUgPSBwYXJhbXNbJ2FwcG5hbWUnXTtcbiAgICAgIC8vbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJJbnN0YWxsZWRBcHBOYW1lXCIsYXBwbmFtZSk7XG4gICAgICBjb25zb2xlLmxvZyhhcHBuYW1lKVxuICAgICAgY2F0ZWdvcnkgPSBwYXJhbXNbJ2NhdGVnb3J5J107XG4gICAgICBjb25zb2xlLmxvZyhjYXRlZ29yeSlcbiAgICBcbiAgICAgIGlmIChhcHBuYW1lKSB7XG4gICAgICAgIC8vIFNwbGl0IHRoZSBhcHBuYW1lIGF0IHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mICcvJ1xuICAgICAgICBjb25zdCBhcHBOYW1lUGFydHMgPSBhcHBuYW1lLnNwbGl0KCcvJywgMSk7XG4gICAgICAgIGNvbnN0IGFwcE5hbWUgPSBhcHBOYW1lUGFydHNbMF07IC8vIFN0b3JlIGFwcG5hbWVcbiAgICAgICAgLy9jb25zdCBjYXRlZ29yeSA9IGNhdGVnb3J5OyAvLyBTdG9yZSBjYXRlZ29yeVxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcImFwcE5hbWU9XCIrYXBwTmFtZSk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiY2F0ZWdvcnk9XCIrY2F0ZWdvcnkpO1xuICAgICAgICBcbiAgICAgICAgLy8gTmF2aWdhdGUgdG8gdGhlIHNhbWUgcm91dGUgd2l0aG91dCBhbnkgcXVlcnkgcGFyYW1ldGVyc1xuICAgICAgICBjb25zdCBuYXZpZ2F0aW9uRXh0cmFzOiBOYXZpZ2F0aW9uRXh0cmFzID0ge1xuICAgICAgICAgIHJlcGxhY2VVcmw6IHRydWUsXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCBuYXZpZ2F0aW9uRXh0cmFzKTtcbiAgICAgICAgXG5cbiAgICAgICAgaWYgKGFwcG5hbWUpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhhcHBuYW1lKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhjYXRlZ29yeSk7XG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJwdWJsaXNoc3RhdHVzXCIsXCJGYWxzZVwiKVxuICAgICAgICAgIHRoaXMuaW5zdGFsbEFwcChhcHBuYW1lLGNhdGVnb3J5KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIC8vIEhhbmRsZSBzdWNjZXNzZnVsIGluc3RhbGxhdGlvblxuICAgICAgICAgICAgY29uc29sZS5sb2coJ0FwcCBpbnN0YWxsZWQgTWV0aG9kIGNhbGxlZDonLCBhcHBuYW1lLCBjYXRlZ29yeSk7XG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcImFwcG5hbWVcIik7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgICAgLy8gSGFuZGxlIGVycm9yIGlmIGluc3RhbGxBcHAgZmFpbHNcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluc3RhbGxpbmcgYXBwOicsIGVycm9yKTtcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFwiYXBwbmFtZVwiKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIH1cbiAgICAgIC8vIH0gZWxzZSB7XG4gICAgICAvLyAgIGNvbnNvbGUuZXJyb3IoJ2FwcG5hbWUgb3IgY2F0ZWdvcnkgcXVlcnkgcGFyYW1ldGVyIGlzIG1pc3NpbmcnKTtcbiAgICAgIH19KTtcblxuICAgIH1cbiAgICBcbiAgICAvLyBvbmNlIHdlIGZpeCBpZGVudGl0eSBzZXJ2ZXIgQVBJLCB0aGlzIGNvZGUgd2lsbCBiZSBuZWVkZWQgYWdhaW5cbiAgICAvLyBTdWJzY3JpYmUgdG8gdXNlciBjaGFuZ2VzXG4gICAgLy8gdGhpcy5fdXNlclNlcnZpY2UudXNlciRcbiAgICAvLyAucGlwZSh0YWtlVW50aWwodGhpcy5fdW5zdWJzY3JpYmVBbGwpKVxuICAgIC8vIC5zdWJzY3JpYmUoKHVzZXI6IGFueSkgPT4ge1xuICAgIC8vICAgICB0aGlzLnVzZXIgPSB1c2VyO1xuICAgIC8vICAgICB0aGlzLnVzZXJFbWFpbCA9IHVzZXIuZW1haWw7XG4gICAgLy8gICAgIHRoaXMudXNlck5hbWUgPSB1c2VyLkZpcnN0TmFtZSArICcgJysgdXNlci5MYXN0TmFtZSA7XG4gICAgLy8gICAgIHRoaXMudXNlckltYWdlID0gdXNlci5waWN0dXJlO1xuICAgIC8vICAgICAvLyBNYXJrIGZvciBjaGVja1xuICAgIC8vICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAvLyB9KTtcblxuXG5cblxuICAgIGNvbnN0IHVybCA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3VybCcpO1xuICAgIGlmICh1cmwpIHtcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdXJsO1xuICAgICAgLy8gUmVtb3ZlIHNhdmVkIGRhdGEgZnJvbSBzZXNzaW9uU3RvcmFnZVxuICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgndXJsJyk7XG5cbiAgICAgIC8vIFJlbW92ZSBhbGwgc2F2ZWQgZGF0YSBmcm9tIHNlc3Npb25TdG9yYWdlXG4gICAgICBzZXNzaW9uU3RvcmFnZS5jbGVhcigpO1xuICAgIH1cblxuICB9XG5cbiAgXG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmKHRoaXMuY3VycmVudE9yZyE9dGhpcy5wcmV2aW91c09yZyl7XG4gICAgICB0aGlzLmdldFVzZXJQZXJtaXNzaW9ucygpO1xuICAgICAgdGhpcy5wcmV2aW91c09yZz10aGlzLmN1cnJlbnRPcmc7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzLmFwcExpc3QgJiYgY2hhbmdlcy5hcHBMaXN0LmN1cnJlbnRWYWx1ZSkge1xuICAgICAgdGhpcy5hc3NpZ25HcmFkaWVudHMoKTtcbiAgICB9XG4gIH1cblxuICBhc3NpZ25HcmFkaWVudHMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYXBwTGlzdCAmJiB0aGlzLmFwcExpc3QubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5hcHBMaXN0LmZvckVhY2goKGFwcCwgaW5kZXgpID0+IHtcbiAgICAgICAgYXBwLmdyYWRpZW50ID0gdGhpcy5ncmFkaWVudHNbaW5kZXggJSB0aGlzLmdyYWRpZW50cy5sZW5ndGhdO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENhbGwgYXBwcyBBcHAgVmVyc2lvbiBJZCByb3V0ZVxuICAgKlxuICAgKiBAcGFyYW0gYXBwVmVyc2lvbklkXG4gICAqL1xuICBvcGVuQXBwKGFwcFZlcnNpb25JZDogbnVtYmVyKTogdm9pZCB7XG4gICAgXG4gICAgY29uc3QgY3VycmVudFVybCA9IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW47IC8vIEdldCB0aGUgY3VycmVudCBVUkxcbiAgICAvLyBVcGRhdGVkIFVSTCBjaGVjayBsb2dpY1xuICAgIGlmIChjdXJyZW50VXJsLmluY2x1ZGVzKCdsb2NhbGhvc3Q6NDIwMCcpIHx8IGN1cnJlbnRVcmwuaW5jbHVkZXMoJ2J1aWxkZXIuYXhvbmF0b3IuY29tJykgfHwgY3VycmVudFVybC5pbmNsdWRlcygnYW5kcm9tZWRhLWJ1aWxkZXItcWEuYXhvbmF0b3IuY29tJykpIHtcbiAgICAgIFxuICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIHVzZXIgaXMgZGVmaW5lZCBhbmQgaGFzIGEgVXNlcklEXG4gICAgICBpZiAoIXRoaXMudXNlcikge1xuICAgICAgICAgIHRoaXMuX2F4b1NuYWNrQmFyLm9wZW5TbmFja0JhcignVXNlciBub3QgZm91bmQgb3Igbm90IGxvZ2dlZCBpbicsIEF4b1NuYWNrQmFyVHlwZS5lcnJvcik7XG4gICAgICAgICAgcmV0dXJuOyAvLyBFeGl0IHRoZSBtZXRob2QgaWYgdXNlciBpcyBub3QgYXZhaWxhYmxlXG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGZvciByZXF1aXJlZCBwZXJtaXNzaW9uc1xuICAgICAgY29uc3QgaGFzUmVxdWlyZWRQZXJtaXNzaW9uID0gdGhpcy5wZXJtaXNzaW9ucy5pbmNsdWRlcygnQVBQX0JVSUxERVInKSB8fCB0aGlzLnBlcm1pc3Npb25zLmluY2x1ZGVzKCdBUFBfSUFNJyk7XG4gICAgICBpZiAoIWhhc1JlcXVpcmVkUGVybWlzc2lvbikge1xuICAgICAgICAgIHRoaXMuX2F4b1NuYWNrQmFyLm9wZW5TbmFja0JhcignWW91IG5lZWQgZWl0aGVyIEFQUF9CVUlMREVSIG9yIEFQUF9JQU0gcGVybWlzc2lvbnMgdG8gcGVyZm9ybSB0aGlzIGFjdGlvbi4nLCBBeG9TbmFja0JhclR5cGUuZXJyb3IpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEaXJlY3RseSBvcGVuIHRoZSBhcHAgcmVnYXJkbGVzcyBvZiBVUkwgaWYgdGhlIGNvbmRpdGlvbnMgYXJlIG5vdCBtZXRcbiAgICB0aGlzLm9wZW5BcHBFdmVudC5lbWl0KGFwcFZlcnNpb25JZCk7XG4gIH1cblxuXG5cbiAgbmF2aWdhdGVUb0hvbWUoYXBwVmVyc2lvbklkOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGVCeVVybChgYXBwcy8ke2FwcFZlcnNpb25JZH0vaG9tZWApO1xuICB9XG5cbiAgLyoqXG4gICAqIGZ1bmN0aW9uIHVzZSB0byBTd2l0Y2ggdGhlIG9yZ2FuaXphdGlvblxuICAgKi9cbiAgc3dpdGNoQWNjb3VudChvcmdhbml6YXRpb25JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5zd2l0Y2hBY2NvdW50RXZlbnQuZW1pdChvcmdhbml6YXRpb25JZCk7XG4gICAgXG4gICBcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWduIG91dFxuICAgKi9cbiAgc2lnbk91dCgpOiB2b2lkIHtcbiAgICB0aGlzLl9sb2dnaW5nU2VydmljZS50cmFja0V2ZW50KCd1c2VyIGxvZ2dlZCBvdXQnLHtzdGVwIDogJ0J5ZSBCeWUgJyt0aGlzLnVzZXJOYW1lfSk7XG4gICAgdGhpcy5fYXV0aFNlcnZpY2Uuc2lnbk91dCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJpbGxpbmdcbiAgICovXG4gIG5hdmlnYXRlVG9CaWxsaW5nKCk6IHZvaWQge1xuICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZUJ5VXJsKCdwYXltZW50aW5mby9wcmljaW5nJylcbiAgICBcbiAgfVxuXG5cblxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8gQ3JlYXRlIEFwcHAvLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8qKlxuICAgKnRvIGNyZWF0ZSBuZXcgYXBwXG4gICAqL1xuICAgb3BlbkNyZWF0ZUFwcERpYWxvZygpOiB2b2lkIHtcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKEFwcENyZWF0ZURpYWxvZ0NvbXBvbmVudENvbXBvbmVudCwge1xuICAgICAgd2lkdGg6ICc2MDBweCcsXG4gICAgICBoZWlnaHQ6ICdhdXRvJyxcbiAgICAgIHBhbmVsQ2xhc3M6ICdjdXN0b20tZGlhbG9nLWNvbnRhaW5lcicsXG4gICAgICBiYWNrZHJvcENsYXNzOiAnY3VzdG9tLWRpYWxvZy1iYWNrZHJvcCdcbiAgICB9KTtcblxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICBjb25zdCB7IG5hbWUsIGRlc2NyaXB0aW9uIH0gPSByZXN1bHQ7XG5cbiAgICAgICAgdGhpcy5fYXhvU25hY2tCYXIub3BlblNuYWNrQmFyKCdDcmVhdGluZyBBcHAuLi4nLCBBeG9TbmFja0JhclR5cGUuaW5mbyk7XG4gICAgICAgIHRoaXMuY3JlYXRlQXBwKG5hbWUsIGRlc2NyaXB0aW9uKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNyZWF0ZUFwcChuYW1lOiBzdHJpbmcsIGRlc2NyaXB0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtRGF0YUZvclNlcnZpY2UgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBmb3JtRGF0YUZvclNlcnZpY2UuYXBwZW5kKCduYW1lJywgbmFtZSk7XG4gICAgZm9ybURhdGFGb3JTZXJ2aWNlLmFwcGVuZCgnZGVzY3JpcHRpb24nLCBkZXNjcmlwdGlvbik7XG5cbiAgICB0aGlzLl9tcEFwcExpc3RTZXJ2aWNlLmFkZEFwcEJhc2ljSW5mbyhmb3JtRGF0YUZvclNlcnZpY2UpLnRvUHJvbWlzZSgpXG4gICAgICAudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgIGlmIChyZXNwb25zZT8uYWRkQXBwQmFzaWNJbmZvPy5zdGF0dXMgPT09ICdzdWNjZXNzJyAmJiByZXNwb25zZS5hZGRBcHBCYXNpY0luZm8uYXBwPy5hcHB2ZXJzaW9uX2lkKSB7XG4gICAgICAgICAgLy90aGlzLl9uYXZpZ2F0aW9uLnVwZGF0ZUNsYXNzaWNOYXZpZ2F0aW9uUm91dGVzKHJlc3BvbnNlLmFkZEFwcEJhc2ljSW5mby5hcHAuYXBwdmVyc2lvbl9pZCk7XG4gICAgICAgICAgLy90aGlzLl9yb3V0ZXIubmF2aWdhdGUoWydhcHBzJywgcmVzcG9uc2UuYWRkQXBwQmFzaWNJbmZvLmFwcC5hcHB2ZXJzaW9uX2lkXSk7XG4gICAgICAgICAgXG4gICAgICAgICAgdGhpcy5fYXhvU25hY2tCYXIub3BlblNuYWNrQmFyKCdBcHAgY3JlYXRlZC4nLCBBeG9TbmFja0JhclR5cGUuc3VjY2Vzcyk7XG4gICAgICAgICAgdGhpcy5vcGVuQXBwKHJlc3BvbnNlLmFkZEFwcEJhc2ljSW5mby5hcHAuYXBwdmVyc2lvbl9pZClcbiAgICAgICAgfSBlbHNlIGlmIChyZXNwb25zZT8uYWRkQXBwQmFzaWNJbmZvPy5hcHAgPT09ICdhbHJlYWR5X2V4aXN0cycpIHtcbiAgICAgICAgICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ0FwcCBhbHJlYWR5IGV4aXN0cycsIEF4b1NuYWNrQmFyVHlwZS53YXJuaW5nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ09vcHMhIFNvbWV0aGluZyB3ZW50IHdyb25nJywgQXhvU25hY2tCYXJUeXBlLmVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGNyZWF0aW5nIGFwcDonLCBlcnJvcik7XG4gICAgICAgIHZhciBlcnJvck1lc3NhZ2UgPSAnT29wcyEgU29tZXRoaW5nIHdlbnQgd3JvbmcnXG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgIGlmIChlcnJvciA9PT0gJ0FYX0VSUl82NycpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9ICdPb3BzISBDYW5cXCd0IHJlYWNoIG91ciBzZXJ2ZXJzIPCfk6EuIFBsZWFzZSB3YWl0LCB3ZVxcJ2xsIG5vdGlmeSB5b3Ugc29vbi4nO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAgIHRoaXMuX2F4b1NuYWNrQmFyLm9wZW5TbmFja0JhcihlcnJvck1lc3NhZ2UsIEF4b1NuYWNrQmFyVHlwZS5lcnJvcik7XG4gICAgICB9KTtcbiAgfVxuLy9UcnlpbmcgdG8gaW1wbGVtZW50IHVybCBhcyB3ZWxsIGFzIGJ1dHRvbiBmdW5jdGlvbmFsaXR5IGZvciBpbnN0YWxsaW5nIGFwcFxuLy8gYXN5bmMgaW5zdGFsbEFwcCh1c2VySW5wdXQ/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgXG4vLyAgIGlmICghdXNlcklucHV0KSB7XG4vLyAgICAgdXNlcklucHV0ID0gcHJvbXB0KCdFbnRlciB0aGUgc3RyaW5nIHRvIHNlbmQgdG8gdGhlIEFQSTonKTtcbi8vICAgICBpZiAoIXVzZXJJbnB1dCkge1xuLy8gICAgICAgLy8gSWYgdXNlciBjYW5jZWxzIG9yIHByb3ZpZGVzIG5vIGlucHV0LCBkbyBub3RoaW5nXG4vLyAgICAgICByZXR1cm47XG4vLyAgICAgfVxuLy8gICB9XG5cbi8vICAgdGhpcy5fYXhvU25hY2tCYXIub3BlblNuYWNrQmFyKCdJbnN0YWxsaW5nIEFwcC4uLicsIEF4b1NuYWNrQmFyVHlwZS5pbmZvKTtcbiAgXG4gXG5jaGVja0FuZFB1Ymxpc2hBcHAoaW5zdGFsbGVkQXBwOiBzdHJpbmcpIHtcbiAgLy9cbiAgY29uc3QgYXBwTmFtZWNoZWNrID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2FwcG5hbWUnKTsgLy8gUmVwbGFjZSB3aXRoIHlvdXIgbG9naWMgdG8gZ2V0IGFwcE5hbWVjaGVja1xuICBjb25zdCBhcHBQdWJsaXNoU3RhdHVzID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3B1Ymxpc2hzdGF0dXMnKTsgLy8gUmVwbGFjZSB3aXRoIHlvdXIgbG9naWMgdG8gZ2V0IGFwcFB1Ymxpc2hTdGF0dXNcbiAgY29uc3QgYXBwSW5zdGFsbFN0YXR1cz1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnaW5zdGFsbHN0YXR1cycpXG5cbiAgIGlmIChhcHBOYW1lY2hlY2sgPT0gbnVsbCAmJiBhcHBQdWJsaXNoU3RhdHVzID09IFwiRmFsc2VcIiAmJiBhcHBJbnN0YWxsU3RhdHVzPT1cIlRydWVcIikge1xuICAgIGNvbnN0IGFwcElkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3B1Ymxpc2hBcHBJZERhdGEnKTtcbiAgICBjb25zdCBhcHBWZXJzaW9uID0gXCIxLjAwXCI7XG4gICAgY29uc3QgcHVibGlzaFN0YXR1cyA9IFwiUFwiO1xuICAgIGlmIChhcHBJZCkge1xuICAgICAgdGhpcy5fY29tbW9uU2VydmljZS5wdWJsaXNoYXBwKGFwcElkLCBhcHBWZXJzaW9uLCBwdWJsaXNoU3RhdHVzKS5zdWJzY3JpYmUoXG4gICAgICAgIHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAvLyBIYW5kbGUgdGhlIHJlc3BvbnNlIGlmIG5lZWRlZFxuICAgICAgICAgIGNvbnNvbGUubG9nKCdQdWJsaXNoIHJlc3BvbnNlOicsIHJlc3BvbnNlKTtcbiAgICAgICAgICAvLyBjb25zdCBhcHBOYW1lID0gaW5zdGFsbGVkQXBwIHx8ICdZb3VyIEFwcCc7XG4gICAgICAgICAgLy8gY29uc3QgYXBwVmVyc2lvbiA9ICcxLjAwMCc7XG4gICAgICAgICAgLy8gY29uc3Qgc3VjY2Vzc01lc3NhZ2UgPSBgQXBwOiAke2FwcE5hbWV9IHZlcnNpb24gJHthcHBWZXJzaW9ufSBpcyBwdWJsaXNoZWQgc3VjY2Vzc2Z1bGx5LmA7XG4gICAgICAgICAvLyB0aGlzLm9wZW5TdWNjZXNzRGlhbG9nKCd2ZXJzaW9uIHB1Ymxpc2hlZCBzdWNjZXNzZnVsbHkhJyk7XG4gICAgICAgICBjb25zdCBhcHBOYW1lID0gaW5zdGFsbGVkQXBwO1xuICAgICAgICAgY29uc3QgYXBwVmVyc2lvbiA9ICcxLjAwMCc7XG4gICAgICAgICBjb25zdCBib3hoZWFkaW5nPWBJbnN0YWxsZWRgXG4gICAgICAgICBjb25zdCBzdWNjZXNzTWVzc2FnZSA9IGBBcHA6ICR7YXBwTmFtZX0gdmVyc2lvbiAke2FwcFZlcnNpb259IGlzIGluc3RhbGxlZCBzdWNjZXNzZnVsbHkuIGA7XG4gICAgICAgICBjb25zdCBzdWNjZXNzRGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihTdWNjZXNzRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICAgICAgIHdpZHRoOiAnNTAwcHgnLFxuICAgICAgICAgICBkYXRhOiB7IG1lc3NhZ2U6IHN1Y2Nlc3NNZXNzYWdlICwgaGVhZGluZzpib3hoZWFkaW5nfSxcbiAgICAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlXG4gICAgICAgICB9KTtcbiAgICAgICAgICAvLyBSZW1vdmUgbG9jYWwgc3RvcmFnZSBpdGVtc1xuICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdwdWJsaXNoQXBwSWREYXRhJyk7XG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ3B1Ymxpc2hzdGF0dXMnKTtcbiAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnaW5zdGFsbHN0YXR1cycpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvciA9PiB7XG4gICAgICAgICAgLy8gSGFuZGxlIGVycm9yIGlmIG5lZWRlZFxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHB1Ymxpc2hpbmcgYXBwOicsIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbmZldGNoQXBwRGV0YWlscyhmbGF0dGVuOiBhbnkpIHtcbiAgaWYgKGZsYXR0ZW4gJiYgZmxhdHRlbi5hcHBWZXJzaW9uSWQpIHtcbiAgICB0aGlzLl9tcEFwcExpc3RTZXJ2aWNlLmZldGNoQXBwRGV0YWlscyhmbGF0dGVuLmFwcFZlcnNpb25JZCwgdGhpcy5jb21tb25MaWJDb25maWcuYXhvbmF0b3JYMVVybCkuc3Vic2NyaWJlKFxuICAgICAgKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgaXNBcHBDaGFuZ2VkQWZ0ZXJQdWJsaXNoID0gcmVzcG9uc2U/LmRhdGE/LmRldGFpbHM/LmlzX2FwcF9jaGFuZ2VkX2VkaXRlZF9hZnRlcl9wdWJsaXNoIHx8IGZhbHNlO1xuICAgICAgICB0aGlzLmlzQXBwQ2hhbmdlZEFmdGVyUHVibGlzaCA9IGlzQXBwQ2hhbmdlZEFmdGVyUHVibGlzaDtcblxuICAgICAgICB0aGlzLmlzQXBwQ2hhbmdlZEFmdGVyUHVibGlzaCA9IHRydWU7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiRGV0YWlscyBGb3VuZFwiKVxuICAgICAgICAvLyBUcmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb24gdG8gdXBkYXRlIHRoZSB2aWV3XG4gICAgICAgIC8vIHRoaXMuZGV0ZWN0Q2hhbmdlcygpOyAvLyA8LS0tIENhbGwgZGV0ZWN0Q2hhbmdlcygpIGhlcmVcblxuICAgICAgfSxcbiAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBhcHAgZGV0YWlsczonLCBlcnJvcik7XG4gICAgICB9XG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zb2xlLmVycm9yKCdhcHBWZXJzaW9uSWQgaXMgbWlzc2luZyBvciBpbnZhbGlkIGluIHRoZSBmbGF0dGVuIG9iamVjdDonLCBmbGF0dGVuKTtcbiAgfVxufVxuXG5cbmFzeW5jICBpbnN0YWxsQXBwKHVzZXJJbnB1dDogc3RyaW5nLCBjYXRlZ29yeTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIC8vXG4gIFxuICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoICdJbnN0YWxsaW5nIEFwcC4uLicsIEF4b1NuYWNrQmFyVHlwZS5pbmZvKTtcbiAgY29uc3QgbG9hZGluZ0RpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oTG9hZGluZ0FwcGluc3RhbGxDb21wb25lbnQsIHtcbiAgICB3aWR0aDogJzYwMHB4JyxcbiAgICBkYXRhOiB7IGxvYWRpbmdNZXNzYWdlOiAnSW5zdGFsbGluZyBhcHAsIHBsZWFzZSB3YWl0Li4uJyB9LFxuICAgIGRpc2FibGVDbG9zZTogdHJ1ZVxuICB9KTtcbiAgLy9jb25zdCBsb2FkaW5nRGlhbG9nUmVmID0gdGhpcy5vcGVuTG9hZGluZ0RpYWxvZ1dpdGhNZXNzYWdlKCdQbGVhc2Ugd2FpdC4gSW5zdGFsbGluZyBpbiBwcm9ncmVzcy4uLicpO1xuICBcbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgcmVxdWVzdFN0cmluZzogdXNlcklucHV0LFxuICAgICAgc2Vjb25kU3RyaW5nOiBjYXRlZ29yeVxuICAgIH07IFxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwLnBvc3Q8c3RyaW5nPignSW5zdGFsbEFwcCcsIGRhdGEsIHtcbiAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgLy8gU2V0IGNvbnRlbnQgdHlwZSB0byBhcHBsaWNhdGlvbi9qc29uXG4gICAgICB9KSxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZVxuICAgIH0pLnRvUHJvbWlzZSgpO1xuXG4gICAgLy9jb25zb2xlLmxvZygnUmVzcG9uc2UgZnJvbSBzZXJ2ZXI6JywgcmVzcG9uc2UpOyBcbiAgICBcbiAgICAvL2NvbnN0IHJlc3BvbnNlT2JqZWN0ID0gSlNPTi5wYXJzZShyZXNwb25zZSk7XG4gICAgXG4gICAgXG4gIC8vICAgaWYgKHJlc3BvbnNlKSB7XG5cbiAgLy8gICAgIGlmKHJlc3BvbnNlT2JqZWN0LnN0YXR1cz09XCJzdWNjZXNzXCIpe1xuICAvLyAgICAgdGhpcy5fYXhvU25hY2tCYXIub3BlblNuYWNrQmFyKCdBcHAgaW5zdGFsbGVkIHN1Y2Nlc3NmdWxseScsIEF4b1NuYWNrQmFyVHlwZS5zdWNjZXNzKTtcbiAgLy8gICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAvLyAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gIC8vICAgICB9LCAxNTAwMCk7XG4gIC8vICAgfSBlbHNlIGlmKHJlc3BvbnNlT2JqZWN0LnN0YXR1cz09J2ZhaWx1cmUnKSB7XG4gIC8vICAgICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ0Zvcm0gTm90IEZvdW5kIGluIHRoaXMgYXBwJywgQXhvU25hY2tCYXJUeXBlLmVycm9yKTtcbiAgLy8gICB9XG4gIC8vICAgICBlbHNlIHtcbiAgLy8gICAgIHRoaXMuX2F4b1NuYWNrQmFyLm9wZW5TbmFja0JhcignT29wcyEgU29tZXRoaW5nIHdlbnQgd3Jvbmcgd2hpbGUgaW5zdGFsbGluZyB0aGUgYXBwLicsIEF4b1NuYWNrQmFyVHlwZS5lcnJvcik7XG4gICAgICBcbiAgLy8gICAgIGNvbnNvbGUuZXJyb3IoQXhvU25hY2tCYXJUeXBlLmVycm9yKTtcbiAgLy8gICB9fVxuICAvLyB9IGNhdGNoIChlcnJvcikge1xuICAvLyAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluc3RhbGxpbmcgYXBwOicsIGVycm9yKTtcbiAgLy8gICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ09vcHMhIFNvbWV0aGluZyB3ZW50IHdyb25nIHdoaWxlIGluc3RhbGxpbmcgdGhlIGFwcC4nLCBBeG9TbmFja0JhclR5cGUuZXJyb3IpO1xuICAvLyAgIC8vdGhpcy5fbG9nZ2luZ1NlcnZpY2UudHJhY2tFdmVudCgnRXJyb3Igb2NjdXJyZWQgd2hpbGUgaW5zdGFsbGluZyBhcHAnLCBlcnJvcik7XG4gIC8vIH1cblxuICAgIFxuICAgICAgLy9jb25zdCByZXNwb25zZU9iamVjdCA9IEpTT04ucGFyc2UocmVzcG9uc2UpO1xuICAgICAgLy9jb25zb2xlLmxvZyhyZXNwb25zZU9iamVjdCk7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcIkluc3RhbGxlZEFwcE5hbWVcIix1c2VySW5wdXQpXG4gICAgICBjb25zdCByZXNwb25zZU9iamVjdCA9IHR5cGVvZiByZXNwb25zZSA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKHJlc3BvbnNlKSA6IHJlc3BvbnNlO1xuICAgICAgXG4gICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgLy9pZiAocmVzcG9uc2VPYmplY3QpIHtcbiAgICAgICAgIGlmIChyZXNwb25zZU9iamVjdC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7ICAgICAgICAgIFxuICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiaW5zdGFsbHN0YXR1c1wiLFwiVHJ1ZVwiKVxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ0FwcCBpbnN0YWxsZWQgc3VjY2Vzc2Z1bGx5JywgQXhvU25hY2tCYXJUeXBlLnN1Y2Nlc3MpO1xuICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICAgIGxvYWRpbmdEaWFsb2dSZWYuY2xvc2UoKTtcbiAgICAgICAgICAgIH0sIDIwMDAwKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICBcbiAgICAgICAgICAvLyB9IGVsc2UgaWYgKHJlc3BvbnNlT2JqZWN0LnN0YXR1cyA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgICAgLy8gICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ0Zvcm0gTm90IEZvdW5kIGluIHRoaXMgYXBwJywgQXhvU25hY2tCYXJUeXBlLmVycm9yKTtcbiAgICAgICAgfWVsc2Uge1xuICAgICAgICAgIHRoaXMuX2F4b1NuYWNrQmFyLm9wZW5TbmFja0JhcignRm9ybSBjYW5ub3QgYmUgZm91bmQgZm9yIHRoaXMgYXBwJywgQXhvU25hY2tCYXJUeXBlLmVycm9yKTtcbiAgICAgICAgICBsb2FkaW5nRGlhbG9nUmVmLmNsb3NlKCk7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihBeG9TbmFja0JhclR5cGUuZXJyb3IpO1xuICAgICAgICB9fVxuICAgICAgICBlbHNle1xuICAgICAgICAgIHRoaXMuX2F4b1NuYWNrQmFyLm9wZW5TbmFja0JhcignT29wcyFTb21ldGhpbmcgd2VudCB3cm9uZyB3aGlsZSBjcmVhdGluZyB0aGUgYXBwJywgQXhvU25hY2tCYXJUeXBlLmVycm9yKTtcbiAgICAgICAgICBsb2FkaW5nRGlhbG9nUmVmLmNsb3NlKCk7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihBeG9TbmFja0JhclR5cGUuZXJyb3IpO1xuICAgICAgICB9XG4gICAgfSAgIFxuXG5cbiAgICBvcGVuRGVsZXRlQXBwRGlhbG9nKGFwcFZlcnNpb25JZDpudW1iZXIpe1xuICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDb25maXJtYXRpb25Nb2RhbENvbXBvbmVudCwge1xuICAgICAgICB3aWR0aDogJzMwJScsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHRpdGxlOiAnRGVsZXRlIEFwcCcsXG4gICAgICAgIG1lc3NhZ2U6ICdBcmUgeW91IHN1cmUgd2FudCB0byBkZWxldGUgdGhpcyBhcHA/JyxcbiAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6ICdEZWxldGUnLFxuICAgICAgICBjYW5jZWxCdXR0b25UZXh0OiAnQ2FuY2VsJyxcbiAgICAgICAgY29uZmlybUJ1dHRvblR5cGU6ICdkZWxldGUnXG4gICAgICB9LFxuICAgICAgcGFuZWxDbGFzczogJ2NvbmZpcm0tbW9kYWwtY29udGFpbmVyJ1xuICAgICAgfSk7XG5cbiAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgdGhpcy5kZWxldGVBcHAoYXBwVmVyc2lvbklkKTsgLy8gUHJvY2VlZCB3aXRoIGRlbGV0aW9uXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGRlbGV0ZUFwcChhcHBWZXJzaW9uSWQ6bnVtYmVyKTogdm9pZCB7XG4gICAgICB0aGlzLl9mbGF0dGVuU2VydmljZS5nZXRGbGF0dGVuRGF0YShhcHBWZXJzaW9uSWQpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl91bnN1YnNjcmliZUFsbCksXG4gICAgICAgICAgICAgIHN3aXRjaE1hcCgoZmxhdHRlbikgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKGZsYXR0ZW4gJiYgZmxhdHRlbi5hcHBJZCAhPT0gdW5kZWZpbmVkICYmIGZsYXR0ZW4udmVyc2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXBwSWQgPSBmbGF0dGVuLmFwcElkLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXBwVmVyc2lvbiA9IGZsYXR0ZW4udmVyc2lvbi50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFwcFY9YXBwVmVyc2lvbklkO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQXBwIHZlcnNpb24gSWQ6XCIrYXBwVmVyc2lvbklkKTtcblxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YT17XG4gICAgICAgICAgICAgICAgICAgICAgICBcIkFwcCBJZFwiIDogZmxhdHRlbi5hcHBJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiQXBwIE5hbWVcIiA6IGZsYXR0ZW4uYXBwTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiQXBwIHZlcnNpb25cIiA6IGZsYXR0ZW4udmVyc2lvblxuICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdGZXRjaGVkIGFwcCBkZXRhaWxzIGZyb20gZmxhdHRlbjonLCB7IGFwcElkLCBhcHBWZXJzaW9uIH0pO1xuICBcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbXBBcHBMaXN0U2VydmljZS5kZWxldGVBcHAoYXBwSWQsIGFwcFZlcnNpb24udG9TdHJpbmcoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFcnJvciBvY2N1cnJlZCB3aGlsZSBkZWxldGluZyBhcHA6JywgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgZXJyb3IsIGUuZy4sIGRpc3BsYXkgYSBtZXNzYWdlIG9yIHBlcmZvcm0gYWRkaXRpb25hbCBhY3Rpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0Vycm9yOiBmbGF0dGVuIG9iamVjdCBvciBpdHMgcHJvcGVydGllcyBhcmUgdW5kZWZpbmVkLicpO1xuICAgICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBmbGF0dGVuIG9yIGl0cyBwcm9wZXJ0aWVzIGFyZSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcignRmxhdHRlbiBvYmplY3Qgb3IgaXRzIHByb3BlcnRpZXMgYXJlIHVuZGVmaW5lZCcpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgc3VjY2VzcyByZXNwb25zZSBoZXJlIGlmIG5lZWRlZFxuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0RlbGV0ZSBhcHAgc3VjY2VzczonLCByZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgZGVsZXRlZCBhcHAgZnJvbSB0aGUgYXBwTGlzdFxuICAgICAgICAgICAgICAgICB0aGlzLmFwcExpc3QgPSB0aGlzLmFwcExpc3QuZmlsdGVyKGFwcCA9PiBhcHAuYXBwVmVyc2lvbklkICE9PSBhcHBWZXJzaW9uSWQpO1xuICAgICAgICAgICAgICAgICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ0FwcCBkZWxldGVkIHN1Y2Nlc3NmdWxseScsIEF4b1NuYWNrQmFyVHlwZS5zdWNjZXNzKTtcbiAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2luZ1NlcnZpY2UudHJhY2tFdmVudCgnQXBwIGRlbGV0ZWQnLCB0aGlzLmRhdGEpO1xuICAgICAgICAgICAgICAgICAgLy8gTWFudWFsbHkgdHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uIHRvIHVwZGF0ZSB0aGUgdmlld1xuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpOyAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgZXJyb3IgaGVyZSBpZiBuZWVkZWRcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0RlbGV0ZSBhcHAgZXJyb3I6JywgZXJyb3IpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgfVxuICAgIFxuICBcblxucHJpdmF0ZSBvcGVuTG9hZGluZ0RpYWxvZ1dpdGhNZXNzYWdlKG1lc3NhZ2U6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBcbiAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihMb2FkaW5nQXBwaW5zdGFsbENvbXBvbmVudCwge1xuICAgIHdpZHRoOiAnNTAwcHgnLFxuICAgIFxuICAgIHBhbmVsQ2xhc3M6ICdhcHAtbG9hZGluZy1kaWFsb2cnLFxuICAgIGRhdGE6IHsgbWVzc2FnZSwgdHlwZTogJ1lvdXIgYXBwIGlzIGJlaW5nIFB1Ymxpc2hlZC4uLicgfSxcbiAgfSk7XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBkaWFsb2dSZWYuY2xvc2UoKTtcbiAgICAgIC8vdGhpcy5vcGVuU3VjY2Vzc0RpYWxvZygndmVyc2lvbiBwdWJsaXNoZWQgc3VjY2Vzc2Z1bGx5IScpO1xuICAgICAgcmVzb2x2ZSgpOyAvLyBSZXNvbHZlIHRoZSBwcm9taXNlIGFmdGVyIGNsb3NpbmcgdGhlIGRpYWxvZ1xuICAgIH0sIDEzODAwKTsgLy8gMTMuNiBzZWNvbmRzIGluIG1pbGxpc2Vjb25kc1xuICB9KTtcbn1cblxucHJpdmF0ZSBvcGVuU3VjY2Vzc0RpYWxvZyhtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgLy9cbiAgdGhpcy5fZmxhdHRlblNlcnZpY2UuZmxhdHRlbiQucGlwZShcbiAgICB0YWtlKDEpLFxuICAgIHN3aXRjaE1hcCgoZmxhdHRlbikgPT4ge1xuICAgICAgaWYgKCFmbGF0dGVuIHx8ICFmbGF0dGVuLmFwcFZlcnNpb25JZCkge1xuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcignRmxhdHRlbiBvYmplY3Qgb3IgaXRzIHByb3BlcnRpZXMgYXJlIHVuZGVmaW5lZCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZvcmtKb2luKHtcbiAgICAgICAgZmxhdHRlbjogb2YoZmxhdHRlbiksXG4gICAgICAgIGFwcERldGFpbHM6IHRoaXMuX21wQXBwTGlzdFNlcnZpY2UuZmV0Y2hBcHBEZXRhaWxzKGZsYXR0ZW4uYXBwVmVyc2lvbklkLCB0aGlzLmNvbW1vbkxpYkNvbmZpZy5heG9uYXRvclgxVXJsKS5waXBlKFxuICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBhcHAgZGV0YWlsczonLCBlcnJvcik7XG4gICAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgfSk7XG4gICAgfSlcbiAgKS5zdWJzY3JpYmUoKHsgZmxhdHRlbiwgYXBwRGV0YWlscyB9KSA9PiB7XG4gICAgY29uc29sZS5sb2coJ2ZldGNoQXBwRGV0YWlscyBmdW5jdGlvbiBjYWxsZWQgNCcpO1xuICAgIHRoaXMuaXNBcHBDaGFuZ2VkQWZ0ZXJQdWJsaXNoID0gYXBwRGV0YWlscz8uZGF0YT8uZGV0YWlscz8uaXNfYXBwX2NoYW5nZWRfZWRpdGVkX2FmdGVyX3B1Ymxpc2ggfHwgZmFsc2U7IC8vIFNldCBpc0FwcENoYW5nZWRBZnRlclB1Ymxpc2ggYmFzZWQgb24gdGhlIEFQSSByZXNwb25zZVxuICAgIC8vIEZldGNoIHRoZSBtaW5vciB2ZXJzaW9uIGZyb20gZ2V0VmVyc2lvbkxpc3RcbiAgICB0aGlzLl9jb21tb25TZXJ2aWNlLmdldFZlcnNpb25MaXN0KGZsYXR0ZW4uYXBwSWQsIGZsYXR0ZW4udmVyc2lvbikuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGxldCBhcHBNaW5vclZlcnNpb24gPSAnVW5rbm93bic7IC8vIERlZmF1bHQgdmFsdWUgaWYgbWlub3IgdmVyc2lvbiBpcyBub3QgZm91bmRcbiAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LnYgJiYgcmVzdWx0LnYudmVyc2lvbnNsaXN0ICYmIHJlc3VsdC52LnZlcnNpb25zbGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGFwcE1pbm9yVmVyc2lvbiA9IHJlc3VsdC52LnZlcnNpb25zbGlzdFswXS5hcHBtaW5vcnZlcnNpb247XG4gICAgICB9XG4gICAgICBjb25zdCBhcHBOYW1lID0gZmxhdHRlbj8uYXBwTmFtZSB8fCAnWW91ciBBcHAnO1xuICAgICAgICBjb25zdCBhcHBWZXJzaW9uID0gZmxhdHRlbj8udmVyc2lvbiB8fCAndmVyc2lvbic7XG4gICAgICAgIGNvbnN0IHN1Y2Nlc3NNZXNzYWdlID0gYEFwcDogJHthcHBOYW1lfSB2ZXJzaW9uICR7YXBwTWlub3JWZXJzaW9ufSBpcyBJbnN0YWxsZWQgc3VjY2Vzc2Z1bGx5LmA7XG4gICAgICAgIGNvbnN0IGFwcGhlYWRpbmcgPWBJbnN0YWxsZWRgXG4gICAgICAgIGNvbnN0IHN1Y2Nlc3NEaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFN1Y2Nlc3NEaWFsb2dDb21wb25lbnQsIHtcbiAgICAgICAgICB3aWR0aDogJzUwMHB4JyxcbiAgICAgICAgICBkYXRhOiB7IG1lc3NhZ2U6IHN1Y2Nlc3NNZXNzYWdlfVxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmNhcGl0YWxpemVXb3JkcyhzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBzdHJcbiAgICAuc3BsaXQoJyAnKVxuICAgIC5tYXAod29yZCA9PiB3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKSlcbiAgICAuam9pbignICcpO1xufVxuXG5cbiAgLyoqXG4gICAqIE9uIGRlc3Ryb3lcbiAgICovXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIC8vIFVuc3Vic2NyaWJlIGZyb20gYWxsIHN1YnNjcmlwdGlvbnNcbiAgICB0aGlzLl91bnN1YnNjcmliZUFsbC5uZXh0KCk7XG4gICAgdGhpcy5fdW5zdWJzY3JpYmVBbGwuY29tcGxldGUoKTtcbiAgfVxuXG4gIGRpc2FibGVRUihhcHBWZXJzaW9uSWQ6IGFueSAsIGluZGV4OiBudW1iZXIpe1xuICAgIGxldCBkYXRhID0ge1xuICAgICAgYXBwVmVyc2lvbklkIDogYXBwVmVyc2lvbklkXG4gICAgfTtcbiAgXG4gICAgdGhpcy5fZGF0YVZpZXdGaWx0ZXJzU2VydmljZS5kaXNhYmxlUVIoZGF0YSlcbiAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIHRoaXMuX2F4b1NuYWNrQmFyLm9wZW5TbmFja0JhcignUVIgY29kZSBkaXNhYmxlZCBzdWNjZXNzZnVsbHknLCBBeG9TbmFja0JhclR5cGUuc3VjY2Vzcyk7XG4gICAgICAgICAgdGhpcy5fbG9nZ2luZ1NlcnZpY2UudHJhY2tFdmVudCgnUVIgRGlzYWJsZWQnLHtyZXNwb25zZX0pO1xuICAgICAgICAgIHRoaXMuYXBwTGlzdFtpbmRleF0ucXJfc3RhdHVzID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9LFxuICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvcjonLCBlcnJvcik7XG4gICAgICAgICAgLy8gSGFuZGxlIHRoZSBlcnJvclxuICAgICAgICB9XG4gICAgICApOyAgXG4gIH1cblxuICBkaXNhYmxlUVJEaWFsb2coYXBwVmVyc2lvbklkOiBhbnksIGluZGV4OiBudW1iZXIpe1xuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQ29uZmlybWF0aW9uTW9kYWxDb21wb25lbnQsIHtcbiAgICAgIHdpZHRoOiAnMzAlJyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgdGl0bGU6ICdEaXNhYmxlIFFSJyxcbiAgICAgICAgbWVzc2FnZTogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkaXNhYmxlIFFSIGZvciB0aGlzIGZvcm0/JyxcbiAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6ICdEaXNhYmxlJyxcbiAgICAgICAgY2FuY2VsQnV0dG9uVGV4dDogJ0NhbmNlbCcsXG4gICAgICAgIGNvbmZpcm1CdXR0b25UeXBlOiAnZGVsZXRlJ1xuICAgICAgfSxcbiAgICAgIHBhbmVsQ2xhc3M6ICdjb25maXJtLW1vZGFsLWNvbnRhaW5lcidcbiAgICB9KTtcbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlUVIoYXBwVmVyc2lvbklkLCBpbmRleCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnZXRVc2VyUGVybWlzc2lvbnMoKSB7XG4gICAgdGhpcy5fY29tbW9uU2VydmljZS5nZXRVc2VyRGV0YWlsKHRydWUpLnN1YnNjcmliZShcbiAgICAgIChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09ICdzdWNjZXNzJyAmJiByZXNwb25zZS51ZCkge1xuICAgICAgICAgIHRoaXMucGVybWlzc2lvbnMgPSByZXNwb25zZS51ZC5wZXJtaXNzaW9uczsgLy8gRXh0cmFjdCBwZXJtaXNzaW9uc1xuICAgICAgICAgIHRoaXMuaGFzT3JnVXNlckFjY2VzcyA9IHRoaXMucGVybWlzc2lvbnMuaW5jbHVkZXMoJ09SR19JQU0nKTsgLy8gQ2hlY2sgaWYgJ09SR19JQU0nIGlzIGluIHRoZSBwZXJtaXNzaW9ucyBhcnJheVxuICAgICAgICAgIFxuICAgICAgICAgIC8vIFNob3cgb3ZlcmxheSBvbmx5IGlmICdBQ0NFU1NfV0VCX1BPUlRBTCcgcGVybWlzc2lvbiBpcyBub3QgcHJlc2VudFxuICAgICAgICAgIHRoaXMuc2hvd1dlYlBvcnRhbEFjY2Vzc092ZXJsYXkgPSAhdGhpcy5wZXJtaXNzaW9ucy5pbmNsdWRlcygnQUNDRVNTX1dFQl9QT1JUQUwnKTtcbiAgICAgICAgICB0aGlzLmhhc0FwcEJ1aWxkZXJQZXJtaXNzaW9uID0gdGhpcy5wZXJtaXNzaW9ucy5pbmNsdWRlcyhcIkFQUF9CVUlMREVSXCIpICYmIHRoaXMucGVybWlzc2lvbnMuaW5jbHVkZXMoXCJBQ0NFU1NfV0VCX1BPUlRBTFwiKTtcblxuICAgICAgICAgIGNvbnNvbGUubG9nKCdVc2VyIFBlcm1pc3Npb25zOicsIHRoaXMucGVybWlzc2lvbnMpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdJcyBCdWlsZGVyIEFjY2VzczonLCB0aGlzLmhhc09yZ1VzZXJBY2Nlc3MpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIHVzZXIgZGV0YWlsczonLCBlcnJvcik7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuICBpc1Jlc3RyaWN0ZWRVcmwoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcmVzdHJpY3RlZFVybHMgPSBbXG4gICAgICAnaHR0cHM6Ly9hbmRyb21lZGEtY29udGFpbmVyLXFhLmF4b25hdG9yLmNvbS9hcHBzJyxcbiAgICAgICdodHRwczovL2xvY2FsaG9zdDo0MjAxL2FwcHMnLFxuICAgICAgJ2h0dHBzOi8vd2ViLmF4b25hdG9yLmNvbSdcbiAgICBdO1xuICAgIHJldHVybiByZXN0cmljdGVkVXJscy5pbmNsdWRlcyh3aW5kb3cubG9jYXRpb24uaHJlZik7XG4gIH1cbn1cblxuIiwiPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZmxleC1hdXRvIGgtZnVsbC1hcHBMaXN0IG15LWFwcC1saXN0IG92ZXJmbG93LWhpZGRlbiBwYWdlLWJhY2tncm91bmQgYXhvLWZvbnRcIj5cbiAgICA8IS0tIEhlYWRlciAtLT5cbiAgICA8ZGl2IGNsYXNzPVwic3RpY2t5IHRvcC0wIGJnLXdoaXRlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhcHAtbGlzdC1tYWluLWhlYWRlciByZWxhdGl2ZSBmbGV4IGZsZXgtMCBoLTEyIHotNDkgYm94LWJvcmRlciBweC02XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWF1dG8gaXRlbXMtY2VudGVyIG1pbi13LTBcIj4gPGltZyBjbGFzcz1cInctMzYgaC03XCIgc3JjPVwiYXNzZXRzL2ltYWdlcy9sb2dvL2F4by1sb2dvLnN2Z1wiIGFsdD1cIkxvZ28gaW1hZ2VcIj4gPHNwYW4gY2xhc3M9XCJiZXRhXCI+QmV0YTwvc3Bhbj4gPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWF1dG8ganVzdGlmeS1lbmQgaXRlbXMtY2VudGVyIG1pbi13LTAgZ2FwLTNcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBjbGFzcz1cIm10LTEuNVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gc3ZnSWNvbj1cImF4b19zZWFyY2hcIj48L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGNsYXNzPVwibXQtMS41XCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGF4b19ub3RpZmljdGlvbi0yXCIgbWF0VG9vbHRpcD1cIk5vdGlmaWNhdGlvblwiIHN2Z0ljb249XCJheG9fbm90aWZpY3Rpb24tMlwiPjwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPCEtLSBvbmNlIHdlIGZpeCBpZGVudGl0eSBzZXJ2ZXIgQVBJLCB0aGlzIGNvZGUgd2lsbCBiZSBuZWVkZWQgYWdhaW5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1wiIG1hdC1pY29uLWJ1dHRvbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwidXNlclByb2ZpbGUwOU1lbnVcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInVzZXJJbWFnZTsgZWxzZSBpc0VtcHR5SW1hZ2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJiYXNlVXJsICsgJ2ltYWdlcy8nKyB1c2VySW1hZ2VcIiBvbkVycm9yID1cInRoaXMuc3JjPSdhc3NldHMvaWNvbnMvb3JnYW5pemF0aW9uLnBuZydcIiBjbGFzcz1cImlubGluZSBvYmplY3QtY292ZXIgdy03IGgtNyBtci0yIG9yZ2FuaXphdGlvbkljb25cIiBhbHQ9XCJhdnRhclwiPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNpc0VtcHR5SW1hZ2U+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICBjbGFzcz1cImVtcHR5LWFwcC1pY29uXCI+e3sgKHVzZXJbJ0ZpcnN0TmFtZSddKS5jaGFyQXQoMCkgKyBcIlwiICsgICh1c2VyWydMYXN0TmFtZSddKS5jaGFyQXQoMCkgfCB1cHBlcmNhc2UgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPG1hdC1tZW51ICN1c2VyUHJvZmlsZTA5TWVudT1cIm1hdE1lbnVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIGNsYXNzPVwiaC1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidXNlckltYWdlOyBlbHNlIGlzRW1wdHlQcm9maWxlSW1hZ2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwib3JnYW5pemF0aW9uSWNvblwiIFtzcmNdPVwiYmFzZVVybCArICdpbWFnZXMvJysgdXNlckltYWdlXCIgYWx0PVwiXCIgb25FcnJvciA9XCJ0aGlzLnNyYz0nYXNzZXRzL2ljb25zL29yZ2FuaXphdGlvbi5wbmcnXCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2lzRW1wdHlQcm9maWxlSW1hZ2U+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gIGNsYXNzPVwidXNlckVtcHR5SWNvblwiPnt7ICh1c2VyWydGaXJzdE5hbWUnXSkuY2hhckF0KDApICsgXCJcIiArICAodXNlclsnTGFzdE5hbWUnXSkuY2hhckF0KDApIHwgdXBwZXJjYXNlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmxpbmUtZ3JpZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidXNlci1uYW1lLXRpdGxlIFwiPnt7IHVzZXJFbWFpbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVzZXItZW1haWxpZCBcIj57eyB1c2VyTmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIGNsYXNzPVwib3JnYW5pemF0aW9uLXNlY3Rpb25cIiAoY2xpY2spPVwic2lnbk91dCgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxvZ291dC10aXRsZVwiPkxvZ291dDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9tYXQtbWVudT4gLS0+XG5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XCIgbWF0LWljb24tYnV0dG9uIFttYXRNZW51VHJpZ2dlckZvcl09XCJ1c2VyUHJvZmlsZTA5TWVudVwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidXNlckltYWdlOyBlbHNlIGlzRW1wdHlJbWFnZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImJhc2VVcmwgKyB1c2VySW1hZ2VcIiBvbkVycm9yID1cInRoaXMuc3JjPSdhc3NldHMvaWNvbnMvb3JnYW5pemF0aW9uLnN2ZydcIiBjbGFzcz1cIm9yZ2FuaXphdGlvbkljb25cIiBhbHQ9XCJhdnRhclwiPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNpc0VtcHR5SW1hZ2U+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICBjbGFzcz1cInVwcGVyY2FzZSBmb250LW1lZGl1bSBjdXJzb3ItcG9pbnRlciB0ZXh0LXNtIGgtOCB3LTggZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIgbWwtMiBiZy1ncmF5LTMwMCByb3VuZGVkLWZ1bGxcIj57eyAodXNlclsnZm5hbWUnXSkuY2hhckF0KDApICsgXCJcIiArICAodXNlclsnbG5hbWUnXSkuY2hhckF0KDApIHwgdXBwZXJjYXNlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxtYXQtbWVudSAjdXNlclByb2ZpbGUwOU1lbnU9XCJtYXRNZW51XCIgYmFja2Ryb3BDbGFzcz1cImFwcC1saXN0LW1hdC1tZW51LXBhbmVsLWNsYXNzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSBjbGFzcz1cImgtZnVsbCB1c2VyLWluZm9cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ1c2VySW1hZ2U7IGVsc2UgaXNFbXB0eVByb2ZpbGVJbWFnZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJvcmdhbml6YXRpb25JY29ucHJvZmlsZVwiIFtzcmNdPVwiYmFzZVVybCArIHVzZXJJbWFnZVwiIGFsdD1cIlwiIG9uRXJyb3IgPVwidGhpcy5zcmM9J2Fzc2V0cy9pY29ucy9vcmdhbml6YXRpb24uc3ZnJ1wiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNpc0VtcHR5UHJvZmlsZUltYWdlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICBjbGFzcz1cInVzZXJFbXB0eUljb25cIj57eyAodXNlclsnZm5hbWUnXSkuY2hhckF0KDApICsgXCJcIiArICAodXNlclsnbG5hbWUnXSkuY2hhckF0KDApIHwgdXBwZXJjYXNlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmxpbmUtZ3JpZCBweS0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1c2VyLWVtYWlsaWRcIj57eyB1c2VyRW1haWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1c2VyLW5hbWUtdGl0bGVcIj57eyB1c2VyTmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1kaXZpZGVyIGNsYXNzPVwibXktMFwiPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSBjbGFzcz1cInVzZXItbG9nb3V0LWJ0biBvcmdhbml6YXRpb24tYnRuXCIgKGNsaWNrKT1cIm5hdmlnYXRldG9PcmdhbmlhdGlvbigpXCIgKm5nSWY9XCJoYXNPcmdVc2VyQWNjZXNzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxtYXQtaWNvbiBbc3ZnSWNvbl09XCInaGVyb2ljb25zX291dGxpbmU6dXNlci1ncm91cCdcIj48L21hdC1pY29uPiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibG9nb3V0LWxhYmVsXCI+T3JnYW5pemF0aW9uIFVzZXJzPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSBjbGFzcz1cInVzZXItbG9nb3V0LWJ0biBvcmdhbml6YXRpb24tYnRuXCIgKGNsaWNrKT1cIm5hdmlnYXRldG9PcmdhbmlhdGlvblNldHRpbmdzKClcIiAqbmdJZj1cImhhc09yZ1VzZXJBY2Nlc3NcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPG1hdC1pY29uIFtzdmdJY29uXT1cIidoZXJvaWNvbnNfb3V0bGluZTp1c2VyLWdyb3VwJ1wiPjwvbWF0LWljb24+IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsb2dvdXQtbGFiZWxcIj5Pcmdhbml6YXRpb24gU2V0dGluZ3M8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIGNsYXNzPVwidXNlci1sb2dvdXQtYnRuIGJpbGxpbmctYnRuXCIgKGNsaWNrKT1cIm5hdmlnYXRlVG9CaWxsaW5nKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPG1hdC1pY29uIFtzdmdJY29uXT1cIidoZXJvaWNvbnNfb3V0bGluZTpjcmVkaXQtY2FyZCdcIj48L21hdC1pY29uPiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibG9nb3V0LWxhYmVsXCI+QmlsbGluZzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1kaXZpZGVyIGNsYXNzPVwibXktMFwiPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSBjbGFzcz1cInVzZXItbG9nb3V0LWJ0blwiIChjbGljayk9XCJzaWduT3V0KClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPG1hdC1pY29uIFtzdmdJY29uXT1cIidoZXJvaWNvbnNfb3V0bGluZTpsb2dvdXQnXCI+PC9tYXQtaWNvbj4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxvZ291dC1sYWJsZVwiPkxvZ291dDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICA8L21hdC1tZW51PlxuXG5cblxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8IS0tIEhlYWRlciAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFwcC1saXN0LW1haW4tc3ViaGVhZGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXBwLWxpc3QtaGVhZGVyIHJlbGF0aXZlIGZsZXggZmxleC0wIGl0ZW1zLWNlbnRlciB6LTQ5IGJveC1ib3JkZXIgcHgtNCBzbTpweC02XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1hdXRvIGl0ZW1zLWNlbnRlciBtaW4tdy0wIGdhcC0zXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBob3ZlcjpiZy1ncmF5LTEwMCBwLTIgcm91bmRlZC1sZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJzdGFuZGFyZFwiIGNsYXNzPVwic206dy1mdWxsIGZsZXggaXRlbXMtY2VudGVyIG9yZ2FuaXphdGlvbi1tYXQtc2VsZWN0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgWyhuZ01vZGVsKV09XCJzZWxlY3RlZE9yZ2FuaXphdGlvblwiIHBsYWNlaG9sZGVyPVwic2VsZWN0IE9yZ2FuaXphdGlvblwiIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QtdHJpZ2dlciBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyXCIgKm5nSWY9XCJzZWxlY3RlZE9yZ2FuaXphdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cIm9yZ2FuaXphdGlvbkljb25cIiBhbHQ9XCJcIiBbc3JjXT1cIihzZWxlY3RlZE9yZ2FuaXphdGlvbi5pY29uLmluZGV4T2YoJ2h0dHBzOi8vJykgIT09IC0xKSA/IHNlbGVjdGVkT3JnYW5pemF0aW9uLmljb24gOiBiYXNlVXJsICsgc2VsZWN0ZWRPcmdhbml6YXRpb24uaWNvblwiIG9uRXJyb3IgPVwidGhpcy5zcmM9J2Fzc2V0cy9pY29ucy9vcmdhbml6YXRpb24uc3ZnJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJvcmctbmFtZVwiIFttYXRUb29sdGlwXT1cInNlbGVjdGVkT3JnYW5pemF0aW9uLm5hbWVcIj4ge3sgc2VsZWN0ZWRPcmdhbml6YXRpb24ubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQ3VzdG9tIGFycm93IGljb24gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxtYXQtaWNvbiBjbGFzcz1cImRyb3Bkb3duLWFycm93XCIgc3ZnSWNvbj1cImRyb3Bkb3duLWFycm93XCI+PC9tYXQtaWNvbj4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3dpdGNoIGZsZXggcC0yIGdhcC0yIHBsLTQgaXRlbXMtY2VudGVyIGN1cnNvci1wb2ludGVyIFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJheG9fc3dpdGNoXCIgY2xhc3M9XCJzd2l0Y2gtaWNvbiBoLTggdy04XCI+PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3dpdGNoLXNwYW5cIj5Td2l0Y2ggT3JnYW5pemF0aW9uPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gIGNsYXNzPVwib3JnYW5pemF0aW9uTGlzdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgb3JnYW5pemF0aW9uIG9mIG9yZ2FuaXphdGlvbkxpc3Q7IGxldCBvcmdhbml6YXRpb25JbmRleCA9IGluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJvcmdhbml6YXRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInN3aXRjaEFjY291bnQob3JnYW5pemF0aW9uLmlkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRdPVwic2VsZWN0ZWRPcmdhbml6YXRpb24uaWQgPT09IG9yZ2FuaXphdGlvbi5pZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3JnLWljb24tc3BhblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJvcmdhbml6YXRpb25JY29uXCIgYWx0PVwiXCIgW3NyY109XCIob3JnYW5pemF0aW9uLmljb24uaW5kZXhPZignaHR0cHM6Ly8nKSAhPT0gLTEpID8gb3JnYW5pemF0aW9uLmljb24gOiBiYXNlVXJsICsgb3JnYW5pemF0aW9uLmljb25cIiBvbkVycm9yID1cInRoaXMuc3JjPSdhc3NldHMvaWNvbnMvb3JnYW5pemF0aW9uLnN2ZydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNtOnRleHQtbGcgdGV4dC14cyBmb250LW1lZGl1bSBvcmctbmFtZVwiPiB7eyBvcmdhbml6YXRpb24ubmFtZX19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzbTp0ZXh0LWxnIHRleHQteHMgZm9udC1tZWRpdW0gbWFpbi10aXRsZVwiPk15IEFwcHM8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImhhc0FwcEJ1aWxkZXJQZXJtaXNzaW9uICYmICFpc1Jlc3RyaWN0ZWRVcmwoKVwiIGNsYXNzPVwicHJpbWFyeS1idG4gYXhvLWZvbnQgdy0yOFwiIChjbGljayk9XCJvcGVuQ3JlYXRlQXBwRGlhbG9nKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5DcmVhdGUgQXBwPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gQXBwIExpc3Qgd2l0aCBPdmVybGF5IC0tPlxuICAgIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZSBmbGV4LWF1dG8gYXBwLWxpc3QgaC1mdWxsLWFwcExpc3QgcHgtNCBweS01IHNtOnB5LTggb3ZlcmZsb3ctYXV0b1wiPlxuICAgICAgICA8IS0tIE92ZXJsYXkgZm9yIHdlYiBwb3J0YWwgYWNjZXNzIC0tPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd1dlYlBvcnRhbEFjY2Vzc092ZXJsYXlcIiBjbGFzcz1cInBlcm1pc3Npb24tb3ZlcmxheVwiPlxuICAgICAgICAgICAgWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0byBhY2Nlc3MgV2ViIFBvcnRhbC5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFwcExpc3QubGVuZ3RoOyBlbHNlIG5vdEVtcHR5QXBwTGlzdFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFwcC1ncmlkIGl0ZW1zLXN0YXJ0IGNhcmQtYm9keSB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1vdXRlci1kaXZcIiAqbmdGb3I9XCJsZXQgYXBwRGV0YWlsIG9mIGFwcExpc3Q7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgPGZ1c2UtY2FyZCBjbGFzcz1cImZ1c2UtY2FyZC1hcHAgZmxleCBmbGV4LWNvbCBnYXAtMiBmaWx0ZXItbGlzdFwiIFtuZ1N0eWxlXT1cInsnYmFja2dyb3VuZCc6IGFwcERldGFpbC5ncmFkaWVudH1cIiAoY2xpY2spPVwib3BlbkFwcChhcHBEZXRhaWwuYXBwVmVyc2lvbklkKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImFwcERldGFpbC5xcl9zdGF0dXMgPT09IHRydWUgJiYgc2hvd1FSSWNvblwiIChjbGljayk9XCJkaXNhYmxlUVJEaWFsb2coYXBwRGV0YWlsLmFwcFZlcnNpb25JZCwgaSk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcIiBjbGFzcz1cImZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIGJvcmRlci0wIHJvdW5kZWQtZnVsbCBxci1pY29uIGJnLXdoaXRlIGFic29sdXRlIHRvcC00IHJpZ2h0LTRcIiAgW25nQ2xhc3NdPVwieydhcHBIb3Zlcic6IG9wZW5Qb3B1cE1lbnUgPT09IGFwcERldGFpbC5hcHBWZXJzaW9uSWR9XCIgc3R5bGU9XCJwYWRkaW5nOiAuM3JlbTtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIG1hdFRvb2x0aXA9XCJEaXNhYmxlIFFSXCIgIHNyYz1cImFzc2V0cy9pY29ucy9heG8vc2N1bHB0b3IvYXhvX3FyY29kZV9uZXcuc3ZnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImgtMyB3LTMgb2JqZWN0LWNvdmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgY2FyZCBqdXN0aWZ5LWJldHdlZW5cIiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAtMjBweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZG90cy12ZXJ0aWNhbC1hcHBcIiAqbmdJZj1cInNob3dEb3RzT3B0aW9uXCIgIFtuZ0NsYXNzXT1cInsnYXBwSG92ZXInOiBvcGVuUG9wdXBNZW51ID09PSBhcHBEZXRhaWwuYXBwVmVyc2lvbklkfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7c2V0T3BlblBvcHVwTWVudShhcHBEZXRhaWwuYXBwVmVyc2lvbklkKVwiIG1hdC1pY29uLWJ1dHRvbiBbZGlzYWJsZVJpcHBsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdE1lbnVUcmlnZ2VyRm9yXT1cImNvbnRleHRNZW51XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBbc3ZnSWNvbl09XCInaGVyb2ljb25zX3NvbGlkOmRvdHMtdmVydGljYWwnXCIgc3R5bGU9XCJjb2xvcjogI0ZGRkZGRjtcIj48L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbWVudSAjY29udGV4dE1lbnU9XCJtYXRNZW51XCIgY2xhc3M9XCJjdXN0b21pemVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJyZXBvcnQtbWVudVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwib3BlblFSQ29kZURpYWxvZygpXCIgIGNsYXNzPVwicHktMCBwbC00IHByLTZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCJhc3NldHMvaWNvbnMvb3B0aW9ucy1tb2JpbGUuc3ZnXCIgYWx0PVwiXCIgY2xhc3M9XCJoLTYgdy02IGlubGluZS1ibG9jayBtci0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlVzZSBPbiBNb2JpbGU8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJyZXBvcnQtbWVudVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwib3BlbkRlbGV0ZUFwcERpYWxvZyhhcHBEZXRhaWwuYXBwVmVyc2lvbklkKVwiICBjbGFzcz1cInB5LTAgcGwtNCBwci02XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiYXNzZXRzL2ljb25zL29wdGlvbnMtZGVsZXRlLnN2Z1wiIGFsdD1cIlwiIGNsYXNzPVwiaC02IHctNiBpbmxpbmUtYmxvY2sgbXItMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5EZWxldGU8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbWVudT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaW5uZXItZGl2XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGRhc2hib2FyZC1pY29uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJiYXNlVXJsICsgYXBwRGV0YWlsLmljb25cIiBvbkVycm9yID1cInRoaXMuc3JjPSdodHRwczovL3N0YXRpYy5heG9uYXRvci5jb20vc3RhdGljL2RlZmF1bHRfaWNvbnMvYXBwLnBuZydcIiBhbHQ9XCJMb2dvIGltYWdlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXBwLWluZm9cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJsb2NrIGFwcC10aXRsZS13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXBwX3RpdGxlIGZvbnQtbWVkaXVtIGxlYWRpbmctdGlnaHQgYXhvLWZvbnRcIiBbbWF0VG9vbHRpcF09XCJhcHBEZXRhaWwubmFtZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7YXBwRGV0YWlsLm5hbWV9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXBwX3ZlcnNpb24gdy1mdWxsIGxlYWRpbmctdGlnaHQgdGV4dC14c1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdiB7e2FwcERldGFpbC52ZXJzaW9uLnNwbGl0KCcuJylbMF19fS57e3BhZFplcm8oYXBwRGV0YWlsLm1pbm9yVmVyc2lvbil9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3VzdC1vcGVuIGZsZXgganVzdGlmeS1lbmQgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCBzcGFjZS14LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhICpuZ0lmPVwic2hvd0N1c3RvbWl6ZVwiIHJvdXRlckxpbms9XCJcIiBjbGFzcz1cImN1c3RvbWl6ZSB0ZXh0LWxlZnQgbGVhZGluZy10aWdodCB0ZXh0LXhzXCI+Q3VzdG9taXplPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm9wZW4tYnV0dG9uXCI+T3BlbjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Z1c2UtY2FyZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgXG4gICAgPC9kaXY+XG4gICAgPG5nLXRlbXBsYXRlICNub3RFbXB0eUFwcExpc3Q+XG4gICAgICAgIDwhLS0gaWYgYXBwIGxpc3QgaXMgZW1wdHkgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGZsZXgtYXV0byBtaW4tdy0wIHJlbGF0aXZlIGl0ZW1zLWNlbnRlclwiICNub3RFbXB0eUFwcExpc3Q+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyIGZsZXggZmxleC1jb2wgbXktYXV0byBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgbm8tYXBwLWNyZWF0ZWRcIj5cbiAgICAgICAgICAgICAgICA8aDI+Tm8gYXBwIGNyZWF0ZWQgeWV0ITwvaDI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8YXBwLWNvbW1vbi1mb290ZXIgW3Nob3dBZGRCdG5dPVwic2hvd0FkZEJ0blwiIFtzaG93VXBncmFkZUJ0bl09XCJ0cnVlXCI+PC9hcHAtY29tbW9uLWZvb3Rlcj5cbiAgICA8IS0tIDxkaXYgY2xhc3M9XCJmaXhlZCBib3R0b20tMCBmbGV4IGZsZXgtMCBpdGVtcy1jZW50ZXIganVzdGlmeS1zdGFydCB3LWZ1bGwgaC0xNCBweC00IG1kOnB4LTYgei00OSBiZy13aGl0ZSBhcHAtbGlzdC1mb290ZXJcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LW1lZGl1bSB0ZXh0LXNlY29uZGFyeVwiPkF4b25hdG9yICZjb3B5OyB7e2N1cnJlbnRZZWFyfX08L3NwYW4+XG4gICAgPC9kaXY+IC0tPlxuPC9kaXY+XG4iXX0=