ax-common-ui-lib 1.0.1-beta.33.9-testing → 1.0.1-beta.34-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.
@@ -421,7 +421,7 @@ export class AppListComponent {
421
421
  }), tap((userResponse) => {
422
422
  const userPermissions = userResponse?.ud?.permissions || [];
423
423
  // Check if "APP_BUILDER" permission exists
424
- this.hasAppBuilderPermission = userPermissions.includes("APP_BUILDER");
424
+ this.hasAppBuilderPermission = userPermissions.includes("APP_BUILDER") && userPermissions.includes("ACCESS_WEB_PORTAL");
425
425
  }))
426
426
  .subscribe((response) => {
427
427
  const subscriptionOptions = {
@@ -1002,6 +1002,14 @@ export class AppListComponent {
1002
1002
  console.error('Error fetching user details:', error);
1003
1003
  });
1004
1004
  }
1005
+ isRestrictedUrl() {
1006
+ const restrictedUrls = [
1007
+ 'https://andromeda-container-qa.axonator.com/apps',
1008
+ 'https://localhost:4201/apps',
1009
+ 'https://web.axonator.com'
1010
+ ];
1011
+ return restrictedUrls.includes(window.location.href);
1012
+ }
1005
1013
  }
1006
1014
  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)); };
1007
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([
@@ -1124,7 +1132,7 @@ AppListComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AppListCom
1124
1132
  i0.ɵɵadvance(5);
1125
1133
  i0.ɵɵproperty("ngForOf", ctx.organizationList);
1126
1134
  i0.ɵɵadvance(4);
1127
- i0.ɵɵproperty("ngIf", ctx.hasAppBuilderPermission);
1135
+ i0.ɵɵproperty("ngIf", ctx.hasAppBuilderPermission && !ctx.isRestrictedUrl());
1128
1136
  i0.ɵɵadvance(2);
1129
1137
  i0.ɵɵproperty("ngIf", ctx.showWebPortalAccessOverlay);
1130
1138
  i0.ɵɵadvance(1);
@@ -1145,7 +1153,7 @@ AppListComponent.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: AppList
1145
1153
  provide: MAT_SELECT_CONFIG,
1146
1154
  useValue: { overlayPanelClass: 'organization-list-overlay-panel' },
1147
1155
  },
1148
- ], 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\" 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"] }]
1156
+ ], 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"] }]
1149
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: [{
1150
1158
  type: Input
1151
1159
  }], baseUrl: [{
@@ -1175,4 +1183,4 @@ AppListComponent.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: AppList
1175
1183
  }], updateListEvent: [{
1176
1184
  type: Output
1177
1185
  }] }); })();
1178
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2F4LWNvbW1vbi11aS1saWIvc3JjL2xpYi9hcHAtbGlzdC9hcHAtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvYXgtY29tbW9uLXVpLWxpYi9zcmMvbGliL2FwcC1saXN0L2FwcC1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGlDQUFpQztBQUNqQyx1REFBdUQ7QUFDdkQsMEJBQTBCO0FBQzFCLHFFQUFxRTtBQUVyRSxPQUFPLEVBQUUsU0FBUyxFQUFVLGlCQUFpQixFQUFhLEtBQUssRUFBRSxNQUFNLEVBQWlCLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0osT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDN0QsT0FBTyxFQUFFLE1BQU0sRUFBcUIsTUFBTSxpQkFBaUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFPLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzdGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFHeEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDekQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JE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O1lBQ0csT0FBTztrQkFBZixLQUFLO1lBQ0csZ0JBQWdCO2tCQUF4QixLQUFLO1lBQ0csb0JBQW9CO2tCQUE1QixLQUFLO1lBQ0csSUFBSTtrQkFBWixLQUFLO1lBQ0csUUFBUTtrQkFBaEIsS0FBSztZQUNHLGdCQUFnQjtrQkFBeEIsS0FBSztZQUNHLFVBQVU7a0JBQWxCLEtBQUs7WUFDRyxjQUFjO2tCQUF0QixLQUFLO1lBQ0csYUFBYTtrQkFBckIsS0FBSztZQUNHLFVBQVU7a0JBQWxCLEtBQUs7WUFDSSxrQkFBa0I7a0JBQTNCLE1BQU07WUFDRyxZQUFZO2tCQUFyQixNQUFNO1lBQ0csZUFBZTtrQkFBeEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGFycm93LXBhcmVucyAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L21lbWJlci1vcmRlcmluZyAqL1xuLyogZXNsaW50LWRpc2FibGUgcmFkaXggKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1mdW5jdGlvbi1yZXR1cm4tdHlwZSAqL1xuXG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgVmlld0VuY2Fwc3VsYXRpb24sIE9uRGVzdHJveSwgSW5wdXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgRXZlbnRFbWl0dGVyLCBDaGFuZ2VEZXRlY3RvclJlZiwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTUFUX1NFTEVDVF9DT05GSUcgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xuaW1wb3J0IHsgUm91dGVyICwgIE5hdmlnYXRpb25FeHRyYXN9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBTdWJqZWN0LCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAsIHN3aXRjaE1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBeG9TbmFja0JhclNlcnZpY2UsIEF4b1NuYWNrQmFyVHlwZSB9IGZyb20gJy4uL2F4by1zbmFjay1iYXIvYXhvLXNuYWNrLWJhci5zZXJ2aWNlJztcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS9hdXRoL2F1dGguc2VydmljZSc7XG5pbXBvcnQgeyBVc2VyU2VydmljZSB9IGZyb20gJy4uL2NvcmUvdXNlci91c2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgVXNlciB9IGZyb20gJy4uL2NvcmUvdXNlci91c2VyLnR5cGVzJztcbmltcG9ydCB7IEFwcExpc3REdG8gfSBmcm9tICcuL2FwcC1saXN0LWR0byc7XG5pbXBvcnQgeyBNeUFwcExpc3RTZXJ2aWNlIH0gZnJvbSAnLi9teS1hcHAtbGlzdC5zZXJ2aWNlJztcbmltcG9ydCB7IE9yZ2FuaXphdGlvbkxpc3REdG8gfSBmcm9tICcuL29yZ2FuaXphdGlvbi1saXN0LWR0byc7XG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgRmxhdHRlblNlcnZpY2UgfSBmcm9tICcuLi9mbGF0dGVuLW1vZHVsZS9mbGF0dGVuLnNlcnZpY2UnO1xuaW1wb3J0IHsgSUZsYXR0ZW4gfSBmcm9tICcuLi9jb21tb24tdXRpbHMvaUZsYXR0ZW4nO1xuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBDb29raWVTZXJ2aWNlIH0gZnJvbSAnbmd4LWNvb2tpZS1zZXJ2aWNlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEVubGlnaHRlbkxpYk1vZHVsZSB9IGZyb20gJy4uL2VubGlnaHRlbi1saWIvZW5saWdodGVuLWxpYi5tb2R1bGUnO1xuaW1wb3J0IHsgUXJkaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi9xcmRpYWxvZy9xcmRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgTG9nZ2luZ1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9sb2dnaW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgTG9hZGluZ0RpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uL2xvYWRpbmctZGlhbG9nL2xvYWRpbmctZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5pbXBvcnQgeyBMb2FkaW5nQXBwaW5zdGFsbENvbXBvbmVudCB9IGZyb20gJy4uL2xvYWRpbmctYXBwaW5zdGFsbC9sb2FkaW5nLWFwcGluc3RhbGwuY29tcG9uZW50JzsgXG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vY29tbW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3VjY2Vzc0RpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uL3N1Y2Nlc3MtZGlhbG9nL3N1Y2Nlc3MtZGlhbG9nLmNvbXBvbmVudCc7IFxuaW1wb3J0IHsgdGFrZSwgIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgZm9ya0pvaW4sIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBsb2NhbGUgfSBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgQXBwQ3JlYXRlRGlhbG9nQ29tcG9uZW50Q29tcG9uZW50IH0gZnJvbSAnLi4vYXBwLWNyZWF0ZS1kaWFsb2ctY29tcG9uZW50L2FwcC1jcmVhdGUtZGlhbG9nLWNvbXBvbmVudC5jb21wb25lbnQnOyBcblxuLy9pbXBvcnQgeyBDb25zb2xlIH0gZnJvbSAnY29uc29sZSc7XG5pbXBvcnQgeyBDb21tb25MaWJDb25maWd1cmF0aW9uU2VydmljZSB9IGZyb20gJy4uL2NvbW1vbi1saWItY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IERhdGFWaWV3RmlsdGVyc1NlcnZpY2UgfSBmcm9tICcuLi9kYXRhLXZpZXctbGliL2RhdGEtdmlldy1maWx0ZXJzL2RhdGEtdmlldy1maWx0ZXJzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29uZmlybWF0aW9uTW9kYWxDb21wb25lbnQgfSBmcm9tICcuLi9zaGFyZWQvY29tZmlybWF0aW9uLW1vZGFsL2NvbmZpcm1hdGlvbi1tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU3Vic2NyaWJlZFBsYW5OYW1lIH0gZnJvbSAnLi4vc3Vic2NyaWJlZFBsYW5OYW1lLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3RyaXBlU2VydmljZSB9IGZyb20gJy4uL3N0cmlwZS5zZXJ2aWNlJztcbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWFwcC1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FwcC1saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYXBwLWxpc3QuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTUFUX1NFTEVDVF9DT05GSUcsXG4gICAgICB1c2VWYWx1ZTogeyBvdmVybGF5UGFuZWxDbGFzczogJ29yZ2FuaXphdGlvbi1saXN0LW92ZXJsYXktcGFuZWwnIH0sXG4gICAgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQXBwTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgYXBwTGlzdDogQXJyYXk8QXBwTGlzdER0bz47XG4gIEBJbnB1dCgpIGJhc2VVcmw6IHN0cmluZztcbiAgQElucHV0KCkgb3JnYW5pemF0aW9uTGlzdDogQXJyYXk8T3JnYW5pemF0aW9uTGlzdER0bz4gPSBbXTtcbiAgQElucHV0KCkgc2VsZWN0ZWRPcmdhbml6YXRpb246IE9yZ2FuaXphdGlvbkxpc3REdG87XG4gIEBJbnB1dCgpIHVzZXI6IFVzZXI7XG4gIEBJbnB1dCgpIGxpc3RUeXBlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHNob3dDcmVhdGVCdXR0b246Ym9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzaG93UVJJY29uOmJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc2hvd0RvdHNPcHRpb246Ym9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzaG93Q3VzdG9taXplOmJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc2hvd0FkZEJ0bjpib29sZWFuID0gZmFsc2U7XG4gIEBPdXRwdXQoKSBzd2l0Y2hBY2NvdW50RXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG9wZW5BcHBFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgdXBkYXRlTGlzdEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIC8vIHVzZXI6IFVzZXI7XG4gIGlzQXBwQ2hhbmdlZEFmdGVyUHVibGlzaDogYm9vbGVhbiA9IGZhbHNlO1xuICB1c2VyTmFtZTogc3RyaW5nO1xuICBhcHBWZXJzaW9uSWQ6IG51bWJlcjtcbiAgdXNlckVtYWlsOiBzdHJpbmc7XG4gIGZ1bGxWZXJzaW9uOiBzdHJpbmc7XG4gIGZ1bGxWZXJzaW9uczogc3RyaW5nW10gPSBbXTtcbiAgdXNlckltYWdlOiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZyA9ICcnO1xuICBtaW5vclZlcnNpb246IHN0cmluZyA9ICcnO1xuICBhcHBJZDogc3RyaW5nID0nJztcbiAgYnVpbGRlclVybDogc3RyaW5nO1xuICBvcGVuUG9wdXBNZW51OiBudW1iZXI7XG4gIGdyYWRpZW50cyA9IFtcbiAgICAncmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA4MCUgMjAlLCAjREI2RDgxLCAjQkY0NTgxKScsXG4gICAgJ3JhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgODAlIDIwJSwgIzQ0OTFEOSwgIzQ1NTlCRiknLFxuICAgICdyYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDgwJSAyMCUsICNFN0E3NzksICNBQTU1MjUpJyxcbiAgICAncmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA4MCUgMjAlLCAjNDREOTUzLCAjMEQ5MjEyKSdcbiAgXTtcbiAgY3VycmVudFVybCA9IGRvY3VtZW50LlVSTDtcbiAgYmFzZVVzcmwgPSBkb2N1bWVudC5iYXNlVVJJO1xuICByZWdleCA9IC9cXC9hcHBzXFwvKFxcZCspXFwvKFxcdyspLztcbiAgbWF0Y2ggPSB0aGlzLmN1cnJlbnRVcmwubWF0Y2godGhpcy5yZWdleCk7XG5cbiAgZGF0YSA9IHt9O1xuXG4gIC8qXG4gICAgICogU3ViamVjdCBvYmplY3Qgd2hpY2ggaGVscHMgdW5zdWJzY3JpYmUgYWxsIHRoZSBzdWJzY3JpYmVkIG9iamVjdHMgaW4gdGhlIGNvbXBvbmVudFxuICAgICAqL1xuICBwcml2YXRlIF91bnN1YnNjcmliZUFsbDogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3Q8YW55PigpO1xuICBvcmdhbml6YXRvbklkOiBudW1iZXI7XG4gIHVzZXJQZXJtaXNzaW9uczogc3RyaW5nW10gPSBbXTsgLy8gVmFyaWFibGUgdG8gaG9sZCB1c2VyIHBlcm1pc3Npb25zXG4gIHBlcm1pc3Npb25zOiBhbnk7XG4gIGhhc09yZ1VzZXJBY2Nlc3M6IGJvb2xlYW47XG4gIGN1cnJlbnRBcHBWZXJzaW9uSWQ6IHN0cmluZztcbiAgc2hvd1dlYlBvcnRhbEFjY2Vzc092ZXJsYXk6IGJvb2xlYW4gPSBmYWxzZTsgLy8gRmxhZyB0byBjb250cm9sIG92ZXJsYXkgZGlzcGxheVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2F1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcbiAgICBwcml2YXRlIF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBfdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29tbW9uTGliQ29uZmlnOiBDb21tb25MaWJDb25maWd1cmF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIF9tcEFwcExpc3RTZXJ2aWNlOiBNeUFwcExpc3RTZXJ2aWNlLFxuICAgIHByaXZhdGUgX3JvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgX2F4b1NuYWNrQmFyOiBBeG9TbmFja0JhclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcbiAgICBwcml2YXRlIF9mbGF0dGVuU2VydmljZTogRmxhdHRlblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LCAvLyBJbmplY3QgSHR0cENsaWVudFxuICAgIHByaXZhdGUgX2h0dHBDbGllbnQ6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSBjb29raWVTZXJ2aWNlOiBDb29raWVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBfbG9nZ2luZ1NlcnZpY2UgOiBMb2dnaW5nU2VydmljZSxcbiAgICBwcml2YXRlIF9jb21tb25TZXJ2aWNlOkNvbW1vblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfZGF0YVZpZXdGaWx0ZXJzU2VydmljZTogRGF0YVZpZXdGaWx0ZXJzU2VydmljZSxcbiAgICBwcml2YXRlIF9zdWJzY3JpYmVkUGxhbk5hbWU6IFN1YnNjcmliZWRQbGFuTmFtZSxcbiAgICBwcml2YXRlIHN0cmlwZVNlcnZpY2U6IFN0cmlwZVNlcnZpY2UsXG5cbiAgICBcbiAgKSB7IH1cbiAgLyoqXG4gICAqIEdldHRlciBmb3IgY3VycmVudCB5ZWFyXG4gICAqL1xuICBnZXQgY3VycmVudFllYXIoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpO1xuICB9XG5cbiAgc2V0T3BlblBvcHVwTWVudShhcHBJZCkge1xuICAgIHRoaXMub3BlblBvcHVwTWVudSA9IGFwcElkO1xuICAgIGNvbnN0IG92ZXJsYXkgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuY2RrLW92ZXJsYXktY29udGFpbmVyJyk7XG4gICAgb3ZlcmxheS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgIHRoaXMub3BlblBvcHVwTWVudSA9IHVuZGVmaW5lZDtcbiAgICB9KTtcbiAgfVxuXG4gIG9wZW5RUkNvZGVEaWFsb2coKTogdm9pZCB7XG5cbiAgICBjb25zdCBxckRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oUXJkaWFsb2dDb21wb25lbnQsIHtcbiAgICAgIHdpZHRoOiAnMjUwcHgnLCAvLyBBZGp1c3Qgd2lkdGggYXMgbmVlZGVkXG4gICAgfSk7XG4gIH1cblxuICBuYXZpZ2F0ZXRvT3JnYW5pYXRpb24oKTogdm9pZCB7XG4gICAgY29uc3QgdXJsTWFwOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgICAgJ2xvY2FsaG9zdDo0MjAwJzogJ2h0dHBzOi8vbG9jYWxob3N0OjQyMDAvJyxcbiAgICAgICdsb2NhbGhvc3Q6NDIwMSc6ICdodHRwczovL2xvY2FsaG9zdDo0MjAwLycsXG4gICAgICAnYW5kcm9tZWRhLWJ1aWxkZXItcWEuYXhvbmF0b3IuY29tJzogJ2h0dHBzOi8vYW5kcm9tZWRhLWJ1aWxkZXItcWEuYXhvbmF0b3IuY29tLycsXG4gICAgICAnYW5kcm9tZWRhLWNvbnRhaW5lci1xYS5heG9uYXRvci5jb20nOiAnaHR0cHM6Ly9hbmRyb21lZGEtYnVpbGRlci1xYS5heG9uYXRvci5jb20vJyxcbiAgICAgICdidWlsZGVyLmF4b25hdG9yLmNvbSc6ICdodHRwczovL2J1aWxkZXIuYXhvbmF0b3IuY29tLycsXG4gICAgICAnd2ViLmF4b25hdG9yLmNvbSc6ICdodHRwczovL2J1aWxkZXIuYXhvbmF0b3IuY29tLydcbiAgICB9O1xuICAgIGNvbnN0IHVybDogc3RyaW5nID0gdXJsTWFwW3dpbmRvdy5sb2NhdGlvbi5ob3N0XSB8fCAnJztcbiAgICBpZiAodGhpcy5tYXRjaCkge1xuICAgICAgY29uc3QgdXNlckxpc3RVcmwgPSBgYXBwcy8ke3RoaXMubWF0Y2hbMV19L3VzZXJzYDsgLy8gZHluYW1pYyBwYXJ0IGJhc2VkIG9uIG1hdGNoXG4gICAgICB3aW5kb3cub3Blbih1cmwgKyB1c2VyTGlzdFVybCwgJ19zZWxmJyk7IC8vIG9wZW4gZHluYW1pYyBVUkxcbiAgICB9IGVsc2Uge1xuICAgICAgd2luZG93Lm9wZW4odXJsICsgJ29yZ2FuaXphdGlvbicsICdfc2VsZicpOyAvLyBmYWxsYmFjayB0byBvcmdhbml6YXRpb24gcm91dGVcbiAgICB9XG4gIH0gIFxuXG4gIG5hdmlnYXRldG9PcmdhbmlhdGlvblNldHRpbmdzKCk6IHZvaWQge1xuICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZUJ5VXJsKCdvcmdhbml6YXRpb24tc2V0dGluZ3MnKTtcbiAgfVxuICBcblxuXG5cbiAgLy8gZGVsZXRlQXBwKGFwcElkOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZyk6IHZvaWQge1xuICAvLyAgIHRoaXMuX21wQXBwTGlzdFNlcnZpY2UuZGVsZXRlQXBwKGFwcElkLCB2ZXJzaW9uKVxuICAvLyAgICAgLnBpcGUoXG4gIC8vICAgICAgIHRha2VVbnRpbCh0aGlzLl91bnN1YnNjcmliZUFsbCksXG4gIC8vICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gIC8vICAgICAgICAgY29uc29sZS5sb2coJ0Vycm9yIG9jY3VycmVkIHdoaWxlIGRlbGV0aW5nIGFwcDonLCBlcnJvcik7XG4gIC8vICAgICAgICAgLy8gdGhpcy5fc25hY2tiYXJTZXZpY2Uub3BlblNuYWNrQmFyKCdFcnJvciBvY2N1cnJlZCB3aGlsZSBkZWxldGluZyBhcHAuJywgQXhvU25hY2tCYXJUeXBlLmVycm9yKTtcbiAgLy8gICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnJvcik7XG4gIC8vICAgICAgIH0pXG4gIC8vICAgICApXG4gIC8vICAgICAuc3Vic2NyaWJlKFxuICAvLyAgICAgICAvLyByZXNwb25zZSA9PiB0aGlzLmhhbmRsZURlbGV0ZVN1Y2Nlc3MocmVzcG9uc2UpLFxuICAvLyAgICAgICAvLyBlcnJvciA9PiB0aGlzLmhhbmRsZURlbGV0ZUVycm9yKGVycm9yKVxuICAvLyAgICAgKTtcbiAgLy8gfVxuXG4gIC8vIEFzc3VtaW5nIF9kZWxldGVTZXJ2aWNlIGhhcyBhIGRlbGV0ZUFwcCBtZXRob2QgdGhhdCBoYW5kbGVzIGFwcCBkZWxldGlvblxuICAvLyBBbHNvLCBhc3N1bWluZyBoYW5kbGVEZWxldGVTdWNjZXNzIGFuZCBoYW5kbGVEZWxldGVFcnJvciBhcmUgbWV0aG9kcyB0byBoYW5kbGUgc3VjY2VzcyBhbmQgZXJyb3Igc2NlbmFyaW9zXG5cbiAgcGFkWmVybyh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB2YXIgcGFkZGluZz0nJztcbiAgICBsZXQgbGVuZ3RoPXZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoO1xuICAgIGlmKGxlbmd0aD09MSlcbiAgICB7XG4gICAgICBwYWRkaW5nPScwMCcrdmFsdWVcbiAgICB9XG4gICAgZWxzZSBpZihsZW5ndGg9PTIpXG4gICAge1xuICAgICAgcGFkZGluZz0nMCcrdmFsdWVcbiAgICB9XG4gICAgZWxzZSBpZihsZW5ndGg9PTMpXG4gICAge1xuICAgICAgcGFkZGluZz12YWx1ZVxuICAgIH1cbiAgICByZXR1cm4gcGFkZGluZztcbiAgfVxuXG4gIHB1YmxpYyBoYXNBcHBCdWlsZGVyUGVybWlzc2lvbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGdldFVzZXJEZXRhaWxzKCk6IHZvaWQge1xuICAgIHRoaXMuX2NvbW1vblNlcnZpY2UuZ2V0VXNlckRldGFpbCgpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX3Vuc3Vic2NyaWJlQWxsKSxcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyB1c2VyIGRldGFpbHM6JywgZXJyb3IpO1xuICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVycm9yKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRhcCgodXNlclJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCB1c2VyUGVybWlzc2lvbnMgPSB1c2VyUmVzcG9uc2U/LnVkPy5wZXJtaXNzaW9ucyB8fCBbXTtcbiAgICAgICAgICAvLyBDaGVjayBpZiBcIkFQUF9CVUlMREVSXCIgcGVybWlzc2lvbiBleGlzdHNcbiAgICAgICAgICB0aGlzLmhhc0FwcEJ1aWxkZXJQZXJtaXNzaW9uID0gdXNlclBlcm1pc3Npb25zLmluY2x1ZGVzKFwiQVBQX0JVSUxERVJcIik7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbk9wdGlvbnMgPSB7XG4gICAgICAgICAgYWNjb3VudElkOiByZXNwb25zZS51ZC5sYXN0dXNlZF9hY2NvdW50XG4gICAgICAgIH07XG4gICAgICAgIFxuICAgICAgICB0aGlzLnN0cmlwZVNlcnZpY2UuZ2V0U3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbk9wdGlvbnMpLnN1YnNjcmliZShcbiAgICAgICAgICAoc3Vic2NyaXB0aW9uUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdTdWJzY3JpcHRpb24gZGV0YWlsczonLCBzdWJzY3JpcHRpb25SZXNwb25zZSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmIChzdWJzY3JpcHRpb25SZXNwb25zZSAmJiBzdWJzY3JpcHRpb25SZXNwb25zZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbkluZm8gPSBzdWJzY3JpcHRpb25SZXNwb25zZVswXTtcbiAgICAgICAgICAgICAgY29uc3QgcHJvZHVjdE9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgUHJvZHVjdElkOiBzdWJzY3JpcHRpb25JbmZvLml0ZW1zWzBdLnByb2R1Y3RJZFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgdGhpcy5zdHJpcGVTZXJ2aWNlLmdldFByb2R1Y3REZXRhaWxzKHByb2R1Y3RPcHRpb25zKS5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgKHByb2R1Y3RSZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fc3Vic2NyaWJlZFBsYW5OYW1lLnN1YnNjcmliZWRQbGFuTmFtZSA9IHByb2R1Y3RSZXNwb25zZS5uYW1lO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBwcm9kdWN0IGRldGFpbHM6JywgZXJyb3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgc3Vic2NyaXB0aW9uIGRldGFpbHM6JywgZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICB9XG4gIFxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZ2V0VXNlclBlcm1pc3Npb25zKCk7XG4gICBcbiAgICAvLyB0aGlzLmN1cnJlbnRBcHBWZXJzaW9uSWQgPSB3aW5kb3cubG9jYXRpb24uaHJlZi5zcGxpdChcIi9cIilbNF07XG4gICAgLy8gdGhpcy5fbmF2aWdhdGlvbi51cGRhdGVDbGFzc2ljTmF2aWdhdGlvblJvdXRlcyh0aGlzLmN1cnJlbnRBcHBWZXJzaW9uSWQudG9TdHJpbmcoKSk7XG5cbiAgICAvLyBGZXRjaCB1c2VyIGRldGFpbHNcbiAgICBcbiAgICBcbiAgICBpZiAodGhpcy51c2VyKSB7XG4gICAgICB0aGlzLnVzZXJFbWFpbCA9IHRoaXMudXNlci5lbWFpbDtcbiAgICAgIHRoaXMudXNlck5hbWUgPSB0aGlzLnVzZXJbJ2ZuYW1lJ10gKyAnICcgKyB0aGlzLnVzZXJbJ2xuYW1lJ107XG4gICAgICB0aGlzLnVzZXJJbWFnZSA9IHRoaXMudXNlclsndWltZyddO1xuICAgIH1cblxuICAgIHRoaXMuZ2V0VXNlckRldGFpbHMoKTtcbiAgICBcbiAgLy9BWEUtSTYzNzZcbiAgLy9Jc3N1ZSA6IFBhcmFtZXRlcml6ZWQgdXJsIHdhcyBub3QgbWFpbnRhaW4gKGFwcCBpbnN0YWxsYXRpb24pLCBhdXRob3JpemF0aW9uIGNhbGwgc29tZWhvdyBsb3NlcyB0aGUgcGFyYW1ldGVyc1xuICAvL3VybCBzdG9yYWdlIGlzIG1haW50YWluZWQgYnkgdGhlIG5hbWUgXCJhcHBuYW1lXCJcbiAgLy9JdCBpcyBzZXQgaW4gYXV0aC5yZXNvbHZlciBhbmQgcmVtb3ZlZCBoZXJlXG4gIC8vaWYgYXBwbmFtZSBleGlzdCBpbiBzZXNzaW9uIHVzZWQgdGhlIHN0b3JlZCBuYW1lLCBpZiBub3QgdXNlZCB0aGUgdmFsdWUgZnJvbSB0aGUgdXJsXG4gIC8vXG52YXIgYXBwTmFtZWNoZWNrPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCdhcHBuYW1lJyk7XG4vL2NvbnNvbGUubG9nKFwiITExM1wiKTtcbi8vIGlmKGFwcE5hbWVjaGVjayE9PW51bGwpXG4vLyB7XG4vLyAgIGlmKGFwcE5hbWVjaGVjaz09XCIvYXBwc1wiKVxuLy8gICB7XG4vLyAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJhcHBuYW1lXCIpO1xuLy8gICB9XG4vLyB9XG4vLyBhcHBOYW1lY2hlY2s9bG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2FwcG5hbWUnKTtcbi8vY29uc29sZS5sb2coXCIhMTEzXCIpO1xuLy9jb25zb2xlLmxvZyhhcHBOYW1lY2hlY2spXG4gIC8vXG52YXIgYXBwTmFtZWNoZWNrPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCdhcHBuYW1lJyk7XG52YXIgYXBwUHVibGlzaFN0YXR1cz1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgncHVibGlzaHN0YXR1cycpO1xuLy9jb25zb2xlLmxvZyhcIiExMTNcIik7XG4vLyBpZihhcHBOYW1lY2hlY2shPT1udWxsKVxuLy8ge1xuLy8gICBpZihhcHBOYW1lY2hlY2s9PVwiL2FwcHNcIilcbi8vICAge1xuLy8gICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFwiYXBwbmFtZVwiKTtcbi8vICAgfVxuLy8gfVxuLy8gYXBwTmFtZWNoZWNrPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCdhcHBuYW1lJyk7XG4vL2NvbnNvbGUubG9nKFwiITExM1wiKTtcbi8vY29uc29sZS5sb2coYXBwTmFtZWNoZWNrKVxuICBsZXQgYXBwbmFtZTpzdHJpbmc7XG4gIGxldCBjYXRlZ29yeTpzdHJpbmc7XG5cbi8vIGNvbnN0IHVybFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG4vLyBjb25zdCBhcHBOYW1lQ2hlY2sgPSB1cmxQYXJhbXMuZ2V0KCdhcHBuYW1lJyk7XG4vLyBjb25zb2xlLmxvZyhhcHBOYW1lQ2hlY2spXG4vLyBjb25zdCBjYXRlZ29yeSA9IHVybFBhcmFtcy5nZXQoJ2NhdGVnb3J5Jyk7XG4vLyBjb25zb2xlLmxvZyhjYXRlZ29yeSlpXG5cblxubGV0IEluc3RhbGxBcHBOYW1lOnN0cmluZztcbkluc3RhbGxBcHBOYW1lPWxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiSW5zdGFsbGVkQXBwTmFtZVwiKTtcbmlmKEluc3RhbGxBcHBOYW1lIT1udWxsKXtcbmNvbnN0IGNhcGl0YWxpemVkQXBwTmFtZTogc3RyaW5nID0gdGhpcy5jYXBpdGFsaXplV29yZHMoSW5zdGFsbEFwcE5hbWUucmVwbGFjZSgvLS9nLCAnICcpKTtcbnRoaXMuY2hlY2tBbmRQdWJsaXNoQXBwKGNhcGl0YWxpemVkQXBwTmFtZSk7XG5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcIkluc3RhbGxlZEFwcE5hbWVcIik7XG59XG5pZiAoYXBwTmFtZWNoZWNrICE9PSBudWxsKSB7XG4gIC8vXG4gIGNvbnN0IHVybFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoYXBwTmFtZWNoZWNrLnNwbGl0KCc/JylbMV0pO1xuICBjb25zdCBhcHBOYW1lVGVtcCA9IHVybFBhcmFtcy5nZXQoJ2FwcG5hbWUnKTtcbiAgY29uc3QgY2F0ZWdvcnlUZW1wID0gdXJsUGFyYW1zLmdldCgnY2F0ZWdvcnknKTtcbiAgLy9jb25zdCBhcHBOYW1lVGVtcCA9IGFwcE5hbWVjaGVjay5zcGxpdCgnPScpWzFdLnNwbGl0KCcmJylbMF07IC8vIEV4dHJhY3RpbmcgYXBwbmFtZSB2YWx1ZSBmcm9tIFVSTCBwYXJhbWV0ZXJcbiAgLy9sb2NhbFN0b3JhZ2Uuc2V0SXRlbShcIkluc3RhbGxlZEFwcE5hbWVcIixhcHBOYW1lVGVtcClcbi8vIEV4dHJhY3RpbmcgY2F0ZWdvcnkgdmFsdWUgZnJvbSBVUkwgcGFyYW1ldGVyXG4gLy8gY29uc3QgY2F0ZWdvcnlUZW1wID0gYXBwTmFtZWNoZWNrLnNwbGl0KCdjYXRlZ29yeT0nKVsxXTtcbiAgLy9cbiAgaWYgKGFwcE5hbWVUZW1wKSB7XG4gICAgdGhpcy5pbnN0YWxsQXBwKGFwcE5hbWVUZW1wLCBjYXRlZ29yeVRlbXApLnRoZW4oKCkgPT4ge1xuICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJhcHBuYW1lXCIpO1xuICAgIH0pLmNhdGNoKGVycm9yID0+IHtcbiAgICAgIC8vIEhhbmRsZSBlcnJvciBpZiBpbnN0YWxsQXBwIGZhaWxzXG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbnN0YWxsaW5nIGFwcDonLCBlcnJvcik7XG4gICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcImFwcG5hbWVcIik7XG4gICAgfSk7XG4gIH1cblxuLy8gbGV0IGFwcE5hbWU6IHN0cmluZzsgXG4vLyBpZihhcHBOYW1lY2hlY2shPT1udWxsKXtcbi8vICAgYXBwTmFtZT1hcHBOYW1lY2hlY2suc3BsaXQoJz0nKVsxXS5zcGxpdCgnJTJGJylbMF07XG4vLyAgIGlmIChhcHBOYW1lKSB7XG4vLyAgICAgdGhpcy5pbnN0YWxsQXBwKGFwcE5hbWUsKS50aGVuKCgpID0+IHtcbi8vICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFwiYXBwbmFtZVwiKTtcbiAgICAgIFxuLy8gICAgIH0pXG4vLyAgICAgLmNhdGNoKGVycm9yID0+IHtcbi8vICAgICAgIC8vIEhhbmRsZSBlcnJvciBpZiBpbnN0YWxsQXBwIGZhaWxzXG4vLyAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbnN0YWxsaW5nIGFwcDonLCBlcnJvcik7XG4vLyAgICAgfSk7XG4vLyAgIH1cbiAgXG4gIFxuICB9XG4gIGVsc2V7XG4gICAgLy8gVmFyaWFibGUgdG8gc3RvcmUgYXBwbmFtZVxuXG4gICAgXG4gICAgdGhpcy5yb3V0ZS5xdWVyeVBhcmFtcy5waXBlKFxuICAgICAgdGFrZVVudGlsKHRoaXMuX3Vuc3Vic2NyaWJlQWxsKVxuICAgICkuc3Vic2NyaWJlKHBhcmFtcyA9PiB7XG4gICAgICBhcHBuYW1lID0gcGFyYW1zWydhcHBuYW1lJ107XG4gICAgICAvL2xvY2FsU3RvcmFnZS5zZXRJdGVtKFwiSW5zdGFsbGVkQXBwTmFtZVwiLGFwcG5hbWUpO1xuICAgICAgY29uc29sZS5sb2coYXBwbmFtZSlcbiAgICAgIGNhdGVnb3J5ID0gcGFyYW1zWydjYXRlZ29yeSddO1xuICAgICAgY29uc29sZS5sb2coY2F0ZWdvcnkpXG4gICAgXG4gICAgICBpZiAoYXBwbmFtZSkge1xuICAgICAgICAvLyBTcGxpdCB0aGUgYXBwbmFtZSBhdCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiAnLydcbiAgICAgICAgY29uc3QgYXBwTmFtZVBhcnRzID0gYXBwbmFtZS5zcGxpdCgnLycsIDEpO1xuICAgICAgICBjb25zdCBhcHBOYW1lID0gYXBwTmFtZVBhcnRzWzBdOyAvLyBTdG9yZSBhcHBuYW1lXG4gICAgICAgIC8vY29uc3QgY2F0ZWdvcnkgPSBjYXRlZ29yeTsgLy8gU3RvcmUgY2F0ZWdvcnlcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJhcHBOYW1lPVwiK2FwcE5hbWUpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhcImNhdGVnb3J5PVwiK2NhdGVnb3J5KTtcbiAgICAgICAgXG4gICAgICAgIC8vIE5hdmlnYXRlIHRvIHRoZSBzYW1lIHJvdXRlIHdpdGhvdXQgYW55IHF1ZXJ5IHBhcmFtZXRlcnNcbiAgICAgICAgY29uc3QgbmF2aWdhdGlvbkV4dHJhczogTmF2aWdhdGlvbkV4dHJhcyA9IHtcbiAgICAgICAgICByZXBsYWNlVXJsOiB0cnVlLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSwgbmF2aWdhdGlvbkV4dHJhcyk7XG4gICAgICAgIFxuXG4gICAgICAgIGlmIChhcHBuYW1lKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYXBwbmFtZSk7XG4gICAgICAgICAgY29uc29sZS5sb2coY2F0ZWdvcnkpO1xuICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwicHVibGlzaHN0YXR1c1wiLFwiRmFsc2VcIilcbiAgICAgICAgICB0aGlzLmluc3RhbGxBcHAoYXBwbmFtZSxjYXRlZ29yeSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAvLyBIYW5kbGUgc3VjY2Vzc2Z1bCBpbnN0YWxsYXRpb25cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdBcHAgaW5zdGFsbGVkIE1ldGhvZCBjYWxsZWQ6JywgYXBwbmFtZSwgY2F0ZWdvcnkpO1xuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJhcHBuYW1lXCIpO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICAgIC8vIEhhbmRsZSBlcnJvciBpZiBpbnN0YWxsQXBwIGZhaWxzXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbnN0YWxsaW5nIGFwcDonLCBlcnJvcik7XG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcImFwcG5hbWVcIik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICB9XG4gICAgICAvLyB9IGVsc2Uge1xuICAgICAgLy8gICBjb25zb2xlLmVycm9yKCdhcHBuYW1lIG9yIGNhdGVnb3J5IHF1ZXJ5IHBhcmFtZXRlciBpcyBtaXNzaW5nJyk7XG4gICAgICB9fSk7XG5cbiAgICB9XG4gICAgXG4gICAgLy8gb25jZSB3ZSBmaXggaWRlbnRpdHkgc2VydmVyIEFQSSwgdGhpcyBjb2RlIHdpbGwgYmUgbmVlZGVkIGFnYWluXG4gICAgLy8gU3Vic2NyaWJlIHRvIHVzZXIgY2hhbmdlc1xuICAgIC8vIHRoaXMuX3VzZXJTZXJ2aWNlLnVzZXIkXG4gICAgLy8gLnBpcGUodGFrZVVudGlsKHRoaXMuX3Vuc3Vic2NyaWJlQWxsKSlcbiAgICAvLyAuc3Vic2NyaWJlKCh1c2VyOiBhbnkpID0+IHtcbiAgICAvLyAgICAgdGhpcy51c2VyID0gdXNlcjtcbiAgICAvLyAgICAgdGhpcy51c2VyRW1haWwgPSB1c2VyLmVtYWlsO1xuICAgIC8vICAgICB0aGlzLnVzZXJOYW1lID0gdXNlci5GaXJzdE5hbWUgKyAnICcrIHVzZXIuTGFzdE5hbWUgO1xuICAgIC8vICAgICB0aGlzLnVzZXJJbWFnZSA9IHVzZXIucGljdHVyZTtcbiAgICAvLyAgICAgLy8gTWFyayBmb3IgY2hlY2tcbiAgICAvLyAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgLy8gfSk7XG5cblxuXG5cbiAgICBjb25zdCB1cmwgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCd1cmwnKTtcbiAgICBpZiAodXJsKSB7XG4gICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHVybDtcbiAgICAgIC8vIFJlbW92ZSBzYXZlZCBkYXRhIGZyb20gc2Vzc2lvblN0b3JhZ2VcbiAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ3VybCcpO1xuXG4gICAgICAvLyBSZW1vdmUgYWxsIHNhdmVkIGRhdGEgZnJvbSBzZXNzaW9uU3RvcmFnZVxuICAgICAgc2Vzc2lvblN0b3JhZ2UuY2xlYXIoKTtcbiAgICB9XG5cbiAgfVxuXG4gIFxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlcy5hcHBMaXN0ICYmIGNoYW5nZXMuYXBwTGlzdC5jdXJyZW50VmFsdWUpIHtcbiAgICAgIHRoaXMuYXNzaWduR3JhZGllbnRzKCk7XG4gICAgfVxuICB9XG5cbiAgYXNzaWduR3JhZGllbnRzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmFwcExpc3QgJiYgdGhpcy5hcHBMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuYXBwTGlzdC5mb3JFYWNoKChhcHAsIGluZGV4KSA9PiB7XG4gICAgICAgIGFwcC5ncmFkaWVudCA9IHRoaXMuZ3JhZGllbnRzW2luZGV4ICUgdGhpcy5ncmFkaWVudHMubGVuZ3RoXTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsIGFwcHMgQXBwIFZlcnNpb24gSWQgcm91dGVcbiAgICpcbiAgICogQHBhcmFtIGFwcFZlcnNpb25JZFxuICAgKi9cbiAgb3BlbkFwcChhcHBWZXJzaW9uSWQ6IG51bWJlcik6IHZvaWQge1xuICAgIFxuICAgIGNvbnN0IGN1cnJlbnRVcmwgPSB3aW5kb3cubG9jYXRpb24ub3JpZ2luOyAvLyBHZXQgdGhlIGN1cnJlbnQgVVJMXG4gICAgLy8gVXBkYXRlZCBVUkwgY2hlY2sgbG9naWNcbiAgICBpZiAoY3VycmVudFVybC5pbmNsdWRlcygnbG9jYWxob3N0OjQyMDAnKSB8fCBjdXJyZW50VXJsLmluY2x1ZGVzKCdidWlsZGVyLmF4b25hdG9yLmNvbScpIHx8IGN1cnJlbnRVcmwuaW5jbHVkZXMoJ2FuZHJvbWVkYS1idWlsZGVyLXFhLmF4b25hdG9yLmNvbScpKSB7XG4gICAgICBcbiAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSB1c2VyIGlzIGRlZmluZWQgYW5kIGhhcyBhIFVzZXJJRFxuICAgICAgaWYgKCF0aGlzLnVzZXIpIHtcbiAgICAgICAgICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ1VzZXIgbm90IGZvdW5kIG9yIG5vdCBsb2dnZWQgaW4nLCBBeG9TbmFja0JhclR5cGUuZXJyb3IpO1xuICAgICAgICAgIHJldHVybjsgLy8gRXhpdCB0aGUgbWV0aG9kIGlmIHVzZXIgaXMgbm90IGF2YWlsYWJsZVxuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBmb3IgcmVxdWlyZWQgcGVybWlzc2lvbnNcbiAgICAgIGNvbnN0IGhhc1JlcXVpcmVkUGVybWlzc2lvbiA9IHRoaXMucGVybWlzc2lvbnMuaW5jbHVkZXMoJ0FQUF9CVUlMREVSJykgfHwgdGhpcy5wZXJtaXNzaW9ucy5pbmNsdWRlcygnQVBQX0lBTScpO1xuICAgICAgaWYgKCFoYXNSZXF1aXJlZFBlcm1pc3Npb24pIHtcbiAgICAgICAgICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ1lvdSBuZWVkIGVpdGhlciBBUFBfQlVJTERFUiBvciBBUFBfSUFNIHBlcm1pc3Npb25zIHRvIHBlcmZvcm0gdGhpcyBhY3Rpb24uJywgQXhvU25hY2tCYXJUeXBlLmVycm9yKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRGlyZWN0bHkgb3BlbiB0aGUgYXBwIHJlZ2FyZGxlc3Mgb2YgVVJMIGlmIHRoZSBjb25kaXRpb25zIGFyZSBub3QgbWV0XG4gICAgdGhpcy5vcGVuQXBwRXZlbnQuZW1pdChhcHBWZXJzaW9uSWQpO1xuICB9XG5cblxuXG4gIG5hdmlnYXRlVG9Ib21lKGFwcFZlcnNpb25JZDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlQnlVcmwoYGFwcHMvJHthcHBWZXJzaW9uSWR9L2hvbWVgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBmdW5jdGlvbiB1c2UgdG8gU3dpdGNoIHRoZSBvcmdhbml6YXRpb25cbiAgICovXG4gIHN3aXRjaEFjY291bnQob3JnYW5pemF0aW9uSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuc3dpdGNoQWNjb3VudEV2ZW50LmVtaXQob3JnYW5pemF0aW9uSWQpO1xuICAgIHRoaXMuZ2V0VXNlclBlcm1pc3Npb25zKCk7XG4gICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNpZ24gb3V0XG4gICAqL1xuICBzaWduT3V0KCk6IHZvaWQge1xuICAgIHRoaXMuX2xvZ2dpbmdTZXJ2aWNlLnRyYWNrRXZlbnQoJ3VzZXIgbG9nZ2VkIG91dCcse3N0ZXAgOiAnQnllIEJ5ZSAnK3RoaXMudXNlck5hbWV9KTtcbiAgICB0aGlzLl9hdXRoU2VydmljZS5zaWduT3V0KCk7XG4gIH1cblxuICAvKipcbiAgICogQmlsbGluZ1xuICAgKi9cbiAgbmF2aWdhdGVUb0JpbGxpbmcoKTogdm9pZCB7XG4gICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlQnlVcmwoJ3BheW1lbnRpbmZvL3ByaWNpbmcnKVxuICAgIFxuICB9XG5cblxuXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLyBDcmVhdGUgQXBwcC8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgLyoqXG4gICAqdG8gY3JlYXRlIG5ldyBhcHBcbiAgICovXG4gICBvcGVuQ3JlYXRlQXBwRGlhbG9nKCk6IHZvaWQge1xuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQXBwQ3JlYXRlRGlhbG9nQ29tcG9uZW50Q29tcG9uZW50LCB7XG4gICAgICB3aWR0aDogJzYwMHB4JyxcbiAgICAgIGhlaWdodDogJ2F1dG8nLFxuICAgICAgcGFuZWxDbGFzczogJ2N1c3RvbS1kaWFsb2ctY29udGFpbmVyJyxcbiAgICAgIGJhY2tkcm9wQ2xhc3M6ICdjdXN0b20tZGlhbG9nLWJhY2tkcm9wJ1xuICAgIH0pO1xuXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIGNvbnN0IHsgbmFtZSwgZGVzY3JpcHRpb24gfSA9IHJlc3VsdDtcblxuICAgICAgICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ0NyZWF0aW5nIEFwcC4uLicsIEF4b1NuYWNrQmFyVHlwZS5pbmZvKTtcbiAgICAgICAgdGhpcy5jcmVhdGVBcHAobmFtZSwgZGVzY3JpcHRpb24pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY3JlYXRlQXBwKG5hbWU6IHN0cmluZywgZGVzY3JpcHRpb246IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGZvcm1EYXRhRm9yU2VydmljZSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGZvcm1EYXRhRm9yU2VydmljZS5hcHBlbmQoJ25hbWUnLCBuYW1lKTtcbiAgICBmb3JtRGF0YUZvclNlcnZpY2UuYXBwZW5kKCdkZXNjcmlwdGlvbicsIGRlc2NyaXB0aW9uKTtcblxuICAgIHRoaXMuX21wQXBwTGlzdFNlcnZpY2UuYWRkQXBwQmFzaWNJbmZvKGZvcm1EYXRhRm9yU2VydmljZSkudG9Qcm9taXNlKClcbiAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgaWYgKHJlc3BvbnNlPy5hZGRBcHBCYXNpY0luZm8/LnN0YXR1cyA9PT0gJ3N1Y2Nlc3MnICYmIHJlc3BvbnNlLmFkZEFwcEJhc2ljSW5mby5hcHA/LmFwcHZlcnNpb25faWQpIHtcbiAgICAgICAgICAvL3RoaXMuX25hdmlnYXRpb24udXBkYXRlQ2xhc3NpY05hdmlnYXRpb25Sb3V0ZXMocmVzcG9uc2UuYWRkQXBwQmFzaWNJbmZvLmFwcC5hcHB2ZXJzaW9uX2lkKTtcbiAgICAgICAgICAvL3RoaXMuX3JvdXRlci5uYXZpZ2F0ZShbJ2FwcHMnLCByZXNwb25zZS5hZGRBcHBCYXNpY0luZm8uYXBwLmFwcHZlcnNpb25faWRdKTtcbiAgICAgICAgICBcbiAgICAgICAgICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ0FwcCBjcmVhdGVkLicsIEF4b1NuYWNrQmFyVHlwZS5zdWNjZXNzKTtcbiAgICAgICAgICB0aGlzLm9wZW5BcHAocmVzcG9uc2UuYWRkQXBwQmFzaWNJbmZvLmFwcC5hcHB2ZXJzaW9uX2lkKVxuICAgICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlPy5hZGRBcHBCYXNpY0luZm8/LmFwcCA9PT0gJ2FscmVhZHlfZXhpc3RzJykge1xuICAgICAgICAgIHRoaXMuX2F4b1NuYWNrQmFyLm9wZW5TbmFja0JhcignQXBwIGFscmVhZHkgZXhpc3RzJywgQXhvU25hY2tCYXJUeXBlLndhcm5pbmcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX2F4b1NuYWNrQmFyLm9wZW5TbmFja0JhcignT29wcyEgU29tZXRoaW5nIHdlbnQgd3JvbmcnLCBBeG9TbmFja0JhclR5cGUuZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgY3JlYXRpbmcgYXBwOicsIGVycm9yKTtcbiAgICAgICAgdmFyIGVycm9yTWVzc2FnZSA9ICdPb3BzISBTb21ldGhpbmcgd2VudCB3cm9uZydcbiAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgaWYgKGVycm9yID09PSAnQVhfRVJSXzY3JylcbiAgICAgICAge1xuICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gJ09vcHMhIENhblxcJ3QgcmVhY2ggb3VyIHNlcnZlcnMg8J+ToS4gUGxlYXNlIHdhaXQsIHdlXFwnbGwgbm90aWZ5IHlvdSBzb29uLic7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgICAgdGhpcy5fYXhvU25hY2tCYXIub3BlblNuYWNrQmFyKGVycm9yTWVzc2FnZSwgQXhvU25hY2tCYXJUeXBlLmVycm9yKTtcbiAgICAgIH0pO1xuICB9XG4vL1RyeWluZyB0byBpbXBsZW1lbnQgdXJsIGFzIHdlbGwgYXMgYnV0dG9uIGZ1bmN0aW9uYWxpdHkgZm9yIGluc3RhbGxpbmcgYXBwXG4vLyBhc3luYyBpbnN0YWxsQXBwKHVzZXJJbnB1dD86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBcbi8vICAgaWYgKCF1c2VySW5wdXQpIHtcbi8vICAgICB1c2VySW5wdXQgPSBwcm9tcHQoJ0VudGVyIHRoZSBzdHJpbmcgdG8gc2VuZCB0byB0aGUgQVBJOicpO1xuLy8gICAgIGlmICghdXNlcklucHV0KSB7XG4vLyAgICAgICAvLyBJZiB1c2VyIGNhbmNlbHMgb3IgcHJvdmlkZXMgbm8gaW5wdXQsIGRvIG5vdGhpbmdcbi8vICAgICAgIHJldHVybjtcbi8vICAgICB9XG4vLyAgIH1cblxuLy8gICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ0luc3RhbGxpbmcgQXBwLi4uJywgQXhvU25hY2tCYXJUeXBlLmluZm8pO1xuICBcbiBcbmNoZWNrQW5kUHVibGlzaEFwcChpbnN0YWxsZWRBcHA6IHN0cmluZykge1xuICAvL1xuICBjb25zdCBhcHBOYW1lY2hlY2sgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYXBwbmFtZScpOyAvLyBSZXBsYWNlIHdpdGggeW91ciBsb2dpYyB0byBnZXQgYXBwTmFtZWNoZWNrXG4gIGNvbnN0IGFwcFB1Ymxpc2hTdGF0dXMgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgncHVibGlzaHN0YXR1cycpOyAvLyBSZXBsYWNlIHdpdGggeW91ciBsb2dpYyB0byBnZXQgYXBwUHVibGlzaFN0YXR1c1xuICBjb25zdCBhcHBJbnN0YWxsU3RhdHVzPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCdpbnN0YWxsc3RhdHVzJylcblxuICAgaWYgKGFwcE5hbWVjaGVjayA9PSBudWxsICYmIGFwcFB1Ymxpc2hTdGF0dXMgPT0gXCJGYWxzZVwiICYmIGFwcEluc3RhbGxTdGF0dXM9PVwiVHJ1ZVwiKSB7XG4gICAgY29uc3QgYXBwSWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgncHVibGlzaEFwcElkRGF0YScpO1xuICAgIGNvbnN0IGFwcFZlcnNpb24gPSBcIjEuMDBcIjtcbiAgICBjb25zdCBwdWJsaXNoU3RhdHVzID0gXCJQXCI7XG4gICAgaWYgKGFwcElkKSB7XG4gICAgICB0aGlzLl9jb21tb25TZXJ2aWNlLnB1Ymxpc2hhcHAoYXBwSWQsIGFwcFZlcnNpb24sIHB1Ymxpc2hTdGF0dXMpLnN1YnNjcmliZShcbiAgICAgICAgcmVzcG9uc2UgPT4ge1xuICAgICAgICAgIC8vIEhhbmRsZSB0aGUgcmVzcG9uc2UgaWYgbmVlZGVkXG4gICAgICAgICAgY29uc29sZS5sb2coJ1B1Ymxpc2ggcmVzcG9uc2U6JywgcmVzcG9uc2UpO1xuICAgICAgICAgIC8vIGNvbnN0IGFwcE5hbWUgPSBpbnN0YWxsZWRBcHAgfHwgJ1lvdXIgQXBwJztcbiAgICAgICAgICAvLyBjb25zdCBhcHBWZXJzaW9uID0gJzEuMDAwJztcbiAgICAgICAgICAvLyBjb25zdCBzdWNjZXNzTWVzc2FnZSA9IGBBcHA6ICR7YXBwTmFtZX0gdmVyc2lvbiAke2FwcFZlcnNpb259IGlzIHB1Ymxpc2hlZCBzdWNjZXNzZnVsbHkuYDtcbiAgICAgICAgIC8vIHRoaXMub3BlblN1Y2Nlc3NEaWFsb2coJ3ZlcnNpb24gcHVibGlzaGVkIHN1Y2Nlc3NmdWxseSEnKTtcbiAgICAgICAgIGNvbnN0IGFwcE5hbWUgPSBpbnN0YWxsZWRBcHA7XG4gICAgICAgICBjb25zdCBhcHBWZXJzaW9uID0gJzEuMDAwJztcbiAgICAgICAgIGNvbnN0IGJveGhlYWRpbmc9YEluc3RhbGxlZGBcbiAgICAgICAgIGNvbnN0IHN1Y2Nlc3NNZXNzYWdlID0gYEFwcDogJHthcHBOYW1lfSB2ZXJzaW9uICR7YXBwVmVyc2lvbn0gaXMgaW5zdGFsbGVkIHN1Y2Nlc3NmdWxseS4gYDtcbiAgICAgICAgIGNvbnN0IHN1Y2Nlc3NEaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFN1Y2Nlc3NEaWFsb2dDb21wb25lbnQsIHtcbiAgICAgICAgICAgd2lkdGg6ICc1MDBweCcsXG4gICAgICAgICAgIGRhdGE6IHsgbWVzc2FnZTogc3VjY2Vzc01lc3NhZ2UgLCBoZWFkaW5nOmJveGhlYWRpbmd9LFxuICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWVcbiAgICAgICAgIH0pO1xuICAgICAgICAgIC8vIFJlbW92ZSBsb2NhbCBzdG9yYWdlIGl0ZW1zXG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ3B1Ymxpc2hBcHBJZERhdGEnKTtcbiAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgncHVibGlzaHN0YXR1cycpO1xuICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdpbnN0YWxsc3RhdHVzJyk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yID0+IHtcbiAgICAgICAgICAvLyBIYW5kbGUgZXJyb3IgaWYgbmVlZGVkXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgcHVibGlzaGluZyBhcHA6JywgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuZmV0Y2hBcHBEZXRhaWxzKGZsYXR0ZW46IGFueSkge1xuICBpZiAoZmxhdHRlbiAmJiBmbGF0dGVuLmFwcFZlcnNpb25JZCkge1xuICAgIHRoaXMuX21wQXBwTGlzdFNlcnZpY2UuZmV0Y2hBcHBEZXRhaWxzKGZsYXR0ZW4uYXBwVmVyc2lvbklkLCB0aGlzLmNvbW1vbkxpYkNvbmZpZy5heG9uYXRvclgxVXJsKS5zdWJzY3JpYmUoXG4gICAgICAocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBpc0FwcENoYW5nZWRBZnRlclB1Ymxpc2ggPSByZXNwb25zZT8uZGF0YT8uZGV0YWlscz8uaXNfYXBwX2NoYW5nZWRfZWRpdGVkX2FmdGVyX3B1Ymxpc2ggfHwgZmFsc2U7XG4gICAgICAgIHRoaXMuaXNBcHBDaGFuZ2VkQWZ0ZXJQdWJsaXNoID0gaXNBcHBDaGFuZ2VkQWZ0ZXJQdWJsaXNoO1xuXG4gICAgICAgIHRoaXMuaXNBcHBDaGFuZ2VkQWZ0ZXJQdWJsaXNoID0gdHJ1ZTtcbiAgICAgICAgY29uc29sZS5sb2coXCJEZXRhaWxzIEZvdW5kXCIpXG4gICAgICAgIC8vIFRyaWdnZXIgY2hhbmdlIGRldGVjdGlvbiB0byB1cGRhdGUgdGhlIHZpZXdcbiAgICAgICAgLy8gdGhpcy5kZXRlY3RDaGFuZ2VzKCk7IC8vIDwtLS0gQ2FsbCBkZXRlY3RDaGFuZ2VzKCkgaGVyZVxuXG4gICAgICB9LFxuICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIGFwcCBkZXRhaWxzOicsIGVycm9yKTtcbiAgICAgIH1cbiAgICApO1xuICB9IGVsc2Uge1xuICAgIGNvbnNvbGUuZXJyb3IoJ2FwcFZlcnNpb25JZCBpcyBtaXNzaW5nIG9yIGludmFsaWQgaW4gdGhlIGZsYXR0ZW4gb2JqZWN0OicsIGZsYXR0ZW4pO1xuICB9XG59XG5cblxuYXN5bmMgIGluc3RhbGxBcHAodXNlcklucHV0OiBzdHJpbmcsIGNhdGVnb3J5OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgLy9cbiAgXG4gIHRoaXMuX2F4b1NuYWNrQmFyLm9wZW5TbmFja0JhciggJ0luc3RhbGxpbmcgQXBwLi4uJywgQXhvU25hY2tCYXJUeXBlLmluZm8pO1xuICBjb25zdCBsb2FkaW5nRGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihMb2FkaW5nQXBwaW5zdGFsbENvbXBvbmVudCwge1xuICAgIHdpZHRoOiAnNjAwcHgnLFxuICAgIGRhdGE6IHsgbG9hZGluZ01lc3NhZ2U6ICdJbnN0YWxsaW5nIGFwcCwgcGxlYXNlIHdhaXQuLi4nIH0sXG4gICAgZGlzYWJsZUNsb3NlOiB0cnVlXG4gIH0pO1xuICAvL2NvbnN0IGxvYWRpbmdEaWFsb2dSZWYgPSB0aGlzLm9wZW5Mb2FkaW5nRGlhbG9nV2l0aE1lc3NhZ2UoJ1BsZWFzZSB3YWl0LiBJbnN0YWxsaW5nIGluIHByb2dyZXNzLi4uJyk7XG4gIFxuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICByZXF1ZXN0U3RyaW5nOiB1c2VySW5wdXQsXG4gICAgICBzZWNvbmRTdHJpbmc6IGNhdGVnb3J5XG4gICAgfTsgXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHAucG9zdDxzdHJpbmc+KCdJbnN0YWxsQXBwJywgZGF0YSwge1xuICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyAvLyBTZXQgY29udGVudCB0eXBlIHRvIGFwcGxpY2F0aW9uL2pzb25cbiAgICAgIH0pLFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlXG4gICAgfSkudG9Qcm9taXNlKCk7XG5cbiAgICAvL2NvbnNvbGUubG9nKCdSZXNwb25zZSBmcm9tIHNlcnZlcjonLCByZXNwb25zZSk7IFxuICAgIFxuICAgIC8vY29uc3QgcmVzcG9uc2VPYmplY3QgPSBKU09OLnBhcnNlKHJlc3BvbnNlKTtcbiAgICBcbiAgICBcbiAgLy8gICBpZiAocmVzcG9uc2UpIHtcblxuICAvLyAgICAgaWYocmVzcG9uc2VPYmplY3Quc3RhdHVzPT1cInN1Y2Nlc3NcIil7XG4gIC8vICAgICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ0FwcCBpbnN0YWxsZWQgc3VjY2Vzc2Z1bGx5JywgQXhvU25hY2tCYXJUeXBlLnN1Y2Nlc3MpO1xuICAvLyAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gIC8vICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgLy8gICAgIH0sIDE1MDAwKTtcbiAgLy8gICB9IGVsc2UgaWYocmVzcG9uc2VPYmplY3Quc3RhdHVzPT0nZmFpbHVyZScpIHtcbiAgLy8gICAgIHRoaXMuX2F4b1NuYWNrQmFyLm9wZW5TbmFja0JhcignRm9ybSBOb3QgRm91bmQgaW4gdGhpcyBhcHAnLCBBeG9TbmFja0JhclR5cGUuZXJyb3IpO1xuICAvLyAgIH1cbiAgLy8gICAgIGVsc2Uge1xuICAvLyAgICAgdGhpcy5fYXhvU25hY2tCYXIub3BlblNuYWNrQmFyKCdPb3BzISBTb21ldGhpbmcgd2VudCB3cm9uZyB3aGlsZSBpbnN0YWxsaW5nIHRoZSBhcHAuJywgQXhvU25hY2tCYXJUeXBlLmVycm9yKTtcbiAgICAgIFxuICAvLyAgICAgY29uc29sZS5lcnJvcihBeG9TbmFja0JhclR5cGUuZXJyb3IpO1xuICAvLyAgIH19XG4gIC8vIH0gY2F0Y2ggKGVycm9yKSB7XG4gIC8vICAgY29uc29sZS5lcnJvcignRXJyb3IgaW5zdGFsbGluZyBhcHA6JywgZXJyb3IpO1xuICAvLyAgIHRoaXMuX2F4b1NuYWNrQmFyLm9wZW5TbmFja0JhcignT29wcyEgU29tZXRoaW5nIHdlbnQgd3Jvbmcgd2hpbGUgaW5zdGFsbGluZyB0aGUgYXBwLicsIEF4b1NuYWNrQmFyVHlwZS5lcnJvcik7XG4gIC8vICAgLy90aGlzLl9sb2dnaW5nU2VydmljZS50cmFja0V2ZW50KCdFcnJvciBvY2N1cnJlZCB3aGlsZSBpbnN0YWxsaW5nIGFwcCcsIGVycm9yKTtcbiAgLy8gfVxuXG4gICAgXG4gICAgICAvL2NvbnN0IHJlc3BvbnNlT2JqZWN0ID0gSlNPTi5wYXJzZShyZXNwb25zZSk7XG4gICAgICAvL2NvbnNvbGUubG9nKHJlc3BvbnNlT2JqZWN0KTtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiSW5zdGFsbGVkQXBwTmFtZVwiLHVzZXJJbnB1dClcbiAgICAgIGNvbnN0IHJlc3BvbnNlT2JqZWN0ID0gdHlwZW9mIHJlc3BvbnNlID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UocmVzcG9uc2UpIDogcmVzcG9uc2U7XG4gICAgICBcbiAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICAvL2lmIChyZXNwb25zZU9iamVjdCkge1xuICAgICAgICAgaWYgKHJlc3BvbnNlT2JqZWN0LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHsgICAgICAgICAgXG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJpbnN0YWxsc3RhdHVzXCIsXCJUcnVlXCIpXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIHRoaXMuX2F4b1NuYWNrQmFyLm9wZW5TbmFja0JhcignQXBwIGluc3RhbGxlZCBzdWNjZXNzZnVsbHknLCBBeG9TbmFja0JhclR5cGUuc3VjY2Vzcyk7XG4gICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgICAgICAgICAgICAgbG9hZGluZ0RpYWxvZ1JlZi5jbG9zZSgpO1xuICAgICAgICAgICAgfSwgMjAwMDApO1xuICAgICAgICAgICAgXG4gICAgICAgICAgIFxuICAgICAgICAgIC8vIH0gZWxzZSBpZiAocmVzcG9uc2VPYmplY3Quc3RhdHVzID09PSAnZmFpbHVyZScpIHtcbiAgICAgICAgICAvLyAgIHRoaXMuX2F4b1NuYWNrQmFyLm9wZW5TbmFja0JhcignRm9ybSBOb3QgRm91bmQgaW4gdGhpcyBhcHAnLCBBeG9TbmFja0JhclR5cGUuZXJyb3IpO1xuICAgICAgICB9ZWxzZSB7XG4gICAgICAgICAgdGhpcy5fYXhvU25hY2tCYXIub3BlblNuYWNrQmFyKCdGb3JtIGNhbm5vdCBiZSBmb3VuZCBmb3IgdGhpcyBhcHAnLCBBeG9TbmFja0JhclR5cGUuZXJyb3IpO1xuICAgICAgICAgIGxvYWRpbmdEaWFsb2dSZWYuY2xvc2UoKTtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKEF4b1NuYWNrQmFyVHlwZS5lcnJvcik7XG4gICAgICAgIH19XG4gICAgICAgIGVsc2V7XG4gICAgICAgICAgdGhpcy5fYXhvU25hY2tCYXIub3BlblNuYWNrQmFyKCdPb3BzIVNvbWV0aGluZyB3ZW50IHdyb25nIHdoaWxlIGNyZWF0aW5nIHRoZSBhcHAnLCBBeG9TbmFja0JhclR5cGUuZXJyb3IpO1xuICAgICAgICAgIGxvYWRpbmdEaWFsb2dSZWYuY2xvc2UoKTtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKEF4b1NuYWNrQmFyVHlwZS5lcnJvcik7XG4gICAgICAgIH1cbiAgICB9ICAgXG5cblxuICAgIG9wZW5EZWxldGVBcHBEaWFsb2coYXBwVmVyc2lvbklkOm51bWJlcil7XG4gICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKENvbmZpcm1hdGlvbk1vZGFsQ29tcG9uZW50LCB7XG4gICAgICAgIHdpZHRoOiAnMzAlJyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgdGl0bGU6ICdBcmUgeW91IHN1cmU/JyxcbiAgICAgICAgbWVzc2FnZTogJ0FyZSB5b3Ugc3VyZSB3YW50IHRvIGRlbGV0ZSB0aGlzIGFwcD8nLFxuICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogJ0RlbGV0ZScsXG4gICAgICAgIGNhbmNlbEJ1dHRvblRleHQ6ICdDYW5jZWwnLFxuICAgICAgICBjb25maXJtQnV0dG9uVHlwZTogJ2RlbGV0ZSdcbiAgICAgIH0sXG4gICAgICBwYW5lbENsYXNzOiAnY29uZmlybS1tb2RhbC1jb250YWluZXInXG4gICAgICB9KTtcblxuICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICB0aGlzLmRlbGV0ZUFwcChhcHBWZXJzaW9uSWQpOyAvLyBQcm9jZWVkIHdpdGggZGVsZXRpb25cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZGVsZXRlQXBwKGFwcFZlcnNpb25JZDpudW1iZXIpOiB2b2lkIHtcbiAgICAgIHRoaXMuX2ZsYXR0ZW5TZXJ2aWNlLmdldEZsYXR0ZW5EYXRhKGFwcFZlcnNpb25JZClcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX3Vuc3Vic2NyaWJlQWxsKSxcbiAgICAgICAgICAgICAgc3dpdGNoTWFwKChmbGF0dGVuKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoZmxhdHRlbiAmJiBmbGF0dGVuLmFwcElkICE9PSB1bmRlZmluZWQgJiYgZmxhdHRlbi52ZXJzaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhcHBJZCA9IGZsYXR0ZW4uYXBwSWQudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhcHBWZXJzaW9uID0gZmxhdHRlbi52ZXJzaW9uLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgQXBwVj1hcHBWZXJzaW9uSWQ7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJBcHAgdmVyc2lvbiBJZDpcIithcHBWZXJzaW9uSWQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhPXtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiQXBwIElkXCIgOiBmbGF0dGVuLmFwcElkLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJBcHAgTmFtZVwiIDogZmxhdHRlbi5hcHBOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJBcHAgdmVyc2lvblwiIDogZmxhdHRlbi52ZXJzaW9uXG4gICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0ZldGNoZWQgYXBwIGRldGFpbHMgZnJvbSBmbGF0dGVuOicsIHsgYXBwSWQsIGFwcFZlcnNpb24gfSk7XG4gIFxuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tcEFwcExpc3RTZXJ2aWNlLmRlbGV0ZUFwcChhcHBJZCwgYXBwVmVyc2lvbi50b1N0cmluZygpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0Vycm9yIG9jY3VycmVkIHdoaWxlIGRlbGV0aW5nIGFwcDonLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSBlcnJvciwgZS5nLiwgZGlzcGxheSBhIG1lc3NhZ2Ugb3IgcGVyZm9ybSBhZGRpdGlvbmFsIGFjdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnRXJyb3I6IGZsYXR0ZW4gb2JqZWN0IG9yIGl0cyBwcm9wZXJ0aWVzIGFyZSB1bmRlZmluZWQuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIGZsYXR0ZW4gb3IgaXRzIHByb3BlcnRpZXMgYXJlIHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCdGbGF0dGVuIG9iamVjdCBvciBpdHMgcHJvcGVydGllcyBhcmUgdW5kZWZpbmVkJyk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSBzdWNjZXNzIHJlc3BvbnNlIGhlcmUgaWYgbmVlZGVkXG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnRGVsZXRlIGFwcCBzdWNjZXNzOicsIHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBkZWxldGVkIGFwcCBmcm9tIHRoZSBhcHBMaXN0XG4gICAgICAgICAgICAgICAgIHRoaXMuYXBwTGlzdCA9IHRoaXMuYXBwTGlzdC5maWx0ZXIoYXBwID0+IGFwcC5hcHBWZXJzaW9uSWQgIT09IGFwcFZlcnNpb25JZCk7XG4gICAgICAgICAgICAgICAgIHRoaXMuX2F4b1NuYWNrQmFyLm9wZW5TbmFja0JhcignQXBwIGRlbGV0ZWQgc3VjY2Vzc2Z1bGx5JywgQXhvU25hY2tCYXJUeXBlLnN1Y2Nlc3MpO1xuICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnaW5nU2VydmljZS50cmFja0V2ZW50KCdBcHAgZGVsZXRlZCcsIHRoaXMuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAvLyBNYW51YWxseSB0cmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb24gdG8gdXBkYXRlIHRoZSB2aWV3XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7ICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSBlcnJvciBoZXJlIGlmIG5lZWRlZFxuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRGVsZXRlIGFwcCBlcnJvcjonLCBlcnJvcik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuICB9XG4gICAgXG4gIFxuXG5wcml2YXRlIG9wZW5Mb2FkaW5nRGlhbG9nV2l0aE1lc3NhZ2UobWVzc2FnZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIFxuICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKExvYWRpbmdBcHBpbnN0YWxsQ29tcG9uZW50LCB7XG4gICAgd2lkdGg6ICc1MDBweCcsXG4gICAgXG4gICAgcGFuZWxDbGFzczogJ2FwcC1sb2FkaW5nLWRpYWxvZycsXG4gICAgZGF0YTogeyBtZXNzYWdlLCB0eXBlOiAnWW91ciBhcHAgaXMgYmVpbmcgUHVibGlzaGVkLi4uJyB9LFxuICB9KTtcblxuICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGRpYWxvZ1JlZi5jbG9zZSgpO1xuICAgICAgLy90aGlzLm9wZW5TdWNjZXNzRGlhbG9nKCd2ZXJzaW9uIHB1Ymxpc2hlZCBzdWNjZXNzZnVsbHkhJyk7XG4gICAgICByZXNvbHZlKCk7IC8vIFJlc29sdmUgdGhlIHByb21pc2UgYWZ0ZXIgY2xvc2luZyB0aGUgZGlhbG9nXG4gICAgfSwgMTM4MDApOyAvLyAxMy42IHNlY29uZHMgaW4gbWlsbGlzZWNvbmRzXG4gIH0pO1xufVxuXG5wcml2YXRlIG9wZW5TdWNjZXNzRGlhbG9nKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAvL1xuICB0aGlzLl9mbGF0dGVuU2VydmljZS5mbGF0dGVuJC5waXBlKFxuICAgIHRha2UoMSksXG4gICAgc3dpdGNoTWFwKChmbGF0dGVuKSA9PiB7XG4gICAgICBpZiAoIWZsYXR0ZW4gfHwgIWZsYXR0ZW4uYXBwVmVyc2lvbklkKSB7XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCdGbGF0dGVuIG9iamVjdCBvciBpdHMgcHJvcGVydGllcyBhcmUgdW5kZWZpbmVkJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZm9ya0pvaW4oe1xuICAgICAgICBmbGF0dGVuOiBvZihmbGF0dGVuKSxcbiAgICAgICAgYXBwRGV0YWlsczogdGhpcy5fbXBBcHBMaXN0U2VydmljZS5mZXRjaEFwcERldGFpbHMoZmxhdHRlbi5hcHBWZXJzaW9uSWQsIHRoaXMuY29tbW9uTGliQ29uZmlnLmF4b25hdG9yWDFVcmwpLnBpcGUoXG4gICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIGFwcCBkZXRhaWxzOicsIGVycm9yKTtcbiAgICAgICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICB9KTtcbiAgICB9KVxuICApLnN1YnNjcmliZSgoeyBmbGF0dGVuLCBhcHBEZXRhaWxzIH0pID0+IHtcbiAgICBjb25zb2xlLmxvZygnZmV0Y2hBcHBEZXRhaWxzIGZ1bmN0aW9uIGNhbGxlZCA0Jyk7XG4gICAgdGhpcy5pc0FwcENoYW5nZWRBZnRlclB1Ymxpc2ggPSBhcHBEZXRhaWxzPy5kYXRhPy5kZXRhaWxzPy5pc19hcHBfY2hhbmdlZF9lZGl0ZWRfYWZ0ZXJfcHVibGlzaCB8fCBmYWxzZTsgLy8gU2V0IGlzQXBwQ2hhbmdlZEFmdGVyUHVibGlzaCBiYXNlZCBvbiB0aGUgQVBJIHJlc3BvbnNlXG4gICAgLy8gRmV0Y2ggdGhlIG1pbm9yIHZlcnNpb24gZnJvbSBnZXRWZXJzaW9uTGlzdFxuICAgIHRoaXMuX2NvbW1vblNlcnZpY2UuZ2V0VmVyc2lvbkxpc3QoZmxhdHRlbi5hcHBJZCwgZmxhdHRlbi52ZXJzaW9uKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgbGV0IGFwcE1pbm9yVmVyc2lvbiA9ICdVbmtub3duJzsgLy8gRGVmYXVsdCB2YWx1ZSBpZiBtaW5vciB2ZXJzaW9uIGlzIG5vdCBmb3VuZFxuICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQudiAmJiByZXN1bHQudi52ZXJzaW9uc2xpc3QgJiYgcmVzdWx0LnYudmVyc2lvbnNsaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgYXBwTWlub3JWZXJzaW9uID0gcmVzdWx0LnYudmVyc2lvbnNsaXN0WzBdLmFwcG1pbm9ydmVyc2lvbjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFwcE5hbWUgPSBmbGF0dGVuPy5hcHBOYW1lIHx8ICdZb3VyIEFwcCc7XG4gICAgICAgIGNvbnN0IGFwcFZlcnNpb24gPSBmbGF0dGVuPy52ZXJzaW9uIHx8ICd2ZXJzaW9uJztcbiAgICAgICAgY29uc3Qgc3VjY2Vzc01lc3NhZ2UgPSBgQXBwOiAke2FwcE5hbWV9IHZlcnNpb24gJHthcHBNaW5vclZlcnNpb259IGlzIEluc3RhbGxlZCBzdWNjZXNzZnVsbHkuYDtcbiAgICAgICAgY29uc3QgYXBwaGVhZGluZyA9YEluc3RhbGxlZGBcbiAgICAgICAgY29uc3Qgc3VjY2Vzc0RpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oU3VjY2Vzc0RpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgICAgIHdpZHRoOiAnNTAwcHgnLFxuICAgICAgICAgIGRhdGE6IHsgbWVzc2FnZTogc3VjY2Vzc01lc3NhZ2V9XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn1cblxuY2FwaXRhbGl6ZVdvcmRzKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHN0clxuICAgIC5zcGxpdCgnICcpXG4gICAgLm1hcCh3b3JkID0+IHdvcmQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB3b3JkLnNsaWNlKDEpKVxuICAgIC5qb2luKCcgJyk7XG59XG5cblxuICAvKipcbiAgICogT24gZGVzdHJveVxuICAgKi9cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgLy8gVW5zdWJzY3JpYmUgZnJvbSBhbGwgc3Vic2NyaXB0aW9uc1xuICAgIHRoaXMuX3Vuc3Vic2NyaWJlQWxsLm5leHQoKTtcbiAgICB0aGlzLl91bnN1YnNjcmliZUFsbC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgZGlzYWJsZVFSKGFwcFZlcnNpb25JZDogYW55ICwgaW5kZXg6IG51bWJlcil7XG4gICAgbGV0IGRhdGEgPSB7XG4gICAgICBhcHBWZXJzaW9uSWQgOiBhcHBWZXJzaW9uSWRcbiAgICB9O1xuICBcbiAgICB0aGlzLl9kYXRhVmlld0ZpbHRlcnNTZXJ2aWNlLmRpc2FibGVRUihkYXRhKVxuICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgdGhpcy5fYXhvU25hY2tCYXIub3BlblNuYWNrQmFyKCdRUiBjb2RlIGRpc2FibGVkIHN1Y2Nlc3NmdWxseScsIEF4b1NuYWNrQmFyVHlwZS5zdWNjZXNzKTtcbiAgICAgICAgICB0aGlzLl9sb2dnaW5nU2VydmljZS50cmFja0V2ZW50KCdRUiBEaXNhYmxlZCcse3Jlc3BvbnNlfSk7XG4gICAgICAgICAgdGhpcy5hcHBMaXN0W2luZGV4XS5xcl9zdGF0dXMgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0sXG4gICAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOicsIGVycm9yKTtcbiAgICAgICAgICAvLyBIYW5kbGUgdGhlIGVycm9yXG4gICAgICAgIH1cbiAgICAgICk7ICBcbiAgfVxuXG4gIGRpc2FibGVRUkRpYWxvZyhhcHBWZXJzaW9uSWQ6IGFueSwgaW5kZXg6IG51bWJlcil7XG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDb25maXJtYXRpb25Nb2RhbENvbXBvbmVudCwge1xuICAgICAgd2lkdGg6ICczMCUnLFxuICAgICAgZGF0YToge1xuICAgICAgICB0aXRsZTogJ0FyZSB5b3Ugc3VyZT8nLFxuICAgICAgICBtZXNzYWdlOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRpc2FibGUgUVIgZm9yIHRoaXMgZm9ybT8nLFxuICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogJ0Rpc2FibGUnLFxuICAgICAgICBjYW5jZWxCdXR0b25UZXh0OiAnQ2FuY2VsJyxcbiAgICAgICAgY29uZmlybUJ1dHRvblR5cGU6ICdkZWxldGUnXG4gICAgICB9LFxuICAgICAgcGFuZWxDbGFzczogJ2NvbmZpcm0tbW9kYWwtY29udGFpbmVyJ1xuICAgIH0pO1xuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICB0aGlzLmRpc2FibGVRUihhcHBWZXJzaW9uSWQsIGluZGV4KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdldFVzZXJQZXJtaXNzaW9ucygpIHtcbiAgICB0aGlzLl9jb21tb25TZXJ2aWNlLmdldFVzZXJEZXRhaWwoKS5zdWJzY3JpYmUoXG4gICAgICAocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAnc3VjY2VzcycgJiYgcmVzcG9uc2UudWQpIHtcbiAgICAgICAgICB0aGlzLnBlcm1pc3Npb25zID0gcmVzcG9uc2UudWQucGVybWlzc2lvbnM7IC8vIEV4dHJhY3QgcGVybWlzc2lvbnNcbiAgICAgICAgICB0aGlzLmhhc09yZ1VzZXJBY2Nlc3MgPSB0aGlzLnBlcm1pc3Npb25zLmluY2x1ZGVzKCdPUkdfSUFNJyk7IC8vIENoZWNrIGlmICdPUkdfSUFNJyBpcyBpbiB0aGUgcGVybWlzc2lvbnMgYXJyYXlcbiAgICAgICAgICBcbiAgICAgICAgICAvLyBTaG93IG92ZXJsYXkgb25seSBpZiAnQUNDRVNTX1dFQl9QT1JUQUwnIHBlcm1pc3Npb24gaXMgbm90IHByZXNlbnRcbiAgICAgICAgICB0aGlzLnNob3dXZWJQb3J0YWxBY2Nlc3NPdmVybGF5ID0gIXRoaXMucGVybWlzc2lvbnMuaW5jbHVkZXMoJ0FDQ0VTU19XRUJfUE9SVEFMJyk7XG5cbiAgICAgICAgICBjb25zb2xlLmxvZygnVXNlciBQZXJtaXNzaW9uczonLCB0aGlzLnBlcm1pc3Npb25zKTtcbiAgICAgICAgICBjb25zb2xlLmxvZygnSXMgQnVpbGRlciBBY2Nlc3M6JywgdGhpcy5oYXNPcmdVc2VyQWNjZXNzKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyB1c2VyIGRldGFpbHM6JywgZXJyb3IpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxufVxuXG4iLCI8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBmbGV4LWF1dG8gaC1mdWxsLWFwcExpc3QgbXktYXBwLWxpc3Qgb3ZlcmZsb3ctaGlkZGVuIHBhZ2UtYmFja2dyb3VuZCBheG8tZm9udFwiPlxuICAgIDwhLS0gSGVhZGVyIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJzdGlja3kgdG9wLTAgYmctd2hpdGVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFwcC1saXN0LW1haW4taGVhZGVyIHJlbGF0aXZlIGZsZXggZmxleC0wIGgtMTIgei00OSBib3gtYm9yZGVyIHB4LTZcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtYXV0byBpdGVtcy1jZW50ZXIgbWluLXctMFwiPiA8aW1nIGNsYXNzPVwidy0zNiBoLTdcIiBzcmM9XCJhc3NldHMvaW1hZ2VzL2xvZ28vYXhvLWxvZ28uc3ZnXCIgYWx0PVwiTG9nbyBpbWFnZVwiPiA8c3BhbiBjbGFzcz1cImJldGFcIj5CZXRhPC9zcGFuPiA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtYXV0byBqdXN0aWZ5LWVuZCBpdGVtcy1jZW50ZXIgbWluLXctMCBnYXAtM1wiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGNsYXNzPVwibXQtMS41XCI+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+TXkgQXBwczwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiaGFzQXBwQnVpbGRlclBlcm1pc3Npb25cIiBjbGFzcz1cInByaW1hcnktYnRuIGF4by1mb250IHctMjhcIiAoY2xpY2spPVwib3BlbkNyZWF0ZUFwcERpYWxvZygpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4+Q3JlYXRlIEFwcDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIEFwcCBMaXN0IHdpdGggT3ZlcmxheSAtLT5cbiAgICA8ZGl2IGNsYXNzPVwicmVsYXRpdmUgZmxleC1hdXRvIGFwcC1saXN0IGgtZnVsbC1hcHBMaXN0IHB4LTQgcHktNSBzbTpweS04IG92ZXJmbG93LWF1dG9cIj5cbiAgICAgICAgPCEtLSBPdmVybGF5IGZvciB3ZWIgcG9ydGFsIGFjY2VzcyAtLT5cbiAgICAgICAgPGRpdiAqbmdJZj1cInNob3dXZWJQb3J0YWxBY2Nlc3NPdmVybGF5XCIgY2xhc3M9XCJwZXJtaXNzaW9uLW92ZXJsYXlcIj5cbiAgICAgICAgICAgIFlvdSBkb24ndCBoYXZlIHBlcm1pc3Npb24gdG8gYWNjZXNzIFdlYiBQb3J0YWwuXG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhcHBMaXN0Lmxlbmd0aDsgZWxzZSBub3RFbXB0eUFwcExpc3RcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcHAtZ3JpZCBpdGVtcy1zdGFydCBjYXJkLWJvZHkgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtb3V0ZXItZGl2XCIgKm5nRm9yPVwibGV0IGFwcERldGFpbCBvZiBhcHBMaXN0OyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgIDxmdXNlLWNhcmQgY2xhc3M9XCJmdXNlLWNhcmQtYXBwIGZsZXggZmxleC1jb2wgZ2FwLTIgZmlsdGVyLWxpc3RcIiBbbmdTdHlsZV09XCJ7J2JhY2tncm91bmQnOiBhcHBEZXRhaWwuZ3JhZGllbnR9XCIgKGNsaWNrKT1cIm9wZW5BcHAoYXBwRGV0YWlsLmFwcFZlcnNpb25JZClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJhcHBEZXRhaWwucXJfc3RhdHVzID09PSB0cnVlICYmIHNob3dRUkljb25cIiAoY2xpY2spPVwiZGlzYWJsZVFSRGlhbG9nKGFwcERldGFpbC5hcHBWZXJzaW9uSWQsIGkpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XCIgY2xhc3M9XCJmbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlciBib3JkZXItMCByb3VuZGVkLWZ1bGwgcXItaWNvbiBiZy13aGl0ZSBhYnNvbHV0ZSB0b3AtNCByaWdodC00XCIgIFtuZ0NsYXNzXT1cInsnYXBwSG92ZXInOiBvcGVuUG9wdXBNZW51ID09PSBhcHBEZXRhaWwuYXBwVmVyc2lvbklkfVwiIHN0eWxlPVwicGFkZGluZzogLjNyZW07XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBtYXRUb29sdGlwPVwiRGlzYWJsZSBRUlwiICBzcmM9XCJhc3NldHMvaWNvbnMvYXhvL3NjdWxwdG9yL2F4b19xcmNvZGVfbmV3LnN2Z1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJoLTMgdy0zIG9iamVjdC1jb3ZlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGNhcmQganVzdGlmeS1iZXR3ZWVuXCIgc3R5bGU9XCJtYXJnaW4tbGVmdDogLTIwcHg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRvdHMtdmVydGljYWwtYXBwXCIgKm5nSWY9XCJzaG93RG90c09wdGlvblwiICBbbmdDbGFzc109XCJ7J2FwcEhvdmVyJzogb3BlblBvcHVwTWVudSA9PT0gYXBwRGV0YWlsLmFwcFZlcnNpb25JZH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO3NldE9wZW5Qb3B1cE1lbnUoYXBwRGV0YWlsLmFwcFZlcnNpb25JZClcIiBtYXQtaWNvbi1idXR0b24gW2Rpc2FibGVSaXBwbGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09XCJjb250ZXh0TWVudVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gW3N2Z0ljb25dPVwiJ2hlcm9pY29uc19zb2xpZDpkb3RzLXZlcnRpY2FsJ1wiIHN0eWxlPVwiY29sb3I6ICNGRkZGRkY7XCI+PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW1lbnUgI2NvbnRleHRNZW51PVwibWF0TWVudVwiIGNsYXNzPVwiY3VzdG9taXplXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwicmVwb3J0LW1lbnVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cIm9wZW5RUkNvZGVEaWFsb2coKVwiICBjbGFzcz1cInB5LTAgcGwtNCBwci02XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiYXNzZXRzL2ljb25zL29wdGlvbnMtbW9iaWxlLnN2Z1wiIGFsdD1cIlwiIGNsYXNzPVwiaC02IHctNiBpbmxpbmUtYmxvY2sgbXItMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5Vc2UgT24gTW9iaWxlPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwicmVwb3J0LW1lbnVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cIm9wZW5EZWxldGVBcHBEaWFsb2coYXBwRGV0YWlsLmFwcFZlcnNpb25JZClcIiAgY2xhc3M9XCJweS0wIHBsLTQgcHItNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cImFzc2V0cy9pY29ucy9vcHRpb25zLWRlbGV0ZS5zdmdcIiBhbHQ9XCJcIiBjbGFzcz1cImgtNiB3LTYgaW5saW5lLWJsb2NrIG1yLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+RGVsZXRlPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW1lbnU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWlubmVyLWRpdlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBkYXNoYm9hcmQtaWNvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiYmFzZVVybCArIGFwcERldGFpbC5pY29uXCIgb25FcnJvciA9XCJ0aGlzLnNyYz0naHR0cHM6Ly9zdGF0aWMuYXhvbmF0b3IuY29tL3N0YXRpYy9kZWZhdWx0X2ljb25zL2FwcC5wbmcnXCIgYWx0PVwiTG9nbyBpbWFnZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFwcC1pbmZvXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJibG9jayBhcHAtdGl0bGUtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFwcF90aXRsZSBmb250LW1lZGl1bSBsZWFkaW5nLXRpZ2h0IGF4by1mb250XCIgW21hdFRvb2x0aXBdPVwiYXBwRGV0YWlsLm5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2FwcERldGFpbC5uYW1lfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFwcF92ZXJzaW9uIHctZnVsbCBsZWFkaW5nLXRpZ2h0IHRleHQteHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYge3thcHBEZXRhaWwudmVyc2lvbi5zcGxpdCgnLicpWzBdfX0ue3twYWRaZXJvKGFwcERldGFpbC5taW5vclZlcnNpb24pfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1c3Qtb3BlbiBmbGV4IGp1c3RpZnktZW5kIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmQgc3BhY2UteC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSAqbmdJZj1cInNob3dDdXN0b21pemVcIiByb3V0ZXJMaW5rPVwiXCIgY2xhc3M9XCJjdXN0b21pemUgdGV4dC1sZWZ0IGxlYWRpbmctdGlnaHQgdGV4dC14c1wiPkN1c3RvbWl6ZTwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJvcGVuLWJ1dHRvblwiPk9wZW48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9mdXNlLWNhcmQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIFxuICAgIDwvZGl2PlxuICAgIDxuZy10ZW1wbGF0ZSAjbm90RW1wdHlBcHBMaXN0PlxuICAgICAgICA8IS0tIGlmIGFwcCBsaXN0IGlzIGVtcHR5IC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBmbGV4LWF1dG8gbWluLXctMCByZWxhdGl2ZSBpdGVtcy1jZW50ZXJcIiAjbm90RW1wdHlBcHBMaXN0PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lciBmbGV4IGZsZXgtY29sIG15LWF1dG8gaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIG5vLWFwcC1jcmVhdGVkXCI+XG4gICAgICAgICAgICAgICAgPGgyPk5vIGFwcCBjcmVhdGVkIHlldCE8L2gyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPGFwcC1jb21tb24tZm9vdGVyIFtzaG93QWRkQnRuXT1cInNob3dBZGRCdG5cIiBbc2hvd1VwZ3JhZGVCdG5dPVwidHJ1ZVwiPjwvYXBwLWNvbW1vbi1mb290ZXI+XG4gICAgPCEtLSA8ZGl2IGNsYXNzPVwiZml4ZWQgYm90dG9tLTAgZmxleCBmbGV4LTAgaXRlbXMtY2VudGVyIGp1c3RpZnktc3RhcnQgdy1mdWxsIGgtMTQgcHgtNCBtZDpweC02IHotNDkgYmctd2hpdGUgYXBwLWxpc3QtZm9vdGVyXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1tZWRpdW0gdGV4dC1zZWNvbmRhcnlcIj5BeG9uYXRvciAmY29weTsge3tjdXJyZW50WWVhcn19PC9zcGFuPlxuICAgIDwvZGl2PiAtLT5cbjwvZGl2PlxuIl19
1186
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2F4LWNvbW1vbi11aS1saWIvc3JjL2xpYi9hcHAtbGlzdC9hcHAtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvYXgtY29tbW9uLXVpLWxpYi9zcmMvbGliL2FwcC1saXN0L2FwcC1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGlDQUFpQztBQUNqQyx1REFBdUQ7QUFDdkQsMEJBQTBCO0FBQzFCLHFFQUFxRTtBQUVyRSxPQUFPLEVBQUUsU0FBUyxFQUFVLGlCQUFpQixFQUFhLEtBQUssRUFBRSxNQUFNLEVBQWlCLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0osT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDN0QsT0FBTyxFQUFFLE1BQU0sRUFBcUIsTUFBTSxpQkFBaUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFPLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzdGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFHeEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDekQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JE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ZUFBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7Y0FDQSxTQUFTOzJCQUNFLGNBQWMsaUJBR1QsaUJBQWlCLENBQUMsSUFBSSxhQUMxQjtvQkFDVDt3QkFDRSxPQUFPLEVBQUUsaUJBQWlCO3dCQUMxQixRQUFRLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxpQ0FBaUMsRUFBRTtxQkFDbkU7aUJBQ0Y7K2tCQUdRLE9BQU87a0JBQWYsS0FBSztZQUNHLE9BQU87a0JBQWYsS0FBSztZQUNHLGdCQUFnQjtrQkFBeEIsS0FBSztZQUNHLG9CQUFvQjtrQkFBNUIsS0FBSztZQUNHLElBQUk7a0JBQVosS0FBSztZQUNHLFFBQVE7a0JBQWhCLEtBQUs7WUFDRyxnQkFBZ0I7a0JBQXhCLEtBQUs7WUFDRyxVQUFVO2tCQUFsQixLQUFLO1lBQ0csY0FBYztrQkFBdEIsS0FBSztZQUNHLGFBQWE7a0JBQXJCLEtBQUs7WUFDRyxVQUFVO2tCQUFsQixLQUFLO1lBQ0ksa0JBQWtCO2tCQUEzQixNQUFNO1lBQ0csWUFBWTtrQkFBckIsTUFBTTtZQUNHLGVBQWU7a0JBQXhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBhcnJvdy1wYXJlbnMgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9tZW1iZXItb3JkZXJpbmcgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJhZGl4ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtZnVuY3Rpb24tcmV0dXJuLXR5cGUgKi9cblxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIFZpZXdFbmNhcHN1bGF0aW9uLCBPbkRlc3Ryb3ksIElucHV0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIEV2ZW50RW1pdHRlciwgQ2hhbmdlRGV0ZWN0b3JSZWYsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1BVF9TRUxFQ1RfQ09ORklHIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcbmltcG9ydCB7IFJvdXRlciAsICBOYXZpZ2F0aW9uRXh0cmFzfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgU3ViamVjdCwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQXhvU25hY2tCYXJTZXJ2aWNlLCBBeG9TbmFja0JhclR5cGUgfSBmcm9tICcuLi9heG8tc25hY2stYmFyL2F4by1zbmFjay1iYXIuc2VydmljZSc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uL2NvcmUvYXV0aC9hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuLi9jb3JlL3VzZXIvdXNlci5zZXJ2aWNlJztcbmltcG9ydCB7IFVzZXIgfSBmcm9tICcuLi9jb3JlL3VzZXIvdXNlci50eXBlcyc7XG5pbXBvcnQgeyBBcHBMaXN0RHRvIH0gZnJvbSAnLi9hcHAtbGlzdC1kdG8nO1xuaW1wb3J0IHsgTXlBcHBMaXN0U2VydmljZSB9IGZyb20gJy4vbXktYXBwLWxpc3Quc2VydmljZSc7XG5pbXBvcnQgeyBPcmdhbml6YXRpb25MaXN0RHRvIH0gZnJvbSAnLi9vcmdhbml6YXRpb24tbGlzdC1kdG8nO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IEZsYXR0ZW5TZXJ2aWNlIH0gZnJvbSAnLi4vZmxhdHRlbi1tb2R1bGUvZmxhdHRlbi5zZXJ2aWNlJztcbmltcG9ydCB7IElGbGF0dGVuIH0gZnJvbSAnLi4vY29tbW9uLXV0aWxzL2lGbGF0dGVuJztcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgQ29va2llU2VydmljZSB9IGZyb20gJ25neC1jb29raWUtc2VydmljZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBFbmxpZ2h0ZW5MaWJNb2R1bGUgfSBmcm9tICcuLi9lbmxpZ2h0ZW4tbGliL2VubGlnaHRlbi1saWIubW9kdWxlJztcbmltcG9ydCB7IFFyZGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vcXJkaWFsb2cvcXJkaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IExvZ2dpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbG9nZ2luZy5zZXJ2aWNlJztcbmltcG9ydCB7IExvYWRpbmdEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi9sb2FkaW5nLWRpYWxvZy9sb2FkaW5nLWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuaW1wb3J0IHsgTG9hZGluZ0FwcGluc3RhbGxDb21wb25lbnQgfSBmcm9tICcuLi9sb2FkaW5nLWFwcGluc3RhbGwvbG9hZGluZy1hcHBpbnN0YWxsLmNvbXBvbmVudCc7IFxuaW1wb3J0IHsgQ29tbW9uU2VydmljZSB9IGZyb20gJy4uL2NvbW1vbi5zZXJ2aWNlJztcbmltcG9ydCB7IFN1Y2Nlc3NEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi9zdWNjZXNzLWRpYWxvZy9zdWNjZXNzLWRpYWxvZy5jb21wb25lbnQnOyBcbmltcG9ydCB7IHRha2UsICB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGZvcmtKb2luLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbG9jYWxlIH0gZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IEFwcENyZWF0ZURpYWxvZ0NvbXBvbmVudENvbXBvbmVudCB9IGZyb20gJy4uL2FwcC1jcmVhdGUtZGlhbG9nLWNvbXBvbmVudC9hcHAtY3JlYXRlLWRpYWxvZy1jb21wb25lbnQuY29tcG9uZW50JzsgXG5cbi8vaW1wb3J0IHsgQ29uc29sZSB9IGZyb20gJ2NvbnNvbGUnO1xuaW1wb3J0IHsgQ29tbW9uTGliQ29uZmlndXJhdGlvblNlcnZpY2UgfSBmcm9tICcuLi9jb21tb24tbGliLWNvbmZpZ3VyYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBEYXRhVmlld0ZpbHRlcnNTZXJ2aWNlIH0gZnJvbSAnLi4vZGF0YS12aWV3LWxpYi9kYXRhLXZpZXctZmlsdGVycy9kYXRhLXZpZXctZmlsdGVycy5zZXJ2aWNlJztcbmltcG9ydCB7IENvbmZpcm1hdGlvbk1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vc2hhcmVkL2NvbWZpcm1hdGlvbi1tb2RhbC9jb25maXJtYXRpb24tbW9kYWwuY29tcG9uZW50JztcbmltcG9ydCB7IFN1YnNjcmliZWRQbGFuTmFtZSB9IGZyb20gJy4uL3N1YnNjcmliZWRQbGFuTmFtZS5zZXJ2aWNlJztcbmltcG9ydCB7IFN0cmlwZVNlcnZpY2UgfSBmcm9tICcuLi9zdHJpcGUuc2VydmljZSc7XG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1hcHAtbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9hcHAtbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2FwcC1saXN0LmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE1BVF9TRUxFQ1RfQ09ORklHLFxuICAgICAgdXNlVmFsdWU6IHsgb3ZlcmxheVBhbmVsQ2xhc3M6ICdvcmdhbml6YXRpb24tbGlzdC1vdmVybGF5LXBhbmVsJyB9LFxuICAgIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEFwcExpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIGFwcExpc3Q6IEFycmF5PEFwcExpc3REdG8+O1xuICBASW5wdXQoKSBiYXNlVXJsOiBzdHJpbmc7XG4gIEBJbnB1dCgpIG9yZ2FuaXphdGlvbkxpc3Q6IEFycmF5PE9yZ2FuaXphdGlvbkxpc3REdG8+ID0gW107XG4gIEBJbnB1dCgpIHNlbGVjdGVkT3JnYW5pemF0aW9uOiBPcmdhbml6YXRpb25MaXN0RHRvO1xuICBASW5wdXQoKSB1c2VyOiBVc2VyO1xuICBASW5wdXQoKSBsaXN0VHlwZTogc3RyaW5nO1xuICBASW5wdXQoKSBzaG93Q3JlYXRlQnV0dG9uOmJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc2hvd1FSSWNvbjpib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNob3dEb3RzT3B0aW9uOmJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc2hvd0N1c3RvbWl6ZTpib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNob3dBZGRCdG46Ym9vbGVhbiA9IGZhbHNlO1xuICBAT3V0cHV0KCkgc3dpdGNoQWNjb3VudEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBvcGVuQXBwRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHVwZGF0ZUxpc3RFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAvLyB1c2VyOiBVc2VyO1xuICBpc0FwcENoYW5nZWRBZnRlclB1Ymxpc2g6IGJvb2xlYW4gPSBmYWxzZTtcbiAgdXNlck5hbWU6IHN0cmluZztcbiAgYXBwVmVyc2lvbklkOiBudW1iZXI7XG4gIHVzZXJFbWFpbDogc3RyaW5nO1xuICBmdWxsVmVyc2lvbjogc3RyaW5nO1xuICBmdWxsVmVyc2lvbnM6IHN0cmluZ1tdID0gW107XG4gIHVzZXJJbWFnZTogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmcgPSAnJztcbiAgbWlub3JWZXJzaW9uOiBzdHJpbmcgPSAnJztcbiAgYXBwSWQ6IHN0cmluZyA9Jyc7XG4gIGJ1aWxkZXJVcmw6IHN0cmluZztcbiAgb3BlblBvcHVwTWVudTogbnVtYmVyO1xuICBncmFkaWVudHMgPSBbXG4gICAgJ3JhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgODAlIDIwJSwgI0RCNkQ4MSwgI0JGNDU4MSknLFxuICAgICdyYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDgwJSAyMCUsICM0NDkxRDksICM0NTU5QkYpJyxcbiAgICAncmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA4MCUgMjAlLCAjRTdBNzc5LCAjQUE1NTI1KScsXG4gICAgJ3JhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgODAlIDIwJSwgIzQ0RDk1MywgIzBEOTIxMiknXG4gIF07XG4gIGN1cnJlbnRVcmwgPSBkb2N1bWVudC5VUkw7XG4gIGJhc2VVc3JsID0gZG9jdW1lbnQuYmFzZVVSSTtcbiAgcmVnZXggPSAvXFwvYXBwc1xcLyhcXGQrKVxcLyhcXHcrKS87XG4gIG1hdGNoID0gdGhpcy5jdXJyZW50VXJsLm1hdGNoKHRoaXMucmVnZXgpO1xuXG4gIGRhdGEgPSB7fTtcblxuICAvKlxuICAgICAqIFN1YmplY3Qgb2JqZWN0IHdoaWNoIGhlbHBzIHVuc3Vic2NyaWJlIGFsbCB0aGUgc3Vic2NyaWJlZCBvYmplY3RzIGluIHRoZSBjb21wb25lbnRcbiAgICAgKi9cbiAgcHJpdmF0ZSBfdW5zdWJzY3JpYmVBbGw6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0PGFueT4oKTtcbiAgb3JnYW5pemF0b25JZDogbnVtYmVyO1xuICB1c2VyUGVybWlzc2lvbnM6IHN0cmluZ1tdID0gW107IC8vIFZhcmlhYmxlIHRvIGhvbGQgdXNlciBwZXJtaXNzaW9uc1xuICBwZXJtaXNzaW9uczogYW55O1xuICBoYXNPcmdVc2VyQWNjZXNzOiBib29sZWFuO1xuICBjdXJyZW50QXBwVmVyc2lvbklkOiBzdHJpbmc7XG4gIHNob3dXZWJQb3J0YWxBY2Nlc3NPdmVybGF5OiBib29sZWFuID0gZmFsc2U7IC8vIEZsYWcgdG8gY29udHJvbCBvdmVybGF5IGRpc3BsYXlcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9hdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgX3VzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcbiAgICBwcml2YXRlIGNvbW1vbkxpYkNvbmZpZzogQ29tbW9uTGliQ29uZmlndXJhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfbXBBcHBMaXN0U2VydmljZTogTXlBcHBMaXN0U2VydmljZSxcbiAgICBwcml2YXRlIF9yb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIF9heG9TbmFja0JhcjogQXhvU25hY2tCYXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csXG4gICAgcHJpdmF0ZSBfZmxhdHRlblNlcnZpY2U6IEZsYXR0ZW5TZXJ2aWNlLFxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCwgLy8gSW5qZWN0IEh0dHBDbGllbnRcbiAgICBwcml2YXRlIF9odHRwQ2xpZW50OiBIdHRwQ2xpZW50LFxuICAgIHByaXZhdGUgY29va2llU2VydmljZTogQ29va2llU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgX2xvZ2dpbmdTZXJ2aWNlIDogTG9nZ2luZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBfY29tbW9uU2VydmljZTpDb21tb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgX2RhdGFWaWV3RmlsdGVyc1NlcnZpY2U6IERhdGFWaWV3RmlsdGVyc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBfc3Vic2NyaWJlZFBsYW5OYW1lOiBTdWJzY3JpYmVkUGxhbk5hbWUsXG4gICAgcHJpdmF0ZSBzdHJpcGVTZXJ2aWNlOiBTdHJpcGVTZXJ2aWNlLFxuXG4gICAgXG4gICkgeyB9XG4gIC8qKlxuICAgKiBHZXR0ZXIgZm9yIGN1cnJlbnQgeWVhclxuICAgKi9cbiAgZ2V0IGN1cnJlbnRZZWFyKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTtcbiAgfVxuXG4gIHNldE9wZW5Qb3B1cE1lbnUoYXBwSWQpIHtcbiAgICB0aGlzLm9wZW5Qb3B1cE1lbnUgPSBhcHBJZDtcbiAgICBjb25zdCBvdmVybGF5ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmNkay1vdmVybGF5LWNvbnRhaW5lcicpO1xuICAgIG92ZXJsYXkuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICB0aGlzLm9wZW5Qb3B1cE1lbnUgPSB1bmRlZmluZWQ7XG4gICAgfSk7XG4gIH1cblxuICBvcGVuUVJDb2RlRGlhbG9nKCk6IHZvaWQge1xuXG4gICAgY29uc3QgcXJEaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFFyZGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICB3aWR0aDogJzI1MHB4JywgLy8gQWRqdXN0IHdpZHRoIGFzIG5lZWRlZFxuICAgIH0pO1xuICB9XG5cbiAgbmF2aWdhdGV0b09yZ2FuaWF0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IHVybE1hcDogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICAgICdsb2NhbGhvc3Q6NDIwMCc6ICdodHRwczovL2xvY2FsaG9zdDo0MjAwLycsXG4gICAgICAnbG9jYWxob3N0OjQyMDEnOiAnaHR0cHM6Ly9sb2NhbGhvc3Q6NDIwMC8nLFxuICAgICAgJ2FuZHJvbWVkYS1idWlsZGVyLXFhLmF4b25hdG9yLmNvbSc6ICdodHRwczovL2FuZHJvbWVkYS1idWlsZGVyLXFhLmF4b25hdG9yLmNvbS8nLFxuICAgICAgJ2FuZHJvbWVkYS1jb250YWluZXItcWEuYXhvbmF0b3IuY29tJzogJ2h0dHBzOi8vYW5kcm9tZWRhLWJ1aWxkZXItcWEuYXhvbmF0b3IuY29tLycsXG4gICAgICAnYnVpbGRlci5heG9uYXRvci5jb20nOiAnaHR0cHM6Ly9idWlsZGVyLmF4b25hdG9yLmNvbS8nLFxuICAgICAgJ3dlYi5heG9uYXRvci5jb20nOiAnaHR0cHM6Ly9idWlsZGVyLmF4b25hdG9yLmNvbS8nXG4gICAgfTtcbiAgICBjb25zdCB1cmw6IHN0cmluZyA9IHVybE1hcFt3aW5kb3cubG9jYXRpb24uaG9zdF0gfHwgJyc7XG4gICAgaWYgKHRoaXMubWF0Y2gpIHtcbiAgICAgIGNvbnN0IHVzZXJMaXN0VXJsID0gYGFwcHMvJHt0aGlzLm1hdGNoWzFdfS91c2Vyc2A7IC8vIGR5bmFtaWMgcGFydCBiYXNlZCBvbiBtYXRjaFxuICAgICAgd2luZG93Lm9wZW4odXJsICsgdXNlckxpc3RVcmwsICdfc2VsZicpOyAvLyBvcGVuIGR5bmFtaWMgVVJMXG4gICAgfSBlbHNlIHtcbiAgICAgIHdpbmRvdy5vcGVuKHVybCArICdvcmdhbml6YXRpb24nLCAnX3NlbGYnKTsgLy8gZmFsbGJhY2sgdG8gb3JnYW5pemF0aW9uIHJvdXRlXG4gICAgfVxuICB9ICBcblxuICBuYXZpZ2F0ZXRvT3JnYW5pYXRpb25TZXR0aW5ncygpOiB2b2lkIHtcbiAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGVCeVVybCgnb3JnYW5pemF0aW9uLXNldHRpbmdzJyk7XG4gIH1cbiAgXG5cblxuXG4gIC8vIGRlbGV0ZUFwcChhcHBJZDogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgLy8gICB0aGlzLl9tcEFwcExpc3RTZXJ2aWNlLmRlbGV0ZUFwcChhcHBJZCwgdmVyc2lvbilcbiAgLy8gICAgIC5waXBlKFxuICAvLyAgICAgICB0YWtlVW50aWwodGhpcy5fdW5zdWJzY3JpYmVBbGwpLFxuICAvLyAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAvLyAgICAgICAgIGNvbnNvbGUubG9nKCdFcnJvciBvY2N1cnJlZCB3aGlsZSBkZWxldGluZyBhcHA6JywgZXJyb3IpO1xuICAvLyAgICAgICAgIC8vIHRoaXMuX3NuYWNrYmFyU2V2aWNlLm9wZW5TbmFja0JhcignRXJyb3Igb2NjdXJyZWQgd2hpbGUgZGVsZXRpbmcgYXBwLicsIEF4b1NuYWNrQmFyVHlwZS5lcnJvcik7XG4gIC8vICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3IpO1xuICAvLyAgICAgICB9KVxuICAvLyAgICAgKVxuICAvLyAgICAgLnN1YnNjcmliZShcbiAgLy8gICAgICAgLy8gcmVzcG9uc2UgPT4gdGhpcy5oYW5kbGVEZWxldGVTdWNjZXNzKHJlc3BvbnNlKSxcbiAgLy8gICAgICAgLy8gZXJyb3IgPT4gdGhpcy5oYW5kbGVEZWxldGVFcnJvcihlcnJvcilcbiAgLy8gICAgICk7XG4gIC8vIH1cblxuICAvLyBBc3N1bWluZyBfZGVsZXRlU2VydmljZSBoYXMgYSBkZWxldGVBcHAgbWV0aG9kIHRoYXQgaGFuZGxlcyBhcHAgZGVsZXRpb25cbiAgLy8gQWxzbywgYXNzdW1pbmcgaGFuZGxlRGVsZXRlU3VjY2VzcyBhbmQgaGFuZGxlRGVsZXRlRXJyb3IgYXJlIG1ldGhvZHMgdG8gaGFuZGxlIHN1Y2Nlc3MgYW5kIGVycm9yIHNjZW5hcmlvc1xuXG4gIHBhZFplcm8odmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdmFyIHBhZGRpbmc9Jyc7XG4gICAgbGV0IGxlbmd0aD12YWx1ZS50b1N0cmluZygpLmxlbmd0aDtcbiAgICBpZihsZW5ndGg9PTEpXG4gICAge1xuICAgICAgcGFkZGluZz0nMDAnK3ZhbHVlXG4gICAgfVxuICAgIGVsc2UgaWYobGVuZ3RoPT0yKVxuICAgIHtcbiAgICAgIHBhZGRpbmc9JzAnK3ZhbHVlXG4gICAgfVxuICAgIGVsc2UgaWYobGVuZ3RoPT0zKVxuICAgIHtcbiAgICAgIHBhZGRpbmc9dmFsdWVcbiAgICB9XG4gICAgcmV0dXJuIHBhZGRpbmc7XG4gIH1cblxuICBwdWJsaWMgaGFzQXBwQnVpbGRlclBlcm1pc3Npb246IGJvb2xlYW4gPSBmYWxzZTtcblxuICBnZXRVc2VyRGV0YWlscygpOiB2b2lkIHtcbiAgICB0aGlzLl9jb21tb25TZXJ2aWNlLmdldFVzZXJEZXRhaWwoKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl91bnN1YnNjcmliZUFsbCksXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgdXNlciBkZXRhaWxzOicsIGVycm9yKTtcbiAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnJvcik7XG4gICAgICAgIH0pLFxuICAgICAgICB0YXAoKHVzZXJSZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgdXNlclBlcm1pc3Npb25zID0gdXNlclJlc3BvbnNlPy51ZD8ucGVybWlzc2lvbnMgfHwgW107XG4gICAgICAgICAgLy8gQ2hlY2sgaWYgXCJBUFBfQlVJTERFUlwiIHBlcm1pc3Npb24gZXhpc3RzXG4gICAgICAgICAgdGhpcy5oYXNBcHBCdWlsZGVyUGVybWlzc2lvbiA9IHVzZXJQZXJtaXNzaW9ucy5pbmNsdWRlcyhcIkFQUF9CVUlMREVSXCIpICYmIHVzZXJQZXJtaXNzaW9ucy5pbmNsdWRlcyhcIkFDQ0VTU19XRUJfUE9SVEFMXCIpO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBzdWJzY3JpcHRpb25PcHRpb25zID0ge1xuICAgICAgICAgIGFjY291bnRJZDogcmVzcG9uc2UudWQubGFzdHVzZWRfYWNjb3VudFxuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgdGhpcy5zdHJpcGVTZXJ2aWNlLmdldFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb25PcHRpb25zKS5zdWJzY3JpYmUoXG4gICAgICAgICAgKHN1YnNjcmlwdGlvblJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnU3Vic2NyaXB0aW9uIGRldGFpbHM6Jywgc3Vic2NyaXB0aW9uUmVzcG9uc2UpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAoc3Vic2NyaXB0aW9uUmVzcG9uc2UgJiYgc3Vic2NyaXB0aW9uUmVzcG9uc2UubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBjb25zdCBzdWJzY3JpcHRpb25JbmZvID0gc3Vic2NyaXB0aW9uUmVzcG9uc2VbMF07XG4gICAgICAgICAgICAgIGNvbnN0IHByb2R1Y3RPcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIFByb2R1Y3RJZDogc3Vic2NyaXB0aW9uSW5mby5pdGVtc1swXS5wcm9kdWN0SWRcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIHRoaXMuc3RyaXBlU2VydmljZS5nZXRQcm9kdWN0RGV0YWlscyhwcm9kdWN0T3B0aW9ucykuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgIChwcm9kdWN0UmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3N1YnNjcmliZWRQbGFuTmFtZS5zdWJzY3JpYmVkUGxhbk5hbWUgPSBwcm9kdWN0UmVzcG9uc2UubmFtZTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgcHJvZHVjdCBkZXRhaWxzOicsIGVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIHN1YnNjcmlwdGlvbiBkZXRhaWxzOicsIGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgfVxuICBcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmdldFVzZXJQZXJtaXNzaW9ucygpO1xuICAgXG4gICAgLy8gdGhpcy5jdXJyZW50QXBwVmVyc2lvbklkID0gd2luZG93LmxvY2F0aW9uLmhyZWYuc3BsaXQoXCIvXCIpWzRdO1xuICAgIC8vIHRoaXMuX25hdmlnYXRpb24udXBkYXRlQ2xhc3NpY05hdmlnYXRpb25Sb3V0ZXModGhpcy5jdXJyZW50QXBwVmVyc2lvbklkLnRvU3RyaW5nKCkpO1xuXG4gICAgLy8gRmV0Y2ggdXNlciBkZXRhaWxzXG4gICAgXG4gICAgXG4gICAgaWYgKHRoaXMudXNlcikge1xuICAgICAgdGhpcy51c2VyRW1haWwgPSB0aGlzLnVzZXIuZW1haWw7XG4gICAgICB0aGlzLnVzZXJOYW1lID0gdGhpcy51c2VyWydmbmFtZSddICsgJyAnICsgdGhpcy51c2VyWydsbmFtZSddO1xuICAgICAgdGhpcy51c2VySW1hZ2UgPSB0aGlzLnVzZXJbJ3VpbWcnXTtcbiAgICB9XG5cbiAgICB0aGlzLmdldFVzZXJEZXRhaWxzKCk7XG4gICAgXG4gIC8vQVhFLUk2Mzc2XG4gIC8vSXNzdWUgOiBQYXJhbWV0ZXJpemVkIHVybCB3YXMgbm90IG1haW50YWluIChhcHAgaW5zdGFsbGF0aW9uKSwgYXV0aG9yaXphdGlvbiBjYWxsIHNvbWVob3cgbG9zZXMgdGhlIHBhcmFtZXRlcnNcbiAgLy91cmwgc3RvcmFnZSBpcyBtYWludGFpbmVkIGJ5IHRoZSBuYW1lIFwiYXBwbmFtZVwiXG4gIC8vSXQgaXMgc2V0IGluIGF1dGgucmVzb2x2ZXIgYW5kIHJlbW92ZWQgaGVyZVxuICAvL2lmIGFwcG5hbWUgZXhpc3QgaW4gc2Vzc2lvbiB1c2VkIHRoZSBzdG9yZWQgbmFtZSwgaWYgbm90IHVzZWQgdGhlIHZhbHVlIGZyb20gdGhlIHVybFxuICAvL1xudmFyIGFwcE5hbWVjaGVjaz1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYXBwbmFtZScpO1xuLy9jb25zb2xlLmxvZyhcIiExMTNcIik7XG4vLyBpZihhcHBOYW1lY2hlY2shPT1udWxsKVxuLy8ge1xuLy8gICBpZihhcHBOYW1lY2hlY2s9PVwiL2FwcHNcIilcbi8vICAge1xuLy8gICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFwiYXBwbmFtZVwiKTtcbi8vICAgfVxuLy8gfVxuLy8gYXBwTmFtZWNoZWNrPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCdhcHBuYW1lJyk7XG4vL2NvbnNvbGUubG9nKFwiITExM1wiKTtcbi8vY29uc29sZS5sb2coYXBwTmFtZWNoZWNrKVxuICAvL1xudmFyIGFwcE5hbWVjaGVjaz1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYXBwbmFtZScpO1xudmFyIGFwcFB1Ymxpc2hTdGF0dXM9bG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3B1Ymxpc2hzdGF0dXMnKTtcbi8vY29uc29sZS5sb2coXCIhMTEzXCIpO1xuLy8gaWYoYXBwTmFtZWNoZWNrIT09bnVsbClcbi8vIHtcbi8vICAgaWYoYXBwTmFtZWNoZWNrPT1cIi9hcHBzXCIpXG4vLyAgIHtcbi8vICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcImFwcG5hbWVcIik7XG4vLyAgIH1cbi8vIH1cbi8vIGFwcE5hbWVjaGVjaz1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYXBwbmFtZScpO1xuLy9jb25zb2xlLmxvZyhcIiExMTNcIik7XG4vL2NvbnNvbGUubG9nKGFwcE5hbWVjaGVjaylcbiAgbGV0IGFwcG5hbWU6c3RyaW5nO1xuICBsZXQgY2F0ZWdvcnk6c3RyaW5nO1xuXG4vLyBjb25zdCB1cmxQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO1xuLy8gY29uc3QgYXBwTmFtZUNoZWNrID0gdXJsUGFyYW1zLmdldCgnYXBwbmFtZScpO1xuLy8gY29uc29sZS5sb2coYXBwTmFtZUNoZWNrKVxuLy8gY29uc3QgY2F0ZWdvcnkgPSB1cmxQYXJhbXMuZ2V0KCdjYXRlZ29yeScpO1xuLy8gY29uc29sZS5sb2coY2F0ZWdvcnkpaVxuXG5cbmxldCBJbnN0YWxsQXBwTmFtZTpzdHJpbmc7XG5JbnN0YWxsQXBwTmFtZT1sb2NhbFN0b3JhZ2UuZ2V0SXRlbShcIkluc3RhbGxlZEFwcE5hbWVcIik7XG5pZihJbnN0YWxsQXBwTmFtZSE9bnVsbCl7XG5jb25zdCBjYXBpdGFsaXplZEFwcE5hbWU6IHN0cmluZyA9IHRoaXMuY2FwaXRhbGl6ZVdvcmRzKEluc3RhbGxBcHBOYW1lLnJlcGxhY2UoLy0vZywgJyAnKSk7XG50aGlzLmNoZWNrQW5kUHVibGlzaEFwcChjYXBpdGFsaXplZEFwcE5hbWUpO1xubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJJbnN0YWxsZWRBcHBOYW1lXCIpO1xufVxuaWYgKGFwcE5hbWVjaGVjayAhPT0gbnVsbCkge1xuICAvL1xuICBjb25zdCB1cmxQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKGFwcE5hbWVjaGVjay5zcGxpdCgnPycpWzFdKTtcbiAgY29uc3QgYXBwTmFtZVRlbXAgPSB1cmxQYXJhbXMuZ2V0KCdhcHBuYW1lJyk7XG4gIGNvbnN0IGNhdGVnb3J5VGVtcCA9IHVybFBhcmFtcy5nZXQoJ2NhdGVnb3J5Jyk7XG4gIC8vY29uc3QgYXBwTmFtZVRlbXAgPSBhcHBOYW1lY2hlY2suc3BsaXQoJz0nKVsxXS5zcGxpdCgnJicpWzBdOyAvLyBFeHRyYWN0aW5nIGFwcG5hbWUgdmFsdWUgZnJvbSBVUkwgcGFyYW1ldGVyXG4gIC8vbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJJbnN0YWxsZWRBcHBOYW1lXCIsYXBwTmFtZVRlbXApXG4vLyBFeHRyYWN0aW5nIGNhdGVnb3J5IHZhbHVlIGZyb20gVVJMIHBhcmFtZXRlclxuIC8vIGNvbnN0IGNhdGVnb3J5VGVtcCA9IGFwcE5hbWVjaGVjay5zcGxpdCgnY2F0ZWdvcnk9JylbMV07XG4gIC8vXG4gIGlmIChhcHBOYW1lVGVtcCkge1xuICAgIHRoaXMuaW5zdGFsbEFwcChhcHBOYW1lVGVtcCwgY2F0ZWdvcnlUZW1wKS50aGVuKCgpID0+IHtcbiAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFwiYXBwbmFtZVwiKTtcbiAgICB9KS5jYXRjaChlcnJvciA9PiB7XG4gICAgICAvLyBIYW5kbGUgZXJyb3IgaWYgaW5zdGFsbEFwcCBmYWlsc1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW5zdGFsbGluZyBhcHA6JywgZXJyb3IpO1xuICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJhcHBuYW1lXCIpO1xuICAgIH0pO1xuICB9XG5cbi8vIGxldCBhcHBOYW1lOiBzdHJpbmc7IFxuLy8gaWYoYXBwTmFtZWNoZWNrIT09bnVsbCl7XG4vLyAgIGFwcE5hbWU9YXBwTmFtZWNoZWNrLnNwbGl0KCc9JylbMV0uc3BsaXQoJyUyRicpWzBdO1xuLy8gICBpZiAoYXBwTmFtZSkge1xuLy8gICAgIHRoaXMuaW5zdGFsbEFwcChhcHBOYW1lLCkudGhlbigoKSA9PiB7XG4vLyAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcImFwcG5hbWVcIik7XG4gICAgICBcbi8vICAgICB9KVxuLy8gICAgIC5jYXRjaChlcnJvciA9PiB7XG4vLyAgICAgICAvLyBIYW5kbGUgZXJyb3IgaWYgaW5zdGFsbEFwcCBmYWlsc1xuLy8gICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW5zdGFsbGluZyBhcHA6JywgZXJyb3IpO1xuLy8gICAgIH0pO1xuLy8gICB9XG4gIFxuICBcbiAgfVxuICBlbHNle1xuICAgIC8vIFZhcmlhYmxlIHRvIHN0b3JlIGFwcG5hbWVcblxuICAgIFxuICAgIHRoaXMucm91dGUucXVlcnlQYXJhbXMucGlwZShcbiAgICAgIHRha2VVbnRpbCh0aGlzLl91bnN1YnNjcmliZUFsbClcbiAgICApLnN1YnNjcmliZShwYXJhbXMgPT4ge1xuICAgICAgYXBwbmFtZSA9IHBhcmFtc1snYXBwbmFtZSddO1xuICAgICAgLy9sb2NhbFN0b3JhZ2Uuc2V0SXRlbShcIkluc3RhbGxlZEFwcE5hbWVcIixhcHBuYW1lKTtcbiAgICAgIGNvbnNvbGUubG9nKGFwcG5hbWUpXG4gICAgICBjYXRlZ29yeSA9IHBhcmFtc1snY2F0ZWdvcnknXTtcbiAgICAgIGNvbnNvbGUubG9nKGNhdGVnb3J5KVxuICAgIFxuICAgICAgaWYgKGFwcG5hbWUpIHtcbiAgICAgICAgLy8gU3BsaXQgdGhlIGFwcG5hbWUgYXQgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgJy8nXG4gICAgICAgIGNvbnN0IGFwcE5hbWVQYXJ0cyA9IGFwcG5hbWUuc3BsaXQoJy8nLCAxKTtcbiAgICAgICAgY29uc3QgYXBwTmFtZSA9IGFwcE5hbWVQYXJ0c1swXTsgLy8gU3RvcmUgYXBwbmFtZVxuICAgICAgICAvL2NvbnN0IGNhdGVnb3J5ID0gY2F0ZWdvcnk7IC8vIFN0b3JlIGNhdGVnb3J5XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiYXBwTmFtZT1cIithcHBOYW1lKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJjYXRlZ29yeT1cIitjYXRlZ29yeSk7XG4gICAgICAgIFxuICAgICAgICAvLyBOYXZpZ2F0ZSB0byB0aGUgc2FtZSByb3V0ZSB3aXRob3V0IGFueSBxdWVyeSBwYXJhbWV0ZXJzXG4gICAgICAgIGNvbnN0IG5hdmlnYXRpb25FeHRyYXM6IE5hdmlnYXRpb25FeHRyYXMgPSB7XG4gICAgICAgICAgcmVwbGFjZVVybDogdHJ1ZSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIG5hdmlnYXRpb25FeHRyYXMpO1xuICAgICAgICBcblxuICAgICAgICBpZiAoYXBwbmFtZSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGFwcG5hbWUpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGNhdGVnb3J5KTtcbiAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcInB1Ymxpc2hzdGF0dXNcIixcIkZhbHNlXCIpXG4gICAgICAgICAgdGhpcy5pbnN0YWxsQXBwKGFwcG5hbWUsY2F0ZWdvcnkpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgLy8gSGFuZGxlIHN1Y2Nlc3NmdWwgaW5zdGFsbGF0aW9uXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnQXBwIGluc3RhbGxlZCBNZXRob2QgY2FsbGVkOicsIGFwcG5hbWUsIGNhdGVnb3J5KTtcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFwiYXBwbmFtZVwiKTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgICAvLyBIYW5kbGUgZXJyb3IgaWYgaW5zdGFsbEFwcCBmYWlsc1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW5zdGFsbGluZyBhcHA6JywgZXJyb3IpO1xuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJhcHBuYW1lXCIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgfVxuICAgICAgLy8gfSBlbHNlIHtcbiAgICAgIC8vICAgY29uc29sZS5lcnJvcignYXBwbmFtZSBvciBjYXRlZ29yeSBxdWVyeSBwYXJhbWV0ZXIgaXMgbWlzc2luZycpO1xuICAgICAgfX0pO1xuXG4gICAgfVxuICAgIFxuICAgIC8vIG9uY2Ugd2UgZml4IGlkZW50aXR5IHNlcnZlciBBUEksIHRoaXMgY29kZSB3aWxsIGJlIG5lZWRlZCBhZ2FpblxuICAgIC8vIFN1YnNjcmliZSB0byB1c2VyIGNoYW5nZXNcbiAgICAvLyB0aGlzLl91c2VyU2VydmljZS51c2VyJFxuICAgIC8vIC5waXBlKHRha2VVbnRpbCh0aGlzLl91bnN1YnNjcmliZUFsbCkpXG4gICAgLy8gLnN1YnNjcmliZSgodXNlcjogYW55KSA9PiB7XG4gICAgLy8gICAgIHRoaXMudXNlciA9IHVzZXI7XG4gICAgLy8gICAgIHRoaXMudXNlckVtYWlsID0gdXNlci5lbWFpbDtcbiAgICAvLyAgICAgdGhpcy51c2VyTmFtZSA9IHVzZXIuRmlyc3ROYW1lICsgJyAnKyB1c2VyLkxhc3ROYW1lIDtcbiAgICAvLyAgICAgdGhpcy51c2VySW1hZ2UgPSB1c2VyLnBpY3R1cmU7XG4gICAgLy8gICAgIC8vIE1hcmsgZm9yIGNoZWNrXG4gICAgLy8gICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIC8vIH0pO1xuXG5cblxuXG4gICAgY29uc3QgdXJsID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgndXJsJyk7XG4gICAgaWYgKHVybCkge1xuICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSB1cmw7XG4gICAgICAvLyBSZW1vdmUgc2F2ZWQgZGF0YSBmcm9tIHNlc3Npb25TdG9yYWdlXG4gICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKCd1cmwnKTtcblxuICAgICAgLy8gUmVtb3ZlIGFsbCBzYXZlZCBkYXRhIGZyb20gc2Vzc2lvblN0b3JhZ2VcbiAgICAgIHNlc3Npb25TdG9yYWdlLmNsZWFyKCk7XG4gICAgfVxuXG4gIH1cblxuICBcblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXMuYXBwTGlzdCAmJiBjaGFuZ2VzLmFwcExpc3QuY3VycmVudFZhbHVlKSB7XG4gICAgICB0aGlzLmFzc2lnbkdyYWRpZW50cygpO1xuICAgIH1cbiAgfVxuXG4gIGFzc2lnbkdyYWRpZW50cygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hcHBMaXN0ICYmIHRoaXMuYXBwTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmFwcExpc3QuZm9yRWFjaCgoYXBwLCBpbmRleCkgPT4ge1xuICAgICAgICBhcHAuZ3JhZGllbnQgPSB0aGlzLmdyYWRpZW50c1tpbmRleCAlIHRoaXMuZ3JhZGllbnRzLmxlbmd0aF07XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsbCBhcHBzIEFwcCBWZXJzaW9uIElkIHJvdXRlXG4gICAqXG4gICAqIEBwYXJhbSBhcHBWZXJzaW9uSWRcbiAgICovXG4gIG9wZW5BcHAoYXBwVmVyc2lvbklkOiBudW1iZXIpOiB2b2lkIHtcbiAgICBcbiAgICBjb25zdCBjdXJyZW50VXJsID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbjsgLy8gR2V0IHRoZSBjdXJyZW50IFVSTFxuICAgIC8vIFVwZGF0ZWQgVVJMIGNoZWNrIGxvZ2ljXG4gICAgaWYgKGN1cnJlbnRVcmwuaW5jbHVkZXMoJ2xvY2FsaG9zdDo0MjAwJykgfHwgY3VycmVudFVybC5pbmNsdWRlcygnYnVpbGRlci5heG9uYXRvci5jb20nKSB8fCBjdXJyZW50VXJsLmluY2x1ZGVzKCdhbmRyb21lZGEtYnVpbGRlci1xYS5heG9uYXRvci5jb20nKSkge1xuICAgICAgXG4gICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgdXNlciBpcyBkZWZpbmVkIGFuZCBoYXMgYSBVc2VySURcbiAgICAgIGlmICghdGhpcy51c2VyKSB7XG4gICAgICAgICAgdGhpcy5fYXhvU25hY2tCYXIub3BlblNuYWNrQmFyKCdVc2VyIG5vdCBmb3VuZCBvciBub3QgbG9nZ2VkIGluJywgQXhvU25hY2tCYXJUeXBlLmVycm9yKTtcbiAgICAgICAgICByZXR1cm47IC8vIEV4aXQgdGhlIG1ldGhvZCBpZiB1c2VyIGlzIG5vdCBhdmFpbGFibGVcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIHJlcXVpcmVkIHBlcm1pc3Npb25zXG4gICAgICBjb25zdCBoYXNSZXF1aXJlZFBlcm1pc3Npb24gPSB0aGlzLnBlcm1pc3Npb25zLmluY2x1ZGVzKCdBUFBfQlVJTERFUicpIHx8IHRoaXMucGVybWlzc2lvbnMuaW5jbHVkZXMoJ0FQUF9JQU0nKTtcbiAgICAgIGlmICghaGFzUmVxdWlyZWRQZXJtaXNzaW9uKSB7XG4gICAgICAgICAgdGhpcy5fYXhvU25hY2tCYXIub3BlblNuYWNrQmFyKCdZb3UgbmVlZCBlaXRoZXIgQVBQX0JVSUxERVIgb3IgQVBQX0lBTSBwZXJtaXNzaW9ucyB0byBwZXJmb3JtIHRoaXMgYWN0aW9uLicsIEF4b1NuYWNrQmFyVHlwZS5lcnJvcik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIERpcmVjdGx5IG9wZW4gdGhlIGFwcCByZWdhcmRsZXNzIG9mIFVSTCBpZiB0aGUgY29uZGl0aW9ucyBhcmUgbm90IG1ldFxuICAgIHRoaXMub3BlbkFwcEV2ZW50LmVtaXQoYXBwVmVyc2lvbklkKTtcbiAgfVxuXG5cblxuICBuYXZpZ2F0ZVRvSG9tZShhcHBWZXJzaW9uSWQ6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZUJ5VXJsKGBhcHBzLyR7YXBwVmVyc2lvbklkfS9ob21lYCk7XG4gIH1cblxuICAvKipcbiAgICogZnVuY3Rpb24gdXNlIHRvIFN3aXRjaCB0aGUgb3JnYW5pemF0aW9uXG4gICAqL1xuICBzd2l0Y2hBY2NvdW50KG9yZ2FuaXphdGlvbklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnN3aXRjaEFjY291bnRFdmVudC5lbWl0KG9yZ2FuaXphdGlvbklkKTtcbiAgICB0aGlzLmdldFVzZXJQZXJtaXNzaW9ucygpO1xuICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWduIG91dFxuICAgKi9cbiAgc2lnbk91dCgpOiB2b2lkIHtcbiAgICB0aGlzLl9sb2dnaW5nU2VydmljZS50cmFja0V2ZW50KCd1c2VyIGxvZ2dlZCBvdXQnLHtzdGVwIDogJ0J5ZSBCeWUgJyt0aGlzLnVzZXJOYW1lfSk7XG4gICAgdGhpcy5fYXV0aFNlcnZpY2Uuc2lnbk91dCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJpbGxpbmdcbiAgICovXG4gIG5hdmlnYXRlVG9CaWxsaW5nKCk6IHZvaWQge1xuICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZUJ5VXJsKCdwYXltZW50aW5mby9wcmljaW5nJylcbiAgICBcbiAgfVxuXG5cblxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8gQ3JlYXRlIEFwcHAvLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8qKlxuICAgKnRvIGNyZWF0ZSBuZXcgYXBwXG4gICAqL1xuICAgb3BlbkNyZWF0ZUFwcERpYWxvZygpOiB2b2lkIHtcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKEFwcENyZWF0ZURpYWxvZ0NvbXBvbmVudENvbXBvbmVudCwge1xuICAgICAgd2lkdGg6ICc2MDBweCcsXG4gICAgICBoZWlnaHQ6ICdhdXRvJyxcbiAgICAgIHBhbmVsQ2xhc3M6ICdjdXN0b20tZGlhbG9nLWNvbnRhaW5lcicsXG4gICAgICBiYWNrZHJvcENsYXNzOiAnY3VzdG9tLWRpYWxvZy1iYWNrZHJvcCdcbiAgICB9KTtcblxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICBjb25zdCB7IG5hbWUsIGRlc2NyaXB0aW9uIH0gPSByZXN1bHQ7XG5cbiAgICAgICAgdGhpcy5fYXhvU25hY2tCYXIub3BlblNuYWNrQmFyKCdDcmVhdGluZyBBcHAuLi4nLCBBeG9TbmFja0JhclR5cGUuaW5mbyk7XG4gICAgICAgIHRoaXMuY3JlYXRlQXBwKG5hbWUsIGRlc2NyaXB0aW9uKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNyZWF0ZUFwcChuYW1lOiBzdHJpbmcsIGRlc2NyaXB0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtRGF0YUZvclNlcnZpY2UgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBmb3JtRGF0YUZvclNlcnZpY2UuYXBwZW5kKCduYW1lJywgbmFtZSk7XG4gICAgZm9ybURhdGFGb3JTZXJ2aWNlLmFwcGVuZCgnZGVzY3JpcHRpb24nLCBkZXNjcmlwdGlvbik7XG5cbiAgICB0aGlzLl9tcEFwcExpc3RTZXJ2aWNlLmFkZEFwcEJhc2ljSW5mbyhmb3JtRGF0YUZvclNlcnZpY2UpLnRvUHJvbWlzZSgpXG4gICAgICAudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgIGlmIChyZXNwb25zZT8uYWRkQXBwQmFzaWNJbmZvPy5zdGF0dXMgPT09ICdzdWNjZXNzJyAmJiByZXNwb25zZS5hZGRBcHBCYXNpY0luZm8uYXBwPy5hcHB2ZXJzaW9uX2lkKSB7XG4gICAgICAgICAgLy90aGlzLl9uYXZpZ2F0aW9uLnVwZGF0ZUNsYXNzaWNOYXZpZ2F0aW9uUm91dGVzKHJlc3BvbnNlLmFkZEFwcEJhc2ljSW5mby5hcHAuYXBwdmVyc2lvbl9pZCk7XG4gICAgICAgICAgLy90aGlzLl9yb3V0ZXIubmF2aWdhdGUoWydhcHBzJywgcmVzcG9uc2UuYWRkQXBwQmFzaWNJbmZvLmFwcC5hcHB2ZXJzaW9uX2lkXSk7XG4gICAgICAgICAgXG4gICAgICAgICAgdGhpcy5fYXhvU25hY2tCYXIub3BlblNuYWNrQmFyKCdBcHAgY3JlYXRlZC4nLCBBeG9TbmFja0JhclR5cGUuc3VjY2Vzcyk7XG4gICAgICAgICAgdGhpcy5vcGVuQXBwKHJlc3BvbnNlLmFkZEFwcEJhc2ljSW5mby5hcHAuYXBwdmVyc2lvbl9pZClcbiAgICAgICAgfSBlbHNlIGlmIChyZXNwb25zZT8uYWRkQXBwQmFzaWNJbmZvPy5hcHAgPT09ICdhbHJlYWR5X2V4aXN0cycpIHtcbiAgICAgICAgICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ0FwcCBhbHJlYWR5IGV4aXN0cycsIEF4b1NuYWNrQmFyVHlwZS53YXJuaW5nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ09vcHMhIFNvbWV0aGluZyB3ZW50IHdyb25nJywgQXhvU25hY2tCYXJUeXBlLmVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGNyZWF0aW5nIGFwcDonLCBlcnJvcik7XG4gICAgICAgIHZhciBlcnJvck1lc3NhZ2UgPSAnT29wcyEgU29tZXRoaW5nIHdlbnQgd3JvbmcnXG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgIGlmIChlcnJvciA9PT0gJ0FYX0VSUl82NycpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9ICdPb3BzISBDYW5cXCd0IHJlYWNoIG91ciBzZXJ2ZXJzIPCfk6EuIFBsZWFzZSB3YWl0LCB3ZVxcJ2xsIG5vdGlmeSB5b3Ugc29vbi4nO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAgIHRoaXMuX2F4b1NuYWNrQmFyLm9wZW5TbmFja0JhcihlcnJvck1lc3NhZ2UsIEF4b1NuYWNrQmFyVHlwZS5lcnJvcik7XG4gICAgICB9KTtcbiAgfVxuLy9UcnlpbmcgdG8gaW1wbGVtZW50IHVybCBhcyB3ZWxsIGFzIGJ1dHRvbiBmdW5jdGlvbmFsaXR5IGZvciBpbnN0YWxsaW5nIGFwcFxuLy8gYXN5bmMgaW5zdGFsbEFwcCh1c2VySW5wdXQ/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgXG4vLyAgIGlmICghdXNlcklucHV0KSB7XG4vLyAgICAgdXNlcklucHV0ID0gcHJvbXB0KCdFbnRlciB0aGUgc3RyaW5nIHRvIHNlbmQgdG8gdGhlIEFQSTonKTtcbi8vICAgICBpZiAoIXVzZXJJbnB1dCkge1xuLy8gICAgICAgLy8gSWYgdXNlciBjYW5jZWxzIG9yIHByb3ZpZGVzIG5vIGlucHV0LCBkbyBub3RoaW5nXG4vLyAgICAgICByZXR1cm47XG4vLyAgICAgfVxuLy8gICB9XG5cbi8vICAgdGhpcy5fYXhvU25hY2tCYXIub3BlblNuYWNrQmFyKCdJbnN0YWxsaW5nIEFwcC4uLicsIEF4b1NuYWNrQmFyVHlwZS5pbmZvKTtcbiAgXG4gXG5jaGVja0FuZFB1Ymxpc2hBcHAoaW5zdGFsbGVkQXBwOiBzdHJpbmcpIHtcbiAgLy9cbiAgY29uc3QgYXBwTmFtZWNoZWNrID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2FwcG5hbWUnKTsgLy8gUmVwbGFjZSB3aXRoIHlvdXIgbG9naWMgdG8gZ2V0IGFwcE5hbWVjaGVja1xuICBjb25zdCBhcHBQdWJsaXNoU3RhdHVzID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3B1Ymxpc2hzdGF0dXMnKTsgLy8gUmVwbGFjZSB3aXRoIHlvdXIgbG9naWMgdG8gZ2V0IGFwcFB1Ymxpc2hTdGF0dXNcbiAgY29uc3QgYXBwSW5zdGFsbFN0YXR1cz1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnaW5zdGFsbHN0YXR1cycpXG5cbiAgIGlmIChhcHBOYW1lY2hlY2sgPT0gbnVsbCAmJiBhcHBQdWJsaXNoU3RhdHVzID09IFwiRmFsc2VcIiAmJiBhcHBJbnN0YWxsU3RhdHVzPT1cIlRydWVcIikge1xuICAgIGNvbnN0IGFwcElkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3B1Ymxpc2hBcHBJZERhdGEnKTtcbiAgICBjb25zdCBhcHBWZXJzaW9uID0gXCIxLjAwXCI7XG4gICAgY29uc3QgcHVibGlzaFN0YXR1cyA9IFwiUFwiO1xuICAgIGlmIChhcHBJZCkge1xuICAgICAgdGhpcy5fY29tbW9uU2VydmljZS5wdWJsaXNoYXBwKGFwcElkLCBhcHBWZXJzaW9uLCBwdWJsaXNoU3RhdHVzKS5zdWJzY3JpYmUoXG4gICAgICAgIHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAvLyBIYW5kbGUgdGhlIHJlc3BvbnNlIGlmIG5lZWRlZFxuICAgICAgICAgIGNvbnNvbGUubG9nKCdQdWJsaXNoIHJlc3BvbnNlOicsIHJlc3BvbnNlKTtcbiAgICAgICAgICAvLyBjb25zdCBhcHBOYW1lID0gaW5zdGFsbGVkQXBwIHx8ICdZb3VyIEFwcCc7XG4gICAgICAgICAgLy8gY29uc3QgYXBwVmVyc2lvbiA9ICcxLjAwMCc7XG4gICAgICAgICAgLy8gY29uc3Qgc3VjY2Vzc01lc3NhZ2UgPSBgQXBwOiAke2FwcE5hbWV9IHZlcnNpb24gJHthcHBWZXJzaW9ufSBpcyBwdWJsaXNoZWQgc3VjY2Vzc2Z1bGx5LmA7XG4gICAgICAgICAvLyB0aGlzLm9wZW5TdWNjZXNzRGlhbG9nKCd2ZXJzaW9uIHB1Ymxpc2hlZCBzdWNjZXNzZnVsbHkhJyk7XG4gICAgICAgICBjb25zdCBhcHBOYW1lID0gaW5zdGFsbGVkQXBwO1xuICAgICAgICAgY29uc3QgYXBwVmVyc2lvbiA9ICcxLjAwMCc7XG4gICAgICAgICBjb25zdCBib3hoZWFkaW5nPWBJbnN0YWxsZWRgXG4gICAgICAgICBjb25zdCBzdWNjZXNzTWVzc2FnZSA9IGBBcHA6ICR7YXBwTmFtZX0gdmVyc2lvbiAke2FwcFZlcnNpb259IGlzIGluc3RhbGxlZCBzdWNjZXNzZnVsbHkuIGA7XG4gICAgICAgICBjb25zdCBzdWNjZXNzRGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihTdWNjZXNzRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICAgICAgIHdpZHRoOiAnNTAwcHgnLFxuICAgICAgICAgICBkYXRhOiB7IG1lc3NhZ2U6IHN1Y2Nlc3NNZXNzYWdlICwgaGVhZGluZzpib3hoZWFkaW5nfSxcbiAgICAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlXG4gICAgICAgICB9KTtcbiAgICAgICAgICAvLyBSZW1vdmUgbG9jYWwgc3RvcmFnZSBpdGVtc1xuICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdwdWJsaXNoQXBwSWREYXRhJyk7XG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ3B1Ymxpc2hzdGF0dXMnKTtcbiAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnaW5zdGFsbHN0YXR1cycpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvciA9PiB7XG4gICAgICAgICAgLy8gSGFuZGxlIGVycm9yIGlmIG5lZWRlZFxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHB1Ymxpc2hpbmcgYXBwOicsIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbmZldGNoQXBwRGV0YWlscyhmbGF0dGVuOiBhbnkpIHtcbiAgaWYgKGZsYXR0ZW4gJiYgZmxhdHRlbi5hcHBWZXJzaW9uSWQpIHtcbiAgICB0aGlzLl9tcEFwcExpc3RTZXJ2aWNlLmZldGNoQXBwRGV0YWlscyhmbGF0dGVuLmFwcFZlcnNpb25JZCwgdGhpcy5jb21tb25MaWJDb25maWcuYXhvbmF0b3JYMVVybCkuc3Vic2NyaWJlKFxuICAgICAgKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgaXNBcHBDaGFuZ2VkQWZ0ZXJQdWJsaXNoID0gcmVzcG9uc2U/LmRhdGE/LmRldGFpbHM/LmlzX2FwcF9jaGFuZ2VkX2VkaXRlZF9hZnRlcl9wdWJsaXNoIHx8IGZhbHNlO1xuICAgICAgICB0aGlzLmlzQXBwQ2hhbmdlZEFmdGVyUHVibGlzaCA9IGlzQXBwQ2hhbmdlZEFmdGVyUHVibGlzaDtcblxuICAgICAgICB0aGlzLmlzQXBwQ2hhbmdlZEFmdGVyUHVibGlzaCA9IHRydWU7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiRGV0YWlscyBGb3VuZFwiKVxuICAgICAgICAvLyBUcmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb24gdG8gdXBkYXRlIHRoZSB2aWV3XG4gICAgICAgIC8vIHRoaXMuZGV0ZWN0Q2hhbmdlcygpOyAvLyA8LS0tIENhbGwgZGV0ZWN0Q2hhbmdlcygpIGhlcmVcblxuICAgICAgfSxcbiAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBhcHAgZGV0YWlsczonLCBlcnJvcik7XG4gICAgICB9XG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zb2xlLmVycm9yKCdhcHBWZXJzaW9uSWQgaXMgbWlzc2luZyBvciBpbnZhbGlkIGluIHRoZSBmbGF0dGVuIG9iamVjdDonLCBmbGF0dGVuKTtcbiAgfVxufVxuXG5cbmFzeW5jICBpbnN0YWxsQXBwKHVzZXJJbnB1dDogc3RyaW5nLCBjYXRlZ29yeTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIC8vXG4gIFxuICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoICdJbnN0YWxsaW5nIEFwcC4uLicsIEF4b1NuYWNrQmFyVHlwZS5pbmZvKTtcbiAgY29uc3QgbG9hZGluZ0RpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oTG9hZGluZ0FwcGluc3RhbGxDb21wb25lbnQsIHtcbiAgICB3aWR0aDogJzYwMHB4JyxcbiAgICBkYXRhOiB7IGxvYWRpbmdNZXNzYWdlOiAnSW5zdGFsbGluZyBhcHAsIHBsZWFzZSB3YWl0Li4uJyB9LFxuICAgIGRpc2FibGVDbG9zZTogdHJ1ZVxuICB9KTtcbiAgLy9jb25zdCBsb2FkaW5nRGlhbG9nUmVmID0gdGhpcy5vcGVuTG9hZGluZ0RpYWxvZ1dpdGhNZXNzYWdlKCdQbGVhc2Ugd2FpdC4gSW5zdGFsbGluZyBpbiBwcm9ncmVzcy4uLicpO1xuICBcbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgcmVxdWVzdFN0cmluZzogdXNlcklucHV0LFxuICAgICAgc2Vjb25kU3RyaW5nOiBjYXRlZ29yeVxuICAgIH07IFxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwLnBvc3Q8c3RyaW5nPignSW5zdGFsbEFwcCcsIGRhdGEsIHtcbiAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgLy8gU2V0IGNvbnRlbnQgdHlwZSB0byBhcHBsaWNhdGlvbi9qc29uXG4gICAgICB9KSxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZVxuICAgIH0pLnRvUHJvbWlzZSgpO1xuXG4gICAgLy9jb25zb2xlLmxvZygnUmVzcG9uc2UgZnJvbSBzZXJ2ZXI6JywgcmVzcG9uc2UpOyBcbiAgICBcbiAgICAvL2NvbnN0IHJlc3BvbnNlT2JqZWN0ID0gSlNPTi5wYXJzZShyZXNwb25zZSk7XG4gICAgXG4gICAgXG4gIC8vICAgaWYgKHJlc3BvbnNlKSB7XG5cbiAgLy8gICAgIGlmKHJlc3BvbnNlT2JqZWN0LnN0YXR1cz09XCJzdWNjZXNzXCIpe1xuICAvLyAgICAgdGhpcy5fYXhvU25hY2tCYXIub3BlblNuYWNrQmFyKCdBcHAgaW5zdGFsbGVkIHN1Y2Nlc3NmdWxseScsIEF4b1NuYWNrQmFyVHlwZS5zdWNjZXNzKTtcbiAgLy8gICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAvLyAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gIC8vICAgICB9LCAxNTAwMCk7XG4gIC8vICAgfSBlbHNlIGlmKHJlc3BvbnNlT2JqZWN0LnN0YXR1cz09J2ZhaWx1cmUnKSB7XG4gIC8vICAgICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ0Zvcm0gTm90IEZvdW5kIGluIHRoaXMgYXBwJywgQXhvU25hY2tCYXJUeXBlLmVycm9yKTtcbiAgLy8gICB9XG4gIC8vICAgICBlbHNlIHtcbiAgLy8gICAgIHRoaXMuX2F4b1NuYWNrQmFyLm9wZW5TbmFja0JhcignT29wcyEgU29tZXRoaW5nIHdlbnQgd3Jvbmcgd2hpbGUgaW5zdGFsbGluZyB0aGUgYXBwLicsIEF4b1NuYWNrQmFyVHlwZS5lcnJvcik7XG4gICAgICBcbiAgLy8gICAgIGNvbnNvbGUuZXJyb3IoQXhvU25hY2tCYXJUeXBlLmVycm9yKTtcbiAgLy8gICB9fVxuICAvLyB9IGNhdGNoIChlcnJvcikge1xuICAvLyAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluc3RhbGxpbmcgYXBwOicsIGVycm9yKTtcbiAgLy8gICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ09vcHMhIFNvbWV0aGluZyB3ZW50IHdyb25nIHdoaWxlIGluc3RhbGxpbmcgdGhlIGFwcC4nLCBBeG9TbmFja0JhclR5cGUuZXJyb3IpO1xuICAvLyAgIC8vdGhpcy5fbG9nZ2luZ1NlcnZpY2UudHJhY2tFdmVudCgnRXJyb3Igb2NjdXJyZWQgd2hpbGUgaW5zdGFsbGluZyBhcHAnLCBlcnJvcik7XG4gIC8vIH1cblxuICAgIFxuICAgICAgLy9jb25zdCByZXNwb25zZU9iamVjdCA9IEpTT04ucGFyc2UocmVzcG9uc2UpO1xuICAgICAgLy9jb25zb2xlLmxvZyhyZXNwb25zZU9iamVjdCk7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcIkluc3RhbGxlZEFwcE5hbWVcIix1c2VySW5wdXQpXG4gICAgICBjb25zdCByZXNwb25zZU9iamVjdCA9IHR5cGVvZiByZXNwb25zZSA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKHJlc3BvbnNlKSA6IHJlc3BvbnNlO1xuICAgICAgXG4gICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgLy9pZiAocmVzcG9uc2VPYmplY3QpIHtcbiAgICAgICAgIGlmIChyZXNwb25zZU9iamVjdC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7ICAgICAgICAgIFxuICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiaW5zdGFsbHN0YXR1c1wiLFwiVHJ1ZVwiKVxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ0FwcCBpbnN0YWxsZWQgc3VjY2Vzc2Z1bGx5JywgQXhvU25hY2tCYXJUeXBlLnN1Y2Nlc3MpO1xuICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICAgIGxvYWRpbmdEaWFsb2dSZWYuY2xvc2UoKTtcbiAgICAgICAgICAgIH0sIDIwMDAwKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICBcbiAgICAgICAgICAvLyB9IGVsc2UgaWYgKHJlc3BvbnNlT2JqZWN0LnN0YXR1cyA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgICAgLy8gICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ0Zvcm0gTm90IEZvdW5kIGluIHRoaXMgYXBwJywgQXhvU25hY2tCYXJUeXBlLmVycm9yKTtcbiAgICAgICAgfWVsc2Uge1xuICAgICAgICAgIHRoaXMuX2F4b1NuYWNrQmFyLm9wZW5TbmFja0JhcignRm9ybSBjYW5ub3QgYmUgZm91bmQgZm9yIHRoaXMgYXBwJywgQXhvU25hY2tCYXJUeXBlLmVycm9yKTtcbiAgICAgICAgICBsb2FkaW5nRGlhbG9nUmVmLmNsb3NlKCk7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihBeG9TbmFja0JhclR5cGUuZXJyb3IpO1xuICAgICAgICB9fVxuICAgICAgICBlbHNle1xuICAgICAgICAgIHRoaXMuX2F4b1NuYWNrQmFyLm9wZW5TbmFja0JhcignT29wcyFTb21ldGhpbmcgd2VudCB3cm9uZyB3aGlsZSBjcmVhdGluZyB0aGUgYXBwJywgQXhvU25hY2tCYXJUeXBlLmVycm9yKTtcbiAgICAgICAgICBsb2FkaW5nRGlhbG9nUmVmLmNsb3NlKCk7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihBeG9TbmFja0JhclR5cGUuZXJyb3IpO1xuICAgICAgICB9XG4gICAgfSAgIFxuXG5cbiAgICBvcGVuRGVsZXRlQXBwRGlhbG9nKGFwcFZlcnNpb25JZDpudW1iZXIpe1xuICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDb25maXJtYXRpb25Nb2RhbENvbXBvbmVudCwge1xuICAgICAgICB3aWR0aDogJzMwJScsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHRpdGxlOiAnQXJlIHlvdSBzdXJlPycsXG4gICAgICAgIG1lc3NhZ2U6ICdBcmUgeW91IHN1cmUgd2FudCB0byBkZWxldGUgdGhpcyBhcHA/JyxcbiAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6ICdEZWxldGUnLFxuICAgICAgICBjYW5jZWxCdXR0b25UZXh0OiAnQ2FuY2VsJyxcbiAgICAgICAgY29uZmlybUJ1dHRvblR5cGU6ICdkZWxldGUnXG4gICAgICB9LFxuICAgICAgcGFuZWxDbGFzczogJ2NvbmZpcm0tbW9kYWwtY29udGFpbmVyJ1xuICAgICAgfSk7XG5cbiAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgdGhpcy5kZWxldGVBcHAoYXBwVmVyc2lvbklkKTsgLy8gUHJvY2VlZCB3aXRoIGRlbGV0aW9uXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGRlbGV0ZUFwcChhcHBWZXJzaW9uSWQ6bnVtYmVyKTogdm9pZCB7XG4gICAgICB0aGlzLl9mbGF0dGVuU2VydmljZS5nZXRGbGF0dGVuRGF0YShhcHBWZXJzaW9uSWQpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl91bnN1YnNjcmliZUFsbCksXG4gICAgICAgICAgICAgIHN3aXRjaE1hcCgoZmxhdHRlbikgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKGZsYXR0ZW4gJiYgZmxhdHRlbi5hcHBJZCAhPT0gdW5kZWZpbmVkICYmIGZsYXR0ZW4udmVyc2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXBwSWQgPSBmbGF0dGVuLmFwcElkLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXBwVmVyc2lvbiA9IGZsYXR0ZW4udmVyc2lvbi50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFwcFY9YXBwVmVyc2lvbklkO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQXBwIHZlcnNpb24gSWQ6XCIrYXBwVmVyc2lvbklkKTtcblxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YT17XG4gICAgICAgICAgICAgICAgICAgICAgICBcIkFwcCBJZFwiIDogZmxhdHRlbi5hcHBJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiQXBwIE5hbWVcIiA6IGZsYXR0ZW4uYXBwTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiQXBwIHZlcnNpb25cIiA6IGZsYXR0ZW4udmVyc2lvblxuICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdGZXRjaGVkIGFwcCBkZXRhaWxzIGZyb20gZmxhdHRlbjonLCB7IGFwcElkLCBhcHBWZXJzaW9uIH0pO1xuICBcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbXBBcHBMaXN0U2VydmljZS5kZWxldGVBcHAoYXBwSWQsIGFwcFZlcnNpb24udG9TdHJpbmcoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFcnJvciBvY2N1cnJlZCB3aGlsZSBkZWxldGluZyBhcHA6JywgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgZXJyb3IsIGUuZy4sIGRpc3BsYXkgYSBtZXNzYWdlIG9yIHBlcmZvcm0gYWRkaXRpb25hbCBhY3Rpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0Vycm9yOiBmbGF0dGVuIG9iamVjdCBvciBpdHMgcHJvcGVydGllcyBhcmUgdW5kZWZpbmVkLicpO1xuICAgICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBmbGF0dGVuIG9yIGl0cyBwcm9wZXJ0aWVzIGFyZSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcignRmxhdHRlbiBvYmplY3Qgb3IgaXRzIHByb3BlcnRpZXMgYXJlIHVuZGVmaW5lZCcpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgc3VjY2VzcyByZXNwb25zZSBoZXJlIGlmIG5lZWRlZFxuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0RlbGV0ZSBhcHAgc3VjY2VzczonLCByZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgZGVsZXRlZCBhcHAgZnJvbSB0aGUgYXBwTGlzdFxuICAgICAgICAgICAgICAgICB0aGlzLmFwcExpc3QgPSB0aGlzLmFwcExpc3QuZmlsdGVyKGFwcCA9PiBhcHAuYXBwVmVyc2lvbklkICE9PSBhcHBWZXJzaW9uSWQpO1xuICAgICAgICAgICAgICAgICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ0FwcCBkZWxldGVkIHN1Y2Nlc3NmdWxseScsIEF4b1NuYWNrQmFyVHlwZS5zdWNjZXNzKTtcbiAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2luZ1NlcnZpY2UudHJhY2tFdmVudCgnQXBwIGRlbGV0ZWQnLCB0aGlzLmRhdGEpO1xuICAgICAgICAgICAgICAgICAgLy8gTWFudWFsbHkgdHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uIHRvIHVwZGF0ZSB0aGUgdmlld1xuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpOyAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgZXJyb3IgaGVyZSBpZiBuZWVkZWRcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0RlbGV0ZSBhcHAgZXJyb3I6JywgZXJyb3IpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgfVxuICAgIFxuICBcblxucHJpdmF0ZSBvcGVuTG9hZGluZ0RpYWxvZ1dpdGhNZXNzYWdlKG1lc3NhZ2U6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBcbiAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihMb2FkaW5nQXBwaW5zdGFsbENvbXBvbmVudCwge1xuICAgIHdpZHRoOiAnNTAwcHgnLFxuICAgIFxuICAgIHBhbmVsQ2xhc3M6ICdhcHAtbG9hZGluZy1kaWFsb2cnLFxuICAgIGRhdGE6IHsgbWVzc2FnZSwgdHlwZTogJ1lvdXIgYXBwIGlzIGJlaW5nIFB1Ymxpc2hlZC4uLicgfSxcbiAgfSk7XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBkaWFsb2dSZWYuY2xvc2UoKTtcbiAgICAgIC8vdGhpcy5vcGVuU3VjY2Vzc0RpYWxvZygndmVyc2lvbiBwdWJsaXNoZWQgc3VjY2Vzc2Z1bGx5IScpO1xuICAgICAgcmVzb2x2ZSgpOyAvLyBSZXNvbHZlIHRoZSBwcm9taXNlIGFmdGVyIGNsb3NpbmcgdGhlIGRpYWxvZ1xuICAgIH0sIDEzODAwKTsgLy8gMTMuNiBzZWNvbmRzIGluIG1pbGxpc2Vjb25kc1xuICB9KTtcbn1cblxucHJpdmF0ZSBvcGVuU3VjY2Vzc0RpYWxvZyhtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgLy9cbiAgdGhpcy5fZmxhdHRlblNlcnZpY2UuZmxhdHRlbiQucGlwZShcbiAgICB0YWtlKDEpLFxuICAgIHN3aXRjaE1hcCgoZmxhdHRlbikgPT4ge1xuICAgICAgaWYgKCFmbGF0dGVuIHx8ICFmbGF0dGVuLmFwcFZlcnNpb25JZCkge1xuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcignRmxhdHRlbiBvYmplY3Qgb3IgaXRzIHByb3BlcnRpZXMgYXJlIHVuZGVmaW5lZCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZvcmtKb2luKHtcbiAgICAgICAgZmxhdHRlbjogb2YoZmxhdHRlbiksXG4gICAgICAgIGFwcERldGFpbHM6IHRoaXMuX21wQXBwTGlzdFNlcnZpY2UuZmV0Y2hBcHBEZXRhaWxzKGZsYXR0ZW4uYXBwVmVyc2lvbklkLCB0aGlzLmNvbW1vbkxpYkNvbmZpZy5heG9uYXRvclgxVXJsKS5waXBlKFxuICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBhcHAgZGV0YWlsczonLCBlcnJvcik7XG4gICAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgfSk7XG4gICAgfSlcbiAgKS5zdWJzY3JpYmUoKHsgZmxhdHRlbiwgYXBwRGV0YWlscyB9KSA9PiB7XG4gICAgY29uc29sZS5sb2coJ2ZldGNoQXBwRGV0YWlscyBmdW5jdGlvbiBjYWxsZWQgNCcpO1xuICAgIHRoaXMuaXNBcHBDaGFuZ2VkQWZ0ZXJQdWJsaXNoID0gYXBwRGV0YWlscz8uZGF0YT8uZGV0YWlscz8uaXNfYXBwX2NoYW5nZWRfZWRpdGVkX2FmdGVyX3B1Ymxpc2ggfHwgZmFsc2U7IC8vIFNldCBpc0FwcENoYW5nZWRBZnRlclB1Ymxpc2ggYmFzZWQgb24gdGhlIEFQSSByZXNwb25zZVxuICAgIC8vIEZldGNoIHRoZSBtaW5vciB2ZXJzaW9uIGZyb20gZ2V0VmVyc2lvbkxpc3RcbiAgICB0aGlzLl9jb21tb25TZXJ2aWNlLmdldFZlcnNpb25MaXN0KGZsYXR0ZW4uYXBwSWQsIGZsYXR0ZW4udmVyc2lvbikuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGxldCBhcHBNaW5vclZlcnNpb24gPSAnVW5rbm93bic7IC8vIERlZmF1bHQgdmFsdWUgaWYgbWlub3IgdmVyc2lvbiBpcyBub3QgZm91bmRcbiAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LnYgJiYgcmVzdWx0LnYudmVyc2lvbnNsaXN0ICYmIHJlc3VsdC52LnZlcnNpb25zbGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGFwcE1pbm9yVmVyc2lvbiA9IHJlc3VsdC52LnZlcnNpb25zbGlzdFswXS5hcHBtaW5vcnZlcnNpb247XG4gICAgICB9XG4gICAgICBjb25zdCBhcHBOYW1lID0gZmxhdHRlbj8uYXBwTmFtZSB8fCAnWW91ciBBcHAnO1xuICAgICAgICBjb25zdCBhcHBWZXJzaW9uID0gZmxhdHRlbj8udmVyc2lvbiB8fCAndmVyc2lvbic7XG4gICAgICAgIGNvbnN0IHN1Y2Nlc3NNZXNzYWdlID0gYEFwcDogJHthcHBOYW1lfSB2ZXJzaW9uICR7YXBwTWlub3JWZXJzaW9ufSBpcyBJbnN0YWxsZWQgc3VjY2Vzc2Z1bGx5LmA7XG4gICAgICAgIGNvbnN0IGFwcGhlYWRpbmcgPWBJbnN0YWxsZWRgXG4gICAgICAgIGNvbnN0IHN1Y2Nlc3NEaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFN1Y2Nlc3NEaWFsb2dDb21wb25lbnQsIHtcbiAgICAgICAgICB3aWR0aDogJzUwMHB4JyxcbiAgICAgICAgICBkYXRhOiB7IG1lc3NhZ2U6IHN1Y2Nlc3NNZXNzYWdlfVxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmNhcGl0YWxpemVXb3JkcyhzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBzdHJcbiAgICAuc3BsaXQoJyAnKVxuICAgIC5tYXAod29yZCA9PiB3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKSlcbiAgICAuam9pbignICcpO1xufVxuXG5cbiAgLyoqXG4gICAqIE9uIGRlc3Ryb3lcbiAgICovXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIC8vIFVuc3Vic2NyaWJlIGZyb20gYWxsIHN1YnNjcmlwdGlvbnNcbiAgICB0aGlzLl91bnN1YnNjcmliZUFsbC5uZXh0KCk7XG4gICAgdGhpcy5fdW5zdWJzY3JpYmVBbGwuY29tcGxldGUoKTtcbiAgfVxuXG4gIGRpc2FibGVRUihhcHBWZXJzaW9uSWQ6IGFueSAsIGluZGV4OiBudW1iZXIpe1xuICAgIGxldCBkYXRhID0ge1xuICAgICAgYXBwVmVyc2lvbklkIDogYXBwVmVyc2lvbklkXG4gICAgfTtcbiAgXG4gICAgdGhpcy5fZGF0YVZpZXdGaWx0ZXJzU2VydmljZS5kaXNhYmxlUVIoZGF0YSlcbiAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIHRoaXMuX2F4b1NuYWNrQmFyLm9wZW5TbmFja0JhcignUVIgY29kZSBkaXNhYmxlZCBzdWNjZXNzZnVsbHknLCBBeG9TbmFja0JhclR5cGUuc3VjY2Vzcyk7XG4gICAgICAgICAgdGhpcy5fbG9nZ2luZ1NlcnZpY2UudHJhY2tFdmVudCgnUVIgRGlzYWJsZWQnLHtyZXNwb25zZX0pO1xuICAgICAgICAgIHRoaXMuYXBwTGlzdFtpbmRleF0ucXJfc3RhdHVzID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9LFxuICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvcjonLCBlcnJvcik7XG4gICAgICAgICAgLy8gSGFuZGxlIHRoZSBlcnJvclxuICAgICAgICB9XG4gICAgICApOyAgXG4gIH1cblxuICBkaXNhYmxlUVJEaWFsb2coYXBwVmVyc2lvbklkOiBhbnksIGluZGV4OiBudW1iZXIpe1xuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQ29uZmlybWF0aW9uTW9kYWxDb21wb25lbnQsIHtcbiAgICAgIHdpZHRoOiAnMzAlJyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgdGl0bGU6ICdBcmUgeW91IHN1cmU/JyxcbiAgICAgICAgbWVzc2FnZTogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkaXNhYmxlIFFSIGZvciB0aGlzIGZvcm0/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==