ax-common-ui-lib 1.0.1-beta.34.1-testing → 1.0.1-beta.34.2-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.
Files changed (24) hide show
  1. package/esm2020/lib/app-create-dialog-component/app-create-dialog-component.component.mjs +25 -22
  2. package/esm2020/lib/app-list/app-list.component.mjs +73 -62
  3. package/esm2020/lib/common-footer/common-footer.component.mjs +19 -7
  4. package/esm2020/lib/data-view-lib/data-view-filters/data-view-filters.component.mjs +3 -2
  5. package/esm2020/lib/data-view-lib/data-view-filters/generate-qr/generate-qr.component.mjs +59 -58
  6. package/esm2020/lib/data-view-lib/data-view-lib.module.mjs +4 -5
  7. package/esm2020/lib/field-map/field-map.component.mjs +2 -2
  8. package/esm2020/lib/form-object/form-object-view/form-object-view.service.mjs +6 -2
  9. package/esm2020/lib/form-object/form-object-view/form-object-widgets/image-widget-view/image-map-view/image-map-view.component.mjs +2 -2
  10. package/esm2020/lib/form-object/form-object-view/form-object-widgets/image-widget-view/image-widget-lightbox-view/image-widget-lightbox-view.component.mjs +2 -2
  11. package/esm2020/lib/ghost-loader/ghost-loader.component.mjs +2 -2
  12. package/esm2020/lib/qrdialog/qrdialog.component.mjs +26 -27
  13. package/esm2020/lib/sculptor/form-builder-master/canvas/widget-drop-list/widget-drop-list.component.mjs +2 -2
  14. package/esm2020/lib/sculptor/form-builder-master/form-builder-master.service.mjs +33 -18
  15. package/esm2020/lib/shared/comfirmation-modal/confirmation-modal.component.mjs +2 -2
  16. package/esm2020/public-api.mjs +3 -1
  17. package/fesm2015/ax-common-ui-lib.mjs +252 -206
  18. package/fesm2015/ax-common-ui-lib.mjs.map +1 -1
  19. package/fesm2020/ax-common-ui-lib.mjs +249 -203
  20. package/fesm2020/ax-common-ui-lib.mjs.map +1 -1
  21. package/lib/common-footer/common-footer.component.d.ts +2 -0
  22. package/lib/qrdialog/qrdialog.component.d.ts +1 -0
  23. package/package.json +1 -1
  24. package/public-api.d.ts +2 -0
@@ -167,58 +167,64 @@ function AppListComponent_ng_container_55_div_2_div_2_Template(rf, ctx) { if (rf
167
167
  const ctx_r29 = i0.ɵɵnextContext(2);
168
168
  i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(1, _c0, ctx_r29.openPopupMenu === appDetail_r27.appVersionId));
169
169
  } }
170
+ function AppListComponent_ng_container_55_div_2_div_4_div_10_Template(rf, ctx) { if (rf & 1) {
171
+ const _r40 = i0.ɵɵgetCurrentView();
172
+ i0.ɵɵelementStart(0, "div", 82);
173
+ i0.ɵɵelementStart(1, "button", 83);
174
+ i0.ɵɵlistener("click", function AppListComponent_ng_container_55_div_2_div_4_div_10_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r40); const appDetail_r27 = i0.ɵɵnextContext(2).$implicit; const ctx_r38 = i0.ɵɵnextContext(2); return ctx_r38.openDeleteAppDialog(appDetail_r27.appVersionId); });
175
+ i0.ɵɵelement(2, "img", 86);
176
+ i0.ɵɵelementStart(3, "span");
177
+ i0.ɵɵtext(4, "Delete");
178
+ i0.ɵɵelementEnd();
179
+ i0.ɵɵelementEnd();
180
+ i0.ɵɵelementEnd();
181
+ } }
170
182
  function AppListComponent_ng_container_55_div_2_div_4_Template(rf, ctx) { if (rf & 1) {
171
- const _r39 = i0.ɵɵgetCurrentView();
183
+ const _r43 = i0.ɵɵgetCurrentView();
172
184
  i0.ɵɵelementStart(0, "div", 77);
173
185
  i0.ɵɵelementStart(1, "button", 78);
174
- i0.ɵɵlistener("click", function AppListComponent_ng_container_55_div_2_div_4_Template_button_click_1_listener($event) { i0.ɵɵrestoreView(_r39); const appDetail_r27 = i0.ɵɵnextContext().$implicit; const ctx_r37 = i0.ɵɵnextContext(2); $event.stopPropagation(); return ctx_r37.setOpenPopupMenu(appDetail_r27.appVersionId); });
186
+ i0.ɵɵlistener("click", function AppListComponent_ng_container_55_div_2_div_4_Template_button_click_1_listener($event) { i0.ɵɵrestoreView(_r43); const appDetail_r27 = i0.ɵɵnextContext().$implicit; const ctx_r41 = i0.ɵɵnextContext(2); $event.stopPropagation(); return ctx_r41.setOpenPopupMenu(appDetail_r27.appVersionId); });
175
187
  i0.ɵɵelement(2, "mat-icon", 79);
176
188
  i0.ɵɵelementEnd();
177
189
  i0.ɵɵelementStart(3, "mat-menu", 80, 81);
178
190
  i0.ɵɵelementStart(5, "div", 82);
179
191
  i0.ɵɵelementStart(6, "button", 83);
180
- i0.ɵɵlistener("click", function AppListComponent_ng_container_55_div_2_div_4_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r39); const ctx_r40 = i0.ɵɵnextContext(3); return ctx_r40.openQRCodeDialog(); });
192
+ i0.ɵɵlistener("click", function AppListComponent_ng_container_55_div_2_div_4_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r43); const ctx_r44 = i0.ɵɵnextContext(3); return ctx_r44.openQRCodeDialog(); });
181
193
  i0.ɵɵelement(7, "img", 84);
182
194
  i0.ɵɵelementStart(8, "span");
183
195
  i0.ɵɵtext(9, "Use On Mobile");
184
196
  i0.ɵɵelementEnd();
185
197
  i0.ɵɵelementEnd();
186
198
  i0.ɵɵelementEnd();
187
- i0.ɵɵelementStart(10, "div", 82);
188
- i0.ɵɵelementStart(11, "button", 83);
189
- i0.ɵɵlistener("click", function AppListComponent_ng_container_55_div_2_div_4_Template_button_click_11_listener() { i0.ɵɵrestoreView(_r39); const appDetail_r27 = i0.ɵɵnextContext().$implicit; const ctx_r41 = i0.ɵɵnextContext(2); return ctx_r41.openDeleteAppDialog(appDetail_r27.appVersionId); });
190
- i0.ɵɵelement(12, "img", 85);
191
- i0.ɵɵelementStart(13, "span");
192
- i0.ɵɵtext(14, "Delete");
193
- i0.ɵɵelementEnd();
194
- i0.ɵɵelementEnd();
195
- i0.ɵɵelementEnd();
199
+ i0.ɵɵtemplate(10, AppListComponent_ng_container_55_div_2_div_4_div_10_Template, 5, 0, "div", 85);
196
200
  i0.ɵɵelementEnd();
197
201
  i0.ɵɵelementEnd();
198
202
  } if (rf & 2) {
199
203
  const _r36 = i0.ɵɵreference(4);
200
204
  const appDetail_r27 = i0.ɵɵnextContext().$implicit;
201
205
  const ctx_r30 = i0.ɵɵnextContext(2);
202
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(4, _c0, ctx_r30.openPopupMenu === appDetail_r27.appVersionId));
206
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(5, _c0, ctx_r30.openPopupMenu === appDetail_r27.appVersionId));
203
207
  i0.ɵɵadvance(1);
204
208
  i0.ɵɵproperty("disableRipple", true)("matMenuTriggerFor", _r36);
205
209
  i0.ɵɵadvance(1);
206
210
  i0.ɵɵproperty("svgIcon", "heroicons_solid:dots-vertical");
211
+ i0.ɵɵadvance(8);
212
+ i0.ɵɵproperty("ngIf", ctx_r30.hasAppBuilderPermission);
207
213
  } }
208
214
  function AppListComponent_ng_container_55_div_2_a_17_Template(rf, ctx) { if (rf & 1) {
209
- i0.ɵɵelementStart(0, "a", 86);
215
+ i0.ɵɵelementStart(0, "a", 87);
210
216
  i0.ɵɵtext(1, "Customize");
211
217
  i0.ɵɵelementEnd();
212
218
  } }
213
219
  const _c1 = function (a0) { return { "background": a0 }; };
214
220
  function AppListComponent_ng_container_55_div_2_Template(rf, ctx) { if (rf & 1) {
215
- const _r45 = i0.ɵɵgetCurrentView();
221
+ const _r47 = i0.ɵɵgetCurrentView();
216
222
  i0.ɵɵelementStart(0, "div", 58);
217
223
  i0.ɵɵelementStart(1, "fuse-card", 59);
218
- i0.ɵɵlistener("click", function AppListComponent_ng_container_55_div_2_Template_fuse_card_click_1_listener() { const restoredCtx = i0.ɵɵrestoreView(_r45); const appDetail_r27 = restoredCtx.$implicit; const ctx_r44 = i0.ɵɵnextContext(2); return ctx_r44.openApp(appDetail_r27.appVersionId); });
224
+ i0.ɵɵlistener("click", function AppListComponent_ng_container_55_div_2_Template_fuse_card_click_1_listener() { const restoredCtx = i0.ɵɵrestoreView(_r47); const appDetail_r27 = restoredCtx.$implicit; const ctx_r46 = i0.ɵɵnextContext(2); return ctx_r46.openApp(appDetail_r27.appVersionId); });
219
225
  i0.ɵɵtemplate(2, AppListComponent_ng_container_55_div_2_div_2_Template, 2, 3, "div", 60);
220
226
  i0.ɵɵelementStart(3, "div", 61);
221
- i0.ɵɵtemplate(4, AppListComponent_ng_container_55_div_2_div_4_Template, 15, 6, "div", 62);
227
+ i0.ɵɵtemplate(4, AppListComponent_ng_container_55_div_2_div_4_Template, 11, 7, "div", 62);
222
228
  i0.ɵɵelementEnd();
223
229
  i0.ɵɵelementStart(5, "div", 63);
224
230
  i0.ɵɵelementStart(6, "div", 64);
@@ -279,8 +285,8 @@ function AppListComponent_ng_container_55_Template(rf, ctx) { if (rf & 1) {
279
285
  i0.ɵɵproperty("ngForOf", ctx_r13.appList);
280
286
  } }
281
287
  function AppListComponent_ng_template_56_Template(rf, ctx) { if (rf & 1) {
282
- i0.ɵɵelementStart(0, "div", 87, 41);
283
- i0.ɵɵelementStart(2, "div", 88);
288
+ i0.ɵɵelementStart(0, "div", 88, 41);
289
+ i0.ɵɵelementStart(2, "div", 89);
284
290
  i0.ɵɵelementStart(3, "h2");
285
291
  i0.ɵɵtext(4, "No app created yet!");
286
292
  i0.ɵɵelementEnd();
@@ -858,45 +864,50 @@ export class AppListComponent {
858
864
  });
859
865
  }
860
866
  deleteApp(appVersionId) {
861
- this._flattenService.getFlattenData(appVersionId)
862
- .pipe(takeUntil(this._unsubscribeAll), switchMap((flatten) => {
863
- if (flatten && flatten.appId !== undefined && flatten.version !== undefined) {
864
- const appId = flatten.appId.toString();
865
- const appVersion = flatten.version.toString();
866
- const AppV = appVersionId;
867
- console.log("App version Id:" + appVersionId);
868
- this.data = {
869
- "App Id": flatten.appId,
870
- "App Name": flatten.appName,
871
- "App version": flatten.version
872
- };
873
- console.log('Fetched app details from flatten:', { appId, appVersion });
874
- return this._mpAppListService.deleteApp(appId, appVersion.toString())
875
- .pipe(catchError((error) => {
876
- console.log('Error occurred while deleting app:', error);
877
- // Handle the error, e.g., display a message or perform additional actions
878
- return throwError(error);
879
- }));
880
- }
881
- else {
882
- console.log('Error: flatten object or its properties are undefined.');
883
- // Handle the case where flatten or its properties are undefined
884
- return throwError('Flatten object or its properties are undefined');
885
- }
886
- }))
887
- .subscribe((response) => {
888
- // Handle the success response here if needed
889
- console.log('Delete app success:', response);
890
- // Remove the deleted app from the appList
891
- this.appList = this.appList.filter(app => app.appVersionId !== appVersionId);
892
- this._axoSnackBar.openSnackBar('App deleted successfully', AxoSnackBarType.success);
893
- this._loggingService.trackEvent('App deleted', this.data);
894
- // Manually trigger change detection to update the view
895
- this._changeDetectorRef.detectChanges();
896
- }, (error) => {
897
- // Handle the error here if needed
898
- console.error('Delete app error:', error);
899
- });
867
+ if (this.hasAppBuilderPermission) {
868
+ this._flattenService.getFlattenData(appVersionId)
869
+ .pipe(takeUntil(this._unsubscribeAll), switchMap((flatten) => {
870
+ if (flatten && flatten.appId !== undefined && flatten.version !== undefined) {
871
+ const appId = flatten.appId.toString();
872
+ const appVersion = flatten.version.toString();
873
+ const AppV = appVersionId;
874
+ console.log("App version Id:" + appVersionId);
875
+ this.data = {
876
+ "App Id": flatten.appId,
877
+ "App Name": flatten.appName,
878
+ "App version": flatten.version
879
+ };
880
+ console.log('Fetched app details from flatten:', { appId, appVersion });
881
+ return this._mpAppListService.deleteApp(appId, appVersion.toString())
882
+ .pipe(catchError((error) => {
883
+ console.log('Error occurred while deleting app:', error);
884
+ // Handle the error, e.g., display a message or perform additional actions
885
+ return throwError(error);
886
+ }));
887
+ }
888
+ else {
889
+ console.log('Error: flatten object or its properties are undefined.');
890
+ // Handle the case where flatten or its properties are undefined
891
+ return throwError('Flatten object or its properties are undefined');
892
+ }
893
+ }))
894
+ .subscribe((response) => {
895
+ // Handle the success response here if needed
896
+ console.log('Delete app success:', response);
897
+ // Remove the deleted app from the appList
898
+ this.appList = this.appList.filter(app => app.appVersionId !== appVersionId);
899
+ this._axoSnackBar.openSnackBar('App deleted successfully', AxoSnackBarType.success);
900
+ this._loggingService.trackEvent('App deleted', this.data);
901
+ // Manually trigger change detection to update the view
902
+ this._changeDetectorRef.detectChanges();
903
+ }, (error) => {
904
+ // Handle the error here if needed
905
+ console.error('Delete app error:', error);
906
+ });
907
+ }
908
+ else {
909
+ this._axoSnackBar.openSnackBar('Permission Denied', AxoSnackBarType.error);
910
+ }
900
911
  }
901
912
  openLoadingDialogWithMessage(message) {
902
913
  const dialogRef = this.dialog.open(LoadingAppinstallComponent, {
@@ -1011,7 +1022,7 @@ export class AppListComponent {
1011
1022
  const restrictedUrls = [
1012
1023
  'https://andromeda-container-qa.axonator.com/apps',
1013
1024
  'https://localhost:4201/apps',
1014
- 'https://web.axonator.com'
1025
+ 'https://web.axonator.com/apps'
1015
1026
  ];
1016
1027
  return restrictedUrls.includes(window.location.href);
1017
1028
  }
@@ -1022,7 +1033,7 @@ AppListComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AppListCom
1022
1033
  provide: MAT_SELECT_CONFIG,
1023
1034
  useValue: { overlayPanelClass: 'organization-list-overlay-panel' },
1024
1035
  },
1025
- ]), i0.ɵɵNgOnChangesFeature], decls: 59, vars: 18, consts: [[1, "flex", "flex-col", "flex-auto", "h-full-appList", "my-app-list", "overflow-hidden", "page-background", "axo-font"], [1, "sticky", "top-0", "bg-white"], [1, "app-list-main-header", "relative", "flex", "flex-0", "h-12", "z-49", "box-border", "px-6"], [1, "flex", "flex-auto", "items-center", "min-w-0"], ["src", "assets/images/logo/axo-logo.svg", "alt", "Logo image", 1, "w-36", "h-7"], [1, "beta"], [1, "flex", "flex-auto", "justify-end", "items-center", "min-w-0", "gap-3"], ["mat-icon-button", "", 1, "mt-1.5"], ["svgIcon", "axo_search"], ["matTooltip", "Notification", "svgIcon", "axo_notifiction-2", 1, "cursor-pointer", "axo_notifiction-2"], ["mat-icon-button", "", 3, "matMenuTriggerFor", "click"], [4, "ngIf", "ngIfElse"], ["isEmptyImage", ""], ["backdropClass", "app-list-mat-menu-panel-class"], ["userProfile09Menu", "matMenu"], ["mat-menu-item", "", 1, "h-full", "user-info"], ["isEmptyProfileImage", ""], [1, "inline-grid", "py-3"], [1, "user-emailid"], [1, "user-name-title"], [1, "my-0"], ["mat-menu-item", "", "class", "user-logout-btn organization-btn", 3, "click", 4, "ngIf"], ["mat-menu-item", "", 1, "user-logout-btn", "billing-btn", 3, "click"], [1, "logout-label"], ["mat-menu-item", "", 1, "user-logout-btn", 3, "click"], [1, "logout-lable"], [1, "app-list-main-subheader"], [1, "app-list-header", "relative", "flex", "flex-0", "items-center", "z-49", "box-border", "px-4", "sm:px-6"], [1, "flex", "flex-auto", "items-center", "min-w-0", "gap-3"], [1, "flex", "items-center", "hover:bg-gray-100", "p-2", "rounded-lg"], ["appearance", "standard", 1, "sm:w-full", "flex", "items-center", "organization-mat-select"], ["placeholder", "select Organization", 1, "flex", "items-center", 3, "ngModel", "ngModelChange"], ["class", "flex items-center", 4, "ngIf"], [1, "switch", "flex", "p-2", "gap-2", "pl-4", "items-center", "cursor-pointer"], ["svgIcon", "axo_switch", 1, "switch-icon", "h-8", "w-8"], [1, "switch-span"], ["class", "organizationList", 3, "value", "selected", "click", 4, "ngFor", "ngForOf"], [1, "sm:text-lg", "text-xs", "font-medium", "main-title"], ["class", "primary-btn axo-font w-28", 3, "click", 4, "ngIf"], [1, "relative", "flex-auto", "app-list", "h-full-appList", "px-4", "py-5", "sm:py-8", "overflow-auto"], ["class", "permission-overlay", 4, "ngIf"], ["notEmptyAppList", ""], [3, "showAddBtn", "showUpgradeBtn"], ["onError", "this.src='assets/icons/organization.svg'", "alt", "avtar", 1, "organizationIcon", 3, "src"], [1, "uppercase", "font-medium", "cursor-pointer", "text-sm", "h-8", "w-8", "flex", "justify-center", "items-center", "ml-2", "bg-gray-300", "rounded-full"], ["alt", "", "onError", "this.src='assets/icons/organization.svg'", 1, "organizationIconprofile", 3, "src"], [1, "userEmptyIcon"], ["mat-menu-item", "", 1, "user-logout-btn", "organization-btn", 3, "click"], [1, "flex", "items-center"], ["alt", "", "onError", "this.src='assets/icons/organization.svg'", 1, "organizationIcon", 3, "src"], [1, "org-name", 3, "matTooltip"], [1, "organizationList", 3, "value", "selected", "click"], [1, "org-icon-span"], [1, "sm:text-lg", "text-xs", "font-medium", "org-name"], [1, "primary-btn", "axo-font", "w-28", 3, "click"], [1, "permission-overlay"], [1, "app-grid", "items-start", "card-body", "w-full"], ["class", "card-outer-div", 4, "ngFor", "ngForOf"], [1, "card-outer-div"], [1, "fuse-card-app", "flex", "flex-col", "gap-2", "filter-list", 3, "ngStyle", "click"], ["class", "flex justify-center items-center border-0 rounded-full qr-icon bg-white absolute top-4 right-4", "style", "padding: .3rem;", 3, "ngClass", "click", 4, "ngIf"], [1, "flex", "items-center", "card", "justify-between", 2, "margin-left", "-20px"], ["class", "dots-vertical-app", 3, "ngClass", 4, "ngIf"], [1, "card-inner-div"], [1, "flex", "items-center", "justify-center", "dashboard-icon"], ["onError", "this.src='https://static.axonator.com/static/default_icons/app.png'", "alt", "Logo image", 3, "src"], [1, "card-content"], [1, "app-info"], [1, "block", "app-title-wrapper"], [1, "app_title", "font-medium", "leading-tight", "axo-font", 3, "matTooltip"], [1, "app_version", "w-full", "leading-tight", "text-xs"], [1, "cust-open", "flex", "justify-end", "w-full"], [1, "flex", "flex-row", "items-center", "justify-end", "space-x-2"], ["routerLink", "", "class", "customize text-left leading-tight text-xs", 4, "ngIf"], [1, "open-button"], [1, "flex", "justify-center", "items-center", "border-0", "rounded-full", "qr-icon", "bg-white", "absolute", "top-4", "right-4", 2, "padding", ".3rem", 3, "ngClass", "click"], ["matTooltip", "Disable QR", "src", "assets/icons/axo/sculptor/axo_qrcode_new.svg", "alt", "", 1, "h-3", "w-3", "object-cover"], [1, "dots-vertical-app", 3, "ngClass"], ["mat-icon-button", "", 3, "disableRipple", "matMenuTriggerFor", "click"], [2, "color", "#FFFFFF", 3, "svgIcon"], [1, "customize"], ["contextMenu", "matMenu"], ["id", "report-menu"], ["mat-menu-item", "", 1, "py-0", "pl-4", "pr-6", 3, "click"], ["src", "assets/icons/options-mobile.svg", "alt", "", 1, "h-6", "w-6", "inline-block", "mr-2"], ["src", "assets/icons/options-delete.svg", "alt", "", 1, "h-6", "w-6", "inline-block", "mr-2"], ["routerLink", "", 1, "customize", "text-left", "leading-tight", "text-xs"], [1, "flex", "flex-col", "flex-auto", "min-w-0", "relative", "items-center"], [1, "container", "flex", "flex-col", "my-auto", "items-center", "justify-center", "no-app-created"]], template: function AppListComponent_Template(rf, ctx) { if (rf & 1) {
1036
+ ]), i0.ɵɵNgOnChangesFeature], decls: 59, vars: 18, consts: [[1, "flex", "flex-col", "flex-auto", "h-full-appList", "my-app-list", "overflow-hidden", "page-background", "axo-font"], [1, "sticky", "top-0", "bg-white"], [1, "app-list-main-header", "relative", "flex", "flex-0", "h-12", "z-49", "box-border", "px-6"], [1, "flex", "flex-auto", "items-center", "min-w-0"], ["src", "assets/images/logo/axo-logo.svg", "alt", "Logo image", 1, "w-36", "h-7"], [1, "beta"], [1, "flex", "flex-auto", "justify-end", "items-center", "min-w-0", "gap-3"], ["mat-icon-button", "", 1, "mt-1.5"], ["svgIcon", "axo_search"], ["matTooltip", "Notification", "svgIcon", "axo_notifiction-2", 1, "cursor-pointer", "axo_notifiction-2"], ["mat-icon-button", "", 3, "matMenuTriggerFor", "click"], [4, "ngIf", "ngIfElse"], ["isEmptyImage", ""], ["backdropClass", "app-list-mat-menu-panel-class"], ["userProfile09Menu", "matMenu"], ["mat-menu-item", "", 1, "h-full", "user-info"], ["isEmptyProfileImage", ""], [1, "inline-grid", "py-3"], [1, "user-emailid"], [1, "user-name-title"], [1, "my-0"], ["mat-menu-item", "", "class", "user-logout-btn organization-btn", 3, "click", 4, "ngIf"], ["mat-menu-item", "", 1, "user-logout-btn", "billing-btn", 3, "click"], [1, "logout-label"], ["mat-menu-item", "", 1, "user-logout-btn", 3, "click"], [1, "logout-lable"], [1, "app-list-main-subheader"], [1, "app-list-header", "relative", "flex", "flex-0", "items-center", "z-49", "box-border", "px-4", "sm:px-6"], [1, "flex", "flex-auto", "items-center", "min-w-0", "gap-3"], [1, "flex", "items-center", "hover:bg-gray-100", "p-2", "rounded-lg"], ["appearance", "standard", 1, "sm:w-full", "flex", "items-center", "organization-mat-select"], ["placeholder", "select Organization", 1, "flex", "items-center", 3, "ngModel", "ngModelChange"], ["class", "flex items-center", 4, "ngIf"], [1, "switch", "flex", "p-2", "gap-2", "pl-4", "items-center", "cursor-pointer"], ["svgIcon", "axo_switch", 1, "switch-icon", "h-8", "w-8"], [1, "switch-span"], ["class", "organizationList", 3, "value", "selected", "click", 4, "ngFor", "ngForOf"], [1, "sm:text-lg", "text-xs", "font-medium", "main-title"], ["class", "primary-btn axo-font w-28", 3, "click", 4, "ngIf"], [1, "relative", "flex-auto", "app-list", "h-full-appList", "px-4", "py-5", "sm:py-8", "overflow-auto"], ["class", "permission-overlay", 4, "ngIf"], ["notEmptyAppList", ""], [3, "showAddBtn", "showUpgradeBtn"], ["onError", "this.src='assets/icons/organization.svg'", "alt", "avtar", 1, "organizationIcon", 3, "src"], [1, "uppercase", "font-medium", "cursor-pointer", "text-sm", "h-8", "w-8", "flex", "justify-center", "items-center", "ml-2", "bg-gray-300", "rounded-full"], ["alt", "", "onError", "this.src='assets/icons/organization.svg'", 1, "organizationIconprofile", 3, "src"], [1, "userEmptyIcon"], ["mat-menu-item", "", 1, "user-logout-btn", "organization-btn", 3, "click"], [1, "flex", "items-center"], ["alt", "", "onError", "this.src='assets/icons/organization.svg'", 1, "organizationIcon", 3, "src"], [1, "org-name", 3, "matTooltip"], [1, "organizationList", 3, "value", "selected", "click"], [1, "org-icon-span"], [1, "sm:text-lg", "text-xs", "font-medium", "org-name"], [1, "primary-btn", "axo-font", "w-28", 3, "click"], [1, "permission-overlay"], [1, "app-grid", "items-start", "card-body", "w-full"], ["class", "card-outer-div", 4, "ngFor", "ngForOf"], [1, "card-outer-div"], [1, "fuse-card-app", "flex", "flex-col", "gap-2", "filter-list", 3, "ngStyle", "click"], ["class", "flex justify-center items-center border-0 rounded-full qr-icon bg-white absolute top-4 right-4", "style", "padding: .3rem;", 3, "ngClass", "click", 4, "ngIf"], [1, "flex", "items-center", "card", "justify-between", 2, "margin-left", "-20px"], ["class", "dots-vertical-app", 3, "ngClass", 4, "ngIf"], [1, "card-inner-div"], [1, "flex", "items-center", "justify-center", "dashboard-icon"], ["onError", "this.src='https://static.axonator.com/static/default_icons/app.png'", "alt", "Logo image", 3, "src"], [1, "card-content"], [1, "app-info"], [1, "block", "app-title-wrapper"], [1, "app_title", "font-medium", "leading-tight", "axo-font", 3, "matTooltip"], [1, "app_version", "w-full", "leading-tight", "text-xs"], [1, "cust-open", "flex", "justify-end", "w-full"], [1, "flex", "flex-row", "items-center", "justify-end", "space-x-2"], ["routerLink", "", "class", "customize text-left leading-tight text-xs", 4, "ngIf"], [1, "open-button"], [1, "flex", "justify-center", "items-center", "border-0", "rounded-full", "qr-icon", "bg-white", "absolute", "top-4", "right-4", 2, "padding", ".3rem", 3, "ngClass", "click"], ["matTooltip", "Disable QR", "src", "assets/icons/axo/sculptor/axo_qrcode_new.svg", "alt", "", 1, "h-3", "w-3", "object-cover"], [1, "dots-vertical-app", 3, "ngClass"], ["mat-icon-button", "", 3, "disableRipple", "matMenuTriggerFor", "click"], [2, "color", "#FFFFFF", 3, "svgIcon"], [1, "customize"], ["contextMenu", "matMenu"], ["id", "report-menu"], ["mat-menu-item", "", 1, "py-0", "pl-4", "pr-6", 3, "click"], ["src", "assets/icons/options-mobile.svg", "alt", "", 1, "h-6", "w-6", "inline-block", "mr-2"], ["id", "report-menu", 4, "ngIf"], ["src", "assets/icons/options-delete.svg", "alt", "", 1, "h-6", "w-6", "inline-block", "mr-2"], ["routerLink", "", 1, "customize", "text-left", "leading-tight", "text-xs"], [1, "flex", "flex-col", "flex-auto", "min-w-0", "relative", "items-center"], [1, "container", "flex", "flex-col", "my-auto", "items-center", "justify-center", "no-app-created"]], template: function AppListComponent_Template(rf, ctx) { if (rf & 1) {
1026
1037
  i0.ɵɵelementStart(0, "div", 0);
1027
1038
  i0.ɵɵelementStart(1, "div", 1);
1028
1039
  i0.ɵɵelementStart(2, "div", 2);
@@ -1158,7 +1169,7 @@ AppListComponent.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: AppList
1158
1169
  provide: MAT_SELECT_CONFIG,
1159
1170
  useValue: { overlayPanelClass: 'organization-list-overlay-panel' },
1160
1171
  },
1161
- ], template: "<div class=\"flex flex-col flex-auto h-full-appList my-app-list overflow-hidden page-background axo-font\">\n <!-- Header -->\n <div class=\"sticky top-0 bg-white\">\n <div class=\"app-list-main-header relative flex flex-0 h-12 z-49 box-border px-6\">\n <div class=\"flex flex-auto items-center min-w-0\"> <img class=\"w-36 h-7\" src=\"assets/images/logo/axo-logo.svg\" alt=\"Logo image\"> <span class=\"beta\">Beta</span> </div>\n <div class=\"flex flex-auto justify-end items-center min-w-0 gap-3\">\n <button mat-icon-button class=\"mt-1.5\">\n <mat-icon svgIcon=\"axo_search\"></mat-icon>\n </button>\n <button mat-icon-button class=\"mt-1.5\">\n <mat-icon class=\"cursor-pointer axo_notifiction-2\" matTooltip=\"Notification\" svgIcon=\"axo_notifiction-2\"></mat-icon>\n </button>\n <!-- once we fix identity server API, this code will be needed again\n <button (click)=\"$event.stopPropagation();\" mat-icon-button [matMenuTriggerFor]=\"userProfile09Menu\">\n <ng-container *ngIf=\"userImage; else isEmptyImage\">\n <img [src]=\"baseUrl + 'images/'+ userImage\" onError =\"this.src='assets/icons/organization.png'\" class=\"inline object-cover w-7 h-7 mr-2 organizationIcon\" alt=\"avtar\">\n </ng-container>\n <ng-template #isEmptyImage>\n\n <span class=\"empty-app-icon\">{{ (user['FirstName']).charAt(0) + \"\" + (user['LastName']).charAt(0) | uppercase }}</span>\n </ng-template>\n </button>\n <mat-menu #userProfile09Menu=\"matMenu\">\n <button mat-menu-item class=\"h-full\">\n <ng-container *ngIf=\"userImage; else isEmptyProfileImage\">\n <img class=\"organizationIcon\" [src]=\"baseUrl + 'images/'+ userImage\" alt=\"\" onError =\"this.src='assets/icons/organization.png'\"/>\n </ng-container>\n <ng-template #isEmptyProfileImage>\n <span class=\"userEmptyIcon\">{{ (user['FirstName']).charAt(0) + \"\" + (user['LastName']).charAt(0) | uppercase }}</span>\n </ng-template>\n <div class=\"inline-grid\">\n <span class=\"user-name-title \">{{ userEmail }}</span>\n <span class=\"user-emailid \">{{ userName }}</span>\n </div>\n </button>\n <button mat-menu-item class=\"organization-section\" (click)=\"signOut()\">\n <span class=\"logout-title\">Logout</span>\n </button>\n </mat-menu> -->\n\n <button (click)=\"$event.stopPropagation();\" mat-icon-button [matMenuTriggerFor]=\"userProfile09Menu\">\n <ng-container *ngIf=\"userImage; else isEmptyImage\">\n <img [src]=\"baseUrl + userImage\" onError =\"this.src='assets/icons/organization.svg'\" class=\"organizationIcon\" alt=\"avtar\">\n </ng-container>\n <ng-template #isEmptyImage>\n\n <span class=\"uppercase font-medium cursor-pointer text-sm h-8 w-8 flex justify-center items-center ml-2 bg-gray-300 rounded-full\">{{ (user['fname']).charAt(0) + \"\" + (user['lname']).charAt(0) | uppercase }}</span>\n </ng-template>\n </button>\n <mat-menu #userProfile09Menu=\"matMenu\" backdropClass=\"app-list-mat-menu-panel-class\">\n <button mat-menu-item class=\"h-full user-info\">\n <ng-container *ngIf=\"userImage; else isEmptyProfileImage\">\n <img class=\"organizationIconprofile\" [src]=\"baseUrl + userImage\" alt=\"\" onError =\"this.src='assets/icons/organization.svg'\"/>\n </ng-container>\n <ng-template #isEmptyProfileImage>\n <span class=\"userEmptyIcon\">{{ (user['fname']).charAt(0) + \"\" + (user['lname']).charAt(0) | uppercase }}</span>\n </ng-template>\n <div class=\"inline-grid py-3\">\n <span class=\"user-emailid\">{{ userEmail }}</span>\n <span class=\"user-name-title\">{{ userName }}</span>\n </div>\n </button>\n <mat-divider class=\"my-0\"></mat-divider>\n <button mat-menu-item class=\"user-logout-btn organization-btn\" (click)=\"navigatetoOrganiation()\" *ngIf=\"hasOrgUserAccess\">\n <!-- <mat-icon [svgIcon]=\"'heroicons_outline:user-group'\"></mat-icon> -->\n <span class=\"logout-label\">Organization Users</span>\n </button>\n <button mat-menu-item class=\"user-logout-btn organization-btn\" (click)=\"navigatetoOrganiationSettings()\" *ngIf=\"hasOrgUserAccess\">\n <!-- <mat-icon [svgIcon]=\"'heroicons_outline:user-group'\"></mat-icon> -->\n <span class=\"logout-label\">Organization Settings</span>\n </button>\n <button mat-menu-item class=\"user-logout-btn billing-btn\" (click)=\"navigateToBilling()\">\n <!-- <mat-icon [svgIcon]=\"'heroicons_outline:credit-card'\"></mat-icon> -->\n <span class=\"logout-label\">Billing</span>\n </button>\n <mat-divider class=\"my-0\"></mat-divider>\n <button mat-menu-item class=\"user-logout-btn\" (click)=\"signOut()\">\n <!-- <mat-icon [svgIcon]=\"'heroicons_outline:logout'\"></mat-icon> -->\n <span class=\"logout-lable\">Logout</span>\n </button>\n\n </mat-menu>\n\n\n\n </div>\n </div>\n <!-- Header -->\n <div class=\"app-list-main-subheader\">\n <div class=\"app-list-header relative flex flex-0 items-center z-49 box-border px-4 sm:px-6\">\n <div class=\"flex flex-auto items-center min-w-0 gap-3\">\n <div class=\"flex items-center hover:bg-gray-100 p-2 rounded-lg\">\n <mat-form-field appearance=\"standard\" class=\"sm:w-full flex items-center organization-mat-select\">\n <mat-select [(ngModel)]=\"selectedOrganization\" placeholder=\"select Organization\" class=\"flex items-center\">\n <mat-select-trigger class=\"flex items-center\" *ngIf=\"selectedOrganization\">\n <span>\n <img class=\"organizationIcon\" alt=\"\" [src]=\"(selectedOrganization.icon.indexOf('https://') !== -1) ? selectedOrganization.icon : baseUrl + selectedOrganization.icon\" onError =\"this.src='assets/icons/organization.svg'\">\n </span>\n <span class=\"org-name\" [matTooltip]=\"selectedOrganization.name\"> {{ selectedOrganization.name }}</span>\n <!-- Custom arrow icon -->\n <!-- <mat-icon class=\"dropdown-arrow\" svgIcon=\"dropdown-arrow\"></mat-icon> -->\n </mat-select-trigger>\n <div class=\"switch flex p-2 gap-2 pl-4 items-center cursor-pointer \">\n <mat-icon svgIcon=\"axo_switch\" class=\"switch-icon h-8 w-8\"></mat-icon>\n <span class=\"switch-span\">Switch Organization</span>\n </div>\n <mat-option class=\"organizationList\"\n *ngFor=\"let organization of organizationList; let organizationIndex = index\"\n [value]=\"organization\"\n (click)=\"switchAccount(organization.id)\"\n [selected]=\"selectedOrganization.id === organization.id\"\n >\n <div class=\"org-icon-span\">\n <img class=\"organizationIcon\" alt=\"\" [src]=\"(organization.icon.indexOf('https://') !== -1) ? organization.icon : baseUrl + organization.icon\" onError =\"this.src='assets/icons/organization.svg'\">\n </div>\n <div class=\"sm:text-lg text-xs font-medium org-name\"> {{ organization.name}}</div>\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <span class=\"sm:text-lg text-xs font-medium main-title\">My Apps</span>\n </div>\n <div>\n <button *ngIf=\"hasAppBuilderPermission && !isRestrictedUrl()\" class=\"primary-btn axo-font w-28\" (click)=\"openCreateAppDialog()\">\n <span>Create App</span>\n </button>\n </div>\n \n </div>\n\n </div>\n </div>\n\n <!-- App List with Overlay -->\n <div class=\"relative flex-auto app-list h-full-appList px-4 py-5 sm:py-8 overflow-auto\">\n <!-- Overlay for web portal access -->\n <div *ngIf=\"showWebPortalAccessOverlay\" class=\"permission-overlay\">\n You don't have permission to access Web Portal.\n </div>\n\n <ng-container *ngIf=\"appList.length; else notEmptyAppList\">\n <div class=\"app-grid items-start card-body w-full\">\n <div class=\"card-outer-div\" *ngFor=\"let appDetail of appList; let i = index\">\n <fuse-card class=\"fuse-card-app flex flex-col gap-2 filter-list\" [ngStyle]=\"{'background': appDetail.gradient}\" (click)=\"openApp(appDetail.appVersionId)\">\n <div *ngIf=\"appDetail.qr_status === true && showQRIcon\" (click)=\"disableQRDialog(appDetail.appVersionId, i); $event.stopPropagation();\" class=\"flex justify-center items-center border-0 rounded-full qr-icon bg-white absolute top-4 right-4\" [ngClass]=\"{'appHover': openPopupMenu === appDetail.appVersionId}\" style=\"padding: .3rem;\">\n <img matTooltip=\"Disable QR\" src=\"assets/icons/axo/sculptor/axo_qrcode_new.svg\"\n alt=\"\"\n class=\"h-3 w-3 object-cover\">\n </div>\n <div class=\"flex items-center card justify-between\" style=\"margin-left: -20px;\">\n <div class=\"dots-vertical-app\" *ngIf=\"showDotsOption\" [ngClass]=\"{'appHover': openPopupMenu === appDetail.appVersionId}\">\n <button (click)=\"$event.stopPropagation();setOpenPopupMenu(appDetail.appVersionId)\" mat-icon-button [disableRipple]=\"true\"\n [matMenuTriggerFor]=\"contextMenu\">\n <mat-icon [svgIcon]=\"'heroicons_solid:dots-vertical'\" style=\"color: #FFFFFF;\"></mat-icon>\n </button>\n <mat-menu #contextMenu=\"matMenu\" class=\"customize\">\n <div id=\"report-menu\">\n <button mat-menu-item (click)=\"openQRCodeDialog()\" class=\"py-0 pl-4 pr-6\">\n <img src=\"assets/icons/options-mobile.svg\" alt=\"\" class=\"h-6 w-6 inline-block mr-2\">\n <span>Use On Mobile</span>\n </button>\n </div>\n <div id=\"report-menu\">\n <button mat-menu-item (click)=\"openDeleteAppDialog(appDetail.appVersionId)\" class=\"py-0 pl-4 pr-6\">\n <img src=\"assets/icons/options-delete.svg\" alt=\"\" class=\"h-6 w-6 inline-block mr-2\">\n <span>Delete</span>\n </button>\n </div>\n </mat-menu>\n </div>\n </div>\n <div class=\"card-inner-div\">\n <div class=\"flex items-center justify-center dashboard-icon\">\n <img [src]=\"baseUrl + appDetail.icon\" onError =\"this.src='https://static.axonator.com/static/default_icons/app.png'\" alt=\"Logo image\">\n </div>\n </div>\n <div class=\"card-content\">\n <div class=\"app-info\">\n <div class=\"block app-title-wrapper\">\n <div class=\"app_title font-medium leading-tight axo-font\" [matTooltip]=\"appDetail.name\">\n {{appDetail.name}}\n </div>\n </div>\n <div class=\"app_version w-full leading-tight text-xs\">\n v {{appDetail.version.split('.')[0]}}.{{padZero(appDetail.minorVersion)}}\n </div>\n </div>\n <div class=\"cust-open flex justify-end w-full\">\n <div class=\"flex flex-row items-center justify-end space-x-2\">\n <a *ngIf=\"showCustomize\" routerLink=\"\" class=\"customize text-left leading-tight text-xs\">Customize</a>\n <button class=\"open-button\">Open</button>\n </div>\n </div>\n </div>\n </fuse-card>\n </div>\n </div>\n </ng-container>\n \n </div>\n <ng-template #notEmptyAppList>\n <!-- if app list is empty -->\n <div class=\"flex flex-col flex-auto min-w-0 relative items-center\" #notEmptyAppList>\n <div class=\"container flex flex-col my-auto items-center justify-center no-app-created\">\n <h2>No app created yet!</h2>\n </div>\n </div>\n </ng-template>\n <app-common-footer [showAddBtn]=\"showAddBtn\" [showUpgradeBtn]=\"true\"></app-common-footer>\n <!-- <div class=\"fixed bottom-0 flex flex-0 items-center justify-start w-full h-14 px-4 md:px-6 z-49 bg-white app-list-footer\">\n <span class=\"font-medium text-secondary\">Axonator &copy; {{currentYear}}</span>\n </div> -->\n</div>\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Noto+Sans:wght@300&display=swap\";@import\"https://fonts.googleapis.com/css2?family=Noto+Sans:wght@400&display=swap\";@import\"https://fonts.googleapis.com/css2?family=Noto+Sans:wght@500&display=swap\";lib-app-list{width:100%}lib-app-list .app-list-main-header{border-bottom:1px solid #E9EFFA}lib-app-list .app-list-main-header .beta{border:1px solid #5136F4;color:#0b8df4;text-transform:capitalize;border-radius:3px;font-size:10px;padding:0 3px;line-height:150%;transform:translate(6px,-3px);height:fit-content;width:fit-content}lib-app-list .app-list-main-subheader{margin-top:1.5px}lib-app-list .app-list-main-subheader .app-list-header{width:100%;background:#FCFDFF;z-index:99;height:3.3rem;border-bottom:1px solid #E9EFFA}lib-app-list .app-list-main-subheader .main-title{color:#3b3f4a;font-family:Noto Sans,sans-serif}lib-app-list .app-list-main-subheader .organization-mat-select .mat-form-field-wrapper{display:flex;align-items:center}lib-app-list .app-list{height:calc(100vh - 9.5rem);background-color:#f2f7ff;overflow-y:scroll}lib-app-list .app-list:has(.permission-overlay){overflow:hidden!important}lib-app-list .app-list .contact-img{height:30px;width:30px;margin-left:-32px}lib-app-list .app-list .contact-names{padding-left:13px;padding-top:1px}lib-app-list .app-list mat-selection-list{position:relative;margin-top:-20.5px;width:100%;height:80vh;overflow-y:scroll}lib-app-list .app-list ::ng-deep .mat-pseudo-checkbox{display:none!important}lib-app-list .app-list .app-grid{display:grid;grid-gap:6px;gap:6px;grid-row-gap:30px;row-gap:30px}@media only screen and (min-width: 2080px){lib-app-list .app-list .app-grid{grid-template-columns:repeat(7,minmax(0,1fr))}}@media only screen and (max-width: 2080px){lib-app-list .app-list .app-grid{grid-template-columns:repeat(6,minmax(0,1fr))}}@media only screen and (max-width: 1800px){lib-app-list .app-list .app-grid{grid-template-columns:repeat(5,minmax(0,1fr))}}@media only screen and (max-width: 1500px){lib-app-list .app-list .app-grid{grid-template-columns:repeat(4,minmax(0,1fr))}}@media only screen and (max-width: 1200px){lib-app-list .app-list .app-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}@media only screen and (max-width: 900px){lib-app-list .app-list .app-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media only screen and (max-width: 600px){lib-app-list .app-list .app-grid{grid-template-columns:repeat(1,minmax(0,1fr))}}lib-app-list .app-list .app-grid .card-outer-div .fuse-card-app{flex:0 0 100%;width:280px;height:200px;padding-top:5px!important;border-radius:19px;opacity:1;display:flex!important;margin-left:10px;flex-wrap:wrap;gap:10px;cursor:pointer;align-items:flex-start;padding-left:18px;padding-right:15px;position:relative;box-shadow:none;justify-content:start!important}lib-app-list .app-list .app-grid .card-outer-div .fuse-card-app .mat-icon{color:#64748b}lib-app-list .app-list .app-grid .card-outer-div .fuse-card-app .card-inner-div{width:70px;height:70px}lib-app-list .app-list .app-grid .card-outer-div .fuse-card-app .card-content{display:flex;flex-direction:column;justify-content:space-between;width:100%;height:95px}lib-app-list .app-list .app-grid .card-outer-div .fuse-card-app .app-info{display:flex;flex-direction:column;align-items:flex-start}lib-app-list .app-list .app-grid .card-outer-div .fuse-card-app .app-title-wrapper{max-height:3.6rem;overflow:hidden;display:block}lib-app-list .app-list .app-grid .card-outer-div .fuse-card-app .app_title{font-weight:500;margin-top:1px;max-width:100%;font-family:Noto Sans,sans-serif;font-size:20px;display:-webkit-box!important;justify-content:left!important;white-space:wrap;-webkit-line-clamp:2;-webkit-box-orient:vertical;color:#fff}lib-app-list .app-list .app-grid .card-outer-div .fuse-card-app .app_version{color:#dedede;font-size:11px!important;margin-top:2px}lib-app-list .app-list .app-grid .card-outer-div .fuse-card-app .cust-open{display:flex;justify-content:flex-end}lib-app-list .app-list .app-grid .card-outer-div .fuse-card-app .cust-open .open-button{background-color:#fff;width:61px;height:29px;border-radius:20px;color:#464646;font-weight:700;font-family:Noto Sans,sans-serif;font-size:11px;padding:5px 10px;cursor:pointer}lib-app-list .app-list .app-grid .card-outer-div .fuse-card-app .cust-open .customize{color:#dedede;font-size:12px!important;font-weight:700}lib-app-list .app-list .app-grid .card-outer-div .fuse-card-app .cust-open .flex{margin-left:auto}lib-app-list .app-list .app-grid .card-outer-div .fuse-card-app .dots-vertical-app{position:absolute;left:2.4rem;top:.8rem;margin-left:205px}lib-app-list .app-list .app-grid .card-outer-div .fuse-card-app .card .mat-icon-button .mat-button-focus-overlay{width:20px;margin-top:0;background-color:#fff!important;margin-left:9px}@media screen and (max-width: 768px){lib-app-list .app-list .app-grid .card-outer-div .fuse-card-app{padding-top:0!important}}@media only screen and (max-width: 320px){lib-app-list .app-list .card-body{grid-template-columns:repeat(2,minmax(0,1fr))!important}}@media only screen and (max-width: 600px){lib-app-list .app-list{height:calc(100vh - 13.3rem)}}lib-app-list .mat-form-field-ripple{background-color:transparent!important}lib-app-list .mat-form-field-underline{background-color:transparent!important}lib-app-list .mat-form-field-wrapper{padding-bottom:0!important}lib-app-list .mat-form-field-wrapper .mat-form-field-flex{padding:0!important}lib-app-list .mat-form-field-wrapper .mat-form-field-flex .mat-form-field-infix{padding:0!important;border:0!important;width:auto}@media only screen and (max-width: 425px){lib-app-list .mat-form-field-wrapper .mat-form-field-flex .mat-form-field-infix{min-width:100px;max-width:180px}}lib-app-list .app-list-footer{border-top:1px solid #8080802e}lib-app-list .app-list-footer span{font-family:Poppins,sans-serif}lib-app-list .no-app-created{height:calc(100vh - 150px)}.empty-app-icon{padding:7px 9px;font-weight:500;background:#dce3ed;border-radius:50%;color:#000;cursor:pointer;font-family:Noto Sans,sans-serif}.userEmptyIcon{border-radius:100%!important;min-width:35px!important;min-height:35px!important;max-height:35px!important;line-height:35px;background:#e6a478;margin-right:14px;text-align:center;color:#fff;font-family:Noto Sans,sans-serif}.organizationIcon{border-radius:55%!important;width:1.75rem;height:1.75rem;margin-right:.5rem;display:inline;object-fit:cover}.organizationIconprofile{border-radius:55%!important;width:2.5rem;height:2.5rem;margin-right:.875rem}.mat-menu-panel{background-color:#fff;box-shadow:#3c40434d 0 1px 2px,#3c404326 0 1px 3px 1px}.mat-select-panel:not([class*=mat-elevation-z]){background-color:#fff;box-shadow:0 2px 4px -1px #0003,0 4px 5px #00000024,0 1px 10px #0000001f}.app-list-mat-menu-item:hover{color:#fff;background-color:#6554c0}.user-name-title{font-size:14px;margin-left:5px;margin-top:1px;font-weight:400;color:#2e2f35;height:22px;display:inline-block;font-family:Roboto,sans-serif}.user-emailid{font-size:13px;font-weight:400;color:#8d8d8d;margin-left:5px;display:block;word-wrap:break-word}.organization-section{border-top:1px solid #ddd!important}.logout-title{font-family:Noto Sans,sans-serif}.logout-title:hover{background:transparent;color:#333!important;background-color:transparent!important;background-image:none!important}.mat-menu-item{font-family:Noto Sans,sans-serif}.mat-menu-item:hover{background:#f5f5f5!important}.organizationList .mat-option-text{display:flex!important;align-items:center}.org-name{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:85%;font-weight:500;font-size:1rem;padding-right:.4rem;font-family:Noto Sans,sans-serif}@media only screen and (max-width: 425px){.org-name{font-size:12px}}.org-icon-span{display:flex;align-items:center}.organization-list-overlay-panel{background:#FCFDFF;transform:translate(-15px) translateY(45px)!important;width:14%}.app-list-mat-menu-panel-class+.cdk-overlay-connected-position-bounding-box .mat-menu-content{min-width:250px}.app-list-mat-menu-panel-class+.cdk-overlay-connected-position-bounding-box .mat-divider{border-top-color:#e2e8f0}.user-info .user-name-title,.user-info .user-emailid{line-height:initial;font-weight:400;height:22px;display:inline-block;font-family:Roboto,sans-serif;word-wrap:break-word}.user-info .user-emailid{font-size:14px;color:#2e2f35;font-family:Noto Sans,sans-serif}.user-info .user-name-title{font-size:13px;color:#8d8d8d;font-family:Noto Sans,sans-serif}.user-info:hover{background-color:#6c52ed!important}.user-info:hover .user-emailid,.user-info:hover .user-name-title{color:#fff!important}.user-logout-btn .mat-icon,.user-logout-btn .logout-lable{font-size:16px;font-weight:500}.user-logout-btn:hover .mat-icon,.user-logout-btn:hover .logout-lable{color:#fff!important}.user-logout-btn .mat-icon,.user-logout-btn .logout-label{font-size:16px;font-weight:500;font-family:Noto Sans,sans-serif}.user-logout-btn:hover{background-color:#6c52ed!important}.user-logout-btn:hover .mat-icon,.user-logout-btn:hover .logout-label{color:#fff!important}.card-outer-div .fuse-card-app .dots-vertical-app .mat-icon{width:1.125rem!important;opacity:1;min-height:1.125rem!important;max-height:1.125rem!important}.fuse-card-app .dots-vertical-app{display:none}.fuse-card-app:hover .dots-vertical-app{display:block}.appHover{display:block!important}.fuse-card-app:hover .qr-icon,.appHover{margin-right:1.3rem}.fuse-card-app:hover,.fuse-card-app:focus{box-shadow:0 3px 8px 1px #00000026!important;background-color:#fff!important}.axo_notifiction-2{height:30px!important;width:30px!important}.mat-tooltip{background-color:#333;color:#fff;border-radius:4px;padding:8px 10px}.switch-span{color:#929292;font-family:Noto Sans,sans-serif;font-size:16px;font-style:normal;font-weight:600;line-height:normal}.mat-select-arrow{display:inline-block}.dropdown-arrow{padding-top:8.5px!important;padding:8px}.permission-overlay{position:absolute;top:0;left:0;background:rgba(0,0,0,.75);display:flex;justify-content:center;align-items:center;height:100%;width:100%;z-index:999;color:#fff;font-size:18px}\n"] }]
1172
+ ], 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 *ngIf=\"hasAppBuilderPermission\" 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"] }]
1162
1173
  }], function () { return [{ type: i1.AuthService }, { type: i0.ChangeDetectorRef }, { type: i2.UserService }, { type: i3.CommonLibConfigurationService }, { type: i4.MyAppListService }, { type: i5.Router }, { type: i6.AxoSnackBarService }, { type: i7.MatDialog }, { type: i8.FlattenService }, { type: i9.HttpClient }, { type: i9.HttpClient }, { type: i10.CookieService }, { type: i5.ActivatedRoute }, { type: i5.Router }, { type: i11.LoggingService }, { type: i12.CommonService }, { type: i13.DataViewFiltersService }, { type: i14.SubscribedPlanName }, { type: i15.StripeService }]; }, { currentOrg: [{
1163
1174
  type: Input
1164
1175
  }], appList: [{
@@ -1190,4 +1201,4 @@ AppListComponent.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: AppList
1190
1201
  }], updateListEvent: [{
1191
1202
  type: Output
1192
1203
  }] }); })();
1193
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2F4LWNvbW1vbi11aS1saWIvc3JjL2xpYi9hcHAtbGlzdC9hcHAtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvYXgtY29tbW9uLXVpLWxpYi9zcmMvbGliL2FwcC1saXN0L2FwcC1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGlDQUFpQztBQUNqQyx1REFBdUQ7QUFDdkQsMEJBQTBCO0FBQzFCLHFFQUFxRTtBQUVyRSxPQUFPLEVBQUUsU0FBUyxFQUFVLGlCQUFpQixFQUFhLEtBQUssRUFBRSxNQUFNLEVBQWlCLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0osT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDN0QsT0FBTyxFQUFFLE1BQU0sRUFBcUIsTUFBTSxpQkFBaUIsQ0FBQztBQUM1RCxPQUFPLEVBQWMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2RCxPQUFPLEVBQUUsVUFBVSxFQUFPLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzdGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFHeEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDekQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JE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c0I7UUEwQjlHLGdCQUFrQztRQUFsQyxrREFBa0M7UUFDSyxlQUEwQjtRQUExQiwrQ0FBMEI7UUFhNUMsZUFBcUI7UUFBckIsOENBQXFCO1FBZ0JyRCxlQUFtRDtRQUFuRCw0RUFBbUQ7UUFhbEUsZUFBZ0M7UUFBaEMscURBQWdDO1FBSXZCLGVBQXNCO1FBQXRCLHlDQUFzQixrQkFBQTtRQW9FdEIsZUFBeUI7UUFBekIsMkNBQXlCLHdCQUFBOztzRUR2Sm5DLGdCQUFnQixXQUFoQixnQkFBZ0IsbUJBZGYsTUFBTTt1RkFjUCxnQkFBZ0I7Y0FmNUIsVUFBVTtlQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25COztjQUNBLFNBQVM7MkJBQ0UsY0FBYyxpQkFHVCxpQkFBaUIsQ0FBQyxJQUFJLGFBQzFCO29CQUNUO3dCQUNFLE9BQU8sRUFBRSxpQkFBaUI7d0JBQzFCLFFBQVEsRUFBRSxFQUFFLGlCQUFpQixFQUFFLGlDQUFpQyxFQUFFO3FCQUNuRTtpQkFDRjsra0JBR1EsVUFBVTtrQkFBbEIsS0FBSztZQUNHLE9BQU87a0JBQWYsS0FBSztZQUNHLE9BQU87a0JBQWYsS0FBSztZQUNHLGdCQUFnQjtrQkFBeEIsS0FBSztZQUNHLG9CQUFvQjtrQkFBNUIsS0FBSztZQUNHLElBQUk7a0JBQVosS0FBSztZQUNHLFFBQVE7a0JBQWhCLEtBQUs7WUFDRyxnQkFBZ0I7a0JBQXhCLEtBQUs7WUFDRyxVQUFVO2tCQUFsQixLQUFLO1lBQ0csY0FBYztrQkFBdEIsS0FBSztZQUNHLGFBQWE7a0JBQXJCLEtBQUs7WUFDRyxVQUFVO2tCQUFsQixLQUFLO1lBQ0ksa0JBQWtCO2tCQUEzQixNQUFNO1lBQ0csWUFBWTtrQkFBckIsTUFBTTtZQUNHLGVBQWU7a0JBQXhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBhcnJvdy1wYXJlbnMgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9tZW1iZXItb3JkZXJpbmcgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJhZGl4ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtZnVuY3Rpb24tcmV0dXJuLXR5cGUgKi9cblxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIFZpZXdFbmNhcHN1bGF0aW9uLCBPbkRlc3Ryb3ksIElucHV0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIEV2ZW50RW1pdHRlciwgQ2hhbmdlRGV0ZWN0b3JSZWYsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1BVF9TRUxFQ1RfQ09ORklHIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcbmltcG9ydCB7IFJvdXRlciAsICBOYXZpZ2F0aW9uRXh0cmFzfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQXhvU25hY2tCYXJTZXJ2aWNlLCBBeG9TbmFja0JhclR5cGUgfSBmcm9tICcuLi9heG8tc25hY2stYmFyL2F4by1zbmFjay1iYXIuc2VydmljZSc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uL2NvcmUvYXV0aC9hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuLi9jb3JlL3VzZXIvdXNlci5zZXJ2aWNlJztcbmltcG9ydCB7IFVzZXIgfSBmcm9tICcuLi9jb3JlL3VzZXIvdXNlci50eXBlcyc7XG5pbXBvcnQgeyBBcHBMaXN0RHRvIH0gZnJvbSAnLi9hcHAtbGlzdC1kdG8nO1xuaW1wb3J0IHsgTXlBcHBMaXN0U2VydmljZSB9IGZyb20gJy4vbXktYXBwLWxpc3Quc2VydmljZSc7XG5pbXBvcnQgeyBPcmdhbml6YXRpb25MaXN0RHRvIH0gZnJvbSAnLi9vcmdhbml6YXRpb24tbGlzdC1kdG8nO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IEZsYXR0ZW5TZXJ2aWNlIH0gZnJvbSAnLi4vZmxhdHRlbi1tb2R1bGUvZmxhdHRlbi5zZXJ2aWNlJztcbmltcG9ydCB7IElGbGF0dGVuIH0gZnJvbSAnLi4vY29tbW9uLXV0aWxzL2lGbGF0dGVuJztcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgQ29va2llU2VydmljZSB9IGZyb20gJ25neC1jb29raWUtc2VydmljZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBFbmxpZ2h0ZW5MaWJNb2R1bGUgfSBmcm9tICcuLi9lbmxpZ2h0ZW4tbGliL2VubGlnaHRlbi1saWIubW9kdWxlJztcbmltcG9ydCB7IFFyZGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vcXJkaWFsb2cvcXJkaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IExvZ2dpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbG9nZ2luZy5zZXJ2aWNlJztcbmltcG9ydCB7IExvYWRpbmdEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi9sb2FkaW5nLWRpYWxvZy9sb2FkaW5nLWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IExvYWRpbmdBcHBpbnN0YWxsQ29tcG9uZW50IH0gZnJvbSAnLi4vbG9hZGluZy1hcHBpbnN0YWxsL2xvYWRpbmctYXBwaW5zdGFsbC5jb21wb25lbnQnOyBcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tICcuLi9jb21tb24uc2VydmljZSc7XG5pbXBvcnQgeyBTdWNjZXNzRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vc3VjY2Vzcy1kaWFsb2cvc3VjY2Vzcy1kaWFsb2cuY29tcG9uZW50JzsgXG5pbXBvcnQgeyB0YWtlLCAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBmb3JrSm9pbiwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGxvY2FsZSB9IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBBcHBDcmVhdGVEaWFsb2dDb21wb25lbnRDb21wb25lbnQgfSBmcm9tICcuLi9hcHAtY3JlYXRlLWRpYWxvZy1jb21wb25lbnQvYXBwLWNyZWF0ZS1kaWFsb2ctY29tcG9uZW50LmNvbXBvbmVudCc7IFxuXG4vL2ltcG9ydCB7IENvbnNvbGUgfSBmcm9tICdjb25zb2xlJztcbmltcG9ydCB7IENvbW1vbkxpYkNvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vY29tbW9uLWxpYi1jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGF0YVZpZXdGaWx0ZXJzU2VydmljZSB9IGZyb20gJy4uL2RhdGEtdmlldy1saWIvZGF0YS12aWV3LWZpbHRlcnMvZGF0YS12aWV3LWZpbHRlcnMuc2VydmljZSc7XG5pbXBvcnQgeyBDb25maXJtYXRpb25Nb2RhbENvbXBvbmVudCB9IGZyb20gJy4uL3NoYXJlZC9jb21maXJtYXRpb24tbW9kYWwvY29uZmlybWF0aW9uLW1vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTdWJzY3JpYmVkUGxhbk5hbWUgfSBmcm9tICcuLi9zdWJzY3JpYmVkUGxhbk5hbWUuc2VydmljZSc7XG5pbXBvcnQgeyBTdHJpcGVTZXJ2aWNlIH0gZnJvbSAnLi4vc3RyaXBlLnNlcnZpY2UnO1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItYXBwLWxpc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vYXBwLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9hcHAtbGlzdC5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBNQVRfU0VMRUNUX0NPTkZJRyxcbiAgICAgIHVzZVZhbHVlOiB7IG92ZXJsYXlQYW5lbENsYXNzOiAnb3JnYW5pemF0aW9uLWxpc3Qtb3ZlcmxheS1wYW5lbCcgfSxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBcHBMaXN0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBjdXJyZW50T3JnOnN0cmluZztcbiAgQElucHV0KCkgYXBwTGlzdDogQXJyYXk8QXBwTGlzdER0bz47XG4gIEBJbnB1dCgpIGJhc2VVcmw6IHN0cmluZztcbiAgQElucHV0KCkgb3JnYW5pemF0aW9uTGlzdDogQXJyYXk8T3JnYW5pemF0aW9uTGlzdER0bz4gPSBbXTtcbiAgQElucHV0KCkgc2VsZWN0ZWRPcmdhbml6YXRpb246IE9yZ2FuaXphdGlvbkxpc3REdG87XG4gIEBJbnB1dCgpIHVzZXI6IFVzZXI7XG4gIEBJbnB1dCgpIGxpc3RUeXBlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHNob3dDcmVhdGVCdXR0b246Ym9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzaG93UVJJY29uOmJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc2hvd0RvdHNPcHRpb246Ym9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzaG93Q3VzdG9taXplOmJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc2hvd0FkZEJ0bjpib29sZWFuID0gZmFsc2U7XG4gIEBPdXRwdXQoKSBzd2l0Y2hBY2NvdW50RXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG9wZW5BcHBFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgdXBkYXRlTGlzdEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIC8vIHVzZXI6IFVzZXI7XG4gIGlzQXBwQ2hhbmdlZEFmdGVyUHVibGlzaDogYm9vbGVhbiA9IGZhbHNlO1xuICB1c2VyTmFtZTogc3RyaW5nO1xuICBhcHBWZXJzaW9uSWQ6IG51bWJlcjtcbiAgdXNlckVtYWlsOiBzdHJpbmc7XG4gIGZ1bGxWZXJzaW9uOiBzdHJpbmc7XG4gIGZ1bGxWZXJzaW9uczogc3RyaW5nW10gPSBbXTtcbiAgdXNlckltYWdlOiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZyA9ICcnO1xuICBtaW5vclZlcnNpb246IHN0cmluZyA9ICcnO1xuICBhcHBJZDogc3RyaW5nID0nJztcbiAgYnVpbGRlclVybDogc3RyaW5nO1xuICBvcGVuUG9wdXBNZW51OiBudW1iZXI7XG4gIGdyYWRpZW50cyA9IFtcbiAgICAncmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA4MCUgMjAlLCAjREI2RDgxLCAjQkY0NTgxKScsXG4gICAgJ3JhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgODAlIDIwJSwgIzQ0OTFEOSwgIzQ1NTlCRiknLFxuICAgICdyYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDgwJSAyMCUsICNFN0E3NzksICNBQTU1MjUpJyxcbiAgICAncmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA4MCUgMjAlLCAjNDREOTUzLCAjMEQ5MjEyKSdcbiAgXTtcbiAgY3VycmVudFVybCA9IGRvY3VtZW50LlVSTDtcbiAgYmFzZVVzcmwgPSBkb2N1bWVudC5iYXNlVVJJO1xuICByZWdleCA9IC9cXC9hcHBzXFwvKFxcZCspXFwvKFxcdyspLztcbiAgbWF0Y2ggPSB0aGlzLmN1cnJlbnRVcmwubWF0Y2godGhpcy5yZWdleCk7XG5cbiAgZGF0YSA9IHt9O1xuICBwcmV2aW91c09yZzpzdHJpbmc7XG5cbiAgLypcbiAgICAgKiBTdWJqZWN0IG9iamVjdCB3aGljaCBoZWxwcyB1bnN1YnNjcmliZSBhbGwgdGhlIHN1YnNjcmliZWQgb2JqZWN0cyBpbiB0aGUgY29tcG9uZW50XG4gICAgICovXG4gIHByaXZhdGUgX3Vuc3Vic2NyaWJlQWxsOiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdDxhbnk+KCk7XG4gIG9yZ2FuaXphdG9uSWQ6IG51bWJlcjtcbiAgdXNlclBlcm1pc3Npb25zOiBzdHJpbmdbXSA9IFtdOyAvLyBWYXJpYWJsZSB0byBob2xkIHVzZXIgcGVybWlzc2lvbnNcbiAgaGFzT3JnVXNlckFjY2VzczogYm9vbGVhbjtcbiAgY3VycmVudEFwcFZlcnNpb25JZDogc3RyaW5nO1xuICBzaG93V2ViUG9ydGFsQWNjZXNzT3ZlcmxheTogYm9vbGVhbiA9IGZhbHNlOyAvLyBGbGFnIHRvIGNvbnRyb2wgb3ZlcmxheSBkaXNwbGF5XG4gIHByaXZhdGUgaGFzQ2FsbGVkR2V0VXNlclBlcm1pc3Npb25zOiBib29sZWFuID0gZmFsc2U7IC8vIEZsYWcgdG8gdHJhY2sgaWYgdGhlIGZ1bmN0aW9uIGhhcyBiZWVuIGNhbGxlZFxuICBwZXJtaXNzaW9uczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxuICAgIHByaXZhdGUgX2NoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIF91c2VyU2VydmljZTogVXNlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb21tb25MaWJDb25maWc6IENvbW1vbkxpYkNvbmZpZ3VyYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgX21wQXBwTGlzdFNlcnZpY2U6IE15QXBwTGlzdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBfYXhvU25hY2tCYXI6IEF4b1NuYWNrQmFyU2VydmljZSxcbiAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLFxuICAgIHByaXZhdGUgX2ZsYXR0ZW5TZXJ2aWNlOiBGbGF0dGVuU2VydmljZSxcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsIC8vIEluamVjdCBIdHRwQ2xpZW50XG4gICAgcHJpdmF0ZSBfaHR0cENsaWVudDogSHR0cENsaWVudCxcbiAgICBwcml2YXRlIGNvb2tpZVNlcnZpY2U6IENvb2tpZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIF9sb2dnaW5nU2VydmljZSA6IExvZ2dpbmdTZXJ2aWNlLFxuICAgIHByaXZhdGUgX2NvbW1vblNlcnZpY2U6Q29tbW9uU2VydmljZSxcbiAgICBwcml2YXRlIF9kYXRhVmlld0ZpbHRlcnNTZXJ2aWNlOiBEYXRhVmlld0ZpbHRlcnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgX3N1YnNjcmliZWRQbGFuTmFtZTogU3Vic2NyaWJlZFBsYW5OYW1lLFxuICAgIHByaXZhdGUgc3RyaXBlU2VydmljZTogU3RyaXBlU2VydmljZSxcblxuICAgIFxuICApIHsgfVxuICAvKipcbiAgICogR2V0dGVyIGZvciBjdXJyZW50IHllYXJcbiAgICovXG4gIGdldCBjdXJyZW50WWVhcigpOiBudW1iZXIge1xuICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCk7XG4gIH1cblxuICBzZXRPcGVuUG9wdXBNZW51KGFwcElkKSB7XG4gICAgdGhpcy5vcGVuUG9wdXBNZW51ID0gYXBwSWQ7XG4gICAgY29uc3Qgb3ZlcmxheSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5jZGstb3ZlcmxheS1jb250YWluZXInKTtcbiAgICBvdmVybGF5LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgdGhpcy5vcGVuUG9wdXBNZW51ID0gdW5kZWZpbmVkO1xuICAgIH0pO1xuICB9XG5cbiAgb3BlblFSQ29kZURpYWxvZygpOiB2b2lkIHtcblxuICAgIGNvbnN0IHFyRGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihRcmRpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgd2lkdGg6ICcyNTBweCcsIC8vIEFkanVzdCB3aWR0aCBhcyBuZWVkZWRcbiAgICB9KTtcbiAgfVxuXG4gIG5hdmlnYXRldG9PcmdhbmlhdGlvbigpOiB2b2lkIHtcbiAgICBjb25zdCB1cmxNYXA6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgICAnbG9jYWxob3N0OjQyMDAnOiAnaHR0cHM6Ly9sb2NhbGhvc3Q6NDIwMC8nLFxuICAgICAgJ2xvY2FsaG9zdDo0MjAxJzogJ2h0dHBzOi8vbG9jYWxob3N0OjQyMDAvJyxcbiAgICAgICdhbmRyb21lZGEtYnVpbGRlci1xYS5heG9uYXRvci5jb20nOiAnaHR0cHM6Ly9hbmRyb21lZGEtYnVpbGRlci1xYS5heG9uYXRvci5jb20vJyxcbiAgICAgICdhbmRyb21lZGEtY29udGFpbmVyLXFhLmF4b25hdG9yLmNvbSc6ICdodHRwczovL2FuZHJvbWVkYS1idWlsZGVyLXFhLmF4b25hdG9yLmNvbS8nLFxuICAgICAgJ2J1aWxkZXIuYXhvbmF0b3IuY29tJzogJ2h0dHBzOi8vYnVpbGRlci5heG9uYXRvci5jb20vJyxcbiAgICAgICd3ZWIuYXhvbmF0b3IuY29tJzogJ2h0dHBzOi8vYnVpbGRlci5heG9uYXRvci5jb20vJ1xuICAgIH07XG4gICAgY29uc3QgdXJsOiBzdHJpbmcgPSB1cmxNYXBbd2luZG93LmxvY2F0aW9uLmhvc3RdIHx8ICcnO1xuICAgIGlmICh0aGlzLm1hdGNoKSB7XG4gICAgICBjb25zdCB1c2VyTGlzdFVybCA9IGBhcHBzLyR7dGhpcy5tYXRjaFsxXX0vdXNlcnNgOyAvLyBkeW5hbWljIHBhcnQgYmFzZWQgb24gbWF0Y2hcbiAgICAgIHdpbmRvdy5vcGVuKHVybCArIHVzZXJMaXN0VXJsLCAnX3NlbGYnKTsgLy8gb3BlbiBkeW5hbWljIFVSTFxuICAgIH0gZWxzZSB7XG4gICAgICB3aW5kb3cub3Blbih1cmwgKyAnb3JnYW5pemF0aW9uJywgJ19zZWxmJyk7IC8vIGZhbGxiYWNrIHRvIG9yZ2FuaXphdGlvbiByb3V0ZVxuICAgIH1cbiAgfSAgXG5cbiAgbmF2aWdhdGV0b09yZ2FuaWF0aW9uU2V0dGluZ3MoKTogdm9pZCB7XG4gICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlQnlVcmwoJ29yZ2FuaXphdGlvbi1zZXR0aW5ncycpO1xuICB9XG4gIFxuXG5cblxuICAvLyBkZWxldGVBcHAoYXBwSWQ6IHN0cmluZywgdmVyc2lvbjogc3RyaW5nKTogdm9pZCB7XG4gIC8vICAgdGhpcy5fbXBBcHBMaXN0U2VydmljZS5kZWxldGVBcHAoYXBwSWQsIHZlcnNpb24pXG4gIC8vICAgICAucGlwZShcbiAgLy8gICAgICAgdGFrZVVudGlsKHRoaXMuX3Vuc3Vic2NyaWJlQWxsKSxcbiAgLy8gICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgLy8gICAgICAgICBjb25zb2xlLmxvZygnRXJyb3Igb2NjdXJyZWQgd2hpbGUgZGVsZXRpbmcgYXBwOicsIGVycm9yKTtcbiAgLy8gICAgICAgICAvLyB0aGlzLl9zbmFja2JhclNldmljZS5vcGVuU25hY2tCYXIoJ0Vycm9yIG9jY3VycmVkIHdoaWxlIGRlbGV0aW5nIGFwcC4nLCBBeG9TbmFja0JhclR5cGUuZXJyb3IpO1xuICAvLyAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVycm9yKTtcbiAgLy8gICAgICAgfSlcbiAgLy8gICAgIClcbiAgLy8gICAgIC5zdWJzY3JpYmUoXG4gIC8vICAgICAgIC8vIHJlc3BvbnNlID0+IHRoaXMuaGFuZGxlRGVsZXRlU3VjY2VzcyhyZXNwb25zZSksXG4gIC8vICAgICAgIC8vIGVycm9yID0+IHRoaXMuaGFuZGxlRGVsZXRlRXJyb3IoZXJyb3IpXG4gIC8vICAgICApO1xuICAvLyB9XG5cbiAgLy8gQXNzdW1pbmcgX2RlbGV0ZVNlcnZpY2UgaGFzIGEgZGVsZXRlQXBwIG1ldGhvZCB0aGF0IGhhbmRsZXMgYXBwIGRlbGV0aW9uXG4gIC8vIEFsc28sIGFzc3VtaW5nIGhhbmRsZURlbGV0ZVN1Y2Nlc3MgYW5kIGhhbmRsZURlbGV0ZUVycm9yIGFyZSBtZXRob2RzIHRvIGhhbmRsZSBzdWNjZXNzIGFuZCBlcnJvciBzY2VuYXJpb3NcblxuICBwYWRaZXJvKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHZhciBwYWRkaW5nPScnO1xuICAgIGxldCBsZW5ndGg9dmFsdWUudG9TdHJpbmcoKS5sZW5ndGg7XG4gICAgaWYobGVuZ3RoPT0xKVxuICAgIHtcbiAgICAgIHBhZGRpbmc9JzAwJyt2YWx1ZVxuICAgIH1cbiAgICBlbHNlIGlmKGxlbmd0aD09MilcbiAgICB7XG4gICAgICBwYWRkaW5nPScwJyt2YWx1ZVxuICAgIH1cbiAgICBlbHNlIGlmKGxlbmd0aD09MylcbiAgICB7XG4gICAgICBwYWRkaW5nPXZhbHVlXG4gICAgfVxuICAgIHJldHVybiBwYWRkaW5nO1xuICB9XG5cbiAgcHVibGljIGhhc0FwcEJ1aWxkZXJQZXJtaXNzaW9uOiBib29sZWFuID0gZmFsc2U7XG5cbiAgZ2V0VXNlckRldGFpbHMoKTogdm9pZCB7XG4gICAgdGhpcy5fY29tbW9uU2VydmljZS5nZXRVc2VyRGV0YWlsKClcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fdW5zdWJzY3JpYmVBbGwpLFxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIHVzZXIgZGV0YWlsczonLCBlcnJvcik7XG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3IpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFwKCh1c2VyUmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHVzZXJQZXJtaXNzaW9ucyA9IHVzZXJSZXNwb25zZT8udWQ/LnBlcm1pc3Npb25zIHx8IFtdO1xuICAgICAgICAgIC8vIENoZWNrIGlmIFwiQVBQX0JVSUxERVJcIiBwZXJtaXNzaW9uIGV4aXN0c1xuICAgICAgICAgIHRoaXMuaGFzQXBwQnVpbGRlclBlcm1pc3Npb24gPSB1c2VyUGVybWlzc2lvbnMuaW5jbHVkZXMoXCJBUFBfQlVJTERFUlwiKSAmJiB1c2VyUGVybWlzc2lvbnMuaW5jbHVkZXMoXCJBQ0NFU1NfV0VCX1BPUlRBTFwiKTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uT3B0aW9ucyA9IHtcbiAgICAgICAgICBhY2NvdW50SWQ6IHJlc3BvbnNlLnVkLmxhc3R1c2VkX2FjY291bnRcbiAgICAgICAgfTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMuc3RyaXBlU2VydmljZS5nZXRTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uT3B0aW9ucykuc3Vic2NyaWJlKFxuICAgICAgICAgIChzdWJzY3JpcHRpb25SZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ1N1YnNjcmlwdGlvbiBkZXRhaWxzOicsIHN1YnNjcmlwdGlvblJlc3BvbnNlKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKHN1YnNjcmlwdGlvblJlc3BvbnNlICYmIHN1YnNjcmlwdGlvblJlc3BvbnNlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uSW5mbyA9IHN1YnNjcmlwdGlvblJlc3BvbnNlWzBdO1xuICAgICAgICAgICAgICBjb25zdCBwcm9kdWN0T3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICBQcm9kdWN0SWQ6IHN1YnNjcmlwdGlvbkluZm8uaXRlbXNbMF0ucHJvZHVjdElkXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICB0aGlzLnN0cmlwZVNlcnZpY2UuZ2V0UHJvZHVjdERldGFpbHMocHJvZHVjdE9wdGlvbnMpLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICAocHJvZHVjdFJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9zdWJzY3JpYmVkUGxhbk5hbWUuc3Vic2NyaWJlZFBsYW5OYW1lID0gcHJvZHVjdFJlc3BvbnNlLm5hbWU7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIHByb2R1Y3QgZGV0YWlsczonLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBzdWJzY3JpcHRpb24gZGV0YWlsczonLCBlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfSk7XG4gIH1cbiAgXG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5nZXRVc2VyUGVybWlzc2lvbnMoKTtcbiAgIFxuICAgIC8vIHRoaXMuY3VycmVudEFwcFZlcnNpb25JZCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLnNwbGl0KFwiL1wiKVs0XTtcbiAgICAvLyB0aGlzLl9uYXZpZ2F0aW9uLnVwZGF0ZUNsYXNzaWNOYXZpZ2F0aW9uUm91dGVzKHRoaXMuY3VycmVudEFwcFZlcnNpb25JZC50b1N0cmluZygpKTtcblxuICAgIC8vIEZldGNoIHVzZXIgZGV0YWlsc1xuICAgIFxuICAgIFxuICAgIGlmICh0aGlzLnVzZXIpIHtcbiAgICAgIHRoaXMudXNlckVtYWlsID0gdGhpcy51c2VyLmVtYWlsO1xuICAgICAgdGhpcy51c2VyTmFtZSA9IHRoaXMudXNlclsnZm5hbWUnXSArICcgJyArIHRoaXMudXNlclsnbG5hbWUnXTtcbiAgICAgIHRoaXMudXNlckltYWdlID0gdGhpcy51c2VyWyd1aW1nJ107XG4gICAgfVxuXG4gICAgdGhpcy5nZXRVc2VyRGV0YWlscygpO1xuICAgIFxuICAvL0FYRS1JNjM3NlxuICAvL0lzc3VlIDogUGFyYW1ldGVyaXplZCB1cmwgd2FzIG5vdCBtYWludGFpbiAoYXBwIGluc3RhbGxhdGlvbiksIGF1dGhvcml6YXRpb24gY2FsbCBzb21laG93IGxvc2VzIHRoZSBwYXJhbWV0ZXJzXG4gIC8vdXJsIHN0b3JhZ2UgaXMgbWFpbnRhaW5lZCBieSB0aGUgbmFtZSBcImFwcG5hbWVcIlxuICAvL0l0IGlzIHNldCBpbiBhdXRoLnJlc29sdmVyIGFuZCByZW1vdmVkIGhlcmVcbiAgLy9pZiBhcHBuYW1lIGV4aXN0IGluIHNlc3Npb24gdXNlZCB0aGUgc3RvcmVkIG5hbWUsIGlmIG5vdCB1c2VkIHRoZSB2YWx1ZSBmcm9tIHRoZSB1cmxcbiAgLy9cbnZhciBhcHBOYW1lY2hlY2s9bG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2FwcG5hbWUnKTtcbi8vY29uc29sZS5sb2coXCIhMTEzXCIpO1xuLy8gaWYoYXBwTmFtZWNoZWNrIT09bnVsbClcbi8vIHtcbi8vICAgaWYoYXBwTmFtZWNoZWNrPT1cIi9hcHBzXCIpXG4vLyAgIHtcbi8vICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcImFwcG5hbWVcIik7XG4vLyAgIH1cbi8vIH1cbi8vIGFwcE5hbWVjaGVjaz1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYXBwbmFtZScpO1xuLy9jb25zb2xlLmxvZyhcIiExMTNcIik7XG4vL2NvbnNvbGUubG9nKGFwcE5hbWVjaGVjaylcbiAgLy9cbnZhciBhcHBOYW1lY2hlY2s9bG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2FwcG5hbWUnKTtcbnZhciBhcHBQdWJsaXNoU3RhdHVzPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCdwdWJsaXNoc3RhdHVzJyk7XG4vL2NvbnNvbGUubG9nKFwiITExM1wiKTtcbi8vIGlmKGFwcE5hbWVjaGVjayE9PW51bGwpXG4vLyB7XG4vLyAgIGlmKGFwcE5hbWVjaGVjaz09XCIvYXBwc1wiKVxuLy8gICB7XG4vLyAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJhcHBuYW1lXCIpO1xuLy8gICB9XG4vLyB9XG4vLyBhcHBOYW1lY2hlY2s9bG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2FwcG5hbWUnKTtcbi8vY29uc29sZS5sb2coXCIhMTEzXCIpO1xuLy9jb25zb2xlLmxvZyhhcHBOYW1lY2hlY2spXG4gIGxldCBhcHBuYW1lOnN0cmluZztcbiAgbGV0IGNhdGVnb3J5OnN0cmluZztcblxuLy8gY29uc3QgdXJsUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcbi8vIGNvbnN0IGFwcE5hbWVDaGVjayA9IHVybFBhcmFtcy5nZXQoJ2FwcG5hbWUnKTtcbi8vIGNvbnNvbGUubG9nKGFwcE5hbWVDaGVjaylcbi8vIGNvbnN0IGNhdGVnb3J5ID0gdXJsUGFyYW1zLmdldCgnY2F0ZWdvcnknKTtcbi8vIGNvbnNvbGUubG9nKGNhdGVnb3J5KWlcblxuXG5sZXQgSW5zdGFsbEFwcE5hbWU6c3RyaW5nO1xuSW5zdGFsbEFwcE5hbWU9bG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJJbnN0YWxsZWRBcHBOYW1lXCIpO1xuaWYoSW5zdGFsbEFwcE5hbWUhPW51bGwpe1xuY29uc3QgY2FwaXRhbGl6ZWRBcHBOYW1lOiBzdHJpbmcgPSB0aGlzLmNhcGl0YWxpemVXb3JkcyhJbnN0YWxsQXBwTmFtZS5yZXBsYWNlKC8tL2csICcgJykpO1xudGhpcy5jaGVja0FuZFB1Ymxpc2hBcHAoY2FwaXRhbGl6ZWRBcHBOYW1lKTtcbmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFwiSW5zdGFsbGVkQXBwTmFtZVwiKTtcbn1cbmlmIChhcHBOYW1lY2hlY2sgIT09IG51bGwpIHtcbiAgLy9cbiAgY29uc3QgdXJsUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhhcHBOYW1lY2hlY2suc3BsaXQoJz8nKVsxXSk7XG4gIGNvbnN0IGFwcE5hbWVUZW1wID0gdXJsUGFyYW1zLmdldCgnYXBwbmFtZScpO1xuICBjb25zdCBjYXRlZ29yeVRlbXAgPSB1cmxQYXJhbXMuZ2V0KCdjYXRlZ29yeScpO1xuICAvL2NvbnN0IGFwcE5hbWVUZW1wID0gYXBwTmFtZWNoZWNrLnNwbGl0KCc9JylbMV0uc3BsaXQoJyYnKVswXTsgLy8gRXh0cmFjdGluZyBhcHBuYW1lIHZhbHVlIGZyb20gVVJMIHBhcmFtZXRlclxuICAvL2xvY2FsU3RvcmFnZS5zZXRJdGVtKFwiSW5zdGFsbGVkQXBwTmFtZVwiLGFwcE5hbWVUZW1wKVxuLy8gRXh0cmFjdGluZyBjYXRlZ29yeSB2YWx1ZSBmcm9tIFVSTCBwYXJhbWV0ZXJcbiAvLyBjb25zdCBjYXRlZ29yeVRlbXAgPSBhcHBOYW1lY2hlY2suc3BsaXQoJ2NhdGVnb3J5PScpWzFdO1xuICAvL1xuICBpZiAoYXBwTmFtZVRlbXApIHtcbiAgICB0aGlzLmluc3RhbGxBcHAoYXBwTmFtZVRlbXAsIGNhdGVnb3J5VGVtcCkudGhlbigoKSA9PiB7XG4gICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcImFwcG5hbWVcIik7XG4gICAgfSkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgLy8gSGFuZGxlIGVycm9yIGlmIGluc3RhbGxBcHAgZmFpbHNcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluc3RhbGxpbmcgYXBwOicsIGVycm9yKTtcbiAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFwiYXBwbmFtZVwiKTtcbiAgICB9KTtcbiAgfVxuXG4vLyBsZXQgYXBwTmFtZTogc3RyaW5nOyBcbi8vIGlmKGFwcE5hbWVjaGVjayE9PW51bGwpe1xuLy8gICBhcHBOYW1lPWFwcE5hbWVjaGVjay5zcGxpdCgnPScpWzFdLnNwbGl0KCclMkYnKVswXTtcbi8vICAgaWYgKGFwcE5hbWUpIHtcbi8vICAgICB0aGlzLmluc3RhbGxBcHAoYXBwTmFtZSwpLnRoZW4oKCkgPT4ge1xuLy8gICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJhcHBuYW1lXCIpO1xuICAgICAgXG4vLyAgICAgfSlcbi8vICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuLy8gICAgICAgLy8gSGFuZGxlIGVycm9yIGlmIGluc3RhbGxBcHAgZmFpbHNcbi8vICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluc3RhbGxpbmcgYXBwOicsIGVycm9yKTtcbi8vICAgICB9KTtcbi8vICAgfVxuICBcbiAgXG4gIH1cbiAgZWxzZXtcbiAgICAvLyBWYXJpYWJsZSB0byBzdG9yZSBhcHBuYW1lXG5cbiAgICBcbiAgICB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1zLnBpcGUoXG4gICAgICB0YWtlVW50aWwodGhpcy5fdW5zdWJzY3JpYmVBbGwpXG4gICAgKS5zdWJzY3JpYmUocGFyYW1zID0+IHtcbiAgICAgIGFwcG5hbWUgPSBwYXJhbXNbJ2FwcG5hbWUnXTtcbiAgICAgIC8vbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJJbnN0YWxsZWRBcHBOYW1lXCIsYXBwbmFtZSk7XG4gICAgICBjb25zb2xlLmxvZyhhcHBuYW1lKVxuICAgICAgY2F0ZWdvcnkgPSBwYXJhbXNbJ2NhdGVnb3J5J107XG4gICAgICBjb25zb2xlLmxvZyhjYXRlZ29yeSlcbiAgICBcbiAgICAgIGlmIChhcHBuYW1lKSB7XG4gICAgICAgIC8vIFNwbGl0IHRoZSBhcHBuYW1lIGF0IHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mICcvJ1xuICAgICAgICBjb25zdCBhcHBOYW1lUGFydHMgPSBhcHBuYW1lLnNwbGl0KCcvJywgMSk7XG4gICAgICAgIGNvbnN0IGFwcE5hbWUgPSBhcHBOYW1lUGFydHNbMF07IC8vIFN0b3JlIGFwcG5hbWVcbiAgICAgICAgLy9jb25zdCBjYXRlZ29yeSA9IGNhdGVnb3J5OyAvLyBTdG9yZSBjYXRlZ29yeVxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcImFwcE5hbWU9XCIrYXBwTmFtZSk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiY2F0ZWdvcnk9XCIrY2F0ZWdvcnkpO1xuICAgICAgICBcbiAgICAgICAgLy8gTmF2aWdhdGUgdG8gdGhlIHNhbWUgcm91dGUgd2l0aG91dCBhbnkgcXVlcnkgcGFyYW1ldGVyc1xuICAgICAgICBjb25zdCBuYXZpZ2F0aW9uRXh0cmFzOiBOYXZpZ2F0aW9uRXh0cmFzID0ge1xuICAgICAgICAgIHJlcGxhY2VVcmw6IHRydWUsXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCBuYXZpZ2F0aW9uRXh0cmFzKTtcbiAgICAgICAgXG5cbiAgICAgICAgaWYgKGFwcG5hbWUpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhhcHBuYW1lKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhjYXRlZ29yeSk7XG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJwdWJsaXNoc3RhdHVzXCIsXCJGYWxzZVwiKVxuICAgICAgICAgIHRoaXMuaW5zdGFsbEFwcChhcHBuYW1lLGNhdGVnb3J5KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIC8vIEhhbmRsZSBzdWNjZXNzZnVsIGluc3RhbGxhdGlvblxuICAgICAgICAgICAgY29uc29sZS5sb2coJ0FwcCBpbnN0YWxsZWQgTWV0aG9kIGNhbGxlZDonLCBhcHBuYW1lLCBjYXRlZ29yeSk7XG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcImFwcG5hbWVcIik7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgICAgLy8gSGFuZGxlIGVycm9yIGlmIGluc3RhbGxBcHAgZmFpbHNcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluc3RhbGxpbmcgYXBwOicsIGVycm9yKTtcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFwiYXBwbmFtZVwiKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIH1cbiAgICAgIC8vIH0gZWxzZSB7XG4gICAgICAvLyAgIGNvbnNvbGUuZXJyb3IoJ2FwcG5hbWUgb3IgY2F0ZWdvcnkgcXVlcnkgcGFyYW1ldGVyIGlzIG1pc3NpbmcnKTtcbiAgICAgIH19KTtcblxuICAgIH1cbiAgICBcbiAgICAvLyBvbmNlIHdlIGZpeCBpZGVudGl0eSBzZXJ2ZXIgQVBJLCB0aGlzIGNvZGUgd2lsbCBiZSBuZWVkZWQgYWdhaW5cbiAgICAvLyBTdWJzY3JpYmUgdG8gdXNlciBjaGFuZ2VzXG4gICAgLy8gdGhpcy5fdXNlclNlcnZpY2UudXNlciRcbiAgICAvLyAucGlwZSh0YWtlVW50aWwodGhpcy5fdW5zdWJzY3JpYmVBbGwpKVxuICAgIC8vIC5zdWJzY3JpYmUoKHVzZXI6IGFueSkgPT4ge1xuICAgIC8vICAgICB0aGlzLnVzZXIgPSB1c2VyO1xuICAgIC8vICAgICB0aGlzLnVzZXJFbWFpbCA9IHVzZXIuZW1haWw7XG4gICAgLy8gICAgIHRoaXMudXNlck5hbWUgPSB1c2VyLkZpcnN0TmFtZSArICcgJysgdXNlci5MYXN0TmFtZSA7XG4gICAgLy8gICAgIHRoaXMudXNlckltYWdlID0gdXNlci5waWN0dXJlO1xuICAgIC8vICAgICAvLyBNYXJrIGZvciBjaGVja1xuICAgIC8vICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAvLyB9KTtcblxuXG5cblxuICAgIGNvbnN0IHVybCA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3VybCcpO1xuICAgIGlmICh1cmwpIHtcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdXJsO1xuICAgICAgLy8gUmVtb3ZlIHNhdmVkIGRhdGEgZnJvbSBzZXNzaW9uU3RvcmFnZVxuICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgndXJsJyk7XG5cbiAgICAgIC8vIFJlbW92ZSBhbGwgc2F2ZWQgZGF0YSBmcm9tIHNlc3Npb25TdG9yYWdlXG4gICAgICBzZXNzaW9uU3RvcmFnZS5jbGVhcigpO1xuICAgIH1cblxuICB9XG5cbiAgXG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmKHRoaXMuY3VycmVudE9yZyE9dGhpcy5wcmV2aW91c09yZyl7XG4gICAgICB0aGlzLmdldFVzZXJQZXJtaXNzaW9ucygpO1xuICAgICAgdGhpcy5wcmV2aW91c09yZz10aGlzLmN1cnJlbnRPcmc7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzLmFwcExpc3QgJiYgY2hhbmdlcy5hcHBMaXN0LmN1cnJlbnRWYWx1ZSkge1xuICAgICAgdGhpcy5hc3NpZ25HcmFkaWVudHMoKTtcbiAgICB9XG4gIH1cblxuICBhc3NpZ25HcmFkaWVudHMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYXBwTGlzdCAmJiB0aGlzLmFwcExpc3QubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5hcHBMaXN0LmZvckVhY2goKGFwcCwgaW5kZXgpID0+IHtcbiAgICAgICAgYXBwLmdyYWRpZW50ID0gdGhpcy5ncmFkaWVudHNbaW5kZXggJSB0aGlzLmdyYWRpZW50cy5sZW5ndGhdO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENhbGwgYXBwcyBBcHAgVmVyc2lvbiBJZCByb3V0ZVxuICAgKlxuICAgKiBAcGFyYW0gYXBwVmVyc2lvbklkXG4gICAqL1xuICBvcGVuQXBwKGFwcFZlcnNpb25JZDogbnVtYmVyKTogdm9pZCB7XG4gICAgXG4gICAgY29uc3QgY3VycmVudFVybCA9IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW47IC8vIEdldCB0aGUgY3VycmVudCBVUkxcbiAgICAvLyBVcGRhdGVkIFVSTCBjaGVjayBsb2dpY1xuICAgIGlmIChjdXJyZW50VXJsLmluY2x1ZGVzKCdsb2NhbGhvc3Q6NDIwMCcpIHx8IGN1cnJlbnRVcmwuaW5jbHVkZXMoJ2J1aWxkZXIuYXhvbmF0b3IuY29tJykgfHwgY3VycmVudFVybC5pbmNsdWRlcygnYW5kcm9tZWRhLWJ1aWxkZXItcWEuYXhvbmF0b3IuY29tJykpIHtcbiAgICAgIFxuICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIHVzZXIgaXMgZGVmaW5lZCBhbmQgaGFzIGEgVXNlcklEXG4gICAgICBpZiAoIXRoaXMudXNlcikge1xuICAgICAgICAgIHRoaXMuX2F4b1NuYWNrQmFyLm9wZW5TbmFja0JhcignVXNlciBub3QgZm91bmQgb3Igbm90IGxvZ2dlZCBpbicsIEF4b1NuYWNrQmFyVHlwZS5lcnJvcik7XG4gICAgICAgICAgcmV0dXJuOyAvLyBFeGl0IHRoZSBtZXRob2QgaWYgdXNlciBpcyBub3QgYXZhaWxhYmxlXG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGZvciByZXF1aXJlZCBwZXJtaXNzaW9uc1xuICAgICAgY29uc3QgaGFzUmVxdWlyZWRQZXJtaXNzaW9uID0gdGhpcy5wZXJtaXNzaW9ucy5pbmNsdWRlcygnQVBQX0JVSUxERVInKSB8fCB0aGlzLnBlcm1pc3Npb25zLmluY2x1ZGVzKCdBUFBfSUFNJyk7XG4gICAgICBpZiAoIWhhc1JlcXVpcmVkUGVybWlzc2lvbikge1xuICAgICAgICAgIHRoaXMuX2F4b1NuYWNrQmFyLm9wZW5TbmFja0JhcignWW91IG5lZWQgZWl0aGVyIEFQUF9CVUlMREVSIG9yIEFQUF9JQU0gcGVybWlzc2lvbnMgdG8gcGVyZm9ybSB0aGlzIGFjdGlvbi4nLCBBeG9TbmFja0JhclR5cGUuZXJyb3IpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEaXJlY3RseSBvcGVuIHRoZSBhcHAgcmVnYXJkbGVzcyBvZiBVUkwgaWYgdGhlIGNvbmRpdGlvbnMgYXJlIG5vdCBtZXRcbiAgICB0aGlzLm9wZW5BcHBFdmVudC5lbWl0KGFwcFZlcnNpb25JZCk7XG4gIH1cblxuXG5cbiAgbmF2aWdhdGVUb0hvbWUoYXBwVmVyc2lvbklkOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGVCeVVybChgYXBwcy8ke2FwcFZlcnNpb25JZH0vaG9tZWApO1xuICB9XG5cbiAgLyoqXG4gICAqIGZ1bmN0aW9uIHVzZSB0byBTd2l0Y2ggdGhlIG9yZ2FuaXphdGlvblxuICAgKi9cbiAgc3dpdGNoQWNjb3VudChvcmdhbml6YXRpb25JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5zd2l0Y2hBY2NvdW50RXZlbnQuZW1pdChvcmdhbml6YXRpb25JZCk7XG4gICAgXG4gICBcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWduIG91dFxuICAgKi9cbiAgc2lnbk91dCgpOiB2b2lkIHtcbiAgICB0aGlzLl9sb2dnaW5nU2VydmljZS50cmFja0V2ZW50KCd1c2VyIGxvZ2dlZCBvdXQnLHtzdGVwIDogJ0J5ZSBCeWUgJyt0aGlzLnVzZXJOYW1lfSk7XG4gICAgdGhpcy5fYXV0aFNlcnZpY2Uuc2lnbk91dCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJpbGxpbmdcbiAgICovXG4gIG5hdmlnYXRlVG9CaWxsaW5nKCk6IHZvaWQge1xuICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZUJ5VXJsKCdwYXltZW50aW5mby9wcmljaW5nJylcbiAgICBcbiAgfVxuXG5cblxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8gQ3JlYXRlIEFwcHAvLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8qKlxuICAgKnRvIGNyZWF0ZSBuZXcgYXBwXG4gICAqL1xuICAgb3BlbkNyZWF0ZUFwcERpYWxvZygpOiB2b2lkIHtcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKEFwcENyZWF0ZURpYWxvZ0NvbXBvbmVudENvbXBvbmVudCwge1xuICAgICAgd2lkdGg6ICc2MDBweCcsXG4gICAgICBoZWlnaHQ6ICdhdXRvJyxcbiAgICAgIHBhbmVsQ2xhc3M6ICdjdXN0b20tZGlhbG9nLWNvbnRhaW5lcicsXG4gICAgICBiYWNrZHJvcENsYXNzOiAnY3VzdG9tLWRpYWxvZy1iYWNrZHJvcCdcbiAgICB9KTtcblxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICBjb25zdCB7IG5hbWUsIGRlc2NyaXB0aW9uIH0gPSByZXN1bHQ7XG5cbiAgICAgICAgdGhpcy5fYXhvU25hY2tCYXIub3BlblNuYWNrQmFyKCdDcmVhdGluZyBBcHAuLi4nLCBBeG9TbmFja0JhclR5cGUuaW5mbyk7XG4gICAgICAgIHRoaXMuY3JlYXRlQXBwKG5hbWUsIGRlc2NyaXB0aW9uKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNyZWF0ZUFwcChuYW1lOiBzdHJpbmcsIGRlc2NyaXB0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtRGF0YUZvclNlcnZpY2UgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBmb3JtRGF0YUZvclNlcnZpY2UuYXBwZW5kKCduYW1lJywgbmFtZSk7XG4gICAgZm9ybURhdGFGb3JTZXJ2aWNlLmFwcGVuZCgnZGVzY3JpcHRpb24nLCBkZXNjcmlwdGlvbik7XG5cbiAgICB0aGlzLl9tcEFwcExpc3RTZXJ2aWNlLmFkZEFwcEJhc2ljSW5mbyhmb3JtRGF0YUZvclNlcnZpY2UpLnRvUHJvbWlzZSgpXG4gICAgICAudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgIGlmIChyZXNwb25zZT8uYWRkQXBwQmFzaWNJbmZvPy5zdGF0dXMgPT09ICdzdWNjZXNzJyAmJiByZXNwb25zZS5hZGRBcHBCYXNpY0luZm8uYXBwPy5hcHB2ZXJzaW9uX2lkKSB7XG4gICAgICAgICAgLy90aGlzLl9uYXZpZ2F0aW9uLnVwZGF0ZUNsYXNzaWNOYXZpZ2F0aW9uUm91dGVzKHJlc3BvbnNlLmFkZEFwcEJhc2ljSW5mby5hcHAuYXBwdmVyc2lvbl9pZCk7XG4gICAgICAgICAgLy90aGlzLl9yb3V0ZXIubmF2aWdhdGUoWydhcHBzJywgcmVzcG9uc2UuYWRkQXBwQmFzaWNJbmZvLmFwcC5hcHB2ZXJzaW9uX2lkXSk7XG4gICAgICAgICAgXG4gICAgICAgICAgdGhpcy5fYXhvU25hY2tCYXIub3BlblNuYWNrQmFyKCdBcHAgY3JlYXRlZC4nLCBBeG9TbmFja0JhclR5cGUuc3VjY2Vzcyk7XG4gICAgICAgICAgdGhpcy5vcGVuQXBwKHJlc3BvbnNlLmFkZEFwcEJhc2ljSW5mby5hcHAuYXBwdmVyc2lvbl9pZClcbiAgICAgICAgfSBlbHNlIGlmIChyZXNwb25zZT8uYWRkQXBwQmFzaWNJbmZvPy5hcHAgPT09ICdhbHJlYWR5X2V4aXN0cycpIHtcbiAgICAgICAgICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ0FwcCBhbHJlYWR5IGV4aXN0cycsIEF4b1NuYWNrQmFyVHlwZS53YXJuaW5nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ09vcHMhIFNvbWV0aGluZyB3ZW50IHdyb25nJywgQXhvU25hY2tCYXJUeXBlLmVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGNyZWF0aW5nIGFwcDonLCBlcnJvcik7XG4gICAgICAgIHZhciBlcnJvck1lc3NhZ2UgPSAnT29wcyEgU29tZXRoaW5nIHdlbnQgd3JvbmcnXG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgIGlmIChlcnJvciA9PT0gJ0FYX0VSUl82NycpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9ICdPb3BzISBDYW5cXCd0IHJlYWNoIG91ciBzZXJ2ZXJzIPCfk6EuIFBsZWFzZSB3YWl0LCB3ZVxcJ2xsIG5vdGlmeSB5b3Ugc29vbi4nO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAgIHRoaXMuX2F4b1NuYWNrQmFyLm9wZW5TbmFja0JhcihlcnJvck1lc3NhZ2UsIEF4b1NuYWNrQmFyVHlwZS5lcnJvcik7XG4gICAgICB9KTtcbiAgfVxuLy9UcnlpbmcgdG8gaW1wbGVtZW50IHVybCBhcyB3ZWxsIGFzIGJ1dHRvbiBmdW5jdGlvbmFsaXR5IGZvciBpbnN0YWxsaW5nIGFwcFxuLy8gYXN5bmMgaW5zdGFsbEFwcCh1c2VySW5wdXQ/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgXG4vLyAgIGlmICghdXNlcklucHV0KSB7XG4vLyAgICAgdXNlcklucHV0ID0gcHJvbXB0KCdFbnRlciB0aGUgc3RyaW5nIHRvIHNlbmQgdG8gdGhlIEFQSTonKTtcbi8vICAgICBpZiAoIXVzZXJJbnB1dCkge1xuLy8gICAgICAgLy8gSWYgdXNlciBjYW5jZWxzIG9yIHByb3ZpZGVzIG5vIGlucHV0LCBkbyBub3RoaW5nXG4vLyAgICAgICByZXR1cm47XG4vLyAgICAgfVxuLy8gICB9XG5cbi8vICAgdGhpcy5fYXhvU25hY2tCYXIub3BlblNuYWNrQmFyKCdJbnN0YWxsaW5nIEFwcC4uLicsIEF4b1NuYWNrQmFyVHlwZS5pbmZvKTtcbiAgXG4gXG5jaGVja0FuZFB1Ymxpc2hBcHAoaW5zdGFsbGVkQXBwOiBzdHJpbmcpIHtcbiAgLy9cbiAgY29uc3QgYXBwTmFtZWNoZWNrID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2FwcG5hbWUnKTsgLy8gUmVwbGFjZSB3aXRoIHlvdXIgbG9naWMgdG8gZ2V0IGFwcE5hbWVjaGVja1xuICBjb25zdCBhcHBQdWJsaXNoU3RhdHVzID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3B1Ymxpc2hzdGF0dXMnKTsgLy8gUmVwbGFjZSB3aXRoIHlvdXIgbG9naWMgdG8gZ2V0IGFwcFB1Ymxpc2hTdGF0dXNcbiAgY29uc3QgYXBwSW5zdGFsbFN0YXR1cz1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnaW5zdGFsbHN0YXR1cycpXG5cbiAgIGlmIChhcHBOYW1lY2hlY2sgPT0gbnVsbCAmJiBhcHBQdWJsaXNoU3RhdHVzID09IFwiRmFsc2VcIiAmJiBhcHBJbnN0YWxsU3RhdHVzPT1cIlRydWVcIikge1xuICAgIGNvbnN0IGFwcElkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3B1Ymxpc2hBcHBJZERhdGEnKTtcbiAgICBjb25zdCBhcHBWZXJzaW9uID0gXCIxLjAwXCI7XG4gICAgY29uc3QgcHVibGlzaFN0YXR1cyA9IFwiUFwiO1xuICAgIGlmIChhcHBJZCkge1xuICAgICAgdGhpcy5fY29tbW9uU2VydmljZS5wdWJsaXNoYXBwKGFwcElkLCBhcHBWZXJzaW9uLCBwdWJsaXNoU3RhdHVzKS5zdWJzY3JpYmUoXG4gICAgICAgIHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAvLyBIYW5kbGUgdGhlIHJlc3BvbnNlIGlmIG5lZWRlZFxuICAgICAgICAgIGNvbnNvbGUubG9nKCdQdWJsaXNoIHJlc3BvbnNlOicsIHJlc3BvbnNlKTtcbiAgICAgICAgICAvLyBjb25zdCBhcHBOYW1lID0gaW5zdGFsbGVkQXBwIHx8ICdZb3VyIEFwcCc7XG4gICAgICAgICAgLy8gY29uc3QgYXBwVmVyc2lvbiA9ICcxLjAwMCc7XG4gICAgICAgICAgLy8gY29uc3Qgc3VjY2Vzc01lc3NhZ2UgPSBgQXBwOiAke2FwcE5hbWV9IHZlcnNpb24gJHthcHBWZXJzaW9ufSBpcyBwdWJsaXNoZWQgc3VjY2Vzc2Z1bGx5LmA7XG4gICAgICAgICAvLyB0aGlzLm9wZW5TdWNjZXNzRGlhbG9nKCd2ZXJzaW9uIHB1Ymxpc2hlZCBzdWNjZXNzZnVsbHkhJyk7XG4gICAgICAgICBjb25zdCBhcHBOYW1lID0gaW5zdGFsbGVkQXBwO1xuICAgICAgICAgY29uc3QgYXBwVmVyc2lvbiA9ICcxLjAwMCc7XG4gICAgICAgICBjb25zdCBib3hoZWFkaW5nPWBJbnN0YWxsZWRgXG4gICAgICAgICBjb25zdCBzdWNjZXNzTWVzc2FnZSA9IGBBcHA6ICR7YXBwTmFtZX0gdmVyc2lvbiAke2FwcFZlcnNpb259IGlzIGluc3RhbGxlZCBzdWNjZXNzZnVsbHkuIGA7XG4gICAgICAgICBjb25zdCBzdWNjZXNzRGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihTdWNjZXNzRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICAgICAgIHdpZHRoOiAnNTAwcHgnLFxuICAgICAgICAgICBkYXRhOiB7IG1lc3NhZ2U6IHN1Y2Nlc3NNZXNzYWdlICwgaGVhZGluZzpib3hoZWFkaW5nfSxcbiAgICAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlXG4gICAgICAgICB9KTtcbiAgICAgICAgICAvLyBSZW1vdmUgbG9jYWwgc3RvcmFnZSBpdGVtc1xuICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdwdWJsaXNoQXBwSWREYXRhJyk7XG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ3B1Ymxpc2hzdGF0dXMnKTtcbiAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnaW5zdGFsbHN0YXR1cycpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvciA9PiB7XG4gICAgICAgICAgLy8gSGFuZGxlIGVycm9yIGlmIG5lZWRlZFxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHB1Ymxpc2hpbmcgYXBwOicsIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbmZldGNoQXBwRGV0YWlscyhmbGF0dGVuOiBhbnkpIHtcbiAgaWYgKGZsYXR0ZW4gJiYgZmxhdHRlbi5hcHBWZXJzaW9uSWQpIHtcbiAgICB0aGlzLl9tcEFwcExpc3RTZXJ2aWNlLmZldGNoQXBwRGV0YWlscyhmbGF0dGVuLmFwcFZlcnNpb25JZCwgdGhpcy5jb21tb25MaWJDb25maWcuYXhvbmF0b3JYMVVybCkuc3Vic2NyaWJlKFxuICAgICAgKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgaXNBcHBDaGFuZ2VkQWZ0ZXJQdWJsaXNoID0gcmVzcG9uc2U/LmRhdGE/LmRldGFpbHM/LmlzX2FwcF9jaGFuZ2VkX2VkaXRlZF9hZnRlcl9wdWJsaXNoIHx8IGZhbHNlO1xuICAgICAgICB0aGlzLmlzQXBwQ2hhbmdlZEFmdGVyUHVibGlzaCA9IGlzQXBwQ2hhbmdlZEFmdGVyUHVibGlzaDtcblxuICAgICAgICB0aGlzLmlzQXBwQ2hhbmdlZEFmdGVyUHVibGlzaCA9IHRydWU7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiRGV0YWlscyBGb3VuZFwiKVxuICAgICAgICAvLyBUcmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb24gdG8gdXBkYXRlIHRoZSB2aWV3XG4gICAgICAgIC8vIHRoaXMuZGV0ZWN0Q2hhbmdlcygpOyAvLyA8LS0tIENhbGwgZGV0ZWN0Q2hhbmdlcygpIGhlcmVcblxuICAgICAgfSxcbiAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBhcHAgZGV0YWlsczonLCBlcnJvcik7XG4gICAgICB9XG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zb2xlLmVycm9yKCdhcHBWZXJzaW9uSWQgaXMgbWlzc2luZyBvciBpbnZhbGlkIGluIHRoZSBmbGF0dGVuIG9iamVjdDonLCBmbGF0dGVuKTtcbiAgfVxufVxuXG5cbmFzeW5jICBpbnN0YWxsQXBwKHVzZXJJbnB1dDogc3RyaW5nLCBjYXRlZ29yeTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIC8vXG4gIFxuICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoICdJbnN0YWxsaW5nIEFwcC4uLicsIEF4b1NuYWNrQmFyVHlwZS5pbmZvKTtcbiAgY29uc3QgbG9hZGluZ0RpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oTG9hZGluZ0FwcGluc3RhbGxDb21wb25lbnQsIHtcbiAgICB3aWR0aDogJzYwMHB4JyxcbiAgICBkYXRhOiB7IGxvYWRpbmdNZXNzYWdlOiAnSW5zdGFsbGluZyBhcHAsIHBsZWFzZSB3YWl0Li4uJyB9LFxuICAgIGRpc2FibGVDbG9zZTogdHJ1ZVxuICB9KTtcbiAgLy9jb25zdCBsb2FkaW5nRGlhbG9nUmVmID0gdGhpcy5vcGVuTG9hZGluZ0RpYWxvZ1dpdGhNZXNzYWdlKCdQbGVhc2Ugd2FpdC4gSW5zdGFsbGluZyBpbiBwcm9ncmVzcy4uLicpO1xuICBcbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgcmVxdWVzdFN0cmluZzogdXNlcklucHV0LFxuICAgICAgc2Vjb25kU3RyaW5nOiBjYXRlZ29yeVxuICAgIH07IFxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwLnBvc3Q8c3RyaW5nPignSW5zdGFsbEFwcCcsIGRhdGEsIHtcbiAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgLy8gU2V0IGNvbnRlbnQgdHlwZSB0byBhcHBsaWNhdGlvbi9qc29uXG4gICAgICB9KSxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZVxuICAgIH0pLnRvUHJvbWlzZSgpO1xuXG4gICAgLy9jb25zb2xlLmxvZygnUmVzcG9uc2UgZnJvbSBzZXJ2ZXI6JywgcmVzcG9uc2UpOyBcbiAgICBcbiAgICAvL2NvbnN0IHJlc3BvbnNlT2JqZWN0ID0gSlNPTi5wYXJzZShyZXNwb25zZSk7XG4gICAgXG4gICAgXG4gIC8vICAgaWYgKHJlc3BvbnNlKSB7XG5cbiAgLy8gICAgIGlmKHJlc3BvbnNlT2JqZWN0LnN0YXR1cz09XCJzdWNjZXNzXCIpe1xuICAvLyAgICAgdGhpcy5fYXhvU25hY2tCYXIub3BlblNuYWNrQmFyKCdBcHAgaW5zdGFsbGVkIHN1Y2Nlc3NmdWxseScsIEF4b1NuYWNrQmFyVHlwZS5zdWNjZXNzKTtcbiAgLy8gICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAvLyAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gIC8vICAgICB9LCAxNTAwMCk7XG4gIC8vICAgfSBlbHNlIGlmKHJlc3BvbnNlT2JqZWN0LnN0YXR1cz09J2ZhaWx1cmUnKSB7XG4gIC8vICAgICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ0Zvcm0gTm90IEZvdW5kIGluIHRoaXMgYXBwJywgQXhvU25hY2tCYXJUeXBlLmVycm9yKTtcbiAgLy8gICB9XG4gIC8vICAgICBlbHNlIHtcbiAgLy8gICAgIHRoaXMuX2F4b1NuYWNrQmFyLm9wZW5TbmFja0JhcignT29wcyEgU29tZXRoaW5nIHdlbnQgd3Jvbmcgd2hpbGUgaW5zdGFsbGluZyB0aGUgYXBwLicsIEF4b1NuYWNrQmFyVHlwZS5lcnJvcik7XG4gICAgICBcbiAgLy8gICAgIGNvbnNvbGUuZXJyb3IoQXhvU25hY2tCYXJUeXBlLmVycm9yKTtcbiAgLy8gICB9fVxuICAvLyB9IGNhdGNoIChlcnJvcikge1xuICAvLyAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluc3RhbGxpbmcgYXBwOicsIGVycm9yKTtcbiAgLy8gICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ09vcHMhIFNvbWV0aGluZyB3ZW50IHdyb25nIHdoaWxlIGluc3RhbGxpbmcgdGhlIGFwcC4nLCBBeG9TbmFja0JhclR5cGUuZXJyb3IpO1xuICAvLyAgIC8vdGhpcy5fbG9nZ2luZ1NlcnZpY2UudHJhY2tFdmVudCgnRXJyb3Igb2NjdXJyZWQgd2hpbGUgaW5zdGFsbGluZyBhcHAnLCBlcnJvcik7XG4gIC8vIH1cblxuICAgIFxuICAgICAgLy9jb25zdCByZXNwb25zZU9iamVjdCA9IEpTT04ucGFyc2UocmVzcG9uc2UpO1xuICAgICAgLy9jb25zb2xlLmxvZyhyZXNwb25zZU9iamVjdCk7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcIkluc3RhbGxlZEFwcE5hbWVcIix1c2VySW5wdXQpXG4gICAgICBjb25zdCByZXNwb25zZU9iamVjdCA9IHR5cGVvZiByZXNwb25zZSA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKHJlc3BvbnNlKSA6IHJlc3BvbnNlO1xuICAgICAgXG4gICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgLy9pZiAocmVzcG9uc2VPYmplY3QpIHtcbiAgICAgICAgIGlmIChyZXNwb25zZU9iamVjdC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7ICAgICAgICAgIFxuICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiaW5zdGFsbHN0YXR1c1wiLFwiVHJ1ZVwiKVxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ0FwcCBpbnN0YWxsZWQgc3VjY2Vzc2Z1bGx5JywgQXhvU25hY2tCYXJUeXBlLnN1Y2Nlc3MpO1xuICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICAgIGxvYWRpbmdEaWFsb2dSZWYuY2xvc2UoKTtcbiAgICAgICAgICAgIH0sIDIwMDAwKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICBcbiAgICAgICAgICAvLyB9IGVsc2UgaWYgKHJlc3BvbnNlT2JqZWN0LnN0YXR1cyA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgICAgLy8gICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ0Zvcm0gTm90IEZvdW5kIGluIHRoaXMgYXBwJywgQXhvU25hY2tCYXJUeXBlLmVycm9yKTtcbiAgICAgICAgfWVsc2Uge1xuICAgICAgICAgIHRoaXMuX2F4b1NuYWNrQmFyLm9wZW5TbmFja0JhcignRm9ybSBjYW5ub3QgYmUgZm91bmQgZm9yIHRoaXMgYXBwJywgQXhvU25hY2tCYXJUeXBlLmVycm9yKTtcbiAgICAgICAgICBsb2FkaW5nRGlhbG9nUmVmLmNsb3NlKCk7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihBeG9TbmFja0JhclR5cGUuZXJyb3IpO1xuICAgICAgICB9fVxuICAgICAgICBlbHNle1xuICAgICAgICAgIHRoaXMuX2F4b1NuYWNrQmFyLm9wZW5TbmFja0JhcignT29wcyFTb21ldGhpbmcgd2VudCB3cm9uZyB3aGlsZSBjcmVhdGluZyB0aGUgYXBwJywgQXhvU25hY2tCYXJUeXBlLmVycm9yKTtcbiAgICAgICAgICBsb2FkaW5nRGlhbG9nUmVmLmNsb3NlKCk7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihBeG9TbmFja0JhclR5cGUuZXJyb3IpO1xuICAgICAgICB9XG4gICAgfSAgIFxuXG5cbiAgICBvcGVuRGVsZXRlQXBwRGlhbG9nKGFwcFZlcnNpb25JZDpudW1iZXIpe1xuICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDb25maXJtYXRpb25Nb2RhbENvbXBvbmVudCwge1xuICAgICAgICB3aWR0aDogJzMwJScsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHRpdGxlOiAnRGVsZXRlIEFwcCcsXG4gICAgICAgIG1lc3NhZ2U6ICdBcmUgeW91IHN1cmUgd2FudCB0byBkZWxldGUgdGhpcyBhcHA/JyxcbiAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6ICdEZWxldGUnLFxuICAgICAgICBjYW5jZWxCdXR0b25UZXh0OiAnQ2FuY2VsJyxcbiAgICAgICAgY29uZmlybUJ1dHRvblR5cGU6ICdkZWxldGUnXG4gICAgICB9LFxuICAgICAgcGFuZWxDbGFzczogJ2NvbmZpcm0tbW9kYWwtY29udGFpbmVyJ1xuICAgICAgfSk7XG5cbiAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgdGhpcy5kZWxldGVBcHAoYXBwVmVyc2lvbklkKTsgLy8gUHJvY2VlZCB3aXRoIGRlbGV0aW9uXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGRlbGV0ZUFwcChhcHBWZXJzaW9uSWQ6bnVtYmVyKTogdm9pZCB7XG4gICAgICB0aGlzLl9mbGF0dGVuU2VydmljZS5nZXRGbGF0dGVuRGF0YShhcHBWZXJzaW9uSWQpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl91bnN1YnNjcmliZUFsbCksXG4gICAgICAgICAgICAgIHN3aXRjaE1hcCgoZmxhdHRlbikgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKGZsYXR0ZW4gJiYgZmxhdHRlbi5hcHBJZCAhPT0gdW5kZWZpbmVkICYmIGZsYXR0ZW4udmVyc2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXBwSWQgPSBmbGF0dGVuLmFwcElkLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXBwVmVyc2lvbiA9IGZsYXR0ZW4udmVyc2lvbi50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFwcFY9YXBwVmVyc2lvbklkO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQXBwIHZlcnNpb24gSWQ6XCIrYXBwVmVyc2lvbklkKTtcblxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YT17XG4gICAgICAgICAgICAgICAgICAgICAgICBcIkFwcCBJZFwiIDogZmxhdHRlbi5hcHBJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiQXBwIE5hbWVcIiA6IGZsYXR0ZW4uYXBwTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiQXBwIHZlcnNpb25cIiA6IGZsYXR0ZW4udmVyc2lvblxuICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdGZXRjaGVkIGFwcCBkZXRhaWxzIGZyb20gZmxhdHRlbjonLCB7IGFwcElkLCBhcHBWZXJzaW9uIH0pO1xuICBcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbXBBcHBMaXN0U2VydmljZS5kZWxldGVBcHAoYXBwSWQsIGFwcFZlcnNpb24udG9TdHJpbmcoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFcnJvciBvY2N1cnJlZCB3aGlsZSBkZWxldGluZyBhcHA6JywgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgZXJyb3IsIGUuZy4sIGRpc3BsYXkgYSBtZXNzYWdlIG9yIHBlcmZvcm0gYWRkaXRpb25hbCBhY3Rpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0Vycm9yOiBmbGF0dGVuIG9iamVjdCBvciBpdHMgcHJvcGVydGllcyBhcmUgdW5kZWZpbmVkLicpO1xuICAgICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBmbGF0dGVuIG9yIGl0cyBwcm9wZXJ0aWVzIGFyZSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcignRmxhdHRlbiBvYmplY3Qgb3IgaXRzIHByb3BlcnRpZXMgYXJlIHVuZGVmaW5lZCcpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgc3VjY2VzcyByZXNwb25zZSBoZXJlIGlmIG5lZWRlZFxuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0RlbGV0ZSBhcHAgc3VjY2VzczonLCByZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgZGVsZXRlZCBhcHAgZnJvbSB0aGUgYXBwTGlzdFxuICAgICAgICAgICAgICAgICB0aGlzLmFwcExpc3QgPSB0aGlzLmFwcExpc3QuZmlsdGVyKGFwcCA9PiBhcHAuYXBwVmVyc2lvbklkICE9PSBhcHBWZXJzaW9uSWQpO1xuICAgICAgICAgICAgICAgICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ0FwcCBkZWxldGVkIHN1Y2Nlc3NmdWxseScsIEF4b1NuYWNrQmFyVHlwZS5zdWNjZXNzKTtcbiAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2luZ1NlcnZpY2UudHJhY2tFdmVudCgnQXBwIGRlbGV0ZWQnLCB0aGlzLmRhdGEpO1xuICAgICAgICAgICAgICAgICAgLy8gTWFudWFsbHkgdHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uIHRvIHVwZGF0ZSB0aGUgdmlld1xuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpOyAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgZXJyb3IgaGVyZSBpZiBuZWVkZWRcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0RlbGV0ZSBhcHAgZXJyb3I6JywgZXJyb3IpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgfVxuICAgIFxuICBcblxucHJpdmF0ZSBvcGVuTG9hZGluZ0RpYWxvZ1dpdGhNZXNzYWdlKG1lc3NhZ2U6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBcbiAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihMb2FkaW5nQXBwaW5zdGFsbENvbXBvbmVudCwge1xuICAgIHdpZHRoOiAnNTAwcHgnLFxuICAgIFxuICAgIHBhbmVsQ2xhc3M6ICdhcHAtbG9hZGluZy1kaWFsb2cnLFxuICAgIGRhdGE6IHsgbWVzc2FnZSwgdHlwZTogJ1lvdXIgYXBwIGlzIGJlaW5nIFB1Ymxpc2hlZC4uLicgfSxcbiAgfSk7XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBkaWFsb2dSZWYuY2xvc2UoKTtcbiAgICAgIC8vdGhpcy5vcGVuU3VjY2Vzc0RpYWxvZygndmVyc2lvbiBwdWJsaXNoZWQgc3VjY2Vzc2Z1bGx5IScpO1xuICAgICAgcmVzb2x2ZSgpOyAvLyBSZXNvbHZlIHRoZSBwcm9taXNlIGFmdGVyIGNsb3NpbmcgdGhlIGRpYWxvZ1xuICAgIH0sIDEzODAwKTsgLy8gMTMuNiBzZWNvbmRzIGluIG1pbGxpc2Vjb25kc1xuICB9KTtcbn1cblxucHJpdmF0ZSBvcGVuU3VjY2Vzc0RpYWxvZyhtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgLy9cbiAgdGhpcy5fZmxhdHRlblNlcnZpY2UuZmxhdHRlbiQucGlwZShcbiAgICB0YWtlKDEpLFxuICAgIHN3aXRjaE1hcCgoZmxhdHRlbikgPT4ge1xuICAgICAgaWYgKCFmbGF0dGVuIHx8ICFmbGF0dGVuLmFwcFZlcnNpb25JZCkge1xuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcignRmxhdHRlbiBvYmplY3Qgb3IgaXRzIHByb3BlcnRpZXMgYXJlIHVuZGVmaW5lZCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZvcmtKb2luKHtcbiAgICAgICAgZmxhdHRlbjogb2YoZmxhdHRlbiksXG4gICAgICAgIGFwcERldGFpbHM6IHRoaXMuX21wQXBwTGlzdFNlcnZpY2UuZmV0Y2hBcHBEZXRhaWxzKGZsYXR0ZW4uYXBwVmVyc2lvbklkLCB0aGlzLmNvbW1vbkxpYkNvbmZpZy5heG9uYXRvclgxVXJsKS5waXBlKFxuICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBhcHAgZGV0YWlsczonLCBlcnJvcik7XG4gICAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgfSk7XG4gICAgfSlcbiAgKS5zdWJzY3JpYmUoKHsgZmxhdHRlbiwgYXBwRGV0YWlscyB9KSA9PiB7XG4gICAgY29uc29sZS5sb2coJ2ZldGNoQXBwRGV0YWlscyBmdW5jdGlvbiBjYWxsZWQgNCcpO1xuICAgIHRoaXMuaXNBcHBDaGFuZ2VkQWZ0ZXJQdWJsaXNoID0gYXBwRGV0YWlscz8uZGF0YT8uZGV0YWlscz8uaXNfYXBwX2NoYW5nZWRfZWRpdGVkX2FmdGVyX3B1Ymxpc2ggfHwgZmFsc2U7IC8vIFNldCBpc0FwcENoYW5nZWRBZnRlclB1Ymxpc2ggYmFzZWQgb24gdGhlIEFQSSByZXNwb25zZVxuICAgIC8vIEZldGNoIHRoZSBtaW5vciB2ZXJzaW9uIGZyb20gZ2V0VmVyc2lvbkxpc3RcbiAgICB0aGlzLl9jb21tb25TZXJ2aWNlLmdldFZlcnNpb25MaXN0KGZsYXR0ZW4uYXBwSWQsIGZsYXR0ZW4udmVyc2lvbikuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGxldCBhcHBNaW5vclZlcnNpb24gPSAnVW5rbm93bic7IC8vIERlZmF1bHQgdmFsdWUgaWYgbWlub3IgdmVyc2lvbiBpcyBub3QgZm91bmRcbiAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LnYgJiYgcmVzdWx0LnYudmVyc2lvbnNsaXN0ICYmIHJlc3VsdC52LnZlcnNpb25zbGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGFwcE1pbm9yVmVyc2lvbiA9IHJlc3VsdC52LnZlcnNpb25zbGlzdFswXS5hcHBtaW5vcnZlcnNpb247XG4gICAgICB9XG4gICAgICBjb25zdCBhcHBOYW1lID0gZmxhdHRlbj8uYXBwTmFtZSB8fCAnWW91ciBBcHAnO1xuICAgICAgICBjb25zdCBhcHBWZXJzaW9uID0gZmxhdHRlbj8udmVyc2lvbiB8fCAndmVyc2lvbic7XG4gICAgICAgIGNvbnN0IHN1Y2Nlc3NNZXNzYWdlID0gYEFwcDogJHthcHBOYW1lfSB2ZXJzaW9uICR7YXBwTWlub3JWZXJzaW9ufSBpcyBJbnN0YWxsZWQgc3VjY2Vzc2Z1bGx5LmA7XG4gICAgICAgIGNvbnN0IGFwcGhlYWRpbmcgPWBJbnN0YWxsZWRgXG4gICAgICAgIGNvbnN0IHN1Y2Nlc3NEaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFN1Y2Nlc3NEaWFsb2dDb21wb25lbnQsIHtcbiAgICAgICAgICB3aWR0aDogJzUwMHB4JyxcbiAgICAgICAgICBkYXRhOiB7IG1lc3NhZ2U6IHN1Y2Nlc3NNZXNzYWdlfVxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmNhcGl0YWxpemVXb3JkcyhzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBzdHJcbiAgICAuc3BsaXQoJyAnKVxuICAgIC5tYXAod29yZCA9PiB3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKSlcbiAgICAuam9pbignICcpO1xufVxuXG5cbiAgLyoqXG4gICAqIE9uIGRlc3Ryb3lcbiAgICovXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIC8vIFVuc3Vic2NyaWJlIGZyb20gYWxsIHN1YnNjcmlwdGlvbnNcbiAgICB0aGlzLl91bnN1YnNjcmliZUFsbC5uZXh0KCk7XG4gICAgdGhpcy5fdW5zdWJzY3JpYmVBbGwuY29tcGxldGUoKTtcbiAgfVxuXG4gIGRpc2FibGVRUihhcHBWZXJzaW9uSWQ6IGFueSAsIGluZGV4OiBudW1iZXIpe1xuICAgIGxldCBkYXRhID0ge1xuICAgICAgYXBwVmVyc2lvbklkIDogYXBwVmVyc2lvbklkXG4gICAgfTtcbiAgXG4gICAgdGhpcy5fZGF0YVZpZXdGaWx0ZXJzU2VydmljZS5kaXNhYmxlUVIoZGF0YSlcbiAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIHRoaXMuX2F4b1NuYWNrQmFyLm9wZW5TbmFja0JhcignUVIgY29kZSBkaXNhYmxlZCBzdWNjZXNzZnVsbHknLCBBeG9TbmFja0JhclR5cGUuc3VjY2Vzcyk7XG4gICAgICAgICAgdGhpcy5fbG9nZ2luZ1NlcnZpY2UudHJhY2tFdmVudCgnUVIgRGlzYWJsZWQnLHtyZXNwb25zZX0pO1xuICAgICAgICAgIHRoaXMuYXBwTGlzdFtpbmRleF0ucXJfc3RhdHVzID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9LFxuICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvcjonLCBlcnJvcik7XG4gICAgICAgICAgLy8gSGFuZGxlIHRoZSBlcnJvclxuICAgICAgICB9XG4gICAgICApOyAgXG4gIH1cblxuICBkaXNhYmxlUVJEaWFsb2coYXBwVmVyc2lvbklkOiBhbnksIGluZGV4OiBudW1iZXIpe1xuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQ29uZmlybWF0aW9uTW9kYWxDb21wb25lbnQsIHtcbiAgICAgIHdpZHRoOiAnMzAlJyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgdGl0bGU6ICdEaXNhYmxlIFFSJyxcbiAgICAgICAgbWVzc2FnZTogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkaXNhYmxlIFFSIGZvciB0aGlzIGZvcm0/JyxcbiAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6ICdEaXNhYmxlJyxcbiAgICAgICAgY2FuY2VsQnV0dG9uVGV4dDogJ0NhbmNlbCcsXG4gICAgICAgIGNvbmZpcm1CdXR0b25UeXBlOiAnZGVsZXRlJ1xuICAgICAgfSxcbiAgICAgIHBhbmVsQ2xhc3M6ICdjb25maXJtLW1vZGFsLWNvbnRhaW5lcidcbiAgICB9KTtcbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlUVIoYXBwVmVyc2lvbklkLCBpbmRleCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnZXRVc2VyUGVybWlzc2lvbnMoKSB7XG4gICAgdGhpcy5fY29tbW9uU2VydmljZS5nZXRVc2VyRGV0YWlsKHRydWUpLnN1YnNjcmliZShcbiAgICAgIChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09ICdzdWNjZXNzJyAmJiByZXNwb25zZS51ZCkge1xuICAgICAgICAgIHRoaXMucGVybWlzc2lvbnMgPSByZXNwb25zZS51ZC5wZXJtaXNzaW9uczsgLy8gRXh0cmFjdCBwZXJtaXNzaW9uc1xuICAgICAgICAgIHRoaXMuaGFzT3JnVXNlckFjY2VzcyA9IHRoaXMucGVybWlzc2lvbnMuaW5jbHVkZXMoJ09SR19JQU0nKTsgLy8gQ2hlY2sgaWYgJ09SR19JQU0nIGlzIGluIHRoZSBwZXJtaXNzaW9ucyBhcnJheVxuICAgICAgICAgIFxuICAgICAgICAgIC8vIFNob3cgb3ZlcmxheSBvbmx5IGlmICdBQ0NFU1NfV0VCX1BPUlRBTCcgcGVybWlzc2lvbiBpcyBub3QgcHJlc2VudFxuICAgICAgICAgIHRoaXMuc2hvd1dlYlBvcnRhbEFjY2Vzc092ZXJsYXkgPSAhdGhpcy5wZXJtaXNzaW9ucy5pbmNsdWRlcygnQUNDRVNTX1dFQl9QT1JUQUwnKTtcbiAgICAgICAgICB0aGlzLmhhc0FwcEJ1aWxkZXJQZXJtaXNzaW9uID0gdGhpcy5wZXJtaXNzaW9ucy5pbmNsdWRlcyhcIkFQUF9CVUlMREVSXCIpICYmIHRoaXMucGVybWlzc2lvbnMuaW5jbHVkZXMoXCJBQ0NFU1NfV0VCX1BPUlRBTFwiKTtcblxuICAgICAgICAgIGNvbnNvbGUubG9nKCdVc2VyIFBlcm1pc3Npb25zOicsIHRoaXMucGVybWlzc2lvbnMpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdJcyBCdWlsZGVyIEFjY2VzczonLCB0aGlzLmhhc09yZ1VzZXJBY2Nlc3MpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIHVzZXIgZGV0YWlsczonLCBlcnJvcik7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuICBpc1Jlc3RyaWN0ZWRVcmwoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcmVzdHJpY3RlZFVybHMgPSBbXG4gICAgICAnaHR0cHM6Ly9hbmRyb21lZGEtY29udGFpbmVyLXFhLmF4b25hdG9yLmNvbS9hcHBzJyxcbiAgICAgICdodHRwczovL2xvY2FsaG9zdDo0MjAxL2FwcHMnLFxuICAgICAgJ2h0dHBzOi8vd2ViLmF4b25hdG9yLmNvbSdcbiAgICBdO1xuICAgIHJldHVybiByZXN0cmljdGVkVXJscy5pbmNsdWRlcyh3aW5kb3cubG9jYXRpb24uaHJlZik7XG4gIH1cbn1cblxuIiwiPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZmxleC1hdXRvIGgtZnVsbC1hcHBMaXN0IG15LWFwcC1saXN0IG92ZXJmbG93LWhpZGRlbiBwYWdlLWJhY2tncm91bmQgYXhvLWZvbnRcIj5cbiAgICA8IS0tIEhlYWRlciAtLT5cbiAgICA8ZGl2IGNsYXNzPVwic3RpY2t5IHRvcC0wIGJnLXdoaXRlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhcHAtbGlzdC1tYWluLWhlYWRlciByZWxhdGl2ZSBmbGV4IGZsZXgtMCBoLTEyIHotNDkgYm94LWJvcmRlciBweC02XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWF1dG8gaXRlbXMtY2VudGVyIG1pbi13LTBcIj4gPGltZyBjbGFzcz1cInctMzYgaC03XCIgc3JjPVwiYXNzZXRzL2ltYWdlcy9sb2dvL2F4by1sb2dvLnN2Z1wiIGFsdD1cIkxvZ28gaW1hZ2VcIj4gPHNwYW4gY2xhc3M9XCJiZXRhXCI+QmV0YTwvc3Bhbj4gPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWF1dG8ganVzdGlmeS1lbmQgaXRlbXMtY2VudGVyIG1pbi13LTAgZ2FwLTNcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBjbGFzcz1cIm10LTEuNVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gc3ZnSWNvbj1cImF4b19zZWFyY2hcIj48L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGNsYXNzPVwibXQtMS41XCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGF4b19ub3RpZmljdGlvbi0yXCIgbWF0VG9vbHRpcD1cIk5vdGlmaWNhdGlvblwiIHN2Z0ljb249XCJheG9fbm90aWZpY3Rpb24tMlwiPjwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPCEtLSBvbmNlIHdlIGZpeCBpZGVudGl0eSBzZXJ2ZXIgQVBJLCB0aGlzIGNvZGUgd2lsbCBiZSBuZWVkZWQgYWdhaW5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1wiIG1hdC1pY29uLWJ1dHRvbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwidXNlclByb2ZpbGUwOU1lbnVcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInVzZXJJbWFnZTsgZWxzZSBpc0VtcHR5SW1hZ2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJiYXNlVXJsICsgJ2ltYWdlcy8nKyB1c2VySW1hZ2VcIiBvbkVycm9yID1cInRoaXMuc3JjPSdhc3NldHMvaWNvbnMvb3JnYW5pemF0aW9uLnBuZydcIiBjbGFzcz1cImlubGluZSBvYmplY3QtY292ZXIgdy03IGgtNyBtci0yIG9yZ2FuaXphdGlvbkljb25cIiBhbHQ9XCJhdnRhclwiPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNpc0VtcHR5SW1hZ2U+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICBjbGFzcz1cImVtcHR5LWFwcC1pY29uXCI+e3sgKHVzZXJbJ0ZpcnN0TmFtZSddKS5jaGFyQXQoMCkgKyBcIlwiICsgICh1c2VyWydMYXN0TmFtZSddKS5jaGFyQXQoMCkgfCB1cHBlcmNhc2UgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPG1hdC1tZW51ICN1c2VyUHJvZmlsZTA5TWVudT1cIm1hdE1lbnVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIGNsYXNzPVwiaC1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidXNlckltYWdlOyBlbHNlIGlzRW1wdHlQcm9maWxlSW1hZ2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwib3JnYW5pemF0aW9uSWNvblwiIFtzcmNdPVwiYmFzZVVybCArICdpbWFnZXMvJysgdXNlckltYWdlXCIgYWx0PVwiXCIgb25FcnJvciA9XCJ0aGlzLnNyYz0nYXNzZXRzL2ljb25zL29yZ2FuaXphdGlvbi5wbmcnXCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2lzRW1wdHlQcm9maWxlSW1hZ2U+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gIGNsYXNzPVwidXNlckVtcHR5SWNvblwiPnt7ICh1c2VyWydGaXJzdE5hbWUnXSkuY2hhckF0KDApICsgXCJcIiArICAodXNlclsnTGFzdE5hbWUnXSkuY2hhckF0KDApIHwgdXBwZXJjYXNlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmxpbmUtZ3JpZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidXNlci1uYW1lLXRpdGxlIFwiPnt7IHVzZXJFbWFpbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVzZXItZW1haWxpZCBcIj57eyB1c2VyTmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIGNsYXNzPVwib3JnYW5pemF0aW9uLXNlY3Rpb25cIiAoY2xpY2spPVwic2lnbk91dCgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxvZ291dC10aXRsZVwiPkxvZ291dDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9tYXQtbWVudT4gLS0+XG5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XCIgbWF0LWljb24tYnV0dG9uIFttYXRNZW51VHJpZ2dlckZvcl09XCJ1c2VyUHJvZmlsZTA5TWVudVwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidXNlckltYWdlOyBlbHNlIGlzRW1wdHlJbWFnZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImJhc2VVcmwgKyB1c2VySW1hZ2VcIiBvbkVycm9yID1cInRoaXMuc3JjPSdhc3NldHMvaWNvbnMvb3JnYW5pemF0aW9uLnN2ZydcIiBjbGFzcz1cIm9yZ2FuaXphdGlvbkljb25cIiBhbHQ9XCJhdnRhclwiPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNpc0VtcHR5SW1hZ2U+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICBjbGFzcz1cInVwcGVyY2FzZSBmb250LW1lZGl1bSBjdXJzb3ItcG9pbnRlciB0ZXh0LXNtIGgtOCB3LTggZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIgbWwtMiBiZy1ncmF5LTMwMCByb3VuZGVkLWZ1bGxcIj57eyAodXNlclsnZm5hbWUnXSkuY2hhckF0KDApICsgXCJcIiArICAodXNlclsnbG5hbWUnXSkuY2hhckF0KDApIHwgdXBwZXJjYXNlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxtYXQtbWVudSAjdXNlclByb2ZpbGUwOU1lbnU9XCJtYXRNZW51XCIgYmFja2Ryb3BDbGFzcz1cImFwcC1saXN0LW1hdC1tZW51LXBhbmVsLWNsYXNzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSBjbGFzcz1cImgtZnVsbCB1c2VyLWluZm9cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ1c2VySW1hZ2U7IGVsc2UgaXNFbXB0eVByb2ZpbGVJbWFnZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJvcmdhbml6YXRpb25JY29ucHJvZmlsZVwiIFtzcmNdPVwiYmFzZVVybCArIHVzZXJJbWFnZVwiIGFsdD1cIlwiIG9uRXJyb3IgPVwidGhpcy5zcmM9J2Fzc2V0cy9pY29ucy9vcmdhbml6YXRpb24uc3ZnJ1wiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNpc0VtcHR5UHJvZmlsZUltYWdlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICBjbGFzcz1cInVzZXJFbXB0eUljb25cIj57eyAodXNlclsnZm5hbWUnXSkuY2hhckF0KDApICsgXCJcIiArICAodXNlclsnbG5hbWUnXSkuY2hhckF0KDApIHwgdXBwZXJjYXNlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmxpbmUtZ3JpZCBweS0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1c2VyLWVtYWlsaWRcIj57eyB1c2VyRW1haWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1c2VyLW5hbWUtdGl0bGVcIj57eyB1c2VyTmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1kaXZpZGVyIGNsYXNzPVwibXktMFwiPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSBjbGFzcz1cInVzZXItbG9nb3V0LWJ0biBvcmdhbml6YXRpb24tYnRuXCIgKGNsaWNrKT1cIm5hdmlnYXRldG9PcmdhbmlhdGlvbigpXCIgKm5nSWY9XCJoYXNPcmdVc2VyQWNjZXNzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxtYXQtaWNvbiBbc3ZnSWNvbl09XCInaGVyb2ljb25zX291dGxpbmU6dXNlci1ncm91cCdcIj48L21hdC1pY29uPiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibG9nb3V0LWxhYmVsXCI+T3JnYW5pemF0aW9uIFVzZXJzPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSBjbGFzcz1cInVzZXItbG9nb3V0LWJ0biBvcmdhbml6YXRpb24tYnRuXCIgKGNsaWNrKT1cIm5hdmlnYXRldG9PcmdhbmlhdGlvblNldHRpbmdzKClcIiAqbmdJZj1cImhhc09yZ1VzZXJBY2Nlc3NcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPG1hdC1pY29uIFtzdmdJY29uXT1cIidoZXJvaWNvbnNfb3V0bGluZTp1c2VyLWdyb3VwJ1wiPjwvbWF0LWljb24+IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsb2dvdXQtbGFiZWxcIj5Pcmdhbml6YXRpb24gU2V0dGluZ3M8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIGNsYXNzPVwidXNlci1sb2dvdXQtYnRuIGJpbGxpbmctYnRuXCIgKGNsaWNrKT1cIm5hdmlnYXRlVG9CaWxsaW5nKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPG1hdC1pY29uIFtzdmdJY29uXT1cIidoZXJvaWNvbnNfb3V0bGluZTpjcmVkaXQtY2FyZCdcIj48L21hdC1pY29uPiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibG9nb3V0LWxhYmVsXCI+QmlsbGluZzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1kaXZpZGVyIGNsYXNzPVwibXktMFwiPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSBjbGFzcz1cInVzZXItbG9nb3V0LWJ0blwiIChjbGljayk9XCJzaWduT3V0KClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPG1hdC1pY29uIFtzdmdJY29uXT1cIidoZXJvaWNvbnNfb3V0bGluZTpsb2dvdXQnXCI+PC9tYXQtaWNvbj4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxvZ291dC1sYWJsZVwiPkxvZ291dDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICA8L21hdC1tZW51PlxuXG5cblxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8IS0tIEhlYWRlciAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFwcC1saXN0LW1haW4tc3ViaGVhZGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXBwLWxpc3QtaGVhZGVyIHJlbGF0aXZlIGZsZXggZmxleC0wIGl0ZW1zLWNlbnRlciB6LTQ5IGJveC1ib3JkZXIgcHgtNCBzbTpweC02XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1hdXRvIGl0ZW1zLWNlbnRlciBtaW4tdy0wIGdhcC0zXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBob3ZlcjpiZy1ncmF5LTEwMCBwLTIgcm91bmRlZC1sZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJzdGFuZGFyZFwiIGNsYXNzPVwic206dy1mdWxsIGZsZXggaXRlbXMtY2VudGVyIG9yZ2FuaXphdGlvbi1tYXQtc2VsZWN0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgWyhuZ01vZGVsKV09XCJzZWxlY3RlZE9yZ2FuaXphdGlvblwiIHBsYWNlaG9sZGVyPVwic2VsZWN0IE9yZ2FuaXphdGlvblwiIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QtdHJpZ2dlciBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyXCIgKm5nSWY9XCJzZWxlY3RlZE9yZ2FuaXphdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cIm9yZ2FuaXphdGlvbkljb25cIiBhbHQ9XCJcIiBbc3JjXT1cIihzZWxlY3RlZE9yZ2FuaXphdGlvbi5pY29uLmluZGV4T2YoJ2h0dHBzOi8vJykgIT09IC0xKSA/IHNlbGVjdGVkT3JnYW5pemF0aW9uLmljb24gOiBiYXNlVXJsICsgc2VsZWN0ZWRPcmdhbml6YXRpb24uaWNvblwiIG9uRXJyb3IgPVwidGhpcy5zcmM9J2Fzc2V0cy9pY29ucy9vcmdhbml6YXRpb24uc3ZnJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJvcmctbmFtZVwiIFttYXRUb29sdGlwXT1cInNlbGVjdGVkT3JnYW5pemF0aW9uLm5hbWVcIj4ge3sgc2VsZWN0ZWRPcmdhbml6YXRpb24ubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQ3VzdG9tIGFycm93IGljb24gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxtYXQtaWNvbiBjbGFzcz1cImRyb3Bkb3duLWFycm93XCIgc3ZnSWNvbj1cImRyb3Bkb3duLWFycm93XCI+PC9tYXQtaWNvbj4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3dpdGNoIGZsZXggcC0yIGdhcC0yIHBsLTQgaXRlbXMtY2VudGVyIGN1cnNvci1wb2ludGVyIFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJheG9fc3dpdGNoXCIgY2xhc3M9XCJzd2l0Y2gtaWNvbiBoLTggdy04XCI+PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3dpdGNoLXNwYW5cIj5Td2l0Y2ggT3JnYW5pemF0aW9uPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gIGNsYXNzPVwib3JnYW5pemF0aW9uTGlzdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgb3JnYW5pemF0aW9uIG9mIG9yZ2FuaXphdGlvbkxpc3Q7IGxldCBvcmdhbml6YXRpb25JbmRleCA9IGluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJvcmdhbml6YXRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInN3aXRjaEFjY291bnQob3JnYW5pemF0aW9uLmlkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRdPVwic2VsZWN0ZWRPcmdhbml6YXRpb24uaWQgPT09IG9yZ2FuaXphdGlvbi5pZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3JnLWljb24tc3BhblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJvcmdhbml6YXRpb25JY29uXCIgYWx0PVwiXCIgW3NyY109XCIob3JnYW5pemF0aW9uLmljb24uaW5kZXhPZignaHR0cHM6Ly8nKSAhPT0gLTEpID8gb3JnYW5pemF0aW9uLmljb24gOiBiYXNlVXJsICsgb3JnYW5pemF0aW9uLmljb25cIiBvbkVycm9yID1cInRoaXMuc3JjPSdhc3NldHMvaWNvbnMvb3JnYW5pemF0aW9uLnN2ZydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNtOnRleHQtbGcgdGV4dC14cyBmb250LW1lZGl1bSBvcmctbmFtZVwiPiB7eyBvcmdhbml6YXRpb24ubmFtZX19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzbTp0ZXh0LWxnIHRleHQteHMgZm9udC1tZWRpdW0gbWFpbi10aXRsZVwiPk15IEFwcHM8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImhhc0FwcEJ1aWxkZXJQZXJtaXNzaW9uICYmICFpc1Jlc3RyaWN0ZWRVcmwoKVwiIGNsYXNzPVwicHJpbWFyeS1idG4gYXhvLWZvbnQgdy0yOFwiIChjbGljayk9XCJvcGVuQ3JlYXRlQXBwRGlhbG9nKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5DcmVhdGUgQXBwPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gQXBwIExpc3Qgd2l0aCBPdmVybGF5IC0tPlxuICAgIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZSBmbGV4LWF1dG8gYXBwLWxpc3QgaC1mdWxsLWFwcExpc3QgcHgtNCBweS01IHNtOnB5LTggb3ZlcmZsb3ctYXV0b1wiPlxuICAgICAgICA8IS0tIE92ZXJsYXkgZm9yIHdlYiBwb3J0YWwgYWNjZXNzIC0tPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd1dlYlBvcnRhbEFjY2Vzc092ZXJsYXlcIiBjbGFzcz1cInBlcm1pc3Npb24tb3ZlcmxheVwiPlxuICAgICAgICAgICAgWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0byBhY2Nlc3MgV2ViIFBvcnRhbC5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFwcExpc3QubGVuZ3RoOyBlbHNlIG5vdEVtcHR5QXBwTGlzdFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFwcC1ncmlkIGl0ZW1zLXN0YXJ0IGNhcmQtYm9keSB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1vdXRlci1kaXZcIiAqbmdGb3I9XCJsZXQgYXBwRGV0YWlsIG9mIGFwcExpc3Q7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgPGZ1c2UtY2FyZCBjbGFzcz1cImZ1c2UtY2FyZC1hcHAgZmxleCBmbGV4LWNvbCBnYXAtMiBmaWx0ZXItbGlzdFwiIFtuZ1N0eWxlXT1cInsnYmFja2dyb3VuZCc6IGFwcERldGFpbC5ncmFkaWVudH1cIiAoY2xpY2spPVwib3BlbkFwcChhcHBEZXRhaWwuYXBwVmVyc2lvbklkKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImFwcERldGFpbC5xcl9zdGF0dXMgPT09IHRydWUgJiYgc2hvd1FSSWNvblwiIChjbGljayk9XCJkaXNhYmxlUVJEaWFsb2coYXBwRGV0YWlsLmFwcFZlcnNpb25JZCwgaSk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcIiBjbGFzcz1cImZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIGJvcmRlci0wIHJvdW5kZWQtZnVsbCBxci1pY29uIGJnLXdoaXRlIGFic29sdXRlIHRvcC00IHJpZ2h0LTRcIiAgW25nQ2xhc3NdPVwieydhcHBIb3Zlcic6IG9wZW5Qb3B1cE1lbnUgPT09IGFwcERldGFpbC5hcHBWZXJzaW9uSWR9XCIgc3R5bGU9XCJwYWRkaW5nOiAuM3JlbTtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIG1hdFRvb2x0aXA9XCJEaXNhYmxlIFFSXCIgIHNyYz1cImFzc2V0cy9pY29ucy9heG8vc2N1bHB0b3IvYXhvX3FyY29kZV9uZXcuc3ZnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImgtMyB3LTMgb2JqZWN0LWNvdmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgY2FyZCBqdXN0aWZ5LWJldHdlZW5cIiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAtMjBweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZG90cy12ZXJ0aWNhbC1hcHBcIiAqbmdJZj1cInNob3dEb3RzT3B0aW9uXCIgIFtuZ0NsYXNzXT1cInsnYXBwSG92ZXInOiBvcGVuUG9wdXBNZW51ID09PSBhcHBEZXRhaWwuYXBwVmVyc2lvbklkfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7c2V0T3BlblBvcHVwTWVudShhcHBEZXRhaWwuYXBwVmVyc2lvbklkKVwiIG1hdC1pY29uLWJ1dHRvbiBbZGlzYWJsZVJpcHBsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdE1lbnVUcmlnZ2VyRm9yXT1cImNvbnRleHRNZW51XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBbc3ZnSWNvbl09XCInaGVyb2ljb25zX3NvbGlkOmRvdHMtdmVydGljYWwnXCIgc3R5bGU9XCJjb2xvcjogI0ZGRkZGRjtcIj48L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbWVudSAjY29udGV4dE1lbnU9XCJtYXRNZW51XCIgY2xhc3M9XCJjdXN0b21pemVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJyZXBvcnQtbWVudVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwib3BlblFSQ29kZURpYWxvZygpXCIgIGNsYXNzPVwicHktMCBwbC00IHByLTZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCJhc3NldHMvaWNvbnMvb3B0aW9ucy1tb2JpbGUuc3ZnXCIgYWx0PVwiXCIgY2xhc3M9XCJoLTYgdy02IGlubGluZS1ibG9jayBtci0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlVzZSBPbiBNb2JpbGU8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJyZXBvcnQtbWVudVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwib3BlbkRlbGV0ZUFwcERpYWxvZyhhcHBEZXRhaWwuYXBwVmVyc2lvbklkKVwiICBjbGFzcz1cInB5LTAgcGwtNCBwci02XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiYXNzZXRzL2ljb25zL29wdGlvbnMtZGVsZXRlLnN2Z1wiIGFsdD1cIlwiIGNsYXNzPVwiaC02IHctNiBpbmxpbmUtYmxvY2sgbXItMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5EZWxldGU8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbWVudT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaW5uZXItZGl2XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGRhc2hib2FyZC1pY29uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJiYXNlVXJsICsgYXBwRGV0YWlsLmljb25cIiBvbkVycm9yID1cInRoaXMuc3JjPSdodHRwczovL3N0YXRpYy5heG9uYXRvci5jb20vc3RhdGljL2RlZmF1bHRfaWNvbnMvYXBwLnBuZydcIiBhbHQ9XCJMb2dvIGltYWdlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXBwLWluZm9cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJsb2NrIGFwcC10aXRsZS13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXBwX3RpdGxlIGZvbnQtbWVkaXVtIGxlYWRpbmctdGlnaHQgYXhvLWZvbnRcIiBbbWF0VG9vbHRpcF09XCJhcHBEZXRhaWwubmFtZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7YXBwRGV0YWlsLm5hbWV9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXBwX3ZlcnNpb24gdy1mdWxsIGxlYWRpbmctdGlnaHQgdGV4dC14c1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdiB7e2FwcERldGFpbC52ZXJzaW9uLnNwbGl0KCcuJylbMF19fS57e3BhZFplcm8oYXBwRGV0YWlsLm1pbm9yVmVyc2lvbil9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3VzdC1vcGVuIGZsZXgganVzdGlmeS1lbmQgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCBzcGFjZS14LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhICpuZ0lmPVwic2hvd0N1c3RvbWl6ZVwiIHJvdXRlckxpbms9XCJcIiBjbGFzcz1cImN1c3RvbWl6ZSB0ZXh0LWxlZnQgbGVhZGluZy10aWdodCB0ZXh0LXhzXCI+Q3VzdG9taXplPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm9wZW4tYnV0dG9uXCI+T3BlbjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Z1c2UtY2FyZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgXG4gICAgPC9kaXY+XG4gICAgPG5nLXRlbXBsYXRlICNub3RFbXB0eUFwcExpc3Q+XG4gICAgICAgIDwhLS0gaWYgYXBwIGxpc3QgaXMgZW1wdHkgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGZsZXgtYXV0byBtaW4tdy0wIHJlbGF0aXZlIGl0ZW1zLWNlbnRlclwiICNub3RFbXB0eUFwcExpc3Q+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyIGZsZXggZmxleC1jb2wgbXktYXV0byBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgbm8tYXBwLWNyZWF0ZWRcIj5cbiAgICAgICAgICAgICAgICA8aDI+Tm8gYXBwIGNyZWF0ZWQgeWV0ITwvaDI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8YXBwLWNvbW1vbi1mb290ZXIgW3Nob3dBZGRCdG5dPVwic2hvd0FkZEJ0blwiIFtzaG93VXBncmFkZUJ0bl09XCJ0cnVlXCI+PC9hcHAtY29tbW9uLWZvb3Rlcj5cbiAgICA8IS0tIDxkaXYgY2xhc3M9XCJmaXhlZCBib3R0b20tMCBmbGV4IGZsZXgtMCBpdGVtcy1jZW50ZXIganVzdGlmeS1zdGFydCB3LWZ1bGwgaC0xNCBweC00IG1kOnB4LTYgei00OSBiZy13aGl0ZSBhcHAtbGlzdC1mb290ZXJcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LW1lZGl1bSB0ZXh0LXNlY29uZGFyeVwiPkF4b25hdG9yICZjb3B5OyB7e2N1cnJlbnRZZWFyfX08L3NwYW4+XG4gICAgPC9kaXY+IC0tPlxuPC9kaXY+XG4iXX0=
1204
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2F4LWNvbW1vbi11aS1saWIvc3JjL2xpYi9hcHAtbGlzdC9hcHAtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvYXgtY29tbW9uLXVpLWxpYi9zcmMvbGliL2FwcC1saXN0L2FwcC1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGlDQUFpQztBQUNqQyx1REFBdUQ7QUFDdkQsMEJBQTBCO0FBQzFCLHFFQUFxRTtBQUVyRSxPQUFPLEVBQUUsU0FBUyxFQUFVLGlCQUFpQixFQUFhLEtBQUssRUFBRSxNQUFNLEVBQWlCLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0osT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDN0QsT0FBTyxFQUFFLE1BQU0sRUFBcUIsTUFBTSxpQkFBaUIsQ0FBQztBQUM1RCxPQUFPLEVBQWMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2RCxPQUFPLEVBQUUsVUFBVSxFQUFPLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzdGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFHeEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDekQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JE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Q0csWUFBWTtrQkFBckIsTUFBTTtZQUNHLGVBQWU7a0JBQXhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBhcnJvdy1wYXJlbnMgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9tZW1iZXItb3JkZXJpbmcgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJhZGl4ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtZnVuY3Rpb24tcmV0dXJuLXR5cGUgKi9cblxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIFZpZXdFbmNhcHN1bGF0aW9uLCBPbkRlc3Ryb3ksIElucHV0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIEV2ZW50RW1pdHRlciwgQ2hhbmdlRGV0ZWN0b3JSZWYsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1BVF9TRUxFQ1RfQ09ORklHIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcbmltcG9ydCB7IFJvdXRlciAsICBOYXZpZ2F0aW9uRXh0cmFzfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQXhvU25hY2tCYXJTZXJ2aWNlLCBBeG9TbmFja0JhclR5cGUgfSBmcm9tICcuLi9heG8tc25hY2stYmFyL2F4by1zbmFjay1iYXIuc2VydmljZSc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uL2NvcmUvYXV0aC9hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuLi9jb3JlL3VzZXIvdXNlci5zZXJ2aWNlJztcbmltcG9ydCB7IFVzZXIgfSBmcm9tICcuLi9jb3JlL3VzZXIvdXNlci50eXBlcyc7XG5pbXBvcnQgeyBBcHBMaXN0RHRvIH0gZnJvbSAnLi9hcHAtbGlzdC1kdG8nO1xuaW1wb3J0IHsgTXlBcHBMaXN0U2VydmljZSB9IGZyb20gJy4vbXktYXBwLWxpc3Quc2VydmljZSc7XG5pbXBvcnQgeyBPcmdhbml6YXRpb25MaXN0RHRvIH0gZnJvbSAnLi9vcmdhbml6YXRpb24tbGlzdC1kdG8nO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IEZsYXR0ZW5TZXJ2aWNlIH0gZnJvbSAnLi4vZmxhdHRlbi1tb2R1bGUvZmxhdHRlbi5zZXJ2aWNlJztcbmltcG9ydCB7IElGbGF0dGVuIH0gZnJvbSAnLi4vY29tbW9uLXV0aWxzL2lGbGF0dGVuJztcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgQ29va2llU2VydmljZSB9IGZyb20gJ25neC1jb29raWUtc2VydmljZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBFbmxpZ2h0ZW5MaWJNb2R1bGUgfSBmcm9tICcuLi9lbmxpZ2h0ZW4tbGliL2VubGlnaHRlbi1saWIubW9kdWxlJztcbmltcG9ydCB7IFFyZGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vcXJkaWFsb2cvcXJkaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IExvZ2dpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbG9nZ2luZy5zZXJ2aWNlJztcbmltcG9ydCB7IExvYWRpbmdEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi9sb2FkaW5nLWRpYWxvZy9sb2FkaW5nLWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IExvYWRpbmdBcHBpbnN0YWxsQ29tcG9uZW50IH0gZnJvbSAnLi4vbG9hZGluZy1hcHBpbnN0YWxsL2xvYWRpbmctYXBwaW5zdGFsbC5jb21wb25lbnQnOyBcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tICcuLi9jb21tb24uc2VydmljZSc7XG5pbXBvcnQgeyBTdWNjZXNzRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vc3VjY2Vzcy1kaWFsb2cvc3VjY2Vzcy1kaWFsb2cuY29tcG9uZW50JzsgXG5pbXBvcnQgeyB0YWtlLCAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBmb3JrSm9pbiwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGxvY2FsZSB9IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBBcHBDcmVhdGVEaWFsb2dDb21wb25lbnRDb21wb25lbnQgfSBmcm9tICcuLi9hcHAtY3JlYXRlLWRpYWxvZy1jb21wb25lbnQvYXBwLWNyZWF0ZS1kaWFsb2ctY29tcG9uZW50LmNvbXBvbmVudCc7IFxuXG4vL2ltcG9ydCB7IENvbnNvbGUgfSBmcm9tICdjb25zb2xlJztcbmltcG9ydCB7IENvbW1vbkxpYkNvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vY29tbW9uLWxpYi1jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGF0YVZpZXdGaWx0ZXJzU2VydmljZSB9IGZyb20gJy4uL2RhdGEtdmlldy1saWIvZGF0YS12aWV3LWZpbHRlcnMvZGF0YS12aWV3LWZpbHRlcnMuc2VydmljZSc7XG5pbXBvcnQgeyBDb25maXJtYXRpb25Nb2RhbENvbXBvbmVudCB9IGZyb20gJy4uL3NoYXJlZC9jb21maXJtYXRpb24tbW9kYWwvY29uZmlybWF0aW9uLW1vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTdWJzY3JpYmVkUGxhbk5hbWUgfSBmcm9tICcuLi9zdWJzY3JpYmVkUGxhbk5hbWUuc2VydmljZSc7XG5pbXBvcnQgeyBTdHJpcGVTZXJ2aWNlIH0gZnJvbSAnLi4vc3RyaXBlLnNlcnZpY2UnO1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItYXBwLWxpc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vYXBwLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9hcHAtbGlzdC5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBNQVRfU0VMRUNUX0NPTkZJRyxcbiAgICAgIHVzZVZhbHVlOiB7IG92ZXJsYXlQYW5lbENsYXNzOiAnb3JnYW5pemF0aW9uLWxpc3Qtb3ZlcmxheS1wYW5lbCcgfSxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBcHBMaXN0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBjdXJyZW50T3JnOnN0cmluZztcbiAgQElucHV0KCkgYXBwTGlzdDogQXJyYXk8QXBwTGlzdER0bz47XG4gIEBJbnB1dCgpIGJhc2VVcmw6IHN0cmluZztcbiAgQElucHV0KCkgb3JnYW5pemF0aW9uTGlzdDogQXJyYXk8T3JnYW5pemF0aW9uTGlzdER0bz4gPSBbXTtcbiAgQElucHV0KCkgc2VsZWN0ZWRPcmdhbml6YXRpb246IE9yZ2FuaXphdGlvbkxpc3REdG87XG4gIEBJbnB1dCgpIHVzZXI6IFVzZXI7XG4gIEBJbnB1dCgpIGxpc3RUeXBlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHNob3dDcmVhdGVCdXR0b246Ym9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzaG93UVJJY29uOmJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc2hvd0RvdHNPcHRpb246Ym9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzaG93Q3VzdG9taXplOmJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc2hvd0FkZEJ0bjpib29sZWFuID0gZmFsc2U7XG4gIEBPdXRwdXQoKSBzd2l0Y2hBY2NvdW50RXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG9wZW5BcHBFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgdXBkYXRlTGlzdEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIC8vIHVzZXI6IFVzZXI7XG4gIGlzQXBwQ2hhbmdlZEFmdGVyUHVibGlzaDogYm9vbGVhbiA9IGZhbHNlO1xuICB1c2VyTmFtZTogc3RyaW5nO1xuICBhcHBWZXJzaW9uSWQ6IG51bWJlcjtcbiAgdXNlckVtYWlsOiBzdHJpbmc7XG4gIGZ1bGxWZXJzaW9uOiBzdHJpbmc7XG4gIGZ1bGxWZXJzaW9uczogc3RyaW5nW10gPSBbXTtcbiAgdXNlckltYWdlOiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZyA9ICcnO1xuICBtaW5vclZlcnNpb246IHN0cmluZyA9ICcnO1xuICBhcHBJZDogc3RyaW5nID0nJztcbiAgYnVpbGRlclVybDogc3RyaW5nO1xuICBvcGVuUG9wdXBNZW51OiBudW1iZXI7XG4gIGdyYWRpZW50cyA9IFtcbiAgICAncmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA4MCUgMjAlLCAjREI2RDgxLCAjQkY0NTgxKScsXG4gICAgJ3JhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgODAlIDIwJSwgIzQ0OTFEOSwgIzQ1NTlCRiknLFxuICAgICdyYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDgwJSAyMCUsICNFN0E3NzksICNBQTU1MjUpJyxcbiAgICAncmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA4MCUgMjAlLCAjNDREOTUzLCAjMEQ5MjEyKSdcbiAgXTtcbiAgY3VycmVudFVybCA9IGRvY3VtZW50LlVSTDtcbiAgYmFzZVVzcmwgPSBkb2N1bWVudC5iYXNlVVJJO1xuICByZWdleCA9IC9cXC9hcHBzXFwvKFxcZCspXFwvKFxcdyspLztcbiAgbWF0Y2ggPSB0aGlzLmN1cnJlbnRVcmwubWF0Y2godGhpcy5yZWdleCk7XG5cbiAgZGF0YSA9IHt9O1xuICBwcmV2aW91c09yZzpzdHJpbmc7XG5cbiAgLypcbiAgICAgKiBTdWJqZWN0IG9iamVjdCB3aGljaCBoZWxwcyB1bnN1YnNjcmliZSBhbGwgdGhlIHN1YnNjcmliZWQgb2JqZWN0cyBpbiB0aGUgY29tcG9uZW50XG4gICAgICovXG4gIHByaXZhdGUgX3Vuc3Vic2NyaWJlQWxsOiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdDxhbnk+KCk7XG4gIG9yZ2FuaXphdG9uSWQ6IG51bWJlcjtcbiAgdXNlclBlcm1pc3Npb25zOiBzdHJpbmdbXSA9IFtdOyAvLyBWYXJpYWJsZSB0byBob2xkIHVzZXIgcGVybWlzc2lvbnNcbiAgaGFzT3JnVXNlckFjY2VzczogYm9vbGVhbjtcbiAgY3VycmVudEFwcFZlcnNpb25JZDogc3RyaW5nO1xuICBzaG93V2ViUG9ydGFsQWNjZXNzT3ZlcmxheTogYm9vbGVhbiA9IGZhbHNlOyAvLyBGbGFnIHRvIGNvbnRyb2wgb3ZlcmxheSBkaXNwbGF5XG4gIHByaXZhdGUgaGFzQ2FsbGVkR2V0VXNlclBlcm1pc3Npb25zOiBib29sZWFuID0gZmFsc2U7IC8vIEZsYWcgdG8gdHJhY2sgaWYgdGhlIGZ1bmN0aW9uIGhhcyBiZWVuIGNhbGxlZFxuICBwZXJtaXNzaW9uczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxuICAgIHByaXZhdGUgX2NoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIF91c2VyU2VydmljZTogVXNlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb21tb25MaWJDb25maWc6IENvbW1vbkxpYkNvbmZpZ3VyYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgX21wQXBwTGlzdFNlcnZpY2U6IE15QXBwTGlzdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBfYXhvU25hY2tCYXI6IEF4b1NuYWNrQmFyU2VydmljZSxcbiAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLFxuICAgIHByaXZhdGUgX2ZsYXR0ZW5TZXJ2aWNlOiBGbGF0dGVuU2VydmljZSxcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsIC8vIEluamVjdCBIdHRwQ2xpZW50XG4gICAgcHJpdmF0ZSBfaHR0cENsaWVudDogSHR0cENsaWVudCxcbiAgICBwcml2YXRlIGNvb2tpZVNlcnZpY2U6IENvb2tpZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIF9sb2dnaW5nU2VydmljZSA6IExvZ2dpbmdTZXJ2aWNlLFxuICAgIHByaXZhdGUgX2NvbW1vblNlcnZpY2U6Q29tbW9uU2VydmljZSxcbiAgICBwcml2YXRlIF9kYXRhVmlld0ZpbHRlcnNTZXJ2aWNlOiBEYXRhVmlld0ZpbHRlcnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgX3N1YnNjcmliZWRQbGFuTmFtZTogU3Vic2NyaWJlZFBsYW5OYW1lLFxuICAgIHByaXZhdGUgc3RyaXBlU2VydmljZTogU3RyaXBlU2VydmljZSxcblxuICAgIFxuICApIHsgfVxuICAvKipcbiAgICogR2V0dGVyIGZvciBjdXJyZW50IHllYXJcbiAgICovXG4gIGdldCBjdXJyZW50WWVhcigpOiBudW1iZXIge1xuICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCk7XG4gIH1cblxuICBzZXRPcGVuUG9wdXBNZW51KGFwcElkKSB7XG4gICAgdGhpcy5vcGVuUG9wdXBNZW51ID0gYXBwSWQ7XG4gICAgY29uc3Qgb3ZlcmxheSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5jZGstb3ZlcmxheS1jb250YWluZXInKTtcbiAgICBvdmVybGF5LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgdGhpcy5vcGVuUG9wdXBNZW51ID0gdW5kZWZpbmVkO1xuICAgIH0pO1xuICB9XG5cbiAgb3BlblFSQ29kZURpYWxvZygpOiB2b2lkIHtcblxuICAgIGNvbnN0IHFyRGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihRcmRpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgd2lkdGg6ICcyNTBweCcsIC8vIEFkanVzdCB3aWR0aCBhcyBuZWVkZWRcbiAgICB9KTtcbiAgfVxuXG4gIG5hdmlnYXRldG9PcmdhbmlhdGlvbigpOiB2b2lkIHtcbiAgICBjb25zdCB1cmxNYXA6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgICAnbG9jYWxob3N0OjQyMDAnOiAnaHR0cHM6Ly9sb2NhbGhvc3Q6NDIwMC8nLFxuICAgICAgJ2xvY2FsaG9zdDo0MjAxJzogJ2h0dHBzOi8vbG9jYWxob3N0OjQyMDAvJyxcbiAgICAgICdhbmRyb21lZGEtYnVpbGRlci1xYS5heG9uYXRvci5jb20nOiAnaHR0cHM6Ly9hbmRyb21lZGEtYnVpbGRlci1xYS5heG9uYXRvci5jb20vJyxcbiAgICAgICdhbmRyb21lZGEtY29udGFpbmVyLXFhLmF4b25hdG9yLmNvbSc6ICdodHRwczovL2FuZHJvbWVkYS1idWlsZGVyLXFhLmF4b25hdG9yLmNvbS8nLFxuICAgICAgJ2J1aWxkZXIuYXhvbmF0b3IuY29tJzogJ2h0dHBzOi8vYnVpbGRlci5heG9uYXRvci5jb20vJyxcbiAgICAgICd3ZWIuYXhvbmF0b3IuY29tJzogJ2h0dHBzOi8vYnVpbGRlci5heG9uYXRvci5jb20vJ1xuICAgIH07XG4gICAgY29uc3QgdXJsOiBzdHJpbmcgPSB1cmxNYXBbd2luZG93LmxvY2F0aW9uLmhvc3RdIHx8ICcnO1xuICAgIGlmICh0aGlzLm1hdGNoKSB7XG4gICAgICBjb25zdCB1c2VyTGlzdFVybCA9IGBhcHBzLyR7dGhpcy5tYXRjaFsxXX0vdXNlcnNgOyAvLyBkeW5hbWljIHBhcnQgYmFzZWQgb24gbWF0Y2hcbiAgICAgIHdpbmRvdy5vcGVuKHVybCArIHVzZXJMaXN0VXJsLCAnX3NlbGYnKTsgLy8gb3BlbiBkeW5hbWljIFVSTFxuICAgIH0gZWxzZSB7XG4gICAgICB3aW5kb3cub3Blbih1cmwgKyAnb3JnYW5pemF0aW9uJywgJ19zZWxmJyk7IC8vIGZhbGxiYWNrIHRvIG9yZ2FuaXphdGlvbiByb3V0ZVxuICAgIH1cbiAgfSAgXG5cbiAgbmF2aWdhdGV0b09yZ2FuaWF0aW9uU2V0dGluZ3MoKTogdm9pZCB7XG4gICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlQnlVcmwoJ29yZ2FuaXphdGlvbi1zZXR0aW5ncycpO1xuICB9XG4gIFxuXG5cblxuICAvLyBkZWxldGVBcHAoYXBwSWQ6IHN0cmluZywgdmVyc2lvbjogc3RyaW5nKTogdm9pZCB7XG4gIC8vICAgdGhpcy5fbXBBcHBMaXN0U2VydmljZS5kZWxldGVBcHAoYXBwSWQsIHZlcnNpb24pXG4gIC8vICAgICAucGlwZShcbiAgLy8gICAgICAgdGFrZVVudGlsKHRoaXMuX3Vuc3Vic2NyaWJlQWxsKSxcbiAgLy8gICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgLy8gICAgICAgICBjb25zb2xlLmxvZygnRXJyb3Igb2NjdXJyZWQgd2hpbGUgZGVsZXRpbmcgYXBwOicsIGVycm9yKTtcbiAgLy8gICAgICAgICAvLyB0aGlzLl9zbmFja2JhclNldmljZS5vcGVuU25hY2tCYXIoJ0Vycm9yIG9jY3VycmVkIHdoaWxlIGRlbGV0aW5nIGFwcC4nLCBBeG9TbmFja0JhclR5cGUuZXJyb3IpO1xuICAvLyAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVycm9yKTtcbiAgLy8gICAgICAgfSlcbiAgLy8gICAgIClcbiAgLy8gICAgIC5zdWJzY3JpYmUoXG4gIC8vICAgICAgIC8vIHJlc3BvbnNlID0+IHRoaXMuaGFuZGxlRGVsZXRlU3VjY2VzcyhyZXNwb25zZSksXG4gIC8vICAgICAgIC8vIGVycm9yID0+IHRoaXMuaGFuZGxlRGVsZXRlRXJyb3IoZXJyb3IpXG4gIC8vICAgICApO1xuICAvLyB9XG5cbiAgLy8gQXNzdW1pbmcgX2RlbGV0ZVNlcnZpY2UgaGFzIGEgZGVsZXRlQXBwIG1ldGhvZCB0aGF0IGhhbmRsZXMgYXBwIGRlbGV0aW9uXG4gIC8vIEFsc28sIGFzc3VtaW5nIGhhbmRsZURlbGV0ZVN1Y2Nlc3MgYW5kIGhhbmRsZURlbGV0ZUVycm9yIGFyZSBtZXRob2RzIHRvIGhhbmRsZSBzdWNjZXNzIGFuZCBlcnJvciBzY2VuYXJpb3NcblxuICBwYWRaZXJvKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHZhciBwYWRkaW5nPScnO1xuICAgIGxldCBsZW5ndGg9dmFsdWUudG9TdHJpbmcoKS5sZW5ndGg7XG4gICAgaWYobGVuZ3RoPT0xKVxuICAgIHtcbiAgICAgIHBhZGRpbmc9JzAwJyt2YWx1ZVxuICAgIH1cbiAgICBlbHNlIGlmKGxlbmd0aD09MilcbiAgICB7XG4gICAgICBwYWRkaW5nPScwJyt2YWx1ZVxuICAgIH1cbiAgICBlbHNlIGlmKGxlbmd0aD09MylcbiAgICB7XG4gICAgICBwYWRkaW5nPXZhbHVlXG4gICAgfVxuICAgIHJldHVybiBwYWRkaW5nO1xuICB9XG5cbiAgcHVibGljIGhhc0FwcEJ1aWxkZXJQZXJtaXNzaW9uOiBib29sZWFuID0gZmFsc2U7XG5cbiAgZ2V0VXNlckRldGFpbHMoKTogdm9pZCB7XG4gICAgdGhpcy5fY29tbW9uU2VydmljZS5nZXRVc2VyRGV0YWlsKClcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fdW5zdWJzY3JpYmVBbGwpLFxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIHVzZXIgZGV0YWlsczonLCBlcnJvcik7XG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3IpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFwKCh1c2VyUmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHVzZXJQZXJtaXNzaW9ucyA9IHVzZXJSZXNwb25zZT8udWQ/LnBlcm1pc3Npb25zIHx8IFtdO1xuICAgICAgICAgIC8vIENoZWNrIGlmIFwiQVBQX0JVSUxERVJcIiBwZXJtaXNzaW9uIGV4aXN0c1xuICAgICAgICAgIHRoaXMuaGFzQXBwQnVpbGRlclBlcm1pc3Npb24gPSB1c2VyUGVybWlzc2lvbnMuaW5jbHVkZXMoXCJBUFBfQlVJTERFUlwiKSAmJiB1c2VyUGVybWlzc2lvbnMuaW5jbHVkZXMoXCJBQ0NFU1NfV0VCX1BPUlRBTFwiKTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uT3B0aW9ucyA9IHtcbiAgICAgICAgICBhY2NvdW50SWQ6IHJlc3BvbnNlLnVkLmxhc3R1c2VkX2FjY291bnRcbiAgICAgICAgfTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMuc3RyaXBlU2VydmljZS5nZXRTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uT3B0aW9ucykuc3Vic2NyaWJlKFxuICAgICAgICAgIChzdWJzY3JpcHRpb25SZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ1N1YnNjcmlwdGlvbiBkZXRhaWxzOicsIHN1YnNjcmlwdGlvblJlc3BvbnNlKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKHN1YnNjcmlwdGlvblJlc3BvbnNlICYmIHN1YnNjcmlwdGlvblJlc3BvbnNlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uSW5mbyA9IHN1YnNjcmlwdGlvblJlc3BvbnNlWzBdO1xuICAgICAgICAgICAgICBjb25zdCBwcm9kdWN0T3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICBQcm9kdWN0SWQ6IHN1YnNjcmlwdGlvbkluZm8uaXRlbXNbMF0ucHJvZHVjdElkXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICB0aGlzLnN0cmlwZVNlcnZpY2UuZ2V0UHJvZHVjdERldGFpbHMocHJvZHVjdE9wdGlvbnMpLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICAocHJvZHVjdFJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9zdWJzY3JpYmVkUGxhbk5hbWUuc3Vic2NyaWJlZFBsYW5OYW1lID0gcHJvZHVjdFJlc3BvbnNlLm5hbWU7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIHByb2R1Y3QgZGV0YWlsczonLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBzdWJzY3JpcHRpb24gZGV0YWlsczonLCBlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfSk7XG4gIH1cbiAgXG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5nZXRVc2VyUGVybWlzc2lvbnMoKTtcbiAgIFxuICAgIC8vIHRoaXMuY3VycmVudEFwcFZlcnNpb25JZCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLnNwbGl0KFwiL1wiKVs0XTtcbiAgICAvLyB0aGlzLl9uYXZpZ2F0aW9uLnVwZGF0ZUNsYXNzaWNOYXZpZ2F0aW9uUm91dGVzKHRoaXMuY3VycmVudEFwcFZlcnNpb25JZC50b1N0cmluZygpKTtcblxuICAgIC8vIEZldGNoIHVzZXIgZGV0YWlsc1xuICAgIFxuICAgIFxuICAgIGlmICh0aGlzLnVzZXIpIHtcbiAgICAgIHRoaXMudXNlckVtYWlsID0gdGhpcy51c2VyLmVtYWlsO1xuICAgICAgdGhpcy51c2VyTmFtZSA9IHRoaXMudXNlclsnZm5hbWUnXSArICcgJyArIHRoaXMudXNlclsnbG5hbWUnXTtcbiAgICAgIHRoaXMudXNlckltYWdlID0gdGhpcy51c2VyWyd1aW1nJ107XG4gICAgfVxuXG4gICAgdGhpcy5nZXRVc2VyRGV0YWlscygpO1xuICAgIFxuICAvL0FYRS1JNjM3NlxuICAvL0lzc3VlIDogUGFyYW1ldGVyaXplZCB1cmwgd2FzIG5vdCBtYWludGFpbiAoYXBwIGluc3RhbGxhdGlvbiksIGF1dGhvcml6YXRpb24gY2FsbCBzb21laG93IGxvc2VzIHRoZSBwYXJhbWV0ZXJzXG4gIC8vdXJsIHN0b3JhZ2UgaXMgbWFpbnRhaW5lZCBieSB0aGUgbmFtZSBcImFwcG5hbWVcIlxuICAvL0l0IGlzIHNldCBpbiBhdXRoLnJlc29sdmVyIGFuZCByZW1vdmVkIGhlcmVcbiAgLy9pZiBhcHBuYW1lIGV4aXN0IGluIHNlc3Npb24gdXNlZCB0aGUgc3RvcmVkIG5hbWUsIGlmIG5vdCB1c2VkIHRoZSB2YWx1ZSBmcm9tIHRoZSB1cmxcbiAgLy9cbnZhciBhcHBOYW1lY2hlY2s9bG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2FwcG5hbWUnKTtcbi8vY29uc29sZS5sb2coXCIhMTEzXCIpO1xuLy8gaWYoYXBwTmFtZWNoZWNrIT09bnVsbClcbi8vIHtcbi8vICAgaWYoYXBwTmFtZWNoZWNrPT1cIi9hcHBzXCIpXG4vLyAgIHtcbi8vICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcImFwcG5hbWVcIik7XG4vLyAgIH1cbi8vIH1cbi8vIGFwcE5hbWVjaGVjaz1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYXBwbmFtZScpO1xuLy9jb25zb2xlLmxvZyhcIiExMTNcIik7XG4vL2NvbnNvbGUubG9nKGFwcE5hbWVjaGVjaylcbiAgLy9cbnZhciBhcHBOYW1lY2hlY2s9bG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2FwcG5hbWUnKTtcbnZhciBhcHBQdWJsaXNoU3RhdHVzPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCdwdWJsaXNoc3RhdHVzJyk7XG4vL2NvbnNvbGUubG9nKFwiITExM1wiKTtcbi8vIGlmKGFwcE5hbWVjaGVjayE9PW51bGwpXG4vLyB7XG4vLyAgIGlmKGFwcE5hbWVjaGVjaz09XCIvYXBwc1wiKVxuLy8gICB7XG4vLyAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJhcHBuYW1lXCIpO1xuLy8gICB9XG4vLyB9XG4vLyBhcHBOYW1lY2hlY2s9bG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2FwcG5hbWUnKTtcbi8vY29uc29sZS5sb2coXCIhMTEzXCIpO1xuLy9jb25zb2xlLmxvZyhhcHBOYW1lY2hlY2spXG4gIGxldCBhcHBuYW1lOnN0cmluZztcbiAgbGV0IGNhdGVnb3J5OnN0cmluZztcblxuLy8gY29uc3QgdXJsUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcbi8vIGNvbnN0IGFwcE5hbWVDaGVjayA9IHVybFBhcmFtcy5nZXQoJ2FwcG5hbWUnKTtcbi8vIGNvbnNvbGUubG9nKGFwcE5hbWVDaGVjaylcbi8vIGNvbnN0IGNhdGVnb3J5ID0gdXJsUGFyYW1zLmdldCgnY2F0ZWdvcnknKTtcbi8vIGNvbnNvbGUubG9nKGNhdGVnb3J5KWlcblxuXG5sZXQgSW5zdGFsbEFwcE5hbWU6c3RyaW5nO1xuSW5zdGFsbEFwcE5hbWU9bG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJJbnN0YWxsZWRBcHBOYW1lXCIpO1xuaWYoSW5zdGFsbEFwcE5hbWUhPW51bGwpe1xuY29uc3QgY2FwaXRhbGl6ZWRBcHBOYW1lOiBzdHJpbmcgPSB0aGlzLmNhcGl0YWxpemVXb3JkcyhJbnN0YWxsQXBwTmFtZS5yZXBsYWNlKC8tL2csICcgJykpO1xudGhpcy5jaGVja0FuZFB1Ymxpc2hBcHAoY2FwaXRhbGl6ZWRBcHBOYW1lKTtcbmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFwiSW5zdGFsbGVkQXBwTmFtZVwiKTtcbn1cbmlmIChhcHBOYW1lY2hlY2sgIT09IG51bGwpIHtcbiAgLy9cbiAgY29uc3QgdXJsUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhhcHBOYW1lY2hlY2suc3BsaXQoJz8nKVsxXSk7XG4gIGNvbnN0IGFwcE5hbWVUZW1wID0gdXJsUGFyYW1zLmdldCgnYXBwbmFtZScpO1xuICBjb25zdCBjYXRlZ29yeVRlbXAgPSB1cmxQYXJhbXMuZ2V0KCdjYXRlZ29yeScpO1xuICAvL2NvbnN0IGFwcE5hbWVUZW1wID0gYXBwTmFtZWNoZWNrLnNwbGl0KCc9JylbMV0uc3BsaXQoJyYnKVswXTsgLy8gRXh0cmFjdGluZyBhcHBuYW1lIHZhbHVlIGZyb20gVVJMIHBhcmFtZXRlclxuICAvL2xvY2FsU3RvcmFnZS5zZXRJdGVtKFwiSW5zdGFsbGVkQXBwTmFtZVwiLGFwcE5hbWVUZW1wKVxuLy8gRXh0cmFjdGluZyBjYXRlZ29yeSB2YWx1ZSBmcm9tIFVSTCBwYXJhbWV0ZXJcbiAvLyBjb25zdCBjYXRlZ29yeVRlbXAgPSBhcHBOYW1lY2hlY2suc3BsaXQoJ2NhdGVnb3J5PScpWzFdO1xuICAvL1xuICBpZiAoYXBwTmFtZVRlbXApIHtcbiAgICB0aGlzLmluc3RhbGxBcHAoYXBwTmFtZVRlbXAsIGNhdGVnb3J5VGVtcCkudGhlbigoKSA9PiB7XG4gICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcImFwcG5hbWVcIik7XG4gICAgfSkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgLy8gSGFuZGxlIGVycm9yIGlmIGluc3RhbGxBcHAgZmFpbHNcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluc3RhbGxpbmcgYXBwOicsIGVycm9yKTtcbiAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFwiYXBwbmFtZVwiKTtcbiAgICB9KTtcbiAgfVxuXG4vLyBsZXQgYXBwTmFtZTogc3RyaW5nOyBcbi8vIGlmKGFwcE5hbWVjaGVjayE9PW51bGwpe1xuLy8gICBhcHBOYW1lPWFwcE5hbWVjaGVjay5zcGxpdCgnPScpWzFdLnNwbGl0KCclMkYnKVswXTtcbi8vICAgaWYgKGFwcE5hbWUpIHtcbi8vICAgICB0aGlzLmluc3RhbGxBcHAoYXBwTmFtZSwpLnRoZW4oKCkgPT4ge1xuLy8gICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJhcHBuYW1lXCIpO1xuICAgICAgXG4vLyAgICAgfSlcbi8vICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuLy8gICAgICAgLy8gSGFuZGxlIGVycm9yIGlmIGluc3RhbGxBcHAgZmFpbHNcbi8vICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluc3RhbGxpbmcgYXBwOicsIGVycm9yKTtcbi8vICAgICB9KTtcbi8vICAgfVxuICBcbiAgXG4gIH1cbiAgZWxzZXtcbiAgICAvLyBWYXJpYWJsZSB0byBzdG9yZSBhcHBuYW1lXG5cbiAgICBcbiAgICB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1zLnBpcGUoXG4gICAgICB0YWtlVW50aWwodGhpcy5fdW5zdWJzY3JpYmVBbGwpXG4gICAgKS5zdWJzY3JpYmUocGFyYW1zID0+IHtcbiAgICAgIGFwcG5hbWUgPSBwYXJhbXNbJ2FwcG5hbWUnXTtcbiAgICAgIC8vbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJJbnN0YWxsZWRBcHBOYW1lXCIsYXBwbmFtZSk7XG4gICAgICBjb25zb2xlLmxvZyhhcHBuYW1lKVxuICAgICAgY2F0ZWdvcnkgPSBwYXJhbXNbJ2NhdGVnb3J5J107XG4gICAgICBjb25zb2xlLmxvZyhjYXRlZ29yeSlcbiAgICBcbiAgICAgIGlmIChhcHBuYW1lKSB7XG4gICAgICAgIC8vIFNwbGl0IHRoZSBhcHBuYW1lIGF0IHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mICcvJ1xuICAgICAgICBjb25zdCBhcHBOYW1lUGFydHMgPSBhcHBuYW1lLnNwbGl0KCcvJywgMSk7XG4gICAgICAgIGNvbnN0IGFwcE5hbWUgPSBhcHBOYW1lUGFydHNbMF07IC8vIFN0b3JlIGFwcG5hbWVcbiAgICAgICAgLy9jb25zdCBjYXRlZ29yeSA9IGNhdGVnb3J5OyAvLyBTdG9yZSBjYXRlZ29yeVxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcImFwcE5hbWU9XCIrYXBwTmFtZSk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiY2F0ZWdvcnk9XCIrY2F0ZWdvcnkpO1xuICAgICAgICBcbiAgICAgICAgLy8gTmF2aWdhdGUgdG8gdGhlIHNhbWUgcm91dGUgd2l0aG91dCBhbnkgcXVlcnkgcGFyYW1ldGVyc1xuICAgICAgICBjb25zdCBuYXZpZ2F0aW9uRXh0cmFzOiBOYXZpZ2F0aW9uRXh0cmFzID0ge1xuICAgICAgICAgIHJlcGxhY2VVcmw6IHRydWUsXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCBuYXZpZ2F0aW9uRXh0cmFzKTtcbiAgICAgICAgXG5cbiAgICAgICAgaWYgKGFwcG5hbWUpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhhcHBuYW1lKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhjYXRlZ29yeSk7XG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJwdWJsaXNoc3RhdHVzXCIsXCJGYWxzZVwiKVxuICAgICAgICAgIHRoaXMuaW5zdGFsbEFwcChhcHBuYW1lLGNhdGVnb3J5KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIC8vIEhhbmRsZSBzdWNjZXNzZnVsIGluc3RhbGxhdGlvblxuICAgICAgICAgICAgY29uc29sZS5sb2coJ0FwcCBpbnN0YWxsZWQgTWV0aG9kIGNhbGxlZDonLCBhcHBuYW1lLCBjYXRlZ29yeSk7XG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcImFwcG5hbWVcIik7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgICAgLy8gSGFuZGxlIGVycm9yIGlmIGluc3RhbGxBcHAgZmFpbHNcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluc3RhbGxpbmcgYXBwOicsIGVycm9yKTtcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFwiYXBwbmFtZVwiKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIH1cbiAgICAgIC8vIH0gZWxzZSB7XG4gICAgICAvLyAgIGNvbnNvbGUuZXJyb3IoJ2FwcG5hbWUgb3IgY2F0ZWdvcnkgcXVlcnkgcGFyYW1ldGVyIGlzIG1pc3NpbmcnKTtcbiAgICAgIH19KTtcblxuICAgIH1cbiAgICBcbiAgICAvLyBvbmNlIHdlIGZpeCBpZGVudGl0eSBzZXJ2ZXIgQVBJLCB0aGlzIGNvZGUgd2lsbCBiZSBuZWVkZWQgYWdhaW5cbiAgICAvLyBTdWJzY3JpYmUgdG8gdXNlciBjaGFuZ2VzXG4gICAgLy8gdGhpcy5fdXNlclNlcnZpY2UudXNlciRcbiAgICAvLyAucGlwZSh0YWtlVW50aWwodGhpcy5fdW5zdWJzY3JpYmVBbGwpKVxuICAgIC8vIC5zdWJzY3JpYmUoKHVzZXI6IGFueSkgPT4ge1xuICAgIC8vICAgICB0aGlzLnVzZXIgPSB1c2VyO1xuICAgIC8vICAgICB0aGlzLnVzZXJFbWFpbCA9IHVzZXIuZW1haWw7XG4gICAgLy8gICAgIHRoaXMudXNlck5hbWUgPSB1c2VyLkZpcnN0TmFtZSArICcgJysgdXNlci5MYXN0TmFtZSA7XG4gICAgLy8gICAgIHRoaXMudXNlckltYWdlID0gdXNlci5waWN0dXJlO1xuICAgIC8vICAgICAvLyBNYXJrIGZvciBjaGVja1xuICAgIC8vICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAvLyB9KTtcblxuXG5cblxuICAgIGNvbnN0IHVybCA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3VybCcpO1xuICAgIGlmICh1cmwpIHtcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdXJsO1xuICAgICAgLy8gUmVtb3ZlIHNhdmVkIGRhdGEgZnJvbSBzZXNzaW9uU3RvcmFnZVxuICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgndXJsJyk7XG5cbiAgICAgIC8vIFJlbW92ZSBhbGwgc2F2ZWQgZGF0YSBmcm9tIHNlc3Npb25TdG9yYWdlXG4gICAgICBzZXNzaW9uU3RvcmFnZS5jbGVhcigpO1xuICAgIH1cblxuICB9XG5cbiAgXG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmKHRoaXMuY3VycmVudE9yZyE9dGhpcy5wcmV2aW91c09yZyl7XG4gICAgICB0aGlzLmdldFVzZXJQZXJtaXNzaW9ucygpO1xuICAgICAgdGhpcy5wcmV2aW91c09yZz10aGlzLmN1cnJlbnRPcmc7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzLmFwcExpc3QgJiYgY2hhbmdlcy5hcHBMaXN0LmN1cnJlbnRWYWx1ZSkge1xuICAgICAgdGhpcy5hc3NpZ25HcmFkaWVudHMoKTtcbiAgICB9XG4gIH1cblxuICBhc3NpZ25HcmFkaWVudHMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYXBwTGlzdCAmJiB0aGlzLmFwcExpc3QubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5hcHBMaXN0LmZvckVhY2goKGFwcCwgaW5kZXgpID0+IHtcbiAgICAgICAgYXBwLmdyYWRpZW50ID0gdGhpcy5ncmFkaWVudHNbaW5kZXggJSB0aGlzLmdyYWRpZW50cy5sZW5ndGhdO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENhbGwgYXBwcyBBcHAgVmVyc2lvbiBJZCByb3V0ZVxuICAgKlxuICAgKiBAcGFyYW0gYXBwVmVyc2lvbklkXG4gICAqL1xuICBvcGVuQXBwKGFwcFZlcnNpb25JZDogbnVtYmVyKTogdm9pZCB7XG4gICAgXG4gICAgY29uc3QgY3VycmVudFVybCA9IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW47IC8vIEdldCB0aGUgY3VycmVudCBVUkxcbiAgICAvLyBVcGRhdGVkIFVSTCBjaGVjayBsb2dpY1xuICAgIGlmIChjdXJyZW50VXJsLmluY2x1ZGVzKCdsb2NhbGhvc3Q6NDIwMCcpIHx8IGN1cnJlbnRVcmwuaW5jbHVkZXMoJ2J1aWxkZXIuYXhvbmF0b3IuY29tJykgfHwgY3VycmVudFVybC5pbmNsdWRlcygnYW5kcm9tZWRhLWJ1aWxkZXItcWEuYXhvbmF0b3IuY29tJykpIHtcbiAgICAgIFxuICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIHVzZXIgaXMgZGVmaW5lZCBhbmQgaGFzIGEgVXNlcklEXG4gICAgICBpZiAoIXRoaXMudXNlcikge1xuICAgICAgICAgIHRoaXMuX2F4b1NuYWNrQmFyLm9wZW5TbmFja0JhcignVXNlciBub3QgZm91bmQgb3Igbm90IGxvZ2dlZCBpbicsIEF4b1NuYWNrQmFyVHlwZS5lcnJvcik7XG4gICAgICAgICAgcmV0dXJuOyAvLyBFeGl0IHRoZSBtZXRob2QgaWYgdXNlciBpcyBub3QgYXZhaWxhYmxlXG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGZvciByZXF1aXJlZCBwZXJtaXNzaW9uc1xuICAgICAgY29uc3QgaGFzUmVxdWlyZWRQZXJtaXNzaW9uID0gdGhpcy5wZXJtaXNzaW9ucy5pbmNsdWRlcygnQVBQX0JVSUxERVInKSB8fCB0aGlzLnBlcm1pc3Npb25zLmluY2x1ZGVzKCdBUFBfSUFNJyk7XG4gICAgICBpZiAoIWhhc1JlcXVpcmVkUGVybWlzc2lvbikge1xuICAgICAgICAgIHRoaXMuX2F4b1NuYWNrQmFyLm9wZW5TbmFja0JhcignWW91IG5lZWQgZWl0aGVyIEFQUF9CVUlMREVSIG9yIEFQUF9JQU0gcGVybWlzc2lvbnMgdG8gcGVyZm9ybSB0aGlzIGFjdGlvbi4nLCBBeG9TbmFja0JhclR5cGUuZXJyb3IpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEaXJlY3RseSBvcGVuIHRoZSBhcHAgcmVnYXJkbGVzcyBvZiBVUkwgaWYgdGhlIGNvbmRpdGlvbnMgYXJlIG5vdCBtZXRcbiAgICB0aGlzLm9wZW5BcHBFdmVudC5lbWl0KGFwcFZlcnNpb25JZCk7XG4gIH1cblxuXG5cbiAgbmF2aWdhdGVUb0hvbWUoYXBwVmVyc2lvbklkOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGVCeVVybChgYXBwcy8ke2FwcFZlcnNpb25JZH0vaG9tZWApO1xuICB9XG5cbiAgLyoqXG4gICAqIGZ1bmN0aW9uIHVzZSB0byBTd2l0Y2ggdGhlIG9yZ2FuaXphdGlvblxuICAgKi9cbiAgc3dpdGNoQWNjb3VudChvcmdhbml6YXRpb25JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5zd2l0Y2hBY2NvdW50RXZlbnQuZW1pdChvcmdhbml6YXRpb25JZCk7XG4gICAgXG4gICBcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWduIG91dFxuICAgKi9cbiAgc2lnbk91dCgpOiB2b2lkIHtcbiAgICB0aGlzLl9sb2dnaW5nU2VydmljZS50cmFja0V2ZW50KCd1c2VyIGxvZ2dlZCBvdXQnLHtzdGVwIDogJ0J5ZSBCeWUgJyt0aGlzLnVzZXJOYW1lfSk7XG4gICAgdGhpcy5fYXV0aFNlcnZpY2Uuc2lnbk91dCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJpbGxpbmdcbiAgICovXG4gIG5hdmlnYXRlVG9CaWxsaW5nKCk6IHZvaWQge1xuICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZUJ5VXJsKCdwYXltZW50aW5mby9wcmljaW5nJylcbiAgICBcbiAgfVxuXG5cblxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8gQ3JlYXRlIEFwcHAvLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8qKlxuICAgKnRvIGNyZWF0ZSBuZXcgYXBwXG4gICAqL1xuICAgb3BlbkNyZWF0ZUFwcERpYWxvZygpOiB2b2lkIHtcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKEFwcENyZWF0ZURpYWxvZ0NvbXBvbmVudENvbXBvbmVudCwge1xuICAgICAgd2lkdGg6ICc2MDBweCcsXG4gICAgICBoZWlnaHQ6ICdhdXRvJyxcbiAgICAgIHBhbmVsQ2xhc3M6ICdjdXN0b20tZGlhbG9nLWNvbnRhaW5lcicsXG4gICAgICBiYWNrZHJvcENsYXNzOiAnY3VzdG9tLWRpYWxvZy1iYWNrZHJvcCdcbiAgICB9KTtcblxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICBjb25zdCB7IG5hbWUsIGRlc2NyaXB0aW9uIH0gPSByZXN1bHQ7XG5cbiAgICAgICAgdGhpcy5fYXhvU25hY2tCYXIub3BlblNuYWNrQmFyKCdDcmVhdGluZyBBcHAuLi4nLCBBeG9TbmFja0JhclR5cGUuaW5mbyk7XG4gICAgICAgIHRoaXMuY3JlYXRlQXBwKG5hbWUsIGRlc2NyaXB0aW9uKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNyZWF0ZUFwcChuYW1lOiBzdHJpbmcsIGRlc2NyaXB0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtRGF0YUZvclNlcnZpY2UgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBmb3JtRGF0YUZvclNlcnZpY2UuYXBwZW5kKCduYW1lJywgbmFtZSk7XG4gICAgZm9ybURhdGFGb3JTZXJ2aWNlLmFwcGVuZCgnZGVzY3JpcHRpb24nLCBkZXNjcmlwdGlvbik7XG5cbiAgICB0aGlzLl9tcEFwcExpc3RTZXJ2aWNlLmFkZEFwcEJhc2ljSW5mbyhmb3JtRGF0YUZvclNlcnZpY2UpLnRvUHJvbWlzZSgpXG4gICAgICAudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgIGlmIChyZXNwb25zZT8uYWRkQXBwQmFzaWNJbmZvPy5zdGF0dXMgPT09ICdzdWNjZXNzJyAmJiByZXNwb25zZS5hZGRBcHBCYXNpY0luZm8uYXBwPy5hcHB2ZXJzaW9uX2lkKSB7XG4gICAgICAgICAgLy90aGlzLl9uYXZpZ2F0aW9uLnVwZGF0ZUNsYXNzaWNOYXZpZ2F0aW9uUm91dGVzKHJlc3BvbnNlLmFkZEFwcEJhc2ljSW5mby5hcHAuYXBwdmVyc2lvbl9pZCk7XG4gICAgICAgICAgLy90aGlzLl9yb3V0ZXIubmF2aWdhdGUoWydhcHBzJywgcmVzcG9uc2UuYWRkQXBwQmFzaWNJbmZvLmFwcC5hcHB2ZXJzaW9uX2lkXSk7XG4gICAgICAgICAgXG4gICAgICAgICAgdGhpcy5fYXhvU25hY2tCYXIub3BlblNuYWNrQmFyKCdBcHAgY3JlYXRlZC4nLCBBeG9TbmFja0JhclR5cGUuc3VjY2Vzcyk7XG4gICAgICAgICAgdGhpcy5vcGVuQXBwKHJlc3BvbnNlLmFkZEFwcEJhc2ljSW5mby5hcHAuYXBwdmVyc2lvbl9pZClcbiAgICAgICAgfSBlbHNlIGlmIChyZXNwb25zZT8uYWRkQXBwQmFzaWNJbmZvPy5hcHAgPT09ICdhbHJlYWR5X2V4aXN0cycpIHtcbiAgICAgICAgICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ0FwcCBhbHJlYWR5IGV4aXN0cycsIEF4b1NuYWNrQmFyVHlwZS53YXJuaW5nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ09vcHMhIFNvbWV0aGluZyB3ZW50IHdyb25nJywgQXhvU25hY2tCYXJUeXBlLmVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGNyZWF0aW5nIGFwcDonLCBlcnJvcik7XG4gICAgICAgIHZhciBlcnJvck1lc3NhZ2UgPSAnT29wcyEgU29tZXRoaW5nIHdlbnQgd3JvbmcnXG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgIGlmIChlcnJvciA9PT0gJ0FYX0VSUl82NycpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9ICdPb3BzISBDYW5cXCd0IHJlYWNoIG91ciBzZXJ2ZXJzIPCfk6EuIFBsZWFzZSB3YWl0LCB3ZVxcJ2xsIG5vdGlmeSB5b3Ugc29vbi4nO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAgIHRoaXMuX2F4b1NuYWNrQmFyLm9wZW5TbmFja0JhcihlcnJvck1lc3NhZ2UsIEF4b1NuYWNrQmFyVHlwZS5lcnJvcik7XG4gICAgICB9KTtcbiAgfVxuLy9UcnlpbmcgdG8gaW1wbGVtZW50IHVybCBhcyB3ZWxsIGFzIGJ1dHRvbiBmdW5jdGlvbmFsaXR5IGZvciBpbnN0YWxsaW5nIGFwcFxuLy8gYXN5bmMgaW5zdGFsbEFwcCh1c2VySW5wdXQ/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgXG4vLyAgIGlmICghdXNlcklucHV0KSB7XG4vLyAgICAgdXNlcklucHV0ID0gcHJvbXB0KCdFbnRlciB0aGUgc3RyaW5nIHRvIHNlbmQgdG8gdGhlIEFQSTonKTtcbi8vICAgICBpZiAoIXVzZXJJbnB1dCkge1xuLy8gICAgICAgLy8gSWYgdXNlciBjYW5jZWxzIG9yIHByb3ZpZGVzIG5vIGlucHV0LCBkbyBub3RoaW5nXG4vLyAgICAgICByZXR1cm47XG4vLyAgICAgfVxuLy8gICB9XG5cbi8vICAgdGhpcy5fYXhvU25hY2tCYXIub3BlblNuYWNrQmFyKCdJbnN0YWxsaW5nIEFwcC4uLicsIEF4b1NuYWNrQmFyVHlwZS5pbmZvKTtcbiAgXG4gXG5jaGVja0FuZFB1Ymxpc2hBcHAoaW5zdGFsbGVkQXBwOiBzdHJpbmcpIHtcbiAgLy9cbiAgY29uc3QgYXBwTmFtZWNoZWNrID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2FwcG5hbWUnKTsgLy8gUmVwbGFjZSB3aXRoIHlvdXIgbG9naWMgdG8gZ2V0IGFwcE5hbWVjaGVja1xuICBjb25zdCBhcHBQdWJsaXNoU3RhdHVzID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3B1Ymxpc2hzdGF0dXMnKTsgLy8gUmVwbGFjZSB3aXRoIHlvdXIgbG9naWMgdG8gZ2V0IGFwcFB1Ymxpc2hTdGF0dXNcbiAgY29uc3QgYXBwSW5zdGFsbFN0YXR1cz1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnaW5zdGFsbHN0YXR1cycpXG5cbiAgIGlmIChhcHBOYW1lY2hlY2sgPT0gbnVsbCAmJiBhcHBQdWJsaXNoU3RhdHVzID09IFwiRmFsc2VcIiAmJiBhcHBJbnN0YWxsU3RhdHVzPT1cIlRydWVcIikge1xuICAgIGNvbnN0IGFwcElkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3B1Ymxpc2hBcHBJZERhdGEnKTtcbiAgICBjb25zdCBhcHBWZXJzaW9uID0gXCIxLjAwXCI7XG4gICAgY29uc3QgcHVibGlzaFN0YXR1cyA9IFwiUFwiO1xuICAgIGlmIChhcHBJZCkge1xuICAgICAgdGhpcy5fY29tbW9uU2VydmljZS5wdWJsaXNoYXBwKGFwcElkLCBhcHBWZXJzaW9uLCBwdWJsaXNoU3RhdHVzKS5zdWJzY3JpYmUoXG4gICAgICAgIHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAvLyBIYW5kbGUgdGhlIHJlc3BvbnNlIGlmIG5lZWRlZFxuICAgICAgICAgIGNvbnNvbGUubG9nKCdQdWJsaXNoIHJlc3BvbnNlOicsIHJlc3BvbnNlKTtcbiAgICAgICAgICAvLyBjb25zdCBhcHBOYW1lID0gaW5zdGFsbGVkQXBwIHx8ICdZb3VyIEFwcCc7XG4gICAgICAgICAgLy8gY29uc3QgYXBwVmVyc2lvbiA9ICcxLjAwMCc7XG4gICAgICAgICAgLy8gY29uc3Qgc3VjY2Vzc01lc3NhZ2UgPSBgQXBwOiAke2FwcE5hbWV9IHZlcnNpb24gJHthcHBWZXJzaW9ufSBpcyBwdWJsaXNoZWQgc3VjY2Vzc2Z1bGx5LmA7XG4gICAgICAgICAvLyB0aGlzLm9wZW5TdWNjZXNzRGlhbG9nKCd2ZXJzaW9uIHB1Ymxpc2hlZCBzdWNjZXNzZnVsbHkhJyk7XG4gICAgICAgICBjb25zdCBhcHBOYW1lID0gaW5zdGFsbGVkQXBwO1xuICAgICAgICAgY29uc3QgYXBwVmVyc2lvbiA9ICcxLjAwMCc7XG4gICAgICAgICBjb25zdCBib3hoZWFkaW5nPWBJbnN0YWxsZWRgXG4gICAgICAgICBjb25zdCBzdWNjZXNzTWVzc2FnZSA9IGBBcHA6ICR7YXBwTmFtZX0gdmVyc2lvbiAke2FwcFZlcnNpb259IGlzIGluc3RhbGxlZCBzdWNjZXNzZnVsbHkuIGA7XG4gICAgICAgICBjb25zdCBzdWNjZXNzRGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihTdWNjZXNzRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICAgICAgIHdpZHRoOiAnNTAwcHgnLFxuICAgICAgICAgICBkYXRhOiB7IG1lc3NhZ2U6IHN1Y2Nlc3NNZXNzYWdlICwgaGVhZGluZzpib3hoZWFkaW5nfSxcbiAgICAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlXG4gICAgICAgICB9KTtcbiAgICAgICAgICAvLyBSZW1vdmUgbG9jYWwgc3RvcmFnZSBpdGVtc1xuICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdwdWJsaXNoQXBwSWREYXRhJyk7XG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ3B1Ymxpc2hzdGF0dXMnKTtcbiAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnaW5zdGFsbHN0YXR1cycpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvciA9PiB7XG4gICAgICAgICAgLy8gSGFuZGxlIGVycm9yIGlmIG5lZWRlZFxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHB1Ymxpc2hpbmcgYXBwOicsIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbmZldGNoQXBwRGV0YWlscyhmbGF0dGVuOiBhbnkpIHtcbiAgaWYgKGZsYXR0ZW4gJiYgZmxhdHRlbi5hcHBWZXJzaW9uSWQpIHtcbiAgICB0aGlzLl9tcEFwcExpc3RTZXJ2aWNlLmZldGNoQXBwRGV0YWlscyhmbGF0dGVuLmFwcFZlcnNpb25JZCwgdGhpcy5jb21tb25MaWJDb25maWcuYXhvbmF0b3JYMVVybCkuc3Vic2NyaWJlKFxuICAgICAgKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgaXNBcHBDaGFuZ2VkQWZ0ZXJQdWJsaXNoID0gcmVzcG9uc2U/LmRhdGE/LmRldGFpbHM/LmlzX2FwcF9jaGFuZ2VkX2VkaXRlZF9hZnRlcl9wdWJsaXNoIHx8IGZhbHNlO1xuICAgICAgICB0aGlzLmlzQXBwQ2hhbmdlZEFmdGVyUHVibGlzaCA9IGlzQXBwQ2hhbmdlZEFmdGVyUHVibGlzaDtcblxuICAgICAgICB0aGlzLmlzQXBwQ2hhbmdlZEFmdGVyUHVibGlzaCA9IHRydWU7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiRGV0YWlscyBGb3VuZFwiKVxuICAgICAgICAvLyBUcmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb24gdG8gdXBkYXRlIHRoZSB2aWV3XG4gICAgICAgIC8vIHRoaXMuZGV0ZWN0Q2hhbmdlcygpOyAvLyA8LS0tIENhbGwgZGV0ZWN0Q2hhbmdlcygpIGhlcmVcblxuICAgICAgfSxcbiAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBhcHAgZGV0YWlsczonLCBlcnJvcik7XG4gICAgICB9XG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zb2xlLmVycm9yKCdhcHBWZXJzaW9uSWQgaXMgbWlzc2luZyBvciBpbnZhbGlkIGluIHRoZSBmbGF0dGVuIG9iamVjdDonLCBmbGF0dGVuKTtcbiAgfVxufVxuXG5cbmFzeW5jICBpbnN0YWxsQXBwKHVzZXJJbnB1dDogc3RyaW5nLCBjYXRlZ29yeTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIC8vXG4gIFxuICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoICdJbnN0YWxsaW5nIEFwcC4uLicsIEF4b1NuYWNrQmFyVHlwZS5pbmZvKTtcbiAgY29uc3QgbG9hZGluZ0RpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oTG9hZGluZ0FwcGluc3RhbGxDb21wb25lbnQsIHtcbiAgICB3aWR0aDogJzYwMHB4JyxcbiAgICBkYXRhOiB7IGxvYWRpbmdNZXNzYWdlOiAnSW5zdGFsbGluZyBhcHAsIHBsZWFzZSB3YWl0Li4uJyB9LFxuICAgIGRpc2FibGVDbG9zZTogdHJ1ZVxuICB9KTtcbiAgLy9jb25zdCBsb2FkaW5nRGlhbG9nUmVmID0gdGhpcy5vcGVuTG9hZGluZ0RpYWxvZ1dpdGhNZXNzYWdlKCdQbGVhc2Ugd2FpdC4gSW5zdGFsbGluZyBpbiBwcm9ncmVzcy4uLicpO1xuICBcbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgcmVxdWVzdFN0cmluZzogdXNlcklucHV0LFxuICAgICAgc2Vjb25kU3RyaW5nOiBjYXRlZ29yeVxuICAgIH07IFxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwLnBvc3Q8c3RyaW5nPignSW5zdGFsbEFwcCcsIGRhdGEsIHtcbiAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgLy8gU2V0IGNvbnRlbnQgdHlwZSB0byBhcHBsaWNhdGlvbi9qc29uXG4gICAgICB9KSxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZVxuICAgIH0pLnRvUHJvbWlzZSgpO1xuXG4gICAgLy9jb25zb2xlLmxvZygnUmVzcG9uc2UgZnJvbSBzZXJ2ZXI6JywgcmVzcG9uc2UpOyBcbiAgICBcbiAgICAvL2NvbnN0IHJlc3BvbnNlT2JqZWN0ID0gSlNPTi5wYXJzZShyZXNwb25zZSk7XG4gICAgXG4gICAgXG4gIC8vICAgaWYgKHJlc3BvbnNlKSB7XG5cbiAgLy8gICAgIGlmKHJlc3BvbnNlT2JqZWN0LnN0YXR1cz09XCJzdWNjZXNzXCIpe1xuICAvLyAgICAgdGhpcy5fYXhvU25hY2tCYXIub3BlblNuYWNrQmFyKCdBcHAgaW5zdGFsbGVkIHN1Y2Nlc3NmdWxseScsIEF4b1NuYWNrQmFyVHlwZS5zdWNjZXNzKTtcbiAgLy8gICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAvLyAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gIC8vICAgICB9LCAxNTAwMCk7XG4gIC8vICAgfSBlbHNlIGlmKHJlc3BvbnNlT2JqZWN0LnN0YXR1cz09J2ZhaWx1cmUnKSB7XG4gIC8vICAgICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ0Zvcm0gTm90IEZvdW5kIGluIHRoaXMgYXBwJywgQXhvU25hY2tCYXJUeXBlLmVycm9yKTtcbiAgLy8gICB9XG4gIC8vICAgICBlbHNlIHtcbiAgLy8gICAgIHRoaXMuX2F4b1NuYWNrQmFyLm9wZW5TbmFja0JhcignT29wcyEgU29tZXRoaW5nIHdlbnQgd3Jvbmcgd2hpbGUgaW5zdGFsbGluZyB0aGUgYXBwLicsIEF4b1NuYWNrQmFyVHlwZS5lcnJvcik7XG4gICAgICBcbiAgLy8gICAgIGNvbnNvbGUuZXJyb3IoQXhvU25hY2tCYXJUeXBlLmVycm9yKTtcbiAgLy8gICB9fVxuICAvLyB9IGNhdGNoIChlcnJvcikge1xuICAvLyAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluc3RhbGxpbmcgYXBwOicsIGVycm9yKTtcbiAgLy8gICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ09vcHMhIFNvbWV0aGluZyB3ZW50IHdyb25nIHdoaWxlIGluc3RhbGxpbmcgdGhlIGFwcC4nLCBBeG9TbmFja0JhclR5cGUuZXJyb3IpO1xuICAvLyAgIC8vdGhpcy5fbG9nZ2luZ1NlcnZpY2UudHJhY2tFdmVudCgnRXJyb3Igb2NjdXJyZWQgd2hpbGUgaW5zdGFsbGluZyBhcHAnLCBlcnJvcik7XG4gIC8vIH1cblxuICAgIFxuICAgICAgLy9jb25zdCByZXNwb25zZU9iamVjdCA9IEpTT04ucGFyc2UocmVzcG9uc2UpO1xuICAgICAgLy9jb25zb2xlLmxvZyhyZXNwb25zZU9iamVjdCk7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcIkluc3RhbGxlZEFwcE5hbWVcIix1c2VySW5wdXQpXG4gICAgICBjb25zdCByZXNwb25zZU9iamVjdCA9IHR5cGVvZiByZXNwb25zZSA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKHJlc3BvbnNlKSA6IHJlc3BvbnNlO1xuICAgICAgXG4gICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgLy9pZiAocmVzcG9uc2VPYmplY3QpIHtcbiAgICAgICAgIGlmIChyZXNwb25zZU9iamVjdC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7ICAgICAgICAgIFxuICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiaW5zdGFsbHN0YXR1c1wiLFwiVHJ1ZVwiKVxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ0FwcCBpbnN0YWxsZWQgc3VjY2Vzc2Z1bGx5JywgQXhvU25hY2tCYXJUeXBlLnN1Y2Nlc3MpO1xuICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICAgIGxvYWRpbmdEaWFsb2dSZWYuY2xvc2UoKTtcbiAgICAgICAgICAgIH0sIDIwMDAwKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICBcbiAgICAgICAgICAvLyB9IGVsc2UgaWYgKHJlc3BvbnNlT2JqZWN0LnN0YXR1cyA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgICAgLy8gICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ0Zvcm0gTm90IEZvdW5kIGluIHRoaXMgYXBwJywgQXhvU25hY2tCYXJUeXBlLmVycm9yKTtcbiAgICAgICAgfWVsc2Uge1xuICAgICAgICAgIHRoaXMuX2F4b1NuYWNrQmFyLm9wZW5TbmFja0JhcignRm9ybSBjYW5ub3QgYmUgZm91bmQgZm9yIHRoaXMgYXBwJywgQXhvU25hY2tCYXJUeXBlLmVycm9yKTtcbiAgICAgICAgICBsb2FkaW5nRGlhbG9nUmVmLmNsb3NlKCk7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihBeG9TbmFja0JhclR5cGUuZXJyb3IpO1xuICAgICAgICB9fVxuICAgICAgICBlbHNle1xuICAgICAgICAgIHRoaXMuX2F4b1NuYWNrQmFyLm9wZW5TbmFja0JhcignT29wcyFTb21ldGhpbmcgd2VudCB3cm9uZyB3aGlsZSBjcmVhdGluZyB0aGUgYXBwJywgQXhvU25hY2tCYXJUeXBlLmVycm9yKTtcbiAgICAgICAgICBsb2FkaW5nRGlhbG9nUmVmLmNsb3NlKCk7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihBeG9TbmFja0JhclR5cGUuZXJyb3IpO1xuICAgICAgICB9XG4gICAgfSAgIFxuXG5cbiAgICBvcGVuRGVsZXRlQXBwRGlhbG9nKGFwcFZlcnNpb25JZDpudW1iZXIpe1xuICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDb25maXJtYXRpb25Nb2RhbENvbXBvbmVudCwge1xuICAgICAgICB3aWR0aDogJzMwJScsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHRpdGxlOiAnRGVsZXRlIEFwcCcsXG4gICAgICAgIG1lc3NhZ2U6ICdBcmUgeW91IHN1cmUgd2FudCB0byBkZWxldGUgdGhpcyBhcHA/JyxcbiAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6ICdEZWxldGUnLFxuICAgICAgICBjYW5jZWxCdXR0b25UZXh0OiAnQ2FuY2VsJyxcbiAgICAgICAgY29uZmlybUJ1dHRvblR5cGU6ICdkZWxldGUnXG4gICAgICB9LFxuICAgICAgcGFuZWxDbGFzczogJ2NvbmZpcm0tbW9kYWwtY29udGFpbmVyJ1xuICAgICAgfSk7XG5cbiAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgdGhpcy5kZWxldGVBcHAoYXBwVmVyc2lvbklkKTsgLy8gUHJvY2VlZCB3aXRoIGRlbGV0aW9uXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGRlbGV0ZUFwcChhcHBWZXJzaW9uSWQ6bnVtYmVyKTogdm9pZCB7XG4gICAgaWYodGhpcy5oYXNBcHBCdWlsZGVyUGVybWlzc2lvbil7XG4gICAgICB0aGlzLl9mbGF0dGVuU2VydmljZS5nZXRGbGF0dGVuRGF0YShhcHBWZXJzaW9uSWQpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl91bnN1YnNjcmliZUFsbCksXG4gICAgICAgICAgICAgIHN3aXRjaE1hcCgoZmxhdHRlbikgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKGZsYXR0ZW4gJiYgZmxhdHRlbi5hcHBJZCAhPT0gdW5kZWZpbmVkICYmIGZsYXR0ZW4udmVyc2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXBwSWQgPSBmbGF0dGVuLmFwcElkLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXBwVmVyc2lvbiA9IGZsYXR0ZW4udmVyc2lvbi50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFwcFY9YXBwVmVyc2lvbklkO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQXBwIHZlcnNpb24gSWQ6XCIrYXBwVmVyc2lvbklkKTtcblxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YT17XG4gICAgICAgICAgICAgICAgICAgICAgICBcIkFwcCBJZFwiIDogZmxhdHRlbi5hcHBJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiQXBwIE5hbWVcIiA6IGZsYXR0ZW4uYXBwTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiQXBwIHZlcnNpb25cIiA6IGZsYXR0ZW4udmVyc2lvblxuICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdGZXRjaGVkIGFwcCBkZXRhaWxzIGZyb20gZmxhdHRlbjonLCB7IGFwcElkLCBhcHBWZXJzaW9uIH0pO1xuICBcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbXBBcHBMaXN0U2VydmljZS5kZWxldGVBcHAoYXBwSWQsIGFwcFZlcnNpb24udG9TdHJpbmcoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFcnJvciBvY2N1cnJlZCB3aGlsZSBkZWxldGluZyBhcHA6JywgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgZXJyb3IsIGUuZy4sIGRpc3BsYXkgYSBtZXNzYWdlIG9yIHBlcmZvcm0gYWRkaXRpb25hbCBhY3Rpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0Vycm9yOiBmbGF0dGVuIG9iamVjdCBvciBpdHMgcHJvcGVydGllcyBhcmUgdW5kZWZpbmVkLicpO1xuICAgICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBmbGF0dGVuIG9yIGl0cyBwcm9wZXJ0aWVzIGFyZSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcignRmxhdHRlbiBvYmplY3Qgb3IgaXRzIHByb3BlcnRpZXMgYXJlIHVuZGVmaW5lZCcpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgc3VjY2VzcyByZXNwb25zZSBoZXJlIGlmIG5lZWRlZFxuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0RlbGV0ZSBhcHAgc3VjY2VzczonLCByZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgZGVsZXRlZCBhcHAgZnJvbSB0aGUgYXBwTGlzdFxuICAgICAgICAgICAgICAgICB0aGlzLmFwcExpc3QgPSB0aGlzLmFwcExpc3QuZmlsdGVyKGFwcCA9PiBhcHAuYXBwVmVyc2lvbklkICE9PSBhcHBWZXJzaW9uSWQpO1xuICAgICAgICAgICAgICAgICB0aGlzLl9heG9TbmFja0Jhci5vcGVuU25hY2tCYXIoJ0FwcCBkZWxldGVkIHN1Y2Nlc3NmdWxseScsIEF4b1NuYWNrQmFyVHlwZS5zdWNjZXNzKTtcbiAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2luZ1NlcnZpY2UudHJhY2tFdmVudCgnQXBwIGRlbGV0ZWQnLCB0aGlzLmRhdGEpO1xuICAgICAgICAgICAgICAgICAgLy8gTWFudWFsbHkgdHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uIHRvIHVwZGF0ZSB0aGUgdmlld1xuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpOyAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgZXJyb3IgaGVyZSBpZiBuZWVkZWRcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0RlbGV0ZSBhcHAgZXJyb3I6JywgZXJyb3IpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgdGhpcy5fYXhvU25hY2tCYXIub3BlblNuYWNrQmFyKCdQZXJtaXNzaW9uIERlbmllZCcsIEF4b1NuYWNrQmFyVHlwZS5lcnJvcik7XG4gICAgICAgIH1cbiAgfVxuICAgIFxuICBcblxucHJpdmF0ZSBvcGVuTG9hZGluZ0RpYWxvZ1dpdGhNZXNzYWdlKG1lc3NhZ2U6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBcbiAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihMb2FkaW5nQXBwaW5zdGFsbENvbXBvbmVudCwge1xuICAgIHdpZHRoOiAnNTAwcHgnLFxuICAgIFxuICAgIHBhbmVsQ2xhc3M6ICdhcHAtbG9hZGluZy1kaWFsb2cnLFxuICAgIGRhdGE6IHsgbWVzc2FnZSwgdHlwZTogJ1lvdXIgYXBwIGlzIGJlaW5nIFB1Ymxpc2hlZC4uLicgfSxcbiAgfSk7XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBkaWFsb2dSZWYuY2xvc2UoKTtcbiAgICAgIC8vdGhpcy5vcGVuU3VjY2Vzc0RpYWxvZygndmVyc2lvbiBwdWJsaXNoZWQgc3VjY2Vzc2Z1bGx5IScpO1xuICAgICAgcmVzb2x2ZSgpOyAvLyBSZXNvbHZlIHRoZSBwcm9taXNlIGFmdGVyIGNsb3NpbmcgdGhlIGRpYWxvZ1xuICAgIH0sIDEzODAwKTsgLy8gMTMuNiBzZWNvbmRzIGluIG1pbGxpc2Vjb25kc1xuICB9KTtcbn1cblxucHJpdmF0ZSBvcGVuU3VjY2Vzc0RpYWxvZyhtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgLy9cbiAgdGhpcy5fZmxhdHRlblNlcnZpY2UuZmxhdHRlbiQucGlwZShcbiAgICB0YWtlKDEpLFxuICAgIHN3aXRjaE1hcCgoZmxhdHRlbikgPT4ge1xuICAgICAgaWYgKCFmbGF0dGVuIHx8ICFmbGF0dGVuLmFwcFZlcnNpb25JZCkge1xuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcignRmxhdHRlbiBvYmplY3Qgb3IgaXRzIHByb3BlcnRpZXMgYXJlIHVuZGVmaW5lZCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZvcmtKb2luKHtcbiAgICAgICAgZmxhdHRlbjogb2YoZmxhdHRlbiksXG4gICAgICAgIGFwcERldGFpbHM6IHRoaXMuX21wQXBwTGlzdFNlcnZpY2UuZmV0Y2hBcHBEZXRhaWxzKGZsYXR0ZW4uYXBwVmVyc2lvbklkLCB0aGlzLmNvbW1vbkxpYkNvbmZpZy5heG9uYXRvclgxVXJsKS5waXBlKFxuICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBhcHAgZGV0YWlsczonLCBlcnJvcik7XG4gICAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgfSk7XG4gICAgfSlcbiAgKS5zdWJzY3JpYmUoKHsgZmxhdHRlbiwgYXBwRGV0YWlscyB9KSA9PiB7XG4gICAgY29uc29sZS5sb2coJ2ZldGNoQXBwRGV0YWlscyBmdW5jdGlvbiBjYWxsZWQgNCcpO1xuICAgIHRoaXMuaXNBcHBDaGFuZ2VkQWZ0ZXJQdWJsaXNoID0gYXBwRGV0YWlscz8uZGF0YT8uZGV0YWlscz8uaXNfYXBwX2NoYW5nZWRfZWRpdGVkX2FmdGVyX3B1Ymxpc2ggfHwgZmFsc2U7IC8vIFNldCBpc0FwcENoYW5nZWRBZnRlclB1Ymxpc2ggYmFzZWQgb24gdGhlIEFQSSByZXNwb25zZVxuICAgIC8vIEZldGNoIHRoZSBtaW5vciB2ZXJzaW9uIGZyb20gZ2V0VmVyc2lvbkxpc3RcbiAgICB0aGlzLl9jb21tb25TZXJ2aWNlLmdldFZlcnNpb25MaXN0KGZsYXR0ZW4uYXBwSWQsIGZsYXR0ZW4udmVyc2lvbikuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGxldCBhcHBNaW5vclZlcnNpb24gPSAnVW5rbm93bic7IC8vIERlZmF1bHQgdmFsdWUgaWYgbWlub3IgdmVyc2lvbiBpcyBub3QgZm91bmRcbiAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LnYgJiYgcmVzdWx0LnYudmVyc2lvbnNsaXN0ICYmIHJlc3VsdC52LnZlcnNpb25zbGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGFwcE1pbm9yVmVyc2lvbiA9IHJlc3VsdC52LnZlcnNpb25zbGlzdFswXS5hcHBtaW5vcnZlcnNpb247XG4gICAgICB9XG4gICAgICBjb25zdCBhcHBOYW1lID0gZmxhdHRlbj8uYXBwTmFtZSB8fCAnWW91ciBBcHAnO1xuICAgICAgICBjb25zdCBhcHBWZXJzaW9uID0gZmxhdHRlbj8udmVyc2lvbiB8fCAndmVyc2lvbic7XG4gICAgICAgIGNvbnN0IHN1Y2Nlc3NNZXNzYWdlID0gYEFwcDogJHthcHBOYW1lfSB2ZXJzaW9uICR7YXBwTWlub3JWZXJzaW9ufSBpcyBJbnN0YWxsZWQgc3VjY2Vzc2Z1bGx5LmA7XG4gICAgICAgIGNvbnN0IGFwcGhlYWRpbmcgPWBJbnN0YWxsZWRgXG4gICAgICAgIGNvbnN0IHN1Y2Nlc3NEaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFN1Y2Nlc3NEaWFsb2dDb21wb25lbnQsIHtcbiAgICAgICAgICB3aWR0aDogJzUwMHB4JyxcbiAgICAgICAgICBkYXRhOiB7IG1lc3NhZ2U6IHN1Y2Nlc3NNZXNzYWdlfVxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmNhcGl0YWxpemVXb3JkcyhzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBzdHJcbiAgICAuc3BsaXQoJyAnKVxuICAgIC5tYXAod29yZCA9PiB3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKSlcbiAgICAuam9pbignICcpO1xufVxuXG5cbiAgLyoqXG4gICAqIE9uIGRlc3Ryb3lcbiAgICovXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIC8vIFVuc3Vic2NyaWJlIGZyb20gYWxsIHN1YnNjcmlwdGlvbnNcbiAgICB0aGlzLl91bnN1YnNjcmliZUFsbC5uZXh0KCk7XG4gICAgdGhpcy5fdW5zdWJzY3JpYmVBbGwuY29tcGxldGUoKTtcbiAgfVxuXG4gIGRpc2FibGVRUihhcHBWZXJzaW9uSWQ6IGFueSAsIGluZGV4OiBudW1iZXIpe1xuICAgIGxldCBkYXRhID0ge1xuICAgICAgYXBwVmVyc2lvbklkIDogYXBwVmVyc2lvbklkXG4gICAgfTtcbiAgXG4gICAgdGhpcy5fZGF0YVZpZXdGaWx0ZXJzU2VydmljZS5kaXNhYmxlUVIoZGF0YSlcbiAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIHRoaXMuX2F4b1NuYWNrQmFyLm9wZW5TbmFja0JhcignUVIgY29kZSBkaXNhYmxlZCBzdWNjZXNzZnVsbHknLCBBeG9TbmFja0JhclR5cGUuc3VjY2Vzcyk7XG4gICAgICAgICAgdGhpcy5fbG9nZ2luZ1NlcnZpY2UudHJhY2tFdmVudCgnUVIgRGlzYWJsZWQnLHtyZXNwb25zZX0pO1xuICAgICAgICAgIHRoaXMuYXBwTGlzdFtpbmRleF0ucXJfc3RhdHVzID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9LFxuICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvcjonLCBlcnJvcik7XG4gICAgICAgICAgLy8gSGFuZGxlIHRoZSBlcnJvclxuICAgICAgICB9XG4gICAgICApOyAgXG4gIH1cblxuICBkaXNhYmxlUVJEaWFsb2coYXBwVmVyc2lvbklkOiBhbnksIGluZGV4OiBudW1iZXIpe1xuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQ29uZmlybWF0aW9uTW9kYWxDb21wb25lbnQsIHtcbiAgICAgIHdpZHRoOiAnMzAlJyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgdGl0bGU6ICdEaXNhYmxlIFFSJyxcbiAgICAgICAgbWVzc2FnZTogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkaXNhYmxlIFFSIGZvciB0aGlzIGZvcm0/JyxcbiAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6ICdEaXNhYmxlJyxcbiAgICAgICAgY2FuY2VsQnV0dG9uVGV4dDogJ0NhbmNlbCcsXG4gICAgICAgIGNvbmZpcm1CdXR0b25UeXBlOiAnZGVsZXRlJ1xuICAgICAgfSxcbiAgICAgIHBhbmVsQ2xhc3M6ICdjb25maXJtLW1vZGFsLWNvbnRhaW5lcidcbiAgICB9KTtcbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlUVIoYXBwVmVyc2lvbklkLCBpbmRleCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnZXRVc2VyUGVybWlzc2lvbnMoKSB7XG4gICAgdGhpcy5fY29tbW9uU2VydmljZS5nZXRVc2VyRGV0YWlsKHRydWUpLnN1YnNjcmliZShcbiAgICAgIChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09ICdzdWNjZXNzJyAmJiByZXNwb25zZS51ZCkge1xuICAgICAgICAgIHRoaXMucGVybWlzc2lvbnMgPSByZXNwb25zZS51ZC5wZXJtaXNzaW9uczsgLy8gRXh0cmFjdCBwZXJtaXNzaW9uc1xuICAgICAgICAgIHRoaXMuaGFzT3JnVXNlckFjY2VzcyA9IHRoaXMucGVybWlzc2lvbnMuaW5jbHVkZXMoJ09SR19JQU0nKTsgLy8gQ2hlY2sgaWYgJ09SR19JQU0nIGlzIGluIHRoZSBwZXJtaXNzaW9ucyBhcnJheVxuICAgICAgICAgIFxuICAgICAgICAgIC8vIFNob3cgb3ZlcmxheSBvbmx5IGlmICdBQ0NFU1NfV0VCX1BPUlRBTCcgcGVybWlzc2lvbiBpcyBub3QgcHJlc2VudFxuICAgICAgICAgIHRoaXMuc2hvd1dlYlBvcnRhbEFjY2Vzc092ZXJsYXkgPSAhdGhpcy5wZXJtaXNzaW9ucy5pbmNsdWRlcygnQUNDRVNTX1dFQl9QT1JUQUwnKTtcbiAgICAgICAgICB0aGlzLmhhc0FwcEJ1aWxkZXJQZXJtaXNzaW9uID0gdGhpcy5wZXJtaXNzaW9ucy5pbmNsdWRlcyhcIkFQUF9CVUlMREVSXCIpICYmIHRoaXMucGVybWlzc2lvbnMuaW5jbHVkZXMoXCJBQ0NFU1NfV0VCX1BPUlRBTFwiKTtcblxuICAgICAgICAgIGNvbnNvbGUubG9nKCdVc2VyIFBlcm1pc3Npb25zOicsIHRoaXMucGVybWlzc2lvbnMpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdJcyBCdWlsZGVyIEFjY2VzczonLCB0aGlzLmhhc09yZ1VzZXJBY2Nlc3MpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIHVzZXIgZGV0YWlsczonLCBlcnJvcik7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuICBpc1Jlc3RyaWN0ZWRVcmwoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcmVzdHJpY3RlZFVybHMgPSBbXG4gICAgICAnaHR0cHM6Ly9hbmRyb21lZGEtY29udGFpbmVyLXFhLmF4b25hdG9yLmNvbS9hcHBzJyxcbiAgICAgICdodHRwczovL2xvY2FsaG9zdDo0MjAxL2FwcHMnLFxuICAgICAgJ2h0dHBzOi8vd2ViLmF4b25hdG9yLmNvbS9hcHBzJ1xuICAgIF07XG4gICAgcmV0dXJuIHJlc3RyaWN0ZWRVcmxzLmluY2x1ZGVzKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcbiAgfVxufVxuXG4iLCI8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBmbGV4LWF1dG8gaC1mdWxsLWFwcExpc3QgbXktYXBwLWxpc3Qgb3ZlcmZsb3ctaGlkZGVuIHBhZ2UtYmFja2dyb3VuZCBheG8tZm9udFwiPlxuICAgIDwhLS0gSGVhZGVyIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJzdGlja3kgdG9wLTAgYmctd2hpdGVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFwcC1saXN0LW1haW4taGVhZGVyIHJlbGF0aXZlIGZsZXggZmxleC0wIGgtMTIgei00OSBib3gtYm9yZGVyIHB4LTZcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtYXV0byBpdGVtcy1jZW50ZXIgbWluLXctMFwiPiA8aW1nIGNsYXNzPVwidy0zNiBoLTdcIiBzcmM9XCJhc3NldHMvaW1hZ2VzL2xvZ28vYXhvLWxvZ28uc3ZnXCIgYWx0PVwiTG9nbyBpbWFnZVwiPiA8c3BhbiBjbGFzcz1cImJldGFcIj5CZXRhPC9zcGFuPiA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtYXV0byBqdXN0aWZ5LWVuZCBpdGVtcy1jZW50ZXIgbWluLXctMCBnYXAtM1wiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGNsYXNzPVwibXQtMS41XCI+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+VXNlIE9uIE1vYmlsZTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImhhc0FwcEJ1aWxkZXJQZXJtaXNzaW9uXCIgaWQ9XCJyZXBvcnQtbWVudVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwib3BlbkRlbGV0ZUFwcERpYWxvZyhhcHBEZXRhaWwuYXBwVmVyc2lvbklkKVwiICBjbGFzcz1cInB5LTAgcGwtNCBwci02XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiYXNzZXRzL2ljb25zL29wdGlvbnMtZGVsZXRlLnN2Z1wiIGFsdD1cIlwiIGNsYXNzPVwiaC02IHctNiBpbmxpbmUtYmxvY2sgbXItMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5EZWxldGU8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbWVudT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaW5uZXItZGl2XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGRhc2hib2FyZC1pY29uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJiYXNlVXJsICsgYXBwRGV0YWlsLmljb25cIiBvbkVycm9yID1cInRoaXMuc3JjPSdodHRwczovL3N0YXRpYy5heG9uYXRvci5jb20vc3RhdGljL2RlZmF1bHRfaWNvbnMvYXBwLnBuZydcIiBhbHQ9XCJMb2dvIGltYWdlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXBwLWluZm9cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJsb2NrIGFwcC10aXRsZS13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXBwX3RpdGxlIGZvbnQtbWVkaXVtIGxlYWRpbmctdGlnaHQgYXhvLWZvbnRcIiBbbWF0VG9vbHRpcF09XCJhcHBEZXRhaWwubmFtZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7YXBwRGV0YWlsLm5hbWV9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXBwX3ZlcnNpb24gdy1mdWxsIGxlYWRpbmctdGlnaHQgdGV4dC14c1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdiB7e2FwcERldGFpbC52ZXJzaW9uLnNwbGl0KCcuJylbMF19fS57e3BhZFplcm8oYXBwRGV0YWlsLm1pbm9yVmVyc2lvbil9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3VzdC1vcGVuIGZsZXgganVzdGlmeS1lbmQgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCBzcGFjZS14LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhICpuZ0lmPVwic2hvd0N1c3RvbWl6ZVwiIHJvdXRlckxpbms9XCJcIiBjbGFzcz1cImN1c3RvbWl6ZSB0ZXh0LWxlZnQgbGVhZGluZy10aWdodCB0ZXh0LXhzXCI+Q3VzdG9taXplPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm9wZW4tYnV0dG9uXCI+T3BlbjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Z1c2UtY2FyZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgXG4gICAgPC9kaXY+XG4gICAgPG5nLXRlbXBsYXRlICNub3RFbXB0eUFwcExpc3Q+XG4gICAgICAgIDwhLS0gaWYgYXBwIGxpc3QgaXMgZW1wdHkgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGZsZXgtYXV0byBtaW4tdy0wIHJlbGF0aXZlIGl0ZW1zLWNlbnRlclwiICNub3RFbXB0eUFwcExpc3Q+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyIGZsZXggZmxleC1jb2wgbXktYXV0byBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgbm8tYXBwLWNyZWF0ZWRcIj5cbiAgICAgICAgICAgICAgICA8aDI+Tm8gYXBwIGNyZWF0ZWQgeWV0ITwvaDI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8YXBwLWNvbW1vbi1mb290ZXIgW3Nob3dBZGRCdG5dPVwic2hvd0FkZEJ0blwiIFtzaG93VXBncmFkZUJ0bl09XCJ0cnVlXCI+PC9hcHAtY29tbW9uLWZvb3Rlcj5cbiAgICA8IS0tIDxkaXYgY2xhc3M9XCJmaXhlZCBib3R0b20tMCBmbGV4IGZsZXgtMCBpdGVtcy1jZW50ZXIganVzdGlmeS1zdGFydCB3LWZ1bGwgaC0xNCBweC00IG1kOnB4LTYgei00OSBiZy13aGl0ZSBhcHAtbGlzdC1mb290ZXJcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LW1lZGl1bSB0ZXh0LXNlY29uZGFyeVwiPkF4b25hdG9yICZjb3B5OyB7e2N1cnJlbnRZZWFyfX08L3NwYW4+XG4gICAgPC9kaXY+IC0tPlxuPC9kaXY+XG4iXX0=